<?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>225321</bug_id>
          
          <creation_ts>2021-05-03 12:00:32 -0700</creation_ts>
          <short_desc>Add Data Call ICs that don&apos;t repatch and use them in the baseline JIT</short_desc>
          <delta_ts>2021-05-18 14:30:58 -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>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=225793</see_also>
          <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="Saam Barati">saam</reporter>
          <assigned_to name="Saam Barati">saam</assigned_to>
          <cc>ews-watchlist</cc>
    
    <cc>fpizlo</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>sam</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1756257</commentid>
    <comment_count>0</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-05-03 12:00:32 -0700</bug_when>
    <thetext>...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1758585</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-05-10 12:01:22 -0700</bug_when>
    <thetext>&lt;rdar://problem/77773796&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1759105</commentid>
    <comment_count>2</comment_count>
      <attachid>428329</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-05-11 17:05:02 -0700</bug_when>
    <thetext>Created attachment 428329
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1759487</commentid>
    <comment_count>3</comment_count>
      <attachid>428441</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-05-12 18:08:57 -0700</bug_when>
    <thetext>Created attachment 428441
WIP

Still need to implement 32-bit, but let&apos;s see how x86_64 does</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1759491</commentid>
    <comment_count>4</comment_count>
      <attachid>428444</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-05-12 18:14:36 -0700</bug_when>
    <thetext>Created attachment 428444
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1759492</commentid>
    <comment_count>5</comment_count>
      <attachid>428445</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-05-12 18:23:45 -0700</bug_when>
    <thetext>Created attachment 428445
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1759726</commentid>
    <comment_count>6</comment_count>
      <attachid>428525</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-05-13 10:21:13 -0700</bug_when>
    <thetext>Created attachment 428525
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1759746</commentid>
    <comment_count>7</comment_count>
      <attachid>428533</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-05-13 11:01:59 -0700</bug_when>
    <thetext>Created attachment 428533
WIP

rebased, the patch should apply to ToT now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1759749</commentid>
    <comment_count>8</comment_count>
      <attachid>428535</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-05-13 11:04:50 -0700</bug_when>
    <thetext>Created attachment 428535
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1759772</commentid>
    <comment_count>9</comment_count>
      <attachid>428541</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-05-13 12:05:43 -0700</bug_when>
    <thetext>Created attachment 428541
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1759918</commentid>
    <comment_count>10</comment_count>
      <attachid>428581</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-05-13 17:12:15 -0700</bug_when>
    <thetext>Created attachment 428581
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1759919</commentid>
    <comment_count>11</comment_count>
      <attachid>428582</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-05-13 17:13:50 -0700</bug_when>
    <thetext>Created attachment 428582
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1760133</commentid>
    <comment_count>12</comment_count>
      <attachid>428582</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-05-14 10:39:10 -0700</bug_when>
    <thetext>Comment on attachment 428582
patch

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

&gt; Source/JavaScriptCore/jit/JITCall32_64.cpp:306
&gt; +    if (opcodeID == op_tail_call || opcodeID == op_tail_call_varargs || opcodeID == op_tail_call_forward_arguments)

lol, this should not be here...

I think this is the 32-bit crashes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1760135</commentid>
    <comment_count>13</comment_count>
      <attachid>428638</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-05-14 10:42:26 -0700</bug_when>
    <thetext>Created attachment 428638
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1760812</commentid>
    <comment_count>14</comment_count>
      <attachid>428638</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2021-05-17 11:13:52 -0700</bug_when>
    <thetext>Comment on attachment 428638
patch

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

r=me with one nit.

&gt; Source/JavaScriptCore/ChangeLog:10
&gt; +        pointer from CallLinkInfo, and indrect calling that pointer. This means that

nit -&gt; indirect</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1760857</commentid>
    <comment_count>15</comment_count>
      <attachid>428860</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-05-17 13:34:34 -0700</bug_when>
    <thetext>Created attachment 428860
patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1761299</commentid>
    <comment_count>16</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-05-18 14:04:47 -0700</bug_when>
    <thetext>Getting help from Caio on Slack. He isn&apos;t able to reproduce the failure locally. Will land for now, and we&apos;ll fix testapi on armv7 if failures are caused.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1761317</commentid>
    <comment_count>17</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-05-18 14:30:56 -0700</bug_when>
    <thetext>Committed r277680 (237881@main): &lt;https://commits.webkit.org/237881@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 428860.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>428329</attachid>
            <date>2021-05-11 17:05:02 -0700</date>
            <delta_ts>2021-05-12 18:08:57 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>107333</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvSmV0U3RyZWFtMi9KZXRTdHJlYW1Ecml2ZXIuanMKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0yL0pldFN0cmVhbURyaXZlci5q
cwkocmV2aXNpb24gMjc2OTc3KQorKysgUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0yL0pldFN0
cmVhbURyaXZlci5qcwkod29ya2luZyBjb3B5KQpAQCAtNDMsNiArNDMsOCBAQCBpZiAodHlwZW9m
IHRlc3RXb3JzdENhc2VDb3VudE1hcCA9PT0gInVuCiBpZiAodHlwZW9mIGR1bXBKU09OUmVzdWx0
cyA9PT0gInVuZGVmaW5lZCIpCiAgICAgdmFyIGR1bXBKU09OUmVzdWx0cyA9IGZhbHNlOwogCisv
L3ZhciB0ZXN0TGlzdCA9IFsiZGVsdGEtYmx1ZSIsICJlYXJsZXktYm95ZXIiLCAicmljaGFyZHMi
LCAicmF5dHJhY2UiXTsKKwogLy8gVXNlZCBmb3IgdGhlIHByb21pc2UgcmVwcmVzZW50aW5nIHRo
ZSBjdXJyZW50IGJlbmNobWFyayBydW4uCiB0aGlzLmN1cnJlbnRSZXNvbHZlID0gbnVsbDsKIHRo
aXMuY3VycmVudFJlamVjdCA9IG51bGw7CkBAIC0yNzQsNiArMjc2LDEwIEBAIGNsYXNzIERyaXZl
ciB7CiAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coYCR7Y2F0ZWdvcnl9OiAke3VpRnJpZW5k
bHlOdW1iZXIoZ2VvbWVhbihzY29yZXMpKX1gKTsKIAogICAgICAgICAgICAgY29uc29sZS5sb2co
IlxuVG90YWwgU2NvcmU6ICIsIHVpRnJpZW5kbHlOdW1iZXIoZ2VvbWVhbihhbGxTY29yZXMpKSwg
IlxuIik7CisgICAgICAgICAgICBpZiAodHlwZW9mICR2bSAhPT0gInVuZGVmaW5lZCIpIHsKKyAg
ICAgICAgICAgICAgICBjb25zb2xlLmxvZygiXG5cbnRvdGFsIGNhY2hlIGZsdXNoZXM6ICIsICR2
bS5udW1iZXJPZkNhY2hlRmx1c2hlcygpLCAiXG4iKTsKKyAgICAgICAgICAgICAgICBjb25zb2xl
LmxvZygiXG5cbnRvdGFsIE9TUiBleGl0czogIiwgJHZtLm51bWJlck9mT1NSRXhpdHMoKSwgIlxu
Iik7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KIAogICAgICAgICB0aGlzLnJlcG9ydFNjb3Jl
VG9SdW5CZW5jaG1hcmtSdW5uZXIoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3Vy
Y2VzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQJ
KHJldmlzaW9uIDI3Njk3NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAko
d29ya2luZyBjb3B5KQpAQCAtMSw0ICsxLDQgQEAKLS8vIENvcHlyaWdodCAoQykgMjAxNy0yMDE5
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoQykgMjAxNy0y
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vCiAvLyBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKIC8v
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtNDYsNiArNDYsNyBAQCBBUEkvT3BhcXVlSlNTdHJpbmcuY3BwCiAKIGFz
c2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmNwcAogYXNzZW1ibGVyL0Fzc2VtYmxlckJ1
ZmZlci5jcHAKK2Fzc2VtYmxlci9Bc3NlbWJsZXJDb21tb24uY3BwCiBhc3NlbWJsZXIvQ1BVLmNw
cAogYXNzZW1ibGVyL0pJVE9wZXJhdGlvbkxpc3QuY3BwCiBhc3NlbWJsZXIvTGlua0J1ZmZlci5j
cHAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyNzY5NzcpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjg5MSw2ICsyODkxLDcgQEAKIAkJMEY5QzAzRDQx
RTk0NzZGMDAwQ0Q5MTI1IC8qIEFpclRtcFNldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBBaXJUbXBTZXQuaDsgcGF0aCA9IGIzL2Fpci9BaXJUbXBTZXQuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5Q0FCQzYxREI1NEE3NjAwMDhFODNCIC8qIEFpclBhZElu
dGVyZmVyZW5jZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBBaXJQ
YWRJbnRlcmZlcmVuY2UuY3BwOyBwYXRoID0gYjMvYWlyL0FpclBhZEludGVyZmVyZW5jZS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOUNBQkM3MURCNTRBNzYwMDA4RTgzQiAv
KiBBaXJQYWRJbnRlcmZlcmVuY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
QWlyUGFkSW50ZXJmZXJlbmNlLmg7IHBhdGggPSBiMy9haXIvQWlyUGFkSW50ZXJmZXJlbmNlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGOUQwODhBMjY0MUNDN0UwMDQxRDcwMSAv
KiBBc3NlbWJsZXJDb21tb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gQXNzZW1ibGVyQ29tbW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5
RDMzNkUxNjVEQkI4RDAwNUFEMzg3IC8qIERpc2Fzc2VtYmxlci5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBEaXNhc3NlbWJsZXIuY3BwOyBwYXRoID0gZGlzYXNzZW1i
bGVyL0Rpc2Fzc2VtYmxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOUQz
Mzk0MTdGRkM0RTYwMDczQzJCQyAvKiBERkdGbHVzaGVkQXQuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBuYW1lID0gREZHRmx1c2hlZEF0LmNwcDsgcGF0aCA9IGRmZy9ERkdGbHVz
aGVkQXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjlEMzM5NTE3RkZDNEU2
MDA3M0MyQkMgLyogREZHRmx1c2hlZEF0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IERGR0ZsdXNoZWRBdC5oOyBwYXRoID0gZGZnL0RGR0ZsdXNoZWRBdC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtODQxNiw2ICs4NDE3LDcgQEAKIAkJCQk4NkFERDE0MzBGRERF
QTk4MDAwNkZGQ0MgLyogQVJNdjdSZWdpc3RlcnMuaCAqLywKIAkJCQkwRkE2RjM5NjIwQ0NCN0E2
MDBBMDNEQ0QgLyogQXNzZW1ibGVyQnVmZmVyLmNwcCAqLywKIAkJCQk5Njg4Q0IxMzBFRDEyQjRF
MDAxRDY0OUYgLyogQXNzZW1ibGVyQnVmZmVyLmggKi8sCisJCQkJMEY5RDA4OEEyNjQxQ0M3RTAw
NDFENzAxIC8qIEFzc2VtYmxlckNvbW1vbi5jcHAgKi8sCiAJCQkJNDNDMzkyQUExQzNCRUIwMDAw
MjQxRjUzIC8qIEFzc2VtYmxlckNvbW1vbi5oICovLAogCQkJCTg2RTExNkIwMEZFNzVBQzgwMEI1
MTJCQyAvKiBDb2RlTG9jYXRpb24uaCAqLywKIAkJCQk1MjMzNTYyODIyNUVCOEU5MDAyNjhCRDIg
LyogQ1BVLmNwcCAqLywKQEAgLTg0MzksOCArODQ0MSw4IEBACiAJCQkJODZDNTY4REUxMUEyMTNF
RTAwMDdGN0YwIC8qIE1hY3JvQXNzZW1ibGVyTUlQUy5oICovLAogCQkJCUZFNjhDNjM1MUI5MERE
RDkwMDQyQkNCMyAvKiBNYWNyb0Fzc2VtYmxlclByaW50ZXIuY3BwICovLAogCQkJCUZFNjhDNjM2
MUI5MERERDkwMDQyQkNCMyAvKiBNYWNyb0Fzc2VtYmxlclByaW50ZXIuaCAqLywKLQkJCQk4NjAx
NjFFMDBGM0E4M0MxMDBGODQ3MTAgLyogTWFjcm9Bc3NlbWJsZXJYODYuaCAqLywKIAkJCQk4NjAx
NjFFMTBGM0E4M0MxMDBGODQ3MTAgLyogTWFjcm9Bc3NlbWJsZXJYODZfNjQuaCAqLywKKwkJCQk4
NjAxNjFFMDBGM0E4M0MxMDBGODQ3MTAgLyogTWFjcm9Bc3NlbWJsZXJYODYuaCAqLywKIAkJCQlB
N0E0QUUwNzE3OTczQjI2MDA1NjEyQjEgLyogTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uY3BwICov
LAogCQkJCTg2MDE2MUUyMEYzQTgzQzEwMEY4NDcxMCAvKiBNYWNyb0Fzc2VtYmxlclg4NkNvbW1v
bi5oICovLAogCQkJCTY1ODYwMTc3MTg1QThGNUUwMDAzMEVFRSAvKiBNYXhGcmFtZUV4dGVudEZv
clNsb3dQYXRoQ2FsbC5oICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci9BUk02NEFzc2VtYmxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9h
c3NlbWJsZXIvQVJNNjRBc3NlbWJsZXIuaAkocmV2aXNpb24gMjc2OTc3KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BUk02NEFzc2VtYmxlci5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yNjAwLDYgKzI2MDAsNyBAQCBwdWJsaWM6CiAgICAgICAgIGludCBpbnNuID0gZGF0YUNhY2hl
WmVyb1ZpcnR1YWxBZGRyZXNzKEFSTTY0UmVnaXN0ZXJzOjp6cik7CiAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKHJvdW5kVXBUb011bHRpcGxlT2Y8aW5zdHJ1Y3Rpb25TaXplPih3aGVyZSkgPT0gd2hl
cmUpOwogICAgICAgICBwZXJmb3JtSklUTWVtY3B5KHdoZXJlLCAmaW5zbiwgc2l6ZW9mKGludCkp
OworICAgICAgICBXVEY6OmF0b21pY0V4Y2hhbmdlQWRkKCZnX251bWJlck9mUmVwbGFjZVdpdGhW
TUhhbHRzLCAxKTsKICAgICAgICAgY2FjaGVGbHVzaCh3aGVyZSwgc2l6ZW9mKGludCkpOwogICAg
IH0KIApAQCAtMjYxOSw2ICsyNjIwLDcgQEAgcHVibGljOgogICAgICAgICBpbnQgaW5zbiA9IHVu
Y29uZGl0aW9uYWxCcmFuY2hJbW1lZGlhdGUoZmFsc2UsIHN0YXRpY19jYXN0PGludD4ob2Zmc2V0
KSk7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJvdW5kVXBUb011bHRpcGxlT2Y8aW5zdHJ1Y3Rp
b25TaXplPih3aGVyZSkgPT0gd2hlcmUpOwogICAgICAgICBwZXJmb3JtSklUTWVtY3B5KHdoZXJl
LCAmaW5zbiwgc2l6ZW9mKGludCkpOworICAgICAgICBXVEY6OmF0b21pY0V4Y2hhbmdlQWRkKCZn
X251bWJlck9mUmVwbGFjZVdpdGhKdW1wcywgMSk7CiAgICAgICAgIGNhY2hlRmx1c2god2hlcmUs
IHNpemVvZihpbnQpKTsKICAgICB9CiAgICAgCkBAIC0yNjUwLDYgKzI2NTIsNyBAQCBwdWJsaWM6
CiAgICAgICAgICAgICBpbnQgaW5zbiA9IGxvYWRTdG9yZVJlZ2lzdGVyVW5zaWduZWRJbW1lZGlh
dGUoTWVtT3BTaXplXzY0LCBmYWxzZSwgTWVtT3BfTE9BRCwgZW5jb2RlUG9zaXRpdmVJbW1lZGlh
dGU8NjQ+KGltbTEyKSwgcm4sIHJkKTsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJvdW5k
VXBUb011bHRpcGxlT2Y8aW5zdHJ1Y3Rpb25TaXplPih3aGVyZSkgPT0gd2hlcmUpOwogICAgICAg
ICAgICAgcGVyZm9ybUpJVE1lbWNweSh3aGVyZSwgJmluc24sIHNpemVvZihpbnQpKTsKKyAgICAg
ICAgICAgIFdURjo6YXRvbWljRXhjaGFuZ2VBZGQoJmdfbnVtYmVyT2ZSZXBsYWNlV2l0aExvYWRz
LCAxKTsKICAgICAgICAgICAgIGNhY2hlRmx1c2god2hlcmUsIHNpemVvZihpbnQpKTsKICAgICAg
ICAgfQogI2lmIEFTU0VSVF9FTkFCTEVECkBAIC0yNjg1LDYgKzI2ODgsNyBAQCBwdWJsaWM6CiAg
ICAgICAgICAgICBpbnQgaW5zbiA9IGFkZFN1YnRyYWN0SW1tZWRpYXRlKERhdGFzaXplXzY0LCBB
ZGRPcF9BREQsIERvbnRTZXRGbGFncywgMCwgaW1tMTIgKiBzaXplb2Yodm9pZCopLCBybiwgcnQp
OwogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQocm91bmRVcFRvTXVsdGlwbGVPZjxpbnN0cnVj
dGlvblNpemU+KHdoZXJlKSA9PSB3aGVyZSk7CiAgICAgICAgICAgICBwZXJmb3JtSklUTWVtY3B5
KHdoZXJlLCAmaW5zbiwgc2l6ZW9mKGludCkpOworICAgICAgICAgICAgV1RGOjphdG9taWNFeGNo
YW5nZUFkZCgmZ19udW1iZXJPZlJlcGxhY2VXaXRoQWRkcmVzc0NvbXB1dGF0aW9ucywgMSk7CiAg
ICAgICAgICAgICBjYWNoZUZsdXNoKHdoZXJlLCBzaXplb2YoaW50KSk7CiAgICAgICAgIH0KICNp
ZiBBU1NFUlRfRU5BQkxFRApAQCAtMjcyMSw4ICsyNzI1LDEwIEBAIHB1YmxpYzoKICAgICAgICAg
UkVMRUFTRV9BU1NFUlQocm91bmRVcFRvTXVsdGlwbGVPZjxpbnN0cnVjdGlvblNpemU+KGFkZHJl
c3MpID09IGFkZHJlc3MpOwogICAgICAgICBwZXJmb3JtSklUTWVtY3B5KGFkZHJlc3MsIGJ1ZmZl
ciwgc2l6ZW9mKGludCkgKiAzKTsKIAotICAgICAgICBpZiAoZmx1c2gpCisgICAgICAgIGlmIChm
bHVzaCkgeworICAgICAgICAgICAgV1RGOjphdG9taWNFeGNoYW5nZUFkZCgmZ19udW1iZXJPZlNl
dFBvaW50ZXJzLCAxKTsKICAgICAgICAgICAgIGNhY2hlRmx1c2goYWRkcmVzcywgc2l6ZW9mKGlu
dCkgKiAzKTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIHN0YXRpYyB2b2lkIHJlcGF0Y2hJbnQz
Mih2b2lkKiB3aGVyZSwgaW50MzJfdCB2YWx1ZSkKQEAgLTI3NDksNiArMjc1NSw3IEBAIHB1Ymxp
YzoKICAgICAgICAgUkVMRUFTRV9BU1NFUlQocm91bmRVcFRvTXVsdGlwbGVPZjxpbnN0cnVjdGlv
blNpemU+KHdoZXJlKSA9PSB3aGVyZSk7CiAgICAgICAgIHBlcmZvcm1KSVRNZW1jcHkod2hlcmUs
ICZidWZmZXIsIHNpemVvZihpbnQpICogMik7CiAKKyAgICAgICAgV1RGOjphdG9taWNFeGNoYW5n
ZUFkZCgmZ19udW1iZXJPZlJlcGF0Y2hJbnQzMnMsIDEpOwogICAgICAgICBjYWNoZUZsdXNoKHdo
ZXJlLCBzaXplb2YoaW50KSAqIDIpOwogICAgIH0KIApAQCAtMjc5Miw2ICsyNzk5LDcgQEAgcHVi
bGljOgogICAgIHN0YXRpYyB2b2lkIHJlbGlua0p1bXAodm9pZCogZnJvbSwgdm9pZCogdG8pCiAg
ICAgewogICAgICAgICByZWxpbmtKdW1wT3JDYWxsPEJyYW5jaFR5cGVfSk1QPihyZWludGVycHJl
dF9jYXN0PGludCo+KGZyb20pLCByZWludGVycHJldF9jYXN0PGNvbnN0IGludCo+KGZyb20pLCB0
byk7CisgICAgICAgIFdURjo6YXRvbWljRXhjaGFuZ2VBZGQoJmdfbnVtYmVyT2ZSZWxpbmtKdW1w
cywgMSk7CiAgICAgICAgIGNhY2hlRmx1c2goZnJvbSwgc2l6ZW9mKGludCkpOwogICAgIH0KICAg
ICAKQEAgLTI4MDMsNiArMjgxMSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCByZWxpbmtD
YWxsKHZvaWQqIGZyb20sIHZvaWQqIHRvKQogICAgIHsKICAgICAgICAgcmVsaW5rSnVtcE9yQ2Fs
bDxCcmFuY2hUeXBlX0NBTEw+KHJlaW50ZXJwcmV0X2Nhc3Q8aW50Kj4oZnJvbSkgLSAxLCByZWlu
dGVycHJldF9jYXN0PGNvbnN0IGludCo+KGZyb20pIC0gMSwgdG8pOworICAgICAgICBXVEY6OmF0
b21pY0V4Y2hhbmdlQWRkKCZnX251bWJlck9mUmVsaW5rQ2FsbHMsIDEpOwogICAgICAgICBjYWNo
ZUZsdXNoKHJlaW50ZXJwcmV0X2Nhc3Q8aW50Kj4oZnJvbSkgLSAxLCBzaXplb2YoaW50KSk7CiAg
ICAgfQogCkBAIC0yODQ2LDYgKzI4NTUsNyBAQCBwdWJsaWM6CiAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKHJvdW5kVXBUb011bHRpcGxlT2Y8aW5zdHJ1Y3Rpb25TaXplPih3aGVyZSkgPT0gd2hlcmUp
OwogICAgICAgICBwZXJmb3JtSklUTWVtY3B5KHdoZXJlLCAmaW5zbiwgc2l6ZW9mKGludCkpOwog
CisgICAgICAgIFdURjo6YXRvbWljRXhjaGFuZ2VBZGQoJmdfbnVtYmVyT2ZSZXBhdGNoQ29tcGFj
dHMsIDEpOwogICAgICAgICBjYWNoZUZsdXNoKHdoZXJlLCBzaXplb2YoaW50KSk7CiAgICAgfQog
CkBAIC0yODYwLDYgKzI4NzAsNyBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgdm9pZCBjYWNoZUZs
dXNoKHZvaWQqIGNvZGUsIHNpemVfdCBzaXplKQogICAgIHsKKyAgICAgICAgV1RGOjphdG9taWNF
eGNoYW5nZUFkZCgmZ19udW1iZXJPZkNhY2hlRmx1c2hlcywgMSk7CiAjaWYgT1MoREFSV0lOKQog
ICAgICAgICBzeXNfY2FjaGVfY29udHJvbChrQ2FjaGVGdW5jdGlvblByZXBhcmVGb3JFeGVjdXRp
b24sIGNvZGUsIHNpemUpOwogI2VsaWYgT1MoRlVDSFNJQSkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9hc3NlbWJsZXIvQVJNNjRFQXNzZW1ibGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BUk02NEVBc3NlbWJsZXIuaAkocmV2aXNpb24gMjc2
OTc3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BUk02NEVBc3NlbWJsZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtMzk2LDggKzM5NiwxMCBAQCBwdWJsaWM6CiAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKHJvdW5kVXBUb011bHRpcGxlT2Y8aW5zdHJ1Y3Rpb25TaXplPihhZGRyZXNz
KSA9PSBhZGRyZXNzKTsKICAgICAgICAgcGVyZm9ybUpJVE1lbWNweShhZGRyZXNzLCBidWZmZXIs
IHNpemVvZihpbnQpICogNCk7CiAKLSAgICAgICAgaWYgKGZsdXNoKQorICAgICAgICBpZiAoZmx1
c2gpIHsKKyAgICAgICAgICAgIFdURjo6YXRvbWljRXhjaGFuZ2VBZGQoJmdfbnVtYmVyT2ZTZXRQ
b2ludGVycywgMSk7CiAgICAgICAgICAgICBjYWNoZUZsdXNoKGFkZHJlc3MsIHNpemVvZihpbnQp
ICogNCk7CisgICAgICAgIH0KICAgICB9CiAKICAgICBzdGF0aWMgdm9pZCogcmVhZFBvaW50ZXIo
dm9pZCogd2hlcmUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fic3Ry
YWN0TWFjcm9Bc3NlbWJsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaAkocmV2aXNpb24gMjc2OTc3KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTk3MSw2ICs5NzEsMTIgQEAgcHVibGljOgogICAgICAgICBtX2xp
bmtUYXNrcy5hcHBlbmQoY3JlYXRlU2hhcmVkVGFzazx2b2lkKExpbmtCdWZmZXImKT4oZnVuY3Rv
cikpOwogICAgIH0KIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBh
ZGRMYXRlTGlua1Rhc2soY29uc3QgRnVuY3RvciYgZnVuY3RvcikgLy8gUnVuIGFmdGVyIGFsbCBs
aW5rIHRhc2tzCisgICAgeworICAgICAgICBtX2xhdGVMaW5rVGFza3MuYXBwZW5kKGNyZWF0ZVNo
YXJlZFRhc2s8dm9pZChMaW5rQnVmZmVyJik+KGZ1bmN0b3IpKTsKKyAgICB9CisKICNpZiBDT01Q
SUxFUihHQ0MpCiAgICAgLy8gV29ya2Fyb3VuZCBmb3IgR0NDIGRlbWFuZGluZyB0aGF0IG1lbWNw
eSAibXVzdCBiZSB0aGUgbmFtZSBvZiBhIGZ1bmN0aW9uIHdpdGggZXh0ZXJuYWwgbGlua2FnZSIu
CiAgICAgc3RhdGljIHZvaWQqIG1lbWNweSh2b2lkKiBkc3QsIGNvbnN0IHZvaWQqIHNyYywgc2l6
ZV90IHNpemUpCkBAIC0xMTE0LDYgKzExMjAsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgYm9vbCBtX2Fs
bG93U2NyYXRjaFJlZ2lzdGVyIHsgdHJ1ZSB9OwogCiAgICAgVmVjdG9yPFJlZlB0cjxTaGFyZWRU
YXNrPHZvaWQoTGlua0J1ZmZlciYpPj4+IG1fbGlua1Rhc2tzOworICAgIFZlY3RvcjxSZWZQdHI8
U2hhcmVkVGFzazx2b2lkKExpbmtCdWZmZXImKT4+PiBtX2xhdGVMaW5rVGFza3M7CiAKICAgICBm
cmllbmQgY2xhc3MgTGlua0J1ZmZlcjsKIH07IC8vIGNsYXNzIEFic3RyYWN0TWFjcm9Bc3NlbWJs
ZXIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQXNzZW1ibGVyQ29tbW9u
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fzc2Vt
YmxlckNvbW1vbi5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fz
c2VtYmxlci9Bc3NlbWJsZXJDb21tb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDQg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiQXNzZW1ibGVyQ29tbW9uLmgiCisKK25hbWVzcGFjZSBKU0MgeworCit1aW50NjRfdCBnX251
bWJlck9mQ2FjaGVGbHVzaGVzOwordWludDY0X3QgZ19udW1iZXJPZlJlcGxhY2VXaXRoVk1IYWx0
czsKK3VpbnQ2NF90IGdfbnVtYmVyT2ZSZXBsYWNlV2l0aEp1bXBzOwordWludDY0X3QgZ19udW1i
ZXJPZlJlcGxhY2VXaXRoTG9hZHM7Cit1aW50NjRfdCBnX251bWJlck9mUmVwbGFjZVdpdGhBZGRy
ZXNzQ29tcHV0YXRpb25zOwordWludDY0X3QgZ19udW1iZXJPZlNldFBvaW50ZXJzOwordWludDY0
X3QgZ19udW1iZXJPZlJlcGF0Y2hJbnQzMnM7Cit1aW50NjRfdCBnX251bWJlck9mUmVsaW5rSnVt
cHM7Cit1aW50NjRfdCBnX251bWJlck9mUmVsaW5rQ2FsbHM7Cit1aW50NjRfdCBnX251bWJlck9m
UmVwYXRjaENvbXBhY3RzOwordWludDY0X3QgZ19udW1iZXJPZk5ld0NvZGVGaW5hbGl6YXRpb25z
OwordWludDY0X3QgZ19udW1iZXJPZkluUGxhY2VGaW5hbGl6YXRpb25zOworCit9IC8vIG5hbWVz
cGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9Bc3NlbWJs
ZXJDb21tb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVy
L0Fzc2VtYmxlckNvbW1vbi5oCShyZXZpc2lvbiAyNzY5NzcpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL0Fzc2VtYmxlckNvbW1vbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOTYs
NCArMjk2LDE3IEBAIHByaXZhdGU6CiAgICAgaW50IG1fdmFsdWU7CiB9OwogCitKU19FWFBPUlRf
UFJJVkFURSBleHRlcm4gdWludDY0X3QgZ19udW1iZXJPZkNhY2hlRmx1c2hlczsKK0pTX0VYUE9S
VF9QUklWQVRFIGV4dGVybiB1aW50NjRfdCBnX251bWJlck9mUmVwbGFjZVdpdGhWTUhhbHRzOwor
SlNfRVhQT1JUX1BSSVZBVEUgZXh0ZXJuIHVpbnQ2NF90IGdfbnVtYmVyT2ZSZXBsYWNlV2l0aEp1
bXBzOworSlNfRVhQT1JUX1BSSVZBVEUgZXh0ZXJuIHVpbnQ2NF90IGdfbnVtYmVyT2ZSZXBsYWNl
V2l0aExvYWRzOworSlNfRVhQT1JUX1BSSVZBVEUgZXh0ZXJuIHVpbnQ2NF90IGdfbnVtYmVyT2ZS
ZXBsYWNlV2l0aEFkZHJlc3NDb21wdXRhdGlvbnM7CitKU19FWFBPUlRfUFJJVkFURSBleHRlcm4g
dWludDY0X3QgZ19udW1iZXJPZlNldFBvaW50ZXJzOworSlNfRVhQT1JUX1BSSVZBVEUgZXh0ZXJu
IHVpbnQ2NF90IGdfbnVtYmVyT2ZSZXBhdGNoSW50MzJzOworSlNfRVhQT1JUX1BSSVZBVEUgZXh0
ZXJuIHVpbnQ2NF90IGdfbnVtYmVyT2ZSZWxpbmtKdW1wczsKK0pTX0VYUE9SVF9QUklWQVRFIGV4
dGVybiB1aW50NjRfdCBnX251bWJlck9mUmVsaW5rQ2FsbHM7CitKU19FWFBPUlRfUFJJVkFURSBl
eHRlcm4gdWludDY0X3QgZ19udW1iZXJPZlJlcGF0Y2hDb21wYWN0czsKK0pTX0VYUE9SVF9QUklW
QVRFIGV4dGVybiB1aW50NjRfdCBnX251bWJlck9mTmV3Q29kZUZpbmFsaXphdGlvbnM7CitKU19F
WFBPUlRfUFJJVkFURSBleHRlcm4gdWludDY0X3QgZ19udW1iZXJPZkluUGxhY2VGaW5hbGl6YXRp
b25zOworCiB9IC8vIG5hbWVzcGFjZSBKU0MuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL0xpbmtCdWZmZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5jcHAJKHJldmlzaW9uIDI3Njk3NykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQzMiw2ICs0MzIsNyBAQCB2b2lkIExpbmtCdWZmZXI6OmxpbmtDb2RlKE1hY3JvQXNzZW1i
bGVyCiAjZW5kaWYgLy8gIUVOQUJMRShCUkFOQ0hfQ09NUEFDVElPTikKIAogICAgIG1fbGlua1Rh
c2tzID0gV1RGTW92ZShtYWNyb0Fzc2VtYmxlci5tX2xpbmtUYXNrcyk7CisgICAgbV9sYXRlTGlu
a1Rhc2tzID0gV1RGTW92ZShtYWNyb0Fzc2VtYmxlci5tX2xhdGVMaW5rVGFza3MpOwogfQogCiB2
b2lkIExpbmtCdWZmZXI6OmFsbG9jYXRlKE1hY3JvQXNzZW1ibGVyJiBtYWNyb0Fzc2VtYmxlciwg
SklUQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQpAQCAtNDY0LDYgKzQ2NSw4IEBAIHZvaWQgTGlu
a0J1ZmZlcjo6cGVyZm9ybUZpbmFsaXphdGlvbigpCiB7CiAgICAgZm9yIChhdXRvJiB0YXNrIDog
bV9saW5rVGFza3MpCiAgICAgICAgIHRhc2stPnJ1bigqdGhpcyk7CisgICAgZm9yIChhdXRvJiB0
YXNrIDogbV9sYXRlTGlua1Rhc2tzKQorICAgICAgICB0YXNrLT5ydW4oKnRoaXMpOwogCiAjaWZu
ZGVmIE5ERUJVRwogICAgIEFTU0VSVChtX2lzSnVtcElzbGFuZCB8fCAhaXNDb21waWxhdGlvblRo
cmVhZCgpKTsKQEAgLTQ3MSw2ICs0NzQsMTEgQEAgdm9pZCBMaW5rQnVmZmVyOjpwZXJmb3JtRmlu
YWxpemF0aW9uKCkKICAgICBBU1NFUlQoaXNWYWxpZCgpKTsKICAgICBtX2NvbXBsZXRlZCA9IHRy
dWU7CiAjZW5kaWYKKworICAgIGlmIChtX2V4ZWN1dGFibGVNZW1vcnkpCisgICAgICAgIFdURjo6
YXRvbWljRXhjaGFuZ2VBZGQoJmdfbnVtYmVyT2ZOZXdDb2RlRmluYWxpemF0aW9ucywgMSk7Cisg
ICAgZWxzZQorICAgICAgICBXVEY6OmF0b21pY0V4Y2hhbmdlQWRkKCZnX251bWJlck9mSW5QbGFj
ZUZpbmFsaXphdGlvbnMsIDEpOwogICAgIAogICAgIE1hY3JvQXNzZW1ibGVyOjpjYWNoZUZsdXNo
KGNvZGUoKSwgbV9zaXplKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvTGlua0J1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3Nl
bWJsZXIvTGlua0J1ZmZlci5oCShyZXZpc2lvbiAyNzY5NzcpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzc1LDYgKzM3
NSw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2FscmVhZHlEaXNhc3NlbWJsZWQgeyBmYWxzZSB9
OwogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxMaW5rQnVmZmVyUHRyVGFnPiBtX2NvZGU7CiAg
ICAgVmVjdG9yPFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoTGlua0J1ZmZlciYpPj4+IG1fbGlua1Rh
c2tzOworICAgIFZlY3RvcjxSZWZQdHI8U2hhcmVkVGFzazx2b2lkKExpbmtCdWZmZXImKT4+PiBt
X2xhdGVMaW5rVGFza3M7CiB9OwogCiAjaWYgT1MoTElOVVgpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCShyZXZpc2lvbiAyNzY5NzcpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE1ODAsMTEgKzE1ODAsNiBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlSW1w
bChBY2Nlc3NHZW5lCiAgICAgICAgIC8vIFN0dWZmIGZvciBjdXN0b20gZ2V0dGVycy9zZXR0ZXJz
LgogICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgb3BlcmF0aW9uQ2FsbDsKIAotICAgICAgICAv
LyBTdHVmZiBmb3IgSlMgZ2V0dGVycy9zZXR0ZXJzLgotICAgICAgICBDQ2FsbEhlbHBlcnM6OkRh
dGFMYWJlbFB0ciBhZGRyZXNzT2ZMaW5rRnVuY3Rpb25DaGVjazsKLSAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpDYWxsIGZhc3RQYXRoQ2FsbDsKLSAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIHNsb3dQ
YXRoQ2FsbDsKLQogICAgICAgICAvLyBUaGlzIGFsc28gZG9lcyB0aGUgbmVjZXNzYXJ5IGNhbGN1
bGF0aW9ucyBvZiB3aGV0aGVyIG9yIG5vdCB3ZSdyZSBhbgogICAgICAgICAvLyBleGNlcHRpb24g
aGFuZGxpbmcgY2FsbCBzaXRlLgogICAgICAgICBBY2Nlc3NHZW5lcmF0aW9uU3RhdGU6OlNwaWxs
U3RhdGUgc3BpbGxTdGF0ZSA9IHN0YXRlLnByZXNlcnZlTGl2ZVJlZ2lzdGVyc1RvU3RhY2tGb3JD
YWxsKCk7CkBAIC0xNjA4LDYgKzE2MDMsMTEgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZUlt
cGwoQWNjZXNzR2VuZQogICAgICAgICAgICAgQVNTRVJUKGJhc2VHUFIgIT0gbG9hZGVkVmFsdWVH
UFIpOwogICAgICAgICAgICAgQVNTRVJUKG1fdHlwZSAhPSBTZXR0ZXIgfHwgdmFsdWVSZWdzUGF5
bG9hZEdQUiAhPSBsb2FkZWRWYWx1ZUdQUik7CiAKKyAgICAgICAgICAgIC8vIFN0dWZmIGZvciBK
UyBnZXR0ZXJzL3NldHRlcnMuCisgICAgICAgICAgICAvL0NDYWxsSGVscGVyczo6RGF0YUxhYmVs
UHRyIGFkZHJlc3NPZkxpbmtGdW5jdGlvbkNoZWNrOworICAgICAgICAgICAgLy9DQ2FsbEhlbHBl
cnM6OkNhbGwgc2xvd1BhdGhDYWxsOworCisKICAgICAgICAgICAgIC8vIENyZWF0ZSBhIEpTIGNh
bGwgdXNpbmcgYSBKUyBjYWxsIGlubGluZSBjYWNoZS4gQXNzdW1lIHRoYXQ6CiAgICAgICAgICAg
ICAvLwogICAgICAgICAgICAgLy8gLSBTUCBpcyBhbGlnbmVkIGFuZCByZXByZXNlbnRzIHRoZSBl
eHRlbnQgb2YgdGhlIGNhbGxpbmcgY29tcGlsZXIncyBzdGFjayB1c2FnZS4KQEAgLTE3MDEsMjQg
KzE3MDEsMjQgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZUltcGwoQWNjZXNzR2VuZQogICAg
ICAgICAgICAgICAgICAgICAgICAgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdU
aGlzKDEpLm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSkpOwogICAgICAgICAgICAgfQogCi0g
ICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgc2xvd0Nhc2UgPSBqaXQuYnJhbmNoUHRyV2l0
aFBhdGNoKAotICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Tm90RXF1YWwsIGxvYWRlZFZh
bHVlR1BSLCBhZGRyZXNzT2ZMaW5rRnVuY3Rpb25DaGVjaywKLSAgICAgICAgICAgICAgICBDQ2Fs
bEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobnVsbHB0cikpOworICAgICAgICAgICAgYXV0byBmYXN0
UGF0aFN0YXJ0ID0gaml0LmxhYmVsKCk7CisgICAgICAgICAgICBhdXRvIHNsb3dDYXNlID0gQ2Fs
bExpbmtJbmZvOjplbWl0RmFzdFBhdGgoaml0LCBsb2FkZWRWYWx1ZUdQUiwgR1BSSW5mbzo6cmVn
VDIsICphY2Nlc3MuY2FsbExpbmtJbmZvKCksIEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChjb2Rl
QmxvY2stPmppdFR5cGUoKSkgPyBDYWxsTGlua0luZm86OlVzZURhdGFJQzo6Tm8gOiBDYWxsTGlu
a0luZm86OlVzZURhdGFJQzo6WWVzKTsKKyAgICAgICAgICAgIGF1dG8gZG9uZUxvY2F0aW9uID0g
aml0LmxhYmVsKCk7CiAKLSAgICAgICAgICAgIGZhc3RQYXRoQ2FsbCA9IGppdC5uZWFyQ2FsbCgp
OwogICAgICAgICAgICAgaWYgKG1fdHlwZSA9PSBHZXR0ZXIpCiAgICAgICAgICAgICAgICAgaml0
LnNldHVwUmVzdWx0cyh2YWx1ZVJlZ3MpOwogICAgICAgICAgICAgZG9uZS5hcHBlbmQoaml0Lmp1
bXAoKSk7CiAKICAgICAgICAgICAgIHNsb3dDYXNlLmxpbmsoJmppdCk7CisgICAgICAgICAgICBh
dXRvIHNsb3dQYXRoU3RhcnQgPSBqaXQubGFiZWwoKTsKICAgICAgICAgICAgIGppdC5tb3ZlKGxv
YWRlZFZhbHVlR1BSLCBHUFJJbmZvOjpyZWdUMCk7CiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKICAg
ICAgICAgICAgIC8vIFdlICphbHdheXMqIGtub3cgdGhhdCB0aGUgZ2V0dGVyL3NldHRlciwgaWYg
bm9uLW51bGwsIGlzIGEgY2VsbC4KICAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLCBHUFJJbmZvOjpyZWdUMSk7CiAjZW5kaWYK
LSAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihhY2Nlc3Mu
Y2FsbExpbmtJbmZvKCkpLCBHUFJJbmZvOjpyZWdUMik7CiAgICAgICAgICAgICBqaXQubW92ZShD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoZ2xvYmFsT2JqZWN0KSwgR1BSSW5mbzo6cmVnVDMp
OwotICAgICAgICAgICAgc2xvd1BhdGhDYWxsID0gaml0Lm5lYXJDYWxsKCk7CisgICAgICAgICAg
ICBDYWxsTGlua0luZm86OmVtaXRTbG93UGF0aCh2bSwgaml0LCAqYWNjZXNzLmNhbGxMaW5rSW5m
bygpKTsKKyAgICAgICAgICAgIC8vc2xvd1BhdGhDYWxsID0gaml0Lm5lYXJDYWxsKCk7CiAgICAg
ICAgICAgICBpZiAobV90eXBlID09IEdldHRlcikKICAgICAgICAgICAgICAgICBqaXQuc2V0dXBS
ZXN1bHRzKHZhbHVlUmVncyk7CiAgICAgICAgICAgICBkb25lLmFwcGVuZChqaXQuanVtcCgpKTsK
QEAgLTE3MzUsMTUgKzE3MzUsMTUgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZUltcGwoQWNj
ZXNzR2VuZQogICAgICAgICAgICAgYm9vbCBjYWxsSGFzUmV0dXJuVmFsdWUgPSBpc0dldHRlcigp
OwogICAgICAgICAgICAgcmVzdG9yZUxpdmVSZWdpc3RlcnNGcm9tU3RhY2tGb3JDYWxsKHNwaWxs
U3RhdGUsIGNhbGxIYXNSZXR1cm5WYWx1ZSk7CiAKLSAgICAgICAgICAgIGppdC5hZGRMaW5rVGFz
ayhbPSwgJnZtXSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgeworICAgICAgICAgICAgaml0LmFk
ZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewogICAgICAgICAgICAgICAg
IHRoaXMtPmFzPEdldHRlclNldHRlckFjY2Vzc0Nhc2U+KCkuY2FsbExpbmtJbmZvKCktPnNldENh
bGxMb2NhdGlvbnMoCi0gICAgICAgICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50
ZXJuYWxQdHJUYWc+KGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPEpTSW50ZXJuYWxQdHJU
YWc+KHNsb3dQYXRoQ2FsbCkpLAotICAgICAgICAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJl
bDxKU0ludGVybmFsUHRyVGFnPihsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRh
Zz4oYWRkcmVzc09mTGlua0Z1bmN0aW9uQ2hlY2spKSwKLSAgICAgICAgICAgICAgICAgICAgbGlu
a0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8SlNJbnRlcm5hbFB0clRhZz4oZmFzdFBhdGhDYWxs
KSk7Ci0KLSAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoCi0gICAgICAgICAgICAgICAg
ICAgIHNsb3dQYXRoQ2FsbCwKLSAgICAgICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8
SklUVGh1bmtQdHJUYWc+KHZtLmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcikuY29k
ZSgpKSk7CisgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVy
bmFsUHRyVGFnPihmYXN0UGF0aFN0YXJ0KSwKKyAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZl
ci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KHNsb3dQYXRoU3RhcnQpLAorICAgICAgICAg
ICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oZG9uZUxv
Y2F0aW9uKSk7CisKKyAgICAgICAgICAgICAgICAvL2xpbmtCdWZmZXIubGluaygKKyAgICAgICAg
ICAgICAgICAvLyAgICBzbG93UGF0aENhbGwsCisgICAgICAgICAgICAgICAgLy8gICAgQ29kZUxv
Y2F0aW9uTGFiZWw8SklUVGh1bmtQdHJUYWc+KHZtLmdldENUSVN0dWIobGlua0NhbGxUaHVua0dl
bmVyYXRvcikuY29kZSgpKSk7CiAgICAgICAgICAgICB9KTsKICAgICAgICAgfSBlbHNlIHsKICAg
ICAgICAgICAgIEFTU0VSVChtX3R5cGUgPT0gQ3VzdG9tVmFsdWVHZXR0ZXIgfHwgbV90eXBlID09
IEN1c3RvbUFjY2Vzc29yR2V0dGVyIHx8IG1fdHlwZSA9PSBDdXN0b21WYWx1ZVNldHRlciB8fCBt
X3R5cGUgPT0gQ3VzdG9tQWNjZXNzb3JTZXR0ZXIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAJKHJldmlzaW9uIDI3Njk3NykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yNiwxMiArMjYsMTcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRl
ICJDYWxsTGlua0luZm8uaCIKIAorI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyUHJpbnRlci5oIgor
I2luY2x1ZGUgIkNDYWxsSGVscGVycy5oIgogI2luY2x1ZGUgIkNhbGxGcmFtZVNodWZmbGVEYXRh
LmgiCiAjaW5jbHVkZSAiRnVuY3Rpb25Db2RlQmxvY2suaCIKICNpbmNsdWRlICJKU0NlbGxJbmxp
bmVzLmgiCiAjaW5jbHVkZSAiT3Bjb2RlLmgiCisjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgogI2lu
Y2x1ZGUgIlJlcGF0Y2guaCIKKyNpbmNsdWRlICJUaHVua0dlbmVyYXRvcnMuaCIKICNpbmNsdWRl
IDx3dGYvTGlzdER1bXAuaD4KKyNpbmNsdWRlICJEaXNhbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVy
VXNhZ2UuaCIKIAogI2lmIEVOQUJMRShKSVQpCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTEwMiw0NyAr
MTA3LDQ4IEBAIHZvaWQgQ2FsbExpbmtJbmZvOjp1bmxpbmsoVk0mIHZtKQogICAgIC8vIFdlIGNv
dWxkIGJlIGNhbGxlZCBldmVuIGlmIHdlJ3JlIG5vdCBsaW5rZWQgYW55bW9yZSBiZWNhdXNlIG9m
IGhvdyBwb2x5bW9ycGhpYyBjYWxscwogICAgIC8vIHdvcmsuIEVhY2ggY2FsbHNpdGUgd2l0aGlu
IHRoZSBwb2x5bW9ycGhpYyBjYWxsIHN0dWIgbWF5IHNlcGFyYXRlbHkgYXNrIHVzIHRvIHVubGlu
aygpLgogICAgIGlmIChpc0xpbmtlZCgpKQotICAgICAgICB1bmxpbmtGb3Iodm0sICp0aGlzKTsK
KyAgICAgICAgdW5saW5rQ2FsbCh2bSwgKnRoaXMpOwogCiAgICAgLy8gRWl0aGVyIHdlIHdlcmUg
dW5saW5rZWQsIGluIHdoaWNoIGNhc2Ugd2Ugc2hvdWxkIG5vdCBoYXZlIGJlZW4gb24gYW55IGxp
c3QsIG9yIHdlIHVubGlua2VkCiAgICAgLy8gb3Vyc2VsdmVzIHNvIHRoYXQgd2UncmUgbm90IG9u
IGFueSBsaXN0IGFueW1vcmUuCiAgICAgUkVMRUFTRV9BU1NFUlQoIWlzT25MaXN0KCkpOwogfQog
Ci1Db2RlTG9jYXRpb25OZWFyQ2FsbDxKU0ludGVybmFsUHRyVGFnPiBDYWxsTGlua0luZm86OmNh
bGxSZXR1cm5Mb2NhdGlvbigpCitDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBD
YWxsTGlua0luZm86OmZhc3RQYXRoU3RhcnQoKQogewotICAgIFJFTEVBU0VfQVNTRVJUKCFpc0Rp
cmVjdCgpKTsKLSAgICByZXR1cm4gQ29kZUxvY2F0aW9uTmVhckNhbGw8SlNJbnRlcm5hbFB0clRh
Zz4obV9jYWxsUmV0dXJuTG9jYXRpb25PclBhdGNoYWJsZUp1bXAsIE5lYXJDYWxsTW9kZTo6UmVn
dWxhcik7CisgICAgcmV0dXJuIENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0cjxKU0ludGVybmFsUHRy
VGFnPihtX2Zhc3RQYXRoU3RhcnQpOwogfQogCi1Db2RlTG9jYXRpb25KdW1wPEpTSW50ZXJuYWxQ
dHJUYWc+IENhbGxMaW5rSW5mbzo6cGF0Y2hhYmxlSnVtcCgpCitDb2RlTG9jYXRpb25MYWJlbDxK
U0ludGVybmFsUHRyVGFnPiBDYWxsTGlua0luZm86OnNsb3dQYXRoU3RhcnQoKQogewotICAgIFJF
TEVBU0VfQVNTRVJUKGNhbGxUeXBlKCkgPT0gRGlyZWN0VGFpbENhbGwpOwotICAgIHJldHVybiBD
b2RlTG9jYXRpb25KdW1wPEpTSW50ZXJuYWxQdHJUYWc+KG1fY2FsbFJldHVybkxvY2F0aW9uT3JQ
YXRjaGFibGVKdW1wKTsKKyAgICByZXR1cm4gbV9zbG93UGF0aFN0YXJ0OwogfQogCi1Db2RlTG9j
YXRpb25EYXRhTGFiZWxQdHI8SlNJbnRlcm5hbFB0clRhZz4gQ2FsbExpbmtJbmZvOjpob3RQYXRo
QmVnaW4oKQorQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gQ2FsbExpbmtJbmZv
Ojpkb25lTG9jYXRpb24oKQogewogICAgIFJFTEVBU0VfQVNTRVJUKCFpc0RpcmVjdCgpKTsKLSAg
ICByZXR1cm4gQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyPEpTSW50ZXJuYWxQdHJUYWc+KG1faG90
UGF0aEJlZ2luT3JTbG93UGF0aFN0YXJ0KTsKLX0KLQotQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRl
cm5hbFB0clRhZz4gQ2FsbExpbmtJbmZvOjpzbG93UGF0aFN0YXJ0KCkKLXsKLSAgICBSRUxFQVNF
X0FTU0VSVChpc0RpcmVjdCgpKTsKLSAgICByZXR1cm4gbV9ob3RQYXRoQmVnaW5PclNsb3dQYXRo
U3RhcnQ7CisgICAgcmV0dXJuIG1fZG9uZUxvY2F0aW9uOwogfQogCi12b2lkIENhbGxMaW5rSW5m
bzo6c2V0Q2FsbGVlKFZNJiB2bSwgSlNDZWxsKiBvd25lciwgSlNPYmplY3QqIGNhbGxlZSkKK3Zv
aWQgQ2FsbExpbmtJbmZvOjpzZXRNb25vbW9ycGhpY0NhbGxlZShWTSYgdm0sIEpTQ2VsbCogb3du
ZXIsIEpTT2JqZWN0KiBjYWxsZWUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFn
PiBjb2RlUHRyKQogewogICAgIFJFTEVBU0VfQVNTRVJUKCFpc0RpcmVjdCgpKTsKICAgICBtX2Nh
bGxlZU9yQ29kZUJsb2NrLnNldCh2bSwgb3duZXIsIGNhbGxlZSk7CisgICAgbV9tb25vbW9ycGhp
Y0NhbGxEZXN0aW5hdGlvbiA9IGNvZGVQdHI7CisgICAgaWYgKCF1c2VzRGF0YUlDcygpKSB7Cisg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoTmVhckNhbGwobV9jYWxsTG9jYXRpb24sIENv
ZGVMb2NhdGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+KGNvZGVQdHIpKTsKKyAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OnJlcGF0Y2hQb2ludGVyKG1fY2FsbGVlTG9jYXRpb24sIGNhbGxlZSk7CisgICAg
fQorICAgIC8vZGF0YUxvZ0xuKCJNb25vbW9ycGhpYyBjYWxsZWUsIGNhbGxlZT0iLCBSYXdQb2lu
dGVyKGNhbGxlZSksICIgIHRhcmdldCBjb2RlOiAiLCBSYXdQb2ludGVyKGNvZGVQdHIuZXhlY3V0
YWJsZUFkZHJlc3MoKSksICIgb24gQ2FsbExpbmtJbmZvOiAiLCBSYXdQb2ludGVyKHRoaXMpKTsK
IH0KIAogdm9pZCBDYWxsTGlua0luZm86OmNsZWFyQ2FsbGVlKCkKIHsKICAgICBSRUxFQVNFX0FT
U0VSVCghaXNEaXJlY3QoKSk7CiAgICAgbV9jYWxsZWVPckNvZGVCbG9jay5jbGVhcigpOworICAg
IG1fbW9ub21vcnBoaWNDYWxsRGVzdGluYXRpb24gPSBudWxscHRyOworICAgIGlmICghdXNlc0Rh
dGFJQ3MoKSkKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hQb2ludGVyKG1fY2FsbGVl
TG9jYXRpb24sIG51bGxwdHIpOwogfQogCiBKU09iamVjdCogQ2FsbExpbmtJbmZvOjpjYWxsZWUo
KQpAQCAtMjg0LDYgKzI5MCwxNjcgQEAgdm9pZCBDYWxsTGlua0luZm86OnNldEZyYW1lU2h1ZmZs
ZURhdGEoYwogICAgIG1fZnJhbWVTaHVmZmxlRGF0YS0+c2hyaW5rVG9GaXQoKTsKIH0KIAorQ0Nh
bGxIZWxwZXJzOjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmVtaXRGYXN0UGF0aChDQ2FsbEhlbHBl
cnMmIGppdCwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgQ2FsbExp
bmtJbmZvJiBjYWxsTGlua0luZm8sIFVzZURhdGFJQyB1c2VEYXRhSUMpCit7CisgICAgUkVMRUFT
RV9BU1NFUlQoIWNhbGxMaW5rSW5mby5pc1RhaWxDYWxsKCkpOworCisgICAgY2FsbExpbmtJbmZv
Lm1fdXNlRGF0YUlDID0gdXNlRGF0YUlDOworCisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBz
bG93UGF0aDsKKworICAgIGlmIChjYWxsTGlua0luZm8udXNlc0RhdGFJQ3MoKSkgeworICAgICAg
ICBHUFJSZWcgc2NyYXRjaEdQUiA9IGppdC5zY3JhdGNoUmVnaXN0ZXIoKTsKKworICAgICAgICBS
RUxFQVNFX0FTU0VSVChjYWxsTGlua0luZm9HUFIgIT0gQ0NhbGxIZWxwZXJzOjpJbnZhbGlkR1BS
UmVnKTsKKyAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKCZjYWxs
TGlua0luZm8pLCBjYWxsTGlua0luZm9HUFIpOworCisgICAgICAgIHsKKyAgICAgICAgICAgIERp
c2FsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBkaXNhbGxvd1NjcmF0Y2goaml0KTsKKyAg
ICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhjYWxsTGlua0luZm9H
UFIsIG9mZnNldE9mQ2FsbGVlKCkpLCBzY3JhdGNoR1BSKTsgLy8gV2hlbiByZXBhdGNoaW5nLCB3
ZSBqdXN0IG92ZXJ3cml0ZSB0aGUgZmlyc3QgaW5zdHJ1Y3Rpb24gYmFjaywgc2luY2UgaXQnbGwg
aGF2ZSBiZWVuIHJlcGxhY2VkIHdpdGggYSBqdW1wIHRvIHRoZSBwb2x5bW9ycGhpYyBjYWxsIHN0
dWIuCisKKyAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChqaXQuYnJhbmNoUHRyKENDYWxsSGVs
cGVyczo6Tm90RXF1YWwsIHNjcmF0Y2hHUFIsIGNhbGxlZUdQUikpOworICAgICAgICB9CisgICAg
ICAgIGppdC5jYWxsKENDYWxsSGVscGVyczo6QWRkcmVzcyhjYWxsTGlua0luZm9HUFIsIG9mZnNl
dE9mTW9ub21vcnBoaWNDYWxsRGVzdGluYXRpb24oKSksIEpTRW50cnlQdHJUYWcpOworICAgIH0g
ZWxzZSB7CisgICAgICAgIGppdC5ub3AoKTsgLy8gcm9vbSBmb3Igc3BsYXR0aW5nIG91dCBhIGp1
bXAKKworICAgICAgICBDQ2FsbEhlbHBlcnM6OkRhdGFMYWJlbFB0ciBjYWxsZWVDaGVjazsKKyAg
ICAgICAgc2xvd1BhdGguYXBwZW5kKGppdC5icmFuY2hQdHJXaXRoUGF0Y2goQ0NhbGxIZWxwZXJz
OjpOb3RFcXVhbCwgY2FsbGVlR1BSLCBjYWxsZWVDaGVjaywgQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tUHRyKG51bGxwdHIpKSk7CisgICAgICAgIGF1dG8gY2FsbCA9IGppdC5uZWFyQ2FsbCgpOwor
ICAgICAgICBqaXQuYWRkTGlua1Rhc2soWz0sICZjYWxsTGlua0luZm9dIChMaW5rQnVmZmVyJiBs
aW5rQnVmZmVyKSB7CisgICAgICAgICAgICBjYWxsTGlua0luZm8ubV9jYWxsTG9jYXRpb24gPSBs
aW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxKU0ludGVybmFsUHRyVGFnPihjYWxsKTsKKyAg
ICAgICAgICAgIGNhbGxMaW5rSW5mby5tX2NhbGxlZUxvY2F0aW9uID0gbGlua0J1ZmZlci5sb2Nh
dGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KGNhbGxlZUNoZWNrKTsKKyAgICAgICAgfSk7CisgICAg
fQorCisgICAgcmV0dXJuIHNsb3dQYXRoOworfQorCitNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qg
Q2FsbExpbmtJbmZvOjplbWl0VGFpbENhbGxGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCwgR1BS
UmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgQ2FsbExpbmtJbmZvJiBjYWxs
TGlua0luZm8sIFVzZURhdGFJQyB1c2VEYXRhSUMsIFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVw
YXJlRm9yVGFpbENhbGwpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoY2FsbExpbmtJbmZvLmlzVGFp
bENhbGwoKSk7CisKKyAgICBjYWxsTGlua0luZm8ubV91c2VEYXRhSUMgPSB1c2VEYXRhSUM7CisK
KyAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dQYXRoOworCisgICAgaWYgKGNhbGxMaW5r
SW5mby51c2VzRGF0YUlDcygpKSB7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gaml0LnNj
cmF0Y2hSZWdpc3RlcigpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChjYWxsTGlua0luZm9HUFIg
IT0gQ0NhbGxIZWxwZXJzOjpJbnZhbGlkR1BSUmVnKTsKKyAgICAgICAgaml0Lm1vdmUoQ0NhbGxI
ZWxwZXJzOjpUcnVzdGVkSW1tUHRyKCZjYWxsTGlua0luZm8pLCBjYWxsTGlua0luZm9HUFIpOwor
ICAgICAgICB7CisgICAgICAgICAgICBEaXNhbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2Ug
ZGlzYWxsb3dTY3JhdGNoKGppdCk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBl
cnM6OkFkZHJlc3MoY2FsbExpbmtJbmZvR1BSLCBvZmZzZXRPZkNhbGxlZSgpKSwgc2NyYXRjaEdQ
Uik7IC8vIFdoZW4gcmVwYXRjaGluZywgd2UganVzdCBvdmVyd3JpdGUgdGhlIGZpcnN0IGluc3Ry
dWN0aW9uIGJhY2ssIHNpbmNlIGl0J2xsIGhhdmUgYmVlbiByZXBsYWNlZCB3aXRoIGEganVtcCB0
byB0aGUgcG9seW1vcnBoaWMgY2FsbCBzdHViLgorICAgICAgICAgICAgc2xvd1BhdGguYXBwZW5k
KGppdC5icmFuY2hQdHIoQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwgc2NyYXRjaEdQUiwgY2FsbGVl
R1BSKSk7CisgICAgICAgIH0KKyAgICAgICAgcHJlcGFyZUZvclRhaWxDYWxsKCk7CisgICAgICAg
IGppdC5mYXJKdW1wKENDYWxsSGVscGVyczo6QWRkcmVzcyhjYWxsTGlua0luZm9HUFIsIG9mZnNl
dE9mTW9ub21vcnBoaWNDYWxsRGVzdGluYXRpb24oKSksIEpTRW50cnlQdHJUYWcpOworICAgIH0g
ZWxzZSB7CisgICAgICAgIGppdC5ub3AoKTsgLy8gcm9vbSBmb3Igc3BsYXR0aW5nIG91dCBhIGp1
bXAKKworICAgICAgICBDQ2FsbEhlbHBlcnM6OkRhdGFMYWJlbFB0ciBjYWxsZWVDaGVjazsKKyAg
ICAgICAgc2xvd1BhdGguYXBwZW5kKGppdC5icmFuY2hQdHJXaXRoUGF0Y2goQ0NhbGxIZWxwZXJz
OjpOb3RFcXVhbCwgY2FsbGVlR1BSLCBjYWxsZWVDaGVjaywgQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tUHRyKG51bGxwdHIpKSk7CisgICAgICAgIHByZXBhcmVGb3JUYWlsQ2FsbCgpOworICAgICAg
ICBhdXRvIGNhbGwgPSBqaXQubmVhclRhaWxDYWxsKCk7CisgICAgICAgIGppdC5hZGRMaW5rVGFz
ayhbPSwgJmNhbGxMaW5rSW5mb10gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAg
ICAgIGNhbGxMaW5rSW5mby5tX2NhbGxMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZk5l
YXJDYWxsPEpTSW50ZXJuYWxQdHJUYWc+KGNhbGwpOworICAgICAgICAgICAgY2FsbExpbmtJbmZv
Lm1fY2FsbGVlTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRh
Zz4oY2FsbGVlQ2hlY2spOworICAgICAgICB9KTsKKyAgICB9CisKKyAgICByZXR1cm4gc2xvd1Bh
dGg7Cit9CisKK3ZvaWQgQ2FsbExpbmtJbmZvOjplbWl0U2xvd1BhdGgoVk0mIHZtLCBDQ2FsbEhl
bHBlcnMmIGppdCwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8pCit7CisgICAgY2FsbExpbmtJ
bmZvLnNldFNsb3dQYXRoQ2FsbERlc3RpbmF0aW9uKHZtLmdldENUSVN0dWIobGlua0NhbGxUaHVu
a0dlbmVyYXRvcikudGVtcGxhdGUgcmV0YWdnZWRDb2RlPEpTRW50cnlQdHJUYWc+KCkpOworICAg
IGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cigmY2FsbExpbmtJbmZvKSwgR1BS
SW5mbzo6cmVnVDIpOworICAgIGppdC5jYWxsKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZv
OjpyZWdUMiwgb2Zmc2V0T2ZTbG93UGF0aENhbGxEZXN0aW5hdGlvbigpKSwgSlNFbnRyeVB0clRh
Zyk7Cit9CisKK3ZvaWQgQ2FsbExpbmtJbmZvOjplbWl0RGlyZWN0RmFzdFBhdGgoQ0NhbGxIZWxw
ZXJzJiBqaXQsIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvKQoreworICAgIFJFTEVBU0VfQVNT
RVJUKCFjYWxsTGlua0luZm8uaXNUYWlsQ2FsbCgpKTsKKworICAgIGF1dG8gY2FsbCA9IGppdC5u
ZWFyQ2FsbCgpOworICAgIGppdC5hZGRMaW5rVGFzayhbPSwgJmNhbGxMaW5rSW5mb10gKExpbmtC
dWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgY2FsbExpbmtJbmZvLm1fY2FsbExvY2F0aW9u
ID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8SlNJbnRlcm5hbFB0clRhZz4oY2FsbCk7
CisgICAgfSk7CisgICAgaml0LmFkZExhdGVMaW5rVGFzayhbJmNhbGxMaW5rSW5mb10gKExpbmtC
dWZmZXImKSB7CisgICAgICAgIGNhbGxMaW5rSW5mby5pbml0aWFsaXplRGlyZWN0Q2FsbCgpOwor
ICAgIH0pOworfQorCit2b2lkIENhbGxMaW5rSW5mbzo6ZW1pdERpcmVjdFRhaWxDYWxsRmFzdFBh
dGgoQ0NhbGxIZWxwZXJzJiBqaXQsIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvLCBXVEY6OkZ1
bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKQoreworICAgIFJFTEVBU0VfQVNTRVJU
KGNhbGxMaW5rSW5mby5pc1RhaWxDYWxsKCkpOworCisgICAgaml0Lm5vcCgpOyAvLyBSZXBsYWNl
ZCB3aXRoIGEganVtcCB0byB0aGUgc2xvdyBwYXRoLCBvciBhIG5vcCwgZGVwZW5kaW5nIG9uIGlm
IHdlJ3JlIGxpbmtlZCBvciBub3QuCisgICAgcHJlcGFyZUZvclRhaWxDYWxsKCk7CisgICAgYXV0
byBjYWxsID0gaml0Lm5lYXJUYWlsQ2FsbCgpOworICAgIGppdC5hZGRMaW5rVGFzayhbPSwgJmNh
bGxMaW5rSW5mb10gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgY2FsbExpbmtJ
bmZvLm1fY2FsbExvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8SlNJbnRl
cm5hbFB0clRhZz4oY2FsbCk7CisgICAgfSk7CisgICAgaml0LmFkZExhdGVMaW5rVGFzayhbJmNh
bGxMaW5rSW5mb10gKExpbmtCdWZmZXImKSB7CisgICAgICAgIGNhbGxMaW5rSW5mby5pbml0aWFs
aXplRGlyZWN0Q2FsbCgpOworICAgIH0pOworfQorCit2b2lkIENhbGxMaW5rSW5mbzo6aW5pdGlh
bGl6ZURpcmVjdENhbGwoKQoreworICAgIFJFTEVBU0VfQVNTRVJUKGlzRGlyZWN0KCkpOworICAg
IEFTU0VSVChtX2NhbGxMb2NhdGlvbik7CisgICAgaWYgKGlzVGFpbENhbGwoKSkgeworICAgICAg
ICBSRUxFQVNFX0FTU0VSVChmYXN0UGF0aFN0YXJ0KCkpOworICAgICAgICBDQ2FsbEhlbHBlcnM6
OmVtaXRKSVRDb2RlT3ZlcihmYXN0UGF0aFN0YXJ0KCksIFsmXSAoQ0NhbGxIZWxwZXJzJiBqaXQp
IHsKKyAgICAgICAgICAgIGF1dG8ganVtcCA9IGppdC5qdW1wKCk7CisgICAgICAgICAgICBqaXQu
YWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgICAgICAgICAg
ICAgbGlua0J1ZmZlci5saW5rKGp1bXAsIHNsb3dQYXRoU3RhcnQoKSk7CisgICAgICAgICAgICB9
KTsKKyAgICAgICAgfSwgImluaXRpYWxpemUgZGlyZWN0IGNhbGwiKTsKKyAgICB9IGVsc2UKKyAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hOZWFyQ2FsbChtX2NhbGxMb2NhdGlvbiwgc2xv
d1BhdGhTdGFydCgpKTsKK30KKwordm9pZCBDYWxsTGlua0luZm86OnNldERpcmVjdENhbGxUYXJn
ZXQoQ29kZUxvY2F0aW9uTGFiZWw8SlNFbnRyeVB0clRhZz4gdGFyZ2V0KQoreworICAgIFJFTEVB
U0VfQVNTRVJUKGlzRGlyZWN0KCkpOworCisgICAgaWYgKGlzVGFpbENhbGwoKSkgeworICAgICAg
ICBSRUxFQVNFX0FTU0VSVChmYXN0UGF0aFN0YXJ0KCkpOworICAgICAgICBDQ2FsbEhlbHBlcnM6
OmVtaXRKSVRDb2RlT3ZlcihmYXN0UGF0aFN0YXJ0KCksIFsmXSAoQ0NhbGxIZWxwZXJzJiBqaXQp
IHsKKyAgICAgICAgICAgIGppdC5ub3AoKTsKKyAgICAgICAgfSwgIlNldHRpbmcgZGlyZWN0IGNh
bGwgdGFyZ2V0Iik7CisgICAgfQorCisgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hOZWFyQ2Fs
bChtX2NhbGxMb2NhdGlvbiwgdGFyZ2V0KTsKK30KKwordm9pZCBDYWxsTGlua0luZm86OnNldFNs
b3dQYXRoQ2FsbERlc3RpbmF0aW9uKE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFn
PiBjb2RlUHRyKQoreworICAgIG1fc2xvd1BhdGhDYWxsRGVzdGluYXRpb24gPSBjb2RlUHRyOwor
fQorCit2b2lkIENhbGxMaW5rSW5mbzo6cmV2ZXJ0Q2FsbFRvU3R1YigpCit7CisgICAgUkVMRUFT
RV9BU1NFUlQoc3R1YigpKTsKKyAgICAvLyBUaGUgc3RhcnQgb2Ygb3VyIEpJVCBjb2RlIGlzIG5v
dyBhIGp1bXAgdG8gdGhlIHBvbHltb3JwaGljIHN0dWIuIFJld3JpdGUgdGhlIGZpcnN0IGluc3Ry
dWN0aW9uCisgICAgLy8gdG8gYmUgd2hhdCB3ZSBuZWVkIGZvciBub24gc3R1YiBJQ3MuCisKKyAg
ICAvLyB0aGlzIHJ1bnMgaW50byBzb21lIGJyYW5jaCBjb21wYWN0aW9uIGNyYXAgSSdkIGxpa2Ug
dG8gYXZvaWQgZm9yIG5vdy4gRXNzZW50aWFsbHksIHRoZSBicmFuY2gKKyAgICAvLyBkb2Vzbid0
IGtub3cgaWYgaXQgY2FuIGJlIGNvbXBhY3RlZCBvciBub3QuIFNvIHdlIGVuZCB1cCB3aXRoIDI4
IGJ5dGVzIG9mIG1hY2hpbmUgY29kZSwgZm9yCisgICAgLy8gd2hhdCBpbiBhbGwgbGlrZWxpaG9v
ZCBmaXRzIGluIDI0LiBTbyB3ZSBqdXN0IHNwbGF0IG91dCB0aGUgZmlyc3QgaW5zdHJ1Y3Rpb24u
IExvbmcgdGVybSwgd2UKKyAgICAvLyBuZWVkIHNvbWV0aGluZyBjbGVhbmVyLiBCdXQgdGhpcyB3
b3JrcyBvbiBhcm02NCBmb3Igbm93LgorICAgIC8vYXV0byBzbG93UGF0aCA9IENhbGxMaW5rSW5m
bzo6ZW1pdEZhc3RQYXRoKGppdCwgY2FsbExpbmtJbmZvLmNhbGxlZUdQUigpLCBjYWxsTGlua0lu
Zm8sIGZhbHNlKTsKKworICAgIENDYWxsSGVscGVyczo6ZW1pdEpJVENvZGVPdmVyKGZhc3RQYXRo
U3RhcnQoKSwgWyZdIChDQ2FsbEhlbHBlcnMmIGppdCkgeworICAgICAgICBpZiAodXNlc0RhdGFJ
Q3MoKSkKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJ
bmZvOjpyZWdUMiwgQ2FsbExpbmtJbmZvOjpvZmZzZXRPZkNhbGxlZSgpKSwgaml0LnNjcmF0Y2hS
ZWdpc3RlcigpKTsgLy8gcmV3cml0ZSB0aGUgZmlyc3QgaW5zbiBvZiB0aGUgZmFzdCBwYXRoLgor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBqaXQubm9wKCk7CisgICAgfSwgICJSZXNldHRpbmcg
UG9seW1vcnBoaWNDYWxsIHN0dWJiZWQgQ2FsbExpbmtJbmZvIik7Cit9CisKIH0gLy8gbmFtZXNw
YWNlIEpTQwogI2VuZGlmIC8vIEVOQUJMRShKSVQpCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmgJKHJldmlzaW9uIDI3Njk3NykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uaAkod29ya2luZyBjb3B5
KQpAQCAtMzAsMTIgKzMwLDE0IEBACiAjaW5jbHVkZSAiQ29kZVNwZWNpYWxpemF0aW9uS2luZC5o
IgogI2luY2x1ZGUgIlBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lLmgiCiAjaW5jbHVkZSAiV3Jp
dGVCYXJyaWVyLmgiCisjaW5jbHVkZSA8d3RmL0Z1bmN0aW9uLmg+CiAjaW5jbHVkZSA8d3RmL1Nl
bnRpbmVsTGlua2VkTGlzdC5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIAogI2lmIEVOQUJMRShKSVQp
CiAKK2NsYXNzIENDYWxsSGVscGVyczsKIGNsYXNzIEZ1bmN0aW9uQ29kZUJsb2NrOwogY2xhc3Mg
SlNGdW5jdGlvbjsKIGVudW0gT3Bjb2RlSUQgOiB1bnNpZ25lZDsKQEAgLTE2MywxNiArMTY1LDMy
IEBAIHB1YmxpYzoKICAgICAgICAgbV9jYWxsZWVHUFIgPSBjYWxsZWVHUFI7CiAgICAgfQogCisg
ICAgR1BSUmVnIGNhbGxlZUdQUigpIGNvbnN0IHsgcmV0dXJuIG1fY2FsbGVlR1BSOyB9CisgICAg
CisgICAgZW51bSBjbGFzcyBVc2VEYXRhSUMgOiB1aW50OF90IHsKKyAgICAgICAgWWVzLAorICAg
ICAgICBObworICAgIH07CisgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBlbWl0
RmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5r
SW5mb0dQUiwgQ2FsbExpbmtJbmZvJiwgVXNlRGF0YUlDKSBXQVJOX1VOVVNFRF9SRVRVUk47Cisg
ICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBlbWl0VGFpbENhbGxGYXN0UGF0aChD
Q2FsbEhlbHBlcnMmLCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBD
YWxsTGlua0luZm8mLCBVc2VEYXRhSUMsIFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVwYXJlRm9y
VGFpbENhbGwpIFdBUk5fVU5VU0VEX1JFVFVSTjsKKyAgICBzdGF0aWMgdm9pZCBlbWl0RGlyZWN0
RmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiwgQ2FsbExpbmtJbmZvJik7CisgICAgc3RhdGljIHZvaWQg
ZW1pdERpcmVjdFRhaWxDYWxsRmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiwgQ2FsbExpbmtJbmZvJiwg
V1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCk7CisgICAgc3RhdGljIHZv
aWQgZW1pdFNsb3dQYXRoKFZNJiwgQ0NhbGxIZWxwZXJzJiwgQ2FsbExpbmtJbmZvJik7CisgICAg
dm9pZCByZXZlcnRDYWxsVG9TdHViKCk7CisgICAgYm9vbCB1c2VzRGF0YUlDcygpIGNvbnN0IHsg
cmV0dXJuIG1fdXNlRGF0YUlDID09IFVzZURhdGFJQzo6WWVzOyB9CisKICAgICB2b2lkIHNldENh
bGxMb2NhdGlvbnMoCi0gICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+
IGNhbGxSZXR1cm5Mb2NhdGlvbk9yUGF0Y2hhYmxlSnVtcCwKLSAgICAgICAgQ29kZUxvY2F0aW9u
TGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gaG90UGF0aEJlZ2luT3JTbG93UGF0aFN0YXJ0LAotICAg
ICAgICBDb2RlTG9jYXRpb25OZWFyQ2FsbDxKU0ludGVybmFsUHRyVGFnPiBob3RQYXRoT3RoZXIp
Ci0gICAgewotICAgICAgICBtX2NhbGxSZXR1cm5Mb2NhdGlvbk9yUGF0Y2hhYmxlSnVtcCA9IGNh
bGxSZXR1cm5Mb2NhdGlvbk9yUGF0Y2hhYmxlSnVtcDsKLSAgICAgICAgbV9ob3RQYXRoQmVnaW5P
clNsb3dQYXRoU3RhcnQgPSBob3RQYXRoQmVnaW5PclNsb3dQYXRoU3RhcnQ7Ci0gICAgICAgIG1f
aG90UGF0aE90aGVyID0gaG90UGF0aE90aGVyOworICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxK
U0ludGVybmFsUHRyVGFnPiBmYXN0UGF0aFN0YXJ0LAorICAgICAgICBDb2RlTG9jYXRpb25MYWJl
bDxKU0ludGVybmFsUHRyVGFnPiBzbG93UGF0aFN0YXJ0LAorICAgICAgICBDb2RlTG9jYXRpb25M
YWJlbDxKU0ludGVybmFsUHRyVGFnPiBkb25lTG9jYXRpb24pCisgICAgeworICAgICAgICBtX2Zh
c3RQYXRoU3RhcnQgPSBmYXN0UGF0aFN0YXJ0OworICAgICAgICBtX3Nsb3dQYXRoU3RhcnQgPSBz
bG93UGF0aFN0YXJ0OworICAgICAgICBtX2RvbmVMb2NhdGlvbiA9IGRvbmVMb2NhdGlvbjsKICAg
ICB9CiAKKyAgICB2b2lkIGluaXRpYWxpemVEaXJlY3RDYWxsKCk7CisKICAgICBib29sIGFsbG93
U3R1YnMoKSBjb25zdCB7IHJldHVybiBtX2FsbG93U3R1YnM7IH0KIAogICAgIHZvaWQgZGlzYWxs
b3dTdHVicygpCkBAIC0xODAsMjMgKzE5OCwxOSBAQCBwdWJsaWM6CiAgICAgICAgIG1fYWxsb3dT
dHVicyA9IGZhbHNlOwogICAgIH0KIAotICAgIENvZGVMb2NhdGlvbk5lYXJDYWxsPEpTSW50ZXJu
YWxQdHJUYWc+IGNhbGxSZXR1cm5Mb2NhdGlvbigpOwotICAgIENvZGVMb2NhdGlvbkp1bXA8SlNJ
bnRlcm5hbFB0clRhZz4gcGF0Y2hhYmxlSnVtcCgpOwotICAgIENvZGVMb2NhdGlvbkRhdGFMYWJl
bFB0cjxKU0ludGVybmFsUHRyVGFnPiBob3RQYXRoQmVnaW4oKTsKKyAgICBDb2RlTG9jYXRpb25M
YWJlbDxKU0ludGVybmFsUHRyVGFnPiBmYXN0UGF0aFN0YXJ0KCk7CiAgICAgQ29kZUxvY2F0aW9u
TGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gc2xvd1BhdGhTdGFydCgpOworICAgIENvZGVMb2NhdGlv
bkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IGRvbmVMb2NhdGlvbigpOwogCi0gICAgQ29kZUxvY2F0
aW9uTmVhckNhbGw8SlNJbnRlcm5hbFB0clRhZz4gaG90UGF0aE90aGVyKCkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBtX2hvdFBhdGhPdGhlcjsKLSAgICB9Ci0KLSAgICB2b2lkIHNldENhbGxlZShW
TSYsIEpTQ2VsbCosIEpTT2JqZWN0KiBjYWxsZWUpOworICAgIHZvaWQgc2V0TW9ub21vcnBoaWND
YWxsZWUoVk0mLCBKU0NlbGwqLCBKU09iamVjdCogY2FsbGVlLCBNYWNyb0Fzc2VtYmxlckNvZGVQ
dHI8SlNFbnRyeVB0clRhZz4pOworICAgIHZvaWQgc2V0U2xvd1BhdGhDYWxsRGVzdGluYXRpb24o
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+KTsKICAgICB2b2lkIGNsZWFyQ2Fs
bGVlKCk7CiAgICAgSlNPYmplY3QqIGNhbGxlZSgpOwogCiAgICAgdm9pZCBzZXRDb2RlQmxvY2so
Vk0mLCBKU0NlbGwqLCBGdW5jdGlvbkNvZGVCbG9jayopOwogICAgIHZvaWQgY2xlYXJDb2RlQmxv
Y2soKTsKICAgICBGdW5jdGlvbkNvZGVCbG9jayogY29kZUJsb2NrKCk7CisgICAgdm9pZCBzZXRE
aXJlY3RDYWxsVGFyZ2V0KENvZGVMb2NhdGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+KTsKIAogICAg
IHZvaWQgc2V0TGFzdFNlZW5DYWxsZWUoVk0mLCBjb25zdCBKU0NlbGwqIG93bmVyLCBKU09iamVj
dCogY2FsbGVlKTsKICAgICB2b2lkIGNsZWFyTGFzdFNlZW5DYWxsZWUoKTsKQEAgLTMxMSw2ICsz
MjUsMjEgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENhbGxMaW5r
SW5mbywgbV9zbG93UGF0aENvdW50KTsKICAgICB9CiAKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9m
ZnNldE9mQ2FsbGVlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ2Fs
bExpbmtJbmZvLCBtX2NhbGxlZU9yQ29kZUJsb2NrKTsKKyAgICB9CisKKyAgICBzdGF0aWMgcHRy
ZGlmZl90IG9mZnNldE9mTW9ub21vcnBoaWNDYWxsRGVzdGluYXRpb24oKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDYWxsTGlua0luZm8sIG1fbW9ub21vcnBoaWNDYWxs
RGVzdGluYXRpb24pOworICAgIH0KKworICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZTbG93
UGF0aENhbGxEZXN0aW5hdGlvbigpCisgICAgeworICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNF
VE9GKENhbGxMaW5rSW5mbywgbV9zbG93UGF0aENhbGxEZXN0aW5hdGlvbik7CisgICAgfQorCiAg
ICAgR1BSUmVnIGNhbGxlZUdQUigpCiAgICAgewogICAgICAgICByZXR1cm4gbV9jYWxsZWVHUFI7
CkBAIC0zNTMsOSArMzgyLDE1IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICB1aW50MzJfdCBt
X21heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIHsgMCB9OyAvLyBGb3IgdmFyYXJnczogdGhl
IHByb2ZpbGVkIG1heGltdW0gbnVtYmVyIG9mIGFyZ3VtZW50cy4gRm9yIGRpcmVjdDogdGhlIG51
bWJlciBvZiBzdGFjayBzbG90cyBhbGxvY2F0ZWQgZm9yIGFyZ3VtZW50cy4KLSAgICBDb2RlTG9j
YXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBtX2NhbGxSZXR1cm5Mb2NhdGlvbk9yUGF0Y2hh
YmxlSnVtcDsKLSAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBtX2hvdFBh
dGhCZWdpbk9yU2xvd1BhdGhTdGFydDsKLSAgICBDb2RlTG9jYXRpb25OZWFyQ2FsbDxKU0ludGVy
bmFsUHRyVGFnPiBtX2hvdFBhdGhPdGhlcjsKKyAgICAvL0NvZGVMb2NhdGlvbkxhYmVsPEpTSW50
ZXJuYWxQdHJUYWc+IG1fc2xvd0NhbGxSZXR1cm5Mb2NhdGlvbk9yUGF0Y2hhYmxlSnVtcDsKKyAg
ICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBtX2Zhc3RQYXRoU3RhcnQ7Cisg
ICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gbV9zbG93UGF0aFN0YXJ0Owor
ICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IG1fZG9uZUxvY2F0aW9uOwor
ICAgIENvZGVMb2NhdGlvbk5lYXJDYWxsPEpTSW50ZXJuYWxQdHJUYWc+IG1fY2FsbExvY2F0aW9u
OworICAgIENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0cjxKU0ludGVybmFsUHRyVGFnPiBtX2NhbGxl
ZUxvY2F0aW9uOworICAgIC8vQ29kZUxvY2F0aW9uTmVhckNhbGw8SlNJbnRlcm5hbFB0clRhZz4g
bV87CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IG1fbW9ub21vcnBo
aWNDYWxsRGVzdGluYXRpb247CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJU
YWc+IG1fc2xvd1BhdGhDYWxsRGVzdGluYXRpb247CiAgICAgV3JpdGVCYXJyaWVyPEpTQ2VsbD4g
bV9jYWxsZWVPckNvZGVCbG9jazsKICAgICBXcml0ZUJhcnJpZXI8SlNDZWxsPiBtX2xhc3RTZWVu
Q2FsbGVlT3JFeGVjdXRhYmxlOwogICAgIFJlZlB0cjxQb2x5bW9ycGhpY0NhbGxTdHViUm91dGlu
ZT4gbV9zdHViOwpAQCAtMzY5LDYgKzQwNCw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2FsbG93
U3R1YnMgOiAxOwogICAgIGJvb2wgbV9jbGVhcmVkQnlKZXR0aXNvbiA6IDE7CiAgICAgdW5zaWdu
ZWQgbV9jYWxsVHlwZSA6IDQ7IC8vIENhbGxUeXBlCisgICAgVXNlRGF0YUlDIG1fdXNlRGF0YUlD
IHsgVXNlRGF0YUlDOjpZZXMgfTsKICAgICBHUFJSZWcgbV9jYWxsZWVHUFIgeyBJbnZhbGlkR1BS
UmVnIH07CiAgICAgdWludDMyX3QgbV9zbG93UGF0aENvdW50IHsgMCB9OwogfTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCShyZXZpc2lvbiAy
NzY5NzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjU1LDMxICsyNTUsMjAgQEAgdm9pZCBKSVRDb21waWxlcjo6bGlu
ayhMaW5rQnVmZmVyJiBsaW5rQgogICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1faW5zdGFuY2VP
ZnMsIGxpbmtCdWZmZXIpOwogICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1fcHJpdmF0ZUJyYW5k
QWNjZXNzZXMsIGxpbmtCdWZmZXIpOwogCi0gICAgYXV0byBsaW5rQ2FsbFRodW5rID0gRnVuY3Rp
b25QdHI8Tm9QdHJUYWc+KHZtKCkuZ2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5y
ZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogICAgIGZvciAoYXV0byYgcmVjb3JkIDogbV9qc0Nh
bGxzKSB7CiAgICAgICAgIENhbGxMaW5rSW5mbyYgaW5mbyA9ICpyZWNvcmQuaW5mbzsKLSAgICAg
ICAgbGlua0J1ZmZlci5saW5rKHJlY29yZC5zbG93Q2FsbCwgbGlua0NhbGxUaHVuayk7CiAgICAg
ICAgIGluZm8uc2V0Q2FsbExvY2F0aW9ucygKLSAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVs
PEpTSW50ZXJuYWxQdHJUYWc+KGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPEpTSW50ZXJu
YWxQdHJUYWc+KHJlY29yZC5zbG93Q2FsbCkpLAotICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFi
ZWw8SlNJbnRlcm5hbFB0clRhZz4obGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJU
YWc+KHJlY29yZC50YXJnZXRUb0NoZWNrKSksCi0gICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0
aW9uT2ZOZWFyQ2FsbDxKU0ludGVybmFsUHRyVGFnPihyZWNvcmQuZmFzdENhbGwpKTsKKyAgICAg
ICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihyZWNvcmQuZmFz
dFBhdGhTdGFydCksCisgICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5h
bFB0clRhZz4ocmVjb3JkLnNsb3dQYXRoU3RhcnQpLAorICAgICAgICAgICAgbGlua0J1ZmZlci5s
b2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KHJlY29yZC5kb25lTG9jYXRpb24pKTsKICAgICB9
CiAgICAgCiAgICAgZm9yIChKU0RpcmVjdENhbGxSZWNvcmQmIHJlY29yZCA6IG1fanNEaXJlY3RD
YWxscykgewogICAgICAgICBDYWxsTGlua0luZm8mIGluZm8gPSAqcmVjb3JkLmluZm87Ci0gICAg
ICAgIGxpbmtCdWZmZXIubGluayhyZWNvcmQuY2FsbCwgbGlua0J1ZmZlci5sb2NhdGlvbk9mPE5v
UHRyVGFnPihyZWNvcmQuc2xvd1BhdGgpKTsKICAgICAgICAgaW5mby5zZXRDYWxsTG9jYXRpb25z
KAotICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4oKSwKKyAg
ICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihyZWNvcmQu
ZmFzdFBhdGgpLAogICAgICAgICAgICAgbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQ
dHJUYWc+KHJlY29yZC5zbG93UGF0aCksCi0gICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9u
T2ZOZWFyQ2FsbDxKU0ludGVybmFsUHRyVGFnPihyZWNvcmQuY2FsbCkpOwotICAgIH0KLSAgICAK
LSAgICBmb3IgKEpTRGlyZWN0VGFpbENhbGxSZWNvcmQmIHJlY29yZCA6IG1fanNEaXJlY3RUYWls
Q2FsbHMpIHsKLSAgICAgICAgQ2FsbExpbmtJbmZvJiBpbmZvID0gKnJlY29yZC5pbmZvOwotICAg
ICAgICBpbmZvLnNldENhbGxMb2NhdGlvbnMoCi0gICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0
aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4ocmVjb3JkLnBhdGNoYWJsZUp1bXApLAotICAgICAgICAg
ICAgbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KHJlY29yZC5zbG93UGF0
aCksCi0gICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxKU0ludGVybmFs
UHRyVGFnPihyZWNvcmQuY2FsbCkpOworICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJ
bnRlcm5hbFB0clRhZz4oKSk7CiAgICAgfQogICAgIAogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxKSVRUaHVua1B0clRhZz4gb3NyRXhpdFRodW5rID0gdm0oKS5nZXRDVElTdHViKG9zckV4aXRH
ZW5lcmF0aW9uVGh1bmtHZW5lcmF0b3IpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdKSVRDb21waWxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHSklUQ29tcGlsZXIuaAkocmV2aXNpb24gMjc2OTc3KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMTksMTkgKzIx
OSwxNCBAQCBwdWJsaWM6CiAgICAgICAgIG1fcHJpdmF0ZUJyYW5kQWNjZXNzZXMuYXBwZW5kKElu
bGluZUNhY2hlV3JhcHBlcjxKSVRQcml2YXRlQnJhbmRBY2Nlc3NHZW5lcmF0b3I+KGdlbiwgc2xv
d1BhdGgpKTsKICAgICB9CiAKLSAgICB2b2lkIGFkZEpTQ2FsbChDYWxsIGZhc3RDYWxsLCBDYWxs
IHNsb3dDYWxsLCBEYXRhTGFiZWxQdHIgdGFyZ2V0VG9DaGVjaywgQ2FsbExpbmtJbmZvKiBpbmZv
KQorICAgIHZvaWQgYWRkSlNDYWxsKExhYmVsIGZhc3RQYXRoU3RhcnQsIExhYmVsIHNsb3dQYXRo
U3RhcnQsIExhYmVsIGRvbmVMb2NhdGlvbiwgQ2FsbExpbmtJbmZvKiBpbmZvKQogICAgIHsKLSAg
ICAgICAgbV9qc0NhbGxzLmFwcGVuZChKU0NhbGxSZWNvcmQoZmFzdENhbGwsIHNsb3dDYWxsLCB0
YXJnZXRUb0NoZWNrLCBpbmZvKSk7CisgICAgICAgIG1fanNDYWxscy5hcHBlbmQoSlNDYWxsUmVj
b3JkKGZhc3RQYXRoU3RhcnQsIHNsb3dQYXRoU3RhcnQsIGRvbmVMb2NhdGlvbiwgaW5mbykpOwog
ICAgIH0KICAgICAKLSAgICB2b2lkIGFkZEpTRGlyZWN0Q2FsbChDYWxsIGNhbGwsIExhYmVsIHNs
b3dQYXRoLCBDYWxsTGlua0luZm8qIGluZm8pCisgICAgdm9pZCBhZGRKU0RpcmVjdENhbGwoTGFi
ZWwgZmFzdFBhdGgsIExhYmVsIHNsb3dQYXRoLCBDYWxsTGlua0luZm8qIGluZm8pCiAgICAgewot
ICAgICAgICBtX2pzRGlyZWN0Q2FsbHMuYXBwZW5kKEpTRGlyZWN0Q2FsbFJlY29yZChjYWxsLCBz
bG93UGF0aCwgaW5mbykpOwotICAgIH0KLSAgICAKLSAgICB2b2lkIGFkZEpTRGlyZWN0VGFpbENh
bGwoUGF0Y2hhYmxlSnVtcCBwYXRjaGFibGVKdW1wLCBDYWxsIGNhbGwsIExhYmVsIHNsb3dQYXRo
LCBDYWxsTGlua0luZm8qIGluZm8pCi0gICAgewotICAgICAgICBtX2pzRGlyZWN0VGFpbENhbGxz
LmFwcGVuZChKU0RpcmVjdFRhaWxDYWxsUmVjb3JkKHBhdGNoYWJsZUp1bXAsIGNhbGwsIHNsb3dQ
YXRoLCBpbmZvKSk7CisgICAgICAgIG1fanNEaXJlY3RDYWxscy5hcHBlbmQoSlNEaXJlY3RDYWxs
UmVjb3JkKGZhc3RQYXRoLCBzbG93UGF0aCwgaW5mbykpOwogICAgIH0KICAgICAKICAgICB2b2lk
IGFkZFdlYWtSZWZlcmVuY2UoSlNDZWxsKiB0YXJnZXQpCkBAIC0zMjgsNTIgKzMyMywzNSBAQCBw
cml2YXRlOgogCiAKICAgICBzdHJ1Y3QgSlNDYWxsUmVjb3JkIHsKLSAgICAgICAgSlNDYWxsUmVj
b3JkKENhbGwgZmFzdENhbGwsIENhbGwgc2xvd0NhbGwsIERhdGFMYWJlbFB0ciB0YXJnZXRUb0No
ZWNrLCBDYWxsTGlua0luZm8qIGluZm8pCi0gICAgICAgICAgICA6IGZhc3RDYWxsKGZhc3RDYWxs
KQotICAgICAgICAgICAgLCBzbG93Q2FsbChzbG93Q2FsbCkKLSAgICAgICAgICAgICwgdGFyZ2V0
VG9DaGVjayh0YXJnZXRUb0NoZWNrKQorICAgICAgICBKU0NhbGxSZWNvcmQoTGFiZWwgZmFzdFBh
dGhTdGFydCwgTGFiZWwgc2xvd1BhdGhTdGFydCwgTGFiZWwgZG9uZUxvY2F0aW9uLCBDYWxsTGlu
a0luZm8qIGluZm8pCisgICAgICAgICAgICA6IGZhc3RQYXRoU3RhcnQoZmFzdFBhdGhTdGFydCkK
KyAgICAgICAgICAgICwgc2xvd1BhdGhTdGFydChzbG93UGF0aFN0YXJ0KQorICAgICAgICAgICAg
LCBkb25lTG9jYXRpb24oZG9uZUxvY2F0aW9uKQogICAgICAgICAgICAgLCBpbmZvKGluZm8pCiAg
ICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChmYXN0Q2FsbC5pc0ZsYWdTZXQoQ2FsbDo6TmVh
cikpOwotICAgICAgICAgICAgQVNTRVJUKHNsb3dDYWxsLmlzRmxhZ1NldChDYWxsOjpOZWFyKSk7
CisgICAgICAgICAgICAvL0FTU0VSVChmYXN0Q2FsbC5pc0ZsYWdTZXQoQ2FsbDo6TmVhcikpOwor
ICAgICAgICAgICAgLy9BU1NFUlQoc2xvd0NhbGwuaXNGbGFnU2V0KENhbGw6Ok5lYXIpKTsKICAg
ICAgICAgfQogICAgICAgICAKLSAgICAgICAgQ2FsbCBmYXN0Q2FsbDsKLSAgICAgICAgQ2FsbCBz
bG93Q2FsbDsKLSAgICAgICAgRGF0YUxhYmVsUHRyIHRhcmdldFRvQ2hlY2s7CisgICAgICAgIExh
YmVsIGZhc3RQYXRoU3RhcnQ7CisgICAgICAgIExhYmVsIHNsb3dQYXRoU3RhcnQ7CisgICAgICAg
IExhYmVsIGRvbmVMb2NhdGlvbjsKICAgICAgICAgQ2FsbExpbmtJbmZvKiBpbmZvOwogICAgIH07
CiAgICAgCiAgICAgc3RydWN0IEpTRGlyZWN0Q2FsbFJlY29yZCB7Ci0gICAgICAgIEpTRGlyZWN0
Q2FsbFJlY29yZChDYWxsIGNhbGwsIExhYmVsIHNsb3dQYXRoLCBDYWxsTGlua0luZm8qIGluZm8p
Ci0gICAgICAgICAgICA6IGNhbGwoY2FsbCkKKyAgICAgICAgSlNEaXJlY3RDYWxsUmVjb3JkKExh
YmVsIGZhc3RQYXRoLCBMYWJlbCBzbG93UGF0aCwgQ2FsbExpbmtJbmZvKiBpbmZvKQorICAgICAg
ICAgICAgOiBmYXN0UGF0aChmYXN0UGF0aCkKICAgICAgICAgICAgICwgc2xvd1BhdGgoc2xvd1Bh
dGgpCiAgICAgICAgICAgICAsIGluZm8oaW5mbykKICAgICAgICAgewotICAgICAgICAgICAgQVNT
RVJUKGNhbGwuaXNGbGFnU2V0KENhbGw6Ok5lYXIpKTsKICAgICAgICAgfQogICAgICAgICAKLSAg
ICAgICAgQ2FsbCBjYWxsOworICAgICAgICBMYWJlbCBmYXN0UGF0aDsKICAgICAgICAgTGFiZWwg
c2xvd1BhdGg7CiAgICAgICAgIENhbGxMaW5rSW5mbyogaW5mbzsKICAgICB9OwogICAgIAotICAg
IHN0cnVjdCBKU0RpcmVjdFRhaWxDYWxsUmVjb3JkIHsKLSAgICAgICAgSlNEaXJlY3RUYWlsQ2Fs
bFJlY29yZChQYXRjaGFibGVKdW1wIHBhdGNoYWJsZUp1bXAsIENhbGwgY2FsbCwgTGFiZWwgc2xv
d1BhdGgsIENhbGxMaW5rSW5mbyogaW5mbykKLSAgICAgICAgICAgIDogcGF0Y2hhYmxlSnVtcChw
YXRjaGFibGVKdW1wKQotICAgICAgICAgICAgLCBjYWxsKGNhbGwpCi0gICAgICAgICAgICAsIHNs
b3dQYXRoKHNsb3dQYXRoKQotICAgICAgICAgICAgLCBpbmZvKGluZm8pCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIEFTU0VSVChjYWxsLmlzRmxhZ1NldChDYWxsOjpOZWFyKSAmJiBjYWxsLmlzRmxh
Z1NldChDYWxsOjpUYWlsKSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIFBhdGNoYWJs
ZUp1bXAgcGF0Y2hhYmxlSnVtcDsKLSAgICAgICAgQ2FsbCBjYWxsOwotICAgICAgICBMYWJlbCBz
bG93UGF0aDsKLSAgICAgICAgQ2FsbExpbmtJbmZvKiBpbmZvOwotICAgIH07Ci0KICAgICAKICAg
ICBWZWN0b3I8SW5saW5lQ2FjaGVXcmFwcGVyPEpJVEdldEJ5SWRHZW5lcmF0b3I+LCA0PiBtX2dl
dEJ5SWRzOwogICAgIFZlY3RvcjxJbmxpbmVDYWNoZVdyYXBwZXI8SklUR2V0QnlJZFdpdGhUaGlz
R2VuZXJhdG9yPiwgND4gbV9nZXRCeUlkc1dpdGhUaGlzOwpAQCAtMzg2LDcgKzM2NCw2IEBAIHBy
aXZhdGU6CiAgICAgVmVjdG9yPElubGluZUNhY2hlV3JhcHBlcjxKSVRQcml2YXRlQnJhbmRBY2Nl
c3NHZW5lcmF0b3I+LCA0PiBtX3ByaXZhdGVCcmFuZEFjY2Vzc2VzOwogICAgIFZlY3RvcjxKU0Nh
bGxSZWNvcmQsIDQ+IG1fanNDYWxsczsKICAgICBWZWN0b3I8SlNEaXJlY3RDYWxsUmVjb3JkLCA0
PiBtX2pzRGlyZWN0Q2FsbHM7Ci0gICAgVmVjdG9yPEpTRGlyZWN0VGFpbENhbGxSZWNvcmQsIDQ+
IG1fanNEaXJlY3RUYWlsQ2FsbHM7CiAgICAgU2VnbWVudGVkVmVjdG9yPE9TUkV4aXRDb21waWxh
dGlvbkluZm8sIDQ+IG1fZXhpdENvbXBpbGF0aW9uSW5mbzsKICAgICBWZWN0b3I8VmVjdG9yPExh
YmVsPj4gbV9leGl0U2l0ZUxhYmVsczsKICAgICBWZWN0b3I8REZHOjpPU1JFbnRyeURhdGE+IG1f
b3NyRW50cnk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21w
aWxlckNvbW1vbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwCShyZXZpc2lvbiAyNzY5NzcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQwLDYgKzQwLDggQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewog
CiB2b2lkIGhhbmRsZUV4aXRDb3VudHMoVk0mIHZtLCBDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3Qg
T1NSRXhpdEJhc2UmIGV4aXQpCiB7CisgICAgaml0LmFkZDY0KEFzc2VtYmx5SGVscGVyczo6VHJ1
c3RlZEltbTMyKDEpLCBBc3NlbWJseUhlbHBlcnM6OkFic29sdXRlQWRkcmVzcygmZ19udW1iZXJP
Zk9TUkV4aXRzKSk7CisgICAgCiAgICAgaWYgKCFleGl0S2luZE1heUpldHRpc29uKGV4aXQubV9r
aW5kKSkgewogICAgICAgICAvLyBGSVhNRTogV2UgbWF5IHdhbnQgdG8gbm90aWNlIHRoYXQgd2Un
cmUgZnJlcXVlbnRseSBleGl0aW5nCiAgICAgICAgIC8vIGF0IGFuIG9wX2NhdGNoIHRoYXQgd2Ug
ZGlkbid0IGNvbXBpbGUgYW4gZW50cnlwb2ludCBmb3IsIGFuZApAQCAtMjA5LDcgKzIxMSw3IEBA
IHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clQKICAgICAgICAgICAgICAg
ICBiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlci0+Z2V0Q2FsbExpbmtJbmZvRm9yQnl0ZWNvZGVJ
bmRleChjYWxsQnl0ZWNvZGVJbmRleCk7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjYWxs
TGlua0luZm8pOwogCi0gICAgICAgICAgICBqdW1wVGFyZ2V0ID0gY2FsbExpbmtJbmZvLT5jYWxs
UmV0dXJuTG9jYXRpb24oKS5yZXRhZ2dlZDxKU0VudHJ5UHRyVGFnPigpOworICAgICAgICAgICAg
anVtcFRhcmdldCA9IGNhbGxMaW5rSW5mby0+ZG9uZUxvY2F0aW9uKCkucmV0YWdnZWQ8SlNFbnRy
eVB0clRhZz4oKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMjc2OTc3
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzYxNiw3ICszNjE2LDcgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9w
ZXJhdGlvbkxpbmtEaQogICAgICAgICAgICAgY29kZVB0ciA9IGZ1bmN0aW9uRXhlY3V0YWJsZS0+
ZW50cnlwb2ludEZvcihraW5kLCBBcml0eUNoZWNrTm90UmVxdWlyZWQpOwogICAgIH0KICAgICAK
LSAgICBsaW5rRGlyZWN0Rm9yKGNhbGxGcmFtZSwgKmNhbGxMaW5rSW5mbywgY29kZUJsb2NrLCBj
b2RlUHRyKTsKKyAgICBsaW5rRGlyZWN0Q2FsbChjYWxsRnJhbWUsICpjYWxsTGlua0luZm8sIGNv
ZGVCbG9jaywgY29kZVB0cik7CiB9CiAKIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRp
b25UcmlnZ2VyUmVvcHRpbWl6YXRpb25Ob3csIHZvaWQsIChDb2RlQmxvY2sqIGNvZGVCbG9jaywg
Q29kZUJsb2NrKiBvcHRpbWl6ZWRDb2RlQmxvY2ssIE9TUkV4aXRCYXNlKiBleGl0KSkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNw
cAkocmV2aXNpb24gMjc2OTc3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzIwLDkgKzcyMCwxMCBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlKiBub2RlCiAgICAgICAgICAgICBpZiAoIWlz
RGlyZWN0KQogICAgICAgICAgICAgICAgIGNhbGxlZS51c2UoKTsKIAorICAgICAgICAgICAgc2h1
ZmZsZURhdGEuY2FsbGVlID0gVmFsdWVSZWNvdmVyeTo6aW5HUFIoY2FsbGVlR1BSLCBEYXRhRm9y
bWF0SlMpOworCiAgICAgICAgICAgICBzaHVmZmxlRGF0YS5udW1iZXJUYWdSZWdpc3RlciA9IEdQ
UkluZm86Om51bWJlclRhZ1JlZ2lzdGVyOwogICAgICAgICAgICAgc2h1ZmZsZURhdGEubnVtTG9j
YWxzID0gbV9qaXQuZ3JhcGgoKS5mcmFtZVJlZ2lzdGVyQ291bnQoKTsKLSAgICAgICAgICAgIHNo
dWZmbGVEYXRhLmNhbGxlZSA9IFZhbHVlUmVjb3Zlcnk6OmluR1BSKGNhbGxlZUdQUiwgRGF0YUZv
cm1hdEpTKTsKICAgICAgICAgICAgIHNodWZmbGVEYXRhLmFyZ3MucmVzaXplKG51bUFsbG9jYXRl
ZEFyZ3MpOwogICAgICAgICAgICAgc2h1ZmZsZURhdGEubnVtUGFzc2VkQXJncyA9IG51bVBhc3Nl
ZEFyZ3M7CiAgICAgICAgICAgICAKQEAgLTc4OCw5ICs3ODksOSBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjplbWl0Q2FsbChOb2RlKiBub2RlCiAgICAgfTsKICAgICAKICAgICBDYWxsTGlua0luZm8q
IGNhbGxMaW5rSW5mbyA9IG1faml0LmNvZGVCbG9jaygpLT5hZGRDYWxsTGlua0luZm8obV9jdXJy
ZW50Tm9kZS0+b3JpZ2luLnNlbWFudGljKTsKLSAgICBjYWxsTGlua0luZm8tPnNldFVwQ2FsbChj
YWxsVHlwZSwgY2FsbGVlR1BSKTsKIAogICAgIGlmIChub2RlLT5vcCgpID09IENhbGxFdmFsKSB7
CisgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0VXBDYWxsKGNhbGxUeXBlLCBjYWxsZWVHUFIpOwog
ICAgICAgICAvLyBXZSB3YW50IHRvIGNhbGwgb3BlcmF0aW9uQ2FsbEV2YWwgYnV0IHdlIGRvbid0
IHdhbnQgdG8gb3ZlcndyaXRlIHRoZSBwYXJhbWV0ZXIgYXJlYSBpbgogICAgICAgICAvLyB3aGlj
aCB3ZSBoYXZlIGNyZWF0ZWQgYSBwcm90b3R5cGljYWwgZXZhbCBjYWxsIGZyYW1lLiBUaGlzIG1l
YW5zIHRoYXQgd2UgaGF2ZSB0bwogICAgICAgICAvLyBzdWJ0cmFjdCBzdGFjayB0byBtYWtlIHJv
b20gZm9yIHRoZSBjYWxsLiBMdWNreSBmb3IgdXMsIGF0IHRoaXMgcG9pbnQgd2UgaGF2ZSB0aGUg
d2hvbGUKQEAgLTgyNCwyNCArODI1LDIxIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxs
KE5vZGUqIG5vZGUKICAgICB9CiAgICAgCiAgICAgaWYgKGlzRGlyZWN0KSB7CisgICAgICAgIGNh
bGxMaW5rSW5mby0+c2V0VXBDYWxsKGNhbGxUeXBlLCBjYWxsZWVHUFIpOwogICAgICAgICBjYWxs
TGlua0luZm8tPnNldEV4ZWN1dGFibGVEdXJpbmdDb21waWxhdGlvbihleGVjdXRhYmxlKTsKICAg
ICAgICAgY2FsbExpbmtJbmZvLT5zZXRNYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyhudW1B
bGxvY2F0ZWRBcmdzKTsKIAogICAgICAgICBpZiAoaXNUYWlsKSB7CiAgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVChub2RlLT5vcCgpID09IERpcmVjdFRhaWxDYWxsKTsKICAgICAgICAgICAgIAot
ICAgICAgICAgICAgSklUQ29tcGlsZXI6OlBhdGNoYWJsZUp1bXAgcGF0Y2hhYmxlSnVtcCA9IG1f
aml0LnBhdGNoYWJsZUp1bXAoKTsKLSAgICAgICAgICAgIEpJVENvbXBpbGVyOjpMYWJlbCBtYWlu
UGF0aCA9IG1faml0LmxhYmVsKCk7Ci0gICAgICAgICAgICAKICAgICAgICAgICAgIG1faml0LmVt
aXRTdG9yZUNhbGxTaXRlSW5kZXgoY2FsbFNpdGUpOwogICAgICAgICAgICAgCi0gICAgICAgICAg
ICBjYWxsTGlua0luZm8tPnNldEZyYW1lU2h1ZmZsZURhdGEoc2h1ZmZsZURhdGEpOwotICAgICAg
ICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIobV9qaXQsIHNodWZmbGVEYXRhKS5wcmVwYXJlRm9yVGFp
bENhbGwoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgSklUQ29tcGlsZXI6OkNhbGwgY2Fs
bCA9IG1faml0Lm5lYXJUYWlsQ2FsbCgpOwotICAgICAgICAgICAgCisgICAgICAgICAgICBKSVRD
b21waWxlcjo6TGFiZWwgbWFpblBhdGggPSBtX2ppdC5sYWJlbCgpOworICAgICAgICAgICAgQ2Fs
bExpbmtJbmZvOjplbWl0RGlyZWN0VGFpbENhbGxGYXN0UGF0aChtX2ppdCwgKmNhbGxMaW5rSW5m
bywgWyZdIHsKKyAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldEZyYW1lU2h1ZmZsZURh
dGEoc2h1ZmZsZURhdGEpOworICAgICAgICAgICAgICAgIENhbGxGcmFtZVNodWZmbGVyKG1faml0
LCBzaHVmZmxlRGF0YSkucHJlcGFyZUZvclRhaWxDYWxsKCk7CisgICAgICAgICAgICB9KTsKICAg
ICAgICAgICAgIEpJVENvbXBpbGVyOjpMYWJlbCBzbG93UGF0aCA9IG1faml0LmxhYmVsKCk7Ci0g
ICAgICAgICAgICBwYXRjaGFibGVKdW1wLm1fanVtcC5saW5rVG8oc2xvd1BhdGgsICZtX2ppdCk7
CiAgICAgICAgICAgICAKICAgICAgICAgICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKEludmFs
aWRHUFJSZWcpOwogICAgICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25MaW5rRGlyZWN0
Q2FsbCwgY2FsbExpbmtJbmZvLCBjYWxsZWVHUFIpOwpAQCAtODUxLDE1ICs4NDksMTMgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZQogICAgICAgICAgICAgCiAgICAg
ICAgICAgICB1c2VDaGlsZHJlbihub2RlKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgbV9q
aXQuYWRkSlNEaXJlY3RUYWlsQ2FsbChwYXRjaGFibGVKdW1wLCBjYWxsLCBzbG93UGF0aCwgY2Fs
bExpbmtJbmZvKTsKKyAgICAgICAgICAgIG1faml0LmFkZEpTRGlyZWN0Q2FsbChtYWluUGF0aCwg
c2xvd1BhdGgsIGNhbGxMaW5rSW5mbyk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0K
ICAgICAgICAgCi0gICAgICAgIEpJVENvbXBpbGVyOjpMYWJlbCBtYWluUGF0aCA9IG1faml0Lmxh
YmVsKCk7Ci0gICAgICAgIAogICAgICAgICBtX2ppdC5lbWl0U3RvcmVDYWxsU2l0ZUluZGV4KGNh
bGxTaXRlKTsKLSAgICAgICAgCi0gICAgICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGwgPSBtX2pp
dC5uZWFyQ2FsbCgpOworICAgICAgICBKSVRDb21waWxlcjo6TGFiZWwgbWFpblBhdGggPSBtX2pp
dC5sYWJlbCgpOworICAgICAgICBDYWxsTGlua0luZm86OmVtaXREaXJlY3RGYXN0UGF0aChtX2pp
dCwgKmNhbGxMaW5rSW5mbyk7CiAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGRvbmUgPSBtX2pp
dC5qdW1wKCk7CiAgICAgICAgIAogICAgICAgICBKSVRDb21waWxlcjo6TGFiZWwgc2xvd1BhdGgg
PSBtX2ppdC5sYWJlbCgpOwpAQCAtODc0LDMwICs4NzAsMzIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6ZW1pdENhbGwoTm9kZSogbm9kZQogICAgICAgICAKICAgICAgICAgc2V0UmVzdWx0QW5kUmVz
ZXRTdGFjaygpOwogICAgICAgICAKLSAgICAgICAgbV9qaXQuYWRkSlNEaXJlY3RDYWxsKGNhbGws
IHNsb3dQYXRoLCBjYWxsTGlua0luZm8pOworICAgICAgICBtX2ppdC5hZGRKU0RpcmVjdENhbGwo
bWFpblBhdGgsIHNsb3dQYXRoLCBjYWxsTGlua0luZm8pOwogICAgICAgICByZXR1cm47CiAgICAg
fQogICAgIAogICAgIG1faml0LmVtaXRTdG9yZUNhbGxTaXRlSW5kZXgoY2FsbFNpdGUpOwogICAg
IAotICAgIEpJVENvbXBpbGVyOjpEYXRhTGFiZWxQdHIgdGFyZ2V0VG9DaGVjazsKLSAgICBKSVRD
b21waWxlcjo6SnVtcCBzbG93UGF0aCA9IG1faml0LmJyYW5jaFB0cldpdGhQYXRjaChNYWNyb0Fz
c2VtYmxlcjo6Tm90RXF1YWwsIGNhbGxlZUdQUiwgdGFyZ2V0VG9DaGVjaywgVHJ1c3RlZEltbVB0
cihudWxscHRyKSk7CisgICAgY2FsbExpbmtJbmZvLT5zZXRVcENhbGwoY2FsbFR5cGUsIGNhbGxl
ZUdQUik7CiAKKyAgICBhdXRvIGZhc3RQYXRoU3RhcnQgPSBtX2ppdC5sYWJlbCgpOworICAgIEND
YWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd0Nhc2VzOwogICAgIGlmIChpc1RhaWwpIHsKLSAgICAg
ICAgaWYgKG5vZGUtPm9wKCkgPT0gVGFpbENhbGwpIHsKLSAgICAgICAgICAgIGNhbGxMaW5rSW5m
by0+c2V0RnJhbWVTaHVmZmxlRGF0YShzaHVmZmxlRGF0YSk7Ci0gICAgICAgICAgICBDYWxsRnJh
bWVTaHVmZmxlcihtX2ppdCwgc2h1ZmZsZURhdGEpLnByZXBhcmVGb3JUYWlsQ2FsbCgpOwotICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgbV9qaXQuZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygp
OwotICAgICAgICAgICAgbV9qaXQucHJlcGFyZUZvclRhaWxDYWxsU2xvdygpOwotICAgICAgICB9
Ci0gICAgfQotCi0gICAgSklUQ29tcGlsZXI6OkNhbGwgZmFzdENhbGwgPSBpc1RhaWwgPyBtX2pp
dC5uZWFyVGFpbENhbGwoKSA6IG1faml0Lm5lYXJDYWxsKCk7Ci0KKyAgICAgICAgc2xvd0Nhc2Vz
ID0gQ2FsbExpbmtJbmZvOjplbWl0VGFpbENhbGxGYXN0UGF0aChtX2ppdCwgY2FsbGVlR1BSLCBJ
bnZhbGlkR1BSUmVnLCAqY2FsbExpbmtJbmZvLCBDYWxsTGlua0luZm86OlVzZURhdGFJQzo6Tm8s
IFsmXSB7CisgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBUYWlsQ2FsbCkgeworICAgICAg
ICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0RnJhbWVTaHVmZmxlRGF0YShzaHVmZmxlRGF0YSk7
CisgICAgICAgICAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIobV9qaXQsIHNodWZmbGVEYXRhKS5w
cmVwYXJlRm9yVGFpbENhbGwoKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgbV9qaXQuZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOworICAgICAgICAgICAgICAgIG1faml0
LnByZXBhcmVGb3JUYWlsQ2FsbFNsb3coKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7Cisg
ICAgfSBlbHNlCisgICAgICAgIHNsb3dDYXNlcyA9IENhbGxMaW5rSW5mbzo6ZW1pdEZhc3RQYXRo
KG1faml0LCBjYWxsZWVHUFIsIEludmFsaWRHUFJSZWcsICpjYWxsTGlua0luZm8sIENhbGxMaW5r
SW5mbzo6VXNlRGF0YUlDOjpObyk7CiAgICAgSklUQ29tcGlsZXI6Okp1bXAgZG9uZSA9IG1faml0
Lmp1bXAoKTsKIAotICAgIHNsb3dQYXRoLmxpbmsoJm1faml0KTsKKyAgICBzbG93Q2FzZXMubGlu
aygmbV9qaXQpOworICAgIGF1dG8gc2xvd1BhdGhTdGFydCA9IG1faml0LmxhYmVsKCk7CiAKICAg
ICBpZiAobm9kZS0+b3AoKSA9PSBUYWlsQ2FsbCkgewogICAgICAgICBDYWxsRnJhbWVTaHVmZmxl
ciBjYWxsRnJhbWVTaHVmZmxlcihtX2ppdCwgc2h1ZmZsZURhdGEpOwpAQCAtOTA1LDIzICs5MDMs
MjIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZQogICAgICAgICBj
YWxsRnJhbWVTaHVmZmxlci5wcmVwYXJlRm9yU2xvd1BhdGgoKTsKICAgICB9IGVsc2UgewogICAg
ICAgICBtX2ppdC5tb3ZlKGNhbGxlZUdQUiwgR1BSSW5mbzo6cmVnVDApOyAvLyBDYWxsZWUgbmVl
ZHMgdG8gYmUgaW4gcmVnVDAKLQogICAgICAgICBpZiAoaXNUYWlsKQogICAgICAgICAgICAgbV9q
aXQuZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOyAvLyBUaGlzIG5lZWRzIHRvIGhhcHBlbiBhZnRl
ciB3ZSBtb3ZlZCBjYWxsZWVHUFIgdG8gcmVnVDAKICAgICB9CiAKLSAgICBtX2ppdC5tb3ZlKFRy
dXN0ZWRJbW1QdHIoY2FsbExpbmtJbmZvKSwgR1BSSW5mbzo6cmVnVDIpOyAvLyBMaW5rIGluZm8g
bmVlZHMgdG8gYmUgaW4gcmVnVDIKICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHI6OndlYWtQ
b2ludGVyKG1fZ3JhcGgsIGdsb2JhbE9iamVjdCksIEdQUkluZm86OnJlZ1QzKTsgLy8gSlNHbG9i
YWxPYmplY3QgbmVlZHMgdG8gYmUgaW4gcmVnVDMKLSAgICBKSVRDb21waWxlcjo6Q2FsbCBzbG93
Q2FsbCA9IG1faml0Lm5lYXJDYWxsKCk7CisgICAgQ2FsbExpbmtJbmZvOjplbWl0U2xvd1BhdGgo
dm0oKSwgbV9qaXQsICpjYWxsTGlua0luZm8pOwogCiAgICAgZG9uZS5saW5rKCZtX2ppdCk7Cisg
ICAgYXV0byBkb25lTG9jYXRpb24gPSBtX2ppdC5sYWJlbCgpOwogCiAgICAgaWYgKGlzVGFpbCkK
ICAgICAgICAgbV9qaXQuYWJvcnRXaXRoUmVhc29uKEpJVERpZFJldHVybkZyb21UYWlsQ2FsbCk7
CiAgICAgZWxzZQogICAgICAgICBzZXRSZXN1bHRBbmRSZXNldFN0YWNrKCk7CiAKLSAgICBtX2pp
dC5hZGRKU0NhbGwoZmFzdENhbGwsIHNsb3dDYWxsLCB0YXJnZXRUb0NoZWNrLCBjYWxsTGlua0lu
Zm8pOworICAgIG1faml0LmFkZEpTQ2FsbChmYXN0UGF0aFN0YXJ0LCBzbG93UGF0aFN0YXJ0LCBk
b25lTG9jYXRpb24sIGNhbGxMaW5rSW5mbyk7CiB9CiAKIC8vIENsYW5nIHNob3VsZCBhbGxvdyB1
bnJlYWNoYWJsZSBbW2NsYW5nOjpmYWxsdGhyb3VnaF1dIGluIHRlbXBsYXRlIGZ1bmN0aW9ucyBp
ZiBhbnkgdGVtcGxhdGUgZXhwYW5zaW9uIHVzZXMgaXQKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHJldmlzaW9uIDI3Njk3NykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtOTcxNywyNCArOTcxNywyMSBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICBD
Q2FsbEhlbHBlcnM6OnRhZ0ZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6YXJndW1l
bnRDb3VudEluY2x1ZGluZ1RoaXMpKSk7CiAKICAgICAgICAgICAgICAgICBDYWxsTGlua0luZm8q
IGNhbGxMaW5rSW5mbyA9IGppdC5jb2RlQmxvY2soKS0+YWRkQ2FsbExpbmtJbmZvKG5vZGUtPm9y
aWdpbi5zZW1hbnRpYyk7CisgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRVcENhbGwo
CisgICAgICAgICAgICAgICAgICAgIG5vZGUtPm9wKCkgPT0gQ29uc3RydWN0ID8gQ2FsbExpbmtJ
bmZvOjpDb25zdHJ1Y3QgOiBDYWxsTGlua0luZm86OkNhbGwsIEdQUkluZm86OnJlZ1QwKTsKIAot
ICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6RGF0YUxhYmVsUHRyIHRhcmdldFRvQ2hlY2s7
Ci0gICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIHNsb3dQYXRoID0gaml0LmJyYW5j
aFB0cldpdGhQYXRjaCgKLSAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpOb3RFcXVh
bCwgR1BSSW5mbzo6cmVnVDAsIHRhcmdldFRvQ2hlY2ssCi0gICAgICAgICAgICAgICAgICAgIEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihudWxscHRyKSk7Ci0KLSAgICAgICAgICAgICAgICBD
Q2FsbEhlbHBlcnM6OkNhbGwgZmFzdENhbGwgPSBqaXQubmVhckNhbGwoKTsKKyAgICAgICAgICAg
ICAgICBhdXRvIGZhc3RQYXRoU3RhcnQgPSBqaXQubGFiZWwoKTsKKyAgICAgICAgICAgICAgICBh
dXRvIHNsb3dQYXRoID0gQ2FsbExpbmtJbmZvOjplbWl0RmFzdFBhdGgoaml0LCBHUFJJbmZvOjpy
ZWdUMCwgSW52YWxpZEdQUlJlZywgKmNhbGxMaW5rSW5mbywgQ2FsbExpbmtJbmZvOjpVc2VEYXRh
SUM6Ok5vKTsKICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZG9uZSA9IGppdC5q
dW1wKCk7CiAKICAgICAgICAgICAgICAgICBzbG93UGF0aC5saW5rKCZqaXQpOwotCi0gICAgICAg
ICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGNhbGxMaW5rSW5m
byksIEdQUkluZm86OnJlZ1QyKTsKKyAgICAgICAgICAgICAgICBhdXRvIHNsb3dQYXRoU3RhcnQg
PSBqaXQubGFiZWwoKTsKICAgICAgICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW1QdHIoaml0LmNvZGVCbG9jaygpLT5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2lu
LnNlbWFudGljKSksIEdQUkluZm86OnJlZ1QzKTsKLSAgICAgICAgICAgICAgICBDQ2FsbEhlbHBl
cnM6OkNhbGwgc2xvd0NhbGwgPSBqaXQubmVhckNhbGwoKTsKKyAgICAgICAgICAgICAgICBDYWxs
TGlua0luZm86OmVtaXRTbG93UGF0aCgqdm0sIGppdCwgKmNhbGxMaW5rSW5mbyk7CisKICAgICAg
ICAgICAgICAgICBkb25lLmxpbmsoJmppdCk7CiAKLSAgICAgICAgICAgICAgICBjYWxsTGlua0lu
Zm8tPnNldFVwQ2FsbCgKLSAgICAgICAgICAgICAgICAgICAgbm9kZS0+b3AoKSA9PSBDb25zdHJ1
Y3QgPyBDYWxsTGlua0luZm86OkNvbnN0cnVjdCA6IENhbGxMaW5rSW5mbzo6Q2FsbCwgR1BSSW5m
bzo6cmVnVDApOworICAgICAgICAgICAgICAgIGF1dG8gZG9uZUxvY2F0aW9uID0gaml0LmxhYmVs
KCk7CiAKICAgICAgICAgICAgICAgICBqaXQuYWRkUHRyKAogICAgICAgICAgICAgICAgICAgICBD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigtcGFyYW1zLnByb2MoKS5mcmFtZVNpemUoKSksCkBA
IC05NzQyLDEzICs5NzM5LDEwIEBAIHByaXZhdGU6CiAKICAgICAgICAgICAgICAgICBqaXQuYWRk
TGlua1Rhc2soCiAgICAgICAgICAgICAgICAgICAgIFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZl
cikgewotICAgICAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpJVFRo
dW5rUHRyVGFnPiBsaW5rQ2FsbCA9IHZtLT5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0
b3IpLmNvZGUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhzbG93
Q2FsbCwgRnVuY3Rpb25QdHI8SklUVGh1bmtQdHJUYWc+KGxpbmtDYWxsKSk7Ci0KICAgICAgICAg
ICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0Q2FsbExvY2F0aW9ucygKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPihs
aW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxKU0ludGVybmFsUHRyVGFnPihzbG93Q2FsbCkp
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJu
YWxQdHJUYWc+KGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPih0YXJnZXRU
b0NoZWNrKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5sb2NhdGlv
bk9mTmVhckNhbGw8SlNJbnRlcm5hbFB0clRhZz4oZmFzdENhbGwpKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oZmFz
dFBhdGhTdGFydCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5sb2Nh
dGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KHNsb3dQYXRoU3RhcnQpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihkb25l
TG9jYXRpb24pKTsKICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICB9KTsKIApA
QCAtOTg1Nyw2MyArOTg1MSw1MyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICBzaHVm
ZmxlRGF0YS5zZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMoaml0LmNvZGVCbG9jaygpKTsKICAgICAg
ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIENhbGxMaW5rSW5mbyogY2FsbExp
bmtJbmZvID0gaml0LmNvZGVCbG9jaygpLT5hZGRDYWxsTGlua0luZm8obm9kZS0+b3JpZ2luLnNl
bWFudGljKTsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIENDYWxs
SGVscGVyczo6UGF0Y2hhYmxlSnVtcCBwYXRjaGFibGVKdW1wID0gaml0LnBhdGNoYWJsZUp1bXAo
KTsKLSAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpMYWJlbCBtYWluUGF0aCA9IGpp
dC5sYWJlbCgpOworICAgICAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldFVwQ2FsbChD
YWxsTGlua0luZm86OkRpcmVjdFRhaWxDYWxsLCBJbnZhbGlkR1BSUmVnKTsKICAgICAgICAgICAg
ICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIGppdC5zdG9yZTMyKAogICAgICAgICAgICAg
ICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoY2FsbFNpdGVJbmRleC5iaXRz
KCkpLAogICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjp0YWdGb3IoVmlydHVh
bFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSkpOwog
ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldEZy
YW1lU2h1ZmZsZURhdGEoc2h1ZmZsZURhdGEpOwotICAgICAgICAgICAgICAgICAgICBDYWxsRnJh
bWVTaHVmZmxlcihqaXQsIHNodWZmbGVEYXRhKS5wcmVwYXJlRm9yVGFpbENhbGwoKTsKLSAgICAg
ICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBj
YWxsID0gaml0Lm5lYXJUYWlsQ2FsbCgpOworICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBl
cnM6OkxhYmVsIG1haW5QYXRoID0gaml0LmxhYmVsKCk7CisgICAgICAgICAgICAgICAgICAgIENh
bGxMaW5rSW5mbzo6ZW1pdERpcmVjdFRhaWxDYWxsRmFzdFBhdGgoaml0LCAqY2FsbExpbmtJbmZv
LCBbJl0geworICAgICAgICAgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRGcmFtZVNo
dWZmbGVEYXRhKHNodWZmbGVEYXRhKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIENhbGxGcmFt
ZVNodWZmbGVyKGppdCwgc2h1ZmZsZURhdGEpLnByZXBhcmVGb3JUYWlsQ2FsbCgpOworICAgICAg
ICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAg
ICAgIGppdC5hYm9ydFdpdGhSZWFzb24oSklURGlkUmV0dXJuRnJvbVRhaWxDYWxsKTsKICAgICAg
ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6TGFiZWwg
c2xvd1BhdGggPSBqaXQubGFiZWwoKTsKLSAgICAgICAgICAgICAgICAgICAgcGF0Y2hhYmxlSnVt
cC5tX2p1bXAubGlua1RvKHNsb3dQYXRoLCAmaml0KTsKICAgICAgICAgICAgICAgICAgICAgY2Fs
bE9wZXJhdGlvbigKICAgICAgICAgICAgICAgICAgICAgICAgICpzdGF0ZSwgdG9TYXZlLCBqaXQs
CiAgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5vcmlnaW4uc2VtYW50aWMsIGV4Y2VwdGlv
bnMuZ2V0KCksIG9wZXJhdGlvbkxpbmtEaXJlY3RDYWxsLAogICAgICAgICAgICAgICAgICAgICAg
ICAgSW52YWxpZEdQUlJlZywgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGNhbGxMaW5rSW5m
byksIGNhbGxlZUdQUikuY2FsbCgpOwogICAgICAgICAgICAgICAgICAgICBqaXQuanVtcCgpLmxp
bmtUbyhtYWluUGF0aCwgJmppdCk7Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAg
ICAgICAgICBjYWxsTGlua0luZm8tPnNldFVwQ2FsbChDYWxsTGlua0luZm86OkRpcmVjdFRhaWxD
YWxsLCBJbnZhbGlkR1BSUmVnKTsKICAgICAgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5z
ZXRFeGVjdXRhYmxlRHVyaW5nQ29tcGlsYXRpb24oZXhlY3V0YWJsZSk7CiAgICAgICAgICAgICAg
ICAgICAgIGlmIChudW1BbGxvY2F0ZWRBcmdzID4gbnVtUGFzc2VkQXJncykKICAgICAgICAgICAg
ICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0TWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXMobnVtQWxsb2NhdGVkQXJncyk7CiAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAg
ICAgICAgICBqaXQuYWRkTGlua1Rhc2soCi0gICAgICAgICAgICAgICAgICAgICAgICBbPV0gKExp
bmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2Rl
TG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBwYXRjaGFibGVKdW1wTG9jYXRpb24gPSBs
aW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4ocGF0Y2hhYmxlSnVtcCk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9uTmVhckNhbGw8SlNJbnRlcm5h
bFB0clRhZz4gY2FsbExvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8SlNJ
bnRlcm5hbFB0clRhZz4oY2FsbCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29kZUxv
Y2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gc2xvd1BhdGhMb2NhdGlvbiA9IGxpbmtCdWZm
ZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihzbG93UGF0aCk7Ci0KLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldENhbGxMb2NhdGlvbnMoCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGNoYWJsZUp1bXBMb2NhdGlvbiwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGhMb2NhdGlvbiwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY2FsbExvY2F0aW9uKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IH0pOworICAgICAgICAgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVy
JiBsaW5rQnVmZmVyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNl
dENhbGxMb2NhdGlvbnMoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5s
b2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KG1haW5QYXRoKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oc2xvd1Bh
dGgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50
ZXJuYWxQdHJUYWc+KCkpOworICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKICAgICAg
ICAgICAgICAgICBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbyA9IGppdC5jb2RlQmxvY2soKS0+
YWRkQ2FsbExpbmtJbmZvKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7Ci0gICAgICAgICAgICAgICAg
Ci0gICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpMYWJlbCBtYWluUGF0aCA9IGppdC5sYWJl
bCgpOworICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0VXBDYWxsKAorICAgICAgICAg
ICAgICAgICAgICBpc0NvbnN0cnVjdCA/IENhbGxMaW5rSW5mbzo6RGlyZWN0Q29uc3RydWN0IDog
Q2FsbExpbmtJbmZvOjpEaXJlY3RDYWxsLCBJbnZhbGlkR1BSUmVnKTsKIAogICAgICAgICAgICAg
ICAgIGppdC5zdG9yZTMyKAogICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW0zMihjYWxsU2l0ZUluZGV4LmJpdHMoKSksCiAgICAgICAgICAgICAgICAgICAgIENDYWxs
SGVscGVyczo6dGFnRm9yKFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpcykpKTsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBD
Q2FsbEhlbHBlcnM6OkNhbGwgY2FsbCA9IGppdC5uZWFyQ2FsbCgpOworICAgICAgICAgICAgICAg
IENDYWxsSGVscGVyczo6TGFiZWwgbWFpblBhdGggPSBqaXQubGFiZWwoKTsKKyAgICAgICAgICAg
ICAgICBDYWxsTGlua0luZm86OmVtaXREaXJlY3RGYXN0UGF0aChqaXQsICpjYWxsTGlua0luZm8p
OwogICAgICAgICAgICAgICAgIGppdC5hZGRQdHIoCiAgICAgICAgICAgICAgICAgICAgIENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbTMyKC1wYXJhbXMucHJvYygpLmZyYW1lU2l6ZSgpKSwKICAgICAg
ICAgICAgICAgICAgICAgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIENDYWxsSGVscGVyczo6
c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAg
IGNhbGxMaW5rSW5mby0+c2V0VXBDYWxsKAotICAgICAgICAgICAgICAgICAgICBpc0NvbnN0cnVj
dCA/IENhbGxMaW5rSW5mbzo6RGlyZWN0Q29uc3RydWN0IDogQ2FsbExpbmtJbmZvOjpEaXJlY3RD
YWxsLCBJbnZhbGlkR1BSUmVnKTsKICAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldEV4
ZWN1dGFibGVEdXJpbmdDb21waWxhdGlvbihleGVjdXRhYmxlKTsKICAgICAgICAgICAgICAgICBp
ZiAobnVtQWxsb2NhdGVkQXJncyA+IG51bVBhc3NlZEFyZ3MpCiAgICAgICAgICAgICAgICAgICAg
IGNhbGxMaW5rSW5mby0+c2V0TWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMobnVtQWxsb2Nh
dGVkQXJncyk7CkBAIC05OTM1LDE1ICs5OTE5LDEwIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAg
ICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgIGppdC5hZGRMaW5rVGFzaygKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9uTmVhckNhbGw8SlNJ
bnRlcm5hbFB0clRhZz4gY2FsbExvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNh
bGw8SlNJbnRlcm5hbFB0clRhZz4oY2FsbCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IHNsb3dQYXRoTG9jYXRpb24g
PSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oc2xvd1BhdGgpOwotCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCBzbG93
UGF0aExvY2F0aW9uKTsKLQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsTGlu
a0luZm8tPnNldENhbGxMb2NhdGlvbnMoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPigpLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGhMb2NhdGlvbiwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNhbGxMb2NhdGlvbik7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4o
bWFpblBhdGgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZl
ci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KHNsb3dQYXRoKSwgCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFn
PigpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAg
ICAgfSk7CiAgICAgICAgICAgICB9KTsKQEAgLTEwMDM0LDQwICsxMDAxMywzMiBAQCBwcml2YXRl
OgogICAgICAgICAgICAgICAgIHNodWZmbGVEYXRhLnNldHVwQ2FsbGVlU2F2ZVJlZ2lzdGVycyhq
aXQuY29kZUJsb2NrKCkpOwogCiAgICAgICAgICAgICAgICAgQ2FsbExpbmtJbmZvKiBjYWxsTGlu
a0luZm8gPSBqaXQuY29kZUJsb2NrKCktPmFkZENhbGxMaW5rSW5mbyhjb2RlT3JpZ2luKTsKKyAg
ICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldFVwQ2FsbChDYWxsTGlua0luZm86OlRhaWxD
YWxsLCBHUFJJbmZvOjpyZWdUMCk7CiAKLSAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkRh
dGFMYWJlbFB0ciB0YXJnZXRUb0NoZWNrOwotICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6
SnVtcCBzbG93UGF0aCA9IGppdC5icmFuY2hQdHJXaXRoUGF0Y2goCi0gICAgICAgICAgICAgICAg
ICAgIENDYWxsSGVscGVyczo6Tm90RXF1YWwsIEdQUkluZm86OnJlZ1QwLCB0YXJnZXRUb0NoZWNr
LAotICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobnVsbHB0
cikpOwotCi0gICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRGcmFtZVNodWZmbGVEYXRh
KHNodWZmbGVEYXRhKTsKLSAgICAgICAgICAgICAgICBDYWxsRnJhbWVTaHVmZmxlcihqaXQsIHNo
dWZmbGVEYXRhKS5wcmVwYXJlRm9yVGFpbENhbGwoKTsKLQotICAgICAgICAgICAgICAgIENDYWxs
SGVscGVyczo6Q2FsbCBmYXN0Q2FsbCA9IGppdC5uZWFyVGFpbENhbGwoKTsKKyAgICAgICAgICAg
ICAgICBhdXRvIGZhc3RQYXRoU3RhcnQgPSBqaXQubGFiZWwoKTsKKyAgICAgICAgICAgICAgICBh
dXRvIHNsb3dQYXRoID0gQ2FsbExpbmtJbmZvOjplbWl0VGFpbENhbGxGYXN0UGF0aChqaXQsIEdQ
UkluZm86OnJlZ1QwLCBJbnZhbGlkR1BSUmVnLCAqY2FsbExpbmtJbmZvLCBDYWxsTGlua0luZm86
OlVzZURhdGFJQzo6Tm8sIFsmXSB7CisgICAgICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+
c2V0RnJhbWVTaHVmZmxlRGF0YShzaHVmZmxlRGF0YSk7CisgICAgICAgICAgICAgICAgICAgIENh
bGxGcmFtZVNodWZmbGVyKGppdCwgc2h1ZmZsZURhdGEpLnByZXBhcmVGb3JUYWlsQ2FsbCgpOwor
ICAgICAgICAgICAgICAgIH0pOwogCiAgICAgICAgICAgICAgICAgc2xvd1BhdGgubGluaygmaml0
KTsKLQorICAgICAgICAgICAgICAgIGF1dG8gc2xvd1BhdGhTdGFydCA9IGppdC5sYWJlbCgpOwog
ICAgICAgICAgICAgICAgIENhbGxGcmFtZVNodWZmbGVyIHNsb3dQYXRoU2h1ZmZsZXIoaml0LCBz
aHVmZmxlRGF0YSk7CiAgICAgICAgICAgICAgICAgc2xvd1BhdGhTaHVmZmxlci5zZXRDYWxsZWVK
U1ZhbHVlUmVncyhKU1ZhbHVlUmVncyhHUFJJbmZvOjpyZWdUMCkpOwogICAgICAgICAgICAgICAg
IHNsb3dQYXRoU2h1ZmZsZXIucHJlcGFyZUZvclNsb3dQYXRoKCk7CiAKLSAgICAgICAgICAgICAg
ICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoY2FsbExpbmtJbmZvKSwgR1BS
SW5mbzo6cmVnVDIpOwogICAgICAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1
c3RlZEltbVB0cihqaXQuY29kZUJsb2NrKCktPmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4u
c2VtYW50aWMpKSwgR1BSSW5mbzo6cmVnVDMpOwotICAgICAgICAgICAgICAgIENDYWxsSGVscGVy
czo6Q2FsbCBzbG93Q2FsbCA9IGppdC5uZWFyQ2FsbCgpOworICAgICAgICAgICAgICAgIENhbGxM
aW5rSW5mbzo6ZW1pdFNsb3dQYXRoKCp2bSwgaml0LCAqY2FsbExpbmtJbmZvKTsKIAorICAgICAg
ICAgICAgICAgIGF1dG8gZG9uZUxvY2F0aW9uID0gaml0LmxhYmVsKCk7CiAgICAgICAgICAgICAg
ICAgaml0LmFib3J0V2l0aFJlYXNvbihKSVREaWRSZXR1cm5Gcm9tVGFpbENhbGwpOwogCi0gICAg
ICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRVcENhbGwoQ2FsbExpbmtJbmZvOjpUYWlsQ2Fs
bCwgR1BSSW5mbzo6cmVnVDApOwotCiAgICAgICAgICAgICAgICAgaml0LmFkZExpbmtUYXNrKAog
ICAgICAgICAgICAgICAgICAgICBbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKSVRUaHVua1B0clRhZz4g
bGlua0NhbGwgPSB2bS0+Z2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5jb2RlKCk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoc2xvd0NhbGwsIEZ1bmN0
aW9uUHRyPEpJVFRodW5rUHRyVGFnPihsaW5rQ2FsbCkpOwotCiAgICAgICAgICAgICAgICAgICAg
ICAgICBjYWxsTGlua0luZm8tPnNldENhbGxMb2NhdGlvbnMoCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4obGlua0J1ZmZlci5s
b2NhdGlvbk9mTmVhckNhbGw8SlNJbnRlcm5hbFB0clRhZz4oc2xvd0NhbGwpKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPihs
aW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4odGFyZ2V0VG9DaGVjaykpLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxs
PEpTSW50ZXJuYWxQdHJUYWc+KGZhc3RDYWxsKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KGZhc3RQYXRoU3RhcnQp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0lu
dGVybmFsUHRyVGFnPihzbG93UGF0aFN0YXJ0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oZG9uZUxvY2F0aW9uKSk7
CiAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgfSk7CiAgICAgfQpAQCAtMTAz
MjAsNDAgKzEwMjkxLDM5IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgZWxzZQogICAgICAg
ICAgICAgICAgICAgICBjYWxsVHlwZSA9IENhbGxMaW5rSW5mbzo6Q2FsbFZhcmFyZ3M7CiAgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRVcENhbGwoY2Fs
bFR5cGUsIEdQUkluZm86OnJlZ1QwKTsKKwogICAgICAgICAgICAgICAgIGJvb2wgaXNUYWlsQ2Fs
bCA9IENhbGxMaW5rSW5mbzo6Y2FsbE1vZGVGb3IoY2FsbFR5cGUpID09IENhbGxNb2RlOjpUYWls
OwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6RGF0YUxh
YmVsUHRyIHRhcmdldFRvQ2hlY2s7Ci0gICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1w
IHNsb3dQYXRoID0gaml0LmJyYW5jaFB0cldpdGhQYXRjaCgKLSAgICAgICAgICAgICAgICAgICAg
Q0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwgR1BSSW5mbzo6cmVnVDAsIHRhcmdldFRvQ2hlY2ssCi0g
ICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihudWxscHRyKSk7
Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGZh
c3RDYWxsOworCisgICAgICAgICAgICAgICAgQVNTRVJUKCF1c2VkUmVnaXN0ZXJzLmdldChHUFJJ
bmZvOjpyZWdUMikpOyAvLyBVc2VkIG9uIHRoZSBzbG93IHBhdGguCisKKyAgICAgICAgICAgICAg
ICBhdXRvIGZhc3RQYXRoU3RhcnQgPSBqaXQubGFiZWwoKTsKKyAgICAgICAgICAgICAgICBDQ2Fs
bEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dQYXRoOwogICAgICAgICAgICAgICAgIENDYWxsSGVscGVy
czo6SnVtcCBkb25lOwotICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGlmIChpc1Rh
aWxDYWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIGppdC5lbWl0UmVzdG9yZUNhbGxlZVNhdmVz
KCk7Ci0gICAgICAgICAgICAgICAgICAgIGppdC5wcmVwYXJlRm9yVGFpbENhbGxTbG93KCk7Ci0g
ICAgICAgICAgICAgICAgICAgIGZhc3RDYWxsID0gaml0Lm5lYXJUYWlsQ2FsbCgpOworICAgICAg
ICAgICAgICAgICAgICBzbG93UGF0aCA9IENhbGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxsRmFzdFBh
dGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgSW52YWxpZEdQUlJlZywgKmNhbGxMaW5rSW5mbywgQ2Fs
bExpbmtJbmZvOjpVc2VEYXRhSUM6Ok5vLCBbJl0geworICAgICAgICAgICAgICAgICAgICAgICAg
aml0LmVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGpp
dC5wcmVwYXJlRm9yVGFpbENhbGxTbG93KCk7CisgICAgICAgICAgICAgICAgICAgIH0pOwogICAg
ICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGZhc3RDYWxsID0gaml0
Lm5lYXJDYWxsKCk7CisgICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoID0gQ2FsbExpbmtJbmZv
OjplbWl0RmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgSW52YWxpZEdQUlJlZywgKmNhbGxM
aW5rSW5mbywgQ2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6Ok5vKTsKICAgICAgICAgICAgICAgICAg
ICAgZG9uZSA9IGppdC5qdW1wKCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgICAgIHNsb3dQYXRoLmxpbmsoJmppdCk7CisgICAgICAgICAgICAgICAg
YXV0byBzbG93UGF0aFN0YXJ0ID0gaml0LmxhYmVsKCk7CiAKICAgICAgICAgICAgICAgICBpZiAo
aXNUYWlsQ2FsbCkKICAgICAgICAgICAgICAgICAgICAgaml0LmVtaXRSZXN0b3JlQ2FsbGVlU2F2
ZXMoKTsKLSAgICAgICAgICAgICAgICBBU1NFUlQoIXVzZWRSZWdpc3RlcnMuZ2V0KEdQUkluZm86
OnJlZ1QyKSk7Ci0gICAgICAgICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tUHRyKGNhbGxMaW5rSW5mbyksIEdQUkluZm86OnJlZ1QyKTsKICAgICAgICAgICAgICAgICBq
aXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoaml0LmNvZGVCbG9jaygpLT5nbG9i
YWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIEdQUkluZm86OnJlZ1QzKTsKLSAg
ICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgc2xvd0NhbGwgPSBqaXQubmVhckNhbGwo
KTsKKyAgICAgICAgICAgICAgICBDYWxsTGlua0luZm86OmVtaXRTbG93UGF0aCgqdm0sIGppdCwg
KmNhbGxMaW5rSW5mbyk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaWYgKGlz
VGFpbENhbGwpCiAgICAgICAgICAgICAgICAgICAgIGppdC5hYm9ydFdpdGhSZWFzb24oSklURGlk
UmV0dXJuRnJvbVRhaWxDYWxsKTsKICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAg
ICAgICAgIGRvbmUubGluaygmaml0KTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAg
ICBjYWxsTGlua0luZm8tPnNldFVwQ2FsbChjYWxsVHlwZSwgR1BSSW5mbzo6cmVnVDApOworCisg
ICAgICAgICAgICAgICAgYXV0byBkb25lTG9jYXRpb24gPSBqaXQubGFiZWwoKTsKIAogICAgICAg
ICAgICAgICAgIGppdC5hZGRQdHIoCiAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbTMyKC1vcmlnaW5hbFN0YWNrSGVpZ2h0KSwKQEAgLTEwMzYxLDEzICsxMDMzMSwx
MCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGppdC5hZGRM
aW5rVGFzaygKICAgICAgICAgICAgICAgICAgICAgWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVy
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SklUVGh1
bmtQdHJUYWc+IGxpbmtDYWxsID0gdm0tPmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRv
cikuY29kZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKHNsb3dD
YWxsLCBGdW5jdGlvblB0cjxKSVRUaHVua1B0clRhZz4obGlua0NhbGwpKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRD
YWxsTG9jYXRpb25zKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxh
YmVsPEpTSW50ZXJuYWxQdHJUYWc+KGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPEpTSW50
ZXJuYWxQdHJUYWc+KHNsb3dDYWxsKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29k
ZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4obGlua0J1ZmZlci5sb2NhdGlvbk9mPEpT
SW50ZXJuYWxQdHJUYWc+KHRhcmdldFRvQ2hlY2spKSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxKU0ludGVybmFsUHRyVGFnPihmYXN0
Q2FsbCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25P
ZjxKU0ludGVybmFsUHRyVGFnPihmYXN0UGF0aFN0YXJ0KSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oc2xvd1BhdGhT
dGFydCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5sb2NhdGlvbk9m
PEpTSW50ZXJuYWxQdHJUYWc+KGRvbmVMb2NhdGlvbikpOwogICAgICAgICAgICAgICAgICAgICB9
KTsKICAgICAgICAgICAgIH0pOwogCkBAIC0xMDYwNywzOSArMTA1NzQsMzcgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIGNhbGxUeXBlID0gQ2Fs
bExpbmtJbmZvOjpDYWxsVmFyYXJnczsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAg
ICBib29sIGlzVGFpbENhbGwgPSBDYWxsTGlua0luZm86OmNhbGxNb2RlRm9yKGNhbGxUeXBlKSA9
PSBDYWxsTW9kZTo6VGFpbDsKKyAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldFVwQ2Fs
bChjYWxsVHlwZSwgR1BSSW5mbzo6cmVnVDApOwogICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgICAgIENDYWxsSGVscGVyczo6RGF0YUxhYmVsUHRyIHRhcmdldFRvQ2hlY2s7Ci0gICAgICAg
ICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIHNsb3dQYXRoID0gaml0LmJyYW5jaFB0cldpdGhQ
YXRjaCgKLSAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwgR1BSSW5m
bzo6cmVnVDAsIHRhcmdldFRvQ2hlY2ssCi0gICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbVB0cihudWxscHRyKSk7CisgICAgICAgICAgICAgICAgYm9vbCBpc1RhaWxD
YWxsID0gQ2FsbExpbmtJbmZvOjpjYWxsTW9kZUZvcihjYWxsVHlwZSkgPT0gQ2FsbE1vZGU6OlRh
aWw7CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxs
IGZhc3RDYWxsOworICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd1Bh
dGg7CiAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGRvbmU7Ci0gICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgYXV0byBmYXN0UGF0aFN0YXJ0ID0gaml0LmxhYmVsKCk7
CiAgICAgICAgICAgICAgICAgaWYgKGlzVGFpbENhbGwpIHsKLSAgICAgICAgICAgICAgICAgICAg
aml0LmVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKLSAgICAgICAgICAgICAgICAgICAgaml0LnBy
ZXBhcmVGb3JUYWlsQ2FsbFNsb3coKTsKLSAgICAgICAgICAgICAgICAgICAgZmFzdENhbGwgPSBq
aXQubmVhclRhaWxDYWxsKCk7CisgICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoID0gQ2FsbExp
bmtJbmZvOjplbWl0VGFpbENhbGxGYXN0UGF0aChqaXQsIEdQUkluZm86OnJlZ1QwLCBJbnZhbGlk
R1BSUmVnLCAqY2FsbExpbmtJbmZvLCBDYWxsTGlua0luZm86OlVzZURhdGFJQzo6Tm8sIFsmXSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBqaXQuZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgaml0LnByZXBhcmVGb3JUYWlsQ2FsbFNsb3coKTsKKyAg
ICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgICAgICAgICAgZmFzdENhbGwgPSBqaXQubmVhckNhbGwoKTsKKyAgICAgICAgICAgICAgICAg
ICAgc2xvd1BhdGggPSBDYWxsTGlua0luZm86OmVtaXRGYXN0UGF0aChqaXQsIEdQUkluZm86OnJl
Z1QwLCBJbnZhbGlkR1BSUmVnLCAqY2FsbExpbmtJbmZvLCBDYWxsTGlua0luZm86OlVzZURhdGFJ
Qzo6Tm8pOwogICAgICAgICAgICAgICAgICAgICBkb25lID0gaml0Lmp1bXAoKTsKICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgc2xvd1BhdGgubGlu
aygmaml0KTsKKyAgICAgICAgICAgICAgICBhdXRvIHNsb3dQYXRoU3RhcnQgPSBqaXQubGFiZWwo
KTsKIAogICAgICAgICAgICAgICAgIGlmIChpc1RhaWxDYWxsKQogICAgICAgICAgICAgICAgICAg
ICBqaXQuZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwotICAgICAgICAgICAgICAgIGppdC5tb3Zl
KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihjYWxsTGlua0luZm8pLCBHUFJJbmZvOjpyZWdU
Mik7CiAgICAgICAgICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRy
KGppdC5jb2RlQmxvY2soKS0+Z2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykp
LCBHUFJJbmZvOjpyZWdUMyk7Ci0gICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIHNs
b3dDYWxsID0gaml0Lm5lYXJDYWxsKCk7CisgICAgICAgICAgICAgICAgQ2FsbExpbmtJbmZvOjpl
bWl0U2xvd1BhdGgoKnZtLCBqaXQsICpjYWxsTGlua0luZm8pOwogICAgICAgICAgICAgICAgIAog
ICAgICAgICAgICAgICAgIGlmIChpc1RhaWxDYWxsKQogICAgICAgICAgICAgICAgICAgICBqaXQu
YWJvcnRXaXRoUmVhc29uKEpJVERpZFJldHVybkZyb21UYWlsQ2FsbCk7CiAgICAgICAgICAgICAg
ICAgZWxzZQogICAgICAgICAgICAgICAgICAgICBkb25lLmxpbmsoJmppdCk7Ci0gICAgICAgICAg
ICAgICAgCi0gICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRVcENhbGwoY2FsbFR5cGUs
IEdQUkluZm86OnJlZ1QwKTsKKworICAgICAgICAgICAgICAgIGF1dG8gZG9uZUxvY2F0aW9uID0g
aml0LmxhYmVsKCk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaml0LmFkZFB0
cigKICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoLW9yaWdp
bmFsU3RhY2tIZWlnaHQpLApAQCAtMTA2NDcsMTMgKzEwNjEyLDEwIEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaml0LmFkZExpbmtUYXNrKAogICAgICAgICAg
ICAgICAgICAgICBbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKSVRUaHVua1B0clRhZz4gbGlua0NhbGwg
PSB2bS0+Z2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5jb2RlKCk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoc2xvd0NhbGwsIEZ1bmN0aW9uUHRyPEpJ
VFRodW5rUHRyVGFnPihsaW5rQ2FsbCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAg
ICAgICAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldENhbGxMb2NhdGlvbnMoCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRh
Zz4obGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8SlNJbnRlcm5hbFB0clRhZz4oc2xvd0Nh
bGwpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0lu
dGVybmFsUHRyVGFnPihsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4odGFy
Z2V0VG9DaGVjaykpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubG9j
YXRpb25PZk5lYXJDYWxsPEpTSW50ZXJuYWxQdHJUYWc+KGZhc3RDYWxsKSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+
KGZhc3RQYXRoU3RhcnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIu
bG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihzbG93UGF0aFN0YXJ0KSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4o
ZG9uZUxvY2F0aW9uKSk7CiAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgfSk7
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5jcHAJKHJl
dmlzaW9uIDI3Njk3NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzEsNiArNzEsMTYgQEAgdm9pZCBDQ2FsbEhlbHBlcnM6
OmVuc3VyZVNoYWRvd0NoaWNrZW5QYQogICAgIHN0b3JlUHRyKHNjcmF0Y2gyLCBBZGRyZXNzKHNj
cmF0Y2gxTm9uQXJnR1BSKSk7CiB9CiAKK3ZvaWQgQ0NhbGxIZWxwZXJzOjplbWl0SklUQ29kZU92
ZXIoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTSW50ZXJuYWxQdHJUYWc+IGNvZGUsIFdURjo6RnVu
Y3Rpb248dm9pZChDQ2FsbEhlbHBlcnMmKT4gZW1pdENvZGUsIGNvbnN0IGNoYXIqIGRlc2NyaXB0
aW9uKQoreworICAgIENDYWxsSGVscGVycyBqaXQ7CisgICAgZW1pdENvZGUoaml0KTsKKworICAg
IGNvbnN0ZXhwciBib29sIG5lZWRzQnJhbmNoQ29tcGFjdGlvbiA9IGZhbHNlOworICAgIExpbmtC
dWZmZXIgbGlua0J1ZmZlcihqaXQsIGNvZGUsIGppdC5tX2Fzc2VtYmxlci5idWZmZXIoKS5jb2Rl
U2l6ZSgpLCBKSVRDb21waWxhdGlvbk11c3RTdWNjZWVkLCBuZWVkc0JyYW5jaENvbXBhY3Rpb24p
OworICAgIEZJTkFMSVpFX0NPREUobGlua0J1ZmZlciwgTm9QdHJUYWcsIGRlc2NyaXB0aW9uKTsK
K30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoSklUKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5oCShyZXZpc2lvbiAyNzY5Nzcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5oCSh3b3JraW5nIGNv
cHkpCkBAIC04MTgsNiArODE4LDggQEAgcHVibGljOgogICAgIHZvaWQgbG9nU2hhZG93Q2hpY2tl
blRhaWxQYWNrZXQoR1BSUmVnIHNoYWRvd1BhY2tldCwgSlNWYWx1ZVJlZ3MgdGhpc1JlZ3MsIEdQ
UlJlZyBzY29wZSwgQ29kZUJsb2NrKiwgQ2FsbFNpdGVJbmRleCk7CiAgICAgLy8gTGVhdmVzIGJl
aGluZCBhIHBvaW50ZXIgdG8gdGhlIFBhY2tldCB3ZSBzaG91bGQgd3JpdGUgdG8gaW4gc2hhZG93
UGFja2V0LgogICAgIHZvaWQgZW5zdXJlU2hhZG93Q2hpY2tlblBhY2tldChWTSYsIEdQUlJlZyBz
aGFkb3dQYWNrZXQsIEdQUlJlZyBzY3JhdGNoMU5vbkFyZ0dQUiwgR1BSUmVnIHNjcmF0Y2gyKTsK
KworICAgIHN0YXRpYyB2b2lkIGVtaXRKSVRDb2RlT3ZlcihNYWNyb0Fzc2VtYmxlckNvZGVQdHI8
SlNJbnRlcm5hbFB0clRhZz4gY29kZSwgV1RGOjpGdW5jdGlvbjx2b2lkKENDYWxsSGVscGVycyYp
PiwgY29uc3QgY2hhciopOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVyNjQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZXI2NC5jcHAJKHJldmlz
aW9uIDI3Njk3NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZs
ZXI2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0MSw3ICsyNDEsNyBAQCB2b2lkIENhbGxGcmFt
ZVNodWZmbGVyOjplbWl0RGlzcGxhY2UoQ2FjCiAgICAgaWYgKCEod2FudGVkUmVnID0gUmVnIHsg
Y2FjaGVkUmVjb3Zlcnkud2FudGVkSlNWYWx1ZVJlZ3MoKS5ncHIoKSB9KSkKICAgICAgICAgd2Fu
dGVkUmVnID0gUmVnIHsgY2FjaGVkUmVjb3Zlcnkud2FudGVkRlBSKCkgfTsKICAgICBBU1NFUlQo
d2FudGVkUmVnKTsKLSAgICBBU1NFUlQoIW1fbG9ja2VkUmVnaXN0ZXJzLmdldCh3YW50ZWRSZWcp
KTsKKyAgICBSRUxFQVNFX0FTU0VSVCghbV9sb2NrZWRSZWdpc3RlcnMuZ2V0KHdhbnRlZFJlZykp
OwogCiAgICAgaWYgKENhY2hlZFJlY292ZXJ5KiBjdXJyZW50ID0gbV9yZWdpc3RlcnNbd2FudGVk
UmVnXSkgewogICAgICAgICBpZiAoY3VycmVudCA9PSAmY2FjaGVkUmVjb3ZlcnkpIHsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZXIuY3BwCShy
ZXZpc2lvbiAyNzY5NzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNo
dWZmbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjAsNiArNjAsOCBAQCBDYWxsRnJhbWVTaHVm
Zmxlcjo6Q2FsbEZyYW1lU2h1ZmZsZXIoQ0NhCiAgICAgbV9sb2NrZWRSZWdpc3RlcnMuZXhjbHVk
ZShSZWdpc3RlclNldDo6dm1DYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOwogI2VuZGlmCiAKKyAgICBt
X2xvY2tlZFJlZ2lzdGVycy5zZXQoR1BSSW5mbzo6cmVnVDIpOworCiAgICAgQVNTRVJUKCFkYXRh
LmNhbGxlZS5pc0luSlNTdGFjaygpIHx8IGRhdGEuY2FsbGVlLnZpcnR1YWxSZWdpc3RlcigpLmlz
TG9jYWwoKSk7CiAgICAgYWRkTmV3KENhbGxGcmFtZVNsb3Q6OmNhbGxlZSwgZGF0YS5jYWxsZWUp
OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCShyZXZpc2lvbiAyNzY5NzcpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk2
MCw5ICs5NjAsOSBAQCBDb21waWxhdGlvblJlc3VsdCBKSVQ6OmxpbmsoKQogICAgIGZvciAoYXV0
byYgY29tcGlsYXRpb25JbmZvIDogbV9jYWxsQ29tcGlsYXRpb25JbmZvKSB7CiAgICAgICAgIENh
bGxMaW5rSW5mbyYgaW5mbyA9ICpjb21waWxhdGlvbkluZm8uY2FsbExpbmtJbmZvOwogICAgICAg
ICBpbmZvLnNldENhbGxMb2NhdGlvbnMoCi0gICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxK
U0ludGVybmFsUHRyVGFnPihwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8SlNJbnRlcm5h
bFB0clRhZz4oY29tcGlsYXRpb25JbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbikpLAotICAgICAgICAg
ICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4ocGF0Y2hCdWZmZXIubG9jYXRp
b25PZjxKU0ludGVybmFsUHRyVGFnPihjb21waWxhdGlvbkluZm8uaG90UGF0aEJlZ2luKSksCi0g
ICAgICAgICAgICBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8SlNJbnRlcm5hbFB0clRh
Zz4oY29tcGlsYXRpb25JbmZvLmhvdFBhdGhPdGhlcikpOworICAgICAgICAgICAgcGF0Y2hCdWZm
ZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihjb21waWxhdGlvbkluZm8uZmFzdFBhdGhT
dGFydCksCisgICAgICAgICAgICBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJU
YWc+KGNvbXBpbGF0aW9uSW5mby5zbG93UGF0aFN0YXJ0KSwKKyAgICAgICAgICAgIHBhdGNoQnVm
ZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oY29tcGlsYXRpb25JbmZvLmRvbmVMb2Nh
dGlvbikpOwogICAgIH0KIAogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkocmV2
aXNpb24gMjc2OTc3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTc3LDkgKzE3NywxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICB9OwogCiAg
ICAgc3RydWN0IENhbGxDb21waWxhdGlvbkluZm8gewotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
RGF0YUxhYmVsUHRyIGhvdFBhdGhCZWdpbjsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwg
aG90UGF0aE90aGVyOwotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsUmV0dXJuTG9j
YXRpb247CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIHNsb3dQYXRoQ2FsbDsKKyAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGZhc3RQYXRoU3RhcnQ7CisgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpMYWJlbCBzbG93UGF0aFN0YXJ0OworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFi
ZWwgZG9uZUxvY2F0aW9uOwogICAgICAgICBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbzsKICAg
ICB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwzMl82NC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsMzJfNjQuY3Bw
CShyZXZpc2lvbiAyNzY5NzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwz
Ml82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1NSw3ICszNTUsNyBAQCB2b2lkIEpJVDo6Y29t
cGlsZU9wQ2FsbFNsb3dDYXNlKGNvbnN0IEluCiAgICAgaWYgKG9wY29kZUlEID09IG9wX3RhaWxf
Y2FsbCB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfdmFyYXJncyB8fCBvcGNvZGVJRCA9PSBv
cF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMpCiAgICAgICAgIGVtaXRSZXN0b3JlQ2FsbGVl
U2F2ZXMoKTsKIAotICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0u
Y2FsbFJldHVybkxvY2F0aW9uID0gZW1pdE5ha2VkTmVhckNhbGwobV92bS0+Z2V0Q1RJU3R1Yihs
aW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOworICAgIG1f
Y2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uc2xvd0NhbGxSZXR1cm5Mb2Nh
dGlvbiA9IGVtaXROYWtlZE5lYXJDYWxsKG1fdm0tPmdldENUSVN0dWIobGlua0NhbGxUaHVua0dl
bmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAogICAgIGlmIChvcGNvZGVJRCA9
PSBvcF90YWlsX2NhbGwgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MpIHsKICAg
ICAgICAgYWJvcnRXaXRoUmVhc29uKEpJVERpZFJldHVybkZyb21UYWlsQ2FsbCk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAJKHJldmlzaW9uIDI3Njk3NykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5
Miw4ICsxOTIsMTYgQEAgYm9vbCBKSVQ6OmNvbXBpbGVUYWlsQ2FsbChjb25zdCBPcFRhaWxDYQog
ICAgICAgICBWYWx1ZVJlY292ZXJ5OjppbkdQUihyZWdUMCwgRGF0YUZvcm1hdEpTKTsKICAgICBz
aHVmZmxlRGF0YS5zZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMobV9jb2RlQmxvY2spOwogICAgIGlu
Zm8tPnNldEZyYW1lU2h1ZmZsZURhdGEoc2h1ZmZsZURhdGEpOwotICAgIENhbGxGcmFtZVNodWZm
bGVyKCp0aGlzLCBzaHVmZmxlRGF0YSkucHJlcGFyZUZvclRhaWxDYWxsKCk7Ci0gICAgbV9jYWxs
Q29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5ob3RQYXRoT3RoZXIgPSBlbWl0TmFr
ZWROZWFyVGFpbENhbGwoKTsKKworICAgIGF1dG8gZmFzdFBhdGhTdGFydCA9IGxhYmVsKCk7Cisg
ICAgSnVtcExpc3Qgc2xvd1BhdGhzID0gQ2FsbExpbmtJbmZvOjplbWl0VGFpbENhbGxGYXN0UGF0
aCgqdGhpcywgcmVnVDAsIHJlZ1QyLCAqaW5mbywgQ2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6Olll
cywgWyZdIHsKKyAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIoKnRoaXMsIHNodWZmbGVEYXRhKS5w
cmVwYXJlRm9yVGFpbENhbGwoKTsKKyAgICB9KTsKKyAgICBhZGRTbG93Q2FzZShzbG93UGF0aHMp
OworICAgIGF1dG8gZG9uZUxvY2F0aW9uID0gbGFiZWwoKTsKKyAgICBtX2NhbGxDb21waWxhdGlv
bkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmZhc3RQYXRoU3RhcnQgPSBmYXN0UGF0aFN0YXJ0Owor
ICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uZG9uZUxvY2F0aW9u
ID0gZG9uZUxvY2F0aW9uOworICAgIAogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0yMzIsMjgg
KzI0MCwzNCBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChjb25zdCBJbnN0cnVjdGlvCiAgICAg
aWYgKGNvbXBpbGVDYWxsRXZhbChieXRlY29kZSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIERh
dGFMYWJlbFB0ciBhZGRyZXNzT2ZMaW5rZWRGdW5jdGlvbkNoZWNrOwotICAgIEp1bXAgc2xvd0Nh
c2UgPSBicmFuY2hQdHJXaXRoUGF0Y2goTm90RXF1YWwsIHJlZ1QwLCBhZGRyZXNzT2ZMaW5rZWRG
dW5jdGlvbkNoZWNrLCBUcnVzdGVkSW1tUHRyKG51bGxwdHIpKTsKLSAgICBhZGRTbG93Q2FzZShz
bG93Q2FzZSk7Ci0KICAgICBBU1NFUlQobV9jYWxsQ29tcGlsYXRpb25JbmZvLnNpemUoKSA9PSBj
YWxsTGlua0luZm9JbmRleCk7CiAgICAgaW5mby0+c2V0VXBDYWxsKENhbGxMaW5rSW5mbzo6Y2Fs
bFR5cGVGb3Iob3Bjb2RlSUQpLCByZWdUMCk7CiAgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvLmFw
cGVuZChDYWxsQ29tcGlsYXRpb25JbmZvKCkpOwotICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tj
YWxsTGlua0luZm9JbmRleF0uaG90UGF0aEJlZ2luID0gYWRkcmVzc09mTGlua2VkRnVuY3Rpb25D
aGVjazsKICAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmNhbGxM
aW5rSW5mbyA9IGluZm87CiAKLSAgICBpZiAoY29tcGlsZVRhaWxDYWxsKGJ5dGVjb2RlLCBpbmZv
LCBjYWxsTGlua0luZm9JbmRleCkpIHsKKyAgICBpZiAoY29tcGlsZVRhaWxDYWxsKGJ5dGVjb2Rl
LCBpbmZvLCBjYWxsTGlua0luZm9JbmRleCkpCiAgICAgICAgIHJldHVybjsKLSAgICB9CiAKICAg
ICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgfHwgb3Bjb2RlSUQgPT0gb3Bf
dGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKSB7Ci0gICAgICAgIGVtaXRSZXN0b3JlQ2FsbGVl
U2F2ZXMoKTsKLSAgICAgICAgcHJlcGFyZUZvclRhaWxDYWxsU2xvdygpOwotICAgICAgICBtX2Nh
bGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmhvdFBhdGhPdGhlciA9IGVtaXRO
YWtlZE5lYXJUYWlsQ2FsbCgpOworICAgICAgICBhdXRvIGZhc3RQYXRoU3RhcnQgPSBsYWJlbCgp
OworICAgICAgICBKdW1wTGlzdCBzbG93UGF0aHMgPSBDYWxsTGlua0luZm86OmVtaXRUYWlsQ2Fs
bEZhc3RQYXRoKCp0aGlzLCByZWdUMCwgcmVnVDIsICppbmZvLCBDYWxsTGlua0luZm86OlVzZURh
dGFJQzo6WWVzLCBbJl0geworICAgICAgICAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwor
ICAgICAgICAgICAgcHJlcGFyZUZvclRhaWxDYWxsU2xvdyhHUFJJbmZvOjpyZWdUMik7CisgICAg
ICAgIH0pOworICAgICAgICBhZGRTbG93Q2FzZShzbG93UGF0aHMpOworICAgICAgICBhdXRvIGRv
bmVMb2NhdGlvbiA9IGxhYmVsKCk7CisgICAgICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxs
TGlua0luZm9JbmRleF0uZmFzdFBhdGhTdGFydCA9IGZhc3RQYXRoU3RhcnQ7CisgICAgICAgIG1f
Y2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uZG9uZUxvY2F0aW9uID0gZG9u
ZUxvY2F0aW9uOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbV9jYWxsQ29tcGlsYXRp
b25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5ob3RQYXRoT3RoZXIgPSBlbWl0TmFrZWROZWFyQ2Fs
bCgpOworICAgIGF1dG8gZmFzdFBhdGhTdGFydCA9IGxhYmVsKCk7CisgICAgSnVtcExpc3Qgc2xv
d1BhdGhzID0gQ2FsbExpbmtJbmZvOjplbWl0RmFzdFBhdGgoKnRoaXMsIHJlZ1QwLCByZWdUMiwg
KmluZm8sIENhbGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpZZXMpOworICAgIGF1dG8gZG9uZUxvY2F0
aW9uID0gbGFiZWwoKTsKKyAgICBhZGRTbG93Q2FzZShzbG93UGF0aHMpOworCisgICAgbV9jYWxs
Q29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5mYXN0UGF0aFN0YXJ0ID0gZmFzdFBh
dGhTdGFydDsKKyAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmRv
bmVMb2NhdGlvbiA9IGRvbmVMb2NhdGlvbjsKIAogICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3Rh
Y2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxs
RnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAgIGNoZWNrU3RhY2tQb2lu
dGVyQWxpZ25tZW50KCk7CkBAIC0yNzEsMTQgKzI4NSwxMyBAQCB2b2lkIEpJVDo6Y29tcGlsZU9w
Q2FsbFNsb3dDYXNlKGNvbnN0IEluCiAKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCisg
ICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5zbG93UGF0aFN0YXJ0
ID0gbGFiZWwoKTsKKwogICAgIGlmIChvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGwgfHwgb3Bjb2Rl
SUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX2Zv
cndhcmRfYXJndW1lbnRzKQogICAgICAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CiAKICAg
ICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDMp
OwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJ
bmZvSW5kZXhdLmNhbGxMaW5rSW5mbyksIHJlZ1QyKTsKLQotICAgIG1fY2FsbENvbXBpbGF0aW9u
SW5mb1tjYWxsTGlua0luZm9JbmRleF0uY2FsbFJldHVybkxvY2F0aW9uID0KLSAgICAgICAgZW1p
dE5ha2VkTmVhckNhbGwobV92bS0+Z2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5y
ZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOworICAgIENhbGxMaW5rSW5mbzo6ZW1pdFNsb3dQYXRo
KCptX3ZtLCAqdGhpcywgKm1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0u
Y2FsbExpbmtJbmZvKTsKIAogICAgIGlmIChvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGwgfHwgb3Bj
b2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MpIHsKICAgICAgICAgYWJvcnRXaXRoUmVhc29u
KEpJVERpZFJldHVybkZyb21UYWlsQ2FsbCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVE9wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDI3Njk3NykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzOTIs
NyArMTM5Miw3IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25MaW5rQ2EKICAg
ICAgICAgICAgIGlmICghY2FsbExpbmtJbmZvLT5zZWVuT25jZSgpKQogICAgICAgICAgICAgICAg
IGNhbGxMaW5rSW5mby0+c2V0U2VlbigpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAg
ICAgIGxpbmtGb3Iodm0sIGNhbGxlZUZyYW1lLCAqY2FsbExpbmtJbmZvLCBudWxscHRyLCBpbnRl
cm5hbEZ1bmN0aW9uLCBjb2RlUHRyKTsKKyAgICAgICAgICAgICAgICBsaW5rTW9ub21vcnBoaWND
YWxsKHZtLCBjYWxsZWVGcmFtZSwgKmNhbGxMaW5rSW5mbywgbnVsbHB0ciwgaW50ZXJuYWxGdW5j
dGlvbiwgY29kZVB0cik7CiAKICAgICAgICAgICAgIHZvaWQqIGxpbmtlZFRhcmdldCA9IGNvZGVQ
dHIuZXhlY3V0YWJsZUFkZHJlc3MoKTsKICAgICAgICAgICAgIHJldHVybiBlbmNvZGVSZXN1bHQo
bGlua2VkVGFyZ2V0LCByZWludGVycHJldF9jYXN0PHZvaWQqPihjYWxsTGlua0luZm8tPmNhbGxN
b2RlKCkgPT0gQ2FsbE1vZGU6OlRhaWwgPyBSZXVzZVRoZUZyYW1lIDogS2VlcFRoZUZyYW1lKSk7
CkBAIC0xNDQwLDggKzE0NDAsOSBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9u
TGlua0NhCiAgICAgaWYgKCFjYWxsTGlua0luZm8tPnNlZW5PbmNlKCkpCiAgICAgICAgIGNhbGxM
aW5rSW5mby0+c2V0U2VlbigpOwogICAgIGVsc2UKLSAgICAgICAgbGlua0Zvcih2bSwgY2FsbGVl
RnJhbWUsICpjYWxsTGlua0luZm8sIGNvZGVCbG9jaywgY2FsbGVlLCBjb2RlUHRyKTsKKyAgICAg
ICAgbGlua01vbm9tb3JwaGljQ2FsbCh2bSwgY2FsbGVlRnJhbWUsICpjYWxsTGlua0luZm8sIGNv
ZGVCbG9jaywgY2FsbGVlLCBjb2RlUHRyKTsKIAorICAgIC8vZGF0YUxvZ0xuKCJvcGVyYXRpb25M
aW5rQ2FsbCByZXR1cm5pbmc6ICIsIFJhd1BvaW50ZXIoY29kZVB0ci5leGVjdXRhYmxlQWRkcmVz
cygpKSwgIiBvbiBDYWxsTGlua0luZm86ICIsIFJhd1BvaW50ZXIoY2FsbExpbmtJbmZvKSk7CiAg
ICAgcmV0dXJuIGVuY29kZVJlc3VsdChjb2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNzKCksIHJlaW50
ZXJwcmV0X2Nhc3Q8dm9pZCo+KGNhbGxMaW5rSW5mby0+Y2FsbE1vZGUoKSA9PSBDYWxsTW9kZTo6
VGFpbCA/IFJldXNlVGhlRnJhbWUgOiBLZWVwVGhlRnJhbWUpKTsKIH0KIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9Qb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Qb2x5bW9ycGhpY0NhbGxTdHViUm91
dGluZS5jcHAJKHJldmlzaW9uIDI3Njk3NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
UG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0
NSw3IEBAIFBvbHltb3JwaGljQ2FsbE5vZGU6On5Qb2x5bW9ycGhpY0NhbGxOb2QKIHZvaWQgUG9s
eW1vcnBoaWNDYWxsTm9kZTo6dW5saW5rKFZNJiB2bSkKIHsKICAgICBpZiAobV9jYWxsTGlua0lu
Zm8pIHsKLSAgICAgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6ZHVtcERpc2Fzc2VtYmx5KCksICJV
bmxpbmtpbmcgcG9seW1vcnBoaWMgY2FsbCBhdCAiLCBtX2NhbGxMaW5rSW5mby0+Y2FsbFJldHVy
bkxvY2F0aW9uKCksICIsIGJjIyIsIG1fY2FsbExpbmtJbmZvLT5jb2RlT3JpZ2luKCkuYnl0ZWNv
ZGVJbmRleCgpKTsKKyAgICAgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6ZHVtcERpc2Fzc2VtYmx5
KCksICJVbmxpbmtpbmcgcG9seW1vcnBoaWMgY2FsbCBhdCAiLCBtX2NhbGxMaW5rSW5mby0+ZG9u
ZUxvY2F0aW9uKCksICIsIGJjIyIsIG1fY2FsbExpbmtJbmZvLT5jb2RlT3JpZ2luKCkuYnl0ZWNv
ZGVJbmRleCgpKTsKICAgICAgICAgbV9jYWxsTGlua0luZm8tPnVubGluayh2bSk7CiAgICAgfQog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHJldmlzaW9uIDI3Njk3
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI4LDYgKzI4LDggQEAKIAogI2lmIEVOQUJMRShKSVQpCiAKKyNpbmNsdWRlICJNYWNy
b0Fzc2VtYmxlclByaW50ZXIuaCIKKwogI2luY2x1ZGUgIkJpbmFyeVN3aXRjaC5oIgogI2luY2x1
ZGUgIkNDYWxsSGVscGVycy5oIgogI2luY2x1ZGUgIkNhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVz
LmgiCkBAIC0xMTg4LDIwICsxMTkwLDIwIEBAIHZvaWQgcmVwYXRjaEluc3RhbmNlT2YoCiAgICAg
ICAgIGZ0bFRodW5rQXdhcmVSZXBhdGNoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLnNsb3dQYXRo
Q2FsbExvY2F0aW9uLCBvcGVyYXRpb25JbnN0YW5jZU9mR2VuZXJpYyk7CiB9CiAKLXN0YXRpYyB2
b2lkIGxpbmtTbG93Rm9yKFZNJiwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8sIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRTdHViUm91dGluZVB0clRhZz4gY29kZVJlZikKK3N0YXRpYyB2b2lk
IGxpbmtTbG93UGF0aFRvKFZNJiwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8sIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRTdHViUm91dGluZVB0clRhZz4gY29kZVJlZikKIHsKLSAgICBNYWNy
b0Fzc2VtYmxlcjo6cmVwYXRjaE5lYXJDYWxsKGNhbGxMaW5rSW5mby5jYWxsUmV0dXJuTG9jYXRp
b24oKSwgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+KGNvZGVSZWYuY29k
ZSgpKSk7CisgICAgY2FsbExpbmtJbmZvLnNldFNsb3dQYXRoQ2FsbERlc3RpbmF0aW9uKGNvZGVS
ZWYuY29kZSgpLnRlbXBsYXRlIHJldGFnZ2VkPEpTRW50cnlQdHJUYWc+KCkpOwogfQogCi1zdGF0
aWMgdm9pZCBsaW5rU2xvd0ZvcihWTSYgdm0sIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvLCBU
aHVua0dlbmVyYXRvciBnZW5lcmF0b3IpCitzdGF0aWMgdm9pZCBsaW5rU2xvd1BhdGhUbyhWTSYg
dm0sIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvLCBUaHVua0dlbmVyYXRvciBnZW5lcmF0b3Ip
CiB7Ci0gICAgbGlua1Nsb3dGb3Iodm0sIGNhbGxMaW5rSW5mbywgdm0uZ2V0Q1RJU3R1YihnZW5l
cmF0b3IpLnJldGFnZ2VkPEpJVFN0dWJSb3V0aW5lUHRyVGFnPigpKTsKKyAgICBsaW5rU2xvd1Bh
dGhUbyh2bSwgY2FsbExpbmtJbmZvLCB2bS5nZXRDVElTdHViKGdlbmVyYXRvcikucmV0YWdnZWQ8
SklUU3R1YlJvdXRpbmVQdHJUYWc+KCkpOwogfQogCiBzdGF0aWMgdm9pZCBsaW5rU2xvd0ZvcihW
TSYgdm0sIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvKQogewogICAgIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZjxKSVRTdHViUm91dGluZVB0clRhZz4gdmlydHVhbFRodW5rID0gdmlydHVhbFRodW5r
Rm9yKHZtLCBjYWxsTGlua0luZm8pOwotICAgIGxpbmtTbG93Rm9yKHZtLCBjYWxsTGlua0luZm8s
IHZpcnR1YWxUaHVuayk7CisgICAgbGlua1Nsb3dQYXRoVG8odm0sIGNhbGxMaW5rSW5mbywgdmly
dHVhbFRodW5rKTsKICAgICBjYWxsTGlua0luZm8uc2V0U2xvd1N0dWIoR0NBd2FyZUpJVFN0dWJS
b3V0aW5lOjpjcmVhdGUodmlydHVhbFRodW5rLCB2bSkpOwogfQogCkBAIC0xMjE3LDExICsxMjE5
LDExIEBAIHN0YXRpYyBKU0NlbGwqIHdlYkFzc2VtYmx5T3duZXIoSlNDZWxsKiAKICNlbmRpZiAv
LyBFTkFCTEUoV0VCQVNTRU1CTFkpCiB9CiAKLXZvaWQgbGlua0ZvcigKK3ZvaWQgbGlua01vbm9t
b3JwaGljQ2FsbCgKICAgICBWTSYgdm0sIENhbGxGcmFtZSogY2FsbEZyYW1lLCBDYWxsTGlua0lu
Zm8mIGNhbGxMaW5rSW5mbywgQ29kZUJsb2NrKiBjYWxsZWVDb2RlQmxvY2ssCiAgICAgSlNPYmpl
Y3QqIGNhbGxlZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGNvZGVQdHIp
CiB7Ci0gICAgQVNTRVJUKCFjYWxsTGlua0luZm8uc3R1YigpKTsKKyAgICBSRUxFQVNFX0FTU0VS
VCghY2FsbExpbmtJbmZvLnN0dWIoKSk7CiAKICAgICBDYWxsRnJhbWUqIGNhbGxlckZyYW1lID0g
Y2FsbEZyYW1lLT5jYWxsZXJGcmFtZSgpOwogICAgIC8vIE91ciBjYWxsZXIgbXVzdCBoYXZlIGEg
Y2VsbCBmb3IgYSBjYWxsZWUuIFdoZW4gY2FsbGluZwpAQCAtMTIzNSwyNiArMTIzNywyNCBAQCB2
b2lkIGxpbmtGb3IoCiAgICAgQVNTRVJUKG93bmVyKTsKIAogICAgIEFTU0VSVCghY2FsbExpbmtJ
bmZvLmlzTGlua2VkKCkpOwotICAgIGNhbGxMaW5rSW5mby5zZXRDYWxsZWUodm0sIG93bmVyLCBj
YWxsZWUpOwotICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoUG9pbnRlcihjYWxsTGlua0luZm8u
aG90UGF0aEJlZ2luKCksIGNhbGxlZSk7CisgICAgY2FsbExpbmtJbmZvLnNldE1vbm9tb3JwaGlj
Q2FsbGVlKHZtLCBvd25lciwgY2FsbGVlLCBjb2RlUHRyKTsKICAgICBjYWxsTGlua0luZm8uc2V0
TGFzdFNlZW5DYWxsZWUodm0sIG93bmVyLCBjYWxsZWUpOworCiAgICAgaWYgKHNob3VsZER1bXBE
aXNhc3NlbWJseUZvcihjYWxsZXJDb2RlQmxvY2spKQogICAgICAgICBkYXRhTG9nKCJMaW5raW5n
IGNhbGwgaW4gIiwgRnVsbENvZGVPcmlnaW4oY2FsbGVyQ29kZUJsb2NrLCBjYWxsTGlua0luZm8u
Y29kZU9yaWdpbigpKSwgIiB0byAiLCBwb2ludGVyRHVtcChjYWxsZWVDb2RlQmxvY2spLCAiLCBl
bnRyeXBvaW50IGF0ICIsIGNvZGVQdHIsICJcbiIpOwogCi0gICAgTWFjcm9Bc3NlbWJsZXI6OnJl
cGF0Y2hOZWFyQ2FsbChjYWxsTGlua0luZm8uaG90UGF0aE90aGVyKCksIENvZGVMb2NhdGlvbkxh
YmVsPEpTRW50cnlQdHJUYWc+KGNvZGVQdHIpKTsKLQogICAgIGlmIChjYWxsZWVDb2RlQmxvY2sp
CiAgICAgICAgIGNhbGxlZUNvZGVCbG9jay0+bGlua0luY29taW5nQ2FsbChjYWxsZXJGcmFtZSwg
JmNhbGxMaW5rSW5mbyk7CiAKICAgICBpZiAoY2FsbExpbmtJbmZvLnNwZWNpYWxpemF0aW9uS2lu
ZCgpID09IENvZGVGb3JDYWxsICYmIGNhbGxMaW5rSW5mby5hbGxvd1N0dWJzKCkpIHsKLSAgICAg
ICAgbGlua1Nsb3dGb3Iodm0sIGNhbGxMaW5rSW5mbywgbGlua1BvbHltb3JwaGljQ2FsbFRodW5r
R2VuZXJhdG9yKTsKKyAgICAgICAgbGlua1Nsb3dQYXRoVG8odm0sIGNhbGxMaW5rSW5mbywgbGlu
a1BvbHltb3JwaGljQ2FsbFRodW5rR2VuZXJhdG9yKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
ICAgICAKICAgICBsaW5rU2xvd0Zvcih2bSwgY2FsbExpbmtJbmZvKTsKIH0KIAotdm9pZCBsaW5r
RGlyZWN0Rm9yKAordm9pZCBsaW5rRGlyZWN0Q2FsbCgKICAgICBDYWxsRnJhbWUqIGNhbGxGcmFt
ZSwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8sIENvZGVCbG9jayogY2FsbGVlQ29kZUJsb2Nr
LAogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBjb2RlUHRyKQogewpA
QCAtMTI2OSw5ICsxMjY5LDcgQEAgdm9pZCBsaW5rRGlyZWN0Rm9yKAogICAgIGlmIChzaG91bGRE
dW1wRGlzYXNzZW1ibHlGb3IoY2FsbGVyQ29kZUJsb2NrKSkKICAgICAgICAgZGF0YUxvZygiTGlu
a2luZyBjYWxsIGluICIsIEZ1bGxDb2RlT3JpZ2luKGNhbGxlckNvZGVCbG9jaywgY2FsbExpbmtJ
bmZvLmNvZGVPcmlnaW4oKSksICIgdG8gIiwgcG9pbnRlckR1bXAoY2FsbGVlQ29kZUJsb2NrKSwg
IiwgZW50cnlwb2ludCBhdCAiLCBjb2RlUHRyLCAiXG4iKTsKIAotICAgIGlmIChjYWxsTGlua0lu
Zm8uY2FsbFR5cGUoKSA9PSBDYWxsTGlua0luZm86OkRpcmVjdFRhaWxDYWxsKQotICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEp1bXBUb05vcChjYWxsTGlua0luZm8ucGF0Y2hhYmxlSnVt
cCgpKTsKLSAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaE5lYXJDYWxsKGNhbGxMaW5rSW5mby5o
b3RQYXRoT3RoZXIoKSwgQ29kZUxvY2F0aW9uTGFiZWw8SlNFbnRyeVB0clRhZz4oY29kZVB0cikp
OworICAgIGNhbGxMaW5rSW5mby5zZXREaXJlY3RDYWxsVGFyZ2V0KENvZGVMb2NhdGlvbkxhYmVs
PEpTRW50cnlQdHJUYWc+KGNvZGVQdHIpKTsKIAogICAgIGlmIChjYWxsZWVDb2RlQmxvY2spCiAg
ICAgICAgIGNhbGxlZUNvZGVCbG9jay0+bGlua0luY29taW5nQ2FsbChjYWxsRnJhbWUsICZjYWxs
TGlua0luZm8pOwpAQCAtMTI4OSwxOSArMTI4NywyMyBAQCBzdGF0aWMgdm9pZCByZXZlcnRDYWxs
KFZNJiB2bSwgQ2FsbExpbmtJCiB7CiAgICAgaWYgKGNhbGxMaW5rSW5mby5pc0RpcmVjdCgpKSB7
CiAgICAgICAgIGNhbGxMaW5rSW5mby5jbGVhckNvZGVCbG9jaygpOwotICAgICAgICBpZiAoIWNh
bGxMaW5rSW5mby5jbGVhcmVkQnlKZXR0aXNvbigpKSB7Ci0gICAgICAgICAgICBpZiAoY2FsbExp
bmtJbmZvLmNhbGxUeXBlKCkgPT0gQ2FsbExpbmtJbmZvOjpEaXJlY3RUYWlsQ2FsbCkKLSAgICAg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEp1bXAoY2FsbExpbmtJbmZvLnBhdGNo
YWJsZUp1bXAoKSwgY2FsbExpbmtJbmZvLnNsb3dQYXRoU3RhcnQoKSk7Ci0gICAgICAgICAgICBl
bHNlCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hOZWFyQ2FsbChjYWxs
TGlua0luZm8uaG90UGF0aE90aGVyKCksIGNhbGxMaW5rSW5mby5zbG93UGF0aFN0YXJ0KCkpOwot
ICAgICAgICB9CisgICAgICAgIGlmICghY2FsbExpbmtJbmZvLmNsZWFyZWRCeUpldHRpc29uKCkp
CisgICAgICAgICAgICBjYWxsTGlua0luZm8uaW5pdGlhbGl6ZURpcmVjdENhbGwoKTsKICAgICB9
IGVsc2UgewogICAgICAgICBpZiAoIWNhbGxMaW5rSW5mby5jbGVhcmVkQnlKZXR0aXNvbigpKSB7
Ci0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmV2ZXJ0SnVtcFJlcGxhY2VtZW50VG9CcmFu
Y2hQdHJXaXRoUGF0Y2goCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnN0YXJ0T2ZC
cmFuY2hQdHJXaXRoUGF0Y2hPblJlZ2lzdGVyKGNhbGxMaW5rSW5mby5ob3RQYXRoQmVnaW4oKSks
Ci0gICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLmNhbGxlZUdQUigpLCBudWxscHRyKTsKLSAg
ICAgICAgICAgIGxpbmtTbG93Rm9yKHZtLCBjYWxsTGlua0luZm8sIGNvZGVSZWYpOwotICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hQb2ludGVyKGNhbGxMaW5rSW5mby5ob3RQYXRo
QmVnaW4oKSwgbnVsbHB0cik7CisgICAgICAgICAgICBsaW5rU2xvd1BhdGhUbyh2bSwgY2FsbExp
bmtJbmZvLCBjb2RlUmVmKTsKKworICAgICAgICAgICAgaWYgKGNhbGxMaW5rSW5mby5zdHViKCkp
IHsKKyAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8ucmV2ZXJ0Q2FsbFRvU3R1YigpOworICAg
ICAgICAgICAgICAgIENDYWxsSGVscGVyczo6ZW1pdEpJVENvZGVPdmVyKGNhbGxMaW5rSW5mby5m
YXN0UGF0aFN0YXJ0KCksIFsmXSAoQ0NhbGxIZWxwZXJzJiBqaXQpIHsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKGNhbGxMaW5rSW5mby51c2VzRGF0YUlDcygpKQorICAgICAgICAgICAgICAgICAg
ICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QyLCBD
YWxsTGlua0luZm86Om9mZnNldE9mQ2FsbGVlKCkpLCBqaXQuc2NyYXRjaFJlZ2lzdGVyKCkpOyAv
LyByZXdyaXRlIHRoZSBmaXJzdCBpbnNuIG9mIHRoZSBmYXN0IHBhdGguCisgICAgICAgICAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGppdC5ub3AoKTsKKyAgICAgICAg
ICAgICAgICB9LCAgIlJlc2V0dGluZyBQb2x5bW9ycGhpY0NhbGwgc3R1YmJlZCBDYWxsTGlua0lu
Zm8iKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gTm90aGluZyB0
byBkbywgd2UncmUgYWxyZWFkeSBhIGRhdGEgSUMuCisgICAgICAgICAgICB9CiAgICAgICAgIH0K
ICAgICAgICAgY2FsbExpbmtJbmZvLmNsZWFyQ2FsbGVlKCk7CiAgICAgfQpAQCAtMTMxMiw5ICsx
MzE0LDkgQEAgc3RhdGljIHZvaWQgcmV2ZXJ0Q2FsbChWTSYgdm0sIENhbGxMaW5rSQogICAgICAg
ICBjYWxsTGlua0luZm8ucmVtb3ZlKCk7CiB9CiAKLXZvaWQgdW5saW5rRm9yKFZNJiB2bSwgQ2Fs
bExpbmtJbmZvJiBjYWxsTGlua0luZm8pCit2b2lkIHVubGlua0NhbGwoVk0mIHZtLCBDYWxsTGlu
a0luZm8mIGNhbGxMaW5rSW5mbykKIHsKLSAgICBkYXRhTG9nTG5JZihPcHRpb25zOjpkdW1wRGlz
YXNzZW1ibHkoKSwgIlVubGlua2luZyBjYWxsIGF0ICIsIGNhbGxMaW5rSW5mby5ob3RQYXRoT3Ro
ZXIoKSk7CisgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6ZHVtcERpc2Fzc2VtYmx5KCksICJVbmxp
bmtpbmcgY2FsbCBhdCAiLCBjYWxsTGlua0luZm8uZmFzdFBhdGhTdGFydCgpKTsKICAgICAKICAg
ICByZXZlcnRDYWxsKHZtLCBjYWxsTGlua0luZm8sIHZtLmdldENUSVN0dWIobGlua0NhbGxUaHVu
a0dlbmVyYXRvcikucmV0YWdnZWQ8SklUU3R1YlJvdXRpbmVQdHJUYWc+KCkpOwogfQpAQCAtMTM1
Niw2ICsxMzU4LDExIEBAIHZvaWQgbGlua1BvbHltb3JwaGljQ2FsbChKU0dsb2JhbE9iamVjdCoK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAorICAgIGlmICh0cnVlKSB7CisgICAgICAgIGxpbmtW
aXJ0dWFsRm9yKHZtLCBjYWxsRnJhbWUsIGNhbGxMaW5rSW5mbyk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKICAgICAvLyBPdXIgY2FsbGVyIG11c3QgYmUgaGF2ZSBhIGNlbGwgZm9yIGEgY2Fs
bGVlLiBXaGVuIGNhbGxpbmcKICAgICAvLyB0aGlzIGZyb20gV2FzbSwgd2UgZW5zdXJlIHRoZSBj
YWxsZWUgaXMgYSBjZWxsLgogICAgIEFTU0VSVChjYWxsZXJGcmFtZS0+Y2FsbGVlKCkuaXNDZWxs
KCkpOwpAQCAtMTU4MCw3ICsxNTg3LDcgQEAgdm9pZCBsaW5rUG9seW1vcnBoaWNDYWxsKEpTR2xv
YmFsT2JqZWN0KgogICAgIH0KICAgICBzdHViSml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tUHRyKGdsb2JhbE9iamVjdCksIEdQUkluZm86OnJlZ1QzKTsKICAgICBzdHViSml0Lm1vdmUo
Q0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKCZjYWxsTGlua0luZm8pLCBHUFJJbmZvOjpyZWdU
Mik7Ci0gICAgc3R1YkppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihjYWxsTGlu
a0luZm8uY2FsbFJldHVybkxvY2F0aW9uKCkudW50YWdnZWRFeGVjdXRhYmxlQWRkcmVzcygpKSwg
R1BSSW5mbzo6cmVnVDQpOworICAgIHN0dWJKaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJ
bW1QdHIoY2FsbExpbmtJbmZvLmRvbmVMb2NhdGlvbigpLnVudGFnZ2VkRXhlY3V0YWJsZUFkZHJl
c3MoKSksIEdQUkluZm86OnJlZ1Q0KTsKICAgICAKICAgICBzdHViSml0LnJlc3RvcmVSZXR1cm5B
ZGRyZXNzQmVmb3JlUmV0dXJuKEdQUkluZm86OnJlZ1Q0KTsKICAgICBBc3NlbWJseUhlbHBlcnM6
Okp1bXAgc2xvdyA9IHN0dWJKaXQuanVtcCgpOwpAQCAtMTYwMywyOSArMTYxMCwzMCBAQCB2b2lk
IGxpbmtQb2x5bW9ycGhpY0NhbGwoSlNHbG9iYWxPYmplY3QqCiAgICAgICAgIHBhdGNoQnVmZmVy
LmxpbmsoY2FsbFRvQ29kZVB0ci5jYWxsLCBGdW5jdGlvblB0cjxKU0VudHJ5UHRyVGFnPihjYWxs
VG9Db2RlUHRyLmNvZGVQdHIpKTsKICNlbmRpZgogICAgIH0KLSAgICBpZiAoaXNXZWJBc3NlbWJs
eSB8fCBKSVRDb2RlOjppc09wdGltaXppbmdKSVQoY2FsbGVyQ29kZUJsb2NrLT5qaXRUeXBlKCkp
KQotICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKGRvbmUsIGNhbGxMaW5rSW5mby5jYWxsUmV0dXJu
TG9jYXRpb24oKS5sYWJlbEF0T2Zmc2V0KDApKTsKLSAgICBlbHNlCi0gICAgICAgIHBhdGNoQnVm
ZmVyLmxpbmsoZG9uZSwgY2FsbExpbmtJbmZvLmhvdFBhdGhPdGhlcigpLmxhYmVsQXRPZmZzZXQo
MCkpOworICAgIHBhdGNoQnVmZmVyLmxpbmsoZG9uZSwgY2FsbExpbmtJbmZvLmRvbmVMb2NhdGlv
bigpKTsKICAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3csIENvZGVMb2NhdGlvbkxhYmVsPEpJVFRo
dW5rUHRyVGFnPih2bS5nZXRDVElTdHViKGxpbmtQb2x5bW9ycGhpY0NhbGxUaHVua0dlbmVyYXRv
cikuY29kZSgpKSk7CiAgICAgCiAgICAgYXV0byBzdHViUm91dGluZSA9IGFkb3B0UmVmKCpuZXcg
UG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUoCiAgICAgICAgIEZJTkFMSVpFX0NPREVfRk9SKAog
ICAgICAgICAgICAgY2FsbGVyQ29kZUJsb2NrLCBwYXRjaEJ1ZmZlciwgSklUU3R1YlJvdXRpbmVQ
dHJUYWcsCiAgICAgICAgICAgICAiUG9seW1vcnBoaWMgY2FsbCBzdHViIGZvciAlcywgcmV0dXJu
IHBvaW50ICVwLCB0YXJnZXRzICVzIiwKLSAgICAgICAgICAgICAgICBpc1dlYkFzc2VtYmx5ID8g
IldlYkFzc2VtYmx5IiA6IHRvQ1N0cmluZygqY2FsbGVyQ29kZUJsb2NrKS5kYXRhKCksIGNhbGxM
aW5rSW5mby5jYWxsUmV0dXJuTG9jYXRpb24oKS5sYWJlbEF0T2Zmc2V0KDApLmV4ZWN1dGFibGVB
ZGRyZXNzKCksCisgICAgICAgICAgICAgICAgaXNXZWJBc3NlbWJseSA/ICJXZWJBc3NlbWJseSIg
OiB0b0NTdHJpbmcoKmNhbGxlckNvZGVCbG9jaykuZGF0YSgpLCBjYWxsTGlua0luZm8uZG9uZUxv
Y2F0aW9uKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwKICAgICAgICAgICAgICAgICB0b0NTdHJpbmco
bGlzdER1bXAoY2FsbENhc2VzKSkuZGF0YSgpKSwKICAgICAgICAgdm0sIG93bmVyLCBjYWxsRnJh
bWUtPmNhbGxlckZyYW1lKCksIGNhbGxMaW5rSW5mbywgY2FsbENhc2VzLAogICAgICAgICBXVEZN
b3ZlKGZhc3RDb3VudHMpKSk7CisKKyAgICBDQ2FsbEhlbHBlcnM6OmVtaXRKSVRDb2RlT3Zlcihj
YWxsTGlua0luZm8uZmFzdFBhdGhTdGFydCgpLCBbJl0gKENDYWxsSGVscGVycyYgaml0KSB7Cisg
ICAgICAgIGF1dG8ganVtcCA9IGppdC5qdW1wKCk7IC8vIE9PUFM6IHg4NgorICAgICAgICBqaXQu
YWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgICAgICAgICBs
aW5rQnVmZmVyLmxpbmsoanVtcCwgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJU
YWc+KHN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7CisgICAgICAgIH0pOworICAgIH0sICJQ
YXRjaGluZyBjYWxsIHRvIFBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lIGluIENhbGxMaW5rSW5m
byIpOwogICAgIAotICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBsYWNlV2l0aEp1bXAoCi0gICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpzdGFydE9mQnJhbmNoUHRyV2l0aFBhdGNoT25SZWdpc3RlcihjYWxs
TGlua0luZm8uaG90UGF0aEJlZ2luKCkpLAotICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKSVRT
dHViUm91dGluZVB0clRhZz4oc3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpKTsKICAgICAvLyBU
aGUgb3JpZ2luYWwgc2xvdyBwYXRoIGlzIHVucmVhY2hhYmxlIG9uIDY0LWJpdHMsIGJ1dCBzdGls
bAogICAgIC8vIHJlYWNoYWJsZSBvbiAzMi1iaXRzIHNpbmNlIGEgbm9uLWNlbGwgY2FsbGVlIHdp
bGwgYWx3YXlzCiAgICAgLy8gdHJpZ2dlciB0aGUgc2xvdyBwYXRoCiAgICAgbGlua1Nsb3dGb3Io
dm0sIGNhbGxMaW5rSW5mbyk7Ci0gICAgCisKICAgICAvLyBJZiB0aGVyZSBoYWQgYmVlbiBhIHBy
ZXZpb3VzIHN0dWIgcm91dGluZSwgdGhhdCBvbmUgd2lsbCBkaWUgYXMgc29vbiBhcyB0aGUgR0Mg
cnVucyBhbmQgc2VlcwogICAgIC8vIHRoYXQgaXQncyBubyBsb25nZXIgb24gc3RhY2suCiAgICAg
Y2FsbExpbmtJbmZvLnNldFN0dWIoV1RGTW92ZShzdHViUm91dGluZSkpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9SZXBhdGNoLmgJKHJldmlzaW9uIDI3Njk3NykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5oCSh3b3JraW5nIGNvcHkpCkBAIC01NiwxMCArNTYsMTAg
QEAgdm9pZCByZXBhdGNoSW5CeUlEKEpTR2xvYmFsT2JqZWN0KiwgQ29kZQogdm9pZCByZXBhdGNo
Q2hlY2tQcml2YXRlQnJhbmQoSlNHbG9iYWxPYmplY3QqLCBDb2RlQmxvY2sqLCBKU09iamVjdCos
IENhY2hlYWJsZUlkZW50aWZpZXIsIFN0cnVjdHVyZVN0dWJJbmZvJik7CiB2b2lkIHJlcGF0Y2hT
ZXRQcml2YXRlQnJhbmQoSlNHbG9iYWxPYmplY3QqLCBDb2RlQmxvY2sqLCBKU09iamVjdCosIFN0
cnVjdHVyZSosIENhY2hlYWJsZUlkZW50aWZpZXIsIFN0cnVjdHVyZVN0dWJJbmZvJik7CiB2b2lk
IHJlcGF0Y2hJbnN0YW5jZU9mKEpTR2xvYmFsT2JqZWN0KiwgQ29kZUJsb2NrKiwgSlNWYWx1ZSB2
YWx1ZSwgSlNWYWx1ZSBwcm90b3R5cGUsIFN0cnVjdHVyZVN0dWJJbmZvJiwgYm9vbCB3YXNGb3Vu
ZCk7Ci12b2lkIGxpbmtGb3IoVk0mLCBDYWxsRnJhbWUqLCBDYWxsTGlua0luZm8mLCBDb2RlQmxv
Y2sqLCBKU09iamVjdCogY2FsbGVlLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRh
Zz4pOwotdm9pZCBsaW5rRGlyZWN0Rm9yKENhbGxGcmFtZSosIENhbGxMaW5rSW5mbyYsIENvZGVC
bG9jayosIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPik7Cit2b2lkIGxpbmtN
b25vbW9ycGhpY0NhbGwoVk0mLCBDYWxsRnJhbWUqLCBDYWxsTGlua0luZm8mLCBDb2RlQmxvY2sq
LCBKU09iamVjdCogY2FsbGVlLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4p
Owordm9pZCBsaW5rRGlyZWN0Q2FsbChDYWxsRnJhbWUqLCBDYWxsTGlua0luZm8mLCBDb2RlQmxv
Y2sqLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4pOwogdm9pZCBsaW5rU2xv
d0ZvcihDYWxsRnJhbWUqLCBDYWxsTGlua0luZm8mKTsKLXZvaWQgdW5saW5rRm9yKFZNJiwgQ2Fs
bExpbmtJbmZvJik7Cit2b2lkIHVubGlua0NhbGwoVk0mLCBDYWxsTGlua0luZm8mKTsKIHZvaWQg
bGlua1BvbHltb3JwaGljQ2FsbChKU0dsb2JhbE9iamVjdCosIENhbGxGcmFtZSosIENhbGxMaW5r
SW5mbyYsIENhbGxWYXJpYW50KTsKIHZvaWQgcmVzZXRHZXRCeShDb2RlQmxvY2sqLCBTdHJ1Y3R1
cmVTdHViSW5mbyYsIEdldEJ5S2luZCk7CiB2b2lkIHJlc2V0UHV0QnlJRChDb2RlQmxvY2sqLCBT
dHJ1Y3R1cmVTdHViSW5mbyYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
T3B0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
T3B0aW9ucy5jcHAJKHJldmlzaW9uIDI3Njk3NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL09wdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MDAsOSArNjAwLDkgQEAgdm9p
ZCBPcHRpb25zOjppbml0aWFsaXplKCkKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKE9wdGlv
bnM6OmFkZHJlc3NPZk9wdGlvbihmb3JjZU9TUkV4aXRUb0xMSW50SUQpID09ICAmT3B0aW9uczo6
Zm9yY2VPU1JFeGl0VG9MTEludCgpKTsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKE9wdGlv
bnM6OmFkZHJlc3NPZk9wdGlvbkRlZmF1bHQoZm9yY2VPU1JFeGl0VG9MTEludElEKSA9PSAgJk9w
dGlvbnM6OmZvcmNlT1NSRXhpdFRvTExJbnREZWZhdWx0KCkpOwogCi0jaWZuZGVmIE5ERUJVRwor
Ly8jaWZuZGVmIE5ERUJVRwogICAgICAgICAgICAgQ29uZmlnOjplbmFibGVSZXN0cmljdGVkT3B0
aW9ucygpOwotI2VuZGlmCisvLyNlbmRpZgogICAgICAgICAgICAgLy8gSW5pdGlhbGl6ZSBlYWNo
IG9mIHRoZSBvcHRpb25zIHdpdGggdGhlaXIgZGVmYXVsdCB2YWx1ZXM6CiAjZGVmaW5lIElOSVRf
T1BUSU9OKHR5cGVfLCBuYW1lXywgZGVmYXVsdFZhbHVlXywgYXZhaWxhYmlsaXR5XywgZGVzY3Jp
cHRpb25fKSB7IFwKICAgICAgICAgICAgICAgICBhdXRvIHZhbHVlID0gZGVmYXVsdFZhbHVlXzsg
XApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAkocmV2aXNpb24gMjc2OTc3
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xNzA4LDQgKzE3MDgsNiBAQCB2b2lkIFZNOjpyZW1vdmVMb29wSGludEV4ZWN1dGlvbkNv
dW50ZXIoCiAgICAgICAgIG1fbG9vcEhpbnRFeGVjdXRpb25Db3VudHMucmVtb3ZlKGl0ZXIpOwog
fQogCit1aW50NjRfdCBnX251bWJlck9mT1NSRXhpdHM7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCShyZXZpc2lvbiAyNzY5NzcpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzAw
LDQgKzEzMDAsNiBAQCBleHRlcm4gIkMiIHZvaWQgc2FuaXRpemVTdGFja0ZvclZNSW1wbChWCiBK
U19FWFBPUlRfUFJJVkFURSB2b2lkIHNhbml0aXplU3RhY2tGb3JWTShWTSYpOwogdm9pZCBsb2dT
YW5pdGl6ZVN0YWNrKFZNJik7CiAKK2V4dGVybiB1aW50NjRfdCBnX251bWJlck9mT1NSRXhpdHM7
CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xz
L0pTRG9sbGFyVk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29s
cy9KU0RvbGxhclZNLmNwcAkocmV2aXNpb24gMjc2OTc3KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3Rvb2xzL0pTRG9sbGFyVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw5ICsyNywxMSBA
QAogI2luY2x1ZGUgIkpTRG9sbGFyVk0uaCIKIAogI2luY2x1ZGUgIkFycmF5UHJvdG90eXBlLmgi
CisjaW5jbHVkZSAiQXNzZW1ibGVyQ29tbW9uLmgiCiAjaW5jbHVkZSAiQnVpbHRpbk5hbWVzLmgi
CiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiQ29udHJvbEZsb3dQcm9maWxlci5o
IgorI2luY2x1ZGUgIkRGR1dvcmtsaXN0LmgiCiAjaW5jbHVkZSAiRE9NQXR0cmlidXRlR2V0dGVy
U2V0dGVyLmgiCiAjaW5jbHVkZSAiRE9NSklUR2V0dGVyU2V0dGVyLmgiCiAjaW5jbHVkZSAiRGVi
dWdnZXIuaCIKQEAgLTQ4LDkgKzUwLDExIEBACiAjaW5jbHVkZSAiU25pcHBldFBhcmFtcy5oIgog
I2luY2x1ZGUgIlR5cGVQcm9maWxlci5oIgogI2luY2x1ZGUgIlR5cGVQcm9maWxlckxvZy5oIgor
I2luY2x1ZGUgIlZNLmgiCiAjaW5jbHVkZSAiVk1JbnNwZWN0b3IuaCIKICNpbmNsdWRlICJWTVRy
YXBzSW5saW5lcy5oIgogI2luY2x1ZGUgIldhc21DYXBhYmlsaXRpZXMuaCIKKyNpbmNsdWRlICJX
YXNtV29ya2xpc3QuaCIKICNpbmNsdWRlIDx1bmljb2RlL3V2ZXJzaW9uLmg+CiAjaW5jbHVkZSA8
d3RmL0F0b21pY3MuaD4KICNpbmNsdWRlIDx3dGYvQ1BVVGltZS5oPgpAQCAtMjAwOCw2ICsyMDEy
LDIxIEBAIHN0YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW8KIHN0YXRpYyBK
U0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9uSXNHaWdhY2FnZUVuYWJsZWQpOwogc3Rh
dGljIEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04oZnVuY3Rpb25Ub1VuY2FjaGVhYmxlRGljdGlv
bmFyeSk7CiBzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTihmdW5jdGlvbklzUHJpdmF0
ZVN5bWJvbCk7CitzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTihmdW5jdGlvbkR1bXBX
b3JrbGlzdFN0YXRlKTsKK3N0YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9u
UHJlY2lzZVRpbWUpOworc3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04oZnVuY3Rpb25O
dW1iZXJPZk9TUkV4aXRzKTsKK3N0YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKGZ1bmN0
aW9uTnVtYmVyT2ZDYWNoZUZsdXNoZXMpOworc3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJ
T04oZnVuY3Rpb25OdW1iZXJPZlJlcGxhY2VXaXRoVk1IYWx0cyk7CitzdGF0aWMgSlNDX0RFQ0xB
UkVfSE9TVF9GVU5DVElPTihmdW5jdGlvbk51bWJlck9mUmVwbGFjZVdpdGhKdW1wcyk7CitzdGF0
aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTihmdW5jdGlvbk51bWJlck9mUmVwbGFjZVdpdGhM
b2Fkcyk7CitzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTihmdW5jdGlvbk51bWJlck9m
UmVwbGFjZVdpdGhBZGRyZXNzQ29tcHV0YXRpb25zKTsKK3N0YXRpYyBKU0NfREVDTEFSRV9IT1NU
X0ZVTkNUSU9OKGZ1bmN0aW9uTnVtYmVyT2ZTZXRQb2ludGVycyk7CitzdGF0aWMgSlNDX0RFQ0xB
UkVfSE9TVF9GVU5DVElPTihmdW5jdGlvbk51bWJlck9mUmVwYXRjaEludDMycyk7CitzdGF0aWMg
SlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTihmdW5jdGlvbk51bWJlck9mUmVsaW5rSnVtcHMpOwor
c3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04oZnVuY3Rpb25OdW1iZXJPZlJlbGlua0Nh
bGxzKTsKK3N0YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9uTnVtYmVyT2ZS
ZXBhdGNoQ29tcGFjdHMpOworc3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04oZnVuY3Rp
b25OdW1iZXJPZk5ld0NvZGVGaW5hbGl6YXRpb25zKTsKK3N0YXRpYyBKU0NfREVDTEFSRV9IT1NU
X0ZVTkNUSU9OKGZ1bmN0aW9uTnVtYmVyT2ZJblBsYWNlRmluYWxpemF0aW9ucyk7CiAKIGNvbnN0
IENsYXNzSW5mbyBKU0RvbGxhclZNOjpzX2luZm8gPSB7ICJEb2xsYXJWTSIsICZCYXNlOjpzX2lu
Zm8sIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNEb2xsYXJWTSkgfTsK
IApAQCAtMzU3Niw2ICszNTk1LDExNSBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oZnVuY3Rp
b25Jc1ByaXZhCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oYXNTeW1ib2wo
Y2FsbEZyYW1lLT5hcmd1bWVudCgwKSktPnVpZCgpLmlzUHJpdmF0ZSgpKSk7CiB9CiAKK0pTQ19E
RUZJTkVfSE9TVF9GVU5DVElPTihmdW5jdGlvbkR1bXBXb3JrbGlzdFN0YXRlLCAoSlNHbG9iYWxP
YmplY3QqLCBDYWxsRnJhbWUqKSkKK3sKKyAgICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2VydFNj
b3BlOworCisgICAgZGF0YUxvZygiREZHIFdvcmtsaXN0OiAiLCBwb2ludGVyRHVtcChERkc6OmV4
aXN0aW5nR2xvYmFsREZHV29ya2xpc3RPck51bGwoKSksICJcbiIpOworICAgIGRhdGFMb2coIkZU
TCBXb3JrbGlzdDogIiwgcG9pbnRlckR1bXAoREZHOjpleGlzdGluZ0dsb2JhbEZUTFdvcmtsaXN0
T3JOdWxsKCkpLCAiXG4iKTsKKyAgICAvL2RhdGFMb2coIldhc20gV29ya2xpc3Q6ICIsIHBvaW50
ZXJEdW1wKFdhc206OmV4aXN0aW5nV29ya2xpc3RPck51bGwoKSksICJcbiIpOworCisgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKK30KKworSlNDX0RFRklORV9IT1NU
X0ZVTkNUSU9OKGZ1bmN0aW9uUHJlY2lzZVRpbWUsIChKU0dsb2JhbE9iamVjdCosIENhbGxGcmFt
ZSopKQoreworICAgIERvbGxhclZNQXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7CisKKyAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKFdhbGxUaW1lOjpub3coKS5zZWNvbmRzU2luY2VF
cG9jaCgpLnZhbHVlKCkpKTsKK30KKworSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9u
TnVtYmVyT2ZPU1JFeGl0cywgKEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1lKikpCit7CisgICAg
RG9sbGFyVk1Bc3NlcnRTY29wZSBhc3NlcnRTY29wZTsKKworICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNOdW1iZXIoZ19udW1iZXJPZk9TUkV4aXRzKSk7Cit9CisKK0pTQ19ERUZJTkVfSE9T
VF9GVU5DVElPTihmdW5jdGlvbk51bWJlck9mQ2FjaGVGbHVzaGVzLCAoSlNHbG9iYWxPYmplY3Qq
LCBDYWxsRnJhbWUqKSkKK3sKKyAgICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOwor
CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihnX251bWJlck9mQ2FjaGVGbHVz
aGVzKSk7Cit9CisKK0pTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihmdW5jdGlvbk51bWJlck9mUmVw
bGFjZVdpdGhWTUhhbHRzLCAoSlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUqKSkKK3sKKyAgICBE
b2xsYXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOworCisgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc051bWJlcihnX251bWJlck9mUmVwbGFjZVdpdGhWTUhhbHRzKSk7Cit9CisKK0pTQ19E
RUZJTkVfSE9TVF9GVU5DVElPTihmdW5jdGlvbk51bWJlck9mUmVwbGFjZVdpdGhKdW1wcywgKEpT
R2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1lKikpCit7CisgICAgRG9sbGFyVk1Bc3NlcnRTY29wZSBh
c3NlcnRTY29wZTsKKworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoZ19udW1i
ZXJPZlJlcGxhY2VXaXRoSnVtcHMpKTsKK30KKworSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGZ1
bmN0aW9uTnVtYmVyT2ZSZXBsYWNlV2l0aExvYWRzLCAoSlNHbG9iYWxPYmplY3QqLCBDYWxsRnJh
bWUqKSkKK3sKKyAgICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOworCisgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihnX251bWJlck9mUmVwbGFjZVdpdGhMb2Fkcykp
OworfQorCitKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oZnVuY3Rpb25OdW1iZXJPZlJlcGxhY2VX
aXRoQWRkcmVzc0NvbXB1dGF0aW9ucywgKEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1lKikpCit7
CisgICAgRG9sbGFyVk1Bc3NlcnRTY29wZSBhc3NlcnRTY29wZTsKKworICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNOdW1iZXIoZ19udW1iZXJPZlJlcGxhY2VXaXRoQWRkcmVzc0NvbXB1dGF0
aW9ucykpOworfQorCitKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oZnVuY3Rpb25OdW1iZXJPZlNl
dFBvaW50ZXJzLCAoSlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUqKSkKK3sKKyAgICBEb2xsYXJW
TUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOworCisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c051bWJlcihnX251bWJlck9mU2V0UG9pbnRlcnMpKTsKK30KKworSlNDX0RFRklORV9IT1NUX0ZV
TkNUSU9OKGZ1bmN0aW9uTnVtYmVyT2ZSZXBhdGNoSW50MzJzLCAoSlNHbG9iYWxPYmplY3QqLCBD
YWxsRnJhbWUqKSkKK3sKKyAgICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOworCisg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihnX251bWJlck9mUmVwYXRjaEludDMy
cykpOworfQorCitKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oZnVuY3Rpb25OdW1iZXJPZlJlbGlu
a0p1bXBzLCAoSlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUqKSkKK3sKKyAgICBEb2xsYXJWTUFz
c2VydFNjb3BlIGFzc2VydFNjb3BlOworCisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051
bWJlcihnX251bWJlck9mUmVsaW5rSnVtcHMpKTsKK30KKworSlNDX0RFRklORV9IT1NUX0ZVTkNU
SU9OKGZ1bmN0aW9uTnVtYmVyT2ZSZWxpbmtDYWxscywgKEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZy
YW1lKikpCit7CisgICAgRG9sbGFyVk1Bc3NlcnRTY29wZSBhc3NlcnRTY29wZTsKKworICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoZ19udW1iZXJPZlJlbGlua0NhbGxzKSk7Cit9
CisKK0pTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihmdW5jdGlvbk51bWJlck9mUmVwYXRjaENvbXBh
Y3RzLCAoSlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUqKSkKK3sKKyAgICBEb2xsYXJWTUFzc2Vy
dFNjb3BlIGFzc2VydFNjb3BlOworCisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJl
cihnX251bWJlck9mUmVwYXRjaENvbXBhY3RzKSk7Cit9CisKK0pTQ19ERUZJTkVfSE9TVF9GVU5D
VElPTihmdW5jdGlvbk51bWJlck9mTmV3Q29kZUZpbmFsaXphdGlvbnMsIChKU0dsb2JhbE9iamVj
dCosIENhbGxGcmFtZSopKQoreworICAgIERvbGxhclZNQXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7
CisKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGdfbnVtYmVyT2ZOZXdDb2Rl
RmluYWxpemF0aW9ucykpOworfQorCitKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oZnVuY3Rpb25O
dW1iZXJPZkluUGxhY2VGaW5hbGl6YXRpb25zLCAoSlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUq
KSkKK3sKKyAgICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOworCisgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc051bWJlcihnX251bWJlck9mSW5QbGFjZUZpbmFsaXphdGlvbnMp
KTsKK30KKwogY29uc3RleHByIHVuc2lnbmVkIGpzRG9sbGFyVk1Qcm9wZXJ0eUF0dHJpYnV0ZXMg
PSBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVu
dW0gfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZTsKIAogdm9pZCBKU0RvbGxhclZNOjpm
aW5pc2hDcmVhdGlvbihWTSYgdm0pCkBAIC0zNzMwLDYgKzM4NTgsMjIgQEAgdm9pZCBKU0RvbGxh
clZNOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCiAKICAgICBhZGRGdW5jdGlvbih2bSwgImlzUHJp
dmF0ZVN5bWJvbCIsIGZ1bmN0aW9uSXNQcml2YXRlU3ltYm9sLCAxKTsKIAorICAgIGFkZEZ1bmN0
aW9uKHZtLCAiZHVtcFdvcmtsaXN0U3RhdGUiLCBmdW5jdGlvbkR1bXBXb3JrbGlzdFN0YXRlLCAw
KTsKKyAgICBhZGRGdW5jdGlvbih2bSwgInByZWNpc2VUaW1lIiwgZnVuY3Rpb25QcmVjaXNlVGlt
ZSwgMCk7CisgICAgYWRkRnVuY3Rpb24odm0sICJudW1iZXJPZk9TUkV4aXRzIiwgZnVuY3Rpb25O
dW1iZXJPZk9TUkV4aXRzLCAwKTsKKyAgICBhZGRGdW5jdGlvbih2bSwgIm51bWJlck9mQ2FjaGVG
bHVzaGVzIiwgZnVuY3Rpb25OdW1iZXJPZkNhY2hlRmx1c2hlcywgMCk7CisgICAgYWRkRnVuY3Rp
b24odm0sICJudW1iZXJPZlJlcGxhY2VXaXRoVk1IYWx0cyIsIGZ1bmN0aW9uTnVtYmVyT2ZSZXBs
YWNlV2l0aFZNSGFsdHMsIDApOworICAgIGFkZEZ1bmN0aW9uKHZtLCAibnVtYmVyT2ZSZXBsYWNl
V2l0aEp1bXBzIiwgZnVuY3Rpb25OdW1iZXJPZlJlcGxhY2VXaXRoSnVtcHMsIDApOworICAgIGFk
ZEZ1bmN0aW9uKHZtLCAibnVtYmVyT2ZSZXBsYWNlV2l0aExvYWRzIiwgZnVuY3Rpb25OdW1iZXJP
ZlJlcGxhY2VXaXRoTG9hZHMsIDApOworICAgIGFkZEZ1bmN0aW9uKHZtLCAibnVtYmVyT2ZSZXBs
YWNlV2l0aEFkZHJlc3NDb21wdXRhdGlvbnMiLCBmdW5jdGlvbk51bWJlck9mUmVwbGFjZVdpdGhB
ZGRyZXNzQ29tcHV0YXRpb25zLCAwKTsKKyAgICBhZGRGdW5jdGlvbih2bSwgIm51bWJlck9mU2V0
UG9pbnRlcnMiLCBmdW5jdGlvbk51bWJlck9mU2V0UG9pbnRlcnMsIDApOworICAgIGFkZEZ1bmN0
aW9uKHZtLCAibnVtYmVyT2ZSZXBhdGNoSW50MzJzIiwgZnVuY3Rpb25OdW1iZXJPZlJlcGF0Y2hJ
bnQzMnMsIDApOworICAgIGFkZEZ1bmN0aW9uKHZtLCAibnVtYmVyT2ZSZWxpbmtKdW1wcyIsIGZ1
bmN0aW9uTnVtYmVyT2ZSZWxpbmtKdW1wcywgMCk7CisgICAgYWRkRnVuY3Rpb24odm0sICJudW1i
ZXJPZlJlbGlua0NhbGxzIiwgZnVuY3Rpb25OdW1iZXJPZlJlbGlua0NhbGxzLCAwKTsKKyAgICBh
ZGRGdW5jdGlvbih2bSwgIm51bWJlck9mUmVwYXRjaENvbXBhY3RzIiwgZnVuY3Rpb25OdW1iZXJP
ZlJlcGF0Y2hDb21wYWN0cywgMCk7CisgICAgYWRkRnVuY3Rpb24odm0sICJudW1iZXJPZk5ld0Nv
ZGVGaW5hbGl6YXRpb25zIiwgZnVuY3Rpb25OdW1iZXJPZk5ld0NvZGVGaW5hbGl6YXRpb25zLCAw
KTsKKyAgICBhZGRGdW5jdGlvbih2bSwgIm51bWJlck9mSW5QbGFjZUZpbmFsaXphdGlvbnMiLCBm
dW5jdGlvbk51bWJlck9mSW5QbGFjZUZpbmFsaXphdGlvbnMsIDApOworCiAgICAgbV9vYmplY3RE
b2luZ1NpZGVFZmZlY3RQdXRXaXRob3V0Q29ycmVjdFNsb3RTdGF0dXNTdHJ1Y3R1cmUuc2V0KHZt
LCB0aGlzLCBPYmplY3REb2luZ1NpZGVFZmZlY3RQdXRXaXRob3V0Q29ycmVjdFNsb3RTdGF0dXM6
OmNyZWF0ZVN0cnVjdHVyZSh2bSwgZ2xvYmFsT2JqZWN0LCBqc051bGwoKSkpOwogfQogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XYXNtVG9KUy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2FzbVRvSlMuY3BwCShyZXZpc2lvbiAy
NzY5NzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XYXNtVG9KUy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI2MSwxOSArMjYxLDIwIEBAIEV4cGVjdGVkPE1hY3JvQXNzZW1ibGVy
Q29kZVJlZjxXYXNtRW50cnkKIAogICAgIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvID0gY2Fs
bExpbmtJbmZvcy5hZGQoQ29kZU9yaWdpbigpKTsKICAgICBjYWxsTGlua0luZm8tPnNldFVwQ2Fs
bChDYWxsTGlua0luZm86OkNhbGwsIGltcG9ydEpTQ2VsbEdQUlJlZyk7Ci0gICAgSklUOjpEYXRh
TGFiZWxQdHIgdGFyZ2V0VG9DaGVjazsKLSAgICBKSVQ6OlRydXN0ZWRJbW1QdHIgaW5pdGlhbFJp
Z2h0VmFsdWUobnVsbHB0cik7Ci0gICAgSklUOjpKdW1wIHNsb3dQYXRoID0gaml0LmJyYW5jaFB0
cldpdGhQYXRjaChNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIGltcG9ydEpTQ2VsbEdQUlJlZywg
dGFyZ2V0VG9DaGVjaywgaW5pdGlhbFJpZ2h0VmFsdWUpOwotICAgIEpJVDo6Q2FsbCBmYXN0Q2Fs
bCA9IGppdC5uZWFyQ2FsbCgpOworICAgIGF1dG8gZmFzdFBhdGhTdGFydCA9IGppdC5sYWJlbCgp
OworICAgIGF1dG8gc2xvd1BhdGggPSBDYWxsTGlua0luZm86OmVtaXRGYXN0UGF0aChqaXQsIGlt
cG9ydEpTQ2VsbEdQUlJlZywgSW52YWxpZEdQUlJlZywgKmNhbGxMaW5rSW5mbywgQ2FsbExpbmtJ
bmZvOjpVc2VEYXRhSUM6Ok5vKTsKKwogICAgIEpJVDo6SnVtcCBkb25lID0gaml0Lmp1bXAoKTsK
ICAgICBzbG93UGF0aC5saW5rKCZqaXQpOworICAgIGF1dG8gc2xvd1BhdGhTdGFydCA9IGppdC5s
YWJlbCgpOwogICAgIC8vIENhbGxlZSBuZWVkcyB0byBiZSBpbiByZWdUMCBoZXJlLgotICAgIGpp
dC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKGNhbGxMaW5rSW5mbyksIEdQUklu
Zm86OnJlZ1QyKTsgLy8gTGluayBpbmZvIG5lZWRzIHRvIGJlIGluIHJlZ1QyLgogICAgIGppdC5s
b2FkV2FzbUNvbnRleHRJbnN0YW5jZShHUFJJbmZvOjpyZWdUMyk7CiAgICAgaml0LmxvYWRQdHIo
Q0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QzLCBJbnN0YW5jZTo6b2Zmc2V0T2ZP
d25lcigpKSwgR1BSSW5mbzo6cmVnVDMpOwogICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6
QWRkcmVzcyhHUFJJbmZvOjpyZWdUMywgSlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZkds
b2JhbE9iamVjdCgpKSwgR1BSSW5mbzo6cmVnVDMpOwotICAgIEpJVDo6Q2FsbCBzbG93Q2FsbCA9
IGppdC5uZWFyQ2FsbCgpOworICAgIC8vSklUOjpDYWxsIHNsb3dDYWxsID0gaml0Lm5lYXJDYWxs
KCk7CisgICAgQ2FsbExpbmtJbmZvOjplbWl0U2xvd1BhdGgodm0sIGppdCwgKmNhbGxMaW5rSW5m
byk7CiAgICAgZG9uZS5saW5rKCZqaXQpOworICAgIGF1dG8gZG9uZUxvY2F0aW9uID0gaml0Lmxh
YmVsKCk7CiAKICAgICBpZiAoc2lnbmF0dXJlLnJldHVybkNvdW50KCkgPT0gMSkgewogICAgICAg
ICBzd2l0Y2ggKHNpZ25hdHVyZS5yZXR1cm5UeXBlKDApLmtpbmQpIHsKQEAgLTQyMSwxMSArNDIy
LDEwIEBAIEV4cGVjdGVkPE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxXYXNtRW50cnkKICAgICBpZiAo
VU5MSUtFTFkocGF0Y2hCdWZmZXIuZGlkRmFpbFRvQWxsb2NhdGUoKSkpCiAgICAgICAgIHJldHVy
biBtYWtlVW5leHBlY3RlZChCaW5kaW5nRmFpbHVyZTo6T3V0T2ZNZW1vcnkpOwogCi0gICAgcGF0
Y2hCdWZmZXIubGluayhzbG93Q2FsbCwgRnVuY3Rpb25QdHI8SklUVGh1bmtQdHJUYWc+KHZtLmdl
dENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcikuY29kZSgpKSk7Ci0gICAgQ29kZUxvY2F0
aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gY2FsbFJldHVybkxvY2F0aW9uKHBhdGNoQnVmZmVy
LmxvY2F0aW9uT2ZOZWFyQ2FsbDxKU0ludGVybmFsUHRyVGFnPihzbG93Q2FsbCkpOwotICAgIENv
ZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IGhvdFBhdGhCZWdpbihwYXRjaEJ1ZmZl
ci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KHRhcmdldFRvQ2hlY2spKTsKLSAgICBDb2Rl
TG9jYXRpb25OZWFyQ2FsbDxKU0ludGVybmFsUHRyVGFnPiBob3RQYXRoT3RoZXIgPSBwYXRjaEJ1
ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8SlNJbnRlcm5hbFB0clRhZz4oZmFzdENhbGwpOwotICAg
IGNhbGxMaW5rSW5mby0+c2V0Q2FsbExvY2F0aW9ucyhjYWxsUmV0dXJuTG9jYXRpb24sIGhvdFBh
dGhCZWdpbiwgaG90UGF0aE90aGVyKTsKKyAgICBjYWxsTGlua0luZm8tPnNldENhbGxMb2NhdGlv
bnMoCisgICAgICAgICAgICBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+
KGZhc3RQYXRoU3RhcnQpLAorICAgICAgICAgICAgcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU0lu
dGVybmFsUHRyVGFnPihzbG93UGF0aFN0YXJ0KSwKKyAgICAgICAgICAgIHBhdGNoQnVmZmVyLmxv
Y2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oZG9uZUxvY2F0aW9uKSk7CiAKICAgICByZXR1cm4g
RklOQUxJWkVfV0FTTV9DT0RFKHBhdGNoQnVmZmVyLCBXYXNtRW50cnlQdHJUYWcsICJXZWJBc3Nl
bWJseS0+SmF2YVNjcmlwdCBpbXBvcnRbJWldICVzIiwgaW1wb3J0SW5kZXgsIHNpZ25hdHVyZS50
b1N0cmluZygpLmFzY2lpKCkuZGF0YSgpKTsKIH0KSW5kZXg6IFRvb2xzL1NjcmlwdHMvY29tcGFy
ZS1yZXN1bHRzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvY29tcGFyZS1yZXN1bHRzCShy
ZXZpc2lvbiAyNzY5NzcpCisrKyBUb29scy9TY3JpcHRzL2NvbXBhcmUtcmVzdWx0cwkod29ya2lu
ZyBjb3B5KQpAQCAtMjc0LDcgKzI3NCw3IEBAIGRlZiBKZXRTdHJlYW0yUmVzdWx0cyhwYXlsb2Fk
KToKICAgICBhc3NlcnQgZGV0ZWN0SmV0U3RyZWFtMihwYXlsb2FkKQogCiAgICAganMgPSBwYXls
b2FkWyJKZXRTdHJlYW0yLjAiXQotICAgIGl0ZXJhdGlvbnMgPSBsZW4oanNbInRlc3RzIl1bImdh
dXNzaWFuLWJsdXIiXVsibWV0cmljcyJdWyJTY29yZSJdWyJjdXJyZW50Il0pCisgICAgaXRlcmF0
aW9ucyA9IGxlbihqc1sidGVzdHMiXVsicmF5dHJhY2UiXVsibWV0cmljcyJdWyJTY29yZSJdWyJj
dXJyZW50Il0pCiAgICAgcmVzdWx0cyA9IFtdCiAgICAgZm9yIGkgaW4gcmFuZ2UoaXRlcmF0aW9u
cyk6CiAgICAgICAgIHNjb3JlcyA9IFtdCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2Jl
bmNobWFya19ydW5uZXIvYnJvd3Nlcl9kcml2ZXIvb3N4X3NhZmFyaV9kcml2ZXIucHkKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9iZW5jaG1hcmtfcnVubmVyL2Jyb3dzZXJf
ZHJpdmVyL29zeF9zYWZhcmlfZHJpdmVyLnB5CShyZXZpc2lvbiAyNzY5NzcpCisrKyBUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L2JlbmNobWFya19ydW5uZXIvYnJvd3Nlcl9kcml2ZXIvb3N4X3NhZmFy
aV9kcml2ZXIucHkJKHdvcmtpbmcgY29weSkKQEAgLTIsNiArMiw3IEBACiAKIGltcG9ydCBsb2dn
aW5nCiBpbXBvcnQgb3MKK2ltcG9ydCByZQogaW1wb3J0IHN1YnByb2Nlc3MKIGltcG9ydCB0aW1l
CiAKQEAgLTI2LDYgKzI3LDkgQEAgY2xhc3MgT1NYU2FmYXJpRHJpdmVyKE9TWEJyb3dzZXJEcml2
ZXIpOgogICAgIGRlZiBsYXVuY2hfdXJsKHNlbGYsIHVybCwgb3B0aW9ucywgYnJvd3Nlcl9idWls
ZF9wYXRoLCBicm93c2VyX3BhdGgpOgogICAgICAgICBhcmdzID0gWycvQXBwbGljYXRpb25zL1Nh
ZmFyaS5hcHAvQ29udGVudHMvTWFjT1MvU2FmYXJpJ10KICAgICAgICAgZW52ID0ge30KKyAgICAg
ICAgZm9yIGtleSwgdmFsdWUgaW4gb3MuZW52aXJvbi5pdGVtcygpOgorICAgICAgICAgICAgaWYg
cmUubWF0Y2gociJeX19YUENfIiwga2V5KToKKyAgICAgICAgICAgICAgICBlbnZba2V5XSA9IHZh
bHVlCiAgICAgICAgIGlmIGJyb3dzZXJfYnVpbGRfcGF0aDoKICAgICAgICAgICAgIGJyb3dzZXJf
YnVpbGRfYWJzb2x1dGVfcGF0aCA9IG9zLnBhdGguYWJzcGF0aChicm93c2VyX2J1aWxkX3BhdGgp
CiAgICAgICAgICAgICBzYWZhcmlfYXBwX2luX2J1aWxkX3BhdGggPSBvcy5wYXRoLmpvaW4oYnJv
d3Nlcl9idWlsZF9hYnNvbHV0ZV9wYXRoLCAnU2FmYXJpLmFwcC9Db250ZW50cy9NYWNPUy9TYWZh
cmknKQpAQCAtMzcsOCArNDEsMTAgQEAgY2xhc3MgT1NYU2FmYXJpRHJpdmVyKE9TWEJyb3dzZXJE
cml2ZXIpOgogICAgICAgICAgICAgICAgIGFyZ3MgPSBbc2FmYXJpX2FwcF9pbl9idWlsZF9wYXRo
XQogCiAgICAgICAgICAgICBpZiBjb250YWluc19mcmFtZXdvcmtzOgotICAgICAgICAgICAgICAg
IGVudiA9IHsnRFlMRF9GUkFNRVdPUktfUEFUSCc6IGJyb3dzZXJfYnVpbGRfYWJzb2x1dGVfcGF0
aCwgJ0RZTERfTElCUkFSWV9QQVRIJzogYnJvd3Nlcl9idWlsZF9hYnNvbHV0ZV9wYXRoLAotICAg
ICAgICAgICAgICAgICAgICAnX19YUENfRFlMRF9GUkFNRVdPUktfUEFUSCc6IGJyb3dzZXJfYnVp
bGRfYWJzb2x1dGVfcGF0aCwgJ19fWFBDX0RZTERfTElCUkFSWV9QQVRIJzogYnJvd3Nlcl9idWls
ZF9hYnNvbHV0ZV9wYXRofQorICAgICAgICAgICAgICAgIGVudlsnRFlMRF9GUkFNRVdPUktfUEFU
SCddID0gYnJvd3Nlcl9idWlsZF9hYnNvbHV0ZV9wYXRoCisgICAgICAgICAgICAgICAgZW52WydE
WUxEX0xJQlJBUllfUEFUSCddID0gYnJvd3Nlcl9idWlsZF9hYnNvbHV0ZV9wYXRoCisgICAgICAg
ICAgICAgICAgZW52WydfX1hQQ19EWUxEX0ZSQU1FV09SS19QQVRIJ10gPSBicm93c2VyX2J1aWxk
X2Fic29sdXRlX3BhdGgKKyAgICAgICAgICAgICAgICBlbnZbJ19fWFBDX0RZTERfTElCUkFSWV9Q
QVRIJ10gPSBicm93c2VyX2J1aWxkX2Fic29sdXRlX3BhdGgKICAgICAgICAgICAgIGVsaWYgbm90
IGhhc19zYWZhcmlfYXBwOgogICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbignQ291bGQg
bm90IGZpbmQgYW55IGZyYW1ld29yayAie30iJy5mb3JtYXQoYnJvd3Nlcl9idWlsZF9wYXRoKSkK
IAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>428441</attachid>
            <date>2021-05-12 18:08:57 -0700</date>
            <delta_ts>2021-05-12 18:14:36 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>105399</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvSmV0U3RyZWFtMi9KZXRTdHJlYW1Ecml2ZXIuanMKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0yL0pldFN0cmVhbURyaXZlci5q
cwkocmV2aXNpb24gMjc2OTc3KQorKysgUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0yL0pldFN0
cmVhbURyaXZlci5qcwkod29ya2luZyBjb3B5KQpAQCAtNDMsNiArNDMsOCBAQCBpZiAodHlwZW9m
IHRlc3RXb3JzdENhc2VDb3VudE1hcCA9PT0gInVuCiBpZiAodHlwZW9mIGR1bXBKU09OUmVzdWx0
cyA9PT0gInVuZGVmaW5lZCIpCiAgICAgdmFyIGR1bXBKU09OUmVzdWx0cyA9IGZhbHNlOwogCisv
L3ZhciB0ZXN0TGlzdCA9IFsiZGVsdGEtYmx1ZSIsICJlYXJsZXktYm95ZXIiLCAicmljaGFyZHMi
LCAicmF5dHJhY2UiXTsKKwogLy8gVXNlZCBmb3IgdGhlIHByb21pc2UgcmVwcmVzZW50aW5nIHRo
ZSBjdXJyZW50IGJlbmNobWFyayBydW4uCiB0aGlzLmN1cnJlbnRSZXNvbHZlID0gbnVsbDsKIHRo
aXMuY3VycmVudFJlamVjdCA9IG51bGw7CkBAIC0yNzQsNiArMjc2LDEwIEBAIGNsYXNzIERyaXZl
ciB7CiAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coYCR7Y2F0ZWdvcnl9OiAke3VpRnJpZW5k
bHlOdW1iZXIoZ2VvbWVhbihzY29yZXMpKX1gKTsKIAogICAgICAgICAgICAgY29uc29sZS5sb2co
IlxuVG90YWwgU2NvcmU6ICIsIHVpRnJpZW5kbHlOdW1iZXIoZ2VvbWVhbihhbGxTY29yZXMpKSwg
IlxuIik7CisgICAgICAgICAgICBpZiAodHlwZW9mICR2bSAhPT0gInVuZGVmaW5lZCIpIHsKKyAg
ICAgICAgICAgICAgICBjb25zb2xlLmxvZygiXG5cbnRvdGFsIGNhY2hlIGZsdXNoZXM6ICIsICR2
bS5udW1iZXJPZkNhY2hlRmx1c2hlcygpLCAiXG4iKTsKKyAgICAgICAgICAgICAgICBjb25zb2xl
LmxvZygiXG5cbnRvdGFsIE9TUiBleGl0czogIiwgJHZtLm51bWJlck9mT1NSRXhpdHMoKSwgIlxu
Iik7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KIAogICAgICAgICB0aGlzLnJlcG9ydFNjb3Jl
VG9SdW5CZW5jaG1hcmtSdW5uZXIoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3Vy
Y2VzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQJ
KHJldmlzaW9uIDI3Njk3NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAko
d29ya2luZyBjb3B5KQpAQCAtMSw0ICsxLDQgQEAKLS8vIENvcHlyaWdodCAoQykgMjAxNy0yMDE5
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoQykgMjAxNy0y
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vCiAvLyBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKIC8v
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtNDYsNiArNDYsNyBAQCBBUEkvT3BhcXVlSlNTdHJpbmcuY3BwCiAKIGFz
c2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmNwcAogYXNzZW1ibGVyL0Fzc2VtYmxlckJ1
ZmZlci5jcHAKK2Fzc2VtYmxlci9Bc3NlbWJsZXJDb21tb24uY3BwCiBhc3NlbWJsZXIvQ1BVLmNw
cAogYXNzZW1ibGVyL0pJVE9wZXJhdGlvbkxpc3QuY3BwCiBhc3NlbWJsZXIvTGlua0J1ZmZlci5j
cHAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyNzY5NzcpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjg5MSw2ICsyODkxLDcgQEAKIAkJMEY5QzAzRDQx
RTk0NzZGMDAwQ0Q5MTI1IC8qIEFpclRtcFNldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBBaXJUbXBTZXQuaDsgcGF0aCA9IGIzL2Fpci9BaXJUbXBTZXQuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5Q0FCQzYxREI1NEE3NjAwMDhFODNCIC8qIEFpclBhZElu
dGVyZmVyZW5jZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBBaXJQ
YWRJbnRlcmZlcmVuY2UuY3BwOyBwYXRoID0gYjMvYWlyL0FpclBhZEludGVyZmVyZW5jZS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOUNBQkM3MURCNTRBNzYwMDA4RTgzQiAv
KiBBaXJQYWRJbnRlcmZlcmVuY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
QWlyUGFkSW50ZXJmZXJlbmNlLmg7IHBhdGggPSBiMy9haXIvQWlyUGFkSW50ZXJmZXJlbmNlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGOUQwODhBMjY0MUNDN0UwMDQxRDcwMSAv
KiBBc3NlbWJsZXJDb21tb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gQXNzZW1ibGVyQ29tbW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5
RDMzNkUxNjVEQkI4RDAwNUFEMzg3IC8qIERpc2Fzc2VtYmxlci5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBEaXNhc3NlbWJsZXIuY3BwOyBwYXRoID0gZGlzYXNzZW1i
bGVyL0Rpc2Fzc2VtYmxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOUQz
Mzk0MTdGRkM0RTYwMDczQzJCQyAvKiBERkdGbHVzaGVkQXQuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBuYW1lID0gREZHRmx1c2hlZEF0LmNwcDsgcGF0aCA9IGRmZy9ERkdGbHVz
aGVkQXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjlEMzM5NTE3RkZDNEU2
MDA3M0MyQkMgLyogREZHRmx1c2hlZEF0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IERGR0ZsdXNoZWRBdC5oOyBwYXRoID0gZGZnL0RGR0ZsdXNoZWRBdC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtODQxNiw2ICs4NDE3LDcgQEAKIAkJCQk4NkFERDE0MzBGRERF
QTk4MDAwNkZGQ0MgLyogQVJNdjdSZWdpc3RlcnMuaCAqLywKIAkJCQkwRkE2RjM5NjIwQ0NCN0E2
MDBBMDNEQ0QgLyogQXNzZW1ibGVyQnVmZmVyLmNwcCAqLywKIAkJCQk5Njg4Q0IxMzBFRDEyQjRF
MDAxRDY0OUYgLyogQXNzZW1ibGVyQnVmZmVyLmggKi8sCisJCQkJMEY5RDA4OEEyNjQxQ0M3RTAw
NDFENzAxIC8qIEFzc2VtYmxlckNvbW1vbi5jcHAgKi8sCiAJCQkJNDNDMzkyQUExQzNCRUIwMDAw
MjQxRjUzIC8qIEFzc2VtYmxlckNvbW1vbi5oICovLAogCQkJCTg2RTExNkIwMEZFNzVBQzgwMEI1
MTJCQyAvKiBDb2RlTG9jYXRpb24uaCAqLywKIAkJCQk1MjMzNTYyODIyNUVCOEU5MDAyNjhCRDIg
LyogQ1BVLmNwcCAqLywKQEAgLTg0MzksOCArODQ0MSw4IEBACiAJCQkJODZDNTY4REUxMUEyMTNF
RTAwMDdGN0YwIC8qIE1hY3JvQXNzZW1ibGVyTUlQUy5oICovLAogCQkJCUZFNjhDNjM1MUI5MERE
RDkwMDQyQkNCMyAvKiBNYWNyb0Fzc2VtYmxlclByaW50ZXIuY3BwICovLAogCQkJCUZFNjhDNjM2
MUI5MERERDkwMDQyQkNCMyAvKiBNYWNyb0Fzc2VtYmxlclByaW50ZXIuaCAqLywKLQkJCQk4NjAx
NjFFMDBGM0E4M0MxMDBGODQ3MTAgLyogTWFjcm9Bc3NlbWJsZXJYODYuaCAqLywKIAkJCQk4NjAx
NjFFMTBGM0E4M0MxMDBGODQ3MTAgLyogTWFjcm9Bc3NlbWJsZXJYODZfNjQuaCAqLywKKwkJCQk4
NjAxNjFFMDBGM0E4M0MxMDBGODQ3MTAgLyogTWFjcm9Bc3NlbWJsZXJYODYuaCAqLywKIAkJCQlB
N0E0QUUwNzE3OTczQjI2MDA1NjEyQjEgLyogTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uY3BwICov
LAogCQkJCTg2MDE2MUUyMEYzQTgzQzEwMEY4NDcxMCAvKiBNYWNyb0Fzc2VtYmxlclg4NkNvbW1v
bi5oICovLAogCQkJCTY1ODYwMTc3MTg1QThGNUUwMDAzMEVFRSAvKiBNYXhGcmFtZUV4dGVudEZv
clNsb3dQYXRoQ2FsbC5oICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci9BUk02NEFzc2VtYmxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9h
c3NlbWJsZXIvQVJNNjRBc3NlbWJsZXIuaAkocmV2aXNpb24gMjc2OTc3KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BUk02NEFzc2VtYmxlci5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yNjAwLDYgKzI2MDAsNyBAQCBwdWJsaWM6CiAgICAgICAgIGludCBpbnNuID0gZGF0YUNhY2hl
WmVyb1ZpcnR1YWxBZGRyZXNzKEFSTTY0UmVnaXN0ZXJzOjp6cik7CiAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKHJvdW5kVXBUb011bHRpcGxlT2Y8aW5zdHJ1Y3Rpb25TaXplPih3aGVyZSkgPT0gd2hl
cmUpOwogICAgICAgICBwZXJmb3JtSklUTWVtY3B5KHdoZXJlLCAmaW5zbiwgc2l6ZW9mKGludCkp
OworICAgICAgICBXVEY6OmF0b21pY0V4Y2hhbmdlQWRkKCZnX251bWJlck9mUmVwbGFjZVdpdGhW
TUhhbHRzLCAxKTsKICAgICAgICAgY2FjaGVGbHVzaCh3aGVyZSwgc2l6ZW9mKGludCkpOwogICAg
IH0KIApAQCAtMjYxOSw2ICsyNjIwLDcgQEAgcHVibGljOgogICAgICAgICBpbnQgaW5zbiA9IHVu
Y29uZGl0aW9uYWxCcmFuY2hJbW1lZGlhdGUoZmFsc2UsIHN0YXRpY19jYXN0PGludD4ob2Zmc2V0
KSk7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJvdW5kVXBUb011bHRpcGxlT2Y8aW5zdHJ1Y3Rp
b25TaXplPih3aGVyZSkgPT0gd2hlcmUpOwogICAgICAgICBwZXJmb3JtSklUTWVtY3B5KHdoZXJl
LCAmaW5zbiwgc2l6ZW9mKGludCkpOworICAgICAgICBXVEY6OmF0b21pY0V4Y2hhbmdlQWRkKCZn
X251bWJlck9mUmVwbGFjZVdpdGhKdW1wcywgMSk7CiAgICAgICAgIGNhY2hlRmx1c2god2hlcmUs
IHNpemVvZihpbnQpKTsKICAgICB9CiAgICAgCkBAIC0yNjUwLDYgKzI2NTIsNyBAQCBwdWJsaWM6
CiAgICAgICAgICAgICBpbnQgaW5zbiA9IGxvYWRTdG9yZVJlZ2lzdGVyVW5zaWduZWRJbW1lZGlh
dGUoTWVtT3BTaXplXzY0LCBmYWxzZSwgTWVtT3BfTE9BRCwgZW5jb2RlUG9zaXRpdmVJbW1lZGlh
dGU8NjQ+KGltbTEyKSwgcm4sIHJkKTsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJvdW5k
VXBUb011bHRpcGxlT2Y8aW5zdHJ1Y3Rpb25TaXplPih3aGVyZSkgPT0gd2hlcmUpOwogICAgICAg
ICAgICAgcGVyZm9ybUpJVE1lbWNweSh3aGVyZSwgJmluc24sIHNpemVvZihpbnQpKTsKKyAgICAg
ICAgICAgIFdURjo6YXRvbWljRXhjaGFuZ2VBZGQoJmdfbnVtYmVyT2ZSZXBsYWNlV2l0aExvYWRz
LCAxKTsKICAgICAgICAgICAgIGNhY2hlRmx1c2god2hlcmUsIHNpemVvZihpbnQpKTsKICAgICAg
ICAgfQogI2lmIEFTU0VSVF9FTkFCTEVECkBAIC0yNjg1LDYgKzI2ODgsNyBAQCBwdWJsaWM6CiAg
ICAgICAgICAgICBpbnQgaW5zbiA9IGFkZFN1YnRyYWN0SW1tZWRpYXRlKERhdGFzaXplXzY0LCBB
ZGRPcF9BREQsIERvbnRTZXRGbGFncywgMCwgaW1tMTIgKiBzaXplb2Yodm9pZCopLCBybiwgcnQp
OwogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQocm91bmRVcFRvTXVsdGlwbGVPZjxpbnN0cnVj
dGlvblNpemU+KHdoZXJlKSA9PSB3aGVyZSk7CiAgICAgICAgICAgICBwZXJmb3JtSklUTWVtY3B5
KHdoZXJlLCAmaW5zbiwgc2l6ZW9mKGludCkpOworICAgICAgICAgICAgV1RGOjphdG9taWNFeGNo
YW5nZUFkZCgmZ19udW1iZXJPZlJlcGxhY2VXaXRoQWRkcmVzc0NvbXB1dGF0aW9ucywgMSk7CiAg
ICAgICAgICAgICBjYWNoZUZsdXNoKHdoZXJlLCBzaXplb2YoaW50KSk7CiAgICAgICAgIH0KICNp
ZiBBU1NFUlRfRU5BQkxFRApAQCAtMjcyMSw4ICsyNzI1LDEwIEBAIHB1YmxpYzoKICAgICAgICAg
UkVMRUFTRV9BU1NFUlQocm91bmRVcFRvTXVsdGlwbGVPZjxpbnN0cnVjdGlvblNpemU+KGFkZHJl
c3MpID09IGFkZHJlc3MpOwogICAgICAgICBwZXJmb3JtSklUTWVtY3B5KGFkZHJlc3MsIGJ1ZmZl
ciwgc2l6ZW9mKGludCkgKiAzKTsKIAotICAgICAgICBpZiAoZmx1c2gpCisgICAgICAgIGlmIChm
bHVzaCkgeworICAgICAgICAgICAgV1RGOjphdG9taWNFeGNoYW5nZUFkZCgmZ19udW1iZXJPZlNl
dFBvaW50ZXJzLCAxKTsKICAgICAgICAgICAgIGNhY2hlRmx1c2goYWRkcmVzcywgc2l6ZW9mKGlu
dCkgKiAzKTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIHN0YXRpYyB2b2lkIHJlcGF0Y2hJbnQz
Mih2b2lkKiB3aGVyZSwgaW50MzJfdCB2YWx1ZSkKQEAgLTI3NDksNiArMjc1NSw3IEBAIHB1Ymxp
YzoKICAgICAgICAgUkVMRUFTRV9BU1NFUlQocm91bmRVcFRvTXVsdGlwbGVPZjxpbnN0cnVjdGlv
blNpemU+KHdoZXJlKSA9PSB3aGVyZSk7CiAgICAgICAgIHBlcmZvcm1KSVRNZW1jcHkod2hlcmUs
ICZidWZmZXIsIHNpemVvZihpbnQpICogMik7CiAKKyAgICAgICAgV1RGOjphdG9taWNFeGNoYW5n
ZUFkZCgmZ19udW1iZXJPZlJlcGF0Y2hJbnQzMnMsIDEpOwogICAgICAgICBjYWNoZUZsdXNoKHdo
ZXJlLCBzaXplb2YoaW50KSAqIDIpOwogICAgIH0KIApAQCAtMjc5Miw2ICsyNzk5LDcgQEAgcHVi
bGljOgogICAgIHN0YXRpYyB2b2lkIHJlbGlua0p1bXAodm9pZCogZnJvbSwgdm9pZCogdG8pCiAg
ICAgewogICAgICAgICByZWxpbmtKdW1wT3JDYWxsPEJyYW5jaFR5cGVfSk1QPihyZWludGVycHJl
dF9jYXN0PGludCo+KGZyb20pLCByZWludGVycHJldF9jYXN0PGNvbnN0IGludCo+KGZyb20pLCB0
byk7CisgICAgICAgIFdURjo6YXRvbWljRXhjaGFuZ2VBZGQoJmdfbnVtYmVyT2ZSZWxpbmtKdW1w
cywgMSk7CiAgICAgICAgIGNhY2hlRmx1c2goZnJvbSwgc2l6ZW9mKGludCkpOwogICAgIH0KICAg
ICAKQEAgLTI4MDMsNiArMjgxMSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCByZWxpbmtD
YWxsKHZvaWQqIGZyb20sIHZvaWQqIHRvKQogICAgIHsKICAgICAgICAgcmVsaW5rSnVtcE9yQ2Fs
bDxCcmFuY2hUeXBlX0NBTEw+KHJlaW50ZXJwcmV0X2Nhc3Q8aW50Kj4oZnJvbSkgLSAxLCByZWlu
dGVycHJldF9jYXN0PGNvbnN0IGludCo+KGZyb20pIC0gMSwgdG8pOworICAgICAgICBXVEY6OmF0
b21pY0V4Y2hhbmdlQWRkKCZnX251bWJlck9mUmVsaW5rQ2FsbHMsIDEpOwogICAgICAgICBjYWNo
ZUZsdXNoKHJlaW50ZXJwcmV0X2Nhc3Q8aW50Kj4oZnJvbSkgLSAxLCBzaXplb2YoaW50KSk7CiAg
ICAgfQogCkBAIC0yODQ2LDYgKzI4NTUsNyBAQCBwdWJsaWM6CiAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKHJvdW5kVXBUb011bHRpcGxlT2Y8aW5zdHJ1Y3Rpb25TaXplPih3aGVyZSkgPT0gd2hlcmUp
OwogICAgICAgICBwZXJmb3JtSklUTWVtY3B5KHdoZXJlLCAmaW5zbiwgc2l6ZW9mKGludCkpOwog
CisgICAgICAgIFdURjo6YXRvbWljRXhjaGFuZ2VBZGQoJmdfbnVtYmVyT2ZSZXBhdGNoQ29tcGFj
dHMsIDEpOwogICAgICAgICBjYWNoZUZsdXNoKHdoZXJlLCBzaXplb2YoaW50KSk7CiAgICAgfQog
CkBAIC0yODYwLDYgKzI4NzAsNyBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgdm9pZCBjYWNoZUZs
dXNoKHZvaWQqIGNvZGUsIHNpemVfdCBzaXplKQogICAgIHsKKyAgICAgICAgV1RGOjphdG9taWNF
eGNoYW5nZUFkZCgmZ19udW1iZXJPZkNhY2hlRmx1c2hlcywgMSk7CiAjaWYgT1MoREFSV0lOKQog
ICAgICAgICBzeXNfY2FjaGVfY29udHJvbChrQ2FjaGVGdW5jdGlvblByZXBhcmVGb3JFeGVjdXRp
b24sIGNvZGUsIHNpemUpOwogI2VsaWYgT1MoRlVDSFNJQSkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9hc3NlbWJsZXIvQVJNNjRFQXNzZW1ibGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BUk02NEVBc3NlbWJsZXIuaAkocmV2aXNpb24gMjc2
OTc3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BUk02NEVBc3NlbWJsZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtMzk2LDggKzM5NiwxMCBAQCBwdWJsaWM6CiAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKHJvdW5kVXBUb011bHRpcGxlT2Y8aW5zdHJ1Y3Rpb25TaXplPihhZGRyZXNz
KSA9PSBhZGRyZXNzKTsKICAgICAgICAgcGVyZm9ybUpJVE1lbWNweShhZGRyZXNzLCBidWZmZXIs
IHNpemVvZihpbnQpICogNCk7CiAKLSAgICAgICAgaWYgKGZsdXNoKQorICAgICAgICBpZiAoZmx1
c2gpIHsKKyAgICAgICAgICAgIFdURjo6YXRvbWljRXhjaGFuZ2VBZGQoJmdfbnVtYmVyT2ZTZXRQ
b2ludGVycywgMSk7CiAgICAgICAgICAgICBjYWNoZUZsdXNoKGFkZHJlc3MsIHNpemVvZihpbnQp
ICogNCk7CisgICAgICAgIH0KICAgICB9CiAKICAgICBzdGF0aWMgdm9pZCogcmVhZFBvaW50ZXIo
dm9pZCogd2hlcmUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fic3Ry
YWN0TWFjcm9Bc3NlbWJsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaAkocmV2aXNpb24gMjc2OTc3KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTk3MSw2ICs5NzEsMTIgQEAgcHVibGljOgogICAgICAgICBtX2xp
bmtUYXNrcy5hcHBlbmQoY3JlYXRlU2hhcmVkVGFzazx2b2lkKExpbmtCdWZmZXImKT4oZnVuY3Rv
cikpOwogICAgIH0KIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBh
ZGRMYXRlTGlua1Rhc2soY29uc3QgRnVuY3RvciYgZnVuY3RvcikgLy8gUnVuIGFmdGVyIGFsbCBs
aW5rIHRhc2tzCisgICAgeworICAgICAgICBtX2xhdGVMaW5rVGFza3MuYXBwZW5kKGNyZWF0ZVNo
YXJlZFRhc2s8dm9pZChMaW5rQnVmZmVyJik+KGZ1bmN0b3IpKTsKKyAgICB9CisKICNpZiBDT01Q
SUxFUihHQ0MpCiAgICAgLy8gV29ya2Fyb3VuZCBmb3IgR0NDIGRlbWFuZGluZyB0aGF0IG1lbWNw
eSAibXVzdCBiZSB0aGUgbmFtZSBvZiBhIGZ1bmN0aW9uIHdpdGggZXh0ZXJuYWwgbGlua2FnZSIu
CiAgICAgc3RhdGljIHZvaWQqIG1lbWNweSh2b2lkKiBkc3QsIGNvbnN0IHZvaWQqIHNyYywgc2l6
ZV90IHNpemUpCkBAIC0xMTE0LDYgKzExMjAsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgYm9vbCBtX2Fs
bG93U2NyYXRjaFJlZ2lzdGVyIHsgdHJ1ZSB9OwogCiAgICAgVmVjdG9yPFJlZlB0cjxTaGFyZWRU
YXNrPHZvaWQoTGlua0J1ZmZlciYpPj4+IG1fbGlua1Rhc2tzOworICAgIFZlY3RvcjxSZWZQdHI8
U2hhcmVkVGFzazx2b2lkKExpbmtCdWZmZXImKT4+PiBtX2xhdGVMaW5rVGFza3M7CiAKICAgICBm
cmllbmQgY2xhc3MgTGlua0J1ZmZlcjsKIH07IC8vIGNsYXNzIEFic3RyYWN0TWFjcm9Bc3NlbWJs
ZXIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQXNzZW1ibGVyQ29tbW9u
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fzc2Vt
YmxlckNvbW1vbi5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fz
c2VtYmxlci9Bc3NlbWJsZXJDb21tb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDQg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiQXNzZW1ibGVyQ29tbW9uLmgiCisKK25hbWVzcGFjZSBKU0MgeworCit1aW50NjRfdCBnX251
bWJlck9mQ2FjaGVGbHVzaGVzOwordWludDY0X3QgZ19udW1iZXJPZlJlcGxhY2VXaXRoVk1IYWx0
czsKK3VpbnQ2NF90IGdfbnVtYmVyT2ZSZXBsYWNlV2l0aEp1bXBzOwordWludDY0X3QgZ19udW1i
ZXJPZlJlcGxhY2VXaXRoTG9hZHM7Cit1aW50NjRfdCBnX251bWJlck9mUmVwbGFjZVdpdGhBZGRy
ZXNzQ29tcHV0YXRpb25zOwordWludDY0X3QgZ19udW1iZXJPZlNldFBvaW50ZXJzOwordWludDY0
X3QgZ19udW1iZXJPZlJlcGF0Y2hJbnQzMnM7Cit1aW50NjRfdCBnX251bWJlck9mUmVsaW5rSnVt
cHM7Cit1aW50NjRfdCBnX251bWJlck9mUmVsaW5rQ2FsbHM7Cit1aW50NjRfdCBnX251bWJlck9m
UmVwYXRjaENvbXBhY3RzOwordWludDY0X3QgZ19udW1iZXJPZk5ld0NvZGVGaW5hbGl6YXRpb25z
OwordWludDY0X3QgZ19udW1iZXJPZkluUGxhY2VGaW5hbGl6YXRpb25zOworCit9IC8vIG5hbWVz
cGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9Bc3NlbWJs
ZXJDb21tb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVy
L0Fzc2VtYmxlckNvbW1vbi5oCShyZXZpc2lvbiAyNzY5NzcpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL0Fzc2VtYmxlckNvbW1vbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOTYs
NCArMjk2LDE3IEBAIHByaXZhdGU6CiAgICAgaW50IG1fdmFsdWU7CiB9OwogCitKU19FWFBPUlRf
UFJJVkFURSBleHRlcm4gdWludDY0X3QgZ19udW1iZXJPZkNhY2hlRmx1c2hlczsKK0pTX0VYUE9S
VF9QUklWQVRFIGV4dGVybiB1aW50NjRfdCBnX251bWJlck9mUmVwbGFjZVdpdGhWTUhhbHRzOwor
SlNfRVhQT1JUX1BSSVZBVEUgZXh0ZXJuIHVpbnQ2NF90IGdfbnVtYmVyT2ZSZXBsYWNlV2l0aEp1
bXBzOworSlNfRVhQT1JUX1BSSVZBVEUgZXh0ZXJuIHVpbnQ2NF90IGdfbnVtYmVyT2ZSZXBsYWNl
V2l0aExvYWRzOworSlNfRVhQT1JUX1BSSVZBVEUgZXh0ZXJuIHVpbnQ2NF90IGdfbnVtYmVyT2ZS
ZXBsYWNlV2l0aEFkZHJlc3NDb21wdXRhdGlvbnM7CitKU19FWFBPUlRfUFJJVkFURSBleHRlcm4g
dWludDY0X3QgZ19udW1iZXJPZlNldFBvaW50ZXJzOworSlNfRVhQT1JUX1BSSVZBVEUgZXh0ZXJu
IHVpbnQ2NF90IGdfbnVtYmVyT2ZSZXBhdGNoSW50MzJzOworSlNfRVhQT1JUX1BSSVZBVEUgZXh0
ZXJuIHVpbnQ2NF90IGdfbnVtYmVyT2ZSZWxpbmtKdW1wczsKK0pTX0VYUE9SVF9QUklWQVRFIGV4
dGVybiB1aW50NjRfdCBnX251bWJlck9mUmVsaW5rQ2FsbHM7CitKU19FWFBPUlRfUFJJVkFURSBl
eHRlcm4gdWludDY0X3QgZ19udW1iZXJPZlJlcGF0Y2hDb21wYWN0czsKK0pTX0VYUE9SVF9QUklW
QVRFIGV4dGVybiB1aW50NjRfdCBnX251bWJlck9mTmV3Q29kZUZpbmFsaXphdGlvbnM7CitKU19F
WFBPUlRfUFJJVkFURSBleHRlcm4gdWludDY0X3QgZ19udW1iZXJPZkluUGxhY2VGaW5hbGl6YXRp
b25zOworCiB9IC8vIG5hbWVzcGFjZSBKU0MuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL0xpbmtCdWZmZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5jcHAJKHJldmlzaW9uIDI3Njk3NykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQzMiw2ICs0MzIsNyBAQCB2b2lkIExpbmtCdWZmZXI6OmxpbmtDb2RlKE1hY3JvQXNzZW1i
bGVyCiAjZW5kaWYgLy8gIUVOQUJMRShCUkFOQ0hfQ09NUEFDVElPTikKIAogICAgIG1fbGlua1Rh
c2tzID0gV1RGTW92ZShtYWNyb0Fzc2VtYmxlci5tX2xpbmtUYXNrcyk7CisgICAgbV9sYXRlTGlu
a1Rhc2tzID0gV1RGTW92ZShtYWNyb0Fzc2VtYmxlci5tX2xhdGVMaW5rVGFza3MpOwogfQogCiB2
b2lkIExpbmtCdWZmZXI6OmFsbG9jYXRlKE1hY3JvQXNzZW1ibGVyJiBtYWNyb0Fzc2VtYmxlciwg
SklUQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQpAQCAtNDY0LDYgKzQ2NSw4IEBAIHZvaWQgTGlu
a0J1ZmZlcjo6cGVyZm9ybUZpbmFsaXphdGlvbigpCiB7CiAgICAgZm9yIChhdXRvJiB0YXNrIDog
bV9saW5rVGFza3MpCiAgICAgICAgIHRhc2stPnJ1bigqdGhpcyk7CisgICAgZm9yIChhdXRvJiB0
YXNrIDogbV9sYXRlTGlua1Rhc2tzKQorICAgICAgICB0YXNrLT5ydW4oKnRoaXMpOwogCiAjaWZu
ZGVmIE5ERUJVRwogICAgIEFTU0VSVChtX2lzSnVtcElzbGFuZCB8fCAhaXNDb21waWxhdGlvblRo
cmVhZCgpKTsKQEAgLTQ3MSw2ICs0NzQsMTEgQEAgdm9pZCBMaW5rQnVmZmVyOjpwZXJmb3JtRmlu
YWxpemF0aW9uKCkKICAgICBBU1NFUlQoaXNWYWxpZCgpKTsKICAgICBtX2NvbXBsZXRlZCA9IHRy
dWU7CiAjZW5kaWYKKworICAgIGlmIChtX2V4ZWN1dGFibGVNZW1vcnkpCisgICAgICAgIFdURjo6
YXRvbWljRXhjaGFuZ2VBZGQoJmdfbnVtYmVyT2ZOZXdDb2RlRmluYWxpemF0aW9ucywgMSk7Cisg
ICAgZWxzZQorICAgICAgICBXVEY6OmF0b21pY0V4Y2hhbmdlQWRkKCZnX251bWJlck9mSW5QbGFj
ZUZpbmFsaXphdGlvbnMsIDEpOwogICAgIAogICAgIE1hY3JvQXNzZW1ibGVyOjpjYWNoZUZsdXNo
KGNvZGUoKSwgbV9zaXplKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvTGlua0J1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3Nl
bWJsZXIvTGlua0J1ZmZlci5oCShyZXZpc2lvbiAyNzY5NzcpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzc1LDYgKzM3
NSw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2FscmVhZHlEaXNhc3NlbWJsZWQgeyBmYWxzZSB9
OwogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxMaW5rQnVmZmVyUHRyVGFnPiBtX2NvZGU7CiAg
ICAgVmVjdG9yPFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoTGlua0J1ZmZlciYpPj4+IG1fbGlua1Rh
c2tzOworICAgIFZlY3RvcjxSZWZQdHI8U2hhcmVkVGFzazx2b2lkKExpbmtCdWZmZXImKT4+PiBt
X2xhdGVMaW5rVGFza3M7CiB9OwogCiAjaWYgT1MoTElOVVgpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCShyZXZpc2lvbiAyNzY5NzcpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE1ODAsMTEgKzE1ODAsNiBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlSW1w
bChBY2Nlc3NHZW5lCiAgICAgICAgIC8vIFN0dWZmIGZvciBjdXN0b20gZ2V0dGVycy9zZXR0ZXJz
LgogICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgb3BlcmF0aW9uQ2FsbDsKIAotICAgICAgICAv
LyBTdHVmZiBmb3IgSlMgZ2V0dGVycy9zZXR0ZXJzLgotICAgICAgICBDQ2FsbEhlbHBlcnM6OkRh
dGFMYWJlbFB0ciBhZGRyZXNzT2ZMaW5rRnVuY3Rpb25DaGVjazsKLSAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpDYWxsIGZhc3RQYXRoQ2FsbDsKLSAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIHNsb3dQ
YXRoQ2FsbDsKLQogICAgICAgICAvLyBUaGlzIGFsc28gZG9lcyB0aGUgbmVjZXNzYXJ5IGNhbGN1
bGF0aW9ucyBvZiB3aGV0aGVyIG9yIG5vdCB3ZSdyZSBhbgogICAgICAgICAvLyBleGNlcHRpb24g
aGFuZGxpbmcgY2FsbCBzaXRlLgogICAgICAgICBBY2Nlc3NHZW5lcmF0aW9uU3RhdGU6OlNwaWxs
U3RhdGUgc3BpbGxTdGF0ZSA9IHN0YXRlLnByZXNlcnZlTGl2ZVJlZ2lzdGVyc1RvU3RhY2tGb3JD
YWxsKCk7CkBAIC0xNjA4LDYgKzE2MDMsMTEgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZUlt
cGwoQWNjZXNzR2VuZQogICAgICAgICAgICAgQVNTRVJUKGJhc2VHUFIgIT0gbG9hZGVkVmFsdWVH
UFIpOwogICAgICAgICAgICAgQVNTRVJUKG1fdHlwZSAhPSBTZXR0ZXIgfHwgdmFsdWVSZWdzUGF5
bG9hZEdQUiAhPSBsb2FkZWRWYWx1ZUdQUik7CiAKKyAgICAgICAgICAgIC8vIFN0dWZmIGZvciBK
UyBnZXR0ZXJzL3NldHRlcnMuCisgICAgICAgICAgICAvL0NDYWxsSGVscGVyczo6RGF0YUxhYmVs
UHRyIGFkZHJlc3NPZkxpbmtGdW5jdGlvbkNoZWNrOworICAgICAgICAgICAgLy9DQ2FsbEhlbHBl
cnM6OkNhbGwgc2xvd1BhdGhDYWxsOworCisKICAgICAgICAgICAgIC8vIENyZWF0ZSBhIEpTIGNh
bGwgdXNpbmcgYSBKUyBjYWxsIGlubGluZSBjYWNoZS4gQXNzdW1lIHRoYXQ6CiAgICAgICAgICAg
ICAvLwogICAgICAgICAgICAgLy8gLSBTUCBpcyBhbGlnbmVkIGFuZCByZXByZXNlbnRzIHRoZSBl
eHRlbnQgb2YgdGhlIGNhbGxpbmcgY29tcGlsZXIncyBzdGFjayB1c2FnZS4KQEAgLTE3MDEsMjQg
KzE3MDEsMjMgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZUltcGwoQWNjZXNzR2VuZQogICAg
ICAgICAgICAgICAgICAgICAgICAgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdU
aGlzKDEpLm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSkpOwogICAgICAgICAgICAgfQogCi0g
ICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgc2xvd0Nhc2UgPSBqaXQuYnJhbmNoUHRyV2l0
aFBhdGNoKAotICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Tm90RXF1YWwsIGxvYWRlZFZh
bHVlR1BSLCBhZGRyZXNzT2ZMaW5rRnVuY3Rpb25DaGVjaywKLSAgICAgICAgICAgICAgICBDQ2Fs
bEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobnVsbHB0cikpOworICAgICAgICAgICAgYXV0byBzbG93
Q2FzZSA9IGFjY2Vzcy5jYWxsTGlua0luZm8oKS0+ZW1pdEZhc3RQYXRoKGppdCwgbG9hZGVkVmFs
dWVHUFIsIEdQUkluZm86OnJlZ1QyLCBKSVRDb2RlOjppc09wdGltaXppbmdKSVQoY29kZUJsb2Nr
LT5qaXRUeXBlKCkpID8gQ2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6Ok5vIDogQ2FsbExpbmtJbmZv
OjpVc2VEYXRhSUM6Olllcyk7CisgICAgICAgICAgICBhdXRvIGRvbmVMb2NhdGlvbiA9IGppdC5s
YWJlbCgpOwogCi0gICAgICAgICAgICBmYXN0UGF0aENhbGwgPSBqaXQubmVhckNhbGwoKTsKICAg
ICAgICAgICAgIGlmIChtX3R5cGUgPT0gR2V0dGVyKQogICAgICAgICAgICAgICAgIGppdC5zZXR1
cFJlc3VsdHModmFsdWVSZWdzKTsKICAgICAgICAgICAgIGRvbmUuYXBwZW5kKGppdC5qdW1wKCkp
OwogCiAgICAgICAgICAgICBzbG93Q2FzZS5saW5rKCZqaXQpOworICAgICAgICAgICAgYXV0byBz
bG93UGF0aFN0YXJ0ID0gaml0LmxhYmVsKCk7CiAgICAgICAgICAgICBqaXQubW92ZShsb2FkZWRW
YWx1ZUdQUiwgR1BSSW5mbzo6cmVnVDApOwogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCiAgICAgICAg
ICAgICAvLyBXZSAqYWx3YXlzKiBrbm93IHRoYXQgdGhlIGdldHRlci9zZXR0ZXIsIGlmIG5vbi1u
dWxsLCBpcyBhIGNlbGwuCiAgICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwgR1BSSW5mbzo6cmVnVDEpOwogI2VuZGlmCi0gICAg
ICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoYWNjZXNzLmNhbGxM
aW5rSW5mbygpKSwgR1BSSW5mbzo6cmVnVDIpOwogICAgICAgICAgICAgaml0Lm1vdmUoQ0NhbGxI
ZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGdsb2JhbE9iamVjdCksIEdQUkluZm86OnJlZ1QzKTsKLSAg
ICAgICAgICAgIHNsb3dQYXRoQ2FsbCA9IGppdC5uZWFyQ2FsbCgpOworICAgICAgICAgICAgYWNj
ZXNzLmNhbGxMaW5rSW5mbygpLT5lbWl0U2xvd1BhdGgodm0sIGppdCk7CisgICAgICAgICAgICAv
L3Nsb3dQYXRoQ2FsbCA9IGppdC5uZWFyQ2FsbCgpOwogICAgICAgICAgICAgaWYgKG1fdHlwZSA9
PSBHZXR0ZXIpCiAgICAgICAgICAgICAgICAgaml0LnNldHVwUmVzdWx0cyh2YWx1ZVJlZ3MpOwog
ICAgICAgICAgICAgZG9uZS5hcHBlbmQoaml0Lmp1bXAoKSk7CkBAIC0xNzM1LDE1ICsxNzM0LDE0
IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBsKEFjY2Vzc0dlbmUKICAgICAgICAgICAg
IGJvb2wgY2FsbEhhc1JldHVyblZhbHVlID0gaXNHZXR0ZXIoKTsKICAgICAgICAgICAgIHJlc3Rv
cmVMaXZlUmVnaXN0ZXJzRnJvbVN0YWNrRm9yQ2FsbChzcGlsbFN0YXRlLCBjYWxsSGFzUmV0dXJu
VmFsdWUpOwogCi0gICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soWz0sICZ2bV0gKExpbmtCdWZm
ZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgICAgICAgICB0aGlzLT5hczxHZXR0ZXJTZXR0ZXJB
Y2Nlc3NDYXNlPigpLmNhbGxMaW5rSW5mbygpLT5zZXRDYWxsTG9jYXRpb25zKAotICAgICAgICAg
ICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPihsaW5rQnVmZmVy
LmxvY2F0aW9uT2ZOZWFyQ2FsbDxKU0ludGVybmFsUHRyVGFnPihzbG93UGF0aENhbGwpKSwKLSAg
ICAgICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4obGlu
a0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KGFkZHJlc3NPZkxpbmtGdW5jdGlv
bkNoZWNrKSksCi0gICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJD
YWxsPEpTSW50ZXJuYWxQdHJUYWc+KGZhc3RQYXRoQ2FsbCkpOwotCi0gICAgICAgICAgICAgICAg
bGlua0J1ZmZlci5saW5rKAotICAgICAgICAgICAgICAgICAgICBzbG93UGF0aENhbGwsCi0gICAg
ICAgICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPEpJVFRodW5rUHRyVGFnPih2bS5nZXRD
VElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpLmNvZGUoKSkpOworICAgICAgICAgICAgaml0
LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgeworICAgICAgICAgICAg
ICAgIHRoaXMtPmFzPEdldHRlclNldHRlckFjY2Vzc0Nhc2U+KCkuY2FsbExpbmtJbmZvKCktPnNl
dENvZGVMb2NhdGlvbnMoCisgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25P
ZjxKU0ludGVybmFsUHRyVGFnPihzbG93UGF0aFN0YXJ0KSwKKyAgICAgICAgICAgICAgICAgICAg
bGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KGRvbmVMb2NhdGlvbikpOwor
CisgICAgICAgICAgICAgICAgLy9saW5rQnVmZmVyLmxpbmsoCisgICAgICAgICAgICAgICAgLy8g
ICAgc2xvd1BhdGhDYWxsLAorICAgICAgICAgICAgICAgIC8vICAgIENvZGVMb2NhdGlvbkxhYmVs
PEpJVFRodW5rUHRyVGFnPih2bS5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpLmNv
ZGUoKSkpOwogICAgICAgICAgICAgfSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBB
U1NFUlQobV90eXBlID09IEN1c3RvbVZhbHVlR2V0dGVyIHx8IG1fdHlwZSA9PSBDdXN0b21BY2Nl
c3NvckdldHRlciB8fCBtX3R5cGUgPT0gQ3VzdG9tVmFsdWVTZXR0ZXIgfHwgbV90eXBlID09IEN1
c3RvbUFjY2Vzc29yU2V0dGVyKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9DYWxsTGlua0luZm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9DYWxsTGlua0luZm8uY3BwCShyZXZpc2lvbiAyNzY5NzcpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjYsMTIgKzI2LDE3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiQ2FsbExpbmtJ
bmZvLmgiCiAKKyNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlclByaW50ZXIuaCIKKyNpbmNsdWRlICJD
Q2FsbEhlbHBlcnMuaCIKICNpbmNsdWRlICJDYWxsRnJhbWVTaHVmZmxlRGF0YS5oIgogI2luY2x1
ZGUgIkZ1bmN0aW9uQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiSlNDZWxsSW5saW5lcy5oIgogI2lu
Y2x1ZGUgIk9wY29kZS5oIgorI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKICNpbmNsdWRlICJSZXBh
dGNoLmgiCisjaW5jbHVkZSAiVGh1bmtHZW5lcmF0b3JzLmgiCiAjaW5jbHVkZSA8d3RmL0xpc3RE
dW1wLmg+CisjaW5jbHVkZSAiRGlzYWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlLmgiCiAK
ICNpZiBFTkFCTEUoSklUKQogbmFtZXNwYWNlIEpTQyB7CkBAIC03Nyw2ICs4Miw3IEBAIENhbGxM
aW5rSW5mbzo6Q2FsbExpbmtJbmZvKENvZGVPcmlnaW4gY28KICAgICAsIG1fYWxsb3dTdHVicyh0
cnVlKQogICAgICwgbV9jbGVhcmVkQnlKZXR0aXNvbihmYWxzZSkKICAgICAsIG1fY2FsbFR5cGUo
Tm9uZSkKKyAgICAsIG1fdXNlRGF0YUlDKHN0YXRpY19jYXN0PHVuc2lnbmVkPihVc2VEYXRhSUM6
OlllcykpCiB7CiB9CiAKQEAgLTEwMiw0NyArMTA4LDUxIEBAIHZvaWQgQ2FsbExpbmtJbmZvOjp1
bmxpbmsoVk0mIHZtKQogICAgIC8vIFdlIGNvdWxkIGJlIGNhbGxlZCBldmVuIGlmIHdlJ3JlIG5v
dCBsaW5rZWQgYW55bW9yZSBiZWNhdXNlIG9mIGhvdyBwb2x5bW9ycGhpYyBjYWxscwogICAgIC8v
IHdvcmsuIEVhY2ggY2FsbHNpdGUgd2l0aGluIHRoZSBwb2x5bW9ycGhpYyBjYWxsIHN0dWIgbWF5
IHNlcGFyYXRlbHkgYXNrIHVzIHRvIHVubGluaygpLgogICAgIGlmIChpc0xpbmtlZCgpKQotICAg
ICAgICB1bmxpbmtGb3Iodm0sICp0aGlzKTsKKyAgICAgICAgdW5saW5rQ2FsbCh2bSwgKnRoaXMp
OwogCiAgICAgLy8gRWl0aGVyIHdlIHdlcmUgdW5saW5rZWQsIGluIHdoaWNoIGNhc2Ugd2Ugc2hv
dWxkIG5vdCBoYXZlIGJlZW4gb24gYW55IGxpc3QsIG9yIHdlIHVubGlua2VkCiAgICAgLy8gb3Vy
c2VsdmVzIHNvIHRoYXQgd2UncmUgbm90IG9uIGFueSBsaXN0IGFueW1vcmUuCiAgICAgUkVMRUFT
RV9BU1NFUlQoIWlzT25MaXN0KCkpOwogfQogCi1Db2RlTG9jYXRpb25OZWFyQ2FsbDxKU0ludGVy
bmFsUHRyVGFnPiBDYWxsTGlua0luZm86OmNhbGxSZXR1cm5Mb2NhdGlvbigpCitDb2RlTG9jYXRp
b25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBDYWxsTGlua0luZm86OmZhc3RQYXRoU3RhcnQoKQog
ewotICAgIFJFTEVBU0VfQVNTRVJUKCFpc0RpcmVjdCgpKTsKLSAgICByZXR1cm4gQ29kZUxvY2F0
aW9uTmVhckNhbGw8SlNJbnRlcm5hbFB0clRhZz4obV9jYWxsUmV0dXJuTG9jYXRpb25PclBhdGNo
YWJsZUp1bXAsIE5lYXJDYWxsTW9kZTo6UmVndWxhcik7CisgICAgcmV0dXJuIENvZGVMb2NhdGlv
bkRhdGFMYWJlbFB0cjxKU0ludGVybmFsUHRyVGFnPihtX2Zhc3RQYXRoU3RhcnQpOwogfQogCi1D
b2RlTG9jYXRpb25KdW1wPEpTSW50ZXJuYWxQdHJUYWc+IENhbGxMaW5rSW5mbzo6cGF0Y2hhYmxl
SnVtcCgpCitDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBDYWxsTGlua0luZm86
OnNsb3dQYXRoU3RhcnQoKQogewotICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxUeXBlKCkgPT0gRGly
ZWN0VGFpbENhbGwpOwotICAgIHJldHVybiBDb2RlTG9jYXRpb25KdW1wPEpTSW50ZXJuYWxQdHJU
YWc+KG1fY2FsbFJldHVybkxvY2F0aW9uT3JQYXRjaGFibGVKdW1wKTsKKyAgICBSRUxFQVNFX0FT
U0VSVCghaXNEYXRhSUMoKSk7CisgICAgcmV0dXJuIHUuY29kZUlDLm1fc2xvd1BhdGhTdGFydDsK
IH0KIAotQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyPEpTSW50ZXJuYWxQdHJUYWc+IENhbGxMaW5r
SW5mbzo6aG90UGF0aEJlZ2luKCkKK0NvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+
IENhbGxMaW5rSW5mbzo6ZG9uZUxvY2F0aW9uKCkKIHsKICAgICBSRUxFQVNFX0FTU0VSVCghaXNE
aXJlY3QoKSk7Ci0gICAgcmV0dXJuIENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0cjxKU0ludGVybmFs
UHRyVGFnPihtX2hvdFBhdGhCZWdpbk9yU2xvd1BhdGhTdGFydCk7CisgICAgcmV0dXJuIG1fZG9u
ZUxvY2F0aW9uOwogfQogCi1Db2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBDYWxs
TGlua0luZm86OnNsb3dQYXRoU3RhcnQoKQotewotICAgIFJFTEVBU0VfQVNTRVJUKGlzRGlyZWN0
KCkpOwotICAgIHJldHVybiBtX2hvdFBhdGhCZWdpbk9yU2xvd1BhdGhTdGFydDsKLX0KLQotdm9p
ZCBDYWxsTGlua0luZm86OnNldENhbGxlZShWTSYgdm0sIEpTQ2VsbCogb3duZXIsIEpTT2JqZWN0
KiBjYWxsZWUpCit2b2lkIENhbGxMaW5rSW5mbzo6c2V0TW9ub21vcnBoaWNDYWxsZWUoVk0mIHZt
LCBKU0NlbGwqIG93bmVyLCBKU09iamVjdCogY2FsbGVlLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8
SlNFbnRyeVB0clRhZz4gY29kZVB0cikKIHsKICAgICBSRUxFQVNFX0FTU0VSVCghaXNEaXJlY3Qo
KSk7CiAgICAgbV9jYWxsZWVPckNvZGVCbG9jay5zZXQodm0sIG93bmVyLCBjYWxsZWUpOworCisg
ICAgaWYgKGlzRGF0YUlDKCkpIAorICAgICAgICB1LmRhdGFJQy5tX21vbm9tb3JwaGljQ2FsbERl
c3RpbmF0aW9uID0gY29kZVB0cjsKKyAgICBlbHNlIHsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OnJlcGF0Y2hOZWFyQ2FsbCh1LmNvZGVJQy5tX2NhbGxMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFi
ZWw8SlNFbnRyeVB0clRhZz4oY29kZVB0cikpOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVw
YXRjaFBvaW50ZXIodS5jb2RlSUMubV9jYWxsZWVMb2NhdGlvbiwgY2FsbGVlKTsKKyAgICB9CiB9
CiAKIHZvaWQgQ2FsbExpbmtJbmZvOjpjbGVhckNhbGxlZSgpCiB7CiAgICAgUkVMRUFTRV9BU1NF
UlQoIWlzRGlyZWN0KCkpOwogICAgIG1fY2FsbGVlT3JDb2RlQmxvY2suY2xlYXIoKTsKKyAgICBp
ZiAoaXNEYXRhSUMoKSkKKyAgICAgICAgdS5kYXRhSUMubV9tb25vbW9ycGhpY0NhbGxEZXN0aW5h
dGlvbiA9IG51bGxwdHI7CisgICAgZWxzZQorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRj
aFBvaW50ZXIodS5jb2RlSUMubV9jYWxsZWVMb2NhdGlvbiwgbnVsbHB0cik7CiB9CiAKIEpTT2Jq
ZWN0KiBDYWxsTGlua0luZm86OmNhbGxlZSgpCkBAIC0yODQsNiArMjk0LDIwNiBAQCB2b2lkIENh
bGxMaW5rSW5mbzo6c2V0RnJhbWVTaHVmZmxlRGF0YShjCiAgICAgbV9mcmFtZVNodWZmbGVEYXRh
LT5zaHJpbmtUb0ZpdCgpOwogfQogCit2b2lkIENhbGxMaW5rSW5mbzo6ZW1pdEZpcnN0SW5zdHJ1
Y3Rpb25Gb3JEYXRhSUMoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIp
Cit7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBqaXQuc2NyYXRjaFJlZ2lzdGVyKCk7CisgICAg
RGlzYWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGRpc2FsbG93U2NyYXRjaChqaXQpOwor
ICAgIC8vIFdoZW4gcmVwYXRjaGluZywgd2UganVzdCBvdmVyd3JpdGUgdGhlIGZpcnN0IGluc3Ry
dWN0aW9uIGJhY2ssIHNpbmNlIGl0J2xsIGhhdmUgYmVlbiByZXBsYWNlZCB3aXRoIGEganVtcCB0
byB0aGUgcG9seW1vcnBoaWMgY2FsbCBzdHViLgorICAgIHNpemVfdCBzdGFydFNpemUgPSBqaXQu
bV9hc3NlbWJsZXIuYnVmZmVyKCkuY29kZVNpemUoKTsKKyAgICBqaXQubG9hZFB0cihDQ2FsbEhl
bHBlcnM6OkFkZHJlc3MoY2FsbExpbmtJbmZvR1BSLCBvZmZzZXRPZkNhbGxlZSgpKSwgc2NyYXRj
aEdQUik7IAorICAgIHNpemVfdCBsb2FkU2l6ZSA9IGppdC5tX2Fzc2VtYmxlci5idWZmZXIoKS5j
b2RlU2l6ZSgpIC0gc3RhcnRTaXplOworICAgIGlmIChsb2FkU2l6ZSA8IHN0YXRpY19jYXN0PHNp
emVfdD4oQ0NhbGxIZWxwZXJzOjpwYXRjaGFibGVKdW1wU2l6ZSgpKSkKKyAgICAgICAgaml0LmVt
aXROb3BzKHN0YXRpY19jYXN0PHNpemVfdD4oQ0NhbGxIZWxwZXJzOjpwYXRjaGFibGVKdW1wU2l6
ZSgpKSAtIGxvYWRTaXplKTsKK30KKworTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5r
SW5mbzo6ZW1pdEZhc3RQYXRoSW1wbChDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIGNhbGxlZUdQ
UiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDIHVzZURhdGFJQywgV1RGOjpGdW5j
dGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkKK3sKKyAgICBzZXRVc2VzRGF0YUlDcyh1
c2VEYXRhSUMpOworICAgIGlmIChpc0RhdGFJQygpKSB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJU
KGNhbGxMaW5rSW5mb0dQUiAhPSBDQ2FsbEhlbHBlcnM6OkludmFsaWRHUFJSZWcpOworICAgICAg
ICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIodGhpcyksIGNhbGxMaW5rSW5m
b0dQUik7CisgICAgICAgIHUuZGF0YUlDLm1fY2FsbExpbmtJbmZvR1BSID0gY2FsbExpbmtJbmZv
R1BSOworICAgIH0KKworICAgIGF1dG8gZmFzdFBhdGhTdGFydCA9IGppdC5sYWJlbCgpOworICAg
IGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAg
bV9mYXN0UGF0aFN0YXJ0ID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+
KGZhc3RQYXRoU3RhcnQpOworICAgIH0pOworCisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBz
bG93UGF0aDsKKworICAgIGlmIChpc0RhdGFJQygpKSB7CisgICAgICAgIEdQUlJlZyBzY3JhdGNo
R1BSID0gaml0LnNjcmF0Y2hSZWdpc3RlcigpOworICAgICAgICBlbWl0Rmlyc3RJbnN0cnVjdGlv
bkZvckRhdGFJQyhqaXQsIGNhbGxMaW5rSW5mb0dQUik7CisgICAgICAgIHsKKyAgICAgICAgICAg
IERpc2FsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBkaXNhbGxvd1NjcmF0Y2goaml0KTsK
KyAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChqaXQuYnJhbmNoUHRyKENDYWxsSGVscGVyczo6
Tm90RXF1YWwsIHNjcmF0Y2hHUFIsIGNhbGxlZUdQUikpOworICAgICAgICB9CisgICAgICAgIGlm
IChpc1RhaWxDYWxsKCkpIHsKKyAgICAgICAgICAgIHByZXBhcmVGb3JUYWlsQ2FsbCgpOworICAg
ICAgICAgICAgaml0LmZhckp1bXAoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGNhbGxMaW5rSW5mb0dQ
Uiwgb2Zmc2V0T2ZNb25vbW9ycGhpY0NhbGxEZXN0aW5hdGlvbigpKSwgSlNFbnRyeVB0clRhZyk7
CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgaml0LmNhbGwoQ0NhbGxIZWxwZXJzOjpBZGRy
ZXNzKGNhbGxMaW5rSW5mb0dQUiwgb2Zmc2V0T2ZNb25vbW9ycGhpY0NhbGxEZXN0aW5hdGlvbigp
KSwgSlNFbnRyeVB0clRhZyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpE
YXRhTGFiZWxQdHIgY2FsbGVlQ2hlY2s7CisgICAgICAgIHNsb3dQYXRoLmFwcGVuZChqaXQuYnJh
bmNoUHRyV2l0aFBhdGNoKENDYWxsSGVscGVyczo6Tm90RXF1YWwsIGNhbGxlZUdQUiwgY2FsbGVl
Q2hlY2ssIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihudWxscHRyKSkpOworCisgICAgICAg
IENDYWxsSGVscGVyczo6Q2FsbCBjYWxsOworICAgICAgICBpZiAoaXNUYWlsQ2FsbCgpKSB7Cisg
ICAgICAgICAgICBwcmVwYXJlRm9yVGFpbENhbGwoKTsKKyAgICAgICAgICAgIGNhbGwgPSBqaXQu
bmVhclRhaWxDYWxsKCk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgY2FsbCA9IGppdC5u
ZWFyQ2FsbCgpOworICAgICAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5r
QnVmZmVyKSB7CisgICAgICAgICAgICB1LmNvZGVJQy5tX2NhbGxMb2NhdGlvbiA9IGxpbmtCdWZm
ZXIubG9jYXRpb25PZk5lYXJDYWxsPEpTSW50ZXJuYWxQdHJUYWc+KGNhbGwpOworICAgICAgICAg
ICAgdS5jb2RlSUMubV9jYWxsZWVMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0lu
dGVybmFsUHRyVGFnPihjYWxsZWVDaGVjayk7CisgICAgICAgIH0pOworICAgIH0KKworICAgIHJl
dHVybiBzbG93UGF0aDsKK30KKworQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBDYWxsTGlua0luZm86
OmVtaXRGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVn
IGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDIHVzZURhdGFJQykKK3sKKyAgICBSRUxFQVNFX0FT
U0VSVCghaXNUYWlsQ2FsbCgpKTsKKyAgICByZXR1cm4gZW1pdEZhc3RQYXRoSW1wbChqaXQsIGNh
bGxlZUdQUiwgY2FsbExpbmtJbmZvR1BSLCB1c2VEYXRhSUMsIG51bGxwdHIpOworfQorCitNYWNy
b0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2FsbExpbmtJbmZvOjplbWl0VGFpbENhbGxGYXN0UGF0aChD
Q2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQ
UiwgVXNlRGF0YUlDIHVzZURhdGFJQywgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JU
YWlsQ2FsbCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChpc1RhaWxDYWxsKCkpOworICAgIHJldHVy
biBlbWl0RmFzdFBhdGhJbXBsKGppdCwgY2FsbGVlR1BSLCBjYWxsTGlua0luZm9HUFIsIHVzZURh
dGFJQywgV1RGTW92ZShwcmVwYXJlRm9yVGFpbENhbGwpKTsKK30KKwordm9pZCBDYWxsTGlua0lu
Zm86OmVtaXRTbG93UGF0aChWTSYgdm0sIENDYWxsSGVscGVycyYgaml0KQoreworICAgIHNldFNs
b3dQYXRoQ2FsbERlc3RpbmF0aW9uKHZtLmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRv
cikudGVtcGxhdGUgcmV0YWdnZWRDb2RlPEpTRW50cnlQdHJUYWc+KCkpOworICAgIGppdC5tb3Zl
KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cih0aGlzKSwgR1BSSW5mbzo6cmVnVDIpOworICAg
IGppdC5jYWxsKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMiwgb2Zmc2V0T2ZT
bG93UGF0aENhbGxEZXN0aW5hdGlvbigpKSwgSlNFbnRyeVB0clRhZyk7Cit9CisKK3ZvaWQgQ2Fs
bExpbmtJbmZvOjplbWl0RGlyZWN0RmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiBqaXQpCit7CisgICAg
UkVMRUFTRV9BU1NFUlQoIWlzVGFpbENhbGwoKSk7CisKKyAgICBzZXRVc2VzRGF0YUlDcyhVc2VE
YXRhSUM6Ok5vKTsKKworICAgIGF1dG8gZmFzdFBhdGhTdGFydCA9IGppdC5sYWJlbCgpOworICAg
IGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAg
bV9mYXN0UGF0aFN0YXJ0ID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+
KGZhc3RQYXRoU3RhcnQpOworICAgIH0pOworCisgICAgYXV0byBjYWxsID0gaml0Lm5lYXJDYWxs
KCk7CisgICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewor
ICAgICAgICB1LmNvZGVJQy5tX2NhbGxMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZk5l
YXJDYWxsPEpTSW50ZXJuYWxQdHJUYWc+KGNhbGwpOworICAgIH0pOworICAgIGppdC5hZGRMYXRl
TGlua1Rhc2soW3RoaXNdIChMaW5rQnVmZmVyJikgeworICAgICAgICBpbml0aWFsaXplRGlyZWN0
Q2FsbCgpOworICAgIH0pOworfQorCit2b2lkIENhbGxMaW5rSW5mbzo6ZW1pdERpcmVjdFRhaWxD
YWxsRmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiBqaXQsIFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVw
YXJlRm9yVGFpbENhbGwpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoaXNUYWlsQ2FsbCgpKTsKKwor
ICAgIHNldFVzZXNEYXRhSUNzKFVzZURhdGFJQzo6Tm8pOworCisgICAgYXV0byBmYXN0UGF0aFN0
YXJ0ID0gaml0LmxhYmVsKCk7CisgICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYg
bGlua0J1ZmZlcikgeworICAgICAgICBtX2Zhc3RQYXRoU3RhcnQgPSBsaW5rQnVmZmVyLmxvY2F0
aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oZmFzdFBhdGhTdGFydCk7CisgICAgfSk7CisKKyAgICAv
LyAtIElmIHdlJ3JlIG5vdCB5ZXQgbGlua2VkLCB0aGlzIGlzIGEganVtcCB0byB0aGUgc2xvdyBw
YXRoLgorICAgIC8vIC0gT25jZSB3ZSdyZSBsaW5rZWQgdG8gYSBmYXN0IHBhdGgsIHRoaXMgZ29l
cyBiYWNrIHRvIGJlaW5nIG5vcHMgc28gd2UgZmFsbCB0aHJvdWdoIHRvIHRoZSBsaW5rZWQganVt
cC4KKyAgICBqaXQuZW1pdE5vcHMoQ0NhbGxIZWxwZXJzOjpwYXRjaGFibGVKdW1wU2l6ZSgpKTsK
KworICAgIHByZXBhcmVGb3JUYWlsQ2FsbCgpOworICAgIGF1dG8gY2FsbCA9IGppdC5uZWFyVGFp
bENhbGwoKTsKKyAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVy
KSB7CisgICAgICAgIHUuY29kZUlDLm1fY2FsbExvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlv
bk9mTmVhckNhbGw8SlNJbnRlcm5hbFB0clRhZz4oY2FsbCk7CisgICAgfSk7CisgICAgaml0LmFk
ZExhdGVMaW5rVGFzayhbdGhpc10gKExpbmtCdWZmZXImKSB7CisgICAgICAgIGluaXRpYWxpemVE
aXJlY3RDYWxsKCk7CisgICAgfSk7Cit9CisKK3ZvaWQgQ2FsbExpbmtJbmZvOjppbml0aWFsaXpl
RGlyZWN0Q2FsbCgpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoaXNEaXJlY3QoKSk7CisgICAgQVNT
RVJUKHUuY29kZUlDLm1fY2FsbExvY2F0aW9uKTsKKyAgICBpZiAoaXNUYWlsQ2FsbCgpKSB7Cisg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKGZhc3RQYXRoU3RhcnQoKSk7CisgICAgICAgIENDYWxsSGVs
cGVyczo6ZW1pdEpJVENvZGVPdmVyKGZhc3RQYXRoU3RhcnQoKSwgWyZdIChDQ2FsbEhlbHBlcnMm
IGppdCkgeworICAgICAgICAgICAgYXV0byBqdW1wID0gaml0Lmp1bXAoKTsKKyAgICAgICAgICAg
IGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAg
ICAgICAgICBsaW5rQnVmZmVyLmxpbmsoanVtcCwgc2xvd1BhdGhTdGFydCgpKTsKKyAgICAgICAg
ICAgIH0pOworICAgICAgICB9LCAiaW5pdGlhbGl6ZSBkaXJlY3QgY2FsbCIpOworICAgIH0gZWxz
ZQorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaE5lYXJDYWxsKHUuY29kZUlDLm1fY2Fs
bExvY2F0aW9uLCBzbG93UGF0aFN0YXJ0KCkpOworfQorCit2b2lkIENhbGxMaW5rSW5mbzo6c2V0
RGlyZWN0Q2FsbFRhcmdldChDb2RlTG9jYXRpb25MYWJlbDxKU0VudHJ5UHRyVGFnPiB0YXJnZXQp
Cit7CisgICAgUkVMRUFTRV9BU1NFUlQoaXNEaXJlY3QoKSk7CisKKyAgICBpZiAoaXNUYWlsQ2Fs
bCgpKSB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGZhc3RQYXRoU3RhcnQoKSk7CisgICAgICAg
IENDYWxsSGVscGVyczo6ZW1pdEpJVENvZGVPdmVyKGZhc3RQYXRoU3RhcnQoKSwgWyZdIChDQ2Fs
bEhlbHBlcnMmIGppdCkgeworICAgICAgICAgICAgLy8gV2UgcmVzZXJ2ZWQgdGhpcyBtYW55IGJ5
dGVzIGZvciB0aGUganVtcCBhdCBmYXN0UGF0aFN0YXJ0KCkuIE1ha2UgdGhhdAorICAgICAgICAg
ICAgLy8gY29kZSBub3BzIG5vdyBzbyB3ZSBmYWxsIHRocm91Z2ggdG8gdGhlIGp1bXAgdG8gdGhl
IGZhc3QgcGF0aC4KKyAgICAgICAgICAgIGppdC5lbWl0Tm9wcyhDQ2FsbEhlbHBlcnM6OnBhdGNo
YWJsZUp1bXBTaXplKCkpOyAKKyAgICAgICAgfSwgIlNldHRpbmcgZGlyZWN0IGNhbGwgdGFyZ2V0
Iik7CisgICAgfQorCisgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hOZWFyQ2FsbCh1LmNvZGVJ
Qy5tX2NhbGxMb2NhdGlvbiwgdGFyZ2V0KTsKK30KKwordm9pZCBDYWxsTGlua0luZm86OnNldFNs
b3dQYXRoQ2FsbERlc3RpbmF0aW9uKE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFn
PiBjb2RlUHRyKQoreworICAgIG1fc2xvd1BhdGhDYWxsRGVzdGluYXRpb24gPSBjb2RlUHRyOwor
fQorCit2b2lkIENhbGxMaW5rSW5mbzo6cmV2ZXJ0Q2FsbFRvU3R1YigpCit7CisgICAgUkVMRUFT
RV9BU1NFUlQoc3R1YigpKTsKKyAgICAvLyBUaGUgc3RhcnQgb2Ygb3VyIEpJVCBjb2RlIGlzIG5v
dyBhIGp1bXAgdG8gdGhlIHBvbHltb3JwaGljIHN0dWIuIFJld3JpdGUgdGhlIGZpcnN0IGluc3Ry
dWN0aW9uCisgICAgLy8gdG8gYmUgd2hhdCB3ZSBuZWVkIGZvciBub24gc3R1YiBJQ3MuCisKKyAg
ICAvLyB0aGlzIHJ1bnMgaW50byBzb21lIGJyYW5jaCBjb21wYWN0aW9uIGNyYXAgSSdkIGxpa2Ug
dG8gYXZvaWQgZm9yIG5vdy4gRXNzZW50aWFsbHksIHRoZSBicmFuY2gKKyAgICAvLyBkb2Vzbid0
IGtub3cgaWYgaXQgY2FuIGJlIGNvbXBhY3RlZCBvciBub3QuIFNvIHdlIGVuZCB1cCB3aXRoIDI4
IGJ5dGVzIG9mIG1hY2hpbmUgY29kZSwgZm9yCisgICAgLy8gd2hhdCBpbiBhbGwgbGlrZWxpaG9v
ZCBmaXRzIGluIDI0LiBTbyB3ZSBqdXN0IHNwbGF0IG91dCB0aGUgZmlyc3QgaW5zdHJ1Y3Rpb24u
IExvbmcgdGVybSwgd2UKKyAgICAvLyBuZWVkIHNvbWV0aGluZyBjbGVhbmVyLiBCdXQgdGhpcyB3
b3JrcyBvbiBhcm02NCBmb3Igbm93LgorCisgICAgQ0NhbGxIZWxwZXJzOjplbWl0SklUQ29kZU92
ZXIoZmFzdFBhdGhTdGFydCgpLCBbJl0gKENDYWxsSGVscGVycyYgaml0KSB7CisgICAgICAgIGlm
IChpc0RhdGFJQygpKQorICAgICAgICAgICAgZW1pdEZpcnN0SW5zdHJ1Y3Rpb25Gb3JEYXRhSUMo
aml0LCB1LmRhdGFJQy5tX2NhbGxMaW5rSW5mb0dQUik7CisgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpyZXZlcnRKdW1wUmVwbGFjZW1lbnRUb0JyYW5jaFB0cldpdGhQ
YXRjaCgKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OnN0YXJ0T2ZCcmFuY2hQdHJXaXRo
UGF0Y2hPblJlZ2lzdGVyKHUuY29kZUlDLm1fY2FsbGVlTG9jYXRpb24pLCBjYWxsZWVHUFIoKSwg
bnVsbHB0cik7CisgICAgICAgIH0KKyAgICB9LCAgIlJlc2V0dGluZyBQb2x5bW9ycGhpY0NhbGwg
c3R1YmJlZCBDYWxsTGlua0luZm8iKTsKK30KKwordm9pZCBDYWxsTGlua0luZm86OnNldFN0dWIo
UmVmPFBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lPiYmIG5ld1N0dWIpCit7CisgICAgY2xlYXJT
dHViKCk7CisgICAgbV9zdHViID0gV1RGTW92ZShuZXdTdHViKTsKKworICAgIGlmIChpc0RhdGFJ
QygpKSB7CisgICAgICAgIENDYWxsSGVscGVyczo6ZW1pdEpJVENvZGVPdmVyKGZhc3RQYXRoU3Rh
cnQoKSwgWyZdIChDQ2FsbEhlbHBlcnMmIGppdCkgeworICAgICAgICAgICAgYXV0byBqdW1wID0g
aml0Lmp1bXAoKTsKKyAgICAgICAgICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXIm
IGxpbmtCdWZmZXIpIHsKKyAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoanVtcCwgQ29k
ZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+KG1fc3R1Yi0+Y29kZSgpLmNvZGUo
KSkpOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0sICJQYXRjaGluZyBjYWxsIHRvIFBvbHlt
b3JwaGljQ2FsbFN0dWJSb3V0aW5lIGluIENhbGxMaW5rSW5mbyIpOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBsYWNlV2l0aEp1bXAoCisgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6c3RhcnRPZkJyYW5jaFB0cldpdGhQYXRjaE9uUmVnaXN0ZXIodS5jb2RlSUMu
bV9jYWxsZWVMb2NhdGlvbiksCisgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHVi
Um91dGluZVB0clRhZz4obV9zdHViLT5jb2RlKCkuY29kZSgpKSk7CisgICAgfQorfQorCiB9IC8v
IG5hbWVzcGFjZSBKU0MKICNlbmRpZiAvLyBFTkFCTEUoSklUKQogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5oCShyZXZpc2lvbiAyNzY5Nzcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmgJKHdvcmtp
bmcgY29weSkKQEAgLTMwLDEyICszMCwxNCBAQAogI2luY2x1ZGUgIkNvZGVTcGVjaWFsaXphdGlv
bktpbmQuaCIKICNpbmNsdWRlICJQb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZS5oIgogI2luY2x1
ZGUgIldyaXRlQmFycmllci5oIgorI2luY2x1ZGUgPHd0Zi9GdW5jdGlvbi5oPgogI2luY2x1ZGUg
PHd0Zi9TZW50aW5lbExpbmtlZExpc3QuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKICNpZiBFTkFC
TEUoSklUKQogCitjbGFzcyBDQ2FsbEhlbHBlcnM7CiBjbGFzcyBGdW5jdGlvbkNvZGVCbG9jazsK
IGNsYXNzIEpTRnVuY3Rpb247CiBlbnVtIE9wY29kZUlEIDogdW5zaWduZWQ7CkBAIC0xNjMsMTYg
KzE2NSwzOCBAQCBwdWJsaWM6CiAgICAgICAgIG1fY2FsbGVlR1BSID0gY2FsbGVlR1BSOwogICAg
IH0KIAotICAgIHZvaWQgc2V0Q2FsbExvY2F0aW9ucygKLSAgICAgICAgQ29kZUxvY2F0aW9uTGFi
ZWw8SlNJbnRlcm5hbFB0clRhZz4gY2FsbFJldHVybkxvY2F0aW9uT3JQYXRjaGFibGVKdW1wLAot
ICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBob3RQYXRoQmVnaW5P
clNsb3dQYXRoU3RhcnQsCi0gICAgICAgIENvZGVMb2NhdGlvbk5lYXJDYWxsPEpTSW50ZXJuYWxQ
dHJUYWc+IGhvdFBhdGhPdGhlcikKLSAgICB7Ci0gICAgICAgIG1fY2FsbFJldHVybkxvY2F0aW9u
T3JQYXRjaGFibGVKdW1wID0gY2FsbFJldHVybkxvY2F0aW9uT3JQYXRjaGFibGVKdW1wOwotICAg
ICAgICBtX2hvdFBhdGhCZWdpbk9yU2xvd1BhdGhTdGFydCA9IGhvdFBhdGhCZWdpbk9yU2xvd1Bh
dGhTdGFydDsKLSAgICAgICAgbV9ob3RQYXRoT3RoZXIgPSBob3RQYXRoT3RoZXI7CisgICAgR1BS
UmVnIGNhbGxlZUdQUigpIGNvbnN0IHsgcmV0dXJuIG1fY2FsbGVlR1BSOyB9CisgICAgCisgICAg
ZW51bSBjbGFzcyBVc2VEYXRhSUMgOiB1aW50OF90IHsKKyAgICAgICAgWWVzLAorICAgICAgICBO
bworICAgIH07CisKK3ByaXZhdGU6CisgICAgdm9pZCBlbWl0Rmlyc3RJbnN0cnVjdGlvbkZvckRh
dGFJQyhDQ2FsbEhlbHBlcnMmLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSKTsKKyAgICBNYWNyb0Fz
c2VtYmxlcjo6SnVtcExpc3QgZW1pdEZhc3RQYXRoSW1wbChDQ2FsbEhlbHBlcnMmLCBHUFJSZWcg
Y2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUMsIFdURjo6RnVuY3Rp
b248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpIFdBUk5fVU5VU0VEX1JFVFVSTjsKK3B1Ymxp
YzoKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdEZhc3RQYXRoKENDYWxsSGVscGVy
cyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQykg
V0FSTl9VTlVTRURfUkVUVVJOOworICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBlbWl0VGFp
bENhbGxGYXN0UGF0aChDQ2FsbEhlbHBlcnMmLCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2Fs
bExpbmtJbmZvR1BSLCBVc2VEYXRhSUMsIFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVwYXJlRm9y
VGFpbENhbGwpIFdBUk5fVU5VU0VEX1JFVFVSTjsKKyAgICB2b2lkIGVtaXREaXJlY3RGYXN0UGF0
aChDQ2FsbEhlbHBlcnMmKTsKKyAgICB2b2lkIGVtaXREaXJlY3RUYWlsQ2FsbEZhc3RQYXRoKEND
YWxsSGVscGVycyYsIFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpOwor
ICAgIHZvaWQgZW1pdFNsb3dQYXRoKFZNJiwgQ0NhbGxIZWxwZXJzJik7CisgICAgdm9pZCByZXZl
cnRDYWxsVG9TdHViKCk7CisKKyAgICBib29sIGlzRGF0YUlDKCkgY29uc3QgeyByZXR1cm4gc3Rh
dGljX2Nhc3Q8VXNlRGF0YUlDPihtX3VzZURhdGFJQykgPT0gVXNlRGF0YUlDOjpZZXM7IH0KKyAg
ICB2b2lkIHNldFVzZXNEYXRhSUNzKFVzZURhdGFJQyB1c2VEYXRhSUMpIHsgbV91c2VEYXRhSUMg
PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4odXNlRGF0YUlDKTsgfQorCisgICAgdm9pZCBzZXRDb2Rl
TG9jYXRpb25zKAorICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBz
bG93UGF0aFN0YXJ0LAorICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFn
PiBkb25lTG9jYXRpb24pCisgICAgeworICAgICAgICBpZiAoIWlzRGF0YUlDKCkpCisgICAgICAg
ICAgICB1LmNvZGVJQy5tX3Nsb3dQYXRoU3RhcnQgPSBzbG93UGF0aFN0YXJ0OworICAgICAgICBt
X2RvbmVMb2NhdGlvbiA9IGRvbmVMb2NhdGlvbjsKICAgICB9CiAKKyAgICB2b2lkIGluaXRpYWxp
emVEaXJlY3RDYWxsKCk7CisKICAgICBib29sIGFsbG93U3R1YnMoKSBjb25zdCB7IHJldHVybiBt
X2FsbG93U3R1YnM7IH0KIAogICAgIHZvaWQgZGlzYWxsb3dTdHVicygpCkBAIC0xODAsMjMgKzIw
NCwxOSBAQCBwdWJsaWM6CiAgICAgICAgIG1fYWxsb3dTdHVicyA9IGZhbHNlOwogICAgIH0KIAot
ICAgIENvZGVMb2NhdGlvbk5lYXJDYWxsPEpTSW50ZXJuYWxQdHJUYWc+IGNhbGxSZXR1cm5Mb2Nh
dGlvbigpOwotICAgIENvZGVMb2NhdGlvbkp1bXA8SlNJbnRlcm5hbFB0clRhZz4gcGF0Y2hhYmxl
SnVtcCgpOwotICAgIENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0cjxKU0ludGVybmFsUHRyVGFnPiBo
b3RQYXRoQmVnaW4oKTsKKyAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBm
YXN0UGF0aFN0YXJ0KCk7CiAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4g
c2xvd1BhdGhTdGFydCgpOworICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+
IGRvbmVMb2NhdGlvbigpOwogCi0gICAgQ29kZUxvY2F0aW9uTmVhckNhbGw8SlNJbnRlcm5hbFB0
clRhZz4gaG90UGF0aE90aGVyKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2hvdFBhdGhPdGhl
cjsKLSAgICB9Ci0KLSAgICB2b2lkIHNldENhbGxlZShWTSYsIEpTQ2VsbCosIEpTT2JqZWN0KiBj
YWxsZWUpOworICAgIHZvaWQgc2V0TW9ub21vcnBoaWNDYWxsZWUoVk0mLCBKU0NlbGwqLCBKU09i
amVjdCogY2FsbGVlLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4pOworICAg
IHZvaWQgc2V0U2xvd1BhdGhDYWxsRGVzdGluYXRpb24oTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpT
RW50cnlQdHJUYWc+KTsKICAgICB2b2lkIGNsZWFyQ2FsbGVlKCk7CiAgICAgSlNPYmplY3QqIGNh
bGxlZSgpOwogCiAgICAgdm9pZCBzZXRDb2RlQmxvY2soVk0mLCBKU0NlbGwqLCBGdW5jdGlvbkNv
ZGVCbG9jayopOwogICAgIHZvaWQgY2xlYXJDb2RlQmxvY2soKTsKICAgICBGdW5jdGlvbkNvZGVC
bG9jayogY29kZUJsb2NrKCk7CisgICAgdm9pZCBzZXREaXJlY3RDYWxsVGFyZ2V0KENvZGVMb2Nh
dGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+KTsKIAogICAgIHZvaWQgc2V0TGFzdFNlZW5DYWxsZWUo
Vk0mLCBjb25zdCBKU0NlbGwqIG93bmVyLCBKU09iamVjdCogY2FsbGVlKTsKICAgICB2b2lkIGNs
ZWFyTGFzdFNlZW5DYWxsZWUoKTsKQEAgLTIwNiwxMiArMjI2LDcgQEAgcHVibGljOgogICAgIHZv
aWQgc2V0RXhlY3V0YWJsZUR1cmluZ0NvbXBpbGF0aW9uKEV4ZWN1dGFibGVCYXNlKik7CiAgICAg
RXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFibGUoKTsKICAgICAKLSAgICB2b2lkIHNldFN0dWIoUmVm
PFBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lPiYmIG5ld1N0dWIpCi0gICAgewotICAgICAgICBj
bGVhclN0dWIoKTsKLSAgICAgICAgbV9zdHViID0gV1RGTW92ZShuZXdTdHViKTsKLSAgICB9Ci0K
KyAgICB2b2lkIHNldFN0dWIoUmVmPFBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lPiYmKTsKICAg
ICB2b2lkIGNsZWFyU3R1YigpOwogCiAgICAgUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUqIHN0
dWIoKSBjb25zdApAQCAtMzExLDYgKzMyNiwyMSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBP
QkpFQ1RfT0ZGU0VUT0YoQ2FsbExpbmtJbmZvLCBtX3Nsb3dQYXRoQ291bnQpOwogICAgIH0KIAor
ICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZDYWxsZWUoKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIE9CSkVDVF9PRkZTRVRPRihDYWxsTGlua0luZm8sIG1fY2FsbGVlT3JDb2RlQmxvY2spOwor
ICAgIH0KKworICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZNb25vbW9ycGhpY0NhbGxEZXN0
aW5hdGlvbigpCisgICAgeworICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENhbGxMaW5r
SW5mbywgdSkgKyBPQkpFQ1RfT0ZGU0VUT0YoVW5pb25UeXBlLCBkYXRhSUMubV9tb25vbW9ycGhp
Y0NhbGxEZXN0aW5hdGlvbik7CisgICAgfQorCisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRP
ZlNsb3dQYXRoQ2FsbERlc3RpbmF0aW9uKCkKKyAgICB7CisgICAgICAgIHJldHVybiBPQkpFQ1Rf
T0ZGU0VUT0YoQ2FsbExpbmtJbmZvLCBtX3Nsb3dQYXRoQ2FsbERlc3RpbmF0aW9uKTsKKyAgICB9
CisKICAgICBHUFJSZWcgY2FsbGVlR1BSKCkKICAgICB7CiAgICAgICAgIHJldHVybiBtX2NhbGxl
ZUdQUjsKQEAgLTM1MiwxMCArMzgyLDI1IEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6Ci0g
ICAgdWludDMyX3QgbV9tYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyB7IDAgfTsgLy8gRm9y
IHZhcmFyZ3M6IHRoZSBwcm9maWxlZCBtYXhpbXVtIG51bWJlciBvZiBhcmd1bWVudHMuIEZvciBk
aXJlY3Q6IHRoZSBudW1iZXIgb2Ygc3RhY2sgc2xvdHMgYWxsb2NhdGVkIGZvciBhcmd1bWVudHMu
Ci0gICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gbV9jYWxsUmV0dXJuTG9j
YXRpb25PclBhdGNoYWJsZUp1bXA7Ci0gICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0
clRhZz4gbV9ob3RQYXRoQmVnaW5PclNsb3dQYXRoU3RhcnQ7Ci0gICAgQ29kZUxvY2F0aW9uTmVh
ckNhbGw8SlNJbnRlcm5hbFB0clRhZz4gbV9ob3RQYXRoT3RoZXI7CisgICAgQ29kZUxvY2F0aW9u
TGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gbV9mYXN0UGF0aFN0YXJ0OworICAgIENvZGVMb2NhdGlv
bkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IG1fZG9uZUxvY2F0aW9uOworICAgIE1hY3JvQXNzZW1i
bGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBtX3Nsb3dQYXRoQ2FsbERlc3RpbmF0aW9uOworICAg
IHVuaW9uIFVuaW9uVHlwZSB7CisgICAgICAgIFVuaW9uVHlwZSgpIAorICAgICAgICAgICAgOiBk
YXRhSUMgeyBudWxscHRyLCBJbnZhbGlkR1BSUmVnIH0KKyAgICAgICAgeyB9CisgICAgICAgIHN0
cnVjdCBEYXRhSUMgeworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQ
dHJUYWc+IG1fbW9ub21vcnBoaWNDYWxsRGVzdGluYXRpb247CisgICAgICAgICAgICBHUFJSZWcg
bV9jYWxsTGlua0luZm9HUFI7CisgICAgICAgIH0gZGF0YUlDOworCisgICAgICAgIHN0cnVjdCB7
CisgICAgICAgICAgICBDb2RlTG9jYXRpb25OZWFyQ2FsbDxKU0ludGVybmFsUHRyVGFnPiBtX2Nh
bGxMb2NhdGlvbjsKKyAgICAgICAgICAgIENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0cjxKU0ludGVy
bmFsUHRyVGFnPiBtX2NhbGxlZUxvY2F0aW9uOworICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFi
ZWw8SlNJbnRlcm5hbFB0clRhZz4gbV9zbG93UGF0aFN0YXJ0OworICAgICAgICB9IGNvZGVJQzsK
KyAgICB9IHU7CisKICAgICBXcml0ZUJhcnJpZXI8SlNDZWxsPiBtX2NhbGxlZU9yQ29kZUJsb2Nr
OwogICAgIFdyaXRlQmFycmllcjxKU0NlbGw+IG1fbGFzdFNlZW5DYWxsZWVPckV4ZWN1dGFibGU7
CiAgICAgUmVmUHRyPFBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lPiBtX3N0dWI7CkBAIC0zNjks
OCArNDE0LDEwIEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2FsbG93U3R1YnMgOiAxOwogICAgIGJv
b2wgbV9jbGVhcmVkQnlKZXR0aXNvbiA6IDE7CiAgICAgdW5zaWduZWQgbV9jYWxsVHlwZSA6IDQ7
IC8vIENhbGxUeXBlCisgICAgdW5zaWduZWQgbV91c2VEYXRhSUMgOiAxOyAvLyBVc2VEYXRhSUMK
ICAgICBHUFJSZWcgbV9jYWxsZWVHUFIgeyBJbnZhbGlkR1BSUmVnIH07CiAgICAgdWludDMyX3Qg
bV9zbG93UGF0aENvdW50IHsgMCB9OworICAgIHVpbnQzMl90IG1fbWF4QXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMgeyAwIH07IC8vIEZvciB2YXJhcmdzOiB0aGUgcHJvZmlsZWQgbWF4aW11bSBu
dW1iZXIgb2YgYXJndW1lbnRzLiBGb3IgZGlyZWN0OiB0aGUgbnVtYmVyIG9mIHN0YWNrIHNsb3Rz
IGFsbG9jYXRlZCBmb3IgYXJndW1lbnRzLgogfTsKIAogaW5saW5lIENvZGVPcmlnaW4gZ2V0Q2Fs
bExpbmtJbmZvQ29kZU9yaWdpbihDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbykKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCShyZXZpc2lvbiAy
NzY5NzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjU1LDMxICsyNTUsMTggQEAgdm9pZCBKSVRDb21waWxlcjo6bGlu
ayhMaW5rQnVmZmVyJiBsaW5rQgogICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1faW5zdGFuY2VP
ZnMsIGxpbmtCdWZmZXIpOwogICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1fcHJpdmF0ZUJyYW5k
QWNjZXNzZXMsIGxpbmtCdWZmZXIpOwogCi0gICAgYXV0byBsaW5rQ2FsbFRodW5rID0gRnVuY3Rp
b25QdHI8Tm9QdHJUYWc+KHZtKCkuZ2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5y
ZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogICAgIGZvciAoYXV0byYgcmVjb3JkIDogbV9qc0Nh
bGxzKSB7CiAgICAgICAgIENhbGxMaW5rSW5mbyYgaW5mbyA9ICpyZWNvcmQuaW5mbzsKLSAgICAg
ICAgbGlua0J1ZmZlci5saW5rKHJlY29yZC5zbG93Q2FsbCwgbGlua0NhbGxUaHVuayk7Ci0gICAg
ICAgIGluZm8uc2V0Q2FsbExvY2F0aW9ucygKLSAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVs
PEpTSW50ZXJuYWxQdHJUYWc+KGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPEpTSW50ZXJu
YWxQdHJUYWc+KHJlY29yZC5zbG93Q2FsbCkpLAotICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFi
ZWw8SlNJbnRlcm5hbFB0clRhZz4obGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJU
YWc+KHJlY29yZC50YXJnZXRUb0NoZWNrKSksCi0gICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0
aW9uT2ZOZWFyQ2FsbDxKU0ludGVybmFsUHRyVGFnPihyZWNvcmQuZmFzdENhbGwpKTsKKyAgICAg
ICAgaW5mby5zZXRDb2RlTG9jYXRpb25zKAorICAgICAgICAgICAgbGlua0J1ZmZlci5sb2NhdGlv
bk9mPEpTSW50ZXJuYWxQdHJUYWc+KHJlY29yZC5zbG93UGF0aFN0YXJ0KSwKKyAgICAgICAgICAg
IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihyZWNvcmQuZG9uZUxvY2F0
aW9uKSk7CiAgICAgfQogICAgIAogICAgIGZvciAoSlNEaXJlY3RDYWxsUmVjb3JkJiByZWNvcmQg
OiBtX2pzRGlyZWN0Q2FsbHMpIHsKICAgICAgICAgQ2FsbExpbmtJbmZvJiBpbmZvID0gKnJlY29y
ZC5pbmZvOwotICAgICAgICBsaW5rQnVmZmVyLmxpbmsocmVjb3JkLmNhbGwsIGxpbmtCdWZmZXIu
bG9jYXRpb25PZjxOb1B0clRhZz4ocmVjb3JkLnNsb3dQYXRoKSk7Ci0gICAgICAgIGluZm8uc2V0
Q2FsbExvY2F0aW9ucygKLSAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQ
dHJUYWc+KCksCisgICAgICAgIGluZm8uc2V0Q29kZUxvY2F0aW9ucygKICAgICAgICAgICAgIGxp
bmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihyZWNvcmQuc2xvd1BhdGgpLAot
ICAgICAgICAgICAgbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8SlNJbnRlcm5hbFB0clRh
Zz4ocmVjb3JkLmNhbGwpKTsKLSAgICB9Ci0gICAgCi0gICAgZm9yIChKU0RpcmVjdFRhaWxDYWxs
UmVjb3JkJiByZWNvcmQgOiBtX2pzRGlyZWN0VGFpbENhbGxzKSB7Ci0gICAgICAgIENhbGxMaW5r
SW5mbyYgaW5mbyA9ICpyZWNvcmQuaW5mbzsKLSAgICAgICAgaW5mby5zZXRDYWxsTG9jYXRpb25z
KAotICAgICAgICAgICAgbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KHJl
Y29yZC5wYXRjaGFibGVKdW1wKSwKLSAgICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZjxK
U0ludGVybmFsUHRyVGFnPihyZWNvcmQuc2xvd1BhdGgpLAotICAgICAgICAgICAgbGlua0J1ZmZl
ci5sb2NhdGlvbk9mTmVhckNhbGw8SlNJbnRlcm5hbFB0clRhZz4ocmVjb3JkLmNhbGwpKTsKKyAg
ICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+KCkpOwogICAgIH0K
ICAgICAKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG9zckV4aXRU
aHVuayA9IHZtKCkuZ2V0Q1RJU3R1Yihvc3JFeGl0R2VuZXJhdGlvblRodW5rR2VuZXJhdG9yKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgJKHJldmlz
aW9uIDI3Njk3NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtMjE5LDE5ICsyMTksMTQgQEAgcHVibGljOgogICAgICAgICBt
X3ByaXZhdGVCcmFuZEFjY2Vzc2VzLmFwcGVuZChJbmxpbmVDYWNoZVdyYXBwZXI8SklUUHJpdmF0
ZUJyYW5kQWNjZXNzR2VuZXJhdG9yPihnZW4sIHNsb3dQYXRoKSk7CiAgICAgfQogCi0gICAgdm9p
ZCBhZGRKU0NhbGwoQ2FsbCBmYXN0Q2FsbCwgQ2FsbCBzbG93Q2FsbCwgRGF0YUxhYmVsUHRyIHRh
cmdldFRvQ2hlY2ssIENhbGxMaW5rSW5mbyogaW5mbykKKyAgICB2b2lkIGFkZEpTQ2FsbChMYWJl
bCBzbG93UGF0aFN0YXJ0LCBMYWJlbCBkb25lTG9jYXRpb24sIENhbGxMaW5rSW5mbyogaW5mbykK
ICAgICB7Ci0gICAgICAgIG1fanNDYWxscy5hcHBlbmQoSlNDYWxsUmVjb3JkKGZhc3RDYWxsLCBz
bG93Q2FsbCwgdGFyZ2V0VG9DaGVjaywgaW5mbykpOworICAgICAgICBtX2pzQ2FsbHMuYXBwZW5k
KEpTQ2FsbFJlY29yZChzbG93UGF0aFN0YXJ0LCBkb25lTG9jYXRpb24sIGluZm8pKTsKICAgICB9
CiAgICAgCi0gICAgdm9pZCBhZGRKU0RpcmVjdENhbGwoQ2FsbCBjYWxsLCBMYWJlbCBzbG93UGF0
aCwgQ2FsbExpbmtJbmZvKiBpbmZvKQorICAgIHZvaWQgYWRkSlNEaXJlY3RDYWxsKExhYmVsIHNs
b3dQYXRoLCBDYWxsTGlua0luZm8qIGluZm8pCiAgICAgewotICAgICAgICBtX2pzRGlyZWN0Q2Fs
bHMuYXBwZW5kKEpTRGlyZWN0Q2FsbFJlY29yZChjYWxsLCBzbG93UGF0aCwgaW5mbykpOwotICAg
IH0KLSAgICAKLSAgICB2b2lkIGFkZEpTRGlyZWN0VGFpbENhbGwoUGF0Y2hhYmxlSnVtcCBwYXRj
aGFibGVKdW1wLCBDYWxsIGNhbGwsIExhYmVsIHNsb3dQYXRoLCBDYWxsTGlua0luZm8qIGluZm8p
Ci0gICAgewotICAgICAgICBtX2pzRGlyZWN0VGFpbENhbGxzLmFwcGVuZChKU0RpcmVjdFRhaWxD
YWxsUmVjb3JkKHBhdGNoYWJsZUp1bXAsIGNhbGwsIHNsb3dQYXRoLCBpbmZvKSk7CisgICAgICAg
IG1fanNEaXJlY3RDYWxscy5hcHBlbmQoSlNEaXJlY3RDYWxsUmVjb3JkKHNsb3dQYXRoLCBpbmZv
KSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgYWRkV2Vha1JlZmVyZW5jZShKU0NlbGwqIHRhcmdl
dCkKQEAgLTMyOCw1MiArMzIzLDI5IEBAIHByaXZhdGU6CiAKIAogICAgIHN0cnVjdCBKU0NhbGxS
ZWNvcmQgewotICAgICAgICBKU0NhbGxSZWNvcmQoQ2FsbCBmYXN0Q2FsbCwgQ2FsbCBzbG93Q2Fs
bCwgRGF0YUxhYmVsUHRyIHRhcmdldFRvQ2hlY2ssIENhbGxMaW5rSW5mbyogaW5mbykKLSAgICAg
ICAgICAgIDogZmFzdENhbGwoZmFzdENhbGwpCi0gICAgICAgICAgICAsIHNsb3dDYWxsKHNsb3dD
YWxsKQotICAgICAgICAgICAgLCB0YXJnZXRUb0NoZWNrKHRhcmdldFRvQ2hlY2spCisgICAgICAg
IEpTQ2FsbFJlY29yZChMYWJlbCBzbG93UGF0aFN0YXJ0LCBMYWJlbCBkb25lTG9jYXRpb24sIENh
bGxMaW5rSW5mbyogaW5mbykKKyAgICAgICAgICAgIDogc2xvd1BhdGhTdGFydChzbG93UGF0aFN0
YXJ0KQorICAgICAgICAgICAgLCBkb25lTG9jYXRpb24oZG9uZUxvY2F0aW9uKQogICAgICAgICAg
ICAgLCBpbmZvKGluZm8pCiAgICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChmYXN0Q2FsbC5p
c0ZsYWdTZXQoQ2FsbDo6TmVhcikpOwotICAgICAgICAgICAgQVNTRVJUKHNsb3dDYWxsLmlzRmxh
Z1NldChDYWxsOjpOZWFyKSk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIENhbGwgZmFz
dENhbGw7Ci0gICAgICAgIENhbGwgc2xvd0NhbGw7Ci0gICAgICAgIERhdGFMYWJlbFB0ciB0YXJn
ZXRUb0NoZWNrOworICAgICAgICBMYWJlbCBmYXN0UGF0aFN0YXJ0OworICAgICAgICBMYWJlbCBz
bG93UGF0aFN0YXJ0OworICAgICAgICBMYWJlbCBkb25lTG9jYXRpb247CiAgICAgICAgIENhbGxM
aW5rSW5mbyogaW5mbzsKICAgICB9OwogICAgIAogICAgIHN0cnVjdCBKU0RpcmVjdENhbGxSZWNv
cmQgewotICAgICAgICBKU0RpcmVjdENhbGxSZWNvcmQoQ2FsbCBjYWxsLCBMYWJlbCBzbG93UGF0
aCwgQ2FsbExpbmtJbmZvKiBpbmZvKQotICAgICAgICAgICAgOiBjYWxsKGNhbGwpCi0gICAgICAg
ICAgICAsIHNsb3dQYXRoKHNsb3dQYXRoKQotICAgICAgICAgICAgLCBpbmZvKGluZm8pCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChjYWxsLmlzRmxhZ1NldChDYWxsOjpOZWFyKSk7Ci0g
ICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIENhbGwgY2FsbDsKLSAgICAgICAgTGFiZWwgc2xv
d1BhdGg7Ci0gICAgICAgIENhbGxMaW5rSW5mbyogaW5mbzsKLSAgICB9OwotICAgIAotICAgIHN0
cnVjdCBKU0RpcmVjdFRhaWxDYWxsUmVjb3JkIHsKLSAgICAgICAgSlNEaXJlY3RUYWlsQ2FsbFJl
Y29yZChQYXRjaGFibGVKdW1wIHBhdGNoYWJsZUp1bXAsIENhbGwgY2FsbCwgTGFiZWwgc2xvd1Bh
dGgsIENhbGxMaW5rSW5mbyogaW5mbykKLSAgICAgICAgICAgIDogcGF0Y2hhYmxlSnVtcChwYXRj
aGFibGVKdW1wKQotICAgICAgICAgICAgLCBjYWxsKGNhbGwpCi0gICAgICAgICAgICAsIHNsb3dQ
YXRoKHNsb3dQYXRoKQorICAgICAgICBKU0RpcmVjdENhbGxSZWNvcmQoTGFiZWwgc2xvd1BhdGgs
IENhbGxMaW5rSW5mbyogaW5mbykKKyAgICAgICAgICAgIDogc2xvd1BhdGgoc2xvd1BhdGgpCiAg
ICAgICAgICAgICAsIGluZm8oaW5mbykKICAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKGNh
bGwuaXNGbGFnU2V0KENhbGw6Ok5lYXIpICYmIGNhbGwuaXNGbGFnU2V0KENhbGw6OlRhaWwpKTsK
ICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgUGF0Y2hhYmxlSnVtcCBwYXRjaGFibGVKdW1w
OwotICAgICAgICBDYWxsIGNhbGw7CiAgICAgICAgIExhYmVsIHNsb3dQYXRoOwogICAgICAgICBD
YWxsTGlua0luZm8qIGluZm87CiAgICAgfTsKLQogICAgIAogICAgIFZlY3RvcjxJbmxpbmVDYWNo
ZVdyYXBwZXI8SklUR2V0QnlJZEdlbmVyYXRvcj4sIDQ+IG1fZ2V0QnlJZHM7CiAgICAgVmVjdG9y
PElubGluZUNhY2hlV3JhcHBlcjxKSVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3I+LCA0PiBtX2dl
dEJ5SWRzV2l0aFRoaXM7CkBAIC0zODYsNyArMzU4LDYgQEAgcHJpdmF0ZToKICAgICBWZWN0b3I8
SW5saW5lQ2FjaGVXcmFwcGVyPEpJVFByaXZhdGVCcmFuZEFjY2Vzc0dlbmVyYXRvcj4sIDQ+IG1f
cHJpdmF0ZUJyYW5kQWNjZXNzZXM7CiAgICAgVmVjdG9yPEpTQ2FsbFJlY29yZCwgND4gbV9qc0Nh
bGxzOwogICAgIFZlY3RvcjxKU0RpcmVjdENhbGxSZWNvcmQsIDQ+IG1fanNEaXJlY3RDYWxsczsK
LSAgICBWZWN0b3I8SlNEaXJlY3RUYWlsQ2FsbFJlY29yZCwgND4gbV9qc0RpcmVjdFRhaWxDYWxs
czsKICAgICBTZWdtZW50ZWRWZWN0b3I8T1NSRXhpdENvbXBpbGF0aW9uSW5mbywgND4gbV9leGl0
Q29tcGlsYXRpb25JbmZvOwogICAgIFZlY3RvcjxWZWN0b3I8TGFiZWw+PiBtX2V4aXRTaXRlTGFi
ZWxzOwogICAgIFZlY3RvcjxERkc6Ok9TUkVudHJ5RGF0YT4gbV9vc3JFbnRyeTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNv
bW1vbi5jcHAJKHJldmlzaW9uIDI3Njk3NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAs
OCBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKIHZvaWQgaGFuZGxlRXhpdENv
dW50cyhWTSYgdm0sIENDYWxsSGVscGVycyYgaml0LCBjb25zdCBPU1JFeGl0QmFzZSYgZXhpdCkK
IHsKKyAgICBqaXQuYWRkNjQoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMSksIEFzc2Vt
Ymx5SGVscGVyczo6QWJzb2x1dGVBZGRyZXNzKCZnX251bWJlck9mT1NSRXhpdHMpKTsKKyAgICAK
ICAgICBpZiAoIWV4aXRLaW5kTWF5SmV0dGlzb24oZXhpdC5tX2tpbmQpKSB7CiAgICAgICAgIC8v
IEZJWE1FOiBXZSBtYXkgd2FudCB0byBub3RpY2UgdGhhdCB3ZSdyZSBmcmVxdWVudGx5IGV4aXRp
bmcKICAgICAgICAgLy8gYXQgYW4gb3BfY2F0Y2ggdGhhdCB3ZSBkaWRuJ3QgY29tcGlsZSBhbiBl
bnRyeXBvaW50IGZvciwgYW5kCkBAIC0yMDksNyArMjExLDcgQEAgc3RhdGljIE1hY3JvQXNzZW1i
bGVyQ29kZVB0cjxKU0VudHJ5UHRyVAogICAgICAgICAgICAgICAgIGJhc2VsaW5lQ29kZUJsb2Nr
Rm9yQ2FsbGVyLT5nZXRDYWxsTGlua0luZm9Gb3JCeXRlY29kZUluZGV4KGNhbGxCeXRlY29kZUlu
ZGV4KTsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxMaW5rSW5mbyk7CiAKLSAgICAg
ICAgICAgIGp1bXBUYXJnZXQgPSBjYWxsTGlua0luZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbigpLnJl
dGFnZ2VkPEpTRW50cnlQdHJUYWc+KCk7CisgICAgICAgICAgICBqdW1wVGFyZ2V0ID0gY2FsbExp
bmtJbmZvLT5kb25lTG9jYXRpb24oKS5yZXRhZ2dlZDxKU0VudHJ5UHRyVGFnPigpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAyNzY5NzcpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNjE2LDcg
KzM2MTYsNyBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uTGlua0RpCiAgICAg
ICAgICAgICBjb2RlUHRyID0gZnVuY3Rpb25FeGVjdXRhYmxlLT5lbnRyeXBvaW50Rm9yKGtpbmQs
IEFyaXR5Q2hlY2tOb3RSZXF1aXJlZCk7CiAgICAgfQogICAgIAotICAgIGxpbmtEaXJlY3RGb3Io
Y2FsbEZyYW1lLCAqY2FsbExpbmtJbmZvLCBjb2RlQmxvY2ssIGNvZGVQdHIpOworICAgIGxpbmtE
aXJlY3RDYWxsKGNhbGxGcmFtZSwgKmNhbGxMaW5rSW5mbywgY29kZUJsb2NrLCBjb2RlUHRyKTsK
IH0KIAogSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblRyaWdnZXJSZW9wdGltaXph
dGlvbk5vdywgdm9pZCwgKENvZGVCbG9jayogY29kZUJsb2NrLCBDb2RlQmxvY2sqIG9wdGltaXpl
ZENvZGVCbG9jaywgT1NSRXhpdEJhc2UqIGV4aXQpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCShyZXZpc2lvbiAyNzY5Nzcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC03MjAsOSArNzIwLDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVt
aXRDYWxsKE5vZGUqIG5vZGUKICAgICAgICAgICAgIGlmICghaXNEaXJlY3QpCiAgICAgICAgICAg
ICAgICAgY2FsbGVlLnVzZSgpOwogCisgICAgICAgICAgICBzaHVmZmxlRGF0YS5jYWxsZWUgPSBW
YWx1ZVJlY292ZXJ5OjppbkdQUihjYWxsZWVHUFIsIERhdGFGb3JtYXRKUyk7CisKICAgICAgICAg
ICAgIHNodWZmbGVEYXRhLm51bWJlclRhZ1JlZ2lzdGVyID0gR1BSSW5mbzo6bnVtYmVyVGFnUmVn
aXN0ZXI7CiAgICAgICAgICAgICBzaHVmZmxlRGF0YS5udW1Mb2NhbHMgPSBtX2ppdC5ncmFwaCgp
LmZyYW1lUmVnaXN0ZXJDb3VudCgpOwotICAgICAgICAgICAgc2h1ZmZsZURhdGEuY2FsbGVlID0g
VmFsdWVSZWNvdmVyeTo6aW5HUFIoY2FsbGVlR1BSLCBEYXRhRm9ybWF0SlMpOwogICAgICAgICAg
ICAgc2h1ZmZsZURhdGEuYXJncy5yZXNpemUobnVtQWxsb2NhdGVkQXJncyk7CiAgICAgICAgICAg
ICBzaHVmZmxlRGF0YS5udW1QYXNzZWRBcmdzID0gbnVtUGFzc2VkQXJnczsKICAgICAgICAgICAg
IApAQCAtODMwLDE4ICs4MzEsMTQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9k
ZSogbm9kZQogICAgICAgICBpZiAoaXNUYWlsKSB7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VChub2RlLT5vcCgpID09IERpcmVjdFRhaWxDYWxsKTsKICAgICAgICAgICAgIAotICAgICAgICAg
ICAgSklUQ29tcGlsZXI6OlBhdGNoYWJsZUp1bXAgcGF0Y2hhYmxlSnVtcCA9IG1faml0LnBhdGNo
YWJsZUp1bXAoKTsKICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpMYWJlbCBtYWluUGF0aCA9IG1f
aml0LmxhYmVsKCk7Ci0gICAgICAgICAgICAKICAgICAgICAgICAgIG1faml0LmVtaXRTdG9yZUNh
bGxTaXRlSW5kZXgoY2FsbFNpdGUpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBjYWxsTGlu
a0luZm8tPnNldEZyYW1lU2h1ZmZsZURhdGEoc2h1ZmZsZURhdGEpOwotICAgICAgICAgICAgQ2Fs
bEZyYW1lU2h1ZmZsZXIobV9qaXQsIHNodWZmbGVEYXRhKS5wcmVwYXJlRm9yVGFpbENhbGwoKTsK
LSAgICAgICAgICAgIAotICAgICAgICAgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbCA9IG1faml0
Lm5lYXJUYWlsQ2FsbCgpOwotICAgICAgICAgICAgCisKKyAgICAgICAgICAgIGNhbGxMaW5rSW5m
by0+ZW1pdERpcmVjdFRhaWxDYWxsRmFzdFBhdGgobV9qaXQsIFsmXSB7CisgICAgICAgICAgICAg
ICAgY2FsbExpbmtJbmZvLT5zZXRGcmFtZVNodWZmbGVEYXRhKHNodWZmbGVEYXRhKTsKKyAgICAg
ICAgICAgICAgICBDYWxsRnJhbWVTaHVmZmxlcihtX2ppdCwgc2h1ZmZsZURhdGEpLnByZXBhcmVG
b3JUYWlsQ2FsbCgpOworICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICBKSVRDb21waWxlcjo6
TGFiZWwgc2xvd1BhdGggPSBtX2ppdC5sYWJlbCgpOwotICAgICAgICAgICAgcGF0Y2hhYmxlSnVt
cC5tX2p1bXAubGlua1RvKHNsb3dQYXRoLCAmbV9qaXQpOwogICAgICAgICAgICAgCiAgICAgICAg
ICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhJbnZhbGlkR1BSUmVnKTsKICAgICAgICAgICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTGlua0RpcmVjdENhbGwsIGNhbGxMaW5rSW5mbywgY2Fs
bGVlR1BSKTsKQEAgLTg1MSwxNSArODQ4LDEzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRD
YWxsKE5vZGUqIG5vZGUKICAgICAgICAgICAgIAogICAgICAgICAgICAgdXNlQ2hpbGRyZW4obm9k
ZSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIG1faml0LmFkZEpTRGlyZWN0VGFpbENhbGwo
cGF0Y2hhYmxlSnVtcCwgY2FsbCwgc2xvd1BhdGgsIGNhbGxMaW5rSW5mbyk7CisgICAgICAgICAg
ICBtX2ppdC5hZGRKU0RpcmVjdENhbGwoc2xvd1BhdGgsIGNhbGxMaW5rSW5mbyk7CiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIEpJVENvbXBpbGVyOjpM
YWJlbCBtYWluUGF0aCA9IG1faml0LmxhYmVsKCk7Ci0gICAgICAgIAogICAgICAgICBtX2ppdC5l
bWl0U3RvcmVDYWxsU2l0ZUluZGV4KGNhbGxTaXRlKTsKLSAgICAgICAgCi0gICAgICAgIEpJVENv
bXBpbGVyOjpDYWxsIGNhbGwgPSBtX2ppdC5uZWFyQ2FsbCgpOworICAgICAgICBjYWxsTGlua0lu
Zm8tPmVtaXREaXJlY3RGYXN0UGF0aChtX2ppdCk7CiAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1w
IGRvbmUgPSBtX2ppdC5qdW1wKCk7CiAgICAgICAgIAogICAgICAgICBKSVRDb21waWxlcjo6TGFi
ZWwgc2xvd1BhdGggPSBtX2ppdC5sYWJlbCgpOwpAQCAtODc0LDMwICs4NjksMjkgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZQogICAgICAgICAKICAgICAgICAgc2V0
UmVzdWx0QW5kUmVzZXRTdGFjaygpOwogICAgICAgICAKLSAgICAgICAgbV9qaXQuYWRkSlNEaXJl
Y3RDYWxsKGNhbGwsIHNsb3dQYXRoLCBjYWxsTGlua0luZm8pOworICAgICAgICBtX2ppdC5hZGRK
U0RpcmVjdENhbGwoc2xvd1BhdGgsIGNhbGxMaW5rSW5mbyk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAgICAgCiAgICAgbV9qaXQuZW1pdFN0b3JlQ2FsbFNpdGVJbmRleChjYWxsU2l0ZSk7CiAg
ICAgCi0gICAgSklUQ29tcGlsZXI6OkRhdGFMYWJlbFB0ciB0YXJnZXRUb0NoZWNrOwotICAgIEpJ
VENvbXBpbGVyOjpKdW1wIHNsb3dQYXRoID0gbV9qaXQuYnJhbmNoUHRyV2l0aFBhdGNoKE1hY3Jv
QXNzZW1ibGVyOjpOb3RFcXVhbCwgY2FsbGVlR1BSLCB0YXJnZXRUb0NoZWNrLCBUcnVzdGVkSW1t
UHRyKG51bGxwdHIpKTsKLQorICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd0Nhc2VzOwog
ICAgIGlmIChpc1RhaWwpIHsKLSAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gVGFpbENhbGwpIHsK
LSAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0RnJhbWVTaHVmZmxlRGF0YShzaHVmZmxlRGF0
YSk7Ci0gICAgICAgICAgICBDYWxsRnJhbWVTaHVmZmxlcihtX2ppdCwgc2h1ZmZsZURhdGEpLnBy
ZXBhcmVGb3JUYWlsQ2FsbCgpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbV9qaXQu
ZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwotICAgICAgICAgICAgbV9qaXQucHJlcGFyZUZvclRh
aWxDYWxsU2xvdygpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgSklUQ29tcGlsZXI6OkNhbGwg
ZmFzdENhbGwgPSBpc1RhaWwgPyBtX2ppdC5uZWFyVGFpbENhbGwoKSA6IG1faml0Lm5lYXJDYWxs
KCk7Ci0KKyAgICAgICAgc2xvd0Nhc2VzID0gY2FsbExpbmtJbmZvLT5lbWl0VGFpbENhbGxGYXN0
UGF0aChtX2ppdCwgY2FsbGVlR1BSLCBJbnZhbGlkR1BSUmVnLCBDYWxsTGlua0luZm86OlVzZURh
dGFJQzo6Tm8sIFsmXSB7CisgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBUYWlsQ2FsbCkg
eworICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0RnJhbWVTaHVmZmxlRGF0YShzaHVm
ZmxlRGF0YSk7CisgICAgICAgICAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIobV9qaXQsIHNodWZm
bGVEYXRhKS5wcmVwYXJlRm9yVGFpbENhbGwoKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgbV9qaXQuZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOworICAgICAgICAgICAg
ICAgIG1faml0LnByZXBhcmVGb3JUYWlsQ2FsbFNsb3coKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfSk7CisgICAgfSBlbHNlCisgICAgICAgIHNsb3dDYXNlcyA9IGNhbGxMaW5rSW5mby0+ZW1p
dEZhc3RQYXRoKG1faml0LCBjYWxsZWVHUFIsIEludmFsaWRHUFJSZWcsIENhbGxMaW5rSW5mbzo6
VXNlRGF0YUlDOjpObyk7CiAgICAgSklUQ29tcGlsZXI6Okp1bXAgZG9uZSA9IG1faml0Lmp1bXAo
KTsKIAotICAgIHNsb3dQYXRoLmxpbmsoJm1faml0KTsKKyAgICBzbG93Q2FzZXMubGluaygmbV9q
aXQpOworICAgIGF1dG8gc2xvd1BhdGhTdGFydCA9IG1faml0LmxhYmVsKCk7CiAKICAgICBpZiAo
bm9kZS0+b3AoKSA9PSBUYWlsQ2FsbCkgewogICAgICAgICBDYWxsRnJhbWVTaHVmZmxlciBjYWxs
RnJhbWVTaHVmZmxlcihtX2ppdCwgc2h1ZmZsZURhdGEpOwpAQCAtOTA1LDIzICs4OTksMjIgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZQogICAgICAgICBjYWxsRnJh
bWVTaHVmZmxlci5wcmVwYXJlRm9yU2xvd1BhdGgoKTsKICAgICB9IGVsc2UgewogICAgICAgICBt
X2ppdC5tb3ZlKGNhbGxlZUdQUiwgR1BSSW5mbzo6cmVnVDApOyAvLyBDYWxsZWUgbmVlZHMgdG8g
YmUgaW4gcmVnVDAKLQogICAgICAgICBpZiAoaXNUYWlsKQogICAgICAgICAgICAgbV9qaXQuZW1p
dFJlc3RvcmVDYWxsZWVTYXZlcygpOyAvLyBUaGlzIG5lZWRzIHRvIGhhcHBlbiBhZnRlciB3ZSBt
b3ZlZCBjYWxsZWVHUFIgdG8gcmVnVDAKICAgICB9CiAKLSAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJ
bW1QdHIoY2FsbExpbmtJbmZvKSwgR1BSSW5mbzo6cmVnVDIpOyAvLyBMaW5rIGluZm8gbmVlZHMg
dG8gYmUgaW4gcmVnVDIKICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVy
KG1fZ3JhcGgsIGdsb2JhbE9iamVjdCksIEdQUkluZm86OnJlZ1QzKTsgLy8gSlNHbG9iYWxPYmpl
Y3QgbmVlZHMgdG8gYmUgaW4gcmVnVDMKLSAgICBKSVRDb21waWxlcjo6Q2FsbCBzbG93Q2FsbCA9
IG1faml0Lm5lYXJDYWxsKCk7CisgICAgY2FsbExpbmtJbmZvLT5lbWl0U2xvd1BhdGgodm0oKSwg
bV9qaXQpOwogCiAgICAgZG9uZS5saW5rKCZtX2ppdCk7CisgICAgYXV0byBkb25lTG9jYXRpb24g
PSBtX2ppdC5sYWJlbCgpOwogCiAgICAgaWYgKGlzVGFpbCkKICAgICAgICAgbV9qaXQuYWJvcnRX
aXRoUmVhc29uKEpJVERpZFJldHVybkZyb21UYWlsQ2FsbCk7CiAgICAgZWxzZQogICAgICAgICBz
ZXRSZXN1bHRBbmRSZXNldFN0YWNrKCk7CiAKLSAgICBtX2ppdC5hZGRKU0NhbGwoZmFzdENhbGws
IHNsb3dDYWxsLCB0YXJnZXRUb0NoZWNrLCBjYWxsTGlua0luZm8pOworICAgIG1faml0LmFkZEpT
Q2FsbChzbG93UGF0aFN0YXJ0LCBkb25lTG9jYXRpb24sIGNhbGxMaW5rSW5mbyk7CiB9CiAKIC8v
IENsYW5nIHNob3VsZCBhbGxvdyB1bnJlYWNoYWJsZSBbW2NsYW5nOjpmYWxsdGhyb3VnaF1dIGlu
IHRlbXBsYXRlIGZ1bmN0aW9ucyBpZiBhbnkgdGVtcGxhdGUgZXhwYW5zaW9uIHVzZXMgaXQKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHJl
dmlzaW9uIDI3Njk3NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdU
b0IzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTcxNywyNCArOTcxNywyMCBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OnRhZ0ZvcihWaXJ0dWFsUmVnaXN0ZXIo
Q2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKSk7CiAKICAgICAgICAg
ICAgICAgICBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbyA9IGppdC5jb2RlQmxvY2soKS0+YWRk
Q2FsbExpbmtJbmZvKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CisgICAgICAgICAgICAgICAgY2Fs
bExpbmtJbmZvLT5zZXRVcENhbGwoCisgICAgICAgICAgICAgICAgICAgIG5vZGUtPm9wKCkgPT0g
Q29uc3RydWN0ID8gQ2FsbExpbmtJbmZvOjpDb25zdHJ1Y3QgOiBDYWxsTGlua0luZm86OkNhbGws
IEdQUkluZm86OnJlZ1QwKTsKIAotICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6RGF0YUxh
YmVsUHRyIHRhcmdldFRvQ2hlY2s7Ci0gICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1w
IHNsb3dQYXRoID0gaml0LmJyYW5jaFB0cldpdGhQYXRjaCgKLSAgICAgICAgICAgICAgICAgICAg
Q0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwgR1BSSW5mbzo6cmVnVDAsIHRhcmdldFRvQ2hlY2ssCi0g
ICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihudWxscHRyKSk7
Ci0KLSAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgZmFzdENhbGwgPSBqaXQubmVh
ckNhbGwoKTsKKyAgICAgICAgICAgICAgICBhdXRvIHNsb3dQYXRoID0gY2FsbExpbmtJbmZvLT5l
bWl0RmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgSW52YWxpZEdQUlJlZywgQ2FsbExpbmtJ
bmZvOjpVc2VEYXRhSUM6Ok5vKTsKICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAg
ZG9uZSA9IGppdC5qdW1wKCk7CiAKICAgICAgICAgICAgICAgICBzbG93UGF0aC5saW5rKCZqaXQp
OwotCi0gICAgICAgICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRy
KGNhbGxMaW5rSW5mbyksIEdQUkluZm86OnJlZ1QyKTsKKyAgICAgICAgICAgICAgICBhdXRvIHNs
b3dQYXRoU3RhcnQgPSBqaXQubGFiZWwoKTsKICAgICAgICAgICAgICAgICBqaXQubW92ZShDQ2Fs
bEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoaml0LmNvZGVCbG9jaygpLT5nbG9iYWxPYmplY3RGb3Io
bm9kZS0+b3JpZ2luLnNlbWFudGljKSksIEdQUkluZm86OnJlZ1QzKTsKLSAgICAgICAgICAgICAg
ICBDQ2FsbEhlbHBlcnM6OkNhbGwgc2xvd0NhbGwgPSBqaXQubmVhckNhbGwoKTsKKyAgICAgICAg
ICAgICAgICBjYWxsTGlua0luZm8tPmVtaXRTbG93UGF0aCgqdm0sIGppdCk7CisKICAgICAgICAg
ICAgICAgICBkb25lLmxpbmsoJmppdCk7CiAKLSAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8t
PnNldFVwQ2FsbCgKLSAgICAgICAgICAgICAgICAgICAgbm9kZS0+b3AoKSA9PSBDb25zdHJ1Y3Qg
PyBDYWxsTGlua0luZm86OkNvbnN0cnVjdCA6IENhbGxMaW5rSW5mbzo6Q2FsbCwgR1BSSW5mbzo6
cmVnVDApOworICAgICAgICAgICAgICAgIGF1dG8gZG9uZUxvY2F0aW9uID0gaml0LmxhYmVsKCk7
CiAKICAgICAgICAgICAgICAgICBqaXQuYWRkUHRyKAogICAgICAgICAgICAgICAgICAgICBDQ2Fs
bEhlbHBlcnM6OlRydXN0ZWRJbW0zMigtcGFyYW1zLnByb2MoKS5mcmFtZVNpemUoKSksCkBAIC05
NzQyLDEzICs5NzM4LDkgQEAgcHJpdmF0ZToKIAogICAgICAgICAgICAgICAgIGppdC5hZGRMaW5r
VGFzaygKICAgICAgICAgICAgICAgICAgICAgWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SklUVGh1bmtQ
dHJUYWc+IGxpbmtDYWxsID0gdm0tPmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvciku
Y29kZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKHNsb3dDYWxs
LCBGdW5jdGlvblB0cjxKSVRUaHVua1B0clRhZz4obGlua0NhbGwpKTsKLQotICAgICAgICAgICAg
ICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRDYWxsTG9jYXRpb25zKAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+KGxpbmtC
dWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPEpTSW50ZXJuYWxQdHJUYWc+KHNsb3dDYWxsKSksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0
clRhZz4obGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KHRhcmdldFRvQ2hl
Y2spKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZO
ZWFyQ2FsbDxKU0ludGVybmFsUHRyVGFnPihmYXN0Q2FsbCkpOworICAgICAgICAgICAgICAgICAg
ICAgICAgY2FsbExpbmtJbmZvLT5zZXRDb2RlTG9jYXRpb25zKAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihzbG93UGF0
aFN0YXJ0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9u
T2Y8SlNJbnRlcm5hbFB0clRhZz4oZG9uZUxvY2F0aW9uKSk7CiAgICAgICAgICAgICAgICAgICAg
IH0pOwogICAgICAgICAgICAgfSk7CiAKQEAgLTk4NTcsNjMgKzk4NDksNTAgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgICAgICAgICAgc2h1ZmZsZURhdGEuc2V0dXBDYWxsZWVTYXZlUmVnaXN0ZXJz
KGppdC5jb2RlQmxvY2soKSk7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAg
ICAgICBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbyA9IGppdC5jb2RlQmxvY2soKS0+YWRkQ2Fs
bExpbmtJbmZvKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CisgICAgICAgICAgICAgICAgICAgIGNh
bGxMaW5rSW5mby0+c2V0VXBDYWxsKENhbGxMaW5rSW5mbzo6RGlyZWN0VGFpbENhbGwsIEludmFs
aWRHUFJSZWcpOwogICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpQYXRjaGFibGVKdW1wIHBhdGNoYWJsZUp1bXAgPSBqaXQucGF0Y2hhYmxlSnVt
cCgpOwogICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkxhYmVsIG1haW5QYXRoID0g
aml0LmxhYmVsKCk7Ci0gICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBq
aXQuc3RvcmUzMigKICAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3Rl
ZEltbTMyKGNhbGxTaXRlSW5kZXguYml0cygpKSwKICAgICAgICAgICAgICAgICAgICAgICAgIEND
YWxsSGVscGVyczo6dGFnRm9yKFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90Ojphcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcykpKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAg
ICAgICAgY2FsbExpbmtJbmZvLT5zZXRGcmFtZVNodWZmbGVEYXRhKHNodWZmbGVEYXRhKTsKLSAg
ICAgICAgICAgICAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIoaml0LCBzaHVmZmxlRGF0YSkucHJl
cGFyZUZvclRhaWxDYWxsKCk7Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAg
ICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2FsbCA9IGppdC5uZWFyVGFpbENhbGwoKTsKKyAgICAg
ICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5lbWl0RGlyZWN0VGFpbENhbGxGYXN0UGF0aChq
aXQsIFsmXSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldEZyYW1l
U2h1ZmZsZURhdGEoc2h1ZmZsZURhdGEpOworICAgICAgICAgICAgICAgICAgICAgICAgQ2FsbEZy
YW1lU2h1ZmZsZXIoaml0LCBzaHVmZmxlRGF0YSkucHJlcGFyZUZvclRhaWxDYWxsKCk7CisgICAg
ICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg
ICAgICAgaml0LmFib3J0V2l0aFJlYXNvbihKSVREaWRSZXR1cm5Gcm9tVGFpbENhbGwpOwogICAg
ICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpMYWJl
bCBzbG93UGF0aCA9IGppdC5sYWJlbCgpOwotICAgICAgICAgICAgICAgICAgICBwYXRjaGFibGVK
dW1wLm1fanVtcC5saW5rVG8oc2xvd1BhdGgsICZqaXQpOwogICAgICAgICAgICAgICAgICAgICBj
YWxsT3BlcmF0aW9uKAogICAgICAgICAgICAgICAgICAgICAgICAgKnN0YXRlLCB0b1NhdmUsIGpp
dCwKICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgZXhjZXB0
aW9ucy5nZXQoKSwgb3BlcmF0aW9uTGlua0RpcmVjdENhbGwsCiAgICAgICAgICAgICAgICAgICAg
ICAgICBJbnZhbGlkR1BSUmVnLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoY2FsbExpbmtJ
bmZvKSwgY2FsbGVlR1BSKS5jYWxsKCk7CiAgICAgICAgICAgICAgICAgICAgIGppdC5qdW1wKCku
bGlua1RvKG1haW5QYXRoLCAmaml0KTsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0VXBDYWxsKENhbGxMaW5rSW5mbzo6RGlyZWN0VGFp
bENhbGwsIEludmFsaWRHUFJSZWcpOwogICAgICAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8t
PnNldEV4ZWN1dGFibGVEdXJpbmdDb21waWxhdGlvbihleGVjdXRhYmxlKTsKICAgICAgICAgICAg
ICAgICAgICAgaWYgKG51bUFsbG9jYXRlZEFyZ3MgPiBudW1QYXNzZWRBcmdzKQogICAgICAgICAg
ICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRNYXhBcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcyhudW1BbGxvY2F0ZWRBcmdzKTsKICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICAgICAgICAgIGppdC5hZGRMaW5rVGFzaygKLSAgICAgICAgICAgICAgICAgICAgICAgIFs9XSAo
TGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIENv
ZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IHBhdGNoYWJsZUp1bXBMb2NhdGlvbiA9
IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihwYXRjaGFibGVKdW1wKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2RlTG9jYXRpb25OZWFyQ2FsbDxKU0ludGVy
bmFsUHRyVGFnPiBjYWxsTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxK
U0ludGVybmFsUHRyVGFnPihjYWxsKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2Rl
TG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBzbG93UGF0aExvY2F0aW9uID0gbGlua0J1
ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KHNsb3dQYXRoKTsKLQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0Q2FsbExvY2F0aW9ucygKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0Y2hhYmxlSnVtcExvY2F0aW9uLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzbG93UGF0aExvY2F0aW9uLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjYWxsTG9jYXRpb24pOwotICAgICAgICAgICAgICAgICAgICAg
ICAgfSk7CisgICAgICAgICAgICAgICAgICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZm
ZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+
c2V0Q29kZUxvY2F0aW9ucygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVy
LmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oc2xvd1BhdGgpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+KCkpOworICAg
ICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBDYWxsTGlua0lu
Zm8qIGNhbGxMaW5rSW5mbyA9IGppdC5jb2RlQmxvY2soKS0+YWRkQ2FsbExpbmtJbmZvKG5vZGUt
Pm9yaWdpbi5zZW1hbnRpYyk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpMYWJlbCBtYWluUGF0aCA9IGppdC5sYWJlbCgpOworICAgICAgICAgICAgICAg
IGNhbGxMaW5rSW5mby0+c2V0VXBDYWxsKAorICAgICAgICAgICAgICAgICAgICBpc0NvbnN0cnVj
dCA/IENhbGxMaW5rSW5mbzo6RGlyZWN0Q29uc3RydWN0IDogQ2FsbExpbmtJbmZvOjpEaXJlY3RD
YWxsLCBJbnZhbGlkR1BSUmVnKTsKIAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6TGFi
ZWwgbWFpblBhdGggPSBqaXQubGFiZWwoKTsKICAgICAgICAgICAgICAgICBqaXQuc3RvcmUzMigK
ICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoY2FsbFNpdGVJ
bmRleC5iaXRzKCkpLAogICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OnRhZ0ZvcihW
aXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMp
KSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxs
IGNhbGwgPSBqaXQubmVhckNhbGwoKTsKKyAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPmVt
aXREaXJlY3RGYXN0UGF0aChqaXQpOwogICAgICAgICAgICAgICAgIGppdC5hZGRQdHIoCiAgICAg
ICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKC1wYXJhbXMucHJvYygp
LmZyYW1lU2l6ZSgpKSwKICAgICAgICAgICAgICAgICAgICAgR1BSSW5mbzo6Y2FsbEZyYW1lUmVn
aXN0ZXIsIENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0VXBDYWxsKAotICAgICAgICAg
ICAgICAgICAgICBpc0NvbnN0cnVjdCA/IENhbGxMaW5rSW5mbzo6RGlyZWN0Q29uc3RydWN0IDog
Q2FsbExpbmtJbmZvOjpEaXJlY3RDYWxsLCBJbnZhbGlkR1BSUmVnKTsKICAgICAgICAgICAgICAg
ICBjYWxsTGlua0luZm8tPnNldEV4ZWN1dGFibGVEdXJpbmdDb21waWxhdGlvbihleGVjdXRhYmxl
KTsKICAgICAgICAgICAgICAgICBpZiAobnVtQWxsb2NhdGVkQXJncyA+IG51bVBhc3NlZEFyZ3Mp
CiAgICAgICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0TWF4QXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMobnVtQWxsb2NhdGVkQXJncyk7CkBAIC05OTM1LDE1ICs5OTE0LDkgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAg
aml0LmFkZExpbmtUYXNrKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFs9XSAoTGlua0J1
ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2Rl
TG9jYXRpb25OZWFyQ2FsbDxKU0ludGVybmFsUHRyVGFnPiBjYWxsTG9jYXRpb24gPSBsaW5rQnVm
ZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxKU0ludGVybmFsUHRyVGFnPihjYWxsKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRh
Zz4gc2xvd1BhdGhMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRy
VGFnPihzbG93UGF0aCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1
ZmZlci5saW5rKGNhbGwsIHNsb3dQYXRoTG9jYXRpb24pOwotCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0Q2FsbExvY2F0aW9ucygKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJU
YWc+KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbG93UGF0aExvY2F0
aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbExvY2F0aW9uKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRDb2RlTG9j
YXRpb25zKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5s
b2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KHNsb3dQYXRoKSwgCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPigp
KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAg
fSk7CiAgICAgICAgICAgICB9KTsKQEAgLTEwMDM0LDQwICsxMDAwNywzMCBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgICAgIHNodWZmbGVEYXRhLnNldHVwQ2FsbGVlU2F2ZVJlZ2lzdGVycyhqaXQu
Y29kZUJsb2NrKCkpOwogCiAgICAgICAgICAgICAgICAgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0lu
Zm8gPSBqaXQuY29kZUJsb2NrKCktPmFkZENhbGxMaW5rSW5mbyhjb2RlT3JpZ2luKTsKKyAgICAg
ICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldFVwQ2FsbChDYWxsTGlua0luZm86OlRhaWxDYWxs
LCBHUFJJbmZvOjpyZWdUMCk7CiAKLSAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkRhdGFM
YWJlbFB0ciB0YXJnZXRUb0NoZWNrOwotICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVt
cCBzbG93UGF0aCA9IGppdC5icmFuY2hQdHJXaXRoUGF0Y2goCi0gICAgICAgICAgICAgICAgICAg
IENDYWxsSGVscGVyczo6Tm90RXF1YWwsIEdQUkluZm86OnJlZ1QwLCB0YXJnZXRUb0NoZWNrLAot
ICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobnVsbHB0cikp
OwotCi0gICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRGcmFtZVNodWZmbGVEYXRhKHNo
dWZmbGVEYXRhKTsKLSAgICAgICAgICAgICAgICBDYWxsRnJhbWVTaHVmZmxlcihqaXQsIHNodWZm
bGVEYXRhKS5wcmVwYXJlRm9yVGFpbENhbGwoKTsKLQotICAgICAgICAgICAgICAgIENDYWxsSGVs
cGVyczo6Q2FsbCBmYXN0Q2FsbCA9IGppdC5uZWFyVGFpbENhbGwoKTsKKyAgICAgICAgICAgICAg
ICBhdXRvIHNsb3dQYXRoID0gY2FsbExpbmtJbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChqaXQs
IEdQUkluZm86OnJlZ1QwLCBJbnZhbGlkR1BSUmVnLCBDYWxsTGlua0luZm86OlVzZURhdGFJQzo6
Tm8sIFsmXSB7CisgICAgICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0RnJhbWVTaHVm
ZmxlRGF0YShzaHVmZmxlRGF0YSk7CisgICAgICAgICAgICAgICAgICAgIENhbGxGcmFtZVNodWZm
bGVyKGppdCwgc2h1ZmZsZURhdGEpLnByZXBhcmVGb3JUYWlsQ2FsbCgpOworICAgICAgICAgICAg
ICAgIH0pOwogCiAgICAgICAgICAgICAgICAgc2xvd1BhdGgubGluaygmaml0KTsKLQorICAgICAg
ICAgICAgICAgIGF1dG8gc2xvd1BhdGhTdGFydCA9IGppdC5sYWJlbCgpOwogICAgICAgICAgICAg
ICAgIENhbGxGcmFtZVNodWZmbGVyIHNsb3dQYXRoU2h1ZmZsZXIoaml0LCBzaHVmZmxlRGF0YSk7
CiAgICAgICAgICAgICAgICAgc2xvd1BhdGhTaHVmZmxlci5zZXRDYWxsZWVKU1ZhbHVlUmVncyhK
U1ZhbHVlUmVncyhHUFJJbmZvOjpyZWdUMCkpOwogICAgICAgICAgICAgICAgIHNsb3dQYXRoU2h1
ZmZsZXIucHJlcGFyZUZvclNsb3dQYXRoKCk7CiAKLSAgICAgICAgICAgICAgICBqaXQubW92ZShD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoY2FsbExpbmtJbmZvKSwgR1BSSW5mbzo6cmVnVDIp
OwogICAgICAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihq
aXQuY29kZUJsb2NrKCktPmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwg
R1BSSW5mbzo6cmVnVDMpOwotICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBzbG93
Q2FsbCA9IGppdC5uZWFyQ2FsbCgpOworICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+ZW1p
dFNsb3dQYXRoKCp2bSwgaml0KTsKIAorICAgICAgICAgICAgICAgIGF1dG8gZG9uZUxvY2F0aW9u
ID0gaml0LmxhYmVsKCk7CiAgICAgICAgICAgICAgICAgaml0LmFib3J0V2l0aFJlYXNvbihKSVRE
aWRSZXR1cm5Gcm9tVGFpbENhbGwpOwogCi0gICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5z
ZXRVcENhbGwoQ2FsbExpbmtJbmZvOjpUYWlsQ2FsbCwgR1BSSW5mbzo6cmVnVDApOwotCiAgICAg
ICAgICAgICAgICAgaml0LmFkZExpbmtUYXNrKAogICAgICAgICAgICAgICAgICAgICBbPV0gKExp
bmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyQ29kZVB0cjxKSVRUaHVua1B0clRhZz4gbGlua0NhbGwgPSB2bS0+Z2V0Q1RJU3R1Yihs
aW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5jb2RlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBs
aW5rQnVmZmVyLmxpbmsoc2xvd0NhbGwsIEZ1bmN0aW9uUHRyPEpJVFRodW5rUHRyVGFnPihsaW5r
Q2FsbCkpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldENhbGxM
b2NhdGlvbnMoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8
SlNJbnRlcm5hbFB0clRhZz4obGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8SlNJbnRlcm5h
bFB0clRhZz4oc2xvd0NhbGwpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2RlTG9j
YXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPihsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRl
cm5hbFB0clRhZz4odGFyZ2V0VG9DaGVjaykpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPEpTSW50ZXJuYWxQdHJUYWc+KGZhc3RDYWxs
KSk7CisgICAgICAgICAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldENvZGVMb2NhdGlv
bnMoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpT
SW50ZXJuYWxQdHJUYWc+KHNsb3dQYXRoU3RhcnQpLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihkb25lTG9jYXRpb24p
KTsKICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICB9KTsKICAgICB9CkBAIC0x
MDMyMCw0MCArMTAyODMsMzggQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBlbHNlCiAgICAg
ICAgICAgICAgICAgICAgIGNhbGxUeXBlID0gQ2FsbExpbmtJbmZvOjpDYWxsVmFyYXJnczsKICAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldFVwQ2FsbChj
YWxsVHlwZSwgR1BSSW5mbzo6cmVnVDApOworCiAgICAgICAgICAgICAgICAgYm9vbCBpc1RhaWxD
YWxsID0gQ2FsbExpbmtJbmZvOjpjYWxsTW9kZUZvcihjYWxsVHlwZSkgPT0gQ2FsbE1vZGU6OlRh
aWw7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpEYXRh
TGFiZWxQdHIgdGFyZ2V0VG9DaGVjazsKLSAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1
bXAgc2xvd1BhdGggPSBqaXQuYnJhbmNoUHRyV2l0aFBhdGNoKAotICAgICAgICAgICAgICAgICAg
ICBDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCBHUFJJbmZvOjpyZWdUMCwgdGFyZ2V0VG9DaGVjaywK
LSAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG51bGxwdHIp
KTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwg
ZmFzdENhbGw7CisKKyAgICAgICAgICAgICAgICBBU1NFUlQoIXVzZWRSZWdpc3RlcnMuZ2V0KEdQ
UkluZm86OnJlZ1QyKSk7IC8vIFVzZWQgb24gdGhlIHNsb3cgcGF0aC4KKworICAgICAgICAgICAg
ICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd1BhdGg7CiAgICAgICAgICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpKdW1wIGRvbmU7Ci0gICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAg
aWYgKGlzVGFpbENhbGwpIHsKLSAgICAgICAgICAgICAgICAgICAgaml0LmVtaXRSZXN0b3JlQ2Fs
bGVlU2F2ZXMoKTsKLSAgICAgICAgICAgICAgICAgICAgaml0LnByZXBhcmVGb3JUYWlsQ2FsbFNs
b3coKTsKLSAgICAgICAgICAgICAgICAgICAgZmFzdENhbGwgPSBqaXQubmVhclRhaWxDYWxsKCk7
CisgICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoID0gY2FsbExpbmtJbmZvLT5lbWl0VGFpbENh
bGxGYXN0UGF0aChqaXQsIEdQUkluZm86OnJlZ1QwLCBJbnZhbGlkR1BSUmVnLCBDYWxsTGlua0lu
Zm86OlVzZURhdGFJQzo6Tm8sIFsmXSB7CisgICAgICAgICAgICAgICAgICAgICAgICBqaXQuZW1p
dFJlc3RvcmVDYWxsZWVTYXZlcygpOworICAgICAgICAgICAgICAgICAgICAgICAgaml0LnByZXBh
cmVGb3JUYWlsQ2FsbFNsb3coKTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgZmFzdENhbGwgPSBqaXQubmVhckNh
bGwoKTsKKyAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGggPSBjYWxsTGlua0luZm8tPmVtaXRG
YXN0UGF0aChqaXQsIEdQUkluZm86OnJlZ1QwLCBJbnZhbGlkR1BSUmVnLCBDYWxsTGlua0luZm86
OlVzZURhdGFJQzo6Tm8pOwogICAgICAgICAgICAgICAgICAgICBkb25lID0gaml0Lmp1bXAoKTsK
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgc2xv
d1BhdGgubGluaygmaml0KTsKKyAgICAgICAgICAgICAgICBhdXRvIHNsb3dQYXRoU3RhcnQgPSBq
aXQubGFiZWwoKTsKIAogICAgICAgICAgICAgICAgIGlmIChpc1RhaWxDYWxsKQogICAgICAgICAg
ICAgICAgICAgICBqaXQuZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwotICAgICAgICAgICAgICAg
IEFTU0VSVCghdXNlZFJlZ2lzdGVycy5nZXQoR1BSSW5mbzo6cmVnVDIpKTsKLSAgICAgICAgICAg
ICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoY2FsbExpbmtJbmZvKSwg
R1BSSW5mbzo6cmVnVDIpOwogICAgICAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbVB0cihqaXQuY29kZUJsb2NrKCktPmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmln
aW4uc2VtYW50aWMpKSwgR1BSSW5mbzo6cmVnVDMpOwotICAgICAgICAgICAgICAgIENDYWxsSGVs
cGVyczo6Q2FsbCBzbG93Q2FsbCA9IGppdC5uZWFyQ2FsbCgpOworICAgICAgICAgICAgICAgIGNh
bGxMaW5rSW5mby0+ZW1pdFNsb3dQYXRoKCp2bSwgaml0KTsKICAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgICAgICBpZiAoaXNUYWlsQ2FsbCkKICAgICAgICAgICAgICAgICAgICAgaml0LmFi
b3J0V2l0aFJlYXNvbihKSVREaWRSZXR1cm5Gcm9tVGFpbENhbGwpOwogICAgICAgICAgICAgICAg
IGVsc2UKICAgICAgICAgICAgICAgICAgICAgZG9uZS5saW5rKCZqaXQpOwotICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0VXBDYWxsKGNhbGxUeXBlLCBH
UFJJbmZvOjpyZWdUMCk7CisKKyAgICAgICAgICAgICAgICBhdXRvIGRvbmVMb2NhdGlvbiA9IGpp
dC5sYWJlbCgpOwogCiAgICAgICAgICAgICAgICAgaml0LmFkZFB0cigKICAgICAgICAgICAgICAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoLW9yaWdpbmFsU3RhY2tIZWlnaHQpLApA
QCAtMTAzNjEsMTMgKzEwMzIyLDkgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAKICAgICAg
ICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soCiAgICAgICAgICAgICAgICAgICAgIFs9XSAoTGlu
a0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyPEpJVFRodW5rUHRyVGFnPiBsaW5rQ2FsbCA9IHZtLT5nZXRDVElTdHViKGxp
bmtDYWxsVGh1bmtHZW5lcmF0b3IpLmNvZGUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGxp
bmtCdWZmZXIubGluayhzbG93Q2FsbCwgRnVuY3Rpb25QdHI8SklUVGh1bmtQdHJUYWc+KGxpbmtD
YWxsKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAg
IGNhbGxMaW5rSW5mby0+c2V0Q2FsbExvY2F0aW9ucygKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPihsaW5rQnVmZmVyLmxvY2F0
aW9uT2ZOZWFyQ2FsbDxKU0ludGVybmFsUHRyVGFnPihzbG93Q2FsbCkpLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+KGxpbmtC
dWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPih0YXJnZXRUb0NoZWNrKSksCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8SlNJ
bnRlcm5hbFB0clRhZz4oZmFzdENhbGwpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxM
aW5rSW5mby0+c2V0Q29kZUxvY2F0aW9ucygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBs
aW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oc2xvd1BhdGhTdGFydCksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJu
YWxQdHJUYWc+KGRvbmVMb2NhdGlvbikpOwogICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAg
ICAgICAgIH0pOwogCkBAIC0xMDYwNywzOSArMTA1NjQsMzYgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIGNhbGxUeXBlID0gQ2FsbExpbmtJbmZv
OjpDYWxsVmFyYXJnczsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBib29sIGlz
VGFpbENhbGwgPSBDYWxsTGlua0luZm86OmNhbGxNb2RlRm9yKGNhbGxUeXBlKSA9PSBDYWxsTW9k
ZTo6VGFpbDsKKyAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldFVwQ2FsbChjYWxsVHlw
ZSwgR1BSSW5mbzo6cmVnVDApOwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIEND
YWxsSGVscGVyczo6RGF0YUxhYmVsUHRyIHRhcmdldFRvQ2hlY2s7Ci0gICAgICAgICAgICAgICAg
Q0NhbGxIZWxwZXJzOjpKdW1wIHNsb3dQYXRoID0gaml0LmJyYW5jaFB0cldpdGhQYXRjaCgKLSAg
ICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwgR1BSSW5mbzo6cmVnVDAs
IHRhcmdldFRvQ2hlY2ssCi0gICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3Rl
ZEltbVB0cihudWxscHRyKSk7CisgICAgICAgICAgICAgICAgYm9vbCBpc1RhaWxDYWxsID0gQ2Fs
bExpbmtJbmZvOjpjYWxsTW9kZUZvcihjYWxsVHlwZSkgPT0gQ2FsbE1vZGU6OlRhaWw7CiAgICAg
ICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGZhc3RDYWxs
OworICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd1BhdGg7CiAgICAg
ICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGRvbmU7Ci0gICAgICAgICAgICAgICAgCiAg
ICAgICAgICAgICAgICAgaWYgKGlzVGFpbENhbGwpIHsKLSAgICAgICAgICAgICAgICAgICAgaml0
LmVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKLSAgICAgICAgICAgICAgICAgICAgaml0LnByZXBh
cmVGb3JUYWlsQ2FsbFNsb3coKTsKLSAgICAgICAgICAgICAgICAgICAgZmFzdENhbGwgPSBqaXQu
bmVhclRhaWxDYWxsKCk7CisgICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoID0gY2FsbExpbmtJ
bmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChqaXQsIEdQUkluZm86OnJlZ1QwLCBJbnZhbGlkR1BS
UmVnLCBDYWxsTGlua0luZm86OlVzZURhdGFJQzo6Tm8sIFsmXSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBqaXQuZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOworICAgICAgICAgICAgICAgICAg
ICAgICAgaml0LnByZXBhcmVGb3JUYWlsQ2FsbFNsb3coKTsKKyAgICAgICAgICAgICAgICAgICAg
fSk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgZmFzdENh
bGwgPSBqaXQubmVhckNhbGwoKTsKKyAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGggPSBjYWxs
TGlua0luZm8tPmVtaXRGYXN0UGF0aChqaXQsIEdQUkluZm86OnJlZ1QwLCBJbnZhbGlkR1BSUmVn
LCBDYWxsTGlua0luZm86OlVzZURhdGFJQzo6Tm8pOwogICAgICAgICAgICAgICAgICAgICBkb25l
ID0gaml0Lmp1bXAoKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCiAgICAg
ICAgICAgICAgICAgc2xvd1BhdGgubGluaygmaml0KTsKKyAgICAgICAgICAgICAgICBhdXRvIHNs
b3dQYXRoU3RhcnQgPSBqaXQubGFiZWwoKTsKIAogICAgICAgICAgICAgICAgIGlmIChpc1RhaWxD
YWxsKQogICAgICAgICAgICAgICAgICAgICBqaXQuZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwot
ICAgICAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihjYWxs
TGlua0luZm8pLCBHUFJJbmZvOjpyZWdUMik7CiAgICAgICAgICAgICAgICAgaml0Lm1vdmUoQ0Nh
bGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGppdC5jb2RlQmxvY2soKS0+Z2xvYmFsT2JqZWN0Rm9y
KG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBHUFJJbmZvOjpyZWdUMyk7Ci0gICAgICAgICAgICAg
ICAgQ0NhbGxIZWxwZXJzOjpDYWxsIHNsb3dDYWxsID0gaml0Lm5lYXJDYWxsKCk7CisgICAgICAg
ICAgICAgICAgY2FsbExpbmtJbmZvLT5lbWl0U2xvd1BhdGgoKnZtLCBqaXQpOwogICAgICAgICAg
ICAgICAgIAogICAgICAgICAgICAgICAgIGlmIChpc1RhaWxDYWxsKQogICAgICAgICAgICAgICAg
ICAgICBqaXQuYWJvcnRXaXRoUmVhc29uKEpJVERpZFJldHVybkZyb21UYWlsQ2FsbCk7CiAgICAg
ICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICBkb25lLmxpbmsoJmppdCk7Ci0g
ICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRVcENhbGwo
Y2FsbFR5cGUsIEdQUkluZm86OnJlZ1QwKTsKKworICAgICAgICAgICAgICAgIGF1dG8gZG9uZUxv
Y2F0aW9uID0gaml0LmxhYmVsKCk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAg
aml0LmFkZFB0cigKICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
MzIoLW9yaWdpbmFsU3RhY2tIZWlnaHQpLApAQCAtMTA2NDcsMTMgKzEwNjAxLDkgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soCiAg
ICAgICAgICAgICAgICAgICAgIFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAg
ICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpJVFRodW5rUHRyVGFnPiBs
aW5rQ2FsbCA9IHZtLT5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpLmNvZGUoKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhzbG93Q2FsbCwgRnVuY3Rp
b25QdHI8SklUVGh1bmtQdHJUYWc+KGxpbmtDYWxsKSk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0Q2FsbExvY2F0aW9u
cygKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVy
bmFsUHRyVGFnPihsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxKU0ludGVybmFsUHRyVGFn
PihzbG93Q2FsbCkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxh
YmVsPEpTSW50ZXJuYWxQdHJUYWc+KGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRy
VGFnPih0YXJnZXRUb0NoZWNrKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1
ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8SlNJbnRlcm5hbFB0clRhZz4oZmFzdENhbGwpKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0Q29kZUxvY2F0aW9ucygKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5h
bFB0clRhZz4oc2xvd1BhdGhTdGFydCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlu
a0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KGRvbmVMb2NhdGlvbikpOwogICAg
ICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIH0pOwogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMuY3BwCShyZXZpc2lvbiAyNzY5NzcpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTcxLDYgKzcxLDE2IEBAIHZvaWQgQ0NhbGxIZWxwZXJzOjplbnN1cmVTaGFkb3dDaGlja2Vu
UGEKICAgICBzdG9yZVB0cihzY3JhdGNoMiwgQWRkcmVzcyhzY3JhdGNoMU5vbkFyZ0dQUikpOwog
fQogCit2b2lkIENDYWxsSGVscGVyczo6ZW1pdEpJVENvZGVPdmVyKE1hY3JvQXNzZW1ibGVyQ29k
ZVB0cjxKU0ludGVybmFsUHRyVGFnPiBjb2RlLCBXVEY6OkZ1bmN0aW9uPHZvaWQoQ0NhbGxIZWxw
ZXJzJik+IGVtaXRDb2RlLCBjb25zdCBjaGFyKiBkZXNjcmlwdGlvbikKK3sKKyAgICBDQ2FsbEhl
bHBlcnMgaml0OworICAgIGVtaXRDb2RlKGppdCk7CisKKyAgICBjb25zdGV4cHIgYm9vbCBuZWVk
c0JyYW5jaENvbXBhY3Rpb24gPSBmYWxzZTsKKyAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoaml0
LCBjb2RlLCBqaXQubV9hc3NlbWJsZXIuYnVmZmVyKCkuY29kZVNpemUoKSwgSklUQ29tcGlsYXRp
b25NdXN0U3VjY2VlZCwgbmVlZHNCcmFuY2hDb21wYWN0aW9uKTsKKyAgICBGSU5BTElaRV9DT0RF
KGxpbmtCdWZmZXIsIE5vUHRyVGFnLCBkZXNjcmlwdGlvbik7Cit9CisKIH0gLy8gbmFtZXNwYWNl
IEpTQwogCiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvQ0NhbGxIZWxwZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9DQ2FsbEhlbHBlcnMuaAkocmV2aXNpb24gMjc2OTc3KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtODE4LDYgKzgxOCw4
IEBAIHB1YmxpYzoKICAgICB2b2lkIGxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KEdQUlJlZyBz
aGFkb3dQYWNrZXQsIEpTVmFsdWVSZWdzIHRoaXNSZWdzLCBHUFJSZWcgc2NvcGUsIENvZGVCbG9j
ayosIENhbGxTaXRlSW5kZXgpOwogICAgIC8vIExlYXZlcyBiZWhpbmQgYSBwb2ludGVyIHRvIHRo
ZSBQYWNrZXQgd2Ugc2hvdWxkIHdyaXRlIHRvIGluIHNoYWRvd1BhY2tldC4KICAgICB2b2lkIGVu
c3VyZVNoYWRvd0NoaWNrZW5QYWNrZXQoVk0mLCBHUFJSZWcgc2hhZG93UGFja2V0LCBHUFJSZWcg
c2NyYXRjaDFOb25BcmdHUFIsIEdQUlJlZyBzY3JhdGNoMik7CisKKyAgICBzdGF0aWMgdm9pZCBl
bWl0SklUQ29kZU92ZXIoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTSW50ZXJuYWxQdHJUYWc+IGNv
ZGUsIFdURjo6RnVuY3Rpb248dm9pZChDQ2FsbEhlbHBlcnMmKT4sIGNvbnN0IGNoYXIqKTsKIH07
CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9D
YWxsRnJhbWVTaHVmZmxlcjY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0NhbGxGcmFtZVNodWZmbGVyNjQuY3BwCShyZXZpc2lvbiAyNzY5NzcpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVyNjQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yNDEsNyArMjQxLDcgQEAgdm9pZCBDYWxsRnJhbWVTaHVmZmxlcjo6ZW1pdERpc3Bs
YWNlKENhYwogICAgIGlmICghKHdhbnRlZFJlZyA9IFJlZyB7IGNhY2hlZFJlY292ZXJ5LndhbnRl
ZEpTVmFsdWVSZWdzKCkuZ3ByKCkgfSkpCiAgICAgICAgIHdhbnRlZFJlZyA9IFJlZyB7IGNhY2hl
ZFJlY292ZXJ5LndhbnRlZEZQUigpIH07CiAgICAgQVNTRVJUKHdhbnRlZFJlZyk7Ci0gICAgQVNT
RVJUKCFtX2xvY2tlZFJlZ2lzdGVycy5nZXQod2FudGVkUmVnKSk7CisgICAgUkVMRUFTRV9BU1NF
UlQoIW1fbG9ja2VkUmVnaXN0ZXJzLmdldCh3YW50ZWRSZWcpKTsKIAogICAgIGlmIChDYWNoZWRS
ZWNvdmVyeSogY3VycmVudCA9IG1fcmVnaXN0ZXJzW3dhbnRlZFJlZ10pIHsKICAgICAgICAgaWYg
KGN1cnJlbnQgPT0gJmNhY2hlZFJlY292ZXJ5KSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVQuY3BwCShyZXZpc2lvbiAyNzY5NzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk1OSwxMCArOTU5LDkgQEAgQ29tcGlsYXRpb25SZXN1
bHQgSklUOjpsaW5rKCkKIAogICAgIGZvciAoYXV0byYgY29tcGlsYXRpb25JbmZvIDogbV9jYWxs
Q29tcGlsYXRpb25JbmZvKSB7CiAgICAgICAgIENhbGxMaW5rSW5mbyYgaW5mbyA9ICpjb21waWxh
dGlvbkluZm8uY2FsbExpbmtJbmZvOwotICAgICAgICBpbmZvLnNldENhbGxMb2NhdGlvbnMoCi0g
ICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPihwYXRjaEJ1ZmZl
ci5sb2NhdGlvbk9mTmVhckNhbGw8SlNJbnRlcm5hbFB0clRhZz4oY29tcGlsYXRpb25JbmZvLmNh
bGxSZXR1cm5Mb2NhdGlvbikpLAotICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRl
cm5hbFB0clRhZz4ocGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihjb21w
aWxhdGlvbkluZm8uaG90UGF0aEJlZ2luKSksCi0gICAgICAgICAgICBwYXRjaEJ1ZmZlci5sb2Nh
dGlvbk9mTmVhckNhbGw8SlNJbnRlcm5hbFB0clRhZz4oY29tcGlsYXRpb25JbmZvLmhvdFBhdGhP
dGhlcikpOworICAgICAgICBpbmZvLnNldENvZGVMb2NhdGlvbnMoCisgICAgICAgICAgICBwYXRj
aEJ1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KGNvbXBpbGF0aW9uSW5mby5zbG93
UGF0aFN0YXJ0KSwKKyAgICAgICAgICAgIHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5h
bFB0clRhZz4oY29tcGlsYXRpb25JbmZvLmRvbmVMb2NhdGlvbikpOwogICAgIH0KIAogICAgIHsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkocmV2aXNpb24gMjc2OTc3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkod29ya2luZyBjb3B5KQpAQCAtMTc3LDkgKzE3Nyw4
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIH07CiAKICAgICBzdHJ1Y3QgQ2FsbENvbXBpbGF0aW9u
SW5mbyB7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpEYXRhTGFiZWxQdHIgaG90UGF0aEJlZ2lu
OwotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBob3RQYXRoT3RoZXI7Ci0gICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxSZXR1cm5Mb2NhdGlvbjsKKyAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OkxhYmVsIHNsb3dQYXRoU3RhcnQ7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJl
bCBkb25lTG9jYXRpb247CiAgICAgICAgIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvOwogICAg
IH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbDMyXzY0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwzMl82NC5jcHAJ
KHJldmlzaW9uIDI3Njk3NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbDMy
XzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzU1LDcgKzM1NSw3IEBAIHZvaWQgSklUOjpjb21w
aWxlT3BDYWxsU2xvd0Nhc2UoY29uc3QgSW4KICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9j
YWxsIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IG9wY29kZUlEID09IG9w
X3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cykKICAgICAgICAgZW1pdFJlc3RvcmVDYWxsZWVT
YXZlcygpOwogCi0gICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5j
YWxsUmV0dXJuTG9jYXRpb24gPSBlbWl0TmFrZWROZWFyQ2FsbChtX3ZtLT5nZXRDVElTdHViKGxp
bmtDYWxsVGh1bmtHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CisgICAgbV9j
YWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5zbG93Q2FsbFJldHVybkxvY2F0
aW9uID0gZW1pdE5ha2VkTmVhckNhbGwobV92bS0+Z2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2Vu
ZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCiAgICAgaWYgKG9wY29kZUlEID09
IG9wX3RhaWxfY2FsbCB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfdmFyYXJncykgewogICAg
ICAgICBhYm9ydFdpdGhSZWFzb24oSklURGlkUmV0dXJuRnJvbVRhaWxDYWxsKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAkocmV2aXNpb24gMjc2OTc3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTky
LDggKzE5MiwxNCBAQCBib29sIEpJVDo6Y29tcGlsZVRhaWxDYWxsKGNvbnN0IE9wVGFpbENhCiAg
ICAgICAgIFZhbHVlUmVjb3Zlcnk6OmluR1BSKHJlZ1QwLCBEYXRhRm9ybWF0SlMpOwogICAgIHNo
dWZmbGVEYXRhLnNldHVwQ2FsbGVlU2F2ZVJlZ2lzdGVycyhtX2NvZGVCbG9jayk7CiAgICAgaW5m
by0+c2V0RnJhbWVTaHVmZmxlRGF0YShzaHVmZmxlRGF0YSk7Ci0gICAgQ2FsbEZyYW1lU2h1ZmZs
ZXIoKnRoaXMsIHNodWZmbGVEYXRhKS5wcmVwYXJlRm9yVGFpbENhbGwoKTsKLSAgICBtX2NhbGxD
b21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmhvdFBhdGhPdGhlciA9IGVtaXROYWtl
ZE5lYXJUYWlsQ2FsbCgpOworCisgICAgSnVtcExpc3Qgc2xvd1BhdGhzID0gaW5mby0+ZW1pdFRh
aWxDYWxsRmFzdFBhdGgoKnRoaXMsIHJlZ1QwLCByZWdUMiwgQ2FsbExpbmtJbmZvOjpVc2VEYXRh
SUM6OlllcywgWyZdIHsKKyAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIoKnRoaXMsIHNodWZmbGVE
YXRhKS5wcmVwYXJlRm9yVGFpbENhbGwoKTsKKyAgICB9KTsKKyAgICBhZGRTbG93Q2FzZShzbG93
UGF0aHMpOworICAgIGF1dG8gZG9uZUxvY2F0aW9uID0gbGFiZWwoKTsKKyAgICBtX2NhbGxDb21w
aWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmRvbmVMb2NhdGlvbiA9IGRvbmVMb2NhdGlv
bjsKKyAgICAKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMjMyLDI4ICsyMzgsMzAgQEAgdm9p
ZCBKSVQ6OmNvbXBpbGVPcENhbGwoY29uc3QgSW5zdHJ1Y3RpbwogICAgIGlmIChjb21waWxlQ2Fs
bEV2YWwoYnl0ZWNvZGUpKQogICAgICAgICByZXR1cm47CiAKLSAgICBEYXRhTGFiZWxQdHIgYWRk
cmVzc09mTGlua2VkRnVuY3Rpb25DaGVjazsKLSAgICBKdW1wIHNsb3dDYXNlID0gYnJhbmNoUHRy
V2l0aFBhdGNoKE5vdEVxdWFsLCByZWdUMCwgYWRkcmVzc09mTGlua2VkRnVuY3Rpb25DaGVjaywg
VHJ1c3RlZEltbVB0cihudWxscHRyKSk7Ci0gICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2UpOwotCiAg
ICAgQVNTRVJUKG1fY2FsbENvbXBpbGF0aW9uSW5mby5zaXplKCkgPT0gY2FsbExpbmtJbmZvSW5k
ZXgpOwogICAgIGluZm8tPnNldFVwQ2FsbChDYWxsTGlua0luZm86OmNhbGxUeXBlRm9yKG9wY29k
ZUlEKSwgcmVnVDApOwogICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mby5hcHBlbmQoQ2FsbENvbXBp
bGF0aW9uSW5mbygpKTsKLSAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5k
ZXhdLmhvdFBhdGhCZWdpbiA9IGFkZHJlc3NPZkxpbmtlZEZ1bmN0aW9uQ2hlY2s7CiAgICAgbV9j
YWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5jYWxsTGlua0luZm8gPSBpbmZv
OwogCi0gICAgaWYgKGNvbXBpbGVUYWlsQ2FsbChieXRlY29kZSwgaW5mbywgY2FsbExpbmtJbmZv
SW5kZXgpKSB7CisgICAgaWYgKGNvbXBpbGVUYWlsQ2FsbChieXRlY29kZSwgaW5mbywgY2FsbExp
bmtJbmZvSW5kZXgpKQogICAgICAgICByZXR1cm47Ci0gICAgfQogCiAgICAgaWYgKG9wY29kZUlE
ID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3
YXJkX2FyZ3VtZW50cykgewotICAgICAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7Ci0gICAg
ICAgIHByZXBhcmVGb3JUYWlsQ2FsbFNsb3coKTsKLSAgICAgICAgbV9jYWxsQ29tcGlsYXRpb25J
bmZvW2NhbGxMaW5rSW5mb0luZGV4XS5ob3RQYXRoT3RoZXIgPSBlbWl0TmFrZWROZWFyVGFpbENh
bGwoKTsKKyAgICAgICAgSnVtcExpc3Qgc2xvd1BhdGhzID0gaW5mby0+ZW1pdFRhaWxDYWxsRmFz
dFBhdGgoKnRoaXMsIHJlZ1QwLCByZWdUMiwgQ2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6Olllcywg
WyZdIHsKKyAgICAgICAgICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKKyAgICAgICAgICAg
IHByZXBhcmVGb3JUYWlsQ2FsbFNsb3coR1BSSW5mbzo6cmVnVDIpOworICAgICAgICB9KTsKKyAg
ICAgICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGhzKTsKKyAgICAgICAgYXV0byBkb25lTG9jYXRpb24g
PSBsYWJlbCgpOworICAgICAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5k
ZXhdLmRvbmVMb2NhdGlvbiA9IGRvbmVMb2NhdGlvbjsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAotICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uaG90UGF0aE90
aGVyID0gZW1pdE5ha2VkTmVhckNhbGwoKTsKKyAgICBKdW1wTGlzdCBzbG93UGF0aHMgPSBpbmZv
LT5lbWl0RmFzdFBhdGgoKnRoaXMsIHJlZ1QwLCByZWdUMiwgQ2FsbExpbmtJbmZvOjpVc2VEYXRh
SUM6Olllcyk7CisgICAgYXV0byBkb25lTG9jYXRpb24gPSBsYWJlbCgpOworICAgIGFkZFNsb3dD
YXNlKHNsb3dQYXRocyk7CisKKyAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZv
SW5kZXhdLmRvbmVMb2NhdGlvbiA9IGRvbmVMb2NhdGlvbjsKIAogICAgIGFkZFB0cihUcnVzdGVk
SW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3Rl
cikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAgIGNoZWNr
U3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CkBAIC0yNzEsMTQgKzI3OSwxMyBAQCB2b2lkIEpJVDo6
Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKGNvbnN0IEluCiAKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0
ZXIpOwogCisgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5zbG93
UGF0aFN0YXJ0ID0gbGFiZWwoKTsKKwogICAgIGlmIChvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGwg
fHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgfHwgb3Bjb2RlSUQgPT0gb3BfdGFp
bF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKQogICAgICAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVz
KCk7CiAKICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgcmVnVDMpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NhbGxDb21waWxhdGlvbkluZm9b
Y2FsbExpbmtJbmZvSW5kZXhdLmNhbGxMaW5rSW5mbyksIHJlZ1QyKTsKLQotICAgIG1fY2FsbENv
bXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uY2FsbFJldHVybkxvY2F0aW9uID0KLSAg
ICAgICAgZW1pdE5ha2VkTmVhckNhbGwobV92bS0+Z2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2Vu
ZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOworICAgIG1fY2FsbENvbXBpbGF0aW9u
SW5mb1tjYWxsTGlua0luZm9JbmRleF0uY2FsbExpbmtJbmZvLT5lbWl0U2xvd1BhdGgoKm1fdm0s
ICp0aGlzKTsKIAogICAgIGlmIChvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGwgfHwgb3Bjb2RlSUQg
PT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MpIHsKICAgICAgICAgYWJvcnRXaXRoUmVhc29uKEpJVERp
ZFJldHVybkZyb21UYWlsQ2FsbCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VE9wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDI3Njk3NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzOTIsNyArMTM5
Miw3IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25MaW5rQ2EKICAgICAgICAg
ICAgIGlmICghY2FsbExpbmtJbmZvLT5zZWVuT25jZSgpKQogICAgICAgICAgICAgICAgIGNhbGxM
aW5rSW5mby0+c2V0U2VlbigpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGxp
bmtGb3Iodm0sIGNhbGxlZUZyYW1lLCAqY2FsbExpbmtJbmZvLCBudWxscHRyLCBpbnRlcm5hbEZ1
bmN0aW9uLCBjb2RlUHRyKTsKKyAgICAgICAgICAgICAgICBsaW5rTW9ub21vcnBoaWNDYWxsKHZt
LCBjYWxsZWVGcmFtZSwgKmNhbGxMaW5rSW5mbywgbnVsbHB0ciwgaW50ZXJuYWxGdW5jdGlvbiwg
Y29kZVB0cik7CiAKICAgICAgICAgICAgIHZvaWQqIGxpbmtlZFRhcmdldCA9IGNvZGVQdHIuZXhl
Y3V0YWJsZUFkZHJlc3MoKTsKICAgICAgICAgICAgIHJldHVybiBlbmNvZGVSZXN1bHQobGlua2Vk
VGFyZ2V0LCByZWludGVycHJldF9jYXN0PHZvaWQqPihjYWxsTGlua0luZm8tPmNhbGxNb2RlKCkg
PT0gQ2FsbE1vZGU6OlRhaWwgPyBSZXVzZVRoZUZyYW1lIDogS2VlcFRoZUZyYW1lKSk7CkBAIC0x
NDQwLDggKzE0NDAsOSBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uTGlua0Nh
CiAgICAgaWYgKCFjYWxsTGlua0luZm8tPnNlZW5PbmNlKCkpCiAgICAgICAgIGNhbGxMaW5rSW5m
by0+c2V0U2VlbigpOwogICAgIGVsc2UKLSAgICAgICAgbGlua0Zvcih2bSwgY2FsbGVlRnJhbWUs
ICpjYWxsTGlua0luZm8sIGNvZGVCbG9jaywgY2FsbGVlLCBjb2RlUHRyKTsKKyAgICAgICAgbGlu
a01vbm9tb3JwaGljQ2FsbCh2bSwgY2FsbGVlRnJhbWUsICpjYWxsTGlua0luZm8sIGNvZGVCbG9j
aywgY2FsbGVlLCBjb2RlUHRyKTsKIAorICAgIC8vZGF0YUxvZ0xuKCJvcGVyYXRpb25MaW5rQ2Fs
bCByZXR1cm5pbmc6ICIsIFJhd1BvaW50ZXIoY29kZVB0ci5leGVjdXRhYmxlQWRkcmVzcygpKSwg
IiBvbiBDYWxsTGlua0luZm86ICIsIFJhd1BvaW50ZXIoY2FsbExpbmtJbmZvKSk7CiAgICAgcmV0
dXJuIGVuY29kZVJlc3VsdChjb2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNzKCksIHJlaW50ZXJwcmV0
X2Nhc3Q8dm9pZCo+KGNhbGxMaW5rSW5mby0+Y2FsbE1vZGUoKSA9PSBDYWxsTW9kZTo6VGFpbCA/
IFJldXNlVGhlRnJhbWUgOiBLZWVwVGhlRnJhbWUpKTsKIH0KIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9Qb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Qb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZS5j
cHAJKHJldmlzaW9uIDI3Njk3NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUG9seW1v
cnBoaWNDYWxsU3R1YlJvdXRpbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSw3IEBA
IFBvbHltb3JwaGljQ2FsbE5vZGU6On5Qb2x5bW9ycGhpY0NhbGxOb2QKIHZvaWQgUG9seW1vcnBo
aWNDYWxsTm9kZTo6dW5saW5rKFZNJiB2bSkKIHsKICAgICBpZiAobV9jYWxsTGlua0luZm8pIHsK
LSAgICAgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6ZHVtcERpc2Fzc2VtYmx5KCksICJVbmxpbmtp
bmcgcG9seW1vcnBoaWMgY2FsbCBhdCAiLCBtX2NhbGxMaW5rSW5mby0+Y2FsbFJldHVybkxvY2F0
aW9uKCksICIsIGJjIyIsIG1fY2FsbExpbmtJbmZvLT5jb2RlT3JpZ2luKCkuYnl0ZWNvZGVJbmRl
eCgpKTsKKyAgICAgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6ZHVtcERpc2Fzc2VtYmx5KCksICJV
bmxpbmtpbmcgcG9seW1vcnBoaWMgY2FsbCBhdCAiLCBtX2NhbGxMaW5rSW5mby0+ZG9uZUxvY2F0
aW9uKCksICIsIGJjIyIsIG1fY2FsbExpbmtJbmZvLT5jb2RlT3JpZ2luKCkuYnl0ZWNvZGVJbmRl
eCgpKTsKICAgICAgICAgbV9jYWxsTGlua0luZm8tPnVubGluayh2bSk7CiAgICAgfQogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHJldmlzaW9uIDI3Njk3NykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI4LDYgKzI4LDggQEAKIAogI2lmIEVOQUJMRShKSVQpCiAKKyNpbmNsdWRlICJNYWNyb0Fzc2Vt
YmxlclByaW50ZXIuaCIKKwogI2luY2x1ZGUgIkJpbmFyeVN3aXRjaC5oIgogI2luY2x1ZGUgIkND
YWxsSGVscGVycy5oIgogI2luY2x1ZGUgIkNhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmgiCkBA
IC0xMTg4LDIwICsxMTkwLDIwIEBAIHZvaWQgcmVwYXRjaEluc3RhbmNlT2YoCiAgICAgICAgIGZ0
bFRodW5rQXdhcmVSZXBhdGNoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLnNsb3dQYXRoQ2FsbExv
Y2F0aW9uLCBvcGVyYXRpb25JbnN0YW5jZU9mR2VuZXJpYyk7CiB9CiAKLXN0YXRpYyB2b2lkIGxp
bmtTbG93Rm9yKFZNJiwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8sIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZjxKSVRTdHViUm91dGluZVB0clRhZz4gY29kZVJlZikKK3N0YXRpYyB2b2lkIGxpbmtT
bG93UGF0aFRvKFZNJiwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8sIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZjxKSVRTdHViUm91dGluZVB0clRhZz4gY29kZVJlZikKIHsKLSAgICBNYWNyb0Fzc2Vt
Ymxlcjo6cmVwYXRjaE5lYXJDYWxsKGNhbGxMaW5rSW5mby5jYWxsUmV0dXJuTG9jYXRpb24oKSwg
Q29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+KGNvZGVSZWYuY29kZSgpKSk7
CisgICAgY2FsbExpbmtJbmZvLnNldFNsb3dQYXRoQ2FsbERlc3RpbmF0aW9uKGNvZGVSZWYuY29k
ZSgpLnRlbXBsYXRlIHJldGFnZ2VkPEpTRW50cnlQdHJUYWc+KCkpOwogfQogCi1zdGF0aWMgdm9p
ZCBsaW5rU2xvd0ZvcihWTSYgdm0sIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvLCBUaHVua0dl
bmVyYXRvciBnZW5lcmF0b3IpCitzdGF0aWMgdm9pZCBsaW5rU2xvd1BhdGhUbyhWTSYgdm0sIENh
bGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvLCBUaHVua0dlbmVyYXRvciBnZW5lcmF0b3IpCiB7Ci0g
ICAgbGlua1Nsb3dGb3Iodm0sIGNhbGxMaW5rSW5mbywgdm0uZ2V0Q1RJU3R1YihnZW5lcmF0b3Ip
LnJldGFnZ2VkPEpJVFN0dWJSb3V0aW5lUHRyVGFnPigpKTsKKyAgICBsaW5rU2xvd1BhdGhUbyh2
bSwgY2FsbExpbmtJbmZvLCB2bS5nZXRDVElTdHViKGdlbmVyYXRvcikucmV0YWdnZWQ8SklUU3R1
YlJvdXRpbmVQdHJUYWc+KCkpOwogfQogCiBzdGF0aWMgdm9pZCBsaW5rU2xvd0ZvcihWTSYgdm0s
IENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvKQogewogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxKSVRTdHViUm91dGluZVB0clRhZz4gdmlydHVhbFRodW5rID0gdmlydHVhbFRodW5rRm9yKHZt
LCBjYWxsTGlua0luZm8pOwotICAgIGxpbmtTbG93Rm9yKHZtLCBjYWxsTGlua0luZm8sIHZpcnR1
YWxUaHVuayk7CisgICAgbGlua1Nsb3dQYXRoVG8odm0sIGNhbGxMaW5rSW5mbywgdmlydHVhbFRo
dW5rKTsKICAgICBjYWxsTGlua0luZm8uc2V0U2xvd1N0dWIoR0NBd2FyZUpJVFN0dWJSb3V0aW5l
OjpjcmVhdGUodmlydHVhbFRodW5rLCB2bSkpOwogfQogCkBAIC0xMjE3LDExICsxMjE5LDExIEBA
IHN0YXRpYyBKU0NlbGwqIHdlYkFzc2VtYmx5T3duZXIoSlNDZWxsKiAKICNlbmRpZiAvLyBFTkFC
TEUoV0VCQVNTRU1CTFkpCiB9CiAKLXZvaWQgbGlua0ZvcigKK3ZvaWQgbGlua01vbm9tb3JwaGlj
Q2FsbCgKICAgICBWTSYgdm0sIENhbGxGcmFtZSogY2FsbEZyYW1lLCBDYWxsTGlua0luZm8mIGNh
bGxMaW5rSW5mbywgQ29kZUJsb2NrKiBjYWxsZWVDb2RlQmxvY2ssCiAgICAgSlNPYmplY3QqIGNh
bGxlZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGNvZGVQdHIpCiB7Ci0g
ICAgQVNTRVJUKCFjYWxsTGlua0luZm8uc3R1YigpKTsKKyAgICBSRUxFQVNFX0FTU0VSVCghY2Fs
bExpbmtJbmZvLnN0dWIoKSk7CiAKICAgICBDYWxsRnJhbWUqIGNhbGxlckZyYW1lID0gY2FsbEZy
YW1lLT5jYWxsZXJGcmFtZSgpOwogICAgIC8vIE91ciBjYWxsZXIgbXVzdCBoYXZlIGEgY2VsbCBm
b3IgYSBjYWxsZWUuIFdoZW4gY2FsbGluZwpAQCAtMTIzNSwyNiArMTIzNywyNCBAQCB2b2lkIGxp
bmtGb3IoCiAgICAgQVNTRVJUKG93bmVyKTsKIAogICAgIEFTU0VSVCghY2FsbExpbmtJbmZvLmlz
TGlua2VkKCkpOwotICAgIGNhbGxMaW5rSW5mby5zZXRDYWxsZWUodm0sIG93bmVyLCBjYWxsZWUp
OwotICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoUG9pbnRlcihjYWxsTGlua0luZm8uaG90UGF0
aEJlZ2luKCksIGNhbGxlZSk7CisgICAgY2FsbExpbmtJbmZvLnNldE1vbm9tb3JwaGljQ2FsbGVl
KHZtLCBvd25lciwgY2FsbGVlLCBjb2RlUHRyKTsKICAgICBjYWxsTGlua0luZm8uc2V0TGFzdFNl
ZW5DYWxsZWUodm0sIG93bmVyLCBjYWxsZWUpOworCiAgICAgaWYgKHNob3VsZER1bXBEaXNhc3Nl
bWJseUZvcihjYWxsZXJDb2RlQmxvY2spKQogICAgICAgICBkYXRhTG9nKCJMaW5raW5nIGNhbGwg
aW4gIiwgRnVsbENvZGVPcmlnaW4oY2FsbGVyQ29kZUJsb2NrLCBjYWxsTGlua0luZm8uY29kZU9y
aWdpbigpKSwgIiB0byAiLCBwb2ludGVyRHVtcChjYWxsZWVDb2RlQmxvY2spLCAiLCBlbnRyeXBv
aW50IGF0ICIsIGNvZGVQdHIsICJcbiIpOwogCi0gICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hO
ZWFyQ2FsbChjYWxsTGlua0luZm8uaG90UGF0aE90aGVyKCksIENvZGVMb2NhdGlvbkxhYmVsPEpT
RW50cnlQdHJUYWc+KGNvZGVQdHIpKTsKLQogICAgIGlmIChjYWxsZWVDb2RlQmxvY2spCiAgICAg
ICAgIGNhbGxlZUNvZGVCbG9jay0+bGlua0luY29taW5nQ2FsbChjYWxsZXJGcmFtZSwgJmNhbGxM
aW5rSW5mbyk7CiAKICAgICBpZiAoY2FsbExpbmtJbmZvLnNwZWNpYWxpemF0aW9uS2luZCgpID09
IENvZGVGb3JDYWxsICYmIGNhbGxMaW5rSW5mby5hbGxvd1N0dWJzKCkpIHsKLSAgICAgICAgbGlu
a1Nsb3dGb3Iodm0sIGNhbGxMaW5rSW5mbywgbGlua1BvbHltb3JwaGljQ2FsbFRodW5rR2VuZXJh
dG9yKTsKKyAgICAgICAgbGlua1Nsb3dQYXRoVG8odm0sIGNhbGxMaW5rSW5mbywgbGlua1BvbHlt
b3JwaGljQ2FsbFRodW5rR2VuZXJhdG9yKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAK
ICAgICBsaW5rU2xvd0Zvcih2bSwgY2FsbExpbmtJbmZvKTsKIH0KIAotdm9pZCBsaW5rRGlyZWN0
Rm9yKAordm9pZCBsaW5rRGlyZWN0Q2FsbCgKICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgQ2Fs
bExpbmtJbmZvJiBjYWxsTGlua0luZm8sIENvZGVCbG9jayogY2FsbGVlQ29kZUJsb2NrLAogICAg
IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBjb2RlUHRyKQogewpAQCAtMTI2
OSw5ICsxMjY5LDcgQEAgdm9pZCBsaW5rRGlyZWN0Rm9yKAogICAgIGlmIChzaG91bGREdW1wRGlz
YXNzZW1ibHlGb3IoY2FsbGVyQ29kZUJsb2NrKSkKICAgICAgICAgZGF0YUxvZygiTGlua2luZyBj
YWxsIGluICIsIEZ1bGxDb2RlT3JpZ2luKGNhbGxlckNvZGVCbG9jaywgY2FsbExpbmtJbmZvLmNv
ZGVPcmlnaW4oKSksICIgdG8gIiwgcG9pbnRlckR1bXAoY2FsbGVlQ29kZUJsb2NrKSwgIiwgZW50
cnlwb2ludCBhdCAiLCBjb2RlUHRyLCAiXG4iKTsKIAotICAgIGlmIChjYWxsTGlua0luZm8uY2Fs
bFR5cGUoKSA9PSBDYWxsTGlua0luZm86OkRpcmVjdFRhaWxDYWxsKQotICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6cmVwYXRjaEp1bXBUb05vcChjYWxsTGlua0luZm8ucGF0Y2hhYmxlSnVtcCgpKTsK
LSAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaE5lYXJDYWxsKGNhbGxMaW5rSW5mby5ob3RQYXRo
T3RoZXIoKSwgQ29kZUxvY2F0aW9uTGFiZWw8SlNFbnRyeVB0clRhZz4oY29kZVB0cikpOworICAg
IGNhbGxMaW5rSW5mby5zZXREaXJlY3RDYWxsVGFyZ2V0KENvZGVMb2NhdGlvbkxhYmVsPEpTRW50
cnlQdHJUYWc+KGNvZGVQdHIpKTsKIAogICAgIGlmIChjYWxsZWVDb2RlQmxvY2spCiAgICAgICAg
IGNhbGxlZUNvZGVCbG9jay0+bGlua0luY29taW5nQ2FsbChjYWxsRnJhbWUsICZjYWxsTGlua0lu
Zm8pOwpAQCAtMTI4OSwyMSArMTI4NywxNiBAQCBzdGF0aWMgdm9pZCByZXZlcnRDYWxsKFZNJiB2
bSwgQ2FsbExpbmtJCiB7CiAgICAgaWYgKGNhbGxMaW5rSW5mby5pc0RpcmVjdCgpKSB7CiAgICAg
ICAgIGNhbGxMaW5rSW5mby5jbGVhckNvZGVCbG9jaygpOwotICAgICAgICBpZiAoIWNhbGxMaW5r
SW5mby5jbGVhcmVkQnlKZXR0aXNvbigpKSB7Ci0gICAgICAgICAgICBpZiAoY2FsbExpbmtJbmZv
LmNhbGxUeXBlKCkgPT0gQ2FsbExpbmtJbmZvOjpEaXJlY3RUYWlsQ2FsbCkKLSAgICAgICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEp1bXAoY2FsbExpbmtJbmZvLnBhdGNoYWJsZUp1
bXAoKSwgY2FsbExpbmtJbmZvLnNsb3dQYXRoU3RhcnQoKSk7Ci0gICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hOZWFyQ2FsbChjYWxsTGlua0lu
Zm8uaG90UGF0aE90aGVyKCksIGNhbGxMaW5rSW5mby5zbG93UGF0aFN0YXJ0KCkpOwotICAgICAg
ICB9CisgICAgICAgIGlmICghY2FsbExpbmtJbmZvLmNsZWFyZWRCeUpldHRpc29uKCkpCisgICAg
ICAgICAgICBjYWxsTGlua0luZm8uaW5pdGlhbGl6ZURpcmVjdENhbGwoKTsKICAgICB9IGVsc2Ug
ewogICAgICAgICBpZiAoIWNhbGxMaW5rSW5mby5jbGVhcmVkQnlKZXR0aXNvbigpKSB7Ci0gICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmV2ZXJ0SnVtcFJlcGxhY2VtZW50VG9CcmFuY2hQdHJX
aXRoUGF0Y2goCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnN0YXJ0T2ZCcmFuY2hQ
dHJXaXRoUGF0Y2hPblJlZ2lzdGVyKGNhbGxMaW5rSW5mby5ob3RQYXRoQmVnaW4oKSksCi0gICAg
ICAgICAgICAgICAgY2FsbExpbmtJbmZvLmNhbGxlZUdQUigpLCBudWxscHRyKTsKLSAgICAgICAg
ICAgIGxpbmtTbG93Rm9yKHZtLCBjYWxsTGlua0luZm8sIGNvZGVSZWYpOwotICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hQb2ludGVyKGNhbGxMaW5rSW5mby5ob3RQYXRoQmVnaW4o
KSwgbnVsbHB0cik7CisgICAgICAgICAgICBsaW5rU2xvd1BhdGhUbyh2bSwgY2FsbExpbmtJbmZv
LCBjb2RlUmVmKTsKKworICAgICAgICAgICAgaWYgKGNhbGxMaW5rSW5mby5zdHViKCkpCisgICAg
ICAgICAgICAgICAgY2FsbExpbmtJbmZvLnJldmVydENhbGxUb1N0dWIoKTsKICAgICAgICAgfQot
ICAgICAgICBjYWxsTGlua0luZm8uY2xlYXJDYWxsZWUoKTsKKyAgICAgICAgY2FsbExpbmtJbmZv
LmNsZWFyQ2FsbGVlKCk7IC8vIFRoaXMgYWxzbyBjbGVhcnMgdGhlIGlubGluZSBjYWNoZSBib3Ro
IGZvciBkYXRhIGFuZCBjb2RlLWJhc2VkIGNhY2hlcy4KICAgICB9CiAgICAgY2FsbExpbmtJbmZv
LmNsZWFyU2VlbigpOwogICAgIGNhbGxMaW5rSW5mby5jbGVhclN0dWIoKTsKQEAgLTEzMTIsOSAr
MTMwNSw5IEBAIHN0YXRpYyB2b2lkIHJldmVydENhbGwoVk0mIHZtLCBDYWxsTGlua0kKICAgICAg
ICAgY2FsbExpbmtJbmZvLnJlbW92ZSgpOwogfQogCi12b2lkIHVubGlua0ZvcihWTSYgdm0sIENh
bGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvKQordm9pZCB1bmxpbmtDYWxsKFZNJiB2bSwgQ2FsbExp
bmtJbmZvJiBjYWxsTGlua0luZm8pCiB7Ci0gICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6ZHVtcERp
c2Fzc2VtYmx5KCksICJVbmxpbmtpbmcgY2FsbCBhdCAiLCBjYWxsTGlua0luZm8uaG90UGF0aE90
aGVyKCkpOworICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OmR1bXBEaXNhc3NlbWJseSgpLCAiVW5s
aW5raW5nIGNhbGwgYXQgIiwgY2FsbExpbmtJbmZvLmZhc3RQYXRoU3RhcnQoKSk7CiAgICAgCiAg
ICAgcmV2ZXJ0Q2FsbCh2bSwgY2FsbExpbmtJbmZvLCB2bS5nZXRDVElTdHViKGxpbmtDYWxsVGh1
bmtHZW5lcmF0b3IpLnJldGFnZ2VkPEpJVFN0dWJSb3V0aW5lUHRyVGFnPigpKTsKIH0KQEAgLTEz
NTYsNiArMTM0OSwxMSBAQCB2b2lkIGxpbmtQb2x5bW9ycGhpY0NhbGwoSlNHbG9iYWxPYmplY3Qq
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKKyAgICBpZiAodHJ1ZSkgeworICAgICAgICBsaW5r
VmlydHVhbEZvcih2bSwgY2FsbEZyYW1lLCBjYWxsTGlua0luZm8pOworICAgICAgICByZXR1cm47
CisgICAgfQorCiAgICAgLy8gT3VyIGNhbGxlciBtdXN0IGJlIGhhdmUgYSBjZWxsIGZvciBhIGNh
bGxlZS4gV2hlbiBjYWxsaW5nCiAgICAgLy8gdGhpcyBmcm9tIFdhc20sIHdlIGVuc3VyZSB0aGUg
Y2FsbGVlIGlzIGEgY2VsbC4KICAgICBBU1NFUlQoY2FsbGVyRnJhbWUtPmNhbGxlZSgpLmlzQ2Vs
bCgpKTsKQEAgLTE1ODAsNyArMTU3OCw3IEBAIHZvaWQgbGlua1BvbHltb3JwaGljQ2FsbChKU0ds
b2JhbE9iamVjdCoKICAgICB9CiAgICAgc3R1YkppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3Rl
ZEltbVB0cihnbG9iYWxPYmplY3QpLCBHUFJJbmZvOjpyZWdUMyk7CiAgICAgc3R1YkppdC5tb3Zl
KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cigmY2FsbExpbmtJbmZvKSwgR1BSSW5mbzo6cmVn
VDIpOwotICAgIHN0dWJKaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoY2FsbExp
bmtJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbigpLnVudGFnZ2VkRXhlY3V0YWJsZUFkZHJlc3MoKSks
IEdQUkluZm86OnJlZ1Q0KTsKKyAgICBzdHViSml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tUHRyKGNhbGxMaW5rSW5mby5kb25lTG9jYXRpb24oKS51bnRhZ2dlZEV4ZWN1dGFibGVBZGRy
ZXNzKCkpLCBHUFJJbmZvOjpyZWdUNCk7CiAgICAgCiAgICAgc3R1YkppdC5yZXN0b3JlUmV0dXJu
QWRkcmVzc0JlZm9yZVJldHVybihHUFJJbmZvOjpyZWdUNCk7CiAgICAgQXNzZW1ibHlIZWxwZXJz
OjpKdW1wIHNsb3cgPSBzdHViSml0Lmp1bXAoKTsKQEAgLTE2MDMsMjkgKzE2MDEsMjMgQEAgdm9p
ZCBsaW5rUG9seW1vcnBoaWNDYWxsKEpTR2xvYmFsT2JqZWN0KgogICAgICAgICBwYXRjaEJ1ZmZl
ci5saW5rKGNhbGxUb0NvZGVQdHIuY2FsbCwgRnVuY3Rpb25QdHI8SlNFbnRyeVB0clRhZz4oY2Fs
bFRvQ29kZVB0ci5jb2RlUHRyKSk7CiAjZW5kaWYKICAgICB9Ci0gICAgaWYgKGlzV2ViQXNzZW1i
bHkgfHwgSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGNhbGxlckNvZGVCbG9jay0+aml0VHlwZSgp
KSkKLSAgICAgICAgcGF0Y2hCdWZmZXIubGluayhkb25lLCBjYWxsTGlua0luZm8uY2FsbFJldHVy
bkxvY2F0aW9uKCkubGFiZWxBdE9mZnNldCgwKSk7Ci0gICAgZWxzZQotICAgICAgICBwYXRjaEJ1
ZmZlci5saW5rKGRvbmUsIGNhbGxMaW5rSW5mby5ob3RQYXRoT3RoZXIoKS5sYWJlbEF0T2Zmc2V0
KDApKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKGRvbmUsIGNhbGxMaW5rSW5mby5kb25lTG9jYXRp
b24oKSk7CiAgICAgcGF0Y2hCdWZmZXIubGluayhzbG93LCBDb2RlTG9jYXRpb25MYWJlbDxKSVRU
aHVua1B0clRhZz4odm0uZ2V0Q1RJU3R1YihsaW5rUG9seW1vcnBoaWNDYWxsVGh1bmtHZW5lcmF0
b3IpLmNvZGUoKSkpOwogICAgIAogICAgIGF1dG8gc3R1YlJvdXRpbmUgPSBhZG9wdFJlZigqbmV3
IFBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lKAogICAgICAgICBGSU5BTElaRV9DT0RFX0ZPUigK
ICAgICAgICAgICAgIGNhbGxlckNvZGVCbG9jaywgcGF0Y2hCdWZmZXIsIEpJVFN0dWJSb3V0aW5l
UHRyVGFnLAogICAgICAgICAgICAgIlBvbHltb3JwaGljIGNhbGwgc3R1YiBmb3IgJXMsIHJldHVy
biBwb2ludCAlcCwgdGFyZ2V0cyAlcyIsCi0gICAgICAgICAgICAgICAgaXNXZWJBc3NlbWJseSA/
ICJXZWJBc3NlbWJseSIgOiB0b0NTdHJpbmcoKmNhbGxlckNvZGVCbG9jaykuZGF0YSgpLCBjYWxs
TGlua0luZm8uY2FsbFJldHVybkxvY2F0aW9uKCkubGFiZWxBdE9mZnNldCgwKS5leGVjdXRhYmxl
QWRkcmVzcygpLAorICAgICAgICAgICAgICAgIGlzV2ViQXNzZW1ibHkgPyAiV2ViQXNzZW1ibHki
IDogdG9DU3RyaW5nKCpjYWxsZXJDb2RlQmxvY2spLmRhdGEoKSwgY2FsbExpbmtJbmZvLmRvbmVM
b2NhdGlvbigpLmV4ZWN1dGFibGVBZGRyZXNzKCksCiAgICAgICAgICAgICAgICAgdG9DU3RyaW5n
KGxpc3REdW1wKGNhbGxDYXNlcykpLmRhdGEoKSksCiAgICAgICAgIHZtLCBvd25lciwgY2FsbEZy
YW1lLT5jYWxsZXJGcmFtZSgpLCBjYWxsTGlua0luZm8sIGNhbGxDYXNlcywKICAgICAgICAgV1RG
TW92ZShmYXN0Q291bnRzKSkpOwotICAgIAotICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBsYWNlV2l0
aEp1bXAoCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpzdGFydE9mQnJhbmNoUHRyV2l0aFBhdGNo
T25SZWdpc3RlcihjYWxsTGlua0luZm8uaG90UGF0aEJlZ2luKCkpLAotICAgICAgICBDb2RlTG9j
YXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4oc3R1YlJvdXRpbmUtPmNvZGUoKS5jb2Rl
KCkpKTsKKwogICAgIC8vIFRoZSBvcmlnaW5hbCBzbG93IHBhdGggaXMgdW5yZWFjaGFibGUgb24g
NjQtYml0cywgYnV0IHN0aWxsCiAgICAgLy8gcmVhY2hhYmxlIG9uIDMyLWJpdHMgc2luY2UgYSBu
b24tY2VsbCBjYWxsZWUgd2lsbCBhbHdheXMKICAgICAvLyB0cmlnZ2VyIHRoZSBzbG93IHBhdGgK
ICAgICBsaW5rU2xvd0Zvcih2bSwgY2FsbExpbmtJbmZvKTsKLSAgICAKKwogICAgIC8vIElmIHRo
ZXJlIGhhZCBiZWVuIGEgcHJldmlvdXMgc3R1YiByb3V0aW5lLCB0aGF0IG9uZSB3aWxsIGRpZSBh
cyBzb29uIGFzIHRoZSBHQyBydW5zIGFuZCBzZWVzCiAgICAgLy8gdGhhdCBpdCdzIG5vIGxvbmdl
ciBvbiBzdGFjay4KICAgICBjYWxsTGlua0luZm8uc2V0U3R1YihXVEZNb3ZlKHN0dWJSb3V0aW5l
KSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guaAkocmV2aXNpb24gMjc2OTc3
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmgJKHdvcmtpbmcgY29weSkK
QEAgLTU2LDEwICs1NiwxMCBAQCB2b2lkIHJlcGF0Y2hJbkJ5SUQoSlNHbG9iYWxPYmplY3QqLCBD
b2RlCiB2b2lkIHJlcGF0Y2hDaGVja1ByaXZhdGVCcmFuZChKU0dsb2JhbE9iamVjdCosIENvZGVC
bG9jayosIEpTT2JqZWN0KiwgQ2FjaGVhYmxlSWRlbnRpZmllciwgU3RydWN0dXJlU3R1YkluZm8m
KTsKIHZvaWQgcmVwYXRjaFNldFByaXZhdGVCcmFuZChKU0dsb2JhbE9iamVjdCosIENvZGVCbG9j
ayosIEpTT2JqZWN0KiwgU3RydWN0dXJlKiwgQ2FjaGVhYmxlSWRlbnRpZmllciwgU3RydWN0dXJl
U3R1YkluZm8mKTsKIHZvaWQgcmVwYXRjaEluc3RhbmNlT2YoSlNHbG9iYWxPYmplY3QqLCBDb2Rl
QmxvY2sqLCBKU1ZhbHVlIHZhbHVlLCBKU1ZhbHVlIHByb3RvdHlwZSwgU3RydWN0dXJlU3R1Yklu
Zm8mLCBib29sIHdhc0ZvdW5kKTsKLXZvaWQgbGlua0ZvcihWTSYsIENhbGxGcmFtZSosIENhbGxM
aW5rSW5mbyYsIENvZGVCbG9jayosIEpTT2JqZWN0KiBjYWxsZWUsIE1hY3JvQXNzZW1ibGVyQ29k
ZVB0cjxKU0VudHJ5UHRyVGFnPik7Ci12b2lkIGxpbmtEaXJlY3RGb3IoQ2FsbEZyYW1lKiwgQ2Fs
bExpbmtJbmZvJiwgQ29kZUJsb2NrKiwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJU
YWc+KTsKK3ZvaWQgbGlua01vbm9tb3JwaGljQ2FsbChWTSYsIENhbGxGcmFtZSosIENhbGxMaW5r
SW5mbyYsIENvZGVCbG9jayosIEpTT2JqZWN0KiBjYWxsZWUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0
cjxKU0VudHJ5UHRyVGFnPik7Cit2b2lkIGxpbmtEaXJlY3RDYWxsKENhbGxGcmFtZSosIENhbGxM
aW5rSW5mbyYsIENvZGVCbG9jayosIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFn
Pik7CiB2b2lkIGxpbmtTbG93Rm9yKENhbGxGcmFtZSosIENhbGxMaW5rSW5mbyYpOwotdm9pZCB1
bmxpbmtGb3IoVk0mLCBDYWxsTGlua0luZm8mKTsKK3ZvaWQgdW5saW5rQ2FsbChWTSYsIENhbGxM
aW5rSW5mbyYpOwogdm9pZCBsaW5rUG9seW1vcnBoaWNDYWxsKEpTR2xvYmFsT2JqZWN0KiwgQ2Fs
bEZyYW1lKiwgQ2FsbExpbmtJbmZvJiwgQ2FsbFZhcmlhbnQpOwogdm9pZCByZXNldEdldEJ5KENv
ZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJiwgR2V0QnlLaW5kKTsKIHZvaWQgcmVzZXRQdXRC
eUlEKENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJik7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcAkocmV2aXNpb24gMjc2OTc3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYw
MCw5ICs2MDAsOSBAQCB2b2lkIE9wdGlvbnM6OmluaXRpYWxpemUoKQogICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlQoT3B0aW9uczo6YWRkcmVzc09mT3B0aW9uKGZvcmNlT1NSRXhpdFRvTExJbnRJ
RCkgPT0gICZPcHRpb25zOjpmb3JjZU9TUkV4aXRUb0xMSW50KCkpOwogICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlQoT3B0aW9uczo6YWRkcmVzc09mT3B0aW9uRGVmYXVsdChmb3JjZU9TUkV4aXRU
b0xMSW50SUQpID09ICAmT3B0aW9uczo6Zm9yY2VPU1JFeGl0VG9MTEludERlZmF1bHQoKSk7CiAK
LSNpZm5kZWYgTkRFQlVHCisvLyNpZm5kZWYgTkRFQlVHCiAgICAgICAgICAgICBDb25maWc6OmVu
YWJsZVJlc3RyaWN0ZWRPcHRpb25zKCk7Ci0jZW5kaWYKKy8vI2VuZGlmCiAgICAgICAgICAgICAv
LyBJbml0aWFsaXplIGVhY2ggb2YgdGhlIG9wdGlvbnMgd2l0aCB0aGVpciBkZWZhdWx0IHZhbHVl
czoKICNkZWZpbmUgSU5JVF9PUFRJT04odHlwZV8sIG5hbWVfLCBkZWZhdWx0VmFsdWVfLCBhdmFp
bGFiaWxpdHlfLCBkZXNjcmlwdGlvbl8pIHsgXAogICAgICAgICAgICAgICAgIGF1dG8gdmFsdWUg
PSBkZWZhdWx0VmFsdWVfOyBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9W
TS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3Bw
CShyZXZpc2lvbiAyNzY5NzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE3MDgsNCArMTcwOCw2IEBAIHZvaWQgVk06OnJlbW92ZUxv
b3BIaW50RXhlY3V0aW9uQ291bnRlcigKICAgICAgICAgbV9sb29wSGludEV4ZWN1dGlvbkNvdW50
cy5yZW1vdmUoaXRlcik7CiB9CiAKK3VpbnQ2NF90IGdfbnVtYmVyT2ZPU1JFeGl0czsKKwogfSAv
LyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHJldmlz
aW9uIDI3Njk3NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEzMDAsNCArMTMwMCw2IEBAIGV4dGVybiAiQyIgdm9pZCBzYW5pdGl6ZVN0
YWNrRm9yVk1JbXBsKFYKIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgc2FuaXRpemVTdGFja0ZvclZN
KFZNJik7CiB2b2lkIGxvZ1Nhbml0aXplU3RhY2soVk0mKTsKIAorZXh0ZXJuIHVpbnQ2NF90IGdf
bnVtYmVyT2ZPU1JFeGl0czsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvdG9vbHMvSlNEb2xsYXJWTS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3Rvb2xzL0pTRG9sbGFyVk0uY3BwCShyZXZpc2lvbiAyNzY5NzcpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvSlNEb2xsYXJWTS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI3LDkgKzI3LDExIEBACiAjaW5jbHVkZSAiSlNEb2xsYXJWTS5oIgogCiAjaW5jbHVkZSAi
QXJyYXlQcm90b3R5cGUuaCIKKyNpbmNsdWRlICJBc3NlbWJsZXJDb21tb24uaCIKICNpbmNsdWRl
ICJCdWlsdGluTmFtZXMuaCIKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKICNpbmNsdWRlICJDb250
cm9sRmxvd1Byb2ZpbGVyLmgiCisjaW5jbHVkZSAiREZHV29ya2xpc3QuaCIKICNpbmNsdWRlICJE
T01BdHRyaWJ1dGVHZXR0ZXJTZXR0ZXIuaCIKICNpbmNsdWRlICJET01KSVRHZXR0ZXJTZXR0ZXIu
aCIKICNpbmNsdWRlICJEZWJ1Z2dlci5oIgpAQCAtNDgsOSArNTAsMTEgQEAKICNpbmNsdWRlICJT
bmlwcGV0UGFyYW1zLmgiCiAjaW5jbHVkZSAiVHlwZVByb2ZpbGVyLmgiCiAjaW5jbHVkZSAiVHlw
ZVByb2ZpbGVyTG9nLmgiCisjaW5jbHVkZSAiVk0uaCIKICNpbmNsdWRlICJWTUluc3BlY3Rvci5o
IgogI2luY2x1ZGUgIlZNVHJhcHNJbmxpbmVzLmgiCiAjaW5jbHVkZSAiV2FzbUNhcGFiaWxpdGll
cy5oIgorI2luY2x1ZGUgIldhc21Xb3JrbGlzdC5oIgogI2luY2x1ZGUgPHVuaWNvZGUvdXZlcnNp
b24uaD4KICNpbmNsdWRlIDx3dGYvQXRvbWljcy5oPgogI2luY2x1ZGUgPHd0Zi9DUFVUaW1lLmg+
CkBAIC0yMDA4LDYgKzIwMTIsMjEgQEAgc3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04o
ZnVuY3Rpbwogc3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04oZnVuY3Rpb25Jc0dpZ2Fj
YWdlRW5hYmxlZCk7CiBzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTihmdW5jdGlvblRv
VW5jYWNoZWFibGVEaWN0aW9uYXJ5KTsKIHN0YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9O
KGZ1bmN0aW9uSXNQcml2YXRlU3ltYm9sKTsKK3N0YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZVTkNU
SU9OKGZ1bmN0aW9uRHVtcFdvcmtsaXN0U3RhdGUpOworc3RhdGljIEpTQ19ERUNMQVJFX0hPU1Rf
RlVOQ1RJT04oZnVuY3Rpb25QcmVjaXNlVGltZSk7CitzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9G
VU5DVElPTihmdW5jdGlvbk51bWJlck9mT1NSRXhpdHMpOworc3RhdGljIEpTQ19ERUNMQVJFX0hP
U1RfRlVOQ1RJT04oZnVuY3Rpb25OdW1iZXJPZkNhY2hlRmx1c2hlcyk7CitzdGF0aWMgSlNDX0RF
Q0xBUkVfSE9TVF9GVU5DVElPTihmdW5jdGlvbk51bWJlck9mUmVwbGFjZVdpdGhWTUhhbHRzKTsK
K3N0YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9uTnVtYmVyT2ZSZXBsYWNl
V2l0aEp1bXBzKTsKK3N0YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9uTnVt
YmVyT2ZSZXBsYWNlV2l0aExvYWRzKTsKK3N0YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9O
KGZ1bmN0aW9uTnVtYmVyT2ZSZXBsYWNlV2l0aEFkZHJlc3NDb21wdXRhdGlvbnMpOworc3RhdGlj
IEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04oZnVuY3Rpb25OdW1iZXJPZlNldFBvaW50ZXJzKTsK
K3N0YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9uTnVtYmVyT2ZSZXBhdGNo
SW50MzJzKTsKK3N0YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9uTnVtYmVy
T2ZSZWxpbmtKdW1wcyk7CitzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTihmdW5jdGlv
bk51bWJlck9mUmVsaW5rQ2FsbHMpOworc3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04o
ZnVuY3Rpb25OdW1iZXJPZlJlcGF0Y2hDb21wYWN0cyk7CitzdGF0aWMgSlNDX0RFQ0xBUkVfSE9T
VF9GVU5DVElPTihmdW5jdGlvbk51bWJlck9mTmV3Q29kZUZpbmFsaXphdGlvbnMpOworc3RhdGlj
IEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04oZnVuY3Rpb25OdW1iZXJPZkluUGxhY2VGaW5hbGl6
YXRpb25zKTsKIAogY29uc3QgQ2xhc3NJbmZvIEpTRG9sbGFyVk06OnNfaW5mbyA9IHsgIkRvbGxh
clZNIiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJM
RShKU0RvbGxhclZNKSB9OwogCkBAIC0zNTc2LDYgKzM1OTUsMTE1IEBAIEpTQ19ERUZJTkVfSE9T
VF9GVU5DVElPTihmdW5jdGlvbklzUHJpdmEKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
Qm9vbGVhbihhc1N5bWJvbChjYWxsRnJhbWUtPmFyZ3VtZW50KDApKS0+dWlkKCkuaXNQcml2YXRl
KCkpKTsKIH0KIAorSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9uRHVtcFdvcmtsaXN0
U3RhdGUsIChKU0dsb2JhbE9iamVjdCosIENhbGxGcmFtZSopKQoreworICAgIERvbGxhclZNQXNz
ZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7CisKKyAgICBkYXRhTG9nKCJERkcgV29ya2xpc3Q6ICIsIHBv
aW50ZXJEdW1wKERGRzo6ZXhpc3RpbmdHbG9iYWxERkdXb3JrbGlzdE9yTnVsbCgpKSwgIlxuIik7
CisgICAgZGF0YUxvZygiRlRMIFdvcmtsaXN0OiAiLCBwb2ludGVyRHVtcChERkc6OmV4aXN0aW5n
R2xvYmFsRlRMV29ya2xpc3RPck51bGwoKSksICJcbiIpOworICAgIC8vZGF0YUxvZygiV2FzbSBX
b3JrbGlzdDogIiwgcG9pbnRlckR1bXAoV2FzbTo6ZXhpc3RpbmdXb3JrbGlzdE9yTnVsbCgpKSwg
IlxuIik7CisKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworfQor
CitKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oZnVuY3Rpb25QcmVjaXNlVGltZSwgKEpTR2xvYmFs
T2JqZWN0KiwgQ2FsbEZyYW1lKikpCit7CisgICAgRG9sbGFyVk1Bc3NlcnRTY29wZSBhc3NlcnRT
Y29wZTsKKworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoV2FsbFRpbWU6Om5v
dygpLnNlY29uZHNTaW5jZUVwb2NoKCkudmFsdWUoKSkpOworfQorCitKU0NfREVGSU5FX0hPU1Rf
RlVOQ1RJT04oZnVuY3Rpb25OdW1iZXJPZk9TUkV4aXRzLCAoSlNHbG9iYWxPYmplY3QqLCBDYWxs
RnJhbWUqKSkKK3sKKyAgICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOworCisgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihnX251bWJlck9mT1NSRXhpdHMpKTsKK30K
KworSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9uTnVtYmVyT2ZDYWNoZUZsdXNoZXMs
IChKU0dsb2JhbE9iamVjdCosIENhbGxGcmFtZSopKQoreworICAgIERvbGxhclZNQXNzZXJ0U2Nv
cGUgYXNzZXJ0U2NvcGU7CisKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGdf
bnVtYmVyT2ZDYWNoZUZsdXNoZXMpKTsKK30KKworSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGZ1
bmN0aW9uTnVtYmVyT2ZSZXBsYWNlV2l0aFZNSGFsdHMsIChKU0dsb2JhbE9iamVjdCosIENhbGxG
cmFtZSopKQoreworICAgIERvbGxhclZNQXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7CisKKyAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGdfbnVtYmVyT2ZSZXBsYWNlV2l0aFZNSGFs
dHMpKTsKK30KKworSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9uTnVtYmVyT2ZSZXBs
YWNlV2l0aEp1bXBzLCAoSlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUqKSkKK3sKKyAgICBEb2xs
YXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOworCisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc051bWJlcihnX251bWJlck9mUmVwbGFjZVdpdGhKdW1wcykpOworfQorCitKU0NfREVGSU5F
X0hPU1RfRlVOQ1RJT04oZnVuY3Rpb25OdW1iZXJPZlJlcGxhY2VXaXRoTG9hZHMsIChKU0dsb2Jh
bE9iamVjdCosIENhbGxGcmFtZSopKQoreworICAgIERvbGxhclZNQXNzZXJ0U2NvcGUgYXNzZXJ0
U2NvcGU7CisKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGdfbnVtYmVyT2ZS
ZXBsYWNlV2l0aExvYWRzKSk7Cit9CisKK0pTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihmdW5jdGlv
bk51bWJlck9mUmVwbGFjZVdpdGhBZGRyZXNzQ29tcHV0YXRpb25zLCAoSlNHbG9iYWxPYmplY3Qq
LCBDYWxsRnJhbWUqKSkKK3sKKyAgICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOwor
CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihnX251bWJlck9mUmVwbGFjZVdp
dGhBZGRyZXNzQ29tcHV0YXRpb25zKSk7Cit9CisKK0pTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihm
dW5jdGlvbk51bWJlck9mU2V0UG9pbnRlcnMsIChKU0dsb2JhbE9iamVjdCosIENhbGxGcmFtZSop
KQoreworICAgIERvbGxhclZNQXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7CisKKyAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGdfbnVtYmVyT2ZTZXRQb2ludGVycykpOworfQorCitK
U0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oZnVuY3Rpb25OdW1iZXJPZlJlcGF0Y2hJbnQzMnMsIChK
U0dsb2JhbE9iamVjdCosIENhbGxGcmFtZSopKQoreworICAgIERvbGxhclZNQXNzZXJ0U2NvcGUg
YXNzZXJ0U2NvcGU7CisKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGdfbnVt
YmVyT2ZSZXBhdGNoSW50MzJzKSk7Cit9CisKK0pTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihmdW5j
dGlvbk51bWJlck9mUmVsaW5rSnVtcHMsIChKU0dsb2JhbE9iamVjdCosIENhbGxGcmFtZSopKQor
eworICAgIERvbGxhclZNQXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7CisKKyAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGdfbnVtYmVyT2ZSZWxpbmtKdW1wcykpOworfQorCitKU0Nf
REVGSU5FX0hPU1RfRlVOQ1RJT04oZnVuY3Rpb25OdW1iZXJPZlJlbGlua0NhbGxzLCAoSlNHbG9i
YWxPYmplY3QqLCBDYWxsRnJhbWUqKSkKK3sKKyAgICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2Vy
dFNjb3BlOworCisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihnX251bWJlck9m
UmVsaW5rQ2FsbHMpKTsKK30KKworSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9uTnVt
YmVyT2ZSZXBhdGNoQ29tcGFjdHMsIChKU0dsb2JhbE9iamVjdCosIENhbGxGcmFtZSopKQorewor
ICAgIERvbGxhclZNQXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7CisKKyAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzTnVtYmVyKGdfbnVtYmVyT2ZSZXBhdGNoQ29tcGFjdHMpKTsKK30KKworSlND
X0RFRklORV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9uTnVtYmVyT2ZOZXdDb2RlRmluYWxpemF0aW9u
cywgKEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1lKikpCit7CisgICAgRG9sbGFyVk1Bc3NlcnRT
Y29wZSBhc3NlcnRTY29wZTsKKworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIo
Z19udW1iZXJPZk5ld0NvZGVGaW5hbGl6YXRpb25zKSk7Cit9CisKK0pTQ19ERUZJTkVfSE9TVF9G
VU5DVElPTihmdW5jdGlvbk51bWJlck9mSW5QbGFjZUZpbmFsaXphdGlvbnMsIChKU0dsb2JhbE9i
amVjdCosIENhbGxGcmFtZSopKQoreworICAgIERvbGxhclZNQXNzZXJ0U2NvcGUgYXNzZXJ0U2Nv
cGU7CisKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGdfbnVtYmVyT2ZJblBs
YWNlRmluYWxpemF0aW9ucykpOworfQorCiBjb25zdGV4cHIgdW5zaWduZWQganNEb2xsYXJWTVBy
b3BlcnR5QXR0cmlidXRlcyA9IFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IFByb3BlcnR5
QXR0cmlidXRlOjpEb250RW51bSB8IFByb3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRlOwogCiB2
b2lkIEpTRG9sbGFyVk06OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKQEAgLTM3MzAsNiArMzg1OCwy
MiBAQCB2b2lkIEpTRG9sbGFyVk06OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKIAogICAgIGFkZEZ1
bmN0aW9uKHZtLCAiaXNQcml2YXRlU3ltYm9sIiwgZnVuY3Rpb25Jc1ByaXZhdGVTeW1ib2wsIDEp
OwogCisgICAgYWRkRnVuY3Rpb24odm0sICJkdW1wV29ya2xpc3RTdGF0ZSIsIGZ1bmN0aW9uRHVt
cFdvcmtsaXN0U3RhdGUsIDApOworICAgIGFkZEZ1bmN0aW9uKHZtLCAicHJlY2lzZVRpbWUiLCBm
dW5jdGlvblByZWNpc2VUaW1lLCAwKTsKKyAgICBhZGRGdW5jdGlvbih2bSwgIm51bWJlck9mT1NS
RXhpdHMiLCBmdW5jdGlvbk51bWJlck9mT1NSRXhpdHMsIDApOworICAgIGFkZEZ1bmN0aW9uKHZt
LCAibnVtYmVyT2ZDYWNoZUZsdXNoZXMiLCBmdW5jdGlvbk51bWJlck9mQ2FjaGVGbHVzaGVzLCAw
KTsKKyAgICBhZGRGdW5jdGlvbih2bSwgIm51bWJlck9mUmVwbGFjZVdpdGhWTUhhbHRzIiwgZnVu
Y3Rpb25OdW1iZXJPZlJlcGxhY2VXaXRoVk1IYWx0cywgMCk7CisgICAgYWRkRnVuY3Rpb24odm0s
ICJudW1iZXJPZlJlcGxhY2VXaXRoSnVtcHMiLCBmdW5jdGlvbk51bWJlck9mUmVwbGFjZVdpdGhK
dW1wcywgMCk7CisgICAgYWRkRnVuY3Rpb24odm0sICJudW1iZXJPZlJlcGxhY2VXaXRoTG9hZHMi
LCBmdW5jdGlvbk51bWJlck9mUmVwbGFjZVdpdGhMb2FkcywgMCk7CisgICAgYWRkRnVuY3Rpb24o
dm0sICJudW1iZXJPZlJlcGxhY2VXaXRoQWRkcmVzc0NvbXB1dGF0aW9ucyIsIGZ1bmN0aW9uTnVt
YmVyT2ZSZXBsYWNlV2l0aEFkZHJlc3NDb21wdXRhdGlvbnMsIDApOworICAgIGFkZEZ1bmN0aW9u
KHZtLCAibnVtYmVyT2ZTZXRQb2ludGVycyIsIGZ1bmN0aW9uTnVtYmVyT2ZTZXRQb2ludGVycywg
MCk7CisgICAgYWRkRnVuY3Rpb24odm0sICJudW1iZXJPZlJlcGF0Y2hJbnQzMnMiLCBmdW5jdGlv
bk51bWJlck9mUmVwYXRjaEludDMycywgMCk7CisgICAgYWRkRnVuY3Rpb24odm0sICJudW1iZXJP
ZlJlbGlua0p1bXBzIiwgZnVuY3Rpb25OdW1iZXJPZlJlbGlua0p1bXBzLCAwKTsKKyAgICBhZGRG
dW5jdGlvbih2bSwgIm51bWJlck9mUmVsaW5rQ2FsbHMiLCBmdW5jdGlvbk51bWJlck9mUmVsaW5r
Q2FsbHMsIDApOworICAgIGFkZEZ1bmN0aW9uKHZtLCAibnVtYmVyT2ZSZXBhdGNoQ29tcGFjdHMi
LCBmdW5jdGlvbk51bWJlck9mUmVwYXRjaENvbXBhY3RzLCAwKTsKKyAgICBhZGRGdW5jdGlvbih2
bSwgIm51bWJlck9mTmV3Q29kZUZpbmFsaXphdGlvbnMiLCBmdW5jdGlvbk51bWJlck9mTmV3Q29k
ZUZpbmFsaXphdGlvbnMsIDApOworICAgIGFkZEZ1bmN0aW9uKHZtLCAibnVtYmVyT2ZJblBsYWNl
RmluYWxpemF0aW9ucyIsIGZ1bmN0aW9uTnVtYmVyT2ZJblBsYWNlRmluYWxpemF0aW9ucywgMCk7
CisKICAgICBtX29iamVjdERvaW5nU2lkZUVmZmVjdFB1dFdpdGhvdXRDb3JyZWN0U2xvdFN0YXR1
c1N0cnVjdHVyZS5zZXQodm0sIHRoaXMsIE9iamVjdERvaW5nU2lkZUVmZmVjdFB1dFdpdGhvdXRD
b3JyZWN0U2xvdFN0YXR1czo6Y3JlYXRlU3RydWN0dXJlKHZtLCBnbG9iYWxPYmplY3QsIGpzTnVs
bCgpKSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dhc21Ub0pT
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XYXNtVG9K
Uy5jcHAJKHJldmlzaW9uIDI3Njk3NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L1dhc21Ub0pTLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYxLDE5ICsyNjEsMTggQEAgRXhwZWN0
ZWQ8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPFdhc21FbnRyeQogCiAgICAgQ2FsbExpbmtJbmZvKiBj
YWxsTGlua0luZm8gPSBjYWxsTGlua0luZm9zLmFkZChDb2RlT3JpZ2luKCkpOwogICAgIGNhbGxM
aW5rSW5mby0+c2V0VXBDYWxsKENhbGxMaW5rSW5mbzo6Q2FsbCwgaW1wb3J0SlNDZWxsR1BSUmVn
KTsKLSAgICBKSVQ6OkRhdGFMYWJlbFB0ciB0YXJnZXRUb0NoZWNrOwotICAgIEpJVDo6VHJ1c3Rl
ZEltbVB0ciBpbml0aWFsUmlnaHRWYWx1ZShudWxscHRyKTsKLSAgICBKSVQ6Okp1bXAgc2xvd1Bh
dGggPSBqaXQuYnJhbmNoUHRyV2l0aFBhdGNoKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgaW1w
b3J0SlNDZWxsR1BSUmVnLCB0YXJnZXRUb0NoZWNrLCBpbml0aWFsUmlnaHRWYWx1ZSk7Ci0gICAg
SklUOjpDYWxsIGZhc3RDYWxsID0gaml0Lm5lYXJDYWxsKCk7CisgICAgYXV0byBzbG93UGF0aCA9
IGNhbGxMaW5rSW5mby0+ZW1pdEZhc3RQYXRoKGppdCwgaW1wb3J0SlNDZWxsR1BSUmVnLCBJbnZh
bGlkR1BSUmVnLCBDYWxsTGlua0luZm86OlVzZURhdGFJQzo6Tm8pOworCiAgICAgSklUOjpKdW1w
IGRvbmUgPSBqaXQuanVtcCgpOwogICAgIHNsb3dQYXRoLmxpbmsoJmppdCk7CisgICAgYXV0byBz
bG93UGF0aFN0YXJ0ID0gaml0LmxhYmVsKCk7CiAgICAgLy8gQ2FsbGVlIG5lZWRzIHRvIGJlIGlu
IHJlZ1QwIGhlcmUuCi0gICAgaml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIo
Y2FsbExpbmtJbmZvKSwgR1BSSW5mbzo6cmVnVDIpOyAvLyBMaW5rIGluZm8gbmVlZHMgdG8gYmUg
aW4gcmVnVDIuCiAgICAgaml0LmxvYWRXYXNtQ29udGV4dEluc3RhbmNlKEdQUkluZm86OnJlZ1Qz
KTsKICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDMs
IEluc3RhbmNlOjpvZmZzZXRPZk93bmVyKCkpLCBHUFJJbmZvOjpyZWdUMyk7CiAgICAgaml0Lmxv
YWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QzLCBKU1dlYkFzc2VtYmx5
SW5zdGFuY2U6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCBHUFJJbmZvOjpyZWdUMyk7Ci0gICAg
SklUOjpDYWxsIHNsb3dDYWxsID0gaml0Lm5lYXJDYWxsKCk7CisgICAgY2FsbExpbmtJbmZvLT5l
bWl0U2xvd1BhdGgodm0sIGppdCk7CiAgICAgZG9uZS5saW5rKCZqaXQpOworICAgIGF1dG8gZG9u
ZUxvY2F0aW9uID0gaml0LmxhYmVsKCk7CiAKICAgICBpZiAoc2lnbmF0dXJlLnJldHVybkNvdW50
KCkgPT0gMSkgewogICAgICAgICBzd2l0Y2ggKHNpZ25hdHVyZS5yZXR1cm5UeXBlKDApLmtpbmQp
IHsKQEAgLTQyMSwxMSArNDIwLDkgQEAgRXhwZWN0ZWQ8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPFdh
c21FbnRyeQogICAgIGlmIChVTkxJS0VMWShwYXRjaEJ1ZmZlci5kaWRGYWlsVG9BbGxvY2F0ZSgp
KSkKICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKEJpbmRpbmdGYWlsdXJlOjpPdXRPZk1l
bW9yeSk7CiAKLSAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3dDYWxsLCBGdW5jdGlvblB0cjxKSVRU
aHVua1B0clRhZz4odm0uZ2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5jb2RlKCkp
KTsKLSAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBjYWxsUmV0dXJuTG9j
YXRpb24ocGF0Y2hCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPEpTSW50ZXJuYWxQdHJUYWc+KHNs
b3dDYWxsKSk7Ci0gICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gaG90UGF0
aEJlZ2luKHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4odGFyZ2V0VG9D
aGVjaykpOwotICAgIENvZGVMb2NhdGlvbk5lYXJDYWxsPEpTSW50ZXJuYWxQdHJUYWc+IGhvdFBh
dGhPdGhlciA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxKU0ludGVybmFsUHRyVGFn
PihmYXN0Q2FsbCk7Ci0gICAgY2FsbExpbmtJbmZvLT5zZXRDYWxsTG9jYXRpb25zKGNhbGxSZXR1
cm5Mb2NhdGlvbiwgaG90UGF0aEJlZ2luLCBob3RQYXRoT3RoZXIpOworICAgIGNhbGxMaW5rSW5m
by0+c2V0Q29kZUxvY2F0aW9ucygKKyAgICAgICAgICAgIHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8
SlNJbnRlcm5hbFB0clRhZz4oc2xvd1BhdGhTdGFydCksCisgICAgICAgICAgICBwYXRjaEJ1ZmZl
ci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KGRvbmVMb2NhdGlvbikpOwogCiAgICAgcmV0
dXJuIEZJTkFMSVpFX1dBU01fQ09ERShwYXRjaEJ1ZmZlciwgV2FzbUVudHJ5UHRyVGFnLCAiV2Vi
QXNzZW1ibHktPkphdmFTY3JpcHQgaW1wb3J0WyVpXSAlcyIsIGltcG9ydEluZGV4LCBzaWduYXR1
cmUudG9TdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSk7CiB9CkluZGV4OiBUb29scy9TY3JpcHRzL2Nv
bXBhcmUtcmVzdWx0cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL2NvbXBhcmUtcmVzdWx0
cwkocmV2aXNpb24gMjc2OTc3KQorKysgVG9vbHMvU2NyaXB0cy9jb21wYXJlLXJlc3VsdHMJKHdv
cmtpbmcgY29weSkKQEAgLTI3NCw3ICsyNzQsNyBAQCBkZWYgSmV0U3RyZWFtMlJlc3VsdHMocGF5
bG9hZCk6CiAgICAgYXNzZXJ0IGRldGVjdEpldFN0cmVhbTIocGF5bG9hZCkKIAogICAgIGpzID0g
cGF5bG9hZFsiSmV0U3RyZWFtMi4wIl0KLSAgICBpdGVyYXRpb25zID0gbGVuKGpzWyJ0ZXN0cyJd
WyJnYXVzc2lhbi1ibHVyIl1bIm1ldHJpY3MiXVsiU2NvcmUiXVsiY3VycmVudCJdKQorICAgIGl0
ZXJhdGlvbnMgPSBsZW4oanNbInRlc3RzIl1bInJheXRyYWNlIl1bIm1ldHJpY3MiXVsiU2NvcmUi
XVsiY3VycmVudCJdKQogICAgIHJlc3VsdHMgPSBbXQogICAgIGZvciBpIGluIHJhbmdlKGl0ZXJh
dGlvbnMpOgogICAgICAgICBzY29yZXMgPSBbXQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9iZW5jaG1hcmtfcnVubmVyL2Jyb3dzZXJfZHJpdmVyL29zeF9zYWZhcmlfZHJpdmVyLnB5Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvYmVuY2htYXJrX3J1bm5lci9icm93
c2VyX2RyaXZlci9vc3hfc2FmYXJpX2RyaXZlci5weQkocmV2aXNpb24gMjc2OTc3KQorKysgVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9iZW5jaG1hcmtfcnVubmVyL2Jyb3dzZXJfZHJpdmVyL29zeF9z
YWZhcmlfZHJpdmVyLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0yLDYgKzIsNyBAQAogCiBpbXBvcnQg
bG9nZ2luZwogaW1wb3J0IG9zCitpbXBvcnQgcmUKIGltcG9ydCBzdWJwcm9jZXNzCiBpbXBvcnQg
dGltZQogCkBAIC0yNiw2ICsyNyw5IEBAIGNsYXNzIE9TWFNhZmFyaURyaXZlcihPU1hCcm93c2Vy
RHJpdmVyKToKICAgICBkZWYgbGF1bmNoX3VybChzZWxmLCB1cmwsIG9wdGlvbnMsIGJyb3dzZXJf
YnVpbGRfcGF0aCwgYnJvd3Nlcl9wYXRoKToKICAgICAgICAgYXJncyA9IFsnL0FwcGxpY2F0aW9u
cy9TYWZhcmkuYXBwL0NvbnRlbnRzL01hY09TL1NhZmFyaSddCiAgICAgICAgIGVudiA9IHt9Cisg
ICAgICAgIGZvciBrZXksIHZhbHVlIGluIG9zLmVudmlyb24uaXRlbXMoKToKKyAgICAgICAgICAg
IGlmIHJlLm1hdGNoKHIiXl9fWFBDXyIsIGtleSk6CisgICAgICAgICAgICAgICAgZW52W2tleV0g
PSB2YWx1ZQogICAgICAgICBpZiBicm93c2VyX2J1aWxkX3BhdGg6CiAgICAgICAgICAgICBicm93
c2VyX2J1aWxkX2Fic29sdXRlX3BhdGggPSBvcy5wYXRoLmFic3BhdGgoYnJvd3Nlcl9idWlsZF9w
YXRoKQogICAgICAgICAgICAgc2FmYXJpX2FwcF9pbl9idWlsZF9wYXRoID0gb3MucGF0aC5qb2lu
KGJyb3dzZXJfYnVpbGRfYWJzb2x1dGVfcGF0aCwgJ1NhZmFyaS5hcHAvQ29udGVudHMvTWFjT1Mv
U2FmYXJpJykKQEAgLTM3LDggKzQxLDEwIEBAIGNsYXNzIE9TWFNhZmFyaURyaXZlcihPU1hCcm93
c2VyRHJpdmVyKToKICAgICAgICAgICAgICAgICBhcmdzID0gW3NhZmFyaV9hcHBfaW5fYnVpbGRf
cGF0aF0KIAogICAgICAgICAgICAgaWYgY29udGFpbnNfZnJhbWV3b3JrczoKLSAgICAgICAgICAg
ICAgICBlbnYgPSB7J0RZTERfRlJBTUVXT1JLX1BBVEgnOiBicm93c2VyX2J1aWxkX2Fic29sdXRl
X3BhdGgsICdEWUxEX0xJQlJBUllfUEFUSCc6IGJyb3dzZXJfYnVpbGRfYWJzb2x1dGVfcGF0aCwK
LSAgICAgICAgICAgICAgICAgICAgJ19fWFBDX0RZTERfRlJBTUVXT1JLX1BBVEgnOiBicm93c2Vy
X2J1aWxkX2Fic29sdXRlX3BhdGgsICdfX1hQQ19EWUxEX0xJQlJBUllfUEFUSCc6IGJyb3dzZXJf
YnVpbGRfYWJzb2x1dGVfcGF0aH0KKyAgICAgICAgICAgICAgICBlbnZbJ0RZTERfRlJBTUVXT1JL
X1BBVEgnXSA9IGJyb3dzZXJfYnVpbGRfYWJzb2x1dGVfcGF0aAorICAgICAgICAgICAgICAgIGVu
dlsnRFlMRF9MSUJSQVJZX1BBVEgnXSA9IGJyb3dzZXJfYnVpbGRfYWJzb2x1dGVfcGF0aAorICAg
ICAgICAgICAgICAgIGVudlsnX19YUENfRFlMRF9GUkFNRVdPUktfUEFUSCddID0gYnJvd3Nlcl9i
dWlsZF9hYnNvbHV0ZV9wYXRoCisgICAgICAgICAgICAgICAgZW52WydfX1hQQ19EWUxEX0xJQlJB
UllfUEFUSCddID0gYnJvd3Nlcl9idWlsZF9hYnNvbHV0ZV9wYXRoCiAgICAgICAgICAgICBlbGlm
IG5vdCBoYXNfc2FmYXJpX2FwcDoKICAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oJ0Nv
dWxkIG5vdCBmaW5kIGFueSBmcmFtZXdvcmsgInt9IicuZm9ybWF0KGJyb3dzZXJfYnVpbGRfcGF0
aCkpCiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>428444</attachid>
            <date>2021-05-12 18:14:36 -0700</date>
            <delta_ts>2021-05-12 18:23:45 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>105451</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvSmV0U3RyZWFtMi9KZXRTdHJlYW1Ecml2ZXIuanMKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0yL0pldFN0cmVhbURyaXZlci5q
cwkocmV2aXNpb24gMjc2OTc3KQorKysgUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0yL0pldFN0
cmVhbURyaXZlci5qcwkod29ya2luZyBjb3B5KQpAQCAtNDMsNiArNDMsOCBAQCBpZiAodHlwZW9m
IHRlc3RXb3JzdENhc2VDb3VudE1hcCA9PT0gInVuCiBpZiAodHlwZW9mIGR1bXBKU09OUmVzdWx0
cyA9PT0gInVuZGVmaW5lZCIpCiAgICAgdmFyIGR1bXBKU09OUmVzdWx0cyA9IGZhbHNlOwogCisv
L3ZhciB0ZXN0TGlzdCA9IFsiZGVsdGEtYmx1ZSIsICJlYXJsZXktYm95ZXIiLCAicmljaGFyZHMi
LCAicmF5dHJhY2UiXTsKKwogLy8gVXNlZCBmb3IgdGhlIHByb21pc2UgcmVwcmVzZW50aW5nIHRo
ZSBjdXJyZW50IGJlbmNobWFyayBydW4uCiB0aGlzLmN1cnJlbnRSZXNvbHZlID0gbnVsbDsKIHRo
aXMuY3VycmVudFJlamVjdCA9IG51bGw7CkBAIC0yNzQsNiArMjc2LDEwIEBAIGNsYXNzIERyaXZl
ciB7CiAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coYCR7Y2F0ZWdvcnl9OiAke3VpRnJpZW5k
bHlOdW1iZXIoZ2VvbWVhbihzY29yZXMpKX1gKTsKIAogICAgICAgICAgICAgY29uc29sZS5sb2co
IlxuVG90YWwgU2NvcmU6ICIsIHVpRnJpZW5kbHlOdW1iZXIoZ2VvbWVhbihhbGxTY29yZXMpKSwg
IlxuIik7CisgICAgICAgICAgICBpZiAodHlwZW9mICR2bSAhPT0gInVuZGVmaW5lZCIpIHsKKyAg
ICAgICAgICAgICAgICBjb25zb2xlLmxvZygiXG5cbnRvdGFsIGNhY2hlIGZsdXNoZXM6ICIsICR2
bS5udW1iZXJPZkNhY2hlRmx1c2hlcygpLCAiXG4iKTsKKyAgICAgICAgICAgICAgICBjb25zb2xl
LmxvZygiXG5cbnRvdGFsIE9TUiBleGl0czogIiwgJHZtLm51bWJlck9mT1NSRXhpdHMoKSwgIlxu
Iik7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KIAogICAgICAgICB0aGlzLnJlcG9ydFNjb3Jl
VG9SdW5CZW5jaG1hcmtSdW5uZXIoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3Vy
Y2VzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQJ
KHJldmlzaW9uIDI3Njk3NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAko
d29ya2luZyBjb3B5KQpAQCAtMSw0ICsxLDQgQEAKLS8vIENvcHlyaWdodCAoQykgMjAxNy0yMDE5
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoQykgMjAxNy0y
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vCiAvLyBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKIC8v
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtNDYsNiArNDYsNyBAQCBBUEkvT3BhcXVlSlNTdHJpbmcuY3BwCiAKIGFz
c2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmNwcAogYXNzZW1ibGVyL0Fzc2VtYmxlckJ1
ZmZlci5jcHAKK2Fzc2VtYmxlci9Bc3NlbWJsZXJDb21tb24uY3BwCiBhc3NlbWJsZXIvQ1BVLmNw
cAogYXNzZW1ibGVyL0pJVE9wZXJhdGlvbkxpc3QuY3BwCiBhc3NlbWJsZXIvTGlua0J1ZmZlci5j
cHAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyNzY5NzcpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjg5MSw2ICsyODkxLDcgQEAKIAkJMEY5QzAzRDQx
RTk0NzZGMDAwQ0Q5MTI1IC8qIEFpclRtcFNldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBBaXJUbXBTZXQuaDsgcGF0aCA9IGIzL2Fpci9BaXJUbXBTZXQuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5Q0FCQzYxREI1NEE3NjAwMDhFODNCIC8qIEFpclBhZElu
dGVyZmVyZW5jZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBBaXJQ
YWRJbnRlcmZlcmVuY2UuY3BwOyBwYXRoID0gYjMvYWlyL0FpclBhZEludGVyZmVyZW5jZS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOUNBQkM3MURCNTRBNzYwMDA4RTgzQiAv
KiBBaXJQYWRJbnRlcmZlcmVuY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
QWlyUGFkSW50ZXJmZXJlbmNlLmg7IHBhdGggPSBiMy9haXIvQWlyUGFkSW50ZXJmZXJlbmNlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGOUQwODhBMjY0MUNDN0UwMDQxRDcwMSAv
KiBBc3NlbWJsZXJDb21tb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gQXNzZW1ibGVyQ29tbW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5
RDMzNkUxNjVEQkI4RDAwNUFEMzg3IC8qIERpc2Fzc2VtYmxlci5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBEaXNhc3NlbWJsZXIuY3BwOyBwYXRoID0gZGlzYXNzZW1i
bGVyL0Rpc2Fzc2VtYmxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOUQz
Mzk0MTdGRkM0RTYwMDczQzJCQyAvKiBERkdGbHVzaGVkQXQuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBuYW1lID0gREZHRmx1c2hlZEF0LmNwcDsgcGF0aCA9IGRmZy9ERkdGbHVz
aGVkQXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjlEMzM5NTE3RkZDNEU2
MDA3M0MyQkMgLyogREZHRmx1c2hlZEF0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IERGR0ZsdXNoZWRBdC5oOyBwYXRoID0gZGZnL0RGR0ZsdXNoZWRBdC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtODQxNiw2ICs4NDE3LDcgQEAKIAkJCQk4NkFERDE0MzBGRERF
QTk4MDAwNkZGQ0MgLyogQVJNdjdSZWdpc3RlcnMuaCAqLywKIAkJCQkwRkE2RjM5NjIwQ0NCN0E2
MDBBMDNEQ0QgLyogQXNzZW1ibGVyQnVmZmVyLmNwcCAqLywKIAkJCQk5Njg4Q0IxMzBFRDEyQjRF
MDAxRDY0OUYgLyogQXNzZW1ibGVyQnVmZmVyLmggKi8sCisJCQkJMEY5RDA4OEEyNjQxQ0M3RTAw
NDFENzAxIC8qIEFzc2VtYmxlckNvbW1vbi5jcHAgKi8sCiAJCQkJNDNDMzkyQUExQzNCRUIwMDAw
MjQxRjUzIC8qIEFzc2VtYmxlckNvbW1vbi5oICovLAogCQkJCTg2RTExNkIwMEZFNzVBQzgwMEI1
MTJCQyAvKiBDb2RlTG9jYXRpb24uaCAqLywKIAkJCQk1MjMzNTYyODIyNUVCOEU5MDAyNjhCRDIg
LyogQ1BVLmNwcCAqLywKQEAgLTg0MzksOCArODQ0MSw4IEBACiAJCQkJODZDNTY4REUxMUEyMTNF
RTAwMDdGN0YwIC8qIE1hY3JvQXNzZW1ibGVyTUlQUy5oICovLAogCQkJCUZFNjhDNjM1MUI5MERE
RDkwMDQyQkNCMyAvKiBNYWNyb0Fzc2VtYmxlclByaW50ZXIuY3BwICovLAogCQkJCUZFNjhDNjM2
MUI5MERERDkwMDQyQkNCMyAvKiBNYWNyb0Fzc2VtYmxlclByaW50ZXIuaCAqLywKLQkJCQk4NjAx
NjFFMDBGM0E4M0MxMDBGODQ3MTAgLyogTWFjcm9Bc3NlbWJsZXJYODYuaCAqLywKIAkJCQk4NjAx
NjFFMTBGM0E4M0MxMDBGODQ3MTAgLyogTWFjcm9Bc3NlbWJsZXJYODZfNjQuaCAqLywKKwkJCQk4
NjAxNjFFMDBGM0E4M0MxMDBGODQ3MTAgLyogTWFjcm9Bc3NlbWJsZXJYODYuaCAqLywKIAkJCQlB
N0E0QUUwNzE3OTczQjI2MDA1NjEyQjEgLyogTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uY3BwICov
LAogCQkJCTg2MDE2MUUyMEYzQTgzQzEwMEY4NDcxMCAvKiBNYWNyb0Fzc2VtYmxlclg4NkNvbW1v
bi5oICovLAogCQkJCTY1ODYwMTc3MTg1QThGNUUwMDAzMEVFRSAvKiBNYXhGcmFtZUV4dGVudEZv
clNsb3dQYXRoQ2FsbC5oICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci9BUk02NEFzc2VtYmxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9h
c3NlbWJsZXIvQVJNNjRBc3NlbWJsZXIuaAkocmV2aXNpb24gMjc2OTc3KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BUk02NEFzc2VtYmxlci5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yNjAwLDYgKzI2MDAsNyBAQCBwdWJsaWM6CiAgICAgICAgIGludCBpbnNuID0gZGF0YUNhY2hl
WmVyb1ZpcnR1YWxBZGRyZXNzKEFSTTY0UmVnaXN0ZXJzOjp6cik7CiAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKHJvdW5kVXBUb011bHRpcGxlT2Y8aW5zdHJ1Y3Rpb25TaXplPih3aGVyZSkgPT0gd2hl
cmUpOwogICAgICAgICBwZXJmb3JtSklUTWVtY3B5KHdoZXJlLCAmaW5zbiwgc2l6ZW9mKGludCkp
OworICAgICAgICBXVEY6OmF0b21pY0V4Y2hhbmdlQWRkKCZnX251bWJlck9mUmVwbGFjZVdpdGhW
TUhhbHRzLCAxKTsKICAgICAgICAgY2FjaGVGbHVzaCh3aGVyZSwgc2l6ZW9mKGludCkpOwogICAg
IH0KIApAQCAtMjYxOSw2ICsyNjIwLDcgQEAgcHVibGljOgogICAgICAgICBpbnQgaW5zbiA9IHVu
Y29uZGl0aW9uYWxCcmFuY2hJbW1lZGlhdGUoZmFsc2UsIHN0YXRpY19jYXN0PGludD4ob2Zmc2V0
KSk7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJvdW5kVXBUb011bHRpcGxlT2Y8aW5zdHJ1Y3Rp
b25TaXplPih3aGVyZSkgPT0gd2hlcmUpOwogICAgICAgICBwZXJmb3JtSklUTWVtY3B5KHdoZXJl
LCAmaW5zbiwgc2l6ZW9mKGludCkpOworICAgICAgICBXVEY6OmF0b21pY0V4Y2hhbmdlQWRkKCZn
X251bWJlck9mUmVwbGFjZVdpdGhKdW1wcywgMSk7CiAgICAgICAgIGNhY2hlRmx1c2god2hlcmUs
IHNpemVvZihpbnQpKTsKICAgICB9CiAgICAgCkBAIC0yNjUwLDYgKzI2NTIsNyBAQCBwdWJsaWM6
CiAgICAgICAgICAgICBpbnQgaW5zbiA9IGxvYWRTdG9yZVJlZ2lzdGVyVW5zaWduZWRJbW1lZGlh
dGUoTWVtT3BTaXplXzY0LCBmYWxzZSwgTWVtT3BfTE9BRCwgZW5jb2RlUG9zaXRpdmVJbW1lZGlh
dGU8NjQ+KGltbTEyKSwgcm4sIHJkKTsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJvdW5k
VXBUb011bHRpcGxlT2Y8aW5zdHJ1Y3Rpb25TaXplPih3aGVyZSkgPT0gd2hlcmUpOwogICAgICAg
ICAgICAgcGVyZm9ybUpJVE1lbWNweSh3aGVyZSwgJmluc24sIHNpemVvZihpbnQpKTsKKyAgICAg
ICAgICAgIFdURjo6YXRvbWljRXhjaGFuZ2VBZGQoJmdfbnVtYmVyT2ZSZXBsYWNlV2l0aExvYWRz
LCAxKTsKICAgICAgICAgICAgIGNhY2hlRmx1c2god2hlcmUsIHNpemVvZihpbnQpKTsKICAgICAg
ICAgfQogI2lmIEFTU0VSVF9FTkFCTEVECkBAIC0yNjg1LDYgKzI2ODgsNyBAQCBwdWJsaWM6CiAg
ICAgICAgICAgICBpbnQgaW5zbiA9IGFkZFN1YnRyYWN0SW1tZWRpYXRlKERhdGFzaXplXzY0LCBB
ZGRPcF9BREQsIERvbnRTZXRGbGFncywgMCwgaW1tMTIgKiBzaXplb2Yodm9pZCopLCBybiwgcnQp
OwogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQocm91bmRVcFRvTXVsdGlwbGVPZjxpbnN0cnVj
dGlvblNpemU+KHdoZXJlKSA9PSB3aGVyZSk7CiAgICAgICAgICAgICBwZXJmb3JtSklUTWVtY3B5
KHdoZXJlLCAmaW5zbiwgc2l6ZW9mKGludCkpOworICAgICAgICAgICAgV1RGOjphdG9taWNFeGNo
YW5nZUFkZCgmZ19udW1iZXJPZlJlcGxhY2VXaXRoQWRkcmVzc0NvbXB1dGF0aW9ucywgMSk7CiAg
ICAgICAgICAgICBjYWNoZUZsdXNoKHdoZXJlLCBzaXplb2YoaW50KSk7CiAgICAgICAgIH0KICNp
ZiBBU1NFUlRfRU5BQkxFRApAQCAtMjcyMSw4ICsyNzI1LDEwIEBAIHB1YmxpYzoKICAgICAgICAg
UkVMRUFTRV9BU1NFUlQocm91bmRVcFRvTXVsdGlwbGVPZjxpbnN0cnVjdGlvblNpemU+KGFkZHJl
c3MpID09IGFkZHJlc3MpOwogICAgICAgICBwZXJmb3JtSklUTWVtY3B5KGFkZHJlc3MsIGJ1ZmZl
ciwgc2l6ZW9mKGludCkgKiAzKTsKIAotICAgICAgICBpZiAoZmx1c2gpCisgICAgICAgIGlmIChm
bHVzaCkgeworICAgICAgICAgICAgV1RGOjphdG9taWNFeGNoYW5nZUFkZCgmZ19udW1iZXJPZlNl
dFBvaW50ZXJzLCAxKTsKICAgICAgICAgICAgIGNhY2hlRmx1c2goYWRkcmVzcywgc2l6ZW9mKGlu
dCkgKiAzKTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIHN0YXRpYyB2b2lkIHJlcGF0Y2hJbnQz
Mih2b2lkKiB3aGVyZSwgaW50MzJfdCB2YWx1ZSkKQEAgLTI3NDksNiArMjc1NSw3IEBAIHB1Ymxp
YzoKICAgICAgICAgUkVMRUFTRV9BU1NFUlQocm91bmRVcFRvTXVsdGlwbGVPZjxpbnN0cnVjdGlv
blNpemU+KHdoZXJlKSA9PSB3aGVyZSk7CiAgICAgICAgIHBlcmZvcm1KSVRNZW1jcHkod2hlcmUs
ICZidWZmZXIsIHNpemVvZihpbnQpICogMik7CiAKKyAgICAgICAgV1RGOjphdG9taWNFeGNoYW5n
ZUFkZCgmZ19udW1iZXJPZlJlcGF0Y2hJbnQzMnMsIDEpOwogICAgICAgICBjYWNoZUZsdXNoKHdo
ZXJlLCBzaXplb2YoaW50KSAqIDIpOwogICAgIH0KIApAQCAtMjc5Miw2ICsyNzk5LDcgQEAgcHVi
bGljOgogICAgIHN0YXRpYyB2b2lkIHJlbGlua0p1bXAodm9pZCogZnJvbSwgdm9pZCogdG8pCiAg
ICAgewogICAgICAgICByZWxpbmtKdW1wT3JDYWxsPEJyYW5jaFR5cGVfSk1QPihyZWludGVycHJl
dF9jYXN0PGludCo+KGZyb20pLCByZWludGVycHJldF9jYXN0PGNvbnN0IGludCo+KGZyb20pLCB0
byk7CisgICAgICAgIFdURjo6YXRvbWljRXhjaGFuZ2VBZGQoJmdfbnVtYmVyT2ZSZWxpbmtKdW1w
cywgMSk7CiAgICAgICAgIGNhY2hlRmx1c2goZnJvbSwgc2l6ZW9mKGludCkpOwogICAgIH0KICAg
ICAKQEAgLTI4MDMsNiArMjgxMSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCByZWxpbmtD
YWxsKHZvaWQqIGZyb20sIHZvaWQqIHRvKQogICAgIHsKICAgICAgICAgcmVsaW5rSnVtcE9yQ2Fs
bDxCcmFuY2hUeXBlX0NBTEw+KHJlaW50ZXJwcmV0X2Nhc3Q8aW50Kj4oZnJvbSkgLSAxLCByZWlu
dGVycHJldF9jYXN0PGNvbnN0IGludCo+KGZyb20pIC0gMSwgdG8pOworICAgICAgICBXVEY6OmF0
b21pY0V4Y2hhbmdlQWRkKCZnX251bWJlck9mUmVsaW5rQ2FsbHMsIDEpOwogICAgICAgICBjYWNo
ZUZsdXNoKHJlaW50ZXJwcmV0X2Nhc3Q8aW50Kj4oZnJvbSkgLSAxLCBzaXplb2YoaW50KSk7CiAg
ICAgfQogCkBAIC0yODQ2LDYgKzI4NTUsNyBAQCBwdWJsaWM6CiAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKHJvdW5kVXBUb011bHRpcGxlT2Y8aW5zdHJ1Y3Rpb25TaXplPih3aGVyZSkgPT0gd2hlcmUp
OwogICAgICAgICBwZXJmb3JtSklUTWVtY3B5KHdoZXJlLCAmaW5zbiwgc2l6ZW9mKGludCkpOwog
CisgICAgICAgIFdURjo6YXRvbWljRXhjaGFuZ2VBZGQoJmdfbnVtYmVyT2ZSZXBhdGNoQ29tcGFj
dHMsIDEpOwogICAgICAgICBjYWNoZUZsdXNoKHdoZXJlLCBzaXplb2YoaW50KSk7CiAgICAgfQog
CkBAIC0yODYwLDYgKzI4NzAsNyBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgdm9pZCBjYWNoZUZs
dXNoKHZvaWQqIGNvZGUsIHNpemVfdCBzaXplKQogICAgIHsKKyAgICAgICAgV1RGOjphdG9taWNF
eGNoYW5nZUFkZCgmZ19udW1iZXJPZkNhY2hlRmx1c2hlcywgMSk7CiAjaWYgT1MoREFSV0lOKQog
ICAgICAgICBzeXNfY2FjaGVfY29udHJvbChrQ2FjaGVGdW5jdGlvblByZXBhcmVGb3JFeGVjdXRp
b24sIGNvZGUsIHNpemUpOwogI2VsaWYgT1MoRlVDSFNJQSkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9hc3NlbWJsZXIvQVJNNjRFQXNzZW1ibGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BUk02NEVBc3NlbWJsZXIuaAkocmV2aXNpb24gMjc2
OTc3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BUk02NEVBc3NlbWJsZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtMzk2LDggKzM5NiwxMCBAQCBwdWJsaWM6CiAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKHJvdW5kVXBUb011bHRpcGxlT2Y8aW5zdHJ1Y3Rpb25TaXplPihhZGRyZXNz
KSA9PSBhZGRyZXNzKTsKICAgICAgICAgcGVyZm9ybUpJVE1lbWNweShhZGRyZXNzLCBidWZmZXIs
IHNpemVvZihpbnQpICogNCk7CiAKLSAgICAgICAgaWYgKGZsdXNoKQorICAgICAgICBpZiAoZmx1
c2gpIHsKKyAgICAgICAgICAgIFdURjo6YXRvbWljRXhjaGFuZ2VBZGQoJmdfbnVtYmVyT2ZTZXRQ
b2ludGVycywgMSk7CiAgICAgICAgICAgICBjYWNoZUZsdXNoKGFkZHJlc3MsIHNpemVvZihpbnQp
ICogNCk7CisgICAgICAgIH0KICAgICB9CiAKICAgICBzdGF0aWMgdm9pZCogcmVhZFBvaW50ZXIo
dm9pZCogd2hlcmUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fic3Ry
YWN0TWFjcm9Bc3NlbWJsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaAkocmV2aXNpb24gMjc2OTc3KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTk3MSw2ICs5NzEsMTIgQEAgcHVibGljOgogICAgICAgICBtX2xp
bmtUYXNrcy5hcHBlbmQoY3JlYXRlU2hhcmVkVGFzazx2b2lkKExpbmtCdWZmZXImKT4oZnVuY3Rv
cikpOwogICAgIH0KIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBh
ZGRMYXRlTGlua1Rhc2soY29uc3QgRnVuY3RvciYgZnVuY3RvcikgLy8gUnVuIGFmdGVyIGFsbCBs
aW5rIHRhc2tzCisgICAgeworICAgICAgICBtX2xhdGVMaW5rVGFza3MuYXBwZW5kKGNyZWF0ZVNo
YXJlZFRhc2s8dm9pZChMaW5rQnVmZmVyJik+KGZ1bmN0b3IpKTsKKyAgICB9CisKICNpZiBDT01Q
SUxFUihHQ0MpCiAgICAgLy8gV29ya2Fyb3VuZCBmb3IgR0NDIGRlbWFuZGluZyB0aGF0IG1lbWNw
eSAibXVzdCBiZSB0aGUgbmFtZSBvZiBhIGZ1bmN0aW9uIHdpdGggZXh0ZXJuYWwgbGlua2FnZSIu
CiAgICAgc3RhdGljIHZvaWQqIG1lbWNweSh2b2lkKiBkc3QsIGNvbnN0IHZvaWQqIHNyYywgc2l6
ZV90IHNpemUpCkBAIC0xMTE0LDYgKzExMjAsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgYm9vbCBtX2Fs
bG93U2NyYXRjaFJlZ2lzdGVyIHsgdHJ1ZSB9OwogCiAgICAgVmVjdG9yPFJlZlB0cjxTaGFyZWRU
YXNrPHZvaWQoTGlua0J1ZmZlciYpPj4+IG1fbGlua1Rhc2tzOworICAgIFZlY3RvcjxSZWZQdHI8
U2hhcmVkVGFzazx2b2lkKExpbmtCdWZmZXImKT4+PiBtX2xhdGVMaW5rVGFza3M7CiAKICAgICBm
cmllbmQgY2xhc3MgTGlua0J1ZmZlcjsKIH07IC8vIGNsYXNzIEFic3RyYWN0TWFjcm9Bc3NlbWJs
ZXIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQXNzZW1ibGVyQ29tbW9u
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fzc2Vt
YmxlckNvbW1vbi5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fz
c2VtYmxlci9Bc3NlbWJsZXJDb21tb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDQg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiQXNzZW1ibGVyQ29tbW9uLmgiCisKK25hbWVzcGFjZSBKU0MgeworCit1aW50NjRfdCBnX251
bWJlck9mQ2FjaGVGbHVzaGVzOwordWludDY0X3QgZ19udW1iZXJPZlJlcGxhY2VXaXRoVk1IYWx0
czsKK3VpbnQ2NF90IGdfbnVtYmVyT2ZSZXBsYWNlV2l0aEp1bXBzOwordWludDY0X3QgZ19udW1i
ZXJPZlJlcGxhY2VXaXRoTG9hZHM7Cit1aW50NjRfdCBnX251bWJlck9mUmVwbGFjZVdpdGhBZGRy
ZXNzQ29tcHV0YXRpb25zOwordWludDY0X3QgZ19udW1iZXJPZlNldFBvaW50ZXJzOwordWludDY0
X3QgZ19udW1iZXJPZlJlcGF0Y2hJbnQzMnM7Cit1aW50NjRfdCBnX251bWJlck9mUmVsaW5rSnVt
cHM7Cit1aW50NjRfdCBnX251bWJlck9mUmVsaW5rQ2FsbHM7Cit1aW50NjRfdCBnX251bWJlck9m
UmVwYXRjaENvbXBhY3RzOwordWludDY0X3QgZ19udW1iZXJPZk5ld0NvZGVGaW5hbGl6YXRpb25z
OwordWludDY0X3QgZ19udW1iZXJPZkluUGxhY2VGaW5hbGl6YXRpb25zOworCit9IC8vIG5hbWVz
cGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9Bc3NlbWJs
ZXJDb21tb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVy
L0Fzc2VtYmxlckNvbW1vbi5oCShyZXZpc2lvbiAyNzY5NzcpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL0Fzc2VtYmxlckNvbW1vbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOTYs
NCArMjk2LDE3IEBAIHByaXZhdGU6CiAgICAgaW50IG1fdmFsdWU7CiB9OwogCitKU19FWFBPUlRf
UFJJVkFURSBleHRlcm4gdWludDY0X3QgZ19udW1iZXJPZkNhY2hlRmx1c2hlczsKK0pTX0VYUE9S
VF9QUklWQVRFIGV4dGVybiB1aW50NjRfdCBnX251bWJlck9mUmVwbGFjZVdpdGhWTUhhbHRzOwor
SlNfRVhQT1JUX1BSSVZBVEUgZXh0ZXJuIHVpbnQ2NF90IGdfbnVtYmVyT2ZSZXBsYWNlV2l0aEp1
bXBzOworSlNfRVhQT1JUX1BSSVZBVEUgZXh0ZXJuIHVpbnQ2NF90IGdfbnVtYmVyT2ZSZXBsYWNl
V2l0aExvYWRzOworSlNfRVhQT1JUX1BSSVZBVEUgZXh0ZXJuIHVpbnQ2NF90IGdfbnVtYmVyT2ZS
ZXBsYWNlV2l0aEFkZHJlc3NDb21wdXRhdGlvbnM7CitKU19FWFBPUlRfUFJJVkFURSBleHRlcm4g
dWludDY0X3QgZ19udW1iZXJPZlNldFBvaW50ZXJzOworSlNfRVhQT1JUX1BSSVZBVEUgZXh0ZXJu
IHVpbnQ2NF90IGdfbnVtYmVyT2ZSZXBhdGNoSW50MzJzOworSlNfRVhQT1JUX1BSSVZBVEUgZXh0
ZXJuIHVpbnQ2NF90IGdfbnVtYmVyT2ZSZWxpbmtKdW1wczsKK0pTX0VYUE9SVF9QUklWQVRFIGV4
dGVybiB1aW50NjRfdCBnX251bWJlck9mUmVsaW5rQ2FsbHM7CitKU19FWFBPUlRfUFJJVkFURSBl
eHRlcm4gdWludDY0X3QgZ19udW1iZXJPZlJlcGF0Y2hDb21wYWN0czsKK0pTX0VYUE9SVF9QUklW
QVRFIGV4dGVybiB1aW50NjRfdCBnX251bWJlck9mTmV3Q29kZUZpbmFsaXphdGlvbnM7CitKU19F
WFBPUlRfUFJJVkFURSBleHRlcm4gdWludDY0X3QgZ19udW1iZXJPZkluUGxhY2VGaW5hbGl6YXRp
b25zOworCiB9IC8vIG5hbWVzcGFjZSBKU0MuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL0xpbmtCdWZmZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5jcHAJKHJldmlzaW9uIDI3Njk3NykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQzMiw2ICs0MzIsNyBAQCB2b2lkIExpbmtCdWZmZXI6OmxpbmtDb2RlKE1hY3JvQXNzZW1i
bGVyCiAjZW5kaWYgLy8gIUVOQUJMRShCUkFOQ0hfQ09NUEFDVElPTikKIAogICAgIG1fbGlua1Rh
c2tzID0gV1RGTW92ZShtYWNyb0Fzc2VtYmxlci5tX2xpbmtUYXNrcyk7CisgICAgbV9sYXRlTGlu
a1Rhc2tzID0gV1RGTW92ZShtYWNyb0Fzc2VtYmxlci5tX2xhdGVMaW5rVGFza3MpOwogfQogCiB2
b2lkIExpbmtCdWZmZXI6OmFsbG9jYXRlKE1hY3JvQXNzZW1ibGVyJiBtYWNyb0Fzc2VtYmxlciwg
SklUQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQpAQCAtNDY0LDYgKzQ2NSw4IEBAIHZvaWQgTGlu
a0J1ZmZlcjo6cGVyZm9ybUZpbmFsaXphdGlvbigpCiB7CiAgICAgZm9yIChhdXRvJiB0YXNrIDog
bV9saW5rVGFza3MpCiAgICAgICAgIHRhc2stPnJ1bigqdGhpcyk7CisgICAgZm9yIChhdXRvJiB0
YXNrIDogbV9sYXRlTGlua1Rhc2tzKQorICAgICAgICB0YXNrLT5ydW4oKnRoaXMpOwogCiAjaWZu
ZGVmIE5ERUJVRwogICAgIEFTU0VSVChtX2lzSnVtcElzbGFuZCB8fCAhaXNDb21waWxhdGlvblRo
cmVhZCgpKTsKQEAgLTQ3MSw2ICs0NzQsMTEgQEAgdm9pZCBMaW5rQnVmZmVyOjpwZXJmb3JtRmlu
YWxpemF0aW9uKCkKICAgICBBU1NFUlQoaXNWYWxpZCgpKTsKICAgICBtX2NvbXBsZXRlZCA9IHRy
dWU7CiAjZW5kaWYKKworICAgIGlmIChtX2V4ZWN1dGFibGVNZW1vcnkpCisgICAgICAgIFdURjo6
YXRvbWljRXhjaGFuZ2VBZGQoJmdfbnVtYmVyT2ZOZXdDb2RlRmluYWxpemF0aW9ucywgMSk7Cisg
ICAgZWxzZQorICAgICAgICBXVEY6OmF0b21pY0V4Y2hhbmdlQWRkKCZnX251bWJlck9mSW5QbGFj
ZUZpbmFsaXphdGlvbnMsIDEpOwogICAgIAogICAgIE1hY3JvQXNzZW1ibGVyOjpjYWNoZUZsdXNo
KGNvZGUoKSwgbV9zaXplKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvTGlua0J1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3Nl
bWJsZXIvTGlua0J1ZmZlci5oCShyZXZpc2lvbiAyNzY5NzcpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzc1LDYgKzM3
NSw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2FscmVhZHlEaXNhc3NlbWJsZWQgeyBmYWxzZSB9
OwogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxMaW5rQnVmZmVyUHRyVGFnPiBtX2NvZGU7CiAg
ICAgVmVjdG9yPFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoTGlua0J1ZmZlciYpPj4+IG1fbGlua1Rh
c2tzOworICAgIFZlY3RvcjxSZWZQdHI8U2hhcmVkVGFzazx2b2lkKExpbmtCdWZmZXImKT4+PiBt
X2xhdGVMaW5rVGFza3M7CiB9OwogCiAjaWYgT1MoTElOVVgpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCShyZXZpc2lvbiAyNzY5NzcpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE1ODAsMTEgKzE1ODAsNiBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlSW1w
bChBY2Nlc3NHZW5lCiAgICAgICAgIC8vIFN0dWZmIGZvciBjdXN0b20gZ2V0dGVycy9zZXR0ZXJz
LgogICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgb3BlcmF0aW9uQ2FsbDsKIAotICAgICAgICAv
LyBTdHVmZiBmb3IgSlMgZ2V0dGVycy9zZXR0ZXJzLgotICAgICAgICBDQ2FsbEhlbHBlcnM6OkRh
dGFMYWJlbFB0ciBhZGRyZXNzT2ZMaW5rRnVuY3Rpb25DaGVjazsKLSAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpDYWxsIGZhc3RQYXRoQ2FsbDsKLSAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIHNsb3dQ
YXRoQ2FsbDsKLQogICAgICAgICAvLyBUaGlzIGFsc28gZG9lcyB0aGUgbmVjZXNzYXJ5IGNhbGN1
bGF0aW9ucyBvZiB3aGV0aGVyIG9yIG5vdCB3ZSdyZSBhbgogICAgICAgICAvLyBleGNlcHRpb24g
aGFuZGxpbmcgY2FsbCBzaXRlLgogICAgICAgICBBY2Nlc3NHZW5lcmF0aW9uU3RhdGU6OlNwaWxs
U3RhdGUgc3BpbGxTdGF0ZSA9IHN0YXRlLnByZXNlcnZlTGl2ZVJlZ2lzdGVyc1RvU3RhY2tGb3JD
YWxsKCk7CkBAIC0xNjA4LDYgKzE2MDMsMTEgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZUlt
cGwoQWNjZXNzR2VuZQogICAgICAgICAgICAgQVNTRVJUKGJhc2VHUFIgIT0gbG9hZGVkVmFsdWVH
UFIpOwogICAgICAgICAgICAgQVNTRVJUKG1fdHlwZSAhPSBTZXR0ZXIgfHwgdmFsdWVSZWdzUGF5
bG9hZEdQUiAhPSBsb2FkZWRWYWx1ZUdQUik7CiAKKyAgICAgICAgICAgIC8vIFN0dWZmIGZvciBK
UyBnZXR0ZXJzL3NldHRlcnMuCisgICAgICAgICAgICAvL0NDYWxsSGVscGVyczo6RGF0YUxhYmVs
UHRyIGFkZHJlc3NPZkxpbmtGdW5jdGlvbkNoZWNrOworICAgICAgICAgICAgLy9DQ2FsbEhlbHBl
cnM6OkNhbGwgc2xvd1BhdGhDYWxsOworCisKICAgICAgICAgICAgIC8vIENyZWF0ZSBhIEpTIGNh
bGwgdXNpbmcgYSBKUyBjYWxsIGlubGluZSBjYWNoZS4gQXNzdW1lIHRoYXQ6CiAgICAgICAgICAg
ICAvLwogICAgICAgICAgICAgLy8gLSBTUCBpcyBhbGlnbmVkIGFuZCByZXByZXNlbnRzIHRoZSBl
eHRlbnQgb2YgdGhlIGNhbGxpbmcgY29tcGlsZXIncyBzdGFjayB1c2FnZS4KQEAgLTE3MDEsMjQg
KzE3MDEsMjMgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZUltcGwoQWNjZXNzR2VuZQogICAg
ICAgICAgICAgICAgICAgICAgICAgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdU
aGlzKDEpLm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSkpOwogICAgICAgICAgICAgfQogCi0g
ICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgc2xvd0Nhc2UgPSBqaXQuYnJhbmNoUHRyV2l0
aFBhdGNoKAotICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Tm90RXF1YWwsIGxvYWRlZFZh
bHVlR1BSLCBhZGRyZXNzT2ZMaW5rRnVuY3Rpb25DaGVjaywKLSAgICAgICAgICAgICAgICBDQ2Fs
bEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobnVsbHB0cikpOworICAgICAgICAgICAgYXV0byBzbG93
Q2FzZSA9IGFjY2Vzcy5jYWxsTGlua0luZm8oKS0+ZW1pdEZhc3RQYXRoKGppdCwgbG9hZGVkVmFs
dWVHUFIsIGxvYWRlZFZhbHVlR1BSID09IEdQUkluZm86OnJlZ1QyID8gR1BSSW5mbzo6cmVnVDAg
OiBHUFJJbmZvOjpyZWdUMiwgSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGNvZGVCbG9jay0+aml0
VHlwZSgpKSA/IENhbGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpObyA6IENhbGxMaW5rSW5mbzo6VXNl
RGF0YUlDOjpZZXMpOworICAgICAgICAgICAgYXV0byBkb25lTG9jYXRpb24gPSBqaXQubGFiZWwo
KTsKIAotICAgICAgICAgICAgZmFzdFBhdGhDYWxsID0gaml0Lm5lYXJDYWxsKCk7CiAgICAgICAg
ICAgICBpZiAobV90eXBlID09IEdldHRlcikKICAgICAgICAgICAgICAgICBqaXQuc2V0dXBSZXN1
bHRzKHZhbHVlUmVncyk7CiAgICAgICAgICAgICBkb25lLmFwcGVuZChqaXQuanVtcCgpKTsKIAog
ICAgICAgICAgICAgc2xvd0Nhc2UubGluaygmaml0KTsKKyAgICAgICAgICAgIGF1dG8gc2xvd1Bh
dGhTdGFydCA9IGppdC5sYWJlbCgpOwogICAgICAgICAgICAgaml0Lm1vdmUobG9hZGVkVmFsdWVH
UFIsIEdQUkluZm86OnJlZ1QwKTsKICNpZiBVU0UoSlNWQUxVRTMyXzY0KQogICAgICAgICAgICAg
Ly8gV2UgKmFsd2F5cyoga25vdyB0aGF0IHRoZSBnZXR0ZXIvc2V0dGVyLCBpZiBub24tbnVsbCwg
aXMgYSBjZWxsLgogICAgICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6Q2VsbFRhZyksIEdQUkluZm86OnJlZ1QxKTsKICNlbmRpZgotICAgICAgICAg
ICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGFjY2Vzcy5jYWxsTGlua0lu
Zm8oKSksIEdQUkluZm86OnJlZ1QyKTsKICAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbVB0cihnbG9iYWxPYmplY3QpLCBHUFJJbmZvOjpyZWdUMyk7Ci0gICAgICAg
ICAgICBzbG93UGF0aENhbGwgPSBqaXQubmVhckNhbGwoKTsKKyAgICAgICAgICAgIGFjY2Vzcy5j
YWxsTGlua0luZm8oKS0+ZW1pdFNsb3dQYXRoKHZtLCBqaXQpOworICAgICAgICAgICAgLy9zbG93
UGF0aENhbGwgPSBqaXQubmVhckNhbGwoKTsKICAgICAgICAgICAgIGlmIChtX3R5cGUgPT0gR2V0
dGVyKQogICAgICAgICAgICAgICAgIGppdC5zZXR1cFJlc3VsdHModmFsdWVSZWdzKTsKICAgICAg
ICAgICAgIGRvbmUuYXBwZW5kKGppdC5qdW1wKCkpOwpAQCAtMTczNSwxNSArMTczNCwxNCBAQCB2
b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlSW1wbChBY2Nlc3NHZW5lCiAgICAgICAgICAgICBib29s
IGNhbGxIYXNSZXR1cm5WYWx1ZSA9IGlzR2V0dGVyKCk7CiAgICAgICAgICAgICByZXN0b3JlTGl2
ZVJlZ2lzdGVyc0Zyb21TdGFja0ZvckNhbGwoc3BpbGxTdGF0ZSwgY2FsbEhhc1JldHVyblZhbHVl
KTsKIAotICAgICAgICAgICAgaml0LmFkZExpbmtUYXNrKFs9LCAmdm1dIChMaW5rQnVmZmVyJiBs
aW5rQnVmZmVyKSB7Ci0gICAgICAgICAgICAgICAgdGhpcy0+YXM8R2V0dGVyU2V0dGVyQWNjZXNz
Q2FzZT4oKS5jYWxsTGlua0luZm8oKS0+c2V0Q2FsbExvY2F0aW9ucygKLSAgICAgICAgICAgICAg
ICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4obGlua0J1ZmZlci5sb2Nh
dGlvbk9mTmVhckNhbGw8SlNJbnRlcm5hbFB0clRhZz4oc2xvd1BhdGhDYWxsKSksCi0gICAgICAg
ICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+KGxpbmtCdWZm
ZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihhZGRyZXNzT2ZMaW5rRnVuY3Rpb25DaGVj
aykpLAotICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxK
U0ludGVybmFsUHRyVGFnPihmYXN0UGF0aENhbGwpKTsKLQotICAgICAgICAgICAgICAgIGxpbmtC
dWZmZXIubGluaygKLSAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxsLAotICAgICAgICAg
ICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKSVRUaHVua1B0clRhZz4odm0uZ2V0Q1RJU3R1
YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5jb2RlKCkpKTsKKyAgICAgICAgICAgIGppdC5hZGRM
aW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgICAgICAgICB0
aGlzLT5hczxHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlPigpLmNhbGxMaW5rSW5mbygpLT5zZXRDb2Rl
TG9jYXRpb25zKAorICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJ
bnRlcm5hbFB0clRhZz4oc2xvd1BhdGhTdGFydCksCisgICAgICAgICAgICAgICAgICAgIGxpbmtC
dWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihkb25lTG9jYXRpb24pKTsKKworICAg
ICAgICAgICAgICAgIC8vbGlua0J1ZmZlci5saW5rKAorICAgICAgICAgICAgICAgIC8vICAgIHNs
b3dQYXRoQ2FsbCwKKyAgICAgICAgICAgICAgICAvLyAgICBDb2RlTG9jYXRpb25MYWJlbDxKSVRU
aHVua1B0clRhZz4odm0uZ2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5jb2RlKCkp
KTsKICAgICAgICAgICAgIH0pOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgQVNTRVJU
KG1fdHlwZSA9PSBDdXN0b21WYWx1ZUdldHRlciB8fCBtX3R5cGUgPT0gQ3VzdG9tQWNjZXNzb3JH
ZXR0ZXIgfHwgbV90eXBlID09IEN1c3RvbVZhbHVlU2V0dGVyIHx8IG1fdHlwZSA9PSBDdXN0b21B
Y2Nlc3NvclNldHRlcik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2Fs
bExpbmtJbmZvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ2FsbExpbmtJbmZvLmNwcAkocmV2aXNpb24gMjc2OTc3KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDEy
ICsyNiwxNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkNhbGxMaW5rSW5mby5o
IgogCisjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXJQcmludGVyLmgiCisjaW5jbHVkZSAiQ0NhbGxI
ZWxwZXJzLmgiCiAjaW5jbHVkZSAiQ2FsbEZyYW1lU2h1ZmZsZURhdGEuaCIKICNpbmNsdWRlICJG
dW5jdGlvbkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIkpTQ2VsbElubGluZXMuaCIKICNpbmNsdWRl
ICJPcGNvZGUuaCIKKyNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCiAjaW5jbHVkZSAiUmVwYXRjaC5o
IgorI2luY2x1ZGUgIlRodW5rR2VuZXJhdG9ycy5oIgogI2luY2x1ZGUgPHd0Zi9MaXN0RHVtcC5o
PgorI2luY2x1ZGUgIkRpc2FsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZS5oIgogCiAjaWYg
RU5BQkxFKEpJVCkKIG5hbWVzcGFjZSBKU0MgewpAQCAtNzcsNiArODIsNyBAQCBDYWxsTGlua0lu
Zm86OkNhbGxMaW5rSW5mbyhDb2RlT3JpZ2luIGNvCiAgICAgLCBtX2FsbG93U3R1YnModHJ1ZSkK
ICAgICAsIG1fY2xlYXJlZEJ5SmV0dGlzb24oZmFsc2UpCiAgICAgLCBtX2NhbGxUeXBlKE5vbmUp
CisgICAgLCBtX3VzZURhdGFJQyhzdGF0aWNfY2FzdDx1bnNpZ25lZD4oVXNlRGF0YUlDOjpZZXMp
KQogewogfQogCkBAIC0xMDIsNDcgKzEwOCw1MSBAQCB2b2lkIENhbGxMaW5rSW5mbzo6dW5saW5r
KFZNJiB2bSkKICAgICAvLyBXZSBjb3VsZCBiZSBjYWxsZWQgZXZlbiBpZiB3ZSdyZSBub3QgbGlu
a2VkIGFueW1vcmUgYmVjYXVzZSBvZiBob3cgcG9seW1vcnBoaWMgY2FsbHMKICAgICAvLyB3b3Jr
LiBFYWNoIGNhbGxzaXRlIHdpdGhpbiB0aGUgcG9seW1vcnBoaWMgY2FsbCBzdHViIG1heSBzZXBh
cmF0ZWx5IGFzayB1cyB0byB1bmxpbmsoKS4KICAgICBpZiAoaXNMaW5rZWQoKSkKLSAgICAgICAg
dW5saW5rRm9yKHZtLCAqdGhpcyk7CisgICAgICAgIHVubGlua0NhbGwodm0sICp0aGlzKTsKIAog
ICAgIC8vIEVpdGhlciB3ZSB3ZXJlIHVubGlua2VkLCBpbiB3aGljaCBjYXNlIHdlIHNob3VsZCBu
b3QgaGF2ZSBiZWVuIG9uIGFueSBsaXN0LCBvciB3ZSB1bmxpbmtlZAogICAgIC8vIG91cnNlbHZl
cyBzbyB0aGF0IHdlJ3JlIG5vdCBvbiBhbnkgbGlzdCBhbnltb3JlLgogICAgIFJFTEVBU0VfQVNT
RVJUKCFpc09uTGlzdCgpKTsKIH0KIAotQ29kZUxvY2F0aW9uTmVhckNhbGw8SlNJbnRlcm5hbFB0
clRhZz4gQ2FsbExpbmtJbmZvOjpjYWxsUmV0dXJuTG9jYXRpb24oKQorQ29kZUxvY2F0aW9uTGFi
ZWw8SlNJbnRlcm5hbFB0clRhZz4gQ2FsbExpbmtJbmZvOjpmYXN0UGF0aFN0YXJ0KCkKIHsKLSAg
ICBSRUxFQVNFX0FTU0VSVCghaXNEaXJlY3QoKSk7Ci0gICAgcmV0dXJuIENvZGVMb2NhdGlvbk5l
YXJDYWxsPEpTSW50ZXJuYWxQdHJUYWc+KG1fY2FsbFJldHVybkxvY2F0aW9uT3JQYXRjaGFibGVK
dW1wLCBOZWFyQ2FsbE1vZGU6OlJlZ3VsYXIpOworICAgIHJldHVybiBDb2RlTG9jYXRpb25EYXRh
TGFiZWxQdHI8SlNJbnRlcm5hbFB0clRhZz4obV9mYXN0UGF0aFN0YXJ0KTsKIH0KIAotQ29kZUxv
Y2F0aW9uSnVtcDxKU0ludGVybmFsUHRyVGFnPiBDYWxsTGlua0luZm86OnBhdGNoYWJsZUp1bXAo
KQorQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gQ2FsbExpbmtJbmZvOjpzbG93
UGF0aFN0YXJ0KCkKIHsKLSAgICBSRUxFQVNFX0FTU0VSVChjYWxsVHlwZSgpID09IERpcmVjdFRh
aWxDYWxsKTsKLSAgICByZXR1cm4gQ29kZUxvY2F0aW9uSnVtcDxKU0ludGVybmFsUHRyVGFnPiht
X2NhbGxSZXR1cm5Mb2NhdGlvbk9yUGF0Y2hhYmxlSnVtcCk7CisgICAgUkVMRUFTRV9BU1NFUlQo
IWlzRGF0YUlDKCkpOworICAgIHJldHVybiB1LmNvZGVJQy5tX3Nsb3dQYXRoU3RhcnQ7CiB9CiAK
LUNvZGVMb2NhdGlvbkRhdGFMYWJlbFB0cjxKU0ludGVybmFsUHRyVGFnPiBDYWxsTGlua0luZm86
OmhvdFBhdGhCZWdpbigpCitDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBDYWxs
TGlua0luZm86OmRvbmVMb2NhdGlvbigpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoIWlzRGlyZWN0
KCkpOwotICAgIHJldHVybiBDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHI8SlNJbnRlcm5hbFB0clRh
Zz4obV9ob3RQYXRoQmVnaW5PclNsb3dQYXRoU3RhcnQpOworICAgIHJldHVybiBtX2RvbmVMb2Nh
dGlvbjsKIH0KIAotQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gQ2FsbExpbmtJ
bmZvOjpzbG93UGF0aFN0YXJ0KCkKLXsKLSAgICBSRUxFQVNFX0FTU0VSVChpc0RpcmVjdCgpKTsK
LSAgICByZXR1cm4gbV9ob3RQYXRoQmVnaW5PclNsb3dQYXRoU3RhcnQ7Ci19Ci0KLXZvaWQgQ2Fs
bExpbmtJbmZvOjpzZXRDYWxsZWUoVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBKU09iamVjdCogY2Fs
bGVlKQordm9pZCBDYWxsTGlua0luZm86OnNldE1vbm9tb3JwaGljQ2FsbGVlKFZNJiB2bSwgSlND
ZWxsKiBvd25lciwgSlNPYmplY3QqIGNhbGxlZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50
cnlQdHJUYWc+IGNvZGVQdHIpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoIWlzRGlyZWN0KCkpOwog
ICAgIG1fY2FsbGVlT3JDb2RlQmxvY2suc2V0KHZtLCBvd25lciwgY2FsbGVlKTsKKworICAgIGlm
IChpc0RhdGFJQygpKSAKKyAgICAgICAgdS5kYXRhSUMubV9tb25vbW9ycGhpY0NhbGxEZXN0aW5h
dGlvbiA9IGNvZGVQdHI7CisgICAgZWxzZSB7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBh
dGNoTmVhckNhbGwodS5jb2RlSUMubV9jYWxsTG9jYXRpb24sIENvZGVMb2NhdGlvbkxhYmVsPEpT
RW50cnlQdHJUYWc+KGNvZGVQdHIpKTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hQ
b2ludGVyKHUuY29kZUlDLm1fY2FsbGVlTG9jYXRpb24sIGNhbGxlZSk7CisgICAgfQogfQogCiB2
b2lkIENhbGxMaW5rSW5mbzo6Y2xlYXJDYWxsZWUoKQogewogICAgIFJFTEVBU0VfQVNTRVJUKCFp
c0RpcmVjdCgpKTsKICAgICBtX2NhbGxlZU9yQ29kZUJsb2NrLmNsZWFyKCk7CisgICAgaWYgKGlz
RGF0YUlDKCkpCisgICAgICAgIHUuZGF0YUlDLm1fbW9ub21vcnBoaWNDYWxsRGVzdGluYXRpb24g
PSBudWxscHRyOworICAgIGVsc2UKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hQb2lu
dGVyKHUuY29kZUlDLm1fY2FsbGVlTG9jYXRpb24sIG51bGxwdHIpOwogfQogCiBKU09iamVjdCog
Q2FsbExpbmtJbmZvOjpjYWxsZWUoKQpAQCAtMjg0LDYgKzI5NCwyMDYgQEAgdm9pZCBDYWxsTGlu
a0luZm86OnNldEZyYW1lU2h1ZmZsZURhdGEoYwogICAgIG1fZnJhbWVTaHVmZmxlRGF0YS0+c2hy
aW5rVG9GaXQoKTsKIH0KIAordm9pZCBDYWxsTGlua0luZm86OmVtaXRGaXJzdEluc3RydWN0aW9u
Rm9yRGF0YUlDKENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSKQorewor
ICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gaml0LnNjcmF0Y2hSZWdpc3RlcigpOworICAgIERpc2Fs
bG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBkaXNhbGxvd1NjcmF0Y2goaml0KTsKKyAgICAv
LyBXaGVuIHJlcGF0Y2hpbmcsIHdlIGp1c3Qgb3ZlcndyaXRlIHRoZSBmaXJzdCBpbnN0cnVjdGlv
biBiYWNrLCBzaW5jZSBpdCdsbCBoYXZlIGJlZW4gcmVwbGFjZWQgd2l0aCBhIGp1bXAgdG8gdGhl
IHBvbHltb3JwaGljIGNhbGwgc3R1Yi4KKyAgICBzaXplX3Qgc3RhcnRTaXplID0gaml0Lm1fYXNz
ZW1ibGVyLmJ1ZmZlcigpLmNvZGVTaXplKCk7CisgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJz
OjpBZGRyZXNzKGNhbGxMaW5rSW5mb0dQUiwgb2Zmc2V0T2ZDYWxsZWUoKSksIHNjcmF0Y2hHUFIp
OyAKKyAgICBzaXplX3QgbG9hZFNpemUgPSBqaXQubV9hc3NlbWJsZXIuYnVmZmVyKCkuY29kZVNp
emUoKSAtIHN0YXJ0U2l6ZTsKKyAgICBpZiAobG9hZFNpemUgPCBzdGF0aWNfY2FzdDxzaXplX3Q+
KENDYWxsSGVscGVyczo6cGF0Y2hhYmxlSnVtcFNpemUoKSkpCisgICAgICAgIGppdC5lbWl0Tm9w
cyhzdGF0aWNfY2FzdDxzaXplX3Q+KENDYWxsSGVscGVyczo6cGF0Y2hhYmxlSnVtcFNpemUoKSkg
LSBsb2FkU2l6ZSk7Cit9CisKK01hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBDYWxsTGlua0luZm86
OmVtaXRGYXN0UGF0aEltcGwoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxsZWVHUFIsIEdQ
UlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQyB1c2VEYXRhSUMsIFdURjo6RnVuY3Rpb248
dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpCit7CisgICAgc2V0VXNlc0RhdGFJQ3ModXNlRGF0
YUlDKTsKKyAgICBpZiAoaXNEYXRhSUMoKSkgeworICAgICAgICBSRUxFQVNFX0FTU0VSVChjYWxs
TGlua0luZm9HUFIgIT0gQ0NhbGxIZWxwZXJzOjpJbnZhbGlkR1BSUmVnKTsKKyAgICAgICAgaml0
Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHRoaXMpLCBjYWxsTGlua0luZm9HUFIp
OworICAgICAgICB1LmRhdGFJQy5tX2NhbGxMaW5rSW5mb0dQUiA9IGNhbGxMaW5rSW5mb0dQUjsK
KyAgICB9CisKKyAgICBhdXRvIGZhc3RQYXRoU3RhcnQgPSBqaXQubGFiZWwoKTsKKyAgICBqaXQu
YWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgICAgIG1fZmFz
dFBhdGhTdGFydCA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihmYXN0
UGF0aFN0YXJ0KTsKKyAgICB9KTsKKworICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd1Bh
dGg7CisKKyAgICBpZiAoaXNEYXRhSUMoKSkgeworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9
IGppdC5zY3JhdGNoUmVnaXN0ZXIoKTsKKyAgICAgICAgZW1pdEZpcnN0SW5zdHJ1Y3Rpb25Gb3JE
YXRhSUMoaml0LCBjYWxsTGlua0luZm9HUFIpOworICAgICAgICB7CisgICAgICAgICAgICBEaXNh
bGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgZGlzYWxsb3dTY3JhdGNoKGppdCk7CisgICAg
ICAgICAgICBzbG93UGF0aC5hcHBlbmQoaml0LmJyYW5jaFB0cihDQ2FsbEhlbHBlcnM6Ok5vdEVx
dWFsLCBzY3JhdGNoR1BSLCBjYWxsZWVHUFIpKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoaXNU
YWlsQ2FsbCgpKSB7CisgICAgICAgICAgICBwcmVwYXJlRm9yVGFpbENhbGwoKTsKKyAgICAgICAg
ICAgIGppdC5mYXJKdW1wKENDYWxsSGVscGVyczo6QWRkcmVzcyhjYWxsTGlua0luZm9HUFIsIG9m
ZnNldE9mTW9ub21vcnBoaWNDYWxsRGVzdGluYXRpb24oKSksIEpTRW50cnlQdHJUYWcpOworICAg
ICAgICB9IGVsc2UKKyAgICAgICAgICAgIGppdC5jYWxsKENDYWxsSGVscGVyczo6QWRkcmVzcyhj
YWxsTGlua0luZm9HUFIsIG9mZnNldE9mTW9ub21vcnBoaWNDYWxsRGVzdGluYXRpb24oKSksIEpT
RW50cnlQdHJUYWcpOworICAgIH0gZWxzZSB7CisgICAgICAgIENDYWxsSGVscGVyczo6RGF0YUxh
YmVsUHRyIGNhbGxlZUNoZWNrOworICAgICAgICBzbG93UGF0aC5hcHBlbmQoaml0LmJyYW5jaFB0
cldpdGhQYXRjaChDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCBjYWxsZWVHUFIsIGNhbGxlZUNoZWNr
LCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobnVsbHB0cikpKTsKKworICAgICAgICBDQ2Fs
bEhlbHBlcnM6OkNhbGwgY2FsbDsKKyAgICAgICAgaWYgKGlzVGFpbENhbGwoKSkgeworICAgICAg
ICAgICAgcHJlcGFyZUZvclRhaWxDYWxsKCk7CisgICAgICAgICAgICBjYWxsID0gaml0Lm5lYXJU
YWlsQ2FsbCgpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGNhbGwgPSBqaXQubmVhckNh
bGwoKTsKKyAgICAgICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZl
cikgeworICAgICAgICAgICAgdS5jb2RlSUMubV9jYWxsTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxv
Y2F0aW9uT2ZOZWFyQ2FsbDxKU0ludGVybmFsUHRyVGFnPihjYWxsKTsKKyAgICAgICAgICAgIHUu
Y29kZUlDLm1fY2FsbGVlTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5h
bFB0clRhZz4oY2FsbGVlQ2hlY2spOworICAgICAgICB9KTsKKyAgICB9CisKKyAgICByZXR1cm4g
c2xvd1BhdGg7Cit9CisKK0NDYWxsSGVscGVyczo6SnVtcExpc3QgQ2FsbExpbmtJbmZvOjplbWl0
RmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxs
TGlua0luZm9HUFIsIFVzZURhdGFJQyB1c2VEYXRhSUMpCit7CisgICAgUkVMRUFTRV9BU1NFUlQo
IWlzVGFpbENhbGwoKSk7CisgICAgcmV0dXJuIGVtaXRGYXN0UGF0aEltcGwoaml0LCBjYWxsZWVH
UFIsIGNhbGxMaW5rSW5mb0dQUiwgdXNlRGF0YUlDLCBudWxscHRyKTsKK30KKworTWFjcm9Bc3Nl
bWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxsRmFzdFBhdGgoQ0NhbGxI
ZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVz
ZURhdGFJQyB1c2VEYXRhSUMsIFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENh
bGwpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoaXNUYWlsQ2FsbCgpKTsKKyAgICByZXR1cm4gZW1p
dEZhc3RQYXRoSW1wbChqaXQsIGNhbGxlZUdQUiwgY2FsbExpbmtJbmZvR1BSLCB1c2VEYXRhSUMs
IFdURk1vdmUocHJlcGFyZUZvclRhaWxDYWxsKSk7Cit9CisKK3ZvaWQgQ2FsbExpbmtJbmZvOjpl
bWl0U2xvd1BhdGgoVk0mIHZtLCBDQ2FsbEhlbHBlcnMmIGppdCkKK3sKKyAgICBzZXRTbG93UGF0
aENhbGxEZXN0aW5hdGlvbih2bS5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpLnRl
bXBsYXRlIHJldGFnZ2VkQ29kZTxKU0VudHJ5UHRyVGFnPigpKTsKKyAgICBqaXQubW92ZShDQ2Fs
bEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIodGhpcyksIEdQUkluZm86OnJlZ1QyKTsKKyAgICBqaXQu
Y2FsbChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDIsIG9mZnNldE9mU2xvd1Bh
dGhDYWxsRGVzdGluYXRpb24oKSksIEpTRW50cnlQdHJUYWcpOworfQorCit2b2lkIENhbGxMaW5r
SW5mbzo6ZW1pdERpcmVjdEZhc3RQYXRoKENDYWxsSGVscGVycyYgaml0KQoreworICAgIFJFTEVB
U0VfQVNTRVJUKCFpc1RhaWxDYWxsKCkpOworCisgICAgc2V0VXNlc0RhdGFJQ3MoVXNlRGF0YUlD
OjpObyk7CisKKyAgICBhdXRvIGZhc3RQYXRoU3RhcnQgPSBqaXQubGFiZWwoKTsKKyAgICBqaXQu
YWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgICAgIG1fZmFz
dFBhdGhTdGFydCA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihmYXN0
UGF0aFN0YXJ0KTsKKyAgICB9KTsKKworICAgIGF1dG8gY2FsbCA9IGppdC5uZWFyQ2FsbCgpOwor
ICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAg
ICAgdS5jb2RlSUMubV9jYWxsTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2Fs
bDxKU0ludGVybmFsUHRyVGFnPihjYWxsKTsKKyAgICB9KTsKKyAgICBqaXQuYWRkTGF0ZUxpbmtU
YXNrKFt0aGlzXSAoTGlua0J1ZmZlciYpIHsKKyAgICAgICAgaW5pdGlhbGl6ZURpcmVjdENhbGwo
KTsKKyAgICB9KTsKK30KKwordm9pZCBDYWxsTGlua0luZm86OmVtaXREaXJlY3RUYWlsQ2FsbEZh
c3RQYXRoKENDYWxsSGVscGVycyYgaml0LCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZv
clRhaWxDYWxsKQoreworICAgIFJFTEVBU0VfQVNTRVJUKGlzVGFpbENhbGwoKSk7CisKKyAgICBz
ZXRVc2VzRGF0YUlDcyhVc2VEYXRhSUM6Ok5vKTsKKworICAgIGF1dG8gZmFzdFBhdGhTdGFydCA9
IGppdC5sYWJlbCgpOworICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtC
dWZmZXIpIHsKKyAgICAgICAgbV9mYXN0UGF0aFN0YXJ0ID0gbGlua0J1ZmZlci5sb2NhdGlvbk9m
PEpTSW50ZXJuYWxQdHJUYWc+KGZhc3RQYXRoU3RhcnQpOworICAgIH0pOworCisgICAgLy8gLSBJ
ZiB3ZSdyZSBub3QgeWV0IGxpbmtlZCwgdGhpcyBpcyBhIGp1bXAgdG8gdGhlIHNsb3cgcGF0aC4K
KyAgICAvLyAtIE9uY2Ugd2UncmUgbGlua2VkIHRvIGEgZmFzdCBwYXRoLCB0aGlzIGdvZXMgYmFj
ayB0byBiZWluZyBub3BzIHNvIHdlIGZhbGwgdGhyb3VnaCB0byB0aGUgbGlua2VkIGp1bXAuCisg
ICAgaml0LmVtaXROb3BzKENDYWxsSGVscGVyczo6cGF0Y2hhYmxlSnVtcFNpemUoKSk7CisKKyAg
ICBwcmVwYXJlRm9yVGFpbENhbGwoKTsKKyAgICBhdXRvIGNhbGwgPSBqaXQubmVhclRhaWxDYWxs
KCk7CisgICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewor
ICAgICAgICB1LmNvZGVJQy5tX2NhbGxMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZk5l
YXJDYWxsPEpTSW50ZXJuYWxQdHJUYWc+KGNhbGwpOworICAgIH0pOworICAgIGppdC5hZGRMYXRl
TGlua1Rhc2soW3RoaXNdIChMaW5rQnVmZmVyJikgeworICAgICAgICBpbml0aWFsaXplRGlyZWN0
Q2FsbCgpOworICAgIH0pOworfQorCit2b2lkIENhbGxMaW5rSW5mbzo6aW5pdGlhbGl6ZURpcmVj
dENhbGwoKQoreworICAgIFJFTEVBU0VfQVNTRVJUKGlzRGlyZWN0KCkpOworICAgIEFTU0VSVCh1
LmNvZGVJQy5tX2NhbGxMb2NhdGlvbik7CisgICAgaWYgKGlzVGFpbENhbGwoKSkgeworICAgICAg
ICBSRUxFQVNFX0FTU0VSVChmYXN0UGF0aFN0YXJ0KCkpOworICAgICAgICBDQ2FsbEhlbHBlcnM6
OmVtaXRKSVRDb2RlT3ZlcihmYXN0UGF0aFN0YXJ0KCksIFsmXSAoQ0NhbGxIZWxwZXJzJiBqaXQp
IHsKKyAgICAgICAgICAgIGF1dG8ganVtcCA9IGppdC5qdW1wKCk7CisgICAgICAgICAgICBqaXQu
YWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgICAgICAgICAg
ICAgbGlua0J1ZmZlci5saW5rKGp1bXAsIHNsb3dQYXRoU3RhcnQoKSk7CisgICAgICAgICAgICB9
KTsKKyAgICAgICAgfSwgImluaXRpYWxpemUgZGlyZWN0IGNhbGwiKTsKKyAgICB9IGVsc2UKKyAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hOZWFyQ2FsbCh1LmNvZGVJQy5tX2NhbGxMb2Nh
dGlvbiwgc2xvd1BhdGhTdGFydCgpKTsKK30KKwordm9pZCBDYWxsTGlua0luZm86OnNldERpcmVj
dENhbGxUYXJnZXQoQ29kZUxvY2F0aW9uTGFiZWw8SlNFbnRyeVB0clRhZz4gdGFyZ2V0KQorewor
ICAgIFJFTEVBU0VfQVNTRVJUKGlzRGlyZWN0KCkpOworCisgICAgaWYgKGlzVGFpbENhbGwoKSkg
eworICAgICAgICBSRUxFQVNFX0FTU0VSVChmYXN0UGF0aFN0YXJ0KCkpOworICAgICAgICBDQ2Fs
bEhlbHBlcnM6OmVtaXRKSVRDb2RlT3ZlcihmYXN0UGF0aFN0YXJ0KCksIFsmXSAoQ0NhbGxIZWxw
ZXJzJiBqaXQpIHsKKyAgICAgICAgICAgIC8vIFdlIHJlc2VydmVkIHRoaXMgbWFueSBieXRlcyBm
b3IgdGhlIGp1bXAgYXQgZmFzdFBhdGhTdGFydCgpLiBNYWtlIHRoYXQKKyAgICAgICAgICAgIC8v
IGNvZGUgbm9wcyBub3cgc28gd2UgZmFsbCB0aHJvdWdoIHRvIHRoZSBqdW1wIHRvIHRoZSBmYXN0
IHBhdGguCisgICAgICAgICAgICBqaXQuZW1pdE5vcHMoQ0NhbGxIZWxwZXJzOjpwYXRjaGFibGVK
dW1wU2l6ZSgpKTsgCisgICAgICAgIH0sICJTZXR0aW5nIGRpcmVjdCBjYWxsIHRhcmdldCIpOwor
ICAgIH0KKworICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoTmVhckNhbGwodS5jb2RlSUMubV9j
YWxsTG9jYXRpb24sIHRhcmdldCk7Cit9CisKK3ZvaWQgQ2FsbExpbmtJbmZvOjpzZXRTbG93UGF0
aENhbGxEZXN0aW5hdGlvbihNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gY29k
ZVB0cikKK3sKKyAgICBtX3Nsb3dQYXRoQ2FsbERlc3RpbmF0aW9uID0gY29kZVB0cjsKK30KKwor
dm9pZCBDYWxsTGlua0luZm86OnJldmVydENhbGxUb1N0dWIoKQoreworICAgIFJFTEVBU0VfQVNT
RVJUKHN0dWIoKSk7CisgICAgLy8gVGhlIHN0YXJ0IG9mIG91ciBKSVQgY29kZSBpcyBub3cgYSBq
dW1wIHRvIHRoZSBwb2x5bW9ycGhpYyBzdHViLiBSZXdyaXRlIHRoZSBmaXJzdCBpbnN0cnVjdGlv
bgorICAgIC8vIHRvIGJlIHdoYXQgd2UgbmVlZCBmb3Igbm9uIHN0dWIgSUNzLgorCisgICAgLy8g
dGhpcyBydW5zIGludG8gc29tZSBicmFuY2ggY29tcGFjdGlvbiBjcmFwIEknZCBsaWtlIHRvIGF2
b2lkIGZvciBub3cuIEVzc2VudGlhbGx5LCB0aGUgYnJhbmNoCisgICAgLy8gZG9lc24ndCBrbm93
IGlmIGl0IGNhbiBiZSBjb21wYWN0ZWQgb3Igbm90LiBTbyB3ZSBlbmQgdXAgd2l0aCAyOCBieXRl
cyBvZiBtYWNoaW5lIGNvZGUsIGZvcgorICAgIC8vIHdoYXQgaW4gYWxsIGxpa2VsaWhvb2QgZml0
cyBpbiAyNC4gU28gd2UganVzdCBzcGxhdCBvdXQgdGhlIGZpcnN0IGluc3RydWN0aW9uLiBMb25n
IHRlcm0sIHdlCisgICAgLy8gbmVlZCBzb21ldGhpbmcgY2xlYW5lci4gQnV0IHRoaXMgd29ya3Mg
b24gYXJtNjQgZm9yIG5vdy4KKworICAgIENDYWxsSGVscGVyczo6ZW1pdEpJVENvZGVPdmVyKGZh
c3RQYXRoU3RhcnQoKSwgWyZdIChDQ2FsbEhlbHBlcnMmIGppdCkgeworICAgICAgICBpZiAoaXNE
YXRhSUMoKSkKKyAgICAgICAgICAgIGVtaXRGaXJzdEluc3RydWN0aW9uRm9yRGF0YUlDKGppdCwg
dS5kYXRhSUMubV9jYWxsTGlua0luZm9HUFIpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg
IENDYWxsSGVscGVyczo6cmV2ZXJ0SnVtcFJlcGxhY2VtZW50VG9CcmFuY2hQdHJXaXRoUGF0Y2go
CisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpzdGFydE9mQnJhbmNoUHRyV2l0aFBhdGNo
T25SZWdpc3Rlcih1LmNvZGVJQy5tX2NhbGxlZUxvY2F0aW9uKSwgY2FsbGVlR1BSKCksIG51bGxw
dHIpOworICAgICAgICB9CisgICAgfSwgICJSZXNldHRpbmcgUG9seW1vcnBoaWNDYWxsIHN0dWJi
ZWQgQ2FsbExpbmtJbmZvIik7Cit9CisKK3ZvaWQgQ2FsbExpbmtJbmZvOjpzZXRTdHViKFJlZjxQ
b2x5bW9ycGhpY0NhbGxTdHViUm91dGluZT4mJiBuZXdTdHViKQoreworICAgIGNsZWFyU3R1Yigp
OworICAgIG1fc3R1YiA9IFdURk1vdmUobmV3U3R1Yik7CisKKyAgICBpZiAoaXNEYXRhSUMoKSkg
eworICAgICAgICBDQ2FsbEhlbHBlcnM6OmVtaXRKSVRDb2RlT3ZlcihmYXN0UGF0aFN0YXJ0KCks
IFsmXSAoQ0NhbGxIZWxwZXJzJiBqaXQpIHsKKyAgICAgICAgICAgIGF1dG8ganVtcCA9IGppdC5q
dW1wKCk7CisgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5r
QnVmZmVyKSB7CisgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKGp1bXAsIENvZGVMb2Nh
dGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihtX3N0dWItPmNvZGUoKS5jb2RlKCkpKTsK
KyAgICAgICAgICAgIH0pOworICAgICAgICB9LCAiUGF0Y2hpbmcgY2FsbCB0byBQb2x5bW9ycGhp
Y0NhbGxTdHViUm91dGluZSBpbiBDYWxsTGlua0luZm8iKTsKKyAgICB9IGVsc2UgeworICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6cmVwbGFjZVdpdGhKdW1wKAorICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OnN0YXJ0T2ZCcmFuY2hQdHJXaXRoUGF0Y2hPblJlZ2lzdGVyKHUuY29kZUlDLm1fY2Fs
bGVlTG9jYXRpb24pLAorICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRp
bmVQdHJUYWc+KG1fc3R1Yi0+Y29kZSgpLmNvZGUoKSkpOworICAgIH0KK30KKwogfSAvLyBuYW1l
c3BhY2UgSlNDCiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uaAkocmV2aXNpb24gMjc2OTc3KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zMCwxMiArMzAsMTQgQEAKICNpbmNsdWRlICJDb2RlU3BlY2lhbGl6YXRpb25LaW5k
LmgiCiAjaW5jbHVkZSAiUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUuaCIKICNpbmNsdWRlICJX
cml0ZUJhcnJpZXIuaCIKKyNpbmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KICNpbmNsdWRlIDx3dGYv
U2VudGluZWxMaW5rZWRMaXN0Lmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCiAjaWYgRU5BQkxFKEpJ
VCkKIAorY2xhc3MgQ0NhbGxIZWxwZXJzOwogY2xhc3MgRnVuY3Rpb25Db2RlQmxvY2s7CiBjbGFz
cyBKU0Z1bmN0aW9uOwogZW51bSBPcGNvZGVJRCA6IHVuc2lnbmVkOwpAQCAtMTYzLDE2ICsxNjUs
MzggQEAgcHVibGljOgogICAgICAgICBtX2NhbGxlZUdQUiA9IGNhbGxlZUdQUjsKICAgICB9CiAK
LSAgICB2b2lkIHNldENhbGxMb2NhdGlvbnMoCi0gICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPEpT
SW50ZXJuYWxQdHJUYWc+IGNhbGxSZXR1cm5Mb2NhdGlvbk9yUGF0Y2hhYmxlSnVtcCwKLSAgICAg
ICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gaG90UGF0aEJlZ2luT3JTbG93
UGF0aFN0YXJ0LAotICAgICAgICBDb2RlTG9jYXRpb25OZWFyQ2FsbDxKU0ludGVybmFsUHRyVGFn
PiBob3RQYXRoT3RoZXIpCi0gICAgewotICAgICAgICBtX2NhbGxSZXR1cm5Mb2NhdGlvbk9yUGF0
Y2hhYmxlSnVtcCA9IGNhbGxSZXR1cm5Mb2NhdGlvbk9yUGF0Y2hhYmxlSnVtcDsKLSAgICAgICAg
bV9ob3RQYXRoQmVnaW5PclNsb3dQYXRoU3RhcnQgPSBob3RQYXRoQmVnaW5PclNsb3dQYXRoU3Rh
cnQ7Ci0gICAgICAgIG1faG90UGF0aE90aGVyID0gaG90UGF0aE90aGVyOworICAgIEdQUlJlZyBj
YWxsZWVHUFIoKSBjb25zdCB7IHJldHVybiBtX2NhbGxlZUdQUjsgfQorICAgIAorICAgIGVudW0g
Y2xhc3MgVXNlRGF0YUlDIDogdWludDhfdCB7CisgICAgICAgIFllcywKKyAgICAgICAgTm8KKyAg
ICB9OworCitwcml2YXRlOgorICAgIHZvaWQgZW1pdEZpcnN0SW5zdHJ1Y3Rpb25Gb3JEYXRhSUMo
Q0NhbGxIZWxwZXJzJiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUik7CisgICAgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXBMaXN0IGVtaXRGYXN0UGF0aEltcGwoQ0NhbGxIZWxwZXJzJiwgR1BSUmVnIGNhbGxl
ZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDLCBXVEY6OkZ1bmN0aW9uPHZv
aWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKSBXQVJOX1VOVVNFRF9SRVRVUk47CitwdWJsaWM6Cisg
ICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGVtaXRGYXN0UGF0aChDQ2FsbEhlbHBlcnMmLCBH
UFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUMpIFdBUk5f
VU5VU0VEX1JFVFVSTjsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdFRhaWxDYWxs
RmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5r
SW5mb0dQUiwgVXNlRGF0YUlDLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxD
YWxsKSBXQVJOX1VOVVNFRF9SRVRVUk47CisgICAgdm9pZCBlbWl0RGlyZWN0RmFzdFBhdGgoQ0Nh
bGxIZWxwZXJzJik7CisgICAgdm9pZCBlbWl0RGlyZWN0VGFpbENhbGxGYXN0UGF0aChDQ2FsbEhl
bHBlcnMmLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKTsKKyAgICB2
b2lkIGVtaXRTbG93UGF0aChWTSYsIENDYWxsSGVscGVycyYpOworICAgIHZvaWQgcmV2ZXJ0Q2Fs
bFRvU3R1YigpOworCisgICAgYm9vbCBpc0RhdGFJQygpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19j
YXN0PFVzZURhdGFJQz4obV91c2VEYXRhSUMpID09IFVzZURhdGFJQzo6WWVzOyB9CisgICAgdm9p
ZCBzZXRVc2VzRGF0YUlDcyhVc2VEYXRhSUMgdXNlRGF0YUlDKSB7IG1fdXNlRGF0YUlDID0gc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KHVzZURhdGFJQyk7IH0KKworICAgIHZvaWQgc2V0Q29kZUxvY2F0
aW9ucygKKyAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gc2xvd1Bh
dGhTdGFydCwKKyAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gZG9u
ZUxvY2F0aW9uKQorICAgIHsKKyAgICAgICAgaWYgKCFpc0RhdGFJQygpKQorICAgICAgICAgICAg
dS5jb2RlSUMubV9zbG93UGF0aFN0YXJ0ID0gc2xvd1BhdGhTdGFydDsKKyAgICAgICAgbV9kb25l
TG9jYXRpb24gPSBkb25lTG9jYXRpb247CiAgICAgfQogCisgICAgdm9pZCBpbml0aWFsaXplRGly
ZWN0Q2FsbCgpOworCiAgICAgYm9vbCBhbGxvd1N0dWJzKCkgY29uc3QgeyByZXR1cm4gbV9hbGxv
d1N0dWJzOyB9CiAKICAgICB2b2lkIGRpc2FsbG93U3R1YnMoKQpAQCAtMTgwLDIzICsyMDQsMTkg
QEAgcHVibGljOgogICAgICAgICBtX2FsbG93U3R1YnMgPSBmYWxzZTsKICAgICB9CiAKLSAgICBD
b2RlTG9jYXRpb25OZWFyQ2FsbDxKU0ludGVybmFsUHRyVGFnPiBjYWxsUmV0dXJuTG9jYXRpb24o
KTsKLSAgICBDb2RlTG9jYXRpb25KdW1wPEpTSW50ZXJuYWxQdHJUYWc+IHBhdGNoYWJsZUp1bXAo
KTsKLSAgICBDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHI8SlNJbnRlcm5hbFB0clRhZz4gaG90UGF0
aEJlZ2luKCk7CisgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gZmFzdFBh
dGhTdGFydCgpOwogICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IHNsb3dQ
YXRoU3RhcnQoKTsKKyAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBkb25l
TG9jYXRpb24oKTsKIAotICAgIENvZGVMb2NhdGlvbk5lYXJDYWxsPEpTSW50ZXJuYWxQdHJUYWc+
IGhvdFBhdGhPdGhlcigpCi0gICAgewotICAgICAgICByZXR1cm4gbV9ob3RQYXRoT3RoZXI7Ci0g
ICAgfQotCi0gICAgdm9pZCBzZXRDYWxsZWUoVk0mLCBKU0NlbGwqLCBKU09iamVjdCogY2FsbGVl
KTsKKyAgICB2b2lkIHNldE1vbm9tb3JwaGljQ2FsbGVlKFZNJiwgSlNDZWxsKiwgSlNPYmplY3Qq
IGNhbGxlZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+KTsKKyAgICB2b2lk
IHNldFNsb3dQYXRoQ2FsbERlc3RpbmF0aW9uKE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5
UHRyVGFnPik7CiAgICAgdm9pZCBjbGVhckNhbGxlZSgpOwogICAgIEpTT2JqZWN0KiBjYWxsZWUo
KTsKIAogICAgIHZvaWQgc2V0Q29kZUJsb2NrKFZNJiwgSlNDZWxsKiwgRnVuY3Rpb25Db2RlQmxv
Y2sqKTsKICAgICB2b2lkIGNsZWFyQ29kZUJsb2NrKCk7CiAgICAgRnVuY3Rpb25Db2RlQmxvY2sq
IGNvZGVCbG9jaygpOworICAgIHZvaWQgc2V0RGlyZWN0Q2FsbFRhcmdldChDb2RlTG9jYXRpb25M
YWJlbDxKU0VudHJ5UHRyVGFnPik7CiAKICAgICB2b2lkIHNldExhc3RTZWVuQ2FsbGVlKFZNJiwg
Y29uc3QgSlNDZWxsKiBvd25lciwgSlNPYmplY3QqIGNhbGxlZSk7CiAgICAgdm9pZCBjbGVhckxh
c3RTZWVuQ2FsbGVlKCk7CkBAIC0yMDYsMTIgKzIyNiw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNl
dEV4ZWN1dGFibGVEdXJpbmdDb21waWxhdGlvbihFeGVjdXRhYmxlQmFzZSopOwogICAgIEV4ZWN1
dGFibGVCYXNlKiBleGVjdXRhYmxlKCk7CiAgICAgCi0gICAgdm9pZCBzZXRTdHViKFJlZjxQb2x5
bW9ycGhpY0NhbGxTdHViUm91dGluZT4mJiBuZXdTdHViKQotICAgIHsKLSAgICAgICAgY2xlYXJT
dHViKCk7Ci0gICAgICAgIG1fc3R1YiA9IFdURk1vdmUobmV3U3R1Yik7Ci0gICAgfQotCisgICAg
dm9pZCBzZXRTdHViKFJlZjxQb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZT4mJik7CiAgICAgdm9p
ZCBjbGVhclN0dWIoKTsKIAogICAgIFBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lKiBzdHViKCkg
Y29uc3QKQEAgLTMxMSw2ICszMjYsMjEgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gT0JKRUNU
X09GRlNFVE9GKENhbGxMaW5rSW5mbywgbV9zbG93UGF0aENvdW50KTsKICAgICB9CiAKKyAgICBz
dGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQ2FsbGVlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBP
QkpFQ1RfT0ZGU0VUT0YoQ2FsbExpbmtJbmZvLCBtX2NhbGxlZU9yQ29kZUJsb2NrKTsKKyAgICB9
CisKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTW9ub21vcnBoaWNDYWxsRGVzdGluYXRp
b24oKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDYWxsTGlua0luZm8s
IHUpICsgT0JKRUNUX09GRlNFVE9GKFVuaW9uVHlwZSwgZGF0YUlDLm1fbW9ub21vcnBoaWNDYWxs
RGVzdGluYXRpb24pOworICAgIH0KKworICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZTbG93
UGF0aENhbGxEZXN0aW5hdGlvbigpCisgICAgeworICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNF
VE9GKENhbGxMaW5rSW5mbywgbV9zbG93UGF0aENhbGxEZXN0aW5hdGlvbik7CisgICAgfQorCiAg
ICAgR1BSUmVnIGNhbGxlZUdQUigpCiAgICAgewogICAgICAgICByZXR1cm4gbV9jYWxsZWVHUFI7
CkBAIC0zNTIsMTAgKzM4MiwyNSBAQCBwdWJsaWM6CiAgICAgfQogCiBwcml2YXRlOgotICAgIHVp
bnQzMl90IG1fbWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgeyAwIH07IC8vIEZvciB2YXJh
cmdzOiB0aGUgcHJvZmlsZWQgbWF4aW11bSBudW1iZXIgb2YgYXJndW1lbnRzLiBGb3IgZGlyZWN0
OiB0aGUgbnVtYmVyIG9mIHN0YWNrIHNsb3RzIGFsbG9jYXRlZCBmb3IgYXJndW1lbnRzLgotICAg
IENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IG1fY2FsbFJldHVybkxvY2F0aW9u
T3JQYXRjaGFibGVKdW1wOwotICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+
IG1faG90UGF0aEJlZ2luT3JTbG93UGF0aFN0YXJ0OwotICAgIENvZGVMb2NhdGlvbk5lYXJDYWxs
PEpTSW50ZXJuYWxQdHJUYWc+IG1faG90UGF0aE90aGVyOworICAgIENvZGVMb2NhdGlvbkxhYmVs
PEpTSW50ZXJuYWxQdHJUYWc+IG1fZmFzdFBhdGhTdGFydDsKKyAgICBDb2RlTG9jYXRpb25MYWJl
bDxKU0ludGVybmFsUHRyVGFnPiBtX2RvbmVMb2NhdGlvbjsKKyAgICBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHI8SlNFbnRyeVB0clRhZz4gbV9zbG93UGF0aENhbGxEZXN0aW5hdGlvbjsKKyAgICB1bmlv
biBVbmlvblR5cGUgeworICAgICAgICBVbmlvblR5cGUoKSAKKyAgICAgICAgICAgIDogZGF0YUlD
IHsgbnVsbHB0ciwgSW52YWxpZEdQUlJlZyB9CisgICAgICAgIHsgfQorICAgICAgICBzdHJ1Y3Qg
RGF0YUlDIHsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFn
PiBtX21vbm9tb3JwaGljQ2FsbERlc3RpbmF0aW9uOworICAgICAgICAgICAgR1BSUmVnIG1fY2Fs
bExpbmtJbmZvR1BSOworICAgICAgICB9IGRhdGFJQzsKKworICAgICAgICBzdHJ1Y3QgeworICAg
ICAgICAgICAgQ29kZUxvY2F0aW9uTmVhckNhbGw8SlNJbnRlcm5hbFB0clRhZz4gbV9jYWxsTG9j
YXRpb247CisgICAgICAgICAgICBDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHI8SlNJbnRlcm5hbFB0
clRhZz4gbV9jYWxsZWVMb2NhdGlvbjsKKyAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPEpT
SW50ZXJuYWxQdHJUYWc+IG1fc2xvd1BhdGhTdGFydDsKKyAgICAgICAgfSBjb2RlSUM7CisgICAg
fSB1OworCiAgICAgV3JpdGVCYXJyaWVyPEpTQ2VsbD4gbV9jYWxsZWVPckNvZGVCbG9jazsKICAg
ICBXcml0ZUJhcnJpZXI8SlNDZWxsPiBtX2xhc3RTZWVuQ2FsbGVlT3JFeGVjdXRhYmxlOwogICAg
IFJlZlB0cjxQb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZT4gbV9zdHViOwpAQCAtMzY5LDggKzQx
NCwxMCBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9hbGxvd1N0dWJzIDogMTsKICAgICBib29sIG1f
Y2xlYXJlZEJ5SmV0dGlzb24gOiAxOwogICAgIHVuc2lnbmVkIG1fY2FsbFR5cGUgOiA0OyAvLyBD
YWxsVHlwZQorICAgIHVuc2lnbmVkIG1fdXNlRGF0YUlDIDogMTsgLy8gVXNlRGF0YUlDCiAgICAg
R1BSUmVnIG1fY2FsbGVlR1BSIHsgSW52YWxpZEdQUlJlZyB9OwogICAgIHVpbnQzMl90IG1fc2xv
d1BhdGhDb3VudCB7IDAgfTsKKyAgICB1aW50MzJfdCBtX21heEFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzIHsgMCB9OyAvLyBGb3IgdmFyYXJnczogdGhlIHByb2ZpbGVkIG1heGltdW0gbnVtYmVy
IG9mIGFyZ3VtZW50cy4gRm9yIGRpcmVjdDogdGhlIG51bWJlciBvZiBzdGFjayBzbG90cyBhbGxv
Y2F0ZWQgZm9yIGFyZ3VtZW50cy4KIH07CiAKIGlubGluZSBDb2RlT3JpZ2luIGdldENhbGxMaW5r
SW5mb0NvZGVPcmlnaW4oQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8pCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAkocmV2aXNpb24gMjc2OTc3
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI1NSwzMSArMjU1LDE4IEBAIHZvaWQgSklUQ29tcGlsZXI6OmxpbmsoTGlu
a0J1ZmZlciYgbGlua0IKICAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX2luc3RhbmNlT2ZzLCBs
aW5rQnVmZmVyKTsKICAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX3ByaXZhdGVCcmFuZEFjY2Vz
c2VzLCBsaW5rQnVmZmVyKTsKIAotICAgIGF1dG8gbGlua0NhbGxUaHVuayA9IEZ1bmN0aW9uUHRy
PE5vUHRyVGFnPih2bSgpLmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcikucmV0YWdn
ZWRDb2RlPE5vUHRyVGFnPigpKTsKICAgICBmb3IgKGF1dG8mIHJlY29yZCA6IG1fanNDYWxscykg
ewogICAgICAgICBDYWxsTGlua0luZm8mIGluZm8gPSAqcmVjb3JkLmluZm87Ci0gICAgICAgIGxp
bmtCdWZmZXIubGluayhyZWNvcmQuc2xvd0NhbGwsIGxpbmtDYWxsVGh1bmspOwotICAgICAgICBp
bmZvLnNldENhbGxMb2NhdGlvbnMoCi0gICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0lu
dGVybmFsUHRyVGFnPihsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxKU0ludGVybmFsUHRy
VGFnPihyZWNvcmQuc2xvd0NhbGwpKSwKLSAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPEpT
SW50ZXJuYWxQdHJUYWc+KGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihy
ZWNvcmQudGFyZ2V0VG9DaGVjaykpLAotICAgICAgICAgICAgbGlua0J1ZmZlci5sb2NhdGlvbk9m
TmVhckNhbGw8SlNJbnRlcm5hbFB0clRhZz4ocmVjb3JkLmZhc3RDYWxsKSk7CisgICAgICAgIGlu
Zm8uc2V0Q29kZUxvY2F0aW9ucygKKyAgICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZjxK
U0ludGVybmFsUHRyVGFnPihyZWNvcmQuc2xvd1BhdGhTdGFydCksCisgICAgICAgICAgICBsaW5r
QnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4ocmVjb3JkLmRvbmVMb2NhdGlvbikp
OwogICAgIH0KICAgICAKICAgICBmb3IgKEpTRGlyZWN0Q2FsbFJlY29yZCYgcmVjb3JkIDogbV9q
c0RpcmVjdENhbGxzKSB7CiAgICAgICAgIENhbGxMaW5rSW5mbyYgaW5mbyA9ICpyZWNvcmQuaW5m
bzsKLSAgICAgICAgbGlua0J1ZmZlci5saW5rKHJlY29yZC5jYWxsLCBsaW5rQnVmZmVyLmxvY2F0
aW9uT2Y8Tm9QdHJUYWc+KHJlY29yZC5zbG93UGF0aCkpOwotICAgICAgICBpbmZvLnNldENhbGxM
b2NhdGlvbnMoCi0gICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFn
PigpLAorICAgICAgICBpbmZvLnNldENvZGVMb2NhdGlvbnMoCiAgICAgICAgICAgICBsaW5rQnVm
ZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4ocmVjb3JkLnNsb3dQYXRoKSwKLSAgICAg
ICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPEpTSW50ZXJuYWxQdHJUYWc+KHJl
Y29yZC5jYWxsKSk7Ci0gICAgfQotICAgIAotICAgIGZvciAoSlNEaXJlY3RUYWlsQ2FsbFJlY29y
ZCYgcmVjb3JkIDogbV9qc0RpcmVjdFRhaWxDYWxscykgewotICAgICAgICBDYWxsTGlua0luZm8m
IGluZm8gPSAqcmVjb3JkLmluZm87Ci0gICAgICAgIGluZm8uc2V0Q2FsbExvY2F0aW9ucygKLSAg
ICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihyZWNvcmQu
cGF0Y2hhYmxlSnVtcCksCi0gICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRl
cm5hbFB0clRhZz4ocmVjb3JkLnNsb3dQYXRoKSwKLSAgICAgICAgICAgIGxpbmtCdWZmZXIubG9j
YXRpb25PZk5lYXJDYWxsPEpTSW50ZXJuYWxQdHJUYWc+KHJlY29yZC5jYWxsKSk7CisgICAgICAg
ICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPigpKTsKICAgICB9CiAgICAg
CiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBvc3JFeGl0VGh1bmsg
PSB2bSgpLmdldENUSVN0dWIob3NyRXhpdEdlbmVyYXRpb25UaHVua0dlbmVyYXRvcik7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCShyZXZpc2lvbiAy
NzY5NzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTIxOSwxOSArMjE5LDE0IEBAIHB1YmxpYzoKICAgICAgICAgbV9wcml2
YXRlQnJhbmRBY2Nlc3Nlcy5hcHBlbmQoSW5saW5lQ2FjaGVXcmFwcGVyPEpJVFByaXZhdGVCcmFu
ZEFjY2Vzc0dlbmVyYXRvcj4oZ2VuLCBzbG93UGF0aCkpOwogICAgIH0KIAotICAgIHZvaWQgYWRk
SlNDYWxsKENhbGwgZmFzdENhbGwsIENhbGwgc2xvd0NhbGwsIERhdGFMYWJlbFB0ciB0YXJnZXRU
b0NoZWNrLCBDYWxsTGlua0luZm8qIGluZm8pCisgICAgdm9pZCBhZGRKU0NhbGwoTGFiZWwgc2xv
d1BhdGhTdGFydCwgTGFiZWwgZG9uZUxvY2F0aW9uLCBDYWxsTGlua0luZm8qIGluZm8pCiAgICAg
ewotICAgICAgICBtX2pzQ2FsbHMuYXBwZW5kKEpTQ2FsbFJlY29yZChmYXN0Q2FsbCwgc2xvd0Nh
bGwsIHRhcmdldFRvQ2hlY2ssIGluZm8pKTsKKyAgICAgICAgbV9qc0NhbGxzLmFwcGVuZChKU0Nh
bGxSZWNvcmQoc2xvd1BhdGhTdGFydCwgZG9uZUxvY2F0aW9uLCBpbmZvKSk7CiAgICAgfQogICAg
IAotICAgIHZvaWQgYWRkSlNEaXJlY3RDYWxsKENhbGwgY2FsbCwgTGFiZWwgc2xvd1BhdGgsIENh
bGxMaW5rSW5mbyogaW5mbykKKyAgICB2b2lkIGFkZEpTRGlyZWN0Q2FsbChMYWJlbCBzbG93UGF0
aCwgQ2FsbExpbmtJbmZvKiBpbmZvKQogICAgIHsKLSAgICAgICAgbV9qc0RpcmVjdENhbGxzLmFw
cGVuZChKU0RpcmVjdENhbGxSZWNvcmQoY2FsbCwgc2xvd1BhdGgsIGluZm8pKTsKLSAgICB9Ci0g
ICAgCi0gICAgdm9pZCBhZGRKU0RpcmVjdFRhaWxDYWxsKFBhdGNoYWJsZUp1bXAgcGF0Y2hhYmxl
SnVtcCwgQ2FsbCBjYWxsLCBMYWJlbCBzbG93UGF0aCwgQ2FsbExpbmtJbmZvKiBpbmZvKQotICAg
IHsKLSAgICAgICAgbV9qc0RpcmVjdFRhaWxDYWxscy5hcHBlbmQoSlNEaXJlY3RUYWlsQ2FsbFJl
Y29yZChwYXRjaGFibGVKdW1wLCBjYWxsLCBzbG93UGF0aCwgaW5mbykpOworICAgICAgICBtX2pz
RGlyZWN0Q2FsbHMuYXBwZW5kKEpTRGlyZWN0Q2FsbFJlY29yZChzbG93UGF0aCwgaW5mbykpOwog
ICAgIH0KICAgICAKICAgICB2b2lkIGFkZFdlYWtSZWZlcmVuY2UoSlNDZWxsKiB0YXJnZXQpCkBA
IC0zMjgsNTIgKzMyMywyOSBAQCBwcml2YXRlOgogCiAKICAgICBzdHJ1Y3QgSlNDYWxsUmVjb3Jk
IHsKLSAgICAgICAgSlNDYWxsUmVjb3JkKENhbGwgZmFzdENhbGwsIENhbGwgc2xvd0NhbGwsIERh
dGFMYWJlbFB0ciB0YXJnZXRUb0NoZWNrLCBDYWxsTGlua0luZm8qIGluZm8pCi0gICAgICAgICAg
ICA6IGZhc3RDYWxsKGZhc3RDYWxsKQotICAgICAgICAgICAgLCBzbG93Q2FsbChzbG93Q2FsbCkK
LSAgICAgICAgICAgICwgdGFyZ2V0VG9DaGVjayh0YXJnZXRUb0NoZWNrKQorICAgICAgICBKU0Nh
bGxSZWNvcmQoTGFiZWwgc2xvd1BhdGhTdGFydCwgTGFiZWwgZG9uZUxvY2F0aW9uLCBDYWxsTGlu
a0luZm8qIGluZm8pCisgICAgICAgICAgICA6IHNsb3dQYXRoU3RhcnQoc2xvd1BhdGhTdGFydCkK
KyAgICAgICAgICAgICwgZG9uZUxvY2F0aW9uKGRvbmVMb2NhdGlvbikKICAgICAgICAgICAgICwg
aW5mbyhpbmZvKQogICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQoZmFzdENhbGwuaXNGbGFn
U2V0KENhbGw6Ok5lYXIpKTsKLSAgICAgICAgICAgIEFTU0VSVChzbG93Q2FsbC5pc0ZsYWdTZXQo
Q2FsbDo6TmVhcikpOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBDYWxsIGZhc3RDYWxs
OwotICAgICAgICBDYWxsIHNsb3dDYWxsOwotICAgICAgICBEYXRhTGFiZWxQdHIgdGFyZ2V0VG9D
aGVjazsKKyAgICAgICAgTGFiZWwgZmFzdFBhdGhTdGFydDsKKyAgICAgICAgTGFiZWwgc2xvd1Bh
dGhTdGFydDsKKyAgICAgICAgTGFiZWwgZG9uZUxvY2F0aW9uOwogICAgICAgICBDYWxsTGlua0lu
Zm8qIGluZm87CiAgICAgfTsKICAgICAKICAgICBzdHJ1Y3QgSlNEaXJlY3RDYWxsUmVjb3JkIHsK
LSAgICAgICAgSlNEaXJlY3RDYWxsUmVjb3JkKENhbGwgY2FsbCwgTGFiZWwgc2xvd1BhdGgsIENh
bGxMaW5rSW5mbyogaW5mbykKLSAgICAgICAgICAgIDogY2FsbChjYWxsKQotICAgICAgICAgICAg
LCBzbG93UGF0aChzbG93UGF0aCkKLSAgICAgICAgICAgICwgaW5mbyhpbmZvKQotICAgICAgICB7
Ci0gICAgICAgICAgICBBU1NFUlQoY2FsbC5pc0ZsYWdTZXQoQ2FsbDo6TmVhcikpOwotICAgICAg
ICB9Ci0gICAgICAgIAotICAgICAgICBDYWxsIGNhbGw7Ci0gICAgICAgIExhYmVsIHNsb3dQYXRo
OwotICAgICAgICBDYWxsTGlua0luZm8qIGluZm87Ci0gICAgfTsKLSAgICAKLSAgICBzdHJ1Y3Qg
SlNEaXJlY3RUYWlsQ2FsbFJlY29yZCB7Ci0gICAgICAgIEpTRGlyZWN0VGFpbENhbGxSZWNvcmQo
UGF0Y2hhYmxlSnVtcCBwYXRjaGFibGVKdW1wLCBDYWxsIGNhbGwsIExhYmVsIHNsb3dQYXRoLCBD
YWxsTGlua0luZm8qIGluZm8pCi0gICAgICAgICAgICA6IHBhdGNoYWJsZUp1bXAocGF0Y2hhYmxl
SnVtcCkKLSAgICAgICAgICAgICwgY2FsbChjYWxsKQotICAgICAgICAgICAgLCBzbG93UGF0aChz
bG93UGF0aCkKKyAgICAgICAgSlNEaXJlY3RDYWxsUmVjb3JkKExhYmVsIHNsb3dQYXRoLCBDYWxs
TGlua0luZm8qIGluZm8pCisgICAgICAgICAgICA6IHNsb3dQYXRoKHNsb3dQYXRoKQogICAgICAg
ICAgICAgLCBpbmZvKGluZm8pCiAgICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChjYWxsLmlz
RmxhZ1NldChDYWxsOjpOZWFyKSAmJiBjYWxsLmlzRmxhZ1NldChDYWxsOjpUYWlsKSk7CiAgICAg
ICAgIH0KICAgICAgICAgCi0gICAgICAgIFBhdGNoYWJsZUp1bXAgcGF0Y2hhYmxlSnVtcDsKLSAg
ICAgICAgQ2FsbCBjYWxsOwogICAgICAgICBMYWJlbCBzbG93UGF0aDsKICAgICAgICAgQ2FsbExp
bmtJbmZvKiBpbmZvOwogICAgIH07Ci0KICAgICAKICAgICBWZWN0b3I8SW5saW5lQ2FjaGVXcmFw
cGVyPEpJVEdldEJ5SWRHZW5lcmF0b3I+LCA0PiBtX2dldEJ5SWRzOwogICAgIFZlY3RvcjxJbmxp
bmVDYWNoZVdyYXBwZXI8SklUR2V0QnlJZFdpdGhUaGlzR2VuZXJhdG9yPiwgND4gbV9nZXRCeUlk
c1dpdGhUaGlzOwpAQCAtMzg2LDcgKzM1OCw2IEBAIHByaXZhdGU6CiAgICAgVmVjdG9yPElubGlu
ZUNhY2hlV3JhcHBlcjxKSVRQcml2YXRlQnJhbmRBY2Nlc3NHZW5lcmF0b3I+LCA0PiBtX3ByaXZh
dGVCcmFuZEFjY2Vzc2VzOwogICAgIFZlY3RvcjxKU0NhbGxSZWNvcmQsIDQ+IG1fanNDYWxsczsK
ICAgICBWZWN0b3I8SlNEaXJlY3RDYWxsUmVjb3JkLCA0PiBtX2pzRGlyZWN0Q2FsbHM7Ci0gICAg
VmVjdG9yPEpTRGlyZWN0VGFpbENhbGxSZWNvcmQsIDQ+IG1fanNEaXJlY3RUYWlsQ2FsbHM7CiAg
ICAgU2VnbWVudGVkVmVjdG9yPE9TUkV4aXRDb21waWxhdGlvbkluZm8sIDQ+IG1fZXhpdENvbXBp
bGF0aW9uSW5mbzsKICAgICBWZWN0b3I8VmVjdG9yPExhYmVsPj4gbV9leGl0U2l0ZUxhYmVsczsK
ICAgICBWZWN0b3I8REZHOjpPU1JFbnRyeURhdGE+IG1fb3NyRW50cnk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24u
Y3BwCShyZXZpc2lvbiAyNzY5NzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09T
UkV4aXRDb21waWxlckNvbW1vbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDYgKzQwLDggQEAg
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCiB2b2lkIGhhbmRsZUV4aXRDb3VudHMo
Vk0mIHZtLCBDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgT1NSRXhpdEJhc2UmIGV4aXQpCiB7Cisg
ICAgaml0LmFkZDY0KEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKDEpLCBBc3NlbWJseUhl
bHBlcnM6OkFic29sdXRlQWRkcmVzcygmZ19udW1iZXJPZk9TUkV4aXRzKSk7CisgICAgCiAgICAg
aWYgKCFleGl0S2luZE1heUpldHRpc29uKGV4aXQubV9raW5kKSkgewogICAgICAgICAvLyBGSVhN
RTogV2UgbWF5IHdhbnQgdG8gbm90aWNlIHRoYXQgd2UncmUgZnJlcXVlbnRseSBleGl0aW5nCiAg
ICAgICAgIC8vIGF0IGFuIG9wX2NhdGNoIHRoYXQgd2UgZGlkbid0IGNvbXBpbGUgYW4gZW50cnlw
b2ludCBmb3IsIGFuZApAQCAtMjA5LDcgKzIxMSw3IEBAIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHI8SlNFbnRyeVB0clQKICAgICAgICAgICAgICAgICBiYXNlbGluZUNvZGVCbG9ja0ZvckNh
bGxlci0+Z2V0Q2FsbExpbmtJbmZvRm9yQnl0ZWNvZGVJbmRleChjYWxsQnl0ZWNvZGVJbmRleCk7
CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjYWxsTGlua0luZm8pOwogCi0gICAgICAgICAg
ICBqdW1wVGFyZ2V0ID0gY2FsbExpbmtJbmZvLT5jYWxsUmV0dXJuTG9jYXRpb24oKS5yZXRhZ2dl
ZDxKU0VudHJ5UHRyVGFnPigpOworICAgICAgICAgICAganVtcFRhcmdldCA9IGNhbGxMaW5rSW5m
by0+ZG9uZUxvY2F0aW9uKCkucmV0YWdnZWQ8SlNFbnRyeVB0clRhZz4oKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
T3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMjc2OTc3KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYxNiw3ICszNjE2
LDcgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkxpbmtEaQogICAgICAgICAg
ICAgY29kZVB0ciA9IGZ1bmN0aW9uRXhlY3V0YWJsZS0+ZW50cnlwb2ludEZvcihraW5kLCBBcml0
eUNoZWNrTm90UmVxdWlyZWQpOwogICAgIH0KICAgICAKLSAgICBsaW5rRGlyZWN0Rm9yKGNhbGxG
cmFtZSwgKmNhbGxMaW5rSW5mbywgY29kZUJsb2NrLCBjb2RlUHRyKTsKKyAgICBsaW5rRGlyZWN0
Q2FsbChjYWxsRnJhbWUsICpjYWxsTGlua0luZm8sIGNvZGVCbG9jaywgY29kZVB0cik7CiB9CiAK
IEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25UcmlnZ2VyUmVvcHRpbWl6YXRpb25O
b3csIHZvaWQsIChDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ29kZUJsb2NrKiBvcHRpbWl6ZWRDb2Rl
QmxvY2ssIE9TUkV4aXRCYXNlKiBleGl0KSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMjc2OTc3KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNzIwLDkgKzcyMCwxMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2Fs
bChOb2RlKiBub2RlCiAgICAgICAgICAgICBpZiAoIWlzRGlyZWN0KQogICAgICAgICAgICAgICAg
IGNhbGxlZS51c2UoKTsKIAorICAgICAgICAgICAgc2h1ZmZsZURhdGEuY2FsbGVlID0gVmFsdWVS
ZWNvdmVyeTo6aW5HUFIoY2FsbGVlR1BSLCBEYXRhRm9ybWF0SlMpOworCiAgICAgICAgICAgICBz
aHVmZmxlRGF0YS5udW1iZXJUYWdSZWdpc3RlciA9IEdQUkluZm86Om51bWJlclRhZ1JlZ2lzdGVy
OwogICAgICAgICAgICAgc2h1ZmZsZURhdGEubnVtTG9jYWxzID0gbV9qaXQuZ3JhcGgoKS5mcmFt
ZVJlZ2lzdGVyQ291bnQoKTsKLSAgICAgICAgICAgIHNodWZmbGVEYXRhLmNhbGxlZSA9IFZhbHVl
UmVjb3Zlcnk6OmluR1BSKGNhbGxlZUdQUiwgRGF0YUZvcm1hdEpTKTsKICAgICAgICAgICAgIHNo
dWZmbGVEYXRhLmFyZ3MucmVzaXplKG51bUFsbG9jYXRlZEFyZ3MpOwogICAgICAgICAgICAgc2h1
ZmZsZURhdGEubnVtUGFzc2VkQXJncyA9IG51bVBhc3NlZEFyZ3M7CiAgICAgICAgICAgICAKQEAg
LTgzMCwxOCArODMxLDE0IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5v
ZGUKICAgICAgICAgaWYgKGlzVGFpbCkgewogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQobm9k
ZS0+b3AoKSA9PSBEaXJlY3RUYWlsQ2FsbCk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIEpJ
VENvbXBpbGVyOjpQYXRjaGFibGVKdW1wIHBhdGNoYWJsZUp1bXAgPSBtX2ppdC5wYXRjaGFibGVK
dW1wKCk7CiAgICAgICAgICAgICBKSVRDb21waWxlcjo6TGFiZWwgbWFpblBhdGggPSBtX2ppdC5s
YWJlbCgpOwotICAgICAgICAgICAgCiAgICAgICAgICAgICBtX2ppdC5lbWl0U3RvcmVDYWxsU2l0
ZUluZGV4KGNhbGxTaXRlKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgY2FsbExpbmtJbmZv
LT5zZXRGcmFtZVNodWZmbGVEYXRhKHNodWZmbGVEYXRhKTsKLSAgICAgICAgICAgIENhbGxGcmFt
ZVNodWZmbGVyKG1faml0LCBzaHVmZmxlRGF0YSkucHJlcGFyZUZvclRhaWxDYWxsKCk7Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGwgPSBtX2ppdC5uZWFy
VGFpbENhbGwoKTsKLSAgICAgICAgICAgIAorCisgICAgICAgICAgICBjYWxsTGlua0luZm8tPmVt
aXREaXJlY3RUYWlsQ2FsbEZhc3RQYXRoKG1faml0LCBbJl0geworICAgICAgICAgICAgICAgIGNh
bGxMaW5rSW5mby0+c2V0RnJhbWVTaHVmZmxlRGF0YShzaHVmZmxlRGF0YSk7CisgICAgICAgICAg
ICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIobV9qaXQsIHNodWZmbGVEYXRhKS5wcmVwYXJlRm9yVGFp
bENhbGwoKTsKKyAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgSklUQ29tcGlsZXI6OkxhYmVs
IHNsb3dQYXRoID0gbV9qaXQubGFiZWwoKTsKLSAgICAgICAgICAgIHBhdGNoYWJsZUp1bXAubV9q
dW1wLmxpbmtUbyhzbG93UGF0aCwgJm1faml0KTsKICAgICAgICAgICAgIAogICAgICAgICAgICAg
c2lsZW50U3BpbGxBbGxSZWdpc3RlcnMoSW52YWxpZEdQUlJlZyk7CiAgICAgICAgICAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbkxpbmtEaXJlY3RDYWxsLCBjYWxsTGlua0luZm8sIGNhbGxlZUdQ
Uik7CkBAIC04NTEsMTUgKzg0OCwxMyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChO
b2RlKiBub2RlCiAgICAgICAgICAgICAKICAgICAgICAgICAgIHVzZUNoaWxkcmVuKG5vZGUpOwog
ICAgICAgICAgICAgCi0gICAgICAgICAgICBtX2ppdC5hZGRKU0RpcmVjdFRhaWxDYWxsKHBhdGNo
YWJsZUp1bXAsIGNhbGwsIHNsb3dQYXRoLCBjYWxsTGlua0luZm8pOworICAgICAgICAgICAgbV9q
aXQuYWRkSlNEaXJlY3RDYWxsKHNsb3dQYXRoLCBjYWxsTGlua0luZm8pOwogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBKSVRDb21waWxlcjo6TGFiZWwg
bWFpblBhdGggPSBtX2ppdC5sYWJlbCgpOwotICAgICAgICAKICAgICAgICAgbV9qaXQuZW1pdFN0
b3JlQ2FsbFNpdGVJbmRleChjYWxsU2l0ZSk7Ci0gICAgICAgIAotICAgICAgICBKSVRDb21waWxl
cjo6Q2FsbCBjYWxsID0gbV9qaXQubmVhckNhbGwoKTsKKyAgICAgICAgY2FsbExpbmtJbmZvLT5l
bWl0RGlyZWN0RmFzdFBhdGgobV9qaXQpOwogICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBkb25l
ID0gbV9qaXQuanVtcCgpOwogICAgICAgICAKICAgICAgICAgSklUQ29tcGlsZXI6OkxhYmVsIHNs
b3dQYXRoID0gbV9qaXQubGFiZWwoKTsKQEAgLTg3NCwzMCArODY5LDI5IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUKICAgICAgICAgCiAgICAgICAgIHNldFJlc3Vs
dEFuZFJlc2V0U3RhY2soKTsKICAgICAgICAgCi0gICAgICAgIG1faml0LmFkZEpTRGlyZWN0Q2Fs
bChjYWxsLCBzbG93UGF0aCwgY2FsbExpbmtJbmZvKTsKKyAgICAgICAgbV9qaXQuYWRkSlNEaXJl
Y3RDYWxsKHNsb3dQYXRoLCBjYWxsTGlua0luZm8pOwogICAgICAgICByZXR1cm47CiAgICAgfQog
ICAgIAogICAgIG1faml0LmVtaXRTdG9yZUNhbGxTaXRlSW5kZXgoY2FsbFNpdGUpOwogICAgIAot
ICAgIEpJVENvbXBpbGVyOjpEYXRhTGFiZWxQdHIgdGFyZ2V0VG9DaGVjazsKLSAgICBKSVRDb21w
aWxlcjo6SnVtcCBzbG93UGF0aCA9IG1faml0LmJyYW5jaFB0cldpdGhQYXRjaChNYWNyb0Fzc2Vt
Ymxlcjo6Tm90RXF1YWwsIGNhbGxlZUdQUiwgdGFyZ2V0VG9DaGVjaywgVHJ1c3RlZEltbVB0cihu
dWxscHRyKSk7Ci0KKyAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dDYXNlczsKICAgICBp
ZiAoaXNUYWlsKSB7Ci0gICAgICAgIGlmIChub2RlLT5vcCgpID09IFRhaWxDYWxsKSB7Ci0gICAg
ICAgICAgICBjYWxsTGlua0luZm8tPnNldEZyYW1lU2h1ZmZsZURhdGEoc2h1ZmZsZURhdGEpOwot
ICAgICAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIobV9qaXQsIHNodWZmbGVEYXRhKS5wcmVwYXJl
Rm9yVGFpbENhbGwoKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG1faml0LmVtaXRS
ZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKLSAgICAgICAgICAgIG1faml0LnByZXBhcmVGb3JUYWlsQ2Fs
bFNsb3coKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGZhc3RD
YWxsID0gaXNUYWlsID8gbV9qaXQubmVhclRhaWxDYWxsKCkgOiBtX2ppdC5uZWFyQ2FsbCgpOwot
CisgICAgICAgIHNsb3dDYXNlcyA9IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgo
bV9qaXQsIGNhbGxlZUdQUiwgSW52YWxpZEdQUlJlZywgQ2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6
Ok5vLCBbJl0geworICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gVGFpbENhbGwpIHsKKyAg
ICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldEZyYW1lU2h1ZmZsZURhdGEoc2h1ZmZsZURh
dGEpOworICAgICAgICAgICAgICAgIENhbGxGcmFtZVNodWZmbGVyKG1faml0LCBzaHVmZmxlRGF0
YSkucHJlcGFyZUZvclRhaWxDYWxsKCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgIG1faml0LmVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKKyAgICAgICAgICAgICAgICBt
X2ppdC5wcmVwYXJlRm9yVGFpbENhbGxTbG93KCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0p
OworICAgIH0gZWxzZQorICAgICAgICBzbG93Q2FzZXMgPSBjYWxsTGlua0luZm8tPmVtaXRGYXN0
UGF0aChtX2ppdCwgY2FsbGVlR1BSLCBJbnZhbGlkR1BSUmVnLCBDYWxsTGlua0luZm86OlVzZURh
dGFJQzo6Tm8pOwogICAgIEpJVENvbXBpbGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7CiAK
LSAgICBzbG93UGF0aC5saW5rKCZtX2ppdCk7CisgICAgc2xvd0Nhc2VzLmxpbmsoJm1faml0KTsK
KyAgICBhdXRvIHNsb3dQYXRoU3RhcnQgPSBtX2ppdC5sYWJlbCgpOwogCiAgICAgaWYgKG5vZGUt
Pm9wKCkgPT0gVGFpbENhbGwpIHsKICAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIgY2FsbEZyYW1l
U2h1ZmZsZXIobV9qaXQsIHNodWZmbGVEYXRhKTsKQEAgLTkwNSwyMyArODk5LDIyIEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUKICAgICAgICAgY2FsbEZyYW1lU2h1
ZmZsZXIucHJlcGFyZUZvclNsb3dQYXRoKCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgbV9qaXQu
bW92ZShjYWxsZWVHUFIsIEdQUkluZm86OnJlZ1QwKTsgLy8gQ2FsbGVlIG5lZWRzIHRvIGJlIGlu
IHJlZ1QwCi0KICAgICAgICAgaWYgKGlzVGFpbCkKICAgICAgICAgICAgIG1faml0LmVtaXRSZXN0
b3JlQ2FsbGVlU2F2ZXMoKTsgLy8gVGhpcyBuZWVkcyB0byBoYXBwZW4gYWZ0ZXIgd2UgbW92ZWQg
Y2FsbGVlR1BSIHRvIHJlZ1QwCiAgICAgfQogCi0gICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRy
KGNhbGxMaW5rSW5mbyksIEdQUkluZm86OnJlZ1QyKTsgLy8gTGluayBpbmZvIG5lZWRzIHRvIGJl
IGluIHJlZ1QyCiAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dy
YXBoLCBnbG9iYWxPYmplY3QpLCBHUFJJbmZvOjpyZWdUMyk7IC8vIEpTR2xvYmFsT2JqZWN0IG5l
ZWRzIHRvIGJlIGluIHJlZ1QzCi0gICAgSklUQ29tcGlsZXI6OkNhbGwgc2xvd0NhbGwgPSBtX2pp
dC5uZWFyQ2FsbCgpOworICAgIGNhbGxMaW5rSW5mby0+ZW1pdFNsb3dQYXRoKHZtKCksIG1faml0
KTsKIAogICAgIGRvbmUubGluaygmbV9qaXQpOworICAgIGF1dG8gZG9uZUxvY2F0aW9uID0gbV9q
aXQubGFiZWwoKTsKIAogICAgIGlmIChpc1RhaWwpCiAgICAgICAgIG1faml0LmFib3J0V2l0aFJl
YXNvbihKSVREaWRSZXR1cm5Gcm9tVGFpbENhbGwpOwogICAgIGVsc2UKICAgICAgICAgc2V0UmVz
dWx0QW5kUmVzZXRTdGFjaygpOwogCi0gICAgbV9qaXQuYWRkSlNDYWxsKGZhc3RDYWxsLCBzbG93
Q2FsbCwgdGFyZ2V0VG9DaGVjaywgY2FsbExpbmtJbmZvKTsKKyAgICBtX2ppdC5hZGRKU0NhbGwo
c2xvd1BhdGhTdGFydCwgZG9uZUxvY2F0aW9uLCBjYWxsTGlua0luZm8pOwogfQogCiAvLyBDbGFu
ZyBzaG91bGQgYWxsb3cgdW5yZWFjaGFibGUgW1tjbGFuZzo6ZmFsbHRocm91Z2hdXSBpbiB0ZW1w
bGF0ZSBmdW5jdGlvbnMgaWYgYW55IHRlbXBsYXRlIGV4cGFuc2lvbiB1c2VzIGl0CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCShyZXZpc2lv
biAyNzY5NzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTk3MTcsMjQgKzk3MTcsMjAgQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjp0YWdGb3IoVmlydHVhbFJlZ2lzdGVyKENhbGxG
cmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSkpOwogCiAgICAgICAgICAgICAg
ICAgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8gPSBqaXQuY29kZUJsb2NrKCktPmFkZENhbGxM
aW5rSW5mbyhub2RlLT5vcmlnaW4uc2VtYW50aWMpOworICAgICAgICAgICAgICAgIGNhbGxMaW5r
SW5mby0+c2V0VXBDYWxsKAorICAgICAgICAgICAgICAgICAgICBub2RlLT5vcCgpID09IENvbnN0
cnVjdCA/IENhbGxMaW5rSW5mbzo6Q29uc3RydWN0IDogQ2FsbExpbmtJbmZvOjpDYWxsLCBHUFJJ
bmZvOjpyZWdUMCk7CiAKLSAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkRhdGFMYWJlbFB0
ciB0YXJnZXRUb0NoZWNrOwotICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBzbG93
UGF0aCA9IGppdC5icmFuY2hQdHJXaXRoUGF0Y2goCi0gICAgICAgICAgICAgICAgICAgIENDYWxs
SGVscGVyczo6Tm90RXF1YWwsIEdQUkluZm86OnJlZ1QwLCB0YXJnZXRUb0NoZWNrLAotICAgICAg
ICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobnVsbHB0cikpOwotCi0g
ICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGZhc3RDYWxsID0gaml0Lm5lYXJDYWxs
KCk7CisgICAgICAgICAgICAgICAgYXV0byBzbG93UGF0aCA9IGNhbGxMaW5rSW5mby0+ZW1pdEZh
c3RQYXRoKGppdCwgR1BSSW5mbzo6cmVnVDAsIEludmFsaWRHUFJSZWcsIENhbGxMaW5rSW5mbzo6
VXNlRGF0YUlDOjpObyk7CiAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGRvbmUg
PSBqaXQuanVtcCgpOwogCiAgICAgICAgICAgICAgICAgc2xvd1BhdGgubGluaygmaml0KTsKLQot
ICAgICAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihjYWxs
TGlua0luZm8pLCBHUFJJbmZvOjpyZWdUMik7CisgICAgICAgICAgICAgICAgYXV0byBzbG93UGF0
aFN0YXJ0ID0gaml0LmxhYmVsKCk7CiAgICAgICAgICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tUHRyKGppdC5jb2RlQmxvY2soKS0+Z2xvYmFsT2JqZWN0Rm9yKG5vZGUt
Pm9yaWdpbi5zZW1hbnRpYykpLCBHUFJJbmZvOjpyZWdUMyk7Ci0gICAgICAgICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpDYWxsIHNsb3dDYWxsID0gaml0Lm5lYXJDYWxsKCk7CisgICAgICAgICAgICAg
ICAgY2FsbExpbmtJbmZvLT5lbWl0U2xvd1BhdGgoKnZtLCBqaXQpOworCiAgICAgICAgICAgICAg
ICAgZG9uZS5saW5rKCZqaXQpOwogCi0gICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRV
cENhbGwoCi0gICAgICAgICAgICAgICAgICAgIG5vZGUtPm9wKCkgPT0gQ29uc3RydWN0ID8gQ2Fs
bExpbmtJbmZvOjpDb25zdHJ1Y3QgOiBDYWxsTGlua0luZm86OkNhbGwsIEdQUkluZm86OnJlZ1Qw
KTsKKyAgICAgICAgICAgICAgICBhdXRvIGRvbmVMb2NhdGlvbiA9IGppdC5sYWJlbCgpOwogCiAg
ICAgICAgICAgICAgICAgaml0LmFkZFB0cigKICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tMzIoLXBhcmFtcy5wcm9jKCkuZnJhbWVTaXplKCkpLApAQCAtOTc0Miwx
MyArOTczOCw5IEBAIHByaXZhdGU6CiAKICAgICAgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2so
CiAgICAgICAgICAgICAgICAgICAgIFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAg
ICAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpJVFRodW5rUHRyVGFn
PiBsaW5rQ2FsbCA9IHZtLT5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpLmNvZGUo
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhzbG93Q2FsbCwgRnVu
Y3Rpb25QdHI8SklUVGh1bmtQdHJUYWc+KGxpbmtDYWxsKSk7Ci0KLSAgICAgICAgICAgICAgICAg
ICAgICAgIGNhbGxMaW5rSW5mby0+c2V0Q2FsbExvY2F0aW9ucygKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPihsaW5rQnVmZmVy
LmxvY2F0aW9uT2ZOZWFyQ2FsbDxKU0ludGVybmFsUHRyVGFnPihzbG93Q2FsbCkpLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+
KGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPih0YXJnZXRUb0NoZWNrKSks
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNh
bGw8SlNJbnRlcm5hbFB0clRhZz4oZmFzdENhbGwpKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGNhbGxMaW5rSW5mby0+c2V0Q29kZUxvY2F0aW9ucygKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oc2xvd1BhdGhTdGFy
dCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpT
SW50ZXJuYWxQdHJUYWc+KGRvbmVMb2NhdGlvbikpOwogICAgICAgICAgICAgICAgICAgICB9KTsK
ICAgICAgICAgICAgIH0pOwogCkBAIC05ODU3LDYzICs5ODQ5LDUwIEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICAgICAgICAgIHNodWZmbGVEYXRhLnNldHVwQ2FsbGVlU2F2ZVJlZ2lzdGVycyhqaXQu
Y29kZUJsb2NrKCkpOwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAg
Q2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8gPSBqaXQuY29kZUJsb2NrKCktPmFkZENhbGxMaW5r
SW5mbyhub2RlLT5vcmlnaW4uc2VtYW50aWMpOworICAgICAgICAgICAgICAgICAgICBjYWxsTGlu
a0luZm8tPnNldFVwQ2FsbChDYWxsTGlua0luZm86OkRpcmVjdFRhaWxDYWxsLCBJbnZhbGlkR1BS
UmVnKTsKICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIENDYWxsSGVs
cGVyczo6UGF0Y2hhYmxlSnVtcCBwYXRjaGFibGVKdW1wID0gaml0LnBhdGNoYWJsZUp1bXAoKTsK
ICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpMYWJlbCBtYWluUGF0aCA9IGppdC5s
YWJlbCgpOwotICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgaml0LnN0
b3JlMzIoCiAgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0z
MihjYWxsU2l0ZUluZGV4LmJpdHMoKSksCiAgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhl
bHBlcnM6OnRhZ0ZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMpKSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAg
IGNhbGxMaW5rSW5mby0+c2V0RnJhbWVTaHVmZmxlRGF0YShzaHVmZmxlRGF0YSk7Ci0gICAgICAg
ICAgICAgICAgICAgIENhbGxGcmFtZVNodWZmbGVyKGppdCwgc2h1ZmZsZURhdGEpLnByZXBhcmVG
b3JUYWlsQ2FsbCgpOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAg
Q0NhbGxIZWxwZXJzOjpDYWxsIGNhbGwgPSBqaXQubmVhclRhaWxDYWxsKCk7CisgICAgICAgICAg
ICAgICAgICAgIGNhbGxMaW5rSW5mby0+ZW1pdERpcmVjdFRhaWxDYWxsRmFzdFBhdGgoaml0LCBb
Jl0geworICAgICAgICAgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRGcmFtZVNodWZm
bGVEYXRhKHNodWZmbGVEYXRhKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIENhbGxGcmFtZVNo
dWZmbGVyKGppdCwgc2h1ZmZsZURhdGEpLnByZXBhcmVGb3JUYWlsQ2FsbCgpOworICAgICAgICAg
ICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAg
IGppdC5hYm9ydFdpdGhSZWFzb24oSklURGlkUmV0dXJuRnJvbVRhaWxDYWxsKTsKICAgICAgICAg
ICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6TGFiZWwgc2xv
d1BhdGggPSBqaXQubGFiZWwoKTsKLSAgICAgICAgICAgICAgICAgICAgcGF0Y2hhYmxlSnVtcC5t
X2p1bXAubGlua1RvKHNsb3dQYXRoLCAmaml0KTsKICAgICAgICAgICAgICAgICAgICAgY2FsbE9w
ZXJhdGlvbigKICAgICAgICAgICAgICAgICAgICAgICAgICpzdGF0ZSwgdG9TYXZlLCBqaXQsCiAg
ICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5vcmlnaW4uc2VtYW50aWMsIGV4Y2VwdGlvbnMu
Z2V0KCksIG9wZXJhdGlvbkxpbmtEaXJlY3RDYWxsLAogICAgICAgICAgICAgICAgICAgICAgICAg
SW52YWxpZEdQUlJlZywgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGNhbGxMaW5rSW5mbyks
IGNhbGxlZUdQUikuY2FsbCgpOwogICAgICAgICAgICAgICAgICAgICBqaXQuanVtcCgpLmxpbmtU
byhtYWluUGF0aCwgJmppdCk7Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAg
ICAgICBjYWxsTGlua0luZm8tPnNldFVwQ2FsbChDYWxsTGlua0luZm86OkRpcmVjdFRhaWxDYWxs
LCBJbnZhbGlkR1BSUmVnKTsKICAgICAgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRF
eGVjdXRhYmxlRHVyaW5nQ29tcGlsYXRpb24oZXhlY3V0YWJsZSk7CiAgICAgICAgICAgICAgICAg
ICAgIGlmIChudW1BbGxvY2F0ZWRBcmdzID4gbnVtUGFzc2VkQXJncykKICAgICAgICAgICAgICAg
ICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0TWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMo
bnVtQWxsb2NhdGVkQXJncyk7CiAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAg
ICAgICBqaXQuYWRkTGlua1Rhc2soCi0gICAgICAgICAgICAgICAgICAgICAgICBbPV0gKExpbmtC
dWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2RlTG9j
YXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBwYXRjaGFibGVKdW1wTG9jYXRpb24gPSBsaW5r
QnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4ocGF0Y2hhYmxlSnVtcCk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9uTmVhckNhbGw8SlNJbnRlcm5hbFB0
clRhZz4gY2FsbExvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8SlNJbnRl
cm5hbFB0clRhZz4oY2FsbCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29kZUxvY2F0
aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gc2xvd1BhdGhMb2NhdGlvbiA9IGxpbmtCdWZmZXIu
bG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihzbG93UGF0aCk7Ci0KLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldENhbGxMb2NhdGlvbnMoCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHBhdGNoYWJsZUp1bXBMb2NhdGlvbiwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGhMb2NhdGlvbiwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY2FsbExvY2F0aW9uKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0p
OworICAgICAgICAgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBs
aW5rQnVmZmVyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldENv
ZGVMb2NhdGlvbnMoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5sb2Nh
dGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KHNsb3dQYXRoKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPigpKTsKKyAgICAgICAg
ICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgQ2FsbExpbmtJbmZvKiBj
YWxsTGlua0luZm8gPSBqaXQuY29kZUJsb2NrKCktPmFkZENhbGxMaW5rSW5mbyhub2RlLT5vcmln
aW4uc2VtYW50aWMpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIENDYWxsSGVs
cGVyczo6TGFiZWwgbWFpblBhdGggPSBqaXQubGFiZWwoKTsKKyAgICAgICAgICAgICAgICBjYWxs
TGlua0luZm8tPnNldFVwQ2FsbCgKKyAgICAgICAgICAgICAgICAgICAgaXNDb25zdHJ1Y3QgPyBD
YWxsTGlua0luZm86OkRpcmVjdENvbnN0cnVjdCA6IENhbGxMaW5rSW5mbzo6RGlyZWN0Q2FsbCwg
SW52YWxpZEdQUlJlZyk7CiAKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkxhYmVsIG1h
aW5QYXRoID0gaml0LmxhYmVsKCk7CiAgICAgICAgICAgICAgICAgaml0LnN0b3JlMzIoCiAgICAg
ICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGNhbGxTaXRlSW5kZXgu
Yml0cygpKSwKICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjp0YWdGb3IoVmlydHVh
bFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSkpOwot
ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBjYWxs
ID0gaml0Lm5lYXJDYWxsKCk7CisgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5lbWl0RGly
ZWN0RmFzdFBhdGgoaml0KTsKICAgICAgICAgICAgICAgICBqaXQuYWRkUHRyKAogICAgICAgICAg
ICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigtcGFyYW1zLnByb2MoKS5mcmFt
ZVNpemUoKSksCiAgICAgICAgICAgICAgICAgICAgIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVy
LCBDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICAgICAgICAgICAgICAK
LSAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldFVwQ2FsbCgKLSAgICAgICAgICAgICAg
ICAgICAgaXNDb25zdHJ1Y3QgPyBDYWxsTGlua0luZm86OkRpcmVjdENvbnN0cnVjdCA6IENhbGxM
aW5rSW5mbzo6RGlyZWN0Q2FsbCwgSW52YWxpZEdQUlJlZyk7CiAgICAgICAgICAgICAgICAgY2Fs
bExpbmtJbmZvLT5zZXRFeGVjdXRhYmxlRHVyaW5nQ29tcGlsYXRpb24oZXhlY3V0YWJsZSk7CiAg
ICAgICAgICAgICAgICAgaWYgKG51bUFsbG9jYXRlZEFyZ3MgPiBudW1QYXNzZWRBcmdzKQogICAg
ICAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldE1heEFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzKG51bUFsbG9jYXRlZEFyZ3MpOwpAQCAtOTkzNSwxNSArOTkxNCw5IEBAIHByaXZhdGU6
CiAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgIGppdC5h
ZGRMaW5rVGFzaygKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbPV0gKExpbmtCdWZmZXIm
IGxpbmtCdWZmZXIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29kZUxvY2F0
aW9uTmVhckNhbGw8SlNJbnRlcm5hbFB0clRhZz4gY2FsbExvY2F0aW9uID0gbGlua0J1ZmZlci5s
b2NhdGlvbk9mTmVhckNhbGw8SlNJbnRlcm5hbFB0clRhZz4oY2FsbCk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IHNs
b3dQYXRoTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4o
c2xvd1BhdGgpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIu
bGluayhjYWxsLCBzbG93UGF0aExvY2F0aW9uKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjYWxsTGlua0luZm8tPnNldENhbGxMb2NhdGlvbnMoCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPigp
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGhMb2NhdGlvbiwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxMb2NhdGlvbik7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0Q29kZUxvY2F0aW9u
cygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRp
b25PZjxKU0ludGVybmFsUHRyVGFnPihzbG93UGF0aCksIAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4oKSk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgIH0pOwog
ICAgICAgICAgICAgfSk7CkBAIC0xMDAzNCw0MCArMTAwMDcsMzAgQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgICAgICBzaHVmZmxlRGF0YS5zZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMoaml0LmNvZGVC
bG9jaygpKTsKIAogICAgICAgICAgICAgICAgIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvID0g
aml0LmNvZGVCbG9jaygpLT5hZGRDYWxsTGlua0luZm8oY29kZU9yaWdpbik7CisgICAgICAgICAg
ICAgICAgY2FsbExpbmtJbmZvLT5zZXRVcENhbGwoQ2FsbExpbmtJbmZvOjpUYWlsQ2FsbCwgR1BS
SW5mbzo6cmVnVDApOwogCi0gICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpEYXRhTGFiZWxQ
dHIgdGFyZ2V0VG9DaGVjazsKLSAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgc2xv
d1BhdGggPSBqaXQuYnJhbmNoUHRyV2l0aFBhdGNoKAotICAgICAgICAgICAgICAgICAgICBDQ2Fs
bEhlbHBlcnM6Ok5vdEVxdWFsLCBHUFJJbmZvOjpyZWdUMCwgdGFyZ2V0VG9DaGVjaywKLSAgICAg
ICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG51bGxwdHIpKTsKLQot
ICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0RnJhbWVTaHVmZmxlRGF0YShzaHVmZmxl
RGF0YSk7Ci0gICAgICAgICAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIoaml0LCBzaHVmZmxlRGF0
YSkucHJlcGFyZUZvclRhaWxDYWxsKCk7Ci0KLSAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6
OkNhbGwgZmFzdENhbGwgPSBqaXQubmVhclRhaWxDYWxsKCk7CisgICAgICAgICAgICAgICAgYXV0
byBzbG93UGF0aCA9IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoaml0LCBHUFJJ
bmZvOjpyZWdUMCwgSW52YWxpZEdQUlJlZywgQ2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6Ok5vLCBb
Jl0geworICAgICAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldEZyYW1lU2h1ZmZsZURh
dGEoc2h1ZmZsZURhdGEpOworICAgICAgICAgICAgICAgICAgICBDYWxsRnJhbWVTaHVmZmxlcihq
aXQsIHNodWZmbGVEYXRhKS5wcmVwYXJlRm9yVGFpbENhbGwoKTsKKyAgICAgICAgICAgICAgICB9
KTsKIAogICAgICAgICAgICAgICAgIHNsb3dQYXRoLmxpbmsoJmppdCk7Ci0KKyAgICAgICAgICAg
ICAgICBhdXRvIHNsb3dQYXRoU3RhcnQgPSBqaXQubGFiZWwoKTsKICAgICAgICAgICAgICAgICBD
YWxsRnJhbWVTaHVmZmxlciBzbG93UGF0aFNodWZmbGVyKGppdCwgc2h1ZmZsZURhdGEpOwogICAg
ICAgICAgICAgICAgIHNsb3dQYXRoU2h1ZmZsZXIuc2V0Q2FsbGVlSlNWYWx1ZVJlZ3MoSlNWYWx1
ZVJlZ3MoR1BSSW5mbzo6cmVnVDApKTsKICAgICAgICAgICAgICAgICBzbG93UGF0aFNodWZmbGVy
LnByZXBhcmVGb3JTbG93UGF0aCgpOwogCi0gICAgICAgICAgICAgICAgaml0Lm1vdmUoQ0NhbGxI
ZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGNhbGxMaW5rSW5mbyksIEdQUkluZm86OnJlZ1QyKTsKICAg
ICAgICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoaml0LmNv
ZGVCbG9jaygpLT5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIEdQUklu
Zm86OnJlZ1QzKTsKLSAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgc2xvd0NhbGwg
PSBqaXQubmVhckNhbGwoKTsKKyAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPmVtaXRTbG93
UGF0aCgqdm0sIGppdCk7CiAKKyAgICAgICAgICAgICAgICBhdXRvIGRvbmVMb2NhdGlvbiA9IGpp
dC5sYWJlbCgpOwogICAgICAgICAgICAgICAgIGppdC5hYm9ydFdpdGhSZWFzb24oSklURGlkUmV0
dXJuRnJvbVRhaWxDYWxsKTsKIAotICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0VXBD
YWxsKENhbGxMaW5rSW5mbzo6VGFpbENhbGwsIEdQUkluZm86OnJlZ1QwKTsKLQogICAgICAgICAg
ICAgICAgIGppdC5hZGRMaW5rVGFzaygKICAgICAgICAgICAgICAgICAgICAgWz1dIChMaW5rQnVm
ZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
ckNvZGVQdHI8SklUVGh1bmtQdHJUYWc+IGxpbmtDYWxsID0gdm0tPmdldENUSVN0dWIobGlua0Nh
bGxUaHVua0dlbmVyYXRvcikuY29kZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1
ZmZlci5saW5rKHNsb3dDYWxsLCBGdW5jdGlvblB0cjxKSVRUaHVua1B0clRhZz4obGlua0NhbGwp
KTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRDYWxsTG9jYXRp
b25zKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50
ZXJuYWxQdHJUYWc+KGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPEpTSW50ZXJuYWxQdHJU
YWc+KHNsb3dDYWxsKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9u
TGFiZWw8SlNJbnRlcm5hbFB0clRhZz4obGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQ
dHJUYWc+KHRhcmdldFRvQ2hlY2spKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5r
QnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxKU0ludGVybmFsUHRyVGFnPihmYXN0Q2FsbCkpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRDb2RlTG9jYXRpb25zKAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVy
bmFsUHRyVGFnPihzbG93UGF0aFN0YXJ0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBs
aW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oZG9uZUxvY2F0aW9uKSk7CiAg
ICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgfSk7CiAgICAgfQpAQCAtMTAzMjAs
NDAgKzEwMjgzLDM4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAg
ICAgICAgICAgICBjYWxsVHlwZSA9IENhbGxMaW5rSW5mbzo6Q2FsbFZhcmFyZ3M7CiAgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRVcENhbGwoY2FsbFR5
cGUsIEdQUkluZm86OnJlZ1QwKTsKKwogICAgICAgICAgICAgICAgIGJvb2wgaXNUYWlsQ2FsbCA9
IENhbGxMaW5rSW5mbzo6Y2FsbE1vZGVGb3IoY2FsbFR5cGUpID09IENhbGxNb2RlOjpUYWlsOwot
ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6RGF0YUxhYmVs
UHRyIHRhcmdldFRvQ2hlY2s7Ci0gICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIHNs
b3dQYXRoID0gaml0LmJyYW5jaFB0cldpdGhQYXRjaCgKLSAgICAgICAgICAgICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpOb3RFcXVhbCwgR1BSSW5mbzo6cmVnVDAsIHRhcmdldFRvQ2hlY2ssCi0gICAg
ICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihudWxscHRyKSk7Ci0g
ICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGZhc3RD
YWxsOworCisgICAgICAgICAgICAgICAgQVNTRVJUKCF1c2VkUmVnaXN0ZXJzLmdldChHUFJJbmZv
OjpyZWdUMikpOyAvLyBVc2VkIG9uIHRoZSBzbG93IHBhdGguCisKKyAgICAgICAgICAgICAgICBD
Q2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dQYXRoOwogICAgICAgICAgICAgICAgIENDYWxsSGVs
cGVyczo6SnVtcCBkb25lOwotICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGlmIChp
c1RhaWxDYWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIGppdC5lbWl0UmVzdG9yZUNhbGxlZVNh
dmVzKCk7Ci0gICAgICAgICAgICAgICAgICAgIGppdC5wcmVwYXJlRm9yVGFpbENhbGxTbG93KCk7
Ci0gICAgICAgICAgICAgICAgICAgIGZhc3RDYWxsID0gaml0Lm5lYXJUYWlsQ2FsbCgpOworICAg
ICAgICAgICAgICAgICAgICBzbG93UGF0aCA9IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFz
dFBhdGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgSW52YWxpZEdQUlJlZywgQ2FsbExpbmtJbmZvOjpV
c2VEYXRhSUM6Ok5vLCBbJl0geworICAgICAgICAgICAgICAgICAgICAgICAgaml0LmVtaXRSZXN0
b3JlQ2FsbGVlU2F2ZXMoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGppdC5wcmVwYXJlRm9y
VGFpbENhbGxTbG93KCk7CisgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGZhc3RDYWxsID0gaml0Lm5lYXJDYWxsKCk7
CisgICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoID0gY2FsbExpbmtJbmZvLT5lbWl0RmFzdFBh
dGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgSW52YWxpZEdQUlJlZywgQ2FsbExpbmtJbmZvOjpVc2VE
YXRhSUM6Ok5vKTsKICAgICAgICAgICAgICAgICAgICAgZG9uZSA9IGppdC5qdW1wKCk7CiAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIHNsb3dQYXRo
LmxpbmsoJmppdCk7CisgICAgICAgICAgICAgICAgYXV0byBzbG93UGF0aFN0YXJ0ID0gaml0Lmxh
YmVsKCk7CiAKICAgICAgICAgICAgICAgICBpZiAoaXNUYWlsQ2FsbCkKICAgICAgICAgICAgICAg
ICAgICAgaml0LmVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKLSAgICAgICAgICAgICAgICBBU1NF
UlQoIXVzZWRSZWdpc3RlcnMuZ2V0KEdQUkluZm86OnJlZ1QyKSk7Ci0gICAgICAgICAgICAgICAg
aml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGNhbGxMaW5rSW5mbyksIEdQUklu
Zm86OnJlZ1QyKTsKICAgICAgICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW1QdHIoaml0LmNvZGVCbG9jaygpLT5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNl
bWFudGljKSksIEdQUkluZm86OnJlZ1QzKTsKLSAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6
OkNhbGwgc2xvd0NhbGwgPSBqaXQubmVhckNhbGwoKTsKKyAgICAgICAgICAgICAgICBjYWxsTGlu
a0luZm8tPmVtaXRTbG93UGF0aCgqdm0sIGppdCk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAg
ICAgICAgICAgaWYgKGlzVGFpbENhbGwpCiAgICAgICAgICAgICAgICAgICAgIGppdC5hYm9ydFdp
dGhSZWFzb24oSklURGlkUmV0dXJuRnJvbVRhaWxDYWxsKTsKICAgICAgICAgICAgICAgICBlbHNl
CiAgICAgICAgICAgICAgICAgICAgIGRvbmUubGluaygmaml0KTsKLSAgICAgICAgICAgICAgICAK
LSAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldFVwQ2FsbChjYWxsVHlwZSwgR1BSSW5m
bzo6cmVnVDApOworCisgICAgICAgICAgICAgICAgYXV0byBkb25lTG9jYXRpb24gPSBqaXQubGFi
ZWwoKTsKIAogICAgICAgICAgICAgICAgIGppdC5hZGRQdHIoCiAgICAgICAgICAgICAgICAgICAg
IENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKC1vcmlnaW5hbFN0YWNrSGVpZ2h0KSwKQEAgLTEw
MzYxLDEzICsxMDMyMiw5IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAg
ICAgICAgaml0LmFkZExpbmtUYXNrKAogICAgICAgICAgICAgICAgICAgICBbPV0gKExpbmtCdWZm
ZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
Q29kZVB0cjxKSVRUaHVua1B0clRhZz4gbGlua0NhbGwgPSB2bS0+Z2V0Q1RJU3R1YihsaW5rQ2Fs
bFRodW5rR2VuZXJhdG9yKS5jb2RlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVm
ZmVyLmxpbmsoc2xvd0NhbGwsIEZ1bmN0aW9uUHRyPEpJVFRodW5rUHRyVGFnPihsaW5rQ2FsbCkp
OwotICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICBjYWxs
TGlua0luZm8tPnNldENhbGxMb2NhdGlvbnMoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
Q29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4obGlua0J1ZmZlci5sb2NhdGlvbk9m
TmVhckNhbGw8SlNJbnRlcm5hbFB0clRhZz4oc2xvd0NhbGwpKSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPihsaW5rQnVmZmVy
LmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4odGFyZ2V0VG9DaGVjaykpLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPEpTSW50ZXJu
YWxQdHJUYWc+KGZhc3RDYWxsKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBjYWxsTGlua0lu
Zm8tPnNldENvZGVMb2NhdGlvbnMoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1
ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KHNsb3dQYXRoU3RhcnQpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRy
VGFnPihkb25lTG9jYXRpb24pKTsKICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAg
ICB9KTsKIApAQCAtMTA2MDcsMzkgKzEwNTY0LDM2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAg
ICAgZWxzZQogICAgICAgICAgICAgICAgICAgICBjYWxsVHlwZSA9IENhbGxMaW5rSW5mbzo6Q2Fs
bFZhcmFyZ3M7CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgYm9vbCBpc1RhaWxD
YWxsID0gQ2FsbExpbmtJbmZvOjpjYWxsTW9kZUZvcihjYWxsVHlwZSkgPT0gQ2FsbE1vZGU6OlRh
aWw7CisgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRVcENhbGwoY2FsbFR5cGUsIEdQ
UkluZm86OnJlZ1QwKTsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBDQ2FsbEhl
bHBlcnM6OkRhdGFMYWJlbFB0ciB0YXJnZXRUb0NoZWNrOwotICAgICAgICAgICAgICAgIENDYWxs
SGVscGVyczo6SnVtcCBzbG93UGF0aCA9IGppdC5icmFuY2hQdHJXaXRoUGF0Y2goCi0gICAgICAg
ICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Tm90RXF1YWwsIEdQUkluZm86OnJlZ1QwLCB0YXJn
ZXRUb0NoZWNrLAotICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1Q
dHIobnVsbHB0cikpOworICAgICAgICAgICAgICAgIGJvb2wgaXNUYWlsQ2FsbCA9IENhbGxMaW5r
SW5mbzo6Y2FsbE1vZGVGb3IoY2FsbFR5cGUpID09IENhbGxNb2RlOjpUYWlsOwogICAgICAgICAg
ICAgICAgIAotICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBmYXN0Q2FsbDsKKyAg
ICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dQYXRoOwogICAgICAgICAg
ICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBkb25lOwotICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgICAgIGlmIChpc1RhaWxDYWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIGppdC5lbWl0
UmVzdG9yZUNhbGxlZVNhdmVzKCk7Ci0gICAgICAgICAgICAgICAgICAgIGppdC5wcmVwYXJlRm9y
VGFpbENhbGxTbG93KCk7Ci0gICAgICAgICAgICAgICAgICAgIGZhc3RDYWxsID0gaml0Lm5lYXJU
YWlsQ2FsbCgpOworICAgICAgICAgICAgICAgICAgICBzbG93UGF0aCA9IGNhbGxMaW5rSW5mby0+
ZW1pdFRhaWxDYWxsRmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgSW52YWxpZEdQUlJlZywg
Q2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6Ok5vLCBbJl0geworICAgICAgICAgICAgICAgICAgICAg
ICAgaml0LmVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGppdC5wcmVwYXJlRm9yVGFpbENhbGxTbG93KCk7CisgICAgICAgICAgICAgICAgICAgIH0pOwog
ICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGZhc3RDYWxsID0g
aml0Lm5lYXJDYWxsKCk7CisgICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoID0gY2FsbExpbmtJ
bmZvLT5lbWl0RmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgSW52YWxpZEdQUlJlZywgQ2Fs
bExpbmtJbmZvOjpVc2VEYXRhSUM6Ok5vKTsKICAgICAgICAgICAgICAgICAgICAgZG9uZSA9IGpp
dC5qdW1wKCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAogICAgICAgICAg
ICAgICAgIHNsb3dQYXRoLmxpbmsoJmppdCk7CisgICAgICAgICAgICAgICAgYXV0byBzbG93UGF0
aFN0YXJ0ID0gaml0LmxhYmVsKCk7CiAKICAgICAgICAgICAgICAgICBpZiAoaXNUYWlsQ2FsbCkK
ICAgICAgICAgICAgICAgICAgICAgaml0LmVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKLSAgICAg
ICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoY2FsbExpbmtJ
bmZvKSwgR1BSSW5mbzo6cmVnVDIpOwogICAgICAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVs
cGVyczo6VHJ1c3RlZEltbVB0cihqaXQuY29kZUJsb2NrKCktPmdsb2JhbE9iamVjdEZvcihub2Rl
LT5vcmlnaW4uc2VtYW50aWMpKSwgR1BSSW5mbzo6cmVnVDMpOwotICAgICAgICAgICAgICAgIEND
YWxsSGVscGVyczo6Q2FsbCBzbG93Q2FsbCA9IGppdC5uZWFyQ2FsbCgpOworICAgICAgICAgICAg
ICAgIGNhbGxMaW5rSW5mby0+ZW1pdFNsb3dQYXRoKCp2bSwgaml0KTsKICAgICAgICAgICAgICAg
ICAKICAgICAgICAgICAgICAgICBpZiAoaXNUYWlsQ2FsbCkKICAgICAgICAgICAgICAgICAgICAg
aml0LmFib3J0V2l0aFJlYXNvbihKSVREaWRSZXR1cm5Gcm9tVGFpbENhbGwpOwogICAgICAgICAg
ICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgZG9uZS5saW5rKCZqaXQpOwotICAgICAg
ICAgICAgICAgIAotICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0VXBDYWxsKGNhbGxU
eXBlLCBHUFJJbmZvOjpyZWdUMCk7CisKKyAgICAgICAgICAgICAgICBhdXRvIGRvbmVMb2NhdGlv
biA9IGppdC5sYWJlbCgpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGppdC5h
ZGRQdHIoCiAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKC1v
cmlnaW5hbFN0YWNrSGVpZ2h0KSwKQEAgLTEwNjQ3LDEzICsxMDYwMSw5IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaml0LmFkZExpbmtUYXNrKAogICAgICAg
ICAgICAgICAgICAgICBbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKSVRUaHVua1B0clRhZz4gbGlua0Nh
bGwgPSB2bS0+Z2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5jb2RlKCk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoc2xvd0NhbGwsIEZ1bmN0aW9uUHRy
PEpJVFRodW5rUHRyVGFnPihsaW5rQ2FsbCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgCi0g
ICAgICAgICAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldENhbGxMb2NhdGlvbnMoCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0
clRhZz4obGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8SlNJbnRlcm5hbFB0clRhZz4oc2xv
d0NhbGwpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxK
U0ludGVybmFsUHRyVGFnPihsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4o
dGFyZ2V0VG9DaGVjaykpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIu
bG9jYXRpb25PZk5lYXJDYWxsPEpTSW50ZXJuYWxQdHJUYWc+KGZhc3RDYWxsKSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldENvZGVMb2NhdGlvbnMoCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJU
YWc+KHNsb3dQYXRoU3RhcnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZm
ZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihkb25lTG9jYXRpb24pKTsKICAgICAgICAg
ICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICB9KTsKIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmNwcAkocmV2aXNpb24gMjc2OTc3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03
MSw2ICs3MSwxNiBAQCB2b2lkIENDYWxsSGVscGVyczo6ZW5zdXJlU2hhZG93Q2hpY2tlblBhCiAg
ICAgc3RvcmVQdHIoc2NyYXRjaDIsIEFkZHJlc3Moc2NyYXRjaDFOb25BcmdHUFIpKTsKIH0KIAor
dm9pZCBDQ2FsbEhlbHBlcnM6OmVtaXRKSVRDb2RlT3ZlcihNYWNyb0Fzc2VtYmxlckNvZGVQdHI8
SlNJbnRlcm5hbFB0clRhZz4gY29kZSwgV1RGOjpGdW5jdGlvbjx2b2lkKENDYWxsSGVscGVycyYp
PiBlbWl0Q29kZSwgY29uc3QgY2hhciogZGVzY3JpcHRpb24pCit7CisgICAgQ0NhbGxIZWxwZXJz
IGppdDsKKyAgICBlbWl0Q29kZShqaXQpOworCisgICAgY29uc3RleHByIGJvb2wgbmVlZHNCcmFu
Y2hDb21wYWN0aW9uID0gZmFsc2U7CisgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKGppdCwgY29k
ZSwgaml0Lm1fYXNzZW1ibGVyLmJ1ZmZlcigpLmNvZGVTaXplKCksIEpJVENvbXBpbGF0aW9uTXVz
dFN1Y2NlZWQsIG5lZWRzQnJhbmNoQ29tcGFjdGlvbik7CisgICAgRklOQUxJWkVfQ09ERShsaW5r
QnVmZmVyLCBOb1B0clRhZywgZGVzY3JpcHRpb24pOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MK
IAogI2VuZGlmIC8vIEVOQUJMRShKSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0NDYWxsSGVscGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
Q0NhbGxIZWxwZXJzLmgJKHJldmlzaW9uIDI3Njk3NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvQ0NhbGxIZWxwZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTgxOCw2ICs4MTgsOCBAQCBw
dWJsaWM6CiAgICAgdm9pZCBsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChHUFJSZWcgc2hhZG93
UGFja2V0LCBKU1ZhbHVlUmVncyB0aGlzUmVncywgR1BSUmVnIHNjb3BlLCBDb2RlQmxvY2sqLCBD
YWxsU2l0ZUluZGV4KTsKICAgICAvLyBMZWF2ZXMgYmVoaW5kIGEgcG9pbnRlciB0byB0aGUgUGFj
a2V0IHdlIHNob3VsZCB3cml0ZSB0byBpbiBzaGFkb3dQYWNrZXQuCiAgICAgdm9pZCBlbnN1cmVT
aGFkb3dDaGlja2VuUGFja2V0KFZNJiwgR1BSUmVnIHNoYWRvd1BhY2tldCwgR1BSUmVnIHNjcmF0
Y2gxTm9uQXJnR1BSLCBHUFJSZWcgc2NyYXRjaDIpOworCisgICAgc3RhdGljIHZvaWQgZW1pdEpJ
VENvZGVPdmVyKE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0ludGVybmFsUHRyVGFnPiBjb2RlLCBX
VEY6OkZ1bmN0aW9uPHZvaWQoQ0NhbGxIZWxwZXJzJik+LCBjb25zdCBjaGFyKik7CiB9OwogCiB9
IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZy
YW1lU2h1ZmZsZXI2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9DYWxsRnJhbWVTaHVmZmxlcjY0LmNwcAkocmV2aXNpb24gMjc2OTc3KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlcjY0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjQxLDcgKzI0MSw3IEBAIHZvaWQgQ2FsbEZyYW1lU2h1ZmZsZXI6OmVtaXREaXNwbGFjZShD
YWMKICAgICBpZiAoISh3YW50ZWRSZWcgPSBSZWcgeyBjYWNoZWRSZWNvdmVyeS53YW50ZWRKU1Zh
bHVlUmVncygpLmdwcigpIH0pKQogICAgICAgICB3YW50ZWRSZWcgPSBSZWcgeyBjYWNoZWRSZWNv
dmVyeS53YW50ZWRGUFIoKSB9OwogICAgIEFTU0VSVCh3YW50ZWRSZWcpOwotICAgIEFTU0VSVCgh
bV9sb2NrZWRSZWdpc3RlcnMuZ2V0KHdhbnRlZFJlZykpOworICAgIFJFTEVBU0VfQVNTRVJUKCFt
X2xvY2tlZFJlZ2lzdGVycy5nZXQod2FudGVkUmVnKSk7CiAKICAgICBpZiAoQ2FjaGVkUmVjb3Zl
cnkqIGN1cnJlbnQgPSBtX3JlZ2lzdGVyc1t3YW50ZWRSZWddKSB7CiAgICAgICAgIGlmIChjdXJy
ZW50ID09ICZjYWNoZWRSZWNvdmVyeSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNw
cAkocmV2aXNpb24gMjc2OTc3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC05NTksMTAgKzk1OSw5IEBAIENvbXBpbGF0aW9uUmVzdWx0IEpJ
VDo6bGluaygpCiAKICAgICBmb3IgKGF1dG8mIGNvbXBpbGF0aW9uSW5mbyA6IG1fY2FsbENvbXBp
bGF0aW9uSW5mbykgewogICAgICAgICBDYWxsTGlua0luZm8mIGluZm8gPSAqY29tcGlsYXRpb25J
bmZvLmNhbGxMaW5rSW5mbzsKLSAgICAgICAgaW5mby5zZXRDYWxsTG9jYXRpb25zKAotICAgICAg
ICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4ocGF0Y2hCdWZmZXIubG9j
YXRpb25PZk5lYXJDYWxsPEpTSW50ZXJuYWxQdHJUYWc+KGNvbXBpbGF0aW9uSW5mby5jYWxsUmV0
dXJuTG9jYXRpb24pKSwKLSAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQ
dHJUYWc+KHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oY29tcGlsYXRp
b25JbmZvLmhvdFBhdGhCZWdpbikpLAotICAgICAgICAgICAgcGF0Y2hCdWZmZXIubG9jYXRpb25P
Zk5lYXJDYWxsPEpTSW50ZXJuYWxQdHJUYWc+KGNvbXBpbGF0aW9uSW5mby5ob3RQYXRoT3RoZXIp
KTsKKyAgICAgICAgaW5mby5zZXRDb2RlTG9jYXRpb25zKAorICAgICAgICAgICAgcGF0Y2hCdWZm
ZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihjb21waWxhdGlvbkluZm8uc2xvd1BhdGhT
dGFydCksCisgICAgICAgICAgICBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJU
YWc+KGNvbXBpbGF0aW9uSW5mby5kb25lTG9jYXRpb24pKTsKICAgICB9CiAKICAgICB7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHJldmlzaW9uIDI3Njk3NykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTE3Nyw5ICsxNzcsOCBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICB9OwogCiAgICAgc3RydWN0IENhbGxDb21waWxhdGlvbkluZm8g
ewotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RGF0YUxhYmVsUHRyIGhvdFBhdGhCZWdpbjsKLSAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgaG90UGF0aE90aGVyOwotICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6Q2FsbCBjYWxsUmV0dXJuTG9jYXRpb247CisgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpMYWJlbCBzbG93UGF0aFN0YXJ0OworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgZG9u
ZUxvY2F0aW9uOwogICAgICAgICBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbzsKICAgICB9Owog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwzMl82NC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsMzJfNjQuY3BwCShyZXZp
c2lvbiAyNzY5NzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwzMl82NC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM1NSw3ICszNTUsNyBAQCB2b2lkIEpJVDo6Y29tcGlsZU9w
Q2FsbFNsb3dDYXNlKGNvbnN0IEluCiAgICAgaWYgKG9wY29kZUlEID09IG9wX3RhaWxfY2FsbCB8
fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfdmFyYXJncyB8fCBvcGNvZGVJRCA9PSBvcF90YWls
X2NhbGxfZm9yd2FyZF9hcmd1bWVudHMpCiAgICAgICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMo
KTsKIAotICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uY2FsbFJl
dHVybkxvY2F0aW9uID0gZW1pdE5ha2VkTmVhckNhbGwobV92bS0+Z2V0Q1RJU3R1YihsaW5rQ2Fs
bFRodW5rR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOworICAgIG1fY2FsbENv
bXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uc2xvd0NhbGxSZXR1cm5Mb2NhdGlvbiA9
IGVtaXROYWtlZE5lYXJDYWxsKG1fdm0tPmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRv
cikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAogICAgIGlmIChvcGNvZGVJRCA9PSBvcF90
YWlsX2NhbGwgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MpIHsKICAgICAgICAg
YWJvcnRXaXRoUmVhc29uKEpJVERpZFJldHVybkZyb21UYWlsQ2FsbCk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAJKHJldmlzaW9uIDI3Njk3NykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5Miw4ICsx
OTIsMTQgQEAgYm9vbCBKSVQ6OmNvbXBpbGVUYWlsQ2FsbChjb25zdCBPcFRhaWxDYQogICAgICAg
ICBWYWx1ZVJlY292ZXJ5OjppbkdQUihyZWdUMCwgRGF0YUZvcm1hdEpTKTsKICAgICBzaHVmZmxl
RGF0YS5zZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMobV9jb2RlQmxvY2spOwogICAgIGluZm8tPnNl
dEZyYW1lU2h1ZmZsZURhdGEoc2h1ZmZsZURhdGEpOwotICAgIENhbGxGcmFtZVNodWZmbGVyKCp0
aGlzLCBzaHVmZmxlRGF0YSkucHJlcGFyZUZvclRhaWxDYWxsKCk7Ci0gICAgbV9jYWxsQ29tcGls
YXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5ob3RQYXRoT3RoZXIgPSBlbWl0TmFrZWROZWFy
VGFpbENhbGwoKTsKKworICAgIEp1bXBMaXN0IHNsb3dQYXRocyA9IGluZm8tPmVtaXRUYWlsQ2Fs
bEZhc3RQYXRoKCp0aGlzLCByZWdUMCwgcmVnVDIsIENhbGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpZ
ZXMsIFsmXSB7CisgICAgICAgIENhbGxGcmFtZVNodWZmbGVyKCp0aGlzLCBzaHVmZmxlRGF0YSku
cHJlcGFyZUZvclRhaWxDYWxsKCk7CisgICAgfSk7CisgICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGhz
KTsKKyAgICBhdXRvIGRvbmVMb2NhdGlvbiA9IGxhYmVsKCk7CisgICAgbV9jYWxsQ29tcGlsYXRp
b25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5kb25lTG9jYXRpb24gPSBkb25lTG9jYXRpb247Cisg
ICAgCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTIzMiwyOCArMjM4LDMwIEBAIHZvaWQgSklU
Ojpjb21waWxlT3BDYWxsKGNvbnN0IEluc3RydWN0aW8KICAgICBpZiAoY29tcGlsZUNhbGxFdmFs
KGJ5dGVjb2RlKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgRGF0YUxhYmVsUHRyIGFkZHJlc3NP
ZkxpbmtlZEZ1bmN0aW9uQ2hlY2s7Ci0gICAgSnVtcCBzbG93Q2FzZSA9IGJyYW5jaFB0cldpdGhQ
YXRjaChOb3RFcXVhbCwgcmVnVDAsIGFkZHJlc3NPZkxpbmtlZEZ1bmN0aW9uQ2hlY2ssIFRydXN0
ZWRJbW1QdHIobnVsbHB0cikpOwotICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlKTsKLQogICAgIEFT
U0VSVChtX2NhbGxDb21waWxhdGlvbkluZm8uc2l6ZSgpID09IGNhbGxMaW5rSW5mb0luZGV4KTsK
ICAgICBpbmZvLT5zZXRVcENhbGwoQ2FsbExpbmtJbmZvOjpjYWxsVHlwZUZvcihvcGNvZGVJRCks
IHJlZ1QwKTsKICAgICBtX2NhbGxDb21waWxhdGlvbkluZm8uYXBwZW5kKENhbGxDb21waWxhdGlv
bkluZm8oKSk7Ci0gICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5o
b3RQYXRoQmVnaW4gPSBhZGRyZXNzT2ZMaW5rZWRGdW5jdGlvbkNoZWNrOwogICAgIG1fY2FsbENv
bXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uY2FsbExpbmtJbmZvID0gaW5mbzsKIAot
ICAgIGlmIChjb21waWxlVGFpbENhbGwoYnl0ZWNvZGUsIGluZm8sIGNhbGxMaW5rSW5mb0luZGV4
KSkgeworICAgIGlmIChjb21waWxlVGFpbENhbGwoYnl0ZWNvZGUsIGluZm8sIGNhbGxMaW5rSW5m
b0luZGV4KSkKICAgICAgICAgcmV0dXJuOwotICAgIH0KIAogICAgIGlmIChvcGNvZGVJRCA9PSBv
cF90YWlsX2NhbGxfdmFyYXJncyB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9h
cmd1bWVudHMpIHsKLSAgICAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwotICAgICAgICBw
cmVwYXJlRm9yVGFpbENhbGxTbG93KCk7Ci0gICAgICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tj
YWxsTGlua0luZm9JbmRleF0uaG90UGF0aE90aGVyID0gZW1pdE5ha2VkTmVhclRhaWxDYWxsKCk7
CisgICAgICAgIEp1bXBMaXN0IHNsb3dQYXRocyA9IGluZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRo
KCp0aGlzLCByZWdUMCwgcmVnVDIsIENhbGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpZZXMsIFsmXSB7
CisgICAgICAgICAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CisgICAgICAgICAgICBwcmVw
YXJlRm9yVGFpbENhbGxTbG93KEdQUkluZm86OnJlZ1QyKTsKKyAgICAgICAgfSk7CisgICAgICAg
IGFkZFNsb3dDYXNlKHNsb3dQYXRocyk7CisgICAgICAgIGF1dG8gZG9uZUxvY2F0aW9uID0gbGFi
ZWwoKTsKKyAgICAgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5k
b25lTG9jYXRpb24gPSBkb25lTG9jYXRpb247CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAg
ICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmhvdFBhdGhPdGhlciA9
IGVtaXROYWtlZE5lYXJDYWxsKCk7CisgICAgSnVtcExpc3Qgc2xvd1BhdGhzID0gaW5mby0+ZW1p
dEZhc3RQYXRoKCp0aGlzLCByZWdUMCwgcmVnVDIsIENhbGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpZ
ZXMpOworICAgIGF1dG8gZG9uZUxvY2F0aW9uID0gbGFiZWwoKTsKKyAgICBhZGRTbG93Q2FzZShz
bG93UGF0aHMpOworCisgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4
XS5kb25lTG9jYXRpb24gPSBkb25lTG9jYXRpb247CiAKICAgICBhZGRQdHIoVHJ1c3RlZEltbTMy
KHN0YWNrUG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwg
Y2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICBjaGVja1N0YWNr
UG9pbnRlckFsaWdubWVudCgpOwpAQCAtMjcxLDE0ICsyNzksMTMgQEAgdm9pZCBKSVQ6OmNvbXBp
bGVPcENhbGxTbG93Q2FzZShjb25zdCBJbgogCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsK
IAorICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uc2xvd1BhdGhT
dGFydCA9IGxhYmVsKCk7CisKICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsIHx8IG9w
Y29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2Fs
bF9mb3J3YXJkX2FyZ3VtZW50cykKICAgICAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwog
CiAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJl
Z1QzKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxM
aW5rSW5mb0luZGV4XS5jYWxsTGlua0luZm8pLCByZWdUMik7Ci0KLSAgICBtX2NhbGxDb21waWxh
dGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmNhbGxSZXR1cm5Mb2NhdGlvbiA9Ci0gICAgICAg
IGVtaXROYWtlZE5lYXJDYWxsKG1fdm0tPmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRv
cikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKKyAgICBtX2NhbGxDb21waWxhdGlvbkluZm9b
Y2FsbExpbmtJbmZvSW5kZXhdLmNhbGxMaW5rSW5mby0+ZW1pdFNsb3dQYXRoKCptX3ZtLCAqdGhp
cyk7CiAKICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsIHx8IG9wY29kZUlEID09IG9w
X3RhaWxfY2FsbF92YXJhcmdzKSB7CiAgICAgICAgIGFib3J0V2l0aFJlYXNvbihKSVREaWRSZXR1
cm5Gcm9tVGFpbENhbGwpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVy
YXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9w
ZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAyNzY5NzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVE9wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzkyLDcgKzEzOTIsNyBA
QCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uTGlua0NhCiAgICAgICAgICAgICBp
ZiAoIWNhbGxMaW5rSW5mby0+c2Vlbk9uY2UoKSkKICAgICAgICAgICAgICAgICBjYWxsTGlua0lu
Zm8tPnNldFNlZW4oKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBsaW5rRm9y
KHZtLCBjYWxsZWVGcmFtZSwgKmNhbGxMaW5rSW5mbywgbnVsbHB0ciwgaW50ZXJuYWxGdW5jdGlv
biwgY29kZVB0cik7CisgICAgICAgICAgICAgICAgbGlua01vbm9tb3JwaGljQ2FsbCh2bSwgY2Fs
bGVlRnJhbWUsICpjYWxsTGlua0luZm8sIG51bGxwdHIsIGludGVybmFsRnVuY3Rpb24sIGNvZGVQ
dHIpOwogCiAgICAgICAgICAgICB2b2lkKiBsaW5rZWRUYXJnZXQgPSBjb2RlUHRyLmV4ZWN1dGFi
bGVBZGRyZXNzKCk7CiAgICAgICAgICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KGxpbmtlZFRhcmdl
dCwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oY2FsbExpbmtJbmZvLT5jYWxsTW9kZSgpID09IENh
bGxNb2RlOjpUYWlsID8gUmV1c2VUaGVGcmFtZSA6IEtlZXBUaGVGcmFtZSkpOwpAQCAtMTQ0MCw4
ICsxNDQwLDkgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkxpbmtDYQogICAg
IGlmICghY2FsbExpbmtJbmZvLT5zZWVuT25jZSgpKQogICAgICAgICBjYWxsTGlua0luZm8tPnNl
dFNlZW4oKTsKICAgICBlbHNlCi0gICAgICAgIGxpbmtGb3Iodm0sIGNhbGxlZUZyYW1lLCAqY2Fs
bExpbmtJbmZvLCBjb2RlQmxvY2ssIGNhbGxlZSwgY29kZVB0cik7CisgICAgICAgIGxpbmtNb25v
bW9ycGhpY0NhbGwodm0sIGNhbGxlZUZyYW1lLCAqY2FsbExpbmtJbmZvLCBjb2RlQmxvY2ssIGNh
bGxlZSwgY29kZVB0cik7CiAKKyAgICAvL2RhdGFMb2dMbigib3BlcmF0aW9uTGlua0NhbGwgcmV0
dXJuaW5nOiAiLCBSYXdQb2ludGVyKGNvZGVQdHIuZXhlY3V0YWJsZUFkZHJlc3MoKSksICIgb24g
Q2FsbExpbmtJbmZvOiAiLCBSYXdQb2ludGVyKGNhbGxMaW5rSW5mbykpOwogICAgIHJldHVybiBl
bmNvZGVSZXN1bHQoY29kZVB0ci5leGVjdXRhYmxlQWRkcmVzcygpLCByZWludGVycHJldF9jYXN0
PHZvaWQqPihjYWxsTGlua0luZm8tPmNhbGxNb2RlKCkgPT0gQ2FsbE1vZGU6OlRhaWwgPyBSZXVz
ZVRoZUZyYW1lIDogS2VlcFRoZUZyYW1lKSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUuY3BwCShy
ZXZpc2lvbiAyNzY5NzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1BvbHltb3JwaGlj
Q2FsbFN0dWJSb3V0aW5lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUsNyArNDUsNyBAQCBQb2x5
bW9ycGhpY0NhbGxOb2RlOjp+UG9seW1vcnBoaWNDYWxsTm9kCiB2b2lkIFBvbHltb3JwaGljQ2Fs
bE5vZGU6OnVubGluayhWTSYgdm0pCiB7CiAgICAgaWYgKG1fY2FsbExpbmtJbmZvKSB7Ci0gICAg
ICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OmR1bXBEaXNhc3NlbWJseSgpLCAiVW5saW5raW5nIHBv
bHltb3JwaGljIGNhbGwgYXQgIiwgbV9jYWxsTGlua0luZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbigp
LCAiLCBiYyMiLCBtX2NhbGxMaW5rSW5mby0+Y29kZU9yaWdpbigpLmJ5dGVjb2RlSW5kZXgoKSk7
CisgICAgICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OmR1bXBEaXNhc3NlbWJseSgpLCAiVW5saW5r
aW5nIHBvbHltb3JwaGljIGNhbGwgYXQgIiwgbV9jYWxsTGlua0luZm8tPmRvbmVMb2NhdGlvbigp
LCAiLCBiYyMiLCBtX2NhbGxMaW5rSW5mby0+Y29kZU9yaWdpbigpLmJ5dGVjb2RlSW5kZXgoKSk7
CiAgICAgICAgIG1fY2FsbExpbmtJbmZvLT51bmxpbmsodm0pOwogICAgIH0KIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCShyZXZpc2lvbiAyNzY5NzcpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2
ICsyOCw4IEBACiAKICNpZiBFTkFCTEUoSklUKQogCisjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXJQ
cmludGVyLmgiCisKICNpbmNsdWRlICJCaW5hcnlTd2l0Y2guaCIKICNpbmNsdWRlICJDQ2FsbEhl
bHBlcnMuaCIKICNpbmNsdWRlICJDYWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oIgpAQCAtMTE4
OCwyMCArMTE5MCwyMCBAQCB2b2lkIHJlcGF0Y2hJbnN0YW5jZU9mKAogICAgICAgICBmdGxUaHVu
a0F3YXJlUmVwYXRjaENhbGwoY29kZUJsb2NrLCBzdHViSW5mby5zbG93UGF0aENhbGxMb2NhdGlv
biwgb3BlcmF0aW9uSW5zdGFuY2VPZkdlbmVyaWMpOwogfQogCi1zdGF0aWMgdm9pZCBsaW5rU2xv
d0ZvcihWTSYsIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvLCBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8SklUU3R1YlJvdXRpbmVQdHJUYWc+IGNvZGVSZWYpCitzdGF0aWMgdm9pZCBsaW5rU2xvd1Bh
dGhUbyhWTSYsIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvLCBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8SklUU3R1YlJvdXRpbmVQdHJUYWc+IGNvZGVSZWYpCiB7Ci0gICAgTWFjcm9Bc3NlbWJsZXI6
OnJlcGF0Y2hOZWFyQ2FsbChjYWxsTGlua0luZm8uY2FsbFJldHVybkxvY2F0aW9uKCksIENvZGVM
b2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihjb2RlUmVmLmNvZGUoKSkpOworICAg
IGNhbGxMaW5rSW5mby5zZXRTbG93UGF0aENhbGxEZXN0aW5hdGlvbihjb2RlUmVmLmNvZGUoKS50
ZW1wbGF0ZSByZXRhZ2dlZDxKU0VudHJ5UHRyVGFnPigpKTsKIH0KIAotc3RhdGljIHZvaWQgbGlu
a1Nsb3dGb3IoVk0mIHZtLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbywgVGh1bmtHZW5lcmF0
b3IgZ2VuZXJhdG9yKQorc3RhdGljIHZvaWQgbGlua1Nsb3dQYXRoVG8oVk0mIHZtLCBDYWxsTGlu
a0luZm8mIGNhbGxMaW5rSW5mbywgVGh1bmtHZW5lcmF0b3IgZ2VuZXJhdG9yKQogewotICAgIGxp
bmtTbG93Rm9yKHZtLCBjYWxsTGlua0luZm8sIHZtLmdldENUSVN0dWIoZ2VuZXJhdG9yKS5yZXRh
Z2dlZDxKSVRTdHViUm91dGluZVB0clRhZz4oKSk7CisgICAgbGlua1Nsb3dQYXRoVG8odm0sIGNh
bGxMaW5rSW5mbywgdm0uZ2V0Q1RJU3R1YihnZW5lcmF0b3IpLnJldGFnZ2VkPEpJVFN0dWJSb3V0
aW5lUHRyVGFnPigpKTsKIH0KIAogc3RhdGljIHZvaWQgbGlua1Nsb3dGb3IoVk0mIHZtLCBDYWxs
TGlua0luZm8mIGNhbGxMaW5rSW5mbykKIHsKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklU
U3R1YlJvdXRpbmVQdHJUYWc+IHZpcnR1YWxUaHVuayA9IHZpcnR1YWxUaHVua0Zvcih2bSwgY2Fs
bExpbmtJbmZvKTsKLSAgICBsaW5rU2xvd0Zvcih2bSwgY2FsbExpbmtJbmZvLCB2aXJ0dWFsVGh1
bmspOworICAgIGxpbmtTbG93UGF0aFRvKHZtLCBjYWxsTGlua0luZm8sIHZpcnR1YWxUaHVuayk7
CiAgICAgY2FsbExpbmtJbmZvLnNldFNsb3dTdHViKEdDQXdhcmVKSVRTdHViUm91dGluZTo6Y3Jl
YXRlKHZpcnR1YWxUaHVuaywgdm0pKTsKIH0KIApAQCAtMTIxNywxMSArMTIxOSwxMSBAQCBzdGF0
aWMgSlNDZWxsKiB3ZWJBc3NlbWJseU93bmVyKEpTQ2VsbCogCiAjZW5kaWYgLy8gRU5BQkxFKFdF
QkFTU0VNQkxZKQogfQogCi12b2lkIGxpbmtGb3IoCit2b2lkIGxpbmtNb25vbW9ycGhpY0NhbGwo
CiAgICAgVk0mIHZtLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgQ2FsbExpbmtJbmZvJiBjYWxsTGlu
a0luZm8sIENvZGVCbG9jayogY2FsbGVlQ29kZUJsb2NrLAogICAgIEpTT2JqZWN0KiBjYWxsZWUs
IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBjb2RlUHRyKQogewotICAgIEFT
U0VSVCghY2FsbExpbmtJbmZvLnN0dWIoKSk7CisgICAgUkVMRUFTRV9BU1NFUlQoIWNhbGxMaW5r
SW5mby5zdHViKCkpOwogCiAgICAgQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSA9IGNhbGxGcmFtZS0+
Y2FsbGVyRnJhbWUoKTsKICAgICAvLyBPdXIgY2FsbGVyIG11c3QgaGF2ZSBhIGNlbGwgZm9yIGEg
Y2FsbGVlLiBXaGVuIGNhbGxpbmcKQEAgLTEyMzUsMjYgKzEyMzcsMjQgQEAgdm9pZCBsaW5rRm9y
KAogICAgIEFTU0VSVChvd25lcik7CiAKICAgICBBU1NFUlQoIWNhbGxMaW5rSW5mby5pc0xpbmtl
ZCgpKTsKLSAgICBjYWxsTGlua0luZm8uc2V0Q2FsbGVlKHZtLCBvd25lciwgY2FsbGVlKTsKLSAg
ICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaFBvaW50ZXIoY2FsbExpbmtJbmZvLmhvdFBhdGhCZWdp
bigpLCBjYWxsZWUpOworICAgIGNhbGxMaW5rSW5mby5zZXRNb25vbW9ycGhpY0NhbGxlZSh2bSwg
b3duZXIsIGNhbGxlZSwgY29kZVB0cik7CiAgICAgY2FsbExpbmtJbmZvLnNldExhc3RTZWVuQ2Fs
bGVlKHZtLCBvd25lciwgY2FsbGVlKTsKKwogICAgIGlmIChzaG91bGREdW1wRGlzYXNzZW1ibHlG
b3IoY2FsbGVyQ29kZUJsb2NrKSkKICAgICAgICAgZGF0YUxvZygiTGlua2luZyBjYWxsIGluICIs
IEZ1bGxDb2RlT3JpZ2luKGNhbGxlckNvZGVCbG9jaywgY2FsbExpbmtJbmZvLmNvZGVPcmlnaW4o
KSksICIgdG8gIiwgcG9pbnRlckR1bXAoY2FsbGVlQ29kZUJsb2NrKSwgIiwgZW50cnlwb2ludCBh
dCAiLCBjb2RlUHRyLCAiXG4iKTsKIAotICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoTmVhckNh
bGwoY2FsbExpbmtJbmZvLmhvdFBhdGhPdGhlcigpLCBDb2RlTG9jYXRpb25MYWJlbDxKU0VudHJ5
UHRyVGFnPihjb2RlUHRyKSk7Ci0KICAgICBpZiAoY2FsbGVlQ29kZUJsb2NrKQogICAgICAgICBj
YWxsZWVDb2RlQmxvY2stPmxpbmtJbmNvbWluZ0NhbGwoY2FsbGVyRnJhbWUsICZjYWxsTGlua0lu
Zm8pOwogCiAgICAgaWYgKGNhbGxMaW5rSW5mby5zcGVjaWFsaXphdGlvbktpbmQoKSA9PSBDb2Rl
Rm9yQ2FsbCAmJiBjYWxsTGlua0luZm8uYWxsb3dTdHVicygpKSB7Ci0gICAgICAgIGxpbmtTbG93
Rm9yKHZtLCBjYWxsTGlua0luZm8sIGxpbmtQb2x5bW9ycGhpY0NhbGxUaHVua0dlbmVyYXRvcik7
CisgICAgICAgIGxpbmtTbG93UGF0aFRvKHZtLCBjYWxsTGlua0luZm8sIGxpbmtQb2x5bW9ycGhp
Y0NhbGxUaHVua0dlbmVyYXRvcik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCiAgICAg
bGlua1Nsb3dGb3Iodm0sIGNhbGxMaW5rSW5mbyk7CiB9CiAKLXZvaWQgbGlua0RpcmVjdEZvcigK
K3ZvaWQgbGlua0RpcmVjdENhbGwoCiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIENhbGxMaW5r
SW5mbyYgY2FsbExpbmtJbmZvLCBDb2RlQmxvY2sqIGNhbGxlZUNvZGVCbG9jaywKICAgICBNYWNy
b0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gY29kZVB0cikKIHsKQEAgLTEyNjksOSAr
MTI2OSw3IEBAIHZvaWQgbGlua0RpcmVjdEZvcigKICAgICBpZiAoc2hvdWxkRHVtcERpc2Fzc2Vt
Ymx5Rm9yKGNhbGxlckNvZGVCbG9jaykpCiAgICAgICAgIGRhdGFMb2coIkxpbmtpbmcgY2FsbCBp
biAiLCBGdWxsQ29kZU9yaWdpbihjYWxsZXJDb2RlQmxvY2ssIGNhbGxMaW5rSW5mby5jb2RlT3Jp
Z2luKCkpLCAiIHRvICIsIHBvaW50ZXJEdW1wKGNhbGxlZUNvZGVCbG9jayksICIsIGVudHJ5cG9p
bnQgYXQgIiwgY29kZVB0ciwgIlxuIik7CiAKLSAgICBpZiAoY2FsbExpbmtJbmZvLmNhbGxUeXBl
KCkgPT0gQ2FsbExpbmtJbmZvOjpEaXJlY3RUYWlsQ2FsbCkKLSAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OnJlcGF0Y2hKdW1wVG9Ob3AoY2FsbExpbmtJbmZvLnBhdGNoYWJsZUp1bXAoKSk7Ci0gICAg
TWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hOZWFyQ2FsbChjYWxsTGlua0luZm8uaG90UGF0aE90aGVy
KCksIENvZGVMb2NhdGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+KGNvZGVQdHIpKTsKKyAgICBjYWxs
TGlua0luZm8uc2V0RGlyZWN0Q2FsbFRhcmdldChDb2RlTG9jYXRpb25MYWJlbDxKU0VudHJ5UHRy
VGFnPihjb2RlUHRyKSk7CiAKICAgICBpZiAoY2FsbGVlQ29kZUJsb2NrKQogICAgICAgICBjYWxs
ZWVDb2RlQmxvY2stPmxpbmtJbmNvbWluZ0NhbGwoY2FsbEZyYW1lLCAmY2FsbExpbmtJbmZvKTsK
QEAgLTEyODksMjEgKzEyODcsMTYgQEAgc3RhdGljIHZvaWQgcmV2ZXJ0Q2FsbChWTSYgdm0sIENh
bGxMaW5rSQogewogICAgIGlmIChjYWxsTGlua0luZm8uaXNEaXJlY3QoKSkgewogICAgICAgICBj
YWxsTGlua0luZm8uY2xlYXJDb2RlQmxvY2soKTsKLSAgICAgICAgaWYgKCFjYWxsTGlua0luZm8u
Y2xlYXJlZEJ5SmV0dGlzb24oKSkgewotICAgICAgICAgICAgaWYgKGNhbGxMaW5rSW5mby5jYWxs
VHlwZSgpID09IENhbGxMaW5rSW5mbzo6RGlyZWN0VGFpbENhbGwpCi0gICAgICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hKdW1wKGNhbGxMaW5rSW5mby5wYXRjaGFibGVKdW1wKCks
IGNhbGxMaW5rSW5mby5zbG93UGF0aFN0YXJ0KCkpOwotICAgICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoTmVhckNhbGwoY2FsbExpbmtJbmZvLmhv
dFBhdGhPdGhlcigpLCBjYWxsTGlua0luZm8uc2xvd1BhdGhTdGFydCgpKTsKLSAgICAgICAgfQor
ICAgICAgICBpZiAoIWNhbGxMaW5rSW5mby5jbGVhcmVkQnlKZXR0aXNvbigpKQorICAgICAgICAg
ICAgY2FsbExpbmtJbmZvLmluaXRpYWxpemVEaXJlY3RDYWxsKCk7CiAgICAgfSBlbHNlIHsKICAg
ICAgICAgaWYgKCFjYWxsTGlua0luZm8uY2xlYXJlZEJ5SmV0dGlzb24oKSkgewotICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OnJldmVydEp1bXBSZXBsYWNlbWVudFRvQnJhbmNoUHRyV2l0aFBh
dGNoKAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpzdGFydE9mQnJhbmNoUHRyV2l0
aFBhdGNoT25SZWdpc3RlcihjYWxsTGlua0luZm8uaG90UGF0aEJlZ2luKCkpLAotICAgICAgICAg
ICAgICAgIGNhbGxMaW5rSW5mby5jYWxsZWVHUFIoKSwgbnVsbHB0cik7Ci0gICAgICAgICAgICBs
aW5rU2xvd0Zvcih2bSwgY2FsbExpbmtJbmZvLCBjb2RlUmVmKTsKLSAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpyZXBhdGNoUG9pbnRlcihjYWxsTGlua0luZm8uaG90UGF0aEJlZ2luKCksIG51
bGxwdHIpOworICAgICAgICAgICAgbGlua1Nsb3dQYXRoVG8odm0sIGNhbGxMaW5rSW5mbywgY29k
ZVJlZik7CisKKyAgICAgICAgICAgIGlmIChjYWxsTGlua0luZm8uc3R1YigpKQorICAgICAgICAg
ICAgICAgIGNhbGxMaW5rSW5mby5yZXZlcnRDYWxsVG9TdHViKCk7CiAgICAgICAgIH0KLSAgICAg
ICAgY2FsbExpbmtJbmZvLmNsZWFyQ2FsbGVlKCk7CisgICAgICAgIGNhbGxMaW5rSW5mby5jbGVh
ckNhbGxlZSgpOyAvLyBUaGlzIGFsc28gY2xlYXJzIHRoZSBpbmxpbmUgY2FjaGUgYm90aCBmb3Ig
ZGF0YSBhbmQgY29kZS1iYXNlZCBjYWNoZXMuCiAgICAgfQogICAgIGNhbGxMaW5rSW5mby5jbGVh
clNlZW4oKTsKICAgICBjYWxsTGlua0luZm8uY2xlYXJTdHViKCk7CkBAIC0xMzEyLDkgKzEzMDUs
OSBAQCBzdGF0aWMgdm9pZCByZXZlcnRDYWxsKFZNJiB2bSwgQ2FsbExpbmtJCiAgICAgICAgIGNh
bGxMaW5rSW5mby5yZW1vdmUoKTsKIH0KIAotdm9pZCB1bmxpbmtGb3IoVk0mIHZtLCBDYWxsTGlu
a0luZm8mIGNhbGxMaW5rSW5mbykKK3ZvaWQgdW5saW5rQ2FsbChWTSYgdm0sIENhbGxMaW5rSW5m
byYgY2FsbExpbmtJbmZvKQogewotICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OmR1bXBEaXNhc3Nl
bWJseSgpLCAiVW5saW5raW5nIGNhbGwgYXQgIiwgY2FsbExpbmtJbmZvLmhvdFBhdGhPdGhlcigp
KTsKKyAgICBkYXRhTG9nTG5JZihPcHRpb25zOjpkdW1wRGlzYXNzZW1ibHkoKSwgIlVubGlua2lu
ZyBjYWxsIGF0ICIsIGNhbGxMaW5rSW5mby5mYXN0UGF0aFN0YXJ0KCkpOwogICAgIAogICAgIHJl
dmVydENhbGwodm0sIGNhbGxMaW5rSW5mbywgdm0uZ2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2Vu
ZXJhdG9yKS5yZXRhZ2dlZDxKSVRTdHViUm91dGluZVB0clRhZz4oKSk7CiB9CkBAIC0xMzU2LDYg
KzEzNDksMTEgQEAgdm9pZCBsaW5rUG9seW1vcnBoaWNDYWxsKEpTR2xvYmFsT2JqZWN0KgogICAg
ICAgICByZXR1cm47CiAgICAgfQogCisgICAgaWYgKHRydWUpIHsKKyAgICAgICAgbGlua1ZpcnR1
YWxGb3Iodm0sIGNhbGxGcmFtZSwgY2FsbExpbmtJbmZvKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKwogICAgIC8vIE91ciBjYWxsZXIgbXVzdCBiZSBoYXZlIGEgY2VsbCBmb3IgYSBjYWxsZWUu
IFdoZW4gY2FsbGluZwogICAgIC8vIHRoaXMgZnJvbSBXYXNtLCB3ZSBlbnN1cmUgdGhlIGNhbGxl
ZSBpcyBhIGNlbGwuCiAgICAgQVNTRVJUKGNhbGxlckZyYW1lLT5jYWxsZWUoKS5pc0NlbGwoKSk7
CkBAIC0xNTgwLDcgKzE1NzgsNyBAQCB2b2lkIGxpbmtQb2x5bW9ycGhpY0NhbGwoSlNHbG9iYWxP
YmplY3QqCiAgICAgfQogICAgIHN0dWJKaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1Q
dHIoZ2xvYmFsT2JqZWN0KSwgR1BSSW5mbzo6cmVnVDMpOwogICAgIHN0dWJKaXQubW92ZShDQ2Fs
bEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoJmNhbGxMaW5rSW5mbyksIEdQUkluZm86OnJlZ1QyKTsK
LSAgICBzdHViSml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGNhbGxMaW5rSW5m
by5jYWxsUmV0dXJuTG9jYXRpb24oKS51bnRhZ2dlZEV4ZWN1dGFibGVBZGRyZXNzKCkpLCBHUFJJ
bmZvOjpyZWdUNCk7CisgICAgc3R1YkppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0
cihjYWxsTGlua0luZm8uZG9uZUxvY2F0aW9uKCkudW50YWdnZWRFeGVjdXRhYmxlQWRkcmVzcygp
KSwgR1BSSW5mbzo6cmVnVDQpOwogICAgIAogICAgIHN0dWJKaXQucmVzdG9yZVJldHVybkFkZHJl
c3NCZWZvcmVSZXR1cm4oR1BSSW5mbzo6cmVnVDQpOwogICAgIEFzc2VtYmx5SGVscGVyczo6SnVt
cCBzbG93ID0gc3R1YkppdC5qdW1wKCk7CkBAIC0xNjAzLDI5ICsxNjAxLDIzIEBAIHZvaWQgbGlu
a1BvbHltb3JwaGljQ2FsbChKU0dsb2JhbE9iamVjdCoKICAgICAgICAgcGF0Y2hCdWZmZXIubGlu
ayhjYWxsVG9Db2RlUHRyLmNhbGwsIEZ1bmN0aW9uUHRyPEpTRW50cnlQdHJUYWc+KGNhbGxUb0Nv
ZGVQdHIuY29kZVB0cikpOwogI2VuZGlmCiAgICAgfQotICAgIGlmIChpc1dlYkFzc2VtYmx5IHx8
IEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChjYWxsZXJDb2RlQmxvY2stPmppdFR5cGUoKSkpCi0g
ICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoZG9uZSwgY2FsbExpbmtJbmZvLmNhbGxSZXR1cm5Mb2Nh
dGlvbigpLmxhYmVsQXRPZmZzZXQoMCkpOwotICAgIGVsc2UKLSAgICAgICAgcGF0Y2hCdWZmZXIu
bGluayhkb25lLCBjYWxsTGlua0luZm8uaG90UGF0aE90aGVyKCkubGFiZWxBdE9mZnNldCgwKSk7
CisgICAgcGF0Y2hCdWZmZXIubGluayhkb25lLCBjYWxsTGlua0luZm8uZG9uZUxvY2F0aW9uKCkp
OwogICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvdywgQ29kZUxvY2F0aW9uTGFiZWw8SklUVGh1bmtQ
dHJUYWc+KHZtLmdldENUSVN0dWIobGlua1BvbHltb3JwaGljQ2FsbFRodW5rR2VuZXJhdG9yKS5j
b2RlKCkpKTsKICAgICAKICAgICBhdXRvIHN0dWJSb3V0aW5lID0gYWRvcHRSZWYoKm5ldyBQb2x5
bW9ycGhpY0NhbGxTdHViUm91dGluZSgKICAgICAgICAgRklOQUxJWkVfQ09ERV9GT1IoCiAgICAg
ICAgICAgICBjYWxsZXJDb2RlQmxvY2ssIHBhdGNoQnVmZmVyLCBKSVRTdHViUm91dGluZVB0clRh
ZywKICAgICAgICAgICAgICJQb2x5bW9ycGhpYyBjYWxsIHN0dWIgZm9yICVzLCByZXR1cm4gcG9p
bnQgJXAsIHRhcmdldHMgJXMiLAotICAgICAgICAgICAgICAgIGlzV2ViQXNzZW1ibHkgPyAiV2Vi
QXNzZW1ibHkiIDogdG9DU3RyaW5nKCpjYWxsZXJDb2RlQmxvY2spLmRhdGEoKSwgY2FsbExpbmtJ
bmZvLmNhbGxSZXR1cm5Mb2NhdGlvbigpLmxhYmVsQXRPZmZzZXQoMCkuZXhlY3V0YWJsZUFkZHJl
c3MoKSwKKyAgICAgICAgICAgICAgICBpc1dlYkFzc2VtYmx5ID8gIldlYkFzc2VtYmx5IiA6IHRv
Q1N0cmluZygqY2FsbGVyQ29kZUJsb2NrKS5kYXRhKCksIGNhbGxMaW5rSW5mby5kb25lTG9jYXRp
b24oKS5leGVjdXRhYmxlQWRkcmVzcygpLAogICAgICAgICAgICAgICAgIHRvQ1N0cmluZyhsaXN0
RHVtcChjYWxsQ2FzZXMpKS5kYXRhKCkpLAogICAgICAgICB2bSwgb3duZXIsIGNhbGxGcmFtZS0+
Y2FsbGVyRnJhbWUoKSwgY2FsbExpbmtJbmZvLCBjYWxsQ2FzZXMsCiAgICAgICAgIFdURk1vdmUo
ZmFzdENvdW50cykpKTsKLSAgICAKLSAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwbGFjZVdpdGhKdW1w
KAotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6c3RhcnRPZkJyYW5jaFB0cldpdGhQYXRjaE9uUmVn
aXN0ZXIoY2FsbExpbmtJbmZvLmhvdFBhdGhCZWdpbigpKSwKLSAgICAgICAgQ29kZUxvY2F0aW9u
TGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+KHN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7
CisKICAgICAvLyBUaGUgb3JpZ2luYWwgc2xvdyBwYXRoIGlzIHVucmVhY2hhYmxlIG9uIDY0LWJp
dHMsIGJ1dCBzdGlsbAogICAgIC8vIHJlYWNoYWJsZSBvbiAzMi1iaXRzIHNpbmNlIGEgbm9uLWNl
bGwgY2FsbGVlIHdpbGwgYWx3YXlzCiAgICAgLy8gdHJpZ2dlciB0aGUgc2xvdyBwYXRoCiAgICAg
bGlua1Nsb3dGb3Iodm0sIGNhbGxMaW5rSW5mbyk7Ci0gICAgCisKICAgICAvLyBJZiB0aGVyZSBo
YWQgYmVlbiBhIHByZXZpb3VzIHN0dWIgcm91dGluZSwgdGhhdCBvbmUgd2lsbCBkaWUgYXMgc29v
biBhcyB0aGUgR0MgcnVucyBhbmQgc2VlcwogICAgIC8vIHRoYXQgaXQncyBubyBsb25nZXIgb24g
c3RhY2suCiAgICAgY2FsbExpbmtJbmZvLnNldFN0dWIoV1RGTW92ZShzdHViUm91dGluZSkpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmgJKHJldmlzaW9uIDI3Njk3NykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5oCSh3b3JraW5nIGNvcHkpCkBAIC01
NiwxMCArNTYsMTAgQEAgdm9pZCByZXBhdGNoSW5CeUlEKEpTR2xvYmFsT2JqZWN0KiwgQ29kZQog
dm9pZCByZXBhdGNoQ2hlY2tQcml2YXRlQnJhbmQoSlNHbG9iYWxPYmplY3QqLCBDb2RlQmxvY2sq
LCBKU09iamVjdCosIENhY2hlYWJsZUlkZW50aWZpZXIsIFN0cnVjdHVyZVN0dWJJbmZvJik7CiB2
b2lkIHJlcGF0Y2hTZXRQcml2YXRlQnJhbmQoSlNHbG9iYWxPYmplY3QqLCBDb2RlQmxvY2sqLCBK
U09iamVjdCosIFN0cnVjdHVyZSosIENhY2hlYWJsZUlkZW50aWZpZXIsIFN0cnVjdHVyZVN0dWJJ
bmZvJik7CiB2b2lkIHJlcGF0Y2hJbnN0YW5jZU9mKEpTR2xvYmFsT2JqZWN0KiwgQ29kZUJsb2Nr
KiwgSlNWYWx1ZSB2YWx1ZSwgSlNWYWx1ZSBwcm90b3R5cGUsIFN0cnVjdHVyZVN0dWJJbmZvJiwg
Ym9vbCB3YXNGb3VuZCk7Ci12b2lkIGxpbmtGb3IoVk0mLCBDYWxsRnJhbWUqLCBDYWxsTGlua0lu
Zm8mLCBDb2RlQmxvY2sqLCBKU09iamVjdCogY2FsbGVlLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8
SlNFbnRyeVB0clRhZz4pOwotdm9pZCBsaW5rRGlyZWN0Rm9yKENhbGxGcmFtZSosIENhbGxMaW5r
SW5mbyYsIENvZGVCbG9jayosIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPik7
Cit2b2lkIGxpbmtNb25vbW9ycGhpY0NhbGwoVk0mLCBDYWxsRnJhbWUqLCBDYWxsTGlua0luZm8m
LCBDb2RlQmxvY2sqLCBKU09iamVjdCogY2FsbGVlLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNF
bnRyeVB0clRhZz4pOwordm9pZCBsaW5rRGlyZWN0Q2FsbChDYWxsRnJhbWUqLCBDYWxsTGlua0lu
Zm8mLCBDb2RlQmxvY2sqLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4pOwog
dm9pZCBsaW5rU2xvd0ZvcihDYWxsRnJhbWUqLCBDYWxsTGlua0luZm8mKTsKLXZvaWQgdW5saW5r
Rm9yKFZNJiwgQ2FsbExpbmtJbmZvJik7Cit2b2lkIHVubGlua0NhbGwoVk0mLCBDYWxsTGlua0lu
Zm8mKTsKIHZvaWQgbGlua1BvbHltb3JwaGljQ2FsbChKU0dsb2JhbE9iamVjdCosIENhbGxGcmFt
ZSosIENhbGxMaW5rSW5mbyYsIENhbGxWYXJpYW50KTsKIHZvaWQgcmVzZXRHZXRCeShDb2RlQmxv
Y2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIEdldEJ5S2luZCk7CiB2b2lkIHJlc2V0UHV0QnlJRChD
b2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAJKHJldmlzaW9uIDI3Njk3NykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MDAsOSAr
NjAwLDkgQEAgdm9pZCBPcHRpb25zOjppbml0aWFsaXplKCkKICAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKE9wdGlvbnM6OmFkZHJlc3NPZk9wdGlvbihmb3JjZU9TUkV4aXRUb0xMSW50SUQpID09
ICAmT3B0aW9uczo6Zm9yY2VPU1JFeGl0VG9MTEludCgpKTsKICAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKE9wdGlvbnM6OmFkZHJlc3NPZk9wdGlvbkRlZmF1bHQoZm9yY2VPU1JFeGl0VG9MTElu
dElEKSA9PSAgJk9wdGlvbnM6OmZvcmNlT1NSRXhpdFRvTExJbnREZWZhdWx0KCkpOwogCi0jaWZu
ZGVmIE5ERUJVRworLy8jaWZuZGVmIE5ERUJVRwogICAgICAgICAgICAgQ29uZmlnOjplbmFibGVS
ZXN0cmljdGVkT3B0aW9ucygpOwotI2VuZGlmCisvLyNlbmRpZgogICAgICAgICAgICAgLy8gSW5p
dGlhbGl6ZSBlYWNoIG9mIHRoZSBvcHRpb25zIHdpdGggdGhlaXIgZGVmYXVsdCB2YWx1ZXM6CiAj
ZGVmaW5lIElOSVRfT1BUSU9OKHR5cGVfLCBuYW1lXywgZGVmYXVsdFZhbHVlXywgYXZhaWxhYmls
aXR5XywgZGVzY3JpcHRpb25fKSB7IFwKICAgICAgICAgICAgICAgICBhdXRvIHZhbHVlID0gZGVm
YXVsdFZhbHVlXzsgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAkocmV2
aXNpb24gMjc2OTc3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xNzA4LDQgKzE3MDgsNiBAQCB2b2lkIFZNOjpyZW1vdmVMb29wSGlu
dEV4ZWN1dGlvbkNvdW50ZXIoCiAgICAgICAgIG1fbG9vcEhpbnRFeGVjdXRpb25Db3VudHMucmVt
b3ZlKGl0ZXIpOwogfQogCit1aW50NjRfdCBnX251bWJlck9mT1NSRXhpdHM7CisKIH0gLy8gbmFt
ZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCShyZXZpc2lvbiAy
NzY5NzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xMzAwLDQgKzEzMDAsNiBAQCBleHRlcm4gIkMiIHZvaWQgc2FuaXRpemVTdGFja0Zv
clZNSW1wbChWCiBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHNhbml0aXplU3RhY2tGb3JWTShWTSYp
Owogdm9pZCBsb2dTYW5pdGl6ZVN0YWNrKFZNJik7CiAKK2V4dGVybiB1aW50NjRfdCBnX251bWJl
ck9mT1NSRXhpdHM7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3Rvb2xzL0pTRG9sbGFyVk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS90b29scy9KU0RvbGxhclZNLmNwcAkocmV2aXNpb24gMjc2OTc3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3Rvb2xzL0pTRG9sbGFyVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
Nyw5ICsyNywxMSBAQAogI2luY2x1ZGUgIkpTRG9sbGFyVk0uaCIKIAogI2luY2x1ZGUgIkFycmF5
UHJvdG90eXBlLmgiCisjaW5jbHVkZSAiQXNzZW1ibGVyQ29tbW9uLmgiCiAjaW5jbHVkZSAiQnVp
bHRpbk5hbWVzLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiQ29udHJvbEZs
b3dQcm9maWxlci5oIgorI2luY2x1ZGUgIkRGR1dvcmtsaXN0LmgiCiAjaW5jbHVkZSAiRE9NQXR0
cmlidXRlR2V0dGVyU2V0dGVyLmgiCiAjaW5jbHVkZSAiRE9NSklUR2V0dGVyU2V0dGVyLmgiCiAj
aW5jbHVkZSAiRGVidWdnZXIuaCIKQEAgLTQ4LDkgKzUwLDExIEBACiAjaW5jbHVkZSAiU25pcHBl
dFBhcmFtcy5oIgogI2luY2x1ZGUgIlR5cGVQcm9maWxlci5oIgogI2luY2x1ZGUgIlR5cGVQcm9m
aWxlckxvZy5oIgorI2luY2x1ZGUgIlZNLmgiCiAjaW5jbHVkZSAiVk1JbnNwZWN0b3IuaCIKICNp
bmNsdWRlICJWTVRyYXBzSW5saW5lcy5oIgogI2luY2x1ZGUgIldhc21DYXBhYmlsaXRpZXMuaCIK
KyNpbmNsdWRlICJXYXNtV29ya2xpc3QuaCIKICNpbmNsdWRlIDx1bmljb2RlL3V2ZXJzaW9uLmg+
CiAjaW5jbHVkZSA8d3RmL0F0b21pY3MuaD4KICNpbmNsdWRlIDx3dGYvQ1BVVGltZS5oPgpAQCAt
MjAwOCw2ICsyMDEyLDIxIEBAIHN0YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKGZ1bmN0
aW8KIHN0YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9uSXNHaWdhY2FnZUVu
YWJsZWQpOwogc3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04oZnVuY3Rpb25Ub1VuY2Fj
aGVhYmxlRGljdGlvbmFyeSk7CiBzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTihmdW5j
dGlvbklzUHJpdmF0ZVN5bWJvbCk7CitzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTihm
dW5jdGlvbkR1bXBXb3JrbGlzdFN0YXRlKTsKK3N0YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZVTkNU
SU9OKGZ1bmN0aW9uUHJlY2lzZVRpbWUpOworc3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJ
T04oZnVuY3Rpb25OdW1iZXJPZk9TUkV4aXRzKTsKK3N0YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZV
TkNUSU9OKGZ1bmN0aW9uTnVtYmVyT2ZDYWNoZUZsdXNoZXMpOworc3RhdGljIEpTQ19ERUNMQVJF
X0hPU1RfRlVOQ1RJT04oZnVuY3Rpb25OdW1iZXJPZlJlcGxhY2VXaXRoVk1IYWx0cyk7CitzdGF0
aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTihmdW5jdGlvbk51bWJlck9mUmVwbGFjZVdpdGhK
dW1wcyk7CitzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTihmdW5jdGlvbk51bWJlck9m
UmVwbGFjZVdpdGhMb2Fkcyk7CitzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTihmdW5j
dGlvbk51bWJlck9mUmVwbGFjZVdpdGhBZGRyZXNzQ29tcHV0YXRpb25zKTsKK3N0YXRpYyBKU0Nf
REVDTEFSRV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9uTnVtYmVyT2ZTZXRQb2ludGVycyk7CitzdGF0
aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTihmdW5jdGlvbk51bWJlck9mUmVwYXRjaEludDMy
cyk7CitzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTihmdW5jdGlvbk51bWJlck9mUmVs
aW5rSnVtcHMpOworc3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04oZnVuY3Rpb25OdW1i
ZXJPZlJlbGlua0NhbGxzKTsKK3N0YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKGZ1bmN0
aW9uTnVtYmVyT2ZSZXBhdGNoQ29tcGFjdHMpOworc3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVO
Q1RJT04oZnVuY3Rpb25OdW1iZXJPZk5ld0NvZGVGaW5hbGl6YXRpb25zKTsKK3N0YXRpYyBKU0Nf
REVDTEFSRV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9uTnVtYmVyT2ZJblBsYWNlRmluYWxpemF0aW9u
cyk7CiAKIGNvbnN0IENsYXNzSW5mbyBKU0RvbGxhclZNOjpzX2luZm8gPSB7ICJEb2xsYXJWTSIs
ICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNE
b2xsYXJWTSkgfTsKIApAQCAtMzU3Niw2ICszNTk1LDExNSBAQCBKU0NfREVGSU5FX0hPU1RfRlVO
Q1RJT04oZnVuY3Rpb25Jc1ByaXZhCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xl
YW4oYXNTeW1ib2woY2FsbEZyYW1lLT5hcmd1bWVudCgwKSktPnVpZCgpLmlzUHJpdmF0ZSgpKSk7
CiB9CiAKK0pTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihmdW5jdGlvbkR1bXBXb3JrbGlzdFN0YXRl
LCAoSlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUqKSkKK3sKKyAgICBEb2xsYXJWTUFzc2VydFNj
b3BlIGFzc2VydFNjb3BlOworCisgICAgZGF0YUxvZygiREZHIFdvcmtsaXN0OiAiLCBwb2ludGVy
RHVtcChERkc6OmV4aXN0aW5nR2xvYmFsREZHV29ya2xpc3RPck51bGwoKSksICJcbiIpOworICAg
IGRhdGFMb2coIkZUTCBXb3JrbGlzdDogIiwgcG9pbnRlckR1bXAoREZHOjpleGlzdGluZ0dsb2Jh
bEZUTFdvcmtsaXN0T3JOdWxsKCkpLCAiXG4iKTsKKyAgICAvL2RhdGFMb2coIldhc20gV29ya2xp
c3Q6ICIsIHBvaW50ZXJEdW1wKFdhc206OmV4aXN0aW5nV29ya2xpc3RPck51bGwoKSksICJcbiIp
OworCisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKK30KKworSlND
X0RFRklORV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9uUHJlY2lzZVRpbWUsIChKU0dsb2JhbE9iamVj
dCosIENhbGxGcmFtZSopKQoreworICAgIERvbGxhclZNQXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7
CisKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKFdhbGxUaW1lOjpub3coKS5z
ZWNvbmRzU2luY2VFcG9jaCgpLnZhbHVlKCkpKTsKK30KKworSlNDX0RFRklORV9IT1NUX0ZVTkNU
SU9OKGZ1bmN0aW9uTnVtYmVyT2ZPU1JFeGl0cywgKEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1l
KikpCit7CisgICAgRG9sbGFyVk1Bc3NlcnRTY29wZSBhc3NlcnRTY29wZTsKKworICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoZ19udW1iZXJPZk9TUkV4aXRzKSk7Cit9CisKK0pT
Q19ERUZJTkVfSE9TVF9GVU5DVElPTihmdW5jdGlvbk51bWJlck9mQ2FjaGVGbHVzaGVzLCAoSlNH
bG9iYWxPYmplY3QqLCBDYWxsRnJhbWUqKSkKK3sKKyAgICBEb2xsYXJWTUFzc2VydFNjb3BlIGFz
c2VydFNjb3BlOworCisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihnX251bWJl
ck9mQ2FjaGVGbHVzaGVzKSk7Cit9CisKK0pTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihmdW5jdGlv
bk51bWJlck9mUmVwbGFjZVdpdGhWTUhhbHRzLCAoSlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUq
KSkKK3sKKyAgICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOworCisgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc051bWJlcihnX251bWJlck9mUmVwbGFjZVdpdGhWTUhhbHRzKSk7
Cit9CisKK0pTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihmdW5jdGlvbk51bWJlck9mUmVwbGFjZVdp
dGhKdW1wcywgKEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1lKikpCit7CisgICAgRG9sbGFyVk1B
c3NlcnRTY29wZSBhc3NlcnRTY29wZTsKKworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNO
dW1iZXIoZ19udW1iZXJPZlJlcGxhY2VXaXRoSnVtcHMpKTsKK30KKworSlNDX0RFRklORV9IT1NU
X0ZVTkNUSU9OKGZ1bmN0aW9uTnVtYmVyT2ZSZXBsYWNlV2l0aExvYWRzLCAoSlNHbG9iYWxPYmpl
Y3QqLCBDYWxsRnJhbWUqKSkKK3sKKyAgICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3Bl
OworCisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihnX251bWJlck9mUmVwbGFj
ZVdpdGhMb2FkcykpOworfQorCitKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oZnVuY3Rpb25OdW1i
ZXJPZlJlcGxhY2VXaXRoQWRkcmVzc0NvbXB1dGF0aW9ucywgKEpTR2xvYmFsT2JqZWN0KiwgQ2Fs
bEZyYW1lKikpCit7CisgICAgRG9sbGFyVk1Bc3NlcnRTY29wZSBhc3NlcnRTY29wZTsKKworICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoZ19udW1iZXJPZlJlcGxhY2VXaXRoQWRk
cmVzc0NvbXB1dGF0aW9ucykpOworfQorCitKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oZnVuY3Rp
b25OdW1iZXJPZlNldFBvaW50ZXJzLCAoSlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUqKSkKK3sK
KyAgICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOworCisgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc051bWJlcihnX251bWJlck9mU2V0UG9pbnRlcnMpKTsKK30KKworSlNDX0RF
RklORV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9uTnVtYmVyT2ZSZXBhdGNoSW50MzJzLCAoSlNHbG9i
YWxPYmplY3QqLCBDYWxsRnJhbWUqKSkKK3sKKyAgICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2Vy
dFNjb3BlOworCisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihnX251bWJlck9m
UmVwYXRjaEludDMycykpOworfQorCitKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oZnVuY3Rpb25O
dW1iZXJPZlJlbGlua0p1bXBzLCAoSlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUqKSkKK3sKKyAg
ICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOworCisgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc051bWJlcihnX251bWJlck9mUmVsaW5rSnVtcHMpKTsKK30KKworSlNDX0RFRklO
RV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9uTnVtYmVyT2ZSZWxpbmtDYWxscywgKEpTR2xvYmFsT2Jq
ZWN0KiwgQ2FsbEZyYW1lKikpCit7CisgICAgRG9sbGFyVk1Bc3NlcnRTY29wZSBhc3NlcnRTY29w
ZTsKKworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoZ19udW1iZXJPZlJlbGlu
a0NhbGxzKSk7Cit9CisKK0pTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihmdW5jdGlvbk51bWJlck9m
UmVwYXRjaENvbXBhY3RzLCAoSlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUqKSkKK3sKKyAgICBE
b2xsYXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOworCisgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc051bWJlcihnX251bWJlck9mUmVwYXRjaENvbXBhY3RzKSk7Cit9CisKK0pTQ19ERUZJ
TkVfSE9TVF9GVU5DVElPTihmdW5jdGlvbk51bWJlck9mTmV3Q29kZUZpbmFsaXphdGlvbnMsIChK
U0dsb2JhbE9iamVjdCosIENhbGxGcmFtZSopKQoreworICAgIERvbGxhclZNQXNzZXJ0U2NvcGUg
YXNzZXJ0U2NvcGU7CisKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGdfbnVt
YmVyT2ZOZXdDb2RlRmluYWxpemF0aW9ucykpOworfQorCitKU0NfREVGSU5FX0hPU1RfRlVOQ1RJ
T04oZnVuY3Rpb25OdW1iZXJPZkluUGxhY2VGaW5hbGl6YXRpb25zLCAoSlNHbG9iYWxPYmplY3Qq
LCBDYWxsRnJhbWUqKSkKK3sKKyAgICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOwor
CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihnX251bWJlck9mSW5QbGFjZUZp
bmFsaXphdGlvbnMpKTsKK30KKwogY29uc3RleHByIHVuc2lnbmVkIGpzRG9sbGFyVk1Qcm9wZXJ0
eUF0dHJpYnV0ZXMgPSBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBQcm9wZXJ0eUF0dHJp
YnV0ZTo6RG9udEVudW0gfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZTsKIAogdm9pZCBK
U0RvbGxhclZNOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCkBAIC0zNzMwLDYgKzM4NTgsMjIgQEAg
dm9pZCBKU0RvbGxhclZNOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCiAKICAgICBhZGRGdW5jdGlv
bih2bSwgImlzUHJpdmF0ZVN5bWJvbCIsIGZ1bmN0aW9uSXNQcml2YXRlU3ltYm9sLCAxKTsKIAor
ICAgIGFkZEZ1bmN0aW9uKHZtLCAiZHVtcFdvcmtsaXN0U3RhdGUiLCBmdW5jdGlvbkR1bXBXb3Jr
bGlzdFN0YXRlLCAwKTsKKyAgICBhZGRGdW5jdGlvbih2bSwgInByZWNpc2VUaW1lIiwgZnVuY3Rp
b25QcmVjaXNlVGltZSwgMCk7CisgICAgYWRkRnVuY3Rpb24odm0sICJudW1iZXJPZk9TUkV4aXRz
IiwgZnVuY3Rpb25OdW1iZXJPZk9TUkV4aXRzLCAwKTsKKyAgICBhZGRGdW5jdGlvbih2bSwgIm51
bWJlck9mQ2FjaGVGbHVzaGVzIiwgZnVuY3Rpb25OdW1iZXJPZkNhY2hlRmx1c2hlcywgMCk7Cisg
ICAgYWRkRnVuY3Rpb24odm0sICJudW1iZXJPZlJlcGxhY2VXaXRoVk1IYWx0cyIsIGZ1bmN0aW9u
TnVtYmVyT2ZSZXBsYWNlV2l0aFZNSGFsdHMsIDApOworICAgIGFkZEZ1bmN0aW9uKHZtLCAibnVt
YmVyT2ZSZXBsYWNlV2l0aEp1bXBzIiwgZnVuY3Rpb25OdW1iZXJPZlJlcGxhY2VXaXRoSnVtcHMs
IDApOworICAgIGFkZEZ1bmN0aW9uKHZtLCAibnVtYmVyT2ZSZXBsYWNlV2l0aExvYWRzIiwgZnVu
Y3Rpb25OdW1iZXJPZlJlcGxhY2VXaXRoTG9hZHMsIDApOworICAgIGFkZEZ1bmN0aW9uKHZtLCAi
bnVtYmVyT2ZSZXBsYWNlV2l0aEFkZHJlc3NDb21wdXRhdGlvbnMiLCBmdW5jdGlvbk51bWJlck9m
UmVwbGFjZVdpdGhBZGRyZXNzQ29tcHV0YXRpb25zLCAwKTsKKyAgICBhZGRGdW5jdGlvbih2bSwg
Im51bWJlck9mU2V0UG9pbnRlcnMiLCBmdW5jdGlvbk51bWJlck9mU2V0UG9pbnRlcnMsIDApOwor
ICAgIGFkZEZ1bmN0aW9uKHZtLCAibnVtYmVyT2ZSZXBhdGNoSW50MzJzIiwgZnVuY3Rpb25OdW1i
ZXJPZlJlcGF0Y2hJbnQzMnMsIDApOworICAgIGFkZEZ1bmN0aW9uKHZtLCAibnVtYmVyT2ZSZWxp
bmtKdW1wcyIsIGZ1bmN0aW9uTnVtYmVyT2ZSZWxpbmtKdW1wcywgMCk7CisgICAgYWRkRnVuY3Rp
b24odm0sICJudW1iZXJPZlJlbGlua0NhbGxzIiwgZnVuY3Rpb25OdW1iZXJPZlJlbGlua0NhbGxz
LCAwKTsKKyAgICBhZGRGdW5jdGlvbih2bSwgIm51bWJlck9mUmVwYXRjaENvbXBhY3RzIiwgZnVu
Y3Rpb25OdW1iZXJPZlJlcGF0Y2hDb21wYWN0cywgMCk7CisgICAgYWRkRnVuY3Rpb24odm0sICJu
dW1iZXJPZk5ld0NvZGVGaW5hbGl6YXRpb25zIiwgZnVuY3Rpb25OdW1iZXJPZk5ld0NvZGVGaW5h
bGl6YXRpb25zLCAwKTsKKyAgICBhZGRGdW5jdGlvbih2bSwgIm51bWJlck9mSW5QbGFjZUZpbmFs
aXphdGlvbnMiLCBmdW5jdGlvbk51bWJlck9mSW5QbGFjZUZpbmFsaXphdGlvbnMsIDApOworCiAg
ICAgbV9vYmplY3REb2luZ1NpZGVFZmZlY3RQdXRXaXRob3V0Q29ycmVjdFNsb3RTdGF0dXNTdHJ1
Y3R1cmUuc2V0KHZtLCB0aGlzLCBPYmplY3REb2luZ1NpZGVFZmZlY3RQdXRXaXRob3V0Q29ycmVj
dFNsb3RTdGF0dXM6OmNyZWF0ZVN0cnVjdHVyZSh2bSwgZ2xvYmFsT2JqZWN0LCBqc051bGwoKSkp
OwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XYXNtVG9KUy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2FzbVRvSlMuY3Bw
CShyZXZpc2lvbiAyNzY5NzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XYXNt
VG9KUy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2MSwxOSArMjYxLDE4IEBAIEV4cGVjdGVkPE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxXYXNtRW50cnkKIAogICAgIENhbGxMaW5rSW5mbyogY2FsbExp
bmtJbmZvID0gY2FsbExpbmtJbmZvcy5hZGQoQ29kZU9yaWdpbigpKTsKICAgICBjYWxsTGlua0lu
Zm8tPnNldFVwQ2FsbChDYWxsTGlua0luZm86OkNhbGwsIGltcG9ydEpTQ2VsbEdQUlJlZyk7Ci0g
ICAgSklUOjpEYXRhTGFiZWxQdHIgdGFyZ2V0VG9DaGVjazsKLSAgICBKSVQ6OlRydXN0ZWRJbW1Q
dHIgaW5pdGlhbFJpZ2h0VmFsdWUobnVsbHB0cik7Ci0gICAgSklUOjpKdW1wIHNsb3dQYXRoID0g
aml0LmJyYW5jaFB0cldpdGhQYXRjaChNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIGltcG9ydEpT
Q2VsbEdQUlJlZywgdGFyZ2V0VG9DaGVjaywgaW5pdGlhbFJpZ2h0VmFsdWUpOwotICAgIEpJVDo6
Q2FsbCBmYXN0Q2FsbCA9IGppdC5uZWFyQ2FsbCgpOworICAgIGF1dG8gc2xvd1BhdGggPSBjYWxs
TGlua0luZm8tPmVtaXRGYXN0UGF0aChqaXQsIGltcG9ydEpTQ2VsbEdQUlJlZywgSW52YWxpZEdQ
UlJlZywgQ2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6Ok5vKTsKKwogICAgIEpJVDo6SnVtcCBkb25l
ID0gaml0Lmp1bXAoKTsKICAgICBzbG93UGF0aC5saW5rKCZqaXQpOworICAgIGF1dG8gc2xvd1Bh
dGhTdGFydCA9IGppdC5sYWJlbCgpOwogICAgIC8vIENhbGxlZSBuZWVkcyB0byBiZSBpbiByZWdU
MCBoZXJlLgotICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKGNhbGxM
aW5rSW5mbyksIEdQUkluZm86OnJlZ1QyKTsgLy8gTGluayBpbmZvIG5lZWRzIHRvIGJlIGluIHJl
Z1QyLgogICAgIGppdC5sb2FkV2FzbUNvbnRleHRJbnN0YW5jZShHUFJJbmZvOjpyZWdUMyk7CiAg
ICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QzLCBJbnN0
YW5jZTo6b2Zmc2V0T2ZPd25lcigpKSwgR1BSSW5mbzo6cmVnVDMpOwogICAgIGppdC5sb2FkUHRy
KENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMywgSlNXZWJBc3NlbWJseUluc3Rh
bmNlOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgR1BSSW5mbzo6cmVnVDMpOwotICAgIEpJVDo6
Q2FsbCBzbG93Q2FsbCA9IGppdC5uZWFyQ2FsbCgpOworICAgIGNhbGxMaW5rSW5mby0+ZW1pdFNs
b3dQYXRoKHZtLCBqaXQpOwogICAgIGRvbmUubGluaygmaml0KTsKKyAgICBhdXRvIGRvbmVMb2Nh
dGlvbiA9IGppdC5sYWJlbCgpOwogCiAgICAgaWYgKHNpZ25hdHVyZS5yZXR1cm5Db3VudCgpID09
IDEpIHsKICAgICAgICAgc3dpdGNoIChzaWduYXR1cmUucmV0dXJuVHlwZSgwKS5raW5kKSB7CkBA
IC00MjEsMTEgKzQyMCw5IEBAIEV4cGVjdGVkPE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxXYXNtRW50
cnkKICAgICBpZiAoVU5MSUtFTFkocGF0Y2hCdWZmZXIuZGlkRmFpbFRvQWxsb2NhdGUoKSkpCiAg
ICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChCaW5kaW5nRmFpbHVyZTo6T3V0T2ZNZW1vcnkp
OwogCi0gICAgcGF0Y2hCdWZmZXIubGluayhzbG93Q2FsbCwgRnVuY3Rpb25QdHI8SklUVGh1bmtQ
dHJUYWc+KHZtLmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcikuY29kZSgpKSk7Ci0g
ICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gY2FsbFJldHVybkxvY2F0aW9u
KHBhdGNoQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxKU0ludGVybmFsUHRyVGFnPihzbG93Q2Fs
bCkpOwotICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IGhvdFBhdGhCZWdp
bihwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KHRhcmdldFRvQ2hlY2sp
KTsKLSAgICBDb2RlTG9jYXRpb25OZWFyQ2FsbDxKU0ludGVybmFsUHRyVGFnPiBob3RQYXRoT3Ro
ZXIgPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8SlNJbnRlcm5hbFB0clRhZz4oZmFz
dENhbGwpOwotICAgIGNhbGxMaW5rSW5mby0+c2V0Q2FsbExvY2F0aW9ucyhjYWxsUmV0dXJuTG9j
YXRpb24sIGhvdFBhdGhCZWdpbiwgaG90UGF0aE90aGVyKTsKKyAgICBjYWxsTGlua0luZm8tPnNl
dENvZGVMb2NhdGlvbnMoCisgICAgICAgICAgICBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpTSW50
ZXJuYWxQdHJUYWc+KHNsb3dQYXRoU3RhcnQpLAorICAgICAgICAgICAgcGF0Y2hCdWZmZXIubG9j
YXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihkb25lTG9jYXRpb24pKTsKIAogICAgIHJldHVybiBG
SU5BTElaRV9XQVNNX0NPREUocGF0Y2hCdWZmZXIsIFdhc21FbnRyeVB0clRhZywgIldlYkFzc2Vt
Ymx5LT5KYXZhU2NyaXB0IGltcG9ydFslaV0gJXMiLCBpbXBvcnRJbmRleCwgc2lnbmF0dXJlLnRv
U3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkpOwogfQpJbmRleDogVG9vbHMvU2NyaXB0cy9jb21wYXJl
LXJlc3VsdHMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy9jb21wYXJlLXJlc3VsdHMJKHJl
dmlzaW9uIDI3Njk3NykKKysrIFRvb2xzL1NjcmlwdHMvY29tcGFyZS1yZXN1bHRzCSh3b3JraW5n
IGNvcHkpCkBAIC0yNzQsNyArMjc0LDcgQEAgZGVmIEpldFN0cmVhbTJSZXN1bHRzKHBheWxvYWQp
OgogICAgIGFzc2VydCBkZXRlY3RKZXRTdHJlYW0yKHBheWxvYWQpCiAKICAgICBqcyA9IHBheWxv
YWRbIkpldFN0cmVhbTIuMCJdCi0gICAgaXRlcmF0aW9ucyA9IGxlbihqc1sidGVzdHMiXVsiZ2F1
c3NpYW4tYmx1ciJdWyJtZXRyaWNzIl1bIlNjb3JlIl1bImN1cnJlbnQiXSkKKyAgICBpdGVyYXRp
b25zID0gbGVuKGpzWyJ0ZXN0cyJdWyJyYXl0cmFjZSJdWyJtZXRyaWNzIl1bIlNjb3JlIl1bImN1
cnJlbnQiXSkKICAgICByZXN1bHRzID0gW10KICAgICBmb3IgaSBpbiByYW5nZShpdGVyYXRpb25z
KToKICAgICAgICAgc2NvcmVzID0gW10KSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvYmVu
Y2htYXJrX3J1bm5lci9icm93c2VyX2RyaXZlci9vc3hfc2FmYXJpX2RyaXZlci5weQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2JlbmNobWFya19ydW5uZXIvYnJvd3Nlcl9k
cml2ZXIvb3N4X3NhZmFyaV9kcml2ZXIucHkJKHJldmlzaW9uIDI3Njk3NykKKysrIFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvYmVuY2htYXJrX3J1bm5lci9icm93c2VyX2RyaXZlci9vc3hfc2FmYXJp
X2RyaXZlci5weQkod29ya2luZyBjb3B5KQpAQCAtMiw2ICsyLDcgQEAKIAogaW1wb3J0IGxvZ2dp
bmcKIGltcG9ydCBvcworaW1wb3J0IHJlCiBpbXBvcnQgc3VicHJvY2VzcwogaW1wb3J0IHRpbWUK
IApAQCAtMjYsNiArMjcsOSBAQCBjbGFzcyBPU1hTYWZhcmlEcml2ZXIoT1NYQnJvd3NlckRyaXZl
cik6CiAgICAgZGVmIGxhdW5jaF91cmwoc2VsZiwgdXJsLCBvcHRpb25zLCBicm93c2VyX2J1aWxk
X3BhdGgsIGJyb3dzZXJfcGF0aCk6CiAgICAgICAgIGFyZ3MgPSBbJy9BcHBsaWNhdGlvbnMvU2Fm
YXJpLmFwcC9Db250ZW50cy9NYWNPUy9TYWZhcmknXQogICAgICAgICBlbnYgPSB7fQorICAgICAg
ICBmb3Iga2V5LCB2YWx1ZSBpbiBvcy5lbnZpcm9uLml0ZW1zKCk6CisgICAgICAgICAgICBpZiBy
ZS5tYXRjaChyIl5fX1hQQ18iLCBrZXkpOgorICAgICAgICAgICAgICAgIGVudltrZXldID0gdmFs
dWUKICAgICAgICAgaWYgYnJvd3Nlcl9idWlsZF9wYXRoOgogICAgICAgICAgICAgYnJvd3Nlcl9i
dWlsZF9hYnNvbHV0ZV9wYXRoID0gb3MucGF0aC5hYnNwYXRoKGJyb3dzZXJfYnVpbGRfcGF0aCkK
ICAgICAgICAgICAgIHNhZmFyaV9hcHBfaW5fYnVpbGRfcGF0aCA9IG9zLnBhdGguam9pbihicm93
c2VyX2J1aWxkX2Fic29sdXRlX3BhdGgsICdTYWZhcmkuYXBwL0NvbnRlbnRzL01hY09TL1NhZmFy
aScpCkBAIC0zNyw4ICs0MSwxMCBAQCBjbGFzcyBPU1hTYWZhcmlEcml2ZXIoT1NYQnJvd3NlckRy
aXZlcik6CiAgICAgICAgICAgICAgICAgYXJncyA9IFtzYWZhcmlfYXBwX2luX2J1aWxkX3BhdGhd
CiAKICAgICAgICAgICAgIGlmIGNvbnRhaW5zX2ZyYW1ld29ya3M6Ci0gICAgICAgICAgICAgICAg
ZW52ID0geydEWUxEX0ZSQU1FV09SS19QQVRIJzogYnJvd3Nlcl9idWlsZF9hYnNvbHV0ZV9wYXRo
LCAnRFlMRF9MSUJSQVJZX1BBVEgnOiBicm93c2VyX2J1aWxkX2Fic29sdXRlX3BhdGgsCi0gICAg
ICAgICAgICAgICAgICAgICdfX1hQQ19EWUxEX0ZSQU1FV09SS19QQVRIJzogYnJvd3Nlcl9idWls
ZF9hYnNvbHV0ZV9wYXRoLCAnX19YUENfRFlMRF9MSUJSQVJZX1BBVEgnOiBicm93c2VyX2J1aWxk
X2Fic29sdXRlX3BhdGh9CisgICAgICAgICAgICAgICAgZW52WydEWUxEX0ZSQU1FV09SS19QQVRI
J10gPSBicm93c2VyX2J1aWxkX2Fic29sdXRlX3BhdGgKKyAgICAgICAgICAgICAgICBlbnZbJ0RZ
TERfTElCUkFSWV9QQVRIJ10gPSBicm93c2VyX2J1aWxkX2Fic29sdXRlX3BhdGgKKyAgICAgICAg
ICAgICAgICBlbnZbJ19fWFBDX0RZTERfRlJBTUVXT1JLX1BBVEgnXSA9IGJyb3dzZXJfYnVpbGRf
YWJzb2x1dGVfcGF0aAorICAgICAgICAgICAgICAgIGVudlsnX19YUENfRFlMRF9MSUJSQVJZX1BB
VEgnXSA9IGJyb3dzZXJfYnVpbGRfYWJzb2x1dGVfcGF0aAogICAgICAgICAgICAgZWxpZiBub3Qg
aGFzX3NhZmFyaV9hcHA6CiAgICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCdDb3VsZCBu
b3QgZmluZCBhbnkgZnJhbWV3b3JrICJ7fSInLmZvcm1hdChicm93c2VyX2J1aWxkX3BhdGgpKQog
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>428445</attachid>
            <date>2021-05-12 18:23:45 -0700</date>
            <delta_ts>2021-05-13 10:21:13 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>102265</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvSmV0U3RyZWFtMi9KZXRTdHJlYW1Ecml2ZXIuanMKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0yL0pldFN0cmVhbURyaXZlci5q
cwkocmV2aXNpb24gMjc2OTc3KQorKysgUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0yL0pldFN0
cmVhbURyaXZlci5qcwkod29ya2luZyBjb3B5KQpAQCAtNDMsNiArNDMsOCBAQCBpZiAodHlwZW9m
IHRlc3RXb3JzdENhc2VDb3VudE1hcCA9PT0gInVuCiBpZiAodHlwZW9mIGR1bXBKU09OUmVzdWx0
cyA9PT0gInVuZGVmaW5lZCIpCiAgICAgdmFyIGR1bXBKU09OUmVzdWx0cyA9IGZhbHNlOwogCisv
L3ZhciB0ZXN0TGlzdCA9IFsiZGVsdGEtYmx1ZSIsICJlYXJsZXktYm95ZXIiLCAicmljaGFyZHMi
LCAicmF5dHJhY2UiXTsKKwogLy8gVXNlZCBmb3IgdGhlIHByb21pc2UgcmVwcmVzZW50aW5nIHRo
ZSBjdXJyZW50IGJlbmNobWFyayBydW4uCiB0aGlzLmN1cnJlbnRSZXNvbHZlID0gbnVsbDsKIHRo
aXMuY3VycmVudFJlamVjdCA9IG51bGw7CkBAIC0yNzQsNiArMjc2LDEwIEBAIGNsYXNzIERyaXZl
ciB7CiAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coYCR7Y2F0ZWdvcnl9OiAke3VpRnJpZW5k
bHlOdW1iZXIoZ2VvbWVhbihzY29yZXMpKX1gKTsKIAogICAgICAgICAgICAgY29uc29sZS5sb2co
IlxuVG90YWwgU2NvcmU6ICIsIHVpRnJpZW5kbHlOdW1iZXIoZ2VvbWVhbihhbGxTY29yZXMpKSwg
IlxuIik7CisgICAgICAgICAgICBpZiAodHlwZW9mICR2bSAhPT0gInVuZGVmaW5lZCIpIHsKKyAg
ICAgICAgICAgICAgICBjb25zb2xlLmxvZygiXG5cbnRvdGFsIGNhY2hlIGZsdXNoZXM6ICIsICR2
bS5udW1iZXJPZkNhY2hlRmx1c2hlcygpLCAiXG4iKTsKKyAgICAgICAgICAgICAgICBjb25zb2xl
LmxvZygiXG5cbnRvdGFsIE9TUiBleGl0czogIiwgJHZtLm51bWJlck9mT1NSRXhpdHMoKSwgIlxu
Iik7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KIAogICAgICAgICB0aGlzLnJlcG9ydFNjb3Jl
VG9SdW5CZW5jaG1hcmtSdW5uZXIoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3Vy
Y2VzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQJ
KHJldmlzaW9uIDI3Njk3NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAko
d29ya2luZyBjb3B5KQpAQCAtMSw0ICsxLDQgQEAKLS8vIENvcHlyaWdodCAoQykgMjAxNy0yMDE5
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoQykgMjAxNy0y
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vCiAvLyBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKIC8v
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtNDYsNiArNDYsNyBAQCBBUEkvT3BhcXVlSlNTdHJpbmcuY3BwCiAKIGFz
c2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmNwcAogYXNzZW1ibGVyL0Fzc2VtYmxlckJ1
ZmZlci5jcHAKK2Fzc2VtYmxlci9Bc3NlbWJsZXJDb21tb24uY3BwCiBhc3NlbWJsZXIvQ1BVLmNw
cAogYXNzZW1ibGVyL0pJVE9wZXJhdGlvbkxpc3QuY3BwCiBhc3NlbWJsZXIvTGlua0J1ZmZlci5j
cHAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyNzY5NzcpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjg5MSw2ICsyODkxLDcgQEAKIAkJMEY5QzAzRDQx
RTk0NzZGMDAwQ0Q5MTI1IC8qIEFpclRtcFNldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBBaXJUbXBTZXQuaDsgcGF0aCA9IGIzL2Fpci9BaXJUbXBTZXQuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5Q0FCQzYxREI1NEE3NjAwMDhFODNCIC8qIEFpclBhZElu
dGVyZmVyZW5jZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBBaXJQ
YWRJbnRlcmZlcmVuY2UuY3BwOyBwYXRoID0gYjMvYWlyL0FpclBhZEludGVyZmVyZW5jZS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOUNBQkM3MURCNTRBNzYwMDA4RTgzQiAv
KiBBaXJQYWRJbnRlcmZlcmVuY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
QWlyUGFkSW50ZXJmZXJlbmNlLmg7IHBhdGggPSBiMy9haXIvQWlyUGFkSW50ZXJmZXJlbmNlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGOUQwODhBMjY0MUNDN0UwMDQxRDcwMSAv
KiBBc3NlbWJsZXJDb21tb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gQXNzZW1ibGVyQ29tbW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5
RDMzNkUxNjVEQkI4RDAwNUFEMzg3IC8qIERpc2Fzc2VtYmxlci5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBEaXNhc3NlbWJsZXIuY3BwOyBwYXRoID0gZGlzYXNzZW1i
bGVyL0Rpc2Fzc2VtYmxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOUQz
Mzk0MTdGRkM0RTYwMDczQzJCQyAvKiBERkdGbHVzaGVkQXQuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBuYW1lID0gREZHRmx1c2hlZEF0LmNwcDsgcGF0aCA9IGRmZy9ERkdGbHVz
aGVkQXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjlEMzM5NTE3RkZDNEU2
MDA3M0MyQkMgLyogREZHRmx1c2hlZEF0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IERGR0ZsdXNoZWRBdC5oOyBwYXRoID0gZGZnL0RGR0ZsdXNoZWRBdC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtODQxNiw2ICs4NDE3LDcgQEAKIAkJCQk4NkFERDE0MzBGRERF
QTk4MDAwNkZGQ0MgLyogQVJNdjdSZWdpc3RlcnMuaCAqLywKIAkJCQkwRkE2RjM5NjIwQ0NCN0E2
MDBBMDNEQ0QgLyogQXNzZW1ibGVyQnVmZmVyLmNwcCAqLywKIAkJCQk5Njg4Q0IxMzBFRDEyQjRF
MDAxRDY0OUYgLyogQXNzZW1ibGVyQnVmZmVyLmggKi8sCisJCQkJMEY5RDA4OEEyNjQxQ0M3RTAw
NDFENzAxIC8qIEFzc2VtYmxlckNvbW1vbi5jcHAgKi8sCiAJCQkJNDNDMzkyQUExQzNCRUIwMDAw
MjQxRjUzIC8qIEFzc2VtYmxlckNvbW1vbi5oICovLAogCQkJCTg2RTExNkIwMEZFNzVBQzgwMEI1
MTJCQyAvKiBDb2RlTG9jYXRpb24uaCAqLywKIAkJCQk1MjMzNTYyODIyNUVCOEU5MDAyNjhCRDIg
LyogQ1BVLmNwcCAqLywKQEAgLTg0MzksOCArODQ0MSw4IEBACiAJCQkJODZDNTY4REUxMUEyMTNF
RTAwMDdGN0YwIC8qIE1hY3JvQXNzZW1ibGVyTUlQUy5oICovLAogCQkJCUZFNjhDNjM1MUI5MERE
RDkwMDQyQkNCMyAvKiBNYWNyb0Fzc2VtYmxlclByaW50ZXIuY3BwICovLAogCQkJCUZFNjhDNjM2
MUI5MERERDkwMDQyQkNCMyAvKiBNYWNyb0Fzc2VtYmxlclByaW50ZXIuaCAqLywKLQkJCQk4NjAx
NjFFMDBGM0E4M0MxMDBGODQ3MTAgLyogTWFjcm9Bc3NlbWJsZXJYODYuaCAqLywKIAkJCQk4NjAx
NjFFMTBGM0E4M0MxMDBGODQ3MTAgLyogTWFjcm9Bc3NlbWJsZXJYODZfNjQuaCAqLywKKwkJCQk4
NjAxNjFFMDBGM0E4M0MxMDBGODQ3MTAgLyogTWFjcm9Bc3NlbWJsZXJYODYuaCAqLywKIAkJCQlB
N0E0QUUwNzE3OTczQjI2MDA1NjEyQjEgLyogTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uY3BwICov
LAogCQkJCTg2MDE2MUUyMEYzQTgzQzEwMEY4NDcxMCAvKiBNYWNyb0Fzc2VtYmxlclg4NkNvbW1v
bi5oICovLAogCQkJCTY1ODYwMTc3MTg1QThGNUUwMDAzMEVFRSAvKiBNYXhGcmFtZUV4dGVudEZv
clNsb3dQYXRoQ2FsbC5oICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci9BUk02NEFzc2VtYmxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9h
c3NlbWJsZXIvQVJNNjRBc3NlbWJsZXIuaAkocmV2aXNpb24gMjc2OTc3KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BUk02NEFzc2VtYmxlci5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yNjAwLDYgKzI2MDAsNyBAQCBwdWJsaWM6CiAgICAgICAgIGludCBpbnNuID0gZGF0YUNhY2hl
WmVyb1ZpcnR1YWxBZGRyZXNzKEFSTTY0UmVnaXN0ZXJzOjp6cik7CiAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKHJvdW5kVXBUb011bHRpcGxlT2Y8aW5zdHJ1Y3Rpb25TaXplPih3aGVyZSkgPT0gd2hl
cmUpOwogICAgICAgICBwZXJmb3JtSklUTWVtY3B5KHdoZXJlLCAmaW5zbiwgc2l6ZW9mKGludCkp
OworICAgICAgICBXVEY6OmF0b21pY0V4Y2hhbmdlQWRkKCZnX251bWJlck9mUmVwbGFjZVdpdGhW
TUhhbHRzLCAxKTsKICAgICAgICAgY2FjaGVGbHVzaCh3aGVyZSwgc2l6ZW9mKGludCkpOwogICAg
IH0KIApAQCAtMjYxOSw2ICsyNjIwLDcgQEAgcHVibGljOgogICAgICAgICBpbnQgaW5zbiA9IHVu
Y29uZGl0aW9uYWxCcmFuY2hJbW1lZGlhdGUoZmFsc2UsIHN0YXRpY19jYXN0PGludD4ob2Zmc2V0
KSk7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJvdW5kVXBUb011bHRpcGxlT2Y8aW5zdHJ1Y3Rp
b25TaXplPih3aGVyZSkgPT0gd2hlcmUpOwogICAgICAgICBwZXJmb3JtSklUTWVtY3B5KHdoZXJl
LCAmaW5zbiwgc2l6ZW9mKGludCkpOworICAgICAgICBXVEY6OmF0b21pY0V4Y2hhbmdlQWRkKCZn
X251bWJlck9mUmVwbGFjZVdpdGhKdW1wcywgMSk7CiAgICAgICAgIGNhY2hlRmx1c2god2hlcmUs
IHNpemVvZihpbnQpKTsKICAgICB9CiAgICAgCkBAIC0yNjUwLDYgKzI2NTIsNyBAQCBwdWJsaWM6
CiAgICAgICAgICAgICBpbnQgaW5zbiA9IGxvYWRTdG9yZVJlZ2lzdGVyVW5zaWduZWRJbW1lZGlh
dGUoTWVtT3BTaXplXzY0LCBmYWxzZSwgTWVtT3BfTE9BRCwgZW5jb2RlUG9zaXRpdmVJbW1lZGlh
dGU8NjQ+KGltbTEyKSwgcm4sIHJkKTsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJvdW5k
VXBUb011bHRpcGxlT2Y8aW5zdHJ1Y3Rpb25TaXplPih3aGVyZSkgPT0gd2hlcmUpOwogICAgICAg
ICAgICAgcGVyZm9ybUpJVE1lbWNweSh3aGVyZSwgJmluc24sIHNpemVvZihpbnQpKTsKKyAgICAg
ICAgICAgIFdURjo6YXRvbWljRXhjaGFuZ2VBZGQoJmdfbnVtYmVyT2ZSZXBsYWNlV2l0aExvYWRz
LCAxKTsKICAgICAgICAgICAgIGNhY2hlRmx1c2god2hlcmUsIHNpemVvZihpbnQpKTsKICAgICAg
ICAgfQogI2lmIEFTU0VSVF9FTkFCTEVECkBAIC0yNjg1LDYgKzI2ODgsNyBAQCBwdWJsaWM6CiAg
ICAgICAgICAgICBpbnQgaW5zbiA9IGFkZFN1YnRyYWN0SW1tZWRpYXRlKERhdGFzaXplXzY0LCBB
ZGRPcF9BREQsIERvbnRTZXRGbGFncywgMCwgaW1tMTIgKiBzaXplb2Yodm9pZCopLCBybiwgcnQp
OwogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQocm91bmRVcFRvTXVsdGlwbGVPZjxpbnN0cnVj
dGlvblNpemU+KHdoZXJlKSA9PSB3aGVyZSk7CiAgICAgICAgICAgICBwZXJmb3JtSklUTWVtY3B5
KHdoZXJlLCAmaW5zbiwgc2l6ZW9mKGludCkpOworICAgICAgICAgICAgV1RGOjphdG9taWNFeGNo
YW5nZUFkZCgmZ19udW1iZXJPZlJlcGxhY2VXaXRoQWRkcmVzc0NvbXB1dGF0aW9ucywgMSk7CiAg
ICAgICAgICAgICBjYWNoZUZsdXNoKHdoZXJlLCBzaXplb2YoaW50KSk7CiAgICAgICAgIH0KICNp
ZiBBU1NFUlRfRU5BQkxFRApAQCAtMjcyMSw4ICsyNzI1LDEwIEBAIHB1YmxpYzoKICAgICAgICAg
UkVMRUFTRV9BU1NFUlQocm91bmRVcFRvTXVsdGlwbGVPZjxpbnN0cnVjdGlvblNpemU+KGFkZHJl
c3MpID09IGFkZHJlc3MpOwogICAgICAgICBwZXJmb3JtSklUTWVtY3B5KGFkZHJlc3MsIGJ1ZmZl
ciwgc2l6ZW9mKGludCkgKiAzKTsKIAotICAgICAgICBpZiAoZmx1c2gpCisgICAgICAgIGlmIChm
bHVzaCkgeworICAgICAgICAgICAgV1RGOjphdG9taWNFeGNoYW5nZUFkZCgmZ19udW1iZXJPZlNl
dFBvaW50ZXJzLCAxKTsKICAgICAgICAgICAgIGNhY2hlRmx1c2goYWRkcmVzcywgc2l6ZW9mKGlu
dCkgKiAzKTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIHN0YXRpYyB2b2lkIHJlcGF0Y2hJbnQz
Mih2b2lkKiB3aGVyZSwgaW50MzJfdCB2YWx1ZSkKQEAgLTI3NDksNiArMjc1NSw3IEBAIHB1Ymxp
YzoKICAgICAgICAgUkVMRUFTRV9BU1NFUlQocm91bmRVcFRvTXVsdGlwbGVPZjxpbnN0cnVjdGlv
blNpemU+KHdoZXJlKSA9PSB3aGVyZSk7CiAgICAgICAgIHBlcmZvcm1KSVRNZW1jcHkod2hlcmUs
ICZidWZmZXIsIHNpemVvZihpbnQpICogMik7CiAKKyAgICAgICAgV1RGOjphdG9taWNFeGNoYW5n
ZUFkZCgmZ19udW1iZXJPZlJlcGF0Y2hJbnQzMnMsIDEpOwogICAgICAgICBjYWNoZUZsdXNoKHdo
ZXJlLCBzaXplb2YoaW50KSAqIDIpOwogICAgIH0KIApAQCAtMjc5Miw2ICsyNzk5LDcgQEAgcHVi
bGljOgogICAgIHN0YXRpYyB2b2lkIHJlbGlua0p1bXAodm9pZCogZnJvbSwgdm9pZCogdG8pCiAg
ICAgewogICAgICAgICByZWxpbmtKdW1wT3JDYWxsPEJyYW5jaFR5cGVfSk1QPihyZWludGVycHJl
dF9jYXN0PGludCo+KGZyb20pLCByZWludGVycHJldF9jYXN0PGNvbnN0IGludCo+KGZyb20pLCB0
byk7CisgICAgICAgIFdURjo6YXRvbWljRXhjaGFuZ2VBZGQoJmdfbnVtYmVyT2ZSZWxpbmtKdW1w
cywgMSk7CiAgICAgICAgIGNhY2hlRmx1c2goZnJvbSwgc2l6ZW9mKGludCkpOwogICAgIH0KICAg
ICAKQEAgLTI4MDMsNiArMjgxMSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCByZWxpbmtD
YWxsKHZvaWQqIGZyb20sIHZvaWQqIHRvKQogICAgIHsKICAgICAgICAgcmVsaW5rSnVtcE9yQ2Fs
bDxCcmFuY2hUeXBlX0NBTEw+KHJlaW50ZXJwcmV0X2Nhc3Q8aW50Kj4oZnJvbSkgLSAxLCByZWlu
dGVycHJldF9jYXN0PGNvbnN0IGludCo+KGZyb20pIC0gMSwgdG8pOworICAgICAgICBXVEY6OmF0
b21pY0V4Y2hhbmdlQWRkKCZnX251bWJlck9mUmVsaW5rQ2FsbHMsIDEpOwogICAgICAgICBjYWNo
ZUZsdXNoKHJlaW50ZXJwcmV0X2Nhc3Q8aW50Kj4oZnJvbSkgLSAxLCBzaXplb2YoaW50KSk7CiAg
ICAgfQogCkBAIC0yODQ2LDYgKzI4NTUsNyBAQCBwdWJsaWM6CiAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKHJvdW5kVXBUb011bHRpcGxlT2Y8aW5zdHJ1Y3Rpb25TaXplPih3aGVyZSkgPT0gd2hlcmUp
OwogICAgICAgICBwZXJmb3JtSklUTWVtY3B5KHdoZXJlLCAmaW5zbiwgc2l6ZW9mKGludCkpOwog
CisgICAgICAgIFdURjo6YXRvbWljRXhjaGFuZ2VBZGQoJmdfbnVtYmVyT2ZSZXBhdGNoQ29tcGFj
dHMsIDEpOwogICAgICAgICBjYWNoZUZsdXNoKHdoZXJlLCBzaXplb2YoaW50KSk7CiAgICAgfQog
CkBAIC0yODYwLDYgKzI4NzAsNyBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgdm9pZCBjYWNoZUZs
dXNoKHZvaWQqIGNvZGUsIHNpemVfdCBzaXplKQogICAgIHsKKyAgICAgICAgV1RGOjphdG9taWNF
eGNoYW5nZUFkZCgmZ19udW1iZXJPZkNhY2hlRmx1c2hlcywgMSk7CiAjaWYgT1MoREFSV0lOKQog
ICAgICAgICBzeXNfY2FjaGVfY29udHJvbChrQ2FjaGVGdW5jdGlvblByZXBhcmVGb3JFeGVjdXRp
b24sIGNvZGUsIHNpemUpOwogI2VsaWYgT1MoRlVDSFNJQSkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9hc3NlbWJsZXIvQVJNNjRFQXNzZW1ibGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BUk02NEVBc3NlbWJsZXIuaAkocmV2aXNpb24gMjc2
OTc3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BUk02NEVBc3NlbWJsZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtMzk2LDggKzM5NiwxMCBAQCBwdWJsaWM6CiAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKHJvdW5kVXBUb011bHRpcGxlT2Y8aW5zdHJ1Y3Rpb25TaXplPihhZGRyZXNz
KSA9PSBhZGRyZXNzKTsKICAgICAgICAgcGVyZm9ybUpJVE1lbWNweShhZGRyZXNzLCBidWZmZXIs
IHNpemVvZihpbnQpICogNCk7CiAKLSAgICAgICAgaWYgKGZsdXNoKQorICAgICAgICBpZiAoZmx1
c2gpIHsKKyAgICAgICAgICAgIFdURjo6YXRvbWljRXhjaGFuZ2VBZGQoJmdfbnVtYmVyT2ZTZXRQ
b2ludGVycywgMSk7CiAgICAgICAgICAgICBjYWNoZUZsdXNoKGFkZHJlc3MsIHNpemVvZihpbnQp
ICogNCk7CisgICAgICAgIH0KICAgICB9CiAKICAgICBzdGF0aWMgdm9pZCogcmVhZFBvaW50ZXIo
dm9pZCogd2hlcmUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fic3Ry
YWN0TWFjcm9Bc3NlbWJsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaAkocmV2aXNpb24gMjc2OTc3KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTk3MSw2ICs5NzEsMTIgQEAgcHVibGljOgogICAgICAgICBtX2xp
bmtUYXNrcy5hcHBlbmQoY3JlYXRlU2hhcmVkVGFzazx2b2lkKExpbmtCdWZmZXImKT4oZnVuY3Rv
cikpOwogICAgIH0KIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBh
ZGRMYXRlTGlua1Rhc2soY29uc3QgRnVuY3RvciYgZnVuY3RvcikgLy8gUnVuIGFmdGVyIGFsbCBs
aW5rIHRhc2tzCisgICAgeworICAgICAgICBtX2xhdGVMaW5rVGFza3MuYXBwZW5kKGNyZWF0ZVNo
YXJlZFRhc2s8dm9pZChMaW5rQnVmZmVyJik+KGZ1bmN0b3IpKTsKKyAgICB9CisKICNpZiBDT01Q
SUxFUihHQ0MpCiAgICAgLy8gV29ya2Fyb3VuZCBmb3IgR0NDIGRlbWFuZGluZyB0aGF0IG1lbWNw
eSAibXVzdCBiZSB0aGUgbmFtZSBvZiBhIGZ1bmN0aW9uIHdpdGggZXh0ZXJuYWwgbGlua2FnZSIu
CiAgICAgc3RhdGljIHZvaWQqIG1lbWNweSh2b2lkKiBkc3QsIGNvbnN0IHZvaWQqIHNyYywgc2l6
ZV90IHNpemUpCkBAIC0xMTE0LDYgKzExMjAsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgYm9vbCBtX2Fs
bG93U2NyYXRjaFJlZ2lzdGVyIHsgdHJ1ZSB9OwogCiAgICAgVmVjdG9yPFJlZlB0cjxTaGFyZWRU
YXNrPHZvaWQoTGlua0J1ZmZlciYpPj4+IG1fbGlua1Rhc2tzOworICAgIFZlY3RvcjxSZWZQdHI8
U2hhcmVkVGFzazx2b2lkKExpbmtCdWZmZXImKT4+PiBtX2xhdGVMaW5rVGFza3M7CiAKICAgICBm
cmllbmQgY2xhc3MgTGlua0J1ZmZlcjsKIH07IC8vIGNsYXNzIEFic3RyYWN0TWFjcm9Bc3NlbWJs
ZXIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQXNzZW1ibGVyQ29tbW9u
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fzc2Vt
YmxlckNvbW1vbi5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fz
c2VtYmxlci9Bc3NlbWJsZXJDb21tb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDQg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiQXNzZW1ibGVyQ29tbW9uLmgiCisKK25hbWVzcGFjZSBKU0MgeworCit1aW50NjRfdCBnX251
bWJlck9mQ2FjaGVGbHVzaGVzOwordWludDY0X3QgZ19udW1iZXJPZlJlcGxhY2VXaXRoVk1IYWx0
czsKK3VpbnQ2NF90IGdfbnVtYmVyT2ZSZXBsYWNlV2l0aEp1bXBzOwordWludDY0X3QgZ19udW1i
ZXJPZlJlcGxhY2VXaXRoTG9hZHM7Cit1aW50NjRfdCBnX251bWJlck9mUmVwbGFjZVdpdGhBZGRy
ZXNzQ29tcHV0YXRpb25zOwordWludDY0X3QgZ19udW1iZXJPZlNldFBvaW50ZXJzOwordWludDY0
X3QgZ19udW1iZXJPZlJlcGF0Y2hJbnQzMnM7Cit1aW50NjRfdCBnX251bWJlck9mUmVsaW5rSnVt
cHM7Cit1aW50NjRfdCBnX251bWJlck9mUmVsaW5rQ2FsbHM7Cit1aW50NjRfdCBnX251bWJlck9m
UmVwYXRjaENvbXBhY3RzOwordWludDY0X3QgZ19udW1iZXJPZk5ld0NvZGVGaW5hbGl6YXRpb25z
OwordWludDY0X3QgZ19udW1iZXJPZkluUGxhY2VGaW5hbGl6YXRpb25zOworCit9IC8vIG5hbWVz
cGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9Bc3NlbWJs
ZXJDb21tb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVy
L0Fzc2VtYmxlckNvbW1vbi5oCShyZXZpc2lvbiAyNzY5NzcpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL0Fzc2VtYmxlckNvbW1vbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOTYs
NCArMjk2LDE3IEBAIHByaXZhdGU6CiAgICAgaW50IG1fdmFsdWU7CiB9OwogCitKU19FWFBPUlRf
UFJJVkFURSBleHRlcm4gdWludDY0X3QgZ19udW1iZXJPZkNhY2hlRmx1c2hlczsKK0pTX0VYUE9S
VF9QUklWQVRFIGV4dGVybiB1aW50NjRfdCBnX251bWJlck9mUmVwbGFjZVdpdGhWTUhhbHRzOwor
SlNfRVhQT1JUX1BSSVZBVEUgZXh0ZXJuIHVpbnQ2NF90IGdfbnVtYmVyT2ZSZXBsYWNlV2l0aEp1
bXBzOworSlNfRVhQT1JUX1BSSVZBVEUgZXh0ZXJuIHVpbnQ2NF90IGdfbnVtYmVyT2ZSZXBsYWNl
V2l0aExvYWRzOworSlNfRVhQT1JUX1BSSVZBVEUgZXh0ZXJuIHVpbnQ2NF90IGdfbnVtYmVyT2ZS
ZXBsYWNlV2l0aEFkZHJlc3NDb21wdXRhdGlvbnM7CitKU19FWFBPUlRfUFJJVkFURSBleHRlcm4g
dWludDY0X3QgZ19udW1iZXJPZlNldFBvaW50ZXJzOworSlNfRVhQT1JUX1BSSVZBVEUgZXh0ZXJu
IHVpbnQ2NF90IGdfbnVtYmVyT2ZSZXBhdGNoSW50MzJzOworSlNfRVhQT1JUX1BSSVZBVEUgZXh0
ZXJuIHVpbnQ2NF90IGdfbnVtYmVyT2ZSZWxpbmtKdW1wczsKK0pTX0VYUE9SVF9QUklWQVRFIGV4
dGVybiB1aW50NjRfdCBnX251bWJlck9mUmVsaW5rQ2FsbHM7CitKU19FWFBPUlRfUFJJVkFURSBl
eHRlcm4gdWludDY0X3QgZ19udW1iZXJPZlJlcGF0Y2hDb21wYWN0czsKK0pTX0VYUE9SVF9QUklW
QVRFIGV4dGVybiB1aW50NjRfdCBnX251bWJlck9mTmV3Q29kZUZpbmFsaXphdGlvbnM7CitKU19F
WFBPUlRfUFJJVkFURSBleHRlcm4gdWludDY0X3QgZ19udW1iZXJPZkluUGxhY2VGaW5hbGl6YXRp
b25zOworCiB9IC8vIG5hbWVzcGFjZSBKU0MuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL0xpbmtCdWZmZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5jcHAJKHJldmlzaW9uIDI3Njk3NykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQzMiw2ICs0MzIsNyBAQCB2b2lkIExpbmtCdWZmZXI6OmxpbmtDb2RlKE1hY3JvQXNzZW1i
bGVyCiAjZW5kaWYgLy8gIUVOQUJMRShCUkFOQ0hfQ09NUEFDVElPTikKIAogICAgIG1fbGlua1Rh
c2tzID0gV1RGTW92ZShtYWNyb0Fzc2VtYmxlci5tX2xpbmtUYXNrcyk7CisgICAgbV9sYXRlTGlu
a1Rhc2tzID0gV1RGTW92ZShtYWNyb0Fzc2VtYmxlci5tX2xhdGVMaW5rVGFza3MpOwogfQogCiB2
b2lkIExpbmtCdWZmZXI6OmFsbG9jYXRlKE1hY3JvQXNzZW1ibGVyJiBtYWNyb0Fzc2VtYmxlciwg
SklUQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQpAQCAtNDY0LDYgKzQ2NSw4IEBAIHZvaWQgTGlu
a0J1ZmZlcjo6cGVyZm9ybUZpbmFsaXphdGlvbigpCiB7CiAgICAgZm9yIChhdXRvJiB0YXNrIDog
bV9saW5rVGFza3MpCiAgICAgICAgIHRhc2stPnJ1bigqdGhpcyk7CisgICAgZm9yIChhdXRvJiB0
YXNrIDogbV9sYXRlTGlua1Rhc2tzKQorICAgICAgICB0YXNrLT5ydW4oKnRoaXMpOwogCiAjaWZu
ZGVmIE5ERUJVRwogICAgIEFTU0VSVChtX2lzSnVtcElzbGFuZCB8fCAhaXNDb21waWxhdGlvblRo
cmVhZCgpKTsKQEAgLTQ3MSw2ICs0NzQsMTEgQEAgdm9pZCBMaW5rQnVmZmVyOjpwZXJmb3JtRmlu
YWxpemF0aW9uKCkKICAgICBBU1NFUlQoaXNWYWxpZCgpKTsKICAgICBtX2NvbXBsZXRlZCA9IHRy
dWU7CiAjZW5kaWYKKworICAgIGlmIChtX2V4ZWN1dGFibGVNZW1vcnkpCisgICAgICAgIFdURjo6
YXRvbWljRXhjaGFuZ2VBZGQoJmdfbnVtYmVyT2ZOZXdDb2RlRmluYWxpemF0aW9ucywgMSk7Cisg
ICAgZWxzZQorICAgICAgICBXVEY6OmF0b21pY0V4Y2hhbmdlQWRkKCZnX251bWJlck9mSW5QbGFj
ZUZpbmFsaXphdGlvbnMsIDEpOwogICAgIAogICAgIE1hY3JvQXNzZW1ibGVyOjpjYWNoZUZsdXNo
KGNvZGUoKSwgbV9zaXplKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvTGlua0J1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3Nl
bWJsZXIvTGlua0J1ZmZlci5oCShyZXZpc2lvbiAyNzY5NzcpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzc1LDYgKzM3
NSw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2FscmVhZHlEaXNhc3NlbWJsZWQgeyBmYWxzZSB9
OwogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxMaW5rQnVmZmVyUHRyVGFnPiBtX2NvZGU7CiAg
ICAgVmVjdG9yPFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoTGlua0J1ZmZlciYpPj4+IG1fbGlua1Rh
c2tzOworICAgIFZlY3RvcjxSZWZQdHI8U2hhcmVkVGFzazx2b2lkKExpbmtCdWZmZXImKT4+PiBt
X2xhdGVMaW5rVGFza3M7CiB9OwogCiAjaWYgT1MoTElOVVgpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCShyZXZpc2lvbiAyNzY5NzcpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE1ODAsMTEgKzE1ODAsNiBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlSW1w
bChBY2Nlc3NHZW5lCiAgICAgICAgIC8vIFN0dWZmIGZvciBjdXN0b20gZ2V0dGVycy9zZXR0ZXJz
LgogICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgb3BlcmF0aW9uQ2FsbDsKIAotICAgICAgICAv
LyBTdHVmZiBmb3IgSlMgZ2V0dGVycy9zZXR0ZXJzLgotICAgICAgICBDQ2FsbEhlbHBlcnM6OkRh
dGFMYWJlbFB0ciBhZGRyZXNzT2ZMaW5rRnVuY3Rpb25DaGVjazsKLSAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpDYWxsIGZhc3RQYXRoQ2FsbDsKLSAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIHNsb3dQ
YXRoQ2FsbDsKLQogICAgICAgICAvLyBUaGlzIGFsc28gZG9lcyB0aGUgbmVjZXNzYXJ5IGNhbGN1
bGF0aW9ucyBvZiB3aGV0aGVyIG9yIG5vdCB3ZSdyZSBhbgogICAgICAgICAvLyBleGNlcHRpb24g
aGFuZGxpbmcgY2FsbCBzaXRlLgogICAgICAgICBBY2Nlc3NHZW5lcmF0aW9uU3RhdGU6OlNwaWxs
U3RhdGUgc3BpbGxTdGF0ZSA9IHN0YXRlLnByZXNlcnZlTGl2ZVJlZ2lzdGVyc1RvU3RhY2tGb3JD
YWxsKCk7CkBAIC0xNzAxLDI0ICsxNjk2LDIyIEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVJ
bXBsKEFjY2Vzc0dlbmUKICAgICAgICAgICAgICAgICAgICAgICAgIHZpcnR1YWxSZWdpc3RlckZv
ckFyZ3VtZW50SW5jbHVkaW5nVGhpcygxKS5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpKTsK
ICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIHNsb3dDYXNl
ID0gaml0LmJyYW5jaFB0cldpdGhQYXRjaCgKLSAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6
Ok5vdEVxdWFsLCBsb2FkZWRWYWx1ZUdQUiwgYWRkcmVzc09mTGlua0Z1bmN0aW9uQ2hlY2ssCi0g
ICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG51bGxwdHIpKTsKKyAg
ICAgICAgICAgIGF1dG8gc2xvd0Nhc2UgPSBhY2Nlc3MuY2FsbExpbmtJbmZvKCktPmVtaXRGYXN0
UGF0aChqaXQsIGxvYWRlZFZhbHVlR1BSLCBsb2FkZWRWYWx1ZUdQUiA9PSBHUFJJbmZvOjpyZWdU
MiA/IEdQUkluZm86OnJlZ1QwIDogR1BSSW5mbzo6cmVnVDIsIEpJVENvZGU6OmlzT3B0aW1pemlu
Z0pJVChjb2RlQmxvY2stPmppdFR5cGUoKSkgPyBDYWxsTGlua0luZm86OlVzZURhdGFJQzo6Tm8g
OiBDYWxsTGlua0luZm86OlVzZURhdGFJQzo6WWVzKTsKKyAgICAgICAgICAgIGF1dG8gZG9uZUxv
Y2F0aW9uID0gaml0LmxhYmVsKCk7CiAKLSAgICAgICAgICAgIGZhc3RQYXRoQ2FsbCA9IGppdC5u
ZWFyQ2FsbCgpOwogICAgICAgICAgICAgaWYgKG1fdHlwZSA9PSBHZXR0ZXIpCiAgICAgICAgICAg
ICAgICAgaml0LnNldHVwUmVzdWx0cyh2YWx1ZVJlZ3MpOwogICAgICAgICAgICAgZG9uZS5hcHBl
bmQoaml0Lmp1bXAoKSk7CiAKICAgICAgICAgICAgIHNsb3dDYXNlLmxpbmsoJmppdCk7CisgICAg
ICAgICAgICBhdXRvIHNsb3dQYXRoU3RhcnQgPSBqaXQubGFiZWwoKTsKICAgICAgICAgICAgIGpp
dC5tb3ZlKGxvYWRlZFZhbHVlR1BSLCBHUFJJbmZvOjpyZWdUMCk7CiAjaWYgVVNFKEpTVkFMVUUz
Ml82NCkKICAgICAgICAgICAgIC8vIFdlICphbHdheXMqIGtub3cgdGhhdCB0aGUgZ2V0dGVyL3Nl
dHRlciwgaWYgbm9uLW51bGwsIGlzIGEgY2VsbC4KICAgICAgICAgICAgIGppdC5tb3ZlKENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLCBHUFJJbmZvOjpyZWdUMSk7
CiAjZW5kaWYKLSAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0
cihhY2Nlc3MuY2FsbExpbmtJbmZvKCkpLCBHUFJJbmZvOjpyZWdUMik7CiAgICAgICAgICAgICBq
aXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoZ2xvYmFsT2JqZWN0KSwgR1BSSW5m
bzo6cmVnVDMpOwotICAgICAgICAgICAgc2xvd1BhdGhDYWxsID0gaml0Lm5lYXJDYWxsKCk7Cisg
ICAgICAgICAgICBhY2Nlc3MuY2FsbExpbmtJbmZvKCktPmVtaXRTbG93UGF0aCh2bSwgaml0KTsK
ICAgICAgICAgICAgIGlmIChtX3R5cGUgPT0gR2V0dGVyKQogICAgICAgICAgICAgICAgIGppdC5z
ZXR1cFJlc3VsdHModmFsdWVSZWdzKTsKICAgICAgICAgICAgIGRvbmUuYXBwZW5kKGppdC5qdW1w
KCkpOwpAQCAtMTczNSwxNSArMTcyOCwxMCBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlSW1w
bChBY2Nlc3NHZW5lCiAgICAgICAgICAgICBib29sIGNhbGxIYXNSZXR1cm5WYWx1ZSA9IGlzR2V0
dGVyKCk7CiAgICAgICAgICAgICByZXN0b3JlTGl2ZVJlZ2lzdGVyc0Zyb21TdGFja0ZvckNhbGwo
c3BpbGxTdGF0ZSwgY2FsbEhhc1JldHVyblZhbHVlKTsKIAotICAgICAgICAgICAgaml0LmFkZExp
bmtUYXNrKFs9LCAmdm1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgICAgICAg
ICAgdGhpcy0+YXM8R2V0dGVyU2V0dGVyQWNjZXNzQ2FzZT4oKS5jYWxsTGlua0luZm8oKS0+c2V0
Q2FsbExvY2F0aW9ucygKLSAgICAgICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJ
bnRlcm5hbFB0clRhZz4obGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8SlNJbnRlcm5hbFB0
clRhZz4oc2xvd1BhdGhDYWxsKSksCi0gICAgICAgICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxh
YmVsPEpTSW50ZXJuYWxQdHJUYWc+KGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRy
VGFnPihhZGRyZXNzT2ZMaW5rRnVuY3Rpb25DaGVjaykpLAotICAgICAgICAgICAgICAgICAgICBs
aW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxKU0ludGVybmFsUHRyVGFnPihmYXN0UGF0aENh
bGwpKTsKLQotICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluaygKLSAgICAgICAgICAgICAg
ICAgICAgc2xvd1BhdGhDYWxsLAotICAgICAgICAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJl
bDxKSVRUaHVua1B0clRhZz4odm0uZ2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5j
b2RlKCkpKTsKKyAgICAgICAgICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxp
bmtCdWZmZXIpIHsKKyAgICAgICAgICAgICAgICB0aGlzLT5hczxHZXR0ZXJTZXR0ZXJBY2Nlc3ND
YXNlPigpLmNhbGxMaW5rSW5mbygpLT5zZXRDb2RlTG9jYXRpb25zKAorICAgICAgICAgICAgICAg
ICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oc2xvd1BhdGhTdGFy
dCksCisgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFs
UHRyVGFnPihkb25lTG9jYXRpb24pKTsKICAgICAgICAgICAgIH0pOwogICAgICAgICB9IGVsc2Ug
ewogICAgICAgICAgICAgQVNTRVJUKG1fdHlwZSA9PSBDdXN0b21WYWx1ZUdldHRlciB8fCBtX3R5
cGUgPT0gQ3VzdG9tQWNjZXNzb3JHZXR0ZXIgfHwgbV90eXBlID09IEN1c3RvbVZhbHVlU2V0dGVy
IHx8IG1fdHlwZSA9PSBDdXN0b21BY2Nlc3NvclNldHRlcik7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmNwcAkocmV2aXNpb24gMjc2OTc3
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI2LDEyICsyNiwxNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lu
Y2x1ZGUgIkNhbGxMaW5rSW5mby5oIgogCisjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXJQcmludGVy
LmgiCisjaW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgiCiAjaW5jbHVkZSAiQ2FsbEZyYW1lU2h1ZmZs
ZURhdGEuaCIKICNpbmNsdWRlICJGdW5jdGlvbkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIkpTQ2Vs
bElubGluZXMuaCIKICNpbmNsdWRlICJPcGNvZGUuaCIKKyNpbmNsdWRlICJMaW5rQnVmZmVyLmgi
CiAjaW5jbHVkZSAiUmVwYXRjaC5oIgorI2luY2x1ZGUgIlRodW5rR2VuZXJhdG9ycy5oIgogI2lu
Y2x1ZGUgPHd0Zi9MaXN0RHVtcC5oPgorI2luY2x1ZGUgIkRpc2FsbG93TWFjcm9TY3JhdGNoUmVn
aXN0ZXJVc2FnZS5oIgogCiAjaWYgRU5BQkxFKEpJVCkKIG5hbWVzcGFjZSBKU0MgewpAQCAtNzcs
NiArODIsNyBAQCBDYWxsTGlua0luZm86OkNhbGxMaW5rSW5mbyhDb2RlT3JpZ2luIGNvCiAgICAg
LCBtX2FsbG93U3R1YnModHJ1ZSkKICAgICAsIG1fY2xlYXJlZEJ5SmV0dGlzb24oZmFsc2UpCiAg
ICAgLCBtX2NhbGxUeXBlKE5vbmUpCisgICAgLCBtX3VzZURhdGFJQyhzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oVXNlRGF0YUlDOjpZZXMpKQogewogfQogCkBAIC0xMDIsNDcgKzEwOCw1MSBAQCB2b2lk
IENhbGxMaW5rSW5mbzo6dW5saW5rKFZNJiB2bSkKICAgICAvLyBXZSBjb3VsZCBiZSBjYWxsZWQg
ZXZlbiBpZiB3ZSdyZSBub3QgbGlua2VkIGFueW1vcmUgYmVjYXVzZSBvZiBob3cgcG9seW1vcnBo
aWMgY2FsbHMKICAgICAvLyB3b3JrLiBFYWNoIGNhbGxzaXRlIHdpdGhpbiB0aGUgcG9seW1vcnBo
aWMgY2FsbCBzdHViIG1heSBzZXBhcmF0ZWx5IGFzayB1cyB0byB1bmxpbmsoKS4KICAgICBpZiAo
aXNMaW5rZWQoKSkKLSAgICAgICAgdW5saW5rRm9yKHZtLCAqdGhpcyk7CisgICAgICAgIHVubGlu
a0NhbGwodm0sICp0aGlzKTsKIAogICAgIC8vIEVpdGhlciB3ZSB3ZXJlIHVubGlua2VkLCBpbiB3
aGljaCBjYXNlIHdlIHNob3VsZCBub3QgaGF2ZSBiZWVuIG9uIGFueSBsaXN0LCBvciB3ZSB1bmxp
bmtlZAogICAgIC8vIG91cnNlbHZlcyBzbyB0aGF0IHdlJ3JlIG5vdCBvbiBhbnkgbGlzdCBhbnlt
b3JlLgogICAgIFJFTEVBU0VfQVNTRVJUKCFpc09uTGlzdCgpKTsKIH0KIAotQ29kZUxvY2F0aW9u
TmVhckNhbGw8SlNJbnRlcm5hbFB0clRhZz4gQ2FsbExpbmtJbmZvOjpjYWxsUmV0dXJuTG9jYXRp
b24oKQorQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gQ2FsbExpbmtJbmZvOjpm
YXN0UGF0aFN0YXJ0KCkKIHsKLSAgICBSRUxFQVNFX0FTU0VSVCghaXNEaXJlY3QoKSk7Ci0gICAg
cmV0dXJuIENvZGVMb2NhdGlvbk5lYXJDYWxsPEpTSW50ZXJuYWxQdHJUYWc+KG1fY2FsbFJldHVy
bkxvY2F0aW9uT3JQYXRjaGFibGVKdW1wLCBOZWFyQ2FsbE1vZGU6OlJlZ3VsYXIpOworICAgIHJl
dHVybiBDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHI8SlNJbnRlcm5hbFB0clRhZz4obV9mYXN0UGF0
aFN0YXJ0KTsKIH0KIAotQ29kZUxvY2F0aW9uSnVtcDxKU0ludGVybmFsUHRyVGFnPiBDYWxsTGlu
a0luZm86OnBhdGNoYWJsZUp1bXAoKQorQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRh
Zz4gQ2FsbExpbmtJbmZvOjpzbG93UGF0aFN0YXJ0KCkKIHsKLSAgICBSRUxFQVNFX0FTU0VSVChj
YWxsVHlwZSgpID09IERpcmVjdFRhaWxDYWxsKTsKLSAgICByZXR1cm4gQ29kZUxvY2F0aW9uSnVt
cDxKU0ludGVybmFsUHRyVGFnPihtX2NhbGxSZXR1cm5Mb2NhdGlvbk9yUGF0Y2hhYmxlSnVtcCk7
CisgICAgUkVMRUFTRV9BU1NFUlQoIWlzRGF0YUlDKCkpOworICAgIHJldHVybiB1LmNvZGVJQy5t
X3Nsb3dQYXRoU3RhcnQ7CiB9CiAKLUNvZGVMb2NhdGlvbkRhdGFMYWJlbFB0cjxKU0ludGVybmFs
UHRyVGFnPiBDYWxsTGlua0luZm86OmhvdFBhdGhCZWdpbigpCitDb2RlTG9jYXRpb25MYWJlbDxK
U0ludGVybmFsUHRyVGFnPiBDYWxsTGlua0luZm86OmRvbmVMb2NhdGlvbigpCiB7CiAgICAgUkVM
RUFTRV9BU1NFUlQoIWlzRGlyZWN0KCkpOwotICAgIHJldHVybiBDb2RlTG9jYXRpb25EYXRhTGFi
ZWxQdHI8SlNJbnRlcm5hbFB0clRhZz4obV9ob3RQYXRoQmVnaW5PclNsb3dQYXRoU3RhcnQpOwor
ICAgIHJldHVybiBtX2RvbmVMb2NhdGlvbjsKIH0KIAotQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRl
cm5hbFB0clRhZz4gQ2FsbExpbmtJbmZvOjpzbG93UGF0aFN0YXJ0KCkKLXsKLSAgICBSRUxFQVNF
X0FTU0VSVChpc0RpcmVjdCgpKTsKLSAgICByZXR1cm4gbV9ob3RQYXRoQmVnaW5PclNsb3dQYXRo
U3RhcnQ7Ci19Ci0KLXZvaWQgQ2FsbExpbmtJbmZvOjpzZXRDYWxsZWUoVk0mIHZtLCBKU0NlbGwq
IG93bmVyLCBKU09iamVjdCogY2FsbGVlKQordm9pZCBDYWxsTGlua0luZm86OnNldE1vbm9tb3Jw
aGljQ2FsbGVlKFZNJiB2bSwgSlNDZWxsKiBvd25lciwgSlNPYmplY3QqIGNhbGxlZSwgTWFjcm9B
c3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGNvZGVQdHIpCiB7CiAgICAgUkVMRUFTRV9B
U1NFUlQoIWlzRGlyZWN0KCkpOwogICAgIG1fY2FsbGVlT3JDb2RlQmxvY2suc2V0KHZtLCBvd25l
ciwgY2FsbGVlKTsKKworICAgIGlmIChpc0RhdGFJQygpKSAKKyAgICAgICAgdS5kYXRhSUMubV9t
b25vbW9ycGhpY0NhbGxEZXN0aW5hdGlvbiA9IGNvZGVQdHI7CisgICAgZWxzZSB7CisgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoTmVhckNhbGwodS5jb2RlSUMubV9jYWxsTG9jYXRpb24s
IENvZGVMb2NhdGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+KGNvZGVQdHIpKTsKKyAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OnJlcGF0Y2hQb2ludGVyKHUuY29kZUlDLm1fY2FsbGVlTG9jYXRpb24sIGNh
bGxlZSk7CisgICAgfQogfQogCiB2b2lkIENhbGxMaW5rSW5mbzo6Y2xlYXJDYWxsZWUoKQogewog
ICAgIFJFTEVBU0VfQVNTRVJUKCFpc0RpcmVjdCgpKTsKICAgICBtX2NhbGxlZU9yQ29kZUJsb2Nr
LmNsZWFyKCk7CisgICAgaWYgKGlzRGF0YUlDKCkpCisgICAgICAgIHUuZGF0YUlDLm1fbW9ub21v
cnBoaWNDYWxsRGVzdGluYXRpb24gPSBudWxscHRyOworICAgIGVsc2UKKyAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OnJlcGF0Y2hQb2ludGVyKHUuY29kZUlDLm1fY2FsbGVlTG9jYXRpb24sIG51bGxw
dHIpOwogfQogCiBKU09iamVjdCogQ2FsbExpbmtJbmZvOjpjYWxsZWUoKQpAQCAtMjg0LDYgKzI5
NCwyMDYgQEAgdm9pZCBDYWxsTGlua0luZm86OnNldEZyYW1lU2h1ZmZsZURhdGEoYwogICAgIG1f
ZnJhbWVTaHVmZmxlRGF0YS0+c2hyaW5rVG9GaXQoKTsKIH0KIAordm9pZCBDYWxsTGlua0luZm86
OmVtaXRGaXJzdEluc3RydWN0aW9uRm9yRGF0YUlDKENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcg
Y2FsbExpbmtJbmZvR1BSKQoreworICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gaml0LnNjcmF0Y2hS
ZWdpc3RlcigpOworICAgIERpc2FsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBkaXNhbGxv
d1NjcmF0Y2goaml0KTsKKyAgICAvLyBXaGVuIHJlcGF0Y2hpbmcsIHdlIGp1c3Qgb3ZlcndyaXRl
IHRoZSBmaXJzdCBpbnN0cnVjdGlvbiBiYWNrLCBzaW5jZSBpdCdsbCBoYXZlIGJlZW4gcmVwbGFj
ZWQgd2l0aCBhIGp1bXAgdG8gdGhlIHBvbHltb3JwaGljIGNhbGwgc3R1Yi4KKyAgICBzaXplX3Qg
c3RhcnRTaXplID0gaml0Lm1fYXNzZW1ibGVyLmJ1ZmZlcigpLmNvZGVTaXplKCk7CisgICAgaml0
LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGNhbGxMaW5rSW5mb0dQUiwgb2Zmc2V0T2ZD
YWxsZWUoKSksIHNjcmF0Y2hHUFIpOyAKKyAgICBzaXplX3QgbG9hZFNpemUgPSBqaXQubV9hc3Nl
bWJsZXIuYnVmZmVyKCkuY29kZVNpemUoKSAtIHN0YXJ0U2l6ZTsKKyAgICBpZiAobG9hZFNpemUg
PCBzdGF0aWNfY2FzdDxzaXplX3Q+KENDYWxsSGVscGVyczo6cGF0Y2hhYmxlSnVtcFNpemUoKSkp
CisgICAgICAgIGppdC5lbWl0Tm9wcyhzdGF0aWNfY2FzdDxzaXplX3Q+KENDYWxsSGVscGVyczo6
cGF0Y2hhYmxlSnVtcFNpemUoKSkgLSBsb2FkU2l6ZSk7Cit9CisKK01hY3JvQXNzZW1ibGVyOjpK
dW1wTGlzdCBDYWxsTGlua0luZm86OmVtaXRGYXN0UGF0aEltcGwoQ0NhbGxIZWxwZXJzJiBqaXQs
IEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQyB1c2VE
YXRhSUMsIFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpCit7CisgICAg
c2V0VXNlc0RhdGFJQ3ModXNlRGF0YUlDKTsKKyAgICBpZiAoaXNEYXRhSUMoKSkgeworICAgICAg
ICBSRUxFQVNFX0FTU0VSVChjYWxsTGlua0luZm9HUFIgIT0gQ0NhbGxIZWxwZXJzOjpJbnZhbGlk
R1BSUmVnKTsKKyAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHRo
aXMpLCBjYWxsTGlua0luZm9HUFIpOworICAgICAgICB1LmRhdGFJQy5tX2NhbGxMaW5rSW5mb0dQ
UiA9IGNhbGxMaW5rSW5mb0dQUjsKKyAgICB9CisKKyAgICBhdXRvIGZhc3RQYXRoU3RhcnQgPSBq
aXQubGFiZWwoKTsKKyAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVm
ZmVyKSB7CisgICAgICAgIG1fZmFzdFBhdGhTdGFydCA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxK
U0ludGVybmFsUHRyVGFnPihmYXN0UGF0aFN0YXJ0KTsKKyAgICB9KTsKKworICAgIENDYWxsSGVs
cGVyczo6SnVtcExpc3Qgc2xvd1BhdGg7CisKKyAgICBpZiAoaXNEYXRhSUMoKSkgeworICAgICAg
ICBHUFJSZWcgc2NyYXRjaEdQUiA9IGppdC5zY3JhdGNoUmVnaXN0ZXIoKTsKKyAgICAgICAgZW1p
dEZpcnN0SW5zdHJ1Y3Rpb25Gb3JEYXRhSUMoaml0LCBjYWxsTGlua0luZm9HUFIpOworICAgICAg
ICB7CisgICAgICAgICAgICBEaXNhbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgZGlzYWxs
b3dTY3JhdGNoKGppdCk7CisgICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQoaml0LmJyYW5jaFB0
cihDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCBzY3JhdGNoR1BSLCBjYWxsZWVHUFIpKTsKKyAgICAg
ICAgfQorICAgICAgICBpZiAoaXNUYWlsQ2FsbCgpKSB7CisgICAgICAgICAgICBwcmVwYXJlRm9y
VGFpbENhbGwoKTsKKyAgICAgICAgICAgIGppdC5mYXJKdW1wKENDYWxsSGVscGVyczo6QWRkcmVz
cyhjYWxsTGlua0luZm9HUFIsIG9mZnNldE9mTW9ub21vcnBoaWNDYWxsRGVzdGluYXRpb24oKSks
IEpTRW50cnlQdHJUYWcpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGppdC5jYWxsKEND
YWxsSGVscGVyczo6QWRkcmVzcyhjYWxsTGlua0luZm9HUFIsIG9mZnNldE9mTW9ub21vcnBoaWND
YWxsRGVzdGluYXRpb24oKSksIEpTRW50cnlQdHJUYWcpOworICAgIH0gZWxzZSB7CisgICAgICAg
IENDYWxsSGVscGVyczo6RGF0YUxhYmVsUHRyIGNhbGxlZUNoZWNrOworICAgICAgICBzbG93UGF0
aC5hcHBlbmQoaml0LmJyYW5jaFB0cldpdGhQYXRjaChDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCBj
YWxsZWVHUFIsIGNhbGxlZUNoZWNrLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobnVsbHB0
cikpKTsKKworICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2FsbDsKKyAgICAgICAgaWYgKGlz
VGFpbENhbGwoKSkgeworICAgICAgICAgICAgcHJlcGFyZUZvclRhaWxDYWxsKCk7CisgICAgICAg
ICAgICBjYWxsID0gaml0Lm5lYXJUYWlsQ2FsbCgpOworICAgICAgICB9IGVsc2UKKyAgICAgICAg
ICAgIGNhbGwgPSBqaXQubmVhckNhbGwoKTsKKyAgICAgICAgaml0LmFkZExpbmtUYXNrKFs9XSAo
TGlua0J1ZmZlciYgbGlua0J1ZmZlcikgeworICAgICAgICAgICAgdS5jb2RlSUMubV9jYWxsTG9j
YXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxKU0ludGVybmFsUHRyVGFnPihj
YWxsKTsKKyAgICAgICAgICAgIHUuY29kZUlDLm1fY2FsbGVlTG9jYXRpb24gPSBsaW5rQnVmZmVy
LmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oY2FsbGVlQ2hlY2spOworICAgICAgICB9KTsK
KyAgICB9CisKKyAgICByZXR1cm4gc2xvd1BhdGg7Cit9CisKK0NDYWxsSGVscGVyczo6SnVtcExp
c3QgQ2FsbExpbmtJbmZvOjplbWl0RmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBj
YWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQyB1c2VEYXRhSUMpCit7
CisgICAgUkVMRUFTRV9BU1NFUlQoIWlzVGFpbENhbGwoKSk7CisgICAgcmV0dXJuIGVtaXRGYXN0
UGF0aEltcGwoaml0LCBjYWxsZWVHUFIsIGNhbGxMaW5rSW5mb0dQUiwgdXNlRGF0YUlDLCBudWxs
cHRyKTsKK30KKworTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZW1pdFRh
aWxDYWxsRmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJl
ZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQyB1c2VEYXRhSUMsIFdURjo6RnVuY3Rpb248dm9p
ZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoaXNUYWlsQ2Fs
bCgpKTsKKyAgICByZXR1cm4gZW1pdEZhc3RQYXRoSW1wbChqaXQsIGNhbGxlZUdQUiwgY2FsbExp
bmtJbmZvR1BSLCB1c2VEYXRhSUMsIFdURk1vdmUocHJlcGFyZUZvclRhaWxDYWxsKSk7Cit9CisK
K3ZvaWQgQ2FsbExpbmtJbmZvOjplbWl0U2xvd1BhdGgoVk0mIHZtLCBDQ2FsbEhlbHBlcnMmIGpp
dCkKK3sKKyAgICBzZXRTbG93UGF0aENhbGxEZXN0aW5hdGlvbih2bS5nZXRDVElTdHViKGxpbmtD
YWxsVGh1bmtHZW5lcmF0b3IpLnRlbXBsYXRlIHJldGFnZ2VkQ29kZTxKU0VudHJ5UHRyVGFnPigp
KTsKKyAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIodGhpcyksIEdQUklu
Zm86OnJlZ1QyKTsKKyAgICBqaXQuY2FsbChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6
cmVnVDIsIG9mZnNldE9mU2xvd1BhdGhDYWxsRGVzdGluYXRpb24oKSksIEpTRW50cnlQdHJUYWcp
OworfQorCit2b2lkIENhbGxMaW5rSW5mbzo6ZW1pdERpcmVjdEZhc3RQYXRoKENDYWxsSGVscGVy
cyYgaml0KQoreworICAgIFJFTEVBU0VfQVNTRVJUKCFpc1RhaWxDYWxsKCkpOworCisgICAgc2V0
VXNlc0RhdGFJQ3MoVXNlRGF0YUlDOjpObyk7CisKKyAgICBhdXRvIGZhc3RQYXRoU3RhcnQgPSBq
aXQubGFiZWwoKTsKKyAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVm
ZmVyKSB7CisgICAgICAgIG1fZmFzdFBhdGhTdGFydCA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxK
U0ludGVybmFsUHRyVGFnPihmYXN0UGF0aFN0YXJ0KTsKKyAgICB9KTsKKworICAgIGF1dG8gY2Fs
bCA9IGppdC5uZWFyQ2FsbCgpOworICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXIm
IGxpbmtCdWZmZXIpIHsKKyAgICAgICAgdS5jb2RlSUMubV9jYWxsTG9jYXRpb24gPSBsaW5rQnVm
ZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxKU0ludGVybmFsUHRyVGFnPihjYWxsKTsKKyAgICB9KTsK
KyAgICBqaXQuYWRkTGF0ZUxpbmtUYXNrKFt0aGlzXSAoTGlua0J1ZmZlciYpIHsKKyAgICAgICAg
aW5pdGlhbGl6ZURpcmVjdENhbGwoKTsKKyAgICB9KTsKK30KKwordm9pZCBDYWxsTGlua0luZm86
OmVtaXREaXJlY3RUYWlsQ2FsbEZhc3RQYXRoKENDYWxsSGVscGVycyYgaml0LCBXVEY6OkZ1bmN0
aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKQoreworICAgIFJFTEVBU0VfQVNTRVJUKGlz
VGFpbENhbGwoKSk7CisKKyAgICBzZXRVc2VzRGF0YUlDcyhVc2VEYXRhSUM6Ok5vKTsKKworICAg
IGF1dG8gZmFzdFBhdGhTdGFydCA9IGppdC5sYWJlbCgpOworICAgIGppdC5hZGRMaW5rVGFzayhb
PV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgbV9mYXN0UGF0aFN0YXJ0ID0g
bGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KGZhc3RQYXRoU3RhcnQpOwor
ICAgIH0pOworCisgICAgLy8gLSBJZiB3ZSdyZSBub3QgeWV0IGxpbmtlZCwgdGhpcyBpcyBhIGp1
bXAgdG8gdGhlIHNsb3cgcGF0aC4KKyAgICAvLyAtIE9uY2Ugd2UncmUgbGlua2VkIHRvIGEgZmFz
dCBwYXRoLCB0aGlzIGdvZXMgYmFjayB0byBiZWluZyBub3BzIHNvIHdlIGZhbGwgdGhyb3VnaCB0
byB0aGUgbGlua2VkIGp1bXAuCisgICAgaml0LmVtaXROb3BzKENDYWxsSGVscGVyczo6cGF0Y2hh
YmxlSnVtcFNpemUoKSk7CisKKyAgICBwcmVwYXJlRm9yVGFpbENhbGwoKTsKKyAgICBhdXRvIGNh
bGwgPSBqaXQubmVhclRhaWxDYWxsKCk7CisgICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1
ZmZlciYgbGlua0J1ZmZlcikgeworICAgICAgICB1LmNvZGVJQy5tX2NhbGxMb2NhdGlvbiA9IGxp
bmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPEpTSW50ZXJuYWxQdHJUYWc+KGNhbGwpOworICAg
IH0pOworICAgIGppdC5hZGRMYXRlTGlua1Rhc2soW3RoaXNdIChMaW5rQnVmZmVyJikgeworICAg
ICAgICBpbml0aWFsaXplRGlyZWN0Q2FsbCgpOworICAgIH0pOworfQorCit2b2lkIENhbGxMaW5r
SW5mbzo6aW5pdGlhbGl6ZURpcmVjdENhbGwoKQoreworICAgIFJFTEVBU0VfQVNTRVJUKGlzRGly
ZWN0KCkpOworICAgIEFTU0VSVCh1LmNvZGVJQy5tX2NhbGxMb2NhdGlvbik7CisgICAgaWYgKGlz
VGFpbENhbGwoKSkgeworICAgICAgICBSRUxFQVNFX0FTU0VSVChmYXN0UGF0aFN0YXJ0KCkpOwor
ICAgICAgICBDQ2FsbEhlbHBlcnM6OmVtaXRKSVRDb2RlT3ZlcihmYXN0UGF0aFN0YXJ0KCksIFsm
XSAoQ0NhbGxIZWxwZXJzJiBqaXQpIHsKKyAgICAgICAgICAgIGF1dG8ganVtcCA9IGppdC5qdW1w
KCk7CisgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVm
ZmVyKSB7CisgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKGp1bXAsIHNsb3dQYXRoU3Rh
cnQoKSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSwgImluaXRpYWxpemUgZGlyZWN0IGNh
bGwiKTsKKyAgICB9IGVsc2UKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hOZWFyQ2Fs
bCh1LmNvZGVJQy5tX2NhbGxMb2NhdGlvbiwgc2xvd1BhdGhTdGFydCgpKTsKK30KKwordm9pZCBD
YWxsTGlua0luZm86OnNldERpcmVjdENhbGxUYXJnZXQoQ29kZUxvY2F0aW9uTGFiZWw8SlNFbnRy
eVB0clRhZz4gdGFyZ2V0KQoreworICAgIFJFTEVBU0VfQVNTRVJUKGlzRGlyZWN0KCkpOworCisg
ICAgaWYgKGlzVGFpbENhbGwoKSkgeworICAgICAgICBSRUxFQVNFX0FTU0VSVChmYXN0UGF0aFN0
YXJ0KCkpOworICAgICAgICBDQ2FsbEhlbHBlcnM6OmVtaXRKSVRDb2RlT3ZlcihmYXN0UGF0aFN0
YXJ0KCksIFsmXSAoQ0NhbGxIZWxwZXJzJiBqaXQpIHsKKyAgICAgICAgICAgIC8vIFdlIHJlc2Vy
dmVkIHRoaXMgbWFueSBieXRlcyBmb3IgdGhlIGp1bXAgYXQgZmFzdFBhdGhTdGFydCgpLiBNYWtl
IHRoYXQKKyAgICAgICAgICAgIC8vIGNvZGUgbm9wcyBub3cgc28gd2UgZmFsbCB0aHJvdWdoIHRv
IHRoZSBqdW1wIHRvIHRoZSBmYXN0IHBhdGguCisgICAgICAgICAgICBqaXQuZW1pdE5vcHMoQ0Nh
bGxIZWxwZXJzOjpwYXRjaGFibGVKdW1wU2l6ZSgpKTsgCisgICAgICAgIH0sICJTZXR0aW5nIGRp
cmVjdCBjYWxsIHRhcmdldCIpOworICAgIH0KKworICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNo
TmVhckNhbGwodS5jb2RlSUMubV9jYWxsTG9jYXRpb24sIHRhcmdldCk7Cit9CisKK3ZvaWQgQ2Fs
bExpbmtJbmZvOjpzZXRTbG93UGF0aENhbGxEZXN0aW5hdGlvbihNYWNyb0Fzc2VtYmxlckNvZGVQ
dHI8SlNFbnRyeVB0clRhZz4gY29kZVB0cikKK3sKKyAgICBtX3Nsb3dQYXRoQ2FsbERlc3RpbmF0
aW9uID0gY29kZVB0cjsKK30KKwordm9pZCBDYWxsTGlua0luZm86OnJldmVydENhbGxUb1N0dWIo
KQoreworICAgIFJFTEVBU0VfQVNTRVJUKHN0dWIoKSk7CisgICAgLy8gVGhlIHN0YXJ0IG9mIG91
ciBKSVQgY29kZSBpcyBub3cgYSBqdW1wIHRvIHRoZSBwb2x5bW9ycGhpYyBzdHViLiBSZXdyaXRl
IHRoZSBmaXJzdCBpbnN0cnVjdGlvbgorICAgIC8vIHRvIGJlIHdoYXQgd2UgbmVlZCBmb3Igbm9u
IHN0dWIgSUNzLgorCisgICAgLy8gdGhpcyBydW5zIGludG8gc29tZSBicmFuY2ggY29tcGFjdGlv
biBjcmFwIEknZCBsaWtlIHRvIGF2b2lkIGZvciBub3cuIEVzc2VudGlhbGx5LCB0aGUgYnJhbmNo
CisgICAgLy8gZG9lc24ndCBrbm93IGlmIGl0IGNhbiBiZSBjb21wYWN0ZWQgb3Igbm90LiBTbyB3
ZSBlbmQgdXAgd2l0aCAyOCBieXRlcyBvZiBtYWNoaW5lIGNvZGUsIGZvcgorICAgIC8vIHdoYXQg
aW4gYWxsIGxpa2VsaWhvb2QgZml0cyBpbiAyNC4gU28gd2UganVzdCBzcGxhdCBvdXQgdGhlIGZp
cnN0IGluc3RydWN0aW9uLiBMb25nIHRlcm0sIHdlCisgICAgLy8gbmVlZCBzb21ldGhpbmcgY2xl
YW5lci4gQnV0IHRoaXMgd29ya3Mgb24gYXJtNjQgZm9yIG5vdy4KKworICAgIENDYWxsSGVscGVy
czo6ZW1pdEpJVENvZGVPdmVyKGZhc3RQYXRoU3RhcnQoKSwgWyZdIChDQ2FsbEhlbHBlcnMmIGpp
dCkgeworICAgICAgICBpZiAoaXNEYXRhSUMoKSkKKyAgICAgICAgICAgIGVtaXRGaXJzdEluc3Ry
dWN0aW9uRm9yRGF0YUlDKGppdCwgdS5kYXRhSUMubV9jYWxsTGlua0luZm9HUFIpOworICAgICAg
ICBlbHNlIHsKKyAgICAgICAgICAgIENDYWxsSGVscGVyczo6cmV2ZXJ0SnVtcFJlcGxhY2VtZW50
VG9CcmFuY2hQdHJXaXRoUGF0Y2goCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpzdGFy
dE9mQnJhbmNoUHRyV2l0aFBhdGNoT25SZWdpc3Rlcih1LmNvZGVJQy5tX2NhbGxlZUxvY2F0aW9u
KSwgY2FsbGVlR1BSKCksIG51bGxwdHIpOworICAgICAgICB9CisgICAgfSwgICJSZXNldHRpbmcg
UG9seW1vcnBoaWNDYWxsIHN0dWJiZWQgQ2FsbExpbmtJbmZvIik7Cit9CisKK3ZvaWQgQ2FsbExp
bmtJbmZvOjpzZXRTdHViKFJlZjxQb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZT4mJiBuZXdTdHVi
KQoreworICAgIGNsZWFyU3R1YigpOworICAgIG1fc3R1YiA9IFdURk1vdmUobmV3U3R1Yik7CisK
KyAgICBpZiAoaXNEYXRhSUMoKSkgeworICAgICAgICBDQ2FsbEhlbHBlcnM6OmVtaXRKSVRDb2Rl
T3ZlcihmYXN0UGF0aFN0YXJ0KCksIFsmXSAoQ0NhbGxIZWxwZXJzJiBqaXQpIHsKKyAgICAgICAg
ICAgIGF1dG8ganVtcCA9IGppdC5qdW1wKCk7CisgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2so
Wz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgICAgICAgICAgICAgbGlua0J1ZmZl
ci5saW5rKGp1bXAsIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihtX3N0
dWItPmNvZGUoKS5jb2RlKCkpKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9LCAiUGF0Y2hp
bmcgY2FsbCB0byBQb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZSBpbiBDYWxsTGlua0luZm8iKTsK
KyAgICB9IGVsc2UgeworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwbGFjZVdpdGhKdW1wKAor
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnN0YXJ0T2ZCcmFuY2hQdHJXaXRoUGF0Y2hPblJl
Z2lzdGVyKHUuY29kZUlDLm1fY2FsbGVlTG9jYXRpb24pLAorICAgICAgICAgICAgQ29kZUxvY2F0
aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+KG1fc3R1Yi0+Y29kZSgpLmNvZGUoKSkpOwor
ICAgIH0KK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uaAko
cmV2aXNpb24gMjc2OTc3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxM
aW5rSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwxMiArMzAsMTQgQEAKICNpbmNsdWRlICJD
b2RlU3BlY2lhbGl6YXRpb25LaW5kLmgiCiAjaW5jbHVkZSAiUG9seW1vcnBoaWNDYWxsU3R1YlJv
dXRpbmUuaCIKICNpbmNsdWRlICJXcml0ZUJhcnJpZXIuaCIKKyNpbmNsdWRlIDx3dGYvRnVuY3Rp
b24uaD4KICNpbmNsdWRlIDx3dGYvU2VudGluZWxMaW5rZWRMaXN0Lmg+CiAKIG5hbWVzcGFjZSBK
U0MgewogCiAjaWYgRU5BQkxFKEpJVCkKIAorY2xhc3MgQ0NhbGxIZWxwZXJzOwogY2xhc3MgRnVu
Y3Rpb25Db2RlQmxvY2s7CiBjbGFzcyBKU0Z1bmN0aW9uOwogZW51bSBPcGNvZGVJRCA6IHVuc2ln
bmVkOwpAQCAtMTYzLDE2ICsxNjUsMzggQEAgcHVibGljOgogICAgICAgICBtX2NhbGxlZUdQUiA9
IGNhbGxlZUdQUjsKICAgICB9CiAKLSAgICB2b2lkIHNldENhbGxMb2NhdGlvbnMoCi0gICAgICAg
IENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IGNhbGxSZXR1cm5Mb2NhdGlvbk9y
UGF0Y2hhYmxlSnVtcCwKLSAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRh
Zz4gaG90UGF0aEJlZ2luT3JTbG93UGF0aFN0YXJ0LAotICAgICAgICBDb2RlTG9jYXRpb25OZWFy
Q2FsbDxKU0ludGVybmFsUHRyVGFnPiBob3RQYXRoT3RoZXIpCi0gICAgewotICAgICAgICBtX2Nh
bGxSZXR1cm5Mb2NhdGlvbk9yUGF0Y2hhYmxlSnVtcCA9IGNhbGxSZXR1cm5Mb2NhdGlvbk9yUGF0
Y2hhYmxlSnVtcDsKLSAgICAgICAgbV9ob3RQYXRoQmVnaW5PclNsb3dQYXRoU3RhcnQgPSBob3RQ
YXRoQmVnaW5PclNsb3dQYXRoU3RhcnQ7Ci0gICAgICAgIG1faG90UGF0aE90aGVyID0gaG90UGF0
aE90aGVyOworICAgIEdQUlJlZyBjYWxsZWVHUFIoKSBjb25zdCB7IHJldHVybiBtX2NhbGxlZUdQ
UjsgfQorICAgIAorICAgIGVudW0gY2xhc3MgVXNlRGF0YUlDIDogdWludDhfdCB7CisgICAgICAg
IFllcywKKyAgICAgICAgTm8KKyAgICB9OworCitwcml2YXRlOgorICAgIHZvaWQgZW1pdEZpcnN0
SW5zdHJ1Y3Rpb25Gb3JEYXRhSUMoQ0NhbGxIZWxwZXJzJiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQ
Uik7CisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGVtaXRGYXN0UGF0aEltcGwoQ0NhbGxI
ZWxwZXJzJiwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0
YUlDLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKSBXQVJOX1VOVVNF
RF9SRVRVUk47CitwdWJsaWM6CisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGVtaXRGYXN0
UGF0aChDQ2FsbEhlbHBlcnMmLCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZv
R1BSLCBVc2VEYXRhSUMpIFdBUk5fVU5VU0VEX1JFVFVSTjsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6
SnVtcExpc3QgZW1pdFRhaWxDYWxsRmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiwgR1BSUmVnIGNhbGxl
ZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDLCBXVEY6OkZ1bmN0aW9uPHZv
aWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKSBXQVJOX1VOVVNFRF9SRVRVUk47CisgICAgdm9pZCBl
bWl0RGlyZWN0RmFzdFBhdGgoQ0NhbGxIZWxwZXJzJik7CisgICAgdm9pZCBlbWl0RGlyZWN0VGFp
bENhbGxGYXN0UGF0aChDQ2FsbEhlbHBlcnMmLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFy
ZUZvclRhaWxDYWxsKTsKKyAgICB2b2lkIGVtaXRTbG93UGF0aChWTSYsIENDYWxsSGVscGVycyYp
OworICAgIHZvaWQgcmV2ZXJ0Q2FsbFRvU3R1YigpOworCisgICAgYm9vbCBpc0RhdGFJQygpIGNv
bnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFVzZURhdGFJQz4obV91c2VEYXRhSUMpID09IFVzZURh
dGFJQzo6WWVzOyB9CisgICAgdm9pZCBzZXRVc2VzRGF0YUlDcyhVc2VEYXRhSUMgdXNlRGF0YUlD
KSB7IG1fdXNlRGF0YUlDID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHVzZURhdGFJQyk7IH0KKwor
ICAgIHZvaWQgc2V0Q29kZUxvY2F0aW9ucygKKyAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJ
bnRlcm5hbFB0clRhZz4gc2xvd1BhdGhTdGFydCwKKyAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8
SlNJbnRlcm5hbFB0clRhZz4gZG9uZUxvY2F0aW9uKQorICAgIHsKKyAgICAgICAgaWYgKCFpc0Rh
dGFJQygpKQorICAgICAgICAgICAgdS5jb2RlSUMubV9zbG93UGF0aFN0YXJ0ID0gc2xvd1BhdGhT
dGFydDsKKyAgICAgICAgbV9kb25lTG9jYXRpb24gPSBkb25lTG9jYXRpb247CiAgICAgfQogCisg
ICAgdm9pZCBpbml0aWFsaXplRGlyZWN0Q2FsbCgpOworCiAgICAgYm9vbCBhbGxvd1N0dWJzKCkg
Y29uc3QgeyByZXR1cm4gbV9hbGxvd1N0dWJzOyB9CiAKICAgICB2b2lkIGRpc2FsbG93U3R1YnMo
KQpAQCAtMTgwLDIzICsyMDQsMTkgQEAgcHVibGljOgogICAgICAgICBtX2FsbG93U3R1YnMgPSBm
YWxzZTsKICAgICB9CiAKLSAgICBDb2RlTG9jYXRpb25OZWFyQ2FsbDxKU0ludGVybmFsUHRyVGFn
PiBjYWxsUmV0dXJuTG9jYXRpb24oKTsKLSAgICBDb2RlTG9jYXRpb25KdW1wPEpTSW50ZXJuYWxQ
dHJUYWc+IHBhdGNoYWJsZUp1bXAoKTsKLSAgICBDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHI8SlNJ
bnRlcm5hbFB0clRhZz4gaG90UGF0aEJlZ2luKCk7CisgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJ
bnRlcm5hbFB0clRhZz4gZmFzdFBhdGhTdGFydCgpOwogICAgIENvZGVMb2NhdGlvbkxhYmVsPEpT
SW50ZXJuYWxQdHJUYWc+IHNsb3dQYXRoU3RhcnQoKTsKKyAgICBDb2RlTG9jYXRpb25MYWJlbDxK
U0ludGVybmFsUHRyVGFnPiBkb25lTG9jYXRpb24oKTsKIAotICAgIENvZGVMb2NhdGlvbk5lYXJD
YWxsPEpTSW50ZXJuYWxQdHJUYWc+IGhvdFBhdGhPdGhlcigpCi0gICAgewotICAgICAgICByZXR1
cm4gbV9ob3RQYXRoT3RoZXI7Ci0gICAgfQotCi0gICAgdm9pZCBzZXRDYWxsZWUoVk0mLCBKU0Nl
bGwqLCBKU09iamVjdCogY2FsbGVlKTsKKyAgICB2b2lkIHNldE1vbm9tb3JwaGljQ2FsbGVlKFZN
JiwgSlNDZWxsKiwgSlNPYmplY3QqIGNhbGxlZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50
cnlQdHJUYWc+KTsKKyAgICB2b2lkIHNldFNsb3dQYXRoQ2FsbERlc3RpbmF0aW9uKE1hY3JvQXNz
ZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPik7CiAgICAgdm9pZCBjbGVhckNhbGxlZSgpOwog
ICAgIEpTT2JqZWN0KiBjYWxsZWUoKTsKIAogICAgIHZvaWQgc2V0Q29kZUJsb2NrKFZNJiwgSlND
ZWxsKiwgRnVuY3Rpb25Db2RlQmxvY2sqKTsKICAgICB2b2lkIGNsZWFyQ29kZUJsb2NrKCk7CiAg
ICAgRnVuY3Rpb25Db2RlQmxvY2sqIGNvZGVCbG9jaygpOworICAgIHZvaWQgc2V0RGlyZWN0Q2Fs
bFRhcmdldChDb2RlTG9jYXRpb25MYWJlbDxKU0VudHJ5UHRyVGFnPik7CiAKICAgICB2b2lkIHNl
dExhc3RTZWVuQ2FsbGVlKFZNJiwgY29uc3QgSlNDZWxsKiBvd25lciwgSlNPYmplY3QqIGNhbGxl
ZSk7CiAgICAgdm9pZCBjbGVhckxhc3RTZWVuQ2FsbGVlKCk7CkBAIC0yMDYsMTIgKzIyNiw3IEBA
IHB1YmxpYzoKICAgICB2b2lkIHNldEV4ZWN1dGFibGVEdXJpbmdDb21waWxhdGlvbihFeGVjdXRh
YmxlQmFzZSopOwogICAgIEV4ZWN1dGFibGVCYXNlKiBleGVjdXRhYmxlKCk7CiAgICAgCi0gICAg
dm9pZCBzZXRTdHViKFJlZjxQb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZT4mJiBuZXdTdHViKQot
ICAgIHsKLSAgICAgICAgY2xlYXJTdHViKCk7Ci0gICAgICAgIG1fc3R1YiA9IFdURk1vdmUobmV3
U3R1Yik7Ci0gICAgfQotCisgICAgdm9pZCBzZXRTdHViKFJlZjxQb2x5bW9ycGhpY0NhbGxTdHVi
Um91dGluZT4mJik7CiAgICAgdm9pZCBjbGVhclN0dWIoKTsKIAogICAgIFBvbHltb3JwaGljQ2Fs
bFN0dWJSb3V0aW5lKiBzdHViKCkgY29uc3QKQEAgLTMxMSw2ICszMjYsMjEgQEAgcHVibGljOgog
ICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENhbGxMaW5rSW5mbywgbV9zbG93UGF0aENv
dW50KTsKICAgICB9CiAKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQ2FsbGVlKCkKKyAg
ICB7CisgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ2FsbExpbmtJbmZvLCBtX2NhbGxl
ZU9yQ29kZUJsb2NrKTsKKyAgICB9CisKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTW9u
b21vcnBoaWNDYWxsRGVzdGluYXRpb24oKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE9CSkVDVF9P
RkZTRVRPRihDYWxsTGlua0luZm8sIHUpICsgT0JKRUNUX09GRlNFVE9GKFVuaW9uVHlwZSwgZGF0
YUlDLm1fbW9ub21vcnBoaWNDYWxsRGVzdGluYXRpb24pOworICAgIH0KKworICAgIHN0YXRpYyBw
dHJkaWZmX3Qgb2Zmc2V0T2ZTbG93UGF0aENhbGxEZXN0aW5hdGlvbigpCisgICAgeworICAgICAg
ICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENhbGxMaW5rSW5mbywgbV9zbG93UGF0aENhbGxEZXN0
aW5hdGlvbik7CisgICAgfQorCiAgICAgR1BSUmVnIGNhbGxlZUdQUigpCiAgICAgewogICAgICAg
ICByZXR1cm4gbV9jYWxsZWVHUFI7CkBAIC0zNTIsMTAgKzM4MiwyNSBAQCBwdWJsaWM6CiAgICAg
fQogCiBwcml2YXRlOgotICAgIHVpbnQzMl90IG1fbWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXMgeyAwIH07IC8vIEZvciB2YXJhcmdzOiB0aGUgcHJvZmlsZWQgbWF4aW11bSBudW1iZXIgb2Yg
YXJndW1lbnRzLiBGb3IgZGlyZWN0OiB0aGUgbnVtYmVyIG9mIHN0YWNrIHNsb3RzIGFsbG9jYXRl
ZCBmb3IgYXJndW1lbnRzLgotICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+
IG1fY2FsbFJldHVybkxvY2F0aW9uT3JQYXRjaGFibGVKdW1wOwotICAgIENvZGVMb2NhdGlvbkxh
YmVsPEpTSW50ZXJuYWxQdHJUYWc+IG1faG90UGF0aEJlZ2luT3JTbG93UGF0aFN0YXJ0OwotICAg
IENvZGVMb2NhdGlvbk5lYXJDYWxsPEpTSW50ZXJuYWxQdHJUYWc+IG1faG90UGF0aE90aGVyOwor
ICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IG1fZmFzdFBhdGhTdGFydDsK
KyAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBtX2RvbmVMb2NhdGlvbjsK
KyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gbV9zbG93UGF0aENhbGxE
ZXN0aW5hdGlvbjsKKyAgICB1bmlvbiBVbmlvblR5cGUgeworICAgICAgICBVbmlvblR5cGUoKSAK
KyAgICAgICAgICAgIDogZGF0YUlDIHsgbnVsbHB0ciwgSW52YWxpZEdQUlJlZyB9CisgICAgICAg
IHsgfQorICAgICAgICBzdHJ1Y3QgRGF0YUlDIHsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
Q29kZVB0cjxKU0VudHJ5UHRyVGFnPiBtX21vbm9tb3JwaGljQ2FsbERlc3RpbmF0aW9uOworICAg
ICAgICAgICAgR1BSUmVnIG1fY2FsbExpbmtJbmZvR1BSOworICAgICAgICB9IGRhdGFJQzsKKwor
ICAgICAgICBzdHJ1Y3QgeworICAgICAgICAgICAgQ29kZUxvY2F0aW9uTmVhckNhbGw8SlNJbnRl
cm5hbFB0clRhZz4gbV9jYWxsTG9jYXRpb247CisgICAgICAgICAgICBDb2RlTG9jYXRpb25EYXRh
TGFiZWxQdHI8SlNJbnRlcm5hbFB0clRhZz4gbV9jYWxsZWVMb2NhdGlvbjsKKyAgICAgICAgICAg
IENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IG1fc2xvd1BhdGhTdGFydDsKKyAg
ICAgICAgfSBjb2RlSUM7CisgICAgfSB1OworCiAgICAgV3JpdGVCYXJyaWVyPEpTQ2VsbD4gbV9j
YWxsZWVPckNvZGVCbG9jazsKICAgICBXcml0ZUJhcnJpZXI8SlNDZWxsPiBtX2xhc3RTZWVuQ2Fs
bGVlT3JFeGVjdXRhYmxlOwogICAgIFJlZlB0cjxQb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZT4g
bV9zdHViOwpAQCAtMzY5LDggKzQxNCwxMCBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9hbGxvd1N0
dWJzIDogMTsKICAgICBib29sIG1fY2xlYXJlZEJ5SmV0dGlzb24gOiAxOwogICAgIHVuc2lnbmVk
IG1fY2FsbFR5cGUgOiA0OyAvLyBDYWxsVHlwZQorICAgIHVuc2lnbmVkIG1fdXNlRGF0YUlDIDog
MTsgLy8gVXNlRGF0YUlDCiAgICAgR1BSUmVnIG1fY2FsbGVlR1BSIHsgSW52YWxpZEdQUlJlZyB9
OwogICAgIHVpbnQzMl90IG1fc2xvd1BhdGhDb3VudCB7IDAgfTsKKyAgICB1aW50MzJfdCBtX21h
eEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIHsgMCB9OyAvLyBGb3IgdmFyYXJnczogdGhlIHBy
b2ZpbGVkIG1heGltdW0gbnVtYmVyIG9mIGFyZ3VtZW50cy4gRm9yIGRpcmVjdDogdGhlIG51bWJl
ciBvZiBzdGFjayBzbG90cyBhbGxvY2F0ZWQgZm9yIGFyZ3VtZW50cy4KIH07CiAKIGlubGluZSBD
b2RlT3JpZ2luIGdldENhbGxMaW5rSW5mb0NvZGVPcmlnaW4oQ2FsbExpbmtJbmZvJiBjYWxsTGlu
a0luZm8pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVy
LmNwcAkocmV2aXNpb24gMjc2OTc3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdK
SVRDb21waWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1NSwzMSArMjU1LDE4IEBAIHZvaWQg
SklUQ29tcGlsZXI6OmxpbmsoTGlua0J1ZmZlciYgbGlua0IKICAgICBmaW5hbGl6ZUlubGluZUNh
Y2hlcyhtX2luc3RhbmNlT2ZzLCBsaW5rQnVmZmVyKTsKICAgICBmaW5hbGl6ZUlubGluZUNhY2hl
cyhtX3ByaXZhdGVCcmFuZEFjY2Vzc2VzLCBsaW5rQnVmZmVyKTsKIAotICAgIGF1dG8gbGlua0Nh
bGxUaHVuayA9IEZ1bmN0aW9uUHRyPE5vUHRyVGFnPih2bSgpLmdldENUSVN0dWIobGlua0NhbGxU
aHVua0dlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICAgICBmb3IgKGF1dG8m
IHJlY29yZCA6IG1fanNDYWxscykgewogICAgICAgICBDYWxsTGlua0luZm8mIGluZm8gPSAqcmVj
b3JkLmluZm87Ci0gICAgICAgIGxpbmtCdWZmZXIubGluayhyZWNvcmQuc2xvd0NhbGwsIGxpbmtD
YWxsVGh1bmspOwotICAgICAgICBpbmZvLnNldENhbGxMb2NhdGlvbnMoCi0gICAgICAgICAgICBD
b2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPihsaW5rQnVmZmVyLmxvY2F0aW9uT2ZO
ZWFyQ2FsbDxKU0ludGVybmFsUHRyVGFnPihyZWNvcmQuc2xvd0NhbGwpKSwKLSAgICAgICAgICAg
IENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+KGxpbmtCdWZmZXIubG9jYXRpb25P
ZjxKU0ludGVybmFsUHRyVGFnPihyZWNvcmQudGFyZ2V0VG9DaGVjaykpLAotICAgICAgICAgICAg
bGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8SlNJbnRlcm5hbFB0clRhZz4ocmVjb3JkLmZh
c3RDYWxsKSk7CisgICAgICAgIGluZm8uc2V0Q29kZUxvY2F0aW9ucygKKyAgICAgICAgICAgIGxp
bmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihyZWNvcmQuc2xvd1BhdGhTdGFy
dCksCisgICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4o
cmVjb3JkLmRvbmVMb2NhdGlvbikpOwogICAgIH0KICAgICAKICAgICBmb3IgKEpTRGlyZWN0Q2Fs
bFJlY29yZCYgcmVjb3JkIDogbV9qc0RpcmVjdENhbGxzKSB7CiAgICAgICAgIENhbGxMaW5rSW5m
byYgaW5mbyA9ICpyZWNvcmQuaW5mbzsKLSAgICAgICAgbGlua0J1ZmZlci5saW5rKHJlY29yZC5j
YWxsLCBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8Tm9QdHJUYWc+KHJlY29yZC5zbG93UGF0aCkpOwot
ICAgICAgICBpbmZvLnNldENhbGxMb2NhdGlvbnMoCi0gICAgICAgICAgICBDb2RlTG9jYXRpb25M
YWJlbDxKU0ludGVybmFsUHRyVGFnPigpLAorICAgICAgICBpbmZvLnNldENvZGVMb2NhdGlvbnMo
CiAgICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4ocmVj
b3JkLnNsb3dQYXRoKSwKLSAgICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxs
PEpTSW50ZXJuYWxQdHJUYWc+KHJlY29yZC5jYWxsKSk7Ci0gICAgfQotICAgIAotICAgIGZvciAo
SlNEaXJlY3RUYWlsQ2FsbFJlY29yZCYgcmVjb3JkIDogbV9qc0RpcmVjdFRhaWxDYWxscykgewot
ICAgICAgICBDYWxsTGlua0luZm8mIGluZm8gPSAqcmVjb3JkLmluZm87Ci0gICAgICAgIGluZm8u
c2V0Q2FsbExvY2F0aW9ucygKLSAgICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0lu
dGVybmFsUHRyVGFnPihyZWNvcmQucGF0Y2hhYmxlSnVtcCksCi0gICAgICAgICAgICBsaW5rQnVm
ZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4ocmVjb3JkLnNsb3dQYXRoKSwKLSAgICAg
ICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPEpTSW50ZXJuYWxQdHJUYWc+KHJl
Y29yZC5jYWxsKSk7CisgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRy
VGFnPigpKTsKICAgICB9CiAgICAgCiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5r
UHRyVGFnPiBvc3JFeGl0VGh1bmsgPSB2bSgpLmdldENUSVN0dWIob3NyRXhpdEdlbmVyYXRpb25U
aHVua0dlbmVyYXRvcik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENv
bXBpbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRD
b21waWxlci5oCShyZXZpc2lvbiAyNzY5NzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0pJVENvbXBpbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTIxOSwxOSArMjE5LDE0IEBAIHB1
YmxpYzoKICAgICAgICAgbV9wcml2YXRlQnJhbmRBY2Nlc3Nlcy5hcHBlbmQoSW5saW5lQ2FjaGVX
cmFwcGVyPEpJVFByaXZhdGVCcmFuZEFjY2Vzc0dlbmVyYXRvcj4oZ2VuLCBzbG93UGF0aCkpOwog
ICAgIH0KIAotICAgIHZvaWQgYWRkSlNDYWxsKENhbGwgZmFzdENhbGwsIENhbGwgc2xvd0NhbGws
IERhdGFMYWJlbFB0ciB0YXJnZXRUb0NoZWNrLCBDYWxsTGlua0luZm8qIGluZm8pCisgICAgdm9p
ZCBhZGRKU0NhbGwoTGFiZWwgc2xvd1BhdGhTdGFydCwgTGFiZWwgZG9uZUxvY2F0aW9uLCBDYWxs
TGlua0luZm8qIGluZm8pCiAgICAgewotICAgICAgICBtX2pzQ2FsbHMuYXBwZW5kKEpTQ2FsbFJl
Y29yZChmYXN0Q2FsbCwgc2xvd0NhbGwsIHRhcmdldFRvQ2hlY2ssIGluZm8pKTsKKyAgICAgICAg
bV9qc0NhbGxzLmFwcGVuZChKU0NhbGxSZWNvcmQoc2xvd1BhdGhTdGFydCwgZG9uZUxvY2F0aW9u
LCBpbmZvKSk7CiAgICAgfQogICAgIAotICAgIHZvaWQgYWRkSlNEaXJlY3RDYWxsKENhbGwgY2Fs
bCwgTGFiZWwgc2xvd1BhdGgsIENhbGxMaW5rSW5mbyogaW5mbykKKyAgICB2b2lkIGFkZEpTRGly
ZWN0Q2FsbChMYWJlbCBzbG93UGF0aCwgQ2FsbExpbmtJbmZvKiBpbmZvKQogICAgIHsKLSAgICAg
ICAgbV9qc0RpcmVjdENhbGxzLmFwcGVuZChKU0RpcmVjdENhbGxSZWNvcmQoY2FsbCwgc2xvd1Bh
dGgsIGluZm8pKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBhZGRKU0RpcmVjdFRhaWxDYWxsKFBh
dGNoYWJsZUp1bXAgcGF0Y2hhYmxlSnVtcCwgQ2FsbCBjYWxsLCBMYWJlbCBzbG93UGF0aCwgQ2Fs
bExpbmtJbmZvKiBpbmZvKQotICAgIHsKLSAgICAgICAgbV9qc0RpcmVjdFRhaWxDYWxscy5hcHBl
bmQoSlNEaXJlY3RUYWlsQ2FsbFJlY29yZChwYXRjaGFibGVKdW1wLCBjYWxsLCBzbG93UGF0aCwg
aW5mbykpOworICAgICAgICBtX2pzRGlyZWN0Q2FsbHMuYXBwZW5kKEpTRGlyZWN0Q2FsbFJlY29y
ZChzbG93UGF0aCwgaW5mbykpOwogICAgIH0KICAgICAKICAgICB2b2lkIGFkZFdlYWtSZWZlcmVu
Y2UoSlNDZWxsKiB0YXJnZXQpCkBAIC0zMjgsNTIgKzMyMywyOCBAQCBwcml2YXRlOgogCiAKICAg
ICBzdHJ1Y3QgSlNDYWxsUmVjb3JkIHsKLSAgICAgICAgSlNDYWxsUmVjb3JkKENhbGwgZmFzdENh
bGwsIENhbGwgc2xvd0NhbGwsIERhdGFMYWJlbFB0ciB0YXJnZXRUb0NoZWNrLCBDYWxsTGlua0lu
Zm8qIGluZm8pCi0gICAgICAgICAgICA6IGZhc3RDYWxsKGZhc3RDYWxsKQotICAgICAgICAgICAg
LCBzbG93Q2FsbChzbG93Q2FsbCkKLSAgICAgICAgICAgICwgdGFyZ2V0VG9DaGVjayh0YXJnZXRU
b0NoZWNrKQorICAgICAgICBKU0NhbGxSZWNvcmQoTGFiZWwgc2xvd1BhdGhTdGFydCwgTGFiZWwg
ZG9uZUxvY2F0aW9uLCBDYWxsTGlua0luZm8qIGluZm8pCisgICAgICAgICAgICA6IHNsb3dQYXRo
U3RhcnQoc2xvd1BhdGhTdGFydCkKKyAgICAgICAgICAgICwgZG9uZUxvY2F0aW9uKGRvbmVMb2Nh
dGlvbikKICAgICAgICAgICAgICwgaW5mbyhpbmZvKQogICAgICAgICB7Ci0gICAgICAgICAgICBB
U1NFUlQoZmFzdENhbGwuaXNGbGFnU2V0KENhbGw6Ok5lYXIpKTsKLSAgICAgICAgICAgIEFTU0VS
VChzbG93Q2FsbC5pc0ZsYWdTZXQoQ2FsbDo6TmVhcikpOwogICAgICAgICB9CiAgICAgICAgIAot
ICAgICAgICBDYWxsIGZhc3RDYWxsOwotICAgICAgICBDYWxsIHNsb3dDYWxsOwotICAgICAgICBE
YXRhTGFiZWxQdHIgdGFyZ2V0VG9DaGVjazsKKyAgICAgICAgTGFiZWwgc2xvd1BhdGhTdGFydDsK
KyAgICAgICAgTGFiZWwgZG9uZUxvY2F0aW9uOwogICAgICAgICBDYWxsTGlua0luZm8qIGluZm87
CiAgICAgfTsKICAgICAKICAgICBzdHJ1Y3QgSlNEaXJlY3RDYWxsUmVjb3JkIHsKLSAgICAgICAg
SlNEaXJlY3RDYWxsUmVjb3JkKENhbGwgY2FsbCwgTGFiZWwgc2xvd1BhdGgsIENhbGxMaW5rSW5m
byogaW5mbykKLSAgICAgICAgICAgIDogY2FsbChjYWxsKQotICAgICAgICAgICAgLCBzbG93UGF0
aChzbG93UGF0aCkKLSAgICAgICAgICAgICwgaW5mbyhpbmZvKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBBU1NFUlQoY2FsbC5pc0ZsYWdTZXQoQ2FsbDo6TmVhcikpOwotICAgICAgICB9Ci0gICAg
ICAgIAotICAgICAgICBDYWxsIGNhbGw7Ci0gICAgICAgIExhYmVsIHNsb3dQYXRoOwotICAgICAg
ICBDYWxsTGlua0luZm8qIGluZm87Ci0gICAgfTsKLSAgICAKLSAgICBzdHJ1Y3QgSlNEaXJlY3RU
YWlsQ2FsbFJlY29yZCB7Ci0gICAgICAgIEpTRGlyZWN0VGFpbENhbGxSZWNvcmQoUGF0Y2hhYmxl
SnVtcCBwYXRjaGFibGVKdW1wLCBDYWxsIGNhbGwsIExhYmVsIHNsb3dQYXRoLCBDYWxsTGlua0lu
Zm8qIGluZm8pCi0gICAgICAgICAgICA6IHBhdGNoYWJsZUp1bXAocGF0Y2hhYmxlSnVtcCkKLSAg
ICAgICAgICAgICwgY2FsbChjYWxsKQotICAgICAgICAgICAgLCBzbG93UGF0aChzbG93UGF0aCkK
KyAgICAgICAgSlNEaXJlY3RDYWxsUmVjb3JkKExhYmVsIHNsb3dQYXRoLCBDYWxsTGlua0luZm8q
IGluZm8pCisgICAgICAgICAgICA6IHNsb3dQYXRoKHNsb3dQYXRoKQogICAgICAgICAgICAgLCBp
bmZvKGluZm8pCiAgICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChjYWxsLmlzRmxhZ1NldChD
YWxsOjpOZWFyKSAmJiBjYWxsLmlzRmxhZ1NldChDYWxsOjpUYWlsKSk7CiAgICAgICAgIH0KICAg
ICAgICAgCi0gICAgICAgIFBhdGNoYWJsZUp1bXAgcGF0Y2hhYmxlSnVtcDsKLSAgICAgICAgQ2Fs
bCBjYWxsOwogICAgICAgICBMYWJlbCBzbG93UGF0aDsKICAgICAgICAgQ2FsbExpbmtJbmZvKiBp
bmZvOwogICAgIH07Ci0KICAgICAKICAgICBWZWN0b3I8SW5saW5lQ2FjaGVXcmFwcGVyPEpJVEdl
dEJ5SWRHZW5lcmF0b3I+LCA0PiBtX2dldEJ5SWRzOwogICAgIFZlY3RvcjxJbmxpbmVDYWNoZVdy
YXBwZXI8SklUR2V0QnlJZFdpdGhUaGlzR2VuZXJhdG9yPiwgND4gbV9nZXRCeUlkc1dpdGhUaGlz
OwpAQCAtMzg2LDcgKzM1Nyw2IEBAIHByaXZhdGU6CiAgICAgVmVjdG9yPElubGluZUNhY2hlV3Jh
cHBlcjxKSVRQcml2YXRlQnJhbmRBY2Nlc3NHZW5lcmF0b3I+LCA0PiBtX3ByaXZhdGVCcmFuZEFj
Y2Vzc2VzOwogICAgIFZlY3RvcjxKU0NhbGxSZWNvcmQsIDQ+IG1fanNDYWxsczsKICAgICBWZWN0
b3I8SlNEaXJlY3RDYWxsUmVjb3JkLCA0PiBtX2pzRGlyZWN0Q2FsbHM7Ci0gICAgVmVjdG9yPEpT
RGlyZWN0VGFpbENhbGxSZWNvcmQsIDQ+IG1fanNEaXJlY3RUYWlsQ2FsbHM7CiAgICAgU2VnbWVu
dGVkVmVjdG9yPE9TUkV4aXRDb21waWxhdGlvbkluZm8sIDQ+IG1fZXhpdENvbXBpbGF0aW9uSW5m
bzsKICAgICBWZWN0b3I8VmVjdG9yPExhYmVsPj4gbV9leGl0U2l0ZUxhYmVsczsKICAgICBWZWN0
b3I8REZHOjpPU1JFbnRyeURhdGE+IG1fb3NyRW50cnk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwCShyZXZp
c2lvbiAyNzY5NzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21w
aWxlckNvbW1vbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwOSw3ICsyMDksNyBAQCBzdGF0aWMg
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUCiAgICAgICAgICAgICAgICAgYmFzZWxp
bmVDb2RlQmxvY2tGb3JDYWxsZXItPmdldENhbGxMaW5rSW5mb0ZvckJ5dGVjb2RlSW5kZXgoY2Fs
bEJ5dGVjb2RlSW5kZXgpOwogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY2FsbExpbmtJbmZv
KTsKIAotICAgICAgICAgICAganVtcFRhcmdldCA9IGNhbGxMaW5rSW5mby0+Y2FsbFJldHVybkxv
Y2F0aW9uKCkucmV0YWdnZWQ8SlNFbnRyeVB0clRhZz4oKTsKKyAgICAgICAgICAgIGp1bXBUYXJn
ZXQgPSBjYWxsTGlua0luZm8tPmRvbmVMb2NhdGlvbigpLnJldGFnZ2VkPEpTRW50cnlQdHJUYWc+
KCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDI3Njk3NykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM2MTYsNyArMzYxNiw3IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25M
aW5rRGkKICAgICAgICAgICAgIGNvZGVQdHIgPSBmdW5jdGlvbkV4ZWN1dGFibGUtPmVudHJ5cG9p
bnRGb3Ioa2luZCwgQXJpdHlDaGVja05vdFJlcXVpcmVkKTsKICAgICB9CiAgICAgCi0gICAgbGlu
a0RpcmVjdEZvcihjYWxsRnJhbWUsICpjYWxsTGlua0luZm8sIGNvZGVCbG9jaywgY29kZVB0cik7
CisgICAgbGlua0RpcmVjdENhbGwoY2FsbEZyYW1lLCAqY2FsbExpbmtJbmZvLCBjb2RlQmxvY2ss
IGNvZGVQdHIpOwogfQogCiBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uVHJpZ2dl
clJlb3B0aW1pemF0aW9uTm93LCB2b2lkLCAoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvZGVCbG9j
ayogb3B0aW1pemVkQ29kZUJsb2NrLCBPU1JFeGl0QmFzZSogZXhpdCkpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlz
aW9uIDI3Njk3NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgzMCwxOCArODMwLDE0IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUKICAgICAgICAgaWYgKGlzVGFpbCkgewogICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlQobm9kZS0+b3AoKSA9PSBEaXJlY3RUYWlsQ2FsbCk7CiAg
ICAgICAgICAgICAKLSAgICAgICAgICAgIEpJVENvbXBpbGVyOjpQYXRjaGFibGVKdW1wIHBhdGNo
YWJsZUp1bXAgPSBtX2ppdC5wYXRjaGFibGVKdW1wKCk7CiAgICAgICAgICAgICBKSVRDb21waWxl
cjo6TGFiZWwgbWFpblBhdGggPSBtX2ppdC5sYWJlbCgpOwotICAgICAgICAgICAgCiAgICAgICAg
ICAgICBtX2ppdC5lbWl0U3RvcmVDYWxsU2l0ZUluZGV4KGNhbGxTaXRlKTsKLSAgICAgICAgICAg
IAotICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRGcmFtZVNodWZmbGVEYXRhKHNodWZmbGVE
YXRhKTsKLSAgICAgICAgICAgIENhbGxGcmFtZVNodWZmbGVyKG1faml0LCBzaHVmZmxlRGF0YSku
cHJlcGFyZUZvclRhaWxDYWxsKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIEpJVENvbXBp
bGVyOjpDYWxsIGNhbGwgPSBtX2ppdC5uZWFyVGFpbENhbGwoKTsKLSAgICAgICAgICAgIAorCisg
ICAgICAgICAgICBjYWxsTGlua0luZm8tPmVtaXREaXJlY3RUYWlsQ2FsbEZhc3RQYXRoKG1faml0
LCBbJl0geworICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0RnJhbWVTaHVmZmxlRGF0
YShzaHVmZmxlRGF0YSk7CisgICAgICAgICAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIobV9qaXQs
IHNodWZmbGVEYXRhKS5wcmVwYXJlRm9yVGFpbENhbGwoKTsKKyAgICAgICAgICAgIH0pOwogICAg
ICAgICAgICAgSklUQ29tcGlsZXI6OkxhYmVsIHNsb3dQYXRoID0gbV9qaXQubGFiZWwoKTsKLSAg
ICAgICAgICAgIHBhdGNoYWJsZUp1bXAubV9qdW1wLmxpbmtUbyhzbG93UGF0aCwgJm1faml0KTsK
ICAgICAgICAgICAgIAogICAgICAgICAgICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMoSW52YWxp
ZEdQUlJlZyk7CiAgICAgICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkxpbmtEaXJlY3RD
YWxsLCBjYWxsTGlua0luZm8sIGNhbGxlZUdQUik7CkBAIC04NTEsMTUgKzg0NywxMyBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlKiBub2RlCiAgICAgICAgICAgICAKICAgICAg
ICAgICAgIHVzZUNoaWxkcmVuKG5vZGUpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBtX2pp
dC5hZGRKU0RpcmVjdFRhaWxDYWxsKHBhdGNoYWJsZUp1bXAsIGNhbGwsIHNsb3dQYXRoLCBjYWxs
TGlua0luZm8pOworICAgICAgICAgICAgbV9qaXQuYWRkSlNEaXJlY3RDYWxsKHNsb3dQYXRoLCBj
YWxsTGlua0luZm8pOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIAog
ICAgICAgICBKSVRDb21waWxlcjo6TGFiZWwgbWFpblBhdGggPSBtX2ppdC5sYWJlbCgpOwotICAg
ICAgICAKICAgICAgICAgbV9qaXQuZW1pdFN0b3JlQ2FsbFNpdGVJbmRleChjYWxsU2l0ZSk7Ci0g
ICAgICAgIAotICAgICAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsID0gbV9qaXQubmVhckNhbGwo
KTsKKyAgICAgICAgY2FsbExpbmtJbmZvLT5lbWl0RGlyZWN0RmFzdFBhdGgobV9qaXQpOwogICAg
ICAgICBKSVRDb21waWxlcjo6SnVtcCBkb25lID0gbV9qaXQuanVtcCgpOwogICAgICAgICAKICAg
ICAgICAgSklUQ29tcGlsZXI6OkxhYmVsIHNsb3dQYXRoID0gbV9qaXQubGFiZWwoKTsKQEAgLTg3
NCwzMCArODY4LDI5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUK
ICAgICAgICAgCiAgICAgICAgIHNldFJlc3VsdEFuZFJlc2V0U3RhY2soKTsKICAgICAgICAgCi0g
ICAgICAgIG1faml0LmFkZEpTRGlyZWN0Q2FsbChjYWxsLCBzbG93UGF0aCwgY2FsbExpbmtJbmZv
KTsKKyAgICAgICAgbV9qaXQuYWRkSlNEaXJlY3RDYWxsKHNsb3dQYXRoLCBjYWxsTGlua0luZm8p
OwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAogICAgIG1faml0LmVtaXRTdG9yZUNhbGxT
aXRlSW5kZXgoY2FsbFNpdGUpOwogICAgIAotICAgIEpJVENvbXBpbGVyOjpEYXRhTGFiZWxQdHIg
dGFyZ2V0VG9DaGVjazsKLSAgICBKSVRDb21waWxlcjo6SnVtcCBzbG93UGF0aCA9IG1faml0LmJy
YW5jaFB0cldpdGhQYXRjaChNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIGNhbGxlZUdQUiwgdGFy
Z2V0VG9DaGVjaywgVHJ1c3RlZEltbVB0cihudWxscHRyKSk7Ci0KKyAgICBDQ2FsbEhlbHBlcnM6
Okp1bXBMaXN0IHNsb3dDYXNlczsKICAgICBpZiAoaXNUYWlsKSB7Ci0gICAgICAgIGlmIChub2Rl
LT5vcCgpID09IFRhaWxDYWxsKSB7Ci0gICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldEZyYW1l
U2h1ZmZsZURhdGEoc2h1ZmZsZURhdGEpOwotICAgICAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIo
bV9qaXQsIHNodWZmbGVEYXRhKS5wcmVwYXJlRm9yVGFpbENhbGwoKTsKLSAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgIG1faml0LmVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKLSAgICAgICAg
ICAgIG1faml0LnByZXBhcmVGb3JUYWlsQ2FsbFNsb3coKTsKLSAgICAgICAgfQotICAgIH0KLQot
ICAgIEpJVENvbXBpbGVyOjpDYWxsIGZhc3RDYWxsID0gaXNUYWlsID8gbV9qaXQubmVhclRhaWxD
YWxsKCkgOiBtX2ppdC5uZWFyQ2FsbCgpOwotCisgICAgICAgIHNsb3dDYXNlcyA9IGNhbGxMaW5r
SW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgobV9qaXQsIGNhbGxlZUdQUiwgSW52YWxpZEdQUlJl
ZywgQ2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6Ok5vLCBbJl0geworICAgICAgICAgICAgaWYgKG5v
ZGUtPm9wKCkgPT0gVGFpbENhbGwpIHsKKyAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNl
dEZyYW1lU2h1ZmZsZURhdGEoc2h1ZmZsZURhdGEpOworICAgICAgICAgICAgICAgIENhbGxGcmFt
ZVNodWZmbGVyKG1faml0LCBzaHVmZmxlRGF0YSkucHJlcGFyZUZvclRhaWxDYWxsKCk7CisgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIG1faml0LmVtaXRSZXN0b3JlQ2FsbGVl
U2F2ZXMoKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5wcmVwYXJlRm9yVGFpbENhbGxTbG93KCk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworICAgIH0gZWxzZQorICAgICAgICBzbG93Q2Fz
ZXMgPSBjYWxsTGlua0luZm8tPmVtaXRGYXN0UGF0aChtX2ppdCwgY2FsbGVlR1BSLCBJbnZhbGlk
R1BSUmVnLCBDYWxsTGlua0luZm86OlVzZURhdGFJQzo6Tm8pOwogICAgIEpJVENvbXBpbGVyOjpK
dW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7CiAKLSAgICBzbG93UGF0aC5saW5rKCZtX2ppdCk7Cisg
ICAgc2xvd0Nhc2VzLmxpbmsoJm1faml0KTsKKyAgICBhdXRvIHNsb3dQYXRoU3RhcnQgPSBtX2pp
dC5sYWJlbCgpOwogCiAgICAgaWYgKG5vZGUtPm9wKCkgPT0gVGFpbENhbGwpIHsKICAgICAgICAg
Q2FsbEZyYW1lU2h1ZmZsZXIgY2FsbEZyYW1lU2h1ZmZsZXIobV9qaXQsIHNodWZmbGVEYXRhKTsK
QEAgLTkwNSwyMyArODk4LDIyIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUq
IG5vZGUKICAgICAgICAgY2FsbEZyYW1lU2h1ZmZsZXIucHJlcGFyZUZvclNsb3dQYXRoKCk7CiAg
ICAgfSBlbHNlIHsKICAgICAgICAgbV9qaXQubW92ZShjYWxsZWVHUFIsIEdQUkluZm86OnJlZ1Qw
KTsgLy8gQ2FsbGVlIG5lZWRzIHRvIGJlIGluIHJlZ1QwCi0KICAgICAgICAgaWYgKGlzVGFpbCkK
ICAgICAgICAgICAgIG1faml0LmVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsgLy8gVGhpcyBuZWVk
cyB0byBoYXBwZW4gYWZ0ZXIgd2UgbW92ZWQgY2FsbGVlR1BSIHRvIHJlZ1QwCiAgICAgfQogCi0g
ICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKGNhbGxMaW5rSW5mbyksIEdQUkluZm86OnJlZ1Qy
KTsgLy8gTGluayBpbmZvIG5lZWRzIHRvIGJlIGluIHJlZ1QyCiAgICAgbV9qaXQubW92ZShUcnVz
dGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBnbG9iYWxPYmplY3QpLCBHUFJJbmZvOjpy
ZWdUMyk7IC8vIEpTR2xvYmFsT2JqZWN0IG5lZWRzIHRvIGJlIGluIHJlZ1QzCi0gICAgSklUQ29t
cGlsZXI6OkNhbGwgc2xvd0NhbGwgPSBtX2ppdC5uZWFyQ2FsbCgpOworICAgIGNhbGxMaW5rSW5m
by0+ZW1pdFNsb3dQYXRoKHZtKCksIG1faml0KTsKIAogICAgIGRvbmUubGluaygmbV9qaXQpOwor
ICAgIGF1dG8gZG9uZUxvY2F0aW9uID0gbV9qaXQubGFiZWwoKTsKIAogICAgIGlmIChpc1RhaWwp
CiAgICAgICAgIG1faml0LmFib3J0V2l0aFJlYXNvbihKSVREaWRSZXR1cm5Gcm9tVGFpbENhbGwp
OwogICAgIGVsc2UKICAgICAgICAgc2V0UmVzdWx0QW5kUmVzZXRTdGFjaygpOwogCi0gICAgbV9q
aXQuYWRkSlNDYWxsKGZhc3RDYWxsLCBzbG93Q2FsbCwgdGFyZ2V0VG9DaGVjaywgY2FsbExpbmtJ
bmZvKTsKKyAgICBtX2ppdC5hZGRKU0NhbGwoc2xvd1BhdGhTdGFydCwgZG9uZUxvY2F0aW9uLCBj
YWxsTGlua0luZm8pOwogfQogCiAvLyBDbGFuZyBzaG91bGQgYWxsb3cgdW5yZWFjaGFibGUgW1tj
bGFuZzo6ZmFsbHRocm91Z2hdXSBpbiB0ZW1wbGF0ZSBmdW5jdGlvbnMgaWYgYW55IHRlbXBsYXRl
IGV4cGFuc2lvbiB1c2VzIGl0CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExv
d2VyREZHVG9CMy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExMb3dlckRGR1RvQjMuY3BwCShyZXZpc2lvbiAyNzY5NzcpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk3MTcsMjQg
Kzk3MTcsMjAgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjp0
YWdGb3IoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzKSkpOwogCiAgICAgICAgICAgICAgICAgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8g
PSBqaXQuY29kZUJsb2NrKCktPmFkZENhbGxMaW5rSW5mbyhub2RlLT5vcmlnaW4uc2VtYW50aWMp
OworICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0VXBDYWxsKAorICAgICAgICAgICAg
ICAgICAgICBub2RlLT5vcCgpID09IENvbnN0cnVjdCA/IENhbGxMaW5rSW5mbzo6Q29uc3RydWN0
IDogQ2FsbExpbmtJbmZvOjpDYWxsLCBHUFJJbmZvOjpyZWdUMCk7CiAKLSAgICAgICAgICAgICAg
ICBDQ2FsbEhlbHBlcnM6OkRhdGFMYWJlbFB0ciB0YXJnZXRUb0NoZWNrOwotICAgICAgICAgICAg
ICAgIENDYWxsSGVscGVyczo6SnVtcCBzbG93UGF0aCA9IGppdC5icmFuY2hQdHJXaXRoUGF0Y2go
Ci0gICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Tm90RXF1YWwsIEdQUkluZm86OnJl
Z1QwLCB0YXJnZXRUb0NoZWNrLAotICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW1QdHIobnVsbHB0cikpOwotCi0gICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpD
YWxsIGZhc3RDYWxsID0gaml0Lm5lYXJDYWxsKCk7CisgICAgICAgICAgICAgICAgYXV0byBzbG93
UGF0aCA9IGNhbGxMaW5rSW5mby0+ZW1pdEZhc3RQYXRoKGppdCwgR1BSSW5mbzo6cmVnVDAsIElu
dmFsaWRHUFJSZWcsIENhbGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpObyk7CiAgICAgICAgICAgICAg
ICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGRvbmUgPSBqaXQuanVtcCgpOwogCiAgICAgICAgICAgICAg
ICAgc2xvd1BhdGgubGluaygmaml0KTsKLQotICAgICAgICAgICAgICAgIGppdC5tb3ZlKENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbVB0cihjYWxsTGlua0luZm8pLCBHUFJJbmZvOjpyZWdUMik7Cisg
ICAgICAgICAgICAgICAgYXV0byBzbG93UGF0aFN0YXJ0ID0gaml0LmxhYmVsKCk7CiAgICAgICAg
ICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGppdC5jb2RlQmxv
Y2soKS0+Z2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBHUFJJbmZvOjpy
ZWdUMyk7Ci0gICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIHNsb3dDYWxsID0gaml0
Lm5lYXJDYWxsKCk7CisgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5lbWl0U2xvd1BhdGgo
KnZtLCBqaXQpOworCiAgICAgICAgICAgICAgICAgZG9uZS5saW5rKCZqaXQpOwogCi0gICAgICAg
ICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRVcENhbGwoCi0gICAgICAgICAgICAgICAgICAgIG5v
ZGUtPm9wKCkgPT0gQ29uc3RydWN0ID8gQ2FsbExpbmtJbmZvOjpDb25zdHJ1Y3QgOiBDYWxsTGlu
a0luZm86OkNhbGwsIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgICAgICAgICBhdXRvIGRvbmVM
b2NhdGlvbiA9IGppdC5sYWJlbCgpOwogCiAgICAgICAgICAgICAgICAgaml0LmFkZFB0cigKICAg
ICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoLXBhcmFtcy5wcm9j
KCkuZnJhbWVTaXplKCkpLApAQCAtOTc0MiwxMyArOTczOCw5IEBAIHByaXZhdGU6CiAKICAgICAg
ICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soCiAgICAgICAgICAgICAgICAgICAgIFs9XSAoTGlu
a0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyPEpJVFRodW5rUHRyVGFnPiBsaW5rQ2FsbCA9IHZtLT5nZXRDVElTdHViKGxp
bmtDYWxsVGh1bmtHZW5lcmF0b3IpLmNvZGUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGxp
bmtCdWZmZXIubGluayhzbG93Q2FsbCwgRnVuY3Rpb25QdHI8SklUVGh1bmtQdHJUYWc+KGxpbmtD
YWxsKSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0Q2FsbExv
Y2F0aW9ucygKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxK
U0ludGVybmFsUHRyVGFnPihsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxKU0ludGVybmFs
UHRyVGFnPihzbG93Q2FsbCkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvZGVMb2Nh
dGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+KGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVy
bmFsUHRyVGFnPih0YXJnZXRUb0NoZWNrKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
bGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8SlNJbnRlcm5hbFB0clRhZz4oZmFzdENhbGwp
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0Q29kZUxvY2F0aW9u
cygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJ
bnRlcm5hbFB0clRhZz4oc2xvd1BhdGhTdGFydCksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KGRvbmVMb2NhdGlvbikp
OwogICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIH0pOwogCkBAIC05ODU3LDYz
ICs5ODQ5LDUwIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIHNodWZmbGVEYXRhLnNl
dHVwQ2FsbGVlU2F2ZVJlZ2lzdGVycyhqaXQuY29kZUJsb2NrKCkpOwogICAgICAgICAgICAgICAg
ICAgICAKICAgICAgICAgICAgICAgICAgICAgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8gPSBq
aXQuY29kZUJsb2NrKCktPmFkZENhbGxMaW5rSW5mbyhub2RlLT5vcmlnaW4uc2VtYW50aWMpOwor
ICAgICAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldFVwQ2FsbChDYWxsTGlua0luZm86
OkRpcmVjdFRhaWxDYWxsLCBJbnZhbGlkR1BSUmVnKTsKICAgICAgICAgICAgICAgICAgICAgCi0g
ICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6UGF0Y2hhYmxlSnVtcCBwYXRjaGFibGVK
dW1wID0gaml0LnBhdGNoYWJsZUp1bXAoKTsKICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpMYWJlbCBtYWluUGF0aCA9IGppdC5sYWJlbCgpOwotICAgICAgICAgICAgICAgICAgICAK
ICAgICAgICAgICAgICAgICAgICAgaml0LnN0b3JlMzIoCiAgICAgICAgICAgICAgICAgICAgICAg
ICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihjYWxsU2l0ZUluZGV4LmJpdHMoKSksCiAgICAg
ICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OnRhZ0ZvcihWaXJ0dWFsUmVnaXN0ZXIo
Q2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKSk7Ci0gICAgICAgICAg
ICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0RnJhbWVTaHVmZmxl
RGF0YShzaHVmZmxlRGF0YSk7Ci0gICAgICAgICAgICAgICAgICAgIENhbGxGcmFtZVNodWZmbGVy
KGppdCwgc2h1ZmZsZURhdGEpLnByZXBhcmVGb3JUYWlsQ2FsbCgpOwotICAgICAgICAgICAgICAg
ICAgICAKLSAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNhbGwgPSBqaXQu
bmVhclRhaWxDYWxsKCk7CisgICAgICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+ZW1pdERp
cmVjdFRhaWxDYWxsRmFzdFBhdGgoaml0LCBbJl0geworICAgICAgICAgICAgICAgICAgICAgICAg
Y2FsbExpbmtJbmZvLT5zZXRGcmFtZVNodWZmbGVEYXRhKHNodWZmbGVEYXRhKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIENhbGxGcmFtZVNodWZmbGVyKGppdCwgc2h1ZmZsZURhdGEpLnByZXBh
cmVGb3JUYWlsQ2FsbCgpOworICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAg
ICAgICAgCiAgICAgICAgICAgICAgICAgICAgIGppdC5hYm9ydFdpdGhSZWFzb24oSklURGlkUmV0
dXJuRnJvbVRhaWxDYWxsKTsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAg
ICAgIENDYWxsSGVscGVyczo6TGFiZWwgc2xvd1BhdGggPSBqaXQubGFiZWwoKTsKLSAgICAgICAg
ICAgICAgICAgICAgcGF0Y2hhYmxlSnVtcC5tX2p1bXAubGlua1RvKHNsb3dQYXRoLCAmaml0KTsK
ICAgICAgICAgICAgICAgICAgICAgY2FsbE9wZXJhdGlvbigKICAgICAgICAgICAgICAgICAgICAg
ICAgICpzdGF0ZSwgdG9TYXZlLCBqaXQsCiAgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5v
cmlnaW4uc2VtYW50aWMsIGV4Y2VwdGlvbnMuZ2V0KCksIG9wZXJhdGlvbkxpbmtEaXJlY3RDYWxs
LAogICAgICAgICAgICAgICAgICAgICAgICAgSW52YWxpZEdQUlJlZywgQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tUHRyKGNhbGxMaW5rSW5mbyksIGNhbGxlZUdQUikuY2FsbCgpOwogICAgICAgICAg
ICAgICAgICAgICBqaXQuanVtcCgpLmxpbmtUbyhtYWluUGF0aCwgJmppdCk7Ci0gICAgICAgICAg
ICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldFVwQ2FsbChD
YWxsTGlua0luZm86OkRpcmVjdFRhaWxDYWxsLCBJbnZhbGlkR1BSUmVnKTsKICAgICAgICAgICAg
ICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRFeGVjdXRhYmxlRHVyaW5nQ29tcGlsYXRpb24oZXhl
Y3V0YWJsZSk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChudW1BbGxvY2F0ZWRBcmdzID4gbnVt
UGFzc2VkQXJncykKICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0TWF4
QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMobnVtQWxsb2NhdGVkQXJncyk7CiAgICAgICAgICAg
ICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soCi0gICAgICAg
ICAgICAgICAgICAgICAgICBbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBw
YXRjaGFibGVKdW1wTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0
clRhZz4ocGF0Y2hhYmxlSnVtcCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29kZUxv
Y2F0aW9uTmVhckNhbGw8SlNJbnRlcm5hbFB0clRhZz4gY2FsbExvY2F0aW9uID0gbGlua0J1ZmZl
ci5sb2NhdGlvbk9mTmVhckNhbGw8SlNJbnRlcm5hbFB0clRhZz4oY2FsbCk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gc2xv
d1BhdGhMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihz
bG93UGF0aCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNl
dENhbGxMb2NhdGlvbnMoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGNoYWJs
ZUp1bXBMb2NhdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGhM
b2NhdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbExvY2F0aW9uKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgICAgICBqaXQuYWRk
TGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBjYWxsTGlua0luZm8tPnNldENvZGVMb2NhdGlvbnMoCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KHNsb3dQ
YXRoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0lu
dGVybmFsUHRyVGFnPigpKTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCiAgICAg
ICAgICAgICAgICAgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8gPSBqaXQuY29kZUJsb2NrKCkt
PmFkZENhbGxMaW5rSW5mbyhub2RlLT5vcmlnaW4uc2VtYW50aWMpOwotICAgICAgICAgICAgICAg
IAotICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6TGFiZWwgbWFpblBhdGggPSBqaXQubGFi
ZWwoKTsKKyAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldFVwQ2FsbCgKKyAgICAgICAg
ICAgICAgICAgICAgaXNDb25zdHJ1Y3QgPyBDYWxsTGlua0luZm86OkRpcmVjdENvbnN0cnVjdCA6
IENhbGxMaW5rSW5mbzo6RGlyZWN0Q2FsbCwgSW52YWxpZEdQUlJlZyk7CiAKKyAgICAgICAgICAg
ICAgICBDQ2FsbEhlbHBlcnM6OkxhYmVsIG1haW5QYXRoID0gaml0LmxhYmVsKCk7CiAgICAgICAg
ICAgICAgICAgaml0LnN0b3JlMzIoCiAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbTMyKGNhbGxTaXRlSW5kZXguYml0cygpKSwKICAgICAgICAgICAgICAgICAgICAg
Q0NhbGxIZWxwZXJzOjp0YWdGb3IoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzKSkpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAg
ICAgIENDYWxsSGVscGVyczo6Q2FsbCBjYWxsID0gaml0Lm5lYXJDYWxsKCk7CisgICAgICAgICAg
ICAgICAgY2FsbExpbmtJbmZvLT5lbWl0RGlyZWN0RmFzdFBhdGgoaml0KTsKICAgICAgICAgICAg
ICAgICBqaXQuYWRkUHRyKAogICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW0zMigtcGFyYW1zLnByb2MoKS5mcmFtZVNpemUoKSksCiAgICAgICAgICAgICAgICAgICAg
IEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJl
Z2lzdGVyKTsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8t
PnNldFVwQ2FsbCgKLSAgICAgICAgICAgICAgICAgICAgaXNDb25zdHJ1Y3QgPyBDYWxsTGlua0lu
Zm86OkRpcmVjdENvbnN0cnVjdCA6IENhbGxMaW5rSW5mbzo6RGlyZWN0Q2FsbCwgSW52YWxpZEdQ
UlJlZyk7CiAgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRFeGVjdXRhYmxlRHVyaW5n
Q29tcGlsYXRpb24oZXhlY3V0YWJsZSk7CiAgICAgICAgICAgICAgICAgaWYgKG51bUFsbG9jYXRl
ZEFyZ3MgPiBudW1QYXNzZWRBcmdzKQogICAgICAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8t
PnNldE1heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKG51bUFsbG9jYXRlZEFyZ3MpOwpAQCAt
OTkzNSwxNSArOTkxNCw5IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgICAgICAgICAgICAgIGppdC5hZGRMaW5rVGFzaygKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9uTmVhckNhbGw8SlNJbnRlcm5hbFB0clRhZz4g
Y2FsbExvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8SlNJbnRlcm5hbFB0
clRhZz4oY2FsbCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvZGVMb2NhdGlv
bkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IHNsb3dQYXRoTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxv
Y2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oc2xvd1BhdGgpOwotCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCBzbG93UGF0aExvY2F0aW9uKTsK
LQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldENhbGxM
b2NhdGlvbnMoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2RlTG9jYXRp
b25MYWJlbDxKU0ludGVybmFsUHRyVGFnPigpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc2xvd1BhdGhMb2NhdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNhbGxMb2NhdGlvbik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNh
bGxMaW5rSW5mby0+c2V0Q29kZUxvY2F0aW9ucygKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihzbG93UGF0
aCksIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFi
ZWw8SlNJbnRlcm5hbFB0clRhZz4oKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7
CiAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgfSk7CkBAIC0xMDAzNCw0MCAr
MTAwMDcsMzAgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBzaHVmZmxlRGF0YS5zZXR1cENh
bGxlZVNhdmVSZWdpc3RlcnMoaml0LmNvZGVCbG9jaygpKTsKIAogICAgICAgICAgICAgICAgIENh
bGxMaW5rSW5mbyogY2FsbExpbmtJbmZvID0gaml0LmNvZGVCbG9jaygpLT5hZGRDYWxsTGlua0lu
Zm8oY29kZU9yaWdpbik7CisgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRVcENhbGwo
Q2FsbExpbmtJbmZvOjpUYWlsQ2FsbCwgR1BSSW5mbzo6cmVnVDApOwogCi0gICAgICAgICAgICAg
ICAgQ0NhbGxIZWxwZXJzOjpEYXRhTGFiZWxQdHIgdGFyZ2V0VG9DaGVjazsKLSAgICAgICAgICAg
ICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgc2xvd1BhdGggPSBqaXQuYnJhbmNoUHRyV2l0aFBhdGNo
KAotICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCBHUFJJbmZvOjpy
ZWdUMCwgdGFyZ2V0VG9DaGVjaywKLSAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tUHRyKG51bGxwdHIpKTsKLQotICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+
c2V0RnJhbWVTaHVmZmxlRGF0YShzaHVmZmxlRGF0YSk7Ci0gICAgICAgICAgICAgICAgQ2FsbEZy
YW1lU2h1ZmZsZXIoaml0LCBzaHVmZmxlRGF0YSkucHJlcGFyZUZvclRhaWxDYWxsKCk7Ci0KLSAg
ICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgZmFzdENhbGwgPSBqaXQubmVhclRhaWxD
YWxsKCk7CisgICAgICAgICAgICAgICAgYXV0byBzbG93UGF0aCA9IGNhbGxMaW5rSW5mby0+ZW1p
dFRhaWxDYWxsRmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgSW52YWxpZEdQUlJlZywgQ2Fs
bExpbmtJbmZvOjpVc2VEYXRhSUM6Ok5vLCBbJl0geworICAgICAgICAgICAgICAgICAgICBjYWxs
TGlua0luZm8tPnNldEZyYW1lU2h1ZmZsZURhdGEoc2h1ZmZsZURhdGEpOworICAgICAgICAgICAg
ICAgICAgICBDYWxsRnJhbWVTaHVmZmxlcihqaXQsIHNodWZmbGVEYXRhKS5wcmVwYXJlRm9yVGFp
bENhbGwoKTsKKyAgICAgICAgICAgICAgICB9KTsKIAogICAgICAgICAgICAgICAgIHNsb3dQYXRo
LmxpbmsoJmppdCk7Ci0KKyAgICAgICAgICAgICAgICBhdXRvIHNsb3dQYXRoU3RhcnQgPSBqaXQu
bGFiZWwoKTsKICAgICAgICAgICAgICAgICBDYWxsRnJhbWVTaHVmZmxlciBzbG93UGF0aFNodWZm
bGVyKGppdCwgc2h1ZmZsZURhdGEpOwogICAgICAgICAgICAgICAgIHNsb3dQYXRoU2h1ZmZsZXIu
c2V0Q2FsbGVlSlNWYWx1ZVJlZ3MoSlNWYWx1ZVJlZ3MoR1BSSW5mbzo6cmVnVDApKTsKICAgICAg
ICAgICAgICAgICBzbG93UGF0aFNodWZmbGVyLnByZXBhcmVGb3JTbG93UGF0aCgpOwogCi0gICAg
ICAgICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGNhbGxMaW5r
SW5mbyksIEdQUkluZm86OnJlZ1QyKTsKICAgICAgICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW1QdHIoaml0LmNvZGVCbG9jaygpLT5nbG9iYWxPYmplY3RGb3Iobm9k
ZS0+b3JpZ2luLnNlbWFudGljKSksIEdQUkluZm86OnJlZ1QzKTsKLSAgICAgICAgICAgICAgICBD
Q2FsbEhlbHBlcnM6OkNhbGwgc2xvd0NhbGwgPSBqaXQubmVhckNhbGwoKTsKKyAgICAgICAgICAg
ICAgICBjYWxsTGlua0luZm8tPmVtaXRTbG93UGF0aCgqdm0sIGppdCk7CiAKKyAgICAgICAgICAg
ICAgICBhdXRvIGRvbmVMb2NhdGlvbiA9IGppdC5sYWJlbCgpOwogICAgICAgICAgICAgICAgIGpp
dC5hYm9ydFdpdGhSZWFzb24oSklURGlkUmV0dXJuRnJvbVRhaWxDYWxsKTsKIAotICAgICAgICAg
ICAgICAgIGNhbGxMaW5rSW5mby0+c2V0VXBDYWxsKENhbGxMaW5rSW5mbzo6VGFpbENhbGwsIEdQ
UkluZm86OnJlZ1QwKTsKLQogICAgICAgICAgICAgICAgIGppdC5hZGRMaW5rVGFzaygKICAgICAg
ICAgICAgICAgICAgICAgWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SklUVGh1bmtQdHJUYWc+IGxpbmtD
YWxsID0gdm0tPmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcikuY29kZSgpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKHNsb3dDYWxsLCBGdW5jdGlvblB0
cjxKSVRUaHVua1B0clRhZz4obGlua0NhbGwpKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAg
Y2FsbExpbmtJbmZvLT5zZXRDYWxsTG9jYXRpb25zKAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+KGxpbmtCdWZmZXIubG9jYXRp
b25PZk5lYXJDYWxsPEpTSW50ZXJuYWxQdHJUYWc+KHNsb3dDYWxsKSksCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4obGlua0J1
ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KHRhcmdldFRvQ2hlY2spKSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxKU0lu
dGVybmFsUHRyVGFnPihmYXN0Q2FsbCkpOworICAgICAgICAgICAgICAgICAgICAgICAgY2FsbExp
bmtJbmZvLT5zZXRDb2RlTG9jYXRpb25zKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxp
bmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihzbG93UGF0aFN0YXJ0KSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5h
bFB0clRhZz4oZG9uZUxvY2F0aW9uKSk7CiAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAg
ICAgICAgfSk7CiAgICAgfQpAQCAtMTAzMjAsNDAgKzEwMjgzLDM4IEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICBjYWxsVHlwZSA9IENhbGxMaW5r
SW5mbzo6Q2FsbFZhcmFyZ3M7CiAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY2Fs
bExpbmtJbmZvLT5zZXRVcENhbGwoY2FsbFR5cGUsIEdQUkluZm86OnJlZ1QwKTsKKwogICAgICAg
ICAgICAgICAgIGJvb2wgaXNUYWlsQ2FsbCA9IENhbGxMaW5rSW5mbzo6Y2FsbE1vZGVGb3IoY2Fs
bFR5cGUpID09IENhbGxNb2RlOjpUYWlsOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAg
ICAgIENDYWxsSGVscGVyczo6RGF0YUxhYmVsUHRyIHRhcmdldFRvQ2hlY2s7Ci0gICAgICAgICAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIHNsb3dQYXRoID0gaml0LmJyYW5jaFB0cldpdGhQYXRj
aCgKLSAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwgR1BSSW5mbzo6
cmVnVDAsIHRhcmdldFRvQ2hlY2ssCi0gICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbVB0cihudWxscHRyKSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAg
ICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGZhc3RDYWxsOworCisgICAgICAgICAgICAgICAgQVNTRVJU
KCF1c2VkUmVnaXN0ZXJzLmdldChHUFJJbmZvOjpyZWdUMikpOyAvLyBVc2VkIG9uIHRoZSBzbG93
IHBhdGguCisKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dQYXRo
OwogICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBkb25lOwotICAgICAgICAgICAg
ICAgIAogICAgICAgICAgICAgICAgIGlmIChpc1RhaWxDYWxsKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGppdC5lbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7Ci0gICAgICAgICAgICAgICAgICAgIGpp
dC5wcmVwYXJlRm9yVGFpbENhbGxTbG93KCk7Ci0gICAgICAgICAgICAgICAgICAgIGZhc3RDYWxs
ID0gaml0Lm5lYXJUYWlsQ2FsbCgpOworICAgICAgICAgICAgICAgICAgICBzbG93UGF0aCA9IGNh
bGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgSW52
YWxpZEdQUlJlZywgQ2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6Ok5vLCBbJl0geworICAgICAgICAg
ICAgICAgICAgICAgICAgaml0LmVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGppdC5wcmVwYXJlRm9yVGFpbENhbGxTbG93KCk7CisgICAgICAgICAgICAg
ICAgICAgIH0pOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAg
IGZhc3RDYWxsID0gaml0Lm5lYXJDYWxsKCk7CisgICAgICAgICAgICAgICAgICAgIHNsb3dQYXRo
ID0gY2FsbExpbmtJbmZvLT5lbWl0RmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgSW52YWxp
ZEdQUlJlZywgQ2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6Ok5vKTsKICAgICAgICAgICAgICAgICAg
ICAgZG9uZSA9IGppdC5qdW1wKCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgICAgIHNsb3dQYXRoLmxpbmsoJmppdCk7CisgICAgICAgICAgICAgICAg
YXV0byBzbG93UGF0aFN0YXJ0ID0gaml0LmxhYmVsKCk7CiAKICAgICAgICAgICAgICAgICBpZiAo
aXNUYWlsQ2FsbCkKICAgICAgICAgICAgICAgICAgICAgaml0LmVtaXRSZXN0b3JlQ2FsbGVlU2F2
ZXMoKTsKLSAgICAgICAgICAgICAgICBBU1NFUlQoIXVzZWRSZWdpc3RlcnMuZ2V0KEdQUkluZm86
OnJlZ1QyKSk7Ci0gICAgICAgICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tUHRyKGNhbGxMaW5rSW5mbyksIEdQUkluZm86OnJlZ1QyKTsKICAgICAgICAgICAgICAgICBq
aXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoaml0LmNvZGVCbG9jaygpLT5nbG9i
YWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIEdQUkluZm86OnJlZ1QzKTsKLSAg
ICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgc2xvd0NhbGwgPSBqaXQubmVhckNhbGwo
KTsKKyAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPmVtaXRTbG93UGF0aCgqdm0sIGppdCk7
CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaWYgKGlzVGFpbENhbGwpCiAgICAg
ICAgICAgICAgICAgICAgIGppdC5hYm9ydFdpdGhSZWFzb24oSklURGlkUmV0dXJuRnJvbVRhaWxD
YWxsKTsKICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIGRvbmUubGlu
aygmaml0KTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8t
PnNldFVwQ2FsbChjYWxsVHlwZSwgR1BSSW5mbzo6cmVnVDApOworCisgICAgICAgICAgICAgICAg
YXV0byBkb25lTG9jYXRpb24gPSBqaXQubGFiZWwoKTsKIAogICAgICAgICAgICAgICAgIGppdC5h
ZGRQdHIoCiAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKC1v
cmlnaW5hbFN0YWNrSGVpZ2h0KSwKQEAgLTEwMzYxLDEzICsxMDMyMiw5IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaml0LmFkZExpbmtUYXNrKAogICAgICAg
ICAgICAgICAgICAgICBbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKSVRUaHVua1B0clRhZz4gbGlua0Nh
bGwgPSB2bS0+Z2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5jb2RlKCk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoc2xvd0NhbGwsIEZ1bmN0aW9uUHRy
PEpJVFRodW5rUHRyVGFnPihsaW5rQ2FsbCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgCi0g
ICAgICAgICAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldENhbGxMb2NhdGlvbnMoCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0
clRhZz4obGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8SlNJbnRlcm5hbFB0clRhZz4oc2xv
d0NhbGwpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxK
U0ludGVybmFsUHRyVGFnPihsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4o
dGFyZ2V0VG9DaGVjaykpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIu
bG9jYXRpb25PZk5lYXJDYWxsPEpTSW50ZXJuYWxQdHJUYWc+KGZhc3RDYWxsKSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldENvZGVMb2NhdGlvbnMoCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJU
YWc+KHNsb3dQYXRoU3RhcnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZm
ZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihkb25lTG9jYXRpb24pKTsKICAgICAgICAg
ICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICB9KTsKIApAQCAtMTA2MDcsMzkgKzEwNTY0LDM2
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICBj
YWxsVHlwZSA9IENhbGxMaW5rSW5mbzo6Q2FsbFZhcmFyZ3M7CiAgICAgICAgICAgICAgICAgCi0g
ICAgICAgICAgICAgICAgYm9vbCBpc1RhaWxDYWxsID0gQ2FsbExpbmtJbmZvOjpjYWxsTW9kZUZv
cihjYWxsVHlwZSkgPT0gQ2FsbE1vZGU6OlRhaWw7CisgICAgICAgICAgICAgICAgY2FsbExpbmtJ
bmZvLT5zZXRVcENhbGwoY2FsbFR5cGUsIEdQUkluZm86OnJlZ1QwKTsKICAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkRhdGFMYWJlbFB0ciB0YXJnZXRUb0No
ZWNrOwotICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBzbG93UGF0aCA9IGppdC5i
cmFuY2hQdHJXaXRoUGF0Y2goCi0gICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Tm90
RXF1YWwsIEdQUkluZm86OnJlZ1QwLCB0YXJnZXRUb0NoZWNrLAotICAgICAgICAgICAgICAgICAg
ICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobnVsbHB0cikpOworICAgICAgICAgICAgICAg
IGJvb2wgaXNUYWlsQ2FsbCA9IENhbGxMaW5rSW5mbzo6Y2FsbE1vZGVGb3IoY2FsbFR5cGUpID09
IENhbGxNb2RlOjpUYWlsOwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIENDYWxs
SGVscGVyczo6Q2FsbCBmYXN0Q2FsbDsKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1
bXBMaXN0IHNsb3dQYXRoOwogICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBkb25l
OwotICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGlmIChpc1RhaWxDYWxsKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGppdC5lbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7Ci0gICAgICAg
ICAgICAgICAgICAgIGppdC5wcmVwYXJlRm9yVGFpbENhbGxTbG93KCk7Ci0gICAgICAgICAgICAg
ICAgICAgIGZhc3RDYWxsID0gaml0Lm5lYXJUYWlsQ2FsbCgpOworICAgICAgICAgICAgICAgICAg
ICBzbG93UGF0aCA9IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoaml0LCBHUFJJ
bmZvOjpyZWdUMCwgSW52YWxpZEdQUlJlZywgQ2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6Ok5vLCBb
Jl0geworICAgICAgICAgICAgICAgICAgICAgICAgaml0LmVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMo
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGppdC5wcmVwYXJlRm9yVGFpbENhbGxTbG93KCk7
CisgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgICAgIGZhc3RDYWxsID0gaml0Lm5lYXJDYWxsKCk7CisgICAgICAgICAgICAg
ICAgICAgIHNsb3dQYXRoID0gY2FsbExpbmtJbmZvLT5lbWl0RmFzdFBhdGgoaml0LCBHUFJJbmZv
OjpyZWdUMCwgSW52YWxpZEdQUlJlZywgQ2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6Ok5vKTsKICAg
ICAgICAgICAgICAgICAgICAgZG9uZSA9IGppdC5qdW1wKCk7CiAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIHNsb3dQYXRoLmxpbmsoJmppdCk7Cisg
ICAgICAgICAgICAgICAgYXV0byBzbG93UGF0aFN0YXJ0ID0gaml0LmxhYmVsKCk7CiAKICAgICAg
ICAgICAgICAgICBpZiAoaXNUYWlsQ2FsbCkKICAgICAgICAgICAgICAgICAgICAgaml0LmVtaXRS
ZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKLSAgICAgICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW1QdHIoY2FsbExpbmtJbmZvKSwgR1BSSW5mbzo6cmVnVDIpOwogICAgICAg
ICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihqaXQuY29kZUJs
b2NrKCktPmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgR1BSSW5mbzo6
cmVnVDMpOwotICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBzbG93Q2FsbCA9IGpp
dC5uZWFyQ2FsbCgpOworICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+ZW1pdFNsb3dQYXRo
KCp2bSwgaml0KTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBpZiAoaXNUYWls
Q2FsbCkKICAgICAgICAgICAgICAgICAgICAgaml0LmFib3J0V2l0aFJlYXNvbihKSVREaWRSZXR1
cm5Gcm9tVGFpbENhbGwpOwogICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAg
ICAgZG9uZS5saW5rKCZqaXQpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGNh
bGxMaW5rSW5mby0+c2V0VXBDYWxsKGNhbGxUeXBlLCBHUFJJbmZvOjpyZWdUMCk7CisKKyAgICAg
ICAgICAgICAgICBhdXRvIGRvbmVMb2NhdGlvbiA9IGppdC5sYWJlbCgpOwogICAgICAgICAgICAg
ICAgIAogICAgICAgICAgICAgICAgIGppdC5hZGRQdHIoCiAgICAgICAgICAgICAgICAgICAgIEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKC1vcmlnaW5hbFN0YWNrSGVpZ2h0KSwKQEAgLTEwNjQ3
LDEzICsxMDYwMSw5IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAg
ICAgaml0LmFkZExpbmtUYXNrKAogICAgICAgICAgICAgICAgICAgICBbPV0gKExpbmtCdWZmZXIm
IGxpbmtCdWZmZXIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29k
ZVB0cjxKSVRUaHVua1B0clRhZz4gbGlua0NhbGwgPSB2bS0+Z2V0Q1RJU3R1YihsaW5rQ2FsbFRo
dW5rR2VuZXJhdG9yKS5jb2RlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVy
Lmxpbmsoc2xvd0NhbGwsIEZ1bmN0aW9uUHRyPEpJVFRodW5rUHRyVGFnPihsaW5rQ2FsbCkpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICBjYWxsTGlu
a0luZm8tPnNldENhbGxMb2NhdGlvbnMoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29k
ZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4obGlua0J1ZmZlci5sb2NhdGlvbk9mTmVh
ckNhbGw8SlNJbnRlcm5hbFB0clRhZz4oc2xvd0NhbGwpKSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPihsaW5rQnVmZmVyLmxv
Y2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4odGFyZ2V0VG9DaGVjaykpLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPEpTSW50ZXJuYWxQ
dHJUYWc+KGZhc3RDYWxsKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8t
PnNldENvZGVMb2NhdGlvbnMoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZl
ci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KHNsb3dQYXRoU3RhcnQpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFn
Pihkb25lTG9jYXRpb24pKTsKICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICB9
KTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmNwcAko
cmV2aXNpb24gMjc2OTc3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBl
cnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MSw2ICs3MSwxNiBAQCB2b2lkIENDYWxsSGVscGVy
czo6ZW5zdXJlU2hhZG93Q2hpY2tlblBhCiAgICAgc3RvcmVQdHIoc2NyYXRjaDIsIEFkZHJlc3Mo
c2NyYXRjaDFOb25BcmdHUFIpKTsKIH0KIAordm9pZCBDQ2FsbEhlbHBlcnM6OmVtaXRKSVRDb2Rl
T3ZlcihNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNJbnRlcm5hbFB0clRhZz4gY29kZSwgV1RGOjpG
dW5jdGlvbjx2b2lkKENDYWxsSGVscGVycyYpPiBlbWl0Q29kZSwgY29uc3QgY2hhciogZGVzY3Jp
cHRpb24pCit7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKKyAgICBlbWl0Q29kZShqaXQpOworCisg
ICAgY29uc3RleHByIGJvb2wgbmVlZHNCcmFuY2hDb21wYWN0aW9uID0gZmFsc2U7CisgICAgTGlu
a0J1ZmZlciBsaW5rQnVmZmVyKGppdCwgY29kZSwgaml0Lm1fYXNzZW1ibGVyLmJ1ZmZlcigpLmNv
ZGVTaXplKCksIEpJVENvbXBpbGF0aW9uTXVzdFN1Y2NlZWQsIG5lZWRzQnJhbmNoQ29tcGFjdGlv
bik7CisgICAgRklOQUxJWkVfQ09ERShsaW5rQnVmZmVyLCBOb1B0clRhZywgZGVzY3JpcHRpb24p
OworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIEVOQUJMRShKSVQpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmgJKHJldmlzaW9uIDI3Njk3
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTgxOCw2ICs4MTgsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBsb2dTaGFkb3dDaGlj
a2VuVGFpbFBhY2tldChHUFJSZWcgc2hhZG93UGFja2V0LCBKU1ZhbHVlUmVncyB0aGlzUmVncywg
R1BSUmVnIHNjb3BlLCBDb2RlQmxvY2sqLCBDYWxsU2l0ZUluZGV4KTsKICAgICAvLyBMZWF2ZXMg
YmVoaW5kIGEgcG9pbnRlciB0byB0aGUgUGFja2V0IHdlIHNob3VsZCB3cml0ZSB0byBpbiBzaGFk
b3dQYWNrZXQuCiAgICAgdm9pZCBlbnN1cmVTaGFkb3dDaGlja2VuUGFja2V0KFZNJiwgR1BSUmVn
IHNoYWRvd1BhY2tldCwgR1BSUmVnIHNjcmF0Y2gxTm9uQXJnR1BSLCBHUFJSZWcgc2NyYXRjaDIp
OworCisgICAgc3RhdGljIHZvaWQgZW1pdEpJVENvZGVPdmVyKE1hY3JvQXNzZW1ibGVyQ29kZVB0
cjxKU0ludGVybmFsUHRyVGFnPiBjb2RlLCBXVEY6OkZ1bmN0aW9uPHZvaWQoQ0NhbGxIZWxwZXJz
Jik+LCBjb25zdCBjaGFyKik7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVC5jcHAJKHJldmlzaW9uIDI3Njk3NykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTU5LDEwICs5NTksOSBAQCBD
b21waWxhdGlvblJlc3VsdCBKSVQ6OmxpbmsoKQogCiAgICAgZm9yIChhdXRvJiBjb21waWxhdGlv
bkluZm8gOiBtX2NhbGxDb21waWxhdGlvbkluZm8pIHsKICAgICAgICAgQ2FsbExpbmtJbmZvJiBp
bmZvID0gKmNvbXBpbGF0aW9uSW5mby5jYWxsTGlua0luZm87Ci0gICAgICAgIGluZm8uc2V0Q2Fs
bExvY2F0aW9ucygKLSAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJU
YWc+KHBhdGNoQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxKU0ludGVybmFsUHRyVGFnPihjb21w
aWxhdGlvbkluZm8uY2FsbFJldHVybkxvY2F0aW9uKSksCi0gICAgICAgICAgICBDb2RlTG9jYXRp
b25MYWJlbDxKU0ludGVybmFsUHRyVGFnPihwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJu
YWxQdHJUYWc+KGNvbXBpbGF0aW9uSW5mby5ob3RQYXRoQmVnaW4pKSwKLSAgICAgICAgICAgIHBh
dGNoQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxKU0ludGVybmFsUHRyVGFnPihjb21waWxhdGlv
bkluZm8uaG90UGF0aE90aGVyKSk7CisgICAgICAgIGluZm8uc2V0Q29kZUxvY2F0aW9ucygKKyAg
ICAgICAgICAgIHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oY29tcGls
YXRpb25JbmZvLnNsb3dQYXRoU3RhcnQpLAorICAgICAgICAgICAgcGF0Y2hCdWZmZXIubG9jYXRp
b25PZjxKU0ludGVybmFsUHRyVGFnPihjb21waWxhdGlvbkluZm8uZG9uZUxvY2F0aW9uKSk7CiAg
ICAgfQogCiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCShyZXZpc2lvbiAyNzY5
NzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xNzcsOSArMTc3LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgfTsKIAogICAgIHN0cnVjdCBD
YWxsQ29tcGlsYXRpb25JbmZvIHsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkRhdGFMYWJlbFB0
ciBob3RQYXRoQmVnaW47Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGhvdFBhdGhPdGhl
cjsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbFJldHVybkxvY2F0aW9uOworICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgc2xvd1BhdGhTdGFydDsKKyAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OkxhYmVsIGRvbmVMb2NhdGlvbjsKICAgICAgICAgQ2FsbExpbmtJbmZvKiBjYWxs
TGlua0luZm87CiAgICAgfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRD
YWxsMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
Q2FsbDMyXzY0LmNwcAkocmV2aXNpb24gMjc2OTc3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRDYWxsMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNTUsNyArMzU1LDcgQEAg
dm9pZCBKSVQ6OmNvbXBpbGVPcENhbGxTbG93Q2FzZShjb25zdCBJbgogICAgIGlmIChvcGNvZGVJ
RCA9PSBvcF90YWlsX2NhbGwgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgfHwg
b3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKQogICAgICAgICBlbWl0
UmVzdG9yZUNhbGxlZVNhdmVzKCk7CiAKLSAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExp
bmtJbmZvSW5kZXhdLmNhbGxSZXR1cm5Mb2NhdGlvbiA9IGVtaXROYWtlZE5lYXJDYWxsKG1fdm0t
PmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFn
PigpKTsKKyAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLnNsb3dD
YWxsUmV0dXJuTG9jYXRpb24gPSBlbWl0TmFrZWROZWFyQ2FsbChtX3ZtLT5nZXRDVElTdHViKGxp
bmtDYWxsVGh1bmtHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKICAgICBp
ZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92
YXJhcmdzKSB7CiAgICAgICAgIGFib3J0V2l0aFJlYXNvbihKSVREaWRSZXR1cm5Gcm9tVGFpbENh
bGwpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCShyZXZpc2lvbiAy
NzY5NzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xOTIsOCArMTkyLDE0IEBAIGJvb2wgSklUOjpjb21waWxlVGFpbENhbGwoY29u
c3QgT3BUYWlsQ2EKICAgICAgICAgVmFsdWVSZWNvdmVyeTo6aW5HUFIocmVnVDAsIERhdGFGb3Jt
YXRKUyk7CiAgICAgc2h1ZmZsZURhdGEuc2V0dXBDYWxsZWVTYXZlUmVnaXN0ZXJzKG1fY29kZUJs
b2NrKTsKICAgICBpbmZvLT5zZXRGcmFtZVNodWZmbGVEYXRhKHNodWZmbGVEYXRhKTsKLSAgICBD
YWxsRnJhbWVTaHVmZmxlcigqdGhpcywgc2h1ZmZsZURhdGEpLnByZXBhcmVGb3JUYWlsQ2FsbCgp
OwotICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uaG90UGF0aE90
aGVyID0gZW1pdE5ha2VkTmVhclRhaWxDYWxsKCk7CisKKyAgICBKdW1wTGlzdCBzbG93UGF0aHMg
PSBpbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aCgqdGhpcywgcmVnVDAsIHJlZ1QyLCBDYWxsTGlu
a0luZm86OlVzZURhdGFJQzo6WWVzLCBbJl0geworICAgICAgICBDYWxsRnJhbWVTaHVmZmxlcigq
dGhpcywgc2h1ZmZsZURhdGEpLnByZXBhcmVGb3JUYWlsQ2FsbCgpOworICAgIH0pOworICAgIGFk
ZFNsb3dDYXNlKHNsb3dQYXRocyk7CisgICAgYXV0byBkb25lTG9jYXRpb24gPSBsYWJlbCgpOwor
ICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uZG9uZUxvY2F0aW9u
ID0gZG9uZUxvY2F0aW9uOworICAgIAogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0yMzIsMjgg
KzIzOCwzMCBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChjb25zdCBJbnN0cnVjdGlvCiAgICAg
aWYgKGNvbXBpbGVDYWxsRXZhbChieXRlY29kZSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIERh
dGFMYWJlbFB0ciBhZGRyZXNzT2ZMaW5rZWRGdW5jdGlvbkNoZWNrOwotICAgIEp1bXAgc2xvd0Nh
c2UgPSBicmFuY2hQdHJXaXRoUGF0Y2goTm90RXF1YWwsIHJlZ1QwLCBhZGRyZXNzT2ZMaW5rZWRG
dW5jdGlvbkNoZWNrLCBUcnVzdGVkSW1tUHRyKG51bGxwdHIpKTsKLSAgICBhZGRTbG93Q2FzZShz
bG93Q2FzZSk7Ci0KICAgICBBU1NFUlQobV9jYWxsQ29tcGlsYXRpb25JbmZvLnNpemUoKSA9PSBj
YWxsTGlua0luZm9JbmRleCk7CiAgICAgaW5mby0+c2V0VXBDYWxsKENhbGxMaW5rSW5mbzo6Y2Fs
bFR5cGVGb3Iob3Bjb2RlSUQpLCByZWdUMCk7CiAgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvLmFw
cGVuZChDYWxsQ29tcGlsYXRpb25JbmZvKCkpOwotICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tj
YWxsTGlua0luZm9JbmRleF0uaG90UGF0aEJlZ2luID0gYWRkcmVzc09mTGlua2VkRnVuY3Rpb25D
aGVjazsKICAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmNhbGxM
aW5rSW5mbyA9IGluZm87CiAKLSAgICBpZiAoY29tcGlsZVRhaWxDYWxsKGJ5dGVjb2RlLCBpbmZv
LCBjYWxsTGlua0luZm9JbmRleCkpIHsKKyAgICBpZiAoY29tcGlsZVRhaWxDYWxsKGJ5dGVjb2Rl
LCBpbmZvLCBjYWxsTGlua0luZm9JbmRleCkpCiAgICAgICAgIHJldHVybjsKLSAgICB9CiAKICAg
ICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgfHwgb3Bjb2RlSUQgPT0gb3Bf
dGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKSB7Ci0gICAgICAgIGVtaXRSZXN0b3JlQ2FsbGVl
U2F2ZXMoKTsKLSAgICAgICAgcHJlcGFyZUZvclRhaWxDYWxsU2xvdygpOwotICAgICAgICBtX2Nh
bGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmhvdFBhdGhPdGhlciA9IGVtaXRO
YWtlZE5lYXJUYWlsQ2FsbCgpOworICAgICAgICBKdW1wTGlzdCBzbG93UGF0aHMgPSBpbmZvLT5l
bWl0VGFpbENhbGxGYXN0UGF0aCgqdGhpcywgcmVnVDAsIHJlZ1QyLCBDYWxsTGlua0luZm86OlVz
ZURhdGFJQzo6WWVzLCBbJl0geworICAgICAgICAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygp
OworICAgICAgICAgICAgcHJlcGFyZUZvclRhaWxDYWxsU2xvdyhHUFJJbmZvOjpyZWdUMik7Cisg
ICAgICAgIH0pOworICAgICAgICBhZGRTbG93Q2FzZShzbG93UGF0aHMpOworICAgICAgICBhdXRv
IGRvbmVMb2NhdGlvbiA9IGxhYmVsKCk7CisgICAgICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tj
YWxsTGlua0luZm9JbmRleF0uZG9uZUxvY2F0aW9uID0gZG9uZUxvY2F0aW9uOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCi0gICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0lu
ZGV4XS5ob3RQYXRoT3RoZXIgPSBlbWl0TmFrZWROZWFyQ2FsbCgpOworICAgIEp1bXBMaXN0IHNs
b3dQYXRocyA9IGluZm8tPmVtaXRGYXN0UGF0aCgqdGhpcywgcmVnVDAsIHJlZ1QyLCBDYWxsTGlu
a0luZm86OlVzZURhdGFJQzo6WWVzKTsKKyAgICBhdXRvIGRvbmVMb2NhdGlvbiA9IGxhYmVsKCk7
CisgICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGhzKTsKKworICAgIG1fY2FsbENvbXBpbGF0aW9uSW5m
b1tjYWxsTGlua0luZm9JbmRleF0uZG9uZUxvY2F0aW9uID0gZG9uZUxvY2F0aW9uOwogCiAgICAg
YWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICog
c2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rl
cik7CiAgICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKQEAgLTI3MSwxNCArMjc5LDEz
IEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2UoY29uc3QgSW4KIAogICAgIGxpbmtB
bGxTbG93Q2FzZXMoaXRlcik7CiAKKyAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJ
bmZvSW5kZXhdLnNsb3dQYXRoU3RhcnQgPSBsYWJlbCgpOworCiAgICAgaWYgKG9wY29kZUlEID09
IG9wX3RhaWxfY2FsbCB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfdmFyYXJncyB8fCBvcGNv
ZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMpCiAgICAgICAgIGVtaXRSZXN0
b3JlQ2FsbGVlU2F2ZXMoKTsKIAogICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCByZWdUMyk7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY2FsbENv
bXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uY2FsbExpbmtJbmZvKSwgcmVnVDIpOwot
Ci0gICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5jYWxsUmV0dXJu
TG9jYXRpb24gPQotICAgICAgICBlbWl0TmFrZWROZWFyQ2FsbChtX3ZtLT5nZXRDVElTdHViKGxp
bmtDYWxsVGh1bmtHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CisgICAgbV9j
YWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5jYWxsTGlua0luZm8tPmVtaXRT
bG93UGF0aCgqbV92bSwgKnRoaXMpOwogCiAgICAgaWYgKG9wY29kZUlEID09IG9wX3RhaWxfY2Fs
bCB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfdmFyYXJncykgewogICAgICAgICBhYm9ydFdp
dGhSZWFzb24oSklURGlkUmV0dXJuRnJvbVRhaWxDYWxsKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMjc2OTc3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTM5Miw3ICsxMzkyLDcgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkxp
bmtDYQogICAgICAgICAgICAgaWYgKCFjYWxsTGlua0luZm8tPnNlZW5PbmNlKCkpCiAgICAgICAg
ICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRTZWVuKCk7CiAgICAgICAgICAgICBlbHNlCi0gICAg
ICAgICAgICAgICAgbGlua0Zvcih2bSwgY2FsbGVlRnJhbWUsICpjYWxsTGlua0luZm8sIG51bGxw
dHIsIGludGVybmFsRnVuY3Rpb24sIGNvZGVQdHIpOworICAgICAgICAgICAgICAgIGxpbmtNb25v
bW9ycGhpY0NhbGwodm0sIGNhbGxlZUZyYW1lLCAqY2FsbExpbmtJbmZvLCBudWxscHRyLCBpbnRl
cm5hbEZ1bmN0aW9uLCBjb2RlUHRyKTsKIAogICAgICAgICAgICAgdm9pZCogbGlua2VkVGFyZ2V0
ID0gY29kZVB0ci5leGVjdXRhYmxlQWRkcmVzcygpOwogICAgICAgICAgICAgcmV0dXJuIGVuY29k
ZVJlc3VsdChsaW5rZWRUYXJnZXQsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGNhbGxMaW5rSW5m
by0+Y2FsbE1vZGUoKSA9PSBDYWxsTW9kZTo6VGFpbCA/IFJldXNlVGhlRnJhbWUgOiBLZWVwVGhl
RnJhbWUpKTsKQEAgLTE0NDAsNyArMTQ0MCw3IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihv
cGVyYXRpb25MaW5rQ2EKICAgICBpZiAoIWNhbGxMaW5rSW5mby0+c2Vlbk9uY2UoKSkKICAgICAg
ICAgY2FsbExpbmtJbmZvLT5zZXRTZWVuKCk7CiAgICAgZWxzZQotICAgICAgICBsaW5rRm9yKHZt
LCBjYWxsZWVGcmFtZSwgKmNhbGxMaW5rSW5mbywgY29kZUJsb2NrLCBjYWxsZWUsIGNvZGVQdHIp
OworICAgICAgICBsaW5rTW9ub21vcnBoaWNDYWxsKHZtLCBjYWxsZWVGcmFtZSwgKmNhbGxMaW5r
SW5mbywgY29kZUJsb2NrLCBjYWxsZWUsIGNvZGVQdHIpOwogCiAgICAgcmV0dXJuIGVuY29kZVJl
c3VsdChjb2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNzKCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+
KGNhbGxMaW5rSW5mby0+Y2FsbE1vZGUoKSA9PSBDYWxsTW9kZTo6VGFpbCA/IFJldXNlVGhlRnJh
bWUgOiBLZWVwVGhlRnJhbWUpKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
UG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUuY3BwCShyZXZpc2lvbiAy
NzY5NzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1BvbHltb3JwaGljQ2FsbFN0dWJS
b3V0aW5lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUsNyArNDUsNyBAQCBQb2x5bW9ycGhpY0Nh
bGxOb2RlOjp+UG9seW1vcnBoaWNDYWxsTm9kCiB2b2lkIFBvbHltb3JwaGljQ2FsbE5vZGU6OnVu
bGluayhWTSYgdm0pCiB7CiAgICAgaWYgKG1fY2FsbExpbmtJbmZvKSB7Ci0gICAgICAgIGRhdGFM
b2dMbklmKE9wdGlvbnM6OmR1bXBEaXNhc3NlbWJseSgpLCAiVW5saW5raW5nIHBvbHltb3JwaGlj
IGNhbGwgYXQgIiwgbV9jYWxsTGlua0luZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbigpLCAiLCBiYyMi
LCBtX2NhbGxMaW5rSW5mby0+Y29kZU9yaWdpbigpLmJ5dGVjb2RlSW5kZXgoKSk7CisgICAgICAg
IGRhdGFMb2dMbklmKE9wdGlvbnM6OmR1bXBEaXNhc3NlbWJseSgpLCAiVW5saW5raW5nIHBvbHlt
b3JwaGljIGNhbGwgYXQgIiwgbV9jYWxsTGlua0luZm8tPmRvbmVMb2NhdGlvbigpLCAiLCBiYyMi
LCBtX2NhbGxMaW5rSW5mby0+Y29kZU9yaWdpbigpLmJ5dGVjb2RlSW5kZXgoKSk7CiAgICAgICAg
IG1fY2FsbExpbmtJbmZvLT51bmxpbmsodm0pOwogICAgIH0KIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L1JlcGF0Y2guY3BwCShyZXZpc2lvbiAyNzY5NzcpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw4IEBA
CiAKICNpZiBFTkFCTEUoSklUKQogCisjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXJQcmludGVyLmgi
CisKICNpbmNsdWRlICJCaW5hcnlTd2l0Y2guaCIKICNpbmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIK
ICNpbmNsdWRlICJDYWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oIgpAQCAtMTE4OCwyMCArMTE5
MCwyMCBAQCB2b2lkIHJlcGF0Y2hJbnN0YW5jZU9mKAogICAgICAgICBmdGxUaHVua0F3YXJlUmVw
YXRjaENhbGwoY29kZUJsb2NrLCBzdHViSW5mby5zbG93UGF0aENhbGxMb2NhdGlvbiwgb3BlcmF0
aW9uSW5zdGFuY2VPZkdlbmVyaWMpOwogfQogCi1zdGF0aWMgdm9pZCBsaW5rU2xvd0ZvcihWTSYs
IENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvLCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUU3R1
YlJvdXRpbmVQdHJUYWc+IGNvZGVSZWYpCitzdGF0aWMgdm9pZCBsaW5rU2xvd1BhdGhUbyhWTSYs
IENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvLCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUU3R1
YlJvdXRpbmVQdHJUYWc+IGNvZGVSZWYpCiB7Ci0gICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hO
ZWFyQ2FsbChjYWxsTGlua0luZm8uY2FsbFJldHVybkxvY2F0aW9uKCksIENvZGVMb2NhdGlvbkxh
YmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihjb2RlUmVmLmNvZGUoKSkpOworICAgIGNhbGxMaW5r
SW5mby5zZXRTbG93UGF0aENhbGxEZXN0aW5hdGlvbihjb2RlUmVmLmNvZGUoKS50ZW1wbGF0ZSBy
ZXRhZ2dlZDxKU0VudHJ5UHRyVGFnPigpKTsKIH0KIAotc3RhdGljIHZvaWQgbGlua1Nsb3dGb3Io
Vk0mIHZtLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbywgVGh1bmtHZW5lcmF0b3IgZ2VuZXJh
dG9yKQorc3RhdGljIHZvaWQgbGlua1Nsb3dQYXRoVG8oVk0mIHZtLCBDYWxsTGlua0luZm8mIGNh
bGxMaW5rSW5mbywgVGh1bmtHZW5lcmF0b3IgZ2VuZXJhdG9yKQogewotICAgIGxpbmtTbG93Rm9y
KHZtLCBjYWxsTGlua0luZm8sIHZtLmdldENUSVN0dWIoZ2VuZXJhdG9yKS5yZXRhZ2dlZDxKSVRT
dHViUm91dGluZVB0clRhZz4oKSk7CisgICAgbGlua1Nsb3dQYXRoVG8odm0sIGNhbGxMaW5rSW5m
bywgdm0uZ2V0Q1RJU3R1YihnZW5lcmF0b3IpLnJldGFnZ2VkPEpJVFN0dWJSb3V0aW5lUHRyVGFn
PigpKTsKIH0KIAogc3RhdGljIHZvaWQgbGlua1Nsb3dGb3IoVk0mIHZtLCBDYWxsTGlua0luZm8m
IGNhbGxMaW5rSW5mbykKIHsKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUU3R1YlJvdXRp
bmVQdHJUYWc+IHZpcnR1YWxUaHVuayA9IHZpcnR1YWxUaHVua0Zvcih2bSwgY2FsbExpbmtJbmZv
KTsKLSAgICBsaW5rU2xvd0Zvcih2bSwgY2FsbExpbmtJbmZvLCB2aXJ0dWFsVGh1bmspOworICAg
IGxpbmtTbG93UGF0aFRvKHZtLCBjYWxsTGlua0luZm8sIHZpcnR1YWxUaHVuayk7CiAgICAgY2Fs
bExpbmtJbmZvLnNldFNsb3dTdHViKEdDQXdhcmVKSVRTdHViUm91dGluZTo6Y3JlYXRlKHZpcnR1
YWxUaHVuaywgdm0pKTsKIH0KIApAQCAtMTIxNyw3ICsxMjE5LDcgQEAgc3RhdGljIEpTQ2VsbCog
d2ViQXNzZW1ibHlPd25lcihKU0NlbGwqIAogI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkK
IH0KIAotdm9pZCBsaW5rRm9yKAordm9pZCBsaW5rTW9ub21vcnBoaWNDYWxsKAogICAgIFZNJiB2
bSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvLCBDb2Rl
QmxvY2sqIGNhbGxlZUNvZGVCbG9jaywKICAgICBKU09iamVjdCogY2FsbGVlLCBNYWNyb0Fzc2Vt
YmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gY29kZVB0cikKIHsKQEAgLTEyMzUsMjYgKzEyMzcs
MjQgQEAgdm9pZCBsaW5rRm9yKAogICAgIEFTU0VSVChvd25lcik7CiAKICAgICBBU1NFUlQoIWNh
bGxMaW5rSW5mby5pc0xpbmtlZCgpKTsKLSAgICBjYWxsTGlua0luZm8uc2V0Q2FsbGVlKHZtLCBv
d25lciwgY2FsbGVlKTsKLSAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaFBvaW50ZXIoY2FsbExp
bmtJbmZvLmhvdFBhdGhCZWdpbigpLCBjYWxsZWUpOworICAgIGNhbGxMaW5rSW5mby5zZXRNb25v
bW9ycGhpY0NhbGxlZSh2bSwgb3duZXIsIGNhbGxlZSwgY29kZVB0cik7CiAgICAgY2FsbExpbmtJ
bmZvLnNldExhc3RTZWVuQ2FsbGVlKHZtLCBvd25lciwgY2FsbGVlKTsKKwogICAgIGlmIChzaG91
bGREdW1wRGlzYXNzZW1ibHlGb3IoY2FsbGVyQ29kZUJsb2NrKSkKICAgICAgICAgZGF0YUxvZygi
TGlua2luZyBjYWxsIGluICIsIEZ1bGxDb2RlT3JpZ2luKGNhbGxlckNvZGVCbG9jaywgY2FsbExp
bmtJbmZvLmNvZGVPcmlnaW4oKSksICIgdG8gIiwgcG9pbnRlckR1bXAoY2FsbGVlQ29kZUJsb2Nr
KSwgIiwgZW50cnlwb2ludCBhdCAiLCBjb2RlUHRyLCAiXG4iKTsKIAotICAgIE1hY3JvQXNzZW1i
bGVyOjpyZXBhdGNoTmVhckNhbGwoY2FsbExpbmtJbmZvLmhvdFBhdGhPdGhlcigpLCBDb2RlTG9j
YXRpb25MYWJlbDxKU0VudHJ5UHRyVGFnPihjb2RlUHRyKSk7Ci0KICAgICBpZiAoY2FsbGVlQ29k
ZUJsb2NrKQogICAgICAgICBjYWxsZWVDb2RlQmxvY2stPmxpbmtJbmNvbWluZ0NhbGwoY2FsbGVy
RnJhbWUsICZjYWxsTGlua0luZm8pOwogCiAgICAgaWYgKGNhbGxMaW5rSW5mby5zcGVjaWFsaXph
dGlvbktpbmQoKSA9PSBDb2RlRm9yQ2FsbCAmJiBjYWxsTGlua0luZm8uYWxsb3dTdHVicygpKSB7
Ci0gICAgICAgIGxpbmtTbG93Rm9yKHZtLCBjYWxsTGlua0luZm8sIGxpbmtQb2x5bW9ycGhpY0Nh
bGxUaHVua0dlbmVyYXRvcik7CisgICAgICAgIGxpbmtTbG93UGF0aFRvKHZtLCBjYWxsTGlua0lu
Zm8sIGxpbmtQb2x5bW9ycGhpY0NhbGxUaHVua0dlbmVyYXRvcik7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAgICAgCiAgICAgbGlua1Nsb3dGb3Iodm0sIGNhbGxMaW5rSW5mbyk7CiB9CiAKLXZv
aWQgbGlua0RpcmVjdEZvcigKK3ZvaWQgbGlua0RpcmVjdENhbGwoCiAgICAgQ2FsbEZyYW1lKiBj
YWxsRnJhbWUsIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvLCBDb2RlQmxvY2sqIGNhbGxlZUNv
ZGVCbG9jaywKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gY29kZVB0
cikKIHsKQEAgLTEyNjksOSArMTI2OSw3IEBAIHZvaWQgbGlua0RpcmVjdEZvcigKICAgICBpZiAo
c2hvdWxkRHVtcERpc2Fzc2VtYmx5Rm9yKGNhbGxlckNvZGVCbG9jaykpCiAgICAgICAgIGRhdGFM
b2coIkxpbmtpbmcgY2FsbCBpbiAiLCBGdWxsQ29kZU9yaWdpbihjYWxsZXJDb2RlQmxvY2ssIGNh
bGxMaW5rSW5mby5jb2RlT3JpZ2luKCkpLCAiIHRvICIsIHBvaW50ZXJEdW1wKGNhbGxlZUNvZGVC
bG9jayksICIsIGVudHJ5cG9pbnQgYXQgIiwgY29kZVB0ciwgIlxuIik7CiAKLSAgICBpZiAoY2Fs
bExpbmtJbmZvLmNhbGxUeXBlKCkgPT0gQ2FsbExpbmtJbmZvOjpEaXJlY3RUYWlsQ2FsbCkKLSAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hKdW1wVG9Ob3AoY2FsbExpbmtJbmZvLnBhdGNo
YWJsZUp1bXAoKSk7Ci0gICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hOZWFyQ2FsbChjYWxsTGlu
a0luZm8uaG90UGF0aE90aGVyKCksIENvZGVMb2NhdGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+KGNv
ZGVQdHIpKTsKKyAgICBjYWxsTGlua0luZm8uc2V0RGlyZWN0Q2FsbFRhcmdldChDb2RlTG9jYXRp
b25MYWJlbDxKU0VudHJ5UHRyVGFnPihjb2RlUHRyKSk7CiAKICAgICBpZiAoY2FsbGVlQ29kZUJs
b2NrKQogICAgICAgICBjYWxsZWVDb2RlQmxvY2stPmxpbmtJbmNvbWluZ0NhbGwoY2FsbEZyYW1l
LCAmY2FsbExpbmtJbmZvKTsKQEAgLTEyODksMjEgKzEyODcsMTYgQEAgc3RhdGljIHZvaWQgcmV2
ZXJ0Q2FsbChWTSYgdm0sIENhbGxMaW5rSQogewogICAgIGlmIChjYWxsTGlua0luZm8uaXNEaXJl
Y3QoKSkgewogICAgICAgICBjYWxsTGlua0luZm8uY2xlYXJDb2RlQmxvY2soKTsKLSAgICAgICAg
aWYgKCFjYWxsTGlua0luZm8uY2xlYXJlZEJ5SmV0dGlzb24oKSkgewotICAgICAgICAgICAgaWYg
KGNhbGxMaW5rSW5mby5jYWxsVHlwZSgpID09IENhbGxMaW5rSW5mbzo6RGlyZWN0VGFpbENhbGwp
Ci0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hKdW1wKGNhbGxMaW5rSW5m
by5wYXRjaGFibGVKdW1wKCksIGNhbGxMaW5rSW5mby5zbG93UGF0aFN0YXJ0KCkpOwotICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoTmVhckNh
bGwoY2FsbExpbmtJbmZvLmhvdFBhdGhPdGhlcigpLCBjYWxsTGlua0luZm8uc2xvd1BhdGhTdGFy
dCgpKTsKLSAgICAgICAgfQorICAgICAgICBpZiAoIWNhbGxMaW5rSW5mby5jbGVhcmVkQnlKZXR0
aXNvbigpKQorICAgICAgICAgICAgY2FsbExpbmtJbmZvLmluaXRpYWxpemVEaXJlY3RDYWxsKCk7
CiAgICAgfSBlbHNlIHsKICAgICAgICAgaWYgKCFjYWxsTGlua0luZm8uY2xlYXJlZEJ5SmV0dGlz
b24oKSkgewotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJldmVydEp1bXBSZXBsYWNlbWVu
dFRvQnJhbmNoUHRyV2l0aFBhdGNoKAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpz
dGFydE9mQnJhbmNoUHRyV2l0aFBhdGNoT25SZWdpc3RlcihjYWxsTGlua0luZm8uaG90UGF0aEJl
Z2luKCkpLAotICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby5jYWxsZWVHUFIoKSwgbnVsbHB0
cik7Ci0gICAgICAgICAgICBsaW5rU2xvd0Zvcih2bSwgY2FsbExpbmtJbmZvLCBjb2RlUmVmKTsK
LSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoUG9pbnRlcihjYWxsTGlua0luZm8u
aG90UGF0aEJlZ2luKCksIG51bGxwdHIpOworICAgICAgICAgICAgbGlua1Nsb3dQYXRoVG8odm0s
IGNhbGxMaW5rSW5mbywgY29kZVJlZik7CisKKyAgICAgICAgICAgIGlmIChjYWxsTGlua0luZm8u
c3R1YigpKQorICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby5yZXZlcnRDYWxsVG9TdHViKCk7
CiAgICAgICAgIH0KLSAgICAgICAgY2FsbExpbmtJbmZvLmNsZWFyQ2FsbGVlKCk7CisgICAgICAg
IGNhbGxMaW5rSW5mby5jbGVhckNhbGxlZSgpOyAvLyBUaGlzIGFsc28gY2xlYXJzIHRoZSBpbmxp
bmUgY2FjaGUgYm90aCBmb3IgZGF0YSBhbmQgY29kZS1iYXNlZCBjYWNoZXMuCiAgICAgfQogICAg
IGNhbGxMaW5rSW5mby5jbGVhclNlZW4oKTsKICAgICBjYWxsTGlua0luZm8uY2xlYXJTdHViKCk7
CkBAIC0xMzEyLDkgKzEzMDUsOSBAQCBzdGF0aWMgdm9pZCByZXZlcnRDYWxsKFZNJiB2bSwgQ2Fs
bExpbmtJCiAgICAgICAgIGNhbGxMaW5rSW5mby5yZW1vdmUoKTsKIH0KIAotdm9pZCB1bmxpbmtG
b3IoVk0mIHZtLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbykKK3ZvaWQgdW5saW5rQ2FsbChW
TSYgdm0sIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvKQogewotICAgIGRhdGFMb2dMbklmKE9w
dGlvbnM6OmR1bXBEaXNhc3NlbWJseSgpLCAiVW5saW5raW5nIGNhbGwgYXQgIiwgY2FsbExpbmtJ
bmZvLmhvdFBhdGhPdGhlcigpKTsKKyAgICBkYXRhTG9nTG5JZihPcHRpb25zOjpkdW1wRGlzYXNz
ZW1ibHkoKSwgIlVubGlua2luZyBjYWxsIGF0ICIsIGNhbGxMaW5rSW5mby5mYXN0UGF0aFN0YXJ0
KCkpOwogICAgIAogICAgIHJldmVydENhbGwodm0sIGNhbGxMaW5rSW5mbywgdm0uZ2V0Q1RJU3R1
YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5yZXRhZ2dlZDxKSVRTdHViUm91dGluZVB0clRhZz4o
KSk7CiB9CkBAIC0xNTgwLDcgKzE1NzMsNyBAQCB2b2lkIGxpbmtQb2x5bW9ycGhpY0NhbGwoSlNH
bG9iYWxPYmplY3QqCiAgICAgfQogICAgIHN0dWJKaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW1QdHIoZ2xvYmFsT2JqZWN0KSwgR1BSSW5mbzo6cmVnVDMpOwogICAgIHN0dWJKaXQubW92
ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoJmNhbGxMaW5rSW5mbyksIEdQUkluZm86OnJl
Z1QyKTsKLSAgICBzdHViSml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGNhbGxM
aW5rSW5mby5jYWxsUmV0dXJuTG9jYXRpb24oKS51bnRhZ2dlZEV4ZWN1dGFibGVBZGRyZXNzKCkp
LCBHUFJJbmZvOjpyZWdUNCk7CisgICAgc3R1YkppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3Rl
ZEltbVB0cihjYWxsTGlua0luZm8uZG9uZUxvY2F0aW9uKCkudW50YWdnZWRFeGVjdXRhYmxlQWRk
cmVzcygpKSwgR1BSSW5mbzo6cmVnVDQpOwogICAgIAogICAgIHN0dWJKaXQucmVzdG9yZVJldHVy
bkFkZHJlc3NCZWZvcmVSZXR1cm4oR1BSSW5mbzo6cmVnVDQpOwogICAgIEFzc2VtYmx5SGVscGVy
czo6SnVtcCBzbG93ID0gc3R1YkppdC5qdW1wKCk7CkBAIC0xNjAzLDI5ICsxNTk2LDIzIEBAIHZv
aWQgbGlua1BvbHltb3JwaGljQ2FsbChKU0dsb2JhbE9iamVjdCoKICAgICAgICAgcGF0Y2hCdWZm
ZXIubGluayhjYWxsVG9Db2RlUHRyLmNhbGwsIEZ1bmN0aW9uUHRyPEpTRW50cnlQdHJUYWc+KGNh
bGxUb0NvZGVQdHIuY29kZVB0cikpOwogI2VuZGlmCiAgICAgfQotICAgIGlmIChpc1dlYkFzc2Vt
Ymx5IHx8IEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChjYWxsZXJDb2RlQmxvY2stPmppdFR5cGUo
KSkpCi0gICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoZG9uZSwgY2FsbExpbmtJbmZvLmNhbGxSZXR1
cm5Mb2NhdGlvbigpLmxhYmVsQXRPZmZzZXQoMCkpOwotICAgIGVsc2UKLSAgICAgICAgcGF0Y2hC
dWZmZXIubGluayhkb25lLCBjYWxsTGlua0luZm8uaG90UGF0aE90aGVyKCkubGFiZWxBdE9mZnNl
dCgwKSk7CisgICAgcGF0Y2hCdWZmZXIubGluayhkb25lLCBjYWxsTGlua0luZm8uZG9uZUxvY2F0
aW9uKCkpOwogICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvdywgQ29kZUxvY2F0aW9uTGFiZWw8SklU
VGh1bmtQdHJUYWc+KHZtLmdldENUSVN0dWIobGlua1BvbHltb3JwaGljQ2FsbFRodW5rR2VuZXJh
dG9yKS5jb2RlKCkpKTsKICAgICAKICAgICBhdXRvIHN0dWJSb3V0aW5lID0gYWRvcHRSZWYoKm5l
dyBQb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZSgKICAgICAgICAgRklOQUxJWkVfQ09ERV9GT1Io
CiAgICAgICAgICAgICBjYWxsZXJDb2RlQmxvY2ssIHBhdGNoQnVmZmVyLCBKSVRTdHViUm91dGlu
ZVB0clRhZywKICAgICAgICAgICAgICJQb2x5bW9ycGhpYyBjYWxsIHN0dWIgZm9yICVzLCByZXR1
cm4gcG9pbnQgJXAsIHRhcmdldHMgJXMiLAotICAgICAgICAgICAgICAgIGlzV2ViQXNzZW1ibHkg
PyAiV2ViQXNzZW1ibHkiIDogdG9DU3RyaW5nKCpjYWxsZXJDb2RlQmxvY2spLmRhdGEoKSwgY2Fs
bExpbmtJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbigpLmxhYmVsQXRPZmZzZXQoMCkuZXhlY3V0YWJs
ZUFkZHJlc3MoKSwKKyAgICAgICAgICAgICAgICBpc1dlYkFzc2VtYmx5ID8gIldlYkFzc2VtYmx5
IiA6IHRvQ1N0cmluZygqY2FsbGVyQ29kZUJsb2NrKS5kYXRhKCksIGNhbGxMaW5rSW5mby5kb25l
TG9jYXRpb24oKS5leGVjdXRhYmxlQWRkcmVzcygpLAogICAgICAgICAgICAgICAgIHRvQ1N0cmlu
ZyhsaXN0RHVtcChjYWxsQ2FzZXMpKS5kYXRhKCkpLAogICAgICAgICB2bSwgb3duZXIsIGNhbGxG
cmFtZS0+Y2FsbGVyRnJhbWUoKSwgY2FsbExpbmtJbmZvLCBjYWxsQ2FzZXMsCiAgICAgICAgIFdU
Rk1vdmUoZmFzdENvdW50cykpKTsKLSAgICAKLSAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwbGFjZVdp
dGhKdW1wKAotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6c3RhcnRPZkJyYW5jaFB0cldpdGhQYXRj
aE9uUmVnaXN0ZXIoY2FsbExpbmtJbmZvLmhvdFBhdGhCZWdpbigpKSwKLSAgICAgICAgQ29kZUxv
Y2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+KHN0dWJSb3V0aW5lLT5jb2RlKCkuY29k
ZSgpKSk7CisKICAgICAvLyBUaGUgb3JpZ2luYWwgc2xvdyBwYXRoIGlzIHVucmVhY2hhYmxlIG9u
IDY0LWJpdHMsIGJ1dCBzdGlsbAogICAgIC8vIHJlYWNoYWJsZSBvbiAzMi1iaXRzIHNpbmNlIGEg
bm9uLWNlbGwgY2FsbGVlIHdpbGwgYWx3YXlzCiAgICAgLy8gdHJpZ2dlciB0aGUgc2xvdyBwYXRo
CiAgICAgbGlua1Nsb3dGb3Iodm0sIGNhbGxMaW5rSW5mbyk7Ci0gICAgCisKICAgICAvLyBJZiB0
aGVyZSBoYWQgYmVlbiBhIHByZXZpb3VzIHN0dWIgcm91dGluZSwgdGhhdCBvbmUgd2lsbCBkaWUg
YXMgc29vbiBhcyB0aGUgR0MgcnVucyBhbmQgc2VlcwogICAgIC8vIHRoYXQgaXQncyBubyBsb25n
ZXIgb24gc3RhY2suCiAgICAgY2FsbExpbmtJbmZvLnNldFN0dWIoV1RGTW92ZShzdHViUm91dGlu
ZSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmgJKHJldmlzaW9uIDI3Njk3
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5oCSh3b3JraW5nIGNvcHkp
CkBAIC01NiwxMCArNTYsMTAgQEAgdm9pZCByZXBhdGNoSW5CeUlEKEpTR2xvYmFsT2JqZWN0Kiwg
Q29kZQogdm9pZCByZXBhdGNoQ2hlY2tQcml2YXRlQnJhbmQoSlNHbG9iYWxPYmplY3QqLCBDb2Rl
QmxvY2sqLCBKU09iamVjdCosIENhY2hlYWJsZUlkZW50aWZpZXIsIFN0cnVjdHVyZVN0dWJJbmZv
Jik7CiB2b2lkIHJlcGF0Y2hTZXRQcml2YXRlQnJhbmQoSlNHbG9iYWxPYmplY3QqLCBDb2RlQmxv
Y2sqLCBKU09iamVjdCosIFN0cnVjdHVyZSosIENhY2hlYWJsZUlkZW50aWZpZXIsIFN0cnVjdHVy
ZVN0dWJJbmZvJik7CiB2b2lkIHJlcGF0Y2hJbnN0YW5jZU9mKEpTR2xvYmFsT2JqZWN0KiwgQ29k
ZUJsb2NrKiwgSlNWYWx1ZSB2YWx1ZSwgSlNWYWx1ZSBwcm90b3R5cGUsIFN0cnVjdHVyZVN0dWJJ
bmZvJiwgYm9vbCB3YXNGb3VuZCk7Ci12b2lkIGxpbmtGb3IoVk0mLCBDYWxsRnJhbWUqLCBDYWxs
TGlua0luZm8mLCBDb2RlQmxvY2sqLCBKU09iamVjdCogY2FsbGVlLCBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHI8SlNFbnRyeVB0clRhZz4pOwotdm9pZCBsaW5rRGlyZWN0Rm9yKENhbGxGcmFtZSosIENh
bGxMaW5rSW5mbyYsIENvZGVCbG9jayosIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRy
VGFnPik7Cit2b2lkIGxpbmtNb25vbW9ycGhpY0NhbGwoVk0mLCBDYWxsRnJhbWUqLCBDYWxsTGlu
a0luZm8mLCBDb2RlQmxvY2sqLCBKU09iamVjdCogY2FsbGVlLCBNYWNyb0Fzc2VtYmxlckNvZGVQ
dHI8SlNFbnRyeVB0clRhZz4pOwordm9pZCBsaW5rRGlyZWN0Q2FsbChDYWxsRnJhbWUqLCBDYWxs
TGlua0luZm8mLCBDb2RlQmxvY2sqLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRh
Zz4pOwogdm9pZCBsaW5rU2xvd0ZvcihDYWxsRnJhbWUqLCBDYWxsTGlua0luZm8mKTsKLXZvaWQg
dW5saW5rRm9yKFZNJiwgQ2FsbExpbmtJbmZvJik7Cit2b2lkIHVubGlua0NhbGwoVk0mLCBDYWxs
TGlua0luZm8mKTsKIHZvaWQgbGlua1BvbHltb3JwaGljQ2FsbChKU0dsb2JhbE9iamVjdCosIENh
bGxGcmFtZSosIENhbGxMaW5rSW5mbyYsIENhbGxWYXJpYW50KTsKIHZvaWQgcmVzZXRHZXRCeShD
b2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIEdldEJ5S2luZCk7CiB2b2lkIHJlc2V0UHV0
QnlJRChDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAJKHJldmlzaW9uIDI3Njk3NykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02
MDAsOSArNjAwLDkgQEAgdm9pZCBPcHRpb25zOjppbml0aWFsaXplKCkKICAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKE9wdGlvbnM6OmFkZHJlc3NPZk9wdGlvbihmb3JjZU9TUkV4aXRUb0xMSW50
SUQpID09ICAmT3B0aW9uczo6Zm9yY2VPU1JFeGl0VG9MTEludCgpKTsKICAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKE9wdGlvbnM6OmFkZHJlc3NPZk9wdGlvbkRlZmF1bHQoZm9yY2VPU1JFeGl0
VG9MTEludElEKSA9PSAgJk9wdGlvbnM6OmZvcmNlT1NSRXhpdFRvTExJbnREZWZhdWx0KCkpOwog
Ci0jaWZuZGVmIE5ERUJVRworLy8jaWZuZGVmIE5ERUJVRwogICAgICAgICAgICAgQ29uZmlnOjpl
bmFibGVSZXN0cmljdGVkT3B0aW9ucygpOwotI2VuZGlmCisvLyNlbmRpZgogICAgICAgICAgICAg
Ly8gSW5pdGlhbGl6ZSBlYWNoIG9mIHRoZSBvcHRpb25zIHdpdGggdGhlaXIgZGVmYXVsdCB2YWx1
ZXM6CiAjZGVmaW5lIElOSVRfT1BUSU9OKHR5cGVfLCBuYW1lXywgZGVmYXVsdFZhbHVlXywgYXZh
aWxhYmlsaXR5XywgZGVzY3JpcHRpb25fKSB7IFwKICAgICAgICAgICAgICAgICBhdXRvIHZhbHVl
ID0gZGVmYXVsdFZhbHVlXzsgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Vk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNw
cAkocmV2aXNpb24gMjc2OTc3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzA4LDQgKzE3MDgsNiBAQCB2b2lkIFZNOjpyZW1vdmVM
b29wSGludEV4ZWN1dGlvbkNvdW50ZXIoCiAgICAgICAgIG1fbG9vcEhpbnRFeGVjdXRpb25Db3Vu
dHMucmVtb3ZlKGl0ZXIpOwogfQogCit1aW50NjRfdCBnX251bWJlck9mT1NSRXhpdHM7CisKIH0g
Ly8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCShyZXZp
c2lvbiAyNzY5NzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMzAwLDQgKzEzMDAsNiBAQCBleHRlcm4gIkMiIHZvaWQgc2FuaXRpemVT
dGFja0ZvclZNSW1wbChWCiBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHNhbml0aXplU3RhY2tGb3JW
TShWTSYpOwogdm9pZCBsb2dTYW5pdGl6ZVN0YWNrKFZNJik7CiAKK2V4dGVybiB1aW50NjRfdCBn
X251bWJlck9mT1NSRXhpdHM7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3Rvb2xzL0pTRG9sbGFyVk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS90b29scy9KU0RvbGxhclZNLmNwcAkocmV2aXNpb24gMjc2OTc3KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0pTRG9sbGFyVk0uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yNyw5ICsyNywxMSBAQAogI2luY2x1ZGUgIkpTRG9sbGFyVk0uaCIKIAogI2luY2x1ZGUg
IkFycmF5UHJvdG90eXBlLmgiCisjaW5jbHVkZSAiQXNzZW1ibGVyQ29tbW9uLmgiCiAjaW5jbHVk
ZSAiQnVpbHRpbk5hbWVzLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiQ29u
dHJvbEZsb3dQcm9maWxlci5oIgorI2luY2x1ZGUgIkRGR1dvcmtsaXN0LmgiCiAjaW5jbHVkZSAi
RE9NQXR0cmlidXRlR2V0dGVyU2V0dGVyLmgiCiAjaW5jbHVkZSAiRE9NSklUR2V0dGVyU2V0dGVy
LmgiCiAjaW5jbHVkZSAiRGVidWdnZXIuaCIKQEAgLTQ4LDkgKzUwLDExIEBACiAjaW5jbHVkZSAi
U25pcHBldFBhcmFtcy5oIgogI2luY2x1ZGUgIlR5cGVQcm9maWxlci5oIgogI2luY2x1ZGUgIlR5
cGVQcm9maWxlckxvZy5oIgorI2luY2x1ZGUgIlZNLmgiCiAjaW5jbHVkZSAiVk1JbnNwZWN0b3Iu
aCIKICNpbmNsdWRlICJWTVRyYXBzSW5saW5lcy5oIgogI2luY2x1ZGUgIldhc21DYXBhYmlsaXRp
ZXMuaCIKKyNpbmNsdWRlICJXYXNtV29ya2xpc3QuaCIKICNpbmNsdWRlIDx1bmljb2RlL3V2ZXJz
aW9uLmg+CiAjaW5jbHVkZSA8d3RmL0F0b21pY3MuaD4KICNpbmNsdWRlIDx3dGYvQ1BVVGltZS5o
PgpAQCAtMjAwOCw2ICsyMDEyLDIxIEBAIHN0YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9O
KGZ1bmN0aW8KIHN0YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9uSXNHaWdh
Y2FnZUVuYWJsZWQpOwogc3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04oZnVuY3Rpb25U
b1VuY2FjaGVhYmxlRGljdGlvbmFyeSk7CiBzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElP
TihmdW5jdGlvbklzUHJpdmF0ZVN5bWJvbCk7CitzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5D
VElPTihmdW5jdGlvbkR1bXBXb3JrbGlzdFN0YXRlKTsKK3N0YXRpYyBKU0NfREVDTEFSRV9IT1NU
X0ZVTkNUSU9OKGZ1bmN0aW9uUHJlY2lzZVRpbWUpOworc3RhdGljIEpTQ19ERUNMQVJFX0hPU1Rf
RlVOQ1RJT04oZnVuY3Rpb25OdW1iZXJPZk9TUkV4aXRzKTsKK3N0YXRpYyBKU0NfREVDTEFSRV9I
T1NUX0ZVTkNUSU9OKGZ1bmN0aW9uTnVtYmVyT2ZDYWNoZUZsdXNoZXMpOworc3RhdGljIEpTQ19E
RUNMQVJFX0hPU1RfRlVOQ1RJT04oZnVuY3Rpb25OdW1iZXJPZlJlcGxhY2VXaXRoVk1IYWx0cyk7
CitzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTihmdW5jdGlvbk51bWJlck9mUmVwbGFj
ZVdpdGhKdW1wcyk7CitzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTihmdW5jdGlvbk51
bWJlck9mUmVwbGFjZVdpdGhMb2Fkcyk7CitzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElP
TihmdW5jdGlvbk51bWJlck9mUmVwbGFjZVdpdGhBZGRyZXNzQ29tcHV0YXRpb25zKTsKK3N0YXRp
YyBKU0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9uTnVtYmVyT2ZTZXRQb2ludGVycyk7
CitzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTihmdW5jdGlvbk51bWJlck9mUmVwYXRj
aEludDMycyk7CitzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTihmdW5jdGlvbk51bWJl
ck9mUmVsaW5rSnVtcHMpOworc3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04oZnVuY3Rp
b25OdW1iZXJPZlJlbGlua0NhbGxzKTsKK3N0YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9O
KGZ1bmN0aW9uTnVtYmVyT2ZSZXBhdGNoQ29tcGFjdHMpOworc3RhdGljIEpTQ19ERUNMQVJFX0hP
U1RfRlVOQ1RJT04oZnVuY3Rpb25OdW1iZXJPZk5ld0NvZGVGaW5hbGl6YXRpb25zKTsKK3N0YXRp
YyBKU0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9uTnVtYmVyT2ZJblBsYWNlRmluYWxp
emF0aW9ucyk7CiAKIGNvbnN0IENsYXNzSW5mbyBKU0RvbGxhclZNOjpzX2luZm8gPSB7ICJEb2xs
YXJWTSIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFC
TEUoSlNEb2xsYXJWTSkgfTsKIApAQCAtMzU3Niw2ICszNTk1LDExNSBAQCBKU0NfREVGSU5FX0hP
U1RfRlVOQ1RJT04oZnVuY3Rpb25Jc1ByaXZhCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c0Jvb2xlYW4oYXNTeW1ib2woY2FsbEZyYW1lLT5hcmd1bWVudCgwKSktPnVpZCgpLmlzUHJpdmF0
ZSgpKSk7CiB9CiAKK0pTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihmdW5jdGlvbkR1bXBXb3JrbGlz
dFN0YXRlLCAoSlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUqKSkKK3sKKyAgICBEb2xsYXJWTUFz
c2VydFNjb3BlIGFzc2VydFNjb3BlOworCisgICAgZGF0YUxvZygiREZHIFdvcmtsaXN0OiAiLCBw
b2ludGVyRHVtcChERkc6OmV4aXN0aW5nR2xvYmFsREZHV29ya2xpc3RPck51bGwoKSksICJcbiIp
OworICAgIGRhdGFMb2coIkZUTCBXb3JrbGlzdDogIiwgcG9pbnRlckR1bXAoREZHOjpleGlzdGlu
Z0dsb2JhbEZUTFdvcmtsaXN0T3JOdWxsKCkpLCAiXG4iKTsKKyAgICAvL2RhdGFMb2coIldhc20g
V29ya2xpc3Q6ICIsIHBvaW50ZXJEdW1wKFdhc206OmV4aXN0aW5nV29ya2xpc3RPck51bGwoKSks
ICJcbiIpOworCisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKK30K
KworSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9uUHJlY2lzZVRpbWUsIChKU0dsb2Jh
bE9iamVjdCosIENhbGxGcmFtZSopKQoreworICAgIERvbGxhclZNQXNzZXJ0U2NvcGUgYXNzZXJ0
U2NvcGU7CisKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKFdhbGxUaW1lOjpu
b3coKS5zZWNvbmRzU2luY2VFcG9jaCgpLnZhbHVlKCkpKTsKK30KKworSlNDX0RFRklORV9IT1NU
X0ZVTkNUSU9OKGZ1bmN0aW9uTnVtYmVyT2ZPU1JFeGl0cywgKEpTR2xvYmFsT2JqZWN0KiwgQ2Fs
bEZyYW1lKikpCit7CisgICAgRG9sbGFyVk1Bc3NlcnRTY29wZSBhc3NlcnRTY29wZTsKKworICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoZ19udW1iZXJPZk9TUkV4aXRzKSk7Cit9
CisKK0pTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihmdW5jdGlvbk51bWJlck9mQ2FjaGVGbHVzaGVz
LCAoSlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUqKSkKK3sKKyAgICBEb2xsYXJWTUFzc2VydFNj
b3BlIGFzc2VydFNjb3BlOworCisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihn
X251bWJlck9mQ2FjaGVGbHVzaGVzKSk7Cit9CisKK0pTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihm
dW5jdGlvbk51bWJlck9mUmVwbGFjZVdpdGhWTUhhbHRzLCAoSlNHbG9iYWxPYmplY3QqLCBDYWxs
RnJhbWUqKSkKK3sKKyAgICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOworCisgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihnX251bWJlck9mUmVwbGFjZVdpdGhWTUhh
bHRzKSk7Cit9CisKK0pTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihmdW5jdGlvbk51bWJlck9mUmVw
bGFjZVdpdGhKdW1wcywgKEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1lKikpCit7CisgICAgRG9s
bGFyVk1Bc3NlcnRTY29wZSBhc3NlcnRTY29wZTsKKworICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNOdW1iZXIoZ19udW1iZXJPZlJlcGxhY2VXaXRoSnVtcHMpKTsKK30KKworSlNDX0RFRklO
RV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9uTnVtYmVyT2ZSZXBsYWNlV2l0aExvYWRzLCAoSlNHbG9i
YWxPYmplY3QqLCBDYWxsRnJhbWUqKSkKK3sKKyAgICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2Vy
dFNjb3BlOworCisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihnX251bWJlck9m
UmVwbGFjZVdpdGhMb2FkcykpOworfQorCitKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oZnVuY3Rp
b25OdW1iZXJPZlJlcGxhY2VXaXRoQWRkcmVzc0NvbXB1dGF0aW9ucywgKEpTR2xvYmFsT2JqZWN0
KiwgQ2FsbEZyYW1lKikpCit7CisgICAgRG9sbGFyVk1Bc3NlcnRTY29wZSBhc3NlcnRTY29wZTsK
KworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoZ19udW1iZXJPZlJlcGxhY2VX
aXRoQWRkcmVzc0NvbXB1dGF0aW9ucykpOworfQorCitKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04o
ZnVuY3Rpb25OdW1iZXJPZlNldFBvaW50ZXJzLCAoSlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUq
KSkKK3sKKyAgICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOworCisgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc051bWJlcihnX251bWJlck9mU2V0UG9pbnRlcnMpKTsKK30KKwor
SlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9uTnVtYmVyT2ZSZXBhdGNoSW50MzJzLCAo
SlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUqKSkKK3sKKyAgICBEb2xsYXJWTUFzc2VydFNjb3Bl
IGFzc2VydFNjb3BlOworCisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihnX251
bWJlck9mUmVwYXRjaEludDMycykpOworfQorCitKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oZnVu
Y3Rpb25OdW1iZXJPZlJlbGlua0p1bXBzLCAoSlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUqKSkK
K3sKKyAgICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOworCisgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc051bWJlcihnX251bWJlck9mUmVsaW5rSnVtcHMpKTsKK30KKworSlND
X0RFRklORV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9uTnVtYmVyT2ZSZWxpbmtDYWxscywgKEpTR2xv
YmFsT2JqZWN0KiwgQ2FsbEZyYW1lKikpCit7CisgICAgRG9sbGFyVk1Bc3NlcnRTY29wZSBhc3Nl
cnRTY29wZTsKKworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoZ19udW1iZXJP
ZlJlbGlua0NhbGxzKSk7Cit9CisKK0pTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihmdW5jdGlvbk51
bWJlck9mUmVwYXRjaENvbXBhY3RzLCAoSlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUqKSkKK3sK
KyAgICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOworCisgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc051bWJlcihnX251bWJlck9mUmVwYXRjaENvbXBhY3RzKSk7Cit9CisKK0pT
Q19ERUZJTkVfSE9TVF9GVU5DVElPTihmdW5jdGlvbk51bWJlck9mTmV3Q29kZUZpbmFsaXphdGlv
bnMsIChKU0dsb2JhbE9iamVjdCosIENhbGxGcmFtZSopKQoreworICAgIERvbGxhclZNQXNzZXJ0
U2NvcGUgYXNzZXJ0U2NvcGU7CisKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVy
KGdfbnVtYmVyT2ZOZXdDb2RlRmluYWxpemF0aW9ucykpOworfQorCitKU0NfREVGSU5FX0hPU1Rf
RlVOQ1RJT04oZnVuY3Rpb25OdW1iZXJPZkluUGxhY2VGaW5hbGl6YXRpb25zLCAoSlNHbG9iYWxP
YmplY3QqLCBDYWxsRnJhbWUqKSkKK3sKKyAgICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2VydFNj
b3BlOworCisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihnX251bWJlck9mSW5Q
bGFjZUZpbmFsaXphdGlvbnMpKTsKK30KKwogY29uc3RleHByIHVuc2lnbmVkIGpzRG9sbGFyVk1Q
cm9wZXJ0eUF0dHJpYnV0ZXMgPSBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBQcm9wZXJ0
eUF0dHJpYnV0ZTo6RG9udEVudW0gfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZTsKIAog
dm9pZCBKU0RvbGxhclZNOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCkBAIC0zNzMwLDYgKzM4NTgs
MjIgQEAgdm9pZCBKU0RvbGxhclZNOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCiAKICAgICBhZGRG
dW5jdGlvbih2bSwgImlzUHJpdmF0ZVN5bWJvbCIsIGZ1bmN0aW9uSXNQcml2YXRlU3ltYm9sLCAx
KTsKIAorICAgIGFkZEZ1bmN0aW9uKHZtLCAiZHVtcFdvcmtsaXN0U3RhdGUiLCBmdW5jdGlvbkR1
bXBXb3JrbGlzdFN0YXRlLCAwKTsKKyAgICBhZGRGdW5jdGlvbih2bSwgInByZWNpc2VUaW1lIiwg
ZnVuY3Rpb25QcmVjaXNlVGltZSwgMCk7CisgICAgYWRkRnVuY3Rpb24odm0sICJudW1iZXJPZk9T
UkV4aXRzIiwgZnVuY3Rpb25OdW1iZXJPZk9TUkV4aXRzLCAwKTsKKyAgICBhZGRGdW5jdGlvbih2
bSwgIm51bWJlck9mQ2FjaGVGbHVzaGVzIiwgZnVuY3Rpb25OdW1iZXJPZkNhY2hlRmx1c2hlcywg
MCk7CisgICAgYWRkRnVuY3Rpb24odm0sICJudW1iZXJPZlJlcGxhY2VXaXRoVk1IYWx0cyIsIGZ1
bmN0aW9uTnVtYmVyT2ZSZXBsYWNlV2l0aFZNSGFsdHMsIDApOworICAgIGFkZEZ1bmN0aW9uKHZt
LCAibnVtYmVyT2ZSZXBsYWNlV2l0aEp1bXBzIiwgZnVuY3Rpb25OdW1iZXJPZlJlcGxhY2VXaXRo
SnVtcHMsIDApOworICAgIGFkZEZ1bmN0aW9uKHZtLCAibnVtYmVyT2ZSZXBsYWNlV2l0aExvYWRz
IiwgZnVuY3Rpb25OdW1iZXJPZlJlcGxhY2VXaXRoTG9hZHMsIDApOworICAgIGFkZEZ1bmN0aW9u
KHZtLCAibnVtYmVyT2ZSZXBsYWNlV2l0aEFkZHJlc3NDb21wdXRhdGlvbnMiLCBmdW5jdGlvbk51
bWJlck9mUmVwbGFjZVdpdGhBZGRyZXNzQ29tcHV0YXRpb25zLCAwKTsKKyAgICBhZGRGdW5jdGlv
bih2bSwgIm51bWJlck9mU2V0UG9pbnRlcnMiLCBmdW5jdGlvbk51bWJlck9mU2V0UG9pbnRlcnMs
IDApOworICAgIGFkZEZ1bmN0aW9uKHZtLCAibnVtYmVyT2ZSZXBhdGNoSW50MzJzIiwgZnVuY3Rp
b25OdW1iZXJPZlJlcGF0Y2hJbnQzMnMsIDApOworICAgIGFkZEZ1bmN0aW9uKHZtLCAibnVtYmVy
T2ZSZWxpbmtKdW1wcyIsIGZ1bmN0aW9uTnVtYmVyT2ZSZWxpbmtKdW1wcywgMCk7CisgICAgYWRk
RnVuY3Rpb24odm0sICJudW1iZXJPZlJlbGlua0NhbGxzIiwgZnVuY3Rpb25OdW1iZXJPZlJlbGlu
a0NhbGxzLCAwKTsKKyAgICBhZGRGdW5jdGlvbih2bSwgIm51bWJlck9mUmVwYXRjaENvbXBhY3Rz
IiwgZnVuY3Rpb25OdW1iZXJPZlJlcGF0Y2hDb21wYWN0cywgMCk7CisgICAgYWRkRnVuY3Rpb24o
dm0sICJudW1iZXJPZk5ld0NvZGVGaW5hbGl6YXRpb25zIiwgZnVuY3Rpb25OdW1iZXJPZk5ld0Nv
ZGVGaW5hbGl6YXRpb25zLCAwKTsKKyAgICBhZGRGdW5jdGlvbih2bSwgIm51bWJlck9mSW5QbGFj
ZUZpbmFsaXphdGlvbnMiLCBmdW5jdGlvbk51bWJlck9mSW5QbGFjZUZpbmFsaXphdGlvbnMsIDAp
OworCiAgICAgbV9vYmplY3REb2luZ1NpZGVFZmZlY3RQdXRXaXRob3V0Q29ycmVjdFNsb3RTdGF0
dXNTdHJ1Y3R1cmUuc2V0KHZtLCB0aGlzLCBPYmplY3REb2luZ1NpZGVFZmZlY3RQdXRXaXRob3V0
Q29ycmVjdFNsb3RTdGF0dXM6OmNyZWF0ZVN0cnVjdHVyZSh2bSwgZ2xvYmFsT2JqZWN0LCBqc051
bGwoKSkpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XYXNtVG9K
Uy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2FzbVRv
SlMuY3BwCShyZXZpc2lvbiAyNzY5NzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9XYXNtVG9KUy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2MSwxOSArMjYxLDE4IEBAIEV4cGVj
dGVkPE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxXYXNtRW50cnkKIAogICAgIENhbGxMaW5rSW5mbyog
Y2FsbExpbmtJbmZvID0gY2FsbExpbmtJbmZvcy5hZGQoQ29kZU9yaWdpbigpKTsKICAgICBjYWxs
TGlua0luZm8tPnNldFVwQ2FsbChDYWxsTGlua0luZm86OkNhbGwsIGltcG9ydEpTQ2VsbEdQUlJl
Zyk7Ci0gICAgSklUOjpEYXRhTGFiZWxQdHIgdGFyZ2V0VG9DaGVjazsKLSAgICBKSVQ6OlRydXN0
ZWRJbW1QdHIgaW5pdGlhbFJpZ2h0VmFsdWUobnVsbHB0cik7Ci0gICAgSklUOjpKdW1wIHNsb3dQ
YXRoID0gaml0LmJyYW5jaFB0cldpdGhQYXRjaChNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIGlt
cG9ydEpTQ2VsbEdQUlJlZywgdGFyZ2V0VG9DaGVjaywgaW5pdGlhbFJpZ2h0VmFsdWUpOwotICAg
IEpJVDo6Q2FsbCBmYXN0Q2FsbCA9IGppdC5uZWFyQ2FsbCgpOworICAgIGF1dG8gc2xvd1BhdGgg
PSBjYWxsTGlua0luZm8tPmVtaXRGYXN0UGF0aChqaXQsIGltcG9ydEpTQ2VsbEdQUlJlZywgSW52
YWxpZEdQUlJlZywgQ2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6Ok5vKTsKKwogICAgIEpJVDo6SnVt
cCBkb25lID0gaml0Lmp1bXAoKTsKICAgICBzbG93UGF0aC5saW5rKCZqaXQpOworICAgIGF1dG8g
c2xvd1BhdGhTdGFydCA9IGppdC5sYWJlbCgpOwogICAgIC8vIENhbGxlZSBuZWVkcyB0byBiZSBp
biByZWdUMCBoZXJlLgotICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRy
KGNhbGxMaW5rSW5mbyksIEdQUkluZm86OnJlZ1QyKTsgLy8gTGluayBpbmZvIG5lZWRzIHRvIGJl
IGluIHJlZ1QyLgogICAgIGppdC5sb2FkV2FzbUNvbnRleHRJbnN0YW5jZShHUFJJbmZvOjpyZWdU
Myk7CiAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1Qz
LCBJbnN0YW5jZTo6b2Zmc2V0T2ZPd25lcigpKSwgR1BSSW5mbzo6cmVnVDMpOwogICAgIGppdC5s
b2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMywgSlNXZWJBc3NlbWJs
eUluc3RhbmNlOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgR1BSSW5mbzo6cmVnVDMpOwotICAg
IEpJVDo6Q2FsbCBzbG93Q2FsbCA9IGppdC5uZWFyQ2FsbCgpOworICAgIGNhbGxMaW5rSW5mby0+
ZW1pdFNsb3dQYXRoKHZtLCBqaXQpOwogICAgIGRvbmUubGluaygmaml0KTsKKyAgICBhdXRvIGRv
bmVMb2NhdGlvbiA9IGppdC5sYWJlbCgpOwogCiAgICAgaWYgKHNpZ25hdHVyZS5yZXR1cm5Db3Vu
dCgpID09IDEpIHsKICAgICAgICAgc3dpdGNoIChzaWduYXR1cmUucmV0dXJuVHlwZSgwKS5raW5k
KSB7CkBAIC00MjEsMTEgKzQyMCw5IEBAIEV4cGVjdGVkPE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxX
YXNtRW50cnkKICAgICBpZiAoVU5MSUtFTFkocGF0Y2hCdWZmZXIuZGlkRmFpbFRvQWxsb2NhdGUo
KSkpCiAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChCaW5kaW5nRmFpbHVyZTo6T3V0T2ZN
ZW1vcnkpOwogCi0gICAgcGF0Y2hCdWZmZXIubGluayhzbG93Q2FsbCwgRnVuY3Rpb25QdHI8SklU
VGh1bmtQdHJUYWc+KHZtLmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcikuY29kZSgp
KSk7Ci0gICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gY2FsbFJldHVybkxv
Y2F0aW9uKHBhdGNoQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxKU0ludGVybmFsUHRyVGFnPihz
bG93Q2FsbCkpOwotICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IGhvdFBh
dGhCZWdpbihwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KHRhcmdldFRv
Q2hlY2spKTsKLSAgICBDb2RlTG9jYXRpb25OZWFyQ2FsbDxKU0ludGVybmFsUHRyVGFnPiBob3RQ
YXRoT3RoZXIgPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8SlNJbnRlcm5hbFB0clRh
Zz4oZmFzdENhbGwpOwotICAgIGNhbGxMaW5rSW5mby0+c2V0Q2FsbExvY2F0aW9ucyhjYWxsUmV0
dXJuTG9jYXRpb24sIGhvdFBhdGhCZWdpbiwgaG90UGF0aE90aGVyKTsKKyAgICBjYWxsTGlua0lu
Zm8tPnNldENvZGVMb2NhdGlvbnMoCisgICAgICAgICAgICBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9m
PEpTSW50ZXJuYWxQdHJUYWc+KHNsb3dQYXRoU3RhcnQpLAorICAgICAgICAgICAgcGF0Y2hCdWZm
ZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihkb25lTG9jYXRpb24pKTsKIAogICAgIHJl
dHVybiBGSU5BTElaRV9XQVNNX0NPREUocGF0Y2hCdWZmZXIsIFdhc21FbnRyeVB0clRhZywgIldl
YkFzc2VtYmx5LT5KYXZhU2NyaXB0IGltcG9ydFslaV0gJXMiLCBpbXBvcnRJbmRleCwgc2lnbmF0
dXJlLnRvU3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkpOwogfQpJbmRleDogVG9vbHMvU2NyaXB0cy9j
b21wYXJlLXJlc3VsdHMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy9jb21wYXJlLXJlc3Vs
dHMJKHJldmlzaW9uIDI3Njk3NykKKysrIFRvb2xzL1NjcmlwdHMvY29tcGFyZS1yZXN1bHRzCSh3
b3JraW5nIGNvcHkpCkBAIC0yNzQsNyArMjc0LDcgQEAgZGVmIEpldFN0cmVhbTJSZXN1bHRzKHBh
eWxvYWQpOgogICAgIGFzc2VydCBkZXRlY3RKZXRTdHJlYW0yKHBheWxvYWQpCiAKICAgICBqcyA9
IHBheWxvYWRbIkpldFN0cmVhbTIuMCJdCi0gICAgaXRlcmF0aW9ucyA9IGxlbihqc1sidGVzdHMi
XVsiZ2F1c3NpYW4tYmx1ciJdWyJtZXRyaWNzIl1bIlNjb3JlIl1bImN1cnJlbnQiXSkKKyAgICBp
dGVyYXRpb25zID0gbGVuKGpzWyJ0ZXN0cyJdWyJyYXl0cmFjZSJdWyJtZXRyaWNzIl1bIlNjb3Jl
Il1bImN1cnJlbnQiXSkKICAgICByZXN1bHRzID0gW10KICAgICBmb3IgaSBpbiByYW5nZShpdGVy
YXRpb25zKToKICAgICAgICAgc2NvcmVzID0gW10KSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvYmVuY2htYXJrX3J1bm5lci9icm93c2VyX2RyaXZlci9vc3hfc2FmYXJpX2RyaXZlci5weQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2JlbmNobWFya19ydW5uZXIvYnJv
d3Nlcl9kcml2ZXIvb3N4X3NhZmFyaV9kcml2ZXIucHkJKHJldmlzaW9uIDI3Njk3NykKKysrIFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvYmVuY2htYXJrX3J1bm5lci9icm93c2VyX2RyaXZlci9vc3hf
c2FmYXJpX2RyaXZlci5weQkod29ya2luZyBjb3B5KQpAQCAtMiw2ICsyLDcgQEAKIAogaW1wb3J0
IGxvZ2dpbmcKIGltcG9ydCBvcworaW1wb3J0IHJlCiBpbXBvcnQgc3VicHJvY2VzcwogaW1wb3J0
IHRpbWUKIApAQCAtMjYsNiArMjcsOSBAQCBjbGFzcyBPU1hTYWZhcmlEcml2ZXIoT1NYQnJvd3Nl
ckRyaXZlcik6CiAgICAgZGVmIGxhdW5jaF91cmwoc2VsZiwgdXJsLCBvcHRpb25zLCBicm93c2Vy
X2J1aWxkX3BhdGgsIGJyb3dzZXJfcGF0aCk6CiAgICAgICAgIGFyZ3MgPSBbJy9BcHBsaWNhdGlv
bnMvU2FmYXJpLmFwcC9Db250ZW50cy9NYWNPUy9TYWZhcmknXQogICAgICAgICBlbnYgPSB7fQor
ICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBvcy5lbnZpcm9uLml0ZW1zKCk6CisgICAgICAgICAg
ICBpZiByZS5tYXRjaChyIl5fX1hQQ18iLCBrZXkpOgorICAgICAgICAgICAgICAgIGVudltrZXld
ID0gdmFsdWUKICAgICAgICAgaWYgYnJvd3Nlcl9idWlsZF9wYXRoOgogICAgICAgICAgICAgYnJv
d3Nlcl9idWlsZF9hYnNvbHV0ZV9wYXRoID0gb3MucGF0aC5hYnNwYXRoKGJyb3dzZXJfYnVpbGRf
cGF0aCkKICAgICAgICAgICAgIHNhZmFyaV9hcHBfaW5fYnVpbGRfcGF0aCA9IG9zLnBhdGguam9p
bihicm93c2VyX2J1aWxkX2Fic29sdXRlX3BhdGgsICdTYWZhcmkuYXBwL0NvbnRlbnRzL01hY09T
L1NhZmFyaScpCkBAIC0zNyw4ICs0MSwxMCBAQCBjbGFzcyBPU1hTYWZhcmlEcml2ZXIoT1NYQnJv
d3NlckRyaXZlcik6CiAgICAgICAgICAgICAgICAgYXJncyA9IFtzYWZhcmlfYXBwX2luX2J1aWxk
X3BhdGhdCiAKICAgICAgICAgICAgIGlmIGNvbnRhaW5zX2ZyYW1ld29ya3M6Ci0gICAgICAgICAg
ICAgICAgZW52ID0geydEWUxEX0ZSQU1FV09SS19QQVRIJzogYnJvd3Nlcl9idWlsZF9hYnNvbHV0
ZV9wYXRoLCAnRFlMRF9MSUJSQVJZX1BBVEgnOiBicm93c2VyX2J1aWxkX2Fic29sdXRlX3BhdGgs
Ci0gICAgICAgICAgICAgICAgICAgICdfX1hQQ19EWUxEX0ZSQU1FV09SS19QQVRIJzogYnJvd3Nl
cl9idWlsZF9hYnNvbHV0ZV9wYXRoLCAnX19YUENfRFlMRF9MSUJSQVJZX1BBVEgnOiBicm93c2Vy
X2J1aWxkX2Fic29sdXRlX3BhdGh9CisgICAgICAgICAgICAgICAgZW52WydEWUxEX0ZSQU1FV09S
S19QQVRIJ10gPSBicm93c2VyX2J1aWxkX2Fic29sdXRlX3BhdGgKKyAgICAgICAgICAgICAgICBl
bnZbJ0RZTERfTElCUkFSWV9QQVRIJ10gPSBicm93c2VyX2J1aWxkX2Fic29sdXRlX3BhdGgKKyAg
ICAgICAgICAgICAgICBlbnZbJ19fWFBDX0RZTERfRlJBTUVXT1JLX1BBVEgnXSA9IGJyb3dzZXJf
YnVpbGRfYWJzb2x1dGVfcGF0aAorICAgICAgICAgICAgICAgIGVudlsnX19YUENfRFlMRF9MSUJS
QVJZX1BBVEgnXSA9IGJyb3dzZXJfYnVpbGRfYWJzb2x1dGVfcGF0aAogICAgICAgICAgICAgZWxp
ZiBub3QgaGFzX3NhZmFyaV9hcHA6CiAgICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCdD
b3VsZCBub3QgZmluZCBhbnkgZnJhbWV3b3JrICJ7fSInLmZvcm1hdChicm93c2VyX2J1aWxkX3Bh
dGgpKQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>428525</attachid>
            <date>2021-05-13 10:21:13 -0700</date>
            <delta_ts>2021-05-13 11:01:59 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>100407</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvSmV0U3RyZWFtMi9KZXRTdHJlYW1Ecml2ZXIuanMKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0yL0pldFN0cmVhbURyaXZlci5q
cwkocmV2aXNpb24gMjc2OTc3KQorKysgUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0yL0pldFN0
cmVhbURyaXZlci5qcwkod29ya2luZyBjb3B5KQpAQCAtNDMsNiArNDMsOCBAQCBpZiAodHlwZW9m
IHRlc3RXb3JzdENhc2VDb3VudE1hcCA9PT0gInVuCiBpZiAodHlwZW9mIGR1bXBKU09OUmVzdWx0
cyA9PT0gInVuZGVmaW5lZCIpCiAgICAgdmFyIGR1bXBKU09OUmVzdWx0cyA9IGZhbHNlOwogCisv
L3ZhciB0ZXN0TGlzdCA9IFsiZGVsdGEtYmx1ZSIsICJlYXJsZXktYm95ZXIiLCAicmljaGFyZHMi
LCAicmF5dHJhY2UiXTsKKwogLy8gVXNlZCBmb3IgdGhlIHByb21pc2UgcmVwcmVzZW50aW5nIHRo
ZSBjdXJyZW50IGJlbmNobWFyayBydW4uCiB0aGlzLmN1cnJlbnRSZXNvbHZlID0gbnVsbDsKIHRo
aXMuY3VycmVudFJlamVjdCA9IG51bGw7CkBAIC0yNzQsNiArMjc2LDEwIEBAIGNsYXNzIERyaXZl
ciB7CiAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coYCR7Y2F0ZWdvcnl9OiAke3VpRnJpZW5k
bHlOdW1iZXIoZ2VvbWVhbihzY29yZXMpKX1gKTsKIAogICAgICAgICAgICAgY29uc29sZS5sb2co
IlxuVG90YWwgU2NvcmU6ICIsIHVpRnJpZW5kbHlOdW1iZXIoZ2VvbWVhbihhbGxTY29yZXMpKSwg
IlxuIik7CisgICAgICAgICAgICBpZiAodHlwZW9mICR2bSAhPT0gInVuZGVmaW5lZCIpIHsKKyAg
ICAgICAgICAgICAgICBjb25zb2xlLmxvZygiXG5cbnRvdGFsIGNhY2hlIGZsdXNoZXM6ICIsICR2
bS5udW1iZXJPZkNhY2hlRmx1c2hlcygpLCAiXG4iKTsKKyAgICAgICAgICAgICAgICBjb25zb2xl
LmxvZygiXG5cbnRvdGFsIE9TUiBleGl0czogIiwgJHZtLm51bWJlck9mT1NSRXhpdHMoKSwgIlxu
Iik7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KIAogICAgICAgICB0aGlzLnJlcG9ydFNjb3Jl
VG9SdW5CZW5jaG1hcmtSdW5uZXIoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3Vy
Y2VzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQJ
KHJldmlzaW9uIDI3Njk3NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAko
d29ya2luZyBjb3B5KQpAQCAtMSw0ICsxLDQgQEAKLS8vIENvcHlyaWdodCAoQykgMjAxNy0yMDE5
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoQykgMjAxNy0y
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vCiAvLyBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKIC8v
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtNDYsNiArNDYsNyBAQCBBUEkvT3BhcXVlSlNTdHJpbmcuY3BwCiAKIGFz
c2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmNwcAogYXNzZW1ibGVyL0Fzc2VtYmxlckJ1
ZmZlci5jcHAKK2Fzc2VtYmxlci9Bc3NlbWJsZXJDb21tb24uY3BwCiBhc3NlbWJsZXIvQ1BVLmNw
cAogYXNzZW1ibGVyL0pJVE9wZXJhdGlvbkxpc3QuY3BwCiBhc3NlbWJsZXIvTGlua0J1ZmZlci5j
cHAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyNzY5NzcpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjg5MSw2ICsyODkxLDcgQEAKIAkJMEY5QzAzRDQx
RTk0NzZGMDAwQ0Q5MTI1IC8qIEFpclRtcFNldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBBaXJUbXBTZXQuaDsgcGF0aCA9IGIzL2Fpci9BaXJUbXBTZXQuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5Q0FCQzYxREI1NEE3NjAwMDhFODNCIC8qIEFpclBhZElu
dGVyZmVyZW5jZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBBaXJQ
YWRJbnRlcmZlcmVuY2UuY3BwOyBwYXRoID0gYjMvYWlyL0FpclBhZEludGVyZmVyZW5jZS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOUNBQkM3MURCNTRBNzYwMDA4RTgzQiAv
KiBBaXJQYWRJbnRlcmZlcmVuY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
QWlyUGFkSW50ZXJmZXJlbmNlLmg7IHBhdGggPSBiMy9haXIvQWlyUGFkSW50ZXJmZXJlbmNlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGOUQwODhBMjY0MUNDN0UwMDQxRDcwMSAv
KiBBc3NlbWJsZXJDb21tb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gQXNzZW1ibGVyQ29tbW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5
RDMzNkUxNjVEQkI4RDAwNUFEMzg3IC8qIERpc2Fzc2VtYmxlci5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBEaXNhc3NlbWJsZXIuY3BwOyBwYXRoID0gZGlzYXNzZW1i
bGVyL0Rpc2Fzc2VtYmxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOUQz
Mzk0MTdGRkM0RTYwMDczQzJCQyAvKiBERkdGbHVzaGVkQXQuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBuYW1lID0gREZHRmx1c2hlZEF0LmNwcDsgcGF0aCA9IGRmZy9ERkdGbHVz
aGVkQXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjlEMzM5NTE3RkZDNEU2
MDA3M0MyQkMgLyogREZHRmx1c2hlZEF0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IERGR0ZsdXNoZWRBdC5oOyBwYXRoID0gZGZnL0RGR0ZsdXNoZWRBdC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtODQxNiw2ICs4NDE3LDcgQEAKIAkJCQk4NkFERDE0MzBGRERF
QTk4MDAwNkZGQ0MgLyogQVJNdjdSZWdpc3RlcnMuaCAqLywKIAkJCQkwRkE2RjM5NjIwQ0NCN0E2
MDBBMDNEQ0QgLyogQXNzZW1ibGVyQnVmZmVyLmNwcCAqLywKIAkJCQk5Njg4Q0IxMzBFRDEyQjRF
MDAxRDY0OUYgLyogQXNzZW1ibGVyQnVmZmVyLmggKi8sCisJCQkJMEY5RDA4OEEyNjQxQ0M3RTAw
NDFENzAxIC8qIEFzc2VtYmxlckNvbW1vbi5jcHAgKi8sCiAJCQkJNDNDMzkyQUExQzNCRUIwMDAw
MjQxRjUzIC8qIEFzc2VtYmxlckNvbW1vbi5oICovLAogCQkJCTg2RTExNkIwMEZFNzVBQzgwMEI1
MTJCQyAvKiBDb2RlTG9jYXRpb24uaCAqLywKIAkJCQk1MjMzNTYyODIyNUVCOEU5MDAyNjhCRDIg
LyogQ1BVLmNwcCAqLywKQEAgLTg0MzksOCArODQ0MSw4IEBACiAJCQkJODZDNTY4REUxMUEyMTNF
RTAwMDdGN0YwIC8qIE1hY3JvQXNzZW1ibGVyTUlQUy5oICovLAogCQkJCUZFNjhDNjM1MUI5MERE
RDkwMDQyQkNCMyAvKiBNYWNyb0Fzc2VtYmxlclByaW50ZXIuY3BwICovLAogCQkJCUZFNjhDNjM2
MUI5MERERDkwMDQyQkNCMyAvKiBNYWNyb0Fzc2VtYmxlclByaW50ZXIuaCAqLywKLQkJCQk4NjAx
NjFFMDBGM0E4M0MxMDBGODQ3MTAgLyogTWFjcm9Bc3NlbWJsZXJYODYuaCAqLywKIAkJCQk4NjAx
NjFFMTBGM0E4M0MxMDBGODQ3MTAgLyogTWFjcm9Bc3NlbWJsZXJYODZfNjQuaCAqLywKKwkJCQk4
NjAxNjFFMDBGM0E4M0MxMDBGODQ3MTAgLyogTWFjcm9Bc3NlbWJsZXJYODYuaCAqLywKIAkJCQlB
N0E0QUUwNzE3OTczQjI2MDA1NjEyQjEgLyogTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uY3BwICov
LAogCQkJCTg2MDE2MUUyMEYzQTgzQzEwMEY4NDcxMCAvKiBNYWNyb0Fzc2VtYmxlclg4NkNvbW1v
bi5oICovLAogCQkJCTY1ODYwMTc3MTg1QThGNUUwMDAzMEVFRSAvKiBNYXhGcmFtZUV4dGVudEZv
clNsb3dQYXRoQ2FsbC5oICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci9BUk02NEFzc2VtYmxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9h
c3NlbWJsZXIvQVJNNjRBc3NlbWJsZXIuaAkocmV2aXNpb24gMjc2OTc3KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BUk02NEFzc2VtYmxlci5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yNjAwLDYgKzI2MDAsNyBAQCBwdWJsaWM6CiAgICAgICAgIGludCBpbnNuID0gZGF0YUNhY2hl
WmVyb1ZpcnR1YWxBZGRyZXNzKEFSTTY0UmVnaXN0ZXJzOjp6cik7CiAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKHJvdW5kVXBUb011bHRpcGxlT2Y8aW5zdHJ1Y3Rpb25TaXplPih3aGVyZSkgPT0gd2hl
cmUpOwogICAgICAgICBwZXJmb3JtSklUTWVtY3B5KHdoZXJlLCAmaW5zbiwgc2l6ZW9mKGludCkp
OworICAgICAgICBXVEY6OmF0b21pY0V4Y2hhbmdlQWRkKCZnX251bWJlck9mUmVwbGFjZVdpdGhW
TUhhbHRzLCAxKTsKICAgICAgICAgY2FjaGVGbHVzaCh3aGVyZSwgc2l6ZW9mKGludCkpOwogICAg
IH0KIApAQCAtMjYxOSw2ICsyNjIwLDcgQEAgcHVibGljOgogICAgICAgICBpbnQgaW5zbiA9IHVu
Y29uZGl0aW9uYWxCcmFuY2hJbW1lZGlhdGUoZmFsc2UsIHN0YXRpY19jYXN0PGludD4ob2Zmc2V0
KSk7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJvdW5kVXBUb011bHRpcGxlT2Y8aW5zdHJ1Y3Rp
b25TaXplPih3aGVyZSkgPT0gd2hlcmUpOwogICAgICAgICBwZXJmb3JtSklUTWVtY3B5KHdoZXJl
LCAmaW5zbiwgc2l6ZW9mKGludCkpOworICAgICAgICBXVEY6OmF0b21pY0V4Y2hhbmdlQWRkKCZn
X251bWJlck9mUmVwbGFjZVdpdGhKdW1wcywgMSk7CiAgICAgICAgIGNhY2hlRmx1c2god2hlcmUs
IHNpemVvZihpbnQpKTsKICAgICB9CiAgICAgCkBAIC0yNjUwLDYgKzI2NTIsNyBAQCBwdWJsaWM6
CiAgICAgICAgICAgICBpbnQgaW5zbiA9IGxvYWRTdG9yZVJlZ2lzdGVyVW5zaWduZWRJbW1lZGlh
dGUoTWVtT3BTaXplXzY0LCBmYWxzZSwgTWVtT3BfTE9BRCwgZW5jb2RlUG9zaXRpdmVJbW1lZGlh
dGU8NjQ+KGltbTEyKSwgcm4sIHJkKTsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJvdW5k
VXBUb011bHRpcGxlT2Y8aW5zdHJ1Y3Rpb25TaXplPih3aGVyZSkgPT0gd2hlcmUpOwogICAgICAg
ICAgICAgcGVyZm9ybUpJVE1lbWNweSh3aGVyZSwgJmluc24sIHNpemVvZihpbnQpKTsKKyAgICAg
ICAgICAgIFdURjo6YXRvbWljRXhjaGFuZ2VBZGQoJmdfbnVtYmVyT2ZSZXBsYWNlV2l0aExvYWRz
LCAxKTsKICAgICAgICAgICAgIGNhY2hlRmx1c2god2hlcmUsIHNpemVvZihpbnQpKTsKICAgICAg
ICAgfQogI2lmIEFTU0VSVF9FTkFCTEVECkBAIC0yNjg1LDYgKzI2ODgsNyBAQCBwdWJsaWM6CiAg
ICAgICAgICAgICBpbnQgaW5zbiA9IGFkZFN1YnRyYWN0SW1tZWRpYXRlKERhdGFzaXplXzY0LCBB
ZGRPcF9BREQsIERvbnRTZXRGbGFncywgMCwgaW1tMTIgKiBzaXplb2Yodm9pZCopLCBybiwgcnQp
OwogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQocm91bmRVcFRvTXVsdGlwbGVPZjxpbnN0cnVj
dGlvblNpemU+KHdoZXJlKSA9PSB3aGVyZSk7CiAgICAgICAgICAgICBwZXJmb3JtSklUTWVtY3B5
KHdoZXJlLCAmaW5zbiwgc2l6ZW9mKGludCkpOworICAgICAgICAgICAgV1RGOjphdG9taWNFeGNo
YW5nZUFkZCgmZ19udW1iZXJPZlJlcGxhY2VXaXRoQWRkcmVzc0NvbXB1dGF0aW9ucywgMSk7CiAg
ICAgICAgICAgICBjYWNoZUZsdXNoKHdoZXJlLCBzaXplb2YoaW50KSk7CiAgICAgICAgIH0KICNp
ZiBBU1NFUlRfRU5BQkxFRApAQCAtMjcyMSw4ICsyNzI1LDEwIEBAIHB1YmxpYzoKICAgICAgICAg
UkVMRUFTRV9BU1NFUlQocm91bmRVcFRvTXVsdGlwbGVPZjxpbnN0cnVjdGlvblNpemU+KGFkZHJl
c3MpID09IGFkZHJlc3MpOwogICAgICAgICBwZXJmb3JtSklUTWVtY3B5KGFkZHJlc3MsIGJ1ZmZl
ciwgc2l6ZW9mKGludCkgKiAzKTsKIAotICAgICAgICBpZiAoZmx1c2gpCisgICAgICAgIGlmIChm
bHVzaCkgeworICAgICAgICAgICAgV1RGOjphdG9taWNFeGNoYW5nZUFkZCgmZ19udW1iZXJPZlNl
dFBvaW50ZXJzLCAxKTsKICAgICAgICAgICAgIGNhY2hlRmx1c2goYWRkcmVzcywgc2l6ZW9mKGlu
dCkgKiAzKTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIHN0YXRpYyB2b2lkIHJlcGF0Y2hJbnQz
Mih2b2lkKiB3aGVyZSwgaW50MzJfdCB2YWx1ZSkKQEAgLTI3NDksNiArMjc1NSw3IEBAIHB1Ymxp
YzoKICAgICAgICAgUkVMRUFTRV9BU1NFUlQocm91bmRVcFRvTXVsdGlwbGVPZjxpbnN0cnVjdGlv
blNpemU+KHdoZXJlKSA9PSB3aGVyZSk7CiAgICAgICAgIHBlcmZvcm1KSVRNZW1jcHkod2hlcmUs
ICZidWZmZXIsIHNpemVvZihpbnQpICogMik7CiAKKyAgICAgICAgV1RGOjphdG9taWNFeGNoYW5n
ZUFkZCgmZ19udW1iZXJPZlJlcGF0Y2hJbnQzMnMsIDEpOwogICAgICAgICBjYWNoZUZsdXNoKHdo
ZXJlLCBzaXplb2YoaW50KSAqIDIpOwogICAgIH0KIApAQCAtMjc5Miw2ICsyNzk5LDcgQEAgcHVi
bGljOgogICAgIHN0YXRpYyB2b2lkIHJlbGlua0p1bXAodm9pZCogZnJvbSwgdm9pZCogdG8pCiAg
ICAgewogICAgICAgICByZWxpbmtKdW1wT3JDYWxsPEJyYW5jaFR5cGVfSk1QPihyZWludGVycHJl
dF9jYXN0PGludCo+KGZyb20pLCByZWludGVycHJldF9jYXN0PGNvbnN0IGludCo+KGZyb20pLCB0
byk7CisgICAgICAgIFdURjo6YXRvbWljRXhjaGFuZ2VBZGQoJmdfbnVtYmVyT2ZSZWxpbmtKdW1w
cywgMSk7CiAgICAgICAgIGNhY2hlRmx1c2goZnJvbSwgc2l6ZW9mKGludCkpOwogICAgIH0KICAg
ICAKQEAgLTI4MDMsNiArMjgxMSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCByZWxpbmtD
YWxsKHZvaWQqIGZyb20sIHZvaWQqIHRvKQogICAgIHsKICAgICAgICAgcmVsaW5rSnVtcE9yQ2Fs
bDxCcmFuY2hUeXBlX0NBTEw+KHJlaW50ZXJwcmV0X2Nhc3Q8aW50Kj4oZnJvbSkgLSAxLCByZWlu
dGVycHJldF9jYXN0PGNvbnN0IGludCo+KGZyb20pIC0gMSwgdG8pOworICAgICAgICBXVEY6OmF0
b21pY0V4Y2hhbmdlQWRkKCZnX251bWJlck9mUmVsaW5rQ2FsbHMsIDEpOwogICAgICAgICBjYWNo
ZUZsdXNoKHJlaW50ZXJwcmV0X2Nhc3Q8aW50Kj4oZnJvbSkgLSAxLCBzaXplb2YoaW50KSk7CiAg
ICAgfQogCkBAIC0yODQ2LDYgKzI4NTUsNyBAQCBwdWJsaWM6CiAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKHJvdW5kVXBUb011bHRpcGxlT2Y8aW5zdHJ1Y3Rpb25TaXplPih3aGVyZSkgPT0gd2hlcmUp
OwogICAgICAgICBwZXJmb3JtSklUTWVtY3B5KHdoZXJlLCAmaW5zbiwgc2l6ZW9mKGludCkpOwog
CisgICAgICAgIFdURjo6YXRvbWljRXhjaGFuZ2VBZGQoJmdfbnVtYmVyT2ZSZXBhdGNoQ29tcGFj
dHMsIDEpOwogICAgICAgICBjYWNoZUZsdXNoKHdoZXJlLCBzaXplb2YoaW50KSk7CiAgICAgfQog
CkBAIC0yODYwLDYgKzI4NzAsNyBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgdm9pZCBjYWNoZUZs
dXNoKHZvaWQqIGNvZGUsIHNpemVfdCBzaXplKQogICAgIHsKKyAgICAgICAgV1RGOjphdG9taWNF
eGNoYW5nZUFkZCgmZ19udW1iZXJPZkNhY2hlRmx1c2hlcywgMSk7CiAjaWYgT1MoREFSV0lOKQog
ICAgICAgICBzeXNfY2FjaGVfY29udHJvbChrQ2FjaGVGdW5jdGlvblByZXBhcmVGb3JFeGVjdXRp
b24sIGNvZGUsIHNpemUpOwogI2VsaWYgT1MoRlVDSFNJQSkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9hc3NlbWJsZXIvQVJNNjRFQXNzZW1ibGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BUk02NEVBc3NlbWJsZXIuaAkocmV2aXNpb24gMjc2
OTc3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BUk02NEVBc3NlbWJsZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtMzk2LDggKzM5NiwxMCBAQCBwdWJsaWM6CiAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKHJvdW5kVXBUb011bHRpcGxlT2Y8aW5zdHJ1Y3Rpb25TaXplPihhZGRyZXNz
KSA9PSBhZGRyZXNzKTsKICAgICAgICAgcGVyZm9ybUpJVE1lbWNweShhZGRyZXNzLCBidWZmZXIs
IHNpemVvZihpbnQpICogNCk7CiAKLSAgICAgICAgaWYgKGZsdXNoKQorICAgICAgICBpZiAoZmx1
c2gpIHsKKyAgICAgICAgICAgIFdURjo6YXRvbWljRXhjaGFuZ2VBZGQoJmdfbnVtYmVyT2ZTZXRQ
b2ludGVycywgMSk7CiAgICAgICAgICAgICBjYWNoZUZsdXNoKGFkZHJlc3MsIHNpemVvZihpbnQp
ICogNCk7CisgICAgICAgIH0KICAgICB9CiAKICAgICBzdGF0aWMgdm9pZCogcmVhZFBvaW50ZXIo
dm9pZCogd2hlcmUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fic3Ry
YWN0TWFjcm9Bc3NlbWJsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaAkocmV2aXNpb24gMjc2OTc3KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTk3MSw2ICs5NzEsMTIgQEAgcHVibGljOgogICAgICAgICBtX2xp
bmtUYXNrcy5hcHBlbmQoY3JlYXRlU2hhcmVkVGFzazx2b2lkKExpbmtCdWZmZXImKT4oZnVuY3Rv
cikpOwogICAgIH0KIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBh
ZGRMYXRlTGlua1Rhc2soY29uc3QgRnVuY3RvciYgZnVuY3RvcikgLy8gUnVuIGFmdGVyIGFsbCBs
aW5rIHRhc2tzCisgICAgeworICAgICAgICBtX2xhdGVMaW5rVGFza3MuYXBwZW5kKGNyZWF0ZVNo
YXJlZFRhc2s8dm9pZChMaW5rQnVmZmVyJik+KGZ1bmN0b3IpKTsKKyAgICB9CisKICNpZiBDT01Q
SUxFUihHQ0MpCiAgICAgLy8gV29ya2Fyb3VuZCBmb3IgR0NDIGRlbWFuZGluZyB0aGF0IG1lbWNw
eSAibXVzdCBiZSB0aGUgbmFtZSBvZiBhIGZ1bmN0aW9uIHdpdGggZXh0ZXJuYWwgbGlua2FnZSIu
CiAgICAgc3RhdGljIHZvaWQqIG1lbWNweSh2b2lkKiBkc3QsIGNvbnN0IHZvaWQqIHNyYywgc2l6
ZV90IHNpemUpCkBAIC0xMTE0LDYgKzExMjAsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgYm9vbCBtX2Fs
bG93U2NyYXRjaFJlZ2lzdGVyIHsgdHJ1ZSB9OwogCiAgICAgVmVjdG9yPFJlZlB0cjxTaGFyZWRU
YXNrPHZvaWQoTGlua0J1ZmZlciYpPj4+IG1fbGlua1Rhc2tzOworICAgIFZlY3RvcjxSZWZQdHI8
U2hhcmVkVGFzazx2b2lkKExpbmtCdWZmZXImKT4+PiBtX2xhdGVMaW5rVGFza3M7CiAKICAgICBm
cmllbmQgY2xhc3MgTGlua0J1ZmZlcjsKIH07IC8vIGNsYXNzIEFic3RyYWN0TWFjcm9Bc3NlbWJs
ZXIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQXNzZW1ibGVyQ29tbW9u
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fzc2Vt
YmxlckNvbW1vbi5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fz
c2VtYmxlci9Bc3NlbWJsZXJDb21tb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDQg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiQXNzZW1ibGVyQ29tbW9uLmgiCisKK25hbWVzcGFjZSBKU0MgeworCit1aW50NjRfdCBnX251
bWJlck9mQ2FjaGVGbHVzaGVzOwordWludDY0X3QgZ19udW1iZXJPZlJlcGxhY2VXaXRoVk1IYWx0
czsKK3VpbnQ2NF90IGdfbnVtYmVyT2ZSZXBsYWNlV2l0aEp1bXBzOwordWludDY0X3QgZ19udW1i
ZXJPZlJlcGxhY2VXaXRoTG9hZHM7Cit1aW50NjRfdCBnX251bWJlck9mUmVwbGFjZVdpdGhBZGRy
ZXNzQ29tcHV0YXRpb25zOwordWludDY0X3QgZ19udW1iZXJPZlNldFBvaW50ZXJzOwordWludDY0
X3QgZ19udW1iZXJPZlJlcGF0Y2hJbnQzMnM7Cit1aW50NjRfdCBnX251bWJlck9mUmVsaW5rSnVt
cHM7Cit1aW50NjRfdCBnX251bWJlck9mUmVsaW5rQ2FsbHM7Cit1aW50NjRfdCBnX251bWJlck9m
UmVwYXRjaENvbXBhY3RzOwordWludDY0X3QgZ19udW1iZXJPZk5ld0NvZGVGaW5hbGl6YXRpb25z
OwordWludDY0X3QgZ19udW1iZXJPZkluUGxhY2VGaW5hbGl6YXRpb25zOworCit9IC8vIG5hbWVz
cGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9Bc3NlbWJs
ZXJDb21tb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVy
L0Fzc2VtYmxlckNvbW1vbi5oCShyZXZpc2lvbiAyNzY5NzcpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL0Fzc2VtYmxlckNvbW1vbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOTYs
NCArMjk2LDE3IEBAIHByaXZhdGU6CiAgICAgaW50IG1fdmFsdWU7CiB9OwogCitKU19FWFBPUlRf
UFJJVkFURSBleHRlcm4gdWludDY0X3QgZ19udW1iZXJPZkNhY2hlRmx1c2hlczsKK0pTX0VYUE9S
VF9QUklWQVRFIGV4dGVybiB1aW50NjRfdCBnX251bWJlck9mUmVwbGFjZVdpdGhWTUhhbHRzOwor
SlNfRVhQT1JUX1BSSVZBVEUgZXh0ZXJuIHVpbnQ2NF90IGdfbnVtYmVyT2ZSZXBsYWNlV2l0aEp1
bXBzOworSlNfRVhQT1JUX1BSSVZBVEUgZXh0ZXJuIHVpbnQ2NF90IGdfbnVtYmVyT2ZSZXBsYWNl
V2l0aExvYWRzOworSlNfRVhQT1JUX1BSSVZBVEUgZXh0ZXJuIHVpbnQ2NF90IGdfbnVtYmVyT2ZS
ZXBsYWNlV2l0aEFkZHJlc3NDb21wdXRhdGlvbnM7CitKU19FWFBPUlRfUFJJVkFURSBleHRlcm4g
dWludDY0X3QgZ19udW1iZXJPZlNldFBvaW50ZXJzOworSlNfRVhQT1JUX1BSSVZBVEUgZXh0ZXJu
IHVpbnQ2NF90IGdfbnVtYmVyT2ZSZXBhdGNoSW50MzJzOworSlNfRVhQT1JUX1BSSVZBVEUgZXh0
ZXJuIHVpbnQ2NF90IGdfbnVtYmVyT2ZSZWxpbmtKdW1wczsKK0pTX0VYUE9SVF9QUklWQVRFIGV4
dGVybiB1aW50NjRfdCBnX251bWJlck9mUmVsaW5rQ2FsbHM7CitKU19FWFBPUlRfUFJJVkFURSBl
eHRlcm4gdWludDY0X3QgZ19udW1iZXJPZlJlcGF0Y2hDb21wYWN0czsKK0pTX0VYUE9SVF9QUklW
QVRFIGV4dGVybiB1aW50NjRfdCBnX251bWJlck9mTmV3Q29kZUZpbmFsaXphdGlvbnM7CitKU19F
WFBPUlRfUFJJVkFURSBleHRlcm4gdWludDY0X3QgZ19udW1iZXJPZkluUGxhY2VGaW5hbGl6YXRp
b25zOworCiB9IC8vIG5hbWVzcGFjZSBKU0MuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL0xpbmtCdWZmZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5jcHAJKHJldmlzaW9uIDI3Njk3NykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQzMiw2ICs0MzIsNyBAQCB2b2lkIExpbmtCdWZmZXI6OmxpbmtDb2RlKE1hY3JvQXNzZW1i
bGVyCiAjZW5kaWYgLy8gIUVOQUJMRShCUkFOQ0hfQ09NUEFDVElPTikKIAogICAgIG1fbGlua1Rh
c2tzID0gV1RGTW92ZShtYWNyb0Fzc2VtYmxlci5tX2xpbmtUYXNrcyk7CisgICAgbV9sYXRlTGlu
a1Rhc2tzID0gV1RGTW92ZShtYWNyb0Fzc2VtYmxlci5tX2xhdGVMaW5rVGFza3MpOwogfQogCiB2
b2lkIExpbmtCdWZmZXI6OmFsbG9jYXRlKE1hY3JvQXNzZW1ibGVyJiBtYWNyb0Fzc2VtYmxlciwg
SklUQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQpAQCAtNDY0LDYgKzQ2NSw4IEBAIHZvaWQgTGlu
a0J1ZmZlcjo6cGVyZm9ybUZpbmFsaXphdGlvbigpCiB7CiAgICAgZm9yIChhdXRvJiB0YXNrIDog
bV9saW5rVGFza3MpCiAgICAgICAgIHRhc2stPnJ1bigqdGhpcyk7CisgICAgZm9yIChhdXRvJiB0
YXNrIDogbV9sYXRlTGlua1Rhc2tzKQorICAgICAgICB0YXNrLT5ydW4oKnRoaXMpOwogCiAjaWZu
ZGVmIE5ERUJVRwogICAgIEFTU0VSVChtX2lzSnVtcElzbGFuZCB8fCAhaXNDb21waWxhdGlvblRo
cmVhZCgpKTsKQEAgLTQ3MSw2ICs0NzQsMTEgQEAgdm9pZCBMaW5rQnVmZmVyOjpwZXJmb3JtRmlu
YWxpemF0aW9uKCkKICAgICBBU1NFUlQoaXNWYWxpZCgpKTsKICAgICBtX2NvbXBsZXRlZCA9IHRy
dWU7CiAjZW5kaWYKKworICAgIGlmIChtX2V4ZWN1dGFibGVNZW1vcnkpCisgICAgICAgIFdURjo6
YXRvbWljRXhjaGFuZ2VBZGQoJmdfbnVtYmVyT2ZOZXdDb2RlRmluYWxpemF0aW9ucywgMSk7Cisg
ICAgZWxzZQorICAgICAgICBXVEY6OmF0b21pY0V4Y2hhbmdlQWRkKCZnX251bWJlck9mSW5QbGFj
ZUZpbmFsaXphdGlvbnMsIDEpOwogICAgIAogICAgIE1hY3JvQXNzZW1ibGVyOjpjYWNoZUZsdXNo
KGNvZGUoKSwgbV9zaXplKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvTGlua0J1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3Nl
bWJsZXIvTGlua0J1ZmZlci5oCShyZXZpc2lvbiAyNzY5NzcpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzc1LDYgKzM3
NSw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2FscmVhZHlEaXNhc3NlbWJsZWQgeyBmYWxzZSB9
OwogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxMaW5rQnVmZmVyUHRyVGFnPiBtX2NvZGU7CiAg
ICAgVmVjdG9yPFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoTGlua0J1ZmZlciYpPj4+IG1fbGlua1Rh
c2tzOworICAgIFZlY3RvcjxSZWZQdHI8U2hhcmVkVGFzazx2b2lkKExpbmtCdWZmZXImKT4+PiBt
X2xhdGVMaW5rVGFza3M7CiB9OwogCiAjaWYgT1MoTElOVVgpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCShyZXZpc2lvbiAyNzY5NzcpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE1ODAsMTEgKzE1ODAsNiBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlSW1w
bChBY2Nlc3NHZW5lCiAgICAgICAgIC8vIFN0dWZmIGZvciBjdXN0b20gZ2V0dGVycy9zZXR0ZXJz
LgogICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgb3BlcmF0aW9uQ2FsbDsKIAotICAgICAgICAv
LyBTdHVmZiBmb3IgSlMgZ2V0dGVycy9zZXR0ZXJzLgotICAgICAgICBDQ2FsbEhlbHBlcnM6OkRh
dGFMYWJlbFB0ciBhZGRyZXNzT2ZMaW5rRnVuY3Rpb25DaGVjazsKLSAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpDYWxsIGZhc3RQYXRoQ2FsbDsKLSAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIHNsb3dQ
YXRoQ2FsbDsKLQogICAgICAgICAvLyBUaGlzIGFsc28gZG9lcyB0aGUgbmVjZXNzYXJ5IGNhbGN1
bGF0aW9ucyBvZiB3aGV0aGVyIG9yIG5vdCB3ZSdyZSBhbgogICAgICAgICAvLyBleGNlcHRpb24g
aGFuZGxpbmcgY2FsbCBzaXRlLgogICAgICAgICBBY2Nlc3NHZW5lcmF0aW9uU3RhdGU6OlNwaWxs
U3RhdGUgc3BpbGxTdGF0ZSA9IHN0YXRlLnByZXNlcnZlTGl2ZVJlZ2lzdGVyc1RvU3RhY2tGb3JD
YWxsKCk7CkBAIC0xNzAxLDI0ICsxNjk2LDIyIEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVJ
bXBsKEFjY2Vzc0dlbmUKICAgICAgICAgICAgICAgICAgICAgICAgIHZpcnR1YWxSZWdpc3RlckZv
ckFyZ3VtZW50SW5jbHVkaW5nVGhpcygxKS5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpKTsK
ICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIHNsb3dDYXNl
ID0gaml0LmJyYW5jaFB0cldpdGhQYXRjaCgKLSAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6
Ok5vdEVxdWFsLCBsb2FkZWRWYWx1ZUdQUiwgYWRkcmVzc09mTGlua0Z1bmN0aW9uQ2hlY2ssCi0g
ICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG51bGxwdHIpKTsKKyAg
ICAgICAgICAgIGF1dG8gc2xvd0Nhc2UgPSBhY2Nlc3MuY2FsbExpbmtJbmZvKCktPmVtaXRGYXN0
UGF0aChqaXQsIGxvYWRlZFZhbHVlR1BSLCBsb2FkZWRWYWx1ZUdQUiA9PSBHUFJJbmZvOjpyZWdU
MiA/IEdQUkluZm86OnJlZ1QwIDogR1BSSW5mbzo6cmVnVDIsIEpJVENvZGU6OmlzT3B0aW1pemlu
Z0pJVChjb2RlQmxvY2stPmppdFR5cGUoKSkgPyBDYWxsTGlua0luZm86OlVzZURhdGFJQzo6Tm8g
OiBDYWxsTGlua0luZm86OlVzZURhdGFJQzo6WWVzKTsKKyAgICAgICAgICAgIGF1dG8gZG9uZUxv
Y2F0aW9uID0gaml0LmxhYmVsKCk7CiAKLSAgICAgICAgICAgIGZhc3RQYXRoQ2FsbCA9IGppdC5u
ZWFyQ2FsbCgpOwogICAgICAgICAgICAgaWYgKG1fdHlwZSA9PSBHZXR0ZXIpCiAgICAgICAgICAg
ICAgICAgaml0LnNldHVwUmVzdWx0cyh2YWx1ZVJlZ3MpOwogICAgICAgICAgICAgZG9uZS5hcHBl
bmQoaml0Lmp1bXAoKSk7CiAKICAgICAgICAgICAgIHNsb3dDYXNlLmxpbmsoJmppdCk7CisgICAg
ICAgICAgICBhdXRvIHNsb3dQYXRoU3RhcnQgPSBqaXQubGFiZWwoKTsKICAgICAgICAgICAgIGpp
dC5tb3ZlKGxvYWRlZFZhbHVlR1BSLCBHUFJJbmZvOjpyZWdUMCk7CiAjaWYgVVNFKEpTVkFMVUUz
Ml82NCkKICAgICAgICAgICAgIC8vIFdlICphbHdheXMqIGtub3cgdGhhdCB0aGUgZ2V0dGVyL3Nl
dHRlciwgaWYgbm9uLW51bGwsIGlzIGEgY2VsbC4KICAgICAgICAgICAgIGppdC5tb3ZlKENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLCBHUFJJbmZvOjpyZWdUMSk7
CiAjZW5kaWYKLSAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0
cihhY2Nlc3MuY2FsbExpbmtJbmZvKCkpLCBHUFJJbmZvOjpyZWdUMik7CiAgICAgICAgICAgICBq
aXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoZ2xvYmFsT2JqZWN0KSwgR1BSSW5m
bzo6cmVnVDMpOwotICAgICAgICAgICAgc2xvd1BhdGhDYWxsID0gaml0Lm5lYXJDYWxsKCk7Cisg
ICAgICAgICAgICBhY2Nlc3MuY2FsbExpbmtJbmZvKCktPmVtaXRTbG93UGF0aCh2bSwgaml0KTsK
ICAgICAgICAgICAgIGlmIChtX3R5cGUgPT0gR2V0dGVyKQogICAgICAgICAgICAgICAgIGppdC5z
ZXR1cFJlc3VsdHModmFsdWVSZWdzKTsKICAgICAgICAgICAgIGRvbmUuYXBwZW5kKGppdC5qdW1w
KCkpOwpAQCAtMTczNSwxNSArMTcyOCwxMCBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlSW1w
bChBY2Nlc3NHZW5lCiAgICAgICAgICAgICBib29sIGNhbGxIYXNSZXR1cm5WYWx1ZSA9IGlzR2V0
dGVyKCk7CiAgICAgICAgICAgICByZXN0b3JlTGl2ZVJlZ2lzdGVyc0Zyb21TdGFja0ZvckNhbGwo
c3BpbGxTdGF0ZSwgY2FsbEhhc1JldHVyblZhbHVlKTsKIAotICAgICAgICAgICAgaml0LmFkZExp
bmtUYXNrKFs9LCAmdm1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgICAgICAg
ICAgdGhpcy0+YXM8R2V0dGVyU2V0dGVyQWNjZXNzQ2FzZT4oKS5jYWxsTGlua0luZm8oKS0+c2V0
Q2FsbExvY2F0aW9ucygKLSAgICAgICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJ
bnRlcm5hbFB0clRhZz4obGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8SlNJbnRlcm5hbFB0
clRhZz4oc2xvd1BhdGhDYWxsKSksCi0gICAgICAgICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxh
YmVsPEpTSW50ZXJuYWxQdHJUYWc+KGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRy
VGFnPihhZGRyZXNzT2ZMaW5rRnVuY3Rpb25DaGVjaykpLAotICAgICAgICAgICAgICAgICAgICBs
aW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxKU0ludGVybmFsUHRyVGFnPihmYXN0UGF0aENh
bGwpKTsKLQotICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluaygKLSAgICAgICAgICAgICAg
ICAgICAgc2xvd1BhdGhDYWxsLAotICAgICAgICAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJl
bDxKSVRUaHVua1B0clRhZz4odm0uZ2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5j
b2RlKCkpKTsKKyAgICAgICAgICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxp
bmtCdWZmZXIpIHsKKyAgICAgICAgICAgICAgICB0aGlzLT5hczxHZXR0ZXJTZXR0ZXJBY2Nlc3ND
YXNlPigpLmNhbGxMaW5rSW5mbygpLT5zZXRDb2RlTG9jYXRpb25zKAorICAgICAgICAgICAgICAg
ICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oc2xvd1BhdGhTdGFy
dCksCisgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFs
UHRyVGFnPihkb25lTG9jYXRpb24pKTsKICAgICAgICAgICAgIH0pOwogICAgICAgICB9IGVsc2Ug
ewogICAgICAgICAgICAgQVNTRVJUKG1fdHlwZSA9PSBDdXN0b21WYWx1ZUdldHRlciB8fCBtX3R5
cGUgPT0gQ3VzdG9tQWNjZXNzb3JHZXR0ZXIgfHwgbV90eXBlID09IEN1c3RvbVZhbHVlU2V0dGVy
IHx8IG1fdHlwZSA9PSBDdXN0b21BY2Nlc3NvclNldHRlcik7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmNwcAkocmV2aXNpb24gMjc2OTc3
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI2LDEyICsyNiwxNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lu
Y2x1ZGUgIkNhbGxMaW5rSW5mby5oIgogCisjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXJQcmludGVy
LmgiCisjaW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgiCiAjaW5jbHVkZSAiQ2FsbEZyYW1lU2h1ZmZs
ZURhdGEuaCIKICNpbmNsdWRlICJGdW5jdGlvbkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIkpTQ2Vs
bElubGluZXMuaCIKICNpbmNsdWRlICJPcGNvZGUuaCIKKyNpbmNsdWRlICJMaW5rQnVmZmVyLmgi
CiAjaW5jbHVkZSAiUmVwYXRjaC5oIgorI2luY2x1ZGUgIlRodW5rR2VuZXJhdG9ycy5oIgogI2lu
Y2x1ZGUgPHd0Zi9MaXN0RHVtcC5oPgorI2luY2x1ZGUgIkRpc2FsbG93TWFjcm9TY3JhdGNoUmVn
aXN0ZXJVc2FnZS5oIgogCiAjaWYgRU5BQkxFKEpJVCkKIG5hbWVzcGFjZSBKU0MgewpAQCAtNzcs
NiArODIsNyBAQCBDYWxsTGlua0luZm86OkNhbGxMaW5rSW5mbyhDb2RlT3JpZ2luIGNvCiAgICAg
LCBtX2FsbG93U3R1YnModHJ1ZSkKICAgICAsIG1fY2xlYXJlZEJ5SmV0dGlzb24oZmFsc2UpCiAg
ICAgLCBtX2NhbGxUeXBlKE5vbmUpCisgICAgLCBtX3VzZURhdGFJQyhzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oVXNlRGF0YUlDOjpZZXMpKQogewogfQogCkBAIC0xMDIsNDcgKzEwOCw1MSBAQCB2b2lk
IENhbGxMaW5rSW5mbzo6dW5saW5rKFZNJiB2bSkKICAgICAvLyBXZSBjb3VsZCBiZSBjYWxsZWQg
ZXZlbiBpZiB3ZSdyZSBub3QgbGlua2VkIGFueW1vcmUgYmVjYXVzZSBvZiBob3cgcG9seW1vcnBo
aWMgY2FsbHMKICAgICAvLyB3b3JrLiBFYWNoIGNhbGxzaXRlIHdpdGhpbiB0aGUgcG9seW1vcnBo
aWMgY2FsbCBzdHViIG1heSBzZXBhcmF0ZWx5IGFzayB1cyB0byB1bmxpbmsoKS4KICAgICBpZiAo
aXNMaW5rZWQoKSkKLSAgICAgICAgdW5saW5rRm9yKHZtLCAqdGhpcyk7CisgICAgICAgIHVubGlu
a0NhbGwodm0sICp0aGlzKTsKIAogICAgIC8vIEVpdGhlciB3ZSB3ZXJlIHVubGlua2VkLCBpbiB3
aGljaCBjYXNlIHdlIHNob3VsZCBub3QgaGF2ZSBiZWVuIG9uIGFueSBsaXN0LCBvciB3ZSB1bmxp
bmtlZAogICAgIC8vIG91cnNlbHZlcyBzbyB0aGF0IHdlJ3JlIG5vdCBvbiBhbnkgbGlzdCBhbnlt
b3JlLgogICAgIFJFTEVBU0VfQVNTRVJUKCFpc09uTGlzdCgpKTsKIH0KIAotQ29kZUxvY2F0aW9u
TmVhckNhbGw8SlNJbnRlcm5hbFB0clRhZz4gQ2FsbExpbmtJbmZvOjpjYWxsUmV0dXJuTG9jYXRp
b24oKQorQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gQ2FsbExpbmtJbmZvOjpm
YXN0UGF0aFN0YXJ0KCkKIHsKLSAgICBSRUxFQVNFX0FTU0VSVCghaXNEaXJlY3QoKSk7Ci0gICAg
cmV0dXJuIENvZGVMb2NhdGlvbk5lYXJDYWxsPEpTSW50ZXJuYWxQdHJUYWc+KG1fY2FsbFJldHVy
bkxvY2F0aW9uT3JQYXRjaGFibGVKdW1wLCBOZWFyQ2FsbE1vZGU6OlJlZ3VsYXIpOworICAgIHJl
dHVybiBDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHI8SlNJbnRlcm5hbFB0clRhZz4obV9mYXN0UGF0
aFN0YXJ0KTsKIH0KIAotQ29kZUxvY2F0aW9uSnVtcDxKU0ludGVybmFsUHRyVGFnPiBDYWxsTGlu
a0luZm86OnBhdGNoYWJsZUp1bXAoKQorQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRh
Zz4gQ2FsbExpbmtJbmZvOjpzbG93UGF0aFN0YXJ0KCkKIHsKLSAgICBSRUxFQVNFX0FTU0VSVChj
YWxsVHlwZSgpID09IERpcmVjdFRhaWxDYWxsKTsKLSAgICByZXR1cm4gQ29kZUxvY2F0aW9uSnVt
cDxKU0ludGVybmFsUHRyVGFnPihtX2NhbGxSZXR1cm5Mb2NhdGlvbk9yUGF0Y2hhYmxlSnVtcCk7
CisgICAgUkVMRUFTRV9BU1NFUlQoIWlzRGF0YUlDKCkpOworICAgIHJldHVybiB1LmNvZGVJQy5t
X3Nsb3dQYXRoU3RhcnQ7CiB9CiAKLUNvZGVMb2NhdGlvbkRhdGFMYWJlbFB0cjxKU0ludGVybmFs
UHRyVGFnPiBDYWxsTGlua0luZm86OmhvdFBhdGhCZWdpbigpCitDb2RlTG9jYXRpb25MYWJlbDxK
U0ludGVybmFsUHRyVGFnPiBDYWxsTGlua0luZm86OmRvbmVMb2NhdGlvbigpCiB7CiAgICAgUkVM
RUFTRV9BU1NFUlQoIWlzRGlyZWN0KCkpOwotICAgIHJldHVybiBDb2RlTG9jYXRpb25EYXRhTGFi
ZWxQdHI8SlNJbnRlcm5hbFB0clRhZz4obV9ob3RQYXRoQmVnaW5PclNsb3dQYXRoU3RhcnQpOwor
ICAgIHJldHVybiBtX2RvbmVMb2NhdGlvbjsKIH0KIAotQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRl
cm5hbFB0clRhZz4gQ2FsbExpbmtJbmZvOjpzbG93UGF0aFN0YXJ0KCkKLXsKLSAgICBSRUxFQVNF
X0FTU0VSVChpc0RpcmVjdCgpKTsKLSAgICByZXR1cm4gbV9ob3RQYXRoQmVnaW5PclNsb3dQYXRo
U3RhcnQ7Ci19Ci0KLXZvaWQgQ2FsbExpbmtJbmZvOjpzZXRDYWxsZWUoVk0mIHZtLCBKU0NlbGwq
IG93bmVyLCBKU09iamVjdCogY2FsbGVlKQordm9pZCBDYWxsTGlua0luZm86OnNldE1vbm9tb3Jw
aGljQ2FsbGVlKFZNJiB2bSwgSlNDZWxsKiBvd25lciwgSlNPYmplY3QqIGNhbGxlZSwgTWFjcm9B
c3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGNvZGVQdHIpCiB7CiAgICAgUkVMRUFTRV9B
U1NFUlQoIWlzRGlyZWN0KCkpOwogICAgIG1fY2FsbGVlT3JDb2RlQmxvY2suc2V0KHZtLCBvd25l
ciwgY2FsbGVlKTsKKworICAgIGlmIChpc0RhdGFJQygpKSAKKyAgICAgICAgdS5kYXRhSUMubV9t
b25vbW9ycGhpY0NhbGxEZXN0aW5hdGlvbiA9IGNvZGVQdHI7CisgICAgZWxzZSB7CisgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoTmVhckNhbGwodS5jb2RlSUMubV9jYWxsTG9jYXRpb24s
IENvZGVMb2NhdGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+KGNvZGVQdHIpKTsKKyAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OnJlcGF0Y2hQb2ludGVyKHUuY29kZUlDLm1fY2FsbGVlTG9jYXRpb24sIGNh
bGxlZSk7CisgICAgfQogfQogCiB2b2lkIENhbGxMaW5rSW5mbzo6Y2xlYXJDYWxsZWUoKQogewog
ICAgIFJFTEVBU0VfQVNTRVJUKCFpc0RpcmVjdCgpKTsKICAgICBtX2NhbGxlZU9yQ29kZUJsb2Nr
LmNsZWFyKCk7CisgICAgaWYgKGlzRGF0YUlDKCkpCisgICAgICAgIHUuZGF0YUlDLm1fbW9ub21v
cnBoaWNDYWxsRGVzdGluYXRpb24gPSBudWxscHRyOworICAgIGVsc2UKKyAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OnJlcGF0Y2hQb2ludGVyKHUuY29kZUlDLm1fY2FsbGVlTG9jYXRpb24sIG51bGxw
dHIpOwogfQogCiBKU09iamVjdCogQ2FsbExpbmtJbmZvOjpjYWxsZWUoKQpAQCAtMjg0LDYgKzI5
NCwyMDYgQEAgdm9pZCBDYWxsTGlua0luZm86OnNldEZyYW1lU2h1ZmZsZURhdGEoYwogICAgIG1f
ZnJhbWVTaHVmZmxlRGF0YS0+c2hyaW5rVG9GaXQoKTsKIH0KIAordm9pZCBDYWxsTGlua0luZm86
OmVtaXRGaXJzdEluc3RydWN0aW9uRm9yRGF0YUlDKENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcg
Y2FsbExpbmtJbmZvR1BSKQoreworICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gaml0LnNjcmF0Y2hS
ZWdpc3RlcigpOworICAgIERpc2FsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBkaXNhbGxv
d1NjcmF0Y2goaml0KTsKKyAgICAvLyBXaGVuIHJlcGF0Y2hpbmcsIHdlIGp1c3Qgb3ZlcndyaXRl
IHRoZSBmaXJzdCBpbnN0cnVjdGlvbiBiYWNrLCBzaW5jZSBpdCdsbCBoYXZlIGJlZW4gcmVwbGFj
ZWQgd2l0aCBhIGp1bXAgdG8gdGhlIHBvbHltb3JwaGljIGNhbGwgc3R1Yi4KKyAgICBzaXplX3Qg
c3RhcnRTaXplID0gaml0Lm1fYXNzZW1ibGVyLmJ1ZmZlcigpLmNvZGVTaXplKCk7CisgICAgaml0
LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGNhbGxMaW5rSW5mb0dQUiwgb2Zmc2V0T2ZD
YWxsZWUoKSksIHNjcmF0Y2hHUFIpOyAKKyAgICBzaXplX3QgbG9hZFNpemUgPSBqaXQubV9hc3Nl
bWJsZXIuYnVmZmVyKCkuY29kZVNpemUoKSAtIHN0YXJ0U2l6ZTsKKyAgICBpZiAobG9hZFNpemUg
PCBzdGF0aWNfY2FzdDxzaXplX3Q+KENDYWxsSGVscGVyczo6cGF0Y2hhYmxlSnVtcFNpemUoKSkp
CisgICAgICAgIGppdC5lbWl0Tm9wcyhzdGF0aWNfY2FzdDxzaXplX3Q+KENDYWxsSGVscGVyczo6
cGF0Y2hhYmxlSnVtcFNpemUoKSkgLSBsb2FkU2l6ZSk7Cit9CisKK01hY3JvQXNzZW1ibGVyOjpK
dW1wTGlzdCBDYWxsTGlua0luZm86OmVtaXRGYXN0UGF0aEltcGwoQ0NhbGxIZWxwZXJzJiBqaXQs
IEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQyB1c2VE
YXRhSUMsIFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpCit7CisgICAg
c2V0VXNlc0RhdGFJQ3ModXNlRGF0YUlDKTsKKyAgICBpZiAoaXNEYXRhSUMoKSkgeworICAgICAg
ICBSRUxFQVNFX0FTU0VSVChjYWxsTGlua0luZm9HUFIgIT0gQ0NhbGxIZWxwZXJzOjpJbnZhbGlk
R1BSUmVnKTsKKyAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHRo
aXMpLCBjYWxsTGlua0luZm9HUFIpOworICAgICAgICB1LmRhdGFJQy5tX2NhbGxMaW5rSW5mb0dQ
UiA9IGNhbGxMaW5rSW5mb0dQUjsKKyAgICB9CisKKyAgICBhdXRvIGZhc3RQYXRoU3RhcnQgPSBq
aXQubGFiZWwoKTsKKyAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVm
ZmVyKSB7CisgICAgICAgIG1fZmFzdFBhdGhTdGFydCA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxK
U0ludGVybmFsUHRyVGFnPihmYXN0UGF0aFN0YXJ0KTsKKyAgICB9KTsKKworICAgIENDYWxsSGVs
cGVyczo6SnVtcExpc3Qgc2xvd1BhdGg7CisKKyAgICBpZiAoaXNEYXRhSUMoKSkgeworICAgICAg
ICBHUFJSZWcgc2NyYXRjaEdQUiA9IGppdC5zY3JhdGNoUmVnaXN0ZXIoKTsKKyAgICAgICAgZW1p
dEZpcnN0SW5zdHJ1Y3Rpb25Gb3JEYXRhSUMoaml0LCBjYWxsTGlua0luZm9HUFIpOworICAgICAg
ICB7CisgICAgICAgICAgICBEaXNhbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgZGlzYWxs
b3dTY3JhdGNoKGppdCk7CisgICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQoaml0LmJyYW5jaFB0
cihDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCBzY3JhdGNoR1BSLCBjYWxsZWVHUFIpKTsKKyAgICAg
ICAgfQorICAgICAgICBpZiAoaXNUYWlsQ2FsbCgpKSB7CisgICAgICAgICAgICBwcmVwYXJlRm9y
VGFpbENhbGwoKTsKKyAgICAgICAgICAgIGppdC5mYXJKdW1wKENDYWxsSGVscGVyczo6QWRkcmVz
cyhjYWxsTGlua0luZm9HUFIsIG9mZnNldE9mTW9ub21vcnBoaWNDYWxsRGVzdGluYXRpb24oKSks
IEpTRW50cnlQdHJUYWcpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGppdC5jYWxsKEND
YWxsSGVscGVyczo6QWRkcmVzcyhjYWxsTGlua0luZm9HUFIsIG9mZnNldE9mTW9ub21vcnBoaWND
YWxsRGVzdGluYXRpb24oKSksIEpTRW50cnlQdHJUYWcpOworICAgIH0gZWxzZSB7CisgICAgICAg
IENDYWxsSGVscGVyczo6RGF0YUxhYmVsUHRyIGNhbGxlZUNoZWNrOworICAgICAgICBzbG93UGF0
aC5hcHBlbmQoaml0LmJyYW5jaFB0cldpdGhQYXRjaChDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCBj
YWxsZWVHUFIsIGNhbGxlZUNoZWNrLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobnVsbHB0
cikpKTsKKworICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2FsbDsKKyAgICAgICAgaWYgKGlz
VGFpbENhbGwoKSkgeworICAgICAgICAgICAgcHJlcGFyZUZvclRhaWxDYWxsKCk7CisgICAgICAg
ICAgICBjYWxsID0gaml0Lm5lYXJUYWlsQ2FsbCgpOworICAgICAgICB9IGVsc2UKKyAgICAgICAg
ICAgIGNhbGwgPSBqaXQubmVhckNhbGwoKTsKKyAgICAgICAgaml0LmFkZExpbmtUYXNrKFs9XSAo
TGlua0J1ZmZlciYgbGlua0J1ZmZlcikgeworICAgICAgICAgICAgdS5jb2RlSUMubV9jYWxsTG9j
YXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxKU0ludGVybmFsUHRyVGFnPihj
YWxsKTsKKyAgICAgICAgICAgIHUuY29kZUlDLm1fY2FsbGVlTG9jYXRpb24gPSBsaW5rQnVmZmVy
LmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oY2FsbGVlQ2hlY2spOworICAgICAgICB9KTsK
KyAgICB9CisKKyAgICByZXR1cm4gc2xvd1BhdGg7Cit9CisKK0NDYWxsSGVscGVyczo6SnVtcExp
c3QgQ2FsbExpbmtJbmZvOjplbWl0RmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBj
YWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQyB1c2VEYXRhSUMpCit7
CisgICAgUkVMRUFTRV9BU1NFUlQoIWlzVGFpbENhbGwoKSk7CisgICAgcmV0dXJuIGVtaXRGYXN0
UGF0aEltcGwoaml0LCBjYWxsZWVHUFIsIGNhbGxMaW5rSW5mb0dQUiwgdXNlRGF0YUlDLCBudWxs
cHRyKTsKK30KKworTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZW1pdFRh
aWxDYWxsRmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJl
ZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQyB1c2VEYXRhSUMsIFdURjo6RnVuY3Rpb248dm9p
ZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoaXNUYWlsQ2Fs
bCgpKTsKKyAgICByZXR1cm4gZW1pdEZhc3RQYXRoSW1wbChqaXQsIGNhbGxlZUdQUiwgY2FsbExp
bmtJbmZvR1BSLCB1c2VEYXRhSUMsIFdURk1vdmUocHJlcGFyZUZvclRhaWxDYWxsKSk7Cit9CisK
K3ZvaWQgQ2FsbExpbmtJbmZvOjplbWl0U2xvd1BhdGgoVk0mIHZtLCBDQ2FsbEhlbHBlcnMmIGpp
dCkKK3sKKyAgICBzZXRTbG93UGF0aENhbGxEZXN0aW5hdGlvbih2bS5nZXRDVElTdHViKGxpbmtD
YWxsVGh1bmtHZW5lcmF0b3IpLnRlbXBsYXRlIHJldGFnZ2VkQ29kZTxKU0VudHJ5UHRyVGFnPigp
KTsKKyAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIodGhpcyksIEdQUklu
Zm86OnJlZ1QyKTsKKyAgICBqaXQuY2FsbChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6
cmVnVDIsIG9mZnNldE9mU2xvd1BhdGhDYWxsRGVzdGluYXRpb24oKSksIEpTRW50cnlQdHJUYWcp
OworfQorCit2b2lkIENhbGxMaW5rSW5mbzo6ZW1pdERpcmVjdEZhc3RQYXRoKENDYWxsSGVscGVy
cyYgaml0KQoreworICAgIFJFTEVBU0VfQVNTRVJUKCFpc1RhaWxDYWxsKCkpOworCisgICAgc2V0
VXNlc0RhdGFJQ3MoVXNlRGF0YUlDOjpObyk7CisKKyAgICBhdXRvIGZhc3RQYXRoU3RhcnQgPSBq
aXQubGFiZWwoKTsKKyAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVm
ZmVyKSB7CisgICAgICAgIG1fZmFzdFBhdGhTdGFydCA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxK
U0ludGVybmFsUHRyVGFnPihmYXN0UGF0aFN0YXJ0KTsKKyAgICB9KTsKKworICAgIGF1dG8gY2Fs
bCA9IGppdC5uZWFyQ2FsbCgpOworICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXIm
IGxpbmtCdWZmZXIpIHsKKyAgICAgICAgdS5jb2RlSUMubV9jYWxsTG9jYXRpb24gPSBsaW5rQnVm
ZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxKU0ludGVybmFsUHRyVGFnPihjYWxsKTsKKyAgICB9KTsK
KyAgICBqaXQuYWRkTGF0ZUxpbmtUYXNrKFt0aGlzXSAoTGlua0J1ZmZlciYpIHsKKyAgICAgICAg
aW5pdGlhbGl6ZURpcmVjdENhbGwoKTsKKyAgICB9KTsKK30KKwordm9pZCBDYWxsTGlua0luZm86
OmVtaXREaXJlY3RUYWlsQ2FsbEZhc3RQYXRoKENDYWxsSGVscGVycyYgaml0LCBXVEY6OkZ1bmN0
aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKQoreworICAgIFJFTEVBU0VfQVNTRVJUKGlz
VGFpbENhbGwoKSk7CisKKyAgICBzZXRVc2VzRGF0YUlDcyhVc2VEYXRhSUM6Ok5vKTsKKworICAg
IGF1dG8gZmFzdFBhdGhTdGFydCA9IGppdC5sYWJlbCgpOworICAgIGppdC5hZGRMaW5rVGFzayhb
PV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgbV9mYXN0UGF0aFN0YXJ0ID0g
bGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KGZhc3RQYXRoU3RhcnQpOwor
ICAgIH0pOworCisgICAgLy8gLSBJZiB3ZSdyZSBub3QgeWV0IGxpbmtlZCwgdGhpcyBpcyBhIGp1
bXAgdG8gdGhlIHNsb3cgcGF0aC4KKyAgICAvLyAtIE9uY2Ugd2UncmUgbGlua2VkIHRvIGEgZmFz
dCBwYXRoLCB0aGlzIGdvZXMgYmFjayB0byBiZWluZyBub3BzIHNvIHdlIGZhbGwgdGhyb3VnaCB0
byB0aGUgbGlua2VkIGp1bXAuCisgICAgaml0LmVtaXROb3BzKENDYWxsSGVscGVyczo6cGF0Y2hh
YmxlSnVtcFNpemUoKSk7CisKKyAgICBwcmVwYXJlRm9yVGFpbENhbGwoKTsKKyAgICBhdXRvIGNh
bGwgPSBqaXQubmVhclRhaWxDYWxsKCk7CisgICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1
ZmZlciYgbGlua0J1ZmZlcikgeworICAgICAgICB1LmNvZGVJQy5tX2NhbGxMb2NhdGlvbiA9IGxp
bmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPEpTSW50ZXJuYWxQdHJUYWc+KGNhbGwpOworICAg
IH0pOworICAgIGppdC5hZGRMYXRlTGlua1Rhc2soW3RoaXNdIChMaW5rQnVmZmVyJikgeworICAg
ICAgICBpbml0aWFsaXplRGlyZWN0Q2FsbCgpOworICAgIH0pOworfQorCit2b2lkIENhbGxMaW5r
SW5mbzo6aW5pdGlhbGl6ZURpcmVjdENhbGwoKQoreworICAgIFJFTEVBU0VfQVNTRVJUKGlzRGly
ZWN0KCkpOworICAgIEFTU0VSVCh1LmNvZGVJQy5tX2NhbGxMb2NhdGlvbik7CisgICAgaWYgKGlz
VGFpbENhbGwoKSkgeworICAgICAgICBSRUxFQVNFX0FTU0VSVChmYXN0UGF0aFN0YXJ0KCkpOwor
ICAgICAgICBDQ2FsbEhlbHBlcnM6OmVtaXRKSVRDb2RlT3ZlcihmYXN0UGF0aFN0YXJ0KCksIFsm
XSAoQ0NhbGxIZWxwZXJzJiBqaXQpIHsKKyAgICAgICAgICAgIGF1dG8ganVtcCA9IGppdC5qdW1w
KCk7CisgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVm
ZmVyKSB7CisgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKGp1bXAsIHNsb3dQYXRoU3Rh
cnQoKSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSwgImluaXRpYWxpemUgZGlyZWN0IGNh
bGwiKTsKKyAgICB9IGVsc2UKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hOZWFyQ2Fs
bCh1LmNvZGVJQy5tX2NhbGxMb2NhdGlvbiwgc2xvd1BhdGhTdGFydCgpKTsKK30KKwordm9pZCBD
YWxsTGlua0luZm86OnNldERpcmVjdENhbGxUYXJnZXQoQ29kZUxvY2F0aW9uTGFiZWw8SlNFbnRy
eVB0clRhZz4gdGFyZ2V0KQoreworICAgIFJFTEVBU0VfQVNTRVJUKGlzRGlyZWN0KCkpOworCisg
ICAgaWYgKGlzVGFpbENhbGwoKSkgeworICAgICAgICBSRUxFQVNFX0FTU0VSVChmYXN0UGF0aFN0
YXJ0KCkpOworICAgICAgICBDQ2FsbEhlbHBlcnM6OmVtaXRKSVRDb2RlT3ZlcihmYXN0UGF0aFN0
YXJ0KCksIFsmXSAoQ0NhbGxIZWxwZXJzJiBqaXQpIHsKKyAgICAgICAgICAgIC8vIFdlIHJlc2Vy
dmVkIHRoaXMgbWFueSBieXRlcyBmb3IgdGhlIGp1bXAgYXQgZmFzdFBhdGhTdGFydCgpLiBNYWtl
IHRoYXQKKyAgICAgICAgICAgIC8vIGNvZGUgbm9wcyBub3cgc28gd2UgZmFsbCB0aHJvdWdoIHRv
IHRoZSBqdW1wIHRvIHRoZSBmYXN0IHBhdGguCisgICAgICAgICAgICBqaXQuZW1pdE5vcHMoQ0Nh
bGxIZWxwZXJzOjpwYXRjaGFibGVKdW1wU2l6ZSgpKTsgCisgICAgICAgIH0sICJTZXR0aW5nIGRp
cmVjdCBjYWxsIHRhcmdldCIpOworICAgIH0KKworICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNo
TmVhckNhbGwodS5jb2RlSUMubV9jYWxsTG9jYXRpb24sIHRhcmdldCk7Cit9CisKK3ZvaWQgQ2Fs
bExpbmtJbmZvOjpzZXRTbG93UGF0aENhbGxEZXN0aW5hdGlvbihNYWNyb0Fzc2VtYmxlckNvZGVQ
dHI8SlNFbnRyeVB0clRhZz4gY29kZVB0cikKK3sKKyAgICBtX3Nsb3dQYXRoQ2FsbERlc3RpbmF0
aW9uID0gY29kZVB0cjsKK30KKwordm9pZCBDYWxsTGlua0luZm86OnJldmVydENhbGxUb1N0dWIo
KQoreworICAgIFJFTEVBU0VfQVNTRVJUKHN0dWIoKSk7CisgICAgLy8gVGhlIHN0YXJ0IG9mIG91
ciBKSVQgY29kZSBpcyBub3cgYSBqdW1wIHRvIHRoZSBwb2x5bW9ycGhpYyBzdHViLiBSZXdyaXRl
IHRoZSBmaXJzdCBpbnN0cnVjdGlvbgorICAgIC8vIHRvIGJlIHdoYXQgd2UgbmVlZCBmb3Igbm9u
IHN0dWIgSUNzLgorCisgICAgLy8gdGhpcyBydW5zIGludG8gc29tZSBicmFuY2ggY29tcGFjdGlv
biBjcmFwIEknZCBsaWtlIHRvIGF2b2lkIGZvciBub3cuIEVzc2VudGlhbGx5LCB0aGUgYnJhbmNo
CisgICAgLy8gZG9lc24ndCBrbm93IGlmIGl0IGNhbiBiZSBjb21wYWN0ZWQgb3Igbm90LiBTbyB3
ZSBlbmQgdXAgd2l0aCAyOCBieXRlcyBvZiBtYWNoaW5lIGNvZGUsIGZvcgorICAgIC8vIHdoYXQg
aW4gYWxsIGxpa2VsaWhvb2QgZml0cyBpbiAyNC4gU28gd2UganVzdCBzcGxhdCBvdXQgdGhlIGZp
cnN0IGluc3RydWN0aW9uLiBMb25nIHRlcm0sIHdlCisgICAgLy8gbmVlZCBzb21ldGhpbmcgY2xl
YW5lci4gQnV0IHRoaXMgd29ya3Mgb24gYXJtNjQgZm9yIG5vdy4KKworICAgIENDYWxsSGVscGVy
czo6ZW1pdEpJVENvZGVPdmVyKGZhc3RQYXRoU3RhcnQoKSwgWyZdIChDQ2FsbEhlbHBlcnMmIGpp
dCkgeworICAgICAgICBpZiAoaXNEYXRhSUMoKSkKKyAgICAgICAgICAgIGVtaXRGaXJzdEluc3Ry
dWN0aW9uRm9yRGF0YUlDKGppdCwgdS5kYXRhSUMubV9jYWxsTGlua0luZm9HUFIpOworICAgICAg
ICBlbHNlIHsKKyAgICAgICAgICAgIENDYWxsSGVscGVyczo6cmV2ZXJ0SnVtcFJlcGxhY2VtZW50
VG9CcmFuY2hQdHJXaXRoUGF0Y2goCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpzdGFy
dE9mQnJhbmNoUHRyV2l0aFBhdGNoT25SZWdpc3Rlcih1LmNvZGVJQy5tX2NhbGxlZUxvY2F0aW9u
KSwgY2FsbGVlR1BSKCksIG51bGxwdHIpOworICAgICAgICB9CisgICAgfSwgICJSZXNldHRpbmcg
UG9seW1vcnBoaWNDYWxsIHN0dWJiZWQgQ2FsbExpbmtJbmZvIik7Cit9CisKK3ZvaWQgQ2FsbExp
bmtJbmZvOjpzZXRTdHViKFJlZjxQb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZT4mJiBuZXdTdHVi
KQoreworICAgIGNsZWFyU3R1YigpOworICAgIG1fc3R1YiA9IFdURk1vdmUobmV3U3R1Yik7CisK
KyAgICBpZiAoaXNEYXRhSUMoKSkgeworICAgICAgICBDQ2FsbEhlbHBlcnM6OmVtaXRKSVRDb2Rl
T3ZlcihmYXN0UGF0aFN0YXJ0KCksIFsmXSAoQ0NhbGxIZWxwZXJzJiBqaXQpIHsKKyAgICAgICAg
ICAgIGF1dG8ganVtcCA9IGppdC5qdW1wKCk7CisgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2so
Wz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgICAgICAgICAgICAgbGlua0J1ZmZl
ci5saW5rKGp1bXAsIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihtX3N0
dWItPmNvZGUoKS5jb2RlKCkpKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9LCAiUGF0Y2hp
bmcgY2FsbCB0byBQb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZSBpbiBDYWxsTGlua0luZm8iKTsK
KyAgICB9IGVsc2UgeworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwbGFjZVdpdGhKdW1wKAor
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnN0YXJ0T2ZCcmFuY2hQdHJXaXRoUGF0Y2hPblJl
Z2lzdGVyKHUuY29kZUlDLm1fY2FsbGVlTG9jYXRpb24pLAorICAgICAgICAgICAgQ29kZUxvY2F0
aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+KG1fc3R1Yi0+Y29kZSgpLmNvZGUoKSkpOwor
ICAgIH0KK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uaAko
cmV2aXNpb24gMjc2OTc3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxM
aW5rSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwxMiArMzAsMTQgQEAKICNpbmNsdWRlICJD
b2RlU3BlY2lhbGl6YXRpb25LaW5kLmgiCiAjaW5jbHVkZSAiUG9seW1vcnBoaWNDYWxsU3R1YlJv
dXRpbmUuaCIKICNpbmNsdWRlICJXcml0ZUJhcnJpZXIuaCIKKyNpbmNsdWRlIDx3dGYvRnVuY3Rp
b24uaD4KICNpbmNsdWRlIDx3dGYvU2VudGluZWxMaW5rZWRMaXN0Lmg+CiAKIG5hbWVzcGFjZSBK
U0MgewogCiAjaWYgRU5BQkxFKEpJVCkKIAorY2xhc3MgQ0NhbGxIZWxwZXJzOwogY2xhc3MgRnVu
Y3Rpb25Db2RlQmxvY2s7CiBjbGFzcyBKU0Z1bmN0aW9uOwogZW51bSBPcGNvZGVJRCA6IHVuc2ln
bmVkOwpAQCAtMTYzLDE2ICsxNjUsMzggQEAgcHVibGljOgogICAgICAgICBtX2NhbGxlZUdQUiA9
IGNhbGxlZUdQUjsKICAgICB9CiAKLSAgICB2b2lkIHNldENhbGxMb2NhdGlvbnMoCi0gICAgICAg
IENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IGNhbGxSZXR1cm5Mb2NhdGlvbk9y
UGF0Y2hhYmxlSnVtcCwKLSAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRh
Zz4gaG90UGF0aEJlZ2luT3JTbG93UGF0aFN0YXJ0LAotICAgICAgICBDb2RlTG9jYXRpb25OZWFy
Q2FsbDxKU0ludGVybmFsUHRyVGFnPiBob3RQYXRoT3RoZXIpCi0gICAgewotICAgICAgICBtX2Nh
bGxSZXR1cm5Mb2NhdGlvbk9yUGF0Y2hhYmxlSnVtcCA9IGNhbGxSZXR1cm5Mb2NhdGlvbk9yUGF0
Y2hhYmxlSnVtcDsKLSAgICAgICAgbV9ob3RQYXRoQmVnaW5PclNsb3dQYXRoU3RhcnQgPSBob3RQ
YXRoQmVnaW5PclNsb3dQYXRoU3RhcnQ7Ci0gICAgICAgIG1faG90UGF0aE90aGVyID0gaG90UGF0
aE90aGVyOworICAgIEdQUlJlZyBjYWxsZWVHUFIoKSBjb25zdCB7IHJldHVybiBtX2NhbGxlZUdQ
UjsgfQorICAgIAorICAgIGVudW0gY2xhc3MgVXNlRGF0YUlDIDogdWludDhfdCB7CisgICAgICAg
IFllcywKKyAgICAgICAgTm8KKyAgICB9OworCitwcml2YXRlOgorICAgIHZvaWQgZW1pdEZpcnN0
SW5zdHJ1Y3Rpb25Gb3JEYXRhSUMoQ0NhbGxIZWxwZXJzJiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQ
Uik7CisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGVtaXRGYXN0UGF0aEltcGwoQ0NhbGxI
ZWxwZXJzJiwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0
YUlDLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKSBXQVJOX1VOVVNF
RF9SRVRVUk47CitwdWJsaWM6CisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGVtaXRGYXN0
UGF0aChDQ2FsbEhlbHBlcnMmLCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZv
R1BSLCBVc2VEYXRhSUMpIFdBUk5fVU5VU0VEX1JFVFVSTjsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6
SnVtcExpc3QgZW1pdFRhaWxDYWxsRmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiwgR1BSUmVnIGNhbGxl
ZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDLCBXVEY6OkZ1bmN0aW9uPHZv
aWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKSBXQVJOX1VOVVNFRF9SRVRVUk47CisgICAgdm9pZCBl
bWl0RGlyZWN0RmFzdFBhdGgoQ0NhbGxIZWxwZXJzJik7CisgICAgdm9pZCBlbWl0RGlyZWN0VGFp
bENhbGxGYXN0UGF0aChDQ2FsbEhlbHBlcnMmLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFy
ZUZvclRhaWxDYWxsKTsKKyAgICB2b2lkIGVtaXRTbG93UGF0aChWTSYsIENDYWxsSGVscGVycyYp
OworICAgIHZvaWQgcmV2ZXJ0Q2FsbFRvU3R1YigpOworCisgICAgYm9vbCBpc0RhdGFJQygpIGNv
bnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFVzZURhdGFJQz4obV91c2VEYXRhSUMpID09IFVzZURh
dGFJQzo6WWVzOyB9CisgICAgdm9pZCBzZXRVc2VzRGF0YUlDcyhVc2VEYXRhSUMgdXNlRGF0YUlD
KSB7IG1fdXNlRGF0YUlDID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHVzZURhdGFJQyk7IH0KKwor
ICAgIHZvaWQgc2V0Q29kZUxvY2F0aW9ucygKKyAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJ
bnRlcm5hbFB0clRhZz4gc2xvd1BhdGhTdGFydCwKKyAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8
SlNJbnRlcm5hbFB0clRhZz4gZG9uZUxvY2F0aW9uKQorICAgIHsKKyAgICAgICAgaWYgKCFpc0Rh
dGFJQygpKQorICAgICAgICAgICAgdS5jb2RlSUMubV9zbG93UGF0aFN0YXJ0ID0gc2xvd1BhdGhT
dGFydDsKKyAgICAgICAgbV9kb25lTG9jYXRpb24gPSBkb25lTG9jYXRpb247CiAgICAgfQogCisg
ICAgdm9pZCBpbml0aWFsaXplRGlyZWN0Q2FsbCgpOworCiAgICAgYm9vbCBhbGxvd1N0dWJzKCkg
Y29uc3QgeyByZXR1cm4gbV9hbGxvd1N0dWJzOyB9CiAKICAgICB2b2lkIGRpc2FsbG93U3R1YnMo
KQpAQCAtMTgwLDIzICsyMDQsMTkgQEAgcHVibGljOgogICAgICAgICBtX2FsbG93U3R1YnMgPSBm
YWxzZTsKICAgICB9CiAKLSAgICBDb2RlTG9jYXRpb25OZWFyQ2FsbDxKU0ludGVybmFsUHRyVGFn
PiBjYWxsUmV0dXJuTG9jYXRpb24oKTsKLSAgICBDb2RlTG9jYXRpb25KdW1wPEpTSW50ZXJuYWxQ
dHJUYWc+IHBhdGNoYWJsZUp1bXAoKTsKLSAgICBDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHI8SlNJ
bnRlcm5hbFB0clRhZz4gaG90UGF0aEJlZ2luKCk7CisgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJ
bnRlcm5hbFB0clRhZz4gZmFzdFBhdGhTdGFydCgpOwogICAgIENvZGVMb2NhdGlvbkxhYmVsPEpT
SW50ZXJuYWxQdHJUYWc+IHNsb3dQYXRoU3RhcnQoKTsKKyAgICBDb2RlTG9jYXRpb25MYWJlbDxK
U0ludGVybmFsUHRyVGFnPiBkb25lTG9jYXRpb24oKTsKIAotICAgIENvZGVMb2NhdGlvbk5lYXJD
YWxsPEpTSW50ZXJuYWxQdHJUYWc+IGhvdFBhdGhPdGhlcigpCi0gICAgewotICAgICAgICByZXR1
cm4gbV9ob3RQYXRoT3RoZXI7Ci0gICAgfQotCi0gICAgdm9pZCBzZXRDYWxsZWUoVk0mLCBKU0Nl
bGwqLCBKU09iamVjdCogY2FsbGVlKTsKKyAgICB2b2lkIHNldE1vbm9tb3JwaGljQ2FsbGVlKFZN
JiwgSlNDZWxsKiwgSlNPYmplY3QqIGNhbGxlZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50
cnlQdHJUYWc+KTsKKyAgICB2b2lkIHNldFNsb3dQYXRoQ2FsbERlc3RpbmF0aW9uKE1hY3JvQXNz
ZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPik7CiAgICAgdm9pZCBjbGVhckNhbGxlZSgpOwog
ICAgIEpTT2JqZWN0KiBjYWxsZWUoKTsKIAogICAgIHZvaWQgc2V0Q29kZUJsb2NrKFZNJiwgSlND
ZWxsKiwgRnVuY3Rpb25Db2RlQmxvY2sqKTsKICAgICB2b2lkIGNsZWFyQ29kZUJsb2NrKCk7CiAg
ICAgRnVuY3Rpb25Db2RlQmxvY2sqIGNvZGVCbG9jaygpOworICAgIHZvaWQgc2V0RGlyZWN0Q2Fs
bFRhcmdldChDb2RlTG9jYXRpb25MYWJlbDxKU0VudHJ5UHRyVGFnPik7CiAKICAgICB2b2lkIHNl
dExhc3RTZWVuQ2FsbGVlKFZNJiwgY29uc3QgSlNDZWxsKiBvd25lciwgSlNPYmplY3QqIGNhbGxl
ZSk7CiAgICAgdm9pZCBjbGVhckxhc3RTZWVuQ2FsbGVlKCk7CkBAIC0yMDYsMTIgKzIyNiw3IEBA
IHB1YmxpYzoKICAgICB2b2lkIHNldEV4ZWN1dGFibGVEdXJpbmdDb21waWxhdGlvbihFeGVjdXRh
YmxlQmFzZSopOwogICAgIEV4ZWN1dGFibGVCYXNlKiBleGVjdXRhYmxlKCk7CiAgICAgCi0gICAg
dm9pZCBzZXRTdHViKFJlZjxQb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZT4mJiBuZXdTdHViKQot
ICAgIHsKLSAgICAgICAgY2xlYXJTdHViKCk7Ci0gICAgICAgIG1fc3R1YiA9IFdURk1vdmUobmV3
U3R1Yik7Ci0gICAgfQotCisgICAgdm9pZCBzZXRTdHViKFJlZjxQb2x5bW9ycGhpY0NhbGxTdHVi
Um91dGluZT4mJik7CiAgICAgdm9pZCBjbGVhclN0dWIoKTsKIAogICAgIFBvbHltb3JwaGljQ2Fs
bFN0dWJSb3V0aW5lKiBzdHViKCkgY29uc3QKQEAgLTMxMSw2ICszMjYsMjEgQEAgcHVibGljOgog
ICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENhbGxMaW5rSW5mbywgbV9zbG93UGF0aENv
dW50KTsKICAgICB9CiAKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQ2FsbGVlKCkKKyAg
ICB7CisgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ2FsbExpbmtJbmZvLCBtX2NhbGxl
ZU9yQ29kZUJsb2NrKTsKKyAgICB9CisKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTW9u
b21vcnBoaWNDYWxsRGVzdGluYXRpb24oKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE9CSkVDVF9P
RkZTRVRPRihDYWxsTGlua0luZm8sIHUpICsgT0JKRUNUX09GRlNFVE9GKFVuaW9uVHlwZSwgZGF0
YUlDLm1fbW9ub21vcnBoaWNDYWxsRGVzdGluYXRpb24pOworICAgIH0KKworICAgIHN0YXRpYyBw
dHJkaWZmX3Qgb2Zmc2V0T2ZTbG93UGF0aENhbGxEZXN0aW5hdGlvbigpCisgICAgeworICAgICAg
ICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENhbGxMaW5rSW5mbywgbV9zbG93UGF0aENhbGxEZXN0
aW5hdGlvbik7CisgICAgfQorCiAgICAgR1BSUmVnIGNhbGxlZUdQUigpCiAgICAgewogICAgICAg
ICByZXR1cm4gbV9jYWxsZWVHUFI7CkBAIC0zNTIsMTAgKzM4MiwyNSBAQCBwdWJsaWM6CiAgICAg
fQogCiBwcml2YXRlOgotICAgIHVpbnQzMl90IG1fbWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXMgeyAwIH07IC8vIEZvciB2YXJhcmdzOiB0aGUgcHJvZmlsZWQgbWF4aW11bSBudW1iZXIgb2Yg
YXJndW1lbnRzLiBGb3IgZGlyZWN0OiB0aGUgbnVtYmVyIG9mIHN0YWNrIHNsb3RzIGFsbG9jYXRl
ZCBmb3IgYXJndW1lbnRzLgotICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+
IG1fY2FsbFJldHVybkxvY2F0aW9uT3JQYXRjaGFibGVKdW1wOwotICAgIENvZGVMb2NhdGlvbkxh
YmVsPEpTSW50ZXJuYWxQdHJUYWc+IG1faG90UGF0aEJlZ2luT3JTbG93UGF0aFN0YXJ0OwotICAg
IENvZGVMb2NhdGlvbk5lYXJDYWxsPEpTSW50ZXJuYWxQdHJUYWc+IG1faG90UGF0aE90aGVyOwor
ICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IG1fZmFzdFBhdGhTdGFydDsK
KyAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBtX2RvbmVMb2NhdGlvbjsK
KyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gbV9zbG93UGF0aENhbGxE
ZXN0aW5hdGlvbjsKKyAgICB1bmlvbiBVbmlvblR5cGUgeworICAgICAgICBVbmlvblR5cGUoKSAK
KyAgICAgICAgICAgIDogZGF0YUlDIHsgbnVsbHB0ciwgSW52YWxpZEdQUlJlZyB9CisgICAgICAg
IHsgfQorICAgICAgICBzdHJ1Y3QgRGF0YUlDIHsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
Q29kZVB0cjxKU0VudHJ5UHRyVGFnPiBtX21vbm9tb3JwaGljQ2FsbERlc3RpbmF0aW9uOworICAg
ICAgICAgICAgR1BSUmVnIG1fY2FsbExpbmtJbmZvR1BSOworICAgICAgICB9IGRhdGFJQzsKKwor
ICAgICAgICBzdHJ1Y3QgeworICAgICAgICAgICAgQ29kZUxvY2F0aW9uTmVhckNhbGw8SlNJbnRl
cm5hbFB0clRhZz4gbV9jYWxsTG9jYXRpb247CisgICAgICAgICAgICBDb2RlTG9jYXRpb25EYXRh
TGFiZWxQdHI8SlNJbnRlcm5hbFB0clRhZz4gbV9jYWxsZWVMb2NhdGlvbjsKKyAgICAgICAgICAg
IENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IG1fc2xvd1BhdGhTdGFydDsKKyAg
ICAgICAgfSBjb2RlSUM7CisgICAgfSB1OworCiAgICAgV3JpdGVCYXJyaWVyPEpTQ2VsbD4gbV9j
YWxsZWVPckNvZGVCbG9jazsKICAgICBXcml0ZUJhcnJpZXI8SlNDZWxsPiBtX2xhc3RTZWVuQ2Fs
bGVlT3JFeGVjdXRhYmxlOwogICAgIFJlZlB0cjxQb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZT4g
bV9zdHViOwpAQCAtMzY5LDggKzQxNCwxMCBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9hbGxvd1N0
dWJzIDogMTsKICAgICBib29sIG1fY2xlYXJlZEJ5SmV0dGlzb24gOiAxOwogICAgIHVuc2lnbmVk
IG1fY2FsbFR5cGUgOiA0OyAvLyBDYWxsVHlwZQorICAgIHVuc2lnbmVkIG1fdXNlRGF0YUlDIDog
MTsgLy8gVXNlRGF0YUlDCiAgICAgR1BSUmVnIG1fY2FsbGVlR1BSIHsgSW52YWxpZEdQUlJlZyB9
OwogICAgIHVpbnQzMl90IG1fc2xvd1BhdGhDb3VudCB7IDAgfTsKKyAgICB1aW50MzJfdCBtX21h
eEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIHsgMCB9OyAvLyBGb3IgdmFyYXJnczogdGhlIHBy
b2ZpbGVkIG1heGltdW0gbnVtYmVyIG9mIGFyZ3VtZW50cy4gRm9yIGRpcmVjdDogdGhlIG51bWJl
ciBvZiBzdGFjayBzbG90cyBhbGxvY2F0ZWQgZm9yIGFyZ3VtZW50cy4KIH07CiAKIGlubGluZSBD
b2RlT3JpZ2luIGdldENhbGxMaW5rSW5mb0NvZGVPcmlnaW4oQ2FsbExpbmtJbmZvJiBjYWxsTGlu
a0luZm8pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVy
LmNwcAkocmV2aXNpb24gMjc2OTc3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdK
SVRDb21waWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1NSwzMSArMjU1LDE4IEBAIHZvaWQg
SklUQ29tcGlsZXI6OmxpbmsoTGlua0J1ZmZlciYgbGlua0IKICAgICBmaW5hbGl6ZUlubGluZUNh
Y2hlcyhtX2luc3RhbmNlT2ZzLCBsaW5rQnVmZmVyKTsKICAgICBmaW5hbGl6ZUlubGluZUNhY2hl
cyhtX3ByaXZhdGVCcmFuZEFjY2Vzc2VzLCBsaW5rQnVmZmVyKTsKIAotICAgIGF1dG8gbGlua0Nh
bGxUaHVuayA9IEZ1bmN0aW9uUHRyPE5vUHRyVGFnPih2bSgpLmdldENUSVN0dWIobGlua0NhbGxU
aHVua0dlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICAgICBmb3IgKGF1dG8m
IHJlY29yZCA6IG1fanNDYWxscykgewogICAgICAgICBDYWxsTGlua0luZm8mIGluZm8gPSAqcmVj
b3JkLmluZm87Ci0gICAgICAgIGxpbmtCdWZmZXIubGluayhyZWNvcmQuc2xvd0NhbGwsIGxpbmtD
YWxsVGh1bmspOwotICAgICAgICBpbmZvLnNldENhbGxMb2NhdGlvbnMoCi0gICAgICAgICAgICBD
b2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPihsaW5rQnVmZmVyLmxvY2F0aW9uT2ZO
ZWFyQ2FsbDxKU0ludGVybmFsUHRyVGFnPihyZWNvcmQuc2xvd0NhbGwpKSwKLSAgICAgICAgICAg
IENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+KGxpbmtCdWZmZXIubG9jYXRpb25P
ZjxKU0ludGVybmFsUHRyVGFnPihyZWNvcmQudGFyZ2V0VG9DaGVjaykpLAotICAgICAgICAgICAg
bGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8SlNJbnRlcm5hbFB0clRhZz4ocmVjb3JkLmZh
c3RDYWxsKSk7CisgICAgICAgIGluZm8uc2V0Q29kZUxvY2F0aW9ucygKKyAgICAgICAgICAgIGxp
bmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihyZWNvcmQuc2xvd1BhdGhTdGFy
dCksCisgICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4o
cmVjb3JkLmRvbmVMb2NhdGlvbikpOwogICAgIH0KICAgICAKICAgICBmb3IgKEpTRGlyZWN0Q2Fs
bFJlY29yZCYgcmVjb3JkIDogbV9qc0RpcmVjdENhbGxzKSB7CiAgICAgICAgIENhbGxMaW5rSW5m
byYgaW5mbyA9ICpyZWNvcmQuaW5mbzsKLSAgICAgICAgbGlua0J1ZmZlci5saW5rKHJlY29yZC5j
YWxsLCBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8Tm9QdHJUYWc+KHJlY29yZC5zbG93UGF0aCkpOwot
ICAgICAgICBpbmZvLnNldENhbGxMb2NhdGlvbnMoCi0gICAgICAgICAgICBDb2RlTG9jYXRpb25M
YWJlbDxKU0ludGVybmFsUHRyVGFnPigpLAorICAgICAgICBpbmZvLnNldENvZGVMb2NhdGlvbnMo
CiAgICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4ocmVj
b3JkLnNsb3dQYXRoKSwKLSAgICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxs
PEpTSW50ZXJuYWxQdHJUYWc+KHJlY29yZC5jYWxsKSk7Ci0gICAgfQotICAgIAotICAgIGZvciAo
SlNEaXJlY3RUYWlsQ2FsbFJlY29yZCYgcmVjb3JkIDogbV9qc0RpcmVjdFRhaWxDYWxscykgewot
ICAgICAgICBDYWxsTGlua0luZm8mIGluZm8gPSAqcmVjb3JkLmluZm87Ci0gICAgICAgIGluZm8u
c2V0Q2FsbExvY2F0aW9ucygKLSAgICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0lu
dGVybmFsUHRyVGFnPihyZWNvcmQucGF0Y2hhYmxlSnVtcCksCi0gICAgICAgICAgICBsaW5rQnVm
ZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4ocmVjb3JkLnNsb3dQYXRoKSwKLSAgICAg
ICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPEpTSW50ZXJuYWxQdHJUYWc+KHJl
Y29yZC5jYWxsKSk7CisgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRy
VGFnPigpKTsKICAgICB9CiAgICAgCiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5r
UHRyVGFnPiBvc3JFeGl0VGh1bmsgPSB2bSgpLmdldENUSVN0dWIob3NyRXhpdEdlbmVyYXRpb25U
aHVua0dlbmVyYXRvcik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENv
bXBpbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRD
b21waWxlci5oCShyZXZpc2lvbiAyNzY5NzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0pJVENvbXBpbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTIxOSwxOSArMjE5LDE0IEBAIHB1
YmxpYzoKICAgICAgICAgbV9wcml2YXRlQnJhbmRBY2Nlc3Nlcy5hcHBlbmQoSW5saW5lQ2FjaGVX
cmFwcGVyPEpJVFByaXZhdGVCcmFuZEFjY2Vzc0dlbmVyYXRvcj4oZ2VuLCBzbG93UGF0aCkpOwog
ICAgIH0KIAotICAgIHZvaWQgYWRkSlNDYWxsKENhbGwgZmFzdENhbGwsIENhbGwgc2xvd0NhbGws
IERhdGFMYWJlbFB0ciB0YXJnZXRUb0NoZWNrLCBDYWxsTGlua0luZm8qIGluZm8pCisgICAgdm9p
ZCBhZGRKU0NhbGwoTGFiZWwgc2xvd1BhdGhTdGFydCwgTGFiZWwgZG9uZUxvY2F0aW9uLCBDYWxs
TGlua0luZm8qIGluZm8pCiAgICAgewotICAgICAgICBtX2pzQ2FsbHMuYXBwZW5kKEpTQ2FsbFJl
Y29yZChmYXN0Q2FsbCwgc2xvd0NhbGwsIHRhcmdldFRvQ2hlY2ssIGluZm8pKTsKKyAgICAgICAg
bV9qc0NhbGxzLmFwcGVuZChKU0NhbGxSZWNvcmQoc2xvd1BhdGhTdGFydCwgZG9uZUxvY2F0aW9u
LCBpbmZvKSk7CiAgICAgfQogICAgIAotICAgIHZvaWQgYWRkSlNEaXJlY3RDYWxsKENhbGwgY2Fs
bCwgTGFiZWwgc2xvd1BhdGgsIENhbGxMaW5rSW5mbyogaW5mbykKKyAgICB2b2lkIGFkZEpTRGly
ZWN0Q2FsbChMYWJlbCBzbG93UGF0aCwgQ2FsbExpbmtJbmZvKiBpbmZvKQogICAgIHsKLSAgICAg
ICAgbV9qc0RpcmVjdENhbGxzLmFwcGVuZChKU0RpcmVjdENhbGxSZWNvcmQoY2FsbCwgc2xvd1Bh
dGgsIGluZm8pKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBhZGRKU0RpcmVjdFRhaWxDYWxsKFBh
dGNoYWJsZUp1bXAgcGF0Y2hhYmxlSnVtcCwgQ2FsbCBjYWxsLCBMYWJlbCBzbG93UGF0aCwgQ2Fs
bExpbmtJbmZvKiBpbmZvKQotICAgIHsKLSAgICAgICAgbV9qc0RpcmVjdFRhaWxDYWxscy5hcHBl
bmQoSlNEaXJlY3RUYWlsQ2FsbFJlY29yZChwYXRjaGFibGVKdW1wLCBjYWxsLCBzbG93UGF0aCwg
aW5mbykpOworICAgICAgICBtX2pzRGlyZWN0Q2FsbHMuYXBwZW5kKEpTRGlyZWN0Q2FsbFJlY29y
ZChzbG93UGF0aCwgaW5mbykpOwogICAgIH0KICAgICAKICAgICB2b2lkIGFkZFdlYWtSZWZlcmVu
Y2UoSlNDZWxsKiB0YXJnZXQpCkBAIC0zMjgsNTIgKzMyMywyOCBAQCBwcml2YXRlOgogCiAKICAg
ICBzdHJ1Y3QgSlNDYWxsUmVjb3JkIHsKLSAgICAgICAgSlNDYWxsUmVjb3JkKENhbGwgZmFzdENh
bGwsIENhbGwgc2xvd0NhbGwsIERhdGFMYWJlbFB0ciB0YXJnZXRUb0NoZWNrLCBDYWxsTGlua0lu
Zm8qIGluZm8pCi0gICAgICAgICAgICA6IGZhc3RDYWxsKGZhc3RDYWxsKQotICAgICAgICAgICAg
LCBzbG93Q2FsbChzbG93Q2FsbCkKLSAgICAgICAgICAgICwgdGFyZ2V0VG9DaGVjayh0YXJnZXRU
b0NoZWNrKQorICAgICAgICBKU0NhbGxSZWNvcmQoTGFiZWwgc2xvd1BhdGhTdGFydCwgTGFiZWwg
ZG9uZUxvY2F0aW9uLCBDYWxsTGlua0luZm8qIGluZm8pCisgICAgICAgICAgICA6IHNsb3dQYXRo
U3RhcnQoc2xvd1BhdGhTdGFydCkKKyAgICAgICAgICAgICwgZG9uZUxvY2F0aW9uKGRvbmVMb2Nh
dGlvbikKICAgICAgICAgICAgICwgaW5mbyhpbmZvKQogICAgICAgICB7Ci0gICAgICAgICAgICBB
U1NFUlQoZmFzdENhbGwuaXNGbGFnU2V0KENhbGw6Ok5lYXIpKTsKLSAgICAgICAgICAgIEFTU0VS
VChzbG93Q2FsbC5pc0ZsYWdTZXQoQ2FsbDo6TmVhcikpOwogICAgICAgICB9CiAgICAgICAgIAot
ICAgICAgICBDYWxsIGZhc3RDYWxsOwotICAgICAgICBDYWxsIHNsb3dDYWxsOwotICAgICAgICBE
YXRhTGFiZWxQdHIgdGFyZ2V0VG9DaGVjazsKKyAgICAgICAgTGFiZWwgc2xvd1BhdGhTdGFydDsK
KyAgICAgICAgTGFiZWwgZG9uZUxvY2F0aW9uOwogICAgICAgICBDYWxsTGlua0luZm8qIGluZm87
CiAgICAgfTsKICAgICAKICAgICBzdHJ1Y3QgSlNEaXJlY3RDYWxsUmVjb3JkIHsKLSAgICAgICAg
SlNEaXJlY3RDYWxsUmVjb3JkKENhbGwgY2FsbCwgTGFiZWwgc2xvd1BhdGgsIENhbGxMaW5rSW5m
byogaW5mbykKLSAgICAgICAgICAgIDogY2FsbChjYWxsKQotICAgICAgICAgICAgLCBzbG93UGF0
aChzbG93UGF0aCkKLSAgICAgICAgICAgICwgaW5mbyhpbmZvKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBBU1NFUlQoY2FsbC5pc0ZsYWdTZXQoQ2FsbDo6TmVhcikpOwotICAgICAgICB9Ci0gICAg
ICAgIAotICAgICAgICBDYWxsIGNhbGw7Ci0gICAgICAgIExhYmVsIHNsb3dQYXRoOwotICAgICAg
ICBDYWxsTGlua0luZm8qIGluZm87Ci0gICAgfTsKLSAgICAKLSAgICBzdHJ1Y3QgSlNEaXJlY3RU
YWlsQ2FsbFJlY29yZCB7Ci0gICAgICAgIEpTRGlyZWN0VGFpbENhbGxSZWNvcmQoUGF0Y2hhYmxl
SnVtcCBwYXRjaGFibGVKdW1wLCBDYWxsIGNhbGwsIExhYmVsIHNsb3dQYXRoLCBDYWxsTGlua0lu
Zm8qIGluZm8pCi0gICAgICAgICAgICA6IHBhdGNoYWJsZUp1bXAocGF0Y2hhYmxlSnVtcCkKLSAg
ICAgICAgICAgICwgY2FsbChjYWxsKQotICAgICAgICAgICAgLCBzbG93UGF0aChzbG93UGF0aCkK
KyAgICAgICAgSlNEaXJlY3RDYWxsUmVjb3JkKExhYmVsIHNsb3dQYXRoLCBDYWxsTGlua0luZm8q
IGluZm8pCisgICAgICAgICAgICA6IHNsb3dQYXRoKHNsb3dQYXRoKQogICAgICAgICAgICAgLCBp
bmZvKGluZm8pCiAgICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChjYWxsLmlzRmxhZ1NldChD
YWxsOjpOZWFyKSAmJiBjYWxsLmlzRmxhZ1NldChDYWxsOjpUYWlsKSk7CiAgICAgICAgIH0KICAg
ICAgICAgCi0gICAgICAgIFBhdGNoYWJsZUp1bXAgcGF0Y2hhYmxlSnVtcDsKLSAgICAgICAgQ2Fs
bCBjYWxsOwogICAgICAgICBMYWJlbCBzbG93UGF0aDsKICAgICAgICAgQ2FsbExpbmtJbmZvKiBp
bmZvOwogICAgIH07Ci0KICAgICAKICAgICBWZWN0b3I8SW5saW5lQ2FjaGVXcmFwcGVyPEpJVEdl
dEJ5SWRHZW5lcmF0b3I+LCA0PiBtX2dldEJ5SWRzOwogICAgIFZlY3RvcjxJbmxpbmVDYWNoZVdy
YXBwZXI8SklUR2V0QnlJZFdpdGhUaGlzR2VuZXJhdG9yPiwgND4gbV9nZXRCeUlkc1dpdGhUaGlz
OwpAQCAtMzg2LDcgKzM1Nyw2IEBAIHByaXZhdGU6CiAgICAgVmVjdG9yPElubGluZUNhY2hlV3Jh
cHBlcjxKSVRQcml2YXRlQnJhbmRBY2Nlc3NHZW5lcmF0b3I+LCA0PiBtX3ByaXZhdGVCcmFuZEFj
Y2Vzc2VzOwogICAgIFZlY3RvcjxKU0NhbGxSZWNvcmQsIDQ+IG1fanNDYWxsczsKICAgICBWZWN0
b3I8SlNEaXJlY3RDYWxsUmVjb3JkLCA0PiBtX2pzRGlyZWN0Q2FsbHM7Ci0gICAgVmVjdG9yPEpT
RGlyZWN0VGFpbENhbGxSZWNvcmQsIDQ+IG1fanNEaXJlY3RUYWlsQ2FsbHM7CiAgICAgU2VnbWVu
dGVkVmVjdG9yPE9TUkV4aXRDb21waWxhdGlvbkluZm8sIDQ+IG1fZXhpdENvbXBpbGF0aW9uSW5m
bzsKICAgICBWZWN0b3I8VmVjdG9yPExhYmVsPj4gbV9leGl0U2l0ZUxhYmVsczsKICAgICBWZWN0
b3I8REZHOjpPU1JFbnRyeURhdGE+IG1fb3NyRW50cnk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwCShyZXZp
c2lvbiAyNzY5NzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21w
aWxlckNvbW1vbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwOSw3ICsyMDksNyBAQCBzdGF0aWMg
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUCiAgICAgICAgICAgICAgICAgYmFzZWxp
bmVDb2RlQmxvY2tGb3JDYWxsZXItPmdldENhbGxMaW5rSW5mb0ZvckJ5dGVjb2RlSW5kZXgoY2Fs
bEJ5dGVjb2RlSW5kZXgpOwogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY2FsbExpbmtJbmZv
KTsKIAotICAgICAgICAgICAganVtcFRhcmdldCA9IGNhbGxMaW5rSW5mby0+Y2FsbFJldHVybkxv
Y2F0aW9uKCkucmV0YWdnZWQ8SlNFbnRyeVB0clRhZz4oKTsKKyAgICAgICAgICAgIGp1bXBUYXJn
ZXQgPSBjYWxsTGlua0luZm8tPmRvbmVMb2NhdGlvbigpLnJldGFnZ2VkPEpTRW50cnlQdHJUYWc+
KCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDI3Njk3NykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM2MTYsNyArMzYxNiw3IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25M
aW5rRGkKICAgICAgICAgICAgIGNvZGVQdHIgPSBmdW5jdGlvbkV4ZWN1dGFibGUtPmVudHJ5cG9p
bnRGb3Ioa2luZCwgQXJpdHlDaGVja05vdFJlcXVpcmVkKTsKICAgICB9CiAgICAgCi0gICAgbGlu
a0RpcmVjdEZvcihjYWxsRnJhbWUsICpjYWxsTGlua0luZm8sIGNvZGVCbG9jaywgY29kZVB0cik7
CisgICAgbGlua0RpcmVjdENhbGwoY2FsbEZyYW1lLCAqY2FsbExpbmtJbmZvLCBjb2RlQmxvY2ss
IGNvZGVQdHIpOwogfQogCiBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uVHJpZ2dl
clJlb3B0aW1pemF0aW9uTm93LCB2b2lkLCAoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvZGVCbG9j
ayogb3B0aW1pemVkQ29kZUJsb2NrLCBPU1JFeGl0QmFzZSogZXhpdCkpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlz
aW9uIDI3Njk3NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgzMCwxOCArODMwLDE0IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUKICAgICAgICAgaWYgKGlzVGFpbCkgewogICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlQobm9kZS0+b3AoKSA9PSBEaXJlY3RUYWlsQ2FsbCk7CiAg
ICAgICAgICAgICAKLSAgICAgICAgICAgIEpJVENvbXBpbGVyOjpQYXRjaGFibGVKdW1wIHBhdGNo
YWJsZUp1bXAgPSBtX2ppdC5wYXRjaGFibGVKdW1wKCk7CiAgICAgICAgICAgICBKSVRDb21waWxl
cjo6TGFiZWwgbWFpblBhdGggPSBtX2ppdC5sYWJlbCgpOwotICAgICAgICAgICAgCiAgICAgICAg
ICAgICBtX2ppdC5lbWl0U3RvcmVDYWxsU2l0ZUluZGV4KGNhbGxTaXRlKTsKLSAgICAgICAgICAg
IAotICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRGcmFtZVNodWZmbGVEYXRhKHNodWZmbGVE
YXRhKTsKLSAgICAgICAgICAgIENhbGxGcmFtZVNodWZmbGVyKG1faml0LCBzaHVmZmxlRGF0YSku
cHJlcGFyZUZvclRhaWxDYWxsKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIEpJVENvbXBp
bGVyOjpDYWxsIGNhbGwgPSBtX2ppdC5uZWFyVGFpbENhbGwoKTsKLSAgICAgICAgICAgIAorCisg
ICAgICAgICAgICBjYWxsTGlua0luZm8tPmVtaXREaXJlY3RUYWlsQ2FsbEZhc3RQYXRoKG1faml0
LCBbJl0geworICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0RnJhbWVTaHVmZmxlRGF0
YShzaHVmZmxlRGF0YSk7CisgICAgICAgICAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIobV9qaXQs
IHNodWZmbGVEYXRhKS5wcmVwYXJlRm9yVGFpbENhbGwoKTsKKyAgICAgICAgICAgIH0pOwogICAg
ICAgICAgICAgSklUQ29tcGlsZXI6OkxhYmVsIHNsb3dQYXRoID0gbV9qaXQubGFiZWwoKTsKLSAg
ICAgICAgICAgIHBhdGNoYWJsZUp1bXAubV9qdW1wLmxpbmtUbyhzbG93UGF0aCwgJm1faml0KTsK
ICAgICAgICAgICAgIAogICAgICAgICAgICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMoSW52YWxp
ZEdQUlJlZyk7CiAgICAgICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkxpbmtEaXJlY3RD
YWxsLCBjYWxsTGlua0luZm8sIGNhbGxlZUdQUik7CkBAIC04NTEsMTUgKzg0NywxMyBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlKiBub2RlCiAgICAgICAgICAgICAKICAgICAg
ICAgICAgIHVzZUNoaWxkcmVuKG5vZGUpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBtX2pp
dC5hZGRKU0RpcmVjdFRhaWxDYWxsKHBhdGNoYWJsZUp1bXAsIGNhbGwsIHNsb3dQYXRoLCBjYWxs
TGlua0luZm8pOworICAgICAgICAgICAgbV9qaXQuYWRkSlNEaXJlY3RDYWxsKHNsb3dQYXRoLCBj
YWxsTGlua0luZm8pOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIAog
ICAgICAgICBKSVRDb21waWxlcjo6TGFiZWwgbWFpblBhdGggPSBtX2ppdC5sYWJlbCgpOwotICAg
ICAgICAKICAgICAgICAgbV9qaXQuZW1pdFN0b3JlQ2FsbFNpdGVJbmRleChjYWxsU2l0ZSk7Ci0g
ICAgICAgIAotICAgICAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsID0gbV9qaXQubmVhckNhbGwo
KTsKKyAgICAgICAgY2FsbExpbmtJbmZvLT5lbWl0RGlyZWN0RmFzdFBhdGgobV9qaXQpOwogICAg
ICAgICBKSVRDb21waWxlcjo6SnVtcCBkb25lID0gbV9qaXQuanVtcCgpOwogICAgICAgICAKICAg
ICAgICAgSklUQ29tcGlsZXI6OkxhYmVsIHNsb3dQYXRoID0gbV9qaXQubGFiZWwoKTsKQEAgLTg3
NCwzMCArODY4LDI5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUK
ICAgICAgICAgCiAgICAgICAgIHNldFJlc3VsdEFuZFJlc2V0U3RhY2soKTsKICAgICAgICAgCi0g
ICAgICAgIG1faml0LmFkZEpTRGlyZWN0Q2FsbChjYWxsLCBzbG93UGF0aCwgY2FsbExpbmtJbmZv
KTsKKyAgICAgICAgbV9qaXQuYWRkSlNEaXJlY3RDYWxsKHNsb3dQYXRoLCBjYWxsTGlua0luZm8p
OwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAogICAgIG1faml0LmVtaXRTdG9yZUNhbGxT
aXRlSW5kZXgoY2FsbFNpdGUpOwogICAgIAotICAgIEpJVENvbXBpbGVyOjpEYXRhTGFiZWxQdHIg
dGFyZ2V0VG9DaGVjazsKLSAgICBKSVRDb21waWxlcjo6SnVtcCBzbG93UGF0aCA9IG1faml0LmJy
YW5jaFB0cldpdGhQYXRjaChNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIGNhbGxlZUdQUiwgdGFy
Z2V0VG9DaGVjaywgVHJ1c3RlZEltbVB0cihudWxscHRyKSk7Ci0KKyAgICBDQ2FsbEhlbHBlcnM6
Okp1bXBMaXN0IHNsb3dDYXNlczsKICAgICBpZiAoaXNUYWlsKSB7Ci0gICAgICAgIGlmIChub2Rl
LT5vcCgpID09IFRhaWxDYWxsKSB7Ci0gICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldEZyYW1l
U2h1ZmZsZURhdGEoc2h1ZmZsZURhdGEpOwotICAgICAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIo
bV9qaXQsIHNodWZmbGVEYXRhKS5wcmVwYXJlRm9yVGFpbENhbGwoKTsKLSAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgIG1faml0LmVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKLSAgICAgICAg
ICAgIG1faml0LnByZXBhcmVGb3JUYWlsQ2FsbFNsb3coKTsKLSAgICAgICAgfQotICAgIH0KLQot
ICAgIEpJVENvbXBpbGVyOjpDYWxsIGZhc3RDYWxsID0gaXNUYWlsID8gbV9qaXQubmVhclRhaWxD
YWxsKCkgOiBtX2ppdC5uZWFyQ2FsbCgpOwotCisgICAgICAgIHNsb3dDYXNlcyA9IGNhbGxMaW5r
SW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgobV9qaXQsIGNhbGxlZUdQUiwgSW52YWxpZEdQUlJl
ZywgQ2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6Ok5vLCBbJl0geworICAgICAgICAgICAgaWYgKG5v
ZGUtPm9wKCkgPT0gVGFpbENhbGwpIHsKKyAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNl
dEZyYW1lU2h1ZmZsZURhdGEoc2h1ZmZsZURhdGEpOworICAgICAgICAgICAgICAgIENhbGxGcmFt
ZVNodWZmbGVyKG1faml0LCBzaHVmZmxlRGF0YSkucHJlcGFyZUZvclRhaWxDYWxsKCk7CisgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIG1faml0LmVtaXRSZXN0b3JlQ2FsbGVl
U2F2ZXMoKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5wcmVwYXJlRm9yVGFpbENhbGxTbG93KCk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworICAgIH0gZWxzZQorICAgICAgICBzbG93Q2Fz
ZXMgPSBjYWxsTGlua0luZm8tPmVtaXRGYXN0UGF0aChtX2ppdCwgY2FsbGVlR1BSLCBJbnZhbGlk
R1BSUmVnLCBDYWxsTGlua0luZm86OlVzZURhdGFJQzo6Tm8pOwogICAgIEpJVENvbXBpbGVyOjpK
dW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7CiAKLSAgICBzbG93UGF0aC5saW5rKCZtX2ppdCk7Cisg
ICAgc2xvd0Nhc2VzLmxpbmsoJm1faml0KTsKKyAgICBhdXRvIHNsb3dQYXRoU3RhcnQgPSBtX2pp
dC5sYWJlbCgpOwogCiAgICAgaWYgKG5vZGUtPm9wKCkgPT0gVGFpbENhbGwpIHsKICAgICAgICAg
Q2FsbEZyYW1lU2h1ZmZsZXIgY2FsbEZyYW1lU2h1ZmZsZXIobV9qaXQsIHNodWZmbGVEYXRhKTsK
QEAgLTkwNSwyMyArODk4LDIyIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUq
IG5vZGUKICAgICAgICAgY2FsbEZyYW1lU2h1ZmZsZXIucHJlcGFyZUZvclNsb3dQYXRoKCk7CiAg
ICAgfSBlbHNlIHsKICAgICAgICAgbV9qaXQubW92ZShjYWxsZWVHUFIsIEdQUkluZm86OnJlZ1Qw
KTsgLy8gQ2FsbGVlIG5lZWRzIHRvIGJlIGluIHJlZ1QwCi0KICAgICAgICAgaWYgKGlzVGFpbCkK
ICAgICAgICAgICAgIG1faml0LmVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsgLy8gVGhpcyBuZWVk
cyB0byBoYXBwZW4gYWZ0ZXIgd2UgbW92ZWQgY2FsbGVlR1BSIHRvIHJlZ1QwCiAgICAgfQogCi0g
ICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKGNhbGxMaW5rSW5mbyksIEdQUkluZm86OnJlZ1Qy
KTsgLy8gTGluayBpbmZvIG5lZWRzIHRvIGJlIGluIHJlZ1QyCiAgICAgbV9qaXQubW92ZShUcnVz
dGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBnbG9iYWxPYmplY3QpLCBHUFJJbmZvOjpy
ZWdUMyk7IC8vIEpTR2xvYmFsT2JqZWN0IG5lZWRzIHRvIGJlIGluIHJlZ1QzCi0gICAgSklUQ29t
cGlsZXI6OkNhbGwgc2xvd0NhbGwgPSBtX2ppdC5uZWFyQ2FsbCgpOworICAgIGNhbGxMaW5rSW5m
by0+ZW1pdFNsb3dQYXRoKHZtKCksIG1faml0KTsKIAogICAgIGRvbmUubGluaygmbV9qaXQpOwor
ICAgIGF1dG8gZG9uZUxvY2F0aW9uID0gbV9qaXQubGFiZWwoKTsKIAogICAgIGlmIChpc1RhaWwp
CiAgICAgICAgIG1faml0LmFib3J0V2l0aFJlYXNvbihKSVREaWRSZXR1cm5Gcm9tVGFpbENhbGwp
OwogICAgIGVsc2UKICAgICAgICAgc2V0UmVzdWx0QW5kUmVzZXRTdGFjaygpOwogCi0gICAgbV9q
aXQuYWRkSlNDYWxsKGZhc3RDYWxsLCBzbG93Q2FsbCwgdGFyZ2V0VG9DaGVjaywgY2FsbExpbmtJ
bmZvKTsKKyAgICBtX2ppdC5hZGRKU0NhbGwoc2xvd1BhdGhTdGFydCwgZG9uZUxvY2F0aW9uLCBj
YWxsTGlua0luZm8pOwogfQogCiAvLyBDbGFuZyBzaG91bGQgYWxsb3cgdW5yZWFjaGFibGUgW1tj
bGFuZzo6ZmFsbHRocm91Z2hdXSBpbiB0ZW1wbGF0ZSBmdW5jdGlvbnMgaWYgYW55IHRlbXBsYXRl
IGV4cGFuc2lvbiB1c2VzIGl0CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExv
d2VyREZHVG9CMy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExMb3dlckRGR1RvQjMuY3BwCShyZXZpc2lvbiAyNzY5NzcpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk3MTcsMjQg
Kzk3MTcsMjAgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjp0
YWdGb3IoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzKSkpOwogCiAgICAgICAgICAgICAgICAgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8g
PSBqaXQuY29kZUJsb2NrKCktPmFkZENhbGxMaW5rSW5mbyhub2RlLT5vcmlnaW4uc2VtYW50aWMp
OworICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0VXBDYWxsKAorICAgICAgICAgICAg
ICAgICAgICBub2RlLT5vcCgpID09IENvbnN0cnVjdCA/IENhbGxMaW5rSW5mbzo6Q29uc3RydWN0
IDogQ2FsbExpbmtJbmZvOjpDYWxsLCBHUFJJbmZvOjpyZWdUMCk7CiAKLSAgICAgICAgICAgICAg
ICBDQ2FsbEhlbHBlcnM6OkRhdGFMYWJlbFB0ciB0YXJnZXRUb0NoZWNrOwotICAgICAgICAgICAg
ICAgIENDYWxsSGVscGVyczo6SnVtcCBzbG93UGF0aCA9IGppdC5icmFuY2hQdHJXaXRoUGF0Y2go
Ci0gICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Tm90RXF1YWwsIEdQUkluZm86OnJl
Z1QwLCB0YXJnZXRUb0NoZWNrLAotICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW1QdHIobnVsbHB0cikpOwotCi0gICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpD
YWxsIGZhc3RDYWxsID0gaml0Lm5lYXJDYWxsKCk7CisgICAgICAgICAgICAgICAgYXV0byBzbG93
UGF0aCA9IGNhbGxMaW5rSW5mby0+ZW1pdEZhc3RQYXRoKGppdCwgR1BSSW5mbzo6cmVnVDAsIElu
dmFsaWRHUFJSZWcsIENhbGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpObyk7CiAgICAgICAgICAgICAg
ICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGRvbmUgPSBqaXQuanVtcCgpOwogCiAgICAgICAgICAgICAg
ICAgc2xvd1BhdGgubGluaygmaml0KTsKLQotICAgICAgICAgICAgICAgIGppdC5tb3ZlKENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbVB0cihjYWxsTGlua0luZm8pLCBHUFJJbmZvOjpyZWdUMik7Cisg
ICAgICAgICAgICAgICAgYXV0byBzbG93UGF0aFN0YXJ0ID0gaml0LmxhYmVsKCk7CiAgICAgICAg
ICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGppdC5jb2RlQmxv
Y2soKS0+Z2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBHUFJJbmZvOjpy
ZWdUMyk7Ci0gICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIHNsb3dDYWxsID0gaml0
Lm5lYXJDYWxsKCk7CisgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5lbWl0U2xvd1BhdGgo
KnZtLCBqaXQpOworCiAgICAgICAgICAgICAgICAgZG9uZS5saW5rKCZqaXQpOwogCi0gICAgICAg
ICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRVcENhbGwoCi0gICAgICAgICAgICAgICAgICAgIG5v
ZGUtPm9wKCkgPT0gQ29uc3RydWN0ID8gQ2FsbExpbmtJbmZvOjpDb25zdHJ1Y3QgOiBDYWxsTGlu
a0luZm86OkNhbGwsIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgICAgICAgICBhdXRvIGRvbmVM
b2NhdGlvbiA9IGppdC5sYWJlbCgpOwogCiAgICAgICAgICAgICAgICAgaml0LmFkZFB0cigKICAg
ICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoLXBhcmFtcy5wcm9j
KCkuZnJhbWVTaXplKCkpLApAQCAtOTc0MiwxMyArOTczOCw5IEBAIHByaXZhdGU6CiAKICAgICAg
ICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soCiAgICAgICAgICAgICAgICAgICAgIFs9XSAoTGlu
a0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyPEpJVFRodW5rUHRyVGFnPiBsaW5rQ2FsbCA9IHZtLT5nZXRDVElTdHViKGxp
bmtDYWxsVGh1bmtHZW5lcmF0b3IpLmNvZGUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGxp
bmtCdWZmZXIubGluayhzbG93Q2FsbCwgRnVuY3Rpb25QdHI8SklUVGh1bmtQdHJUYWc+KGxpbmtD
YWxsKSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0Q2FsbExv
Y2F0aW9ucygKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxK
U0ludGVybmFsUHRyVGFnPihsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxKU0ludGVybmFs
UHRyVGFnPihzbG93Q2FsbCkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvZGVMb2Nh
dGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+KGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVy
bmFsUHRyVGFnPih0YXJnZXRUb0NoZWNrKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
bGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8SlNJbnRlcm5hbFB0clRhZz4oZmFzdENhbGwp
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0Q29kZUxvY2F0aW9u
cygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJ
bnRlcm5hbFB0clRhZz4oc2xvd1BhdGhTdGFydCksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KGRvbmVMb2NhdGlvbikp
OwogICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIH0pOwogCkBAIC05ODU3LDYz
ICs5ODQ5LDUwIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIHNodWZmbGVEYXRhLnNl
dHVwQ2FsbGVlU2F2ZVJlZ2lzdGVycyhqaXQuY29kZUJsb2NrKCkpOwogICAgICAgICAgICAgICAg
ICAgICAKICAgICAgICAgICAgICAgICAgICAgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8gPSBq
aXQuY29kZUJsb2NrKCktPmFkZENhbGxMaW5rSW5mbyhub2RlLT5vcmlnaW4uc2VtYW50aWMpOwor
ICAgICAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldFVwQ2FsbChDYWxsTGlua0luZm86
OkRpcmVjdFRhaWxDYWxsLCBJbnZhbGlkR1BSUmVnKTsKICAgICAgICAgICAgICAgICAgICAgCi0g
ICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6UGF0Y2hhYmxlSnVtcCBwYXRjaGFibGVK
dW1wID0gaml0LnBhdGNoYWJsZUp1bXAoKTsKICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpMYWJlbCBtYWluUGF0aCA9IGppdC5sYWJlbCgpOwotICAgICAgICAgICAgICAgICAgICAK
ICAgICAgICAgICAgICAgICAgICAgaml0LnN0b3JlMzIoCiAgICAgICAgICAgICAgICAgICAgICAg
ICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihjYWxsU2l0ZUluZGV4LmJpdHMoKSksCiAgICAg
ICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OnRhZ0ZvcihWaXJ0dWFsUmVnaXN0ZXIo
Q2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKSk7Ci0gICAgICAgICAg
ICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0RnJhbWVTaHVmZmxl
RGF0YShzaHVmZmxlRGF0YSk7Ci0gICAgICAgICAgICAgICAgICAgIENhbGxGcmFtZVNodWZmbGVy
KGppdCwgc2h1ZmZsZURhdGEpLnByZXBhcmVGb3JUYWlsQ2FsbCgpOwotICAgICAgICAgICAgICAg
ICAgICAKLSAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNhbGwgPSBqaXQu
bmVhclRhaWxDYWxsKCk7CisgICAgICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+ZW1pdERp
cmVjdFRhaWxDYWxsRmFzdFBhdGgoaml0LCBbJl0geworICAgICAgICAgICAgICAgICAgICAgICAg
Y2FsbExpbmtJbmZvLT5zZXRGcmFtZVNodWZmbGVEYXRhKHNodWZmbGVEYXRhKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIENhbGxGcmFtZVNodWZmbGVyKGppdCwgc2h1ZmZsZURhdGEpLnByZXBh
cmVGb3JUYWlsQ2FsbCgpOworICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAg
ICAgICAgCiAgICAgICAgICAgICAgICAgICAgIGppdC5hYm9ydFdpdGhSZWFzb24oSklURGlkUmV0
dXJuRnJvbVRhaWxDYWxsKTsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAg
ICAgIENDYWxsSGVscGVyczo6TGFiZWwgc2xvd1BhdGggPSBqaXQubGFiZWwoKTsKLSAgICAgICAg
ICAgICAgICAgICAgcGF0Y2hhYmxlSnVtcC5tX2p1bXAubGlua1RvKHNsb3dQYXRoLCAmaml0KTsK
ICAgICAgICAgICAgICAgICAgICAgY2FsbE9wZXJhdGlvbigKICAgICAgICAgICAgICAgICAgICAg
ICAgICpzdGF0ZSwgdG9TYXZlLCBqaXQsCiAgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5v
cmlnaW4uc2VtYW50aWMsIGV4Y2VwdGlvbnMuZ2V0KCksIG9wZXJhdGlvbkxpbmtEaXJlY3RDYWxs
LAogICAgICAgICAgICAgICAgICAgICAgICAgSW52YWxpZEdQUlJlZywgQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tUHRyKGNhbGxMaW5rSW5mbyksIGNhbGxlZUdQUikuY2FsbCgpOwogICAgICAgICAg
ICAgICAgICAgICBqaXQuanVtcCgpLmxpbmtUbyhtYWluUGF0aCwgJmppdCk7Ci0gICAgICAgICAg
ICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldFVwQ2FsbChD
YWxsTGlua0luZm86OkRpcmVjdFRhaWxDYWxsLCBJbnZhbGlkR1BSUmVnKTsKICAgICAgICAgICAg
ICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRFeGVjdXRhYmxlRHVyaW5nQ29tcGlsYXRpb24oZXhl
Y3V0YWJsZSk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChudW1BbGxvY2F0ZWRBcmdzID4gbnVt
UGFzc2VkQXJncykKICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0TWF4
QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMobnVtQWxsb2NhdGVkQXJncyk7CiAgICAgICAgICAg
ICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soCi0gICAgICAg
ICAgICAgICAgICAgICAgICBbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBw
YXRjaGFibGVKdW1wTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0
clRhZz4ocGF0Y2hhYmxlSnVtcCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29kZUxv
Y2F0aW9uTmVhckNhbGw8SlNJbnRlcm5hbFB0clRhZz4gY2FsbExvY2F0aW9uID0gbGlua0J1ZmZl
ci5sb2NhdGlvbk9mTmVhckNhbGw8SlNJbnRlcm5hbFB0clRhZz4oY2FsbCk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gc2xv
d1BhdGhMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihz
bG93UGF0aCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNl
dENhbGxMb2NhdGlvbnMoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGNoYWJs
ZUp1bXBMb2NhdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGhM
b2NhdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbExvY2F0aW9uKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgICAgICBqaXQuYWRk
TGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBjYWxsTGlua0luZm8tPnNldENvZGVMb2NhdGlvbnMoCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KHNsb3dQ
YXRoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0lu
dGVybmFsUHRyVGFnPigpKTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCiAgICAg
ICAgICAgICAgICAgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8gPSBqaXQuY29kZUJsb2NrKCkt
PmFkZENhbGxMaW5rSW5mbyhub2RlLT5vcmlnaW4uc2VtYW50aWMpOwotICAgICAgICAgICAgICAg
IAotICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6TGFiZWwgbWFpblBhdGggPSBqaXQubGFi
ZWwoKTsKKyAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldFVwQ2FsbCgKKyAgICAgICAg
ICAgICAgICAgICAgaXNDb25zdHJ1Y3QgPyBDYWxsTGlua0luZm86OkRpcmVjdENvbnN0cnVjdCA6
IENhbGxMaW5rSW5mbzo6RGlyZWN0Q2FsbCwgSW52YWxpZEdQUlJlZyk7CiAKKyAgICAgICAgICAg
ICAgICBDQ2FsbEhlbHBlcnM6OkxhYmVsIG1haW5QYXRoID0gaml0LmxhYmVsKCk7CiAgICAgICAg
ICAgICAgICAgaml0LnN0b3JlMzIoCiAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbTMyKGNhbGxTaXRlSW5kZXguYml0cygpKSwKICAgICAgICAgICAgICAgICAgICAg
Q0NhbGxIZWxwZXJzOjp0YWdGb3IoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzKSkpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAg
ICAgIENDYWxsSGVscGVyczo6Q2FsbCBjYWxsID0gaml0Lm5lYXJDYWxsKCk7CisgICAgICAgICAg
ICAgICAgY2FsbExpbmtJbmZvLT5lbWl0RGlyZWN0RmFzdFBhdGgoaml0KTsKICAgICAgICAgICAg
ICAgICBqaXQuYWRkUHRyKAogICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW0zMigtcGFyYW1zLnByb2MoKS5mcmFtZVNpemUoKSksCiAgICAgICAgICAgICAgICAgICAg
IEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJl
Z2lzdGVyKTsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8t
PnNldFVwQ2FsbCgKLSAgICAgICAgICAgICAgICAgICAgaXNDb25zdHJ1Y3QgPyBDYWxsTGlua0lu
Zm86OkRpcmVjdENvbnN0cnVjdCA6IENhbGxMaW5rSW5mbzo6RGlyZWN0Q2FsbCwgSW52YWxpZEdQ
UlJlZyk7CiAgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRFeGVjdXRhYmxlRHVyaW5n
Q29tcGlsYXRpb24oZXhlY3V0YWJsZSk7CiAgICAgICAgICAgICAgICAgaWYgKG51bUFsbG9jYXRl
ZEFyZ3MgPiBudW1QYXNzZWRBcmdzKQogICAgICAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8t
PnNldE1heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKG51bUFsbG9jYXRlZEFyZ3MpOwpAQCAt
OTkzNSwxNSArOTkxNCw5IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgICAgICAgICAgICAgIGppdC5hZGRMaW5rVGFzaygKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9uTmVhckNhbGw8SlNJbnRlcm5hbFB0clRhZz4g
Y2FsbExvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8SlNJbnRlcm5hbFB0
clRhZz4oY2FsbCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvZGVMb2NhdGlv
bkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IHNsb3dQYXRoTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxv
Y2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oc2xvd1BhdGgpOwotCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCBzbG93UGF0aExvY2F0aW9uKTsK
LQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldENhbGxM
b2NhdGlvbnMoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2RlTG9jYXRp
b25MYWJlbDxKU0ludGVybmFsUHRyVGFnPigpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc2xvd1BhdGhMb2NhdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNhbGxMb2NhdGlvbik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNh
bGxMaW5rSW5mby0+c2V0Q29kZUxvY2F0aW9ucygKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihzbG93UGF0
aCksIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFi
ZWw8SlNJbnRlcm5hbFB0clRhZz4oKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7
CiAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgfSk7CkBAIC0xMDAzNCw0MCAr
MTAwMDcsMzAgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBzaHVmZmxlRGF0YS5zZXR1cENh
bGxlZVNhdmVSZWdpc3RlcnMoaml0LmNvZGVCbG9jaygpKTsKIAogICAgICAgICAgICAgICAgIENh
bGxMaW5rSW5mbyogY2FsbExpbmtJbmZvID0gaml0LmNvZGVCbG9jaygpLT5hZGRDYWxsTGlua0lu
Zm8oY29kZU9yaWdpbik7CisgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRVcENhbGwo
Q2FsbExpbmtJbmZvOjpUYWlsQ2FsbCwgR1BSSW5mbzo6cmVnVDApOwogCi0gICAgICAgICAgICAg
ICAgQ0NhbGxIZWxwZXJzOjpEYXRhTGFiZWxQdHIgdGFyZ2V0VG9DaGVjazsKLSAgICAgICAgICAg
ICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgc2xvd1BhdGggPSBqaXQuYnJhbmNoUHRyV2l0aFBhdGNo
KAotICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCBHUFJJbmZvOjpy
ZWdUMCwgdGFyZ2V0VG9DaGVjaywKLSAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tUHRyKG51bGxwdHIpKTsKLQotICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+
c2V0RnJhbWVTaHVmZmxlRGF0YShzaHVmZmxlRGF0YSk7Ci0gICAgICAgICAgICAgICAgQ2FsbEZy
YW1lU2h1ZmZsZXIoaml0LCBzaHVmZmxlRGF0YSkucHJlcGFyZUZvclRhaWxDYWxsKCk7Ci0KLSAg
ICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgZmFzdENhbGwgPSBqaXQubmVhclRhaWxD
YWxsKCk7CisgICAgICAgICAgICAgICAgYXV0byBzbG93UGF0aCA9IGNhbGxMaW5rSW5mby0+ZW1p
dFRhaWxDYWxsRmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgSW52YWxpZEdQUlJlZywgQ2Fs
bExpbmtJbmZvOjpVc2VEYXRhSUM6Ok5vLCBbJl0geworICAgICAgICAgICAgICAgICAgICBjYWxs
TGlua0luZm8tPnNldEZyYW1lU2h1ZmZsZURhdGEoc2h1ZmZsZURhdGEpOworICAgICAgICAgICAg
ICAgICAgICBDYWxsRnJhbWVTaHVmZmxlcihqaXQsIHNodWZmbGVEYXRhKS5wcmVwYXJlRm9yVGFp
bENhbGwoKTsKKyAgICAgICAgICAgICAgICB9KTsKIAogICAgICAgICAgICAgICAgIHNsb3dQYXRo
LmxpbmsoJmppdCk7Ci0KKyAgICAgICAgICAgICAgICBhdXRvIHNsb3dQYXRoU3RhcnQgPSBqaXQu
bGFiZWwoKTsKICAgICAgICAgICAgICAgICBDYWxsRnJhbWVTaHVmZmxlciBzbG93UGF0aFNodWZm
bGVyKGppdCwgc2h1ZmZsZURhdGEpOwogICAgICAgICAgICAgICAgIHNsb3dQYXRoU2h1ZmZsZXIu
c2V0Q2FsbGVlSlNWYWx1ZVJlZ3MoSlNWYWx1ZVJlZ3MoR1BSSW5mbzo6cmVnVDApKTsKICAgICAg
ICAgICAgICAgICBzbG93UGF0aFNodWZmbGVyLnByZXBhcmVGb3JTbG93UGF0aCgpOwogCi0gICAg
ICAgICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGNhbGxMaW5r
SW5mbyksIEdQUkluZm86OnJlZ1QyKTsKICAgICAgICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW1QdHIoaml0LmNvZGVCbG9jaygpLT5nbG9iYWxPYmplY3RGb3Iobm9k
ZS0+b3JpZ2luLnNlbWFudGljKSksIEdQUkluZm86OnJlZ1QzKTsKLSAgICAgICAgICAgICAgICBD
Q2FsbEhlbHBlcnM6OkNhbGwgc2xvd0NhbGwgPSBqaXQubmVhckNhbGwoKTsKKyAgICAgICAgICAg
ICAgICBjYWxsTGlua0luZm8tPmVtaXRTbG93UGF0aCgqdm0sIGppdCk7CiAKKyAgICAgICAgICAg
ICAgICBhdXRvIGRvbmVMb2NhdGlvbiA9IGppdC5sYWJlbCgpOwogICAgICAgICAgICAgICAgIGpp
dC5hYm9ydFdpdGhSZWFzb24oSklURGlkUmV0dXJuRnJvbVRhaWxDYWxsKTsKIAotICAgICAgICAg
ICAgICAgIGNhbGxMaW5rSW5mby0+c2V0VXBDYWxsKENhbGxMaW5rSW5mbzo6VGFpbENhbGwsIEdQ
UkluZm86OnJlZ1QwKTsKLQogICAgICAgICAgICAgICAgIGppdC5hZGRMaW5rVGFzaygKICAgICAg
ICAgICAgICAgICAgICAgWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SklUVGh1bmtQdHJUYWc+IGxpbmtD
YWxsID0gdm0tPmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcikuY29kZSgpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKHNsb3dDYWxsLCBGdW5jdGlvblB0
cjxKSVRUaHVua1B0clRhZz4obGlua0NhbGwpKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAg
Y2FsbExpbmtJbmZvLT5zZXRDYWxsTG9jYXRpb25zKAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+KGxpbmtCdWZmZXIubG9jYXRp
b25PZk5lYXJDYWxsPEpTSW50ZXJuYWxQdHJUYWc+KHNsb3dDYWxsKSksCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4obGlua0J1
ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KHRhcmdldFRvQ2hlY2spKSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxKU0lu
dGVybmFsUHRyVGFnPihmYXN0Q2FsbCkpOworICAgICAgICAgICAgICAgICAgICAgICAgY2FsbExp
bmtJbmZvLT5zZXRDb2RlTG9jYXRpb25zKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxp
bmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihzbG93UGF0aFN0YXJ0KSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5h
bFB0clRhZz4oZG9uZUxvY2F0aW9uKSk7CiAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAg
ICAgICAgfSk7CiAgICAgfQpAQCAtMTAzMjAsNDAgKzEwMjgzLDM4IEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICBjYWxsVHlwZSA9IENhbGxMaW5r
SW5mbzo6Q2FsbFZhcmFyZ3M7CiAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY2Fs
bExpbmtJbmZvLT5zZXRVcENhbGwoY2FsbFR5cGUsIEdQUkluZm86OnJlZ1QwKTsKKwogICAgICAg
ICAgICAgICAgIGJvb2wgaXNUYWlsQ2FsbCA9IENhbGxMaW5rSW5mbzo6Y2FsbE1vZGVGb3IoY2Fs
bFR5cGUpID09IENhbGxNb2RlOjpUYWlsOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAg
ICAgIENDYWxsSGVscGVyczo6RGF0YUxhYmVsUHRyIHRhcmdldFRvQ2hlY2s7Ci0gICAgICAgICAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIHNsb3dQYXRoID0gaml0LmJyYW5jaFB0cldpdGhQYXRj
aCgKLSAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwgR1BSSW5mbzo6
cmVnVDAsIHRhcmdldFRvQ2hlY2ssCi0gICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbVB0cihudWxscHRyKSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAg
ICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGZhc3RDYWxsOworCisgICAgICAgICAgICAgICAgQVNTRVJU
KCF1c2VkUmVnaXN0ZXJzLmdldChHUFJJbmZvOjpyZWdUMikpOyAvLyBVc2VkIG9uIHRoZSBzbG93
IHBhdGguCisKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dQYXRo
OwogICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBkb25lOwotICAgICAgICAgICAg
ICAgIAogICAgICAgICAgICAgICAgIGlmIChpc1RhaWxDYWxsKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGppdC5lbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7Ci0gICAgICAgICAgICAgICAgICAgIGpp
dC5wcmVwYXJlRm9yVGFpbENhbGxTbG93KCk7Ci0gICAgICAgICAgICAgICAgICAgIGZhc3RDYWxs
ID0gaml0Lm5lYXJUYWlsQ2FsbCgpOworICAgICAgICAgICAgICAgICAgICBzbG93UGF0aCA9IGNh
bGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgSW52
YWxpZEdQUlJlZywgQ2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6Ok5vLCBbJl0geworICAgICAgICAg
ICAgICAgICAgICAgICAgaml0LmVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGppdC5wcmVwYXJlRm9yVGFpbENhbGxTbG93KCk7CisgICAgICAgICAgICAg
ICAgICAgIH0pOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAg
IGZhc3RDYWxsID0gaml0Lm5lYXJDYWxsKCk7CisgICAgICAgICAgICAgICAgICAgIHNsb3dQYXRo
ID0gY2FsbExpbmtJbmZvLT5lbWl0RmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgSW52YWxp
ZEdQUlJlZywgQ2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6Ok5vKTsKICAgICAgICAgICAgICAgICAg
ICAgZG9uZSA9IGppdC5qdW1wKCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgICAgIHNsb3dQYXRoLmxpbmsoJmppdCk7CisgICAgICAgICAgICAgICAg
YXV0byBzbG93UGF0aFN0YXJ0ID0gaml0LmxhYmVsKCk7CiAKICAgICAgICAgICAgICAgICBpZiAo
aXNUYWlsQ2FsbCkKICAgICAgICAgICAgICAgICAgICAgaml0LmVtaXRSZXN0b3JlQ2FsbGVlU2F2
ZXMoKTsKLSAgICAgICAgICAgICAgICBBU1NFUlQoIXVzZWRSZWdpc3RlcnMuZ2V0KEdQUkluZm86
OnJlZ1QyKSk7Ci0gICAgICAgICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tUHRyKGNhbGxMaW5rSW5mbyksIEdQUkluZm86OnJlZ1QyKTsKICAgICAgICAgICAgICAgICBq
aXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoaml0LmNvZGVCbG9jaygpLT5nbG9i
YWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIEdQUkluZm86OnJlZ1QzKTsKLSAg
ICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgc2xvd0NhbGwgPSBqaXQubmVhckNhbGwo
KTsKKyAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPmVtaXRTbG93UGF0aCgqdm0sIGppdCk7
CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaWYgKGlzVGFpbENhbGwpCiAgICAg
ICAgICAgICAgICAgICAgIGppdC5hYm9ydFdpdGhSZWFzb24oSklURGlkUmV0dXJuRnJvbVRhaWxD
YWxsKTsKICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIGRvbmUubGlu
aygmaml0KTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8t
PnNldFVwQ2FsbChjYWxsVHlwZSwgR1BSSW5mbzo6cmVnVDApOworCisgICAgICAgICAgICAgICAg
YXV0byBkb25lTG9jYXRpb24gPSBqaXQubGFiZWwoKTsKIAogICAgICAgICAgICAgICAgIGppdC5h
ZGRQdHIoCiAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKC1v
cmlnaW5hbFN0YWNrSGVpZ2h0KSwKQEAgLTEwMzYxLDEzICsxMDMyMiw5IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaml0LmFkZExpbmtUYXNrKAogICAgICAg
ICAgICAgICAgICAgICBbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKSVRUaHVua1B0clRhZz4gbGlua0Nh
bGwgPSB2bS0+Z2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5jb2RlKCk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoc2xvd0NhbGwsIEZ1bmN0aW9uUHRy
PEpJVFRodW5rUHRyVGFnPihsaW5rQ2FsbCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgCi0g
ICAgICAgICAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldENhbGxMb2NhdGlvbnMoCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0
clRhZz4obGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8SlNJbnRlcm5hbFB0clRhZz4oc2xv
d0NhbGwpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxK
U0ludGVybmFsUHRyVGFnPihsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4o
dGFyZ2V0VG9DaGVjaykpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIu
bG9jYXRpb25PZk5lYXJDYWxsPEpTSW50ZXJuYWxQdHJUYWc+KGZhc3RDYWxsKSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldENvZGVMb2NhdGlvbnMoCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJU
YWc+KHNsb3dQYXRoU3RhcnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZm
ZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihkb25lTG9jYXRpb24pKTsKICAgICAgICAg
ICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICB9KTsKIApAQCAtMTA2MDcsMzkgKzEwNTY0LDM2
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICBj
YWxsVHlwZSA9IENhbGxMaW5rSW5mbzo6Q2FsbFZhcmFyZ3M7CiAgICAgICAgICAgICAgICAgCi0g
ICAgICAgICAgICAgICAgYm9vbCBpc1RhaWxDYWxsID0gQ2FsbExpbmtJbmZvOjpjYWxsTW9kZUZv
cihjYWxsVHlwZSkgPT0gQ2FsbE1vZGU6OlRhaWw7CisgICAgICAgICAgICAgICAgY2FsbExpbmtJ
bmZvLT5zZXRVcENhbGwoY2FsbFR5cGUsIEdQUkluZm86OnJlZ1QwKTsKICAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkRhdGFMYWJlbFB0ciB0YXJnZXRUb0No
ZWNrOwotICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBzbG93UGF0aCA9IGppdC5i
cmFuY2hQdHJXaXRoUGF0Y2goCi0gICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Tm90
RXF1YWwsIEdQUkluZm86OnJlZ1QwLCB0YXJnZXRUb0NoZWNrLAotICAgICAgICAgICAgICAgICAg
ICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobnVsbHB0cikpOworICAgICAgICAgICAgICAg
IGJvb2wgaXNUYWlsQ2FsbCA9IENhbGxMaW5rSW5mbzo6Y2FsbE1vZGVGb3IoY2FsbFR5cGUpID09
IENhbGxNb2RlOjpUYWlsOwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIENDYWxs
SGVscGVyczo6Q2FsbCBmYXN0Q2FsbDsKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1
bXBMaXN0IHNsb3dQYXRoOwogICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBkb25l
OwotICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGlmIChpc1RhaWxDYWxsKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGppdC5lbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7Ci0gICAgICAg
ICAgICAgICAgICAgIGppdC5wcmVwYXJlRm9yVGFpbENhbGxTbG93KCk7Ci0gICAgICAgICAgICAg
ICAgICAgIGZhc3RDYWxsID0gaml0Lm5lYXJUYWlsQ2FsbCgpOworICAgICAgICAgICAgICAgICAg
ICBzbG93UGF0aCA9IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoaml0LCBHUFJJ
bmZvOjpyZWdUMCwgSW52YWxpZEdQUlJlZywgQ2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6Ok5vLCBb
Jl0geworICAgICAgICAgICAgICAgICAgICAgICAgaml0LmVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMo
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGppdC5wcmVwYXJlRm9yVGFpbENhbGxTbG93KCk7
CisgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgICAgIGZhc3RDYWxsID0gaml0Lm5lYXJDYWxsKCk7CisgICAgICAgICAgICAg
ICAgICAgIHNsb3dQYXRoID0gY2FsbExpbmtJbmZvLT5lbWl0RmFzdFBhdGgoaml0LCBHUFJJbmZv
OjpyZWdUMCwgSW52YWxpZEdQUlJlZywgQ2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6Ok5vKTsKICAg
ICAgICAgICAgICAgICAgICAgZG9uZSA9IGppdC5qdW1wKCk7CiAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIHNsb3dQYXRoLmxpbmsoJmppdCk7Cisg
ICAgICAgICAgICAgICAgYXV0byBzbG93UGF0aFN0YXJ0ID0gaml0LmxhYmVsKCk7CiAKICAgICAg
ICAgICAgICAgICBpZiAoaXNUYWlsQ2FsbCkKICAgICAgICAgICAgICAgICAgICAgaml0LmVtaXRS
ZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKLSAgICAgICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW1QdHIoY2FsbExpbmtJbmZvKSwgR1BSSW5mbzo6cmVnVDIpOwogICAgICAg
ICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihqaXQuY29kZUJs
b2NrKCktPmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgR1BSSW5mbzo6
cmVnVDMpOwotICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBzbG93Q2FsbCA9IGpp
dC5uZWFyQ2FsbCgpOworICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+ZW1pdFNsb3dQYXRo
KCp2bSwgaml0KTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBpZiAoaXNUYWls
Q2FsbCkKICAgICAgICAgICAgICAgICAgICAgaml0LmFib3J0V2l0aFJlYXNvbihKSVREaWRSZXR1
cm5Gcm9tVGFpbENhbGwpOwogICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAg
ICAgZG9uZS5saW5rKCZqaXQpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGNh
bGxMaW5rSW5mby0+c2V0VXBDYWxsKGNhbGxUeXBlLCBHUFJJbmZvOjpyZWdUMCk7CisKKyAgICAg
ICAgICAgICAgICBhdXRvIGRvbmVMb2NhdGlvbiA9IGppdC5sYWJlbCgpOwogICAgICAgICAgICAg
ICAgIAogICAgICAgICAgICAgICAgIGppdC5hZGRQdHIoCiAgICAgICAgICAgICAgICAgICAgIEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKC1vcmlnaW5hbFN0YWNrSGVpZ2h0KSwKQEAgLTEwNjQ3
LDEzICsxMDYwMSw5IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAg
ICAgaml0LmFkZExpbmtUYXNrKAogICAgICAgICAgICAgICAgICAgICBbPV0gKExpbmtCdWZmZXIm
IGxpbmtCdWZmZXIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29k
ZVB0cjxKSVRUaHVua1B0clRhZz4gbGlua0NhbGwgPSB2bS0+Z2V0Q1RJU3R1YihsaW5rQ2FsbFRo
dW5rR2VuZXJhdG9yKS5jb2RlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVy
Lmxpbmsoc2xvd0NhbGwsIEZ1bmN0aW9uUHRyPEpJVFRodW5rUHRyVGFnPihsaW5rQ2FsbCkpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICBjYWxsTGlu
a0luZm8tPnNldENhbGxMb2NhdGlvbnMoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29k
ZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4obGlua0J1ZmZlci5sb2NhdGlvbk9mTmVh
ckNhbGw8SlNJbnRlcm5hbFB0clRhZz4oc2xvd0NhbGwpKSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPihsaW5rQnVmZmVyLmxv
Y2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4odGFyZ2V0VG9DaGVjaykpLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPEpTSW50ZXJuYWxQ
dHJUYWc+KGZhc3RDYWxsKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8t
PnNldENvZGVMb2NhdGlvbnMoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZl
ci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KHNsb3dQYXRoU3RhcnQpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFn
Pihkb25lTG9jYXRpb24pKTsKICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICB9
KTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmNwcAko
cmV2aXNpb24gMjc2OTc3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBl
cnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MSw2ICs3MSwxNiBAQCB2b2lkIENDYWxsSGVscGVy
czo6ZW5zdXJlU2hhZG93Q2hpY2tlblBhCiAgICAgc3RvcmVQdHIoc2NyYXRjaDIsIEFkZHJlc3Mo
c2NyYXRjaDFOb25BcmdHUFIpKTsKIH0KIAordm9pZCBDQ2FsbEhlbHBlcnM6OmVtaXRKSVRDb2Rl
T3ZlcihNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNJbnRlcm5hbFB0clRhZz4gY29kZSwgV1RGOjpG
dW5jdGlvbjx2b2lkKENDYWxsSGVscGVycyYpPiBlbWl0Q29kZSwgY29uc3QgY2hhciogZGVzY3Jp
cHRpb24pCit7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKKyAgICBlbWl0Q29kZShqaXQpOworCisg
ICAgY29uc3RleHByIGJvb2wgbmVlZHNCcmFuY2hDb21wYWN0aW9uID0gZmFsc2U7CisgICAgTGlu
a0J1ZmZlciBsaW5rQnVmZmVyKGppdCwgY29kZSwgaml0Lm1fYXNzZW1ibGVyLmJ1ZmZlcigpLmNv
ZGVTaXplKCksIEpJVENvbXBpbGF0aW9uTXVzdFN1Y2NlZWQsIG5lZWRzQnJhbmNoQ29tcGFjdGlv
bik7CisgICAgRklOQUxJWkVfQ09ERShsaW5rQnVmZmVyLCBOb1B0clRhZywgZGVzY3JpcHRpb24p
OworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIEVOQUJMRShKSVQpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmgJKHJldmlzaW9uIDI3Njk3
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTgxOCw2ICs4MTgsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBsb2dTaGFkb3dDaGlj
a2VuVGFpbFBhY2tldChHUFJSZWcgc2hhZG93UGFja2V0LCBKU1ZhbHVlUmVncyB0aGlzUmVncywg
R1BSUmVnIHNjb3BlLCBDb2RlQmxvY2sqLCBDYWxsU2l0ZUluZGV4KTsKICAgICAvLyBMZWF2ZXMg
YmVoaW5kIGEgcG9pbnRlciB0byB0aGUgUGFja2V0IHdlIHNob3VsZCB3cml0ZSB0byBpbiBzaGFk
b3dQYWNrZXQuCiAgICAgdm9pZCBlbnN1cmVTaGFkb3dDaGlja2VuUGFja2V0KFZNJiwgR1BSUmVn
IHNoYWRvd1BhY2tldCwgR1BSUmVnIHNjcmF0Y2gxTm9uQXJnR1BSLCBHUFJSZWcgc2NyYXRjaDIp
OworCisgICAgc3RhdGljIHZvaWQgZW1pdEpJVENvZGVPdmVyKE1hY3JvQXNzZW1ibGVyQ29kZVB0
cjxKU0ludGVybmFsUHRyVGFnPiBjb2RlLCBXVEY6OkZ1bmN0aW9uPHZvaWQoQ0NhbGxIZWxwZXJz
Jik+LCBjb25zdCBjaGFyKik7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVC5jcHAJKHJldmlzaW9uIDI3Njk3NykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTU5LDEwICs5NTksOSBAQCBD
b21waWxhdGlvblJlc3VsdCBKSVQ6OmxpbmsoKQogCiAgICAgZm9yIChhdXRvJiBjb21waWxhdGlv
bkluZm8gOiBtX2NhbGxDb21waWxhdGlvbkluZm8pIHsKICAgICAgICAgQ2FsbExpbmtJbmZvJiBp
bmZvID0gKmNvbXBpbGF0aW9uSW5mby5jYWxsTGlua0luZm87Ci0gICAgICAgIGluZm8uc2V0Q2Fs
bExvY2F0aW9ucygKLSAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJU
YWc+KHBhdGNoQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxKU0ludGVybmFsUHRyVGFnPihjb21w
aWxhdGlvbkluZm8uY2FsbFJldHVybkxvY2F0aW9uKSksCi0gICAgICAgICAgICBDb2RlTG9jYXRp
b25MYWJlbDxKU0ludGVybmFsUHRyVGFnPihwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJu
YWxQdHJUYWc+KGNvbXBpbGF0aW9uSW5mby5ob3RQYXRoQmVnaW4pKSwKLSAgICAgICAgICAgIHBh
dGNoQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxKU0ludGVybmFsUHRyVGFnPihjb21waWxhdGlv
bkluZm8uaG90UGF0aE90aGVyKSk7CisgICAgICAgIGluZm8uc2V0Q29kZUxvY2F0aW9ucygKKyAg
ICAgICAgICAgIHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oY29tcGls
YXRpb25JbmZvLnNsb3dQYXRoU3RhcnQpLAorICAgICAgICAgICAgcGF0Y2hCdWZmZXIubG9jYXRp
b25PZjxKU0ludGVybmFsUHRyVGFnPihjb21waWxhdGlvbkluZm8uZG9uZUxvY2F0aW9uKSk7CiAg
ICAgfQogCiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCShyZXZpc2lvbiAyNzY5
NzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xNzcsOSArMTc3LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgfTsKIAogICAgIHN0cnVjdCBD
YWxsQ29tcGlsYXRpb25JbmZvIHsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkRhdGFMYWJlbFB0
ciBob3RQYXRoQmVnaW47Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGhvdFBhdGhPdGhl
cjsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbFJldHVybkxvY2F0aW9uOworICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgc2xvd1BhdGhTdGFydDsKKyAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OkxhYmVsIGRvbmVMb2NhdGlvbjsKICAgICAgICAgQ2FsbExpbmtJbmZvKiBjYWxs
TGlua0luZm87CiAgICAgfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRD
YWxsMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
Q2FsbDMyXzY0LmNwcAkocmV2aXNpb24gMjc2OTc3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRDYWxsMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNTUsNyArMzU1LDcgQEAg
dm9pZCBKSVQ6OmNvbXBpbGVPcENhbGxTbG93Q2FzZShjb25zdCBJbgogICAgIGlmIChvcGNvZGVJ
RCA9PSBvcF90YWlsX2NhbGwgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgfHwg
b3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKQogICAgICAgICBlbWl0
UmVzdG9yZUNhbGxlZVNhdmVzKCk7CiAKLSAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExp
bmtJbmZvSW5kZXhdLmNhbGxSZXR1cm5Mb2NhdGlvbiA9IGVtaXROYWtlZE5lYXJDYWxsKG1fdm0t
PmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFn
PigpKTsKKyAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLnNsb3dD
YWxsUmV0dXJuTG9jYXRpb24gPSBlbWl0TmFrZWROZWFyQ2FsbChtX3ZtLT5nZXRDVElTdHViKGxp
bmtDYWxsVGh1bmtHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKICAgICBp
ZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92
YXJhcmdzKSB7CiAgICAgICAgIGFib3J0V2l0aFJlYXNvbihKSVREaWRSZXR1cm5Gcm9tVGFpbENh
bGwpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCShyZXZpc2lvbiAy
NzY5NzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xOTIsOCArMTkyLDE0IEBAIGJvb2wgSklUOjpjb21waWxlVGFpbENhbGwoY29u
c3QgT3BUYWlsQ2EKICAgICAgICAgVmFsdWVSZWNvdmVyeTo6aW5HUFIocmVnVDAsIERhdGFGb3Jt
YXRKUyk7CiAgICAgc2h1ZmZsZURhdGEuc2V0dXBDYWxsZWVTYXZlUmVnaXN0ZXJzKG1fY29kZUJs
b2NrKTsKICAgICBpbmZvLT5zZXRGcmFtZVNodWZmbGVEYXRhKHNodWZmbGVEYXRhKTsKLSAgICBD
YWxsRnJhbWVTaHVmZmxlcigqdGhpcywgc2h1ZmZsZURhdGEpLnByZXBhcmVGb3JUYWlsQ2FsbCgp
OwotICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uaG90UGF0aE90
aGVyID0gZW1pdE5ha2VkTmVhclRhaWxDYWxsKCk7CisKKyAgICBKdW1wTGlzdCBzbG93UGF0aHMg
PSBpbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aCgqdGhpcywgcmVnVDAsIHJlZ1QyLCBDYWxsTGlu
a0luZm86OlVzZURhdGFJQzo6WWVzLCBbJl0geworICAgICAgICBDYWxsRnJhbWVTaHVmZmxlcigq
dGhpcywgc2h1ZmZsZURhdGEpLnByZXBhcmVGb3JUYWlsQ2FsbCgpOworICAgIH0pOworICAgIGFk
ZFNsb3dDYXNlKHNsb3dQYXRocyk7CisgICAgYXV0byBkb25lTG9jYXRpb24gPSBsYWJlbCgpOwor
ICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uZG9uZUxvY2F0aW9u
ID0gZG9uZUxvY2F0aW9uOworICAgIAogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0yMzIsMjgg
KzIzOCwzMCBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChjb25zdCBJbnN0cnVjdGlvCiAgICAg
aWYgKGNvbXBpbGVDYWxsRXZhbChieXRlY29kZSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIERh
dGFMYWJlbFB0ciBhZGRyZXNzT2ZMaW5rZWRGdW5jdGlvbkNoZWNrOwotICAgIEp1bXAgc2xvd0Nh
c2UgPSBicmFuY2hQdHJXaXRoUGF0Y2goTm90RXF1YWwsIHJlZ1QwLCBhZGRyZXNzT2ZMaW5rZWRG
dW5jdGlvbkNoZWNrLCBUcnVzdGVkSW1tUHRyKG51bGxwdHIpKTsKLSAgICBhZGRTbG93Q2FzZShz
bG93Q2FzZSk7Ci0KICAgICBBU1NFUlQobV9jYWxsQ29tcGlsYXRpb25JbmZvLnNpemUoKSA9PSBj
YWxsTGlua0luZm9JbmRleCk7CiAgICAgaW5mby0+c2V0VXBDYWxsKENhbGxMaW5rSW5mbzo6Y2Fs
bFR5cGVGb3Iob3Bjb2RlSUQpLCByZWdUMCk7CiAgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvLmFw
cGVuZChDYWxsQ29tcGlsYXRpb25JbmZvKCkpOwotICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tj
YWxsTGlua0luZm9JbmRleF0uaG90UGF0aEJlZ2luID0gYWRkcmVzc09mTGlua2VkRnVuY3Rpb25D
aGVjazsKICAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmNhbGxM
aW5rSW5mbyA9IGluZm87CiAKLSAgICBpZiAoY29tcGlsZVRhaWxDYWxsKGJ5dGVjb2RlLCBpbmZv
LCBjYWxsTGlua0luZm9JbmRleCkpIHsKKyAgICBpZiAoY29tcGlsZVRhaWxDYWxsKGJ5dGVjb2Rl
LCBpbmZvLCBjYWxsTGlua0luZm9JbmRleCkpCiAgICAgICAgIHJldHVybjsKLSAgICB9CiAKICAg
ICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgfHwgb3Bjb2RlSUQgPT0gb3Bf
dGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKSB7Ci0gICAgICAgIGVtaXRSZXN0b3JlQ2FsbGVl
U2F2ZXMoKTsKLSAgICAgICAgcHJlcGFyZUZvclRhaWxDYWxsU2xvdygpOwotICAgICAgICBtX2Nh
bGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmhvdFBhdGhPdGhlciA9IGVtaXRO
YWtlZE5lYXJUYWlsQ2FsbCgpOworICAgICAgICBKdW1wTGlzdCBzbG93UGF0aHMgPSBpbmZvLT5l
bWl0VGFpbENhbGxGYXN0UGF0aCgqdGhpcywgcmVnVDAsIHJlZ1QyLCBDYWxsTGlua0luZm86OlVz
ZURhdGFJQzo6WWVzLCBbJl0geworICAgICAgICAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygp
OworICAgICAgICAgICAgcHJlcGFyZUZvclRhaWxDYWxsU2xvdyhHUFJJbmZvOjpyZWdUMik7Cisg
ICAgICAgIH0pOworICAgICAgICBhZGRTbG93Q2FzZShzbG93UGF0aHMpOworICAgICAgICBhdXRv
IGRvbmVMb2NhdGlvbiA9IGxhYmVsKCk7CisgICAgICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tj
YWxsTGlua0luZm9JbmRleF0uZG9uZUxvY2F0aW9uID0gZG9uZUxvY2F0aW9uOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCi0gICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0lu
ZGV4XS5ob3RQYXRoT3RoZXIgPSBlbWl0TmFrZWROZWFyQ2FsbCgpOworICAgIEp1bXBMaXN0IHNs
b3dQYXRocyA9IGluZm8tPmVtaXRGYXN0UGF0aCgqdGhpcywgcmVnVDAsIHJlZ1QyLCBDYWxsTGlu
a0luZm86OlVzZURhdGFJQzo6WWVzKTsKKyAgICBhdXRvIGRvbmVMb2NhdGlvbiA9IGxhYmVsKCk7
CisgICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGhzKTsKKworICAgIG1fY2FsbENvbXBpbGF0aW9uSW5m
b1tjYWxsTGlua0luZm9JbmRleF0uZG9uZUxvY2F0aW9uID0gZG9uZUxvY2F0aW9uOwogCiAgICAg
YWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICog
c2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rl
cik7CiAgICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKQEAgLTI3MSwxNCArMjc5LDEz
IEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2UoY29uc3QgSW4KIAogICAgIGxpbmtB
bGxTbG93Q2FzZXMoaXRlcik7CiAKKyAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJ
bmZvSW5kZXhdLnNsb3dQYXRoU3RhcnQgPSBsYWJlbCgpOworCiAgICAgaWYgKG9wY29kZUlEID09
IG9wX3RhaWxfY2FsbCB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfdmFyYXJncyB8fCBvcGNv
ZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMpCiAgICAgICAgIGVtaXRSZXN0
b3JlQ2FsbGVlU2F2ZXMoKTsKIAogICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCByZWdUMyk7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY2FsbENv
bXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uY2FsbExpbmtJbmZvKSwgcmVnVDIpOwot
Ci0gICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5jYWxsUmV0dXJu
TG9jYXRpb24gPQotICAgICAgICBlbWl0TmFrZWROZWFyQ2FsbChtX3ZtLT5nZXRDVElTdHViKGxp
bmtDYWxsVGh1bmtHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CisgICAgbV9j
YWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5jYWxsTGlua0luZm8tPmVtaXRT
bG93UGF0aCgqbV92bSwgKnRoaXMpOwogCiAgICAgaWYgKG9wY29kZUlEID09IG9wX3RhaWxfY2Fs
bCB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfdmFyYXJncykgewogICAgICAgICBhYm9ydFdp
dGhSZWFzb24oSklURGlkUmV0dXJuRnJvbVRhaWxDYWxsKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMjc2OTc3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTM5Miw3ICsxMzkyLDcgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkxp
bmtDYQogICAgICAgICAgICAgaWYgKCFjYWxsTGlua0luZm8tPnNlZW5PbmNlKCkpCiAgICAgICAg
ICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRTZWVuKCk7CiAgICAgICAgICAgICBlbHNlCi0gICAg
ICAgICAgICAgICAgbGlua0Zvcih2bSwgY2FsbGVlRnJhbWUsICpjYWxsTGlua0luZm8sIG51bGxw
dHIsIGludGVybmFsRnVuY3Rpb24sIGNvZGVQdHIpOworICAgICAgICAgICAgICAgIGxpbmtNb25v
bW9ycGhpY0NhbGwodm0sIGNhbGxlZUZyYW1lLCAqY2FsbExpbmtJbmZvLCBudWxscHRyLCBpbnRl
cm5hbEZ1bmN0aW9uLCBjb2RlUHRyKTsKIAogICAgICAgICAgICAgdm9pZCogbGlua2VkVGFyZ2V0
ID0gY29kZVB0ci5leGVjdXRhYmxlQWRkcmVzcygpOwogICAgICAgICAgICAgcmV0dXJuIGVuY29k
ZVJlc3VsdChsaW5rZWRUYXJnZXQsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGNhbGxMaW5rSW5m
by0+Y2FsbE1vZGUoKSA9PSBDYWxsTW9kZTo6VGFpbCA/IFJldXNlVGhlRnJhbWUgOiBLZWVwVGhl
RnJhbWUpKTsKQEAgLTE0NDAsNyArMTQ0MCw3IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihv
cGVyYXRpb25MaW5rQ2EKICAgICBpZiAoIWNhbGxMaW5rSW5mby0+c2Vlbk9uY2UoKSkKICAgICAg
ICAgY2FsbExpbmtJbmZvLT5zZXRTZWVuKCk7CiAgICAgZWxzZQotICAgICAgICBsaW5rRm9yKHZt
LCBjYWxsZWVGcmFtZSwgKmNhbGxMaW5rSW5mbywgY29kZUJsb2NrLCBjYWxsZWUsIGNvZGVQdHIp
OworICAgICAgICBsaW5rTW9ub21vcnBoaWNDYWxsKHZtLCBjYWxsZWVGcmFtZSwgKmNhbGxMaW5r
SW5mbywgY29kZUJsb2NrLCBjYWxsZWUsIGNvZGVQdHIpOwogCiAgICAgcmV0dXJuIGVuY29kZVJl
c3VsdChjb2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNzKCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+
KGNhbGxMaW5rSW5mby0+Y2FsbE1vZGUoKSA9PSBDYWxsTW9kZTo6VGFpbCA/IFJldXNlVGhlRnJh
bWUgOiBLZWVwVGhlRnJhbWUpKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
UG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUuY3BwCShyZXZpc2lvbiAy
NzY5NzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1BvbHltb3JwaGljQ2FsbFN0dWJS
b3V0aW5lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUsNyArNDUsNyBAQCBQb2x5bW9ycGhpY0Nh
bGxOb2RlOjp+UG9seW1vcnBoaWNDYWxsTm9kCiB2b2lkIFBvbHltb3JwaGljQ2FsbE5vZGU6OnVu
bGluayhWTSYgdm0pCiB7CiAgICAgaWYgKG1fY2FsbExpbmtJbmZvKSB7Ci0gICAgICAgIGRhdGFM
b2dMbklmKE9wdGlvbnM6OmR1bXBEaXNhc3NlbWJseSgpLCAiVW5saW5raW5nIHBvbHltb3JwaGlj
IGNhbGwgYXQgIiwgbV9jYWxsTGlua0luZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbigpLCAiLCBiYyMi
LCBtX2NhbGxMaW5rSW5mby0+Y29kZU9yaWdpbigpLmJ5dGVjb2RlSW5kZXgoKSk7CisgICAgICAg
IGRhdGFMb2dMbklmKE9wdGlvbnM6OmR1bXBEaXNhc3NlbWJseSgpLCAiVW5saW5raW5nIHBvbHlt
b3JwaGljIGNhbGwgYXQgIiwgbV9jYWxsTGlua0luZm8tPmRvbmVMb2NhdGlvbigpLCAiLCBiYyMi
LCBtX2NhbGxMaW5rSW5mby0+Y29kZU9yaWdpbigpLmJ5dGVjb2RlSW5kZXgoKSk7CiAgICAgICAg
IG1fY2FsbExpbmtJbmZvLT51bmxpbmsodm0pOwogICAgIH0KIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L1JlcGF0Y2guY3BwCShyZXZpc2lvbiAyNzY5NzcpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw4IEBA
CiAKICNpZiBFTkFCTEUoSklUKQogCisjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXJQcmludGVyLmgi
CisKICNpbmNsdWRlICJCaW5hcnlTd2l0Y2guaCIKICNpbmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIK
ICNpbmNsdWRlICJDYWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oIgpAQCAtMTE4OCwyMCArMTE5
MCwyMCBAQCB2b2lkIHJlcGF0Y2hJbnN0YW5jZU9mKAogICAgICAgICBmdGxUaHVua0F3YXJlUmVw
YXRjaENhbGwoY29kZUJsb2NrLCBzdHViSW5mby5zbG93UGF0aENhbGxMb2NhdGlvbiwgb3BlcmF0
aW9uSW5zdGFuY2VPZkdlbmVyaWMpOwogfQogCi1zdGF0aWMgdm9pZCBsaW5rU2xvd0ZvcihWTSYs
IENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvLCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUU3R1
YlJvdXRpbmVQdHJUYWc+IGNvZGVSZWYpCitzdGF0aWMgdm9pZCBsaW5rU2xvd1BhdGhUbyhWTSYs
IENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvLCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUU3R1
YlJvdXRpbmVQdHJUYWc+IGNvZGVSZWYpCiB7Ci0gICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hO
ZWFyQ2FsbChjYWxsTGlua0luZm8uY2FsbFJldHVybkxvY2F0aW9uKCksIENvZGVMb2NhdGlvbkxh
YmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihjb2RlUmVmLmNvZGUoKSkpOworICAgIGNhbGxMaW5r
SW5mby5zZXRTbG93UGF0aENhbGxEZXN0aW5hdGlvbihjb2RlUmVmLmNvZGUoKS50ZW1wbGF0ZSBy
ZXRhZ2dlZDxKU0VudHJ5UHRyVGFnPigpKTsKIH0KIAotc3RhdGljIHZvaWQgbGlua1Nsb3dGb3Io
Vk0mIHZtLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbywgVGh1bmtHZW5lcmF0b3IgZ2VuZXJh
dG9yKQorc3RhdGljIHZvaWQgbGlua1Nsb3dQYXRoVG8oVk0mIHZtLCBDYWxsTGlua0luZm8mIGNh
bGxMaW5rSW5mbywgVGh1bmtHZW5lcmF0b3IgZ2VuZXJhdG9yKQogewotICAgIGxpbmtTbG93Rm9y
KHZtLCBjYWxsTGlua0luZm8sIHZtLmdldENUSVN0dWIoZ2VuZXJhdG9yKS5yZXRhZ2dlZDxKSVRT
dHViUm91dGluZVB0clRhZz4oKSk7CisgICAgbGlua1Nsb3dQYXRoVG8odm0sIGNhbGxMaW5rSW5m
bywgdm0uZ2V0Q1RJU3R1YihnZW5lcmF0b3IpLnJldGFnZ2VkPEpJVFN0dWJSb3V0aW5lUHRyVGFn
PigpKTsKIH0KIAogc3RhdGljIHZvaWQgbGlua1Nsb3dGb3IoVk0mIHZtLCBDYWxsTGlua0luZm8m
IGNhbGxMaW5rSW5mbykKIHsKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUU3R1YlJvdXRp
bmVQdHJUYWc+IHZpcnR1YWxUaHVuayA9IHZpcnR1YWxUaHVua0Zvcih2bSwgY2FsbExpbmtJbmZv
KTsKLSAgICBsaW5rU2xvd0Zvcih2bSwgY2FsbExpbmtJbmZvLCB2aXJ0dWFsVGh1bmspOworICAg
IGxpbmtTbG93UGF0aFRvKHZtLCBjYWxsTGlua0luZm8sIHZpcnR1YWxUaHVuayk7CiAgICAgY2Fs
bExpbmtJbmZvLnNldFNsb3dTdHViKEdDQXdhcmVKSVRTdHViUm91dGluZTo6Y3JlYXRlKHZpcnR1
YWxUaHVuaywgdm0pKTsKIH0KIApAQCAtMTIxNyw3ICsxMjE5LDcgQEAgc3RhdGljIEpTQ2VsbCog
d2ViQXNzZW1ibHlPd25lcihKU0NlbGwqIAogI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkK
IH0KIAotdm9pZCBsaW5rRm9yKAordm9pZCBsaW5rTW9ub21vcnBoaWNDYWxsKAogICAgIFZNJiB2
bSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvLCBDb2Rl
QmxvY2sqIGNhbGxlZUNvZGVCbG9jaywKICAgICBKU09iamVjdCogY2FsbGVlLCBNYWNyb0Fzc2Vt
YmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gY29kZVB0cikKIHsKQEAgLTEyMzUsMjYgKzEyMzcs
MjQgQEAgdm9pZCBsaW5rRm9yKAogICAgIEFTU0VSVChvd25lcik7CiAKICAgICBBU1NFUlQoIWNh
bGxMaW5rSW5mby5pc0xpbmtlZCgpKTsKLSAgICBjYWxsTGlua0luZm8uc2V0Q2FsbGVlKHZtLCBv
d25lciwgY2FsbGVlKTsKLSAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaFBvaW50ZXIoY2FsbExp
bmtJbmZvLmhvdFBhdGhCZWdpbigpLCBjYWxsZWUpOworICAgIGNhbGxMaW5rSW5mby5zZXRNb25v
bW9ycGhpY0NhbGxlZSh2bSwgb3duZXIsIGNhbGxlZSwgY29kZVB0cik7CiAgICAgY2FsbExpbmtJ
bmZvLnNldExhc3RTZWVuQ2FsbGVlKHZtLCBvd25lciwgY2FsbGVlKTsKKwogICAgIGlmIChzaG91
bGREdW1wRGlzYXNzZW1ibHlGb3IoY2FsbGVyQ29kZUJsb2NrKSkKICAgICAgICAgZGF0YUxvZygi
TGlua2luZyBjYWxsIGluICIsIEZ1bGxDb2RlT3JpZ2luKGNhbGxlckNvZGVCbG9jaywgY2FsbExp
bmtJbmZvLmNvZGVPcmlnaW4oKSksICIgdG8gIiwgcG9pbnRlckR1bXAoY2FsbGVlQ29kZUJsb2Nr
KSwgIiwgZW50cnlwb2ludCBhdCAiLCBjb2RlUHRyLCAiXG4iKTsKIAotICAgIE1hY3JvQXNzZW1i
bGVyOjpyZXBhdGNoTmVhckNhbGwoY2FsbExpbmtJbmZvLmhvdFBhdGhPdGhlcigpLCBDb2RlTG9j
YXRpb25MYWJlbDxKU0VudHJ5UHRyVGFnPihjb2RlUHRyKSk7Ci0KICAgICBpZiAoY2FsbGVlQ29k
ZUJsb2NrKQogICAgICAgICBjYWxsZWVDb2RlQmxvY2stPmxpbmtJbmNvbWluZ0NhbGwoY2FsbGVy
RnJhbWUsICZjYWxsTGlua0luZm8pOwogCiAgICAgaWYgKGNhbGxMaW5rSW5mby5zcGVjaWFsaXph
dGlvbktpbmQoKSA9PSBDb2RlRm9yQ2FsbCAmJiBjYWxsTGlua0luZm8uYWxsb3dTdHVicygpKSB7
Ci0gICAgICAgIGxpbmtTbG93Rm9yKHZtLCBjYWxsTGlua0luZm8sIGxpbmtQb2x5bW9ycGhpY0Nh
bGxUaHVua0dlbmVyYXRvcik7CisgICAgICAgIGxpbmtTbG93UGF0aFRvKHZtLCBjYWxsTGlua0lu
Zm8sIGxpbmtQb2x5bW9ycGhpY0NhbGxUaHVua0dlbmVyYXRvcik7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAgICAgCiAgICAgbGlua1Nsb3dGb3Iodm0sIGNhbGxMaW5rSW5mbyk7CiB9CiAKLXZv
aWQgbGlua0RpcmVjdEZvcigKK3ZvaWQgbGlua0RpcmVjdENhbGwoCiAgICAgQ2FsbEZyYW1lKiBj
YWxsRnJhbWUsIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvLCBDb2RlQmxvY2sqIGNhbGxlZUNv
ZGVCbG9jaywKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gY29kZVB0
cikKIHsKQEAgLTEyNjksOSArMTI2OSw3IEBAIHZvaWQgbGlua0RpcmVjdEZvcigKICAgICBpZiAo
c2hvdWxkRHVtcERpc2Fzc2VtYmx5Rm9yKGNhbGxlckNvZGVCbG9jaykpCiAgICAgICAgIGRhdGFM
b2coIkxpbmtpbmcgY2FsbCBpbiAiLCBGdWxsQ29kZU9yaWdpbihjYWxsZXJDb2RlQmxvY2ssIGNh
bGxMaW5rSW5mby5jb2RlT3JpZ2luKCkpLCAiIHRvICIsIHBvaW50ZXJEdW1wKGNhbGxlZUNvZGVC
bG9jayksICIsIGVudHJ5cG9pbnQgYXQgIiwgY29kZVB0ciwgIlxuIik7CiAKLSAgICBpZiAoY2Fs
bExpbmtJbmZvLmNhbGxUeXBlKCkgPT0gQ2FsbExpbmtJbmZvOjpEaXJlY3RUYWlsQ2FsbCkKLSAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hKdW1wVG9Ob3AoY2FsbExpbmtJbmZvLnBhdGNo
YWJsZUp1bXAoKSk7Ci0gICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hOZWFyQ2FsbChjYWxsTGlu
a0luZm8uaG90UGF0aE90aGVyKCksIENvZGVMb2NhdGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+KGNv
ZGVQdHIpKTsKKyAgICBjYWxsTGlua0luZm8uc2V0RGlyZWN0Q2FsbFRhcmdldChDb2RlTG9jYXRp
b25MYWJlbDxKU0VudHJ5UHRyVGFnPihjb2RlUHRyKSk7CiAKICAgICBpZiAoY2FsbGVlQ29kZUJs
b2NrKQogICAgICAgICBjYWxsZWVDb2RlQmxvY2stPmxpbmtJbmNvbWluZ0NhbGwoY2FsbEZyYW1l
LCAmY2FsbExpbmtJbmZvKTsKQEAgLTEyODksMjEgKzEyODcsMTYgQEAgc3RhdGljIHZvaWQgcmV2
ZXJ0Q2FsbChWTSYgdm0sIENhbGxMaW5rSQogewogICAgIGlmIChjYWxsTGlua0luZm8uaXNEaXJl
Y3QoKSkgewogICAgICAgICBjYWxsTGlua0luZm8uY2xlYXJDb2RlQmxvY2soKTsKLSAgICAgICAg
aWYgKCFjYWxsTGlua0luZm8uY2xlYXJlZEJ5SmV0dGlzb24oKSkgewotICAgICAgICAgICAgaWYg
KGNhbGxMaW5rSW5mby5jYWxsVHlwZSgpID09IENhbGxMaW5rSW5mbzo6RGlyZWN0VGFpbENhbGwp
Ci0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hKdW1wKGNhbGxMaW5rSW5m
by5wYXRjaGFibGVKdW1wKCksIGNhbGxMaW5rSW5mby5zbG93UGF0aFN0YXJ0KCkpOwotICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoTmVhckNh
bGwoY2FsbExpbmtJbmZvLmhvdFBhdGhPdGhlcigpLCBjYWxsTGlua0luZm8uc2xvd1BhdGhTdGFy
dCgpKTsKLSAgICAgICAgfQorICAgICAgICBpZiAoIWNhbGxMaW5rSW5mby5jbGVhcmVkQnlKZXR0
aXNvbigpKQorICAgICAgICAgICAgY2FsbExpbmtJbmZvLmluaXRpYWxpemVEaXJlY3RDYWxsKCk7
CiAgICAgfSBlbHNlIHsKICAgICAgICAgaWYgKCFjYWxsTGlua0luZm8uY2xlYXJlZEJ5SmV0dGlz
b24oKSkgewotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJldmVydEp1bXBSZXBsYWNlbWVu
dFRvQnJhbmNoUHRyV2l0aFBhdGNoKAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpz
dGFydE9mQnJhbmNoUHRyV2l0aFBhdGNoT25SZWdpc3RlcihjYWxsTGlua0luZm8uaG90UGF0aEJl
Z2luKCkpLAotICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby5jYWxsZWVHUFIoKSwgbnVsbHB0
cik7Ci0gICAgICAgICAgICBsaW5rU2xvd0Zvcih2bSwgY2FsbExpbmtJbmZvLCBjb2RlUmVmKTsK
LSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoUG9pbnRlcihjYWxsTGlua0luZm8u
aG90UGF0aEJlZ2luKCksIG51bGxwdHIpOworICAgICAgICAgICAgbGlua1Nsb3dQYXRoVG8odm0s
IGNhbGxMaW5rSW5mbywgY29kZVJlZik7CisKKyAgICAgICAgICAgIGlmIChjYWxsTGlua0luZm8u
c3R1YigpKQorICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby5yZXZlcnRDYWxsVG9TdHViKCk7
CiAgICAgICAgIH0KLSAgICAgICAgY2FsbExpbmtJbmZvLmNsZWFyQ2FsbGVlKCk7CisgICAgICAg
IGNhbGxMaW5rSW5mby5jbGVhckNhbGxlZSgpOyAvLyBUaGlzIGFsc28gY2xlYXJzIHRoZSBpbmxp
bmUgY2FjaGUgYm90aCBmb3IgZGF0YSBhbmQgY29kZS1iYXNlZCBjYWNoZXMuCiAgICAgfQogICAg
IGNhbGxMaW5rSW5mby5jbGVhclNlZW4oKTsKICAgICBjYWxsTGlua0luZm8uY2xlYXJTdHViKCk7
CkBAIC0xMzEyLDkgKzEzMDUsOSBAQCBzdGF0aWMgdm9pZCByZXZlcnRDYWxsKFZNJiB2bSwgQ2Fs
bExpbmtJCiAgICAgICAgIGNhbGxMaW5rSW5mby5yZW1vdmUoKTsKIH0KIAotdm9pZCB1bmxpbmtG
b3IoVk0mIHZtLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbykKK3ZvaWQgdW5saW5rQ2FsbChW
TSYgdm0sIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvKQogewotICAgIGRhdGFMb2dMbklmKE9w
dGlvbnM6OmR1bXBEaXNhc3NlbWJseSgpLCAiVW5saW5raW5nIGNhbGwgYXQgIiwgY2FsbExpbmtJ
bmZvLmhvdFBhdGhPdGhlcigpKTsKKyAgICBkYXRhTG9nTG5JZihPcHRpb25zOjpkdW1wRGlzYXNz
ZW1ibHkoKSwgIlVubGlua2luZyBjYWxsIGF0ICIsIGNhbGxMaW5rSW5mby5mYXN0UGF0aFN0YXJ0
KCkpOwogICAgIAogICAgIHJldmVydENhbGwodm0sIGNhbGxMaW5rSW5mbywgdm0uZ2V0Q1RJU3R1
YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5yZXRhZ2dlZDxKSVRTdHViUm91dGluZVB0clRhZz4o
KSk7CiB9CkBAIC0xNTgwLDcgKzE1NzMsNyBAQCB2b2lkIGxpbmtQb2x5bW9ycGhpY0NhbGwoSlNH
bG9iYWxPYmplY3QqCiAgICAgfQogICAgIHN0dWJKaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW1QdHIoZ2xvYmFsT2JqZWN0KSwgR1BSSW5mbzo6cmVnVDMpOwogICAgIHN0dWJKaXQubW92
ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoJmNhbGxMaW5rSW5mbyksIEdQUkluZm86OnJl
Z1QyKTsKLSAgICBzdHViSml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGNhbGxM
aW5rSW5mby5jYWxsUmV0dXJuTG9jYXRpb24oKS51bnRhZ2dlZEV4ZWN1dGFibGVBZGRyZXNzKCkp
LCBHUFJJbmZvOjpyZWdUNCk7CisgICAgc3R1YkppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3Rl
ZEltbVB0cihjYWxsTGlua0luZm8uZG9uZUxvY2F0aW9uKCkudW50YWdnZWRFeGVjdXRhYmxlQWRk
cmVzcygpKSwgR1BSSW5mbzo6cmVnVDQpOwogICAgIAogICAgIHN0dWJKaXQucmVzdG9yZVJldHVy
bkFkZHJlc3NCZWZvcmVSZXR1cm4oR1BSSW5mbzo6cmVnVDQpOwogICAgIEFzc2VtYmx5SGVscGVy
czo6SnVtcCBzbG93ID0gc3R1YkppdC5qdW1wKCk7CkBAIC0xNjAzLDI5ICsxNTk2LDIzIEBAIHZv
aWQgbGlua1BvbHltb3JwaGljQ2FsbChKU0dsb2JhbE9iamVjdCoKICAgICAgICAgcGF0Y2hCdWZm
ZXIubGluayhjYWxsVG9Db2RlUHRyLmNhbGwsIEZ1bmN0aW9uUHRyPEpTRW50cnlQdHJUYWc+KGNh
bGxUb0NvZGVQdHIuY29kZVB0cikpOwogI2VuZGlmCiAgICAgfQotICAgIGlmIChpc1dlYkFzc2Vt
Ymx5IHx8IEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChjYWxsZXJDb2RlQmxvY2stPmppdFR5cGUo
KSkpCi0gICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoZG9uZSwgY2FsbExpbmtJbmZvLmNhbGxSZXR1
cm5Mb2NhdGlvbigpLmxhYmVsQXRPZmZzZXQoMCkpOwotICAgIGVsc2UKLSAgICAgICAgcGF0Y2hC
dWZmZXIubGluayhkb25lLCBjYWxsTGlua0luZm8uaG90UGF0aE90aGVyKCkubGFiZWxBdE9mZnNl
dCgwKSk7CisgICAgcGF0Y2hCdWZmZXIubGluayhkb25lLCBjYWxsTGlua0luZm8uZG9uZUxvY2F0
aW9uKCkpOwogICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvdywgQ29kZUxvY2F0aW9uTGFiZWw8SklU
VGh1bmtQdHJUYWc+KHZtLmdldENUSVN0dWIobGlua1BvbHltb3JwaGljQ2FsbFRodW5rR2VuZXJh
dG9yKS5jb2RlKCkpKTsKICAgICAKICAgICBhdXRvIHN0dWJSb3V0aW5lID0gYWRvcHRSZWYoKm5l
dyBQb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZSgKICAgICAgICAgRklOQUxJWkVfQ09ERV9GT1Io
CiAgICAgICAgICAgICBjYWxsZXJDb2RlQmxvY2ssIHBhdGNoQnVmZmVyLCBKSVRTdHViUm91dGlu
ZVB0clRhZywKICAgICAgICAgICAgICJQb2x5bW9ycGhpYyBjYWxsIHN0dWIgZm9yICVzLCByZXR1
cm4gcG9pbnQgJXAsIHRhcmdldHMgJXMiLAotICAgICAgICAgICAgICAgIGlzV2ViQXNzZW1ibHkg
PyAiV2ViQXNzZW1ibHkiIDogdG9DU3RyaW5nKCpjYWxsZXJDb2RlQmxvY2spLmRhdGEoKSwgY2Fs
bExpbmtJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbigpLmxhYmVsQXRPZmZzZXQoMCkuZXhlY3V0YWJs
ZUFkZHJlc3MoKSwKKyAgICAgICAgICAgICAgICBpc1dlYkFzc2VtYmx5ID8gIldlYkFzc2VtYmx5
IiA6IHRvQ1N0cmluZygqY2FsbGVyQ29kZUJsb2NrKS5kYXRhKCksIGNhbGxMaW5rSW5mby5kb25l
TG9jYXRpb24oKS5leGVjdXRhYmxlQWRkcmVzcygpLAogICAgICAgICAgICAgICAgIHRvQ1N0cmlu
ZyhsaXN0RHVtcChjYWxsQ2FzZXMpKS5kYXRhKCkpLAogICAgICAgICB2bSwgb3duZXIsIGNhbGxG
cmFtZS0+Y2FsbGVyRnJhbWUoKSwgY2FsbExpbmtJbmZvLCBjYWxsQ2FzZXMsCiAgICAgICAgIFdU
Rk1vdmUoZmFzdENvdW50cykpKTsKLSAgICAKLSAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwbGFjZVdp
dGhKdW1wKAotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6c3RhcnRPZkJyYW5jaFB0cldpdGhQYXRj
aE9uUmVnaXN0ZXIoY2FsbExpbmtJbmZvLmhvdFBhdGhCZWdpbigpKSwKLSAgICAgICAgQ29kZUxv
Y2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+KHN0dWJSb3V0aW5lLT5jb2RlKCkuY29k
ZSgpKSk7CisKICAgICAvLyBUaGUgb3JpZ2luYWwgc2xvdyBwYXRoIGlzIHVucmVhY2hhYmxlIG9u
IDY0LWJpdHMsIGJ1dCBzdGlsbAogICAgIC8vIHJlYWNoYWJsZSBvbiAzMi1iaXRzIHNpbmNlIGEg
bm9uLWNlbGwgY2FsbGVlIHdpbGwgYWx3YXlzCiAgICAgLy8gdHJpZ2dlciB0aGUgc2xvdyBwYXRo
CiAgICAgbGlua1Nsb3dGb3Iodm0sIGNhbGxMaW5rSW5mbyk7Ci0gICAgCisKICAgICAvLyBJZiB0
aGVyZSBoYWQgYmVlbiBhIHByZXZpb3VzIHN0dWIgcm91dGluZSwgdGhhdCBvbmUgd2lsbCBkaWUg
YXMgc29vbiBhcyB0aGUgR0MgcnVucyBhbmQgc2VlcwogICAgIC8vIHRoYXQgaXQncyBubyBsb25n
ZXIgb24gc3RhY2suCiAgICAgY2FsbExpbmtJbmZvLnNldFN0dWIoV1RGTW92ZShzdHViUm91dGlu
ZSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmgJKHJldmlzaW9uIDI3Njk3
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5oCSh3b3JraW5nIGNvcHkp
CkBAIC01NiwxMCArNTYsMTAgQEAgdm9pZCByZXBhdGNoSW5CeUlEKEpTR2xvYmFsT2JqZWN0Kiwg
Q29kZQogdm9pZCByZXBhdGNoQ2hlY2tQcml2YXRlQnJhbmQoSlNHbG9iYWxPYmplY3QqLCBDb2Rl
QmxvY2sqLCBKU09iamVjdCosIENhY2hlYWJsZUlkZW50aWZpZXIsIFN0cnVjdHVyZVN0dWJJbmZv
Jik7CiB2b2lkIHJlcGF0Y2hTZXRQcml2YXRlQnJhbmQoSlNHbG9iYWxPYmplY3QqLCBDb2RlQmxv
Y2sqLCBKU09iamVjdCosIFN0cnVjdHVyZSosIENhY2hlYWJsZUlkZW50aWZpZXIsIFN0cnVjdHVy
ZVN0dWJJbmZvJik7CiB2b2lkIHJlcGF0Y2hJbnN0YW5jZU9mKEpTR2xvYmFsT2JqZWN0KiwgQ29k
ZUJsb2NrKiwgSlNWYWx1ZSB2YWx1ZSwgSlNWYWx1ZSBwcm90b3R5cGUsIFN0cnVjdHVyZVN0dWJJ
bmZvJiwgYm9vbCB3YXNGb3VuZCk7Ci12b2lkIGxpbmtGb3IoVk0mLCBDYWxsRnJhbWUqLCBDYWxs
TGlua0luZm8mLCBDb2RlQmxvY2sqLCBKU09iamVjdCogY2FsbGVlLCBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHI8SlNFbnRyeVB0clRhZz4pOwotdm9pZCBsaW5rRGlyZWN0Rm9yKENhbGxGcmFtZSosIENh
bGxMaW5rSW5mbyYsIENvZGVCbG9jayosIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRy
VGFnPik7Cit2b2lkIGxpbmtNb25vbW9ycGhpY0NhbGwoVk0mLCBDYWxsRnJhbWUqLCBDYWxsTGlu
a0luZm8mLCBDb2RlQmxvY2sqLCBKU09iamVjdCogY2FsbGVlLCBNYWNyb0Fzc2VtYmxlckNvZGVQ
dHI8SlNFbnRyeVB0clRhZz4pOwordm9pZCBsaW5rRGlyZWN0Q2FsbChDYWxsRnJhbWUqLCBDYWxs
TGlua0luZm8mLCBDb2RlQmxvY2sqLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRh
Zz4pOwogdm9pZCBsaW5rU2xvd0ZvcihDYWxsRnJhbWUqLCBDYWxsTGlua0luZm8mKTsKLXZvaWQg
dW5saW5rRm9yKFZNJiwgQ2FsbExpbmtJbmZvJik7Cit2b2lkIHVubGlua0NhbGwoVk0mLCBDYWxs
TGlua0luZm8mKTsKIHZvaWQgbGlua1BvbHltb3JwaGljQ2FsbChKU0dsb2JhbE9iamVjdCosIENh
bGxGcmFtZSosIENhbGxMaW5rSW5mbyYsIENhbGxWYXJpYW50KTsKIHZvaWQgcmVzZXRHZXRCeShD
b2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIEdldEJ5S2luZCk7CiB2b2lkIHJlc2V0UHV0
QnlJRChDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAJKHJldmlzaW9uIDI3Njk3NykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02
MDAsOSArNjAwLDkgQEAgdm9pZCBPcHRpb25zOjppbml0aWFsaXplKCkKICAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKE9wdGlvbnM6OmFkZHJlc3NPZk9wdGlvbihmb3JjZU9TUkV4aXRUb0xMSW50
SUQpID09ICAmT3B0aW9uczo6Zm9yY2VPU1JFeGl0VG9MTEludCgpKTsKICAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKE9wdGlvbnM6OmFkZHJlc3NPZk9wdGlvbkRlZmF1bHQoZm9yY2VPU1JFeGl0
VG9MTEludElEKSA9PSAgJk9wdGlvbnM6OmZvcmNlT1NSRXhpdFRvTExJbnREZWZhdWx0KCkpOwog
Ci0jaWZuZGVmIE5ERUJVRworLy8jaWZuZGVmIE5ERUJVRwogICAgICAgICAgICAgQ29uZmlnOjpl
bmFibGVSZXN0cmljdGVkT3B0aW9ucygpOwotI2VuZGlmCisvLyNlbmRpZgogICAgICAgICAgICAg
Ly8gSW5pdGlhbGl6ZSBlYWNoIG9mIHRoZSBvcHRpb25zIHdpdGggdGhlaXIgZGVmYXVsdCB2YWx1
ZXM6CiAjZGVmaW5lIElOSVRfT1BUSU9OKHR5cGVfLCBuYW1lXywgZGVmYXVsdFZhbHVlXywgYXZh
aWxhYmlsaXR5XywgZGVzY3JpcHRpb25fKSB7IFwKICAgICAgICAgICAgICAgICBhdXRvIHZhbHVl
ID0gZGVmYXVsdFZhbHVlXzsgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Vk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNw
cAkocmV2aXNpb24gMjc2OTc3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzA4LDQgKzE3MDgsNiBAQCB2b2lkIFZNOjpyZW1vdmVM
b29wSGludEV4ZWN1dGlvbkNvdW50ZXIoCiAgICAgICAgIG1fbG9vcEhpbnRFeGVjdXRpb25Db3Vu
dHMucmVtb3ZlKGl0ZXIpOwogfQogCit1aW50NjRfdCBnX251bWJlck9mT1NSRXhpdHM7CisKIH0g
Ly8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCShyZXZp
c2lvbiAyNzY5NzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMzAwLDQgKzEzMDAsNiBAQCBleHRlcm4gIkMiIHZvaWQgc2FuaXRpemVT
dGFja0ZvclZNSW1wbChWCiBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHNhbml0aXplU3RhY2tGb3JW
TShWTSYpOwogdm9pZCBsb2dTYW5pdGl6ZVN0YWNrKFZNJik7CiAKK2V4dGVybiB1aW50NjRfdCBn
X251bWJlck9mT1NSRXhpdHM7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3Rvb2xzL0pTRG9sbGFyVk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS90b29scy9KU0RvbGxhclZNLmNwcAkocmV2aXNpb24gMjc2OTc3KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0pTRG9sbGFyVk0uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yNyw5ICsyNywxMSBAQAogI2luY2x1ZGUgIkpTRG9sbGFyVk0uaCIKIAogI2luY2x1ZGUg
IkFycmF5UHJvdG90eXBlLmgiCisjaW5jbHVkZSAiQXNzZW1ibGVyQ29tbW9uLmgiCiAjaW5jbHVk
ZSAiQnVpbHRpbk5hbWVzLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiQ29u
dHJvbEZsb3dQcm9maWxlci5oIgorI2luY2x1ZGUgIkRGR1dvcmtsaXN0LmgiCiAjaW5jbHVkZSAi
RE9NQXR0cmlidXRlR2V0dGVyU2V0dGVyLmgiCiAjaW5jbHVkZSAiRE9NSklUR2V0dGVyU2V0dGVy
LmgiCiAjaW5jbHVkZSAiRGVidWdnZXIuaCIKQEAgLTQ4LDkgKzUwLDExIEBACiAjaW5jbHVkZSAi
U25pcHBldFBhcmFtcy5oIgogI2luY2x1ZGUgIlR5cGVQcm9maWxlci5oIgogI2luY2x1ZGUgIlR5
cGVQcm9maWxlckxvZy5oIgorI2luY2x1ZGUgIlZNLmgiCiAjaW5jbHVkZSAiVk1JbnNwZWN0b3Iu
aCIKICNpbmNsdWRlICJWTVRyYXBzSW5saW5lcy5oIgogI2luY2x1ZGUgIldhc21DYXBhYmlsaXRp
ZXMuaCIKKyNpbmNsdWRlICJXYXNtV29ya2xpc3QuaCIKICNpbmNsdWRlIDx1bmljb2RlL3V2ZXJz
aW9uLmg+CiAjaW5jbHVkZSA8d3RmL0F0b21pY3MuaD4KICNpbmNsdWRlIDx3dGYvQ1BVVGltZS5o
PgpAQCAtMjAwOCw2ICsyMDEyLDIxIEBAIHN0YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9O
KGZ1bmN0aW8KIHN0YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9uSXNHaWdh
Y2FnZUVuYWJsZWQpOwogc3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04oZnVuY3Rpb25U
b1VuY2FjaGVhYmxlRGljdGlvbmFyeSk7CiBzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElP
TihmdW5jdGlvbklzUHJpdmF0ZVN5bWJvbCk7CitzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5D
VElPTihmdW5jdGlvbkR1bXBXb3JrbGlzdFN0YXRlKTsKK3N0YXRpYyBKU0NfREVDTEFSRV9IT1NU
X0ZVTkNUSU9OKGZ1bmN0aW9uUHJlY2lzZVRpbWUpOworc3RhdGljIEpTQ19ERUNMQVJFX0hPU1Rf
RlVOQ1RJT04oZnVuY3Rpb25OdW1iZXJPZk9TUkV4aXRzKTsKK3N0YXRpYyBKU0NfREVDTEFSRV9I
T1NUX0ZVTkNUSU9OKGZ1bmN0aW9uTnVtYmVyT2ZDYWNoZUZsdXNoZXMpOworc3RhdGljIEpTQ19E
RUNMQVJFX0hPU1RfRlVOQ1RJT04oZnVuY3Rpb25OdW1iZXJPZlJlcGxhY2VXaXRoVk1IYWx0cyk7
CitzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTihmdW5jdGlvbk51bWJlck9mUmVwbGFj
ZVdpdGhKdW1wcyk7CitzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTihmdW5jdGlvbk51
bWJlck9mUmVwbGFjZVdpdGhMb2Fkcyk7CitzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElP
TihmdW5jdGlvbk51bWJlck9mUmVwbGFjZVdpdGhBZGRyZXNzQ29tcHV0YXRpb25zKTsKK3N0YXRp
YyBKU0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9uTnVtYmVyT2ZTZXRQb2ludGVycyk7
CitzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTihmdW5jdGlvbk51bWJlck9mUmVwYXRj
aEludDMycyk7CitzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTihmdW5jdGlvbk51bWJl
ck9mUmVsaW5rSnVtcHMpOworc3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04oZnVuY3Rp
b25OdW1iZXJPZlJlbGlua0NhbGxzKTsKK3N0YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9O
KGZ1bmN0aW9uTnVtYmVyT2ZSZXBhdGNoQ29tcGFjdHMpOworc3RhdGljIEpTQ19ERUNMQVJFX0hP
U1RfRlVOQ1RJT04oZnVuY3Rpb25OdW1iZXJPZk5ld0NvZGVGaW5hbGl6YXRpb25zKTsKK3N0YXRp
YyBKU0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9uTnVtYmVyT2ZJblBsYWNlRmluYWxp
emF0aW9ucyk7CiAKIGNvbnN0IENsYXNzSW5mbyBKU0RvbGxhclZNOjpzX2luZm8gPSB7ICJEb2xs
YXJWTSIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFC
TEUoSlNEb2xsYXJWTSkgfTsKIApAQCAtMzU3Niw2ICszNTk1LDExNSBAQCBKU0NfREVGSU5FX0hP
U1RfRlVOQ1RJT04oZnVuY3Rpb25Jc1ByaXZhCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c0Jvb2xlYW4oYXNTeW1ib2woY2FsbEZyYW1lLT5hcmd1bWVudCgwKSktPnVpZCgpLmlzUHJpdmF0
ZSgpKSk7CiB9CiAKK0pTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihmdW5jdGlvbkR1bXBXb3JrbGlz
dFN0YXRlLCAoSlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUqKSkKK3sKKyAgICBEb2xsYXJWTUFz
c2VydFNjb3BlIGFzc2VydFNjb3BlOworCisgICAgZGF0YUxvZygiREZHIFdvcmtsaXN0OiAiLCBw
b2ludGVyRHVtcChERkc6OmV4aXN0aW5nR2xvYmFsREZHV29ya2xpc3RPck51bGwoKSksICJcbiIp
OworICAgIGRhdGFMb2coIkZUTCBXb3JrbGlzdDogIiwgcG9pbnRlckR1bXAoREZHOjpleGlzdGlu
Z0dsb2JhbEZUTFdvcmtsaXN0T3JOdWxsKCkpLCAiXG4iKTsKKyAgICAvL2RhdGFMb2coIldhc20g
V29ya2xpc3Q6ICIsIHBvaW50ZXJEdW1wKFdhc206OmV4aXN0aW5nV29ya2xpc3RPck51bGwoKSks
ICJcbiIpOworCisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKK30K
KworSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9uUHJlY2lzZVRpbWUsIChKU0dsb2Jh
bE9iamVjdCosIENhbGxGcmFtZSopKQoreworICAgIERvbGxhclZNQXNzZXJ0U2NvcGUgYXNzZXJ0
U2NvcGU7CisKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKFdhbGxUaW1lOjpu
b3coKS5zZWNvbmRzU2luY2VFcG9jaCgpLnZhbHVlKCkpKTsKK30KKworSlNDX0RFRklORV9IT1NU
X0ZVTkNUSU9OKGZ1bmN0aW9uTnVtYmVyT2ZPU1JFeGl0cywgKEpTR2xvYmFsT2JqZWN0KiwgQ2Fs
bEZyYW1lKikpCit7CisgICAgRG9sbGFyVk1Bc3NlcnRTY29wZSBhc3NlcnRTY29wZTsKKworICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoZ19udW1iZXJPZk9TUkV4aXRzKSk7Cit9
CisKK0pTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihmdW5jdGlvbk51bWJlck9mQ2FjaGVGbHVzaGVz
LCAoSlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUqKSkKK3sKKyAgICBEb2xsYXJWTUFzc2VydFNj
b3BlIGFzc2VydFNjb3BlOworCisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihn
X251bWJlck9mQ2FjaGVGbHVzaGVzKSk7Cit9CisKK0pTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihm
dW5jdGlvbk51bWJlck9mUmVwbGFjZVdpdGhWTUhhbHRzLCAoSlNHbG9iYWxPYmplY3QqLCBDYWxs
RnJhbWUqKSkKK3sKKyAgICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOworCisgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihnX251bWJlck9mUmVwbGFjZVdpdGhWTUhh
bHRzKSk7Cit9CisKK0pTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihmdW5jdGlvbk51bWJlck9mUmVw
bGFjZVdpdGhKdW1wcywgKEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1lKikpCit7CisgICAgRG9s
bGFyVk1Bc3NlcnRTY29wZSBhc3NlcnRTY29wZTsKKworICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNOdW1iZXIoZ19udW1iZXJPZlJlcGxhY2VXaXRoSnVtcHMpKTsKK30KKworSlNDX0RFRklO
RV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9uTnVtYmVyT2ZSZXBsYWNlV2l0aExvYWRzLCAoSlNHbG9i
YWxPYmplY3QqLCBDYWxsRnJhbWUqKSkKK3sKKyAgICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2Vy
dFNjb3BlOworCisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihnX251bWJlck9m
UmVwbGFjZVdpdGhMb2FkcykpOworfQorCitKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oZnVuY3Rp
b25OdW1iZXJPZlJlcGxhY2VXaXRoQWRkcmVzc0NvbXB1dGF0aW9ucywgKEpTR2xvYmFsT2JqZWN0
KiwgQ2FsbEZyYW1lKikpCit7CisgICAgRG9sbGFyVk1Bc3NlcnRTY29wZSBhc3NlcnRTY29wZTsK
KworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoZ19udW1iZXJPZlJlcGxhY2VX
aXRoQWRkcmVzc0NvbXB1dGF0aW9ucykpOworfQorCitKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04o
ZnVuY3Rpb25OdW1iZXJPZlNldFBvaW50ZXJzLCAoSlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUq
KSkKK3sKKyAgICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOworCisgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc051bWJlcihnX251bWJlck9mU2V0UG9pbnRlcnMpKTsKK30KKwor
SlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9uTnVtYmVyT2ZSZXBhdGNoSW50MzJzLCAo
SlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUqKSkKK3sKKyAgICBEb2xsYXJWTUFzc2VydFNjb3Bl
IGFzc2VydFNjb3BlOworCisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihnX251
bWJlck9mUmVwYXRjaEludDMycykpOworfQorCitKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oZnVu
Y3Rpb25OdW1iZXJPZlJlbGlua0p1bXBzLCAoSlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUqKSkK
K3sKKyAgICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOworCisgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc051bWJlcihnX251bWJlck9mUmVsaW5rSnVtcHMpKTsKK30KKworSlND
X0RFRklORV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9uTnVtYmVyT2ZSZWxpbmtDYWxscywgKEpTR2xv
YmFsT2JqZWN0KiwgQ2FsbEZyYW1lKikpCit7CisgICAgRG9sbGFyVk1Bc3NlcnRTY29wZSBhc3Nl
cnRTY29wZTsKKworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoZ19udW1iZXJP
ZlJlbGlua0NhbGxzKSk7Cit9CisKK0pTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihmdW5jdGlvbk51
bWJlck9mUmVwYXRjaENvbXBhY3RzLCAoSlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUqKSkKK3sK
KyAgICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOworCisgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc051bWJlcihnX251bWJlck9mUmVwYXRjaENvbXBhY3RzKSk7Cit9CisKK0pT
Q19ERUZJTkVfSE9TVF9GVU5DVElPTihmdW5jdGlvbk51bWJlck9mTmV3Q29kZUZpbmFsaXphdGlv
bnMsIChKU0dsb2JhbE9iamVjdCosIENhbGxGcmFtZSopKQoreworICAgIERvbGxhclZNQXNzZXJ0
U2NvcGUgYXNzZXJ0U2NvcGU7CisKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVy
KGdfbnVtYmVyT2ZOZXdDb2RlRmluYWxpemF0aW9ucykpOworfQorCitKU0NfREVGSU5FX0hPU1Rf
RlVOQ1RJT04oZnVuY3Rpb25OdW1iZXJPZkluUGxhY2VGaW5hbGl6YXRpb25zLCAoSlNHbG9iYWxP
YmplY3QqLCBDYWxsRnJhbWUqKSkKK3sKKyAgICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2VydFNj
b3BlOworCisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihnX251bWJlck9mSW5Q
bGFjZUZpbmFsaXphdGlvbnMpKTsKK30KKwogY29uc3RleHByIHVuc2lnbmVkIGpzRG9sbGFyVk1Q
cm9wZXJ0eUF0dHJpYnV0ZXMgPSBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBQcm9wZXJ0
eUF0dHJpYnV0ZTo6RG9udEVudW0gfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZTsKIAog
dm9pZCBKU0RvbGxhclZNOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCkBAIC0zNzMwLDYgKzM4NTgs
MjIgQEAgdm9pZCBKU0RvbGxhclZNOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCiAKICAgICBhZGRG
dW5jdGlvbih2bSwgImlzUHJpdmF0ZVN5bWJvbCIsIGZ1bmN0aW9uSXNQcml2YXRlU3ltYm9sLCAx
KTsKIAorICAgIGFkZEZ1bmN0aW9uKHZtLCAiZHVtcFdvcmtsaXN0U3RhdGUiLCBmdW5jdGlvbkR1
bXBXb3JrbGlzdFN0YXRlLCAwKTsKKyAgICBhZGRGdW5jdGlvbih2bSwgInByZWNpc2VUaW1lIiwg
ZnVuY3Rpb25QcmVjaXNlVGltZSwgMCk7CisgICAgYWRkRnVuY3Rpb24odm0sICJudW1iZXJPZk9T
UkV4aXRzIiwgZnVuY3Rpb25OdW1iZXJPZk9TUkV4aXRzLCAwKTsKKyAgICBhZGRGdW5jdGlvbih2
bSwgIm51bWJlck9mQ2FjaGVGbHVzaGVzIiwgZnVuY3Rpb25OdW1iZXJPZkNhY2hlRmx1c2hlcywg
MCk7CisgICAgYWRkRnVuY3Rpb24odm0sICJudW1iZXJPZlJlcGxhY2VXaXRoVk1IYWx0cyIsIGZ1
bmN0aW9uTnVtYmVyT2ZSZXBsYWNlV2l0aFZNSGFsdHMsIDApOworICAgIGFkZEZ1bmN0aW9uKHZt
LCAibnVtYmVyT2ZSZXBsYWNlV2l0aEp1bXBzIiwgZnVuY3Rpb25OdW1iZXJPZlJlcGxhY2VXaXRo
SnVtcHMsIDApOworICAgIGFkZEZ1bmN0aW9uKHZtLCAibnVtYmVyT2ZSZXBsYWNlV2l0aExvYWRz
IiwgZnVuY3Rpb25OdW1iZXJPZlJlcGxhY2VXaXRoTG9hZHMsIDApOworICAgIGFkZEZ1bmN0aW9u
KHZtLCAibnVtYmVyT2ZSZXBsYWNlV2l0aEFkZHJlc3NDb21wdXRhdGlvbnMiLCBmdW5jdGlvbk51
bWJlck9mUmVwbGFjZVdpdGhBZGRyZXNzQ29tcHV0YXRpb25zLCAwKTsKKyAgICBhZGRGdW5jdGlv
bih2bSwgIm51bWJlck9mU2V0UG9pbnRlcnMiLCBmdW5jdGlvbk51bWJlck9mU2V0UG9pbnRlcnMs
IDApOworICAgIGFkZEZ1bmN0aW9uKHZtLCAibnVtYmVyT2ZSZXBhdGNoSW50MzJzIiwgZnVuY3Rp
b25OdW1iZXJPZlJlcGF0Y2hJbnQzMnMsIDApOworICAgIGFkZEZ1bmN0aW9uKHZtLCAibnVtYmVy
T2ZSZWxpbmtKdW1wcyIsIGZ1bmN0aW9uTnVtYmVyT2ZSZWxpbmtKdW1wcywgMCk7CisgICAgYWRk
RnVuY3Rpb24odm0sICJudW1iZXJPZlJlbGlua0NhbGxzIiwgZnVuY3Rpb25OdW1iZXJPZlJlbGlu
a0NhbGxzLCAwKTsKKyAgICBhZGRGdW5jdGlvbih2bSwgIm51bWJlck9mUmVwYXRjaENvbXBhY3Rz
IiwgZnVuY3Rpb25OdW1iZXJPZlJlcGF0Y2hDb21wYWN0cywgMCk7CisgICAgYWRkRnVuY3Rpb24o
dm0sICJudW1iZXJPZk5ld0NvZGVGaW5hbGl6YXRpb25zIiwgZnVuY3Rpb25OdW1iZXJPZk5ld0Nv
ZGVGaW5hbGl6YXRpb25zLCAwKTsKKyAgICBhZGRGdW5jdGlvbih2bSwgIm51bWJlck9mSW5QbGFj
ZUZpbmFsaXphdGlvbnMiLCBmdW5jdGlvbk51bWJlck9mSW5QbGFjZUZpbmFsaXphdGlvbnMsIDAp
OworCiAgICAgbV9vYmplY3REb2luZ1NpZGVFZmZlY3RQdXRXaXRob3V0Q29ycmVjdFNsb3RTdGF0
dXNTdHJ1Y3R1cmUuc2V0KHZtLCB0aGlzLCBPYmplY3REb2luZ1NpZGVFZmZlY3RQdXRXaXRob3V0
Q29ycmVjdFNsb3RTdGF0dXM6OmNyZWF0ZVN0cnVjdHVyZSh2bSwgZ2xvYmFsT2JqZWN0LCBqc051
bGwoKSkpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XYXNtVG9K
Uy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2FzbVRv
SlMuY3BwCShyZXZpc2lvbiAyNzY5NzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9XYXNtVG9KUy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2MSwxOSArMjYxLDE4IEBAIEV4cGVj
dGVkPE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxXYXNtRW50cnkKIAogICAgIENhbGxMaW5rSW5mbyog
Y2FsbExpbmtJbmZvID0gY2FsbExpbmtJbmZvcy5hZGQoQ29kZU9yaWdpbigpKTsKICAgICBjYWxs
TGlua0luZm8tPnNldFVwQ2FsbChDYWxsTGlua0luZm86OkNhbGwsIGltcG9ydEpTQ2VsbEdQUlJl
Zyk7Ci0gICAgSklUOjpEYXRhTGFiZWxQdHIgdGFyZ2V0VG9DaGVjazsKLSAgICBKSVQ6OlRydXN0
ZWRJbW1QdHIgaW5pdGlhbFJpZ2h0VmFsdWUobnVsbHB0cik7Ci0gICAgSklUOjpKdW1wIHNsb3dQ
YXRoID0gaml0LmJyYW5jaFB0cldpdGhQYXRjaChNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIGlt
cG9ydEpTQ2VsbEdQUlJlZywgdGFyZ2V0VG9DaGVjaywgaW5pdGlhbFJpZ2h0VmFsdWUpOwotICAg
IEpJVDo6Q2FsbCBmYXN0Q2FsbCA9IGppdC5uZWFyQ2FsbCgpOworICAgIGF1dG8gc2xvd1BhdGgg
PSBjYWxsTGlua0luZm8tPmVtaXRGYXN0UGF0aChqaXQsIGltcG9ydEpTQ2VsbEdQUlJlZywgSW52
YWxpZEdQUlJlZywgQ2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6Ok5vKTsKKwogICAgIEpJVDo6SnVt
cCBkb25lID0gaml0Lmp1bXAoKTsKICAgICBzbG93UGF0aC5saW5rKCZqaXQpOworICAgIGF1dG8g
c2xvd1BhdGhTdGFydCA9IGppdC5sYWJlbCgpOwogICAgIC8vIENhbGxlZSBuZWVkcyB0byBiZSBp
biByZWdUMCBoZXJlLgotICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRy
KGNhbGxMaW5rSW5mbyksIEdQUkluZm86OnJlZ1QyKTsgLy8gTGluayBpbmZvIG5lZWRzIHRvIGJl
IGluIHJlZ1QyLgogICAgIGppdC5sb2FkV2FzbUNvbnRleHRJbnN0YW5jZShHUFJJbmZvOjpyZWdU
Myk7CiAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1Qz
LCBJbnN0YW5jZTo6b2Zmc2V0T2ZPd25lcigpKSwgR1BSSW5mbzo6cmVnVDMpOwogICAgIGppdC5s
b2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMywgSlNXZWJBc3NlbWJs
eUluc3RhbmNlOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgR1BSSW5mbzo6cmVnVDMpOwotICAg
IEpJVDo6Q2FsbCBzbG93Q2FsbCA9IGppdC5uZWFyQ2FsbCgpOworICAgIGNhbGxMaW5rSW5mby0+
ZW1pdFNsb3dQYXRoKHZtLCBqaXQpOwogICAgIGRvbmUubGluaygmaml0KTsKKyAgICBhdXRvIGRv
bmVMb2NhdGlvbiA9IGppdC5sYWJlbCgpOwogCiAgICAgaWYgKHNpZ25hdHVyZS5yZXR1cm5Db3Vu
dCgpID09IDEpIHsKICAgICAgICAgc3dpdGNoIChzaWduYXR1cmUucmV0dXJuVHlwZSgwKS5raW5k
KSB7CkBAIC00MjEsMTEgKzQyMCw5IEBAIEV4cGVjdGVkPE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxX
YXNtRW50cnkKICAgICBpZiAoVU5MSUtFTFkocGF0Y2hCdWZmZXIuZGlkRmFpbFRvQWxsb2NhdGUo
KSkpCiAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChCaW5kaW5nRmFpbHVyZTo6T3V0T2ZN
ZW1vcnkpOwogCi0gICAgcGF0Y2hCdWZmZXIubGluayhzbG93Q2FsbCwgRnVuY3Rpb25QdHI8SklU
VGh1bmtQdHJUYWc+KHZtLmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcikuY29kZSgp
KSk7Ci0gICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gY2FsbFJldHVybkxv
Y2F0aW9uKHBhdGNoQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxKU0ludGVybmFsUHRyVGFnPihz
bG93Q2FsbCkpOwotICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IGhvdFBh
dGhCZWdpbihwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KHRhcmdldFRv
Q2hlY2spKTsKLSAgICBDb2RlTG9jYXRpb25OZWFyQ2FsbDxKU0ludGVybmFsUHRyVGFnPiBob3RQ
YXRoT3RoZXIgPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8SlNJbnRlcm5hbFB0clRh
Zz4oZmFzdENhbGwpOwotICAgIGNhbGxMaW5rSW5mby0+c2V0Q2FsbExvY2F0aW9ucyhjYWxsUmV0
dXJuTG9jYXRpb24sIGhvdFBhdGhCZWdpbiwgaG90UGF0aE90aGVyKTsKKyAgICBjYWxsTGlua0lu
Zm8tPnNldENvZGVMb2NhdGlvbnMoCisgICAgICAgICAgICBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9m
PEpTSW50ZXJuYWxQdHJUYWc+KHNsb3dQYXRoU3RhcnQpLAorICAgICAgICAgICAgcGF0Y2hCdWZm
ZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihkb25lTG9jYXRpb24pKTsKIAogICAgIHJl
dHVybiBGSU5BTElaRV9XQVNNX0NPREUocGF0Y2hCdWZmZXIsIFdhc21FbnRyeVB0clRhZywgIldl
YkFzc2VtYmx5LT5KYXZhU2NyaXB0IGltcG9ydFslaV0gJXMiLCBpbXBvcnRJbmRleCwgc2lnbmF0
dXJlLnRvU3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkpOwogfQpJbmRleDogVG9vbHMvU2NyaXB0cy9j
b21wYXJlLXJlc3VsdHMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy9jb21wYXJlLXJlc3Vs
dHMJKHJldmlzaW9uIDI3Njk3NykKKysrIFRvb2xzL1NjcmlwdHMvY29tcGFyZS1yZXN1bHRzCSh3
b3JraW5nIGNvcHkpCkBAIC0yNzQsNyArMjc0LDcgQEAgZGVmIEpldFN0cmVhbTJSZXN1bHRzKHBh
eWxvYWQpOgogICAgIGFzc2VydCBkZXRlY3RKZXRTdHJlYW0yKHBheWxvYWQpCiAKICAgICBqcyA9
IHBheWxvYWRbIkpldFN0cmVhbTIuMCJdCi0gICAgaXRlcmF0aW9ucyA9IGxlbihqc1sidGVzdHMi
XVsiZ2F1c3NpYW4tYmx1ciJdWyJtZXRyaWNzIl1bIlNjb3JlIl1bImN1cnJlbnQiXSkKKyAgICBp
dGVyYXRpb25zID0gbGVuKGpzWyJ0ZXN0cyJdWyJyYXl0cmFjZSJdWyJtZXRyaWNzIl1bIlNjb3Jl
Il1bImN1cnJlbnQiXSkKICAgICByZXN1bHRzID0gW10KICAgICBmb3IgaSBpbiByYW5nZShpdGVy
YXRpb25zKToKICAgICAgICAgc2NvcmVzID0gW10K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>428533</attachid>
            <date>2021-05-13 11:01:59 -0700</date>
            <delta_ts>2021-05-13 11:04:50 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>79243</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2Vt
Ymxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJz
dHJhY3RNYWNyb0Fzc2VtYmxlci5oCShyZXZpc2lvbiAyNzc0NDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtOTcxLDYgKzk3MSwxMiBAQCBwdWJsaWM6CiAgICAgICAgIG1fbGlua1Rhc2tzLmFwcGVu
ZChjcmVhdGVTaGFyZWRUYXNrPHZvaWQoTGlua0J1ZmZlciYpPihmdW5jdG9yKSk7CiAgICAgfQog
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIGFkZExhdGVMaW5rVGFz
ayhjb25zdCBGdW5jdG9yJiBmdW5jdG9yKSAvLyBSdW4gYWZ0ZXIgYWxsIGxpbmsgdGFza3MKKyAg
ICB7CisgICAgICAgIG1fbGF0ZUxpbmtUYXNrcy5hcHBlbmQoY3JlYXRlU2hhcmVkVGFzazx2b2lk
KExpbmtCdWZmZXImKT4oZnVuY3RvcikpOworICAgIH0KKwogI2lmIENPTVBJTEVSKEdDQykKICAg
ICAvLyBXb3JrYXJvdW5kIGZvciBHQ0MgZGVtYW5kaW5nIHRoYXQgbWVtY3B5ICJtdXN0IGJlIHRo
ZSBuYW1lIG9mIGEgZnVuY3Rpb24gd2l0aCBleHRlcm5hbCBsaW5rYWdlIi4KICAgICBzdGF0aWMg
dm9pZCogbWVtY3B5KHZvaWQqIGRzdCwgY29uc3Qgdm9pZCogc3JjLCBzaXplX3Qgc2l6ZSkKQEAg
LTExMTQsNiArMTEyMCw3IEBAIHByb3RlY3RlZDoKICAgICBib29sIG1fYWxsb3dTY3JhdGNoUmVn
aXN0ZXIgeyB0cnVlIH07CiAKICAgICBWZWN0b3I8UmVmUHRyPFNoYXJlZFRhc2s8dm9pZChMaW5r
QnVmZmVyJik+Pj4gbV9saW5rVGFza3M7CisgICAgVmVjdG9yPFJlZlB0cjxTaGFyZWRUYXNrPHZv
aWQoTGlua0J1ZmZlciYpPj4+IG1fbGF0ZUxpbmtUYXNrczsKIAogICAgIGZyaWVuZCBjbGFzcyBM
aW5rQnVmZmVyOwogfTsgLy8gY2xhc3MgQWJzdHJhY3RNYWNyb0Fzc2VtYmxlcgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuY3BwCShyZXZpc2lv
biAyNzc0NDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MzksNiArNDM5LDcgQEAgdm9pZCBMaW5rQnVmZmVyOjps
aW5rQ29kZShNYWNyb0Fzc2VtYmxlcgogI2VuZGlmIC8vICFFTkFCTEUoQlJBTkNIX0NPTVBBQ1RJ
T04pCiAKICAgICBtX2xpbmtUYXNrcyA9IFdURk1vdmUobWFjcm9Bc3NlbWJsZXIubV9saW5rVGFz
a3MpOworICAgIG1fbGF0ZUxpbmtUYXNrcyA9IFdURk1vdmUobWFjcm9Bc3NlbWJsZXIubV9sYXRl
TGlua1Rhc2tzKTsKIH0KIAogdm9pZCBMaW5rQnVmZmVyOjphbGxvY2F0ZShNYWNyb0Fzc2VtYmxl
ciYgbWFjcm9Bc3NlbWJsZXIsIEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKQEAgLTQ3MSw2
ICs0NzIsOCBAQCB2b2lkIExpbmtCdWZmZXI6OnBlcmZvcm1GaW5hbGl6YXRpb24oKQogewogICAg
IGZvciAoYXV0byYgdGFzayA6IG1fbGlua1Rhc2tzKQogICAgICAgICB0YXNrLT5ydW4oKnRoaXMp
OworICAgIGZvciAoYXV0byYgdGFzayA6IG1fbGF0ZUxpbmtUYXNrcykKKyAgICAgICAgdGFzay0+
cnVuKCp0aGlzKTsKIAogI2lmbmRlZiBOREVCVUcKICAgICBBU1NFUlQobV9pc0p1bXBJc2xhbmQg
fHwgIWlzQ29tcGlsYXRpb25UaHJlYWQoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL0xpbmtCdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuaAkocmV2aXNpb24gMjc3NDQwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQw
Myw2ICs0MDMsNyBAQCBwcml2YXRlOgogICAgIFByb2ZpbGUgbV9wcm9maWxlIHsgUHJvZmlsZTo6
VW5jYXRlZ29yaXplZCB9OwogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxMaW5rQnVmZmVyUHRy
VGFnPiBtX2NvZGU7CiAgICAgVmVjdG9yPFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoTGlua0J1ZmZl
ciYpPj4+IG1fbGlua1Rhc2tzOworICAgIFZlY3RvcjxSZWZQdHI8U2hhcmVkVGFzazx2b2lkKExp
bmtCdWZmZXImKT4+PiBtX2xhdGVMaW5rVGFza3MKIAogICAgIHN0YXRpYyBzaXplX3Qgc19wcm9m
aWxlQ3VtbXVsYXRpdmVMaW5rZWRTaXplc1tudW1iZXJPZlByb2ZpbGVzXTsKIH07CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCShyZXZpc2lv
biAyNzc0NDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE1ODAsMTEgKzE1ODAsNiBAQCB2b2lkIEFjY2Vzc0Nhc2U6
OmdlbmVyYXRlSW1wbChBY2Nlc3NHZW5lCiAgICAgICAgIC8vIFN0dWZmIGZvciBjdXN0b20gZ2V0
dGVycy9zZXR0ZXJzLgogICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgb3BlcmF0aW9uQ2FsbDsK
IAotICAgICAgICAvLyBTdHVmZiBmb3IgSlMgZ2V0dGVycy9zZXR0ZXJzLgotICAgICAgICBDQ2Fs
bEhlbHBlcnM6OkRhdGFMYWJlbFB0ciBhZGRyZXNzT2ZMaW5rRnVuY3Rpb25DaGVjazsKLSAgICAg
ICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGZhc3RQYXRoQ2FsbDsKLSAgICAgICAgQ0NhbGxIZWxwZXJz
OjpDYWxsIHNsb3dQYXRoQ2FsbDsKLQogICAgICAgICAvLyBUaGlzIGFsc28gZG9lcyB0aGUgbmVj
ZXNzYXJ5IGNhbGN1bGF0aW9ucyBvZiB3aGV0aGVyIG9yIG5vdCB3ZSdyZSBhbgogICAgICAgICAv
LyBleGNlcHRpb24gaGFuZGxpbmcgY2FsbCBzaXRlLgogICAgICAgICBBY2Nlc3NHZW5lcmF0aW9u
U3RhdGU6OlNwaWxsU3RhdGUgc3BpbGxTdGF0ZSA9IHN0YXRlLnByZXNlcnZlTGl2ZVJlZ2lzdGVy
c1RvU3RhY2tGb3JDYWxsKCk7CkBAIC0xNzAxLDI0ICsxNjk2LDIyIEBAIHZvaWQgQWNjZXNzQ2Fz
ZTo6Z2VuZXJhdGVJbXBsKEFjY2Vzc0dlbmUKICAgICAgICAgICAgICAgICAgICAgICAgIHZpcnR1
YWxSZWdpc3RlckZvckFyZ3VtZW50SW5jbHVkaW5nVGhpcygxKS5vZmZzZXQoKSAqIHNpemVvZihS
ZWdpc3RlcikpKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpK
dW1wIHNsb3dDYXNlID0gaml0LmJyYW5jaFB0cldpdGhQYXRjaCgKLSAgICAgICAgICAgICAgICBD
Q2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCBsb2FkZWRWYWx1ZUdQUiwgYWRkcmVzc09mTGlua0Z1bmN0
aW9uQ2hlY2ssCi0gICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG51
bGxwdHIpKTsKKyAgICAgICAgICAgIGF1dG8gc2xvd0Nhc2UgPSBhY2Nlc3MuY2FsbExpbmtJbmZv
KCktPmVtaXRGYXN0UGF0aChqaXQsIGxvYWRlZFZhbHVlR1BSLCBsb2FkZWRWYWx1ZUdQUiA9PSBH
UFJJbmZvOjpyZWdUMiA/IEdQUkluZm86OnJlZ1QwIDogR1BSSW5mbzo6cmVnVDIsIEpJVENvZGU6
OmlzT3B0aW1pemluZ0pJVChjb2RlQmxvY2stPmppdFR5cGUoKSkgPyBDYWxsTGlua0luZm86OlVz
ZURhdGFJQzo6Tm8gOiBDYWxsTGlua0luZm86OlVzZURhdGFJQzo6WWVzKTsKKyAgICAgICAgICAg
IGF1dG8gZG9uZUxvY2F0aW9uID0gaml0LmxhYmVsKCk7CiAKLSAgICAgICAgICAgIGZhc3RQYXRo
Q2FsbCA9IGppdC5uZWFyQ2FsbCgpOwogICAgICAgICAgICAgaWYgKG1fdHlwZSA9PSBHZXR0ZXIp
CiAgICAgICAgICAgICAgICAgaml0LnNldHVwUmVzdWx0cyh2YWx1ZVJlZ3MpOwogICAgICAgICAg
ICAgZG9uZS5hcHBlbmQoaml0Lmp1bXAoKSk7CiAKICAgICAgICAgICAgIHNsb3dDYXNlLmxpbmso
JmppdCk7CisgICAgICAgICAgICBhdXRvIHNsb3dQYXRoU3RhcnQgPSBqaXQubGFiZWwoKTsKICAg
ICAgICAgICAgIGppdC5tb3ZlKGxvYWRlZFZhbHVlR1BSLCBHUFJJbmZvOjpyZWdUMCk7CiAjaWYg
VVNFKEpTVkFMVUUzMl82NCkKICAgICAgICAgICAgIC8vIFdlICphbHdheXMqIGtub3cgdGhhdCB0
aGUgZ2V0dGVyL3NldHRlciwgaWYgbm9uLW51bGwsIGlzIGEgY2VsbC4KICAgICAgICAgICAgIGpp
dC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLCBHUFJJ
bmZvOjpyZWdUMSk7CiAjZW5kaWYKLSAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbVB0cihhY2Nlc3MuY2FsbExpbmtJbmZvKCkpLCBHUFJJbmZvOjpyZWdUMik7CiAg
ICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoZ2xvYmFsT2Jq
ZWN0KSwgR1BSSW5mbzo6cmVnVDMpOwotICAgICAgICAgICAgc2xvd1BhdGhDYWxsID0gaml0Lm5l
YXJDYWxsKCk7CisgICAgICAgICAgICBhY2Nlc3MuY2FsbExpbmtJbmZvKCktPmVtaXRTbG93UGF0
aCh2bSwgaml0KTsKICAgICAgICAgICAgIGlmIChtX3R5cGUgPT0gR2V0dGVyKQogICAgICAgICAg
ICAgICAgIGppdC5zZXR1cFJlc3VsdHModmFsdWVSZWdzKTsKICAgICAgICAgICAgIGRvbmUuYXBw
ZW5kKGppdC5qdW1wKCkpOwpAQCAtMTczNSwxNSArMTcyOCwxMCBAQCB2b2lkIEFjY2Vzc0Nhc2U6
OmdlbmVyYXRlSW1wbChBY2Nlc3NHZW5lCiAgICAgICAgICAgICBib29sIGNhbGxIYXNSZXR1cm5W
YWx1ZSA9IGlzR2V0dGVyKCk7CiAgICAgICAgICAgICByZXN0b3JlTGl2ZVJlZ2lzdGVyc0Zyb21T
dGFja0ZvckNhbGwoc3BpbGxTdGF0ZSwgY2FsbEhhc1JldHVyblZhbHVlKTsKIAotICAgICAgICAg
ICAgaml0LmFkZExpbmtUYXNrKFs9LCAmdm1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0g
ICAgICAgICAgICAgICAgdGhpcy0+YXM8R2V0dGVyU2V0dGVyQWNjZXNzQ2FzZT4oKS5jYWxsTGlu
a0luZm8oKS0+c2V0Q2FsbExvY2F0aW9ucygKLSAgICAgICAgICAgICAgICAgICAgQ29kZUxvY2F0
aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4obGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8
SlNJbnRlcm5hbFB0clRhZz4oc2xvd1BhdGhDYWxsKSksCi0gICAgICAgICAgICAgICAgICAgIENv
ZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+KGxpbmtCdWZmZXIubG9jYXRpb25PZjxK
U0ludGVybmFsUHRyVGFnPihhZGRyZXNzT2ZMaW5rRnVuY3Rpb25DaGVjaykpLAotICAgICAgICAg
ICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxKU0ludGVybmFsUHRyVGFn
PihmYXN0UGF0aENhbGwpKTsKLQotICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluaygKLSAg
ICAgICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxsLAotICAgICAgICAgICAgICAgICAgICBDb2Rl
TG9jYXRpb25MYWJlbDxKSVRUaHVua1B0clRhZz4odm0uZ2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5r
R2VuZXJhdG9yKS5jb2RlKCkpKTsKKyAgICAgICAgICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExp
bmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgICAgICAgICB0aGlzLT5hczxHZXR0ZXJT
ZXR0ZXJBY2Nlc3NDYXNlPigpLmNhbGxMaW5rSW5mbygpLT5zZXRDb2RlTG9jYXRpb25zKAorICAg
ICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4o
c2xvd1BhdGhTdGFydCksCisgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25P
ZjxKU0ludGVybmFsUHRyVGFnPihkb25lTG9jYXRpb24pKTsKICAgICAgICAgICAgIH0pOwogICAg
ICAgICB9IGVsc2UgewogICAgICAgICAgICAgQVNTRVJUKG1fdHlwZSA9PSBDdXN0b21WYWx1ZUdl
dHRlciB8fCBtX3R5cGUgPT0gQ3VzdG9tQWNjZXNzb3JHZXR0ZXIgfHwgbV90eXBlID09IEN1c3Rv
bVZhbHVlU2V0dGVyIHx8IG1fdHlwZSA9PSBDdXN0b21BY2Nlc3NvclNldHRlcik7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmNwcAkocmV2
aXNpb24gMjc3NDQwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5r
SW5mby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDEyICsyNiwxNyBAQAogI2luY2x1ZGUgImNv
bmZpZy5oIgogI2luY2x1ZGUgIkNhbGxMaW5rSW5mby5oIgogCisjaW5jbHVkZSAiTWFjcm9Bc3Nl
bWJsZXJQcmludGVyLmgiCisjaW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgiCiAjaW5jbHVkZSAiQ2Fs
bEZyYW1lU2h1ZmZsZURhdGEuaCIKICNpbmNsdWRlICJGdW5jdGlvbkNvZGVCbG9jay5oIgogI2lu
Y2x1ZGUgIkpTQ2VsbElubGluZXMuaCIKICNpbmNsdWRlICJPcGNvZGUuaCIKKyNpbmNsdWRlICJM
aW5rQnVmZmVyLmgiCiAjaW5jbHVkZSAiUmVwYXRjaC5oIgorI2luY2x1ZGUgIlRodW5rR2VuZXJh
dG9ycy5oIgogI2luY2x1ZGUgPHd0Zi9MaXN0RHVtcC5oPgorI2luY2x1ZGUgIkRpc2FsbG93TWFj
cm9TY3JhdGNoUmVnaXN0ZXJVc2FnZS5oIgogCiAjaWYgRU5BQkxFKEpJVCkKIG5hbWVzcGFjZSBK
U0MgewpAQCAtNzcsNiArODIsNyBAQCBDYWxsTGlua0luZm86OkNhbGxMaW5rSW5mbyhDb2RlT3Jp
Z2luIGNvCiAgICAgLCBtX2FsbG93U3R1YnModHJ1ZSkKICAgICAsIG1fY2xlYXJlZEJ5SmV0dGlz
b24oZmFsc2UpCiAgICAgLCBtX2NhbGxUeXBlKE5vbmUpCisgICAgLCBtX3VzZURhdGFJQyhzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oVXNlRGF0YUlDOjpZZXMpKQogewogfQogCkBAIC0xMDIsNDcgKzEw
OCw1MSBAQCB2b2lkIENhbGxMaW5rSW5mbzo6dW5saW5rKFZNJiB2bSkKICAgICAvLyBXZSBjb3Vs
ZCBiZSBjYWxsZWQgZXZlbiBpZiB3ZSdyZSBub3QgbGlua2VkIGFueW1vcmUgYmVjYXVzZSBvZiBo
b3cgcG9seW1vcnBoaWMgY2FsbHMKICAgICAvLyB3b3JrLiBFYWNoIGNhbGxzaXRlIHdpdGhpbiB0
aGUgcG9seW1vcnBoaWMgY2FsbCBzdHViIG1heSBzZXBhcmF0ZWx5IGFzayB1cyB0byB1bmxpbmso
KS4KICAgICBpZiAoaXNMaW5rZWQoKSkKLSAgICAgICAgdW5saW5rRm9yKHZtLCAqdGhpcyk7Cisg
ICAgICAgIHVubGlua0NhbGwodm0sICp0aGlzKTsKIAogICAgIC8vIEVpdGhlciB3ZSB3ZXJlIHVu
bGlua2VkLCBpbiB3aGljaCBjYXNlIHdlIHNob3VsZCBub3QgaGF2ZSBiZWVuIG9uIGFueSBsaXN0
LCBvciB3ZSB1bmxpbmtlZAogICAgIC8vIG91cnNlbHZlcyBzbyB0aGF0IHdlJ3JlIG5vdCBvbiBh
bnkgbGlzdCBhbnltb3JlLgogICAgIFJFTEVBU0VfQVNTRVJUKCFpc09uTGlzdCgpKTsKIH0KIAot
Q29kZUxvY2F0aW9uTmVhckNhbGw8SlNJbnRlcm5hbFB0clRhZz4gQ2FsbExpbmtJbmZvOjpjYWxs
UmV0dXJuTG9jYXRpb24oKQorQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gQ2Fs
bExpbmtJbmZvOjpmYXN0UGF0aFN0YXJ0KCkKIHsKLSAgICBSRUxFQVNFX0FTU0VSVCghaXNEaXJl
Y3QoKSk7Ci0gICAgcmV0dXJuIENvZGVMb2NhdGlvbk5lYXJDYWxsPEpTSW50ZXJuYWxQdHJUYWc+
KG1fY2FsbFJldHVybkxvY2F0aW9uT3JQYXRjaGFibGVKdW1wLCBOZWFyQ2FsbE1vZGU6OlJlZ3Vs
YXIpOworICAgIHJldHVybiBDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHI8SlNJbnRlcm5hbFB0clRh
Zz4obV9mYXN0UGF0aFN0YXJ0KTsKIH0KIAotQ29kZUxvY2F0aW9uSnVtcDxKU0ludGVybmFsUHRy
VGFnPiBDYWxsTGlua0luZm86OnBhdGNoYWJsZUp1bXAoKQorQ29kZUxvY2F0aW9uTGFiZWw8SlNJ
bnRlcm5hbFB0clRhZz4gQ2FsbExpbmtJbmZvOjpzbG93UGF0aFN0YXJ0KCkKIHsKLSAgICBSRUxF
QVNFX0FTU0VSVChjYWxsVHlwZSgpID09IERpcmVjdFRhaWxDYWxsKTsKLSAgICByZXR1cm4gQ29k
ZUxvY2F0aW9uSnVtcDxKU0ludGVybmFsUHRyVGFnPihtX2NhbGxSZXR1cm5Mb2NhdGlvbk9yUGF0
Y2hhYmxlSnVtcCk7CisgICAgUkVMRUFTRV9BU1NFUlQoIWlzRGF0YUlDKCkpOworICAgIHJldHVy
biB1LmNvZGVJQy5tX3Nsb3dQYXRoU3RhcnQ7CiB9CiAKLUNvZGVMb2NhdGlvbkRhdGFMYWJlbFB0
cjxKU0ludGVybmFsUHRyVGFnPiBDYWxsTGlua0luZm86OmhvdFBhdGhCZWdpbigpCitDb2RlTG9j
YXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBDYWxsTGlua0luZm86OmRvbmVMb2NhdGlvbigp
CiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoIWlzRGlyZWN0KCkpOwotICAgIHJldHVybiBDb2RlTG9j
YXRpb25EYXRhTGFiZWxQdHI8SlNJbnRlcm5hbFB0clRhZz4obV9ob3RQYXRoQmVnaW5PclNsb3dQ
YXRoU3RhcnQpOworICAgIHJldHVybiBtX2RvbmVMb2NhdGlvbjsKIH0KIAotQ29kZUxvY2F0aW9u
TGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gQ2FsbExpbmtJbmZvOjpzbG93UGF0aFN0YXJ0KCkKLXsK
LSAgICBSRUxFQVNFX0FTU0VSVChpc0RpcmVjdCgpKTsKLSAgICByZXR1cm4gbV9ob3RQYXRoQmVn
aW5PclNsb3dQYXRoU3RhcnQ7Ci19Ci0KLXZvaWQgQ2FsbExpbmtJbmZvOjpzZXRDYWxsZWUoVk0m
IHZtLCBKU0NlbGwqIG93bmVyLCBKU09iamVjdCogY2FsbGVlKQordm9pZCBDYWxsTGlua0luZm86
OnNldE1vbm9tb3JwaGljQ2FsbGVlKFZNJiB2bSwgSlNDZWxsKiBvd25lciwgSlNPYmplY3QqIGNh
bGxlZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGNvZGVQdHIpCiB7CiAg
ICAgUkVMRUFTRV9BU1NFUlQoIWlzRGlyZWN0KCkpOwogICAgIG1fY2FsbGVlT3JDb2RlQmxvY2su
c2V0KHZtLCBvd25lciwgY2FsbGVlKTsKKworICAgIGlmIChpc0RhdGFJQygpKSAKKyAgICAgICAg
dS5kYXRhSUMubV9tb25vbW9ycGhpY0NhbGxEZXN0aW5hdGlvbiA9IGNvZGVQdHI7CisgICAgZWxz
ZSB7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoTmVhckNhbGwodS5jb2RlSUMubV9j
YWxsTG9jYXRpb24sIENvZGVMb2NhdGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+KGNvZGVQdHIpKTsK
KyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hQb2ludGVyKHUuY29kZUlDLm1fY2FsbGVl
TG9jYXRpb24sIGNhbGxlZSk7CisgICAgfQogfQogCiB2b2lkIENhbGxMaW5rSW5mbzo6Y2xlYXJD
YWxsZWUoKQogewogICAgIFJFTEVBU0VfQVNTRVJUKCFpc0RpcmVjdCgpKTsKICAgICBtX2NhbGxl
ZU9yQ29kZUJsb2NrLmNsZWFyKCk7CisgICAgaWYgKGlzRGF0YUlDKCkpCisgICAgICAgIHUuZGF0
YUlDLm1fbW9ub21vcnBoaWNDYWxsRGVzdGluYXRpb24gPSBudWxscHRyOworICAgIGVsc2UKKyAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hQb2ludGVyKHUuY29kZUlDLm1fY2FsbGVlTG9j
YXRpb24sIG51bGxwdHIpOwogfQogCiBKU09iamVjdCogQ2FsbExpbmtJbmZvOjpjYWxsZWUoKQpA
QCAtMjg0LDYgKzI5NCwyMDYgQEAgdm9pZCBDYWxsTGlua0luZm86OnNldEZyYW1lU2h1ZmZsZURh
dGEoYwogICAgIG1fZnJhbWVTaHVmZmxlRGF0YS0+c2hyaW5rVG9GaXQoKTsKIH0KIAordm9pZCBD
YWxsTGlua0luZm86OmVtaXRGaXJzdEluc3RydWN0aW9uRm9yRGF0YUlDKENDYWxsSGVscGVycyYg
aml0LCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSKQoreworICAgIEdQUlJlZyBzY3JhdGNoR1BSID0g
aml0LnNjcmF0Y2hSZWdpc3RlcigpOworICAgIERpc2FsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJV
c2FnZSBkaXNhbGxvd1NjcmF0Y2goaml0KTsKKyAgICAvLyBXaGVuIHJlcGF0Y2hpbmcsIHdlIGp1
c3Qgb3ZlcndyaXRlIHRoZSBmaXJzdCBpbnN0cnVjdGlvbiBiYWNrLCBzaW5jZSBpdCdsbCBoYXZl
IGJlZW4gcmVwbGFjZWQgd2l0aCBhIGp1bXAgdG8gdGhlIHBvbHltb3JwaGljIGNhbGwgc3R1Yi4K
KyAgICBzaXplX3Qgc3RhcnRTaXplID0gaml0Lm1fYXNzZW1ibGVyLmJ1ZmZlcigpLmNvZGVTaXpl
KCk7CisgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGNhbGxMaW5rSW5mb0dQ
Uiwgb2Zmc2V0T2ZDYWxsZWUoKSksIHNjcmF0Y2hHUFIpOyAKKyAgICBzaXplX3QgbG9hZFNpemUg
PSBqaXQubV9hc3NlbWJsZXIuYnVmZmVyKCkuY29kZVNpemUoKSAtIHN0YXJ0U2l6ZTsKKyAgICBp
ZiAobG9hZFNpemUgPCBzdGF0aWNfY2FzdDxzaXplX3Q+KENDYWxsSGVscGVyczo6cGF0Y2hhYmxl
SnVtcFNpemUoKSkpCisgICAgICAgIGppdC5lbWl0Tm9wcyhzdGF0aWNfY2FzdDxzaXplX3Q+KEND
YWxsSGVscGVyczo6cGF0Y2hhYmxlSnVtcFNpemUoKSkgLSBsb2FkU2l6ZSk7Cit9CisKK01hY3Jv
QXNzZW1ibGVyOjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmVtaXRGYXN0UGF0aEltcGwoQ0NhbGxI
ZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVz
ZURhdGFJQyB1c2VEYXRhSUMsIFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENh
bGwpCit7CisgICAgc2V0VXNlc0RhdGFJQ3ModXNlRGF0YUlDKTsKKyAgICBpZiAoaXNEYXRhSUMo
KSkgeworICAgICAgICBSRUxFQVNFX0FTU0VSVChjYWxsTGlua0luZm9HUFIgIT0gQ0NhbGxIZWxw
ZXJzOjpJbnZhbGlkR1BSUmVnKTsKKyAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tUHRyKHRoaXMpLCBjYWxsTGlua0luZm9HUFIpOworICAgICAgICB1LmRhdGFJQy5tX2Nh
bGxMaW5rSW5mb0dQUiA9IGNhbGxMaW5rSW5mb0dQUjsKKyAgICB9CisKKyAgICBhdXRvIGZhc3RQ
YXRoU3RhcnQgPSBqaXQubGFiZWwoKTsKKyAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVm
ZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgICAgIG1fZmFzdFBhdGhTdGFydCA9IGxpbmtCdWZmZXIu
bG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihmYXN0UGF0aFN0YXJ0KTsKKyAgICB9KTsKKwor
ICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd1BhdGg7CisKKyAgICBpZiAoaXNEYXRhSUMo
KSkgeworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IGppdC5zY3JhdGNoUmVnaXN0ZXIoKTsK
KyAgICAgICAgZW1pdEZpcnN0SW5zdHJ1Y3Rpb25Gb3JEYXRhSUMoaml0LCBjYWxsTGlua0luZm9H
UFIpOworICAgICAgICB7CisgICAgICAgICAgICBEaXNhbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVy
VXNhZ2UgZGlzYWxsb3dTY3JhdGNoKGppdCk7CisgICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQo
aml0LmJyYW5jaFB0cihDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCBzY3JhdGNoR1BSLCBjYWxsZWVH
UFIpKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoaXNUYWlsQ2FsbCgpKSB7CisgICAgICAgICAg
ICBwcmVwYXJlRm9yVGFpbENhbGwoKTsKKyAgICAgICAgICAgIGppdC5mYXJKdW1wKENDYWxsSGVs
cGVyczo6QWRkcmVzcyhjYWxsTGlua0luZm9HUFIsIG9mZnNldE9mTW9ub21vcnBoaWNDYWxsRGVz
dGluYXRpb24oKSksIEpTRW50cnlQdHJUYWcpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAg
IGppdC5jYWxsKENDYWxsSGVscGVyczo6QWRkcmVzcyhjYWxsTGlua0luZm9HUFIsIG9mZnNldE9m
TW9ub21vcnBoaWNDYWxsRGVzdGluYXRpb24oKSksIEpTRW50cnlQdHJUYWcpOworICAgIH0gZWxz
ZSB7CisgICAgICAgIENDYWxsSGVscGVyczo6RGF0YUxhYmVsUHRyIGNhbGxlZUNoZWNrOworICAg
ICAgICBzbG93UGF0aC5hcHBlbmQoaml0LmJyYW5jaFB0cldpdGhQYXRjaChDQ2FsbEhlbHBlcnM6
Ok5vdEVxdWFsLCBjYWxsZWVHUFIsIGNhbGxlZUNoZWNrLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJ
bW1QdHIobnVsbHB0cikpKTsKKworICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2FsbDsKKyAg
ICAgICAgaWYgKGlzVGFpbENhbGwoKSkgeworICAgICAgICAgICAgcHJlcGFyZUZvclRhaWxDYWxs
KCk7CisgICAgICAgICAgICBjYWxsID0gaml0Lm5lYXJUYWlsQ2FsbCgpOworICAgICAgICB9IGVs
c2UKKyAgICAgICAgICAgIGNhbGwgPSBqaXQubmVhckNhbGwoKTsKKyAgICAgICAgaml0LmFkZExp
bmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgeworICAgICAgICAgICAgdS5jb2Rl
SUMubV9jYWxsTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxKU0ludGVy
bmFsUHRyVGFnPihjYWxsKTsKKyAgICAgICAgICAgIHUuY29kZUlDLm1fY2FsbGVlTG9jYXRpb24g
PSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oY2FsbGVlQ2hlY2spOwor
ICAgICAgICB9KTsKKyAgICB9CisKKyAgICByZXR1cm4gc2xvd1BhdGg7Cit9CisKK0NDYWxsSGVs
cGVyczo6SnVtcExpc3QgQ2FsbExpbmtJbmZvOjplbWl0RmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiBq
aXQsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQyB1
c2VEYXRhSUMpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoIWlzVGFpbENhbGwoKSk7CisgICAgcmV0
dXJuIGVtaXRGYXN0UGF0aEltcGwoaml0LCBjYWxsZWVHUFIsIGNhbGxMaW5rSW5mb0dQUiwgdXNl
RGF0YUlDLCBudWxscHRyKTsKK30KKworTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5r
SW5mbzo6ZW1pdFRhaWxDYWxsRmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxs
ZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQyB1c2VEYXRhSUMsIFdURjo6
RnVuY3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpCit7CisgICAgUkVMRUFTRV9BU1NF
UlQoaXNUYWlsQ2FsbCgpKTsKKyAgICByZXR1cm4gZW1pdEZhc3RQYXRoSW1wbChqaXQsIGNhbGxl
ZUdQUiwgY2FsbExpbmtJbmZvR1BSLCB1c2VEYXRhSUMsIFdURk1vdmUocHJlcGFyZUZvclRhaWxD
YWxsKSk7Cit9CisKK3ZvaWQgQ2FsbExpbmtJbmZvOjplbWl0U2xvd1BhdGgoVk0mIHZtLCBDQ2Fs
bEhlbHBlcnMmIGppdCkKK3sKKyAgICBzZXRTbG93UGF0aENhbGxEZXN0aW5hdGlvbih2bS5nZXRD
VElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpLnRlbXBsYXRlIHJldGFnZ2VkQ29kZTxKU0Vu
dHJ5UHRyVGFnPigpKTsKKyAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIo
dGhpcyksIEdQUkluZm86OnJlZ1QyKTsKKyAgICBqaXQuY2FsbChDQ2FsbEhlbHBlcnM6OkFkZHJl
c3MoR1BSSW5mbzo6cmVnVDIsIG9mZnNldE9mU2xvd1BhdGhDYWxsRGVzdGluYXRpb24oKSksIEpT
RW50cnlQdHJUYWcpOworfQorCit2b2lkIENhbGxMaW5rSW5mbzo6ZW1pdERpcmVjdEZhc3RQYXRo
KENDYWxsSGVscGVycyYgaml0KQoreworICAgIFJFTEVBU0VfQVNTRVJUKCFpc1RhaWxDYWxsKCkp
OworCisgICAgc2V0VXNlc0RhdGFJQ3MoVXNlRGF0YUlDOjpObyk7CisKKyAgICBhdXRvIGZhc3RQ
YXRoU3RhcnQgPSBqaXQubGFiZWwoKTsKKyAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVm
ZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgICAgIG1fZmFzdFBhdGhTdGFydCA9IGxpbmtCdWZmZXIu
bG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihmYXN0UGF0aFN0YXJ0KTsKKyAgICB9KTsKKwor
ICAgIGF1dG8gY2FsbCA9IGppdC5uZWFyQ2FsbCgpOworICAgIGppdC5hZGRMaW5rVGFzayhbPV0g
KExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgdS5jb2RlSUMubV9jYWxsTG9jYXRp
b24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxKU0ludGVybmFsUHRyVGFnPihjYWxs
KTsKKyAgICB9KTsKKyAgICBqaXQuYWRkTGF0ZUxpbmtUYXNrKFt0aGlzXSAoTGlua0J1ZmZlciYp
IHsKKyAgICAgICAgaW5pdGlhbGl6ZURpcmVjdENhbGwoKTsKKyAgICB9KTsKK30KKwordm9pZCBD
YWxsTGlua0luZm86OmVtaXREaXJlY3RUYWlsQ2FsbEZhc3RQYXRoKENDYWxsSGVscGVycyYgaml0
LCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKQoreworICAgIFJFTEVB
U0VfQVNTRVJUKGlzVGFpbENhbGwoKSk7CisKKyAgICBzZXRVc2VzRGF0YUlDcyhVc2VEYXRhSUM6
Ok5vKTsKKworICAgIGF1dG8gZmFzdFBhdGhTdGFydCA9IGppdC5sYWJlbCgpOworICAgIGppdC5h
ZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgbV9mYXN0
UGF0aFN0YXJ0ID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KGZhc3RQ
YXRoU3RhcnQpOworICAgIH0pOworCisgICAgLy8gLSBJZiB3ZSdyZSBub3QgeWV0IGxpbmtlZCwg
dGhpcyBpcyBhIGp1bXAgdG8gdGhlIHNsb3cgcGF0aC4KKyAgICAvLyAtIE9uY2Ugd2UncmUgbGlu
a2VkIHRvIGEgZmFzdCBwYXRoLCB0aGlzIGdvZXMgYmFjayB0byBiZWluZyBub3BzIHNvIHdlIGZh
bGwgdGhyb3VnaCB0byB0aGUgbGlua2VkIGp1bXAuCisgICAgaml0LmVtaXROb3BzKENDYWxsSGVs
cGVyczo6cGF0Y2hhYmxlSnVtcFNpemUoKSk7CisKKyAgICBwcmVwYXJlRm9yVGFpbENhbGwoKTsK
KyAgICBhdXRvIGNhbGwgPSBqaXQubmVhclRhaWxDYWxsKCk7CisgICAgaml0LmFkZExpbmtUYXNr
KFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgeworICAgICAgICB1LmNvZGVJQy5tX2NhbGxM
b2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPEpTSW50ZXJuYWxQdHJUYWc+
KGNhbGwpOworICAgIH0pOworICAgIGppdC5hZGRMYXRlTGlua1Rhc2soW3RoaXNdIChMaW5rQnVm
ZmVyJikgeworICAgICAgICBpbml0aWFsaXplRGlyZWN0Q2FsbCgpOworICAgIH0pOworfQorCit2
b2lkIENhbGxMaW5rSW5mbzo6aW5pdGlhbGl6ZURpcmVjdENhbGwoKQoreworICAgIFJFTEVBU0Vf
QVNTRVJUKGlzRGlyZWN0KCkpOworICAgIEFTU0VSVCh1LmNvZGVJQy5tX2NhbGxMb2NhdGlvbik7
CisgICAgaWYgKGlzVGFpbENhbGwoKSkgeworICAgICAgICBSRUxFQVNFX0FTU0VSVChmYXN0UGF0
aFN0YXJ0KCkpOworICAgICAgICBDQ2FsbEhlbHBlcnM6OmVtaXRKSVRDb2RlT3ZlcihmYXN0UGF0
aFN0YXJ0KCksIFsmXSAoQ0NhbGxIZWxwZXJzJiBqaXQpIHsKKyAgICAgICAgICAgIGF1dG8ganVt
cCA9IGppdC5qdW1wKCk7CisgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVm
ZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKGp1bXAs
IHNsb3dQYXRoU3RhcnQoKSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSwgImluaXRpYWxp
emUgZGlyZWN0IGNhbGwiKTsKKyAgICB9IGVsc2UKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJl
cGF0Y2hOZWFyQ2FsbCh1LmNvZGVJQy5tX2NhbGxMb2NhdGlvbiwgc2xvd1BhdGhTdGFydCgpKTsK
K30KKwordm9pZCBDYWxsTGlua0luZm86OnNldERpcmVjdENhbGxUYXJnZXQoQ29kZUxvY2F0aW9u
TGFiZWw8SlNFbnRyeVB0clRhZz4gdGFyZ2V0KQoreworICAgIFJFTEVBU0VfQVNTRVJUKGlzRGly
ZWN0KCkpOworCisgICAgaWYgKGlzVGFpbENhbGwoKSkgeworICAgICAgICBSRUxFQVNFX0FTU0VS
VChmYXN0UGF0aFN0YXJ0KCkpOworICAgICAgICBDQ2FsbEhlbHBlcnM6OmVtaXRKSVRDb2RlT3Zl
cihmYXN0UGF0aFN0YXJ0KCksIFsmXSAoQ0NhbGxIZWxwZXJzJiBqaXQpIHsKKyAgICAgICAgICAg
IC8vIFdlIHJlc2VydmVkIHRoaXMgbWFueSBieXRlcyBmb3IgdGhlIGp1bXAgYXQgZmFzdFBhdGhT
dGFydCgpLiBNYWtlIHRoYXQKKyAgICAgICAgICAgIC8vIGNvZGUgbm9wcyBub3cgc28gd2UgZmFs
bCB0aHJvdWdoIHRvIHRoZSBqdW1wIHRvIHRoZSBmYXN0IHBhdGguCisgICAgICAgICAgICBqaXQu
ZW1pdE5vcHMoQ0NhbGxIZWxwZXJzOjpwYXRjaGFibGVKdW1wU2l6ZSgpKTsgCisgICAgICAgIH0s
ICJTZXR0aW5nIGRpcmVjdCBjYWxsIHRhcmdldCIpOworICAgIH0KKworICAgIE1hY3JvQXNzZW1i
bGVyOjpyZXBhdGNoTmVhckNhbGwodS5jb2RlSUMubV9jYWxsTG9jYXRpb24sIHRhcmdldCk7Cit9
CisKK3ZvaWQgQ2FsbExpbmtJbmZvOjpzZXRTbG93UGF0aENhbGxEZXN0aW5hdGlvbihNYWNyb0Fz
c2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gY29kZVB0cikKK3sKKyAgICBtX3Nsb3dQYXRo
Q2FsbERlc3RpbmF0aW9uID0gY29kZVB0cjsKK30KKwordm9pZCBDYWxsTGlua0luZm86OnJldmVy
dENhbGxUb1N0dWIoKQoreworICAgIFJFTEVBU0VfQVNTRVJUKHN0dWIoKSk7CisgICAgLy8gVGhl
IHN0YXJ0IG9mIG91ciBKSVQgY29kZSBpcyBub3cgYSBqdW1wIHRvIHRoZSBwb2x5bW9ycGhpYyBz
dHViLiBSZXdyaXRlIHRoZSBmaXJzdCBpbnN0cnVjdGlvbgorICAgIC8vIHRvIGJlIHdoYXQgd2Ug
bmVlZCBmb3Igbm9uIHN0dWIgSUNzLgorCisgICAgLy8gdGhpcyBydW5zIGludG8gc29tZSBicmFu
Y2ggY29tcGFjdGlvbiBjcmFwIEknZCBsaWtlIHRvIGF2b2lkIGZvciBub3cuIEVzc2VudGlhbGx5
LCB0aGUgYnJhbmNoCisgICAgLy8gZG9lc24ndCBrbm93IGlmIGl0IGNhbiBiZSBjb21wYWN0ZWQg
b3Igbm90LiBTbyB3ZSBlbmQgdXAgd2l0aCAyOCBieXRlcyBvZiBtYWNoaW5lIGNvZGUsIGZvcgor
ICAgIC8vIHdoYXQgaW4gYWxsIGxpa2VsaWhvb2QgZml0cyBpbiAyNC4gU28gd2UganVzdCBzcGxh
dCBvdXQgdGhlIGZpcnN0IGluc3RydWN0aW9uLiBMb25nIHRlcm0sIHdlCisgICAgLy8gbmVlZCBz
b21ldGhpbmcgY2xlYW5lci4gQnV0IHRoaXMgd29ya3Mgb24gYXJtNjQgZm9yIG5vdy4KKworICAg
IENDYWxsSGVscGVyczo6ZW1pdEpJVENvZGVPdmVyKGZhc3RQYXRoU3RhcnQoKSwgWyZdIChDQ2Fs
bEhlbHBlcnMmIGppdCkgeworICAgICAgICBpZiAoaXNEYXRhSUMoKSkKKyAgICAgICAgICAgIGVt
aXRGaXJzdEluc3RydWN0aW9uRm9yRGF0YUlDKGppdCwgdS5kYXRhSUMubV9jYWxsTGlua0luZm9H
UFIpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIENDYWxsSGVscGVyczo6cmV2ZXJ0SnVt
cFJlcGxhY2VtZW50VG9CcmFuY2hQdHJXaXRoUGF0Y2goCisgICAgICAgICAgICAgICAgQ0NhbGxI
ZWxwZXJzOjpzdGFydE9mQnJhbmNoUHRyV2l0aFBhdGNoT25SZWdpc3Rlcih1LmNvZGVJQy5tX2Nh
bGxlZUxvY2F0aW9uKSwgY2FsbGVlR1BSKCksIG51bGxwdHIpOworICAgICAgICB9CisgICAgfSwg
ICJSZXNldHRpbmcgUG9seW1vcnBoaWNDYWxsIHN0dWJiZWQgQ2FsbExpbmtJbmZvIik7Cit9CisK
K3ZvaWQgQ2FsbExpbmtJbmZvOjpzZXRTdHViKFJlZjxQb2x5bW9ycGhpY0NhbGxTdHViUm91dGlu
ZT4mJiBuZXdTdHViKQoreworICAgIGNsZWFyU3R1YigpOworICAgIG1fc3R1YiA9IFdURk1vdmUo
bmV3U3R1Yik7CisKKyAgICBpZiAoaXNEYXRhSUMoKSkgeworICAgICAgICBDQ2FsbEhlbHBlcnM6
OmVtaXRKSVRDb2RlT3ZlcihmYXN0UGF0aFN0YXJ0KCksIFsmXSAoQ0NhbGxIZWxwZXJzJiBqaXQp
IHsKKyAgICAgICAgICAgIGF1dG8ganVtcCA9IGppdC5qdW1wKCk7CisgICAgICAgICAgICBqaXQu
YWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgICAgICAgICAg
ICAgbGlua0J1ZmZlci5saW5rKGp1bXAsIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5l
UHRyVGFnPihtX3N0dWItPmNvZGUoKS5jb2RlKCkpKTsKKyAgICAgICAgICAgIH0pOworICAgICAg
ICB9LCAiUGF0Y2hpbmcgY2FsbCB0byBQb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZSBpbiBDYWxs
TGlua0luZm8iKTsKKyAgICB9IGVsc2UgeworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwbGFj
ZVdpdGhKdW1wKAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnN0YXJ0T2ZCcmFuY2hQdHJX
aXRoUGF0Y2hPblJlZ2lzdGVyKHUuY29kZUlDLm1fY2FsbGVlTG9jYXRpb24pLAorICAgICAgICAg
ICAgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+KG1fc3R1Yi0+Y29kZSgp
LmNvZGUoKSkpOworICAgIH0KK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAjZW5kaWYgLy8gRU5B
QkxFKEpJVCkKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5r
SW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxs
TGlua0luZm8uaAkocmV2aXNpb24gMjc3NDQwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0NhbGxMaW5rSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwxMiArMzAsMTQgQEAK
ICNpbmNsdWRlICJDb2RlU3BlY2lhbGl6YXRpb25LaW5kLmgiCiAjaW5jbHVkZSAiUG9seW1vcnBo
aWNDYWxsU3R1YlJvdXRpbmUuaCIKICNpbmNsdWRlICJXcml0ZUJhcnJpZXIuaCIKKyNpbmNsdWRl
IDx3dGYvRnVuY3Rpb24uaD4KICNpbmNsdWRlIDx3dGYvU2VudGluZWxMaW5rZWRMaXN0Lmg+CiAK
IG5hbWVzcGFjZSBKU0MgewogCiAjaWYgRU5BQkxFKEpJVCkKIAorY2xhc3MgQ0NhbGxIZWxwZXJz
OwogY2xhc3MgRnVuY3Rpb25Db2RlQmxvY2s7CiBjbGFzcyBKU0Z1bmN0aW9uOwogZW51bSBPcGNv
ZGVJRCA6IHVuc2lnbmVkOwpAQCAtMTYzLDE2ICsxNjUsMzggQEAgcHVibGljOgogICAgICAgICBt
X2NhbGxlZUdQUiA9IGNhbGxlZUdQUjsKICAgICB9CiAKLSAgICB2b2lkIHNldENhbGxMb2NhdGlv
bnMoCi0gICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IGNhbGxSZXR1
cm5Mb2NhdGlvbk9yUGF0Y2hhYmxlSnVtcCwKLSAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJ
bnRlcm5hbFB0clRhZz4gaG90UGF0aEJlZ2luT3JTbG93UGF0aFN0YXJ0LAotICAgICAgICBDb2Rl
TG9jYXRpb25OZWFyQ2FsbDxKU0ludGVybmFsUHRyVGFnPiBob3RQYXRoT3RoZXIpCi0gICAgewot
ICAgICAgICBtX2NhbGxSZXR1cm5Mb2NhdGlvbk9yUGF0Y2hhYmxlSnVtcCA9IGNhbGxSZXR1cm5M
b2NhdGlvbk9yUGF0Y2hhYmxlSnVtcDsKLSAgICAgICAgbV9ob3RQYXRoQmVnaW5PclNsb3dQYXRo
U3RhcnQgPSBob3RQYXRoQmVnaW5PclNsb3dQYXRoU3RhcnQ7Ci0gICAgICAgIG1faG90UGF0aE90
aGVyID0gaG90UGF0aE90aGVyOworICAgIEdQUlJlZyBjYWxsZWVHUFIoKSBjb25zdCB7IHJldHVy
biBtX2NhbGxlZUdQUjsgfQorICAgIAorICAgIGVudW0gY2xhc3MgVXNlRGF0YUlDIDogdWludDhf
dCB7CisgICAgICAgIFllcywKKyAgICAgICAgTm8KKyAgICB9OworCitwcml2YXRlOgorICAgIHZv
aWQgZW1pdEZpcnN0SW5zdHJ1Y3Rpb25Gb3JEYXRhSUMoQ0NhbGxIZWxwZXJzJiwgR1BSUmVnIGNh
bGxMaW5rSW5mb0dQUik7CisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGVtaXRGYXN0UGF0
aEltcGwoQ0NhbGxIZWxwZXJzJiwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5m
b0dQUiwgVXNlRGF0YUlDLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxs
KSBXQVJOX1VOVVNFRF9SRVRVUk47CitwdWJsaWM6CisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBM
aXN0IGVtaXRGYXN0UGF0aChDQ2FsbEhlbHBlcnMmLCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcg
Y2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUMpIFdBUk5fVU5VU0VEX1JFVFVSTjsKKyAgICBNYWNy
b0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdFRhaWxDYWxsRmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiwg
R1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDLCBXVEY6
OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKSBXQVJOX1VOVVNFRF9SRVRVUk47
CisgICAgdm9pZCBlbWl0RGlyZWN0RmFzdFBhdGgoQ0NhbGxIZWxwZXJzJik7CisgICAgdm9pZCBl
bWl0RGlyZWN0VGFpbENhbGxGYXN0UGF0aChDQ2FsbEhlbHBlcnMmLCBXVEY6OkZ1bmN0aW9uPHZv
aWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKTsKKyAgICB2b2lkIGVtaXRTbG93UGF0aChWTSYsIEND
YWxsSGVscGVycyYpOworICAgIHZvaWQgcmV2ZXJ0Q2FsbFRvU3R1YigpOworCisgICAgYm9vbCBp
c0RhdGFJQygpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFVzZURhdGFJQz4obV91c2VEYXRh
SUMpID09IFVzZURhdGFJQzo6WWVzOyB9CisgICAgdm9pZCBzZXRVc2VzRGF0YUlDcyhVc2VEYXRh
SUMgdXNlRGF0YUlDKSB7IG1fdXNlRGF0YUlDID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHVzZURh
dGFJQyk7IH0KKworICAgIHZvaWQgc2V0Q29kZUxvY2F0aW9ucygKKyAgICAgICAgQ29kZUxvY2F0
aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gc2xvd1BhdGhTdGFydCwKKyAgICAgICAgQ29kZUxv
Y2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gZG9uZUxvY2F0aW9uKQorICAgIHsKKyAgICAg
ICAgaWYgKCFpc0RhdGFJQygpKQorICAgICAgICAgICAgdS5jb2RlSUMubV9zbG93UGF0aFN0YXJ0
ID0gc2xvd1BhdGhTdGFydDsKKyAgICAgICAgbV9kb25lTG9jYXRpb24gPSBkb25lTG9jYXRpb247
CiAgICAgfQogCisgICAgdm9pZCBpbml0aWFsaXplRGlyZWN0Q2FsbCgpOworCiAgICAgYm9vbCBh
bGxvd1N0dWJzKCkgY29uc3QgeyByZXR1cm4gbV9hbGxvd1N0dWJzOyB9CiAKICAgICB2b2lkIGRp
c2FsbG93U3R1YnMoKQpAQCAtMTgwLDIzICsyMDQsMTkgQEAgcHVibGljOgogICAgICAgICBtX2Fs
bG93U3R1YnMgPSBmYWxzZTsKICAgICB9CiAKLSAgICBDb2RlTG9jYXRpb25OZWFyQ2FsbDxKU0lu
dGVybmFsUHRyVGFnPiBjYWxsUmV0dXJuTG9jYXRpb24oKTsKLSAgICBDb2RlTG9jYXRpb25KdW1w
PEpTSW50ZXJuYWxQdHJUYWc+IHBhdGNoYWJsZUp1bXAoKTsKLSAgICBDb2RlTG9jYXRpb25EYXRh
TGFiZWxQdHI8SlNJbnRlcm5hbFB0clRhZz4gaG90UGF0aEJlZ2luKCk7CisgICAgQ29kZUxvY2F0
aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gZmFzdFBhdGhTdGFydCgpOwogICAgIENvZGVMb2Nh
dGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IHNsb3dQYXRoU3RhcnQoKTsKKyAgICBDb2RlTG9j
YXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBkb25lTG9jYXRpb24oKTsKIAotICAgIENvZGVM
b2NhdGlvbk5lYXJDYWxsPEpTSW50ZXJuYWxQdHJUYWc+IGhvdFBhdGhPdGhlcigpCi0gICAgewot
ICAgICAgICByZXR1cm4gbV9ob3RQYXRoT3RoZXI7Ci0gICAgfQotCi0gICAgdm9pZCBzZXRDYWxs
ZWUoVk0mLCBKU0NlbGwqLCBKU09iamVjdCogY2FsbGVlKTsKKyAgICB2b2lkIHNldE1vbm9tb3Jw
aGljQ2FsbGVlKFZNJiwgSlNDZWxsKiwgSlNPYmplY3QqIGNhbGxlZSwgTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyPEpTRW50cnlQdHJUYWc+KTsKKyAgICB2b2lkIHNldFNsb3dQYXRoQ2FsbERlc3RpbmF0
aW9uKE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPik7CiAgICAgdm9pZCBjbGVh
ckNhbGxlZSgpOwogICAgIEpTT2JqZWN0KiBjYWxsZWUoKTsKIAogICAgIHZvaWQgc2V0Q29kZUJs
b2NrKFZNJiwgSlNDZWxsKiwgRnVuY3Rpb25Db2RlQmxvY2sqKTsKICAgICB2b2lkIGNsZWFyQ29k
ZUJsb2NrKCk7CiAgICAgRnVuY3Rpb25Db2RlQmxvY2sqIGNvZGVCbG9jaygpOworICAgIHZvaWQg
c2V0RGlyZWN0Q2FsbFRhcmdldChDb2RlTG9jYXRpb25MYWJlbDxKU0VudHJ5UHRyVGFnPik7CiAK
ICAgICB2b2lkIHNldExhc3RTZWVuQ2FsbGVlKFZNJiwgY29uc3QgSlNDZWxsKiBvd25lciwgSlNP
YmplY3QqIGNhbGxlZSk7CiAgICAgdm9pZCBjbGVhckxhc3RTZWVuQ2FsbGVlKCk7CkBAIC0yMDYs
MTIgKzIyNiw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldEV4ZWN1dGFibGVEdXJpbmdDb21waWxh
dGlvbihFeGVjdXRhYmxlQmFzZSopOwogICAgIEV4ZWN1dGFibGVCYXNlKiBleGVjdXRhYmxlKCk7
CiAgICAgCi0gICAgdm9pZCBzZXRTdHViKFJlZjxQb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZT4m
JiBuZXdTdHViKQotICAgIHsKLSAgICAgICAgY2xlYXJTdHViKCk7Ci0gICAgICAgIG1fc3R1YiA9
IFdURk1vdmUobmV3U3R1Yik7Ci0gICAgfQotCisgICAgdm9pZCBzZXRTdHViKFJlZjxQb2x5bW9y
cGhpY0NhbGxTdHViUm91dGluZT4mJik7CiAgICAgdm9pZCBjbGVhclN0dWIoKTsKIAogICAgIFBv
bHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lKiBzdHViKCkgY29uc3QKQEAgLTMxMSw2ICszMjYsMjEg
QEAgcHVibGljOgogICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENhbGxMaW5rSW5mbywg
bV9zbG93UGF0aENvdW50KTsKICAgICB9CiAKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9m
Q2FsbGVlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ2FsbExpbmtJ
bmZvLCBtX2NhbGxlZU9yQ29kZUJsb2NrKTsKKyAgICB9CisKKyAgICBzdGF0aWMgcHRyZGlmZl90
IG9mZnNldE9mTW9ub21vcnBoaWNDYWxsRGVzdGluYXRpb24oKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIE9CSkVDVF9PRkZTRVRPRihDYWxsTGlua0luZm8sIHUpICsgT0JKRUNUX09GRlNFVE9GKFVu
aW9uVHlwZSwgZGF0YUlDLm1fbW9ub21vcnBoaWNDYWxsRGVzdGluYXRpb24pOworICAgIH0KKwor
ICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZTbG93UGF0aENhbGxEZXN0aW5hdGlvbigpCisg
ICAgeworICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENhbGxMaW5rSW5mbywgbV9zbG93
UGF0aENhbGxEZXN0aW5hdGlvbik7CisgICAgfQorCiAgICAgR1BSUmVnIGNhbGxlZUdQUigpCiAg
ICAgewogICAgICAgICByZXR1cm4gbV9jYWxsZWVHUFI7CkBAIC0zNTIsMTAgKzM4MiwyNSBAQCBw
dWJsaWM6CiAgICAgfQogCiBwcml2YXRlOgotICAgIHVpbnQzMl90IG1fbWF4QXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMgeyAwIH07IC8vIEZvciB2YXJhcmdzOiB0aGUgcHJvZmlsZWQgbWF4aW11
bSBudW1iZXIgb2YgYXJndW1lbnRzLiBGb3IgZGlyZWN0OiB0aGUgbnVtYmVyIG9mIHN0YWNrIHNs
b3RzIGFsbG9jYXRlZCBmb3IgYXJndW1lbnRzLgotICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50
ZXJuYWxQdHJUYWc+IG1fY2FsbFJldHVybkxvY2F0aW9uT3JQYXRjaGFibGVKdW1wOwotICAgIENv
ZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IG1faG90UGF0aEJlZ2luT3JTbG93UGF0
aFN0YXJ0OwotICAgIENvZGVMb2NhdGlvbk5lYXJDYWxsPEpTSW50ZXJuYWxQdHJUYWc+IG1faG90
UGF0aE90aGVyOworICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IG1fZmFz
dFBhdGhTdGFydDsKKyAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBtX2Rv
bmVMb2NhdGlvbjsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gbV9z
bG93UGF0aENhbGxEZXN0aW5hdGlvbjsKKyAgICB1bmlvbiBVbmlvblR5cGUgeworICAgICAgICBV
bmlvblR5cGUoKSAKKyAgICAgICAgICAgIDogZGF0YUlDIHsgbnVsbHB0ciwgSW52YWxpZEdQUlJl
ZyB9CisgICAgICAgIHsgfQorICAgICAgICBzdHJ1Y3QgRGF0YUlDIHsKKyAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBtX21vbm9tb3JwaGljQ2FsbERlc3Rp
bmF0aW9uOworICAgICAgICAgICAgR1BSUmVnIG1fY2FsbExpbmtJbmZvR1BSOworICAgICAgICB9
IGRhdGFJQzsKKworICAgICAgICBzdHJ1Y3QgeworICAgICAgICAgICAgQ29kZUxvY2F0aW9uTmVh
ckNhbGw8SlNJbnRlcm5hbFB0clRhZz4gbV9jYWxsTG9jYXRpb247CisgICAgICAgICAgICBDb2Rl
TG9jYXRpb25EYXRhTGFiZWxQdHI8SlNJbnRlcm5hbFB0clRhZz4gbV9jYWxsZWVMb2NhdGlvbjsK
KyAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IG1fc2xvd1Bh
dGhTdGFydDsKKyAgICAgICAgfSBjb2RlSUM7CisgICAgfSB1OworCiAgICAgV3JpdGVCYXJyaWVy
PEpTQ2VsbD4gbV9jYWxsZWVPckNvZGVCbG9jazsKICAgICBXcml0ZUJhcnJpZXI8SlNDZWxsPiBt
X2xhc3RTZWVuQ2FsbGVlT3JFeGVjdXRhYmxlOwogICAgIFJlZlB0cjxQb2x5bW9ycGhpY0NhbGxT
dHViUm91dGluZT4gbV9zdHViOwpAQCAtMzY5LDggKzQxNCwxMCBAQCBwcml2YXRlOgogICAgIGJv
b2wgbV9hbGxvd1N0dWJzIDogMTsKICAgICBib29sIG1fY2xlYXJlZEJ5SmV0dGlzb24gOiAxOwog
ICAgIHVuc2lnbmVkIG1fY2FsbFR5cGUgOiA0OyAvLyBDYWxsVHlwZQorICAgIHVuc2lnbmVkIG1f
dXNlRGF0YUlDIDogMTsgLy8gVXNlRGF0YUlDCiAgICAgR1BSUmVnIG1fY2FsbGVlR1BSIHsgSW52
YWxpZEdQUlJlZyB9OwogICAgIHVpbnQzMl90IG1fc2xvd1BhdGhDb3VudCB7IDAgfTsKKyAgICB1
aW50MzJfdCBtX21heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIHsgMCB9OyAvLyBGb3IgdmFy
YXJnczogdGhlIHByb2ZpbGVkIG1heGltdW0gbnVtYmVyIG9mIGFyZ3VtZW50cy4gRm9yIGRpcmVj
dDogdGhlIG51bWJlciBvZiBzdGFjayBzbG90cyBhbGxvY2F0ZWQgZm9yIGFyZ3VtZW50cy4KIH07
CiAKIGlubGluZSBDb2RlT3JpZ2luIGdldENhbGxMaW5rSW5mb0NvZGVPcmlnaW4oQ2FsbExpbmtJ
bmZvJiBjYWxsTGlua0luZm8pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJ
VENvbXBpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0pJVENvbXBpbGVyLmNwcAkocmV2aXNpb24gMjc3NDQwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1NywzMSArMjU3
LDE4IEBAIHZvaWQgSklUQ29tcGlsZXI6OmxpbmsoTGlua0J1ZmZlciYgbGlua0IKICAgICBmaW5h
bGl6ZUlubGluZUNhY2hlcyhtX2luc3RhbmNlT2ZzLCBsaW5rQnVmZmVyKTsKICAgICBmaW5hbGl6
ZUlubGluZUNhY2hlcyhtX3ByaXZhdGVCcmFuZEFjY2Vzc2VzLCBsaW5rQnVmZmVyKTsKIAotICAg
IGF1dG8gbGlua0NhbGxUaHVuayA9IEZ1bmN0aW9uUHRyPE5vUHRyVGFnPih2bSgpLmdldENUSVN0
dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICAg
ICBmb3IgKGF1dG8mIHJlY29yZCA6IG1fanNDYWxscykgewogICAgICAgICBDYWxsTGlua0luZm8m
IGluZm8gPSAqcmVjb3JkLmluZm87Ci0gICAgICAgIGxpbmtCdWZmZXIubGluayhyZWNvcmQuc2xv
d0NhbGwsIGxpbmtDYWxsVGh1bmspOwotICAgICAgICBpbmZvLnNldENhbGxMb2NhdGlvbnMoCi0g
ICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPihsaW5rQnVmZmVy
LmxvY2F0aW9uT2ZOZWFyQ2FsbDxKU0ludGVybmFsUHRyVGFnPihyZWNvcmQuc2xvd0NhbGwpKSwK
LSAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+KGxpbmtCdWZm
ZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihyZWNvcmQudGFyZ2V0VG9DaGVjaykpLAot
ICAgICAgICAgICAgbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8SlNJbnRlcm5hbFB0clRh
Zz4ocmVjb3JkLmZhc3RDYWxsKSk7CisgICAgICAgIGluZm8uc2V0Q29kZUxvY2F0aW9ucygKKyAg
ICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihyZWNvcmQu
c2xvd1BhdGhTdGFydCksCisgICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRl
cm5hbFB0clRhZz4ocmVjb3JkLmRvbmVMb2NhdGlvbikpOwogICAgIH0KICAgICAKLSAgICBmb3Ig
KEpTRGlyZWN0Q2FsbFJlY29yZCYgcmVjb3JkIDogbV9qc0RpcmVjdENhbGxzKSB7CisgICAgZm9y
IChhdXRvJiByZWNvcmQgOiBtX2pzRGlyZWN0Q2FsbHMpIHsKICAgICAgICAgQ2FsbExpbmtJbmZv
JiBpbmZvID0gKnJlY29yZC5pbmZvOwotICAgICAgICBsaW5rQnVmZmVyLmxpbmsocmVjb3JkLmNh
bGwsIGxpbmtCdWZmZXIubG9jYXRpb25PZjxOb1B0clRhZz4ocmVjb3JkLnNsb3dQYXRoKSk7Ci0g
ICAgICAgIGluZm8uc2V0Q2FsbExvY2F0aW9ucygKLSAgICAgICAgICAgIENvZGVMb2NhdGlvbkxh
YmVsPEpTSW50ZXJuYWxQdHJUYWc+KCksCisgICAgICAgIGluZm8uc2V0Q29kZUxvY2F0aW9ucygK
ICAgICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihyZWNv
cmQuc2xvd1BhdGgpLAotICAgICAgICAgICAgbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8
SlNJbnRlcm5hbFB0clRhZz4ocmVjb3JkLmNhbGwpKTsKLSAgICB9Ci0gICAgCi0gICAgZm9yIChK
U0RpcmVjdFRhaWxDYWxsUmVjb3JkJiByZWNvcmQgOiBtX2pzRGlyZWN0VGFpbENhbGxzKSB7Ci0g
ICAgICAgIENhbGxMaW5rSW5mbyYgaW5mbyA9ICpyZWNvcmQuaW5mbzsKLSAgICAgICAgaW5mby5z
ZXRDYWxsTG9jYXRpb25zKAotICAgICAgICAgICAgbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50
ZXJuYWxQdHJUYWc+KHJlY29yZC5wYXRjaGFibGVKdW1wKSwKLSAgICAgICAgICAgIGxpbmtCdWZm
ZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihyZWNvcmQuc2xvd1BhdGgpLAotICAgICAg
ICAgICAgbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8SlNJbnRlcm5hbFB0clRhZz4ocmVj
b3JkLmNhbGwpKTsKKyAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJU
YWc+KCkpOwogICAgIH0KIAogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAkocmV2aXNpb24gMjc3NDQw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yMTksMTkgKzIxOSwxNCBAQCBwdWJsaWM6CiAgICAgICAgIG1fcHJpdmF0ZUJy
YW5kQWNjZXNzZXMuYXBwZW5kKElubGluZUNhY2hlV3JhcHBlcjxKSVRQcml2YXRlQnJhbmRBY2Nl
c3NHZW5lcmF0b3I+KGdlbiwgc2xvd1BhdGgpKTsKICAgICB9CiAKLSAgICB2b2lkIGFkZEpTQ2Fs
bChDYWxsIGZhc3RDYWxsLCBDYWxsIHNsb3dDYWxsLCBEYXRhTGFiZWxQdHIgdGFyZ2V0VG9DaGVj
aywgQ2FsbExpbmtJbmZvKiBpbmZvKQorICAgIHZvaWQgYWRkSlNDYWxsKExhYmVsIHNsb3dQYXRo
U3RhcnQsIExhYmVsIGRvbmVMb2NhdGlvbiwgQ2FsbExpbmtJbmZvKiBpbmZvKQogICAgIHsKLSAg
ICAgICAgbV9qc0NhbGxzLmFwcGVuZChKU0NhbGxSZWNvcmQoZmFzdENhbGwsIHNsb3dDYWxsLCB0
YXJnZXRUb0NoZWNrLCBpbmZvKSk7CisgICAgICAgIG1fanNDYWxscy5hcHBlbmQoSlNDYWxsUmVj
b3JkKHNsb3dQYXRoU3RhcnQsIGRvbmVMb2NhdGlvbiwgaW5mbykpOwogICAgIH0KICAgICAKLSAg
ICB2b2lkIGFkZEpTRGlyZWN0Q2FsbChDYWxsIGNhbGwsIExhYmVsIHNsb3dQYXRoLCBDYWxsTGlu
a0luZm8qIGluZm8pCisgICAgdm9pZCBhZGRKU0RpcmVjdENhbGwoTGFiZWwgc2xvd1BhdGgsIENh
bGxMaW5rSW5mbyogaW5mbykKICAgICB7Ci0gICAgICAgIG1fanNEaXJlY3RDYWxscy5hcHBlbmQo
SlNEaXJlY3RDYWxsUmVjb3JkKGNhbGwsIHNsb3dQYXRoLCBpbmZvKSk7Ci0gICAgfQotICAgIAot
ICAgIHZvaWQgYWRkSlNEaXJlY3RUYWlsQ2FsbChQYXRjaGFibGVKdW1wIHBhdGNoYWJsZUp1bXAs
IENhbGwgY2FsbCwgTGFiZWwgc2xvd1BhdGgsIENhbGxMaW5rSW5mbyogaW5mbykKLSAgICB7Ci0g
ICAgICAgIG1fanNEaXJlY3RUYWlsQ2FsbHMuYXBwZW5kKEpTRGlyZWN0VGFpbENhbGxSZWNvcmQo
cGF0Y2hhYmxlSnVtcCwgY2FsbCwgc2xvd1BhdGgsIGluZm8pKTsKKyAgICAgICAgbV9qc0RpcmVj
dENhbGxzLmFwcGVuZChKU0RpcmVjdENhbGxSZWNvcmQoc2xvd1BhdGgsIGluZm8pKTsKICAgICB9
CiAgICAgCiAgICAgdm9pZCBhZGRXZWFrUmVmZXJlbmNlKEpTQ2VsbCogdGFyZ2V0KQpAQCAtMzI4
LDUyICszMjMsMjggQEAgcHJpdmF0ZToKIAogCiAgICAgc3RydWN0IEpTQ2FsbFJlY29yZCB7Ci0g
ICAgICAgIEpTQ2FsbFJlY29yZChDYWxsIGZhc3RDYWxsLCBDYWxsIHNsb3dDYWxsLCBEYXRhTGFi
ZWxQdHIgdGFyZ2V0VG9DaGVjaywgQ2FsbExpbmtJbmZvKiBpbmZvKQotICAgICAgICAgICAgOiBm
YXN0Q2FsbChmYXN0Q2FsbCkKLSAgICAgICAgICAgICwgc2xvd0NhbGwoc2xvd0NhbGwpCi0gICAg
ICAgICAgICAsIHRhcmdldFRvQ2hlY2sodGFyZ2V0VG9DaGVjaykKKyAgICAgICAgSlNDYWxsUmVj
b3JkKExhYmVsIHNsb3dQYXRoU3RhcnQsIExhYmVsIGRvbmVMb2NhdGlvbiwgQ2FsbExpbmtJbmZv
KiBpbmZvKQorICAgICAgICAgICAgOiBzbG93UGF0aFN0YXJ0KHNsb3dQYXRoU3RhcnQpCisgICAg
ICAgICAgICAsIGRvbmVMb2NhdGlvbihkb25lTG9jYXRpb24pCiAgICAgICAgICAgICAsIGluZm8o
aW5mbykKICAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKGZhc3RDYWxsLmlzRmxhZ1NldChD
YWxsOjpOZWFyKSk7Ci0gICAgICAgICAgICBBU1NFUlQoc2xvd0NhbGwuaXNGbGFnU2V0KENhbGw6
Ok5lYXIpKTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgQ2FsbCBmYXN0Q2FsbDsKLSAg
ICAgICAgQ2FsbCBzbG93Q2FsbDsKLSAgICAgICAgRGF0YUxhYmVsUHRyIHRhcmdldFRvQ2hlY2s7
CisgICAgICAgIExhYmVsIHNsb3dQYXRoU3RhcnQ7CisgICAgICAgIExhYmVsIGRvbmVMb2NhdGlv
bjsKICAgICAgICAgQ2FsbExpbmtJbmZvKiBpbmZvOwogICAgIH07CiAgICAgCiAgICAgc3RydWN0
IEpTRGlyZWN0Q2FsbFJlY29yZCB7Ci0gICAgICAgIEpTRGlyZWN0Q2FsbFJlY29yZChDYWxsIGNh
bGwsIExhYmVsIHNsb3dQYXRoLCBDYWxsTGlua0luZm8qIGluZm8pCi0gICAgICAgICAgICA6IGNh
bGwoY2FsbCkKLSAgICAgICAgICAgICwgc2xvd1BhdGgoc2xvd1BhdGgpCi0gICAgICAgICAgICAs
IGluZm8oaW5mbykKLSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKGNhbGwuaXNGbGFnU2V0
KENhbGw6Ok5lYXIpKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgQ2FsbCBjYWxsOwot
ICAgICAgICBMYWJlbCBzbG93UGF0aDsKLSAgICAgICAgQ2FsbExpbmtJbmZvKiBpbmZvOwotICAg
IH07Ci0gICAgCi0gICAgc3RydWN0IEpTRGlyZWN0VGFpbENhbGxSZWNvcmQgewotICAgICAgICBK
U0RpcmVjdFRhaWxDYWxsUmVjb3JkKFBhdGNoYWJsZUp1bXAgcGF0Y2hhYmxlSnVtcCwgQ2FsbCBj
YWxsLCBMYWJlbCBzbG93UGF0aCwgQ2FsbExpbmtJbmZvKiBpbmZvKQotICAgICAgICAgICAgOiBw
YXRjaGFibGVKdW1wKHBhdGNoYWJsZUp1bXApCi0gICAgICAgICAgICAsIGNhbGwoY2FsbCkKLSAg
ICAgICAgICAgICwgc2xvd1BhdGgoc2xvd1BhdGgpCisgICAgICAgIEpTRGlyZWN0Q2FsbFJlY29y
ZChMYWJlbCBzbG93UGF0aCwgQ2FsbExpbmtJbmZvKiBpbmZvKQorICAgICAgICAgICAgOiBzbG93
UGF0aChzbG93UGF0aCkKICAgICAgICAgICAgICwgaW5mbyhpbmZvKQogICAgICAgICB7Ci0gICAg
ICAgICAgICBBU1NFUlQoY2FsbC5pc0ZsYWdTZXQoQ2FsbDo6TmVhcikgJiYgY2FsbC5pc0ZsYWdT
ZXQoQ2FsbDo6VGFpbCkpOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBQYXRjaGFibGVK
dW1wIHBhdGNoYWJsZUp1bXA7Ci0gICAgICAgIENhbGwgY2FsbDsKICAgICAgICAgTGFiZWwgc2xv
d1BhdGg7CiAgICAgICAgIENhbGxMaW5rSW5mbyogaW5mbzsKICAgICB9OwotCiAgICAgCiAgICAg
VmVjdG9yPElubGluZUNhY2hlV3JhcHBlcjxKSVRHZXRCeUlkR2VuZXJhdG9yPiwgND4gbV9nZXRC
eUlkczsKICAgICBWZWN0b3I8SW5saW5lQ2FjaGVXcmFwcGVyPEpJVEdldEJ5SWRXaXRoVGhpc0dl
bmVyYXRvcj4sIDQ+IG1fZ2V0QnlJZHNXaXRoVGhpczsKQEAgLTM4Niw3ICszNTcsNiBAQCBwcml2
YXRlOgogICAgIFZlY3RvcjxJbmxpbmVDYWNoZVdyYXBwZXI8SklUUHJpdmF0ZUJyYW5kQWNjZXNz
R2VuZXJhdG9yPiwgND4gbV9wcml2YXRlQnJhbmRBY2Nlc3NlczsKICAgICBWZWN0b3I8SlNDYWxs
UmVjb3JkLCA0PiBtX2pzQ2FsbHM7CiAgICAgVmVjdG9yPEpTRGlyZWN0Q2FsbFJlY29yZCwgND4g
bV9qc0RpcmVjdENhbGxzOwotICAgIFZlY3RvcjxKU0RpcmVjdFRhaWxDYWxsUmVjb3JkLCA0PiBt
X2pzRGlyZWN0VGFpbENhbGxzOwogICAgIFNlZ21lbnRlZFZlY3RvcjxPU1JFeGl0Q29tcGlsYXRp
b25JbmZvLCA0PiBtX2V4aXRDb21waWxhdGlvbkluZm87CiAgICAgVmVjdG9yPFZlY3RvcjxMYWJl
bD4+IG1fZXhpdFNpdGVMYWJlbHM7CiAgICAgVmVjdG9yPERGRzo6T1NSRW50cnlEYXRhPiBtX29z
ckVudHJ5OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGls
ZXJDb21tb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
T1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcAkocmV2aXNpb24gMjc3NDQwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yMDksNyArMjA5LDcgQEAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0Vu
dHJ5UHRyVAogICAgICAgICAgICAgICAgIGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyLT5nZXRD
YWxsTGlua0luZm9Gb3JCeXRlY29kZUluZGV4KGNhbGxCeXRlY29kZUluZGV4KTsKICAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxMaW5rSW5mbyk7CiAKLSAgICAgICAgICAgIGp1bXBUYXJn
ZXQgPSBjYWxsTGlua0luZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbigpLnJldGFnZ2VkPEpTRW50cnlQ
dHJUYWc+KCk7CisgICAgICAgICAgICBqdW1wVGFyZ2V0ID0gY2FsbExpbmtJbmZvLT5kb25lTG9j
YXRpb24oKS5yZXRhZ2dlZDxKU0VudHJ5UHRyVGFnPigpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25z
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlv
bnMuY3BwCShyZXZpc2lvbiAyNzc0NDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNjE2LDcgKzM2MTYsNyBAQCBKU0Nf
REVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uTGlua0RpCiAgICAgICAgICAgICBjb2RlUHRy
ID0gZnVuY3Rpb25FeGVjdXRhYmxlLT5lbnRyeXBvaW50Rm9yKGtpbmQsIEFyaXR5Q2hlY2tOb3RS
ZXF1aXJlZCk7CiAgICAgfQogICAgIAotICAgIGxpbmtEaXJlY3RGb3IoY2FsbEZyYW1lLCAqY2Fs
bExpbmtJbmZvLCBjb2RlQmxvY2ssIGNvZGVQdHIpOworICAgIGxpbmtEaXJlY3RDYWxsKGNhbGxG
cmFtZSwgKmNhbGxMaW5rSW5mbywgY29kZUJsb2NrLCBjb2RlUHRyKTsKIH0KIAogSlNDX0RFRklO
RV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblRyaWdnZXJSZW9wdGltaXphdGlvbk5vdywgdm9pZCwg
KENvZGVCbG9jayogY29kZUJsb2NrLCBDb2RlQmxvY2sqIG9wdGltaXplZENvZGVCbG9jaywgT1NS
RXhpdEJhc2UqIGV4aXQpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCShyZXZpc2lvbiAyNzc0NDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC04MzAsMTggKzgzMCwxNCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlKiBu
b2RlCiAgICAgICAgIGlmIChpc1RhaWwpIHsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG5v
ZGUtPm9wKCkgPT0gRGlyZWN0VGFpbENhbGwpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBK
SVRDb21waWxlcjo6UGF0Y2hhYmxlSnVtcCBwYXRjaGFibGVKdW1wID0gbV9qaXQucGF0Y2hhYmxl
SnVtcCgpOwogICAgICAgICAgICAgSklUQ29tcGlsZXI6OkxhYmVsIG1haW5QYXRoID0gbV9qaXQu
bGFiZWwoKTsKLSAgICAgICAgICAgIAogICAgICAgICAgICAgbV9qaXQuZW1pdFN0b3JlQ2FsbFNp
dGVJbmRleChjYWxsU2l0ZSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGNhbGxMaW5rSW5m
by0+c2V0RnJhbWVTaHVmZmxlRGF0YShzaHVmZmxlRGF0YSk7Ci0gICAgICAgICAgICBDYWxsRnJh
bWVTaHVmZmxlcihtX2ppdCwgc2h1ZmZsZURhdGEpLnByZXBhcmVGb3JUYWlsQ2FsbCgpOwotICAg
ICAgICAgICAgCi0gICAgICAgICAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsID0gbV9qaXQubmVh
clRhaWxDYWxsKCk7Ci0gICAgICAgICAgICAKKworICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5l
bWl0RGlyZWN0VGFpbENhbGxGYXN0UGF0aChtX2ppdCwgWyZdIHsKKyAgICAgICAgICAgICAgICBj
YWxsTGlua0luZm8tPnNldEZyYW1lU2h1ZmZsZURhdGEoc2h1ZmZsZURhdGEpOworICAgICAgICAg
ICAgICAgIENhbGxGcmFtZVNodWZmbGVyKG1faml0LCBzaHVmZmxlRGF0YSkucHJlcGFyZUZvclRh
aWxDYWxsKCk7CisgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpMYWJl
bCBzbG93UGF0aCA9IG1faml0LmxhYmVsKCk7Ci0gICAgICAgICAgICBwYXRjaGFibGVKdW1wLm1f
anVtcC5saW5rVG8oc2xvd1BhdGgsICZtX2ppdCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAg
IHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKEludmFsaWRHUFJSZWcpOwogICAgICAgICAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25MaW5rRGlyZWN0Q2FsbCwgY2FsbExpbmtJbmZvLCBjYWxsZWVH
UFIpOwpAQCAtODUxLDE1ICs4NDcsMTMgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwo
Tm9kZSogbm9kZQogICAgICAgICAgICAgCiAgICAgICAgICAgICB1c2VDaGlsZHJlbihub2RlKTsK
ICAgICAgICAgICAgIAotICAgICAgICAgICAgbV9qaXQuYWRkSlNEaXJlY3RUYWlsQ2FsbChwYXRj
aGFibGVKdW1wLCBjYWxsLCBzbG93UGF0aCwgY2FsbExpbmtJbmZvKTsKKyAgICAgICAgICAgIG1f
aml0LmFkZEpTRGlyZWN0Q2FsbChzbG93UGF0aCwgY2FsbExpbmtJbmZvKTsKICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgSklUQ29tcGlsZXI6OkxhYmVs
IG1haW5QYXRoID0gbV9qaXQubGFiZWwoKTsKLSAgICAgICAgCiAgICAgICAgIG1faml0LmVtaXRT
dG9yZUNhbGxTaXRlSW5kZXgoY2FsbFNpdGUpOwotICAgICAgICAKLSAgICAgICAgSklUQ29tcGls
ZXI6OkNhbGwgY2FsbCA9IG1faml0Lm5lYXJDYWxsKCk7CisgICAgICAgIGNhbGxMaW5rSW5mby0+
ZW1pdERpcmVjdEZhc3RQYXRoKG1faml0KTsKICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgZG9u
ZSA9IG1faml0Lmp1bXAoKTsKICAgICAgICAgCiAgICAgICAgIEpJVENvbXBpbGVyOjpMYWJlbCBz
bG93UGF0aCA9IG1faml0LmxhYmVsKCk7CkBAIC04NzQsMzAgKzg2OCwyOSBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlKiBub2RlCiAgICAgICAgIAogICAgICAgICBzZXRSZXN1
bHRBbmRSZXNldFN0YWNrKCk7CiAgICAgICAgIAotICAgICAgICBtX2ppdC5hZGRKU0RpcmVjdENh
bGwoY2FsbCwgc2xvd1BhdGgsIGNhbGxMaW5rSW5mbyk7CisgICAgICAgIG1faml0LmFkZEpTRGly
ZWN0Q2FsbChzbG93UGF0aCwgY2FsbExpbmtJbmZvKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
ICAgICAKICAgICBtX2ppdC5lbWl0U3RvcmVDYWxsU2l0ZUluZGV4KGNhbGxTaXRlKTsKICAgICAK
LSAgICBKSVRDb21waWxlcjo6RGF0YUxhYmVsUHRyIHRhcmdldFRvQ2hlY2s7Ci0gICAgSklUQ29t
cGlsZXI6Okp1bXAgc2xvd1BhdGggPSBtX2ppdC5icmFuY2hQdHJXaXRoUGF0Y2goTWFjcm9Bc3Nl
bWJsZXI6Ok5vdEVxdWFsLCBjYWxsZWVHUFIsIHRhcmdldFRvQ2hlY2ssIFRydXN0ZWRJbW1QdHIo
bnVsbHB0cikpOwotCisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93Q2FzZXM7CiAgICAg
aWYgKGlzVGFpbCkgewotICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBUYWlsQ2FsbCkgewotICAg
ICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRGcmFtZVNodWZmbGVEYXRhKHNodWZmbGVEYXRhKTsK
LSAgICAgICAgICAgIENhbGxGcmFtZVNodWZmbGVyKG1faml0LCBzaHVmZmxlRGF0YSkucHJlcGFy
ZUZvclRhaWxDYWxsKCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBtX2ppdC5lbWl0
UmVzdG9yZUNhbGxlZVNhdmVzKCk7Ci0gICAgICAgICAgICBtX2ppdC5wcmVwYXJlRm9yVGFpbENh
bGxTbG93KCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBmYXN0
Q2FsbCA9IGlzVGFpbCA/IG1faml0Lm5lYXJUYWlsQ2FsbCgpIDogbV9qaXQubmVhckNhbGwoKTsK
LQorICAgICAgICBzbG93Q2FzZXMgPSBjYWxsTGlua0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRo
KG1faml0LCBjYWxsZWVHUFIsIEludmFsaWRHUFJSZWcsIENhbGxMaW5rSW5mbzo6VXNlRGF0YUlD
OjpObywgWyZdIHsKKyAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IFRhaWxDYWxsKSB7Cisg
ICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRGcmFtZVNodWZmbGVEYXRhKHNodWZmbGVE
YXRhKTsKKyAgICAgICAgICAgICAgICBDYWxsRnJhbWVTaHVmZmxlcihtX2ppdCwgc2h1ZmZsZURh
dGEpLnByZXBhcmVGb3JUYWlsQ2FsbCgpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICBtX2ppdC5lbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CisgICAgICAgICAgICAgICAg
bV9qaXQucHJlcGFyZUZvclRhaWxDYWxsU2xvdygpOworICAgICAgICAgICAgfQorICAgICAgICB9
KTsKKyAgICB9IGVsc2UKKyAgICAgICAgc2xvd0Nhc2VzID0gY2FsbExpbmtJbmZvLT5lbWl0RmFz
dFBhdGgobV9qaXQsIGNhbGxlZUdQUiwgSW52YWxpZEdQUlJlZywgQ2FsbExpbmtJbmZvOjpVc2VE
YXRhSUM6Ok5vKTsKICAgICBKSVRDb21waWxlcjo6SnVtcCBkb25lID0gbV9qaXQuanVtcCgpOwog
Ci0gICAgc2xvd1BhdGgubGluaygmbV9qaXQpOworICAgIHNsb3dDYXNlcy5saW5rKCZtX2ppdCk7
CisgICAgYXV0byBzbG93UGF0aFN0YXJ0ID0gbV9qaXQubGFiZWwoKTsKIAogICAgIGlmIChub2Rl
LT5vcCgpID09IFRhaWxDYWxsKSB7CiAgICAgICAgIENhbGxGcmFtZVNodWZmbGVyIGNhbGxGcmFt
ZVNodWZmbGVyKG1faml0LCBzaHVmZmxlRGF0YSk7CkBAIC05MDUsMjMgKzg5OCwyMiBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlKiBub2RlCiAgICAgICAgIGNhbGxGcmFtZVNo
dWZmbGVyLnByZXBhcmVGb3JTbG93UGF0aCgpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIG1faml0
Lm1vdmUoY2FsbGVlR1BSLCBHUFJJbmZvOjpyZWdUMCk7IC8vIENhbGxlZSBuZWVkcyB0byBiZSBp
biByZWdUMAotCiAgICAgICAgIGlmIChpc1RhaWwpCiAgICAgICAgICAgICBtX2ppdC5lbWl0UmVz
dG9yZUNhbGxlZVNhdmVzKCk7IC8vIFRoaXMgbmVlZHMgdG8gaGFwcGVuIGFmdGVyIHdlIG1vdmVk
IGNhbGxlZUdQUiB0byByZWdUMAogICAgIH0KIAotICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0
cihjYWxsTGlua0luZm8pLCBHUFJJbmZvOjpyZWdUMik7IC8vIExpbmsgaW5mbyBuZWVkcyB0byBi
ZSBpbiByZWdUMgogICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9n
cmFwaCwgZ2xvYmFsT2JqZWN0KSwgR1BSSW5mbzo6cmVnVDMpOyAvLyBKU0dsb2JhbE9iamVjdCBu
ZWVkcyB0byBiZSBpbiByZWdUMwotICAgIEpJVENvbXBpbGVyOjpDYWxsIHNsb3dDYWxsID0gbV9q
aXQubmVhckNhbGwoKTsKKyAgICBjYWxsTGlua0luZm8tPmVtaXRTbG93UGF0aCh2bSgpLCBtX2pp
dCk7CiAKICAgICBkb25lLmxpbmsoJm1faml0KTsKKyAgICBhdXRvIGRvbmVMb2NhdGlvbiA9IG1f
aml0LmxhYmVsKCk7CiAKICAgICBpZiAoaXNUYWlsKQogICAgICAgICBtX2ppdC5hYm9ydFdpdGhS
ZWFzb24oSklURGlkUmV0dXJuRnJvbVRhaWxDYWxsKTsKICAgICBlbHNlCiAgICAgICAgIHNldFJl
c3VsdEFuZFJlc2V0U3RhY2soKTsKIAotICAgIG1faml0LmFkZEpTQ2FsbChmYXN0Q2FsbCwgc2xv
d0NhbGwsIHRhcmdldFRvQ2hlY2ssIGNhbGxMaW5rSW5mbyk7CisgICAgbV9qaXQuYWRkSlNDYWxs
KHNsb3dQYXRoU3RhcnQsIGRvbmVMb2NhdGlvbiwgY2FsbExpbmtJbmZvKTsKIH0KIAogLy8gQ2xh
bmcgc2hvdWxkIGFsbG93IHVucmVhY2hhYmxlIFtbY2xhbmc6OmZhbGx0aHJvdWdoXV0gaW4gdGVt
cGxhdGUgZnVuY3Rpb25zIGlmIGFueSB0ZW1wbGF0ZSBleHBhbnNpb24gdXNlcyBpdApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkocmV2aXNp
b24gMjc3NDQwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NzE3LDI0ICs5NzE3LDIwIEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6dGFnRm9yKFZpcnR1YWxSZWdpc3RlcihDYWxs
RnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykpKTsKIAogICAgICAgICAgICAg
ICAgIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvID0gaml0LmNvZGVCbG9jaygpLT5hZGRDYWxs
TGlua0luZm8obm9kZS0+b3JpZ2luLnNlbWFudGljKTsKKyAgICAgICAgICAgICAgICBjYWxsTGlu
a0luZm8tPnNldFVwQ2FsbCgKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+b3AoKSA9PSBDb25z
dHJ1Y3QgPyBDYWxsTGlua0luZm86OkNvbnN0cnVjdCA6IENhbGxMaW5rSW5mbzo6Q2FsbCwgR1BS
SW5mbzo6cmVnVDApOwogCi0gICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpEYXRhTGFiZWxQ
dHIgdGFyZ2V0VG9DaGVjazsKLSAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgc2xv
d1BhdGggPSBqaXQuYnJhbmNoUHRyV2l0aFBhdGNoKAotICAgICAgICAgICAgICAgICAgICBDQ2Fs
bEhlbHBlcnM6Ok5vdEVxdWFsLCBHUFJJbmZvOjpyZWdUMCwgdGFyZ2V0VG9DaGVjaywKLSAgICAg
ICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG51bGxwdHIpKTsKLQot
ICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBmYXN0Q2FsbCA9IGppdC5uZWFyQ2Fs
bCgpOworICAgICAgICAgICAgICAgIGF1dG8gc2xvd1BhdGggPSBjYWxsTGlua0luZm8tPmVtaXRG
YXN0UGF0aChqaXQsIEdQUkluZm86OnJlZ1QwLCBJbnZhbGlkR1BSUmVnLCBDYWxsTGlua0luZm86
OlVzZURhdGFJQzo6Tm8pOwogICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBkb25l
ID0gaml0Lmp1bXAoKTsKIAogICAgICAgICAgICAgICAgIHNsb3dQYXRoLmxpbmsoJmppdCk7Ci0K
LSAgICAgICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoY2Fs
bExpbmtJbmZvKSwgR1BSSW5mbzo6cmVnVDIpOworICAgICAgICAgICAgICAgIGF1dG8gc2xvd1Bh
dGhTdGFydCA9IGppdC5sYWJlbCgpOwogICAgICAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVs
cGVyczo6VHJ1c3RlZEltbVB0cihqaXQuY29kZUJsb2NrKCktPmdsb2JhbE9iamVjdEZvcihub2Rl
LT5vcmlnaW4uc2VtYW50aWMpKSwgR1BSSW5mbzo6cmVnVDMpOwotICAgICAgICAgICAgICAgIEND
YWxsSGVscGVyczo6Q2FsbCBzbG93Q2FsbCA9IGppdC5uZWFyQ2FsbCgpOworICAgICAgICAgICAg
ICAgIGNhbGxMaW5rSW5mby0+ZW1pdFNsb3dQYXRoKCp2bSwgaml0KTsKKwogICAgICAgICAgICAg
ICAgIGRvbmUubGluaygmaml0KTsKIAotICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0
VXBDYWxsKAotICAgICAgICAgICAgICAgICAgICBub2RlLT5vcCgpID09IENvbnN0cnVjdCA/IENh
bGxMaW5rSW5mbzo6Q29uc3RydWN0IDogQ2FsbExpbmtJbmZvOjpDYWxsLCBHUFJJbmZvOjpyZWdU
MCk7CisgICAgICAgICAgICAgICAgYXV0byBkb25lTG9jYXRpb24gPSBqaXQubGFiZWwoKTsKIAog
ICAgICAgICAgICAgICAgIGppdC5hZGRQdHIoCiAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVs
cGVyczo6VHJ1c3RlZEltbTMyKC1wYXJhbXMucHJvYygpLmZyYW1lU2l6ZSgpKSwKQEAgLTk3NDIs
MTMgKzk3MzgsOSBAQCBwcml2YXRlOgogCiAgICAgICAgICAgICAgICAgaml0LmFkZExpbmtUYXNr
KAogICAgICAgICAgICAgICAgICAgICBbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKSVRUaHVua1B0clRh
Zz4gbGlua0NhbGwgPSB2bS0+Z2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5jb2Rl
KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoc2xvd0NhbGwsIEZ1
bmN0aW9uUHRyPEpJVFRodW5rUHRyVGFnPihsaW5rQ2FsbCkpOwotCi0gICAgICAgICAgICAgICAg
ICAgICAgICBjYWxsTGlua0luZm8tPnNldENhbGxMb2NhdGlvbnMoCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4obGlua0J1ZmZl
ci5sb2NhdGlvbk9mTmVhckNhbGw8SlNJbnRlcm5hbFB0clRhZz4oc2xvd0NhbGwpKSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFn
PihsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4odGFyZ2V0VG9DaGVjaykp
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJD
YWxsPEpTSW50ZXJuYWxQdHJUYWc+KGZhc3RDYWxsKSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBjYWxsTGlua0luZm8tPnNldENvZGVMb2NhdGlvbnMoCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KHNsb3dQYXRoU3Rh
cnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZjxK
U0ludGVybmFsUHRyVGFnPihkb25lTG9jYXRpb24pKTsKICAgICAgICAgICAgICAgICAgICAgfSk7
CiAgICAgICAgICAgICB9KTsKIApAQCAtOTg1Nyw2MyArOTg0OSw1MCBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgICAgICAgICBzaHVmZmxlRGF0YS5zZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMoaml0
LmNvZGVCbG9jaygpKTsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAg
IENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvID0gaml0LmNvZGVCbG9jaygpLT5hZGRDYWxsTGlu
a0luZm8obm9kZS0+b3JpZ2luLnNlbWFudGljKTsKKyAgICAgICAgICAgICAgICAgICAgY2FsbExp
bmtJbmZvLT5zZXRVcENhbGwoQ2FsbExpbmtJbmZvOjpEaXJlY3RUYWlsQ2FsbCwgSW52YWxpZEdQ
UlJlZyk7CiAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBDQ2FsbEhl
bHBlcnM6OlBhdGNoYWJsZUp1bXAgcGF0Y2hhYmxlSnVtcCA9IGppdC5wYXRjaGFibGVKdW1wKCk7
CiAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6TGFiZWwgbWFpblBhdGggPSBqaXQu
bGFiZWwoKTsKLSAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIGppdC5z
dG9yZTMyKAogICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
MzIoY2FsbFNpdGVJbmRleC5iaXRzKCkpLAogICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxI
ZWxwZXJzOjp0YWdGb3IoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzKSkpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAg
ICBjYWxsTGlua0luZm8tPnNldEZyYW1lU2h1ZmZsZURhdGEoc2h1ZmZsZURhdGEpOwotICAgICAg
ICAgICAgICAgICAgICBDYWxsRnJhbWVTaHVmZmxlcihqaXQsIHNodWZmbGVEYXRhKS5wcmVwYXJl
Rm9yVGFpbENhbGwoKTsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAg
IENDYWxsSGVscGVyczo6Q2FsbCBjYWxsID0gaml0Lm5lYXJUYWlsQ2FsbCgpOworICAgICAgICAg
ICAgICAgICAgICBjYWxsTGlua0luZm8tPmVtaXREaXJlY3RUYWlsQ2FsbEZhc3RQYXRoKGppdCwg
WyZdIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0RnJhbWVTaHVm
ZmxlRGF0YShzaHVmZmxlRGF0YSk7CisgICAgICAgICAgICAgICAgICAgICAgICBDYWxsRnJhbWVT
aHVmZmxlcihqaXQsIHNodWZmbGVEYXRhKS5wcmVwYXJlRm9yVGFpbENhbGwoKTsKKyAgICAgICAg
ICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAg
ICBqaXQuYWJvcnRXaXRoUmVhc29uKEpJVERpZFJldHVybkZyb21UYWlsQ2FsbCk7CiAgICAgICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkxhYmVsIHNs
b3dQYXRoID0gaml0LmxhYmVsKCk7Ci0gICAgICAgICAgICAgICAgICAgIHBhdGNoYWJsZUp1bXAu
bV9qdW1wLmxpbmtUbyhzbG93UGF0aCwgJmppdCk7CiAgICAgICAgICAgICAgICAgICAgIGNhbGxP
cGVyYXRpb24oCiAgICAgICAgICAgICAgICAgICAgICAgICAqc3RhdGUsIHRvU2F2ZSwgaml0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+b3JpZ2luLnNlbWFudGljLCBleGNlcHRpb25z
LmdldCgpLCBvcGVyYXRpb25MaW5rRGlyZWN0Q2FsbCwKICAgICAgICAgICAgICAgICAgICAgICAg
IEludmFsaWRHUFJSZWcsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihjYWxsTGlua0luZm8p
LCBjYWxsZWVHUFIpLmNhbGwoKTsKICAgICAgICAgICAgICAgICAgICAgaml0Lmp1bXAoKS5saW5r
VG8obWFpblBhdGgsICZqaXQpOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAg
ICAgICAgY2FsbExpbmtJbmZvLT5zZXRVcENhbGwoQ2FsbExpbmtJbmZvOjpEaXJlY3RUYWlsQ2Fs
bCwgSW52YWxpZEdQUlJlZyk7CiAgICAgICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0
RXhlY3V0YWJsZUR1cmluZ0NvbXBpbGF0aW9uKGV4ZWN1dGFibGUpOwogICAgICAgICAgICAgICAg
ICAgICBpZiAobnVtQWxsb2NhdGVkQXJncyA+IG51bVBhc3NlZEFyZ3MpCiAgICAgICAgICAgICAg
ICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldE1heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
KG51bUFsbG9jYXRlZEFyZ3MpOwogICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAg
ICAgICAgaml0LmFkZExpbmtUYXNrKAotICAgICAgICAgICAgICAgICAgICAgICAgWz1dIChMaW5r
QnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29kZUxv
Y2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gcGF0Y2hhYmxlSnVtcExvY2F0aW9uID0gbGlu
a0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KHBhdGNoYWJsZUp1bXApOwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIENvZGVMb2NhdGlvbk5lYXJDYWxsPEpTSW50ZXJuYWxQ
dHJUYWc+IGNhbGxMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPEpTSW50
ZXJuYWxQdHJUYWc+KGNhbGwpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvZGVMb2Nh
dGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IHNsb3dQYXRoTG9jYXRpb24gPSBsaW5rQnVmZmVy
LmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oc2xvd1BhdGgpOwotCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRDYWxsTG9jYXRpb25zKAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBwYXRjaGFibGVKdW1wTG9jYXRpb24sCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoTG9jYXRpb24sCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNhbGxMb2NhdGlvbik7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9
KTsKKyAgICAgICAgICAgICAgICAgICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYg
bGlua0J1ZmZlcikgeworICAgICAgICAgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRD
b2RlTG9jYXRpb25zKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubG9j
YXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihzbG93UGF0aCksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4oKSk7CisgICAgICAg
ICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIENhbGxMaW5rSW5mbyog
Y2FsbExpbmtJbmZvID0gaml0LmNvZGVCbG9jaygpLT5hZGRDYWxsTGlua0luZm8obm9kZS0+b3Jp
Z2luLnNlbWFudGljKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBDQ2FsbEhl
bHBlcnM6OkxhYmVsIG1haW5QYXRoID0gaml0LmxhYmVsKCk7CisgICAgICAgICAgICAgICAgY2Fs
bExpbmtJbmZvLT5zZXRVcENhbGwoCisgICAgICAgICAgICAgICAgICAgIGlzQ29uc3RydWN0ID8g
Q2FsbExpbmtJbmZvOjpEaXJlY3RDb25zdHJ1Y3QgOiBDYWxsTGlua0luZm86OkRpcmVjdENhbGws
IEludmFsaWRHUFJSZWcpOwogCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpMYWJlbCBt
YWluUGF0aCA9IGppdC5sYWJlbCgpOwogICAgICAgICAgICAgICAgIGppdC5zdG9yZTMyKAogICAg
ICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihjYWxsU2l0ZUluZGV4
LmJpdHMoKSksCiAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6dGFnRm9yKFZpcnR1
YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykpKTsK
LSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2Fs
bCA9IGppdC5uZWFyQ2FsbCgpOworICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+ZW1pdERp
cmVjdEZhc3RQYXRoKGppdCk7CiAgICAgICAgICAgICAgICAgaml0LmFkZFB0cigKICAgICAgICAg
ICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoLXBhcmFtcy5wcm9jKCkuZnJh
bWVTaXplKCkpLAogICAgICAgICAgICAgICAgICAgICBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rl
ciwgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgICAgICAgICAgICAg
Ci0gICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRVcENhbGwoCi0gICAgICAgICAgICAg
ICAgICAgIGlzQ29uc3RydWN0ID8gQ2FsbExpbmtJbmZvOjpEaXJlY3RDb25zdHJ1Y3QgOiBDYWxs
TGlua0luZm86OkRpcmVjdENhbGwsIEludmFsaWRHUFJSZWcpOwogICAgICAgICAgICAgICAgIGNh
bGxMaW5rSW5mby0+c2V0RXhlY3V0YWJsZUR1cmluZ0NvbXBpbGF0aW9uKGV4ZWN1dGFibGUpOwog
ICAgICAgICAgICAgICAgIGlmIChudW1BbGxvY2F0ZWRBcmdzID4gbnVtUGFzc2VkQXJncykKICAg
ICAgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRNYXhBcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpcyhudW1BbGxvY2F0ZWRBcmdzKTsKQEAgLTk5MzUsMTUgKzk5MTQsOSBAQCBwcml2YXRl
OgogICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICBqaXQu
YWRkTGlua1Rhc2soCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWz1dIChMaW5rQnVmZmVy
JiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvZGVMb2Nh
dGlvbk5lYXJDYWxsPEpTSW50ZXJuYWxQdHJUYWc+IGNhbGxMb2NhdGlvbiA9IGxpbmtCdWZmZXIu
bG9jYXRpb25PZk5lYXJDYWxsPEpTSW50ZXJuYWxQdHJUYWc+KGNhbGwpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBz
bG93UGF0aExvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+
KHNsb3dQYXRoKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVy
LmxpbmsoY2FsbCwgc2xvd1BhdGhMb2NhdGlvbik7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRDYWxsTG9jYXRpb25zKAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4o
KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoTG9jYXRpb24s
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsTG9jYXRpb24pOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldENvZGVMb2NhdGlv
bnMoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0
aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oc2xvd1BhdGgpLCAKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+KCkpOwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgICB9KTsK
ICAgICAgICAgICAgIH0pOwpAQCAtMTAwMzQsNDAgKzEwMDA3LDMwIEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICAgICAgc2h1ZmZsZURhdGEuc2V0dXBDYWxsZWVTYXZlUmVnaXN0ZXJzKGppdC5jb2Rl
QmxvY2soKSk7CiAKICAgICAgICAgICAgICAgICBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbyA9
IGppdC5jb2RlQmxvY2soKS0+YWRkQ2FsbExpbmtJbmZvKGNvZGVPcmlnaW4pOworICAgICAgICAg
ICAgICAgIGNhbGxMaW5rSW5mby0+c2V0VXBDYWxsKENhbGxMaW5rSW5mbzo6VGFpbENhbGwsIEdQ
UkluZm86OnJlZ1QwKTsKIAotICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6RGF0YUxhYmVs
UHRyIHRhcmdldFRvQ2hlY2s7Ci0gICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIHNs
b3dQYXRoID0gaml0LmJyYW5jaFB0cldpdGhQYXRjaCgKLSAgICAgICAgICAgICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpOb3RFcXVhbCwgR1BSSW5mbzo6cmVnVDAsIHRhcmdldFRvQ2hlY2ssCi0gICAg
ICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihudWxscHRyKSk7Ci0K
LSAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldEZyYW1lU2h1ZmZsZURhdGEoc2h1ZmZs
ZURhdGEpOwotICAgICAgICAgICAgICAgIENhbGxGcmFtZVNodWZmbGVyKGppdCwgc2h1ZmZsZURh
dGEpLnByZXBhcmVGb3JUYWlsQ2FsbCgpOwotCi0gICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJz
OjpDYWxsIGZhc3RDYWxsID0gaml0Lm5lYXJUYWlsQ2FsbCgpOworICAgICAgICAgICAgICAgIGF1
dG8gc2xvd1BhdGggPSBjYWxsTGlua0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKGppdCwgR1BS
SW5mbzo6cmVnVDAsIEludmFsaWRHUFJSZWcsIENhbGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpObywg
WyZdIHsKKyAgICAgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRGcmFtZVNodWZmbGVE
YXRhKHNodWZmbGVEYXRhKTsKKyAgICAgICAgICAgICAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIo
aml0LCBzaHVmZmxlRGF0YSkucHJlcGFyZUZvclRhaWxDYWxsKCk7CisgICAgICAgICAgICAgICAg
fSk7CiAKICAgICAgICAgICAgICAgICBzbG93UGF0aC5saW5rKCZqaXQpOwotCisgICAgICAgICAg
ICAgICAgYXV0byBzbG93UGF0aFN0YXJ0ID0gaml0LmxhYmVsKCk7CiAgICAgICAgICAgICAgICAg
Q2FsbEZyYW1lU2h1ZmZsZXIgc2xvd1BhdGhTaHVmZmxlcihqaXQsIHNodWZmbGVEYXRhKTsKICAg
ICAgICAgICAgICAgICBzbG93UGF0aFNodWZmbGVyLnNldENhbGxlZUpTVmFsdWVSZWdzKEpTVmFs
dWVSZWdzKEdQUkluZm86OnJlZ1QwKSk7CiAgICAgICAgICAgICAgICAgc2xvd1BhdGhTaHVmZmxl
ci5wcmVwYXJlRm9yU2xvd1BhdGgoKTsKIAotICAgICAgICAgICAgICAgIGppdC5tb3ZlKENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbVB0cihjYWxsTGlua0luZm8pLCBHUFJJbmZvOjpyZWdUMik7CiAg
ICAgICAgICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGppdC5j
b2RlQmxvY2soKS0+Z2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBHUFJJ
bmZvOjpyZWdUMyk7Ci0gICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIHNsb3dDYWxs
ID0gaml0Lm5lYXJDYWxsKCk7CisgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5lbWl0U2xv
d1BhdGgoKnZtLCBqaXQpOwogCisgICAgICAgICAgICAgICAgYXV0byBkb25lTG9jYXRpb24gPSBq
aXQubGFiZWwoKTsKICAgICAgICAgICAgICAgICBqaXQuYWJvcnRXaXRoUmVhc29uKEpJVERpZFJl
dHVybkZyb21UYWlsQ2FsbCk7CiAKLSAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldFVw
Q2FsbChDYWxsTGlua0luZm86OlRhaWxDYWxsLCBHUFJJbmZvOjpyZWdUMCk7Ci0KICAgICAgICAg
ICAgICAgICBqaXQuYWRkTGlua1Rhc2soCiAgICAgICAgICAgICAgICAgICAgIFs9XSAoTGlua0J1
ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyPEpJVFRodW5rUHRyVGFnPiBsaW5rQ2FsbCA9IHZtLT5nZXRDVElTdHViKGxpbmtD
YWxsVGh1bmtHZW5lcmF0b3IpLmNvZGUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtC
dWZmZXIubGluayhzbG93Q2FsbCwgRnVuY3Rpb25QdHI8SklUVGh1bmtQdHJUYWc+KGxpbmtDYWxs
KSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0Q2FsbExvY2F0
aW9ucygKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0lu
dGVybmFsUHRyVGFnPihsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxKU0ludGVybmFsUHRy
VGFnPihzbG93Q2FsbCkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvZGVMb2NhdGlv
bkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+KGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFs
UHRyVGFnPih0YXJnZXRUb0NoZWNrKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlu
a0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8SlNJbnRlcm5hbFB0clRhZz4oZmFzdENhbGwpKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0Q29kZUxvY2F0aW9ucygK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRl
cm5hbFB0clRhZz4oc2xvd1BhdGhTdGFydCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KGRvbmVMb2NhdGlvbikpOwog
ICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIH0pOwogICAgIH0KQEAgLTEwMzIw
LDQwICsxMDI4MywzOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAg
ICAgICAgICAgICAgY2FsbFR5cGUgPSBDYWxsTGlua0luZm86OkNhbGxWYXJhcmdzOwogICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0VXBDYWxsKGNhbGxU
eXBlLCBHUFJJbmZvOjpyZWdUMCk7CisKICAgICAgICAgICAgICAgICBib29sIGlzVGFpbENhbGwg
PSBDYWxsTGlua0luZm86OmNhbGxNb2RlRm9yKGNhbGxUeXBlKSA9PSBDYWxsTW9kZTo6VGFpbDsK
LSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkRhdGFMYWJl
bFB0ciB0YXJnZXRUb0NoZWNrOwotICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBz
bG93UGF0aCA9IGppdC5icmFuY2hQdHJXaXRoUGF0Y2goCi0gICAgICAgICAgICAgICAgICAgIEND
YWxsSGVscGVyczo6Tm90RXF1YWwsIEdQUkluZm86OnJlZ1QwLCB0YXJnZXRUb0NoZWNrLAotICAg
ICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobnVsbHB0cikpOwot
ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBmYXN0
Q2FsbDsKKworICAgICAgICAgICAgICAgIEFTU0VSVCghdXNlZFJlZ2lzdGVycy5nZXQoR1BSSW5m
bzo6cmVnVDIpKTsgLy8gVXNlZCBvbiB0aGUgc2xvdyBwYXRoLgorCisgICAgICAgICAgICAgICAg
Q0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93UGF0aDsKICAgICAgICAgICAgICAgICBDQ2FsbEhl
bHBlcnM6Okp1bXAgZG9uZTsKLSAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBpZiAo
aXNUYWlsQ2FsbCkgewotICAgICAgICAgICAgICAgICAgICBqaXQuZW1pdFJlc3RvcmVDYWxsZWVT
YXZlcygpOwotICAgICAgICAgICAgICAgICAgICBqaXQucHJlcGFyZUZvclRhaWxDYWxsU2xvdygp
OwotICAgICAgICAgICAgICAgICAgICBmYXN0Q2FsbCA9IGppdC5uZWFyVGFpbENhbGwoKTsKKyAg
ICAgICAgICAgICAgICAgICAgc2xvd1BhdGggPSBjYWxsTGlua0luZm8tPmVtaXRUYWlsQ2FsbEZh
c3RQYXRoKGppdCwgR1BSSW5mbzo6cmVnVDAsIEludmFsaWRHUFJSZWcsIENhbGxMaW5rSW5mbzo6
VXNlRGF0YUlDOjpObywgWyZdIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGppdC5lbWl0UmVz
dG9yZUNhbGxlZVNhdmVzKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBqaXQucHJlcGFyZUZv
clRhaWxDYWxsU2xvdygpOworICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBmYXN0Q2FsbCA9IGppdC5uZWFyQ2FsbCgp
OworICAgICAgICAgICAgICAgICAgICBzbG93UGF0aCA9IGNhbGxMaW5rSW5mby0+ZW1pdEZhc3RQ
YXRoKGppdCwgR1BSSW5mbzo6cmVnVDAsIEludmFsaWRHUFJSZWcsIENhbGxMaW5rSW5mbzo6VXNl
RGF0YUlDOjpObyk7CiAgICAgICAgICAgICAgICAgICAgIGRvbmUgPSBqaXQuanVtcCgpOwogICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBzbG93UGF0
aC5saW5rKCZqaXQpOworICAgICAgICAgICAgICAgIGF1dG8gc2xvd1BhdGhTdGFydCA9IGppdC5s
YWJlbCgpOwogCiAgICAgICAgICAgICAgICAgaWYgKGlzVGFpbENhbGwpCiAgICAgICAgICAgICAg
ICAgICAgIGppdC5lbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7Ci0gICAgICAgICAgICAgICAgQVNT
RVJUKCF1c2VkUmVnaXN0ZXJzLmdldChHUFJJbmZvOjpyZWdUMikpOwotICAgICAgICAgICAgICAg
IGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihjYWxsTGlua0luZm8pLCBHUFJJ
bmZvOjpyZWdUMik7CiAgICAgICAgICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tUHRyKGppdC5jb2RlQmxvY2soKS0+Z2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5z
ZW1hbnRpYykpLCBHUFJJbmZvOjpyZWdUMyk7Ci0gICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJz
OjpDYWxsIHNsb3dDYWxsID0gaml0Lm5lYXJDYWxsKCk7CisgICAgICAgICAgICAgICAgY2FsbExp
bmtJbmZvLT5lbWl0U2xvd1BhdGgoKnZtLCBqaXQpOwogICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgICAgIGlmIChpc1RhaWxDYWxsKQogICAgICAgICAgICAgICAgICAgICBqaXQuYWJvcnRX
aXRoUmVhc29uKEpJVERpZFJldHVybkZyb21UYWlsQ2FsbCk7CiAgICAgICAgICAgICAgICAgZWxz
ZQogICAgICAgICAgICAgICAgICAgICBkb25lLmxpbmsoJmppdCk7Ci0gICAgICAgICAgICAgICAg
Ci0gICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRVcENhbGwoY2FsbFR5cGUsIEdQUklu
Zm86OnJlZ1QwKTsKKworICAgICAgICAgICAgICAgIGF1dG8gZG9uZUxvY2F0aW9uID0gaml0Lmxh
YmVsKCk7CiAKICAgICAgICAgICAgICAgICBqaXQuYWRkUHRyKAogICAgICAgICAgICAgICAgICAg
ICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigtb3JpZ2luYWxTdGFja0hlaWdodCksCkBAIC0x
MDM2MSwxMyArMTAzMjIsOSBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIAogICAgICAgICAg
ICAgICAgIGppdC5hZGRMaW5rVGFzaygKICAgICAgICAgICAgICAgICAgICAgWz1dIChMaW5rQnVm
ZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
ckNvZGVQdHI8SklUVGh1bmtQdHJUYWc+IGxpbmtDYWxsID0gdm0tPmdldENUSVN0dWIobGlua0Nh
bGxUaHVua0dlbmVyYXRvcikuY29kZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1
ZmZlci5saW5rKHNsb3dDYWxsLCBGdW5jdGlvblB0cjxKSVRUaHVua1B0clRhZz4obGlua0NhbGwp
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgY2Fs
bExpbmtJbmZvLT5zZXRDYWxsTG9jYXRpb25zKAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+KGxpbmtCdWZmZXIubG9jYXRpb25P
Zk5lYXJDYWxsPEpTSW50ZXJuYWxQdHJUYWc+KHNsb3dDYWxsKSksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4obGlua0J1ZmZl
ci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KHRhcmdldFRvQ2hlY2spKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxKU0ludGVy
bmFsUHRyVGFnPihmYXN0Q2FsbCkpOworICAgICAgICAgICAgICAgICAgICAgICAgY2FsbExpbmtJ
bmZvLT5zZXRDb2RlTG9jYXRpb25zKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtC
dWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihzbG93UGF0aFN0YXJ0KSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0
clRhZz4oZG9uZUxvY2F0aW9uKSk7CiAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAg
ICAgfSk7CiAKQEAgLTEwNjA3LDM5ICsxMDU2NCwzNiBAQCBwcml2YXRlOgogICAgICAgICAgICAg
ICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgY2FsbFR5cGUgPSBDYWxsTGlua0luZm86OkNh
bGxWYXJhcmdzOwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGJvb2wgaXNUYWls
Q2FsbCA9IENhbGxMaW5rSW5mbzo6Y2FsbE1vZGVGb3IoY2FsbFR5cGUpID09IENhbGxNb2RlOjpU
YWlsOworICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0VXBDYWxsKGNhbGxUeXBlLCBH
UFJJbmZvOjpyZWdUMCk7CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgQ0NhbGxI
ZWxwZXJzOjpEYXRhTGFiZWxQdHIgdGFyZ2V0VG9DaGVjazsKLSAgICAgICAgICAgICAgICBDQ2Fs
bEhlbHBlcnM6Okp1bXAgc2xvd1BhdGggPSBqaXQuYnJhbmNoUHRyV2l0aFBhdGNoKAotICAgICAg
ICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCBHUFJJbmZvOjpyZWdUMCwgdGFy
Z2V0VG9DaGVjaywKLSAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
UHRyKG51bGxwdHIpKTsKKyAgICAgICAgICAgICAgICBib29sIGlzVGFpbENhbGwgPSBDYWxsTGlu
a0luZm86OmNhbGxNb2RlRm9yKGNhbGxUeXBlKSA9PSBDYWxsTW9kZTo6VGFpbDsKICAgICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgZmFzdENhbGw7Cisg
ICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93UGF0aDsKICAgICAgICAg
ICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZG9uZTsKLSAgICAgICAgICAgICAgICAKICAgICAg
ICAgICAgICAgICBpZiAoaXNUYWlsQ2FsbCkgewotICAgICAgICAgICAgICAgICAgICBqaXQuZW1p
dFJlc3RvcmVDYWxsZWVTYXZlcygpOwotICAgICAgICAgICAgICAgICAgICBqaXQucHJlcGFyZUZv
clRhaWxDYWxsU2xvdygpOwotICAgICAgICAgICAgICAgICAgICBmYXN0Q2FsbCA9IGppdC5uZWFy
VGFpbENhbGwoKTsKKyAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGggPSBjYWxsTGlua0luZm8t
PmVtaXRUYWlsQ2FsbEZhc3RQYXRoKGppdCwgR1BSSW5mbzo6cmVnVDAsIEludmFsaWRHUFJSZWcs
IENhbGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpObywgWyZdIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGppdC5lbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBqaXQucHJlcGFyZUZvclRhaWxDYWxsU2xvdygpOworICAgICAgICAgICAgICAgICAgICB9KTsK
ICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBmYXN0Q2FsbCA9
IGppdC5uZWFyQ2FsbCgpOworICAgICAgICAgICAgICAgICAgICBzbG93UGF0aCA9IGNhbGxMaW5r
SW5mby0+ZW1pdEZhc3RQYXRoKGppdCwgR1BSSW5mbzo6cmVnVDAsIEludmFsaWRHUFJSZWcsIENh
bGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpObyk7CiAgICAgICAgICAgICAgICAgICAgIGRvbmUgPSBq
aXQuanVtcCgpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKICAgICAgICAg
ICAgICAgICBzbG93UGF0aC5saW5rKCZqaXQpOworICAgICAgICAgICAgICAgIGF1dG8gc2xvd1Bh
dGhTdGFydCA9IGppdC5sYWJlbCgpOwogCiAgICAgICAgICAgICAgICAgaWYgKGlzVGFpbENhbGwp
CiAgICAgICAgICAgICAgICAgICAgIGppdC5lbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7Ci0gICAg
ICAgICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGNhbGxMaW5r
SW5mbyksIEdQUkluZm86OnJlZ1QyKTsKICAgICAgICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW1QdHIoaml0LmNvZGVCbG9jaygpLT5nbG9iYWxPYmplY3RGb3Iobm9k
ZS0+b3JpZ2luLnNlbWFudGljKSksIEdQUkluZm86OnJlZ1QzKTsKLSAgICAgICAgICAgICAgICBD
Q2FsbEhlbHBlcnM6OkNhbGwgc2xvd0NhbGwgPSBqaXQubmVhckNhbGwoKTsKKyAgICAgICAgICAg
ICAgICBjYWxsTGlua0luZm8tPmVtaXRTbG93UGF0aCgqdm0sIGppdCk7CiAgICAgICAgICAgICAg
ICAgCiAgICAgICAgICAgICAgICAgaWYgKGlzVGFpbENhbGwpCiAgICAgICAgICAgICAgICAgICAg
IGppdC5hYm9ydFdpdGhSZWFzb24oSklURGlkUmV0dXJuRnJvbVRhaWxDYWxsKTsKICAgICAgICAg
ICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIGRvbmUubGluaygmaml0KTsKLSAgICAg
ICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldFVwQ2FsbChjYWxs
VHlwZSwgR1BSSW5mbzo6cmVnVDApOworCisgICAgICAgICAgICAgICAgYXV0byBkb25lTG9jYXRp
b24gPSBqaXQubGFiZWwoKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBqaXQu
YWRkUHRyKAogICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigt
b3JpZ2luYWxTdGFja0hlaWdodCksCkBAIC0xMDY0NywxMyArMTA2MDEsOSBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGppdC5hZGRMaW5rVGFzaygKICAgICAg
ICAgICAgICAgICAgICAgWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SklUVGh1bmtQdHJUYWc+IGxpbmtD
YWxsID0gdm0tPmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcikuY29kZSgpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKHNsb3dDYWxsLCBGdW5jdGlvblB0
cjxKSVRUaHVua1B0clRhZz4obGlua0NhbGwpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRDYWxsTG9jYXRpb25zKAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQ
dHJUYWc+KGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPEpTSW50ZXJuYWxQdHJUYWc+KHNs
b3dDYWxsKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8
SlNJbnRlcm5hbFB0clRhZz4obGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+
KHRhcmdldFRvQ2hlY2spKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVy
LmxvY2F0aW9uT2ZOZWFyQ2FsbDxKU0ludGVybmFsUHRyVGFnPihmYXN0Q2FsbCkpOworICAgICAg
ICAgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRDb2RlTG9jYXRpb25zKAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRy
VGFnPihzbG93UGF0aFN0YXJ0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVm
ZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oZG9uZUxvY2F0aW9uKSk7CiAgICAgICAg
ICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgfSk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5jcHAJKHJldmlzaW9uIDI3NzQ0MCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NzEsNiArNzEsMTYgQEAgdm9pZCBDQ2FsbEhlbHBlcnM6OmVuc3VyZVNoYWRvd0NoaWNrZW5QYQog
ICAgIHN0b3JlUHRyKHNjcmF0Y2gyLCBBZGRyZXNzKHNjcmF0Y2gxTm9uQXJnR1BSKSk7CiB9CiAK
K3ZvaWQgQ0NhbGxIZWxwZXJzOjplbWl0SklUQ29kZU92ZXIoTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
PEpTSW50ZXJuYWxQdHJUYWc+IGNvZGUsIFdURjo6RnVuY3Rpb248dm9pZChDQ2FsbEhlbHBlcnMm
KT4gZW1pdENvZGUsIGNvbnN0IGNoYXIqIGRlc2NyaXB0aW9uKQoreworICAgIENDYWxsSGVscGVy
cyBqaXQ7CisgICAgZW1pdENvZGUoaml0KTsKKworICAgIGNvbnN0ZXhwciBib29sIG5lZWRzQnJh
bmNoQ29tcGFjdGlvbiA9IGZhbHNlOworICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcihqaXQsIGNv
ZGUsIGppdC5tX2Fzc2VtYmxlci5idWZmZXIoKS5jb2RlU2l6ZSgpLCBKSVRDb21waWxhdGlvbk11
c3RTdWNjZWVkLCBuZWVkc0JyYW5jaENvbXBhY3Rpb24pOworICAgIEZJTkFMSVpFX0NPREUobGlu
a0J1ZmZlciwgTm9QdHJUYWcsIGRlc2NyaXB0aW9uKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlND
CiAKICNlbmRpZiAvLyBFTkFCTEUoSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9DQ2FsbEhlbHBlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0NDYWxsSGVscGVycy5oCShyZXZpc2lvbiAyNzc0NDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0NDYWxsSGVscGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC04MTgsNiArODE4LDggQEAg
cHVibGljOgogICAgIHZvaWQgbG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoR1BSUmVnIHNoYWRv
d1BhY2tldCwgSlNWYWx1ZVJlZ3MgdGhpc1JlZ3MsIEdQUlJlZyBzY29wZSwgQ29kZUJsb2NrKiwg
Q2FsbFNpdGVJbmRleCk7CiAgICAgLy8gTGVhdmVzIGJlaGluZCBhIHBvaW50ZXIgdG8gdGhlIFBh
Y2tldCB3ZSBzaG91bGQgd3JpdGUgdG8gaW4gc2hhZG93UGFja2V0LgogICAgIHZvaWQgZW5zdXJl
U2hhZG93Q2hpY2tlblBhY2tldChWTSYsIEdQUlJlZyBzaGFkb3dQYWNrZXQsIEdQUlJlZyBzY3Jh
dGNoMU5vbkFyZ0dQUiwgR1BSUmVnIHNjcmF0Y2gyKTsKKworICAgIHN0YXRpYyB2b2lkIGVtaXRK
SVRDb2RlT3ZlcihNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNJbnRlcm5hbFB0clRhZz4gY29kZSwg
V1RGOjpGdW5jdGlvbjx2b2lkKENDYWxsSGVscGVycyYpPiwgY29uc3QgY2hhciopOwogfTsKIAog
fSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCShyZXZp
c2lvbiAyNzc0NDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTk1OSwxMCArOTU5LDkgQEAgQ29tcGlsYXRpb25SZXN1bHQgSklUOjpsaW5r
KCkKIAogICAgIGZvciAoYXV0byYgY29tcGlsYXRpb25JbmZvIDogbV9jYWxsQ29tcGlsYXRpb25J
bmZvKSB7CiAgICAgICAgIENhbGxMaW5rSW5mbyYgaW5mbyA9ICpjb21waWxhdGlvbkluZm8uY2Fs
bExpbmtJbmZvOwotICAgICAgICBpbmZvLnNldENhbGxMb2NhdGlvbnMoCi0gICAgICAgICAgICBD
b2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPihwYXRjaEJ1ZmZlci5sb2NhdGlvbk9m
TmVhckNhbGw8SlNJbnRlcm5hbFB0clRhZz4oY29tcGlsYXRpb25JbmZvLmNhbGxSZXR1cm5Mb2Nh
dGlvbikpLAotICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4o
cGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihjb21waWxhdGlvbkluZm8u
aG90UGF0aEJlZ2luKSksCi0gICAgICAgICAgICBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mTmVhckNh
bGw8SlNJbnRlcm5hbFB0clRhZz4oY29tcGlsYXRpb25JbmZvLmhvdFBhdGhPdGhlcikpOworICAg
ICAgICBpbmZvLnNldENvZGVMb2NhdGlvbnMoCisgICAgICAgICAgICBwYXRjaEJ1ZmZlci5sb2Nh
dGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KGNvbXBpbGF0aW9uSW5mby5zbG93UGF0aFN0YXJ0KSwK
KyAgICAgICAgICAgIHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oY29t
cGlsYXRpb25JbmZvLmRvbmVMb2NhdGlvbikpOwogICAgIH0KIAogICAgIHsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVQuaAkocmV2aXNpb24gMjc3NDQwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVQuaAkod29ya2luZyBjb3B5KQpAQCAtMTc1LDkgKzE3NSw4IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgIH07CiAKICAgICBzdHJ1Y3QgQ2FsbENvbXBpbGF0aW9uSW5mbyB7Ci0gICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpEYXRhTGFiZWxQdHIgaG90UGF0aEJlZ2luOwotICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6Q2FsbCBob3RQYXRoT3RoZXI7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpDYWxsIGNhbGxSZXR1cm5Mb2NhdGlvbjsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVs
IHNsb3dQYXRoU3RhcnQ7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBkb25lTG9jYXRp
b247CiAgICAgICAgIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvOwogICAgIH07CiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbDMyXzY0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwzMl82NC5jcHAJKHJldmlzaW9uIDI3
NzQ0MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbDMyXzY0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzUwLDcgKzM1MCw3IEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsU2xv
d0Nhc2UoY29uc3QgSW4KICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsIHx8IG9wY29k
ZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9m
b3J3YXJkX2FyZ3VtZW50cykKICAgICAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwogCi0g
ICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5jYWxsUmV0dXJuTG9j
YXRpb24gPSBlbWl0TmFrZWROZWFyQ2FsbChtX3ZtLT5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtH
ZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CisgICAgbV9jYWxsQ29tcGlsYXRp
b25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5zbG93Q2FsbFJldHVybkxvY2F0aW9uID0gZW1pdE5h
a2VkTmVhckNhbGwobV92bS0+Z2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5yZXRh
Z2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCiAgICAgaWYgKG9wY29kZUlEID09IG9wX3RhaWxfY2Fs
bCB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfdmFyYXJncykgewogICAgICAgICBhYm9ydFdp
dGhSZWFzb24oSklURGlkUmV0dXJuRnJvbVRhaWxDYWxsKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRDYWxsLmNwcAkocmV2aXNpb24gMjc3NDQwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRDYWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg4LDggKzE4OCwxNCBA
QCBib29sIEpJVDo6Y29tcGlsZVRhaWxDYWxsKGNvbnN0IE9wVGFpbENhCiAgICAgICAgIFZhbHVl
UmVjb3Zlcnk6OmluR1BSKHJlZ1QwLCBEYXRhRm9ybWF0SlMpOwogICAgIHNodWZmbGVEYXRhLnNl
dHVwQ2FsbGVlU2F2ZVJlZ2lzdGVycyhtX2NvZGVCbG9jayk7CiAgICAgaW5mby0+c2V0RnJhbWVT
aHVmZmxlRGF0YShzaHVmZmxlRGF0YSk7Ci0gICAgQ2FsbEZyYW1lU2h1ZmZsZXIoKnRoaXMsIHNo
dWZmbGVEYXRhKS5wcmVwYXJlRm9yVGFpbENhbGwoKTsKLSAgICBtX2NhbGxDb21waWxhdGlvbklu
Zm9bY2FsbExpbmtJbmZvSW5kZXhdLmhvdFBhdGhPdGhlciA9IGVtaXROYWtlZE5lYXJUYWlsQ2Fs
bCgpOworCisgICAgSnVtcExpc3Qgc2xvd1BhdGhzID0gaW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBh
dGgoKnRoaXMsIHJlZ1QwLCByZWdUMiwgQ2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6OlllcywgWyZd
IHsKKyAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIoKnRoaXMsIHNodWZmbGVEYXRhKS5wcmVwYXJl
Rm9yVGFpbENhbGwoKTsKKyAgICB9KTsKKyAgICBhZGRTbG93Q2FzZShzbG93UGF0aHMpOworICAg
IGF1dG8gZG9uZUxvY2F0aW9uID0gbGFiZWwoKTsKKyAgICBtX2NhbGxDb21waWxhdGlvbkluZm9b
Y2FsbExpbmtJbmZvSW5kZXhdLmRvbmVMb2NhdGlvbiA9IGRvbmVMb2NhdGlvbjsKKyAgICAKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMjI4LDI4ICsyMzQsMzAgQEAgdm9pZCBKSVQ6OmNvbXBp
bGVPcENhbGwoY29uc3QgSW5zdHJ1Y3RpbwogICAgIGlmIChjb21waWxlQ2FsbEV2YWwoYnl0ZWNv
ZGUpKQogICAgICAgICByZXR1cm47CiAKLSAgICBEYXRhTGFiZWxQdHIgYWRkcmVzc09mTGlua2Vk
RnVuY3Rpb25DaGVjazsKLSAgICBKdW1wIHNsb3dDYXNlID0gYnJhbmNoUHRyV2l0aFBhdGNoKE5v
dEVxdWFsLCByZWdUMCwgYWRkcmVzc09mTGlua2VkRnVuY3Rpb25DaGVjaywgVHJ1c3RlZEltbVB0
cihudWxscHRyKSk7Ci0gICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2UpOwotCiAgICAgQVNTRVJUKG1f
Y2FsbENvbXBpbGF0aW9uSW5mby5zaXplKCkgPT0gY2FsbExpbmtJbmZvSW5kZXgpOwogICAgIGlu
Zm8tPnNldFVwQ2FsbChDYWxsTGlua0luZm86OmNhbGxUeXBlRm9yKG9wY29kZUlEKSwgcmVnVDAp
OwogICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mby5hcHBlbmQoQ2FsbENvbXBpbGF0aW9uSW5mbygp
KTsKLSAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmhvdFBhdGhC
ZWdpbiA9IGFkZHJlc3NPZkxpbmtlZEZ1bmN0aW9uQ2hlY2s7CiAgICAgbV9jYWxsQ29tcGlsYXRp
b25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5jYWxsTGlua0luZm8gPSBpbmZvOwogCi0gICAgaWYg
KGNvbXBpbGVUYWlsQ2FsbChieXRlY29kZSwgaW5mbywgY2FsbExpbmtJbmZvSW5kZXgpKSB7Cisg
ICAgaWYgKGNvbXBpbGVUYWlsQ2FsbChieXRlY29kZSwgaW5mbywgY2FsbExpbmtJbmZvSW5kZXgp
KQogICAgICAgICByZXR1cm47Ci0gICAgfQogCiAgICAgaWYgKG9wY29kZUlEID09IG9wX3RhaWxf
Y2FsbF92YXJhcmdzIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50
cykgewotICAgICAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7Ci0gICAgICAgIHByZXBhcmVG
b3JUYWlsQ2FsbFNsb3coKTsKLSAgICAgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5r
SW5mb0luZGV4XS5ob3RQYXRoT3RoZXIgPSBlbWl0TmFrZWROZWFyVGFpbENhbGwoKTsKKyAgICAg
ICAgSnVtcExpc3Qgc2xvd1BhdGhzID0gaW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoKnRoaXMs
IHJlZ1QwLCByZWdUMiwgQ2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6OlllcywgWyZdIHsKKyAgICAg
ICAgICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKKyAgICAgICAgICAgIHByZXBhcmVGb3JU
YWlsQ2FsbFNsb3coR1BSSW5mbzo6cmVnVDIpOworICAgICAgICB9KTsKKyAgICAgICAgYWRkU2xv
d0Nhc2Uoc2xvd1BhdGhzKTsKKyAgICAgICAgYXV0byBkb25lTG9jYXRpb24gPSBsYWJlbCgpOwor
ICAgICAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmRvbmVMb2Nh
dGlvbiA9IGRvbmVMb2NhdGlvbjsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIG1fY2Fs
bENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uaG90UGF0aE90aGVyID0gZW1pdE5h
a2VkTmVhckNhbGwoKTsKKyAgICBKdW1wTGlzdCBzbG93UGF0aHMgPSBpbmZvLT5lbWl0RmFzdFBh
dGgoKnRoaXMsIHJlZ1QwLCByZWdUMiwgQ2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6Olllcyk7Cisg
ICAgYXV0byBkb25lTG9jYXRpb24gPSBsYWJlbCgpOworICAgIGFkZFNsb3dDYXNlKHNsb3dQYXRo
cyk7CisKKyAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmRvbmVM
b2NhdGlvbiA9IGRvbmVMb2NhdGlvbjsKIAogICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQ
b2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJh
bWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAgIGNoZWNrU3RhY2tQb2ludGVy
QWxpZ25tZW50KCk7CkBAIC0yNjUsMTQgKzI3MywxMyBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2Fs
bFNsb3dDYXNlKGNvbnN0IEluCiAKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCisgICAg
bV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5zbG93UGF0aFN0YXJ0ID0g
bGFiZWwoKTsKKwogICAgIGlmIChvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGwgfHwgb3Bjb2RlSUQg
PT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX2Zvcndh
cmRfYXJndW1lbnRzKQogICAgICAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CiAKICAgICBt
b3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDMpOwot
ICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZv
SW5kZXhdLmNhbGxMaW5rSW5mbyksIHJlZ1QyKTsKLQotICAgIG1fY2FsbENvbXBpbGF0aW9uSW5m
b1tjYWxsTGlua0luZm9JbmRleF0uY2FsbFJldHVybkxvY2F0aW9uID0KLSAgICAgICAgZW1pdE5h
a2VkTmVhckNhbGwobV92bS0+Z2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5yZXRh
Z2dlZENvZGU8Tm9QdHJUYWc+KCkpOworICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlu
a0luZm9JbmRleF0uY2FsbExpbmtJbmZvLT5lbWl0U2xvd1BhdGgoKm1fdm0sICp0aGlzKTsKIAog
ICAgIGlmIChvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGwgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9j
YWxsX3ZhcmFyZ3MpIHsKICAgICAgICAgYWJvcnRXaXRoUmVhc29uKEpJVERpZFJldHVybkZyb21U
YWlsQ2FsbCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9u
cy5jcHAJKHJldmlzaW9uIDI3NzQ0MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
T3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzODYsNyArMTM4Niw3IEBAIEpTQ19E
RUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25MaW5rQ2EKICAgICAgICAgICAgIGlmICghY2Fs
bExpbmtJbmZvLT5zZWVuT25jZSgpKQogICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0
U2VlbigpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGxpbmtGb3Iodm0sIGNh
bGxlZUZyYW1lLCAqY2FsbExpbmtJbmZvLCBudWxscHRyLCBpbnRlcm5hbEZ1bmN0aW9uLCBjb2Rl
UHRyKTsKKyAgICAgICAgICAgICAgICBsaW5rTW9ub21vcnBoaWNDYWxsKHZtLCBjYWxsZWVGcmFt
ZSwgKmNhbGxMaW5rSW5mbywgbnVsbHB0ciwgaW50ZXJuYWxGdW5jdGlvbiwgY29kZVB0cik7CiAK
ICAgICAgICAgICAgIHZvaWQqIGxpbmtlZFRhcmdldCA9IGNvZGVQdHIuZXhlY3V0YWJsZUFkZHJl
c3MoKTsKICAgICAgICAgICAgIHJldHVybiBlbmNvZGVSZXN1bHQobGlua2VkVGFyZ2V0LCByZWlu
dGVycHJldF9jYXN0PHZvaWQqPihjYWxsTGlua0luZm8tPmNhbGxNb2RlKCkgPT0gQ2FsbE1vZGU6
OlRhaWwgPyBSZXVzZVRoZUZyYW1lIDogS2VlcFRoZUZyYW1lKSk7CkBAIC0xNDM0LDcgKzE0MzQs
NyBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uTGlua0NhCiAgICAgaWYgKCFj
YWxsTGlua0luZm8tPnNlZW5PbmNlKCkpCiAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0U2Vlbigp
OwogICAgIGVsc2UKLSAgICAgICAgbGlua0Zvcih2bSwgY2FsbGVlRnJhbWUsICpjYWxsTGlua0lu
Zm8sIGNvZGVCbG9jaywgY2FsbGVlLCBjb2RlUHRyKTsKKyAgICAgICAgbGlua01vbm9tb3JwaGlj
Q2FsbCh2bSwgY2FsbGVlRnJhbWUsICpjYWxsTGlua0luZm8sIGNvZGVCbG9jaywgY2FsbGVlLCBj
b2RlUHRyKTsKIAogICAgIHJldHVybiBlbmNvZGVSZXN1bHQoY29kZVB0ci5leGVjdXRhYmxlQWRk
cmVzcygpLCByZWludGVycHJldF9jYXN0PHZvaWQqPihjYWxsTGlua0luZm8tPmNhbGxNb2RlKCkg
PT0gQ2FsbE1vZGU6OlRhaWwgPyBSZXVzZVRoZUZyYW1lIDogS2VlcFRoZUZyYW1lKSk7CiB9Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1BvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5l
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1BvbHltb3JwaGlj
Q2FsbFN0dWJSb3V0aW5lLmNwcAkocmV2aXNpb24gMjc3NDQwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9Qb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQ1LDcgKzQ1LDcgQEAgUG9seW1vcnBoaWNDYWxsTm9kZTo6flBvbHltb3JwaGljQ2FsbE5v
ZAogdm9pZCBQb2x5bW9ycGhpY0NhbGxOb2RlOjp1bmxpbmsoVk0mIHZtKQogewogICAgIGlmICht
X2NhbGxMaW5rSW5mbykgewotICAgICAgICBkYXRhTG9nTG5JZihPcHRpb25zOjpkdW1wRGlzYXNz
ZW1ibHkoKSwgIlVubGlua2luZyBwb2x5bW9ycGhpYyBjYWxsIGF0ICIsIG1fY2FsbExpbmtJbmZv
LT5jYWxsUmV0dXJuTG9jYXRpb24oKSwgIiwgYmMjIiwgbV9jYWxsTGlua0luZm8tPmNvZGVPcmln
aW4oKS5ieXRlY29kZUluZGV4KCkpOworICAgICAgICBkYXRhTG9nTG5JZihPcHRpb25zOjpkdW1w
RGlzYXNzZW1ibHkoKSwgIlVubGlua2luZyBwb2x5bW9ycGhpYyBjYWxsIGF0ICIsIG1fY2FsbExp
bmtJbmZvLT5kb25lTG9jYXRpb24oKSwgIiwgYmMjIiwgbV9jYWxsTGlua0luZm8tPmNvZGVPcmln
aW4oKS5ieXRlY29kZUluZGV4KCkpOwogICAgICAgICBtX2NhbGxMaW5rSW5mby0+dW5saW5rKHZt
KTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAkocmV2
aXNpb24gMjc3NDQwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsOCBAQAogCiAjaWYgRU5BQkxFKEpJVCkKIAorI2lu
Y2x1ZGUgIk1hY3JvQXNzZW1ibGVyUHJpbnRlci5oIgorCiAjaW5jbHVkZSAiQmluYXJ5U3dpdGNo
LmgiCiAjaW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgiCiAjaW5jbHVkZSAiQ2FjaGVhYmxlSWRlbnRp
ZmllcklubGluZXMuaCIKQEAgLTExODgsMjAgKzExOTAsMjAgQEAgdm9pZCByZXBhdGNoSW5zdGFu
Y2VPZigKICAgICAgICAgZnRsVGh1bmtBd2FyZVJlcGF0Y2hDYWxsKGNvZGVCbG9jaywgc3R1Yklu
Zm8uc2xvd1BhdGhDYWxsTG9jYXRpb24sIG9wZXJhdGlvbkluc3RhbmNlT2ZHZW5lcmljKTsKIH0K
IAotc3RhdGljIHZvaWQgbGlua1Nsb3dGb3IoVk0mLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5m
bywgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiBjb2RlUmVmKQor
c3RhdGljIHZvaWQgbGlua1Nsb3dQYXRoVG8oVk0mLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5m
bywgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiBjb2RlUmVmKQog
ewotICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoTmVhckNhbGwoY2FsbExpbmtJbmZvLmNhbGxS
ZXR1cm5Mb2NhdGlvbigpLCBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4o
Y29kZVJlZi5jb2RlKCkpKTsKKyAgICBjYWxsTGlua0luZm8uc2V0U2xvd1BhdGhDYWxsRGVzdGlu
YXRpb24oY29kZVJlZi5jb2RlKCkudGVtcGxhdGUgcmV0YWdnZWQ8SlNFbnRyeVB0clRhZz4oKSk7
CiB9CiAKLXN0YXRpYyB2b2lkIGxpbmtTbG93Rm9yKFZNJiB2bSwgQ2FsbExpbmtJbmZvJiBjYWxs
TGlua0luZm8sIFRodW5rR2VuZXJhdG9yIGdlbmVyYXRvcikKK3N0YXRpYyB2b2lkIGxpbmtTbG93
UGF0aFRvKFZNJiB2bSwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8sIFRodW5rR2VuZXJhdG9y
IGdlbmVyYXRvcikKIHsKLSAgICBsaW5rU2xvd0Zvcih2bSwgY2FsbExpbmtJbmZvLCB2bS5nZXRD
VElTdHViKGdlbmVyYXRvcikucmV0YWdnZWQ8SklUU3R1YlJvdXRpbmVQdHJUYWc+KCkpOworICAg
IGxpbmtTbG93UGF0aFRvKHZtLCBjYWxsTGlua0luZm8sIHZtLmdldENUSVN0dWIoZ2VuZXJhdG9y
KS5yZXRhZ2dlZDxKSVRTdHViUm91dGluZVB0clRhZz4oKSk7CiB9CiAKIHN0YXRpYyB2b2lkIGxp
bmtTbG93Rm9yKFZNJiB2bSwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8pCiB7CiAgICAgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiB2aXJ0dWFsVGh1bmsgPSB2
aXJ0dWFsVGh1bmtGb3Iodm0sIGNhbGxMaW5rSW5mbyk7Ci0gICAgbGlua1Nsb3dGb3Iodm0sIGNh
bGxMaW5rSW5mbywgdmlydHVhbFRodW5rKTsKKyAgICBsaW5rU2xvd1BhdGhUbyh2bSwgY2FsbExp
bmtJbmZvLCB2aXJ0dWFsVGh1bmspOwogICAgIGNhbGxMaW5rSW5mby5zZXRTbG93U3R1YihHQ0F3
YXJlSklUU3R1YlJvdXRpbmU6OmNyZWF0ZSh2aXJ0dWFsVGh1bmssIHZtKSk7CiB9CiAKQEAgLTEy
MTcsNyArMTIxOSw3IEBAIHN0YXRpYyBKU0NlbGwqIHdlYkFzc2VtYmx5T3duZXIoSlNDZWxsKiAK
ICNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCiB9CiAKLXZvaWQgbGlua0ZvcigKK3ZvaWQg
bGlua01vbm9tb3JwaGljQ2FsbCgKICAgICBWTSYgdm0sIENhbGxGcmFtZSogY2FsbEZyYW1lLCBD
YWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbywgQ29kZUJsb2NrKiBjYWxsZWVDb2RlQmxvY2ssCiAg
ICAgSlNPYmplY3QqIGNhbGxlZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+
IGNvZGVQdHIpCiB7CkBAIC0xMjM1LDI2ICsxMjM3LDI0IEBAIHZvaWQgbGlua0ZvcigKICAgICBB
U1NFUlQob3duZXIpOwogCiAgICAgQVNTRVJUKCFjYWxsTGlua0luZm8uaXNMaW5rZWQoKSk7Ci0g
ICAgY2FsbExpbmtJbmZvLnNldENhbGxlZSh2bSwgb3duZXIsIGNhbGxlZSk7Ci0gICAgTWFjcm9B
c3NlbWJsZXI6OnJlcGF0Y2hQb2ludGVyKGNhbGxMaW5rSW5mby5ob3RQYXRoQmVnaW4oKSwgY2Fs
bGVlKTsKKyAgICBjYWxsTGlua0luZm8uc2V0TW9ub21vcnBoaWNDYWxsZWUodm0sIG93bmVyLCBj
YWxsZWUsIGNvZGVQdHIpOwogICAgIGNhbGxMaW5rSW5mby5zZXRMYXN0U2VlbkNhbGxlZSh2bSwg
b3duZXIsIGNhbGxlZSk7CisKICAgICBpZiAoc2hvdWxkRHVtcERpc2Fzc2VtYmx5Rm9yKGNhbGxl
ckNvZGVCbG9jaykpCiAgICAgICAgIGRhdGFMb2coIkxpbmtpbmcgY2FsbCBpbiAiLCBGdWxsQ29k
ZU9yaWdpbihjYWxsZXJDb2RlQmxvY2ssIGNhbGxMaW5rSW5mby5jb2RlT3JpZ2luKCkpLCAiIHRv
ICIsIHBvaW50ZXJEdW1wKGNhbGxlZUNvZGVCbG9jayksICIsIGVudHJ5cG9pbnQgYXQgIiwgY29k
ZVB0ciwgIlxuIik7CiAKLSAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaE5lYXJDYWxsKGNhbGxM
aW5rSW5mby5ob3RQYXRoT3RoZXIoKSwgQ29kZUxvY2F0aW9uTGFiZWw8SlNFbnRyeVB0clRhZz4o
Y29kZVB0cikpOwotCiAgICAgaWYgKGNhbGxlZUNvZGVCbG9jaykKICAgICAgICAgY2FsbGVlQ29k
ZUJsb2NrLT5saW5rSW5jb21pbmdDYWxsKGNhbGxlckZyYW1lLCAmY2FsbExpbmtJbmZvKTsKIAog
ICAgIGlmIChjYWxsTGlua0luZm8uc3BlY2lhbGl6YXRpb25LaW5kKCkgPT0gQ29kZUZvckNhbGwg
JiYgY2FsbExpbmtJbmZvLmFsbG93U3R1YnMoKSkgewotICAgICAgICBsaW5rU2xvd0Zvcih2bSwg
Y2FsbExpbmtJbmZvLCBsaW5rUG9seW1vcnBoaWNDYWxsVGh1bmtHZW5lcmF0b3IpOworICAgICAg
ICBsaW5rU2xvd1BhdGhUbyh2bSwgY2FsbExpbmtJbmZvLCBsaW5rUG9seW1vcnBoaWNDYWxsVGh1
bmtHZW5lcmF0b3IpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAogICAgIGxpbmtTbG93
Rm9yKHZtLCBjYWxsTGlua0luZm8pOwogfQogCi12b2lkIGxpbmtEaXJlY3RGb3IoCit2b2lkIGxp
bmtEaXJlY3RDYWxsKAogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lLCBDYWxsTGlua0luZm8mIGNh
bGxMaW5rSW5mbywgQ29kZUJsb2NrKiBjYWxsZWVDb2RlQmxvY2ssCiAgICAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGNvZGVQdHIpCiB7CkBAIC0xMjY5LDkgKzEyNjksNyBA
QCB2b2lkIGxpbmtEaXJlY3RGb3IoCiAgICAgaWYgKHNob3VsZER1bXBEaXNhc3NlbWJseUZvcihj
YWxsZXJDb2RlQmxvY2spKQogICAgICAgICBkYXRhTG9nKCJMaW5raW5nIGNhbGwgaW4gIiwgRnVs
bENvZGVPcmlnaW4oY2FsbGVyQ29kZUJsb2NrLCBjYWxsTGlua0luZm8uY29kZU9yaWdpbigpKSwg
IiB0byAiLCBwb2ludGVyRHVtcChjYWxsZWVDb2RlQmxvY2spLCAiLCBlbnRyeXBvaW50IGF0ICIs
IGNvZGVQdHIsICJcbiIpOwogCi0gICAgaWYgKGNhbGxMaW5rSW5mby5jYWxsVHlwZSgpID09IENh
bGxMaW5rSW5mbzo6RGlyZWN0VGFpbENhbGwpCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBh
dGNoSnVtcFRvTm9wKGNhbGxMaW5rSW5mby5wYXRjaGFibGVKdW1wKCkpOwotICAgIE1hY3JvQXNz
ZW1ibGVyOjpyZXBhdGNoTmVhckNhbGwoY2FsbExpbmtJbmZvLmhvdFBhdGhPdGhlcigpLCBDb2Rl
TG9jYXRpb25MYWJlbDxKU0VudHJ5UHRyVGFnPihjb2RlUHRyKSk7CisgICAgY2FsbExpbmtJbmZv
LnNldERpcmVjdENhbGxUYXJnZXQoQ29kZUxvY2F0aW9uTGFiZWw8SlNFbnRyeVB0clRhZz4oY29k
ZVB0cikpOwogCiAgICAgaWYgKGNhbGxlZUNvZGVCbG9jaykKICAgICAgICAgY2FsbGVlQ29kZUJs
b2NrLT5saW5rSW5jb21pbmdDYWxsKGNhbGxGcmFtZSwgJmNhbGxMaW5rSW5mbyk7CkBAIC0xMjg5
LDIxICsxMjg3LDE2IEBAIHN0YXRpYyB2b2lkIHJldmVydENhbGwoVk0mIHZtLCBDYWxsTGlua0kK
IHsKICAgICBpZiAoY2FsbExpbmtJbmZvLmlzRGlyZWN0KCkpIHsKICAgICAgICAgY2FsbExpbmtJ
bmZvLmNsZWFyQ29kZUJsb2NrKCk7Ci0gICAgICAgIGlmICghY2FsbExpbmtJbmZvLmNsZWFyZWRC
eUpldHRpc29uKCkpIHsKLSAgICAgICAgICAgIGlmIChjYWxsTGlua0luZm8uY2FsbFR5cGUoKSA9
PSBDYWxsTGlua0luZm86OkRpcmVjdFRhaWxDYWxsKQotICAgICAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpyZXBhdGNoSnVtcChjYWxsTGlua0luZm8ucGF0Y2hhYmxlSnVtcCgpLCBjYWxsTGlu
a0luZm8uc2xvd1BhdGhTdGFydCgpKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaE5lYXJDYWxsKGNhbGxMaW5rSW5mby5ob3RQYXRoT3Ro
ZXIoKSwgY2FsbExpbmtJbmZvLnNsb3dQYXRoU3RhcnQoKSk7Ci0gICAgICAgIH0KKyAgICAgICAg
aWYgKCFjYWxsTGlua0luZm8uY2xlYXJlZEJ5SmV0dGlzb24oKSkKKyAgICAgICAgICAgIGNhbGxM
aW5rSW5mby5pbml0aWFsaXplRGlyZWN0Q2FsbCgpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGlm
ICghY2FsbExpbmtJbmZvLmNsZWFyZWRCeUpldHRpc29uKCkpIHsKLSAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpyZXZlcnRKdW1wUmVwbGFjZW1lbnRUb0JyYW5jaFB0cldpdGhQYXRjaCgKLSAg
ICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6c3RhcnRPZkJyYW5jaFB0cldpdGhQYXRjaE9u
UmVnaXN0ZXIoY2FsbExpbmtJbmZvLmhvdFBhdGhCZWdpbigpKSwKLSAgICAgICAgICAgICAgICBj
YWxsTGlua0luZm8uY2FsbGVlR1BSKCksIG51bGxwdHIpOwotICAgICAgICAgICAgbGlua1Nsb3dG
b3Iodm0sIGNhbGxMaW5rSW5mbywgY29kZVJlZik7Ci0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6cmVwYXRjaFBvaW50ZXIoY2FsbExpbmtJbmZvLmhvdFBhdGhCZWdpbigpLCBudWxscHRyKTsK
KyAgICAgICAgICAgIGxpbmtTbG93UGF0aFRvKHZtLCBjYWxsTGlua0luZm8sIGNvZGVSZWYpOwor
CisgICAgICAgICAgICBpZiAoY2FsbExpbmtJbmZvLnN0dWIoKSkKKyAgICAgICAgICAgICAgICBj
YWxsTGlua0luZm8ucmV2ZXJ0Q2FsbFRvU3R1YigpOwogICAgICAgICB9Ci0gICAgICAgIGNhbGxM
aW5rSW5mby5jbGVhckNhbGxlZSgpOworICAgICAgICBjYWxsTGlua0luZm8uY2xlYXJDYWxsZWUo
KTsgLy8gVGhpcyBhbHNvIGNsZWFycyB0aGUgaW5saW5lIGNhY2hlIGJvdGggZm9yIGRhdGEgYW5k
IGNvZGUtYmFzZWQgY2FjaGVzLgogICAgIH0KICAgICBjYWxsTGlua0luZm8uY2xlYXJTZWVuKCk7
CiAgICAgY2FsbExpbmtJbmZvLmNsZWFyU3R1YigpOwpAQCAtMTMxMiw5ICsxMzA1LDkgQEAgc3Rh
dGljIHZvaWQgcmV2ZXJ0Q2FsbChWTSYgdm0sIENhbGxMaW5rSQogICAgICAgICBjYWxsTGlua0lu
Zm8ucmVtb3ZlKCk7CiB9CiAKLXZvaWQgdW5saW5rRm9yKFZNJiB2bSwgQ2FsbExpbmtJbmZvJiBj
YWxsTGlua0luZm8pCit2b2lkIHVubGlua0NhbGwoVk0mIHZtLCBDYWxsTGlua0luZm8mIGNhbGxM
aW5rSW5mbykKIHsKLSAgICBkYXRhTG9nTG5JZihPcHRpb25zOjpkdW1wRGlzYXNzZW1ibHkoKSwg
IlVubGlua2luZyBjYWxsIGF0ICIsIGNhbGxMaW5rSW5mby5ob3RQYXRoT3RoZXIoKSk7CisgICAg
ZGF0YUxvZ0xuSWYoT3B0aW9uczo6ZHVtcERpc2Fzc2VtYmx5KCksICJVbmxpbmtpbmcgY2FsbCBh
dCAiLCBjYWxsTGlua0luZm8uZmFzdFBhdGhTdGFydCgpKTsKICAgICAKICAgICByZXZlcnRDYWxs
KHZtLCBjYWxsTGlua0luZm8sIHZtLmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvciku
cmV0YWdnZWQ8SklUU3R1YlJvdXRpbmVQdHJUYWc+KCkpOwogfQpAQCAtMTU4MCw3ICsxNTczLDcg
QEAgdm9pZCBsaW5rUG9seW1vcnBoaWNDYWxsKEpTR2xvYmFsT2JqZWN0KgogICAgIH0KICAgICBz
dHViSml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGdsb2JhbE9iamVjdCksIEdQ
UkluZm86OnJlZ1QzKTsKICAgICBzdHViSml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
UHRyKCZjYWxsTGlua0luZm8pLCBHUFJJbmZvOjpyZWdUMik7Ci0gICAgc3R1YkppdC5tb3ZlKEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihjYWxsTGlua0luZm8uY2FsbFJldHVybkxvY2F0aW9u
KCkudW50YWdnZWRFeGVjdXRhYmxlQWRkcmVzcygpKSwgR1BSSW5mbzo6cmVnVDQpOworICAgIHN0
dWJKaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoY2FsbExpbmtJbmZvLmRvbmVM
b2NhdGlvbigpLnVudGFnZ2VkRXhlY3V0YWJsZUFkZHJlc3MoKSksIEdQUkluZm86OnJlZ1Q0KTsK
ICAgICAKICAgICBzdHViSml0LnJlc3RvcmVSZXR1cm5BZGRyZXNzQmVmb3JlUmV0dXJuKEdQUklu
Zm86OnJlZ1Q0KTsKICAgICBBc3NlbWJseUhlbHBlcnM6Okp1bXAgc2xvdyA9IHN0dWJKaXQuanVt
cCgpOwpAQCAtMTYwMywyOSArMTU5NiwyMyBAQCB2b2lkIGxpbmtQb2x5bW9ycGhpY0NhbGwoSlNH
bG9iYWxPYmplY3QqCiAgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoY2FsbFRvQ29kZVB0ci5jYWxs
LCBGdW5jdGlvblB0cjxKU0VudHJ5UHRyVGFnPihjYWxsVG9Db2RlUHRyLmNvZGVQdHIpKTsKICNl
bmRpZgogICAgIH0KLSAgICBpZiAoaXNXZWJBc3NlbWJseSB8fCBKSVRDb2RlOjppc09wdGltaXpp
bmdKSVQoY2FsbGVyQ29kZUJsb2NrLT5qaXRUeXBlKCkpKQotICAgICAgICBwYXRjaEJ1ZmZlci5s
aW5rKGRvbmUsIGNhbGxMaW5rSW5mby5jYWxsUmV0dXJuTG9jYXRpb24oKS5sYWJlbEF0T2Zmc2V0
KDApKTsKLSAgICBlbHNlCi0gICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoZG9uZSwgY2FsbExpbmtJ
bmZvLmhvdFBhdGhPdGhlcigpLmxhYmVsQXRPZmZzZXQoMCkpOworICAgIHBhdGNoQnVmZmVyLmxp
bmsoZG9uZSwgY2FsbExpbmtJbmZvLmRvbmVMb2NhdGlvbigpKTsKICAgICBwYXRjaEJ1ZmZlci5s
aW5rKHNsb3csIENvZGVMb2NhdGlvbkxhYmVsPEpJVFRodW5rUHRyVGFnPih2bS5nZXRDVElTdHVi
KGxpbmtQb2x5bW9ycGhpY0NhbGxUaHVua0dlbmVyYXRvcikuY29kZSgpKSk7CiAgICAgCiAgICAg
YXV0byBzdHViUm91dGluZSA9IGFkb3B0UmVmKCpuZXcgUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRp
bmUoCiAgICAgICAgIEZJTkFMSVpFX0NPREVfRk9SKAogICAgICAgICAgICAgY2FsbGVyQ29kZUJs
b2NrLCBwYXRjaEJ1ZmZlciwgSklUU3R1YlJvdXRpbmVQdHJUYWcsCiAgICAgICAgICAgICAiUG9s
eW1vcnBoaWMgY2FsbCBzdHViIGZvciAlcywgcmV0dXJuIHBvaW50ICVwLCB0YXJnZXRzICVzIiwK
LSAgICAgICAgICAgICAgICBpc1dlYkFzc2VtYmx5ID8gIldlYkFzc2VtYmx5IiA6IHRvQ1N0cmlu
ZygqY2FsbGVyQ29kZUJsb2NrKS5kYXRhKCksIGNhbGxMaW5rSW5mby5jYWxsUmV0dXJuTG9jYXRp
b24oKS5sYWJlbEF0T2Zmc2V0KDApLmV4ZWN1dGFibGVBZGRyZXNzKCksCisgICAgICAgICAgICAg
ICAgaXNXZWJBc3NlbWJseSA/ICJXZWJBc3NlbWJseSIgOiB0b0NTdHJpbmcoKmNhbGxlckNvZGVC
bG9jaykuZGF0YSgpLCBjYWxsTGlua0luZm8uZG9uZUxvY2F0aW9uKCkuZXhlY3V0YWJsZUFkZHJl
c3MoKSwKICAgICAgICAgICAgICAgICB0b0NTdHJpbmcobGlzdER1bXAoY2FsbENhc2VzKSkuZGF0
YSgpKSwKICAgICAgICAgdm0sIG93bmVyLCBjYWxsRnJhbWUtPmNhbGxlckZyYW1lKCksIGNhbGxM
aW5rSW5mbywgY2FsbENhc2VzLAogICAgICAgICBXVEZNb3ZlKGZhc3RDb3VudHMpKSk7Ci0gICAg
Ci0gICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGxhY2VXaXRoSnVtcCgKLSAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OnN0YXJ0T2ZCcmFuY2hQdHJXaXRoUGF0Y2hPblJlZ2lzdGVyKGNhbGxMaW5rSW5mby5o
b3RQYXRoQmVnaW4oKSksCi0gICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5l
UHRyVGFnPihzdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOworCiAgICAgLy8gVGhlIG9yaWdp
bmFsIHNsb3cgcGF0aCBpcyB1bnJlYWNoYWJsZSBvbiA2NC1iaXRzLCBidXQgc3RpbGwKICAgICAv
LyByZWFjaGFibGUgb24gMzItYml0cyBzaW5jZSBhIG5vbi1jZWxsIGNhbGxlZSB3aWxsIGFsd2F5
cwogICAgIC8vIHRyaWdnZXIgdGhlIHNsb3cgcGF0aAogICAgIGxpbmtTbG93Rm9yKHZtLCBjYWxs
TGlua0luZm8pOwotICAgIAorCiAgICAgLy8gSWYgdGhlcmUgaGFkIGJlZW4gYSBwcmV2aW91cyBz
dHViIHJvdXRpbmUsIHRoYXQgb25lIHdpbGwgZGllIGFzIHNvb24gYXMgdGhlIEdDIHJ1bnMgYW5k
IHNlZXMKICAgICAvLyB0aGF0IGl0J3Mgbm8gbG9uZ2VyIG9uIHN0YWNrLgogICAgIGNhbGxMaW5r
SW5mby5zZXRTdHViKFdURk1vdmUoc3R1YlJvdXRpbmUpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvUmVwYXRjaC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvUmVwYXRjaC5oCShyZXZpc2lvbiAyNzc0NDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L1JlcGF0Y2guaAkod29ya2luZyBjb3B5KQpAQCAtNTYsMTAgKzU2LDEwIEBAIHZvaWQg
cmVwYXRjaEluQnlJRChKU0dsb2JhbE9iamVjdCosIENvZGUKIHZvaWQgcmVwYXRjaENoZWNrUHJp
dmF0ZUJyYW5kKEpTR2xvYmFsT2JqZWN0KiwgQ29kZUJsb2NrKiwgSlNPYmplY3QqLCBDYWNoZWFi
bGVJZGVudGlmaWVyLCBTdHJ1Y3R1cmVTdHViSW5mbyYpOwogdm9pZCByZXBhdGNoU2V0UHJpdmF0
ZUJyYW5kKEpTR2xvYmFsT2JqZWN0KiwgQ29kZUJsb2NrKiwgSlNPYmplY3QqLCBTdHJ1Y3R1cmUq
LCBDYWNoZWFibGVJZGVudGlmaWVyLCBTdHJ1Y3R1cmVTdHViSW5mbyYpOwogdm9pZCByZXBhdGNo
SW5zdGFuY2VPZihKU0dsb2JhbE9iamVjdCosIENvZGVCbG9jayosIEpTVmFsdWUgdmFsdWUsIEpT
VmFsdWUgcHJvdG90eXBlLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIGJvb2wgd2FzRm91bmQpOwotdm9p
ZCBsaW5rRm9yKFZNJiwgQ2FsbEZyYW1lKiwgQ2FsbExpbmtJbmZvJiwgQ29kZUJsb2NrKiwgSlNP
YmplY3QqIGNhbGxlZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+KTsKLXZv
aWQgbGlua0RpcmVjdEZvcihDYWxsRnJhbWUqLCBDYWxsTGlua0luZm8mLCBDb2RlQmxvY2sqLCBN
YWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4pOwordm9pZCBsaW5rTW9ub21vcnBo
aWNDYWxsKFZNJiwgQ2FsbEZyYW1lKiwgQ2FsbExpbmtJbmZvJiwgQ29kZUJsb2NrKiwgSlNPYmpl
Y3QqIGNhbGxlZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+KTsKK3ZvaWQg
bGlua0RpcmVjdENhbGwoQ2FsbEZyYW1lKiwgQ2FsbExpbmtJbmZvJiwgQ29kZUJsb2NrKiwgTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+KTsKIHZvaWQgbGlua1Nsb3dGb3IoQ2Fs
bEZyYW1lKiwgQ2FsbExpbmtJbmZvJik7Ci12b2lkIHVubGlua0ZvcihWTSYsIENhbGxMaW5rSW5m
byYpOwordm9pZCB1bmxpbmtDYWxsKFZNJiwgQ2FsbExpbmtJbmZvJik7CiB2b2lkIGxpbmtQb2x5
bW9ycGhpY0NhbGwoSlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUqLCBDYWxsTGlua0luZm8mLCBD
YWxsVmFyaWFudCk7CiB2b2lkIHJlc2V0R2V0QnkoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1Yklu
Zm8mLCBHZXRCeUtpbmQpOwogdm9pZCByZXNldFB1dEJ5SUQoQ29kZUJsb2NrKiwgU3RydWN0dXJl
U3R1YkluZm8mKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMu
Y3BwCShyZXZpc2lvbiAyNzc0NDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9P
cHRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjA3LDkgKzYwNyw5IEBAIHZvaWQgT3B0aW9u
czo6aW5pdGlhbGl6ZSgpCiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChPcHRpb25zOjphZGRy
ZXNzT2ZPcHRpb24oZm9yY2VPU1JFeGl0VG9MTEludElEKSA9PSAgJk9wdGlvbnM6OmZvcmNlT1NS
RXhpdFRvTExJbnQoKSk7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChPcHRpb25zOjphZGRy
ZXNzT2ZPcHRpb25EZWZhdWx0KGZvcmNlT1NSRXhpdFRvTExJbnRJRCkgPT0gICZPcHRpb25zOjpm
b3JjZU9TUkV4aXRUb0xMSW50RGVmYXVsdCgpKTsKIAotI2lmbmRlZiBOREVCVUcKKy8vI2lmbmRl
ZiBOREVCVUcKICAgICAgICAgICAgIENvbmZpZzo6ZW5hYmxlUmVzdHJpY3RlZE9wdGlvbnMoKTsK
LSNlbmRpZgorLy8jZW5kaWYKICAgICAgICAgICAgIC8vIEluaXRpYWxpemUgZWFjaCBvZiB0aGUg
b3B0aW9ucyB3aXRoIHRoZWlyIGRlZmF1bHQgdmFsdWVzOgogI2RlZmluZSBJTklUX09QVElPTih0
eXBlXywgbmFtZV8sIGRlZmF1bHRWYWx1ZV8sIGF2YWlsYWJpbGl0eV8sIGRlc2NyaXB0aW9uXykg
eyBcCiAgICAgICAgICAgICAgICAgYXV0byB2YWx1ZSA9IGRlZmF1bHRWYWx1ZV87IFwKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHJldmlzaW9uIDI3NzQ0MCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTcx
Niw0ICsxNzE2LDYgQEAgdm9pZCBWTTo6cmVtb3ZlTG9vcEhpbnRFeGVjdXRpb25Db3VudGVyKAog
ICAgICAgICBtX2xvb3BIaW50RXhlY3V0aW9uQ291bnRzLnJlbW92ZShpdGVyKTsKIH0KIAordWlu
dDY0X3QgZ19udW1iZXJPZk9TUkV4aXRzOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dhc21Ub0pTLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XYXNtVG9KUy5jcHAJKHJldmlzaW9uIDI3NzQ0
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dhc21Ub0pTLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjYxLDE5ICsyNjEsMTggQEAgRXhwZWN0ZWQ8TWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPFdhc21FbnRyeQogCiAgICAgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8gPSBjYWxsTGlu
a0luZm9zLmFkZChDb2RlT3JpZ2luKCkpOwogICAgIGNhbGxMaW5rSW5mby0+c2V0VXBDYWxsKENh
bGxMaW5rSW5mbzo6Q2FsbCwgaW1wb3J0SlNDZWxsR1BSUmVnKTsKLSAgICBKSVQ6OkRhdGFMYWJl
bFB0ciB0YXJnZXRUb0NoZWNrOwotICAgIEpJVDo6VHJ1c3RlZEltbVB0ciBpbml0aWFsUmlnaHRW
YWx1ZShudWxscHRyKTsKLSAgICBKSVQ6Okp1bXAgc2xvd1BhdGggPSBqaXQuYnJhbmNoUHRyV2l0
aFBhdGNoKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgaW1wb3J0SlNDZWxsR1BSUmVnLCB0YXJn
ZXRUb0NoZWNrLCBpbml0aWFsUmlnaHRWYWx1ZSk7Ci0gICAgSklUOjpDYWxsIGZhc3RDYWxsID0g
aml0Lm5lYXJDYWxsKCk7CisgICAgYXV0byBzbG93UGF0aCA9IGNhbGxMaW5rSW5mby0+ZW1pdEZh
c3RQYXRoKGppdCwgaW1wb3J0SlNDZWxsR1BSUmVnLCBJbnZhbGlkR1BSUmVnLCBDYWxsTGlua0lu
Zm86OlVzZURhdGFJQzo6Tm8pOworCiAgICAgSklUOjpKdW1wIGRvbmUgPSBqaXQuanVtcCgpOwog
ICAgIHNsb3dQYXRoLmxpbmsoJmppdCk7CisgICAgYXV0byBzbG93UGF0aFN0YXJ0ID0gaml0Lmxh
YmVsKCk7CiAgICAgLy8gQ2FsbGVlIG5lZWRzIHRvIGJlIGluIHJlZ1QwIGhlcmUuCi0gICAgaml0
Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoY2FsbExpbmtJbmZvKSwgR1BSSW5m
bzo6cmVnVDIpOyAvLyBMaW5rIGluZm8gbmVlZHMgdG8gYmUgaW4gcmVnVDIuCiAgICAgaml0Lmxv
YWRXYXNtQ29udGV4dEluc3RhbmNlKEdQUkluZm86OnJlZ1QzKTsKICAgICBqaXQubG9hZFB0cihD
Q2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDMsIEluc3RhbmNlOjpvZmZzZXRPZk93
bmVyKCkpLCBHUFJJbmZvOjpyZWdUMyk7CiAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpB
ZGRyZXNzKEdQUkluZm86OnJlZ1QzLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNldE9mR2xv
YmFsT2JqZWN0KCkpLCBHUFJJbmZvOjpyZWdUMyk7Ci0gICAgSklUOjpDYWxsIHNsb3dDYWxsID0g
aml0Lm5lYXJDYWxsKCk7CisgICAgY2FsbExpbmtJbmZvLT5lbWl0U2xvd1BhdGgodm0sIGppdCk7
CiAgICAgZG9uZS5saW5rKCZqaXQpOworICAgIGF1dG8gZG9uZUxvY2F0aW9uID0gaml0LmxhYmVs
KCk7CiAKICAgICBpZiAoc2lnbmF0dXJlLnJldHVybkNvdW50KCkgPT0gMSkgewogICAgICAgICBz
d2l0Y2ggKHNpZ25hdHVyZS5yZXR1cm5UeXBlKDApLmtpbmQpIHsKQEAgLTQyMSwxMSArNDIwLDkg
QEAgRXhwZWN0ZWQ8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPFdhc21FbnRyeQogICAgIGlmIChVTkxJ
S0VMWShwYXRjaEJ1ZmZlci5kaWRGYWlsVG9BbGxvY2F0ZSgpKSkKICAgICAgICAgcmV0dXJuIG1h
a2VVbmV4cGVjdGVkKEJpbmRpbmdGYWlsdXJlOjpPdXRPZk1lbW9yeSk7CiAKLSAgICBwYXRjaEJ1
ZmZlci5saW5rKHNsb3dDYWxsLCBGdW5jdGlvblB0cjxKSVRUaHVua1B0clRhZz4odm0uZ2V0Q1RJ
U3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5jb2RlKCkpKTsKLSAgICBDb2RlTG9jYXRpb25M
YWJlbDxKU0ludGVybmFsUHRyVGFnPiBjYWxsUmV0dXJuTG9jYXRpb24ocGF0Y2hCdWZmZXIubG9j
YXRpb25PZk5lYXJDYWxsPEpTSW50ZXJuYWxQdHJUYWc+KHNsb3dDYWxsKSk7Ci0gICAgQ29kZUxv
Y2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gaG90UGF0aEJlZ2luKHBhdGNoQnVmZmVyLmxv
Y2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4odGFyZ2V0VG9DaGVjaykpOwotICAgIENvZGVMb2Nh
dGlvbk5lYXJDYWxsPEpTSW50ZXJuYWxQdHJUYWc+IGhvdFBhdGhPdGhlciA9IHBhdGNoQnVmZmVy
LmxvY2F0aW9uT2ZOZWFyQ2FsbDxKU0ludGVybmFsUHRyVGFnPihmYXN0Q2FsbCk7Ci0gICAgY2Fs
bExpbmtJbmZvLT5zZXRDYWxsTG9jYXRpb25zKGNhbGxSZXR1cm5Mb2NhdGlvbiwgaG90UGF0aEJl
Z2luLCBob3RQYXRoT3RoZXIpOworICAgIGNhbGxMaW5rSW5mby0+c2V0Q29kZUxvY2F0aW9ucygK
KyAgICAgICAgICAgIHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oc2xv
d1BhdGhTdGFydCksCisgICAgICAgICAgICBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJu
YWxQdHJUYWc+KGRvbmVMb2NhdGlvbikpOwogCiAgICAgcmV0dXJuIEZJTkFMSVpFX1dBU01fQ09E
RShwYXRjaEJ1ZmZlciwgV2FzbUVudHJ5UHRyVGFnLCAiV2ViQXNzZW1ibHktPkphdmFTY3JpcHQg
aW1wb3J0WyVpXSAlcyIsIGltcG9ydEluZGV4LCBzaWduYXR1cmUudG9TdHJpbmcoKS5hc2NpaSgp
LmRhdGEoKSk7CiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>428535</attachid>
            <date>2021-05-13 11:04:50 -0700</date>
            <delta_ts>2021-05-13 12:05:43 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>79191</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2Vt
Ymxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJz
dHJhY3RNYWNyb0Fzc2VtYmxlci5oCShyZXZpc2lvbiAyNzc0NDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtOTcxLDYgKzk3MSwxMiBAQCBwdWJsaWM6CiAgICAgICAgIG1fbGlua1Rhc2tzLmFwcGVu
ZChjcmVhdGVTaGFyZWRUYXNrPHZvaWQoTGlua0J1ZmZlciYpPihmdW5jdG9yKSk7CiAgICAgfQog
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIGFkZExhdGVMaW5rVGFz
ayhjb25zdCBGdW5jdG9yJiBmdW5jdG9yKSAvLyBSdW4gYWZ0ZXIgYWxsIGxpbmsgdGFza3MKKyAg
ICB7CisgICAgICAgIG1fbGF0ZUxpbmtUYXNrcy5hcHBlbmQoY3JlYXRlU2hhcmVkVGFzazx2b2lk
KExpbmtCdWZmZXImKT4oZnVuY3RvcikpOworICAgIH0KKwogI2lmIENPTVBJTEVSKEdDQykKICAg
ICAvLyBXb3JrYXJvdW5kIGZvciBHQ0MgZGVtYW5kaW5nIHRoYXQgbWVtY3B5ICJtdXN0IGJlIHRo
ZSBuYW1lIG9mIGEgZnVuY3Rpb24gd2l0aCBleHRlcm5hbCBsaW5rYWdlIi4KICAgICBzdGF0aWMg
dm9pZCogbWVtY3B5KHZvaWQqIGRzdCwgY29uc3Qgdm9pZCogc3JjLCBzaXplX3Qgc2l6ZSkKQEAg
LTExMTQsNiArMTEyMCw3IEBAIHByb3RlY3RlZDoKICAgICBib29sIG1fYWxsb3dTY3JhdGNoUmVn
aXN0ZXIgeyB0cnVlIH07CiAKICAgICBWZWN0b3I8UmVmUHRyPFNoYXJlZFRhc2s8dm9pZChMaW5r
QnVmZmVyJik+Pj4gbV9saW5rVGFza3M7CisgICAgVmVjdG9yPFJlZlB0cjxTaGFyZWRUYXNrPHZv
aWQoTGlua0J1ZmZlciYpPj4+IG1fbGF0ZUxpbmtUYXNrczsKIAogICAgIGZyaWVuZCBjbGFzcyBM
aW5rQnVmZmVyOwogfTsgLy8gY2xhc3MgQWJzdHJhY3RNYWNyb0Fzc2VtYmxlcgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuY3BwCShyZXZpc2lv
biAyNzc0NDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MzksNiArNDM5LDcgQEAgdm9pZCBMaW5rQnVmZmVyOjps
aW5rQ29kZShNYWNyb0Fzc2VtYmxlcgogI2VuZGlmIC8vICFFTkFCTEUoQlJBTkNIX0NPTVBBQ1RJ
T04pCiAKICAgICBtX2xpbmtUYXNrcyA9IFdURk1vdmUobWFjcm9Bc3NlbWJsZXIubV9saW5rVGFz
a3MpOworICAgIG1fbGF0ZUxpbmtUYXNrcyA9IFdURk1vdmUobWFjcm9Bc3NlbWJsZXIubV9sYXRl
TGlua1Rhc2tzKTsKIH0KIAogdm9pZCBMaW5rQnVmZmVyOjphbGxvY2F0ZShNYWNyb0Fzc2VtYmxl
ciYgbWFjcm9Bc3NlbWJsZXIsIEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKQEAgLTQ3MSw2
ICs0NzIsOCBAQCB2b2lkIExpbmtCdWZmZXI6OnBlcmZvcm1GaW5hbGl6YXRpb24oKQogewogICAg
IGZvciAoYXV0byYgdGFzayA6IG1fbGlua1Rhc2tzKQogICAgICAgICB0YXNrLT5ydW4oKnRoaXMp
OworICAgIGZvciAoYXV0byYgdGFzayA6IG1fbGF0ZUxpbmtUYXNrcykKKyAgICAgICAgdGFzay0+
cnVuKCp0aGlzKTsKIAogI2lmbmRlZiBOREVCVUcKICAgICBBU1NFUlQobV9pc0p1bXBJc2xhbmQg
fHwgIWlzQ29tcGlsYXRpb25UaHJlYWQoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL0xpbmtCdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuaAkocmV2aXNpb24gMjc3NDQwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQw
Myw2ICs0MDMsNyBAQCBwcml2YXRlOgogICAgIFByb2ZpbGUgbV9wcm9maWxlIHsgUHJvZmlsZTo6
VW5jYXRlZ29yaXplZCB9OwogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxMaW5rQnVmZmVyUHRy
VGFnPiBtX2NvZGU7CiAgICAgVmVjdG9yPFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoTGlua0J1ZmZl
ciYpPj4+IG1fbGlua1Rhc2tzOworICAgIFZlY3RvcjxSZWZQdHI8U2hhcmVkVGFzazx2b2lkKExp
bmtCdWZmZXImKT4+PiBtX2xhdGVMaW5rVGFza3M7CiAKICAgICBzdGF0aWMgc2l6ZV90IHNfcHJv
ZmlsZUN1bW11bGF0aXZlTGlua2VkU2l6ZXNbbnVtYmVyT2ZQcm9maWxlc107CiB9OwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcAkocmV2aXNp
b24gMjc3NDQwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTgwLDExICsxNTgwLDYgQEAgdm9pZCBBY2Nlc3NDYXNl
OjpnZW5lcmF0ZUltcGwoQWNjZXNzR2VuZQogICAgICAgICAvLyBTdHVmZiBmb3IgY3VzdG9tIGdl
dHRlcnMvc2V0dGVycy4KICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIG9wZXJhdGlvbkNhbGw7
CiAKLSAgICAgICAgLy8gU3R1ZmYgZm9yIEpTIGdldHRlcnMvc2V0dGVycy4KLSAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpEYXRhTGFiZWxQdHIgYWRkcmVzc09mTGlua0Z1bmN0aW9uQ2hlY2s7Ci0gICAg
ICAgIENDYWxsSGVscGVyczo6Q2FsbCBmYXN0UGF0aENhbGw7Ci0gICAgICAgIENDYWxsSGVscGVy
czo6Q2FsbCBzbG93UGF0aENhbGw7Ci0KICAgICAgICAgLy8gVGhpcyBhbHNvIGRvZXMgdGhlIG5l
Y2Vzc2FyeSBjYWxjdWxhdGlvbnMgb2Ygd2hldGhlciBvciBub3Qgd2UncmUgYW4KICAgICAgICAg
Ly8gZXhjZXB0aW9uIGhhbmRsaW5nIGNhbGwgc2l0ZS4KICAgICAgICAgQWNjZXNzR2VuZXJhdGlv
blN0YXRlOjpTcGlsbFN0YXRlIHNwaWxsU3RhdGUgPSBzdGF0ZS5wcmVzZXJ2ZUxpdmVSZWdpc3Rl
cnNUb1N0YWNrRm9yQ2FsbCgpOwpAQCAtMTcwMSwyNCArMTY5NiwyMiBAQCB2b2lkIEFjY2Vzc0Nh
c2U6OmdlbmVyYXRlSW1wbChBY2Nlc3NHZW5lCiAgICAgICAgICAgICAgICAgICAgICAgICB2aXJ0
dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMoMSkub2Zmc2V0KCkgKiBzaXplb2Yo
UmVnaXN0ZXIpKSk7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIENDYWxsSGVscGVyczo6
SnVtcCBzbG93Q2FzZSA9IGppdC5icmFuY2hQdHJXaXRoUGF0Y2goCi0gICAgICAgICAgICAgICAg
Q0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwgbG9hZGVkVmFsdWVHUFIsIGFkZHJlc3NPZkxpbmtGdW5j
dGlvbkNoZWNrLAotICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihu
dWxscHRyKSk7CisgICAgICAgICAgICBhdXRvIHNsb3dDYXNlID0gYWNjZXNzLmNhbGxMaW5rSW5m
bygpLT5lbWl0RmFzdFBhdGgoaml0LCBsb2FkZWRWYWx1ZUdQUiwgbG9hZGVkVmFsdWVHUFIgPT0g
R1BSSW5mbzo6cmVnVDIgPyBHUFJJbmZvOjpyZWdUMCA6IEdQUkluZm86OnJlZ1QyLCBKSVRDb2Rl
Ojppc09wdGltaXppbmdKSVQoY29kZUJsb2NrLT5qaXRUeXBlKCkpID8gQ2FsbExpbmtJbmZvOjpV
c2VEYXRhSUM6Ok5vIDogQ2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6Olllcyk7CisgICAgICAgICAg
ICBhdXRvIGRvbmVMb2NhdGlvbiA9IGppdC5sYWJlbCgpOwogCi0gICAgICAgICAgICBmYXN0UGF0
aENhbGwgPSBqaXQubmVhckNhbGwoKTsKICAgICAgICAgICAgIGlmIChtX3R5cGUgPT0gR2V0dGVy
KQogICAgICAgICAgICAgICAgIGppdC5zZXR1cFJlc3VsdHModmFsdWVSZWdzKTsKICAgICAgICAg
ICAgIGRvbmUuYXBwZW5kKGppdC5qdW1wKCkpOwogCiAgICAgICAgICAgICBzbG93Q2FzZS5saW5r
KCZqaXQpOworICAgICAgICAgICAgYXV0byBzbG93UGF0aFN0YXJ0ID0gaml0LmxhYmVsKCk7CiAg
ICAgICAgICAgICBqaXQubW92ZShsb2FkZWRWYWx1ZUdQUiwgR1BSSW5mbzo6cmVnVDApOwogI2lm
IFVTRShKU1ZBTFVFMzJfNjQpCiAgICAgICAgICAgICAvLyBXZSAqYWx3YXlzKiBrbm93IHRoYXQg
dGhlIGdldHRlci9zZXR0ZXIsIGlmIG5vbi1udWxsLCBpcyBhIGNlbGwuCiAgICAgICAgICAgICBq
aXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwgR1BS
SW5mbzo6cmVnVDEpOwogI2VuZGlmCi0gICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW1QdHIoYWNjZXNzLmNhbGxMaW5rSW5mbygpKSwgR1BSSW5mbzo6cmVnVDIpOwog
ICAgICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGdsb2JhbE9i
amVjdCksIEdQUkluZm86OnJlZ1QzKTsKLSAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCA9IGppdC5u
ZWFyQ2FsbCgpOworICAgICAgICAgICAgYWNjZXNzLmNhbGxMaW5rSW5mbygpLT5lbWl0U2xvd1Bh
dGgodm0sIGppdCk7CiAgICAgICAgICAgICBpZiAobV90eXBlID09IEdldHRlcikKICAgICAgICAg
ICAgICAgICBqaXQuc2V0dXBSZXN1bHRzKHZhbHVlUmVncyk7CiAgICAgICAgICAgICBkb25lLmFw
cGVuZChqaXQuanVtcCgpKTsKQEAgLTE3MzUsMTUgKzE3MjgsMTAgQEAgdm9pZCBBY2Nlc3NDYXNl
OjpnZW5lcmF0ZUltcGwoQWNjZXNzR2VuZQogICAgICAgICAgICAgYm9vbCBjYWxsSGFzUmV0dXJu
VmFsdWUgPSBpc0dldHRlcigpOwogICAgICAgICAgICAgcmVzdG9yZUxpdmVSZWdpc3RlcnNGcm9t
U3RhY2tGb3JDYWxsKHNwaWxsU3RhdGUsIGNhbGxIYXNSZXR1cm5WYWx1ZSk7CiAKLSAgICAgICAg
ICAgIGppdC5hZGRMaW5rVGFzayhbPSwgJnZtXSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewot
ICAgICAgICAgICAgICAgIHRoaXMtPmFzPEdldHRlclNldHRlckFjY2Vzc0Nhc2U+KCkuY2FsbExp
bmtJbmZvKCktPnNldENhbGxMb2NhdGlvbnMoCi0gICAgICAgICAgICAgICAgICAgIENvZGVMb2Nh
dGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+KGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxs
PEpTSW50ZXJuYWxQdHJUYWc+KHNsb3dQYXRoQ2FsbCkpLAotICAgICAgICAgICAgICAgICAgICBD
b2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPihsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8
SlNJbnRlcm5hbFB0clRhZz4oYWRkcmVzc09mTGlua0Z1bmN0aW9uQ2hlY2spKSwKLSAgICAgICAg
ICAgICAgICAgICAgbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8SlNJbnRlcm5hbFB0clRh
Zz4oZmFzdFBhdGhDYWxsKSk7Ci0KLSAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoCi0g
ICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCwKLSAgICAgICAgICAgICAgICAgICAgQ29k
ZUxvY2F0aW9uTGFiZWw8SklUVGh1bmtQdHJUYWc+KHZtLmdldENUSVN0dWIobGlua0NhbGxUaHVu
a0dlbmVyYXRvcikuY29kZSgpKSk7CisgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChM
aW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgICAgICAgICAgICAgdGhpcy0+YXM8R2V0dGVy
U2V0dGVyQWNjZXNzQ2FzZT4oKS5jYWxsTGlua0luZm8oKS0+c2V0Q29kZUxvY2F0aW9ucygKKyAg
ICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+
KHNsb3dQYXRoU3RhcnQpLAorICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9u
T2Y8SlNJbnRlcm5hbFB0clRhZz4oZG9uZUxvY2F0aW9uKSk7CiAgICAgICAgICAgICB9KTsKICAg
ICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIEFTU0VSVChtX3R5cGUgPT0gQ3VzdG9tVmFsdWVH
ZXR0ZXIgfHwgbV90eXBlID09IEN1c3RvbUFjY2Vzc29yR2V0dGVyIHx8IG1fdHlwZSA9PSBDdXN0
b21WYWx1ZVNldHRlciB8fCBtX3R5cGUgPT0gQ3VzdG9tQWNjZXNzb3JTZXR0ZXIpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAJKHJl
dmlzaW9uIDI3NzQ0MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlu
a0luZm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwxMSArMjYsMTUgQEAKICNpbmNsdWRlICJj
b25maWcuaCIKICNpbmNsdWRlICJDYWxsTGlua0luZm8uaCIKIAorI2luY2x1ZGUgIkNDYWxsSGVs
cGVycy5oIgogI2luY2x1ZGUgIkNhbGxGcmFtZVNodWZmbGVEYXRhLmgiCisjaW5jbHVkZSAiRGlz
YWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlLmgiCiAjaW5jbHVkZSAiRnVuY3Rpb25Db2Rl
QmxvY2suaCIKICNpbmNsdWRlICJKU0NlbGxJbmxpbmVzLmgiCiAjaW5jbHVkZSAiT3Bjb2RlLmgi
CisjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgogI2luY2x1ZGUgIlJlcGF0Y2guaCIKKyNpbmNsdWRl
ICJUaHVua0dlbmVyYXRvcnMuaCIKICNpbmNsdWRlIDx3dGYvTGlzdER1bXAuaD4KIAogI2lmIEVO
QUJMRShKSVQpCkBAIC03Nyw2ICs4MSw3IEBAIENhbGxMaW5rSW5mbzo6Q2FsbExpbmtJbmZvKENv
ZGVPcmlnaW4gY28KICAgICAsIG1fYWxsb3dTdHVicyh0cnVlKQogICAgICwgbV9jbGVhcmVkQnlK
ZXR0aXNvbihmYWxzZSkKICAgICAsIG1fY2FsbFR5cGUoTm9uZSkKKyAgICAsIG1fdXNlRGF0YUlD
KHN0YXRpY19jYXN0PHVuc2lnbmVkPihVc2VEYXRhSUM6OlllcykpCiB7CiB9CiAKQEAgLTEwMiw0
NyArMTA3LDUxIEBAIHZvaWQgQ2FsbExpbmtJbmZvOjp1bmxpbmsoVk0mIHZtKQogICAgIC8vIFdl
IGNvdWxkIGJlIGNhbGxlZCBldmVuIGlmIHdlJ3JlIG5vdCBsaW5rZWQgYW55bW9yZSBiZWNhdXNl
IG9mIGhvdyBwb2x5bW9ycGhpYyBjYWxscwogICAgIC8vIHdvcmsuIEVhY2ggY2FsbHNpdGUgd2l0
aGluIHRoZSBwb2x5bW9ycGhpYyBjYWxsIHN0dWIgbWF5IHNlcGFyYXRlbHkgYXNrIHVzIHRvIHVu
bGluaygpLgogICAgIGlmIChpc0xpbmtlZCgpKQotICAgICAgICB1bmxpbmtGb3Iodm0sICp0aGlz
KTsKKyAgICAgICAgdW5saW5rQ2FsbCh2bSwgKnRoaXMpOwogCiAgICAgLy8gRWl0aGVyIHdlIHdl
cmUgdW5saW5rZWQsIGluIHdoaWNoIGNhc2Ugd2Ugc2hvdWxkIG5vdCBoYXZlIGJlZW4gb24gYW55
IGxpc3QsIG9yIHdlIHVubGlua2VkCiAgICAgLy8gb3Vyc2VsdmVzIHNvIHRoYXQgd2UncmUgbm90
IG9uIGFueSBsaXN0IGFueW1vcmUuCiAgICAgUkVMRUFTRV9BU1NFUlQoIWlzT25MaXN0KCkpOwog
fQogCi1Db2RlTG9jYXRpb25OZWFyQ2FsbDxKU0ludGVybmFsUHRyVGFnPiBDYWxsTGlua0luZm86
OmNhbGxSZXR1cm5Mb2NhdGlvbigpCitDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFn
PiBDYWxsTGlua0luZm86OmZhc3RQYXRoU3RhcnQoKQogewotICAgIFJFTEVBU0VfQVNTRVJUKCFp
c0RpcmVjdCgpKTsKLSAgICByZXR1cm4gQ29kZUxvY2F0aW9uTmVhckNhbGw8SlNJbnRlcm5hbFB0
clRhZz4obV9jYWxsUmV0dXJuTG9jYXRpb25PclBhdGNoYWJsZUp1bXAsIE5lYXJDYWxsTW9kZTo6
UmVndWxhcik7CisgICAgcmV0dXJuIENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0cjxKU0ludGVybmFs
UHRyVGFnPihtX2Zhc3RQYXRoU3RhcnQpOwogfQogCi1Db2RlTG9jYXRpb25KdW1wPEpTSW50ZXJu
YWxQdHJUYWc+IENhbGxMaW5rSW5mbzo6cGF0Y2hhYmxlSnVtcCgpCitDb2RlTG9jYXRpb25MYWJl
bDxKU0ludGVybmFsUHRyVGFnPiBDYWxsTGlua0luZm86OnNsb3dQYXRoU3RhcnQoKQogewotICAg
IFJFTEVBU0VfQVNTRVJUKGNhbGxUeXBlKCkgPT0gRGlyZWN0VGFpbENhbGwpOwotICAgIHJldHVy
biBDb2RlTG9jYXRpb25KdW1wPEpTSW50ZXJuYWxQdHJUYWc+KG1fY2FsbFJldHVybkxvY2F0aW9u
T3JQYXRjaGFibGVKdW1wKTsKKyAgICBSRUxFQVNFX0FTU0VSVCghaXNEYXRhSUMoKSk7CisgICAg
cmV0dXJuIHUuY29kZUlDLm1fc2xvd1BhdGhTdGFydDsKIH0KIAotQ29kZUxvY2F0aW9uRGF0YUxh
YmVsUHRyPEpTSW50ZXJuYWxQdHJUYWc+IENhbGxMaW5rSW5mbzo6aG90UGF0aEJlZ2luKCkKK0Nv
ZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IENhbGxMaW5rSW5mbzo6ZG9uZUxvY2F0
aW9uKCkKIHsKICAgICBSRUxFQVNFX0FTU0VSVCghaXNEaXJlY3QoKSk7Ci0gICAgcmV0dXJuIENv
ZGVMb2NhdGlvbkRhdGFMYWJlbFB0cjxKU0ludGVybmFsUHRyVGFnPihtX2hvdFBhdGhCZWdpbk9y
U2xvd1BhdGhTdGFydCk7CisgICAgcmV0dXJuIG1fZG9uZUxvY2F0aW9uOwogfQogCi1Db2RlTG9j
YXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBDYWxsTGlua0luZm86OnNsb3dQYXRoU3RhcnQo
KQotewotICAgIFJFTEVBU0VfQVNTRVJUKGlzRGlyZWN0KCkpOwotICAgIHJldHVybiBtX2hvdFBh
dGhCZWdpbk9yU2xvd1BhdGhTdGFydDsKLX0KLQotdm9pZCBDYWxsTGlua0luZm86OnNldENhbGxl
ZShWTSYgdm0sIEpTQ2VsbCogb3duZXIsIEpTT2JqZWN0KiBjYWxsZWUpCit2b2lkIENhbGxMaW5r
SW5mbzo6c2V0TW9ub21vcnBoaWNDYWxsZWUoVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBKU09iamVj
dCogY2FsbGVlLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gY29kZVB0cikK
IHsKICAgICBSRUxFQVNFX0FTU0VSVCghaXNEaXJlY3QoKSk7CiAgICAgbV9jYWxsZWVPckNvZGVC
bG9jay5zZXQodm0sIG93bmVyLCBjYWxsZWUpOworCisgICAgaWYgKGlzRGF0YUlDKCkpIAorICAg
ICAgICB1LmRhdGFJQy5tX21vbm9tb3JwaGljQ2FsbERlc3RpbmF0aW9uID0gY29kZVB0cjsKKyAg
ICBlbHNlIHsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hOZWFyQ2FsbCh1LmNvZGVJ
Qy5tX2NhbGxMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWw8SlNFbnRyeVB0clRhZz4oY29kZVB0
cikpOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaFBvaW50ZXIodS5jb2RlSUMubV9j
YWxsZWVMb2NhdGlvbiwgY2FsbGVlKTsKKyAgICB9CiB9CiAKIHZvaWQgQ2FsbExpbmtJbmZvOjpj
bGVhckNhbGxlZSgpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoIWlzRGlyZWN0KCkpOwogICAgIG1f
Y2FsbGVlT3JDb2RlQmxvY2suY2xlYXIoKTsKKyAgICBpZiAoaXNEYXRhSUMoKSkKKyAgICAgICAg
dS5kYXRhSUMubV9tb25vbW9ycGhpY0NhbGxEZXN0aW5hdGlvbiA9IG51bGxwdHI7CisgICAgZWxz
ZQorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaFBvaW50ZXIodS5jb2RlSUMubV9jYWxs
ZWVMb2NhdGlvbiwgbnVsbHB0cik7CiB9CiAKIEpTT2JqZWN0KiBDYWxsTGlua0luZm86OmNhbGxl
ZSgpCkBAIC0yODQsNiArMjkzLDIwNiBAQCB2b2lkIENhbGxMaW5rSW5mbzo6c2V0RnJhbWVTaHVm
ZmxlRGF0YShjCiAgICAgbV9mcmFtZVNodWZmbGVEYXRhLT5zaHJpbmtUb0ZpdCgpOwogfQogCit2
b2lkIENhbGxMaW5rSW5mbzo6ZW1pdEZpcnN0SW5zdHJ1Y3Rpb25Gb3JEYXRhSUMoQ0NhbGxIZWxw
ZXJzJiBqaXQsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIpCit7CisgICAgR1BSUmVnIHNjcmF0Y2hH
UFIgPSBqaXQuc2NyYXRjaFJlZ2lzdGVyKCk7CisgICAgRGlzYWxsb3dNYWNyb1NjcmF0Y2hSZWdp
c3RlclVzYWdlIGRpc2FsbG93U2NyYXRjaChqaXQpOworICAgIC8vIFdoZW4gcmVwYXRjaGluZywg
d2UganVzdCBvdmVyd3JpdGUgdGhlIGZpcnN0IGluc3RydWN0aW9uIGJhY2ssIHNpbmNlIGl0J2xs
IGhhdmUgYmVlbiByZXBsYWNlZCB3aXRoIGEganVtcCB0byB0aGUgcG9seW1vcnBoaWMgY2FsbCBz
dHViLgorICAgIHNpemVfdCBzdGFydFNpemUgPSBqaXQubV9hc3NlbWJsZXIuYnVmZmVyKCkuY29k
ZVNpemUoKTsKKyAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoY2FsbExpbmtJ
bmZvR1BSLCBvZmZzZXRPZkNhbGxlZSgpKSwgc2NyYXRjaEdQUik7IAorICAgIHNpemVfdCBsb2Fk
U2l6ZSA9IGppdC5tX2Fzc2VtYmxlci5idWZmZXIoKS5jb2RlU2l6ZSgpIC0gc3RhcnRTaXplOwor
ICAgIGlmIChsb2FkU2l6ZSA8IHN0YXRpY19jYXN0PHNpemVfdD4oQ0NhbGxIZWxwZXJzOjpwYXRj
aGFibGVKdW1wU2l6ZSgpKSkKKyAgICAgICAgaml0LmVtaXROb3BzKHN0YXRpY19jYXN0PHNpemVf
dD4oQ0NhbGxIZWxwZXJzOjpwYXRjaGFibGVKdW1wU2l6ZSgpKSAtIGxvYWRTaXplKTsKK30KKwor
TWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZW1pdEZhc3RQYXRoSW1wbChD
Q2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQ
UiwgVXNlRGF0YUlDIHVzZURhdGFJQywgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JU
YWlsQ2FsbCkKK3sKKyAgICBzZXRVc2VzRGF0YUlDcyh1c2VEYXRhSUMpOworICAgIGlmIChpc0Rh
dGFJQygpKSB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxMaW5rSW5mb0dQUiAhPSBDQ2Fs
bEhlbHBlcnM6OkludmFsaWRHUFJSZWcpOworICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW1QdHIodGhpcyksIGNhbGxMaW5rSW5mb0dQUik7CisgICAgICAgIHUuZGF0YUlD
Lm1fY2FsbExpbmtJbmZvR1BSID0gY2FsbExpbmtJbmZvR1BSOworICAgIH0KKworICAgIGF1dG8g
ZmFzdFBhdGhTdGFydCA9IGppdC5sYWJlbCgpOworICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExp
bmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgbV9mYXN0UGF0aFN0YXJ0ID0gbGlua0J1
ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KGZhc3RQYXRoU3RhcnQpOworICAgIH0p
OworCisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93UGF0aDsKKworICAgIGlmIChpc0Rh
dGFJQygpKSB7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gaml0LnNjcmF0Y2hSZWdpc3Rl
cigpOworICAgICAgICBlbWl0Rmlyc3RJbnN0cnVjdGlvbkZvckRhdGFJQyhqaXQsIGNhbGxMaW5r
SW5mb0dQUik7CisgICAgICAgIHsKKyAgICAgICAgICAgIERpc2FsbG93TWFjcm9TY3JhdGNoUmVn
aXN0ZXJVc2FnZSBkaXNhbGxvd1NjcmF0Y2goaml0KTsKKyAgICAgICAgICAgIHNsb3dQYXRoLmFw
cGVuZChqaXQuYnJhbmNoUHRyKENDYWxsSGVscGVyczo6Tm90RXF1YWwsIHNjcmF0Y2hHUFIsIGNh
bGxlZUdQUikpOworICAgICAgICB9CisgICAgICAgIGlmIChpc1RhaWxDYWxsKCkpIHsKKyAgICAg
ICAgICAgIHByZXBhcmVGb3JUYWlsQ2FsbCgpOworICAgICAgICAgICAgaml0LmZhckp1bXAoQ0Nh
bGxIZWxwZXJzOjpBZGRyZXNzKGNhbGxMaW5rSW5mb0dQUiwgb2Zmc2V0T2ZNb25vbW9ycGhpY0Nh
bGxEZXN0aW5hdGlvbigpKSwgSlNFbnRyeVB0clRhZyk7CisgICAgICAgIH0gZWxzZQorICAgICAg
ICAgICAgaml0LmNhbGwoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGNhbGxMaW5rSW5mb0dQUiwgb2Zm
c2V0T2ZNb25vbW9ycGhpY0NhbGxEZXN0aW5hdGlvbigpKSwgSlNFbnRyeVB0clRhZyk7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpEYXRhTGFiZWxQdHIgY2FsbGVlQ2hlY2s7
CisgICAgICAgIHNsb3dQYXRoLmFwcGVuZChqaXQuYnJhbmNoUHRyV2l0aFBhdGNoKENDYWxsSGVs
cGVyczo6Tm90RXF1YWwsIGNhbGxlZUdQUiwgY2FsbGVlQ2hlY2ssIENDYWxsSGVscGVyczo6VHJ1
c3RlZEltbVB0cihudWxscHRyKSkpOworCisgICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBjYWxs
OworICAgICAgICBpZiAoaXNUYWlsQ2FsbCgpKSB7CisgICAgICAgICAgICBwcmVwYXJlRm9yVGFp
bENhbGwoKTsKKyAgICAgICAgICAgIGNhbGwgPSBqaXQubmVhclRhaWxDYWxsKCk7CisgICAgICAg
IH0gZWxzZQorICAgICAgICAgICAgY2FsbCA9IGppdC5uZWFyQ2FsbCgpOworICAgICAgICBqaXQu
YWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgICAgICAgICB1
LmNvZGVJQy5tX2NhbGxMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPEpT
SW50ZXJuYWxQdHJUYWc+KGNhbGwpOworICAgICAgICAgICAgdS5jb2RlSUMubV9jYWxsZWVMb2Nh
dGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihjYWxsZWVDaGVj
ayk7CisgICAgICAgIH0pOworICAgIH0KKworICAgIHJldHVybiBzbG93UGF0aDsKK30KKworQ0Nh
bGxIZWxwZXJzOjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmVtaXRGYXN0UGF0aChDQ2FsbEhlbHBl
cnMmIGppdCwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0
YUlDIHVzZURhdGFJQykKK3sKKyAgICBSRUxFQVNFX0FTU0VSVCghaXNUYWlsQ2FsbCgpKTsKKyAg
ICByZXR1cm4gZW1pdEZhc3RQYXRoSW1wbChqaXQsIGNhbGxlZUdQUiwgY2FsbExpbmtJbmZvR1BS
LCB1c2VEYXRhSUMsIG51bGxwdHIpOworfQorCitNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2Fs
bExpbmtJbmZvOjplbWl0VGFpbENhbGxGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVn
IGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDIHVzZURhdGFJQywg
V1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkKK3sKKyAgICBSRUxFQVNF
X0FTU0VSVChpc1RhaWxDYWxsKCkpOworICAgIHJldHVybiBlbWl0RmFzdFBhdGhJbXBsKGppdCwg
Y2FsbGVlR1BSLCBjYWxsTGlua0luZm9HUFIsIHVzZURhdGFJQywgV1RGTW92ZShwcmVwYXJlRm9y
VGFpbENhbGwpKTsKK30KKwordm9pZCBDYWxsTGlua0luZm86OmVtaXRTbG93UGF0aChWTSYgdm0s
IENDYWxsSGVscGVycyYgaml0KQoreworICAgIHNldFNsb3dQYXRoQ2FsbERlc3RpbmF0aW9uKHZt
LmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcikudGVtcGxhdGUgcmV0YWdnZWRDb2Rl
PEpTRW50cnlQdHJUYWc+KCkpOworICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bVB0cih0aGlzKSwgR1BSSW5mbzo6cmVnVDIpOworICAgIGppdC5jYWxsKENDYWxsSGVscGVyczo6
QWRkcmVzcyhHUFJJbmZvOjpyZWdUMiwgb2Zmc2V0T2ZTbG93UGF0aENhbGxEZXN0aW5hdGlvbigp
KSwgSlNFbnRyeVB0clRhZyk7Cit9CisKK3ZvaWQgQ2FsbExpbmtJbmZvOjplbWl0RGlyZWN0RmFz
dFBhdGgoQ0NhbGxIZWxwZXJzJiBqaXQpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoIWlzVGFpbENh
bGwoKSk7CisKKyAgICBzZXRVc2VzRGF0YUlDcyhVc2VEYXRhSUM6Ok5vKTsKKworICAgIGF1dG8g
ZmFzdFBhdGhTdGFydCA9IGppdC5sYWJlbCgpOworICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExp
bmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgbV9mYXN0UGF0aFN0YXJ0ID0gbGlua0J1
ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KGZhc3RQYXRoU3RhcnQpOworICAgIH0p
OworCisgICAgYXV0byBjYWxsID0gaml0Lm5lYXJDYWxsKCk7CisgICAgaml0LmFkZExpbmtUYXNr
KFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgeworICAgICAgICB1LmNvZGVJQy5tX2NhbGxM
b2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPEpTSW50ZXJuYWxQdHJUYWc+
KGNhbGwpOworICAgIH0pOworICAgIGppdC5hZGRMYXRlTGlua1Rhc2soW3RoaXNdIChMaW5rQnVm
ZmVyJikgeworICAgICAgICBpbml0aWFsaXplRGlyZWN0Q2FsbCgpOworICAgIH0pOworfQorCit2
b2lkIENhbGxMaW5rSW5mbzo6ZW1pdERpcmVjdFRhaWxDYWxsRmFzdFBhdGgoQ0NhbGxIZWxwZXJz
JiBqaXQsIFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpCit7CisgICAg
UkVMRUFTRV9BU1NFUlQoaXNUYWlsQ2FsbCgpKTsKKworICAgIHNldFVzZXNEYXRhSUNzKFVzZURh
dGFJQzo6Tm8pOworCisgICAgYXV0byBmYXN0UGF0aFN0YXJ0ID0gaml0LmxhYmVsKCk7CisgICAg
aml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgeworICAgICAgICBt
X2Zhc3RQYXRoU3RhcnQgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4o
ZmFzdFBhdGhTdGFydCk7CisgICAgfSk7CisKKyAgICAvLyAtIElmIHdlJ3JlIG5vdCB5ZXQgbGlu
a2VkLCB0aGlzIGlzIGEganVtcCB0byB0aGUgc2xvdyBwYXRoLgorICAgIC8vIC0gT25jZSB3ZSdy
ZSBsaW5rZWQgdG8gYSBmYXN0IHBhdGgsIHRoaXMgZ29lcyBiYWNrIHRvIGJlaW5nIG5vcHMgc28g
d2UgZmFsbCB0aHJvdWdoIHRvIHRoZSBsaW5rZWQganVtcC4KKyAgICBqaXQuZW1pdE5vcHMoQ0Nh
bGxIZWxwZXJzOjpwYXRjaGFibGVKdW1wU2l6ZSgpKTsKKworICAgIHByZXBhcmVGb3JUYWlsQ2Fs
bCgpOworICAgIGF1dG8gY2FsbCA9IGppdC5uZWFyVGFpbENhbGwoKTsKKyAgICBqaXQuYWRkTGlu
a1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgICAgIHUuY29kZUlDLm1f
Y2FsbExvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8SlNJbnRlcm5hbFB0
clRhZz4oY2FsbCk7CisgICAgfSk7CisgICAgaml0LmFkZExhdGVMaW5rVGFzayhbdGhpc10gKExp
bmtCdWZmZXImKSB7CisgICAgICAgIGluaXRpYWxpemVEaXJlY3RDYWxsKCk7CisgICAgfSk7Cit9
CisKK3ZvaWQgQ2FsbExpbmtJbmZvOjppbml0aWFsaXplRGlyZWN0Q2FsbCgpCit7CisgICAgUkVM
RUFTRV9BU1NFUlQoaXNEaXJlY3QoKSk7CisgICAgQVNTRVJUKHUuY29kZUlDLm1fY2FsbExvY2F0
aW9uKTsKKyAgICBpZiAoaXNUYWlsQ2FsbCgpKSB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGZh
c3RQYXRoU3RhcnQoKSk7CisgICAgICAgIENDYWxsSGVscGVyczo6ZW1pdEpJVENvZGVPdmVyKGZh
c3RQYXRoU3RhcnQoKSwgWyZdIChDQ2FsbEhlbHBlcnMmIGppdCkgeworICAgICAgICAgICAgYXV0
byBqdW1wID0gaml0Lmp1bXAoKTsKKyAgICAgICAgICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExp
bmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmso
anVtcCwgc2xvd1BhdGhTdGFydCgpKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9LCAiaW5p
dGlhbGl6ZSBkaXJlY3QgY2FsbCIpOworICAgIH0gZWxzZQorICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6cmVwYXRjaE5lYXJDYWxsKHUuY29kZUlDLm1fY2FsbExvY2F0aW9uLCBzbG93UGF0aFN0YXJ0
KCkpOworfQorCit2b2lkIENhbGxMaW5rSW5mbzo6c2V0RGlyZWN0Q2FsbFRhcmdldChDb2RlTG9j
YXRpb25MYWJlbDxKU0VudHJ5UHRyVGFnPiB0YXJnZXQpCit7CisgICAgUkVMRUFTRV9BU1NFUlQo
aXNEaXJlY3QoKSk7CisKKyAgICBpZiAoaXNUYWlsQ2FsbCgpKSB7CisgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKGZhc3RQYXRoU3RhcnQoKSk7CisgICAgICAgIENDYWxsSGVscGVyczo6ZW1pdEpJVENv
ZGVPdmVyKGZhc3RQYXRoU3RhcnQoKSwgWyZdIChDQ2FsbEhlbHBlcnMmIGppdCkgeworICAgICAg
ICAgICAgLy8gV2UgcmVzZXJ2ZWQgdGhpcyBtYW55IGJ5dGVzIGZvciB0aGUganVtcCBhdCBmYXN0
UGF0aFN0YXJ0KCkuIE1ha2UgdGhhdAorICAgICAgICAgICAgLy8gY29kZSBub3BzIG5vdyBzbyB3
ZSBmYWxsIHRocm91Z2ggdG8gdGhlIGp1bXAgdG8gdGhlIGZhc3QgcGF0aC4KKyAgICAgICAgICAg
IGppdC5lbWl0Tm9wcyhDQ2FsbEhlbHBlcnM6OnBhdGNoYWJsZUp1bXBTaXplKCkpOyAKKyAgICAg
ICAgfSwgIlNldHRpbmcgZGlyZWN0IGNhbGwgdGFyZ2V0Iik7CisgICAgfQorCisgICAgTWFjcm9B
c3NlbWJsZXI6OnJlcGF0Y2hOZWFyQ2FsbCh1LmNvZGVJQy5tX2NhbGxMb2NhdGlvbiwgdGFyZ2V0
KTsKK30KKwordm9pZCBDYWxsTGlua0luZm86OnNldFNsb3dQYXRoQ2FsbERlc3RpbmF0aW9uKE1h
Y3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBjb2RlUHRyKQoreworICAgIG1fc2xv
d1BhdGhDYWxsRGVzdGluYXRpb24gPSBjb2RlUHRyOworfQorCit2b2lkIENhbGxMaW5rSW5mbzo6
cmV2ZXJ0Q2FsbFRvU3R1YigpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoc3R1YigpKTsKKyAgICAv
LyBUaGUgc3RhcnQgb2Ygb3VyIEpJVCBjb2RlIGlzIG5vdyBhIGp1bXAgdG8gdGhlIHBvbHltb3Jw
aGljIHN0dWIuIFJld3JpdGUgdGhlIGZpcnN0IGluc3RydWN0aW9uCisgICAgLy8gdG8gYmUgd2hh
dCB3ZSBuZWVkIGZvciBub24gc3R1YiBJQ3MuCisKKyAgICAvLyB0aGlzIHJ1bnMgaW50byBzb21l
IGJyYW5jaCBjb21wYWN0aW9uIGNyYXAgSSdkIGxpa2UgdG8gYXZvaWQgZm9yIG5vdy4gRXNzZW50
aWFsbHksIHRoZSBicmFuY2gKKyAgICAvLyBkb2Vzbid0IGtub3cgaWYgaXQgY2FuIGJlIGNvbXBh
Y3RlZCBvciBub3QuIFNvIHdlIGVuZCB1cCB3aXRoIDI4IGJ5dGVzIG9mIG1hY2hpbmUgY29kZSwg
Zm9yCisgICAgLy8gd2hhdCBpbiBhbGwgbGlrZWxpaG9vZCBmaXRzIGluIDI0LiBTbyB3ZSBqdXN0
IHNwbGF0IG91dCB0aGUgZmlyc3QgaW5zdHJ1Y3Rpb24uIExvbmcgdGVybSwgd2UKKyAgICAvLyBu
ZWVkIHNvbWV0aGluZyBjbGVhbmVyLiBCdXQgdGhpcyB3b3JrcyBvbiBhcm02NCBmb3Igbm93Lgor
CisgICAgQ0NhbGxIZWxwZXJzOjplbWl0SklUQ29kZU92ZXIoZmFzdFBhdGhTdGFydCgpLCBbJl0g
KENDYWxsSGVscGVycyYgaml0KSB7CisgICAgICAgIGlmIChpc0RhdGFJQygpKQorICAgICAgICAg
ICAgZW1pdEZpcnN0SW5zdHJ1Y3Rpb25Gb3JEYXRhSUMoaml0LCB1LmRhdGFJQy5tX2NhbGxMaW5r
SW5mb0dQUik7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpyZXZl
cnRKdW1wUmVwbGFjZW1lbnRUb0JyYW5jaFB0cldpdGhQYXRjaCgKKyAgICAgICAgICAgICAgICBD
Q2FsbEhlbHBlcnM6OnN0YXJ0T2ZCcmFuY2hQdHJXaXRoUGF0Y2hPblJlZ2lzdGVyKHUuY29kZUlD
Lm1fY2FsbGVlTG9jYXRpb24pLCBjYWxsZWVHUFIoKSwgbnVsbHB0cik7CisgICAgICAgIH0KKyAg
ICB9LCAgIlJlc2V0dGluZyBQb2x5bW9ycGhpY0NhbGwgc3R1YmJlZCBDYWxsTGlua0luZm8iKTsK
K30KKwordm9pZCBDYWxsTGlua0luZm86OnNldFN0dWIoUmVmPFBvbHltb3JwaGljQ2FsbFN0dWJS
b3V0aW5lPiYmIG5ld1N0dWIpCit7CisgICAgY2xlYXJTdHViKCk7CisgICAgbV9zdHViID0gV1RG
TW92ZShuZXdTdHViKTsKKworICAgIGlmIChpc0RhdGFJQygpKSB7CisgICAgICAgIENDYWxsSGVs
cGVyczo6ZW1pdEpJVENvZGVPdmVyKGZhc3RQYXRoU3RhcnQoKSwgWyZdIChDQ2FsbEhlbHBlcnMm
IGppdCkgeworICAgICAgICAgICAgYXV0byBqdW1wID0gaml0Lmp1bXAoKTsKKyAgICAgICAgICAg
IGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAg
ICAgICAgICBsaW5rQnVmZmVyLmxpbmsoanVtcCwgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJv
dXRpbmVQdHJUYWc+KG1fc3R1Yi0+Y29kZSgpLmNvZGUoKSkpOworICAgICAgICAgICAgfSk7Cisg
ICAgICAgIH0sICJQYXRjaGluZyBjYWxsIHRvIFBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lIGlu
IENhbGxMaW5rSW5mbyIpOworICAgIH0gZWxzZSB7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpy
ZXBsYWNlV2l0aEp1bXAoCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6c3RhcnRPZkJyYW5j
aFB0cldpdGhQYXRjaE9uUmVnaXN0ZXIodS5jb2RlSUMubV9jYWxsZWVMb2NhdGlvbiksCisgICAg
ICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4obV9zdHViLT5j
b2RlKCkuY29kZSgpKSk7CisgICAgfQorfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKICNlbmRpZiAv
LyBFTkFCTEUoSklUKQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2Fs
bExpbmtJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NhbGxMaW5rSW5mby5oCShyZXZpc2lvbiAyNzc0NDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDEyICszMCwx
NCBAQAogI2luY2x1ZGUgIkNvZGVTcGVjaWFsaXphdGlvbktpbmQuaCIKICNpbmNsdWRlICJQb2x5
bW9ycGhpY0NhbGxTdHViUm91dGluZS5oIgogI2luY2x1ZGUgIldyaXRlQmFycmllci5oIgorI2lu
Y2x1ZGUgPHd0Zi9GdW5jdGlvbi5oPgogI2luY2x1ZGUgPHd0Zi9TZW50aW5lbExpbmtlZExpc3Qu
aD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKICNpZiBFTkFCTEUoSklUKQogCitjbGFzcyBDQ2FsbEhl
bHBlcnM7CiBjbGFzcyBGdW5jdGlvbkNvZGVCbG9jazsKIGNsYXNzIEpTRnVuY3Rpb247CiBlbnVt
IE9wY29kZUlEIDogdW5zaWduZWQ7CkBAIC0xNjMsMTYgKzE2NSwzOCBAQCBwdWJsaWM6CiAgICAg
ICAgIG1fY2FsbGVlR1BSID0gY2FsbGVlR1BSOwogICAgIH0KIAotICAgIHZvaWQgc2V0Q2FsbExv
Y2F0aW9ucygKLSAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gY2Fs
bFJldHVybkxvY2F0aW9uT3JQYXRjaGFibGVKdW1wLAotICAgICAgICBDb2RlTG9jYXRpb25MYWJl
bDxKU0ludGVybmFsUHRyVGFnPiBob3RQYXRoQmVnaW5PclNsb3dQYXRoU3RhcnQsCi0gICAgICAg
IENvZGVMb2NhdGlvbk5lYXJDYWxsPEpTSW50ZXJuYWxQdHJUYWc+IGhvdFBhdGhPdGhlcikKLSAg
ICB7Ci0gICAgICAgIG1fY2FsbFJldHVybkxvY2F0aW9uT3JQYXRjaGFibGVKdW1wID0gY2FsbFJl
dHVybkxvY2F0aW9uT3JQYXRjaGFibGVKdW1wOwotICAgICAgICBtX2hvdFBhdGhCZWdpbk9yU2xv
d1BhdGhTdGFydCA9IGhvdFBhdGhCZWdpbk9yU2xvd1BhdGhTdGFydDsKLSAgICAgICAgbV9ob3RQ
YXRoT3RoZXIgPSBob3RQYXRoT3RoZXI7CisgICAgR1BSUmVnIGNhbGxlZUdQUigpIGNvbnN0IHsg
cmV0dXJuIG1fY2FsbGVlR1BSOyB9CisgICAgCisgICAgZW51bSBjbGFzcyBVc2VEYXRhSUMgOiB1
aW50OF90IHsKKyAgICAgICAgWWVzLAorICAgICAgICBObworICAgIH07CisKK3ByaXZhdGU6Cisg
ICAgdm9pZCBlbWl0Rmlyc3RJbnN0cnVjdGlvbkZvckRhdGFJQyhDQ2FsbEhlbHBlcnMmLCBHUFJS
ZWcgY2FsbExpbmtJbmZvR1BSKTsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdEZh
c3RQYXRoSW1wbChDQ2FsbEhlbHBlcnMmLCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExp
bmtJbmZvR1BSLCBVc2VEYXRhSUMsIFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFp
bENhbGwpIFdBUk5fVU5VU0VEX1JFVFVSTjsKK3B1YmxpYzoKKyAgICBNYWNyb0Fzc2VtYmxlcjo6
SnVtcExpc3QgZW1pdEZhc3RQYXRoKENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQ
UlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQykgV0FSTl9VTlVTRURfUkVUVVJOOworICAg
IE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBlbWl0VGFpbENhbGxGYXN0UGF0aChDQ2FsbEhlbHBl
cnMmLCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUMs
IFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpIFdBUk5fVU5VU0VEX1JF
VFVSTjsKKyAgICB2b2lkIGVtaXREaXJlY3RGYXN0UGF0aChDQ2FsbEhlbHBlcnMmKTsKKyAgICB2
b2lkIGVtaXREaXJlY3RUYWlsQ2FsbEZhc3RQYXRoKENDYWxsSGVscGVycyYsIFdURjo6RnVuY3Rp
b248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpOworICAgIHZvaWQgZW1pdFNsb3dQYXRoKFZN
JiwgQ0NhbGxIZWxwZXJzJik7CisgICAgdm9pZCByZXZlcnRDYWxsVG9TdHViKCk7CisKKyAgICBi
b29sIGlzRGF0YUlDKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8VXNlRGF0YUlDPihtX3Vz
ZURhdGFJQykgPT0gVXNlRGF0YUlDOjpZZXM7IH0KKyAgICB2b2lkIHNldFVzZXNEYXRhSUNzKFVz
ZURhdGFJQyB1c2VEYXRhSUMpIHsgbV91c2VEYXRhSUMgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
dXNlRGF0YUlDKTsgfQorCisgICAgdm9pZCBzZXRDb2RlTG9jYXRpb25zKAorICAgICAgICBDb2Rl
TG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBzbG93UGF0aFN0YXJ0LAorICAgICAgICBD
b2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBkb25lTG9jYXRpb24pCisgICAgewor
ICAgICAgICBpZiAoIWlzRGF0YUlDKCkpCisgICAgICAgICAgICB1LmNvZGVJQy5tX3Nsb3dQYXRo
U3RhcnQgPSBzbG93UGF0aFN0YXJ0OworICAgICAgICBtX2RvbmVMb2NhdGlvbiA9IGRvbmVMb2Nh
dGlvbjsKICAgICB9CiAKKyAgICB2b2lkIGluaXRpYWxpemVEaXJlY3RDYWxsKCk7CisKICAgICBi
b29sIGFsbG93U3R1YnMoKSBjb25zdCB7IHJldHVybiBtX2FsbG93U3R1YnM7IH0KIAogICAgIHZv
aWQgZGlzYWxsb3dTdHVicygpCkBAIC0xODAsMjMgKzIwNCwxOSBAQCBwdWJsaWM6CiAgICAgICAg
IG1fYWxsb3dTdHVicyA9IGZhbHNlOwogICAgIH0KIAotICAgIENvZGVMb2NhdGlvbk5lYXJDYWxs
PEpTSW50ZXJuYWxQdHJUYWc+IGNhbGxSZXR1cm5Mb2NhdGlvbigpOwotICAgIENvZGVMb2NhdGlv
bkp1bXA8SlNJbnRlcm5hbFB0clRhZz4gcGF0Y2hhYmxlSnVtcCgpOwotICAgIENvZGVMb2NhdGlv
bkRhdGFMYWJlbFB0cjxKU0ludGVybmFsUHRyVGFnPiBob3RQYXRoQmVnaW4oKTsKKyAgICBDb2Rl
TG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBmYXN0UGF0aFN0YXJ0KCk7CiAgICAgQ29k
ZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gc2xvd1BhdGhTdGFydCgpOworICAgIENv
ZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IGRvbmVMb2NhdGlvbigpOwogCi0gICAg
Q29kZUxvY2F0aW9uTmVhckNhbGw8SlNJbnRlcm5hbFB0clRhZz4gaG90UGF0aE90aGVyKCkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBtX2hvdFBhdGhPdGhlcjsKLSAgICB9Ci0KLSAgICB2b2lkIHNl
dENhbGxlZShWTSYsIEpTQ2VsbCosIEpTT2JqZWN0KiBjYWxsZWUpOworICAgIHZvaWQgc2V0TW9u
b21vcnBoaWNDYWxsZWUoVk0mLCBKU0NlbGwqLCBKU09iamVjdCogY2FsbGVlLCBNYWNyb0Fzc2Vt
YmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4pOworICAgIHZvaWQgc2V0U2xvd1BhdGhDYWxsRGVz
dGluYXRpb24oTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+KTsKICAgICB2b2lk
IGNsZWFyQ2FsbGVlKCk7CiAgICAgSlNPYmplY3QqIGNhbGxlZSgpOwogCiAgICAgdm9pZCBzZXRD
b2RlQmxvY2soVk0mLCBKU0NlbGwqLCBGdW5jdGlvbkNvZGVCbG9jayopOwogICAgIHZvaWQgY2xl
YXJDb2RlQmxvY2soKTsKICAgICBGdW5jdGlvbkNvZGVCbG9jayogY29kZUJsb2NrKCk7CisgICAg
dm9pZCBzZXREaXJlY3RDYWxsVGFyZ2V0KENvZGVMb2NhdGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+
KTsKIAogICAgIHZvaWQgc2V0TGFzdFNlZW5DYWxsZWUoVk0mLCBjb25zdCBKU0NlbGwqIG93bmVy
LCBKU09iamVjdCogY2FsbGVlKTsKICAgICB2b2lkIGNsZWFyTGFzdFNlZW5DYWxsZWUoKTsKQEAg
LTIwNiwxMiArMjI2LDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0RXhlY3V0YWJsZUR1cmluZ0Nv
bXBpbGF0aW9uKEV4ZWN1dGFibGVCYXNlKik7CiAgICAgRXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFi
bGUoKTsKICAgICAKLSAgICB2b2lkIHNldFN0dWIoUmVmPFBvbHltb3JwaGljQ2FsbFN0dWJSb3V0
aW5lPiYmIG5ld1N0dWIpCi0gICAgewotICAgICAgICBjbGVhclN0dWIoKTsKLSAgICAgICAgbV9z
dHViID0gV1RGTW92ZShuZXdTdHViKTsKLSAgICB9Ci0KKyAgICB2b2lkIHNldFN0dWIoUmVmPFBv
bHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lPiYmKTsKICAgICB2b2lkIGNsZWFyU3R1YigpOwogCiAg
ICAgUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUqIHN0dWIoKSBjb25zdApAQCAtMzExLDYgKzMy
NiwyMSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ2FsbExpbmtJ
bmZvLCBtX3Nsb3dQYXRoQ291bnQpOwogICAgIH0KIAorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zm
c2V0T2ZDYWxsZWUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDYWxs
TGlua0luZm8sIG1fY2FsbGVlT3JDb2RlQmxvY2spOworICAgIH0KKworICAgIHN0YXRpYyBwdHJk
aWZmX3Qgb2Zmc2V0T2ZNb25vbW9ycGhpY0NhbGxEZXN0aW5hdGlvbigpCisgICAgeworICAgICAg
ICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENhbGxMaW5rSW5mbywgdSkgKyBPQkpFQ1RfT0ZGU0VU
T0YoVW5pb25UeXBlLCBkYXRhSUMubV9tb25vbW9ycGhpY0NhbGxEZXN0aW5hdGlvbik7CisgICAg
fQorCisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlNsb3dQYXRoQ2FsbERlc3RpbmF0aW9u
KCkKKyAgICB7CisgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ2FsbExpbmtJbmZvLCBt
X3Nsb3dQYXRoQ2FsbERlc3RpbmF0aW9uKTsKKyAgICB9CisKICAgICBHUFJSZWcgY2FsbGVlR1BS
KCkKICAgICB7CiAgICAgICAgIHJldHVybiBtX2NhbGxlZUdQUjsKQEAgLTM1MiwxMCArMzgyLDI1
IEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgdWludDMyX3QgbV9tYXhBcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcyB7IDAgfTsgLy8gRm9yIHZhcmFyZ3M6IHRoZSBwcm9maWxlZCBt
YXhpbXVtIG51bWJlciBvZiBhcmd1bWVudHMuIEZvciBkaXJlY3Q6IHRoZSBudW1iZXIgb2Ygc3Rh
Y2sgc2xvdHMgYWxsb2NhdGVkIGZvciBhcmd1bWVudHMuCi0gICAgQ29kZUxvY2F0aW9uTGFiZWw8
SlNJbnRlcm5hbFB0clRhZz4gbV9jYWxsUmV0dXJuTG9jYXRpb25PclBhdGNoYWJsZUp1bXA7Ci0g
ICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gbV9ob3RQYXRoQmVnaW5PclNs
b3dQYXRoU3RhcnQ7Ci0gICAgQ29kZUxvY2F0aW9uTmVhckNhbGw8SlNJbnRlcm5hbFB0clRhZz4g
bV9ob3RQYXRoT3RoZXI7CisgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4g
bV9mYXN0UGF0aFN0YXJ0OworICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+
IG1fZG9uZUxvY2F0aW9uOworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFn
PiBtX3Nsb3dQYXRoQ2FsbERlc3RpbmF0aW9uOworICAgIHVuaW9uIFVuaW9uVHlwZSB7CisgICAg
ICAgIFVuaW9uVHlwZSgpIAorICAgICAgICAgICAgOiBkYXRhSUMgeyBudWxscHRyLCBJbnZhbGlk
R1BSUmVnIH0KKyAgICAgICAgeyB9CisgICAgICAgIHN0cnVjdCBEYXRhSUMgeworICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IG1fbW9ub21vcnBoaWNDYWxs
RGVzdGluYXRpb247CisgICAgICAgICAgICBHUFJSZWcgbV9jYWxsTGlua0luZm9HUFI7CisgICAg
ICAgIH0gZGF0YUlDOworCisgICAgICAgIHN0cnVjdCB7CisgICAgICAgICAgICBDb2RlTG9jYXRp
b25OZWFyQ2FsbDxKU0ludGVybmFsUHRyVGFnPiBtX2NhbGxMb2NhdGlvbjsKKyAgICAgICAgICAg
IENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0cjxKU0ludGVybmFsUHRyVGFnPiBtX2NhbGxlZUxvY2F0
aW9uOworICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gbV9z
bG93UGF0aFN0YXJ0OworICAgICAgICB9IGNvZGVJQzsKKyAgICB9IHU7CisKICAgICBXcml0ZUJh
cnJpZXI8SlNDZWxsPiBtX2NhbGxlZU9yQ29kZUJsb2NrOwogICAgIFdyaXRlQmFycmllcjxKU0Nl
bGw+IG1fbGFzdFNlZW5DYWxsZWVPckV4ZWN1dGFibGU7CiAgICAgUmVmUHRyPFBvbHltb3JwaGlj
Q2FsbFN0dWJSb3V0aW5lPiBtX3N0dWI7CkBAIC0zNjksOCArNDE0LDEwIEBAIHByaXZhdGU6CiAg
ICAgYm9vbCBtX2FsbG93U3R1YnMgOiAxOwogICAgIGJvb2wgbV9jbGVhcmVkQnlKZXR0aXNvbiA6
IDE7CiAgICAgdW5zaWduZWQgbV9jYWxsVHlwZSA6IDQ7IC8vIENhbGxUeXBlCisgICAgdW5zaWdu
ZWQgbV91c2VEYXRhSUMgOiAxOyAvLyBVc2VEYXRhSUMKICAgICBHUFJSZWcgbV9jYWxsZWVHUFIg
eyBJbnZhbGlkR1BSUmVnIH07CiAgICAgdWludDMyX3QgbV9zbG93UGF0aENvdW50IHsgMCB9Owor
ICAgIHVpbnQzMl90IG1fbWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgeyAwIH07IC8vIEZv
ciB2YXJhcmdzOiB0aGUgcHJvZmlsZWQgbWF4aW11bSBudW1iZXIgb2YgYXJndW1lbnRzLiBGb3Ig
ZGlyZWN0OiB0aGUgbnVtYmVyIG9mIHN0YWNrIHNsb3RzIGFsbG9jYXRlZCBmb3IgYXJndW1lbnRz
LgogfTsKIAogaW5saW5lIENvZGVPcmlnaW4gZ2V0Q2FsbExpbmtJbmZvQ29kZU9yaWdpbihDYWxs
TGlua0luZm8mIGNhbGxMaW5rSW5mbykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHSklUQ29tcGlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHSklUQ29tcGlsZXIuY3BwCShyZXZpc2lvbiAyNzc0NDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjU3LDMx
ICsyNTcsMTggQEAgdm9pZCBKSVRDb21waWxlcjo6bGluayhMaW5rQnVmZmVyJiBsaW5rQgogICAg
IGZpbmFsaXplSW5saW5lQ2FjaGVzKG1faW5zdGFuY2VPZnMsIGxpbmtCdWZmZXIpOwogICAgIGZp
bmFsaXplSW5saW5lQ2FjaGVzKG1fcHJpdmF0ZUJyYW5kQWNjZXNzZXMsIGxpbmtCdWZmZXIpOwog
Ci0gICAgYXV0byBsaW5rQ2FsbFRodW5rID0gRnVuY3Rpb25QdHI8Tm9QdHJUYWc+KHZtKCkuZ2V0
Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkp
OwogICAgIGZvciAoYXV0byYgcmVjb3JkIDogbV9qc0NhbGxzKSB7CiAgICAgICAgIENhbGxMaW5r
SW5mbyYgaW5mbyA9ICpyZWNvcmQuaW5mbzsKLSAgICAgICAgbGlua0J1ZmZlci5saW5rKHJlY29y
ZC5zbG93Q2FsbCwgbGlua0NhbGxUaHVuayk7Ci0gICAgICAgIGluZm8uc2V0Q2FsbExvY2F0aW9u
cygKLSAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+KGxpbmtC
dWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPEpTSW50ZXJuYWxQdHJUYWc+KHJlY29yZC5zbG93Q2Fs
bCkpLAotICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4obGlu
a0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KHJlY29yZC50YXJnZXRUb0NoZWNr
KSksCi0gICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxKU0ludGVybmFs
UHRyVGFnPihyZWNvcmQuZmFzdENhbGwpKTsKKyAgICAgICAgaW5mby5zZXRDb2RlTG9jYXRpb25z
KAorICAgICAgICAgICAgbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KHJl
Y29yZC5zbG93UGF0aFN0YXJ0KSwKKyAgICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZjxK
U0ludGVybmFsUHRyVGFnPihyZWNvcmQuZG9uZUxvY2F0aW9uKSk7CiAgICAgfQogICAgIAotICAg
IGZvciAoSlNEaXJlY3RDYWxsUmVjb3JkJiByZWNvcmQgOiBtX2pzRGlyZWN0Q2FsbHMpIHsKKyAg
ICBmb3IgKGF1dG8mIHJlY29yZCA6IG1fanNEaXJlY3RDYWxscykgewogICAgICAgICBDYWxsTGlu
a0luZm8mIGluZm8gPSAqcmVjb3JkLmluZm87Ci0gICAgICAgIGxpbmtCdWZmZXIubGluayhyZWNv
cmQuY2FsbCwgbGlua0J1ZmZlci5sb2NhdGlvbk9mPE5vUHRyVGFnPihyZWNvcmQuc2xvd1BhdGgp
KTsKLSAgICAgICAgaW5mby5zZXRDYWxsTG9jYXRpb25zKAotICAgICAgICAgICAgQ29kZUxvY2F0
aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4oKSwKKyAgICAgICAgaW5mby5zZXRDb2RlTG9jYXRp
b25zKAogICAgICAgICAgICAgbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+
KHJlY29yZC5zbG93UGF0aCksCi0gICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFy
Q2FsbDxKU0ludGVybmFsUHRyVGFnPihyZWNvcmQuY2FsbCkpOwotICAgIH0KLSAgICAKLSAgICBm
b3IgKEpTRGlyZWN0VGFpbENhbGxSZWNvcmQmIHJlY29yZCA6IG1fanNEaXJlY3RUYWlsQ2FsbHMp
IHsKLSAgICAgICAgQ2FsbExpbmtJbmZvJiBpbmZvID0gKnJlY29yZC5pbmZvOwotICAgICAgICBp
bmZvLnNldENhbGxMb2NhdGlvbnMoCi0gICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8
SlNJbnRlcm5hbFB0clRhZz4ocmVjb3JkLnBhdGNoYWJsZUp1bXApLAotICAgICAgICAgICAgbGlu
a0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KHJlY29yZC5zbG93UGF0aCksCi0g
ICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxKU0ludGVybmFsUHRyVGFn
PihyZWNvcmQuY2FsbCkpOworICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5h
bFB0clRhZz4oKSk7CiAgICAgfQogCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCShyZXZpc2lvbiAy
Nzc0NDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTIxOSwxOSArMjE5LDE0IEBAIHB1YmxpYzoKICAgICAgICAgbV9wcml2
YXRlQnJhbmRBY2Nlc3Nlcy5hcHBlbmQoSW5saW5lQ2FjaGVXcmFwcGVyPEpJVFByaXZhdGVCcmFu
ZEFjY2Vzc0dlbmVyYXRvcj4oZ2VuLCBzbG93UGF0aCkpOwogICAgIH0KIAotICAgIHZvaWQgYWRk
SlNDYWxsKENhbGwgZmFzdENhbGwsIENhbGwgc2xvd0NhbGwsIERhdGFMYWJlbFB0ciB0YXJnZXRU
b0NoZWNrLCBDYWxsTGlua0luZm8qIGluZm8pCisgICAgdm9pZCBhZGRKU0NhbGwoTGFiZWwgc2xv
d1BhdGhTdGFydCwgTGFiZWwgZG9uZUxvY2F0aW9uLCBDYWxsTGlua0luZm8qIGluZm8pCiAgICAg
ewotICAgICAgICBtX2pzQ2FsbHMuYXBwZW5kKEpTQ2FsbFJlY29yZChmYXN0Q2FsbCwgc2xvd0Nh
bGwsIHRhcmdldFRvQ2hlY2ssIGluZm8pKTsKKyAgICAgICAgbV9qc0NhbGxzLmFwcGVuZChKU0Nh
bGxSZWNvcmQoc2xvd1BhdGhTdGFydCwgZG9uZUxvY2F0aW9uLCBpbmZvKSk7CiAgICAgfQogICAg
IAotICAgIHZvaWQgYWRkSlNEaXJlY3RDYWxsKENhbGwgY2FsbCwgTGFiZWwgc2xvd1BhdGgsIENh
bGxMaW5rSW5mbyogaW5mbykKKyAgICB2b2lkIGFkZEpTRGlyZWN0Q2FsbChMYWJlbCBzbG93UGF0
aCwgQ2FsbExpbmtJbmZvKiBpbmZvKQogICAgIHsKLSAgICAgICAgbV9qc0RpcmVjdENhbGxzLmFw
cGVuZChKU0RpcmVjdENhbGxSZWNvcmQoY2FsbCwgc2xvd1BhdGgsIGluZm8pKTsKLSAgICB9Ci0g
ICAgCi0gICAgdm9pZCBhZGRKU0RpcmVjdFRhaWxDYWxsKFBhdGNoYWJsZUp1bXAgcGF0Y2hhYmxl
SnVtcCwgQ2FsbCBjYWxsLCBMYWJlbCBzbG93UGF0aCwgQ2FsbExpbmtJbmZvKiBpbmZvKQotICAg
IHsKLSAgICAgICAgbV9qc0RpcmVjdFRhaWxDYWxscy5hcHBlbmQoSlNEaXJlY3RUYWlsQ2FsbFJl
Y29yZChwYXRjaGFibGVKdW1wLCBjYWxsLCBzbG93UGF0aCwgaW5mbykpOworICAgICAgICBtX2pz
RGlyZWN0Q2FsbHMuYXBwZW5kKEpTRGlyZWN0Q2FsbFJlY29yZChzbG93UGF0aCwgaW5mbykpOwog
ICAgIH0KICAgICAKICAgICB2b2lkIGFkZFdlYWtSZWZlcmVuY2UoSlNDZWxsKiB0YXJnZXQpCkBA
IC0zMjgsNTIgKzMyMywyOCBAQCBwcml2YXRlOgogCiAKICAgICBzdHJ1Y3QgSlNDYWxsUmVjb3Jk
IHsKLSAgICAgICAgSlNDYWxsUmVjb3JkKENhbGwgZmFzdENhbGwsIENhbGwgc2xvd0NhbGwsIERh
dGFMYWJlbFB0ciB0YXJnZXRUb0NoZWNrLCBDYWxsTGlua0luZm8qIGluZm8pCi0gICAgICAgICAg
ICA6IGZhc3RDYWxsKGZhc3RDYWxsKQotICAgICAgICAgICAgLCBzbG93Q2FsbChzbG93Q2FsbCkK
LSAgICAgICAgICAgICwgdGFyZ2V0VG9DaGVjayh0YXJnZXRUb0NoZWNrKQorICAgICAgICBKU0Nh
bGxSZWNvcmQoTGFiZWwgc2xvd1BhdGhTdGFydCwgTGFiZWwgZG9uZUxvY2F0aW9uLCBDYWxsTGlu
a0luZm8qIGluZm8pCisgICAgICAgICAgICA6IHNsb3dQYXRoU3RhcnQoc2xvd1BhdGhTdGFydCkK
KyAgICAgICAgICAgICwgZG9uZUxvY2F0aW9uKGRvbmVMb2NhdGlvbikKICAgICAgICAgICAgICwg
aW5mbyhpbmZvKQogICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQoZmFzdENhbGwuaXNGbGFn
U2V0KENhbGw6Ok5lYXIpKTsKLSAgICAgICAgICAgIEFTU0VSVChzbG93Q2FsbC5pc0ZsYWdTZXQo
Q2FsbDo6TmVhcikpOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBDYWxsIGZhc3RDYWxs
OwotICAgICAgICBDYWxsIHNsb3dDYWxsOwotICAgICAgICBEYXRhTGFiZWxQdHIgdGFyZ2V0VG9D
aGVjazsKKyAgICAgICAgTGFiZWwgc2xvd1BhdGhTdGFydDsKKyAgICAgICAgTGFiZWwgZG9uZUxv
Y2F0aW9uOwogICAgICAgICBDYWxsTGlua0luZm8qIGluZm87CiAgICAgfTsKICAgICAKICAgICBz
dHJ1Y3QgSlNEaXJlY3RDYWxsUmVjb3JkIHsKLSAgICAgICAgSlNEaXJlY3RDYWxsUmVjb3JkKENh
bGwgY2FsbCwgTGFiZWwgc2xvd1BhdGgsIENhbGxMaW5rSW5mbyogaW5mbykKLSAgICAgICAgICAg
IDogY2FsbChjYWxsKQotICAgICAgICAgICAgLCBzbG93UGF0aChzbG93UGF0aCkKLSAgICAgICAg
ICAgICwgaW5mbyhpbmZvKQotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQoY2FsbC5pc0Zs
YWdTZXQoQ2FsbDo6TmVhcikpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBDYWxsIGNh
bGw7Ci0gICAgICAgIExhYmVsIHNsb3dQYXRoOwotICAgICAgICBDYWxsTGlua0luZm8qIGluZm87
Ci0gICAgfTsKLSAgICAKLSAgICBzdHJ1Y3QgSlNEaXJlY3RUYWlsQ2FsbFJlY29yZCB7Ci0gICAg
ICAgIEpTRGlyZWN0VGFpbENhbGxSZWNvcmQoUGF0Y2hhYmxlSnVtcCBwYXRjaGFibGVKdW1wLCBD
YWxsIGNhbGwsIExhYmVsIHNsb3dQYXRoLCBDYWxsTGlua0luZm8qIGluZm8pCi0gICAgICAgICAg
ICA6IHBhdGNoYWJsZUp1bXAocGF0Y2hhYmxlSnVtcCkKLSAgICAgICAgICAgICwgY2FsbChjYWxs
KQotICAgICAgICAgICAgLCBzbG93UGF0aChzbG93UGF0aCkKKyAgICAgICAgSlNEaXJlY3RDYWxs
UmVjb3JkKExhYmVsIHNsb3dQYXRoLCBDYWxsTGlua0luZm8qIGluZm8pCisgICAgICAgICAgICA6
IHNsb3dQYXRoKHNsb3dQYXRoKQogICAgICAgICAgICAgLCBpbmZvKGluZm8pCiAgICAgICAgIHsK
LSAgICAgICAgICAgIEFTU0VSVChjYWxsLmlzRmxhZ1NldChDYWxsOjpOZWFyKSAmJiBjYWxsLmlz
RmxhZ1NldChDYWxsOjpUYWlsKSk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIFBhdGNo
YWJsZUp1bXAgcGF0Y2hhYmxlSnVtcDsKLSAgICAgICAgQ2FsbCBjYWxsOwogICAgICAgICBMYWJl
bCBzbG93UGF0aDsKICAgICAgICAgQ2FsbExpbmtJbmZvKiBpbmZvOwogICAgIH07Ci0KICAgICAK
ICAgICBWZWN0b3I8SW5saW5lQ2FjaGVXcmFwcGVyPEpJVEdldEJ5SWRHZW5lcmF0b3I+LCA0PiBt
X2dldEJ5SWRzOwogICAgIFZlY3RvcjxJbmxpbmVDYWNoZVdyYXBwZXI8SklUR2V0QnlJZFdpdGhU
aGlzR2VuZXJhdG9yPiwgND4gbV9nZXRCeUlkc1dpdGhUaGlzOwpAQCAtMzg2LDcgKzM1Nyw2IEBA
IHByaXZhdGU6CiAgICAgVmVjdG9yPElubGluZUNhY2hlV3JhcHBlcjxKSVRQcml2YXRlQnJhbmRB
Y2Nlc3NHZW5lcmF0b3I+LCA0PiBtX3ByaXZhdGVCcmFuZEFjY2Vzc2VzOwogICAgIFZlY3RvcjxK
U0NhbGxSZWNvcmQsIDQ+IG1fanNDYWxsczsKICAgICBWZWN0b3I8SlNEaXJlY3RDYWxsUmVjb3Jk
LCA0PiBtX2pzRGlyZWN0Q2FsbHM7Ci0gICAgVmVjdG9yPEpTRGlyZWN0VGFpbENhbGxSZWNvcmQs
IDQ+IG1fanNEaXJlY3RUYWlsQ2FsbHM7CiAgICAgU2VnbWVudGVkVmVjdG9yPE9TUkV4aXRDb21w
aWxhdGlvbkluZm8sIDQ+IG1fZXhpdENvbXBpbGF0aW9uSW5mbzsKICAgICBWZWN0b3I8VmVjdG9y
PExhYmVsPj4gbV9leGl0U2l0ZUxhYmVsczsKICAgICBWZWN0b3I8REZHOjpPU1JFbnRyeURhdGE+
IG1fb3NyRW50cnk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRD
b21waWxlckNvbW1vbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwCShyZXZpc2lvbiAyNzc0NDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTIwOSw3ICsyMDksNyBAQCBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
PEpTRW50cnlQdHJUCiAgICAgICAgICAgICAgICAgYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXIt
PmdldENhbGxMaW5rSW5mb0ZvckJ5dGVjb2RlSW5kZXgoY2FsbEJ5dGVjb2RlSW5kZXgpOwogICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY2FsbExpbmtJbmZvKTsKIAotICAgICAgICAgICAganVt
cFRhcmdldCA9IGNhbGxMaW5rSW5mby0+Y2FsbFJldHVybkxvY2F0aW9uKCkucmV0YWdnZWQ8SlNF
bnRyeVB0clRhZz4oKTsKKyAgICAgICAgICAgIGp1bXBUYXJnZXQgPSBjYWxsTGlua0luZm8tPmRv
bmVMb2NhdGlvbigpLnJldGFnZ2VkPEpTRW50cnlQdHJUYWc+KCk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJh
dGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3Bl
cmF0aW9ucy5jcHAJKHJldmlzaW9uIDI3NzQ0MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2MTYsNyArMzYxNiw3IEBA
IEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25MaW5rRGkKICAgICAgICAgICAgIGNv
ZGVQdHIgPSBmdW5jdGlvbkV4ZWN1dGFibGUtPmVudHJ5cG9pbnRGb3Ioa2luZCwgQXJpdHlDaGVj
a05vdFJlcXVpcmVkKTsKICAgICB9CiAgICAgCi0gICAgbGlua0RpcmVjdEZvcihjYWxsRnJhbWUs
ICpjYWxsTGlua0luZm8sIGNvZGVCbG9jaywgY29kZVB0cik7CisgICAgbGlua0RpcmVjdENhbGwo
Y2FsbEZyYW1lLCAqY2FsbExpbmtJbmZvLCBjb2RlQmxvY2ssIGNvZGVQdHIpOwogfQogCiBKU0Nf
REVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uVHJpZ2dlclJlb3B0aW1pemF0aW9uTm93LCB2
b2lkLCAoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvZGVCbG9jayogb3B0aW1pemVkQ29kZUJsb2Nr
LCBPU1JFeGl0QmFzZSogZXhpdCkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDI3NzQ0MCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTgzMCwxOCArODMwLDE0IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5v
ZGUqIG5vZGUKICAgICAgICAgaWYgKGlzVGFpbCkgewogICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlQobm9kZS0+b3AoKSA9PSBEaXJlY3RUYWlsQ2FsbCk7CiAgICAgICAgICAgICAKLSAgICAgICAg
ICAgIEpJVENvbXBpbGVyOjpQYXRjaGFibGVKdW1wIHBhdGNoYWJsZUp1bXAgPSBtX2ppdC5wYXRj
aGFibGVKdW1wKCk7CiAgICAgICAgICAgICBKSVRDb21waWxlcjo6TGFiZWwgbWFpblBhdGggPSBt
X2ppdC5sYWJlbCgpOwotICAgICAgICAgICAgCiAgICAgICAgICAgICBtX2ppdC5lbWl0U3RvcmVD
YWxsU2l0ZUluZGV4KGNhbGxTaXRlKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgY2FsbExp
bmtJbmZvLT5zZXRGcmFtZVNodWZmbGVEYXRhKHNodWZmbGVEYXRhKTsKLSAgICAgICAgICAgIENh
bGxGcmFtZVNodWZmbGVyKG1faml0LCBzaHVmZmxlRGF0YSkucHJlcGFyZUZvclRhaWxDYWxsKCk7
Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGwgPSBtX2pp
dC5uZWFyVGFpbENhbGwoKTsKLSAgICAgICAgICAgIAorCisgICAgICAgICAgICBjYWxsTGlua0lu
Zm8tPmVtaXREaXJlY3RUYWlsQ2FsbEZhc3RQYXRoKG1faml0LCBbJl0geworICAgICAgICAgICAg
ICAgIGNhbGxMaW5rSW5mby0+c2V0RnJhbWVTaHVmZmxlRGF0YShzaHVmZmxlRGF0YSk7CisgICAg
ICAgICAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIobV9qaXQsIHNodWZmbGVEYXRhKS5wcmVwYXJl
Rm9yVGFpbENhbGwoKTsKKyAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgSklUQ29tcGlsZXI6
OkxhYmVsIHNsb3dQYXRoID0gbV9qaXQubGFiZWwoKTsKLSAgICAgICAgICAgIHBhdGNoYWJsZUp1
bXAubV9qdW1wLmxpbmtUbyhzbG93UGF0aCwgJm1faml0KTsKICAgICAgICAgICAgIAogICAgICAg
ICAgICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMoSW52YWxpZEdQUlJlZyk7CiAgICAgICAgICAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkxpbmtEaXJlY3RDYWxsLCBjYWxsTGlua0luZm8sIGNh
bGxlZUdQUik7CkBAIC04NTEsMTUgKzg0NywxMyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0
Q2FsbChOb2RlKiBub2RlCiAgICAgICAgICAgICAKICAgICAgICAgICAgIHVzZUNoaWxkcmVuKG5v
ZGUpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBtX2ppdC5hZGRKU0RpcmVjdFRhaWxDYWxs
KHBhdGNoYWJsZUp1bXAsIGNhbGwsIHNsb3dQYXRoLCBjYWxsTGlua0luZm8pOworICAgICAgICAg
ICAgbV9qaXQuYWRkSlNEaXJlY3RDYWxsKHNsb3dQYXRoLCBjYWxsTGlua0luZm8pOwogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBKSVRDb21waWxlcjo6
TGFiZWwgbWFpblBhdGggPSBtX2ppdC5sYWJlbCgpOwotICAgICAgICAKICAgICAgICAgbV9qaXQu
ZW1pdFN0b3JlQ2FsbFNpdGVJbmRleChjYWxsU2l0ZSk7Ci0gICAgICAgIAotICAgICAgICBKSVRD
b21waWxlcjo6Q2FsbCBjYWxsID0gbV9qaXQubmVhckNhbGwoKTsKKyAgICAgICAgY2FsbExpbmtJ
bmZvLT5lbWl0RGlyZWN0RmFzdFBhdGgobV9qaXQpOwogICAgICAgICBKSVRDb21waWxlcjo6SnVt
cCBkb25lID0gbV9qaXQuanVtcCgpOwogICAgICAgICAKICAgICAgICAgSklUQ29tcGlsZXI6Okxh
YmVsIHNsb3dQYXRoID0gbV9qaXQubGFiZWwoKTsKQEAgLTg3NCwzMCArODY4LDI5IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUKICAgICAgICAgCiAgICAgICAgIHNl
dFJlc3VsdEFuZFJlc2V0U3RhY2soKTsKICAgICAgICAgCi0gICAgICAgIG1faml0LmFkZEpTRGly
ZWN0Q2FsbChjYWxsLCBzbG93UGF0aCwgY2FsbExpbmtJbmZvKTsKKyAgICAgICAgbV9qaXQuYWRk
SlNEaXJlY3RDYWxsKHNsb3dQYXRoLCBjYWxsTGlua0luZm8pOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogICAgIAogICAgIG1faml0LmVtaXRTdG9yZUNhbGxTaXRlSW5kZXgoY2FsbFNpdGUpOwog
ICAgIAotICAgIEpJVENvbXBpbGVyOjpEYXRhTGFiZWxQdHIgdGFyZ2V0VG9DaGVjazsKLSAgICBK
SVRDb21waWxlcjo6SnVtcCBzbG93UGF0aCA9IG1faml0LmJyYW5jaFB0cldpdGhQYXRjaChNYWNy
b0Fzc2VtYmxlcjo6Tm90RXF1YWwsIGNhbGxlZUdQUiwgdGFyZ2V0VG9DaGVjaywgVHJ1c3RlZElt
bVB0cihudWxscHRyKSk7Ci0KKyAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dDYXNlczsK
ICAgICBpZiAoaXNUYWlsKSB7Ci0gICAgICAgIGlmIChub2RlLT5vcCgpID09IFRhaWxDYWxsKSB7
Ci0gICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldEZyYW1lU2h1ZmZsZURhdGEoc2h1ZmZsZURh
dGEpOwotICAgICAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIobV9qaXQsIHNodWZmbGVEYXRhKS5w
cmVwYXJlRm9yVGFpbENhbGwoKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG1faml0
LmVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKLSAgICAgICAgICAgIG1faml0LnByZXBhcmVGb3JU
YWlsQ2FsbFNsb3coKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEpJVENvbXBpbGVyOjpDYWxs
IGZhc3RDYWxsID0gaXNUYWlsID8gbV9qaXQubmVhclRhaWxDYWxsKCkgOiBtX2ppdC5uZWFyQ2Fs
bCgpOwotCisgICAgICAgIHNsb3dDYXNlcyA9IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFz
dFBhdGgobV9qaXQsIGNhbGxlZUdQUiwgSW52YWxpZEdQUlJlZywgQ2FsbExpbmtJbmZvOjpVc2VE
YXRhSUM6Ok5vLCBbJl0geworICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gVGFpbENhbGwp
IHsKKyAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldEZyYW1lU2h1ZmZsZURhdGEoc2h1
ZmZsZURhdGEpOworICAgICAgICAgICAgICAgIENhbGxGcmFtZVNodWZmbGVyKG1faml0LCBzaHVm
ZmxlRGF0YSkucHJlcGFyZUZvclRhaWxDYWxsKCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgIG1faml0LmVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKKyAgICAgICAgICAg
ICAgICBtX2ppdC5wcmVwYXJlRm9yVGFpbENhbGxTbG93KCk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0pOworICAgIH0gZWxzZQorICAgICAgICBzbG93Q2FzZXMgPSBjYWxsTGlua0luZm8tPmVt
aXRGYXN0UGF0aChtX2ppdCwgY2FsbGVlR1BSLCBJbnZhbGlkR1BSUmVnLCBDYWxsTGlua0luZm86
OlVzZURhdGFJQzo6Tm8pOwogICAgIEpJVENvbXBpbGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5qdW1w
KCk7CiAKLSAgICBzbG93UGF0aC5saW5rKCZtX2ppdCk7CisgICAgc2xvd0Nhc2VzLmxpbmsoJm1f
aml0KTsKKyAgICBhdXRvIHNsb3dQYXRoU3RhcnQgPSBtX2ppdC5sYWJlbCgpOwogCiAgICAgaWYg
KG5vZGUtPm9wKCkgPT0gVGFpbENhbGwpIHsKICAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIgY2Fs
bEZyYW1lU2h1ZmZsZXIobV9qaXQsIHNodWZmbGVEYXRhKTsKQEAgLTkwNSwyMyArODk4LDIyIEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUKICAgICAgICAgY2FsbEZy
YW1lU2h1ZmZsZXIucHJlcGFyZUZvclNsb3dQYXRoKCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAg
bV9qaXQubW92ZShjYWxsZWVHUFIsIEdQUkluZm86OnJlZ1QwKTsgLy8gQ2FsbGVlIG5lZWRzIHRv
IGJlIGluIHJlZ1QwCi0KICAgICAgICAgaWYgKGlzVGFpbCkKICAgICAgICAgICAgIG1faml0LmVt
aXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsgLy8gVGhpcyBuZWVkcyB0byBoYXBwZW4gYWZ0ZXIgd2Ug
bW92ZWQgY2FsbGVlR1BSIHRvIHJlZ1QwCiAgICAgfQogCi0gICAgbV9qaXQubW92ZShUcnVzdGVk
SW1tUHRyKGNhbGxMaW5rSW5mbyksIEdQUkluZm86OnJlZ1QyKTsgLy8gTGluayBpbmZvIG5lZWRz
IHRvIGJlIGluIHJlZ1QyCiAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRl
cihtX2dyYXBoLCBnbG9iYWxPYmplY3QpLCBHUFJJbmZvOjpyZWdUMyk7IC8vIEpTR2xvYmFsT2Jq
ZWN0IG5lZWRzIHRvIGJlIGluIHJlZ1QzCi0gICAgSklUQ29tcGlsZXI6OkNhbGwgc2xvd0NhbGwg
PSBtX2ppdC5uZWFyQ2FsbCgpOworICAgIGNhbGxMaW5rSW5mby0+ZW1pdFNsb3dQYXRoKHZtKCks
IG1faml0KTsKIAogICAgIGRvbmUubGluaygmbV9qaXQpOworICAgIGF1dG8gZG9uZUxvY2F0aW9u
ID0gbV9qaXQubGFiZWwoKTsKIAogICAgIGlmIChpc1RhaWwpCiAgICAgICAgIG1faml0LmFib3J0
V2l0aFJlYXNvbihKSVREaWRSZXR1cm5Gcm9tVGFpbENhbGwpOwogICAgIGVsc2UKICAgICAgICAg
c2V0UmVzdWx0QW5kUmVzZXRTdGFjaygpOwogCi0gICAgbV9qaXQuYWRkSlNDYWxsKGZhc3RDYWxs
LCBzbG93Q2FsbCwgdGFyZ2V0VG9DaGVjaywgY2FsbExpbmtJbmZvKTsKKyAgICBtX2ppdC5hZGRK
U0NhbGwoc2xvd1BhdGhTdGFydCwgZG9uZUxvY2F0aW9uLCBjYWxsTGlua0luZm8pOwogfQogCiAv
LyBDbGFuZyBzaG91bGQgYWxsb3cgdW5yZWFjaGFibGUgW1tjbGFuZzo6ZmFsbHRocm91Z2hdXSBp
biB0ZW1wbGF0ZSBmdW5jdGlvbnMgaWYgYW55IHRlbXBsYXRlIGV4cGFuc2lvbiB1c2VzIGl0Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCShy
ZXZpc2lvbiAyNzc0NDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZH
VG9CMy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk3MTcsMjQgKzk3MTcsMjAgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjp0YWdGb3IoVmlydHVhbFJlZ2lzdGVy
KENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSkpOwogCiAgICAgICAg
ICAgICAgICAgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8gPSBqaXQuY29kZUJsb2NrKCktPmFk
ZENhbGxMaW5rSW5mbyhub2RlLT5vcmlnaW4uc2VtYW50aWMpOworICAgICAgICAgICAgICAgIGNh
bGxMaW5rSW5mby0+c2V0VXBDYWxsKAorICAgICAgICAgICAgICAgICAgICBub2RlLT5vcCgpID09
IENvbnN0cnVjdCA/IENhbGxMaW5rSW5mbzo6Q29uc3RydWN0IDogQ2FsbExpbmtJbmZvOjpDYWxs
LCBHUFJJbmZvOjpyZWdUMCk7CiAKLSAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkRhdGFM
YWJlbFB0ciB0YXJnZXRUb0NoZWNrOwotICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVt
cCBzbG93UGF0aCA9IGppdC5icmFuY2hQdHJXaXRoUGF0Y2goCi0gICAgICAgICAgICAgICAgICAg
IENDYWxsSGVscGVyczo6Tm90RXF1YWwsIEdQUkluZm86OnJlZ1QwLCB0YXJnZXRUb0NoZWNrLAot
ICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobnVsbHB0cikp
OwotCi0gICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGZhc3RDYWxsID0gaml0Lm5l
YXJDYWxsKCk7CisgICAgICAgICAgICAgICAgYXV0byBzbG93UGF0aCA9IGNhbGxMaW5rSW5mby0+
ZW1pdEZhc3RQYXRoKGppdCwgR1BSSW5mbzo6cmVnVDAsIEludmFsaWRHUFJSZWcsIENhbGxMaW5r
SW5mbzo6VXNlRGF0YUlDOjpObyk7CiAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1w
IGRvbmUgPSBqaXQuanVtcCgpOwogCiAgICAgICAgICAgICAgICAgc2xvd1BhdGgubGluaygmaml0
KTsKLQotICAgICAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0
cihjYWxsTGlua0luZm8pLCBHUFJJbmZvOjpyZWdUMik7CisgICAgICAgICAgICAgICAgYXV0byBz
bG93UGF0aFN0YXJ0ID0gaml0LmxhYmVsKCk7CiAgICAgICAgICAgICAgICAgaml0Lm1vdmUoQ0Nh
bGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGppdC5jb2RlQmxvY2soKS0+Z2xvYmFsT2JqZWN0Rm9y
KG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBHUFJJbmZvOjpyZWdUMyk7Ci0gICAgICAgICAgICAg
ICAgQ0NhbGxIZWxwZXJzOjpDYWxsIHNsb3dDYWxsID0gaml0Lm5lYXJDYWxsKCk7CisgICAgICAg
ICAgICAgICAgY2FsbExpbmtJbmZvLT5lbWl0U2xvd1BhdGgoKnZtLCBqaXQpOworCiAgICAgICAg
ICAgICAgICAgZG9uZS5saW5rKCZqaXQpOwogCi0gICAgICAgICAgICAgICAgY2FsbExpbmtJbmZv
LT5zZXRVcENhbGwoCi0gICAgICAgICAgICAgICAgICAgIG5vZGUtPm9wKCkgPT0gQ29uc3RydWN0
ID8gQ2FsbExpbmtJbmZvOjpDb25zdHJ1Y3QgOiBDYWxsTGlua0luZm86OkNhbGwsIEdQUkluZm86
OnJlZ1QwKTsKKyAgICAgICAgICAgICAgICBhdXRvIGRvbmVMb2NhdGlvbiA9IGppdC5sYWJlbCgp
OwogCiAgICAgICAgICAgICAgICAgaml0LmFkZFB0cigKICAgICAgICAgICAgICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoLXBhcmFtcy5wcm9jKCkuZnJhbWVTaXplKCkpLApAQCAt
OTc0MiwxMyArOTczOCw5IEBAIHByaXZhdGU6CiAKICAgICAgICAgICAgICAgICBqaXQuYWRkTGlu
a1Rhc2soCiAgICAgICAgICAgICAgICAgICAgIFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikg
ewotICAgICAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpJVFRodW5r
UHRyVGFnPiBsaW5rQ2FsbCA9IHZtLT5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3Ip
LmNvZGUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhzbG93Q2Fs
bCwgRnVuY3Rpb25QdHI8SklUVGh1bmtQdHJUYWc+KGxpbmtDYWxsKSk7Ci0KLSAgICAgICAgICAg
ICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0Q2FsbExvY2F0aW9ucygKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPihsaW5r
QnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxKU0ludGVybmFsUHRyVGFnPihzbG93Q2FsbCkpLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQ
dHJUYWc+KGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPih0YXJnZXRUb0No
ZWNrKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5sb2NhdGlvbk9m
TmVhckNhbGw8SlNJbnRlcm5hbFB0clRhZz4oZmFzdENhbGwpKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGNhbGxMaW5rSW5mby0+c2V0Q29kZUxvY2F0aW9ucygKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oc2xvd1Bh
dGhTdGFydCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5sb2NhdGlv
bk9mPEpTSW50ZXJuYWxQdHJUYWc+KGRvbmVMb2NhdGlvbikpOwogICAgICAgICAgICAgICAgICAg
ICB9KTsKICAgICAgICAgICAgIH0pOwogCkBAIC05ODU3LDYzICs5ODQ5LDUwIEBAIHByaXZhdGU6
CiAgICAgICAgICAgICAgICAgICAgIHNodWZmbGVEYXRhLnNldHVwQ2FsbGVlU2F2ZVJlZ2lzdGVy
cyhqaXQuY29kZUJsb2NrKCkpOwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg
ICAgICAgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8gPSBqaXQuY29kZUJsb2NrKCktPmFkZENh
bGxMaW5rSW5mbyhub2RlLT5vcmlnaW4uc2VtYW50aWMpOworICAgICAgICAgICAgICAgICAgICBj
YWxsTGlua0luZm8tPnNldFVwQ2FsbChDYWxsTGlua0luZm86OkRpcmVjdFRhaWxDYWxsLCBJbnZh
bGlkR1BSUmVnKTsKICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIEND
YWxsSGVscGVyczo6UGF0Y2hhYmxlSnVtcCBwYXRjaGFibGVKdW1wID0gaml0LnBhdGNoYWJsZUp1
bXAoKTsKICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpMYWJlbCBtYWluUGF0aCA9
IGppdC5sYWJlbCgpOwotICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAg
aml0LnN0b3JlMzIoCiAgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW0zMihjYWxsU2l0ZUluZGV4LmJpdHMoKSksCiAgICAgICAgICAgICAgICAgICAgICAgICBD
Q2FsbEhlbHBlcnM6OnRhZ0ZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6YXJndW1l
bnRDb3VudEluY2x1ZGluZ1RoaXMpKSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAg
ICAgICAgIGNhbGxMaW5rSW5mby0+c2V0RnJhbWVTaHVmZmxlRGF0YShzaHVmZmxlRGF0YSk7Ci0g
ICAgICAgICAgICAgICAgICAgIENhbGxGcmFtZVNodWZmbGVyKGppdCwgc2h1ZmZsZURhdGEpLnBy
ZXBhcmVGb3JUYWlsQ2FsbCgpOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNhbGwgPSBqaXQubmVhclRhaWxDYWxsKCk7CisgICAg
ICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+ZW1pdERpcmVjdFRhaWxDYWxsRmFzdFBhdGgo
aml0LCBbJl0geworICAgICAgICAgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRGcmFt
ZVNodWZmbGVEYXRhKHNodWZmbGVEYXRhKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIENhbGxG
cmFtZVNodWZmbGVyKGppdCwgc2h1ZmZsZURhdGEpLnByZXBhcmVGb3JUYWlsQ2FsbCgpOworICAg
ICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAg
ICAgICAgIGppdC5hYm9ydFdpdGhSZWFzb24oSklURGlkUmV0dXJuRnJvbVRhaWxDYWxsKTsKICAg
ICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6TGFi
ZWwgc2xvd1BhdGggPSBqaXQubGFiZWwoKTsKLSAgICAgICAgICAgICAgICAgICAgcGF0Y2hhYmxl
SnVtcC5tX2p1bXAubGlua1RvKHNsb3dQYXRoLCAmaml0KTsKICAgICAgICAgICAgICAgICAgICAg
Y2FsbE9wZXJhdGlvbigKICAgICAgICAgICAgICAgICAgICAgICAgICpzdGF0ZSwgdG9TYXZlLCBq
aXQsCiAgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5vcmlnaW4uc2VtYW50aWMsIGV4Y2Vw
dGlvbnMuZ2V0KCksIG9wZXJhdGlvbkxpbmtEaXJlY3RDYWxsLAogICAgICAgICAgICAgICAgICAg
ICAgICAgSW52YWxpZEdQUlJlZywgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGNhbGxMaW5r
SW5mbyksIGNhbGxlZUdQUikuY2FsbCgpOwogICAgICAgICAgICAgICAgICAgICBqaXQuanVtcCgp
LmxpbmtUbyhtYWluUGF0aCwgJmppdCk7Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldFVwQ2FsbChDYWxsTGlua0luZm86OkRpcmVjdFRh
aWxDYWxsLCBJbnZhbGlkR1BSUmVnKTsKICAgICAgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZv
LT5zZXRFeGVjdXRhYmxlRHVyaW5nQ29tcGlsYXRpb24oZXhlY3V0YWJsZSk7CiAgICAgICAgICAg
ICAgICAgICAgIGlmIChudW1BbGxvY2F0ZWRBcmdzID4gbnVtUGFzc2VkQXJncykKICAgICAgICAg
ICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0TWF4QXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXMobnVtQWxsb2NhdGVkQXJncyk7CiAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soCi0gICAgICAgICAgICAgICAgICAgICAgICBbPV0g
KExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBD
b2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBwYXRjaGFibGVKdW1wTG9jYXRpb24g
PSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4ocGF0Y2hhYmxlSnVtcCk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9uTmVhckNhbGw8SlNJbnRl
cm5hbFB0clRhZz4gY2FsbExvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8
SlNJbnRlcm5hbFB0clRhZz4oY2FsbCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29k
ZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gc2xvd1BhdGhMb2NhdGlvbiA9IGxpbmtC
dWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihzbG93UGF0aCk7Ci0KLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldENhbGxMb2NhdGlvbnMoCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGNoYWJsZUp1bXBMb2NhdGlvbiwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGhMb2NhdGlvbiwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY2FsbExvY2F0aW9uKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIH0pOworICAgICAgICAgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVm
ZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8t
PnNldENvZGVMb2NhdGlvbnMoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZl
ci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KHNsb3dQYXRoKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPigpKTsKKyAg
ICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgQ2FsbExpbmtJ
bmZvKiBjYWxsTGlua0luZm8gPSBqaXQuY29kZUJsb2NrKCktPmFkZENhbGxMaW5rSW5mbyhub2Rl
LT5vcmlnaW4uc2VtYW50aWMpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIEND
YWxsSGVscGVyczo6TGFiZWwgbWFpblBhdGggPSBqaXQubGFiZWwoKTsKKyAgICAgICAgICAgICAg
ICBjYWxsTGlua0luZm8tPnNldFVwQ2FsbCgKKyAgICAgICAgICAgICAgICAgICAgaXNDb25zdHJ1
Y3QgPyBDYWxsTGlua0luZm86OkRpcmVjdENvbnN0cnVjdCA6IENhbGxMaW5rSW5mbzo6RGlyZWN0
Q2FsbCwgSW52YWxpZEdQUlJlZyk7CiAKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okxh
YmVsIG1haW5QYXRoID0gaml0LmxhYmVsKCk7CiAgICAgICAgICAgICAgICAgaml0LnN0b3JlMzIo
CiAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGNhbGxTaXRl
SW5kZXguYml0cygpKSwKICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjp0YWdGb3Io
VmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
KSkpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Q2Fs
bCBjYWxsID0gaml0Lm5lYXJDYWxsKCk7CisgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5l
bWl0RGlyZWN0RmFzdFBhdGgoaml0KTsKICAgICAgICAgICAgICAgICBqaXQuYWRkUHRyKAogICAg
ICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigtcGFyYW1zLnByb2Mo
KS5mcmFtZVNpemUoKSksCiAgICAgICAgICAgICAgICAgICAgIEdQUkluZm86OmNhbGxGcmFtZVJl
Z2lzdGVyLCBDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICAgICAgICAg
ICAgICAKLSAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldFVwQ2FsbCgKLSAgICAgICAg
ICAgICAgICAgICAgaXNDb25zdHJ1Y3QgPyBDYWxsTGlua0luZm86OkRpcmVjdENvbnN0cnVjdCA6
IENhbGxMaW5rSW5mbzo6RGlyZWN0Q2FsbCwgSW52YWxpZEdQUlJlZyk7CiAgICAgICAgICAgICAg
ICAgY2FsbExpbmtJbmZvLT5zZXRFeGVjdXRhYmxlRHVyaW5nQ29tcGlsYXRpb24oZXhlY3V0YWJs
ZSk7CiAgICAgICAgICAgICAgICAgaWYgKG51bUFsbG9jYXRlZEFyZ3MgPiBudW1QYXNzZWRBcmdz
KQogICAgICAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldE1heEFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzKG51bUFsbG9jYXRlZEFyZ3MpOwpAQCAtOTkzNSwxNSArOTkxNCw5IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAg
IGppdC5hZGRMaW5rVGFzaygKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbPV0gKExpbmtC
dWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29k
ZUxvY2F0aW9uTmVhckNhbGw8SlNJbnRlcm5hbFB0clRhZz4gY2FsbExvY2F0aW9uID0gbGlua0J1
ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8SlNJbnRlcm5hbFB0clRhZz4oY2FsbCk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJU
YWc+IHNsb3dQYXRoTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0
clRhZz4oc2xvd1BhdGgpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtC
dWZmZXIubGluayhjYWxsLCBzbG93UGF0aExvY2F0aW9uKTsKLQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldENhbGxMb2NhdGlvbnMoCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRy
VGFnPigpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGhMb2Nh
dGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxMb2NhdGlvbik7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0Q29kZUxv
Y2F0aW9ucygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIu
bG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihzbG93UGF0aCksIAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4o
KSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAg
IH0pOwogICAgICAgICAgICAgfSk7CkBAIC0xMDAzNCw0MCArMTAwMDcsMzAgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgICAgICBzaHVmZmxlRGF0YS5zZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMoaml0
LmNvZGVCbG9jaygpKTsKIAogICAgICAgICAgICAgICAgIENhbGxMaW5rSW5mbyogY2FsbExpbmtJ
bmZvID0gaml0LmNvZGVCbG9jaygpLT5hZGRDYWxsTGlua0luZm8oY29kZU9yaWdpbik7CisgICAg
ICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRVcENhbGwoQ2FsbExpbmtJbmZvOjpUYWlsQ2Fs
bCwgR1BSSW5mbzo6cmVnVDApOwogCi0gICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpEYXRh
TGFiZWxQdHIgdGFyZ2V0VG9DaGVjazsKLSAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1
bXAgc2xvd1BhdGggPSBqaXQuYnJhbmNoUHRyV2l0aFBhdGNoKAotICAgICAgICAgICAgICAgICAg
ICBDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCBHUFJJbmZvOjpyZWdUMCwgdGFyZ2V0VG9DaGVjaywK
LSAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG51bGxwdHIp
KTsKLQotICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0RnJhbWVTaHVmZmxlRGF0YShz
aHVmZmxlRGF0YSk7Ci0gICAgICAgICAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIoaml0LCBzaHVm
ZmxlRGF0YSkucHJlcGFyZUZvclRhaWxDYWxsKCk7Ci0KLSAgICAgICAgICAgICAgICBDQ2FsbEhl
bHBlcnM6OkNhbGwgZmFzdENhbGwgPSBqaXQubmVhclRhaWxDYWxsKCk7CisgICAgICAgICAgICAg
ICAgYXV0byBzbG93UGF0aCA9IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoaml0
LCBHUFJJbmZvOjpyZWdUMCwgSW52YWxpZEdQUlJlZywgQ2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6
Ok5vLCBbJl0geworICAgICAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldEZyYW1lU2h1
ZmZsZURhdGEoc2h1ZmZsZURhdGEpOworICAgICAgICAgICAgICAgICAgICBDYWxsRnJhbWVTaHVm
ZmxlcihqaXQsIHNodWZmbGVEYXRhKS5wcmVwYXJlRm9yVGFpbENhbGwoKTsKKyAgICAgICAgICAg
ICAgICB9KTsKIAogICAgICAgICAgICAgICAgIHNsb3dQYXRoLmxpbmsoJmppdCk7Ci0KKyAgICAg
ICAgICAgICAgICBhdXRvIHNsb3dQYXRoU3RhcnQgPSBqaXQubGFiZWwoKTsKICAgICAgICAgICAg
ICAgICBDYWxsRnJhbWVTaHVmZmxlciBzbG93UGF0aFNodWZmbGVyKGppdCwgc2h1ZmZsZURhdGEp
OwogICAgICAgICAgICAgICAgIHNsb3dQYXRoU2h1ZmZsZXIuc2V0Q2FsbGVlSlNWYWx1ZVJlZ3Mo
SlNWYWx1ZVJlZ3MoR1BSSW5mbzo6cmVnVDApKTsKICAgICAgICAgICAgICAgICBzbG93UGF0aFNo
dWZmbGVyLnByZXBhcmVGb3JTbG93UGF0aCgpOwogCi0gICAgICAgICAgICAgICAgaml0Lm1vdmUo
Q0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGNhbGxMaW5rSW5mbyksIEdQUkluZm86OnJlZ1Qy
KTsKICAgICAgICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIo
aml0LmNvZGVCbG9jaygpLT5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSks
IEdQUkluZm86OnJlZ1QzKTsKLSAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgc2xv
d0NhbGwgPSBqaXQubmVhckNhbGwoKTsKKyAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPmVt
aXRTbG93UGF0aCgqdm0sIGppdCk7CiAKKyAgICAgICAgICAgICAgICBhdXRvIGRvbmVMb2NhdGlv
biA9IGppdC5sYWJlbCgpOwogICAgICAgICAgICAgICAgIGppdC5hYm9ydFdpdGhSZWFzb24oSklU
RGlkUmV0dXJuRnJvbVRhaWxDYWxsKTsKIAotICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+
c2V0VXBDYWxsKENhbGxMaW5rSW5mbzo6VGFpbENhbGwsIEdQUkluZm86OnJlZ1QwKTsKLQogICAg
ICAgICAgICAgICAgIGppdC5hZGRMaW5rVGFzaygKICAgICAgICAgICAgICAgICAgICAgWz1dIChM
aW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlckNvZGVQdHI8SklUVGh1bmtQdHJUYWc+IGxpbmtDYWxsID0gdm0tPmdldENUSVN0dWIo
bGlua0NhbGxUaHVua0dlbmVyYXRvcikuY29kZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAg
bGlua0J1ZmZlci5saW5rKHNsb3dDYWxsLCBGdW5jdGlvblB0cjxKSVRUaHVua1B0clRhZz4obGlu
a0NhbGwpKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRDYWxs
TG9jYXRpb25zKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVs
PEpTSW50ZXJuYWxQdHJUYWc+KGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPEpTSW50ZXJu
YWxQdHJUYWc+KHNsb3dDYWxsKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29kZUxv
Y2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4obGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50
ZXJuYWxQdHJUYWc+KHRhcmdldFRvQ2hlY2spKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxKU0ludGVybmFsUHRyVGFnPihmYXN0Q2Fs
bCkpOworICAgICAgICAgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRDb2RlTG9jYXRp
b25zKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZjxK
U0ludGVybmFsUHRyVGFnPihzbG93UGF0aFN0YXJ0KSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oZG9uZUxvY2F0aW9u
KSk7CiAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgfSk7CiAgICAgfQpAQCAt
MTAzMjAsNDAgKzEwMjgzLDM4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgZWxzZQogICAg
ICAgICAgICAgICAgICAgICBjYWxsVHlwZSA9IENhbGxMaW5rSW5mbzo6Q2FsbFZhcmFyZ3M7CiAg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRVcENhbGwo
Y2FsbFR5cGUsIEdQUkluZm86OnJlZ1QwKTsKKwogICAgICAgICAgICAgICAgIGJvb2wgaXNUYWls
Q2FsbCA9IENhbGxMaW5rSW5mbzo6Y2FsbE1vZGVGb3IoY2FsbFR5cGUpID09IENhbGxNb2RlOjpU
YWlsOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6RGF0
YUxhYmVsUHRyIHRhcmdldFRvQ2hlY2s7Ci0gICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpK
dW1wIHNsb3dQYXRoID0gaml0LmJyYW5jaFB0cldpdGhQYXRjaCgKLSAgICAgICAgICAgICAgICAg
ICAgQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwgR1BSSW5mbzo6cmVnVDAsIHRhcmdldFRvQ2hlY2ss
Ci0gICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihudWxscHRy
KSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxs
IGZhc3RDYWxsOworCisgICAgICAgICAgICAgICAgQVNTRVJUKCF1c2VkUmVnaXN0ZXJzLmdldChH
UFJJbmZvOjpyZWdUMikpOyAvLyBVc2VkIG9uIHRoZSBzbG93IHBhdGguCisKKyAgICAgICAgICAg
ICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dQYXRoOwogICAgICAgICAgICAgICAgIEND
YWxsSGVscGVyczo6SnVtcCBkb25lOwotICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAg
IGlmIChpc1RhaWxDYWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIGppdC5lbWl0UmVzdG9yZUNh
bGxlZVNhdmVzKCk7Ci0gICAgICAgICAgICAgICAgICAgIGppdC5wcmVwYXJlRm9yVGFpbENhbGxT
bG93KCk7Ci0gICAgICAgICAgICAgICAgICAgIGZhc3RDYWxsID0gaml0Lm5lYXJUYWlsQ2FsbCgp
OworICAgICAgICAgICAgICAgICAgICBzbG93UGF0aCA9IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxD
YWxsRmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgSW52YWxpZEdQUlJlZywgQ2FsbExpbmtJ
bmZvOjpVc2VEYXRhSUM6Ok5vLCBbJl0geworICAgICAgICAgICAgICAgICAgICAgICAgaml0LmVt
aXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGppdC5wcmVw
YXJlRm9yVGFpbENhbGxTbG93KCk7CisgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGZhc3RDYWxsID0gaml0Lm5lYXJD
YWxsKCk7CisgICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoID0gY2FsbExpbmtJbmZvLT5lbWl0
RmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgSW52YWxpZEdQUlJlZywgQ2FsbExpbmtJbmZv
OjpVc2VEYXRhSUM6Ok5vKTsKICAgICAgICAgICAgICAgICAgICAgZG9uZSA9IGppdC5qdW1wKCk7
CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIHNs
b3dQYXRoLmxpbmsoJmppdCk7CisgICAgICAgICAgICAgICAgYXV0byBzbG93UGF0aFN0YXJ0ID0g
aml0LmxhYmVsKCk7CiAKICAgICAgICAgICAgICAgICBpZiAoaXNUYWlsQ2FsbCkKICAgICAgICAg
ICAgICAgICAgICAgaml0LmVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKLSAgICAgICAgICAgICAg
ICBBU1NFUlQoIXVzZWRSZWdpc3RlcnMuZ2V0KEdQUkluZm86OnJlZ1QyKSk7Ci0gICAgICAgICAg
ICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGNhbGxMaW5rSW5mbyks
IEdQUkluZm86OnJlZ1QyKTsKICAgICAgICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW1QdHIoaml0LmNvZGVCbG9jaygpLT5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3Jp
Z2luLnNlbWFudGljKSksIEdQUkluZm86OnJlZ1QzKTsKLSAgICAgICAgICAgICAgICBDQ2FsbEhl
bHBlcnM6OkNhbGwgc2xvd0NhbGwgPSBqaXQubmVhckNhbGwoKTsKKyAgICAgICAgICAgICAgICBj
YWxsTGlua0luZm8tPmVtaXRTbG93UGF0aCgqdm0sIGppdCk7CiAgICAgICAgICAgICAgICAgCiAg
ICAgICAgICAgICAgICAgaWYgKGlzVGFpbENhbGwpCiAgICAgICAgICAgICAgICAgICAgIGppdC5h
Ym9ydFdpdGhSZWFzb24oSklURGlkUmV0dXJuRnJvbVRhaWxDYWxsKTsKICAgICAgICAgICAgICAg
ICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIGRvbmUubGluaygmaml0KTsKLSAgICAgICAgICAg
ICAgICAKLSAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldFVwQ2FsbChjYWxsVHlwZSwg
R1BSSW5mbzo6cmVnVDApOworCisgICAgICAgICAgICAgICAgYXV0byBkb25lTG9jYXRpb24gPSBq
aXQubGFiZWwoKTsKIAogICAgICAgICAgICAgICAgIGppdC5hZGRQdHIoCiAgICAgICAgICAgICAg
ICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKC1vcmlnaW5hbFN0YWNrSGVpZ2h0KSwK
QEAgLTEwMzYxLDEzICsxMDMyMiw5IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgCiAgICAg
ICAgICAgICAgICAgaml0LmFkZExpbmtUYXNrKAogICAgICAgICAgICAgICAgICAgICBbPV0gKExp
bmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyQ29kZVB0cjxKSVRUaHVua1B0clRhZz4gbGlua0NhbGwgPSB2bS0+Z2V0Q1RJU3R1Yihs
aW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5jb2RlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBs
aW5rQnVmZmVyLmxpbmsoc2xvd0NhbGwsIEZ1bmN0aW9uUHRyPEpJVFRodW5rUHRyVGFnPihsaW5r
Q2FsbCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAg
ICBjYWxsTGlua0luZm8tPnNldENhbGxMb2NhdGlvbnMoCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4obGlua0J1ZmZlci5sb2Nh
dGlvbk9mTmVhckNhbGw8SlNJbnRlcm5hbFB0clRhZz4oc2xvd0NhbGwpKSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPihsaW5r
QnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4odGFyZ2V0VG9DaGVjaykpLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPEpT
SW50ZXJuYWxQdHJUYWc+KGZhc3RDYWxsKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBjYWxs
TGlua0luZm8tPnNldENvZGVMb2NhdGlvbnMoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KHNsb3dQYXRoU3RhcnQpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVy
bmFsUHRyVGFnPihkb25lTG9jYXRpb24pKTsKICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAg
ICAgICAgICB9KTsKIApAQCAtMTA2MDcsMzkgKzEwNTY0LDM2IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICBjYWxsVHlwZSA9IENhbGxMaW5rSW5m
bzo6Q2FsbFZhcmFyZ3M7CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgYm9vbCBp
c1RhaWxDYWxsID0gQ2FsbExpbmtJbmZvOjpjYWxsTW9kZUZvcihjYWxsVHlwZSkgPT0gQ2FsbE1v
ZGU6OlRhaWw7CisgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRVcENhbGwoY2FsbFR5
cGUsIEdQUkluZm86OnJlZ1QwKTsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBD
Q2FsbEhlbHBlcnM6OkRhdGFMYWJlbFB0ciB0YXJnZXRUb0NoZWNrOwotICAgICAgICAgICAgICAg
IENDYWxsSGVscGVyczo6SnVtcCBzbG93UGF0aCA9IGppdC5icmFuY2hQdHJXaXRoUGF0Y2goCi0g
ICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Tm90RXF1YWwsIEdQUkluZm86OnJlZ1Qw
LCB0YXJnZXRUb0NoZWNrLAotICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW1QdHIobnVsbHB0cikpOworICAgICAgICAgICAgICAgIGJvb2wgaXNUYWlsQ2FsbCA9IENh
bGxMaW5rSW5mbzo6Y2FsbE1vZGVGb3IoY2FsbFR5cGUpID09IENhbGxNb2RlOjpUYWlsOwogICAg
ICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBmYXN0Q2Fs
bDsKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dQYXRoOwogICAg
ICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBkb25lOwotICAgICAgICAgICAgICAgIAog
ICAgICAgICAgICAgICAgIGlmIChpc1RhaWxDYWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIGpp
dC5lbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7Ci0gICAgICAgICAgICAgICAgICAgIGppdC5wcmVw
YXJlRm9yVGFpbENhbGxTbG93KCk7Ci0gICAgICAgICAgICAgICAgICAgIGZhc3RDYWxsID0gaml0
Lm5lYXJUYWlsQ2FsbCgpOworICAgICAgICAgICAgICAgICAgICBzbG93UGF0aCA9IGNhbGxMaW5r
SW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgSW52YWxpZEdQ
UlJlZywgQ2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6Ok5vLCBbJl0geworICAgICAgICAgICAgICAg
ICAgICAgICAgaml0LmVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGppdC5wcmVwYXJlRm9yVGFpbENhbGxTbG93KCk7CisgICAgICAgICAgICAgICAgICAg
IH0pOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGZhc3RD
YWxsID0gaml0Lm5lYXJDYWxsKCk7CisgICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoID0gY2Fs
bExpbmtJbmZvLT5lbWl0RmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgSW52YWxpZEdQUlJl
ZywgQ2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6Ok5vKTsKICAgICAgICAgICAgICAgICAgICAgZG9u
ZSA9IGppdC5qdW1wKCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAogICAg
ICAgICAgICAgICAgIHNsb3dQYXRoLmxpbmsoJmppdCk7CisgICAgICAgICAgICAgICAgYXV0byBz
bG93UGF0aFN0YXJ0ID0gaml0LmxhYmVsKCk7CiAKICAgICAgICAgICAgICAgICBpZiAoaXNUYWls
Q2FsbCkKICAgICAgICAgICAgICAgICAgICAgaml0LmVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsK
LSAgICAgICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoY2Fs
bExpbmtJbmZvKSwgR1BSSW5mbzo6cmVnVDIpOwogICAgICAgICAgICAgICAgIGppdC5tb3ZlKEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihqaXQuY29kZUJsb2NrKCktPmdsb2JhbE9iamVjdEZv
cihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgR1BSSW5mbzo6cmVnVDMpOwotICAgICAgICAgICAg
ICAgIENDYWxsSGVscGVyczo6Q2FsbCBzbG93Q2FsbCA9IGppdC5uZWFyQ2FsbCgpOworICAgICAg
ICAgICAgICAgIGNhbGxMaW5rSW5mby0+ZW1pdFNsb3dQYXRoKCp2bSwgaml0KTsKICAgICAgICAg
ICAgICAgICAKICAgICAgICAgICAgICAgICBpZiAoaXNUYWlsQ2FsbCkKICAgICAgICAgICAgICAg
ICAgICAgaml0LmFib3J0V2l0aFJlYXNvbihKSVREaWRSZXR1cm5Gcm9tVGFpbENhbGwpOwogICAg
ICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgZG9uZS5saW5rKCZqaXQpOwot
ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0VXBDYWxs
KGNhbGxUeXBlLCBHUFJJbmZvOjpyZWdUMCk7CisKKyAgICAgICAgICAgICAgICBhdXRvIGRvbmVM
b2NhdGlvbiA9IGppdC5sYWJlbCgpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAg
IGppdC5hZGRQdHIoCiAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bTMyKC1vcmlnaW5hbFN0YWNrSGVpZ2h0KSwKQEAgLTEwNjQ3LDEzICsxMDYwMSw5IEBAIHByaXZh
dGU6CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaml0LmFkZExpbmtUYXNrKAog
ICAgICAgICAgICAgICAgICAgICBbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKSVRUaHVua1B0clRhZz4g
bGlua0NhbGwgPSB2bS0+Z2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5jb2RlKCk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoc2xvd0NhbGwsIEZ1bmN0
aW9uUHRyPEpJVFRodW5rUHRyVGFnPihsaW5rQ2FsbCkpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgCi0gICAgICAgICAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldENhbGxMb2NhdGlv
bnMoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRl
cm5hbFB0clRhZz4obGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8SlNJbnRlcm5hbFB0clRh
Zz4oc2xvd0NhbGwpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2RlTG9jYXRpb25M
YWJlbDxKU0ludGVybmFsUHRyVGFnPihsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0
clRhZz4odGFyZ2V0VG9DaGVjaykpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtC
dWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPEpTSW50ZXJuYWxQdHJUYWc+KGZhc3RDYWxsKSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldENvZGVMb2NhdGlvbnMoCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJu
YWxQdHJUYWc+KHNsb3dQYXRoU3RhcnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxp
bmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihkb25lTG9jYXRpb24pKTsKICAg
ICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICB9KTsKIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmNwcAkocmV2aXNpb24gMjc3NDQwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC03MSw2ICs3MSwxNiBAQCB2b2lkIENDYWxsSGVscGVyczo6ZW5zdXJlU2hhZG93Q2hpY2tl
blBhCiAgICAgc3RvcmVQdHIoc2NyYXRjaDIsIEFkZHJlc3Moc2NyYXRjaDFOb25BcmdHUFIpKTsK
IH0KIAordm9pZCBDQ2FsbEhlbHBlcnM6OmVtaXRKSVRDb2RlT3ZlcihNYWNyb0Fzc2VtYmxlckNv
ZGVQdHI8SlNJbnRlcm5hbFB0clRhZz4gY29kZSwgV1RGOjpGdW5jdGlvbjx2b2lkKENDYWxsSGVs
cGVycyYpPiBlbWl0Q29kZSwgY29uc3QgY2hhciogZGVzY3JpcHRpb24pCit7CisgICAgQ0NhbGxI
ZWxwZXJzIGppdDsKKyAgICBlbWl0Q29kZShqaXQpOworCisgICAgY29uc3RleHByIGJvb2wgbmVl
ZHNCcmFuY2hDb21wYWN0aW9uID0gZmFsc2U7CisgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKGpp
dCwgY29kZSwgaml0Lm1fYXNzZW1ibGVyLmJ1ZmZlcigpLmNvZGVTaXplKCksIEpJVENvbXBpbGF0
aW9uTXVzdFN1Y2NlZWQsIG5lZWRzQnJhbmNoQ29tcGFjdGlvbik7CisgICAgRklOQUxJWkVfQ09E
RShsaW5rQnVmZmVyLCBOb1B0clRhZywgZGVzY3JpcHRpb24pOworfQorCiB9IC8vIG5hbWVzcGFj
ZSBKU0MKIAogI2VuZGlmIC8vIEVOQUJMRShKSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0NDYWxsSGVscGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvQ0NhbGxIZWxwZXJzLmgJKHJldmlzaW9uIDI3NzQ0MCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTgxOCw2ICs4MTgs
OCBAQCBwdWJsaWM6CiAgICAgdm9pZCBsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChHUFJSZWcg
c2hhZG93UGFja2V0LCBKU1ZhbHVlUmVncyB0aGlzUmVncywgR1BSUmVnIHNjb3BlLCBDb2RlQmxv
Y2sqLCBDYWxsU2l0ZUluZGV4KTsKICAgICAvLyBMZWF2ZXMgYmVoaW5kIGEgcG9pbnRlciB0byB0
aGUgUGFja2V0IHdlIHNob3VsZCB3cml0ZSB0byBpbiBzaGFkb3dQYWNrZXQuCiAgICAgdm9pZCBl
bnN1cmVTaGFkb3dDaGlja2VuUGFja2V0KFZNJiwgR1BSUmVnIHNoYWRvd1BhY2tldCwgR1BSUmVn
IHNjcmF0Y2gxTm9uQXJnR1BSLCBHUFJSZWcgc2NyYXRjaDIpOworCisgICAgc3RhdGljIHZvaWQg
ZW1pdEpJVENvZGVPdmVyKE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0ludGVybmFsUHRyVGFnPiBj
b2RlLCBXVEY6OkZ1bmN0aW9uPHZvaWQoQ0NhbGxIZWxwZXJzJik+LCBjb25zdCBjaGFyKik7CiB9
OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJ
KHJldmlzaW9uIDI3NzQ0MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAko
d29ya2luZyBjb3B5KQpAQCAtOTU5LDEwICs5NTksOSBAQCBDb21waWxhdGlvblJlc3VsdCBKSVQ6
OmxpbmsoKQogCiAgICAgZm9yIChhdXRvJiBjb21waWxhdGlvbkluZm8gOiBtX2NhbGxDb21waWxh
dGlvbkluZm8pIHsKICAgICAgICAgQ2FsbExpbmtJbmZvJiBpbmZvID0gKmNvbXBpbGF0aW9uSW5m
by5jYWxsTGlua0luZm87Ci0gICAgICAgIGluZm8uc2V0Q2FsbExvY2F0aW9ucygKLSAgICAgICAg
ICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+KHBhdGNoQnVmZmVyLmxvY2F0
aW9uT2ZOZWFyQ2FsbDxKU0ludGVybmFsUHRyVGFnPihjb21waWxhdGlvbkluZm8uY2FsbFJldHVy
bkxvY2F0aW9uKSksCi0gICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRy
VGFnPihwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KGNvbXBpbGF0aW9u
SW5mby5ob3RQYXRoQmVnaW4pKSwKLSAgICAgICAgICAgIHBhdGNoQnVmZmVyLmxvY2F0aW9uT2ZO
ZWFyQ2FsbDxKU0ludGVybmFsUHRyVGFnPihjb21waWxhdGlvbkluZm8uaG90UGF0aE90aGVyKSk7
CisgICAgICAgIGluZm8uc2V0Q29kZUxvY2F0aW9ucygKKyAgICAgICAgICAgIHBhdGNoQnVmZmVy
LmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oY29tcGlsYXRpb25JbmZvLnNsb3dQYXRoU3Rh
cnQpLAorICAgICAgICAgICAgcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFn
Pihjb21waWxhdGlvbkluZm8uZG9uZUxvY2F0aW9uKSk7CiAgICAgfQogCiAgICAgewpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVC5oCShyZXZpc2lvbiAyNzc0NDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzUsOSArMTc1LDggQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgfTsKIAogICAgIHN0cnVjdCBDYWxsQ29tcGlsYXRpb25JbmZvIHsK
LSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkRhdGFMYWJlbFB0ciBob3RQYXRoQmVnaW47Ci0gICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGhvdFBhdGhPdGhlcjsKLSAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OkNhbGwgY2FsbFJldHVybkxvY2F0aW9uOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
TGFiZWwgc2xvd1BhdGhTdGFydDsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGRvbmVM
b2NhdGlvbjsKICAgICAgICAgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm87CiAgICAgfTsKIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsMzJfNjQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbDMyXzY0LmNwcAkocmV2aXNp
b24gMjc3NDQwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsMzJfNjQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zNTAsNyArMzUwLDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENh
bGxTbG93Q2FzZShjb25zdCBJbgogICAgIGlmIChvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGwgfHwg
b3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9j
YWxsX2ZvcndhcmRfYXJndW1lbnRzKQogICAgICAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7
CiAKLSAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmNhbGxSZXR1
cm5Mb2NhdGlvbiA9IGVtaXROYWtlZE5lYXJDYWxsKG1fdm0tPmdldENUSVN0dWIobGlua0NhbGxU
aHVua0dlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKKyAgICBtX2NhbGxDb21w
aWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLnNsb3dDYWxsUmV0dXJuTG9jYXRpb24gPSBl
bWl0TmFrZWROZWFyQ2FsbChtX3ZtLT5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3Ip
LnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFp
bF9jYWxsIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzKSB7CiAgICAgICAgIGFi
b3J0V2l0aFJlYXNvbihKSVREaWRSZXR1cm5Gcm9tVGFpbENhbGwpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVENhbGwuY3BwCShyZXZpc2lvbiAyNzc0NDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODgsOCArMTg4
LDE0IEBAIGJvb2wgSklUOjpjb21waWxlVGFpbENhbGwoY29uc3QgT3BUYWlsQ2EKICAgICAgICAg
VmFsdWVSZWNvdmVyeTo6aW5HUFIocmVnVDAsIERhdGFGb3JtYXRKUyk7CiAgICAgc2h1ZmZsZURh
dGEuc2V0dXBDYWxsZWVTYXZlUmVnaXN0ZXJzKG1fY29kZUJsb2NrKTsKICAgICBpbmZvLT5zZXRG
cmFtZVNodWZmbGVEYXRhKHNodWZmbGVEYXRhKTsKLSAgICBDYWxsRnJhbWVTaHVmZmxlcigqdGhp
cywgc2h1ZmZsZURhdGEpLnByZXBhcmVGb3JUYWlsQ2FsbCgpOwotICAgIG1fY2FsbENvbXBpbGF0
aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uaG90UGF0aE90aGVyID0gZW1pdE5ha2VkTmVhclRh
aWxDYWxsKCk7CisKKyAgICBKdW1wTGlzdCBzbG93UGF0aHMgPSBpbmZvLT5lbWl0VGFpbENhbGxG
YXN0UGF0aCgqdGhpcywgcmVnVDAsIHJlZ1QyLCBDYWxsTGlua0luZm86OlVzZURhdGFJQzo6WWVz
LCBbJl0geworICAgICAgICBDYWxsRnJhbWVTaHVmZmxlcigqdGhpcywgc2h1ZmZsZURhdGEpLnBy
ZXBhcmVGb3JUYWlsQ2FsbCgpOworICAgIH0pOworICAgIGFkZFNsb3dDYXNlKHNsb3dQYXRocyk7
CisgICAgYXV0byBkb25lTG9jYXRpb24gPSBsYWJlbCgpOworICAgIG1fY2FsbENvbXBpbGF0aW9u
SW5mb1tjYWxsTGlua0luZm9JbmRleF0uZG9uZUxvY2F0aW9uID0gZG9uZUxvY2F0aW9uOworICAg
IAogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0yMjgsMjggKzIzNCwzMCBAQCB2b2lkIEpJVDo6
Y29tcGlsZU9wQ2FsbChjb25zdCBJbnN0cnVjdGlvCiAgICAgaWYgKGNvbXBpbGVDYWxsRXZhbChi
eXRlY29kZSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIERhdGFMYWJlbFB0ciBhZGRyZXNzT2ZM
aW5rZWRGdW5jdGlvbkNoZWNrOwotICAgIEp1bXAgc2xvd0Nhc2UgPSBicmFuY2hQdHJXaXRoUGF0
Y2goTm90RXF1YWwsIHJlZ1QwLCBhZGRyZXNzT2ZMaW5rZWRGdW5jdGlvbkNoZWNrLCBUcnVzdGVk
SW1tUHRyKG51bGxwdHIpKTsKLSAgICBhZGRTbG93Q2FzZShzbG93Q2FzZSk7Ci0KICAgICBBU1NF
UlQobV9jYWxsQ29tcGlsYXRpb25JbmZvLnNpemUoKSA9PSBjYWxsTGlua0luZm9JbmRleCk7CiAg
ICAgaW5mby0+c2V0VXBDYWxsKENhbGxMaW5rSW5mbzo6Y2FsbFR5cGVGb3Iob3Bjb2RlSUQpLCBy
ZWdUMCk7CiAgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvLmFwcGVuZChDYWxsQ29tcGlsYXRpb25J
bmZvKCkpOwotICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uaG90
UGF0aEJlZ2luID0gYWRkcmVzc09mTGlua2VkRnVuY3Rpb25DaGVjazsKICAgICBtX2NhbGxDb21w
aWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmNhbGxMaW5rSW5mbyA9IGluZm87CiAKLSAg
ICBpZiAoY29tcGlsZVRhaWxDYWxsKGJ5dGVjb2RlLCBpbmZvLCBjYWxsTGlua0luZm9JbmRleCkp
IHsKKyAgICBpZiAoY29tcGlsZVRhaWxDYWxsKGJ5dGVjb2RlLCBpbmZvLCBjYWxsTGlua0luZm9J
bmRleCkpCiAgICAgICAgIHJldHVybjsKLSAgICB9CiAKICAgICBpZiAob3Bjb2RlSUQgPT0gb3Bf
dGFpbF9jYWxsX3ZhcmFyZ3MgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJn
dW1lbnRzKSB7Ci0gICAgICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKLSAgICAgICAgcHJl
cGFyZUZvclRhaWxDYWxsU2xvdygpOwotICAgICAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2Fs
bExpbmtJbmZvSW5kZXhdLmhvdFBhdGhPdGhlciA9IGVtaXROYWtlZE5lYXJUYWlsQ2FsbCgpOwor
ICAgICAgICBKdW1wTGlzdCBzbG93UGF0aHMgPSBpbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aCgq
dGhpcywgcmVnVDAsIHJlZ1QyLCBDYWxsTGlua0luZm86OlVzZURhdGFJQzo6WWVzLCBbJl0gewor
ICAgICAgICAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOworICAgICAgICAgICAgcHJlcGFy
ZUZvclRhaWxDYWxsU2xvdyhHUFJJbmZvOjpyZWdUMik7CisgICAgICAgIH0pOworICAgICAgICBh
ZGRTbG93Q2FzZShzbG93UGF0aHMpOworICAgICAgICBhdXRvIGRvbmVMb2NhdGlvbiA9IGxhYmVs
KCk7CisgICAgICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uZG9u
ZUxvY2F0aW9uID0gZG9uZUxvY2F0aW9uOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAg
bV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5ob3RQYXRoT3RoZXIgPSBl
bWl0TmFrZWROZWFyQ2FsbCgpOworICAgIEp1bXBMaXN0IHNsb3dQYXRocyA9IGluZm8tPmVtaXRG
YXN0UGF0aCgqdGhpcywgcmVnVDAsIHJlZ1QyLCBDYWxsTGlua0luZm86OlVzZURhdGFJQzo6WWVz
KTsKKyAgICBhdXRvIGRvbmVMb2NhdGlvbiA9IGxhYmVsKCk7CisgICAgYWRkU2xvd0Nhc2Uoc2xv
d1BhdGhzKTsKKworICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0u
ZG9uZUxvY2F0aW9uID0gZG9uZUxvY2F0aW9uOwogCiAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihz
dGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNh
bGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgY2hlY2tTdGFja1Bv
aW50ZXJBbGlnbm1lbnQoKTsKQEAgLTI2NSwxNCArMjczLDEzIEBAIHZvaWQgSklUOjpjb21waWxl
T3BDYWxsU2xvd0Nhc2UoY29uc3QgSW4KIAogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAK
KyAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLnNsb3dQYXRoU3Rh
cnQgPSBsYWJlbCgpOworCiAgICAgaWYgKG9wY29kZUlEID09IG9wX3RhaWxfY2FsbCB8fCBvcGNv
ZGVJRCA9PSBvcF90YWlsX2NhbGxfdmFyYXJncyB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxf
Zm9yd2FyZF9hcmd1bWVudHMpCiAgICAgICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKIAog
ICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdU
Myk7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlu
a0luZm9JbmRleF0uY2FsbExpbmtJbmZvKSwgcmVnVDIpOwotCi0gICAgbV9jYWxsQ29tcGlsYXRp
b25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5jYWxsUmV0dXJuTG9jYXRpb24gPQotICAgICAgICBl
bWl0TmFrZWROZWFyQ2FsbChtX3ZtLT5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3Ip
LnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CisgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2Nh
bGxMaW5rSW5mb0luZGV4XS5jYWxsTGlua0luZm8tPmVtaXRTbG93UGF0aCgqbV92bSwgKnRoaXMp
OwogCiAgICAgaWYgKG9wY29kZUlEID09IG9wX3RhaWxfY2FsbCB8fCBvcGNvZGVJRCA9PSBvcF90
YWlsX2NhbGxfdmFyYXJncykgewogICAgICAgICBhYm9ydFdpdGhSZWFzb24oSklURGlkUmV0dXJu
RnJvbVRhaWxDYWxsKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0
aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVy
YXRpb25zLmNwcAkocmV2aXNpb24gMjc3NDQwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM4Niw3ICsxMzg2LDcgQEAg
SlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkxpbmtDYQogICAgICAgICAgICAgaWYg
KCFjYWxsTGlua0luZm8tPnNlZW5PbmNlKCkpCiAgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZv
LT5zZXRTZWVuKCk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbGlua0Zvcih2
bSwgY2FsbGVlRnJhbWUsICpjYWxsTGlua0luZm8sIG51bGxwdHIsIGludGVybmFsRnVuY3Rpb24s
IGNvZGVQdHIpOworICAgICAgICAgICAgICAgIGxpbmtNb25vbW9ycGhpY0NhbGwodm0sIGNhbGxl
ZUZyYW1lLCAqY2FsbExpbmtJbmZvLCBudWxscHRyLCBpbnRlcm5hbEZ1bmN0aW9uLCBjb2RlUHRy
KTsKIAogICAgICAgICAgICAgdm9pZCogbGlua2VkVGFyZ2V0ID0gY29kZVB0ci5leGVjdXRhYmxl
QWRkcmVzcygpOwogICAgICAgICAgICAgcmV0dXJuIGVuY29kZVJlc3VsdChsaW5rZWRUYXJnZXQs
IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGNhbGxMaW5rSW5mby0+Y2FsbE1vZGUoKSA9PSBDYWxs
TW9kZTo6VGFpbCA/IFJldXNlVGhlRnJhbWUgOiBLZWVwVGhlRnJhbWUpKTsKQEAgLTE0MzQsNyAr
MTQzNCw3IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25MaW5rQ2EKICAgICBp
ZiAoIWNhbGxMaW5rSW5mby0+c2Vlbk9uY2UoKSkKICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRT
ZWVuKCk7CiAgICAgZWxzZQotICAgICAgICBsaW5rRm9yKHZtLCBjYWxsZWVGcmFtZSwgKmNhbGxM
aW5rSW5mbywgY29kZUJsb2NrLCBjYWxsZWUsIGNvZGVQdHIpOworICAgICAgICBsaW5rTW9ub21v
cnBoaWNDYWxsKHZtLCBjYWxsZWVGcmFtZSwgKmNhbGxMaW5rSW5mbywgY29kZUJsb2NrLCBjYWxs
ZWUsIGNvZGVQdHIpOwogCiAgICAgcmV0dXJuIGVuY29kZVJlc3VsdChjb2RlUHRyLmV4ZWN1dGFi
bGVBZGRyZXNzKCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGNhbGxMaW5rSW5mby0+Y2FsbE1v
ZGUoKSA9PSBDYWxsTW9kZTo6VGFpbCA/IFJldXNlVGhlRnJhbWUgOiBLZWVwVGhlRnJhbWUpKTsK
IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUG9seW1vcnBoaWNDYWxsU3R1YlJv
dXRpbmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUG9seW1v
cnBoaWNDYWxsU3R1YlJvdXRpbmUuY3BwCShyZXZpc2lvbiAyNzc0NDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L1BvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDUsNyArNDUsNyBAQCBQb2x5bW9ycGhpY0NhbGxOb2RlOjp+UG9seW1vcnBoaWND
YWxsTm9kCiB2b2lkIFBvbHltb3JwaGljQ2FsbE5vZGU6OnVubGluayhWTSYgdm0pCiB7CiAgICAg
aWYgKG1fY2FsbExpbmtJbmZvKSB7Ci0gICAgICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OmR1bXBE
aXNhc3NlbWJseSgpLCAiVW5saW5raW5nIHBvbHltb3JwaGljIGNhbGwgYXQgIiwgbV9jYWxsTGlu
a0luZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbigpLCAiLCBiYyMiLCBtX2NhbGxMaW5rSW5mby0+Y29k
ZU9yaWdpbigpLmJ5dGVjb2RlSW5kZXgoKSk7CisgICAgICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6
OmR1bXBEaXNhc3NlbWJseSgpLCAiVW5saW5raW5nIHBvbHltb3JwaGljIGNhbGwgYXQgIiwgbV9j
YWxsTGlua0luZm8tPmRvbmVMb2NhdGlvbigpLCAiLCBiYyMiLCBtX2NhbGxMaW5rSW5mby0+Y29k
ZU9yaWdpbigpLmJ5dGVjb2RlSW5kZXgoKSk7CiAgICAgICAgIG1fY2FsbExpbmtJbmZvLT51bmxp
bmsodm0pOwogICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNo
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3Bw
CShyZXZpc2lvbiAyNzc0NDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2gu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw4IEBACiAKICNpZiBFTkFCTEUoSklUKQog
CisjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXJQcmludGVyLmgiCisKICNpbmNsdWRlICJCaW5hcnlT
d2l0Y2guaCIKICNpbmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIKICNpbmNsdWRlICJDYWNoZWFibGVJ
ZGVudGlmaWVySW5saW5lcy5oIgpAQCAtMTE4OCwyMCArMTE5MCwyMCBAQCB2b2lkIHJlcGF0Y2hJ
bnN0YW5jZU9mKAogICAgICAgICBmdGxUaHVua0F3YXJlUmVwYXRjaENhbGwoY29kZUJsb2NrLCBz
dHViSW5mby5zbG93UGF0aENhbGxMb2NhdGlvbiwgb3BlcmF0aW9uSW5zdGFuY2VPZkdlbmVyaWMp
OwogfQogCi1zdGF0aWMgdm9pZCBsaW5rU2xvd0ZvcihWTSYsIENhbGxMaW5rSW5mbyYgY2FsbExp
bmtJbmZvLCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUU3R1YlJvdXRpbmVQdHJUYWc+IGNvZGVS
ZWYpCitzdGF0aWMgdm9pZCBsaW5rU2xvd1BhdGhUbyhWTSYsIENhbGxMaW5rSW5mbyYgY2FsbExp
bmtJbmZvLCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUU3R1YlJvdXRpbmVQdHJUYWc+IGNvZGVS
ZWYpCiB7Ci0gICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hOZWFyQ2FsbChjYWxsTGlua0luZm8u
Y2FsbFJldHVybkxvY2F0aW9uKCksIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRy
VGFnPihjb2RlUmVmLmNvZGUoKSkpOworICAgIGNhbGxMaW5rSW5mby5zZXRTbG93UGF0aENhbGxE
ZXN0aW5hdGlvbihjb2RlUmVmLmNvZGUoKS50ZW1wbGF0ZSByZXRhZ2dlZDxKU0VudHJ5UHRyVGFn
PigpKTsKIH0KIAotc3RhdGljIHZvaWQgbGlua1Nsb3dGb3IoVk0mIHZtLCBDYWxsTGlua0luZm8m
IGNhbGxMaW5rSW5mbywgVGh1bmtHZW5lcmF0b3IgZ2VuZXJhdG9yKQorc3RhdGljIHZvaWQgbGlu
a1Nsb3dQYXRoVG8oVk0mIHZtLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbywgVGh1bmtHZW5l
cmF0b3IgZ2VuZXJhdG9yKQogewotICAgIGxpbmtTbG93Rm9yKHZtLCBjYWxsTGlua0luZm8sIHZt
LmdldENUSVN0dWIoZ2VuZXJhdG9yKS5yZXRhZ2dlZDxKSVRTdHViUm91dGluZVB0clRhZz4oKSk7
CisgICAgbGlua1Nsb3dQYXRoVG8odm0sIGNhbGxMaW5rSW5mbywgdm0uZ2V0Q1RJU3R1YihnZW5l
cmF0b3IpLnJldGFnZ2VkPEpJVFN0dWJSb3V0aW5lUHRyVGFnPigpKTsKIH0KIAogc3RhdGljIHZv
aWQgbGlua1Nsb3dGb3IoVk0mIHZtLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbykKIHsKICAg
ICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUU3R1YlJvdXRpbmVQdHJUYWc+IHZpcnR1YWxUaHVu
ayA9IHZpcnR1YWxUaHVua0Zvcih2bSwgY2FsbExpbmtJbmZvKTsKLSAgICBsaW5rU2xvd0Zvcih2
bSwgY2FsbExpbmtJbmZvLCB2aXJ0dWFsVGh1bmspOworICAgIGxpbmtTbG93UGF0aFRvKHZtLCBj
YWxsTGlua0luZm8sIHZpcnR1YWxUaHVuayk7CiAgICAgY2FsbExpbmtJbmZvLnNldFNsb3dTdHVi
KEdDQXdhcmVKSVRTdHViUm91dGluZTo6Y3JlYXRlKHZpcnR1YWxUaHVuaywgdm0pKTsKIH0KIApA
QCAtMTIxNyw3ICsxMjE5LDcgQEAgc3RhdGljIEpTQ2VsbCogd2ViQXNzZW1ibHlPd25lcihKU0Nl
bGwqIAogI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKIH0KIAotdm9pZCBsaW5rRm9yKAor
dm9pZCBsaW5rTW9ub21vcnBoaWNDYWxsKAogICAgIFZNJiB2bSwgQ2FsbEZyYW1lKiBjYWxsRnJh
bWUsIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvLCBDb2RlQmxvY2sqIGNhbGxlZUNvZGVCbG9j
aywKICAgICBKU09iamVjdCogY2FsbGVlLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0
clRhZz4gY29kZVB0cikKIHsKQEAgLTEyMzUsMjYgKzEyMzcsMjQgQEAgdm9pZCBsaW5rRm9yKAog
ICAgIEFTU0VSVChvd25lcik7CiAKICAgICBBU1NFUlQoIWNhbGxMaW5rSW5mby5pc0xpbmtlZCgp
KTsKLSAgICBjYWxsTGlua0luZm8uc2V0Q2FsbGVlKHZtLCBvd25lciwgY2FsbGVlKTsKLSAgICBN
YWNyb0Fzc2VtYmxlcjo6cmVwYXRjaFBvaW50ZXIoY2FsbExpbmtJbmZvLmhvdFBhdGhCZWdpbigp
LCBjYWxsZWUpOworICAgIGNhbGxMaW5rSW5mby5zZXRNb25vbW9ycGhpY0NhbGxlZSh2bSwgb3du
ZXIsIGNhbGxlZSwgY29kZVB0cik7CiAgICAgY2FsbExpbmtJbmZvLnNldExhc3RTZWVuQ2FsbGVl
KHZtLCBvd25lciwgY2FsbGVlKTsKKwogICAgIGlmIChzaG91bGREdW1wRGlzYXNzZW1ibHlGb3Io
Y2FsbGVyQ29kZUJsb2NrKSkKICAgICAgICAgZGF0YUxvZygiTGlua2luZyBjYWxsIGluICIsIEZ1
bGxDb2RlT3JpZ2luKGNhbGxlckNvZGVCbG9jaywgY2FsbExpbmtJbmZvLmNvZGVPcmlnaW4oKSks
ICIgdG8gIiwgcG9pbnRlckR1bXAoY2FsbGVlQ29kZUJsb2NrKSwgIiwgZW50cnlwb2ludCBhdCAi
LCBjb2RlUHRyLCAiXG4iKTsKIAotICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoTmVhckNhbGwo
Y2FsbExpbmtJbmZvLmhvdFBhdGhPdGhlcigpLCBDb2RlTG9jYXRpb25MYWJlbDxKU0VudHJ5UHRy
VGFnPihjb2RlUHRyKSk7Ci0KICAgICBpZiAoY2FsbGVlQ29kZUJsb2NrKQogICAgICAgICBjYWxs
ZWVDb2RlQmxvY2stPmxpbmtJbmNvbWluZ0NhbGwoY2FsbGVyRnJhbWUsICZjYWxsTGlua0luZm8p
OwogCiAgICAgaWYgKGNhbGxMaW5rSW5mby5zcGVjaWFsaXphdGlvbktpbmQoKSA9PSBDb2RlRm9y
Q2FsbCAmJiBjYWxsTGlua0luZm8uYWxsb3dTdHVicygpKSB7Ci0gICAgICAgIGxpbmtTbG93Rm9y
KHZtLCBjYWxsTGlua0luZm8sIGxpbmtQb2x5bW9ycGhpY0NhbGxUaHVua0dlbmVyYXRvcik7Cisg
ICAgICAgIGxpbmtTbG93UGF0aFRvKHZtLCBjYWxsTGlua0luZm8sIGxpbmtQb2x5bW9ycGhpY0Nh
bGxUaHVua0dlbmVyYXRvcik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCiAgICAgbGlu
a1Nsb3dGb3Iodm0sIGNhbGxMaW5rSW5mbyk7CiB9CiAKLXZvaWQgbGlua0RpcmVjdEZvcigKK3Zv
aWQgbGlua0RpcmVjdENhbGwoCiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIENhbGxMaW5rSW5m
byYgY2FsbExpbmtJbmZvLCBDb2RlQmxvY2sqIGNhbGxlZUNvZGVCbG9jaywKICAgICBNYWNyb0Fz
c2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gY29kZVB0cikKIHsKQEAgLTEyNjksOSArMTI2
OSw3IEBAIHZvaWQgbGlua0RpcmVjdEZvcigKICAgICBpZiAoc2hvdWxkRHVtcERpc2Fzc2VtYmx5
Rm9yKGNhbGxlckNvZGVCbG9jaykpCiAgICAgICAgIGRhdGFMb2coIkxpbmtpbmcgY2FsbCBpbiAi
LCBGdWxsQ29kZU9yaWdpbihjYWxsZXJDb2RlQmxvY2ssIGNhbGxMaW5rSW5mby5jb2RlT3JpZ2lu
KCkpLCAiIHRvICIsIHBvaW50ZXJEdW1wKGNhbGxlZUNvZGVCbG9jayksICIsIGVudHJ5cG9pbnQg
YXQgIiwgY29kZVB0ciwgIlxuIik7CiAKLSAgICBpZiAoY2FsbExpbmtJbmZvLmNhbGxUeXBlKCkg
PT0gQ2FsbExpbmtJbmZvOjpEaXJlY3RUYWlsQ2FsbCkKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OnJlcGF0Y2hKdW1wVG9Ob3AoY2FsbExpbmtJbmZvLnBhdGNoYWJsZUp1bXAoKSk7Ci0gICAgTWFj
cm9Bc3NlbWJsZXI6OnJlcGF0Y2hOZWFyQ2FsbChjYWxsTGlua0luZm8uaG90UGF0aE90aGVyKCks
IENvZGVMb2NhdGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+KGNvZGVQdHIpKTsKKyAgICBjYWxsTGlu
a0luZm8uc2V0RGlyZWN0Q2FsbFRhcmdldChDb2RlTG9jYXRpb25MYWJlbDxKU0VudHJ5UHRyVGFn
Pihjb2RlUHRyKSk7CiAKICAgICBpZiAoY2FsbGVlQ29kZUJsb2NrKQogICAgICAgICBjYWxsZWVD
b2RlQmxvY2stPmxpbmtJbmNvbWluZ0NhbGwoY2FsbEZyYW1lLCAmY2FsbExpbmtJbmZvKTsKQEAg
LTEyODksMjEgKzEyODcsMTYgQEAgc3RhdGljIHZvaWQgcmV2ZXJ0Q2FsbChWTSYgdm0sIENhbGxM
aW5rSQogewogICAgIGlmIChjYWxsTGlua0luZm8uaXNEaXJlY3QoKSkgewogICAgICAgICBjYWxs
TGlua0luZm8uY2xlYXJDb2RlQmxvY2soKTsKLSAgICAgICAgaWYgKCFjYWxsTGlua0luZm8uY2xl
YXJlZEJ5SmV0dGlzb24oKSkgewotICAgICAgICAgICAgaWYgKGNhbGxMaW5rSW5mby5jYWxsVHlw
ZSgpID09IENhbGxMaW5rSW5mbzo6RGlyZWN0VGFpbENhbGwpCi0gICAgICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OnJlcGF0Y2hKdW1wKGNhbGxMaW5rSW5mby5wYXRjaGFibGVKdW1wKCksIGNh
bGxMaW5rSW5mby5zbG93UGF0aFN0YXJ0KCkpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoTmVhckNhbGwoY2FsbExpbmtJbmZvLmhvdFBh
dGhPdGhlcigpLCBjYWxsTGlua0luZm8uc2xvd1BhdGhTdGFydCgpKTsKLSAgICAgICAgfQorICAg
ICAgICBpZiAoIWNhbGxMaW5rSW5mby5jbGVhcmVkQnlKZXR0aXNvbigpKQorICAgICAgICAgICAg
Y2FsbExpbmtJbmZvLmluaXRpYWxpemVEaXJlY3RDYWxsKCk7CiAgICAgfSBlbHNlIHsKICAgICAg
ICAgaWYgKCFjYWxsTGlua0luZm8uY2xlYXJlZEJ5SmV0dGlzb24oKSkgewotICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OnJldmVydEp1bXBSZXBsYWNlbWVudFRvQnJhbmNoUHRyV2l0aFBhdGNo
KAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpzdGFydE9mQnJhbmNoUHRyV2l0aFBh
dGNoT25SZWdpc3RlcihjYWxsTGlua0luZm8uaG90UGF0aEJlZ2luKCkpLAotICAgICAgICAgICAg
ICAgIGNhbGxMaW5rSW5mby5jYWxsZWVHUFIoKSwgbnVsbHB0cik7Ci0gICAgICAgICAgICBsaW5r
U2xvd0Zvcih2bSwgY2FsbExpbmtJbmZvLCBjb2RlUmVmKTsKLSAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpyZXBhdGNoUG9pbnRlcihjYWxsTGlua0luZm8uaG90UGF0aEJlZ2luKCksIG51bGxw
dHIpOworICAgICAgICAgICAgbGlua1Nsb3dQYXRoVG8odm0sIGNhbGxMaW5rSW5mbywgY29kZVJl
Zik7CisKKyAgICAgICAgICAgIGlmIChjYWxsTGlua0luZm8uc3R1YigpKQorICAgICAgICAgICAg
ICAgIGNhbGxMaW5rSW5mby5yZXZlcnRDYWxsVG9TdHViKCk7CiAgICAgICAgIH0KLSAgICAgICAg
Y2FsbExpbmtJbmZvLmNsZWFyQ2FsbGVlKCk7CisgICAgICAgIGNhbGxMaW5rSW5mby5jbGVhckNh
bGxlZSgpOyAvLyBUaGlzIGFsc28gY2xlYXJzIHRoZSBpbmxpbmUgY2FjaGUgYm90aCBmb3IgZGF0
YSBhbmQgY29kZS1iYXNlZCBjYWNoZXMuCiAgICAgfQogICAgIGNhbGxMaW5rSW5mby5jbGVhclNl
ZW4oKTsKICAgICBjYWxsTGlua0luZm8uY2xlYXJTdHViKCk7CkBAIC0xMzEyLDkgKzEzMDUsOSBA
QCBzdGF0aWMgdm9pZCByZXZlcnRDYWxsKFZNJiB2bSwgQ2FsbExpbmtJCiAgICAgICAgIGNhbGxM
aW5rSW5mby5yZW1vdmUoKTsKIH0KIAotdm9pZCB1bmxpbmtGb3IoVk0mIHZtLCBDYWxsTGlua0lu
Zm8mIGNhbGxMaW5rSW5mbykKK3ZvaWQgdW5saW5rQ2FsbChWTSYgdm0sIENhbGxMaW5rSW5mbyYg
Y2FsbExpbmtJbmZvKQogewotICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OmR1bXBEaXNhc3NlbWJs
eSgpLCAiVW5saW5raW5nIGNhbGwgYXQgIiwgY2FsbExpbmtJbmZvLmhvdFBhdGhPdGhlcigpKTsK
KyAgICBkYXRhTG9nTG5JZihPcHRpb25zOjpkdW1wRGlzYXNzZW1ibHkoKSwgIlVubGlua2luZyBj
YWxsIGF0ICIsIGNhbGxMaW5rSW5mby5mYXN0UGF0aFN0YXJ0KCkpOwogICAgIAogICAgIHJldmVy
dENhbGwodm0sIGNhbGxMaW5rSW5mbywgdm0uZ2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJh
dG9yKS5yZXRhZ2dlZDxKSVRTdHViUm91dGluZVB0clRhZz4oKSk7CiB9CkBAIC0xNTgwLDcgKzE1
NzMsNyBAQCB2b2lkIGxpbmtQb2x5bW9ycGhpY0NhbGwoSlNHbG9iYWxPYmplY3QqCiAgICAgfQog
ICAgIHN0dWJKaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoZ2xvYmFsT2JqZWN0
KSwgR1BSSW5mbzo6cmVnVDMpOwogICAgIHN0dWJKaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW1QdHIoJmNhbGxMaW5rSW5mbyksIEdQUkluZm86OnJlZ1QyKTsKLSAgICBzdHViSml0Lm1v
dmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGNhbGxMaW5rSW5mby5jYWxsUmV0dXJuTG9j
YXRpb24oKS51bnRhZ2dlZEV4ZWN1dGFibGVBZGRyZXNzKCkpLCBHUFJJbmZvOjpyZWdUNCk7Cisg
ICAgc3R1YkppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihjYWxsTGlua0luZm8u
ZG9uZUxvY2F0aW9uKCkudW50YWdnZWRFeGVjdXRhYmxlQWRkcmVzcygpKSwgR1BSSW5mbzo6cmVn
VDQpOwogICAgIAogICAgIHN0dWJKaXQucmVzdG9yZVJldHVybkFkZHJlc3NCZWZvcmVSZXR1cm4o
R1BSSW5mbzo6cmVnVDQpOwogICAgIEFzc2VtYmx5SGVscGVyczo6SnVtcCBzbG93ID0gc3R1Ykpp
dC5qdW1wKCk7CkBAIC0xNjAzLDI5ICsxNTk2LDIzIEBAIHZvaWQgbGlua1BvbHltb3JwaGljQ2Fs
bChKU0dsb2JhbE9iamVjdCoKICAgICAgICAgcGF0Y2hCdWZmZXIubGluayhjYWxsVG9Db2RlUHRy
LmNhbGwsIEZ1bmN0aW9uUHRyPEpTRW50cnlQdHJUYWc+KGNhbGxUb0NvZGVQdHIuY29kZVB0cikp
OwogI2VuZGlmCiAgICAgfQotICAgIGlmIChpc1dlYkFzc2VtYmx5IHx8IEpJVENvZGU6OmlzT3B0
aW1pemluZ0pJVChjYWxsZXJDb2RlQmxvY2stPmppdFR5cGUoKSkpCi0gICAgICAgIHBhdGNoQnVm
ZmVyLmxpbmsoZG9uZSwgY2FsbExpbmtJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbigpLmxhYmVsQXRP
ZmZzZXQoMCkpOwotICAgIGVsc2UKLSAgICAgICAgcGF0Y2hCdWZmZXIubGluayhkb25lLCBjYWxs
TGlua0luZm8uaG90UGF0aE90aGVyKCkubGFiZWxBdE9mZnNldCgwKSk7CisgICAgcGF0Y2hCdWZm
ZXIubGluayhkb25lLCBjYWxsTGlua0luZm8uZG9uZUxvY2F0aW9uKCkpOwogICAgIHBhdGNoQnVm
ZmVyLmxpbmsoc2xvdywgQ29kZUxvY2F0aW9uTGFiZWw8SklUVGh1bmtQdHJUYWc+KHZtLmdldENU
SVN0dWIobGlua1BvbHltb3JwaGljQ2FsbFRodW5rR2VuZXJhdG9yKS5jb2RlKCkpKTsKICAgICAK
ICAgICBhdXRvIHN0dWJSb3V0aW5lID0gYWRvcHRSZWYoKm5ldyBQb2x5bW9ycGhpY0NhbGxTdHVi
Um91dGluZSgKICAgICAgICAgRklOQUxJWkVfQ09ERV9GT1IoCiAgICAgICAgICAgICBjYWxsZXJD
b2RlQmxvY2ssIHBhdGNoQnVmZmVyLCBKSVRTdHViUm91dGluZVB0clRhZywKICAgICAgICAgICAg
ICJQb2x5bW9ycGhpYyBjYWxsIHN0dWIgZm9yICVzLCByZXR1cm4gcG9pbnQgJXAsIHRhcmdldHMg
JXMiLAotICAgICAgICAgICAgICAgIGlzV2ViQXNzZW1ibHkgPyAiV2ViQXNzZW1ibHkiIDogdG9D
U3RyaW5nKCpjYWxsZXJDb2RlQmxvY2spLmRhdGEoKSwgY2FsbExpbmtJbmZvLmNhbGxSZXR1cm5M
b2NhdGlvbigpLmxhYmVsQXRPZmZzZXQoMCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwKKyAgICAgICAg
ICAgICAgICBpc1dlYkFzc2VtYmx5ID8gIldlYkFzc2VtYmx5IiA6IHRvQ1N0cmluZygqY2FsbGVy
Q29kZUJsb2NrKS5kYXRhKCksIGNhbGxMaW5rSW5mby5kb25lTG9jYXRpb24oKS5leGVjdXRhYmxl
QWRkcmVzcygpLAogICAgICAgICAgICAgICAgIHRvQ1N0cmluZyhsaXN0RHVtcChjYWxsQ2FzZXMp
KS5kYXRhKCkpLAogICAgICAgICB2bSwgb3duZXIsIGNhbGxGcmFtZS0+Y2FsbGVyRnJhbWUoKSwg
Y2FsbExpbmtJbmZvLCBjYWxsQ2FzZXMsCiAgICAgICAgIFdURk1vdmUoZmFzdENvdW50cykpKTsK
LSAgICAKLSAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwbGFjZVdpdGhKdW1wKAotICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6c3RhcnRPZkJyYW5jaFB0cldpdGhQYXRjaE9uUmVnaXN0ZXIoY2FsbExpbmtJ
bmZvLmhvdFBhdGhCZWdpbigpKSwKLSAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJv
dXRpbmVQdHJUYWc+KHN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7CisKICAgICAvLyBUaGUg
b3JpZ2luYWwgc2xvdyBwYXRoIGlzIHVucmVhY2hhYmxlIG9uIDY0LWJpdHMsIGJ1dCBzdGlsbAog
ICAgIC8vIHJlYWNoYWJsZSBvbiAzMi1iaXRzIHNpbmNlIGEgbm9uLWNlbGwgY2FsbGVlIHdpbGwg
YWx3YXlzCiAgICAgLy8gdHJpZ2dlciB0aGUgc2xvdyBwYXRoCiAgICAgbGlua1Nsb3dGb3Iodm0s
IGNhbGxMaW5rSW5mbyk7Ci0gICAgCisKICAgICAvLyBJZiB0aGVyZSBoYWQgYmVlbiBhIHByZXZp
b3VzIHN0dWIgcm91dGluZSwgdGhhdCBvbmUgd2lsbCBkaWUgYXMgc29vbiBhcyB0aGUgR0MgcnVu
cyBhbmQgc2VlcwogICAgIC8vIHRoYXQgaXQncyBubyBsb25nZXIgb24gc3RhY2suCiAgICAgY2Fs
bExpbmtJbmZvLnNldFN0dWIoV1RGTW92ZShzdHViUm91dGluZSkpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9SZXBhdGNoLmgJKHJldmlzaW9uIDI3NzQ0MCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvUmVwYXRjaC5oCSh3b3JraW5nIGNvcHkpCkBAIC01NiwxMCArNTYsMTAgQEAg
dm9pZCByZXBhdGNoSW5CeUlEKEpTR2xvYmFsT2JqZWN0KiwgQ29kZQogdm9pZCByZXBhdGNoQ2hl
Y2tQcml2YXRlQnJhbmQoSlNHbG9iYWxPYmplY3QqLCBDb2RlQmxvY2sqLCBKU09iamVjdCosIENh
Y2hlYWJsZUlkZW50aWZpZXIsIFN0cnVjdHVyZVN0dWJJbmZvJik7CiB2b2lkIHJlcGF0Y2hTZXRQ
cml2YXRlQnJhbmQoSlNHbG9iYWxPYmplY3QqLCBDb2RlQmxvY2sqLCBKU09iamVjdCosIFN0cnVj
dHVyZSosIENhY2hlYWJsZUlkZW50aWZpZXIsIFN0cnVjdHVyZVN0dWJJbmZvJik7CiB2b2lkIHJl
cGF0Y2hJbnN0YW5jZU9mKEpTR2xvYmFsT2JqZWN0KiwgQ29kZUJsb2NrKiwgSlNWYWx1ZSB2YWx1
ZSwgSlNWYWx1ZSBwcm90b3R5cGUsIFN0cnVjdHVyZVN0dWJJbmZvJiwgYm9vbCB3YXNGb3VuZCk7
Ci12b2lkIGxpbmtGb3IoVk0mLCBDYWxsRnJhbWUqLCBDYWxsTGlua0luZm8mLCBDb2RlQmxvY2sq
LCBKU09iamVjdCogY2FsbGVlLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4p
Owotdm9pZCBsaW5rRGlyZWN0Rm9yKENhbGxGcmFtZSosIENhbGxMaW5rSW5mbyYsIENvZGVCbG9j
ayosIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPik7Cit2b2lkIGxpbmtNb25v
bW9ycGhpY0NhbGwoVk0mLCBDYWxsRnJhbWUqLCBDYWxsTGlua0luZm8mLCBDb2RlQmxvY2sqLCBK
U09iamVjdCogY2FsbGVlLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4pOwor
dm9pZCBsaW5rRGlyZWN0Q2FsbChDYWxsRnJhbWUqLCBDYWxsTGlua0luZm8mLCBDb2RlQmxvY2sq
LCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4pOwogdm9pZCBsaW5rU2xvd0Zv
cihDYWxsRnJhbWUqLCBDYWxsTGlua0luZm8mKTsKLXZvaWQgdW5saW5rRm9yKFZNJiwgQ2FsbExp
bmtJbmZvJik7Cit2b2lkIHVubGlua0NhbGwoVk0mLCBDYWxsTGlua0luZm8mKTsKIHZvaWQgbGlu
a1BvbHltb3JwaGljQ2FsbChKU0dsb2JhbE9iamVjdCosIENhbGxGcmFtZSosIENhbGxMaW5rSW5m
byYsIENhbGxWYXJpYW50KTsKIHZvaWQgcmVzZXRHZXRCeShDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVT
dHViSW5mbyYsIEdldEJ5S2luZCk7CiB2b2lkIHJlc2V0UHV0QnlJRChDb2RlQmxvY2sqLCBTdHJ1
Y3R1cmVTdHViSW5mbyYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0
aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0
aW9ucy5jcHAJKHJldmlzaW9uIDI3NzQ0MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL09wdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MDcsOSArNjA3LDkgQEAgdm9pZCBP
cHRpb25zOjppbml0aWFsaXplKCkKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKE9wdGlvbnM6
OmFkZHJlc3NPZk9wdGlvbihmb3JjZU9TUkV4aXRUb0xMSW50SUQpID09ICAmT3B0aW9uczo6Zm9y
Y2VPU1JFeGl0VG9MTEludCgpKTsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKE9wdGlvbnM6
OmFkZHJlc3NPZk9wdGlvbkRlZmF1bHQoZm9yY2VPU1JFeGl0VG9MTEludElEKSA9PSAgJk9wdGlv
bnM6OmZvcmNlT1NSRXhpdFRvTExJbnREZWZhdWx0KCkpOwogCi0jaWZuZGVmIE5ERUJVRworLy8j
aWZuZGVmIE5ERUJVRwogICAgICAgICAgICAgQ29uZmlnOjplbmFibGVSZXN0cmljdGVkT3B0aW9u
cygpOwotI2VuZGlmCisvLyNlbmRpZgogICAgICAgICAgICAgLy8gSW5pdGlhbGl6ZSBlYWNoIG9m
IHRoZSBvcHRpb25zIHdpdGggdGhlaXIgZGVmYXVsdCB2YWx1ZXM6CiAjZGVmaW5lIElOSVRfT1BU
SU9OKHR5cGVfLCBuYW1lXywgZGVmYXVsdFZhbHVlXywgYXZhaWxhYmlsaXR5XywgZGVzY3JpcHRp
b25fKSB7IFwKICAgICAgICAgICAgICAgICBhdXRvIHZhbHVlID0gZGVmYXVsdFZhbHVlXzsgXApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAkocmV2aXNpb24gMjc3NDQwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xNzE2LDQgKzE3MTYsNiBAQCB2b2lkIFZNOjpyZW1vdmVMb29wSGludEV4ZWN1dGlvbkNvdW50
ZXIoCiAgICAgICAgIG1fbG9vcEhpbnRFeGVjdXRpb25Db3VudHMucmVtb3ZlKGl0ZXIpOwogfQog
Cit1aW50NjRfdCBnX251bWJlck9mT1NSRXhpdHM7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2FzbVRvSlMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dhc21Ub0pTLmNwcAkocmV2aXNpb24g
Mjc3NDQwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2FzbVRvSlMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yNjEsMTkgKzI2MSwxOCBAQCBFeHBlY3RlZDxNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8V2FzbUVudHJ5CiAKICAgICBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbyA9IGNh
bGxMaW5rSW5mb3MuYWRkKENvZGVPcmlnaW4oKSk7CiAgICAgY2FsbExpbmtJbmZvLT5zZXRVcENh
bGwoQ2FsbExpbmtJbmZvOjpDYWxsLCBpbXBvcnRKU0NlbGxHUFJSZWcpOwotICAgIEpJVDo6RGF0
YUxhYmVsUHRyIHRhcmdldFRvQ2hlY2s7Ci0gICAgSklUOjpUcnVzdGVkSW1tUHRyIGluaXRpYWxS
aWdodFZhbHVlKG51bGxwdHIpOwotICAgIEpJVDo6SnVtcCBzbG93UGF0aCA9IGppdC5icmFuY2hQ
dHJXaXRoUGF0Y2goTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBpbXBvcnRKU0NlbGxHUFJSZWcs
IHRhcmdldFRvQ2hlY2ssIGluaXRpYWxSaWdodFZhbHVlKTsKLSAgICBKSVQ6OkNhbGwgZmFzdENh
bGwgPSBqaXQubmVhckNhbGwoKTsKKyAgICBhdXRvIHNsb3dQYXRoID0gY2FsbExpbmtJbmZvLT5l
bWl0RmFzdFBhdGgoaml0LCBpbXBvcnRKU0NlbGxHUFJSZWcsIEludmFsaWRHUFJSZWcsIENhbGxM
aW5rSW5mbzo6VXNlRGF0YUlDOjpObyk7CisKICAgICBKSVQ6Okp1bXAgZG9uZSA9IGppdC5qdW1w
KCk7CiAgICAgc2xvd1BhdGgubGluaygmaml0KTsKKyAgICBhdXRvIHNsb3dQYXRoU3RhcnQgPSBq
aXQubGFiZWwoKTsKICAgICAvLyBDYWxsZWUgbmVlZHMgdG8gYmUgaW4gcmVnVDAgaGVyZS4KLSAg
ICBqaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihjYWxsTGlua0luZm8pLCBH
UFJJbmZvOjpyZWdUMik7IC8vIExpbmsgaW5mbyBuZWVkcyB0byBiZSBpbiByZWdUMi4KICAgICBq
aXQubG9hZFdhc21Db250ZXh0SW5zdGFuY2UoR1BSSW5mbzo6cmVnVDMpOwogICAgIGppdC5sb2Fk
UHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMywgSW5zdGFuY2U6Om9mZnNl
dE9mT3duZXIoKSksIEdQUkluZm86OnJlZ1QzKTsKICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBl
cnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDMsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0
T2ZHbG9iYWxPYmplY3QoKSksIEdQUkluZm86OnJlZ1QzKTsKLSAgICBKSVQ6OkNhbGwgc2xvd0Nh
bGwgPSBqaXQubmVhckNhbGwoKTsKKyAgICBjYWxsTGlua0luZm8tPmVtaXRTbG93UGF0aCh2bSwg
aml0KTsKICAgICBkb25lLmxpbmsoJmppdCk7CisgICAgYXV0byBkb25lTG9jYXRpb24gPSBqaXQu
bGFiZWwoKTsKIAogICAgIGlmIChzaWduYXR1cmUucmV0dXJuQ291bnQoKSA9PSAxKSB7CiAgICAg
ICAgIHN3aXRjaCAoc2lnbmF0dXJlLnJldHVyblR5cGUoMCkua2luZCkgewpAQCAtNDIxLDExICs0
MjAsOSBAQCBFeHBlY3RlZDxNYWNyb0Fzc2VtYmxlckNvZGVSZWY8V2FzbUVudHJ5CiAgICAgaWYg
KFVOTElLRUxZKHBhdGNoQnVmZmVyLmRpZEZhaWxUb0FsbG9jYXRlKCkpKQogICAgICAgICByZXR1
cm4gbWFrZVVuZXhwZWN0ZWQoQmluZGluZ0ZhaWx1cmU6Ok91dE9mTWVtb3J5KTsKIAotICAgIHBh
dGNoQnVmZmVyLmxpbmsoc2xvd0NhbGwsIEZ1bmN0aW9uUHRyPEpJVFRodW5rUHRyVGFnPih2bS5n
ZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpLmNvZGUoKSkpOwotICAgIENvZGVMb2Nh
dGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IGNhbGxSZXR1cm5Mb2NhdGlvbihwYXRjaEJ1ZmZl
ci5sb2NhdGlvbk9mTmVhckNhbGw8SlNJbnRlcm5hbFB0clRhZz4oc2xvd0NhbGwpKTsKLSAgICBD
b2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBob3RQYXRoQmVnaW4ocGF0Y2hCdWZm
ZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPih0YXJnZXRUb0NoZWNrKSk7Ci0gICAgQ29k
ZUxvY2F0aW9uTmVhckNhbGw8SlNJbnRlcm5hbFB0clRhZz4gaG90UGF0aE90aGVyID0gcGF0Y2hC
dWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPEpTSW50ZXJuYWxQdHJUYWc+KGZhc3RDYWxsKTsKLSAg
ICBjYWxsTGlua0luZm8tPnNldENhbGxMb2NhdGlvbnMoY2FsbFJldHVybkxvY2F0aW9uLCBob3RQ
YXRoQmVnaW4sIGhvdFBhdGhPdGhlcik7CisgICAgY2FsbExpbmtJbmZvLT5zZXRDb2RlTG9jYXRp
b25zKAorICAgICAgICAgICAgcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFn
PihzbG93UGF0aFN0YXJ0KSwKKyAgICAgICAgICAgIHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SlNJ
bnRlcm5hbFB0clRhZz4oZG9uZUxvY2F0aW9uKSk7CiAKICAgICByZXR1cm4gRklOQUxJWkVfV0FT
TV9DT0RFKHBhdGNoQnVmZmVyLCBXYXNtRW50cnlQdHJUYWcsICJXZWJBc3NlbWJseS0+SmF2YVNj
cmlwdCBpbXBvcnRbJWldICVzIiwgaW1wb3J0SW5kZXgsIHNpZ25hdHVyZS50b1N0cmluZygpLmFz
Y2lpKCkuZGF0YSgpKTsKIH0K
</data>
<flag name="commit-queue"
          id="449468"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>428541</attachid>
            <date>2021-05-13 12:05:43 -0700</date>
            <delta_ts>2021-05-13 17:12:15 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>86222</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2Vt
Ymxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJz
dHJhY3RNYWNyb0Fzc2VtYmxlci5oCShyZXZpc2lvbiAyNzc0NDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtOTcxLDYgKzk3MSwxMiBAQCBwdWJsaWM6CiAgICAgICAgIG1fbGlua1Rhc2tzLmFwcGVu
ZChjcmVhdGVTaGFyZWRUYXNrPHZvaWQoTGlua0J1ZmZlciYpPihmdW5jdG9yKSk7CiAgICAgfQog
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIGFkZExhdGVMaW5rVGFz
ayhjb25zdCBGdW5jdG9yJiBmdW5jdG9yKSAvLyBSdW4gYWZ0ZXIgYWxsIGxpbmsgdGFza3MKKyAg
ICB7CisgICAgICAgIG1fbGF0ZUxpbmtUYXNrcy5hcHBlbmQoY3JlYXRlU2hhcmVkVGFzazx2b2lk
KExpbmtCdWZmZXImKT4oZnVuY3RvcikpOworICAgIH0KKwogI2lmIENPTVBJTEVSKEdDQykKICAg
ICAvLyBXb3JrYXJvdW5kIGZvciBHQ0MgZGVtYW5kaW5nIHRoYXQgbWVtY3B5ICJtdXN0IGJlIHRo
ZSBuYW1lIG9mIGEgZnVuY3Rpb24gd2l0aCBleHRlcm5hbCBsaW5rYWdlIi4KICAgICBzdGF0aWMg
dm9pZCogbWVtY3B5KHZvaWQqIGRzdCwgY29uc3Qgdm9pZCogc3JjLCBzaXplX3Qgc2l6ZSkKQEAg
LTExMTQsNiArMTEyMCw3IEBAIHByb3RlY3RlZDoKICAgICBib29sIG1fYWxsb3dTY3JhdGNoUmVn
aXN0ZXIgeyB0cnVlIH07CiAKICAgICBWZWN0b3I8UmVmUHRyPFNoYXJlZFRhc2s8dm9pZChMaW5r
QnVmZmVyJik+Pj4gbV9saW5rVGFza3M7CisgICAgVmVjdG9yPFJlZlB0cjxTaGFyZWRUYXNrPHZv
aWQoTGlua0J1ZmZlciYpPj4+IG1fbGF0ZUxpbmtUYXNrczsKIAogICAgIGZyaWVuZCBjbGFzcyBM
aW5rQnVmZmVyOwogfTsgLy8gY2xhc3MgQWJzdHJhY3RNYWNyb0Fzc2VtYmxlcgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuY3BwCShyZXZpc2lv
biAyNzc0NDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MzksNiArNDM5LDcgQEAgdm9pZCBMaW5rQnVmZmVyOjps
aW5rQ29kZShNYWNyb0Fzc2VtYmxlcgogI2VuZGlmIC8vICFFTkFCTEUoQlJBTkNIX0NPTVBBQ1RJ
T04pCiAKICAgICBtX2xpbmtUYXNrcyA9IFdURk1vdmUobWFjcm9Bc3NlbWJsZXIubV9saW5rVGFz
a3MpOworICAgIG1fbGF0ZUxpbmtUYXNrcyA9IFdURk1vdmUobWFjcm9Bc3NlbWJsZXIubV9sYXRl
TGlua1Rhc2tzKTsKIH0KIAogdm9pZCBMaW5rQnVmZmVyOjphbGxvY2F0ZShNYWNyb0Fzc2VtYmxl
ciYgbWFjcm9Bc3NlbWJsZXIsIEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKQEAgLTQ3MSw2
ICs0NzIsOCBAQCB2b2lkIExpbmtCdWZmZXI6OnBlcmZvcm1GaW5hbGl6YXRpb24oKQogewogICAg
IGZvciAoYXV0byYgdGFzayA6IG1fbGlua1Rhc2tzKQogICAgICAgICB0YXNrLT5ydW4oKnRoaXMp
OworICAgIGZvciAoYXV0byYgdGFzayA6IG1fbGF0ZUxpbmtUYXNrcykKKyAgICAgICAgdGFzay0+
cnVuKCp0aGlzKTsKIAogI2lmbmRlZiBOREVCVUcKICAgICBBU1NFUlQobV9pc0p1bXBJc2xhbmQg
fHwgIWlzQ29tcGlsYXRpb25UaHJlYWQoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL0xpbmtCdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuaAkocmV2aXNpb24gMjc3NDQwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQw
Myw2ICs0MDMsNyBAQCBwcml2YXRlOgogICAgIFByb2ZpbGUgbV9wcm9maWxlIHsgUHJvZmlsZTo6
VW5jYXRlZ29yaXplZCB9OwogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxMaW5rQnVmZmVyUHRy
VGFnPiBtX2NvZGU7CiAgICAgVmVjdG9yPFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoTGlua0J1ZmZl
ciYpPj4+IG1fbGlua1Rhc2tzOworICAgIFZlY3RvcjxSZWZQdHI8U2hhcmVkVGFzazx2b2lkKExp
bmtCdWZmZXImKT4+PiBtX2xhdGVMaW5rVGFza3M7CiAKICAgICBzdGF0aWMgc2l6ZV90IHNfcHJv
ZmlsZUN1bW11bGF0aXZlTGlua2VkU2l6ZXNbbnVtYmVyT2ZQcm9maWxlc107CiB9OwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcAkocmV2aXNp
b24gMjc3NDQwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTgwLDExICsxNTgwLDYgQEAgdm9pZCBBY2Nlc3NDYXNl
OjpnZW5lcmF0ZUltcGwoQWNjZXNzR2VuZQogICAgICAgICAvLyBTdHVmZiBmb3IgY3VzdG9tIGdl
dHRlcnMvc2V0dGVycy4KICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIG9wZXJhdGlvbkNhbGw7
CiAKLSAgICAgICAgLy8gU3R1ZmYgZm9yIEpTIGdldHRlcnMvc2V0dGVycy4KLSAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpEYXRhTGFiZWxQdHIgYWRkcmVzc09mTGlua0Z1bmN0aW9uQ2hlY2s7Ci0gICAg
ICAgIENDYWxsSGVscGVyczo6Q2FsbCBmYXN0UGF0aENhbGw7Ci0gICAgICAgIENDYWxsSGVscGVy
czo6Q2FsbCBzbG93UGF0aENhbGw7Ci0KICAgICAgICAgLy8gVGhpcyBhbHNvIGRvZXMgdGhlIG5l
Y2Vzc2FyeSBjYWxjdWxhdGlvbnMgb2Ygd2hldGhlciBvciBub3Qgd2UncmUgYW4KICAgICAgICAg
Ly8gZXhjZXB0aW9uIGhhbmRsaW5nIGNhbGwgc2l0ZS4KICAgICAgICAgQWNjZXNzR2VuZXJhdGlv
blN0YXRlOjpTcGlsbFN0YXRlIHNwaWxsU3RhdGUgPSBzdGF0ZS5wcmVzZXJ2ZUxpdmVSZWdpc3Rl
cnNUb1N0YWNrRm9yQ2FsbCgpOwpAQCAtMTcwMSwyNCArMTY5NiwyMiBAQCB2b2lkIEFjY2Vzc0Nh
c2U6OmdlbmVyYXRlSW1wbChBY2Nlc3NHZW5lCiAgICAgICAgICAgICAgICAgICAgICAgICB2aXJ0
dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMoMSkub2Zmc2V0KCkgKiBzaXplb2Yo
UmVnaXN0ZXIpKSk7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIENDYWxsSGVscGVyczo6
SnVtcCBzbG93Q2FzZSA9IGppdC5icmFuY2hQdHJXaXRoUGF0Y2goCi0gICAgICAgICAgICAgICAg
Q0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwgbG9hZGVkVmFsdWVHUFIsIGFkZHJlc3NPZkxpbmtGdW5j
dGlvbkNoZWNrLAotICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihu
dWxscHRyKSk7CisgICAgICAgICAgICBhdXRvIHNsb3dDYXNlID0gYWNjZXNzLmNhbGxMaW5rSW5m
bygpLT5lbWl0RmFzdFBhdGgoaml0LCBsb2FkZWRWYWx1ZUdQUiwgbG9hZGVkVmFsdWVHUFIgPT0g
R1BSSW5mbzo6cmVnVDIgPyBHUFJJbmZvOjpyZWdUMCA6IEdQUkluZm86OnJlZ1QyLCBKSVRDb2Rl
Ojppc09wdGltaXppbmdKSVQoY29kZUJsb2NrLT5qaXRUeXBlKCkpID8gQ2FsbExpbmtJbmZvOjpV
c2VEYXRhSUM6Ok5vIDogQ2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6Olllcyk7CisgICAgICAgICAg
ICBhdXRvIGRvbmVMb2NhdGlvbiA9IGppdC5sYWJlbCgpOwogCi0gICAgICAgICAgICBmYXN0UGF0
aENhbGwgPSBqaXQubmVhckNhbGwoKTsKICAgICAgICAgICAgIGlmIChtX3R5cGUgPT0gR2V0dGVy
KQogICAgICAgICAgICAgICAgIGppdC5zZXR1cFJlc3VsdHModmFsdWVSZWdzKTsKICAgICAgICAg
ICAgIGRvbmUuYXBwZW5kKGppdC5qdW1wKCkpOwogCiAgICAgICAgICAgICBzbG93Q2FzZS5saW5r
KCZqaXQpOworICAgICAgICAgICAgYXV0byBzbG93UGF0aFN0YXJ0ID0gaml0LmxhYmVsKCk7CiAg
ICAgICAgICAgICBqaXQubW92ZShsb2FkZWRWYWx1ZUdQUiwgR1BSSW5mbzo6cmVnVDApOwogI2lm
IFVTRShKU1ZBTFVFMzJfNjQpCiAgICAgICAgICAgICAvLyBXZSAqYWx3YXlzKiBrbm93IHRoYXQg
dGhlIGdldHRlci9zZXR0ZXIsIGlmIG5vbi1udWxsLCBpcyBhIGNlbGwuCiAgICAgICAgICAgICBq
aXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwgR1BS
SW5mbzo6cmVnVDEpOwogI2VuZGlmCi0gICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW1QdHIoYWNjZXNzLmNhbGxMaW5rSW5mbygpKSwgR1BSSW5mbzo6cmVnVDIpOwog
ICAgICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGdsb2JhbE9i
amVjdCksIEdQUkluZm86OnJlZ1QzKTsKLSAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCA9IGppdC5u
ZWFyQ2FsbCgpOworICAgICAgICAgICAgYWNjZXNzLmNhbGxMaW5rSW5mbygpLT5lbWl0U2xvd1Bh
dGgodm0sIGppdCk7CiAgICAgICAgICAgICBpZiAobV90eXBlID09IEdldHRlcikKICAgICAgICAg
ICAgICAgICBqaXQuc2V0dXBSZXN1bHRzKHZhbHVlUmVncyk7CiAgICAgICAgICAgICBkb25lLmFw
cGVuZChqaXQuanVtcCgpKTsKQEAgLTE3MzUsMTUgKzE3MjgsMTAgQEAgdm9pZCBBY2Nlc3NDYXNl
OjpnZW5lcmF0ZUltcGwoQWNjZXNzR2VuZQogICAgICAgICAgICAgYm9vbCBjYWxsSGFzUmV0dXJu
VmFsdWUgPSBpc0dldHRlcigpOwogICAgICAgICAgICAgcmVzdG9yZUxpdmVSZWdpc3RlcnNGcm9t
U3RhY2tGb3JDYWxsKHNwaWxsU3RhdGUsIGNhbGxIYXNSZXR1cm5WYWx1ZSk7CiAKLSAgICAgICAg
ICAgIGppdC5hZGRMaW5rVGFzayhbPSwgJnZtXSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewot
ICAgICAgICAgICAgICAgIHRoaXMtPmFzPEdldHRlclNldHRlckFjY2Vzc0Nhc2U+KCkuY2FsbExp
bmtJbmZvKCktPnNldENhbGxMb2NhdGlvbnMoCi0gICAgICAgICAgICAgICAgICAgIENvZGVMb2Nh
dGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+KGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxs
PEpTSW50ZXJuYWxQdHJUYWc+KHNsb3dQYXRoQ2FsbCkpLAotICAgICAgICAgICAgICAgICAgICBD
b2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPihsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8
SlNJbnRlcm5hbFB0clRhZz4oYWRkcmVzc09mTGlua0Z1bmN0aW9uQ2hlY2spKSwKLSAgICAgICAg
ICAgICAgICAgICAgbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8SlNJbnRlcm5hbFB0clRh
Zz4oZmFzdFBhdGhDYWxsKSk7Ci0KLSAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoCi0g
ICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCwKLSAgICAgICAgICAgICAgICAgICAgQ29k
ZUxvY2F0aW9uTGFiZWw8SklUVGh1bmtQdHJUYWc+KHZtLmdldENUSVN0dWIobGlua0NhbGxUaHVu
a0dlbmVyYXRvcikuY29kZSgpKSk7CisgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChM
aW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgICAgICAgICAgICAgdGhpcy0+YXM8R2V0dGVy
U2V0dGVyQWNjZXNzQ2FzZT4oKS5jYWxsTGlua0luZm8oKS0+c2V0Q29kZUxvY2F0aW9ucygKKyAg
ICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+
KHNsb3dQYXRoU3RhcnQpLAorICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9u
T2Y8SlNJbnRlcm5hbFB0clRhZz4oZG9uZUxvY2F0aW9uKSk7CiAgICAgICAgICAgICB9KTsKICAg
ICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIEFTU0VSVChtX3R5cGUgPT0gQ3VzdG9tVmFsdWVH
ZXR0ZXIgfHwgbV90eXBlID09IEN1c3RvbUFjY2Vzc29yR2V0dGVyIHx8IG1fdHlwZSA9PSBDdXN0
b21WYWx1ZVNldHRlciB8fCBtX3R5cGUgPT0gQ3VzdG9tQWNjZXNzb3JTZXR0ZXIpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAJKHJl
dmlzaW9uIDI3NzQ0MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlu
a0luZm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwxMSArMjYsMTUgQEAKICNpbmNsdWRlICJj
b25maWcuaCIKICNpbmNsdWRlICJDYWxsTGlua0luZm8uaCIKIAorI2luY2x1ZGUgIkNDYWxsSGVs
cGVycy5oIgogI2luY2x1ZGUgIkNhbGxGcmFtZVNodWZmbGVEYXRhLmgiCisjaW5jbHVkZSAiRGlz
YWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlLmgiCiAjaW5jbHVkZSAiRnVuY3Rpb25Db2Rl
QmxvY2suaCIKICNpbmNsdWRlICJKU0NlbGxJbmxpbmVzLmgiCiAjaW5jbHVkZSAiT3Bjb2RlLmgi
CisjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgogI2luY2x1ZGUgIlJlcGF0Y2guaCIKKyNpbmNsdWRl
ICJUaHVua0dlbmVyYXRvcnMuaCIKICNpbmNsdWRlIDx3dGYvTGlzdER1bXAuaD4KIAogI2lmIEVO
QUJMRShKSVQpCkBAIC03Nyw2ICs4MSw3IEBAIENhbGxMaW5rSW5mbzo6Q2FsbExpbmtJbmZvKENv
ZGVPcmlnaW4gY28KICAgICAsIG1fYWxsb3dTdHVicyh0cnVlKQogICAgICwgbV9jbGVhcmVkQnlK
ZXR0aXNvbihmYWxzZSkKICAgICAsIG1fY2FsbFR5cGUoTm9uZSkKKyAgICAsIG1fdXNlRGF0YUlD
KHN0YXRpY19jYXN0PHVuc2lnbmVkPihVc2VEYXRhSUM6OlllcykpCiB7CiB9CiAKQEAgLTEwMiw0
NyArMTA3LDUxIEBAIHZvaWQgQ2FsbExpbmtJbmZvOjp1bmxpbmsoVk0mIHZtKQogICAgIC8vIFdl
IGNvdWxkIGJlIGNhbGxlZCBldmVuIGlmIHdlJ3JlIG5vdCBsaW5rZWQgYW55bW9yZSBiZWNhdXNl
IG9mIGhvdyBwb2x5bW9ycGhpYyBjYWxscwogICAgIC8vIHdvcmsuIEVhY2ggY2FsbHNpdGUgd2l0
aGluIHRoZSBwb2x5bW9ycGhpYyBjYWxsIHN0dWIgbWF5IHNlcGFyYXRlbHkgYXNrIHVzIHRvIHVu
bGluaygpLgogICAgIGlmIChpc0xpbmtlZCgpKQotICAgICAgICB1bmxpbmtGb3Iodm0sICp0aGlz
KTsKKyAgICAgICAgdW5saW5rQ2FsbCh2bSwgKnRoaXMpOwogCiAgICAgLy8gRWl0aGVyIHdlIHdl
cmUgdW5saW5rZWQsIGluIHdoaWNoIGNhc2Ugd2Ugc2hvdWxkIG5vdCBoYXZlIGJlZW4gb24gYW55
IGxpc3QsIG9yIHdlIHVubGlua2VkCiAgICAgLy8gb3Vyc2VsdmVzIHNvIHRoYXQgd2UncmUgbm90
IG9uIGFueSBsaXN0IGFueW1vcmUuCiAgICAgUkVMRUFTRV9BU1NFUlQoIWlzT25MaXN0KCkpOwog
fQogCi1Db2RlTG9jYXRpb25OZWFyQ2FsbDxKU0ludGVybmFsUHRyVGFnPiBDYWxsTGlua0luZm86
OmNhbGxSZXR1cm5Mb2NhdGlvbigpCitDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFn
PiBDYWxsTGlua0luZm86OmZhc3RQYXRoU3RhcnQoKQogewotICAgIFJFTEVBU0VfQVNTRVJUKCFp
c0RpcmVjdCgpKTsKLSAgICByZXR1cm4gQ29kZUxvY2F0aW9uTmVhckNhbGw8SlNJbnRlcm5hbFB0
clRhZz4obV9jYWxsUmV0dXJuTG9jYXRpb25PclBhdGNoYWJsZUp1bXAsIE5lYXJDYWxsTW9kZTo6
UmVndWxhcik7CisgICAgcmV0dXJuIENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0cjxKU0ludGVybmFs
UHRyVGFnPihtX2Zhc3RQYXRoU3RhcnQpOwogfQogCi1Db2RlTG9jYXRpb25KdW1wPEpTSW50ZXJu
YWxQdHJUYWc+IENhbGxMaW5rSW5mbzo6cGF0Y2hhYmxlSnVtcCgpCitDb2RlTG9jYXRpb25MYWJl
bDxKU0ludGVybmFsUHRyVGFnPiBDYWxsTGlua0luZm86OnNsb3dQYXRoU3RhcnQoKQogewotICAg
IFJFTEVBU0VfQVNTRVJUKGNhbGxUeXBlKCkgPT0gRGlyZWN0VGFpbENhbGwpOwotICAgIHJldHVy
biBDb2RlTG9jYXRpb25KdW1wPEpTSW50ZXJuYWxQdHJUYWc+KG1fY2FsbFJldHVybkxvY2F0aW9u
T3JQYXRjaGFibGVKdW1wKTsKKyAgICBSRUxFQVNFX0FTU0VSVCghaXNEYXRhSUMoKSk7CisgICAg
cmV0dXJuIHUuY29kZUlDLm1fc2xvd1BhdGhTdGFydDsKIH0KIAotQ29kZUxvY2F0aW9uRGF0YUxh
YmVsUHRyPEpTSW50ZXJuYWxQdHJUYWc+IENhbGxMaW5rSW5mbzo6aG90UGF0aEJlZ2luKCkKK0Nv
ZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IENhbGxMaW5rSW5mbzo6ZG9uZUxvY2F0
aW9uKCkKIHsKICAgICBSRUxFQVNFX0FTU0VSVCghaXNEaXJlY3QoKSk7Ci0gICAgcmV0dXJuIENv
ZGVMb2NhdGlvbkRhdGFMYWJlbFB0cjxKU0ludGVybmFsUHRyVGFnPihtX2hvdFBhdGhCZWdpbk9y
U2xvd1BhdGhTdGFydCk7CisgICAgcmV0dXJuIG1fZG9uZUxvY2F0aW9uOwogfQogCi1Db2RlTG9j
YXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBDYWxsTGlua0luZm86OnNsb3dQYXRoU3RhcnQo
KQotewotICAgIFJFTEVBU0VfQVNTRVJUKGlzRGlyZWN0KCkpOwotICAgIHJldHVybiBtX2hvdFBh
dGhCZWdpbk9yU2xvd1BhdGhTdGFydDsKLX0KLQotdm9pZCBDYWxsTGlua0luZm86OnNldENhbGxl
ZShWTSYgdm0sIEpTQ2VsbCogb3duZXIsIEpTT2JqZWN0KiBjYWxsZWUpCit2b2lkIENhbGxMaW5r
SW5mbzo6c2V0TW9ub21vcnBoaWNDYWxsZWUoVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBKU09iamVj
dCogY2FsbGVlLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gY29kZVB0cikK
IHsKICAgICBSRUxFQVNFX0FTU0VSVCghaXNEaXJlY3QoKSk7CiAgICAgbV9jYWxsZWVPckNvZGVC
bG9jay5zZXQodm0sIG93bmVyLCBjYWxsZWUpOworCisgICAgaWYgKGlzRGF0YUlDKCkpIAorICAg
ICAgICB1LmRhdGFJQy5tX21vbm9tb3JwaGljQ2FsbERlc3RpbmF0aW9uID0gY29kZVB0cjsKKyAg
ICBlbHNlIHsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hOZWFyQ2FsbCh1LmNvZGVJ
Qy5tX2NhbGxMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWw8SlNFbnRyeVB0clRhZz4oY29kZVB0
cikpOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaFBvaW50ZXIodS5jb2RlSUMubV9j
YWxsZWVMb2NhdGlvbiwgY2FsbGVlKTsKKyAgICB9CiB9CiAKIHZvaWQgQ2FsbExpbmtJbmZvOjpj
bGVhckNhbGxlZSgpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoIWlzRGlyZWN0KCkpOwogICAgIG1f
Y2FsbGVlT3JDb2RlQmxvY2suY2xlYXIoKTsKKyAgICBpZiAoaXNEYXRhSUMoKSkKKyAgICAgICAg
dS5kYXRhSUMubV9tb25vbW9ycGhpY0NhbGxEZXN0aW5hdGlvbiA9IG51bGxwdHI7CisgICAgZWxz
ZQorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaFBvaW50ZXIodS5jb2RlSUMubV9jYWxs
ZWVMb2NhdGlvbiwgbnVsbHB0cik7CiB9CiAKIEpTT2JqZWN0KiBDYWxsTGlua0luZm86OmNhbGxl
ZSgpCkBAIC0yODQsNiArMjkzLDIwNiBAQCB2b2lkIENhbGxMaW5rSW5mbzo6c2V0RnJhbWVTaHVm
ZmxlRGF0YShjCiAgICAgbV9mcmFtZVNodWZmbGVEYXRhLT5zaHJpbmtUb0ZpdCgpOwogfQogCit2
b2lkIENhbGxMaW5rSW5mbzo6ZW1pdEZpcnN0SW5zdHJ1Y3Rpb25Gb3JEYXRhSUMoQ0NhbGxIZWxw
ZXJzJiBqaXQsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIpCit7CisgICAgR1BSUmVnIHNjcmF0Y2hH
UFIgPSBqaXQuc2NyYXRjaFJlZ2lzdGVyKCk7CisgICAgRGlzYWxsb3dNYWNyb1NjcmF0Y2hSZWdp
c3RlclVzYWdlIGRpc2FsbG93U2NyYXRjaChqaXQpOworICAgIC8vIFdoZW4gcmVwYXRjaGluZywg
d2UganVzdCBvdmVyd3JpdGUgdGhlIGZpcnN0IGluc3RydWN0aW9uIGJhY2ssIHNpbmNlIGl0J2xs
IGhhdmUgYmVlbiByZXBsYWNlZCB3aXRoIGEganVtcCB0byB0aGUgcG9seW1vcnBoaWMgY2FsbCBz
dHViLgorICAgIHNpemVfdCBzdGFydFNpemUgPSBqaXQubV9hc3NlbWJsZXIuYnVmZmVyKCkuY29k
ZVNpemUoKTsKKyAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoY2FsbExpbmtJ
bmZvR1BSLCBvZmZzZXRPZkNhbGxlZSgpKSwgc2NyYXRjaEdQUik7IAorICAgIHNpemVfdCBsb2Fk
U2l6ZSA9IGppdC5tX2Fzc2VtYmxlci5idWZmZXIoKS5jb2RlU2l6ZSgpIC0gc3RhcnRTaXplOwor
ICAgIGlmIChsb2FkU2l6ZSA8IHN0YXRpY19jYXN0PHNpemVfdD4oQ0NhbGxIZWxwZXJzOjpwYXRj
aGFibGVKdW1wU2l6ZSgpKSkKKyAgICAgICAgaml0LmVtaXROb3BzKHN0YXRpY19jYXN0PHNpemVf
dD4oQ0NhbGxIZWxwZXJzOjpwYXRjaGFibGVKdW1wU2l6ZSgpKSAtIGxvYWRTaXplKTsKK30KKwor
TWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZW1pdEZhc3RQYXRoSW1wbChD
Q2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQ
UiwgVXNlRGF0YUlDIHVzZURhdGFJQywgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JU
YWlsQ2FsbCkKK3sKKyAgICBzZXRVc2VzRGF0YUlDcyh1c2VEYXRhSUMpOworICAgIGlmIChpc0Rh
dGFJQygpKSB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxMaW5rSW5mb0dQUiAhPSBDQ2Fs
bEhlbHBlcnM6OkludmFsaWRHUFJSZWcpOworICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW1QdHIodGhpcyksIGNhbGxMaW5rSW5mb0dQUik7CisgICAgICAgIHUuZGF0YUlD
Lm1fY2FsbExpbmtJbmZvR1BSID0gY2FsbExpbmtJbmZvR1BSOworICAgIH0KKworICAgIGF1dG8g
ZmFzdFBhdGhTdGFydCA9IGppdC5sYWJlbCgpOworICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExp
bmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgbV9mYXN0UGF0aFN0YXJ0ID0gbGlua0J1
ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KGZhc3RQYXRoU3RhcnQpOworICAgIH0p
OworCisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93UGF0aDsKKworICAgIGlmIChpc0Rh
dGFJQygpKSB7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gaml0LnNjcmF0Y2hSZWdpc3Rl
cigpOworICAgICAgICBlbWl0Rmlyc3RJbnN0cnVjdGlvbkZvckRhdGFJQyhqaXQsIGNhbGxMaW5r
SW5mb0dQUik7CisgICAgICAgIHsKKyAgICAgICAgICAgIERpc2FsbG93TWFjcm9TY3JhdGNoUmVn
aXN0ZXJVc2FnZSBkaXNhbGxvd1NjcmF0Y2goaml0KTsKKyAgICAgICAgICAgIHNsb3dQYXRoLmFw
cGVuZChqaXQuYnJhbmNoUHRyKENDYWxsSGVscGVyczo6Tm90RXF1YWwsIHNjcmF0Y2hHUFIsIGNh
bGxlZUdQUikpOworICAgICAgICB9CisgICAgICAgIGlmIChpc1RhaWxDYWxsKCkpIHsKKyAgICAg
ICAgICAgIHByZXBhcmVGb3JUYWlsQ2FsbCgpOworICAgICAgICAgICAgaml0LmZhckp1bXAoQ0Nh
bGxIZWxwZXJzOjpBZGRyZXNzKGNhbGxMaW5rSW5mb0dQUiwgb2Zmc2V0T2ZNb25vbW9ycGhpY0Nh
bGxEZXN0aW5hdGlvbigpKSwgSlNFbnRyeVB0clRhZyk7CisgICAgICAgIH0gZWxzZQorICAgICAg
ICAgICAgaml0LmNhbGwoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGNhbGxMaW5rSW5mb0dQUiwgb2Zm
c2V0T2ZNb25vbW9ycGhpY0NhbGxEZXN0aW5hdGlvbigpKSwgSlNFbnRyeVB0clRhZyk7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpEYXRhTGFiZWxQdHIgY2FsbGVlQ2hlY2s7
CisgICAgICAgIHNsb3dQYXRoLmFwcGVuZChqaXQuYnJhbmNoUHRyV2l0aFBhdGNoKENDYWxsSGVs
cGVyczo6Tm90RXF1YWwsIGNhbGxlZUdQUiwgY2FsbGVlQ2hlY2ssIENDYWxsSGVscGVyczo6VHJ1
c3RlZEltbVB0cihudWxscHRyKSkpOworCisgICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBjYWxs
OworICAgICAgICBpZiAoaXNUYWlsQ2FsbCgpKSB7CisgICAgICAgICAgICBwcmVwYXJlRm9yVGFp
bENhbGwoKTsKKyAgICAgICAgICAgIGNhbGwgPSBqaXQubmVhclRhaWxDYWxsKCk7CisgICAgICAg
IH0gZWxzZQorICAgICAgICAgICAgY2FsbCA9IGppdC5uZWFyQ2FsbCgpOworICAgICAgICBqaXQu
YWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgICAgICAgICB1
LmNvZGVJQy5tX2NhbGxMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPEpT
SW50ZXJuYWxQdHJUYWc+KGNhbGwpOworICAgICAgICAgICAgdS5jb2RlSUMubV9jYWxsZWVMb2Nh
dGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihjYWxsZWVDaGVj
ayk7CisgICAgICAgIH0pOworICAgIH0KKworICAgIHJldHVybiBzbG93UGF0aDsKK30KKworQ0Nh
bGxIZWxwZXJzOjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmVtaXRGYXN0UGF0aChDQ2FsbEhlbHBl
cnMmIGppdCwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0
YUlDIHVzZURhdGFJQykKK3sKKyAgICBSRUxFQVNFX0FTU0VSVCghaXNUYWlsQ2FsbCgpKTsKKyAg
ICByZXR1cm4gZW1pdEZhc3RQYXRoSW1wbChqaXQsIGNhbGxlZUdQUiwgY2FsbExpbmtJbmZvR1BS
LCB1c2VEYXRhSUMsIG51bGxwdHIpOworfQorCitNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2Fs
bExpbmtJbmZvOjplbWl0VGFpbENhbGxGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVn
IGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDIHVzZURhdGFJQywg
V1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkKK3sKKyAgICBSRUxFQVNF
X0FTU0VSVChpc1RhaWxDYWxsKCkpOworICAgIHJldHVybiBlbWl0RmFzdFBhdGhJbXBsKGppdCwg
Y2FsbGVlR1BSLCBjYWxsTGlua0luZm9HUFIsIHVzZURhdGFJQywgV1RGTW92ZShwcmVwYXJlRm9y
VGFpbENhbGwpKTsKK30KKwordm9pZCBDYWxsTGlua0luZm86OmVtaXRTbG93UGF0aChWTSYgdm0s
IENDYWxsSGVscGVycyYgaml0KQoreworICAgIHNldFNsb3dQYXRoQ2FsbERlc3RpbmF0aW9uKHZt
LmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcikudGVtcGxhdGUgcmV0YWdnZWRDb2Rl
PEpTRW50cnlQdHJUYWc+KCkpOworICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bVB0cih0aGlzKSwgR1BSSW5mbzo6cmVnVDIpOworICAgIGppdC5jYWxsKENDYWxsSGVscGVyczo6
QWRkcmVzcyhHUFJJbmZvOjpyZWdUMiwgb2Zmc2V0T2ZTbG93UGF0aENhbGxEZXN0aW5hdGlvbigp
KSwgSlNFbnRyeVB0clRhZyk7Cit9CisKK3ZvaWQgQ2FsbExpbmtJbmZvOjplbWl0RGlyZWN0RmFz
dFBhdGgoQ0NhbGxIZWxwZXJzJiBqaXQpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoIWlzVGFpbENh
bGwoKSk7CisKKyAgICBzZXRVc2VzRGF0YUlDcyhVc2VEYXRhSUM6Ok5vKTsKKworICAgIGF1dG8g
ZmFzdFBhdGhTdGFydCA9IGppdC5sYWJlbCgpOworICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExp
bmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgbV9mYXN0UGF0aFN0YXJ0ID0gbGlua0J1
ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KGZhc3RQYXRoU3RhcnQpOworICAgIH0p
OworCisgICAgYXV0byBjYWxsID0gaml0Lm5lYXJDYWxsKCk7CisgICAgaml0LmFkZExpbmtUYXNr
KFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgeworICAgICAgICB1LmNvZGVJQy5tX2NhbGxM
b2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPEpTSW50ZXJuYWxQdHJUYWc+
KGNhbGwpOworICAgIH0pOworICAgIGppdC5hZGRMYXRlTGlua1Rhc2soW3RoaXNdIChMaW5rQnVm
ZmVyJikgeworICAgICAgICBpbml0aWFsaXplRGlyZWN0Q2FsbCgpOworICAgIH0pOworfQorCit2
b2lkIENhbGxMaW5rSW5mbzo6ZW1pdERpcmVjdFRhaWxDYWxsRmFzdFBhdGgoQ0NhbGxIZWxwZXJz
JiBqaXQsIFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpCit7CisgICAg
UkVMRUFTRV9BU1NFUlQoaXNUYWlsQ2FsbCgpKTsKKworICAgIHNldFVzZXNEYXRhSUNzKFVzZURh
dGFJQzo6Tm8pOworCisgICAgYXV0byBmYXN0UGF0aFN0YXJ0ID0gaml0LmxhYmVsKCk7CisgICAg
aml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgeworICAgICAgICBt
X2Zhc3RQYXRoU3RhcnQgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4o
ZmFzdFBhdGhTdGFydCk7CisgICAgfSk7CisKKyAgICAvLyAtIElmIHdlJ3JlIG5vdCB5ZXQgbGlu
a2VkLCB0aGlzIGlzIGEganVtcCB0byB0aGUgc2xvdyBwYXRoLgorICAgIC8vIC0gT25jZSB3ZSdy
ZSBsaW5rZWQgdG8gYSBmYXN0IHBhdGgsIHRoaXMgZ29lcyBiYWNrIHRvIGJlaW5nIG5vcHMgc28g
d2UgZmFsbCB0aHJvdWdoIHRvIHRoZSBsaW5rZWQganVtcC4KKyAgICBqaXQuZW1pdE5vcHMoQ0Nh
bGxIZWxwZXJzOjpwYXRjaGFibGVKdW1wU2l6ZSgpKTsKKworICAgIHByZXBhcmVGb3JUYWlsQ2Fs
bCgpOworICAgIGF1dG8gY2FsbCA9IGppdC5uZWFyVGFpbENhbGwoKTsKKyAgICBqaXQuYWRkTGlu
a1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgICAgIHUuY29kZUlDLm1f
Y2FsbExvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8SlNJbnRlcm5hbFB0
clRhZz4oY2FsbCk7CisgICAgfSk7CisgICAgaml0LmFkZExhdGVMaW5rVGFzayhbdGhpc10gKExp
bmtCdWZmZXImKSB7CisgICAgICAgIGluaXRpYWxpemVEaXJlY3RDYWxsKCk7CisgICAgfSk7Cit9
CisKK3ZvaWQgQ2FsbExpbmtJbmZvOjppbml0aWFsaXplRGlyZWN0Q2FsbCgpCit7CisgICAgUkVM
RUFTRV9BU1NFUlQoaXNEaXJlY3QoKSk7CisgICAgQVNTRVJUKHUuY29kZUlDLm1fY2FsbExvY2F0
aW9uKTsKKyAgICBpZiAoaXNUYWlsQ2FsbCgpKSB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGZh
c3RQYXRoU3RhcnQoKSk7CisgICAgICAgIENDYWxsSGVscGVyczo6ZW1pdEpJVENvZGVPdmVyKGZh
c3RQYXRoU3RhcnQoKSwgWyZdIChDQ2FsbEhlbHBlcnMmIGppdCkgeworICAgICAgICAgICAgYXV0
byBqdW1wID0gaml0Lmp1bXAoKTsKKyAgICAgICAgICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExp
bmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmso
anVtcCwgc2xvd1BhdGhTdGFydCgpKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9LCAiaW5p
dGlhbGl6ZSBkaXJlY3QgY2FsbCIpOworICAgIH0gZWxzZQorICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6cmVwYXRjaE5lYXJDYWxsKHUuY29kZUlDLm1fY2FsbExvY2F0aW9uLCBzbG93UGF0aFN0YXJ0
KCkpOworfQorCit2b2lkIENhbGxMaW5rSW5mbzo6c2V0RGlyZWN0Q2FsbFRhcmdldChDb2RlTG9j
YXRpb25MYWJlbDxKU0VudHJ5UHRyVGFnPiB0YXJnZXQpCit7CisgICAgUkVMRUFTRV9BU1NFUlQo
aXNEaXJlY3QoKSk7CisKKyAgICBpZiAoaXNUYWlsQ2FsbCgpKSB7CisgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKGZhc3RQYXRoU3RhcnQoKSk7CisgICAgICAgIENDYWxsSGVscGVyczo6ZW1pdEpJVENv
ZGVPdmVyKGZhc3RQYXRoU3RhcnQoKSwgWyZdIChDQ2FsbEhlbHBlcnMmIGppdCkgeworICAgICAg
ICAgICAgLy8gV2UgcmVzZXJ2ZWQgdGhpcyBtYW55IGJ5dGVzIGZvciB0aGUganVtcCBhdCBmYXN0
UGF0aFN0YXJ0KCkuIE1ha2UgdGhhdAorICAgICAgICAgICAgLy8gY29kZSBub3BzIG5vdyBzbyB3
ZSBmYWxsIHRocm91Z2ggdG8gdGhlIGp1bXAgdG8gdGhlIGZhc3QgcGF0aC4KKyAgICAgICAgICAg
IGppdC5lbWl0Tm9wcyhDQ2FsbEhlbHBlcnM6OnBhdGNoYWJsZUp1bXBTaXplKCkpOyAKKyAgICAg
ICAgfSwgIlNldHRpbmcgZGlyZWN0IGNhbGwgdGFyZ2V0Iik7CisgICAgfQorCisgICAgTWFjcm9B
c3NlbWJsZXI6OnJlcGF0Y2hOZWFyQ2FsbCh1LmNvZGVJQy5tX2NhbGxMb2NhdGlvbiwgdGFyZ2V0
KTsKK30KKwordm9pZCBDYWxsTGlua0luZm86OnNldFNsb3dQYXRoQ2FsbERlc3RpbmF0aW9uKE1h
Y3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBjb2RlUHRyKQoreworICAgIG1fc2xv
d1BhdGhDYWxsRGVzdGluYXRpb24gPSBjb2RlUHRyOworfQorCit2b2lkIENhbGxMaW5rSW5mbzo6
cmV2ZXJ0Q2FsbFRvU3R1YigpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoc3R1YigpKTsKKyAgICAv
LyBUaGUgc3RhcnQgb2Ygb3VyIEpJVCBjb2RlIGlzIG5vdyBhIGp1bXAgdG8gdGhlIHBvbHltb3Jw
aGljIHN0dWIuIFJld3JpdGUgdGhlIGZpcnN0IGluc3RydWN0aW9uCisgICAgLy8gdG8gYmUgd2hh
dCB3ZSBuZWVkIGZvciBub24gc3R1YiBJQ3MuCisKKyAgICAvLyB0aGlzIHJ1bnMgaW50byBzb21l
IGJyYW5jaCBjb21wYWN0aW9uIGNyYXAgSSdkIGxpa2UgdG8gYXZvaWQgZm9yIG5vdy4gRXNzZW50
aWFsbHksIHRoZSBicmFuY2gKKyAgICAvLyBkb2Vzbid0IGtub3cgaWYgaXQgY2FuIGJlIGNvbXBh
Y3RlZCBvciBub3QuIFNvIHdlIGVuZCB1cCB3aXRoIDI4IGJ5dGVzIG9mIG1hY2hpbmUgY29kZSwg
Zm9yCisgICAgLy8gd2hhdCBpbiBhbGwgbGlrZWxpaG9vZCBmaXRzIGluIDI0LiBTbyB3ZSBqdXN0
IHNwbGF0IG91dCB0aGUgZmlyc3QgaW5zdHJ1Y3Rpb24uIExvbmcgdGVybSwgd2UKKyAgICAvLyBu
ZWVkIHNvbWV0aGluZyBjbGVhbmVyLiBCdXQgdGhpcyB3b3JrcyBvbiBhcm02NCBmb3Igbm93Lgor
CisgICAgQ0NhbGxIZWxwZXJzOjplbWl0SklUQ29kZU92ZXIoZmFzdFBhdGhTdGFydCgpLCBbJl0g
KENDYWxsSGVscGVycyYgaml0KSB7CisgICAgICAgIGlmIChpc0RhdGFJQygpKQorICAgICAgICAg
ICAgZW1pdEZpcnN0SW5zdHJ1Y3Rpb25Gb3JEYXRhSUMoaml0LCB1LmRhdGFJQy5tX2NhbGxMaW5r
SW5mb0dQUik7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpyZXZl
cnRKdW1wUmVwbGFjZW1lbnRUb0JyYW5jaFB0cldpdGhQYXRjaCgKKyAgICAgICAgICAgICAgICBD
Q2FsbEhlbHBlcnM6OnN0YXJ0T2ZCcmFuY2hQdHJXaXRoUGF0Y2hPblJlZ2lzdGVyKHUuY29kZUlD
Lm1fY2FsbGVlTG9jYXRpb24pLCBjYWxsZWVHUFIoKSwgbnVsbHB0cik7CisgICAgICAgIH0KKyAg
ICB9LCAgIlJlc2V0dGluZyBQb2x5bW9ycGhpY0NhbGwgc3R1YmJlZCBDYWxsTGlua0luZm8iKTsK
K30KKwordm9pZCBDYWxsTGlua0luZm86OnNldFN0dWIoUmVmPFBvbHltb3JwaGljQ2FsbFN0dWJS
b3V0aW5lPiYmIG5ld1N0dWIpCit7CisgICAgY2xlYXJTdHViKCk7CisgICAgbV9zdHViID0gV1RG
TW92ZShuZXdTdHViKTsKKworICAgIGlmIChpc0RhdGFJQygpKSB7CisgICAgICAgIENDYWxsSGVs
cGVyczo6ZW1pdEpJVENvZGVPdmVyKGZhc3RQYXRoU3RhcnQoKSwgWyZdIChDQ2FsbEhlbHBlcnMm
IGppdCkgeworICAgICAgICAgICAgYXV0byBqdW1wID0gaml0Lmp1bXAoKTsKKyAgICAgICAgICAg
IGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAg
ICAgICAgICBsaW5rQnVmZmVyLmxpbmsoanVtcCwgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJv
dXRpbmVQdHJUYWc+KG1fc3R1Yi0+Y29kZSgpLmNvZGUoKSkpOworICAgICAgICAgICAgfSk7Cisg
ICAgICAgIH0sICJQYXRjaGluZyBjYWxsIHRvIFBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lIGlu
IENhbGxMaW5rSW5mbyIpOworICAgIH0gZWxzZSB7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpy
ZXBsYWNlV2l0aEp1bXAoCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6c3RhcnRPZkJyYW5j
aFB0cldpdGhQYXRjaE9uUmVnaXN0ZXIodS5jb2RlSUMubV9jYWxsZWVMb2NhdGlvbiksCisgICAg
ICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4obV9zdHViLT5j
b2RlKCkuY29kZSgpKSk7CisgICAgfQorfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKICNlbmRpZiAv
LyBFTkFCTEUoSklUKQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2Fs
bExpbmtJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NhbGxMaW5rSW5mby5oCShyZXZpc2lvbiAyNzc0NDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDEyICszMCwx
NCBAQAogI2luY2x1ZGUgIkNvZGVTcGVjaWFsaXphdGlvbktpbmQuaCIKICNpbmNsdWRlICJQb2x5
bW9ycGhpY0NhbGxTdHViUm91dGluZS5oIgogI2luY2x1ZGUgIldyaXRlQmFycmllci5oIgorI2lu
Y2x1ZGUgPHd0Zi9GdW5jdGlvbi5oPgogI2luY2x1ZGUgPHd0Zi9TZW50aW5lbExpbmtlZExpc3Qu
aD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKICNpZiBFTkFCTEUoSklUKQogCitjbGFzcyBDQ2FsbEhl
bHBlcnM7CiBjbGFzcyBGdW5jdGlvbkNvZGVCbG9jazsKIGNsYXNzIEpTRnVuY3Rpb247CiBlbnVt
IE9wY29kZUlEIDogdW5zaWduZWQ7CkBAIC0xNjMsMTYgKzE2NSwzOCBAQCBwdWJsaWM6CiAgICAg
ICAgIG1fY2FsbGVlR1BSID0gY2FsbGVlR1BSOwogICAgIH0KIAotICAgIHZvaWQgc2V0Q2FsbExv
Y2F0aW9ucygKLSAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gY2Fs
bFJldHVybkxvY2F0aW9uT3JQYXRjaGFibGVKdW1wLAotICAgICAgICBDb2RlTG9jYXRpb25MYWJl
bDxKU0ludGVybmFsUHRyVGFnPiBob3RQYXRoQmVnaW5PclNsb3dQYXRoU3RhcnQsCi0gICAgICAg
IENvZGVMb2NhdGlvbk5lYXJDYWxsPEpTSW50ZXJuYWxQdHJUYWc+IGhvdFBhdGhPdGhlcikKLSAg
ICB7Ci0gICAgICAgIG1fY2FsbFJldHVybkxvY2F0aW9uT3JQYXRjaGFibGVKdW1wID0gY2FsbFJl
dHVybkxvY2F0aW9uT3JQYXRjaGFibGVKdW1wOwotICAgICAgICBtX2hvdFBhdGhCZWdpbk9yU2xv
d1BhdGhTdGFydCA9IGhvdFBhdGhCZWdpbk9yU2xvd1BhdGhTdGFydDsKLSAgICAgICAgbV9ob3RQ
YXRoT3RoZXIgPSBob3RQYXRoT3RoZXI7CisgICAgR1BSUmVnIGNhbGxlZUdQUigpIGNvbnN0IHsg
cmV0dXJuIG1fY2FsbGVlR1BSOyB9CisgICAgCisgICAgZW51bSBjbGFzcyBVc2VEYXRhSUMgOiB1
aW50OF90IHsKKyAgICAgICAgWWVzLAorICAgICAgICBObworICAgIH07CisKK3ByaXZhdGU6Cisg
ICAgdm9pZCBlbWl0Rmlyc3RJbnN0cnVjdGlvbkZvckRhdGFJQyhDQ2FsbEhlbHBlcnMmLCBHUFJS
ZWcgY2FsbExpbmtJbmZvR1BSKTsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdEZh
c3RQYXRoSW1wbChDQ2FsbEhlbHBlcnMmLCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExp
bmtJbmZvR1BSLCBVc2VEYXRhSUMsIFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFp
bENhbGwpIFdBUk5fVU5VU0VEX1JFVFVSTjsKK3B1YmxpYzoKKyAgICBNYWNyb0Fzc2VtYmxlcjo6
SnVtcExpc3QgZW1pdEZhc3RQYXRoKENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQ
UlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQykgV0FSTl9VTlVTRURfUkVUVVJOOworICAg
IE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBlbWl0VGFpbENhbGxGYXN0UGF0aChDQ2FsbEhlbHBl
cnMmLCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUMs
IFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpIFdBUk5fVU5VU0VEX1JF
VFVSTjsKKyAgICB2b2lkIGVtaXREaXJlY3RGYXN0UGF0aChDQ2FsbEhlbHBlcnMmKTsKKyAgICB2
b2lkIGVtaXREaXJlY3RUYWlsQ2FsbEZhc3RQYXRoKENDYWxsSGVscGVycyYsIFdURjo6RnVuY3Rp
b248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpOworICAgIHZvaWQgZW1pdFNsb3dQYXRoKFZN
JiwgQ0NhbGxIZWxwZXJzJik7CisgICAgdm9pZCByZXZlcnRDYWxsVG9TdHViKCk7CisKKyAgICBi
b29sIGlzRGF0YUlDKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8VXNlRGF0YUlDPihtX3Vz
ZURhdGFJQykgPT0gVXNlRGF0YUlDOjpZZXM7IH0KKyAgICB2b2lkIHNldFVzZXNEYXRhSUNzKFVz
ZURhdGFJQyB1c2VEYXRhSUMpIHsgbV91c2VEYXRhSUMgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
dXNlRGF0YUlDKTsgfQorCisgICAgdm9pZCBzZXRDb2RlTG9jYXRpb25zKAorICAgICAgICBDb2Rl
TG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBzbG93UGF0aFN0YXJ0LAorICAgICAgICBD
b2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBkb25lTG9jYXRpb24pCisgICAgewor
ICAgICAgICBpZiAoIWlzRGF0YUlDKCkpCisgICAgICAgICAgICB1LmNvZGVJQy5tX3Nsb3dQYXRo
U3RhcnQgPSBzbG93UGF0aFN0YXJ0OworICAgICAgICBtX2RvbmVMb2NhdGlvbiA9IGRvbmVMb2Nh
dGlvbjsKICAgICB9CiAKKyAgICB2b2lkIGluaXRpYWxpemVEaXJlY3RDYWxsKCk7CisKICAgICBi
b29sIGFsbG93U3R1YnMoKSBjb25zdCB7IHJldHVybiBtX2FsbG93U3R1YnM7IH0KIAogICAgIHZv
aWQgZGlzYWxsb3dTdHVicygpCkBAIC0xODAsMjMgKzIwNCwxOSBAQCBwdWJsaWM6CiAgICAgICAg
IG1fYWxsb3dTdHVicyA9IGZhbHNlOwogICAgIH0KIAotICAgIENvZGVMb2NhdGlvbk5lYXJDYWxs
PEpTSW50ZXJuYWxQdHJUYWc+IGNhbGxSZXR1cm5Mb2NhdGlvbigpOwotICAgIENvZGVMb2NhdGlv
bkp1bXA8SlNJbnRlcm5hbFB0clRhZz4gcGF0Y2hhYmxlSnVtcCgpOwotICAgIENvZGVMb2NhdGlv
bkRhdGFMYWJlbFB0cjxKU0ludGVybmFsUHRyVGFnPiBob3RQYXRoQmVnaW4oKTsKKyAgICBDb2Rl
TG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBmYXN0UGF0aFN0YXJ0KCk7CiAgICAgQ29k
ZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gc2xvd1BhdGhTdGFydCgpOworICAgIENv
ZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IGRvbmVMb2NhdGlvbigpOwogCi0gICAg
Q29kZUxvY2F0aW9uTmVhckNhbGw8SlNJbnRlcm5hbFB0clRhZz4gaG90UGF0aE90aGVyKCkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBtX2hvdFBhdGhPdGhlcjsKLSAgICB9Ci0KLSAgICB2b2lkIHNl
dENhbGxlZShWTSYsIEpTQ2VsbCosIEpTT2JqZWN0KiBjYWxsZWUpOworICAgIHZvaWQgc2V0TW9u
b21vcnBoaWNDYWxsZWUoVk0mLCBKU0NlbGwqLCBKU09iamVjdCogY2FsbGVlLCBNYWNyb0Fzc2Vt
YmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4pOworICAgIHZvaWQgc2V0U2xvd1BhdGhDYWxsRGVz
dGluYXRpb24oTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+KTsKICAgICB2b2lk
IGNsZWFyQ2FsbGVlKCk7CiAgICAgSlNPYmplY3QqIGNhbGxlZSgpOwogCiAgICAgdm9pZCBzZXRD
b2RlQmxvY2soVk0mLCBKU0NlbGwqLCBGdW5jdGlvbkNvZGVCbG9jayopOwogICAgIHZvaWQgY2xl
YXJDb2RlQmxvY2soKTsKICAgICBGdW5jdGlvbkNvZGVCbG9jayogY29kZUJsb2NrKCk7CisgICAg
dm9pZCBzZXREaXJlY3RDYWxsVGFyZ2V0KENvZGVMb2NhdGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+
KTsKIAogICAgIHZvaWQgc2V0TGFzdFNlZW5DYWxsZWUoVk0mLCBjb25zdCBKU0NlbGwqIG93bmVy
LCBKU09iamVjdCogY2FsbGVlKTsKICAgICB2b2lkIGNsZWFyTGFzdFNlZW5DYWxsZWUoKTsKQEAg
LTIwNiwxMiArMjI2LDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0RXhlY3V0YWJsZUR1cmluZ0Nv
bXBpbGF0aW9uKEV4ZWN1dGFibGVCYXNlKik7CiAgICAgRXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFi
bGUoKTsKICAgICAKLSAgICB2b2lkIHNldFN0dWIoUmVmPFBvbHltb3JwaGljQ2FsbFN0dWJSb3V0
aW5lPiYmIG5ld1N0dWIpCi0gICAgewotICAgICAgICBjbGVhclN0dWIoKTsKLSAgICAgICAgbV9z
dHViID0gV1RGTW92ZShuZXdTdHViKTsKLSAgICB9Ci0KKyAgICB2b2lkIHNldFN0dWIoUmVmPFBv
bHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lPiYmKTsKICAgICB2b2lkIGNsZWFyU3R1YigpOwogCiAg
ICAgUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUqIHN0dWIoKSBjb25zdApAQCAtMzExLDYgKzMy
NiwyMSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ2FsbExpbmtJ
bmZvLCBtX3Nsb3dQYXRoQ291bnQpOwogICAgIH0KIAorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zm
c2V0T2ZDYWxsZWUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDYWxs
TGlua0luZm8sIG1fY2FsbGVlT3JDb2RlQmxvY2spOworICAgIH0KKworICAgIHN0YXRpYyBwdHJk
aWZmX3Qgb2Zmc2V0T2ZNb25vbW9ycGhpY0NhbGxEZXN0aW5hdGlvbigpCisgICAgeworICAgICAg
ICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENhbGxMaW5rSW5mbywgdSkgKyBPQkpFQ1RfT0ZGU0VU
T0YoVW5pb25UeXBlLCBkYXRhSUMubV9tb25vbW9ycGhpY0NhbGxEZXN0aW5hdGlvbik7CisgICAg
fQorCisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlNsb3dQYXRoQ2FsbERlc3RpbmF0aW9u
KCkKKyAgICB7CisgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ2FsbExpbmtJbmZvLCBt
X3Nsb3dQYXRoQ2FsbERlc3RpbmF0aW9uKTsKKyAgICB9CisKICAgICBHUFJSZWcgY2FsbGVlR1BS
KCkKICAgICB7CiAgICAgICAgIHJldHVybiBtX2NhbGxlZUdQUjsKQEAgLTM1MiwxMCArMzgyLDI1
IEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgdWludDMyX3QgbV9tYXhBcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcyB7IDAgfTsgLy8gRm9yIHZhcmFyZ3M6IHRoZSBwcm9maWxlZCBt
YXhpbXVtIG51bWJlciBvZiBhcmd1bWVudHMuIEZvciBkaXJlY3Q6IHRoZSBudW1iZXIgb2Ygc3Rh
Y2sgc2xvdHMgYWxsb2NhdGVkIGZvciBhcmd1bWVudHMuCi0gICAgQ29kZUxvY2F0aW9uTGFiZWw8
SlNJbnRlcm5hbFB0clRhZz4gbV9jYWxsUmV0dXJuTG9jYXRpb25PclBhdGNoYWJsZUp1bXA7Ci0g
ICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gbV9ob3RQYXRoQmVnaW5PclNs
b3dQYXRoU3RhcnQ7Ci0gICAgQ29kZUxvY2F0aW9uTmVhckNhbGw8SlNJbnRlcm5hbFB0clRhZz4g
bV9ob3RQYXRoT3RoZXI7CisgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4g
bV9mYXN0UGF0aFN0YXJ0OworICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+
IG1fZG9uZUxvY2F0aW9uOworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFn
PiBtX3Nsb3dQYXRoQ2FsbERlc3RpbmF0aW9uOworICAgIHVuaW9uIFVuaW9uVHlwZSB7CisgICAg
ICAgIFVuaW9uVHlwZSgpIAorICAgICAgICAgICAgOiBkYXRhSUMgeyBudWxscHRyLCBJbnZhbGlk
R1BSUmVnIH0KKyAgICAgICAgeyB9CisgICAgICAgIHN0cnVjdCBEYXRhSUMgeworICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IG1fbW9ub21vcnBoaWNDYWxs
RGVzdGluYXRpb247CisgICAgICAgICAgICBHUFJSZWcgbV9jYWxsTGlua0luZm9HUFI7CisgICAg
ICAgIH0gZGF0YUlDOworCisgICAgICAgIHN0cnVjdCB7CisgICAgICAgICAgICBDb2RlTG9jYXRp
b25OZWFyQ2FsbDxKU0ludGVybmFsUHRyVGFnPiBtX2NhbGxMb2NhdGlvbjsKKyAgICAgICAgICAg
IENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0cjxKU0ludGVybmFsUHRyVGFnPiBtX2NhbGxlZUxvY2F0
aW9uOworICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gbV9z
bG93UGF0aFN0YXJ0OworICAgICAgICB9IGNvZGVJQzsKKyAgICB9IHU7CisKICAgICBXcml0ZUJh
cnJpZXI8SlNDZWxsPiBtX2NhbGxlZU9yQ29kZUJsb2NrOwogICAgIFdyaXRlQmFycmllcjxKU0Nl
bGw+IG1fbGFzdFNlZW5DYWxsZWVPckV4ZWN1dGFibGU7CiAgICAgUmVmUHRyPFBvbHltb3JwaGlj
Q2FsbFN0dWJSb3V0aW5lPiBtX3N0dWI7CkBAIC0zNjksOCArNDE0LDEwIEBAIHByaXZhdGU6CiAg
ICAgYm9vbCBtX2FsbG93U3R1YnMgOiAxOwogICAgIGJvb2wgbV9jbGVhcmVkQnlKZXR0aXNvbiA6
IDE7CiAgICAgdW5zaWduZWQgbV9jYWxsVHlwZSA6IDQ7IC8vIENhbGxUeXBlCisgICAgdW5zaWdu
ZWQgbV91c2VEYXRhSUMgOiAxOyAvLyBVc2VEYXRhSUMKICAgICBHUFJSZWcgbV9jYWxsZWVHUFIg
eyBJbnZhbGlkR1BSUmVnIH07CiAgICAgdWludDMyX3QgbV9zbG93UGF0aENvdW50IHsgMCB9Owor
ICAgIHVpbnQzMl90IG1fbWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgeyAwIH07IC8vIEZv
ciB2YXJhcmdzOiB0aGUgcHJvZmlsZWQgbWF4aW11bSBudW1iZXIgb2YgYXJndW1lbnRzLiBGb3Ig
ZGlyZWN0OiB0aGUgbnVtYmVyIG9mIHN0YWNrIHNsb3RzIGFsbG9jYXRlZCBmb3IgYXJndW1lbnRz
LgogfTsKIAogaW5saW5lIENvZGVPcmlnaW4gZ2V0Q2FsbExpbmtJbmZvQ29kZU9yaWdpbihDYWxs
TGlua0luZm8mIGNhbGxMaW5rSW5mbykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHSklUQ29tcGlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHSklUQ29tcGlsZXIuY3BwCShyZXZpc2lvbiAyNzc0NDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjU3LDMx
ICsyNTcsMTggQEAgdm9pZCBKSVRDb21waWxlcjo6bGluayhMaW5rQnVmZmVyJiBsaW5rQgogICAg
IGZpbmFsaXplSW5saW5lQ2FjaGVzKG1faW5zdGFuY2VPZnMsIGxpbmtCdWZmZXIpOwogICAgIGZp
bmFsaXplSW5saW5lQ2FjaGVzKG1fcHJpdmF0ZUJyYW5kQWNjZXNzZXMsIGxpbmtCdWZmZXIpOwog
Ci0gICAgYXV0byBsaW5rQ2FsbFRodW5rID0gRnVuY3Rpb25QdHI8Tm9QdHJUYWc+KHZtKCkuZ2V0
Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkp
OwogICAgIGZvciAoYXV0byYgcmVjb3JkIDogbV9qc0NhbGxzKSB7CiAgICAgICAgIENhbGxMaW5r
SW5mbyYgaW5mbyA9ICpyZWNvcmQuaW5mbzsKLSAgICAgICAgbGlua0J1ZmZlci5saW5rKHJlY29y
ZC5zbG93Q2FsbCwgbGlua0NhbGxUaHVuayk7Ci0gICAgICAgIGluZm8uc2V0Q2FsbExvY2F0aW9u
cygKLSAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+KGxpbmtC
dWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPEpTSW50ZXJuYWxQdHJUYWc+KHJlY29yZC5zbG93Q2Fs
bCkpLAotICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4obGlu
a0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KHJlY29yZC50YXJnZXRUb0NoZWNr
KSksCi0gICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxKU0ludGVybmFs
UHRyVGFnPihyZWNvcmQuZmFzdENhbGwpKTsKKyAgICAgICAgaW5mby5zZXRDb2RlTG9jYXRpb25z
KAorICAgICAgICAgICAgbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KHJl
Y29yZC5zbG93UGF0aFN0YXJ0KSwKKyAgICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZjxK
U0ludGVybmFsUHRyVGFnPihyZWNvcmQuZG9uZUxvY2F0aW9uKSk7CiAgICAgfQogICAgIAotICAg
IGZvciAoSlNEaXJlY3RDYWxsUmVjb3JkJiByZWNvcmQgOiBtX2pzRGlyZWN0Q2FsbHMpIHsKKyAg
ICBmb3IgKGF1dG8mIHJlY29yZCA6IG1fanNEaXJlY3RDYWxscykgewogICAgICAgICBDYWxsTGlu
a0luZm8mIGluZm8gPSAqcmVjb3JkLmluZm87Ci0gICAgICAgIGxpbmtCdWZmZXIubGluayhyZWNv
cmQuY2FsbCwgbGlua0J1ZmZlci5sb2NhdGlvbk9mPE5vUHRyVGFnPihyZWNvcmQuc2xvd1BhdGgp
KTsKLSAgICAgICAgaW5mby5zZXRDYWxsTG9jYXRpb25zKAotICAgICAgICAgICAgQ29kZUxvY2F0
aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4oKSwKKyAgICAgICAgaW5mby5zZXRDb2RlTG9jYXRp
b25zKAogICAgICAgICAgICAgbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+
KHJlY29yZC5zbG93UGF0aCksCi0gICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFy
Q2FsbDxKU0ludGVybmFsUHRyVGFnPihyZWNvcmQuY2FsbCkpOwotICAgIH0KLSAgICAKLSAgICBm
b3IgKEpTRGlyZWN0VGFpbENhbGxSZWNvcmQmIHJlY29yZCA6IG1fanNEaXJlY3RUYWlsQ2FsbHMp
IHsKLSAgICAgICAgQ2FsbExpbmtJbmZvJiBpbmZvID0gKnJlY29yZC5pbmZvOwotICAgICAgICBp
bmZvLnNldENhbGxMb2NhdGlvbnMoCi0gICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8
SlNJbnRlcm5hbFB0clRhZz4ocmVjb3JkLnBhdGNoYWJsZUp1bXApLAotICAgICAgICAgICAgbGlu
a0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KHJlY29yZC5zbG93UGF0aCksCi0g
ICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxKU0ludGVybmFsUHRyVGFn
PihyZWNvcmQuY2FsbCkpOworICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5h
bFB0clRhZz4oKSk7CiAgICAgfQogCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCShyZXZpc2lvbiAy
Nzc0NDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTIxOSwxOSArMjE5LDE0IEBAIHB1YmxpYzoKICAgICAgICAgbV9wcml2
YXRlQnJhbmRBY2Nlc3Nlcy5hcHBlbmQoSW5saW5lQ2FjaGVXcmFwcGVyPEpJVFByaXZhdGVCcmFu
ZEFjY2Vzc0dlbmVyYXRvcj4oZ2VuLCBzbG93UGF0aCkpOwogICAgIH0KIAotICAgIHZvaWQgYWRk
SlNDYWxsKENhbGwgZmFzdENhbGwsIENhbGwgc2xvd0NhbGwsIERhdGFMYWJlbFB0ciB0YXJnZXRU
b0NoZWNrLCBDYWxsTGlua0luZm8qIGluZm8pCisgICAgdm9pZCBhZGRKU0NhbGwoTGFiZWwgc2xv
d1BhdGhTdGFydCwgTGFiZWwgZG9uZUxvY2F0aW9uLCBDYWxsTGlua0luZm8qIGluZm8pCiAgICAg
ewotICAgICAgICBtX2pzQ2FsbHMuYXBwZW5kKEpTQ2FsbFJlY29yZChmYXN0Q2FsbCwgc2xvd0Nh
bGwsIHRhcmdldFRvQ2hlY2ssIGluZm8pKTsKKyAgICAgICAgbV9qc0NhbGxzLmFwcGVuZChKU0Nh
bGxSZWNvcmQoc2xvd1BhdGhTdGFydCwgZG9uZUxvY2F0aW9uLCBpbmZvKSk7CiAgICAgfQogICAg
IAotICAgIHZvaWQgYWRkSlNEaXJlY3RDYWxsKENhbGwgY2FsbCwgTGFiZWwgc2xvd1BhdGgsIENh
bGxMaW5rSW5mbyogaW5mbykKKyAgICB2b2lkIGFkZEpTRGlyZWN0Q2FsbChMYWJlbCBzbG93UGF0
aCwgQ2FsbExpbmtJbmZvKiBpbmZvKQogICAgIHsKLSAgICAgICAgbV9qc0RpcmVjdENhbGxzLmFw
cGVuZChKU0RpcmVjdENhbGxSZWNvcmQoY2FsbCwgc2xvd1BhdGgsIGluZm8pKTsKLSAgICB9Ci0g
ICAgCi0gICAgdm9pZCBhZGRKU0RpcmVjdFRhaWxDYWxsKFBhdGNoYWJsZUp1bXAgcGF0Y2hhYmxl
SnVtcCwgQ2FsbCBjYWxsLCBMYWJlbCBzbG93UGF0aCwgQ2FsbExpbmtJbmZvKiBpbmZvKQotICAg
IHsKLSAgICAgICAgbV9qc0RpcmVjdFRhaWxDYWxscy5hcHBlbmQoSlNEaXJlY3RUYWlsQ2FsbFJl
Y29yZChwYXRjaGFibGVKdW1wLCBjYWxsLCBzbG93UGF0aCwgaW5mbykpOworICAgICAgICBtX2pz
RGlyZWN0Q2FsbHMuYXBwZW5kKEpTRGlyZWN0Q2FsbFJlY29yZChzbG93UGF0aCwgaW5mbykpOwog
ICAgIH0KICAgICAKICAgICB2b2lkIGFkZFdlYWtSZWZlcmVuY2UoSlNDZWxsKiB0YXJnZXQpCkBA
IC0zMjgsNTIgKzMyMywyOCBAQCBwcml2YXRlOgogCiAKICAgICBzdHJ1Y3QgSlNDYWxsUmVjb3Jk
IHsKLSAgICAgICAgSlNDYWxsUmVjb3JkKENhbGwgZmFzdENhbGwsIENhbGwgc2xvd0NhbGwsIERh
dGFMYWJlbFB0ciB0YXJnZXRUb0NoZWNrLCBDYWxsTGlua0luZm8qIGluZm8pCi0gICAgICAgICAg
ICA6IGZhc3RDYWxsKGZhc3RDYWxsKQotICAgICAgICAgICAgLCBzbG93Q2FsbChzbG93Q2FsbCkK
LSAgICAgICAgICAgICwgdGFyZ2V0VG9DaGVjayh0YXJnZXRUb0NoZWNrKQorICAgICAgICBKU0Nh
bGxSZWNvcmQoTGFiZWwgc2xvd1BhdGhTdGFydCwgTGFiZWwgZG9uZUxvY2F0aW9uLCBDYWxsTGlu
a0luZm8qIGluZm8pCisgICAgICAgICAgICA6IHNsb3dQYXRoU3RhcnQoc2xvd1BhdGhTdGFydCkK
KyAgICAgICAgICAgICwgZG9uZUxvY2F0aW9uKGRvbmVMb2NhdGlvbikKICAgICAgICAgICAgICwg
aW5mbyhpbmZvKQogICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQoZmFzdENhbGwuaXNGbGFn
U2V0KENhbGw6Ok5lYXIpKTsKLSAgICAgICAgICAgIEFTU0VSVChzbG93Q2FsbC5pc0ZsYWdTZXQo
Q2FsbDo6TmVhcikpOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBDYWxsIGZhc3RDYWxs
OwotICAgICAgICBDYWxsIHNsb3dDYWxsOwotICAgICAgICBEYXRhTGFiZWxQdHIgdGFyZ2V0VG9D
aGVjazsKKyAgICAgICAgTGFiZWwgc2xvd1BhdGhTdGFydDsKKyAgICAgICAgTGFiZWwgZG9uZUxv
Y2F0aW9uOwogICAgICAgICBDYWxsTGlua0luZm8qIGluZm87CiAgICAgfTsKICAgICAKICAgICBz
dHJ1Y3QgSlNEaXJlY3RDYWxsUmVjb3JkIHsKLSAgICAgICAgSlNEaXJlY3RDYWxsUmVjb3JkKENh
bGwgY2FsbCwgTGFiZWwgc2xvd1BhdGgsIENhbGxMaW5rSW5mbyogaW5mbykKLSAgICAgICAgICAg
IDogY2FsbChjYWxsKQotICAgICAgICAgICAgLCBzbG93UGF0aChzbG93UGF0aCkKLSAgICAgICAg
ICAgICwgaW5mbyhpbmZvKQotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQoY2FsbC5pc0Zs
YWdTZXQoQ2FsbDo6TmVhcikpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBDYWxsIGNh
bGw7Ci0gICAgICAgIExhYmVsIHNsb3dQYXRoOwotICAgICAgICBDYWxsTGlua0luZm8qIGluZm87
Ci0gICAgfTsKLSAgICAKLSAgICBzdHJ1Y3QgSlNEaXJlY3RUYWlsQ2FsbFJlY29yZCB7Ci0gICAg
ICAgIEpTRGlyZWN0VGFpbENhbGxSZWNvcmQoUGF0Y2hhYmxlSnVtcCBwYXRjaGFibGVKdW1wLCBD
YWxsIGNhbGwsIExhYmVsIHNsb3dQYXRoLCBDYWxsTGlua0luZm8qIGluZm8pCi0gICAgICAgICAg
ICA6IHBhdGNoYWJsZUp1bXAocGF0Y2hhYmxlSnVtcCkKLSAgICAgICAgICAgICwgY2FsbChjYWxs
KQotICAgICAgICAgICAgLCBzbG93UGF0aChzbG93UGF0aCkKKyAgICAgICAgSlNEaXJlY3RDYWxs
UmVjb3JkKExhYmVsIHNsb3dQYXRoLCBDYWxsTGlua0luZm8qIGluZm8pCisgICAgICAgICAgICA6
IHNsb3dQYXRoKHNsb3dQYXRoKQogICAgICAgICAgICAgLCBpbmZvKGluZm8pCiAgICAgICAgIHsK
LSAgICAgICAgICAgIEFTU0VSVChjYWxsLmlzRmxhZ1NldChDYWxsOjpOZWFyKSAmJiBjYWxsLmlz
RmxhZ1NldChDYWxsOjpUYWlsKSk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIFBhdGNo
YWJsZUp1bXAgcGF0Y2hhYmxlSnVtcDsKLSAgICAgICAgQ2FsbCBjYWxsOwogICAgICAgICBMYWJl
bCBzbG93UGF0aDsKICAgICAgICAgQ2FsbExpbmtJbmZvKiBpbmZvOwogICAgIH07Ci0KICAgICAK
ICAgICBWZWN0b3I8SW5saW5lQ2FjaGVXcmFwcGVyPEpJVEdldEJ5SWRHZW5lcmF0b3I+LCA0PiBt
X2dldEJ5SWRzOwogICAgIFZlY3RvcjxJbmxpbmVDYWNoZVdyYXBwZXI8SklUR2V0QnlJZFdpdGhU
aGlzR2VuZXJhdG9yPiwgND4gbV9nZXRCeUlkc1dpdGhUaGlzOwpAQCAtMzg2LDcgKzM1Nyw2IEBA
IHByaXZhdGU6CiAgICAgVmVjdG9yPElubGluZUNhY2hlV3JhcHBlcjxKSVRQcml2YXRlQnJhbmRB
Y2Nlc3NHZW5lcmF0b3I+LCA0PiBtX3ByaXZhdGVCcmFuZEFjY2Vzc2VzOwogICAgIFZlY3RvcjxK
U0NhbGxSZWNvcmQsIDQ+IG1fanNDYWxsczsKICAgICBWZWN0b3I8SlNEaXJlY3RDYWxsUmVjb3Jk
LCA0PiBtX2pzRGlyZWN0Q2FsbHM7Ci0gICAgVmVjdG9yPEpTRGlyZWN0VGFpbENhbGxSZWNvcmQs
IDQ+IG1fanNEaXJlY3RUYWlsQ2FsbHM7CiAgICAgU2VnbWVudGVkVmVjdG9yPE9TUkV4aXRDb21w
aWxhdGlvbkluZm8sIDQ+IG1fZXhpdENvbXBpbGF0aW9uSW5mbzsKICAgICBWZWN0b3I8VmVjdG9y
PExhYmVsPj4gbV9leGl0U2l0ZUxhYmVsczsKICAgICBWZWN0b3I8REZHOjpPU1JFbnRyeURhdGE+
IG1fb3NyRW50cnk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRD
b21waWxlckNvbW1vbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwCShyZXZpc2lvbiAyNzc0NDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTIwOSw3ICsyMDksNyBAQCBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
PEpTRW50cnlQdHJUCiAgICAgICAgICAgICAgICAgYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXIt
PmdldENhbGxMaW5rSW5mb0ZvckJ5dGVjb2RlSW5kZXgoY2FsbEJ5dGVjb2RlSW5kZXgpOwogICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY2FsbExpbmtJbmZvKTsKIAotICAgICAgICAgICAganVt
cFRhcmdldCA9IGNhbGxMaW5rSW5mby0+Y2FsbFJldHVybkxvY2F0aW9uKCkucmV0YWdnZWQ8SlNF
bnRyeVB0clRhZz4oKTsKKyAgICAgICAgICAgIGp1bXBUYXJnZXQgPSBjYWxsTGlua0luZm8tPmRv
bmVMb2NhdGlvbigpLnJldGFnZ2VkPEpTRW50cnlQdHJUYWc+KCk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJh
dGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3Bl
cmF0aW9ucy5jcHAJKHJldmlzaW9uIDI3NzQ0MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2MTYsNyArMzYxNiw3IEBA
IEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25MaW5rRGkKICAgICAgICAgICAgIGNv
ZGVQdHIgPSBmdW5jdGlvbkV4ZWN1dGFibGUtPmVudHJ5cG9pbnRGb3Ioa2luZCwgQXJpdHlDaGVj
a05vdFJlcXVpcmVkKTsKICAgICB9CiAgICAgCi0gICAgbGlua0RpcmVjdEZvcihjYWxsRnJhbWUs
ICpjYWxsTGlua0luZm8sIGNvZGVCbG9jaywgY29kZVB0cik7CisgICAgbGlua0RpcmVjdENhbGwo
Y2FsbEZyYW1lLCAqY2FsbExpbmtJbmZvLCBjb2RlQmxvY2ssIGNvZGVQdHIpOwogfQogCiBKU0Nf
REVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uVHJpZ2dlclJlb3B0aW1pemF0aW9uTm93LCB2
b2lkLCAoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvZGVCbG9jayogb3B0aW1pemVkQ29kZUJsb2Nr
LCBPU1JFeGl0QmFzZSogZXhpdCkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHJldmlzaW9uIDI3NzQ0MCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTgzOCwxOSArODM4LDE2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVt
aXRDYWxsKE5vZGUqIG5vZGUKICAgICAgICAgaWYgKGlzVGFpbCkgewogICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlQobm9kZS0+b3AoKSA9PSBEaXJlY3RUYWlsQ2FsbCk7CiAgICAgICAgICAgICAK
LSAgICAgICAgICAgIEpJVENvbXBpbGVyOjpQYXRjaGFibGVKdW1wIHBhdGNoYWJsZUp1bXAgPSBt
X2ppdC5wYXRjaGFibGVKdW1wKCk7CiAgICAgICAgICAgICBKSVRDb21waWxlcjo6TGFiZWwgbWFp
blBhdGggPSBtX2ppdC5sYWJlbCgpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBtX2ppdC5l
bWl0U3RvcmVDYWxsU2l0ZUluZGV4KGNhbGxTaXRlKTsKICAgICAgICAgICAgIAotICAgICAgICAg
ICAgaW5mby0+c2V0RnJhbWVTaHVmZmxlRGF0YShzaHVmZmxlRGF0YSk7Ci0gICAgICAgICAgICBD
YWxsRnJhbWVTaHVmZmxlcihtX2ppdCwgc2h1ZmZsZURhdGEpLnByZXBhcmVGb3JUYWlsQ2FsbCgp
OwotICAgICAgICAgICAgCi0gICAgICAgICAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsID0gbV9q
aXQubmVhclRhaWxDYWxsKCk7Ci0gICAgICAgICAgICAKKyAgICAgICAgICAgIGluZm8tPmVtaXRE
aXJlY3RUYWlsQ2FsbEZhc3RQYXRoKG1faml0LCBbJl0geworICAgICAgICAgICAgICAgIGluZm8t
PnNldEZyYW1lU2h1ZmZsZURhdGEoc2h1ZmZsZURhdGEpOworICAgICAgICAgICAgICAgIENhbGxG
cmFtZVNodWZmbGVyKG1faml0LCBzaHVmZmxlRGF0YSkucHJlcGFyZUZvclRhaWxDYWxsKCk7Cisg
ICAgICAgICAgICB9KTsKKwogICAgICAgICAgICAgSklUQ29tcGlsZXI6OkxhYmVsIHNsb3dQYXRo
ID0gbV9qaXQubGFiZWwoKTsKLSAgICAgICAgICAgIHBhdGNoYWJsZUp1bXAubV9qdW1wLmxpbmtU
byhzbG93UGF0aCwgJm1faml0KTsKLSAgICAgICAgICAgIAogICAgICAgICAgICAgc2lsZW50U3Bp
bGxBbGxSZWdpc3RlcnMoSW52YWxpZEdQUlJlZyk7CiAgICAgICAgICAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbkxpbmtEaXJlY3RDYWxsLCBpbmZvLCBjYWxsZWVQYXlsb2FkR1BSKTsKICAgICAg
ICAgICAgIHNpbGVudEZpbGxBbGxSZWdpc3RlcnMoKTsKQEAgLTg1OSw3ICs4NTYsNyBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlKiBub2RlCiAgICAgICAgICAgICAKICAgICAg
ICAgICAgIHVzZUNoaWxkcmVuKG5vZGUpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBtX2pp
dC5hZGRKU0RpcmVjdFRhaWxDYWxsKHBhdGNoYWJsZUp1bXAsIGNhbGwsIHNsb3dQYXRoLCBpbmZv
KTsKKyAgICAgICAgICAgIG1faml0LmFkZEpTRGlyZWN0Q2FsbChzbG93UGF0aCwgaW5mbyk7CiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgCkBAIC04NjcsNyArODY0LDcg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZQogICAgICAgICAKICAg
ICAgICAgbV9qaXQuZW1pdFN0b3JlQ2FsbFNpdGVJbmRleChjYWxsU2l0ZSk7CiAgICAgICAgIAot
ICAgICAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsID0gbV9qaXQubmVhckNhbGwoKTsKKyAgICAg
ICAgaW5mby0+ZW1pdERpcmVjdEZhc3RQYXRoKG1faml0KTsKICAgICAgICAgSklUQ29tcGlsZXI6
Okp1bXAgZG9uZSA9IG1faml0Lmp1bXAoKTsKICAgICAgICAgCiAgICAgICAgIEpJVENvbXBpbGVy
OjpMYWJlbCBzbG93UGF0aCA9IG1faml0LmxhYmVsKCk7CkBAIC04NzksNyArODc2LDcgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZQogICAgICAgICAKICAgICAgICAg
c2V0UmVzdWx0QW5kUmVzZXRTdGFjaygpOwogICAgICAgICAKLSAgICAgICAgbV9qaXQuYWRkSlNE
aXJlY3RDYWxsKGNhbGwsIHNsb3dQYXRoLCBpbmZvKTsKKyAgICAgICAgbV9qaXQuYWRkSlNEaXJl
Y3RDYWxsKHNsb3dQYXRoLCBpbmZvKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKQEAg
LTg4OCwyMSArODg1LDI1IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5v
ZGUKICAgICBzbG93UGF0aC5hcHBlbmQobV9qaXQuYnJhbmNoSWZOb3RDZWxsKEpTVmFsdWVSZWdz
KGNhbGxlZVRhZ0dQUiwgY2FsbGVlUGF5bG9hZEdQUikpKTsKICAgICBzbG93UGF0aC5hcHBlbmQo
bV9qaXQuYnJhbmNoUHRyV2l0aFBhdGNoKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgY2FsbGVl
UGF5bG9hZEdQUiwgdGFyZ2V0VG9DaGVjaykpOwogCisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlz
dCBzbG93Q2FzZXM7CiAgICAgaWYgKGlzVGFpbCkgewotICAgICAgICBpZiAobm9kZS0+b3AoKSA9
PSBUYWlsQ2FsbCkgewotICAgICAgICAgICAgaW5mby0+c2V0RnJhbWVTaHVmZmxlRGF0YShzaHVm
ZmxlRGF0YSk7Ci0gICAgICAgICAgICBDYWxsRnJhbWVTaHVmZmxlcihtX2ppdCwgc2h1ZmZsZURh
dGEpLnByZXBhcmVGb3JUYWlsQ2FsbCgpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
bV9qaXQuZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwotICAgICAgICAgICAgbV9qaXQucHJlcGFy
ZUZvclRhaWxDYWxsU2xvdygpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgSklUQ29tcGlsZXI6
OkNhbGwgZmFzdENhbGwgPSBpc1RhaWwgPyBtX2ppdC5uZWFyVGFpbENhbGwoKSA6IG1faml0Lm5l
YXJDYWxsKCk7CisgICAgICAgIHNsb3dDYXNlcyA9IGluZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRo
KG1faml0LCBjYWxsZWVQYXlsb2FkR1BSLCBJbnZhbGlkR1BSUmVnLCBDYWxsTGlua0luZm86OlVz
ZURhdGFJQzo6Tm8sIFsmXSB7CisgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBUYWlsQ2Fs
bCkgeworICAgICAgICAgICAgICAgIGluZm8tPnNldEZyYW1lU2h1ZmZsZURhdGEoc2h1ZmZsZURh
dGEpOworICAgICAgICAgICAgICAgIENhbGxGcmFtZVNodWZmbGVyKG1faml0LCBzaHVmZmxlRGF0
YSkucHJlcGFyZUZvclRhaWxDYWxsKCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgIG1faml0LmVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKKyAgICAgICAgICAgICAgICBt
X2ppdC5wcmVwYXJlRm9yVGFpbENhbGxTbG93KCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0p
OworICAgIH0gZWxzZQorICAgICAgICBzbG93Q2FzZXMgPSBpbmZvLT5lbWl0RmFzdFBhdGgobV9q
aXQsIGNhbGxlZVBheWxvYWRHUFIsIEludmFsaWRHUFJSZWcsIENhbGxMaW5rSW5mbzo6VXNlRGF0
YUlDOjpObyk7CiAKICAgICBKSVRDb21waWxlcjo6SnVtcCBkb25lID0gbV9qaXQuanVtcCgpOwog
CiAgICAgc2xvd1BhdGgubGluaygmbV9qaXQpOworICAgIHNsb3dDYXNlcy5saW5rKCZtX2ppdCk7
CisgICAgYXV0byBzbG93UGF0aFN0YXJ0ID0gbV9qaXQubGFiZWwoKTsKIAogICAgIGlmIChub2Rl
LT5vcCgpID09IFRhaWxDYWxsKSB7CiAgICAgICAgIENhbGxGcmFtZVNodWZmbGVyIGNhbGxGcmFt
ZVNodWZmbGVyKG1faml0LCBzaHVmZmxlRGF0YSk7CkBAIC05MjcsMTggKzkyOCwxOCBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlKiBub2RlCiAgICAgICAgICAgICBtX2ppdC5l
bWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CiAgICAgfQogCi0gICAgbV9qaXQubW92ZShUcnVzdGVk
SW1tUHRyKGluZm8pLCBHUFJJbmZvOjpyZWdUMik7CiAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1t
UHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBnbG9iYWxPYmplY3QpLCBHUFJJbmZvOjpyZWdUMyk7
Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgc2xvd0NhbGwgPSBtX2ppdC5uZWFyQ2FsbCgpOworICAg
IGluZm8tPmVtaXRTbG93UGF0aCh2bSgpLCBtX2ppdCk7CiAKICAgICBkb25lLmxpbmsoJm1faml0
KTsKKyAgICBhdXRvIGRvbmVMb2NhdGlvbiA9IG1faml0LmxhYmVsKCk7CiAKICAgICBpZiAoaXNU
YWlsKQogICAgICAgICBtX2ppdC5hYm9ydFdpdGhSZWFzb24oSklURGlkUmV0dXJuRnJvbVRhaWxD
YWxsKTsKICAgICBlbHNlCiAgICAgICAgIHNldFJlc3VsdEFuZFJlc2V0U3RhY2soKTsKIAotICAg
IG1faml0LmFkZEpTQ2FsbChmYXN0Q2FsbCwgc2xvd0NhbGwsIHRhcmdldFRvQ2hlY2ssIGluZm8p
OworICAgIG1faml0LmFkZEpTQ2FsbChzbG93UGF0aFN0YXJ0LCBkb25lTG9jYXRpb24sIGluZm8p
OwogfQogCiB0ZW1wbGF0ZTxib29sIHN0cmljdD4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMjc3NDQwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtODMwLDE4ICs4MzAsMTQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1p
dENhbGwoTm9kZSogbm9kZQogICAgICAgICBpZiAoaXNUYWlsKSB7CiAgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVChub2RlLT5vcCgpID09IERpcmVjdFRhaWxDYWxsKTsKICAgICAgICAgICAgIAot
ICAgICAgICAgICAgSklUQ29tcGlsZXI6OlBhdGNoYWJsZUp1bXAgcGF0Y2hhYmxlSnVtcCA9IG1f
aml0LnBhdGNoYWJsZUp1bXAoKTsKICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpMYWJlbCBtYWlu
UGF0aCA9IG1faml0LmxhYmVsKCk7Ci0gICAgICAgICAgICAKICAgICAgICAgICAgIG1faml0LmVt
aXRTdG9yZUNhbGxTaXRlSW5kZXgoY2FsbFNpdGUpOwotICAgICAgICAgICAgCi0gICAgICAgICAg
ICBjYWxsTGlua0luZm8tPnNldEZyYW1lU2h1ZmZsZURhdGEoc2h1ZmZsZURhdGEpOwotICAgICAg
ICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIobV9qaXQsIHNodWZmbGVEYXRhKS5wcmVwYXJlRm9yVGFp
bENhbGwoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgSklUQ29tcGlsZXI6OkNhbGwgY2Fs
bCA9IG1faml0Lm5lYXJUYWlsQ2FsbCgpOwotICAgICAgICAgICAgCisKKyAgICAgICAgICAgIGNh
bGxMaW5rSW5mby0+ZW1pdERpcmVjdFRhaWxDYWxsRmFzdFBhdGgobV9qaXQsIFsmXSB7CisgICAg
ICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRGcmFtZVNodWZmbGVEYXRhKHNodWZmbGVEYXRh
KTsKKyAgICAgICAgICAgICAgICBDYWxsRnJhbWVTaHVmZmxlcihtX2ppdCwgc2h1ZmZsZURhdGEp
LnByZXBhcmVGb3JUYWlsQ2FsbCgpOworICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICBKSVRD
b21waWxlcjo6TGFiZWwgc2xvd1BhdGggPSBtX2ppdC5sYWJlbCgpOwotICAgICAgICAgICAgcGF0
Y2hhYmxlSnVtcC5tX2p1bXAubGlua1RvKHNsb3dQYXRoLCAmbV9qaXQpOwogICAgICAgICAgICAg
CiAgICAgICAgICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhJbnZhbGlkR1BSUmVnKTsKICAg
ICAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTGlua0RpcmVjdENhbGwsIGNhbGxMaW5r
SW5mbywgY2FsbGVlR1BSKTsKQEAgLTg1MSwxNSArODQ3LDEzIEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUKICAgICAgICAgICAgIAogICAgICAgICAgICAgdXNlQ2hp
bGRyZW4obm9kZSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIG1faml0LmFkZEpTRGlyZWN0
VGFpbENhbGwocGF0Y2hhYmxlSnVtcCwgY2FsbCwgc2xvd1BhdGgsIGNhbGxMaW5rSW5mbyk7Cisg
ICAgICAgICAgICBtX2ppdC5hZGRKU0RpcmVjdENhbGwoc2xvd1BhdGgsIGNhbGxMaW5rSW5mbyk7
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIEpJVENv
bXBpbGVyOjpMYWJlbCBtYWluUGF0aCA9IG1faml0LmxhYmVsKCk7Ci0gICAgICAgIAogICAgICAg
ICBtX2ppdC5lbWl0U3RvcmVDYWxsU2l0ZUluZGV4KGNhbGxTaXRlKTsKLSAgICAgICAgCi0gICAg
ICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGwgPSBtX2ppdC5uZWFyQ2FsbCgpOworICAgICAgICBj
YWxsTGlua0luZm8tPmVtaXREaXJlY3RGYXN0UGF0aChtX2ppdCk7CiAgICAgICAgIEpJVENvbXBp
bGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7CiAgICAgICAgIAogICAgICAgICBKSVRDb21w
aWxlcjo6TGFiZWwgc2xvd1BhdGggPSBtX2ppdC5sYWJlbCgpOwpAQCAtODc0LDMwICs4NjgsMjkg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZQogICAgICAgICAKICAg
ICAgICAgc2V0UmVzdWx0QW5kUmVzZXRTdGFjaygpOwogICAgICAgICAKLSAgICAgICAgbV9qaXQu
YWRkSlNEaXJlY3RDYWxsKGNhbGwsIHNsb3dQYXRoLCBjYWxsTGlua0luZm8pOworICAgICAgICBt
X2ppdC5hZGRKU0RpcmVjdENhbGwoc2xvd1BhdGgsIGNhbGxMaW5rSW5mbyk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAgICAgCiAgICAgbV9qaXQuZW1pdFN0b3JlQ2FsbFNpdGVJbmRleChjYWxs
U2l0ZSk7CiAgICAgCi0gICAgSklUQ29tcGlsZXI6OkRhdGFMYWJlbFB0ciB0YXJnZXRUb0NoZWNr
OwotICAgIEpJVENvbXBpbGVyOjpKdW1wIHNsb3dQYXRoID0gbV9qaXQuYnJhbmNoUHRyV2l0aFBh
dGNoKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgY2FsbGVlR1BSLCB0YXJnZXRUb0NoZWNrLCBU
cnVzdGVkSW1tUHRyKG51bGxwdHIpKTsKLQorICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xv
d0Nhc2VzOwogICAgIGlmIChpc1RhaWwpIHsKLSAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gVGFp
bENhbGwpIHsKLSAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0RnJhbWVTaHVmZmxlRGF0YShz
aHVmZmxlRGF0YSk7Ci0gICAgICAgICAgICBDYWxsRnJhbWVTaHVmZmxlcihtX2ppdCwgc2h1ZmZs
ZURhdGEpLnByZXBhcmVGb3JUYWlsQ2FsbCgpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgbV9qaXQuZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwotICAgICAgICAgICAgbV9qaXQucHJl
cGFyZUZvclRhaWxDYWxsU2xvdygpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgSklUQ29tcGls
ZXI6OkNhbGwgZmFzdENhbGwgPSBpc1RhaWwgPyBtX2ppdC5uZWFyVGFpbENhbGwoKSA6IG1faml0
Lm5lYXJDYWxsKCk7Ci0KKyAgICAgICAgc2xvd0Nhc2VzID0gY2FsbExpbmtJbmZvLT5lbWl0VGFp
bENhbGxGYXN0UGF0aChtX2ppdCwgY2FsbGVlR1BSLCBJbnZhbGlkR1BSUmVnLCBDYWxsTGlua0lu
Zm86OlVzZURhdGFJQzo6Tm8sIFsmXSB7CisgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBU
YWlsQ2FsbCkgeworICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0RnJhbWVTaHVmZmxl
RGF0YShzaHVmZmxlRGF0YSk7CisgICAgICAgICAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIobV9q
aXQsIHNodWZmbGVEYXRhKS5wcmVwYXJlRm9yVGFpbENhbGwoKTsKKyAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgbV9qaXQuZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOworICAg
ICAgICAgICAgICAgIG1faml0LnByZXBhcmVGb3JUYWlsQ2FsbFNsb3coKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfSk7CisgICAgfSBlbHNlCisgICAgICAgIHNsb3dDYXNlcyA9IGNhbGxMaW5r
SW5mby0+ZW1pdEZhc3RQYXRoKG1faml0LCBjYWxsZWVHUFIsIEludmFsaWRHUFJSZWcsIENhbGxM
aW5rSW5mbzo6VXNlRGF0YUlDOjpObyk7CiAgICAgSklUQ29tcGlsZXI6Okp1bXAgZG9uZSA9IG1f
aml0Lmp1bXAoKTsKIAotICAgIHNsb3dQYXRoLmxpbmsoJm1faml0KTsKKyAgICBzbG93Q2FzZXMu
bGluaygmbV9qaXQpOworICAgIGF1dG8gc2xvd1BhdGhTdGFydCA9IG1faml0LmxhYmVsKCk7CiAK
ICAgICBpZiAobm9kZS0+b3AoKSA9PSBUYWlsQ2FsbCkgewogICAgICAgICBDYWxsRnJhbWVTaHVm
ZmxlciBjYWxsRnJhbWVTaHVmZmxlcihtX2ppdCwgc2h1ZmZsZURhdGEpOwpAQCAtOTA1LDIzICs4
OTgsMjIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZQogICAgICAg
ICBjYWxsRnJhbWVTaHVmZmxlci5wcmVwYXJlRm9yU2xvd1BhdGgoKTsKICAgICB9IGVsc2Ugewog
ICAgICAgICBtX2ppdC5tb3ZlKGNhbGxlZUdQUiwgR1BSSW5mbzo6cmVnVDApOyAvLyBDYWxsZWUg
bmVlZHMgdG8gYmUgaW4gcmVnVDAKLQogICAgICAgICBpZiAoaXNUYWlsKQogICAgICAgICAgICAg
bV9qaXQuZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOyAvLyBUaGlzIG5lZWRzIHRvIGhhcHBlbiBh
ZnRlciB3ZSBtb3ZlZCBjYWxsZWVHUFIgdG8gcmVnVDAKICAgICB9CiAKLSAgICBtX2ppdC5tb3Zl
KFRydXN0ZWRJbW1QdHIoY2FsbExpbmtJbmZvKSwgR1BSSW5mbzo6cmVnVDIpOyAvLyBMaW5rIGlu
Zm8gbmVlZHMgdG8gYmUgaW4gcmVnVDIKICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHI6Ondl
YWtQb2ludGVyKG1fZ3JhcGgsIGdsb2JhbE9iamVjdCksIEdQUkluZm86OnJlZ1QzKTsgLy8gSlNH
bG9iYWxPYmplY3QgbmVlZHMgdG8gYmUgaW4gcmVnVDMKLSAgICBKSVRDb21waWxlcjo6Q2FsbCBz
bG93Q2FsbCA9IG1faml0Lm5lYXJDYWxsKCk7CisgICAgY2FsbExpbmtJbmZvLT5lbWl0U2xvd1Bh
dGgodm0oKSwgbV9qaXQpOwogCiAgICAgZG9uZS5saW5rKCZtX2ppdCk7CisgICAgYXV0byBkb25l
TG9jYXRpb24gPSBtX2ppdC5sYWJlbCgpOwogCiAgICAgaWYgKGlzVGFpbCkKICAgICAgICAgbV9q
aXQuYWJvcnRXaXRoUmVhc29uKEpJVERpZFJldHVybkZyb21UYWlsQ2FsbCk7CiAgICAgZWxzZQog
ICAgICAgICBzZXRSZXN1bHRBbmRSZXNldFN0YWNrKCk7CiAKLSAgICBtX2ppdC5hZGRKU0NhbGwo
ZmFzdENhbGwsIHNsb3dDYWxsLCB0YXJnZXRUb0NoZWNrLCBjYWxsTGlua0luZm8pOworICAgIG1f
aml0LmFkZEpTQ2FsbChzbG93UGF0aFN0YXJ0LCBkb25lTG9jYXRpb24sIGNhbGxMaW5rSW5mbyk7
CiB9CiAKIC8vIENsYW5nIHNob3VsZCBhbGxvdyB1bnJlYWNoYWJsZSBbW2NsYW5nOjpmYWxsdGhy
b3VnaF1dIGluIHRlbXBsYXRlIGZ1bmN0aW9ucyBpZiBhbnkgdGVtcGxhdGUgZXhwYW5zaW9uIHVz
ZXMgaXQKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9C
My5jcHAJKHJldmlzaW9uIDI3NzQ0MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
TG93ZXJERkdUb0IzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTcxNywyNCArOTcxNywyMCBAQCBw
cml2YXRlOgogICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OnRhZ0ZvcihWaXJ0dWFs
UmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKSk7CiAK
ICAgICAgICAgICAgICAgICBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbyA9IGppdC5jb2RlQmxv
Y2soKS0+YWRkQ2FsbExpbmtJbmZvKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CisgICAgICAgICAg
ICAgICAgY2FsbExpbmtJbmZvLT5zZXRVcENhbGwoCisgICAgICAgICAgICAgICAgICAgIG5vZGUt
Pm9wKCkgPT0gQ29uc3RydWN0ID8gQ2FsbExpbmtJbmZvOjpDb25zdHJ1Y3QgOiBDYWxsTGlua0lu
Zm86OkNhbGwsIEdQUkluZm86OnJlZ1QwKTsKIAotICAgICAgICAgICAgICAgIENDYWxsSGVscGVy
czo6RGF0YUxhYmVsUHRyIHRhcmdldFRvQ2hlY2s7Ci0gICAgICAgICAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpKdW1wIHNsb3dQYXRoID0gaml0LmJyYW5jaFB0cldpdGhQYXRjaCgKLSAgICAgICAgICAg
ICAgICAgICAgQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwgR1BSSW5mbzo6cmVnVDAsIHRhcmdldFRv
Q2hlY2ssCi0gICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihu
dWxscHRyKSk7Ci0KLSAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgZmFzdENhbGwg
PSBqaXQubmVhckNhbGwoKTsKKyAgICAgICAgICAgICAgICBhdXRvIHNsb3dQYXRoID0gY2FsbExp
bmtJbmZvLT5lbWl0RmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgSW52YWxpZEdQUlJlZywg
Q2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6Ok5vKTsKICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBl
cnM6Okp1bXAgZG9uZSA9IGppdC5qdW1wKCk7CiAKICAgICAgICAgICAgICAgICBzbG93UGF0aC5s
aW5rKCZqaXQpOwotCi0gICAgICAgICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tUHRyKGNhbGxMaW5rSW5mbyksIEdQUkluZm86OnJlZ1QyKTsKKyAgICAgICAgICAgICAg
ICBhdXRvIHNsb3dQYXRoU3RhcnQgPSBqaXQubGFiZWwoKTsKICAgICAgICAgICAgICAgICBqaXQu
bW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoaml0LmNvZGVCbG9jaygpLT5nbG9iYWxP
YmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIEdQUkluZm86OnJlZ1QzKTsKLSAgICAg
ICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgc2xvd0NhbGwgPSBqaXQubmVhckNhbGwoKTsK
KyAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPmVtaXRTbG93UGF0aCgqdm0sIGppdCk7CisK
ICAgICAgICAgICAgICAgICBkb25lLmxpbmsoJmppdCk7CiAKLSAgICAgICAgICAgICAgICBjYWxs
TGlua0luZm8tPnNldFVwQ2FsbCgKLSAgICAgICAgICAgICAgICAgICAgbm9kZS0+b3AoKSA9PSBD
b25zdHJ1Y3QgPyBDYWxsTGlua0luZm86OkNvbnN0cnVjdCA6IENhbGxMaW5rSW5mbzo6Q2FsbCwg
R1BSSW5mbzo6cmVnVDApOworICAgICAgICAgICAgICAgIGF1dG8gZG9uZUxvY2F0aW9uID0gaml0
LmxhYmVsKCk7CiAKICAgICAgICAgICAgICAgICBqaXQuYWRkUHRyKAogICAgICAgICAgICAgICAg
ICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigtcGFyYW1zLnByb2MoKS5mcmFtZVNpemUo
KSksCkBAIC05NzQyLDEzICs5NzM4LDkgQEAgcHJpdmF0ZToKIAogICAgICAgICAgICAgICAgIGpp
dC5hZGRMaW5rVGFzaygKICAgICAgICAgICAgICAgICAgICAgWz1dIChMaW5rQnVmZmVyJiBsaW5r
QnVmZmVyKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8
SklUVGh1bmtQdHJUYWc+IGxpbmtDYWxsID0gdm0tPmdldENUSVN0dWIobGlua0NhbGxUaHVua0dl
bmVyYXRvcikuY29kZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5r
KHNsb3dDYWxsLCBGdW5jdGlvblB0cjxKSVRUaHVua1B0clRhZz4obGlua0NhbGwpKTsKLQotICAg
ICAgICAgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRDYWxsTG9jYXRpb25zKAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJU
YWc+KGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPEpTSW50ZXJuYWxQdHJUYWc+KHNsb3dD
YWxsKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJ
bnRlcm5hbFB0clRhZz4obGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KHRh
cmdldFRvQ2hlY2spKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxv
Y2F0aW9uT2ZOZWFyQ2FsbDxKU0ludGVybmFsUHRyVGFnPihmYXN0Q2FsbCkpOworICAgICAgICAg
ICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRDb2RlTG9jYXRpb25zKAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFn
PihzbG93UGF0aFN0YXJ0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVy
LmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oZG9uZUxvY2F0aW9uKSk7CiAgICAgICAgICAg
ICAgICAgICAgIH0pOwogICAgICAgICAgICAgfSk7CiAKQEAgLTk4NTcsNjMgKzk4NDksNTAgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgc2h1ZmZsZURhdGEuc2V0dXBDYWxsZWVTYXZl
UmVnaXN0ZXJzKGppdC5jb2RlQmxvY2soKSk7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgICAgICAgICBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbyA9IGppdC5jb2RlQmxvY2so
KS0+YWRkQ2FsbExpbmtJbmZvKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CisgICAgICAgICAgICAg
ICAgICAgIGNhbGxMaW5rSW5mby0+c2V0VXBDYWxsKENhbGxMaW5rSW5mbzo6RGlyZWN0VGFpbENh
bGwsIEludmFsaWRHUFJSZWcpOwogICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpQYXRjaGFibGVKdW1wIHBhdGNoYWJsZUp1bXAgPSBqaXQucGF0
Y2hhYmxlSnVtcCgpOwogICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkxhYmVsIG1h
aW5QYXRoID0gaml0LmxhYmVsKCk7Ci0gICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
ICAgICAgICBqaXQuc3RvcmUzMigKICAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbTMyKGNhbGxTaXRlSW5kZXguYml0cygpKSwKICAgICAgICAgICAgICAgICAg
ICAgICAgIENDYWxsSGVscGVyczo6dGFnRm9yKFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90
Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykpKTsKLSAgICAgICAgICAgICAgICAKLSAgICAg
ICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRGcmFtZVNodWZmbGVEYXRhKHNodWZmbGVE
YXRhKTsKLSAgICAgICAgICAgICAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIoaml0LCBzaHVmZmxl
RGF0YSkucHJlcGFyZUZvclRhaWxDYWxsKCk7Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAg
ICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2FsbCA9IGppdC5uZWFyVGFpbENhbGwo
KTsKKyAgICAgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5lbWl0RGlyZWN0VGFpbENhbGxG
YXN0UGF0aChqaXQsIFsmXSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8t
PnNldEZyYW1lU2h1ZmZsZURhdGEoc2h1ZmZsZURhdGEpOworICAgICAgICAgICAgICAgICAgICAg
ICAgQ2FsbEZyYW1lU2h1ZmZsZXIoaml0LCBzaHVmZmxlRGF0YSkucHJlcGFyZUZvclRhaWxDYWxs
KCk7CisgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgICAKICAgICAg
ICAgICAgICAgICAgICAgaml0LmFib3J0V2l0aFJlYXNvbihKSVREaWRSZXR1cm5Gcm9tVGFpbENh
bGwpOwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpMYWJlbCBzbG93UGF0aCA9IGppdC5sYWJlbCgpOwotICAgICAgICAgICAgICAgICAgICBw
YXRjaGFibGVKdW1wLm1fanVtcC5saW5rVG8oc2xvd1BhdGgsICZqaXQpOwogICAgICAgICAgICAg
ICAgICAgICBjYWxsT3BlcmF0aW9uKAogICAgICAgICAgICAgICAgICAgICAgICAgKnN0YXRlLCB0
b1NhdmUsIGppdCwKICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPm9yaWdpbi5zZW1hbnRp
YywgZXhjZXB0aW9ucy5nZXQoKSwgb3BlcmF0aW9uTGlua0RpcmVjdENhbGwsCiAgICAgICAgICAg
ICAgICAgICAgICAgICBJbnZhbGlkR1BSUmVnLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIo
Y2FsbExpbmtJbmZvKSwgY2FsbGVlR1BSKS5jYWxsKCk7CiAgICAgICAgICAgICAgICAgICAgIGpp
dC5qdW1wKCkubGlua1RvKG1haW5QYXRoLCAmaml0KTsKLSAgICAgICAgICAgICAgICAgICAgCi0g
ICAgICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0VXBDYWxsKENhbGxMaW5rSW5mbzo6
RGlyZWN0VGFpbENhbGwsIEludmFsaWRHUFJSZWcpOwogICAgICAgICAgICAgICAgICAgICBjYWxs
TGlua0luZm8tPnNldEV4ZWN1dGFibGVEdXJpbmdDb21waWxhdGlvbihleGVjdXRhYmxlKTsKICAg
ICAgICAgICAgICAgICAgICAgaWYgKG51bUFsbG9jYXRlZEFyZ3MgPiBudW1QYXNzZWRBcmdzKQog
ICAgICAgICAgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRNYXhBcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcyhudW1BbGxvY2F0ZWRBcmdzKTsKICAgICAgICAgICAgICAgICAgICAgCi0g
ICAgICAgICAgICAgICAgICAgIGppdC5hZGRMaW5rVGFzaygKLSAgICAgICAgICAgICAgICAgICAg
ICAgIFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IHBhdGNoYWJsZUp1bXBM
b2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihwYXRjaGFi
bGVKdW1wKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2RlTG9jYXRpb25OZWFyQ2Fs
bDxKU0ludGVybmFsUHRyVGFnPiBjYWxsTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZO
ZWFyQ2FsbDxKU0ludGVybmFsUHRyVGFnPihjYWxsKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBzbG93UGF0aExvY2F0aW9u
ID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KHNsb3dQYXRoKTsKLQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0Q2FsbExvY2F0aW9u
cygKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0Y2hhYmxlSnVtcExvY2F0aW9u
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbG93UGF0aExvY2F0aW9uLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsTG9jYXRpb24pOwotICAgICAgICAgICAg
ICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgICAgIGppdC5hZGRMaW5rVGFzayhbPV0g
KExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxM
aW5rSW5mby0+c2V0Q29kZUxvY2F0aW9ucygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBs
aW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oc2xvd1BhdGgpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+
KCkpOworICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBD
YWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbyA9IGppdC5jb2RlQmxvY2soKS0+YWRkQ2FsbExpbmtJ
bmZvKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpMYWJlbCBtYWluUGF0aCA9IGppdC5sYWJlbCgpOworICAgICAg
ICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0VXBDYWxsKAorICAgICAgICAgICAgICAgICAgICBp
c0NvbnN0cnVjdCA/IENhbGxMaW5rSW5mbzo6RGlyZWN0Q29uc3RydWN0IDogQ2FsbExpbmtJbmZv
OjpEaXJlY3RDYWxsLCBJbnZhbGlkR1BSUmVnKTsKIAorICAgICAgICAgICAgICAgIENDYWxsSGVs
cGVyczo6TGFiZWwgbWFpblBhdGggPSBqaXQubGFiZWwoKTsKICAgICAgICAgICAgICAgICBqaXQu
c3RvcmUzMigKICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIo
Y2FsbFNpdGVJbmRleC5iaXRzKCkpLAogICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6
OnRhZ0ZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXMpKSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpDYWxsIGNhbGwgPSBqaXQubmVhckNhbGwoKTsKKyAgICAgICAgICAgICAgICBjYWxsTGlu
a0luZm8tPmVtaXREaXJlY3RGYXN0UGF0aChqaXQpOwogICAgICAgICAgICAgICAgIGppdC5hZGRQ
dHIoCiAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKC1wYXJh
bXMucHJvYygpLmZyYW1lU2l6ZSgpKSwKICAgICAgICAgICAgICAgICAgICAgR1BSSW5mbzo6Y2Fs
bEZyYW1lUmVnaXN0ZXIsIENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAg
ICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0VXBDYWxsKAot
ICAgICAgICAgICAgICAgICAgICBpc0NvbnN0cnVjdCA/IENhbGxMaW5rSW5mbzo6RGlyZWN0Q29u
c3RydWN0IDogQ2FsbExpbmtJbmZvOjpEaXJlY3RDYWxsLCBJbnZhbGlkR1BSUmVnKTsKICAgICAg
ICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldEV4ZWN1dGFibGVEdXJpbmdDb21waWxhdGlvbihl
eGVjdXRhYmxlKTsKICAgICAgICAgICAgICAgICBpZiAobnVtQWxsb2NhdGVkQXJncyA+IG51bVBh
c3NlZEFyZ3MpCiAgICAgICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0TWF4QXJndW1l
bnRDb3VudEluY2x1ZGluZ1RoaXMobnVtQWxsb2NhdGVkQXJncyk7CkBAIC05OTM1LDE1ICs5OTE0
LDkgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAg
ICAgICAgICAgaml0LmFkZExpbmtUYXNrKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFs9
XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBDb2RlTG9jYXRpb25OZWFyQ2FsbDxKU0ludGVybmFsUHRyVGFnPiBjYWxsTG9jYXRpb24g
PSBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxKU0ludGVybmFsUHRyVGFnPihjYWxsKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRl
cm5hbFB0clRhZz4gc2xvd1BhdGhMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0lu
dGVybmFsUHRyVGFnPihzbG93UGF0aCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbGlua0J1ZmZlci5saW5rKGNhbGwsIHNsb3dQYXRoTG9jYXRpb24pOwotCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0Q2FsbExvY2F0aW9ucygKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50
ZXJuYWxQdHJUYWc+KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbG93
UGF0aExvY2F0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbExv
Y2F0aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5z
ZXRDb2RlTG9jYXRpb25zKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlu
a0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KHNsb3dQYXRoKSwgCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFs
UHRyVGFnPigpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAg
ICAgICAgICAgfSk7CiAgICAgICAgICAgICB9KTsKQEAgLTEwMDM0LDQwICsxMDAwNywzMCBAQCBw
cml2YXRlOgogICAgICAgICAgICAgICAgIHNodWZmbGVEYXRhLnNldHVwQ2FsbGVlU2F2ZVJlZ2lz
dGVycyhqaXQuY29kZUJsb2NrKCkpOwogCiAgICAgICAgICAgICAgICAgQ2FsbExpbmtJbmZvKiBj
YWxsTGlua0luZm8gPSBqaXQuY29kZUJsb2NrKCktPmFkZENhbGxMaW5rSW5mbyhjb2RlT3JpZ2lu
KTsKKyAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldFVwQ2FsbChDYWxsTGlua0luZm86
OlRhaWxDYWxsLCBHUFJJbmZvOjpyZWdUMCk7CiAKLSAgICAgICAgICAgICAgICBDQ2FsbEhlbHBl
cnM6OkRhdGFMYWJlbFB0ciB0YXJnZXRUb0NoZWNrOwotICAgICAgICAgICAgICAgIENDYWxsSGVs
cGVyczo6SnVtcCBzbG93UGF0aCA9IGppdC5icmFuY2hQdHJXaXRoUGF0Y2goCi0gICAgICAgICAg
ICAgICAgICAgIENDYWxsSGVscGVyczo6Tm90RXF1YWwsIEdQUkluZm86OnJlZ1QwLCB0YXJnZXRU
b0NoZWNrLAotICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIo
bnVsbHB0cikpOwotCi0gICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRGcmFtZVNodWZm
bGVEYXRhKHNodWZmbGVEYXRhKTsKLSAgICAgICAgICAgICAgICBDYWxsRnJhbWVTaHVmZmxlcihq
aXQsIHNodWZmbGVEYXRhKS5wcmVwYXJlRm9yVGFpbENhbGwoKTsKLQotICAgICAgICAgICAgICAg
IENDYWxsSGVscGVyczo6Q2FsbCBmYXN0Q2FsbCA9IGppdC5uZWFyVGFpbENhbGwoKTsKKyAgICAg
ICAgICAgICAgICBhdXRvIHNsb3dQYXRoID0gY2FsbExpbmtJbmZvLT5lbWl0VGFpbENhbGxGYXN0
UGF0aChqaXQsIEdQUkluZm86OnJlZ1QwLCBJbnZhbGlkR1BSUmVnLCBDYWxsTGlua0luZm86OlVz
ZURhdGFJQzo6Tm8sIFsmXSB7CisgICAgICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0
RnJhbWVTaHVmZmxlRGF0YShzaHVmZmxlRGF0YSk7CisgICAgICAgICAgICAgICAgICAgIENhbGxG
cmFtZVNodWZmbGVyKGppdCwgc2h1ZmZsZURhdGEpLnByZXBhcmVGb3JUYWlsQ2FsbCgpOworICAg
ICAgICAgICAgICAgIH0pOwogCiAgICAgICAgICAgICAgICAgc2xvd1BhdGgubGluaygmaml0KTsK
LQorICAgICAgICAgICAgICAgIGF1dG8gc2xvd1BhdGhTdGFydCA9IGppdC5sYWJlbCgpOwogICAg
ICAgICAgICAgICAgIENhbGxGcmFtZVNodWZmbGVyIHNsb3dQYXRoU2h1ZmZsZXIoaml0LCBzaHVm
ZmxlRGF0YSk7CiAgICAgICAgICAgICAgICAgc2xvd1BhdGhTaHVmZmxlci5zZXRDYWxsZWVKU1Zh
bHVlUmVncyhKU1ZhbHVlUmVncyhHUFJJbmZvOjpyZWdUMCkpOwogICAgICAgICAgICAgICAgIHNs
b3dQYXRoU2h1ZmZsZXIucHJlcGFyZUZvclNsb3dQYXRoKCk7CiAKLSAgICAgICAgICAgICAgICBq
aXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoY2FsbExpbmtJbmZvKSwgR1BSSW5m
bzo6cmVnVDIpOwogICAgICAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3Rl
ZEltbVB0cihqaXQuY29kZUJsb2NrKCktPmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2Vt
YW50aWMpKSwgR1BSSW5mbzo6cmVnVDMpOwotICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6
Q2FsbCBzbG93Q2FsbCA9IGppdC5uZWFyQ2FsbCgpOworICAgICAgICAgICAgICAgIGNhbGxMaW5r
SW5mby0+ZW1pdFNsb3dQYXRoKCp2bSwgaml0KTsKIAorICAgICAgICAgICAgICAgIGF1dG8gZG9u
ZUxvY2F0aW9uID0gaml0LmxhYmVsKCk7CiAgICAgICAgICAgICAgICAgaml0LmFib3J0V2l0aFJl
YXNvbihKSVREaWRSZXR1cm5Gcm9tVGFpbENhbGwpOwogCi0gICAgICAgICAgICAgICAgY2FsbExp
bmtJbmZvLT5zZXRVcENhbGwoQ2FsbExpbmtJbmZvOjpUYWlsQ2FsbCwgR1BSSW5mbzo6cmVnVDAp
OwotCiAgICAgICAgICAgICAgICAgaml0LmFkZExpbmtUYXNrKAogICAgICAgICAgICAgICAgICAg
ICBbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKSVRUaHVua1B0clRhZz4gbGlua0NhbGwgPSB2bS0+Z2V0
Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5jb2RlKCk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBsaW5rQnVmZmVyLmxpbmsoc2xvd0NhbGwsIEZ1bmN0aW9uUHRyPEpJVFRodW5rUHRy
VGFnPihsaW5rQ2FsbCkpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8t
PnNldENhbGxMb2NhdGlvbnMoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29kZUxvY2F0
aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4obGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8
SlNJbnRlcm5hbFB0clRhZz4oc2xvd0NhbGwpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPihsaW5rQnVmZmVyLmxvY2F0aW9u
T2Y8SlNJbnRlcm5hbFB0clRhZz4odGFyZ2V0VG9DaGVjaykpLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPEpTSW50ZXJuYWxQdHJUYWc+
KGZhc3RDYWxsKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldENv
ZGVMb2NhdGlvbnMoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5sb2Nh
dGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KHNsb3dQYXRoU3RhcnQpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihkb25l
TG9jYXRpb24pKTsKICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICB9KTsKICAg
ICB9CkBAIC0xMDMyMCw0MCArMTAyODMsMzggQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBl
bHNlCiAgICAgICAgICAgICAgICAgICAgIGNhbGxUeXBlID0gQ2FsbExpbmtJbmZvOjpDYWxsVmFy
YXJnczsKICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNl
dFVwQ2FsbChjYWxsVHlwZSwgR1BSSW5mbzo6cmVnVDApOworCiAgICAgICAgICAgICAgICAgYm9v
bCBpc1RhaWxDYWxsID0gQ2FsbExpbmtJbmZvOjpjYWxsTW9kZUZvcihjYWxsVHlwZSkgPT0gQ2Fs
bE1vZGU6OlRhaWw7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpEYXRhTGFiZWxQdHIgdGFyZ2V0VG9DaGVjazsKLSAgICAgICAgICAgICAgICBDQ2FsbEhl
bHBlcnM6Okp1bXAgc2xvd1BhdGggPSBqaXQuYnJhbmNoUHRyV2l0aFBhdGNoKAotICAgICAgICAg
ICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCBHUFJJbmZvOjpyZWdUMCwgdGFyZ2V0
VG9DaGVjaywKLSAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRy
KG51bGxwdHIpKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBDQ2FsbEhlbHBl
cnM6OkNhbGwgZmFzdENhbGw7CisKKyAgICAgICAgICAgICAgICBBU1NFUlQoIXVzZWRSZWdpc3Rl
cnMuZ2V0KEdQUkluZm86OnJlZ1QyKSk7IC8vIFVzZWQgb24gdGhlIHNsb3cgcGF0aC4KKworICAg
ICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd1BhdGg7CiAgICAgICAgICAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGRvbmU7Ci0gICAgICAgICAgICAgICAgCiAgICAgICAg
ICAgICAgICAgaWYgKGlzVGFpbENhbGwpIHsKLSAgICAgICAgICAgICAgICAgICAgaml0LmVtaXRS
ZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKLSAgICAgICAgICAgICAgICAgICAgaml0LnByZXBhcmVGb3JU
YWlsQ2FsbFNsb3coKTsKLSAgICAgICAgICAgICAgICAgICAgZmFzdENhbGwgPSBqaXQubmVhclRh
aWxDYWxsKCk7CisgICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoID0gY2FsbExpbmtJbmZvLT5l
bWl0VGFpbENhbGxGYXN0UGF0aChqaXQsIEdQUkluZm86OnJlZ1QwLCBJbnZhbGlkR1BSUmVnLCBD
YWxsTGlua0luZm86OlVzZURhdGFJQzo6Tm8sIFsmXSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBqaXQuZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOworICAgICAgICAgICAgICAgICAgICAgICAg
aml0LnByZXBhcmVGb3JUYWlsQ2FsbFNsb3coKTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CiAg
ICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgZmFzdENhbGwgPSBq
aXQubmVhckNhbGwoKTsKKyAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGggPSBjYWxsTGlua0lu
Zm8tPmVtaXRGYXN0UGF0aChqaXQsIEdQUkluZm86OnJlZ1QwLCBJbnZhbGlkR1BSUmVnLCBDYWxs
TGlua0luZm86OlVzZURhdGFJQzo6Tm8pOwogICAgICAgICAgICAgICAgICAgICBkb25lID0gaml0
Lmp1bXAoKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAg
ICAgICAgc2xvd1BhdGgubGluaygmaml0KTsKKyAgICAgICAgICAgICAgICBhdXRvIHNsb3dQYXRo
U3RhcnQgPSBqaXQubGFiZWwoKTsKIAogICAgICAgICAgICAgICAgIGlmIChpc1RhaWxDYWxsKQog
ICAgICAgICAgICAgICAgICAgICBqaXQuZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwotICAgICAg
ICAgICAgICAgIEFTU0VSVCghdXNlZFJlZ2lzdGVycy5nZXQoR1BSSW5mbzo6cmVnVDIpKTsKLSAg
ICAgICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoY2FsbExp
bmtJbmZvKSwgR1BSSW5mbzo6cmVnVDIpOwogICAgICAgICAgICAgICAgIGppdC5tb3ZlKENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbVB0cihqaXQuY29kZUJsb2NrKCktPmdsb2JhbE9iamVjdEZvcihu
b2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgR1BSSW5mbzo6cmVnVDMpOwotICAgICAgICAgICAgICAg
IENDYWxsSGVscGVyczo6Q2FsbCBzbG93Q2FsbCA9IGppdC5uZWFyQ2FsbCgpOworICAgICAgICAg
ICAgICAgIGNhbGxMaW5rSW5mby0+ZW1pdFNsb3dQYXRoKCp2bSwgaml0KTsKICAgICAgICAgICAg
ICAgICAKICAgICAgICAgICAgICAgICBpZiAoaXNUYWlsQ2FsbCkKICAgICAgICAgICAgICAgICAg
ICAgaml0LmFib3J0V2l0aFJlYXNvbihKSVREaWRSZXR1cm5Gcm9tVGFpbENhbGwpOwogICAgICAg
ICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgZG9uZS5saW5rKCZqaXQpOwotICAg
ICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0VXBDYWxsKGNh
bGxUeXBlLCBHUFJJbmZvOjpyZWdUMCk7CisKKyAgICAgICAgICAgICAgICBhdXRvIGRvbmVMb2Nh
dGlvbiA9IGppdC5sYWJlbCgpOwogCiAgICAgICAgICAgICAgICAgaml0LmFkZFB0cigKICAgICAg
ICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoLW9yaWdpbmFsU3RhY2tI
ZWlnaHQpLApAQCAtMTAzNjEsMTMgKzEwMzIyLDkgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAg
ICAKICAgICAgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soCiAgICAgICAgICAgICAgICAgICAg
IFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICAgICAgICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpJVFRodW5rUHRyVGFnPiBsaW5rQ2FsbCA9IHZtLT5nZXRD
VElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpLmNvZGUoKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGxpbmtCdWZmZXIubGluayhzbG93Q2FsbCwgRnVuY3Rpb25QdHI8SklUVGh1bmtQdHJU
YWc+KGxpbmtDYWxsKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0Q2FsbExvY2F0aW9ucygKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPihsaW5rQnVm
ZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxKU0ludGVybmFsUHRyVGFnPihzbG93Q2FsbCkpLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJU
YWc+KGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPih0YXJnZXRUb0NoZWNr
KSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVh
ckNhbGw8SlNJbnRlcm5hbFB0clRhZz4oZmFzdENhbGwpKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGNhbGxMaW5rSW5mby0+c2V0Q29kZUxvY2F0aW9ucygKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oc2xvd1BhdGhT
dGFydCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5sb2NhdGlvbk9m
PEpTSW50ZXJuYWxQdHJUYWc+KGRvbmVMb2NhdGlvbikpOwogICAgICAgICAgICAgICAgICAgICB9
KTsKICAgICAgICAgICAgIH0pOwogCkBAIC0xMDYwNywzOSArMTA1NjQsMzYgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIGNhbGxUeXBlID0gQ2Fs
bExpbmtJbmZvOjpDYWxsVmFyYXJnczsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAg
ICBib29sIGlzVGFpbENhbGwgPSBDYWxsTGlua0luZm86OmNhbGxNb2RlRm9yKGNhbGxUeXBlKSA9
PSBDYWxsTW9kZTo6VGFpbDsKKyAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldFVwQ2Fs
bChjYWxsVHlwZSwgR1BSSW5mbzo6cmVnVDApOwogICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgICAgIENDYWxsSGVscGVyczo6RGF0YUxhYmVsUHRyIHRhcmdldFRvQ2hlY2s7Ci0gICAgICAg
ICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIHNsb3dQYXRoID0gaml0LmJyYW5jaFB0cldpdGhQ
YXRjaCgKLSAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwgR1BSSW5m
bzo6cmVnVDAsIHRhcmdldFRvQ2hlY2ssCi0gICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbVB0cihudWxscHRyKSk7CisgICAgICAgICAgICAgICAgYm9vbCBpc1RhaWxD
YWxsID0gQ2FsbExpbmtJbmZvOjpjYWxsTW9kZUZvcihjYWxsVHlwZSkgPT0gQ2FsbE1vZGU6OlRh
aWw7CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxs
IGZhc3RDYWxsOworICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd1Bh
dGg7CiAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGRvbmU7Ci0gICAgICAgICAg
ICAgICAgCiAgICAgICAgICAgICAgICAgaWYgKGlzVGFpbENhbGwpIHsKLSAgICAgICAgICAgICAg
ICAgICAgaml0LmVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKLSAgICAgICAgICAgICAgICAgICAg
aml0LnByZXBhcmVGb3JUYWlsQ2FsbFNsb3coKTsKLSAgICAgICAgICAgICAgICAgICAgZmFzdENh
bGwgPSBqaXQubmVhclRhaWxDYWxsKCk7CisgICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoID0g
Y2FsbExpbmtJbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChqaXQsIEdQUkluZm86OnJlZ1QwLCBJ
bnZhbGlkR1BSUmVnLCBDYWxsTGlua0luZm86OlVzZURhdGFJQzo6Tm8sIFsmXSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBqaXQuZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOworICAgICAgICAg
ICAgICAgICAgICAgICAgaml0LnByZXBhcmVGb3JUYWlsQ2FsbFNsb3coKTsKKyAgICAgICAgICAg
ICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAg
ICAgZmFzdENhbGwgPSBqaXQubmVhckNhbGwoKTsKKyAgICAgICAgICAgICAgICAgICAgc2xvd1Bh
dGggPSBjYWxsTGlua0luZm8tPmVtaXRGYXN0UGF0aChqaXQsIEdQUkluZm86OnJlZ1QwLCBJbnZh
bGlkR1BSUmVnLCBDYWxsTGlua0luZm86OlVzZURhdGFJQzo6Tm8pOwogICAgICAgICAgICAgICAg
ICAgICBkb25lID0gaml0Lmp1bXAoKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgCiAgICAgICAgICAgICAgICAgc2xvd1BhdGgubGluaygmaml0KTsKKyAgICAgICAgICAgICAg
ICBhdXRvIHNsb3dQYXRoU3RhcnQgPSBqaXQubGFiZWwoKTsKIAogICAgICAgICAgICAgICAgIGlm
IChpc1RhaWxDYWxsKQogICAgICAgICAgICAgICAgICAgICBqaXQuZW1pdFJlc3RvcmVDYWxsZWVT
YXZlcygpOwotICAgICAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bVB0cihjYWxsTGlua0luZm8pLCBHUFJJbmZvOjpyZWdUMik7CiAgICAgICAgICAgICAgICAgaml0
Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGppdC5jb2RlQmxvY2soKS0+Z2xvYmFs
T2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBHUFJJbmZvOjpyZWdUMyk7Ci0gICAg
ICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIHNsb3dDYWxsID0gaml0Lm5lYXJDYWxsKCk7
CisgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5lbWl0U2xvd1BhdGgoKnZtLCBqaXQpOwog
ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGlmIChpc1RhaWxDYWxsKQogICAgICAg
ICAgICAgICAgICAgICBqaXQuYWJvcnRXaXRoUmVhc29uKEpJVERpZFJldHVybkZyb21UYWlsQ2Fs
bCk7CiAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICBkb25lLmxpbmso
JmppdCk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5z
ZXRVcENhbGwoY2FsbFR5cGUsIEdQUkluZm86OnJlZ1QwKTsKKworICAgICAgICAgICAgICAgIGF1
dG8gZG9uZUxvY2F0aW9uID0gaml0LmxhYmVsKCk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAg
ICAgICAgICAgaml0LmFkZFB0cigKICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tMzIoLW9yaWdpbmFsU3RhY2tIZWlnaHQpLApAQCAtMTA2NDcsMTMgKzEwNjAxLDkg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBqaXQuYWRkTGlu
a1Rhc2soCiAgICAgICAgICAgICAgICAgICAgIFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikg
ewotICAgICAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpJVFRodW5r
UHRyVGFnPiBsaW5rQ2FsbCA9IHZtLT5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3Ip
LmNvZGUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhzbG93Q2Fs
bCwgRnVuY3Rpb25QdHI8SklUVGh1bmtQdHJUYWc+KGxpbmtDYWxsKSk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0Q2Fs
bExvY2F0aW9ucygKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJl
bDxKU0ludGVybmFsUHRyVGFnPihsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxKU0ludGVy
bmFsUHRyVGFnPihzbG93Q2FsbCkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvZGVM
b2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+KGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0lu
dGVybmFsUHRyVGFnPih0YXJnZXRUb0NoZWNrKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8SlNJbnRlcm5hbFB0clRhZz4oZmFzdENh
bGwpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0Q29kZUxvY2F0
aW9ucygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8
SlNJbnRlcm5hbFB0clRhZz4oc2xvd1BhdGhTdGFydCksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KGRvbmVMb2NhdGlv
bikpOwogICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIH0pOwogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMuY3BwCShyZXZpc2lvbiAyNzc0
NDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTcxLDYgKzcxLDE2IEBAIHZvaWQgQ0NhbGxIZWxwZXJzOjplbnN1cmVTaGFk
b3dDaGlja2VuUGEKICAgICBzdG9yZVB0cihzY3JhdGNoMiwgQWRkcmVzcyhzY3JhdGNoMU5vbkFy
Z0dQUikpOwogfQogCit2b2lkIENDYWxsSGVscGVyczo6ZW1pdEpJVENvZGVPdmVyKE1hY3JvQXNz
ZW1ibGVyQ29kZVB0cjxKU0ludGVybmFsUHRyVGFnPiBjb2RlLCBXVEY6OkZ1bmN0aW9uPHZvaWQo
Q0NhbGxIZWxwZXJzJik+IGVtaXRDb2RlLCBjb25zdCBjaGFyKiBkZXNjcmlwdGlvbikKK3sKKyAg
ICBDQ2FsbEhlbHBlcnMgaml0OworICAgIGVtaXRDb2RlKGppdCk7CisKKyAgICBjb25zdGV4cHIg
Ym9vbCBuZWVkc0JyYW5jaENvbXBhY3Rpb24gPSBmYWxzZTsKKyAgICBMaW5rQnVmZmVyIGxpbmtC
dWZmZXIoaml0LCBjb2RlLCBqaXQubV9hc3NlbWJsZXIuYnVmZmVyKCkuY29kZVNpemUoKSwgTGlu
a0J1ZmZlcjo6UHJvZmlsZTo6SW5saW5lQ2FjaGUsIEpJVENvbXBpbGF0aW9uTXVzdFN1Y2NlZWQs
IG5lZWRzQnJhbmNoQ29tcGFjdGlvbik7CisgICAgRklOQUxJWkVfQ09ERShsaW5rQnVmZmVyLCBO
b1B0clRhZywgZGVzY3JpcHRpb24pOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlm
IC8vIEVOQUJMRShKSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NDYWxsSGVs
cGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxw
ZXJzLmgJKHJldmlzaW9uIDI3NzQ0MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ0Nh
bGxIZWxwZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTgxOCw2ICs4MTgsOCBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChHUFJSZWcgc2hhZG93UGFja2V0LCBK
U1ZhbHVlUmVncyB0aGlzUmVncywgR1BSUmVnIHNjb3BlLCBDb2RlQmxvY2sqLCBDYWxsU2l0ZUlu
ZGV4KTsKICAgICAvLyBMZWF2ZXMgYmVoaW5kIGEgcG9pbnRlciB0byB0aGUgUGFja2V0IHdlIHNo
b3VsZCB3cml0ZSB0byBpbiBzaGFkb3dQYWNrZXQuCiAgICAgdm9pZCBlbnN1cmVTaGFkb3dDaGlj
a2VuUGFja2V0KFZNJiwgR1BSUmVnIHNoYWRvd1BhY2tldCwgR1BSUmVnIHNjcmF0Y2gxTm9uQXJn
R1BSLCBHUFJSZWcgc2NyYXRjaDIpOworCisgICAgc3RhdGljIHZvaWQgZW1pdEpJVENvZGVPdmVy
KE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0ludGVybmFsUHRyVGFnPiBjb2RlLCBXVEY6OkZ1bmN0
aW9uPHZvaWQoQ0NhbGxIZWxwZXJzJik+LCBjb25zdCBjaGFyKik7CiB9OwogCiB9IC8vIG5hbWVz
cGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHJldmlzaW9uIDI3NzQ0
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5KQpA
QCAtOTU5LDEwICs5NTksOSBAQCBDb21waWxhdGlvblJlc3VsdCBKSVQ6OmxpbmsoKQogCiAgICAg
Zm9yIChhdXRvJiBjb21waWxhdGlvbkluZm8gOiBtX2NhbGxDb21waWxhdGlvbkluZm8pIHsKICAg
ICAgICAgQ2FsbExpbmtJbmZvJiBpbmZvID0gKmNvbXBpbGF0aW9uSW5mby5jYWxsTGlua0luZm87
Ci0gICAgICAgIGluZm8uc2V0Q2FsbExvY2F0aW9ucygKLSAgICAgICAgICAgIENvZGVMb2NhdGlv
bkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+KHBhdGNoQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxK
U0ludGVybmFsUHRyVGFnPihjb21waWxhdGlvbkluZm8uY2FsbFJldHVybkxvY2F0aW9uKSksCi0g
ICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPihwYXRjaEJ1ZmZl
ci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KGNvbXBpbGF0aW9uSW5mby5ob3RQYXRoQmVn
aW4pKSwKLSAgICAgICAgICAgIHBhdGNoQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxKU0ludGVy
bmFsUHRyVGFnPihjb21waWxhdGlvbkluZm8uaG90UGF0aE90aGVyKSk7CisgICAgICAgIGluZm8u
c2V0Q29kZUxvY2F0aW9ucygKKyAgICAgICAgICAgIHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SlNJ
bnRlcm5hbFB0clRhZz4oY29tcGlsYXRpb25JbmZvLnNsb3dQYXRoU3RhcnQpLAorICAgICAgICAg
ICAgcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihjb21waWxhdGlvbklu
Zm8uZG9uZUxvY2F0aW9uKSk7CiAgICAgfQogCiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVC5oCShyZXZpc2lvbiAyNzc0NDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzUsOSArMTc1LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgfTsKIAogICAgIHN0cnVjdCBDYWxsQ29tcGlsYXRpb25JbmZvIHsKLSAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OkRhdGFMYWJlbFB0ciBob3RQYXRoQmVnaW47Ci0gICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpDYWxsIGhvdFBhdGhPdGhlcjsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2Fs
bFJldHVybkxvY2F0aW9uOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgc2xvd1BhdGhT
dGFydDsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGRvbmVMb2NhdGlvbjsKICAgICAg
ICAgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm87CiAgICAgfTsKIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbDMyXzY0LmNwcAkocmV2aXNpb24gMjc3NDQwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMDEsMzAgKzMwMSwzNCBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChjb25zdCBJbnN0
cnVjdGlvCiAgICAgaWYgKGNvbXBpbGVDYWxsRXZhbChieXRlY29kZSkpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIGlmIChvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGwgfHwgb3Bjb2RlSUQgPT0gb3Bf
dGFpbF9jYWxsX3ZhcmFyZ3MpCi0gICAgICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKKyAg
ICBpbmZvLT5zZXRVcENhbGwoQ2FsbExpbmtJbmZvOjpjYWxsVHlwZUZvcihvcGNvZGVJRCksIHJl
Z1QwKTsKKworICAgIGlmIChvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGwgfHwgb3Bjb2RlSUQgPT0g
b3BfdGFpbF9jYWxsX3ZhcmFyZ3MgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRf
YXJndW1lbnRzKQogCiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1QxKSk7CiAK
ICAgICBEYXRhTGFiZWxQdHIgYWRkcmVzc09mTGlua2VkRnVuY3Rpb25DaGVjazsKICAgICBKdW1w
IHNsb3dDYXNlID0gYnJhbmNoUHRyV2l0aFBhdGNoKE5vdEVxdWFsLCByZWdUMCwgYWRkcmVzc09m
TGlua2VkRnVuY3Rpb25DaGVjaywgVHJ1c3RlZEltbVB0cihudWxscHRyKSk7CiAKLSAgICBhZGRT
bG93Q2FzZShzbG93Q2FzZSk7Ci0KICAgICBBU1NFUlQobV9jYWxsQ29tcGlsYXRpb25JbmZvLnNp
emUoKSA9PSBjYWxsTGlua0luZm9JbmRleCk7Ci0gICAgaW5mby0+c2V0VXBDYWxsKENhbGxMaW5r
SW5mbzo6Y2FsbFR5cGVGb3Iob3Bjb2RlSUQpLCByZWdUMCk7CiAgICAgbV9jYWxsQ29tcGlsYXRp
b25JbmZvLmFwcGVuZChDYWxsQ29tcGlsYXRpb25JbmZvKCkpOwotICAgIG1fY2FsbENvbXBpbGF0
aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uaG90UGF0aEJlZ2luID0gYWRkcmVzc09mTGlua2Vk
RnVuY3Rpb25DaGVjazsKICAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5k
ZXhdLmNhbGxMaW5rSW5mbyA9IGluZm87CiAKICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVu
dCgpOwogICAgIGlmIChvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGwgfHwgb3Bjb2RlSUQgPT0gb3Bf
dGFpbF9jYWxsX3ZhcmFyZ3MgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJn
dW1lbnRzKSB7Ci0gICAgICAgIHByZXBhcmVGb3JUYWlsQ2FsbFNsb3coKTsKLSAgICAgICAgbV9j
YWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5ob3RQYXRoT3RoZXIgPSBlbWl0
TmFrZWROZWFyVGFpbENhbGwoKTsKKyAgICAgICAgYXV0byBzbG93UGF0aHMgPSBpbmZvLT5lbWl0
VGFpbENhbGxGYXN0UGF0aCgqdGhpcywgcmVnVDAsIHJlZ1QyLCBDYWxsTGlua0luZm86OlVzZURh
dGFJQzo6WWVzLCBbJl0geworICAgICAgICAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwor
ICAgICAgICAgICAgcHJlcGFyZUZvclRhaWxDYWxsU2xvdygpOworICAgICAgICB9KTsKKyAgICAg
ICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGhzKTsKKyAgICAgICAgYXV0byBkb25lTG9jYXRpb24gPSBs
YWJlbCgpOworICAgICAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhd
LmRvbmVMb2NhdGlvbiA9IGRvbmVMb2NhdGlvbjsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAot
ICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uaG90UGF0aE90aGVy
ID0gZW1pdE5ha2VkTmVhckNhbGwoKTsKKyAgICBhdXRvIHNsb3dQYXRocyA9IGluZm8tPmVtaXRG
YXN0UGF0aCgqdGhpcywgcmVnVDAsIHJlZ1QyLCBDYWxsTGlua0luZm86OlVzZURhdGFJQzo6WWVz
KTsKKyAgICBhZGRTbG93Q2FzZShzbG93UGF0aHMpOworICAgIG1fY2FsbENvbXBpbGF0aW9uSW5m
b1tjYWxsTGlua0luZm9JbmRleF0uZG9uZUxvY2F0aW9uID0gbGFiZWwoKTsKIAogICAgIGFkZFB0
cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVv
ZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwog
ICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CkBAIC0zNDQsMTUgKzM0OCwxMyBAQCB2
b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKGNvbnN0IEluCiAKICAgICBsaW5rQWxsU2xv
d0Nhc2VzKGl0ZXIpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIHJlZ1QzKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jYWxsQ29tcGls
YXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5jYWxsTGlua0luZm8pLCByZWdUMik7Ci0KICAg
ICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2Fs
bF92YXJhcmdzIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cykK
ICAgICAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwogCi0gICAgbV9jYWxsQ29tcGlsYXRp
b25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5jYWxsUmV0dXJuTG9jYXRpb24gPSBlbWl0TmFrZWRO
ZWFyQ2FsbChtX3ZtLT5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpLnJldGFnZ2Vk
Q29kZTxOb1B0clRhZz4oKSk7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIHJlZ1QzKTsKKyAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExp
bmtJbmZvSW5kZXhdLmNhbGxMaW5rSW5mby0+ZW1pdFNsb3dQYXRoKCptX3ZtLCAqdGhpcyk7CiAK
LSAgICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsIHx8IG9wY29kZUlEID09IG9wX3RhaWxf
Y2FsbF92YXJhcmdzKSB7CisgICAgaWYgKG9wY29kZUlEID09IG9wX3RhaWxfY2FsbCB8fCBvcGNv
ZGVJRCA9PSBvcF90YWlsX2NhbGxfdmFyYXJncyB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxf
Zm9yd2FyZF9hcmd1bWVudHMpIHsKICAgICAgICAgYWJvcnRXaXRoUmVhc29uKEpJVERpZFJldHVy
bkZyb21UYWlsQ2FsbCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAJKHJldmlzaW9uIDI3NzQ0MCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4OCw4ICsxODgs
MTQgQEAgYm9vbCBKSVQ6OmNvbXBpbGVUYWlsQ2FsbChjb25zdCBPcFRhaWxDYQogICAgICAgICBW
YWx1ZVJlY292ZXJ5OjppbkdQUihyZWdUMCwgRGF0YUZvcm1hdEpTKTsKICAgICBzaHVmZmxlRGF0
YS5zZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMobV9jb2RlQmxvY2spOwogICAgIGluZm8tPnNldEZy
YW1lU2h1ZmZsZURhdGEoc2h1ZmZsZURhdGEpOwotICAgIENhbGxGcmFtZVNodWZmbGVyKCp0aGlz
LCBzaHVmZmxlRGF0YSkucHJlcGFyZUZvclRhaWxDYWxsKCk7Ci0gICAgbV9jYWxsQ29tcGlsYXRp
b25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5ob3RQYXRoT3RoZXIgPSBlbWl0TmFrZWROZWFyVGFp
bENhbGwoKTsKKworICAgIEp1bXBMaXN0IHNsb3dQYXRocyA9IGluZm8tPmVtaXRUYWlsQ2FsbEZh
c3RQYXRoKCp0aGlzLCByZWdUMCwgcmVnVDIsIENhbGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpZZXMs
IFsmXSB7CisgICAgICAgIENhbGxGcmFtZVNodWZmbGVyKCp0aGlzLCBzaHVmZmxlRGF0YSkucHJl
cGFyZUZvclRhaWxDYWxsKCk7CisgICAgfSk7CisgICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGhzKTsK
KyAgICBhdXRvIGRvbmVMb2NhdGlvbiA9IGxhYmVsKCk7CisgICAgbV9jYWxsQ29tcGlsYXRpb25J
bmZvW2NhbGxMaW5rSW5mb0luZGV4XS5kb25lTG9jYXRpb24gPSBkb25lTG9jYXRpb247CisgICAg
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTIyOCwyOCArMjM0LDMwIEBAIHZvaWQgSklUOjpj
b21waWxlT3BDYWxsKGNvbnN0IEluc3RydWN0aW8KICAgICBpZiAoY29tcGlsZUNhbGxFdmFsKGJ5
dGVjb2RlKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgRGF0YUxhYmVsUHRyIGFkZHJlc3NPZkxp
bmtlZEZ1bmN0aW9uQ2hlY2s7Ci0gICAgSnVtcCBzbG93Q2FzZSA9IGJyYW5jaFB0cldpdGhQYXRj
aChOb3RFcXVhbCwgcmVnVDAsIGFkZHJlc3NPZkxpbmtlZEZ1bmN0aW9uQ2hlY2ssIFRydXN0ZWRJ
bW1QdHIobnVsbHB0cikpOwotICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlKTsKLQogICAgIEFTU0VS
VChtX2NhbGxDb21waWxhdGlvbkluZm8uc2l6ZSgpID09IGNhbGxMaW5rSW5mb0luZGV4KTsKICAg
ICBpbmZvLT5zZXRVcENhbGwoQ2FsbExpbmtJbmZvOjpjYWxsVHlwZUZvcihvcGNvZGVJRCksIHJl
Z1QwKTsKICAgICBtX2NhbGxDb21waWxhdGlvbkluZm8uYXBwZW5kKENhbGxDb21waWxhdGlvbklu
Zm8oKSk7Ci0gICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5ob3RQ
YXRoQmVnaW4gPSBhZGRyZXNzT2ZMaW5rZWRGdW5jdGlvbkNoZWNrOwogICAgIG1fY2FsbENvbXBp
bGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uY2FsbExpbmtJbmZvID0gaW5mbzsKIAotICAg
IGlmIChjb21waWxlVGFpbENhbGwoYnl0ZWNvZGUsIGluZm8sIGNhbGxMaW5rSW5mb0luZGV4KSkg
eworICAgIGlmIChjb21waWxlVGFpbENhbGwoYnl0ZWNvZGUsIGluZm8sIGNhbGxMaW5rSW5mb0lu
ZGV4KSkKICAgICAgICAgcmV0dXJuOwotICAgIH0KIAogICAgIGlmIChvcGNvZGVJRCA9PSBvcF90
YWlsX2NhbGxfdmFyYXJncyB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1
bWVudHMpIHsKLSAgICAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwotICAgICAgICBwcmVw
YXJlRm9yVGFpbENhbGxTbG93KCk7Ci0gICAgICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxs
TGlua0luZm9JbmRleF0uaG90UGF0aE90aGVyID0gZW1pdE5ha2VkTmVhclRhaWxDYWxsKCk7Cisg
ICAgICAgIGF1dG8gc2xvd1BhdGhzID0gaW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoKnRoaXMs
IHJlZ1QwLCByZWdUMiwgQ2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6OlllcywgWyZdIHsKKyAgICAg
ICAgICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKKyAgICAgICAgICAgIHByZXBhcmVGb3JU
YWlsQ2FsbFNsb3coR1BSSW5mbzo6cmVnVDIpOworICAgICAgICB9KTsKKyAgICAgICAgYWRkU2xv
d0Nhc2Uoc2xvd1BhdGhzKTsKKyAgICAgICAgYXV0byBkb25lTG9jYXRpb24gPSBsYWJlbCgpOwor
ICAgICAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmRvbmVMb2Nh
dGlvbiA9IGRvbmVMb2NhdGlvbjsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIG1fY2Fs
bENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uaG90UGF0aE90aGVyID0gZW1pdE5h
a2VkTmVhckNhbGwoKTsKKyAgICBhdXRvIHNsb3dQYXRocyA9IGluZm8tPmVtaXRGYXN0UGF0aCgq
dGhpcywgcmVnVDAsIHJlZ1QyLCBDYWxsTGlua0luZm86OlVzZURhdGFJQzo6WWVzKTsKKyAgICBh
dXRvIGRvbmVMb2NhdGlvbiA9IGxhYmVsKCk7CisgICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGhzKTsK
KworICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uZG9uZUxvY2F0
aW9uID0gZG9uZUxvY2F0aW9uOwogCiAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50
ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJl
Z2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgY2hlY2tTdGFja1BvaW50ZXJBbGln
bm1lbnQoKTsKQEAgLTI2NSwxNiArMjczLDE1IEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsU2xv
d0Nhc2UoY29uc3QgSW4KIAogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKKyAgICBtX2Nh
bGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLnNsb3dQYXRoU3RhcnQgPSBsYWJl
bCgpOworCiAgICAgaWYgKG9wY29kZUlEID09IG9wX3RhaWxfY2FsbCB8fCBvcGNvZGVJRCA9PSBv
cF90YWlsX2NhbGxfdmFyYXJncyB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9h
cmd1bWVudHMpCiAgICAgICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKIAogICAgIG1vdmUo
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMyk7Ci0gICAg
bW92ZShUcnVzdGVkSW1tUHRyKG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRl
eF0uY2FsbExpbmtJbmZvKSwgcmVnVDIpOwotCi0gICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2Nh
bGxMaW5rSW5mb0luZGV4XS5jYWxsUmV0dXJuTG9jYXRpb24gPQotICAgICAgICBlbWl0TmFrZWRO
ZWFyQ2FsbChtX3ZtLT5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpLnJldGFnZ2Vk
Q29kZTxOb1B0clRhZz4oKSk7CisgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5m
b0luZGV4XS5jYWxsTGlua0luZm8tPmVtaXRTbG93UGF0aCgqbV92bSwgKnRoaXMpOwogCi0gICAg
aWYgKG9wY29kZUlEID09IG9wX3RhaWxfY2FsbCB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxf
dmFyYXJncykgeworICAgIGlmIChvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGwgfHwgb3Bjb2RlSUQg
PT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX2Zvcndh
cmRfYXJndW1lbnRzKSB7CiAgICAgICAgIGFib3J0V2l0aFJlYXNvbihKSVREaWRSZXR1cm5Gcm9t
VGFpbENhbGwpOwogICAgICAgICByZXR1cm47CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAyNzc0NDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMzg2LDcgKzEzODYsNyBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uTGlu
a0NhCiAgICAgICAgICAgICBpZiAoIWNhbGxMaW5rSW5mby0+c2Vlbk9uY2UoKSkKICAgICAgICAg
ICAgICAgICBjYWxsTGlua0luZm8tPnNldFNlZW4oKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgICAgICBsaW5rRm9yKHZtLCBjYWxsZWVGcmFtZSwgKmNhbGxMaW5rSW5mbywgbnVsbHB0
ciwgaW50ZXJuYWxGdW5jdGlvbiwgY29kZVB0cik7CisgICAgICAgICAgICAgICAgbGlua01vbm9t
b3JwaGljQ2FsbCh2bSwgY2FsbGVlRnJhbWUsICpjYWxsTGlua0luZm8sIG51bGxwdHIsIGludGVy
bmFsRnVuY3Rpb24sIGNvZGVQdHIpOwogCiAgICAgICAgICAgICB2b2lkKiBsaW5rZWRUYXJnZXQg
PSBjb2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNzKCk7CiAgICAgICAgICAgICByZXR1cm4gZW5jb2Rl
UmVzdWx0KGxpbmtlZFRhcmdldCwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oY2FsbExpbmtJbmZv
LT5jYWxsTW9kZSgpID09IENhbGxNb2RlOjpUYWlsID8gUmV1c2VUaGVGcmFtZSA6IEtlZXBUaGVG
cmFtZSkpOwpAQCAtMTQzNCw3ICsxNDM0LDcgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9w
ZXJhdGlvbkxpbmtDYQogICAgIGlmICghY2FsbExpbmtJbmZvLT5zZWVuT25jZSgpKQogICAgICAg
ICBjYWxsTGlua0luZm8tPnNldFNlZW4oKTsKICAgICBlbHNlCi0gICAgICAgIGxpbmtGb3Iodm0s
IGNhbGxlZUZyYW1lLCAqY2FsbExpbmtJbmZvLCBjb2RlQmxvY2ssIGNhbGxlZSwgY29kZVB0cik7
CisgICAgICAgIGxpbmtNb25vbW9ycGhpY0NhbGwodm0sIGNhbGxlZUZyYW1lLCAqY2FsbExpbmtJ
bmZvLCBjb2RlQmxvY2ssIGNhbGxlZSwgY29kZVB0cik7CiAKICAgICByZXR1cm4gZW5jb2RlUmVz
dWx0KGNvZGVQdHIuZXhlY3V0YWJsZUFkZHJlc3MoKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4o
Y2FsbExpbmtJbmZvLT5jYWxsTW9kZSgpID09IENhbGxNb2RlOjpUYWlsID8gUmV1c2VUaGVGcmFt
ZSA6IEtlZXBUaGVGcmFtZSkpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Q
b2x5bW9ycGhpY0NhbGxTdHViUm91dGluZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9Qb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZS5jcHAJKHJldmlzaW9uIDI3
NzQ0MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUG9seW1vcnBoaWNDYWxsU3R1YlJv
dXRpbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSw3IEBAIFBvbHltb3JwaGljQ2Fs
bE5vZGU6On5Qb2x5bW9ycGhpY0NhbGxOb2QKIHZvaWQgUG9seW1vcnBoaWNDYWxsTm9kZTo6dW5s
aW5rKFZNJiB2bSkKIHsKICAgICBpZiAobV9jYWxsTGlua0luZm8pIHsKLSAgICAgICAgZGF0YUxv
Z0xuSWYoT3B0aW9uczo6ZHVtcERpc2Fzc2VtYmx5KCksICJVbmxpbmtpbmcgcG9seW1vcnBoaWMg
Y2FsbCBhdCAiLCBtX2NhbGxMaW5rSW5mby0+Y2FsbFJldHVybkxvY2F0aW9uKCksICIsIGJjIyIs
IG1fY2FsbExpbmtJbmZvLT5jb2RlT3JpZ2luKCkuYnl0ZWNvZGVJbmRleCgpKTsKKyAgICAgICAg
ZGF0YUxvZ0xuSWYoT3B0aW9uczo6ZHVtcERpc2Fzc2VtYmx5KCksICJVbmxpbmtpbmcgcG9seW1v
cnBoaWMgY2FsbCBhdCAiLCBtX2NhbGxMaW5rSW5mby0+ZG9uZUxvY2F0aW9uKCksICIsIGJjIyIs
IG1fY2FsbExpbmtJbmZvLT5jb2RlT3JpZ2luKCkuYnl0ZWNvZGVJbmRleCgpKTsKICAgICAgICAg
bV9jYWxsTGlua0luZm8tPnVubGluayh2bSk7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHJldmlzaW9uIDI3NzQ0MCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDggQEAK
IAogI2lmIEVOQUJMRShKSVQpCiAKKyNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlclByaW50ZXIuaCIK
KwogI2luY2x1ZGUgIkJpbmFyeVN3aXRjaC5oIgogI2luY2x1ZGUgIkNDYWxsSGVscGVycy5oIgog
I2luY2x1ZGUgIkNhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmgiCkBAIC0xMTg4LDIwICsxMTkw
LDIwIEBAIHZvaWQgcmVwYXRjaEluc3RhbmNlT2YoCiAgICAgICAgIGZ0bFRodW5rQXdhcmVSZXBh
dGNoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLnNsb3dQYXRoQ2FsbExvY2F0aW9uLCBvcGVyYXRp
b25JbnN0YW5jZU9mR2VuZXJpYyk7CiB9CiAKLXN0YXRpYyB2b2lkIGxpbmtTbG93Rm9yKFZNJiwg
Q2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8sIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRTdHVi
Um91dGluZVB0clRhZz4gY29kZVJlZikKK3N0YXRpYyB2b2lkIGxpbmtTbG93UGF0aFRvKFZNJiwg
Q2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8sIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRTdHVi
Um91dGluZVB0clRhZz4gY29kZVJlZikKIHsKLSAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaE5l
YXJDYWxsKGNhbGxMaW5rSW5mby5jYWxsUmV0dXJuTG9jYXRpb24oKSwgQ29kZUxvY2F0aW9uTGFi
ZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+KGNvZGVSZWYuY29kZSgpKSk7CisgICAgY2FsbExpbmtJ
bmZvLnNldFNsb3dQYXRoQ2FsbERlc3RpbmF0aW9uKGNvZGVSZWYuY29kZSgpLnRlbXBsYXRlIHJl
dGFnZ2VkPEpTRW50cnlQdHJUYWc+KCkpOwogfQogCi1zdGF0aWMgdm9pZCBsaW5rU2xvd0ZvcihW
TSYgdm0sIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvLCBUaHVua0dlbmVyYXRvciBnZW5lcmF0
b3IpCitzdGF0aWMgdm9pZCBsaW5rU2xvd1BhdGhUbyhWTSYgdm0sIENhbGxMaW5rSW5mbyYgY2Fs
bExpbmtJbmZvLCBUaHVua0dlbmVyYXRvciBnZW5lcmF0b3IpCiB7Ci0gICAgbGlua1Nsb3dGb3Io
dm0sIGNhbGxMaW5rSW5mbywgdm0uZ2V0Q1RJU3R1YihnZW5lcmF0b3IpLnJldGFnZ2VkPEpJVFN0
dWJSb3V0aW5lUHRyVGFnPigpKTsKKyAgICBsaW5rU2xvd1BhdGhUbyh2bSwgY2FsbExpbmtJbmZv
LCB2bS5nZXRDVElTdHViKGdlbmVyYXRvcikucmV0YWdnZWQ8SklUU3R1YlJvdXRpbmVQdHJUYWc+
KCkpOwogfQogCiBzdGF0aWMgdm9pZCBsaW5rU2xvd0ZvcihWTSYgdm0sIENhbGxMaW5rSW5mbyYg
Y2FsbExpbmtJbmZvKQogewogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRTdHViUm91dGlu
ZVB0clRhZz4gdmlydHVhbFRodW5rID0gdmlydHVhbFRodW5rRm9yKHZtLCBjYWxsTGlua0luZm8p
OwotICAgIGxpbmtTbG93Rm9yKHZtLCBjYWxsTGlua0luZm8sIHZpcnR1YWxUaHVuayk7CisgICAg
bGlua1Nsb3dQYXRoVG8odm0sIGNhbGxMaW5rSW5mbywgdmlydHVhbFRodW5rKTsKICAgICBjYWxs
TGlua0luZm8uc2V0U2xvd1N0dWIoR0NBd2FyZUpJVFN0dWJSb3V0aW5lOjpjcmVhdGUodmlydHVh
bFRodW5rLCB2bSkpOwogfQogCkBAIC0xMjE3LDcgKzEyMTksNyBAQCBzdGF0aWMgSlNDZWxsKiB3
ZWJBc3NlbWJseU93bmVyKEpTQ2VsbCogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQog
fQogCi12b2lkIGxpbmtGb3IoCit2b2lkIGxpbmtNb25vbW9ycGhpY0NhbGwoCiAgICAgVk0mIHZt
LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8sIENvZGVC
bG9jayogY2FsbGVlQ29kZUJsb2NrLAogICAgIEpTT2JqZWN0KiBjYWxsZWUsIE1hY3JvQXNzZW1i
bGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBjb2RlUHRyKQogewpAQCAtMTIzNSwyNiArMTIzNywy
NCBAQCB2b2lkIGxpbmtGb3IoCiAgICAgQVNTRVJUKG93bmVyKTsKIAogICAgIEFTU0VSVCghY2Fs
bExpbmtJbmZvLmlzTGlua2VkKCkpOwotICAgIGNhbGxMaW5rSW5mby5zZXRDYWxsZWUodm0sIG93
bmVyLCBjYWxsZWUpOwotICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoUG9pbnRlcihjYWxsTGlu
a0luZm8uaG90UGF0aEJlZ2luKCksIGNhbGxlZSk7CisgICAgY2FsbExpbmtJbmZvLnNldE1vbm9t
b3JwaGljQ2FsbGVlKHZtLCBvd25lciwgY2FsbGVlLCBjb2RlUHRyKTsKICAgICBjYWxsTGlua0lu
Zm8uc2V0TGFzdFNlZW5DYWxsZWUodm0sIG93bmVyLCBjYWxsZWUpOworCiAgICAgaWYgKHNob3Vs
ZER1bXBEaXNhc3NlbWJseUZvcihjYWxsZXJDb2RlQmxvY2spKQogICAgICAgICBkYXRhTG9nKCJM
aW5raW5nIGNhbGwgaW4gIiwgRnVsbENvZGVPcmlnaW4oY2FsbGVyQ29kZUJsb2NrLCBjYWxsTGlu
a0luZm8uY29kZU9yaWdpbigpKSwgIiB0byAiLCBwb2ludGVyRHVtcChjYWxsZWVDb2RlQmxvY2sp
LCAiLCBlbnRyeXBvaW50IGF0ICIsIGNvZGVQdHIsICJcbiIpOwogCi0gICAgTWFjcm9Bc3NlbWJs
ZXI6OnJlcGF0Y2hOZWFyQ2FsbChjYWxsTGlua0luZm8uaG90UGF0aE90aGVyKCksIENvZGVMb2Nh
dGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+KGNvZGVQdHIpKTsKLQogICAgIGlmIChjYWxsZWVDb2Rl
QmxvY2spCiAgICAgICAgIGNhbGxlZUNvZGVCbG9jay0+bGlua0luY29taW5nQ2FsbChjYWxsZXJG
cmFtZSwgJmNhbGxMaW5rSW5mbyk7CiAKICAgICBpZiAoY2FsbExpbmtJbmZvLnNwZWNpYWxpemF0
aW9uS2luZCgpID09IENvZGVGb3JDYWxsICYmIGNhbGxMaW5rSW5mby5hbGxvd1N0dWJzKCkpIHsK
LSAgICAgICAgbGlua1Nsb3dGb3Iodm0sIGNhbGxMaW5rSW5mbywgbGlua1BvbHltb3JwaGljQ2Fs
bFRodW5rR2VuZXJhdG9yKTsKKyAgICAgICAgbGlua1Nsb3dQYXRoVG8odm0sIGNhbGxMaW5rSW5m
bywgbGlua1BvbHltb3JwaGljQ2FsbFRodW5rR2VuZXJhdG9yKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KICAgICAKICAgICBsaW5rU2xvd0Zvcih2bSwgY2FsbExpbmtJbmZvKTsKIH0KIAotdm9p
ZCBsaW5rRGlyZWN0Rm9yKAordm9pZCBsaW5rRGlyZWN0Q2FsbCgKICAgICBDYWxsRnJhbWUqIGNh
bGxGcmFtZSwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8sIENvZGVCbG9jayogY2FsbGVlQ29k
ZUJsb2NrLAogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBjb2RlUHRy
KQogewpAQCAtMTI2OSw5ICsxMjY5LDcgQEAgdm9pZCBsaW5rRGlyZWN0Rm9yKAogICAgIGlmIChz
aG91bGREdW1wRGlzYXNzZW1ibHlGb3IoY2FsbGVyQ29kZUJsb2NrKSkKICAgICAgICAgZGF0YUxv
ZygiTGlua2luZyBjYWxsIGluICIsIEZ1bGxDb2RlT3JpZ2luKGNhbGxlckNvZGVCbG9jaywgY2Fs
bExpbmtJbmZvLmNvZGVPcmlnaW4oKSksICIgdG8gIiwgcG9pbnRlckR1bXAoY2FsbGVlQ29kZUJs
b2NrKSwgIiwgZW50cnlwb2ludCBhdCAiLCBjb2RlUHRyLCAiXG4iKTsKIAotICAgIGlmIChjYWxs
TGlua0luZm8uY2FsbFR5cGUoKSA9PSBDYWxsTGlua0luZm86OkRpcmVjdFRhaWxDYWxsKQotICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEp1bXBUb05vcChjYWxsTGlua0luZm8ucGF0Y2hh
YmxlSnVtcCgpKTsKLSAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaE5lYXJDYWxsKGNhbGxMaW5r
SW5mby5ob3RQYXRoT3RoZXIoKSwgQ29kZUxvY2F0aW9uTGFiZWw8SlNFbnRyeVB0clRhZz4oY29k
ZVB0cikpOworICAgIGNhbGxMaW5rSW5mby5zZXREaXJlY3RDYWxsVGFyZ2V0KENvZGVMb2NhdGlv
bkxhYmVsPEpTRW50cnlQdHJUYWc+KGNvZGVQdHIpKTsKIAogICAgIGlmIChjYWxsZWVDb2RlQmxv
Y2spCiAgICAgICAgIGNhbGxlZUNvZGVCbG9jay0+bGlua0luY29taW5nQ2FsbChjYWxsRnJhbWUs
ICZjYWxsTGlua0luZm8pOwpAQCAtMTI4OSwyMSArMTI4NywxNiBAQCBzdGF0aWMgdm9pZCByZXZl
cnRDYWxsKFZNJiB2bSwgQ2FsbExpbmtJCiB7CiAgICAgaWYgKGNhbGxMaW5rSW5mby5pc0RpcmVj
dCgpKSB7CiAgICAgICAgIGNhbGxMaW5rSW5mby5jbGVhckNvZGVCbG9jaygpOwotICAgICAgICBp
ZiAoIWNhbGxMaW5rSW5mby5jbGVhcmVkQnlKZXR0aXNvbigpKSB7Ci0gICAgICAgICAgICBpZiAo
Y2FsbExpbmtJbmZvLmNhbGxUeXBlKCkgPT0gQ2FsbExpbmtJbmZvOjpEaXJlY3RUYWlsQ2FsbCkK
LSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEp1bXAoY2FsbExpbmtJbmZv
LnBhdGNoYWJsZUp1bXAoKSwgY2FsbExpbmtJbmZvLnNsb3dQYXRoU3RhcnQoKSk7Ci0gICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hOZWFyQ2Fs
bChjYWxsTGlua0luZm8uaG90UGF0aE90aGVyKCksIGNhbGxMaW5rSW5mby5zbG93UGF0aFN0YXJ0
KCkpOwotICAgICAgICB9CisgICAgICAgIGlmICghY2FsbExpbmtJbmZvLmNsZWFyZWRCeUpldHRp
c29uKCkpCisgICAgICAgICAgICBjYWxsTGlua0luZm8uaW5pdGlhbGl6ZURpcmVjdENhbGwoKTsK
ICAgICB9IGVsc2UgewogICAgICAgICBpZiAoIWNhbGxMaW5rSW5mby5jbGVhcmVkQnlKZXR0aXNv
bigpKSB7Ci0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmV2ZXJ0SnVtcFJlcGxhY2VtZW50
VG9CcmFuY2hQdHJXaXRoUGF0Y2goCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnN0
YXJ0T2ZCcmFuY2hQdHJXaXRoUGF0Y2hPblJlZ2lzdGVyKGNhbGxMaW5rSW5mby5ob3RQYXRoQmVn
aW4oKSksCi0gICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLmNhbGxlZUdQUigpLCBudWxscHRy
KTsKLSAgICAgICAgICAgIGxpbmtTbG93Rm9yKHZtLCBjYWxsTGlua0luZm8sIGNvZGVSZWYpOwot
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hQb2ludGVyKGNhbGxMaW5rSW5mby5o
b3RQYXRoQmVnaW4oKSwgbnVsbHB0cik7CisgICAgICAgICAgICBsaW5rU2xvd1BhdGhUbyh2bSwg
Y2FsbExpbmtJbmZvLCBjb2RlUmVmKTsKKworICAgICAgICAgICAgaWYgKGNhbGxMaW5rSW5mby5z
dHViKCkpCisgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLnJldmVydENhbGxUb1N0dWIoKTsK
ICAgICAgICAgfQotICAgICAgICBjYWxsTGlua0luZm8uY2xlYXJDYWxsZWUoKTsKKyAgICAgICAg
Y2FsbExpbmtJbmZvLmNsZWFyQ2FsbGVlKCk7IC8vIFRoaXMgYWxzbyBjbGVhcnMgdGhlIGlubGlu
ZSBjYWNoZSBib3RoIGZvciBkYXRhIGFuZCBjb2RlLWJhc2VkIGNhY2hlcy4KICAgICB9CiAgICAg
Y2FsbExpbmtJbmZvLmNsZWFyU2VlbigpOwogICAgIGNhbGxMaW5rSW5mby5jbGVhclN0dWIoKTsK
QEAgLTEzMTIsOSArMTMwNSw5IEBAIHN0YXRpYyB2b2lkIHJldmVydENhbGwoVk0mIHZtLCBDYWxs
TGlua0kKICAgICAgICAgY2FsbExpbmtJbmZvLnJlbW92ZSgpOwogfQogCi12b2lkIHVubGlua0Zv
cihWTSYgdm0sIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvKQordm9pZCB1bmxpbmtDYWxsKFZN
JiB2bSwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8pCiB7Ci0gICAgZGF0YUxvZ0xuSWYoT3B0
aW9uczo6ZHVtcERpc2Fzc2VtYmx5KCksICJVbmxpbmtpbmcgY2FsbCBhdCAiLCBjYWxsTGlua0lu
Zm8uaG90UGF0aE90aGVyKCkpOworICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OmR1bXBEaXNhc3Nl
bWJseSgpLCAiVW5saW5raW5nIGNhbGwgYXQgIiwgY2FsbExpbmtJbmZvLmZhc3RQYXRoU3RhcnQo
KSk7CiAgICAgCiAgICAgcmV2ZXJ0Q2FsbCh2bSwgY2FsbExpbmtJbmZvLCB2bS5nZXRDVElTdHVi
KGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpLnJldGFnZ2VkPEpJVFN0dWJSb3V0aW5lUHRyVGFnPigp
KTsKIH0KQEAgLTE1ODAsNyArMTU3Myw3IEBAIHZvaWQgbGlua1BvbHltb3JwaGljQ2FsbChKU0ds
b2JhbE9iamVjdCoKICAgICB9CiAgICAgc3R1YkppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3Rl
ZEltbVB0cihnbG9iYWxPYmplY3QpLCBHUFJJbmZvOjpyZWdUMyk7CiAgICAgc3R1YkppdC5tb3Zl
KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cigmY2FsbExpbmtJbmZvKSwgR1BSSW5mbzo6cmVn
VDIpOwotICAgIHN0dWJKaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoY2FsbExp
bmtJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbigpLnVudGFnZ2VkRXhlY3V0YWJsZUFkZHJlc3MoKSks
IEdQUkluZm86OnJlZ1Q0KTsKKyAgICBzdHViSml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tUHRyKGNhbGxMaW5rSW5mby5kb25lTG9jYXRpb24oKS51bnRhZ2dlZEV4ZWN1dGFibGVBZGRy
ZXNzKCkpLCBHUFJJbmZvOjpyZWdUNCk7CiAgICAgCiAgICAgc3R1YkppdC5yZXN0b3JlUmV0dXJu
QWRkcmVzc0JlZm9yZVJldHVybihHUFJJbmZvOjpyZWdUNCk7CiAgICAgQXNzZW1ibHlIZWxwZXJz
OjpKdW1wIHNsb3cgPSBzdHViSml0Lmp1bXAoKTsKQEAgLTE2MDMsMjkgKzE1OTYsMjMgQEAgdm9p
ZCBsaW5rUG9seW1vcnBoaWNDYWxsKEpTR2xvYmFsT2JqZWN0KgogICAgICAgICBwYXRjaEJ1ZmZl
ci5saW5rKGNhbGxUb0NvZGVQdHIuY2FsbCwgRnVuY3Rpb25QdHI8SlNFbnRyeVB0clRhZz4oY2Fs
bFRvQ29kZVB0ci5jb2RlUHRyKSk7CiAjZW5kaWYKICAgICB9Ci0gICAgaWYgKGlzV2ViQXNzZW1i
bHkgfHwgSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGNhbGxlckNvZGVCbG9jay0+aml0VHlwZSgp
KSkKLSAgICAgICAgcGF0Y2hCdWZmZXIubGluayhkb25lLCBjYWxsTGlua0luZm8uY2FsbFJldHVy
bkxvY2F0aW9uKCkubGFiZWxBdE9mZnNldCgwKSk7Ci0gICAgZWxzZQotICAgICAgICBwYXRjaEJ1
ZmZlci5saW5rKGRvbmUsIGNhbGxMaW5rSW5mby5ob3RQYXRoT3RoZXIoKS5sYWJlbEF0T2Zmc2V0
KDApKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKGRvbmUsIGNhbGxMaW5rSW5mby5kb25lTG9jYXRp
b24oKSk7CiAgICAgcGF0Y2hCdWZmZXIubGluayhzbG93LCBDb2RlTG9jYXRpb25MYWJlbDxKSVRU
aHVua1B0clRhZz4odm0uZ2V0Q1RJU3R1YihsaW5rUG9seW1vcnBoaWNDYWxsVGh1bmtHZW5lcmF0
b3IpLmNvZGUoKSkpOwogICAgIAogICAgIGF1dG8gc3R1YlJvdXRpbmUgPSBhZG9wdFJlZigqbmV3
IFBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lKAogICAgICAgICBGSU5BTElaRV9DT0RFX0ZPUigK
ICAgICAgICAgICAgIGNhbGxlckNvZGVCbG9jaywgcGF0Y2hCdWZmZXIsIEpJVFN0dWJSb3V0aW5l
UHRyVGFnLAogICAgICAgICAgICAgIlBvbHltb3JwaGljIGNhbGwgc3R1YiBmb3IgJXMsIHJldHVy
biBwb2ludCAlcCwgdGFyZ2V0cyAlcyIsCi0gICAgICAgICAgICAgICAgaXNXZWJBc3NlbWJseSA/
ICJXZWJBc3NlbWJseSIgOiB0b0NTdHJpbmcoKmNhbGxlckNvZGVCbG9jaykuZGF0YSgpLCBjYWxs
TGlua0luZm8uY2FsbFJldHVybkxvY2F0aW9uKCkubGFiZWxBdE9mZnNldCgwKS5leGVjdXRhYmxl
QWRkcmVzcygpLAorICAgICAgICAgICAgICAgIGlzV2ViQXNzZW1ibHkgPyAiV2ViQXNzZW1ibHki
IDogdG9DU3RyaW5nKCpjYWxsZXJDb2RlQmxvY2spLmRhdGEoKSwgY2FsbExpbmtJbmZvLmRvbmVM
b2NhdGlvbigpLmV4ZWN1dGFibGVBZGRyZXNzKCksCiAgICAgICAgICAgICAgICAgdG9DU3RyaW5n
KGxpc3REdW1wKGNhbGxDYXNlcykpLmRhdGEoKSksCiAgICAgICAgIHZtLCBvd25lciwgY2FsbEZy
YW1lLT5jYWxsZXJGcmFtZSgpLCBjYWxsTGlua0luZm8sIGNhbGxDYXNlcywKICAgICAgICAgV1RG
TW92ZShmYXN0Q291bnRzKSkpOwotICAgIAotICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBsYWNlV2l0
aEp1bXAoCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpzdGFydE9mQnJhbmNoUHRyV2l0aFBhdGNo
T25SZWdpc3RlcihjYWxsTGlua0luZm8uaG90UGF0aEJlZ2luKCkpLAotICAgICAgICBDb2RlTG9j
YXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4oc3R1YlJvdXRpbmUtPmNvZGUoKS5jb2Rl
KCkpKTsKKwogICAgIC8vIFRoZSBvcmlnaW5hbCBzbG93IHBhdGggaXMgdW5yZWFjaGFibGUgb24g
NjQtYml0cywgYnV0IHN0aWxsCiAgICAgLy8gcmVhY2hhYmxlIG9uIDMyLWJpdHMgc2luY2UgYSBu
b24tY2VsbCBjYWxsZWUgd2lsbCBhbHdheXMKICAgICAvLyB0cmlnZ2VyIHRoZSBzbG93IHBhdGgK
ICAgICBsaW5rU2xvd0Zvcih2bSwgY2FsbExpbmtJbmZvKTsKLSAgICAKKwogICAgIC8vIElmIHRo
ZXJlIGhhZCBiZWVuIGEgcHJldmlvdXMgc3R1YiByb3V0aW5lLCB0aGF0IG9uZSB3aWxsIGRpZSBh
cyBzb29uIGFzIHRoZSBHQyBydW5zIGFuZCBzZWVzCiAgICAgLy8gdGhhdCBpdCdzIG5vIGxvbmdl
ciBvbiBzdGFjay4KICAgICBjYWxsTGlua0luZm8uc2V0U3R1YihXVEZNb3ZlKHN0dWJSb3V0aW5l
KSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guaAkocmV2aXNpb24gMjc3NDQw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmgJKHdvcmtpbmcgY29weSkK
QEAgLTU2LDEwICs1NiwxMCBAQCB2b2lkIHJlcGF0Y2hJbkJ5SUQoSlNHbG9iYWxPYmplY3QqLCBD
b2RlCiB2b2lkIHJlcGF0Y2hDaGVja1ByaXZhdGVCcmFuZChKU0dsb2JhbE9iamVjdCosIENvZGVC
bG9jayosIEpTT2JqZWN0KiwgQ2FjaGVhYmxlSWRlbnRpZmllciwgU3RydWN0dXJlU3R1YkluZm8m
KTsKIHZvaWQgcmVwYXRjaFNldFByaXZhdGVCcmFuZChKU0dsb2JhbE9iamVjdCosIENvZGVCbG9j
ayosIEpTT2JqZWN0KiwgU3RydWN0dXJlKiwgQ2FjaGVhYmxlSWRlbnRpZmllciwgU3RydWN0dXJl
U3R1YkluZm8mKTsKIHZvaWQgcmVwYXRjaEluc3RhbmNlT2YoSlNHbG9iYWxPYmplY3QqLCBDb2Rl
QmxvY2sqLCBKU1ZhbHVlIHZhbHVlLCBKU1ZhbHVlIHByb3RvdHlwZSwgU3RydWN0dXJlU3R1Yklu
Zm8mLCBib29sIHdhc0ZvdW5kKTsKLXZvaWQgbGlua0ZvcihWTSYsIENhbGxGcmFtZSosIENhbGxM
aW5rSW5mbyYsIENvZGVCbG9jayosIEpTT2JqZWN0KiBjYWxsZWUsIE1hY3JvQXNzZW1ibGVyQ29k
ZVB0cjxKU0VudHJ5UHRyVGFnPik7Ci12b2lkIGxpbmtEaXJlY3RGb3IoQ2FsbEZyYW1lKiwgQ2Fs
bExpbmtJbmZvJiwgQ29kZUJsb2NrKiwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJU
YWc+KTsKK3ZvaWQgbGlua01vbm9tb3JwaGljQ2FsbChWTSYsIENhbGxGcmFtZSosIENhbGxMaW5r
SW5mbyYsIENvZGVCbG9jayosIEpTT2JqZWN0KiBjYWxsZWUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0
cjxKU0VudHJ5UHRyVGFnPik7Cit2b2lkIGxpbmtEaXJlY3RDYWxsKENhbGxGcmFtZSosIENhbGxM
aW5rSW5mbyYsIENvZGVCbG9jayosIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFn
Pik7CiB2b2lkIGxpbmtTbG93Rm9yKENhbGxGcmFtZSosIENhbGxMaW5rSW5mbyYpOwotdm9pZCB1
bmxpbmtGb3IoVk0mLCBDYWxsTGlua0luZm8mKTsKK3ZvaWQgdW5saW5rQ2FsbChWTSYsIENhbGxM
aW5rSW5mbyYpOwogdm9pZCBsaW5rUG9seW1vcnBoaWNDYWxsKEpTR2xvYmFsT2JqZWN0KiwgQ2Fs
bEZyYW1lKiwgQ2FsbExpbmtJbmZvJiwgQ2FsbFZhcmlhbnQpOwogdm9pZCByZXNldEdldEJ5KENv
ZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJiwgR2V0QnlLaW5kKTsKIHZvaWQgcmVzZXRQdXRC
eUlEKENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJik7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcAkocmV2aXNpb24gMjc3NDQwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYw
Nyw5ICs2MDcsOSBAQCB2b2lkIE9wdGlvbnM6OmluaXRpYWxpemUoKQogICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlQoT3B0aW9uczo6YWRkcmVzc09mT3B0aW9uKGZvcmNlT1NSRXhpdFRvTExJbnRJ
RCkgPT0gICZPcHRpb25zOjpmb3JjZU9TUkV4aXRUb0xMSW50KCkpOwogICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlQoT3B0aW9uczo6YWRkcmVzc09mT3B0aW9uRGVmYXVsdChmb3JjZU9TUkV4aXRU
b0xMSW50SUQpID09ICAmT3B0aW9uczo6Zm9yY2VPU1JFeGl0VG9MTEludERlZmF1bHQoKSk7CiAK
LSNpZm5kZWYgTkRFQlVHCisvLyNpZm5kZWYgTkRFQlVHCiAgICAgICAgICAgICBDb25maWc6OmVu
YWJsZVJlc3RyaWN0ZWRPcHRpb25zKCk7Ci0jZW5kaWYKKy8vI2VuZGlmCiAgICAgICAgICAgICAv
LyBJbml0aWFsaXplIGVhY2ggb2YgdGhlIG9wdGlvbnMgd2l0aCB0aGVpciBkZWZhdWx0IHZhbHVl
czoKICNkZWZpbmUgSU5JVF9PUFRJT04odHlwZV8sIG5hbWVfLCBkZWZhdWx0VmFsdWVfLCBhdmFp
bGFiaWxpdHlfLCBkZXNjcmlwdGlvbl8pIHsgXAogICAgICAgICAgICAgICAgIGF1dG8gdmFsdWUg
PSBkZWZhdWx0VmFsdWVfOyBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9W
TS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3Bw
CShyZXZpc2lvbiAyNzc0NDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE3MTYsNCArMTcxNiw2IEBAIHZvaWQgVk06OnJlbW92ZUxv
b3BIaW50RXhlY3V0aW9uQ291bnRlcigKICAgICAgICAgbV9sb29wSGludEV4ZWN1dGlvbkNvdW50
cy5yZW1vdmUoaXRlcik7CiB9CiAKK3VpbnQ2NF90IGdfbnVtYmVyT2ZPU1JFeGl0czsKKwogfSAv
LyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XYXNt
VG9KUy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2Fz
bVRvSlMuY3BwCShyZXZpc2lvbiAyNzc0NDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9XYXNtVG9KUy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2MSwxOSArMjYxLDE4IEBAIEV4
cGVjdGVkPE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxXYXNtRW50cnkKIAogICAgIENhbGxMaW5rSW5m
byogY2FsbExpbmtJbmZvID0gY2FsbExpbmtJbmZvcy5hZGQoQ29kZU9yaWdpbigpKTsKICAgICBj
YWxsTGlua0luZm8tPnNldFVwQ2FsbChDYWxsTGlua0luZm86OkNhbGwsIGltcG9ydEpTQ2VsbEdQ
UlJlZyk7Ci0gICAgSklUOjpEYXRhTGFiZWxQdHIgdGFyZ2V0VG9DaGVjazsKLSAgICBKSVQ6OlRy
dXN0ZWRJbW1QdHIgaW5pdGlhbFJpZ2h0VmFsdWUobnVsbHB0cik7Ci0gICAgSklUOjpKdW1wIHNs
b3dQYXRoID0gaml0LmJyYW5jaFB0cldpdGhQYXRjaChNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWws
IGltcG9ydEpTQ2VsbEdQUlJlZywgdGFyZ2V0VG9DaGVjaywgaW5pdGlhbFJpZ2h0VmFsdWUpOwot
ICAgIEpJVDo6Q2FsbCBmYXN0Q2FsbCA9IGppdC5uZWFyQ2FsbCgpOworICAgIGF1dG8gc2xvd1Bh
dGggPSBjYWxsTGlua0luZm8tPmVtaXRGYXN0UGF0aChqaXQsIGltcG9ydEpTQ2VsbEdQUlJlZywg
SW52YWxpZEdQUlJlZywgQ2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6Ok5vKTsKKwogICAgIEpJVDo6
SnVtcCBkb25lID0gaml0Lmp1bXAoKTsKICAgICBzbG93UGF0aC5saW5rKCZqaXQpOworICAgIGF1
dG8gc2xvd1BhdGhTdGFydCA9IGppdC5sYWJlbCgpOwogICAgIC8vIENhbGxlZSBuZWVkcyB0byBi
ZSBpbiByZWdUMCBoZXJlLgotICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
UHRyKGNhbGxMaW5rSW5mbyksIEdQUkluZm86OnJlZ1QyKTsgLy8gTGluayBpbmZvIG5lZWRzIHRv
IGJlIGluIHJlZ1QyLgogICAgIGppdC5sb2FkV2FzbUNvbnRleHRJbnN0YW5jZShHUFJJbmZvOjpy
ZWdUMyk7CiAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJl
Z1QzLCBJbnN0YW5jZTo6b2Zmc2V0T2ZPd25lcigpKSwgR1BSSW5mbzo6cmVnVDMpOwogICAgIGpp
dC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMywgSlNXZWJBc3Nl
bWJseUluc3RhbmNlOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgR1BSSW5mbzo6cmVnVDMpOwot
ICAgIEpJVDo6Q2FsbCBzbG93Q2FsbCA9IGppdC5uZWFyQ2FsbCgpOworICAgIGNhbGxMaW5rSW5m
by0+ZW1pdFNsb3dQYXRoKHZtLCBqaXQpOwogICAgIGRvbmUubGluaygmaml0KTsKKyAgICBhdXRv
IGRvbmVMb2NhdGlvbiA9IGppdC5sYWJlbCgpOwogCiAgICAgaWYgKHNpZ25hdHVyZS5yZXR1cm5D
b3VudCgpID09IDEpIHsKICAgICAgICAgc3dpdGNoIChzaWduYXR1cmUucmV0dXJuVHlwZSgwKS5r
aW5kKSB7CkBAIC00MjEsMTEgKzQyMCw5IEBAIEV4cGVjdGVkPE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxXYXNtRW50cnkKICAgICBpZiAoVU5MSUtFTFkocGF0Y2hCdWZmZXIuZGlkRmFpbFRvQWxsb2Nh
dGUoKSkpCiAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChCaW5kaW5nRmFpbHVyZTo6T3V0
T2ZNZW1vcnkpOwogCi0gICAgcGF0Y2hCdWZmZXIubGluayhzbG93Q2FsbCwgRnVuY3Rpb25QdHI8
SklUVGh1bmtQdHJUYWc+KHZtLmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcikuY29k
ZSgpKSk7Ci0gICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gY2FsbFJldHVy
bkxvY2F0aW9uKHBhdGNoQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxKU0ludGVybmFsUHRyVGFn
PihzbG93Q2FsbCkpOwotICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IGhv
dFBhdGhCZWdpbihwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KHRhcmdl
dFRvQ2hlY2spKTsKLSAgICBDb2RlTG9jYXRpb25OZWFyQ2FsbDxKU0ludGVybmFsUHRyVGFnPiBo
b3RQYXRoT3RoZXIgPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8SlNJbnRlcm5hbFB0
clRhZz4oZmFzdENhbGwpOwotICAgIGNhbGxMaW5rSW5mby0+c2V0Q2FsbExvY2F0aW9ucyhjYWxs
UmV0dXJuTG9jYXRpb24sIGhvdFBhdGhCZWdpbiwgaG90UGF0aE90aGVyKTsKKyAgICBjYWxsTGlu
a0luZm8tPnNldENvZGVMb2NhdGlvbnMoCisgICAgICAgICAgICBwYXRjaEJ1ZmZlci5sb2NhdGlv
bk9mPEpTSW50ZXJuYWxQdHJUYWc+KHNsb3dQYXRoU3RhcnQpLAorICAgICAgICAgICAgcGF0Y2hC
dWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihkb25lTG9jYXRpb24pKTsKIAogICAg
IHJldHVybiBGSU5BTElaRV9XQVNNX0NPREUocGF0Y2hCdWZmZXIsIFdhc21FbnRyeVB0clRhZywg
IldlYkFzc2VtYmx5LT5KYXZhU2NyaXB0IGltcG9ydFslaV0gJXMiLCBpbXBvcnRJbmRleCwgc2ln
bmF0dXJlLnRvU3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkpOwogfQo=
</data>
<flag name="commit-queue"
          id="449470"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>428581</attachid>
            <date>2021-05-13 17:12:15 -0700</date>
            <delta_ts>2021-05-13 17:13:50 -0700</delta_ts>
            <desc>patch</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>90553</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjc3NDUzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyMiBA
QAorMjAyMS0wNS0xMyAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KKworICAgICAg
ICBBZGQgRGF0YSBDYWxsIElDcyB0aGF0IGRvbid0IHJlcGF0Y2ggYW5kIHVzZSB0aGVtIGluIHRo
ZSBiYXNlbGluZSBKSVQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIyNTMyMQorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNzc3NzM3OTY+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBhZGRz
IERhdGEgSUNzIGZvciBjYWxscy4gRGF0YSBJQ3MgZm9yIGNhbGxzIHdvcmsgYnkgbG9hZGluZyBh
IGNvZGUgCisgICAgICAgIHBvaW50ZXIgZnJvbSBDYWxsTGlua0luZm8sIGFuZCBpbmRyZWN0IGNh
bGxpbmcgdGhhdCBwb2ludGVyLiBUaGlzIG1lYW5zIHRoYXQKKyAgICAgICAgdG8gcmVwYXRjaCBz
dWNoIGFuIElDLCBhbGwgd2UgbmVlZCB0byBkbyBpcyByZXBsYWNlIGEgY29kZSBwb2ludGVyIGlu
c2lkZQorICAgICAgICBDYWxsTGlua0luZm8uIE5vIG5lZWQgdG8gcmVwYXRjaCB0aGUgSklUIGNv
ZGUuCisgICAgICAgIAorICAgICAgICBUaGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBvbmx5IGRv
ZXMgdGhpcyBmb3IgbW9ub21vcnBoaWMgY2FsbHMuIFdlIHN0aWxsCisgICAgICAgIHJlcGF0Y2gg
dGhlIEpJVCBjb2RlIGZvciBwb2x5bW9ycGhpYyBjYWxscy4gSW4gYSBmb2xsb3d1cCwgd2Ugd2ls
bCBhbHNvCisgICAgICAgIG9wdCBwb2x5bW9ycGhpYyBjYWxsIElDcyBpbnRvIGRhdGEtYmFzZWQg
Y2FsbHM6CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
MjU3OTMKKyAgICAgICAgCisgICAgICAgIFRoaXMgcGF0Y2ggb25seSB1c2VzIERhdGEgQ2FsbCBJ
Q3MgZm9yIHRoZSBCYXNlbGluZSBKSVQuIEV2ZW4gd2l0aCB0aGF0LCBpdAorICAgICAgICByZWR1
Y2VzIHRoZSBudW1iZXIgb2YgY2FsbHMgdG8gY2FjaGVGbHVzaCBieSB+NDUlIG9uIEpldFN0cmVh
bTIuCisKKyAgICAgICAgKiBhc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oOgorICAg
ICAgICAoSlNDOjpBYnN0cmFjdE1hY3JvQXNzZW1ibGVyOjphZGRMYXRlTGlua1Rhc2spOgorICAg
ICAgICAqIGFzc2VtYmxlci9MaW5rQnVmZmVyLmNwcDoKKyAgICAgICAgKEpTQzo6TGlua0J1ZmZl
cjo6bGlua0NvZGUpOgorICAgICAgICAoSlNDOjpMaW5rQnVmZmVyOjpwZXJmb3JtRmluYWxpemF0
aW9uKToKKyAgICAgICAgKiBhc3NlbWJsZXIvTGlua0J1ZmZlci5oOgorICAgICAgICAqIGJ5dGVj
b2RlL0FjY2Vzc0Nhc2UuY3BwOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpnZW5lcmF0ZUlt
cGwpOgorICAgICAgICAqIGJ5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHA6CisgICAgICAgIChKU0M6
OkNhbGxMaW5rSW5mbzo6Q2FsbExpbmtJbmZvKToKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtJbmZv
Ojp1bmxpbmspOgorICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86OmZhc3RQYXRoU3RhcnQpOgor
ICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86OnNsb3dQYXRoU3RhcnQpOgorICAgICAgICAoSlND
OjpDYWxsTGlua0luZm86OmRvbmVMb2NhdGlvbik6CisgICAgICAgIChKU0M6OkNhbGxMaW5rSW5m
bzo6c2V0TW9ub21vcnBoaWNDYWxsZWUpOgorICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86OmNs
ZWFyQ2FsbGVlKToKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtJbmZvOjplbWl0Rmlyc3RJbnN0cnVj
dGlvbkZvckRhdGFJQyk6CisgICAgICAgIChKU0M6OkNhbGxMaW5rSW5mbzo6ZW1pdEZhc3RQYXRo
SW1wbCk6CisgICAgICAgIChKU0M6OkNhbGxMaW5rSW5mbzo6ZW1pdEZhc3RQYXRoKToKKyAgICAg
ICAgKEpTQzo6Q2FsbExpbmtJbmZvOjplbWl0VGFpbENhbGxGYXN0UGF0aCk6CisgICAgICAgIChK
U0M6OkNhbGxMaW5rSW5mbzo6ZW1pdFNsb3dQYXRoKToKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtJ
bmZvOjplbWl0RGlyZWN0RmFzdFBhdGgpOgorICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86OmVt
aXREaXJlY3RUYWlsQ2FsbEZhc3RQYXRoKToKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtJbmZvOjpp
bml0aWFsaXplRGlyZWN0Q2FsbCk6CisgICAgICAgIChKU0M6OkNhbGxMaW5rSW5mbzo6c2V0RGly
ZWN0Q2FsbFRhcmdldCk6CisgICAgICAgIChKU0M6OkNhbGxMaW5rSW5mbzo6c2V0U2xvd1BhdGhD
YWxsRGVzdGluYXRpb24pOgorICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86OnJldmVydENhbGxU
b1N0dWIpOgorICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86OnNldFN0dWIpOgorICAgICAgICAo
SlNDOjpDYWxsTGlua0luZm86OmNhbGxSZXR1cm5Mb2NhdGlvbik6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OkNhbGxMaW5rSW5mbzo6cGF0Y2hhYmxlSnVtcCk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OkNhbGxMaW5rSW5mbzo6aG90UGF0aEJlZ2luKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
Q2FsbExpbmtJbmZvOjpzZXRDYWxsZWUpOiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb2RlL0Nh
bGxMaW5rSW5mby5oOgorICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86OmNhbGxlZUdQUiBjb25z
dCk6CisgICAgICAgIChKU0M6OkNhbGxMaW5rSW5mbzo6aXNEYXRhSUMgY29uc3QpOgorICAgICAg
ICAoSlNDOjpDYWxsTGlua0luZm86OnNldFVzZXNEYXRhSUNzKToKKyAgICAgICAgKEpTQzo6Q2Fs
bExpbmtJbmZvOjpzZXRDb2RlTG9jYXRpb25zKToKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtJbmZv
OjpvZmZzZXRPZkNhbGxlZSk6CisgICAgICAgIChKU0M6OkNhbGxMaW5rSW5mbzo6b2Zmc2V0T2ZN
b25vbW9ycGhpY0NhbGxEZXN0aW5hdGlvbik6CisgICAgICAgIChKU0M6OkNhbGxMaW5rSW5mbzo6
b2Zmc2V0T2ZTbG93UGF0aENhbGxEZXN0aW5hdGlvbik6CisgICAgICAgIChKU0M6OkNhbGxMaW5r
SW5mbzo6c2V0Q2FsbExvY2F0aW9ucyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNhbGxMaW5r
SW5mbzo6aG90UGF0aE90aGVyKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q2FsbExpbmtJbmZv
OjpzZXRTdHViKTogRGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHSklUQ29tcGlsZXIuY3BwOgor
ICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpsaW5rKToKKyAgICAgICAgKiBkZmcvREZH
SklUQ29tcGlsZXIuaDoKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6YWRkSlNDYWxs
KToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6YWRkSlNEaXJlY3RDYWxsKToKKyAg
ICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6SlNDYWxsUmVjb3JkOjpKU0NhbGxSZWNvcmQp
OgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpKU0RpcmVjdENhbGxSZWNvcmQ6OkpT
RGlyZWN0Q2FsbFJlY29yZCk6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OmFkZEpT
RGlyZWN0VGFpbENhbGwpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVy
OjpKU0RpcmVjdFRhaWxDYWxsUmVjb3JkOjpKU0RpcmVjdFRhaWxDYWxsUmVjb3JkKTogRGVsZXRl
ZC4KKyAgICAgICAgKiBkZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcDoKKyAgICAgICAg
KEpTQzo6REZHOjpjYWxsZXJSZXR1cm5QQyk6CisgICAgICAgICogZGZnL0RGR09wZXJhdGlvbnMu
Y3BwOgorICAgICAgICAoSlNDOjpERkc6OkpTQ19ERUZJTkVfSklUX09QRVJBVElPTik6CisgICAg
ICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbCk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZl
SklUNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbCk6
CisgICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9CMy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6
REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVDYWxsT3JDb25zdHJ1Y3QpOgorICAgICAgICAoSlND
OjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlRGlyZWN0Q2FsbE9yQ29uc3RydWN0KToK
KyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZVRhaWxDYWxsKToK
KyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZUNhbGxPckNvbnN0
cnVjdFZhcmFyZ3NTcHJlYWQpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0Iz
Ojpjb21waWxlQ2FsbE9yQ29uc3RydWN0VmFyYXJncyk6CisgICAgICAgICogaml0L0NDYWxsSGVs
cGVycy5jcHA6CisgICAgICAgIChKU0M6OkNDYWxsSGVscGVyczo6ZW1pdEpJVENvZGVPdmVyKToK
KyAgICAgICAgKiBqaXQvQ0NhbGxIZWxwZXJzLmg6CisgICAgICAgICogaml0L0pJVC5jcHA6Cisg
ICAgICAgIChKU0M6OkpJVDo6bGluayk6CisgICAgICAgICogaml0L0pJVC5oOgorICAgICAgICAq
IGppdC9KSVRDYWxsLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlVGFpbENhbGwpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVPcENhbGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmNv
bXBpbGVPcENhbGxTbG93Q2FzZSk6CisgICAgICAgICogaml0L0pJVENhbGwzMl82NC5jcHA6Cisg
ICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZU9wQ2FsbCk6CisgICAgICAgIChKU0M6OkpJVDo6Y29t
cGlsZU9wQ2FsbFNsb3dDYXNlKToKKyAgICAgICAgKiBqaXQvSklUT3BlcmF0aW9ucy5jcHA6Cisg
ICAgICAgIChKU0M6OkpTQ19ERUZJTkVfSklUX09QRVJBVElPTik6CisgICAgICAgICogaml0L1Bv
bHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lLmNwcDoKKyAgICAgICAgKEpTQzo6UG9seW1vcnBoaWND
YWxsTm9kZTo6dW5saW5rKToKKyAgICAgICAgKiBqaXQvUmVwYXRjaC5jcHA6CisgICAgICAgIChK
U0M6OmxpbmtTbG93UGF0aFRvKToKKyAgICAgICAgKEpTQzo6bGlua1Nsb3dGb3IpOgorICAgICAg
ICAoSlNDOjpsaW5rTW9ub21vcnBoaWNDYWxsKToKKyAgICAgICAgKEpTQzo6bGlua0RpcmVjdENh
bGwpOgorICAgICAgICAoSlNDOjpyZXZlcnRDYWxsKToKKyAgICAgICAgKEpTQzo6dW5saW5rQ2Fs
bCk6CisgICAgICAgIChKU0M6OmxpbmtQb2x5bW9ycGhpY0NhbGwpOgorICAgICAgICAoSlNDOjps
aW5rRm9yKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6bGlua0RpcmVjdEZvcik6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6OnVubGlua0Zvcik6IERlbGV0ZWQuCisgICAgICAgICogaml0L1JlcGF0
Y2guaDoKKyAgICAgICAgKiB3YXNtL2pzL1dhc21Ub0pTLmNwcDoKKyAgICAgICAgKEpTQzo6V2Fz
bTo6d2FzbVRvSlMpOgorCiAyMDIxLTA1LTEzICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5j
b20+CiAKICAgICAgICAgUmVuYW1lIEZpbGVTeXN0ZW06OmRpcmVjdG9yeU5hbWUoKSB0byBGaWxl
U3lzdGVtOjpwYXJlbnRQYXRoKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oCShyZXZpc2lvbiAyNzc0
NDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3Nl
bWJsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtOTcxLDYgKzk3MSwxMiBAQCBwdWJsaWM6CiAgICAg
ICAgIG1fbGlua1Rhc2tzLmFwcGVuZChjcmVhdGVTaGFyZWRUYXNrPHZvaWQoTGlua0J1ZmZlciYp
PihmdW5jdG9yKSk7CiAgICAgfQogCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAg
ICB2b2lkIGFkZExhdGVMaW5rVGFzayhjb25zdCBGdW5jdG9yJiBmdW5jdG9yKSAvLyBSdW4gYWZ0
ZXIgYWxsIGxpbmsgdGFza3MKKyAgICB7CisgICAgICAgIG1fbGF0ZUxpbmtUYXNrcy5hcHBlbmQo
Y3JlYXRlU2hhcmVkVGFzazx2b2lkKExpbmtCdWZmZXImKT4oZnVuY3RvcikpOworICAgIH0KKwog
I2lmIENPTVBJTEVSKEdDQykKICAgICAvLyBXb3JrYXJvdW5kIGZvciBHQ0MgZGVtYW5kaW5nIHRo
YXQgbWVtY3B5ICJtdXN0IGJlIHRoZSBuYW1lIG9mIGEgZnVuY3Rpb24gd2l0aCBleHRlcm5hbCBs
aW5rYWdlIi4KICAgICBzdGF0aWMgdm9pZCogbWVtY3B5KHZvaWQqIGRzdCwgY29uc3Qgdm9pZCog
c3JjLCBzaXplX3Qgc2l6ZSkKQEAgLTExMTQsNiArMTEyMCw3IEBAIHByb3RlY3RlZDoKICAgICBi
b29sIG1fYWxsb3dTY3JhdGNoUmVnaXN0ZXIgeyB0cnVlIH07CiAKICAgICBWZWN0b3I8UmVmUHRy
PFNoYXJlZFRhc2s8dm9pZChMaW5rQnVmZmVyJik+Pj4gbV9saW5rVGFza3M7CisgICAgVmVjdG9y
PFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoTGlua0J1ZmZlciYpPj4+IG1fbGF0ZUxpbmtUYXNrczsK
IAogICAgIGZyaWVuZCBjbGFzcyBMaW5rQnVmZmVyOwogfTsgLy8gY2xhc3MgQWJzdHJhY3RNYWNy
b0Fzc2VtYmxlcgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVm
ZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xp
bmtCdWZmZXIuY3BwCShyZXZpc2lvbiAyNzc0NDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL0xpbmtCdWZmZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MzksNiArNDM5LDcg
QEAgdm9pZCBMaW5rQnVmZmVyOjpsaW5rQ29kZShNYWNyb0Fzc2VtYmxlcgogI2VuZGlmIC8vICFF
TkFCTEUoQlJBTkNIX0NPTVBBQ1RJT04pCiAKICAgICBtX2xpbmtUYXNrcyA9IFdURk1vdmUobWFj
cm9Bc3NlbWJsZXIubV9saW5rVGFza3MpOworICAgIG1fbGF0ZUxpbmtUYXNrcyA9IFdURk1vdmUo
bWFjcm9Bc3NlbWJsZXIubV9sYXRlTGlua1Rhc2tzKTsKIH0KIAogdm9pZCBMaW5rQnVmZmVyOjph
bGxvY2F0ZShNYWNyb0Fzc2VtYmxlciYgbWFjcm9Bc3NlbWJsZXIsIEpJVENvbXBpbGF0aW9uRWZm
b3J0IGVmZm9ydCkKQEAgLTQ3MSw2ICs0NzIsOCBAQCB2b2lkIExpbmtCdWZmZXI6OnBlcmZvcm1G
aW5hbGl6YXRpb24oKQogewogICAgIGZvciAoYXV0byYgdGFzayA6IG1fbGlua1Rhc2tzKQogICAg
ICAgICB0YXNrLT5ydW4oKnRoaXMpOworICAgIGZvciAoYXV0byYgdGFzayA6IG1fbGF0ZUxpbmtU
YXNrcykKKyAgICAgICAgdGFzay0+cnVuKCp0aGlzKTsKIAogI2lmbmRlZiBOREVCVUcKICAgICBB
U1NFUlQobV9pc0p1bXBJc2xhbmQgfHwgIWlzQ29tcGlsYXRpb25UaHJlYWQoKSk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuaAkocmV2aXNpb24g
Mjc3NDQwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQwMyw2ICs0MDMsNyBAQCBwcml2YXRlOgogICAgIFByb2ZpbGUg
bV9wcm9maWxlIHsgUHJvZmlsZTo6VW5jYXRlZ29yaXplZCB9OwogICAgIE1hY3JvQXNzZW1ibGVy
Q29kZVB0cjxMaW5rQnVmZmVyUHRyVGFnPiBtX2NvZGU7CiAgICAgVmVjdG9yPFJlZlB0cjxTaGFy
ZWRUYXNrPHZvaWQoTGlua0J1ZmZlciYpPj4+IG1fbGlua1Rhc2tzOworICAgIFZlY3RvcjxSZWZQ
dHI8U2hhcmVkVGFzazx2b2lkKExpbmtCdWZmZXImKT4+PiBtX2xhdGVMaW5rVGFza3M7CiAKICAg
ICBzdGF0aWMgc2l6ZV90IHNfcHJvZmlsZUN1bW11bGF0aXZlTGlua2VkU2l6ZXNbbnVtYmVyT2ZQ
cm9maWxlc107CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vz
c0Nhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9B
Y2Nlc3NDYXNlLmNwcAkocmV2aXNpb24gMjc3NDQwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTgwLDExICsxNTgw
LDYgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZUltcGwoQWNjZXNzR2VuZQogICAgICAgICAv
LyBTdHVmZiBmb3IgY3VzdG9tIGdldHRlcnMvc2V0dGVycy4KICAgICAgICAgQ0NhbGxIZWxwZXJz
OjpDYWxsIG9wZXJhdGlvbkNhbGw7CiAKLSAgICAgICAgLy8gU3R1ZmYgZm9yIEpTIGdldHRlcnMv
c2V0dGVycy4KLSAgICAgICAgQ0NhbGxIZWxwZXJzOjpEYXRhTGFiZWxQdHIgYWRkcmVzc09mTGlu
a0Z1bmN0aW9uQ2hlY2s7Ci0gICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBmYXN0UGF0aENhbGw7
Ci0gICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBzbG93UGF0aENhbGw7Ci0KICAgICAgICAgLy8g
VGhpcyBhbHNvIGRvZXMgdGhlIG5lY2Vzc2FyeSBjYWxjdWxhdGlvbnMgb2Ygd2hldGhlciBvciBu
b3Qgd2UncmUgYW4KICAgICAgICAgLy8gZXhjZXB0aW9uIGhhbmRsaW5nIGNhbGwgc2l0ZS4KICAg
ICAgICAgQWNjZXNzR2VuZXJhdGlvblN0YXRlOjpTcGlsbFN0YXRlIHNwaWxsU3RhdGUgPSBzdGF0
ZS5wcmVzZXJ2ZUxpdmVSZWdpc3RlcnNUb1N0YWNrRm9yQ2FsbCgpOwpAQCAtMTcwMSwyNCArMTY5
NiwyMiBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlSW1wbChBY2Nlc3NHZW5lCiAgICAgICAg
ICAgICAgICAgICAgICAgICB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMo
MSkub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSk7CiAgICAgICAgICAgICB9CiAKLSAgICAg
ICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBzbG93Q2FzZSA9IGppdC5icmFuY2hQdHJXaXRoUGF0
Y2goCi0gICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwgbG9hZGVkVmFsdWVH
UFIsIGFkZHJlc3NPZkxpbmtGdW5jdGlvbkNoZWNrLAotICAgICAgICAgICAgICAgIENDYWxsSGVs
cGVyczo6VHJ1c3RlZEltbVB0cihudWxscHRyKSk7CisgICAgICAgICAgICBhdXRvIHNsb3dDYXNl
ID0gYWNjZXNzLmNhbGxMaW5rSW5mbygpLT5lbWl0RmFzdFBhdGgoaml0LCBsb2FkZWRWYWx1ZUdQ
UiwgbG9hZGVkVmFsdWVHUFIgPT0gR1BSSW5mbzo6cmVnVDIgPyBHUFJJbmZvOjpyZWdUMCA6IEdQ
UkluZm86OnJlZ1QyLCBKSVRDb2RlOjppc09wdGltaXppbmdKSVQoY29kZUJsb2NrLT5qaXRUeXBl
KCkpID8gQ2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6Ok5vIDogQ2FsbExpbmtJbmZvOjpVc2VEYXRh
SUM6Olllcyk7CisgICAgICAgICAgICBhdXRvIGRvbmVMb2NhdGlvbiA9IGppdC5sYWJlbCgpOwog
Ci0gICAgICAgICAgICBmYXN0UGF0aENhbGwgPSBqaXQubmVhckNhbGwoKTsKICAgICAgICAgICAg
IGlmIChtX3R5cGUgPT0gR2V0dGVyKQogICAgICAgICAgICAgICAgIGppdC5zZXR1cFJlc3VsdHMo
dmFsdWVSZWdzKTsKICAgICAgICAgICAgIGRvbmUuYXBwZW5kKGppdC5qdW1wKCkpOwogCiAgICAg
ICAgICAgICBzbG93Q2FzZS5saW5rKCZqaXQpOworICAgICAgICAgICAgYXV0byBzbG93UGF0aFN0
YXJ0ID0gaml0LmxhYmVsKCk7CiAgICAgICAgICAgICBqaXQubW92ZShsb2FkZWRWYWx1ZUdQUiwg
R1BSSW5mbzo6cmVnVDApOwogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCiAgICAgICAgICAgICAvLyBX
ZSAqYWx3YXlzKiBrbm93IHRoYXQgdGhlIGdldHRlci9zZXR0ZXIsIGlmIG5vbi1udWxsLCBpcyBh
IGNlbGwuCiAgICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpDZWxsVGFnKSwgR1BSSW5mbzo6cmVnVDEpOwogI2VuZGlmCi0gICAgICAgICAgICBq
aXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoYWNjZXNzLmNhbGxMaW5rSW5mbygp
KSwgR1BSSW5mbzo6cmVnVDIpOwogICAgICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tUHRyKGdsb2JhbE9iamVjdCksIEdQUkluZm86OnJlZ1QzKTsKLSAgICAgICAgICAg
IHNsb3dQYXRoQ2FsbCA9IGppdC5uZWFyQ2FsbCgpOworICAgICAgICAgICAgYWNjZXNzLmNhbGxM
aW5rSW5mbygpLT5lbWl0U2xvd1BhdGgodm0sIGppdCk7CiAgICAgICAgICAgICBpZiAobV90eXBl
ID09IEdldHRlcikKICAgICAgICAgICAgICAgICBqaXQuc2V0dXBSZXN1bHRzKHZhbHVlUmVncyk7
CiAgICAgICAgICAgICBkb25lLmFwcGVuZChqaXQuanVtcCgpKTsKQEAgLTE3MzUsMTUgKzE3Mjgs
MTAgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZUltcGwoQWNjZXNzR2VuZQogICAgICAgICAg
ICAgYm9vbCBjYWxsSGFzUmV0dXJuVmFsdWUgPSBpc0dldHRlcigpOwogICAgICAgICAgICAgcmVz
dG9yZUxpdmVSZWdpc3RlcnNGcm9tU3RhY2tGb3JDYWxsKHNwaWxsU3RhdGUsIGNhbGxIYXNSZXR1
cm5WYWx1ZSk7CiAKLSAgICAgICAgICAgIGppdC5hZGRMaW5rVGFzayhbPSwgJnZtXSAoTGlua0J1
ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICAgICAgICAgIHRoaXMtPmFzPEdldHRlclNldHRl
ckFjY2Vzc0Nhc2U+KCkuY2FsbExpbmtJbmZvKCktPnNldENhbGxMb2NhdGlvbnMoCi0gICAgICAg
ICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+KGxpbmtCdWZm
ZXIubG9jYXRpb25PZk5lYXJDYWxsPEpTSW50ZXJuYWxQdHJUYWc+KHNsb3dQYXRoQ2FsbCkpLAot
ICAgICAgICAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPihs
aW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oYWRkcmVzc09mTGlua0Z1bmN0
aW9uQ2hlY2spKSwKLSAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVh
ckNhbGw8SlNJbnRlcm5hbFB0clRhZz4oZmFzdFBhdGhDYWxsKSk7Ci0KLSAgICAgICAgICAgICAg
ICBsaW5rQnVmZmVyLmxpbmsoCi0gICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCwKLSAg
ICAgICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SklUVGh1bmtQdHJUYWc+KHZtLmdl
dENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcikuY29kZSgpKSk7CisgICAgICAgICAgICBq
aXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgICAgICAg
ICAgICAgdGhpcy0+YXM8R2V0dGVyU2V0dGVyQWNjZXNzQ2FzZT4oKS5jYWxsTGlua0luZm8oKS0+
c2V0Q29kZUxvY2F0aW9ucygKKyAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5sb2NhdGlv
bk9mPEpTSW50ZXJuYWxQdHJUYWc+KHNsb3dQYXRoU3RhcnQpLAorICAgICAgICAgICAgICAgICAg
ICBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oZG9uZUxvY2F0aW9uKSk7
CiAgICAgICAgICAgICB9KTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIEFTU0VSVCht
X3R5cGUgPT0gQ3VzdG9tVmFsdWVHZXR0ZXIgfHwgbV90eXBlID09IEN1c3RvbUFjY2Vzc29yR2V0
dGVyIHx8IG1fdHlwZSA9PSBDdXN0b21WYWx1ZVNldHRlciB8fCBtX3R5cGUgPT0gQ3VzdG9tQWNj
ZXNzb3JTZXR0ZXIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxM
aW5rSW5mby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NhbGxMaW5rSW5mby5jcHAJKHJldmlzaW9uIDI3NzQ0MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwxMSAr
MjYsMTUgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJDYWxsTGlua0luZm8uaCIK
IAorI2luY2x1ZGUgIkNDYWxsSGVscGVycy5oIgogI2luY2x1ZGUgIkNhbGxGcmFtZVNodWZmbGVE
YXRhLmgiCisjaW5jbHVkZSAiRGlzYWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlLmgiCiAj
aW5jbHVkZSAiRnVuY3Rpb25Db2RlQmxvY2suaCIKICNpbmNsdWRlICJKU0NlbGxJbmxpbmVzLmgi
CisjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgogI2luY2x1ZGUgIk9wY29kZS5oIgogI2luY2x1ZGUg
IlJlcGF0Y2guaCIKKyNpbmNsdWRlICJUaHVua0dlbmVyYXRvcnMuaCIKICNpbmNsdWRlIDx3dGYv
TGlzdER1bXAuaD4KIAogI2lmIEVOQUJMRShKSVQpCkBAIC03Nyw2ICs4MSw3IEBAIENhbGxMaW5r
SW5mbzo6Q2FsbExpbmtJbmZvKENvZGVPcmlnaW4gY28KICAgICAsIG1fYWxsb3dTdHVicyh0cnVl
KQogICAgICwgbV9jbGVhcmVkQnlKZXR0aXNvbihmYWxzZSkKICAgICAsIG1fY2FsbFR5cGUoTm9u
ZSkKKyAgICAsIG1fdXNlRGF0YUlDKHN0YXRpY19jYXN0PHVuc2lnbmVkPihVc2VEYXRhSUM6Olll
cykpCiB7CiB9CiAKQEAgLTEwMiw0NyArMTA3LDUxIEBAIHZvaWQgQ2FsbExpbmtJbmZvOjp1bmxp
bmsoVk0mIHZtKQogICAgIC8vIFdlIGNvdWxkIGJlIGNhbGxlZCBldmVuIGlmIHdlJ3JlIG5vdCBs
aW5rZWQgYW55bW9yZSBiZWNhdXNlIG9mIGhvdyBwb2x5bW9ycGhpYyBjYWxscwogICAgIC8vIHdv
cmsuIEVhY2ggY2FsbHNpdGUgd2l0aGluIHRoZSBwb2x5bW9ycGhpYyBjYWxsIHN0dWIgbWF5IHNl
cGFyYXRlbHkgYXNrIHVzIHRvIHVubGluaygpLgogICAgIGlmIChpc0xpbmtlZCgpKQotICAgICAg
ICB1bmxpbmtGb3Iodm0sICp0aGlzKTsKKyAgICAgICAgdW5saW5rQ2FsbCh2bSwgKnRoaXMpOwog
CiAgICAgLy8gRWl0aGVyIHdlIHdlcmUgdW5saW5rZWQsIGluIHdoaWNoIGNhc2Ugd2Ugc2hvdWxk
IG5vdCBoYXZlIGJlZW4gb24gYW55IGxpc3QsIG9yIHdlIHVubGlua2VkCiAgICAgLy8gb3Vyc2Vs
dmVzIHNvIHRoYXQgd2UncmUgbm90IG9uIGFueSBsaXN0IGFueW1vcmUuCiAgICAgUkVMRUFTRV9B
U1NFUlQoIWlzT25MaXN0KCkpOwogfQogCi1Db2RlTG9jYXRpb25OZWFyQ2FsbDxKU0ludGVybmFs
UHRyVGFnPiBDYWxsTGlua0luZm86OmNhbGxSZXR1cm5Mb2NhdGlvbigpCitDb2RlTG9jYXRpb25M
YWJlbDxKU0ludGVybmFsUHRyVGFnPiBDYWxsTGlua0luZm86OmZhc3RQYXRoU3RhcnQoKQogewot
ICAgIFJFTEVBU0VfQVNTRVJUKCFpc0RpcmVjdCgpKTsKLSAgICByZXR1cm4gQ29kZUxvY2F0aW9u
TmVhckNhbGw8SlNJbnRlcm5hbFB0clRhZz4obV9jYWxsUmV0dXJuTG9jYXRpb25PclBhdGNoYWJs
ZUp1bXAsIE5lYXJDYWxsTW9kZTo6UmVndWxhcik7CisgICAgcmV0dXJuIENvZGVMb2NhdGlvbkRh
dGFMYWJlbFB0cjxKU0ludGVybmFsUHRyVGFnPihtX2Zhc3RQYXRoU3RhcnQpOwogfQogCi1Db2Rl
TG9jYXRpb25KdW1wPEpTSW50ZXJuYWxQdHJUYWc+IENhbGxMaW5rSW5mbzo6cGF0Y2hhYmxlSnVt
cCgpCitDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBDYWxsTGlua0luZm86OnNs
b3dQYXRoU3RhcnQoKQogewotICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxUeXBlKCkgPT0gRGlyZWN0
VGFpbENhbGwpOwotICAgIHJldHVybiBDb2RlTG9jYXRpb25KdW1wPEpTSW50ZXJuYWxQdHJUYWc+
KG1fY2FsbFJldHVybkxvY2F0aW9uT3JQYXRjaGFibGVKdW1wKTsKKyAgICBSRUxFQVNFX0FTU0VS
VCghaXNEYXRhSUMoKSk7CisgICAgcmV0dXJuIHUuY29kZUlDLm1fc2xvd1BhdGhTdGFydDsKIH0K
IAotQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyPEpTSW50ZXJuYWxQdHJUYWc+IENhbGxMaW5rSW5m
bzo6aG90UGF0aEJlZ2luKCkKK0NvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IENh
bGxMaW5rSW5mbzo6ZG9uZUxvY2F0aW9uKCkKIHsKICAgICBSRUxFQVNFX0FTU0VSVCghaXNEaXJl
Y3QoKSk7Ci0gICAgcmV0dXJuIENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0cjxKU0ludGVybmFsUHRy
VGFnPihtX2hvdFBhdGhCZWdpbk9yU2xvd1BhdGhTdGFydCk7CisgICAgcmV0dXJuIG1fZG9uZUxv
Y2F0aW9uOwogfQogCi1Db2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBDYWxsTGlu
a0luZm86OnNsb3dQYXRoU3RhcnQoKQotewotICAgIFJFTEVBU0VfQVNTRVJUKGlzRGlyZWN0KCkp
OwotICAgIHJldHVybiBtX2hvdFBhdGhCZWdpbk9yU2xvd1BhdGhTdGFydDsKLX0KLQotdm9pZCBD
YWxsTGlua0luZm86OnNldENhbGxlZShWTSYgdm0sIEpTQ2VsbCogb3duZXIsIEpTT2JqZWN0KiBj
YWxsZWUpCit2b2lkIENhbGxMaW5rSW5mbzo6c2V0TW9ub21vcnBoaWNDYWxsZWUoVk0mIHZtLCBK
U0NlbGwqIG93bmVyLCBKU09iamVjdCogY2FsbGVlLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNF
bnRyeVB0clRhZz4gY29kZVB0cikKIHsKICAgICBSRUxFQVNFX0FTU0VSVCghaXNEaXJlY3QoKSk7
CiAgICAgbV9jYWxsZWVPckNvZGVCbG9jay5zZXQodm0sIG93bmVyLCBjYWxsZWUpOworCisgICAg
aWYgKGlzRGF0YUlDKCkpIAorICAgICAgICB1LmRhdGFJQy5tX21vbm9tb3JwaGljQ2FsbERlc3Rp
bmF0aW9uID0gY29kZVB0cjsKKyAgICBlbHNlIHsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJl
cGF0Y2hOZWFyQ2FsbCh1LmNvZGVJQy5tX2NhbGxMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWw8
SlNFbnRyeVB0clRhZz4oY29kZVB0cikpOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRj
aFBvaW50ZXIodS5jb2RlSUMubV9jYWxsZWVMb2NhdGlvbiwgY2FsbGVlKTsKKyAgICB9CiB9CiAK
IHZvaWQgQ2FsbExpbmtJbmZvOjpjbGVhckNhbGxlZSgpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQo
IWlzRGlyZWN0KCkpOwogICAgIG1fY2FsbGVlT3JDb2RlQmxvY2suY2xlYXIoKTsKKyAgICBpZiAo
aXNEYXRhSUMoKSkKKyAgICAgICAgdS5kYXRhSUMubV9tb25vbW9ycGhpY0NhbGxEZXN0aW5hdGlv
biA9IG51bGxwdHI7CisgICAgZWxzZSBpZiAoIWNsZWFyZWRCeUpldHRpc29uKCkpCisgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoUG9pbnRlcih1LmNvZGVJQy5tX2NhbGxlZUxvY2F0aW9u
LCBudWxscHRyKTsKIH0KIAogSlNPYmplY3QqIENhbGxMaW5rSW5mbzo6Y2FsbGVlKCkKQEAgLTI4
NCw2ICsyOTMsMjA2IEBAIHZvaWQgQ2FsbExpbmtJbmZvOjpzZXRGcmFtZVNodWZmbGVEYXRhKGMK
ICAgICBtX2ZyYW1lU2h1ZmZsZURhdGEtPnNocmlua1RvRml0KCk7CiB9CiAKK3ZvaWQgQ2FsbExp
bmtJbmZvOjplbWl0Rmlyc3RJbnN0cnVjdGlvbkZvckRhdGFJQyhDQ2FsbEhlbHBlcnMmIGppdCwg
R1BSUmVnIGNhbGxMaW5rSW5mb0dQUikKK3sKKyAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IGppdC5z
Y3JhdGNoUmVnaXN0ZXIoKTsKKyAgICBEaXNhbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2Ug
ZGlzYWxsb3dTY3JhdGNoKGppdCk7CisgICAgLy8gV2hlbiByZXBhdGNoaW5nLCB3ZSBqdXN0IG92
ZXJ3cml0ZSB0aGUgZmlyc3QgaW5zdHJ1Y3Rpb24gYmFjaywgc2luY2UgaXQnbGwgaGF2ZSBiZWVu
IHJlcGxhY2VkIHdpdGggYSBqdW1wIHRvIHRoZSBwb2x5bW9ycGhpYyBjYWxsIHN0dWIuCisgICAg
c2l6ZV90IHN0YXJ0U2l6ZSA9IGppdC5tX2Fzc2VtYmxlci5idWZmZXIoKS5jb2RlU2l6ZSgpOwor
ICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhjYWxsTGlua0luZm9HUFIsIG9m
ZnNldE9mQ2FsbGVlKCkpLCBzY3JhdGNoR1BSKTsgCisgICAgc2l6ZV90IGxvYWRTaXplID0gaml0
Lm1fYXNzZW1ibGVyLmJ1ZmZlcigpLmNvZGVTaXplKCkgLSBzdGFydFNpemU7CisgICAgaWYgKGxv
YWRTaXplIDwgc3RhdGljX2Nhc3Q8c2l6ZV90PihDQ2FsbEhlbHBlcnM6OnBhdGNoYWJsZUp1bXBT
aXplKCkpKQorICAgICAgICBqaXQuZW1pdE5vcHMoc3RhdGljX2Nhc3Q8c2l6ZV90PihDQ2FsbEhl
bHBlcnM6OnBhdGNoYWJsZUp1bXBTaXplKCkpIC0gbG9hZFNpemUpOworfQorCitNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcExpc3QgQ2FsbExpbmtJbmZvOjplbWl0RmFzdFBhdGhJbXBsKENDYWxsSGVscGVy
cyYgaml0LCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRh
SUMgdXNlRGF0YUlDLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKQor
eworICAgIHNldFVzZXNEYXRhSUNzKHVzZURhdGFJQyk7CisgICAgaWYgKGlzRGF0YUlDKCkpIHsK
KyAgICAgICAgUkVMRUFTRV9BU1NFUlQoY2FsbExpbmtJbmZvR1BSICE9IEdQUlJlZzo6SW52YWxp
ZEdQUlJlZyk7CisgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cih0
aGlzKSwgY2FsbExpbmtJbmZvR1BSKTsKKyAgICAgICAgdS5kYXRhSUMubV9jYWxsTGlua0luZm9H
UFIgPSBjYWxsTGlua0luZm9HUFI7CisgICAgfQorCisgICAgYXV0byBmYXN0UGF0aFN0YXJ0ID0g
aml0LmxhYmVsKCk7CisgICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1
ZmZlcikgeworICAgICAgICBtX2Zhc3RQYXRoU3RhcnQgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8
SlNJbnRlcm5hbFB0clRhZz4oZmFzdFBhdGhTdGFydCk7CisgICAgfSk7CisKKyAgICBDQ2FsbEhl
bHBlcnM6Okp1bXBMaXN0IHNsb3dQYXRoOworCisgICAgaWYgKGlzRGF0YUlDKCkpIHsKKyAgICAg
ICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBqaXQuc2NyYXRjaFJlZ2lzdGVyKCk7CisgICAgICAgIGVt
aXRGaXJzdEluc3RydWN0aW9uRm9yRGF0YUlDKGppdCwgY2FsbExpbmtJbmZvR1BSKTsKKyAgICAg
ICAgeworICAgICAgICAgICAgRGlzYWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGRpc2Fs
bG93U2NyYXRjaChqaXQpOworICAgICAgICAgICAgc2xvd1BhdGguYXBwZW5kKGppdC5icmFuY2hQ
dHIoQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwgc2NyYXRjaEdQUiwgY2FsbGVlR1BSKSk7CisgICAg
ICAgIH0KKyAgICAgICAgaWYgKGlzVGFpbENhbGwoKSkgeworICAgICAgICAgICAgcHJlcGFyZUZv
clRhaWxDYWxsKCk7CisgICAgICAgICAgICBqaXQuZmFySnVtcChDQ2FsbEhlbHBlcnM6OkFkZHJl
c3MoY2FsbExpbmtJbmZvR1BSLCBvZmZzZXRPZk1vbm9tb3JwaGljQ2FsbERlc3RpbmF0aW9uKCkp
LCBKU0VudHJ5UHRyVGFnKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBqaXQuY2FsbChD
Q2FsbEhlbHBlcnM6OkFkZHJlc3MoY2FsbExpbmtJbmZvR1BSLCBvZmZzZXRPZk1vbm9tb3JwaGlj
Q2FsbERlc3RpbmF0aW9uKCkpLCBKU0VudHJ5UHRyVGFnKTsKKyAgICB9IGVsc2UgeworICAgICAg
ICBDQ2FsbEhlbHBlcnM6OkRhdGFMYWJlbFB0ciBjYWxsZWVDaGVjazsKKyAgICAgICAgc2xvd1Bh
dGguYXBwZW5kKGppdC5icmFuY2hQdHJXaXRoUGF0Y2goQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwg
Y2FsbGVlR1BSLCBjYWxsZWVDaGVjaywgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG51bGxw
dHIpKSk7CisKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNhbGw7CisgICAgICAgIGlmIChp
c1RhaWxDYWxsKCkpIHsKKyAgICAgICAgICAgIHByZXBhcmVGb3JUYWlsQ2FsbCgpOworICAgICAg
ICAgICAgY2FsbCA9IGppdC5uZWFyVGFpbENhbGwoKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAg
ICAgICBjYWxsID0gaml0Lm5lYXJDYWxsKCk7CisgICAgICAgIGppdC5hZGRMaW5rVGFzayhbPV0g
KExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgICAgIHUuY29kZUlDLm1fY2FsbExv
Y2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8SlNJbnRlcm5hbFB0clRhZz4o
Y2FsbCk7CisgICAgICAgICAgICB1LmNvZGVJQy5tX2NhbGxlZUxvY2F0aW9uID0gbGlua0J1ZmZl
ci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KGNhbGxlZUNoZWNrKTsKKyAgICAgICAgfSk7
CisgICAgfQorCisgICAgcmV0dXJuIHNsb3dQYXRoOworfQorCitDQ2FsbEhlbHBlcnM6Okp1bXBM
aXN0IENhbGxMaW5rSW5mbzo6ZW1pdEZhc3RQYXRoKENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcg
Y2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUMgdXNlRGF0YUlDKQor
eworICAgIFJFTEVBU0VfQVNTRVJUKCFpc1RhaWxDYWxsKCkpOworICAgIHJldHVybiBlbWl0RmFz
dFBhdGhJbXBsKGppdCwgY2FsbGVlR1BSLCBjYWxsTGlua0luZm9HUFIsIHVzZURhdGFJQywgbnVs
bHB0cik7Cit9CisKK01hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmVtaXRU
YWlsQ2FsbEZhc3RQYXRoKENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJS
ZWcgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUMgdXNlRGF0YUlDLCBXVEY6OkZ1bmN0aW9uPHZv
aWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKQoreworICAgIFJFTEVBU0VfQVNTRVJUKGlzVGFpbENh
bGwoKSk7CisgICAgcmV0dXJuIGVtaXRGYXN0UGF0aEltcGwoaml0LCBjYWxsZWVHUFIsIGNhbGxM
aW5rSW5mb0dQUiwgdXNlRGF0YUlDLCBXVEZNb3ZlKHByZXBhcmVGb3JUYWlsQ2FsbCkpOworfQor
Cit2b2lkIENhbGxMaW5rSW5mbzo6ZW1pdFNsb3dQYXRoKFZNJiB2bSwgQ0NhbGxIZWxwZXJzJiBq
aXQpCit7CisgICAgc2V0U2xvd1BhdGhDYWxsRGVzdGluYXRpb24odm0uZ2V0Q1RJU3R1YihsaW5r
Q2FsbFRodW5rR2VuZXJhdG9yKS50ZW1wbGF0ZSByZXRhZ2dlZENvZGU8SlNFbnRyeVB0clRhZz4o
KSk7CisgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHRoaXMpLCBHUFJJ
bmZvOjpyZWdUMik7CisgICAgaml0LmNhbGwoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86
OnJlZ1QyLCBvZmZzZXRPZlNsb3dQYXRoQ2FsbERlc3RpbmF0aW9uKCkpLCBKU0VudHJ5UHRyVGFn
KTsKK30KKwordm9pZCBDYWxsTGlua0luZm86OmVtaXREaXJlY3RGYXN0UGF0aChDQ2FsbEhlbHBl
cnMmIGppdCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVCghaXNUYWlsQ2FsbCgpKTsKKworICAgIHNl
dFVzZXNEYXRhSUNzKFVzZURhdGFJQzo6Tm8pOworCisgICAgYXV0byBmYXN0UGF0aFN0YXJ0ID0g
aml0LmxhYmVsKCk7CisgICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1
ZmZlcikgeworICAgICAgICBtX2Zhc3RQYXRoU3RhcnQgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8
SlNJbnRlcm5hbFB0clRhZz4oZmFzdFBhdGhTdGFydCk7CisgICAgfSk7CisKKyAgICBhdXRvIGNh
bGwgPSBqaXQubmVhckNhbGwoKTsKKyAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVy
JiBsaW5rQnVmZmVyKSB7CisgICAgICAgIHUuY29kZUlDLm1fY2FsbExvY2F0aW9uID0gbGlua0J1
ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8SlNJbnRlcm5hbFB0clRhZz4oY2FsbCk7CisgICAgfSk7
CisgICAgaml0LmFkZExhdGVMaW5rVGFzayhbdGhpc10gKExpbmtCdWZmZXImKSB7CisgICAgICAg
IGluaXRpYWxpemVEaXJlY3RDYWxsKCk7CisgICAgfSk7Cit9CisKK3ZvaWQgQ2FsbExpbmtJbmZv
OjplbWl0RGlyZWN0VGFpbENhbGxGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCwgV1RGOjpGdW5j
dGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChp
c1RhaWxDYWxsKCkpOworCisgICAgc2V0VXNlc0RhdGFJQ3MoVXNlRGF0YUlDOjpObyk7CisKKyAg
ICBhdXRvIGZhc3RQYXRoU3RhcnQgPSBqaXQubGFiZWwoKTsKKyAgICBqaXQuYWRkTGlua1Rhc2so
Wz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgICAgIG1fZmFzdFBhdGhTdGFydCA9
IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihmYXN0UGF0aFN0YXJ0KTsK
KyAgICB9KTsKKworICAgIC8vIC0gSWYgd2UncmUgbm90IHlldCBsaW5rZWQsIHRoaXMgaXMgYSBq
dW1wIHRvIHRoZSBzbG93IHBhdGguCisgICAgLy8gLSBPbmNlIHdlJ3JlIGxpbmtlZCB0byBhIGZh
c3QgcGF0aCwgdGhpcyBnb2VzIGJhY2sgdG8gYmVpbmcgbm9wcyBzbyB3ZSBmYWxsIHRocm91Z2gg
dG8gdGhlIGxpbmtlZCBqdW1wLgorICAgIGppdC5lbWl0Tm9wcyhDQ2FsbEhlbHBlcnM6OnBhdGNo
YWJsZUp1bXBTaXplKCkpOworCisgICAgcHJlcGFyZUZvclRhaWxDYWxsKCk7CisgICAgYXV0byBj
YWxsID0gaml0Lm5lYXJUYWlsQ2FsbCgpOworICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtC
dWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgdS5jb2RlSUMubV9jYWxsTG9jYXRpb24gPSBs
aW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxKU0ludGVybmFsUHRyVGFnPihjYWxsKTsKKyAg
ICB9KTsKKyAgICBqaXQuYWRkTGF0ZUxpbmtUYXNrKFt0aGlzXSAoTGlua0J1ZmZlciYpIHsKKyAg
ICAgICAgaW5pdGlhbGl6ZURpcmVjdENhbGwoKTsKKyAgICB9KTsKK30KKwordm9pZCBDYWxsTGlu
a0luZm86OmluaXRpYWxpemVEaXJlY3RDYWxsKCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChpc0Rp
cmVjdCgpKTsKKyAgICBBU1NFUlQodS5jb2RlSUMubV9jYWxsTG9jYXRpb24pOworICAgIGlmIChp
c1RhaWxDYWxsKCkpIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoZmFzdFBhdGhTdGFydCgpKTsK
KyAgICAgICAgQ0NhbGxIZWxwZXJzOjplbWl0SklUQ29kZU92ZXIoZmFzdFBhdGhTdGFydCgpLCBb
Jl0gKENDYWxsSGVscGVycyYgaml0KSB7CisgICAgICAgICAgICBhdXRvIGp1bXAgPSBqaXQuanVt
cCgpOworICAgICAgICAgICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1
ZmZlcikgeworICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhqdW1wLCBzbG93UGF0aFN0
YXJ0KCkpOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0sICJpbml0aWFsaXplIGRpcmVjdCBj
YWxsIik7CisgICAgfSBlbHNlCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoTmVhckNh
bGwodS5jb2RlSUMubV9jYWxsTG9jYXRpb24sIHNsb3dQYXRoU3RhcnQoKSk7Cit9CisKK3ZvaWQg
Q2FsbExpbmtJbmZvOjpzZXREaXJlY3RDYWxsVGFyZ2V0KENvZGVMb2NhdGlvbkxhYmVsPEpTRW50
cnlQdHJUYWc+IHRhcmdldCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChpc0RpcmVjdCgpKTsKKwor
ICAgIGlmIChpc1RhaWxDYWxsKCkpIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoZmFzdFBhdGhT
dGFydCgpKTsKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjplbWl0SklUQ29kZU92ZXIoZmFzdFBhdGhT
dGFydCgpLCBbJl0gKENDYWxsSGVscGVycyYgaml0KSB7CisgICAgICAgICAgICAvLyBXZSByZXNl
cnZlZCB0aGlzIG1hbnkgYnl0ZXMgZm9yIHRoZSBqdW1wIGF0IGZhc3RQYXRoU3RhcnQoKS4gTWFr
ZSB0aGF0CisgICAgICAgICAgICAvLyBjb2RlIG5vcHMgbm93IHNvIHdlIGZhbGwgdGhyb3VnaCB0
byB0aGUganVtcCB0byB0aGUgZmFzdCBwYXRoLgorICAgICAgICAgICAgaml0LmVtaXROb3BzKEND
YWxsSGVscGVyczo6cGF0Y2hhYmxlSnVtcFNpemUoKSk7IAorICAgICAgICB9LCAiU2V0dGluZyBk
aXJlY3QgY2FsbCB0YXJnZXQiKTsKKyAgICB9CisKKyAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRj
aE5lYXJDYWxsKHUuY29kZUlDLm1fY2FsbExvY2F0aW9uLCB0YXJnZXQpOworfQorCit2b2lkIENh
bGxMaW5rSW5mbzo6c2V0U2xvd1BhdGhDYWxsRGVzdGluYXRpb24oTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyPEpTRW50cnlQdHJUYWc+IGNvZGVQdHIpCit7CisgICAgbV9zbG93UGF0aENhbGxEZXN0aW5h
dGlvbiA9IGNvZGVQdHI7Cit9CisKK3ZvaWQgQ2FsbExpbmtJbmZvOjpyZXZlcnRDYWxsVG9TdHVi
KCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChzdHViKCkpOworICAgIC8vIFRoZSBzdGFydCBvZiBv
dXIgSklUIGNvZGUgaXMgbm93IGEganVtcCB0byB0aGUgcG9seW1vcnBoaWMgc3R1Yi4gUmV3cml0
ZSB0aGUgZmlyc3QgaW5zdHJ1Y3Rpb24KKyAgICAvLyB0byBiZSB3aGF0IHdlIG5lZWQgZm9yIG5v
biBzdHViIElDcy4KKworICAgIC8vIHRoaXMgcnVucyBpbnRvIHNvbWUgYnJhbmNoIGNvbXBhY3Rp
b24gY3JhcCBJJ2QgbGlrZSB0byBhdm9pZCBmb3Igbm93LiBFc3NlbnRpYWxseSwgdGhlIGJyYW5j
aAorICAgIC8vIGRvZXNuJ3Qga25vdyBpZiBpdCBjYW4gYmUgY29tcGFjdGVkIG9yIG5vdC4gU28g
d2UgZW5kIHVwIHdpdGggMjggYnl0ZXMgb2YgbWFjaGluZSBjb2RlLCBmb3IKKyAgICAvLyB3aGF0
IGluIGFsbCBsaWtlbGlob29kIGZpdHMgaW4gMjQuIFNvIHdlIGp1c3Qgc3BsYXQgb3V0IHRoZSBm
aXJzdCBpbnN0cnVjdGlvbi4gTG9uZyB0ZXJtLCB3ZQorICAgIC8vIG5lZWQgc29tZXRoaW5nIGNs
ZWFuZXIuIEJ1dCB0aGlzIHdvcmtzIG9uIGFybTY0IGZvciBub3cuCisKKyAgICBDQ2FsbEhlbHBl
cnM6OmVtaXRKSVRDb2RlT3ZlcihmYXN0UGF0aFN0YXJ0KCksIFsmXSAoQ0NhbGxIZWxwZXJzJiBq
aXQpIHsKKyAgICAgICAgaWYgKGlzRGF0YUlDKCkpCisgICAgICAgICAgICBlbWl0Rmlyc3RJbnN0
cnVjdGlvbkZvckRhdGFJQyhqaXQsIHUuZGF0YUlDLm1fY2FsbExpbmtJbmZvR1BSKTsKKyAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OnJldmVydEp1bXBSZXBsYWNlbWVu
dFRvQnJhbmNoUHRyV2l0aFBhdGNoKAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6c3Rh
cnRPZkJyYW5jaFB0cldpdGhQYXRjaE9uUmVnaXN0ZXIodS5jb2RlSUMubV9jYWxsZWVMb2NhdGlv
biksIGNhbGxlZUdQUigpLCBudWxscHRyKTsKKyAgICAgICAgfQorICAgIH0sICAiUmVzZXR0aW5n
IFBvbHltb3JwaGljQ2FsbCBzdHViYmVkIENhbGxMaW5rSW5mbyIpOworfQorCit2b2lkIENhbGxM
aW5rSW5mbzo6c2V0U3R1YihSZWY8UG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmU+JiYgbmV3U3R1
YikKK3sKKyAgICBjbGVhclN0dWIoKTsKKyAgICBtX3N0dWIgPSBXVEZNb3ZlKG5ld1N0dWIpOwor
CisgICAgaWYgKGlzRGF0YUlDKCkpIHsKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjplbWl0SklUQ29k
ZU92ZXIoZmFzdFBhdGhTdGFydCgpLCBbJl0gKENDYWxsSGVscGVycyYgaml0KSB7CisgICAgICAg
ICAgICBhdXRvIGp1bXAgPSBqaXQuanVtcCgpOworICAgICAgICAgICAgaml0LmFkZExpbmtUYXNr
KFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgeworICAgICAgICAgICAgICAgIGxpbmtCdWZm
ZXIubGluayhqdW1wLCBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4obV9z
dHViLT5jb2RlKCkuY29kZSgpKSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSwgIlBhdGNo
aW5nIGNhbGwgdG8gUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUgaW4gQ2FsbExpbmtJbmZvIik7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGxhY2VXaXRoSnVtcCgK
KyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpzdGFydE9mQnJhbmNoUHRyV2l0aFBhdGNoT25S
ZWdpc3Rlcih1LmNvZGVJQy5tX2NhbGxlZUxvY2F0aW9uKSwKKyAgICAgICAgICAgIENvZGVMb2Nh
dGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihtX3N0dWItPmNvZGUoKS5jb2RlKCkpKTsK
KyAgICB9Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogI2VuZGlmIC8vIEVOQUJMRShKSVQpCiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmgJ
KHJldmlzaW9uIDI3NzQ0MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxs
TGlua0luZm8uaAkod29ya2luZyBjb3B5KQpAQCAtMzAsMTIgKzMwLDE0IEBACiAjaW5jbHVkZSAi
Q29kZVNwZWNpYWxpemF0aW9uS2luZC5oIgogI2luY2x1ZGUgIlBvbHltb3JwaGljQ2FsbFN0dWJS
b3V0aW5lLmgiCiAjaW5jbHVkZSAiV3JpdGVCYXJyaWVyLmgiCisjaW5jbHVkZSA8d3RmL0Z1bmN0
aW9uLmg+CiAjaW5jbHVkZSA8d3RmL1NlbnRpbmVsTGlua2VkTGlzdC5oPgogCiBuYW1lc3BhY2Ug
SlNDIHsKIAogI2lmIEVOQUJMRShKSVQpCiAKK2NsYXNzIENDYWxsSGVscGVyczsKIGNsYXNzIEZ1
bmN0aW9uQ29kZUJsb2NrOwogY2xhc3MgSlNGdW5jdGlvbjsKIGVudW0gT3Bjb2RlSUQgOiB1bnNp
Z25lZDsKQEAgLTE2MywxNiArMTY1LDM4IEBAIHB1YmxpYzoKICAgICAgICAgbV9jYWxsZWVHUFIg
PSBjYWxsZWVHUFI7CiAgICAgfQogCi0gICAgdm9pZCBzZXRDYWxsTG9jYXRpb25zKAotICAgICAg
ICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBjYWxsUmV0dXJuTG9jYXRpb25P
clBhdGNoYWJsZUp1bXAsCi0gICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJU
YWc+IGhvdFBhdGhCZWdpbk9yU2xvd1BhdGhTdGFydCwKLSAgICAgICAgQ29kZUxvY2F0aW9uTmVh
ckNhbGw8SlNJbnRlcm5hbFB0clRhZz4gaG90UGF0aE90aGVyKQotICAgIHsKLSAgICAgICAgbV9j
YWxsUmV0dXJuTG9jYXRpb25PclBhdGNoYWJsZUp1bXAgPSBjYWxsUmV0dXJuTG9jYXRpb25PclBh
dGNoYWJsZUp1bXA7Ci0gICAgICAgIG1faG90UGF0aEJlZ2luT3JTbG93UGF0aFN0YXJ0ID0gaG90
UGF0aEJlZ2luT3JTbG93UGF0aFN0YXJ0OwotICAgICAgICBtX2hvdFBhdGhPdGhlciA9IGhvdFBh
dGhPdGhlcjsKKyAgICBHUFJSZWcgY2FsbGVlR1BSKCkgY29uc3QgeyByZXR1cm4gbV9jYWxsZWVH
UFI7IH0KKyAgICAKKyAgICBlbnVtIGNsYXNzIFVzZURhdGFJQyA6IHVpbnQ4X3QgeworICAgICAg
ICBZZXMsCisgICAgICAgIE5vCisgICAgfTsKKworcHJpdmF0ZToKKyAgICB2b2lkIGVtaXRGaXJz
dEluc3RydWN0aW9uRm9yRGF0YUlDKENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsTGlua0luZm9H
UFIpOworICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBlbWl0RmFzdFBhdGhJbXBsKENDYWxs
SGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURh
dGFJQywgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkgV0FSTl9VTlVT
RURfUkVUVVJOOworcHVibGljOgorICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBlbWl0RmFz
dFBhdGgoQ0NhbGxIZWxwZXJzJiwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5m
b0dQUiwgVXNlRGF0YUlDKSBXQVJOX1VOVVNFRF9SRVRVUk47CisgICAgTWFjcm9Bc3NlbWJsZXI6
Okp1bXBMaXN0IGVtaXRUYWlsQ2FsbEZhc3RQYXRoKENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxs
ZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQywgV1RGOjpGdW5jdGlvbjx2
b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkgV0FSTl9VTlVTRURfUkVUVVJOOworICAgIHZvaWQg
ZW1pdERpcmVjdEZhc3RQYXRoKENDYWxsSGVscGVycyYpOworICAgIHZvaWQgZW1pdERpcmVjdFRh
aWxDYWxsRmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBh
cmVGb3JUYWlsQ2FsbCk7CisgICAgdm9pZCBlbWl0U2xvd1BhdGgoVk0mLCBDQ2FsbEhlbHBlcnMm
KTsKKyAgICB2b2lkIHJldmVydENhbGxUb1N0dWIoKTsKKworICAgIGJvb2wgaXNEYXRhSUMoKSBj
b25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxVc2VEYXRhSUM+KG1fdXNlRGF0YUlDKSA9PSBVc2VE
YXRhSUM6OlllczsgfQorICAgIHZvaWQgc2V0VXNlc0RhdGFJQ3MoVXNlRGF0YUlDIHVzZURhdGFJ
QykgeyBtX3VzZURhdGFJQyA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPih1c2VEYXRhSUMpOyB9CisK
KyAgICB2b2lkIHNldENvZGVMb2NhdGlvbnMoCisgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPEpT
SW50ZXJuYWxQdHJUYWc+IHNsb3dQYXRoU3RhcnQsCisgICAgICAgIENvZGVMb2NhdGlvbkxhYmVs
PEpTSW50ZXJuYWxQdHJUYWc+IGRvbmVMb2NhdGlvbikKKyAgICB7CisgICAgICAgIGlmICghaXNE
YXRhSUMoKSkKKyAgICAgICAgICAgIHUuY29kZUlDLm1fc2xvd1BhdGhTdGFydCA9IHNsb3dQYXRo
U3RhcnQ7CisgICAgICAgIG1fZG9uZUxvY2F0aW9uID0gZG9uZUxvY2F0aW9uOwogICAgIH0KIAor
ICAgIHZvaWQgaW5pdGlhbGl6ZURpcmVjdENhbGwoKTsKKwogICAgIGJvb2wgYWxsb3dTdHVicygp
IGNvbnN0IHsgcmV0dXJuIG1fYWxsb3dTdHViczsgfQogCiAgICAgdm9pZCBkaXNhbGxvd1N0dWJz
KCkKQEAgLTE4MCwyMyArMjA0LDE5IEBAIHB1YmxpYzoKICAgICAgICAgbV9hbGxvd1N0dWJzID0g
ZmFsc2U7CiAgICAgfQogCi0gICAgQ29kZUxvY2F0aW9uTmVhckNhbGw8SlNJbnRlcm5hbFB0clRh
Zz4gY2FsbFJldHVybkxvY2F0aW9uKCk7Ci0gICAgQ29kZUxvY2F0aW9uSnVtcDxKU0ludGVybmFs
UHRyVGFnPiBwYXRjaGFibGVKdW1wKCk7Ci0gICAgQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyPEpT
SW50ZXJuYWxQdHJUYWc+IGhvdFBhdGhCZWdpbigpOworICAgIENvZGVMb2NhdGlvbkxhYmVsPEpT
SW50ZXJuYWxQdHJUYWc+IGZhc3RQYXRoU3RhcnQoKTsKICAgICBDb2RlTG9jYXRpb25MYWJlbDxK
U0ludGVybmFsUHRyVGFnPiBzbG93UGF0aFN0YXJ0KCk7CisgICAgQ29kZUxvY2F0aW9uTGFiZWw8
SlNJbnRlcm5hbFB0clRhZz4gZG9uZUxvY2F0aW9uKCk7CiAKLSAgICBDb2RlTG9jYXRpb25OZWFy
Q2FsbDxKU0ludGVybmFsUHRyVGFnPiBob3RQYXRoT3RoZXIoKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIG1faG90UGF0aE90aGVyOwotICAgIH0KLQotICAgIHZvaWQgc2V0Q2FsbGVlKFZNJiwgSlND
ZWxsKiwgSlNPYmplY3QqIGNhbGxlZSk7CisgICAgdm9pZCBzZXRNb25vbW9ycGhpY0NhbGxlZShW
TSYsIEpTQ2VsbCosIEpTT2JqZWN0KiBjYWxsZWUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0Vu
dHJ5UHRyVGFnPik7CisgICAgdm9pZCBzZXRTbG93UGF0aENhbGxEZXN0aW5hdGlvbihNYWNyb0Fz
c2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4pOwogICAgIHZvaWQgY2xlYXJDYWxsZWUoKTsK
ICAgICBKU09iamVjdCogY2FsbGVlKCk7CiAKICAgICB2b2lkIHNldENvZGVCbG9jayhWTSYsIEpT
Q2VsbCosIEZ1bmN0aW9uQ29kZUJsb2NrKik7CiAgICAgdm9pZCBjbGVhckNvZGVCbG9jaygpOwog
ICAgIEZ1bmN0aW9uQ29kZUJsb2NrKiBjb2RlQmxvY2soKTsKKyAgICB2b2lkIHNldERpcmVjdENh
bGxUYXJnZXQoQ29kZUxvY2F0aW9uTGFiZWw8SlNFbnRyeVB0clRhZz4pOwogCiAgICAgdm9pZCBz
ZXRMYXN0U2VlbkNhbGxlZShWTSYsIGNvbnN0IEpTQ2VsbCogb3duZXIsIEpTT2JqZWN0KiBjYWxs
ZWUpOwogICAgIHZvaWQgY2xlYXJMYXN0U2VlbkNhbGxlZSgpOwpAQCAtMjA2LDEyICsyMjYsNyBA
QCBwdWJsaWM6CiAgICAgdm9pZCBzZXRFeGVjdXRhYmxlRHVyaW5nQ29tcGlsYXRpb24oRXhlY3V0
YWJsZUJhc2UqKTsKICAgICBFeGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZSgpOwogICAgIAotICAg
IHZvaWQgc2V0U3R1YihSZWY8UG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmU+JiYgbmV3U3R1YikK
LSAgICB7Ci0gICAgICAgIGNsZWFyU3R1YigpOwotICAgICAgICBtX3N0dWIgPSBXVEZNb3ZlKG5l
d1N0dWIpOwotICAgIH0KLQorICAgIHZvaWQgc2V0U3R1YihSZWY8UG9seW1vcnBoaWNDYWxsU3R1
YlJvdXRpbmU+JiYpOwogICAgIHZvaWQgY2xlYXJTdHViKCk7CiAKICAgICBQb2x5bW9ycGhpY0Nh
bGxTdHViUm91dGluZSogc3R1YigpIGNvbnN0CkBAIC0zMTEsNiArMzI2LDIxIEBAIHB1YmxpYzoK
ICAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDYWxsTGlua0luZm8sIG1fc2xvd1BhdGhD
b3VudCk7CiAgICAgfQogCisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkNhbGxlZSgpCisg
ICAgeworICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENhbGxMaW5rSW5mbywgbV9jYWxs
ZWVPckNvZGVCbG9jayk7CisgICAgfQorCisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZk1v
bm9tb3JwaGljQ2FsbERlc3RpbmF0aW9uKCkKKyAgICB7CisgICAgICAgIHJldHVybiBPQkpFQ1Rf
T0ZGU0VUT0YoQ2FsbExpbmtJbmZvLCB1KSArIE9CSkVDVF9PRkZTRVRPRihVbmlvblR5cGUsIGRh
dGFJQy5tX21vbm9tb3JwaGljQ2FsbERlc3RpbmF0aW9uKTsKKyAgICB9CisKKyAgICBzdGF0aWMg
cHRyZGlmZl90IG9mZnNldE9mU2xvd1BhdGhDYWxsRGVzdGluYXRpb24oKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDYWxsTGlua0luZm8sIG1fc2xvd1BhdGhDYWxsRGVz
dGluYXRpb24pOworICAgIH0KKwogICAgIEdQUlJlZyBjYWxsZWVHUFIoKQogICAgIHsKICAgICAg
ICAgcmV0dXJuIG1fY2FsbGVlR1BSOwpAQCAtMzUyLDEwICszODIsMjUgQEAgcHVibGljOgogICAg
IH0KIAogcHJpdmF0ZToKLSAgICB1aW50MzJfdCBtX21heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdU
aGlzIHsgMCB9OyAvLyBGb3IgdmFyYXJnczogdGhlIHByb2ZpbGVkIG1heGltdW0gbnVtYmVyIG9m
IGFyZ3VtZW50cy4gRm9yIGRpcmVjdDogdGhlIG51bWJlciBvZiBzdGFjayBzbG90cyBhbGxvY2F0
ZWQgZm9yIGFyZ3VtZW50cy4KLSAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFn
PiBtX2NhbGxSZXR1cm5Mb2NhdGlvbk9yUGF0Y2hhYmxlSnVtcDsKLSAgICBDb2RlTG9jYXRpb25M
YWJlbDxKU0ludGVybmFsUHRyVGFnPiBtX2hvdFBhdGhCZWdpbk9yU2xvd1BhdGhTdGFydDsKLSAg
ICBDb2RlTG9jYXRpb25OZWFyQ2FsbDxKU0ludGVybmFsUHRyVGFnPiBtX2hvdFBhdGhPdGhlcjsK
KyAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBtX2Zhc3RQYXRoU3RhcnQ7
CisgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gbV9kb25lTG9jYXRpb247
CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IG1fc2xvd1BhdGhDYWxs
RGVzdGluYXRpb247CisgICAgdW5pb24gVW5pb25UeXBlIHsKKyAgICAgICAgVW5pb25UeXBlKCkg
CisgICAgICAgICAgICA6IGRhdGFJQyB7IG51bGxwdHIsIEludmFsaWRHUFJSZWcgfQorICAgICAg
ICB7IH0KKyAgICAgICAgc3RydWN0IERhdGFJQyB7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
ckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gbV9tb25vbW9ycGhpY0NhbGxEZXN0aW5hdGlvbjsKKyAg
ICAgICAgICAgIEdQUlJlZyBtX2NhbGxMaW5rSW5mb0dQUjsKKyAgICAgICAgfSBkYXRhSUM7CisK
KyAgICAgICAgc3RydWN0IHsKKyAgICAgICAgICAgIENvZGVMb2NhdGlvbk5lYXJDYWxsPEpTSW50
ZXJuYWxQdHJUYWc+IG1fY2FsbExvY2F0aW9uOworICAgICAgICAgICAgQ29kZUxvY2F0aW9uRGF0
YUxhYmVsUHRyPEpTSW50ZXJuYWxQdHJUYWc+IG1fY2FsbGVlTG9jYXRpb247CisgICAgICAgICAg
ICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBtX3Nsb3dQYXRoU3RhcnQ7Cisg
ICAgICAgIH0gY29kZUlDOworICAgIH0gdTsKKwogICAgIFdyaXRlQmFycmllcjxKU0NlbGw+IG1f
Y2FsbGVlT3JDb2RlQmxvY2s7CiAgICAgV3JpdGVCYXJyaWVyPEpTQ2VsbD4gbV9sYXN0U2VlbkNh
bGxlZU9yRXhlY3V0YWJsZTsKICAgICBSZWZQdHI8UG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmU+
IG1fc3R1YjsKQEAgLTM2OSw4ICs0MTQsMTAgQEAgcHJpdmF0ZToKICAgICBib29sIG1fYWxsb3dT
dHVicyA6IDE7CiAgICAgYm9vbCBtX2NsZWFyZWRCeUpldHRpc29uIDogMTsKICAgICB1bnNpZ25l
ZCBtX2NhbGxUeXBlIDogNDsgLy8gQ2FsbFR5cGUKKyAgICB1bnNpZ25lZCBtX3VzZURhdGFJQyA6
IDE7IC8vIFVzZURhdGFJQwogICAgIEdQUlJlZyBtX2NhbGxlZUdQUiB7IEludmFsaWRHUFJSZWcg
fTsKICAgICB1aW50MzJfdCBtX3Nsb3dQYXRoQ291bnQgeyAwIH07CisgICAgdWludDMyX3QgbV9t
YXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyB7IDAgfTsgLy8gRm9yIHZhcmFyZ3M6IHRoZSBw
cm9maWxlZCBtYXhpbXVtIG51bWJlciBvZiBhcmd1bWVudHMuIEZvciBkaXJlY3Q6IHRoZSBudW1i
ZXIgb2Ygc3RhY2sgc2xvdHMgYWxsb2NhdGVkIGZvciBhcmd1bWVudHMuCiB9OwogCiBpbmxpbmUg
Q29kZU9yaWdpbiBnZXRDYWxsTGlua0luZm9Db2RlT3JpZ2luKENhbGxMaW5rSW5mbyYgY2FsbExp
bmtJbmZvKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxl
ci5jcHAJKHJldmlzaW9uIDI3NzQ0MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
SklUQ29tcGlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTcsMzEgKzI1NywxOCBAQCB2b2lk
IEpJVENvbXBpbGVyOjpsaW5rKExpbmtCdWZmZXImIGxpbmtCCiAgICAgZmluYWxpemVJbmxpbmVD
YWNoZXMobV9pbnN0YW5jZU9mcywgbGlua0J1ZmZlcik7CiAgICAgZmluYWxpemVJbmxpbmVDYWNo
ZXMobV9wcml2YXRlQnJhbmRBY2Nlc3NlcywgbGlua0J1ZmZlcik7CiAKLSAgICBhdXRvIGxpbmtD
YWxsVGh1bmsgPSBGdW5jdGlvblB0cjxOb1B0clRhZz4odm0oKS5nZXRDVElTdHViKGxpbmtDYWxs
VGh1bmtHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAgICAgZm9yIChhdXRv
JiByZWNvcmQgOiBtX2pzQ2FsbHMpIHsKICAgICAgICAgQ2FsbExpbmtJbmZvJiBpbmZvID0gKnJl
Y29yZC5pbmZvOwotICAgICAgICBsaW5rQnVmZmVyLmxpbmsocmVjb3JkLnNsb3dDYWxsLCBsaW5r
Q2FsbFRodW5rKTsKLSAgICAgICAgaW5mby5zZXRDYWxsTG9jYXRpb25zKAotICAgICAgICAgICAg
Q29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4obGlua0J1ZmZlci5sb2NhdGlvbk9m
TmVhckNhbGw8SlNJbnRlcm5hbFB0clRhZz4ocmVjb3JkLnNsb3dDYWxsKSksCi0gICAgICAgICAg
ICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPihsaW5rQnVmZmVyLmxvY2F0aW9u
T2Y8SlNJbnRlcm5hbFB0clRhZz4ocmVjb3JkLnRhcmdldFRvQ2hlY2spKSwKLSAgICAgICAgICAg
IGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPEpTSW50ZXJuYWxQdHJUYWc+KHJlY29yZC5m
YXN0Q2FsbCkpOworICAgICAgICBpbmZvLnNldENvZGVMb2NhdGlvbnMoCisgICAgICAgICAgICBs
aW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4ocmVjb3JkLnNsb3dQYXRoU3Rh
cnQpLAorICAgICAgICAgICAgbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+
KHJlY29yZC5kb25lTG9jYXRpb24pKTsKICAgICB9CiAgICAgCi0gICAgZm9yIChKU0RpcmVjdENh
bGxSZWNvcmQmIHJlY29yZCA6IG1fanNEaXJlY3RDYWxscykgeworICAgIGZvciAoYXV0byYgcmVj
b3JkIDogbV9qc0RpcmVjdENhbGxzKSB7CiAgICAgICAgIENhbGxMaW5rSW5mbyYgaW5mbyA9ICpy
ZWNvcmQuaW5mbzsKLSAgICAgICAgbGlua0J1ZmZlci5saW5rKHJlY29yZC5jYWxsLCBsaW5rQnVm
ZmVyLmxvY2F0aW9uT2Y8Tm9QdHJUYWc+KHJlY29yZC5zbG93UGF0aCkpOwotICAgICAgICBpbmZv
LnNldENhbGxMb2NhdGlvbnMoCi0gICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVy
bmFsUHRyVGFnPigpLAorICAgICAgICBpbmZvLnNldENvZGVMb2NhdGlvbnMoCiAgICAgICAgICAg
ICBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4ocmVjb3JkLnNsb3dQYXRo
KSwKLSAgICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPEpTSW50ZXJuYWxQ
dHJUYWc+KHJlY29yZC5jYWxsKSk7Ci0gICAgfQotICAgIAotICAgIGZvciAoSlNEaXJlY3RUYWls
Q2FsbFJlY29yZCYgcmVjb3JkIDogbV9qc0RpcmVjdFRhaWxDYWxscykgewotICAgICAgICBDYWxs
TGlua0luZm8mIGluZm8gPSAqcmVjb3JkLmluZm87Ci0gICAgICAgIGluZm8uc2V0Q2FsbExvY2F0
aW9ucygKLSAgICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFn
PihyZWNvcmQucGF0Y2hhYmxlSnVtcCksCi0gICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9u
T2Y8SlNJbnRlcm5hbFB0clRhZz4ocmVjb3JkLnNsb3dQYXRoKSwKLSAgICAgICAgICAgIGxpbmtC
dWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPEpTSW50ZXJuYWxQdHJUYWc+KHJlY29yZC5jYWxsKSk7
CisgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPigpKTsKICAg
ICB9CiAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgJKHJldmlzaW9uIDI3NzQ0MCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
MjE5LDE5ICsyMTksMTQgQEAgcHVibGljOgogICAgICAgICBtX3ByaXZhdGVCcmFuZEFjY2Vzc2Vz
LmFwcGVuZChJbmxpbmVDYWNoZVdyYXBwZXI8SklUUHJpdmF0ZUJyYW5kQWNjZXNzR2VuZXJhdG9y
PihnZW4sIHNsb3dQYXRoKSk7CiAgICAgfQogCi0gICAgdm9pZCBhZGRKU0NhbGwoQ2FsbCBmYXN0
Q2FsbCwgQ2FsbCBzbG93Q2FsbCwgRGF0YUxhYmVsUHRyIHRhcmdldFRvQ2hlY2ssIENhbGxMaW5r
SW5mbyogaW5mbykKKyAgICB2b2lkIGFkZEpTQ2FsbChMYWJlbCBzbG93UGF0aFN0YXJ0LCBMYWJl
bCBkb25lTG9jYXRpb24sIENhbGxMaW5rSW5mbyogaW5mbykKICAgICB7Ci0gICAgICAgIG1fanND
YWxscy5hcHBlbmQoSlNDYWxsUmVjb3JkKGZhc3RDYWxsLCBzbG93Q2FsbCwgdGFyZ2V0VG9DaGVj
aywgaW5mbykpOworICAgICAgICBtX2pzQ2FsbHMuYXBwZW5kKEpTQ2FsbFJlY29yZChzbG93UGF0
aFN0YXJ0LCBkb25lTG9jYXRpb24sIGluZm8pKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBhZGRK
U0RpcmVjdENhbGwoQ2FsbCBjYWxsLCBMYWJlbCBzbG93UGF0aCwgQ2FsbExpbmtJbmZvKiBpbmZv
KQorICAgIHZvaWQgYWRkSlNEaXJlY3RDYWxsKExhYmVsIHNsb3dQYXRoLCBDYWxsTGlua0luZm8q
IGluZm8pCiAgICAgewotICAgICAgICBtX2pzRGlyZWN0Q2FsbHMuYXBwZW5kKEpTRGlyZWN0Q2Fs
bFJlY29yZChjYWxsLCBzbG93UGF0aCwgaW5mbykpOwotICAgIH0KLSAgICAKLSAgICB2b2lkIGFk
ZEpTRGlyZWN0VGFpbENhbGwoUGF0Y2hhYmxlSnVtcCBwYXRjaGFibGVKdW1wLCBDYWxsIGNhbGws
IExhYmVsIHNsb3dQYXRoLCBDYWxsTGlua0luZm8qIGluZm8pCi0gICAgewotICAgICAgICBtX2pz
RGlyZWN0VGFpbENhbGxzLmFwcGVuZChKU0RpcmVjdFRhaWxDYWxsUmVjb3JkKHBhdGNoYWJsZUp1
bXAsIGNhbGwsIHNsb3dQYXRoLCBpbmZvKSk7CisgICAgICAgIG1fanNEaXJlY3RDYWxscy5hcHBl
bmQoSlNEaXJlY3RDYWxsUmVjb3JkKHNsb3dQYXRoLCBpbmZvKSk7CiAgICAgfQogICAgIAogICAg
IHZvaWQgYWRkV2Vha1JlZmVyZW5jZShKU0NlbGwqIHRhcmdldCkKQEAgLTMyOCw1MiArMzIzLDI4
IEBAIHByaXZhdGU6CiAKIAogICAgIHN0cnVjdCBKU0NhbGxSZWNvcmQgewotICAgICAgICBKU0Nh
bGxSZWNvcmQoQ2FsbCBmYXN0Q2FsbCwgQ2FsbCBzbG93Q2FsbCwgRGF0YUxhYmVsUHRyIHRhcmdl
dFRvQ2hlY2ssIENhbGxMaW5rSW5mbyogaW5mbykKLSAgICAgICAgICAgIDogZmFzdENhbGwoZmFz
dENhbGwpCi0gICAgICAgICAgICAsIHNsb3dDYWxsKHNsb3dDYWxsKQotICAgICAgICAgICAgLCB0
YXJnZXRUb0NoZWNrKHRhcmdldFRvQ2hlY2spCisgICAgICAgIEpTQ2FsbFJlY29yZChMYWJlbCBz
bG93UGF0aFN0YXJ0LCBMYWJlbCBkb25lTG9jYXRpb24sIENhbGxMaW5rSW5mbyogaW5mbykKKyAg
ICAgICAgICAgIDogc2xvd1BhdGhTdGFydChzbG93UGF0aFN0YXJ0KQorICAgICAgICAgICAgLCBk
b25lTG9jYXRpb24oZG9uZUxvY2F0aW9uKQogICAgICAgICAgICAgLCBpbmZvKGluZm8pCiAgICAg
ICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChmYXN0Q2FsbC5pc0ZsYWdTZXQoQ2FsbDo6TmVhcikp
OwotICAgICAgICAgICAgQVNTRVJUKHNsb3dDYWxsLmlzRmxhZ1NldChDYWxsOjpOZWFyKSk7CiAg
ICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIENhbGwgZmFzdENhbGw7Ci0gICAgICAgIENhbGwg
c2xvd0NhbGw7Ci0gICAgICAgIERhdGFMYWJlbFB0ciB0YXJnZXRUb0NoZWNrOworICAgICAgICBM
YWJlbCBzbG93UGF0aFN0YXJ0OworICAgICAgICBMYWJlbCBkb25lTG9jYXRpb247CiAgICAgICAg
IENhbGxMaW5rSW5mbyogaW5mbzsKICAgICB9OwogICAgIAogICAgIHN0cnVjdCBKU0RpcmVjdENh
bGxSZWNvcmQgewotICAgICAgICBKU0RpcmVjdENhbGxSZWNvcmQoQ2FsbCBjYWxsLCBMYWJlbCBz
bG93UGF0aCwgQ2FsbExpbmtJbmZvKiBpbmZvKQotICAgICAgICAgICAgOiBjYWxsKGNhbGwpCi0g
ICAgICAgICAgICAsIHNsb3dQYXRoKHNsb3dQYXRoKQotICAgICAgICAgICAgLCBpbmZvKGluZm8p
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChjYWxsLmlzRmxhZ1NldChDYWxsOjpOZWFy
KSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIENhbGwgY2FsbDsKLSAgICAgICAgTGFi
ZWwgc2xvd1BhdGg7Ci0gICAgICAgIENhbGxMaW5rSW5mbyogaW5mbzsKLSAgICB9OwotICAgIAot
ICAgIHN0cnVjdCBKU0RpcmVjdFRhaWxDYWxsUmVjb3JkIHsKLSAgICAgICAgSlNEaXJlY3RUYWls
Q2FsbFJlY29yZChQYXRjaGFibGVKdW1wIHBhdGNoYWJsZUp1bXAsIENhbGwgY2FsbCwgTGFiZWwg
c2xvd1BhdGgsIENhbGxMaW5rSW5mbyogaW5mbykKLSAgICAgICAgICAgIDogcGF0Y2hhYmxlSnVt
cChwYXRjaGFibGVKdW1wKQotICAgICAgICAgICAgLCBjYWxsKGNhbGwpCi0gICAgICAgICAgICAs
IHNsb3dQYXRoKHNsb3dQYXRoKQorICAgICAgICBKU0RpcmVjdENhbGxSZWNvcmQoTGFiZWwgc2xv
d1BhdGgsIENhbGxMaW5rSW5mbyogaW5mbykKKyAgICAgICAgICAgIDogc2xvd1BhdGgoc2xvd1Bh
dGgpCiAgICAgICAgICAgICAsIGluZm8oaW5mbykKICAgICAgICAgewotICAgICAgICAgICAgQVNT
RVJUKGNhbGwuaXNGbGFnU2V0KENhbGw6Ok5lYXIpICYmIGNhbGwuaXNGbGFnU2V0KENhbGw6OlRh
aWwpKTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgUGF0Y2hhYmxlSnVtcCBwYXRjaGFi
bGVKdW1wOwotICAgICAgICBDYWxsIGNhbGw7CiAgICAgICAgIExhYmVsIHNsb3dQYXRoOwogICAg
ICAgICBDYWxsTGlua0luZm8qIGluZm87CiAgICAgfTsKLQogICAgIAogICAgIFZlY3RvcjxJbmxp
bmVDYWNoZVdyYXBwZXI8SklUR2V0QnlJZEdlbmVyYXRvcj4sIDQ+IG1fZ2V0QnlJZHM7CiAgICAg
VmVjdG9yPElubGluZUNhY2hlV3JhcHBlcjxKSVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3I+LCA0
PiBtX2dldEJ5SWRzV2l0aFRoaXM7CkBAIC0zODYsNyArMzU3LDYgQEAgcHJpdmF0ZToKICAgICBW
ZWN0b3I8SW5saW5lQ2FjaGVXcmFwcGVyPEpJVFByaXZhdGVCcmFuZEFjY2Vzc0dlbmVyYXRvcj4s
IDQ+IG1fcHJpdmF0ZUJyYW5kQWNjZXNzZXM7CiAgICAgVmVjdG9yPEpTQ2FsbFJlY29yZCwgND4g
bV9qc0NhbGxzOwogICAgIFZlY3RvcjxKU0RpcmVjdENhbGxSZWNvcmQsIDQ+IG1fanNEaXJlY3RD
YWxsczsKLSAgICBWZWN0b3I8SlNEaXJlY3RUYWlsQ2FsbFJlY29yZCwgND4gbV9qc0RpcmVjdFRh
aWxDYWxsczsKICAgICBTZWdtZW50ZWRWZWN0b3I8T1NSRXhpdENvbXBpbGF0aW9uSW5mbywgND4g
bV9leGl0Q29tcGlsYXRpb25JbmZvOwogICAgIFZlY3RvcjxWZWN0b3I8TGFiZWw+PiBtX2V4aXRT
aXRlTGFiZWxzOwogICAgIFZlY3RvcjxERkc6Ok9TUkVudHJ5RGF0YT4gbV9vc3JFbnRyeTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21w
aWxlckNvbW1vbi5jcHAJKHJldmlzaW9uIDI3NzQ0MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA5
LDcgKzIwOSw3IEBAIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clQKICAg
ICAgICAgICAgICAgICBiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlci0+Z2V0Q2FsbExpbmtJbmZv
Rm9yQnl0ZWNvZGVJbmRleChjYWxsQnl0ZWNvZGVJbmRleCk7CiAgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVChjYWxsTGlua0luZm8pOwogCi0gICAgICAgICAgICBqdW1wVGFyZ2V0ID0gY2FsbExp
bmtJbmZvLT5jYWxsUmV0dXJuTG9jYXRpb24oKS5yZXRhZ2dlZDxKU0VudHJ5UHRyVGFnPigpOwor
ICAgICAgICAgICAganVtcFRhcmdldCA9IGNhbGxMaW5rSW5mby0+ZG9uZUxvY2F0aW9uKCkucmV0
YWdnZWQ8SlNFbnRyeVB0clRhZz4oKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkocmV2
aXNpb24gMjc3NDQwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25z
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYxNiw3ICszNjE2LDcgQEAgSlNDX0RFRklORV9KSVRf
T1BFUkFUSU9OKG9wZXJhdGlvbkxpbmtEaQogICAgICAgICAgICAgY29kZVB0ciA9IGZ1bmN0aW9u
RXhlY3V0YWJsZS0+ZW50cnlwb2ludEZvcihraW5kLCBBcml0eUNoZWNrTm90UmVxdWlyZWQpOwog
ICAgIH0KICAgICAKLSAgICBsaW5rRGlyZWN0Rm9yKGNhbGxGcmFtZSwgKmNhbGxMaW5rSW5mbywg
Y29kZUJsb2NrLCBjb2RlUHRyKTsKKyAgICBsaW5rRGlyZWN0Q2FsbChjYWxsRnJhbWUsICpjYWxs
TGlua0luZm8sIGNvZGVCbG9jaywgY29kZVB0cik7CiB9CiAKIEpTQ19ERUZJTkVfSklUX09QRVJB
VElPTihvcGVyYXRpb25UcmlnZ2VyUmVvcHRpbWl6YXRpb25Ob3csIHZvaWQsIChDb2RlQmxvY2sq
IGNvZGVCbG9jaywgQ29kZUJsb2NrKiBvcHRpbWl6ZWRDb2RlQmxvY2ssIE9TUkV4aXRCYXNlKiBl
eGl0KSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQz
Ml82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVDMyXzY0LmNwcAkocmV2aXNpb24gMjc3NDQwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
ODM4LDE5ICs4MzgsMTYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9k
ZQogICAgICAgICBpZiAoaXNUYWlsKSB7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChub2Rl
LT5vcCgpID09IERpcmVjdFRhaWxDYWxsKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgSklU
Q29tcGlsZXI6OlBhdGNoYWJsZUp1bXAgcGF0Y2hhYmxlSnVtcCA9IG1faml0LnBhdGNoYWJsZUp1
bXAoKTsKICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpMYWJlbCBtYWluUGF0aCA9IG1faml0Lmxh
YmVsKCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIG1faml0LmVtaXRTdG9yZUNhbGxTaXRl
SW5kZXgoY2FsbFNpdGUpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBpbmZvLT5zZXRGcmFt
ZVNodWZmbGVEYXRhKHNodWZmbGVEYXRhKTsKLSAgICAgICAgICAgIENhbGxGcmFtZVNodWZmbGVy
KG1faml0LCBzaHVmZmxlRGF0YSkucHJlcGFyZUZvclRhaWxDYWxsKCk7Ci0gICAgICAgICAgICAK
LSAgICAgICAgICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGwgPSBtX2ppdC5uZWFyVGFpbENhbGwo
KTsKLSAgICAgICAgICAgIAorICAgICAgICAgICAgaW5mby0+ZW1pdERpcmVjdFRhaWxDYWxsRmFz
dFBhdGgobV9qaXQsIFsmXSB7CisgICAgICAgICAgICAgICAgaW5mby0+c2V0RnJhbWVTaHVmZmxl
RGF0YShzaHVmZmxlRGF0YSk7CisgICAgICAgICAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIobV9q
aXQsIHNodWZmbGVEYXRhKS5wcmVwYXJlRm9yVGFpbENhbGwoKTsKKyAgICAgICAgICAgIH0pOwor
CiAgICAgICAgICAgICBKSVRDb21waWxlcjo6TGFiZWwgc2xvd1BhdGggPSBtX2ppdC5sYWJlbCgp
OwotICAgICAgICAgICAgcGF0Y2hhYmxlSnVtcC5tX2p1bXAubGlua1RvKHNsb3dQYXRoLCAmbV9q
aXQpOwotICAgICAgICAgICAgCiAgICAgICAgICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhJ
bnZhbGlkR1BSUmVnKTsKICAgICAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTGlua0Rp
cmVjdENhbGwsIGluZm8sIGNhbGxlZVBheWxvYWRHUFIpOwogICAgICAgICAgICAgc2lsZW50Rmls
bEFsbFJlZ2lzdGVycygpOwpAQCAtODU5LDcgKzg1Niw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmVtaXRDYWxsKE5vZGUqIG5vZGUKICAgICAgICAgICAgIAogICAgICAgICAgICAgdXNlQ2hpbGRy
ZW4obm9kZSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIG1faml0LmFkZEpTRGlyZWN0VGFp
bENhbGwocGF0Y2hhYmxlSnVtcCwgY2FsbCwgc2xvd1BhdGgsIGluZm8pOworICAgICAgICAgICAg
bV9qaXQuYWRkSlNEaXJlY3RDYWxsKHNsb3dQYXRoLCBpbmZvKTsKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgfQogICAgICAgICAKQEAgLTg2Nyw3ICs4NjQsNyBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjplbWl0Q2FsbChOb2RlKiBub2RlCiAgICAgICAgIAogICAgICAgICBtX2ppdC5lbWl0
U3RvcmVDYWxsU2l0ZUluZGV4KGNhbGxTaXRlKTsKICAgICAgICAgCi0gICAgICAgIEpJVENvbXBp
bGVyOjpDYWxsIGNhbGwgPSBtX2ppdC5uZWFyQ2FsbCgpOworICAgICAgICBpbmZvLT5lbWl0RGly
ZWN0RmFzdFBhdGgobV9qaXQpOwogICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBkb25lID0gbV9q
aXQuanVtcCgpOwogICAgICAgICAKICAgICAgICAgSklUQ29tcGlsZXI6OkxhYmVsIHNsb3dQYXRo
ID0gbV9qaXQubGFiZWwoKTsKQEAgLTg3OSw3ICs4NzYsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
OjplbWl0Q2FsbChOb2RlKiBub2RlCiAgICAgICAgIAogICAgICAgICBzZXRSZXN1bHRBbmRSZXNl
dFN0YWNrKCk7CiAgICAgICAgIAotICAgICAgICBtX2ppdC5hZGRKU0RpcmVjdENhbGwoY2FsbCwg
c2xvd1BhdGgsIGluZm8pOworICAgICAgICBtX2ppdC5hZGRKU0RpcmVjdENhbGwoc2xvd1BhdGgs
IGluZm8pOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIApAQCAtODg4LDIxICs4ODUsMjUg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZQogICAgIHNsb3dQYXRo
LmFwcGVuZChtX2ppdC5icmFuY2hJZk5vdENlbGwoSlNWYWx1ZVJlZ3MoY2FsbGVlVGFnR1BSLCBj
YWxsZWVQYXlsb2FkR1BSKSkpOwogICAgIHNsb3dQYXRoLmFwcGVuZChtX2ppdC5icmFuY2hQdHJX
aXRoUGF0Y2goTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBjYWxsZWVQYXlsb2FkR1BSLCB0YXJn
ZXRUb0NoZWNrKSk7CiAKKyAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dDYXNlczsKICAg
ICBpZiAoaXNUYWlsKSB7Ci0gICAgICAgIGlmIChub2RlLT5vcCgpID09IFRhaWxDYWxsKSB7Ci0g
ICAgICAgICAgICBpbmZvLT5zZXRGcmFtZVNodWZmbGVEYXRhKHNodWZmbGVEYXRhKTsKLSAgICAg
ICAgICAgIENhbGxGcmFtZVNodWZmbGVyKG1faml0LCBzaHVmZmxlRGF0YSkucHJlcGFyZUZvclRh
aWxDYWxsKCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBtX2ppdC5lbWl0UmVzdG9y
ZUNhbGxlZVNhdmVzKCk7Ci0gICAgICAgICAgICBtX2ppdC5wcmVwYXJlRm9yVGFpbENhbGxTbG93
KCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBmYXN0Q2FsbCA9
IGlzVGFpbCA/IG1faml0Lm5lYXJUYWlsQ2FsbCgpIDogbV9qaXQubmVhckNhbGwoKTsKKyAgICAg
ICAgc2xvd0Nhc2VzID0gaW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgobV9qaXQsIGNhbGxlZVBh
eWxvYWRHUFIsIEludmFsaWRHUFJSZWcsIENhbGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpObywgWyZd
IHsKKyAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IFRhaWxDYWxsKSB7CisgICAgICAgICAg
ICAgICAgaW5mby0+c2V0RnJhbWVTaHVmZmxlRGF0YShzaHVmZmxlRGF0YSk7CisgICAgICAgICAg
ICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIobV9qaXQsIHNodWZmbGVEYXRhKS5wcmVwYXJlRm9yVGFp
bENhbGwoKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgbV9qaXQuZW1p
dFJlc3RvcmVDYWxsZWVTYXZlcygpOworICAgICAgICAgICAgICAgIG1faml0LnByZXBhcmVGb3JU
YWlsQ2FsbFNsb3coKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgfSBlbHNlCisg
ICAgICAgIHNsb3dDYXNlcyA9IGluZm8tPmVtaXRGYXN0UGF0aChtX2ppdCwgY2FsbGVlUGF5bG9h
ZEdQUiwgSW52YWxpZEdQUlJlZywgQ2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6Ok5vKTsKIAogICAg
IEpJVENvbXBpbGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7CiAKICAgICBzbG93UGF0aC5s
aW5rKCZtX2ppdCk7CisgICAgc2xvd0Nhc2VzLmxpbmsoJm1faml0KTsKKyAgICBhdXRvIHNsb3dQ
YXRoU3RhcnQgPSBtX2ppdC5sYWJlbCgpOwogCiAgICAgaWYgKG5vZGUtPm9wKCkgPT0gVGFpbENh
bGwpIHsKICAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIgY2FsbEZyYW1lU2h1ZmZsZXIobV9qaXQs
IHNodWZmbGVEYXRhKTsKQEAgLTkyNywxOCArOTI4LDE4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmVtaXRDYWxsKE5vZGUqIG5vZGUKICAgICAgICAgICAgIG1faml0LmVtaXRSZXN0b3JlQ2FsbGVl
U2F2ZXMoKTsKICAgICB9CiAKLSAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIoaW5mbyksIEdQ
UkluZm86OnJlZ1QyKTsKICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVy
KG1fZ3JhcGgsIGdsb2JhbE9iamVjdCksIEdQUkluZm86OnJlZ1QzKTsKLSAgICBKSVRDb21waWxl
cjo6Q2FsbCBzbG93Q2FsbCA9IG1faml0Lm5lYXJDYWxsKCk7CisgICAgaW5mby0+ZW1pdFNsb3dQ
YXRoKHZtKCksIG1faml0KTsKIAogICAgIGRvbmUubGluaygmbV9qaXQpOworICAgIGF1dG8gZG9u
ZUxvY2F0aW9uID0gbV9qaXQubGFiZWwoKTsKIAogICAgIGlmIChpc1RhaWwpCiAgICAgICAgIG1f
aml0LmFib3J0V2l0aFJlYXNvbihKSVREaWRSZXR1cm5Gcm9tVGFpbENhbGwpOwogICAgIGVsc2UK
ICAgICAgICAgc2V0UmVzdWx0QW5kUmVzZXRTdGFjaygpOwogCi0gICAgbV9qaXQuYWRkSlNDYWxs
KGZhc3RDYWxsLCBzbG93Q2FsbCwgdGFyZ2V0VG9DaGVjaywgaW5mbyk7CisgICAgbV9qaXQuYWRk
SlNDYWxsKHNsb3dQYXRoU3RhcnQsIGRvbmVMb2NhdGlvbiwgaW5mbyk7CiB9CiAKIHRlbXBsYXRl
PGJvb2wgc3RyaWN0PgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVDY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklUNjQuY3BwCShyZXZpc2lvbiAyNzc0NDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04
MzAsMTggKzgzMCwxNCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlKiBub2Rl
CiAgICAgICAgIGlmIChpc1RhaWwpIHsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG5vZGUt
Pm9wKCkgPT0gRGlyZWN0VGFpbENhbGwpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBKSVRD
b21waWxlcjo6UGF0Y2hhYmxlSnVtcCBwYXRjaGFibGVKdW1wID0gbV9qaXQucGF0Y2hhYmxlSnVt
cCgpOwogICAgICAgICAgICAgSklUQ29tcGlsZXI6OkxhYmVsIG1haW5QYXRoID0gbV9qaXQubGFi
ZWwoKTsKLSAgICAgICAgICAgIAogICAgICAgICAgICAgbV9qaXQuZW1pdFN0b3JlQ2FsbFNpdGVJ
bmRleChjYWxsU2l0ZSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+
c2V0RnJhbWVTaHVmZmxlRGF0YShzaHVmZmxlRGF0YSk7Ci0gICAgICAgICAgICBDYWxsRnJhbWVT
aHVmZmxlcihtX2ppdCwgc2h1ZmZsZURhdGEpLnByZXBhcmVGb3JUYWlsQ2FsbCgpOwotICAgICAg
ICAgICAgCi0gICAgICAgICAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsID0gbV9qaXQubmVhclRh
aWxDYWxsKCk7Ci0gICAgICAgICAgICAKKworICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5lbWl0
RGlyZWN0VGFpbENhbGxGYXN0UGF0aChtX2ppdCwgWyZdIHsKKyAgICAgICAgICAgICAgICBjYWxs
TGlua0luZm8tPnNldEZyYW1lU2h1ZmZsZURhdGEoc2h1ZmZsZURhdGEpOworICAgICAgICAgICAg
ICAgIENhbGxGcmFtZVNodWZmbGVyKG1faml0LCBzaHVmZmxlRGF0YSkucHJlcGFyZUZvclRhaWxD
YWxsKCk7CisgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpMYWJlbCBz
bG93UGF0aCA9IG1faml0LmxhYmVsKCk7Ci0gICAgICAgICAgICBwYXRjaGFibGVKdW1wLm1fanVt
cC5saW5rVG8oc2xvd1BhdGgsICZtX2ppdCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIHNp
bGVudFNwaWxsQWxsUmVnaXN0ZXJzKEludmFsaWRHUFJSZWcpOwogICAgICAgICAgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25MaW5rRGlyZWN0Q2FsbCwgY2FsbExpbmtJbmZvLCBjYWxsZWVHUFIp
OwpAQCAtODUxLDE1ICs4NDcsMTMgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9k
ZSogbm9kZQogICAgICAgICAgICAgCiAgICAgICAgICAgICB1c2VDaGlsZHJlbihub2RlKTsKICAg
ICAgICAgICAgIAotICAgICAgICAgICAgbV9qaXQuYWRkSlNEaXJlY3RUYWlsQ2FsbChwYXRjaGFi
bGVKdW1wLCBjYWxsLCBzbG93UGF0aCwgY2FsbExpbmtJbmZvKTsKKyAgICAgICAgICAgIG1faml0
LmFkZEpTRGlyZWN0Q2FsbChzbG93UGF0aCwgY2FsbExpbmtJbmZvKTsKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgSklUQ29tcGlsZXI6OkxhYmVsIG1h
aW5QYXRoID0gbV9qaXQubGFiZWwoKTsKLSAgICAgICAgCiAgICAgICAgIG1faml0LmVtaXRTdG9y
ZUNhbGxTaXRlSW5kZXgoY2FsbFNpdGUpOwotICAgICAgICAKLSAgICAgICAgSklUQ29tcGlsZXI6
OkNhbGwgY2FsbCA9IG1faml0Lm5lYXJDYWxsKCk7CisgICAgICAgIGNhbGxMaW5rSW5mby0+ZW1p
dERpcmVjdEZhc3RQYXRoKG1faml0KTsKICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgZG9uZSA9
IG1faml0Lmp1bXAoKTsKICAgICAgICAgCiAgICAgICAgIEpJVENvbXBpbGVyOjpMYWJlbCBzbG93
UGF0aCA9IG1faml0LmxhYmVsKCk7CkBAIC04NzQsMzAgKzg2OCwyOSBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjplbWl0Q2FsbChOb2RlKiBub2RlCiAgICAgICAgIAogICAgICAgICBzZXRSZXN1bHRB
bmRSZXNldFN0YWNrKCk7CiAgICAgICAgIAotICAgICAgICBtX2ppdC5hZGRKU0RpcmVjdENhbGwo
Y2FsbCwgc2xvd1BhdGgsIGNhbGxMaW5rSW5mbyk7CisgICAgICAgIG1faml0LmFkZEpTRGlyZWN0
Q2FsbChzbG93UGF0aCwgY2FsbExpbmtJbmZvKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAg
ICAKICAgICBtX2ppdC5lbWl0U3RvcmVDYWxsU2l0ZUluZGV4KGNhbGxTaXRlKTsKICAgICAKLSAg
ICBKSVRDb21waWxlcjo6RGF0YUxhYmVsUHRyIHRhcmdldFRvQ2hlY2s7Ci0gICAgSklUQ29tcGls
ZXI6Okp1bXAgc2xvd1BhdGggPSBtX2ppdC5icmFuY2hQdHJXaXRoUGF0Y2goTWFjcm9Bc3NlbWJs
ZXI6Ok5vdEVxdWFsLCBjYWxsZWVHUFIsIHRhcmdldFRvQ2hlY2ssIFRydXN0ZWRJbW1QdHIobnVs
bHB0cikpOwotCisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93Q2FzZXM7CiAgICAgaWYg
KGlzVGFpbCkgewotICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBUYWlsQ2FsbCkgewotICAgICAg
ICAgICAgY2FsbExpbmtJbmZvLT5zZXRGcmFtZVNodWZmbGVEYXRhKHNodWZmbGVEYXRhKTsKLSAg
ICAgICAgICAgIENhbGxGcmFtZVNodWZmbGVyKG1faml0LCBzaHVmZmxlRGF0YSkucHJlcGFyZUZv
clRhaWxDYWxsKCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBtX2ppdC5lbWl0UmVz
dG9yZUNhbGxlZVNhdmVzKCk7Ci0gICAgICAgICAgICBtX2ppdC5wcmVwYXJlRm9yVGFpbENhbGxT
bG93KCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBmYXN0Q2Fs
bCA9IGlzVGFpbCA/IG1faml0Lm5lYXJUYWlsQ2FsbCgpIDogbV9qaXQubmVhckNhbGwoKTsKLQor
ICAgICAgICBzbG93Q2FzZXMgPSBjYWxsTGlua0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKG1f
aml0LCBjYWxsZWVHUFIsIEludmFsaWRHUFJSZWcsIENhbGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpO
bywgWyZdIHsKKyAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IFRhaWxDYWxsKSB7CisgICAg
ICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRGcmFtZVNodWZmbGVEYXRhKHNodWZmbGVEYXRh
KTsKKyAgICAgICAgICAgICAgICBDYWxsRnJhbWVTaHVmZmxlcihtX2ppdCwgc2h1ZmZsZURhdGEp
LnByZXBhcmVGb3JUYWlsQ2FsbCgpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICBtX2ppdC5lbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CisgICAgICAgICAgICAgICAgbV9q
aXQucHJlcGFyZUZvclRhaWxDYWxsU2xvdygpOworICAgICAgICAgICAgfQorICAgICAgICB9KTsK
KyAgICB9IGVsc2UKKyAgICAgICAgc2xvd0Nhc2VzID0gY2FsbExpbmtJbmZvLT5lbWl0RmFzdFBh
dGgobV9qaXQsIGNhbGxlZUdQUiwgSW52YWxpZEdQUlJlZywgQ2FsbExpbmtJbmZvOjpVc2VEYXRh
SUM6Ok5vKTsKICAgICBKSVRDb21waWxlcjo6SnVtcCBkb25lID0gbV9qaXQuanVtcCgpOwogCi0g
ICAgc2xvd1BhdGgubGluaygmbV9qaXQpOworICAgIHNsb3dDYXNlcy5saW5rKCZtX2ppdCk7Cisg
ICAgYXV0byBzbG93UGF0aFN0YXJ0ID0gbV9qaXQubGFiZWwoKTsKIAogICAgIGlmIChub2RlLT5v
cCgpID09IFRhaWxDYWxsKSB7CiAgICAgICAgIENhbGxGcmFtZVNodWZmbGVyIGNhbGxGcmFtZVNo
dWZmbGVyKG1faml0LCBzaHVmZmxlRGF0YSk7CkBAIC05MDUsMjMgKzg5OCwyMiBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlKiBub2RlCiAgICAgICAgIGNhbGxGcmFtZVNodWZm
bGVyLnByZXBhcmVGb3JTbG93UGF0aCgpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIG1faml0Lm1v
dmUoY2FsbGVlR1BSLCBHUFJJbmZvOjpyZWdUMCk7IC8vIENhbGxlZSBuZWVkcyB0byBiZSBpbiBy
ZWdUMAotCiAgICAgICAgIGlmIChpc1RhaWwpCiAgICAgICAgICAgICBtX2ppdC5lbWl0UmVzdG9y
ZUNhbGxlZVNhdmVzKCk7IC8vIFRoaXMgbmVlZHMgdG8gaGFwcGVuIGFmdGVyIHdlIG1vdmVkIGNh
bGxlZUdQUiB0byByZWdUMAogICAgIH0KIAotICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cihj
YWxsTGlua0luZm8pLCBHUFJJbmZvOjpyZWdUMik7IC8vIExpbmsgaW5mbyBuZWVkcyB0byBiZSBp
biByZWdUMgogICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFw
aCwgZ2xvYmFsT2JqZWN0KSwgR1BSSW5mbzo6cmVnVDMpOyAvLyBKU0dsb2JhbE9iamVjdCBuZWVk
cyB0byBiZSBpbiByZWdUMwotICAgIEpJVENvbXBpbGVyOjpDYWxsIHNsb3dDYWxsID0gbV9qaXQu
bmVhckNhbGwoKTsKKyAgICBjYWxsTGlua0luZm8tPmVtaXRTbG93UGF0aCh2bSgpLCBtX2ppdCk7
CiAKICAgICBkb25lLmxpbmsoJm1faml0KTsKKyAgICBhdXRvIGRvbmVMb2NhdGlvbiA9IG1faml0
LmxhYmVsKCk7CiAKICAgICBpZiAoaXNUYWlsKQogICAgICAgICBtX2ppdC5hYm9ydFdpdGhSZWFz
b24oSklURGlkUmV0dXJuRnJvbVRhaWxDYWxsKTsKICAgICBlbHNlCiAgICAgICAgIHNldFJlc3Vs
dEFuZFJlc2V0U3RhY2soKTsKIAotICAgIG1faml0LmFkZEpTQ2FsbChmYXN0Q2FsbCwgc2xvd0Nh
bGwsIHRhcmdldFRvQ2hlY2ssIGNhbGxMaW5rSW5mbyk7CisgICAgbV9qaXQuYWRkSlNDYWxsKHNs
b3dQYXRoU3RhcnQsIGRvbmVMb2NhdGlvbiwgY2FsbExpbmtJbmZvKTsKIH0KIAogLy8gQ2xhbmcg
c2hvdWxkIGFsbG93IHVucmVhY2hhYmxlIFtbY2xhbmc6OmZhbGx0aHJvdWdoXV0gaW4gdGVtcGxh
dGUgZnVuY3Rpb25zIGlmIGFueSB0ZW1wbGF0ZSBleHBhbnNpb24gdXNlcyBpdApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkocmV2aXNpb24g
Mjc3NDQwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC05NzE3LDI0ICs5NzE3LDIwIEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICAgICAgICAgIENDYWxsSGVscGVyczo6dGFnRm9yKFZpcnR1YWxSZWdpc3RlcihDYWxsRnJh
bWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykpKTsKIAogICAgICAgICAgICAgICAg
IENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvID0gaml0LmNvZGVCbG9jaygpLT5hZGRDYWxsTGlu
a0luZm8obm9kZS0+b3JpZ2luLnNlbWFudGljKTsKKyAgICAgICAgICAgICAgICBjYWxsTGlua0lu
Zm8tPnNldFVwQ2FsbCgKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+b3AoKSA9PSBDb25zdHJ1
Y3QgPyBDYWxsTGlua0luZm86OkNvbnN0cnVjdCA6IENhbGxMaW5rSW5mbzo6Q2FsbCwgR1BSSW5m
bzo6cmVnVDApOwogCi0gICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpEYXRhTGFiZWxQdHIg
dGFyZ2V0VG9DaGVjazsKLSAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgc2xvd1Bh
dGggPSBqaXQuYnJhbmNoUHRyV2l0aFBhdGNoKAotICAgICAgICAgICAgICAgICAgICBDQ2FsbEhl
bHBlcnM6Ok5vdEVxdWFsLCBHUFJJbmZvOjpyZWdUMCwgdGFyZ2V0VG9DaGVjaywKLSAgICAgICAg
ICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG51bGxwdHIpKTsKLQotICAg
ICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBmYXN0Q2FsbCA9IGppdC5uZWFyQ2FsbCgp
OworICAgICAgICAgICAgICAgIGF1dG8gc2xvd1BhdGggPSBjYWxsTGlua0luZm8tPmVtaXRGYXN0
UGF0aChqaXQsIEdQUkluZm86OnJlZ1QwLCBJbnZhbGlkR1BSUmVnLCBDYWxsTGlua0luZm86OlVz
ZURhdGFJQzo6Tm8pOwogICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBkb25lID0g
aml0Lmp1bXAoKTsKIAogICAgICAgICAgICAgICAgIHNsb3dQYXRoLmxpbmsoJmppdCk7Ci0KLSAg
ICAgICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoY2FsbExp
bmtJbmZvKSwgR1BSSW5mbzo6cmVnVDIpOworICAgICAgICAgICAgICAgIGF1dG8gc2xvd1BhdGhT
dGFydCA9IGppdC5sYWJlbCgpOwogICAgICAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbVB0cihqaXQuY29kZUJsb2NrKCktPmdsb2JhbE9iamVjdEZvcihub2RlLT5v
cmlnaW4uc2VtYW50aWMpKSwgR1BSSW5mbzo6cmVnVDMpOwotICAgICAgICAgICAgICAgIENDYWxs
SGVscGVyczo6Q2FsbCBzbG93Q2FsbCA9IGppdC5uZWFyQ2FsbCgpOworICAgICAgICAgICAgICAg
IGNhbGxMaW5rSW5mby0+ZW1pdFNsb3dQYXRoKCp2bSwgaml0KTsKKwogICAgICAgICAgICAgICAg
IGRvbmUubGluaygmaml0KTsKIAotICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0VXBD
YWxsKAotICAgICAgICAgICAgICAgICAgICBub2RlLT5vcCgpID09IENvbnN0cnVjdCA/IENhbGxM
aW5rSW5mbzo6Q29uc3RydWN0IDogQ2FsbExpbmtJbmZvOjpDYWxsLCBHUFJJbmZvOjpyZWdUMCk7
CisgICAgICAgICAgICAgICAgYXV0byBkb25lTG9jYXRpb24gPSBqaXQubGFiZWwoKTsKIAogICAg
ICAgICAgICAgICAgIGppdC5hZGRQdHIoCiAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbTMyKC1wYXJhbXMucHJvYygpLmZyYW1lU2l6ZSgpKSwKQEAgLTk3NDIsMTMg
Kzk3MzgsOSBAQCBwcml2YXRlOgogCiAgICAgICAgICAgICAgICAgaml0LmFkZExpbmtUYXNrKAog
ICAgICAgICAgICAgICAgICAgICBbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKSVRUaHVua1B0clRhZz4g
bGlua0NhbGwgPSB2bS0+Z2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5jb2RlKCk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoc2xvd0NhbGwsIEZ1bmN0
aW9uUHRyPEpJVFRodW5rUHRyVGFnPihsaW5rQ2FsbCkpOwotCi0gICAgICAgICAgICAgICAgICAg
ICAgICBjYWxsTGlua0luZm8tPnNldENhbGxMb2NhdGlvbnMoCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4obGlua0J1ZmZlci5s
b2NhdGlvbk9mTmVhckNhbGw8SlNJbnRlcm5hbFB0clRhZz4oc2xvd0NhbGwpKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPihs
aW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4odGFyZ2V0VG9DaGVjaykpLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxs
PEpTSW50ZXJuYWxQdHJUYWc+KGZhc3RDYWxsKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBj
YWxsTGlua0luZm8tPnNldENvZGVMb2NhdGlvbnMoCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KHNsb3dQYXRoU3RhcnQp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0lu
dGVybmFsUHRyVGFnPihkb25lTG9jYXRpb24pKTsKICAgICAgICAgICAgICAgICAgICAgfSk7CiAg
ICAgICAgICAgICB9KTsKIApAQCAtOTg1Nyw2MyArOTg0OSw1MCBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgICAgICAgICBzaHVmZmxlRGF0YS5zZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMoaml0LmNv
ZGVCbG9jaygpKTsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIENh
bGxMaW5rSW5mbyogY2FsbExpbmtJbmZvID0gaml0LmNvZGVCbG9jaygpLT5hZGRDYWxsTGlua0lu
Zm8obm9kZS0+b3JpZ2luLnNlbWFudGljKTsKKyAgICAgICAgICAgICAgICAgICAgY2FsbExpbmtJ
bmZvLT5zZXRVcENhbGwoQ2FsbExpbmtJbmZvOjpEaXJlY3RUYWlsQ2FsbCwgSW52YWxpZEdQUlJl
Zyk7CiAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBl
cnM6OlBhdGNoYWJsZUp1bXAgcGF0Y2hhYmxlSnVtcCA9IGppdC5wYXRjaGFibGVKdW1wKCk7CiAg
ICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6TGFiZWwgbWFpblBhdGggPSBqaXQubGFi
ZWwoKTsKLSAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIGppdC5zdG9y
ZTMyKAogICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIo
Y2FsbFNpdGVJbmRleC5iaXRzKCkpLAogICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxw
ZXJzOjp0YWdGb3IoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzKSkpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBj
YWxsTGlua0luZm8tPnNldEZyYW1lU2h1ZmZsZURhdGEoc2h1ZmZsZURhdGEpOwotICAgICAgICAg
ICAgICAgICAgICBDYWxsRnJhbWVTaHVmZmxlcihqaXQsIHNodWZmbGVEYXRhKS5wcmVwYXJlRm9y
VGFpbENhbGwoKTsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIEND
YWxsSGVscGVyczo6Q2FsbCBjYWxsID0gaml0Lm5lYXJUYWlsQ2FsbCgpOworICAgICAgICAgICAg
ICAgICAgICBjYWxsTGlua0luZm8tPmVtaXREaXJlY3RUYWlsQ2FsbEZhc3RQYXRoKGppdCwgWyZd
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0RnJhbWVTaHVmZmxl
RGF0YShzaHVmZmxlRGF0YSk7CisgICAgICAgICAgICAgICAgICAgICAgICBDYWxsRnJhbWVTaHVm
ZmxlcihqaXQsIHNodWZmbGVEYXRhKS5wcmVwYXJlRm9yVGFpbENhbGwoKTsKKyAgICAgICAgICAg
ICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBq
aXQuYWJvcnRXaXRoUmVhc29uKEpJVERpZFJldHVybkZyb21UYWlsQ2FsbCk7CiAgICAgICAgICAg
ICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkxhYmVsIHNsb3dQ
YXRoID0gaml0LmxhYmVsKCk7Ci0gICAgICAgICAgICAgICAgICAgIHBhdGNoYWJsZUp1bXAubV9q
dW1wLmxpbmtUbyhzbG93UGF0aCwgJmppdCk7CiAgICAgICAgICAgICAgICAgICAgIGNhbGxPcGVy
YXRpb24oCiAgICAgICAgICAgICAgICAgICAgICAgICAqc3RhdGUsIHRvU2F2ZSwgaml0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgbm9kZS0+b3JpZ2luLnNlbWFudGljLCBleGNlcHRpb25zLmdl
dCgpLCBvcGVyYXRpb25MaW5rRGlyZWN0Q2FsbCwKICAgICAgICAgICAgICAgICAgICAgICAgIElu
dmFsaWRHUFJSZWcsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihjYWxsTGlua0luZm8pLCBj
YWxsZWVHUFIpLmNhbGwoKTsKICAgICAgICAgICAgICAgICAgICAgaml0Lmp1bXAoKS5saW5rVG8o
bWFpblBhdGgsICZqaXQpOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAg
ICAgY2FsbExpbmtJbmZvLT5zZXRVcENhbGwoQ2FsbExpbmtJbmZvOjpEaXJlY3RUYWlsQ2FsbCwg
SW52YWxpZEdQUlJlZyk7CiAgICAgICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0RXhl
Y3V0YWJsZUR1cmluZ0NvbXBpbGF0aW9uKGV4ZWN1dGFibGUpOwogICAgICAgICAgICAgICAgICAg
ICBpZiAobnVtQWxsb2NhdGVkQXJncyA+IG51bVBhc3NlZEFyZ3MpCiAgICAgICAgICAgICAgICAg
ICAgICAgICBjYWxsTGlua0luZm8tPnNldE1heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKG51
bUFsbG9jYXRlZEFyZ3MpOwogICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAg
ICAgaml0LmFkZExpbmtUYXNrKAotICAgICAgICAgICAgICAgICAgICAgICAgWz1dIChMaW5rQnVm
ZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29kZUxvY2F0
aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gcGF0Y2hhYmxlSnVtcExvY2F0aW9uID0gbGlua0J1
ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KHBhdGNoYWJsZUp1bXApOwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIENvZGVMb2NhdGlvbk5lYXJDYWxsPEpTSW50ZXJuYWxQdHJU
YWc+IGNhbGxMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPEpTSW50ZXJu
YWxQdHJUYWc+KGNhbGwpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvZGVMb2NhdGlv
bkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IHNsb3dQYXRoTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxv
Y2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oc2xvd1BhdGgpOwotCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRDYWxsTG9jYXRpb25zKAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBwYXRjaGFibGVKdW1wTG9jYXRpb24sCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoTG9jYXRpb24sCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNhbGxMb2NhdGlvbik7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9KTsK
KyAgICAgICAgICAgICAgICAgICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlu
a0J1ZmZlcikgeworICAgICAgICAgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRDb2Rl
TG9jYXRpb25zKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRp
b25PZjxKU0ludGVybmFsUHRyVGFnPihzbG93UGF0aCksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4oKSk7CisgICAgICAgICAg
ICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIENhbGxMaW5rSW5mbyogY2Fs
bExpbmtJbmZvID0gaml0LmNvZGVCbG9jaygpLT5hZGRDYWxsTGlua0luZm8obm9kZS0+b3JpZ2lu
LnNlbWFudGljKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBDQ2FsbEhlbHBl
cnM6OkxhYmVsIG1haW5QYXRoID0gaml0LmxhYmVsKCk7CisgICAgICAgICAgICAgICAgY2FsbExp
bmtJbmZvLT5zZXRVcENhbGwoCisgICAgICAgICAgICAgICAgICAgIGlzQ29uc3RydWN0ID8gQ2Fs
bExpbmtJbmZvOjpEaXJlY3RDb25zdHJ1Y3QgOiBDYWxsTGlua0luZm86OkRpcmVjdENhbGwsIElu
dmFsaWRHUFJSZWcpOwogCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpMYWJlbCBtYWlu
UGF0aCA9IGppdC5sYWJlbCgpOwogICAgICAgICAgICAgICAgIGppdC5zdG9yZTMyKAogICAgICAg
ICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihjYWxsU2l0ZUluZGV4LmJp
dHMoKSksCiAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6dGFnRm9yKFZpcnR1YWxS
ZWdpc3RlcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykpKTsKLSAg
ICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2FsbCA9
IGppdC5uZWFyQ2FsbCgpOworICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+ZW1pdERpcmVj
dEZhc3RQYXRoKGppdCk7CiAgICAgICAgICAgICAgICAgaml0LmFkZFB0cigKICAgICAgICAgICAg
ICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoLXBhcmFtcy5wcm9jKCkuZnJhbWVT
aXplKCkpLAogICAgICAgICAgICAgICAgICAgICBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlciwg
Q0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgICAgICAgICAgICAgCi0g
ICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRVcENhbGwoCi0gICAgICAgICAgICAgICAg
ICAgIGlzQ29uc3RydWN0ID8gQ2FsbExpbmtJbmZvOjpEaXJlY3RDb25zdHJ1Y3QgOiBDYWxsTGlu
a0luZm86OkRpcmVjdENhbGwsIEludmFsaWRHUFJSZWcpOwogICAgICAgICAgICAgICAgIGNhbGxM
aW5rSW5mby0+c2V0RXhlY3V0YWJsZUR1cmluZ0NvbXBpbGF0aW9uKGV4ZWN1dGFibGUpOwogICAg
ICAgICAgICAgICAgIGlmIChudW1BbGxvY2F0ZWRBcmdzID4gbnVtUGFzc2VkQXJncykKICAgICAg
ICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRNYXhBcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcyhudW1BbGxvY2F0ZWRBcmdzKTsKQEAgLTk5MzUsMTUgKzk5MTQsOSBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICBqaXQuYWRk
TGlua1Rhc2soCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWz1dIChMaW5rQnVmZmVyJiBs
aW5rQnVmZmVyKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvZGVMb2NhdGlv
bk5lYXJDYWxsPEpTSW50ZXJuYWxQdHJUYWc+IGNhbGxMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9j
YXRpb25PZk5lYXJDYWxsPEpTSW50ZXJuYWxQdHJUYWc+KGNhbGwpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBzbG93
UGF0aExvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KHNs
b3dQYXRoKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxp
bmsoY2FsbCwgc2xvd1BhdGhMb2NhdGlvbik7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY2FsbExpbmtJbmZvLT5zZXRDYWxsTG9jYXRpb25zKAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4oKSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoTG9jYXRpb24sCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsTG9jYXRpb24pOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldENvZGVMb2NhdGlvbnMo
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9u
T2Y8SlNJbnRlcm5hbFB0clRhZz4oc2xvd1BhdGgpLCAKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+KCkpOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgICB9KTsKICAg
ICAgICAgICAgIH0pOwpAQCAtMTAwMzQsNDAgKzEwMDA3LDMwIEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICAgICAgc2h1ZmZsZURhdGEuc2V0dXBDYWxsZWVTYXZlUmVnaXN0ZXJzKGppdC5jb2RlQmxv
Y2soKSk7CiAKICAgICAgICAgICAgICAgICBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbyA9IGpp
dC5jb2RlQmxvY2soKS0+YWRkQ2FsbExpbmtJbmZvKGNvZGVPcmlnaW4pOworICAgICAgICAgICAg
ICAgIGNhbGxMaW5rSW5mby0+c2V0VXBDYWxsKENhbGxMaW5rSW5mbzo6VGFpbENhbGwsIEdQUklu
Zm86OnJlZ1QwKTsKIAotICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6RGF0YUxhYmVsUHRy
IHRhcmdldFRvQ2hlY2s7Ci0gICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIHNsb3dQ
YXRoID0gaml0LmJyYW5jaFB0cldpdGhQYXRjaCgKLSAgICAgICAgICAgICAgICAgICAgQ0NhbGxI
ZWxwZXJzOjpOb3RFcXVhbCwgR1BSSW5mbzo6cmVnVDAsIHRhcmdldFRvQ2hlY2ssCi0gICAgICAg
ICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihudWxscHRyKSk7Ci0KLSAg
ICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldEZyYW1lU2h1ZmZsZURhdGEoc2h1ZmZsZURh
dGEpOwotICAgICAgICAgICAgICAgIENhbGxGcmFtZVNodWZmbGVyKGppdCwgc2h1ZmZsZURhdGEp
LnByZXBhcmVGb3JUYWlsQ2FsbCgpOwotCi0gICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpD
YWxsIGZhc3RDYWxsID0gaml0Lm5lYXJUYWlsQ2FsbCgpOworICAgICAgICAgICAgICAgIGF1dG8g
c2xvd1BhdGggPSBjYWxsTGlua0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKGppdCwgR1BSSW5m
bzo6cmVnVDAsIEludmFsaWRHUFJSZWcsIENhbGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpObywgWyZd
IHsKKyAgICAgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRGcmFtZVNodWZmbGVEYXRh
KHNodWZmbGVEYXRhKTsKKyAgICAgICAgICAgICAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIoaml0
LCBzaHVmZmxlRGF0YSkucHJlcGFyZUZvclRhaWxDYWxsKCk7CisgICAgICAgICAgICAgICAgfSk7
CiAKICAgICAgICAgICAgICAgICBzbG93UGF0aC5saW5rKCZqaXQpOwotCisgICAgICAgICAgICAg
ICAgYXV0byBzbG93UGF0aFN0YXJ0ID0gaml0LmxhYmVsKCk7CiAgICAgICAgICAgICAgICAgQ2Fs
bEZyYW1lU2h1ZmZsZXIgc2xvd1BhdGhTaHVmZmxlcihqaXQsIHNodWZmbGVEYXRhKTsKICAgICAg
ICAgICAgICAgICBzbG93UGF0aFNodWZmbGVyLnNldENhbGxlZUpTVmFsdWVSZWdzKEpTVmFsdWVS
ZWdzKEdQUkluZm86OnJlZ1QwKSk7CiAgICAgICAgICAgICAgICAgc2xvd1BhdGhTaHVmZmxlci5w
cmVwYXJlRm9yU2xvd1BhdGgoKTsKIAotICAgICAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVs
cGVyczo6VHJ1c3RlZEltbVB0cihjYWxsTGlua0luZm8pLCBHUFJJbmZvOjpyZWdUMik7CiAgICAg
ICAgICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGppdC5jb2Rl
QmxvY2soKS0+Z2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBHUFJJbmZv
OjpyZWdUMyk7Ci0gICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIHNsb3dDYWxsID0g
aml0Lm5lYXJDYWxsKCk7CisgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5lbWl0U2xvd1Bh
dGgoKnZtLCBqaXQpOwogCisgICAgICAgICAgICAgICAgYXV0byBkb25lTG9jYXRpb24gPSBqaXQu
bGFiZWwoKTsKICAgICAgICAgICAgICAgICBqaXQuYWJvcnRXaXRoUmVhc29uKEpJVERpZFJldHVy
bkZyb21UYWlsQ2FsbCk7CiAKLSAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldFVwQ2Fs
bChDYWxsTGlua0luZm86OlRhaWxDYWxsLCBHUFJJbmZvOjpyZWdUMCk7Ci0KICAgICAgICAgICAg
ICAgICBqaXQuYWRkTGlua1Rhc2soCiAgICAgICAgICAgICAgICAgICAgIFs9XSAoTGlua0J1ZmZl
ciYgbGlua0J1ZmZlcikgewotICAgICAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyPEpJVFRodW5rUHRyVGFnPiBsaW5rQ2FsbCA9IHZtLT5nZXRDVElTdHViKGxpbmtDYWxs
VGh1bmtHZW5lcmF0b3IpLmNvZGUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZm
ZXIubGluayhzbG93Q2FsbCwgRnVuY3Rpb25QdHI8SklUVGh1bmtQdHJUYWc+KGxpbmtDYWxsKSk7
Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0Q2FsbExvY2F0aW9u
cygKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVy
bmFsUHRyVGFnPihsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxKU0ludGVybmFsUHRyVGFn
PihzbG93Q2FsbCkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxh
YmVsPEpTSW50ZXJuYWxQdHJUYWc+KGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRy
VGFnPih0YXJnZXRUb0NoZWNrKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1
ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8SlNJbnRlcm5hbFB0clRhZz4oZmFzdENhbGwpKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0Q29kZUxvY2F0aW9ucygKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5h
bFB0clRhZz4oc2xvd1BhdGhTdGFydCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlu
a0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KGRvbmVMb2NhdGlvbikpOwogICAg
ICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIH0pOwogICAgIH0KQEAgLTEwMzIwLDQw
ICsxMDI4MywzOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAg
ICAgICAgICAgY2FsbFR5cGUgPSBDYWxsTGlua0luZm86OkNhbGxWYXJhcmdzOwogICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0VXBDYWxsKGNhbGxUeXBl
LCBHUFJJbmZvOjpyZWdUMCk7CisKICAgICAgICAgICAgICAgICBib29sIGlzVGFpbENhbGwgPSBD
YWxsTGlua0luZm86OmNhbGxNb2RlRm9yKGNhbGxUeXBlKSA9PSBDYWxsTW9kZTo6VGFpbDsKLSAg
ICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkRhdGFMYWJlbFB0
ciB0YXJnZXRUb0NoZWNrOwotICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBzbG93
UGF0aCA9IGppdC5icmFuY2hQdHJXaXRoUGF0Y2goCi0gICAgICAgICAgICAgICAgICAgIENDYWxs
SGVscGVyczo6Tm90RXF1YWwsIEdQUkluZm86OnJlZ1QwLCB0YXJnZXRUb0NoZWNrLAotICAgICAg
ICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobnVsbHB0cikpOwotICAg
ICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBmYXN0Q2Fs
bDsKKworICAgICAgICAgICAgICAgIEFTU0VSVCghdXNlZFJlZ2lzdGVycy5nZXQoR1BSSW5mbzo6
cmVnVDIpKTsgLy8gVXNlZCBvbiB0aGUgc2xvdyBwYXRoLgorCisgICAgICAgICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93UGF0aDsKICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBl
cnM6Okp1bXAgZG9uZTsKLSAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBpZiAoaXNU
YWlsQ2FsbCkgewotICAgICAgICAgICAgICAgICAgICBqaXQuZW1pdFJlc3RvcmVDYWxsZWVTYXZl
cygpOwotICAgICAgICAgICAgICAgICAgICBqaXQucHJlcGFyZUZvclRhaWxDYWxsU2xvdygpOwot
ICAgICAgICAgICAgICAgICAgICBmYXN0Q2FsbCA9IGppdC5uZWFyVGFpbENhbGwoKTsKKyAgICAg
ICAgICAgICAgICAgICAgc2xvd1BhdGggPSBjYWxsTGlua0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQ
YXRoKGppdCwgR1BSSW5mbzo6cmVnVDAsIEludmFsaWRHUFJSZWcsIENhbGxMaW5rSW5mbzo6VXNl
RGF0YUlDOjpObywgWyZdIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGppdC5lbWl0UmVzdG9y
ZUNhbGxlZVNhdmVzKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBqaXQucHJlcGFyZUZvclRh
aWxDYWxsU2xvdygpOworICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBmYXN0Q2FsbCA9IGppdC5uZWFyQ2FsbCgpOwor
ICAgICAgICAgICAgICAgICAgICBzbG93UGF0aCA9IGNhbGxMaW5rSW5mby0+ZW1pdEZhc3RQYXRo
KGppdCwgR1BSSW5mbzo6cmVnVDAsIEludmFsaWRHUFJSZWcsIENhbGxMaW5rSW5mbzo6VXNlRGF0
YUlDOjpObyk7CiAgICAgICAgICAgICAgICAgICAgIGRvbmUgPSBqaXQuanVtcCgpOwogICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBzbG93UGF0aC5s
aW5rKCZqaXQpOworICAgICAgICAgICAgICAgIGF1dG8gc2xvd1BhdGhTdGFydCA9IGppdC5sYWJl
bCgpOwogCiAgICAgICAgICAgICAgICAgaWYgKGlzVGFpbENhbGwpCiAgICAgICAgICAgICAgICAg
ICAgIGppdC5lbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7Ci0gICAgICAgICAgICAgICAgQVNTRVJU
KCF1c2VkUmVnaXN0ZXJzLmdldChHUFJJbmZvOjpyZWdUMikpOwotICAgICAgICAgICAgICAgIGpp
dC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihjYWxsTGlua0luZm8pLCBHUFJJbmZv
OjpyZWdUMik7CiAgICAgICAgICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tUHRyKGppdC5jb2RlQmxvY2soKS0+Z2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1h
bnRpYykpLCBHUFJJbmZvOjpyZWdUMyk7Ci0gICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpD
YWxsIHNsb3dDYWxsID0gaml0Lm5lYXJDYWxsKCk7CisgICAgICAgICAgICAgICAgY2FsbExpbmtJ
bmZvLT5lbWl0U2xvd1BhdGgoKnZtLCBqaXQpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAg
ICAgICAgIGlmIChpc1RhaWxDYWxsKQogICAgICAgICAgICAgICAgICAgICBqaXQuYWJvcnRXaXRo
UmVhc29uKEpJVERpZFJldHVybkZyb21UYWlsQ2FsbCk7CiAgICAgICAgICAgICAgICAgZWxzZQog
ICAgICAgICAgICAgICAgICAgICBkb25lLmxpbmsoJmppdCk7Ci0gICAgICAgICAgICAgICAgCi0g
ICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRVcENhbGwoY2FsbFR5cGUsIEdQUkluZm86
OnJlZ1QwKTsKKworICAgICAgICAgICAgICAgIGF1dG8gZG9uZUxvY2F0aW9uID0gaml0LmxhYmVs
KCk7CiAKICAgICAgICAgICAgICAgICBqaXQuYWRkUHRyKAogICAgICAgICAgICAgICAgICAgICBD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigtb3JpZ2luYWxTdGFja0hlaWdodCksCkBAIC0xMDM2
MSwxMyArMTAzMjIsOSBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
ICAgIGppdC5hZGRMaW5rVGFzaygKICAgICAgICAgICAgICAgICAgICAgWz1dIChMaW5rQnVmZmVy
JiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHI8SklUVGh1bmtQdHJUYWc+IGxpbmtDYWxsID0gdm0tPmdldENUSVN0dWIobGlua0NhbGxU
aHVua0dlbmVyYXRvcikuY29kZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZl
ci5saW5rKHNsb3dDYWxsLCBGdW5jdGlvblB0cjxKSVRUaHVua1B0clRhZz4obGlua0NhbGwpKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgY2FsbExp
bmtJbmZvLT5zZXRDYWxsTG9jYXRpb25zKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIENv
ZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+KGxpbmtCdWZmZXIubG9jYXRpb25PZk5l
YXJDYWxsPEpTSW50ZXJuYWxQdHJUYWc+KHNsb3dDYWxsKSksCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4obGlua0J1ZmZlci5s
b2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KHRhcmdldFRvQ2hlY2spKSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxKU0ludGVybmFs
UHRyVGFnPihmYXN0Q2FsbCkpOworICAgICAgICAgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZv
LT5zZXRDb2RlTG9jYXRpb25zKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZm
ZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihzbG93UGF0aFN0YXJ0KSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRh
Zz4oZG9uZUxvY2F0aW9uKSk7CiAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAg
fSk7CiAKQEAgLTEwNjA3LDM5ICsxMDU2NCwzNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAg
IGVsc2UKICAgICAgICAgICAgICAgICAgICAgY2FsbFR5cGUgPSBDYWxsTGlua0luZm86OkNhbGxW
YXJhcmdzOwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGJvb2wgaXNUYWlsQ2Fs
bCA9IENhbGxMaW5rSW5mbzo6Y2FsbE1vZGVGb3IoY2FsbFR5cGUpID09IENhbGxNb2RlOjpUYWls
OworICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0VXBDYWxsKGNhbGxUeXBlLCBHUFJJ
bmZvOjpyZWdUMCk7CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpEYXRhTGFiZWxQdHIgdGFyZ2V0VG9DaGVjazsKLSAgICAgICAgICAgICAgICBDQ2FsbEhl
bHBlcnM6Okp1bXAgc2xvd1BhdGggPSBqaXQuYnJhbmNoUHRyV2l0aFBhdGNoKAotICAgICAgICAg
ICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCBHUFJJbmZvOjpyZWdUMCwgdGFyZ2V0
VG9DaGVjaywKLSAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRy
KG51bGxwdHIpKTsKKyAgICAgICAgICAgICAgICBib29sIGlzVGFpbENhbGwgPSBDYWxsTGlua0lu
Zm86OmNhbGxNb2RlRm9yKGNhbGxUeXBlKSA9PSBDYWxsTW9kZTo6VGFpbDsKICAgICAgICAgICAg
ICAgICAKLSAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgZmFzdENhbGw7CisgICAg
ICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93UGF0aDsKICAgICAgICAgICAg
ICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZG9uZTsKLSAgICAgICAgICAgICAgICAKICAgICAgICAg
ICAgICAgICBpZiAoaXNUYWlsQ2FsbCkgewotICAgICAgICAgICAgICAgICAgICBqaXQuZW1pdFJl
c3RvcmVDYWxsZWVTYXZlcygpOwotICAgICAgICAgICAgICAgICAgICBqaXQucHJlcGFyZUZvclRh
aWxDYWxsU2xvdygpOwotICAgICAgICAgICAgICAgICAgICBmYXN0Q2FsbCA9IGppdC5uZWFyVGFp
bENhbGwoKTsKKyAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGggPSBjYWxsTGlua0luZm8tPmVt
aXRUYWlsQ2FsbEZhc3RQYXRoKGppdCwgR1BSSW5mbzo6cmVnVDAsIEludmFsaWRHUFJSZWcsIENh
bGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpObywgWyZdIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGppdC5lbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBq
aXQucHJlcGFyZUZvclRhaWxDYWxsU2xvdygpOworICAgICAgICAgICAgICAgICAgICB9KTsKICAg
ICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBmYXN0Q2FsbCA9IGpp
dC5uZWFyQ2FsbCgpOworICAgICAgICAgICAgICAgICAgICBzbG93UGF0aCA9IGNhbGxMaW5rSW5m
by0+ZW1pdEZhc3RQYXRoKGppdCwgR1BSSW5mbzo6cmVnVDAsIEludmFsaWRHUFJSZWcsIENhbGxM
aW5rSW5mbzo6VXNlRGF0YUlDOjpObyk7CiAgICAgICAgICAgICAgICAgICAgIGRvbmUgPSBqaXQu
anVtcCgpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg
ICAgICBzbG93UGF0aC5saW5rKCZqaXQpOworICAgICAgICAgICAgICAgIGF1dG8gc2xvd1BhdGhT
dGFydCA9IGppdC5sYWJlbCgpOwogCiAgICAgICAgICAgICAgICAgaWYgKGlzVGFpbENhbGwpCiAg
ICAgICAgICAgICAgICAgICAgIGppdC5lbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7Ci0gICAgICAg
ICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGNhbGxMaW5rSW5m
byksIEdQUkluZm86OnJlZ1QyKTsKICAgICAgICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW1QdHIoaml0LmNvZGVCbG9jaygpLT5nbG9iYWxPYmplY3RGb3Iobm9kZS0+
b3JpZ2luLnNlbWFudGljKSksIEdQUkluZm86OnJlZ1QzKTsKLSAgICAgICAgICAgICAgICBDQ2Fs
bEhlbHBlcnM6OkNhbGwgc2xvd0NhbGwgPSBqaXQubmVhckNhbGwoKTsKKyAgICAgICAgICAgICAg
ICBjYWxsTGlua0luZm8tPmVtaXRTbG93UGF0aCgqdm0sIGppdCk7CiAgICAgICAgICAgICAgICAg
CiAgICAgICAgICAgICAgICAgaWYgKGlzVGFpbENhbGwpCiAgICAgICAgICAgICAgICAgICAgIGpp
dC5hYm9ydFdpdGhSZWFzb24oSklURGlkUmV0dXJuRnJvbVRhaWxDYWxsKTsKICAgICAgICAgICAg
ICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIGRvbmUubGluaygmaml0KTsKLSAgICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldFVwQ2FsbChjYWxsVHlw
ZSwgR1BSSW5mbzo6cmVnVDApOworCisgICAgICAgICAgICAgICAgYXV0byBkb25lTG9jYXRpb24g
PSBqaXQubGFiZWwoKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBqaXQuYWRk
UHRyKAogICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigtb3Jp
Z2luYWxTdGFja0hlaWdodCksCkBAIC0xMDY0NywxMyArMTA2MDEsOSBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGppdC5hZGRMaW5rVGFzaygKICAgICAgICAg
ICAgICAgICAgICAgWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SklUVGh1bmtQdHJUYWc+IGxpbmtDYWxs
ID0gdm0tPmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcikuY29kZSgpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKHNsb3dDYWxsLCBGdW5jdGlvblB0cjxK
SVRUaHVua1B0clRhZz4obGlua0NhbGwpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIAotICAg
ICAgICAgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRDYWxsTG9jYXRpb25zKAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJU
YWc+KGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPEpTSW50ZXJuYWxQdHJUYWc+KHNsb3dD
YWxsKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJ
bnRlcm5hbFB0clRhZz4obGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KHRh
cmdldFRvQ2hlY2spKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxv
Y2F0aW9uT2ZOZWFyQ2FsbDxKU0ludGVybmFsUHRyVGFnPihmYXN0Q2FsbCkpOworICAgICAgICAg
ICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRDb2RlTG9jYXRpb25zKAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFn
PihzbG93UGF0aFN0YXJ0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVy
LmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oZG9uZUxvY2F0aW9uKSk7CiAgICAgICAgICAg
ICAgICAgICAgIH0pOwogICAgICAgICAgICAgfSk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0NDYWxsSGVscGVycy5jcHAJKHJldmlzaW9uIDI3NzQ0MCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzEs
NiArNzEsMTYgQEAgdm9pZCBDQ2FsbEhlbHBlcnM6OmVuc3VyZVNoYWRvd0NoaWNrZW5QYQogICAg
IHN0b3JlUHRyKHNjcmF0Y2gyLCBBZGRyZXNzKHNjcmF0Y2gxTm9uQXJnR1BSKSk7CiB9CiAKK3Zv
aWQgQ0NhbGxIZWxwZXJzOjplbWl0SklUQ29kZU92ZXIoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpT
SW50ZXJuYWxQdHJUYWc+IHdoZXJlLCBXVEY6OkZ1bmN0aW9uPHZvaWQoQ0NhbGxIZWxwZXJzJik+
IGVtaXRDb2RlLCBjb25zdCBjaGFyKiBkZXNjcmlwdGlvbikKK3sKKyAgICBDQ2FsbEhlbHBlcnMg
aml0OworICAgIGVtaXRDb2RlKGppdCk7CisKKyAgICBjb25zdGV4cHIgYm9vbCBuZWVkc0JyYW5j
aENvbXBhY3Rpb24gPSBmYWxzZTsKKyAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoaml0LCB3aGVy
ZSwgaml0Lm1fYXNzZW1ibGVyLmJ1ZmZlcigpLmNvZGVTaXplKCksIExpbmtCdWZmZXI6OlByb2Zp
bGU6OklubGluZUNhY2hlLCBKSVRDb21waWxhdGlvbk11c3RTdWNjZWVkLCBuZWVkc0JyYW5jaENv
bXBhY3Rpb24pOworICAgIEZJTkFMSVpFX0NPREUobGlua0J1ZmZlciwgTm9QdHJUYWcsIGRlc2Ny
aXB0aW9uKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoSklU
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5oCShyZXZpc2lv
biAyNzc0NDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5oCSh3
b3JraW5nIGNvcHkpCkBAIC04MTgsNiArODE4LDggQEAgcHVibGljOgogICAgIHZvaWQgbG9nU2hh
ZG93Q2hpY2tlblRhaWxQYWNrZXQoR1BSUmVnIHNoYWRvd1BhY2tldCwgSlNWYWx1ZVJlZ3MgdGhp
c1JlZ3MsIEdQUlJlZyBzY29wZSwgQ29kZUJsb2NrKiwgQ2FsbFNpdGVJbmRleCk7CiAgICAgLy8g
TGVhdmVzIGJlaGluZCBhIHBvaW50ZXIgdG8gdGhlIFBhY2tldCB3ZSBzaG91bGQgd3JpdGUgdG8g
aW4gc2hhZG93UGFja2V0LgogICAgIHZvaWQgZW5zdXJlU2hhZG93Q2hpY2tlblBhY2tldChWTSYs
IEdQUlJlZyBzaGFkb3dQYWNrZXQsIEdQUlJlZyBzY3JhdGNoMU5vbkFyZ0dQUiwgR1BSUmVnIHNj
cmF0Y2gyKTsKKworICAgIHN0YXRpYyB2b2lkIGVtaXRKSVRDb2RlT3ZlcihNYWNyb0Fzc2VtYmxl
ckNvZGVQdHI8SlNJbnRlcm5hbFB0clRhZz4gd2hlcmUsIFdURjo6RnVuY3Rpb248dm9pZChDQ2Fs
bEhlbHBlcnMmKT4sIGNvbnN0IGNoYXIqKTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkocmV2aXNpb24gMjc3NDQwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NTksMTAgKzk1
OSw5IEBAIENvbXBpbGF0aW9uUmVzdWx0IEpJVDo6bGluaygpCiAKICAgICBmb3IgKGF1dG8mIGNv
bXBpbGF0aW9uSW5mbyA6IG1fY2FsbENvbXBpbGF0aW9uSW5mbykgewogICAgICAgICBDYWxsTGlu
a0luZm8mIGluZm8gPSAqY29tcGlsYXRpb25JbmZvLmNhbGxMaW5rSW5mbzsKLSAgICAgICAgaW5m
by5zZXRDYWxsTG9jYXRpb25zKAotICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRl
cm5hbFB0clRhZz4ocGF0Y2hCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPEpTSW50ZXJuYWxQdHJU
YWc+KGNvbXBpbGF0aW9uSW5mby5jYWxsUmV0dXJuTG9jYXRpb24pKSwKLSAgICAgICAgICAgIENv
ZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+KHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8
SlNJbnRlcm5hbFB0clRhZz4oY29tcGlsYXRpb25JbmZvLmhvdFBhdGhCZWdpbikpLAotICAgICAg
ICAgICAgcGF0Y2hCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPEpTSW50ZXJuYWxQdHJUYWc+KGNv
bXBpbGF0aW9uSW5mby5ob3RQYXRoT3RoZXIpKTsKKyAgICAgICAgaW5mby5zZXRDb2RlTG9jYXRp
b25zKAorICAgICAgICAgICAgcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFn
Pihjb21waWxhdGlvbkluZm8uc2xvd1BhdGhTdGFydCksCisgICAgICAgICAgICBwYXRjaEJ1ZmZl
ci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KGNvbXBpbGF0aW9uSW5mby5kb25lTG9jYXRp
b24pKTsKICAgICB9CiAKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHJldmlz
aW9uIDI3NzQ0MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHdvcmtpbmcg
Y29weSkKQEAgLTE3NSw5ICsxNzUsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICB9OwogCiAgICAg
c3RydWN0IENhbGxDb21waWxhdGlvbkluZm8gewotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RGF0
YUxhYmVsUHRyIGhvdFBhdGhCZWdpbjsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgaG90
UGF0aE90aGVyOwotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsUmV0dXJuTG9jYXRp
b247CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBzbG93UGF0aFN0YXJ0OworICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgZG9uZUxvY2F0aW9uOwogICAgICAgICBDYWxsTGlua0lu
Zm8qIGNhbGxMaW5rSW5mbzsKICAgICB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVENhbGwzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRDYWxsMzJfNjQuY3BwCShyZXZpc2lvbiAyNzc0NDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVENhbGwzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwMSwzMCAr
MzAxLDM0IEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsKGNvbnN0IEluc3RydWN0aW8KICAgICBp
ZiAoY29tcGlsZUNhbGxFdmFsKGJ5dGVjb2RlKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYg
KG9wY29kZUlEID09IG9wX3RhaWxfY2FsbCB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfdmFy
YXJncykKLSAgICAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOworICAgIGluZm8tPnNldFVw
Q2FsbChDYWxsTGlua0luZm86OmNhbGxUeXBlRm9yKG9wY29kZUlEKSwgcmVnVDApOworCisgICAg
aWYgKG9wY29kZUlEID09IG9wX3RhaWxfY2FsbCB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxf
dmFyYXJncyB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMpCiAK
ICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDEpKTsKIAogICAgIERhdGFMYWJl
bFB0ciBhZGRyZXNzT2ZMaW5rZWRGdW5jdGlvbkNoZWNrOwogICAgIEp1bXAgc2xvd0Nhc2UgPSBi
cmFuY2hQdHJXaXRoUGF0Y2goTm90RXF1YWwsIHJlZ1QwLCBhZGRyZXNzT2ZMaW5rZWRGdW5jdGlv
bkNoZWNrLCBUcnVzdGVkSW1tUHRyKG51bGxwdHIpKTsKIAotICAgIGFkZFNsb3dDYXNlKHNsb3dD
YXNlKTsKLQogICAgIEFTU0VSVChtX2NhbGxDb21waWxhdGlvbkluZm8uc2l6ZSgpID09IGNhbGxM
aW5rSW5mb0luZGV4KTsKLSAgICBpbmZvLT5zZXRVcENhbGwoQ2FsbExpbmtJbmZvOjpjYWxsVHlw
ZUZvcihvcGNvZGVJRCksIHJlZ1QwKTsKICAgICBtX2NhbGxDb21waWxhdGlvbkluZm8uYXBwZW5k
KENhbGxDb21waWxhdGlvbkluZm8oKSk7Ci0gICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxM
aW5rSW5mb0luZGV4XS5ob3RQYXRoQmVnaW4gPSBhZGRyZXNzT2ZMaW5rZWRGdW5jdGlvbkNoZWNr
OwogICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uY2FsbExpbmtJ
bmZvID0gaW5mbzsKIAogICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CiAgICAgaWYg
KG9wY29kZUlEID09IG9wX3RhaWxfY2FsbCB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfdmFy
YXJncyB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMpIHsKLSAg
ICAgICAgcHJlcGFyZUZvclRhaWxDYWxsU2xvdygpOwotICAgICAgICBtX2NhbGxDb21waWxhdGlv
bkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmhvdFBhdGhPdGhlciA9IGVtaXROYWtlZE5lYXJUYWls
Q2FsbCgpOworICAgICAgICBhdXRvIHNsb3dQYXRocyA9IGluZm8tPmVtaXRUYWlsQ2FsbEZhc3RQ
YXRoKCp0aGlzLCByZWdUMCwgcmVnVDIsIENhbGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpZZXMsIFsm
XSB7CisgICAgICAgICAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CisgICAgICAgICAgICBw
cmVwYXJlRm9yVGFpbENhbGxTbG93KCk7CisgICAgICAgIH0pOworICAgICAgICBhZGRTbG93Q2Fz
ZShzbG93UGF0aHMpOworICAgICAgICBhdXRvIGRvbmVMb2NhdGlvbiA9IGxhYmVsKCk7CisgICAg
ICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uZG9uZUxvY2F0aW9u
ID0gZG9uZUxvY2F0aW9uOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbV9jYWxsQ29t
cGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5ob3RQYXRoT3RoZXIgPSBlbWl0TmFrZWRO
ZWFyQ2FsbCgpOworICAgIGF1dG8gc2xvd1BhdGhzID0gaW5mby0+ZW1pdEZhc3RQYXRoKCp0aGlz
LCByZWdUMCwgcmVnVDIsIENhbGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpZZXMpOworICAgIGFkZFNs
b3dDYXNlKHNsb3dQYXRocyk7CisgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5m
b0luZGV4XS5kb25lTG9jYXRpb24gPSBsYWJlbCgpOwogCiAgICAgYWRkUHRyKFRydXN0ZWRJbW0z
MihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSks
IGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgY2hlY2tTdGFj
a1BvaW50ZXJBbGlnbm1lbnQoKTsKQEAgLTM0NCwxNSArMzQ4LDEzIEBAIHZvaWQgSklUOjpjb21w
aWxlT3BDYWxsU2xvd0Nhc2UoY29uc3QgSW4KIAogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7
CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
cmVnVDMpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NhbGxDb21waWxhdGlvbkluZm9bY2Fs
bExpbmtJbmZvSW5kZXhdLmNhbGxMaW5rSW5mbyksIHJlZ1QyKTsKLQogICAgIGlmIChvcGNvZGVJ
RCA9PSBvcF90YWlsX2NhbGwgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgfHwg
b3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKQogICAgICAgICBlbWl0
UmVzdG9yZUNhbGxlZVNhdmVzKCk7CiAKLSAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExp
bmtJbmZvSW5kZXhdLmNhbGxSZXR1cm5Mb2NhdGlvbiA9IGVtaXROYWtlZE5lYXJDYWxsKG1fdm0t
PmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFn
PigpKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgcmVnVDMpOworICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0u
Y2FsbExpbmtJbmZvLT5lbWl0U2xvd1BhdGgoKm1fdm0sICp0aGlzKTsKIAotICAgIGlmIChvcGNv
ZGVJRCA9PSBvcF90YWlsX2NhbGwgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3Mp
IHsKKyAgICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsIHx8IG9wY29kZUlEID09IG9wX3Rh
aWxfY2FsbF92YXJhcmdzIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3Vt
ZW50cykgewogICAgICAgICBhYm9ydFdpdGhSZWFzb24oSklURGlkUmV0dXJuRnJvbVRhaWxDYWxs
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUQ2FsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRDYWxsLmNwcAkocmV2aXNpb24gMjc3NDQwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRDYWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg4LDggKzE4OCwxNCBAQCBib29sIEpJ
VDo6Y29tcGlsZVRhaWxDYWxsKGNvbnN0IE9wVGFpbENhCiAgICAgICAgIFZhbHVlUmVjb3Zlcnk6
OmluR1BSKHJlZ1QwLCBEYXRhRm9ybWF0SlMpOwogICAgIHNodWZmbGVEYXRhLnNldHVwQ2FsbGVl
U2F2ZVJlZ2lzdGVycyhtX2NvZGVCbG9jayk7CiAgICAgaW5mby0+c2V0RnJhbWVTaHVmZmxlRGF0
YShzaHVmZmxlRGF0YSk7Ci0gICAgQ2FsbEZyYW1lU2h1ZmZsZXIoKnRoaXMsIHNodWZmbGVEYXRh
KS5wcmVwYXJlRm9yVGFpbENhbGwoKTsKLSAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExp
bmtJbmZvSW5kZXhdLmhvdFBhdGhPdGhlciA9IGVtaXROYWtlZE5lYXJUYWlsQ2FsbCgpOworCisg
ICAgSnVtcExpc3Qgc2xvd1BhdGhzID0gaW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoKnRoaXMs
IHJlZ1QwLCByZWdUMiwgQ2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6OlllcywgWyZdIHsKKyAgICAg
ICAgQ2FsbEZyYW1lU2h1ZmZsZXIoKnRoaXMsIHNodWZmbGVEYXRhKS5wcmVwYXJlRm9yVGFpbENh
bGwoKTsKKyAgICB9KTsKKyAgICBhZGRTbG93Q2FzZShzbG93UGF0aHMpOworICAgIGF1dG8gZG9u
ZUxvY2F0aW9uID0gbGFiZWwoKTsKKyAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJ
bmZvSW5kZXhdLmRvbmVMb2NhdGlvbiA9IGRvbmVMb2NhdGlvbjsKKyAgICAKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIApAQCAtMjI4LDI4ICsyMzQsMzAgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwo
Y29uc3QgSW5zdHJ1Y3RpbwogICAgIGlmIChjb21waWxlQ2FsbEV2YWwoYnl0ZWNvZGUpKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBEYXRhTGFiZWxQdHIgYWRkcmVzc09mTGlua2VkRnVuY3Rpb25D
aGVjazsKLSAgICBKdW1wIHNsb3dDYXNlID0gYnJhbmNoUHRyV2l0aFBhdGNoKE5vdEVxdWFsLCBy
ZWdUMCwgYWRkcmVzc09mTGlua2VkRnVuY3Rpb25DaGVjaywgVHJ1c3RlZEltbVB0cihudWxscHRy
KSk7Ci0gICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2UpOwotCiAgICAgQVNTRVJUKG1fY2FsbENvbXBp
bGF0aW9uSW5mby5zaXplKCkgPT0gY2FsbExpbmtJbmZvSW5kZXgpOwogICAgIGluZm8tPnNldFVw
Q2FsbChDYWxsTGlua0luZm86OmNhbGxUeXBlRm9yKG9wY29kZUlEKSwgcmVnVDApOwogICAgIG1f
Y2FsbENvbXBpbGF0aW9uSW5mby5hcHBlbmQoQ2FsbENvbXBpbGF0aW9uSW5mbygpKTsKLSAgICBt
X2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmhvdFBhdGhCZWdpbiA9IGFk
ZHJlc3NPZkxpbmtlZEZ1bmN0aW9uQ2hlY2s7CiAgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2Nh
bGxMaW5rSW5mb0luZGV4XS5jYWxsTGlua0luZm8gPSBpbmZvOwogCi0gICAgaWYgKGNvbXBpbGVU
YWlsQ2FsbChieXRlY29kZSwgaW5mbywgY2FsbExpbmtJbmZvSW5kZXgpKSB7CisgICAgaWYgKGNv
bXBpbGVUYWlsQ2FsbChieXRlY29kZSwgaW5mbywgY2FsbExpbmtJbmZvSW5kZXgpKQogICAgICAg
ICByZXR1cm47Ci0gICAgfQogCiAgICAgaWYgKG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJh
cmdzIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cykgewotICAg
ICAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7Ci0gICAgICAgIHByZXBhcmVGb3JUYWlsQ2Fs
bFNsb3coKTsKLSAgICAgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4
XS5ob3RQYXRoT3RoZXIgPSBlbWl0TmFrZWROZWFyVGFpbENhbGwoKTsKKyAgICAgICAgYXV0byBz
bG93UGF0aHMgPSBpbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aCgqdGhpcywgcmVnVDAsIHJlZ1Qy
LCBDYWxsTGlua0luZm86OlVzZURhdGFJQzo6WWVzLCBbJl0geworICAgICAgICAgICAgZW1pdFJl
c3RvcmVDYWxsZWVTYXZlcygpOworICAgICAgICAgICAgcHJlcGFyZUZvclRhaWxDYWxsU2xvdyhH
UFJJbmZvOjpyZWdUMik7CisgICAgICAgIH0pOworICAgICAgICBhZGRTbG93Q2FzZShzbG93UGF0
aHMpOworICAgICAgICBhdXRvIGRvbmVMb2NhdGlvbiA9IGxhYmVsKCk7CisgICAgICAgIG1fY2Fs
bENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uZG9uZUxvY2F0aW9uID0gZG9uZUxv
Y2F0aW9uOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbV9jYWxsQ29tcGlsYXRpb25J
bmZvW2NhbGxMaW5rSW5mb0luZGV4XS5ob3RQYXRoT3RoZXIgPSBlbWl0TmFrZWROZWFyQ2FsbCgp
OworICAgIGF1dG8gc2xvd1BhdGhzID0gaW5mby0+ZW1pdEZhc3RQYXRoKCp0aGlzLCByZWdUMCwg
cmVnVDIsIENhbGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpZZXMpOworICAgIGF1dG8gZG9uZUxvY2F0
aW9uID0gbGFiZWwoKTsKKyAgICBhZGRTbG93Q2FzZShzbG93UGF0aHMpOworCisgICAgbV9jYWxs
Q29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5kb25lTG9jYXRpb24gPSBkb25lTG9j
YXRpb247CiAKICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvciht
X2NvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNr
UG9pbnRlclJlZ2lzdGVyKTsKICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwpAQCAt
MjY1LDE2ICsyNzMsMTUgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGxTbG93Q2FzZShjb25zdCBJ
bgogCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAorICAgIG1fY2FsbENvbXBpbGF0aW9u
SW5mb1tjYWxsTGlua0luZm9JbmRleF0uc2xvd1BhdGhTdGFydCA9IGxhYmVsKCk7CisKICAgICBp
ZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92
YXJhcmdzIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cykKICAg
ICAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwogCiAgICAgbW92ZShUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QzKTsKLSAgICBtb3ZlKFRydXN0ZWRJ
bW1QdHIobV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5jYWxsTGlua0lu
Zm8pLCByZWdUMik7Ci0KLSAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5k
ZXhdLmNhbGxSZXR1cm5Mb2NhdGlvbiA9Ci0gICAgICAgIGVtaXROYWtlZE5lYXJDYWxsKG1fdm0t
PmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFn
PigpKTsKKyAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmNhbGxM
aW5rSW5mby0+ZW1pdFNsb3dQYXRoKCptX3ZtLCAqdGhpcyk7CiAKLSAgICBpZiAob3Bjb2RlSUQg
PT0gb3BfdGFpbF9jYWxsIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzKSB7Cisg
ICAgaWYgKG9wY29kZUlEID09IG9wX3RhaWxfY2FsbCB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2Nh
bGxfdmFyYXJncyB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMp
IHsKICAgICAgICAgYWJvcnRXaXRoUmVhc29uKEpJVERpZFJldHVybkZyb21UYWlsQ2FsbCk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VE9wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDI3NzQ0MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzODYsNyArMTM4
Niw3IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25MaW5rQ2EKICAgICAgICAg
ICAgIGlmICghY2FsbExpbmtJbmZvLT5zZWVuT25jZSgpKQogICAgICAgICAgICAgICAgIGNhbGxM
aW5rSW5mby0+c2V0U2VlbigpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGxp
bmtGb3Iodm0sIGNhbGxlZUZyYW1lLCAqY2FsbExpbmtJbmZvLCBudWxscHRyLCBpbnRlcm5hbEZ1
bmN0aW9uLCBjb2RlUHRyKTsKKyAgICAgICAgICAgICAgICBsaW5rTW9ub21vcnBoaWNDYWxsKHZt
LCBjYWxsZWVGcmFtZSwgKmNhbGxMaW5rSW5mbywgbnVsbHB0ciwgaW50ZXJuYWxGdW5jdGlvbiwg
Y29kZVB0cik7CiAKICAgICAgICAgICAgIHZvaWQqIGxpbmtlZFRhcmdldCA9IGNvZGVQdHIuZXhl
Y3V0YWJsZUFkZHJlc3MoKTsKICAgICAgICAgICAgIHJldHVybiBlbmNvZGVSZXN1bHQobGlua2Vk
VGFyZ2V0LCByZWludGVycHJldF9jYXN0PHZvaWQqPihjYWxsTGlua0luZm8tPmNhbGxNb2RlKCkg
PT0gQ2FsbE1vZGU6OlRhaWwgPyBSZXVzZVRoZUZyYW1lIDogS2VlcFRoZUZyYW1lKSk7CkBAIC0x
NDM0LDcgKzE0MzQsNyBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uTGlua0Nh
CiAgICAgaWYgKCFjYWxsTGlua0luZm8tPnNlZW5PbmNlKCkpCiAgICAgICAgIGNhbGxMaW5rSW5m
by0+c2V0U2VlbigpOwogICAgIGVsc2UKLSAgICAgICAgbGlua0Zvcih2bSwgY2FsbGVlRnJhbWUs
ICpjYWxsTGlua0luZm8sIGNvZGVCbG9jaywgY2FsbGVlLCBjb2RlUHRyKTsKKyAgICAgICAgbGlu
a01vbm9tb3JwaGljQ2FsbCh2bSwgY2FsbGVlRnJhbWUsICpjYWxsTGlua0luZm8sIGNvZGVCbG9j
aywgY2FsbGVlLCBjb2RlUHRyKTsKIAogICAgIHJldHVybiBlbmNvZGVSZXN1bHQoY29kZVB0ci5l
eGVjdXRhYmxlQWRkcmVzcygpLCByZWludGVycHJldF9jYXN0PHZvaWQqPihjYWxsTGlua0luZm8t
PmNhbGxNb2RlKCkgPT0gQ2FsbE1vZGU6OlRhaWwgPyBSZXVzZVRoZUZyYW1lIDogS2VlcFRoZUZy
YW1lKSk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1BvbHltb3JwaGljQ2Fs
bFN0dWJSb3V0aW5lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L1BvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lLmNwcAkocmV2aXNpb24gMjc3NDQwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Qb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQ1LDcgKzQ1LDcgQEAgUG9seW1vcnBoaWNDYWxsTm9kZTo6flBvbHlt
b3JwaGljQ2FsbE5vZAogdm9pZCBQb2x5bW9ycGhpY0NhbGxOb2RlOjp1bmxpbmsoVk0mIHZtKQog
ewogICAgIGlmIChtX2NhbGxMaW5rSW5mbykgewotICAgICAgICBkYXRhTG9nTG5JZihPcHRpb25z
OjpkdW1wRGlzYXNzZW1ibHkoKSwgIlVubGlua2luZyBwb2x5bW9ycGhpYyBjYWxsIGF0ICIsIG1f
Y2FsbExpbmtJbmZvLT5jYWxsUmV0dXJuTG9jYXRpb24oKSwgIiwgYmMjIiwgbV9jYWxsTGlua0lu
Zm8tPmNvZGVPcmlnaW4oKS5ieXRlY29kZUluZGV4KCkpOworICAgICAgICBkYXRhTG9nTG5JZihP
cHRpb25zOjpkdW1wRGlzYXNzZW1ibHkoKSwgIlVubGlua2luZyBwb2x5bW9ycGhpYyBjYWxsIGF0
ICIsIG1fY2FsbExpbmtJbmZvLT5kb25lTG9jYXRpb24oKSwgIiwgYmMjIiwgbV9jYWxsTGlua0lu
Zm8tPmNvZGVPcmlnaW4oKS5ieXRlY29kZUluZGV4KCkpOwogICAgICAgICBtX2NhbGxMaW5rSW5m
by0+dW5saW5rKHZtKTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
UmVwYXRjaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBh
dGNoLmNwcAkocmV2aXNpb24gMjc3NDQwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9S
ZXBhdGNoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE4OCwyMCArMTE4OCwyMCBAQCB2b2lkIHJl
cGF0Y2hJbnN0YW5jZU9mKAogICAgICAgICBmdGxUaHVua0F3YXJlUmVwYXRjaENhbGwoY29kZUJs
b2NrLCBzdHViSW5mby5zbG93UGF0aENhbGxMb2NhdGlvbiwgb3BlcmF0aW9uSW5zdGFuY2VPZkdl
bmVyaWMpOwogfQogCi1zdGF0aWMgdm9pZCBsaW5rU2xvd0ZvcihWTSYsIENhbGxMaW5rSW5mbyYg
Y2FsbExpbmtJbmZvLCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUU3R1YlJvdXRpbmVQdHJUYWc+
IGNvZGVSZWYpCitzdGF0aWMgdm9pZCBsaW5rU2xvd1BhdGhUbyhWTSYsIENhbGxMaW5rSW5mbyYg
Y2FsbExpbmtJbmZvLCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUU3R1YlJvdXRpbmVQdHJUYWc+
IGNvZGVSZWYpCiB7Ci0gICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hOZWFyQ2FsbChjYWxsTGlu
a0luZm8uY2FsbFJldHVybkxvY2F0aW9uKCksIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0
aW5lUHRyVGFnPihjb2RlUmVmLmNvZGUoKSkpOworICAgIGNhbGxMaW5rSW5mby5zZXRTbG93UGF0
aENhbGxEZXN0aW5hdGlvbihjb2RlUmVmLmNvZGUoKS50ZW1wbGF0ZSByZXRhZ2dlZDxKU0VudHJ5
UHRyVGFnPigpKTsKIH0KIAotc3RhdGljIHZvaWQgbGlua1Nsb3dGb3IoVk0mIHZtLCBDYWxsTGlu
a0luZm8mIGNhbGxMaW5rSW5mbywgVGh1bmtHZW5lcmF0b3IgZ2VuZXJhdG9yKQorc3RhdGljIHZv
aWQgbGlua1Nsb3dQYXRoVG8oVk0mIHZtLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbywgVGh1
bmtHZW5lcmF0b3IgZ2VuZXJhdG9yKQogewotICAgIGxpbmtTbG93Rm9yKHZtLCBjYWxsTGlua0lu
Zm8sIHZtLmdldENUSVN0dWIoZ2VuZXJhdG9yKS5yZXRhZ2dlZDxKSVRTdHViUm91dGluZVB0clRh
Zz4oKSk7CisgICAgbGlua1Nsb3dQYXRoVG8odm0sIGNhbGxMaW5rSW5mbywgdm0uZ2V0Q1RJU3R1
YihnZW5lcmF0b3IpLnJldGFnZ2VkPEpJVFN0dWJSb3V0aW5lUHRyVGFnPigpKTsKIH0KIAogc3Rh
dGljIHZvaWQgbGlua1Nsb3dGb3IoVk0mIHZtLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbykK
IHsKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUU3R1YlJvdXRpbmVQdHJUYWc+IHZpcnR1
YWxUaHVuayA9IHZpcnR1YWxUaHVua0Zvcih2bSwgY2FsbExpbmtJbmZvKTsKLSAgICBsaW5rU2xv
d0Zvcih2bSwgY2FsbExpbmtJbmZvLCB2aXJ0dWFsVGh1bmspOworICAgIGxpbmtTbG93UGF0aFRv
KHZtLCBjYWxsTGlua0luZm8sIHZpcnR1YWxUaHVuayk7CiAgICAgY2FsbExpbmtJbmZvLnNldFNs
b3dTdHViKEdDQXdhcmVKSVRTdHViUm91dGluZTo6Y3JlYXRlKHZpcnR1YWxUaHVuaywgdm0pKTsK
IH0KIApAQCAtMTIxNyw3ICsxMjE3LDcgQEAgc3RhdGljIEpTQ2VsbCogd2ViQXNzZW1ibHlPd25l
cihKU0NlbGwqIAogI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKIH0KIAotdm9pZCBsaW5r
Rm9yKAordm9pZCBsaW5rTW9ub21vcnBoaWNDYWxsKAogICAgIFZNJiB2bSwgQ2FsbEZyYW1lKiBj
YWxsRnJhbWUsIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvLCBDb2RlQmxvY2sqIGNhbGxlZUNv
ZGVCbG9jaywKICAgICBKU09iamVjdCogY2FsbGVlLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNF
bnRyeVB0clRhZz4gY29kZVB0cikKIHsKQEAgLTEyMzUsMjYgKzEyMzUsMjQgQEAgdm9pZCBsaW5r
Rm9yKAogICAgIEFTU0VSVChvd25lcik7CiAKICAgICBBU1NFUlQoIWNhbGxMaW5rSW5mby5pc0xp
bmtlZCgpKTsKLSAgICBjYWxsTGlua0luZm8uc2V0Q2FsbGVlKHZtLCBvd25lciwgY2FsbGVlKTsK
LSAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaFBvaW50ZXIoY2FsbExpbmtJbmZvLmhvdFBhdGhC
ZWdpbigpLCBjYWxsZWUpOworICAgIGNhbGxMaW5rSW5mby5zZXRNb25vbW9ycGhpY0NhbGxlZSh2
bSwgb3duZXIsIGNhbGxlZSwgY29kZVB0cik7CiAgICAgY2FsbExpbmtJbmZvLnNldExhc3RTZWVu
Q2FsbGVlKHZtLCBvd25lciwgY2FsbGVlKTsKKwogICAgIGlmIChzaG91bGREdW1wRGlzYXNzZW1i
bHlGb3IoY2FsbGVyQ29kZUJsb2NrKSkKICAgICAgICAgZGF0YUxvZygiTGlua2luZyBjYWxsIGlu
ICIsIEZ1bGxDb2RlT3JpZ2luKGNhbGxlckNvZGVCbG9jaywgY2FsbExpbmtJbmZvLmNvZGVPcmln
aW4oKSksICIgdG8gIiwgcG9pbnRlckR1bXAoY2FsbGVlQ29kZUJsb2NrKSwgIiwgZW50cnlwb2lu
dCBhdCAiLCBjb2RlUHRyLCAiXG4iKTsKIAotICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoTmVh
ckNhbGwoY2FsbExpbmtJbmZvLmhvdFBhdGhPdGhlcigpLCBDb2RlTG9jYXRpb25MYWJlbDxKU0Vu
dHJ5UHRyVGFnPihjb2RlUHRyKSk7Ci0KICAgICBpZiAoY2FsbGVlQ29kZUJsb2NrKQogICAgICAg
ICBjYWxsZWVDb2RlQmxvY2stPmxpbmtJbmNvbWluZ0NhbGwoY2FsbGVyRnJhbWUsICZjYWxsTGlu
a0luZm8pOwogCiAgICAgaWYgKGNhbGxMaW5rSW5mby5zcGVjaWFsaXphdGlvbktpbmQoKSA9PSBD
b2RlRm9yQ2FsbCAmJiBjYWxsTGlua0luZm8uYWxsb3dTdHVicygpKSB7Ci0gICAgICAgIGxpbmtT
bG93Rm9yKHZtLCBjYWxsTGlua0luZm8sIGxpbmtQb2x5bW9ycGhpY0NhbGxUaHVua0dlbmVyYXRv
cik7CisgICAgICAgIGxpbmtTbG93UGF0aFRvKHZtLCBjYWxsTGlua0luZm8sIGxpbmtQb2x5bW9y
cGhpY0NhbGxUaHVua0dlbmVyYXRvcik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCiAg
ICAgbGlua1Nsb3dGb3Iodm0sIGNhbGxMaW5rSW5mbyk7CiB9CiAKLXZvaWQgbGlua0RpcmVjdEZv
cigKK3ZvaWQgbGlua0RpcmVjdENhbGwoCiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIENhbGxM
aW5rSW5mbyYgY2FsbExpbmtJbmZvLCBDb2RlQmxvY2sqIGNhbGxlZUNvZGVCbG9jaywKICAgICBN
YWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gY29kZVB0cikKIHsKQEAgLTEyNjks
OSArMTI2Nyw3IEBAIHZvaWQgbGlua0RpcmVjdEZvcigKICAgICBpZiAoc2hvdWxkRHVtcERpc2Fz
c2VtYmx5Rm9yKGNhbGxlckNvZGVCbG9jaykpCiAgICAgICAgIGRhdGFMb2coIkxpbmtpbmcgY2Fs
bCBpbiAiLCBGdWxsQ29kZU9yaWdpbihjYWxsZXJDb2RlQmxvY2ssIGNhbGxMaW5rSW5mby5jb2Rl
T3JpZ2luKCkpLCAiIHRvICIsIHBvaW50ZXJEdW1wKGNhbGxlZUNvZGVCbG9jayksICIsIGVudHJ5
cG9pbnQgYXQgIiwgY29kZVB0ciwgIlxuIik7CiAKLSAgICBpZiAoY2FsbExpbmtJbmZvLmNhbGxU
eXBlKCkgPT0gQ2FsbExpbmtJbmZvOjpEaXJlY3RUYWlsQ2FsbCkKLSAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OnJlcGF0Y2hKdW1wVG9Ob3AoY2FsbExpbmtJbmZvLnBhdGNoYWJsZUp1bXAoKSk7Ci0g
ICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hOZWFyQ2FsbChjYWxsTGlua0luZm8uaG90UGF0aE90
aGVyKCksIENvZGVMb2NhdGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+KGNvZGVQdHIpKTsKKyAgICBj
YWxsTGlua0luZm8uc2V0RGlyZWN0Q2FsbFRhcmdldChDb2RlTG9jYXRpb25MYWJlbDxKU0VudHJ5
UHRyVGFnPihjb2RlUHRyKSk7CiAKICAgICBpZiAoY2FsbGVlQ29kZUJsb2NrKQogICAgICAgICBj
YWxsZWVDb2RlQmxvY2stPmxpbmtJbmNvbWluZ0NhbGwoY2FsbEZyYW1lLCAmY2FsbExpbmtJbmZv
KTsKQEAgLTEyODksMjEgKzEyODUsMTYgQEAgc3RhdGljIHZvaWQgcmV2ZXJ0Q2FsbChWTSYgdm0s
IENhbGxMaW5rSQogewogICAgIGlmIChjYWxsTGlua0luZm8uaXNEaXJlY3QoKSkgewogICAgICAg
ICBjYWxsTGlua0luZm8uY2xlYXJDb2RlQmxvY2soKTsKLSAgICAgICAgaWYgKCFjYWxsTGlua0lu
Zm8uY2xlYXJlZEJ5SmV0dGlzb24oKSkgewotICAgICAgICAgICAgaWYgKGNhbGxMaW5rSW5mby5j
YWxsVHlwZSgpID09IENhbGxMaW5rSW5mbzo6RGlyZWN0VGFpbENhbGwpCi0gICAgICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hKdW1wKGNhbGxMaW5rSW5mby5wYXRjaGFibGVKdW1w
KCksIGNhbGxMaW5rSW5mby5zbG93UGF0aFN0YXJ0KCkpOwotICAgICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoTmVhckNhbGwoY2FsbExpbmtJbmZv
LmhvdFBhdGhPdGhlcigpLCBjYWxsTGlua0luZm8uc2xvd1BhdGhTdGFydCgpKTsKLSAgICAgICAg
fQorICAgICAgICBpZiAoIWNhbGxMaW5rSW5mby5jbGVhcmVkQnlKZXR0aXNvbigpKQorICAgICAg
ICAgICAgY2FsbExpbmtJbmZvLmluaXRpYWxpemVEaXJlY3RDYWxsKCk7CiAgICAgfSBlbHNlIHsK
ICAgICAgICAgaWYgKCFjYWxsTGlua0luZm8uY2xlYXJlZEJ5SmV0dGlzb24oKSkgewotICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJldmVydEp1bXBSZXBsYWNlbWVudFRvQnJhbmNoUHRyV2l0
aFBhdGNoKAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpzdGFydE9mQnJhbmNoUHRy
V2l0aFBhdGNoT25SZWdpc3RlcihjYWxsTGlua0luZm8uaG90UGF0aEJlZ2luKCkpLAotICAgICAg
ICAgICAgICAgIGNhbGxMaW5rSW5mby5jYWxsZWVHUFIoKSwgbnVsbHB0cik7Ci0gICAgICAgICAg
ICBsaW5rU2xvd0Zvcih2bSwgY2FsbExpbmtJbmZvLCBjb2RlUmVmKTsKLSAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpyZXBhdGNoUG9pbnRlcihjYWxsTGlua0luZm8uaG90UGF0aEJlZ2luKCks
IG51bGxwdHIpOworICAgICAgICAgICAgbGlua1Nsb3dQYXRoVG8odm0sIGNhbGxMaW5rSW5mbywg
Y29kZVJlZik7CisKKyAgICAgICAgICAgIGlmIChjYWxsTGlua0luZm8uc3R1YigpKQorICAgICAg
ICAgICAgICAgIGNhbGxMaW5rSW5mby5yZXZlcnRDYWxsVG9TdHViKCk7CiAgICAgICAgIH0KLSAg
ICAgICAgY2FsbExpbmtJbmZvLmNsZWFyQ2FsbGVlKCk7CisgICAgICAgIGNhbGxMaW5rSW5mby5j
bGVhckNhbGxlZSgpOyAvLyBUaGlzIGFsc28gY2xlYXJzIHRoZSBpbmxpbmUgY2FjaGUgYm90aCBm
b3IgZGF0YSBhbmQgY29kZS1iYXNlZCBjYWNoZXMuCiAgICAgfQogICAgIGNhbGxMaW5rSW5mby5j
bGVhclNlZW4oKTsKICAgICBjYWxsTGlua0luZm8uY2xlYXJTdHViKCk7CkBAIC0xMzEyLDkgKzEz
MDMsOSBAQCBzdGF0aWMgdm9pZCByZXZlcnRDYWxsKFZNJiB2bSwgQ2FsbExpbmtJCiAgICAgICAg
IGNhbGxMaW5rSW5mby5yZW1vdmUoKTsKIH0KIAotdm9pZCB1bmxpbmtGb3IoVk0mIHZtLCBDYWxs
TGlua0luZm8mIGNhbGxMaW5rSW5mbykKK3ZvaWQgdW5saW5rQ2FsbChWTSYgdm0sIENhbGxMaW5r
SW5mbyYgY2FsbExpbmtJbmZvKQogewotICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OmR1bXBEaXNh
c3NlbWJseSgpLCAiVW5saW5raW5nIGNhbGwgYXQgIiwgY2FsbExpbmtJbmZvLmhvdFBhdGhPdGhl
cigpKTsKKyAgICBkYXRhTG9nTG5JZihPcHRpb25zOjpkdW1wRGlzYXNzZW1ibHkoKSwgIlVubGlu
a2luZyBjYWxsIGF0ICIsIGNhbGxMaW5rSW5mby5mYXN0UGF0aFN0YXJ0KCkpOwogICAgIAogICAg
IHJldmVydENhbGwodm0sIGNhbGxMaW5rSW5mbywgdm0uZ2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5r
R2VuZXJhdG9yKS5yZXRhZ2dlZDxKSVRTdHViUm91dGluZVB0clRhZz4oKSk7CiB9CkBAIC0xNTgw
LDcgKzE1NzEsNyBAQCB2b2lkIGxpbmtQb2x5bW9ycGhpY0NhbGwoSlNHbG9iYWxPYmplY3QqCiAg
ICAgfQogICAgIHN0dWJKaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoZ2xvYmFs
T2JqZWN0KSwgR1BSSW5mbzo6cmVnVDMpOwogICAgIHN0dWJKaXQubW92ZShDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW1QdHIoJmNhbGxMaW5rSW5mbyksIEdQUkluZm86OnJlZ1QyKTsKLSAgICBzdHVi
Sml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGNhbGxMaW5rSW5mby5jYWxsUmV0
dXJuTG9jYXRpb24oKS51bnRhZ2dlZEV4ZWN1dGFibGVBZGRyZXNzKCkpLCBHUFJJbmZvOjpyZWdU
NCk7CisgICAgc3R1YkppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihjYWxsTGlu
a0luZm8uZG9uZUxvY2F0aW9uKCkudW50YWdnZWRFeGVjdXRhYmxlQWRkcmVzcygpKSwgR1BSSW5m
bzo6cmVnVDQpOwogICAgIAogICAgIHN0dWJKaXQucmVzdG9yZVJldHVybkFkZHJlc3NCZWZvcmVS
ZXR1cm4oR1BSSW5mbzo6cmVnVDQpOwogICAgIEFzc2VtYmx5SGVscGVyczo6SnVtcCBzbG93ID0g
c3R1YkppdC5qdW1wKCk7CkBAIC0xNjAzLDI5ICsxNTk0LDIzIEBAIHZvaWQgbGlua1BvbHltb3Jw
aGljQ2FsbChKU0dsb2JhbE9iamVjdCoKICAgICAgICAgcGF0Y2hCdWZmZXIubGluayhjYWxsVG9D
b2RlUHRyLmNhbGwsIEZ1bmN0aW9uUHRyPEpTRW50cnlQdHJUYWc+KGNhbGxUb0NvZGVQdHIuY29k
ZVB0cikpOwogI2VuZGlmCiAgICAgfQotICAgIGlmIChpc1dlYkFzc2VtYmx5IHx8IEpJVENvZGU6
OmlzT3B0aW1pemluZ0pJVChjYWxsZXJDb2RlQmxvY2stPmppdFR5cGUoKSkpCi0gICAgICAgIHBh
dGNoQnVmZmVyLmxpbmsoZG9uZSwgY2FsbExpbmtJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbigpLmxh
YmVsQXRPZmZzZXQoMCkpOwotICAgIGVsc2UKLSAgICAgICAgcGF0Y2hCdWZmZXIubGluayhkb25l
LCBjYWxsTGlua0luZm8uaG90UGF0aE90aGVyKCkubGFiZWxBdE9mZnNldCgwKSk7CisgICAgcGF0
Y2hCdWZmZXIubGluayhkb25lLCBjYWxsTGlua0luZm8uZG9uZUxvY2F0aW9uKCkpOwogICAgIHBh
dGNoQnVmZmVyLmxpbmsoc2xvdywgQ29kZUxvY2F0aW9uTGFiZWw8SklUVGh1bmtQdHJUYWc+KHZt
LmdldENUSVN0dWIobGlua1BvbHltb3JwaGljQ2FsbFRodW5rR2VuZXJhdG9yKS5jb2RlKCkpKTsK
ICAgICAKICAgICBhdXRvIHN0dWJSb3V0aW5lID0gYWRvcHRSZWYoKm5ldyBQb2x5bW9ycGhpY0Nh
bGxTdHViUm91dGluZSgKICAgICAgICAgRklOQUxJWkVfQ09ERV9GT1IoCiAgICAgICAgICAgICBj
YWxsZXJDb2RlQmxvY2ssIHBhdGNoQnVmZmVyLCBKSVRTdHViUm91dGluZVB0clRhZywKICAgICAg
ICAgICAgICJQb2x5bW9ycGhpYyBjYWxsIHN0dWIgZm9yICVzLCByZXR1cm4gcG9pbnQgJXAsIHRh
cmdldHMgJXMiLAotICAgICAgICAgICAgICAgIGlzV2ViQXNzZW1ibHkgPyAiV2ViQXNzZW1ibHki
IDogdG9DU3RyaW5nKCpjYWxsZXJDb2RlQmxvY2spLmRhdGEoKSwgY2FsbExpbmtJbmZvLmNhbGxS
ZXR1cm5Mb2NhdGlvbigpLmxhYmVsQXRPZmZzZXQoMCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwKKyAg
ICAgICAgICAgICAgICBpc1dlYkFzc2VtYmx5ID8gIldlYkFzc2VtYmx5IiA6IHRvQ1N0cmluZygq
Y2FsbGVyQ29kZUJsb2NrKS5kYXRhKCksIGNhbGxMaW5rSW5mby5kb25lTG9jYXRpb24oKS5leGVj
dXRhYmxlQWRkcmVzcygpLAogICAgICAgICAgICAgICAgIHRvQ1N0cmluZyhsaXN0RHVtcChjYWxs
Q2FzZXMpKS5kYXRhKCkpLAogICAgICAgICB2bSwgb3duZXIsIGNhbGxGcmFtZS0+Y2FsbGVyRnJh
bWUoKSwgY2FsbExpbmtJbmZvLCBjYWxsQ2FzZXMsCiAgICAgICAgIFdURk1vdmUoZmFzdENvdW50
cykpKTsKLSAgICAKLSAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwbGFjZVdpdGhKdW1wKAotICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6c3RhcnRPZkJyYW5jaFB0cldpdGhQYXRjaE9uUmVnaXN0ZXIoY2Fs
bExpbmtJbmZvLmhvdFBhdGhCZWdpbigpKSwKLSAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SklU
U3R1YlJvdXRpbmVQdHJUYWc+KHN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7CisKICAgICAv
LyBUaGUgb3JpZ2luYWwgc2xvdyBwYXRoIGlzIHVucmVhY2hhYmxlIG9uIDY0LWJpdHMsIGJ1dCBz
dGlsbAogICAgIC8vIHJlYWNoYWJsZSBvbiAzMi1iaXRzIHNpbmNlIGEgbm9uLWNlbGwgY2FsbGVl
IHdpbGwgYWx3YXlzCiAgICAgLy8gdHJpZ2dlciB0aGUgc2xvdyBwYXRoCiAgICAgbGlua1Nsb3dG
b3Iodm0sIGNhbGxMaW5rSW5mbyk7Ci0gICAgCisKICAgICAvLyBJZiB0aGVyZSBoYWQgYmVlbiBh
IHByZXZpb3VzIHN0dWIgcm91dGluZSwgdGhhdCBvbmUgd2lsbCBkaWUgYXMgc29vbiBhcyB0aGUg
R0MgcnVucyBhbmQgc2VlcwogICAgIC8vIHRoYXQgaXQncyBubyBsb25nZXIgb24gc3RhY2suCiAg
ICAgY2FsbExpbmtJbmZvLnNldFN0dWIoV1RGTW92ZShzdHViUm91dGluZSkpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmgJKHJldmlzaW9uIDI3NzQ0MCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5oCSh3b3JraW5nIGNvcHkpCkBAIC01NiwxMCArNTYs
MTAgQEAgdm9pZCByZXBhdGNoSW5CeUlEKEpTR2xvYmFsT2JqZWN0KiwgQ29kZQogdm9pZCByZXBh
dGNoQ2hlY2tQcml2YXRlQnJhbmQoSlNHbG9iYWxPYmplY3QqLCBDb2RlQmxvY2sqLCBKU09iamVj
dCosIENhY2hlYWJsZUlkZW50aWZpZXIsIFN0cnVjdHVyZVN0dWJJbmZvJik7CiB2b2lkIHJlcGF0
Y2hTZXRQcml2YXRlQnJhbmQoSlNHbG9iYWxPYmplY3QqLCBDb2RlQmxvY2sqLCBKU09iamVjdCos
IFN0cnVjdHVyZSosIENhY2hlYWJsZUlkZW50aWZpZXIsIFN0cnVjdHVyZVN0dWJJbmZvJik7CiB2
b2lkIHJlcGF0Y2hJbnN0YW5jZU9mKEpTR2xvYmFsT2JqZWN0KiwgQ29kZUJsb2NrKiwgSlNWYWx1
ZSB2YWx1ZSwgSlNWYWx1ZSBwcm90b3R5cGUsIFN0cnVjdHVyZVN0dWJJbmZvJiwgYm9vbCB3YXNG
b3VuZCk7Ci12b2lkIGxpbmtGb3IoVk0mLCBDYWxsRnJhbWUqLCBDYWxsTGlua0luZm8mLCBDb2Rl
QmxvY2sqLCBKU09iamVjdCogY2FsbGVlLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0
clRhZz4pOwotdm9pZCBsaW5rRGlyZWN0Rm9yKENhbGxGcmFtZSosIENhbGxMaW5rSW5mbyYsIENv
ZGVCbG9jayosIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPik7Cit2b2lkIGxp
bmtNb25vbW9ycGhpY0NhbGwoVk0mLCBDYWxsRnJhbWUqLCBDYWxsTGlua0luZm8mLCBDb2RlQmxv
Y2sqLCBKU09iamVjdCogY2FsbGVlLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRh
Zz4pOwordm9pZCBsaW5rRGlyZWN0Q2FsbChDYWxsRnJhbWUqLCBDYWxsTGlua0luZm8mLCBDb2Rl
QmxvY2sqLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4pOwogdm9pZCBsaW5r
U2xvd0ZvcihDYWxsRnJhbWUqLCBDYWxsTGlua0luZm8mKTsKLXZvaWQgdW5saW5rRm9yKFZNJiwg
Q2FsbExpbmtJbmZvJik7Cit2b2lkIHVubGlua0NhbGwoVk0mLCBDYWxsTGlua0luZm8mKTsKIHZv
aWQgbGlua1BvbHltb3JwaGljQ2FsbChKU0dsb2JhbE9iamVjdCosIENhbGxGcmFtZSosIENhbGxM
aW5rSW5mbyYsIENhbGxWYXJpYW50KTsKIHZvaWQgcmVzZXRHZXRCeShDb2RlQmxvY2sqLCBTdHJ1
Y3R1cmVTdHViSW5mbyYsIEdldEJ5S2luZCk7CiB2b2lkIHJlc2V0UHV0QnlJRChDb2RlQmxvY2sq
LCBTdHJ1Y3R1cmVTdHViSW5mbyYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvV2FzbVRvSlMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL1dhc21Ub0pTLmNwcAkocmV2aXNpb24gMjc3NDQwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvV2FzbVRvSlMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjEsMTkgKzI2MSwx
OCBAQCBFeHBlY3RlZDxNYWNyb0Fzc2VtYmxlckNvZGVSZWY8V2FzbUVudHJ5CiAKICAgICBDYWxs
TGlua0luZm8qIGNhbGxMaW5rSW5mbyA9IGNhbGxMaW5rSW5mb3MuYWRkKENvZGVPcmlnaW4oKSk7
CiAgICAgY2FsbExpbmtJbmZvLT5zZXRVcENhbGwoQ2FsbExpbmtJbmZvOjpDYWxsLCBpbXBvcnRK
U0NlbGxHUFJSZWcpOwotICAgIEpJVDo6RGF0YUxhYmVsUHRyIHRhcmdldFRvQ2hlY2s7Ci0gICAg
SklUOjpUcnVzdGVkSW1tUHRyIGluaXRpYWxSaWdodFZhbHVlKG51bGxwdHIpOwotICAgIEpJVDo6
SnVtcCBzbG93UGF0aCA9IGppdC5icmFuY2hQdHJXaXRoUGF0Y2goTWFjcm9Bc3NlbWJsZXI6Ok5v
dEVxdWFsLCBpbXBvcnRKU0NlbGxHUFJSZWcsIHRhcmdldFRvQ2hlY2ssIGluaXRpYWxSaWdodFZh
bHVlKTsKLSAgICBKSVQ6OkNhbGwgZmFzdENhbGwgPSBqaXQubmVhckNhbGwoKTsKKyAgICBhdXRv
IHNsb3dQYXRoID0gY2FsbExpbmtJbmZvLT5lbWl0RmFzdFBhdGgoaml0LCBpbXBvcnRKU0NlbGxH
UFJSZWcsIEludmFsaWRHUFJSZWcsIENhbGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpObyk7CisKICAg
ICBKSVQ6Okp1bXAgZG9uZSA9IGppdC5qdW1wKCk7CiAgICAgc2xvd1BhdGgubGluaygmaml0KTsK
KyAgICBhdXRvIHNsb3dQYXRoU3RhcnQgPSBqaXQubGFiZWwoKTsKICAgICAvLyBDYWxsZWUgbmVl
ZHMgdG8gYmUgaW4gcmVnVDAgaGVyZS4KLSAgICBqaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbVB0cihjYWxsTGlua0luZm8pLCBHUFJJbmZvOjpyZWdUMik7IC8vIExpbmsgaW5mbyBu
ZWVkcyB0byBiZSBpbiByZWdUMi4KICAgICBqaXQubG9hZFdhc21Db250ZXh0SW5zdGFuY2UoR1BS
SW5mbzo6cmVnVDMpOwogICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJ
bmZvOjpyZWdUMywgSW5zdGFuY2U6Om9mZnNldE9mT3duZXIoKSksIEdQUkluZm86OnJlZ1QzKTsK
ICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDMsIEpT
V2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIEdQUkluZm86OnJl
Z1QzKTsKLSAgICBKSVQ6OkNhbGwgc2xvd0NhbGwgPSBqaXQubmVhckNhbGwoKTsKKyAgICBjYWxs
TGlua0luZm8tPmVtaXRTbG93UGF0aCh2bSwgaml0KTsKICAgICBkb25lLmxpbmsoJmppdCk7Cisg
ICAgYXV0byBkb25lTG9jYXRpb24gPSBqaXQubGFiZWwoKTsKIAogICAgIGlmIChzaWduYXR1cmUu
cmV0dXJuQ291bnQoKSA9PSAxKSB7CiAgICAgICAgIHN3aXRjaCAoc2lnbmF0dXJlLnJldHVyblR5
cGUoMCkua2luZCkgewpAQCAtNDIxLDExICs0MjAsOSBAQCBFeHBlY3RlZDxNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8V2FzbUVudHJ5CiAgICAgaWYgKFVOTElLRUxZKHBhdGNoQnVmZmVyLmRpZEZhaWxU
b0FsbG9jYXRlKCkpKQogICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoQmluZGluZ0ZhaWx1
cmU6Ok91dE9mTWVtb3J5KTsKIAotICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvd0NhbGwsIEZ1bmN0
aW9uUHRyPEpJVFRodW5rUHRyVGFnPih2bS5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0
b3IpLmNvZGUoKSkpOwotICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IGNh
bGxSZXR1cm5Mb2NhdGlvbihwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8SlNJbnRlcm5h
bFB0clRhZz4oc2xvd0NhbGwpKTsKLSAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRy
VGFnPiBob3RQYXRoQmVnaW4ocGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFn
Pih0YXJnZXRUb0NoZWNrKSk7Ci0gICAgQ29kZUxvY2F0aW9uTmVhckNhbGw8SlNJbnRlcm5hbFB0
clRhZz4gaG90UGF0aE90aGVyID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPEpTSW50
ZXJuYWxQdHJUYWc+KGZhc3RDYWxsKTsKLSAgICBjYWxsTGlua0luZm8tPnNldENhbGxMb2NhdGlv
bnMoY2FsbFJldHVybkxvY2F0aW9uLCBob3RQYXRoQmVnaW4sIGhvdFBhdGhPdGhlcik7CisgICAg
Y2FsbExpbmtJbmZvLT5zZXRDb2RlTG9jYXRpb25zKAorICAgICAgICBwYXRjaEJ1ZmZlci5sb2Nh
dGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KHNsb3dQYXRoU3RhcnQpLAorICAgICAgICBwYXRjaEJ1
ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KGRvbmVMb2NhdGlvbikpOwogCiAgICAg
cmV0dXJuIEZJTkFMSVpFX1dBU01fQ09ERShwYXRjaEJ1ZmZlciwgV2FzbUVudHJ5UHRyVGFnLCAi
V2ViQXNzZW1ibHktPkphdmFTY3JpcHQgaW1wb3J0WyVpXSAlcyIsIGltcG9ydEluZGV4LCBzaWdu
YXR1cmUudG9TdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSk7CiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>428582</attachid>
            <date>2021-05-13 17:13:50 -0700</date>
            <delta_ts>2021-05-14 10:42:26 -0700</delta_ts>
            <desc>patch</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>90676</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjc3NDUzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyNSBA
QAorMjAyMS0wNS0xMyAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KKworICAgICAg
ICBBZGQgRGF0YSBDYWxsIElDcyB0aGF0IGRvbid0IHJlcGF0Y2ggYW5kIHVzZSB0aGVtIGluIHRo
ZSBiYXNlbGluZSBKSVQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIyNTMyMQorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNzc3NzM3OTY+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBhZGRz
IERhdGEgSUNzIGZvciBjYWxscy4gRGF0YSBJQ3MgZm9yIGNhbGxzIHdvcmsgYnkgbG9hZGluZyBh
IGNvZGUgCisgICAgICAgIHBvaW50ZXIgZnJvbSBDYWxsTGlua0luZm8sIGFuZCBpbmRyZWN0IGNh
bGxpbmcgdGhhdCBwb2ludGVyLiBUaGlzIG1lYW5zIHRoYXQKKyAgICAgICAgdG8gcmVwYXRjaCBz
dWNoIGFuIElDLCBhbGwgd2UgbmVlZCB0byBkbyBpcyByZXBsYWNlIGEgY29kZSBwb2ludGVyIGlu
c2lkZQorICAgICAgICBDYWxsTGlua0luZm8uIE5vIG5lZWQgdG8gcmVwYXRjaCB0aGUgSklUIGNv
ZGUuCisgICAgICAgIAorICAgICAgICBUaGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBvbmx5IGRv
ZXMgdGhpcyBmb3IgbW9ub21vcnBoaWMgY2FsbHMuIFdlIHN0aWxsCisgICAgICAgIHJlcGF0Y2gg
dGhlIEpJVCBjb2RlIGZvciBwb2x5bW9ycGhpYyBjYWxscy4gSW4gYSBmb2xsb3d1cCwgd2Ugd2ls
bCBhbHNvCisgICAgICAgIG9wdCBwb2x5bW9ycGhpYyBjYWxsIElDcyBpbnRvIGRhdGEtYmFzZWQg
Y2FsbHM6CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
MjU3OTMKKyAgICAgICAgCisgICAgICAgIFRoaXMgcGF0Y2ggb25seSB1c2VzIERhdGEgQ2FsbCBJ
Q3MgZm9yIHRoZSBCYXNlbGluZSBKSVQuIEV2ZW4gd2l0aCB0aGF0LCBpdAorICAgICAgICByZWR1
Y2VzIHRoZSBudW1iZXIgb2YgY2FsbHMgdG8gY2FjaGVGbHVzaCBieSB+NDUlIG9uIEpldFN0cmVh
bTIuCisgICAgICAgIAorICAgICAgICBQZXJmb3JtYW5jZSBpcyBuZXV0cmFsIG9uIEFTIE1hY3Ms
IGJ1dCBpdCBwYXZlcyB0aGUgd2F5IHRvd2FyZHMgZG9pbmcKKyAgICAgICAgdW5saW5rZWQgSklU
dGluZyBpbiBKU0MuCisKKyAgICAgICAgKiBhc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxl
ci5oOgorICAgICAgICAoSlNDOjpBYnN0cmFjdE1hY3JvQXNzZW1ibGVyOjphZGRMYXRlTGlua1Rh
c2spOgorICAgICAgICAqIGFzc2VtYmxlci9MaW5rQnVmZmVyLmNwcDoKKyAgICAgICAgKEpTQzo6
TGlua0J1ZmZlcjo6bGlua0NvZGUpOgorICAgICAgICAoSlNDOjpMaW5rQnVmZmVyOjpwZXJmb3Jt
RmluYWxpemF0aW9uKToKKyAgICAgICAgKiBhc3NlbWJsZXIvTGlua0J1ZmZlci5oOgorICAgICAg
ICAqIGJ5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpn
ZW5lcmF0ZUltcGwpOgorICAgICAgICAqIGJ5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHA6CisgICAg
ICAgIChKU0M6OkNhbGxMaW5rSW5mbzo6Q2FsbExpbmtJbmZvKToKKyAgICAgICAgKEpTQzo6Q2Fs
bExpbmtJbmZvOjp1bmxpbmspOgorICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86OmZhc3RQYXRo
U3RhcnQpOgorICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86OnNsb3dQYXRoU3RhcnQpOgorICAg
ICAgICAoSlNDOjpDYWxsTGlua0luZm86OmRvbmVMb2NhdGlvbik6CisgICAgICAgIChKU0M6OkNh
bGxMaW5rSW5mbzo6c2V0TW9ub21vcnBoaWNDYWxsZWUpOgorICAgICAgICAoSlNDOjpDYWxsTGlu
a0luZm86OmNsZWFyQ2FsbGVlKToKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtJbmZvOjplbWl0Rmly
c3RJbnN0cnVjdGlvbkZvckRhdGFJQyk6CisgICAgICAgIChKU0M6OkNhbGxMaW5rSW5mbzo6ZW1p
dEZhc3RQYXRoSW1wbCk6CisgICAgICAgIChKU0M6OkNhbGxMaW5rSW5mbzo6ZW1pdEZhc3RQYXRo
KToKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtJbmZvOjplbWl0VGFpbENhbGxGYXN0UGF0aCk6Cisg
ICAgICAgIChKU0M6OkNhbGxMaW5rSW5mbzo6ZW1pdFNsb3dQYXRoKToKKyAgICAgICAgKEpTQzo6
Q2FsbExpbmtJbmZvOjplbWl0RGlyZWN0RmFzdFBhdGgpOgorICAgICAgICAoSlNDOjpDYWxsTGlu
a0luZm86OmVtaXREaXJlY3RUYWlsQ2FsbEZhc3RQYXRoKToKKyAgICAgICAgKEpTQzo6Q2FsbExp
bmtJbmZvOjppbml0aWFsaXplRGlyZWN0Q2FsbCk6CisgICAgICAgIChKU0M6OkNhbGxMaW5rSW5m
bzo6c2V0RGlyZWN0Q2FsbFRhcmdldCk6CisgICAgICAgIChKU0M6OkNhbGxMaW5rSW5mbzo6c2V0
U2xvd1BhdGhDYWxsRGVzdGluYXRpb24pOgorICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86OnJl
dmVydENhbGxUb1N0dWIpOgorICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86OnNldFN0dWIpOgor
ICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86OmNhbGxSZXR1cm5Mb2NhdGlvbik6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6OkNhbGxMaW5rSW5mbzo6cGF0Y2hhYmxlSnVtcCk6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OkNhbGxMaW5rSW5mbzo6aG90UGF0aEJlZ2luKTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6Q2FsbExpbmtJbmZvOjpzZXRDYWxsZWUpOiBEZWxldGVkLgorICAgICAgICAqIGJ5
dGVjb2RlL0NhbGxMaW5rSW5mby5oOgorICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86OmNhbGxl
ZUdQUiBjb25zdCk6CisgICAgICAgIChKU0M6OkNhbGxMaW5rSW5mbzo6aXNEYXRhSUMgY29uc3Qp
OgorICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86OnNldFVzZXNEYXRhSUNzKToKKyAgICAgICAg
KEpTQzo6Q2FsbExpbmtJbmZvOjpzZXRDb2RlTG9jYXRpb25zKToKKyAgICAgICAgKEpTQzo6Q2Fs
bExpbmtJbmZvOjpvZmZzZXRPZkNhbGxlZSk6CisgICAgICAgIChKU0M6OkNhbGxMaW5rSW5mbzo6
b2Zmc2V0T2ZNb25vbW9ycGhpY0NhbGxEZXN0aW5hdGlvbik6CisgICAgICAgIChKU0M6OkNhbGxM
aW5rSW5mbzo6b2Zmc2V0T2ZTbG93UGF0aENhbGxEZXN0aW5hdGlvbik6CisgICAgICAgIChKU0M6
OkNhbGxMaW5rSW5mbzo6c2V0Q2FsbExvY2F0aW9ucyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OkNhbGxMaW5rSW5mbzo6aG90UGF0aE90aGVyKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q2Fs
bExpbmtJbmZvOjpzZXRTdHViKTogRGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHSklUQ29tcGls
ZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpsaW5rKToKKyAgICAgICAg
KiBkZmcvREZHSklUQ29tcGlsZXIuaDoKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6
YWRkSlNDYWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6YWRkSlNEaXJlY3RD
YWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6SlNDYWxsUmVjb3JkOjpKU0Nh
bGxSZWNvcmQpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpKU0RpcmVjdENhbGxS
ZWNvcmQ6OkpTRGlyZWN0Q2FsbFJlY29yZCk6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGls
ZXI6OmFkZEpTRGlyZWN0VGFpbENhbGwpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OkpJ
VENvbXBpbGVyOjpKU0RpcmVjdFRhaWxDYWxsUmVjb3JkOjpKU0RpcmVjdFRhaWxDYWxsUmVjb3Jk
KTogRGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpjYWxsZXJSZXR1cm5QQyk6CisgICAgICAgICogZGZnL0RGR09w
ZXJhdGlvbnMuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkpTQ19ERUZJTkVfSklUX09QRVJBVElP
Tik6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwOgorICAgICAgICAo
SlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbCk6CisgICAgICAgICogZGZnL0RGR1Nw
ZWN1bGF0aXZlSklUNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpl
bWl0Q2FsbCk6CisgICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9CMy5jcHA6CisgICAgICAgIChK
U0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVDYWxsT3JDb25zdHJ1Y3QpOgorICAg
ICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlRGlyZWN0Q2FsbE9yQ29u
c3RydWN0KToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZVRh
aWxDYWxsKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZUNh
bGxPckNvbnN0cnVjdFZhcmFyZ3NTcHJlYWQpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93
ZXJERkdUb0IzOjpjb21waWxlQ2FsbE9yQ29uc3RydWN0VmFyYXJncyk6CisgICAgICAgICogaml0
L0NDYWxsSGVscGVycy5jcHA6CisgICAgICAgIChKU0M6OkNDYWxsSGVscGVyczo6ZW1pdEpJVENv
ZGVPdmVyKToKKyAgICAgICAgKiBqaXQvQ0NhbGxIZWxwZXJzLmg6CisgICAgICAgICogaml0L0pJ
VC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6bGluayk6CisgICAgICAgICogaml0L0pJVC5oOgor
ICAgICAgICAqIGppdC9KSVRDYWxsLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlVGFp
bENhbGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVPcENhbGwpOgorICAgICAgICAoSlND
OjpKSVQ6OmNvbXBpbGVPcENhbGxTbG93Q2FzZSk6CisgICAgICAgICogaml0L0pJVENhbGwzMl82
NC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZU9wQ2FsbCk6CisgICAgICAgIChKU0M6
OkpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKToKKyAgICAgICAgKiBqaXQvSklUT3BlcmF0aW9u
cy5jcHA6CisgICAgICAgIChKU0M6OkpTQ19ERUZJTkVfSklUX09QRVJBVElPTik6CisgICAgICAg
ICogaml0L1BvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lLmNwcDoKKyAgICAgICAgKEpTQzo6UG9s
eW1vcnBoaWNDYWxsTm9kZTo6dW5saW5rKToKKyAgICAgICAgKiBqaXQvUmVwYXRjaC5jcHA6Cisg
ICAgICAgIChKU0M6OmxpbmtTbG93UGF0aFRvKToKKyAgICAgICAgKEpTQzo6bGlua1Nsb3dGb3Ip
OgorICAgICAgICAoSlNDOjpsaW5rTW9ub21vcnBoaWNDYWxsKToKKyAgICAgICAgKEpTQzo6bGlu
a0RpcmVjdENhbGwpOgorICAgICAgICAoSlNDOjpyZXZlcnRDYWxsKToKKyAgICAgICAgKEpTQzo6
dW5saW5rQ2FsbCk6CisgICAgICAgIChKU0M6OmxpbmtQb2x5bW9ycGhpY0NhbGwpOgorICAgICAg
ICAoSlNDOjpsaW5rRm9yKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6bGlua0RpcmVjdEZvcik6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OnVubGlua0Zvcik6IERlbGV0ZWQuCisgICAgICAgICog
aml0L1JlcGF0Y2guaDoKKyAgICAgICAgKiB3YXNtL2pzL1dhc21Ub0pTLmNwcDoKKyAgICAgICAg
KEpTQzo6V2FzbTo6d2FzbVRvSlMpOgorCiAyMDIxLTA1LTEzICBDaHJpcyBEdW1leiAgPGNkdW1l
ekBhcHBsZS5jb20+CiAKICAgICAgICAgUmVuYW1lIEZpbGVTeXN0ZW06OmRpcmVjdG9yeU5hbWUo
KSB0byBGaWxlU3lzdGVtOjpwYXJlbnRQYXRoKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oCShyZXZp
c2lvbiAyNzc0NDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0
TWFjcm9Bc3NlbWJsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtOTcxLDYgKzk3MSwxMiBAQCBwdWJs
aWM6CiAgICAgICAgIG1fbGlua1Rhc2tzLmFwcGVuZChjcmVhdGVTaGFyZWRUYXNrPHZvaWQoTGlu
a0J1ZmZlciYpPihmdW5jdG9yKSk7CiAgICAgfQogCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVu
Y3Rvcj4KKyAgICB2b2lkIGFkZExhdGVMaW5rVGFzayhjb25zdCBGdW5jdG9yJiBmdW5jdG9yKSAv
LyBSdW4gYWZ0ZXIgYWxsIGxpbmsgdGFza3MKKyAgICB7CisgICAgICAgIG1fbGF0ZUxpbmtUYXNr
cy5hcHBlbmQoY3JlYXRlU2hhcmVkVGFzazx2b2lkKExpbmtCdWZmZXImKT4oZnVuY3RvcikpOwor
ICAgIH0KKwogI2lmIENPTVBJTEVSKEdDQykKICAgICAvLyBXb3JrYXJvdW5kIGZvciBHQ0MgZGVt
YW5kaW5nIHRoYXQgbWVtY3B5ICJtdXN0IGJlIHRoZSBuYW1lIG9mIGEgZnVuY3Rpb24gd2l0aCBl
eHRlcm5hbCBsaW5rYWdlIi4KICAgICBzdGF0aWMgdm9pZCogbWVtY3B5KHZvaWQqIGRzdCwgY29u
c3Qgdm9pZCogc3JjLCBzaXplX3Qgc2l6ZSkKQEAgLTExMTQsNiArMTEyMCw3IEBAIHByb3RlY3Rl
ZDoKICAgICBib29sIG1fYWxsb3dTY3JhdGNoUmVnaXN0ZXIgeyB0cnVlIH07CiAKICAgICBWZWN0
b3I8UmVmUHRyPFNoYXJlZFRhc2s8dm9pZChMaW5rQnVmZmVyJik+Pj4gbV9saW5rVGFza3M7Cisg
ICAgVmVjdG9yPFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoTGlua0J1ZmZlciYpPj4+IG1fbGF0ZUxp
bmtUYXNrczsKIAogICAgIGZyaWVuZCBjbGFzcyBMaW5rQnVmZmVyOwogfTsgLy8gY2xhc3MgQWJz
dHJhY3RNYWNyb0Fzc2VtYmxlcgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci9MaW5rQnVmZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNz
ZW1ibGVyL0xpbmtCdWZmZXIuY3BwCShyZXZpc2lvbiAyNzc0NDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Mzks
NiArNDM5LDcgQEAgdm9pZCBMaW5rQnVmZmVyOjpsaW5rQ29kZShNYWNyb0Fzc2VtYmxlcgogI2Vu
ZGlmIC8vICFFTkFCTEUoQlJBTkNIX0NPTVBBQ1RJT04pCiAKICAgICBtX2xpbmtUYXNrcyA9IFdU
Rk1vdmUobWFjcm9Bc3NlbWJsZXIubV9saW5rVGFza3MpOworICAgIG1fbGF0ZUxpbmtUYXNrcyA9
IFdURk1vdmUobWFjcm9Bc3NlbWJsZXIubV9sYXRlTGlua1Rhc2tzKTsKIH0KIAogdm9pZCBMaW5r
QnVmZmVyOjphbGxvY2F0ZShNYWNyb0Fzc2VtYmxlciYgbWFjcm9Bc3NlbWJsZXIsIEpJVENvbXBp
bGF0aW9uRWZmb3J0IGVmZm9ydCkKQEAgLTQ3MSw2ICs0NzIsOCBAQCB2b2lkIExpbmtCdWZmZXI6
OnBlcmZvcm1GaW5hbGl6YXRpb24oKQogewogICAgIGZvciAoYXV0byYgdGFzayA6IG1fbGlua1Rh
c2tzKQogICAgICAgICB0YXNrLT5ydW4oKnRoaXMpOworICAgIGZvciAoYXV0byYgdGFzayA6IG1f
bGF0ZUxpbmtUYXNrcykKKyAgICAgICAgdGFzay0+cnVuKCp0aGlzKTsKIAogI2lmbmRlZiBOREVC
VUcKICAgICBBU1NFUlQobV9pc0p1bXBJc2xhbmQgfHwgIWlzQ29tcGlsYXRpb25UaHJlYWQoKSk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuaAko
cmV2aXNpb24gMjc3NDQwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5r
QnVmZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwMyw2ICs0MDMsNyBAQCBwcml2YXRlOgogICAg
IFByb2ZpbGUgbV9wcm9maWxlIHsgUHJvZmlsZTo6VW5jYXRlZ29yaXplZCB9OwogICAgIE1hY3Jv
QXNzZW1ibGVyQ29kZVB0cjxMaW5rQnVmZmVyUHRyVGFnPiBtX2NvZGU7CiAgICAgVmVjdG9yPFJl
ZlB0cjxTaGFyZWRUYXNrPHZvaWQoTGlua0J1ZmZlciYpPj4+IG1fbGlua1Rhc2tzOworICAgIFZl
Y3RvcjxSZWZQdHI8U2hhcmVkVGFzazx2b2lkKExpbmtCdWZmZXImKT4+PiBtX2xhdGVMaW5rVGFz
a3M7CiAKICAgICBzdGF0aWMgc2l6ZV90IHNfcHJvZmlsZUN1bW11bGF0aXZlTGlua2VkU2l6ZXNb
bnVtYmVyT2ZQcm9maWxlc107CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0FjY2Vzc0Nhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9BY2Nlc3NDYXNlLmNwcAkocmV2aXNpb24gMjc3NDQwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTgw
LDExICsxNTgwLDYgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZUltcGwoQWNjZXNzR2VuZQog
ICAgICAgICAvLyBTdHVmZiBmb3IgY3VzdG9tIGdldHRlcnMvc2V0dGVycy4KICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpDYWxsIG9wZXJhdGlvbkNhbGw7CiAKLSAgICAgICAgLy8gU3R1ZmYgZm9yIEpT
IGdldHRlcnMvc2V0dGVycy4KLSAgICAgICAgQ0NhbGxIZWxwZXJzOjpEYXRhTGFiZWxQdHIgYWRk
cmVzc09mTGlua0Z1bmN0aW9uQ2hlY2s7Ci0gICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBmYXN0
UGF0aENhbGw7Ci0gICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBzbG93UGF0aENhbGw7Ci0KICAg
ICAgICAgLy8gVGhpcyBhbHNvIGRvZXMgdGhlIG5lY2Vzc2FyeSBjYWxjdWxhdGlvbnMgb2Ygd2hl
dGhlciBvciBub3Qgd2UncmUgYW4KICAgICAgICAgLy8gZXhjZXB0aW9uIGhhbmRsaW5nIGNhbGwg
c2l0ZS4KICAgICAgICAgQWNjZXNzR2VuZXJhdGlvblN0YXRlOjpTcGlsbFN0YXRlIHNwaWxsU3Rh
dGUgPSBzdGF0ZS5wcmVzZXJ2ZUxpdmVSZWdpc3RlcnNUb1N0YWNrRm9yQ2FsbCgpOwpAQCAtMTcw
MSwyNCArMTY5NiwyMiBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlSW1wbChBY2Nlc3NHZW5l
CiAgICAgICAgICAgICAgICAgICAgICAgICB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1
ZGluZ1RoaXMoMSkub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSk7CiAgICAgICAgICAgICB9
CiAKLSAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBzbG93Q2FzZSA9IGppdC5icmFuY2hQ
dHJXaXRoUGF0Y2goCi0gICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwgbG9h
ZGVkVmFsdWVHUFIsIGFkZHJlc3NPZkxpbmtGdW5jdGlvbkNoZWNrLAotICAgICAgICAgICAgICAg
IENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihudWxscHRyKSk7CisgICAgICAgICAgICBhdXRv
IHNsb3dDYXNlID0gYWNjZXNzLmNhbGxMaW5rSW5mbygpLT5lbWl0RmFzdFBhdGgoaml0LCBsb2Fk
ZWRWYWx1ZUdQUiwgbG9hZGVkVmFsdWVHUFIgPT0gR1BSSW5mbzo6cmVnVDIgPyBHUFJJbmZvOjpy
ZWdUMCA6IEdQUkluZm86OnJlZ1QyLCBKSVRDb2RlOjppc09wdGltaXppbmdKSVQoY29kZUJsb2Nr
LT5qaXRUeXBlKCkpID8gQ2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6Ok5vIDogQ2FsbExpbmtJbmZv
OjpVc2VEYXRhSUM6Olllcyk7CisgICAgICAgICAgICBhdXRvIGRvbmVMb2NhdGlvbiA9IGppdC5s
YWJlbCgpOwogCi0gICAgICAgICAgICBmYXN0UGF0aENhbGwgPSBqaXQubmVhckNhbGwoKTsKICAg
ICAgICAgICAgIGlmIChtX3R5cGUgPT0gR2V0dGVyKQogICAgICAgICAgICAgICAgIGppdC5zZXR1
cFJlc3VsdHModmFsdWVSZWdzKTsKICAgICAgICAgICAgIGRvbmUuYXBwZW5kKGppdC5qdW1wKCkp
OwogCiAgICAgICAgICAgICBzbG93Q2FzZS5saW5rKCZqaXQpOworICAgICAgICAgICAgYXV0byBz
bG93UGF0aFN0YXJ0ID0gaml0LmxhYmVsKCk7CiAgICAgICAgICAgICBqaXQubW92ZShsb2FkZWRW
YWx1ZUdQUiwgR1BSSW5mbzo6cmVnVDApOwogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCiAgICAgICAg
ICAgICAvLyBXZSAqYWx3YXlzKiBrbm93IHRoYXQgdGhlIGdldHRlci9zZXR0ZXIsIGlmIG5vbi1u
dWxsLCBpcyBhIGNlbGwuCiAgICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwgR1BSSW5mbzo6cmVnVDEpOwogI2VuZGlmCi0gICAg
ICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoYWNjZXNzLmNhbGxM
aW5rSW5mbygpKSwgR1BSSW5mbzo6cmVnVDIpOwogICAgICAgICAgICAgaml0Lm1vdmUoQ0NhbGxI
ZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGdsb2JhbE9iamVjdCksIEdQUkluZm86OnJlZ1QzKTsKLSAg
ICAgICAgICAgIHNsb3dQYXRoQ2FsbCA9IGppdC5uZWFyQ2FsbCgpOworICAgICAgICAgICAgYWNj
ZXNzLmNhbGxMaW5rSW5mbygpLT5lbWl0U2xvd1BhdGgodm0sIGppdCk7CiAgICAgICAgICAgICBp
ZiAobV90eXBlID09IEdldHRlcikKICAgICAgICAgICAgICAgICBqaXQuc2V0dXBSZXN1bHRzKHZh
bHVlUmVncyk7CiAgICAgICAgICAgICBkb25lLmFwcGVuZChqaXQuanVtcCgpKTsKQEAgLTE3MzUs
MTUgKzE3MjgsMTAgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZUltcGwoQWNjZXNzR2VuZQog
ICAgICAgICAgICAgYm9vbCBjYWxsSGFzUmV0dXJuVmFsdWUgPSBpc0dldHRlcigpOwogICAgICAg
ICAgICAgcmVzdG9yZUxpdmVSZWdpc3RlcnNGcm9tU3RhY2tGb3JDYWxsKHNwaWxsU3RhdGUsIGNh
bGxIYXNSZXR1cm5WYWx1ZSk7CiAKLSAgICAgICAgICAgIGppdC5hZGRMaW5rVGFzayhbPSwgJnZt
XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICAgICAgICAgIHRoaXMtPmFzPEdl
dHRlclNldHRlckFjY2Vzc0Nhc2U+KCkuY2FsbExpbmtJbmZvKCktPnNldENhbGxMb2NhdGlvbnMo
Ci0gICAgICAgICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+
KGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPEpTSW50ZXJuYWxQdHJUYWc+KHNsb3dQYXRo
Q2FsbCkpLAotICAgICAgICAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFs
UHRyVGFnPihsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oYWRkcmVzc09m
TGlua0Z1bmN0aW9uQ2hlY2spKSwKLSAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5sb2Nh
dGlvbk9mTmVhckNhbGw8SlNJbnRlcm5hbFB0clRhZz4oZmFzdFBhdGhDYWxsKSk7Ci0KLSAgICAg
ICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoCi0gICAgICAgICAgICAgICAgICAgIHNsb3dQYXRo
Q2FsbCwKLSAgICAgICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SklUVGh1bmtQdHJU
YWc+KHZtLmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcikuY29kZSgpKSk7CisgICAg
ICAgICAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Cisg
ICAgICAgICAgICAgICAgdGhpcy0+YXM8R2V0dGVyU2V0dGVyQWNjZXNzQ2FzZT4oKS5jYWxsTGlu
a0luZm8oKS0+c2V0Q29kZUxvY2F0aW9ucygKKyAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZl
ci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KHNsb3dQYXRoU3RhcnQpLAorICAgICAgICAg
ICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oZG9uZUxv
Y2F0aW9uKSk7CiAgICAgICAgICAgICB9KTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAg
IEFTU0VSVChtX3R5cGUgPT0gQ3VzdG9tVmFsdWVHZXR0ZXIgfHwgbV90eXBlID09IEN1c3RvbUFj
Y2Vzc29yR2V0dGVyIHx8IG1fdHlwZSA9PSBDdXN0b21WYWx1ZVNldHRlciB8fCBtX3R5cGUgPT0g
Q3VzdG9tQWNjZXNzb3JTZXR0ZXIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NhbGxMaW5rSW5mby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAJKHJldmlzaW9uIDI3NzQ0MCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNiwxMSArMjYsMTUgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJDYWxsTGlu
a0luZm8uaCIKIAorI2luY2x1ZGUgIkNDYWxsSGVscGVycy5oIgogI2luY2x1ZGUgIkNhbGxGcmFt
ZVNodWZmbGVEYXRhLmgiCisjaW5jbHVkZSAiRGlzYWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVz
YWdlLmgiCiAjaW5jbHVkZSAiRnVuY3Rpb25Db2RlQmxvY2suaCIKICNpbmNsdWRlICJKU0NlbGxJ
bmxpbmVzLmgiCisjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgogI2luY2x1ZGUgIk9wY29kZS5oIgog
I2luY2x1ZGUgIlJlcGF0Y2guaCIKKyNpbmNsdWRlICJUaHVua0dlbmVyYXRvcnMuaCIKICNpbmNs
dWRlIDx3dGYvTGlzdER1bXAuaD4KIAogI2lmIEVOQUJMRShKSVQpCkBAIC03Nyw2ICs4MSw3IEBA
IENhbGxMaW5rSW5mbzo6Q2FsbExpbmtJbmZvKENvZGVPcmlnaW4gY28KICAgICAsIG1fYWxsb3dT
dHVicyh0cnVlKQogICAgICwgbV9jbGVhcmVkQnlKZXR0aXNvbihmYWxzZSkKICAgICAsIG1fY2Fs
bFR5cGUoTm9uZSkKKyAgICAsIG1fdXNlRGF0YUlDKHN0YXRpY19jYXN0PHVuc2lnbmVkPihVc2VE
YXRhSUM6OlllcykpCiB7CiB9CiAKQEAgLTEwMiw0NyArMTA3LDUxIEBAIHZvaWQgQ2FsbExpbmtJ
bmZvOjp1bmxpbmsoVk0mIHZtKQogICAgIC8vIFdlIGNvdWxkIGJlIGNhbGxlZCBldmVuIGlmIHdl
J3JlIG5vdCBsaW5rZWQgYW55bW9yZSBiZWNhdXNlIG9mIGhvdyBwb2x5bW9ycGhpYyBjYWxscwog
ICAgIC8vIHdvcmsuIEVhY2ggY2FsbHNpdGUgd2l0aGluIHRoZSBwb2x5bW9ycGhpYyBjYWxsIHN0
dWIgbWF5IHNlcGFyYXRlbHkgYXNrIHVzIHRvIHVubGluaygpLgogICAgIGlmIChpc0xpbmtlZCgp
KQotICAgICAgICB1bmxpbmtGb3Iodm0sICp0aGlzKTsKKyAgICAgICAgdW5saW5rQ2FsbCh2bSwg
KnRoaXMpOwogCiAgICAgLy8gRWl0aGVyIHdlIHdlcmUgdW5saW5rZWQsIGluIHdoaWNoIGNhc2Ug
d2Ugc2hvdWxkIG5vdCBoYXZlIGJlZW4gb24gYW55IGxpc3QsIG9yIHdlIHVubGlua2VkCiAgICAg
Ly8gb3Vyc2VsdmVzIHNvIHRoYXQgd2UncmUgbm90IG9uIGFueSBsaXN0IGFueW1vcmUuCiAgICAg
UkVMRUFTRV9BU1NFUlQoIWlzT25MaXN0KCkpOwogfQogCi1Db2RlTG9jYXRpb25OZWFyQ2FsbDxK
U0ludGVybmFsUHRyVGFnPiBDYWxsTGlua0luZm86OmNhbGxSZXR1cm5Mb2NhdGlvbigpCitDb2Rl
TG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBDYWxsTGlua0luZm86OmZhc3RQYXRoU3Rh
cnQoKQogewotICAgIFJFTEVBU0VfQVNTRVJUKCFpc0RpcmVjdCgpKTsKLSAgICByZXR1cm4gQ29k
ZUxvY2F0aW9uTmVhckNhbGw8SlNJbnRlcm5hbFB0clRhZz4obV9jYWxsUmV0dXJuTG9jYXRpb25P
clBhdGNoYWJsZUp1bXAsIE5lYXJDYWxsTW9kZTo6UmVndWxhcik7CisgICAgcmV0dXJuIENvZGVM
b2NhdGlvbkRhdGFMYWJlbFB0cjxKU0ludGVybmFsUHRyVGFnPihtX2Zhc3RQYXRoU3RhcnQpOwog
fQogCi1Db2RlTG9jYXRpb25KdW1wPEpTSW50ZXJuYWxQdHJUYWc+IENhbGxMaW5rSW5mbzo6cGF0
Y2hhYmxlSnVtcCgpCitDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBDYWxsTGlu
a0luZm86OnNsb3dQYXRoU3RhcnQoKQogewotICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxUeXBlKCkg
PT0gRGlyZWN0VGFpbENhbGwpOwotICAgIHJldHVybiBDb2RlTG9jYXRpb25KdW1wPEpTSW50ZXJu
YWxQdHJUYWc+KG1fY2FsbFJldHVybkxvY2F0aW9uT3JQYXRjaGFibGVKdW1wKTsKKyAgICBSRUxF
QVNFX0FTU0VSVCghaXNEYXRhSUMoKSk7CisgICAgcmV0dXJuIHUuY29kZUlDLm1fc2xvd1BhdGhT
dGFydDsKIH0KIAotQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyPEpTSW50ZXJuYWxQdHJUYWc+IENh
bGxMaW5rSW5mbzo6aG90UGF0aEJlZ2luKCkKK0NvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQ
dHJUYWc+IENhbGxMaW5rSW5mbzo6ZG9uZUxvY2F0aW9uKCkKIHsKICAgICBSRUxFQVNFX0FTU0VS
VCghaXNEaXJlY3QoKSk7Ci0gICAgcmV0dXJuIENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0cjxKU0lu
dGVybmFsUHRyVGFnPihtX2hvdFBhdGhCZWdpbk9yU2xvd1BhdGhTdGFydCk7CisgICAgcmV0dXJu
IG1fZG9uZUxvY2F0aW9uOwogfQogCi1Db2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFn
PiBDYWxsTGlua0luZm86OnNsb3dQYXRoU3RhcnQoKQotewotICAgIFJFTEVBU0VfQVNTRVJUKGlz
RGlyZWN0KCkpOwotICAgIHJldHVybiBtX2hvdFBhdGhCZWdpbk9yU2xvd1BhdGhTdGFydDsKLX0K
LQotdm9pZCBDYWxsTGlua0luZm86OnNldENhbGxlZShWTSYgdm0sIEpTQ2VsbCogb3duZXIsIEpT
T2JqZWN0KiBjYWxsZWUpCit2b2lkIENhbGxMaW5rSW5mbzo6c2V0TW9ub21vcnBoaWNDYWxsZWUo
Vk0mIHZtLCBKU0NlbGwqIG93bmVyLCBKU09iamVjdCogY2FsbGVlLCBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHI8SlNFbnRyeVB0clRhZz4gY29kZVB0cikKIHsKICAgICBSRUxFQVNFX0FTU0VSVCghaXNE
aXJlY3QoKSk7CiAgICAgbV9jYWxsZWVPckNvZGVCbG9jay5zZXQodm0sIG93bmVyLCBjYWxsZWUp
OworCisgICAgaWYgKGlzRGF0YUlDKCkpIAorICAgICAgICB1LmRhdGFJQy5tX21vbm9tb3JwaGlj
Q2FsbERlc3RpbmF0aW9uID0gY29kZVB0cjsKKyAgICBlbHNlIHsKKyAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OnJlcGF0Y2hOZWFyQ2FsbCh1LmNvZGVJQy5tX2NhbGxMb2NhdGlvbiwgQ29kZUxvY2F0
aW9uTGFiZWw8SlNFbnRyeVB0clRhZz4oY29kZVB0cikpOworICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6cmVwYXRjaFBvaW50ZXIodS5jb2RlSUMubV9jYWxsZWVMb2NhdGlvbiwgY2FsbGVlKTsKKyAg
ICB9CiB9CiAKIHZvaWQgQ2FsbExpbmtJbmZvOjpjbGVhckNhbGxlZSgpCiB7CiAgICAgUkVMRUFT
RV9BU1NFUlQoIWlzRGlyZWN0KCkpOwogICAgIG1fY2FsbGVlT3JDb2RlQmxvY2suY2xlYXIoKTsK
KyAgICBpZiAoaXNEYXRhSUMoKSkKKyAgICAgICAgdS5kYXRhSUMubV9tb25vbW9ycGhpY0NhbGxE
ZXN0aW5hdGlvbiA9IG51bGxwdHI7CisgICAgZWxzZSBpZiAoIWNsZWFyZWRCeUpldHRpc29uKCkp
CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoUG9pbnRlcih1LmNvZGVJQy5tX2NhbGxl
ZUxvY2F0aW9uLCBudWxscHRyKTsKIH0KIAogSlNPYmplY3QqIENhbGxMaW5rSW5mbzo6Y2FsbGVl
KCkKQEAgLTI4NCw2ICsyOTMsMjA2IEBAIHZvaWQgQ2FsbExpbmtJbmZvOjpzZXRGcmFtZVNodWZm
bGVEYXRhKGMKICAgICBtX2ZyYW1lU2h1ZmZsZURhdGEtPnNocmlua1RvRml0KCk7CiB9CiAKK3Zv
aWQgQ2FsbExpbmtJbmZvOjplbWl0Rmlyc3RJbnN0cnVjdGlvbkZvckRhdGFJQyhDQ2FsbEhlbHBl
cnMmIGppdCwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUikKK3sKKyAgICBHUFJSZWcgc2NyYXRjaEdQ
UiA9IGppdC5zY3JhdGNoUmVnaXN0ZXIoKTsKKyAgICBEaXNhbGxvd01hY3JvU2NyYXRjaFJlZ2lz
dGVyVXNhZ2UgZGlzYWxsb3dTY3JhdGNoKGppdCk7CisgICAgLy8gV2hlbiByZXBhdGNoaW5nLCB3
ZSBqdXN0IG92ZXJ3cml0ZSB0aGUgZmlyc3QgaW5zdHJ1Y3Rpb24gYmFjaywgc2luY2UgaXQnbGwg
aGF2ZSBiZWVuIHJlcGxhY2VkIHdpdGggYSBqdW1wIHRvIHRoZSBwb2x5bW9ycGhpYyBjYWxsIHN0
dWIuCisgICAgc2l6ZV90IHN0YXJ0U2l6ZSA9IGppdC5tX2Fzc2VtYmxlci5idWZmZXIoKS5jb2Rl
U2l6ZSgpOworICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhjYWxsTGlua0lu
Zm9HUFIsIG9mZnNldE9mQ2FsbGVlKCkpLCBzY3JhdGNoR1BSKTsgCisgICAgc2l6ZV90IGxvYWRT
aXplID0gaml0Lm1fYXNzZW1ibGVyLmJ1ZmZlcigpLmNvZGVTaXplKCkgLSBzdGFydFNpemU7Cisg
ICAgaWYgKGxvYWRTaXplIDwgc3RhdGljX2Nhc3Q8c2l6ZV90PihDQ2FsbEhlbHBlcnM6OnBhdGNo
YWJsZUp1bXBTaXplKCkpKQorICAgICAgICBqaXQuZW1pdE5vcHMoc3RhdGljX2Nhc3Q8c2l6ZV90
PihDQ2FsbEhlbHBlcnM6OnBhdGNoYWJsZUp1bXBTaXplKCkpIC0gbG9hZFNpemUpOworfQorCitN
YWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2FsbExpbmtJbmZvOjplbWl0RmFzdFBhdGhJbXBsKEND
YWxsSGVscGVycyYgaml0LCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BS
LCBVc2VEYXRhSUMgdXNlRGF0YUlDLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRh
aWxDYWxsKQoreworICAgIHNldFVzZXNEYXRhSUNzKHVzZURhdGFJQyk7CisgICAgaWYgKGlzRGF0
YUlDKCkpIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoY2FsbExpbmtJbmZvR1BSICE9IEdQUlJl
Zzo6SW52YWxpZEdQUlJlZyk7CisgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3Rl
ZEltbVB0cih0aGlzKSwgY2FsbExpbmtJbmZvR1BSKTsKKyAgICAgICAgdS5kYXRhSUMubV9jYWxs
TGlua0luZm9HUFIgPSBjYWxsTGlua0luZm9HUFI7CisgICAgfQorCisgICAgYXV0byBmYXN0UGF0
aFN0YXJ0ID0gaml0LmxhYmVsKCk7CisgICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZl
ciYgbGlua0J1ZmZlcikgeworICAgICAgICBtX2Zhc3RQYXRoU3RhcnQgPSBsaW5rQnVmZmVyLmxv
Y2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oZmFzdFBhdGhTdGFydCk7CisgICAgfSk7CisKKyAg
ICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dQYXRoOworCisgICAgaWYgKGlzRGF0YUlDKCkp
IHsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBqaXQuc2NyYXRjaFJlZ2lzdGVyKCk7Cisg
ICAgICAgIGVtaXRGaXJzdEluc3RydWN0aW9uRm9yRGF0YUlDKGppdCwgY2FsbExpbmtJbmZvR1BS
KTsKKyAgICAgICAgeworICAgICAgICAgICAgRGlzYWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVz
YWdlIGRpc2FsbG93U2NyYXRjaChqaXQpOworICAgICAgICAgICAgc2xvd1BhdGguYXBwZW5kKGpp
dC5icmFuY2hQdHIoQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwgc2NyYXRjaEdQUiwgY2FsbGVlR1BS
KSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGlzVGFpbENhbGwoKSkgeworICAgICAgICAgICAg
cHJlcGFyZUZvclRhaWxDYWxsKCk7CisgICAgICAgICAgICBqaXQuZmFySnVtcChDQ2FsbEhlbHBl
cnM6OkFkZHJlc3MoY2FsbExpbmtJbmZvR1BSLCBvZmZzZXRPZk1vbm9tb3JwaGljQ2FsbERlc3Rp
bmF0aW9uKCkpLCBKU0VudHJ5UHRyVGFnKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBq
aXQuY2FsbChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoY2FsbExpbmtJbmZvR1BSLCBvZmZzZXRPZk1v
bm9tb3JwaGljQ2FsbERlc3RpbmF0aW9uKCkpLCBKU0VudHJ5UHRyVGFnKTsKKyAgICB9IGVsc2Ug
eworICAgICAgICBDQ2FsbEhlbHBlcnM6OkRhdGFMYWJlbFB0ciBjYWxsZWVDaGVjazsKKyAgICAg
ICAgc2xvd1BhdGguYXBwZW5kKGppdC5icmFuY2hQdHJXaXRoUGF0Y2goQ0NhbGxIZWxwZXJzOjpO
b3RFcXVhbCwgY2FsbGVlR1BSLCBjYWxsZWVDaGVjaywgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
UHRyKG51bGxwdHIpKSk7CisKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNhbGw7CisgICAg
ICAgIGlmIChpc1RhaWxDYWxsKCkpIHsKKyAgICAgICAgICAgIHByZXBhcmVGb3JUYWlsQ2FsbCgp
OworICAgICAgICAgICAgY2FsbCA9IGppdC5uZWFyVGFpbENhbGwoKTsKKyAgICAgICAgfSBlbHNl
CisgICAgICAgICAgICBjYWxsID0gaml0Lm5lYXJDYWxsKCk7CisgICAgICAgIGppdC5hZGRMaW5r
VGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgICAgIHUuY29kZUlD
Lm1fY2FsbExvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8SlNJbnRlcm5h
bFB0clRhZz4oY2FsbCk7CisgICAgICAgICAgICB1LmNvZGVJQy5tX2NhbGxlZUxvY2F0aW9uID0g
bGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KGNhbGxlZUNoZWNrKTsKKyAg
ICAgICAgfSk7CisgICAgfQorCisgICAgcmV0dXJuIHNsb3dQYXRoOworfQorCitDQ2FsbEhlbHBl
cnM6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZW1pdEZhc3RQYXRoKENDYWxsSGVscGVycyYgaml0
LCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUMgdXNl
RGF0YUlDKQoreworICAgIFJFTEVBU0VfQVNTRVJUKCFpc1RhaWxDYWxsKCkpOworICAgIHJldHVy
biBlbWl0RmFzdFBhdGhJbXBsKGppdCwgY2FsbGVlR1BSLCBjYWxsTGlua0luZm9HUFIsIHVzZURh
dGFJQywgbnVsbHB0cik7Cit9CisKK01hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBDYWxsTGlua0lu
Zm86OmVtaXRUYWlsQ2FsbEZhc3RQYXRoKENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcgY2FsbGVl
R1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUMgdXNlRGF0YUlDLCBXVEY6OkZ1
bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKQoreworICAgIFJFTEVBU0VfQVNTRVJU
KGlzVGFpbENhbGwoKSk7CisgICAgcmV0dXJuIGVtaXRGYXN0UGF0aEltcGwoaml0LCBjYWxsZWVH
UFIsIGNhbGxMaW5rSW5mb0dQUiwgdXNlRGF0YUlDLCBXVEZNb3ZlKHByZXBhcmVGb3JUYWlsQ2Fs
bCkpOworfQorCit2b2lkIENhbGxMaW5rSW5mbzo6ZW1pdFNsb3dQYXRoKFZNJiB2bSwgQ0NhbGxI
ZWxwZXJzJiBqaXQpCit7CisgICAgc2V0U2xvd1BhdGhDYWxsRGVzdGluYXRpb24odm0uZ2V0Q1RJ
U3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS50ZW1wbGF0ZSByZXRhZ2dlZENvZGU8SlNFbnRy
eVB0clRhZz4oKSk7CisgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHRo
aXMpLCBHUFJJbmZvOjpyZWdUMik7CisgICAgaml0LmNhbGwoQ0NhbGxIZWxwZXJzOjpBZGRyZXNz
KEdQUkluZm86OnJlZ1QyLCBvZmZzZXRPZlNsb3dQYXRoQ2FsbERlc3RpbmF0aW9uKCkpLCBKU0Vu
dHJ5UHRyVGFnKTsKK30KKwordm9pZCBDYWxsTGlua0luZm86OmVtaXREaXJlY3RGYXN0UGF0aChD
Q2FsbEhlbHBlcnMmIGppdCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVCghaXNUYWlsQ2FsbCgpKTsK
KworICAgIHNldFVzZXNEYXRhSUNzKFVzZURhdGFJQzo6Tm8pOworCisgICAgYXV0byBmYXN0UGF0
aFN0YXJ0ID0gaml0LmxhYmVsKCk7CisgICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZl
ciYgbGlua0J1ZmZlcikgeworICAgICAgICBtX2Zhc3RQYXRoU3RhcnQgPSBsaW5rQnVmZmVyLmxv
Y2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oZmFzdFBhdGhTdGFydCk7CisgICAgfSk7CisKKyAg
ICBhdXRvIGNhbGwgPSBqaXQubmVhckNhbGwoKTsKKyAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChM
aW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgICAgIHUuY29kZUlDLm1fY2FsbExvY2F0aW9u
ID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8SlNJbnRlcm5hbFB0clRhZz4oY2FsbCk7
CisgICAgfSk7CisgICAgaml0LmFkZExhdGVMaW5rVGFzayhbdGhpc10gKExpbmtCdWZmZXImKSB7
CisgICAgICAgIGluaXRpYWxpemVEaXJlY3RDYWxsKCk7CisgICAgfSk7Cit9CisKK3ZvaWQgQ2Fs
bExpbmtJbmZvOjplbWl0RGlyZWN0VGFpbENhbGxGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCwg
V1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkKK3sKKyAgICBSRUxFQVNF
X0FTU0VSVChpc1RhaWxDYWxsKCkpOworCisgICAgc2V0VXNlc0RhdGFJQ3MoVXNlRGF0YUlDOjpO
byk7CisKKyAgICBhdXRvIGZhc3RQYXRoU3RhcnQgPSBqaXQubGFiZWwoKTsKKyAgICBqaXQuYWRk
TGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgICAgIG1fZmFzdFBh
dGhTdGFydCA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihmYXN0UGF0
aFN0YXJ0KTsKKyAgICB9KTsKKworICAgIC8vIC0gSWYgd2UncmUgbm90IHlldCBsaW5rZWQsIHRo
aXMgaXMgYSBqdW1wIHRvIHRoZSBzbG93IHBhdGguCisgICAgLy8gLSBPbmNlIHdlJ3JlIGxpbmtl
ZCB0byBhIGZhc3QgcGF0aCwgdGhpcyBnb2VzIGJhY2sgdG8gYmVpbmcgbm9wcyBzbyB3ZSBmYWxs
IHRocm91Z2ggdG8gdGhlIGxpbmtlZCBqdW1wLgorICAgIGppdC5lbWl0Tm9wcyhDQ2FsbEhlbHBl
cnM6OnBhdGNoYWJsZUp1bXBTaXplKCkpOworCisgICAgcHJlcGFyZUZvclRhaWxDYWxsKCk7Cisg
ICAgYXV0byBjYWxsID0gaml0Lm5lYXJUYWlsQ2FsbCgpOworICAgIGppdC5hZGRMaW5rVGFzayhb
PV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgdS5jb2RlSUMubV9jYWxsTG9j
YXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxKU0ludGVybmFsUHRyVGFnPihj
YWxsKTsKKyAgICB9KTsKKyAgICBqaXQuYWRkTGF0ZUxpbmtUYXNrKFt0aGlzXSAoTGlua0J1ZmZl
ciYpIHsKKyAgICAgICAgaW5pdGlhbGl6ZURpcmVjdENhbGwoKTsKKyAgICB9KTsKK30KKwordm9p
ZCBDYWxsTGlua0luZm86OmluaXRpYWxpemVEaXJlY3RDYWxsKCkKK3sKKyAgICBSRUxFQVNFX0FT
U0VSVChpc0RpcmVjdCgpKTsKKyAgICBBU1NFUlQodS5jb2RlSUMubV9jYWxsTG9jYXRpb24pOwor
ICAgIGlmIChpc1RhaWxDYWxsKCkpIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoZmFzdFBhdGhT
dGFydCgpKTsKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjplbWl0SklUQ29kZU92ZXIoZmFzdFBhdGhT
dGFydCgpLCBbJl0gKENDYWxsSGVscGVycyYgaml0KSB7CisgICAgICAgICAgICBhdXRvIGp1bXAg
PSBqaXQuanVtcCgpOworICAgICAgICAgICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZl
ciYgbGlua0J1ZmZlcikgeworICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhqdW1wLCBz
bG93UGF0aFN0YXJ0KCkpOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0sICJpbml0aWFsaXpl
IGRpcmVjdCBjYWxsIik7CisgICAgfSBlbHNlCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBh
dGNoTmVhckNhbGwodS5jb2RlSUMubV9jYWxsTG9jYXRpb24sIHNsb3dQYXRoU3RhcnQoKSk7Cit9
CisKK3ZvaWQgQ2FsbExpbmtJbmZvOjpzZXREaXJlY3RDYWxsVGFyZ2V0KENvZGVMb2NhdGlvbkxh
YmVsPEpTRW50cnlQdHJUYWc+IHRhcmdldCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChpc0RpcmVj
dCgpKTsKKworICAgIGlmIChpc1RhaWxDYWxsKCkpIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQo
ZmFzdFBhdGhTdGFydCgpKTsKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjplbWl0SklUQ29kZU92ZXIo
ZmFzdFBhdGhTdGFydCgpLCBbJl0gKENDYWxsSGVscGVycyYgaml0KSB7CisgICAgICAgICAgICAv
LyBXZSByZXNlcnZlZCB0aGlzIG1hbnkgYnl0ZXMgZm9yIHRoZSBqdW1wIGF0IGZhc3RQYXRoU3Rh
cnQoKS4gTWFrZSB0aGF0CisgICAgICAgICAgICAvLyBjb2RlIG5vcHMgbm93IHNvIHdlIGZhbGwg
dGhyb3VnaCB0byB0aGUganVtcCB0byB0aGUgZmFzdCBwYXRoLgorICAgICAgICAgICAgaml0LmVt
aXROb3BzKENDYWxsSGVscGVyczo6cGF0Y2hhYmxlSnVtcFNpemUoKSk7IAorICAgICAgICB9LCAi
U2V0dGluZyBkaXJlY3QgY2FsbCB0YXJnZXQiKTsKKyAgICB9CisKKyAgICBNYWNyb0Fzc2VtYmxl
cjo6cmVwYXRjaE5lYXJDYWxsKHUuY29kZUlDLm1fY2FsbExvY2F0aW9uLCB0YXJnZXQpOworfQor
Cit2b2lkIENhbGxMaW5rSW5mbzo6c2V0U2xvd1BhdGhDYWxsRGVzdGluYXRpb24oTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGNvZGVQdHIpCit7CisgICAgbV9zbG93UGF0aENh
bGxEZXN0aW5hdGlvbiA9IGNvZGVQdHI7Cit9CisKK3ZvaWQgQ2FsbExpbmtJbmZvOjpyZXZlcnRD
YWxsVG9TdHViKCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChzdHViKCkpOworICAgIC8vIFRoZSBz
dGFydCBvZiBvdXIgSklUIGNvZGUgaXMgbm93IGEganVtcCB0byB0aGUgcG9seW1vcnBoaWMgc3R1
Yi4gUmV3cml0ZSB0aGUgZmlyc3QgaW5zdHJ1Y3Rpb24KKyAgICAvLyB0byBiZSB3aGF0IHdlIG5l
ZWQgZm9yIG5vbiBzdHViIElDcy4KKworICAgIC8vIHRoaXMgcnVucyBpbnRvIHNvbWUgYnJhbmNo
IGNvbXBhY3Rpb24gY3JhcCBJJ2QgbGlrZSB0byBhdm9pZCBmb3Igbm93LiBFc3NlbnRpYWxseSwg
dGhlIGJyYW5jaAorICAgIC8vIGRvZXNuJ3Qga25vdyBpZiBpdCBjYW4gYmUgY29tcGFjdGVkIG9y
IG5vdC4gU28gd2UgZW5kIHVwIHdpdGggMjggYnl0ZXMgb2YgbWFjaGluZSBjb2RlLCBmb3IKKyAg
ICAvLyB3aGF0IGluIGFsbCBsaWtlbGlob29kIGZpdHMgaW4gMjQuIFNvIHdlIGp1c3Qgc3BsYXQg
b3V0IHRoZSBmaXJzdCBpbnN0cnVjdGlvbi4gTG9uZyB0ZXJtLCB3ZQorICAgIC8vIG5lZWQgc29t
ZXRoaW5nIGNsZWFuZXIuIEJ1dCB0aGlzIHdvcmtzIG9uIGFybTY0IGZvciBub3cuCisKKyAgICBD
Q2FsbEhlbHBlcnM6OmVtaXRKSVRDb2RlT3ZlcihmYXN0UGF0aFN0YXJ0KCksIFsmXSAoQ0NhbGxI
ZWxwZXJzJiBqaXQpIHsKKyAgICAgICAgaWYgKGlzRGF0YUlDKCkpCisgICAgICAgICAgICBlbWl0
Rmlyc3RJbnN0cnVjdGlvbkZvckRhdGFJQyhqaXQsIHUuZGF0YUlDLm1fY2FsbExpbmtJbmZvR1BS
KTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OnJldmVydEp1bXBS
ZXBsYWNlbWVudFRvQnJhbmNoUHRyV2l0aFBhdGNoKAorICAgICAgICAgICAgICAgIENDYWxsSGVs
cGVyczo6c3RhcnRPZkJyYW5jaFB0cldpdGhQYXRjaE9uUmVnaXN0ZXIodS5jb2RlSUMubV9jYWxs
ZWVMb2NhdGlvbiksIGNhbGxlZUdQUigpLCBudWxscHRyKTsKKyAgICAgICAgfQorICAgIH0sICAi
UmVzZXR0aW5nIFBvbHltb3JwaGljQ2FsbCBzdHViYmVkIENhbGxMaW5rSW5mbyIpOworfQorCit2
b2lkIENhbGxMaW5rSW5mbzo6c2V0U3R1YihSZWY8UG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmU+
JiYgbmV3U3R1YikKK3sKKyAgICBjbGVhclN0dWIoKTsKKyAgICBtX3N0dWIgPSBXVEZNb3ZlKG5l
d1N0dWIpOworCisgICAgaWYgKGlzRGF0YUlDKCkpIHsKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpl
bWl0SklUQ29kZU92ZXIoZmFzdFBhdGhTdGFydCgpLCBbJl0gKENDYWxsSGVscGVycyYgaml0KSB7
CisgICAgICAgICAgICBhdXRvIGp1bXAgPSBqaXQuanVtcCgpOworICAgICAgICAgICAgaml0LmFk
ZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgeworICAgICAgICAgICAgICAg
IGxpbmtCdWZmZXIubGluayhqdW1wLCBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0
clRhZz4obV9zdHViLT5jb2RlKCkuY29kZSgpKSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAg
fSwgIlBhdGNoaW5nIGNhbGwgdG8gUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUgaW4gQ2FsbExp
bmtJbmZvIik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGxhY2VX
aXRoSnVtcCgKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpzdGFydE9mQnJhbmNoUHRyV2l0
aFBhdGNoT25SZWdpc3Rlcih1LmNvZGVJQy5tX2NhbGxlZUxvY2F0aW9uKSwKKyAgICAgICAgICAg
IENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihtX3N0dWItPmNvZGUoKS5j
b2RlKCkpKTsKKyAgICB9Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogI2VuZGlmIC8vIEVOQUJM
RShKSVQpCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0lu
Zm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExp
bmtJbmZvLmgJKHJldmlzaW9uIDI3NzQ0MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9DYWxsTGlua0luZm8uaAkod29ya2luZyBjb3B5KQpAQCAtMzAsMTIgKzMwLDE0IEBACiAj
aW5jbHVkZSAiQ29kZVNwZWNpYWxpemF0aW9uS2luZC5oIgogI2luY2x1ZGUgIlBvbHltb3JwaGlj
Q2FsbFN0dWJSb3V0aW5lLmgiCiAjaW5jbHVkZSAiV3JpdGVCYXJyaWVyLmgiCisjaW5jbHVkZSA8
d3RmL0Z1bmN0aW9uLmg+CiAjaW5jbHVkZSA8d3RmL1NlbnRpbmVsTGlua2VkTGlzdC5oPgogCiBu
YW1lc3BhY2UgSlNDIHsKIAogI2lmIEVOQUJMRShKSVQpCiAKK2NsYXNzIENDYWxsSGVscGVyczsK
IGNsYXNzIEZ1bmN0aW9uQ29kZUJsb2NrOwogY2xhc3MgSlNGdW5jdGlvbjsKIGVudW0gT3Bjb2Rl
SUQgOiB1bnNpZ25lZDsKQEAgLTE2MywxNiArMTY1LDM4IEBAIHB1YmxpYzoKICAgICAgICAgbV9j
YWxsZWVHUFIgPSBjYWxsZWVHUFI7CiAgICAgfQogCi0gICAgdm9pZCBzZXRDYWxsTG9jYXRpb25z
KAotICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBjYWxsUmV0dXJu
TG9jYXRpb25PclBhdGNoYWJsZUp1bXAsCi0gICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50
ZXJuYWxQdHJUYWc+IGhvdFBhdGhCZWdpbk9yU2xvd1BhdGhTdGFydCwKLSAgICAgICAgQ29kZUxv
Y2F0aW9uTmVhckNhbGw8SlNJbnRlcm5hbFB0clRhZz4gaG90UGF0aE90aGVyKQotICAgIHsKLSAg
ICAgICAgbV9jYWxsUmV0dXJuTG9jYXRpb25PclBhdGNoYWJsZUp1bXAgPSBjYWxsUmV0dXJuTG9j
YXRpb25PclBhdGNoYWJsZUp1bXA7Ci0gICAgICAgIG1faG90UGF0aEJlZ2luT3JTbG93UGF0aFN0
YXJ0ID0gaG90UGF0aEJlZ2luT3JTbG93UGF0aFN0YXJ0OwotICAgICAgICBtX2hvdFBhdGhPdGhl
ciA9IGhvdFBhdGhPdGhlcjsKKyAgICBHUFJSZWcgY2FsbGVlR1BSKCkgY29uc3QgeyByZXR1cm4g
bV9jYWxsZWVHUFI7IH0KKyAgICAKKyAgICBlbnVtIGNsYXNzIFVzZURhdGFJQyA6IHVpbnQ4X3Qg
eworICAgICAgICBZZXMsCisgICAgICAgIE5vCisgICAgfTsKKworcHJpdmF0ZToKKyAgICB2b2lk
IGVtaXRGaXJzdEluc3RydWN0aW9uRm9yRGF0YUlDKENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxs
TGlua0luZm9HUFIpOworICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBlbWl0RmFzdFBhdGhJ
bXBsKENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9H
UFIsIFVzZURhdGFJQywgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkg
V0FSTl9VTlVTRURfUkVUVVJOOworcHVibGljOgorICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlz
dCBlbWl0RmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNh
bGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDKSBXQVJOX1VOVVNFRF9SRVRVUk47CisgICAgTWFjcm9B
c3NlbWJsZXI6Okp1bXBMaXN0IGVtaXRUYWlsQ2FsbEZhc3RQYXRoKENDYWxsSGVscGVycyYsIEdQ
UlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQywgV1RGOjpG
dW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkgV0FSTl9VTlVTRURfUkVUVVJOOwor
ICAgIHZvaWQgZW1pdERpcmVjdEZhc3RQYXRoKENDYWxsSGVscGVycyYpOworICAgIHZvaWQgZW1p
dERpcmVjdFRhaWxDYWxsRmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiwgV1RGOjpGdW5jdGlvbjx2b2lk
KCk+IHByZXBhcmVGb3JUYWlsQ2FsbCk7CisgICAgdm9pZCBlbWl0U2xvd1BhdGgoVk0mLCBDQ2Fs
bEhlbHBlcnMmKTsKKyAgICB2b2lkIHJldmVydENhbGxUb1N0dWIoKTsKKworICAgIGJvb2wgaXNE
YXRhSUMoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxVc2VEYXRhSUM+KG1fdXNlRGF0YUlD
KSA9PSBVc2VEYXRhSUM6OlllczsgfQorICAgIHZvaWQgc2V0VXNlc0RhdGFJQ3MoVXNlRGF0YUlD
IHVzZURhdGFJQykgeyBtX3VzZURhdGFJQyA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPih1c2VEYXRh
SUMpOyB9CisKKyAgICB2b2lkIHNldENvZGVMb2NhdGlvbnMoCisgICAgICAgIENvZGVMb2NhdGlv
bkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IHNsb3dQYXRoU3RhcnQsCisgICAgICAgIENvZGVMb2Nh
dGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IGRvbmVMb2NhdGlvbikKKyAgICB7CisgICAgICAg
IGlmICghaXNEYXRhSUMoKSkKKyAgICAgICAgICAgIHUuY29kZUlDLm1fc2xvd1BhdGhTdGFydCA9
IHNsb3dQYXRoU3RhcnQ7CisgICAgICAgIG1fZG9uZUxvY2F0aW9uID0gZG9uZUxvY2F0aW9uOwog
ICAgIH0KIAorICAgIHZvaWQgaW5pdGlhbGl6ZURpcmVjdENhbGwoKTsKKwogICAgIGJvb2wgYWxs
b3dTdHVicygpIGNvbnN0IHsgcmV0dXJuIG1fYWxsb3dTdHViczsgfQogCiAgICAgdm9pZCBkaXNh
bGxvd1N0dWJzKCkKQEAgLTE4MCwyMyArMjA0LDE5IEBAIHB1YmxpYzoKICAgICAgICAgbV9hbGxv
d1N0dWJzID0gZmFsc2U7CiAgICAgfQogCi0gICAgQ29kZUxvY2F0aW9uTmVhckNhbGw8SlNJbnRl
cm5hbFB0clRhZz4gY2FsbFJldHVybkxvY2F0aW9uKCk7Ci0gICAgQ29kZUxvY2F0aW9uSnVtcDxK
U0ludGVybmFsUHRyVGFnPiBwYXRjaGFibGVKdW1wKCk7Ci0gICAgQ29kZUxvY2F0aW9uRGF0YUxh
YmVsUHRyPEpTSW50ZXJuYWxQdHJUYWc+IGhvdFBhdGhCZWdpbigpOworICAgIENvZGVMb2NhdGlv
bkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IGZhc3RQYXRoU3RhcnQoKTsKICAgICBDb2RlTG9jYXRp
b25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBzbG93UGF0aFN0YXJ0KCk7CisgICAgQ29kZUxvY2F0
aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gZG9uZUxvY2F0aW9uKCk7CiAKLSAgICBDb2RlTG9j
YXRpb25OZWFyQ2FsbDxKU0ludGVybmFsUHRyVGFnPiBob3RQYXRoT3RoZXIoKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIG1faG90UGF0aE90aGVyOwotICAgIH0KLQotICAgIHZvaWQgc2V0Q2FsbGVl
KFZNJiwgSlNDZWxsKiwgSlNPYmplY3QqIGNhbGxlZSk7CisgICAgdm9pZCBzZXRNb25vbW9ycGhp
Y0NhbGxlZShWTSYsIEpTQ2VsbCosIEpTT2JqZWN0KiBjYWxsZWUsIE1hY3JvQXNzZW1ibGVyQ29k
ZVB0cjxKU0VudHJ5UHRyVGFnPik7CisgICAgdm9pZCBzZXRTbG93UGF0aENhbGxEZXN0aW5hdGlv
bihNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4pOwogICAgIHZvaWQgY2xlYXJD
YWxsZWUoKTsKICAgICBKU09iamVjdCogY2FsbGVlKCk7CiAKICAgICB2b2lkIHNldENvZGVCbG9j
ayhWTSYsIEpTQ2VsbCosIEZ1bmN0aW9uQ29kZUJsb2NrKik7CiAgICAgdm9pZCBjbGVhckNvZGVC
bG9jaygpOwogICAgIEZ1bmN0aW9uQ29kZUJsb2NrKiBjb2RlQmxvY2soKTsKKyAgICB2b2lkIHNl
dERpcmVjdENhbGxUYXJnZXQoQ29kZUxvY2F0aW9uTGFiZWw8SlNFbnRyeVB0clRhZz4pOwogCiAg
ICAgdm9pZCBzZXRMYXN0U2VlbkNhbGxlZShWTSYsIGNvbnN0IEpTQ2VsbCogb3duZXIsIEpTT2Jq
ZWN0KiBjYWxsZWUpOwogICAgIHZvaWQgY2xlYXJMYXN0U2VlbkNhbGxlZSgpOwpAQCAtMjA2LDEy
ICsyMjYsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRFeGVjdXRhYmxlRHVyaW5nQ29tcGlsYXRp
b24oRXhlY3V0YWJsZUJhc2UqKTsKICAgICBFeGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZSgpOwog
ICAgIAotICAgIHZvaWQgc2V0U3R1YihSZWY8UG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmU+JiYg
bmV3U3R1YikKLSAgICB7Ci0gICAgICAgIGNsZWFyU3R1YigpOwotICAgICAgICBtX3N0dWIgPSBX
VEZNb3ZlKG5ld1N0dWIpOwotICAgIH0KLQorICAgIHZvaWQgc2V0U3R1YihSZWY8UG9seW1vcnBo
aWNDYWxsU3R1YlJvdXRpbmU+JiYpOwogICAgIHZvaWQgY2xlYXJTdHViKCk7CiAKICAgICBQb2x5
bW9ycGhpY0NhbGxTdHViUm91dGluZSogc3R1YigpIGNvbnN0CkBAIC0zMTEsNiArMzI2LDIxIEBA
IHB1YmxpYzoKICAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDYWxsTGlua0luZm8sIG1f
c2xvd1BhdGhDb3VudCk7CiAgICAgfQogCisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkNh
bGxlZSgpCisgICAgeworICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENhbGxMaW5rSW5m
bywgbV9jYWxsZWVPckNvZGVCbG9jayk7CisgICAgfQorCisgICAgc3RhdGljIHB0cmRpZmZfdCBv
ZmZzZXRPZk1vbm9tb3JwaGljQ2FsbERlc3RpbmF0aW9uKCkKKyAgICB7CisgICAgICAgIHJldHVy
biBPQkpFQ1RfT0ZGU0VUT0YoQ2FsbExpbmtJbmZvLCB1KSArIE9CSkVDVF9PRkZTRVRPRihVbmlv
blR5cGUsIGRhdGFJQy5tX21vbm9tb3JwaGljQ2FsbERlc3RpbmF0aW9uKTsKKyAgICB9CisKKyAg
ICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mU2xvd1BhdGhDYWxsRGVzdGluYXRpb24oKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDYWxsTGlua0luZm8sIG1fc2xvd1Bh
dGhDYWxsRGVzdGluYXRpb24pOworICAgIH0KKwogICAgIEdQUlJlZyBjYWxsZWVHUFIoKQogICAg
IHsKICAgICAgICAgcmV0dXJuIG1fY2FsbGVlR1BSOwpAQCAtMzUyLDEwICszODIsMjUgQEAgcHVi
bGljOgogICAgIH0KIAogcHJpdmF0ZToKLSAgICB1aW50MzJfdCBtX21heEFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzIHsgMCB9OyAvLyBGb3IgdmFyYXJnczogdGhlIHByb2ZpbGVkIG1heGltdW0g
bnVtYmVyIG9mIGFyZ3VtZW50cy4gRm9yIGRpcmVjdDogdGhlIG51bWJlciBvZiBzdGFjayBzbG90
cyBhbGxvY2F0ZWQgZm9yIGFyZ3VtZW50cy4KLSAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVy
bmFsUHRyVGFnPiBtX2NhbGxSZXR1cm5Mb2NhdGlvbk9yUGF0Y2hhYmxlSnVtcDsKLSAgICBDb2Rl
TG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBtX2hvdFBhdGhCZWdpbk9yU2xvd1BhdGhT
dGFydDsKLSAgICBDb2RlTG9jYXRpb25OZWFyQ2FsbDxKU0ludGVybmFsUHRyVGFnPiBtX2hvdFBh
dGhPdGhlcjsKKyAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBtX2Zhc3RQ
YXRoU3RhcnQ7CisgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gbV9kb25l
TG9jYXRpb247CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IG1fc2xv
d1BhdGhDYWxsRGVzdGluYXRpb247CisgICAgdW5pb24gVW5pb25UeXBlIHsKKyAgICAgICAgVW5p
b25UeXBlKCkgCisgICAgICAgICAgICA6IGRhdGFJQyB7IG51bGxwdHIsIEludmFsaWRHUFJSZWcg
fQorICAgICAgICB7IH0KKyAgICAgICAgc3RydWN0IERhdGFJQyB7CisgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gbV9tb25vbW9ycGhpY0NhbGxEZXN0aW5h
dGlvbjsKKyAgICAgICAgICAgIEdQUlJlZyBtX2NhbGxMaW5rSW5mb0dQUjsKKyAgICAgICAgfSBk
YXRhSUM7CisKKyAgICAgICAgc3RydWN0IHsKKyAgICAgICAgICAgIENvZGVMb2NhdGlvbk5lYXJD
YWxsPEpTSW50ZXJuYWxQdHJUYWc+IG1fY2FsbExvY2F0aW9uOworICAgICAgICAgICAgQ29kZUxv
Y2F0aW9uRGF0YUxhYmVsUHRyPEpTSW50ZXJuYWxQdHJUYWc+IG1fY2FsbGVlTG9jYXRpb247Cisg
ICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBtX3Nsb3dQYXRo
U3RhcnQ7CisgICAgICAgIH0gY29kZUlDOworICAgIH0gdTsKKwogICAgIFdyaXRlQmFycmllcjxK
U0NlbGw+IG1fY2FsbGVlT3JDb2RlQmxvY2s7CiAgICAgV3JpdGVCYXJyaWVyPEpTQ2VsbD4gbV9s
YXN0U2VlbkNhbGxlZU9yRXhlY3V0YWJsZTsKICAgICBSZWZQdHI8UG9seW1vcnBoaWNDYWxsU3R1
YlJvdXRpbmU+IG1fc3R1YjsKQEAgLTM2OSw4ICs0MTQsMTAgQEAgcHJpdmF0ZToKICAgICBib29s
IG1fYWxsb3dTdHVicyA6IDE7CiAgICAgYm9vbCBtX2NsZWFyZWRCeUpldHRpc29uIDogMTsKICAg
ICB1bnNpZ25lZCBtX2NhbGxUeXBlIDogNDsgLy8gQ2FsbFR5cGUKKyAgICB1bnNpZ25lZCBtX3Vz
ZURhdGFJQyA6IDE7IC8vIFVzZURhdGFJQwogICAgIEdQUlJlZyBtX2NhbGxlZUdQUiB7IEludmFs
aWRHUFJSZWcgfTsKICAgICB1aW50MzJfdCBtX3Nsb3dQYXRoQ291bnQgeyAwIH07CisgICAgdWlu
dDMyX3QgbV9tYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyB7IDAgfTsgLy8gRm9yIHZhcmFy
Z3M6IHRoZSBwcm9maWxlZCBtYXhpbXVtIG51bWJlciBvZiBhcmd1bWVudHMuIEZvciBkaXJlY3Q6
IHRoZSBudW1iZXIgb2Ygc3RhY2sgc2xvdHMgYWxsb2NhdGVkIGZvciBhcmd1bWVudHMuCiB9Owog
CiBpbmxpbmUgQ29kZU9yaWdpbiBnZXRDYWxsTGlua0luZm9Db2RlT3JpZ2luKENhbGxMaW5rSW5m
byYgY2FsbExpbmtJbmZvKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRD
b21waWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdK
SVRDb21waWxlci5jcHAJKHJldmlzaW9uIDI3NzQ0MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTcsMzEgKzI1Nywx
OCBAQCB2b2lkIEpJVENvbXBpbGVyOjpsaW5rKExpbmtCdWZmZXImIGxpbmtCCiAgICAgZmluYWxp
emVJbmxpbmVDYWNoZXMobV9pbnN0YW5jZU9mcywgbGlua0J1ZmZlcik7CiAgICAgZmluYWxpemVJ
bmxpbmVDYWNoZXMobV9wcml2YXRlQnJhbmRBY2Nlc3NlcywgbGlua0J1ZmZlcik7CiAKLSAgICBh
dXRvIGxpbmtDYWxsVGh1bmsgPSBGdW5jdGlvblB0cjxOb1B0clRhZz4odm0oKS5nZXRDVElTdHVi
KGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAgICAg
Zm9yIChhdXRvJiByZWNvcmQgOiBtX2pzQ2FsbHMpIHsKICAgICAgICAgQ2FsbExpbmtJbmZvJiBp
bmZvID0gKnJlY29yZC5pbmZvOwotICAgICAgICBsaW5rQnVmZmVyLmxpbmsocmVjb3JkLnNsb3dD
YWxsLCBsaW5rQ2FsbFRodW5rKTsKLSAgICAgICAgaW5mby5zZXRDYWxsTG9jYXRpb25zKAotICAg
ICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4obGlua0J1ZmZlci5s
b2NhdGlvbk9mTmVhckNhbGw8SlNJbnRlcm5hbFB0clRhZz4ocmVjb3JkLnNsb3dDYWxsKSksCi0g
ICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPihsaW5rQnVmZmVy
LmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4ocmVjb3JkLnRhcmdldFRvQ2hlY2spKSwKLSAg
ICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPEpTSW50ZXJuYWxQdHJUYWc+
KHJlY29yZC5mYXN0Q2FsbCkpOworICAgICAgICBpbmZvLnNldENvZGVMb2NhdGlvbnMoCisgICAg
ICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4ocmVjb3JkLnNs
b3dQYXRoU3RhcnQpLAorICAgICAgICAgICAgbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJu
YWxQdHJUYWc+KHJlY29yZC5kb25lTG9jYXRpb24pKTsKICAgICB9CiAgICAgCi0gICAgZm9yIChK
U0RpcmVjdENhbGxSZWNvcmQmIHJlY29yZCA6IG1fanNEaXJlY3RDYWxscykgeworICAgIGZvciAo
YXV0byYgcmVjb3JkIDogbV9qc0RpcmVjdENhbGxzKSB7CiAgICAgICAgIENhbGxMaW5rSW5mbyYg
aW5mbyA9ICpyZWNvcmQuaW5mbzsKLSAgICAgICAgbGlua0J1ZmZlci5saW5rKHJlY29yZC5jYWxs
LCBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8Tm9QdHJUYWc+KHJlY29yZC5zbG93UGF0aCkpOwotICAg
ICAgICBpbmZvLnNldENhbGxMb2NhdGlvbnMoCi0gICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJl
bDxKU0ludGVybmFsUHRyVGFnPigpLAorICAgICAgICBpbmZvLnNldENvZGVMb2NhdGlvbnMoCiAg
ICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4ocmVjb3Jk
LnNsb3dQYXRoKSwKLSAgICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPEpT
SW50ZXJuYWxQdHJUYWc+KHJlY29yZC5jYWxsKSk7Ci0gICAgfQotICAgIAotICAgIGZvciAoSlNE
aXJlY3RUYWlsQ2FsbFJlY29yZCYgcmVjb3JkIDogbV9qc0RpcmVjdFRhaWxDYWxscykgewotICAg
ICAgICBDYWxsTGlua0luZm8mIGluZm8gPSAqcmVjb3JkLmluZm87Ci0gICAgICAgIGluZm8uc2V0
Q2FsbExvY2F0aW9ucygKLSAgICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVy
bmFsUHRyVGFnPihyZWNvcmQucGF0Y2hhYmxlSnVtcCksCi0gICAgICAgICAgICBsaW5rQnVmZmVy
LmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4ocmVjb3JkLnNsb3dQYXRoKSwKLSAgICAgICAg
ICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPEpTSW50ZXJuYWxQdHJUYWc+KHJlY29y
ZC5jYWxsKSk7CisgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFn
PigpKTsKICAgICB9CiAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgJKHJldmlzaW9uIDI3NzQ0MCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtMjE5LDE5ICsyMTksMTQgQEAgcHVibGljOgogICAgICAgICBtX3ByaXZhdGVCcmFu
ZEFjY2Vzc2VzLmFwcGVuZChJbmxpbmVDYWNoZVdyYXBwZXI8SklUUHJpdmF0ZUJyYW5kQWNjZXNz
R2VuZXJhdG9yPihnZW4sIHNsb3dQYXRoKSk7CiAgICAgfQogCi0gICAgdm9pZCBhZGRKU0NhbGwo
Q2FsbCBmYXN0Q2FsbCwgQ2FsbCBzbG93Q2FsbCwgRGF0YUxhYmVsUHRyIHRhcmdldFRvQ2hlY2ss
IENhbGxMaW5rSW5mbyogaW5mbykKKyAgICB2b2lkIGFkZEpTQ2FsbChMYWJlbCBzbG93UGF0aFN0
YXJ0LCBMYWJlbCBkb25lTG9jYXRpb24sIENhbGxMaW5rSW5mbyogaW5mbykKICAgICB7Ci0gICAg
ICAgIG1fanNDYWxscy5hcHBlbmQoSlNDYWxsUmVjb3JkKGZhc3RDYWxsLCBzbG93Q2FsbCwgdGFy
Z2V0VG9DaGVjaywgaW5mbykpOworICAgICAgICBtX2pzQ2FsbHMuYXBwZW5kKEpTQ2FsbFJlY29y
ZChzbG93UGF0aFN0YXJ0LCBkb25lTG9jYXRpb24sIGluZm8pKTsKICAgICB9CiAgICAgCi0gICAg
dm9pZCBhZGRKU0RpcmVjdENhbGwoQ2FsbCBjYWxsLCBMYWJlbCBzbG93UGF0aCwgQ2FsbExpbmtJ
bmZvKiBpbmZvKQorICAgIHZvaWQgYWRkSlNEaXJlY3RDYWxsKExhYmVsIHNsb3dQYXRoLCBDYWxs
TGlua0luZm8qIGluZm8pCiAgICAgewotICAgICAgICBtX2pzRGlyZWN0Q2FsbHMuYXBwZW5kKEpT
RGlyZWN0Q2FsbFJlY29yZChjYWxsLCBzbG93UGF0aCwgaW5mbykpOwotICAgIH0KLSAgICAKLSAg
ICB2b2lkIGFkZEpTRGlyZWN0VGFpbENhbGwoUGF0Y2hhYmxlSnVtcCBwYXRjaGFibGVKdW1wLCBD
YWxsIGNhbGwsIExhYmVsIHNsb3dQYXRoLCBDYWxsTGlua0luZm8qIGluZm8pCi0gICAgewotICAg
ICAgICBtX2pzRGlyZWN0VGFpbENhbGxzLmFwcGVuZChKU0RpcmVjdFRhaWxDYWxsUmVjb3JkKHBh
dGNoYWJsZUp1bXAsIGNhbGwsIHNsb3dQYXRoLCBpbmZvKSk7CisgICAgICAgIG1fanNEaXJlY3RD
YWxscy5hcHBlbmQoSlNEaXJlY3RDYWxsUmVjb3JkKHNsb3dQYXRoLCBpbmZvKSk7CiAgICAgfQog
ICAgIAogICAgIHZvaWQgYWRkV2Vha1JlZmVyZW5jZShKU0NlbGwqIHRhcmdldCkKQEAgLTMyOCw1
MiArMzIzLDI4IEBAIHByaXZhdGU6CiAKIAogICAgIHN0cnVjdCBKU0NhbGxSZWNvcmQgewotICAg
ICAgICBKU0NhbGxSZWNvcmQoQ2FsbCBmYXN0Q2FsbCwgQ2FsbCBzbG93Q2FsbCwgRGF0YUxhYmVs
UHRyIHRhcmdldFRvQ2hlY2ssIENhbGxMaW5rSW5mbyogaW5mbykKLSAgICAgICAgICAgIDogZmFz
dENhbGwoZmFzdENhbGwpCi0gICAgICAgICAgICAsIHNsb3dDYWxsKHNsb3dDYWxsKQotICAgICAg
ICAgICAgLCB0YXJnZXRUb0NoZWNrKHRhcmdldFRvQ2hlY2spCisgICAgICAgIEpTQ2FsbFJlY29y
ZChMYWJlbCBzbG93UGF0aFN0YXJ0LCBMYWJlbCBkb25lTG9jYXRpb24sIENhbGxMaW5rSW5mbyog
aW5mbykKKyAgICAgICAgICAgIDogc2xvd1BhdGhTdGFydChzbG93UGF0aFN0YXJ0KQorICAgICAg
ICAgICAgLCBkb25lTG9jYXRpb24oZG9uZUxvY2F0aW9uKQogICAgICAgICAgICAgLCBpbmZvKGlu
Zm8pCiAgICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChmYXN0Q2FsbC5pc0ZsYWdTZXQoQ2Fs
bDo6TmVhcikpOwotICAgICAgICAgICAgQVNTRVJUKHNsb3dDYWxsLmlzRmxhZ1NldChDYWxsOjpO
ZWFyKSk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIENhbGwgZmFzdENhbGw7Ci0gICAg
ICAgIENhbGwgc2xvd0NhbGw7Ci0gICAgICAgIERhdGFMYWJlbFB0ciB0YXJnZXRUb0NoZWNrOwor
ICAgICAgICBMYWJlbCBzbG93UGF0aFN0YXJ0OworICAgICAgICBMYWJlbCBkb25lTG9jYXRpb247
CiAgICAgICAgIENhbGxMaW5rSW5mbyogaW5mbzsKICAgICB9OwogICAgIAogICAgIHN0cnVjdCBK
U0RpcmVjdENhbGxSZWNvcmQgewotICAgICAgICBKU0RpcmVjdENhbGxSZWNvcmQoQ2FsbCBjYWxs
LCBMYWJlbCBzbG93UGF0aCwgQ2FsbExpbmtJbmZvKiBpbmZvKQotICAgICAgICAgICAgOiBjYWxs
KGNhbGwpCi0gICAgICAgICAgICAsIHNsb3dQYXRoKHNsb3dQYXRoKQotICAgICAgICAgICAgLCBp
bmZvKGluZm8pCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChjYWxsLmlzRmxhZ1NldChD
YWxsOjpOZWFyKSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIENhbGwgY2FsbDsKLSAg
ICAgICAgTGFiZWwgc2xvd1BhdGg7Ci0gICAgICAgIENhbGxMaW5rSW5mbyogaW5mbzsKLSAgICB9
OwotICAgIAotICAgIHN0cnVjdCBKU0RpcmVjdFRhaWxDYWxsUmVjb3JkIHsKLSAgICAgICAgSlNE
aXJlY3RUYWlsQ2FsbFJlY29yZChQYXRjaGFibGVKdW1wIHBhdGNoYWJsZUp1bXAsIENhbGwgY2Fs
bCwgTGFiZWwgc2xvd1BhdGgsIENhbGxMaW5rSW5mbyogaW5mbykKLSAgICAgICAgICAgIDogcGF0
Y2hhYmxlSnVtcChwYXRjaGFibGVKdW1wKQotICAgICAgICAgICAgLCBjYWxsKGNhbGwpCi0gICAg
ICAgICAgICAsIHNsb3dQYXRoKHNsb3dQYXRoKQorICAgICAgICBKU0RpcmVjdENhbGxSZWNvcmQo
TGFiZWwgc2xvd1BhdGgsIENhbGxMaW5rSW5mbyogaW5mbykKKyAgICAgICAgICAgIDogc2xvd1Bh
dGgoc2xvd1BhdGgpCiAgICAgICAgICAgICAsIGluZm8oaW5mbykKICAgICAgICAgewotICAgICAg
ICAgICAgQVNTRVJUKGNhbGwuaXNGbGFnU2V0KENhbGw6Ok5lYXIpICYmIGNhbGwuaXNGbGFnU2V0
KENhbGw6OlRhaWwpKTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgUGF0Y2hhYmxlSnVt
cCBwYXRjaGFibGVKdW1wOwotICAgICAgICBDYWxsIGNhbGw7CiAgICAgICAgIExhYmVsIHNsb3dQ
YXRoOwogICAgICAgICBDYWxsTGlua0luZm8qIGluZm87CiAgICAgfTsKLQogICAgIAogICAgIFZl
Y3RvcjxJbmxpbmVDYWNoZVdyYXBwZXI8SklUR2V0QnlJZEdlbmVyYXRvcj4sIDQ+IG1fZ2V0QnlJ
ZHM7CiAgICAgVmVjdG9yPElubGluZUNhY2hlV3JhcHBlcjxKSVRHZXRCeUlkV2l0aFRoaXNHZW5l
cmF0b3I+LCA0PiBtX2dldEJ5SWRzV2l0aFRoaXM7CkBAIC0zODYsNyArMzU3LDYgQEAgcHJpdmF0
ZToKICAgICBWZWN0b3I8SW5saW5lQ2FjaGVXcmFwcGVyPEpJVFByaXZhdGVCcmFuZEFjY2Vzc0dl
bmVyYXRvcj4sIDQ+IG1fcHJpdmF0ZUJyYW5kQWNjZXNzZXM7CiAgICAgVmVjdG9yPEpTQ2FsbFJl
Y29yZCwgND4gbV9qc0NhbGxzOwogICAgIFZlY3RvcjxKU0RpcmVjdENhbGxSZWNvcmQsIDQ+IG1f
anNEaXJlY3RDYWxsczsKLSAgICBWZWN0b3I8SlNEaXJlY3RUYWlsQ2FsbFJlY29yZCwgND4gbV9q
c0RpcmVjdFRhaWxDYWxsczsKICAgICBTZWdtZW50ZWRWZWN0b3I8T1NSRXhpdENvbXBpbGF0aW9u
SW5mbywgND4gbV9leGl0Q29tcGlsYXRpb25JbmZvOwogICAgIFZlY3RvcjxWZWN0b3I8TGFiZWw+
PiBtX2V4aXRTaXRlTGFiZWxzOwogICAgIFZlY3RvcjxERkc6Ok9TUkVudHJ5RGF0YT4gbV9vc3JF
bnRyeTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVy
Q29tbW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09T
UkV4aXRDb21waWxlckNvbW1vbi5jcHAJKHJldmlzaW9uIDI3NzQ0MCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjA5LDcgKzIwOSw3IEBAIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRy
eVB0clQKICAgICAgICAgICAgICAgICBiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlci0+Z2V0Q2Fs
bExpbmtJbmZvRm9yQnl0ZWNvZGVJbmRleChjYWxsQnl0ZWNvZGVJbmRleCk7CiAgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVChjYWxsTGlua0luZm8pOwogCi0gICAgICAgICAgICBqdW1wVGFyZ2V0
ID0gY2FsbExpbmtJbmZvLT5jYWxsUmV0dXJuTG9jYXRpb24oKS5yZXRhZ2dlZDxKU0VudHJ5UHRy
VGFnPigpOworICAgICAgICAgICAganVtcFRhcmdldCA9IGNhbGxMaW5rSW5mby0+ZG9uZUxvY2F0
aW9uKCkucmV0YWdnZWQ8SlNFbnRyeVB0clRhZz4oKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25z
LmNwcAkocmV2aXNpb24gMjc3NDQwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdP
cGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYxNiw3ICszNjE2LDcgQEAgSlNDX0RF
RklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkxpbmtEaQogICAgICAgICAgICAgY29kZVB0ciA9
IGZ1bmN0aW9uRXhlY3V0YWJsZS0+ZW50cnlwb2ludEZvcihraW5kLCBBcml0eUNoZWNrTm90UmVx
dWlyZWQpOwogICAgIH0KICAgICAKLSAgICBsaW5rRGlyZWN0Rm9yKGNhbGxGcmFtZSwgKmNhbGxM
aW5rSW5mbywgY29kZUJsb2NrLCBjb2RlUHRyKTsKKyAgICBsaW5rRGlyZWN0Q2FsbChjYWxsRnJh
bWUsICpjYWxsTGlua0luZm8sIGNvZGVCbG9jaywgY29kZVB0cik7CiB9CiAKIEpTQ19ERUZJTkVf
SklUX09QRVJBVElPTihvcGVyYXRpb25UcmlnZ2VyUmVvcHRpbWl6YXRpb25Ob3csIHZvaWQsIChD
b2RlQmxvY2sqIGNvZGVCbG9jaywgQ29kZUJsb2NrKiBvcHRpbWl6ZWRDb2RlQmxvY2ssIE9TUkV4
aXRCYXNlKiBleGl0KSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkocmV2aXNpb24gMjc3NDQwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtODM4LDE5ICs4MzgsMTYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwo
Tm9kZSogbm9kZQogICAgICAgICBpZiAoaXNUYWlsKSB7CiAgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVChub2RlLT5vcCgpID09IERpcmVjdFRhaWxDYWxsKTsKICAgICAgICAgICAgIAotICAgICAg
ICAgICAgSklUQ29tcGlsZXI6OlBhdGNoYWJsZUp1bXAgcGF0Y2hhYmxlSnVtcCA9IG1faml0LnBh
dGNoYWJsZUp1bXAoKTsKICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpMYWJlbCBtYWluUGF0aCA9
IG1faml0LmxhYmVsKCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIG1faml0LmVtaXRTdG9y
ZUNhbGxTaXRlSW5kZXgoY2FsbFNpdGUpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBpbmZv
LT5zZXRGcmFtZVNodWZmbGVEYXRhKHNodWZmbGVEYXRhKTsKLSAgICAgICAgICAgIENhbGxGcmFt
ZVNodWZmbGVyKG1faml0LCBzaHVmZmxlRGF0YSkucHJlcGFyZUZvclRhaWxDYWxsKCk7Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGwgPSBtX2ppdC5uZWFy
VGFpbENhbGwoKTsKLSAgICAgICAgICAgIAorICAgICAgICAgICAgaW5mby0+ZW1pdERpcmVjdFRh
aWxDYWxsRmFzdFBhdGgobV9qaXQsIFsmXSB7CisgICAgICAgICAgICAgICAgaW5mby0+c2V0RnJh
bWVTaHVmZmxlRGF0YShzaHVmZmxlRGF0YSk7CisgICAgICAgICAgICAgICAgQ2FsbEZyYW1lU2h1
ZmZsZXIobV9qaXQsIHNodWZmbGVEYXRhKS5wcmVwYXJlRm9yVGFpbENhbGwoKTsKKyAgICAgICAg
ICAgIH0pOworCiAgICAgICAgICAgICBKSVRDb21waWxlcjo6TGFiZWwgc2xvd1BhdGggPSBtX2pp
dC5sYWJlbCgpOwotICAgICAgICAgICAgcGF0Y2hhYmxlSnVtcC5tX2p1bXAubGlua1RvKHNsb3dQ
YXRoLCAmbV9qaXQpOwotICAgICAgICAgICAgCiAgICAgICAgICAgICBzaWxlbnRTcGlsbEFsbFJl
Z2lzdGVycyhJbnZhbGlkR1BSUmVnKTsKICAgICAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uTGlua0RpcmVjdENhbGwsIGluZm8sIGNhbGxlZVBheWxvYWRHUFIpOwogICAgICAgICAgICAg
c2lsZW50RmlsbEFsbFJlZ2lzdGVycygpOwpAQCAtODU5LDcgKzg1Niw3IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUKICAgICAgICAgICAgIAogICAgICAgICAgICAg
dXNlQ2hpbGRyZW4obm9kZSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIG1faml0LmFkZEpT
RGlyZWN0VGFpbENhbGwocGF0Y2hhYmxlSnVtcCwgY2FsbCwgc2xvd1BhdGgsIGluZm8pOworICAg
ICAgICAgICAgbV9qaXQuYWRkSlNEaXJlY3RDYWxsKHNsb3dQYXRoLCBpbmZvKTsKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAKQEAgLTg2Nyw3ICs4NjQsNyBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlKiBub2RlCiAgICAgICAgIAogICAgICAgICBt
X2ppdC5lbWl0U3RvcmVDYWxsU2l0ZUluZGV4KGNhbGxTaXRlKTsKICAgICAgICAgCi0gICAgICAg
IEpJVENvbXBpbGVyOjpDYWxsIGNhbGwgPSBtX2ppdC5uZWFyQ2FsbCgpOworICAgICAgICBpbmZv
LT5lbWl0RGlyZWN0RmFzdFBhdGgobV9qaXQpOwogICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBk
b25lID0gbV9qaXQuanVtcCgpOwogICAgICAgICAKICAgICAgICAgSklUQ29tcGlsZXI6OkxhYmVs
IHNsb3dQYXRoID0gbV9qaXQubGFiZWwoKTsKQEAgLTg3OSw3ICs4NzYsNyBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlKiBub2RlCiAgICAgICAgIAogICAgICAgICBzZXRSZXN1
bHRBbmRSZXNldFN0YWNrKCk7CiAgICAgICAgIAotICAgICAgICBtX2ppdC5hZGRKU0RpcmVjdENh
bGwoY2FsbCwgc2xvd1BhdGgsIGluZm8pOworICAgICAgICBtX2ppdC5hZGRKU0RpcmVjdENhbGwo
c2xvd1BhdGgsIGluZm8pOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIApAQCAtODg4LDIx
ICs4ODUsMjUgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZQogICAg
IHNsb3dQYXRoLmFwcGVuZChtX2ppdC5icmFuY2hJZk5vdENlbGwoSlNWYWx1ZVJlZ3MoY2FsbGVl
VGFnR1BSLCBjYWxsZWVQYXlsb2FkR1BSKSkpOwogICAgIHNsb3dQYXRoLmFwcGVuZChtX2ppdC5i
cmFuY2hQdHJXaXRoUGF0Y2goTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBjYWxsZWVQYXlsb2Fk
R1BSLCB0YXJnZXRUb0NoZWNrKSk7CiAKKyAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dD
YXNlczsKICAgICBpZiAoaXNUYWlsKSB7Ci0gICAgICAgIGlmIChub2RlLT5vcCgpID09IFRhaWxD
YWxsKSB7Ci0gICAgICAgICAgICBpbmZvLT5zZXRGcmFtZVNodWZmbGVEYXRhKHNodWZmbGVEYXRh
KTsKLSAgICAgICAgICAgIENhbGxGcmFtZVNodWZmbGVyKG1faml0LCBzaHVmZmxlRGF0YSkucHJl
cGFyZUZvclRhaWxDYWxsKCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBtX2ppdC5l
bWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7Ci0gICAgICAgICAgICBtX2ppdC5wcmVwYXJlRm9yVGFp
bENhbGxTbG93KCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBm
YXN0Q2FsbCA9IGlzVGFpbCA/IG1faml0Lm5lYXJUYWlsQ2FsbCgpIDogbV9qaXQubmVhckNhbGwo
KTsKKyAgICAgICAgc2xvd0Nhc2VzID0gaW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgobV9qaXQs
IGNhbGxlZVBheWxvYWRHUFIsIEludmFsaWRHUFJSZWcsIENhbGxMaW5rSW5mbzo6VXNlRGF0YUlD
OjpObywgWyZdIHsKKyAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IFRhaWxDYWxsKSB7Cisg
ICAgICAgICAgICAgICAgaW5mby0+c2V0RnJhbWVTaHVmZmxlRGF0YShzaHVmZmxlRGF0YSk7Cisg
ICAgICAgICAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIobV9qaXQsIHNodWZmbGVEYXRhKS5wcmVw
YXJlRm9yVGFpbENhbGwoKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg
bV9qaXQuZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOworICAgICAgICAgICAgICAgIG1faml0LnBy
ZXBhcmVGb3JUYWlsQ2FsbFNsb3coKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAg
fSBlbHNlCisgICAgICAgIHNsb3dDYXNlcyA9IGluZm8tPmVtaXRGYXN0UGF0aChtX2ppdCwgY2Fs
bGVlUGF5bG9hZEdQUiwgSW52YWxpZEdQUlJlZywgQ2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6Ok5v
KTsKIAogICAgIEpJVENvbXBpbGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7CiAKICAgICBz
bG93UGF0aC5saW5rKCZtX2ppdCk7CisgICAgc2xvd0Nhc2VzLmxpbmsoJm1faml0KTsKKyAgICBh
dXRvIHNsb3dQYXRoU3RhcnQgPSBtX2ppdC5sYWJlbCgpOwogCiAgICAgaWYgKG5vZGUtPm9wKCkg
PT0gVGFpbENhbGwpIHsKICAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIgY2FsbEZyYW1lU2h1ZmZs
ZXIobV9qaXQsIHNodWZmbGVEYXRhKTsKQEAgLTkyNywxOCArOTI4LDE4IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUKICAgICAgICAgICAgIG1faml0LmVtaXRSZXN0
b3JlQ2FsbGVlU2F2ZXMoKTsKICAgICB9CiAKLSAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIo
aW5mbyksIEdQUkluZm86OnJlZ1QyKTsKICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHI6Ondl
YWtQb2ludGVyKG1fZ3JhcGgsIGdsb2JhbE9iamVjdCksIEdQUkluZm86OnJlZ1QzKTsKLSAgICBK
SVRDb21waWxlcjo6Q2FsbCBzbG93Q2FsbCA9IG1faml0Lm5lYXJDYWxsKCk7CisgICAgaW5mby0+
ZW1pdFNsb3dQYXRoKHZtKCksIG1faml0KTsKIAogICAgIGRvbmUubGluaygmbV9qaXQpOworICAg
IGF1dG8gZG9uZUxvY2F0aW9uID0gbV9qaXQubGFiZWwoKTsKIAogICAgIGlmIChpc1RhaWwpCiAg
ICAgICAgIG1faml0LmFib3J0V2l0aFJlYXNvbihKSVREaWRSZXR1cm5Gcm9tVGFpbENhbGwpOwog
ICAgIGVsc2UKICAgICAgICAgc2V0UmVzdWx0QW5kUmVzZXRTdGFjaygpOwogCi0gICAgbV9qaXQu
YWRkSlNDYWxsKGZhc3RDYWxsLCBzbG93Q2FsbCwgdGFyZ2V0VG9DaGVjaywgaW5mbyk7CisgICAg
bV9qaXQuYWRkSlNDYWxsKHNsb3dQYXRoU3RhcnQsIGRvbmVMb2NhdGlvbiwgaW5mbyk7CiB9CiAK
IHRlbXBsYXRlPGJvb2wgc3RyaWN0PgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCShyZXZpc2lvbiAyNzc0NDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC04MzAsMTggKzgzMCwxNCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChO
b2RlKiBub2RlCiAgICAgICAgIGlmIChpc1RhaWwpIHsKICAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKG5vZGUtPm9wKCkgPT0gRGlyZWN0VGFpbENhbGwpOwogICAgICAgICAgICAgCi0gICAgICAg
ICAgICBKSVRDb21waWxlcjo6UGF0Y2hhYmxlSnVtcCBwYXRjaGFibGVKdW1wID0gbV9qaXQucGF0
Y2hhYmxlSnVtcCgpOwogICAgICAgICAgICAgSklUQ29tcGlsZXI6OkxhYmVsIG1haW5QYXRoID0g
bV9qaXQubGFiZWwoKTsKLSAgICAgICAgICAgIAogICAgICAgICAgICAgbV9qaXQuZW1pdFN0b3Jl
Q2FsbFNpdGVJbmRleChjYWxsU2l0ZSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGNhbGxM
aW5rSW5mby0+c2V0RnJhbWVTaHVmZmxlRGF0YShzaHVmZmxlRGF0YSk7Ci0gICAgICAgICAgICBD
YWxsRnJhbWVTaHVmZmxlcihtX2ppdCwgc2h1ZmZsZURhdGEpLnByZXBhcmVGb3JUYWlsQ2FsbCgp
OwotICAgICAgICAgICAgCi0gICAgICAgICAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsID0gbV9q
aXQubmVhclRhaWxDYWxsKCk7Ci0gICAgICAgICAgICAKKworICAgICAgICAgICAgY2FsbExpbmtJ
bmZvLT5lbWl0RGlyZWN0VGFpbENhbGxGYXN0UGF0aChtX2ppdCwgWyZdIHsKKyAgICAgICAgICAg
ICAgICBjYWxsTGlua0luZm8tPnNldEZyYW1lU2h1ZmZsZURhdGEoc2h1ZmZsZURhdGEpOworICAg
ICAgICAgICAgICAgIENhbGxGcmFtZVNodWZmbGVyKG1faml0LCBzaHVmZmxlRGF0YSkucHJlcGFy
ZUZvclRhaWxDYWxsKCk7CisgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIEpJVENvbXBpbGVy
OjpMYWJlbCBzbG93UGF0aCA9IG1faml0LmxhYmVsKCk7Ci0gICAgICAgICAgICBwYXRjaGFibGVK
dW1wLm1fanVtcC5saW5rVG8oc2xvd1BhdGgsICZtX2ppdCk7CiAgICAgICAgICAgICAKICAgICAg
ICAgICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKEludmFsaWRHUFJSZWcpOwogICAgICAgICAg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25MaW5rRGlyZWN0Q2FsbCwgY2FsbExpbmtJbmZvLCBj
YWxsZWVHUFIpOwpAQCAtODUxLDE1ICs4NDcsMTMgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1p
dENhbGwoTm9kZSogbm9kZQogICAgICAgICAgICAgCiAgICAgICAgICAgICB1c2VDaGlsZHJlbihu
b2RlKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgbV9qaXQuYWRkSlNEaXJlY3RUYWlsQ2Fs
bChwYXRjaGFibGVKdW1wLCBjYWxsLCBzbG93UGF0aCwgY2FsbExpbmtJbmZvKTsKKyAgICAgICAg
ICAgIG1faml0LmFkZEpTRGlyZWN0Q2FsbChzbG93UGF0aCwgY2FsbExpbmtJbmZvKTsKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgSklUQ29tcGlsZXI6
OkxhYmVsIG1haW5QYXRoID0gbV9qaXQubGFiZWwoKTsKLSAgICAgICAgCiAgICAgICAgIG1faml0
LmVtaXRTdG9yZUNhbGxTaXRlSW5kZXgoY2FsbFNpdGUpOwotICAgICAgICAKLSAgICAgICAgSklU
Q29tcGlsZXI6OkNhbGwgY2FsbCA9IG1faml0Lm5lYXJDYWxsKCk7CisgICAgICAgIGNhbGxMaW5r
SW5mby0+ZW1pdERpcmVjdEZhc3RQYXRoKG1faml0KTsKICAgICAgICAgSklUQ29tcGlsZXI6Okp1
bXAgZG9uZSA9IG1faml0Lmp1bXAoKTsKICAgICAgICAgCiAgICAgICAgIEpJVENvbXBpbGVyOjpM
YWJlbCBzbG93UGF0aCA9IG1faml0LmxhYmVsKCk7CkBAIC04NzQsMzAgKzg2OCwyOSBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlKiBub2RlCiAgICAgICAgIAogICAgICAgICBz
ZXRSZXN1bHRBbmRSZXNldFN0YWNrKCk7CiAgICAgICAgIAotICAgICAgICBtX2ppdC5hZGRKU0Rp
cmVjdENhbGwoY2FsbCwgc2xvd1BhdGgsIGNhbGxMaW5rSW5mbyk7CisgICAgICAgIG1faml0LmFk
ZEpTRGlyZWN0Q2FsbChzbG93UGF0aCwgY2FsbExpbmtJbmZvKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KICAgICAKICAgICBtX2ppdC5lbWl0U3RvcmVDYWxsU2l0ZUluZGV4KGNhbGxTaXRlKTsK
ICAgICAKLSAgICBKSVRDb21waWxlcjo6RGF0YUxhYmVsUHRyIHRhcmdldFRvQ2hlY2s7Ci0gICAg
SklUQ29tcGlsZXI6Okp1bXAgc2xvd1BhdGggPSBtX2ppdC5icmFuY2hQdHJXaXRoUGF0Y2goTWFj
cm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBjYWxsZWVHUFIsIHRhcmdldFRvQ2hlY2ssIFRydXN0ZWRJ
bW1QdHIobnVsbHB0cikpOwotCisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93Q2FzZXM7
CiAgICAgaWYgKGlzVGFpbCkgewotICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBUYWlsQ2FsbCkg
ewotICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRGcmFtZVNodWZmbGVEYXRhKHNodWZmbGVE
YXRhKTsKLSAgICAgICAgICAgIENhbGxGcmFtZVNodWZmbGVyKG1faml0LCBzaHVmZmxlRGF0YSku
cHJlcGFyZUZvclRhaWxDYWxsKCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBtX2pp
dC5lbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7Ci0gICAgICAgICAgICBtX2ppdC5wcmVwYXJlRm9y
VGFpbENhbGxTbG93KCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBKSVRDb21waWxlcjo6Q2Fs
bCBmYXN0Q2FsbCA9IGlzVGFpbCA/IG1faml0Lm5lYXJUYWlsQ2FsbCgpIDogbV9qaXQubmVhckNh
bGwoKTsKLQorICAgICAgICBzbG93Q2FzZXMgPSBjYWxsTGlua0luZm8tPmVtaXRUYWlsQ2FsbEZh
c3RQYXRoKG1faml0LCBjYWxsZWVHUFIsIEludmFsaWRHUFJSZWcsIENhbGxMaW5rSW5mbzo6VXNl
RGF0YUlDOjpObywgWyZdIHsKKyAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IFRhaWxDYWxs
KSB7CisgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRGcmFtZVNodWZmbGVEYXRhKHNo
dWZmbGVEYXRhKTsKKyAgICAgICAgICAgICAgICBDYWxsRnJhbWVTaHVmZmxlcihtX2ppdCwgc2h1
ZmZsZURhdGEpLnByZXBhcmVGb3JUYWlsQ2FsbCgpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICBtX2ppdC5lbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CisgICAgICAgICAg
ICAgICAgbV9qaXQucHJlcGFyZUZvclRhaWxDYWxsU2xvdygpOworICAgICAgICAgICAgfQorICAg
ICAgICB9KTsKKyAgICB9IGVsc2UKKyAgICAgICAgc2xvd0Nhc2VzID0gY2FsbExpbmtJbmZvLT5l
bWl0RmFzdFBhdGgobV9qaXQsIGNhbGxlZUdQUiwgSW52YWxpZEdQUlJlZywgQ2FsbExpbmtJbmZv
OjpVc2VEYXRhSUM6Ok5vKTsKICAgICBKSVRDb21waWxlcjo6SnVtcCBkb25lID0gbV9qaXQuanVt
cCgpOwogCi0gICAgc2xvd1BhdGgubGluaygmbV9qaXQpOworICAgIHNsb3dDYXNlcy5saW5rKCZt
X2ppdCk7CisgICAgYXV0byBzbG93UGF0aFN0YXJ0ID0gbV9qaXQubGFiZWwoKTsKIAogICAgIGlm
IChub2RlLT5vcCgpID09IFRhaWxDYWxsKSB7CiAgICAgICAgIENhbGxGcmFtZVNodWZmbGVyIGNh
bGxGcmFtZVNodWZmbGVyKG1faml0LCBzaHVmZmxlRGF0YSk7CkBAIC05MDUsMjMgKzg5OCwyMiBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlKiBub2RlCiAgICAgICAgIGNhbGxG
cmFtZVNodWZmbGVyLnByZXBhcmVGb3JTbG93UGF0aCgpOwogICAgIH0gZWxzZSB7CiAgICAgICAg
IG1faml0Lm1vdmUoY2FsbGVlR1BSLCBHUFJJbmZvOjpyZWdUMCk7IC8vIENhbGxlZSBuZWVkcyB0
byBiZSBpbiByZWdUMAotCiAgICAgICAgIGlmIChpc1RhaWwpCiAgICAgICAgICAgICBtX2ppdC5l
bWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7IC8vIFRoaXMgbmVlZHMgdG8gaGFwcGVuIGFmdGVyIHdl
IG1vdmVkIGNhbGxlZUdQUiB0byByZWdUMAogICAgIH0KIAotICAgIG1faml0Lm1vdmUoVHJ1c3Rl
ZEltbVB0cihjYWxsTGlua0luZm8pLCBHUFJJbmZvOjpyZWdUMik7IC8vIExpbmsgaW5mbyBuZWVk
cyB0byBiZSBpbiByZWdUMgogICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50
ZXIobV9ncmFwaCwgZ2xvYmFsT2JqZWN0KSwgR1BSSW5mbzo6cmVnVDMpOyAvLyBKU0dsb2JhbE9i
amVjdCBuZWVkcyB0byBiZSBpbiByZWdUMwotICAgIEpJVENvbXBpbGVyOjpDYWxsIHNsb3dDYWxs
ID0gbV9qaXQubmVhckNhbGwoKTsKKyAgICBjYWxsTGlua0luZm8tPmVtaXRTbG93UGF0aCh2bSgp
LCBtX2ppdCk7CiAKICAgICBkb25lLmxpbmsoJm1faml0KTsKKyAgICBhdXRvIGRvbmVMb2NhdGlv
biA9IG1faml0LmxhYmVsKCk7CiAKICAgICBpZiAoaXNUYWlsKQogICAgICAgICBtX2ppdC5hYm9y
dFdpdGhSZWFzb24oSklURGlkUmV0dXJuRnJvbVRhaWxDYWxsKTsKICAgICBlbHNlCiAgICAgICAg
IHNldFJlc3VsdEFuZFJlc2V0U3RhY2soKTsKIAotICAgIG1faml0LmFkZEpTQ2FsbChmYXN0Q2Fs
bCwgc2xvd0NhbGwsIHRhcmdldFRvQ2hlY2ssIGNhbGxMaW5rSW5mbyk7CisgICAgbV9qaXQuYWRk
SlNDYWxsKHNsb3dQYXRoU3RhcnQsIGRvbmVMb2NhdGlvbiwgY2FsbExpbmtJbmZvKTsKIH0KIAog
Ly8gQ2xhbmcgc2hvdWxkIGFsbG93IHVucmVhY2hhYmxlIFtbY2xhbmc6OmZhbGx0aHJvdWdoXV0g
aW4gdGVtcGxhdGUgZnVuY3Rpb25zIGlmIGFueSB0ZW1wbGF0ZSBleHBhbnNpb24gdXNlcyBpdApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAko
cmV2aXNpb24gMjc3NDQwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRG
R1RvQjMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NzE3LDI0ICs5NzE3LDIwIEBAIHByaXZhdGU6
CiAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6dGFnRm9yKFZpcnR1YWxSZWdpc3Rl
cihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykpKTsKIAogICAgICAg
ICAgICAgICAgIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvID0gaml0LmNvZGVCbG9jaygpLT5h
ZGRDYWxsTGlua0luZm8obm9kZS0+b3JpZ2luLnNlbWFudGljKTsKKyAgICAgICAgICAgICAgICBj
YWxsTGlua0luZm8tPnNldFVwQ2FsbCgKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+b3AoKSA9
PSBDb25zdHJ1Y3QgPyBDYWxsTGlua0luZm86OkNvbnN0cnVjdCA6IENhbGxMaW5rSW5mbzo6Q2Fs
bCwgR1BSSW5mbzo6cmVnVDApOwogCi0gICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpEYXRh
TGFiZWxQdHIgdGFyZ2V0VG9DaGVjazsKLSAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1
bXAgc2xvd1BhdGggPSBqaXQuYnJhbmNoUHRyV2l0aFBhdGNoKAotICAgICAgICAgICAgICAgICAg
ICBDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCBHUFJJbmZvOjpyZWdUMCwgdGFyZ2V0VG9DaGVjaywK
LSAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG51bGxwdHIp
KTsKLQotICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBmYXN0Q2FsbCA9IGppdC5u
ZWFyQ2FsbCgpOworICAgICAgICAgICAgICAgIGF1dG8gc2xvd1BhdGggPSBjYWxsTGlua0luZm8t
PmVtaXRGYXN0UGF0aChqaXQsIEdQUkluZm86OnJlZ1QwLCBJbnZhbGlkR1BSUmVnLCBDYWxsTGlu
a0luZm86OlVzZURhdGFJQzo6Tm8pOwogICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVt
cCBkb25lID0gaml0Lmp1bXAoKTsKIAogICAgICAgICAgICAgICAgIHNsb3dQYXRoLmxpbmsoJmpp
dCk7Ci0KLSAgICAgICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1Q
dHIoY2FsbExpbmtJbmZvKSwgR1BSSW5mbzo6cmVnVDIpOworICAgICAgICAgICAgICAgIGF1dG8g
c2xvd1BhdGhTdGFydCA9IGppdC5sYWJlbCgpOwogICAgICAgICAgICAgICAgIGppdC5tb3ZlKEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihqaXQuY29kZUJsb2NrKCktPmdsb2JhbE9iamVjdEZv
cihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgR1BSSW5mbzo6cmVnVDMpOwotICAgICAgICAgICAg
ICAgIENDYWxsSGVscGVyczo6Q2FsbCBzbG93Q2FsbCA9IGppdC5uZWFyQ2FsbCgpOworICAgICAg
ICAgICAgICAgIGNhbGxMaW5rSW5mby0+ZW1pdFNsb3dQYXRoKCp2bSwgaml0KTsKKwogICAgICAg
ICAgICAgICAgIGRvbmUubGluaygmaml0KTsKIAotICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5m
by0+c2V0VXBDYWxsKAotICAgICAgICAgICAgICAgICAgICBub2RlLT5vcCgpID09IENvbnN0cnVj
dCA/IENhbGxMaW5rSW5mbzo6Q29uc3RydWN0IDogQ2FsbExpbmtJbmZvOjpDYWxsLCBHUFJJbmZv
OjpyZWdUMCk7CisgICAgICAgICAgICAgICAgYXV0byBkb25lTG9jYXRpb24gPSBqaXQubGFiZWwo
KTsKIAogICAgICAgICAgICAgICAgIGppdC5hZGRQdHIoCiAgICAgICAgICAgICAgICAgICAgIEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKC1wYXJhbXMucHJvYygpLmZyYW1lU2l6ZSgpKSwKQEAg
LTk3NDIsMTMgKzk3MzgsOSBAQCBwcml2YXRlOgogCiAgICAgICAgICAgICAgICAgaml0LmFkZExp
bmtUYXNrKAogICAgICAgICAgICAgICAgICAgICBbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKSVRUaHVu
a1B0clRhZz4gbGlua0NhbGwgPSB2bS0+Z2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9y
KS5jb2RlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoc2xvd0Nh
bGwsIEZ1bmN0aW9uUHRyPEpJVFRodW5rUHRyVGFnPihsaW5rQ2FsbCkpOwotCi0gICAgICAgICAg
ICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldENhbGxMb2NhdGlvbnMoCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4obGlu
a0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8SlNJbnRlcm5hbFB0clRhZz4oc2xvd0NhbGwpKSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFs
UHRyVGFnPihsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4odGFyZ2V0VG9D
aGVjaykpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25P
Zk5lYXJDYWxsPEpTSW50ZXJuYWxQdHJUYWc+KGZhc3RDYWxsKSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBjYWxsTGlua0luZm8tPnNldENvZGVMb2NhdGlvbnMoCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KHNsb3dQ
YXRoU3RhcnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRp
b25PZjxKU0ludGVybmFsUHRyVGFnPihkb25lTG9jYXRpb24pKTsKICAgICAgICAgICAgICAgICAg
ICAgfSk7CiAgICAgICAgICAgICB9KTsKIApAQCAtOTg1Nyw2MyArOTg0OSw1MCBAQCBwcml2YXRl
OgogICAgICAgICAgICAgICAgICAgICBzaHVmZmxlRGF0YS5zZXR1cENhbGxlZVNhdmVSZWdpc3Rl
cnMoaml0LmNvZGVCbG9jaygpKTsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAg
ICAgICAgIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvID0gaml0LmNvZGVCbG9jaygpLT5hZGRD
YWxsTGlua0luZm8obm9kZS0+b3JpZ2luLnNlbWFudGljKTsKKyAgICAgICAgICAgICAgICAgICAg
Y2FsbExpbmtJbmZvLT5zZXRVcENhbGwoQ2FsbExpbmtJbmZvOjpEaXJlY3RUYWlsQ2FsbCwgSW52
YWxpZEdQUlJlZyk7CiAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBD
Q2FsbEhlbHBlcnM6OlBhdGNoYWJsZUp1bXAgcGF0Y2hhYmxlSnVtcCA9IGppdC5wYXRjaGFibGVK
dW1wKCk7CiAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6TGFiZWwgbWFpblBhdGgg
PSBqaXQubGFiZWwoKTsKLSAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAg
IGppdC5zdG9yZTMyKAogICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tMzIoY2FsbFNpdGVJbmRleC5iaXRzKCkpLAogICAgICAgICAgICAgICAgICAgICAgICAg
Q0NhbGxIZWxwZXJzOjp0YWdGb3IoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzKSkpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAg
ICAgICAgICBjYWxsTGlua0luZm8tPnNldEZyYW1lU2h1ZmZsZURhdGEoc2h1ZmZsZURhdGEpOwot
ICAgICAgICAgICAgICAgICAgICBDYWxsRnJhbWVTaHVmZmxlcihqaXQsIHNodWZmbGVEYXRhKS5w
cmVwYXJlRm9yVGFpbENhbGwoKTsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAg
ICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBjYWxsID0gaml0Lm5lYXJUYWlsQ2FsbCgpOworICAg
ICAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPmVtaXREaXJlY3RUYWlsQ2FsbEZhc3RQYXRo
KGppdCwgWyZdIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0RnJh
bWVTaHVmZmxlRGF0YShzaHVmZmxlRGF0YSk7CisgICAgICAgICAgICAgICAgICAgICAgICBDYWxs
RnJhbWVTaHVmZmxlcihqaXQsIHNodWZmbGVEYXRhKS5wcmVwYXJlRm9yVGFpbENhbGwoKTsKKyAg
ICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
ICAgICAgICBqaXQuYWJvcnRXaXRoUmVhc29uKEpJVERpZFJldHVybkZyb21UYWlsQ2FsbCk7CiAg
ICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okxh
YmVsIHNsb3dQYXRoID0gaml0LmxhYmVsKCk7Ci0gICAgICAgICAgICAgICAgICAgIHBhdGNoYWJs
ZUp1bXAubV9qdW1wLmxpbmtUbyhzbG93UGF0aCwgJmppdCk7CiAgICAgICAgICAgICAgICAgICAg
IGNhbGxPcGVyYXRpb24oCiAgICAgICAgICAgICAgICAgICAgICAgICAqc3RhdGUsIHRvU2F2ZSwg
aml0LAogICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+b3JpZ2luLnNlbWFudGljLCBleGNl
cHRpb25zLmdldCgpLCBvcGVyYXRpb25MaW5rRGlyZWN0Q2FsbCwKICAgICAgICAgICAgICAgICAg
ICAgICAgIEludmFsaWRHUFJSZWcsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihjYWxsTGlu
a0luZm8pLCBjYWxsZWVHUFIpLmNhbGwoKTsKICAgICAgICAgICAgICAgICAgICAgaml0Lmp1bXAo
KS5saW5rVG8obWFpblBhdGgsICZqaXQpOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAg
ICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRVcENhbGwoQ2FsbExpbmtJbmZvOjpEaXJlY3RU
YWlsQ2FsbCwgSW52YWxpZEdQUlJlZyk7CiAgICAgICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5m
by0+c2V0RXhlY3V0YWJsZUR1cmluZ0NvbXBpbGF0aW9uKGV4ZWN1dGFibGUpOwogICAgICAgICAg
ICAgICAgICAgICBpZiAobnVtQWxsb2NhdGVkQXJncyA+IG51bVBhc3NlZEFyZ3MpCiAgICAgICAg
ICAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldE1heEFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzKG51bUFsbG9jYXRlZEFyZ3MpOwogICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAg
ICAgICAgICAgICAgaml0LmFkZExpbmtUYXNrKAotICAgICAgICAgICAgICAgICAgICAgICAgWz1d
IChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
Q29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gcGF0Y2hhYmxlSnVtcExvY2F0aW9u
ID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KHBhdGNoYWJsZUp1bXAp
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvZGVMb2NhdGlvbk5lYXJDYWxsPEpTSW50
ZXJuYWxQdHJUYWc+IGNhbGxMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxs
PEpTSW50ZXJuYWxQdHJUYWc+KGNhbGwpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIENv
ZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IHNsb3dQYXRoTG9jYXRpb24gPSBsaW5r
QnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oc2xvd1BhdGgpOwotCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRDYWxsTG9jYXRpb25zKAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRjaGFibGVKdW1wTG9jYXRpb24sCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoTG9jYXRpb24sCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNhbGxMb2NhdGlvbik7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICB9KTsKKyAgICAgICAgICAgICAgICAgICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1
ZmZlciYgbGlua0J1ZmZlcikgeworICAgICAgICAgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZv
LT5zZXRDb2RlTG9jYXRpb25zKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZm
ZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihzbG93UGF0aCksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4oKSk7Cisg
ICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIENhbGxMaW5r
SW5mbyogY2FsbExpbmtJbmZvID0gaml0LmNvZGVCbG9jaygpLT5hZGRDYWxsTGlua0luZm8obm9k
ZS0+b3JpZ2luLnNlbWFudGljKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBD
Q2FsbEhlbHBlcnM6OkxhYmVsIG1haW5QYXRoID0gaml0LmxhYmVsKCk7CisgICAgICAgICAgICAg
ICAgY2FsbExpbmtJbmZvLT5zZXRVcENhbGwoCisgICAgICAgICAgICAgICAgICAgIGlzQ29uc3Ry
dWN0ID8gQ2FsbExpbmtJbmZvOjpEaXJlY3RDb25zdHJ1Y3QgOiBDYWxsTGlua0luZm86OkRpcmVj
dENhbGwsIEludmFsaWRHUFJSZWcpOwogCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpM
YWJlbCBtYWluUGF0aCA9IGppdC5sYWJlbCgpOwogICAgICAgICAgICAgICAgIGppdC5zdG9yZTMy
KAogICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihjYWxsU2l0
ZUluZGV4LmJpdHMoKSksCiAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6dGFnRm9y
KFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
cykpKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkNh
bGwgY2FsbCA9IGppdC5uZWFyQ2FsbCgpOworICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+
ZW1pdERpcmVjdEZhc3RQYXRoKGppdCk7CiAgICAgICAgICAgICAgICAgaml0LmFkZFB0cigKICAg
ICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoLXBhcmFtcy5wcm9j
KCkuZnJhbWVTaXplKCkpLAogICAgICAgICAgICAgICAgICAgICBHUFJJbmZvOjpjYWxsRnJhbWVS
ZWdpc3RlciwgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgICAgICAg
ICAgICAgCi0gICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRVcENhbGwoCi0gICAgICAg
ICAgICAgICAgICAgIGlzQ29uc3RydWN0ID8gQ2FsbExpbmtJbmZvOjpEaXJlY3RDb25zdHJ1Y3Qg
OiBDYWxsTGlua0luZm86OkRpcmVjdENhbGwsIEludmFsaWRHUFJSZWcpOwogICAgICAgICAgICAg
ICAgIGNhbGxMaW5rSW5mby0+c2V0RXhlY3V0YWJsZUR1cmluZ0NvbXBpbGF0aW9uKGV4ZWN1dGFi
bGUpOwogICAgICAgICAgICAgICAgIGlmIChudW1BbGxvY2F0ZWRBcmdzID4gbnVtUGFzc2VkQXJn
cykKICAgICAgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRNYXhBcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcyhudW1BbGxvY2F0ZWRBcmdzKTsKQEAgLTk5MzUsMTUgKzk5MTQsOSBAQCBw
cml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAg
ICBqaXQuYWRkTGlua1Rhc2soCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWz1dIChMaW5r
QnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENv
ZGVMb2NhdGlvbk5lYXJDYWxsPEpTSW50ZXJuYWxQdHJUYWc+IGNhbGxMb2NhdGlvbiA9IGxpbmtC
dWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPEpTSW50ZXJuYWxQdHJUYWc+KGNhbGwpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRy
VGFnPiBzbG93UGF0aExvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQ
dHJUYWc+KHNsb3dQYXRoKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5r
QnVmZmVyLmxpbmsoY2FsbCwgc2xvd1BhdGhMb2NhdGlvbik7Ci0KLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRDYWxsTG9jYXRpb25zKAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0
clRhZz4oKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoTG9j
YXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsTG9jYXRpb24p
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldENvZGVM
b2NhdGlvbnMoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVy
LmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oc2xvd1BhdGgpLCAKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+
KCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAg
ICB9KTsKICAgICAgICAgICAgIH0pOwpAQCAtMTAwMzQsNDAgKzEwMDA3LDMwIEBAIHByaXZhdGU6
CiAgICAgICAgICAgICAgICAgc2h1ZmZsZURhdGEuc2V0dXBDYWxsZWVTYXZlUmVnaXN0ZXJzKGpp
dC5jb2RlQmxvY2soKSk7CiAKICAgICAgICAgICAgICAgICBDYWxsTGlua0luZm8qIGNhbGxMaW5r
SW5mbyA9IGppdC5jb2RlQmxvY2soKS0+YWRkQ2FsbExpbmtJbmZvKGNvZGVPcmlnaW4pOworICAg
ICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0VXBDYWxsKENhbGxMaW5rSW5mbzo6VGFpbENh
bGwsIEdQUkluZm86OnJlZ1QwKTsKIAotICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6RGF0
YUxhYmVsUHRyIHRhcmdldFRvQ2hlY2s7Ci0gICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpK
dW1wIHNsb3dQYXRoID0gaml0LmJyYW5jaFB0cldpdGhQYXRjaCgKLSAgICAgICAgICAgICAgICAg
ICAgQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwgR1BSSW5mbzo6cmVnVDAsIHRhcmdldFRvQ2hlY2ss
Ci0gICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihudWxscHRy
KSk7Ci0KLSAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldEZyYW1lU2h1ZmZsZURhdGEo
c2h1ZmZsZURhdGEpOwotICAgICAgICAgICAgICAgIENhbGxGcmFtZVNodWZmbGVyKGppdCwgc2h1
ZmZsZURhdGEpLnByZXBhcmVGb3JUYWlsQ2FsbCgpOwotCi0gICAgICAgICAgICAgICAgQ0NhbGxI
ZWxwZXJzOjpDYWxsIGZhc3RDYWxsID0gaml0Lm5lYXJUYWlsQ2FsbCgpOworICAgICAgICAgICAg
ICAgIGF1dG8gc2xvd1BhdGggPSBjYWxsTGlua0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKGpp
dCwgR1BSSW5mbzo6cmVnVDAsIEludmFsaWRHUFJSZWcsIENhbGxMaW5rSW5mbzo6VXNlRGF0YUlD
OjpObywgWyZdIHsKKyAgICAgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRGcmFtZVNo
dWZmbGVEYXRhKHNodWZmbGVEYXRhKTsKKyAgICAgICAgICAgICAgICAgICAgQ2FsbEZyYW1lU2h1
ZmZsZXIoaml0LCBzaHVmZmxlRGF0YSkucHJlcGFyZUZvclRhaWxDYWxsKCk7CisgICAgICAgICAg
ICAgICAgfSk7CiAKICAgICAgICAgICAgICAgICBzbG93UGF0aC5saW5rKCZqaXQpOwotCisgICAg
ICAgICAgICAgICAgYXV0byBzbG93UGF0aFN0YXJ0ID0gaml0LmxhYmVsKCk7CiAgICAgICAgICAg
ICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIgc2xvd1BhdGhTaHVmZmxlcihqaXQsIHNodWZmbGVEYXRh
KTsKICAgICAgICAgICAgICAgICBzbG93UGF0aFNodWZmbGVyLnNldENhbGxlZUpTVmFsdWVSZWdz
KEpTVmFsdWVSZWdzKEdQUkluZm86OnJlZ1QwKSk7CiAgICAgICAgICAgICAgICAgc2xvd1BhdGhT
aHVmZmxlci5wcmVwYXJlRm9yU2xvd1BhdGgoKTsKIAotICAgICAgICAgICAgICAgIGppdC5tb3Zl
KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihjYWxsTGlua0luZm8pLCBHUFJJbmZvOjpyZWdU
Mik7CiAgICAgICAgICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRy
KGppdC5jb2RlQmxvY2soKS0+Z2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykp
LCBHUFJJbmZvOjpyZWdUMyk7Ci0gICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIHNs
b3dDYWxsID0gaml0Lm5lYXJDYWxsKCk7CisgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5l
bWl0U2xvd1BhdGgoKnZtLCBqaXQpOwogCisgICAgICAgICAgICAgICAgYXV0byBkb25lTG9jYXRp
b24gPSBqaXQubGFiZWwoKTsKICAgICAgICAgICAgICAgICBqaXQuYWJvcnRXaXRoUmVhc29uKEpJ
VERpZFJldHVybkZyb21UYWlsQ2FsbCk7CiAKLSAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8t
PnNldFVwQ2FsbChDYWxsTGlua0luZm86OlRhaWxDYWxsLCBHUFJJbmZvOjpyZWdUMCk7Ci0KICAg
ICAgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soCiAgICAgICAgICAgICAgICAgICAgIFs9XSAo
TGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICAgICAgICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXJDb2RlUHRyPEpJVFRodW5rUHRyVGFnPiBsaW5rQ2FsbCA9IHZtLT5nZXRDVElTdHVi
KGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpLmNvZGUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGxpbmtCdWZmZXIubGluayhzbG93Q2FsbCwgRnVuY3Rpb25QdHI8SklUVGh1bmtQdHJUYWc+KGxp
bmtDYWxsKSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0Q2Fs
bExvY2F0aW9ucygKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJl
bDxKU0ludGVybmFsUHRyVGFnPihsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxKU0ludGVy
bmFsUHRyVGFnPihzbG93Q2FsbCkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvZGVM
b2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+KGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0lu
dGVybmFsUHRyVGFnPih0YXJnZXRUb0NoZWNrKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8SlNJbnRlcm5hbFB0clRhZz4oZmFzdENh
bGwpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0Q29kZUxvY2F0
aW9ucygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8
SlNJbnRlcm5hbFB0clRhZz4oc2xvd1BhdGhTdGFydCksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KGRvbmVMb2NhdGlv
bikpOwogICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIH0pOwogICAgIH0KQEAg
LTEwMzIwLDQwICsxMDI4MywzOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIGVsc2UKICAg
ICAgICAgICAgICAgICAgICAgY2FsbFR5cGUgPSBDYWxsTGlua0luZm86OkNhbGxWYXJhcmdzOwog
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0VXBDYWxs
KGNhbGxUeXBlLCBHUFJJbmZvOjpyZWdUMCk7CisKICAgICAgICAgICAgICAgICBib29sIGlzVGFp
bENhbGwgPSBDYWxsTGlua0luZm86OmNhbGxNb2RlRm9yKGNhbGxUeXBlKSA9PSBDYWxsTW9kZTo6
VGFpbDsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkRh
dGFMYWJlbFB0ciB0YXJnZXRUb0NoZWNrOwotICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6
SnVtcCBzbG93UGF0aCA9IGppdC5icmFuY2hQdHJXaXRoUGF0Y2goCi0gICAgICAgICAgICAgICAg
ICAgIENDYWxsSGVscGVyczo6Tm90RXF1YWwsIEdQUkluZm86OnJlZ1QwLCB0YXJnZXRUb0NoZWNr
LAotICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobnVsbHB0
cikpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Q2Fs
bCBmYXN0Q2FsbDsKKworICAgICAgICAgICAgICAgIEFTU0VSVCghdXNlZFJlZ2lzdGVycy5nZXQo
R1BSSW5mbzo6cmVnVDIpKTsgLy8gVXNlZCBvbiB0aGUgc2xvdyBwYXRoLgorCisgICAgICAgICAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93UGF0aDsKICAgICAgICAgICAgICAgICBD
Q2FsbEhlbHBlcnM6Okp1bXAgZG9uZTsKLSAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg
ICBpZiAoaXNUYWlsQ2FsbCkgewotICAgICAgICAgICAgICAgICAgICBqaXQuZW1pdFJlc3RvcmVD
YWxsZWVTYXZlcygpOwotICAgICAgICAgICAgICAgICAgICBqaXQucHJlcGFyZUZvclRhaWxDYWxs
U2xvdygpOwotICAgICAgICAgICAgICAgICAgICBmYXN0Q2FsbCA9IGppdC5uZWFyVGFpbENhbGwo
KTsKKyAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGggPSBjYWxsTGlua0luZm8tPmVtaXRUYWls
Q2FsbEZhc3RQYXRoKGppdCwgR1BSSW5mbzo6cmVnVDAsIEludmFsaWRHUFJSZWcsIENhbGxMaW5r
SW5mbzo6VXNlRGF0YUlDOjpObywgWyZdIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGppdC5l
bWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBqaXQucHJl
cGFyZUZvclRhaWxDYWxsU2xvdygpOworICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAg
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBmYXN0Q2FsbCA9IGppdC5uZWFy
Q2FsbCgpOworICAgICAgICAgICAgICAgICAgICBzbG93UGF0aCA9IGNhbGxMaW5rSW5mby0+ZW1p
dEZhc3RQYXRoKGppdCwgR1BSSW5mbzo6cmVnVDAsIEludmFsaWRHUFJSZWcsIENhbGxMaW5rSW5m
bzo6VXNlRGF0YUlDOjpObyk7CiAgICAgICAgICAgICAgICAgICAgIGRvbmUgPSBqaXQuanVtcCgp
OwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBz
bG93UGF0aC5saW5rKCZqaXQpOworICAgICAgICAgICAgICAgIGF1dG8gc2xvd1BhdGhTdGFydCA9
IGppdC5sYWJlbCgpOwogCiAgICAgICAgICAgICAgICAgaWYgKGlzVGFpbENhbGwpCiAgICAgICAg
ICAgICAgICAgICAgIGppdC5lbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7Ci0gICAgICAgICAgICAg
ICAgQVNTRVJUKCF1c2VkUmVnaXN0ZXJzLmdldChHUFJJbmZvOjpyZWdUMikpOwotICAgICAgICAg
ICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihjYWxsTGlua0luZm8p
LCBHUFJJbmZvOjpyZWdUMik7CiAgICAgICAgICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tUHRyKGppdC5jb2RlQmxvY2soKS0+Z2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9y
aWdpbi5zZW1hbnRpYykpLCBHUFJJbmZvOjpyZWdUMyk7Ci0gICAgICAgICAgICAgICAgQ0NhbGxI
ZWxwZXJzOjpDYWxsIHNsb3dDYWxsID0gaml0Lm5lYXJDYWxsKCk7CisgICAgICAgICAgICAgICAg
Y2FsbExpbmtJbmZvLT5lbWl0U2xvd1BhdGgoKnZtLCBqaXQpOwogICAgICAgICAgICAgICAgIAog
ICAgICAgICAgICAgICAgIGlmIChpc1RhaWxDYWxsKQogICAgICAgICAgICAgICAgICAgICBqaXQu
YWJvcnRXaXRoUmVhc29uKEpJVERpZFJldHVybkZyb21UYWlsQ2FsbCk7CiAgICAgICAgICAgICAg
ICAgZWxzZQogICAgICAgICAgICAgICAgICAgICBkb25lLmxpbmsoJmppdCk7Ci0gICAgICAgICAg
ICAgICAgCi0gICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRVcENhbGwoY2FsbFR5cGUs
IEdQUkluZm86OnJlZ1QwKTsKKworICAgICAgICAgICAgICAgIGF1dG8gZG9uZUxvY2F0aW9uID0g
aml0LmxhYmVsKCk7CiAKICAgICAgICAgICAgICAgICBqaXQuYWRkUHRyKAogICAgICAgICAgICAg
ICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigtb3JpZ2luYWxTdGFja0hlaWdodCks
CkBAIC0xMDM2MSwxMyArMTAzMjIsOSBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIAogICAg
ICAgICAgICAgICAgIGppdC5hZGRMaW5rVGFzaygKICAgICAgICAgICAgICAgICAgICAgWz1dIChM
aW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlckNvZGVQdHI8SklUVGh1bmtQdHJUYWc+IGxpbmtDYWxsID0gdm0tPmdldENUSVN0dWIo
bGlua0NhbGxUaHVua0dlbmVyYXRvcikuY29kZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAg
bGlua0J1ZmZlci5saW5rKHNsb3dDYWxsLCBGdW5jdGlvblB0cjxKSVRUaHVua1B0clRhZz4obGlu
a0NhbGwpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAg
ICAgY2FsbExpbmtJbmZvLT5zZXRDYWxsTG9jYXRpb25zKAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+KGxpbmtCdWZmZXIubG9j
YXRpb25PZk5lYXJDYWxsPEpTSW50ZXJuYWxQdHJUYWc+KHNsb3dDYWxsKSksCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4obGlu
a0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KHRhcmdldFRvQ2hlY2spKSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxK
U0ludGVybmFsUHRyVGFnPihmYXN0Q2FsbCkpOworICAgICAgICAgICAgICAgICAgICAgICAgY2Fs
bExpbmtJbmZvLT5zZXRDb2RlTG9jYXRpb25zKAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihzbG93UGF0aFN0YXJ0KSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRl
cm5hbFB0clRhZz4oZG9uZUxvY2F0aW9uKSk7CiAgICAgICAgICAgICAgICAgICAgIH0pOwogICAg
ICAgICAgICAgfSk7CiAKQEAgLTEwNjA3LDM5ICsxMDU2NCwzNiBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgY2FsbFR5cGUgPSBDYWxsTGlua0lu
Zm86OkNhbGxWYXJhcmdzOwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGJvb2wg
aXNUYWlsQ2FsbCA9IENhbGxMaW5rSW5mbzo6Y2FsbE1vZGVGb3IoY2FsbFR5cGUpID09IENhbGxN
b2RlOjpUYWlsOworICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0VXBDYWxsKGNhbGxU
eXBlLCBHUFJJbmZvOjpyZWdUMCk7CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAg
Q0NhbGxIZWxwZXJzOjpEYXRhTGFiZWxQdHIgdGFyZ2V0VG9DaGVjazsKLSAgICAgICAgICAgICAg
ICBDQ2FsbEhlbHBlcnM6Okp1bXAgc2xvd1BhdGggPSBqaXQuYnJhbmNoUHRyV2l0aFBhdGNoKAot
ICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCBHUFJJbmZvOjpyZWdU
MCwgdGFyZ2V0VG9DaGVjaywKLSAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tUHRyKG51bGxwdHIpKTsKKyAgICAgICAgICAgICAgICBib29sIGlzVGFpbENhbGwgPSBD
YWxsTGlua0luZm86OmNhbGxNb2RlRm9yKGNhbGxUeXBlKSA9PSBDYWxsTW9kZTo6VGFpbDsKICAg
ICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgZmFzdENh
bGw7CisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93UGF0aDsKICAg
ICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZG9uZTsKLSAgICAgICAgICAgICAgICAK
ICAgICAgICAgICAgICAgICBpZiAoaXNUYWlsQ2FsbCkgewotICAgICAgICAgICAgICAgICAgICBq
aXQuZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwotICAgICAgICAgICAgICAgICAgICBqaXQucHJl
cGFyZUZvclRhaWxDYWxsU2xvdygpOwotICAgICAgICAgICAgICAgICAgICBmYXN0Q2FsbCA9IGpp
dC5uZWFyVGFpbENhbGwoKTsKKyAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGggPSBjYWxsTGlu
a0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKGppdCwgR1BSSW5mbzo6cmVnVDAsIEludmFsaWRH
UFJSZWcsIENhbGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpObywgWyZdIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGppdC5lbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBqaXQucHJlcGFyZUZvclRhaWxDYWxsU2xvdygpOworICAgICAgICAgICAgICAgICAg
ICB9KTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBmYXN0
Q2FsbCA9IGppdC5uZWFyQ2FsbCgpOworICAgICAgICAgICAgICAgICAgICBzbG93UGF0aCA9IGNh
bGxMaW5rSW5mby0+ZW1pdEZhc3RQYXRoKGppdCwgR1BSSW5mbzo6cmVnVDAsIEludmFsaWRHUFJS
ZWcsIENhbGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpObyk7CiAgICAgICAgICAgICAgICAgICAgIGRv
bmUgPSBqaXQuanVtcCgpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgICAgICBzbG93UGF0aC5saW5rKCZqaXQpOworICAgICAgICAgICAgICAgIGF1dG8g
c2xvd1BhdGhTdGFydCA9IGppdC5sYWJlbCgpOwogCiAgICAgICAgICAgICAgICAgaWYgKGlzVGFp
bENhbGwpCiAgICAgICAgICAgICAgICAgICAgIGppdC5lbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7
Ci0gICAgICAgICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGNh
bGxMaW5rSW5mbyksIEdQUkluZm86OnJlZ1QyKTsKICAgICAgICAgICAgICAgICBqaXQubW92ZShD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoaml0LmNvZGVCbG9jaygpLT5nbG9iYWxPYmplY3RG
b3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIEdQUkluZm86OnJlZ1QzKTsKLSAgICAgICAgICAg
ICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgc2xvd0NhbGwgPSBqaXQubmVhckNhbGwoKTsKKyAgICAg
ICAgICAgICAgICBjYWxsTGlua0luZm8tPmVtaXRTbG93UGF0aCgqdm0sIGppdCk7CiAgICAgICAg
ICAgICAgICAgCiAgICAgICAgICAgICAgICAgaWYgKGlzVGFpbENhbGwpCiAgICAgICAgICAgICAg
ICAgICAgIGppdC5hYm9ydFdpdGhSZWFzb24oSklURGlkUmV0dXJuRnJvbVRhaWxDYWxsKTsKICAg
ICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIGRvbmUubGluaygmaml0KTsK
LSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldFVwQ2Fs
bChjYWxsVHlwZSwgR1BSSW5mbzo6cmVnVDApOworCisgICAgICAgICAgICAgICAgYXV0byBkb25l
TG9jYXRpb24gPSBqaXQubGFiZWwoKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg
ICBqaXQuYWRkUHRyKAogICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJ
bW0zMigtb3JpZ2luYWxTdGFja0hlaWdodCksCkBAIC0xMDY0NywxMyArMTA2MDEsOSBAQCBwcml2
YXRlOgogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGppdC5hZGRMaW5rVGFzaygK
ICAgICAgICAgICAgICAgICAgICAgWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SklUVGh1bmtQdHJUYWc+
IGxpbmtDYWxsID0gdm0tPmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcikuY29kZSgp
OwotICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKHNsb3dDYWxsLCBGdW5j
dGlvblB0cjxKSVRUaHVua1B0clRhZz4obGlua0NhbGwpKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRDYWxsTG9jYXRp
b25zKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50
ZXJuYWxQdHJUYWc+KGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPEpTSW50ZXJuYWxQdHJU
YWc+KHNsb3dDYWxsKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9u
TGFiZWw8SlNJbnRlcm5hbFB0clRhZz4obGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQ
dHJUYWc+KHRhcmdldFRvQ2hlY2spKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5r
QnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxKU0ludGVybmFsUHRyVGFnPihmYXN0Q2FsbCkpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRDb2RlTG9jYXRpb25zKAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVy
bmFsUHRyVGFnPihzbG93UGF0aFN0YXJ0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBs
aW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oZG9uZUxvY2F0aW9uKSk7CiAg
ICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgfSk7CiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5jcHAJKHJldmlzaW9uIDI3NzQ0MCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNzEsNiArNzEsMTYgQEAgdm9pZCBDQ2FsbEhlbHBlcnM6OmVuc3VyZVNoYWRvd0NoaWNr
ZW5QYQogICAgIHN0b3JlUHRyKHNjcmF0Y2gyLCBBZGRyZXNzKHNjcmF0Y2gxTm9uQXJnR1BSKSk7
CiB9CiAKK3ZvaWQgQ0NhbGxIZWxwZXJzOjplbWl0SklUQ29kZU92ZXIoTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyPEpTSW50ZXJuYWxQdHJUYWc+IHdoZXJlLCBXVEY6OkZ1bmN0aW9uPHZvaWQoQ0NhbGxI
ZWxwZXJzJik+IGVtaXRDb2RlLCBjb25zdCBjaGFyKiBkZXNjcmlwdGlvbikKK3sKKyAgICBDQ2Fs
bEhlbHBlcnMgaml0OworICAgIGVtaXRDb2RlKGppdCk7CisKKyAgICBjb25zdGV4cHIgYm9vbCBu
ZWVkc0JyYW5jaENvbXBhY3Rpb24gPSBmYWxzZTsKKyAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIo
aml0LCB3aGVyZSwgaml0Lm1fYXNzZW1ibGVyLmJ1ZmZlcigpLmNvZGVTaXplKCksIExpbmtCdWZm
ZXI6OlByb2ZpbGU6OklubGluZUNhY2hlLCBKSVRDb21waWxhdGlvbk11c3RTdWNjZWVkLCBuZWVk
c0JyYW5jaENvbXBhY3Rpb24pOworICAgIEZJTkFMSVpFX0NPREUobGlua0J1ZmZlciwgTm9QdHJU
YWcsIGRlc2NyaXB0aW9uKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBF
TkFCTEUoSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5o
CShyZXZpc2lvbiAyNzc0NDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NDYWxsSGVs
cGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC04MTgsNiArODE4LDggQEAgcHVibGljOgogICAgIHZv
aWQgbG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoR1BSUmVnIHNoYWRvd1BhY2tldCwgSlNWYWx1
ZVJlZ3MgdGhpc1JlZ3MsIEdQUlJlZyBzY29wZSwgQ29kZUJsb2NrKiwgQ2FsbFNpdGVJbmRleCk7
CiAgICAgLy8gTGVhdmVzIGJlaGluZCBhIHBvaW50ZXIgdG8gdGhlIFBhY2tldCB3ZSBzaG91bGQg
d3JpdGUgdG8gaW4gc2hhZG93UGFja2V0LgogICAgIHZvaWQgZW5zdXJlU2hhZG93Q2hpY2tlblBh
Y2tldChWTSYsIEdQUlJlZyBzaGFkb3dQYWNrZXQsIEdQUlJlZyBzY3JhdGNoMU5vbkFyZ0dQUiwg
R1BSUmVnIHNjcmF0Y2gyKTsKKworICAgIHN0YXRpYyB2b2lkIGVtaXRKSVRDb2RlT3ZlcihNYWNy
b0Fzc2VtYmxlckNvZGVQdHI8SlNJbnRlcm5hbFB0clRhZz4gd2hlcmUsIFdURjo6RnVuY3Rpb248
dm9pZChDQ2FsbEhlbHBlcnMmKT4sIGNvbnN0IGNoYXIqKTsKIH07CiAKIH0gLy8gbmFtZXNwYWNl
IEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkocmV2aXNpb24gMjc3NDQwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05
NTksMTAgKzk1OSw5IEBAIENvbXBpbGF0aW9uUmVzdWx0IEpJVDo6bGluaygpCiAKICAgICBmb3Ig
KGF1dG8mIGNvbXBpbGF0aW9uSW5mbyA6IG1fY2FsbENvbXBpbGF0aW9uSW5mbykgewogICAgICAg
ICBDYWxsTGlua0luZm8mIGluZm8gPSAqY29tcGlsYXRpb25JbmZvLmNhbGxMaW5rSW5mbzsKLSAg
ICAgICAgaW5mby5zZXRDYWxsTG9jYXRpb25zKAotICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFi
ZWw8SlNJbnRlcm5hbFB0clRhZz4ocGF0Y2hCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPEpTSW50
ZXJuYWxQdHJUYWc+KGNvbXBpbGF0aW9uSW5mby5jYWxsUmV0dXJuTG9jYXRpb24pKSwKLSAgICAg
ICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+KHBhdGNoQnVmZmVyLmxv
Y2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oY29tcGlsYXRpb25JbmZvLmhvdFBhdGhCZWdpbikp
LAotICAgICAgICAgICAgcGF0Y2hCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPEpTSW50ZXJuYWxQ
dHJUYWc+KGNvbXBpbGF0aW9uSW5mby5ob3RQYXRoT3RoZXIpKTsKKyAgICAgICAgaW5mby5zZXRD
b2RlTG9jYXRpb25zKAorICAgICAgICAgICAgcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU0ludGVy
bmFsUHRyVGFnPihjb21waWxhdGlvbkluZm8uc2xvd1BhdGhTdGFydCksCisgICAgICAgICAgICBw
YXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KGNvbXBpbGF0aW9uSW5mby5k
b25lTG9jYXRpb24pKTsKICAgICB9CiAKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
LmgJKHJldmlzaW9uIDI3NzQ0MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJ
KHdvcmtpbmcgY29weSkKQEAgLTE3NSw5ICsxNzUsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICB9
OwogCiAgICAgc3RydWN0IENhbGxDb21waWxhdGlvbkluZm8gewotICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6RGF0YUxhYmVsUHRyIGhvdFBhdGhCZWdpbjsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OkNhbGwgaG90UGF0aE90aGVyOwotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsUmV0
dXJuTG9jYXRpb247CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBzbG93UGF0aFN0YXJ0
OworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgZG9uZUxvY2F0aW9uOwogICAgICAgICBD
YWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbzsKICAgICB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVENhbGwzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRDYWxsMzJfNjQuY3BwCShyZXZpc2lvbiAyNzc0NDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMwMSwzMCArMzAxLDM0IEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsKGNvbnN0IEluc3RydWN0
aW8KICAgICBpZiAoY29tcGlsZUNhbGxFdmFsKGJ5dGVjb2RlKSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgaWYgKG9wY29kZUlEID09IG9wX3RhaWxfY2FsbCB8fCBvcGNvZGVJRCA9PSBvcF90YWls
X2NhbGxfdmFyYXJncykKLSAgICAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOworICAgIGlu
Zm8tPnNldFVwQ2FsbChDYWxsTGlua0luZm86OmNhbGxUeXBlRm9yKG9wY29kZUlEKSwgcmVnVDAp
OworCisgICAgaWYgKG9wY29kZUlEID09IG9wX3RhaWxfY2FsbCB8fCBvcGNvZGVJRCA9PSBvcF90
YWlsX2NhbGxfdmFyYXJncyB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1
bWVudHMpCiAKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDEpKTsKIAogICAg
IERhdGFMYWJlbFB0ciBhZGRyZXNzT2ZMaW5rZWRGdW5jdGlvbkNoZWNrOwogICAgIEp1bXAgc2xv
d0Nhc2UgPSBicmFuY2hQdHJXaXRoUGF0Y2goTm90RXF1YWwsIHJlZ1QwLCBhZGRyZXNzT2ZMaW5r
ZWRGdW5jdGlvbkNoZWNrLCBUcnVzdGVkSW1tUHRyKG51bGxwdHIpKTsKIAotICAgIGFkZFNsb3dD
YXNlKHNsb3dDYXNlKTsKLQogICAgIEFTU0VSVChtX2NhbGxDb21waWxhdGlvbkluZm8uc2l6ZSgp
ID09IGNhbGxMaW5rSW5mb0luZGV4KTsKLSAgICBpbmZvLT5zZXRVcENhbGwoQ2FsbExpbmtJbmZv
OjpjYWxsVHlwZUZvcihvcGNvZGVJRCksIHJlZ1QwKTsKICAgICBtX2NhbGxDb21waWxhdGlvbklu
Zm8uYXBwZW5kKENhbGxDb21waWxhdGlvbkluZm8oKSk7Ci0gICAgbV9jYWxsQ29tcGlsYXRpb25J
bmZvW2NhbGxMaW5rSW5mb0luZGV4XS5ob3RQYXRoQmVnaW4gPSBhZGRyZXNzT2ZMaW5rZWRGdW5j
dGlvbkNoZWNrOwogICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0u
Y2FsbExpbmtJbmZvID0gaW5mbzsKIAogICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7
CiAgICAgaWYgKG9wY29kZUlEID09IG9wX3RhaWxfY2FsbCB8fCBvcGNvZGVJRCA9PSBvcF90YWls
X2NhbGxfdmFyYXJncyB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVu
dHMpIHsKLSAgICAgICAgcHJlcGFyZUZvclRhaWxDYWxsU2xvdygpOwotICAgICAgICBtX2NhbGxD
b21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmhvdFBhdGhPdGhlciA9IGVtaXROYWtl
ZE5lYXJUYWlsQ2FsbCgpOworICAgICAgICBhdXRvIHNsb3dQYXRocyA9IGluZm8tPmVtaXRUYWls
Q2FsbEZhc3RQYXRoKCp0aGlzLCByZWdUMCwgcmVnVDIsIENhbGxMaW5rSW5mbzo6VXNlRGF0YUlD
OjpZZXMsIFsmXSB7CisgICAgICAgICAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CisgICAg
ICAgICAgICBwcmVwYXJlRm9yVGFpbENhbGxTbG93KCk7CisgICAgICAgIH0pOworICAgICAgICBh
ZGRTbG93Q2FzZShzbG93UGF0aHMpOworICAgICAgICBhdXRvIGRvbmVMb2NhdGlvbiA9IGxhYmVs
KCk7CisgICAgICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uZG9u
ZUxvY2F0aW9uID0gZG9uZUxvY2F0aW9uOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAg
bV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5ob3RQYXRoT3RoZXIgPSBl
bWl0TmFrZWROZWFyQ2FsbCgpOworICAgIGF1dG8gc2xvd1BhdGhzID0gaW5mby0+ZW1pdEZhc3RQ
YXRoKCp0aGlzLCByZWdUMCwgcmVnVDIsIENhbGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpZZXMpOwor
ICAgIGFkZFNsb3dDYXNlKHNsb3dQYXRocyk7CisgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2Nh
bGxMaW5rSW5mb0luZGV4XS5kb25lTG9jYXRpb24gPSBsYWJlbCgpOwogCiAgICAgYWRkUHRyKFRy
dXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJl
Z2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAg
Y2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKQEAgLTM0NCwxNSArMzQ4LDEzIEBAIHZvaWQg
SklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2UoY29uc3QgSW4KIAogICAgIGxpbmtBbGxTbG93Q2Fz
ZXMoaXRlcik7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgcmVnVDMpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NhbGxDb21waWxhdGlv
bkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmNhbGxMaW5rSW5mbyksIHJlZ1QyKTsKLQogICAgIGlm
IChvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGwgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3Zh
cmFyZ3MgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKQogICAg
ICAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CiAKLSAgICBtX2NhbGxDb21waWxhdGlvbklu
Zm9bY2FsbExpbmtJbmZvSW5kZXhdLmNhbGxSZXR1cm5Mb2NhdGlvbiA9IGVtaXROYWtlZE5lYXJD
YWxsKG1fdm0tPmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcikucmV0YWdnZWRDb2Rl
PE5vUHRyVGFnPigpKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgcmVnVDMpOworICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0lu
Zm9JbmRleF0uY2FsbExpbmtJbmZvLT5lbWl0U2xvd1BhdGgoKm1fdm0sICp0aGlzKTsKIAotICAg
IGlmIChvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGwgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxs
X3ZhcmFyZ3MpIHsKKyAgICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsIHx8IG9wY29kZUlE
ID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3
YXJkX2FyZ3VtZW50cykgewogICAgICAgICBhYm9ydFdpdGhSZWFzb24oSklURGlkUmV0dXJuRnJv
bVRhaWxDYWxsKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRDYWxsLmNwcAkocmV2aXNpb24gMjc3NDQwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRDYWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg4LDggKzE4OCwxNCBA
QCBib29sIEpJVDo6Y29tcGlsZVRhaWxDYWxsKGNvbnN0IE9wVGFpbENhCiAgICAgICAgIFZhbHVl
UmVjb3Zlcnk6OmluR1BSKHJlZ1QwLCBEYXRhRm9ybWF0SlMpOwogICAgIHNodWZmbGVEYXRhLnNl
dHVwQ2FsbGVlU2F2ZVJlZ2lzdGVycyhtX2NvZGVCbG9jayk7CiAgICAgaW5mby0+c2V0RnJhbWVT
aHVmZmxlRGF0YShzaHVmZmxlRGF0YSk7Ci0gICAgQ2FsbEZyYW1lU2h1ZmZsZXIoKnRoaXMsIHNo
dWZmbGVEYXRhKS5wcmVwYXJlRm9yVGFpbENhbGwoKTsKLSAgICBtX2NhbGxDb21waWxhdGlvbklu
Zm9bY2FsbExpbmtJbmZvSW5kZXhdLmhvdFBhdGhPdGhlciA9IGVtaXROYWtlZE5lYXJUYWlsQ2Fs
bCgpOworCisgICAgSnVtcExpc3Qgc2xvd1BhdGhzID0gaW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBh
dGgoKnRoaXMsIHJlZ1QwLCByZWdUMiwgQ2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6OlllcywgWyZd
IHsKKyAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIoKnRoaXMsIHNodWZmbGVEYXRhKS5wcmVwYXJl
Rm9yVGFpbENhbGwoKTsKKyAgICB9KTsKKyAgICBhZGRTbG93Q2FzZShzbG93UGF0aHMpOworICAg
IGF1dG8gZG9uZUxvY2F0aW9uID0gbGFiZWwoKTsKKyAgICBtX2NhbGxDb21waWxhdGlvbkluZm9b
Y2FsbExpbmtJbmZvSW5kZXhdLmRvbmVMb2NhdGlvbiA9IGRvbmVMb2NhdGlvbjsKKyAgICAKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMjI4LDI4ICsyMzQsMzAgQEAgdm9pZCBKSVQ6OmNvbXBp
bGVPcENhbGwoY29uc3QgSW5zdHJ1Y3RpbwogICAgIGlmIChjb21waWxlQ2FsbEV2YWwoYnl0ZWNv
ZGUpKQogICAgICAgICByZXR1cm47CiAKLSAgICBEYXRhTGFiZWxQdHIgYWRkcmVzc09mTGlua2Vk
RnVuY3Rpb25DaGVjazsKLSAgICBKdW1wIHNsb3dDYXNlID0gYnJhbmNoUHRyV2l0aFBhdGNoKE5v
dEVxdWFsLCByZWdUMCwgYWRkcmVzc09mTGlua2VkRnVuY3Rpb25DaGVjaywgVHJ1c3RlZEltbVB0
cihudWxscHRyKSk7Ci0gICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2UpOwotCiAgICAgQVNTRVJUKG1f
Y2FsbENvbXBpbGF0aW9uSW5mby5zaXplKCkgPT0gY2FsbExpbmtJbmZvSW5kZXgpOwogICAgIGlu
Zm8tPnNldFVwQ2FsbChDYWxsTGlua0luZm86OmNhbGxUeXBlRm9yKG9wY29kZUlEKSwgcmVnVDAp
OwogICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mby5hcHBlbmQoQ2FsbENvbXBpbGF0aW9uSW5mbygp
KTsKLSAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmhvdFBhdGhC
ZWdpbiA9IGFkZHJlc3NPZkxpbmtlZEZ1bmN0aW9uQ2hlY2s7CiAgICAgbV9jYWxsQ29tcGlsYXRp
b25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5jYWxsTGlua0luZm8gPSBpbmZvOwogCi0gICAgaWYg
KGNvbXBpbGVUYWlsQ2FsbChieXRlY29kZSwgaW5mbywgY2FsbExpbmtJbmZvSW5kZXgpKSB7Cisg
ICAgaWYgKGNvbXBpbGVUYWlsQ2FsbChieXRlY29kZSwgaW5mbywgY2FsbExpbmtJbmZvSW5kZXgp
KQogICAgICAgICByZXR1cm47Ci0gICAgfQogCiAgICAgaWYgKG9wY29kZUlEID09IG9wX3RhaWxf
Y2FsbF92YXJhcmdzIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50
cykgewotICAgICAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7Ci0gICAgICAgIHByZXBhcmVG
b3JUYWlsQ2FsbFNsb3coKTsKLSAgICAgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5r
SW5mb0luZGV4XS5ob3RQYXRoT3RoZXIgPSBlbWl0TmFrZWROZWFyVGFpbENhbGwoKTsKKyAgICAg
ICAgYXV0byBzbG93UGF0aHMgPSBpbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aCgqdGhpcywgcmVn
VDAsIHJlZ1QyLCBDYWxsTGlua0luZm86OlVzZURhdGFJQzo6WWVzLCBbJl0geworICAgICAgICAg
ICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOworICAgICAgICAgICAgcHJlcGFyZUZvclRhaWxD
YWxsU2xvdyhHUFJJbmZvOjpyZWdUMik7CisgICAgICAgIH0pOworICAgICAgICBhZGRTbG93Q2Fz
ZShzbG93UGF0aHMpOworICAgICAgICBhdXRvIGRvbmVMb2NhdGlvbiA9IGxhYmVsKCk7CisgICAg
ICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uZG9uZUxvY2F0aW9u
ID0gZG9uZUxvY2F0aW9uOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbV9jYWxsQ29t
cGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5ob3RQYXRoT3RoZXIgPSBlbWl0TmFrZWRO
ZWFyQ2FsbCgpOworICAgIGF1dG8gc2xvd1BhdGhzID0gaW5mby0+ZW1pdEZhc3RQYXRoKCp0aGlz
LCByZWdUMCwgcmVnVDIsIENhbGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpZZXMpOworICAgIGF1dG8g
ZG9uZUxvY2F0aW9uID0gbGFiZWwoKTsKKyAgICBhZGRTbG93Q2FzZShzbG93UGF0aHMpOworCisg
ICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5kb25lTG9jYXRpb24g
PSBkb25lTG9jYXRpb247CiAKICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9m
ZnNldEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0
ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVu
dCgpOwpAQCAtMjY1LDE2ICsyNzMsMTUgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGxTbG93Q2Fz
ZShjb25zdCBJbgogCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAorICAgIG1fY2FsbENv
bXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uc2xvd1BhdGhTdGFydCA9IGxhYmVsKCk7
CisKICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsIHx8IG9wY29kZUlEID09IG9wX3Rh
aWxfY2FsbF92YXJhcmdzIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3Vt
ZW50cykKICAgICAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwogCiAgICAgbW92ZShUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QzKTsKLSAgICBtb3Zl
KFRydXN0ZWRJbW1QdHIobV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5j
YWxsTGlua0luZm8pLCByZWdUMik7Ci0KLSAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExp
bmtJbmZvSW5kZXhdLmNhbGxSZXR1cm5Mb2NhdGlvbiA9Ci0gICAgICAgIGVtaXROYWtlZE5lYXJD
YWxsKG1fdm0tPmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcikucmV0YWdnZWRDb2Rl
PE5vUHRyVGFnPigpKTsKKyAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5k
ZXhdLmNhbGxMaW5rSW5mby0+ZW1pdFNsb3dQYXRoKCptX3ZtLCAqdGhpcyk7CiAKLSAgICBpZiAo
b3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJh
cmdzKSB7CisgICAgaWYgKG9wY29kZUlEID09IG9wX3RhaWxfY2FsbCB8fCBvcGNvZGVJRCA9PSBv
cF90YWlsX2NhbGxfdmFyYXJncyB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9h
cmd1bWVudHMpIHsKICAgICAgICAgYWJvcnRXaXRoUmVhc29uKEpJVERpZFJldHVybkZyb21UYWls
Q2FsbCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDI3NzQ0MCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEz
ODYsNyArMTM4Niw3IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25MaW5rQ2EK
ICAgICAgICAgICAgIGlmICghY2FsbExpbmtJbmZvLT5zZWVuT25jZSgpKQogICAgICAgICAgICAg
ICAgIGNhbGxMaW5rSW5mby0+c2V0U2VlbigpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgICAgIGxpbmtGb3Iodm0sIGNhbGxlZUZyYW1lLCAqY2FsbExpbmtJbmZvLCBudWxscHRyLCBp
bnRlcm5hbEZ1bmN0aW9uLCBjb2RlUHRyKTsKKyAgICAgICAgICAgICAgICBsaW5rTW9ub21vcnBo
aWNDYWxsKHZtLCBjYWxsZWVGcmFtZSwgKmNhbGxMaW5rSW5mbywgbnVsbHB0ciwgaW50ZXJuYWxG
dW5jdGlvbiwgY29kZVB0cik7CiAKICAgICAgICAgICAgIHZvaWQqIGxpbmtlZFRhcmdldCA9IGNv
ZGVQdHIuZXhlY3V0YWJsZUFkZHJlc3MoKTsKICAgICAgICAgICAgIHJldHVybiBlbmNvZGVSZXN1
bHQobGlua2VkVGFyZ2V0LCByZWludGVycHJldF9jYXN0PHZvaWQqPihjYWxsTGlua0luZm8tPmNh
bGxNb2RlKCkgPT0gQ2FsbE1vZGU6OlRhaWwgPyBSZXVzZVRoZUZyYW1lIDogS2VlcFRoZUZyYW1l
KSk7CkBAIC0xNDM0LDcgKzE0MzQsNyBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0
aW9uTGlua0NhCiAgICAgaWYgKCFjYWxsTGlua0luZm8tPnNlZW5PbmNlKCkpCiAgICAgICAgIGNh
bGxMaW5rSW5mby0+c2V0U2VlbigpOwogICAgIGVsc2UKLSAgICAgICAgbGlua0Zvcih2bSwgY2Fs
bGVlRnJhbWUsICpjYWxsTGlua0luZm8sIGNvZGVCbG9jaywgY2FsbGVlLCBjb2RlUHRyKTsKKyAg
ICAgICAgbGlua01vbm9tb3JwaGljQ2FsbCh2bSwgY2FsbGVlRnJhbWUsICpjYWxsTGlua0luZm8s
IGNvZGVCbG9jaywgY2FsbGVlLCBjb2RlUHRyKTsKIAogICAgIHJldHVybiBlbmNvZGVSZXN1bHQo
Y29kZVB0ci5leGVjdXRhYmxlQWRkcmVzcygpLCByZWludGVycHJldF9jYXN0PHZvaWQqPihjYWxs
TGlua0luZm8tPmNhbGxNb2RlKCkgPT0gQ2FsbE1vZGU6OlRhaWwgPyBSZXVzZVRoZUZyYW1lIDog
S2VlcFRoZUZyYW1lKSk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1BvbHlt
b3JwaGljQ2FsbFN0dWJSb3V0aW5lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L1BvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lLmNwcAkocmV2aXNpb24gMjc3NDQw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Qb2x5bW9ycGhpY0NhbGxTdHViUm91dGlu
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcgKzQ1LDcgQEAgUG9seW1vcnBoaWNDYWxsTm9k
ZTo6flBvbHltb3JwaGljQ2FsbE5vZAogdm9pZCBQb2x5bW9ycGhpY0NhbGxOb2RlOjp1bmxpbmso
Vk0mIHZtKQogewogICAgIGlmIChtX2NhbGxMaW5rSW5mbykgewotICAgICAgICBkYXRhTG9nTG5J
ZihPcHRpb25zOjpkdW1wRGlzYXNzZW1ibHkoKSwgIlVubGlua2luZyBwb2x5bW9ycGhpYyBjYWxs
IGF0ICIsIG1fY2FsbExpbmtJbmZvLT5jYWxsUmV0dXJuTG9jYXRpb24oKSwgIiwgYmMjIiwgbV9j
YWxsTGlua0luZm8tPmNvZGVPcmlnaW4oKS5ieXRlY29kZUluZGV4KCkpOworICAgICAgICBkYXRh
TG9nTG5JZihPcHRpb25zOjpkdW1wRGlzYXNzZW1ibHkoKSwgIlVubGlua2luZyBwb2x5bW9ycGhp
YyBjYWxsIGF0ICIsIG1fY2FsbExpbmtJbmZvLT5kb25lTG9jYXRpb24oKSwgIiwgYmMjIiwgbV9j
YWxsTGlua0luZm8tPmNvZGVPcmlnaW4oKS5ieXRlY29kZUluZGV4KCkpOwogICAgICAgICBtX2Nh
bGxMaW5rSW5mby0+dW5saW5rKHZtKTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvUmVwYXRjaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9SZXBhdGNoLmNwcAkocmV2aXNpb24gMjc3NDQwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9SZXBhdGNoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE4OCwyMCArMTE4OCwyMCBA
QCB2b2lkIHJlcGF0Y2hJbnN0YW5jZU9mKAogICAgICAgICBmdGxUaHVua0F3YXJlUmVwYXRjaENh
bGwoY29kZUJsb2NrLCBzdHViSW5mby5zbG93UGF0aENhbGxMb2NhdGlvbiwgb3BlcmF0aW9uSW5z
dGFuY2VPZkdlbmVyaWMpOwogfQogCi1zdGF0aWMgdm9pZCBsaW5rU2xvd0ZvcihWTSYsIENhbGxM
aW5rSW5mbyYgY2FsbExpbmtJbmZvLCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUU3R1YlJvdXRp
bmVQdHJUYWc+IGNvZGVSZWYpCitzdGF0aWMgdm9pZCBsaW5rU2xvd1BhdGhUbyhWTSYsIENhbGxM
aW5rSW5mbyYgY2FsbExpbmtJbmZvLCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUU3R1YlJvdXRp
bmVQdHJUYWc+IGNvZGVSZWYpCiB7Ci0gICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hOZWFyQ2Fs
bChjYWxsTGlua0luZm8uY2FsbFJldHVybkxvY2F0aW9uKCksIENvZGVMb2NhdGlvbkxhYmVsPEpJ
VFN0dWJSb3V0aW5lUHRyVGFnPihjb2RlUmVmLmNvZGUoKSkpOworICAgIGNhbGxMaW5rSW5mby5z
ZXRTbG93UGF0aENhbGxEZXN0aW5hdGlvbihjb2RlUmVmLmNvZGUoKS50ZW1wbGF0ZSByZXRhZ2dl
ZDxKU0VudHJ5UHRyVGFnPigpKTsKIH0KIAotc3RhdGljIHZvaWQgbGlua1Nsb3dGb3IoVk0mIHZt
LCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbywgVGh1bmtHZW5lcmF0b3IgZ2VuZXJhdG9yKQor
c3RhdGljIHZvaWQgbGlua1Nsb3dQYXRoVG8oVk0mIHZtLCBDYWxsTGlua0luZm8mIGNhbGxMaW5r
SW5mbywgVGh1bmtHZW5lcmF0b3IgZ2VuZXJhdG9yKQogewotICAgIGxpbmtTbG93Rm9yKHZtLCBj
YWxsTGlua0luZm8sIHZtLmdldENUSVN0dWIoZ2VuZXJhdG9yKS5yZXRhZ2dlZDxKSVRTdHViUm91
dGluZVB0clRhZz4oKSk7CisgICAgbGlua1Nsb3dQYXRoVG8odm0sIGNhbGxMaW5rSW5mbywgdm0u
Z2V0Q1RJU3R1YihnZW5lcmF0b3IpLnJldGFnZ2VkPEpJVFN0dWJSb3V0aW5lUHRyVGFnPigpKTsK
IH0KIAogc3RhdGljIHZvaWQgbGlua1Nsb3dGb3IoVk0mIHZtLCBDYWxsTGlua0luZm8mIGNhbGxM
aW5rSW5mbykKIHsKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUU3R1YlJvdXRpbmVQdHJU
YWc+IHZpcnR1YWxUaHVuayA9IHZpcnR1YWxUaHVua0Zvcih2bSwgY2FsbExpbmtJbmZvKTsKLSAg
ICBsaW5rU2xvd0Zvcih2bSwgY2FsbExpbmtJbmZvLCB2aXJ0dWFsVGh1bmspOworICAgIGxpbmtT
bG93UGF0aFRvKHZtLCBjYWxsTGlua0luZm8sIHZpcnR1YWxUaHVuayk7CiAgICAgY2FsbExpbmtJ
bmZvLnNldFNsb3dTdHViKEdDQXdhcmVKSVRTdHViUm91dGluZTo6Y3JlYXRlKHZpcnR1YWxUaHVu
aywgdm0pKTsKIH0KIApAQCAtMTIxNyw3ICsxMjE3LDcgQEAgc3RhdGljIEpTQ2VsbCogd2ViQXNz
ZW1ibHlPd25lcihKU0NlbGwqIAogI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKIH0KIAot
dm9pZCBsaW5rRm9yKAordm9pZCBsaW5rTW9ub21vcnBoaWNDYWxsKAogICAgIFZNJiB2bSwgQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUsIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvLCBDb2RlQmxvY2sq
IGNhbGxlZUNvZGVCbG9jaywKICAgICBKU09iamVjdCogY2FsbGVlLCBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHI8SlNFbnRyeVB0clRhZz4gY29kZVB0cikKIHsKQEAgLTEyMzUsMjYgKzEyMzUsMjQgQEAg
dm9pZCBsaW5rRm9yKAogICAgIEFTU0VSVChvd25lcik7CiAKICAgICBBU1NFUlQoIWNhbGxMaW5r
SW5mby5pc0xpbmtlZCgpKTsKLSAgICBjYWxsTGlua0luZm8uc2V0Q2FsbGVlKHZtLCBvd25lciwg
Y2FsbGVlKTsKLSAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaFBvaW50ZXIoY2FsbExpbmtJbmZv
LmhvdFBhdGhCZWdpbigpLCBjYWxsZWUpOworICAgIGNhbGxMaW5rSW5mby5zZXRNb25vbW9ycGhp
Y0NhbGxlZSh2bSwgb3duZXIsIGNhbGxlZSwgY29kZVB0cik7CiAgICAgY2FsbExpbmtJbmZvLnNl
dExhc3RTZWVuQ2FsbGVlKHZtLCBvd25lciwgY2FsbGVlKTsKKwogICAgIGlmIChzaG91bGREdW1w
RGlzYXNzZW1ibHlGb3IoY2FsbGVyQ29kZUJsb2NrKSkKICAgICAgICAgZGF0YUxvZygiTGlua2lu
ZyBjYWxsIGluICIsIEZ1bGxDb2RlT3JpZ2luKGNhbGxlckNvZGVCbG9jaywgY2FsbExpbmtJbmZv
LmNvZGVPcmlnaW4oKSksICIgdG8gIiwgcG9pbnRlckR1bXAoY2FsbGVlQ29kZUJsb2NrKSwgIiwg
ZW50cnlwb2ludCBhdCAiLCBjb2RlUHRyLCAiXG4iKTsKIAotICAgIE1hY3JvQXNzZW1ibGVyOjpy
ZXBhdGNoTmVhckNhbGwoY2FsbExpbmtJbmZvLmhvdFBhdGhPdGhlcigpLCBDb2RlTG9jYXRpb25M
YWJlbDxKU0VudHJ5UHRyVGFnPihjb2RlUHRyKSk7Ci0KICAgICBpZiAoY2FsbGVlQ29kZUJsb2Nr
KQogICAgICAgICBjYWxsZWVDb2RlQmxvY2stPmxpbmtJbmNvbWluZ0NhbGwoY2FsbGVyRnJhbWUs
ICZjYWxsTGlua0luZm8pOwogCiAgICAgaWYgKGNhbGxMaW5rSW5mby5zcGVjaWFsaXphdGlvbktp
bmQoKSA9PSBDb2RlRm9yQ2FsbCAmJiBjYWxsTGlua0luZm8uYWxsb3dTdHVicygpKSB7Ci0gICAg
ICAgIGxpbmtTbG93Rm9yKHZtLCBjYWxsTGlua0luZm8sIGxpbmtQb2x5bW9ycGhpY0NhbGxUaHVu
a0dlbmVyYXRvcik7CisgICAgICAgIGxpbmtTbG93UGF0aFRvKHZtLCBjYWxsTGlua0luZm8sIGxp
bmtQb2x5bW9ycGhpY0NhbGxUaHVua0dlbmVyYXRvcik7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAgICAgCiAgICAgbGlua1Nsb3dGb3Iodm0sIGNhbGxMaW5rSW5mbyk7CiB9CiAKLXZvaWQgbGlu
a0RpcmVjdEZvcigKK3ZvaWQgbGlua0RpcmVjdENhbGwoCiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJh
bWUsIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvLCBDb2RlQmxvY2sqIGNhbGxlZUNvZGVCbG9j
aywKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gY29kZVB0cikKIHsK
QEAgLTEyNjksOSArMTI2Nyw3IEBAIHZvaWQgbGlua0RpcmVjdEZvcigKICAgICBpZiAoc2hvdWxk
RHVtcERpc2Fzc2VtYmx5Rm9yKGNhbGxlckNvZGVCbG9jaykpCiAgICAgICAgIGRhdGFMb2coIkxp
bmtpbmcgY2FsbCBpbiAiLCBGdWxsQ29kZU9yaWdpbihjYWxsZXJDb2RlQmxvY2ssIGNhbGxMaW5r
SW5mby5jb2RlT3JpZ2luKCkpLCAiIHRvICIsIHBvaW50ZXJEdW1wKGNhbGxlZUNvZGVCbG9jayks
ICIsIGVudHJ5cG9pbnQgYXQgIiwgY29kZVB0ciwgIlxuIik7CiAKLSAgICBpZiAoY2FsbExpbmtJ
bmZvLmNhbGxUeXBlKCkgPT0gQ2FsbExpbmtJbmZvOjpEaXJlY3RUYWlsQ2FsbCkKLSAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hKdW1wVG9Ob3AoY2FsbExpbmtJbmZvLnBhdGNoYWJsZUp1
bXAoKSk7Ci0gICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hOZWFyQ2FsbChjYWxsTGlua0luZm8u
aG90UGF0aE90aGVyKCksIENvZGVMb2NhdGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+KGNvZGVQdHIp
KTsKKyAgICBjYWxsTGlua0luZm8uc2V0RGlyZWN0Q2FsbFRhcmdldChDb2RlTG9jYXRpb25MYWJl
bDxKU0VudHJ5UHRyVGFnPihjb2RlUHRyKSk7CiAKICAgICBpZiAoY2FsbGVlQ29kZUJsb2NrKQog
ICAgICAgICBjYWxsZWVDb2RlQmxvY2stPmxpbmtJbmNvbWluZ0NhbGwoY2FsbEZyYW1lLCAmY2Fs
bExpbmtJbmZvKTsKQEAgLTEyODksMjEgKzEyODUsMTYgQEAgc3RhdGljIHZvaWQgcmV2ZXJ0Q2Fs
bChWTSYgdm0sIENhbGxMaW5rSQogewogICAgIGlmIChjYWxsTGlua0luZm8uaXNEaXJlY3QoKSkg
ewogICAgICAgICBjYWxsTGlua0luZm8uY2xlYXJDb2RlQmxvY2soKTsKLSAgICAgICAgaWYgKCFj
YWxsTGlua0luZm8uY2xlYXJlZEJ5SmV0dGlzb24oKSkgewotICAgICAgICAgICAgaWYgKGNhbGxM
aW5rSW5mby5jYWxsVHlwZSgpID09IENhbGxMaW5rSW5mbzo6RGlyZWN0VGFpbENhbGwpCi0gICAg
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hKdW1wKGNhbGxMaW5rSW5mby5wYXRj
aGFibGVKdW1wKCksIGNhbGxMaW5rSW5mby5zbG93UGF0aFN0YXJ0KCkpOwotICAgICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoTmVhckNhbGwoY2Fs
bExpbmtJbmZvLmhvdFBhdGhPdGhlcigpLCBjYWxsTGlua0luZm8uc2xvd1BhdGhTdGFydCgpKTsK
LSAgICAgICAgfQorICAgICAgICBpZiAoIWNhbGxMaW5rSW5mby5jbGVhcmVkQnlKZXR0aXNvbigp
KQorICAgICAgICAgICAgY2FsbExpbmtJbmZvLmluaXRpYWxpemVEaXJlY3RDYWxsKCk7CiAgICAg
fSBlbHNlIHsKICAgICAgICAgaWYgKCFjYWxsTGlua0luZm8uY2xlYXJlZEJ5SmV0dGlzb24oKSkg
ewotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJldmVydEp1bXBSZXBsYWNlbWVudFRvQnJh
bmNoUHRyV2l0aFBhdGNoKAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpzdGFydE9m
QnJhbmNoUHRyV2l0aFBhdGNoT25SZWdpc3RlcihjYWxsTGlua0luZm8uaG90UGF0aEJlZ2luKCkp
LAotICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby5jYWxsZWVHUFIoKSwgbnVsbHB0cik7Ci0g
ICAgICAgICAgICBsaW5rU2xvd0Zvcih2bSwgY2FsbExpbmtJbmZvLCBjb2RlUmVmKTsKLSAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoUG9pbnRlcihjYWxsTGlua0luZm8uaG90UGF0
aEJlZ2luKCksIG51bGxwdHIpOworICAgICAgICAgICAgbGlua1Nsb3dQYXRoVG8odm0sIGNhbGxM
aW5rSW5mbywgY29kZVJlZik7CisKKyAgICAgICAgICAgIGlmIChjYWxsTGlua0luZm8uc3R1Yigp
KQorICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby5yZXZlcnRDYWxsVG9TdHViKCk7CiAgICAg
ICAgIH0KLSAgICAgICAgY2FsbExpbmtJbmZvLmNsZWFyQ2FsbGVlKCk7CisgICAgICAgIGNhbGxM
aW5rSW5mby5jbGVhckNhbGxlZSgpOyAvLyBUaGlzIGFsc28gY2xlYXJzIHRoZSBpbmxpbmUgY2Fj
aGUgYm90aCBmb3IgZGF0YSBhbmQgY29kZS1iYXNlZCBjYWNoZXMuCiAgICAgfQogICAgIGNhbGxM
aW5rSW5mby5jbGVhclNlZW4oKTsKICAgICBjYWxsTGlua0luZm8uY2xlYXJTdHViKCk7CkBAIC0x
MzEyLDkgKzEzMDMsOSBAQCBzdGF0aWMgdm9pZCByZXZlcnRDYWxsKFZNJiB2bSwgQ2FsbExpbmtJ
CiAgICAgICAgIGNhbGxMaW5rSW5mby5yZW1vdmUoKTsKIH0KIAotdm9pZCB1bmxpbmtGb3IoVk0m
IHZtLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbykKK3ZvaWQgdW5saW5rQ2FsbChWTSYgdm0s
IENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvKQogewotICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6
OmR1bXBEaXNhc3NlbWJseSgpLCAiVW5saW5raW5nIGNhbGwgYXQgIiwgY2FsbExpbmtJbmZvLmhv
dFBhdGhPdGhlcigpKTsKKyAgICBkYXRhTG9nTG5JZihPcHRpb25zOjpkdW1wRGlzYXNzZW1ibHko
KSwgIlVubGlua2luZyBjYWxsIGF0ICIsIGNhbGxMaW5rSW5mby5mYXN0UGF0aFN0YXJ0KCkpOwog
ICAgIAogICAgIHJldmVydENhbGwodm0sIGNhbGxMaW5rSW5mbywgdm0uZ2V0Q1RJU3R1YihsaW5r
Q2FsbFRodW5rR2VuZXJhdG9yKS5yZXRhZ2dlZDxKSVRTdHViUm91dGluZVB0clRhZz4oKSk7CiB9
CkBAIC0xNTgwLDcgKzE1NzEsNyBAQCB2b2lkIGxpbmtQb2x5bW9ycGhpY0NhbGwoSlNHbG9iYWxP
YmplY3QqCiAgICAgfQogICAgIHN0dWJKaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1Q
dHIoZ2xvYmFsT2JqZWN0KSwgR1BSSW5mbzo6cmVnVDMpOwogICAgIHN0dWJKaXQubW92ZShDQ2Fs
bEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoJmNhbGxMaW5rSW5mbyksIEdQUkluZm86OnJlZ1QyKTsK
LSAgICBzdHViSml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGNhbGxMaW5rSW5m
by5jYWxsUmV0dXJuTG9jYXRpb24oKS51bnRhZ2dlZEV4ZWN1dGFibGVBZGRyZXNzKCkpLCBHUFJJ
bmZvOjpyZWdUNCk7CisgICAgc3R1YkppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0
cihjYWxsTGlua0luZm8uZG9uZUxvY2F0aW9uKCkudW50YWdnZWRFeGVjdXRhYmxlQWRkcmVzcygp
KSwgR1BSSW5mbzo6cmVnVDQpOwogICAgIAogICAgIHN0dWJKaXQucmVzdG9yZVJldHVybkFkZHJl
c3NCZWZvcmVSZXR1cm4oR1BSSW5mbzo6cmVnVDQpOwogICAgIEFzc2VtYmx5SGVscGVyczo6SnVt
cCBzbG93ID0gc3R1YkppdC5qdW1wKCk7CkBAIC0xNjAzLDI5ICsxNTk0LDIzIEBAIHZvaWQgbGlu
a1BvbHltb3JwaGljQ2FsbChKU0dsb2JhbE9iamVjdCoKICAgICAgICAgcGF0Y2hCdWZmZXIubGlu
ayhjYWxsVG9Db2RlUHRyLmNhbGwsIEZ1bmN0aW9uUHRyPEpTRW50cnlQdHJUYWc+KGNhbGxUb0Nv
ZGVQdHIuY29kZVB0cikpOwogI2VuZGlmCiAgICAgfQotICAgIGlmIChpc1dlYkFzc2VtYmx5IHx8
IEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChjYWxsZXJDb2RlQmxvY2stPmppdFR5cGUoKSkpCi0g
ICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoZG9uZSwgY2FsbExpbmtJbmZvLmNhbGxSZXR1cm5Mb2Nh
dGlvbigpLmxhYmVsQXRPZmZzZXQoMCkpOwotICAgIGVsc2UKLSAgICAgICAgcGF0Y2hCdWZmZXIu
bGluayhkb25lLCBjYWxsTGlua0luZm8uaG90UGF0aE90aGVyKCkubGFiZWxBdE9mZnNldCgwKSk7
CisgICAgcGF0Y2hCdWZmZXIubGluayhkb25lLCBjYWxsTGlua0luZm8uZG9uZUxvY2F0aW9uKCkp
OwogICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvdywgQ29kZUxvY2F0aW9uTGFiZWw8SklUVGh1bmtQ
dHJUYWc+KHZtLmdldENUSVN0dWIobGlua1BvbHltb3JwaGljQ2FsbFRodW5rR2VuZXJhdG9yKS5j
b2RlKCkpKTsKICAgICAKICAgICBhdXRvIHN0dWJSb3V0aW5lID0gYWRvcHRSZWYoKm5ldyBQb2x5
bW9ycGhpY0NhbGxTdHViUm91dGluZSgKICAgICAgICAgRklOQUxJWkVfQ09ERV9GT1IoCiAgICAg
ICAgICAgICBjYWxsZXJDb2RlQmxvY2ssIHBhdGNoQnVmZmVyLCBKSVRTdHViUm91dGluZVB0clRh
ZywKICAgICAgICAgICAgICJQb2x5bW9ycGhpYyBjYWxsIHN0dWIgZm9yICVzLCByZXR1cm4gcG9p
bnQgJXAsIHRhcmdldHMgJXMiLAotICAgICAgICAgICAgICAgIGlzV2ViQXNzZW1ibHkgPyAiV2Vi
QXNzZW1ibHkiIDogdG9DU3RyaW5nKCpjYWxsZXJDb2RlQmxvY2spLmRhdGEoKSwgY2FsbExpbmtJ
bmZvLmNhbGxSZXR1cm5Mb2NhdGlvbigpLmxhYmVsQXRPZmZzZXQoMCkuZXhlY3V0YWJsZUFkZHJl
c3MoKSwKKyAgICAgICAgICAgICAgICBpc1dlYkFzc2VtYmx5ID8gIldlYkFzc2VtYmx5IiA6IHRv
Q1N0cmluZygqY2FsbGVyQ29kZUJsb2NrKS5kYXRhKCksIGNhbGxMaW5rSW5mby5kb25lTG9jYXRp
b24oKS5leGVjdXRhYmxlQWRkcmVzcygpLAogICAgICAgICAgICAgICAgIHRvQ1N0cmluZyhsaXN0
RHVtcChjYWxsQ2FzZXMpKS5kYXRhKCkpLAogICAgICAgICB2bSwgb3duZXIsIGNhbGxGcmFtZS0+
Y2FsbGVyRnJhbWUoKSwgY2FsbExpbmtJbmZvLCBjYWxsQ2FzZXMsCiAgICAgICAgIFdURk1vdmUo
ZmFzdENvdW50cykpKTsKLSAgICAKLSAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwbGFjZVdpdGhKdW1w
KAotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6c3RhcnRPZkJyYW5jaFB0cldpdGhQYXRjaE9uUmVn
aXN0ZXIoY2FsbExpbmtJbmZvLmhvdFBhdGhCZWdpbigpKSwKLSAgICAgICAgQ29kZUxvY2F0aW9u
TGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+KHN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7
CisKICAgICAvLyBUaGUgb3JpZ2luYWwgc2xvdyBwYXRoIGlzIHVucmVhY2hhYmxlIG9uIDY0LWJp
dHMsIGJ1dCBzdGlsbAogICAgIC8vIHJlYWNoYWJsZSBvbiAzMi1iaXRzIHNpbmNlIGEgbm9uLWNl
bGwgY2FsbGVlIHdpbGwgYWx3YXlzCiAgICAgLy8gdHJpZ2dlciB0aGUgc2xvdyBwYXRoCiAgICAg
bGlua1Nsb3dGb3Iodm0sIGNhbGxMaW5rSW5mbyk7Ci0gICAgCisKICAgICAvLyBJZiB0aGVyZSBo
YWQgYmVlbiBhIHByZXZpb3VzIHN0dWIgcm91dGluZSwgdGhhdCBvbmUgd2lsbCBkaWUgYXMgc29v
biBhcyB0aGUgR0MgcnVucyBhbmQgc2VlcwogICAgIC8vIHRoYXQgaXQncyBubyBsb25nZXIgb24g
c3RhY2suCiAgICAgY2FsbExpbmtJbmZvLnNldFN0dWIoV1RGTW92ZShzdHViUm91dGluZSkpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmgJKHJldmlzaW9uIDI3NzQ0MCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5oCSh3b3JraW5nIGNvcHkpCkBAIC01
NiwxMCArNTYsMTAgQEAgdm9pZCByZXBhdGNoSW5CeUlEKEpTR2xvYmFsT2JqZWN0KiwgQ29kZQog
dm9pZCByZXBhdGNoQ2hlY2tQcml2YXRlQnJhbmQoSlNHbG9iYWxPYmplY3QqLCBDb2RlQmxvY2sq
LCBKU09iamVjdCosIENhY2hlYWJsZUlkZW50aWZpZXIsIFN0cnVjdHVyZVN0dWJJbmZvJik7CiB2
b2lkIHJlcGF0Y2hTZXRQcml2YXRlQnJhbmQoSlNHbG9iYWxPYmplY3QqLCBDb2RlQmxvY2sqLCBK
U09iamVjdCosIFN0cnVjdHVyZSosIENhY2hlYWJsZUlkZW50aWZpZXIsIFN0cnVjdHVyZVN0dWJJ
bmZvJik7CiB2b2lkIHJlcGF0Y2hJbnN0YW5jZU9mKEpTR2xvYmFsT2JqZWN0KiwgQ29kZUJsb2Nr
KiwgSlNWYWx1ZSB2YWx1ZSwgSlNWYWx1ZSBwcm90b3R5cGUsIFN0cnVjdHVyZVN0dWJJbmZvJiwg
Ym9vbCB3YXNGb3VuZCk7Ci12b2lkIGxpbmtGb3IoVk0mLCBDYWxsRnJhbWUqLCBDYWxsTGlua0lu
Zm8mLCBDb2RlQmxvY2sqLCBKU09iamVjdCogY2FsbGVlLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8
SlNFbnRyeVB0clRhZz4pOwotdm9pZCBsaW5rRGlyZWN0Rm9yKENhbGxGcmFtZSosIENhbGxMaW5r
SW5mbyYsIENvZGVCbG9jayosIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPik7
Cit2b2lkIGxpbmtNb25vbW9ycGhpY0NhbGwoVk0mLCBDYWxsRnJhbWUqLCBDYWxsTGlua0luZm8m
LCBDb2RlQmxvY2sqLCBKU09iamVjdCogY2FsbGVlLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNF
bnRyeVB0clRhZz4pOwordm9pZCBsaW5rRGlyZWN0Q2FsbChDYWxsRnJhbWUqLCBDYWxsTGlua0lu
Zm8mLCBDb2RlQmxvY2sqLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4pOwog
dm9pZCBsaW5rU2xvd0ZvcihDYWxsRnJhbWUqLCBDYWxsTGlua0luZm8mKTsKLXZvaWQgdW5saW5r
Rm9yKFZNJiwgQ2FsbExpbmtJbmZvJik7Cit2b2lkIHVubGlua0NhbGwoVk0mLCBDYWxsTGlua0lu
Zm8mKTsKIHZvaWQgbGlua1BvbHltb3JwaGljQ2FsbChKU0dsb2JhbE9iamVjdCosIENhbGxGcmFt
ZSosIENhbGxMaW5rSW5mbyYsIENhbGxWYXJpYW50KTsKIHZvaWQgcmVzZXRHZXRCeShDb2RlQmxv
Y2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIEdldEJ5S2luZCk7CiB2b2lkIHJlc2V0UHV0QnlJRChD
b2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvV2FzbVRvSlMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL1dhc21Ub0pTLmNwcAkocmV2aXNpb24gMjc3NDQwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvV2FzbVRvSlMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjEs
MTkgKzI2MSwxOCBAQCBFeHBlY3RlZDxNYWNyb0Fzc2VtYmxlckNvZGVSZWY8V2FzbUVudHJ5CiAK
ICAgICBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbyA9IGNhbGxMaW5rSW5mb3MuYWRkKENvZGVP
cmlnaW4oKSk7CiAgICAgY2FsbExpbmtJbmZvLT5zZXRVcENhbGwoQ2FsbExpbmtJbmZvOjpDYWxs
LCBpbXBvcnRKU0NlbGxHUFJSZWcpOwotICAgIEpJVDo6RGF0YUxhYmVsUHRyIHRhcmdldFRvQ2hl
Y2s7Ci0gICAgSklUOjpUcnVzdGVkSW1tUHRyIGluaXRpYWxSaWdodFZhbHVlKG51bGxwdHIpOwot
ICAgIEpJVDo6SnVtcCBzbG93UGF0aCA9IGppdC5icmFuY2hQdHJXaXRoUGF0Y2goTWFjcm9Bc3Nl
bWJsZXI6Ok5vdEVxdWFsLCBpbXBvcnRKU0NlbGxHUFJSZWcsIHRhcmdldFRvQ2hlY2ssIGluaXRp
YWxSaWdodFZhbHVlKTsKLSAgICBKSVQ6OkNhbGwgZmFzdENhbGwgPSBqaXQubmVhckNhbGwoKTsK
KyAgICBhdXRvIHNsb3dQYXRoID0gY2FsbExpbmtJbmZvLT5lbWl0RmFzdFBhdGgoaml0LCBpbXBv
cnRKU0NlbGxHUFJSZWcsIEludmFsaWRHUFJSZWcsIENhbGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpO
byk7CisKICAgICBKSVQ6Okp1bXAgZG9uZSA9IGppdC5qdW1wKCk7CiAgICAgc2xvd1BhdGgubGlu
aygmaml0KTsKKyAgICBhdXRvIHNsb3dQYXRoU3RhcnQgPSBqaXQubGFiZWwoKTsKICAgICAvLyBD
YWxsZWUgbmVlZHMgdG8gYmUgaW4gcmVnVDAgaGVyZS4KLSAgICBqaXQubW92ZShNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbVB0cihjYWxsTGlua0luZm8pLCBHUFJJbmZvOjpyZWdUMik7IC8vIExp
bmsgaW5mbyBuZWVkcyB0byBiZSBpbiByZWdUMi4KICAgICBqaXQubG9hZFdhc21Db250ZXh0SW5z
dGFuY2UoR1BSSW5mbzo6cmVnVDMpOwogICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRk
cmVzcyhHUFJJbmZvOjpyZWdUMywgSW5zdGFuY2U6Om9mZnNldE9mT3duZXIoKSksIEdQUkluZm86
OnJlZ1QzKTsKICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6
cmVnVDMsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIEdQ
UkluZm86OnJlZ1QzKTsKLSAgICBKSVQ6OkNhbGwgc2xvd0NhbGwgPSBqaXQubmVhckNhbGwoKTsK
KyAgICBjYWxsTGlua0luZm8tPmVtaXRTbG93UGF0aCh2bSwgaml0KTsKICAgICBkb25lLmxpbmso
JmppdCk7CisgICAgYXV0byBkb25lTG9jYXRpb24gPSBqaXQubGFiZWwoKTsKIAogICAgIGlmIChz
aWduYXR1cmUucmV0dXJuQ291bnQoKSA9PSAxKSB7CiAgICAgICAgIHN3aXRjaCAoc2lnbmF0dXJl
LnJldHVyblR5cGUoMCkua2luZCkgewpAQCAtNDIxLDExICs0MjAsOSBAQCBFeHBlY3RlZDxNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8V2FzbUVudHJ5CiAgICAgaWYgKFVOTElLRUxZKHBhdGNoQnVmZmVy
LmRpZEZhaWxUb0FsbG9jYXRlKCkpKQogICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoQmlu
ZGluZ0ZhaWx1cmU6Ok91dE9mTWVtb3J5KTsKIAotICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvd0Nh
bGwsIEZ1bmN0aW9uUHRyPEpJVFRodW5rUHRyVGFnPih2bS5nZXRDVElTdHViKGxpbmtDYWxsVGh1
bmtHZW5lcmF0b3IpLmNvZGUoKSkpOwotICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQ
dHJUYWc+IGNhbGxSZXR1cm5Mb2NhdGlvbihwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8
SlNJbnRlcm5hbFB0clRhZz4oc2xvd0NhbGwpKTsKLSAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0lu
dGVybmFsUHRyVGFnPiBob3RQYXRoQmVnaW4ocGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU0ludGVy
bmFsUHRyVGFnPih0YXJnZXRUb0NoZWNrKSk7Ci0gICAgQ29kZUxvY2F0aW9uTmVhckNhbGw8SlNJ
bnRlcm5hbFB0clRhZz4gaG90UGF0aE90aGVyID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZk5lYXJD
YWxsPEpTSW50ZXJuYWxQdHJUYWc+KGZhc3RDYWxsKTsKLSAgICBjYWxsTGlua0luZm8tPnNldENh
bGxMb2NhdGlvbnMoY2FsbFJldHVybkxvY2F0aW9uLCBob3RQYXRoQmVnaW4sIGhvdFBhdGhPdGhl
cik7CisgICAgY2FsbExpbmtJbmZvLT5zZXRDb2RlTG9jYXRpb25zKAorICAgICAgICBwYXRjaEJ1
ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KHNsb3dQYXRoU3RhcnQpLAorICAgICAg
ICBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KGRvbmVMb2NhdGlvbikp
OwogCiAgICAgcmV0dXJuIEZJTkFMSVpFX1dBU01fQ09ERShwYXRjaEJ1ZmZlciwgV2FzbUVudHJ5
UHRyVGFnLCAiV2ViQXNzZW1ibHktPkphdmFTY3JpcHQgaW1wb3J0WyVpXSAlcyIsIGltcG9ydElu
ZGV4LCBzaWduYXR1cmUudG9TdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSk7CiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>428638</attachid>
            <date>2021-05-14 10:42:26 -0700</date>
            <delta_ts>2021-05-17 13:34:34 -0700</delta_ts>
            <desc>patch</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>90599</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjc3NDUzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyNSBA
QAorMjAyMS0wNS0xMyAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KKworICAgICAg
ICBBZGQgRGF0YSBDYWxsIElDcyB0aGF0IGRvbid0IHJlcGF0Y2ggYW5kIHVzZSB0aGVtIGluIHRo
ZSBiYXNlbGluZSBKSVQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIyNTMyMQorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNzc3NzM3OTY+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBhZGRz
IERhdGEgSUNzIGZvciBjYWxscy4gRGF0YSBJQ3MgZm9yIGNhbGxzIHdvcmsgYnkgbG9hZGluZyBh
IGNvZGUgCisgICAgICAgIHBvaW50ZXIgZnJvbSBDYWxsTGlua0luZm8sIGFuZCBpbmRyZWN0IGNh
bGxpbmcgdGhhdCBwb2ludGVyLiBUaGlzIG1lYW5zIHRoYXQKKyAgICAgICAgdG8gcmVwYXRjaCBz
dWNoIGFuIElDLCBhbGwgd2UgbmVlZCB0byBkbyBpcyByZXBsYWNlIGEgY29kZSBwb2ludGVyIGlu
c2lkZQorICAgICAgICBDYWxsTGlua0luZm8uIE5vIG5lZWQgdG8gcmVwYXRjaCB0aGUgSklUIGNv
ZGUuCisgICAgICAgIAorICAgICAgICBUaGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBvbmx5IGRv
ZXMgdGhpcyBmb3IgbW9ub21vcnBoaWMgY2FsbHMuIFdlIHN0aWxsCisgICAgICAgIHJlcGF0Y2gg
dGhlIEpJVCBjb2RlIGZvciBwb2x5bW9ycGhpYyBjYWxscy4gSW4gYSBmb2xsb3d1cCwgd2Ugd2ls
bCBhbHNvCisgICAgICAgIG9wdCBwb2x5bW9ycGhpYyBjYWxsIElDcyBpbnRvIGRhdGEtYmFzZWQg
Y2FsbHM6CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
MjU3OTMKKyAgICAgICAgCisgICAgICAgIFRoaXMgcGF0Y2ggb25seSB1c2VzIERhdGEgQ2FsbCBJ
Q3MgZm9yIHRoZSBCYXNlbGluZSBKSVQuIEV2ZW4gd2l0aCB0aGF0LCBpdAorICAgICAgICByZWR1
Y2VzIHRoZSBudW1iZXIgb2YgY2FsbHMgdG8gY2FjaGVGbHVzaCBieSB+NDUlIG9uIEpldFN0cmVh
bTIuCisgICAgICAgIAorICAgICAgICBQZXJmb3JtYW5jZSBpcyBuZXV0cmFsIG9uIEFTIE1hY3Ms
IGJ1dCBpdCBwYXZlcyB0aGUgd2F5IHRvd2FyZHMgZG9pbmcKKyAgICAgICAgdW5saW5rZWQgSklU
dGluZyBpbiBKU0MuCisKKyAgICAgICAgKiBhc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxl
ci5oOgorICAgICAgICAoSlNDOjpBYnN0cmFjdE1hY3JvQXNzZW1ibGVyOjphZGRMYXRlTGlua1Rh
c2spOgorICAgICAgICAqIGFzc2VtYmxlci9MaW5rQnVmZmVyLmNwcDoKKyAgICAgICAgKEpTQzo6
TGlua0J1ZmZlcjo6bGlua0NvZGUpOgorICAgICAgICAoSlNDOjpMaW5rQnVmZmVyOjpwZXJmb3Jt
RmluYWxpemF0aW9uKToKKyAgICAgICAgKiBhc3NlbWJsZXIvTGlua0J1ZmZlci5oOgorICAgICAg
ICAqIGJ5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpn
ZW5lcmF0ZUltcGwpOgorICAgICAgICAqIGJ5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHA6CisgICAg
ICAgIChKU0M6OkNhbGxMaW5rSW5mbzo6Q2FsbExpbmtJbmZvKToKKyAgICAgICAgKEpTQzo6Q2Fs
bExpbmtJbmZvOjp1bmxpbmspOgorICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86OmZhc3RQYXRo
U3RhcnQpOgorICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86OnNsb3dQYXRoU3RhcnQpOgorICAg
ICAgICAoSlNDOjpDYWxsTGlua0luZm86OmRvbmVMb2NhdGlvbik6CisgICAgICAgIChKU0M6OkNh
bGxMaW5rSW5mbzo6c2V0TW9ub21vcnBoaWNDYWxsZWUpOgorICAgICAgICAoSlNDOjpDYWxsTGlu
a0luZm86OmNsZWFyQ2FsbGVlKToKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtJbmZvOjplbWl0Rmly
c3RJbnN0cnVjdGlvbkZvckRhdGFJQyk6CisgICAgICAgIChKU0M6OkNhbGxMaW5rSW5mbzo6ZW1p
dEZhc3RQYXRoSW1wbCk6CisgICAgICAgIChKU0M6OkNhbGxMaW5rSW5mbzo6ZW1pdEZhc3RQYXRo
KToKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtJbmZvOjplbWl0VGFpbENhbGxGYXN0UGF0aCk6Cisg
ICAgICAgIChKU0M6OkNhbGxMaW5rSW5mbzo6ZW1pdFNsb3dQYXRoKToKKyAgICAgICAgKEpTQzo6
Q2FsbExpbmtJbmZvOjplbWl0RGlyZWN0RmFzdFBhdGgpOgorICAgICAgICAoSlNDOjpDYWxsTGlu
a0luZm86OmVtaXREaXJlY3RUYWlsQ2FsbEZhc3RQYXRoKToKKyAgICAgICAgKEpTQzo6Q2FsbExp
bmtJbmZvOjppbml0aWFsaXplRGlyZWN0Q2FsbCk6CisgICAgICAgIChKU0M6OkNhbGxMaW5rSW5m
bzo6c2V0RGlyZWN0Q2FsbFRhcmdldCk6CisgICAgICAgIChKU0M6OkNhbGxMaW5rSW5mbzo6c2V0
U2xvd1BhdGhDYWxsRGVzdGluYXRpb24pOgorICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86OnJl
dmVydENhbGxUb1N0dWIpOgorICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86OnNldFN0dWIpOgor
ICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86OmNhbGxSZXR1cm5Mb2NhdGlvbik6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6OkNhbGxMaW5rSW5mbzo6cGF0Y2hhYmxlSnVtcCk6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OkNhbGxMaW5rSW5mbzo6aG90UGF0aEJlZ2luKTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6Q2FsbExpbmtJbmZvOjpzZXRDYWxsZWUpOiBEZWxldGVkLgorICAgICAgICAqIGJ5
dGVjb2RlL0NhbGxMaW5rSW5mby5oOgorICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86OmNhbGxl
ZUdQUiBjb25zdCk6CisgICAgICAgIChKU0M6OkNhbGxMaW5rSW5mbzo6aXNEYXRhSUMgY29uc3Qp
OgorICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86OnNldFVzZXNEYXRhSUNzKToKKyAgICAgICAg
KEpTQzo6Q2FsbExpbmtJbmZvOjpzZXRDb2RlTG9jYXRpb25zKToKKyAgICAgICAgKEpTQzo6Q2Fs
bExpbmtJbmZvOjpvZmZzZXRPZkNhbGxlZSk6CisgICAgICAgIChKU0M6OkNhbGxMaW5rSW5mbzo6
b2Zmc2V0T2ZNb25vbW9ycGhpY0NhbGxEZXN0aW5hdGlvbik6CisgICAgICAgIChKU0M6OkNhbGxM
aW5rSW5mbzo6b2Zmc2V0T2ZTbG93UGF0aENhbGxEZXN0aW5hdGlvbik6CisgICAgICAgIChKU0M6
OkNhbGxMaW5rSW5mbzo6c2V0Q2FsbExvY2F0aW9ucyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OkNhbGxMaW5rSW5mbzo6aG90UGF0aE90aGVyKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q2Fs
bExpbmtJbmZvOjpzZXRTdHViKTogRGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHSklUQ29tcGls
ZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpsaW5rKToKKyAgICAgICAg
KiBkZmcvREZHSklUQ29tcGlsZXIuaDoKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6
YWRkSlNDYWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6YWRkSlNEaXJlY3RD
YWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6SlNDYWxsUmVjb3JkOjpKU0Nh
bGxSZWNvcmQpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpKU0RpcmVjdENhbGxS
ZWNvcmQ6OkpTRGlyZWN0Q2FsbFJlY29yZCk6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGls
ZXI6OmFkZEpTRGlyZWN0VGFpbENhbGwpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OkpJ
VENvbXBpbGVyOjpKU0RpcmVjdFRhaWxDYWxsUmVjb3JkOjpKU0RpcmVjdFRhaWxDYWxsUmVjb3Jk
KTogRGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpjYWxsZXJSZXR1cm5QQyk6CisgICAgICAgICogZGZnL0RGR09w
ZXJhdGlvbnMuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkpTQ19ERUZJTkVfSklUX09QRVJBVElP
Tik6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwOgorICAgICAgICAo
SlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbCk6CisgICAgICAgICogZGZnL0RGR1Nw
ZWN1bGF0aXZlSklUNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpl
bWl0Q2FsbCk6CisgICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9CMy5jcHA6CisgICAgICAgIChK
U0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVDYWxsT3JDb25zdHJ1Y3QpOgorICAg
ICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlRGlyZWN0Q2FsbE9yQ29u
c3RydWN0KToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZVRh
aWxDYWxsKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZUNh
bGxPckNvbnN0cnVjdFZhcmFyZ3NTcHJlYWQpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93
ZXJERkdUb0IzOjpjb21waWxlQ2FsbE9yQ29uc3RydWN0VmFyYXJncyk6CisgICAgICAgICogaml0
L0NDYWxsSGVscGVycy5jcHA6CisgICAgICAgIChKU0M6OkNDYWxsSGVscGVyczo6ZW1pdEpJVENv
ZGVPdmVyKToKKyAgICAgICAgKiBqaXQvQ0NhbGxIZWxwZXJzLmg6CisgICAgICAgICogaml0L0pJ
VC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6bGluayk6CisgICAgICAgICogaml0L0pJVC5oOgor
ICAgICAgICAqIGppdC9KSVRDYWxsLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlVGFp
bENhbGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVPcENhbGwpOgorICAgICAgICAoSlND
OjpKSVQ6OmNvbXBpbGVPcENhbGxTbG93Q2FzZSk6CisgICAgICAgICogaml0L0pJVENhbGwzMl82
NC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZU9wQ2FsbCk6CisgICAgICAgIChKU0M6
OkpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKToKKyAgICAgICAgKiBqaXQvSklUT3BlcmF0aW9u
cy5jcHA6CisgICAgICAgIChKU0M6OkpTQ19ERUZJTkVfSklUX09QRVJBVElPTik6CisgICAgICAg
ICogaml0L1BvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lLmNwcDoKKyAgICAgICAgKEpTQzo6UG9s
eW1vcnBoaWNDYWxsTm9kZTo6dW5saW5rKToKKyAgICAgICAgKiBqaXQvUmVwYXRjaC5jcHA6Cisg
ICAgICAgIChKU0M6OmxpbmtTbG93UGF0aFRvKToKKyAgICAgICAgKEpTQzo6bGlua1Nsb3dGb3Ip
OgorICAgICAgICAoSlNDOjpsaW5rTW9ub21vcnBoaWNDYWxsKToKKyAgICAgICAgKEpTQzo6bGlu
a0RpcmVjdENhbGwpOgorICAgICAgICAoSlNDOjpyZXZlcnRDYWxsKToKKyAgICAgICAgKEpTQzo6
dW5saW5rQ2FsbCk6CisgICAgICAgIChKU0M6OmxpbmtQb2x5bW9ycGhpY0NhbGwpOgorICAgICAg
ICAoSlNDOjpsaW5rRm9yKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6bGlua0RpcmVjdEZvcik6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OnVubGlua0Zvcik6IERlbGV0ZWQuCisgICAgICAgICog
aml0L1JlcGF0Y2guaDoKKyAgICAgICAgKiB3YXNtL2pzL1dhc21Ub0pTLmNwcDoKKyAgICAgICAg
KEpTQzo6V2FzbTo6d2FzbVRvSlMpOgorCiAyMDIxLTA1LTEzICBDaHJpcyBEdW1leiAgPGNkdW1l
ekBhcHBsZS5jb20+CiAKICAgICAgICAgUmVuYW1lIEZpbGVTeXN0ZW06OmRpcmVjdG9yeU5hbWUo
KSB0byBGaWxlU3lzdGVtOjpwYXJlbnRQYXRoKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oCShyZXZp
c2lvbiAyNzc0NDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0
TWFjcm9Bc3NlbWJsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtOTcxLDYgKzk3MSwxMiBAQCBwdWJs
aWM6CiAgICAgICAgIG1fbGlua1Rhc2tzLmFwcGVuZChjcmVhdGVTaGFyZWRUYXNrPHZvaWQoTGlu
a0J1ZmZlciYpPihmdW5jdG9yKSk7CiAgICAgfQogCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVu
Y3Rvcj4KKyAgICB2b2lkIGFkZExhdGVMaW5rVGFzayhjb25zdCBGdW5jdG9yJiBmdW5jdG9yKSAv
LyBSdW4gYWZ0ZXIgYWxsIGxpbmsgdGFza3MKKyAgICB7CisgICAgICAgIG1fbGF0ZUxpbmtUYXNr
cy5hcHBlbmQoY3JlYXRlU2hhcmVkVGFzazx2b2lkKExpbmtCdWZmZXImKT4oZnVuY3RvcikpOwor
ICAgIH0KKwogI2lmIENPTVBJTEVSKEdDQykKICAgICAvLyBXb3JrYXJvdW5kIGZvciBHQ0MgZGVt
YW5kaW5nIHRoYXQgbWVtY3B5ICJtdXN0IGJlIHRoZSBuYW1lIG9mIGEgZnVuY3Rpb24gd2l0aCBl
eHRlcm5hbCBsaW5rYWdlIi4KICAgICBzdGF0aWMgdm9pZCogbWVtY3B5KHZvaWQqIGRzdCwgY29u
c3Qgdm9pZCogc3JjLCBzaXplX3Qgc2l6ZSkKQEAgLTExMTQsNiArMTEyMCw3IEBAIHByb3RlY3Rl
ZDoKICAgICBib29sIG1fYWxsb3dTY3JhdGNoUmVnaXN0ZXIgeyB0cnVlIH07CiAKICAgICBWZWN0
b3I8UmVmUHRyPFNoYXJlZFRhc2s8dm9pZChMaW5rQnVmZmVyJik+Pj4gbV9saW5rVGFza3M7Cisg
ICAgVmVjdG9yPFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoTGlua0J1ZmZlciYpPj4+IG1fbGF0ZUxp
bmtUYXNrczsKIAogICAgIGZyaWVuZCBjbGFzcyBMaW5rQnVmZmVyOwogfTsgLy8gY2xhc3MgQWJz
dHJhY3RNYWNyb0Fzc2VtYmxlcgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci9MaW5rQnVmZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNz
ZW1ibGVyL0xpbmtCdWZmZXIuY3BwCShyZXZpc2lvbiAyNzc0NDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Mzks
NiArNDM5LDcgQEAgdm9pZCBMaW5rQnVmZmVyOjpsaW5rQ29kZShNYWNyb0Fzc2VtYmxlcgogI2Vu
ZGlmIC8vICFFTkFCTEUoQlJBTkNIX0NPTVBBQ1RJT04pCiAKICAgICBtX2xpbmtUYXNrcyA9IFdU
Rk1vdmUobWFjcm9Bc3NlbWJsZXIubV9saW5rVGFza3MpOworICAgIG1fbGF0ZUxpbmtUYXNrcyA9
IFdURk1vdmUobWFjcm9Bc3NlbWJsZXIubV9sYXRlTGlua1Rhc2tzKTsKIH0KIAogdm9pZCBMaW5r
QnVmZmVyOjphbGxvY2F0ZShNYWNyb0Fzc2VtYmxlciYgbWFjcm9Bc3NlbWJsZXIsIEpJVENvbXBp
bGF0aW9uRWZmb3J0IGVmZm9ydCkKQEAgLTQ3MSw2ICs0NzIsOCBAQCB2b2lkIExpbmtCdWZmZXI6
OnBlcmZvcm1GaW5hbGl6YXRpb24oKQogewogICAgIGZvciAoYXV0byYgdGFzayA6IG1fbGlua1Rh
c2tzKQogICAgICAgICB0YXNrLT5ydW4oKnRoaXMpOworICAgIGZvciAoYXV0byYgdGFzayA6IG1f
bGF0ZUxpbmtUYXNrcykKKyAgICAgICAgdGFzay0+cnVuKCp0aGlzKTsKIAogI2lmbmRlZiBOREVC
VUcKICAgICBBU1NFUlQobV9pc0p1bXBJc2xhbmQgfHwgIWlzQ29tcGlsYXRpb25UaHJlYWQoKSk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuaAko
cmV2aXNpb24gMjc3NDQwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5r
QnVmZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwMyw2ICs0MDMsNyBAQCBwcml2YXRlOgogICAg
IFByb2ZpbGUgbV9wcm9maWxlIHsgUHJvZmlsZTo6VW5jYXRlZ29yaXplZCB9OwogICAgIE1hY3Jv
QXNzZW1ibGVyQ29kZVB0cjxMaW5rQnVmZmVyUHRyVGFnPiBtX2NvZGU7CiAgICAgVmVjdG9yPFJl
ZlB0cjxTaGFyZWRUYXNrPHZvaWQoTGlua0J1ZmZlciYpPj4+IG1fbGlua1Rhc2tzOworICAgIFZl
Y3RvcjxSZWZQdHI8U2hhcmVkVGFzazx2b2lkKExpbmtCdWZmZXImKT4+PiBtX2xhdGVMaW5rVGFz
a3M7CiAKICAgICBzdGF0aWMgc2l6ZV90IHNfcHJvZmlsZUN1bW11bGF0aXZlTGlua2VkU2l6ZXNb
bnVtYmVyT2ZQcm9maWxlc107CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0FjY2Vzc0Nhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9BY2Nlc3NDYXNlLmNwcAkocmV2aXNpb24gMjc3NDQwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTgw
LDExICsxNTgwLDYgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZUltcGwoQWNjZXNzR2VuZQog
ICAgICAgICAvLyBTdHVmZiBmb3IgY3VzdG9tIGdldHRlcnMvc2V0dGVycy4KICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpDYWxsIG9wZXJhdGlvbkNhbGw7CiAKLSAgICAgICAgLy8gU3R1ZmYgZm9yIEpT
IGdldHRlcnMvc2V0dGVycy4KLSAgICAgICAgQ0NhbGxIZWxwZXJzOjpEYXRhTGFiZWxQdHIgYWRk
cmVzc09mTGlua0Z1bmN0aW9uQ2hlY2s7Ci0gICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBmYXN0
UGF0aENhbGw7Ci0gICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBzbG93UGF0aENhbGw7Ci0KICAg
ICAgICAgLy8gVGhpcyBhbHNvIGRvZXMgdGhlIG5lY2Vzc2FyeSBjYWxjdWxhdGlvbnMgb2Ygd2hl
dGhlciBvciBub3Qgd2UncmUgYW4KICAgICAgICAgLy8gZXhjZXB0aW9uIGhhbmRsaW5nIGNhbGwg
c2l0ZS4KICAgICAgICAgQWNjZXNzR2VuZXJhdGlvblN0YXRlOjpTcGlsbFN0YXRlIHNwaWxsU3Rh
dGUgPSBzdGF0ZS5wcmVzZXJ2ZUxpdmVSZWdpc3RlcnNUb1N0YWNrRm9yQ2FsbCgpOwpAQCAtMTcw
MSwyNCArMTY5NiwyMiBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlSW1wbChBY2Nlc3NHZW5l
CiAgICAgICAgICAgICAgICAgICAgICAgICB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1
ZGluZ1RoaXMoMSkub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSk7CiAgICAgICAgICAgICB9
CiAKLSAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBzbG93Q2FzZSA9IGppdC5icmFuY2hQ
dHJXaXRoUGF0Y2goCi0gICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwgbG9h
ZGVkVmFsdWVHUFIsIGFkZHJlc3NPZkxpbmtGdW5jdGlvbkNoZWNrLAotICAgICAgICAgICAgICAg
IENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihudWxscHRyKSk7CisgICAgICAgICAgICBhdXRv
IHNsb3dDYXNlID0gYWNjZXNzLmNhbGxMaW5rSW5mbygpLT5lbWl0RmFzdFBhdGgoaml0LCBsb2Fk
ZWRWYWx1ZUdQUiwgbG9hZGVkVmFsdWVHUFIgPT0gR1BSSW5mbzo6cmVnVDIgPyBHUFJJbmZvOjpy
ZWdUMCA6IEdQUkluZm86OnJlZ1QyLCBKSVRDb2RlOjppc09wdGltaXppbmdKSVQoY29kZUJsb2Nr
LT5qaXRUeXBlKCkpID8gQ2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6Ok5vIDogQ2FsbExpbmtJbmZv
OjpVc2VEYXRhSUM6Olllcyk7CisgICAgICAgICAgICBhdXRvIGRvbmVMb2NhdGlvbiA9IGppdC5s
YWJlbCgpOwogCi0gICAgICAgICAgICBmYXN0UGF0aENhbGwgPSBqaXQubmVhckNhbGwoKTsKICAg
ICAgICAgICAgIGlmIChtX3R5cGUgPT0gR2V0dGVyKQogICAgICAgICAgICAgICAgIGppdC5zZXR1
cFJlc3VsdHModmFsdWVSZWdzKTsKICAgICAgICAgICAgIGRvbmUuYXBwZW5kKGppdC5qdW1wKCkp
OwogCiAgICAgICAgICAgICBzbG93Q2FzZS5saW5rKCZqaXQpOworICAgICAgICAgICAgYXV0byBz
bG93UGF0aFN0YXJ0ID0gaml0LmxhYmVsKCk7CiAgICAgICAgICAgICBqaXQubW92ZShsb2FkZWRW
YWx1ZUdQUiwgR1BSSW5mbzo6cmVnVDApOwogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCiAgICAgICAg
ICAgICAvLyBXZSAqYWx3YXlzKiBrbm93IHRoYXQgdGhlIGdldHRlci9zZXR0ZXIsIGlmIG5vbi1u
dWxsLCBpcyBhIGNlbGwuCiAgICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwgR1BSSW5mbzo6cmVnVDEpOwogI2VuZGlmCi0gICAg
ICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoYWNjZXNzLmNhbGxM
aW5rSW5mbygpKSwgR1BSSW5mbzo6cmVnVDIpOwogICAgICAgICAgICAgaml0Lm1vdmUoQ0NhbGxI
ZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGdsb2JhbE9iamVjdCksIEdQUkluZm86OnJlZ1QzKTsKLSAg
ICAgICAgICAgIHNsb3dQYXRoQ2FsbCA9IGppdC5uZWFyQ2FsbCgpOworICAgICAgICAgICAgYWNj
ZXNzLmNhbGxMaW5rSW5mbygpLT5lbWl0U2xvd1BhdGgodm0sIGppdCk7CiAgICAgICAgICAgICBp
ZiAobV90eXBlID09IEdldHRlcikKICAgICAgICAgICAgICAgICBqaXQuc2V0dXBSZXN1bHRzKHZh
bHVlUmVncyk7CiAgICAgICAgICAgICBkb25lLmFwcGVuZChqaXQuanVtcCgpKTsKQEAgLTE3MzUs
MTUgKzE3MjgsMTAgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZUltcGwoQWNjZXNzR2VuZQog
ICAgICAgICAgICAgYm9vbCBjYWxsSGFzUmV0dXJuVmFsdWUgPSBpc0dldHRlcigpOwogICAgICAg
ICAgICAgcmVzdG9yZUxpdmVSZWdpc3RlcnNGcm9tU3RhY2tGb3JDYWxsKHNwaWxsU3RhdGUsIGNh
bGxIYXNSZXR1cm5WYWx1ZSk7CiAKLSAgICAgICAgICAgIGppdC5hZGRMaW5rVGFzayhbPSwgJnZt
XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICAgICAgICAgIHRoaXMtPmFzPEdl
dHRlclNldHRlckFjY2Vzc0Nhc2U+KCkuY2FsbExpbmtJbmZvKCktPnNldENhbGxMb2NhdGlvbnMo
Ci0gICAgICAgICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+
KGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPEpTSW50ZXJuYWxQdHJUYWc+KHNsb3dQYXRo
Q2FsbCkpLAotICAgICAgICAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFs
UHRyVGFnPihsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oYWRkcmVzc09m
TGlua0Z1bmN0aW9uQ2hlY2spKSwKLSAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5sb2Nh
dGlvbk9mTmVhckNhbGw8SlNJbnRlcm5hbFB0clRhZz4oZmFzdFBhdGhDYWxsKSk7Ci0KLSAgICAg
ICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoCi0gICAgICAgICAgICAgICAgICAgIHNsb3dQYXRo
Q2FsbCwKLSAgICAgICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SklUVGh1bmtQdHJU
YWc+KHZtLmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcikuY29kZSgpKSk7CisgICAg
ICAgICAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Cisg
ICAgICAgICAgICAgICAgdGhpcy0+YXM8R2V0dGVyU2V0dGVyQWNjZXNzQ2FzZT4oKS5jYWxsTGlu
a0luZm8oKS0+c2V0Q29kZUxvY2F0aW9ucygKKyAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZl
ci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KHNsb3dQYXRoU3RhcnQpLAorICAgICAgICAg
ICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oZG9uZUxv
Y2F0aW9uKSk7CiAgICAgICAgICAgICB9KTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAg
IEFTU0VSVChtX3R5cGUgPT0gQ3VzdG9tVmFsdWVHZXR0ZXIgfHwgbV90eXBlID09IEN1c3RvbUFj
Y2Vzc29yR2V0dGVyIHx8IG1fdHlwZSA9PSBDdXN0b21WYWx1ZVNldHRlciB8fCBtX3R5cGUgPT0g
Q3VzdG9tQWNjZXNzb3JTZXR0ZXIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NhbGxMaW5rSW5mby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAJKHJldmlzaW9uIDI3NzQ0MCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNiwxMSArMjYsMTUgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJDYWxsTGlu
a0luZm8uaCIKIAorI2luY2x1ZGUgIkNDYWxsSGVscGVycy5oIgogI2luY2x1ZGUgIkNhbGxGcmFt
ZVNodWZmbGVEYXRhLmgiCisjaW5jbHVkZSAiRGlzYWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVz
YWdlLmgiCiAjaW5jbHVkZSAiRnVuY3Rpb25Db2RlQmxvY2suaCIKICNpbmNsdWRlICJKU0NlbGxJ
bmxpbmVzLmgiCisjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgogI2luY2x1ZGUgIk9wY29kZS5oIgog
I2luY2x1ZGUgIlJlcGF0Y2guaCIKKyNpbmNsdWRlICJUaHVua0dlbmVyYXRvcnMuaCIKICNpbmNs
dWRlIDx3dGYvTGlzdER1bXAuaD4KIAogI2lmIEVOQUJMRShKSVQpCkBAIC03Nyw2ICs4MSw3IEBA
IENhbGxMaW5rSW5mbzo6Q2FsbExpbmtJbmZvKENvZGVPcmlnaW4gY28KICAgICAsIG1fYWxsb3dT
dHVicyh0cnVlKQogICAgICwgbV9jbGVhcmVkQnlKZXR0aXNvbihmYWxzZSkKICAgICAsIG1fY2Fs
bFR5cGUoTm9uZSkKKyAgICAsIG1fdXNlRGF0YUlDKHN0YXRpY19jYXN0PHVuc2lnbmVkPihVc2VE
YXRhSUM6OlllcykpCiB7CiB9CiAKQEAgLTEwMiw0NyArMTA3LDUxIEBAIHZvaWQgQ2FsbExpbmtJ
bmZvOjp1bmxpbmsoVk0mIHZtKQogICAgIC8vIFdlIGNvdWxkIGJlIGNhbGxlZCBldmVuIGlmIHdl
J3JlIG5vdCBsaW5rZWQgYW55bW9yZSBiZWNhdXNlIG9mIGhvdyBwb2x5bW9ycGhpYyBjYWxscwog
ICAgIC8vIHdvcmsuIEVhY2ggY2FsbHNpdGUgd2l0aGluIHRoZSBwb2x5bW9ycGhpYyBjYWxsIHN0
dWIgbWF5IHNlcGFyYXRlbHkgYXNrIHVzIHRvIHVubGluaygpLgogICAgIGlmIChpc0xpbmtlZCgp
KQotICAgICAgICB1bmxpbmtGb3Iodm0sICp0aGlzKTsKKyAgICAgICAgdW5saW5rQ2FsbCh2bSwg
KnRoaXMpOwogCiAgICAgLy8gRWl0aGVyIHdlIHdlcmUgdW5saW5rZWQsIGluIHdoaWNoIGNhc2Ug
d2Ugc2hvdWxkIG5vdCBoYXZlIGJlZW4gb24gYW55IGxpc3QsIG9yIHdlIHVubGlua2VkCiAgICAg
Ly8gb3Vyc2VsdmVzIHNvIHRoYXQgd2UncmUgbm90IG9uIGFueSBsaXN0IGFueW1vcmUuCiAgICAg
UkVMRUFTRV9BU1NFUlQoIWlzT25MaXN0KCkpOwogfQogCi1Db2RlTG9jYXRpb25OZWFyQ2FsbDxK
U0ludGVybmFsUHRyVGFnPiBDYWxsTGlua0luZm86OmNhbGxSZXR1cm5Mb2NhdGlvbigpCitDb2Rl
TG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBDYWxsTGlua0luZm86OmZhc3RQYXRoU3Rh
cnQoKQogewotICAgIFJFTEVBU0VfQVNTRVJUKCFpc0RpcmVjdCgpKTsKLSAgICByZXR1cm4gQ29k
ZUxvY2F0aW9uTmVhckNhbGw8SlNJbnRlcm5hbFB0clRhZz4obV9jYWxsUmV0dXJuTG9jYXRpb25P
clBhdGNoYWJsZUp1bXAsIE5lYXJDYWxsTW9kZTo6UmVndWxhcik7CisgICAgcmV0dXJuIENvZGVM
b2NhdGlvbkRhdGFMYWJlbFB0cjxKU0ludGVybmFsUHRyVGFnPihtX2Zhc3RQYXRoU3RhcnQpOwog
fQogCi1Db2RlTG9jYXRpb25KdW1wPEpTSW50ZXJuYWxQdHJUYWc+IENhbGxMaW5rSW5mbzo6cGF0
Y2hhYmxlSnVtcCgpCitDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBDYWxsTGlu
a0luZm86OnNsb3dQYXRoU3RhcnQoKQogewotICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxUeXBlKCkg
PT0gRGlyZWN0VGFpbENhbGwpOwotICAgIHJldHVybiBDb2RlTG9jYXRpb25KdW1wPEpTSW50ZXJu
YWxQdHJUYWc+KG1fY2FsbFJldHVybkxvY2F0aW9uT3JQYXRjaGFibGVKdW1wKTsKKyAgICBSRUxF
QVNFX0FTU0VSVCghaXNEYXRhSUMoKSk7CisgICAgcmV0dXJuIHUuY29kZUlDLm1fc2xvd1BhdGhT
dGFydDsKIH0KIAotQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyPEpTSW50ZXJuYWxQdHJUYWc+IENh
bGxMaW5rSW5mbzo6aG90UGF0aEJlZ2luKCkKK0NvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQ
dHJUYWc+IENhbGxMaW5rSW5mbzo6ZG9uZUxvY2F0aW9uKCkKIHsKICAgICBSRUxFQVNFX0FTU0VS
VCghaXNEaXJlY3QoKSk7Ci0gICAgcmV0dXJuIENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0cjxKU0lu
dGVybmFsUHRyVGFnPihtX2hvdFBhdGhCZWdpbk9yU2xvd1BhdGhTdGFydCk7CisgICAgcmV0dXJu
IG1fZG9uZUxvY2F0aW9uOwogfQogCi1Db2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFn
PiBDYWxsTGlua0luZm86OnNsb3dQYXRoU3RhcnQoKQotewotICAgIFJFTEVBU0VfQVNTRVJUKGlz
RGlyZWN0KCkpOwotICAgIHJldHVybiBtX2hvdFBhdGhCZWdpbk9yU2xvd1BhdGhTdGFydDsKLX0K
LQotdm9pZCBDYWxsTGlua0luZm86OnNldENhbGxlZShWTSYgdm0sIEpTQ2VsbCogb3duZXIsIEpT
T2JqZWN0KiBjYWxsZWUpCit2b2lkIENhbGxMaW5rSW5mbzo6c2V0TW9ub21vcnBoaWNDYWxsZWUo
Vk0mIHZtLCBKU0NlbGwqIG93bmVyLCBKU09iamVjdCogY2FsbGVlLCBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHI8SlNFbnRyeVB0clRhZz4gY29kZVB0cikKIHsKICAgICBSRUxFQVNFX0FTU0VSVCghaXNE
aXJlY3QoKSk7CiAgICAgbV9jYWxsZWVPckNvZGVCbG9jay5zZXQodm0sIG93bmVyLCBjYWxsZWUp
OworCisgICAgaWYgKGlzRGF0YUlDKCkpIAorICAgICAgICB1LmRhdGFJQy5tX21vbm9tb3JwaGlj
Q2FsbERlc3RpbmF0aW9uID0gY29kZVB0cjsKKyAgICBlbHNlIHsKKyAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OnJlcGF0Y2hOZWFyQ2FsbCh1LmNvZGVJQy5tX2NhbGxMb2NhdGlvbiwgQ29kZUxvY2F0
aW9uTGFiZWw8SlNFbnRyeVB0clRhZz4oY29kZVB0cikpOworICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6cmVwYXRjaFBvaW50ZXIodS5jb2RlSUMubV9jYWxsZWVMb2NhdGlvbiwgY2FsbGVlKTsKKyAg
ICB9CiB9CiAKIHZvaWQgQ2FsbExpbmtJbmZvOjpjbGVhckNhbGxlZSgpCiB7CiAgICAgUkVMRUFT
RV9BU1NFUlQoIWlzRGlyZWN0KCkpOwogICAgIG1fY2FsbGVlT3JDb2RlQmxvY2suY2xlYXIoKTsK
KyAgICBpZiAoaXNEYXRhSUMoKSkKKyAgICAgICAgdS5kYXRhSUMubV9tb25vbW9ycGhpY0NhbGxE
ZXN0aW5hdGlvbiA9IG51bGxwdHI7CisgICAgZWxzZSBpZiAoIWNsZWFyZWRCeUpldHRpc29uKCkp
CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoUG9pbnRlcih1LmNvZGVJQy5tX2NhbGxl
ZUxvY2F0aW9uLCBudWxscHRyKTsKIH0KIAogSlNPYmplY3QqIENhbGxMaW5rSW5mbzo6Y2FsbGVl
KCkKQEAgLTI4NCw2ICsyOTMsMjA2IEBAIHZvaWQgQ2FsbExpbmtJbmZvOjpzZXRGcmFtZVNodWZm
bGVEYXRhKGMKICAgICBtX2ZyYW1lU2h1ZmZsZURhdGEtPnNocmlua1RvRml0KCk7CiB9CiAKK3Zv
aWQgQ2FsbExpbmtJbmZvOjplbWl0Rmlyc3RJbnN0cnVjdGlvbkZvckRhdGFJQyhDQ2FsbEhlbHBl
cnMmIGppdCwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUikKK3sKKyAgICBHUFJSZWcgc2NyYXRjaEdQ
UiA9IGppdC5zY3JhdGNoUmVnaXN0ZXIoKTsKKyAgICBEaXNhbGxvd01hY3JvU2NyYXRjaFJlZ2lz
dGVyVXNhZ2UgZGlzYWxsb3dTY3JhdGNoKGppdCk7CisgICAgLy8gV2hlbiByZXBhdGNoaW5nLCB3
ZSBqdXN0IG92ZXJ3cml0ZSB0aGUgZmlyc3QgaW5zdHJ1Y3Rpb24gYmFjaywgc2luY2UgaXQnbGwg
aGF2ZSBiZWVuIHJlcGxhY2VkIHdpdGggYSBqdW1wIHRvIHRoZSBwb2x5bW9ycGhpYyBjYWxsIHN0
dWIuCisgICAgc2l6ZV90IHN0YXJ0U2l6ZSA9IGppdC5tX2Fzc2VtYmxlci5idWZmZXIoKS5jb2Rl
U2l6ZSgpOworICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhjYWxsTGlua0lu
Zm9HUFIsIG9mZnNldE9mQ2FsbGVlKCkpLCBzY3JhdGNoR1BSKTsgCisgICAgc2l6ZV90IGxvYWRT
aXplID0gaml0Lm1fYXNzZW1ibGVyLmJ1ZmZlcigpLmNvZGVTaXplKCkgLSBzdGFydFNpemU7Cisg
ICAgaWYgKGxvYWRTaXplIDwgc3RhdGljX2Nhc3Q8c2l6ZV90PihDQ2FsbEhlbHBlcnM6OnBhdGNo
YWJsZUp1bXBTaXplKCkpKQorICAgICAgICBqaXQuZW1pdE5vcHMoc3RhdGljX2Nhc3Q8c2l6ZV90
PihDQ2FsbEhlbHBlcnM6OnBhdGNoYWJsZUp1bXBTaXplKCkpIC0gbG9hZFNpemUpOworfQorCitN
YWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2FsbExpbmtJbmZvOjplbWl0RmFzdFBhdGhJbXBsKEND
YWxsSGVscGVycyYgaml0LCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BS
LCBVc2VEYXRhSUMgdXNlRGF0YUlDLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRh
aWxDYWxsKQoreworICAgIHNldFVzZXNEYXRhSUNzKHVzZURhdGFJQyk7CisgICAgaWYgKGlzRGF0
YUlDKCkpIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoY2FsbExpbmtJbmZvR1BSICE9IEdQUlJl
Zzo6SW52YWxpZEdQUlJlZyk7CisgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3Rl
ZEltbVB0cih0aGlzKSwgY2FsbExpbmtJbmZvR1BSKTsKKyAgICAgICAgdS5kYXRhSUMubV9jYWxs
TGlua0luZm9HUFIgPSBjYWxsTGlua0luZm9HUFI7CisgICAgfQorCisgICAgYXV0byBmYXN0UGF0
aFN0YXJ0ID0gaml0LmxhYmVsKCk7CisgICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZl
ciYgbGlua0J1ZmZlcikgeworICAgICAgICBtX2Zhc3RQYXRoU3RhcnQgPSBsaW5rQnVmZmVyLmxv
Y2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oZmFzdFBhdGhTdGFydCk7CisgICAgfSk7CisKKyAg
ICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dQYXRoOworCisgICAgaWYgKGlzRGF0YUlDKCkp
IHsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBqaXQuc2NyYXRjaFJlZ2lzdGVyKCk7Cisg
ICAgICAgIGVtaXRGaXJzdEluc3RydWN0aW9uRm9yRGF0YUlDKGppdCwgY2FsbExpbmtJbmZvR1BS
KTsKKyAgICAgICAgeworICAgICAgICAgICAgRGlzYWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVz
YWdlIGRpc2FsbG93U2NyYXRjaChqaXQpOworICAgICAgICAgICAgc2xvd1BhdGguYXBwZW5kKGpp
dC5icmFuY2hQdHIoQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwgc2NyYXRjaEdQUiwgY2FsbGVlR1BS
KSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGlzVGFpbENhbGwoKSkgeworICAgICAgICAgICAg
cHJlcGFyZUZvclRhaWxDYWxsKCk7CisgICAgICAgICAgICBqaXQuZmFySnVtcChDQ2FsbEhlbHBl
cnM6OkFkZHJlc3MoY2FsbExpbmtJbmZvR1BSLCBvZmZzZXRPZk1vbm9tb3JwaGljQ2FsbERlc3Rp
bmF0aW9uKCkpLCBKU0VudHJ5UHRyVGFnKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBq
aXQuY2FsbChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoY2FsbExpbmtJbmZvR1BSLCBvZmZzZXRPZk1v
bm9tb3JwaGljQ2FsbERlc3RpbmF0aW9uKCkpLCBKU0VudHJ5UHRyVGFnKTsKKyAgICB9IGVsc2Ug
eworICAgICAgICBDQ2FsbEhlbHBlcnM6OkRhdGFMYWJlbFB0ciBjYWxsZWVDaGVjazsKKyAgICAg
ICAgc2xvd1BhdGguYXBwZW5kKGppdC5icmFuY2hQdHJXaXRoUGF0Y2goQ0NhbGxIZWxwZXJzOjpO
b3RFcXVhbCwgY2FsbGVlR1BSLCBjYWxsZWVDaGVjaywgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
UHRyKG51bGxwdHIpKSk7CisKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNhbGw7CisgICAg
ICAgIGlmIChpc1RhaWxDYWxsKCkpIHsKKyAgICAgICAgICAgIHByZXBhcmVGb3JUYWlsQ2FsbCgp
OworICAgICAgICAgICAgY2FsbCA9IGppdC5uZWFyVGFpbENhbGwoKTsKKyAgICAgICAgfSBlbHNl
CisgICAgICAgICAgICBjYWxsID0gaml0Lm5lYXJDYWxsKCk7CisgICAgICAgIGppdC5hZGRMaW5r
VGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgICAgIHUuY29kZUlD
Lm1fY2FsbExvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8SlNJbnRlcm5h
bFB0clRhZz4oY2FsbCk7CisgICAgICAgICAgICB1LmNvZGVJQy5tX2NhbGxlZUxvY2F0aW9uID0g
bGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KGNhbGxlZUNoZWNrKTsKKyAg
ICAgICAgfSk7CisgICAgfQorCisgICAgcmV0dXJuIHNsb3dQYXRoOworfQorCitDQ2FsbEhlbHBl
cnM6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZW1pdEZhc3RQYXRoKENDYWxsSGVscGVycyYgaml0
LCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUMgdXNl
RGF0YUlDKQoreworICAgIFJFTEVBU0VfQVNTRVJUKCFpc1RhaWxDYWxsKCkpOworICAgIHJldHVy
biBlbWl0RmFzdFBhdGhJbXBsKGppdCwgY2FsbGVlR1BSLCBjYWxsTGlua0luZm9HUFIsIHVzZURh
dGFJQywgbnVsbHB0cik7Cit9CisKK01hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBDYWxsTGlua0lu
Zm86OmVtaXRUYWlsQ2FsbEZhc3RQYXRoKENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcgY2FsbGVl
R1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUMgdXNlRGF0YUlDLCBXVEY6OkZ1
bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKQoreworICAgIFJFTEVBU0VfQVNTRVJU
KGlzVGFpbENhbGwoKSk7CisgICAgcmV0dXJuIGVtaXRGYXN0UGF0aEltcGwoaml0LCBjYWxsZWVH
UFIsIGNhbGxMaW5rSW5mb0dQUiwgdXNlRGF0YUlDLCBXVEZNb3ZlKHByZXBhcmVGb3JUYWlsQ2Fs
bCkpOworfQorCit2b2lkIENhbGxMaW5rSW5mbzo6ZW1pdFNsb3dQYXRoKFZNJiB2bSwgQ0NhbGxI
ZWxwZXJzJiBqaXQpCit7CisgICAgc2V0U2xvd1BhdGhDYWxsRGVzdGluYXRpb24odm0uZ2V0Q1RJ
U3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS50ZW1wbGF0ZSByZXRhZ2dlZENvZGU8SlNFbnRy
eVB0clRhZz4oKSk7CisgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHRo
aXMpLCBHUFJJbmZvOjpyZWdUMik7CisgICAgaml0LmNhbGwoQ0NhbGxIZWxwZXJzOjpBZGRyZXNz
KEdQUkluZm86OnJlZ1QyLCBvZmZzZXRPZlNsb3dQYXRoQ2FsbERlc3RpbmF0aW9uKCkpLCBKU0Vu
dHJ5UHRyVGFnKTsKK30KKwordm9pZCBDYWxsTGlua0luZm86OmVtaXREaXJlY3RGYXN0UGF0aChD
Q2FsbEhlbHBlcnMmIGppdCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVCghaXNUYWlsQ2FsbCgpKTsK
KworICAgIHNldFVzZXNEYXRhSUNzKFVzZURhdGFJQzo6Tm8pOworCisgICAgYXV0byBmYXN0UGF0
aFN0YXJ0ID0gaml0LmxhYmVsKCk7CisgICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZl
ciYgbGlua0J1ZmZlcikgeworICAgICAgICBtX2Zhc3RQYXRoU3RhcnQgPSBsaW5rQnVmZmVyLmxv
Y2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oZmFzdFBhdGhTdGFydCk7CisgICAgfSk7CisKKyAg
ICBhdXRvIGNhbGwgPSBqaXQubmVhckNhbGwoKTsKKyAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChM
aW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgICAgIHUuY29kZUlDLm1fY2FsbExvY2F0aW9u
ID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8SlNJbnRlcm5hbFB0clRhZz4oY2FsbCk7
CisgICAgfSk7CisgICAgaml0LmFkZExhdGVMaW5rVGFzayhbdGhpc10gKExpbmtCdWZmZXImKSB7
CisgICAgICAgIGluaXRpYWxpemVEaXJlY3RDYWxsKCk7CisgICAgfSk7Cit9CisKK3ZvaWQgQ2Fs
bExpbmtJbmZvOjplbWl0RGlyZWN0VGFpbENhbGxGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCwg
V1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkKK3sKKyAgICBSRUxFQVNF
X0FTU0VSVChpc1RhaWxDYWxsKCkpOworCisgICAgc2V0VXNlc0RhdGFJQ3MoVXNlRGF0YUlDOjpO
byk7CisKKyAgICBhdXRvIGZhc3RQYXRoU3RhcnQgPSBqaXQubGFiZWwoKTsKKyAgICBqaXQuYWRk
TGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgICAgIG1fZmFzdFBh
dGhTdGFydCA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihmYXN0UGF0
aFN0YXJ0KTsKKyAgICB9KTsKKworICAgIC8vIC0gSWYgd2UncmUgbm90IHlldCBsaW5rZWQsIHRo
aXMgaXMgYSBqdW1wIHRvIHRoZSBzbG93IHBhdGguCisgICAgLy8gLSBPbmNlIHdlJ3JlIGxpbmtl
ZCB0byBhIGZhc3QgcGF0aCwgdGhpcyBnb2VzIGJhY2sgdG8gYmVpbmcgbm9wcyBzbyB3ZSBmYWxs
IHRocm91Z2ggdG8gdGhlIGxpbmtlZCBqdW1wLgorICAgIGppdC5lbWl0Tm9wcyhDQ2FsbEhlbHBl
cnM6OnBhdGNoYWJsZUp1bXBTaXplKCkpOworCisgICAgcHJlcGFyZUZvclRhaWxDYWxsKCk7Cisg
ICAgYXV0byBjYWxsID0gaml0Lm5lYXJUYWlsQ2FsbCgpOworICAgIGppdC5hZGRMaW5rVGFzayhb
PV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgdS5jb2RlSUMubV9jYWxsTG9j
YXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxKU0ludGVybmFsUHRyVGFnPihj
YWxsKTsKKyAgICB9KTsKKyAgICBqaXQuYWRkTGF0ZUxpbmtUYXNrKFt0aGlzXSAoTGlua0J1ZmZl
ciYpIHsKKyAgICAgICAgaW5pdGlhbGl6ZURpcmVjdENhbGwoKTsKKyAgICB9KTsKK30KKwordm9p
ZCBDYWxsTGlua0luZm86OmluaXRpYWxpemVEaXJlY3RDYWxsKCkKK3sKKyAgICBSRUxFQVNFX0FT
U0VSVChpc0RpcmVjdCgpKTsKKyAgICBBU1NFUlQodS5jb2RlSUMubV9jYWxsTG9jYXRpb24pOwor
ICAgIGlmIChpc1RhaWxDYWxsKCkpIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoZmFzdFBhdGhT
dGFydCgpKTsKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjplbWl0SklUQ29kZU92ZXIoZmFzdFBhdGhT
dGFydCgpLCBbJl0gKENDYWxsSGVscGVycyYgaml0KSB7CisgICAgICAgICAgICBhdXRvIGp1bXAg
PSBqaXQuanVtcCgpOworICAgICAgICAgICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZl
ciYgbGlua0J1ZmZlcikgeworICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhqdW1wLCBz
bG93UGF0aFN0YXJ0KCkpOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0sICJpbml0aWFsaXpl
IGRpcmVjdCBjYWxsIik7CisgICAgfSBlbHNlCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBh
dGNoTmVhckNhbGwodS5jb2RlSUMubV9jYWxsTG9jYXRpb24sIHNsb3dQYXRoU3RhcnQoKSk7Cit9
CisKK3ZvaWQgQ2FsbExpbmtJbmZvOjpzZXREaXJlY3RDYWxsVGFyZ2V0KENvZGVMb2NhdGlvbkxh
YmVsPEpTRW50cnlQdHJUYWc+IHRhcmdldCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChpc0RpcmVj
dCgpKTsKKworICAgIGlmIChpc1RhaWxDYWxsKCkpIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQo
ZmFzdFBhdGhTdGFydCgpKTsKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjplbWl0SklUQ29kZU92ZXIo
ZmFzdFBhdGhTdGFydCgpLCBbJl0gKENDYWxsSGVscGVycyYgaml0KSB7CisgICAgICAgICAgICAv
LyBXZSByZXNlcnZlZCB0aGlzIG1hbnkgYnl0ZXMgZm9yIHRoZSBqdW1wIGF0IGZhc3RQYXRoU3Rh
cnQoKS4gTWFrZSB0aGF0CisgICAgICAgICAgICAvLyBjb2RlIG5vcHMgbm93IHNvIHdlIGZhbGwg
dGhyb3VnaCB0byB0aGUganVtcCB0byB0aGUgZmFzdCBwYXRoLgorICAgICAgICAgICAgaml0LmVt
aXROb3BzKENDYWxsSGVscGVyczo6cGF0Y2hhYmxlSnVtcFNpemUoKSk7IAorICAgICAgICB9LCAi
U2V0dGluZyBkaXJlY3QgY2FsbCB0YXJnZXQiKTsKKyAgICB9CisKKyAgICBNYWNyb0Fzc2VtYmxl
cjo6cmVwYXRjaE5lYXJDYWxsKHUuY29kZUlDLm1fY2FsbExvY2F0aW9uLCB0YXJnZXQpOworfQor
Cit2b2lkIENhbGxMaW5rSW5mbzo6c2V0U2xvd1BhdGhDYWxsRGVzdGluYXRpb24oTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGNvZGVQdHIpCit7CisgICAgbV9zbG93UGF0aENh
bGxEZXN0aW5hdGlvbiA9IGNvZGVQdHI7Cit9CisKK3ZvaWQgQ2FsbExpbmtJbmZvOjpyZXZlcnRD
YWxsVG9TdHViKCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChzdHViKCkpOworICAgIC8vIFRoZSBz
dGFydCBvZiBvdXIgSklUIGNvZGUgaXMgbm93IGEganVtcCB0byB0aGUgcG9seW1vcnBoaWMgc3R1
Yi4gUmV3cml0ZSB0aGUgZmlyc3QgaW5zdHJ1Y3Rpb24KKyAgICAvLyB0byBiZSB3aGF0IHdlIG5l
ZWQgZm9yIG5vbiBzdHViIElDcy4KKworICAgIC8vIHRoaXMgcnVucyBpbnRvIHNvbWUgYnJhbmNo
IGNvbXBhY3Rpb24gY3JhcCBJJ2QgbGlrZSB0byBhdm9pZCBmb3Igbm93LiBFc3NlbnRpYWxseSwg
dGhlIGJyYW5jaAorICAgIC8vIGRvZXNuJ3Qga25vdyBpZiBpdCBjYW4gYmUgY29tcGFjdGVkIG9y
IG5vdC4gU28gd2UgZW5kIHVwIHdpdGggMjggYnl0ZXMgb2YgbWFjaGluZSBjb2RlLCBmb3IKKyAg
ICAvLyB3aGF0IGluIGFsbCBsaWtlbGlob29kIGZpdHMgaW4gMjQuIFNvIHdlIGp1c3Qgc3BsYXQg
b3V0IHRoZSBmaXJzdCBpbnN0cnVjdGlvbi4gTG9uZyB0ZXJtLCB3ZQorICAgIC8vIG5lZWQgc29t
ZXRoaW5nIGNsZWFuZXIuIEJ1dCB0aGlzIHdvcmtzIG9uIGFybTY0IGZvciBub3cuCisKKyAgICBD
Q2FsbEhlbHBlcnM6OmVtaXRKSVRDb2RlT3ZlcihmYXN0UGF0aFN0YXJ0KCksIFsmXSAoQ0NhbGxI
ZWxwZXJzJiBqaXQpIHsKKyAgICAgICAgaWYgKGlzRGF0YUlDKCkpCisgICAgICAgICAgICBlbWl0
Rmlyc3RJbnN0cnVjdGlvbkZvckRhdGFJQyhqaXQsIHUuZGF0YUlDLm1fY2FsbExpbmtJbmZvR1BS
KTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OnJldmVydEp1bXBS
ZXBsYWNlbWVudFRvQnJhbmNoUHRyV2l0aFBhdGNoKAorICAgICAgICAgICAgICAgIENDYWxsSGVs
cGVyczo6c3RhcnRPZkJyYW5jaFB0cldpdGhQYXRjaE9uUmVnaXN0ZXIodS5jb2RlSUMubV9jYWxs
ZWVMb2NhdGlvbiksIGNhbGxlZUdQUigpLCBudWxscHRyKTsKKyAgICAgICAgfQorICAgIH0sICAi
UmVzZXR0aW5nIFBvbHltb3JwaGljQ2FsbCBzdHViYmVkIENhbGxMaW5rSW5mbyIpOworfQorCit2
b2lkIENhbGxMaW5rSW5mbzo6c2V0U3R1YihSZWY8UG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmU+
JiYgbmV3U3R1YikKK3sKKyAgICBjbGVhclN0dWIoKTsKKyAgICBtX3N0dWIgPSBXVEZNb3ZlKG5l
d1N0dWIpOworCisgICAgaWYgKGlzRGF0YUlDKCkpIHsKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpl
bWl0SklUQ29kZU92ZXIoZmFzdFBhdGhTdGFydCgpLCBbJl0gKENDYWxsSGVscGVycyYgaml0KSB7
CisgICAgICAgICAgICBhdXRvIGp1bXAgPSBqaXQuanVtcCgpOworICAgICAgICAgICAgaml0LmFk
ZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgeworICAgICAgICAgICAgICAg
IGxpbmtCdWZmZXIubGluayhqdW1wLCBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0
clRhZz4obV9zdHViLT5jb2RlKCkuY29kZSgpKSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAg
fSwgIlBhdGNoaW5nIGNhbGwgdG8gUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUgaW4gQ2FsbExp
bmtJbmZvIik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGxhY2VX
aXRoSnVtcCgKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpzdGFydE9mQnJhbmNoUHRyV2l0
aFBhdGNoT25SZWdpc3Rlcih1LmNvZGVJQy5tX2NhbGxlZUxvY2F0aW9uKSwKKyAgICAgICAgICAg
IENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihtX3N0dWItPmNvZGUoKS5j
b2RlKCkpKTsKKyAgICB9Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogI2VuZGlmIC8vIEVOQUJM
RShKSVQpCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0lu
Zm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExp
bmtJbmZvLmgJKHJldmlzaW9uIDI3NzQ0MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9DYWxsTGlua0luZm8uaAkod29ya2luZyBjb3B5KQpAQCAtMzAsMTIgKzMwLDE0IEBACiAj
aW5jbHVkZSAiQ29kZVNwZWNpYWxpemF0aW9uS2luZC5oIgogI2luY2x1ZGUgIlBvbHltb3JwaGlj
Q2FsbFN0dWJSb3V0aW5lLmgiCiAjaW5jbHVkZSAiV3JpdGVCYXJyaWVyLmgiCisjaW5jbHVkZSA8
d3RmL0Z1bmN0aW9uLmg+CiAjaW5jbHVkZSA8d3RmL1NlbnRpbmVsTGlua2VkTGlzdC5oPgogCiBu
YW1lc3BhY2UgSlNDIHsKIAogI2lmIEVOQUJMRShKSVQpCiAKK2NsYXNzIENDYWxsSGVscGVyczsK
IGNsYXNzIEZ1bmN0aW9uQ29kZUJsb2NrOwogY2xhc3MgSlNGdW5jdGlvbjsKIGVudW0gT3Bjb2Rl
SUQgOiB1bnNpZ25lZDsKQEAgLTE2MywxNiArMTY1LDM4IEBAIHB1YmxpYzoKICAgICAgICAgbV9j
YWxsZWVHUFIgPSBjYWxsZWVHUFI7CiAgICAgfQogCi0gICAgdm9pZCBzZXRDYWxsTG9jYXRpb25z
KAotICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBjYWxsUmV0dXJu
TG9jYXRpb25PclBhdGNoYWJsZUp1bXAsCi0gICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50
ZXJuYWxQdHJUYWc+IGhvdFBhdGhCZWdpbk9yU2xvd1BhdGhTdGFydCwKLSAgICAgICAgQ29kZUxv
Y2F0aW9uTmVhckNhbGw8SlNJbnRlcm5hbFB0clRhZz4gaG90UGF0aE90aGVyKQotICAgIHsKLSAg
ICAgICAgbV9jYWxsUmV0dXJuTG9jYXRpb25PclBhdGNoYWJsZUp1bXAgPSBjYWxsUmV0dXJuTG9j
YXRpb25PclBhdGNoYWJsZUp1bXA7Ci0gICAgICAgIG1faG90UGF0aEJlZ2luT3JTbG93UGF0aFN0
YXJ0ID0gaG90UGF0aEJlZ2luT3JTbG93UGF0aFN0YXJ0OwotICAgICAgICBtX2hvdFBhdGhPdGhl
ciA9IGhvdFBhdGhPdGhlcjsKKyAgICBHUFJSZWcgY2FsbGVlR1BSKCkgY29uc3QgeyByZXR1cm4g
bV9jYWxsZWVHUFI7IH0KKyAgICAKKyAgICBlbnVtIGNsYXNzIFVzZURhdGFJQyA6IHVpbnQ4X3Qg
eworICAgICAgICBZZXMsCisgICAgICAgIE5vCisgICAgfTsKKworcHJpdmF0ZToKKyAgICB2b2lk
IGVtaXRGaXJzdEluc3RydWN0aW9uRm9yRGF0YUlDKENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxs
TGlua0luZm9HUFIpOworICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBlbWl0RmFzdFBhdGhJ
bXBsKENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9H
UFIsIFVzZURhdGFJQywgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkg
V0FSTl9VTlVTRURfUkVUVVJOOworcHVibGljOgorICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlz
dCBlbWl0RmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNh
bGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDKSBXQVJOX1VOVVNFRF9SRVRVUk47CisgICAgTWFjcm9B
c3NlbWJsZXI6Okp1bXBMaXN0IGVtaXRUYWlsQ2FsbEZhc3RQYXRoKENDYWxsSGVscGVycyYsIEdQ
UlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQywgV1RGOjpG
dW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkgV0FSTl9VTlVTRURfUkVUVVJOOwor
ICAgIHZvaWQgZW1pdERpcmVjdEZhc3RQYXRoKENDYWxsSGVscGVycyYpOworICAgIHZvaWQgZW1p
dERpcmVjdFRhaWxDYWxsRmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiwgV1RGOjpGdW5jdGlvbjx2b2lk
KCk+IHByZXBhcmVGb3JUYWlsQ2FsbCk7CisgICAgdm9pZCBlbWl0U2xvd1BhdGgoVk0mLCBDQ2Fs
bEhlbHBlcnMmKTsKKyAgICB2b2lkIHJldmVydENhbGxUb1N0dWIoKTsKKworICAgIGJvb2wgaXNE
YXRhSUMoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxVc2VEYXRhSUM+KG1fdXNlRGF0YUlD
KSA9PSBVc2VEYXRhSUM6OlllczsgfQorICAgIHZvaWQgc2V0VXNlc0RhdGFJQ3MoVXNlRGF0YUlD
IHVzZURhdGFJQykgeyBtX3VzZURhdGFJQyA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPih1c2VEYXRh
SUMpOyB9CisKKyAgICB2b2lkIHNldENvZGVMb2NhdGlvbnMoCisgICAgICAgIENvZGVMb2NhdGlv
bkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IHNsb3dQYXRoU3RhcnQsCisgICAgICAgIENvZGVMb2Nh
dGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IGRvbmVMb2NhdGlvbikKKyAgICB7CisgICAgICAg
IGlmICghaXNEYXRhSUMoKSkKKyAgICAgICAgICAgIHUuY29kZUlDLm1fc2xvd1BhdGhTdGFydCA9
IHNsb3dQYXRoU3RhcnQ7CisgICAgICAgIG1fZG9uZUxvY2F0aW9uID0gZG9uZUxvY2F0aW9uOwog
ICAgIH0KIAorICAgIHZvaWQgaW5pdGlhbGl6ZURpcmVjdENhbGwoKTsKKwogICAgIGJvb2wgYWxs
b3dTdHVicygpIGNvbnN0IHsgcmV0dXJuIG1fYWxsb3dTdHViczsgfQogCiAgICAgdm9pZCBkaXNh
bGxvd1N0dWJzKCkKQEAgLTE4MCwyMyArMjA0LDE5IEBAIHB1YmxpYzoKICAgICAgICAgbV9hbGxv
d1N0dWJzID0gZmFsc2U7CiAgICAgfQogCi0gICAgQ29kZUxvY2F0aW9uTmVhckNhbGw8SlNJbnRl
cm5hbFB0clRhZz4gY2FsbFJldHVybkxvY2F0aW9uKCk7Ci0gICAgQ29kZUxvY2F0aW9uSnVtcDxK
U0ludGVybmFsUHRyVGFnPiBwYXRjaGFibGVKdW1wKCk7Ci0gICAgQ29kZUxvY2F0aW9uRGF0YUxh
YmVsUHRyPEpTSW50ZXJuYWxQdHJUYWc+IGhvdFBhdGhCZWdpbigpOworICAgIENvZGVMb2NhdGlv
bkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IGZhc3RQYXRoU3RhcnQoKTsKICAgICBDb2RlTG9jYXRp
b25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBzbG93UGF0aFN0YXJ0KCk7CisgICAgQ29kZUxvY2F0
aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gZG9uZUxvY2F0aW9uKCk7CiAKLSAgICBDb2RlTG9j
YXRpb25OZWFyQ2FsbDxKU0ludGVybmFsUHRyVGFnPiBob3RQYXRoT3RoZXIoKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIG1faG90UGF0aE90aGVyOwotICAgIH0KLQotICAgIHZvaWQgc2V0Q2FsbGVl
KFZNJiwgSlNDZWxsKiwgSlNPYmplY3QqIGNhbGxlZSk7CisgICAgdm9pZCBzZXRNb25vbW9ycGhp
Y0NhbGxlZShWTSYsIEpTQ2VsbCosIEpTT2JqZWN0KiBjYWxsZWUsIE1hY3JvQXNzZW1ibGVyQ29k
ZVB0cjxKU0VudHJ5UHRyVGFnPik7CisgICAgdm9pZCBzZXRTbG93UGF0aENhbGxEZXN0aW5hdGlv
bihNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4pOwogICAgIHZvaWQgY2xlYXJD
YWxsZWUoKTsKICAgICBKU09iamVjdCogY2FsbGVlKCk7CiAKICAgICB2b2lkIHNldENvZGVCbG9j
ayhWTSYsIEpTQ2VsbCosIEZ1bmN0aW9uQ29kZUJsb2NrKik7CiAgICAgdm9pZCBjbGVhckNvZGVC
bG9jaygpOwogICAgIEZ1bmN0aW9uQ29kZUJsb2NrKiBjb2RlQmxvY2soKTsKKyAgICB2b2lkIHNl
dERpcmVjdENhbGxUYXJnZXQoQ29kZUxvY2F0aW9uTGFiZWw8SlNFbnRyeVB0clRhZz4pOwogCiAg
ICAgdm9pZCBzZXRMYXN0U2VlbkNhbGxlZShWTSYsIGNvbnN0IEpTQ2VsbCogb3duZXIsIEpTT2Jq
ZWN0KiBjYWxsZWUpOwogICAgIHZvaWQgY2xlYXJMYXN0U2VlbkNhbGxlZSgpOwpAQCAtMjA2LDEy
ICsyMjYsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRFeGVjdXRhYmxlRHVyaW5nQ29tcGlsYXRp
b24oRXhlY3V0YWJsZUJhc2UqKTsKICAgICBFeGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZSgpOwog
ICAgIAotICAgIHZvaWQgc2V0U3R1YihSZWY8UG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmU+JiYg
bmV3U3R1YikKLSAgICB7Ci0gICAgICAgIGNsZWFyU3R1YigpOwotICAgICAgICBtX3N0dWIgPSBX
VEZNb3ZlKG5ld1N0dWIpOwotICAgIH0KLQorICAgIHZvaWQgc2V0U3R1YihSZWY8UG9seW1vcnBo
aWNDYWxsU3R1YlJvdXRpbmU+JiYpOwogICAgIHZvaWQgY2xlYXJTdHViKCk7CiAKICAgICBQb2x5
bW9ycGhpY0NhbGxTdHViUm91dGluZSogc3R1YigpIGNvbnN0CkBAIC0zMTEsNiArMzI2LDIxIEBA
IHB1YmxpYzoKICAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDYWxsTGlua0luZm8sIG1f
c2xvd1BhdGhDb3VudCk7CiAgICAgfQogCisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkNh
bGxlZSgpCisgICAgeworICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENhbGxMaW5rSW5m
bywgbV9jYWxsZWVPckNvZGVCbG9jayk7CisgICAgfQorCisgICAgc3RhdGljIHB0cmRpZmZfdCBv
ZmZzZXRPZk1vbm9tb3JwaGljQ2FsbERlc3RpbmF0aW9uKCkKKyAgICB7CisgICAgICAgIHJldHVy
biBPQkpFQ1RfT0ZGU0VUT0YoQ2FsbExpbmtJbmZvLCB1KSArIE9CSkVDVF9PRkZTRVRPRihVbmlv
blR5cGUsIGRhdGFJQy5tX21vbm9tb3JwaGljQ2FsbERlc3RpbmF0aW9uKTsKKyAgICB9CisKKyAg
ICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mU2xvd1BhdGhDYWxsRGVzdGluYXRpb24oKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDYWxsTGlua0luZm8sIG1fc2xvd1Bh
dGhDYWxsRGVzdGluYXRpb24pOworICAgIH0KKwogICAgIEdQUlJlZyBjYWxsZWVHUFIoKQogICAg
IHsKICAgICAgICAgcmV0dXJuIG1fY2FsbGVlR1BSOwpAQCAtMzUyLDEwICszODIsMjUgQEAgcHVi
bGljOgogICAgIH0KIAogcHJpdmF0ZToKLSAgICB1aW50MzJfdCBtX21heEFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzIHsgMCB9OyAvLyBGb3IgdmFyYXJnczogdGhlIHByb2ZpbGVkIG1heGltdW0g
bnVtYmVyIG9mIGFyZ3VtZW50cy4gRm9yIGRpcmVjdDogdGhlIG51bWJlciBvZiBzdGFjayBzbG90
cyBhbGxvY2F0ZWQgZm9yIGFyZ3VtZW50cy4KLSAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVy
bmFsUHRyVGFnPiBtX2NhbGxSZXR1cm5Mb2NhdGlvbk9yUGF0Y2hhYmxlSnVtcDsKLSAgICBDb2Rl
TG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBtX2hvdFBhdGhCZWdpbk9yU2xvd1BhdGhT
dGFydDsKLSAgICBDb2RlTG9jYXRpb25OZWFyQ2FsbDxKU0ludGVybmFsUHRyVGFnPiBtX2hvdFBh
dGhPdGhlcjsKKyAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBtX2Zhc3RQ
YXRoU3RhcnQ7CisgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gbV9kb25l
TG9jYXRpb247CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IG1fc2xv
d1BhdGhDYWxsRGVzdGluYXRpb247CisgICAgdW5pb24gVW5pb25UeXBlIHsKKyAgICAgICAgVW5p
b25UeXBlKCkgCisgICAgICAgICAgICA6IGRhdGFJQyB7IG51bGxwdHIsIEludmFsaWRHUFJSZWcg
fQorICAgICAgICB7IH0KKyAgICAgICAgc3RydWN0IERhdGFJQyB7CisgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gbV9tb25vbW9ycGhpY0NhbGxEZXN0aW5h
dGlvbjsKKyAgICAgICAgICAgIEdQUlJlZyBtX2NhbGxMaW5rSW5mb0dQUjsKKyAgICAgICAgfSBk
YXRhSUM7CisKKyAgICAgICAgc3RydWN0IHsKKyAgICAgICAgICAgIENvZGVMb2NhdGlvbk5lYXJD
YWxsPEpTSW50ZXJuYWxQdHJUYWc+IG1fY2FsbExvY2F0aW9uOworICAgICAgICAgICAgQ29kZUxv
Y2F0aW9uRGF0YUxhYmVsUHRyPEpTSW50ZXJuYWxQdHJUYWc+IG1fY2FsbGVlTG9jYXRpb247Cisg
ICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBtX3Nsb3dQYXRo
U3RhcnQ7CisgICAgICAgIH0gY29kZUlDOworICAgIH0gdTsKKwogICAgIFdyaXRlQmFycmllcjxK
U0NlbGw+IG1fY2FsbGVlT3JDb2RlQmxvY2s7CiAgICAgV3JpdGVCYXJyaWVyPEpTQ2VsbD4gbV9s
YXN0U2VlbkNhbGxlZU9yRXhlY3V0YWJsZTsKICAgICBSZWZQdHI8UG9seW1vcnBoaWNDYWxsU3R1
YlJvdXRpbmU+IG1fc3R1YjsKQEAgLTM2OSw4ICs0MTQsMTAgQEAgcHJpdmF0ZToKICAgICBib29s
IG1fYWxsb3dTdHVicyA6IDE7CiAgICAgYm9vbCBtX2NsZWFyZWRCeUpldHRpc29uIDogMTsKICAg
ICB1bnNpZ25lZCBtX2NhbGxUeXBlIDogNDsgLy8gQ2FsbFR5cGUKKyAgICB1bnNpZ25lZCBtX3Vz
ZURhdGFJQyA6IDE7IC8vIFVzZURhdGFJQwogICAgIEdQUlJlZyBtX2NhbGxlZUdQUiB7IEludmFs
aWRHUFJSZWcgfTsKICAgICB1aW50MzJfdCBtX3Nsb3dQYXRoQ291bnQgeyAwIH07CisgICAgdWlu
dDMyX3QgbV9tYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyB7IDAgfTsgLy8gRm9yIHZhcmFy
Z3M6IHRoZSBwcm9maWxlZCBtYXhpbXVtIG51bWJlciBvZiBhcmd1bWVudHMuIEZvciBkaXJlY3Q6
IHRoZSBudW1iZXIgb2Ygc3RhY2sgc2xvdHMgYWxsb2NhdGVkIGZvciBhcmd1bWVudHMuCiB9Owog
CiBpbmxpbmUgQ29kZU9yaWdpbiBnZXRDYWxsTGlua0luZm9Db2RlT3JpZ2luKENhbGxMaW5rSW5m
byYgY2FsbExpbmtJbmZvKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRD
b21waWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdK
SVRDb21waWxlci5jcHAJKHJldmlzaW9uIDI3NzQ0MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTcsMzEgKzI1Nywx
OCBAQCB2b2lkIEpJVENvbXBpbGVyOjpsaW5rKExpbmtCdWZmZXImIGxpbmtCCiAgICAgZmluYWxp
emVJbmxpbmVDYWNoZXMobV9pbnN0YW5jZU9mcywgbGlua0J1ZmZlcik7CiAgICAgZmluYWxpemVJ
bmxpbmVDYWNoZXMobV9wcml2YXRlQnJhbmRBY2Nlc3NlcywgbGlua0J1ZmZlcik7CiAKLSAgICBh
dXRvIGxpbmtDYWxsVGh1bmsgPSBGdW5jdGlvblB0cjxOb1B0clRhZz4odm0oKS5nZXRDVElTdHVi
KGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAgICAg
Zm9yIChhdXRvJiByZWNvcmQgOiBtX2pzQ2FsbHMpIHsKICAgICAgICAgQ2FsbExpbmtJbmZvJiBp
bmZvID0gKnJlY29yZC5pbmZvOwotICAgICAgICBsaW5rQnVmZmVyLmxpbmsocmVjb3JkLnNsb3dD
YWxsLCBsaW5rQ2FsbFRodW5rKTsKLSAgICAgICAgaW5mby5zZXRDYWxsTG9jYXRpb25zKAotICAg
ICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4obGlua0J1ZmZlci5s
b2NhdGlvbk9mTmVhckNhbGw8SlNJbnRlcm5hbFB0clRhZz4ocmVjb3JkLnNsb3dDYWxsKSksCi0g
ICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPihsaW5rQnVmZmVy
LmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4ocmVjb3JkLnRhcmdldFRvQ2hlY2spKSwKLSAg
ICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPEpTSW50ZXJuYWxQdHJUYWc+
KHJlY29yZC5mYXN0Q2FsbCkpOworICAgICAgICBpbmZvLnNldENvZGVMb2NhdGlvbnMoCisgICAg
ICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4ocmVjb3JkLnNs
b3dQYXRoU3RhcnQpLAorICAgICAgICAgICAgbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJu
YWxQdHJUYWc+KHJlY29yZC5kb25lTG9jYXRpb24pKTsKICAgICB9CiAgICAgCi0gICAgZm9yIChK
U0RpcmVjdENhbGxSZWNvcmQmIHJlY29yZCA6IG1fanNEaXJlY3RDYWxscykgeworICAgIGZvciAo
YXV0byYgcmVjb3JkIDogbV9qc0RpcmVjdENhbGxzKSB7CiAgICAgICAgIENhbGxMaW5rSW5mbyYg
aW5mbyA9ICpyZWNvcmQuaW5mbzsKLSAgICAgICAgbGlua0J1ZmZlci5saW5rKHJlY29yZC5jYWxs
LCBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8Tm9QdHJUYWc+KHJlY29yZC5zbG93UGF0aCkpOwotICAg
ICAgICBpbmZvLnNldENhbGxMb2NhdGlvbnMoCi0gICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJl
bDxKU0ludGVybmFsUHRyVGFnPigpLAorICAgICAgICBpbmZvLnNldENvZGVMb2NhdGlvbnMoCiAg
ICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4ocmVjb3Jk
LnNsb3dQYXRoKSwKLSAgICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPEpT
SW50ZXJuYWxQdHJUYWc+KHJlY29yZC5jYWxsKSk7Ci0gICAgfQotICAgIAotICAgIGZvciAoSlNE
aXJlY3RUYWlsQ2FsbFJlY29yZCYgcmVjb3JkIDogbV9qc0RpcmVjdFRhaWxDYWxscykgewotICAg
ICAgICBDYWxsTGlua0luZm8mIGluZm8gPSAqcmVjb3JkLmluZm87Ci0gICAgICAgIGluZm8uc2V0
Q2FsbExvY2F0aW9ucygKLSAgICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVy
bmFsUHRyVGFnPihyZWNvcmQucGF0Y2hhYmxlSnVtcCksCi0gICAgICAgICAgICBsaW5rQnVmZmVy
LmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4ocmVjb3JkLnNsb3dQYXRoKSwKLSAgICAgICAg
ICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPEpTSW50ZXJuYWxQdHJUYWc+KHJlY29y
ZC5jYWxsKSk7CisgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFn
PigpKTsKICAgICB9CiAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgJKHJldmlzaW9uIDI3NzQ0MCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtMjE5LDE5ICsyMTksMTQgQEAgcHVibGljOgogICAgICAgICBtX3ByaXZhdGVCcmFu
ZEFjY2Vzc2VzLmFwcGVuZChJbmxpbmVDYWNoZVdyYXBwZXI8SklUUHJpdmF0ZUJyYW5kQWNjZXNz
R2VuZXJhdG9yPihnZW4sIHNsb3dQYXRoKSk7CiAgICAgfQogCi0gICAgdm9pZCBhZGRKU0NhbGwo
Q2FsbCBmYXN0Q2FsbCwgQ2FsbCBzbG93Q2FsbCwgRGF0YUxhYmVsUHRyIHRhcmdldFRvQ2hlY2ss
IENhbGxMaW5rSW5mbyogaW5mbykKKyAgICB2b2lkIGFkZEpTQ2FsbChMYWJlbCBzbG93UGF0aFN0
YXJ0LCBMYWJlbCBkb25lTG9jYXRpb24sIENhbGxMaW5rSW5mbyogaW5mbykKICAgICB7Ci0gICAg
ICAgIG1fanNDYWxscy5hcHBlbmQoSlNDYWxsUmVjb3JkKGZhc3RDYWxsLCBzbG93Q2FsbCwgdGFy
Z2V0VG9DaGVjaywgaW5mbykpOworICAgICAgICBtX2pzQ2FsbHMuYXBwZW5kKEpTQ2FsbFJlY29y
ZChzbG93UGF0aFN0YXJ0LCBkb25lTG9jYXRpb24sIGluZm8pKTsKICAgICB9CiAgICAgCi0gICAg
dm9pZCBhZGRKU0RpcmVjdENhbGwoQ2FsbCBjYWxsLCBMYWJlbCBzbG93UGF0aCwgQ2FsbExpbmtJ
bmZvKiBpbmZvKQorICAgIHZvaWQgYWRkSlNEaXJlY3RDYWxsKExhYmVsIHNsb3dQYXRoLCBDYWxs
TGlua0luZm8qIGluZm8pCiAgICAgewotICAgICAgICBtX2pzRGlyZWN0Q2FsbHMuYXBwZW5kKEpT
RGlyZWN0Q2FsbFJlY29yZChjYWxsLCBzbG93UGF0aCwgaW5mbykpOwotICAgIH0KLSAgICAKLSAg
ICB2b2lkIGFkZEpTRGlyZWN0VGFpbENhbGwoUGF0Y2hhYmxlSnVtcCBwYXRjaGFibGVKdW1wLCBD
YWxsIGNhbGwsIExhYmVsIHNsb3dQYXRoLCBDYWxsTGlua0luZm8qIGluZm8pCi0gICAgewotICAg
ICAgICBtX2pzRGlyZWN0VGFpbENhbGxzLmFwcGVuZChKU0RpcmVjdFRhaWxDYWxsUmVjb3JkKHBh
dGNoYWJsZUp1bXAsIGNhbGwsIHNsb3dQYXRoLCBpbmZvKSk7CisgICAgICAgIG1fanNEaXJlY3RD
YWxscy5hcHBlbmQoSlNEaXJlY3RDYWxsUmVjb3JkKHNsb3dQYXRoLCBpbmZvKSk7CiAgICAgfQog
ICAgIAogICAgIHZvaWQgYWRkV2Vha1JlZmVyZW5jZShKU0NlbGwqIHRhcmdldCkKQEAgLTMyOCw1
MiArMzIzLDI4IEBAIHByaXZhdGU6CiAKIAogICAgIHN0cnVjdCBKU0NhbGxSZWNvcmQgewotICAg
ICAgICBKU0NhbGxSZWNvcmQoQ2FsbCBmYXN0Q2FsbCwgQ2FsbCBzbG93Q2FsbCwgRGF0YUxhYmVs
UHRyIHRhcmdldFRvQ2hlY2ssIENhbGxMaW5rSW5mbyogaW5mbykKLSAgICAgICAgICAgIDogZmFz
dENhbGwoZmFzdENhbGwpCi0gICAgICAgICAgICAsIHNsb3dDYWxsKHNsb3dDYWxsKQotICAgICAg
ICAgICAgLCB0YXJnZXRUb0NoZWNrKHRhcmdldFRvQ2hlY2spCisgICAgICAgIEpTQ2FsbFJlY29y
ZChMYWJlbCBzbG93UGF0aFN0YXJ0LCBMYWJlbCBkb25lTG9jYXRpb24sIENhbGxMaW5rSW5mbyog
aW5mbykKKyAgICAgICAgICAgIDogc2xvd1BhdGhTdGFydChzbG93UGF0aFN0YXJ0KQorICAgICAg
ICAgICAgLCBkb25lTG9jYXRpb24oZG9uZUxvY2F0aW9uKQogICAgICAgICAgICAgLCBpbmZvKGlu
Zm8pCiAgICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChmYXN0Q2FsbC5pc0ZsYWdTZXQoQ2Fs
bDo6TmVhcikpOwotICAgICAgICAgICAgQVNTRVJUKHNsb3dDYWxsLmlzRmxhZ1NldChDYWxsOjpO
ZWFyKSk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIENhbGwgZmFzdENhbGw7Ci0gICAg
ICAgIENhbGwgc2xvd0NhbGw7Ci0gICAgICAgIERhdGFMYWJlbFB0ciB0YXJnZXRUb0NoZWNrOwor
ICAgICAgICBMYWJlbCBzbG93UGF0aFN0YXJ0OworICAgICAgICBMYWJlbCBkb25lTG9jYXRpb247
CiAgICAgICAgIENhbGxMaW5rSW5mbyogaW5mbzsKICAgICB9OwogICAgIAogICAgIHN0cnVjdCBK
U0RpcmVjdENhbGxSZWNvcmQgewotICAgICAgICBKU0RpcmVjdENhbGxSZWNvcmQoQ2FsbCBjYWxs
LCBMYWJlbCBzbG93UGF0aCwgQ2FsbExpbmtJbmZvKiBpbmZvKQotICAgICAgICAgICAgOiBjYWxs
KGNhbGwpCi0gICAgICAgICAgICAsIHNsb3dQYXRoKHNsb3dQYXRoKQotICAgICAgICAgICAgLCBp
bmZvKGluZm8pCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChjYWxsLmlzRmxhZ1NldChD
YWxsOjpOZWFyKSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIENhbGwgY2FsbDsKLSAg
ICAgICAgTGFiZWwgc2xvd1BhdGg7Ci0gICAgICAgIENhbGxMaW5rSW5mbyogaW5mbzsKLSAgICB9
OwotICAgIAotICAgIHN0cnVjdCBKU0RpcmVjdFRhaWxDYWxsUmVjb3JkIHsKLSAgICAgICAgSlNE
aXJlY3RUYWlsQ2FsbFJlY29yZChQYXRjaGFibGVKdW1wIHBhdGNoYWJsZUp1bXAsIENhbGwgY2Fs
bCwgTGFiZWwgc2xvd1BhdGgsIENhbGxMaW5rSW5mbyogaW5mbykKLSAgICAgICAgICAgIDogcGF0
Y2hhYmxlSnVtcChwYXRjaGFibGVKdW1wKQotICAgICAgICAgICAgLCBjYWxsKGNhbGwpCi0gICAg
ICAgICAgICAsIHNsb3dQYXRoKHNsb3dQYXRoKQorICAgICAgICBKU0RpcmVjdENhbGxSZWNvcmQo
TGFiZWwgc2xvd1BhdGgsIENhbGxMaW5rSW5mbyogaW5mbykKKyAgICAgICAgICAgIDogc2xvd1Bh
dGgoc2xvd1BhdGgpCiAgICAgICAgICAgICAsIGluZm8oaW5mbykKICAgICAgICAgewotICAgICAg
ICAgICAgQVNTRVJUKGNhbGwuaXNGbGFnU2V0KENhbGw6Ok5lYXIpICYmIGNhbGwuaXNGbGFnU2V0
KENhbGw6OlRhaWwpKTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgUGF0Y2hhYmxlSnVt
cCBwYXRjaGFibGVKdW1wOwotICAgICAgICBDYWxsIGNhbGw7CiAgICAgICAgIExhYmVsIHNsb3dQ
YXRoOwogICAgICAgICBDYWxsTGlua0luZm8qIGluZm87CiAgICAgfTsKLQogICAgIAogICAgIFZl
Y3RvcjxJbmxpbmVDYWNoZVdyYXBwZXI8SklUR2V0QnlJZEdlbmVyYXRvcj4sIDQ+IG1fZ2V0QnlJ
ZHM7CiAgICAgVmVjdG9yPElubGluZUNhY2hlV3JhcHBlcjxKSVRHZXRCeUlkV2l0aFRoaXNHZW5l
cmF0b3I+LCA0PiBtX2dldEJ5SWRzV2l0aFRoaXM7CkBAIC0zODYsNyArMzU3LDYgQEAgcHJpdmF0
ZToKICAgICBWZWN0b3I8SW5saW5lQ2FjaGVXcmFwcGVyPEpJVFByaXZhdGVCcmFuZEFjY2Vzc0dl
bmVyYXRvcj4sIDQ+IG1fcHJpdmF0ZUJyYW5kQWNjZXNzZXM7CiAgICAgVmVjdG9yPEpTQ2FsbFJl
Y29yZCwgND4gbV9qc0NhbGxzOwogICAgIFZlY3RvcjxKU0RpcmVjdENhbGxSZWNvcmQsIDQ+IG1f
anNEaXJlY3RDYWxsczsKLSAgICBWZWN0b3I8SlNEaXJlY3RUYWlsQ2FsbFJlY29yZCwgND4gbV9q
c0RpcmVjdFRhaWxDYWxsczsKICAgICBTZWdtZW50ZWRWZWN0b3I8T1NSRXhpdENvbXBpbGF0aW9u
SW5mbywgND4gbV9leGl0Q29tcGlsYXRpb25JbmZvOwogICAgIFZlY3RvcjxWZWN0b3I8TGFiZWw+
PiBtX2V4aXRTaXRlTGFiZWxzOwogICAgIFZlY3RvcjxERkc6Ok9TUkVudHJ5RGF0YT4gbV9vc3JF
bnRyeTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVy
Q29tbW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09T
UkV4aXRDb21waWxlckNvbW1vbi5jcHAJKHJldmlzaW9uIDI3NzQ0MCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjA5LDcgKzIwOSw3IEBAIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRy
eVB0clQKICAgICAgICAgICAgICAgICBiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlci0+Z2V0Q2Fs
bExpbmtJbmZvRm9yQnl0ZWNvZGVJbmRleChjYWxsQnl0ZWNvZGVJbmRleCk7CiAgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVChjYWxsTGlua0luZm8pOwogCi0gICAgICAgICAgICBqdW1wVGFyZ2V0
ID0gY2FsbExpbmtJbmZvLT5jYWxsUmV0dXJuTG9jYXRpb24oKS5yZXRhZ2dlZDxKU0VudHJ5UHRy
VGFnPigpOworICAgICAgICAgICAganVtcFRhcmdldCA9IGNhbGxMaW5rSW5mby0+ZG9uZUxvY2F0
aW9uKCkucmV0YWdnZWQ8SlNFbnRyeVB0clRhZz4oKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25z
LmNwcAkocmV2aXNpb24gMjc3NDQwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdP
cGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYxNiw3ICszNjE2LDcgQEAgSlNDX0RF
RklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkxpbmtEaQogICAgICAgICAgICAgY29kZVB0ciA9
IGZ1bmN0aW9uRXhlY3V0YWJsZS0+ZW50cnlwb2ludEZvcihraW5kLCBBcml0eUNoZWNrTm90UmVx
dWlyZWQpOwogICAgIH0KICAgICAKLSAgICBsaW5rRGlyZWN0Rm9yKGNhbGxGcmFtZSwgKmNhbGxM
aW5rSW5mbywgY29kZUJsb2NrLCBjb2RlUHRyKTsKKyAgICBsaW5rRGlyZWN0Q2FsbChjYWxsRnJh
bWUsICpjYWxsTGlua0luZm8sIGNvZGVCbG9jaywgY29kZVB0cik7CiB9CiAKIEpTQ19ERUZJTkVf
SklUX09QRVJBVElPTihvcGVyYXRpb25UcmlnZ2VyUmVvcHRpbWl6YXRpb25Ob3csIHZvaWQsIChD
b2RlQmxvY2sqIGNvZGVCbG9jaywgQ29kZUJsb2NrKiBvcHRpbWl6ZWRDb2RlQmxvY2ssIE9TUkV4
aXRCYXNlKiBleGl0KSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkocmV2aXNpb24gMjc3NDQwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtODM4LDE5ICs4MzgsMTYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwo
Tm9kZSogbm9kZQogICAgICAgICBpZiAoaXNUYWlsKSB7CiAgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVChub2RlLT5vcCgpID09IERpcmVjdFRhaWxDYWxsKTsKICAgICAgICAgICAgIAotICAgICAg
ICAgICAgSklUQ29tcGlsZXI6OlBhdGNoYWJsZUp1bXAgcGF0Y2hhYmxlSnVtcCA9IG1faml0LnBh
dGNoYWJsZUp1bXAoKTsKICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpMYWJlbCBtYWluUGF0aCA9
IG1faml0LmxhYmVsKCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIG1faml0LmVtaXRTdG9y
ZUNhbGxTaXRlSW5kZXgoY2FsbFNpdGUpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBpbmZv
LT5zZXRGcmFtZVNodWZmbGVEYXRhKHNodWZmbGVEYXRhKTsKLSAgICAgICAgICAgIENhbGxGcmFt
ZVNodWZmbGVyKG1faml0LCBzaHVmZmxlRGF0YSkucHJlcGFyZUZvclRhaWxDYWxsKCk7Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGwgPSBtX2ppdC5uZWFy
VGFpbENhbGwoKTsKLSAgICAgICAgICAgIAorICAgICAgICAgICAgaW5mby0+ZW1pdERpcmVjdFRh
aWxDYWxsRmFzdFBhdGgobV9qaXQsIFsmXSB7CisgICAgICAgICAgICAgICAgaW5mby0+c2V0RnJh
bWVTaHVmZmxlRGF0YShzaHVmZmxlRGF0YSk7CisgICAgICAgICAgICAgICAgQ2FsbEZyYW1lU2h1
ZmZsZXIobV9qaXQsIHNodWZmbGVEYXRhKS5wcmVwYXJlRm9yVGFpbENhbGwoKTsKKyAgICAgICAg
ICAgIH0pOworCiAgICAgICAgICAgICBKSVRDb21waWxlcjo6TGFiZWwgc2xvd1BhdGggPSBtX2pp
dC5sYWJlbCgpOwotICAgICAgICAgICAgcGF0Y2hhYmxlSnVtcC5tX2p1bXAubGlua1RvKHNsb3dQ
YXRoLCAmbV9qaXQpOwotICAgICAgICAgICAgCiAgICAgICAgICAgICBzaWxlbnRTcGlsbEFsbFJl
Z2lzdGVycyhJbnZhbGlkR1BSUmVnKTsKICAgICAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uTGlua0RpcmVjdENhbGwsIGluZm8sIGNhbGxlZVBheWxvYWRHUFIpOwogICAgICAgICAgICAg
c2lsZW50RmlsbEFsbFJlZ2lzdGVycygpOwpAQCAtODU5LDcgKzg1Niw3IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUKICAgICAgICAgICAgIAogICAgICAgICAgICAg
dXNlQ2hpbGRyZW4obm9kZSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIG1faml0LmFkZEpT
RGlyZWN0VGFpbENhbGwocGF0Y2hhYmxlSnVtcCwgY2FsbCwgc2xvd1BhdGgsIGluZm8pOworICAg
ICAgICAgICAgbV9qaXQuYWRkSlNEaXJlY3RDYWxsKHNsb3dQYXRoLCBpbmZvKTsKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAKQEAgLTg2Nyw3ICs4NjQsNyBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlKiBub2RlCiAgICAgICAgIAogICAgICAgICBt
X2ppdC5lbWl0U3RvcmVDYWxsU2l0ZUluZGV4KGNhbGxTaXRlKTsKICAgICAgICAgCi0gICAgICAg
IEpJVENvbXBpbGVyOjpDYWxsIGNhbGwgPSBtX2ppdC5uZWFyQ2FsbCgpOworICAgICAgICBpbmZv
LT5lbWl0RGlyZWN0RmFzdFBhdGgobV9qaXQpOwogICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBk
b25lID0gbV9qaXQuanVtcCgpOwogICAgICAgICAKICAgICAgICAgSklUQ29tcGlsZXI6OkxhYmVs
IHNsb3dQYXRoID0gbV9qaXQubGFiZWwoKTsKQEAgLTg3OSw3ICs4NzYsNyBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlKiBub2RlCiAgICAgICAgIAogICAgICAgICBzZXRSZXN1
bHRBbmRSZXNldFN0YWNrKCk7CiAgICAgICAgIAotICAgICAgICBtX2ppdC5hZGRKU0RpcmVjdENh
bGwoY2FsbCwgc2xvd1BhdGgsIGluZm8pOworICAgICAgICBtX2ppdC5hZGRKU0RpcmVjdENhbGwo
c2xvd1BhdGgsIGluZm8pOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIApAQCAtODg4LDIx
ICs4ODUsMjUgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZQogICAg
IHNsb3dQYXRoLmFwcGVuZChtX2ppdC5icmFuY2hJZk5vdENlbGwoSlNWYWx1ZVJlZ3MoY2FsbGVl
VGFnR1BSLCBjYWxsZWVQYXlsb2FkR1BSKSkpOwogICAgIHNsb3dQYXRoLmFwcGVuZChtX2ppdC5i
cmFuY2hQdHJXaXRoUGF0Y2goTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBjYWxsZWVQYXlsb2Fk
R1BSLCB0YXJnZXRUb0NoZWNrKSk7CiAKKyAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dD
YXNlczsKICAgICBpZiAoaXNUYWlsKSB7Ci0gICAgICAgIGlmIChub2RlLT5vcCgpID09IFRhaWxD
YWxsKSB7Ci0gICAgICAgICAgICBpbmZvLT5zZXRGcmFtZVNodWZmbGVEYXRhKHNodWZmbGVEYXRh
KTsKLSAgICAgICAgICAgIENhbGxGcmFtZVNodWZmbGVyKG1faml0LCBzaHVmZmxlRGF0YSkucHJl
cGFyZUZvclRhaWxDYWxsKCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBtX2ppdC5l
bWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7Ci0gICAgICAgICAgICBtX2ppdC5wcmVwYXJlRm9yVGFp
bENhbGxTbG93KCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBm
YXN0Q2FsbCA9IGlzVGFpbCA/IG1faml0Lm5lYXJUYWlsQ2FsbCgpIDogbV9qaXQubmVhckNhbGwo
KTsKKyAgICAgICAgc2xvd0Nhc2VzID0gaW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgobV9qaXQs
IGNhbGxlZVBheWxvYWRHUFIsIEludmFsaWRHUFJSZWcsIENhbGxMaW5rSW5mbzo6VXNlRGF0YUlD
OjpObywgWyZdIHsKKyAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IFRhaWxDYWxsKSB7Cisg
ICAgICAgICAgICAgICAgaW5mby0+c2V0RnJhbWVTaHVmZmxlRGF0YShzaHVmZmxlRGF0YSk7Cisg
ICAgICAgICAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIobV9qaXQsIHNodWZmbGVEYXRhKS5wcmVw
YXJlRm9yVGFpbENhbGwoKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg
bV9qaXQuZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOworICAgICAgICAgICAgICAgIG1faml0LnBy
ZXBhcmVGb3JUYWlsQ2FsbFNsb3coKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAg
fSBlbHNlCisgICAgICAgIHNsb3dDYXNlcyA9IGluZm8tPmVtaXRGYXN0UGF0aChtX2ppdCwgY2Fs
bGVlUGF5bG9hZEdQUiwgSW52YWxpZEdQUlJlZywgQ2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6Ok5v
KTsKIAogICAgIEpJVENvbXBpbGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7CiAKICAgICBz
bG93UGF0aC5saW5rKCZtX2ppdCk7CisgICAgc2xvd0Nhc2VzLmxpbmsoJm1faml0KTsKKyAgICBh
dXRvIHNsb3dQYXRoU3RhcnQgPSBtX2ppdC5sYWJlbCgpOwogCiAgICAgaWYgKG5vZGUtPm9wKCkg
PT0gVGFpbENhbGwpIHsKICAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIgY2FsbEZyYW1lU2h1ZmZs
ZXIobV9qaXQsIHNodWZmbGVEYXRhKTsKQEAgLTkyNywxOCArOTI4LDE4IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUKICAgICAgICAgICAgIG1faml0LmVtaXRSZXN0
b3JlQ2FsbGVlU2F2ZXMoKTsKICAgICB9CiAKLSAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIo
aW5mbyksIEdQUkluZm86OnJlZ1QyKTsKICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHI6Ondl
YWtQb2ludGVyKG1fZ3JhcGgsIGdsb2JhbE9iamVjdCksIEdQUkluZm86OnJlZ1QzKTsKLSAgICBK
SVRDb21waWxlcjo6Q2FsbCBzbG93Q2FsbCA9IG1faml0Lm5lYXJDYWxsKCk7CisgICAgaW5mby0+
ZW1pdFNsb3dQYXRoKHZtKCksIG1faml0KTsKIAogICAgIGRvbmUubGluaygmbV9qaXQpOworICAg
IGF1dG8gZG9uZUxvY2F0aW9uID0gbV9qaXQubGFiZWwoKTsKIAogICAgIGlmIChpc1RhaWwpCiAg
ICAgICAgIG1faml0LmFib3J0V2l0aFJlYXNvbihKSVREaWRSZXR1cm5Gcm9tVGFpbENhbGwpOwog
ICAgIGVsc2UKICAgICAgICAgc2V0UmVzdWx0QW5kUmVzZXRTdGFjaygpOwogCi0gICAgbV9qaXQu
YWRkSlNDYWxsKGZhc3RDYWxsLCBzbG93Q2FsbCwgdGFyZ2V0VG9DaGVjaywgaW5mbyk7CisgICAg
bV9qaXQuYWRkSlNDYWxsKHNsb3dQYXRoU3RhcnQsIGRvbmVMb2NhdGlvbiwgaW5mbyk7CiB9CiAK
IHRlbXBsYXRlPGJvb2wgc3RyaWN0PgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCShyZXZpc2lvbiAyNzc0NDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC04MzAsMTggKzgzMCwxNCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChO
b2RlKiBub2RlCiAgICAgICAgIGlmIChpc1RhaWwpIHsKICAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKG5vZGUtPm9wKCkgPT0gRGlyZWN0VGFpbENhbGwpOwogICAgICAgICAgICAgCi0gICAgICAg
ICAgICBKSVRDb21waWxlcjo6UGF0Y2hhYmxlSnVtcCBwYXRjaGFibGVKdW1wID0gbV9qaXQucGF0
Y2hhYmxlSnVtcCgpOwogICAgICAgICAgICAgSklUQ29tcGlsZXI6OkxhYmVsIG1haW5QYXRoID0g
bV9qaXQubGFiZWwoKTsKLSAgICAgICAgICAgIAogICAgICAgICAgICAgbV9qaXQuZW1pdFN0b3Jl
Q2FsbFNpdGVJbmRleChjYWxsU2l0ZSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGNhbGxM
aW5rSW5mby0+c2V0RnJhbWVTaHVmZmxlRGF0YShzaHVmZmxlRGF0YSk7Ci0gICAgICAgICAgICBD
YWxsRnJhbWVTaHVmZmxlcihtX2ppdCwgc2h1ZmZsZURhdGEpLnByZXBhcmVGb3JUYWlsQ2FsbCgp
OwotICAgICAgICAgICAgCi0gICAgICAgICAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsID0gbV9q
aXQubmVhclRhaWxDYWxsKCk7Ci0gICAgICAgICAgICAKKworICAgICAgICAgICAgY2FsbExpbmtJ
bmZvLT5lbWl0RGlyZWN0VGFpbENhbGxGYXN0UGF0aChtX2ppdCwgWyZdIHsKKyAgICAgICAgICAg
ICAgICBjYWxsTGlua0luZm8tPnNldEZyYW1lU2h1ZmZsZURhdGEoc2h1ZmZsZURhdGEpOworICAg
ICAgICAgICAgICAgIENhbGxGcmFtZVNodWZmbGVyKG1faml0LCBzaHVmZmxlRGF0YSkucHJlcGFy
ZUZvclRhaWxDYWxsKCk7CisgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIEpJVENvbXBpbGVy
OjpMYWJlbCBzbG93UGF0aCA9IG1faml0LmxhYmVsKCk7Ci0gICAgICAgICAgICBwYXRjaGFibGVK
dW1wLm1fanVtcC5saW5rVG8oc2xvd1BhdGgsICZtX2ppdCk7CiAgICAgICAgICAgICAKICAgICAg
ICAgICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKEludmFsaWRHUFJSZWcpOwogICAgICAgICAg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25MaW5rRGlyZWN0Q2FsbCwgY2FsbExpbmtJbmZvLCBj
YWxsZWVHUFIpOwpAQCAtODUxLDE1ICs4NDcsMTMgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1p
dENhbGwoTm9kZSogbm9kZQogICAgICAgICAgICAgCiAgICAgICAgICAgICB1c2VDaGlsZHJlbihu
b2RlKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgbV9qaXQuYWRkSlNEaXJlY3RUYWlsQ2Fs
bChwYXRjaGFibGVKdW1wLCBjYWxsLCBzbG93UGF0aCwgY2FsbExpbmtJbmZvKTsKKyAgICAgICAg
ICAgIG1faml0LmFkZEpTRGlyZWN0Q2FsbChzbG93UGF0aCwgY2FsbExpbmtJbmZvKTsKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgSklUQ29tcGlsZXI6
OkxhYmVsIG1haW5QYXRoID0gbV9qaXQubGFiZWwoKTsKLSAgICAgICAgCiAgICAgICAgIG1faml0
LmVtaXRTdG9yZUNhbGxTaXRlSW5kZXgoY2FsbFNpdGUpOwotICAgICAgICAKLSAgICAgICAgSklU
Q29tcGlsZXI6OkNhbGwgY2FsbCA9IG1faml0Lm5lYXJDYWxsKCk7CisgICAgICAgIGNhbGxMaW5r
SW5mby0+ZW1pdERpcmVjdEZhc3RQYXRoKG1faml0KTsKICAgICAgICAgSklUQ29tcGlsZXI6Okp1
bXAgZG9uZSA9IG1faml0Lmp1bXAoKTsKICAgICAgICAgCiAgICAgICAgIEpJVENvbXBpbGVyOjpM
YWJlbCBzbG93UGF0aCA9IG1faml0LmxhYmVsKCk7CkBAIC04NzQsMzAgKzg2OCwyOSBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlKiBub2RlCiAgICAgICAgIAogICAgICAgICBz
ZXRSZXN1bHRBbmRSZXNldFN0YWNrKCk7CiAgICAgICAgIAotICAgICAgICBtX2ppdC5hZGRKU0Rp
cmVjdENhbGwoY2FsbCwgc2xvd1BhdGgsIGNhbGxMaW5rSW5mbyk7CisgICAgICAgIG1faml0LmFk
ZEpTRGlyZWN0Q2FsbChzbG93UGF0aCwgY2FsbExpbmtJbmZvKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KICAgICAKICAgICBtX2ppdC5lbWl0U3RvcmVDYWxsU2l0ZUluZGV4KGNhbGxTaXRlKTsK
ICAgICAKLSAgICBKSVRDb21waWxlcjo6RGF0YUxhYmVsUHRyIHRhcmdldFRvQ2hlY2s7Ci0gICAg
SklUQ29tcGlsZXI6Okp1bXAgc2xvd1BhdGggPSBtX2ppdC5icmFuY2hQdHJXaXRoUGF0Y2goTWFj
cm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBjYWxsZWVHUFIsIHRhcmdldFRvQ2hlY2ssIFRydXN0ZWRJ
bW1QdHIobnVsbHB0cikpOwotCisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93Q2FzZXM7
CiAgICAgaWYgKGlzVGFpbCkgewotICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBUYWlsQ2FsbCkg
ewotICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRGcmFtZVNodWZmbGVEYXRhKHNodWZmbGVE
YXRhKTsKLSAgICAgICAgICAgIENhbGxGcmFtZVNodWZmbGVyKG1faml0LCBzaHVmZmxlRGF0YSku
cHJlcGFyZUZvclRhaWxDYWxsKCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBtX2pp
dC5lbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7Ci0gICAgICAgICAgICBtX2ppdC5wcmVwYXJlRm9y
VGFpbENhbGxTbG93KCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBKSVRDb21waWxlcjo6Q2Fs
bCBmYXN0Q2FsbCA9IGlzVGFpbCA/IG1faml0Lm5lYXJUYWlsQ2FsbCgpIDogbV9qaXQubmVhckNh
bGwoKTsKLQorICAgICAgICBzbG93Q2FzZXMgPSBjYWxsTGlua0luZm8tPmVtaXRUYWlsQ2FsbEZh
c3RQYXRoKG1faml0LCBjYWxsZWVHUFIsIEludmFsaWRHUFJSZWcsIENhbGxMaW5rSW5mbzo6VXNl
RGF0YUlDOjpObywgWyZdIHsKKyAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IFRhaWxDYWxs
KSB7CisgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRGcmFtZVNodWZmbGVEYXRhKHNo
dWZmbGVEYXRhKTsKKyAgICAgICAgICAgICAgICBDYWxsRnJhbWVTaHVmZmxlcihtX2ppdCwgc2h1
ZmZsZURhdGEpLnByZXBhcmVGb3JUYWlsQ2FsbCgpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICBtX2ppdC5lbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CisgICAgICAgICAg
ICAgICAgbV9qaXQucHJlcGFyZUZvclRhaWxDYWxsU2xvdygpOworICAgICAgICAgICAgfQorICAg
ICAgICB9KTsKKyAgICB9IGVsc2UKKyAgICAgICAgc2xvd0Nhc2VzID0gY2FsbExpbmtJbmZvLT5l
bWl0RmFzdFBhdGgobV9qaXQsIGNhbGxlZUdQUiwgSW52YWxpZEdQUlJlZywgQ2FsbExpbmtJbmZv
OjpVc2VEYXRhSUM6Ok5vKTsKICAgICBKSVRDb21waWxlcjo6SnVtcCBkb25lID0gbV9qaXQuanVt
cCgpOwogCi0gICAgc2xvd1BhdGgubGluaygmbV9qaXQpOworICAgIHNsb3dDYXNlcy5saW5rKCZt
X2ppdCk7CisgICAgYXV0byBzbG93UGF0aFN0YXJ0ID0gbV9qaXQubGFiZWwoKTsKIAogICAgIGlm
IChub2RlLT5vcCgpID09IFRhaWxDYWxsKSB7CiAgICAgICAgIENhbGxGcmFtZVNodWZmbGVyIGNh
bGxGcmFtZVNodWZmbGVyKG1faml0LCBzaHVmZmxlRGF0YSk7CkBAIC05MDUsMjMgKzg5OCwyMiBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlKiBub2RlCiAgICAgICAgIGNhbGxG
cmFtZVNodWZmbGVyLnByZXBhcmVGb3JTbG93UGF0aCgpOwogICAgIH0gZWxzZSB7CiAgICAgICAg
IG1faml0Lm1vdmUoY2FsbGVlR1BSLCBHUFJJbmZvOjpyZWdUMCk7IC8vIENhbGxlZSBuZWVkcyB0
byBiZSBpbiByZWdUMAotCiAgICAgICAgIGlmIChpc1RhaWwpCiAgICAgICAgICAgICBtX2ppdC5l
bWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7IC8vIFRoaXMgbmVlZHMgdG8gaGFwcGVuIGFmdGVyIHdl
IG1vdmVkIGNhbGxlZUdQUiB0byByZWdUMAogICAgIH0KIAotICAgIG1faml0Lm1vdmUoVHJ1c3Rl
ZEltbVB0cihjYWxsTGlua0luZm8pLCBHUFJJbmZvOjpyZWdUMik7IC8vIExpbmsgaW5mbyBuZWVk
cyB0byBiZSBpbiByZWdUMgogICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50
ZXIobV9ncmFwaCwgZ2xvYmFsT2JqZWN0KSwgR1BSSW5mbzo6cmVnVDMpOyAvLyBKU0dsb2JhbE9i
amVjdCBuZWVkcyB0byBiZSBpbiByZWdUMwotICAgIEpJVENvbXBpbGVyOjpDYWxsIHNsb3dDYWxs
ID0gbV9qaXQubmVhckNhbGwoKTsKKyAgICBjYWxsTGlua0luZm8tPmVtaXRTbG93UGF0aCh2bSgp
LCBtX2ppdCk7CiAKICAgICBkb25lLmxpbmsoJm1faml0KTsKKyAgICBhdXRvIGRvbmVMb2NhdGlv
biA9IG1faml0LmxhYmVsKCk7CiAKICAgICBpZiAoaXNUYWlsKQogICAgICAgICBtX2ppdC5hYm9y
dFdpdGhSZWFzb24oSklURGlkUmV0dXJuRnJvbVRhaWxDYWxsKTsKICAgICBlbHNlCiAgICAgICAg
IHNldFJlc3VsdEFuZFJlc2V0U3RhY2soKTsKIAotICAgIG1faml0LmFkZEpTQ2FsbChmYXN0Q2Fs
bCwgc2xvd0NhbGwsIHRhcmdldFRvQ2hlY2ssIGNhbGxMaW5rSW5mbyk7CisgICAgbV9qaXQuYWRk
SlNDYWxsKHNsb3dQYXRoU3RhcnQsIGRvbmVMb2NhdGlvbiwgY2FsbExpbmtJbmZvKTsKIH0KIAog
Ly8gQ2xhbmcgc2hvdWxkIGFsbG93IHVucmVhY2hhYmxlIFtbY2xhbmc6OmZhbGx0aHJvdWdoXV0g
aW4gdGVtcGxhdGUgZnVuY3Rpb25zIGlmIGFueSB0ZW1wbGF0ZSBleHBhbnNpb24gdXNlcyBpdApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAko
cmV2aXNpb24gMjc3NDQwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRG
R1RvQjMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NzE3LDI0ICs5NzE3LDIwIEBAIHByaXZhdGU6
CiAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6dGFnRm9yKFZpcnR1YWxSZWdpc3Rl
cihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykpKTsKIAogICAgICAg
ICAgICAgICAgIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvID0gaml0LmNvZGVCbG9jaygpLT5h
ZGRDYWxsTGlua0luZm8obm9kZS0+b3JpZ2luLnNlbWFudGljKTsKKyAgICAgICAgICAgICAgICBj
YWxsTGlua0luZm8tPnNldFVwQ2FsbCgKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+b3AoKSA9
PSBDb25zdHJ1Y3QgPyBDYWxsTGlua0luZm86OkNvbnN0cnVjdCA6IENhbGxMaW5rSW5mbzo6Q2Fs
bCwgR1BSSW5mbzo6cmVnVDApOwogCi0gICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpEYXRh
TGFiZWxQdHIgdGFyZ2V0VG9DaGVjazsKLSAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1
bXAgc2xvd1BhdGggPSBqaXQuYnJhbmNoUHRyV2l0aFBhdGNoKAotICAgICAgICAgICAgICAgICAg
ICBDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCBHUFJJbmZvOjpyZWdUMCwgdGFyZ2V0VG9DaGVjaywK
LSAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG51bGxwdHIp
KTsKLQotICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBmYXN0Q2FsbCA9IGppdC5u
ZWFyQ2FsbCgpOworICAgICAgICAgICAgICAgIGF1dG8gc2xvd1BhdGggPSBjYWxsTGlua0luZm8t
PmVtaXRGYXN0UGF0aChqaXQsIEdQUkluZm86OnJlZ1QwLCBJbnZhbGlkR1BSUmVnLCBDYWxsTGlu
a0luZm86OlVzZURhdGFJQzo6Tm8pOwogICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVt
cCBkb25lID0gaml0Lmp1bXAoKTsKIAogICAgICAgICAgICAgICAgIHNsb3dQYXRoLmxpbmsoJmpp
dCk7Ci0KLSAgICAgICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1Q
dHIoY2FsbExpbmtJbmZvKSwgR1BSSW5mbzo6cmVnVDIpOworICAgICAgICAgICAgICAgIGF1dG8g
c2xvd1BhdGhTdGFydCA9IGppdC5sYWJlbCgpOwogICAgICAgICAgICAgICAgIGppdC5tb3ZlKEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihqaXQuY29kZUJsb2NrKCktPmdsb2JhbE9iamVjdEZv
cihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgR1BSSW5mbzo6cmVnVDMpOwotICAgICAgICAgICAg
ICAgIENDYWxsSGVscGVyczo6Q2FsbCBzbG93Q2FsbCA9IGppdC5uZWFyQ2FsbCgpOworICAgICAg
ICAgICAgICAgIGNhbGxMaW5rSW5mby0+ZW1pdFNsb3dQYXRoKCp2bSwgaml0KTsKKwogICAgICAg
ICAgICAgICAgIGRvbmUubGluaygmaml0KTsKIAotICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5m
by0+c2V0VXBDYWxsKAotICAgICAgICAgICAgICAgICAgICBub2RlLT5vcCgpID09IENvbnN0cnVj
dCA/IENhbGxMaW5rSW5mbzo6Q29uc3RydWN0IDogQ2FsbExpbmtJbmZvOjpDYWxsLCBHUFJJbmZv
OjpyZWdUMCk7CisgICAgICAgICAgICAgICAgYXV0byBkb25lTG9jYXRpb24gPSBqaXQubGFiZWwo
KTsKIAogICAgICAgICAgICAgICAgIGppdC5hZGRQdHIoCiAgICAgICAgICAgICAgICAgICAgIEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKC1wYXJhbXMucHJvYygpLmZyYW1lU2l6ZSgpKSwKQEAg
LTk3NDIsMTMgKzk3MzgsOSBAQCBwcml2YXRlOgogCiAgICAgICAgICAgICAgICAgaml0LmFkZExp
bmtUYXNrKAogICAgICAgICAgICAgICAgICAgICBbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKSVRUaHVu
a1B0clRhZz4gbGlua0NhbGwgPSB2bS0+Z2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9y
KS5jb2RlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoc2xvd0Nh
bGwsIEZ1bmN0aW9uUHRyPEpJVFRodW5rUHRyVGFnPihsaW5rQ2FsbCkpOwotCi0gICAgICAgICAg
ICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldENhbGxMb2NhdGlvbnMoCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4obGlu
a0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8SlNJbnRlcm5hbFB0clRhZz4oc2xvd0NhbGwpKSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFs
UHRyVGFnPihsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4odGFyZ2V0VG9D
aGVjaykpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25P
Zk5lYXJDYWxsPEpTSW50ZXJuYWxQdHJUYWc+KGZhc3RDYWxsKSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBjYWxsTGlua0luZm8tPnNldENvZGVMb2NhdGlvbnMoCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KHNsb3dQ
YXRoU3RhcnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRp
b25PZjxKU0ludGVybmFsUHRyVGFnPihkb25lTG9jYXRpb24pKTsKICAgICAgICAgICAgICAgICAg
ICAgfSk7CiAgICAgICAgICAgICB9KTsKIApAQCAtOTg1Nyw2MyArOTg0OSw1MCBAQCBwcml2YXRl
OgogICAgICAgICAgICAgICAgICAgICBzaHVmZmxlRGF0YS5zZXR1cENhbGxlZVNhdmVSZWdpc3Rl
cnMoaml0LmNvZGVCbG9jaygpKTsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAg
ICAgICAgIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvID0gaml0LmNvZGVCbG9jaygpLT5hZGRD
YWxsTGlua0luZm8obm9kZS0+b3JpZ2luLnNlbWFudGljKTsKKyAgICAgICAgICAgICAgICAgICAg
Y2FsbExpbmtJbmZvLT5zZXRVcENhbGwoQ2FsbExpbmtJbmZvOjpEaXJlY3RUYWlsQ2FsbCwgSW52
YWxpZEdQUlJlZyk7CiAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBD
Q2FsbEhlbHBlcnM6OlBhdGNoYWJsZUp1bXAgcGF0Y2hhYmxlSnVtcCA9IGppdC5wYXRjaGFibGVK
dW1wKCk7CiAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6TGFiZWwgbWFpblBhdGgg
PSBqaXQubGFiZWwoKTsKLSAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAg
IGppdC5zdG9yZTMyKAogICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tMzIoY2FsbFNpdGVJbmRleC5iaXRzKCkpLAogICAgICAgICAgICAgICAgICAgICAgICAg
Q0NhbGxIZWxwZXJzOjp0YWdGb3IoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzKSkpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAg
ICAgICAgICBjYWxsTGlua0luZm8tPnNldEZyYW1lU2h1ZmZsZURhdGEoc2h1ZmZsZURhdGEpOwot
ICAgICAgICAgICAgICAgICAgICBDYWxsRnJhbWVTaHVmZmxlcihqaXQsIHNodWZmbGVEYXRhKS5w
cmVwYXJlRm9yVGFpbENhbGwoKTsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAg
ICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBjYWxsID0gaml0Lm5lYXJUYWlsQ2FsbCgpOworICAg
ICAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPmVtaXREaXJlY3RUYWlsQ2FsbEZhc3RQYXRo
KGppdCwgWyZdIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0RnJh
bWVTaHVmZmxlRGF0YShzaHVmZmxlRGF0YSk7CisgICAgICAgICAgICAgICAgICAgICAgICBDYWxs
RnJhbWVTaHVmZmxlcihqaXQsIHNodWZmbGVEYXRhKS5wcmVwYXJlRm9yVGFpbENhbGwoKTsKKyAg
ICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
ICAgICAgICBqaXQuYWJvcnRXaXRoUmVhc29uKEpJVERpZFJldHVybkZyb21UYWlsQ2FsbCk7CiAg
ICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okxh
YmVsIHNsb3dQYXRoID0gaml0LmxhYmVsKCk7Ci0gICAgICAgICAgICAgICAgICAgIHBhdGNoYWJs
ZUp1bXAubV9qdW1wLmxpbmtUbyhzbG93UGF0aCwgJmppdCk7CiAgICAgICAgICAgICAgICAgICAg
IGNhbGxPcGVyYXRpb24oCiAgICAgICAgICAgICAgICAgICAgICAgICAqc3RhdGUsIHRvU2F2ZSwg
aml0LAogICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+b3JpZ2luLnNlbWFudGljLCBleGNl
cHRpb25zLmdldCgpLCBvcGVyYXRpb25MaW5rRGlyZWN0Q2FsbCwKICAgICAgICAgICAgICAgICAg
ICAgICAgIEludmFsaWRHUFJSZWcsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihjYWxsTGlu
a0luZm8pLCBjYWxsZWVHUFIpLmNhbGwoKTsKICAgICAgICAgICAgICAgICAgICAgaml0Lmp1bXAo
KS5saW5rVG8obWFpblBhdGgsICZqaXQpOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAg
ICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRVcENhbGwoQ2FsbExpbmtJbmZvOjpEaXJlY3RU
YWlsQ2FsbCwgSW52YWxpZEdQUlJlZyk7CiAgICAgICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5m
by0+c2V0RXhlY3V0YWJsZUR1cmluZ0NvbXBpbGF0aW9uKGV4ZWN1dGFibGUpOwogICAgICAgICAg
ICAgICAgICAgICBpZiAobnVtQWxsb2NhdGVkQXJncyA+IG51bVBhc3NlZEFyZ3MpCiAgICAgICAg
ICAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldE1heEFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzKG51bUFsbG9jYXRlZEFyZ3MpOwogICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAg
ICAgICAgICAgICAgaml0LmFkZExpbmtUYXNrKAotICAgICAgICAgICAgICAgICAgICAgICAgWz1d
IChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
Q29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gcGF0Y2hhYmxlSnVtcExvY2F0aW9u
ID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KHBhdGNoYWJsZUp1bXAp
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvZGVMb2NhdGlvbk5lYXJDYWxsPEpTSW50
ZXJuYWxQdHJUYWc+IGNhbGxMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxs
PEpTSW50ZXJuYWxQdHJUYWc+KGNhbGwpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIENv
ZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IHNsb3dQYXRoTG9jYXRpb24gPSBsaW5r
QnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oc2xvd1BhdGgpOwotCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRDYWxsTG9jYXRpb25zKAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRjaGFibGVKdW1wTG9jYXRpb24sCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoTG9jYXRpb24sCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNhbGxMb2NhdGlvbik7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICB9KTsKKyAgICAgICAgICAgICAgICAgICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1
ZmZlciYgbGlua0J1ZmZlcikgeworICAgICAgICAgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZv
LT5zZXRDb2RlTG9jYXRpb25zKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZm
ZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihzbG93UGF0aCksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4oKSk7Cisg
ICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIENhbGxMaW5r
SW5mbyogY2FsbExpbmtJbmZvID0gaml0LmNvZGVCbG9jaygpLT5hZGRDYWxsTGlua0luZm8obm9k
ZS0+b3JpZ2luLnNlbWFudGljKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBD
Q2FsbEhlbHBlcnM6OkxhYmVsIG1haW5QYXRoID0gaml0LmxhYmVsKCk7CisgICAgICAgICAgICAg
ICAgY2FsbExpbmtJbmZvLT5zZXRVcENhbGwoCisgICAgICAgICAgICAgICAgICAgIGlzQ29uc3Ry
dWN0ID8gQ2FsbExpbmtJbmZvOjpEaXJlY3RDb25zdHJ1Y3QgOiBDYWxsTGlua0luZm86OkRpcmVj
dENhbGwsIEludmFsaWRHUFJSZWcpOwogCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpM
YWJlbCBtYWluUGF0aCA9IGppdC5sYWJlbCgpOwogICAgICAgICAgICAgICAgIGppdC5zdG9yZTMy
KAogICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihjYWxsU2l0
ZUluZGV4LmJpdHMoKSksCiAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6dGFnRm9y
KFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
cykpKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkNh
bGwgY2FsbCA9IGppdC5uZWFyQ2FsbCgpOworICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+
ZW1pdERpcmVjdEZhc3RQYXRoKGppdCk7CiAgICAgICAgICAgICAgICAgaml0LmFkZFB0cigKICAg
ICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoLXBhcmFtcy5wcm9j
KCkuZnJhbWVTaXplKCkpLAogICAgICAgICAgICAgICAgICAgICBHUFJJbmZvOjpjYWxsRnJhbWVS
ZWdpc3RlciwgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgICAgICAg
ICAgICAgCi0gICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRVcENhbGwoCi0gICAgICAg
ICAgICAgICAgICAgIGlzQ29uc3RydWN0ID8gQ2FsbExpbmtJbmZvOjpEaXJlY3RDb25zdHJ1Y3Qg
OiBDYWxsTGlua0luZm86OkRpcmVjdENhbGwsIEludmFsaWRHUFJSZWcpOwogICAgICAgICAgICAg
ICAgIGNhbGxMaW5rSW5mby0+c2V0RXhlY3V0YWJsZUR1cmluZ0NvbXBpbGF0aW9uKGV4ZWN1dGFi
bGUpOwogICAgICAgICAgICAgICAgIGlmIChudW1BbGxvY2F0ZWRBcmdzID4gbnVtUGFzc2VkQXJn
cykKICAgICAgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRNYXhBcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcyhudW1BbGxvY2F0ZWRBcmdzKTsKQEAgLTk5MzUsMTUgKzk5MTQsOSBAQCBw
cml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAg
ICBqaXQuYWRkTGlua1Rhc2soCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWz1dIChMaW5r
QnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENv
ZGVMb2NhdGlvbk5lYXJDYWxsPEpTSW50ZXJuYWxQdHJUYWc+IGNhbGxMb2NhdGlvbiA9IGxpbmtC
dWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPEpTSW50ZXJuYWxQdHJUYWc+KGNhbGwpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRy
VGFnPiBzbG93UGF0aExvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQ
dHJUYWc+KHNsb3dQYXRoKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5r
QnVmZmVyLmxpbmsoY2FsbCwgc2xvd1BhdGhMb2NhdGlvbik7Ci0KLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRDYWxsTG9jYXRpb25zKAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0
clRhZz4oKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoTG9j
YXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsTG9jYXRpb24p
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldENvZGVM
b2NhdGlvbnMoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVy
LmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oc2xvd1BhdGgpLCAKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+
KCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAg
ICB9KTsKICAgICAgICAgICAgIH0pOwpAQCAtMTAwMzQsNDAgKzEwMDA3LDMwIEBAIHByaXZhdGU6
CiAgICAgICAgICAgICAgICAgc2h1ZmZsZURhdGEuc2V0dXBDYWxsZWVTYXZlUmVnaXN0ZXJzKGpp
dC5jb2RlQmxvY2soKSk7CiAKICAgICAgICAgICAgICAgICBDYWxsTGlua0luZm8qIGNhbGxMaW5r
SW5mbyA9IGppdC5jb2RlQmxvY2soKS0+YWRkQ2FsbExpbmtJbmZvKGNvZGVPcmlnaW4pOworICAg
ICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0VXBDYWxsKENhbGxMaW5rSW5mbzo6VGFpbENh
bGwsIEdQUkluZm86OnJlZ1QwKTsKIAotICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6RGF0
YUxhYmVsUHRyIHRhcmdldFRvQ2hlY2s7Ci0gICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpK
dW1wIHNsb3dQYXRoID0gaml0LmJyYW5jaFB0cldpdGhQYXRjaCgKLSAgICAgICAgICAgICAgICAg
ICAgQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwgR1BSSW5mbzo6cmVnVDAsIHRhcmdldFRvQ2hlY2ss
Ci0gICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihudWxscHRy
KSk7Ci0KLSAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldEZyYW1lU2h1ZmZsZURhdGEo
c2h1ZmZsZURhdGEpOwotICAgICAgICAgICAgICAgIENhbGxGcmFtZVNodWZmbGVyKGppdCwgc2h1
ZmZsZURhdGEpLnByZXBhcmVGb3JUYWlsQ2FsbCgpOwotCi0gICAgICAgICAgICAgICAgQ0NhbGxI
ZWxwZXJzOjpDYWxsIGZhc3RDYWxsID0gaml0Lm5lYXJUYWlsQ2FsbCgpOworICAgICAgICAgICAg
ICAgIGF1dG8gc2xvd1BhdGggPSBjYWxsTGlua0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKGpp
dCwgR1BSSW5mbzo6cmVnVDAsIEludmFsaWRHUFJSZWcsIENhbGxMaW5rSW5mbzo6VXNlRGF0YUlD
OjpObywgWyZdIHsKKyAgICAgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRGcmFtZVNo
dWZmbGVEYXRhKHNodWZmbGVEYXRhKTsKKyAgICAgICAgICAgICAgICAgICAgQ2FsbEZyYW1lU2h1
ZmZsZXIoaml0LCBzaHVmZmxlRGF0YSkucHJlcGFyZUZvclRhaWxDYWxsKCk7CisgICAgICAgICAg
ICAgICAgfSk7CiAKICAgICAgICAgICAgICAgICBzbG93UGF0aC5saW5rKCZqaXQpOwotCisgICAg
ICAgICAgICAgICAgYXV0byBzbG93UGF0aFN0YXJ0ID0gaml0LmxhYmVsKCk7CiAgICAgICAgICAg
ICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIgc2xvd1BhdGhTaHVmZmxlcihqaXQsIHNodWZmbGVEYXRh
KTsKICAgICAgICAgICAgICAgICBzbG93UGF0aFNodWZmbGVyLnNldENhbGxlZUpTVmFsdWVSZWdz
KEpTVmFsdWVSZWdzKEdQUkluZm86OnJlZ1QwKSk7CiAgICAgICAgICAgICAgICAgc2xvd1BhdGhT
aHVmZmxlci5wcmVwYXJlRm9yU2xvd1BhdGgoKTsKIAotICAgICAgICAgICAgICAgIGppdC5tb3Zl
KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihjYWxsTGlua0luZm8pLCBHUFJJbmZvOjpyZWdU
Mik7CiAgICAgICAgICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRy
KGppdC5jb2RlQmxvY2soKS0+Z2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykp
LCBHUFJJbmZvOjpyZWdUMyk7Ci0gICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIHNs
b3dDYWxsID0gaml0Lm5lYXJDYWxsKCk7CisgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5l
bWl0U2xvd1BhdGgoKnZtLCBqaXQpOwogCisgICAgICAgICAgICAgICAgYXV0byBkb25lTG9jYXRp
b24gPSBqaXQubGFiZWwoKTsKICAgICAgICAgICAgICAgICBqaXQuYWJvcnRXaXRoUmVhc29uKEpJ
VERpZFJldHVybkZyb21UYWlsQ2FsbCk7CiAKLSAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8t
PnNldFVwQ2FsbChDYWxsTGlua0luZm86OlRhaWxDYWxsLCBHUFJJbmZvOjpyZWdUMCk7Ci0KICAg
ICAgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soCiAgICAgICAgICAgICAgICAgICAgIFs9XSAo
TGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICAgICAgICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXJDb2RlUHRyPEpJVFRodW5rUHRyVGFnPiBsaW5rQ2FsbCA9IHZtLT5nZXRDVElTdHVi
KGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpLmNvZGUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGxpbmtCdWZmZXIubGluayhzbG93Q2FsbCwgRnVuY3Rpb25QdHI8SklUVGh1bmtQdHJUYWc+KGxp
bmtDYWxsKSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0Q2Fs
bExvY2F0aW9ucygKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJl
bDxKU0ludGVybmFsUHRyVGFnPihsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxKU0ludGVy
bmFsUHRyVGFnPihzbG93Q2FsbCkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvZGVM
b2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+KGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0lu
dGVybmFsUHRyVGFnPih0YXJnZXRUb0NoZWNrKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8SlNJbnRlcm5hbFB0clRhZz4oZmFzdENh
bGwpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0Q29kZUxvY2F0
aW9ucygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8
SlNJbnRlcm5hbFB0clRhZz4oc2xvd1BhdGhTdGFydCksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KGRvbmVMb2NhdGlv
bikpOwogICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIH0pOwogICAgIH0KQEAg
LTEwMzIwLDQwICsxMDI4MywzOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIGVsc2UKICAg
ICAgICAgICAgICAgICAgICAgY2FsbFR5cGUgPSBDYWxsTGlua0luZm86OkNhbGxWYXJhcmdzOwog
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0VXBDYWxs
KGNhbGxUeXBlLCBHUFJJbmZvOjpyZWdUMCk7CisKICAgICAgICAgICAgICAgICBib29sIGlzVGFp
bENhbGwgPSBDYWxsTGlua0luZm86OmNhbGxNb2RlRm9yKGNhbGxUeXBlKSA9PSBDYWxsTW9kZTo6
VGFpbDsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkRh
dGFMYWJlbFB0ciB0YXJnZXRUb0NoZWNrOwotICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6
SnVtcCBzbG93UGF0aCA9IGppdC5icmFuY2hQdHJXaXRoUGF0Y2goCi0gICAgICAgICAgICAgICAg
ICAgIENDYWxsSGVscGVyczo6Tm90RXF1YWwsIEdQUkluZm86OnJlZ1QwLCB0YXJnZXRUb0NoZWNr
LAotICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobnVsbHB0
cikpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Q2Fs
bCBmYXN0Q2FsbDsKKworICAgICAgICAgICAgICAgIEFTU0VSVCghdXNlZFJlZ2lzdGVycy5nZXQo
R1BSSW5mbzo6cmVnVDIpKTsgLy8gVXNlZCBvbiB0aGUgc2xvdyBwYXRoLgorCisgICAgICAgICAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93UGF0aDsKICAgICAgICAgICAgICAgICBD
Q2FsbEhlbHBlcnM6Okp1bXAgZG9uZTsKLSAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg
ICBpZiAoaXNUYWlsQ2FsbCkgewotICAgICAgICAgICAgICAgICAgICBqaXQuZW1pdFJlc3RvcmVD
YWxsZWVTYXZlcygpOwotICAgICAgICAgICAgICAgICAgICBqaXQucHJlcGFyZUZvclRhaWxDYWxs
U2xvdygpOwotICAgICAgICAgICAgICAgICAgICBmYXN0Q2FsbCA9IGppdC5uZWFyVGFpbENhbGwo
KTsKKyAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGggPSBjYWxsTGlua0luZm8tPmVtaXRUYWls
Q2FsbEZhc3RQYXRoKGppdCwgR1BSSW5mbzo6cmVnVDAsIEludmFsaWRHUFJSZWcsIENhbGxMaW5r
SW5mbzo6VXNlRGF0YUlDOjpObywgWyZdIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGppdC5l
bWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBqaXQucHJl
cGFyZUZvclRhaWxDYWxsU2xvdygpOworICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAg
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBmYXN0Q2FsbCA9IGppdC5uZWFy
Q2FsbCgpOworICAgICAgICAgICAgICAgICAgICBzbG93UGF0aCA9IGNhbGxMaW5rSW5mby0+ZW1p
dEZhc3RQYXRoKGppdCwgR1BSSW5mbzo6cmVnVDAsIEludmFsaWRHUFJSZWcsIENhbGxMaW5rSW5m
bzo6VXNlRGF0YUlDOjpObyk7CiAgICAgICAgICAgICAgICAgICAgIGRvbmUgPSBqaXQuanVtcCgp
OwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBz
bG93UGF0aC5saW5rKCZqaXQpOworICAgICAgICAgICAgICAgIGF1dG8gc2xvd1BhdGhTdGFydCA9
IGppdC5sYWJlbCgpOwogCiAgICAgICAgICAgICAgICAgaWYgKGlzVGFpbENhbGwpCiAgICAgICAg
ICAgICAgICAgICAgIGppdC5lbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7Ci0gICAgICAgICAgICAg
ICAgQVNTRVJUKCF1c2VkUmVnaXN0ZXJzLmdldChHUFJJbmZvOjpyZWdUMikpOwotICAgICAgICAg
ICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihjYWxsTGlua0luZm8p
LCBHUFJJbmZvOjpyZWdUMik7CiAgICAgICAgICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tUHRyKGppdC5jb2RlQmxvY2soKS0+Z2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9y
aWdpbi5zZW1hbnRpYykpLCBHUFJJbmZvOjpyZWdUMyk7Ci0gICAgICAgICAgICAgICAgQ0NhbGxI
ZWxwZXJzOjpDYWxsIHNsb3dDYWxsID0gaml0Lm5lYXJDYWxsKCk7CisgICAgICAgICAgICAgICAg
Y2FsbExpbmtJbmZvLT5lbWl0U2xvd1BhdGgoKnZtLCBqaXQpOwogICAgICAgICAgICAgICAgIAog
ICAgICAgICAgICAgICAgIGlmIChpc1RhaWxDYWxsKQogICAgICAgICAgICAgICAgICAgICBqaXQu
YWJvcnRXaXRoUmVhc29uKEpJVERpZFJldHVybkZyb21UYWlsQ2FsbCk7CiAgICAgICAgICAgICAg
ICAgZWxzZQogICAgICAgICAgICAgICAgICAgICBkb25lLmxpbmsoJmppdCk7Ci0gICAgICAgICAg
ICAgICAgCi0gICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRVcENhbGwoY2FsbFR5cGUs
IEdQUkluZm86OnJlZ1QwKTsKKworICAgICAgICAgICAgICAgIGF1dG8gZG9uZUxvY2F0aW9uID0g
aml0LmxhYmVsKCk7CiAKICAgICAgICAgICAgICAgICBqaXQuYWRkUHRyKAogICAgICAgICAgICAg
ICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigtb3JpZ2luYWxTdGFja0hlaWdodCks
CkBAIC0xMDM2MSwxMyArMTAzMjIsOSBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIAogICAg
ICAgICAgICAgICAgIGppdC5hZGRMaW5rVGFzaygKICAgICAgICAgICAgICAgICAgICAgWz1dIChM
aW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlckNvZGVQdHI8SklUVGh1bmtQdHJUYWc+IGxpbmtDYWxsID0gdm0tPmdldENUSVN0dWIo
bGlua0NhbGxUaHVua0dlbmVyYXRvcikuY29kZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAg
bGlua0J1ZmZlci5saW5rKHNsb3dDYWxsLCBGdW5jdGlvblB0cjxKSVRUaHVua1B0clRhZz4obGlu
a0NhbGwpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAg
ICAgY2FsbExpbmtJbmZvLT5zZXRDYWxsTG9jYXRpb25zKAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+KGxpbmtCdWZmZXIubG9j
YXRpb25PZk5lYXJDYWxsPEpTSW50ZXJuYWxQdHJUYWc+KHNsb3dDYWxsKSksCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4obGlu
a0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KHRhcmdldFRvQ2hlY2spKSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxK
U0ludGVybmFsUHRyVGFnPihmYXN0Q2FsbCkpOworICAgICAgICAgICAgICAgICAgICAgICAgY2Fs
bExpbmtJbmZvLT5zZXRDb2RlTG9jYXRpb25zKAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihzbG93UGF0aFN0YXJ0KSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRl
cm5hbFB0clRhZz4oZG9uZUxvY2F0aW9uKSk7CiAgICAgICAgICAgICAgICAgICAgIH0pOwogICAg
ICAgICAgICAgfSk7CiAKQEAgLTEwNjA3LDM5ICsxMDU2NCwzNiBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgY2FsbFR5cGUgPSBDYWxsTGlua0lu
Zm86OkNhbGxWYXJhcmdzOwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGJvb2wg
aXNUYWlsQ2FsbCA9IENhbGxMaW5rSW5mbzo6Y2FsbE1vZGVGb3IoY2FsbFR5cGUpID09IENhbGxN
b2RlOjpUYWlsOworICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0VXBDYWxsKGNhbGxU
eXBlLCBHUFJJbmZvOjpyZWdUMCk7CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAg
Q0NhbGxIZWxwZXJzOjpEYXRhTGFiZWxQdHIgdGFyZ2V0VG9DaGVjazsKLSAgICAgICAgICAgICAg
ICBDQ2FsbEhlbHBlcnM6Okp1bXAgc2xvd1BhdGggPSBqaXQuYnJhbmNoUHRyV2l0aFBhdGNoKAot
ICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCBHUFJJbmZvOjpyZWdU
MCwgdGFyZ2V0VG9DaGVjaywKLSAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tUHRyKG51bGxwdHIpKTsKKyAgICAgICAgICAgICAgICBib29sIGlzVGFpbENhbGwgPSBD
YWxsTGlua0luZm86OmNhbGxNb2RlRm9yKGNhbGxUeXBlKSA9PSBDYWxsTW9kZTo6VGFpbDsKICAg
ICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgZmFzdENh
bGw7CisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93UGF0aDsKICAg
ICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZG9uZTsKLSAgICAgICAgICAgICAgICAK
ICAgICAgICAgICAgICAgICBpZiAoaXNUYWlsQ2FsbCkgewotICAgICAgICAgICAgICAgICAgICBq
aXQuZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwotICAgICAgICAgICAgICAgICAgICBqaXQucHJl
cGFyZUZvclRhaWxDYWxsU2xvdygpOwotICAgICAgICAgICAgICAgICAgICBmYXN0Q2FsbCA9IGpp
dC5uZWFyVGFpbENhbGwoKTsKKyAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGggPSBjYWxsTGlu
a0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKGppdCwgR1BSSW5mbzo6cmVnVDAsIEludmFsaWRH
UFJSZWcsIENhbGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpObywgWyZdIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGppdC5lbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBqaXQucHJlcGFyZUZvclRhaWxDYWxsU2xvdygpOworICAgICAgICAgICAgICAgICAg
ICB9KTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBmYXN0
Q2FsbCA9IGppdC5uZWFyQ2FsbCgpOworICAgICAgICAgICAgICAgICAgICBzbG93UGF0aCA9IGNh
bGxMaW5rSW5mby0+ZW1pdEZhc3RQYXRoKGppdCwgR1BSSW5mbzo6cmVnVDAsIEludmFsaWRHUFJS
ZWcsIENhbGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpObyk7CiAgICAgICAgICAgICAgICAgICAgIGRv
bmUgPSBqaXQuanVtcCgpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgICAgICBzbG93UGF0aC5saW5rKCZqaXQpOworICAgICAgICAgICAgICAgIGF1dG8g
c2xvd1BhdGhTdGFydCA9IGppdC5sYWJlbCgpOwogCiAgICAgICAgICAgICAgICAgaWYgKGlzVGFp
bENhbGwpCiAgICAgICAgICAgICAgICAgICAgIGppdC5lbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7
Ci0gICAgICAgICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGNh
bGxMaW5rSW5mbyksIEdQUkluZm86OnJlZ1QyKTsKICAgICAgICAgICAgICAgICBqaXQubW92ZShD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoaml0LmNvZGVCbG9jaygpLT5nbG9iYWxPYmplY3RG
b3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIEdQUkluZm86OnJlZ1QzKTsKLSAgICAgICAgICAg
ICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgc2xvd0NhbGwgPSBqaXQubmVhckNhbGwoKTsKKyAgICAg
ICAgICAgICAgICBjYWxsTGlua0luZm8tPmVtaXRTbG93UGF0aCgqdm0sIGppdCk7CiAgICAgICAg
ICAgICAgICAgCiAgICAgICAgICAgICAgICAgaWYgKGlzVGFpbENhbGwpCiAgICAgICAgICAgICAg
ICAgICAgIGppdC5hYm9ydFdpdGhSZWFzb24oSklURGlkUmV0dXJuRnJvbVRhaWxDYWxsKTsKICAg
ICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIGRvbmUubGluaygmaml0KTsK
LSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldFVwQ2Fs
bChjYWxsVHlwZSwgR1BSSW5mbzo6cmVnVDApOworCisgICAgICAgICAgICAgICAgYXV0byBkb25l
TG9jYXRpb24gPSBqaXQubGFiZWwoKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg
ICBqaXQuYWRkUHRyKAogICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJ
bW0zMigtb3JpZ2luYWxTdGFja0hlaWdodCksCkBAIC0xMDY0NywxMyArMTA2MDEsOSBAQCBwcml2
YXRlOgogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGppdC5hZGRMaW5rVGFzaygK
ICAgICAgICAgICAgICAgICAgICAgWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SklUVGh1bmtQdHJUYWc+
IGxpbmtDYWxsID0gdm0tPmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcikuY29kZSgp
OwotICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKHNsb3dDYWxsLCBGdW5j
dGlvblB0cjxKSVRUaHVua1B0clRhZz4obGlua0NhbGwpKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRDYWxsTG9jYXRp
b25zKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50
ZXJuYWxQdHJUYWc+KGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPEpTSW50ZXJuYWxQdHJU
YWc+KHNsb3dDYWxsKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9u
TGFiZWw8SlNJbnRlcm5hbFB0clRhZz4obGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQ
dHJUYWc+KHRhcmdldFRvQ2hlY2spKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5r
QnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxKU0ludGVybmFsUHRyVGFnPihmYXN0Q2FsbCkpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRDb2RlTG9jYXRpb25zKAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVy
bmFsUHRyVGFnPihzbG93UGF0aFN0YXJ0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBs
aW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oZG9uZUxvY2F0aW9uKSk7CiAg
ICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgfSk7CiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5jcHAJKHJldmlzaW9uIDI3NzQ0MCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNzEsNiArNzEsMTYgQEAgdm9pZCBDQ2FsbEhlbHBlcnM6OmVuc3VyZVNoYWRvd0NoaWNr
ZW5QYQogICAgIHN0b3JlUHRyKHNjcmF0Y2gyLCBBZGRyZXNzKHNjcmF0Y2gxTm9uQXJnR1BSKSk7
CiB9CiAKK3ZvaWQgQ0NhbGxIZWxwZXJzOjplbWl0SklUQ29kZU92ZXIoTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyPEpTSW50ZXJuYWxQdHJUYWc+IHdoZXJlLCBXVEY6OkZ1bmN0aW9uPHZvaWQoQ0NhbGxI
ZWxwZXJzJik+IGVtaXRDb2RlLCBjb25zdCBjaGFyKiBkZXNjcmlwdGlvbikKK3sKKyAgICBDQ2Fs
bEhlbHBlcnMgaml0OworICAgIGVtaXRDb2RlKGppdCk7CisKKyAgICBjb25zdGV4cHIgYm9vbCBu
ZWVkc0JyYW5jaENvbXBhY3Rpb24gPSBmYWxzZTsKKyAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIo
aml0LCB3aGVyZSwgaml0Lm1fYXNzZW1ibGVyLmJ1ZmZlcigpLmNvZGVTaXplKCksIExpbmtCdWZm
ZXI6OlByb2ZpbGU6OklubGluZUNhY2hlLCBKSVRDb21waWxhdGlvbk11c3RTdWNjZWVkLCBuZWVk
c0JyYW5jaENvbXBhY3Rpb24pOworICAgIEZJTkFMSVpFX0NPREUobGlua0J1ZmZlciwgTm9QdHJU
YWcsIGRlc2NyaXB0aW9uKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBF
TkFCTEUoSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5o
CShyZXZpc2lvbiAyNzc0NDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NDYWxsSGVs
cGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC04MTgsNiArODE4LDggQEAgcHVibGljOgogICAgIHZv
aWQgbG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoR1BSUmVnIHNoYWRvd1BhY2tldCwgSlNWYWx1
ZVJlZ3MgdGhpc1JlZ3MsIEdQUlJlZyBzY29wZSwgQ29kZUJsb2NrKiwgQ2FsbFNpdGVJbmRleCk7
CiAgICAgLy8gTGVhdmVzIGJlaGluZCBhIHBvaW50ZXIgdG8gdGhlIFBhY2tldCB3ZSBzaG91bGQg
d3JpdGUgdG8gaW4gc2hhZG93UGFja2V0LgogICAgIHZvaWQgZW5zdXJlU2hhZG93Q2hpY2tlblBh
Y2tldChWTSYsIEdQUlJlZyBzaGFkb3dQYWNrZXQsIEdQUlJlZyBzY3JhdGNoMU5vbkFyZ0dQUiwg
R1BSUmVnIHNjcmF0Y2gyKTsKKworICAgIHN0YXRpYyB2b2lkIGVtaXRKSVRDb2RlT3ZlcihNYWNy
b0Fzc2VtYmxlckNvZGVQdHI8SlNJbnRlcm5hbFB0clRhZz4gd2hlcmUsIFdURjo6RnVuY3Rpb248
dm9pZChDQ2FsbEhlbHBlcnMmKT4sIGNvbnN0IGNoYXIqKTsKIH07CiAKIH0gLy8gbmFtZXNwYWNl
IEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkocmV2aXNpb24gMjc3NDQwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05
NTksMTAgKzk1OSw5IEBAIENvbXBpbGF0aW9uUmVzdWx0IEpJVDo6bGluaygpCiAKICAgICBmb3Ig
KGF1dG8mIGNvbXBpbGF0aW9uSW5mbyA6IG1fY2FsbENvbXBpbGF0aW9uSW5mbykgewogICAgICAg
ICBDYWxsTGlua0luZm8mIGluZm8gPSAqY29tcGlsYXRpb25JbmZvLmNhbGxMaW5rSW5mbzsKLSAg
ICAgICAgaW5mby5zZXRDYWxsTG9jYXRpb25zKAotICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFi
ZWw8SlNJbnRlcm5hbFB0clRhZz4ocGF0Y2hCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPEpTSW50
ZXJuYWxQdHJUYWc+KGNvbXBpbGF0aW9uSW5mby5jYWxsUmV0dXJuTG9jYXRpb24pKSwKLSAgICAg
ICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+KHBhdGNoQnVmZmVyLmxv
Y2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oY29tcGlsYXRpb25JbmZvLmhvdFBhdGhCZWdpbikp
LAotICAgICAgICAgICAgcGF0Y2hCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPEpTSW50ZXJuYWxQ
dHJUYWc+KGNvbXBpbGF0aW9uSW5mby5ob3RQYXRoT3RoZXIpKTsKKyAgICAgICAgaW5mby5zZXRD
b2RlTG9jYXRpb25zKAorICAgICAgICAgICAgcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU0ludGVy
bmFsUHRyVGFnPihjb21waWxhdGlvbkluZm8uc2xvd1BhdGhTdGFydCksCisgICAgICAgICAgICBw
YXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KGNvbXBpbGF0aW9uSW5mby5k
b25lTG9jYXRpb24pKTsKICAgICB9CiAKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
LmgJKHJldmlzaW9uIDI3NzQ0MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJ
KHdvcmtpbmcgY29weSkKQEAgLTE3NSw5ICsxNzUsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICB9
OwogCiAgICAgc3RydWN0IENhbGxDb21waWxhdGlvbkluZm8gewotICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6RGF0YUxhYmVsUHRyIGhvdFBhdGhCZWdpbjsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OkNhbGwgaG90UGF0aE90aGVyOwotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsUmV0
dXJuTG9jYXRpb247CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBzbG93UGF0aFN0YXJ0
OworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgZG9uZUxvY2F0aW9uOwogICAgICAgICBD
YWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbzsKICAgICB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVENhbGwzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRDYWxsMzJfNjQuY3BwCShyZXZpc2lvbiAyNzc0NDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMwMSwzMCArMzAxLDI4IEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsKGNvbnN0IEluc3RydWN0
aW8KICAgICBpZiAoY29tcGlsZUNhbGxFdmFsKGJ5dGVjb2RlKSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgaWYgKG9wY29kZUlEID09IG9wX3RhaWxfY2FsbCB8fCBvcGNvZGVJRCA9PSBvcF90YWls
X2NhbGxfdmFyYXJncykKLSAgICAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwotCi0gICAg
YWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1QxKSk7Ci0KLSAgICBEYXRhTGFiZWxQdHIg
YWRkcmVzc09mTGlua2VkRnVuY3Rpb25DaGVjazsKLSAgICBKdW1wIHNsb3dDYXNlID0gYnJhbmNo
UHRyV2l0aFBhdGNoKE5vdEVxdWFsLCByZWdUMCwgYWRkcmVzc09mTGlua2VkRnVuY3Rpb25DaGVj
aywgVHJ1c3RlZEltbVB0cihudWxscHRyKSk7Ci0KLSAgICBhZGRTbG93Q2FzZShzbG93Q2FzZSk7
Ci0KLSAgICBBU1NFUlQobV9jYWxsQ29tcGlsYXRpb25JbmZvLnNpemUoKSA9PSBjYWxsTGlua0lu
Zm9JbmRleCk7CiAgICAgaW5mby0+c2V0VXBDYWxsKENhbGxMaW5rSW5mbzo6Y2FsbFR5cGVGb3Io
b3Bjb2RlSUQpLCByZWdUMCk7CisgICAgQVNTRVJUKG1fY2FsbENvbXBpbGF0aW9uSW5mby5zaXpl
KCkgPT0gY2FsbExpbmtJbmZvSW5kZXgpOwogICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mby5hcHBl
bmQoQ2FsbENvbXBpbGF0aW9uSW5mbygpKTsKLSAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2Fs
bExpbmtJbmZvSW5kZXhdLmhvdFBhdGhCZWdpbiA9IGFkZHJlc3NPZkxpbmtlZEZ1bmN0aW9uQ2hl
Y2s7CiAgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5jYWxsTGlu
a0luZm8gPSBpbmZvOwogCisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1QxKSk7
CisKICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwogICAgIGlmIChvcGNvZGVJRCA9
PSBvcF90YWlsX2NhbGwgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgfHwgb3Bj
b2RlSUQgPT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKSB7Ci0gICAgICAgIHByZXBh
cmVGb3JUYWlsQ2FsbFNsb3coKTsKLSAgICAgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxM
aW5rSW5mb0luZGV4XS5ob3RQYXRoT3RoZXIgPSBlbWl0TmFrZWROZWFyVGFpbENhbGwoKTsKKyAg
ICAgICAgYXV0byBzbG93UGF0aHMgPSBpbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aCgqdGhpcywg
cmVnVDAsIHJlZ1QyLCBDYWxsTGlua0luZm86OlVzZURhdGFJQzo6WWVzLCBbJl0geworICAgICAg
ICAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOworICAgICAgICAgICAgcHJlcGFyZUZvclRh
aWxDYWxsU2xvdygpOworICAgICAgICB9KTsKKyAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGhz
KTsKKyAgICAgICAgYXV0byBkb25lTG9jYXRpb24gPSBsYWJlbCgpOworICAgICAgICBtX2NhbGxD
b21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmRvbmVMb2NhdGlvbiA9IGRvbmVMb2Nh
dGlvbjsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIG1fY2FsbENvbXBpbGF0aW9uSW5m
b1tjYWxsTGlua0luZm9JbmRleF0uaG90UGF0aE90aGVyID0gZW1pdE5ha2VkTmVhckNhbGwoKTsK
KyAgICBhdXRvIHNsb3dQYXRocyA9IGluZm8tPmVtaXRGYXN0UGF0aCgqdGhpcywgcmVnVDAsIHJl
Z1QyLCBDYWxsTGlua0luZm86OlVzZURhdGFJQzo6WWVzKTsKKyAgICBhZGRTbG93Q2FzZShzbG93
UGF0aHMpOworICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uZG9u
ZUxvY2F0aW9uID0gbGFiZWwoKTsKIAogICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2lu
dGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVS
ZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAgIGNoZWNrU3RhY2tQb2ludGVyQWxp
Z25tZW50KCk7CkBAIC0zNDQsMTUgKzM0MiwxMyBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbFNs
b3dDYXNlKGNvbnN0IEluCiAKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCi0gICAgbW92
ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QzKTsKLSAg
ICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0lu
ZGV4XS5jYWxsTGlua0luZm8pLCByZWdUMik7Ci0KICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFp
bF9jYWxsIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IG9wY29kZUlEID09
IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cykKICAgICAgICAgZW1pdFJlc3RvcmVDYWxs
ZWVTYXZlcygpOwogCi0gICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4
XS5jYWxsUmV0dXJuTG9jYXRpb24gPSBlbWl0TmFrZWROZWFyQ2FsbChtX3ZtLT5nZXRDVElTdHVi
KGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CisgICAg
bW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QzKTsK
KyAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmNhbGxMaW5rSW5m
by0+ZW1pdFNsb3dQYXRoKCptX3ZtLCAqdGhpcyk7CiAKLSAgICBpZiAob3Bjb2RlSUQgPT0gb3Bf
dGFpbF9jYWxsIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzKSB7CisgICAgaWYg
KG9wY29kZUlEID09IG9wX3RhaWxfY2FsbCB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfdmFy
YXJncyB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMpIHsKICAg
ICAgICAgYWJvcnRXaXRoUmVhc29uKEpJVERpZFJldHVybkZyb21UYWlsQ2FsbCk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAJ
KHJldmlzaW9uIDI3NzQ0MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE4OCw4ICsxODgsMTQgQEAgYm9vbCBKSVQ6OmNvbXBpbGVU
YWlsQ2FsbChjb25zdCBPcFRhaWxDYQogICAgICAgICBWYWx1ZVJlY292ZXJ5OjppbkdQUihyZWdU
MCwgRGF0YUZvcm1hdEpTKTsKICAgICBzaHVmZmxlRGF0YS5zZXR1cENhbGxlZVNhdmVSZWdpc3Rl
cnMobV9jb2RlQmxvY2spOwogICAgIGluZm8tPnNldEZyYW1lU2h1ZmZsZURhdGEoc2h1ZmZsZURh
dGEpOwotICAgIENhbGxGcmFtZVNodWZmbGVyKCp0aGlzLCBzaHVmZmxlRGF0YSkucHJlcGFyZUZv
clRhaWxDYWxsKCk7Ci0gICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4
XS5ob3RQYXRoT3RoZXIgPSBlbWl0TmFrZWROZWFyVGFpbENhbGwoKTsKKworICAgIEp1bXBMaXN0
IHNsb3dQYXRocyA9IGluZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKCp0aGlzLCByZWdUMCwgcmVn
VDIsIENhbGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpZZXMsIFsmXSB7CisgICAgICAgIENhbGxGcmFt
ZVNodWZmbGVyKCp0aGlzLCBzaHVmZmxlRGF0YSkucHJlcGFyZUZvclRhaWxDYWxsKCk7CisgICAg
fSk7CisgICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGhzKTsKKyAgICBhdXRvIGRvbmVMb2NhdGlvbiA9
IGxhYmVsKCk7CisgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5k
b25lTG9jYXRpb24gPSBkb25lTG9jYXRpb247CisgICAgCiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
QEAgLTIyOCwyOCArMjM0LDMwIEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsKGNvbnN0IEluc3Ry
dWN0aW8KICAgICBpZiAoY29tcGlsZUNhbGxFdmFsKGJ5dGVjb2RlKSkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgRGF0YUxhYmVsUHRyIGFkZHJlc3NPZkxpbmtlZEZ1bmN0aW9uQ2hlY2s7Ci0gICAg
SnVtcCBzbG93Q2FzZSA9IGJyYW5jaFB0cldpdGhQYXRjaChOb3RFcXVhbCwgcmVnVDAsIGFkZHJl
c3NPZkxpbmtlZEZ1bmN0aW9uQ2hlY2ssIFRydXN0ZWRJbW1QdHIobnVsbHB0cikpOwotICAgIGFk
ZFNsb3dDYXNlKHNsb3dDYXNlKTsKLQogICAgIEFTU0VSVChtX2NhbGxDb21waWxhdGlvbkluZm8u
c2l6ZSgpID09IGNhbGxMaW5rSW5mb0luZGV4KTsKICAgICBpbmZvLT5zZXRVcENhbGwoQ2FsbExp
bmtJbmZvOjpjYWxsVHlwZUZvcihvcGNvZGVJRCksIHJlZ1QwKTsKICAgICBtX2NhbGxDb21waWxh
dGlvbkluZm8uYXBwZW5kKENhbGxDb21waWxhdGlvbkluZm8oKSk7Ci0gICAgbV9jYWxsQ29tcGls
YXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5ob3RQYXRoQmVnaW4gPSBhZGRyZXNzT2ZMaW5r
ZWRGdW5jdGlvbkNoZWNrOwogICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9J
bmRleF0uY2FsbExpbmtJbmZvID0gaW5mbzsKIAotICAgIGlmIChjb21waWxlVGFpbENhbGwoYnl0
ZWNvZGUsIGluZm8sIGNhbGxMaW5rSW5mb0luZGV4KSkgeworICAgIGlmIChjb21waWxlVGFpbENh
bGwoYnl0ZWNvZGUsIGluZm8sIGNhbGxMaW5rSW5mb0luZGV4KSkKICAgICAgICAgcmV0dXJuOwot
ICAgIH0KIAogICAgIGlmIChvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfdmFyYXJncyB8fCBvcGNv
ZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMpIHsKLSAgICAgICAgZW1pdFJl
c3RvcmVDYWxsZWVTYXZlcygpOwotICAgICAgICBwcmVwYXJlRm9yVGFpbENhbGxTbG93KCk7Ci0g
ICAgICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uaG90UGF0aE90
aGVyID0gZW1pdE5ha2VkTmVhclRhaWxDYWxsKCk7CisgICAgICAgIGF1dG8gc2xvd1BhdGhzID0g
aW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoKnRoaXMsIHJlZ1QwLCByZWdUMiwgQ2FsbExpbmtJ
bmZvOjpVc2VEYXRhSUM6OlllcywgWyZdIHsKKyAgICAgICAgICAgIGVtaXRSZXN0b3JlQ2FsbGVl
U2F2ZXMoKTsKKyAgICAgICAgICAgIHByZXBhcmVGb3JUYWlsQ2FsbFNsb3coR1BSSW5mbzo6cmVn
VDIpOworICAgICAgICB9KTsKKyAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGhzKTsKKyAgICAg
ICAgYXV0byBkb25lTG9jYXRpb24gPSBsYWJlbCgpOworICAgICAgICBtX2NhbGxDb21waWxhdGlv
bkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmRvbmVMb2NhdGlvbiA9IGRvbmVMb2NhdGlvbjsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlu
a0luZm9JbmRleF0uaG90UGF0aE90aGVyID0gZW1pdE5ha2VkTmVhckNhbGwoKTsKKyAgICBhdXRv
IHNsb3dQYXRocyA9IGluZm8tPmVtaXRGYXN0UGF0aCgqdGhpcywgcmVnVDAsIHJlZ1QyLCBDYWxs
TGlua0luZm86OlVzZURhdGFJQzo6WWVzKTsKKyAgICBhdXRvIGRvbmVMb2NhdGlvbiA9IGxhYmVs
KCk7CisgICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGhzKTsKKworICAgIG1fY2FsbENvbXBpbGF0aW9u
SW5mb1tjYWxsTGlua0luZm9JbmRleF0uZG9uZUxvY2F0aW9uID0gZG9uZUxvY2F0aW9uOwogCiAg
ICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2sp
ICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdp
c3Rlcik7CiAgICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKQEAgLTI2NSwxNiArMjcz
LDE1IEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2UoY29uc3QgSW4KIAogICAgIGxp
bmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKKyAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExp
bmtJbmZvSW5kZXhdLnNsb3dQYXRoU3RhcnQgPSBsYWJlbCgpOworCiAgICAgaWYgKG9wY29kZUlE
ID09IG9wX3RhaWxfY2FsbCB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfdmFyYXJncyB8fCBv
cGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMpCiAgICAgICAgIGVtaXRS
ZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKIAogICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMyk7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY2Fs
bENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uY2FsbExpbmtJbmZvKSwgcmVnVDIp
OwotCi0gICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5jYWxsUmV0
dXJuTG9jYXRpb24gPQotICAgICAgICBlbWl0TmFrZWROZWFyQ2FsbChtX3ZtLT5nZXRDVElTdHVi
KGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CisgICAg
bV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5jYWxsTGlua0luZm8tPmVt
aXRTbG93UGF0aCgqbV92bSwgKnRoaXMpOwogCi0gICAgaWYgKG9wY29kZUlEID09IG9wX3RhaWxf
Y2FsbCB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfdmFyYXJncykgeworICAgIGlmIChvcGNv
ZGVJRCA9PSBvcF90YWlsX2NhbGwgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3Mg
fHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKSB7CiAgICAgICAg
IGFib3J0V2l0aFJlYXNvbihKSVREaWRSZXR1cm5Gcm9tVGFpbENhbGwpOwogICAgICAgICByZXR1
cm47CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25z
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlv
bnMuY3BwCShyZXZpc2lvbiAyNzc0NDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VE9wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzg2LDcgKzEzODYsNyBAQCBKU0Nf
REVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uTGlua0NhCiAgICAgICAgICAgICBpZiAoIWNh
bGxMaW5rSW5mby0+c2Vlbk9uY2UoKSkKICAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNl
dFNlZW4oKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBsaW5rRm9yKHZtLCBj
YWxsZWVGcmFtZSwgKmNhbGxMaW5rSW5mbywgbnVsbHB0ciwgaW50ZXJuYWxGdW5jdGlvbiwgY29k
ZVB0cik7CisgICAgICAgICAgICAgICAgbGlua01vbm9tb3JwaGljQ2FsbCh2bSwgY2FsbGVlRnJh
bWUsICpjYWxsTGlua0luZm8sIG51bGxwdHIsIGludGVybmFsRnVuY3Rpb24sIGNvZGVQdHIpOwog
CiAgICAgICAgICAgICB2b2lkKiBsaW5rZWRUYXJnZXQgPSBjb2RlUHRyLmV4ZWN1dGFibGVBZGRy
ZXNzKCk7CiAgICAgICAgICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KGxpbmtlZFRhcmdldCwgcmVp
bnRlcnByZXRfY2FzdDx2b2lkKj4oY2FsbExpbmtJbmZvLT5jYWxsTW9kZSgpID09IENhbGxNb2Rl
OjpUYWlsID8gUmV1c2VUaGVGcmFtZSA6IEtlZXBUaGVGcmFtZSkpOwpAQCAtMTQzNCw3ICsxNDM0
LDcgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkxpbmtDYQogICAgIGlmICgh
Y2FsbExpbmtJbmZvLT5zZWVuT25jZSgpKQogICAgICAgICBjYWxsTGlua0luZm8tPnNldFNlZW4o
KTsKICAgICBlbHNlCi0gICAgICAgIGxpbmtGb3Iodm0sIGNhbGxlZUZyYW1lLCAqY2FsbExpbmtJ
bmZvLCBjb2RlQmxvY2ssIGNhbGxlZSwgY29kZVB0cik7CisgICAgICAgIGxpbmtNb25vbW9ycGhp
Y0NhbGwodm0sIGNhbGxlZUZyYW1lLCAqY2FsbExpbmtJbmZvLCBjb2RlQmxvY2ssIGNhbGxlZSwg
Y29kZVB0cik7CiAKICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KGNvZGVQdHIuZXhlY3V0YWJsZUFk
ZHJlc3MoKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oY2FsbExpbmtJbmZvLT5jYWxsTW9kZSgp
ID09IENhbGxNb2RlOjpUYWlsID8gUmV1c2VUaGVGcmFtZSA6IEtlZXBUaGVGcmFtZSkpOwogfQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Qb2x5bW9ycGhpY0NhbGxTdHViUm91dGlu
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Qb2x5bW9ycGhp
Y0NhbGxTdHViUm91dGluZS5jcHAJKHJldmlzaW9uIDI3NzQ0MCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00NSw3ICs0NSw3IEBAIFBvbHltb3JwaGljQ2FsbE5vZGU6On5Qb2x5bW9ycGhpY0NhbGxO
b2QKIHZvaWQgUG9seW1vcnBoaWNDYWxsTm9kZTo6dW5saW5rKFZNJiB2bSkKIHsKICAgICBpZiAo
bV9jYWxsTGlua0luZm8pIHsKLSAgICAgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6ZHVtcERpc2Fz
c2VtYmx5KCksICJVbmxpbmtpbmcgcG9seW1vcnBoaWMgY2FsbCBhdCAiLCBtX2NhbGxMaW5rSW5m
by0+Y2FsbFJldHVybkxvY2F0aW9uKCksICIsIGJjIyIsIG1fY2FsbExpbmtJbmZvLT5jb2RlT3Jp
Z2luKCkuYnl0ZWNvZGVJbmRleCgpKTsKKyAgICAgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6ZHVt
cERpc2Fzc2VtYmx5KCksICJVbmxpbmtpbmcgcG9seW1vcnBoaWMgY2FsbCBhdCAiLCBtX2NhbGxM
aW5rSW5mby0+ZG9uZUxvY2F0aW9uKCksICIsIGJjIyIsIG1fY2FsbExpbmtJbmZvLT5jb2RlT3Jp
Z2luKCkuYnl0ZWNvZGVJbmRleCgpKTsKICAgICAgICAgbV9jYWxsTGlua0luZm8tPnVubGluayh2
bSk7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHJl
dmlzaW9uIDI3NzQ0MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTExODgsMjAgKzExODgsMjAgQEAgdm9pZCByZXBhdGNoSW5zdGFu
Y2VPZigKICAgICAgICAgZnRsVGh1bmtBd2FyZVJlcGF0Y2hDYWxsKGNvZGVCbG9jaywgc3R1Yklu
Zm8uc2xvd1BhdGhDYWxsTG9jYXRpb24sIG9wZXJhdGlvbkluc3RhbmNlT2ZHZW5lcmljKTsKIH0K
IAotc3RhdGljIHZvaWQgbGlua1Nsb3dGb3IoVk0mLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5m
bywgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiBjb2RlUmVmKQor
c3RhdGljIHZvaWQgbGlua1Nsb3dQYXRoVG8oVk0mLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5m
bywgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiBjb2RlUmVmKQog
ewotICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoTmVhckNhbGwoY2FsbExpbmtJbmZvLmNhbGxS
ZXR1cm5Mb2NhdGlvbigpLCBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4o
Y29kZVJlZi5jb2RlKCkpKTsKKyAgICBjYWxsTGlua0luZm8uc2V0U2xvd1BhdGhDYWxsRGVzdGlu
YXRpb24oY29kZVJlZi5jb2RlKCkudGVtcGxhdGUgcmV0YWdnZWQ8SlNFbnRyeVB0clRhZz4oKSk7
CiB9CiAKLXN0YXRpYyB2b2lkIGxpbmtTbG93Rm9yKFZNJiB2bSwgQ2FsbExpbmtJbmZvJiBjYWxs
TGlua0luZm8sIFRodW5rR2VuZXJhdG9yIGdlbmVyYXRvcikKK3N0YXRpYyB2b2lkIGxpbmtTbG93
UGF0aFRvKFZNJiB2bSwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8sIFRodW5rR2VuZXJhdG9y
IGdlbmVyYXRvcikKIHsKLSAgICBsaW5rU2xvd0Zvcih2bSwgY2FsbExpbmtJbmZvLCB2bS5nZXRD
VElTdHViKGdlbmVyYXRvcikucmV0YWdnZWQ8SklUU3R1YlJvdXRpbmVQdHJUYWc+KCkpOworICAg
IGxpbmtTbG93UGF0aFRvKHZtLCBjYWxsTGlua0luZm8sIHZtLmdldENUSVN0dWIoZ2VuZXJhdG9y
KS5yZXRhZ2dlZDxKSVRTdHViUm91dGluZVB0clRhZz4oKSk7CiB9CiAKIHN0YXRpYyB2b2lkIGxp
bmtTbG93Rm9yKFZNJiB2bSwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8pCiB7CiAgICAgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiB2aXJ0dWFsVGh1bmsgPSB2
aXJ0dWFsVGh1bmtGb3Iodm0sIGNhbGxMaW5rSW5mbyk7Ci0gICAgbGlua1Nsb3dGb3Iodm0sIGNh
bGxMaW5rSW5mbywgdmlydHVhbFRodW5rKTsKKyAgICBsaW5rU2xvd1BhdGhUbyh2bSwgY2FsbExp
bmtJbmZvLCB2aXJ0dWFsVGh1bmspOwogICAgIGNhbGxMaW5rSW5mby5zZXRTbG93U3R1YihHQ0F3
YXJlSklUU3R1YlJvdXRpbmU6OmNyZWF0ZSh2aXJ0dWFsVGh1bmssIHZtKSk7CiB9CiAKQEAgLTEy
MTcsNyArMTIxNyw3IEBAIHN0YXRpYyBKU0NlbGwqIHdlYkFzc2VtYmx5T3duZXIoSlNDZWxsKiAK
ICNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCiB9CiAKLXZvaWQgbGlua0ZvcigKK3ZvaWQg
bGlua01vbm9tb3JwaGljQ2FsbCgKICAgICBWTSYgdm0sIENhbGxGcmFtZSogY2FsbEZyYW1lLCBD
YWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbywgQ29kZUJsb2NrKiBjYWxsZWVDb2RlQmxvY2ssCiAg
ICAgSlNPYmplY3QqIGNhbGxlZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+
IGNvZGVQdHIpCiB7CkBAIC0xMjM1LDI2ICsxMjM1LDI0IEBAIHZvaWQgbGlua0ZvcigKICAgICBB
U1NFUlQob3duZXIpOwogCiAgICAgQVNTRVJUKCFjYWxsTGlua0luZm8uaXNMaW5rZWQoKSk7Ci0g
ICAgY2FsbExpbmtJbmZvLnNldENhbGxlZSh2bSwgb3duZXIsIGNhbGxlZSk7Ci0gICAgTWFjcm9B
c3NlbWJsZXI6OnJlcGF0Y2hQb2ludGVyKGNhbGxMaW5rSW5mby5ob3RQYXRoQmVnaW4oKSwgY2Fs
bGVlKTsKKyAgICBjYWxsTGlua0luZm8uc2V0TW9ub21vcnBoaWNDYWxsZWUodm0sIG93bmVyLCBj
YWxsZWUsIGNvZGVQdHIpOwogICAgIGNhbGxMaW5rSW5mby5zZXRMYXN0U2VlbkNhbGxlZSh2bSwg
b3duZXIsIGNhbGxlZSk7CisKICAgICBpZiAoc2hvdWxkRHVtcERpc2Fzc2VtYmx5Rm9yKGNhbGxl
ckNvZGVCbG9jaykpCiAgICAgICAgIGRhdGFMb2coIkxpbmtpbmcgY2FsbCBpbiAiLCBGdWxsQ29k
ZU9yaWdpbihjYWxsZXJDb2RlQmxvY2ssIGNhbGxMaW5rSW5mby5jb2RlT3JpZ2luKCkpLCAiIHRv
ICIsIHBvaW50ZXJEdW1wKGNhbGxlZUNvZGVCbG9jayksICIsIGVudHJ5cG9pbnQgYXQgIiwgY29k
ZVB0ciwgIlxuIik7CiAKLSAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaE5lYXJDYWxsKGNhbGxM
aW5rSW5mby5ob3RQYXRoT3RoZXIoKSwgQ29kZUxvY2F0aW9uTGFiZWw8SlNFbnRyeVB0clRhZz4o
Y29kZVB0cikpOwotCiAgICAgaWYgKGNhbGxlZUNvZGVCbG9jaykKICAgICAgICAgY2FsbGVlQ29k
ZUJsb2NrLT5saW5rSW5jb21pbmdDYWxsKGNhbGxlckZyYW1lLCAmY2FsbExpbmtJbmZvKTsKIAog
ICAgIGlmIChjYWxsTGlua0luZm8uc3BlY2lhbGl6YXRpb25LaW5kKCkgPT0gQ29kZUZvckNhbGwg
JiYgY2FsbExpbmtJbmZvLmFsbG93U3R1YnMoKSkgewotICAgICAgICBsaW5rU2xvd0Zvcih2bSwg
Y2FsbExpbmtJbmZvLCBsaW5rUG9seW1vcnBoaWNDYWxsVGh1bmtHZW5lcmF0b3IpOworICAgICAg
ICBsaW5rU2xvd1BhdGhUbyh2bSwgY2FsbExpbmtJbmZvLCBsaW5rUG9seW1vcnBoaWNDYWxsVGh1
bmtHZW5lcmF0b3IpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAogICAgIGxpbmtTbG93
Rm9yKHZtLCBjYWxsTGlua0luZm8pOwogfQogCi12b2lkIGxpbmtEaXJlY3RGb3IoCit2b2lkIGxp
bmtEaXJlY3RDYWxsKAogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lLCBDYWxsTGlua0luZm8mIGNh
bGxMaW5rSW5mbywgQ29kZUJsb2NrKiBjYWxsZWVDb2RlQmxvY2ssCiAgICAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGNvZGVQdHIpCiB7CkBAIC0xMjY5LDkgKzEyNjcsNyBA
QCB2b2lkIGxpbmtEaXJlY3RGb3IoCiAgICAgaWYgKHNob3VsZER1bXBEaXNhc3NlbWJseUZvcihj
YWxsZXJDb2RlQmxvY2spKQogICAgICAgICBkYXRhTG9nKCJMaW5raW5nIGNhbGwgaW4gIiwgRnVs
bENvZGVPcmlnaW4oY2FsbGVyQ29kZUJsb2NrLCBjYWxsTGlua0luZm8uY29kZU9yaWdpbigpKSwg
IiB0byAiLCBwb2ludGVyRHVtcChjYWxsZWVDb2RlQmxvY2spLCAiLCBlbnRyeXBvaW50IGF0ICIs
IGNvZGVQdHIsICJcbiIpOwogCi0gICAgaWYgKGNhbGxMaW5rSW5mby5jYWxsVHlwZSgpID09IENh
bGxMaW5rSW5mbzo6RGlyZWN0VGFpbENhbGwpCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBh
dGNoSnVtcFRvTm9wKGNhbGxMaW5rSW5mby5wYXRjaGFibGVKdW1wKCkpOwotICAgIE1hY3JvQXNz
ZW1ibGVyOjpyZXBhdGNoTmVhckNhbGwoY2FsbExpbmtJbmZvLmhvdFBhdGhPdGhlcigpLCBDb2Rl
TG9jYXRpb25MYWJlbDxKU0VudHJ5UHRyVGFnPihjb2RlUHRyKSk7CisgICAgY2FsbExpbmtJbmZv
LnNldERpcmVjdENhbGxUYXJnZXQoQ29kZUxvY2F0aW9uTGFiZWw8SlNFbnRyeVB0clRhZz4oY29k
ZVB0cikpOwogCiAgICAgaWYgKGNhbGxlZUNvZGVCbG9jaykKICAgICAgICAgY2FsbGVlQ29kZUJs
b2NrLT5saW5rSW5jb21pbmdDYWxsKGNhbGxGcmFtZSwgJmNhbGxMaW5rSW5mbyk7CkBAIC0xMjg5
LDIxICsxMjg1LDE2IEBAIHN0YXRpYyB2b2lkIHJldmVydENhbGwoVk0mIHZtLCBDYWxsTGlua0kK
IHsKICAgICBpZiAoY2FsbExpbmtJbmZvLmlzRGlyZWN0KCkpIHsKICAgICAgICAgY2FsbExpbmtJ
bmZvLmNsZWFyQ29kZUJsb2NrKCk7Ci0gICAgICAgIGlmICghY2FsbExpbmtJbmZvLmNsZWFyZWRC
eUpldHRpc29uKCkpIHsKLSAgICAgICAgICAgIGlmIChjYWxsTGlua0luZm8uY2FsbFR5cGUoKSA9
PSBDYWxsTGlua0luZm86OkRpcmVjdFRhaWxDYWxsKQotICAgICAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpyZXBhdGNoSnVtcChjYWxsTGlua0luZm8ucGF0Y2hhYmxlSnVtcCgpLCBjYWxsTGlu
a0luZm8uc2xvd1BhdGhTdGFydCgpKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaE5lYXJDYWxsKGNhbGxMaW5rSW5mby5ob3RQYXRoT3Ro
ZXIoKSwgY2FsbExpbmtJbmZvLnNsb3dQYXRoU3RhcnQoKSk7Ci0gICAgICAgIH0KKyAgICAgICAg
aWYgKCFjYWxsTGlua0luZm8uY2xlYXJlZEJ5SmV0dGlzb24oKSkKKyAgICAgICAgICAgIGNhbGxM
aW5rSW5mby5pbml0aWFsaXplRGlyZWN0Q2FsbCgpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGlm
ICghY2FsbExpbmtJbmZvLmNsZWFyZWRCeUpldHRpc29uKCkpIHsKLSAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpyZXZlcnRKdW1wUmVwbGFjZW1lbnRUb0JyYW5jaFB0cldpdGhQYXRjaCgKLSAg
ICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6c3RhcnRPZkJyYW5jaFB0cldpdGhQYXRjaE9u
UmVnaXN0ZXIoY2FsbExpbmtJbmZvLmhvdFBhdGhCZWdpbigpKSwKLSAgICAgICAgICAgICAgICBj
YWxsTGlua0luZm8uY2FsbGVlR1BSKCksIG51bGxwdHIpOwotICAgICAgICAgICAgbGlua1Nsb3dG
b3Iodm0sIGNhbGxMaW5rSW5mbywgY29kZVJlZik7Ci0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6cmVwYXRjaFBvaW50ZXIoY2FsbExpbmtJbmZvLmhvdFBhdGhCZWdpbigpLCBudWxscHRyKTsK
KyAgICAgICAgICAgIGxpbmtTbG93UGF0aFRvKHZtLCBjYWxsTGlua0luZm8sIGNvZGVSZWYpOwor
CisgICAgICAgICAgICBpZiAoY2FsbExpbmtJbmZvLnN0dWIoKSkKKyAgICAgICAgICAgICAgICBj
YWxsTGlua0luZm8ucmV2ZXJ0Q2FsbFRvU3R1YigpOwogICAgICAgICB9Ci0gICAgICAgIGNhbGxM
aW5rSW5mby5jbGVhckNhbGxlZSgpOworICAgICAgICBjYWxsTGlua0luZm8uY2xlYXJDYWxsZWUo
KTsgLy8gVGhpcyBhbHNvIGNsZWFycyB0aGUgaW5saW5lIGNhY2hlIGJvdGggZm9yIGRhdGEgYW5k
IGNvZGUtYmFzZWQgY2FjaGVzLgogICAgIH0KICAgICBjYWxsTGlua0luZm8uY2xlYXJTZWVuKCk7
CiAgICAgY2FsbExpbmtJbmZvLmNsZWFyU3R1YigpOwpAQCAtMTMxMiw5ICsxMzAzLDkgQEAgc3Rh
dGljIHZvaWQgcmV2ZXJ0Q2FsbChWTSYgdm0sIENhbGxMaW5rSQogICAgICAgICBjYWxsTGlua0lu
Zm8ucmVtb3ZlKCk7CiB9CiAKLXZvaWQgdW5saW5rRm9yKFZNJiB2bSwgQ2FsbExpbmtJbmZvJiBj
YWxsTGlua0luZm8pCit2b2lkIHVubGlua0NhbGwoVk0mIHZtLCBDYWxsTGlua0luZm8mIGNhbGxM
aW5rSW5mbykKIHsKLSAgICBkYXRhTG9nTG5JZihPcHRpb25zOjpkdW1wRGlzYXNzZW1ibHkoKSwg
IlVubGlua2luZyBjYWxsIGF0ICIsIGNhbGxMaW5rSW5mby5ob3RQYXRoT3RoZXIoKSk7CisgICAg
ZGF0YUxvZ0xuSWYoT3B0aW9uczo6ZHVtcERpc2Fzc2VtYmx5KCksICJVbmxpbmtpbmcgY2FsbCBh
dCAiLCBjYWxsTGlua0luZm8uZmFzdFBhdGhTdGFydCgpKTsKICAgICAKICAgICByZXZlcnRDYWxs
KHZtLCBjYWxsTGlua0luZm8sIHZtLmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvciku
cmV0YWdnZWQ8SklUU3R1YlJvdXRpbmVQdHJUYWc+KCkpOwogfQpAQCAtMTU4MCw3ICsxNTcxLDcg
QEAgdm9pZCBsaW5rUG9seW1vcnBoaWNDYWxsKEpTR2xvYmFsT2JqZWN0KgogICAgIH0KICAgICBz
dHViSml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGdsb2JhbE9iamVjdCksIEdQ
UkluZm86OnJlZ1QzKTsKICAgICBzdHViSml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
UHRyKCZjYWxsTGlua0luZm8pLCBHUFJJbmZvOjpyZWdUMik7Ci0gICAgc3R1YkppdC5tb3ZlKEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihjYWxsTGlua0luZm8uY2FsbFJldHVybkxvY2F0aW9u
KCkudW50YWdnZWRFeGVjdXRhYmxlQWRkcmVzcygpKSwgR1BSSW5mbzo6cmVnVDQpOworICAgIHN0
dWJKaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoY2FsbExpbmtJbmZvLmRvbmVM
b2NhdGlvbigpLnVudGFnZ2VkRXhlY3V0YWJsZUFkZHJlc3MoKSksIEdQUkluZm86OnJlZ1Q0KTsK
ICAgICAKICAgICBzdHViSml0LnJlc3RvcmVSZXR1cm5BZGRyZXNzQmVmb3JlUmV0dXJuKEdQUklu
Zm86OnJlZ1Q0KTsKICAgICBBc3NlbWJseUhlbHBlcnM6Okp1bXAgc2xvdyA9IHN0dWJKaXQuanVt
cCgpOwpAQCAtMTYwMywyOSArMTU5NCwyMyBAQCB2b2lkIGxpbmtQb2x5bW9ycGhpY0NhbGwoSlNH
bG9iYWxPYmplY3QqCiAgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoY2FsbFRvQ29kZVB0ci5jYWxs
LCBGdW5jdGlvblB0cjxKU0VudHJ5UHRyVGFnPihjYWxsVG9Db2RlUHRyLmNvZGVQdHIpKTsKICNl
bmRpZgogICAgIH0KLSAgICBpZiAoaXNXZWJBc3NlbWJseSB8fCBKSVRDb2RlOjppc09wdGltaXpp
bmdKSVQoY2FsbGVyQ29kZUJsb2NrLT5qaXRUeXBlKCkpKQotICAgICAgICBwYXRjaEJ1ZmZlci5s
aW5rKGRvbmUsIGNhbGxMaW5rSW5mby5jYWxsUmV0dXJuTG9jYXRpb24oKS5sYWJlbEF0T2Zmc2V0
KDApKTsKLSAgICBlbHNlCi0gICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoZG9uZSwgY2FsbExpbmtJ
bmZvLmhvdFBhdGhPdGhlcigpLmxhYmVsQXRPZmZzZXQoMCkpOworICAgIHBhdGNoQnVmZmVyLmxp
bmsoZG9uZSwgY2FsbExpbmtJbmZvLmRvbmVMb2NhdGlvbigpKTsKICAgICBwYXRjaEJ1ZmZlci5s
aW5rKHNsb3csIENvZGVMb2NhdGlvbkxhYmVsPEpJVFRodW5rUHRyVGFnPih2bS5nZXRDVElTdHVi
KGxpbmtQb2x5bW9ycGhpY0NhbGxUaHVua0dlbmVyYXRvcikuY29kZSgpKSk7CiAgICAgCiAgICAg
YXV0byBzdHViUm91dGluZSA9IGFkb3B0UmVmKCpuZXcgUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRp
bmUoCiAgICAgICAgIEZJTkFMSVpFX0NPREVfRk9SKAogICAgICAgICAgICAgY2FsbGVyQ29kZUJs
b2NrLCBwYXRjaEJ1ZmZlciwgSklUU3R1YlJvdXRpbmVQdHJUYWcsCiAgICAgICAgICAgICAiUG9s
eW1vcnBoaWMgY2FsbCBzdHViIGZvciAlcywgcmV0dXJuIHBvaW50ICVwLCB0YXJnZXRzICVzIiwK
LSAgICAgICAgICAgICAgICBpc1dlYkFzc2VtYmx5ID8gIldlYkFzc2VtYmx5IiA6IHRvQ1N0cmlu
ZygqY2FsbGVyQ29kZUJsb2NrKS5kYXRhKCksIGNhbGxMaW5rSW5mby5jYWxsUmV0dXJuTG9jYXRp
b24oKS5sYWJlbEF0T2Zmc2V0KDApLmV4ZWN1dGFibGVBZGRyZXNzKCksCisgICAgICAgICAgICAg
ICAgaXNXZWJBc3NlbWJseSA/ICJXZWJBc3NlbWJseSIgOiB0b0NTdHJpbmcoKmNhbGxlckNvZGVC
bG9jaykuZGF0YSgpLCBjYWxsTGlua0luZm8uZG9uZUxvY2F0aW9uKCkuZXhlY3V0YWJsZUFkZHJl
c3MoKSwKICAgICAgICAgICAgICAgICB0b0NTdHJpbmcobGlzdER1bXAoY2FsbENhc2VzKSkuZGF0
YSgpKSwKICAgICAgICAgdm0sIG93bmVyLCBjYWxsRnJhbWUtPmNhbGxlckZyYW1lKCksIGNhbGxM
aW5rSW5mbywgY2FsbENhc2VzLAogICAgICAgICBXVEZNb3ZlKGZhc3RDb3VudHMpKSk7Ci0gICAg
Ci0gICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGxhY2VXaXRoSnVtcCgKLSAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OnN0YXJ0T2ZCcmFuY2hQdHJXaXRoUGF0Y2hPblJlZ2lzdGVyKGNhbGxMaW5rSW5mby5o
b3RQYXRoQmVnaW4oKSksCi0gICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5l
UHRyVGFnPihzdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOworCiAgICAgLy8gVGhlIG9yaWdp
bmFsIHNsb3cgcGF0aCBpcyB1bnJlYWNoYWJsZSBvbiA2NC1iaXRzLCBidXQgc3RpbGwKICAgICAv
LyByZWFjaGFibGUgb24gMzItYml0cyBzaW5jZSBhIG5vbi1jZWxsIGNhbGxlZSB3aWxsIGFsd2F5
cwogICAgIC8vIHRyaWdnZXIgdGhlIHNsb3cgcGF0aAogICAgIGxpbmtTbG93Rm9yKHZtLCBjYWxs
TGlua0luZm8pOwotICAgIAorCiAgICAgLy8gSWYgdGhlcmUgaGFkIGJlZW4gYSBwcmV2aW91cyBz
dHViIHJvdXRpbmUsIHRoYXQgb25lIHdpbGwgZGllIGFzIHNvb24gYXMgdGhlIEdDIHJ1bnMgYW5k
IHNlZXMKICAgICAvLyB0aGF0IGl0J3Mgbm8gbG9uZ2VyIG9uIHN0YWNrLgogICAgIGNhbGxMaW5r
SW5mby5zZXRTdHViKFdURk1vdmUoc3R1YlJvdXRpbmUpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvUmVwYXRjaC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvUmVwYXRjaC5oCShyZXZpc2lvbiAyNzc0NDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L1JlcGF0Y2guaAkod29ya2luZyBjb3B5KQpAQCAtNTYsMTAgKzU2LDEwIEBAIHZvaWQg
cmVwYXRjaEluQnlJRChKU0dsb2JhbE9iamVjdCosIENvZGUKIHZvaWQgcmVwYXRjaENoZWNrUHJp
dmF0ZUJyYW5kKEpTR2xvYmFsT2JqZWN0KiwgQ29kZUJsb2NrKiwgSlNPYmplY3QqLCBDYWNoZWFi
bGVJZGVudGlmaWVyLCBTdHJ1Y3R1cmVTdHViSW5mbyYpOwogdm9pZCByZXBhdGNoU2V0UHJpdmF0
ZUJyYW5kKEpTR2xvYmFsT2JqZWN0KiwgQ29kZUJsb2NrKiwgSlNPYmplY3QqLCBTdHJ1Y3R1cmUq
LCBDYWNoZWFibGVJZGVudGlmaWVyLCBTdHJ1Y3R1cmVTdHViSW5mbyYpOwogdm9pZCByZXBhdGNo
SW5zdGFuY2VPZihKU0dsb2JhbE9iamVjdCosIENvZGVCbG9jayosIEpTVmFsdWUgdmFsdWUsIEpT
VmFsdWUgcHJvdG90eXBlLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIGJvb2wgd2FzRm91bmQpOwotdm9p
ZCBsaW5rRm9yKFZNJiwgQ2FsbEZyYW1lKiwgQ2FsbExpbmtJbmZvJiwgQ29kZUJsb2NrKiwgSlNP
YmplY3QqIGNhbGxlZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+KTsKLXZv
aWQgbGlua0RpcmVjdEZvcihDYWxsRnJhbWUqLCBDYWxsTGlua0luZm8mLCBDb2RlQmxvY2sqLCBN
YWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4pOwordm9pZCBsaW5rTW9ub21vcnBo
aWNDYWxsKFZNJiwgQ2FsbEZyYW1lKiwgQ2FsbExpbmtJbmZvJiwgQ29kZUJsb2NrKiwgSlNPYmpl
Y3QqIGNhbGxlZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+KTsKK3ZvaWQg
bGlua0RpcmVjdENhbGwoQ2FsbEZyYW1lKiwgQ2FsbExpbmtJbmZvJiwgQ29kZUJsb2NrKiwgTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+KTsKIHZvaWQgbGlua1Nsb3dGb3IoQ2Fs
bEZyYW1lKiwgQ2FsbExpbmtJbmZvJik7Ci12b2lkIHVubGlua0ZvcihWTSYsIENhbGxMaW5rSW5m
byYpOwordm9pZCB1bmxpbmtDYWxsKFZNJiwgQ2FsbExpbmtJbmZvJik7CiB2b2lkIGxpbmtQb2x5
bW9ycGhpY0NhbGwoSlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUqLCBDYWxsTGlua0luZm8mLCBD
YWxsVmFyaWFudCk7CiB2b2lkIHJlc2V0R2V0QnkoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1Yklu
Zm8mLCBHZXRCeUtpbmQpOwogdm9pZCByZXNldFB1dEJ5SUQoQ29kZUJsb2NrKiwgU3RydWN0dXJl
U3R1YkluZm8mKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dhc21Ub0pT
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XYXNtVG9K
Uy5jcHAJKHJldmlzaW9uIDI3NzQ0MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L1dhc21Ub0pTLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYxLDE5ICsyNjEsMTggQEAgRXhwZWN0
ZWQ8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPFdhc21FbnRyeQogCiAgICAgQ2FsbExpbmtJbmZvKiBj
YWxsTGlua0luZm8gPSBjYWxsTGlua0luZm9zLmFkZChDb2RlT3JpZ2luKCkpOwogICAgIGNhbGxM
aW5rSW5mby0+c2V0VXBDYWxsKENhbGxMaW5rSW5mbzo6Q2FsbCwgaW1wb3J0SlNDZWxsR1BSUmVn
KTsKLSAgICBKSVQ6OkRhdGFMYWJlbFB0ciB0YXJnZXRUb0NoZWNrOwotICAgIEpJVDo6VHJ1c3Rl
ZEltbVB0ciBpbml0aWFsUmlnaHRWYWx1ZShudWxscHRyKTsKLSAgICBKSVQ6Okp1bXAgc2xvd1Bh
dGggPSBqaXQuYnJhbmNoUHRyV2l0aFBhdGNoKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgaW1w
b3J0SlNDZWxsR1BSUmVnLCB0YXJnZXRUb0NoZWNrLCBpbml0aWFsUmlnaHRWYWx1ZSk7Ci0gICAg
SklUOjpDYWxsIGZhc3RDYWxsID0gaml0Lm5lYXJDYWxsKCk7CisgICAgYXV0byBzbG93UGF0aCA9
IGNhbGxMaW5rSW5mby0+ZW1pdEZhc3RQYXRoKGppdCwgaW1wb3J0SlNDZWxsR1BSUmVnLCBJbnZh
bGlkR1BSUmVnLCBDYWxsTGlua0luZm86OlVzZURhdGFJQzo6Tm8pOworCiAgICAgSklUOjpKdW1w
IGRvbmUgPSBqaXQuanVtcCgpOwogICAgIHNsb3dQYXRoLmxpbmsoJmppdCk7CisgICAgYXV0byBz
bG93UGF0aFN0YXJ0ID0gaml0LmxhYmVsKCk7CiAgICAgLy8gQ2FsbGVlIG5lZWRzIHRvIGJlIGlu
IHJlZ1QwIGhlcmUuCi0gICAgaml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIo
Y2FsbExpbmtJbmZvKSwgR1BSSW5mbzo6cmVnVDIpOyAvLyBMaW5rIGluZm8gbmVlZHMgdG8gYmUg
aW4gcmVnVDIuCiAgICAgaml0LmxvYWRXYXNtQ29udGV4dEluc3RhbmNlKEdQUkluZm86OnJlZ1Qz
KTsKICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDMs
IEluc3RhbmNlOjpvZmZzZXRPZk93bmVyKCkpLCBHUFJJbmZvOjpyZWdUMyk7CiAgICAgaml0Lmxv
YWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QzLCBKU1dlYkFzc2VtYmx5
SW5zdGFuY2U6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCBHUFJJbmZvOjpyZWdUMyk7Ci0gICAg
SklUOjpDYWxsIHNsb3dDYWxsID0gaml0Lm5lYXJDYWxsKCk7CisgICAgY2FsbExpbmtJbmZvLT5l
bWl0U2xvd1BhdGgodm0sIGppdCk7CiAgICAgZG9uZS5saW5rKCZqaXQpOworICAgIGF1dG8gZG9u
ZUxvY2F0aW9uID0gaml0LmxhYmVsKCk7CiAKICAgICBpZiAoc2lnbmF0dXJlLnJldHVybkNvdW50
KCkgPT0gMSkgewogICAgICAgICBzd2l0Y2ggKHNpZ25hdHVyZS5yZXR1cm5UeXBlKDApLmtpbmQp
IHsKQEAgLTQyMSwxMSArNDIwLDkgQEAgRXhwZWN0ZWQ8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPFdh
c21FbnRyeQogICAgIGlmIChVTkxJS0VMWShwYXRjaEJ1ZmZlci5kaWRGYWlsVG9BbGxvY2F0ZSgp
KSkKICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKEJpbmRpbmdGYWlsdXJlOjpPdXRPZk1l
bW9yeSk7CiAKLSAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3dDYWxsLCBGdW5jdGlvblB0cjxKSVRU
aHVua1B0clRhZz4odm0uZ2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5jb2RlKCkp
KTsKLSAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBjYWxsUmV0dXJuTG9j
YXRpb24ocGF0Y2hCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPEpTSW50ZXJuYWxQdHJUYWc+KHNs
b3dDYWxsKSk7Ci0gICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gaG90UGF0
aEJlZ2luKHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4odGFyZ2V0VG9D
aGVjaykpOwotICAgIENvZGVMb2NhdGlvbk5lYXJDYWxsPEpTSW50ZXJuYWxQdHJUYWc+IGhvdFBh
dGhPdGhlciA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxKU0ludGVybmFsUHRyVGFn
PihmYXN0Q2FsbCk7Ci0gICAgY2FsbExpbmtJbmZvLT5zZXRDYWxsTG9jYXRpb25zKGNhbGxSZXR1
cm5Mb2NhdGlvbiwgaG90UGF0aEJlZ2luLCBob3RQYXRoT3RoZXIpOworICAgIGNhbGxMaW5rSW5m
by0+c2V0Q29kZUxvY2F0aW9ucygKKyAgICAgICAgcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU0lu
dGVybmFsUHRyVGFnPihzbG93UGF0aFN0YXJ0KSwKKyAgICAgICAgcGF0Y2hCdWZmZXIubG9jYXRp
b25PZjxKU0ludGVybmFsUHRyVGFnPihkb25lTG9jYXRpb24pKTsKIAogICAgIHJldHVybiBGSU5B
TElaRV9XQVNNX0NPREUocGF0Y2hCdWZmZXIsIFdhc21FbnRyeVB0clRhZywgIldlYkFzc2VtYmx5
LT5KYXZhU2NyaXB0IGltcG9ydFslaV0gJXMiLCBpbXBvcnRJbmRleCwgc2lnbmF0dXJlLnRvU3Ry
aW5nKCkuYXNjaWkoKS5kYXRhKCkpOwogfQo=
</data>
<flag name="review"
          id="449605"
          type_id="1"
          status="+"
          setter="msaboff"
    />
    <flag name="commit-queue"
          id="449618"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>428860</attachid>
            <date>2021-05-17 13:34:34 -0700</date>
            <delta_ts>2021-05-18 14:30:57 -0700</delta_ts>
            <desc>patch for landing</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>90690</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjc3NjAyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyNSBA
QAorMjAyMS0wNS0xNyAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KKworICAgICAg
ICBBZGQgRGF0YSBDYWxsIElDcyB0aGF0IGRvbid0IHJlcGF0Y2ggYW5kIHVzZSB0aGVtIGluIHRo
ZSBiYXNlbGluZSBKSVQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIyNTMyMQorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNzc3NzM3OTY+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTWljaGFlbCBTYWJvZmYuCisKKyAgICAgICAgVGhpcyBwYXRjaCBhZGRz
IERhdGEgSUNzIGZvciBjYWxscy4gRGF0YSBJQ3MgZm9yIGNhbGxzIHdvcmsgYnkgbG9hZGluZyBh
IGNvZGUgCisgICAgICAgIHBvaW50ZXIgZnJvbSBDYWxsTGlua0luZm8sIGFuZCBpbmRpcmVjdCBj
YWxsaW5nIHRoYXQgcG9pbnRlci4gVGhpcyBtZWFucyB0aGF0CisgICAgICAgIHRvIHJlcGF0Y2gg
c3VjaCBhbiBJQywgYWxsIHdlIG5lZWQgdG8gZG8gaXMgcmVwbGFjZSBhIGNvZGUgcG9pbnRlciBp
bnNpZGUKKyAgICAgICAgQ2FsbExpbmtJbmZvLiBObyBuZWVkIHRvIHJlcGF0Y2ggdGhlIEpJVCBj
b2RlLgorICAgICAgICAKKyAgICAgICAgVGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gb25seSBk
b2VzIHRoaXMgZm9yIG1vbm9tb3JwaGljIGNhbGxzLiBXZSBzdGlsbAorICAgICAgICByZXBhdGNo
IHRoZSBKSVQgY29kZSBmb3IgcG9seW1vcnBoaWMgY2FsbHMuIEluIGEgZm9sbG93dXAsIHdlIHdp
bGwgYWxzbworICAgICAgICBvcHQgcG9seW1vcnBoaWMgY2FsbCBJQ3MgaW50byBkYXRhLWJhc2Vk
IGNhbGxzOgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjI1NzkzCisgICAgICAgIAorICAgICAgICBUaGlzIHBhdGNoIG9ubHkgdXNlcyBEYXRhIENhbGwg
SUNzIGZvciB0aGUgQmFzZWxpbmUgSklULiBFdmVuIHdpdGggdGhhdCwgaXQKKyAgICAgICAgcmVk
dWNlcyB0aGUgbnVtYmVyIG9mIGNhbGxzIHRvIGNhY2hlRmx1c2ggYnkgfjQ1JSBvbiBKZXRTdHJl
YW0yLgorICAgICAgICAKKyAgICAgICAgUGVyZm9ybWFuY2UgaXMgbmV1dHJhbCBvbiBBUyBNYWNz
LCBidXQgaXQgcGF2ZXMgdGhlIHdheSB0b3dhcmRzIGRvaW5nCisgICAgICAgIHVubGlua2VkIEpJ
VHRpbmcgaW4gSlNDLgorCisgICAgICAgICogYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJs
ZXIuaDoKKyAgICAgICAgKEpTQzo6QWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjo6YWRkTGF0ZUxpbmtU
YXNrKToKKyAgICAgICAgKiBhc3NlbWJsZXIvTGlua0J1ZmZlci5jcHA6CisgICAgICAgIChKU0M6
OkxpbmtCdWZmZXI6OmxpbmtDb2RlKToKKyAgICAgICAgKEpTQzo6TGlua0J1ZmZlcjo6cGVyZm9y
bUZpbmFsaXphdGlvbik6CisgICAgICAgICogYXNzZW1ibGVyL0xpbmtCdWZmZXIuaDoKKyAgICAg
ICAgKiBieXRlY29kZS9BY2Nlc3NDYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6
Z2VuZXJhdGVJbXBsKToKKyAgICAgICAgKiBieXRlY29kZS9DYWxsTGlua0luZm8uY3BwOgorICAg
ICAgICAoSlNDOjpDYWxsTGlua0luZm86OkNhbGxMaW5rSW5mbyk6CisgICAgICAgIChKU0M6OkNh
bGxMaW5rSW5mbzo6dW5saW5rKToKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtJbmZvOjpmYXN0UGF0
aFN0YXJ0KToKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtJbmZvOjpzbG93UGF0aFN0YXJ0KToKKyAg
ICAgICAgKEpTQzo6Q2FsbExpbmtJbmZvOjpkb25lTG9jYXRpb24pOgorICAgICAgICAoSlNDOjpD
YWxsTGlua0luZm86OnNldE1vbm9tb3JwaGljQ2FsbGVlKToKKyAgICAgICAgKEpTQzo6Q2FsbExp
bmtJbmZvOjpjbGVhckNhbGxlZSk6CisgICAgICAgIChKU0M6OkNhbGxMaW5rSW5mbzo6ZW1pdEZp
cnN0SW5zdHJ1Y3Rpb25Gb3JEYXRhSUMpOgorICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86OmVt
aXRGYXN0UGF0aEltcGwpOgorICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86OmVtaXRGYXN0UGF0
aCk6CisgICAgICAgIChKU0M6OkNhbGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxsRmFzdFBhdGgpOgor
ICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86OmVtaXRTbG93UGF0aCk6CisgICAgICAgIChKU0M6
OkNhbGxMaW5rSW5mbzo6ZW1pdERpcmVjdEZhc3RQYXRoKToKKyAgICAgICAgKEpTQzo6Q2FsbExp
bmtJbmZvOjplbWl0RGlyZWN0VGFpbENhbGxGYXN0UGF0aCk6CisgICAgICAgIChKU0M6OkNhbGxM
aW5rSW5mbzo6aW5pdGlhbGl6ZURpcmVjdENhbGwpOgorICAgICAgICAoSlNDOjpDYWxsTGlua0lu
Zm86OnNldERpcmVjdENhbGxUYXJnZXQpOgorICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86OnNl
dFNsb3dQYXRoQ2FsbERlc3RpbmF0aW9uKToKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtJbmZvOjpy
ZXZlcnRDYWxsVG9TdHViKToKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtJbmZvOjpzZXRTdHViKToK
KyAgICAgICAgKEpTQzo6Q2FsbExpbmtJbmZvOjpjYWxsUmV0dXJuTG9jYXRpb24pOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86OnBhdGNoYWJsZUp1bXApOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86OmhvdFBhdGhCZWdpbik6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OkNhbGxMaW5rSW5mbzo6c2V0Q2FsbGVlKTogRGVsZXRlZC4KKyAgICAgICAgKiBi
eXRlY29kZS9DYWxsTGlua0luZm8uaDoKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtJbmZvOjpjYWxs
ZWVHUFIgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86OmlzRGF0YUlDIGNvbnN0
KToKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtJbmZvOjpzZXRVc2VzRGF0YUlDcyk6CisgICAgICAg
IChKU0M6OkNhbGxMaW5rSW5mbzo6c2V0Q29kZUxvY2F0aW9ucyk6CisgICAgICAgIChKU0M6OkNh
bGxMaW5rSW5mbzo6b2Zmc2V0T2ZDYWxsZWUpOgorICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86
Om9mZnNldE9mTW9ub21vcnBoaWNDYWxsRGVzdGluYXRpb24pOgorICAgICAgICAoSlNDOjpDYWxs
TGlua0luZm86Om9mZnNldE9mU2xvd1BhdGhDYWxsRGVzdGluYXRpb24pOgorICAgICAgICAoSlND
OjpDYWxsTGlua0luZm86OnNldENhbGxMb2NhdGlvbnMpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpDYWxsTGlua0luZm86OmhvdFBhdGhPdGhlcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNh
bGxMaW5rSW5mbzo6c2V0U3R1Yik6IERlbGV0ZWQuCisgICAgICAgICogZGZnL0RGR0pJVENvbXBp
bGVyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6bGluayk6CisgICAgICAg
ICogZGZnL0RGR0pJVENvbXBpbGVyLmg6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6
OmFkZEpTQ2FsbCk6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OmFkZEpTRGlyZWN0
Q2FsbCk6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OkpTQ2FsbFJlY29yZDo6SlND
YWxsUmVjb3JkKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6SlNEaXJlY3RDYWxs
UmVjb3JkOjpKU0RpcmVjdENhbGxSZWNvcmQpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBp
bGVyOjphZGRKU0RpcmVjdFRhaWxDYWxsKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpK
SVRDb21waWxlcjo6SlNEaXJlY3RUYWlsQ2FsbFJlY29yZDo6SlNEaXJlY3RUYWlsQ2FsbFJlY29y
ZCk6IERlbGV0ZWQuCisgICAgICAgICogZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6Y2FsbGVyUmV0dXJuUEMpOgorICAgICAgICAqIGRmZy9ERkdP
cGVyYXRpb25zLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpKU0NfREVGSU5FX0pJVF9PUEVSQVRJ
T04pOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcDoKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwpOgorICAgICAgICAqIGRmZy9ERkdT
cGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6
ZW1pdENhbGwpOgorICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1RvQjMuY3BwOgorICAgICAgICAo
SlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlQ2FsbE9yQ29uc3RydWN0KToKKyAg
ICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZURpcmVjdENhbGxPckNv
bnN0cnVjdCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVU
YWlsQ2FsbCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVD
YWxsT3JDb25zdHJ1Y3RWYXJhcmdzU3ByZWFkKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxv
d2VyREZHVG9CMzo6Y29tcGlsZUNhbGxPckNvbnN0cnVjdFZhcmFyZ3MpOgorICAgICAgICAqIGpp
dC9DQ2FsbEhlbHBlcnMuY3BwOgorICAgICAgICAoSlNDOjpDQ2FsbEhlbHBlcnM6OmVtaXRKSVRD
b2RlT3Zlcik6CisgICAgICAgICogaml0L0NDYWxsSGVscGVycy5oOgorICAgICAgICAqIGppdC9K
SVQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmxpbmspOgorICAgICAgICAqIGppdC9KSVQuaDoK
KyAgICAgICAgKiBqaXQvSklUQ2FsbC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZVRh
aWxDYWxsKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlT3BDYWxsKToKKyAgICAgICAgKEpT
Qzo6SklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2UpOgorICAgICAgICAqIGppdC9KSVRDYWxsMzJf
NjQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVPcENhbGwpOgorICAgICAgICAoSlND
OjpKSVQ6OmNvbXBpbGVPcENhbGxTbG93Q2FzZSk6CisgICAgICAgICogaml0L0pJVE9wZXJhdGlv
bnMuY3BwOgorICAgICAgICAoSlNDOjpKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04pOgorICAgICAg
ICAqIGppdC9Qb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZS5jcHA6CisgICAgICAgIChKU0M6OlBv
bHltb3JwaGljQ2FsbE5vZGU6OnVubGluayk6CisgICAgICAgICogaml0L1JlcGF0Y2guY3BwOgor
ICAgICAgICAoSlNDOjpsaW5rU2xvd1BhdGhUbyk6CisgICAgICAgIChKU0M6OmxpbmtTbG93Rm9y
KToKKyAgICAgICAgKEpTQzo6bGlua01vbm9tb3JwaGljQ2FsbCk6CisgICAgICAgIChKU0M6Omxp
bmtEaXJlY3RDYWxsKToKKyAgICAgICAgKEpTQzo6cmV2ZXJ0Q2FsbCk6CisgICAgICAgIChKU0M6
OnVubGlua0NhbGwpOgorICAgICAgICAoSlNDOjpsaW5rUG9seW1vcnBoaWNDYWxsKToKKyAgICAg
ICAgKEpTQzo6bGlua0Zvcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OmxpbmtEaXJlY3RGb3Ip
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjp1bmxpbmtGb3IpOiBEZWxldGVkLgorICAgICAgICAq
IGppdC9SZXBhdGNoLmg6CisgICAgICAgICogd2FzbS9qcy9XYXNtVG9KUy5jcHA6CisgICAgICAg
IChKU0M6Oldhc206Ondhc21Ub0pTKToKKwogMjAyMS0wNS0xNiAgTWFyayBMYW0gIDxtYXJrLmxh
bUBhcHBsZS5jb20+CiAKICAgICAgICAgSW1wbGVtZW50IGJhc2VsaW5lIG9wX2VudGVyLCBvcF9y
ZXQsIG9wX2NoZWNrX3RyYXBzLCBvcF90aHJvdyB1c2luZyBKSVQgdGh1bmtzLgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3Jv
QXNzZW1ibGVyLmgJKHJldmlzaW9uIDI3NzYwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9h
c3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC05NzEs
NiArOTcxLDEyIEBAIHB1YmxpYzoKICAgICAgICAgbV9saW5rVGFza3MuYXBwZW5kKGNyZWF0ZVNo
YXJlZFRhc2s8dm9pZChMaW5rQnVmZmVyJik+KGZ1bmN0b3IpKTsKICAgICB9CiAKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQgYWRkTGF0ZUxpbmtUYXNrKGNvbnN0IEZ1
bmN0b3ImIGZ1bmN0b3IpIC8vIFJ1biBhZnRlciBhbGwgbGluayB0YXNrcworICAgIHsKKyAgICAg
ICAgbV9sYXRlTGlua1Rhc2tzLmFwcGVuZChjcmVhdGVTaGFyZWRUYXNrPHZvaWQoTGlua0J1ZmZl
ciYpPihmdW5jdG9yKSk7CisgICAgfQorCiAjaWYgQ09NUElMRVIoR0NDKQogICAgIC8vIFdvcmth
cm91bmQgZm9yIEdDQyBkZW1hbmRpbmcgdGhhdCBtZW1jcHkgIm11c3QgYmUgdGhlIG5hbWUgb2Yg
YSBmdW5jdGlvbiB3aXRoIGV4dGVybmFsIGxpbmthZ2UiLgogICAgIHN0YXRpYyB2b2lkKiBtZW1j
cHkodm9pZCogZHN0LCBjb25zdCB2b2lkKiBzcmMsIHNpemVfdCBzaXplKQpAQCAtMTExNCw2ICsx
MTIwLDcgQEAgcHJvdGVjdGVkOgogICAgIGJvb2wgbV9hbGxvd1NjcmF0Y2hSZWdpc3RlciB7IHRy
dWUgfTsKIAogICAgIFZlY3RvcjxSZWZQdHI8U2hhcmVkVGFzazx2b2lkKExpbmtCdWZmZXImKT4+
PiBtX2xpbmtUYXNrczsKKyAgICBWZWN0b3I8UmVmUHRyPFNoYXJlZFRhc2s8dm9pZChMaW5rQnVm
ZmVyJik+Pj4gbV9sYXRlTGlua1Rhc2tzOwogCiAgICAgZnJpZW5kIGNsYXNzIExpbmtCdWZmZXI7
CiB9OyAvLyBjbGFzcyBBYnN0cmFjdE1hY3JvQXNzZW1ibGVyCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5jcHAJKHJldmlzaW9uIDI3NzYwMikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQzOSw2ICs0MzksNyBAQCB2b2lkIExpbmtCdWZmZXI6OmxpbmtDb2RlKE1h
Y3JvQXNzZW1ibGVyCiAjZW5kaWYgLy8gIUVOQUJMRShCUkFOQ0hfQ09NUEFDVElPTikKIAogICAg
IG1fbGlua1Rhc2tzID0gV1RGTW92ZShtYWNyb0Fzc2VtYmxlci5tX2xpbmtUYXNrcyk7CisgICAg
bV9sYXRlTGlua1Rhc2tzID0gV1RGTW92ZShtYWNyb0Fzc2VtYmxlci5tX2xhdGVMaW5rVGFza3Mp
OwogfQogCiB2b2lkIExpbmtCdWZmZXI6OmFsbG9jYXRlKE1hY3JvQXNzZW1ibGVyJiBtYWNyb0Fz
c2VtYmxlciwgSklUQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQpAQCAtNDcxLDYgKzQ3Miw4IEBA
IHZvaWQgTGlua0J1ZmZlcjo6cGVyZm9ybUZpbmFsaXphdGlvbigpCiB7CiAgICAgZm9yIChhdXRv
JiB0YXNrIDogbV9saW5rVGFza3MpCiAgICAgICAgIHRhc2stPnJ1bigqdGhpcyk7CisgICAgZm9y
IChhdXRvJiB0YXNrIDogbV9sYXRlTGlua1Rhc2tzKQorICAgICAgICB0YXNrLT5ydW4oKnRoaXMp
OwogCiAjaWZuZGVmIE5ERUJVRwogICAgIEFTU0VSVChtX2lzSnVtcElzbGFuZCB8fCAhaXNDb21w
aWxhdGlvblRocmVhZCgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIv
TGlua0J1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvTGlua0J1ZmZlci5oCShyZXZpc2lvbiAyNzc2MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDAzLDYgKzQwMyw3
IEBAIHByaXZhdGU6CiAgICAgUHJvZmlsZSBtX3Byb2ZpbGUgeyBQcm9maWxlOjpVbmNhdGVnb3Jp
emVkIH07CiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPExpbmtCdWZmZXJQdHJUYWc+IG1fY29k
ZTsKICAgICBWZWN0b3I8UmVmUHRyPFNoYXJlZFRhc2s8dm9pZChMaW5rQnVmZmVyJik+Pj4gbV9s
aW5rVGFza3M7CisgICAgVmVjdG9yPFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoTGlua0J1ZmZlciYp
Pj4+IG1fbGF0ZUxpbmtUYXNrczsKIAogICAgIHN0YXRpYyBzaXplX3Qgc19wcm9maWxlQ3VtbXVs
YXRpdmVMaW5rZWRTaXplc1tudW1iZXJPZlByb2ZpbGVzXTsKIH07CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCShyZXZpc2lvbiAyNzc2MDIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE1ODAsMTEgKzE1ODAsNiBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRl
SW1wbChBY2Nlc3NHZW5lCiAgICAgICAgIC8vIFN0dWZmIGZvciBjdXN0b20gZ2V0dGVycy9zZXR0
ZXJzLgogICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgb3BlcmF0aW9uQ2FsbDsKIAotICAgICAg
ICAvLyBTdHVmZiBmb3IgSlMgZ2V0dGVycy9zZXR0ZXJzLgotICAgICAgICBDQ2FsbEhlbHBlcnM6
OkRhdGFMYWJlbFB0ciBhZGRyZXNzT2ZMaW5rRnVuY3Rpb25DaGVjazsKLSAgICAgICAgQ0NhbGxI
ZWxwZXJzOjpDYWxsIGZhc3RQYXRoQ2FsbDsKLSAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIHNs
b3dQYXRoQ2FsbDsKLQogICAgICAgICAvLyBUaGlzIGFsc28gZG9lcyB0aGUgbmVjZXNzYXJ5IGNh
bGN1bGF0aW9ucyBvZiB3aGV0aGVyIG9yIG5vdCB3ZSdyZSBhbgogICAgICAgICAvLyBleGNlcHRp
b24gaGFuZGxpbmcgY2FsbCBzaXRlLgogICAgICAgICBBY2Nlc3NHZW5lcmF0aW9uU3RhdGU6OlNw
aWxsU3RhdGUgc3BpbGxTdGF0ZSA9IHN0YXRlLnByZXNlcnZlTGl2ZVJlZ2lzdGVyc1RvU3RhY2tG
b3JDYWxsKCk7CkBAIC0xNzAxLDI0ICsxNjk2LDIyIEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJh
dGVJbXBsKEFjY2Vzc0dlbmUKICAgICAgICAgICAgICAgICAgICAgICAgIHZpcnR1YWxSZWdpc3Rl
ckZvckFyZ3VtZW50SW5jbHVkaW5nVGhpcygxKS5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3Rlcikp
KTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIHNsb3dD
YXNlID0gaml0LmJyYW5jaFB0cldpdGhQYXRjaCgKLSAgICAgICAgICAgICAgICBDQ2FsbEhlbHBl
cnM6Ok5vdEVxdWFsLCBsb2FkZWRWYWx1ZUdQUiwgYWRkcmVzc09mTGlua0Z1bmN0aW9uQ2hlY2ss
Ci0gICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG51bGxwdHIpKTsK
KyAgICAgICAgICAgIGF1dG8gc2xvd0Nhc2UgPSBhY2Nlc3MuY2FsbExpbmtJbmZvKCktPmVtaXRG
YXN0UGF0aChqaXQsIGxvYWRlZFZhbHVlR1BSLCBsb2FkZWRWYWx1ZUdQUiA9PSBHUFJJbmZvOjpy
ZWdUMiA/IEdQUkluZm86OnJlZ1QwIDogR1BSSW5mbzo6cmVnVDIsIEpJVENvZGU6OmlzT3B0aW1p
emluZ0pJVChjb2RlQmxvY2stPmppdFR5cGUoKSkgPyBDYWxsTGlua0luZm86OlVzZURhdGFJQzo6
Tm8gOiBDYWxsTGlua0luZm86OlVzZURhdGFJQzo6WWVzKTsKKyAgICAgICAgICAgIGF1dG8gZG9u
ZUxvY2F0aW9uID0gaml0LmxhYmVsKCk7CiAKLSAgICAgICAgICAgIGZhc3RQYXRoQ2FsbCA9IGpp
dC5uZWFyQ2FsbCgpOwogICAgICAgICAgICAgaWYgKG1fdHlwZSA9PSBHZXR0ZXIpCiAgICAgICAg
ICAgICAgICAgaml0LnNldHVwUmVzdWx0cyh2YWx1ZVJlZ3MpOwogICAgICAgICAgICAgZG9uZS5h
cHBlbmQoaml0Lmp1bXAoKSk7CiAKICAgICAgICAgICAgIHNsb3dDYXNlLmxpbmsoJmppdCk7Cisg
ICAgICAgICAgICBhdXRvIHNsb3dQYXRoU3RhcnQgPSBqaXQubGFiZWwoKTsKICAgICAgICAgICAg
IGppdC5tb3ZlKGxvYWRlZFZhbHVlR1BSLCBHUFJJbmZvOjpyZWdUMCk7CiAjaWYgVVNFKEpTVkFM
VUUzMl82NCkKICAgICAgICAgICAgIC8vIFdlICphbHdheXMqIGtub3cgdGhhdCB0aGUgZ2V0dGVy
L3NldHRlciwgaWYgbm9uLW51bGwsIGlzIGEgY2VsbC4KICAgICAgICAgICAgIGppdC5tb3ZlKEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLCBHUFJJbmZvOjpyZWdU
MSk7CiAjZW5kaWYKLSAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bVB0cihhY2Nlc3MuY2FsbExpbmtJbmZvKCkpLCBHUFJJbmZvOjpyZWdUMik7CiAgICAgICAgICAg
ICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoZ2xvYmFsT2JqZWN0KSwgR1BS
SW5mbzo6cmVnVDMpOwotICAgICAgICAgICAgc2xvd1BhdGhDYWxsID0gaml0Lm5lYXJDYWxsKCk7
CisgICAgICAgICAgICBhY2Nlc3MuY2FsbExpbmtJbmZvKCktPmVtaXRTbG93UGF0aCh2bSwgaml0
KTsKICAgICAgICAgICAgIGlmIChtX3R5cGUgPT0gR2V0dGVyKQogICAgICAgICAgICAgICAgIGpp
dC5zZXR1cFJlc3VsdHModmFsdWVSZWdzKTsKICAgICAgICAgICAgIGRvbmUuYXBwZW5kKGppdC5q
dW1wKCkpOwpAQCAtMTczNSwxNSArMTcyOCwxMCBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRl
SW1wbChBY2Nlc3NHZW5lCiAgICAgICAgICAgICBib29sIGNhbGxIYXNSZXR1cm5WYWx1ZSA9IGlz
R2V0dGVyKCk7CiAgICAgICAgICAgICByZXN0b3JlTGl2ZVJlZ2lzdGVyc0Zyb21TdGFja0ZvckNh
bGwoc3BpbGxTdGF0ZSwgY2FsbEhhc1JldHVyblZhbHVlKTsKIAotICAgICAgICAgICAgaml0LmFk
ZExpbmtUYXNrKFs9LCAmdm1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgICAg
ICAgICAgdGhpcy0+YXM8R2V0dGVyU2V0dGVyQWNjZXNzQ2FzZT4oKS5jYWxsTGlua0luZm8oKS0+
c2V0Q2FsbExvY2F0aW9ucygKLSAgICAgICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8
SlNJbnRlcm5hbFB0clRhZz4obGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8SlNJbnRlcm5h
bFB0clRhZz4oc2xvd1BhdGhDYWxsKSksCi0gICAgICAgICAgICAgICAgICAgIENvZGVMb2NhdGlv
bkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+KGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFs
UHRyVGFnPihhZGRyZXNzT2ZMaW5rRnVuY3Rpb25DaGVjaykpLAotICAgICAgICAgICAgICAgICAg
ICBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxKU0ludGVybmFsUHRyVGFnPihmYXN0UGF0
aENhbGwpKTsKLQotICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluaygKLSAgICAgICAgICAg
ICAgICAgICAgc2xvd1BhdGhDYWxsLAotICAgICAgICAgICAgICAgICAgICBDb2RlTG9jYXRpb25M
YWJlbDxKSVRUaHVua1B0clRhZz4odm0uZ2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9y
KS5jb2RlKCkpKTsKKyAgICAgICAgICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXIm
IGxpbmtCdWZmZXIpIHsKKyAgICAgICAgICAgICAgICB0aGlzLT5hczxHZXR0ZXJTZXR0ZXJBY2Nl
c3NDYXNlPigpLmNhbGxMaW5rSW5mbygpLT5zZXRDb2RlTG9jYXRpb25zKAorICAgICAgICAgICAg
ICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oc2xvd1BhdGhT
dGFydCksCisgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVy
bmFsUHRyVGFnPihkb25lTG9jYXRpb24pKTsKICAgICAgICAgICAgIH0pOwogICAgICAgICB9IGVs
c2UgewogICAgICAgICAgICAgQVNTRVJUKG1fdHlwZSA9PSBDdXN0b21WYWx1ZUdldHRlciB8fCBt
X3R5cGUgPT0gQ3VzdG9tQWNjZXNzb3JHZXR0ZXIgfHwgbV90eXBlID09IEN1c3RvbVZhbHVlU2V0
dGVyIHx8IG1fdHlwZSA9PSBDdXN0b21BY2Nlc3NvclNldHRlcik7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmNwcAkocmV2aXNpb24gMjc3
NjAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI2LDExICsyNiwxNSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgog
I2luY2x1ZGUgIkNhbGxMaW5rSW5mby5oIgogCisjaW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgiCiAj
aW5jbHVkZSAiQ2FsbEZyYW1lU2h1ZmZsZURhdGEuaCIKKyNpbmNsdWRlICJEaXNhbGxvd01hY3Jv
U2NyYXRjaFJlZ2lzdGVyVXNhZ2UuaCIKICNpbmNsdWRlICJGdW5jdGlvbkNvZGVCbG9jay5oIgog
I2luY2x1ZGUgIkpTQ2VsbElubGluZXMuaCIKKyNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCiAjaW5j
bHVkZSAiT3Bjb2RlLmgiCiAjaW5jbHVkZSAiUmVwYXRjaC5oIgorI2luY2x1ZGUgIlRodW5rR2Vu
ZXJhdG9ycy5oIgogI2luY2x1ZGUgPHd0Zi9MaXN0RHVtcC5oPgogCiAjaWYgRU5BQkxFKEpJVCkK
QEAgLTc3LDYgKzgxLDcgQEAgQ2FsbExpbmtJbmZvOjpDYWxsTGlua0luZm8oQ29kZU9yaWdpbiBj
bwogICAgICwgbV9hbGxvd1N0dWJzKHRydWUpCiAgICAgLCBtX2NsZWFyZWRCeUpldHRpc29uKGZh
bHNlKQogICAgICwgbV9jYWxsVHlwZShOb25lKQorICAgICwgbV91c2VEYXRhSUMoc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KFVzZURhdGFJQzo6WWVzKSkKIHsKIH0KIApAQCAtMTAyLDQ3ICsxMDcsNTEg
QEAgdm9pZCBDYWxsTGlua0luZm86OnVubGluayhWTSYgdm0pCiAgICAgLy8gV2UgY291bGQgYmUg
Y2FsbGVkIGV2ZW4gaWYgd2UncmUgbm90IGxpbmtlZCBhbnltb3JlIGJlY2F1c2Ugb2YgaG93IHBv
bHltb3JwaGljIGNhbGxzCiAgICAgLy8gd29yay4gRWFjaCBjYWxsc2l0ZSB3aXRoaW4gdGhlIHBv
bHltb3JwaGljIGNhbGwgc3R1YiBtYXkgc2VwYXJhdGVseSBhc2sgdXMgdG8gdW5saW5rKCkuCiAg
ICAgaWYgKGlzTGlua2VkKCkpCi0gICAgICAgIHVubGlua0Zvcih2bSwgKnRoaXMpOworICAgICAg
ICB1bmxpbmtDYWxsKHZtLCAqdGhpcyk7CiAKICAgICAvLyBFaXRoZXIgd2Ugd2VyZSB1bmxpbmtl
ZCwgaW4gd2hpY2ggY2FzZSB3ZSBzaG91bGQgbm90IGhhdmUgYmVlbiBvbiBhbnkgbGlzdCwgb3Ig
d2UgdW5saW5rZWQKICAgICAvLyBvdXJzZWx2ZXMgc28gdGhhdCB3ZSdyZSBub3Qgb24gYW55IGxp
c3QgYW55bW9yZS4KICAgICBSRUxFQVNFX0FTU0VSVCghaXNPbkxpc3QoKSk7CiB9CiAKLUNvZGVM
b2NhdGlvbk5lYXJDYWxsPEpTSW50ZXJuYWxQdHJUYWc+IENhbGxMaW5rSW5mbzo6Y2FsbFJldHVy
bkxvY2F0aW9uKCkKK0NvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IENhbGxMaW5r
SW5mbzo6ZmFzdFBhdGhTdGFydCgpCiB7Ci0gICAgUkVMRUFTRV9BU1NFUlQoIWlzRGlyZWN0KCkp
OwotICAgIHJldHVybiBDb2RlTG9jYXRpb25OZWFyQ2FsbDxKU0ludGVybmFsUHRyVGFnPihtX2Nh
bGxSZXR1cm5Mb2NhdGlvbk9yUGF0Y2hhYmxlSnVtcCwgTmVhckNhbGxNb2RlOjpSZWd1bGFyKTsK
KyAgICByZXR1cm4gQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyPEpTSW50ZXJuYWxQdHJUYWc+KG1f
ZmFzdFBhdGhTdGFydCk7CiB9CiAKLUNvZGVMb2NhdGlvbkp1bXA8SlNJbnRlcm5hbFB0clRhZz4g
Q2FsbExpbmtJbmZvOjpwYXRjaGFibGVKdW1wKCkKK0NvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJu
YWxQdHJUYWc+IENhbGxMaW5rSW5mbzo6c2xvd1BhdGhTdGFydCgpCiB7Ci0gICAgUkVMRUFTRV9B
U1NFUlQoY2FsbFR5cGUoKSA9PSBEaXJlY3RUYWlsQ2FsbCk7Ci0gICAgcmV0dXJuIENvZGVMb2Nh
dGlvbkp1bXA8SlNJbnRlcm5hbFB0clRhZz4obV9jYWxsUmV0dXJuTG9jYXRpb25PclBhdGNoYWJs
ZUp1bXApOworICAgIFJFTEVBU0VfQVNTRVJUKCFpc0RhdGFJQygpKTsKKyAgICByZXR1cm4gdS5j
b2RlSUMubV9zbG93UGF0aFN0YXJ0OwogfQogCi1Db2RlTG9jYXRpb25EYXRhTGFiZWxQdHI8SlNJ
bnRlcm5hbFB0clRhZz4gQ2FsbExpbmtJbmZvOjpob3RQYXRoQmVnaW4oKQorQ29kZUxvY2F0aW9u
TGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gQ2FsbExpbmtJbmZvOjpkb25lTG9jYXRpb24oKQogewog
ICAgIFJFTEVBU0VfQVNTRVJUKCFpc0RpcmVjdCgpKTsKLSAgICByZXR1cm4gQ29kZUxvY2F0aW9u
RGF0YUxhYmVsUHRyPEpTSW50ZXJuYWxQdHJUYWc+KG1faG90UGF0aEJlZ2luT3JTbG93UGF0aFN0
YXJ0KTsKKyAgICByZXR1cm4gbV9kb25lTG9jYXRpb247CiB9CiAKLUNvZGVMb2NhdGlvbkxhYmVs
PEpTSW50ZXJuYWxQdHJUYWc+IENhbGxMaW5rSW5mbzo6c2xvd1BhdGhTdGFydCgpCi17Ci0gICAg
UkVMRUFTRV9BU1NFUlQoaXNEaXJlY3QoKSk7Ci0gICAgcmV0dXJuIG1faG90UGF0aEJlZ2luT3JT
bG93UGF0aFN0YXJ0OwotfQotCi12b2lkIENhbGxMaW5rSW5mbzo6c2V0Q2FsbGVlKFZNJiB2bSwg
SlNDZWxsKiBvd25lciwgSlNPYmplY3QqIGNhbGxlZSkKK3ZvaWQgQ2FsbExpbmtJbmZvOjpzZXRN
b25vbW9ycGhpY0NhbGxlZShWTSYgdm0sIEpTQ2VsbCogb3duZXIsIEpTT2JqZWN0KiBjYWxsZWUs
IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBjb2RlUHRyKQogewogICAgIFJF
TEVBU0VfQVNTRVJUKCFpc0RpcmVjdCgpKTsKICAgICBtX2NhbGxlZU9yQ29kZUJsb2NrLnNldCh2
bSwgb3duZXIsIGNhbGxlZSk7CisKKyAgICBpZiAoaXNEYXRhSUMoKSkgCisgICAgICAgIHUuZGF0
YUlDLm1fbW9ub21vcnBoaWNDYWxsRGVzdGluYXRpb24gPSBjb2RlUHRyOworICAgIGVsc2Ugewor
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaE5lYXJDYWxsKHUuY29kZUlDLm1fY2FsbExv
Y2F0aW9uLCBDb2RlTG9jYXRpb25MYWJlbDxKU0VudHJ5UHRyVGFnPihjb2RlUHRyKSk7CisgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoUG9pbnRlcih1LmNvZGVJQy5tX2NhbGxlZUxvY2F0
aW9uLCBjYWxsZWUpOworICAgIH0KIH0KIAogdm9pZCBDYWxsTGlua0luZm86OmNsZWFyQ2FsbGVl
KCkKIHsKICAgICBSRUxFQVNFX0FTU0VSVCghaXNEaXJlY3QoKSk7CiAgICAgbV9jYWxsZWVPckNv
ZGVCbG9jay5jbGVhcigpOworICAgIGlmIChpc0RhdGFJQygpKQorICAgICAgICB1LmRhdGFJQy5t
X21vbm9tb3JwaGljQ2FsbERlc3RpbmF0aW9uID0gbnVsbHB0cjsKKyAgICBlbHNlIGlmICghY2xl
YXJlZEJ5SmV0dGlzb24oKSkKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hQb2ludGVy
KHUuY29kZUlDLm1fY2FsbGVlTG9jYXRpb24sIG51bGxwdHIpOwogfQogCiBKU09iamVjdCogQ2Fs
bExpbmtJbmZvOjpjYWxsZWUoKQpAQCAtMjg0LDYgKzI5MywyMDYgQEAgdm9pZCBDYWxsTGlua0lu
Zm86OnNldEZyYW1lU2h1ZmZsZURhdGEoYwogICAgIG1fZnJhbWVTaHVmZmxlRGF0YS0+c2hyaW5r
VG9GaXQoKTsKIH0KIAordm9pZCBDYWxsTGlua0luZm86OmVtaXRGaXJzdEluc3RydWN0aW9uRm9y
RGF0YUlDKENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSKQoreworICAg
IEdQUlJlZyBzY3JhdGNoR1BSID0gaml0LnNjcmF0Y2hSZWdpc3RlcigpOworICAgIERpc2FsbG93
TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBkaXNhbGxvd1NjcmF0Y2goaml0KTsKKyAgICAvLyBX
aGVuIHJlcGF0Y2hpbmcsIHdlIGp1c3Qgb3ZlcndyaXRlIHRoZSBmaXJzdCBpbnN0cnVjdGlvbiBi
YWNrLCBzaW5jZSBpdCdsbCBoYXZlIGJlZW4gcmVwbGFjZWQgd2l0aCBhIGp1bXAgdG8gdGhlIHBv
bHltb3JwaGljIGNhbGwgc3R1Yi4KKyAgICBzaXplX3Qgc3RhcnRTaXplID0gaml0Lm1fYXNzZW1i
bGVyLmJ1ZmZlcigpLmNvZGVTaXplKCk7CisgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpB
ZGRyZXNzKGNhbGxMaW5rSW5mb0dQUiwgb2Zmc2V0T2ZDYWxsZWUoKSksIHNjcmF0Y2hHUFIpOyAK
KyAgICBzaXplX3QgbG9hZFNpemUgPSBqaXQubV9hc3NlbWJsZXIuYnVmZmVyKCkuY29kZVNpemUo
KSAtIHN0YXJ0U2l6ZTsKKyAgICBpZiAobG9hZFNpemUgPCBzdGF0aWNfY2FzdDxzaXplX3Q+KEND
YWxsSGVscGVyczo6cGF0Y2hhYmxlSnVtcFNpemUoKSkpCisgICAgICAgIGppdC5lbWl0Tm9wcyhz
dGF0aWNfY2FzdDxzaXplX3Q+KENDYWxsSGVscGVyczo6cGF0Y2hhYmxlSnVtcFNpemUoKSkgLSBs
b2FkU2l6ZSk7Cit9CisKK01hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmVt
aXRGYXN0UGF0aEltcGwoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJl
ZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQyB1c2VEYXRhSUMsIFdURjo6RnVuY3Rpb248dm9p
ZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpCit7CisgICAgc2V0VXNlc0RhdGFJQ3ModXNlRGF0YUlD
KTsKKyAgICBpZiAoaXNEYXRhSUMoKSkgeworICAgICAgICBSRUxFQVNFX0FTU0VSVChjYWxsTGlu
a0luZm9HUFIgIT0gR1BSUmVnOjpJbnZhbGlkR1BSUmVnKTsKKyAgICAgICAgaml0Lm1vdmUoQ0Nh
bGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHRoaXMpLCBjYWxsTGlua0luZm9HUFIpOworICAgICAg
ICB1LmRhdGFJQy5tX2NhbGxMaW5rSW5mb0dQUiA9IGNhbGxMaW5rSW5mb0dQUjsKKyAgICB9CisK
KyAgICBhdXRvIGZhc3RQYXRoU3RhcnQgPSBqaXQubGFiZWwoKTsKKyAgICBqaXQuYWRkTGlua1Rh
c2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgICAgIG1fZmFzdFBhdGhTdGFy
dCA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihmYXN0UGF0aFN0YXJ0
KTsKKyAgICB9KTsKKworICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd1BhdGg7CisKKyAg
ICBpZiAoaXNEYXRhSUMoKSkgeworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IGppdC5zY3Jh
dGNoUmVnaXN0ZXIoKTsKKyAgICAgICAgZW1pdEZpcnN0SW5zdHJ1Y3Rpb25Gb3JEYXRhSUMoaml0
LCBjYWxsTGlua0luZm9HUFIpOworICAgICAgICB7CisgICAgICAgICAgICBEaXNhbGxvd01hY3Jv
U2NyYXRjaFJlZ2lzdGVyVXNhZ2UgZGlzYWxsb3dTY3JhdGNoKGppdCk7CisgICAgICAgICAgICBz
bG93UGF0aC5hcHBlbmQoaml0LmJyYW5jaFB0cihDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCBzY3Jh
dGNoR1BSLCBjYWxsZWVHUFIpKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoaXNUYWlsQ2FsbCgp
KSB7CisgICAgICAgICAgICBwcmVwYXJlRm9yVGFpbENhbGwoKTsKKyAgICAgICAgICAgIGppdC5m
YXJKdW1wKENDYWxsSGVscGVyczo6QWRkcmVzcyhjYWxsTGlua0luZm9HUFIsIG9mZnNldE9mTW9u
b21vcnBoaWNDYWxsRGVzdGluYXRpb24oKSksIEpTRW50cnlQdHJUYWcpOworICAgICAgICB9IGVs
c2UKKyAgICAgICAgICAgIGppdC5jYWxsKENDYWxsSGVscGVyczo6QWRkcmVzcyhjYWxsTGlua0lu
Zm9HUFIsIG9mZnNldE9mTW9ub21vcnBoaWNDYWxsRGVzdGluYXRpb24oKSksIEpTRW50cnlQdHJU
YWcpOworICAgIH0gZWxzZSB7CisgICAgICAgIENDYWxsSGVscGVyczo6RGF0YUxhYmVsUHRyIGNh
bGxlZUNoZWNrOworICAgICAgICBzbG93UGF0aC5hcHBlbmQoaml0LmJyYW5jaFB0cldpdGhQYXRj
aChDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCBjYWxsZWVHUFIsIGNhbGxlZUNoZWNrLCBDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW1QdHIobnVsbHB0cikpKTsKKworICAgICAgICBDQ2FsbEhlbHBlcnM6
OkNhbGwgY2FsbDsKKyAgICAgICAgaWYgKGlzVGFpbENhbGwoKSkgeworICAgICAgICAgICAgcHJl
cGFyZUZvclRhaWxDYWxsKCk7CisgICAgICAgICAgICBjYWxsID0gaml0Lm5lYXJUYWlsQ2FsbCgp
OworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGNhbGwgPSBqaXQubmVhckNhbGwoKTsKKyAg
ICAgICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgeworICAg
ICAgICAgICAgdS5jb2RlSUMubV9jYWxsTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZO
ZWFyQ2FsbDxKU0ludGVybmFsUHRyVGFnPihjYWxsKTsKKyAgICAgICAgICAgIHUuY29kZUlDLm1f
Y2FsbGVlTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4o
Y2FsbGVlQ2hlY2spOworICAgICAgICB9KTsKKyAgICB9CisKKyAgICByZXR1cm4gc2xvd1BhdGg7
Cit9CisKK0NDYWxsSGVscGVyczo6SnVtcExpc3QgQ2FsbExpbmtJbmZvOjplbWl0RmFzdFBhdGgo
Q0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9H
UFIsIFVzZURhdGFJQyB1c2VEYXRhSUMpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoIWlzVGFpbENh
bGwoKSk7CisgICAgcmV0dXJuIGVtaXRGYXN0UGF0aEltcGwoaml0LCBjYWxsZWVHUFIsIGNhbGxM
aW5rSW5mb0dQUiwgdXNlRGF0YUlDLCBudWxscHRyKTsKK30KKworTWFjcm9Bc3NlbWJsZXI6Okp1
bXBMaXN0IENhbGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxsRmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiBq
aXQsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQyB1
c2VEYXRhSUMsIFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpCit7Cisg
ICAgUkVMRUFTRV9BU1NFUlQoaXNUYWlsQ2FsbCgpKTsKKyAgICByZXR1cm4gZW1pdEZhc3RQYXRo
SW1wbChqaXQsIGNhbGxlZUdQUiwgY2FsbExpbmtJbmZvR1BSLCB1c2VEYXRhSUMsIFdURk1vdmUo
cHJlcGFyZUZvclRhaWxDYWxsKSk7Cit9CisKK3ZvaWQgQ2FsbExpbmtJbmZvOjplbWl0U2xvd1Bh
dGgoVk0mIHZtLCBDQ2FsbEhlbHBlcnMmIGppdCkKK3sKKyAgICBzZXRTbG93UGF0aENhbGxEZXN0
aW5hdGlvbih2bS5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpLnRlbXBsYXRlIHJl
dGFnZ2VkQ29kZTxKU0VudHJ5UHRyVGFnPigpKTsKKyAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW1QdHIodGhpcyksIEdQUkluZm86OnJlZ1QyKTsKKyAgICBqaXQuY2FsbChDQ2Fs
bEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDIsIG9mZnNldE9mU2xvd1BhdGhDYWxsRGVz
dGluYXRpb24oKSksIEpTRW50cnlQdHJUYWcpOworfQorCit2b2lkIENhbGxMaW5rSW5mbzo6ZW1p
dERpcmVjdEZhc3RQYXRoKENDYWxsSGVscGVycyYgaml0KQoreworICAgIFJFTEVBU0VfQVNTRVJU
KCFpc1RhaWxDYWxsKCkpOworCisgICAgc2V0VXNlc0RhdGFJQ3MoVXNlRGF0YUlDOjpObyk7CisK
KyAgICBhdXRvIGZhc3RQYXRoU3RhcnQgPSBqaXQubGFiZWwoKTsKKyAgICBqaXQuYWRkTGlua1Rh
c2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgICAgIG1fZmFzdFBhdGhTdGFy
dCA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihmYXN0UGF0aFN0YXJ0
KTsKKyAgICB9KTsKKworICAgIGF1dG8gY2FsbCA9IGppdC5uZWFyQ2FsbCgpOworICAgIGppdC5h
ZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgdS5jb2Rl
SUMubV9jYWxsTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxKU0ludGVy
bmFsUHRyVGFnPihjYWxsKTsKKyAgICB9KTsKKyAgICBqaXQuYWRkTGF0ZUxpbmtUYXNrKFt0aGlz
XSAoTGlua0J1ZmZlciYpIHsKKyAgICAgICAgaW5pdGlhbGl6ZURpcmVjdENhbGwoKTsKKyAgICB9
KTsKK30KKwordm9pZCBDYWxsTGlua0luZm86OmVtaXREaXJlY3RUYWlsQ2FsbEZhc3RQYXRoKEND
YWxsSGVscGVycyYgaml0LCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxs
KQoreworICAgIFJFTEVBU0VfQVNTRVJUKGlzVGFpbENhbGwoKSk7CisKKyAgICBzZXRVc2VzRGF0
YUlDcyhVc2VEYXRhSUM6Ok5vKTsKKworICAgIGF1dG8gZmFzdFBhdGhTdGFydCA9IGppdC5sYWJl
bCgpOworICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsK
KyAgICAgICAgbV9mYXN0UGF0aFN0YXJ0ID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJu
YWxQdHJUYWc+KGZhc3RQYXRoU3RhcnQpOworICAgIH0pOworCisgICAgLy8gLSBJZiB3ZSdyZSBu
b3QgeWV0IGxpbmtlZCwgdGhpcyBpcyBhIGp1bXAgdG8gdGhlIHNsb3cgcGF0aC4KKyAgICAvLyAt
IE9uY2Ugd2UncmUgbGlua2VkIHRvIGEgZmFzdCBwYXRoLCB0aGlzIGdvZXMgYmFjayB0byBiZWlu
ZyBub3BzIHNvIHdlIGZhbGwgdGhyb3VnaCB0byB0aGUgbGlua2VkIGp1bXAuCisgICAgaml0LmVt
aXROb3BzKENDYWxsSGVscGVyczo6cGF0Y2hhYmxlSnVtcFNpemUoKSk7CisKKyAgICBwcmVwYXJl
Rm9yVGFpbENhbGwoKTsKKyAgICBhdXRvIGNhbGwgPSBqaXQubmVhclRhaWxDYWxsKCk7CisgICAg
aml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgeworICAgICAgICB1
LmNvZGVJQy5tX2NhbGxMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPEpT
SW50ZXJuYWxQdHJUYWc+KGNhbGwpOworICAgIH0pOworICAgIGppdC5hZGRMYXRlTGlua1Rhc2so
W3RoaXNdIChMaW5rQnVmZmVyJikgeworICAgICAgICBpbml0aWFsaXplRGlyZWN0Q2FsbCgpOwor
ICAgIH0pOworfQorCit2b2lkIENhbGxMaW5rSW5mbzo6aW5pdGlhbGl6ZURpcmVjdENhbGwoKQor
eworICAgIFJFTEVBU0VfQVNTRVJUKGlzRGlyZWN0KCkpOworICAgIEFTU0VSVCh1LmNvZGVJQy5t
X2NhbGxMb2NhdGlvbik7CisgICAgaWYgKGlzVGFpbENhbGwoKSkgeworICAgICAgICBSRUxFQVNF
X0FTU0VSVChmYXN0UGF0aFN0YXJ0KCkpOworICAgICAgICBDQ2FsbEhlbHBlcnM6OmVtaXRKSVRD
b2RlT3ZlcihmYXN0UGF0aFN0YXJ0KCksIFsmXSAoQ0NhbGxIZWxwZXJzJiBqaXQpIHsKKyAgICAg
ICAgICAgIGF1dG8ganVtcCA9IGppdC5qdW1wKCk7CisgICAgICAgICAgICBqaXQuYWRkTGlua1Rh
c2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgICAgICAgICAgICAgbGlua0J1
ZmZlci5saW5rKGp1bXAsIHNsb3dQYXRoU3RhcnQoKSk7CisgICAgICAgICAgICB9KTsKKyAgICAg
ICAgfSwgImluaXRpYWxpemUgZGlyZWN0IGNhbGwiKTsKKyAgICB9IGVsc2UKKyAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OnJlcGF0Y2hOZWFyQ2FsbCh1LmNvZGVJQy5tX2NhbGxMb2NhdGlvbiwgc2xv
d1BhdGhTdGFydCgpKTsKK30KKwordm9pZCBDYWxsTGlua0luZm86OnNldERpcmVjdENhbGxUYXJn
ZXQoQ29kZUxvY2F0aW9uTGFiZWw8SlNFbnRyeVB0clRhZz4gdGFyZ2V0KQoreworICAgIFJFTEVB
U0VfQVNTRVJUKGlzRGlyZWN0KCkpOworCisgICAgaWYgKGlzVGFpbENhbGwoKSkgeworICAgICAg
ICBSRUxFQVNFX0FTU0VSVChmYXN0UGF0aFN0YXJ0KCkpOworICAgICAgICBDQ2FsbEhlbHBlcnM6
OmVtaXRKSVRDb2RlT3ZlcihmYXN0UGF0aFN0YXJ0KCksIFsmXSAoQ0NhbGxIZWxwZXJzJiBqaXQp
IHsKKyAgICAgICAgICAgIC8vIFdlIHJlc2VydmVkIHRoaXMgbWFueSBieXRlcyBmb3IgdGhlIGp1
bXAgYXQgZmFzdFBhdGhTdGFydCgpLiBNYWtlIHRoYXQKKyAgICAgICAgICAgIC8vIGNvZGUgbm9w
cyBub3cgc28gd2UgZmFsbCB0aHJvdWdoIHRvIHRoZSBqdW1wIHRvIHRoZSBmYXN0IHBhdGguCisg
ICAgICAgICAgICBqaXQuZW1pdE5vcHMoQ0NhbGxIZWxwZXJzOjpwYXRjaGFibGVKdW1wU2l6ZSgp
KTsgCisgICAgICAgIH0sICJTZXR0aW5nIGRpcmVjdCBjYWxsIHRhcmdldCIpOworICAgIH0KKwor
ICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoTmVhckNhbGwodS5jb2RlSUMubV9jYWxsTG9jYXRp
b24sIHRhcmdldCk7Cit9CisKK3ZvaWQgQ2FsbExpbmtJbmZvOjpzZXRTbG93UGF0aENhbGxEZXN0
aW5hdGlvbihNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gY29kZVB0cikKK3sK
KyAgICBtX3Nsb3dQYXRoQ2FsbERlc3RpbmF0aW9uID0gY29kZVB0cjsKK30KKwordm9pZCBDYWxs
TGlua0luZm86OnJldmVydENhbGxUb1N0dWIoKQoreworICAgIFJFTEVBU0VfQVNTRVJUKHN0dWIo
KSk7CisgICAgLy8gVGhlIHN0YXJ0IG9mIG91ciBKSVQgY29kZSBpcyBub3cgYSBqdW1wIHRvIHRo
ZSBwb2x5bW9ycGhpYyBzdHViLiBSZXdyaXRlIHRoZSBmaXJzdCBpbnN0cnVjdGlvbgorICAgIC8v
IHRvIGJlIHdoYXQgd2UgbmVlZCBmb3Igbm9uIHN0dWIgSUNzLgorCisgICAgLy8gdGhpcyBydW5z
IGludG8gc29tZSBicmFuY2ggY29tcGFjdGlvbiBjcmFwIEknZCBsaWtlIHRvIGF2b2lkIGZvciBu
b3cuIEVzc2VudGlhbGx5LCB0aGUgYnJhbmNoCisgICAgLy8gZG9lc24ndCBrbm93IGlmIGl0IGNh
biBiZSBjb21wYWN0ZWQgb3Igbm90LiBTbyB3ZSBlbmQgdXAgd2l0aCAyOCBieXRlcyBvZiBtYWNo
aW5lIGNvZGUsIGZvcgorICAgIC8vIHdoYXQgaW4gYWxsIGxpa2VsaWhvb2QgZml0cyBpbiAyNC4g
U28gd2UganVzdCBzcGxhdCBvdXQgdGhlIGZpcnN0IGluc3RydWN0aW9uLiBMb25nIHRlcm0sIHdl
CisgICAgLy8gbmVlZCBzb21ldGhpbmcgY2xlYW5lci4gQnV0IHRoaXMgd29ya3Mgb24gYXJtNjQg
Zm9yIG5vdy4KKworICAgIENDYWxsSGVscGVyczo6ZW1pdEpJVENvZGVPdmVyKGZhc3RQYXRoU3Rh
cnQoKSwgWyZdIChDQ2FsbEhlbHBlcnMmIGppdCkgeworICAgICAgICBpZiAoaXNEYXRhSUMoKSkK
KyAgICAgICAgICAgIGVtaXRGaXJzdEluc3RydWN0aW9uRm9yRGF0YUlDKGppdCwgdS5kYXRhSUMu
bV9jYWxsTGlua0luZm9HUFIpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIENDYWxsSGVs
cGVyczo6cmV2ZXJ0SnVtcFJlcGxhY2VtZW50VG9CcmFuY2hQdHJXaXRoUGF0Y2goCisgICAgICAg
ICAgICAgICAgQ0NhbGxIZWxwZXJzOjpzdGFydE9mQnJhbmNoUHRyV2l0aFBhdGNoT25SZWdpc3Rl
cih1LmNvZGVJQy5tX2NhbGxlZUxvY2F0aW9uKSwgY2FsbGVlR1BSKCksIG51bGxwdHIpOworICAg
ICAgICB9CisgICAgfSwgICJSZXNldHRpbmcgUG9seW1vcnBoaWNDYWxsIHN0dWJiZWQgQ2FsbExp
bmtJbmZvIik7Cit9CisKK3ZvaWQgQ2FsbExpbmtJbmZvOjpzZXRTdHViKFJlZjxQb2x5bW9ycGhp
Y0NhbGxTdHViUm91dGluZT4mJiBuZXdTdHViKQoreworICAgIGNsZWFyU3R1YigpOworICAgIG1f
c3R1YiA9IFdURk1vdmUobmV3U3R1Yik7CisKKyAgICBpZiAoaXNEYXRhSUMoKSkgeworICAgICAg
ICBDQ2FsbEhlbHBlcnM6OmVtaXRKSVRDb2RlT3ZlcihmYXN0UGF0aFN0YXJ0KCksIFsmXSAoQ0Nh
bGxIZWxwZXJzJiBqaXQpIHsKKyAgICAgICAgICAgIGF1dG8ganVtcCA9IGppdC5qdW1wKCk7Cisg
ICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7
CisgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKGp1bXAsIENvZGVMb2NhdGlvbkxhYmVs
PEpJVFN0dWJSb3V0aW5lUHRyVGFnPihtX3N0dWItPmNvZGUoKS5jb2RlKCkpKTsKKyAgICAgICAg
ICAgIH0pOworICAgICAgICB9LCAiUGF0Y2hpbmcgY2FsbCB0byBQb2x5bW9ycGhpY0NhbGxTdHVi
Um91dGluZSBpbiBDYWxsTGlua0luZm8iKTsKKyAgICB9IGVsc2UgeworICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6cmVwbGFjZVdpdGhKdW1wKAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnN0
YXJ0T2ZCcmFuY2hQdHJXaXRoUGF0Y2hPblJlZ2lzdGVyKHUuY29kZUlDLm1fY2FsbGVlTG9jYXRp
b24pLAorICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+
KG1fc3R1Yi0+Y29kZSgpLmNvZGUoKSkpOworICAgIH0KK30KKwogfSAvLyBuYW1lc3BhY2UgSlND
CiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0NhbGxMaW5rSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9DYWxsTGlua0luZm8uaAkocmV2aXNpb24gMjc3NjAyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
MCwxMiArMzAsMTQgQEAKICNpbmNsdWRlICJDb2RlU3BlY2lhbGl6YXRpb25LaW5kLmgiCiAjaW5j
bHVkZSAiUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUuaCIKICNpbmNsdWRlICJXcml0ZUJhcnJp
ZXIuaCIKKyNpbmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KICNpbmNsdWRlIDx3dGYvU2VudGluZWxM
aW5rZWRMaXN0Lmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCiAjaWYgRU5BQkxFKEpJVCkKIAorY2xh
c3MgQ0NhbGxIZWxwZXJzOwogY2xhc3MgRnVuY3Rpb25Db2RlQmxvY2s7CiBjbGFzcyBKU0Z1bmN0
aW9uOwogZW51bSBPcGNvZGVJRCA6IHVuc2lnbmVkOwpAQCAtMTYzLDE2ICsxNjUsMzggQEAgcHVi
bGljOgogICAgICAgICBtX2NhbGxlZUdQUiA9IGNhbGxlZUdQUjsKICAgICB9CiAKLSAgICB2b2lk
IHNldENhbGxMb2NhdGlvbnMoCi0gICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQ
dHJUYWc+IGNhbGxSZXR1cm5Mb2NhdGlvbk9yUGF0Y2hhYmxlSnVtcCwKLSAgICAgICAgQ29kZUxv
Y2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gaG90UGF0aEJlZ2luT3JTbG93UGF0aFN0YXJ0
LAotICAgICAgICBDb2RlTG9jYXRpb25OZWFyQ2FsbDxKU0ludGVybmFsUHRyVGFnPiBob3RQYXRo
T3RoZXIpCi0gICAgewotICAgICAgICBtX2NhbGxSZXR1cm5Mb2NhdGlvbk9yUGF0Y2hhYmxlSnVt
cCA9IGNhbGxSZXR1cm5Mb2NhdGlvbk9yUGF0Y2hhYmxlSnVtcDsKLSAgICAgICAgbV9ob3RQYXRo
QmVnaW5PclNsb3dQYXRoU3RhcnQgPSBob3RQYXRoQmVnaW5PclNsb3dQYXRoU3RhcnQ7Ci0gICAg
ICAgIG1faG90UGF0aE90aGVyID0gaG90UGF0aE90aGVyOworICAgIEdQUlJlZyBjYWxsZWVHUFIo
KSBjb25zdCB7IHJldHVybiBtX2NhbGxlZUdQUjsgfQorICAgIAorICAgIGVudW0gY2xhc3MgVXNl
RGF0YUlDIDogdWludDhfdCB7CisgICAgICAgIFllcywKKyAgICAgICAgTm8KKyAgICB9OworCitw
cml2YXRlOgorICAgIHZvaWQgZW1pdEZpcnN0SW5zdHJ1Y3Rpb25Gb3JEYXRhSUMoQ0NhbGxIZWxw
ZXJzJiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUik7CisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBM
aXN0IGVtaXRGYXN0UGF0aEltcGwoQ0NhbGxIZWxwZXJzJiwgR1BSUmVnIGNhbGxlZUdQUiwgR1BS
UmVnIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJl
cGFyZUZvclRhaWxDYWxsKSBXQVJOX1VOVVNFRF9SRVRVUk47CitwdWJsaWM6CisgICAgTWFjcm9B
c3NlbWJsZXI6Okp1bXBMaXN0IGVtaXRGYXN0UGF0aChDQ2FsbEhlbHBlcnMmLCBHUFJSZWcgY2Fs
bGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUMpIFdBUk5fVU5VU0VEX1JF
VFVSTjsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdFRhaWxDYWxsRmFzdFBhdGgo
Q0NhbGxIZWxwZXJzJiwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwg
VXNlRGF0YUlDLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKSBXQVJO
X1VOVVNFRF9SRVRVUk47CisgICAgdm9pZCBlbWl0RGlyZWN0RmFzdFBhdGgoQ0NhbGxIZWxwZXJz
Jik7CisgICAgdm9pZCBlbWl0RGlyZWN0VGFpbENhbGxGYXN0UGF0aChDQ2FsbEhlbHBlcnMmLCBX
VEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKTsKKyAgICB2b2lkIGVtaXRT
bG93UGF0aChWTSYsIENDYWxsSGVscGVycyYpOworICAgIHZvaWQgcmV2ZXJ0Q2FsbFRvU3R1Yigp
OworCisgICAgYm9vbCBpc0RhdGFJQygpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFVzZURh
dGFJQz4obV91c2VEYXRhSUMpID09IFVzZURhdGFJQzo6WWVzOyB9CisgICAgdm9pZCBzZXRVc2Vz
RGF0YUlDcyhVc2VEYXRhSUMgdXNlRGF0YUlDKSB7IG1fdXNlRGF0YUlDID0gc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KHVzZURhdGFJQyk7IH0KKworICAgIHZvaWQgc2V0Q29kZUxvY2F0aW9ucygKKyAg
ICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gc2xvd1BhdGhTdGFydCwK
KyAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gZG9uZUxvY2F0aW9u
KQorICAgIHsKKyAgICAgICAgaWYgKCFpc0RhdGFJQygpKQorICAgICAgICAgICAgdS5jb2RlSUMu
bV9zbG93UGF0aFN0YXJ0ID0gc2xvd1BhdGhTdGFydDsKKyAgICAgICAgbV9kb25lTG9jYXRpb24g
PSBkb25lTG9jYXRpb247CiAgICAgfQogCisgICAgdm9pZCBpbml0aWFsaXplRGlyZWN0Q2FsbCgp
OworCiAgICAgYm9vbCBhbGxvd1N0dWJzKCkgY29uc3QgeyByZXR1cm4gbV9hbGxvd1N0dWJzOyB9
CiAKICAgICB2b2lkIGRpc2FsbG93U3R1YnMoKQpAQCAtMTgwLDIzICsyMDQsMTkgQEAgcHVibGlj
OgogICAgICAgICBtX2FsbG93U3R1YnMgPSBmYWxzZTsKICAgICB9CiAKLSAgICBDb2RlTG9jYXRp
b25OZWFyQ2FsbDxKU0ludGVybmFsUHRyVGFnPiBjYWxsUmV0dXJuTG9jYXRpb24oKTsKLSAgICBD
b2RlTG9jYXRpb25KdW1wPEpTSW50ZXJuYWxQdHJUYWc+IHBhdGNoYWJsZUp1bXAoKTsKLSAgICBD
b2RlTG9jYXRpb25EYXRhTGFiZWxQdHI8SlNJbnRlcm5hbFB0clRhZz4gaG90UGF0aEJlZ2luKCk7
CisgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gZmFzdFBhdGhTdGFydCgp
OwogICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IHNsb3dQYXRoU3RhcnQo
KTsKKyAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBkb25lTG9jYXRpb24o
KTsKIAotICAgIENvZGVMb2NhdGlvbk5lYXJDYWxsPEpTSW50ZXJuYWxQdHJUYWc+IGhvdFBhdGhP
dGhlcigpCi0gICAgewotICAgICAgICByZXR1cm4gbV9ob3RQYXRoT3RoZXI7Ci0gICAgfQotCi0g
ICAgdm9pZCBzZXRDYWxsZWUoVk0mLCBKU0NlbGwqLCBKU09iamVjdCogY2FsbGVlKTsKKyAgICB2
b2lkIHNldE1vbm9tb3JwaGljQ2FsbGVlKFZNJiwgSlNDZWxsKiwgSlNPYmplY3QqIGNhbGxlZSwg
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+KTsKKyAgICB2b2lkIHNldFNsb3dQ
YXRoQ2FsbERlc3RpbmF0aW9uKE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPik7
CiAgICAgdm9pZCBjbGVhckNhbGxlZSgpOwogICAgIEpTT2JqZWN0KiBjYWxsZWUoKTsKIAogICAg
IHZvaWQgc2V0Q29kZUJsb2NrKFZNJiwgSlNDZWxsKiwgRnVuY3Rpb25Db2RlQmxvY2sqKTsKICAg
ICB2b2lkIGNsZWFyQ29kZUJsb2NrKCk7CiAgICAgRnVuY3Rpb25Db2RlQmxvY2sqIGNvZGVCbG9j
aygpOworICAgIHZvaWQgc2V0RGlyZWN0Q2FsbFRhcmdldChDb2RlTG9jYXRpb25MYWJlbDxKU0Vu
dHJ5UHRyVGFnPik7CiAKICAgICB2b2lkIHNldExhc3RTZWVuQ2FsbGVlKFZNJiwgY29uc3QgSlND
ZWxsKiBvd25lciwgSlNPYmplY3QqIGNhbGxlZSk7CiAgICAgdm9pZCBjbGVhckxhc3RTZWVuQ2Fs
bGVlKCk7CkBAIC0yMDYsMTIgKzIyNiw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldEV4ZWN1dGFi
bGVEdXJpbmdDb21waWxhdGlvbihFeGVjdXRhYmxlQmFzZSopOwogICAgIEV4ZWN1dGFibGVCYXNl
KiBleGVjdXRhYmxlKCk7CiAgICAgCi0gICAgdm9pZCBzZXRTdHViKFJlZjxQb2x5bW9ycGhpY0Nh
bGxTdHViUm91dGluZT4mJiBuZXdTdHViKQotICAgIHsKLSAgICAgICAgY2xlYXJTdHViKCk7Ci0g
ICAgICAgIG1fc3R1YiA9IFdURk1vdmUobmV3U3R1Yik7Ci0gICAgfQotCisgICAgdm9pZCBzZXRT
dHViKFJlZjxQb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZT4mJik7CiAgICAgdm9pZCBjbGVhclN0
dWIoKTsKIAogICAgIFBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lKiBzdHViKCkgY29uc3QKQEAg
LTMxMSw2ICszMjYsMjEgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9G
KENhbGxMaW5rSW5mbywgbV9zbG93UGF0aENvdW50KTsKICAgICB9CiAKKyAgICBzdGF0aWMgcHRy
ZGlmZl90IG9mZnNldE9mQ2FsbGVlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZG
U0VUT0YoQ2FsbExpbmtJbmZvLCBtX2NhbGxlZU9yQ29kZUJsb2NrKTsKKyAgICB9CisKKyAgICBz
dGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTW9ub21vcnBoaWNDYWxsRGVzdGluYXRpb24oKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDYWxsTGlua0luZm8sIHUpICsgT0JK
RUNUX09GRlNFVE9GKFVuaW9uVHlwZSwgZGF0YUlDLm1fbW9ub21vcnBoaWNDYWxsRGVzdGluYXRp
b24pOworICAgIH0KKworICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZTbG93UGF0aENhbGxE
ZXN0aW5hdGlvbigpCisgICAgeworICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENhbGxM
aW5rSW5mbywgbV9zbG93UGF0aENhbGxEZXN0aW5hdGlvbik7CisgICAgfQorCiAgICAgR1BSUmVn
IGNhbGxlZUdQUigpCiAgICAgewogICAgICAgICByZXR1cm4gbV9jYWxsZWVHUFI7CkBAIC0zNTIs
MTAgKzM4MiwyNSBAQCBwdWJsaWM6CiAgICAgfQogCiBwcml2YXRlOgotICAgIHVpbnQzMl90IG1f
bWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgeyAwIH07IC8vIEZvciB2YXJhcmdzOiB0aGUg
cHJvZmlsZWQgbWF4aW11bSBudW1iZXIgb2YgYXJndW1lbnRzLiBGb3IgZGlyZWN0OiB0aGUgbnVt
YmVyIG9mIHN0YWNrIHNsb3RzIGFsbG9jYXRlZCBmb3IgYXJndW1lbnRzLgotICAgIENvZGVMb2Nh
dGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IG1fY2FsbFJldHVybkxvY2F0aW9uT3JQYXRjaGFi
bGVKdW1wOwotICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IG1faG90UGF0
aEJlZ2luT3JTbG93UGF0aFN0YXJ0OwotICAgIENvZGVMb2NhdGlvbk5lYXJDYWxsPEpTSW50ZXJu
YWxQdHJUYWc+IG1faG90UGF0aE90aGVyOworICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJu
YWxQdHJUYWc+IG1fZmFzdFBhdGhTdGFydDsKKyAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVy
bmFsUHRyVGFnPiBtX2RvbmVMb2NhdGlvbjsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNF
bnRyeVB0clRhZz4gbV9zbG93UGF0aENhbGxEZXN0aW5hdGlvbjsKKyAgICB1bmlvbiBVbmlvblR5
cGUgeworICAgICAgICBVbmlvblR5cGUoKSAKKyAgICAgICAgICAgIDogZGF0YUlDIHsgbnVsbHB0
ciwgSW52YWxpZEdQUlJlZyB9CisgICAgICAgIHsgfQorICAgICAgICBzdHJ1Y3QgRGF0YUlDIHsK
KyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBtX21vbm9t
b3JwaGljQ2FsbERlc3RpbmF0aW9uOworICAgICAgICAgICAgR1BSUmVnIG1fY2FsbExpbmtJbmZv
R1BSOworICAgICAgICB9IGRhdGFJQzsKKworICAgICAgICBzdHJ1Y3QgeworICAgICAgICAgICAg
Q29kZUxvY2F0aW9uTmVhckNhbGw8SlNJbnRlcm5hbFB0clRhZz4gbV9jYWxsTG9jYXRpb247Cisg
ICAgICAgICAgICBDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHI8SlNJbnRlcm5hbFB0clRhZz4gbV9j
YWxsZWVMb2NhdGlvbjsKKyAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQ
dHJUYWc+IG1fc2xvd1BhdGhTdGFydDsKKyAgICAgICAgfSBjb2RlSUM7CisgICAgfSB1OworCiAg
ICAgV3JpdGVCYXJyaWVyPEpTQ2VsbD4gbV9jYWxsZWVPckNvZGVCbG9jazsKICAgICBXcml0ZUJh
cnJpZXI8SlNDZWxsPiBtX2xhc3RTZWVuQ2FsbGVlT3JFeGVjdXRhYmxlOwogICAgIFJlZlB0cjxQ
b2x5bW9ycGhpY0NhbGxTdHViUm91dGluZT4gbV9zdHViOwpAQCAtMzY5LDggKzQxNCwxMCBAQCBw
cml2YXRlOgogICAgIGJvb2wgbV9hbGxvd1N0dWJzIDogMTsKICAgICBib29sIG1fY2xlYXJlZEJ5
SmV0dGlzb24gOiAxOwogICAgIHVuc2lnbmVkIG1fY2FsbFR5cGUgOiA0OyAvLyBDYWxsVHlwZQor
ICAgIHVuc2lnbmVkIG1fdXNlRGF0YUlDIDogMTsgLy8gVXNlRGF0YUlDCiAgICAgR1BSUmVnIG1f
Y2FsbGVlR1BSIHsgSW52YWxpZEdQUlJlZyB9OwogICAgIHVpbnQzMl90IG1fc2xvd1BhdGhDb3Vu
dCB7IDAgfTsKKyAgICB1aW50MzJfdCBtX21heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIHsg
MCB9OyAvLyBGb3IgdmFyYXJnczogdGhlIHByb2ZpbGVkIG1heGltdW0gbnVtYmVyIG9mIGFyZ3Vt
ZW50cy4gRm9yIGRpcmVjdDogdGhlIG51bWJlciBvZiBzdGFjayBzbG90cyBhbGxvY2F0ZWQgZm9y
IGFyZ3VtZW50cy4KIH07CiAKIGlubGluZSBDb2RlT3JpZ2luIGdldENhbGxMaW5rSW5mb0NvZGVP
cmlnaW4oQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAkocmV2aXNpb24gMjc3NjAyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI1NywzMSArMjU3LDE4IEBAIHZvaWQgSklUQ29tcGlsZXI6OmxpbmsoTGlua0J1ZmZlciYg
bGlua0IKICAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX2luc3RhbmNlT2ZzLCBsaW5rQnVmZmVy
KTsKICAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX3ByaXZhdGVCcmFuZEFjY2Vzc2VzLCBsaW5r
QnVmZmVyKTsKIAotICAgIGF1dG8gbGlua0NhbGxUaHVuayA9IEZ1bmN0aW9uUHRyPE5vUHRyVGFn
Pih2bSgpLmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5v
UHRyVGFnPigpKTsKICAgICBmb3IgKGF1dG8mIHJlY29yZCA6IG1fanNDYWxscykgewogICAgICAg
ICBDYWxsTGlua0luZm8mIGluZm8gPSAqcmVjb3JkLmluZm87Ci0gICAgICAgIGxpbmtCdWZmZXIu
bGluayhyZWNvcmQuc2xvd0NhbGwsIGxpbmtDYWxsVGh1bmspOwotICAgICAgICBpbmZvLnNldENh
bGxMb2NhdGlvbnMoCi0gICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRy
VGFnPihsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxKU0ludGVybmFsUHRyVGFnPihyZWNv
cmQuc2xvd0NhbGwpKSwKLSAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQ
dHJUYWc+KGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihyZWNvcmQudGFy
Z2V0VG9DaGVjaykpLAotICAgICAgICAgICAgbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8
SlNJbnRlcm5hbFB0clRhZz4ocmVjb3JkLmZhc3RDYWxsKSk7CisgICAgICAgIGluZm8uc2V0Q29k
ZUxvY2F0aW9ucygKKyAgICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFs
UHRyVGFnPihyZWNvcmQuc2xvd1BhdGhTdGFydCksCisgICAgICAgICAgICBsaW5rQnVmZmVyLmxv
Y2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4ocmVjb3JkLmRvbmVMb2NhdGlvbikpOwogICAgIH0K
ICAgICAKLSAgICBmb3IgKEpTRGlyZWN0Q2FsbFJlY29yZCYgcmVjb3JkIDogbV9qc0RpcmVjdENh
bGxzKSB7CisgICAgZm9yIChhdXRvJiByZWNvcmQgOiBtX2pzRGlyZWN0Q2FsbHMpIHsKICAgICAg
ICAgQ2FsbExpbmtJbmZvJiBpbmZvID0gKnJlY29yZC5pbmZvOwotICAgICAgICBsaW5rQnVmZmVy
LmxpbmsocmVjb3JkLmNhbGwsIGxpbmtCdWZmZXIubG9jYXRpb25PZjxOb1B0clRhZz4ocmVjb3Jk
LnNsb3dQYXRoKSk7Ci0gICAgICAgIGluZm8uc2V0Q2FsbExvY2F0aW9ucygKLSAgICAgICAgICAg
IENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+KCksCisgICAgICAgIGluZm8uc2V0
Q29kZUxvY2F0aW9ucygKICAgICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVy
bmFsUHRyVGFnPihyZWNvcmQuc2xvd1BhdGgpLAotICAgICAgICAgICAgbGlua0J1ZmZlci5sb2Nh
dGlvbk9mTmVhckNhbGw8SlNJbnRlcm5hbFB0clRhZz4ocmVjb3JkLmNhbGwpKTsKLSAgICB9Ci0g
ICAgCi0gICAgZm9yIChKU0RpcmVjdFRhaWxDYWxsUmVjb3JkJiByZWNvcmQgOiBtX2pzRGlyZWN0
VGFpbENhbGxzKSB7Ci0gICAgICAgIENhbGxMaW5rSW5mbyYgaW5mbyA9ICpyZWNvcmQuaW5mbzsK
LSAgICAgICAgaW5mby5zZXRDYWxsTG9jYXRpb25zKAotICAgICAgICAgICAgbGlua0J1ZmZlci5s
b2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KHJlY29yZC5wYXRjaGFibGVKdW1wKSwKLSAgICAg
ICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihyZWNvcmQuc2xv
d1BhdGgpLAotICAgICAgICAgICAgbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8SlNJbnRl
cm5hbFB0clRhZz4ocmVjb3JkLmNhbGwpKTsKKyAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVs
PEpTSW50ZXJuYWxQdHJUYWc+KCkpOwogICAgIH0KIAogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhV
TktTKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAko
cmV2aXNpb24gMjc3NjAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21w
aWxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMTksMTkgKzIxOSwxNCBAQCBwdWJsaWM6CiAgICAg
ICAgIG1fcHJpdmF0ZUJyYW5kQWNjZXNzZXMuYXBwZW5kKElubGluZUNhY2hlV3JhcHBlcjxKSVRQ
cml2YXRlQnJhbmRBY2Nlc3NHZW5lcmF0b3I+KGdlbiwgc2xvd1BhdGgpKTsKICAgICB9CiAKLSAg
ICB2b2lkIGFkZEpTQ2FsbChDYWxsIGZhc3RDYWxsLCBDYWxsIHNsb3dDYWxsLCBEYXRhTGFiZWxQ
dHIgdGFyZ2V0VG9DaGVjaywgQ2FsbExpbmtJbmZvKiBpbmZvKQorICAgIHZvaWQgYWRkSlNDYWxs
KExhYmVsIHNsb3dQYXRoU3RhcnQsIExhYmVsIGRvbmVMb2NhdGlvbiwgQ2FsbExpbmtJbmZvKiBp
bmZvKQogICAgIHsKLSAgICAgICAgbV9qc0NhbGxzLmFwcGVuZChKU0NhbGxSZWNvcmQoZmFzdENh
bGwsIHNsb3dDYWxsLCB0YXJnZXRUb0NoZWNrLCBpbmZvKSk7CisgICAgICAgIG1fanNDYWxscy5h
cHBlbmQoSlNDYWxsUmVjb3JkKHNsb3dQYXRoU3RhcnQsIGRvbmVMb2NhdGlvbiwgaW5mbykpOwog
ICAgIH0KICAgICAKLSAgICB2b2lkIGFkZEpTRGlyZWN0Q2FsbChDYWxsIGNhbGwsIExhYmVsIHNs
b3dQYXRoLCBDYWxsTGlua0luZm8qIGluZm8pCisgICAgdm9pZCBhZGRKU0RpcmVjdENhbGwoTGFi
ZWwgc2xvd1BhdGgsIENhbGxMaW5rSW5mbyogaW5mbykKICAgICB7Ci0gICAgICAgIG1fanNEaXJl
Y3RDYWxscy5hcHBlbmQoSlNEaXJlY3RDYWxsUmVjb3JkKGNhbGwsIHNsb3dQYXRoLCBpbmZvKSk7
Ci0gICAgfQotICAgIAotICAgIHZvaWQgYWRkSlNEaXJlY3RUYWlsQ2FsbChQYXRjaGFibGVKdW1w
IHBhdGNoYWJsZUp1bXAsIENhbGwgY2FsbCwgTGFiZWwgc2xvd1BhdGgsIENhbGxMaW5rSW5mbyog
aW5mbykKLSAgICB7Ci0gICAgICAgIG1fanNEaXJlY3RUYWlsQ2FsbHMuYXBwZW5kKEpTRGlyZWN0
VGFpbENhbGxSZWNvcmQocGF0Y2hhYmxlSnVtcCwgY2FsbCwgc2xvd1BhdGgsIGluZm8pKTsKKyAg
ICAgICAgbV9qc0RpcmVjdENhbGxzLmFwcGVuZChKU0RpcmVjdENhbGxSZWNvcmQoc2xvd1BhdGgs
IGluZm8pKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBhZGRXZWFrUmVmZXJlbmNlKEpTQ2VsbCog
dGFyZ2V0KQpAQCAtMzI4LDUyICszMjMsMjggQEAgcHJpdmF0ZToKIAogCiAgICAgc3RydWN0IEpT
Q2FsbFJlY29yZCB7Ci0gICAgICAgIEpTQ2FsbFJlY29yZChDYWxsIGZhc3RDYWxsLCBDYWxsIHNs
b3dDYWxsLCBEYXRhTGFiZWxQdHIgdGFyZ2V0VG9DaGVjaywgQ2FsbExpbmtJbmZvKiBpbmZvKQot
ICAgICAgICAgICAgOiBmYXN0Q2FsbChmYXN0Q2FsbCkKLSAgICAgICAgICAgICwgc2xvd0NhbGwo
c2xvd0NhbGwpCi0gICAgICAgICAgICAsIHRhcmdldFRvQ2hlY2sodGFyZ2V0VG9DaGVjaykKKyAg
ICAgICAgSlNDYWxsUmVjb3JkKExhYmVsIHNsb3dQYXRoU3RhcnQsIExhYmVsIGRvbmVMb2NhdGlv
biwgQ2FsbExpbmtJbmZvKiBpbmZvKQorICAgICAgICAgICAgOiBzbG93UGF0aFN0YXJ0KHNsb3dQ
YXRoU3RhcnQpCisgICAgICAgICAgICAsIGRvbmVMb2NhdGlvbihkb25lTG9jYXRpb24pCiAgICAg
ICAgICAgICAsIGluZm8oaW5mbykKICAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKGZhc3RD
YWxsLmlzRmxhZ1NldChDYWxsOjpOZWFyKSk7Ci0gICAgICAgICAgICBBU1NFUlQoc2xvd0NhbGwu
aXNGbGFnU2V0KENhbGw6Ok5lYXIpKTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgQ2Fs
bCBmYXN0Q2FsbDsKLSAgICAgICAgQ2FsbCBzbG93Q2FsbDsKLSAgICAgICAgRGF0YUxhYmVsUHRy
IHRhcmdldFRvQ2hlY2s7CisgICAgICAgIExhYmVsIHNsb3dQYXRoU3RhcnQ7CisgICAgICAgIExh
YmVsIGRvbmVMb2NhdGlvbjsKICAgICAgICAgQ2FsbExpbmtJbmZvKiBpbmZvOwogICAgIH07CiAg
ICAgCiAgICAgc3RydWN0IEpTRGlyZWN0Q2FsbFJlY29yZCB7Ci0gICAgICAgIEpTRGlyZWN0Q2Fs
bFJlY29yZChDYWxsIGNhbGwsIExhYmVsIHNsb3dQYXRoLCBDYWxsTGlua0luZm8qIGluZm8pCi0g
ICAgICAgICAgICA6IGNhbGwoY2FsbCkKLSAgICAgICAgICAgICwgc2xvd1BhdGgoc2xvd1BhdGgp
Ci0gICAgICAgICAgICAsIGluZm8oaW5mbykKLSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJU
KGNhbGwuaXNGbGFnU2V0KENhbGw6Ok5lYXIpKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAg
ICAgQ2FsbCBjYWxsOwotICAgICAgICBMYWJlbCBzbG93UGF0aDsKLSAgICAgICAgQ2FsbExpbmtJ
bmZvKiBpbmZvOwotICAgIH07Ci0gICAgCi0gICAgc3RydWN0IEpTRGlyZWN0VGFpbENhbGxSZWNv
cmQgewotICAgICAgICBKU0RpcmVjdFRhaWxDYWxsUmVjb3JkKFBhdGNoYWJsZUp1bXAgcGF0Y2hh
YmxlSnVtcCwgQ2FsbCBjYWxsLCBMYWJlbCBzbG93UGF0aCwgQ2FsbExpbmtJbmZvKiBpbmZvKQot
ICAgICAgICAgICAgOiBwYXRjaGFibGVKdW1wKHBhdGNoYWJsZUp1bXApCi0gICAgICAgICAgICAs
IGNhbGwoY2FsbCkKLSAgICAgICAgICAgICwgc2xvd1BhdGgoc2xvd1BhdGgpCisgICAgICAgIEpT
RGlyZWN0Q2FsbFJlY29yZChMYWJlbCBzbG93UGF0aCwgQ2FsbExpbmtJbmZvKiBpbmZvKQorICAg
ICAgICAgICAgOiBzbG93UGF0aChzbG93UGF0aCkKICAgICAgICAgICAgICwgaW5mbyhpbmZvKQog
ICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQoY2FsbC5pc0ZsYWdTZXQoQ2FsbDo6TmVhcikg
JiYgY2FsbC5pc0ZsYWdTZXQoQ2FsbDo6VGFpbCkpOwogICAgICAgICB9CiAgICAgICAgIAotICAg
ICAgICBQYXRjaGFibGVKdW1wIHBhdGNoYWJsZUp1bXA7Ci0gICAgICAgIENhbGwgY2FsbDsKICAg
ICAgICAgTGFiZWwgc2xvd1BhdGg7CiAgICAgICAgIENhbGxMaW5rSW5mbyogaW5mbzsKICAgICB9
OwotCiAgICAgCiAgICAgVmVjdG9yPElubGluZUNhY2hlV3JhcHBlcjxKSVRHZXRCeUlkR2VuZXJh
dG9yPiwgND4gbV9nZXRCeUlkczsKICAgICBWZWN0b3I8SW5saW5lQ2FjaGVXcmFwcGVyPEpJVEdl
dEJ5SWRXaXRoVGhpc0dlbmVyYXRvcj4sIDQ+IG1fZ2V0QnlJZHNXaXRoVGhpczsKQEAgLTM4Niw3
ICszNTcsNiBAQCBwcml2YXRlOgogICAgIFZlY3RvcjxJbmxpbmVDYWNoZVdyYXBwZXI8SklUUHJp
dmF0ZUJyYW5kQWNjZXNzR2VuZXJhdG9yPiwgND4gbV9wcml2YXRlQnJhbmRBY2Nlc3NlczsKICAg
ICBWZWN0b3I8SlNDYWxsUmVjb3JkLCA0PiBtX2pzQ2FsbHM7CiAgICAgVmVjdG9yPEpTRGlyZWN0
Q2FsbFJlY29yZCwgND4gbV9qc0RpcmVjdENhbGxzOwotICAgIFZlY3RvcjxKU0RpcmVjdFRhaWxD
YWxsUmVjb3JkLCA0PiBtX2pzRGlyZWN0VGFpbENhbGxzOwogICAgIFNlZ21lbnRlZFZlY3RvcjxP
U1JFeGl0Q29tcGlsYXRpb25JbmZvLCA0PiBtX2V4aXRDb21waWxhdGlvbkluZm87CiAgICAgVmVj
dG9yPFZlY3RvcjxMYWJlbD4+IG1fZXhpdFNpdGVMYWJlbHM7CiAgICAgVmVjdG9yPERGRzo6T1NS
RW50cnlEYXRhPiBtX29zckVudHJ5OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcAkocmV2aXNpb24gMjc3NjAy
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDksNyArMjA5LDcgQEAgc3RhdGljIE1hY3JvQXNzZW1i
bGVyQ29kZVB0cjxKU0VudHJ5UHRyVAogICAgICAgICAgICAgICAgIGJhc2VsaW5lQ29kZUJsb2Nr
Rm9yQ2FsbGVyLT5nZXRDYWxsTGlua0luZm9Gb3JCeXRlY29kZUluZGV4KGNhbGxCeXRlY29kZUlu
ZGV4KTsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxMaW5rSW5mbyk7CiAKLSAgICAg
ICAgICAgIGp1bXBUYXJnZXQgPSBjYWxsTGlua0luZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbigpLnJl
dGFnZ2VkPEpTRW50cnlQdHJUYWc+KCk7CisgICAgICAgICAgICBqdW1wVGFyZ2V0ID0gY2FsbExp
bmtJbmZvLT5kb25lTG9jYXRpb24oKS5yZXRhZ2dlZDxKU0VudHJ5UHRyVGFnPigpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAyNzc2MDIpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNjE2LDcg
KzM2MTYsNyBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uTGlua0RpCiAgICAg
ICAgICAgICBjb2RlUHRyID0gZnVuY3Rpb25FeGVjdXRhYmxlLT5lbnRyeXBvaW50Rm9yKGtpbmQs
IEFyaXR5Q2hlY2tOb3RSZXF1aXJlZCk7CiAgICAgfQogICAgIAotICAgIGxpbmtEaXJlY3RGb3Io
Y2FsbEZyYW1lLCAqY2FsbExpbmtJbmZvLCBjb2RlQmxvY2ssIGNvZGVQdHIpOworICAgIGxpbmtE
aXJlY3RDYWxsKGNhbGxGcmFtZSwgKmNhbGxMaW5rSW5mbywgY29kZUJsb2NrLCBjb2RlUHRyKTsK
IH0KIAogSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblRyaWdnZXJSZW9wdGltaXph
dGlvbk5vdywgdm9pZCwgKENvZGVCbG9jayogY29kZUJsb2NrLCBDb2RlQmxvY2sqIG9wdGltaXpl
ZENvZGVCbG9jaywgT1NSRXhpdEJhc2UqIGV4aXQpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCShyZXZpc2lvbiAy
Nzc2MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJf
NjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MzgsMTkgKzgzOCwxNiBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjplbWl0Q2FsbChOb2RlKiBub2RlCiAgICAgICAgIGlmIChpc1RhaWwpIHsKICAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKG5vZGUtPm9wKCkgPT0gRGlyZWN0VGFpbENhbGwpOwogICAg
ICAgICAgICAgCi0gICAgICAgICAgICBKSVRDb21waWxlcjo6UGF0Y2hhYmxlSnVtcCBwYXRjaGFi
bGVKdW1wID0gbV9qaXQucGF0Y2hhYmxlSnVtcCgpOwogICAgICAgICAgICAgSklUQ29tcGlsZXI6
OkxhYmVsIG1haW5QYXRoID0gbV9qaXQubGFiZWwoKTsKICAgICAgICAgICAgIAogICAgICAgICAg
ICAgbV9qaXQuZW1pdFN0b3JlQ2FsbFNpdGVJbmRleChjYWxsU2l0ZSk7CiAgICAgICAgICAgICAK
LSAgICAgICAgICAgIGluZm8tPnNldEZyYW1lU2h1ZmZsZURhdGEoc2h1ZmZsZURhdGEpOwotICAg
ICAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIobV9qaXQsIHNodWZmbGVEYXRhKS5wcmVwYXJlRm9y
VGFpbENhbGwoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgSklUQ29tcGlsZXI6OkNhbGwg
Y2FsbCA9IG1faml0Lm5lYXJUYWlsQ2FsbCgpOwotICAgICAgICAgICAgCisgICAgICAgICAgICBp
bmZvLT5lbWl0RGlyZWN0VGFpbENhbGxGYXN0UGF0aChtX2ppdCwgWyZdIHsKKyAgICAgICAgICAg
ICAgICBpbmZvLT5zZXRGcmFtZVNodWZmbGVEYXRhKHNodWZmbGVEYXRhKTsKKyAgICAgICAgICAg
ICAgICBDYWxsRnJhbWVTaHVmZmxlcihtX2ppdCwgc2h1ZmZsZURhdGEpLnByZXBhcmVGb3JUYWls
Q2FsbCgpOworICAgICAgICAgICAgfSk7CisKICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpMYWJl
bCBzbG93UGF0aCA9IG1faml0LmxhYmVsKCk7Ci0gICAgICAgICAgICBwYXRjaGFibGVKdW1wLm1f
anVtcC5saW5rVG8oc2xvd1BhdGgsICZtX2ppdCk7Ci0gICAgICAgICAgICAKICAgICAgICAgICAg
IHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKEludmFsaWRHUFJSZWcpOwogICAgICAgICAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25MaW5rRGlyZWN0Q2FsbCwgaW5mbywgY2FsbGVlUGF5bG9hZEdQ
Uik7CiAgICAgICAgICAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKCk7CkBAIC04NTksNyArODU2
LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZQogICAgICAgICAg
ICAgCiAgICAgICAgICAgICB1c2VDaGlsZHJlbihub2RlKTsKICAgICAgICAgICAgIAotICAgICAg
ICAgICAgbV9qaXQuYWRkSlNEaXJlY3RUYWlsQ2FsbChwYXRjaGFibGVKdW1wLCBjYWxsLCBzbG93
UGF0aCwgaW5mbyk7CisgICAgICAgICAgICBtX2ppdC5hZGRKU0RpcmVjdENhbGwoc2xvd1BhdGgs
IGluZm8pOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIApAQCAtODY3
LDcgKzg2NCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUKICAg
ICAgICAgCiAgICAgICAgIG1faml0LmVtaXRTdG9yZUNhbGxTaXRlSW5kZXgoY2FsbFNpdGUpOwog
ICAgICAgICAKLSAgICAgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbCA9IG1faml0Lm5lYXJDYWxs
KCk7CisgICAgICAgIGluZm8tPmVtaXREaXJlY3RGYXN0UGF0aChtX2ppdCk7CiAgICAgICAgIEpJ
VENvbXBpbGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7CiAgICAgICAgIAogICAgICAgICBK
SVRDb21waWxlcjo6TGFiZWwgc2xvd1BhdGggPSBtX2ppdC5sYWJlbCgpOwpAQCAtODc5LDcgKzg3
Niw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUKICAgICAgICAg
CiAgICAgICAgIHNldFJlc3VsdEFuZFJlc2V0U3RhY2soKTsKICAgICAgICAgCi0gICAgICAgIG1f
aml0LmFkZEpTRGlyZWN0Q2FsbChjYWxsLCBzbG93UGF0aCwgaW5mbyk7CisgICAgICAgIG1faml0
LmFkZEpTRGlyZWN0Q2FsbChzbG93UGF0aCwgaW5mbyk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAgICAgCkBAIC04ODgsMjEgKzg4NSwyNSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2Fs
bChOb2RlKiBub2RlCiAgICAgc2xvd1BhdGguYXBwZW5kKG1faml0LmJyYW5jaElmTm90Q2VsbChK
U1ZhbHVlUmVncyhjYWxsZWVUYWdHUFIsIGNhbGxlZVBheWxvYWRHUFIpKSk7CiAgICAgc2xvd1Bh
dGguYXBwZW5kKG1faml0LmJyYW5jaFB0cldpdGhQYXRjaChNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1
YWwsIGNhbGxlZVBheWxvYWRHUFIsIHRhcmdldFRvQ2hlY2spKTsKIAorICAgIENDYWxsSGVscGVy
czo6SnVtcExpc3Qgc2xvd0Nhc2VzOwogICAgIGlmIChpc1RhaWwpIHsKLSAgICAgICAgaWYgKG5v
ZGUtPm9wKCkgPT0gVGFpbENhbGwpIHsKLSAgICAgICAgICAgIGluZm8tPnNldEZyYW1lU2h1ZmZs
ZURhdGEoc2h1ZmZsZURhdGEpOwotICAgICAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIobV9qaXQs
IHNodWZmbGVEYXRhKS5wcmVwYXJlRm9yVGFpbENhbGwoKTsKLSAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgIG1faml0LmVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKLSAgICAgICAgICAgIG1f
aml0LnByZXBhcmVGb3JUYWlsQ2FsbFNsb3coKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEpJ
VENvbXBpbGVyOjpDYWxsIGZhc3RDYWxsID0gaXNUYWlsID8gbV9qaXQubmVhclRhaWxDYWxsKCkg
OiBtX2ppdC5uZWFyQ2FsbCgpOworICAgICAgICBzbG93Q2FzZXMgPSBpbmZvLT5lbWl0VGFpbENh
bGxGYXN0UGF0aChtX2ppdCwgY2FsbGVlUGF5bG9hZEdQUiwgSW52YWxpZEdQUlJlZywgQ2FsbExp
bmtJbmZvOjpVc2VEYXRhSUM6Ok5vLCBbJl0geworICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkg
PT0gVGFpbENhbGwpIHsKKyAgICAgICAgICAgICAgICBpbmZvLT5zZXRGcmFtZVNodWZmbGVEYXRh
KHNodWZmbGVEYXRhKTsKKyAgICAgICAgICAgICAgICBDYWxsRnJhbWVTaHVmZmxlcihtX2ppdCwg
c2h1ZmZsZURhdGEpLnByZXBhcmVGb3JUYWlsQ2FsbCgpOworICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICBtX2ppdC5lbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CisgICAgICAg
ICAgICAgICAgbV9qaXQucHJlcGFyZUZvclRhaWxDYWxsU2xvdygpOworICAgICAgICAgICAgfQor
ICAgICAgICB9KTsKKyAgICB9IGVsc2UKKyAgICAgICAgc2xvd0Nhc2VzID0gaW5mby0+ZW1pdEZh
c3RQYXRoKG1faml0LCBjYWxsZWVQYXlsb2FkR1BSLCBJbnZhbGlkR1BSUmVnLCBDYWxsTGlua0lu
Zm86OlVzZURhdGFJQzo6Tm8pOwogCiAgICAgSklUQ29tcGlsZXI6Okp1bXAgZG9uZSA9IG1faml0
Lmp1bXAoKTsKIAogICAgIHNsb3dQYXRoLmxpbmsoJm1faml0KTsKKyAgICBzbG93Q2FzZXMubGlu
aygmbV9qaXQpOworICAgIGF1dG8gc2xvd1BhdGhTdGFydCA9IG1faml0LmxhYmVsKCk7CiAKICAg
ICBpZiAobm9kZS0+b3AoKSA9PSBUYWlsQ2FsbCkgewogICAgICAgICBDYWxsRnJhbWVTaHVmZmxl
ciBjYWxsRnJhbWVTaHVmZmxlcihtX2ppdCwgc2h1ZmZsZURhdGEpOwpAQCAtOTI3LDE4ICs5Mjgs
MTggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZQogICAgICAgICAg
ICAgbV9qaXQuZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwogICAgIH0KIAotICAgIG1faml0Lm1v
dmUoVHJ1c3RlZEltbVB0cihpbmZvKSwgR1BSSW5mbzo6cmVnVDIpOwogICAgIG1faml0Lm1vdmUo
VHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgZ2xvYmFsT2JqZWN0KSwgR1BSSW5m
bzo6cmVnVDMpOwotICAgIEpJVENvbXBpbGVyOjpDYWxsIHNsb3dDYWxsID0gbV9qaXQubmVhckNh
bGwoKTsKKyAgICBpbmZvLT5lbWl0U2xvd1BhdGgodm0oKSwgbV9qaXQpOwogCiAgICAgZG9uZS5s
aW5rKCZtX2ppdCk7CisgICAgYXV0byBkb25lTG9jYXRpb24gPSBtX2ppdC5sYWJlbCgpOwogCiAg
ICAgaWYgKGlzVGFpbCkKICAgICAgICAgbV9qaXQuYWJvcnRXaXRoUmVhc29uKEpJVERpZFJldHVy
bkZyb21UYWlsQ2FsbCk7CiAgICAgZWxzZQogICAgICAgICBzZXRSZXN1bHRBbmRSZXNldFN0YWNr
KCk7CiAKLSAgICBtX2ppdC5hZGRKU0NhbGwoZmFzdENhbGwsIHNsb3dDYWxsLCB0YXJnZXRUb0No
ZWNrLCBpbmZvKTsKKyAgICBtX2ppdC5hZGRKU0NhbGwoc2xvd1BhdGhTdGFydCwgZG9uZUxvY2F0
aW9uLCBpbmZvKTsKIH0KIAogdGVtcGxhdGU8Ym9vbCBzdHJpY3Q+CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9u
IDI3NzYwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2
NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgzMCwxOCArODMwLDE0IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUKICAgICAgICAgaWYgKGlzVGFpbCkgewogICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlQobm9kZS0+b3AoKSA9PSBEaXJlY3RUYWlsQ2FsbCk7CiAgICAg
ICAgICAgICAKLSAgICAgICAgICAgIEpJVENvbXBpbGVyOjpQYXRjaGFibGVKdW1wIHBhdGNoYWJs
ZUp1bXAgPSBtX2ppdC5wYXRjaGFibGVKdW1wKCk7CiAgICAgICAgICAgICBKSVRDb21waWxlcjo6
TGFiZWwgbWFpblBhdGggPSBtX2ppdC5sYWJlbCgpOwotICAgICAgICAgICAgCiAgICAgICAgICAg
ICBtX2ppdC5lbWl0U3RvcmVDYWxsU2l0ZUluZGV4KGNhbGxTaXRlKTsKLSAgICAgICAgICAgIAot
ICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRGcmFtZVNodWZmbGVEYXRhKHNodWZmbGVEYXRh
KTsKLSAgICAgICAgICAgIENhbGxGcmFtZVNodWZmbGVyKG1faml0LCBzaHVmZmxlRGF0YSkucHJl
cGFyZUZvclRhaWxDYWxsKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIEpJVENvbXBpbGVy
OjpDYWxsIGNhbGwgPSBtX2ppdC5uZWFyVGFpbENhbGwoKTsKLSAgICAgICAgICAgIAorCisgICAg
ICAgICAgICBjYWxsTGlua0luZm8tPmVtaXREaXJlY3RUYWlsQ2FsbEZhc3RQYXRoKG1faml0LCBb
Jl0geworICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0RnJhbWVTaHVmZmxlRGF0YShz
aHVmZmxlRGF0YSk7CisgICAgICAgICAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIobV9qaXQsIHNo
dWZmbGVEYXRhKS5wcmVwYXJlRm9yVGFpbENhbGwoKTsKKyAgICAgICAgICAgIH0pOwogICAgICAg
ICAgICAgSklUQ29tcGlsZXI6OkxhYmVsIHNsb3dQYXRoID0gbV9qaXQubGFiZWwoKTsKLSAgICAg
ICAgICAgIHBhdGNoYWJsZUp1bXAubV9qdW1wLmxpbmtUbyhzbG93UGF0aCwgJm1faml0KTsKICAg
ICAgICAgICAgIAogICAgICAgICAgICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMoSW52YWxpZEdQ
UlJlZyk7CiAgICAgICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkxpbmtEaXJlY3RDYWxs
LCBjYWxsTGlua0luZm8sIGNhbGxlZUdQUik7CkBAIC04NTEsMTUgKzg0NywxMyBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlKiBub2RlCiAgICAgICAgICAgICAKICAgICAgICAg
ICAgIHVzZUNoaWxkcmVuKG5vZGUpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBtX2ppdC5h
ZGRKU0RpcmVjdFRhaWxDYWxsKHBhdGNoYWJsZUp1bXAsIGNhbGwsIHNsb3dQYXRoLCBjYWxsTGlu
a0luZm8pOworICAgICAgICAgICAgbV9qaXQuYWRkSlNEaXJlY3RDYWxsKHNsb3dQYXRoLCBjYWxs
TGlua0luZm8pOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIAogICAg
ICAgICBKSVRDb21waWxlcjo6TGFiZWwgbWFpblBhdGggPSBtX2ppdC5sYWJlbCgpOwotICAgICAg
ICAKICAgICAgICAgbV9qaXQuZW1pdFN0b3JlQ2FsbFNpdGVJbmRleChjYWxsU2l0ZSk7Ci0gICAg
ICAgIAotICAgICAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsID0gbV9qaXQubmVhckNhbGwoKTsK
KyAgICAgICAgY2FsbExpbmtJbmZvLT5lbWl0RGlyZWN0RmFzdFBhdGgobV9qaXQpOwogICAgICAg
ICBKSVRDb21waWxlcjo6SnVtcCBkb25lID0gbV9qaXQuanVtcCgpOwogICAgICAgICAKICAgICAg
ICAgSklUQ29tcGlsZXI6OkxhYmVsIHNsb3dQYXRoID0gbV9qaXQubGFiZWwoKTsKQEAgLTg3NCwz
MCArODY4LDI5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUKICAg
ICAgICAgCiAgICAgICAgIHNldFJlc3VsdEFuZFJlc2V0U3RhY2soKTsKICAgICAgICAgCi0gICAg
ICAgIG1faml0LmFkZEpTRGlyZWN0Q2FsbChjYWxsLCBzbG93UGF0aCwgY2FsbExpbmtJbmZvKTsK
KyAgICAgICAgbV9qaXQuYWRkSlNEaXJlY3RDYWxsKHNsb3dQYXRoLCBjYWxsTGlua0luZm8pOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAogICAgIG1faml0LmVtaXRTdG9yZUNhbGxTaXRl
SW5kZXgoY2FsbFNpdGUpOwogICAgIAotICAgIEpJVENvbXBpbGVyOjpEYXRhTGFiZWxQdHIgdGFy
Z2V0VG9DaGVjazsKLSAgICBKSVRDb21waWxlcjo6SnVtcCBzbG93UGF0aCA9IG1faml0LmJyYW5j
aFB0cldpdGhQYXRjaChNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIGNhbGxlZUdQUiwgdGFyZ2V0
VG9DaGVjaywgVHJ1c3RlZEltbVB0cihudWxscHRyKSk7Ci0KKyAgICBDQ2FsbEhlbHBlcnM6Okp1
bXBMaXN0IHNsb3dDYXNlczsKICAgICBpZiAoaXNUYWlsKSB7Ci0gICAgICAgIGlmIChub2RlLT5v
cCgpID09IFRhaWxDYWxsKSB7Ci0gICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldEZyYW1lU2h1
ZmZsZURhdGEoc2h1ZmZsZURhdGEpOwotICAgICAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIobV9q
aXQsIHNodWZmbGVEYXRhKS5wcmVwYXJlRm9yVGFpbENhbGwoKTsKLSAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgIG1faml0LmVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKLSAgICAgICAgICAg
IG1faml0LnByZXBhcmVGb3JUYWlsQ2FsbFNsb3coKTsKLSAgICAgICAgfQotICAgIH0KLQotICAg
IEpJVENvbXBpbGVyOjpDYWxsIGZhc3RDYWxsID0gaXNUYWlsID8gbV9qaXQubmVhclRhaWxDYWxs
KCkgOiBtX2ppdC5uZWFyQ2FsbCgpOwotCisgICAgICAgIHNsb3dDYXNlcyA9IGNhbGxMaW5rSW5m
by0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgobV9qaXQsIGNhbGxlZUdQUiwgSW52YWxpZEdQUlJlZywg
Q2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6Ok5vLCBbJl0geworICAgICAgICAgICAgaWYgKG5vZGUt
Pm9wKCkgPT0gVGFpbENhbGwpIHsKKyAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldEZy
YW1lU2h1ZmZsZURhdGEoc2h1ZmZsZURhdGEpOworICAgICAgICAgICAgICAgIENhbGxGcmFtZVNo
dWZmbGVyKG1faml0LCBzaHVmZmxlRGF0YSkucHJlcGFyZUZvclRhaWxDYWxsKCk7CisgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIG1faml0LmVtaXRSZXN0b3JlQ2FsbGVlU2F2
ZXMoKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5wcmVwYXJlRm9yVGFpbENhbGxTbG93KCk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0pOworICAgIH0gZWxzZQorICAgICAgICBzbG93Q2FzZXMg
PSBjYWxsTGlua0luZm8tPmVtaXRGYXN0UGF0aChtX2ppdCwgY2FsbGVlR1BSLCBJbnZhbGlkR1BS
UmVnLCBDYWxsTGlua0luZm86OlVzZURhdGFJQzo6Tm8pOwogICAgIEpJVENvbXBpbGVyOjpKdW1w
IGRvbmUgPSBtX2ppdC5qdW1wKCk7CiAKLSAgICBzbG93UGF0aC5saW5rKCZtX2ppdCk7CisgICAg
c2xvd0Nhc2VzLmxpbmsoJm1faml0KTsKKyAgICBhdXRvIHNsb3dQYXRoU3RhcnQgPSBtX2ppdC5s
YWJlbCgpOwogCiAgICAgaWYgKG5vZGUtPm9wKCkgPT0gVGFpbENhbGwpIHsKICAgICAgICAgQ2Fs
bEZyYW1lU2h1ZmZsZXIgY2FsbEZyYW1lU2h1ZmZsZXIobV9qaXQsIHNodWZmbGVEYXRhKTsKQEAg
LTkwNSwyMyArODk4LDIyIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5v
ZGUKICAgICAgICAgY2FsbEZyYW1lU2h1ZmZsZXIucHJlcGFyZUZvclNsb3dQYXRoKCk7CiAgICAg
fSBlbHNlIHsKICAgICAgICAgbV9qaXQubW92ZShjYWxsZWVHUFIsIEdQUkluZm86OnJlZ1QwKTsg
Ly8gQ2FsbGVlIG5lZWRzIHRvIGJlIGluIHJlZ1QwCi0KICAgICAgICAgaWYgKGlzVGFpbCkKICAg
ICAgICAgICAgIG1faml0LmVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsgLy8gVGhpcyBuZWVkcyB0
byBoYXBwZW4gYWZ0ZXIgd2UgbW92ZWQgY2FsbGVlR1BSIHRvIHJlZ1QwCiAgICAgfQogCi0gICAg
bV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKGNhbGxMaW5rSW5mbyksIEdQUkluZm86OnJlZ1QyKTsg
Ly8gTGluayBpbmZvIG5lZWRzIHRvIGJlIGluIHJlZ1QyCiAgICAgbV9qaXQubW92ZShUcnVzdGVk
SW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBnbG9iYWxPYmplY3QpLCBHUFJJbmZvOjpyZWdU
Myk7IC8vIEpTR2xvYmFsT2JqZWN0IG5lZWRzIHRvIGJlIGluIHJlZ1QzCi0gICAgSklUQ29tcGls
ZXI6OkNhbGwgc2xvd0NhbGwgPSBtX2ppdC5uZWFyQ2FsbCgpOworICAgIGNhbGxMaW5rSW5mby0+
ZW1pdFNsb3dQYXRoKHZtKCksIG1faml0KTsKIAogICAgIGRvbmUubGluaygmbV9qaXQpOworICAg
IGF1dG8gZG9uZUxvY2F0aW9uID0gbV9qaXQubGFiZWwoKTsKIAogICAgIGlmIChpc1RhaWwpCiAg
ICAgICAgIG1faml0LmFib3J0V2l0aFJlYXNvbihKSVREaWRSZXR1cm5Gcm9tVGFpbENhbGwpOwog
ICAgIGVsc2UKICAgICAgICAgc2V0UmVzdWx0QW5kUmVzZXRTdGFjaygpOwogCi0gICAgbV9qaXQu
YWRkSlNDYWxsKGZhc3RDYWxsLCBzbG93Q2FsbCwgdGFyZ2V0VG9DaGVjaywgY2FsbExpbmtJbmZv
KTsKKyAgICBtX2ppdC5hZGRKU0NhbGwoc2xvd1BhdGhTdGFydCwgZG9uZUxvY2F0aW9uLCBjYWxs
TGlua0luZm8pOwogfQogCiAvLyBDbGFuZyBzaG91bGQgYWxsb3cgdW5yZWFjaGFibGUgW1tjbGFu
Zzo6ZmFsbHRocm91Z2hdXSBpbiB0ZW1wbGF0ZSBmdW5jdGlvbnMgaWYgYW55IHRlbXBsYXRlIGV4
cGFuc2lvbiB1c2VzIGl0CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2Vy
REZHVG9CMy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExM
b3dlckRGR1RvQjMuY3BwCShyZXZpc2lvbiAyNzc2MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk3MTcsMjQgKzk3
MTcsMjAgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjp0YWdG
b3IoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdU
aGlzKSkpOwogCiAgICAgICAgICAgICAgICAgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8gPSBq
aXQuY29kZUJsb2NrKCktPmFkZENhbGxMaW5rSW5mbyhub2RlLT5vcmlnaW4uc2VtYW50aWMpOwor
ICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0VXBDYWxsKAorICAgICAgICAgICAgICAg
ICAgICBub2RlLT5vcCgpID09IENvbnN0cnVjdCA/IENhbGxMaW5rSW5mbzo6Q29uc3RydWN0IDog
Q2FsbExpbmtJbmZvOjpDYWxsLCBHUFJJbmZvOjpyZWdUMCk7CiAKLSAgICAgICAgICAgICAgICBD
Q2FsbEhlbHBlcnM6OkRhdGFMYWJlbFB0ciB0YXJnZXRUb0NoZWNrOwotICAgICAgICAgICAgICAg
IENDYWxsSGVscGVyczo6SnVtcCBzbG93UGF0aCA9IGppdC5icmFuY2hQdHJXaXRoUGF0Y2goCi0g
ICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Tm90RXF1YWwsIEdQUkluZm86OnJlZ1Qw
LCB0YXJnZXRUb0NoZWNrLAotICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW1QdHIobnVsbHB0cikpOwotCi0gICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxs
IGZhc3RDYWxsID0gaml0Lm5lYXJDYWxsKCk7CisgICAgICAgICAgICAgICAgYXV0byBzbG93UGF0
aCA9IGNhbGxMaW5rSW5mby0+ZW1pdEZhc3RQYXRoKGppdCwgR1BSSW5mbzo6cmVnVDAsIEludmFs
aWRHUFJSZWcsIENhbGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpObyk7CiAgICAgICAgICAgICAgICAg
Q0NhbGxIZWxwZXJzOjpKdW1wIGRvbmUgPSBqaXQuanVtcCgpOwogCiAgICAgICAgICAgICAgICAg
c2xvd1BhdGgubGluaygmaml0KTsKLQotICAgICAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVs
cGVyczo6VHJ1c3RlZEltbVB0cihjYWxsTGlua0luZm8pLCBHUFJJbmZvOjpyZWdUMik7CisgICAg
ICAgICAgICAgICAgYXV0byBzbG93UGF0aFN0YXJ0ID0gaml0LmxhYmVsKCk7CiAgICAgICAgICAg
ICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGppdC5jb2RlQmxvY2so
KS0+Z2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBHUFJJbmZvOjpyZWdU
Myk7Ci0gICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIHNsb3dDYWxsID0gaml0Lm5l
YXJDYWxsKCk7CisgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5lbWl0U2xvd1BhdGgoKnZt
LCBqaXQpOworCiAgICAgICAgICAgICAgICAgZG9uZS5saW5rKCZqaXQpOwogCi0gICAgICAgICAg
ICAgICAgY2FsbExpbmtJbmZvLT5zZXRVcENhbGwoCi0gICAgICAgICAgICAgICAgICAgIG5vZGUt
Pm9wKCkgPT0gQ29uc3RydWN0ID8gQ2FsbExpbmtJbmZvOjpDb25zdHJ1Y3QgOiBDYWxsTGlua0lu
Zm86OkNhbGwsIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgICAgICAgICBhdXRvIGRvbmVMb2Nh
dGlvbiA9IGppdC5sYWJlbCgpOwogCiAgICAgICAgICAgICAgICAgaml0LmFkZFB0cigKICAgICAg
ICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoLXBhcmFtcy5wcm9jKCku
ZnJhbWVTaXplKCkpLApAQCAtOTc0MiwxMyArOTczOCw5IEBAIHByaXZhdGU6CiAKICAgICAgICAg
ICAgICAgICBqaXQuYWRkTGlua1Rhc2soCiAgICAgICAgICAgICAgICAgICAgIFs9XSAoTGlua0J1
ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyPEpJVFRodW5rUHRyVGFnPiBsaW5rQ2FsbCA9IHZtLT5nZXRDVElTdHViKGxpbmtD
YWxsVGh1bmtHZW5lcmF0b3IpLmNvZGUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtC
dWZmZXIubGluayhzbG93Q2FsbCwgRnVuY3Rpb25QdHI8SklUVGh1bmtQdHJUYWc+KGxpbmtDYWxs
KSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0Q2FsbExvY2F0
aW9ucygKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0lu
dGVybmFsUHRyVGFnPihsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxKU0ludGVybmFsUHRy
VGFnPihzbG93Q2FsbCkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvZGVMb2NhdGlv
bkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+KGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFs
UHRyVGFnPih0YXJnZXRUb0NoZWNrKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlu
a0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8SlNJbnRlcm5hbFB0clRhZz4oZmFzdENhbGwpKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0Q29kZUxvY2F0aW9ucygK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRl
cm5hbFB0clRhZz4oc2xvd1BhdGhTdGFydCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KGRvbmVMb2NhdGlvbikpOwog
ICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIH0pOwogCkBAIC05ODU3LDYzICs5
ODQ5LDUwIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIHNodWZmbGVEYXRhLnNldHVw
Q2FsbGVlU2F2ZVJlZ2lzdGVycyhqaXQuY29kZUJsb2NrKCkpOwogICAgICAgICAgICAgICAgICAg
ICAKICAgICAgICAgICAgICAgICAgICAgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8gPSBqaXQu
Y29kZUJsb2NrKCktPmFkZENhbGxMaW5rSW5mbyhub2RlLT5vcmlnaW4uc2VtYW50aWMpOworICAg
ICAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldFVwQ2FsbChDYWxsTGlua0luZm86OkRp
cmVjdFRhaWxDYWxsLCBJbnZhbGlkR1BSUmVnKTsKICAgICAgICAgICAgICAgICAgICAgCi0gICAg
ICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6UGF0Y2hhYmxlSnVtcCBwYXRjaGFibGVKdW1w
ID0gaml0LnBhdGNoYWJsZUp1bXAoKTsKICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJz
OjpMYWJlbCBtYWluUGF0aCA9IGppdC5sYWJlbCgpOwotICAgICAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgICAgICAgICAgaml0LnN0b3JlMzIoCiAgICAgICAgICAgICAgICAgICAgICAgICBD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihjYWxsU2l0ZUluZGV4LmJpdHMoKSksCiAgICAgICAg
ICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OnRhZ0ZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2Fs
bEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKSk7Ci0gICAgICAgICAgICAg
ICAgCi0gICAgICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0RnJhbWVTaHVmZmxlRGF0
YShzaHVmZmxlRGF0YSk7Ci0gICAgICAgICAgICAgICAgICAgIENhbGxGcmFtZVNodWZmbGVyKGpp
dCwgc2h1ZmZsZURhdGEpLnByZXBhcmVGb3JUYWlsQ2FsbCgpOwotICAgICAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNhbGwgPSBqaXQubmVh
clRhaWxDYWxsKCk7CisgICAgICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+ZW1pdERpcmVj
dFRhaWxDYWxsRmFzdFBhdGgoaml0LCBbJl0geworICAgICAgICAgICAgICAgICAgICAgICAgY2Fs
bExpbmtJbmZvLT5zZXRGcmFtZVNodWZmbGVEYXRhKHNodWZmbGVEYXRhKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIENhbGxGcmFtZVNodWZmbGVyKGppdCwgc2h1ZmZsZURhdGEpLnByZXBhcmVG
b3JUYWlsQ2FsbCgpOworICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAg
ICAgCiAgICAgICAgICAgICAgICAgICAgIGppdC5hYm9ydFdpdGhSZWFzb24oSklURGlkUmV0dXJu
RnJvbVRhaWxDYWxsKTsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAg
IENDYWxsSGVscGVyczo6TGFiZWwgc2xvd1BhdGggPSBqaXQubGFiZWwoKTsKLSAgICAgICAgICAg
ICAgICAgICAgcGF0Y2hhYmxlSnVtcC5tX2p1bXAubGlua1RvKHNsb3dQYXRoLCAmaml0KTsKICAg
ICAgICAgICAgICAgICAgICAgY2FsbE9wZXJhdGlvbigKICAgICAgICAgICAgICAgICAgICAgICAg
ICpzdGF0ZSwgdG9TYXZlLCBqaXQsCiAgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5vcmln
aW4uc2VtYW50aWMsIGV4Y2VwdGlvbnMuZ2V0KCksIG9wZXJhdGlvbkxpbmtEaXJlY3RDYWxsLAog
ICAgICAgICAgICAgICAgICAgICAgICAgSW52YWxpZEdQUlJlZywgQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tUHRyKGNhbGxMaW5rSW5mbyksIGNhbGxlZUdQUikuY2FsbCgpOwogICAgICAgICAgICAg
ICAgICAgICBqaXQuanVtcCgpLmxpbmtUbyhtYWluUGF0aCwgJmppdCk7Ci0gICAgICAgICAgICAg
ICAgICAgIAotICAgICAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldFVwQ2FsbChDYWxs
TGlua0luZm86OkRpcmVjdFRhaWxDYWxsLCBJbnZhbGlkR1BSUmVnKTsKICAgICAgICAgICAgICAg
ICAgICAgY2FsbExpbmtJbmZvLT5zZXRFeGVjdXRhYmxlRHVyaW5nQ29tcGlsYXRpb24oZXhlY3V0
YWJsZSk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChudW1BbGxvY2F0ZWRBcmdzID4gbnVtUGFz
c2VkQXJncykKICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0TWF4QXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXMobnVtQWxsb2NhdGVkQXJncyk7CiAgICAgICAgICAgICAg
ICAgICAgIAotICAgICAgICAgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soCi0gICAgICAgICAg
ICAgICAgICAgICAgICBbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBwYXRj
aGFibGVKdW1wTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRh
Zz4ocGF0Y2hhYmxlSnVtcCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29kZUxvY2F0
aW9uTmVhckNhbGw8SlNJbnRlcm5hbFB0clRhZz4gY2FsbExvY2F0aW9uID0gbGlua0J1ZmZlci5s
b2NhdGlvbk9mTmVhckNhbGw8SlNJbnRlcm5hbFB0clRhZz4oY2FsbCk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gc2xvd1Bh
dGhMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihzbG93
UGF0aCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldENh
bGxMb2NhdGlvbnMoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGNoYWJsZUp1
bXBMb2NhdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGhMb2Nh
dGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbExvY2F0aW9uKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgICAgICBqaXQuYWRkTGlu
a1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBjYWxsTGlua0luZm8tPnNldENvZGVMb2NhdGlvbnMoCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KHNsb3dQYXRo
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVy
bmFsUHRyVGFnPigpKTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCiAgICAgICAg
ICAgICAgICAgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8gPSBqaXQuY29kZUJsb2NrKCktPmFk
ZENhbGxMaW5rSW5mbyhub2RlLT5vcmlnaW4uc2VtYW50aWMpOwotICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6TGFiZWwgbWFpblBhdGggPSBqaXQubGFiZWwo
KTsKKyAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldFVwQ2FsbCgKKyAgICAgICAgICAg
ICAgICAgICAgaXNDb25zdHJ1Y3QgPyBDYWxsTGlua0luZm86OkRpcmVjdENvbnN0cnVjdCA6IENh
bGxMaW5rSW5mbzo6RGlyZWN0Q2FsbCwgSW52YWxpZEdQUlJlZyk7CiAKKyAgICAgICAgICAgICAg
ICBDQ2FsbEhlbHBlcnM6OkxhYmVsIG1haW5QYXRoID0gaml0LmxhYmVsKCk7CiAgICAgICAgICAg
ICAgICAgaml0LnN0b3JlMzIoCiAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1
c3RlZEltbTMyKGNhbGxTaXRlSW5kZXguYml0cygpKSwKICAgICAgICAgICAgICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjp0YWdGb3IoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50
Q291bnRJbmNsdWRpbmdUaGlzKSkpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAg
IENDYWxsSGVscGVyczo6Q2FsbCBjYWxsID0gaml0Lm5lYXJDYWxsKCk7CisgICAgICAgICAgICAg
ICAgY2FsbExpbmtJbmZvLT5lbWl0RGlyZWN0RmFzdFBhdGgoaml0KTsKICAgICAgICAgICAgICAg
ICBqaXQuYWRkUHRyKAogICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJ
bW0zMigtcGFyYW1zLnByb2MoKS5mcmFtZVNpemUoKSksCiAgICAgICAgICAgICAgICAgICAgIEdQ
UkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lz
dGVyKTsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNl
dFVwQ2FsbCgKLSAgICAgICAgICAgICAgICAgICAgaXNDb25zdHJ1Y3QgPyBDYWxsTGlua0luZm86
OkRpcmVjdENvbnN0cnVjdCA6IENhbGxMaW5rSW5mbzo6RGlyZWN0Q2FsbCwgSW52YWxpZEdQUlJl
Zyk7CiAgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRFeGVjdXRhYmxlRHVyaW5nQ29t
cGlsYXRpb24oZXhlY3V0YWJsZSk7CiAgICAgICAgICAgICAgICAgaWYgKG51bUFsbG9jYXRlZEFy
Z3MgPiBudW1QYXNzZWRBcmdzKQogICAgICAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNl
dE1heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKG51bUFsbG9jYXRlZEFyZ3MpOwpAQCAtOTkz
NSwxNSArOTkxNCw5IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAg
ICAgICAgICAgICAgICAgICAgIGppdC5hZGRMaW5rVGFzaygKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9uTmVhckNhbGw8SlNJbnRlcm5hbFB0clRhZz4gY2Fs
bExvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8SlNJbnRlcm5hbFB0clRh
Zz4oY2FsbCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxh
YmVsPEpTSW50ZXJuYWxQdHJUYWc+IHNsb3dQYXRoTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0
aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oc2xvd1BhdGgpOwotCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCBzbG93UGF0aExvY2F0aW9uKTsKLQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldENhbGxMb2Nh
dGlvbnMoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2RlTG9jYXRpb25M
YWJlbDxKU0ludGVybmFsUHRyVGFnPigpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc2xvd1BhdGhMb2NhdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNhbGxMb2NhdGlvbik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxM
aW5rSW5mby0+c2V0Q29kZUxvY2F0aW9ucygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihzbG93UGF0aCks
IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8
SlNJbnRlcm5hbFB0clRhZz4oKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAg
ICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgfSk7CkBAIC0xMDAzNCw0MCArMTAw
MDcsMzAgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBzaHVmZmxlRGF0YS5zZXR1cENhbGxl
ZVNhdmVSZWdpc3RlcnMoaml0LmNvZGVCbG9jaygpKTsKIAogICAgICAgICAgICAgICAgIENhbGxM
aW5rSW5mbyogY2FsbExpbmtJbmZvID0gaml0LmNvZGVCbG9jaygpLT5hZGRDYWxsTGlua0luZm8o
Y29kZU9yaWdpbik7CisgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRVcENhbGwoQ2Fs
bExpbmtJbmZvOjpUYWlsQ2FsbCwgR1BSSW5mbzo6cmVnVDApOwogCi0gICAgICAgICAgICAgICAg
Q0NhbGxIZWxwZXJzOjpEYXRhTGFiZWxQdHIgdGFyZ2V0VG9DaGVjazsKLSAgICAgICAgICAgICAg
ICBDQ2FsbEhlbHBlcnM6Okp1bXAgc2xvd1BhdGggPSBqaXQuYnJhbmNoUHRyV2l0aFBhdGNoKAot
ICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCBHUFJJbmZvOjpyZWdU
MCwgdGFyZ2V0VG9DaGVjaywKLSAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tUHRyKG51bGxwdHIpKTsKLQotICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0
RnJhbWVTaHVmZmxlRGF0YShzaHVmZmxlRGF0YSk7Ci0gICAgICAgICAgICAgICAgQ2FsbEZyYW1l
U2h1ZmZsZXIoaml0LCBzaHVmZmxlRGF0YSkucHJlcGFyZUZvclRhaWxDYWxsKCk7Ci0KLSAgICAg
ICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgZmFzdENhbGwgPSBqaXQubmVhclRhaWxDYWxs
KCk7CisgICAgICAgICAgICAgICAgYXV0byBzbG93UGF0aCA9IGNhbGxMaW5rSW5mby0+ZW1pdFRh
aWxDYWxsRmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgSW52YWxpZEdQUlJlZywgQ2FsbExp
bmtJbmZvOjpVc2VEYXRhSUM6Ok5vLCBbJl0geworICAgICAgICAgICAgICAgICAgICBjYWxsTGlu
a0luZm8tPnNldEZyYW1lU2h1ZmZsZURhdGEoc2h1ZmZsZURhdGEpOworICAgICAgICAgICAgICAg
ICAgICBDYWxsRnJhbWVTaHVmZmxlcihqaXQsIHNodWZmbGVEYXRhKS5wcmVwYXJlRm9yVGFpbENh
bGwoKTsKKyAgICAgICAgICAgICAgICB9KTsKIAogICAgICAgICAgICAgICAgIHNsb3dQYXRoLmxp
bmsoJmppdCk7Ci0KKyAgICAgICAgICAgICAgICBhdXRvIHNsb3dQYXRoU3RhcnQgPSBqaXQubGFi
ZWwoKTsKICAgICAgICAgICAgICAgICBDYWxsRnJhbWVTaHVmZmxlciBzbG93UGF0aFNodWZmbGVy
KGppdCwgc2h1ZmZsZURhdGEpOwogICAgICAgICAgICAgICAgIHNsb3dQYXRoU2h1ZmZsZXIuc2V0
Q2FsbGVlSlNWYWx1ZVJlZ3MoSlNWYWx1ZVJlZ3MoR1BSSW5mbzo6cmVnVDApKTsKICAgICAgICAg
ICAgICAgICBzbG93UGF0aFNodWZmbGVyLnByZXBhcmVGb3JTbG93UGF0aCgpOwogCi0gICAgICAg
ICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGNhbGxMaW5rSW5m
byksIEdQUkluZm86OnJlZ1QyKTsKICAgICAgICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW1QdHIoaml0LmNvZGVCbG9jaygpLT5nbG9iYWxPYmplY3RGb3Iobm9kZS0+
b3JpZ2luLnNlbWFudGljKSksIEdQUkluZm86OnJlZ1QzKTsKLSAgICAgICAgICAgICAgICBDQ2Fs
bEhlbHBlcnM6OkNhbGwgc2xvd0NhbGwgPSBqaXQubmVhckNhbGwoKTsKKyAgICAgICAgICAgICAg
ICBjYWxsTGlua0luZm8tPmVtaXRTbG93UGF0aCgqdm0sIGppdCk7CiAKKyAgICAgICAgICAgICAg
ICBhdXRvIGRvbmVMb2NhdGlvbiA9IGppdC5sYWJlbCgpOwogICAgICAgICAgICAgICAgIGppdC5h
Ym9ydFdpdGhSZWFzb24oSklURGlkUmV0dXJuRnJvbVRhaWxDYWxsKTsKIAotICAgICAgICAgICAg
ICAgIGNhbGxMaW5rSW5mby0+c2V0VXBDYWxsKENhbGxMaW5rSW5mbzo6VGFpbENhbGwsIEdQUklu
Zm86OnJlZ1QwKTsKLQogICAgICAgICAgICAgICAgIGppdC5hZGRMaW5rVGFzaygKICAgICAgICAg
ICAgICAgICAgICAgWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SklUVGh1bmtQdHJUYWc+IGxpbmtDYWxs
ID0gdm0tPmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcikuY29kZSgpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKHNsb3dDYWxsLCBGdW5jdGlvblB0cjxK
SVRUaHVua1B0clRhZz4obGlua0NhbGwpKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgY2Fs
bExpbmtJbmZvLT5zZXRDYWxsTG9jYXRpb25zKAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+KGxpbmtCdWZmZXIubG9jYXRpb25P
Zk5lYXJDYWxsPEpTSW50ZXJuYWxQdHJUYWc+KHNsb3dDYWxsKSksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4obGlua0J1ZmZl
ci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KHRhcmdldFRvQ2hlY2spKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxKU0ludGVy
bmFsUHRyVGFnPihmYXN0Q2FsbCkpOworICAgICAgICAgICAgICAgICAgICAgICAgY2FsbExpbmtJ
bmZvLT5zZXRDb2RlTG9jYXRpb25zKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtC
dWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihzbG93UGF0aFN0YXJ0KSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0
clRhZz4oZG9uZUxvY2F0aW9uKSk7CiAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAg
ICAgfSk7CiAgICAgfQpAQCAtMTAzMjAsNDAgKzEwMjgzLDM4IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICBjYWxsVHlwZSA9IENhbGxMaW5rSW5m
bzo6Q2FsbFZhcmFyZ3M7CiAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY2FsbExp
bmtJbmZvLT5zZXRVcENhbGwoY2FsbFR5cGUsIEdQUkluZm86OnJlZ1QwKTsKKwogICAgICAgICAg
ICAgICAgIGJvb2wgaXNUYWlsQ2FsbCA9IENhbGxMaW5rSW5mbzo6Y2FsbE1vZGVGb3IoY2FsbFR5
cGUpID09IENhbGxNb2RlOjpUYWlsOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAg
IENDYWxsSGVscGVyczo6RGF0YUxhYmVsUHRyIHRhcmdldFRvQ2hlY2s7Ci0gICAgICAgICAgICAg
ICAgQ0NhbGxIZWxwZXJzOjpKdW1wIHNsb3dQYXRoID0gaml0LmJyYW5jaFB0cldpdGhQYXRjaCgK
LSAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwgR1BSSW5mbzo6cmVn
VDAsIHRhcmdldFRvQ2hlY2ssCi0gICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1
c3RlZEltbVB0cihudWxscHRyKSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAg
Q0NhbGxIZWxwZXJzOjpDYWxsIGZhc3RDYWxsOworCisgICAgICAgICAgICAgICAgQVNTRVJUKCF1
c2VkUmVnaXN0ZXJzLmdldChHUFJJbmZvOjpyZWdUMikpOyAvLyBVc2VkIG9uIHRoZSBzbG93IHBh
dGguCisKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dQYXRoOwog
ICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBkb25lOwotICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgICAgIGlmIChpc1RhaWxDYWxsKSB7Ci0gICAgICAgICAgICAgICAgICAg
IGppdC5lbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7Ci0gICAgICAgICAgICAgICAgICAgIGppdC5w
cmVwYXJlRm9yVGFpbENhbGxTbG93KCk7Ci0gICAgICAgICAgICAgICAgICAgIGZhc3RDYWxsID0g
aml0Lm5lYXJUYWlsQ2FsbCgpOworICAgICAgICAgICAgICAgICAgICBzbG93UGF0aCA9IGNhbGxM
aW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgSW52YWxp
ZEdQUlJlZywgQ2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6Ok5vLCBbJl0geworICAgICAgICAgICAg
ICAgICAgICAgICAgaml0LmVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGppdC5wcmVwYXJlRm9yVGFpbENhbGxTbG93KCk7CisgICAgICAgICAgICAgICAg
ICAgIH0pOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGZh
c3RDYWxsID0gaml0Lm5lYXJDYWxsKCk7CisgICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoID0g
Y2FsbExpbmtJbmZvLT5lbWl0RmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgSW52YWxpZEdQ
UlJlZywgQ2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6Ok5vKTsKICAgICAgICAgICAgICAgICAgICAg
ZG9uZSA9IGppdC5qdW1wKCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAog
ICAgICAgICAgICAgICAgIHNsb3dQYXRoLmxpbmsoJmppdCk7CisgICAgICAgICAgICAgICAgYXV0
byBzbG93UGF0aFN0YXJ0ID0gaml0LmxhYmVsKCk7CiAKICAgICAgICAgICAgICAgICBpZiAoaXNU
YWlsQ2FsbCkKICAgICAgICAgICAgICAgICAgICAgaml0LmVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMo
KTsKLSAgICAgICAgICAgICAgICBBU1NFUlQoIXVzZWRSZWdpc3RlcnMuZ2V0KEdQUkluZm86OnJl
Z1QyKSk7Ci0gICAgICAgICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
UHRyKGNhbGxMaW5rSW5mbyksIEdQUkluZm86OnJlZ1QyKTsKICAgICAgICAgICAgICAgICBqaXQu
bW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoaml0LmNvZGVCbG9jaygpLT5nbG9iYWxP
YmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIEdQUkluZm86OnJlZ1QzKTsKLSAgICAg
ICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgc2xvd0NhbGwgPSBqaXQubmVhckNhbGwoKTsK
KyAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPmVtaXRTbG93UGF0aCgqdm0sIGppdCk7CiAg
ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaWYgKGlzVGFpbENhbGwpCiAgICAgICAg
ICAgICAgICAgICAgIGppdC5hYm9ydFdpdGhSZWFzb24oSklURGlkUmV0dXJuRnJvbVRhaWxDYWxs
KTsKICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIGRvbmUubGluaygm
aml0KTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNl
dFVwQ2FsbChjYWxsVHlwZSwgR1BSSW5mbzo6cmVnVDApOworCisgICAgICAgICAgICAgICAgYXV0
byBkb25lTG9jYXRpb24gPSBqaXQubGFiZWwoKTsKIAogICAgICAgICAgICAgICAgIGppdC5hZGRQ
dHIoCiAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKC1vcmln
aW5hbFN0YWNrSGVpZ2h0KSwKQEAgLTEwMzYxLDEzICsxMDMyMiw5IEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaml0LmFkZExpbmtUYXNrKAogICAgICAgICAg
ICAgICAgICAgICBbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKSVRUaHVua1B0clRhZz4gbGlua0NhbGwg
PSB2bS0+Z2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5jb2RlKCk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoc2xvd0NhbGwsIEZ1bmN0aW9uUHRyPEpJ
VFRodW5rUHRyVGFnPihsaW5rQ2FsbCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAg
ICAgICAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldENhbGxMb2NhdGlvbnMoCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRh
Zz4obGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8SlNJbnRlcm5hbFB0clRhZz4oc2xvd0Nh
bGwpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0lu
dGVybmFsUHRyVGFnPihsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4odGFy
Z2V0VG9DaGVjaykpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubG9j
YXRpb25PZk5lYXJDYWxsPEpTSW50ZXJuYWxQdHJUYWc+KGZhc3RDYWxsKSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldENvZGVMb2NhdGlvbnMoCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+
KHNsb3dQYXRoU3RhcnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIu
bG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihkb25lTG9jYXRpb24pKTsKICAgICAgICAgICAg
ICAgICAgICAgfSk7CiAgICAgICAgICAgICB9KTsKIApAQCAtMTA2MDcsMzkgKzEwNTY0LDM2IEBA
IHByaXZhdGU6CiAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICBjYWxs
VHlwZSA9IENhbGxMaW5rSW5mbzo6Q2FsbFZhcmFyZ3M7CiAgICAgICAgICAgICAgICAgCi0gICAg
ICAgICAgICAgICAgYm9vbCBpc1RhaWxDYWxsID0gQ2FsbExpbmtJbmZvOjpjYWxsTW9kZUZvcihj
YWxsVHlwZSkgPT0gQ2FsbE1vZGU6OlRhaWw7CisgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZv
LT5zZXRVcENhbGwoY2FsbFR5cGUsIEdQUkluZm86OnJlZ1QwKTsKICAgICAgICAgICAgICAgICAK
LSAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkRhdGFMYWJlbFB0ciB0YXJnZXRUb0NoZWNr
OwotICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBzbG93UGF0aCA9IGppdC5icmFu
Y2hQdHJXaXRoUGF0Y2goCi0gICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Tm90RXF1
YWwsIEdQUkluZm86OnJlZ1QwLCB0YXJnZXRUb0NoZWNrLAotICAgICAgICAgICAgICAgICAgICBD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobnVsbHB0cikpOworICAgICAgICAgICAgICAgIGJv
b2wgaXNUYWlsQ2FsbCA9IENhbGxMaW5rSW5mbzo6Y2FsbE1vZGVGb3IoY2FsbFR5cGUpID09IENh
bGxNb2RlOjpUYWlsOwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIENDYWxsSGVs
cGVyczo6Q2FsbCBmYXN0Q2FsbDsKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBM
aXN0IHNsb3dQYXRoOwogICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBkb25lOwot
ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGlmIChpc1RhaWxDYWxsKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIGppdC5lbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7Ci0gICAgICAgICAg
ICAgICAgICAgIGppdC5wcmVwYXJlRm9yVGFpbENhbGxTbG93KCk7Ci0gICAgICAgICAgICAgICAg
ICAgIGZhc3RDYWxsID0gaml0Lm5lYXJUYWlsQ2FsbCgpOworICAgICAgICAgICAgICAgICAgICBz
bG93UGF0aCA9IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoaml0LCBHUFJJbmZv
OjpyZWdUMCwgSW52YWxpZEdQUlJlZywgQ2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6Ok5vLCBbJl0g
eworICAgICAgICAgICAgICAgICAgICAgICAgaml0LmVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGppdC5wcmVwYXJlRm9yVGFpbENhbGxTbG93KCk7Cisg
ICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGZhc3RDYWxsID0gaml0Lm5lYXJDYWxsKCk7CisgICAgICAgICAgICAgICAg
ICAgIHNsb3dQYXRoID0gY2FsbExpbmtJbmZvLT5lbWl0RmFzdFBhdGgoaml0LCBHUFJJbmZvOjpy
ZWdUMCwgSW52YWxpZEdQUlJlZywgQ2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6Ok5vKTsKICAgICAg
ICAgICAgICAgICAgICAgZG9uZSA9IGppdC5qdW1wKCk7CiAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIHNsb3dQYXRoLmxpbmsoJmppdCk7CisgICAg
ICAgICAgICAgICAgYXV0byBzbG93UGF0aFN0YXJ0ID0gaml0LmxhYmVsKCk7CiAKICAgICAgICAg
ICAgICAgICBpZiAoaXNUYWlsQ2FsbCkKICAgICAgICAgICAgICAgICAgICAgaml0LmVtaXRSZXN0
b3JlQ2FsbGVlU2F2ZXMoKTsKLSAgICAgICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW1QdHIoY2FsbExpbmtJbmZvKSwgR1BSSW5mbzo6cmVnVDIpOwogICAgICAgICAg
ICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihqaXQuY29kZUJsb2Nr
KCktPmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgR1BSSW5mbzo6cmVn
VDMpOwotICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBzbG93Q2FsbCA9IGppdC5u
ZWFyQ2FsbCgpOworICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+ZW1pdFNsb3dQYXRoKCp2
bSwgaml0KTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBpZiAoaXNUYWlsQ2Fs
bCkKICAgICAgICAgICAgICAgICAgICAgaml0LmFib3J0V2l0aFJlYXNvbihKSVREaWRSZXR1cm5G
cm9tVGFpbENhbGwpOwogICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAg
ZG9uZS5saW5rKCZqaXQpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGNhbGxM
aW5rSW5mby0+c2V0VXBDYWxsKGNhbGxUeXBlLCBHUFJJbmZvOjpyZWdUMCk7CisKKyAgICAgICAg
ICAgICAgICBhdXRvIGRvbmVMb2NhdGlvbiA9IGppdC5sYWJlbCgpOwogICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgICAgIGppdC5hZGRQdHIoCiAgICAgICAgICAgICAgICAgICAgIENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbTMyKC1vcmlnaW5hbFN0YWNrSGVpZ2h0KSwKQEAgLTEwNjQ3LDEz
ICsxMDYwMSw5IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAg
aml0LmFkZExpbmtUYXNrKAogICAgICAgICAgICAgICAgICAgICBbPV0gKExpbmtCdWZmZXImIGxp
bmtCdWZmZXIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0
cjxKSVRUaHVua1B0clRhZz4gbGlua0NhbGwgPSB2bS0+Z2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5r
R2VuZXJhdG9yKS5jb2RlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxp
bmsoc2xvd0NhbGwsIEZ1bmN0aW9uUHRyPEpJVFRodW5rUHRyVGFnPihsaW5rQ2FsbCkpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICBjYWxsTGlua0lu
Zm8tPnNldENhbGxMb2NhdGlvbnMoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29kZUxv
Y2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4obGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNh
bGw8SlNJbnRlcm5hbFB0clRhZz4oc2xvd0NhbGwpKSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPihsaW5rQnVmZmVyLmxvY2F0
aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4odGFyZ2V0VG9DaGVjaykpLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPEpTSW50ZXJuYWxQdHJU
YWc+KGZhc3RDYWxsKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNl
dENvZGVMb2NhdGlvbnMoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5s
b2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KHNsb3dQYXRoU3RhcnQpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihk
b25lTG9jYXRpb24pKTsKICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICB9KTsK
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmNwcAkocmV2
aXNpb24gMjc3NjAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MSw2ICs3MSwxNiBAQCB2b2lkIENDYWxsSGVscGVyczo6
ZW5zdXJlU2hhZG93Q2hpY2tlblBhCiAgICAgc3RvcmVQdHIoc2NyYXRjaDIsIEFkZHJlc3Moc2Ny
YXRjaDFOb25BcmdHUFIpKTsKIH0KIAordm9pZCBDQ2FsbEhlbHBlcnM6OmVtaXRKSVRDb2RlT3Zl
cihNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNJbnRlcm5hbFB0clRhZz4gd2hlcmUsIFdURjo6RnVu
Y3Rpb248dm9pZChDQ2FsbEhlbHBlcnMmKT4gZW1pdENvZGUsIGNvbnN0IGNoYXIqIGRlc2NyaXB0
aW9uKQoreworICAgIENDYWxsSGVscGVycyBqaXQ7CisgICAgZW1pdENvZGUoaml0KTsKKworICAg
IGNvbnN0ZXhwciBib29sIG5lZWRzQnJhbmNoQ29tcGFjdGlvbiA9IGZhbHNlOworICAgIExpbmtC
dWZmZXIgbGlua0J1ZmZlcihqaXQsIHdoZXJlLCBqaXQubV9hc3NlbWJsZXIuYnVmZmVyKCkuY29k
ZVNpemUoKSwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6SW5saW5lQ2FjaGUsIEpJVENvbXBpbGF0aW9u
TXVzdFN1Y2NlZWQsIG5lZWRzQnJhbmNoQ29tcGFjdGlvbik7CisgICAgRklOQUxJWkVfQ09ERShs
aW5rQnVmZmVyLCBOb1B0clRhZywgZGVzY3JpcHRpb24pOworfQorCiB9IC8vIG5hbWVzcGFjZSBK
U0MKIAogI2VuZGlmIC8vIEVOQUJMRShKSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0NDYWxsSGVscGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvQ0NhbGxIZWxwZXJzLmgJKHJldmlzaW9uIDI3NzYwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTgxOCw2ICs4MTgsOCBA
QCBwdWJsaWM6CiAgICAgdm9pZCBsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChHUFJSZWcgc2hh
ZG93UGFja2V0LCBKU1ZhbHVlUmVncyB0aGlzUmVncywgR1BSUmVnIHNjb3BlLCBDb2RlQmxvY2sq
LCBDYWxsU2l0ZUluZGV4KTsKICAgICAvLyBMZWF2ZXMgYmVoaW5kIGEgcG9pbnRlciB0byB0aGUg
UGFja2V0IHdlIHNob3VsZCB3cml0ZSB0byBpbiBzaGFkb3dQYWNrZXQuCiAgICAgdm9pZCBlbnN1
cmVTaGFkb3dDaGlja2VuUGFja2V0KFZNJiwgR1BSUmVnIHNoYWRvd1BhY2tldCwgR1BSUmVnIHNj
cmF0Y2gxTm9uQXJnR1BSLCBHUFJSZWcgc2NyYXRjaDIpOworCisgICAgc3RhdGljIHZvaWQgZW1p
dEpJVENvZGVPdmVyKE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0ludGVybmFsUHRyVGFnPiB3aGVy
ZSwgV1RGOjpGdW5jdGlvbjx2b2lkKENDYWxsSGVscGVycyYpPiwgY29uc3QgY2hhciopOwogfTsK
IAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCShy
ZXZpc2lvbiAyNzc2MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTk2MywxMCArOTYzLDkgQEAgQ29tcGlsYXRpb25SZXN1bHQgSklUOjps
aW5rKCkKIAogICAgIGZvciAoYXV0byYgY29tcGlsYXRpb25JbmZvIDogbV9jYWxsQ29tcGlsYXRp
b25JbmZvKSB7CiAgICAgICAgIENhbGxMaW5rSW5mbyYgaW5mbyA9ICpjb21waWxhdGlvbkluZm8u
Y2FsbExpbmtJbmZvOwotICAgICAgICBpbmZvLnNldENhbGxMb2NhdGlvbnMoCi0gICAgICAgICAg
ICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPihwYXRjaEJ1ZmZlci5sb2NhdGlv
bk9mTmVhckNhbGw8SlNJbnRlcm5hbFB0clRhZz4oY29tcGlsYXRpb25JbmZvLmNhbGxSZXR1cm5M
b2NhdGlvbikpLAotICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRh
Zz4ocGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihjb21waWxhdGlvbklu
Zm8uaG90UGF0aEJlZ2luKSksCi0gICAgICAgICAgICBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mTmVh
ckNhbGw8SlNJbnRlcm5hbFB0clRhZz4oY29tcGlsYXRpb25JbmZvLmhvdFBhdGhPdGhlcikpOwor
ICAgICAgICBpbmZvLnNldENvZGVMb2NhdGlvbnMoCisgICAgICAgICAgICBwYXRjaEJ1ZmZlci5s
b2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KGNvbXBpbGF0aW9uSW5mby5zbG93UGF0aFN0YXJ0
KSwKKyAgICAgICAgICAgIHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4o
Y29tcGlsYXRpb25JbmZvLmRvbmVMb2NhdGlvbikpOwogICAgIH0KIAogICAgIHsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVQuaAkocmV2aXNpb24gMjc3NjAyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVQuaAkod29ya2luZyBjb3B5KQpAQCAtMTg2LDkgKzE4Niw4IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgIH07CiAKICAgICBzdHJ1Y3QgQ2FsbENvbXBpbGF0aW9uSW5mbyB7Ci0g
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpEYXRhTGFiZWxQdHIgaG90UGF0aEJlZ2luOwotICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBob3RQYXRoT3RoZXI7Ci0gICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpDYWxsIGNhbGxSZXR1cm5Mb2NhdGlvbjsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okxh
YmVsIHNsb3dQYXRoU3RhcnQ7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBkb25lTG9j
YXRpb247CiAgICAgICAgIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvOwogICAgIH07CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbDMyXzY0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwzMl82NC5jcHAJKHJldmlzaW9u
IDI3NzYwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbDMyXzY0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzAxLDMwICszMDEsMjggQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENh
bGwoY29uc3QgSW5zdHJ1Y3RpbwogICAgIGlmIChjb21waWxlQ2FsbEV2YWwoYnl0ZWNvZGUpKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsIHx8IG9w
Y29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzKQotICAgICAgICBlbWl0UmVzdG9yZUNhbGxl
ZVNhdmVzKCk7Ci0KLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDEpKTsKLQot
ICAgIERhdGFMYWJlbFB0ciBhZGRyZXNzT2ZMaW5rZWRGdW5jdGlvbkNoZWNrOwotICAgIEp1bXAg
c2xvd0Nhc2UgPSBicmFuY2hQdHJXaXRoUGF0Y2goTm90RXF1YWwsIHJlZ1QwLCBhZGRyZXNzT2ZM
aW5rZWRGdW5jdGlvbkNoZWNrLCBUcnVzdGVkSW1tUHRyKG51bGxwdHIpKTsKLQotICAgIGFkZFNs
b3dDYXNlKHNsb3dDYXNlKTsKLQotICAgIEFTU0VSVChtX2NhbGxDb21waWxhdGlvbkluZm8uc2l6
ZSgpID09IGNhbGxMaW5rSW5mb0luZGV4KTsKICAgICBpbmZvLT5zZXRVcENhbGwoQ2FsbExpbmtJ
bmZvOjpjYWxsVHlwZUZvcihvcGNvZGVJRCksIHJlZ1QwKTsKKyAgICBBU1NFUlQobV9jYWxsQ29t
cGlsYXRpb25JbmZvLnNpemUoKSA9PSBjYWxsTGlua0luZm9JbmRleCk7CiAgICAgbV9jYWxsQ29t
cGlsYXRpb25JbmZvLmFwcGVuZChDYWxsQ29tcGlsYXRpb25JbmZvKCkpOwotICAgIG1fY2FsbENv
bXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uaG90UGF0aEJlZ2luID0gYWRkcmVzc09m
TGlua2VkRnVuY3Rpb25DaGVjazsKICAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJ
bmZvSW5kZXhdLmNhbGxMaW5rSW5mbyA9IGluZm87CiAKKyAgICBhZGRTbG93Q2FzZShicmFuY2hJ
Zk5vdENlbGwocmVnVDEpKTsKKwogICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CiAg
ICAgaWYgKG9wY29kZUlEID09IG9wX3RhaWxfY2FsbCB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2Nh
bGxfdmFyYXJncyB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMp
IHsKLSAgICAgICAgcHJlcGFyZUZvclRhaWxDYWxsU2xvdygpOwotICAgICAgICBtX2NhbGxDb21w
aWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmhvdFBhdGhPdGhlciA9IGVtaXROYWtlZE5l
YXJUYWlsQ2FsbCgpOworICAgICAgICBhdXRvIHNsb3dQYXRocyA9IGluZm8tPmVtaXRUYWlsQ2Fs
bEZhc3RQYXRoKCp0aGlzLCByZWdUMCwgcmVnVDIsIENhbGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpZ
ZXMsIFsmXSB7CisgICAgICAgICAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CisgICAgICAg
ICAgICBwcmVwYXJlRm9yVGFpbENhbGxTbG93KHJlZ1QyKTsKKyAgICAgICAgfSk7CisgICAgICAg
IGFkZFNsb3dDYXNlKHNsb3dQYXRocyk7CisgICAgICAgIGF1dG8gZG9uZUxvY2F0aW9uID0gbGFi
ZWwoKTsKKyAgICAgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5k
b25lTG9jYXRpb24gPSBkb25lTG9jYXRpb247CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAg
ICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmhvdFBhdGhPdGhlciA9
IGVtaXROYWtlZE5lYXJDYWxsKCk7CisgICAgYXV0byBzbG93UGF0aHMgPSBpbmZvLT5lbWl0RmFz
dFBhdGgoKnRoaXMsIHJlZ1QwLCByZWdUMiwgQ2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6Olllcyk7
CisgICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGhzKTsKKyAgICBtX2NhbGxDb21waWxhdGlvbkluZm9b
Y2FsbExpbmtJbmZvSW5kZXhdLmRvbmVMb2NhdGlvbiA9IGxhYmVsKCk7CiAKICAgICBhZGRQdHIo
VHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2Yo
UmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAg
ICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwpAQCAtMzQzLDE2ICszNDEsMTUgQEAgdm9p
ZCBKSVQ6OmNvbXBpbGVPcENhbGxTbG93Q2FzZShjb25zdCBJbgogICAgIH0KIAogICAgIGxpbmtB
bGxTbG93Q2FzZXMoaXRlcik7Ci0KLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgcmVnVDMpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NhbGxD
b21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmNhbGxMaW5rSW5mbyksIHJlZ1QyKTsK
KyAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLnNsb3dQYXRoU3Rh
cnQgPSBsYWJlbCgpOwogCiAgICAgaWYgKG9wY29kZUlEID09IG9wX3RhaWxfY2FsbCB8fCBvcGNv
ZGVJRCA9PSBvcF90YWlsX2NhbGxfdmFyYXJncyB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxf
Zm9yd2FyZF9hcmd1bWVudHMpCiAgICAgICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKIAot
ICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uY2FsbFJldHVybkxv
Y2F0aW9uID0gZW1pdE5ha2VkTmVhckNhbGwobV92bS0+Z2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5r
R2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOworICAgIG1vdmUoVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMyk7CisgICAgbV9jYWxsQ29t
cGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5jYWxsTGlua0luZm8tPmVtaXRTbG93UGF0
aCgqbV92bSwgKnRoaXMpOwogCi0gICAgaWYgKG9wY29kZUlEID09IG9wX3RhaWxfY2FsbCB8fCBv
cGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfdmFyYXJncykgeworICAgIGlmIChvcGNvZGVJRCA9PSBv
cF90YWlsX2NhbGwgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgfHwgb3Bjb2Rl
SUQgPT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKSB7CiAgICAgICAgIGFib3J0V2l0
aFJlYXNvbihKSVREaWRSZXR1cm5Gcm9tVGFpbENhbGwpOwogICAgICAgICByZXR1cm47CiAgICAg
fQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCShyZXZpc2lvbiAyNzc2
MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xODgsOCArMTg4LDE0IEBAIGJvb2wgSklUOjpjb21waWxlVGFpbENhbGwoY29uc3Qg
T3BUYWlsQ2EKICAgICAgICAgVmFsdWVSZWNvdmVyeTo6aW5HUFIocmVnVDAsIERhdGFGb3JtYXRK
Uyk7CiAgICAgc2h1ZmZsZURhdGEuc2V0dXBDYWxsZWVTYXZlUmVnaXN0ZXJzKG1fY29kZUJsb2Nr
KTsKICAgICBpbmZvLT5zZXRGcmFtZVNodWZmbGVEYXRhKHNodWZmbGVEYXRhKTsKLSAgICBDYWxs
RnJhbWVTaHVmZmxlcigqdGhpcywgc2h1ZmZsZURhdGEpLnByZXBhcmVGb3JUYWlsQ2FsbCgpOwot
ICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uaG90UGF0aE90aGVy
ID0gZW1pdE5ha2VkTmVhclRhaWxDYWxsKCk7CisKKyAgICBKdW1wTGlzdCBzbG93UGF0aHMgPSBp
bmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aCgqdGhpcywgcmVnVDAsIHJlZ1QyLCBDYWxsTGlua0lu
Zm86OlVzZURhdGFJQzo6WWVzLCBbJl0geworICAgICAgICBDYWxsRnJhbWVTaHVmZmxlcigqdGhp
cywgc2h1ZmZsZURhdGEpLnByZXBhcmVGb3JUYWlsQ2FsbCgpOworICAgIH0pOworICAgIGFkZFNs
b3dDYXNlKHNsb3dQYXRocyk7CisgICAgYXV0byBkb25lTG9jYXRpb24gPSBsYWJlbCgpOworICAg
IG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uZG9uZUxvY2F0aW9uID0g
ZG9uZUxvY2F0aW9uOworICAgIAogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0yMjgsMjggKzIz
NCwzMCBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChjb25zdCBJbnN0cnVjdGlvCiAgICAgaWYg
KGNvbXBpbGVDYWxsRXZhbChieXRlY29kZSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIERhdGFM
YWJlbFB0ciBhZGRyZXNzT2ZMaW5rZWRGdW5jdGlvbkNoZWNrOwotICAgIEp1bXAgc2xvd0Nhc2Ug
PSBicmFuY2hQdHJXaXRoUGF0Y2goTm90RXF1YWwsIHJlZ1QwLCBhZGRyZXNzT2ZMaW5rZWRGdW5j
dGlvbkNoZWNrLCBUcnVzdGVkSW1tUHRyKG51bGxwdHIpKTsKLSAgICBhZGRTbG93Q2FzZShzbG93
Q2FzZSk7Ci0KICAgICBBU1NFUlQobV9jYWxsQ29tcGlsYXRpb25JbmZvLnNpemUoKSA9PSBjYWxs
TGlua0luZm9JbmRleCk7CiAgICAgaW5mby0+c2V0VXBDYWxsKENhbGxMaW5rSW5mbzo6Y2FsbFR5
cGVGb3Iob3Bjb2RlSUQpLCByZWdUMCk7CiAgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvLmFwcGVu
ZChDYWxsQ29tcGlsYXRpb25JbmZvKCkpOwotICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxs
TGlua0luZm9JbmRleF0uaG90UGF0aEJlZ2luID0gYWRkcmVzc09mTGlua2VkRnVuY3Rpb25DaGVj
azsKICAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmNhbGxMaW5r
SW5mbyA9IGluZm87CiAKLSAgICBpZiAoY29tcGlsZVRhaWxDYWxsKGJ5dGVjb2RlLCBpbmZvLCBj
YWxsTGlua0luZm9JbmRleCkpIHsKKyAgICBpZiAoY29tcGlsZVRhaWxDYWxsKGJ5dGVjb2RlLCBp
bmZvLCBjYWxsTGlua0luZm9JbmRleCkpCiAgICAgICAgIHJldHVybjsKLSAgICB9CiAKICAgICBp
ZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgfHwgb3Bjb2RlSUQgPT0gb3BfdGFp
bF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKSB7Ci0gICAgICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2
ZXMoKTsKLSAgICAgICAgcHJlcGFyZUZvclRhaWxDYWxsU2xvdygpOwotICAgICAgICBtX2NhbGxD
b21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmhvdFBhdGhPdGhlciA9IGVtaXROYWtl
ZE5lYXJUYWlsQ2FsbCgpOworICAgICAgICBhdXRvIHNsb3dQYXRocyA9IGluZm8tPmVtaXRUYWls
Q2FsbEZhc3RQYXRoKCp0aGlzLCByZWdUMCwgcmVnVDIsIENhbGxMaW5rSW5mbzo6VXNlRGF0YUlD
OjpZZXMsIFsmXSB7CisgICAgICAgICAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CisgICAg
ICAgICAgICBwcmVwYXJlRm9yVGFpbENhbGxTbG93KHJlZ1QyKTsKKyAgICAgICAgfSk7CisgICAg
ICAgIGFkZFNsb3dDYXNlKHNsb3dQYXRocyk7CisgICAgICAgIGF1dG8gZG9uZUxvY2F0aW9uID0g
bGFiZWwoKTsKKyAgICAgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4
XS5kb25lTG9jYXRpb24gPSBkb25lTG9jYXRpb247CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
LSAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmhvdFBhdGhPdGhl
ciA9IGVtaXROYWtlZE5lYXJDYWxsKCk7CisgICAgYXV0byBzbG93UGF0aHMgPSBpbmZvLT5lbWl0
RmFzdFBhdGgoKnRoaXMsIHJlZ1QwLCByZWdUMiwgQ2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6Olll
cyk7CisgICAgYXV0byBkb25lTG9jYXRpb24gPSBsYWJlbCgpOworICAgIGFkZFNsb3dDYXNlKHNs
b3dQYXRocyk7CisKKyAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhd
LmRvbmVMb2NhdGlvbiA9IGRvbmVMb2NhdGlvbjsKIAogICAgIGFkZFB0cihUcnVzdGVkSW1tMzIo
c3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBj
YWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAgIGNoZWNrU3RhY2tQ
b2ludGVyQWxpZ25tZW50KCk7CkBAIC0yNjUsMTYgKzI3MywxNSBAQCB2b2lkIEpJVDo6Y29tcGls
ZU9wQ2FsbFNsb3dDYXNlKGNvbnN0IEluCiAKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwog
CisgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5zbG93UGF0aFN0
YXJ0ID0gbGFiZWwoKTsKKwogICAgIGlmIChvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGwgfHwgb3Bj
b2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxs
X2ZvcndhcmRfYXJndW1lbnRzKQogICAgICAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CiAK
ICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVn
VDMpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExp
bmtJbmZvSW5kZXhdLmNhbGxMaW5rSW5mbyksIHJlZ1QyKTsKLQotICAgIG1fY2FsbENvbXBpbGF0
aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uY2FsbFJldHVybkxvY2F0aW9uID0KLSAgICAgICAg
ZW1pdE5ha2VkTmVhckNhbGwobV92bS0+Z2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9y
KS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOworICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tj
YWxsTGlua0luZm9JbmRleF0uY2FsbExpbmtJbmZvLT5lbWl0U2xvd1BhdGgoKm1fdm0sICp0aGlz
KTsKIAotICAgIGlmIChvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGwgfHwgb3Bjb2RlSUQgPT0gb3Bf
dGFpbF9jYWxsX3ZhcmFyZ3MpIHsKKyAgICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsIHx8
IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IG9wY29kZUlEID09IG9wX3RhaWxf
Y2FsbF9mb3J3YXJkX2FyZ3VtZW50cykgewogICAgICAgICBhYm9ydFdpdGhSZWFzb24oSklURGlk
UmV0dXJuRnJvbVRhaWxDYWxsKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMjc3NjAy
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTM4Niw3ICsxMzg2LDcgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9w
ZXJhdGlvbkxpbmtDYQogICAgICAgICAgICAgaWYgKCFjYWxsTGlua0luZm8tPnNlZW5PbmNlKCkp
CiAgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRTZWVuKCk7CiAgICAgICAgICAgICBl
bHNlCi0gICAgICAgICAgICAgICAgbGlua0Zvcih2bSwgY2FsbGVlRnJhbWUsICpjYWxsTGlua0lu
Zm8sIG51bGxwdHIsIGludGVybmFsRnVuY3Rpb24sIGNvZGVQdHIpOworICAgICAgICAgICAgICAg
IGxpbmtNb25vbW9ycGhpY0NhbGwodm0sIGNhbGxlZUZyYW1lLCAqY2FsbExpbmtJbmZvLCBudWxs
cHRyLCBpbnRlcm5hbEZ1bmN0aW9uLCBjb2RlUHRyKTsKIAogICAgICAgICAgICAgdm9pZCogbGlu
a2VkVGFyZ2V0ID0gY29kZVB0ci5leGVjdXRhYmxlQWRkcmVzcygpOwogICAgICAgICAgICAgcmV0
dXJuIGVuY29kZVJlc3VsdChsaW5rZWRUYXJnZXQsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGNh
bGxMaW5rSW5mby0+Y2FsbE1vZGUoKSA9PSBDYWxsTW9kZTo6VGFpbCA/IFJldXNlVGhlRnJhbWUg
OiBLZWVwVGhlRnJhbWUpKTsKQEAgLTE0MzQsNyArMTQzNCw3IEBAIEpTQ19ERUZJTkVfSklUX09Q
RVJBVElPTihvcGVyYXRpb25MaW5rQ2EKICAgICBpZiAoIWNhbGxMaW5rSW5mby0+c2Vlbk9uY2Uo
KSkKICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRTZWVuKCk7CiAgICAgZWxzZQotICAgICAgICBs
aW5rRm9yKHZtLCBjYWxsZWVGcmFtZSwgKmNhbGxMaW5rSW5mbywgY29kZUJsb2NrLCBjYWxsZWUs
IGNvZGVQdHIpOworICAgICAgICBsaW5rTW9ub21vcnBoaWNDYWxsKHZtLCBjYWxsZWVGcmFtZSwg
KmNhbGxMaW5rSW5mbywgY29kZUJsb2NrLCBjYWxsZWUsIGNvZGVQdHIpOwogCiAgICAgcmV0dXJu
IGVuY29kZVJlc3VsdChjb2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNzKCksIHJlaW50ZXJwcmV0X2Nh
c3Q8dm9pZCo+KGNhbGxMaW5rSW5mby0+Y2FsbE1vZGUoKSA9PSBDYWxsTW9kZTo6VGFpbCA/IFJl
dXNlVGhlRnJhbWUgOiBLZWVwVGhlRnJhbWUpKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUuY3BwCShy
ZXZpc2lvbiAyNzc2MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1BvbHltb3JwaGlj
Q2FsbFN0dWJSb3V0aW5lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUsNyArNDUsNyBAQCBQb2x5
bW9ycGhpY0NhbGxOb2RlOjp+UG9seW1vcnBoaWNDYWxsTm9kCiB2b2lkIFBvbHltb3JwaGljQ2Fs
bE5vZGU6OnVubGluayhWTSYgdm0pCiB7CiAgICAgaWYgKG1fY2FsbExpbmtJbmZvKSB7Ci0gICAg
ICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OmR1bXBEaXNhc3NlbWJseSgpLCAiVW5saW5raW5nIHBv
bHltb3JwaGljIGNhbGwgYXQgIiwgbV9jYWxsTGlua0luZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbigp
LCAiLCBiYyMiLCBtX2NhbGxMaW5rSW5mby0+Y29kZU9yaWdpbigpLmJ5dGVjb2RlSW5kZXgoKSk7
CisgICAgICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OmR1bXBEaXNhc3NlbWJseSgpLCAiVW5saW5r
aW5nIHBvbHltb3JwaGljIGNhbGwgYXQgIiwgbV9jYWxsTGlua0luZm8tPmRvbmVMb2NhdGlvbigp
LCAiLCBiYyMiLCBtX2NhbGxMaW5rSW5mby0+Y29kZU9yaWdpbigpLmJ5dGVjb2RlSW5kZXgoKSk7
CiAgICAgICAgIG1fY2FsbExpbmtJbmZvLT51bmxpbmsodm0pOwogICAgIH0KIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCShyZXZpc2lvbiAyNzc2MDIpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTg4
LDIwICsxMTg4LDIwIEBAIHZvaWQgcmVwYXRjaEluc3RhbmNlT2YoCiAgICAgICAgIGZ0bFRodW5r
QXdhcmVSZXBhdGNoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLnNsb3dQYXRoQ2FsbExvY2F0aW9u
LCBvcGVyYXRpb25JbnN0YW5jZU9mR2VuZXJpYyk7CiB9CiAKLXN0YXRpYyB2b2lkIGxpbmtTbG93
Rm9yKFZNJiwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8sIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxKSVRTdHViUm91dGluZVB0clRhZz4gY29kZVJlZikKK3N0YXRpYyB2b2lkIGxpbmtTbG93UGF0
aFRvKFZNJiwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8sIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxKSVRTdHViUm91dGluZVB0clRhZz4gY29kZVJlZikKIHsKLSAgICBNYWNyb0Fzc2VtYmxlcjo6
cmVwYXRjaE5lYXJDYWxsKGNhbGxMaW5rSW5mby5jYWxsUmV0dXJuTG9jYXRpb24oKSwgQ29kZUxv
Y2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+KGNvZGVSZWYuY29kZSgpKSk7CisgICAg
Y2FsbExpbmtJbmZvLnNldFNsb3dQYXRoQ2FsbERlc3RpbmF0aW9uKGNvZGVSZWYuY29kZSgpLnRl
bXBsYXRlIHJldGFnZ2VkPEpTRW50cnlQdHJUYWc+KCkpOwogfQogCi1zdGF0aWMgdm9pZCBsaW5r
U2xvd0ZvcihWTSYgdm0sIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvLCBUaHVua0dlbmVyYXRv
ciBnZW5lcmF0b3IpCitzdGF0aWMgdm9pZCBsaW5rU2xvd1BhdGhUbyhWTSYgdm0sIENhbGxMaW5r
SW5mbyYgY2FsbExpbmtJbmZvLCBUaHVua0dlbmVyYXRvciBnZW5lcmF0b3IpCiB7Ci0gICAgbGlu
a1Nsb3dGb3Iodm0sIGNhbGxMaW5rSW5mbywgdm0uZ2V0Q1RJU3R1YihnZW5lcmF0b3IpLnJldGFn
Z2VkPEpJVFN0dWJSb3V0aW5lUHRyVGFnPigpKTsKKyAgICBsaW5rU2xvd1BhdGhUbyh2bSwgY2Fs
bExpbmtJbmZvLCB2bS5nZXRDVElTdHViKGdlbmVyYXRvcikucmV0YWdnZWQ8SklUU3R1YlJvdXRp
bmVQdHJUYWc+KCkpOwogfQogCiBzdGF0aWMgdm9pZCBsaW5rU2xvd0ZvcihWTSYgdm0sIENhbGxM
aW5rSW5mbyYgY2FsbExpbmtJbmZvKQogewogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRT
dHViUm91dGluZVB0clRhZz4gdmlydHVhbFRodW5rID0gdmlydHVhbFRodW5rRm9yKHZtLCBjYWxs
TGlua0luZm8pOwotICAgIGxpbmtTbG93Rm9yKHZtLCBjYWxsTGlua0luZm8sIHZpcnR1YWxUaHVu
ayk7CisgICAgbGlua1Nsb3dQYXRoVG8odm0sIGNhbGxMaW5rSW5mbywgdmlydHVhbFRodW5rKTsK
ICAgICBjYWxsTGlua0luZm8uc2V0U2xvd1N0dWIoR0NBd2FyZUpJVFN0dWJSb3V0aW5lOjpjcmVh
dGUodmlydHVhbFRodW5rLCB2bSkpOwogfQogCkBAIC0xMjE3LDcgKzEyMTcsNyBAQCBzdGF0aWMg
SlNDZWxsKiB3ZWJBc3NlbWJseU93bmVyKEpTQ2VsbCogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkFT
U0VNQkxZKQogfQogCi12b2lkIGxpbmtGb3IoCit2b2lkIGxpbmtNb25vbW9ycGhpY0NhbGwoCiAg
ICAgVk0mIHZtLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0lu
Zm8sIENvZGVCbG9jayogY2FsbGVlQ29kZUJsb2NrLAogICAgIEpTT2JqZWN0KiBjYWxsZWUsIE1h
Y3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBjb2RlUHRyKQogewpAQCAtMTIzNSwy
NiArMTIzNSwyNCBAQCB2b2lkIGxpbmtGb3IoCiAgICAgQVNTRVJUKG93bmVyKTsKIAogICAgIEFT
U0VSVCghY2FsbExpbmtJbmZvLmlzTGlua2VkKCkpOwotICAgIGNhbGxMaW5rSW5mby5zZXRDYWxs
ZWUodm0sIG93bmVyLCBjYWxsZWUpOwotICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoUG9pbnRl
cihjYWxsTGlua0luZm8uaG90UGF0aEJlZ2luKCksIGNhbGxlZSk7CisgICAgY2FsbExpbmtJbmZv
LnNldE1vbm9tb3JwaGljQ2FsbGVlKHZtLCBvd25lciwgY2FsbGVlLCBjb2RlUHRyKTsKICAgICBj
YWxsTGlua0luZm8uc2V0TGFzdFNlZW5DYWxsZWUodm0sIG93bmVyLCBjYWxsZWUpOworCiAgICAg
aWYgKHNob3VsZER1bXBEaXNhc3NlbWJseUZvcihjYWxsZXJDb2RlQmxvY2spKQogICAgICAgICBk
YXRhTG9nKCJMaW5raW5nIGNhbGwgaW4gIiwgRnVsbENvZGVPcmlnaW4oY2FsbGVyQ29kZUJsb2Nr
LCBjYWxsTGlua0luZm8uY29kZU9yaWdpbigpKSwgIiB0byAiLCBwb2ludGVyRHVtcChjYWxsZWVD
b2RlQmxvY2spLCAiLCBlbnRyeXBvaW50IGF0ICIsIGNvZGVQdHIsICJcbiIpOwogCi0gICAgTWFj
cm9Bc3NlbWJsZXI6OnJlcGF0Y2hOZWFyQ2FsbChjYWxsTGlua0luZm8uaG90UGF0aE90aGVyKCks
IENvZGVMb2NhdGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+KGNvZGVQdHIpKTsKLQogICAgIGlmIChj
YWxsZWVDb2RlQmxvY2spCiAgICAgICAgIGNhbGxlZUNvZGVCbG9jay0+bGlua0luY29taW5nQ2Fs
bChjYWxsZXJGcmFtZSwgJmNhbGxMaW5rSW5mbyk7CiAKICAgICBpZiAoY2FsbExpbmtJbmZvLnNw
ZWNpYWxpemF0aW9uS2luZCgpID09IENvZGVGb3JDYWxsICYmIGNhbGxMaW5rSW5mby5hbGxvd1N0
dWJzKCkpIHsKLSAgICAgICAgbGlua1Nsb3dGb3Iodm0sIGNhbGxMaW5rSW5mbywgbGlua1BvbHlt
b3JwaGljQ2FsbFRodW5rR2VuZXJhdG9yKTsKKyAgICAgICAgbGlua1Nsb3dQYXRoVG8odm0sIGNh
bGxMaW5rSW5mbywgbGlua1BvbHltb3JwaGljQ2FsbFRodW5rR2VuZXJhdG9yKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KICAgICAKICAgICBsaW5rU2xvd0Zvcih2bSwgY2FsbExpbmtJbmZvKTsK
IH0KIAotdm9pZCBsaW5rRGlyZWN0Rm9yKAordm9pZCBsaW5rRGlyZWN0Q2FsbCgKICAgICBDYWxs
RnJhbWUqIGNhbGxGcmFtZSwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8sIENvZGVCbG9jayog
Y2FsbGVlQ29kZUJsb2NrLAogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFn
PiBjb2RlUHRyKQogewpAQCAtMTI2OSw5ICsxMjY3LDcgQEAgdm9pZCBsaW5rRGlyZWN0Rm9yKAog
ICAgIGlmIChzaG91bGREdW1wRGlzYXNzZW1ibHlGb3IoY2FsbGVyQ29kZUJsb2NrKSkKICAgICAg
ICAgZGF0YUxvZygiTGlua2luZyBjYWxsIGluICIsIEZ1bGxDb2RlT3JpZ2luKGNhbGxlckNvZGVC
bG9jaywgY2FsbExpbmtJbmZvLmNvZGVPcmlnaW4oKSksICIgdG8gIiwgcG9pbnRlckR1bXAoY2Fs
bGVlQ29kZUJsb2NrKSwgIiwgZW50cnlwb2ludCBhdCAiLCBjb2RlUHRyLCAiXG4iKTsKIAotICAg
IGlmIChjYWxsTGlua0luZm8uY2FsbFR5cGUoKSA9PSBDYWxsTGlua0luZm86OkRpcmVjdFRhaWxD
YWxsKQotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEp1bXBUb05vcChjYWxsTGlua0lu
Zm8ucGF0Y2hhYmxlSnVtcCgpKTsKLSAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaE5lYXJDYWxs
KGNhbGxMaW5rSW5mby5ob3RQYXRoT3RoZXIoKSwgQ29kZUxvY2F0aW9uTGFiZWw8SlNFbnRyeVB0
clRhZz4oY29kZVB0cikpOworICAgIGNhbGxMaW5rSW5mby5zZXREaXJlY3RDYWxsVGFyZ2V0KENv
ZGVMb2NhdGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+KGNvZGVQdHIpKTsKIAogICAgIGlmIChjYWxs
ZWVDb2RlQmxvY2spCiAgICAgICAgIGNhbGxlZUNvZGVCbG9jay0+bGlua0luY29taW5nQ2FsbChj
YWxsRnJhbWUsICZjYWxsTGlua0luZm8pOwpAQCAtMTI4OSwyMSArMTI4NSwxNiBAQCBzdGF0aWMg
dm9pZCByZXZlcnRDYWxsKFZNJiB2bSwgQ2FsbExpbmtJCiB7CiAgICAgaWYgKGNhbGxMaW5rSW5m
by5pc0RpcmVjdCgpKSB7CiAgICAgICAgIGNhbGxMaW5rSW5mby5jbGVhckNvZGVCbG9jaygpOwot
ICAgICAgICBpZiAoIWNhbGxMaW5rSW5mby5jbGVhcmVkQnlKZXR0aXNvbigpKSB7Ci0gICAgICAg
ICAgICBpZiAoY2FsbExpbmtJbmZvLmNhbGxUeXBlKCkgPT0gQ2FsbExpbmtJbmZvOjpEaXJlY3RU
YWlsQ2FsbCkKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEp1bXAoY2Fs
bExpbmtJbmZvLnBhdGNoYWJsZUp1bXAoKSwgY2FsbExpbmtJbmZvLnNsb3dQYXRoU3RhcnQoKSk7
Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0
Y2hOZWFyQ2FsbChjYWxsTGlua0luZm8uaG90UGF0aE90aGVyKCksIGNhbGxMaW5rSW5mby5zbG93
UGF0aFN0YXJ0KCkpOwotICAgICAgICB9CisgICAgICAgIGlmICghY2FsbExpbmtJbmZvLmNsZWFy
ZWRCeUpldHRpc29uKCkpCisgICAgICAgICAgICBjYWxsTGlua0luZm8uaW5pdGlhbGl6ZURpcmVj
dENhbGwoKTsKICAgICB9IGVsc2UgewogICAgICAgICBpZiAoIWNhbGxMaW5rSW5mby5jbGVhcmVk
QnlKZXR0aXNvbigpKSB7Ci0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmV2ZXJ0SnVtcFJl
cGxhY2VtZW50VG9CcmFuY2hQdHJXaXRoUGF0Y2goCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OnN0YXJ0T2ZCcmFuY2hQdHJXaXRoUGF0Y2hPblJlZ2lzdGVyKGNhbGxMaW5rSW5mby5o
b3RQYXRoQmVnaW4oKSksCi0gICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLmNhbGxlZUdQUigp
LCBudWxscHRyKTsKLSAgICAgICAgICAgIGxpbmtTbG93Rm9yKHZtLCBjYWxsTGlua0luZm8sIGNv
ZGVSZWYpOwotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hQb2ludGVyKGNhbGxM
aW5rSW5mby5ob3RQYXRoQmVnaW4oKSwgbnVsbHB0cik7CisgICAgICAgICAgICBsaW5rU2xvd1Bh
dGhUbyh2bSwgY2FsbExpbmtJbmZvLCBjb2RlUmVmKTsKKworICAgICAgICAgICAgaWYgKGNhbGxM
aW5rSW5mby5zdHViKCkpCisgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLnJldmVydENhbGxU
b1N0dWIoKTsKICAgICAgICAgfQotICAgICAgICBjYWxsTGlua0luZm8uY2xlYXJDYWxsZWUoKTsK
KyAgICAgICAgY2FsbExpbmtJbmZvLmNsZWFyQ2FsbGVlKCk7IC8vIFRoaXMgYWxzbyBjbGVhcnMg
dGhlIGlubGluZSBjYWNoZSBib3RoIGZvciBkYXRhIGFuZCBjb2RlLWJhc2VkIGNhY2hlcy4KICAg
ICB9CiAgICAgY2FsbExpbmtJbmZvLmNsZWFyU2VlbigpOwogICAgIGNhbGxMaW5rSW5mby5jbGVh
clN0dWIoKTsKQEAgLTEzMTIsOSArMTMwMyw5IEBAIHN0YXRpYyB2b2lkIHJldmVydENhbGwoVk0m
IHZtLCBDYWxsTGlua0kKICAgICAgICAgY2FsbExpbmtJbmZvLnJlbW92ZSgpOwogfQogCi12b2lk
IHVubGlua0ZvcihWTSYgdm0sIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvKQordm9pZCB1bmxp
bmtDYWxsKFZNJiB2bSwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8pCiB7Ci0gICAgZGF0YUxv
Z0xuSWYoT3B0aW9uczo6ZHVtcERpc2Fzc2VtYmx5KCksICJVbmxpbmtpbmcgY2FsbCBhdCAiLCBj
YWxsTGlua0luZm8uaG90UGF0aE90aGVyKCkpOworICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OmR1
bXBEaXNhc3NlbWJseSgpLCAiVW5saW5raW5nIGNhbGwgYXQgIiwgY2FsbExpbmtJbmZvLmZhc3RQ
YXRoU3RhcnQoKSk7CiAgICAgCiAgICAgcmV2ZXJ0Q2FsbCh2bSwgY2FsbExpbmtJbmZvLCB2bS5n
ZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpLnJldGFnZ2VkPEpJVFN0dWJSb3V0aW5l
UHRyVGFnPigpKTsKIH0KQEAgLTE1ODAsNyArMTU3MSw3IEBAIHZvaWQgbGlua1BvbHltb3JwaGlj
Q2FsbChKU0dsb2JhbE9iamVjdCoKICAgICB9CiAgICAgc3R1YkppdC5tb3ZlKENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbVB0cihnbG9iYWxPYmplY3QpLCBHUFJJbmZvOjpyZWdUMyk7CiAgICAgc3R1
YkppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cigmY2FsbExpbmtJbmZvKSwgR1BS
SW5mbzo6cmVnVDIpOwotICAgIHN0dWJKaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1Q
dHIoY2FsbExpbmtJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbigpLnVudGFnZ2VkRXhlY3V0YWJsZUFk
ZHJlc3MoKSksIEdQUkluZm86OnJlZ1Q0KTsKKyAgICBzdHViSml0Lm1vdmUoQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tUHRyKGNhbGxMaW5rSW5mby5kb25lTG9jYXRpb24oKS51bnRhZ2dlZEV4ZWN1
dGFibGVBZGRyZXNzKCkpLCBHUFJJbmZvOjpyZWdUNCk7CiAgICAgCiAgICAgc3R1YkppdC5yZXN0
b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJldHVybihHUFJJbmZvOjpyZWdUNCk7CiAgICAgQXNzZW1i
bHlIZWxwZXJzOjpKdW1wIHNsb3cgPSBzdHViSml0Lmp1bXAoKTsKQEAgLTE2MDMsMjkgKzE1OTQs
MjMgQEAgdm9pZCBsaW5rUG9seW1vcnBoaWNDYWxsKEpTR2xvYmFsT2JqZWN0KgogICAgICAgICBw
YXRjaEJ1ZmZlci5saW5rKGNhbGxUb0NvZGVQdHIuY2FsbCwgRnVuY3Rpb25QdHI8SlNFbnRyeVB0
clRhZz4oY2FsbFRvQ29kZVB0ci5jb2RlUHRyKSk7CiAjZW5kaWYKICAgICB9Ci0gICAgaWYgKGlz
V2ViQXNzZW1ibHkgfHwgSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGNhbGxlckNvZGVCbG9jay0+
aml0VHlwZSgpKSkKLSAgICAgICAgcGF0Y2hCdWZmZXIubGluayhkb25lLCBjYWxsTGlua0luZm8u
Y2FsbFJldHVybkxvY2F0aW9uKCkubGFiZWxBdE9mZnNldCgwKSk7Ci0gICAgZWxzZQotICAgICAg
ICBwYXRjaEJ1ZmZlci5saW5rKGRvbmUsIGNhbGxMaW5rSW5mby5ob3RQYXRoT3RoZXIoKS5sYWJl
bEF0T2Zmc2V0KDApKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKGRvbmUsIGNhbGxMaW5rSW5mby5k
b25lTG9jYXRpb24oKSk7CiAgICAgcGF0Y2hCdWZmZXIubGluayhzbG93LCBDb2RlTG9jYXRpb25M
YWJlbDxKSVRUaHVua1B0clRhZz4odm0uZ2V0Q1RJU3R1YihsaW5rUG9seW1vcnBoaWNDYWxsVGh1
bmtHZW5lcmF0b3IpLmNvZGUoKSkpOwogICAgIAogICAgIGF1dG8gc3R1YlJvdXRpbmUgPSBhZG9w
dFJlZigqbmV3IFBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lKAogICAgICAgICBGSU5BTElaRV9D
T0RFX0ZPUigKICAgICAgICAgICAgIGNhbGxlckNvZGVCbG9jaywgcGF0Y2hCdWZmZXIsIEpJVFN0
dWJSb3V0aW5lUHRyVGFnLAogICAgICAgICAgICAgIlBvbHltb3JwaGljIGNhbGwgc3R1YiBmb3Ig
JXMsIHJldHVybiBwb2ludCAlcCwgdGFyZ2V0cyAlcyIsCi0gICAgICAgICAgICAgICAgaXNXZWJB
c3NlbWJseSA/ICJXZWJBc3NlbWJseSIgOiB0b0NTdHJpbmcoKmNhbGxlckNvZGVCbG9jaykuZGF0
YSgpLCBjYWxsTGlua0luZm8uY2FsbFJldHVybkxvY2F0aW9uKCkubGFiZWxBdE9mZnNldCgwKS5l
eGVjdXRhYmxlQWRkcmVzcygpLAorICAgICAgICAgICAgICAgIGlzV2ViQXNzZW1ibHkgPyAiV2Vi
QXNzZW1ibHkiIDogdG9DU3RyaW5nKCpjYWxsZXJDb2RlQmxvY2spLmRhdGEoKSwgY2FsbExpbmtJ
bmZvLmRvbmVMb2NhdGlvbigpLmV4ZWN1dGFibGVBZGRyZXNzKCksCiAgICAgICAgICAgICAgICAg
dG9DU3RyaW5nKGxpc3REdW1wKGNhbGxDYXNlcykpLmRhdGEoKSksCiAgICAgICAgIHZtLCBvd25l
ciwgY2FsbEZyYW1lLT5jYWxsZXJGcmFtZSgpLCBjYWxsTGlua0luZm8sIGNhbGxDYXNlcywKICAg
ICAgICAgV1RGTW92ZShmYXN0Q291bnRzKSkpOwotICAgIAotICAgIE1hY3JvQXNzZW1ibGVyOjpy
ZXBsYWNlV2l0aEp1bXAoCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpzdGFydE9mQnJhbmNoUHRy
V2l0aFBhdGNoT25SZWdpc3RlcihjYWxsTGlua0luZm8uaG90UGF0aEJlZ2luKCkpLAotICAgICAg
ICBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4oc3R1YlJvdXRpbmUtPmNv
ZGUoKS5jb2RlKCkpKTsKKwogICAgIC8vIFRoZSBvcmlnaW5hbCBzbG93IHBhdGggaXMgdW5yZWFj
aGFibGUgb24gNjQtYml0cywgYnV0IHN0aWxsCiAgICAgLy8gcmVhY2hhYmxlIG9uIDMyLWJpdHMg
c2luY2UgYSBub24tY2VsbCBjYWxsZWUgd2lsbCBhbHdheXMKICAgICAvLyB0cmlnZ2VyIHRoZSBz
bG93IHBhdGgKICAgICBsaW5rU2xvd0Zvcih2bSwgY2FsbExpbmtJbmZvKTsKLSAgICAKKwogICAg
IC8vIElmIHRoZXJlIGhhZCBiZWVuIGEgcHJldmlvdXMgc3R1YiByb3V0aW5lLCB0aGF0IG9uZSB3
aWxsIGRpZSBhcyBzb29uIGFzIHRoZSBHQyBydW5zIGFuZCBzZWVzCiAgICAgLy8gdGhhdCBpdCdz
IG5vIGxvbmdlciBvbiBzdGFjay4KICAgICBjYWxsTGlua0luZm8uc2V0U3R1YihXVEZNb3ZlKHN0
dWJSb3V0aW5lKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guaAkocmV2aXNp
b24gMjc3NjAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmgJKHdvcmtp
bmcgY29weSkKQEAgLTU2LDEwICs1NiwxMCBAQCB2b2lkIHJlcGF0Y2hJbkJ5SUQoSlNHbG9iYWxP
YmplY3QqLCBDb2RlCiB2b2lkIHJlcGF0Y2hDaGVja1ByaXZhdGVCcmFuZChKU0dsb2JhbE9iamVj
dCosIENvZGVCbG9jayosIEpTT2JqZWN0KiwgQ2FjaGVhYmxlSWRlbnRpZmllciwgU3RydWN0dXJl
U3R1YkluZm8mKTsKIHZvaWQgcmVwYXRjaFNldFByaXZhdGVCcmFuZChKU0dsb2JhbE9iamVjdCos
IENvZGVCbG9jayosIEpTT2JqZWN0KiwgU3RydWN0dXJlKiwgQ2FjaGVhYmxlSWRlbnRpZmllciwg
U3RydWN0dXJlU3R1YkluZm8mKTsKIHZvaWQgcmVwYXRjaEluc3RhbmNlT2YoSlNHbG9iYWxPYmpl
Y3QqLCBDb2RlQmxvY2sqLCBKU1ZhbHVlIHZhbHVlLCBKU1ZhbHVlIHByb3RvdHlwZSwgU3RydWN0
dXJlU3R1YkluZm8mLCBib29sIHdhc0ZvdW5kKTsKLXZvaWQgbGlua0ZvcihWTSYsIENhbGxGcmFt
ZSosIENhbGxMaW5rSW5mbyYsIENvZGVCbG9jayosIEpTT2JqZWN0KiBjYWxsZWUsIE1hY3JvQXNz
ZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPik7Ci12b2lkIGxpbmtEaXJlY3RGb3IoQ2FsbEZy
YW1lKiwgQ2FsbExpbmtJbmZvJiwgQ29kZUJsb2NrKiwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpT
RW50cnlQdHJUYWc+KTsKK3ZvaWQgbGlua01vbm9tb3JwaGljQ2FsbChWTSYsIENhbGxGcmFtZSos
IENhbGxMaW5rSW5mbyYsIENvZGVCbG9jayosIEpTT2JqZWN0KiBjYWxsZWUsIE1hY3JvQXNzZW1i
bGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPik7Cit2b2lkIGxpbmtEaXJlY3RDYWxsKENhbGxGcmFt
ZSosIENhbGxMaW5rSW5mbyYsIENvZGVCbG9jayosIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0Vu
dHJ5UHRyVGFnPik7CiB2b2lkIGxpbmtTbG93Rm9yKENhbGxGcmFtZSosIENhbGxMaW5rSW5mbyYp
Owotdm9pZCB1bmxpbmtGb3IoVk0mLCBDYWxsTGlua0luZm8mKTsKK3ZvaWQgdW5saW5rQ2FsbChW
TSYsIENhbGxMaW5rSW5mbyYpOwogdm9pZCBsaW5rUG9seW1vcnBoaWNDYWxsKEpTR2xvYmFsT2Jq
ZWN0KiwgQ2FsbEZyYW1lKiwgQ2FsbExpbmtJbmZvJiwgQ2FsbFZhcmlhbnQpOwogdm9pZCByZXNl
dEdldEJ5KENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJiwgR2V0QnlLaW5kKTsKIHZvaWQg
cmVzZXRQdXRCeUlEKENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJik7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XYXNtVG9KUy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2FzbVRvSlMuY3BwCShyZXZpc2lvbiAyNzc2MDIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XYXNtVG9KUy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI2MSwxOSArMjYxLDE4IEBAIEV4cGVjdGVkPE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxXYXNtRW50cnkKIAogICAgIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvID0gY2FsbExpbmtJ
bmZvcy5hZGQoQ29kZU9yaWdpbigpKTsKICAgICBjYWxsTGlua0luZm8tPnNldFVwQ2FsbChDYWxs
TGlua0luZm86OkNhbGwsIGltcG9ydEpTQ2VsbEdQUlJlZyk7Ci0gICAgSklUOjpEYXRhTGFiZWxQ
dHIgdGFyZ2V0VG9DaGVjazsKLSAgICBKSVQ6OlRydXN0ZWRJbW1QdHIgaW5pdGlhbFJpZ2h0VmFs
dWUobnVsbHB0cik7Ci0gICAgSklUOjpKdW1wIHNsb3dQYXRoID0gaml0LmJyYW5jaFB0cldpdGhQ
YXRjaChNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIGltcG9ydEpTQ2VsbEdQUlJlZywgdGFyZ2V0
VG9DaGVjaywgaW5pdGlhbFJpZ2h0VmFsdWUpOwotICAgIEpJVDo6Q2FsbCBmYXN0Q2FsbCA9IGpp
dC5uZWFyQ2FsbCgpOworICAgIGF1dG8gc2xvd1BhdGggPSBjYWxsTGlua0luZm8tPmVtaXRGYXN0
UGF0aChqaXQsIGltcG9ydEpTQ2VsbEdQUlJlZywgSW52YWxpZEdQUlJlZywgQ2FsbExpbmtJbmZv
OjpVc2VEYXRhSUM6Ok5vKTsKKwogICAgIEpJVDo6SnVtcCBkb25lID0gaml0Lmp1bXAoKTsKICAg
ICBzbG93UGF0aC5saW5rKCZqaXQpOworICAgIGF1dG8gc2xvd1BhdGhTdGFydCA9IGppdC5sYWJl
bCgpOwogICAgIC8vIENhbGxlZSBuZWVkcyB0byBiZSBpbiByZWdUMCBoZXJlLgotICAgIGppdC5t
b3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKGNhbGxMaW5rSW5mbyksIEdQUkluZm86
OnJlZ1QyKTsgLy8gTGluayBpbmZvIG5lZWRzIHRvIGJlIGluIHJlZ1QyLgogICAgIGppdC5sb2Fk
V2FzbUNvbnRleHRJbnN0YW5jZShHUFJJbmZvOjpyZWdUMyk7CiAgICAgaml0LmxvYWRQdHIoQ0Nh
bGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QzLCBJbnN0YW5jZTo6b2Zmc2V0T2ZPd25l
cigpKSwgR1BSSW5mbzo6cmVnVDMpOwogICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRk
cmVzcyhHUFJJbmZvOjpyZWdUMywgSlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZkdsb2Jh
bE9iamVjdCgpKSwgR1BSSW5mbzo6cmVnVDMpOwotICAgIEpJVDo6Q2FsbCBzbG93Q2FsbCA9IGpp
dC5uZWFyQ2FsbCgpOworICAgIGNhbGxMaW5rSW5mby0+ZW1pdFNsb3dQYXRoKHZtLCBqaXQpOwog
ICAgIGRvbmUubGluaygmaml0KTsKKyAgICBhdXRvIGRvbmVMb2NhdGlvbiA9IGppdC5sYWJlbCgp
OwogCiAgICAgaWYgKHNpZ25hdHVyZS5yZXR1cm5Db3VudCgpID09IDEpIHsKICAgICAgICAgc3dp
dGNoIChzaWduYXR1cmUucmV0dXJuVHlwZSgwKS5raW5kKSB7CkBAIC00MjEsMTEgKzQyMCw5IEBA
IEV4cGVjdGVkPE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxXYXNtRW50cnkKICAgICBpZiAoVU5MSUtF
TFkocGF0Y2hCdWZmZXIuZGlkRmFpbFRvQWxsb2NhdGUoKSkpCiAgICAgICAgIHJldHVybiBtYWtl
VW5leHBlY3RlZChCaW5kaW5nRmFpbHVyZTo6T3V0T2ZNZW1vcnkpOwogCi0gICAgcGF0Y2hCdWZm
ZXIubGluayhzbG93Q2FsbCwgRnVuY3Rpb25QdHI8SklUVGh1bmtQdHJUYWc+KHZtLmdldENUSVN0
dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcikuY29kZSgpKSk7Ci0gICAgQ29kZUxvY2F0aW9uTGFi
ZWw8SlNJbnRlcm5hbFB0clRhZz4gY2FsbFJldHVybkxvY2F0aW9uKHBhdGNoQnVmZmVyLmxvY2F0
aW9uT2ZOZWFyQ2FsbDxKU0ludGVybmFsUHRyVGFnPihzbG93Q2FsbCkpOwotICAgIENvZGVMb2Nh
dGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IGhvdFBhdGhCZWdpbihwYXRjaEJ1ZmZlci5sb2Nh
dGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KHRhcmdldFRvQ2hlY2spKTsKLSAgICBDb2RlTG9jYXRp
b25OZWFyQ2FsbDxKU0ludGVybmFsUHRyVGFnPiBob3RQYXRoT3RoZXIgPSBwYXRjaEJ1ZmZlci5s
b2NhdGlvbk9mTmVhckNhbGw8SlNJbnRlcm5hbFB0clRhZz4oZmFzdENhbGwpOwotICAgIGNhbGxM
aW5rSW5mby0+c2V0Q2FsbExvY2F0aW9ucyhjYWxsUmV0dXJuTG9jYXRpb24sIGhvdFBhdGhCZWdp
biwgaG90UGF0aE90aGVyKTsKKyAgICBjYWxsTGlua0luZm8tPnNldENvZGVMb2NhdGlvbnMoCisg
ICAgICAgIHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oc2xvd1BhdGhT
dGFydCksCisgICAgICAgIHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4o
ZG9uZUxvY2F0aW9uKSk7CiAKICAgICByZXR1cm4gRklOQUxJWkVfV0FTTV9DT0RFKHBhdGNoQnVm
ZmVyLCBXYXNtRW50cnlQdHJUYWcsICJXZWJBc3NlbWJseS0+SmF2YVNjcmlwdCBpbXBvcnRbJWld
ICVzIiwgaW1wb3J0SW5kZXgsIHNpZ25hdHVyZS50b1N0cmluZygpLmFzY2lpKCkuZGF0YSgpKTsK
IH0K
</data>

          </attachment>
      

    </bug>

</bugzilla>