<?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>231398</bug_id>
          
          <creation_ts>2021-10-07 16:18:48 -0700</creation_ts>
          <short_desc>Consider generating inline caches per-structure before the per-callsite cache is generated</short_desc>
          <delta_ts>2024-04-08 13:37:32 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>CONFIGURATION CHANGED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Justin Michaud">justin_michaud</reporter>
          <assigned_to name="Justin Michaud">justin_michaud</assigned_to>
          <cc>justin_michaud</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1801844</commentid>
    <comment_count>0</comment_count>
    <who name="Justin Michaud">justin_michaud</who>
    <bug_when>2021-10-07 16:18:48 -0700</bug_when>
    <thetext>Consider generating inline caches per-structure before the per-callsite cache is generated</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1801845</commentid>
    <comment_count>1</comment_count>
      <attachid>440552</attachid>
    <who name="Justin Michaud">justin_michaud</who>
    <bug_when>2021-10-07 16:19:14 -0700</bug_when>
    <thetext>Created attachment 440552
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1801846</commentid>
    <comment_count>2</comment_count>
    <who name="Justin Michaud">justin_michaud</who>
    <bug_when>2021-10-07 16:19:56 -0700</bug_when>
    <thetext>WIP, I uploaded here so I don&apos;t lose my work</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1804578</commentid>
    <comment_count>3</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-10-14 16:19:14 -0700</bug_when>
    <thetext>&lt;rdar://problem/84279553&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1808112</commentid>
    <comment_count>4</comment_count>
      <attachid>442277</attachid>
    <who name="Justin Michaud">justin_michaud</who>
    <bug_when>2021-10-23 13:34:48 -0700</bug_when>
    <thetext>Created attachment 442277
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2026845</commentid>
    <comment_count>5</comment_count>
    <who name="Justin Michaud">justin_michaud</who>
    <bug_when>2024-04-08 13:37:10 -0700</bug_when>
    <thetext>Closing old bugs assigned to me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2026898</commentid>
    <comment_count>6</comment_count>
    <who name="Justin Michaud">justin_michaud</who>
    <bug_when>2024-04-08 13:37:32 -0700</bug_when>
    <thetext>Closing old bugs assigned to me</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>440552</attachid>
            <date>2021-10-07 16:19:14 -0700</date>
            <delta_ts>2021-10-23 13:34:48 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-231398-20211007161914.patch</filename>
            <type>text/plain</type>
            <size>49855</size>
            <attacher name="Justin Michaud">justin_michaud</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgzMjMzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAx
MjU0YWIyMTMzYTc2NTMzN2QxM2NhYzM0N2E5NGQ3YzNlNjMwNGRjLi5iZmZhMmYyMzM2ZGI2OTM3
NzVhNmEwNmRlZjk4Y2U0MWEyNmU4Nzg3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw1MSBAQAorMjAyMS0xMC0wNyAgSnVzdGluIE1pY2hhdWQgIDxqdXN0aW5fbWljaGF1ZEBh
cHBsZS5jb20+CisKKyAgICAgICAgQ29uc2lkZXIgZ2VuZXJhdGluZyBpbmxpbmUgY2FjaGVzIHBl
ci1zdHJ1Y3R1cmUgYmVmb3JlIHRoZSBwZXItY2FsbHNpdGUgY2FjaGUgaXMgZ2VuZXJhdGVkCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzEzOTgKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIEphdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYnl0ZWNvZGUvU3Ry
dWN0dXJlU3R1YkluZm8uaDoKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNhY2hlZEdldEJ5SWQpOgorICAg
ICAgICAqIGZ0bC9GVExMb3dlckRGR1RvQjMuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6
TG93ZXJERkdUb0IzOjpjb21waWxlQ29tcGFyZVN0cmljdEVxKToKKyAgICAgICAgKiBoZWFwL0hl
YXAuY3BwOgorICAgICAgICAoSlNDOjpIZWFwOjpIZWFwKToKKyAgICAgICAgKiBoZWFwL0hlYXAu
aDoKKyAgICAgICAgKEpTQzo6SGVhcDo6cHJvcGVydHlBY2Nlc3NTaWRlSW5saW5lQ2FjaGUpOgor
ICAgICAgICAqIGppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6
OkpJVEJ5SWRHZW5lcmF0b3I6OmdlbmVyYXRlU2lkZUlubGluZUNhY2hlKToKKyAgICAgICAgKEpT
Qzo6SklUR2V0QnlJZEdlbmVyYXRvcjo6SklUR2V0QnlJZEdlbmVyYXRvcik6CisgICAgICAgIChK
U0M6OkpJVEdldEJ5SWRHZW5lcmF0b3I6OmdlbmVyYXRlRmFzdFBhdGgpOgorICAgICAgICAoSlND
OjpKSVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3I6OkpJVEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRv
cik6CisgICAgICAgIChKU0M6OkpJVEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRvcjo6Z2VuZXJhdGVG
YXN0UGF0aCk6CisgICAgICAgICogaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmg6CisgICAg
ICAgICogaml0L0pJVE9wZXJhdGlvbnMuY3BwOgorICAgICAgICAoSlNDOjpKU0NfREVGSU5FX0pJ
VF9PUEVSQVRJT04pOgorICAgICAgICAqIGppdC9KSVRPcGVyYXRpb25zLmg6CisgICAgICAgICog
aml0L1Byb3BlcnR5QWNjZXNzU2lkZUlubGluZUNhY2hlLmNwcDogQWRkZWQuCisgICAgICAgIChK
U0M6OlNpZGVBY2Nlc3NHZW5lcmF0aW9uU3RhdGU6OlNpZGVBY2Nlc3NHZW5lcmF0aW9uU3RhdGUp
OgorICAgICAgICAoSlNDOjpTaWRlQWNjZXNzQ2FzZTo6U2lkZUFjY2Vzc0Nhc2UpOgorICAgICAg
ICAoSlNDOjpTaWRlQWNjZXNzQ2FzZTo6Y2FuUmVwbGFjZSBjb25zdCk6CisgICAgICAgIChKU0M6
OlNpZGVBY2Nlc3NDYXNlOjpjbG9uZSBjb25zdCk6CisgICAgICAgIChKU0M6OlNpZGVBY2Nlc3ND
YXNlOjpkdW1wIGNvbnN0KToKKyAgICAgICAgKEpTQzo6U2lkZUFjY2Vzc0Nhc2U6OmdlbmVyYXRl
KToKKyAgICAgICAgKEpTQzo6U2lkZUFjY2Vzc0Nhc2U6OnZpc2l0V2VhayBjb25zdCk6CisgICAg
ICAgIChKU0M6OlNpZGVBY2Nlc3NDYXNlR3JvdXA6OlNpZGVBY2Nlc3NDYXNlR3JvdXApOgorICAg
ICAgICAoSlNDOjpTaWRlQWNjZXNzQ2FzZUdyb3VwOjpyZWdlbmVyYXRlKToKKyAgICAgICAgKEpT
Qzo6U2lkZUFjY2Vzc0Nhc2VHcm91cDo6YWRkQ2FzZXMpOgorICAgICAgICAoSlNDOjpTaWRlQWNj
ZXNzQ2FzZUdyb3VwOjp0cnlDYWNoZUdldEJ5SWQpOgorICAgICAgICAoSlNDOjpTaWRlQWNjZXNz
Q2FzZUdyb3VwOjp2aXNpdFdlYWsgY29uc3QpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eUFjY2Vz
c1NpZGVJbmxpbmVDYWNoZTo6UHJvcGVydHlBY2Nlc3NTaWRlSW5saW5lQ2FjaGUpOgorICAgICAg
ICAoSlNDOjpQcm9wZXJ0eUFjY2Vzc1NpZGVJbmxpbmVDYWNoZTo6flByb3BlcnR5QWNjZXNzU2lk
ZUlubGluZUNhY2hlKToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlBY2Nlc3NTaWRlSW5saW5lQ2Fj
aGU6Om9ic2VydmVTdHJ1Y3R1cmVHZXRCeUlkKToKKyAgICAgICAgKiBqaXQvUHJvcGVydHlBY2Nl
c3NTaWRlSW5saW5lQ2FjaGUuaDogQWRkZWQuCisgICAgICAgIChKU0M6OlByb3BlcnR5QWNjZXNz
U2lkZUlubGluZUNhY2hlOjpqdW1wVGFibGUpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eUFjY2Vz
c1NpZGVJbmxpbmVDYWNoZTo6YnVja2V0Rm9yKToKKyAgICAgICAgKiBydW50aW1lL09wdGlvbnNM
aXN0Lmg6CisKIDIwMjEtMDktMjkgIFNhYW0gQmFyYXRpICA8c2JhcmF0aUBhcHBsZS5jb20+CiAK
ICAgICAgICAgQ29kZSBpbnNpZGUgc3RyZW5ndGggcmVkdWN0aW9uIGNhbiBpbmNvcnJlY3RseSBw
cm92ZSB0aGF0IHdlIGtub3cgd2hhdCBsYXN0SW5kZXggaXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKaW5kZXggY2Q5ODBmZjRjMTBjNjI2ZTk1ODJlNzIzZmFmMjgwMTRkZGRlZDdkMy4uNjBh
MGExZjYxZDVlMDcyZTI4ZmU4NTU3NzMyM2YzNmI4YTc0YTU1NyAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKQEAgLTg3Nyw2ICs4NzcsOCBAQAogCQk0NTE1MzlCOTEyREM5OTQ1MDBFRjdB
QzQgLyogWWFyci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNDUxNTM5QjgxMkRDOTk0NTAwRUY3QUM0IC8qIFlhcnIuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk0NzNEQTRBNDc2NEM0NUZFODcxQjA0ODUg
LyogRGVmaW5lUHJvcGVydHlBdHRyaWJ1dGVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAxNjk5NDhFREU2OEQ0MDU0QjAxRUY3OTcgLyogRGVmaW5lUHJv
cGVydHlBdHRyaWJ1dGVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJNEJBQTA3Q0VCODFGNDlBMjk2RTAyMjAzIC8qIFdhc21TaWduYXR1cmVJbmxp
bmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMEE1
RjQwM0YxMUM0RjU5OUNENTk2RDUgLyogV2FzbVNpZ25hdHVyZUlubGluZXMuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk0QkU3NDJCMDI3MDRERTk3
MDA3M0IwQUQgLyogUHJvcGVydHlBY2Nlc3NTaWRlSW5saW5lQ2FjaGUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRCRTc0MkFGMjcwNERFOTYwMDczQjBB
RCAvKiBQcm9wZXJ0eUFjY2Vzc1NpZGVJbmxpbmVDYWNoZS5oICovOyB9OworCQk0QkU3NDJCMjI3
MDRERUFEMDA3M0IwQUQgLyogUHJvcGVydHlBY2Nlc3NTaWRlSW5saW5lQ2FjaGUuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEJFNzQyQjEyNzA0REVB
RDAwNzNCMEFEIC8qIFByb3BlcnR5QWNjZXNzU2lkZUlubGluZUNhY2hlLmNwcCAqLzsgfTsKIAkJ
NTIwRDk5RjEyMzg4Q0M4MTAwMDUwOUEzIC8qIEdldEJ5VmFsSGlzdG9yeS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTIwRDk5RjAyMzg4Q0M3ODAwMDUw
OUEzIC8qIEdldEJ5VmFsSGlzdG9yeS5oICovOyB9OwogCQk1MjExMzFGNzFGODJCRjE0MDA3Q0NF
RUUgLyogUG9seVByb3RvQWNjZXNzQ2hhaW4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDUyMTEzMUY2MUY4MkJGMTEwMDdDQ0VFRSAvKiBQb2x5UHJvdG9B
Y2Nlc3NDaGFpbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTUyMTMyMjQ2MUVDQkNFODIwMEY2NTYxNSAvKiBXZWJBc3NlbWJseUZ1bmN0aW9uQmFz
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTIxMzIy
NDQxRUNCQ0U4MjAwRjY1NjE1IC8qIFdlYkFzc2VtYmx5RnVuY3Rpb25CYXNlLmggKi87IH07CkBA
IC0zNjMzLDYgKzM2MzUsOCBAQAogCQk0NDJGQkQ4NTIxNDlEMUUwMDA3MzUxOUMgLyogaGFzaGVy
LnB5ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4
dC5zY3JpcHQucHl0aG9uOyBuYW1lID0gaGFzaGVyLnB5OyBwYXRoID0geWFyci9oYXNoZXIucHk7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ1MTUzOUI4MTJEQzk5NDUwMEVGN0FDNCAv
KiBZYXJyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFlhcnIuaDsgcGF0aCA9
IHlhcnIvWWFyci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0NUUxMkQ4ODA2QTQ5
QjBGMDBFOURGODQgLyoganNjLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IGpzYy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRh
YldpZHRoID0gNDsgfTsKKwkJNEJFNzQyQUYyNzA0REU5NjAwNzNCMEFEIC8qIFByb3BlcnR5QWNj
ZXNzU2lkZUlubGluZUNhY2hlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFByb3BlcnR5QWNjZXNzU2lkZUlu
bGluZUNhY2hlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTRCRTc0MkIxMjcwNERF
QUQwMDczQjBBRCAvKiBQcm9wZXJ0eUFjY2Vzc1NpZGVJbmxpbmVDYWNoZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBQcm9wZXJ0eUFjY2Vzc1NpZGVJbmxpbmVDYWNoZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTRDRTk3OEUzODVBODQ5ODE5OTA1MjE1MyAvKiBNb2R1bGVOYW1l
c3BhY2VBY2Nlc3NDYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1vZHVs
ZU5hbWVzcGFjZUFjY2Vzc0Nhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTFG
MEVCNjEwNUM4NkM2QjAwRTZERjFCIC8qIEZvdW5kYXRpb24uZnJhbWV3b3JrICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gd3JhcHBlci5mcmFtZXdvcms7
IG5hbWUgPSBGb3VuZGF0aW9uLmZyYW1ld29yazsgcGF0aCA9IC9TeXN0ZW0vTGlicmFyeS9GcmFt
ZXdvcmtzL0ZvdW5kYXRpb24uZnJhbWV3b3JrOyBzb3VyY2VUcmVlID0gIjxhYnNvbHV0ZT4iOyB9
OwogCQk1MUYwRUMwNzA1Qzg2QzlBMDBFNkRGMUIgLyogbGlib2JqYy5keWxpYiAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9ICJjb21waWxlZC5tYWNoLW8u
ZHlsaWIiOyBuYW1lID0gbGlib2JqYy5keWxpYjsgcGF0aCA9IC91c3IvbGliL2xpYm9iamMuZHls
aWI7IHNvdXJjZVRyZWUgPSAiPGFic29sdXRlPiI7IH07CkBAIC02Mjc3LDEwICs2MjgxLDEwIEBA
CiAJCQkJMEYyNEU1M0IxN0VBOUY1OTAwQUJCMjE3IC8qIEFzc2VtYmx5SGVscGVycy5jcHAgKi8s
CiAJCQkJMEYyNEU1M0MxN0VBOUY1OTAwQUJCMjE3IC8qIEFzc2VtYmx5SGVscGVycy5oICovLAog
CQkJCTZCNzY3RTdBMjY3OTFGMjcwMDE3RjhEMSAvKiBBc3NlbWJseUhlbHBlcnNTcG9vbGVycy5o
ICovLAotCQkJCTcyMzk5OEY2MjY1REJDREIwMDU3ODY3RiAvKiBCYXNlbGluZUpJVFBsYW4uY3Bw
ICovLAotCQkJCTcyMzk5OEY1MjY1REJDREIwMDU3ODY3RiAvKiBCYXNlbGluZUpJVFBsYW4uaCAq
LywKIAkJCQk1MkREMDAwNzI2RTAzOUI0MDA1NEU0MDggLyogQmFzZWxpbmVKSVRDb2RlLmNwcCAq
LywKIAkJCQk1MkREMDAwNjI2RTAzOUIzMDA1NEU0MDggLyogQmFzZWxpbmVKSVRDb2RlLmggKi8s
CisJCQkJNzIzOTk4RjYyNjVEQkNEQjAwNTc4NjdGIC8qIEJhc2VsaW5lSklUUGxhbi5jcHAgKi8s
CisJCQkJNzIzOTk4RjUyNjVEQkNEQjAwNTc4NjdGIC8qIEJhc2VsaW5lSklUUGxhbi5oICovLAog
CQkJCTBGNjRCMjZGMUE3ODRCQUYwMDZFNEU2NiAvKiBCaW5hcnlTd2l0Y2guY3BwICovLAogCQkJ
CTBGNjRCMjcwMUE3ODRCQUYwMDZFNEU2NiAvKiBCaW5hcnlTd2l0Y2guaCAqLywKIAkJCQk2NUI4
MzkyRDFCQUNBOUQzMDA0NEU4MjQgLyogQ2FjaGVkUmVjb3ZlcnkuY3BwICovLApAQCAtNjM4OSw2
ICs2MzkzLDggQEAKIAkJCQk3OTJDQjM0ODFDNEVFRDVDMDBEMTNBRjMgLyogUENUb0NvZGVPcmln
aW5NYXAuaCAqLywKIAkJCQkwRkU4MzQxNTFBNkVGOTdCMDBEMDQ4NDcgLyogUG9seW1vcnBoaWND
YWxsU3R1YlJvdXRpbmUuY3BwICovLAogCQkJCTBGRTgzNDE2MUE2RUY5N0IwMEQwNDg0NyAvKiBQ
b2x5bW9ycGhpY0NhbGxTdHViUm91dGluZS5oICovLAorCQkJCTRCRTc0MkIxMjcwNERFQUQwMDcz
QjBBRCAvKiBQcm9wZXJ0eUFjY2Vzc1NpZGVJbmxpbmVDYWNoZS5jcHAgKi8sCisJCQkJNEJFNzQy
QUYyNzA0REU5NjAwNzNCMEFEIC8qIFByb3BlcnR5QWNjZXNzU2lkZUlubGluZUNhY2hlLmggKi8s
CiAJCQkJMEZBN0E4RTkxOEI0MTNDODAwNTIzNzFEIC8qIFJlZy5jcHAgKi8sCiAJCQkJMEZBN0E4
RUExOEI0MTNDODAwNTIzNzFEIC8qIFJlZy5oICovLAogCQkJCTY1NDBDNzlFMUI4MkQ5Q0UwMDBG
NkI3OSAvKiBSZWdpc3RlckF0T2Zmc2V0LmNwcCAqLywKQEAgLTk0OTYsNiArOTUwMiw3IEBACiAJ
CQkJNTNENDQ0REMxREFGMDhBQjAwQjkyNzg0IC8qIEIzV2FzbUFkZHJlc3NWYWx1ZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNTM0MUZDNzIxREFDMzQzQzAwRTdFNEQ3IC8qIEIzV2FzbUJvdW5kc0No
ZWNrVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkM2M0IyMUU2MEFFNDcwMEMxMzgzOSAv
KiBCM1dpZHRoLmggaW4gSGVhZGVycyAqLywKKwkJCQk1MkREMDAwODI2RTAzOUI5MDA1NEU0MDgg
LyogQmFzZWxpbmVKSVRDb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQk3MjM5OThGNzI2NURCQ0RC
MDA1Nzg2N0YgLyogQmFzZWxpbmVKSVRQbGFuLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MjY3OEY4
RjFBMDMxMDA5MDA2QTMwNkQgLyogQmFzaWNCbG9ja0xvY2F0aW9uLmggaW4gSGVhZGVycyAqLywK
IAkJCQkxNDdCODNBQzBFNkRCOEM5MDA0Nzc1QTQgLyogQmF0Y2hlZFRyYW5zaXRpb25PcHRpbWl6
ZXIuaCBpbiBIZWFkZXJzICovLApAQCAtOTYzMSw3ICs5NjM4LDYgQEAKIAkJCQk1REU2RTVCMzBF
MTcyOEVDMDAxODA0MDcgLyogY3JlYXRlX2hhc2hfdGFibGUgaW4gSGVhZGVycyAqLywKIAkJCQk1
MzVDMjQ2MTFGNzg5MjhFMDA2RUM0MEUgLyogY3JlYXRlX3JlZ2V4X3RhYmxlcyBpbiBIZWFkZXJz
ICovLAogCQkJCTk5NTlFOTJCMUJEMTdGQTQwMDFBQTQxMyAvKiBjc3NtaW4ucHkgaW4gSGVhZGVy
cyAqLywKLQkJCQlFMzg2RkQ3QjI2RTg2N0I4MDBFNEMyOEIgLyogVGVtcG9yYWxQbGFpblRpbWVD
b25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkExMTEyNDYxOTJGQ0U3OTAwNUVFMThE
IC8qIEN1c3RvbUdldHRlclNldHRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY0MjZBNEIxNDYw
Q0Q2RTAwMTMxRjhGIC8qIERhdGFGb3JtYXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI2NkRG
MTdCNkI1QUIwMEE3QUUzRiAvKiBEYXRhVmlldy5oIGluIEhlYWRlcnMgKi8sCkBAIC05NzM1LDEw
ICs5NzQxLDggQEAKIAkJCQkwRjIwMTc4MjFEQ0FERDQyMDBFQTU5NTAgLyogREZHRmxvd01hcC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5RDMzOTcxN0ZGQzRFNjAwNzNDMkJDIC8qIERGR0ZsdXNo
ZWRBdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdEODlDRjgxN0EwQjhDQzAwNzczQUQ4IC8qIERG
R0ZsdXNoRm9ybWF0LmggaW4gSGVhZGVycyAqLywKLQkJCQk1MkREMDAwODI2RTAzOUI5MDA1NEU0
MDggLyogQmFzZWxpbmVKSVRDb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJERDgxNTFBQjNE
OEJFMDBCQkI4RTggLyogREZHRm9yQWxsS2lsbHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNjlD
Qzg5MTkzQUM2MEEwMDQ1NzU5RSAvKiBERkdGcm96ZW5WYWx1ZS5oIGluIEhlYWRlcnMgKi8sCi0J
CQkJRTM4NkZEN0UyNkU4NjdCODAwRTRDMjhCIC8qIFRlbXBvcmFsUGxhaW5UaW1lLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk4NkVDOURDNjEzMjhERjgyMDAyQjJBRDcgLyogREZHR2VuZXJhdGlvbklu
Zm8uaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RUM5REM4MTMyOERGODIwMDJCMkFENyAvKiBERkdH
cmFwaC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyRkNDRkExOEE2MDA3MDAwMUEyN0Y4IC8qIERG
R0dyYXBoU2FmZXBvaW50LmggaW4gSGVhZGVycyAqLywKQEAgLTEwMjgxLDcgKzEwMjg1LDYgQEAK
IAkJCQkwRjJCNjZGMjE3QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXdD
b25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY2RjMxN0I2QjVBQjAwQTdBRTNG
IC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3JJbmxpbmVzLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRjJCNjZGNDE3QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmljVHlwZWRBcnJh
eVZpZXdJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKLQkJCQlFMzg2RkQ3RjI2RTg2N0I4MDBFNEMy
OEIgLyogVGVtcG9yYWxQbGFpblRpbWVQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
MkI2NkY1MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlw
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTM5MTdFN0IxQjc5MDZGQTAwMEVCRDMzIC8qIEpTR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlRnVuY3Rpb25zLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjJCNjZGNjE3QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90
b3R5cGVJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKQEAgLTEwNTY4LDYgKzEwNTcxLDcgQEAKIAkJ
CQlEQzYwNUI2MDFDRTI2RUE3MDA1OTM3MTggLyogUHJvZmlsZXJVSUQuaCBpbiBIZWFkZXJzICov
LAogCQkJCTE0QUQ5MTEwMURDQTkyOTQwMDE0RjlGRSAvKiBQcm9ncmFtQ29kZUJsb2NrLmggaW4g
SGVhZGVycyAqLywKIAkJCQkxNDczNDFENDFEQzAyRTZEMDBBQTI5QkEgLyogUHJvZ3JhbUV4ZWN1
dGFibGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTRCRTc0MkIwMjcwNERFOTcwMDczQjBBRCAvKiBQ
cm9wZXJ0eUFjY2Vzc1NpZGVJbmxpbmVDYWNoZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEM0U0
MEUxQjYxOEI2NjAwQzgwRTFFIC8qIFByb3BlcnR5Q29uZGl0aW9uLmggaW4gSGVhZGVycyAqLywK
IAkJCQlBN0ZCNjEwMDEwNDBDMzhCMDAxN0EyODYgLyogUHJvcGVydHlEZXNjcmlwdG9yLmggaW4g
SGVhZGVycyAqLywKIAkJCQlCQzk1NDM3RDBFQkE3MEZEMDA3MkI2RDMgLyogUHJvcGVydHlNYXBI
YXNoVGFibGUuaCBpbiBIZWFkZXJzICovLApAQCAtMTA3NDMsNiArMTA3NDcsOSBAQAogCQkJCUEz
QzdFREJBMjZCMERCMzgwMDRDMzRDNSAvKiBUZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3IuaCBp
biBIZWFkZXJzICovLAogCQkJCUEzQzdFREI2MjZCMERCMzgwMDRDMzRDNSAvKiBUZW1wb3JhbER1
cmF0aW9uUHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlGNkYxNTAyMTI2OTNENDUwMDA0
Qjk4RUYgLyogVGVtcG9yYWxPYmplY3QubHV0LmggaW4gSGVhZGVycyAqLywKKwkJCQlFMzg2RkQ3
RTI2RTg2N0I4MDBFNEMyOEIgLyogVGVtcG9yYWxQbGFpblRpbWUuaCBpbiBIZWFkZXJzICovLAor
CQkJCUUzODZGRDdCMjZFODY3QjgwMEU0QzI4QiAvKiBUZW1wb3JhbFBsYWluVGltZUNvbnN0cnVj
dG9yLmggaW4gSGVhZGVycyAqLywKKwkJCQlFMzg2RkQ3RjI2RTg2N0I4MDBFNEMyOEIgLyogVGVt
cG9yYWxQbGFpblRpbWVQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUUzMEU4QTU2MjZE
RTJFNDgwMERBNDkxNSAvKiBUZW1wb3JhbFRpbWVab25lLmggaW4gSGVhZGVycyAqLywKIAkJCQlF
MzBFOEE1NzI2REUyRTQ4MDBEQTQ5MTUgLyogVGVtcG9yYWxUaW1lWm9uZUNvbnN0cnVjdG9yLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlFMzBFOEE1NDI2REUyRTQ4MDBEQTQ5MTUgLyogVGVtcG9yYWxU
aW1lWm9uZVByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMTc1MSw2ICsxMTc1OCw3IEBA
CiAJCQkJQTNFRTg1NDMyNjI1MTRCMDAwRkM5QjhEIC8qIEludGxXb3JrYXJvdW5kLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUUzOEU4NzkwMjU0Qjk3ODQwMEY2RjlFNCAvKiBKU0RhdGVNYXRoLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTUzNkIzMTlFMUY3MzVGMTYwMDM3RkMzMyAvKiBMb3dMZXZl
bEludGVycHJldGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTRCRTc0MkIyMjcwNERFQUQwMDcz
QjBBRCAvKiBQcm9wZXJ0eUFjY2Vzc1NpZGVJbmxpbmVDYWNoZS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlERkJDMkNBNjI1RTZENUI5MDA4MUJERDEgLyogU3ltYm9sU3R1YnNGb3JTYWZhcmlDb21w
YXRpYmlsaXR5Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGNDI3NEExNThFQkU5MTAwNENCOUZG
IC8qIHVkaXM4Ni5jIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGNDI3NDAxNThFQkU4QjAwNENCOUZG
IC8qIHVkaXM4Nl9kZWNvZGUuYyBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAppbmRleCAzMzY4NWJjMTM3OWJl
MjVjZDJhOGExYzVmZTkwN2QyODlhMzMzNDEwLi41YTRkMDczZmM1ZDAyZjQ3NGM0ODVmMmZhMzVj
MGY5NzBhOTY0ZWJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
U3RydWN0dXJlU3R1YkluZm8uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
U3RydWN0dXJlU3R1YkluZm8uaApAQCAtMzU2LDEwICszNTYsMTAgQEAgcHVibGljOgogICAgIENv
ZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IGRvbmVMb2NhdGlvbjsKICAgICBDb2Rl
TG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4gc2xvd1BhdGhTdGFydExvY2F0aW9u
OwogCi0gICAgdW5pb24geworLy8gICAgdW5pb24gewogICAgICAgICBDb2RlTG9jYXRpb25DYWxs
PEpTSW50ZXJuYWxQdHJUYWc+IG1fc2xvd1BhdGhDYWxsTG9jYXRpb247CiAgICAgICAgIEZ1bmN0
aW9uUHRyPE9wZXJhdGlvblB0clRhZz4gbV9zbG93T3BlcmF0aW9uOwotICAgIH07CisvLyAgICB9
OwogCiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiBtX2Nv
ZGVQdHI7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQ2NC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklUNjQuY3BwCmluZGV4IGUxMzVmZDUzNDhlOGQ5YzlkNDhjMDQzYTYxNjM5NjYzZTA5YTMyYTgu
LjJlYmJkNDBhN2I3MjM2NmI3NzI3ZGEyNmJkOWZiYWI0YjhlNDUxMjggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcApAQCAtMTczLDYg
KzE3Myw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNhY2hlZEdldEJ5SWQoQ29kZU9yaWdpbiBj
b2RlT3JpZ2luLCBHUFJSZWcgYmFzZUdQUiwgR1BSUmVnCiAgICAgc2xvd0Nhc2VzLmFwcGVuZChn
ZW4uc2xvd1BhdGhKdW1wKCkpOwogCiAgICAgc3RkOjp1bmlxdWVfcHRyPFNsb3dQYXRoR2VuZXJh
dG9yPiBzbG93UGF0aDsKKyAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gYXBw
cm9wcmlhdGVPcHRpbWl6aW5nR2V0QnlJZEZ1bmN0aW9uKHR5cGUpOwogICAgIGlmIChKSVRDb2Rl
Ojp1c2VEYXRhSUMoSklUVHlwZTo6REZHSklUKSkgewogICAgICAgICBzbG93UGF0aCA9IHNsb3dQ
YXRoSUNDYWxsKAogICAgICAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBnZW4uc3R1YkluZm8oKSwg
c3R1YkluZm9HUFIsIENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHViSW5mb0dQUiwgU3RydWN0dXJl
U3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgYXBwcm9wcmlhdGVPcHRpbWl6aW5n
R2V0QnlJZEZ1bmN0aW9uKHR5cGUpLApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExM
b3dlckRGR1RvQjMuY3BwCmluZGV4IGU0OGUzYmM0OGQ1MDEzNzRjYzBjODA1YmQ3ODM1MTRlNzM3
OWM4MGIuLmVkZWQ2MDc4ZmVhMDFkOTNkNjI2ZmVmYTBhN2ZhYzQ3OGMxN2ZmMWIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKQEAgLTE0ODQ5LDYg
KzE0ODQ5LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRvci0+
c2xvd1BhdGhKdW1wKCkubGluaygmaml0KTsKICAgICAgICAgICAgICAgICAgICAgICAgIENDYWxs
SGVscGVyczo6TGFiZWwgc2xvd1BhdGhCZWdpbiA9IGppdC5sYWJlbCgpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIHNsb3dQYXRoQ2FsbDsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGdlbmVyYXRvci0+c3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3B0
aW1pemF0aW9uRnVuY3Rpb247CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSklUQ29kZTo6
dXNlRGF0YUlDKEpJVFR5cGU6OkZUTEpJVCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoZ2VuZXJhdG9yLT5zdHViSW5m
bygpKSwgc3R1YkluZm9HUFIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRv
ci0+c3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3B0aW1pemF0aW9uRnVuY3Rpb247CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCmluZGV4IDBlY2Y4YmQ2OThmNTA0YWY1YWYyNmM4
NDQxMzZjMjViZjQ5ODcxMTguLmYzMzBjYThlMWU1ZmUwZTY0OTI4ZDdkNTNjNjBlNzBhYjAzMTY2
YWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCkBAIC0yODIsNiArMjgyLDcgQEAg
SGVhcDo6SGVhcChWTSYgdm0sIEhlYXBUeXBlIGhlYXBUeXBlKQogICAgICwgbV9tYXhFZGVuU2l6
ZShtX21pbkJ5dGVzUGVyQ3ljbGUpCiAgICAgLCBtX21heEhlYXBTaXplKG1fbWluQnl0ZXNQZXJD
eWNsZSkKICAgICAsIG1fb2JqZWN0U3BhY2UodGhpcykKKyAgICAsIG1fcHJvcGVydHlBY2Nlc3NT
aWRlSW5saW5lQ2FjaGUodm0pCiAgICAgLCBtX21hY2hpbmVUaHJlYWRzKG1ha2VVbmlxdWU8TWFj
aGluZVRocmVhZHM+KCkpCiAgICAgLCBtX2NvbGxlY3RvclNsb3RWaXNpdG9yKG1ha2VVbmlxdWU8
U2xvdFZpc2l0b3I+KCp0aGlzLCAiQyIpKQogICAgICwgbV9tdXRhdG9yU2xvdFZpc2l0b3IobWFr
ZVVuaXF1ZTxTbG90VmlzaXRvcj4oKnRoaXMsICJNIikpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9IZWFwLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFw
LmgKaW5kZXggMDgxZGY0NmVkZmZmYWExMDA4YjhmZWFlZjIzNDFlZWZjMDEzZDI3Ni4uYTI4OTkw
YzczZjJhZTk3MGY0MThlNmJiMzM2NTI2ODc4OTYxZjQwZCAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0hlYXAuaApAQCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUgIk1hcmtlZFNwYWNlLmgiCiAjaW5j
bHVkZSAiTXV0YXRvclN0YXRlLmgiCiAjaW5jbHVkZSAiT3B0aW9ucy5oIgorI2luY2x1ZGUgIlBy
b3BlcnR5QWNjZXNzU2lkZUlubGluZUNhY2hlLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlSURUYWJs
ZS5oIgogI2luY2x1ZGUgIlN5bmNocm9ub3VzbmVzcy5oIgogI2luY2x1ZGUgIldlYWtIYW5kbGVP
d25lci5oIgpAQCAtMjc5LDYgKzI4MCw3IEBAIHB1YmxpYzoKICAgICBib29sIGlzRGVmZXJyZWQo
KSBjb25zdCB7IHJldHVybiAhIW1fZGVmZXJyYWxEZXB0aDsgfQogCiAgICAgU3RydWN0dXJlSURU
YWJsZSYgc3RydWN0dXJlSURUYWJsZSgpIHsgcmV0dXJuIG1fc3RydWN0dXJlSURUYWJsZTsgfQor
ICAgIFByb3BlcnR5QWNjZXNzU2lkZUlubGluZUNhY2hlJiBwcm9wZXJ0eUFjY2Vzc1NpZGVJbmxp
bmVDYWNoZSgpIHsgcmV0dXJuIG1fcHJvcGVydHlBY2Nlc3NTaWRlSW5saW5lQ2FjaGU7IH0KIAog
ICAgIENvZGVCbG9ja1NldCYgY29kZUJsb2NrU2V0KCkgeyByZXR1cm4gKm1fY29kZUJsb2Nrczsg
fQogCkBAIC02MjEsNiArNjIzLDEwIEBAIHByaXZhdGU6CiAgICAgc2l6ZV90IG1fZXh0cmFNZW1v
cnlTaXplIHsgMCB9OwogICAgIHNpemVfdCBtX2RlcHJlY2F0ZWRFeHRyYU1lbW9yeVNpemUgeyAw
IH07CiAKKyNpZiBFTkFCTEUoSklUKSAmJiBVU0UoSlNWQUxVRTY0KQorICAgIFByb3BlcnR5QWNj
ZXNzU2lkZUlubGluZUNhY2hlIG1fcHJvcGVydHlBY2Nlc3NTaWRlSW5saW5lQ2FjaGU7CisjZW5k
aWYKKwogICAgIEhhc2hTZXQ8Y29uc3QgSlNDZWxsKj4gbV9jb3B5aW5nUmVtZW1iZXJlZFNldDsK
IAogICAgIFByb3RlY3RDb3VudFNldCBtX3Byb3RlY3RlZFZhbHVlczsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5jcHAKaW5kZXgg
MWYzNGMzZDFkY2ZmNTJlMDZhMjgyMTU3MTE4MmY5MmZmZmU4YzAyMS4uZTBiZWI3MGQyNzRkNjZk
ZGI0NDk4YjMyYjgyMTkxYWYyZDNkYzFmYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5jcHAKQEAgLTM0LDYgKzM0LDcgQEAK
ICNpbmNsdWRlICJJbmxpbmVBY2Nlc3MuaCIKICNpbmNsdWRlICJKSVQuaCIKICNpbmNsdWRlICJM
aW5rQnVmZmVyLmgiCisjaW5jbHVkZSAiU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmgiCiAjaW5j
bHVkZSAiU3RydWN0dXJlU3R1YkluZm8uaCIKIAogbmFtZXNwYWNlIEpTQyB7CkBAIC0xMTQsMTgg
KzExNSwxMDYgQEAgdm9pZCBKSVRCeUlkR2VuZXJhdG9yOjpnZW5lcmF0ZUZhc3RDb21tb24oTWFj
cm9Bc3NlbWJsZXImIGppdCwgc2l6ZV90IGlubGluZUlDU2kKICAgICBtX2RvbmUgPSBqaXQubGFi
ZWwoKTsKIH0KIAordm9pZCBKSVRCeUlkR2VuZXJhdG9yOjpnZW5lcmF0ZVNpZGVJbmxpbmVDYWNo
ZShDQ2FsbEhlbHBlcnMmIGppdCwgc2l6ZV90IGlubGluZUlDU2l6ZSwgQ2FjaGVhYmxlSWRlbnRp
ZmllciBwcm9wZXJ0eU5hbWUpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoT3B0aW9uczo6dXNlUHJv
cGVydHlBY2Nlc3NTaWRlSUMoKSk7CisgICAgQVNTRVJUKHByb3BlcnR5TmFtZSk7CisgICAgR1BS
UmVnIHJlc3VsdCA9IFNpZGVQcm9wZXJ0eUFjY2Vzc1JlZ2lzdGVyczo6cmVzdWx0OworICAgIEdQ
UlJlZyBiYXNlID0gU2lkZVByb3BlcnR5QWNjZXNzUmVnaXN0ZXJzOjpiYXNlOworICAgIEdQUlJl
ZyBwcm9wZXJ0eSA9IFNpZGVQcm9wZXJ0eUFjY2Vzc1JlZ2lzdGVyczo6cHJvcGVydHk7CisgICAg
R1BSUmVnIHN0dWJJbmZvID0gU2lkZVByb3BlcnR5QWNjZXNzUmVnaXN0ZXJzOjpzdHViSW5mbzsK
KyAgICBHUFJSZWcgc2NyYXRjaCA9IEludmFsaWRHUFJSZWc7CisKKyAgICBhdXRvJiB2bSA9IGpp
dC52bSgpOworICAgIGF1dG8qIHNpZGVJQ1RhYmxlID0gdm0uaGVhcC5wcm9wZXJ0eUFjY2Vzc1Np
ZGVJbmxpbmVDYWNoZSgpLmp1bXBUYWJsZSgpOworICAgIGRhdGFMb2dMbigiR2VuZXJhdGluZyBm
b3IgIiwgcHJvcGVydHlOYW1lLCAiIHRhYmxlOiAiLCBSYXdQb2ludGVyKHNpZGVJQ1RhYmxlKSk7
CisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBkb25lOworICAgIENDYWxsSGVscGVyczo6SnVt
cExpc3Qgc2tpcElubGluZUFjY2VzczsKKworICAgIGF1dG8gb3JpZ2luYWxCYXNlID0gbV9zdHVi
SW5mby0+YmFzZUdQUjsKKyAgICBhdXRvIG9yaWdpbmFsUmVzdWx0ID0gbV9zdHViSW5mby0+dmFs
dWVHUFI7CisgICAgQVNTRVJUKG9yaWdpbmFsQmFzZSAhPSBJbnZhbGlkR1BSUmVnKTsKKyAgICBB
U1NFUlQob3JpZ2luYWxSZXN1bHQgIT0gSW52YWxpZEdQUlJlZyk7CisKKyAgICBTY3JhdGNoUmVn
aXN0ZXJBbGxvY2F0b3IgYWxsb2NhdG9yKG1fc3R1YkluZm8tPnVzZWRSZWdpc3RlcnMpOworICAg
IGFsbG9jYXRvci5sb2NrKG9yaWdpbmFsQmFzZSk7CisgICAgYWxsb2NhdG9yLmxvY2socmVzdWx0
KTsKKyAgICBhbGxvY2F0b3IubG9jayhiYXNlKTsKKyAgICBhbGxvY2F0b3IubG9jayhwcm9wZXJ0
eSk7CisgICAgYWxsb2NhdG9yLmxvY2soc3R1YkluZm8pOworICAgIHNjcmF0Y2ggPSBhbGxvY2F0
b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7CisKKyAgICBtX3N0YXJ0ID0gaml0LmxhYmVsKCk7Cisg
ICAgc2l6ZV90IHN0YXJ0U2l6ZSA9IGppdC5tX2Fzc2VtYmxlci5idWZmZXIoKS5jb2RlU2l6ZSgp
OworCisgICAgaml0LmxvYWQzMihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mob3JpZ2luYWxCYXNlLCBK
U0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBzY3JhdGNoKTsKKyAgICBqaXQuYW5kNjQoQ0Nh
bGxIZWxwZXJzOjpUcnVzdGVkSW1tNjQoMCksIHNjcmF0Y2gpOworICAgIGppdC5hZGQ2NChDQ2Fs
bEhlbHBlcnM6OlRydXN0ZWRJbW02NChyZWludGVycHJldF9jYXN0PHVpbnQ2NF90PihzaWRlSUNU
YWJsZSkpLCBzY3JhdGNoKTsKKyAgICBqaXQubG9hZDY0KENDYWxsSGVscGVyczo6QWRkcmVzcyhz
Y3JhdGNoKSwgc2NyYXRjaCk7CisgICAgc2tpcElubGluZUFjY2Vzcy5hcHBlbmQoaml0LmJyYW5j
aFRlc3QzMihDQ2FsbEhlbHBlcnM6Olplcm8sIHNjcmF0Y2gpKTsKKworICAgIHsKKyAgICAgICAg
UmVnaXN0ZXJTZXQgcmVnaXN0ZXJzVG9QcmVzZXJ2ZTsKKyAgICAgICAgaWYgKG1fc3R1YkluZm8t
PnVzZWRSZWdpc3RlcnMuY29udGFpbnMocmVzdWx0KSkKKyAgICAgICAgICAgIHJlZ2lzdGVyc1Rv
UHJlc2VydmUuc2V0KHJlc3VsdCk7CisgICAgICAgIGlmIChtX3N0dWJJbmZvLT51c2VkUmVnaXN0
ZXJzLmNvbnRhaW5zKGJhc2UpKQorICAgICAgICAgICAgcmVnaXN0ZXJzVG9QcmVzZXJ2ZS5zZXQo
YmFzZSk7CisgICAgICAgIGlmIChtX3N0dWJJbmZvLT51c2VkUmVnaXN0ZXJzLmNvbnRhaW5zKHBy
b3BlcnR5KSkKKyAgICAgICAgICAgIHJlZ2lzdGVyc1RvUHJlc2VydmUuc2V0KHByb3BlcnR5KTsK
KyAgICAgICAgaWYgKG1fc3R1YkluZm8tPnVzZWRSZWdpc3RlcnMuY29udGFpbnMoc3R1YkluZm8p
KQorICAgICAgICAgICAgcmVnaXN0ZXJzVG9QcmVzZXJ2ZS5zZXQoYmFzZSk7CisgICAgICAgIGlm
IChtX3N0dWJJbmZvLT51c2VkUmVnaXN0ZXJzLmNvbnRhaW5zKFNpZGVQcm9wZXJ0eUFjY2Vzc1Jl
Z2lzdGVyczo6c2NyYXRjaCkpCisgICAgICAgICAgICByZWdpc3RlcnNUb1ByZXNlcnZlLnNldChT
aWRlUHJvcGVydHlBY2Nlc3NSZWdpc3RlcnM6OnNjcmF0Y2gpOworICAgICAgICBpZiAobV9zdHVi
SW5mby0+dXNlZFJlZ2lzdGVycy5jb250YWlucyhHUFJJbmZvOjpub25BcmdHUFIwKSkKKyAgICAg
ICAgICAgIHJlZ2lzdGVyc1RvUHJlc2VydmUuc2V0KEdQUkluZm86Om5vbkFyZ0dQUjApOworICAg
ICAgICByZWdpc3RlcnNUb1ByZXNlcnZlLmNsZWFyKG9yaWdpbmFsUmVzdWx0KTsKKworICAgICAg
ICBjb25zdCB1bnNpZ25lZCBleHRyYVBhZGRpbmdCeXRlcyA9IDA7CisgICAgICAgIHVuc2lnbmVk
IG51bWJlck9mU3RhY2tCeXRlc1VzZWRGb3JSZWdpc3RlclByZXNlcnZhdGlvbiA9IFNjcmF0Y2hS
ZWdpc3RlckFsbG9jYXRvcjo6cHJlc2VydmVSZWdpc3RlcnNUb1N0YWNrRm9yQ2FsbChqaXQsIHJl
Z2lzdGVyc1RvUHJlc2VydmUsIGV4dHJhUGFkZGluZ0J5dGVzKTsKKworICAgICAgICBpZiAob3Jp
Z2luYWxCYXNlICE9IGJhc2UpCisgICAgICAgICAgICBqaXQubW92ZShvcmlnaW5hbEJhc2UsIGJh
c2UpOworICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW02NChwcm9wZXJ0
eU5hbWUucmF3Qml0cygpKSwgcHJvcGVydHkpOworICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW1QdHIobV9zdHViSW5mbyksIHN0dWJJbmZvKTsKKyAgICAgICAgaml0LmNh
bGwoc2NyYXRjaCwgSklUU3R1YlJvdXRpbmVQdHJUYWcpOworCisgICAgICAgIGlmIChvcmlnaW5h
bFJlc3VsdCAhPSByZXN1bHQpCisgICAgICAgICAgICBqaXQubW92ZShyZXN1bHQsIG9yaWdpbmFs
UmVzdWx0KTsKKworICAgICAgICBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OnJlc3RvcmVSZWdp
c3RlcnNGcm9tU3RhY2tGb3JDYWxsKGppdCwgcmVnaXN0ZXJzVG9QcmVzZXJ2ZSwgUmVnaXN0ZXJT
ZXQoKSwgbnVtYmVyT2ZTdGFja0J5dGVzVXNlZEZvclJlZ2lzdGVyUHJlc2VydmF0aW9uLCBleHRy
YVBhZGRpbmdCeXRlcyk7CisgICAgICAgIGRvbmUuYXBwZW5kKGppdC5qdW1wKCkpOworICAgIH0K
KworICAgIHNraXBJbmxpbmVBY2Nlc3MubGluaygmaml0KTsKKyAgICBtX3Nsb3dQYXRoSnVtcCA9
IGppdC5qdW1wKCk7CisKKyAgICBzaXplX3QganVtcFNpemUgPSBqaXQubV9hc3NlbWJsZXIuYnVm
ZmVyKCkuY29kZVNpemUoKSAtIHN0YXJ0U2l6ZTsKKyAgICBpZiAoaW5saW5lSUNTaXplID49IGp1
bXBTaXplKSB7CisgICAgICAgIHNpemVfdCBub3BzVG9FbWl0SW5CeXRlcyA9IGlubGluZUlDU2l6
ZSAtIGp1bXBTaXplOworICAgICAgICBqaXQuZW1pdE5vcHMobm9wc1RvRW1pdEluQnl0ZXMpOwor
ICAgIH0KKyAgICBBU1NFUlQoaml0Lm1fYXNzZW1ibGVyLmJ1ZmZlcigpLmNvZGVTaXplKCkgLSBz
dGFydFNpemUgPj0gaW5saW5lSUNTaXplKTsKKworICAgIGRvbmUubGluaygmaml0KTsKKyAgICBt
X2RvbmUgPSBqaXQubGFiZWwoKTsKK30KKwogSklUR2V0QnlJZEdlbmVyYXRvcjo6SklUR2V0QnlJ
ZEdlbmVyYXRvcigKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSklUVHlwZSBqaXRUeXBlLCBD
b2RlT3JpZ2luIGNvZGVPcmlnaW4sIENhbGxTaXRlSW5kZXggY2FsbFNpdGUsIGNvbnN0IFJlZ2lz
dGVyU2V0JiB1c2VkUmVnaXN0ZXJzLAogICAgIENhY2hlYWJsZUlkZW50aWZpZXIgcHJvcGVydHlO
YW1lLCBKU1ZhbHVlUmVncyBiYXNlLCBKU1ZhbHVlUmVncyB2YWx1ZSwgR1BSUmVnIHN0dWJJbmZv
R1BSLCBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUpCiAgICAgOiBKSVRCeUlkR2VuZXJhdG9yKGNvZGVC
bG9jaywgaml0VHlwZSwgY29kZU9yaWdpbiwgY2FsbFNpdGUsIGFjY2Vzc1R5cGUsIHVzZWRSZWdp
c3RlcnMsIGJhc2UsIHZhbHVlLCBzdHViSW5mb0dQUikKICAgICAsIG1faXNMZW5ndGhBY2Nlc3Mo
Y29kZUJsb2NrICYmIHByb3BlcnR5TmFtZS51aWQoKSA9PSBjb2RlQmxvY2stPnZtKCkucHJvcGVy
dHlOYW1lcy0+bGVuZ3RoLmltcGwoKSkKKyAgICAsIG1fcHJvcGVydHlOYW1lKHByb3BlcnR5TmFt
ZSkKIHsKICAgICBSRUxFQVNFX0FTU0VSVChiYXNlLnBheWxvYWRHUFIoKSAhPSB2YWx1ZS50YWdH
UFIoKSk7CiB9CiAKLXZvaWQgSklUR2V0QnlJZEdlbmVyYXRvcjo6Z2VuZXJhdGVGYXN0UGF0aChN
YWNyb0Fzc2VtYmxlciYgaml0KQordm9pZCBKSVRHZXRCeUlkR2VuZXJhdG9yOjpnZW5lcmF0ZUZh
c3RQYXRoKENDYWxsSGVscGVycyYgaml0KQogewotICAgIGdlbmVyYXRlRmFzdENvbW1vbihqaXQs
IG1faXNMZW5ndGhBY2Nlc3MgPyBJbmxpbmVBY2Nlc3M6OnNpemVGb3JMZW5ndGhBY2Nlc3MoKSA6
IElubGluZUFjY2Vzczo6c2l6ZUZvclByb3BlcnR5QWNjZXNzKCkpOworICAgIGlmIChPcHRpb25z
Ojp1c2VQcm9wZXJ0eUFjY2Vzc1NpZGVJQygpICYmIG1fcHJvcGVydHlOYW1lKQorICAgICAgICBn
ZW5lcmF0ZVNpZGVJbmxpbmVDYWNoZShqaXQsIG1faXNMZW5ndGhBY2Nlc3MgPyBJbmxpbmVBY2Nl
c3M6OnNpemVGb3JMZW5ndGhBY2Nlc3MoKSA6IElubGluZUFjY2Vzczo6c2l6ZUZvclByb3BlcnR5
QWNjZXNzKCksIG1fcHJvcGVydHlOYW1lKTsKKyAgICBlbHNlCisgICAgICAgIGdlbmVyYXRlRmFz
dENvbW1vbihqaXQsIG1faXNMZW5ndGhBY2Nlc3MgPyBJbmxpbmVBY2Nlc3M6OnNpemVGb3JMZW5n
dGhBY2Nlc3MoKSA6IElubGluZUFjY2Vzczo6c2l6ZUZvclByb3BlcnR5QWNjZXNzKCkpOwogfQog
CiAKQEAgLTE2MSw4ICsyNTAsOSBAQCB2b2lkIEpJVEdldEJ5SWRHZW5lcmF0b3I6OmdlbmVyYXRl
QmFzZWxpbmVEYXRhSUNGYXN0UGF0aChKSVQmIGppdCwgdW5zaWduZWQgc3R1YgogCiBKSVRHZXRC
eUlkV2l0aFRoaXNHZW5lcmF0b3I6OkpJVEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRvcigKICAgICBD
b2RlQmxvY2sqIGNvZGVCbG9jaywgSklUVHlwZSBqaXRUeXBlLCBDb2RlT3JpZ2luIGNvZGVPcmln
aW4sIENhbGxTaXRlSW5kZXggY2FsbFNpdGUsIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0
ZXJzLAotICAgIENhY2hlYWJsZUlkZW50aWZpZXIsIEpTVmFsdWVSZWdzIHZhbHVlLCBKU1ZhbHVl
UmVncyBiYXNlLCBKU1ZhbHVlUmVncyB0aGlzUmVncywgR1BSUmVnIHN0dWJJbmZvR1BSKQorICAg
IENhY2hlYWJsZUlkZW50aWZpZXIgcHJvcGVydHlOYW1lLCBKU1ZhbHVlUmVncyB2YWx1ZSwgSlNW
YWx1ZVJlZ3MgYmFzZSwgSlNWYWx1ZVJlZ3MgdGhpc1JlZ3MsIEdQUlJlZyBzdHViSW5mb0dQUikK
ICAgICA6IEpJVEJ5SWRHZW5lcmF0b3IoY29kZUJsb2NrLCBqaXRUeXBlLCBjb2RlT3JpZ2luLCBj
YWxsU2l0ZSwgQWNjZXNzVHlwZTo6R2V0QnlJZFdpdGhUaGlzLCB1c2VkUmVnaXN0ZXJzLCBiYXNl
LCB2YWx1ZSwgc3R1YkluZm9HUFIpCisgICAgLCBtX3Byb3BlcnR5TmFtZShwcm9wZXJ0eU5hbWUp
CiB7CiAgICAgUkVMRUFTRV9BU1NFUlQodGhpc1JlZ3MucGF5bG9hZEdQUigpICE9IHRoaXNSZWdz
LnRhZ0dQUigpKTsKIApAQCAtMTcyLDkgKzI2MiwxMiBAQCBKSVRHZXRCeUlkV2l0aFRoaXNHZW5l
cmF0b3I6OkpJVEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRvcigKICNlbmRpZgogfQogCi12b2lkIEpJ
VEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRvcjo6Z2VuZXJhdGVGYXN0UGF0aChNYWNyb0Fzc2VtYmxl
ciYgaml0KQordm9pZCBKSVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3I6OmdlbmVyYXRlRmFzdFBh
dGgoQ0NhbGxIZWxwZXJzJiBqaXQpCiB7Ci0gICAgZ2VuZXJhdGVGYXN0Q29tbW9uKGppdCwgSW5s
aW5lQWNjZXNzOjpzaXplRm9yUHJvcGVydHlBY2Nlc3MoKSk7CisgICAgaWYgKE9wdGlvbnM6OnVz
ZVByb3BlcnR5QWNjZXNzU2lkZUlDKCkgJiYgbV9wcm9wZXJ0eU5hbWUpCisgICAgICAgIGdlbmVy
YXRlU2lkZUlubGluZUNhY2hlKGppdCwgSW5saW5lQWNjZXNzOjpzaXplRm9yUHJvcGVydHlBY2Nl
c3MoKSwgbV9wcm9wZXJ0eU5hbWUpOworICAgIGVsc2UKKyAgICAgICAgZ2VuZXJhdGVGYXN0Q29t
bW9uKGppdCwgSW5saW5lQWNjZXNzOjpzaXplRm9yUHJvcGVydHlBY2Nlc3MoKSk7CiB9CiAKICNp
ZiBVU0UoSlNWQUxVRTY0KQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJ
bmxpbmVDYWNoZUdlbmVyYXRvci5oCmluZGV4IDJmNjlmNjRlYzE2MWFlOTA0M2U0ZGM4NjBjMzg0
OTY0OTE5YzZhZGUuLjcxYjFhYTlhMTcwOWUyZDVjODY2MjMxODRhNWQyNGJkZjE2NzMxNmIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0
b3IuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJh
dG9yLmgKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2lmIEVOQUJMRShKSVQpCiAKKyNpbmNsdWRlICJD
YWNoZWFibGVJZGVudGlmaWVyLmgiCiAjaW5jbHVkZSAiQ29kZU9yaWdpbi5oIgogI2luY2x1ZGUg
IkpJVE9wZXJhdGlvblZhbGlkYXRpb24uaCIKICNpbmNsdWRlICJKSVRPcGVyYXRpb25zLmgiCkBA
IC0zOCw2ICszOSw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBDYWNoZWFibGVJZGVudGlm
aWVyOwogY2xhc3MgQ2FsbFNpdGVJbmRleDsKK2NsYXNzIENDYWxsSGVscGVyczsKIGNsYXNzIENv
ZGVCbG9jazsKIGNsYXNzIEpJVDsKIGNsYXNzIFN0cnVjdHVyZVN0dWJJbmZvOwpAQCAtMTIxLDYg
KzEyMywyNSBAQCBzdHJ1Y3QgQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnMgewogICAg
IHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2ggPSBHUFJJbmZvOjpyZWdUMzsKIH07CiAK
K3N0cnVjdCBTaWRlUHJvcGVydHlBY2Nlc3NSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4
cHIgR1BSUmVnIHJlc3VsdCA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpY19hc3NlcnQocmVz
dWx0ID09IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6cmVzdWx0KTsKKworICAgIHN0YXRpYyBj
b25zdGV4cHIgR1BSUmVnIGJhc2UgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWNfYXNzZXJ0
KGJhc2UgPT0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlKTsKKworICAgIHN0YXRpYyBj
b25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6cmVnVDE7CisgICAgc3RhdGljX2Fz
c2VydChzdHViSW5mbyA9PSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZvKTsKKwor
ICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2ggPSBHUFJJbmZvOjpyZWdUMjsKKyAg
ICBzdGF0aWNfYXNzZXJ0KHNjcmF0Y2ggPT0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzY3Jh
dGNoKTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGRvbnRDbG9iYmVyUmVnaXN0ZXIg
PSBHUFJJbmZvOjpyZWdUMzsKKyAgICBzdGF0aWNfYXNzZXJ0KHNjcmF0Y2ggPT0gQmFzZWxpbmVH
ZXRCeUlkUmVnaXN0ZXJzOjpzY3JhdGNoKTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVn
IHByb3BlcnR5ID0gR1BSSW5mbzo6cmVnVDQ7Cit9OworCiBzdHJ1Y3QgQmFzZWxpbmVJbkJ5SWRS
ZWdpc3RlcnMgewogICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9IEJhc2VsaW5l
R2V0QnlJZFJlZ2lzdGVyczo6cmVzdWx0OwogICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJh
c2UgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7CkBAIC0yMTAsNiArMjMxLDcgQEAg
cHVibGljOgogcHJvdGVjdGVkOgogICAgIAogICAgIHZvaWQgZ2VuZXJhdGVGYXN0Q29tbW9uKE1h
Y3JvQXNzZW1ibGVyJiwgc2l6ZV90IHNpemUpOworICAgIHZvaWQgZ2VuZXJhdGVTaWRlSW5saW5l
Q2FjaGUoQ0NhbGxIZWxwZXJzJiwgc2l6ZV90IHNpemUsIENhY2hlYWJsZUlkZW50aWZpZXIgcHJv
cGVydHlOYW1lKTsKICAgICAKICAgICBKU1ZhbHVlUmVncyBtX2Jhc2U7CiAgICAgSlNWYWx1ZVJl
Z3MgbV92YWx1ZTsKQEAgLTIyNiwxMSArMjQ4LDEyIEBAIHB1YmxpYzoKICAgICAgICAgQ29kZUJs
b2NrKiwgSklUVHlwZSwgQ29kZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCwgY29uc3QgUmVnaXN0ZXJT
ZXQmIHVzZWRSZWdpc3RlcnMsIENhY2hlYWJsZUlkZW50aWZpZXIsCiAgICAgICAgIEpTVmFsdWVS
ZWdzIGJhc2UsIEpTVmFsdWVSZWdzIHZhbHVlLCBHUFJSZWcgc3R1YkluZm9HUFIsIEFjY2Vzc1R5
cGUpOwogICAgIAotICAgIHZvaWQgZ2VuZXJhdGVGYXN0UGF0aChNYWNyb0Fzc2VtYmxlciYpOwor
ICAgIHZvaWQgZ2VuZXJhdGVGYXN0UGF0aChDQ2FsbEhlbHBlcnMmKTsKICAgICB2b2lkIGdlbmVy
YXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aChKSVQmLCB1bnNpZ25lZCBzdHViSW5mb0NvbnN0YW50
LCBHUFJSZWcgc3R1YkluZm9HUFIpOwogCiBwcml2YXRlOgogICAgIGJvb2wgbV9pc0xlbmd0aEFj
Y2VzczsKKyAgICBDYWNoZWFibGVJZGVudGlmaWVyIG1fcHJvcGVydHlOYW1lOwogfTsKIAogY2xh
c3MgSklUR2V0QnlJZFdpdGhUaGlzR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIEpJVEJ5SWRHZW5l
cmF0b3IgewpAQCAtMjQyLDcgKzI2NSwxMCBAQCBwdWJsaWM6CiAgICAgICAgIEpTVmFsdWVSZWdz
IHZhbHVlLCBKU1ZhbHVlUmVncyBiYXNlLCBKU1ZhbHVlUmVncyB0aGlzUmVncywgR1BSUmVnIHN0
dWJJbmZvR1BSKTsKIAogICAgIHZvaWQgZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKEpJ
VCYsIHVuc2lnbmVkIHN0dWJJbmZvQ29uc3RhbnQsIEdQUlJlZyBzdHViSW5mb0dQUik7Ci0gICAg
dm9pZCBnZW5lcmF0ZUZhc3RQYXRoKE1hY3JvQXNzZW1ibGVyJik7CisgICAgdm9pZCBnZW5lcmF0
ZUZhc3RQYXRoKENDYWxsSGVscGVycyYpOworCitwcml2YXRlOgorICAgIENhY2hlYWJsZUlkZW50
aWZpZXIgbV9wcm9wZXJ0eU5hbWU7CiB9OwogCiBjbGFzcyBKSVRQdXRCeUlkR2VuZXJhdG9yIGZp
bmFsIDogcHVibGljIEpJVEJ5SWRHZW5lcmF0b3IgewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUT3BlcmF0aW9ucy5jcHAKaW5kZXggZDdkZjdjYjhlODc1ZTJjYTZhZTcwNGYxMWVkZDlk
OGNjZjEzMjk4Ni4uMzRhMDEwYzRhYjRjODE5NjFlZWU2MDQxYjkzMjliODAwMjk4YzI2ZCAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCkBAIC0zMzEsNiAr
MzMxLDkgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6
ZSwgRW5jb2RlZEpTVmFsdWUsIChKU0dsb2JhbE9iamUKICAgICAgICAgQ29kZUJsb2NrKiBjb2Rl
QmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOwogICAgICAgICBpZiAoc3R1YkluZm8tPmNv
bnNpZGVyQ2FjaGluZ0J5KHZtLCBjb2RlQmxvY2ssIGJhc2VWYWx1ZS5zdHJ1Y3R1cmVPck51bGwo
dm0pLCBpZGVudGlmaWVyKSkKICAgICAgICAgICAgIHJlcGF0Y2hHZXRCeShnbG9iYWxPYmplY3Qs
IGNvZGVCbG9jaywgYmFzZVZhbHVlLCBpZGVudGlmaWVyLCBzbG90LCAqc3R1YkluZm8sIEdldEJ5
S2luZDo6QnlJZCk7CisKKyAgICAgICAgdm0uaGVhcC5wcm9wZXJ0eUFjY2Vzc1NpZGVJbmxpbmVD
YWNoZSgpLm9ic2VydmVTdHJ1Y3R1cmVHZXRCeUlkKGZvdW5kLCBiYXNlVmFsdWUsIGlkZW50aWZp
ZXIsIHNsb3QsIGNvZGVCbG9jayk7CisKICAgICAgICAgcmV0dXJuIGZvdW5kID8gc2xvdC5nZXRW
YWx1ZShnbG9iYWxPYmplY3QsIGlkZW50KSA6IGpzVW5kZWZpbmVkKCk7CiAgICAgfSkpOwogfQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAppbmRleCA0YjVkMDExZjkw
NmEzMDMyZTJhNWI4NTBhM2EwYjlhNGM2ODM0YmYzLi41MGQwMzdmZGNmYTdmZWZiZDc3NTM3MWQw
YjllZmM1YjZiMWZlZjJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VE9wZXJhdGlvbnMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlv
bnMuaApAQCAtMTQxLDYgKzE0MSw3IEBAIHVzaW5nIFNfSklUT3BlcmF0aW9uX0dDWiA9IHNpemVf
dChKSVRfT1BFUkFUSU9OX0FUVFJJQlVURVMgKikoSlNHbG9iYWxPYmplY3QqLCBKCiB1c2luZyBT
X0pJVE9wZXJhdGlvbl9HSkogPSBzaXplX3QoSklUX09QRVJBVElPTl9BVFRSSUJVVEVTICopKEpT
R2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKTsKIHVzaW5nIFZf
SklUT3BlcmF0aW9uX0dKSkogPSB2b2lkKEpJVF9PUEVSQVRJT05fQVRUUklCVVRFUyAqKShKU0ds
b2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFs
dWUpOwogdXNpbmcgSl9KSVRPcGVyYXRpb25fR1NzaUpKID0gRW5jb2RlZEpTVmFsdWUoSklUX09Q
RVJBVElPTl9BVFRSSUJVVEVTICopKEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlU3R1YkluZm8q
LCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpOwordXNpbmcgSl9KSVRPcGVyYXRpb25f
R1NzaUpQID0gRW5jb2RlZEpTVmFsdWUoSklUX09QRVJBVElPTl9BVFRSSUJVVEVTICopKEpTR2xv
YmFsT2JqZWN0KiwgU3RydWN0dXJlU3R1YkluZm8qLCBFbmNvZGVkSlNWYWx1ZSwgdWludHB0cl90
KTsKIHVzaW5nIEpfSklUT3BlcmF0aW9uX0dTc2lKSkkgPSBFbmNvZGVkSlNWYWx1ZShKSVRfT1BF
UkFUSU9OX0FUVFJJQlVURVMgKikoSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmVTdHViSW5mbyos
IEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgVW5pcXVlZFN0cmluZ0ltcGwqKTsKIHVz
aW5nIFZfSklUT3BlcmF0aW9uX0dDQ0ogPSB2b2lkKEpJVF9PUEVSQVRJT05fQVRUUklCVVRFUyAq
KShKU0dsb2JhbE9iamVjdCosIEpTQ2VsbCosIEpTQ2VsbCosIEVuY29kZWRKU1ZhbHVlKTsKIHVz
aW5nIEpfSklUT3BlcmF0aW9uX0dTc2lKSSA9IEVuY29kZWRKU1ZhbHVlKEpJVF9PUEVSQVRJT05f
QVRUUklCVVRFUyAqKShKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZVN0dWJJbmZvKiwgRW5jb2Rl
ZEpTVmFsdWUsIFVuaXF1ZWRTdHJpbmdJbXBsKik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L1Byb3BlcnR5QWNjZXNzU2lkZUlubGluZUNhY2hlLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvUHJvcGVydHlBY2Nlc3NTaWRlSW5saW5lQ2FjaGUuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjEzOWQyZGIyNmQ2YTVmZWMyZjFiMDEwNjYwNWQ5ZDFmYjRiNjE0ODcKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Byb3BlcnR5QWNjZXNzU2lkZUlu
bGluZUNhY2hlLmNwcApAQCAtMCwwICsxLDQ1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQcm9w
ZXJ0eUFjY2Vzc1NpZGVJbmxpbmVDYWNoZS5oIgorCisjaWYgRU5BQkxFKEpJVCkgJiYgVVNFKEpT
VkFMVUU2NCkgJiYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCisKKyNpbmNsdWRlICJBY2Nlc3ND
YXNlLmgiCisjaW5jbHVkZSAiQmluYXJ5U3dpdGNoLmgiCisjaW5jbHVkZSAiQ0NhbGxIZWxwZXJz
LmgiCisjaW5jbHVkZSAiQ2FjaGVhYmxlSWRlbnRpZmllcklubGluZXMuaCIKKyNpbmNsdWRlICJD
b2RlQmxvY2suaCIKKyNpbmNsdWRlICJIZWFwLmgiCisjaW5jbHVkZSAiSklULmgiCisjaW5jbHVk
ZSAiTWFjcm9Bc3NlbWJsZXIuaCIKKyNpbmNsdWRlICJQb2x5bW9ycGhpY0FjY2Vzcy5oIgorI2lu
Y2x1ZGUgIlN0cnVjdHVyZS5oIgorI2luY2x1ZGUgIlN0cnVjdHVyZVN0dWJJbmZvLmgiCisjaW5j
bHVkZSA8d3RmL0NvbW1hUHJpbnRlci5oPgorI2luY2x1ZGUgPHd0Zi9MaXN0RHVtcC5oPgorI2lu
Y2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgorCisKK25hbWVzcGFjZSBKU0MgeworCituYW1lc3Bh
Y2UgU2lkZUFjY2Vzc0NhY2hlSW50ZXJuYWwgeworc3RhdGljIGNvbnN0ZXhwciBib29sIHZlcmJv
c2UgPSB0cnVlOworfQorCitzdHJ1Y3QgU2lkZUFjY2Vzc0dlbmVyYXRpb25TdGF0ZSB7CisgICAg
U2lkZUFjY2Vzc0dlbmVyYXRpb25TdGF0ZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QpCisgICAgICAgIDogbV92bSh2bSkKKyAgICAgICAgLCBtX2dsb2JhbE9iamVjdChnbG9i
YWxPYmplY3QpCisgICAgeworICAgIH0KKyAgICBWTSYgbV92bTsKKyAgICBKU0dsb2JhbE9iamVj
dCogbV9nbG9iYWxPYmplY3Q7CisgICAgQ0NhbGxIZWxwZXJzKiBqaXQgeyBudWxscHRyIH07Cisg
ICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHN1Y2Nlc3M7CisgICAgTWFjcm9Bc3NlbWJsZXI6
Okp1bXBMaXN0IHNsb3dQYXRoOworfTsKKworY2xhc3MgU2lkZUFjY2Vzc0Nhc2UgeworcHVibGlj
OgorICAgIGVudW0gU2lkZUFjY2Vzc0FjdGlvbiA6IHVpbnQ4X3QgeworICAgICAgICBIaXQsCisg
ICAgfTsKKworICAgIGVudW0gU2lkZUFjY2Vzc1N0YXRlIDogdWludDhfdCB7CisgICAgICAgIEdl
bmVyYXRlZCwKKyAgICAgICAgQnVmZmVyZWQsCisgICAgfTsKKworICAgIFNpZGVBY2Nlc3NDYXNl
KFN0cnVjdHVyZUlEIHN0cnVjdHVyZSwgQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVyLCBT
aWRlQWNjZXNzQWN0aW9uIHR5cGUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKKyAgICAgICAgOiBt
X3N0cnVjdHVyZUlEKHN0cnVjdHVyZSkKKyAgICAgICAgLCBtX2lkZW50aWZpZXIoaWRlbnRpZmll
cikKKyAgICAgICAgLCBtX3R5cGUodHlwZSkKKyAgICAgICAgLCBtX3N0YXRlKEJ1ZmZlcmVkKQor
ICAgICAgICAsIG1fb2Zmc2V0KG9mZnNldCkKKyAgICB7CisgICAgfQorCisgICAgYm9vbCBjYW5S
ZXBsYWNlKGNvbnN0IFNpZGVBY2Nlc3NDYXNlJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAg
IGlmIChtX3N0cnVjdHVyZUlEICE9IG90aGVyLm1fc3RydWN0dXJlSUQpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICAgICAgaWYgKG1faWRlbnRpZmllciAhPSBvdGhlci5tX2lkZW50
aWZpZXIpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgaWYgKG90aGVyLm1f
dHlwZSAhPSBtX3R5cGUpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgc3dp
dGNoIChtX3R5cGUpIHsKKyAgICAgICAgY2FzZSBIaXQ6CisgICAgICAgICAgICBBU1NFUlQobV9v
ZmZzZXQgPT0gb3RoZXIubV9vZmZzZXQpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKworICAgIHN0ZDo6dW5pcXVlX3B0cjxTaWRlQWNjZXNzQ2FzZT4g
Y2xvbmUoKSBjb25zdAorICAgIHsKKyAgICAgICAgYXV0byByZXN1bHQgPSBzdGQ6Om1ha2VfdW5p
cXVlPFNpZGVBY2Nlc3NDYXNlPigqdGhpcyk7CisgICAgICAgIHJlc3VsdC0+bV9zdGF0ZSA9IEJ1
ZmZlcmVkOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHZvaWQgZHVtcChQ
cmludFN0cmVhbSYgb3V0KSBjb25zdAorICAgIHsKKyAgICAgICAgb3V0LnByaW50KCJTaWRlQWNj
ZXNzQ2FzZSAiLCAodWludDhfdCltX3R5cGUsICI6IHsgIik7CisgICAgICAgIENvbW1hUHJpbnRl
ciBjb21tYTsKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCAic3RhdGUgPSAiLCAodWludDhfdClt
X3N0YXRlKTsKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiaWRlbnQgPSAnIiwgbV9pZGVudGlm
aWVyLCAiJygiLCBSYXdQb2ludGVyKG1faWRlbnRpZmllci51aWQoKSksICIpIik7CisgICAgICAg
IGlmIChpc1ZhbGlkT2Zmc2V0KG1fb2Zmc2V0KSkKKyAgICAgICAgICAgIG91dC5wcmludChjb21t
YSwgIm9mZnNldCA9ICIsIG1fb2Zmc2V0KTsKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCAic3Ry
dWN0dXJlSUQgPSAiLCBSYXdQb2ludGVyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KG1fc3RydWN0
dXJlSUQpKSk7CisgICAgICAgIG91dC5wcmludCgiIH0iKTsKKyAgICB9CisKKyAgICB2b2lkIGdl
bmVyYXRlKFNpZGVBY2Nlc3NHZW5lcmF0aW9uU3RhdGUmIHN0YXRlKQorICAgIHsKKyAgICAgICAg
R1BSUmVnIHN0b3JhZ2VHUFI7CisgICAgICAgIGlmIChpc0lubGluZU9mZnNldChtX29mZnNldCkp
CisgICAgICAgICAgICBzdG9yYWdlR1BSID0gU2lkZVByb3BlcnR5QWNjZXNzUmVnaXN0ZXJzOjpi
YXNlOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHN0YXRlLmppdC0+bG9hZFB0cigKKyAg
ICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoU2lkZVByb3BlcnR5QWNjZXNzUmVn
aXN0ZXJzOjpiYXNlLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLAorICAgICAgICAgICAg
ICAgIFNpZGVQcm9wZXJ0eUFjY2Vzc1JlZ2lzdGVyczo6c2NyYXRjaCk7CisgICAgICAgICAgICBz
dG9yYWdlR1BSID0gU2lkZVByb3BlcnR5QWNjZXNzUmVnaXN0ZXJzOjpzY3JhdGNoOworICAgICAg
ICB9CisKKyAgICAgICAgc3RhdGUuaml0LT5sb2FkNjQoCisgICAgICAgICAgICBDQ2FsbEhlbHBl
cnM6OkFkZHJlc3Moc3RvcmFnZUdQUiwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2UobV9vZmZzZXQpKSwg
U2lkZVByb3BlcnR5QWNjZXNzUmVnaXN0ZXJzOjpyZXN1bHQpOworICAgICAgICBzdGF0ZS5zdWNj
ZXNzLmFwcGVuZChzdGF0ZS5qaXQtPmp1bXAoKSk7CisgICAgfQorCisgICAgYm9vbCB2aXNpdFdl
YWsoVk0mIHZtKSBjb25zdAorICAgIHsKKyAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB2
bS5nZXRTdHJ1Y3R1cmUobV9zdHJ1Y3R1cmVJRCk7CisgICAgICAgIGlmICghdm0uaGVhcC5pc01h
cmtlZChzdHJ1Y3R1cmUpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBTdHJ1Y3R1cmVJRCBtX3N0cnVjdHVyZUlEOworICAgIENh
Y2hlYWJsZUlkZW50aWZpZXIgbV9pZGVudGlmaWVyOworICAgIFNpZGVBY2Nlc3NBY3Rpb24gbV90
eXBlOworICAgIFNpZGVBY2Nlc3NTdGF0ZSBtX3N0YXRlOworICAgIFByb3BlcnR5T2Zmc2V0IG1f
b2Zmc2V0OworCit9OworCitjbGFzcyBTaWRlQWNjZXNzSklUU3R1YlJvdXRpbmU6IHB1YmxpYyBH
Q0F3YXJlSklUU3R1YlJvdXRpbmUgeworcHVibGljOgorICAgIHVzaW5nIEJhc2UgPSBHQ0F3YXJl
SklUU3R1YlJvdXRpbmU7CisKKyAgICBTaWRlQWNjZXNzSklUU3R1YlJvdXRpbmUoY29uc3QgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiYgY29kZSwgVk0mLCBGaXhl
ZFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8U2lkZUFjY2Vzc0Nhc2U+PiYmIGNhc2VzKQorICAgICAg
ICA6IEdDQXdhcmVKSVRTdHViUm91dGluZShjb2RlKQorICAgICAgICAsIG1fY2FzZXMoV1RGTW92
ZShjYXNlcykpCisgICAgeworICAgIH0KKworICAgIGNvbnN0IEZpeGVkVmVjdG9yPHN0ZDo6dW5p
cXVlX3B0cjxTaWRlQWNjZXNzQ2FzZT4+JiBjYXNlcygpIGNvbnN0IHsgcmV0dXJuIG1fY2FzZXM7
IH0KKworcHJpdmF0ZToKKyAgICBGaXhlZFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8U2lkZUFjY2Vz
c0Nhc2U+PiBtX2Nhc2VzOworfTsKKworY2xhc3MgU2lkZUFjY2Vzc0Nhc2VHcm91cCB7CitwdWJs
aWM6CisKKyAgICBTaWRlQWNjZXNzQ2FzZUdyb3VwKFN0cnVjdHVyZUlEIHN0cnVjdHVyZSkKKyAg
ICAgICAgOiBtX3N0cnVjdHVyZUlEKHN0cnVjdHVyZSkKKyAgICAgICAgLCBidWZmZXJpbmdDb3Vu
dGRvd24oT3B0aW9uczo6cmVwYXRjaEJ1ZmZlcmluZ0NvdW50ZG93bigpKQorICAgIHsKKyAgICB9
CisKKyAgICBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0IHJlZ2VuZXJhdGUoY29uc3QgR0NTYWZlQ29u
Y3VycmVudEpTTG9ja2VyJiwgVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBD
b2RlQmxvY2sqIGNvZGVCbG9jaykKKyAgICB7CisgICAgICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9w
dHI8U2lkZUFjY2Vzc0Nhc2U+PiBjYXNlczsKKyAgICAgICAgU2lkZUFjY2Vzc0dlbmVyYXRpb25T
dGF0ZSBzdGF0ZSh2bSwgZ2xvYmFsT2JqZWN0KTsKKworICAgICAgICB1bnNpZ25lZCBzcmNJbmRl
eCA9IDA7CisgICAgICAgIHVuc2lnbmVkIGRzdEluZGV4ID0gMDsKKyAgICAgICAgd2hpbGUgKHNy
Y0luZGV4IDwgbV9saXN0LnNpemUoKSkgeworICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFNp
ZGVBY2Nlc3NDYXNlPiBzb21lQ2FzZSA9IFdURk1vdmUobV9saXN0W3NyY0luZGV4KytdKTsKKwor
ICAgICAgICAgICAgLy8gSWYgdGhlIGNhc2UgaGFkIGJlZW4gZ2VuZXJhdGVkLCB0aGVuIHdlIGhh
dmUgdG8ga2VlcCB0aGUgb3JpZ2luYWwgaW4gbV9saXN0IGluIGNhc2Ugd2UKKyAgICAgICAgICAg
IC8vIGZhaWwgdG8gcmVnZW5lcmF0ZS4gVGhhdCBjYXNlIG1heSBoYXZlIGRhdGEgc3RydWN0dXJl
cyB0aGF0IGFyZSB1c2VkIGJ5IHRoZSBjb2RlIHRoYXQgaXQKKyAgICAgICAgICAgIC8vIGhhZCBn
ZW5lcmF0ZWQuIElmIHRoZSBjYXNlIGhhZCBub3QgYmVlbiBnZW5lcmF0ZWQsIHRoZW4gd2Ugd2Fu
dCB0byByZW1vdmUgaXQgZnJvbSBtX2xpc3QuCisgICAgICAgICAgICBib29sIGlzR2VuZXJhdGVk
ID0gc29tZUNhc2UtPm1fc3RhdGUgPT0gU2lkZUFjY2Vzc0Nhc2U6OkdlbmVyYXRlZDsKKyAgICAg
ICAgICAgIGJvb2wgaXNSZWR1bmRhbnQgPSBmYWxzZTsKKworICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBqID0gc3JjSW5kZXg7IGogPCBtX2xpc3Quc2l6ZSgpOyArK2opIHsKKyAgICAgICAgICAg
ICAgICBpZiAobV9saXN0W2pdLT5jYW5SZXBsYWNlKCpzb21lQ2FzZSkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgaXNSZWR1bmRhbnQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghaXNS
ZWR1bmRhbnQpIHsKKyAgICAgICAgICAgICAgICBpZiAoaXNHZW5lcmF0ZWQpIHsKKyAgICAgICAg
ICAgICAgICAgICAgY2FzZXMuYXBwZW5kKHNvbWVDYXNlLT5jbG9uZSgpKTsKKyAgICAgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBjYXNlcy5hcHBlbmQoV1RGTW92ZShz
b21lQ2FzZSkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgaWYgKGlzR2VuZXJhdGVkKQorICAgICAgICAgICAgICAgIG1fbGlzdFtkc3RJbmRleCsrXSA9
IFdURk1vdmUoc29tZUNhc2UpOworCisgICAgICAgIH0KKyAgICAgICAgbV9saXN0LnJlc2l6ZShk
c3RJbmRleCk7CisKKyAgICAgICAgZGF0YUxvZ0xuSWYoU2lkZUFjY2Vzc0NhY2hlSW50ZXJuYWw6
OnZlcmJvc2UsICJyZWdlbmVyYXRpbmcgd2l0aCBjYXNlczogIiwgbGlzdER1bXAoY2FzZXMpKTsK
KworICAgICAgICBpZiAoY2FzZXMuaXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0dXJuIEFjY2Vz
c0dlbmVyYXRpb25SZXN1bHQ6Ok1hZGVOb0NoYW5nZXM7CisKKyAgICAgICAgYm9vbCBnZW5lcmF0
ZWRGaW5hbENvZGUgPSBmYWxzZTsKKyAgICAgICAgVmVjdG9yPEpTQ2VsbCo+IGNlbGxzVG9NYXJr
OworICAgICAgICB1bnNpZ25lZCBpbmRleCA9IDA7CisgICAgICAgIGZvciAoYXV0byYgZW50cnkg
OiBjYXNlcykgeworICAgICAgICAgICAgc3dpdGNoIChlbnRyeS0+bV90eXBlKSB7CisgICAgICAg
ICAgICBjYXNlIFNpZGVBY2Nlc3NDYXNlOjpIaXQ6CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICsr
aW5kZXg7CisgICAgICAgIH0KKworICAgICAgICBhdXRvIGZpbmlzaENvZGVHZW5lcmF0aW9uID0g
WyZdKHN0ZDo6dW5pcXVlX3B0cjxTaWRlQWNjZXNzSklUU3R1YlJvdXRpbmU+JiYgc3R1Yikgewor
ICAgICAgICAgICAgbV9zdHViUm91dGluZSA9IFdURk1vdmUoc3R1Yik7CisgICAgICAgICAgICBt
X2xpc3QgPSBXVEZNb3ZlKGNhc2VzKTsKKyAgICAgICAgICAgIG1fbGlzdC5zaHJpbmtUb0ZpdCgp
OworCisgICAgICAgICAgICBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0OjpLaW5kIHJlc3VsdEtpbmQ7
CisgICAgICAgICAgICBpZiAobV9saXN0LnNpemUoKSA+PSBPcHRpb25zOjptYXhBY2Nlc3NWYXJp
YW50TGlzdFNpemUoKSB8fCBnZW5lcmF0ZWRGaW5hbENvZGUpCisgICAgICAgICAgICAgICAgcmVz
dWx0S2luZCA9IEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQ6OkdlbmVyYXRlZEZpbmFsQ29kZTsKKyAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZXN1bHRLaW5kID0gQWNjZXNzR2VuZXJh
dGlvblJlc3VsdDo6R2VuZXJhdGVkTmV3Q29kZTsKKworICAgICAgICAgICAgcmV0dXJuIEFjY2Vz
c0dlbmVyYXRpb25SZXN1bHQocmVzdWx0S2luZCwgbV9zdHViUm91dGluZS0+Y29kZSgpLmNvZGUo
KSk7CisgICAgICAgIH07CisKKyAgICAgICAgQ0NhbGxIZWxwZXJzIGppdChjb2RlQmxvY2spOwor
ICAgICAgICBzdGF0ZS5qaXQgPSAmaml0OworICAgICAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygp
OworCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IFNp
ZGVQcm9wZXJ0eUFjY2Vzc1JlZ2lzdGVyczo6YmFzZTsKKyAgICAgICAgICAgIGNvbnN0ZXhwciBH
UFJSZWcgcmVzdWx0R1BSID0gU2lkZVByb3BlcnR5QWNjZXNzUmVnaXN0ZXJzOjpyZXN1bHQ7Cisg
ICAgICAgICAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gU2lkZVByb3BlcnR5QWNj
ZXNzUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICAgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1
YkluZm9HUFIgPSBTaWRlUHJvcGVydHlBY2Nlc3NSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgICAg
ICAgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoR1BSID0gU2lkZVByb3BlcnR5QWNjZXNzUmVn
aXN0ZXJzOjpzY3JhdGNoOworCisgICAgICAgICAgICBBU1NFUlQoIWNhc2VzLmlzRW1wdHkoKSk7
CisgICAgICAgICAgICBqaXQubG9hZDMyKAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6
QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLAorICAgICAgICAg
ICAgICAgIHNjcmF0Y2hHUFIpOworCisgICAgICAgICAgICBzdGF0ZS5zbG93UGF0aC5hcHBlbmQo
CisgICAgICAgICAgICAgICAgIGppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCBz
Y3JhdGNoR1BSLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihtX3N0cnVjdHVyZUlEKSkpOwor
CisgICAgICAgICAgICBWZWN0b3I8aW50NjRfdD4gY2FzZVZhbHVlcyhjYXNlcy5zaXplKCkpOwor
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNhc2VzLnNpemUoKTsgKytpKQor
ICAgICAgICAgICAgICAgIGNhc2VWYWx1ZXNbaV0gPSBjYXNlc1tpXS0+bV9pZGVudGlmaWVyLnJh
d0JpdHMoKTsKKworICAgICAgICAgICAgQmluYXJ5U3dpdGNoIGJpbmFyeVN3aXRjaChwcm9wZXJ0
eUdQUiwgY2FzZVZhbHVlcywgQmluYXJ5U3dpdGNoOjpJbnRQdHIpOworICAgICAgICAgICAgd2hp
bGUgKGJpbmFyeVN3aXRjaC5hZHZhbmNlKGppdCkpCisgICAgICAgICAgICAgICAgY2FzZXNbYmlu
YXJ5U3dpdGNoLmNhc2VJbmRleCgpXS0+Z2VuZXJhdGUoc3RhdGUpOworICAgICAgICAgICAgc3Rh
dGUuc2xvd1BhdGguYXBwZW5kKGJpbmFyeVN3aXRjaC5mYWxsVGhyb3VnaCgpKTsKKworICAgICAg
ICAgICAgc3RhdGUuc3VjY2Vzcy5saW5rKCZqaXQpOworICAgICAgICAgICAgaml0LnJldCgpOwor
CisgICAgICAgICAgICBzdGF0ZS5zbG93UGF0aC5saW5rKCZqaXQpOworCisgICAgICAgICAgICBz
dGF0aWNfYXNzZXJ0KEZ1bmN0aW9uVHJhaXRzPGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5SWRPcHRp
bWl6ZSk+Ojphcml0eSA8IEdQUkluZm86Om51bWJlck9mQXJndW1lbnRSZWdpc3RlcnMsICJUaGlz
IGNhbGwgYXNzdW1lcyB0aGF0IHdlIGRvbid0IHBhc3MgYXJndW1lbnRzIG9uIHRoZSBzdGFjay4i
KTsKKyAgICAgICAgICAgIHN0YXRpY19hc3NlcnQoR1BSSW5mbzo6bm9uQXJnR1BSMCAhPSBiYXNl
R1BSKTsKKyAgICAgICAgICAgIHN0YXRpY19hc3NlcnQoR1BSSW5mbzo6bm9uQXJnR1BSMCAhPSBw
cm9wZXJ0eUdQUik7CisgICAgICAgICAgICBqaXQubW92ZShzdHViSW5mb0dQUiwgR1BSSW5mbzo6
bm9uQXJnR1BSMCk7CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYXV0byBzdHViSW5m
b0dQUiA9IEdQUkluZm86Om5vbkFyZ0dQUjA7CisgICAgICAgICAgICAgICAgaml0LnNldHVwQXJn
dW1lbnRzPGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk+KENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbVB0cihnbG9iYWxPYmplY3QpLCBzdHViSW5mb0dQUiwgYmFzZUdQUiwgcHJvcGVy
dHlHUFIpOworICAgICAgICAgICAgICAgIGppdC5wcmVwYXJlQ2FsbE9wZXJhdGlvbih2bSk7Cisg
ICAgICAgICAgICAgICAgLy8gdGFpbCBjYWxsCisgICAgICAgICAgICAgICAgaml0LnVudGFnUmV0
dXJuQWRkcmVzcygpOworICAgICAgICAgICAgICAgIGppdC5mYXJKdW1wKENDYWxsSGVscGVyczo6
QWRkcmVzcyhzdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJh
dGlvbigpKSwgT3BlcmF0aW9uUHRyVGFnKTsKKyAgICAgICAgICAgICAgICBzdGF0aWNfYXNzZXJ0
KEdQUkluZm86OnJldHVyblZhbHVlR1BSID09IHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAg
aml0LmJyZWFrcG9pbnQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIExp
bmtCdWZmZXIgbGlua0J1ZmZlcihqaXQsIGNvZGVCbG9jaywgTGlua0J1ZmZlcjo6UHJvZmlsZTo6
SW5saW5lQ2FjaGUsIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7CisgICAgICAgIGlmIChsaW5rQnVm
ZmVyLmRpZEZhaWxUb0FsbG9jYXRlKCkpIHsKKyAgICAgICAgICAgIGRhdGFMb2dMbklmKFNpZGVB
Y2Nlc3NDYWNoZUludGVybmFsOjp2ZXJib3NlLCAiRGlkIGZhaWwgdG8gYWxsb2NhdGUuIik7Cisg
ICAgICAgICAgICByZXR1cm4gQWNjZXNzR2VuZXJhdGlvblJlc3VsdDo6R2F2ZVVwOworICAgICAg
ICB9CisKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFN0dWJSb3V0aW5lUHRyVGFn
PiBjb2RlID0gRklOQUxJWkVfQ09ERV9GT1IoCisgICAgICAgICAgICBjb2RlQmxvY2ssIGxpbmtC
dWZmZXIsIEpJVFN0dWJSb3V0aW5lUHRyVGFnLAorICAgICAgICAgICAgIiVzIiwgdG9DU3RyaW5n
KCJTaWRlIEFjY2VzcyBzdHViIGZvciAiLCAqY29kZUJsb2NrLCAiIFN0cnVjdHVyZSgiLCBtX3N0
cnVjdHVyZUlELCAiKTogIikuZGF0YSgpKTsKKworICAgICAgICBhdXRvIHN0dWIgPSBzdGQ6Om1h
a2VfdW5pcXVlPFNpZGVBY2Nlc3NKSVRTdHViUm91dGluZT4oY29kZSwgdm0sIEZpeGVkVmVjdG9y
PHN0ZDo6dW5pcXVlX3B0cjxTaWRlQWNjZXNzQ2FzZT4+eyBXVEZNb3ZlKGNhc2VzKSB9KTsKKyAg
ICAgICAgc3R1Yi0+bWFrZUdDQXdhcmUodm0pOworCisgICAgICAgIHJldHVybiBmaW5pc2hDb2Rl
R2VuZXJhdGlvbihXVEZNb3ZlKHN0dWIpKTsKKyAgICB9CisKKyAgICBBY2Nlc3NHZW5lcmF0aW9u
UmVzdWx0IGFkZENhc2VzKGNvbnN0IEdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlciYgbG9ja2VyLCBW
TSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jayogY29kZUJsb2Nr
LCBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPFNpZGVBY2Nlc3NDYXNlPj4gb3JpZ2luYWxDYXNlc1Rv
QWRkKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHZtLmhlYXAuaXNEZWZlcnJlZCgpKTsKKyAgICAg
ICAgCisgICAgICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8U2lkZUFjY2Vzc0Nhc2U+PiBjYXNl
c1RvQWRkOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgb3JpZ2luYWxDYXNlc1Rv
QWRkLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8U2lkZUFjY2Vz
c0Nhc2U+IG15Q2FzZSA9IFdURk1vdmUob3JpZ2luYWxDYXNlc1RvQWRkW2ldKTsKKworICAgICAg
ICAgICAgLy8gQWRkIGl0IG9ubHkgaWYgaXQgaXMgbm90IHJlcGxhY2VkIGJ5IHRoZSBzdWJzZXF1
ZW50IGNhc2VzIGluIHRoZSBsaXN0LgorICAgICAgICAgICAgYm9vbCBmb3VuZCA9IGZhbHNlOwor
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gaSArIDE7IGogPCBvcmlnaW5hbENhc2VzVG9B
ZGQuc2l6ZSgpOyArK2opIHsKKyAgICAgICAgICAgICAgICBpZiAob3JpZ2luYWxDYXNlc1RvQWRk
W2pdLT5jYW5SZXBsYWNlKCpteUNhc2UpKSB7CisgICAgICAgICAgICAgICAgICAgIGZvdW5kID0g
dHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoZm91bmQpCisgICAgICAgICAgICAgICAgY29u
dGludWU7CisKKyAgICAgICAgICAgIGNhc2VzVG9BZGQuYXBwZW5kKFdURk1vdmUobXlDYXNlKSk7
CisgICAgICAgIH0KKworICAgICAgICBkYXRhTG9nTG5JZihTaWRlQWNjZXNzQ2FjaGVJbnRlcm5h
bDo6dmVyYm9zZSwgIkFkZGluZyBjYXNlczogIiwgbGlzdER1bXAoY2FzZXNUb0FkZCkpOworCisg
ICAgICAgIGlmIChjYXNlc1RvQWRkLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybiBBY2Nl
c3NHZW5lcmF0aW9uUmVzdWx0OjpHYXZlVXA7CisKKyAgICAgICAgZm9yIChhdXRvJiBjYXNlVG9B
ZGQgOiBjYXNlc1RvQWRkKSB7CisgICAgICAgICAgICBtX2xpc3QuYXBwZW5kKFdURk1vdmUoY2Fz
ZVRvQWRkKSk7CisgICAgICAgIH0KKworICAgICAgICBkYXRhTG9nTG5JZihTaWRlQWNjZXNzQ2Fj
aGVJbnRlcm5hbDo6dmVyYm9zZSwgIkJ1ZmZlcmluZyBDb3VudGRvd246ICIsIGJ1ZmZlcmluZ0Nv
dW50ZG93bik7CisgICAgICAgIGJ1ZmZlcmluZ0NvdW50ZG93bi0tOworCisgICAgICAgIGlmIChi
dWZmZXJpbmdDb3VudGRvd24pCisgICAgICAgICAgICByZXR1cm4gQWNjZXNzR2VuZXJhdGlvblJl
c3VsdDo6QnVmZmVyZWQ7CisKKyAgICAgICAgYXV0byByZXN1bHQgPSByZWdlbmVyYXRlKGxvY2tl
ciwgdm0sIGdsb2JhbE9iamVjdCwgY29kZUJsb2NrKTsKKworICAgICAgICBSRUxFQVNFX0FTU0VS
VCghcmVzdWx0LmJ1ZmZlcmVkKCkpOworICAgICAgICBidWZmZXJpbmdDb3VudGRvd24gPSBPcHRp
b25zOjpyZXBhdGNoQnVmZmVyaW5nQ291bnRkb3duKCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7
CisgICAgfQorCisgICAgQWNjZXNzR2VuZXJhdGlvblJlc3VsdCB0cnlDYWNoZUdldEJ5SWQoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwKKyAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUs
IEpTQ2VsbCogYmFzZUNlbGwsIENhY2hlYWJsZUlkZW50aWZpZXIgcHJvcGVydHlOYW1lLAorICAg
ICAgICBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QsIENvZGVCbG9jayogY29kZUJsb2NrKQorICAg
IHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoT3B0aW9uczo6dXNlUHJvcGVydHlBY2Nlc3NTaWRl
SUMoKSk7CisgICAgICAgIEFTU0VSVChtX3N0cnVjdHVyZUlEID09IHN0cnVjdHVyZS0+aWQoKSk7
CisgICAgICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICAgICAgQWNjZXNzR2Vu
ZXJhdGlvblJlc3VsdCByZXN1bHQ7CisKKyAgICAgICAgeworICAgICAgICAgICAgR0NTYWZlQ29u
Y3VycmVudEpTTG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9jaywgZ2xvYmFsT2JqZWN0LT52
bSgpLmhlYXApOworCisgICAgICAgICAgICBpZiAoIXNsb3QuaXNDYWNoZWFibGUoKSB8fCBzbG90
LmlzVW5zZXQoKSB8fCAhc2xvdC5pc0NhY2hlYWJsZVZhbHVlKCkKKyAgICAgICAgICAgICAgICB8
fCBzbG90LnNsb3RCYXNlKCkgIT0gYmFzZUNlbGwgfHwgc2xvdC53YXRjaHBvaW50U2V0KCkgfHwg
c3RydWN0dXJlLT5uZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQ6OkdhdmVVcDsKKyAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKGJhc2VDZWxsLT50eXBlKCkgIT0gUHVyZUZvcndhcmRpbmdQcm94eVR5cGUp
OworCisgICAgICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzbG90LmlzVW5zZXQoKSA/
IGludmFsaWRPZmZzZXQgOiBzbG90LmNhY2hlZE9mZnNldCgpOworICAgICAgICAgICAgVmVjdG9y
PHN0ZDo6dW5pcXVlX3B0cjxTaWRlQWNjZXNzQ2FzZT4+IG5ld0Nhc2VzOworICAgICAgICAgICAg
bmV3Q2FzZXMuYXBwZW5kKHN0ZDo6bWFrZV91bmlxdWU8U2lkZUFjY2Vzc0Nhc2U+KG1fc3RydWN0
dXJlSUQsIHByb3BlcnR5TmFtZSwgU2lkZUFjY2Vzc0Nhc2U6OkhpdCwgb2Zmc2V0KSk7CisKKyAg
ICAgICAgICAgIHJlc3VsdCA9IGFkZENhc2VzKGxvY2tlciwgdm0sIGdsb2JhbE9iamVjdCwgY29k
ZUJsb2NrLCBXVEZNb3ZlKG5ld0Nhc2VzKSk7CisKKyAgICAgICAgICAgIGlmIChyZXN1bHQuZ2Vu
ZXJhdGVkU29tZUNvZGUoKSkgeworICAgICAgICAgICAgICAgIGRhdGFMb2dMbklmKFNpZGVBY2Nl
c3NDYWNoZUludGVybmFsOjp2ZXJib3NlLCAidHJ5Q2FjaGVHZXRCeUlkIGdlbmVyYXRlZCBzb21l
IGNvZGUiKTsKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQuY29kZSgpKTsK
KyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgfQorICAgICAgICB9
CisKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoIXJlc3VsdC5zaG91bGRSZXNldFN0dWJBbmRGaXJl
V2F0Y2hwb2ludHMoKSk7CisKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBi
b29sIHZpc2l0V2VhayhWTSYgdm0pIGNvbnN0CisgICAgeworICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbV9saXN0LnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBpZiAoIW1fbGlz
dFtpXS0+dmlzaXRXZWFrKHZtKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIH0KKyAgICAgICAgaWYgKG1fc3R1YlJvdXRpbmUpIHsKKyAgICAgICAgICAgIGlmICghbV9z
dHViUm91dGluZS0+dmlzaXRXZWFrKHZtKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCitwcml2YXRlOgorICAg
IFN0cnVjdHVyZUlEIG1fc3RydWN0dXJlSUQ7CisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxT
aWRlQWNjZXNzQ2FzZT4+IG1fbGlzdDsKKworICAgIHVpbnQ4X3QgYnVmZmVyaW5nQ291bnRkb3du
OworICAgIHN0ZDo6dW5pcXVlX3B0cjxTaWRlQWNjZXNzSklUU3R1YlJvdXRpbmU+IG1fc3R1YlJv
dXRpbmU7Cit9OworCitQcm9wZXJ0eUFjY2Vzc1NpZGVJbmxpbmVDYWNoZTo6UHJvcGVydHlBY2Nl
c3NTaWRlSW5saW5lQ2FjaGUoVk0mIHZtKQorICAgIDogbV92bSgmdm0pCit7Cit9CisKK1Byb3Bl
cnR5QWNjZXNzU2lkZUlubGluZUNhY2hlOjp+UHJvcGVydHlBY2Nlc3NTaWRlSW5saW5lQ2FjaGUo
KQoreworfQorCit2b2lkIFByb3BlcnR5QWNjZXNzU2lkZUlubGluZUNhY2hlOjpvYnNlcnZlU3Ry
dWN0dXJlR2V0QnlJZChib29sIGlzSGl0LCBjb25zdCBKU1ZhbHVlIGJhc2VWYWx1ZSwKKyAgICBj
b25zdCBDYWNoZWFibGVJZGVudGlmaWVyJiBpZGVudGlmaWVyLCBjb25zdCBQcm9wZXJ0eVNsb3Qm
IHNsb3QsIENvZGVCbG9jayogY29kZUJsb2NrKQoreworICAgIGlmICghT3B0aW9uczo6dXNlUHJv
cGVydHlBY2Nlc3NTaWRlSUMoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUgPSBiYXNlVmFsdWUuc3RydWN0dXJlT3JOdWxsKCptX3ZtKTsKKworICAgIGlmICgh
aXNIaXQgfHwgIXN0cnVjdHVyZSB8fCBiYXNlVmFsdWUgIT0gc2xvdC5zbG90QmFzZSgpIHx8ICFz
bG90LmlzQ2FjaGVhYmxlKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGRhdGFMb2dMbklmKFNp
ZGVBY2Nlc3NDYWNoZUludGVybmFsOjp2ZXJib3NlLCAiT2JzZXJ2ZWQgc2ltcGxlIGhpdCBvbiAi
LCBpZGVudGlmaWVyLCAiIG9uICIsIFJhd1BvaW50ZXIoc3RydWN0dXJlKSk7CisKKyAgICBpZiAo
IW1fc2VlblN0cnVjdHVyZXMuY29udGFpbnMoc3RydWN0dXJlLT5pZCgpKSkKKyAgICAgICAgbV9z
ZWVuU3RydWN0dXJlcy5hZGQoc3RydWN0dXJlLT5pZCgpLCBzdGQ6Om1ha2VfdW5pcXVlPFNpZGVB
Y2Nlc3NDYXNlR3JvdXA+KHN0cnVjdHVyZS0+aWQoKSkpOworCisgICAgYXV0byByZXN1bHQgPSBt
X3NlZW5TdHJ1Y3R1cmVzLmdldChzdHJ1Y3R1cmUtPmlkKCkpLT50cnlDYWNoZUdldEJ5SWQoc3Ry
dWN0dXJlLT5nbG9iYWxPYmplY3QoKSwgc3RydWN0dXJlLCBiYXNlVmFsdWUuYXNDZWxsKCksIGlk
ZW50aWZpZXIsIHNsb3QsIGNvZGVCbG9jayk7CisKKyAgICBpZiAocmVzdWx0LmdlbmVyYXRlZFNv
bWVDb2RlKCkpIHsKKyAgICAgICAgZGF0YUxvZ0xuSWYoU2lkZUFjY2Vzc0NhY2hlSW50ZXJuYWw6
OnZlcmJvc2UsICJQYXRoY2hpbmcgIiwgc3RydWN0dXJlLT5pZCgpLCAiIGFuZCAiLCBpZGVudGlm
aWVyLCAiIHRvICIsIFJhd1BvaW50ZXIocmVzdWx0LmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygp
KSk7CisgICAgICAgIG1fZ2V0QnlJZEp1bXBUYWJsZVtidWNrZXRGb3Ioc3RydWN0dXJlLT5pZCgp
LCBpZGVudGlmaWVyLnVpZCgpKV0gPSBGdW5jdGlvblB0cjxKSVRTdHViUm91dGluZVB0clRhZz4o
cmVzdWx0LmNvZGUoKSk7CisgICAgfSBlbHNlIGlmIChyZXN1bHQuc2hvdWxkR2l2ZVVwTm93KCkp
IHsKKyAgICAgICAgZGF0YUxvZ0xuSWYoU2lkZUFjY2Vzc0NhY2hlSW50ZXJuYWw6OnZlcmJvc2Us
ICJTaG91bGQgZ2l2ZSB1cCBvbiAiLCBpZGVudGlmaWVyLCAiIG9uICIsIFJhd1BvaW50ZXIoc3Ry
dWN0dXJlKSk7CisgICAgICAgIG1fZ2V0QnlJZEp1bXBUYWJsZVtidWNrZXRGb3Ioc3RydWN0dXJl
LT5pZCgpLCBpZGVudGlmaWVyLnVpZCgpKV0gPSBudWxscHRyOworICAgIH0KK30KKworfSAvLyBu
YW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoSklUKQorCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L1Byb3BlcnR5QWNjZXNzU2lkZUlubGluZUNhY2hlLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Byb3BlcnR5QWNjZXNzU2lkZUlubGluZUNhY2hlLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uZTgwYzUzZDRhYTQ0NThlNjRjOTYzNjJlZmU1NmIyZDgzNzM4YjYzMAotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUHJvcGVydHlBY2Nlc3NT
aWRlSW5saW5lQ2FjaGUuaApAQCAtMCwwICsxLDcwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoSklUKSAm
JiBVU0UoSlNWQUxVRTY0KQorCisjaW5jbHVkZSAiQ2FjaGVhYmxlSWRlbnRpZmllci5oIgorI2lu
Y2x1ZGUgIkpTQ0pTVmFsdWUuaCIKKyNpbmNsdWRlICJSZWdpc3RlclNldC5oIgorI2luY2x1ZGUg
IlN0cnVjdHVyZUlEVGFibGUuaCIKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFj
ZSBKU0MgeworCitjbGFzcyBDb2RlQmxvY2s7CitjbGFzcyBTaWRlQWNjZXNzQ2FzZUdyb3VwOwor
Y2xhc3MgU3RydWN0dXJlOworY2xhc3MgUHJvcGVydHlTbG90OworCitjbGFzcyBQcm9wZXJ0eUFj
Y2Vzc1NpZGVJbmxpbmVDYWNoZSB7CitwdWJsaWM6CisgICAgUHJvcGVydHlBY2Nlc3NTaWRlSW5s
aW5lQ2FjaGUoVk0mIHZtKTsKKyAgICB+UHJvcGVydHlBY2Nlc3NTaWRlSW5saW5lQ2FjaGUoKTsK
KworICAgIHZvaWQgb2JzZXJ2ZVN0cnVjdHVyZUdldEJ5SWQoYm9vbCBpc0hpdCwgY29uc3QgSlNW
YWx1ZSBiYXNlLCBjb25zdCBDYWNoZWFibGVJZGVudGlmaWVyJiBpZGVudGlmaWVyLCBjb25zdCBQ
cm9wZXJ0eVNsb3QmIHNsb3QsIENvZGVCbG9jayogY29kZUJsb2NrKTsKKyAgICB2b2lkKiBqdW1w
VGFibGUoKSB7IHJldHVybiByZWludGVycHJldF9jYXN0PHZvaWQqPigmbV9nZXRCeUlkSnVtcFRh
YmxlWzBdKTsgfQorICAgIAorcHJpdmF0ZToKKyAgICBWTSogbV92bTsKKworICAgIHN0YXRpYyBz
aXplX3QgYnVja2V0Rm9yKFN0cnVjdHVyZUlEIHNpZCwgY29uc3QgVW5pcXVlZFN0cmluZ0ltcGwq
IGlkZW50aWZpZXIpCisgICAgeworICAgICAgICAvLyB1aGgsIGhlbHA/CisgICAgICAgICh2b2lk
KSBzaWQ7CisgICAgICAgICh2b2lkKSBpZGVudGlmaWVyOworICAgICAgICByZXR1cm4gMDsKKyAg
ICB9CisKKyAgICBWZWN0b3I8RnVuY3Rpb25QdHI8SklUU3R1YlJvdXRpbmVQdHJUYWc+PiBtX2dl
dEJ5SWRKdW1wVGFibGUgezEsIG51bGxwdHJ9OworICAgIEhhc2hNYXA8U3RydWN0dXJlSUQsIHN0
ZDo6dW5pcXVlX3B0cjxTaWRlQWNjZXNzQ2FzZUdyb3VwPj4gbV9zZWVuU3RydWN0dXJlczsKKwor
ICAgIGZyaWVuZCBjbGFzcyBTaWRlR2V0QnlJZEdlbmVyYXRvcjsKK307CisKK30gLy8gbmFtZXNw
YWNlIEpTQworCisjZW5kaWYgLy8gRU5BQkxFKEpJVCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9PcHRpb25zTGlzdC5oCmluZGV4IDU0MDFmZjM4MzFkODY1MDcxNTViMTkzMjRiZTM5
N2ZmYmQzM2Q5MzQuLjA0ZDFhZTMzZTBkNzk5OWI5MTUzNWRiZjc3NTgwNmFlNGZmYTc3NGQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaApAQCAtNTMyLDYg
KzUzMiw3IEBAIGJvb2wgY2FuVXNlV2ViQXNzZW1ibHlGYXN0TWVtb3J5KCk7CiAgICAgdihCb29s
LCB1c2VEYXRhSUNJbk9wdGltaXppbmdKSVQsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKICAg
ICB2KEJvb2wsIHVzZURhdGFJQ1NoYXJpbmcsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKICAg
ICB2KEJvb2wsIHVzZUJhc2VsaW5lSklUQ29kZVNoYXJpbmcsIHRydWUsIE5vcm1hbCwgbnVsbHB0
cikgXAorICAgIHYoQm9vbCwgdXNlUHJvcGVydHlBY2Nlc3NTaWRlSUMsIGZhbHNlLCBOb3JtYWws
IG51bGxwdHIpIFwKICAgICBcCiAgICAgLyogRmVhdHVyZSBGbGFncyAqL1wKICAgICBcCmRpZmYg
LS1naXQgYS9KU1Rlc3RzL0NoYW5nZUxvZyBiL0pTVGVzdHMvQ2hhbmdlTG9nCmluZGV4IDQ3NzQz
OTQ0NGVjNDgxYjdjZGNiZDE0MjA1NDA5MTIwZTZmZTYzNGQuLmIwNDk5YzFjOTFmNzFmNzMyNDFm
OTgxZmE1YzFmZjcwZmM0NTBjOGEgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvQ2hhbmdlTG9nCisrKyBi
L0pTVGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIwMjEtMTAtMDcgIEp1c3RpbiBN
aWNoYXVkICA8anVzdGluX21pY2hhdWRAYXBwbGUuY29tPgorCisgICAgICAgIENvbnNpZGVyIGdl
bmVyYXRpbmcgaW5saW5lIGNhY2hlcyBwZXItc3RydWN0dXJlIGJlZm9yZSB0aGUgcGVyLWNhbGxz
aXRlIGNhY2hlIGlzIGdlbmVyYXRlZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjMxMzk4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBzdHJlc3MvZ2V0LWJ5LWlkLXVudHlwZWQuanM6CisKIDIwMjEtMDkt
MjkgIFNhYW0gQmFyYXRpICA8c2JhcmF0aUBhcHBsZS5jb20+CiAKICAgICAgICAgQ29kZSBpbnNp
ZGUgc3RyZW5ndGggcmVkdWN0aW9uIGNhbiBpbmNvcnJlY3RseSBwcm92ZSB0aGF0IHdlIGtub3cg
d2hhdCBsYXN0SW5kZXggaXMKZGlmZiAtLWdpdCBhL0pTVGVzdHMvc3RyZXNzL2dldC1ieS1pZC11
bnR5cGVkLmpzIGIvSlNUZXN0cy9zdHJlc3MvZ2V0LWJ5LWlkLXVudHlwZWQuanMKaW5kZXggODk5
NWQ4MDE1ZGMxOTE0MjRmNmQwYzMxYmFmMWJkZTdkMTBkNzAyNi4uYjZiNTNlNjdiNGY5YzE4MWVm
Y2UzYzg1OGRmZjYyNGM2MjM1YTI4OSAxMDA2NDQKLS0tIGEvSlNUZXN0cy9zdHJlc3MvZ2V0LWJ5
LWlkLXVudHlwZWQuanMKKysrIGIvSlNUZXN0cy9zdHJlc3MvZ2V0LWJ5LWlkLXVudHlwZWQuanMK
QEAgLTE5LDMgKzE5LDkgQEAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDA7ICsraSkgewogICAg
ICAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQgZm9yIG9iamVjdDogIiArIHJlc3VsdDsKIH0K
IAorZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDA7ICsraSkgeworICAgIHJlc3VsdCA9IGZvbyh7
Zjo4NH0pOworICAgIGlmIChyZXN1bHQgIT0gODQpCisgICAgICAgIHRocm93ICJFcnJvcjogYmFk
IHJlc3VsdCBmb3Igb2JqZWN0OiAiICsgcmVzdWx0OworfQorCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>442277</attachid>
            <date>2021-10-23 13:34:48 -0700</date>
            <delta_ts>2021-10-23 13:34:48 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch.patch</filename>
            <type>text/plain</type>
            <size>196964</size>
            <attacher name="Justin Michaud">justin_michaud</attacher>
            
              <data encoding="base64">RnJvbSAxZTkzNDc2ZTkxNTIwYTM5ZmRhZTJhMGE5NjFjODI5ODkzY2UzODNhIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBKdXN0aW4gTWljaGF1ZCA8anVzdGluX21pY2hhdWRAYXBwbGUu
Y29tPgpEYXRlOiBUdWUsIDEyIE9jdCAyMDIxIDEzOjQyOjIyIC0wNzAwClN1YmplY3Q6IFtQQVRD
SCAwMS8xN10gc3RhcnQKCi0tLQogLi4uL2dldC1ieS1pZC1ibG93b3V0LXN0cnVjdHVyZS1pYy5q
cyAgICAgICAgIHwgIDI4ICsKIC4uLi9taWNyb2JlbmNobWFya3MvZ2V0LWJ5LWlkLXN0cnVjdHVy
ZS1pYy5qcyB8ICA0MSArKwogSlNUZXN0cy9zdHJlc3MvZ2V0LWJ5LWlkLXN0cnVjdHVyZS1pYy5q
cyAgICAgIHwgIDMyICsrCiAuLi4vSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvaiAgfCAgIDggKwogLi4uL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmggICAgICAgICAg
ICAgIHwgICA2ICstCiAuLi4vZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwICAgICAgICAgICAg
ICAgfCAgIDEgKwogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3Bw
IHwgICAxICsKIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwICAgICAgICAgICB8
ICAgMSArCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmggICAgICAgICAgICAgfCAg
IDYgKwogLi4uL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5jcHAgICAgICAgICAgIHwgMTAz
ICsrKy0KIC4uLi9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaCAgICAgICAgICAgICB8ICAz
MCArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcCAgIHwgICAz
ICsKIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oICAgICB8ICAgMSAr
CiAuLi4vaml0L1Byb3BlcnR5QWNjZXNzU2lkZUlubGluZUNhY2hlLmNwcCAgICAgfCA0OTIgKysr
KysrKysrKysrKysrKysrCiAuLi4vaml0L1Byb3BlcnR5QWNjZXNzU2lkZUlubGluZUNhY2hlLmgg
ICAgICAgfCAgNzUgKysrCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlz
dC5oICAgfCAgIDEgKwogMTYgZmlsZXMgY2hhbmdlZCwgODIwIGluc2VydGlvbnMoKyksIDkgZGVs
ZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgSlNUZXN0cy9taWNyb2JlbmNobWFya3MvZ2V0
LWJ5LWlkLWJsb3dvdXQtc3RydWN0dXJlLWljLmpzCiBjcmVhdGUgbW9kZSAxMDA2NDQgSlNUZXN0
cy9taWNyb2JlbmNobWFya3MvZ2V0LWJ5LWlkLXN0cnVjdHVyZS1pYy5qcwogY3JlYXRlIG1vZGUg
MTAwNjQ0IEpTVGVzdHMvc3RyZXNzL2dldC1ieS1pZC1zdHJ1Y3R1cmUtaWMuanMKIGNyZWF0ZSBt
b2RlIDEwMDY0NCBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Byb3BlcnR5QWNjZXNzU2lkZUlu
bGluZUNhY2hlLmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvUHJvcGVydHlBY2Nlc3NTaWRlSW5saW5lQ2FjaGUuaAoKZGlmZiAtLWdpdCBhL0pTVGVzdHMv
bWljcm9iZW5jaG1hcmtzL2dldC1ieS1pZC1ibG93b3V0LXN0cnVjdHVyZS1pYy5qcyBiL0pTVGVz
dHMvbWljcm9iZW5jaG1hcmtzL2dldC1ieS1pZC1ibG93b3V0LXN0cnVjdHVyZS1pYy5qcwpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjM5ZTE5YTM4ZGFhZAotLS0gL2Rl
di9udWxsCisrKyBiL0pTVGVzdHMvbWljcm9iZW5jaG1hcmtzL2dldC1ieS1pZC1ibG93b3V0LXN0
cnVjdHVyZS1pYy5qcwpAQCAtMCwwICsxLDI4IEBACitmdW5jdGlvbiBmb28obykgeworICAgIHJl
dHVybiBvLmY7Cit9CisKK25vSW5saW5lKGZvbyk7CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMWU3
OyArK2kpIHsKKyAgICBpZiAoZm9vKHthOjg5LCBmOjF9KSAhPSAxKQorICAgICAgICB0aHJvdyAi
RXJyb3I6IGJhZCByZXN1bHQgZm9yIG9iamVjdDogIiArIHJlc3VsdDsKKyAgICBpZiAoZm9vKHti
Ojg5LCBmOjJ9KSAhPSAyKQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQgZm9yIG9i
amVjdDogIiArIHJlc3VsdDsKKyAgICBpZiAoZm9vKHthOjAsIGI6MCwgYzo4OSwgZjozfSkgIT0g
MykKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0IGZvciBvYmplY3Q6ICIgKyByZXN1
bHQ7CisgICAgaWYgKGZvbyh7ZDo4OSwgZjo0fSkgIT0gNCkKKyAgICAgICAgdGhyb3cgIkVycm9y
OiBiYWQgcmVzdWx0IGZvciBvYmplY3Q6ICIgKyByZXN1bHQ7CisgICAgaWYgKGZvbyh7ZTo4OSwg
Zjo1fSkgIT0gNSkKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0IGZvciBvYmplY3Q6
ICIgKyByZXN1bHQ7CisgICAgaWYgKGZvbyh7Zjo4OSwgZjo2fSkgIT0gNikKKyAgICAgICAgdGhy
b3cgIkVycm9yOiBiYWQgcmVzdWx0IGZvciBvYmplY3Q6ICIgKyByZXN1bHQ7CisgICAgaWYgKGZv
byh7aDo4OSwgZjo3fSkgIT0gNykKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0IGZv
ciBvYmplY3Q6ICIgKyByZXN1bHQ7CisgICAgaWYgKGZvbyh7Zjo4fSkgIT0gOCkKKyAgICAgICAg
dGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0IGZvciBvYmplY3Q6ICIgKyByZXN1bHQ7CisgICAgaWYg
KGZvbyh7Zjo5LCB6OjV9KSAhPSA5KQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQg
Zm9yIG9iamVjdDogIiArIHJlc3VsdDsKKyAgICBpZiAoZm9vKHtmOjEwLCB6Mjo2fSkgIT0gMTAp
CisgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdCBmb3Igb2JqZWN0OiAiICsgcmVzdWx0
OworfQpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9taWNyb2JlbmNobWFya3MvZ2V0LWJ5LWlkLXN0cnVj
dHVyZS1pYy5qcyBiL0pTVGVzdHMvbWljcm9iZW5jaG1hcmtzL2dldC1ieS1pZC1zdHJ1Y3R1cmUt
aWMuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi4yZWRkMDNlMWY5
NzUKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9nZXQtYnktaWQt
c3RydWN0dXJlLWljLmpzCkBAIC0wLDAgKzEsNDEgQEAKK2Z1bmN0aW9uIGZvbyhvKSB7CisgICAg
cmV0dXJuIG8uZjsKK30KKworbm9JbmxpbmUoZm9vKTsKKworU3RyaW5nLnByb3RvdHlwZS5mID0g
NDI7CitOdW1iZXIucHJvdG90eXBlLmYgPSAyNDsKKworZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAw
MDA7ICsraSkgeworICAgIHZhciByZXN1bHQgPSBmb28oImhlbGxvIik7CisgICAgaWYgKHJlc3Vs
dCAhPSA0MikKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0IGZvciBzdHJpbmc6ICIg
KyByZXN1bHQ7CisgICAgcmVzdWx0ID0gZm9vKDEzKTsKKyAgICBpZiAocmVzdWx0ICE9IDI0KQor
ICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQgZm9yIG51bWJlcjogIiArIHJlc3VsdDsK
KyAgICByZXN1bHQgPSBmb28oe2Y6ODR9KTsKKyAgICBpZiAocmVzdWx0ICE9IDg0KQorICAgICAg
ICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQgZm9yIG9iamVjdDogIiArIHJlc3VsdDsKK30KKwor
Zm9yICh2YXIgaSA9IDA7IGkgPCAxZTU7ICsraSkgeworICAgIHJlc3VsdCA9IGZvbyh7Zjo4NH0p
OworICAgIGlmIChyZXN1bHQgIT0gODQpCisgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3Vs
dCBmb3Igb2JqZWN0OiAiICsgcmVzdWx0OworfQorCitmb3IgKHZhciBpID0gMDsgaSA8IDFlNTsg
KytpKSB7CisgICAgcmVzdWx0ID0gZm9vKHtnOjg5LCBmOjg1fSk7CisgICAgaWYgKHJlc3VsdCAh
PSA4NSkKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0IGZvciBvYmplY3Q6ICIgKyBy
ZXN1bHQ7CisgICAgcmVzdWx0ID0gZm9vKHtoOjg5LCBmOjkwfSk7CisgICAgaWYgKHJlc3VsdCAh
PSA5MCkKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0IGZvciBvYmplY3Q6ICIgKyBy
ZXN1bHQ7CisgICAgaWYgKGkgPiAxMDAwKSB7CisgICAgICAgIHJlc3VsdCA9IGZvbyh7Zzo4OSwg
aDo1MCwgZjoyMH0pOworICAgICAgICBpZiAocmVzdWx0ICE9IDIwKQorICAgICAgICAgICAgdGhy
b3cgIkVycm9yOiBiYWQgcmVzdWx0IGZvciBvYmplY3Q6ICIgKyByZXN1bHQ7CisgICAgfQorCit9
CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3N0cmVzcy9nZXQtYnktaWQtc3RydWN0dXJlLWljLmpzIGIv
SlNUZXN0cy9zdHJlc3MvZ2V0LWJ5LWlkLXN0cnVjdHVyZS1pYy5qcwpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmIwZTg4YmM3MDQxNwotLS0gL2Rldi9udWxsCisrKyBi
L0pTVGVzdHMvc3RyZXNzL2dldC1ieS1pZC1zdHJ1Y3R1cmUtaWMuanMKQEAgLTAsMCArMSwzMiBA
QAorZnVuY3Rpb24gZm9vKG8pIHsKKyAgICByZXR1cm4gby5mOworfQorCitub0lubGluZShmb28p
OworCitTdHJpbmcucHJvdG90eXBlLmYgPSA0MjsKK051bWJlci5wcm90b3R5cGUuZiA9IDI0Owor
Citmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwMDsgKytpKSB7CisgICAgdmFyIHJlc3VsdCA9IGZv
bygiaGVsbG8iKTsKKyAgICBpZiAocmVzdWx0ICE9IDQyKQorICAgICAgICB0aHJvdyAiRXJyb3I6
IGJhZCByZXN1bHQgZm9yIHN0cmluZzogIiArIHJlc3VsdDsKKyAgICByZXN1bHQgPSBmb28oMTMp
OworICAgIGlmIChyZXN1bHQgIT0gMjQpCisgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3Vs
dCBmb3IgbnVtYmVyOiAiICsgcmVzdWx0OworICAgIHJlc3VsdCA9IGZvbyh7Zjo4NH0pOworICAg
IGlmIChyZXN1bHQgIT0gODQpCisgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdCBmb3Ig
b2JqZWN0OiAiICsgcmVzdWx0OworfQorCitmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwMDsgKytp
KSB7CisgICAgcmVzdWx0ID0gZm9vKHtmOjg0fSk7CisgICAgaWYgKHJlc3VsdCAhPSA4NCkKKyAg
ICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0IGZvciBvYmplY3Q6ICIgKyByZXN1bHQ7Cit9
CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDAwOyArK2kpIHsKKyAgICByZXN1bHQgPSBmb28o
e2c6ODksIGY6ODV9KTsKKyAgICBpZiAocmVzdWx0ICE9IDg1KQorICAgICAgICB0aHJvdyAiRXJy
b3I6IGJhZCByZXN1bHQgZm9yIG9iamVjdDogIiArIHJlc3VsdDsKK30KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKaW5kZXggZWQxNzkyN2MzNjQzLi43YWEyMzU5ZjkxMDYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCkBAIC04ODUsNiArODg1LDggQEAKIAkJNDUxNTM5QjkxMkRDOTk0
NTAwRUY3QUM0IC8qIFlhcnIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDQ1MTUzOUI4MTJEQzk5NDUwMEVGN0FDNCAvKiBZYXJyLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNDczREE0QTQ3NjRDNDVGRTg3
MUIwNDg1IC8qIERlZmluZVByb3BlcnR5QXR0cmlidXRlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTY5OTQ4RURFNjhENDA1NEIwMUVGNzk3IC8qIERl
ZmluZVByb3BlcnR5QXR0cmlidXRlcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTRCQUEwN0NFQjgxRjQ5QTI5NkUwMjIwMyAvKiBXYXNtU2lnbmF0
dXJlSW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMzBBNUY0MDNGMTFDNEY1OTlDRDU5NkQ1IC8qIFdhc21TaWduYXR1cmVJbmxpbmVzLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNEJFNzQyQjAy
NzA0REU5NzAwNzNCMEFEIC8qIFByb3BlcnR5QWNjZXNzU2lkZUlubGluZUNhY2hlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0QkU3NDJBRjI3MDRERTk2
MDA3M0IwQUQgLyogUHJvcGVydHlBY2Nlc3NTaWRlSW5saW5lQ2FjaGUuaCAqLzsgfTsKKwkJNEJF
NzQyQjIyNzA0REVBRDAwNzNCMEFEIC8qIFByb3BlcnR5QWNjZXNzU2lkZUlubGluZUNhY2hlLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRCRTc0MkIx
MjcwNERFQUQwMDczQjBBRCAvKiBQcm9wZXJ0eUFjY2Vzc1NpZGVJbmxpbmVDYWNoZS5jcHAgKi87
IH07CiAJCTUyMEQ5OUYxMjM4OENDODEwMDA1MDlBMyAvKiBHZXRCeVZhbEhpc3RvcnkuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyMEQ5OUYwMjM4OEND
NzgwMDA1MDlBMyAvKiBHZXRCeVZhbEhpc3RvcnkuaCAqLzsgfTsKIAkJNTIxMTMxRjcxRjgyQkYx
NDAwN0NDRUVFIC8qIFBvbHlQcm90b0FjY2Vzc0NoYWluLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MjExMzFGNjFGODJCRjExMDA3Q0NFRUUgLyogUG9s
eVByb3RvQWNjZXNzQ2hhaW4uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQk1MjEzMjI0NjFFQ0JDRTgyMDBGNjU2MTUgLyogV2ViQXNzZW1ibHlGdW5j
dGlvbkJhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDUyMTMyMjQ0MUVDQkNFODIwMEY2NTYxNSAvKiBXZWJBc3NlbWJseUZ1bmN0aW9uQmFzZS5oICov
OyB9OwpAQCAtMzY2Miw2ICszNjY0LDggQEAKIAkJNDQyRkJEODUyMTQ5RDFFMDAwNzM1MTlDIC8q
IGhhc2hlci5weSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHRleHQuc2NyaXB0LnB5dGhvbjsgbmFtZSA9IGhhc2hlci5weTsgcGF0aCA9IHlhcnIvaGFz
aGVyLnB5OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0NTE1MzlCODEyREM5OTQ1MDBF
RjdBQzQgLyogWWFyci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBZYXJyLmg7
IHBhdGggPSB5YXJyL1lhcnIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDVFMTJE
ODgwNkE0OUIwRjAwRTlERjg0IC8qIGpzYy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBqc2MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB0YWJXaWR0aCA9IDQ7IH07CisJCTRCRTc0MkFGMjcwNERFOTYwMDczQjBBRCAvKiBQcm9w
ZXJ0eUFjY2Vzc1NpZGVJbmxpbmVDYWNoZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQcm9wZXJ0eUFjY2Vz
c1NpZGVJbmxpbmVDYWNoZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0QkU3NDJC
MTI3MDRERUFEMDA3M0IwQUQgLyogUHJvcGVydHlBY2Nlc3NTaWRlSW5saW5lQ2FjaGUuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gUHJvcGVydHlBY2Nlc3NTaWRlSW5saW5lQ2FjaGUuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0Q0U5NzhFMzg1QTg0OTgxOTkwNTIxNTMgLyogTW9k
dWxlTmFtZXNwYWNlQWNjZXNzQ2FzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBNb2R1bGVOYW1lc3BhY2VBY2Nlc3NDYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTUxRjBFQjYxMDVDODZDNkIwMEU2REYxQiAvKiBGb3VuZGF0aW9uLmZyYW1ld29yayAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHdyYXBwZXIuZnJh
bWV3b3JrOyBuYW1lID0gRm91bmRhdGlvbi5mcmFtZXdvcms7IHBhdGggPSAvU3lzdGVtL0xpYnJh
cnkvRnJhbWV3b3Jrcy9Gb3VuZGF0aW9uLmZyYW1ld29yazsgc291cmNlVHJlZSA9ICI8YWJzb2x1
dGU+IjsgfTsKIAkJNTFGMEVDMDcwNUM4NkM5QTAwRTZERjFCIC8qIGxpYm9iamMuZHlsaWIgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSAiY29tcGlsZWQu
bWFjaC1vLmR5bGliIjsgbmFtZSA9IGxpYm9iamMuZHlsaWI7IHBhdGggPSAvdXNyL2xpYi9saWJv
YmpjLmR5bGliOyBzb3VyY2VUcmVlID0gIjxhYnNvbHV0ZT4iOyB9OwpAQCAtNjQyMyw2ICs2NDI3
LDggQEAKIAkJCQk3OTJDQjM0ODFDNEVFRDVDMDBEMTNBRjMgLyogUENUb0NvZGVPcmlnaW5NYXAu
aCAqLywKIAkJCQkwRkU4MzQxNTFBNkVGOTdCMDBEMDQ4NDcgLyogUG9seW1vcnBoaWNDYWxsU3R1
YlJvdXRpbmUuY3BwICovLAogCQkJCTBGRTgzNDE2MUE2RUY5N0IwMEQwNDg0NyAvKiBQb2x5bW9y
cGhpY0NhbGxTdHViUm91dGluZS5oICovLAorCQkJCTRCRTc0MkIxMjcwNERFQUQwMDczQjBBRCAv
KiBQcm9wZXJ0eUFjY2Vzc1NpZGVJbmxpbmVDYWNoZS5jcHAgKi8sCisJCQkJNEJFNzQyQUYyNzA0
REU5NjAwNzNCMEFEIC8qIFByb3BlcnR5QWNjZXNzU2lkZUlubGluZUNhY2hlLmggKi8sCiAJCQkJ
MEZBN0E4RTkxOEI0MTNDODAwNTIzNzFEIC8qIFJlZy5jcHAgKi8sCiAJCQkJMEZBN0E4RUExOEI0
MTNDODAwNTIzNzFEIC8qIFJlZy5oICovLAogCQkJCTY1NDBDNzlFMUI4MkQ5Q0UwMDBGNkI3OSAv
KiBSZWdpc3RlckF0T2Zmc2V0LmNwcCAqLywKQEAgLTEwNjI0LDYgKzEwNjMwLDcgQEAKIAkJCQlE
QzYwNUI2MDFDRTI2RUE3MDA1OTM3MTggLyogUHJvZmlsZXJVSUQuaCBpbiBIZWFkZXJzICovLAog
CQkJCTE0QUQ5MTEwMURDQTkyOTQwMDE0RjlGRSAvKiBQcm9ncmFtQ29kZUJsb2NrLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkxNDczNDFENDFEQzAyRTZEMDBBQTI5QkEgLyogUHJvZ3JhbUV4ZWN1dGFi
bGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTRCRTc0MkIwMjcwNERFOTcwMDczQjBBRCAvKiBQcm9w
ZXJ0eUFjY2Vzc1NpZGVJbmxpbmVDYWNoZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEM0U0MEUx
QjYxOEI2NjAwQzgwRTFFIC8qIFByb3BlcnR5Q29uZGl0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBN0ZCNjEwMDEwNDBDMzhCMDAxN0EyODYgLyogUHJvcGVydHlEZXNjcmlwdG9yLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlCQzk1NDM3RDBFQkE3MEZEMDA3MkI2RDMgLyogUHJvcGVydHlNYXBIYXNo
VGFibGUuaCBpbiBIZWFkZXJzICovLApAQCAtMTE4MTksNiArMTE4MjYsNyBAQAogCQkJCUEzRUU4
NTQzMjYyNTE0QjAwMEZDOUI4RCAvKiBJbnRsV29ya2Fyb3VuZC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlFMzhFODc5MDI1NEI5Nzg0MDBGNkY5RTQgLyogSlNEYXRlTWF0aC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk1MzZCMzE5RTFGNzM1RjE2MDAzN0ZDMzMgLyogTG93TGV2ZWxJbnRlcnByZXRl
ci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk0QkU3NDJCMjI3MDRERUFEMDA3M0IwQUQgLyogUHJv
cGVydHlBY2Nlc3NTaWRlSW5saW5lQ2FjaGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJREZCQzJD
QTYyNUU2RDVCOTAwODFCREQxIC8qIFN5bWJvbFN0dWJzRm9yU2FmYXJpQ29tcGF0aWJpbGl0eS5t
bSBpbiBTb3VyY2VzICovLAogCQkJCTBGRjQyNzRBMTU4RUJFOTEwMDRDQjlGRiAvKiB1ZGlzODYu
YyBpbiBTb3VyY2VzICovLAogCQkJCTBGRjQyNzQwMTU4RUJFOEIwMDRDQjlGRiAvKiB1ZGlzODZf
ZGVjb2RlLmMgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgKaW5kZXggMzM2ODViYzEzNzliLi4xMTlhMDQ4NzY1
ZmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVT
dHViSW5mby5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVT
dHViSW5mby5oCkBAIC0zNTYsMTAgKzM1NiwxMCBAQCBwdWJsaWM6CiAgICAgQ29kZUxvY2F0aW9u
TGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gZG9uZUxvY2F0aW9uOwogICAgIENvZGVMb2NhdGlvbkxh
YmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiBzbG93UGF0aFN0YXJ0TG9jYXRpb247CiAKLSAgICB1
bmlvbiB7CisvLyAgICB1bmlvbiB7CiAgICAgICAgIENvZGVMb2NhdGlvbkNhbGw8SlNJbnRlcm5h
bFB0clRhZz4gbV9zbG93UGF0aENhbGxMb2NhdGlvbjsKICAgICAgICAgRnVuY3Rpb25QdHI8T3Bl
cmF0aW9uUHRyVGFnPiBtX3Nsb3dPcGVyYXRpb247Ci0gICAgfTsKKy8vICAgIH07CiAKICAgICBN
YWNyb0Fzc2VtYmxlckNvZGVQdHI8SklUU3R1YlJvdXRpbmVQdHJUYWc+IG1fY29kZVB0cjsKIApA
QCAtMzY4LDYgKzM2OCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9m
U2xvd1BhdGhTdGFydExvY2F0aW9uKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFN0cnVjdHVy
ZVN0dWJJbmZvLCBzbG93UGF0aFN0YXJ0TG9jYXRpb24pOyB9CiAgICAgc3RhdGljIHB0cmRpZmZf
dCBvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoU3RydWN0
dXJlU3R1YkluZm8sIG1fc2xvd09wZXJhdGlvbik7IH0KICAgICBzdGF0aWMgcHRyZGlmZl90IG9m
ZnNldE9mQ291bnRkb3duKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFN0cnVjdHVyZVN0dWJJ
bmZvLCBjb3VudGRvd24pOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlNpZGVBY2Nl
c3NTa2lwcGVkQ2FsbHNpdGVDb3VudGRvd24oKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoU3Ry
dWN0dXJlU3R1YkluZm8sIHNpZGVBY2Nlc3NTa2lwcGVkQ2FsbHNpdGVDb3VudGRvd24pOyB9CiAK
ICAgICBSZWdpc3RlclNldCB1c2VkUmVnaXN0ZXJzOwogCkBAIC00MDYsNiArNDA3LDcgQEAgcHVi
bGljOgogICAgIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleDsKIAogICAgIHVpbnQ4X3QgYnVm
ZmVyaW5nQ291bnRkb3duOworICAgIHVpbnQ4X3Qgc2lkZUFjY2Vzc1NraXBwZWRDYWxsc2l0ZUNv
dW50ZG93bjsKICAgICBib29sIHJlc2V0QnlHQyA6IDE7CiAgICAgYm9vbCB0b29rU2xvd1BhdGgg
OiAxOwogICAgIGJvb2wgZXZlckNvbnNpZGVyZWQgOiAxOwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKaW5kZXggM2IzOTNmNTI3NWY3Li5j
Yjc4MzJkNTUwZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQ2NC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVDY0LmNwcApAQCAtMTczLDYgKzE3Myw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNhY2hlZEdldEJ5SWQoQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBHUFJSZWcgYmFzZUdQUiwgR1BS
UmVnCiAgICAgc2xvd0Nhc2VzLmFwcGVuZChnZW4uc2xvd1BhdGhKdW1wKCkpOwogCiAgICAgc3Rk
Ojp1bmlxdWVfcHRyPFNsb3dQYXRoR2VuZXJhdG9yPiBzbG93UGF0aDsKKyAgICBnZW4uc3R1Yklu
Zm8oKS0+bV9zbG93T3BlcmF0aW9uID0gYXBwcm9wcmlhdGVPcHRpbWl6aW5nR2V0QnlJZEZ1bmN0
aW9uKHR5cGUpOwogICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6REZHSklUKSkg
ewogICAgICAgICBzbG93UGF0aCA9IHNsb3dQYXRoSUNDYWxsKAogICAgICAgICAgICAgc2xvd0Nh
c2VzLCB0aGlzLCBnZW4uc3R1YkluZm8oKSwgc3R1YkluZm9HUFIsIENDYWxsSGVscGVyczo6QWRk
cmVzcyhzdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlv
bigpKSwgYXBwcm9wcmlhdGVPcHRpbWl6aW5nR2V0QnlJZEZ1bmN0aW9uKHR5cGUpLApkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCmluZGV4IDNhOGY1Y2Zj
Nzk1ZS4uYmQ1MTBkZDBjODNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTExvd2VyREZHVG9CMy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExM
b3dlckRGR1RvQjMuY3BwCkBAIC0xNDg0OSw2ICsxNDg0OSw3IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICAgICAgICAgICAgICBnZW5lcmF0b3ItPnNsb3dQYXRoSnVtcCgpLmxpbmsoJmppdCk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkxhYmVsIHNsb3dQYXRoQmVnaW4g
PSBqaXQubGFiZWwoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Q2Fs
bCBzbG93UGF0aENhbGw7CisgICAgICAgICAgICAgICAgICAgICAgICBnZW5lcmF0b3ItPnN0dWJJ
bmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wdGltaXphdGlvbkZ1bmN0aW9uOwogICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpGVExKSVQpKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tUHRyKGdlbmVyYXRvci0+c3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBnZW5lcmF0b3ItPnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlv
biA9IG9wdGltaXphdGlvbkZ1bmN0aW9uOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvSGVhcC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcApp
bmRleCAwZWNmOGJkNjk4ZjUuLmYzMzBjYThlMWU1ZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
SGVhcC5jcHAKQEAgLTI4Miw2ICsyODIsNyBAQCBIZWFwOjpIZWFwKFZNJiB2bSwgSGVhcFR5cGUg
aGVhcFR5cGUpCiAgICAgLCBtX21heEVkZW5TaXplKG1fbWluQnl0ZXNQZXJDeWNsZSkKICAgICAs
IG1fbWF4SGVhcFNpemUobV9taW5CeXRlc1BlckN5Y2xlKQogICAgICwgbV9vYmplY3RTcGFjZSh0
aGlzKQorICAgICwgbV9wcm9wZXJ0eUFjY2Vzc1NpZGVJbmxpbmVDYWNoZSh2bSkKICAgICAsIG1f
bWFjaGluZVRocmVhZHMobWFrZVVuaXF1ZTxNYWNoaW5lVGhyZWFkcz4oKSkKICAgICAsIG1fY29s
bGVjdG9yU2xvdFZpc2l0b3IobWFrZVVuaXF1ZTxTbG90VmlzaXRvcj4oKnRoaXMsICJDIikpCiAg
ICAgLCBtX211dGF0b3JTbG90VmlzaXRvcihtYWtlVW5pcXVlPFNsb3RWaXNpdG9yPigqdGhpcywg
Ik0iKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAppbmRleCAwODFkZjQ2ZWRmZmYuLmEyODk5
MGM3M2YyYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaApAQCAtMzgsNiArMzgsNyBAQAog
I2luY2x1ZGUgIk1hcmtlZFNwYWNlLmgiCiAjaW5jbHVkZSAiTXV0YXRvclN0YXRlLmgiCiAjaW5j
bHVkZSAiT3B0aW9ucy5oIgorI2luY2x1ZGUgIlByb3BlcnR5QWNjZXNzU2lkZUlubGluZUNhY2hl
LmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlSURUYWJsZS5oIgogI2luY2x1ZGUgIlN5bmNocm9ub3Vz
bmVzcy5oIgogI2luY2x1ZGUgIldlYWtIYW5kbGVPd25lci5oIgpAQCAtMjc5LDYgKzI4MCw3IEBA
IHB1YmxpYzoKICAgICBib29sIGlzRGVmZXJyZWQoKSBjb25zdCB7IHJldHVybiAhIW1fZGVmZXJy
YWxEZXB0aDsgfQogCiAgICAgU3RydWN0dXJlSURUYWJsZSYgc3RydWN0dXJlSURUYWJsZSgpIHsg
cmV0dXJuIG1fc3RydWN0dXJlSURUYWJsZTsgfQorICAgIFByb3BlcnR5QWNjZXNzU2lkZUlubGlu
ZUNhY2hlJiBwcm9wZXJ0eUFjY2Vzc1NpZGVJbmxpbmVDYWNoZSgpIHsgcmV0dXJuIG1fcHJvcGVy
dHlBY2Nlc3NTaWRlSW5saW5lQ2FjaGU7IH0KIAogICAgIENvZGVCbG9ja1NldCYgY29kZUJsb2Nr
U2V0KCkgeyByZXR1cm4gKm1fY29kZUJsb2NrczsgfQogCkBAIC02MjEsNiArNjIzLDEwIEBAIHBy
aXZhdGU6CiAgICAgc2l6ZV90IG1fZXh0cmFNZW1vcnlTaXplIHsgMCB9OwogICAgIHNpemVfdCBt
X2RlcHJlY2F0ZWRFeHRyYU1lbW9yeVNpemUgeyAwIH07CiAKKyNpZiBFTkFCTEUoSklUKSAmJiBV
U0UoSlNWQUxVRTY0KQorICAgIFByb3BlcnR5QWNjZXNzU2lkZUlubGluZUNhY2hlIG1fcHJvcGVy
dHlBY2Nlc3NTaWRlSW5saW5lQ2FjaGU7CisjZW5kaWYKKwogICAgIEhhc2hTZXQ8Y29uc3QgSlND
ZWxsKj4gbV9jb3B5aW5nUmVtZW1iZXJlZFNldDsKIAogICAgIFByb3RlY3RDb3VudFNldCBtX3By
b3RlY3RlZFZhbHVlczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
SW5saW5lQ2FjaGVHZW5lcmF0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJ
bmxpbmVDYWNoZUdlbmVyYXRvci5jcHAKaW5kZXggMWYzNGMzZDFkY2ZmLi44MWViZGFlMGI5ODkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5l
cmF0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVH
ZW5lcmF0b3IuY3BwCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiSW5saW5lQWNjZXNzLmgi
CiAjaW5jbHVkZSAiSklULmgiCiAjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgorI2luY2x1ZGUgIlNj
cmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZVN0dWJJbmZvLmgi
CiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtMTE0LDE4ICsxMTUsMTA2IEBAIHZvaWQgSklUQnlJZEdl
bmVyYXRvcjo6Z2VuZXJhdGVGYXN0Q29tbW9uKE1hY3JvQXNzZW1ibGVyJiBqaXQsIHNpemVfdCBp
bmxpbmVJQ1NpCiAgICAgbV9kb25lID0gaml0LmxhYmVsKCk7CiB9CiAKK3ZvaWQgSklUQnlJZEdl
bmVyYXRvcjo6Z2VuZXJhdGVTaWRlSW5saW5lQ2FjaGUoQ0NhbGxIZWxwZXJzJiBqaXQsIHNpemVf
dCBpbmxpbmVJQ1NpemUsIENhY2hlYWJsZUlkZW50aWZpZXIgcHJvcGVydHlOYW1lKQoreworICAg
IFJFTEVBU0VfQVNTRVJUKE9wdGlvbnM6OnVzZVByb3BlcnR5QWNjZXNzU2lkZUlDKCkpOworICAg
IEFTU0VSVChwcm9wZXJ0eU5hbWUpOworICAgIEdQUlJlZyByZXN1bHQgPSBTaWRlUHJvcGVydHlB
Y2Nlc3NSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICBHUFJSZWcgYmFzZSA9IFNpZGVQcm9wZXJ0eUFj
Y2Vzc1JlZ2lzdGVyczo6YmFzZTsKKyAgICBHUFJSZWcgcHJvcGVydHkgPSBTaWRlUHJvcGVydHlB
Y2Nlc3NSZWdpc3RlcnM6OnByb3BlcnR5OworICAgIEdQUlJlZyBzdHViSW5mbyA9IFNpZGVQcm9w
ZXJ0eUFjY2Vzc1JlZ2lzdGVyczo6c3R1YkluZm87CisgICAgR1BSUmVnIHNjcmF0Y2ggPSBJbnZh
bGlkR1BSUmVnOworCisgICAgYXV0byYgdm0gPSBqaXQudm0oKTsKKyAgICBhdXRvKiBzaWRlSUNU
YWJsZSA9IHZtLmhlYXAucHJvcGVydHlBY2Nlc3NTaWRlSW5saW5lQ2FjaGUoKS5qdW1wVGFibGUo
KTsKKyAgICBkYXRhTG9nTG4oIkdlbmVyYXRpbmcgZm9yICIsIHByb3BlcnR5TmFtZSwgIiB0YWJs
ZTogIiwgUmF3UG9pbnRlcihzaWRlSUNUYWJsZSkpOworICAgIENDYWxsSGVscGVyczo6SnVtcExp
c3QgZG9uZTsKKyAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNraXBJbmxpbmVBY2Nlc3M7CisK
KyAgICBhdXRvIG9yaWdpbmFsQmFzZSA9IG1fc3R1YkluZm8tPmJhc2VHUFI7CisgICAgYXV0byBv
cmlnaW5hbFJlc3VsdCA9IG1fc3R1YkluZm8tPnZhbHVlR1BSOworICAgIEFTU0VSVChvcmlnaW5h
bEJhc2UgIT0gSW52YWxpZEdQUlJlZyk7CisgICAgQVNTRVJUKG9yaWdpbmFsUmVzdWx0ICE9IElu
dmFsaWRHUFJSZWcpOworCisgICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yIGFsbG9jYXRvciht
X3N0dWJJbmZvLT51c2VkUmVnaXN0ZXJzKTsKKyAgICBhbGxvY2F0b3IubG9jayhvcmlnaW5hbEJh
c2UpOworICAgIGFsbG9jYXRvci5sb2NrKHJlc3VsdCk7CisgICAgYWxsb2NhdG9yLmxvY2soYmFz
ZSk7CisgICAgYWxsb2NhdG9yLmxvY2socHJvcGVydHkpOworICAgIGFsbG9jYXRvci5sb2NrKHN0
dWJJbmZvKTsKKyAgICBzY3JhdGNoID0gYWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOwor
CisgICAgbV9zdGFydCA9IGppdC5sYWJlbCgpOworICAgIHNpemVfdCBzdGFydFNpemUgPSBqaXQu
bV9hc3NlbWJsZXIuYnVmZmVyKCkuY29kZVNpemUoKTsKKworICAgIGppdC5sb2FkMzIoQ0NhbGxI
ZWxwZXJzOjpBZGRyZXNzKG9yaWdpbmFsQmFzZSwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgp
KSwgc2NyYXRjaCk7CisgICAgaml0LmFuZDY0KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTY0KFBy
b3BlcnR5QWNjZXNzU2lkZUlubGluZUNhY2hlOjpzdHJ1Y3R1cmVUYWJsZU1hc2spLCBzY3JhdGNo
KTsKKyAgICBqaXQuYWRkNjQoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tNjQocmVpbnRlcnByZXRf
Y2FzdDx1aW50NjRfdD4oc2lkZUlDVGFibGUpKSwgc2NyYXRjaCk7CisgICAgaml0LmxvYWQ2NChD
Q2FsbEhlbHBlcnM6OkFkZHJlc3Moc2NyYXRjaCksIHNjcmF0Y2gpOworICAgIHNraXBJbmxpbmVB
Y2Nlc3MuYXBwZW5kKGppdC5icmFuY2hUZXN0MzIoQ0NhbGxIZWxwZXJzOjpaZXJvLCBzY3JhdGNo
KSk7CisKKyAgICB7CisgICAgICAgIFJlZ2lzdGVyU2V0IHJlZ2lzdGVyc1RvUHJlc2VydmU7Cisg
ICAgICAgIGlmIChtX3N0dWJJbmZvLT51c2VkUmVnaXN0ZXJzLmNvbnRhaW5zKHJlc3VsdCkpCisg
ICAgICAgICAgICByZWdpc3RlcnNUb1ByZXNlcnZlLnNldChyZXN1bHQpOworICAgICAgICBpZiAo
bV9zdHViSW5mby0+dXNlZFJlZ2lzdGVycy5jb250YWlucyhiYXNlKSkKKyAgICAgICAgICAgIHJl
Z2lzdGVyc1RvUHJlc2VydmUuc2V0KGJhc2UpOworICAgICAgICBpZiAobV9zdHViSW5mby0+dXNl
ZFJlZ2lzdGVycy5jb250YWlucyhwcm9wZXJ0eSkpCisgICAgICAgICAgICByZWdpc3RlcnNUb1By
ZXNlcnZlLnNldChwcm9wZXJ0eSk7CisgICAgICAgIGlmIChtX3N0dWJJbmZvLT51c2VkUmVnaXN0
ZXJzLmNvbnRhaW5zKHN0dWJJbmZvKSkKKyAgICAgICAgICAgIHJlZ2lzdGVyc1RvUHJlc2VydmUu
c2V0KGJhc2UpOworICAgICAgICBpZiAobV9zdHViSW5mby0+dXNlZFJlZ2lzdGVycy5jb250YWlu
cyhTaWRlUHJvcGVydHlBY2Nlc3NSZWdpc3RlcnM6OnNjcmF0Y2gpKQorICAgICAgICAgICAgcmVn
aXN0ZXJzVG9QcmVzZXJ2ZS5zZXQoU2lkZVByb3BlcnR5QWNjZXNzUmVnaXN0ZXJzOjpzY3JhdGNo
KTsKKyAgICAgICAgaWYgKG1fc3R1YkluZm8tPnVzZWRSZWdpc3RlcnMuY29udGFpbnMoR1BSSW5m
bzo6bm9uQXJnR1BSMCkpCisgICAgICAgICAgICByZWdpc3RlcnNUb1ByZXNlcnZlLnNldChHUFJJ
bmZvOjpub25BcmdHUFIwKTsKKyAgICAgICAgcmVnaXN0ZXJzVG9QcmVzZXJ2ZS5jbGVhcihvcmln
aW5hbFJlc3VsdCk7CisKKyAgICAgICAgY29uc3QgdW5zaWduZWQgZXh0cmFQYWRkaW5nQnl0ZXMg
PSAwOworICAgICAgICB1bnNpZ25lZCBudW1iZXJPZlN0YWNrQnl0ZXNVc2VkRm9yUmVnaXN0ZXJQ
cmVzZXJ2YXRpb24gPSBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OnByZXNlcnZlUmVnaXN0ZXJz
VG9TdGFja0ZvckNhbGwoaml0LCByZWdpc3RlcnNUb1ByZXNlcnZlLCBleHRyYVBhZGRpbmdCeXRl
cyk7CisKKyAgICAgICAgaWYgKG9yaWdpbmFsQmFzZSAhPSBiYXNlKQorICAgICAgICAgICAgaml0
Lm1vdmUob3JpZ2luYWxCYXNlLCBiYXNlKTsKKyAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tNjQocHJvcGVydHlOYW1lLnJhd0JpdHMoKSksIHByb3BlcnR5KTsKKyAgICAg
ICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG1fc3R1YkluZm8pLCBzdHVi
SW5mbyk7CisgICAgICAgIGppdC5jYWxsKHNjcmF0Y2gsIEpJVFN0dWJSb3V0aW5lUHRyVGFnKTsK
KworICAgICAgICBpZiAob3JpZ2luYWxSZXN1bHQgIT0gcmVzdWx0KQorICAgICAgICAgICAgaml0
Lm1vdmUocmVzdWx0LCBvcmlnaW5hbFJlc3VsdCk7CisKKyAgICAgICAgU2NyYXRjaFJlZ2lzdGVy
QWxsb2NhdG9yOjpyZXN0b3JlUmVnaXN0ZXJzRnJvbVN0YWNrRm9yQ2FsbChqaXQsIHJlZ2lzdGVy
c1RvUHJlc2VydmUsIFJlZ2lzdGVyU2V0KCksIG51bWJlck9mU3RhY2tCeXRlc1VzZWRGb3JSZWdp
c3RlclByZXNlcnZhdGlvbiwgZXh0cmFQYWRkaW5nQnl0ZXMpOworICAgICAgICBkb25lLmFwcGVu
ZChqaXQuanVtcCgpKTsKKyAgICB9CisKKyAgICBza2lwSW5saW5lQWNjZXNzLmxpbmsoJmppdCk7
CisgICAgbV9zbG93UGF0aEp1bXAgPSBqaXQuanVtcCgpOworCisgICAgc2l6ZV90IGp1bXBTaXpl
ID0gaml0Lm1fYXNzZW1ibGVyLmJ1ZmZlcigpLmNvZGVTaXplKCkgLSBzdGFydFNpemU7CisgICAg
aWYgKGlubGluZUlDU2l6ZSA+PSBqdW1wU2l6ZSkgeworICAgICAgICBzaXplX3Qgbm9wc1RvRW1p
dEluQnl0ZXMgPSBpbmxpbmVJQ1NpemUgLSBqdW1wU2l6ZTsKKyAgICAgICAgaml0LmVtaXROb3Bz
KG5vcHNUb0VtaXRJbkJ5dGVzKTsKKyAgICB9CisgICAgQVNTRVJUKGppdC5tX2Fzc2VtYmxlci5i
dWZmZXIoKS5jb2RlU2l6ZSgpIC0gc3RhcnRTaXplID49IGlubGluZUlDU2l6ZSk7CisKKyAgICBk
b25lLmxpbmsoJmppdCk7CisgICAgbV9kb25lID0gaml0LmxhYmVsKCk7Cit9CisKIEpJVEdldEJ5
SWRHZW5lcmF0b3I6OkpJVEdldEJ5SWRHZW5lcmF0b3IoCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIEpJVFR5cGUgaml0VHlwZSwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4
IGNhbGxTaXRlLCBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywKICAgICBDYWNoZWFi
bGVJZGVudGlmaWVyIHByb3BlcnR5TmFtZSwgSlNWYWx1ZVJlZ3MgYmFzZSwgSlNWYWx1ZVJlZ3Mg
dmFsdWUsIEdQUlJlZyBzdHViSW5mb0dQUiwgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlKQogICAgIDog
SklUQnlJZEdlbmVyYXRvcihjb2RlQmxvY2ssIGppdFR5cGUsIGNvZGVPcmlnaW4sIGNhbGxTaXRl
LCBhY2Nlc3NUeXBlLCB1c2VkUmVnaXN0ZXJzLCBiYXNlLCB2YWx1ZSwgc3R1YkluZm9HUFIpCiAg
ICAgLCBtX2lzTGVuZ3RoQWNjZXNzKGNvZGVCbG9jayAmJiBwcm9wZXJ0eU5hbWUudWlkKCkgPT0g
Y29kZUJsb2NrLT52bSgpLnByb3BlcnR5TmFtZXMtPmxlbmd0aC5pbXBsKCkpCisgICAgLCBtX3By
b3BlcnR5TmFtZShwcm9wZXJ0eU5hbWUpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoYmFzZS5wYXls
b2FkR1BSKCkgIT0gdmFsdWUudGFnR1BSKCkpOwogfQogCi12b2lkIEpJVEdldEJ5SWRHZW5lcmF0
b3I6OmdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXImIGppdCkKK3ZvaWQgSklUR2V0QnlJ
ZEdlbmVyYXRvcjo6Z2VuZXJhdGVGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCkKIHsKLSAgICBn
ZW5lcmF0ZUZhc3RDb21tb24oaml0LCBtX2lzTGVuZ3RoQWNjZXNzID8gSW5saW5lQWNjZXNzOjpz
aXplRm9yTGVuZ3RoQWNjZXNzKCkgOiBJbmxpbmVBY2Nlc3M6OnNpemVGb3JQcm9wZXJ0eUFjY2Vz
cygpKTsKKyAgICBpZiAoT3B0aW9uczo6dXNlUHJvcGVydHlBY2Nlc3NTaWRlSUMoKSAmJiBtX3By
b3BlcnR5TmFtZSkKKyAgICAgICAgZ2VuZXJhdGVTaWRlSW5saW5lQ2FjaGUoaml0LCBtX2lzTGVu
Z3RoQWNjZXNzID8gSW5saW5lQWNjZXNzOjpzaXplRm9yTGVuZ3RoQWNjZXNzKCkgOiBJbmxpbmVB
Y2Nlc3M6OnNpemVGb3JQcm9wZXJ0eUFjY2VzcygpLCBtX3Byb3BlcnR5TmFtZSk7CisgICAgZWxz
ZQorICAgICAgICBnZW5lcmF0ZUZhc3RDb21tb24oaml0LCBtX2lzTGVuZ3RoQWNjZXNzID8gSW5s
aW5lQWNjZXNzOjpzaXplRm9yTGVuZ3RoQWNjZXNzKCkgOiBJbmxpbmVBY2Nlc3M6OnNpemVGb3JQ
cm9wZXJ0eUFjY2VzcygpKTsKIH0KIAogCkBAIC0xNjEsOCArMjUwLDkgQEAgdm9pZCBKSVRHZXRC
eUlkR2VuZXJhdG9yOjpnZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoSklUJiBqaXQsIHVu
c2lnbmVkIHN0dWIKIAogSklUR2V0QnlJZFdpdGhUaGlzR2VuZXJhdG9yOjpKSVRHZXRCeUlkV2l0
aFRoaXNHZW5lcmF0b3IoCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVFR5cGUgaml0VHlw
ZSwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlLCBjb25zdCBS
ZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywKLSAgICBDYWNoZWFibGVJZGVudGlmaWVyLCBKU1Zh
bHVlUmVncyB2YWx1ZSwgSlNWYWx1ZVJlZ3MgYmFzZSwgSlNWYWx1ZVJlZ3MgdGhpc1JlZ3MsIEdQ
UlJlZyBzdHViSW5mb0dQUikKKyAgICBDYWNoZWFibGVJZGVudGlmaWVyIHByb3BlcnR5TmFtZSwg
SlNWYWx1ZVJlZ3MgdmFsdWUsIEpTVmFsdWVSZWdzIGJhc2UsIEpTVmFsdWVSZWdzIHRoaXNSZWdz
LCBHUFJSZWcgc3R1YkluZm9HUFIpCiAgICAgOiBKSVRCeUlkR2VuZXJhdG9yKGNvZGVCbG9jaywg
aml0VHlwZSwgY29kZU9yaWdpbiwgY2FsbFNpdGUsIEFjY2Vzc1R5cGU6OkdldEJ5SWRXaXRoVGhp
cywgdXNlZFJlZ2lzdGVycywgYmFzZSwgdmFsdWUsIHN0dWJJbmZvR1BSKQorICAgICwgbV9wcm9w
ZXJ0eU5hbWUocHJvcGVydHlOYW1lKQogewogICAgIFJFTEVBU0VfQVNTRVJUKHRoaXNSZWdzLnBh
eWxvYWRHUFIoKSAhPSB0aGlzUmVncy50YWdHUFIoKSk7CiAKQEAgLTE3Miw5ICsyNjIsMTIgQEAg
SklUR2V0QnlJZFdpdGhUaGlzR2VuZXJhdG9yOjpKSVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3Io
CiAjZW5kaWYKIH0KIAotdm9pZCBKSVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3I6OmdlbmVyYXRl
RmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXImIGppdCkKK3ZvaWQgSklUR2V0QnlJZFdpdGhUaGlzR2Vu
ZXJhdG9yOjpnZW5lcmF0ZUZhc3RQYXRoKENDYWxsSGVscGVycyYgaml0KQogewotICAgIGdlbmVy
YXRlRmFzdENvbW1vbihqaXQsIElubGluZUFjY2Vzczo6c2l6ZUZvclByb3BlcnR5QWNjZXNzKCkp
OworICAgIGlmIChPcHRpb25zOjp1c2VQcm9wZXJ0eUFjY2Vzc1NpZGVJQygpICYmIG1fcHJvcGVy
dHlOYW1lKQorICAgICAgICBnZW5lcmF0ZVNpZGVJbmxpbmVDYWNoZShqaXQsIElubGluZUFjY2Vz
czo6c2l6ZUZvclByb3BlcnR5QWNjZXNzKCksIG1fcHJvcGVydHlOYW1lKTsKKyAgICBlbHNlCisg
ICAgICAgIGdlbmVyYXRlRmFzdENvbW1vbihqaXQsIElubGluZUFjY2Vzczo6c2l6ZUZvclByb3Bl
cnR5QWNjZXNzKCkpOwogfQogCiAjaWYgVVNFKEpTVkFMVUU2NCkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaAppbmRleCAyZjY5ZjY0
ZWMxNjEuLjcxYjFhYTlhMTcwOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaApAQCAtMjcsNiArMjcsNyBAQAogCiAjaWYgRU5B
QkxFKEpJVCkKIAorI2luY2x1ZGUgIkNhY2hlYWJsZUlkZW50aWZpZXIuaCIKICNpbmNsdWRlICJD
b2RlT3JpZ2luLmgiCiAjaW5jbHVkZSAiSklUT3BlcmF0aW9uVmFsaWRhdGlvbi5oIgogI2luY2x1
ZGUgIkpJVE9wZXJhdGlvbnMuaCIKQEAgLTM4LDYgKzM5LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAK
IGNsYXNzIENhY2hlYWJsZUlkZW50aWZpZXI7CiBjbGFzcyBDYWxsU2l0ZUluZGV4OworY2xhc3Mg
Q0NhbGxIZWxwZXJzOwogY2xhc3MgQ29kZUJsb2NrOwogY2xhc3MgSklUOwogY2xhc3MgU3RydWN0
dXJlU3R1YkluZm87CkBAIC0xMjEsNiArMTIzLDI1IEBAIHN0cnVjdCBCYXNlbGluZUdldEJ5SWRX
aXRoVGhpc1JlZ2lzdGVycyB7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaCA9
IEdQUkluZm86OnJlZ1QzOwogfTsKIAorc3RydWN0IFNpZGVQcm9wZXJ0eUFjY2Vzc1JlZ2lzdGVy
cyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gR1BSSW5mbzo6cmVnVDA7
CisgICAgc3RhdGljX2Fzc2VydChyZXN1bHQgPT0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpy
ZXN1bHQpOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJl
Z1QwOworICAgIHN0YXRpY19hc3NlcnQoYmFzZSA9PSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6
OmJhc2UpOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZv
OjpyZWdUMTsKKyAgICBzdGF0aWNfYXNzZXJ0KHN0dWJJbmZvID09IEJhc2VsaW5lR2V0QnlJZFJl
Z2lzdGVyczo6c3R1YkluZm8pOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRj
aCA9IEdQUkluZm86OnJlZ1QyOworICAgIHN0YXRpY19hc3NlcnQoc2NyYXRjaCA9PSBCYXNlbGlu
ZUdldEJ5SWRSZWdpc3RlcnM6OnNjcmF0Y2gpOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJS
ZWcgZG9udENsb2JiZXJSZWdpc3RlciA9IEdQUkluZm86OnJlZ1QzOworICAgIHN0YXRpY19hc3Nl
cnQoc2NyYXRjaCA9PSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnNjcmF0Y2gpOworCisgICAg
c3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHkgPSBHUFJJbmZvOjpyZWdUNDsKK307CisK
IHN0cnVjdCBCYXNlbGluZUluQnlJZFJlZ2lzdGVycyB7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBH
UFJSZWcgcmVzdWx0ID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7CiAgICAgc3Rh
dGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFz
ZTsKQEAgLTIxMCw2ICsyMzEsNyBAQCBwdWJsaWM6CiBwcm90ZWN0ZWQ6CiAgICAgCiAgICAgdm9p
ZCBnZW5lcmF0ZUZhc3RDb21tb24oTWFjcm9Bc3NlbWJsZXImLCBzaXplX3Qgc2l6ZSk7CisgICAg
dm9pZCBnZW5lcmF0ZVNpZGVJbmxpbmVDYWNoZShDQ2FsbEhlbHBlcnMmLCBzaXplX3Qgc2l6ZSwg
Q2FjaGVhYmxlSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUpOwogICAgIAogICAgIEpTVmFsdWVSZWdz
IG1fYmFzZTsKICAgICBKU1ZhbHVlUmVncyBtX3ZhbHVlOwpAQCAtMjI2LDExICsyNDgsMTIgQEAg
cHVibGljOgogICAgICAgICBDb2RlQmxvY2sqLCBKSVRUeXBlLCBDb2RlT3JpZ2luLCBDYWxsU2l0
ZUluZGV4LCBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywgQ2FjaGVhYmxlSWRlbnRp
ZmllciwKICAgICAgICAgSlNWYWx1ZVJlZ3MgYmFzZSwgSlNWYWx1ZVJlZ3MgdmFsdWUsIEdQUlJl
ZyBzdHViSW5mb0dQUiwgQWNjZXNzVHlwZSk7CiAgICAgCi0gICAgdm9pZCBnZW5lcmF0ZUZhc3RQ
YXRoKE1hY3JvQXNzZW1ibGVyJik7CisgICAgdm9pZCBnZW5lcmF0ZUZhc3RQYXRoKENDYWxsSGVs
cGVycyYpOwogICAgIHZvaWQgZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKEpJVCYsIHVu
c2lnbmVkIHN0dWJJbmZvQ29uc3RhbnQsIEdQUlJlZyBzdHViSW5mb0dQUik7CiAKIHByaXZhdGU6
CiAgICAgYm9vbCBtX2lzTGVuZ3RoQWNjZXNzOworICAgIENhY2hlYWJsZUlkZW50aWZpZXIgbV9w
cm9wZXJ0eU5hbWU7CiB9OwogCiBjbGFzcyBKSVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3IgZmlu
YWwgOiBwdWJsaWMgSklUQnlJZEdlbmVyYXRvciB7CkBAIC0yNDIsNyArMjY1LDEwIEBAIHB1Ymxp
YzoKICAgICAgICAgSlNWYWx1ZVJlZ3MgdmFsdWUsIEpTVmFsdWVSZWdzIGJhc2UsIEpTVmFsdWVS
ZWdzIHRoaXNSZWdzLCBHUFJSZWcgc3R1YkluZm9HUFIpOwogCiAgICAgdm9pZCBnZW5lcmF0ZUJh
c2VsaW5lRGF0YUlDRmFzdFBhdGgoSklUJiwgdW5zaWduZWQgc3R1YkluZm9Db25zdGFudCwgR1BS
UmVnIHN0dWJJbmZvR1BSKTsKLSAgICB2b2lkIGdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJs
ZXImKTsKKyAgICB2b2lkIGdlbmVyYXRlRmFzdFBhdGgoQ0NhbGxIZWxwZXJzJik7CisKK3ByaXZh
dGU6CisgICAgQ2FjaGVhYmxlSWRlbnRpZmllciBtX3Byb3BlcnR5TmFtZTsKIH07CiAKIGNsYXNz
IEpJVFB1dEJ5SWRHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgSklUQnlJZEdlbmVyYXRvciB7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAppbmRleCA0YTVjMDgw
YzA2MGMuLmEyNzExOTA0MWMxYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRPcGVyYXRpb25zLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9w
ZXJhdGlvbnMuY3BwCkBAIC0zMzEsNiArMzMxLDkgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9O
KG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSwgRW5jb2RlZEpTVmFsdWUsIChKU0dsb2JhbE9iamUK
ICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOwog
ICAgICAgICBpZiAoc3R1YkluZm8tPmNvbnNpZGVyQ2FjaGluZ0J5KHZtLCBjb2RlQmxvY2ssIGJh
c2VWYWx1ZS5zdHJ1Y3R1cmVPck51bGwodm0pLCBpZGVudGlmaWVyKSkKICAgICAgICAgICAgIHJl
cGF0Y2hHZXRCeShnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgYmFzZVZhbHVlLCBpZGVudGlmaWVy
LCBzbG90LCAqc3R1YkluZm8sIEdldEJ5S2luZDo6QnlJZCk7CisKKyAgICAgICAgdm0uaGVhcC5w
cm9wZXJ0eUFjY2Vzc1NpZGVJbmxpbmVDYWNoZSgpLm9ic2VydmVTdHJ1Y3R1cmVHZXRCeUlkKGZv
dW5kLCBiYXNlVmFsdWUsIGlkZW50aWZpZXIsIHNsb3QsIHN0dWJJbmZvLCBjb2RlQmxvY2spOwor
CiAgICAgICAgIHJldHVybiBmb3VuZCA/IHNsb3QuZ2V0VmFsdWUoZ2xvYmFsT2JqZWN0LCBpZGVu
dCkgOiBqc1VuZGVmaW5lZCgpOwogICAgIH0pKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRPcGVyYXRpb25zLmgKaW5kZXggNGI1ZDAxMWY5MDZhLi41MGQwMzdmZGNmYTcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCkBAIC0xNDEsNiArMTQxLDcg
QEAgdXNpbmcgU19KSVRPcGVyYXRpb25fR0NaID0gc2l6ZV90KEpJVF9PUEVSQVRJT05fQVRUUklC
VVRFUyAqKShKU0dsb2JhbE9iamVjdCosIEoKIHVzaW5nIFNfSklUT3BlcmF0aW9uX0dKSiA9IHNp
emVfdChKSVRfT1BFUkFUSU9OX0FUVFJJQlVURVMgKikoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVk
SlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpOwogdXNpbmcgVl9KSVRPcGVyYXRpb25fR0pKSiA9IHZv
aWQoSklUX09QRVJBVElPTl9BVFRSSUJVVEVTICopKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpT
VmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSk7CiB1c2luZyBKX0pJVE9wZXJh
dGlvbl9HU3NpSkogPSBFbmNvZGVkSlNWYWx1ZShKSVRfT1BFUkFUSU9OX0FUVFJJQlVURVMgKiko
SlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmVTdHViSW5mbyosIEVuY29kZWRKU1ZhbHVlLCBFbmNv
ZGVkSlNWYWx1ZSk7Cit1c2luZyBKX0pJVE9wZXJhdGlvbl9HU3NpSlAgPSBFbmNvZGVkSlNWYWx1
ZShKSVRfT1BFUkFUSU9OX0FUVFJJQlVURVMgKikoSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmVT
dHViSW5mbyosIEVuY29kZWRKU1ZhbHVlLCB1aW50cHRyX3QpOwogdXNpbmcgSl9KSVRPcGVyYXRp
b25fR1NzaUpKSSA9IEVuY29kZWRKU1ZhbHVlKEpJVF9PUEVSQVRJT05fQVRUUklCVVRFUyAqKShK
U0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZVN0dWJJbmZvKiwgRW5jb2RlZEpTVmFsdWUsIEVuY29k
ZWRKU1ZhbHVlLCBVbmlxdWVkU3RyaW5nSW1wbCopOwogdXNpbmcgVl9KSVRPcGVyYXRpb25fR0ND
SiA9IHZvaWQoSklUX09QRVJBVElPTl9BVFRSSUJVVEVTICopKEpTR2xvYmFsT2JqZWN0KiwgSlND
ZWxsKiwgSlNDZWxsKiwgRW5jb2RlZEpTVmFsdWUpOwogdXNpbmcgSl9KSVRPcGVyYXRpb25fR1Nz
aUpJID0gRW5jb2RlZEpTVmFsdWUoSklUX09QRVJBVElPTl9BVFRSSUJVVEVTICopKEpTR2xvYmFs
T2JqZWN0KiwgU3RydWN0dXJlU3R1YkluZm8qLCBFbmNvZGVkSlNWYWx1ZSwgVW5pcXVlZFN0cmlu
Z0ltcGwqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUHJvcGVydHlB
Y2Nlc3NTaWRlSW5saW5lQ2FjaGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Qcm9w
ZXJ0eUFjY2Vzc1NpZGVJbmxpbmVDYWNoZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwLi5mNGZlMWUxNjNmODkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L1Byb3BlcnR5QWNjZXNzU2lkZUlubGluZUNhY2hlLmNwcApAQCAtMCww
ICsxLDQ5MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQcm9wZXJ0eUFjY2Vzc1NpZGVJbmxpbmVD
YWNoZS5oIgorCisjaWYgRU5BQkxFKEpJVCkgJiYgVVNFKEpTVkFMVUU2NCkgJiYgRU5BQkxFKEVY
VFJBX0NUSV9USFVOS1MpCisKKyNpbmNsdWRlICJBY2Nlc3NDYXNlLmgiCisjaW5jbHVkZSAiQmlu
YXJ5U3dpdGNoLmgiCisjaW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgiCisjaW5jbHVkZSAiQ2FjaGVh
YmxlSWRlbnRpZmllcklubGluZXMuaCIKKyNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRl
ICJIZWFwLmgiCisjaW5jbHVkZSAiSklULmgiCisjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXIuaCIK
KyNpbmNsdWRlICJQb2x5bW9ycGhpY0FjY2Vzcy5oIgorI2luY2x1ZGUgIlN0cnVjdHVyZS5oIgor
I2luY2x1ZGUgIlN0cnVjdHVyZVN0dWJJbmZvLmgiCisjaW5jbHVkZSA8d3RmL0NvbW1hUHJpbnRl
ci5oPgorI2luY2x1ZGUgPHd0Zi9MaXN0RHVtcC5oPgorI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVh
bS5oPgorCisKK25hbWVzcGFjZSBKU0MgeworCituYW1lc3BhY2UgU2lkZUFjY2Vzc0NhY2hlSW50
ZXJuYWwgeworc3RhdGljIGNvbnN0ZXhwciBib29sIHZlcmJvc2UgPSBmYWxzZTsKK30KKworc3Ry
dWN0IFNpZGVBY2Nlc3NHZW5lcmF0aW9uU3RhdGUgeworICAgIFNpZGVBY2Nlc3NHZW5lcmF0aW9u
U3RhdGUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQorICAgICAgICA6IG1f
dm0odm0pCisgICAgICAgICwgbV9nbG9iYWxPYmplY3QoZ2xvYmFsT2JqZWN0KQorICAgIHsKKyAg
ICB9CisgICAgVk0mIG1fdm07CisgICAgSlNHbG9iYWxPYmplY3QqIG1fZ2xvYmFsT2JqZWN0Owor
ICAgIENDYWxsSGVscGVycyogaml0IHsgbnVsbHB0ciB9OworICAgIE1hY3JvQXNzZW1ibGVyOjpK
dW1wTGlzdCBzdWNjZXNzOworICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzbG93UGF0aDsK
K307CisKK2NsYXNzIFNpZGVBY2Nlc3NDYXNlIHsKK3B1YmxpYzoKKyAgICBlbnVtIFNpZGVBY2Nl
c3NBY3Rpb24gOiB1aW50OF90IHsKKyAgICAgICAgSGl0LAorICAgIH07CisKKyAgICBlbnVtIFNp
ZGVBY2Nlc3NTdGF0ZSA6IHVpbnQ4X3QgeworICAgICAgICBHZW5lcmF0ZWQsCisgICAgICAgIEJ1
ZmZlcmVkLAorICAgIH07CisKKyAgICBTaWRlQWNjZXNzQ2FzZShTdHJ1Y3R1cmVJRCBzdHJ1Y3R1
cmUsIENhY2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmllciwgU2lkZUFjY2Vzc0FjdGlvbiB0eXBl
LCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCisgICAgICAgIDogbV9zdHJ1Y3R1cmVJRChzdHJ1Y3R1
cmUpCisgICAgICAgICwgbV9pZGVudGlmaWVyKGlkZW50aWZpZXIpCisgICAgICAgICwgbV90eXBl
KHR5cGUpCisgICAgICAgICwgbV9zdGF0ZShCdWZmZXJlZCkKKyAgICAgICAgLCBtX29mZnNldChv
ZmZzZXQpCisgICAgeworICAgIH0KKworICAgIGJvb2wgY2FuUmVwbGFjZShjb25zdCBTaWRlQWNj
ZXNzQ2FzZSYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICBpZiAobV9zdHJ1Y3R1cmVJRCAh
PSBvdGhlci5tX3N0cnVjdHVyZUlEKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
ICAgIGlmIChtX2lkZW50aWZpZXIgIT0gb3RoZXIubV9pZGVudGlmaWVyKQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgICAgIGlmIChvdGhlci5tX3R5cGUgIT0gbV90eXBlKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIHN3aXRjaCAobV90eXBlKSB7CisgICAg
ICAgIGNhc2UgSGl0OgorICAgICAgICAgICAgQVNTRVJUKG1fb2Zmc2V0ID09IG90aGVyLm1fb2Zm
c2V0KTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisK
KyAgICBzdGQ6OnVuaXF1ZV9wdHI8U2lkZUFjY2Vzc0Nhc2U+IGNsb25lKCkgY29uc3QKKyAgICB7
CisgICAgICAgIGF1dG8gcmVzdWx0ID0gc3RkOjptYWtlX3VuaXF1ZTxTaWRlQWNjZXNzQ2FzZT4o
KnRoaXMpOworICAgICAgICByZXN1bHQtPm1fc3RhdGUgPSBCdWZmZXJlZDsKKyAgICAgICAgcmV0
dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29u
c3QKKyAgICB7CisgICAgICAgIG91dC5wcmludCgiU2lkZUFjY2Vzc0Nhc2UgIiwgKHVpbnQ4X3Qp
bV90eXBlLCAiOiB7ICIpOworICAgICAgICBDb21tYVByaW50ZXIgY29tbWE7CisgICAgICAgIG91
dC5wcmludChjb21tYSwgInN0YXRlID0gIiwgKHVpbnQ4X3QpbV9zdGF0ZSk7CisgICAgICAgIG91
dC5wcmludChjb21tYSwgImlkZW50ID0gJyIsIG1faWRlbnRpZmllciwgIicoIiwgUmF3UG9pbnRl
cihtX2lkZW50aWZpZXIudWlkKCkpLCAiKSIpOworICAgICAgICBpZiAoaXNWYWxpZE9mZnNldCht
X29mZnNldCkpCisgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEsICJvZmZzZXQgPSAiLCBtX29m
ZnNldCk7CisgICAgICAgIG91dC5wcmludChjb21tYSwgInN0cnVjdHVyZUlEID0gIiwgUmF3UG9p
bnRlcihyZWludGVycHJldF9jYXN0PHZvaWQqPihtX3N0cnVjdHVyZUlEKSkpOworICAgICAgICBv
dXQucHJpbnQoIiB9Iik7CisgICAgfQorCisgICAgdm9pZCBnZW5lcmF0ZShTaWRlQWNjZXNzR2Vu
ZXJhdGlvblN0YXRlJiBzdGF0ZSkKKyAgICB7CisgICAgICAgIEdQUlJlZyBzdG9yYWdlR1BSOwor
ICAgICAgICBpZiAoaXNJbmxpbmVPZmZzZXQobV9vZmZzZXQpKQorICAgICAgICAgICAgc3RvcmFn
ZUdQUiA9IFNpZGVQcm9wZXJ0eUFjY2Vzc1JlZ2lzdGVyczo6YmFzZTsKKyAgICAgICAgZWxzZSB7
CisgICAgICAgICAgICBzdGF0ZS5qaXQtPmxvYWRQdHIoCisgICAgICAgICAgICAgICAgQ0NhbGxI
ZWxwZXJzOjpBZGRyZXNzKFNpZGVQcm9wZXJ0eUFjY2Vzc1JlZ2lzdGVyczo6YmFzZSwgSlNPYmpl
Y3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwKKyAgICAgICAgICAgICAgICBTaWRlUHJvcGVydHlBY2Nl
c3NSZWdpc3RlcnM6OnNjcmF0Y2gpOworICAgICAgICAgICAgc3RvcmFnZUdQUiA9IFNpZGVQcm9w
ZXJ0eUFjY2Vzc1JlZ2lzdGVyczo6c2NyYXRjaDsKKyAgICAgICAgfQorCisgICAgICAgIHN0YXRl
LmppdC0+bG9hZDY0KAorICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0b3JhZ2VH
UFIsIG9mZnNldFJlbGF0aXZlVG9CYXNlKG1fb2Zmc2V0KSksIFNpZGVQcm9wZXJ0eUFjY2Vzc1Jl
Z2lzdGVyczo6cmVzdWx0KTsKKyAgICAgICAgc3RhdGUuc3VjY2Vzcy5hcHBlbmQoc3RhdGUuaml0
LT5qdW1wKCkpOworICAgIH0KKworICAgIGJvb2wgdmlzaXRXZWFrKFZNJiB2bSkgY29uc3QKKyAg
ICB7CisgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gdm0uZ2V0U3RydWN0dXJlKG1fc3Ry
dWN0dXJlSUQpOworICAgICAgICByZXR1cm4gdm0uaGVhcC5pc01hcmtlZChzdHJ1Y3R1cmUpOwor
ICAgIH0KKworICAgIFN0cnVjdHVyZUlEIG1fc3RydWN0dXJlSUQ7CisgICAgQ2FjaGVhYmxlSWRl
bnRpZmllciBtX2lkZW50aWZpZXI7CisgICAgU2lkZUFjY2Vzc0FjdGlvbiBtX3R5cGU7CisgICAg
U2lkZUFjY2Vzc1N0YXRlIG1fc3RhdGU7CisgICAgUHJvcGVydHlPZmZzZXQgbV9vZmZzZXQ7CisK
K307CisKK2NsYXNzIFNpZGVBY2Nlc3NKSVRTdHViUm91dGluZTogcHVibGljIEdDQXdhcmVKSVRT
dHViUm91dGluZSB7CitwdWJsaWM6CisgICAgdXNpbmcgQmFzZSA9IEdDQXdhcmVKSVRTdHViUm91
dGluZTsKKworICAgIFNpZGVBY2Nlc3NKSVRTdHViUm91dGluZShjb25zdCBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8SklUU3R1YlJvdXRpbmVQdHJUYWc+JiBjb2RlLCBWTSYsIEZpeGVkVmVjdG9yPHN0
ZDo6dW5pcXVlX3B0cjxTaWRlQWNjZXNzQ2FzZT4+JiYgY2FzZXMpCisgICAgICAgIDogR0NBd2Fy
ZUpJVFN0dWJSb3V0aW5lKGNvZGUpCisgICAgICAgICwgbV9jYXNlcyhXVEZNb3ZlKGNhc2VzKSkK
KyAgICB7CisgICAgfQorCisgICAgY29uc3QgRml4ZWRWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPFNp
ZGVBY2Nlc3NDYXNlPj4mIGNhc2VzKCkgY29uc3QgeyByZXR1cm4gbV9jYXNlczsgfQorCitwcml2
YXRlOgorICAgIEZpeGVkVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxTaWRlQWNjZXNzQ2FzZT4+IG1f
Y2FzZXM7Cit9OworCitjbGFzcyBTaWRlQWNjZXNzQ2FzZUdyb3VwIHsKK3B1YmxpYzoKKworICAg
IFNpZGVBY2Nlc3NDYXNlR3JvdXAoU3RydWN0dXJlSUQgc3RydWN0dXJlKQorICAgICAgICA6IG1f
c3RydWN0dXJlSUQoc3RydWN0dXJlKQorICAgICAgICAsIGJ1ZmZlcmluZ0NvdW50ZG93bihPcHRp
b25zOjpyZXBhdGNoQnVmZmVyaW5nQ291bnRkb3duKCkpCisgICAgeworICAgIH0KKworICAgIEFj
Y2Vzc0dlbmVyYXRpb25SZXN1bHQgcmVnZW5lcmF0ZShjb25zdCBHQ1NhZmVDb25jdXJyZW50SlNM
b2NrZXImLCBWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jayog
Y29kZUJsb2NrKQorICAgIHsKKyAgICAgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxTaWRlQWNj
ZXNzQ2FzZT4+IGNhc2VzOworICAgICAgICBTaWRlQWNjZXNzR2VuZXJhdGlvblN0YXRlIHN0YXRl
KHZtLCBnbG9iYWxPYmplY3QpOworCisgICAgICAgIHVuc2lnbmVkIHNyY0luZGV4ID0gMDsKKyAg
ICAgICAgdW5zaWduZWQgZHN0SW5kZXggPSAwOworICAgICAgICB3aGlsZSAoc3JjSW5kZXggPCBt
X2xpc3Quc2l6ZSgpKSB7CisgICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8U2lkZUFjY2Vzc0Nh
c2U+IHNvbWVDYXNlID0gV1RGTW92ZShtX2xpc3Rbc3JjSW5kZXgrK10pOworCisgICAgICAgICAg
ICAvLyBJZiB0aGUgY2FzZSBoYWQgYmVlbiBnZW5lcmF0ZWQsIHRoZW4gd2UgaGF2ZSB0byBrZWVw
IHRoZSBvcmlnaW5hbCBpbiBtX2xpc3QgaW4gY2FzZSB3ZQorICAgICAgICAgICAgLy8gZmFpbCB0
byByZWdlbmVyYXRlLiBUaGF0IGNhc2UgbWF5IGhhdmUgZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgYXJl
IHVzZWQgYnkgdGhlIGNvZGUgdGhhdCBpdAorICAgICAgICAgICAgLy8gaGFkIGdlbmVyYXRlZC4g
SWYgdGhlIGNhc2UgaGFkIG5vdCBiZWVuIGdlbmVyYXRlZCwgdGhlbiB3ZSB3YW50IHRvIHJlbW92
ZSBpdCBmcm9tIG1fbGlzdC4KKyAgICAgICAgICAgIGJvb2wgaXNHZW5lcmF0ZWQgPSBzb21lQ2Fz
ZS0+bV9zdGF0ZSA9PSBTaWRlQWNjZXNzQ2FzZTo6R2VuZXJhdGVkOworICAgICAgICAgICAgYm9v
bCBpc1JlZHVuZGFudCA9IGZhbHNlOworCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSBz
cmNJbmRleDsgaiA8IG1fbGlzdC5zaXplKCk7ICsraikgeworICAgICAgICAgICAgICAgIGlmICht
X2xpc3Rbal0tPmNhblJlcGxhY2UoKnNvbWVDYXNlKSkgeworICAgICAgICAgICAgICAgICAgICBp
c1JlZHVuZGFudCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFpc1JlZHVuZGFudCkg
eworICAgICAgICAgICAgICAgIGlmIChpc0dlbmVyYXRlZCkgeworICAgICAgICAgICAgICAgICAg
ICBjYXNlcy5hcHBlbmQoc29tZUNhc2UtPmNsb25lKCkpOworICAgICAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgICAgIGNhc2VzLmFwcGVuZChXVEZNb3ZlKHNvbWVDYXNlKSk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoaXNH
ZW5lcmF0ZWQpCisgICAgICAgICAgICAgICAgbV9saXN0W2RzdEluZGV4KytdID0gV1RGTW92ZShz
b21lQ2FzZSk7CisKKyAgICAgICAgfQorICAgICAgICBtX2xpc3QucmVzaXplKGRzdEluZGV4KTsK
KworICAgICAgICBkYXRhTG9nTG5JZihTaWRlQWNjZXNzQ2FjaGVJbnRlcm5hbDo6dmVyYm9zZSwg
InJlZ2VuZXJhdGluZyB3aXRoIGNhc2VzOiAiLCBsaXN0RHVtcChjYXNlcykpOworCisgICAgICAg
IGlmIChjYXNlcy5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm4gQWNjZXNzR2VuZXJhdGlv
blJlc3VsdDo6TWFkZU5vQ2hhbmdlczsKKworICAgICAgICBib29sIGdlbmVyYXRlZEZpbmFsQ29k
ZSA9IGZhbHNlOworICAgICAgICBWZWN0b3I8SlNDZWxsKj4gY2VsbHNUb01hcms7CisgICAgICAg
IHVuc2lnbmVkIGluZGV4ID0gMDsKKyAgICAgICAgZm9yIChhdXRvJiBlbnRyeSA6IGNhc2VzKSB7
CisgICAgICAgICAgICBzd2l0Y2ggKGVudHJ5LT5tX3R5cGUpIHsKKyAgICAgICAgICAgIGNhc2Ug
U2lkZUFjY2Vzc0Nhc2U6OkhpdDoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9OworICAgICAgICAgICAgKytpbmRleDsKKyAg
ICAgICAgfQorCisgICAgICAgIGF1dG8gZmluaXNoQ29kZUdlbmVyYXRpb24gPSBbJl0oUmVmUHRy
PFNpZGVBY2Nlc3NKSVRTdHViUm91dGluZT4mJiBzdHViKSB7CisgICAgICAgICAgICBtX3N0dWJS
b3V0aW5lID0gV1RGTW92ZShzdHViKTsKKyAgICAgICAgICAgIG1fbGlzdCA9IFdURk1vdmUoY2Fz
ZXMpOworICAgICAgICAgICAgbV9saXN0LnNocmlua1RvRml0KCk7CisKKyAgICAgICAgICAgIEFj
Y2Vzc0dlbmVyYXRpb25SZXN1bHQ6OktpbmQgcmVzdWx0S2luZDsKKyAgICAgICAgICAgIGlmICht
X2xpc3Quc2l6ZSgpID49IE9wdGlvbnM6Om1heEFjY2Vzc1ZhcmlhbnRMaXN0U2l6ZSgpIHx8IGdl
bmVyYXRlZEZpbmFsQ29kZSkKKyAgICAgICAgICAgICAgICByZXN1bHRLaW5kID0gQWNjZXNzR2Vu
ZXJhdGlvblJlc3VsdDo6R2VuZXJhdGVkRmluYWxDb2RlOworICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgIHJlc3VsdEtpbmQgPSBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0OjpHZW5lcmF0
ZWROZXdDb2RlOworCisgICAgICAgICAgICByZXR1cm4gQWNjZXNzR2VuZXJhdGlvblJlc3VsdChy
ZXN1bHRLaW5kLCBtX3N0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKTsKKyAgICAgICAgfTsKKwor
ICAgICAgICBDQ2FsbEhlbHBlcnMgaml0KGNvZGVCbG9jayk7CisgICAgICAgIHN0YXRlLmppdCA9
ICZqaXQ7CisgICAgICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7CisKKyAgICAgICAgeworICAg
ICAgICAgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gU2lkZVByb3BlcnR5QWNjZXNzUmVn
aXN0ZXJzOjpiYXNlOworICAgICAgICAgICAgY29uc3RleHByIEdQUlJlZyByZXN1bHRHUFIgPSBT
aWRlUHJvcGVydHlBY2Nlc3NSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICAgICAgICAgIGNvbnN0ZXhw
ciBHUFJSZWcgcHJvcGVydHlHUFIgPSBTaWRlUHJvcGVydHlBY2Nlc3NSZWdpc3RlcnM6OnByb3Bl
cnR5OworICAgICAgICAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IFNpZGVQcm9w
ZXJ0eUFjY2Vzc1JlZ2lzdGVyczo6c3R1YkluZm87CisgICAgICAgICAgICBjb25zdGV4cHIgR1BS
UmVnIHNjcmF0Y2hHUFIgPSBTaWRlUHJvcGVydHlBY2Nlc3NSZWdpc3RlcnM6OnNjcmF0Y2g7CisK
KyAgICAgICAgICAgIEFTU0VSVCghY2FzZXMuaXNFbXB0eSgpKTsKKworICAgICAgICAgICAgLy8g
TGV0IHNvbWUgb2YgdGhlIGNhc2VzIGdvIHRocm91Z2ggdGhlIGNhbGxzaXRlJ3Mgc2xvdyBwYXRo
LCBzbyB0aGF0IGl0IGNhbiBjb2xsZWN0IHByb2ZpbGluZworICAgICAgICAgICAgLy8gaW5mb3Jt
YXRpb24gdG9vLgorICAgICAgICAgICAgaml0LmxvYWQzMigKKyAgICAgICAgICAgICAgICBDQ2Fs
bEhlbHBlcnM6OkFkZHJlc3Moc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRP
ZlNpZGVBY2Nlc3NTa2lwcGVkQ2FsbHNpdGVDb3VudGRvd24oKSksCisgICAgICAgICAgICAgICAg
c2NyYXRjaEdQUik7CisgICAgICAgICAgICBzdGF0ZS5zbG93UGF0aC5hcHBlbmQoaml0LmJyYW5j
aFRlc3QzMihDQ2FsbEhlbHBlcnM6Olplcm8sIHNjcmF0Y2hHUFIpKTsKKyAgICAgICAgICAgIGpp
dC5zdWIzMihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigxKSwgc2NyYXRjaEdQUik7CisgICAg
ICAgICAgICBqaXQuc3RvcmUzMihzY3JhdGNoR1BSLAorICAgICAgICAgICAgICAgIENDYWxsSGVs
cGVyczo6QWRkcmVzcyhzdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2lk
ZUFjY2Vzc1NraXBwZWRDYWxsc2l0ZUNvdW50ZG93bigpKSk7CisKKyAgICAgICAgICAgIGppdC5s
b2FkMzIoCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VHUFIsIEpT
Q2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksCisgICAgICAgICAgICAgICAgc2NyYXRjaEdQUik7
CisgICAgICAgICAgICBzdGF0ZS5zbG93UGF0aC5hcHBlbmQoCisgICAgICAgICAgICAgICAgIGpp
dC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCBzY3JhdGNoR1BSLCBDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW0zMihtX3N0cnVjdHVyZUlEKSkpOworCisgICAgICAgICAgICBWZWN0b3I8
aW50NjRfdD4gY2FzZVZhbHVlcyhjYXNlcy5zaXplKCkpOworICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGNhc2VzLnNpemUoKTsgKytpKQorICAgICAgICAgICAgICAgIGNhc2VW
YWx1ZXNbaV0gPSBjYXNlc1tpXS0+bV9pZGVudGlmaWVyLnJhd0JpdHMoKTsKKworICAgICAgICAg
ICAgQmluYXJ5U3dpdGNoIGJpbmFyeVN3aXRjaChwcm9wZXJ0eUdQUiwgY2FzZVZhbHVlcywgQmlu
YXJ5U3dpdGNoOjpJbnRQdHIpOworICAgICAgICAgICAgd2hpbGUgKGJpbmFyeVN3aXRjaC5hZHZh
bmNlKGppdCkpCisgICAgICAgICAgICAgICAgY2FzZXNbYmluYXJ5U3dpdGNoLmNhc2VJbmRleCgp
XS0+Z2VuZXJhdGUoc3RhdGUpOworICAgICAgICAgICAgc3RhdGUuc2xvd1BhdGguYXBwZW5kKGJp
bmFyeVN3aXRjaC5mYWxsVGhyb3VnaCgpKTsKKworICAgICAgICAgICAgc3RhdGUuc3VjY2Vzcy5s
aW5rKCZqaXQpOworICAgICAgICAgICAgaml0LnJldCgpOworCisgICAgICAgICAgICBzdGF0ZS5z
bG93UGF0aC5saW5rKCZqaXQpOworCisgICAgICAgICAgICBzdGF0aWNfYXNzZXJ0KEZ1bmN0aW9u
VHJhaXRzPGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk+Ojphcml0eSA8IEdQUklu
Zm86Om51bWJlck9mQXJndW1lbnRSZWdpc3RlcnMsICJUaGlzIGNhbGwgYXNzdW1lcyB0aGF0IHdl
IGRvbid0IHBhc3MgYXJndW1lbnRzIG9uIHRoZSBzdGFjay4iKTsKKyAgICAgICAgICAgIHN0YXRp
Y19hc3NlcnQoR1BSSW5mbzo6bm9uQXJnR1BSMCAhPSBiYXNlR1BSKTsKKyAgICAgICAgICAgIHN0
YXRpY19hc3NlcnQoR1BSSW5mbzo6bm9uQXJnR1BSMCAhPSBwcm9wZXJ0eUdQUik7CisgICAgICAg
ICAgICBqaXQubW92ZShzdHViSW5mb0dQUiwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7CisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgYXV0byBzdHViSW5mb0dQUiA9IEdQUkluZm86Om5vbkFy
Z0dQUjA7CisgICAgICAgICAgICAgICAgaml0LnNldHVwQXJndW1lbnRzPGRlY2x0eXBlKG9wZXJh
dGlvbkdldEJ5SWRPcHRpbWl6ZSk+KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihnbG9iYWxP
YmplY3QpLCBzdHViSW5mb0dQUiwgYmFzZUdQUiwgcHJvcGVydHlHUFIpOworICAgICAgICAgICAg
ICAgIGppdC5wcmVwYXJlQ2FsbE9wZXJhdGlvbih2bSk7CisgICAgICAgICAgICAgICAgLy8gdGFp
bCBjYWxsCisgICAgICAgICAgICAgICAgaml0LnVudGFnUmV0dXJuQWRkcmVzcygpOworICAgICAg
ICAgICAgICAgIGppdC5mYXJKdW1wKENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHViSW5mb0dQUiwg
U3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgT3BlcmF0aW9uUHRy
VGFnKTsKKyAgICAgICAgICAgICAgICBzdGF0aWNfYXNzZXJ0KEdQUkluZm86OnJldHVyblZhbHVl
R1BSID09IHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAgaml0LmJyZWFrcG9pbnQoKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcihq
aXQsIGNvZGVCbG9jaywgTGlua0J1ZmZlcjo6UHJvZmlsZTo6SW5saW5lQ2FjaGUsIEpJVENvbXBp
bGF0aW9uQ2FuRmFpbCk7CisgICAgICAgIGlmIChsaW5rQnVmZmVyLmRpZEZhaWxUb0FsbG9jYXRl
KCkpIHsKKyAgICAgICAgICAgIGRhdGFMb2dMbklmKFNpZGVBY2Nlc3NDYWNoZUludGVybmFsOjp2
ZXJib3NlLCAiRGlkIGZhaWwgdG8gYWxsb2NhdGUuIik7CisgICAgICAgICAgICByZXR1cm4gQWNj
ZXNzR2VuZXJhdGlvblJlc3VsdDo6R2F2ZVVwOworICAgICAgICB9CisKKyAgICAgICAgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiBjb2RlID0gRklOQUxJWkVfQ09E
RV9GT1IoCisgICAgICAgICAgICBjb2RlQmxvY2ssIGxpbmtCdWZmZXIsIEpJVFN0dWJSb3V0aW5l
UHRyVGFnLAorICAgICAgICAgICAgIiVzIiwgdG9DU3RyaW5nKCJTaWRlIEFjY2VzcyBzdHViIGZv
ciAiLCAqY29kZUJsb2NrLCAiIFN0cnVjdHVyZSgiLCBtX3N0cnVjdHVyZUlELCAiKTogIikuZGF0
YSgpKTsKKworICAgICAgICBhdXRvIHN0dWIgPSBhZG9wdFJlZigqbmV3IFNpZGVBY2Nlc3NKSVRT
dHViUm91dGluZShjb2RlLCB2bSwgRml4ZWRWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPFNpZGVBY2Nl
c3NDYXNlPj57IFdURk1vdmUoY2FzZXMpIH0pKTsKKyAgICAgICAgc3R1Yi0+bWFrZUdDQXdhcmUo
dm0pOworCisgICAgICAgIHJldHVybiBmaW5pc2hDb2RlR2VuZXJhdGlvbihXVEZNb3ZlKHN0dWIp
KTsKKyAgICB9CisKKyAgICBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0IGFkZENhc2VzKGNvbnN0IEdD
U2FmZUNvbmN1cnJlbnRKU0xvY2tlciYgbG9ja2VyLCBWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIENvZGVCbG9jayogY29kZUJsb2NrLCBWZWN0b3I8c3RkOjp1bmlxdWVfcHRy
PFNpZGVBY2Nlc3NDYXNlPj4gb3JpZ2luYWxDYXNlc1RvQWRkKQorICAgIHsKKyAgICAgICAgQVNT
RVJUKHZtLmhlYXAuaXNEZWZlcnJlZCgpKTsKKyAgICAgICAgCisgICAgICAgIFZlY3RvcjxzdGQ6
OnVuaXF1ZV9wdHI8U2lkZUFjY2Vzc0Nhc2U+PiBjYXNlc1RvQWRkOworICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgb3JpZ2luYWxDYXNlc1RvQWRkLnNpemUoKTsgKytpKSB7CisgICAg
ICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8U2lkZUFjY2Vzc0Nhc2U+IG15Q2FzZSA9IFdURk1vdmUo
b3JpZ2luYWxDYXNlc1RvQWRkW2ldKTsKKworICAgICAgICAgICAgLy8gQWRkIGl0IG9ubHkgaWYg
aXQgaXMgbm90IHJlcGxhY2VkIGJ5IHRoZSBzdWJzZXF1ZW50IGNhc2VzIGluIHRoZSBsaXN0Lgor
ICAgICAgICAgICAgYm9vbCBmb3VuZCA9IGZhbHNlOworICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBqID0gaSArIDE7IGogPCBvcmlnaW5hbENhc2VzVG9BZGQuc2l6ZSgpOyArK2opIHsKKyAgICAg
ICAgICAgICAgICBpZiAob3JpZ2luYWxDYXNlc1RvQWRkW2pdLT5jYW5SZXBsYWNlKCpteUNhc2Up
KSB7CisgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBpZiAoZm91bmQpCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIGNh
c2VzVG9BZGQuYXBwZW5kKFdURk1vdmUobXlDYXNlKSk7CisgICAgICAgIH0KKworICAgICAgICBk
YXRhTG9nTG5JZihTaWRlQWNjZXNzQ2FjaGVJbnRlcm5hbDo6dmVyYm9zZSwgIkFkZGluZyBjYXNl
czogIiwgbGlzdER1bXAoY2FzZXNUb0FkZCkpOworCisgICAgICAgIGlmIChjYXNlc1RvQWRkLmlz
RW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybiBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0OjpCdWZm
ZXJlZDsKKworICAgICAgICBmb3IgKGF1dG8mIGNhc2VUb0FkZCA6IGNhc2VzVG9BZGQpIHsKKyAg
ICAgICAgICAgIG1fbGlzdC5hcHBlbmQoV1RGTW92ZShjYXNlVG9BZGQpKTsKKyAgICAgICAgfQor
CisgICAgICAgIGRhdGFMb2dMbklmKFNpZGVBY2Nlc3NDYWNoZUludGVybmFsOjp2ZXJib3NlLCAi
QnVmZmVyaW5nIENvdW50ZG93bjogIiwgYnVmZmVyaW5nQ291bnRkb3duKTsKKyAgICAgICAgYnVm
ZmVyaW5nQ291bnRkb3duLS07CisKKyAgICAgICAgaWYgKGJ1ZmZlcmluZ0NvdW50ZG93bikKKyAg
ICAgICAgICAgIHJldHVybiBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0OjpCdWZmZXJlZDsKKworICAg
ICAgICBhdXRvIHJlc3VsdCA9IHJlZ2VuZXJhdGUobG9ja2VyLCB2bSwgZ2xvYmFsT2JqZWN0LCBj
b2RlQmxvY2spOworCisgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFyZXN1bHQuYnVmZmVyZWQoKSk7
CisgICAgICAgIGJ1ZmZlcmluZ0NvdW50ZG93biA9IE9wdGlvbnM6OnJlcGF0Y2hCdWZmZXJpbmdD
b3VudGRvd24oKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBBY2Nlc3NH
ZW5lcmF0aW9uUmVzdWx0IHRyeUNhY2hlR2V0QnlJZChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LAorICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNDZWxsKiBiYXNlQ2VsbCwgQ2Fj
aGVhYmxlSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUsCisgICAgICAgIGNvbnN0IFByb3BlcnR5U2xv
dCYgc2xvdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2spCisgICAgeworICAgICAgICBSRUxFQVNFX0FT
U0VSVChPcHRpb25zOjp1c2VQcm9wZXJ0eUFjY2Vzc1NpZGVJQygpKTsKKyAgICAgICAgQVNTRVJU
KG1fc3RydWN0dXJlSUQgPT0gc3RydWN0dXJlLT5pZCgpKTsKKyAgICAgICAgVk0mIHZtID0gZ2xv
YmFsT2JqZWN0LT52bSgpOworICAgICAgICBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0IHJlc3VsdDsK
KworICAgICAgICB7CisgICAgICAgICAgICBHQ1NhZmVDb25jdXJyZW50SlNMb2NrZXIgbG9ja2Vy
KGNvZGVCbG9jay0+bV9sb2NrLCBnbG9iYWxPYmplY3QtPnZtKCkuaGVhcCk7CisKKyAgICAgICAg
ICAgIGlmICghc2xvdC5pc0NhY2hlYWJsZSgpIHx8IHNsb3QuaXNVbnNldCgpIHx8ICFzbG90Lmlz
Q2FjaGVhYmxlVmFsdWUoKQorICAgICAgICAgICAgICAgIHx8IHNsb3Quc2xvdEJhc2UoKSAhPSBi
YXNlQ2VsbCB8fCBzbG90LndhdGNocG9pbnRTZXQoKSB8fCBzdHJ1Y3R1cmUtPm5lZWRJbXB1cmVQ
cm9wZXJ0eVdhdGNocG9pbnQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gQWNjZXNzR2VuZXJh
dGlvblJlc3VsdDo6R2F2ZVVwOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoYmFzZUNlbGwt
PnR5cGUoKSAhPSBQdXJlRm9yd2FyZGluZ1Byb3h5VHlwZSk7CisKKyAgICAgICAgICAgIFByb3Bl
cnR5T2Zmc2V0IG9mZnNldCA9IHNsb3QuaXNVbnNldCgpID8gaW52YWxpZE9mZnNldCA6IHNsb3Qu
Y2FjaGVkT2Zmc2V0KCk7CisgICAgICAgICAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPFNpZGVB
Y2Nlc3NDYXNlPj4gbmV3Q2FzZXM7CisgICAgICAgICAgICBuZXdDYXNlcy5hcHBlbmQoc3RkOjpt
YWtlX3VuaXF1ZTxTaWRlQWNjZXNzQ2FzZT4obV9zdHJ1Y3R1cmVJRCwgcHJvcGVydHlOYW1lLCBT
aWRlQWNjZXNzQ2FzZTo6SGl0LCBvZmZzZXQpKTsKKworICAgICAgICAgICAgcmVzdWx0ID0gYWRk
Q2FzZXMobG9ja2VyLCB2bSwgZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIFdURk1vdmUobmV3Q2Fz
ZXMpKTsKKworICAgICAgICAgICAgaWYgKHJlc3VsdC5nZW5lcmF0ZWRTb21lQ29kZSgpKSB7Cisg
ICAgICAgICAgICAgICAgZGF0YUxvZ0xuSWYoU2lkZUFjY2Vzc0NhY2hlSW50ZXJuYWw6OnZlcmJv
c2UsICJ0cnlDYWNoZUdldEJ5SWQgZ2VuZXJhdGVkIHNvbWUgY29kZSIpOworICAgICAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKHJlc3VsdC5jb2RlKCkpOworICAgICAgICAgICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBSRUxFQVNFX0FT
U0VSVCghcmVzdWx0LnNob3VsZFJlc2V0U3R1YkFuZEZpcmVXYXRjaHBvaW50cygpKTsKKworICAg
ICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIGJvb2wgdmlzaXRXZWFrKFZNJiB2bSkg
Y29uc3QKKyAgICB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2xpc3Quc2l6
ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGlmICghbV9saXN0W2ldLT52aXNpdFdlYWsodm0pKQor
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBpZiAobV9z
dHViUm91dGluZSkgeworICAgICAgICAgICAgaWYgKCFtX3N0dWJSb3V0aW5lLT52aXNpdFdlYWso
dm0pKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBTdHJ1Y3R1cmVJRCBtX3N0cnVjdHVyZUlEOworICAg
IFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8U2lkZUFjY2Vzc0Nhc2U+PiBtX2xpc3Q7CisKKyAgICB1
aW50OF90IGJ1ZmZlcmluZ0NvdW50ZG93bjsKKyAgICBSZWZQdHI8U2lkZUFjY2Vzc0pJVFN0dWJS
b3V0aW5lPiBtX3N0dWJSb3V0aW5lOworfTsKKworUHJvcGVydHlBY2Nlc3NTaWRlSW5saW5lQ2Fj
aGU6OlByb3BlcnR5QWNjZXNzU2lkZUlubGluZUNhY2hlKFZNJiB2bSkKKyAgICA6IG1fdm0oJnZt
KQoreworfQorCitQcm9wZXJ0eUFjY2Vzc1NpZGVJbmxpbmVDYWNoZTo6flByb3BlcnR5QWNjZXNz
U2lkZUlubGluZUNhY2hlKCkKK3sKK30KKwordm9pZCBQcm9wZXJ0eUFjY2Vzc1NpZGVJbmxpbmVD
YWNoZTo6b2JzZXJ2ZVN0cnVjdHVyZUdldEJ5SWQoYm9vbCBpc0hpdCwgY29uc3QgSlNWYWx1ZSBi
YXNlVmFsdWUsCisgICAgY29uc3QgQ2FjaGVhYmxlSWRlbnRpZmllciYgaWRlbnRpZmllciwgY29u
c3QgUHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIENvZGVC
bG9jayogY29kZUJsb2NrKQoreworICAgIGlmICghT3B0aW9uczo6dXNlUHJvcGVydHlBY2Nlc3NT
aWRlSUMoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBi
YXNlVmFsdWUuc3RydWN0dXJlT3JOdWxsKCptX3ZtKTsKKworICAgIGlmICghaXNIaXQgfHwgIXN0
cnVjdHVyZSB8fCBiYXNlVmFsdWUgIT0gc2xvdC5zbG90QmFzZSgpIHx8ICFzbG90LmlzQ2FjaGVh
YmxlKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChzdHViSW5mby0+c2lkZUFjY2Vzc1Nr
aXBwZWRDYWxsc2l0ZUNvdW50ZG93biA+IDEwKSB7CisgICAgICAgIGRhdGFMb2dMbklmKFNpZGVB
Y2Nlc3NDYWNoZUludGVybmFsOjp2ZXJib3NlLCAiU2FtcGxpbmcgc2xvdyBwYXRoIHRvIGxldCBj
YWxsc2l0ZSBjb2xsZWN0IGluZm8gIiwgaWRlbnRpZmllcik7CisgICAgICAgIHN0dWJJbmZvLT5z
aWRlQWNjZXNzU2tpcHBlZENhbGxzaXRlQ291bnRkb3duID0gMDsKKyAgICB9CisKKyAgICBpZiAo
IW1fc2VlblN0cnVjdHVyZXMuY29udGFpbnMoc3RydWN0dXJlLT5pZCgpKSkKKyAgICAgICAgbV9z
ZWVuU3RydWN0dXJlcy5hZGQoc3RydWN0dXJlLT5pZCgpLCBzdGQ6Om1ha2VfdW5pcXVlPFNpZGVB
Y2Nlc3NDYXNlR3JvdXA+KHN0cnVjdHVyZS0+aWQoKSkpOworICAgIGF1dG8mIGdyb3VwID0gKm1f
c2VlblN0cnVjdHVyZXMuZ2V0KHN0cnVjdHVyZS0+aWQoKSk7CisKKyAgICBpZiAobV9nZXRCeUlk
SnVtcFRhYmxlW2J1Y2tldEZvcihzdHJ1Y3R1cmUtPmlkKCkpXSkgeworICAgICAgICBpZiAoIWdy
b3VwLm1fc3R1YlJvdXRpbmUgfHwgbV9nZXRCeUlkSnVtcFRhYmxlW2J1Y2tldEZvcihzdHJ1Y3R1
cmUtPmlkKCkpXS5leGVjdXRhYmxlQWRkcmVzcygpICE9IGdyb3VwLm1fc3R1YlJvdXRpbmUtPmNv
ZGUoKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSkgeworICAgICAgICAgICAgZGF0YUxvZ0xu
SWYoU2lkZUFjY2Vzc0NhY2hlSW50ZXJuYWw6OnZlcmJvc2UsICJIYXNoIGNvbGxpc2lvbiBvbiAi
LCBzdHJ1Y3R1cmUtPmlkKCkpOworICAgICAgICAgICAgbV9zZWVuU3RydWN0dXJlcy5yZW1vdmUo
c3RydWN0dXJlLT5pZCgpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0K
KworICAgIGF1dG8gcmVzdWx0ID0gZ3JvdXAudHJ5Q2FjaGVHZXRCeUlkKHN0cnVjdHVyZS0+Z2xv
YmFsT2JqZWN0KCksIHN0cnVjdHVyZSwgYmFzZVZhbHVlLmFzQ2VsbCgpLCBpZGVudGlmaWVyLCBz
bG90LCBjb2RlQmxvY2spOworCisgICAgaWYgKHJlc3VsdC5nZW5lcmF0ZWRTb21lQ29kZSgpKSB7
CisgICAgICAgIGRhdGFMb2dMbklmKFNpZGVBY2Nlc3NDYWNoZUludGVybmFsOjp2ZXJib3NlLCAi
UGF0aGNoaW5nICIsIHN0cnVjdHVyZS0+aWQoKSwgIiBhbmQgIiwgaWRlbnRpZmllciwgIiB0byAi
LCBSYXdQb2ludGVyKHJlc3VsdC5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOworICAgICAg
ICBtX2dldEJ5SWRKdW1wVGFibGVbYnVja2V0Rm9yKHN0cnVjdHVyZS0+aWQoKSldID0gRnVuY3Rp
b25QdHI8SklUU3R1YlJvdXRpbmVQdHJUYWc+KHJlc3VsdC5jb2RlKCkpOworICAgIH0gZWxzZSBp
ZiAocmVzdWx0LnNob3VsZEdpdmVVcE5vdygpKSB7CisgICAgICAgIGRhdGFMb2dMbklmKFNpZGVB
Y2Nlc3NDYWNoZUludGVybmFsOjp2ZXJib3NlLCAiU2hvdWxkIGdpdmUgdXAgb24gIiwgaWRlbnRp
ZmllciwgIiBvbiAiLCBSYXdQb2ludGVyKHN0cnVjdHVyZSkpOworICAgICAgICBtX2dldEJ5SWRK
dW1wVGFibGVbYnVja2V0Rm9yKHN0cnVjdHVyZS0+aWQoKSldID0gbnVsbHB0cjsKKyAgICB9Cit9
CisKK2Jvb2wgUHJvcGVydHlBY2Nlc3NTaWRlSW5saW5lQ2FjaGU6OnZpc2l0V2VhayhWTSYgdm0p
Cit7CisgICAgSGFzaFNldDxTdHJ1Y3R1cmVJRD4gZGVhZFN0cnVjdHVyZXM7CisgICAgZm9yIChh
dXRvJiBrdiA6IG1fc2VlblN0cnVjdHVyZXMpIHsKKyAgICAgICAgaWYgKCFrdi52YWx1ZS0+dmlz
aXRXZWFrKHZtKSkgeworICAgICAgICAgICAgZGVhZFN0cnVjdHVyZXMuYWRkKGt2LmtleSk7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgZm9yIChTdHJ1Y3R1cmVJRCBzaWQgOiBkZWFkU3RydWN0dXJl
cykgeworICAgICAgICBtX3NlZW5TdHJ1Y3R1cmVzLnJlbW92ZShzaWQpOworICAgICAgICBtX2dl
dEJ5SWRKdW1wVGFibGVbYnVja2V0Rm9yKHNpZCldID0gbnVsbHB0cjsKKyAgICB9CisgICAgcmV0
dXJuIGRlYWRTdHJ1Y3R1cmVzLmlzRW1wdHkoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisK
KyNlbmRpZiAvLyBFTkFCTEUoSklUKQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L1Byb3BlcnR5QWNjZXNzU2lkZUlubGluZUNhY2hlLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L1Byb3BlcnR5QWNjZXNzU2lkZUlubGluZUNhY2hlLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi4zMDUzNGM5YWMyOGUKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Byb3BlcnR5QWNjZXNzU2lkZUlubGluZUNhY2hl
LmgKQEAgLTAsMCArMSw3NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEpJVCkgJiYgVVNFKEpTVkFMVUU2
NCkKKworI2luY2x1ZGUgIkNhY2hlYWJsZUlkZW50aWZpZXIuaCIKKyNpbmNsdWRlICJKU0NKU1Zh
bHVlLmgiCisjaW5jbHVkZSAiUmVnaXN0ZXJTZXQuaCIKKyNpbmNsdWRlICJTdHJ1Y3R1cmVJRFRh
YmxlLmgiCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY2xh
c3MgQ29kZUJsb2NrOworY2xhc3MgU2lkZUFjY2Vzc0Nhc2VHcm91cDsKK2NsYXNzIFN0cnVjdHVy
ZTsKK2NsYXNzIFN0cnVjdHVyZVN0dWJJbmZvOworY2xhc3MgUHJvcGVydHlTbG90OworCitjbGFz
cyBQcm9wZXJ0eUFjY2Vzc1NpZGVJbmxpbmVDYWNoZSB7CitwdWJsaWM6CisgICAgUHJvcGVydHlB
Y2Nlc3NTaWRlSW5saW5lQ2FjaGUoVk0mIHZtKTsKKyAgICB+UHJvcGVydHlBY2Nlc3NTaWRlSW5s
aW5lQ2FjaGUoKTsKKworICAgIHZvaWQgb2JzZXJ2ZVN0cnVjdHVyZUdldEJ5SWQoYm9vbCBpc0hp
dCwgY29uc3QgSlNWYWx1ZSBiYXNlLAorICAgICAgICBjb25zdCBDYWNoZWFibGVJZGVudGlmaWVy
JiBpZGVudGlmaWVyLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QsCisgICAgICAgIFN0cnVjdHVy
ZVN0dWJJbmZvKiBzdHViSW5mbywgQ29kZUJsb2NrKiBjb2RlQmxvY2spOworICAgIHZvaWQqIGp1
bXBUYWJsZSgpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KCZtX2dldEJ5SWRKdW1w
VGFibGVbMF0pOyB9CisKKyAgICBib29sIHZpc2l0V2VhayhWTSYpOworCisgICAgc3RhdGljIGNv
bnN0ZXhwciB1aW50MzJfdCBzdHJ1Y3R1cmVUYWJsZU1hc2sgPSAweDAwMDAwRkY7Citwcml2YXRl
OgorICAgIFZNKiBtX3ZtOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3Qgc3RydWN0dXJl
VGFibGVFbnRyaWVzID0gMTw8ODsKKyAgICBzdGF0aWNfYXNzZXJ0KCgweEZGRkZGRkZGJnN0cnVj
dHVyZVRhYmxlTWFzaykgKyAxID09IHN0cnVjdHVyZVRhYmxlRW50cmllcyk7CisgICAgc3RhdGlj
IGlubGluZSBzaXplX3QgYnVja2V0Rm9yKFN0cnVjdHVyZUlEIHNpZCkKKyAgICB7CisgICAgICAg
IHJldHVybiBzaWQmc3RydWN0dXJlVGFibGVNYXNrOworICAgIH0KKworICAgIFZlY3RvcjxGdW5j
dGlvblB0cjxKSVRTdHViUm91dGluZVB0clRhZz4+IG1fZ2V0QnlJZEp1bXBUYWJsZSB7c3RydWN0
dXJlVGFibGVFbnRyaWVzLCBudWxscHRyfTsKKyAgICBIYXNoTWFwPFN0cnVjdHVyZUlELCBzdGQ6
OnVuaXF1ZV9wdHI8U2lkZUFjY2Vzc0Nhc2VHcm91cD4+IG1fc2VlblN0cnVjdHVyZXM7CisKKyAg
ICBmcmllbmQgY2xhc3MgU2lkZUdldEJ5SWRHZW5lcmF0b3I7Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBKU0MKKworI2VuZGlmIC8vIEVOQUJMRShKSVQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvT3B0aW9uc0xpc3QuaAppbmRleCBlMDc4MzNmNDdhYmMuLjhmMjlhYjAxNWRhNSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oCkBAIC01MzIsNiAr
NTMyLDcgQEAgYm9vbCBjYW5Vc2VXZWJBc3NlbWJseUZhc3RNZW1vcnkoKTsKICAgICB2KEJvb2ws
IHVzZURhdGFJQ0luT3B0aW1pemluZ0pJVCwgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAogICAg
IHYoQm9vbCwgdXNlRGF0YUlDU2hhcmluZywgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAogICAg
IHYoQm9vbCwgdXNlQmFzZWxpbmVKSVRDb2RlU2hhcmluZywgdHJ1ZSwgTm9ybWFsLCBudWxscHRy
KSBcCisgICAgdihCb29sLCB1c2VQcm9wZXJ0eUFjY2Vzc1NpZGVJQywgZmFsc2UsIE5vcm1hbCwg
bnVsbHB0cikgXAogICAgIFwKICAgICAvKiBGZWF0dXJlIEZsYWdzICovXAogICAgIFwKLS0gCjIu
MzAuMSAoQXBwbGUgR2l0LTEzMCkKCgpGcm9tIGZjMDI5ODMwMzgzMzYzMmM0MjM3YzM3YTZkNjI4
ZjU5NWE3NWEzYjkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCkZyb206IEp1c3RpbiBNaWNoYXVk
IDxqdXN0aW5fbWljaGF1ZEBhcHBsZS5jb20+CkRhdGU6IFR1ZSwgMTIgT2N0IDIwMjEgMTM6NDQ6
MDcgLTA3MDAKU3ViamVjdDogW1BBVENIIDAyLzE3XSAuCgotLS0KIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmggfCAyICstCiAxIGZpbGUgY2hhbmdlZCwgMSBpbnNl
cnRpb24oKyksIDEgZGVsZXRpb24oLSkKCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9PcHRpb25zTGlzdC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
T3B0aW9uc0xpc3QuaAppbmRleCA4ZjI5YWIwMTVkYTUuLmRhZGQ1MTQwNTE2ZCAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oCkBAIC01MzIsNyArNTMyLDcg
QEAgYm9vbCBjYW5Vc2VXZWJBc3NlbWJseUZhc3RNZW1vcnkoKTsKICAgICB2KEJvb2wsIHVzZURh
dGFJQ0luT3B0aW1pemluZ0pJVCwgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoQm9v
bCwgdXNlRGF0YUlDU2hhcmluZywgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoQm9v
bCwgdXNlQmFzZWxpbmVKSVRDb2RlU2hhcmluZywgdHJ1ZSwgTm9ybWFsLCBudWxscHRyKSBcCi0g
ICAgdihCb29sLCB1c2VQcm9wZXJ0eUFjY2Vzc1NpZGVJQywgZmFsc2UsIE5vcm1hbCwgbnVsbHB0
cikgXAorICAgIHYoQm9vbCwgdXNlUHJvcGVydHlBY2Nlc3NTaWRlSUMsIHRydWUsIE5vcm1hbCwg
bnVsbHB0cikgXAogICAgIFwKICAgICAvKiBGZWF0dXJlIEZsYWdzICovXAogICAgIFwKLS0gCjIu
MzAuMSAoQXBwbGUgR2l0LTEzMCkKCgpGcm9tIDgwMmFhMTJkNjM2ODRlYWJlYzQ2NjZjODkzMzA5
OWYzYTgzYjUxZGUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCkZyb206IEp1c3RpbiBNaWNoYXVk
IDxqdXN0aW5fbWljaGF1ZEBhcHBsZS5jb20+CkRhdGU6IFdlZCwgMTMgT2N0IDIwMjEgMTM6MDg6
MjYgLTA3MDAKU3ViamVjdDogW1BBVENIIDAzLzE3XSAuCgotLS0KIC4uLi9qaXQvSklUSW5saW5l
Q2FjaGVHZW5lcmF0b3IuY3BwICAgICAgICAgICB8ICAyICstCiAuLi4vaml0L1Byb3BlcnR5QWNj
ZXNzU2lkZUlubGluZUNhY2hlLmNwcCAgICAgfCAzNCArKysrKysrKysrKysrLS0tLS0tCiAyIGZp
bGVzIGNoYW5nZWQsIDI0IGluc2VydGlvbnMoKyksIDEyIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5jcHAK
aW5kZXggODFlYmRhZTBiOTg5Li4wNTA5ZjMxMTFlMjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuY3BwCkBAIC0xMjcsNyAr
MTI3LDYgQEAgdm9pZCBKSVRCeUlkR2VuZXJhdG9yOjpnZW5lcmF0ZVNpZGVJbmxpbmVDYWNoZShD
Q2FsbEhlbHBlcnMmIGppdCwgc2l6ZV90IGlubGluZUkKIAogICAgIGF1dG8mIHZtID0gaml0LnZt
KCk7CiAgICAgYXV0byogc2lkZUlDVGFibGUgPSB2bS5oZWFwLnByb3BlcnR5QWNjZXNzU2lkZUlu
bGluZUNhY2hlKCkuanVtcFRhYmxlKCk7Ci0gICAgZGF0YUxvZ0xuKCJHZW5lcmF0aW5nIGZvciAi
LCBwcm9wZXJ0eU5hbWUsICIgdGFibGU6ICIsIFJhd1BvaW50ZXIoc2lkZUlDVGFibGUpKTsKICAg
ICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IGRvbmU7CiAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlz
dCBza2lwSW5saW5lQWNjZXNzOwogCkBAIC0xNDksNiArMTQ4LDcgQEAgdm9pZCBKSVRCeUlkR2Vu
ZXJhdG9yOjpnZW5lcmF0ZVNpZGVJbmxpbmVDYWNoZShDQ2FsbEhlbHBlcnMmIGppdCwgc2l6ZV90
IGlubGluZUkKIAogICAgIGppdC5sb2FkMzIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKG9yaWdpbmFs
QmFzZSwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgc2NyYXRjaCk7CiAgICAgaml0LmFu
ZDY0KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTY0KFByb3BlcnR5QWNjZXNzU2lkZUlubGluZUNh
Y2hlOjpzdHJ1Y3R1cmVUYWJsZU1hc2spLCBzY3JhdGNoKTsKKyAgICBqaXQubHNoaWZ0MzIoQ0Nh
bGxIZWxwZXJzOjpJbW0zMigzKSwgc2NyYXRjaCk7CiAgICAgaml0LmFkZDY0KENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbTY0KHJlaW50ZXJwcmV0X2Nhc3Q8dWludDY0X3Q+KHNpZGVJQ1RhYmxlKSks
IHNjcmF0Y2gpOwogICAgIGppdC5sb2FkNjQoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHNjcmF0Y2gp
LCBzY3JhdGNoKTsKICAgICBza2lwSW5saW5lQWNjZXNzLmFwcGVuZChqaXQuYnJhbmNoVGVzdDMy
KENDYWxsSGVscGVyczo6WmVybywgc2NyYXRjaCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9Qcm9wZXJ0eUFjY2Vzc1NpZGVJbmxpbmVDYWNoZS5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L1Byb3BlcnR5QWNjZXNzU2lkZUlubGluZUNhY2hlLmNwcAppbmRl
eCBmNGZlMWUxNjNmODkuLjRmMDM2NWJlNzBhZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9Qcm9wZXJ0eUFjY2Vzc1NpZGVJbmxpbmVDYWNoZS5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9Qcm9wZXJ0eUFjY2Vzc1NpZGVJbmxpbmVDYWNoZS5jcHAKQEAg
LTQ4LDYgKzQ4LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIG5hbWVzcGFjZSBTaWRlQWNjZXNzQ2Fj
aGVJbnRlcm5hbCB7CiBzdGF0aWMgY29uc3RleHByIGJvb2wgdmVyYm9zZSA9IGZhbHNlOworc3Rh
dGljIGNvbnN0ZXhwciB1aW50OF90IHNraXBwZWRDYWxsc2l0ZUNvdW50ZG93bk1heCA9IDg7Citz
dGF0aWMgY29uc3RleHByIHVpbnQzMl90IHJlcGF0Y2hCdWZmZXJpbmdDb3VudGRvd24gPSA4Owor
c3RhdGljIGNvbnN0ZXhwciB1aW50MzJfdCBtYXhBY2Nlc3NWYXJpYW50TGlzdFNpemUgPSAzMjsK
IH0KIAogc3RydWN0IFNpZGVBY2Nlc3NHZW5lcmF0aW9uU3RhdGUgewpAQCAtMTc0LDcgKzE3Nyw3
IEBAIHB1YmxpYzoKIAogICAgIFNpZGVBY2Nlc3NDYXNlR3JvdXAoU3RydWN0dXJlSUQgc3RydWN0
dXJlKQogICAgICAgICA6IG1fc3RydWN0dXJlSUQoc3RydWN0dXJlKQotICAgICAgICAsIGJ1ZmZl
cmluZ0NvdW50ZG93bihPcHRpb25zOjpyZXBhdGNoQnVmZmVyaW5nQ291bnRkb3duKCkpCisgICAg
ICAgICwgYnVmZmVyaW5nQ291bnRkb3duKFNpZGVBY2Nlc3NDYWNoZUludGVybmFsOjpyZXBhdGNo
QnVmZmVyaW5nQ291bnRkb3duKQogICAgIHsKICAgICB9CiAKQEAgLTI0MCw3ICsyNDMsNyBAQCBw
dWJsaWM6CiAgICAgICAgICAgICBtX2xpc3Quc2hyaW5rVG9GaXQoKTsKIAogICAgICAgICAgICAg
QWNjZXNzR2VuZXJhdGlvblJlc3VsdDo6S2luZCByZXN1bHRLaW5kOwotICAgICAgICAgICAgaWYg
KG1fbGlzdC5zaXplKCkgPj0gT3B0aW9uczo6bWF4QWNjZXNzVmFyaWFudExpc3RTaXplKCkgfHwg
Z2VuZXJhdGVkRmluYWxDb2RlKQorICAgICAgICAgICAgaWYgKG1fbGlzdC5zaXplKCkgPj0gU2lk
ZUFjY2Vzc0NhY2hlSW50ZXJuYWw6Om1heEFjY2Vzc1ZhcmlhbnRMaXN0U2l6ZSB8fCBnZW5lcmF0
ZWRGaW5hbENvZGUpCiAgICAgICAgICAgICAgICAgcmVzdWx0S2luZCA9IEFjY2Vzc0dlbmVyYXRp
b25SZXN1bHQ6OkdlbmVyYXRlZEZpbmFsQ29kZTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAg
ICAgICAgICByZXN1bHRLaW5kID0gQWNjZXNzR2VuZXJhdGlvblJlc3VsdDo6R2VuZXJhdGVkTmV3
Q29kZTsKQEAgLTI2MywxMyArMjY2LDE0IEBAIHB1YmxpYzoKIAogICAgICAgICAgICAgLy8gTGV0
IHNvbWUgb2YgdGhlIGNhc2VzIGdvIHRocm91Z2ggdGhlIGNhbGxzaXRlJ3Mgc2xvdyBwYXRoLCBz
byB0aGF0IGl0IGNhbiBjb2xsZWN0IHByb2ZpbGluZwogICAgICAgICAgICAgLy8gaW5mb3JtYXRp
b24gdG9vLgotICAgICAgICAgICAgaml0LmxvYWQzMigKKyAgICAgICAgICAgIGppdC54b3I2NChz
Y3JhdGNoR1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGppdC5sb2FkOCgKICAgICAgICAg
ICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJ
bmZvOjpvZmZzZXRPZlNpZGVBY2Nlc3NTa2lwcGVkQ2FsbHNpdGVDb3VudGRvd24oKSksCiAgICAg
ICAgICAgICAgICAgc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICBzdGF0ZS5zbG93UGF0aC5hcHBl
bmQoaml0LmJyYW5jaFRlc3QzMihDQ2FsbEhlbHBlcnM6Olplcm8sIHNjcmF0Y2hHUFIpKTsKLSAg
ICAgICAgICAgIGppdC5zdWIzMihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigxKSwgc2NyYXRj
aEdQUik7Ci0gICAgICAgICAgICBqaXQuc3RvcmUzMihzY3JhdGNoR1BSLAorICAgICAgICAgICAg
aml0LmFkZDMyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDEpLCBzY3JhdGNoR1BSKTsKKyAg
ICAgICAgICAgIGppdC5zdG9yZTgoc2NyYXRjaEdQUiwKICAgICAgICAgICAgICAgICBDQ2FsbEhl
bHBlcnM6OkFkZHJlc3Moc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNp
ZGVBY2Nlc3NTa2lwcGVkQ2FsbHNpdGVDb3VudGRvd24oKSkpOworICAgICAgICAgICAgc3RhdGUu
c2xvd1BhdGguYXBwZW5kKGppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6OkFib3ZlT3JFcXVhbCwg
c2NyYXRjaEdQUiwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoU2lkZUFjY2Vzc0NhY2hlSW50
ZXJuYWw6OnNraXBwZWRDYWxsc2l0ZUNvdW50ZG93bk1heCkpKTsKIAogICAgICAgICAgICAgaml0
LmxvYWQzMigKICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwg
SlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwKQEAgLTM1NSw3ICszNTksNiBAQCBwdWJsaWM6
CiAgICAgICAgICAgICBtX2xpc3QuYXBwZW5kKFdURk1vdmUoY2FzZVRvQWRkKSk7CiAgICAgICAg
IH0KIAotICAgICAgICBkYXRhTG9nTG5JZihTaWRlQWNjZXNzQ2FjaGVJbnRlcm5hbDo6dmVyYm9z
ZSwgIkJ1ZmZlcmluZyBDb3VudGRvd246ICIsIGJ1ZmZlcmluZ0NvdW50ZG93bik7CiAgICAgICAg
IGJ1ZmZlcmluZ0NvdW50ZG93bi0tOwogCiAgICAgICAgIGlmIChidWZmZXJpbmdDb3VudGRvd24p
CkBAIC0zNjQsNyArMzY3LDcgQEAgcHVibGljOgogICAgICAgICBhdXRvIHJlc3VsdCA9IHJlZ2Vu
ZXJhdGUobG9ja2VyLCB2bSwgZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2spOwogCiAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKCFyZXN1bHQuYnVmZmVyZWQoKSk7Ci0gICAgICAgIGJ1ZmZlcmluZ0NvdW50
ZG93biA9IE9wdGlvbnM6OnJlcGF0Y2hCdWZmZXJpbmdDb3VudGRvd24oKTsKKyAgICAgICAgYnVm
ZmVyaW5nQ291bnRkb3duID0gU2lkZUFjY2Vzc0NhY2hlSW50ZXJuYWw6OnJlcGF0Y2hCdWZmZXJp
bmdDb3VudGRvd247CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCkBAIC00NDMsNyAr
NDQ2LDcgQEAgdm9pZCBQcm9wZXJ0eUFjY2Vzc1NpZGVJbmxpbmVDYWNoZTo6b2JzZXJ2ZVN0cnVj
dHVyZUdldEJ5SWQoYm9vbCBpc0hpdCwgY29uc3QgSlMKICAgICBpZiAoIWlzSGl0IHx8ICFzdHJ1
Y3R1cmUgfHwgYmFzZVZhbHVlICE9IHNsb3Quc2xvdEJhc2UoKSB8fCAhc2xvdC5pc0NhY2hlYWJs
ZSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoc3R1YkluZm8tPnNpZGVBY2Nlc3NTa2lw
cGVkQ2FsbHNpdGVDb3VudGRvd24gPiAxMCkgeworICAgIGlmIChzdHViSW5mby0+c2lkZUFjY2Vz
c1NraXBwZWRDYWxsc2l0ZUNvdW50ZG93biA+PSBTaWRlQWNjZXNzQ2FjaGVJbnRlcm5hbDo6c2tp
cHBlZENhbGxzaXRlQ291bnRkb3duTWF4KSB7CiAgICAgICAgIGRhdGFMb2dMbklmKFNpZGVBY2Nl
c3NDYWNoZUludGVybmFsOjp2ZXJib3NlLCAiU2FtcGxpbmcgc2xvdyBwYXRoIHRvIGxldCBjYWxs
c2l0ZSBjb2xsZWN0IGluZm8gIiwgaWRlbnRpZmllcik7CiAgICAgICAgIHN0dWJJbmZvLT5zaWRl
QWNjZXNzU2tpcHBlZENhbGxzaXRlQ291bnRkb3duID0gMDsKICAgICB9CkBAIC00NTMsOCArNDU2
LDE3IEBAIHZvaWQgUHJvcGVydHlBY2Nlc3NTaWRlSW5saW5lQ2FjaGU6Om9ic2VydmVTdHJ1Y3R1
cmVHZXRCeUlkKGJvb2wgaXNIaXQsIGNvbnN0IEpTCiAgICAgYXV0byYgZ3JvdXAgPSAqbV9zZWVu
U3RydWN0dXJlcy5nZXQoc3RydWN0dXJlLT5pZCgpKTsKIAogICAgIGlmIChtX2dldEJ5SWRKdW1w
VGFibGVbYnVja2V0Rm9yKHN0cnVjdHVyZS0+aWQoKSldKSB7Ci0gICAgICAgIGlmICghZ3JvdXAu
bV9zdHViUm91dGluZSB8fCBtX2dldEJ5SWRKdW1wVGFibGVbYnVja2V0Rm9yKHN0cnVjdHVyZS0+
aWQoKSldLmV4ZWN1dGFibGVBZGRyZXNzKCkgIT0gZ3JvdXAubV9zdHViUm91dGluZS0+Y29kZSgp
LmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpKSB7Ci0gICAgICAgICAgICBkYXRhTG9nTG5JZihT
aWRlQWNjZXNzQ2FjaGVJbnRlcm5hbDo6dmVyYm9zZSwgIkhhc2ggY29sbGlzaW9uIG9uICIsIHN0
cnVjdHVyZS0+aWQoKSk7CisgICAgICAgIGF1dG8gZXhpc3RpbmdBZGRyZXNzID0gbV9nZXRCeUlk
SnVtcFRhYmxlW2J1Y2tldEZvcihzdHJ1Y3R1cmUtPmlkKCkpXS5leGVjdXRhYmxlQWRkcmVzcygp
OworICAgICAgICBpZiAoIWdyb3VwLm1fc3R1YlJvdXRpbmUgfHwgZXhpc3RpbmdBZGRyZXNzICE9
IGdyb3VwLm1fc3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSkg
eworICAgICAgICAgICAgU2lkZUFjY2Vzc0Nhc2VHcm91cCogZm91bmQgPSBudWxscHRyOworICAg
ICAgICAgICAgZm9yIChhdXRvJiBrdiA6IG1fc2VlblN0cnVjdHVyZXMpIHsKKyAgICAgICAgICAg
ICAgICBpZiAoa3YudmFsdWUgJiYga3YudmFsdWUtPm1fc3R1YlJvdXRpbmUtPmNvZGUoKS5jb2Rl
KCkuZXhlY3V0YWJsZUFkZHJlc3MoKSA9PSBleGlzdGluZ0FkZHJlc3MpIHsKKyAgICAgICAgICAg
ICAgICAgICAgZm91bmQgPSAmKmt2LnZhbHVlOworICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBBU1NFUlQoZm91
bmQpOworICAgICAgICAgICAgZGF0YUxvZ0xuSWYoU2lkZUFjY2Vzc0NhY2hlSW50ZXJuYWw6OnZl
cmJvc2UsICJIYXNoIGNvbGxpc2lvbiBvbiAiLCBzdHJ1Y3R1cmUtPmlkKCksICIgZXhpc3Rpbmcg
ZW50cnk6ICIsIGZvdW5kLT5tX3N0cnVjdHVyZUlEKTsKICAgICAgICAgICAgIG1fc2VlblN0cnVj
dHVyZXMucmVtb3ZlKHN0cnVjdHVyZS0+aWQoKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIH0KLS0gCjIuMzAuMSAoQXBwbGUgR2l0LTEzMCkKCgpGcm9tIDM2OGFhMmQxMTYyMzJhZGFi
YWI0NTY5YzcyNGE1ZWU1MmQyODM0ZDQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCkZyb206IEp1
c3RpbiBNaWNoYXVkIDxqdXN0aW5fbWljaGF1ZEBhcHBsZS5jb20+CkRhdGU6IFdlZCwgMTMgT2N0
IDIwMjEgMTU6MzY6MDcgLTA3MDAKU3ViamVjdDogW1BBVENIIDA0LzE3XSAuCgotLS0KIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvUHJvcGVydHlBY2Nlc3NTaWRlSW5saW5lQ2FjaGUuY3BwIHwg
MyArKy0KIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Byb3BlcnR5QWNjZXNzU2lkZUlu
bGluZUNhY2hlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUHJvcGVydHlBY2Nlc3NT
aWRlSW5saW5lQ2FjaGUuY3BwCmluZGV4IDRmMDM2NWJlNzBhZC4uYmIzNDc3ZGQ1NzEyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Byb3BlcnR5QWNjZXNzU2lkZUlubGlu
ZUNhY2hlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Byb3BlcnR5QWNjZXNz
U2lkZUlubGluZUNhY2hlLmNwcApAQCAtNDYwLDcgKzQ2MCw4IEBAIHZvaWQgUHJvcGVydHlBY2Nl
c3NTaWRlSW5saW5lQ2FjaGU6Om9ic2VydmVTdHJ1Y3R1cmVHZXRCeUlkKGJvb2wgaXNIaXQsIGNv
bnN0IEpTCiAgICAgICAgIGlmICghZ3JvdXAubV9zdHViUm91dGluZSB8fCBleGlzdGluZ0FkZHJl
c3MgIT0gZ3JvdXAubV9zdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVz
cygpKSB7CiAgICAgICAgICAgICBTaWRlQWNjZXNzQ2FzZUdyb3VwKiBmb3VuZCA9IG51bGxwdHI7
CiAgICAgICAgICAgICBmb3IgKGF1dG8mIGt2IDogbV9zZWVuU3RydWN0dXJlcykgewotICAgICAg
ICAgICAgICAgIGlmIChrdi52YWx1ZSAmJiBrdi52YWx1ZS0+bV9zdHViUm91dGluZS0+Y29kZSgp
LmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpID09IGV4aXN0aW5nQWRkcmVzcykgeworICAgICAg
ICAgICAgICAgIGlmIChrdi52YWx1ZSAmJiBrdi52YWx1ZS0+bV9zdHViUm91dGluZQorICAgICAg
ICAgICAgICAgICAgICAgICAgJiYga3YudmFsdWUtPm1fc3R1YlJvdXRpbmUtPmNvZGUoKS5jb2Rl
KCkuZXhlY3V0YWJsZUFkZHJlc3MoKSA9PSBleGlzdGluZ0FkZHJlc3MpIHsKICAgICAgICAgICAg
ICAgICAgICAgZm91bmQgPSAmKmt2LnZhbHVlOwogICAgICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgICAgICB9Ci0tIAoyLjMwLjEgKEFwcGxlIEdpdC0xMzApCgoKRnJvbSAwNWRh
ZDczNjgzYjVjMDhiOWQxY2I2NDk2NGNhYzJjZDc2YWNlYTg5IE1vbiBTZXAgMTcgMDA6MDA6MDAg
MjAwMQpGcm9tOiBKdXN0aW4gTWljaGF1ZCA8anVzdGluX21pY2hhdWRAYXBwbGUuY29tPgpEYXRl
OiBUaHUsIDE0IE9jdCAyMDIxIDE0OjQ5OjIzIC0wNzAwClN1YmplY3Q6IFtQQVRDSCAwNS8xN10g
LgoKLS0tCiAuLi4vYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaCAgICAgICAgICAgICAgfCAg
NCArLQogLi4uL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcCAgICAgICAgICAgICAgIHwgIDEg
LQogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwIHwgIDEgLQog
Li4uL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5jcHAgICAgICAgICAgIHwgMTUgKystLS0K
IC4uLi9qaXQvUHJvcGVydHlBY2Nlc3NTaWRlSW5saW5lQ2FjaGUuY3BwICAgICB8IDU1ICsrKysr
KystLS0tLS0tLS0tLS0KIDUgZmlsZXMgY2hhbmdlZCwgMzEgaW5zZXJ0aW9ucygrKSwgNDUgZGVs
ZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0
cnVjdHVyZVN0dWJJbmZvLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0
dXJlU3R1YkluZm8uaAppbmRleCAxMTlhMDQ4NzY1ZmIuLjQ5NDZmZTM5MzBjMyAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgKQEAg
LTM1NiwxMCArMzU2LDEwIEBAIHB1YmxpYzoKICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVy
bmFsUHRyVGFnPiBkb25lTG9jYXRpb247CiAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJv
dXRpbmVQdHJUYWc+IHNsb3dQYXRoU3RhcnRMb2NhdGlvbjsKIAotLy8gICAgdW5pb24geworICAg
IHVuaW9uIHsKICAgICAgICAgQ29kZUxvY2F0aW9uQ2FsbDxKU0ludGVybmFsUHRyVGFnPiBtX3Ns
b3dQYXRoQ2FsbExvY2F0aW9uOwogICAgICAgICBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+
IG1fc2xvd09wZXJhdGlvbjsKLS8vICAgIH07CisgICAgfTsKIAogICAgIE1hY3JvQXNzZW1ibGVy
Q29kZVB0cjxKSVRTdHViUm91dGluZVB0clRhZz4gbV9jb2RlUHRyOwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAppbmRleCBjYjc4MzJk
NTUwZjEuLjNiMzkzZjUyNzVmNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCkBAIC0xNzMsNyArMTczLDYgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y2FjaGVkR2V0QnlJZChDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIEdQUlJlZyBiYXNl
R1BSLCBHUFJSZWcKICAgICBzbG93Q2FzZXMuYXBwZW5kKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAK
ICAgICBzdGQ6OnVuaXF1ZV9wdHI8U2xvd1BhdGhHZW5lcmF0b3I+IHNsb3dQYXRoOwotICAgIGdl
bi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBhcHByb3ByaWF0ZU9wdGltaXppbmdHZXRC
eUlkRnVuY3Rpb24odHlwZSk7CiAgICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpE
RkdKSVQpKSB7CiAgICAgICAgIHNsb3dQYXRoID0gc2xvd1BhdGhJQ0NhbGwoCiAgICAgICAgICAg
ICBzbG93Q2FzZXMsIHRoaXMsIGdlbi5zdHViSW5mbygpLCBzdHViSW5mb0dQUiwgQ0NhbGxIZWxw
ZXJzOjpBZGRyZXNzKHN0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93
T3BlcmF0aW9uKCkpLCBhcHByb3ByaWF0ZU9wdGltaXppbmdHZXRCeUlkRnVuY3Rpb24odHlwZSks
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKaW5kZXgg
YmQ1MTBkZDBjODNiLi4zYThmNWNmYzc5NWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKQEAgLTE0ODQ5LDcgKzE0ODQ5LDYgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRvci0+c2xvd1BhdGhKdW1wKCkubGluaygm
aml0KTsKICAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6TGFiZWwgc2xvd1Bh
dGhCZWdpbiA9IGppdC5sYWJlbCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpDYWxsIHNsb3dQYXRoQ2FsbDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRv
ci0+c3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3B0aW1pemF0aW9uRnVuY3Rpb247CiAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkZU
TEpJVCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW1QdHIoZ2VuZXJhdG9yLT5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRvci0+c3R1YkluZm8oKS0+bV9zbG93
T3BlcmF0aW9uID0gb3B0aW1pemF0aW9uRnVuY3Rpb247CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuY3BwCmluZGV4IDA1MDlmMzEx
MWUyNi4uYjYyYWE4NmIyMzg3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmNwcApAQCAtMTU1LDYgKzE1NSw3IEBAIHZvaWQg
SklUQnlJZEdlbmVyYXRvcjo6Z2VuZXJhdGVTaWRlSW5saW5lQ2FjaGUoQ0NhbGxIZWxwZXJzJiBq
aXQsIHNpemVfdCBpbmxpbmVJCiAKICAgICB7CiAgICAgICAgIFJlZ2lzdGVyU2V0IHJlZ2lzdGVy
c1RvUHJlc2VydmU7CisgICAgICAgIHJlZ2lzdGVyc1RvUHJlc2VydmUuc2V0KG9yaWdpbmFsQmFz
ZSk7IC8vIEluIGNhc2Ugd2UgbmVlZCB0byB0YWtlIHRoZSBzbG93IHBhdGgKICAgICAgICAgaWYg
KG1fc3R1YkluZm8tPnVzZWRSZWdpc3RlcnMuY29udGFpbnMocmVzdWx0KSkKICAgICAgICAgICAg
IHJlZ2lzdGVyc1RvUHJlc2VydmUuc2V0KHJlc3VsdCk7CiAgICAgICAgIGlmIChtX3N0dWJJbmZv
LT51c2VkUmVnaXN0ZXJzLmNvbnRhaW5zKGJhc2UpKQpAQCAtMTYyLDEyICsxNjMsMTAgQEAgdm9p
ZCBKSVRCeUlkR2VuZXJhdG9yOjpnZW5lcmF0ZVNpZGVJbmxpbmVDYWNoZShDQ2FsbEhlbHBlcnMm
IGppdCwgc2l6ZV90IGlubGluZUkKICAgICAgICAgaWYgKG1fc3R1YkluZm8tPnVzZWRSZWdpc3Rl
cnMuY29udGFpbnMocHJvcGVydHkpKQogICAgICAgICAgICAgcmVnaXN0ZXJzVG9QcmVzZXJ2ZS5z
ZXQocHJvcGVydHkpOwogICAgICAgICBpZiAobV9zdHViSW5mby0+dXNlZFJlZ2lzdGVycy5jb250
YWlucyhzdHViSW5mbykpCi0gICAgICAgICAgICByZWdpc3RlcnNUb1ByZXNlcnZlLnNldChiYXNl
KTsKKyAgICAgICAgICAgIHJlZ2lzdGVyc1RvUHJlc2VydmUuc2V0KHN0dWJJbmZvKTsKICAgICAg
ICAgaWYgKG1fc3R1YkluZm8tPnVzZWRSZWdpc3RlcnMuY29udGFpbnMoU2lkZVByb3BlcnR5QWNj
ZXNzUmVnaXN0ZXJzOjpzY3JhdGNoKSkKICAgICAgICAgICAgIHJlZ2lzdGVyc1RvUHJlc2VydmUu
c2V0KFNpZGVQcm9wZXJ0eUFjY2Vzc1JlZ2lzdGVyczo6c2NyYXRjaCk7Ci0gICAgICAgIGlmICht
X3N0dWJJbmZvLT51c2VkUmVnaXN0ZXJzLmNvbnRhaW5zKEdQUkluZm86Om5vbkFyZ0dQUjApKQot
ICAgICAgICAgICAgcmVnaXN0ZXJzVG9QcmVzZXJ2ZS5zZXQoR1BSSW5mbzo6bm9uQXJnR1BSMCk7
Ci0gICAgICAgIHJlZ2lzdGVyc1RvUHJlc2VydmUuY2xlYXIob3JpZ2luYWxSZXN1bHQpOworICAg
ICAgICBBU1NFUlQoIXJlZ2lzdGVyc1RvUHJlc2VydmUuY29udGFpbnMoc2NyYXRjaCkpOwogCiAg
ICAgICAgIGNvbnN0IHVuc2lnbmVkIGV4dHJhUGFkZGluZ0J5dGVzID0gMDsKICAgICAgICAgdW5z
aWduZWQgbnVtYmVyT2ZTdGFja0J5dGVzVXNlZEZvclJlZ2lzdGVyUHJlc2VydmF0aW9uID0gU2Ny
YXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjpwcmVzZXJ2ZVJlZ2lzdGVyc1RvU3RhY2tGb3JDYWxsKGpp
dCwgcmVnaXN0ZXJzVG9QcmVzZXJ2ZSwgZXh0cmFQYWRkaW5nQnl0ZXMpOwpAQCAtMTc3LDExICsx
NzYsMTMgQEAgdm9pZCBKSVRCeUlkR2VuZXJhdG9yOjpnZW5lcmF0ZVNpZGVJbmxpbmVDYWNoZShD
Q2FsbEhlbHBlcnMmIGppdCwgc2l6ZV90IGlubGluZUkKICAgICAgICAgaml0Lm1vdmUoQ0NhbGxI
ZWxwZXJzOjpUcnVzdGVkSW1tNjQocHJvcGVydHlOYW1lLnJhd0JpdHMoKSksIHByb3BlcnR5KTsK
ICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG1fc3R1YkluZm8p
LCBzdHViSW5mbyk7CiAgICAgICAgIGppdC5jYWxsKHNjcmF0Y2gsIEpJVFN0dWJSb3V0aW5lUHRy
VGFnKTsKLQotICAgICAgICBpZiAob3JpZ2luYWxSZXN1bHQgIT0gcmVzdWx0KQotICAgICAgICAg
ICAgaml0Lm1vdmUocmVzdWx0LCBvcmlnaW5hbFJlc3VsdCk7CisgICAgICAgIGppdC5tb3ZlKEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbTY0KDApLCByZXN1bHQpOworICAgICAgICBqaXQubW92ZShy
ZXN1bHQsIHNjcmF0Y2gpOwogCiAgICAgICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6cmVz
dG9yZVJlZ2lzdGVyc0Zyb21TdGFja0ZvckNhbGwoaml0LCByZWdpc3RlcnNUb1ByZXNlcnZlLCBS
ZWdpc3RlclNldCgpLCBudW1iZXJPZlN0YWNrQnl0ZXNVc2VkRm9yUmVnaXN0ZXJQcmVzZXJ2YXRp
b24sIGV4dHJhUGFkZGluZ0J5dGVzKTsKKworICAgICAgICBza2lwSW5saW5lQWNjZXNzLmFwcGVu
ZChqaXQuYnJhbmNoVGVzdDMyKENDYWxsSGVscGVyczo6WmVybywgc2NyYXRjaCkpOworICAgICAg
ICBqaXQubW92ZShzY3JhdGNoLCBvcmlnaW5hbFJlc3VsdCk7CiAgICAgICAgIGRvbmUuYXBwZW5k
KGppdC5qdW1wKCkpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9Qcm9wZXJ0eUFjY2Vzc1NpZGVJbmxpbmVDYWNoZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L1Byb3BlcnR5QWNjZXNzU2lkZUlubGluZUNhY2hlLmNwcAppbmRleCBiYjM0Nzdk
ZDU3MTIuLjQ4MjVmMGUwYWJlOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9Qcm9wZXJ0eUFjY2Vzc1NpZGVJbmxpbmVDYWNoZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9Qcm9wZXJ0eUFjY2Vzc1NpZGVJbmxpbmVDYWNoZS5jcHAKQEAgLTQ3LDcgKzQ3
LDcgQEAKIG5hbWVzcGFjZSBKU0MgewogCiBuYW1lc3BhY2UgU2lkZUFjY2Vzc0NhY2hlSW50ZXJu
YWwgewotc3RhdGljIGNvbnN0ZXhwciBib29sIHZlcmJvc2UgPSBmYWxzZTsKK3N0YXRpYyBjb25z
dGV4cHIgYm9vbCB2ZXJib3NlID0gdHJ1ZTsKIHN0YXRpYyBjb25zdGV4cHIgdWludDhfdCBza2lw
cGVkQ2FsbHNpdGVDb3VudGRvd25NYXggPSA4Owogc3RhdGljIGNvbnN0ZXhwciB1aW50MzJfdCBy
ZXBhdGNoQnVmZmVyaW5nQ291bnRkb3duID0gODsKIHN0YXRpYyBjb25zdGV4cHIgdWludDMyX3Qg
bWF4QWNjZXNzVmFyaWFudExpc3RTaXplID0gMzI7CkBAIC0xODEsNyArMTgxLDcgQEAgcHVibGlj
OgogICAgIHsKICAgICB9CiAKLSAgICBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0IHJlZ2VuZXJhdGUo
Y29uc3QgR0NTYWZlQ29uY3VycmVudEpTTG9ja2VyJiwgVk0mIHZtLCBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaykKK0FjY2Vzc0dlbmVyYXRpb25SZXN1
bHQgcmVnZW5lcmF0ZShjb25zdCBHQ1NhZmVDb25jdXJyZW50SlNMb2NrZXImLCBWTSYgdm0sIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiAgICAgewogICAgICAgICBWZWN0b3I8c3RkOjp1
bmlxdWVfcHRyPFNpZGVBY2Nlc3NDYXNlPj4gY2FzZXM7CiAgICAgICAgIFNpZGVBY2Nlc3NHZW5l
cmF0aW9uU3RhdGUgc3RhdGUodm0sIGdsb2JhbE9iamVjdCk7CkBAIC0yNTEsNyArMjUxLDcgQEAg
cHVibGljOgogICAgICAgICAgICAgcmV0dXJuIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQocmVzdWx0
S2luZCwgbV9zdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSk7CiAgICAgICAgIH07CiAKLSAgICAg
ICAgQ0NhbGxIZWxwZXJzIGppdChjb2RlQmxvY2spOworICAgICAgICBDQ2FsbEhlbHBlcnMgaml0
OwogICAgICAgICBzdGF0ZS5qaXQgPSAmaml0OwogICAgICAgICBqaXQudGFnUmV0dXJuQWRkcmVz
cygpOwogCkBAIC0yNjQsNiArMjY0LDEyIEBAIHB1YmxpYzoKIAogICAgICAgICAgICAgQVNTRVJU
KCFjYXNlcy5pc0VtcHR5KCkpOwogCisgICAgICAgICAgICBqaXQubG9hZDMyKAorICAgICAgICAg
ICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlE
T2Zmc2V0KCkpLAorICAgICAgICAgICAgICAgIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgc3Rh
dGUuc2xvd1BhdGguYXBwZW5kKAorICAgICAgICAgICAgICAgICBqaXQuYnJhbmNoMzIoQ0NhbGxI
ZWxwZXJzOjpOb3RFcXVhbCwgc2NyYXRjaEdQUiwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIo
bV9zdHJ1Y3R1cmVJRCkpKTsKKwogICAgICAgICAgICAgLy8gTGV0IHNvbWUgb2YgdGhlIGNhc2Vz
IGdvIHRocm91Z2ggdGhlIGNhbGxzaXRlJ3Mgc2xvdyBwYXRoLCBzbyB0aGF0IGl0IGNhbiBjb2xs
ZWN0IHByb2ZpbGluZwogICAgICAgICAgICAgLy8gaW5mb3JtYXRpb24gdG9vLgogICAgICAgICAg
ICAgaml0LnhvcjY0KHNjcmF0Y2hHUFIsIHNjcmF0Y2hHUFIpOwpAQCAtMjc1LDEyICsyODEsNiBA
QCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0dWJJbmZv
R1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTaWRlQWNjZXNzU2tpcHBlZENhbGxzaXRl
Q291bnRkb3duKCkpKTsKICAgICAgICAgICAgIHN0YXRlLnNsb3dQYXRoLmFwcGVuZChqaXQuYnJh
bmNoMzIoQ0NhbGxIZWxwZXJzOjpBYm92ZU9yRXF1YWwsIHNjcmF0Y2hHUFIsIENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbTMyKFNpZGVBY2Nlc3NDYWNoZUludGVybmFsOjpza2lwcGVkQ2FsbHNpdGVD
b3VudGRvd25NYXgpKSk7CiAKLSAgICAgICAgICAgIGppdC5sb2FkMzIoCi0gICAgICAgICAgICAg
ICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZz
ZXQoKSksCi0gICAgICAgICAgICAgICAgc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICBzdGF0ZS5z
bG93UGF0aC5hcHBlbmQoCi0gICAgICAgICAgICAgICAgIGppdC5icmFuY2gzMihDQ2FsbEhlbHBl
cnM6Ok5vdEVxdWFsLCBzY3JhdGNoR1BSLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihtX3N0
cnVjdHVyZUlEKSkpOwotCiAgICAgICAgICAgICBWZWN0b3I8aW50NjRfdD4gY2FzZVZhbHVlcyhj
YXNlcy5zaXplKCkpOwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNhc2Vz
LnNpemUoKTsgKytpKQogICAgICAgICAgICAgICAgIGNhc2VWYWx1ZXNbaV0gPSBjYXNlc1tpXS0+
bV9pZGVudGlmaWVyLnJhd0JpdHMoKTsKQEAgLTI5NCwzMiArMjk0LDE5IEBAIHB1YmxpYzoKICAg
ICAgICAgICAgIGppdC5yZXQoKTsKIAogICAgICAgICAgICAgc3RhdGUuc2xvd1BhdGgubGluaygm
aml0KTsKLQotICAgICAgICAgICAgc3RhdGljX2Fzc2VydChGdW5jdGlvblRyYWl0czxkZWNsdHlw
ZShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpPjo6YXJpdHkgPCBHUFJJbmZvOjpudW1iZXJPZkFy
Z3VtZW50UmVnaXN0ZXJzLCAiVGhpcyBjYWxsIGFzc3VtZXMgdGhhdCB3ZSBkb24ndCBwYXNzIGFy
Z3VtZW50cyBvbiB0aGUgc3RhY2suIik7Ci0gICAgICAgICAgICBzdGF0aWNfYXNzZXJ0KEdQUklu
Zm86Om5vbkFyZ0dQUjAgIT0gYmFzZUdQUik7Ci0gICAgICAgICAgICBzdGF0aWNfYXNzZXJ0KEdQ
UkluZm86Om5vbkFyZ0dQUjAgIT0gcHJvcGVydHlHUFIpOwotICAgICAgICAgICAgaml0Lm1vdmUo
c3R1YkluZm9HUFIsIEdQUkluZm86Om5vbkFyZ0dQUjApOwotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIGF1dG8gc3R1YkluZm9HUFIgPSBHUFJJbmZvOjpub25BcmdHUFIwOwotICAgICAg
ICAgICAgICAgIGppdC5zZXR1cEFyZ3VtZW50czxkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkT3B0
aW1pemUpPihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoZ2xvYmFsT2JqZWN0KSwgc3R1Yklu
Zm9HUFIsIGJhc2VHUFIsIHByb3BlcnR5R1BSKTsKLSAgICAgICAgICAgICAgICBqaXQucHJlcGFy
ZUNhbGxPcGVyYXRpb24odm0pOwotICAgICAgICAgICAgICAgIC8vIHRhaWwgY2FsbAotICAgICAg
ICAgICAgICAgIGppdC51bnRhZ1JldHVybkFkZHJlc3MoKTsKLSAgICAgICAgICAgICAgICBqaXQu
ZmFySnVtcChDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJ
bmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIE9wZXJhdGlvblB0clRhZyk7Ci0gICAgICAg
ICAgICAgICAgc3RhdGljX2Fzc2VydChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiA9PSByZXN1bHRH
UFIpOwotICAgICAgICAgICAgICAgIGppdC5icmVha3BvaW50KCk7Ci0gICAgICAgICAgICB9Cisg
ICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW02NCgwKSwgcmVzdWx0
R1BSKTsKKyAgICAgICAgICAgIGppdC5yZXQoKTsKICAgICAgICAgfQogCi0gICAgICAgIExpbmtC
dWZmZXIgbGlua0J1ZmZlcihqaXQsIGNvZGVCbG9jaywgTGlua0J1ZmZlcjo6UHJvZmlsZTo6SW5s
aW5lQ2FjaGUsIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7CisgICAgICAgIExpbmtCdWZmZXIgbGlu
a0J1ZmZlcihqaXQsIG51bGxwdHIsIExpbmtCdWZmZXI6OlByb2ZpbGU6OklubGluZUNhY2hlLCBK
SVRDb21waWxhdGlvbkNhbkZhaWwpOwogICAgICAgICBpZiAobGlua0J1ZmZlci5kaWRGYWlsVG9B
bGxvY2F0ZSgpKSB7CiAgICAgICAgICAgICBkYXRhTG9nTG5JZihTaWRlQWNjZXNzQ2FjaGVJbnRl
cm5hbDo6dmVyYm9zZSwgIkRpZCBmYWlsIHRvIGFsbG9jYXRlLiIpOwogICAgICAgICAgICAgcmV0
dXJuIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQ6OkdhdmVVcDsKICAgICAgICAgfQogCiAgICAgICAg
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRTdHViUm91dGluZVB0clRhZz4gY29kZSA9IEZJTkFM
SVpFX0NPREVfRk9SKAotICAgICAgICAgICAgY29kZUJsb2NrLCBsaW5rQnVmZmVyLCBKSVRTdHVi
Um91dGluZVB0clRhZywKLSAgICAgICAgICAgICIlcyIsIHRvQ1N0cmluZygiU2lkZSBBY2Nlc3Mg
c3R1YiBmb3IgIiwgKmNvZGVCbG9jaywgIiBTdHJ1Y3R1cmUoIiwgbV9zdHJ1Y3R1cmVJRCwgIik6
ICIpLmRhdGEoKSk7CisgICAgICAgICAgICBudWxscHRyLCBsaW5rQnVmZmVyLCBKSVRTdHViUm91
dGluZVB0clRhZywKKyAgICAgICAgICAgICIlcyIsIHRvQ1N0cmluZygiU2lkZSBBY2Nlc3Mgc3R1
YiBmb3IgU3RydWN0dXJlKCIsIG1fc3RydWN0dXJlSUQsICIpOiAiKS5kYXRhKCkpOwogCiAgICAg
ICAgIGF1dG8gc3R1YiA9IGFkb3B0UmVmKCpuZXcgU2lkZUFjY2Vzc0pJVFN0dWJSb3V0aW5lKGNv
ZGUsIHZtLCBGaXhlZFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8U2lkZUFjY2Vzc0Nhc2U+PnsgV1RG
TW92ZShjYXNlcykgfSkpOwogICAgICAgICBzdHViLT5tYWtlR0NBd2FyZSh2bSk7CkBAIC0zMjcs
NyArMzE0LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gZmluaXNoQ29kZUdlbmVyYXRpb24o
V1RGTW92ZShzdHViKSk7CiAgICAgfQogCi0gICAgQWNjZXNzR2VuZXJhdGlvblJlc3VsdCBhZGRD
YXNlcyhjb25zdCBHQ1NhZmVDb25jdXJyZW50SlNMb2NrZXImIGxvY2tlciwgVk0mIHZtLCBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgVmVjdG9yPHN0
ZDo6dW5pcXVlX3B0cjxTaWRlQWNjZXNzQ2FzZT4+IG9yaWdpbmFsQ2FzZXNUb0FkZCkKKyAgICBB
Y2Nlc3NHZW5lcmF0aW9uUmVzdWx0IGFkZENhc2VzKGNvbnN0IEdDU2FmZUNvbmN1cnJlbnRKU0xv
Y2tlciYgbG9ja2VyLCBWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFZlY3Rv
cjxzdGQ6OnVuaXF1ZV9wdHI8U2lkZUFjY2Vzc0Nhc2U+PiBvcmlnaW5hbENhc2VzVG9BZGQpCiAg
ICAgewogICAgICAgICBBU1NFUlQodm0uaGVhcC5pc0RlZmVycmVkKCkpOwogICAgICAgICAKQEAg
LTM2NCw3ICszNTEsNyBAQCBwdWJsaWM6CiAgICAgICAgIGlmIChidWZmZXJpbmdDb3VudGRvd24p
CiAgICAgICAgICAgICByZXR1cm4gQWNjZXNzR2VuZXJhdGlvblJlc3VsdDo6QnVmZmVyZWQ7CiAK
LSAgICAgICAgYXV0byByZXN1bHQgPSByZWdlbmVyYXRlKGxvY2tlciwgdm0sIGdsb2JhbE9iamVj
dCwgY29kZUJsb2NrKTsKKyAgICAgICAgYXV0byByZXN1bHQgPSByZWdlbmVyYXRlKGxvY2tlciwg
dm0sIGdsb2JhbE9iamVjdCk7CiAKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIXJlc3VsdC5idWZm
ZXJlZCgpKTsKICAgICAgICAgYnVmZmVyaW5nQ291bnRkb3duID0gU2lkZUFjY2Vzc0NhY2hlSW50
ZXJuYWw6OnJlcGF0Y2hCdWZmZXJpbmdDb3VudGRvd247CkBAIC0zNzMsNyArMzYwLDcgQEAgcHVi
bGljOgogCiAgICAgQWNjZXNzR2VuZXJhdGlvblJlc3VsdCB0cnlDYWNoZUdldEJ5SWQoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwKICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpT
Q2VsbCogYmFzZUNlbGwsIENhY2hlYWJsZUlkZW50aWZpZXIgcHJvcGVydHlOYW1lLAotICAgICAg
ICBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QsIENvZGVCbG9jayogY29kZUJsb2NrKQorICAgICAg
ICBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiAgICAgewogICAgICAgICBSRUxFQVNFX0FTU0VS
VChPcHRpb25zOjp1c2VQcm9wZXJ0eUFjY2Vzc1NpZGVJQygpKTsKICAgICAgICAgQVNTRVJUKG1f
c3RydWN0dXJlSUQgPT0gc3RydWN0dXJlLT5pZCgpKTsKQEAgLTM4MSw3ICszNjgsNyBAQCBwdWJs
aWM6CiAgICAgICAgIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQgcmVzdWx0OwogCiAgICAgICAgIHsK
LSAgICAgICAgICAgIEdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5t
X2xvY2ssIGdsb2JhbE9iamVjdC0+dm0oKS5oZWFwKTsKKyAgICAgICAgICAgIEdDU2FmZUNvbmN1
cnJlbnRKU0xvY2tlciBsb2NrZXIoc3RydWN0dXJlLT5sb2NrKCksIGdsb2JhbE9iamVjdC0+dm0o
KS5oZWFwKTsKIAogICAgICAgICAgICAgaWYgKCFzbG90LmlzQ2FjaGVhYmxlKCkgfHwgc2xvdC5p
c1Vuc2V0KCkgfHwgIXNsb3QuaXNDYWNoZWFibGVWYWx1ZSgpCiAgICAgICAgICAgICAgICAgfHwg
c2xvdC5zbG90QmFzZSgpICE9IGJhc2VDZWxsIHx8IHNsb3Qud2F0Y2hwb2ludFNldCgpIHx8IHN0
cnVjdHVyZS0+bmVlZEltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpKQpAQCAtMzkyLDcgKzM3OSw3
IEBAIHB1YmxpYzoKICAgICAgICAgICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8U2lkZUFjY2Vz
c0Nhc2U+PiBuZXdDYXNlczsKICAgICAgICAgICAgIG5ld0Nhc2VzLmFwcGVuZChzdGQ6Om1ha2Vf
dW5pcXVlPFNpZGVBY2Nlc3NDYXNlPihtX3N0cnVjdHVyZUlELCBwcm9wZXJ0eU5hbWUsIFNpZGVB
Y2Nlc3NDYXNlOjpIaXQsIG9mZnNldCkpOwogCi0gICAgICAgICAgICByZXN1bHQgPSBhZGRDYXNl
cyhsb2NrZXIsIHZtLCBnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgV1RGTW92ZShuZXdDYXNlcykp
OworICAgICAgICAgICAgcmVzdWx0ID0gYWRkQ2FzZXMobG9ja2VyLCB2bSwgZ2xvYmFsT2JqZWN0
LCBXVEZNb3ZlKG5ld0Nhc2VzKSk7CiAKICAgICAgICAgICAgIGlmIChyZXN1bHQuZ2VuZXJhdGVk
U29tZUNvZGUoKSkgewogICAgICAgICAgICAgICAgIGRhdGFMb2dMbklmKFNpZGVBY2Nlc3NDYWNo
ZUludGVybmFsOjp2ZXJib3NlLCAidHJ5Q2FjaGVHZXRCeUlkIGdlbmVyYXRlZCBzb21lIGNvZGUi
KTsKQEAgLTQzNiw3ICs0MjMsNyBAQCBQcm9wZXJ0eUFjY2Vzc1NpZGVJbmxpbmVDYWNoZTo6flBy
b3BlcnR5QWNjZXNzU2lkZUlubGluZUNhY2hlKCkKIH0KIAogdm9pZCBQcm9wZXJ0eUFjY2Vzc1Np
ZGVJbmxpbmVDYWNoZTo6b2JzZXJ2ZVN0cnVjdHVyZUdldEJ5SWQoYm9vbCBpc0hpdCwgY29uc3Qg
SlNWYWx1ZSBiYXNlVmFsdWUsCi0gICAgY29uc3QgQ2FjaGVhYmxlSWRlbnRpZmllciYgaWRlbnRp
ZmllciwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1Yklu
Zm8sIENvZGVCbG9jayogY29kZUJsb2NrKQorICAgIGNvbnN0IENhY2hlYWJsZUlkZW50aWZpZXIm
IGlkZW50aWZpZXIsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8q
IHN0dWJJbmZvLCBDb2RlQmxvY2sqKQogewogICAgIGlmICghT3B0aW9uczo6dXNlUHJvcGVydHlB
Y2Nlc3NTaWRlSUMoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtNDczLDcgKzQ2MCw3IEBAIHZvaWQg
UHJvcGVydHlBY2Nlc3NTaWRlSW5saW5lQ2FjaGU6Om9ic2VydmVTdHJ1Y3R1cmVHZXRCeUlkKGJv
b2wgaXNIaXQsIGNvbnN0IEpTCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBhdXRvIHJlc3VsdCA9
IGdyb3VwLnRyeUNhY2hlR2V0QnlJZChzdHJ1Y3R1cmUtPmdsb2JhbE9iamVjdCgpLCBzdHJ1Y3R1
cmUsIGJhc2VWYWx1ZS5hc0NlbGwoKSwgaWRlbnRpZmllciwgc2xvdCwgY29kZUJsb2NrKTsKKyAg
ICBhdXRvIHJlc3VsdCA9IGdyb3VwLnRyeUNhY2hlR2V0QnlJZChzdHJ1Y3R1cmUtPmdsb2JhbE9i
amVjdCgpLCBzdHJ1Y3R1cmUsIGJhc2VWYWx1ZS5hc0NlbGwoKSwgaWRlbnRpZmllciwgc2xvdCk7
CiAKICAgICBpZiAocmVzdWx0LmdlbmVyYXRlZFNvbWVDb2RlKCkpIHsKICAgICAgICAgZGF0YUxv
Z0xuSWYoU2lkZUFjY2Vzc0NhY2hlSW50ZXJuYWw6OnZlcmJvc2UsICJQYXRoY2hpbmcgIiwgc3Ry
dWN0dXJlLT5pZCgpLCAiIGFuZCAiLCBpZGVudGlmaWVyLCAiIHRvICIsIFJhd1BvaW50ZXIocmVz
dWx0LmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpKSk7Ci0tIAoyLjMwLjEgKEFwcGxlIEdpdC0x
MzApCgoKRnJvbSA5YmUzNDZmZDhhYmMwMWMwMTU1MDc3MWNhNTI5ZjUzMzgxN2VkMzk3IE1vbiBT
ZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBKdXN0aW4gTWljaGF1ZCA8anVzdGluX21pY2hhdWRA
YXBwbGUuY29tPgpEYXRlOiBGcmksIDE1IE9jdCAyMDIxIDA5OjA1OjE3IC0wNzAwClN1YmplY3Q6
IFtQQVRDSCAwNi8xN10gLgoKLS0tCiAuLi4vaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmNw
cCAgICAgICAgICAgfCA4MSArKy0tLS0tLS0tLS0tLS0tLS0tCiAuLi4vaml0L1Byb3BlcnR5QWNj
ZXNzU2lkZUlubGluZUNhY2hlLmNwcCAgICAgfCA3NiArKysrKysrKysrKysrKysrLQogLi4uL2pp
dC9Qcm9wZXJ0eUFjY2Vzc1NpZGVJbmxpbmVDYWNoZS5oICAgICAgIHwgIDQgKwogMyBmaWxlcyBj
aGFuZ2VkLCA4NyBpbnNlcnRpb25zKCspLCA3NCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuY3BwCmluZGV4
IGI2MmFhODZiMjM4Ny4uYTRmZTM0NzVhODA3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmNwcApAQCAtMTE5LDc1ICsxMTks
MTIgQEAgdm9pZCBKSVRCeUlkR2VuZXJhdG9yOjpnZW5lcmF0ZVNpZGVJbmxpbmVDYWNoZShDQ2Fs
bEhlbHBlcnMmIGppdCwgc2l6ZV90IGlubGluZUkKIHsKICAgICBSRUxFQVNFX0FTU0VSVChPcHRp
b25zOjp1c2VQcm9wZXJ0eUFjY2Vzc1NpZGVJQygpKTsKICAgICBBU1NFUlQocHJvcGVydHlOYW1l
KTsKLSAgICBHUFJSZWcgcmVzdWx0ID0gU2lkZVByb3BlcnR5QWNjZXNzUmVnaXN0ZXJzOjpyZXN1
bHQ7Ci0gICAgR1BSUmVnIGJhc2UgPSBTaWRlUHJvcGVydHlBY2Nlc3NSZWdpc3RlcnM6OmJhc2U7
Ci0gICAgR1BSUmVnIHByb3BlcnR5ID0gU2lkZVByb3BlcnR5QWNjZXNzUmVnaXN0ZXJzOjpwcm9w
ZXJ0eTsKLSAgICBHUFJSZWcgc3R1YkluZm8gPSBTaWRlUHJvcGVydHlBY2Nlc3NSZWdpc3RlcnM6
OnN0dWJJbmZvOwotICAgIEdQUlJlZyBzY3JhdGNoID0gSW52YWxpZEdQUlJlZzsKLQotICAgIGF1
dG8mIHZtID0gaml0LnZtKCk7Ci0gICAgYXV0byogc2lkZUlDVGFibGUgPSB2bS5oZWFwLnByb3Bl
cnR5QWNjZXNzU2lkZUlubGluZUNhY2hlKCkuanVtcFRhYmxlKCk7Ci0gICAgQ0NhbGxIZWxwZXJz
OjpKdW1wTGlzdCBkb25lOwotICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2tpcElubGluZUFj
Y2VzczsKLQotICAgIGF1dG8gb3JpZ2luYWxCYXNlID0gbV9zdHViSW5mby0+YmFzZUdQUjsKLSAg
ICBhdXRvIG9yaWdpbmFsUmVzdWx0ID0gbV9zdHViSW5mby0+dmFsdWVHUFI7Ci0gICAgQVNTRVJU
KG9yaWdpbmFsQmFzZSAhPSBJbnZhbGlkR1BSUmVnKTsKLSAgICBBU1NFUlQob3JpZ2luYWxSZXN1
bHQgIT0gSW52YWxpZEdQUlJlZyk7Ci0KLSAgICBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IgYWxs
b2NhdG9yKG1fc3R1YkluZm8tPnVzZWRSZWdpc3RlcnMpOwotICAgIGFsbG9jYXRvci5sb2NrKG9y
aWdpbmFsQmFzZSk7Ci0gICAgYWxsb2NhdG9yLmxvY2socmVzdWx0KTsKLSAgICBhbGxvY2F0b3Iu
bG9jayhiYXNlKTsKLSAgICBhbGxvY2F0b3IubG9jayhwcm9wZXJ0eSk7Ci0gICAgYWxsb2NhdG9y
LmxvY2soc3R1YkluZm8pOwotICAgIHNjcmF0Y2ggPSBhbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNo
R1BSKCk7CiAKICAgICBtX3N0YXJ0ID0gaml0LmxhYmVsKCk7CiAgICAgc2l6ZV90IHN0YXJ0U2l6
ZSA9IGppdC5tX2Fzc2VtYmxlci5idWZmZXIoKS5jb2RlU2l6ZSgpOwogCi0gICAgaml0LmxvYWQz
MihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mob3JpZ2luYWxCYXNlLCBKU0NlbGw6OnN0cnVjdHVyZUlE
T2Zmc2V0KCkpLCBzY3JhdGNoKTsKLSAgICBqaXQuYW5kNjQoQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tNjQoUHJvcGVydHlBY2Nlc3NTaWRlSW5saW5lQ2FjaGU6OnN0cnVjdHVyZVRhYmxlTWFzayks
IHNjcmF0Y2gpOwotICAgIGppdC5sc2hpZnQzMihDQ2FsbEhlbHBlcnM6OkltbTMyKDMpLCBzY3Jh
dGNoKTsKLSAgICBqaXQuYWRkNjQoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tNjQocmVpbnRlcnBy
ZXRfY2FzdDx1aW50NjRfdD4oc2lkZUlDVGFibGUpKSwgc2NyYXRjaCk7Ci0gICAgaml0LmxvYWQ2
NChDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc2NyYXRjaCksIHNjcmF0Y2gpOwotICAgIHNraXBJbmxp
bmVBY2Nlc3MuYXBwZW5kKGppdC5icmFuY2hUZXN0MzIoQ0NhbGxIZWxwZXJzOjpaZXJvLCBzY3Jh
dGNoKSk7Ci0KLSAgICB7Ci0gICAgICAgIFJlZ2lzdGVyU2V0IHJlZ2lzdGVyc1RvUHJlc2VydmU7
Ci0gICAgICAgIHJlZ2lzdGVyc1RvUHJlc2VydmUuc2V0KG9yaWdpbmFsQmFzZSk7IC8vIEluIGNh
c2Ugd2UgbmVlZCB0byB0YWtlIHRoZSBzbG93IHBhdGgKLSAgICAgICAgaWYgKG1fc3R1YkluZm8t
PnVzZWRSZWdpc3RlcnMuY29udGFpbnMocmVzdWx0KSkKLSAgICAgICAgICAgIHJlZ2lzdGVyc1Rv
UHJlc2VydmUuc2V0KHJlc3VsdCk7Ci0gICAgICAgIGlmIChtX3N0dWJJbmZvLT51c2VkUmVnaXN0
ZXJzLmNvbnRhaW5zKGJhc2UpKQotICAgICAgICAgICAgcmVnaXN0ZXJzVG9QcmVzZXJ2ZS5zZXQo
YmFzZSk7Ci0gICAgICAgIGlmIChtX3N0dWJJbmZvLT51c2VkUmVnaXN0ZXJzLmNvbnRhaW5zKHBy
b3BlcnR5KSkKLSAgICAgICAgICAgIHJlZ2lzdGVyc1RvUHJlc2VydmUuc2V0KHByb3BlcnR5KTsK
LSAgICAgICAgaWYgKG1fc3R1YkluZm8tPnVzZWRSZWdpc3RlcnMuY29udGFpbnMoc3R1YkluZm8p
KQotICAgICAgICAgICAgcmVnaXN0ZXJzVG9QcmVzZXJ2ZS5zZXQoc3R1YkluZm8pOwotICAgICAg
ICBpZiAobV9zdHViSW5mby0+dXNlZFJlZ2lzdGVycy5jb250YWlucyhTaWRlUHJvcGVydHlBY2Nl
c3NSZWdpc3RlcnM6OnNjcmF0Y2gpKQotICAgICAgICAgICAgcmVnaXN0ZXJzVG9QcmVzZXJ2ZS5z
ZXQoU2lkZVByb3BlcnR5QWNjZXNzUmVnaXN0ZXJzOjpzY3JhdGNoKTsKLSAgICAgICAgQVNTRVJU
KCFyZWdpc3RlcnNUb1ByZXNlcnZlLmNvbnRhaW5zKHNjcmF0Y2gpKTsKLQotICAgICAgICBjb25z
dCB1bnNpZ25lZCBleHRyYVBhZGRpbmdCeXRlcyA9IDA7Ci0gICAgICAgIHVuc2lnbmVkIG51bWJl
ck9mU3RhY2tCeXRlc1VzZWRGb3JSZWdpc3RlclByZXNlcnZhdGlvbiA9IFNjcmF0Y2hSZWdpc3Rl
ckFsbG9jYXRvcjo6cHJlc2VydmVSZWdpc3RlcnNUb1N0YWNrRm9yQ2FsbChqaXQsIHJlZ2lzdGVy
c1RvUHJlc2VydmUsIGV4dHJhUGFkZGluZ0J5dGVzKTsKLQotICAgICAgICBpZiAob3JpZ2luYWxC
YXNlICE9IGJhc2UpCi0gICAgICAgICAgICBqaXQubW92ZShvcmlnaW5hbEJhc2UsIGJhc2UpOwot
ICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW02NChwcm9wZXJ0eU5hbWUu
cmF3Qml0cygpKSwgcHJvcGVydHkpOwotICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW1QdHIobV9zdHViSW5mbyksIHN0dWJJbmZvKTsKLSAgICAgICAgaml0LmNhbGwoc2Ny
YXRjaCwgSklUU3R1YlJvdXRpbmVQdHJUYWcpOwotICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW02NCgwKSwgcmVzdWx0KTsKLSAgICAgICAgaml0Lm1vdmUocmVzdWx0LCBz
Y3JhdGNoKTsKLQotICAgICAgICBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OnJlc3RvcmVSZWdp
c3RlcnNGcm9tU3RhY2tGb3JDYWxsKGppdCwgcmVnaXN0ZXJzVG9QcmVzZXJ2ZSwgUmVnaXN0ZXJT
ZXQoKSwgbnVtYmVyT2ZTdGFja0J5dGVzVXNlZEZvclJlZ2lzdGVyUHJlc2VydmF0aW9uLCBleHRy
YVBhZGRpbmdCeXRlcyk7Ci0KLSAgICAgICAgc2tpcElubGluZUFjY2Vzcy5hcHBlbmQoaml0LmJy
YW5jaFRlc3QzMihDQ2FsbEhlbHBlcnM6Olplcm8sIHNjcmF0Y2gpKTsKLSAgICAgICAgaml0Lm1v
dmUoc2NyYXRjaCwgb3JpZ2luYWxSZXN1bHQpOwotICAgICAgICBkb25lLmFwcGVuZChqaXQuanVt
cCgpKTsKLSAgICB9Ci0KLSAgICBza2lwSW5saW5lQWNjZXNzLmxpbmsoJmppdCk7Ci0gICAgbV9z
bG93UGF0aEp1bXAgPSBqaXQuanVtcCgpOworICAgIG1fc2xvd1BhdGhKdW1wID0gUHJvcGVydHlB
Y2Nlc3NTaWRlSW5saW5lQ2FjaGU6OmdlbmVyYXRlQ2FsbHNpdGUoaml0LCBwcm9wZXJ0eU5hbWUs
CisgICAgICAgIG1fc3R1YkluZm8sIG1fc3R1YkluZm8tPmJhc2VHUFIsIG1fc3R1YkluZm8tPnZh
bHVlR1BSLCBtX3N0dWJJbmZvLT51c2VkUmVnaXN0ZXJzKTsKIAogICAgIHNpemVfdCBqdW1wU2l6
ZSA9IGppdC5tX2Fzc2VtYmxlci5idWZmZXIoKS5jb2RlU2l6ZSgpIC0gc3RhcnRTaXplOwogICAg
IGlmIChpbmxpbmVJQ1NpemUgPj0ganVtcFNpemUpIHsKQEAgLTE5NSw4ICsxMzIsNiBAQCB2b2lk
IEpJVEJ5SWRHZW5lcmF0b3I6OmdlbmVyYXRlU2lkZUlubGluZUNhY2hlKENDYWxsSGVscGVycyYg
aml0LCBzaXplX3QgaW5saW5lSQogICAgICAgICBqaXQuZW1pdE5vcHMobm9wc1RvRW1pdEluQnl0
ZXMpOwogICAgIH0KICAgICBBU1NFUlQoaml0Lm1fYXNzZW1ibGVyLmJ1ZmZlcigpLmNvZGVTaXpl
KCkgLSBzdGFydFNpemUgPj0gaW5saW5lSUNTaXplKTsKLQotICAgIGRvbmUubGluaygmaml0KTsK
ICAgICBtX2RvbmUgPSBqaXQubGFiZWwoKTsKIH0KIApAQCAtMjEyLDkgKzE0Nyw5IEBAIEpJVEdl
dEJ5SWRHZW5lcmF0b3I6OkpJVEdldEJ5SWRHZW5lcmF0b3IoCiAKIHZvaWQgSklUR2V0QnlJZEdl
bmVyYXRvcjo6Z2VuZXJhdGVGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCkKIHsKLSAgICBpZiAo
T3B0aW9uczo6dXNlUHJvcGVydHlBY2Nlc3NTaWRlSUMoKSAmJiBtX3Byb3BlcnR5TmFtZSkKLSAg
ICAgICAgZ2VuZXJhdGVTaWRlSW5saW5lQ2FjaGUoaml0LCBtX2lzTGVuZ3RoQWNjZXNzID8gSW5s
aW5lQWNjZXNzOjpzaXplRm9yTGVuZ3RoQWNjZXNzKCkgOiBJbmxpbmVBY2Nlc3M6OnNpemVGb3JQ
cm9wZXJ0eUFjY2VzcygpLCBtX3Byb3BlcnR5TmFtZSk7Ci0gICAgZWxzZQorLy8gICAgaWYgKE9w
dGlvbnM6OnVzZVByb3BlcnR5QWNjZXNzU2lkZUlDKCkgJiYgbV9wcm9wZXJ0eU5hbWUpCisvLyAg
ICAgICAgZ2VuZXJhdGVTaWRlSW5saW5lQ2FjaGUoaml0LCBtX2lzTGVuZ3RoQWNjZXNzID8gSW5s
aW5lQWNjZXNzOjpzaXplRm9yTGVuZ3RoQWNjZXNzKCkgOiBJbmxpbmVBY2Nlc3M6OnNpemVGb3JQ
cm9wZXJ0eUFjY2VzcygpLCBtX3Byb3BlcnR5TmFtZSk7CisvLyAgICBlbHNlCiAgICAgICAgIGdl
bmVyYXRlRmFzdENvbW1vbihqaXQsIG1faXNMZW5ndGhBY2Nlc3MgPyBJbmxpbmVBY2Nlc3M6OnNp
emVGb3JMZW5ndGhBY2Nlc3MoKSA6IElubGluZUFjY2Vzczo6c2l6ZUZvclByb3BlcnR5QWNjZXNz
KCkpOwogfQogCkBAIC0yNjUsOSArMjAwLDkgQEAgSklUR2V0QnlJZFdpdGhUaGlzR2VuZXJhdG9y
OjpKSVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3IoCiAKIHZvaWQgSklUR2V0QnlJZFdpdGhUaGlz
R2VuZXJhdG9yOjpnZW5lcmF0ZUZhc3RQYXRoKENDYWxsSGVscGVycyYgaml0KQogewotICAgIGlm
IChPcHRpb25zOjp1c2VQcm9wZXJ0eUFjY2Vzc1NpZGVJQygpICYmIG1fcHJvcGVydHlOYW1lKQot
ICAgICAgICBnZW5lcmF0ZVNpZGVJbmxpbmVDYWNoZShqaXQsIElubGluZUFjY2Vzczo6c2l6ZUZv
clByb3BlcnR5QWNjZXNzKCksIG1fcHJvcGVydHlOYW1lKTsKLSAgICBlbHNlCisvLyAgICBpZiAo
T3B0aW9uczo6dXNlUHJvcGVydHlBY2Nlc3NTaWRlSUMoKSAmJiBtX3Byb3BlcnR5TmFtZSkKKy8v
ICAgICAgICBnZW5lcmF0ZVNpZGVJbmxpbmVDYWNoZShqaXQsIElubGluZUFjY2Vzczo6c2l6ZUZv
clByb3BlcnR5QWNjZXNzKCksIG1fcHJvcGVydHlOYW1lKTsKKy8vICAgIGVsc2UKICAgICAgICAg
Z2VuZXJhdGVGYXN0Q29tbW9uKGppdCwgSW5saW5lQWNjZXNzOjpzaXplRm9yUHJvcGVydHlBY2Nl
c3MoKSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUHJvcGVy
dHlBY2Nlc3NTaWRlSW5saW5lQ2FjaGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Q
cm9wZXJ0eUFjY2Vzc1NpZGVJbmxpbmVDYWNoZS5jcHAKaW5kZXggNDgyNWYwZTBhYmU5Li40M2Qy
NTYyMjEyODIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUHJvcGVydHlB
Y2Nlc3NTaWRlSW5saW5lQ2FjaGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
UHJvcGVydHlBY2Nlc3NTaWRlSW5saW5lQ2FjaGUuY3BwCkBAIC00OCw3ICs0OCw3IEBAIG5hbWVz
cGFjZSBKU0MgewogCiBuYW1lc3BhY2UgU2lkZUFjY2Vzc0NhY2hlSW50ZXJuYWwgewogc3RhdGlj
IGNvbnN0ZXhwciBib29sIHZlcmJvc2UgPSB0cnVlOwotc3RhdGljIGNvbnN0ZXhwciB1aW50OF90
IHNraXBwZWRDYWxsc2l0ZUNvdW50ZG93bk1heCA9IDg7CitzdGF0aWMgY29uc3RleHByIHVpbnQ4
X3Qgc2tpcHBlZENhbGxzaXRlQ291bnRkb3duTWF4ID0gNDsKIHN0YXRpYyBjb25zdGV4cHIgdWlu
dDMyX3QgcmVwYXRjaEJ1ZmZlcmluZ0NvdW50ZG93biA9IDg7CiBzdGF0aWMgY29uc3RleHByIHVp
bnQzMl90IG1heEFjY2Vzc1ZhcmlhbnRMaXN0U2l6ZSA9IDMyOwogfQpAQCAtNDg2LDYgKzQ4Niw4
MCBAQCBib29sIFByb3BlcnR5QWNjZXNzU2lkZUlubGluZUNhY2hlOjp2aXNpdFdlYWsoVk0mIHZt
KQogICAgIHJldHVybiBkZWFkU3RydWN0dXJlcy5pc0VtcHR5KCk7CiB9CiAKK01hY3JvQXNzZW1i
bGVyOjpKdW1wIFByb3BlcnR5QWNjZXNzU2lkZUlubGluZUNhY2hlOjpnZW5lcmF0ZUNhbGxzaXRl
KENDYWxsSGVscGVycyYgaml0LCBDYWNoZWFibGVJZGVudGlmaWVyIHByb3BlcnR5TmFtZSwKKyAg
ICBTdHJ1Y3R1cmVTdHViSW5mbyogY2FsbHNpdGVTdHViSW5mbywgR1BSUmVnIG9yaWdpbmFsQmFz
ZSwgR1BSUmVnIG9yaWdpbmFsUmVzdWx0LCBSZWdpc3RlclNldCBtdXN0UHJlc2VydmUpCit7Cisg
ICAgUkVMRUFTRV9BU1NFUlQoT3B0aW9uczo6dXNlUHJvcGVydHlBY2Nlc3NTaWRlSUMoKSk7Cisg
ICAgQVNTRVJUKHByb3BlcnR5TmFtZSk7CisgICAgR1BSUmVnIHJlc3VsdCA9IFNpZGVQcm9wZXJ0
eUFjY2Vzc1JlZ2lzdGVyczo6cmVzdWx0OworICAgIEdQUlJlZyBiYXNlID0gU2lkZVByb3BlcnR5
QWNjZXNzUmVnaXN0ZXJzOjpiYXNlOworICAgIEdQUlJlZyBwcm9wZXJ0eSA9IFNpZGVQcm9wZXJ0
eUFjY2Vzc1JlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgR1BSUmVnIHN0dWJJbmZvID0gU2lkZVBy
b3BlcnR5QWNjZXNzUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICBHUFJSZWcgc2NyYXRjaCA9IElu
dmFsaWRHUFJSZWc7CisKKyAgICBhdXRvJiB2bSA9IGppdC52bSgpOworICAgIGF1dG8qIHNpZGVJ
Q1RhYmxlID0gdm0uaGVhcC5wcm9wZXJ0eUFjY2Vzc1NpZGVJbmxpbmVDYWNoZSgpLmp1bXBUYWJs
ZSgpOworICAgIENDYWxsSGVscGVyczo6SnVtcExpc3QgZG9uZTsKKyAgICBDQ2FsbEhlbHBlcnM6
Okp1bXBMaXN0IHNraXBJbmxpbmVBY2Nlc3M7CisKKyAgICBBU1NFUlQob3JpZ2luYWxCYXNlICE9
IEludmFsaWRHUFJSZWcpOworICAgIEFTU0VSVChvcmlnaW5hbFJlc3VsdCAhPSBJbnZhbGlkR1BS
UmVnKTsKKworICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvciBhbGxvY2F0b3IobXVzdFByZXNl
cnZlKTsKKyAgICBhbGxvY2F0b3IubG9jayhvcmlnaW5hbEJhc2UpOworICAgIGFsbG9jYXRvci5s
b2NrKHJlc3VsdCk7CisgICAgYWxsb2NhdG9yLmxvY2soYmFzZSk7CisgICAgYWxsb2NhdG9yLmxv
Y2socHJvcGVydHkpOworICAgIGFsbG9jYXRvci5sb2NrKHN0dWJJbmZvKTsKKyAgICBzY3JhdGNo
ID0gYWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOworCisgICAgaml0LmxvYWQzMihDQ2Fs
bEhlbHBlcnM6OkFkZHJlc3Mob3JpZ2luYWxCYXNlLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0
KCkpLCBzY3JhdGNoKTsKKyAgICBqaXQuYW5kNjQoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tNjQo
UHJvcGVydHlBY2Nlc3NTaWRlSW5saW5lQ2FjaGU6OnN0cnVjdHVyZVRhYmxlTWFzayksIHNjcmF0
Y2gpOworICAgIGppdC5sc2hpZnQzMihDQ2FsbEhlbHBlcnM6OkltbTMyKDMpLCBzY3JhdGNoKTsK
KyAgICBqaXQuYWRkNjQoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tNjQocmVpbnRlcnByZXRfY2Fz
dDx1aW50NjRfdD4oc2lkZUlDVGFibGUpKSwgc2NyYXRjaCk7CisgICAgaml0LmxvYWQ2NChDQ2Fs
bEhlbHBlcnM6OkFkZHJlc3Moc2NyYXRjaCksIHNjcmF0Y2gpOworICAgIHNraXBJbmxpbmVBY2Nl
c3MuYXBwZW5kKGppdC5icmFuY2hUZXN0MzIoQ0NhbGxIZWxwZXJzOjpaZXJvLCBzY3JhdGNoKSk7
CisKKyAgICB7CisgICAgICAgIFJlZ2lzdGVyU2V0IHJlZ2lzdGVyc1RvUHJlc2VydmU7CisgICAg
ICAgIHJlZ2lzdGVyc1RvUHJlc2VydmUuc2V0KG9yaWdpbmFsQmFzZSk7IC8vIEluIGNhc2Ugd2Ug
bmVlZCB0byB0YWtlIHRoZSBzbG93IHBhdGgKKyAgICAgICAgaWYgKG11c3RQcmVzZXJ2ZS5jb250
YWlucyhyZXN1bHQpKQorICAgICAgICAgICAgcmVnaXN0ZXJzVG9QcmVzZXJ2ZS5zZXQocmVzdWx0
KTsKKyAgICAgICAgaWYgKG11c3RQcmVzZXJ2ZS5jb250YWlucyhiYXNlKSkKKyAgICAgICAgICAg
IHJlZ2lzdGVyc1RvUHJlc2VydmUuc2V0KGJhc2UpOworICAgICAgICBpZiAobXVzdFByZXNlcnZl
LmNvbnRhaW5zKHByb3BlcnR5KSkKKyAgICAgICAgICAgIHJlZ2lzdGVyc1RvUHJlc2VydmUuc2V0
KHByb3BlcnR5KTsKKyAgICAgICAgaWYgKG11c3RQcmVzZXJ2ZS5jb250YWlucyhzdHViSW5mbykp
CisgICAgICAgICAgICByZWdpc3RlcnNUb1ByZXNlcnZlLnNldChzdHViSW5mbyk7CisgICAgICAg
IGlmIChtdXN0UHJlc2VydmUuY29udGFpbnMoU2lkZVByb3BlcnR5QWNjZXNzUmVnaXN0ZXJzOjpz
Y3JhdGNoKSkKKyAgICAgICAgICAgIHJlZ2lzdGVyc1RvUHJlc2VydmUuc2V0KFNpZGVQcm9wZXJ0
eUFjY2Vzc1JlZ2lzdGVyczo6c2NyYXRjaCk7CisgICAgICAgIEFTU0VSVCghcmVnaXN0ZXJzVG9Q
cmVzZXJ2ZS5jb250YWlucyhzY3JhdGNoKSk7CisKKyAgICAgICAgY29uc3QgdW5zaWduZWQgZXh0
cmFQYWRkaW5nQnl0ZXMgPSAwOworICAgICAgICB1bnNpZ25lZCBudW1iZXJPZlN0YWNrQnl0ZXNV
c2VkRm9yUmVnaXN0ZXJQcmVzZXJ2YXRpb24gPSBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OnBy
ZXNlcnZlUmVnaXN0ZXJzVG9TdGFja0ZvckNhbGwoaml0LCByZWdpc3RlcnNUb1ByZXNlcnZlLCBl
eHRyYVBhZGRpbmdCeXRlcyk7CisKKyAgICAgICAgaWYgKG9yaWdpbmFsQmFzZSAhPSBiYXNlKQor
ICAgICAgICAgICAgaml0Lm1vdmUob3JpZ2luYWxCYXNlLCBiYXNlKTsKKyAgICAgICAgaml0Lm1v
dmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tNjQocHJvcGVydHlOYW1lLnJhd0JpdHMoKSksIHBy
b3BlcnR5KTsKKyAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGNh
bGxzaXRlU3R1YkluZm8pLCBzdHViSW5mbyk7CisgICAgICAgIGppdC5jYWxsKHNjcmF0Y2gsIEpJ
VFN0dWJSb3V0aW5lUHRyVGFnKTsKKyAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tNjQoMCksIHJlc3VsdCk7CisgICAgICAgIGppdC5tb3ZlKHJlc3VsdCwgc2NyYXRjaCk7
CisKKyAgICAgICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjpyZXN0b3JlUmVnaXN0ZXJzRnJv
bVN0YWNrRm9yQ2FsbChqaXQsIHJlZ2lzdGVyc1RvUHJlc2VydmUsIFJlZ2lzdGVyU2V0KCksIG51
bWJlck9mU3RhY2tCeXRlc1VzZWRGb3JSZWdpc3RlclByZXNlcnZhdGlvbiwgZXh0cmFQYWRkaW5n
Qnl0ZXMpOworCisgICAgICAgIHNraXBJbmxpbmVBY2Nlc3MuYXBwZW5kKGppdC5icmFuY2hUZXN0
MzIoQ0NhbGxIZWxwZXJzOjpaZXJvLCBzY3JhdGNoKSk7CisgICAgICAgIGppdC5tb3ZlKHNjcmF0
Y2gsIG9yaWdpbmFsUmVzdWx0KTsKKyAgICAgICAgZG9uZS5hcHBlbmQoaml0Lmp1bXAoKSk7Cisg
ICAgfQorCisgICAgc2tpcElubGluZUFjY2Vzcy5saW5rKCZqaXQpOworICAgIGF1dG8gc2xvd1Bh
dGhKdW1wID0gaml0Lmp1bXAoKTsKKyAgICBkb25lLmxpbmsoJmppdCk7CisKKyAgICByZXR1cm4g
c2xvd1BhdGhKdW1wOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIEVOQUJM
RShKSVQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Byb3BlcnR5QWNj
ZXNzU2lkZUlubGluZUNhY2hlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Byb3BlcnR5
QWNjZXNzU2lkZUlubGluZUNhY2hlLmgKaW5kZXggMzA1MzRjOWFjMjhlLi41YmI4YTc1MzE3NTYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUHJvcGVydHlBY2Nlc3NTaWRl
SW5saW5lQ2FjaGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Byb3BlcnR5QWNj
ZXNzU2lkZUlubGluZUNhY2hlLmgKQEAgLTI5LDEyICsyOSwxNCBAQAogCiAjaW5jbHVkZSAiQ2Fj
aGVhYmxlSWRlbnRpZmllci5oIgogI2luY2x1ZGUgIkpTQ0pTVmFsdWUuaCIKKyNpbmNsdWRlICJN
YWNyb0Fzc2VtYmxlci5oIgogI2luY2x1ZGUgIlJlZ2lzdGVyU2V0LmgiCiAjaW5jbHVkZSAiU3Ry
dWN0dXJlSURUYWJsZS5oIgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIEpT
QyB7CiAKK2NsYXNzIENDYWxsSGVscGVyczsKIGNsYXNzIENvZGVCbG9jazsKIGNsYXNzIFNpZGVB
Y2Nlc3NDYXNlR3JvdXA7CiBjbGFzcyBTdHJ1Y3R1cmU7CkBAIC01NCw2ICs1Niw4IEBAIHB1Ymxp
YzoKICAgICBib29sIHZpc2l0V2VhayhWTSYpOwogCiAgICAgc3RhdGljIGNvbnN0ZXhwciB1aW50
MzJfdCBzdHJ1Y3R1cmVUYWJsZU1hc2sgPSAweDAwMDAwRkY7CisgICAgc3RhdGljIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wIGdlbmVyYXRlQ2FsbHNpdGUoQ0NhbGxIZWxwZXJzJiBqaXQsIENhY2hlYWJs
ZUlkZW50aWZpZXIgcHJvcGVydHlOYW1lLAorICAgICAgICBTdHJ1Y3R1cmVTdHViSW5mbyogY2Fs
bHNpdGVTdHViSW5mbywgR1BSUmVnIG9yaWdpbmFsQmFzZSwgR1BSUmVnIG9yaWdpbmFsUmVzdWx0
LCBSZWdpc3RlclNldCBtdXN0UHJlc2VydmUpOwogcHJpdmF0ZToKICAgICBWTSogbV92bTsKIAot
LSAKMi4zMC4xIChBcHBsZSBHaXQtMTMwKQoKCkZyb20gOTUyZTk2OTFmMzQwNDJjMzlkMDFhYzAw
ODAxMWIxMmIxNDhjZmZlNyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKRnJvbTogSnVzdGluIE1p
Y2hhdWQgPGp1c3Rpbl9taWNoYXVkQGFwcGxlLmNvbT4KRGF0ZTogRnJpLCAxNSBPY3QgMjAyMSAx
Nzo1NToxNyAtMDcwMApTdWJqZWN0OiBbUEFUQ0ggMDcvMTddIC4KCi0tLQogLi4uL2ppdC9Qcm9w
ZXJ0eUFjY2Vzc1NpZGVJbmxpbmVDYWNoZS5jcHAgICAgIHwgMzEgKysrKysrKysrKysrKysrKysr
KwogLi4uL2ppdC9Qcm9wZXJ0eUFjY2Vzc1NpZGVJbmxpbmVDYWNoZS5oICAgICAgIHwgIDQgKysr
CiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwICAgICAgICAgfCAyMSArKysr
KysrKysrKy0tCiAzIGZpbGVzIGNoYW5nZWQsIDU0IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25z
KC0pCgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Qcm9wZXJ0eUFjY2Vz
c1NpZGVJbmxpbmVDYWNoZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Byb3BlcnR5
QWNjZXNzU2lkZUlubGluZUNhY2hlLmNwcAppbmRleCA0M2QyNTYyMjEyODIuLmIyMDZiYzI0NjYz
NiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Qcm9wZXJ0eUFjY2Vzc1Np
ZGVJbmxpbmVDYWNoZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Qcm9wZXJ0
eUFjY2Vzc1NpZGVJbmxpbmVDYWNoZS5jcHAKQEAgLTU2MCw2ICs1NjAsMzcgQEAgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXAgUHJvcGVydHlBY2Nlc3NTaWRlSW5saW5lQ2FjaGU6OmdlbmVyYXRlQ2FsbHNp
dGUoQ0NhbGxIZWxwZXIKICAgICByZXR1cm4gc2xvd1BhdGhKdW1wOwogfQogCitGdW5jdGlvblB0
cjxKSVRTdHViUm91dGluZVB0clRhZz4gUHJvcGVydHlBY2Nlc3NTaWRlSW5saW5lQ2FjaGU6Om1h
a2VDYWxsc2l0ZVRodW5rKENvZGVCbG9jayogY2FsbHNpdGUsIENhY2hlYWJsZUlkZW50aWZpZXIg
cHJvcGVydHlOYW1lLCBTdHJ1Y3R1cmVTdHViSW5mbyogY2FsbHNpdGVTdHViSW5mbykKK3sKKyAg
ICBDQ2FsbEhlbHBlcnMgaml0KGNhbGxzaXRlKTsKKyAgICBhdXRvJiB2bSA9IGppdC52bSgpOwor
ICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7CisgICAgCisgICAgYXV0byBzbG93UGF0aEp1bXAg
PSBQcm9wZXJ0eUFjY2Vzc1NpZGVJbmxpbmVDYWNoZTo6Z2VuZXJhdGVDYWxsc2l0ZShqaXQsIHBy
b3BlcnR5TmFtZSwKKyAgICAgICAgY2FsbHNpdGVTdHViSW5mbywgY2FsbHNpdGVTdHViSW5mby0+
YmFzZUdQUiwgY2FsbHNpdGVTdHViSW5mby0+dmFsdWVHUFIsIGNhbGxzaXRlU3R1YkluZm8tPnVz
ZWRSZWdpc3RlcnMpOworICAgIAorICAgIGppdC5yZXQoKTsKKyAgICBqaXQuYnJlYWtwb2ludCgp
OworCisgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKGppdCwgbnVsbHB0ciwgTGlua0J1ZmZlcjo6
UHJvZmlsZTo6SW5saW5lQ2FjaGUsIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7CisgICAgaWYgKGxp
bmtCdWZmZXIuZGlkRmFpbFRvQWxsb2NhdGUoKSkgeworICAgICAgICBkYXRhTG9nTG5JZihTaWRl
QWNjZXNzQ2FjaGVJbnRlcm5hbDo6dmVyYm9zZSwgIkRpZCBmYWlsIHRvIGFsbG9jYXRlLiIpOwor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisgICAgCisgICAgbGlua0J1ZmZlci5saW5r
KHNsb3dQYXRoSnVtcCwgY2FsbHNpdGVTdHViSW5mby0+c2xvd1BhdGhTdGFydExvY2F0aW9uKTsK
KworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRTdHViUm91dGluZVB0clRhZz4gY29kZSA9
IEZJTkFMSVpFX0NPREVfRk9SKAorICAgICAgICBudWxscHRyLCBsaW5rQnVmZmVyLCBKSVRTdHVi
Um91dGluZVB0clRhZywKKyAgICAgICAgIiVzIiwgdG9DU3RyaW5nKCJTaWRlIEFjY2VzcyBzbG93
IHBhdGggdGh1bmsgZm9yICIsIHByb3BlcnR5TmFtZSwgIjogIikuZGF0YSgpKTsKKworICAgIGF1
dG8gc3R1YiA9IGFkb3B0UmVmKCpuZXcgU2lkZUFjY2Vzc0pJVFN0dWJSb3V0aW5lKGNvZGUsIHZt
LCB7IH0pKTsKKyAgICBzdHViLT5tYWtlR0NBd2FyZSh2bSk7CisgICAgbV9jYWxsc2l0ZXMuYXBw
ZW5kKHN0ZDo6bW92ZShzdHViKSk7CisgICAgCisgICAgcmV0dXJuIEZ1bmN0aW9uUHRyPEpJVFN0
dWJSb3V0aW5lUHRyVGFnPihjb2RlLmNvZGUoKSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwog
CiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvUHJvcGVydHlBY2Nlc3NTaWRlSW5saW5lQ2FjaGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvUHJvcGVydHlBY2Nlc3NTaWRlSW5saW5lQ2FjaGUuaAppbmRleCA1YmI4YTc1MzE3
NTYuLmQ1OTIwNmEzNWRiMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Q
cm9wZXJ0eUFjY2Vzc1NpZGVJbmxpbmVDYWNoZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvUHJvcGVydHlBY2Nlc3NTaWRlSW5saW5lQ2FjaGUuaApAQCAtMzksNiArMzksNyBAQCBu
YW1lc3BhY2UgSlNDIHsKIGNsYXNzIENDYWxsSGVscGVyczsKIGNsYXNzIENvZGVCbG9jazsKIGNs
YXNzIFNpZGVBY2Nlc3NDYXNlR3JvdXA7CitjbGFzcyBTaWRlQWNjZXNzSklUU3R1YlJvdXRpbmU7
CiBjbGFzcyBTdHJ1Y3R1cmU7CiBjbGFzcyBTdHJ1Y3R1cmVTdHViSW5mbzsKIGNsYXNzIFByb3Bl
cnR5U2xvdDsKQEAgLTU4LDYgKzU5LDggQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIg
dWludDMyX3Qgc3RydWN0dXJlVGFibGVNYXNrID0gMHgwMDAwMEZGOwogICAgIHN0YXRpYyBNYWNy
b0Fzc2VtYmxlcjo6SnVtcCBnZW5lcmF0ZUNhbGxzaXRlKENDYWxsSGVscGVycyYgaml0LCBDYWNo
ZWFibGVJZGVudGlmaWVyIHByb3BlcnR5TmFtZSwKICAgICAgICAgU3RydWN0dXJlU3R1YkluZm8q
IGNhbGxzaXRlU3R1YkluZm8sIEdQUlJlZyBvcmlnaW5hbEJhc2UsIEdQUlJlZyBvcmlnaW5hbFJl
c3VsdCwgUmVnaXN0ZXJTZXQgbXVzdFByZXNlcnZlKTsKKyAgICAKKyAgICBGdW5jdGlvblB0cjxK
SVRTdHViUm91dGluZVB0clRhZz4gbWFrZUNhbGxzaXRlVGh1bmsoQ29kZUJsb2NrKiBjYWxsc2l0
ZSwgQ2FjaGVhYmxlSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUsIFN0cnVjdHVyZVN0dWJJbmZvKiBj
YWxsc2l0ZVN0dWJJbmZvKTsKIHByaXZhdGU6CiAgICAgVk0qIG1fdm07CiAKQEAgLTcwLDYgKzcz
LDcgQEAgcHJpdmF0ZToKIAogICAgIFZlY3RvcjxGdW5jdGlvblB0cjxKSVRTdHViUm91dGluZVB0
clRhZz4+IG1fZ2V0QnlJZEp1bXBUYWJsZSB7c3RydWN0dXJlVGFibGVFbnRyaWVzLCBudWxscHRy
fTsKICAgICBIYXNoTWFwPFN0cnVjdHVyZUlELCBzdGQ6OnVuaXF1ZV9wdHI8U2lkZUFjY2Vzc0Nh
c2VHcm91cD4+IG1fc2VlblN0cnVjdHVyZXM7CisgICAgVmVjdG9yPFJlZlB0cjxTaWRlQWNjZXNz
SklUU3R1YlJvdXRpbmU+PiBtX2NhbGxzaXRlczsKIAogICAgIGZyaWVuZCBjbGFzcyBTaWRlR2V0
QnlJZEdlbmVyYXRvcjsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L1JlcGF0Y2guY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAppbmRl
eCAzNDRjOTUzMTIzYjMuLjcxY2IyMzgzNDNmNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9SZXBhdGNoLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Jl
cGF0Y2guY3BwCkBAIC00NzIsOCArNDcyLDI1IEBAIHZvaWQgcmVwYXRjaEdldEJ5KEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jayogY29kZUJsb2NrLCBKU1ZhbHVlIGJhCiB7
CiAgICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOwogICAgIAot
ICAgIGlmICh0cnlDYWNoZUdldEJ5KGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBiYXNlVmFsdWUs
IHByb3BlcnR5TmFtZSwgc2xvdCwgc3R1YkluZm8sIGtpbmQpID09IEdpdmVVcE9uQ2FjaGUpCi0g
ICAgICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgYXBwcm9wcmlh
dGVHZXRCeUZ1bmN0aW9uKGtpbmQpKTsKKyAgICBpZiAodHJ5Q2FjaGVHZXRCeShnbG9iYWxPYmpl
Y3QsIGNvZGVCbG9jaywgYmFzZVZhbHVlLCBwcm9wZXJ0eU5hbWUsIHNsb3QsIHN0dWJJbmZvLCBr
aW5kKSAhPSBHaXZlVXBPbkNhY2hlKQorICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIHJl
cGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgYXBwcm9wcmlhdGVHZXRCeUZ1
bmN0aW9uKGtpbmQpKTsKKyAgICAKKyAgICBpZiAoa2luZCAhPSBHZXRCeUtpbmQ6OkJ5SWQgfHwg
IU9wdGlvbnM6OnVzZVByb3BlcnR5QWNjZXNzU2lkZUlDKCkpIHsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICAKKyAgICBhdXRvIGljID0gZ2xvYmFsT2JqZWN0LT52bSgpLmhlYXAucHJvcGVy
dHlBY2Nlc3NTaWRlSW5saW5lQ2FjaGUoKS5tYWtlQ2FsbHNpdGVUaHVuayhjb2RlQmxvY2ssIHBy
b3BlcnR5TmFtZSwgJnN0dWJJbmZvKTsKKyAgICBpZiAoIWljKQorICAgICAgICByZXR1cm47Cisg
ICAgCisgICAgQ0NhbGxIZWxwZXJzOjplbWl0SklUQ29kZU92ZXIoc3R1YkluZm8uc3RhcnQucmV0
YWdnZWQ8SlNJbnRlcm5hbFB0clRhZz4oKSwgc2NvcGVkTGFtYmRhPHZvaWQoQ0NhbGxIZWxwZXJz
Jik+KFsmXShDQ2FsbEhlbHBlcnMmIGppdCkgeworICAgICAgICBhdXRvIGNhbGwgPSBqaXQuY2Fs
bChKSVRTdHViUm91dGluZVB0clRhZyk7CisgICAgICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExp
bmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhjYWxs
LCBpYy5yZXRhZ2dlZDxKSVRTdHViUm91dGluZVB0clRhZz4oKSk7CisgICAgICAgIH0pOworICAg
IH0pLCAiU2lkZSBBY2Nlc3M6IGxpbmtpbmcgY29uc3RhbnQganVtcCB0byBpYyB0aHVuayIpOwog
fQogCiAKLS0gCjIuMzAuMSAoQXBwbGUgR2l0LTEzMCkKCgpGcm9tIGU3M2MyYzNiMzcwMWE0MzIw
ZmJiMzk4NTM5YzVjMmU4YTQ3MDA2NWQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCkZyb206IEp1
c3RpbiBNaWNoYXVkIDxqdXN0aW5fbWljaGF1ZEBhcHBsZS5jb20+CkRhdGU6IE1vbiwgMTggT2N0
IDIwMjEgMTc6Mjg6MzQgLTA3MDAKU3ViamVjdDogW1BBVENIIDA4LzE3XSAuCgotLS0KIC4uLmJ5
LWlkLWJsb3dvdXQtYWZ0ZXItdGllcnVwLXN0cnVjdHVyZS1pYy5qcyB8ICA0NyArKysrKysrKwog
Li4uL2dldC1ieS1pZC1ibG93b3V0LXN0cnVjdHVyZS1pYy5qcyAgICAgICAgIHwgIDU5ICsrKysr
Ky0tLS0KIC4uLi9nZXQtYnktaWQtbWFueS1zdHJ1Y3R1cmVzLmpzICAgICAgICAgICAgICB8ICAx
NiArKysKIC4uLi9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oICAgICAgICAgICAgICB8ICAg
MyArLQogLi4uL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5jcHAgICAgICAgICAgIHwgICA5
ICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwICAgfCAgMTEg
Ky0KIC4uLi9qaXQvUHJvcGVydHlBY2Nlc3NTaWRlSW5saW5lQ2FjaGUuY3BwICAgICB8IDEwOCAr
KysrKysrKystLS0tLS0tLS0KIC4uLi9qaXQvUHJvcGVydHlBY2Nlc3NTaWRlSW5saW5lQ2FjaGUu
aCAgICAgICB8ICAgOSArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcCAg
ICAgICAgIHwgICA0ICstCiA5IGZpbGVzIGNoYW5nZWQsIDE3OCBpbnNlcnRpb25zKCspLCA4OCBk
ZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9n
ZXQtYnktaWQtYmxvd291dC1hZnRlci10aWVydXAtc3RydWN0dXJlLWljLmpzCiBjcmVhdGUgbW9k
ZSAxMDA2NDQgSlNUZXN0cy9taWNyb2JlbmNobWFya3MvZ2V0LWJ5LWlkLW1hbnktc3RydWN0dXJl
cy5qcwoKZGlmZiAtLWdpdCBhL0pTVGVzdHMvbWljcm9iZW5jaG1hcmtzL2dldC1ieS1pZC1ibG93
b3V0LWFmdGVyLXRpZXJ1cC1zdHJ1Y3R1cmUtaWMuanMgYi9KU1Rlc3RzL21pY3JvYmVuY2htYXJr
cy9nZXQtYnktaWQtYmxvd291dC1hZnRlci10aWVydXAtc3RydWN0dXJlLWljLmpzCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uZmY5MjA3ZGJlNDg1Ci0tLSAvZGV2L251
bGwKKysrIGIvSlNUZXN0cy9taWNyb2JlbmNobWFya3MvZ2V0LWJ5LWlkLWJsb3dvdXQtYWZ0ZXIt
dGllcnVwLXN0cnVjdHVyZS1pYy5qcwpAQCAtMCwwICsxLDQ3IEBACitmdW5jdGlvbiBmb28obykg
eworICAgIHJldHVybiBvLmYKK30KKworbm9JbmxpbmUoZm9vKQorCitmdW5jdGlvbiBmb28yKG8p
IHsKKyAgICByZXR1cm4gby5nCit9CisKK25vSW5saW5lKGZvbzIpCisKK2Z1bmN0aW9uIGNoZWNr
KG8sIGUpIHsKKyAgICBpZiAoZm9vKG8pICE9IGUpCisgICAgICAgIHRocm93ICJFcnJvcjogYmFk
IHJlc3VsdCBmb3Igb2JqZWN0OiAiICsgbworICAgIGZvbzIobykKK30KKworLy8gR2V0IHVwIHRv
IHRoZSBGVEwKK2ZvciAodmFyIGkgPSAwOyBpIDwgMWU4OyArK2kpIHsKKyAgICBjaGVjayh7YTo4
OSwgZjoxfSwgMSkKK30KKworLy8gTm93IGxldCdzIGJlIG1lYW4KK2ZvciAodmFyIGkgPSAwOyBp
IDwgMWU1OyArK2kpIHsKKyAgICBjaGVjayh7YTo4OSwgZjoxfSwgMSkKKyAgICBjaGVjayh7Yjo4
OSwgZjoyfSwgMikKKyAgICBjaGVjayh7Yzo4OSwgZjozfSwgMykKKyAgICBjaGVjayh7ZDo4OSwg
Zjo0fSwgNCkKKyAgICBjaGVjayh7ZTo4OSwgZjo1fSwgNSkKKyAgICBjaGVjayh7Zzo4OSwgZjo2
fSwgNikKKyAgICBjaGVjayh7aDo4OSwgZjo3fSwgNykKKyAgICBjaGVjayh7aTo4OSwgZjo4fSwg
OCkKKyAgICBjaGVjayh7YToxLCBiOjIsIGY6OX0sIDkpCisgICAgY2hlY2soe2E6MSwgYjoyLCBm
OjEwLCBjOjMgfSwgMTApCisgICAgY2hlY2soe2E6MSwgYjoyLCBjOjMsIGQ6NCwgZTo1LCBmOjEx
fSwgMTEpCisgICAgaWYgKGZvbzIoe2c6ODksIGY6Nn0pICE9IDg5KQorICAgICAgICB0aHJvdyAi
RXJyb3I6IGJhZCByZXN1bHQiCisKKyAgICBpZiAoaSA9PSAxZTYrNSkgeworICAgICAgICBjaGVj
ayh7ejo4OSwgZjoyMH0sIDIwKQorICAgIH0KKworICAgIGlmIChpID09IDFlNis1MCkgeworICAg
ICAgICBjaGVjayh7ejo4OSwgZzoyMH0sIHVuZGVmaW5lZCkKKyAgICB9Cit9CmRpZmYgLS1naXQg
YS9KU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9nZXQtYnktaWQtYmxvd291dC1zdHJ1Y3R1cmUtaWMu
anMgYi9KU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9nZXQtYnktaWQtYmxvd291dC1zdHJ1Y3R1cmUt
aWMuanMKaW5kZXggMzllMTlhMzhkYWFkLi5hOTc4MmQzYmFhNWIgMTAwNjQ0Ci0tLSBhL0pTVGVz
dHMvbWljcm9iZW5jaG1hcmtzL2dldC1ieS1pZC1ibG93b3V0LXN0cnVjdHVyZS1pYy5qcworKysg
Yi9KU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9nZXQtYnktaWQtYmxvd291dC1zdHJ1Y3R1cmUtaWMu
anMKQEAgLTEsMjggKzEsNDEgQEAKIGZ1bmN0aW9uIGZvbyhvKSB7Ci0gICAgcmV0dXJuIG8uZjsK
KyAgICByZXR1cm4gby5mCiB9CiAKLW5vSW5saW5lKGZvbyk7Citub0lubGluZShmb28pCiAKLWZv
ciAodmFyIGkgPSAwOyBpIDwgMWU3OyArK2kpIHsKLSAgICBpZiAoZm9vKHthOjg5LCBmOjF9KSAh
PSAxKQotICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQgZm9yIG9iamVjdDogIiArIHJl
c3VsdDsKLSAgICBpZiAoZm9vKHtiOjg5LCBmOjJ9KSAhPSAyKQotICAgICAgICB0aHJvdyAiRXJy
b3I6IGJhZCByZXN1bHQgZm9yIG9iamVjdDogIiArIHJlc3VsdDsKLSAgICBpZiAoZm9vKHthOjAs
IGI6MCwgYzo4OSwgZjozfSkgIT0gMykKLSAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0
IGZvciBvYmplY3Q6ICIgKyByZXN1bHQ7Ci0gICAgaWYgKGZvbyh7ZDo4OSwgZjo0fSkgIT0gNCkK
LSAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0IGZvciBvYmplY3Q6ICIgKyByZXN1bHQ7
Ci0gICAgaWYgKGZvbyh7ZTo4OSwgZjo1fSkgIT0gNSkKLSAgICAgICAgdGhyb3cgIkVycm9yOiBi
YWQgcmVzdWx0IGZvciBvYmplY3Q6ICIgKyByZXN1bHQ7Ci0gICAgaWYgKGZvbyh7Zjo4OSwgZjo2
fSkgIT0gNikKLSAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0IGZvciBvYmplY3Q6ICIg
KyByZXN1bHQ7Ci0gICAgaWYgKGZvbyh7aDo4OSwgZjo3fSkgIT0gNykKLSAgICAgICAgdGhyb3cg
IkVycm9yOiBiYWQgcmVzdWx0IGZvciBvYmplY3Q6ICIgKyByZXN1bHQ7Ci0gICAgaWYgKGZvbyh7
Zjo4fSkgIT0gOCkKLSAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0IGZvciBvYmplY3Q6
ICIgKyByZXN1bHQ7Ci0gICAgaWYgKGZvbyh7Zjo5LCB6OjV9KSAhPSA5KQotICAgICAgICB0aHJv
dyAiRXJyb3I6IGJhZCByZXN1bHQgZm9yIG9iamVjdDogIiArIHJlc3VsdDsKLSAgICBpZiAoZm9v
KHtmOjEwLCB6Mjo2fSkgIT0gMTApCi0gICAgICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdCBm
b3Igb2JqZWN0OiAiICsgcmVzdWx0OworZnVuY3Rpb24gZm9vMihvKSB7CisgICAgcmV0dXJuIG8u
ZworfQorCitub0lubGluZShmb28yKQorCitmdW5jdGlvbiBjaGVjayhvLCBlKSB7CisgICAgaWYg
KGZvbyhvKSAhPSBlKQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQgZm9yIG9iamVj
dDogIiArIG8KKyAgICBmb28yKG8pCit9CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMWU1OyArK2kp
IHsKKyAgICBjaGVjayh7YTo4OSwgZjoxfSwgMSkKKyAgICBjaGVjayh7Yjo4OSwgZjoyfSwgMikK
KyAgICBjaGVjayh7Yzo4OSwgZjozfSwgMykKKyAgICBjaGVjayh7ZDo4OSwgZjo0fSwgNCkKKyAg
ICBjaGVjayh7ZTo4OSwgZjo1fSwgNSkKKyAgICBjaGVjayh7Zzo4OSwgZjo2fSwgNikKKyAgICBj
aGVjayh7aDo4OSwgZjo3fSwgNykKKyAgICBjaGVjayh7aTo4OSwgZjo4fSwgOCkKKyAgICBjaGVj
ayh7YToxLCBiOjIsIGY6OX0sIDkpCisgICAgY2hlY2soe2E6MSwgYjoyLCBmOjEwLCBjOjMgfSwg
MTApCisgICAgY2hlY2soe2E6MSwgYjoyLCBjOjMsIGQ6NCwgZTo1LCBmOjExfSwgMTEpCisgICAg
aWYgKGZvbzIoe2c6ODksIGY6Nn0pICE9IDg5KQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCBy
ZXN1bHQiCisKKyAgICBpZiAoaSA9PSAxZTYrNSkgeworICAgICAgICBjaGVjayh7ejo4OSwgZjoy
MH0sIDIwKQorICAgIH0KKworICAgIGlmIChpID09IDFlNis1MCkgeworICAgICAgICBjaGVjayh7
ejo4OSwgZzoyMH0sIHVuZGVmaW5lZCkKKyAgICB9CiB9CmRpZmYgLS1naXQgYS9KU1Rlc3RzL21p
Y3JvYmVuY2htYXJrcy9nZXQtYnktaWQtbWFueS1zdHJ1Y3R1cmVzLmpzIGIvSlNUZXN0cy9taWNy
b2JlbmNobWFya3MvZ2V0LWJ5LWlkLW1hbnktc3RydWN0dXJlcy5qcwpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjFmNTViYWE1OTEyNQotLS0gL2Rldi9udWxsCisrKyBi
L0pTVGVzdHMvbWljcm9iZW5jaG1hcmtzL2dldC1ieS1pZC1tYW55LXN0cnVjdHVyZXMuanMKQEAg
LTAsMCArMSwxNiBAQAorZnVuY3Rpb24gZm9vKG8pIHsKKyAgICByZXR1cm4gby5mCit9CisKK25v
SW5saW5lKGZvbykKKworZnVuY3Rpb24gY2hlY2sobywgZSkgeworICAgIGlmIChmb28obykgIT0g
ZSkKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0IGZvciBvYmplY3Q6ICIgKyBvCit9
CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMWU1OyArK2kpIHsKKyAgICBsZXQgb2JqID0geyBmOiAx
IH0KKyAgICBvYmpbInoiICsgaV0gPSAyCisgICAgY2hlY2sob2JqLCAxKQorfQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAppbmRleCA0
OTQ2ZmUzOTMwYzMuLjU2Y2UzNDQ3YjdjNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgKQEAgLTM2OCw3ICszNjgsNiBAQCBwdWJs
aWM6CiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlNsb3dQYXRoU3RhcnRMb2NhdGlvbigp
IHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihTdHJ1Y3R1cmVTdHViSW5mbywgc2xvd1BhdGhTdGFy
dExvY2F0aW9uKTsgfQogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZTbG93T3BlcmF0aW9u
KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFN0cnVjdHVyZVN0dWJJbmZvLCBtX3Nsb3dPcGVy
YXRpb24pOyB9CiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkNvdW50ZG93bigpIHsgcmV0
dXJuIE9CSkVDVF9PRkZTRVRPRihTdHJ1Y3R1cmVTdHViSW5mbywgY291bnRkb3duKTsgfQotICAg
IHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZTaWRlQWNjZXNzU2tpcHBlZENhbGxzaXRlQ291bnRk
b3duKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFN0cnVjdHVyZVN0dWJJbmZvLCBzaWRlQWNj
ZXNzU2tpcHBlZENhbGxzaXRlQ291bnRkb3duKTsgfQogCiAgICAgUmVnaXN0ZXJTZXQgdXNlZFJl
Z2lzdGVyczsKIApAQCAtNDA3LDcgKzQwNiw3IEBAIHB1YmxpYzoKICAgICBDYWxsU2l0ZUluZGV4
IGNhbGxTaXRlSW5kZXg7CiAKICAgICB1aW50OF90IGJ1ZmZlcmluZ0NvdW50ZG93bjsKLSAgICB1
aW50OF90IHNpZGVBY2Nlc3NTa2lwcGVkQ2FsbHNpdGVDb3VudGRvd247CisgICAgdWludDhfdCBz
ZWVuU3RydWN0dXJlc0NvdW50OwogICAgIGJvb2wgcmVzZXRCeUdDIDogMTsKICAgICBib29sIHRv
b2tTbG93UGF0aCA6IDE7CiAgICAgYm9vbCBldmVyQ29uc2lkZXJlZCA6IDE7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuY3BwCmlu
ZGV4IGE0ZmUzNDc1YTgwNy4uZmQyNTYyOTg3Njg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmNwcApAQCAtMTIzLDggKzEy
MywxMyBAQCB2b2lkIEpJVEJ5SWRHZW5lcmF0b3I6OmdlbmVyYXRlU2lkZUlubGluZUNhY2hlKEND
YWxsSGVscGVycyYgaml0LCBzaXplX3QgaW5saW5lSQogICAgIG1fc3RhcnQgPSBqaXQubGFiZWwo
KTsKICAgICBzaXplX3Qgc3RhcnRTaXplID0gaml0Lm1fYXNzZW1ibGVyLmJ1ZmZlcigpLmNvZGVT
aXplKCk7CiAKLSAgICBtX3Nsb3dQYXRoSnVtcCA9IFByb3BlcnR5QWNjZXNzU2lkZUlubGluZUNh
Y2hlOjpnZW5lcmF0ZUNhbGxzaXRlKGppdCwgcHJvcGVydHlOYW1lLAotICAgICAgICBtX3N0dWJJ
bmZvLCBtX3N0dWJJbmZvLT5iYXNlR1BSLCBtX3N0dWJJbmZvLT52YWx1ZUdQUiwgbV9zdHViSW5m
by0+dXNlZFJlZ2lzdGVycyk7CisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCB0b0RvbmU7Cisg
ICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCB0b1Nsb3dwYXRoOworICAgIFByb3BlcnR5QWNjZXNz
U2lkZUlubGluZUNhY2hlOjpnZW5lcmF0ZUNhbGxzaXRlKGppdCwgcHJvcGVydHlOYW1lLAorICAg
ICAgICBtX3N0dWJJbmZvLCBtX3N0dWJJbmZvLT5iYXNlR1BSLCBtX3N0dWJJbmZvLT52YWx1ZUdQ
UiwgbV9zdHViSW5mby0+dXNlZFJlZ2lzdGVycywKKyAgICAgICAgdG9Eb25lLCB0b1Nsb3dwYXRo
KTsKKyAgICAKKyAgICAvLyBUT0RPCiAKICAgICBzaXplX3QganVtcFNpemUgPSBqaXQubV9hc3Nl
bWJsZXIuYnVmZmVyKCkuY29kZVNpemUoKSAtIHN0YXJ0U2l6ZTsKICAgICBpZiAoaW5saW5lSUNT
aXplID49IGp1bXBTaXplKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVE9wZXJhdGlvbnMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRp
b25zLmNwcAppbmRleCBhMjcxMTkwNDFjMWIuLjFlYTgyODQ5MjZhYyAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCkBAIC0yODYsMTEgKzI4NiwxNCBAQCBK
U0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uR2V0QnlJZCwgRW5jb2RlZEpTVmFsdWUs
IChKU0dsb2JhbE9iamVjdCogZ2xvYgogICAgIFByb3BlcnR5U2xvdCBzbG90KGJhc2VWYWx1ZSwg
UHJvcGVydHlTbG90OjpJbnRlcm5hbE1ldGhvZFR5cGU6OkdldCk7CiAgICAgQ2FjaGVhYmxlSWRl
bnRpZmllciBpZGVudGlmaWVyID0gQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbVJhd0Jp
dHMocmF3Q2FjaGVhYmxlSWRlbnRpZmllcik7CiAgICAgSWRlbnRpZmllciBpZGVudCA9IElkZW50
aWZpZXI6OmZyb21VaWQodm0sIGlkZW50aWZpZXIudWlkKCkpOwotICAgIEpTVmFsdWUgcmVzdWx0
ID0gYmFzZVZhbHVlLmdldChnbG9iYWxPYmplY3QsIGlkZW50LCBzbG90KTsKKyAgICAKKyAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGJhc2VWYWx1ZS5nZXRQcm9wZXJ0eVNsb3QoZ2xvYmFsT2Jq
ZWN0LCBpZGVudCwgWyZdIChib29sIGZvdW5kLCBQcm9wZXJ0eVNsb3QmIHNsb3QpIC0+IEpTVmFs
dWUgeworICAgICAgICBMT0dfSUMoKElDRXZlbnQ6Ok9wZXJhdGlvbkdldEJ5SWQsIGJhc2VWYWx1
ZS5jbGFzc0luZm9Pck51bGwodm0pLCBpZGVudCwgYmFzZVZhbHVlID09IHNsb3Quc2xvdEJhc2Uo
KSkpOwogCi0gICAgTE9HX0lDKChJQ0V2ZW50OjpPcGVyYXRpb25HZXRCeUlkLCBiYXNlVmFsdWUu
Y2xhc3NJbmZvT3JOdWxsKHZtKSwgaWRlbnQsIGJhc2VWYWx1ZSA9PSBzbG90LnNsb3RCYXNlKCkp
KTsKKyAgICAgICAgdm0uaGVhcC5wcm9wZXJ0eUFjY2Vzc1NpZGVJbmxpbmVDYWNoZSgpLm9ic2Vy
dmVTdHJ1Y3R1cmVHZXRCeUlkKGZvdW5kLCBiYXNlVmFsdWUsIGlkZW50aWZpZXIsIHNsb3QsIHN0
dWJJbmZvKTsKIAotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICAgICAg
cmV0dXJuIGZvdW5kID8gc2xvdC5nZXRWYWx1ZShnbG9iYWxPYmplY3QsIGlkZW50KSA6IGpzVW5k
ZWZpbmVkKCk7CisgICAgfSkpOwogfQogCiBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0
aW9uR2V0QnlJZEdlbmVyaWMsIEVuY29kZWRKU1ZhbHVlLCAoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgYmFzZSwgdWludHB0cl90IHJhd0NhY2hlYWJsZUlkZW50
aWZpZXIpKQpAQCAtMzMyLDcgKzMzNSw3IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVy
YXRpb25HZXRCeUlkT3B0aW1pemUsIEVuY29kZWRKU1ZhbHVlLCAoSlNHbG9iYWxPYmplCiAgICAg
ICAgIGlmIChzdHViSW5mby0+Y29uc2lkZXJDYWNoaW5nQnkodm0sIGNvZGVCbG9jaywgYmFzZVZh
bHVlLnN0cnVjdHVyZU9yTnVsbCh2bSksIGlkZW50aWZpZXIpKQogICAgICAgICAgICAgcmVwYXRj
aEdldEJ5KGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBiYXNlVmFsdWUsIGlkZW50aWZpZXIsIHNs
b3QsICpzdHViSW5mbywgR2V0QnlLaW5kOjpCeUlkKTsKIAotICAgICAgICB2bS5oZWFwLnByb3Bl
cnR5QWNjZXNzU2lkZUlubGluZUNhY2hlKCkub2JzZXJ2ZVN0cnVjdHVyZUdldEJ5SWQoZm91bmQs
IGJhc2VWYWx1ZSwgaWRlbnRpZmllciwgc2xvdCwgc3R1YkluZm8sIGNvZGVCbG9jayk7CisgICAg
ICAgIHZtLmhlYXAucHJvcGVydHlBY2Nlc3NTaWRlSW5saW5lQ2FjaGUoKS5vYnNlcnZlU3RydWN0
dXJlR2V0QnlJZChmb3VuZCwgYmFzZVZhbHVlLCBpZGVudGlmaWVyLCBzbG90LCBzdHViSW5mbyk7
CiAKICAgICAgICAgcmV0dXJuIGZvdW5kID8gc2xvdC5nZXRWYWx1ZShnbG9iYWxPYmplY3QsIGlk
ZW50KSA6IGpzVW5kZWZpbmVkKCk7CiAgICAgfSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9Qcm9wZXJ0eUFjY2Vzc1NpZGVJbmxpbmVDYWNoZS5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L1Byb3BlcnR5QWNjZXNzU2lkZUlubGluZUNhY2hlLmNwcAppbmRl
eCBiMjA2YmMyNDY2MzYuLjFhN2ZlNjU3ZDAzZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9Qcm9wZXJ0eUFjY2Vzc1NpZGVJbmxpbmVDYWNoZS5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9Qcm9wZXJ0eUFjY2Vzc1NpZGVJbmxpbmVDYWNoZS5jcHAKQEAg
LTQ3LDEwICs0NywxMCBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIG5hbWVzcGFjZSBTaWRlQWNjZXNz
Q2FjaGVJbnRlcm5hbCB7Ci1zdGF0aWMgY29uc3RleHByIGJvb2wgdmVyYm9zZSA9IHRydWU7Ci1z
dGF0aWMgY29uc3RleHByIHVpbnQ4X3Qgc2tpcHBlZENhbGxzaXRlQ291bnRkb3duTWF4ID0gNDsK
K3N0YXRpYyBjb25zdGV4cHIgYm9vbCB2ZXJib3NlID0gZmFsc2U7CiBzdGF0aWMgY29uc3RleHBy
IHVpbnQzMl90IHJlcGF0Y2hCdWZmZXJpbmdDb3VudGRvd24gPSA4Owotc3RhdGljIGNvbnN0ZXhw
ciB1aW50MzJfdCBtYXhBY2Nlc3NWYXJpYW50TGlzdFNpemUgPSAzMjsKK3N0YXRpYyBjb25zdGV4
cHIgdWludDMyX3QgbWF4VmFyaWFudHNGb3JTdHJ1Y3R1cmUgPSA4Oworc3RhdGljIGNvbnN0ZXhw
ciB1aW50MzJfdCBtYXhWYXJpYW50c0ZvckNhbGxzaXRlID0gNjQ7CiB9CiAKIHN0cnVjdCBTaWRl
QWNjZXNzR2VuZXJhdGlvblN0YXRlIHsKQEAgLTEyMSwxMiArMTIxLDE0IEBAIHB1YmxpYzoKICAg
ICAgICAgb3V0LnByaW50KGNvbW1hLCAiaWRlbnQgPSAnIiwgbV9pZGVudGlmaWVyLCAiJygiLCBS
YXdQb2ludGVyKG1faWRlbnRpZmllci51aWQoKSksICIpIik7CiAgICAgICAgIGlmIChpc1ZhbGlk
T2Zmc2V0KG1fb2Zmc2V0KSkKICAgICAgICAgICAgIG91dC5wcmludChjb21tYSwgIm9mZnNldCA9
ICIsIG1fb2Zmc2V0KTsKLSAgICAgICAgb3V0LnByaW50KGNvbW1hLCAic3RydWN0dXJlSUQgPSAi
LCBSYXdQb2ludGVyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KG1fc3RydWN0dXJlSUQpKSk7Cisg
ICAgICAgIG91dC5wcmludChjb21tYSwgInN0cnVjdHVyZUlEID0gIiwgUmF3UG9pbnRlcihyZWlu
dGVycHJldF9jYXN0PHZvaWQqPihtX3N0cnVjdHVyZUlEKSksICIoIiwgbV9zdHJ1Y3R1cmVJRCwg
IikiKTsKICAgICAgICAgb3V0LnByaW50KCIgfSIpOwogICAgIH0KIAogICAgIHZvaWQgZ2VuZXJh
dGUoU2lkZUFjY2Vzc0dlbmVyYXRpb25TdGF0ZSYgc3RhdGUpCiAgICAgeworICAgICAgICBtX3N0
YXRlID0gU2lkZUFjY2Vzc1N0YXRlOjpHZW5lcmF0ZWQ7CisgICAgICAgIAogICAgICAgICBHUFJS
ZWcgc3RvcmFnZUdQUjsKICAgICAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KG1fb2Zmc2V0KSkKICAg
ICAgICAgICAgIHN0b3JhZ2VHUFIgPSBTaWRlUHJvcGVydHlBY2Nlc3NSZWdpc3RlcnM6OmJhc2U7
CkBAIC0yNDMsNyArMjQ1LDcgQEAgQWNjZXNzR2VuZXJhdGlvblJlc3VsdCByZWdlbmVyYXRlKGNv
bnN0IEdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlciYsIFZNJiB2bSwgSlNHbG8KICAgICAgICAgICAg
IG1fbGlzdC5zaHJpbmtUb0ZpdCgpOwogCiAgICAgICAgICAgICBBY2Nlc3NHZW5lcmF0aW9uUmVz
dWx0OjpLaW5kIHJlc3VsdEtpbmQ7Ci0gICAgICAgICAgICBpZiAobV9saXN0LnNpemUoKSA+PSBT
aWRlQWNjZXNzQ2FjaGVJbnRlcm5hbDo6bWF4QWNjZXNzVmFyaWFudExpc3RTaXplIHx8IGdlbmVy
YXRlZEZpbmFsQ29kZSkKKyAgICAgICAgICAgIGlmIChtX2xpc3Quc2l6ZSgpID49IFNpZGVBY2Nl
c3NDYWNoZUludGVybmFsOjptYXhWYXJpYW50c0ZvclN0cnVjdHVyZSB8fCBnZW5lcmF0ZWRGaW5h
bENvZGUpCiAgICAgICAgICAgICAgICAgcmVzdWx0S2luZCA9IEFjY2Vzc0dlbmVyYXRpb25SZXN1
bHQ6OkdlbmVyYXRlZEZpbmFsQ29kZTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAg
ICByZXN1bHRLaW5kID0gQWNjZXNzR2VuZXJhdGlvblJlc3VsdDo6R2VuZXJhdGVkTmV3Q29kZTsK
QEAgLTI1OSw3ICsyNjEsNyBAQCBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0IHJlZ2VuZXJhdGUoY29u
c3QgR0NTYWZlQ29uY3VycmVudEpTTG9ja2VyJiwgVk0mIHZtLCBKU0dsbwogICAgICAgICAgICAg
Y29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gU2lkZVByb3BlcnR5QWNjZXNzUmVnaXN0ZXJzOjpi
YXNlOwogICAgICAgICAgICAgY29uc3RleHByIEdQUlJlZyByZXN1bHRHUFIgPSBTaWRlUHJvcGVy
dHlBY2Nlc3NSZWdpc3RlcnM6OnJlc3VsdDsKICAgICAgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcg
cHJvcGVydHlHUFIgPSBTaWRlUHJvcGVydHlBY2Nlc3NSZWdpc3RlcnM6OnByb3BlcnR5OwotICAg
ICAgICAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IFNpZGVQcm9wZXJ0eUFjY2Vz
c1JlZ2lzdGVyczo6c3R1YkluZm87CisvLyAgICAgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1
YkluZm9HUFIgPSBTaWRlUHJvcGVydHlBY2Nlc3NSZWdpc3RlcnM6OnN0dWJJbmZvOwogICAgICAg
ICAgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoR1BSID0gU2lkZVByb3BlcnR5QWNjZXNzUmVn
aXN0ZXJzOjpzY3JhdGNoOwogCiAgICAgICAgICAgICBBU1NFUlQoIWNhc2VzLmlzRW1wdHkoKSk7
CkBAIC0yNzAsMTcgKzI3Miw2IEBAIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQgcmVnZW5lcmF0ZShj
b25zdCBHQ1NhZmVDb25jdXJyZW50SlNMb2NrZXImLCBWTSYgdm0sIEpTR2xvCiAgICAgICAgICAg
ICBzdGF0ZS5zbG93UGF0aC5hcHBlbmQoCiAgICAgICAgICAgICAgICAgIGppdC5icmFuY2gzMihD
Q2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCBzY3JhdGNoR1BSLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJ
bW0zMihtX3N0cnVjdHVyZUlEKSkpOwogCi0gICAgICAgICAgICAvLyBMZXQgc29tZSBvZiB0aGUg
Y2FzZXMgZ28gdGhyb3VnaCB0aGUgY2FsbHNpdGUncyBzbG93IHBhdGgsIHNvIHRoYXQgaXQgY2Fu
IGNvbGxlY3QgcHJvZmlsaW5nCi0gICAgICAgICAgICAvLyBpbmZvcm1hdGlvbiB0b28uCi0gICAg
ICAgICAgICBqaXQueG9yNjQoc2NyYXRjaEdQUiwgc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICBq
aXQubG9hZDgoCi0gICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0dWJJbmZv
R1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTaWRlQWNjZXNzU2tpcHBlZENhbGxzaXRl
Q291bnRkb3duKCkpLAotICAgICAgICAgICAgICAgIHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAg
aml0LmFkZDMyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDEpLCBzY3JhdGNoR1BSKTsKLSAg
ICAgICAgICAgIGppdC5zdG9yZTgoc2NyYXRjaEdQUiwKLSAgICAgICAgICAgICAgICBDQ2FsbEhl
bHBlcnM6OkFkZHJlc3Moc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNp
ZGVBY2Nlc3NTa2lwcGVkQ2FsbHNpdGVDb3VudGRvd24oKSkpOwotICAgICAgICAgICAgc3RhdGUu
c2xvd1BhdGguYXBwZW5kKGppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6OkFib3ZlT3JFcXVhbCwg
c2NyYXRjaEdQUiwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoU2lkZUFjY2Vzc0NhY2hlSW50
ZXJuYWw6OnNraXBwZWRDYWxsc2l0ZUNvdW50ZG93bk1heCkpKTsKLQogICAgICAgICAgICAgVmVj
dG9yPGludDY0X3Q+IGNhc2VWYWx1ZXMoY2FzZXMuc2l6ZSgpKTsKICAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBjYXNlcy5zaXplKCk7ICsraSkKICAgICAgICAgICAgICAgICBj
YXNlVmFsdWVzW2ldID0gY2FzZXNbaV0tPm1faWRlbnRpZmllci5yYXdCaXRzKCk7CkBAIC0yODks
NiArMjgwLDcgQEAgQWNjZXNzR2VuZXJhdGlvblJlc3VsdCByZWdlbmVyYXRlKGNvbnN0IEdDU2Fm
ZUNvbmN1cnJlbnRKU0xvY2tlciYsIFZNJiB2bSwgSlNHbG8KICAgICAgICAgICAgIHdoaWxlIChi
aW5hcnlTd2l0Y2guYWR2YW5jZShqaXQpKQogICAgICAgICAgICAgICAgIGNhc2VzW2JpbmFyeVN3
aXRjaC5jYXNlSW5kZXgoKV0tPmdlbmVyYXRlKHN0YXRlKTsKICAgICAgICAgICAgIHN0YXRlLnNs
b3dQYXRoLmFwcGVuZChiaW5hcnlTd2l0Y2guZmFsbFRocm91Z2goKSk7CisgICAgICAgICAgICBq
aXQuYnJlYWtwb2ludCgpOwogCiAgICAgICAgICAgICBzdGF0ZS5zdWNjZXNzLmxpbmsoJmppdCk7
CiAgICAgICAgICAgICBqaXQucmV0KCk7CkBAIC0zMzAsNiArMzIyLDE0IEBAIEFjY2Vzc0dlbmVy
YXRpb25SZXN1bHQgcmVnZW5lcmF0ZShjb25zdCBHQ1NhZmVDb25jdXJyZW50SlNMb2NrZXImLCBW
TSYgdm0sIEpTR2xvCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gQW5kIGlmIHRo
aXMgaXMgYSBuZXcgY2FzZQorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IG1f
bGlzdC5zaXplKCk7ICsraikgeworICAgICAgICAgICAgICAgIGlmIChtX2xpc3Rbal0tPmNhblJl
cGxhY2UoKm15Q2FzZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOworICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CiAKICAgICAgICAgICAgIGlmIChmb3VuZCkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKQEAg
LTMzNywxNyArMzM3LDE4IEBAIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQgcmVnZW5lcmF0ZShjb25z
dCBHQ1NhZmVDb25jdXJyZW50SlNMb2NrZXImLCBWTSYgdm0sIEpTR2xvCiAgICAgICAgICAgICBj
YXNlc1RvQWRkLmFwcGVuZChXVEZNb3ZlKG15Q2FzZSkpOwogICAgICAgICB9CiAKLSAgICAgICAg
ZGF0YUxvZ0xuSWYoU2lkZUFjY2Vzc0NhY2hlSW50ZXJuYWw6OnZlcmJvc2UsICJBZGRpbmcgY2Fz
ZXM6ICIsIGxpc3REdW1wKGNhc2VzVG9BZGQpKTsKLQotICAgICAgICBpZiAoY2FzZXNUb0FkZC5p
c0VtcHR5KCkpCisgICAgICAgIGlmIChidWZmZXJpbmdDb3VudGRvd24pCisgICAgICAgICAgICBi
dWZmZXJpbmdDb3VudGRvd24tLTsKKyAgICAgICAgCisgICAgICAgIGlmIChjYXNlc1RvQWRkLmlz
RW1wdHkoKSAmJiBidWZmZXJpbmdDb3VudGRvd24pCiAgICAgICAgICAgICByZXR1cm4gQWNjZXNz
R2VuZXJhdGlvblJlc3VsdDo6QnVmZmVyZWQ7CisgICAgICAgIAorICAgICAgICBkYXRhTG9nTG5J
ZihTaWRlQWNjZXNzQ2FjaGVJbnRlcm5hbDo6dmVyYm9zZSwgIkFkZGluZyBjYXNlczogIiwgbGlz
dER1bXAoY2FzZXNUb0FkZCkpOwogCiAgICAgICAgIGZvciAoYXV0byYgY2FzZVRvQWRkIDogY2Fz
ZXNUb0FkZCkgewogICAgICAgICAgICAgbV9saXN0LmFwcGVuZChXVEZNb3ZlKGNhc2VUb0FkZCkp
OwogICAgICAgICB9CiAKLSAgICAgICAgYnVmZmVyaW5nQ291bnRkb3duLS07Ci0KICAgICAgICAg
aWYgKGJ1ZmZlcmluZ0NvdW50ZG93bikKICAgICAgICAgICAgIHJldHVybiBBY2Nlc3NHZW5lcmF0
aW9uUmVzdWx0OjpCdWZmZXJlZDsKIApAQCAtNDA1LDYgKzQwNiw4IEBAIEFjY2Vzc0dlbmVyYXRp
b25SZXN1bHQgcmVnZW5lcmF0ZShjb25zdCBHQ1NhZmVDb25jdXJyZW50SlNMb2NrZXImLCBWTSYg
dm0sIEpTR2xvCiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQorICAgIAor
ICAgIHNpemVfdCBudW1WYXJpYW50cygpIGNvbnN0IHsgcmV0dXJuIG1fbGlzdC5zaXplKCk7IH0K
IAogICAgIFN0cnVjdHVyZUlEIG1fc3RydWN0dXJlSUQ7CiAgICAgVmVjdG9yPHN0ZDo6dW5pcXVl
X3B0cjxTaWRlQWNjZXNzQ2FzZT4+IG1fbGlzdDsKQEAgLTQyMywxOSArNDI2LDI1IEBAIFByb3Bl
cnR5QWNjZXNzU2lkZUlubGluZUNhY2hlOjp+UHJvcGVydHlBY2Nlc3NTaWRlSW5saW5lQ2FjaGUo
KQogfQogCiB2b2lkIFByb3BlcnR5QWNjZXNzU2lkZUlubGluZUNhY2hlOjpvYnNlcnZlU3RydWN0
dXJlR2V0QnlJZChib29sIGlzSGl0LCBjb25zdCBKU1ZhbHVlIGJhc2VWYWx1ZSwKLSAgICBjb25z
dCBDYWNoZWFibGVJZGVudGlmaWVyJiBpZGVudGlmaWVyLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNs
b3QsIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgQ29kZUJsb2NrKikKKyAgICBjb25zdCBD
YWNoZWFibGVJZGVudGlmaWVyJiBpZGVudGlmaWVyLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3Qs
IFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbykKIHsKICAgICBpZiAoIU9wdGlvbnM6OnVzZVBy
b3BlcnR5QWNjZXNzU2lkZUlDKCkpCiAgICAgICAgIHJldHVybjsKKyAgICBBU1NFUlRfVU5VU0VE
KHN0dWJJbmZvLCBzdHViSW5mbyk7CiAKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGJhc2VW
YWx1ZS5zdHJ1Y3R1cmVPck51bGwoKm1fdm0pOwogCiAgICAgaWYgKCFpc0hpdCB8fCAhc3RydWN0
dXJlIHx8IGJhc2VWYWx1ZSAhPSBzbG90LnNsb3RCYXNlKCkgfHwgIXNsb3QuaXNDYWNoZWFibGUo
KSkKICAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKHN0dWJJbmZvLT5zaWRlQWNjZXNzU2tpcHBl
ZENhbGxzaXRlQ291bnRkb3duID49IFNpZGVBY2Nlc3NDYWNoZUludGVybmFsOjpza2lwcGVkQ2Fs
bHNpdGVDb3VudGRvd25NYXgpIHsKLSAgICAgICAgZGF0YUxvZ0xuSWYoU2lkZUFjY2Vzc0NhY2hl
SW50ZXJuYWw6OnZlcmJvc2UsICJTYW1wbGluZyBzbG93IHBhdGggdG8gbGV0IGNhbGxzaXRlIGNv
bGxlY3QgaW5mbyAiLCBpZGVudGlmaWVyKTsKLSAgICAgICAgc3R1YkluZm8tPnNpZGVBY2Nlc3NT
a2lwcGVkQ2FsbHNpdGVDb3VudGRvd24gPSAwOworICAgIAorICAgIGlmIChzdHViSW5mby0+c2Vl
blN0cnVjdHVyZXNDb3VudCA+IFNpZGVBY2Nlc3NDYWNoZUludGVybmFsOjptYXhWYXJpYW50c0Zv
ckNhbGxzaXRlKSB7CisgICAgICAgIGlmIChTaWRlQWNjZXNzQ2FjaGVJbnRlcm5hbDo6dmVyYm9z
ZQorICAgICAgICAgICAgJiYgc3R1YkluZm8tPnNlZW5TdHJ1Y3R1cmVzQ291bnQgPT0gU2lkZUFj
Y2Vzc0NhY2hlSW50ZXJuYWw6Om1heFZhcmlhbnRzRm9yQ2FsbHNpdGUgKyAxKSB7CisgICAgICAg
ICAgICArK3N0dWJJbmZvLT5zZWVuU3RydWN0dXJlc0NvdW50OworICAgICAgICAgICAgZGF0YUxv
Z0xuKCJCbG93biBvdXQgc2lkZSBpYyBjYWNoZSBmb3IgY2FsbHNpdGUgd2l0aCBzdHViIGluZm8g
IiwgUmF3UG9pbnRlcihzdHViSW5mbyksICIgYW5kIGlkZW50aWZpZXIgIiwgaWRlbnRpZmllcik7
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAo
IW1fc2VlblN0cnVjdHVyZXMuY29udGFpbnMoc3RydWN0dXJlLT5pZCgpKSkKQEAgLTQ1OSw3ICs0
NjgsOCBAQCB2b2lkIFByb3BlcnR5QWNjZXNzU2lkZUlubGluZUNhY2hlOjpvYnNlcnZlU3RydWN0
dXJlR2V0QnlJZChib29sIGlzSGl0LCBjb25zdCBKUwogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICB9CiAgICAgfQotCisgICAgCisgICAgYXV0byBudW1WYXJpYW50cyA9IGdyb3VwLm51bVZh
cmlhbnRzKCk7CiAgICAgYXV0byByZXN1bHQgPSBncm91cC50cnlDYWNoZUdldEJ5SWQoc3RydWN0
dXJlLT5nbG9iYWxPYmplY3QoKSwgc3RydWN0dXJlLCBiYXNlVmFsdWUuYXNDZWxsKCksIGlkZW50
aWZpZXIsIHNsb3QpOwogCiAgICAgaWYgKHJlc3VsdC5nZW5lcmF0ZWRTb21lQ29kZSgpKSB7CkBA
IC00NjksNiArNDc5LDggQEAgdm9pZCBQcm9wZXJ0eUFjY2Vzc1NpZGVJbmxpbmVDYWNoZTo6b2Jz
ZXJ2ZVN0cnVjdHVyZUdldEJ5SWQoYm9vbCBpc0hpdCwgY29uc3QgSlMKICAgICAgICAgZGF0YUxv
Z0xuSWYoU2lkZUFjY2Vzc0NhY2hlSW50ZXJuYWw6OnZlcmJvc2UsICJTaG91bGQgZ2l2ZSB1cCBv
biAiLCBpZGVudGlmaWVyLCAiIG9uICIsIFJhd1BvaW50ZXIoc3RydWN0dXJlKSk7CiAgICAgICAg
IG1fZ2V0QnlJZEp1bXBUYWJsZVtidWNrZXRGb3Ioc3RydWN0dXJlLT5pZCgpKV0gPSBudWxscHRy
OwogICAgIH0KKyAgICAKKyAgICBzdHViSW5mby0+c2VlblN0cnVjdHVyZXNDb3VudCArPSBncm91
cC5udW1WYXJpYW50cygpIC0gbnVtVmFyaWFudHM7CiB9CiAKIGJvb2wgUHJvcGVydHlBY2Nlc3NT
aWRlSW5saW5lQ2FjaGU6OnZpc2l0V2VhayhWTSYgdm0pCkBAIC00ODYsOCArNDk4LDkgQEAgYm9v
bCBQcm9wZXJ0eUFjY2Vzc1NpZGVJbmxpbmVDYWNoZTo6dmlzaXRXZWFrKFZNJiB2bSkKICAgICBy
ZXR1cm4gZGVhZFN0cnVjdHVyZXMuaXNFbXB0eSgpOwogfQogCi1NYWNyb0Fzc2VtYmxlcjo6SnVt
cCBQcm9wZXJ0eUFjY2Vzc1NpZGVJbmxpbmVDYWNoZTo6Z2VuZXJhdGVDYWxsc2l0ZShDQ2FsbEhl
bHBlcnMmIGppdCwgQ2FjaGVhYmxlSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUsCi0gICAgU3RydWN0
dXJlU3R1YkluZm8qIGNhbGxzaXRlU3R1YkluZm8sIEdQUlJlZyBvcmlnaW5hbEJhc2UsIEdQUlJl
ZyBvcmlnaW5hbFJlc3VsdCwgUmVnaXN0ZXJTZXQgbXVzdFByZXNlcnZlKQordm9pZCBQcm9wZXJ0
eUFjY2Vzc1NpZGVJbmxpbmVDYWNoZTo6Z2VuZXJhdGVDYWxsc2l0ZShDQ2FsbEhlbHBlcnMmIGpp
dCwgQ2FjaGVhYmxlSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUsCisgICAgU3RydWN0dXJlU3R1Yklu
Zm8qIGNhbGxzaXRlU3R1YkluZm8sIEdQUlJlZyBvcmlnaW5hbEJhc2UsIEdQUlJlZyBvcmlnaW5h
bFJlc3VsdCwgUmVnaXN0ZXJTZXQgbXVzdFByZXNlcnZlLAorICAgIE1hY3JvQXNzZW1ibGVyOjpK
dW1wTGlzdCYgdG9Eb25lLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QmIHRvU2xvd3BhdGgpCiB7
CiAgICAgUkVMRUFTRV9BU1NFUlQoT3B0aW9uczo6dXNlUHJvcGVydHlBY2Nlc3NTaWRlSUMoKSk7
CiAgICAgQVNTRVJUKHByb3BlcnR5TmFtZSk7CkBAIC00OTksOCArNTEyLDYgQEAgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXAgUHJvcGVydHlBY2Nlc3NTaWRlSW5saW5lQ2FjaGU6OmdlbmVyYXRlQ2FsbHNp
dGUoQ0NhbGxIZWxwZXIKIAogICAgIGF1dG8mIHZtID0gaml0LnZtKCk7CiAgICAgYXV0byogc2lk
ZUlDVGFibGUgPSB2bS5oZWFwLnByb3BlcnR5QWNjZXNzU2lkZUlubGluZUNhY2hlKCkuanVtcFRh
YmxlKCk7Ci0gICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBkb25lOwotICAgIENDYWxsSGVscGVy
czo6SnVtcExpc3Qgc2tpcElubGluZUFjY2VzczsKIAogICAgIEFTU0VSVChvcmlnaW5hbEJhc2Ug
IT0gSW52YWxpZEdQUlJlZyk7CiAgICAgQVNTRVJUKG9yaWdpbmFsUmVzdWx0ICE9IEludmFsaWRH
UFJSZWcpOwpAQCAtNTE4LDcgKzUyOSw3IEBAIE1hY3JvQXNzZW1ibGVyOjpKdW1wIFByb3BlcnR5
QWNjZXNzU2lkZUlubGluZUNhY2hlOjpnZW5lcmF0ZUNhbGxzaXRlKENDYWxsSGVscGVyCiAgICAg
aml0LmxzaGlmdDMyKENDYWxsSGVscGVyczo6SW1tMzIoMyksIHNjcmF0Y2gpOwogICAgIGppdC5h
ZGQ2NChDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW02NChyZWludGVycHJldF9jYXN0PHVpbnQ2NF90
PihzaWRlSUNUYWJsZSkpLCBzY3JhdGNoKTsKICAgICBqaXQubG9hZDY0KENDYWxsSGVscGVyczo6
QWRkcmVzcyhzY3JhdGNoKSwgc2NyYXRjaCk7Ci0gICAgc2tpcElubGluZUFjY2Vzcy5hcHBlbmQo
aml0LmJyYW5jaFRlc3QzMihDQ2FsbEhlbHBlcnM6Olplcm8sIHNjcmF0Y2gpKTsKKyAgICB0b1Ns
b3dwYXRoLmFwcGVuZChqaXQuYnJhbmNoVGVzdDMyKENDYWxsSGVscGVyczo6WmVybywgc2NyYXRj
aCkpOwogCiAgICAgewogICAgICAgICBSZWdpc3RlclNldCByZWdpc3RlcnNUb1ByZXNlcnZlOwpA
QCAtNTQzLDQyICs1NTQsMzcgQEAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgUHJvcGVydHlBY2Nlc3NT
aWRlSW5saW5lQ2FjaGU6OmdlbmVyYXRlQ2FsbHNpdGUoQ0NhbGxIZWxwZXIKICAgICAgICAgaml0
Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tNjQocHJvcGVydHlOYW1lLnJhd0JpdHMoKSks
IHByb3BlcnR5KTsKICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRy
KGNhbGxzaXRlU3R1YkluZm8pLCBzdHViSW5mbyk7CiAgICAgICAgIGppdC5jYWxsKHNjcmF0Y2gs
IEpJVFN0dWJSb3V0aW5lUHRyVGFnKTsKLSAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tNjQoMCksIHJlc3VsdCk7CiAgICAgICAgIGppdC5tb3ZlKHJlc3VsdCwgc2NyYXRj
aCk7CiAKICAgICAgICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjpyZXN0b3JlUmVnaXN0ZXJz
RnJvbVN0YWNrRm9yQ2FsbChqaXQsIHJlZ2lzdGVyc1RvUHJlc2VydmUsIFJlZ2lzdGVyU2V0KCks
IG51bWJlck9mU3RhY2tCeXRlc1VzZWRGb3JSZWdpc3RlclByZXNlcnZhdGlvbiwgZXh0cmFQYWRk
aW5nQnl0ZXMpOwogCi0gICAgICAgIHNraXBJbmxpbmVBY2Nlc3MuYXBwZW5kKGppdC5icmFuY2hU
ZXN0MzIoQ0NhbGxIZWxwZXJzOjpaZXJvLCBzY3JhdGNoKSk7CisgICAgICAgIHRvU2xvd3BhdGgu
YXBwZW5kKGppdC5icmFuY2hUZXN0MzIoQ0NhbGxIZWxwZXJzOjpaZXJvLCBzY3JhdGNoKSk7CiAg
ICAgICAgIGppdC5tb3ZlKHNjcmF0Y2gsIG9yaWdpbmFsUmVzdWx0KTsKLSAgICAgICAgZG9uZS5h
cHBlbmQoaml0Lmp1bXAoKSk7CisgICAgICAgIHRvRG9uZS5hcHBlbmQoaml0Lmp1bXAoKSk7CiAg
ICAgfQotCi0gICAgc2tpcElubGluZUFjY2Vzcy5saW5rKCZqaXQpOwotICAgIGF1dG8gc2xvd1Bh
dGhKdW1wID0gaml0Lmp1bXAoKTsKLSAgICBkb25lLmxpbmsoJmppdCk7Ci0KLSAgICByZXR1cm4g
c2xvd1BhdGhKdW1wOwogfQogCi1GdW5jdGlvblB0cjxKSVRTdHViUm91dGluZVB0clRhZz4gUHJv
cGVydHlBY2Nlc3NTaWRlSW5saW5lQ2FjaGU6Om1ha2VDYWxsc2l0ZVRodW5rKENvZGVCbG9jayog
Y2FsbHNpdGUsIENhY2hlYWJsZUlkZW50aWZpZXIgcHJvcGVydHlOYW1lLCBTdHJ1Y3R1cmVTdHVi
SW5mbyogY2FsbHNpdGVTdHViSW5mbykKK3N0ZDo6b3B0aW9uYWw8Q29kZUxvY2F0aW9uTGFiZWw8
SklUU3R1YlJvdXRpbmVQdHJUYWc+PiBQcm9wZXJ0eUFjY2Vzc1NpZGVJbmxpbmVDYWNoZTo6bWFr
ZUNhbGxzaXRlVGh1bmsoQ29kZUJsb2NrKiBjYWxsc2l0ZSwgQ2FjaGVhYmxlSWRlbnRpZmllciBw
cm9wZXJ0eU5hbWUsIFN0cnVjdHVyZVN0dWJJbmZvKiBjYWxsc2l0ZVN0dWJJbmZvKQogeworICAg
IGRhdGFMb2dMbklmKFNpZGVBY2Nlc3NDYWNoZUludGVybmFsOjp2ZXJib3NlLCAiTWFraW5nIGNh
bGxzaXRlIHRodW5rIGZvciAiLCBwcm9wZXJ0eU5hbWUpOwogICAgIENDYWxsSGVscGVycyBqaXQo
Y2FsbHNpdGUpOwogICAgIGF1dG8mIHZtID0gaml0LnZtKCk7CiAgICAgaml0LnRhZ1JldHVybkFk
ZHJlc3MoKTsKICAgICAKLSAgICBhdXRvIHNsb3dQYXRoSnVtcCA9IFByb3BlcnR5QWNjZXNzU2lk
ZUlubGluZUNhY2hlOjpnZW5lcmF0ZUNhbGxzaXRlKGppdCwgcHJvcGVydHlOYW1lLAotICAgICAg
ICBjYWxsc2l0ZVN0dWJJbmZvLCBjYWxsc2l0ZVN0dWJJbmZvLT5iYXNlR1BSLCBjYWxsc2l0ZVN0
dWJJbmZvLT52YWx1ZUdQUiwgY2FsbHNpdGVTdHViSW5mby0+dXNlZFJlZ2lzdGVycyk7CisgICAg
Q0NhbGxIZWxwZXJzOjpKdW1wTGlzdCB0b0RvbmU7CisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlz
dCB0b1Nsb3dwYXRoOwogICAgIAotICAgIGppdC5yZXQoKTsKLSAgICBqaXQuYnJlYWtwb2ludCgp
OworICAgIFByb3BlcnR5QWNjZXNzU2lkZUlubGluZUNhY2hlOjpnZW5lcmF0ZUNhbGxzaXRlKGpp
dCwgcHJvcGVydHlOYW1lLAorICAgICAgICBjYWxsc2l0ZVN0dWJJbmZvLCBjYWxsc2l0ZVN0dWJJ
bmZvLT5iYXNlR1BSLCBjYWxsc2l0ZVN0dWJJbmZvLT52YWx1ZUdQUiwgY2FsbHNpdGVTdHViSW5m
by0+dXNlZFJlZ2lzdGVycywKKyAgICAgICAgdG9Eb25lLCB0b1Nsb3dwYXRoKTsKIAogICAgIExp
bmtCdWZmZXIgbGlua0J1ZmZlcihqaXQsIG51bGxwdHIsIExpbmtCdWZmZXI6OlByb2ZpbGU6Oklu
bGluZUNhY2hlLCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOwogICAgIGlmIChsaW5rQnVmZmVyLmRp
ZEZhaWxUb0FsbG9jYXRlKCkpIHsKICAgICAgICAgZGF0YUxvZ0xuSWYoU2lkZUFjY2Vzc0NhY2hl
SW50ZXJuYWw6OnZlcmJvc2UsICJEaWQgZmFpbCB0byBhbGxvY2F0ZS4iKTsKLSAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAgICAgfQotICAgIAot
ICAgIGxpbmtCdWZmZXIubGluayhzbG93UGF0aEp1bXAsIGNhbGxzaXRlU3R1YkluZm8tPnNsb3dQ
YXRoU3RhcnRMb2NhdGlvbik7CisgICAgbGlua0J1ZmZlci5saW5rKHRvU2xvd3BhdGgsIGNhbGxz
aXRlU3R1YkluZm8tPnNsb3dQYXRoU3RhcnRMb2NhdGlvbik7CisgICAgbGlua0J1ZmZlci5saW5r
KHRvRG9uZSwgY2FsbHNpdGVTdHViSW5mby0+ZG9uZUxvY2F0aW9uKTsKIAogICAgIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRTdHViUm91dGluZVB0clRhZz4gY29kZSA9IEZJTkFMSVpFX0NPREVf
Rk9SKAogICAgICAgICBudWxscHRyLCBsaW5rQnVmZmVyLCBKSVRTdHViUm91dGluZVB0clRhZywK
QEAgLTU4OCw3ICs1OTQsNyBAQCBGdW5jdGlvblB0cjxKSVRTdHViUm91dGluZVB0clRhZz4gUHJv
cGVydHlBY2Nlc3NTaWRlSW5saW5lQ2FjaGU6Om1ha2VDYWxsc2l0ZVRodQogICAgIHN0dWItPm1h
a2VHQ0F3YXJlKHZtKTsKICAgICBtX2NhbGxzaXRlcy5hcHBlbmQoc3RkOjptb3ZlKHN0dWIpKTsK
ICAgICAKLSAgICByZXR1cm4gRnVuY3Rpb25QdHI8SklUU3R1YlJvdXRpbmVQdHJUYWc+KGNvZGUu
Y29kZSgpKTsKKyAgICByZXR1cm4geyBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0
clRhZz4oY29kZS5jb2RlKCkpIH07CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Qcm9wZXJ0eUFjY2Vzc1NpZGVJbmxpbmVDYWNo
ZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Qcm9wZXJ0eUFjY2Vzc1NpZGVJbmxpbmVD
YWNoZS5oCmluZGV4IGQ1OTIwNmEzNWRiMS4uYThmZjNmYzE3MjY5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L1Byb3BlcnR5QWNjZXNzU2lkZUlubGluZUNhY2hlLmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Qcm9wZXJ0eUFjY2Vzc1NpZGVJbmxpbmVDYWNo
ZS5oCkBAIC01MSwxNiArNTEsMTcgQEAgcHVibGljOgogCiAgICAgdm9pZCBvYnNlcnZlU3RydWN0
dXJlR2V0QnlJZChib29sIGlzSGl0LCBjb25zdCBKU1ZhbHVlIGJhc2UsCiAgICAgICAgIGNvbnN0
IENhY2hlYWJsZUlkZW50aWZpZXImIGlkZW50aWZpZXIsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xv
dCwKLSAgICAgICAgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBDb2RlQmxvY2sqIGNvZGVC
bG9jayk7CisgICAgICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyk7CiAgICAgdm9pZCog
anVtcFRhYmxlKCkgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oJm1fZ2V0QnlJZEp1
bXBUYWJsZVswXSk7IH0KIAogICAgIGJvb2wgdmlzaXRXZWFrKFZNJik7CiAKICAgICBzdGF0aWMg
Y29uc3RleHByIHVpbnQzMl90IHN0cnVjdHVyZVRhYmxlTWFzayA9IDB4MDAwMDBGRjsKLSAgICBz
dGF0aWMgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZ2VuZXJhdGVDYWxsc2l0ZShDQ2FsbEhlbHBlcnMm
IGppdCwgQ2FjaGVhYmxlSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUsCi0gICAgICAgIFN0cnVjdHVy
ZVN0dWJJbmZvKiBjYWxsc2l0ZVN0dWJJbmZvLCBHUFJSZWcgb3JpZ2luYWxCYXNlLCBHUFJSZWcg
b3JpZ2luYWxSZXN1bHQsIFJlZ2lzdGVyU2V0IG11c3RQcmVzZXJ2ZSk7CisgICAgc3RhdGljIHZv
aWQgZ2VuZXJhdGVDYWxsc2l0ZShDQ2FsbEhlbHBlcnMmIGppdCwgQ2FjaGVhYmxlSWRlbnRpZmll
ciBwcm9wZXJ0eU5hbWUsCisgICAgICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBjYWxsc2l0ZVN0dWJJ
bmZvLCBHUFJSZWcgb3JpZ2luYWxCYXNlLCBHUFJSZWcgb3JpZ2luYWxSZXN1bHQsIFJlZ2lzdGVy
U2V0IG11c3RQcmVzZXJ2ZSwKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiB0b0Rv
bmUsIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCYgdG9TbG93cGF0aCk7CiAgICAgCi0gICAgRnVu
Y3Rpb25QdHI8SklUU3R1YlJvdXRpbmVQdHJUYWc+IG1ha2VDYWxsc2l0ZVRodW5rKENvZGVCbG9j
ayogY2FsbHNpdGUsIENhY2hlYWJsZUlkZW50aWZpZXIgcHJvcGVydHlOYW1lLCBTdHJ1Y3R1cmVT
dHViSW5mbyogY2FsbHNpdGVTdHViSW5mbyk7CisgICAgc3RkOjpvcHRpb25hbDxDb2RlTG9jYXRp
b25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4+IG1ha2VDYWxsc2l0ZVRodW5rKENvZGVCbG9j
ayogY2FsbHNpdGUsIENhY2hlYWJsZUlkZW50aWZpZXIgcHJvcGVydHlOYW1lLCBTdHJ1Y3R1cmVT
dHViSW5mbyogY2FsbHNpdGVTdHViSW5mbyk7CiBwcml2YXRlOgogICAgIFZNKiBtX3ZtOwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAppbmRleCA3MWNiMjM4MzQzZjUuLmI5ZjY0
NWM1NGQ5MiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCkBAIC00ODYsOSAr
NDg2LDkgQEAgdm9pZCByZXBhdGNoR2V0QnkoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
Q29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTVmFsdWUgYmEKICAgICAgICAgcmV0dXJuOwogICAgIAog
ICAgIENDYWxsSGVscGVyczo6ZW1pdEpJVENvZGVPdmVyKHN0dWJJbmZvLnN0YXJ0LnJldGFnZ2Vk
PEpTSW50ZXJuYWxQdHJUYWc+KCksIHNjb3BlZExhbWJkYTx2b2lkKENDYWxsSGVscGVycyYpPihb
Jl0oQ0NhbGxIZWxwZXJzJiBqaXQpIHsKLSAgICAgICAgYXV0byBjYWxsID0gaml0LmNhbGwoSklU
U3R1YlJvdXRpbmVQdHJUYWcpOworICAgICAgICBhdXRvIGp1bXAgPSBqaXQuanVtcCgpOwogICAg
ICAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAg
ICAgICAgICBsaW5rQnVmZmVyLmxpbmsoY2FsbCwgaWMucmV0YWdnZWQ8SklUU3R1YlJvdXRpbmVQ
dHJUYWc+KCkpOworICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKGp1bXAsICppYyk7CiAgICAg
ICAgIH0pOwogICAgIH0pLCAiU2lkZSBBY2Nlc3M6IGxpbmtpbmcgY29uc3RhbnQganVtcCB0byBp
YyB0aHVuayIpOwogfQotLSAKMi4zMC4xIChBcHBsZSBHaXQtMTMwKQoKCkZyb20gZmEyNzRhOWZj
ZjA3YWVhZTA0MzFjYjI1NmE1YTExNTg4OTU2NTZlZCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEK
RnJvbTogSnVzdGluIE1pY2hhdWQgPGp1c3Rpbl9taWNoYXVkQGFwcGxlLmNvbT4KRGF0ZTogV2Vk
LCAyMCBPY3QgMjAyMSAxNDoxNjo0MCAtMDcwMApTdWJqZWN0OiBbUEFUQ0ggMDkvMTddIC4KCi0t
LQogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcCB8IDIgLS0KIDEg
ZmlsZSBjaGFuZ2VkLCAyIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVE9wZXJhdGlvbnMuY3BwCmluZGV4IDFlYTgyODQ5MjZhYy4uZWFiZmQ3MzBjNTkzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKQEAgLTMzNSw4ICsz
MzUsNiBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uR2V0QnlJZE9wdGltaXpl
LCBFbmNvZGVkSlNWYWx1ZSwgKEpTR2xvYmFsT2JqZQogICAgICAgICBpZiAoc3R1YkluZm8tPmNv
bnNpZGVyQ2FjaGluZ0J5KHZtLCBjb2RlQmxvY2ssIGJhc2VWYWx1ZS5zdHJ1Y3R1cmVPck51bGwo
dm0pLCBpZGVudGlmaWVyKSkKICAgICAgICAgICAgIHJlcGF0Y2hHZXRCeShnbG9iYWxPYmplY3Qs
IGNvZGVCbG9jaywgYmFzZVZhbHVlLCBpZGVudGlmaWVyLCBzbG90LCAqc3R1YkluZm8sIEdldEJ5
S2luZDo6QnlJZCk7CiAKLSAgICAgICAgdm0uaGVhcC5wcm9wZXJ0eUFjY2Vzc1NpZGVJbmxpbmVD
YWNoZSgpLm9ic2VydmVTdHJ1Y3R1cmVHZXRCeUlkKGZvdW5kLCBiYXNlVmFsdWUsIGlkZW50aWZp
ZXIsIHNsb3QsIHN0dWJJbmZvKTsKLQogICAgICAgICByZXR1cm4gZm91bmQgPyBzbG90LmdldFZh
bHVlKGdsb2JhbE9iamVjdCwgaWRlbnQpIDoganNVbmRlZmluZWQoKTsKICAgICB9KSk7CiB9Ci0t
IAoyLjMwLjEgKEFwcGxlIEdpdC0xMzApCgoKRnJvbSBjZDBhNGVjZWNiYWI0NjI0NDgxMjMwMDJm
YzY2MmQ0ZjdlZTA4NDI2IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBKdXN0aW4gTWlj
aGF1ZCA8anVzdGluX21pY2hhdWRAYXBwbGUuY29tPgpEYXRlOiBXZWQsIDIwIE9jdCAyMDIxIDE1
OjQ5OjAyIC0wNzAwClN1YmplY3Q6IFtQQVRDSCAxMC8xN10gLgoKLS0tCiAuLi4vZ2V0LWJ5LWlk
LWJsb3dvdXQtc3RydWN0dXJlLWljLmpzICAgICAgICAgICAgICB8ICAyICstCiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwICAgICAgICB8IDE0ICsrKysrKystLS0t
LS0tCiAuLi4vaml0L1Byb3BlcnR5QWNjZXNzU2lkZUlubGluZUNhY2hlLmggICAgICAgICAgICB8
ICA0ICsrLS0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWUuaCAgICAg
ICAgIHwgIDEgKwogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1ZUlubGlu
ZXMuaCAgfCAxNCArKysrKysrKysrLS0tLQogNSBmaWxlcyBjaGFuZ2VkLCAyMSBpbnNlcnRpb25z
KCspLCAxNCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9KU1Rlc3RzL21pY3JvYmVuY2htYXJr
cy9nZXQtYnktaWQtYmxvd291dC1zdHJ1Y3R1cmUtaWMuanMgYi9KU1Rlc3RzL21pY3JvYmVuY2ht
YXJrcy9nZXQtYnktaWQtYmxvd291dC1zdHJ1Y3R1cmUtaWMuanMKaW5kZXggYTk3ODJkM2JhYTVi
Li40YTYyNDc2NmFkOGMgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvbWljcm9iZW5jaG1hcmtzL2dldC1i
eS1pZC1ibG93b3V0LXN0cnVjdHVyZS1pYy5qcworKysgYi9KU1Rlc3RzL21pY3JvYmVuY2htYXJr
cy9nZXQtYnktaWQtYmxvd291dC1zdHJ1Y3R1cmUtaWMuanMKQEAgLTE2LDcgKzE2LDcgQEAgZnVu
Y3Rpb24gY2hlY2sobywgZSkgewogICAgIGZvbzIobykKIH0KIAotZm9yICh2YXIgaSA9IDA7IGkg
PCAxZTU7ICsraSkgeworZm9yICh2YXIgaSA9IDA7IGkgPCAxZTc7ICsraSkgewogICAgIGNoZWNr
KHthOjg5LCBmOjF9LCAxKQogICAgIGNoZWNrKHtiOjg5LCBmOjJ9LCAyKQogICAgIGNoZWNrKHtj
Ojg5LCBmOjN9LCAzKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRP
cGVyYXRpb25zLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5j
cHAKaW5kZXggZWFiZmQ3MzBjNTkzLi4xNzhiZWQwN2IwMWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcApAQCAtMjg3LDEzICsyODcsMTMgQEAgSlNDX0RF
RklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkdldEJ5SWQsIEVuY29kZWRKU1ZhbHVlLCAoSlNH
bG9iYWxPYmplY3QqIGdsb2IKICAgICBDYWNoZWFibGVJZGVudGlmaWVyIGlkZW50aWZpZXIgPSBD
YWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tUmF3Qml0cyhyYXdDYWNoZWFibGVJZGVudGlm
aWVyKTsKICAgICBJZGVudGlmaWVyIGlkZW50ID0gSWRlbnRpZmllcjo6ZnJvbVVpZCh2bSwgaWRl
bnRpZmllci51aWQoKSk7CiAgICAgCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShiYXNlVmFs
dWUuZ2V0UHJvcGVydHlTbG90KGdsb2JhbE9iamVjdCwgaWRlbnQsIFsmXSAoYm9vbCBmb3VuZCwg
UHJvcGVydHlTbG90JiBzbG90KSAtPiBKU1ZhbHVlIHsKLSAgICAgICAgTE9HX0lDKChJQ0V2ZW50
OjpPcGVyYXRpb25HZXRCeUlkLCBiYXNlVmFsdWUuY2xhc3NJbmZvT3JOdWxsKHZtKSwgaWRlbnQs
IGJhc2VWYWx1ZSA9PSBzbG90LnNsb3RCYXNlKCkpKTsKLQotICAgICAgICB2bS5oZWFwLnByb3Bl
cnR5QWNjZXNzU2lkZUlubGluZUNhY2hlKCkub2JzZXJ2ZVN0cnVjdHVyZUdldEJ5SWQoZm91bmQs
IGJhc2VWYWx1ZSwgaWRlbnRpZmllciwgc2xvdCwgc3R1YkluZm8pOwotCi0gICAgICAgIHJldHVy
biBmb3VuZCA/IHNsb3QuZ2V0VmFsdWUoZ2xvYmFsT2JqZWN0LCBpZGVudCkgOiBqc1VuZGVmaW5l
ZCgpOwotICAgIH0pKTsKKyAgICBib29sIGZvdW5kID0gZmFsc2U7CisgICAgSlNWYWx1ZSByZXN1
bHQgPSBiYXNlVmFsdWUuZ2V0KGdsb2JhbE9iamVjdCwgaWRlbnQsIHNsb3QsIGZvdW5kKTsKKyAg
ICAKKyAgICBMT0dfSUMoKElDRXZlbnQ6Ok9wZXJhdGlvbkdldEJ5SWQsIGJhc2VWYWx1ZS5jbGFz
c0luZm9Pck51bGwodm0pLCBpZGVudCwgYmFzZVZhbHVlID09IHNsb3Quc2xvdEJhc2UoKSkpOwor
ICAgIHZtLmhlYXAucHJvcGVydHlBY2Nlc3NTaWRlSW5saW5lQ2FjaGUoKS5vYnNlcnZlU3RydWN0
dXJlR2V0QnlJZChmb3VuZCwgYmFzZVZhbHVlLCBpZGVudGlmaWVyLCBzbG90LCBzdHViSW5mbyk7
CisgICAgCisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogfQogCiBKU0NfREVG
SU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uR2V0QnlJZEdlbmVyaWMsIEVuY29kZWRKU1ZhbHVl
LCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgYmFzZSwgdWlu
dHB0cl90IHJhd0NhY2hlYWJsZUlkZW50aWZpZXIpKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9Qcm9wZXJ0eUFjY2Vzc1NpZGVJbmxpbmVDYWNoZS5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9Qcm9wZXJ0eUFjY2Vzc1NpZGVJbmxpbmVDYWNoZS5oCmluZGV4IGE4
ZmYzZmMxNzI2OS4uNzZiNTJkNWJiYjY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L1Byb3BlcnR5QWNjZXNzU2lkZUlubGluZUNhY2hlLmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9Qcm9wZXJ0eUFjY2Vzc1NpZGVJbmxpbmVDYWNoZS5oCkBAIC01Niw3ICs1
Niw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgdmlzaXRXZWFrKFZNJik7CiAKLSAgICBzdGF0aWMg
Y29uc3RleHByIHVpbnQzMl90IHN0cnVjdHVyZVRhYmxlTWFzayA9IDB4MDAwMDBGRjsKKyAgICBz
dGF0aWMgY29uc3RleHByIHVpbnQzMl90IHN0cnVjdHVyZVRhYmxlTWFzayA9IDB4MDAwMEZGRjsK
ICAgICBzdGF0aWMgdm9pZCBnZW5lcmF0ZUNhbGxzaXRlKENDYWxsSGVscGVycyYgaml0LCBDYWNo
ZWFibGVJZGVudGlmaWVyIHByb3BlcnR5TmFtZSwKICAgICAgICAgU3RydWN0dXJlU3R1YkluZm8q
IGNhbGxzaXRlU3R1YkluZm8sIEdQUlJlZyBvcmlnaW5hbEJhc2UsIEdQUlJlZyBvcmlnaW5hbFJl
c3VsdCwgUmVnaXN0ZXJTZXQgbXVzdFByZXNlcnZlLAogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
SnVtcExpc3QmIHRvRG9uZSwgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiB0b1Nsb3dwYXRoKTsK
QEAgLTY1LDcgKzY1LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBWTSogbV92bTsKIAotICAg
IHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IHN0cnVjdHVyZVRhYmxlRW50cmllcyA9IDE8PDg7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3Qgc3RydWN0dXJlVGFibGVFbnRyaWVzID0gMTw8MTI7
CiAgICAgc3RhdGljX2Fzc2VydCgoMHhGRkZGRkZGRiZzdHJ1Y3R1cmVUYWJsZU1hc2spICsgMSA9
PSBzdHJ1Y3R1cmVUYWJsZUVudHJpZXMpOwogICAgIHN0YXRpYyBpbmxpbmUgc2l6ZV90IGJ1Y2tl
dEZvcihTdHJ1Y3R1cmVJRCBzaWQpCiAgICAgewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1ZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNDSlNWYWx1ZS5oCmluZGV4IGIxZWE5ZGEwZmU0Yy4uNzJhMjRhY2VmM2EyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NKU1ZhbHVlLmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1ZS5oCkBAIC0zMTMsNiArMzEzLDcg
QEAgcHVibGljOgogICAgIC8vIE9iamVjdCBvcGVyYXRpb25zLCB3aXRoIHRoZSB0b09iamVjdCBv
cGVyYXRpb24gaW5jbHVkZWQuCiAgICAgSlNWYWx1ZSBnZXQoSlNHbG9iYWxPYmplY3QqLCBQcm9w
ZXJ0eU5hbWUpIGNvbnN0OwogICAgIEpTVmFsdWUgZ2V0KEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVy
dHlOYW1lLCBQcm9wZXJ0eVNsb3QmKSBjb25zdDsKKyAgICBKU1ZhbHVlIGdldChKU0dsb2JhbE9i
amVjdCosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiwgYm9vbCYgZm91bmQpIGNvbnN0Owog
ICAgIEpTVmFsdWUgZ2V0KEpTR2xvYmFsT2JqZWN0KiwgdW5zaWduZWQgcHJvcGVydHlOYW1lKSBj
b25zdDsKICAgICBKU1ZhbHVlIGdldChKU0dsb2JhbE9iamVjdCosIHVuc2lnbmVkIHByb3BlcnR5
TmFtZSwgUHJvcGVydHlTbG90JikgY29uc3Q7CiAgICAgSlNWYWx1ZSBnZXQoSlNHbG9iYWxPYmpl
Y3QqLCB1aW50NjRfdCBwcm9wZXJ0eU5hbWUpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1ZUlubGluZXMuaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWVJbmxpbmVzLmgKaW5kZXggMzRlYTIxNDYwYTBkLi4w
NjczNWFiNDRlNDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
Q0pTVmFsdWVJbmxpbmVzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlND
SlNWYWx1ZUlubGluZXMuaApAQCAtOTQwLDE2ICs5NDAsMjIgQEAgQUxXQVlTX0lOTElORSBKU1Zh
bHVlIEpTVmFsdWU6OmdldChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5h
bWUgcHIKICAgICByZXR1cm4gZ2V0KGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCBzbG90KTsK
IH0KIAotQUxXQVlTX0lOTElORSBKU1ZhbHVlIEpTVmFsdWU6OmdldChKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNs
b3QpIGNvbnN0CitBTFdBWVNfSU5MSU5FIEpTVmFsdWUgSlNWYWx1ZTo6Z2V0KEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xv
dCYgc2xvdCwgYm9vbCYgZm91bmQpIGNvbnN0CiB7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUoZ2V0Vk0oZ2xvYmFsT2JqZWN0KSk7Ci0gICAgYm9vbCBoYXNTbG90ID0gZ2V0
UHJvcGVydHlTbG90KGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCBzbG90KTsKLSAgICBFWENF
UFRJT05fQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSB8fCAhaGFzU2xvdCk7Ci0gICAgaWYgKCFo
YXNTbG90KQorICAgIGZvdW5kID0gZ2V0UHJvcGVydHlTbG90KGdsb2JhbE9iamVjdCwgcHJvcGVy
dHlOYW1lLCBzbG90KTsKKyAgICBFWENFUFRJT05fQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSB8
fCAhZm91bmQpOworICAgIGlmICghZm91bmQpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgc2xvdC5nZXRWYWx1ZShnbG9iYWxPYmpl
Y3QsIHByb3BlcnR5TmFtZSkpOwogfQogCitBTFdBWVNfSU5MSU5FIEpTVmFsdWUgSlNWYWx1ZTo6
Z2V0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5h
bWUsIFByb3BlcnR5U2xvdCYgc2xvdCkgY29uc3QKK3sKKyAgICBib29sIGZvdW5kID0gZmFsc2U7
CisgICAgcmV0dXJuIGdldChnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgc2xvdCwgZm91bmQp
OworfQorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDYWxsYmFja1doZW5Ob0V4Y2VwdGlvbj4KIEFMV0FZ
U19JTkxJTkUgdHlwZW5hbWUgc3RkOjpyZXN1bHRfb2Y8Q2FsbGJhY2tXaGVuTm9FeGNlcHRpb24o
Ym9vbCwgUHJvcGVydHlTbG90Jik+Ojp0eXBlIEpTVmFsdWU6OmdldFByb3BlcnR5U2xvdChKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBDYWxs
YmFja1doZW5Ob0V4Y2VwdGlvbiBjYWxsYmFjaykgY29uc3QKIHsKLS0gCjIuMzAuMSAoQXBwbGUg
R2l0LTEzMCkKCgpGcm9tIDkxMTE0MzFhNTI2YWViOGNjMWVlNzc0NWFkNTIxMWQ1MTdlNDg5YjMg
TW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCkZyb206IEp1c3RpbiBNaWNoYXVkIDxqdXN0aW5fbWlj
aGF1ZEBhcHBsZS5jb20+CkRhdGU6IFdlZCwgMjAgT2N0IDIwMjEgMTg6MTI6NTggLTA3MDAKU3Vi
amVjdDogW1BBVENIIDExLzE3XSAuCgotLS0KIC4uLi9qaXQvUHJvcGVydHlBY2Nlc3NTaWRlSW5s
aW5lQ2FjaGUuY3BwICAgICB8IDk1ICsrKysrKysrLS0tLS0tLS0tLS0KIC4uLi9qaXQvUHJvcGVy
dHlBY2Nlc3NTaWRlSW5saW5lQ2FjaGUuaCAgICAgICB8IDE4ICsrLS0KIDIgZmlsZXMgY2hhbmdl
ZCwgNTIgaW5zZXJ0aW9ucygrKSwgNjEgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9Qcm9wZXJ0eUFjY2Vzc1NpZGVJbmxpbmVDYWNoZS5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Byb3BlcnR5QWNjZXNzU2lkZUlubGluZUNhY2hlLmNw
cAppbmRleCAxYTdmZTY1N2QwM2UuLmJlOTkyYTczNjY5OCAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9Qcm9wZXJ0eUFjY2Vzc1NpZGVJbmxpbmVDYWNoZS5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Qcm9wZXJ0eUFjY2Vzc1NpZGVJbmxpbmVDYWNoZS5j
cHAKQEAgLTQ4LDggKzQ4LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAKIG5hbWVzcGFjZSBTaWRlQWNj
ZXNzQ2FjaGVJbnRlcm5hbCB7CiBzdGF0aWMgY29uc3RleHByIGJvb2wgdmVyYm9zZSA9IGZhbHNl
Owotc3RhdGljIGNvbnN0ZXhwciB1aW50MzJfdCByZXBhdGNoQnVmZmVyaW5nQ291bnRkb3duID0g
ODsKLXN0YXRpYyBjb25zdGV4cHIgdWludDMyX3QgbWF4VmFyaWFudHNGb3JTdHJ1Y3R1cmUgPSA4
Oworc3RhdGljIGNvbnN0ZXhwciB1aW50MzJfdCByZXBhdGNoQnVmZmVyaW5nQ291bnRkb3duID0g
MzI7CitzdGF0aWMgY29uc3RleHByIHVpbnQzMl90IG1heFZhcmlhbnRzRm9yR3JvdXAgPSAzMjsK
IHN0YXRpYyBjb25zdGV4cHIgdWludDMyX3QgbWF4VmFyaWFudHNGb3JDYWxsc2l0ZSA9IDY0Owog
fQogCkBAIC0xNjIsMjMgKzE2MiwxNyBAQCBjbGFzcyBTaWRlQWNjZXNzSklUU3R1YlJvdXRpbmU6
IHB1YmxpYyBHQ0F3YXJlSklUU3R1YlJvdXRpbmUgewogcHVibGljOgogICAgIHVzaW5nIEJhc2Ug
PSBHQ0F3YXJlSklUU3R1YlJvdXRpbmU7CiAKLSAgICBTaWRlQWNjZXNzSklUU3R1YlJvdXRpbmUo
Y29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiYgY29kZSwg
Vk0mLCBGaXhlZFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8U2lkZUFjY2Vzc0Nhc2U+PiYmIGNhc2Vz
KQorICAgIFNpZGVBY2Nlc3NKSVRTdHViUm91dGluZShjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8SklUU3R1YlJvdXRpbmVQdHJUYWc+JiBjb2RlLCBWTSYpCiAgICAgICAgIDogR0NBd2FyZUpJ
VFN0dWJSb3V0aW5lKGNvZGUpCi0gICAgICAgICwgbV9jYXNlcyhXVEZNb3ZlKGNhc2VzKSkKICAg
ICB7CiAgICAgfQotCi0gICAgY29uc3QgRml4ZWRWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPFNpZGVB
Y2Nlc3NDYXNlPj4mIGNhc2VzKCkgY29uc3QgeyByZXR1cm4gbV9jYXNlczsgfQotCi1wcml2YXRl
OgotICAgIEZpeGVkVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxTaWRlQWNjZXNzQ2FzZT4+IG1fY2Fz
ZXM7CiB9OwogCiBjbGFzcyBTaWRlQWNjZXNzQ2FzZUdyb3VwIHsKIHB1YmxpYzoKIAotICAgIFNp
ZGVBY2Nlc3NDYXNlR3JvdXAoU3RydWN0dXJlSUQgc3RydWN0dXJlKQotICAgICAgICA6IG1fc3Ry
dWN0dXJlSUQoc3RydWN0dXJlKQorICAgIFNpZGVBY2Nlc3NDYXNlR3JvdXAoUHJvcGVydHlBY2Nl
c3NTaWRlSW5saW5lQ2FjaGU6OlZhcmlhbnRLZXlUeXBlIGtleSkKKyAgICAgICAgOiBtX2tleShr
ZXkpCiAgICAgICAgICwgYnVmZmVyaW5nQ291bnRkb3duKFNpZGVBY2Nlc3NDYWNoZUludGVybmFs
OjpyZXBhdGNoQnVmZmVyaW5nQ291bnRkb3duKQogICAgIHsKICAgICB9CkBAIC0yNDUsNyArMjM5
LDcgQEAgQWNjZXNzR2VuZXJhdGlvblJlc3VsdCByZWdlbmVyYXRlKGNvbnN0IEdDU2FmZUNvbmN1
cnJlbnRKU0xvY2tlciYsIFZNJiB2bSwgSlNHbG8KICAgICAgICAgICAgIG1fbGlzdC5zaHJpbmtU
b0ZpdCgpOwogCiAgICAgICAgICAgICBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0OjpLaW5kIHJlc3Vs
dEtpbmQ7Ci0gICAgICAgICAgICBpZiAobV9saXN0LnNpemUoKSA+PSBTaWRlQWNjZXNzQ2FjaGVJ
bnRlcm5hbDo6bWF4VmFyaWFudHNGb3JTdHJ1Y3R1cmUgfHwgZ2VuZXJhdGVkRmluYWxDb2RlKQor
ICAgICAgICAgICAgaWYgKG1fbGlzdC5zaXplKCkgPj0gU2lkZUFjY2Vzc0NhY2hlSW50ZXJuYWw6
Om1heFZhcmlhbnRzRm9yR3JvdXAgfHwgZ2VuZXJhdGVkRmluYWxDb2RlKQogICAgICAgICAgICAg
ICAgIHJlc3VsdEtpbmQgPSBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0OjpHZW5lcmF0ZWRGaW5hbENv
ZGU7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgcmVzdWx0S2luZCA9IEFjY2Vz
c0dlbmVyYXRpb25SZXN1bHQ6OkdlbmVyYXRlZE5ld0NvZGU7CkBAIC0yNjAsNyArMjU0LDcgQEAg
QWNjZXNzR2VuZXJhdGlvblJlc3VsdCByZWdlbmVyYXRlKGNvbnN0IEdDU2FmZUNvbmN1cnJlbnRK
U0xvY2tlciYsIFZNJiB2bSwgSlNHbG8KICAgICAgICAgewogICAgICAgICAgICAgY29uc3RleHBy
IEdQUlJlZyBiYXNlR1BSID0gU2lkZVByb3BlcnR5QWNjZXNzUmVnaXN0ZXJzOjpiYXNlOwogICAg
ICAgICAgICAgY29uc3RleHByIEdQUlJlZyByZXN1bHRHUFIgPSBTaWRlUHJvcGVydHlBY2Nlc3NS
ZWdpc3RlcnM6OnJlc3VsdDsKLSAgICAgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlH
UFIgPSBTaWRlUHJvcGVydHlBY2Nlc3NSZWdpc3RlcnM6OnByb3BlcnR5OworLy8gICAgICAgICAg
ICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gU2lkZVByb3BlcnR5QWNjZXNzUmVnaXN0
ZXJzOjpwcm9wZXJ0eTsKIC8vICAgICAgICAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQ
UiA9IFNpZGVQcm9wZXJ0eUFjY2Vzc1JlZ2lzdGVyczo6c3R1YkluZm87CiAgICAgICAgICAgICBj
b25zdGV4cHIgR1BSUmVnIHNjcmF0Y2hHUFIgPSBTaWRlUHJvcGVydHlBY2Nlc3NSZWdpc3RlcnM6
OnNjcmF0Y2g7CiAKQEAgLTI2OSwxNCArMjYzLDEyIEBAIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQg
cmVnZW5lcmF0ZShjb25zdCBHQ1NhZmVDb25jdXJyZW50SlNMb2NrZXImLCBWTSYgdm0sIEpTR2xv
CiAgICAgICAgICAgICBqaXQubG9hZDMyKAogICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6
QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLAogICAgICAgICAg
ICAgICAgIHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgc3RhdGUuc2xvd1BhdGguYXBwZW5kKAot
ICAgICAgICAgICAgICAgICBqaXQuYnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwgc2Ny
YXRjaEdQUiwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIobV9zdHJ1Y3R1cmVJRCkpKTsKIAog
ICAgICAgICAgICAgVmVjdG9yPGludDY0X3Q+IGNhc2VWYWx1ZXMoY2FzZXMuc2l6ZSgpKTsKICAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjYXNlcy5zaXplKCk7ICsraSkKLSAg
ICAgICAgICAgICAgICBjYXNlVmFsdWVzW2ldID0gY2FzZXNbaV0tPm1faWRlbnRpZmllci5yYXdC
aXRzKCk7CisgICAgICAgICAgICAgICAgY2FzZVZhbHVlc1tpXSA9IGNhc2VzW2ldLT5tX3N0cnVj
dHVyZUlEOwogCi0gICAgICAgICAgICBCaW5hcnlTd2l0Y2ggYmluYXJ5U3dpdGNoKHByb3BlcnR5
R1BSLCBjYXNlVmFsdWVzLCBCaW5hcnlTd2l0Y2g6OkludFB0cik7CisgICAgICAgICAgICBCaW5h
cnlTd2l0Y2ggYmluYXJ5U3dpdGNoKHNjcmF0Y2hHUFIsIGNhc2VWYWx1ZXMsIEJpbmFyeVN3aXRj
aDo6SW50MzIpOwogICAgICAgICAgICAgd2hpbGUgKGJpbmFyeVN3aXRjaC5hZHZhbmNlKGppdCkp
CiAgICAgICAgICAgICAgICAgY2FzZXNbYmluYXJ5U3dpdGNoLmNhc2VJbmRleCgpXS0+Z2VuZXJh
dGUoc3RhdGUpOwogICAgICAgICAgICAgc3RhdGUuc2xvd1BhdGguYXBwZW5kKGJpbmFyeVN3aXRj
aC5mYWxsVGhyb3VnaCgpKTsKQEAgLTI5OCw5ICsyOTAsOSBAQCBBY2Nlc3NHZW5lcmF0aW9uUmVz
dWx0IHJlZ2VuZXJhdGUoY29uc3QgR0NTYWZlQ29uY3VycmVudEpTTG9ja2VyJiwgVk0mIHZtLCBK
U0dsbwogCiAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRTdHViUm91dGluZVB0clRh
Zz4gY29kZSA9IEZJTkFMSVpFX0NPREVfRk9SKAogICAgICAgICAgICAgbnVsbHB0ciwgbGlua0J1
ZmZlciwgSklUU3R1YlJvdXRpbmVQdHJUYWcsCi0gICAgICAgICAgICAiJXMiLCB0b0NTdHJpbmco
IlNpZGUgQWNjZXNzIHN0dWIgZm9yIFN0cnVjdHVyZSgiLCBtX3N0cnVjdHVyZUlELCAiKTogIiku
ZGF0YSgpKTsKKyAgICAgICAgICAgICIlcyIsIHRvQ1N0cmluZygiU2lkZSBBY2Nlc3Mgc3R1YiBm
b3IgKCIsIG1fa2V5LCAiKTogIikuZGF0YSgpKTsKIAotICAgICAgICBhdXRvIHN0dWIgPSBhZG9w
dFJlZigqbmV3IFNpZGVBY2Nlc3NKSVRTdHViUm91dGluZShjb2RlLCB2bSwgRml4ZWRWZWN0b3I8
c3RkOjp1bmlxdWVfcHRyPFNpZGVBY2Nlc3NDYXNlPj57IFdURk1vdmUoY2FzZXMpIH0pKTsKKyAg
ICAgICAgYXV0byBzdHViID0gYWRvcHRSZWYoKm5ldyBTaWRlQWNjZXNzSklUU3R1YlJvdXRpbmUo
Y29kZSwgdm0pKTsKICAgICAgICAgc3R1Yi0+bWFrZUdDQXdhcmUodm0pOwogCiAgICAgICAgIHJl
dHVybiBmaW5pc2hDb2RlR2VuZXJhdGlvbihXVEZNb3ZlKHN0dWIpKTsKQEAgLTM0Niw2ICszMzgs
NyBAQCBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0IHJlZ2VuZXJhdGUoY29uc3QgR0NTYWZlQ29uY3Vy
cmVudEpTTG9ja2VyJiwgVk0mIHZtLCBKU0dsbwogICAgICAgICBkYXRhTG9nTG5JZihTaWRlQWNj
ZXNzQ2FjaGVJbnRlcm5hbDo6dmVyYm9zZSwgIkFkZGluZyBjYXNlczogIiwgbGlzdER1bXAoY2Fz
ZXNUb0FkZCkpOwogCiAgICAgICAgIGZvciAoYXV0byYgY2FzZVRvQWRkIDogY2FzZXNUb0FkZCkg
eworICAgICAgICAgICAgQVNTRVJUKG1fa2V5ID09IGNhc2VUb0FkZC0+bV9pZGVudGlmaWVyLnVp
ZCgpKTsKICAgICAgICAgICAgIG1fbGlzdC5hcHBlbmQoV1RGTW92ZShjYXNlVG9BZGQpKTsKICAg
ICAgICAgfQogCkBAIC0zNjQsNyArMzU3LDcgQEAgQWNjZXNzR2VuZXJhdGlvblJlc3VsdCByZWdl
bmVyYXRlKGNvbnN0IEdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlciYsIFZNJiB2bSwgSlNHbG8KICAg
ICAgICAgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQogICAgIHsKICAgICAgICAgUkVMRUFTRV9B
U1NFUlQoT3B0aW9uczo6dXNlUHJvcGVydHlBY2Nlc3NTaWRlSUMoKSk7Ci0gICAgICAgIEFTU0VS
VChtX3N0cnVjdHVyZUlEID09IHN0cnVjdHVyZS0+aWQoKSk7CisgICAgICAgIEFTU0VSVChtX2tl
eSA9PSBwcm9wZXJ0eU5hbWUudWlkKCkpOwogICAgICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3Qt
PnZtKCk7CiAgICAgICAgIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQgcmVzdWx0OwogCkBAIC0zNzgs
NyArMzcxLDcgQEAgQWNjZXNzR2VuZXJhdGlvblJlc3VsdCByZWdlbmVyYXRlKGNvbnN0IEdDU2Fm
ZUNvbmN1cnJlbnRKU0xvY2tlciYsIFZNJiB2bSwgSlNHbG8KIAogICAgICAgICAgICAgUHJvcGVy
dHlPZmZzZXQgb2Zmc2V0ID0gc2xvdC5pc1Vuc2V0KCkgPyBpbnZhbGlkT2Zmc2V0IDogc2xvdC5j
YWNoZWRPZmZzZXQoKTsKICAgICAgICAgICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8U2lkZUFj
Y2Vzc0Nhc2U+PiBuZXdDYXNlczsKLSAgICAgICAgICAgIG5ld0Nhc2VzLmFwcGVuZChzdGQ6Om1h
a2VfdW5pcXVlPFNpZGVBY2Nlc3NDYXNlPihtX3N0cnVjdHVyZUlELCBwcm9wZXJ0eU5hbWUsIFNp
ZGVBY2Nlc3NDYXNlOjpIaXQsIG9mZnNldCkpOworICAgICAgICAgICAgbmV3Q2FzZXMuYXBwZW5k
KHN0ZDo6bWFrZV91bmlxdWU8U2lkZUFjY2Vzc0Nhc2U+KHN0cnVjdHVyZS0+aWQoKSwgcHJvcGVy
dHlOYW1lLCBTaWRlQWNjZXNzQ2FzZTo6SGl0LCBvZmZzZXQpKTsKIAogICAgICAgICAgICAgcmVz
dWx0ID0gYWRkQ2FzZXMobG9ja2VyLCB2bSwgZ2xvYmFsT2JqZWN0LCBXVEZNb3ZlKG5ld0Nhc2Vz
KSk7CiAKQEAgLTQwOSw4ICs0MDIsOSBAQCBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0IHJlZ2VuZXJh
dGUoY29uc3QgR0NTYWZlQ29uY3VycmVudEpTTG9ja2VyJiwgVk0mIHZtLCBKU0dsbwogICAgIAog
ICAgIHNpemVfdCBudW1WYXJpYW50cygpIGNvbnN0IHsgcmV0dXJuIG1fbGlzdC5zaXplKCk7IH0K
IAotICAgIFN0cnVjdHVyZUlEIG1fc3RydWN0dXJlSUQ7CisgICAgUHJvcGVydHlBY2Nlc3NTaWRl
SW5saW5lQ2FjaGU6OlZhcmlhbnRLZXlUeXBlIG1fa2V5OwogICAgIFZlY3RvcjxzdGQ6OnVuaXF1
ZV9wdHI8U2lkZUFjY2Vzc0Nhc2U+PiBtX2xpc3Q7CisgICAgYm9vbCBnZW5lcmF0ZWRGaW5hbENv
ZGUgeyBmYWxzZSB9OwogCiAgICAgdWludDhfdCBidWZmZXJpbmdDb3VudGRvd247CiAgICAgUmVm
UHRyPFNpZGVBY2Nlc3NKSVRTdHViUm91dGluZT4gbV9zdHViUm91dGluZTsKQEAgLTQ0NywxNSAr
NDQxLDE5IEBAIHZvaWQgUHJvcGVydHlBY2Nlc3NTaWRlSW5saW5lQ2FjaGU6Om9ic2VydmVTdHJ1
Y3R1cmVHZXRCeUlkKGJvb2wgaXNIaXQsIGNvbnN0IEpTCiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKLSAgICBpZiAoIW1fc2VlblN0cnVjdHVyZXMuY29udGFpbnMoc3RydWN0dXJlLT5pZCgpKSkK
LSAgICAgICAgbV9zZWVuU3RydWN0dXJlcy5hZGQoc3RydWN0dXJlLT5pZCgpLCBzdGQ6Om1ha2Vf
dW5pcXVlPFNpZGVBY2Nlc3NDYXNlR3JvdXA+KHN0cnVjdHVyZS0+aWQoKSkpOwotICAgIGF1dG8m
IGdyb3VwID0gKm1fc2VlblN0cnVjdHVyZXMuZ2V0KHN0cnVjdHVyZS0+aWQoKSk7Ci0KLSAgICBp
ZiAobV9nZXRCeUlkSnVtcFRhYmxlW2J1Y2tldEZvcihzdHJ1Y3R1cmUtPmlkKCkpXSkgewotICAg
ICAgICBhdXRvIGV4aXN0aW5nQWRkcmVzcyA9IG1fZ2V0QnlJZEp1bXBUYWJsZVtidWNrZXRGb3Io
c3RydWN0dXJlLT5pZCgpKV0uZXhlY3V0YWJsZUFkZHJlc3MoKTsKKyAgICBpZiAoIW1fdmFyaWFu
dEdyb3Vwcy5jb250YWlucyhpZGVudGlmaWVyLnVpZCgpKSkKKyAgICAgICAgbV92YXJpYW50R3Jv
dXBzLmFkZChpZGVudGlmaWVyLnVpZCgpLCBzdGQ6Om1ha2VfdW5pcXVlPFNpZGVBY2Nlc3NDYXNl
R3JvdXA+KGlkZW50aWZpZXIudWlkKCkpKTsKKyAgICBhdXRvJiBncm91cCA9ICptX3ZhcmlhbnRH
cm91cHMuZ2V0KGlkZW50aWZpZXIudWlkKCkpOworICAgIGF1dG8mIGJ1Y2tldCA9IG1fZ2V0QnlJ
ZEp1bXBUYWJsZVtidWNrZXRGb3IoaWRlbnRpZmllcildOworICAgIAorICAgIGlmIChncm91cC5n
ZW5lcmF0ZWRGaW5hbENvZGUpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBpZiAoYnVja2V0
KSB7CisgICAgICAgIGF1dG8gZXhpc3RpbmdBZGRyZXNzID0gYnVja2V0LmV4ZWN1dGFibGVBZGRy
ZXNzKCk7CiAgICAgICAgIGlmICghZ3JvdXAubV9zdHViUm91dGluZSB8fCBleGlzdGluZ0FkZHJl
c3MgIT0gZ3JvdXAubV9zdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVz
cygpKSB7CiAgICAgICAgICAgICBTaWRlQWNjZXNzQ2FzZUdyb3VwKiBmb3VuZCA9IG51bGxwdHI7
Ci0gICAgICAgICAgICBmb3IgKGF1dG8mIGt2IDogbV9zZWVuU3RydWN0dXJlcykgeworICAgICAg
ICAgICAgZm9yIChhdXRvJiBrdiA6IG1fdmFyaWFudEdyb3VwcykgewogICAgICAgICAgICAgICAg
IGlmIChrdi52YWx1ZSAmJiBrdi52YWx1ZS0+bV9zdHViUm91dGluZQogICAgICAgICAgICAgICAg
ICAgICAgICAgJiYga3YudmFsdWUtPm1fc3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkuZXhlY3V0
YWJsZUFkZHJlc3MoKSA9PSBleGlzdGluZ0FkZHJlc3MpIHsKICAgICAgICAgICAgICAgICAgICAg
Zm91bmQgPSAmKmt2LnZhbHVlOwpAQCAtNDYzLDggKzQ2MSw4IEBAIHZvaWQgUHJvcGVydHlBY2Nl
c3NTaWRlSW5saW5lQ2FjaGU6Om9ic2VydmVTdHJ1Y3R1cmVHZXRCeUlkKGJvb2wgaXNIaXQsIGNv
bnN0IEpTCiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAgQVNT
RVJUKGZvdW5kKTsKLSAgICAgICAgICAgIGRhdGFMb2dMbklmKFNpZGVBY2Nlc3NDYWNoZUludGVy
bmFsOjp2ZXJib3NlLCAiSGFzaCBjb2xsaXNpb24gb24gIiwgc3RydWN0dXJlLT5pZCgpLCAiIGV4
aXN0aW5nIGVudHJ5OiAiLCBmb3VuZC0+bV9zdHJ1Y3R1cmVJRCk7Ci0gICAgICAgICAgICBtX3Nl
ZW5TdHJ1Y3R1cmVzLnJlbW92ZShzdHJ1Y3R1cmUtPmlkKCkpOworICAgICAgICAgICAgZGF0YUxv
Z0xuSWYoU2lkZUFjY2Vzc0NhY2hlSW50ZXJuYWw6OnZlcmJvc2UsICJIYXNoIGNvbGxpc2lvbiBv
biAiLCBpZGVudGlmaWVyLCAiIGV4aXN0aW5nIGVudHJ5OiAiLCBmb3VuZC0+bV9rZXkpOworICAg
ICAgICAgICAgbV92YXJpYW50R3JvdXBzLnJlbW92ZShpZGVudGlmaWVyLnVpZCgpKTsKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgIH0KQEAgLTQ3NCwyOCArNDcyLDIzIEBAIHZv
aWQgUHJvcGVydHlBY2Nlc3NTaWRlSW5saW5lQ2FjaGU6Om9ic2VydmVTdHJ1Y3R1cmVHZXRCeUlk
KGJvb2wgaXNIaXQsIGNvbnN0IEpTCiAKICAgICBpZiAocmVzdWx0LmdlbmVyYXRlZFNvbWVDb2Rl
KCkpIHsKICAgICAgICAgZGF0YUxvZ0xuSWYoU2lkZUFjY2Vzc0NhY2hlSW50ZXJuYWw6OnZlcmJv
c2UsICJQYXRoY2hpbmcgIiwgc3RydWN0dXJlLT5pZCgpLCAiIGFuZCAiLCBpZGVudGlmaWVyLCAi
IHRvICIsIFJhd1BvaW50ZXIocmVzdWx0LmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpKSk7Ci0g
ICAgICAgIG1fZ2V0QnlJZEp1bXBUYWJsZVtidWNrZXRGb3Ioc3RydWN0dXJlLT5pZCgpKV0gPSBG
dW5jdGlvblB0cjxKSVRTdHViUm91dGluZVB0clRhZz4ocmVzdWx0LmNvZGUoKSk7CisgICAgICAg
IGJ1Y2tldCA9IEZ1bmN0aW9uUHRyPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihyZXN1bHQuY29kZSgp
KTsKKyAgICAgICAgCisgICAgICAgIGlmIChyZXN1bHQuZ2VuZXJhdGVkRmluYWxDb2RlKCkpIHsK
KyAgICAgICAgICAgIGRhdGFMb2dMbklmKFNpZGVBY2Nlc3NDYWNoZUludGVybmFsOjp2ZXJib3Nl
LCAiR2VuZXJhdGVkIGZpbmFsIGNvZGUgZm9yICIsIHN0cnVjdHVyZS0+aWQoKSwgIiBhbmQgIiwg
aWRlbnRpZmllcik7CisgICAgICAgICAgICBncm91cC5nZW5lcmF0ZWRGaW5hbENvZGUgPSB0cnVl
OworICAgICAgICB9CiAgICAgfSBlbHNlIGlmIChyZXN1bHQuc2hvdWxkR2l2ZVVwTm93KCkpIHsK
LSAgICAgICAgZGF0YUxvZ0xuSWYoU2lkZUFjY2Vzc0NhY2hlSW50ZXJuYWw6OnZlcmJvc2UsICJT
aG91bGQgZ2l2ZSB1cCBvbiAiLCBpZGVudGlmaWVyLCAiIG9uICIsIFJhd1BvaW50ZXIoc3RydWN0
dXJlKSk7Ci0gICAgICAgIG1fZ2V0QnlJZEp1bXBUYWJsZVtidWNrZXRGb3Ioc3RydWN0dXJlLT5p
ZCgpKV0gPSBudWxscHRyOworICAgICAgICBkYXRhTG9nTG5JZihTaWRlQWNjZXNzQ2FjaGVJbnRl
cm5hbDo6dmVyYm9zZSwgIlNob3VsZCBnaXZlIHVwIG9uICIsIHN0cnVjdHVyZS0+aWQoKSwgIiBh
bmQgIiwgaWRlbnRpZmllcik7CisgICAgICAgIGJ1Y2tldCA9IG51bGxwdHI7CiAgICAgfQogICAg
IAogICAgIHN0dWJJbmZvLT5zZWVuU3RydWN0dXJlc0NvdW50ICs9IGdyb3VwLm51bVZhcmlhbnRz
KCkgLSBudW1WYXJpYW50czsKIH0KIAotYm9vbCBQcm9wZXJ0eUFjY2Vzc1NpZGVJbmxpbmVDYWNo
ZTo6dmlzaXRXZWFrKFZNJiB2bSkKK2Jvb2wgUHJvcGVydHlBY2Nlc3NTaWRlSW5saW5lQ2FjaGU6
OnZpc2l0V2VhayhWTSYpCiB7Ci0gICAgSGFzaFNldDxTdHJ1Y3R1cmVJRD4gZGVhZFN0cnVjdHVy
ZXM7Ci0gICAgZm9yIChhdXRvJiBrdiA6IG1fc2VlblN0cnVjdHVyZXMpIHsKLSAgICAgICAgaWYg
KCFrdi52YWx1ZS0+dmlzaXRXZWFrKHZtKSkgewotICAgICAgICAgICAgZGVhZFN0cnVjdHVyZXMu
YWRkKGt2LmtleSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZm9yIChTdHJ1Y3R1cmVJRCBzaWQg
OiBkZWFkU3RydWN0dXJlcykgewotICAgICAgICBtX3NlZW5TdHJ1Y3R1cmVzLnJlbW92ZShzaWQp
OwotICAgICAgICBtX2dldEJ5SWRKdW1wVGFibGVbYnVja2V0Rm9yKHNpZCldID0gbnVsbHB0cjsK
LSAgICB9Ci0gICAgcmV0dXJuIGRlYWRTdHJ1Y3R1cmVzLmlzRW1wdHkoKTsKKyAgICByZXR1cm4g
dHJ1ZTsKIH0KIAogdm9pZCBQcm9wZXJ0eUFjY2Vzc1NpZGVJbmxpbmVDYWNoZTo6Z2VuZXJhdGVD
YWxsc2l0ZShDQ2FsbEhlbHBlcnMmIGppdCwgQ2FjaGVhYmxlSWRlbnRpZmllciBwcm9wZXJ0eU5h
bWUsCkBAIC01MTEsNyArNTA0LDcgQEAgdm9pZCBQcm9wZXJ0eUFjY2Vzc1NpZGVJbmxpbmVDYWNo
ZTo6Z2VuZXJhdGVDYWxsc2l0ZShDQ2FsbEhlbHBlcnMmIGppdCwgQ2FjaGVhYmwKICAgICBHUFJS
ZWcgc2NyYXRjaCA9IEludmFsaWRHUFJSZWc7CiAKICAgICBhdXRvJiB2bSA9IGppdC52bSgpOwot
ICAgIGF1dG8qIHNpZGVJQ1RhYmxlID0gdm0uaGVhcC5wcm9wZXJ0eUFjY2Vzc1NpZGVJbmxpbmVD
YWNoZSgpLmp1bXBUYWJsZSgpOworICAgIHZvaWQqIHNpZGVJQ1RhYmxlID0gdm0uaGVhcC5wcm9w
ZXJ0eUFjY2Vzc1NpZGVJbmxpbmVDYWNoZSgpLmp1bXBUYWJsZShidWNrZXRGb3IocHJvcGVydHlO
YW1lKSk7CiAKICAgICBBU1NFUlQob3JpZ2luYWxCYXNlICE9IEludmFsaWRHUFJSZWcpOwogICAg
IEFTU0VSVChvcmlnaW5hbFJlc3VsdCAhPSBJbnZhbGlkR1BSUmVnKTsKQEAgLTUyNCwxMSArNTE3
LDcgQEAgdm9pZCBQcm9wZXJ0eUFjY2Vzc1NpZGVJbmxpbmVDYWNoZTo6Z2VuZXJhdGVDYWxsc2l0
ZShDQ2FsbEhlbHBlcnMmIGppdCwgQ2FjaGVhYmwKICAgICBhbGxvY2F0b3IubG9jayhzdHViSW5m
byk7CiAgICAgc2NyYXRjaCA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKIAotICAg
IGppdC5sb2FkMzIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKG9yaWdpbmFsQmFzZSwgSlNDZWxsOjpz
dHJ1Y3R1cmVJRE9mZnNldCgpKSwgc2NyYXRjaCk7Ci0gICAgaml0LmFuZDY0KENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbTY0KFByb3BlcnR5QWNjZXNzU2lkZUlubGluZUNhY2hlOjpzdHJ1Y3R1cmVU
YWJsZU1hc2spLCBzY3JhdGNoKTsKLSAgICBqaXQubHNoaWZ0MzIoQ0NhbGxIZWxwZXJzOjpJbW0z
MigzKSwgc2NyYXRjaCk7Ci0gICAgaml0LmFkZDY0KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTY0
KHJlaW50ZXJwcmV0X2Nhc3Q8dWludDY0X3Q+KHNpZGVJQ1RhYmxlKSksIHNjcmF0Y2gpOwotICAg
IGppdC5sb2FkNjQoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHNjcmF0Y2gpLCBzY3JhdGNoKTsKKyAg
ICBqaXQubG9hZDY0KHNpZGVJQ1RhYmxlLCBzY3JhdGNoKTsKICAgICB0b1Nsb3dwYXRoLmFwcGVu
ZChqaXQuYnJhbmNoVGVzdDMyKENDYWxsSGVscGVyczo6WmVybywgc2NyYXRjaCkpOwogCiAgICAg
ewpAQCAtNTkwLDcgKzU3OSw3IEBAIHN0ZDo6b3B0aW9uYWw8Q29kZUxvY2F0aW9uTGFiZWw8SklU
U3R1YlJvdXRpbmVQdHJUYWc+PiBQcm9wZXJ0eUFjY2Vzc1NpZGVJbmxpbmVDCiAgICAgICAgIG51
bGxwdHIsIGxpbmtCdWZmZXIsIEpJVFN0dWJSb3V0aW5lUHRyVGFnLAogICAgICAgICAiJXMiLCB0
b0NTdHJpbmcoIlNpZGUgQWNjZXNzIHNsb3cgcGF0aCB0aHVuayBmb3IgIiwgcHJvcGVydHlOYW1l
LCAiOiAiKS5kYXRhKCkpOwogCi0gICAgYXV0byBzdHViID0gYWRvcHRSZWYoKm5ldyBTaWRlQWNj
ZXNzSklUU3R1YlJvdXRpbmUoY29kZSwgdm0sIHsgfSkpOworICAgIGF1dG8gc3R1YiA9IGFkb3B0
UmVmKCpuZXcgU2lkZUFjY2Vzc0pJVFN0dWJSb3V0aW5lKGNvZGUsIHZtKSk7CiAgICAgc3R1Yi0+
bWFrZUdDQXdhcmUodm0pOwogICAgIG1fY2FsbHNpdGVzLmFwcGVuZChzdGQ6Om1vdmUoc3R1Yikp
OwogICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Qcm9wZXJ0eUFj
Y2Vzc1NpZGVJbmxpbmVDYWNoZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Qcm9wZXJ0
eUFjY2Vzc1NpZGVJbmxpbmVDYWNoZS5oCmluZGV4IDc2YjUyZDViYmI2Ni4uOGYyYmQwZGZkYmI5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Byb3BlcnR5QWNjZXNzU2lk
ZUlubGluZUNhY2hlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Qcm9wZXJ0eUFj
Y2Vzc1NpZGVJbmxpbmVDYWNoZS5oCkBAIC00NiwxNyArNDYsMjAgQEAgY2xhc3MgUHJvcGVydHlT
bG90OwogCiBjbGFzcyBQcm9wZXJ0eUFjY2Vzc1NpZGVJbmxpbmVDYWNoZSB7CiBwdWJsaWM6Cisg
ICAgdXNpbmcgVmFyaWFudEtleVR5cGUgPSBVbmlxdWVkU3RyaW5nSW1wbCo7CiAgICAgUHJvcGVy
dHlBY2Nlc3NTaWRlSW5saW5lQ2FjaGUoVk0mIHZtKTsKICAgICB+UHJvcGVydHlBY2Nlc3NTaWRl
SW5saW5lQ2FjaGUoKTsKIAogICAgIHZvaWQgb2JzZXJ2ZVN0cnVjdHVyZUdldEJ5SWQoYm9vbCBp
c0hpdCwgY29uc3QgSlNWYWx1ZSBiYXNlLAogICAgICAgICBjb25zdCBDYWNoZWFibGVJZGVudGlm
aWVyJiBpZGVudGlmaWVyLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QsCiAgICAgICAgIFN0cnVj
dHVyZVN0dWJJbmZvKiBzdHViSW5mbyk7Ci0gICAgdm9pZCoganVtcFRhYmxlKCkgeyByZXR1cm4g
cmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oJm1fZ2V0QnlJZEp1bXBUYWJsZVswXSk7IH0KKyAgICB2
b2lkKiBqdW1wVGFibGUoc2l6ZV90IGkpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+
KCZtX2dldEJ5SWRKdW1wVGFibGVbaV0pOyB9CiAKICAgICBib29sIHZpc2l0V2VhayhWTSYpOwog
Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1aW50MzJfdCBzdHJ1Y3R1cmVUYWJsZU1hc2sgPSAweDAw
MDBGRkY7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1aW50NjRfdCB2YXJpYW50VGFibGVNYXNrID0g
MHgwMDAwRkZGMDsKKyAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCB2YXJpYW50VGFibGVTaGlm
dCA9IDQ7CisgICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgdmFyaWFudFRhYmxlRW50cmllcyA9
IDE8PDEyOwogICAgIHN0YXRpYyB2b2lkIGdlbmVyYXRlQ2FsbHNpdGUoQ0NhbGxIZWxwZXJzJiBq
aXQsIENhY2hlYWJsZUlkZW50aWZpZXIgcHJvcGVydHlOYW1lLAogICAgICAgICBTdHJ1Y3R1cmVT
dHViSW5mbyogY2FsbHNpdGVTdHViSW5mbywgR1BSUmVnIG9yaWdpbmFsQmFzZSwgR1BSUmVnIG9y
aWdpbmFsUmVzdWx0LCBSZWdpc3RlclNldCBtdXN0UHJlc2VydmUsCiAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wTGlzdCYgdG9Eb25lLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QmIHRvU2xv
d3BhdGgpOwpAQCAtNjUsMTUgKzY4LDE0IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgVk0qIG1f
dm07CiAKLSAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBzdHJ1Y3R1cmVUYWJsZUVudHJpZXMg
PSAxPDwxMjsKLSAgICBzdGF0aWNfYXNzZXJ0KCgweEZGRkZGRkZGJnN0cnVjdHVyZVRhYmxlTWFz
aykgKyAxID09IHN0cnVjdHVyZVRhYmxlRW50cmllcyk7Ci0gICAgc3RhdGljIGlubGluZSBzaXpl
X3QgYnVja2V0Rm9yKFN0cnVjdHVyZUlEIHNpZCkKKyAgICBzdGF0aWNfYXNzZXJ0KCgoc3RkOjpu
dW1lcmljX2xpbWl0czx0eXBlb2YodmFyaWFudFRhYmxlTWFzayk+OjptYXgoKSZ2YXJpYW50VGFi
bGVNYXNrKT4+dmFyaWFudFRhYmxlU2hpZnQpICsgMSA9PSB2YXJpYW50VGFibGVFbnRyaWVzKTsK
KyAgICBzdGF0aWMgaW5saW5lIHNpemVfdCBidWNrZXRGb3IoQ2FjaGVhYmxlSWRlbnRpZmllciBp
ZGVudCkKICAgICB7Ci0gICAgICAgIHJldHVybiBzaWQmc3RydWN0dXJlVGFibGVNYXNrOworICAg
ICAgICByZXR1cm4gKGlkZW50LnJhd0JpdHMoKSZ2YXJpYW50VGFibGVNYXNrKT4+dmFyaWFudFRh
YmxlU2hpZnQ7CiAgICAgfQogCi0gICAgVmVjdG9yPEZ1bmN0aW9uUHRyPEpJVFN0dWJSb3V0aW5l
UHRyVGFnPj4gbV9nZXRCeUlkSnVtcFRhYmxlIHtzdHJ1Y3R1cmVUYWJsZUVudHJpZXMsIG51bGxw
dHJ9OwotICAgIEhhc2hNYXA8U3RydWN0dXJlSUQsIHN0ZDo6dW5pcXVlX3B0cjxTaWRlQWNjZXNz
Q2FzZUdyb3VwPj4gbV9zZWVuU3RydWN0dXJlczsKKyAgICBWZWN0b3I8RnVuY3Rpb25QdHI8SklU
U3R1YlJvdXRpbmVQdHJUYWc+PiBtX2dldEJ5SWRKdW1wVGFibGUge3ZhcmlhbnRUYWJsZUVudHJp
ZXMsIG51bGxwdHJ9OworICAgIEhhc2hNYXA8VmFyaWFudEtleVR5cGUsIHN0ZDo6dW5pcXVlX3B0
cjxTaWRlQWNjZXNzQ2FzZUdyb3VwPj4gbV92YXJpYW50R3JvdXBzOwogICAgIFZlY3RvcjxSZWZQ
dHI8U2lkZUFjY2Vzc0pJVFN0dWJSb3V0aW5lPj4gbV9jYWxsc2l0ZXM7CiAKICAgICBmcmllbmQg
Y2xhc3MgU2lkZUdldEJ5SWRHZW5lcmF0b3I7Ci0tIAoyLjMwLjEgKEFwcGxlIEdpdC0xMzApCgoK
RnJvbSAzYTlkYjYyOTdlZDFhMzA0YWI2N2NjMTM5ZTViZjNhNDIwOTdiMTRiIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBKdXN0aW4gTWljaGF1ZCA8anVzdGluX21pY2hhdWRAYXBwbGUu
Y29tPgpEYXRlOiBUaHUsIDIxIE9jdCAyMDIxIDE1OjUzOjM3IC0wNzAwClN1YmplY3Q6IFtQQVRD
SCAxMi8xN10gLgoKLS0tCiAuLi4vaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmggICAgICAg
ICAgICAgfCAgNiArLS0KIC4uLi9qaXQvUHJvcGVydHlBY2Nlc3NTaWRlSW5saW5lQ2FjaGUuY3Bw
ICAgICB8IDQzICsrKysrKysrKystLS0tLS0tLS0KIC4uLi9qaXQvUHJvcGVydHlBY2Nlc3NTaWRl
SW5saW5lQ2FjaGUuaCAgICAgICB8IDE0ICsrKy0tLQogMyBmaWxlcyBjaGFuZ2VkLCAzMyBpbnNl
cnRpb25zKCspLCAzMCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmgKaW5kZXggNzFiMWFhOWExNzA5Li4wODE0
ODI3MzA3NWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5l
Q2FjaGVHZW5lcmF0b3IuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGlu
ZUNhY2hlR2VuZXJhdG9yLmgKQEAgLTEzMCwxNiArMTMwLDE0IEBAIHN0cnVjdCBTaWRlUHJvcGVy
dHlBY2Nlc3NSZWdpc3RlcnMgewogICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBH
UFJJbmZvOjpyZWdUMDsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2UgPT0gQmFzZWxpbmVHZXRCeUlk
UmVnaXN0ZXJzOjpiYXNlKTsKIAotICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZv
ID0gR1BSSW5mbzo6cmVnVDE7Ci0gICAgc3RhdGljX2Fzc2VydChzdHViSW5mbyA9PSBCYXNlbGlu
ZUdldEJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZvKTsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJl
ZyBwcm9wZXJ0eSA9IEdQUkluZm86OnJlZ1QxOworICAgIHN0YXRpY19hc3NlcnQocHJvcGVydHkg
PT0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbyk7CiAKICAgICBzdGF0aWMgY29u
c3RleHByIEdQUlJlZyBzY3JhdGNoID0gR1BSSW5mbzo6cmVnVDI7CiAgICAgc3RhdGljX2Fzc2Vy
dChzY3JhdGNoID09IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6c2NyYXRjaCk7CiAKICAgICBz
dGF0aWMgY29uc3RleHByIEdQUlJlZyBkb250Q2xvYmJlclJlZ2lzdGVyID0gR1BSSW5mbzo6cmVn
VDM7CiAgICAgc3RhdGljX2Fzc2VydChzY3JhdGNoID09IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVy
czo6c2NyYXRjaCk7Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eSA9IEdQ
UkluZm86OnJlZ1Q0OwogfTsKIAogc3RydWN0IEJhc2VsaW5lSW5CeUlkUmVnaXN0ZXJzIHsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUHJvcGVydHlBY2Nlc3NTaWRlSW5s
aW5lQ2FjaGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Qcm9wZXJ0eUFjY2Vzc1Np
ZGVJbmxpbmVDYWNoZS5jcHAKaW5kZXggYmU5OTJhNzM2Njk4Li41MGVkZGU5YmFkZWQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUHJvcGVydHlBY2Nlc3NTaWRlSW5saW5l
Q2FjaGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUHJvcGVydHlBY2Nlc3NT
aWRlSW5saW5lQ2FjaGUuY3BwCkBAIC00Nyw3ICs0Nyw3IEBACiBuYW1lc3BhY2UgSlNDIHsKIAog
bmFtZXNwYWNlIFNpZGVBY2Nlc3NDYWNoZUludGVybmFsIHsKLXN0YXRpYyBjb25zdGV4cHIgYm9v
bCB2ZXJib3NlID0gZmFsc2U7CitzdGF0aWMgY29uc3RleHByIGJvb2wgdmVyYm9zZSA9IHRydWU7
CiBzdGF0aWMgY29uc3RleHByIHVpbnQzMl90IHJlcGF0Y2hCdWZmZXJpbmdDb3VudGRvd24gPSAz
MjsKIHN0YXRpYyBjb25zdGV4cHIgdWludDMyX3QgbWF4VmFyaWFudHNGb3JHcm91cCA9IDMyOwog
c3RhdGljIGNvbnN0ZXhwciB1aW50MzJfdCBtYXhWYXJpYW50c0ZvckNhbGxzaXRlID0gNjQ7CkBA
IC0yNTQsOCArMjU0LDcgQEAgQWNjZXNzR2VuZXJhdGlvblJlc3VsdCByZWdlbmVyYXRlKGNvbnN0
IEdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlciYsIFZNJiB2bSwgSlNHbG8KICAgICAgICAgewogICAg
ICAgICAgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gU2lkZVByb3BlcnR5QWNjZXNzUmVn
aXN0ZXJzOjpiYXNlOwogICAgICAgICAgICAgY29uc3RleHByIEdQUlJlZyByZXN1bHRHUFIgPSBT
aWRlUHJvcGVydHlBY2Nlc3NSZWdpc3RlcnM6OnJlc3VsdDsKLS8vICAgICAgICAgICAgY29uc3Rl
eHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IFNpZGVQcm9wZXJ0eUFjY2Vzc1JlZ2lzdGVyczo6cHJv
cGVydHk7Ci0vLyAgICAgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBTaWRl
UHJvcGVydHlBY2Nlc3NSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgICAgICAgICAgY29uc3RleHBy
IEdQUlJlZyBwcm9wZXJ0eUdQUiA9IFNpZGVQcm9wZXJ0eUFjY2Vzc1JlZ2lzdGVyczo6cHJvcGVy
dHk7CiAgICAgICAgICAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2hHUFIgPSBTaWRlUHJvcGVy
dHlBY2Nlc3NSZWdpc3RlcnM6OnNjcmF0Y2g7CiAKICAgICAgICAgICAgIEFTU0VSVCghY2FzZXMu
aXNFbXB0eSgpKTsKQEAgLTI2MywxMiArMjYyLDEzIEBAIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQg
cmVnZW5lcmF0ZShjb25zdCBHQ1NhZmVDb25jdXJyZW50SlNMb2NrZXImLCBWTSYgdm0sIEpTR2xv
CiAgICAgICAgICAgICBqaXQubG9hZDMyKAogICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6
QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLAogICAgICAgICAg
ICAgICAgIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgc3RhdGUuc2xvd1BhdGguYXBwZW5kKGpp
dC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHNjcmF0Y2hHUFIsIENDYWxsSGVs
cGVyczo6VHJ1c3RlZEltbTMyKG1fa2V5KSkpOwogCiAgICAgICAgICAgICBWZWN0b3I8aW50NjRf
dD4gY2FzZVZhbHVlcyhjYXNlcy5zaXplKCkpOwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGNhc2VzLnNpemUoKTsgKytpKQotICAgICAgICAgICAgICAgIGNhc2VWYWx1ZXNb
aV0gPSBjYXNlc1tpXS0+bV9zdHJ1Y3R1cmVJRDsKKyAgICAgICAgICAgICAgICBjYXNlVmFsdWVz
W2ldID0gY2FzZXNbaV0tPm1faWRlbnRpZmllci5yYXdCaXRzKCk7CiAKLSAgICAgICAgICAgIEJp
bmFyeVN3aXRjaCBiaW5hcnlTd2l0Y2goc2NyYXRjaEdQUiwgY2FzZVZhbHVlcywgQmluYXJ5U3dp
dGNoOjpJbnQzMik7CisgICAgICAgICAgICBCaW5hcnlTd2l0Y2ggYmluYXJ5U3dpdGNoKHByb3Bl
cnR5R1BSLCBjYXNlVmFsdWVzLCBCaW5hcnlTd2l0Y2g6OkludFB0cik7CiAgICAgICAgICAgICB3
aGlsZSAoYmluYXJ5U3dpdGNoLmFkdmFuY2Uoaml0KSkKICAgICAgICAgICAgICAgICBjYXNlc1ti
aW5hcnlTd2l0Y2guY2FzZUluZGV4KCldLT5nZW5lcmF0ZShzdGF0ZSk7CiAgICAgICAgICAgICBz
dGF0ZS5zbG93UGF0aC5hcHBlbmQoYmluYXJ5U3dpdGNoLmZhbGxUaHJvdWdoKCkpOwpAQCAtMzM4
LDcgKzMzOCw3IEBAIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQgcmVnZW5lcmF0ZShjb25zdCBHQ1Nh
ZmVDb25jdXJyZW50SlNMb2NrZXImLCBWTSYgdm0sIEpTR2xvCiAgICAgICAgIGRhdGFMb2dMbklm
KFNpZGVBY2Nlc3NDYWNoZUludGVybmFsOjp2ZXJib3NlLCAiQWRkaW5nIGNhc2VzOiAiLCBsaXN0
RHVtcChjYXNlc1RvQWRkKSk7CiAKICAgICAgICAgZm9yIChhdXRvJiBjYXNlVG9BZGQgOiBjYXNl
c1RvQWRkKSB7Ci0gICAgICAgICAgICBBU1NFUlQobV9rZXkgPT0gY2FzZVRvQWRkLT5tX2lkZW50
aWZpZXIudWlkKCkpOworICAgICAgICAgICAgQVNTRVJUKG1fa2V5ID09IGNhc2VUb0FkZC0+bV9z
dHJ1Y3R1cmVJRCk7CiAgICAgICAgICAgICBtX2xpc3QuYXBwZW5kKFdURk1vdmUoY2FzZVRvQWRk
KSk7CiAgICAgICAgIH0KIApAQCAtMzU3LDcgKzM1Nyw3IEBAIEFjY2Vzc0dlbmVyYXRpb25SZXN1
bHQgcmVnZW5lcmF0ZShjb25zdCBHQ1NhZmVDb25jdXJyZW50SlNMb2NrZXImLCBWTSYgdm0sIEpT
R2xvCiAgICAgICAgIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKICAgICB7CiAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKE9wdGlvbnM6OnVzZVByb3BlcnR5QWNjZXNzU2lkZUlDKCkpOwotICAgICAg
ICBBU1NFUlQobV9rZXkgPT0gcHJvcGVydHlOYW1lLnVpZCgpKTsKKyAgICAgICAgQVNTRVJUKG1f
a2V5ID09IHN0cnVjdHVyZS0+aWQoKSk7CiAgICAgICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+
dm0oKTsKICAgICAgICAgQWNjZXNzR2VuZXJhdGlvblJlc3VsdCByZXN1bHQ7CiAKQEAgLTQ0MSwx
MCArNDQxLDEyIEBAIHZvaWQgUHJvcGVydHlBY2Nlc3NTaWRlSW5saW5lQ2FjaGU6Om9ic2VydmVT
dHJ1Y3R1cmVHZXRCeUlkKGJvb2wgaXNIaXQsIGNvbnN0IEpTCiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKLSAgICBpZiAoIW1fdmFyaWFudEdyb3Vwcy5jb250YWlucyhpZGVudGlmaWVyLnVpZCgp
KSkKLSAgICAgICAgbV92YXJpYW50R3JvdXBzLmFkZChpZGVudGlmaWVyLnVpZCgpLCBzdGQ6Om1h
a2VfdW5pcXVlPFNpZGVBY2Nlc3NDYXNlR3JvdXA+KGlkZW50aWZpZXIudWlkKCkpKTsKLSAgICBh
dXRvJiBncm91cCA9ICptX3ZhcmlhbnRHcm91cHMuZ2V0KGlkZW50aWZpZXIudWlkKCkpOwotICAg
IGF1dG8mIGJ1Y2tldCA9IG1fZ2V0QnlJZEp1bXBUYWJsZVtidWNrZXRGb3IoaWRlbnRpZmllcild
OworICAgIGF1dG8ga2V5ID0gc3RydWN0dXJlLT5pZCgpOworICAgIGF1dG8gaGFzaEtleSA9IGtl
eTsKKyAgICBpZiAoIW1fdmFyaWFudEdyb3Vwcy5jb250YWlucyhoYXNoS2V5KSkKKyAgICAgICAg
bV92YXJpYW50R3JvdXBzLmFkZChoYXNoS2V5LCBzdGQ6Om1ha2VfdW5pcXVlPFNpZGVBY2Nlc3ND
YXNlR3JvdXA+KGtleSkpOworICAgIGF1dG8mIGdyb3VwID0gKm1fdmFyaWFudEdyb3Vwcy5nZXQo
aGFzaEtleSk7CisgICAgYXV0byYgYnVja2V0ID0gbV9nZXRCeUlkSnVtcFRhYmxlW2J1Y2tldEZv
cihrZXkpXTsKICAgICAKICAgICBpZiAoZ3JvdXAuZ2VuZXJhdGVkRmluYWxDb2RlKQogICAgICAg
ICByZXR1cm47CkBAIC00NjIsNyArNDY0LDcgQEAgdm9pZCBQcm9wZXJ0eUFjY2Vzc1NpZGVJbmxp
bmVDYWNoZTo6b2JzZXJ2ZVN0cnVjdHVyZUdldEJ5SWQoYm9vbCBpc0hpdCwgY29uc3QgSlMKICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIEFTU0VSVChmb3VuZCk7CiAgICAgICAgICAgICBkYXRh
TG9nTG5JZihTaWRlQWNjZXNzQ2FjaGVJbnRlcm5hbDo6dmVyYm9zZSwgIkhhc2ggY29sbGlzaW9u
IG9uICIsIGlkZW50aWZpZXIsICIgZXhpc3RpbmcgZW50cnk6ICIsIGZvdW5kLT5tX2tleSk7Ci0g
ICAgICAgICAgICBtX3ZhcmlhbnRHcm91cHMucmVtb3ZlKGlkZW50aWZpZXIudWlkKCkpOworICAg
ICAgICAgICAgbV92YXJpYW50R3JvdXBzLnJlbW92ZShoYXNoS2V5KTsKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfQogICAgIH0KQEAgLTQ5NywxNCArNDk5LDE0IEBAIHZvaWQgUHJvcGVy
dHlBY2Nlc3NTaWRlSW5saW5lQ2FjaGU6OmdlbmVyYXRlQ2FsbHNpdGUoQ0NhbGxIZWxwZXJzJiBq
aXQsIENhY2hlYWJsCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoT3B0aW9uczo6dXNlUHJvcGVydHlB
Y2Nlc3NTaWRlSUMoKSk7CiAgICAgQVNTRVJUKHByb3BlcnR5TmFtZSk7CisgICAgQVNTRVJUX1VO
VVNFRChjYWxsc2l0ZVN0dWJJbmZvLCBjYWxsc2l0ZVN0dWJJbmZvKTsKICAgICBHUFJSZWcgcmVz
dWx0ID0gU2lkZVByb3BlcnR5QWNjZXNzUmVnaXN0ZXJzOjpyZXN1bHQ7CiAgICAgR1BSUmVnIGJh
c2UgPSBTaWRlUHJvcGVydHlBY2Nlc3NSZWdpc3RlcnM6OmJhc2U7CiAgICAgR1BSUmVnIHByb3Bl
cnR5ID0gU2lkZVByb3BlcnR5QWNjZXNzUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKLSAgICBHUFJSZWcg
c3R1YkluZm8gPSBTaWRlUHJvcGVydHlBY2Nlc3NSZWdpc3RlcnM6OnN0dWJJbmZvOwogICAgIEdQ
UlJlZyBzY3JhdGNoID0gSW52YWxpZEdQUlJlZzsKIAogICAgIGF1dG8mIHZtID0gaml0LnZtKCk7
Ci0gICAgdm9pZCogc2lkZUlDVGFibGUgPSB2bS5oZWFwLnByb3BlcnR5QWNjZXNzU2lkZUlubGlu
ZUNhY2hlKCkuanVtcFRhYmxlKGJ1Y2tldEZvcihwcm9wZXJ0eU5hbWUpKTsKKyAgICB2b2lkKiBz
aWRlSUNUYWJsZSA9IHZtLmhlYXAucHJvcGVydHlBY2Nlc3NTaWRlSW5saW5lQ2FjaGUoKS5qdW1w
VGFibGUoMCk7CiAKICAgICBBU1NFUlQob3JpZ2luYWxCYXNlICE9IEludmFsaWRHUFJSZWcpOwog
ICAgIEFTU0VSVChvcmlnaW5hbFJlc3VsdCAhPSBJbnZhbGlkR1BSUmVnKTsKQEAgLTUxNCwxMCAr
NTE2LDE0IEBAIHZvaWQgUHJvcGVydHlBY2Nlc3NTaWRlSW5saW5lQ2FjaGU6OmdlbmVyYXRlQ2Fs
bHNpdGUoQ0NhbGxIZWxwZXJzJiBqaXQsIENhY2hlYWJsCiAgICAgYWxsb2NhdG9yLmxvY2socmVz
dWx0KTsKICAgICBhbGxvY2F0b3IubG9jayhiYXNlKTsKICAgICBhbGxvY2F0b3IubG9jayhwcm9w
ZXJ0eSk7Ci0gICAgYWxsb2NhdG9yLmxvY2soc3R1YkluZm8pOwogICAgIHNjcmF0Y2ggPSBhbGxv
Y2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7Ci0KLSAgICBqaXQubG9hZDY0KHNpZGVJQ1RhYmxl
LCBzY3JhdGNoKTsKKyAgICAKKyAgICBqaXQubG9hZDMyKENDYWxsSGVscGVyczo6QWRkcmVzcyhv
cmlnaW5hbEJhc2UsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHNjcmF0Y2gpOworICAg
IGppdC5hbmQ2NChDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW02NChQcm9wZXJ0eUFjY2Vzc1NpZGVJ
bmxpbmVDYWNoZTo6dmFyaWFudFRhYmxlTWFzayksIHNjcmF0Y2gpOworICAgIHN0YXRpY19hc3Nl
cnQoUHJvcGVydHlBY2Nlc3NTaWRlSW5saW5lQ2FjaGU6OnZhcmlhbnRUYWJsZVNoaWZ0ID49IDMp
OworICAgIGppdC5yc2hpZnQzMihDQ2FsbEhlbHBlcnM6OkltbTMyKFByb3BlcnR5QWNjZXNzU2lk
ZUlubGluZUNhY2hlOjp2YXJpYW50VGFibGVTaGlmdC0zKSwgc2NyYXRjaCk7CisgICAgaml0LmFk
ZDY0KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTY0KHJlaW50ZXJwcmV0X2Nhc3Q8dWludDY0X3Q+
KHNpZGVJQ1RhYmxlKSksIHNjcmF0Y2gpOworICAgIGppdC5sb2FkNjQoQ0NhbGxIZWxwZXJzOjpB
ZGRyZXNzKHNjcmF0Y2gpLCBzY3JhdGNoKTsKICAgICB0b1Nsb3dwYXRoLmFwcGVuZChqaXQuYnJh
bmNoVGVzdDMyKENDYWxsSGVscGVyczo6WmVybywgc2NyYXRjaCkpOwogCiAgICAgewpAQCAtNTI5
LDggKzUzNSw2IEBAIHZvaWQgUHJvcGVydHlBY2Nlc3NTaWRlSW5saW5lQ2FjaGU6OmdlbmVyYXRl
Q2FsbHNpdGUoQ0NhbGxIZWxwZXJzJiBqaXQsIENhY2hlYWJsCiAgICAgICAgICAgICByZWdpc3Rl
cnNUb1ByZXNlcnZlLnNldChiYXNlKTsKICAgICAgICAgaWYgKG11c3RQcmVzZXJ2ZS5jb250YWlu
cyhwcm9wZXJ0eSkpCiAgICAgICAgICAgICByZWdpc3RlcnNUb1ByZXNlcnZlLnNldChwcm9wZXJ0
eSk7Ci0gICAgICAgIGlmIChtdXN0UHJlc2VydmUuY29udGFpbnMoc3R1YkluZm8pKQotICAgICAg
ICAgICAgcmVnaXN0ZXJzVG9QcmVzZXJ2ZS5zZXQoc3R1YkluZm8pOwogICAgICAgICBpZiAobXVz
dFByZXNlcnZlLmNvbnRhaW5zKFNpZGVQcm9wZXJ0eUFjY2Vzc1JlZ2lzdGVyczo6c2NyYXRjaCkp
CiAgICAgICAgICAgICByZWdpc3RlcnNUb1ByZXNlcnZlLnNldChTaWRlUHJvcGVydHlBY2Nlc3NS
ZWdpc3RlcnM6OnNjcmF0Y2gpOwogICAgICAgICBBU1NFUlQoIXJlZ2lzdGVyc1RvUHJlc2VydmUu
Y29udGFpbnMoc2NyYXRjaCkpOwpAQCAtNTQxLDcgKzU0NSw2IEBAIHZvaWQgUHJvcGVydHlBY2Nl
c3NTaWRlSW5saW5lQ2FjaGU6OmdlbmVyYXRlQ2FsbHNpdGUoQ0NhbGxIZWxwZXJzJiBqaXQsIENh
Y2hlYWJsCiAgICAgICAgIGlmIChvcmlnaW5hbEJhc2UgIT0gYmFzZSkKICAgICAgICAgICAgIGpp
dC5tb3ZlKG9yaWdpbmFsQmFzZSwgYmFzZSk7CiAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbTY0KHByb3BlcnR5TmFtZS5yYXdCaXRzKCkpLCBwcm9wZXJ0eSk7Ci0gICAg
ICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihjYWxsc2l0ZVN0dWJJbmZv
KSwgc3R1YkluZm8pOwogICAgICAgICBqaXQuY2FsbChzY3JhdGNoLCBKSVRTdHViUm91dGluZVB0
clRhZyk7CiAgICAgICAgIGppdC5tb3ZlKHJlc3VsdCwgc2NyYXRjaCk7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUHJvcGVydHlBY2Nlc3NTaWRlSW5saW5lQ2FjaGUu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUHJvcGVydHlBY2Nlc3NTaWRlSW5saW5lQ2Fj
aGUuaAppbmRleCA4ZjJiZDBkZmRiYjkuLmZlNjg0OWEzNWIyNCAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9Qcm9wZXJ0eUFjY2Vzc1NpZGVJbmxpbmVDYWNoZS5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUHJvcGVydHlBY2Nlc3NTaWRlSW5saW5lQ2FjaGUu
aApAQCAtNDYsNyArNDYsOSBAQCBjbGFzcyBQcm9wZXJ0eVNsb3Q7CiAKIGNsYXNzIFByb3BlcnR5
QWNjZXNzU2lkZUlubGluZUNhY2hlIHsKIHB1YmxpYzoKLSAgICB1c2luZyBWYXJpYW50S2V5VHlw
ZSA9IFVuaXF1ZWRTdHJpbmdJbXBsKjsKKyAgICB1c2luZyBWYXJpYW50S2V5VHlwZSA9IFN0cnVj
dHVyZUlEOworICAgIHVzaW5nIFZhcmlhbnRLZXlIYXNoYWJsZVR5cGUgPSBTdHJ1Y3R1cmVJRDsK
KyAgICAKICAgICBQcm9wZXJ0eUFjY2Vzc1NpZGVJbmxpbmVDYWNoZShWTSYgdm0pOwogICAgIH5Q
cm9wZXJ0eUFjY2Vzc1NpZGVJbmxpbmVDYWNoZSgpOwogCkBAIC02MCwyMiArNjIsMjIgQEAgcHVi
bGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgdWludDY0X3QgdmFyaWFudFRhYmxlTWFzayA9IDB4
MDAwMEZGRjA7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgdmFyaWFudFRhYmxlU2hpZnQg
PSA0OwogICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IHZhcmlhbnRUYWJsZUVudHJpZXMgPSAx
PDwxMjsKLSAgICBzdGF0aWMgdm9pZCBnZW5lcmF0ZUNhbGxzaXRlKENDYWxsSGVscGVycyYgaml0
LCBDYWNoZWFibGVJZGVudGlmaWVyIHByb3BlcnR5TmFtZSwKKyAgICBzdGF0aWMgdm9pZCBnZW5l
cmF0ZUNhbGxzaXRlKENDYWxsSGVscGVycyYgaml0LCBDYWNoZWFibGVJZGVudGlmaWVyIGlkZW50
aWZpZXIsCiAgICAgICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBjYWxsc2l0ZVN0dWJJbmZvLCBHUFJS
ZWcgb3JpZ2luYWxCYXNlLCBHUFJSZWcgb3JpZ2luYWxSZXN1bHQsIFJlZ2lzdGVyU2V0IG11c3RQ
cmVzZXJ2ZSwKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiB0b0RvbmUsIE1hY3Jv
QXNzZW1ibGVyOjpKdW1wTGlzdCYgdG9TbG93cGF0aCk7CiAgICAgCi0gICAgc3RkOjpvcHRpb25h
bDxDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4+IG1ha2VDYWxsc2l0ZVRo
dW5rKENvZGVCbG9jayogY2FsbHNpdGUsIENhY2hlYWJsZUlkZW50aWZpZXIgcHJvcGVydHlOYW1l
LCBTdHJ1Y3R1cmVTdHViSW5mbyogY2FsbHNpdGVTdHViSW5mbyk7CisgICAgc3RkOjpvcHRpb25h
bDxDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4+IG1ha2VDYWxsc2l0ZVRo
dW5rKENvZGVCbG9jayogY2FsbHNpdGUsIENhY2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmllciwg
U3RydWN0dXJlU3R1YkluZm8qIGNhbGxzaXRlU3R1YkluZm8pOwogcHJpdmF0ZToKICAgICBWTSog
bV92bTsKIAogICAgIHN0YXRpY19hc3NlcnQoKChzdGQ6Om51bWVyaWNfbGltaXRzPHR5cGVvZih2
YXJpYW50VGFibGVNYXNrKT46Om1heCgpJnZhcmlhbnRUYWJsZU1hc2spPj52YXJpYW50VGFibGVT
aGlmdCkgKyAxID09IHZhcmlhbnRUYWJsZUVudHJpZXMpOwotICAgIHN0YXRpYyBpbmxpbmUgc2l6
ZV90IGJ1Y2tldEZvcihDYWNoZWFibGVJZGVudGlmaWVyIGlkZW50KQorICAgIHN0YXRpYyBpbmxp
bmUgc2l6ZV90IGJ1Y2tldEZvcihWYXJpYW50S2V5VHlwZSBrZXkpCiAgICAgewotICAgICAgICBy
ZXR1cm4gKGlkZW50LnJhd0JpdHMoKSZ2YXJpYW50VGFibGVNYXNrKT4+dmFyaWFudFRhYmxlU2hp
ZnQ7CisgICAgICAgIHJldHVybiAoa2V5JnZhcmlhbnRUYWJsZU1hc2spPj52YXJpYW50VGFibGVT
aGlmdDsKICAgICB9CiAKICAgICBWZWN0b3I8RnVuY3Rpb25QdHI8SklUU3R1YlJvdXRpbmVQdHJU
YWc+PiBtX2dldEJ5SWRKdW1wVGFibGUge3ZhcmlhbnRUYWJsZUVudHJpZXMsIG51bGxwdHJ9Owot
ICAgIEhhc2hNYXA8VmFyaWFudEtleVR5cGUsIHN0ZDo6dW5pcXVlX3B0cjxTaWRlQWNjZXNzQ2Fz
ZUdyb3VwPj4gbV92YXJpYW50R3JvdXBzOworICAgIEhhc2hNYXA8VmFyaWFudEtleUhhc2hhYmxl
VHlwZSwgc3RkOjp1bmlxdWVfcHRyPFNpZGVBY2Nlc3NDYXNlR3JvdXA+PiBtX3ZhcmlhbnRHcm91
cHM7CiAgICAgVmVjdG9yPFJlZlB0cjxTaWRlQWNjZXNzSklUU3R1YlJvdXRpbmU+PiBtX2NhbGxz
aXRlczsKIAogICAgIGZyaWVuZCBjbGFzcyBTaWRlR2V0QnlJZEdlbmVyYXRvcjsKLS0gCjIuMzAu
MSAoQXBwbGUgR2l0LTEzMCkKCgpGcm9tIDk4ZmEzMWM2NmNlNzM5OTQyM2MyNTM4YWRjYTEyZDYy
YTU1YmRmYmEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCkZyb206IEp1c3RpbiBNaWNoYXVkIDxq
dXN0aW5fbWljaGF1ZEBhcHBsZS5jb20+CkRhdGU6IFRodSwgMjEgT2N0IDIwMjEgMTc6Mjk6MzYg
LTA3MDAKU3ViamVjdDogW1BBVENIIDEzLzE3XSAuCgotLS0KIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAgICB8ICAyICsKIC4uLi9qaXQvUHJvcGVydHlBY2Nlc3NT
aWRlSW5saW5lQ2FjaGUuY3BwICAgICB8IDM3ICsrKystLS0tLS0tLS0tLS0tLS0KIC4uLi9qaXQv
UHJvcGVydHlBY2Nlc3NTaWRlSW5saW5lQ2FjaGUuaCAgICAgICB8IDEzICstLS0tLS0KIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oICAgICB8ICA3ICsrKysKIDQgZmls
ZXMgY2hhbmdlZCwgMTcgaW5zZXJ0aW9ucygrKSwgNDIgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKaW5kZXggMTc4YmVkMDdiMDFlLi40
ZTExNTM1OTc0MTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bl
cmF0aW9ucy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25z
LmNwcApAQCAtMjg3LDYgKzI4Nyw4IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRp
b25HZXRCeUlkLCBFbmNvZGVkSlNWYWx1ZSwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iCiAgICAgQ2Fj
aGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVyID0gQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRl
RnJvbVJhd0JpdHMocmF3Q2FjaGVhYmxlSWRlbnRpZmllcik7CiAgICAgSWRlbnRpZmllciBpZGVu
dCA9IElkZW50aWZpZXI6OmZyb21VaWQodm0sIGlkZW50aWZpZXIudWlkKCkpOwogICAgIAorICAg
IGRhdGFMb2dMbigic2xvd1BhdGgoIiwgaWRlbnQsICIpIiwgYmFzZVZhbHVlLmFzQ2VsbCgpLT5z
dHJ1Y3R1cmVJRCgpKTsKKyAgICAKICAgICBib29sIGZvdW5kID0gZmFsc2U7CiAgICAgSlNWYWx1
ZSByZXN1bHQgPSBiYXNlVmFsdWUuZ2V0KGdsb2JhbE9iamVjdCwgaWRlbnQsIHNsb3QsIGZvdW5k
KTsKICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUHJvcGVydHlB
Y2Nlc3NTaWRlSW5saW5lQ2FjaGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Qcm9w
ZXJ0eUFjY2Vzc1NpZGVJbmxpbmVDYWNoZS5jcHAKaW5kZXggNTBlZGRlOWJhZGVkLi45OWNmY2Ew
YzcyNWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUHJvcGVydHlBY2Nl
c3NTaWRlSW5saW5lQ2FjaGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUHJv
cGVydHlBY2Nlc3NTaWRlSW5saW5lQ2FjaGUuY3BwCkBAIC00NDYsMzUgKzQ0NiwxNiBAQCB2b2lk
IFByb3BlcnR5QWNjZXNzU2lkZUlubGluZUNhY2hlOjpvYnNlcnZlU3RydWN0dXJlR2V0QnlJZChi
b29sIGlzSGl0LCBjb25zdCBKUwogICAgIGlmICghbV92YXJpYW50R3JvdXBzLmNvbnRhaW5zKGhh
c2hLZXkpKQogICAgICAgICBtX3ZhcmlhbnRHcm91cHMuYWRkKGhhc2hLZXksIHN0ZDo6bWFrZV91
bmlxdWU8U2lkZUFjY2Vzc0Nhc2VHcm91cD4oa2V5KSk7CiAgICAgYXV0byYgZ3JvdXAgPSAqbV92
YXJpYW50R3JvdXBzLmdldChoYXNoS2V5KTsKLSAgICBhdXRvJiBidWNrZXQgPSBtX2dldEJ5SWRK
dW1wVGFibGVbYnVja2V0Rm9yKGtleSldOwogICAgIAogICAgIGlmIChncm91cC5nZW5lcmF0ZWRG
aW5hbENvZGUpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBpZiAoYnVja2V0KSB7Ci0gICAg
ICAgIGF1dG8gZXhpc3RpbmdBZGRyZXNzID0gYnVja2V0LmV4ZWN1dGFibGVBZGRyZXNzKCk7Ci0g
ICAgICAgIGlmICghZ3JvdXAubV9zdHViUm91dGluZSB8fCBleGlzdGluZ0FkZHJlc3MgIT0gZ3Jv
dXAubV9zdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpKSB7Ci0g
ICAgICAgICAgICBTaWRlQWNjZXNzQ2FzZUdyb3VwKiBmb3VuZCA9IG51bGxwdHI7Ci0gICAgICAg
ICAgICBmb3IgKGF1dG8mIGt2IDogbV92YXJpYW50R3JvdXBzKSB7Ci0gICAgICAgICAgICAgICAg
aWYgKGt2LnZhbHVlICYmIGt2LnZhbHVlLT5tX3N0dWJSb3V0aW5lCi0gICAgICAgICAgICAgICAg
ICAgICAgICAmJiBrdi52YWx1ZS0+bV9zdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKS5leGVjdXRh
YmxlQWRkcmVzcygpID09IGV4aXN0aW5nQWRkcmVzcykgewotICAgICAgICAgICAgICAgICAgICBm
b3VuZCA9ICYqa3YudmFsdWU7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIEFTU0VSVChmb3VuZCk7Ci0gICAg
ICAgICAgICBkYXRhTG9nTG5JZihTaWRlQWNjZXNzQ2FjaGVJbnRlcm5hbDo6dmVyYm9zZSwgIkhh
c2ggY29sbGlzaW9uIG9uICIsIGlkZW50aWZpZXIsICIgZXhpc3RpbmcgZW50cnk6ICIsIGZvdW5k
LT5tX2tleSk7Ci0gICAgICAgICAgICBtX3ZhcmlhbnRHcm91cHMucmVtb3ZlKGhhc2hLZXkpOwot
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotICAgIAogICAgIGF1dG8gbnVt
VmFyaWFudHMgPSBncm91cC5udW1WYXJpYW50cygpOwogICAgIGF1dG8gcmVzdWx0ID0gZ3JvdXAu
dHJ5Q2FjaGVHZXRCeUlkKHN0cnVjdHVyZS0+Z2xvYmFsT2JqZWN0KCksIHN0cnVjdHVyZSwgYmFz
ZVZhbHVlLmFzQ2VsbCgpLCBpZGVudGlmaWVyLCBzbG90KTsKIAogICAgIGlmIChyZXN1bHQuZ2Vu
ZXJhdGVkU29tZUNvZGUoKSkgewogICAgICAgICBkYXRhTG9nTG5JZihTaWRlQWNjZXNzQ2FjaGVJ
bnRlcm5hbDo6dmVyYm9zZSwgIlBhdGhjaGluZyAiLCBzdHJ1Y3R1cmUtPmlkKCksICIgYW5kICIs
IGlkZW50aWZpZXIsICIgdG8gIiwgUmF3UG9pbnRlcihyZXN1bHQuY29kZSgpLmV4ZWN1dGFibGVB
ZGRyZXNzKCkpKTsKLSAgICAgICAgYnVja2V0ID0gRnVuY3Rpb25QdHI8SklUU3R1YlJvdXRpbmVQ
dHJUYWc+KHJlc3VsdC5jb2RlKCkpOworICAgICAgICBzdHJ1Y3R1cmUtPnByb3BlcnR5QWNjZXNz
U2lkZUlubGluZUNhY2hlKCkgPSBGdW5jdGlvblB0cjxKSVRTdHViUm91dGluZVB0clRhZz4ocmVz
dWx0LmNvZGUoKSk7CiAgICAgICAgIAogICAgICAgICBpZiAocmVzdWx0LmdlbmVyYXRlZEZpbmFs
Q29kZSgpKSB7CiAgICAgICAgICAgICBkYXRhTG9nTG5JZihTaWRlQWNjZXNzQ2FjaGVJbnRlcm5h
bDo6dmVyYm9zZSwgIkdlbmVyYXRlZCBmaW5hbCBjb2RlIGZvciAiLCBzdHJ1Y3R1cmUtPmlkKCks
ICIgYW5kICIsIGlkZW50aWZpZXIpOwpAQCAtNDgyLDcgKzQ2Myw4IEBAIHZvaWQgUHJvcGVydHlB
Y2Nlc3NTaWRlSW5saW5lQ2FjaGU6Om9ic2VydmVTdHJ1Y3R1cmVHZXRCeUlkKGJvb2wgaXNIaXQs
IGNvbnN0IEpTCiAgICAgICAgIH0KICAgICB9IGVsc2UgaWYgKHJlc3VsdC5zaG91bGRHaXZlVXBO
b3coKSkgewogICAgICAgICBkYXRhTG9nTG5JZihTaWRlQWNjZXNzQ2FjaGVJbnRlcm5hbDo6dmVy
Ym9zZSwgIlNob3VsZCBnaXZlIHVwIG9uICIsIHN0cnVjdHVyZS0+aWQoKSwgIiBhbmQgIiwgaWRl
bnRpZmllcik7Ci0gICAgICAgIGJ1Y2tldCA9IG51bGxwdHI7CisgICAgICAgIGdyb3VwLmdlbmVy
YXRlZEZpbmFsQ29kZSA9IHRydWU7CisgICAgICAgIHN0cnVjdHVyZS0+cHJvcGVydHlBY2Nlc3NT
aWRlSW5saW5lQ2FjaGUoKSA9IG51bGxwdHI7CiAgICAgfQogICAgIAogICAgIHN0dWJJbmZvLT5z
ZWVuU3RydWN0dXJlc0NvdW50ICs9IGdyb3VwLm51bVZhcmlhbnRzKCkgLSBudW1WYXJpYW50czsK
QEAgLTUwNCw5ICs0ODYsNyBAQCB2b2lkIFByb3BlcnR5QWNjZXNzU2lkZUlubGluZUNhY2hlOjpn
ZW5lcmF0ZUNhbGxzaXRlKENDYWxsSGVscGVycyYgaml0LCBDYWNoZWFibAogICAgIEdQUlJlZyBi
YXNlID0gU2lkZVByb3BlcnR5QWNjZXNzUmVnaXN0ZXJzOjpiYXNlOwogICAgIEdQUlJlZyBwcm9w
ZXJ0eSA9IFNpZGVQcm9wZXJ0eUFjY2Vzc1JlZ2lzdGVyczo6cHJvcGVydHk7CiAgICAgR1BSUmVn
IHNjcmF0Y2ggPSBJbnZhbGlkR1BSUmVnOwotCi0gICAgYXV0byYgdm0gPSBqaXQudm0oKTsKLSAg
ICB2b2lkKiBzaWRlSUNUYWJsZSA9IHZtLmhlYXAucHJvcGVydHlBY2Nlc3NTaWRlSW5saW5lQ2Fj
aGUoKS5qdW1wVGFibGUoMCk7CisgICAgR1BSUmVnIHNjcmF0Y2gyID0gSW52YWxpZEdQUlJlZzsK
IAogICAgIEFTU0VSVChvcmlnaW5hbEJhc2UgIT0gSW52YWxpZEdQUlJlZyk7CiAgICAgQVNTRVJU
KG9yaWdpbmFsUmVzdWx0ICE9IEludmFsaWRHUFJSZWcpOwpAQCAtNTE3LDEzICs0OTcsMTAgQEAg
dm9pZCBQcm9wZXJ0eUFjY2Vzc1NpZGVJbmxpbmVDYWNoZTo6Z2VuZXJhdGVDYWxsc2l0ZShDQ2Fs
bEhlbHBlcnMmIGppdCwgQ2FjaGVhYmwKICAgICBhbGxvY2F0b3IubG9jayhiYXNlKTsKICAgICBh
bGxvY2F0b3IubG9jayhwcm9wZXJ0eSk7CiAgICAgc2NyYXRjaCA9IGFsbG9jYXRvci5hbGxvY2F0
ZVNjcmF0Y2hHUFIoKTsKKyAgICBzY3JhdGNoMiA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hH
UFIoKTsKICAgICAKLSAgICBqaXQubG9hZDMyKENDYWxsSGVscGVyczo6QWRkcmVzcyhvcmlnaW5h
bEJhc2UsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHNjcmF0Y2gpOwotICAgIGppdC5h
bmQ2NChDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW02NChQcm9wZXJ0eUFjY2Vzc1NpZGVJbmxpbmVD
YWNoZTo6dmFyaWFudFRhYmxlTWFzayksIHNjcmF0Y2gpOwotICAgIHN0YXRpY19hc3NlcnQoUHJv
cGVydHlBY2Nlc3NTaWRlSW5saW5lQ2FjaGU6OnZhcmlhbnRUYWJsZVNoaWZ0ID49IDMpOwotICAg
IGppdC5yc2hpZnQzMihDQ2FsbEhlbHBlcnM6OkltbTMyKFByb3BlcnR5QWNjZXNzU2lkZUlubGlu
ZUNhY2hlOjp2YXJpYW50VGFibGVTaGlmdC0zKSwgc2NyYXRjaCk7Ci0gICAgaml0LmFkZDY0KEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbTY0KHJlaW50ZXJwcmV0X2Nhc3Q8dWludDY0X3Q+KHNpZGVJ
Q1RhYmxlKSksIHNjcmF0Y2gpOwotICAgIGppdC5sb2FkNjQoQ0NhbGxIZWxwZXJzOjpBZGRyZXNz
KHNjcmF0Y2gpLCBzY3JhdGNoKTsKKyAgICBqaXQuZW1pdExvYWRTdHJ1Y3R1cmUoaml0LnZtKCks
IG9yaWdpbmFsQmFzZSwgc2NyYXRjaCwgc2NyYXRjaDIpOworICAgIGppdC5sb2FkNjQoQ0NhbGxI
ZWxwZXJzOjpBZGRyZXNzKHNjcmF0Y2gsIFN0cnVjdHVyZTo6cHJvcGVydHlBY2Nlc3NTaWRlSW5s
aW5lQ2FjaGVPZmZzZXQoKSksIHNjcmF0Y2gpOwogICAgIHRvU2xvd3BhdGguYXBwZW5kKGppdC5i
cmFuY2hUZXN0MzIoQ0NhbGxIZWxwZXJzOjpaZXJvLCBzY3JhdGNoKSk7CiAKICAgICB7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Byb3BlcnR5QWNjZXNzU2lkZUlubGlu
ZUNhY2hlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Byb3BlcnR5QWNjZXNzU2lkZUlu
bGluZUNhY2hlLmgKaW5kZXggZmU2ODQ5YTM1YjI0Li5iMTkwNTJkNGE3Y2QgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUHJvcGVydHlBY2Nlc3NTaWRlSW5saW5lQ2FjaGUu
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Byb3BlcnR5QWNjZXNzU2lkZUlubGlu
ZUNhY2hlLmgKQEAgLTU1LDEzICs1NSw5IEBAIHB1YmxpYzoKICAgICB2b2lkIG9ic2VydmVTdHJ1
Y3R1cmVHZXRCeUlkKGJvb2wgaXNIaXQsIGNvbnN0IEpTVmFsdWUgYmFzZSwKICAgICAgICAgY29u
c3QgQ2FjaGVhYmxlSWRlbnRpZmllciYgaWRlbnRpZmllciwgY29uc3QgUHJvcGVydHlTbG90JiBz
bG90LAogICAgICAgICBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8pOwotICAgIHZvaWQqIGp1
bXBUYWJsZShzaXplX3QgaSkgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oJm1fZ2V0
QnlJZEp1bXBUYWJsZVtpXSk7IH0KIAogICAgIGJvb2wgdmlzaXRXZWFrKFZNJik7CiAKLSAgICBz
dGF0aWMgY29uc3RleHByIHVpbnQ2NF90IHZhcmlhbnRUYWJsZU1hc2sgPSAweDAwMDBGRkYwOwot
ICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IHZhcmlhbnRUYWJsZVNoaWZ0ID0gNDsKLSAgICBz
dGF0aWMgY29uc3RleHByIHNpemVfdCB2YXJpYW50VGFibGVFbnRyaWVzID0gMTw8MTI7CiAgICAg
c3RhdGljIHZvaWQgZ2VuZXJhdGVDYWxsc2l0ZShDQ2FsbEhlbHBlcnMmIGppdCwgQ2FjaGVhYmxl
SWRlbnRpZmllciBpZGVudGlmaWVyLAogICAgICAgICBTdHJ1Y3R1cmVTdHViSW5mbyogY2FsbHNp
dGVTdHViSW5mbywgR1BSUmVnIG9yaWdpbmFsQmFzZSwgR1BSUmVnIG9yaWdpbmFsUmVzdWx0LCBS
ZWdpc3RlclNldCBtdXN0UHJlc2VydmUsCiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlz
dCYgdG9Eb25lLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QmIHRvU2xvd3BhdGgpOwpAQCAtNjks
MTQgKzY1LDcgQEAgcHVibGljOgogICAgIHN0ZDo6b3B0aW9uYWw8Q29kZUxvY2F0aW9uTGFiZWw8
SklUU3R1YlJvdXRpbmVQdHJUYWc+PiBtYWtlQ2FsbHNpdGVUaHVuayhDb2RlQmxvY2sqIGNhbGxz
aXRlLCBDYWNoZWFibGVJZGVudGlmaWVyIGlkZW50aWZpZXIsIFN0cnVjdHVyZVN0dWJJbmZvKiBj
YWxsc2l0ZVN0dWJJbmZvKTsKIHByaXZhdGU6CiAgICAgVk0qIG1fdm07Ci0KLSAgICBzdGF0aWNf
YXNzZXJ0KCgoc3RkOjpudW1lcmljX2xpbWl0czx0eXBlb2YodmFyaWFudFRhYmxlTWFzayk+Ojpt
YXgoKSZ2YXJpYW50VGFibGVNYXNrKT4+dmFyaWFudFRhYmxlU2hpZnQpICsgMSA9PSB2YXJpYW50
VGFibGVFbnRyaWVzKTsKLSAgICBzdGF0aWMgaW5saW5lIHNpemVfdCBidWNrZXRGb3IoVmFyaWFu
dEtleVR5cGUga2V5KQotICAgIHsKLSAgICAgICAgcmV0dXJuIChrZXkmdmFyaWFudFRhYmxlTWFz
ayk+PnZhcmlhbnRUYWJsZVNoaWZ0OwotICAgIH0KLQotICAgIFZlY3RvcjxGdW5jdGlvblB0cjxK
SVRTdHViUm91dGluZVB0clRhZz4+IG1fZ2V0QnlJZEp1bXBUYWJsZSB7dmFyaWFudFRhYmxlRW50
cmllcywgbnVsbHB0cn07CisgICAgCiAgICAgSGFzaE1hcDxWYXJpYW50S2V5SGFzaGFibGVUeXBl
LCBzdGQ6OnVuaXF1ZV9wdHI8U2lkZUFjY2Vzc0Nhc2VHcm91cD4+IG1fdmFyaWFudEdyb3VwczsK
ICAgICBWZWN0b3I8UmVmUHRyPFNpZGVBY2Nlc3NKSVRTdHViUm91dGluZT4+IG1fY2FsbHNpdGVz
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCmluZGV4IGI0OTg2
MWJjYThkNS4uMzg1YzdiYzU4NzA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TdHJ1Y3R1cmUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
dHJ1Y3R1cmUuaApAQCAtMTY3LDYgKzE2Nyw3IEBAIHB1YmxpYzoKICAgICBTdHJ1Y3R1cmVJRCBp
ZCgpIGNvbnN0IHsgcmV0dXJuIG1fYmxvYi5zdHJ1Y3R1cmVJRCgpOyB9CiAgICAgaW50MzJfdCBv
YmplY3RJbml0aWFsaXphdGlvbkJsb2IoKSBjb25zdCB7IHJldHVybiBtX2Jsb2IuYmxvYkV4Y2x1
ZGluZ1N0cnVjdHVyZUlEKCk7IH0KICAgICBpbnQ2NF90IGlkQmxvYigpIGNvbnN0IHsgcmV0dXJu
IG1fYmxvYi5ibG9iKCk7IH0KKyAgICBGdW5jdGlvblB0cjxKSVRTdHViUm91dGluZVB0clRhZz4m
IHByb3BlcnR5QWNjZXNzU2lkZUlubGluZUNhY2hlKCkgeyByZXR1cm4gbV9wcm9wZXJ0eUFjY2Vz
c1NpZGVJbmxpbmVDYWNoZTsgfQogCiAgICAgYm9vbCBpc1Byb3h5KCkgY29uc3QKICAgICB7CkBA
IC01OTYsNiArNTk3LDExIEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHJldHVybiBPQkpFQ1Rf
T0ZGU0VUT0YoU3RydWN0dXJlLCBtX3ByZXZpb3VzT3JSYXJlRGF0YSk7CiAgICAgfQorICAgIAor
ICAgIHN0YXRpYyBwdHJkaWZmX3QgcHJvcGVydHlBY2Nlc3NTaWRlSW5saW5lQ2FjaGVPZmZzZXQo
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihTdHJ1Y3R1cmUsIG1fcHJv
cGVydHlBY2Nlc3NTaWRlSW5saW5lQ2FjaGUpOworICAgIH0KIAogICAgIHN0YXRpYyBTdHJ1Y3R1
cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYpOwogICAgICAgICAKQEAgLTg3MCw2ICs4NzYsNyBAQCBw
cml2YXRlOgogICAgIG11dGFibGUgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZUNoYWluPiBtX2NhY2hl
ZFByb3RvdHlwZUNoYWluOwogCiAgICAgV3JpdGVCYXJyaWVyPEpTQ2VsbD4gbV9wcmV2aW91c09y
UmFyZURhdGE7CisgICAgRnVuY3Rpb25QdHI8SklUU3R1YlJvdXRpbmVQdHJUYWc+IG1fcHJvcGVy
dHlBY2Nlc3NTaWRlSW5saW5lQ2FjaGU7CiAKICAgICBSZWZQdHI8VW5pcXVlZFN0cmluZ0ltcGw+
IG1fdHJhbnNpdGlvblByb3BlcnR5TmFtZTsKIAotLSAKMi4zMC4xIChBcHBsZSBHaXQtMTMwKQoK
CkZyb20gNThiMThkZTNlZTA5Nzk4ZWE0ODc0NDcxNDUxOWUzMmU3NDU4MTBjYiBNb24gU2VwIDE3
IDAwOjAwOjAwIDIwMDEKRnJvbTogSnVzdGluIE1pY2hhdWQgPGp1c3Rpbl9taWNoYXVkQGFwcGxl
LmNvbT4KRGF0ZTogRnJpLCAyMiBPY3QgMjAyMSAxMTo0NTozOCAtMDcwMApTdWJqZWN0OiBbUEFU
Q0ggMTQvMTddIC4KCi0tLQogSlNUZXN0cy9taWNyb2JlbmNobWFya3MvZ2V0LWJ5LWlkLWJsb3dv
dXQtc3RydWN0dXJlLWljLmpzICAgfCAxIC0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
T3BlcmF0aW9ucy5jcHAgICAgICAgICAgICAgICAgIHwgMiAtLQogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9Qcm9wZXJ0eUFjY2Vzc1NpZGVJbmxpbmVDYWNoZS5jcHAgfCAyICstCiAzIGZpbGVz
IGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCA0IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL0pT
VGVzdHMvbWljcm9iZW5jaG1hcmtzL2dldC1ieS1pZC1ibG93b3V0LXN0cnVjdHVyZS1pYy5qcyBi
L0pTVGVzdHMvbWljcm9iZW5jaG1hcmtzL2dldC1ieS1pZC1ibG93b3V0LXN0cnVjdHVyZS1pYy5q
cwppbmRleCA0YTYyNDc2NmFkOGMuLmU4OTcyOTg2MGE2ZiAxMDA2NDQKLS0tIGEvSlNUZXN0cy9t
aWNyb2JlbmNobWFya3MvZ2V0LWJ5LWlkLWJsb3dvdXQtc3RydWN0dXJlLWljLmpzCisrKyBiL0pT
VGVzdHMvbWljcm9iZW5jaG1hcmtzL2dldC1ieS1pZC1ibG93b3V0LXN0cnVjdHVyZS1pYy5qcwpA
QCAtMTMsNyArMTMsNiBAQCBub0lubGluZShmb28yKQogZnVuY3Rpb24gY2hlY2sobywgZSkgewog
ICAgIGlmIChmb28obykgIT0gZSkKICAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0IGZv
ciBvYmplY3Q6ICIgKyBvCi0gICAgZm9vMihvKQogfQogCiBmb3IgKHZhciBpID0gMDsgaSA8IDFl
NzsgKytpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJh
dGlvbnMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcApp
bmRleCA0ZTExNTM1OTc0MTYuLjE3OGJlZDA3YjAxZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCkBAIC0yODcsOCArMjg3LDYgQEAgSlNDX0RFRklORV9K
SVRfT1BFUkFUSU9OKG9wZXJhdGlvbkdldEJ5SWQsIEVuY29kZWRKU1ZhbHVlLCAoSlNHbG9iYWxP
YmplY3QqIGdsb2IKICAgICBDYWNoZWFibGVJZGVudGlmaWVyIGlkZW50aWZpZXIgPSBDYWNoZWFi
bGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tUmF3Qml0cyhyYXdDYWNoZWFibGVJZGVudGlmaWVyKTsK
ICAgICBJZGVudGlmaWVyIGlkZW50ID0gSWRlbnRpZmllcjo6ZnJvbVVpZCh2bSwgaWRlbnRpZmll
ci51aWQoKSk7CiAgICAgCi0gICAgZGF0YUxvZ0xuKCJzbG93UGF0aCgiLCBpZGVudCwgIikiLCBi
YXNlVmFsdWUuYXNDZWxsKCktPnN0cnVjdHVyZUlEKCkpOwotICAgIAogICAgIGJvb2wgZm91bmQg
PSBmYWxzZTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGJhc2VWYWx1ZS5nZXQoZ2xvYmFsT2JqZWN0
LCBpZGVudCwgc2xvdCwgZm91bmQpOwogICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9Qcm9wZXJ0eUFjY2Vzc1NpZGVJbmxpbmVDYWNoZS5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L1Byb3BlcnR5QWNjZXNzU2lkZUlubGluZUNhY2hlLmNwcAppbmRleCA5
OWNmY2EwYzcyNWUuLjE4ZTM2MzA2OWY3NCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9Qcm9wZXJ0eUFjY2Vzc1NpZGVJbmxpbmVDYWNoZS5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9Qcm9wZXJ0eUFjY2Vzc1NpZGVJbmxpbmVDYWNoZS5jcHAKQEAgLTQ3
LDcgKzQ3LDcgQEAKIG5hbWVzcGFjZSBKU0MgewogCiBuYW1lc3BhY2UgU2lkZUFjY2Vzc0NhY2hl
SW50ZXJuYWwgewotc3RhdGljIGNvbnN0ZXhwciBib29sIHZlcmJvc2UgPSB0cnVlOworc3RhdGlj
IGNvbnN0ZXhwciBib29sIHZlcmJvc2UgPSBmYWxzZTsKIHN0YXRpYyBjb25zdGV4cHIgdWludDMy
X3QgcmVwYXRjaEJ1ZmZlcmluZ0NvdW50ZG93biA9IDMyOwogc3RhdGljIGNvbnN0ZXhwciB1aW50
MzJfdCBtYXhWYXJpYW50c0Zvckdyb3VwID0gMzI7CiBzdGF0aWMgY29uc3RleHByIHVpbnQzMl90
IG1heFZhcmlhbnRzRm9yQ2FsbHNpdGUgPSA2NDsKLS0gCjIuMzAuMSAoQXBwbGUgR2l0LTEzMCkK
CgpGcm9tIDJjNjZhYzU0YTdiNDg4YTEzMmFkYWUyNjcwODdkZWU0YTg1MThiYmIgTW9uIFNlcCAx
NyAwMDowMDowMCAyMDAxCkZyb206IEp1c3RpbiBNaWNoYXVkIDxqdXN0aW5fbWljaGF1ZEBhcHBs
ZS5jb20+CkRhdGU6IEZyaSwgMjIgT2N0IDIwMjEgMTY6MTU6NDkgLTA3MDAKU3ViamVjdDogW1BB
VENIIDE1LzE3XSAuCgotLS0KIC4uLi9nZXQtYnktaWQtYmxvd291dC1zdHJ1Y3R1cmUtaWMuanMg
ICAgICAgICB8ICAxNiArKy0KIC4uLi9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuY3BwICAg
ICAgICAgICB8ICAyNSAtLS0tLQogLi4uL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oICAg
ICAgICAgICAgIHwgIDEzICstLQogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRp
b25zLmNwcCAgIHwgICA4ICstCiAuLi4vaml0L1Byb3BlcnR5QWNjZXNzU2lkZUlubGluZUNhY2hl
LmNwcCAgICAgfCAxMDEgKysrKysrKysrKystLS0tLS0tCiAuLi4vaml0L1Byb3BlcnR5QWNjZXNz
U2lkZUlubGluZUNhY2hlLmggICAgICAgfCAgMjQgKysrLS0KIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvUmVwYXRjaC5jcHAgICAgICAgICB8ICAgNCArLQogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU3RydWN0dXJlLmggICAgIHwgICA3IC0tCiA4IGZpbGVzIGNoYW5nZWQsIDEwNCBp
bnNlcnRpb25zKCspLCA5NCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9KU1Rlc3RzL21pY3Jv
YmVuY2htYXJrcy9nZXQtYnktaWQtYmxvd291dC1zdHJ1Y3R1cmUtaWMuanMgYi9KU1Rlc3RzL21p
Y3JvYmVuY2htYXJrcy9nZXQtYnktaWQtYmxvd291dC1zdHJ1Y3R1cmUtaWMuanMKaW5kZXggZTg5
NzI5ODYwYTZmLi4zZGM3ODAzOTE5MjUgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvbWljcm9iZW5jaG1h
cmtzL2dldC1ieS1pZC1ibG93b3V0LXN0cnVjdHVyZS1pYy5qcworKysgYi9KU1Rlc3RzL21pY3Jv
YmVuY2htYXJrcy9nZXQtYnktaWQtYmxvd291dC1zdHJ1Y3R1cmUtaWMuanMKQEAgLTEsNSArMSw4
IEBACitmdW5jdGlvbiBibGFja2JveChvKSB7IHJldHVybiBvOyB9Citub0lubGluZShibGFja2Jv
eCkKKwogZnVuY3Rpb24gZm9vKG8pIHsKLSAgICByZXR1cm4gby5mCisgICAgcmV0dXJuIG9bYmxh
Y2tib3goImYiKV0KIH0KIAogbm9JbmxpbmUoZm9vKQpAQCAtMjQsOSArMjcsMTQgQEAgZm9yICh2
YXIgaSA9IDA7IGkgPCAxZTc7ICsraSkgewogICAgIGNoZWNrKHtnOjg5LCBmOjZ9LCA2KQogICAg
IGNoZWNrKHtoOjg5LCBmOjd9LCA3KQogICAgIGNoZWNrKHtpOjg5LCBmOjh9LCA4KQotICAgIGNo
ZWNrKHthOjEsIGI6MiwgZjo5fSwgOSkKLSAgICBjaGVjayh7YToxLCBiOjIsIGY6MTAsIGM6MyB9
LCAxMCkKLSAgICBjaGVjayh7YToxLCBiOjIsIGM6MywgZDo0LCBlOjUsIGY6MTF9LCAxMSkKKyAg
ICBjaGVjayh7ajo4OSwgZjo3fSwgNykKKyAgICBjaGVjayh7azo4OSwgZjo3fSwgNykKKyAgICBj
aGVjayh7bDo4OSwgZjo3fSwgNykKKyAgICBjaGVjayh7bTo4OSwgZjo3fSwgNykKKyAgICBjaGVj
ayh7bjo4OSwgZjo3fSwgNykKKyAgICBjaGVjayh7bzoxLCBiOjIsIGY6OX0sIDkpCisgICAgY2hl
Y2soe3A6MSwgYjoyLCBmOjEwLCBjOjMgfSwgMTApCisgICAgY2hlY2soe3E6MSwgYjoyLCBjOjMs
IGQ6NCwgZTo1LCBmOjExfSwgMTEpCiAgICAgaWYgKGZvbzIoe2c6ODksIGY6Nn0pICE9IDg5KQog
ICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQiCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5jcHAKaW5kZXggZmQyNTYy
OTg3Njg4Li45OGViMmMyYjM3YWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuY3BwCkBAIC0xMTUsMzEgKzExNSw2IEBAIHZv
aWQgSklUQnlJZEdlbmVyYXRvcjo6Z2VuZXJhdGVGYXN0Q29tbW9uKE1hY3JvQXNzZW1ibGVyJiBq
aXQsIHNpemVfdCBpbmxpbmVJQ1NpCiAgICAgbV9kb25lID0gaml0LmxhYmVsKCk7CiB9CiAKLXZv
aWQgSklUQnlJZEdlbmVyYXRvcjo6Z2VuZXJhdGVTaWRlSW5saW5lQ2FjaGUoQ0NhbGxIZWxwZXJz
JiBqaXQsIHNpemVfdCBpbmxpbmVJQ1NpemUsIENhY2hlYWJsZUlkZW50aWZpZXIgcHJvcGVydHlO
YW1lKQotewotICAgIFJFTEVBU0VfQVNTRVJUKE9wdGlvbnM6OnVzZVByb3BlcnR5QWNjZXNzU2lk
ZUlDKCkpOwotICAgIEFTU0VSVChwcm9wZXJ0eU5hbWUpOwotCi0gICAgbV9zdGFydCA9IGppdC5s
YWJlbCgpOwotICAgIHNpemVfdCBzdGFydFNpemUgPSBqaXQubV9hc3NlbWJsZXIuYnVmZmVyKCku
Y29kZVNpemUoKTsKLQotICAgIENDYWxsSGVscGVyczo6SnVtcExpc3QgdG9Eb25lOwotICAgIEND
YWxsSGVscGVyczo6SnVtcExpc3QgdG9TbG93cGF0aDsKLSAgICBQcm9wZXJ0eUFjY2Vzc1NpZGVJ
bmxpbmVDYWNoZTo6Z2VuZXJhdGVDYWxsc2l0ZShqaXQsIHByb3BlcnR5TmFtZSwKLSAgICAgICAg
bV9zdHViSW5mbywgbV9zdHViSW5mby0+YmFzZUdQUiwgbV9zdHViSW5mby0+dmFsdWVHUFIsIG1f
c3R1YkluZm8tPnVzZWRSZWdpc3RlcnMsCi0gICAgICAgIHRvRG9uZSwgdG9TbG93cGF0aCk7Ci0g
ICAgCi0gICAgLy8gVE9ETwotCi0gICAgc2l6ZV90IGp1bXBTaXplID0gaml0Lm1fYXNzZW1ibGVy
LmJ1ZmZlcigpLmNvZGVTaXplKCkgLSBzdGFydFNpemU7Ci0gICAgaWYgKGlubGluZUlDU2l6ZSA+
PSBqdW1wU2l6ZSkgewotICAgICAgICBzaXplX3Qgbm9wc1RvRW1pdEluQnl0ZXMgPSBpbmxpbmVJ
Q1NpemUgLSBqdW1wU2l6ZTsKLSAgICAgICAgaml0LmVtaXROb3BzKG5vcHNUb0VtaXRJbkJ5dGVz
KTsKLSAgICB9Ci0gICAgQVNTRVJUKGppdC5tX2Fzc2VtYmxlci5idWZmZXIoKS5jb2RlU2l6ZSgp
IC0gc3RhcnRTaXplID49IGlubGluZUlDU2l6ZSk7Ci0gICAgbV9kb25lID0gaml0LmxhYmVsKCk7
Ci19Ci0KIEpJVEdldEJ5SWRHZW5lcmF0b3I6OkpJVEdldEJ5SWRHZW5lcmF0b3IoCiAgICAgQ29k
ZUJsb2NrKiBjb2RlQmxvY2ssIEpJVFR5cGUgaml0VHlwZSwgQ29kZU9yaWdpbiBjb2RlT3JpZ2lu
LCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlLCBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVy
cywKICAgICBDYWNoZWFibGVJZGVudGlmaWVyIHByb3BlcnR5TmFtZSwgSlNWYWx1ZVJlZ3MgYmFz
ZSwgSlNWYWx1ZVJlZ3MgdmFsdWUsIEdQUlJlZyBzdHViSW5mb0dQUiwgQWNjZXNzVHlwZSBhY2Nl
c3NUeXBlKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVD
YWNoZUdlbmVyYXRvci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNo
ZUdlbmVyYXRvci5oCmluZGV4IDA4MTQ4MjczMDc1YS4uNGQwYjg2NDMwZDc1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oCkBA
IC0xMjUsMTkgKzEyNSwxNiBAQCBzdHJ1Y3QgQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3Rl
cnMgewogCiBzdHJ1Y3QgU2lkZVByb3BlcnR5QWNjZXNzUmVnaXN0ZXJzIHsKICAgICBzdGF0aWMg
Y29uc3RleHByIEdQUlJlZyByZXN1bHQgPSBHUFJJbmZvOjpyZWdUMDsKLSAgICBzdGF0aWNfYXNz
ZXJ0KHJlc3VsdCA9PSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3VsdCk7CisgICAgc3Rh
dGljX2Fzc2VydChyZXN1bHQgPT0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cmVzdWx0KTsK
IAogICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBHUFJJbmZvOjpyZWdUMDsKLSAg
ICBzdGF0aWNfYXNzZXJ0KGJhc2UgPT0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlKTsK
KyAgICBzdGF0aWNfYXNzZXJ0KGJhc2UgPT0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFz
ZSk7CiAKICAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eSA9IEdQUkluZm86OnJl
Z1QxOwotICAgIHN0YXRpY19hc3NlcnQocHJvcGVydHkgPT0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0
ZXJzOjpzdHViSW5mbyk7Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoID0g
R1BSSW5mbzo6cmVnVDI7Ci0gICAgc3RhdGljX2Fzc2VydChzY3JhdGNoID09IEJhc2VsaW5lR2V0
QnlJZFJlZ2lzdGVyczo6c2NyYXRjaCk7CisgICAgc3RhdGljX2Fzc2VydChwcm9wZXJ0eSA9PSBC
YXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eSk7CiAKLSAgICBzdGF0aWMgY29uc3Rl
eHByIEdQUlJlZyBkb250Q2xvYmJlclJlZ2lzdGVyID0gR1BSSW5mbzo6cmVnVDM7Ci0gICAgc3Rh
dGljX2Fzc2VydChzY3JhdGNoID09IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6c2NyYXRjaCk7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaCA9IEdQUkluZm86OnJlZ1QzOwor
ICAgIHN0YXRpY19hc3NlcnQoc2NyYXRjaCA9PSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpz
Y3JhdGNoKTsKIH07CiAKIHN0cnVjdCBCYXNlbGluZUluQnlJZFJlZ2lzdGVycyB7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAppbmRleCAxNzhiZWQwN2IwMWUu
LjNhMGNjOTMxNWRmZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRP
cGVyYXRpb25zLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlv
bnMuY3BwCkBAIC0yOTEsNyArMjkxLDYgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJh
dGlvbkdldEJ5SWQsIEVuY29kZWRKU1ZhbHVlLCAoSlNHbG9iYWxPYmplY3QqIGdsb2IKICAgICBK
U1ZhbHVlIHJlc3VsdCA9IGJhc2VWYWx1ZS5nZXQoZ2xvYmFsT2JqZWN0LCBpZGVudCwgc2xvdCwg
Zm91bmQpOwogICAgIAogICAgIExPR19JQygoSUNFdmVudDo6T3BlcmF0aW9uR2V0QnlJZCwgYmFz
ZVZhbHVlLmNsYXNzSW5mb09yTnVsbCh2bSksIGlkZW50LCBiYXNlVmFsdWUgPT0gc2xvdC5zbG90
QmFzZSgpKSk7Ci0gICAgdm0uaGVhcC5wcm9wZXJ0eUFjY2Vzc1NpZGVJbmxpbmVDYWNoZSgpLm9i
c2VydmVTdHJ1Y3R1cmVHZXRCeUlkKGZvdW5kLCBiYXNlVmFsdWUsIGlkZW50aWZpZXIsIHNsb3Qs
IHN0dWJJbmZvKTsKICAgICAKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9
CkBAIC0yMzQwLDYgKzIzMzksMTMgQEAgQUxXQVlTX0lOTElORSBzdGF0aWMgSlNWYWx1ZSBnZXRC
eVZhbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGMKICAgICAgICAg
ICAgIGlmIChleGlzdGluZ0F0b21TdHJpbmcpIHsKICAgICAgICAgICAgICAgICBpZiAoSlNWYWx1
ZSByZXN1bHQgPSBiYXNlVmFsdWUuYXNDZWxsKCktPmZhc3RHZXRPd25Qcm9wZXJ0eSh2bSwgc3Ry
dWN0dXJlLCBleGlzdGluZ0F0b21TdHJpbmcuZ2V0KCkpKSB7CiAgICAgICAgICAgICAgICAgICAg
IEFTU0VSVChjYWxsRnJhbWUtPmJ5dGVjb2RlSW5kZXgoKSAhPSBCeXRlY29kZUluZGV4KDApKTsK
KyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGF1dG8gaWRlbnQgPSBD
YWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGV4aXN0aW5n
QXRvbVN0cmluZy5sZWFrUmVmKCkpOworICAgICAgICAgICAgICAgICAgICBiYXNlVmFsdWUuZ2V0
UHJvcGVydHlTbG90KGdsb2JhbE9iamVjdCwgaWRlbnQudWlkKCksIFsmXSAoYm9vbCBmb3VuZCwg
UHJvcGVydHlTbG90JiBzbG90KSAtPiBKU1ZhbHVlIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHZtLmhlYXAucHJvcGVydHlBY2Nlc3NTaWRlSW5saW5lQ2FjaGUoKS5vYnNlcnZlU3RydWN0dXJl
R2V0QnlJZChmb3VuZCwgYmFzZVZhbHVlLCBpZGVudCwgc2xvdCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICAgICAgICAgICAgICAgICAgfSk7Cisg
ICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0Owog
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvUHJvcGVydHlBY2Nlc3NTaWRlSW5saW5lQ2FjaGUuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9Qcm9wZXJ0eUFjY2Vzc1NpZGVJbmxpbmVDYWNoZS5jcHAKaW5k
ZXggMThlMzYzMDY5Zjc0Li5jMjk2YWI4ZGE0OWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvUHJvcGVydHlBY2Nlc3NTaWRlSW5saW5lQ2FjaGUuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvUHJvcGVydHlBY2Nlc3NTaWRlSW5saW5lQ2FjaGUuY3BwCkBA
IC01MCw3ICs1MCw3IEBAIG5hbWVzcGFjZSBTaWRlQWNjZXNzQ2FjaGVJbnRlcm5hbCB7CiBzdGF0
aWMgY29uc3RleHByIGJvb2wgdmVyYm9zZSA9IGZhbHNlOwogc3RhdGljIGNvbnN0ZXhwciB1aW50
MzJfdCByZXBhdGNoQnVmZmVyaW5nQ291bnRkb3duID0gMzI7CiBzdGF0aWMgY29uc3RleHByIHVp
bnQzMl90IG1heFZhcmlhbnRzRm9yR3JvdXAgPSAzMjsKLXN0YXRpYyBjb25zdGV4cHIgdWludDMy
X3QgbWF4VmFyaWFudHNGb3JDYWxsc2l0ZSA9IDY0OworLy9zdGF0aWMgY29uc3RleHByIHVpbnQz
Ml90IG1heFZhcmlhbnRzRm9yQ2FsbHNpdGUgPSA2NDsKIH0KIAogc3RydWN0IFNpZGVBY2Nlc3NH
ZW5lcmF0aW9uU3RhdGUgewpAQCAtMjU4LDE3ICsyNTgsMTcgQEAgQWNjZXNzR2VuZXJhdGlvblJl
c3VsdCByZWdlbmVyYXRlKGNvbnN0IEdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlciYsIFZNJiB2bSwg
SlNHbG8KICAgICAgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaEdQUiA9IFNpZGVQcm9w
ZXJ0eUFjY2Vzc1JlZ2lzdGVyczo6c2NyYXRjaDsKIAogICAgICAgICAgICAgQVNTRVJUKCFjYXNl
cy5pc0VtcHR5KCkpOwotCisgICAgICAgICAgICBzdGF0ZS5zbG93UGF0aC5hcHBlbmQoaml0LmJy
YW5jaDY0KE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgcHJvcGVydHlHUFIsIENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbTY0KG1fa2V5LnJhd0JpdHMoKSkpKTsKKyAgICAgICAgICAgIAogICAgICAg
ICAgICAgaml0LmxvYWQzMigKICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mo
YmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwKICAgICAgICAgICAgICAgICBz
Y3JhdGNoR1BSKTsKLSAgICAgICAgICAgIHN0YXRlLnNsb3dQYXRoLmFwcGVuZChqaXQuYnJhbmNo
MzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBzY3JhdGNoR1BSLCBDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW0zMihtX2tleSkpKTsKIAogICAgICAgICAgICAgVmVjdG9yPGludDY0X3Q+IGNhc2VW
YWx1ZXMoY2FzZXMuc2l6ZSgpKTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBjYXNlcy5zaXplKCk7ICsraSkKLSAgICAgICAgICAgICAgICBjYXNlVmFsdWVzW2ldID0gY2Fz
ZXNbaV0tPm1faWRlbnRpZmllci5yYXdCaXRzKCk7CisgICAgICAgICAgICAgICAgY2FzZVZhbHVl
c1tpXSA9IGNhc2VzW2ldLT5tX3N0cnVjdHVyZUlEOwogCi0gICAgICAgICAgICBCaW5hcnlTd2l0
Y2ggYmluYXJ5U3dpdGNoKHByb3BlcnR5R1BSLCBjYXNlVmFsdWVzLCBCaW5hcnlTd2l0Y2g6Oklu
dFB0cik7CisgICAgICAgICAgICBCaW5hcnlTd2l0Y2ggYmluYXJ5U3dpdGNoKHNjcmF0Y2hHUFIs
IGNhc2VWYWx1ZXMsIEJpbmFyeVN3aXRjaDo6SW50MzIpOwogICAgICAgICAgICAgd2hpbGUgKGJp
bmFyeVN3aXRjaC5hZHZhbmNlKGppdCkpCiAgICAgICAgICAgICAgICAgY2FzZXNbYmluYXJ5U3dp
dGNoLmNhc2VJbmRleCgpXS0+Z2VuZXJhdGUoc3RhdGUpOwogICAgICAgICAgICAgc3RhdGUuc2xv
d1BhdGguYXBwZW5kKGJpbmFyeVN3aXRjaC5mYWxsVGhyb3VnaCgpKTsKQEAgLTMzOCw3ICszMzgs
NyBAQCBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0IHJlZ2VuZXJhdGUoY29uc3QgR0NTYWZlQ29uY3Vy
cmVudEpTTG9ja2VyJiwgVk0mIHZtLCBKU0dsbwogICAgICAgICBkYXRhTG9nTG5JZihTaWRlQWNj
ZXNzQ2FjaGVJbnRlcm5hbDo6dmVyYm9zZSwgIkFkZGluZyBjYXNlczogIiwgbGlzdER1bXAoY2Fz
ZXNUb0FkZCkpOwogCiAgICAgICAgIGZvciAoYXV0byYgY2FzZVRvQWRkIDogY2FzZXNUb0FkZCkg
ewotICAgICAgICAgICAgQVNTRVJUKG1fa2V5ID09IGNhc2VUb0FkZC0+bV9zdHJ1Y3R1cmVJRCk7
CisgICAgICAgICAgICBBU1NFUlQobV9rZXkgPT0gY2FzZVRvQWRkLT5tX2lkZW50aWZpZXIpOwog
ICAgICAgICAgICAgbV9saXN0LmFwcGVuZChXVEZNb3ZlKGNhc2VUb0FkZCkpOwogICAgICAgICB9
CiAKQEAgLTM1MywxMSArMzUzLDExIEBAIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQgcmVnZW5lcmF0
ZShjb25zdCBHQ1NhZmVDb25jdXJyZW50SlNMb2NrZXImLCBWTSYgdm0sIEpTR2xvCiAgICAgfQog
CiAgICAgQWNjZXNzR2VuZXJhdGlvblJlc3VsdCB0cnlDYWNoZUdldEJ5SWQoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwKLSAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTQ2VsbCog
YmFzZUNlbGwsIENhY2hlYWJsZUlkZW50aWZpZXIgcHJvcGVydHlOYW1lLAorICAgICAgICBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwgSlNDZWxsKiBiYXNlQ2VsbCwgQ2FjaGVhYmxlSWRlbnRpZmllciBp
ZGVudGlmaWVyLAogICAgICAgICBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiAgICAgewogICAg
ICAgICBSRUxFQVNFX0FTU0VSVChPcHRpb25zOjp1c2VQcm9wZXJ0eUFjY2Vzc1NpZGVJQygpKTsK
LSAgICAgICAgQVNTRVJUKG1fa2V5ID09IHN0cnVjdHVyZS0+aWQoKSk7CisgICAgICAgIEFTU0VS
VChtX2tleSA9PSBpZGVudGlmaWVyKTsKICAgICAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52
bSgpOwogICAgICAgICBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0IHJlc3VsdDsKIApAQCAtMzcxLDcg
KzM3MSw3IEBAIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQgcmVnZW5lcmF0ZShjb25zdCBHQ1NhZmVD
b25jdXJyZW50SlNMb2NrZXImLCBWTSYgdm0sIEpTR2xvCiAKICAgICAgICAgICAgIFByb3BlcnR5
T2Zmc2V0IG9mZnNldCA9IHNsb3QuaXNVbnNldCgpID8gaW52YWxpZE9mZnNldCA6IHNsb3QuY2Fj
aGVkT2Zmc2V0KCk7CiAgICAgICAgICAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPFNpZGVBY2Nl
c3NDYXNlPj4gbmV3Q2FzZXM7Ci0gICAgICAgICAgICBuZXdDYXNlcy5hcHBlbmQoc3RkOjptYWtl
X3VuaXF1ZTxTaWRlQWNjZXNzQ2FzZT4oc3RydWN0dXJlLT5pZCgpLCBwcm9wZXJ0eU5hbWUsIFNp
ZGVBY2Nlc3NDYXNlOjpIaXQsIG9mZnNldCkpOworICAgICAgICAgICAgbmV3Q2FzZXMuYXBwZW5k
KHN0ZDo6bWFrZV91bmlxdWU8U2lkZUFjY2Vzc0Nhc2U+KHN0cnVjdHVyZS0+aWQoKSwgaWRlbnRp
ZmllciwgU2lkZUFjY2Vzc0Nhc2U6OkhpdCwgb2Zmc2V0KSk7CiAKICAgICAgICAgICAgIHJlc3Vs
dCA9IGFkZENhc2VzKGxvY2tlciwgdm0sIGdsb2JhbE9iamVjdCwgV1RGTW92ZShuZXdDYXNlcykp
OwogCkBAIC00MjAsNDIgKzQyMCw2MCBAQCBQcm9wZXJ0eUFjY2Vzc1NpZGVJbmxpbmVDYWNoZTo6
flByb3BlcnR5QWNjZXNzU2lkZUlubGluZUNhY2hlKCkKIH0KIAogdm9pZCBQcm9wZXJ0eUFjY2Vz
c1NpZGVJbmxpbmVDYWNoZTo6b2JzZXJ2ZVN0cnVjdHVyZUdldEJ5SWQoYm9vbCBpc0hpdCwgY29u
c3QgSlNWYWx1ZSBiYXNlVmFsdWUsCi0gICAgY29uc3QgQ2FjaGVhYmxlSWRlbnRpZmllciYgaWRl
bnRpZmllciwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1
YkluZm8pCisgICAgY29uc3QgQ2FjaGVhYmxlSWRlbnRpZmllciYgaWRlbnRpZmllciwgY29uc3Qg
UHJvcGVydHlTbG90JiBzbG90KQogewogICAgIGlmICghT3B0aW9uczo6dXNlUHJvcGVydHlBY2Nl
c3NTaWRlSUMoKSkKICAgICAgICAgcmV0dXJuOwotICAgIEFTU0VSVF9VTlVTRUQoc3R1YkluZm8s
IHN0dWJJbmZvKTsKIAogICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gYmFzZVZhbHVlLnN0cnVj
dHVyZU9yTnVsbCgqbV92bSk7CiAKICAgICBpZiAoIWlzSGl0IHx8ICFzdHJ1Y3R1cmUgfHwgYmFz
ZVZhbHVlICE9IHNsb3Quc2xvdEJhc2UoKSB8fCAhc2xvdC5pc0NhY2hlYWJsZSgpKQogICAgICAg
ICByZXR1cm47CiAgICAgCi0gICAgaWYgKHN0dWJJbmZvLT5zZWVuU3RydWN0dXJlc0NvdW50ID4g
U2lkZUFjY2Vzc0NhY2hlSW50ZXJuYWw6Om1heFZhcmlhbnRzRm9yQ2FsbHNpdGUpIHsKLSAgICAg
ICAgaWYgKFNpZGVBY2Nlc3NDYWNoZUludGVybmFsOjp2ZXJib3NlCi0gICAgICAgICAgICAmJiBz
dHViSW5mby0+c2VlblN0cnVjdHVyZXNDb3VudCA9PSBTaWRlQWNjZXNzQ2FjaGVJbnRlcm5hbDo6
bWF4VmFyaWFudHNGb3JDYWxsc2l0ZSArIDEpIHsKLSAgICAgICAgICAgICsrc3R1YkluZm8tPnNl
ZW5TdHJ1Y3R1cmVzQ291bnQ7Ci0gICAgICAgICAgICBkYXRhTG9nTG4oIkJsb3duIG91dCBzaWRl
IGljIGNhY2hlIGZvciBjYWxsc2l0ZSB3aXRoIHN0dWIgaW5mbyAiLCBSYXdQb2ludGVyKHN0dWJJ
bmZvKSwgIiBhbmQgaWRlbnRpZmllciAiLCBpZGVudGlmaWVyKTsKLSAgICAgICAgfQotICAgICAg
ICAKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGF1dG8ga2V5ID0gc3RydWN0dXJlLT5p
ZCgpOwotICAgIGF1dG8gaGFzaEtleSA9IGtleTsKKy8vICAgIGlmIChzdHViSW5mby0+c2VlblN0
cnVjdHVyZXNDb3VudCA+IFNpZGVBY2Nlc3NDYWNoZUludGVybmFsOjptYXhWYXJpYW50c0ZvckNh
bGxzaXRlKSB7CisvLyAgICAgICAgaWYgKFNpZGVBY2Nlc3NDYWNoZUludGVybmFsOjp2ZXJib3Nl
CisvLyAgICAgICAgICAgICYmIHN0dWJJbmZvLT5zZWVuU3RydWN0dXJlc0NvdW50ID09IFNpZGVB
Y2Nlc3NDYWNoZUludGVybmFsOjptYXhWYXJpYW50c0ZvckNhbGxzaXRlICsgMSkgeworLy8gICAg
ICAgICAgICArK3N0dWJJbmZvLT5zZWVuU3RydWN0dXJlc0NvdW50OworLy8gICAgICAgICAgICBk
YXRhTG9nTG4oIkJsb3duIG91dCBzaWRlIGljIGNhY2hlIGZvciBjYWxsc2l0ZSB3aXRoIHN0dWIg
aW5mbyAiLCBSYXdQb2ludGVyKHN0dWJJbmZvKSwgIiBhbmQgaWRlbnRpZmllciAiLCBpZGVudGlm
aWVyKTsKKy8vICAgICAgICB9CisvLworLy8gICAgICAgIHJldHVybjsKKy8vICAgIH0KKworICAg
IGF1dG8ga2V5ID0gaWRlbnRpZmllcjsKKyAgICBhdXRvIGhhc2hLZXkgPSBpZGVudGlmaWVyLnVp
ZCgpOwogICAgIGlmICghbV92YXJpYW50R3JvdXBzLmNvbnRhaW5zKGhhc2hLZXkpKQogICAgICAg
ICBtX3ZhcmlhbnRHcm91cHMuYWRkKGhhc2hLZXksIHN0ZDo6bWFrZV91bmlxdWU8U2lkZUFjY2Vz
c0Nhc2VHcm91cD4oa2V5KSk7CiAgICAgYXV0byYgZ3JvdXAgPSAqbV92YXJpYW50R3JvdXBzLmdl
dChoYXNoS2V5KTsKKyAgICBhdXRvJiBidWNrZXQgPSBtX2dldEJ5SWRKdW1wVGFibGVbYnVja2V0
Rm9yKGtleSldOwogICAgIAogICAgIGlmIChncm91cC5nZW5lcmF0ZWRGaW5hbENvZGUpCiAgICAg
ICAgIHJldHVybjsKICAgICAKLSAgICBhdXRvIG51bVZhcmlhbnRzID0gZ3JvdXAubnVtVmFyaWFu
dHMoKTsKKyAgICBpZiAoYnVja2V0KSB7CisgICAgICAgIGF1dG8gZXhpc3RpbmdBZGRyZXNzID0g
YnVja2V0LmV4ZWN1dGFibGVBZGRyZXNzKCk7CisgICAgICAgIGlmICghZ3JvdXAubV9zdHViUm91
dGluZSB8fCBleGlzdGluZ0FkZHJlc3MgIT0gZ3JvdXAubV9zdHViUm91dGluZS0+Y29kZSgpLmNv
ZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpKSB7CisgICAgICAgICAgICBTaWRlQWNjZXNzQ2FzZUdy
b3VwKiBmb3VuZCA9IG51bGxwdHI7CisgICAgICAgICAgICBmb3IgKGF1dG8mIGt2IDogbV92YXJp
YW50R3JvdXBzKSB7CisgICAgICAgICAgICAgICAgaWYgKGt2LnZhbHVlICYmIGt2LnZhbHVlLT5t
X3N0dWJSb3V0aW5lCisgICAgICAgICAgICAgICAgICAgICAgICAmJiBrdi52YWx1ZS0+bV9zdHVi
Um91dGluZS0+Y29kZSgpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpID09IGV4aXN0aW5nQWRk
cmVzcykgeworICAgICAgICAgICAgICAgICAgICBmb3VuZCA9ICYqa3YudmFsdWU7CisgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIEFTU0VSVChmb3VuZCk7CisgICAgICAgICAgICBkYXRhTG9nTG5JZihTaWRlQWNj
ZXNzQ2FjaGVJbnRlcm5hbDo6dmVyYm9zZSwgIkhhc2ggY29sbGlzaW9uIG9uICIsIGtleSwgIiBl
eGlzdGluZyBlbnRyeTogIiwgZm91bmQtPm1fa2V5KTsKKyAgICAgICAgICAgIG1fdmFyaWFudEdy
b3Vwcy5yZW1vdmUoaGFzaEtleSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAg
ICB9CisgICAgCisvLyAgICBhdXRvIG51bVZhcmlhbnRzID0gZ3JvdXAubnVtVmFyaWFudHMoKTsK
ICAgICBhdXRvIHJlc3VsdCA9IGdyb3VwLnRyeUNhY2hlR2V0QnlJZChzdHJ1Y3R1cmUtPmdsb2Jh
bE9iamVjdCgpLCBzdHJ1Y3R1cmUsIGJhc2VWYWx1ZS5hc0NlbGwoKSwgaWRlbnRpZmllciwgc2xv
dCk7CiAKICAgICBpZiAocmVzdWx0LmdlbmVyYXRlZFNvbWVDb2RlKCkpIHsKICAgICAgICAgZGF0
YUxvZ0xuSWYoU2lkZUFjY2Vzc0NhY2hlSW50ZXJuYWw6OnZlcmJvc2UsICJQYXRoY2hpbmcgIiwg
c3RydWN0dXJlLT5pZCgpLCAiIGFuZCAiLCBpZGVudGlmaWVyLCAiIHRvICIsIFJhd1BvaW50ZXIo
cmVzdWx0LmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpKSk7Ci0gICAgICAgIHN0cnVjdHVyZS0+
cHJvcGVydHlBY2Nlc3NTaWRlSW5saW5lQ2FjaGUoKSA9IEZ1bmN0aW9uUHRyPEpJVFN0dWJSb3V0
aW5lUHRyVGFnPihyZXN1bHQuY29kZSgpKTsKKyAgICAgICAgYnVja2V0ID0gRnVuY3Rpb25QdHI8
SklUU3R1YlJvdXRpbmVQdHJUYWc+KHJlc3VsdC5jb2RlKCkpOwogICAgICAgICAKICAgICAgICAg
aWYgKHJlc3VsdC5nZW5lcmF0ZWRGaW5hbENvZGUoKSkgewogICAgICAgICAgICAgZGF0YUxvZ0xu
SWYoU2lkZUFjY2Vzc0NhY2hlSW50ZXJuYWw6OnZlcmJvc2UsICJHZW5lcmF0ZWQgZmluYWwgY29k
ZSBmb3IgIiwgc3RydWN0dXJlLT5pZCgpLCAiIGFuZCAiLCBpZGVudGlmaWVyKTsKQEAgLTQ2NCwx
MCArNDgyLDEwIEBAIHZvaWQgUHJvcGVydHlBY2Nlc3NTaWRlSW5saW5lQ2FjaGU6Om9ic2VydmVT
dHJ1Y3R1cmVHZXRCeUlkKGJvb2wgaXNIaXQsIGNvbnN0IEpTCiAgICAgfSBlbHNlIGlmIChyZXN1
bHQuc2hvdWxkR2l2ZVVwTm93KCkpIHsKICAgICAgICAgZGF0YUxvZ0xuSWYoU2lkZUFjY2Vzc0Nh
Y2hlSW50ZXJuYWw6OnZlcmJvc2UsICJTaG91bGQgZ2l2ZSB1cCBvbiAiLCBzdHJ1Y3R1cmUtPmlk
KCksICIgYW5kICIsIGlkZW50aWZpZXIpOwogICAgICAgICBncm91cC5nZW5lcmF0ZWRGaW5hbENv
ZGUgPSB0cnVlOwotICAgICAgICBzdHJ1Y3R1cmUtPnByb3BlcnR5QWNjZXNzU2lkZUlubGluZUNh
Y2hlKCkgPSBudWxscHRyOworICAgICAgICBidWNrZXQgPSBudWxscHRyOwogICAgIH0KICAgICAK
LSAgICBzdHViSW5mby0+c2VlblN0cnVjdHVyZXNDb3VudCArPSBncm91cC5udW1WYXJpYW50cygp
IC0gbnVtVmFyaWFudHM7CisvLyAgICBzdHViSW5mby0+c2VlblN0cnVjdHVyZXNDb3VudCArPSBn
cm91cC5udW1WYXJpYW50cygpIC0gbnVtVmFyaWFudHM7CiB9CiAKIGJvb2wgUHJvcGVydHlBY2Nl
c3NTaWRlSW5saW5lQ2FjaGU6OnZpc2l0V2VhayhWTSYpCkBAIC00NzUsMTggKzQ5MywxOSBAQCBi
b29sIFByb3BlcnR5QWNjZXNzU2lkZUlubGluZUNhY2hlOjp2aXNpdFdlYWsoVk0mKQogICAgIHJl
dHVybiB0cnVlOwogfQogCi12b2lkIFByb3BlcnR5QWNjZXNzU2lkZUlubGluZUNhY2hlOjpnZW5l
cmF0ZUNhbGxzaXRlKENDYWxsSGVscGVycyYgaml0LCBDYWNoZWFibGVJZGVudGlmaWVyIHByb3Bl
cnR5TmFtZSwKK3ZvaWQgUHJvcGVydHlBY2Nlc3NTaWRlSW5saW5lQ2FjaGU6OmdlbmVyYXRlQ2Fs
bHNpdGUoQ0NhbGxIZWxwZXJzJiBqaXQsCiAgICAgU3RydWN0dXJlU3R1YkluZm8qIGNhbGxzaXRl
U3R1YkluZm8sIEdQUlJlZyBvcmlnaW5hbEJhc2UsIEdQUlJlZyBvcmlnaW5hbFJlc3VsdCwgUmVn
aXN0ZXJTZXQgbXVzdFByZXNlcnZlLAogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCYgdG9E
b25lLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QmIHRvU2xvd3BhdGgpCiB7CiAgICAgUkVMRUFT
RV9BU1NFUlQoT3B0aW9uczo6dXNlUHJvcGVydHlBY2Nlc3NTaWRlSUMoKSk7Ci0gICAgQVNTRVJU
KHByb3BlcnR5TmFtZSk7CiAgICAgQVNTRVJUX1VOVVNFRChjYWxsc2l0ZVN0dWJJbmZvLCBjYWxs
c2l0ZVN0dWJJbmZvKTsKICAgICBHUFJSZWcgcmVzdWx0ID0gU2lkZVByb3BlcnR5QWNjZXNzUmVn
aXN0ZXJzOjpyZXN1bHQ7CiAgICAgR1BSUmVnIGJhc2UgPSBTaWRlUHJvcGVydHlBY2Nlc3NSZWdp
c3RlcnM6OmJhc2U7CiAgICAgR1BSUmVnIHByb3BlcnR5ID0gU2lkZVByb3BlcnR5QWNjZXNzUmVn
aXN0ZXJzOjpwcm9wZXJ0eTsKICAgICBHUFJSZWcgc2NyYXRjaCA9IEludmFsaWRHUFJSZWc7Ci0g
ICAgR1BSUmVnIHNjcmF0Y2gyID0gSW52YWxpZEdQUlJlZzsKKworICAgIGF1dG8mIHZtID0gaml0
LnZtKCk7CisgICAgdm9pZCogc2lkZUlDVGFibGUgPSB2bS5oZWFwLnByb3BlcnR5QWNjZXNzU2lk
ZUlubGluZUNhY2hlKCkuanVtcFRhYmxlKDApOwogCiAgICAgQVNTRVJUKG9yaWdpbmFsQmFzZSAh
PSBJbnZhbGlkR1BSUmVnKTsKICAgICBBU1NFUlQob3JpZ2luYWxSZXN1bHQgIT0gSW52YWxpZEdQ
UlJlZyk7CkBAIC00OTcsMTAgKzUxNiwxMyBAQCB2b2lkIFByb3BlcnR5QWNjZXNzU2lkZUlubGlu
ZUNhY2hlOjpnZW5lcmF0ZUNhbGxzaXRlKENDYWxsSGVscGVycyYgaml0LCBDYWNoZWFibAogICAg
IGFsbG9jYXRvci5sb2NrKGJhc2UpOwogICAgIGFsbG9jYXRvci5sb2NrKHByb3BlcnR5KTsKICAg
ICBzY3JhdGNoID0gYWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOwotICAgIHNjcmF0Y2gy
ID0gYWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOwogICAgIAotICAgIGppdC5lbWl0TG9h
ZFN0cnVjdHVyZShqaXQudm0oKSwgb3JpZ2luYWxCYXNlLCBzY3JhdGNoLCBzY3JhdGNoMik7Ci0g
ICAgaml0LmxvYWQ2NChDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc2NyYXRjaCwgU3RydWN0dXJlOjpw
cm9wZXJ0eUFjY2Vzc1NpZGVJbmxpbmVDYWNoZU9mZnNldCgpKSwgc2NyYXRjaCk7CisgICAgaml0
Lm1vdmUocHJvcGVydHksIHNjcmF0Y2gpOworICAgIGppdC5hbmQ2NChDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW02NChQcm9wZXJ0eUFjY2Vzc1NpZGVJbmxpbmVDYWNoZTo6dmFyaWFudFRhYmxlTWFz
ayksIHNjcmF0Y2gpOworICAgIHN0YXRpY19hc3NlcnQoUHJvcGVydHlBY2Nlc3NTaWRlSW5saW5l
Q2FjaGU6OnZhcmlhbnRUYWJsZVNoaWZ0ID49IDMpOworICAgIGppdC5yc2hpZnQzMihDQ2FsbEhl
bHBlcnM6OkltbTMyKFByb3BlcnR5QWNjZXNzU2lkZUlubGluZUNhY2hlOjp2YXJpYW50VGFibGVT
aGlmdC0zKSwgc2NyYXRjaCk7CisgICAgaml0LmFkZDY0KENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bTY0KHJlaW50ZXJwcmV0X2Nhc3Q8dWludDY0X3Q+KHNpZGVJQ1RhYmxlKSksIHNjcmF0Y2gpOwor
ICAgIGppdC5sb2FkNjQoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHNjcmF0Y2gpLCBzY3JhdGNoKTsK
ICAgICB0b1Nsb3dwYXRoLmFwcGVuZChqaXQuYnJhbmNoVGVzdDMyKENDYWxsSGVscGVyczo6WmVy
bywgc2NyYXRjaCkpOwogCiAgICAgewpAQCAtNTEwLDE4ICs1MzIsMTYgQEAgdm9pZCBQcm9wZXJ0
eUFjY2Vzc1NpZGVJbmxpbmVDYWNoZTo6Z2VuZXJhdGVDYWxsc2l0ZShDQ2FsbEhlbHBlcnMmIGpp
dCwgQ2FjaGVhYmwKICAgICAgICAgICAgIHJlZ2lzdGVyc1RvUHJlc2VydmUuc2V0KHJlc3VsdCk7
CiAgICAgICAgIGlmIChtdXN0UHJlc2VydmUuY29udGFpbnMoYmFzZSkpCiAgICAgICAgICAgICBy
ZWdpc3RlcnNUb1ByZXNlcnZlLnNldChiYXNlKTsKLSAgICAgICAgaWYgKG11c3RQcmVzZXJ2ZS5j
b250YWlucyhwcm9wZXJ0eSkpCi0gICAgICAgICAgICByZWdpc3RlcnNUb1ByZXNlcnZlLnNldChw
cm9wZXJ0eSk7CiAgICAgICAgIGlmIChtdXN0UHJlc2VydmUuY29udGFpbnMoU2lkZVByb3BlcnR5
QWNjZXNzUmVnaXN0ZXJzOjpzY3JhdGNoKSkKICAgICAgICAgICAgIHJlZ2lzdGVyc1RvUHJlc2Vy
dmUuc2V0KFNpZGVQcm9wZXJ0eUFjY2Vzc1JlZ2lzdGVyczo6c2NyYXRjaCk7CiAgICAgICAgIEFT
U0VSVCghcmVnaXN0ZXJzVG9QcmVzZXJ2ZS5jb250YWlucyhzY3JhdGNoKSk7CisgICAgICAgIHJl
Z2lzdGVyc1RvUHJlc2VydmUuY2xlYXIob3JpZ2luYWxSZXN1bHQpOwogCiAgICAgICAgIGNvbnN0
IHVuc2lnbmVkIGV4dHJhUGFkZGluZ0J5dGVzID0gMDsKICAgICAgICAgdW5zaWduZWQgbnVtYmVy
T2ZTdGFja0J5dGVzVXNlZEZvclJlZ2lzdGVyUHJlc2VydmF0aW9uID0gU2NyYXRjaFJlZ2lzdGVy
QWxsb2NhdG9yOjpwcmVzZXJ2ZVJlZ2lzdGVyc1RvU3RhY2tGb3JDYWxsKGppdCwgcmVnaXN0ZXJz
VG9QcmVzZXJ2ZSwgZXh0cmFQYWRkaW5nQnl0ZXMpOwogCiAgICAgICAgIGlmIChvcmlnaW5hbEJh
c2UgIT0gYmFzZSkKICAgICAgICAgICAgIGppdC5tb3ZlKG9yaWdpbmFsQmFzZSwgYmFzZSk7Ci0g
ICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTY0KHByb3BlcnR5TmFtZS5y
YXdCaXRzKCkpLCBwcm9wZXJ0eSk7CiAgICAgICAgIGppdC5jYWxsKHNjcmF0Y2gsIEpJVFN0dWJS
b3V0aW5lUHRyVGFnKTsKICAgICAgICAgaml0Lm1vdmUocmVzdWx0LCBzY3JhdGNoKTsKIApAQCAt
NTMzLDkgKzU1MywxMCBAQCB2b2lkIFByb3BlcnR5QWNjZXNzU2lkZUlubGluZUNhY2hlOjpnZW5l
cmF0ZUNhbGxzaXRlKENDYWxsSGVscGVycyYgaml0LCBDYWNoZWFibAogICAgIH0KIH0KIAotc3Rk
OjpvcHRpb25hbDxDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4+IFByb3Bl
cnR5QWNjZXNzU2lkZUlubGluZUNhY2hlOjptYWtlQ2FsbHNpdGVUaHVuayhDb2RlQmxvY2sqIGNh
bGxzaXRlLCBDYWNoZWFibGVJZGVudGlmaWVyIHByb3BlcnR5TmFtZSwgU3RydWN0dXJlU3R1Yklu
Zm8qIGNhbGxzaXRlU3R1YkluZm8pCitzdGQ6Om9wdGlvbmFsPENvZGVMb2NhdGlvbkxhYmVsPEpJ
VFN0dWJSb3V0aW5lUHRyVGFnPj4gUHJvcGVydHlBY2Nlc3NTaWRlSW5saW5lQ2FjaGU6Om1ha2VD
YWxsc2l0ZVRodW5rKENvZGVCbG9jayogY2FsbHNpdGUsIFN0cnVjdHVyZVN0dWJJbmZvKiBjYWxs
c2l0ZVN0dWJJbmZvKQogewotICAgIGRhdGFMb2dMbklmKFNpZGVBY2Nlc3NDYWNoZUludGVybmFs
Ojp2ZXJib3NlLCAiTWFraW5nIGNhbGxzaXRlIHRodW5rIGZvciAiLCBwcm9wZXJ0eU5hbWUpOwor
ICAgIEFTU0VSVChjYWxsc2l0ZVN0dWJJbmZvKTsKKyAgICBkYXRhTG9nTG5JZihTaWRlQWNjZXNz
Q2FjaGVJbnRlcm5hbDo6dmVyYm9zZSwgIk1ha2luZyBjYWxsc2l0ZSB0aHVuayBmb3IgIiwgUmF3
UG9pbnRlcihjYWxsc2l0ZVN0dWJJbmZvKSk7CiAgICAgQ0NhbGxIZWxwZXJzIGppdChjYWxsc2l0
ZSk7CiAgICAgYXV0byYgdm0gPSBqaXQudm0oKTsKICAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygp
OwpAQCAtNTQzLDcgKzU2NCw3IEBAIHN0ZDo6b3B0aW9uYWw8Q29kZUxvY2F0aW9uTGFiZWw8SklU
U3R1YlJvdXRpbmVQdHJUYWc+PiBQcm9wZXJ0eUFjY2Vzc1NpZGVJbmxpbmVDCiAgICAgQ0NhbGxI
ZWxwZXJzOjpKdW1wTGlzdCB0b0RvbmU7CiAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCB0b1Ns
b3dwYXRoOwogICAgIAotICAgIFByb3BlcnR5QWNjZXNzU2lkZUlubGluZUNhY2hlOjpnZW5lcmF0
ZUNhbGxzaXRlKGppdCwgcHJvcGVydHlOYW1lLAorICAgIFByb3BlcnR5QWNjZXNzU2lkZUlubGlu
ZUNhY2hlOjpnZW5lcmF0ZUNhbGxzaXRlKGppdCwKICAgICAgICAgY2FsbHNpdGVTdHViSW5mbywg
Y2FsbHNpdGVTdHViSW5mby0+YmFzZUdQUiwgY2FsbHNpdGVTdHViSW5mby0+dmFsdWVHUFIsIGNh
bGxzaXRlU3R1YkluZm8tPnVzZWRSZWdpc3RlcnMsCiAgICAgICAgIHRvRG9uZSwgdG9TbG93cGF0
aCk7CiAKQEAgLTU1Nyw3ICs1NzgsNyBAQCBzdGQ6Om9wdGlvbmFsPENvZGVMb2NhdGlvbkxhYmVs
PEpJVFN0dWJSb3V0aW5lUHRyVGFnPj4gUHJvcGVydHlBY2Nlc3NTaWRlSW5saW5lQwogCiAgICAg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiBjb2RlID0gRklOQUxJ
WkVfQ09ERV9GT1IoCiAgICAgICAgIG51bGxwdHIsIGxpbmtCdWZmZXIsIEpJVFN0dWJSb3V0aW5l
UHRyVGFnLAotICAgICAgICAiJXMiLCB0b0NTdHJpbmcoIlNpZGUgQWNjZXNzIHNsb3cgcGF0aCB0
aHVuayBmb3IgIiwgcHJvcGVydHlOYW1lLCAiOiAiKS5kYXRhKCkpOworICAgICAgICAiJXMiLCB0
b0NTdHJpbmcoIlNpZGUgQWNjZXNzIHNsb3cgcGF0aCB0aHVuayBmb3IgIiwgUmF3UG9pbnRlcihj
YWxsc2l0ZVN0dWJJbmZvKSwgIjogIikuZGF0YSgpKTsKIAogICAgIGF1dG8gc3R1YiA9IGFkb3B0
UmVmKCpuZXcgU2lkZUFjY2Vzc0pJVFN0dWJSb3V0aW5lKGNvZGUsIHZtKSk7CiAgICAgc3R1Yi0+
bWFrZUdDQXdhcmUodm0pOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Q
cm9wZXJ0eUFjY2Vzc1NpZGVJbmxpbmVDYWNoZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9Qcm9wZXJ0eUFjY2Vzc1NpZGVJbmxpbmVDYWNoZS5oCmluZGV4IGIxOTA1MmQ0YTdjZC4uMzVl
ZGZiYjg5YTY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Byb3BlcnR5
QWNjZXNzU2lkZUlubGluZUNhY2hlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Q
cm9wZXJ0eUFjY2Vzc1NpZGVJbmxpbmVDYWNoZS5oCkBAIC00NiwyNiArNDYsMzYgQEAgY2xhc3Mg
UHJvcGVydHlTbG90OwogCiBjbGFzcyBQcm9wZXJ0eUFjY2Vzc1NpZGVJbmxpbmVDYWNoZSB7CiBw
dWJsaWM6Ci0gICAgdXNpbmcgVmFyaWFudEtleVR5cGUgPSBTdHJ1Y3R1cmVJRDsKLSAgICB1c2lu
ZyBWYXJpYW50S2V5SGFzaGFibGVUeXBlID0gU3RydWN0dXJlSUQ7CisgICAgdXNpbmcgVmFyaWFu
dEtleVR5cGUgPSBDYWNoZWFibGVJZGVudGlmaWVyOworICAgIHVzaW5nIFZhcmlhbnRLZXlIYXNo
YWJsZVR5cGUgPSBVbmlxdWVkU3RyaW5nSW1wbCogOwogICAgIAogICAgIFByb3BlcnR5QWNjZXNz
U2lkZUlubGluZUNhY2hlKFZNJiB2bSk7CiAgICAgflByb3BlcnR5QWNjZXNzU2lkZUlubGluZUNh
Y2hlKCk7CiAKICAgICB2b2lkIG9ic2VydmVTdHJ1Y3R1cmVHZXRCeUlkKGJvb2wgaXNIaXQsIGNv
bnN0IEpTVmFsdWUgYmFzZSwKLSAgICAgICAgY29uc3QgQ2FjaGVhYmxlSWRlbnRpZmllciYgaWRl
bnRpZmllciwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90LAotICAgICAgICBTdHJ1Y3R1cmVTdHVi
SW5mbyogc3R1YkluZm8pOworICAgICAgICBjb25zdCBDYWNoZWFibGVJZGVudGlmaWVyJiBpZGVu
dGlmaWVyLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpOworICAgIHZvaWQqIGp1bXBUYWJsZShz
aXplX3QgaSkgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oJm1fZ2V0QnlJZEp1bXBU
YWJsZVtpXSk7IH0KIAogICAgIGJvb2wgdmlzaXRXZWFrKFZNJik7CiAKLSAgICBzdGF0aWMgdm9p
ZCBnZW5lcmF0ZUNhbGxzaXRlKENDYWxsSGVscGVycyYgaml0LCBDYWNoZWFibGVJZGVudGlmaWVy
IGlkZW50aWZpZXIsCisgICAgc3RhdGljIGNvbnN0ZXhwciB1aW50NjRfdCB2YXJpYW50VGFibGVN
YXNrID0gMHgwMDAwRkZGMDsKKyAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCB2YXJpYW50VGFi
bGVTaGlmdCA9IDQ7CisgICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgdmFyaWFudFRhYmxlRW50
cmllcyA9IDE8PDEyOworICAgIHN0YXRpYyB2b2lkIGdlbmVyYXRlQ2FsbHNpdGUoQ0NhbGxIZWxw
ZXJzJiBqaXQsCiAgICAgICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBjYWxsc2l0ZVN0dWJJbmZvLCBH
UFJSZWcgb3JpZ2luYWxCYXNlLCBHUFJSZWcgb3JpZ2luYWxSZXN1bHQsIFJlZ2lzdGVyU2V0IG11
c3RQcmVzZXJ2ZSwKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiB0b0RvbmUsIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wTGlzdCYgdG9TbG93cGF0aCk7CiAgICAgCi0gICAgc3RkOjpvcHRp
b25hbDxDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4+IG1ha2VDYWxsc2l0
ZVRodW5rKENvZGVCbG9jayogY2FsbHNpdGUsIENhY2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmll
ciwgU3RydWN0dXJlU3R1YkluZm8qIGNhbGxzaXRlU3R1YkluZm8pOworICAgIHN0ZDo6b3B0aW9u
YWw8Q29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+PiBtYWtlQ2FsbHNpdGVU
aHVuayhDb2RlQmxvY2sqIGNhbGxzaXRlLCBTdHJ1Y3R1cmVTdHViSW5mbyogY2FsbHNpdGVTdHVi
SW5mbyk7CiBwcml2YXRlOgogICAgIFZNKiBtX3ZtOwotICAgIAorCisgICAgc3RhdGljX2Fzc2Vy
dCgoKHN0ZDo6bnVtZXJpY19saW1pdHM8dHlwZW9mKHZhcmlhbnRUYWJsZU1hc2spPjo6bWF4KCkm
dmFyaWFudFRhYmxlTWFzayk+PnZhcmlhbnRUYWJsZVNoaWZ0KSArIDEgPT0gdmFyaWFudFRhYmxl
RW50cmllcyk7CisgICAgc3RhdGljIGlubGluZSBzaXplX3QgYnVja2V0Rm9yKFZhcmlhbnRLZXlU
eXBlIGtleSkKKyAgICB7CisgICAgICAgIHJldHVybiAoa2V5LnJhd0JpdHMoKSZ2YXJpYW50VGFi
bGVNYXNrKT4+dmFyaWFudFRhYmxlU2hpZnQ7CisgICAgfQorCisgICAgVmVjdG9yPEZ1bmN0aW9u
UHRyPEpJVFN0dWJSb3V0aW5lUHRyVGFnPj4gbV9nZXRCeUlkSnVtcFRhYmxlIHsgdmFyaWFudFRh
YmxlRW50cmllcywgbnVsbHB0ciB9OwogICAgIEhhc2hNYXA8VmFyaWFudEtleUhhc2hhYmxlVHlw
ZSwgc3RkOjp1bmlxdWVfcHRyPFNpZGVBY2Nlc3NDYXNlR3JvdXA+PiBtX3ZhcmlhbnRHcm91cHM7
CiAgICAgVmVjdG9yPFJlZlB0cjxTaWRlQWNjZXNzSklUU3R1YlJvdXRpbmU+PiBtX2NhbGxzaXRl
czsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAKaW5kZXggYjlmNjQ1YzU0ZDky
Li4yNjA5NzkyODQ0YmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVw
YXRjaC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcApAQCAt
NDc3LDExICs0NzcsMTEgQEAgdm9pZCByZXBhdGNoR2V0QnkoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTVmFsdWUgYmEKICAgICAgICAgCiAgICAg
cmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBhcHByb3ByaWF0ZUdldEJ5
RnVuY3Rpb24oa2luZCkpOwogICAgIAotICAgIGlmIChraW5kICE9IEdldEJ5S2luZDo6QnlJZCB8
fCAhT3B0aW9uczo6dXNlUHJvcGVydHlBY2Nlc3NTaWRlSUMoKSkgeworICAgIGlmIChraW5kICE9
IEdldEJ5S2luZDo6QnlWYWwgfHwgIU9wdGlvbnM6OnVzZVByb3BlcnR5QWNjZXNzU2lkZUlDKCkp
IHsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBhdXRvIGljID0gZ2xvYmFsT2Jq
ZWN0LT52bSgpLmhlYXAucHJvcGVydHlBY2Nlc3NTaWRlSW5saW5lQ2FjaGUoKS5tYWtlQ2FsbHNp
dGVUaHVuayhjb2RlQmxvY2ssIHByb3BlcnR5TmFtZSwgJnN0dWJJbmZvKTsKKyAgICBhdXRvIGlj
ID0gZ2xvYmFsT2JqZWN0LT52bSgpLmhlYXAucHJvcGVydHlBY2Nlc3NTaWRlSW5saW5lQ2FjaGUo
KS5tYWtlQ2FsbHNpdGVUaHVuayhjb2RlQmxvY2ssICZzdHViSW5mbyk7CiAgICAgaWYgKCFpYykK
ICAgICAgICAgcmV0dXJuOwogICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU3RydWN0dXJlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1
Y3R1cmUuaAppbmRleCAzODVjN2JjNTg3MDkuLmI0OTg2MWJjYThkNSAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgKQEAgLTE2Nyw3ICsxNjcsNiBAQCBwdWJsaWM6
CiAgICAgU3RydWN0dXJlSUQgaWQoKSBjb25zdCB7IHJldHVybiBtX2Jsb2Iuc3RydWN0dXJlSUQo
KTsgfQogICAgIGludDMyX3Qgb2JqZWN0SW5pdGlhbGl6YXRpb25CbG9iKCkgY29uc3QgeyByZXR1
cm4gbV9ibG9iLmJsb2JFeGNsdWRpbmdTdHJ1Y3R1cmVJRCgpOyB9CiAgICAgaW50NjRfdCBpZEJs
b2IoKSBjb25zdCB7IHJldHVybiBtX2Jsb2IuYmxvYigpOyB9Ci0gICAgRnVuY3Rpb25QdHI8SklU
U3R1YlJvdXRpbmVQdHJUYWc+JiBwcm9wZXJ0eUFjY2Vzc1NpZGVJbmxpbmVDYWNoZSgpIHsgcmV0
dXJuIG1fcHJvcGVydHlBY2Nlc3NTaWRlSW5saW5lQ2FjaGU7IH0KIAogICAgIGJvb2wgaXNQcm94
eSgpIGNvbnN0CiAgICAgewpAQCAtNTk3LDExICs1OTYsNiBAQCBwdWJsaWM6CiAgICAgewogICAg
ICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFN0cnVjdHVyZSwgbV9wcmV2aW91c09yUmFyZURh
dGEpOwogICAgIH0KLSAgICAKLSAgICBzdGF0aWMgcHRyZGlmZl90IHByb3BlcnR5QWNjZXNzU2lk
ZUlubGluZUNhY2hlT2Zmc2V0KCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VU
T0YoU3RydWN0dXJlLCBtX3Byb3BlcnR5QWNjZXNzU2lkZUlubGluZUNhY2hlKTsKLSAgICB9CiAK
ICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mKTsKICAgICAgICAgCkBA
IC04NzYsNyArODcwLDYgQEAgcHJpdmF0ZToKICAgICBtdXRhYmxlIFdyaXRlQmFycmllcjxTdHJ1
Y3R1cmVDaGFpbj4gbV9jYWNoZWRQcm90b3R5cGVDaGFpbjsKIAogICAgIFdyaXRlQmFycmllcjxK
U0NlbGw+IG1fcHJldmlvdXNPclJhcmVEYXRhOwotICAgIEZ1bmN0aW9uUHRyPEpJVFN0dWJSb3V0
aW5lUHRyVGFnPiBtX3Byb3BlcnR5QWNjZXNzU2lkZUlubGluZUNhY2hlOwogCiAgICAgUmVmUHRy
PFVuaXF1ZWRTdHJpbmdJbXBsPiBtX3RyYW5zaXRpb25Qcm9wZXJ0eU5hbWU7CiAKLS0gCjIuMzAu
MSAoQXBwbGUgR2l0LTEzMCkKCgpGcm9tIDA3YTg0NWJiMjRlZThmYmFlY2MxMmQ1MWZkMWM5ODI2
YjNlMjQzMDMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCkZyb206IEp1c3RpbiBNaWNoYXVkIDxq
dXN0aW5fbWljaGF1ZEBhcHBsZS5jb20+CkRhdGU6IEZyaSwgMjIgT2N0IDIwMjEgMTc6MDM6MjEg
LTA3MDAKU3ViamVjdDogW1BBVENIIDE2LzE3XSAuCgotLS0KIC4uLi9nZXQtYnktaWQtYmxvd291
dC1zdHJ1Y3R1cmUtaWMuanMgICAgICAgICB8ICA3ICsrLS0KIC4uLi9qaXQvUHJvcGVydHlBY2Nl
c3NTaWRlSW5saW5lQ2FjaGUuY3BwICAgICB8IDMyICsrKy0tLS0tLS0tLS0tLS0tLS0KIC4uLi9q
aXQvUHJvcGVydHlBY2Nlc3NTaWRlSW5saW5lQ2FjaGUuaCAgICAgICB8IDExIC0tLS0tLS0KIFNv
dXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nSW1wbC5jcHAgICAgICAgICAgICB8ICAyICstCiBTb3Vy
Y2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0ltcGwuaCAgICAgICAgICAgICAgfCAgNiArKysrCiA1IGZp
bGVzIGNoYW5nZWQsIDE2IGluc2VydGlvbnMoKyksIDQyIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdp
dCBhL0pTVGVzdHMvbWljcm9iZW5jaG1hcmtzL2dldC1ieS1pZC1ibG93b3V0LXN0cnVjdHVyZS1p
Yy5qcyBiL0pTVGVzdHMvbWljcm9iZW5jaG1hcmtzL2dldC1ieS1pZC1ibG93b3V0LXN0cnVjdHVy
ZS1pYy5qcwppbmRleCAzZGM3ODAzOTE5MjUuLjgxYzcyNWI0NzI1MiAxMDA2NDQKLS0tIGEvSlNU
ZXN0cy9taWNyb2JlbmNobWFya3MvZ2V0LWJ5LWlkLWJsb3dvdXQtc3RydWN0dXJlLWljLmpzCisr
KyBiL0pTVGVzdHMvbWljcm9iZW5jaG1hcmtzL2dldC1ieS1pZC1ibG93b3V0LXN0cnVjdHVyZS1p
Yy5qcwpAQCAtMSw4ICsxLDggQEAKIGZ1bmN0aW9uIGJsYWNrYm94KG8pIHsgcmV0dXJuIG87IH0K
IG5vSW5saW5lKGJsYWNrYm94KQogCi1mdW5jdGlvbiBmb28obykgewotICAgIHJldHVybiBvW2Js
YWNrYm94KCJmIildCitmdW5jdGlvbiBmb28obywgdikgeworICAgIHJldHVybiBvW3ZdCiB9CiAK
IG5vSW5saW5lKGZvbykKQEAgLTE0LDggKzE0LDkgQEAgZnVuY3Rpb24gZm9vMihvKSB7CiBub0lu
bGluZShmb28yKQogCiBmdW5jdGlvbiBjaGVjayhvLCBlKSB7Ci0gICAgaWYgKGZvbyhvKSAhPSBl
KQorICAgIGlmIChmb28obywgYmxhY2tib3goImYiKSkgIT0gZSkKICAgICAgICAgdGhyb3cgIkVy
cm9yOiBiYWQgcmVzdWx0IGZvciBvYmplY3Q6ICIgKyBvCisgICAgZm9vKG8sIGJsYWNrYm94KCJn
IikpCiB9CiAKIGZvciAodmFyIGkgPSAwOyBpIDwgMWU3OyArK2kpIHsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUHJvcGVydHlBY2Nlc3NTaWRlSW5saW5lQ2FjaGUuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Qcm9wZXJ0eUFjY2Vzc1NpZGVJbmxpbmVDYWNo
ZS5jcHAKaW5kZXggYzI5NmFiOGRhNDlhLi4xNmRkZTdiYmE5MTQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvUHJvcGVydHlBY2Nlc3NTaWRlSW5saW5lQ2FjaGUuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUHJvcGVydHlBY2Nlc3NTaWRlSW5saW5lQ2Fj
aGUuY3BwCkBAIC00MjcsNyArNDI3LDcgQEAgdm9pZCBQcm9wZXJ0eUFjY2Vzc1NpZGVJbmxpbmVD
YWNoZTo6b2JzZXJ2ZVN0cnVjdHVyZUdldEJ5SWQoYm9vbCBpc0hpdCwgY29uc3QgSlMKIAogICAg
IFN0cnVjdHVyZSogc3RydWN0dXJlID0gYmFzZVZhbHVlLnN0cnVjdHVyZU9yTnVsbCgqbV92bSk7
CiAKLSAgICBpZiAoIWlzSGl0IHx8ICFzdHJ1Y3R1cmUgfHwgYmFzZVZhbHVlICE9IHNsb3Quc2xv
dEJhc2UoKSB8fCAhc2xvdC5pc0NhY2hlYWJsZSgpKQorICAgIGlmICghc3RydWN0dXJlIHx8IGJh
c2VWYWx1ZSAhPSBzbG90LnNsb3RCYXNlKCkgfHwgIXNsb3QuaXNDYWNoZWFibGUoKSkKICAgICAg
ICAgcmV0dXJuOwogICAgIAogLy8gICAgaWYgKHN0dWJJbmZvLT5zZWVuU3RydWN0dXJlc0NvdW50
ID4gU2lkZUFjY2Vzc0NhY2hlSW50ZXJuYWw6Om1heFZhcmlhbnRzRm9yQ2FsbHNpdGUpIHsKQEAg
LTQ0NSwzNSArNDQ1LDE2IEBAIHZvaWQgUHJvcGVydHlBY2Nlc3NTaWRlSW5saW5lQ2FjaGU6Om9i
c2VydmVTdHJ1Y3R1cmVHZXRCeUlkKGJvb2wgaXNIaXQsIGNvbnN0IEpTCiAgICAgaWYgKCFtX3Zh
cmlhbnRHcm91cHMuY29udGFpbnMoaGFzaEtleSkpCiAgICAgICAgIG1fdmFyaWFudEdyb3Vwcy5h
ZGQoaGFzaEtleSwgc3RkOjptYWtlX3VuaXF1ZTxTaWRlQWNjZXNzQ2FzZUdyb3VwPihrZXkpKTsK
ICAgICBhdXRvJiBncm91cCA9ICptX3ZhcmlhbnRHcm91cHMuZ2V0KGhhc2hLZXkpOwotICAgIGF1
dG8mIGJ1Y2tldCA9IG1fZ2V0QnlJZEp1bXBUYWJsZVtidWNrZXRGb3Ioa2V5KV07CiAgICAgCiAg
ICAgaWYgKGdyb3VwLmdlbmVyYXRlZEZpbmFsQ29kZSkKICAgICAgICAgcmV0dXJuOwogICAgIAot
ICAgIGlmIChidWNrZXQpIHsKLSAgICAgICAgYXV0byBleGlzdGluZ0FkZHJlc3MgPSBidWNrZXQu
ZXhlY3V0YWJsZUFkZHJlc3MoKTsKLSAgICAgICAgaWYgKCFncm91cC5tX3N0dWJSb3V0aW5lIHx8
IGV4aXN0aW5nQWRkcmVzcyAhPSBncm91cC5tX3N0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpLmV4
ZWN1dGFibGVBZGRyZXNzKCkpIHsKLSAgICAgICAgICAgIFNpZGVBY2Nlc3NDYXNlR3JvdXAqIGZv
dW5kID0gbnVsbHB0cjsKLSAgICAgICAgICAgIGZvciAoYXV0byYga3YgOiBtX3ZhcmlhbnRHcm91
cHMpIHsKLSAgICAgICAgICAgICAgICBpZiAoa3YudmFsdWUgJiYga3YudmFsdWUtPm1fc3R1YlJv
dXRpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICYmIGt2LnZhbHVlLT5tX3N0dWJSb3V0aW5l
LT5jb2RlKCkuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCkgPT0gZXhpc3RpbmdBZGRyZXNzKSB7
Ci0gICAgICAgICAgICAgICAgICAgIGZvdW5kID0gJiprdi52YWx1ZTsKLSAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgQVNTRVJUKGZvdW5kKTsKLSAgICAgICAgICAgIGRhdGFMb2dMbklmKFNpZGVBY2Nlc3NDYWNo
ZUludGVybmFsOjp2ZXJib3NlLCAiSGFzaCBjb2xsaXNpb24gb24gIiwga2V5LCAiIGV4aXN0aW5n
IGVudHJ5OiAiLCBmb3VuZC0+bV9rZXkpOwotICAgICAgICAgICAgbV92YXJpYW50R3JvdXBzLnJl
bW92ZShoYXNoS2V5KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLSAg
ICAKIC8vICAgIGF1dG8gbnVtVmFyaWFudHMgPSBncm91cC5udW1WYXJpYW50cygpOwogICAgIGF1
dG8gcmVzdWx0ID0gZ3JvdXAudHJ5Q2FjaGVHZXRCeUlkKHN0cnVjdHVyZS0+Z2xvYmFsT2JqZWN0
KCksIHN0cnVjdHVyZSwgYmFzZVZhbHVlLmFzQ2VsbCgpLCBpZGVudGlmaWVyLCBzbG90KTsKIAog
ICAgIGlmIChyZXN1bHQuZ2VuZXJhdGVkU29tZUNvZGUoKSkgewogICAgICAgICBkYXRhTG9nTG5J
ZihTaWRlQWNjZXNzQ2FjaGVJbnRlcm5hbDo6dmVyYm9zZSwgIlBhdGhjaGluZyAiLCBzdHJ1Y3R1
cmUtPmlkKCksICIgYW5kICIsIGlkZW50aWZpZXIsICIgdG8gIiwgUmF3UG9pbnRlcihyZXN1bHQu
Y29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKLSAgICAgICAgYnVja2V0ID0gRnVuY3Rpb25Q
dHI8SklUU3R1YlJvdXRpbmVQdHJUYWc+KHJlc3VsdC5jb2RlKCkpOworICAgICAgICBpZGVudGlm
aWVyLnVpZCgpLT5zaWRlQ2FjaGUoKSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDY0X3Q+KEZ1bmN0
aW9uUHRyPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihyZXN1bHQuY29kZSgpKS5leGVjdXRhYmxlQWRk
cmVzcygpKTsKICAgICAgICAgCiAgICAgICAgIGlmIChyZXN1bHQuZ2VuZXJhdGVkRmluYWxDb2Rl
KCkpIHsKICAgICAgICAgICAgIGRhdGFMb2dMbklmKFNpZGVBY2Nlc3NDYWNoZUludGVybmFsOjp2
ZXJib3NlLCAiR2VuZXJhdGVkIGZpbmFsIGNvZGUgZm9yICIsIHN0cnVjdHVyZS0+aWQoKSwgIiBh
bmQgIiwgaWRlbnRpZmllcik7CkBAIC00ODIsNyArNDYzLDcgQEAgdm9pZCBQcm9wZXJ0eUFjY2Vz
c1NpZGVJbmxpbmVDYWNoZTo6b2JzZXJ2ZVN0cnVjdHVyZUdldEJ5SWQoYm9vbCBpc0hpdCwgY29u
c3QgSlMKICAgICB9IGVsc2UgaWYgKHJlc3VsdC5zaG91bGRHaXZlVXBOb3coKSkgewogICAgICAg
ICBkYXRhTG9nTG5JZihTaWRlQWNjZXNzQ2FjaGVJbnRlcm5hbDo6dmVyYm9zZSwgIlNob3VsZCBn
aXZlIHVwIG9uICIsIHN0cnVjdHVyZS0+aWQoKSwgIiBhbmQgIiwgaWRlbnRpZmllcik7CiAgICAg
ICAgIGdyb3VwLmdlbmVyYXRlZEZpbmFsQ29kZSA9IHRydWU7Ci0gICAgICAgIGJ1Y2tldCA9IG51
bGxwdHI7CisgICAgICAgIGlkZW50aWZpZXIudWlkKCktPnNpZGVDYWNoZSgpID0gMDsKICAgICB9
CiAgICAgCiAvLyAgICBzdHViSW5mby0+c2VlblN0cnVjdHVyZXNDb3VudCArPSBncm91cC5udW1W
YXJpYW50cygpIC0gbnVtVmFyaWFudHM7CkBAIC01MDUsNyArNDg2LDYgQEAgdm9pZCBQcm9wZXJ0
eUFjY2Vzc1NpZGVJbmxpbmVDYWNoZTo6Z2VuZXJhdGVDYWxsc2l0ZShDQ2FsbEhlbHBlcnMmIGpp
dCwKICAgICBHUFJSZWcgc2NyYXRjaCA9IEludmFsaWRHUFJSZWc7CiAKICAgICBhdXRvJiB2bSA9
IGppdC52bSgpOwotICAgIHZvaWQqIHNpZGVJQ1RhYmxlID0gdm0uaGVhcC5wcm9wZXJ0eUFjY2Vz
c1NpZGVJbmxpbmVDYWNoZSgpLmp1bXBUYWJsZSgwKTsKIAogICAgIEFTU0VSVChvcmlnaW5hbEJh
c2UgIT0gSW52YWxpZEdQUlJlZyk7CiAgICAgQVNTRVJUKG9yaWdpbmFsUmVzdWx0ICE9IEludmFs
aWRHUFJSZWcpOwpAQCAtNTE4LDExICs0OTgsOSBAQCB2b2lkIFByb3BlcnR5QWNjZXNzU2lkZUlu
bGluZUNhY2hlOjpnZW5lcmF0ZUNhbGxzaXRlKENDYWxsSGVscGVycyYgaml0LAogICAgIHNjcmF0
Y2ggPSBhbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7CiAgICAgCiAgICAgaml0Lm1vdmUo
cHJvcGVydHksIHNjcmF0Y2gpOwotICAgIGppdC5hbmQ2NChDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJ
bW02NChQcm9wZXJ0eUFjY2Vzc1NpZGVJbmxpbmVDYWNoZTo6dmFyaWFudFRhYmxlTWFzayksIHNj
cmF0Y2gpOwotICAgIHN0YXRpY19hc3NlcnQoUHJvcGVydHlBY2Nlc3NTaWRlSW5saW5lQ2FjaGU6
OnZhcmlhbnRUYWJsZVNoaWZ0ID49IDMpOwotICAgIGppdC5yc2hpZnQzMihDQ2FsbEhlbHBlcnM6
OkltbTMyKFByb3BlcnR5QWNjZXNzU2lkZUlubGluZUNhY2hlOjp2YXJpYW50VGFibGVTaGlmdC0z
KSwgc2NyYXRjaCk7Ci0gICAgaml0LmFkZDY0KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTY0KHJl
aW50ZXJwcmV0X2Nhc3Q8dWludDY0X3Q+KHNpZGVJQ1RhYmxlKSksIHNjcmF0Y2gpOworICAgIGpp
dC5hbmQ2NChDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW02NCh+MSksIHNjcmF0Y2gpOwogICAgIGpp
dC5sb2FkNjQoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHNjcmF0Y2gpLCBzY3JhdGNoKTsKKyAgICBq
aXQubG9hZDY0KENDYWxsSGVscGVyczo6QWRkcmVzcyhzY3JhdGNoLCBVbmlxdWVkU3RyaW5nSW1w
bDo6b2Zmc2V0T2ZTaWRlQ2FjaGUoKSksIHNjcmF0Y2gpOwogICAgIHRvU2xvd3BhdGguYXBwZW5k
KGppdC5icmFuY2hUZXN0MzIoQ0NhbGxIZWxwZXJzOjpaZXJvLCBzY3JhdGNoKSk7CiAKICAgICB7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Byb3BlcnR5QWNjZXNzU2lk
ZUlubGluZUNhY2hlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Byb3BlcnR5QWNjZXNz
U2lkZUlubGluZUNhY2hlLmgKaW5kZXggMzVlZGZiYjg5YTY4Li4xNWFkYjVlMzZkODkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUHJvcGVydHlBY2Nlc3NTaWRlSW5saW5l
Q2FjaGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Byb3BlcnR5QWNjZXNzU2lk
ZUlubGluZUNhY2hlLmgKQEAgLTU0LDEzICs1NCw5IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgb2Jz
ZXJ2ZVN0cnVjdHVyZUdldEJ5SWQoYm9vbCBpc0hpdCwgY29uc3QgSlNWYWx1ZSBiYXNlLAogICAg
ICAgICBjb25zdCBDYWNoZWFibGVJZGVudGlmaWVyJiBpZGVudGlmaWVyLCBjb25zdCBQcm9wZXJ0
eVNsb3QmIHNsb3QpOwotICAgIHZvaWQqIGp1bXBUYWJsZShzaXplX3QgaSkgeyByZXR1cm4gcmVp
bnRlcnByZXRfY2FzdDx2b2lkKj4oJm1fZ2V0QnlJZEp1bXBUYWJsZVtpXSk7IH0KIAogICAgIGJv
b2wgdmlzaXRXZWFrKFZNJik7CiAKLSAgICBzdGF0aWMgY29uc3RleHByIHVpbnQ2NF90IHZhcmlh
bnRUYWJsZU1hc2sgPSAweDAwMDBGRkYwOwotICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IHZh
cmlhbnRUYWJsZVNoaWZ0ID0gNDsKLSAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCB2YXJpYW50
VGFibGVFbnRyaWVzID0gMTw8MTI7CiAgICAgc3RhdGljIHZvaWQgZ2VuZXJhdGVDYWxsc2l0ZShD
Q2FsbEhlbHBlcnMmIGppdCwKICAgICAgICAgU3RydWN0dXJlU3R1YkluZm8qIGNhbGxzaXRlU3R1
YkluZm8sIEdQUlJlZyBvcmlnaW5hbEJhc2UsIEdQUlJlZyBvcmlnaW5hbFJlc3VsdCwgUmVnaXN0
ZXJTZXQgbXVzdFByZXNlcnZlLAogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QmIHRv
RG9uZSwgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiB0b1Nsb3dwYXRoKTsKQEAgLTY5LDEzICs2
NSw2IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgVk0qIG1fdm07CiAKLSAgICBzdGF0aWNfYXNz
ZXJ0KCgoc3RkOjpudW1lcmljX2xpbWl0czx0eXBlb2YodmFyaWFudFRhYmxlTWFzayk+OjptYXgo
KSZ2YXJpYW50VGFibGVNYXNrKT4+dmFyaWFudFRhYmxlU2hpZnQpICsgMSA9PSB2YXJpYW50VGFi
bGVFbnRyaWVzKTsKLSAgICBzdGF0aWMgaW5saW5lIHNpemVfdCBidWNrZXRGb3IoVmFyaWFudEtl
eVR5cGUga2V5KQotICAgIHsKLSAgICAgICAgcmV0dXJuIChrZXkucmF3Qml0cygpJnZhcmlhbnRU
YWJsZU1hc2spPj52YXJpYW50VGFibGVTaGlmdDsKLSAgICB9Ci0KLSAgICBWZWN0b3I8RnVuY3Rp
b25QdHI8SklUU3R1YlJvdXRpbmVQdHJUYWc+PiBtX2dldEJ5SWRKdW1wVGFibGUgeyB2YXJpYW50
VGFibGVFbnRyaWVzLCBudWxscHRyIH07CiAgICAgSGFzaE1hcDxWYXJpYW50S2V5SGFzaGFibGVU
eXBlLCBzdGQ6OnVuaXF1ZV9wdHI8U2lkZUFjY2Vzc0Nhc2VHcm91cD4+IG1fdmFyaWFudEdyb3Vw
czsKICAgICBWZWN0b3I8UmVmUHRyPFNpZGVBY2Nlc3NKSVRTdHViUm91dGluZT4+IG1fY2FsbHNp
dGVzOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0ltcGwuY3BwIGIv
U291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJbXBsLmNwcAppbmRleCBkNTg0NTEwMGNlMjYuLmZm
NTljYTg0NWE3ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJbXBsLmNw
cAorKysgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0ltcGwuY3BwCkBAIC00NSw3ICs0NSw3
IEBAIG5hbWVzcGFjZSBXVEYgewogCiB1c2luZyBuYW1lc3BhY2UgVW5pY29kZTsKIAotc3RhdGlj
X2Fzc2VydChzaXplb2YoU3RyaW5nSW1wbCkgPT0gMiAqIHNpemVvZihpbnQpICsgMiAqIHNpemVv
Zih2b2lkKiksICJTdHJpbmdJbXBsIHNob3VsZCBzdGF5IHNtYWxsIik7CisvL3N0YXRpY19hc3Nl
cnQoc2l6ZW9mKFN0cmluZ0ltcGwpID09IDIgKiBzaXplb2YoaW50KSArIDIgKiBzaXplb2Yodm9p
ZCopLCAiU3RyaW5nSW1wbCBzaG91bGQgc3RheSBzbWFsbCIpOwogCiAjaWYgU1RSSU5HX1NUQVRT
CiBTdHJpbmdTdGF0cyBTdHJpbmdJbXBsOjptX3N0cmluZ1N0YXRzOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJbXBsLmggYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmlu
Z0ltcGwuaAppbmRleCBjNzZjZDUyMzY3NjEuLjc5NjQxNWUzNjY1OCAxMDA2NDQKLS0tIGEvU291
cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJbXBsLmgKKysrIGIvU291cmNlL1dURi93dGYvdGV4dC9T
dHJpbmdJbXBsLmgKQEAgLTE1NSw2ICsxNTUsOSBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIGNvbnN0
IGNoYXIxNl90KiBtX2RhdGExNkNoYXI7CiAgICAgfTsKICAgICBtdXRhYmxlIHVuc2lnbmVkIG1f
aGFzaEFuZEZsYWdzOworICAgIAorcHVibGljOgorICAgIG11dGFibGUgdWludDY0X3QgbV9zaWRl
Q2FjaGUgeyAwIH07CiB9OwogCiAvLyBGSVhNRTogVXNlIG9mIFN0cmluZ0ltcGwgYW5kIGNvbnN0
IGlzIHJhdGhlciBjb25mdXNlZC4KQEAgLTE4Niw2ICsxODksOSBAQCBjbGFzcyBTdHJpbmdJbXBs
IDogcHJpdmF0ZSBTdHJpbmdJbXBsU2hhcGUgewogICAgIHRlbXBsYXRlPHR5cGVuYW1lPiBmcmll
bmQgc3RydWN0IFdURjo6SGFzaEFuZENoYXJhY3RlcnNUcmFuc2xhdG9yOwogCiBwdWJsaWM6Cisg
ICAgc3RhdGljIGlubGluZSBwdHJkaWZmX3Qgb2Zmc2V0T2ZTaWRlY2FjaGUoKSB7IHJldHVybiBP
QkpFQ1RfT0ZGU0VUT0YoU3RyaW5nSW1wbCwgbV9zaWRlQ2FjaGUpOyB9CisgICAgaW5saW5lIHVp
bnQ2NF90JiBzaWRlQ2FjaGUoKSB7IHJldHVybiBtX3NpZGVDYWNoZTsgfQorICAgIAogICAgIGVu
dW0gQnVmZmVyT3duZXJzaGlwIHsgQnVmZmVySW50ZXJuYWwsIEJ1ZmZlck93bmVkLCBCdWZmZXJT
dWJzdHJpbmcsIEJ1ZmZlckV4dGVybmFsIH07CiAKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2ln
bmVkIE1heExlbmd0aCA9IFN0cmluZ0ltcGxTaGFwZTo6TWF4TGVuZ3RoOwotLSAKMi4zMC4xIChB
cHBsZSBHaXQtMTMwKQoKCkZyb20gNTZiNDI3ZDQ0MTcwYWNkZmYwZTA0ZGE2ZDAxMGNhMzdkZDkx
MmQ3NyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKRnJvbTogSnVzdGluIE1pY2hhdWQgPGp1c3Rp
bl9taWNoYXVkQGFwcGxlLmNvbT4KRGF0ZTogU2F0LCAyMyBPY3QgMjAyMSAxMjo0Mjo0MiAtMDcw
MApTdWJqZWN0OiBbUEFUQ0ggMTcvMTddIC4KCi0tLQogLi4uL2dldC1ieS1pZC1ibG93b3V0LXN0
cnVjdHVyZS1pYy5qcyAgICAgICAgIHwgIDggLS0tLS0tLS0KIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAgICB8ICA3ICsrKysrLS0KIC4uLi9qaXQvUHJvcGVydHlB
Y2Nlc3NTaWRlSW5saW5lQ2FjaGUuY3BwICAgICB8IDE5ICsrKysrKysrKysrKystLS0tLS0KIC4u
Li9qaXQvUHJvcGVydHlBY2Nlc3NTaWRlSW5saW5lQ2FjaGUuaCAgICAgICB8ICAyICstCiBTb3Vy
Y2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0ltcGwuaCAgICAgICAgICAgICAgfCAgOSArKystLS0tLS0K
IDUgZmlsZXMgY2hhbmdlZCwgMjIgaW5zZXJ0aW9ucygrKSwgMjMgZGVsZXRpb25zKC0pCgpkaWZm
IC0tZ2l0IGEvSlNUZXN0cy9taWNyb2JlbmNobWFya3MvZ2V0LWJ5LWlkLWJsb3dvdXQtc3RydWN0
dXJlLWljLmpzIGIvSlNUZXN0cy9taWNyb2JlbmNobWFya3MvZ2V0LWJ5LWlkLWJsb3dvdXQtc3Ry
dWN0dXJlLWljLmpzCmluZGV4IDgxYzcyNWI0NzI1Mi4uM2YxN2Q1YjBhYTdlIDEwMDY0NAotLS0g
YS9KU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9nZXQtYnktaWQtYmxvd291dC1zdHJ1Y3R1cmUtaWMu
anMKKysrIGIvSlNUZXN0cy9taWNyb2JlbmNobWFya3MvZ2V0LWJ5LWlkLWJsb3dvdXQtc3RydWN0
dXJlLWljLmpzCkBAIC03LDEyICs3LDYgQEAgZnVuY3Rpb24gZm9vKG8sIHYpIHsKIAogbm9Jbmxp
bmUoZm9vKQogCi1mdW5jdGlvbiBmb28yKG8pIHsKLSAgICByZXR1cm4gby5nCi19Ci0KLW5vSW5s
aW5lKGZvbzIpCi0KIGZ1bmN0aW9uIGNoZWNrKG8sIGUpIHsKICAgICBpZiAoZm9vKG8sIGJsYWNr
Ym94KCJmIikpICE9IGUpCiAgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdCBmb3Igb2Jq
ZWN0OiAiICsgbwpAQCAtMzYsOCArMzAsNiBAQCBmb3IgKHZhciBpID0gMDsgaSA8IDFlNzsgKytp
KSB7CiAgICAgY2hlY2soe286MSwgYjoyLCBmOjl9LCA5KQogICAgIGNoZWNrKHtwOjEsIGI6Miwg
ZjoxMCwgYzozIH0sIDEwKQogICAgIGNoZWNrKHtxOjEsIGI6MiwgYzozLCBkOjQsIGU6NSwgZjox
MX0sIDExKQotICAgIGlmIChmb28yKHtnOjg5LCBmOjZ9KSAhPSA4OSkKLSAgICAgICAgdGhyb3cg
IkVycm9yOiBiYWQgcmVzdWx0IgogCiAgICAgaWYgKGkgPT0gMWU2KzUpIHsKICAgICAgICAgY2hl
Y2soe3o6ODksIGY6MjB9LCAyMCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUT3BlcmF0aW9ucy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJh
dGlvbnMuY3BwCmluZGV4IDNhMGNjOTMxNWRmZS4uMDMyOWYyZTZmNTJiIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKQEAgLTIzNDEsOCArMjM0MSw4IEBA
IEFMV0FZU19JTkxJTkUgc3RhdGljIEpTVmFsdWUgZ2V0QnlWYWwoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjCiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChjYWxs
RnJhbWUtPmJ5dGVjb2RlSW5kZXgoKSAhPSBCeXRlY29kZUluZGV4KDApKTsKICAgICAgICAgICAg
ICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIGF1dG8gaWRlbnQgPSBDYWNoZWFibGVJZGVu
dGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGV4aXN0aW5nQXRvbVN0cmluZy5s
ZWFrUmVmKCkpOwotICAgICAgICAgICAgICAgICAgICBiYXNlVmFsdWUuZ2V0UHJvcGVydHlTbG90
KGdsb2JhbE9iamVjdCwgaWRlbnQudWlkKCksIFsmXSAoYm9vbCBmb3VuZCwgUHJvcGVydHlTbG90
JiBzbG90KSAtPiBKU1ZhbHVlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZtLmhlYXAucHJv
cGVydHlBY2Nlc3NTaWRlSW5saW5lQ2FjaGUoKS5vYnNlcnZlU3RydWN0dXJlR2V0QnlJZChmb3Vu
ZCwgYmFzZVZhbHVlLCBpZGVudCwgc2xvdCk7CisgICAgICAgICAgICAgICAgICAgIGJhc2VWYWx1
ZS5nZXRQcm9wZXJ0eVNsb3QoZ2xvYmFsT2JqZWN0LCBpZGVudC51aWQoKSwgWyZdIChib29sLCBQ
cm9wZXJ0eVNsb3QmIHNsb3QpIC0+IEpTVmFsdWUgeworICAgICAgICAgICAgICAgICAgICAgICAg
dm0uaGVhcC5wcm9wZXJ0eUFjY2Vzc1NpZGVJbmxpbmVDYWNoZSgpLm9ic2VydmVTdHJ1Y3R1cmVH
ZXRCeUlkKGJhc2VWYWx1ZSwgaWRlbnQsIHNsb3QpOwogICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAg
ICAgICAgICAgICAKQEAgLTIzOTgsNiArMjM5OCw3IEBAIEFMV0FZU19JTkxJTkUgc3RhdGljIEpT
VmFsdWUgZ2V0QnlWYWwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBj
CiAKIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25HZXRCeVZhbEdlbmVyaWMsIEVu
Y29kZWRKU1ZhbHVlLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlU3R1
YkluZm8qIHN0dWJJbmZvLCBBcnJheVByb2ZpbGUqIHByb2ZpbGUsIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRCYXNlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkU3Vic2NyaXB0KSkKIHsKKy8vICAgIGRh
dGFMb2dMbigiMSIpOwogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBDYWxs
RnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CiAgICAgSklUT3BlcmF0
aW9uUHJvbG9ndWVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOwpAQCAtMjQx
MSw2ICsyNDEyLDcgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkdldEJ5VmFs
R2VuZXJpYywgRW5jb2RlZEpTVmFsdWUsIChKU0dsb2JhbE9iamUKIAogSlNDX0RFRklORV9KSVRf
T1BFUkFUSU9OKG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUsIEVuY29kZWRKU1ZhbHVlLCAoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBB
cnJheVByb2ZpbGUqIHByb2ZpbGUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkU3Vic2NyaXB0KSkKIHsKKy8vICAgIGRhdGFMb2dMbigiMSIpOwogICAg
IFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9
IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CiAgICAgSklUT3BlcmF0aW9uUHJvbG9ndWVDYWxsRnJh
bWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOwpAQCAtMjQ1Myw2ICsyNDU1LDcgQEAgSlND
X0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUsIEVuY29kZWRK
U1ZhbHVlLCAoSlNHbG9iYWxPYmoKIAogSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlv
bkdldEJ5VmFsLCBFbmNvZGVkSlNWYWx1ZSwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkUHJvcGVy
dHkpKQogeworLy8gICAgZGF0YUxvZ0xuKCIxIik7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0
LT52bSgpOwogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZt
KTsKICAgICBKSVRPcGVyYXRpb25Qcm9sb2d1ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNh
bGxGcmFtZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Byb3BlcnR5
QWNjZXNzU2lkZUlubGluZUNhY2hlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUHJv
cGVydHlBY2Nlc3NTaWRlSW5saW5lQ2FjaGUuY3BwCmluZGV4IDE2ZGRlN2JiYTkxNC4uZmIyZmI1
ZGQ0MTQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Byb3BlcnR5QWNj
ZXNzU2lkZUlubGluZUNhY2hlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1By
b3BlcnR5QWNjZXNzU2lkZUlubGluZUNhY2hlLmNwcApAQCAtMTI5LDYgKzEyOSwxMiBAQCBwdWJs
aWM6CiAgICAgewogICAgICAgICBtX3N0YXRlID0gU2lkZUFjY2Vzc1N0YXRlOjpHZW5lcmF0ZWQ7
CiAgICAgICAgIAorICAgICAgICBpZiAoIWlzVmFsaWRPZmZzZXQobV9vZmZzZXQpKSB7CisgICAg
ICAgICAgICBzdGF0ZS5qaXQtPm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tNjQoSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpKSwgU2lkZVByb3BlcnR5QWNjZXNzUmVnaXN0ZXJzOjpy
ZXN1bHQpOworICAgICAgICAgICAgc3RhdGUuc3VjY2Vzcy5hcHBlbmQoc3RhdGUuaml0LT5qdW1w
KCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAogICAgICAgICBH
UFJSZWcgc3RvcmFnZUdQUjsKICAgICAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KG1fb2Zmc2V0KSkK
ICAgICAgICAgICAgIHN0b3JhZ2VHUFIgPSBTaWRlUHJvcGVydHlBY2Nlc3NSZWdpc3RlcnM6OmJh
c2U7CkBAIC00MTksNyArNDI1LDcgQEAgUHJvcGVydHlBY2Nlc3NTaWRlSW5saW5lQ2FjaGU6On5Q
cm9wZXJ0eUFjY2Vzc1NpZGVJbmxpbmVDYWNoZSgpCiB7CiB9CiAKLXZvaWQgUHJvcGVydHlBY2Nl
c3NTaWRlSW5saW5lQ2FjaGU6Om9ic2VydmVTdHJ1Y3R1cmVHZXRCeUlkKGJvb2wgaXNIaXQsIGNv
bnN0IEpTVmFsdWUgYmFzZVZhbHVlLAordm9pZCBQcm9wZXJ0eUFjY2Vzc1NpZGVJbmxpbmVDYWNo
ZTo6b2JzZXJ2ZVN0cnVjdHVyZUdldEJ5SWQoY29uc3QgSlNWYWx1ZSBiYXNlVmFsdWUsCiAgICAg
Y29uc3QgQ2FjaGVhYmxlSWRlbnRpZmllciYgaWRlbnRpZmllciwgY29uc3QgUHJvcGVydHlTbG90
JiBzbG90KQogewogICAgIGlmICghT3B0aW9uczo6dXNlUHJvcGVydHlBY2Nlc3NTaWRlSUMoKSkK
QEAgLTQ4NSw3ICs0OTEsNyBAQCB2b2lkIFByb3BlcnR5QWNjZXNzU2lkZUlubGluZUNhY2hlOjpn
ZW5lcmF0ZUNhbGxzaXRlKENDYWxsSGVscGVycyYgaml0LAogICAgIEdQUlJlZyBwcm9wZXJ0eSA9
IFNpZGVQcm9wZXJ0eUFjY2Vzc1JlZ2lzdGVyczo6cHJvcGVydHk7CiAgICAgR1BSUmVnIHNjcmF0
Y2ggPSBJbnZhbGlkR1BSUmVnOwogCi0gICAgYXV0byYgdm0gPSBqaXQudm0oKTsKKy8vICAgIGF1
dG8mIHZtID0gaml0LnZtKCk7CiAKICAgICBBU1NFUlQob3JpZ2luYWxCYXNlICE9IEludmFsaWRH
UFJSZWcpOwogICAgIEFTU0VSVChvcmlnaW5hbFJlc3VsdCAhPSBJbnZhbGlkR1BSUmVnKTsKQEAg
LTQ5NywxMSArNTAzLDEzIEBAIHZvaWQgUHJvcGVydHlBY2Nlc3NTaWRlSW5saW5lQ2FjaGU6Omdl
bmVyYXRlQ2FsbHNpdGUoQ0NhbGxIZWxwZXJzJiBqaXQsCiAgICAgYWxsb2NhdG9yLmxvY2socHJv
cGVydHkpOwogICAgIHNjcmF0Y2ggPSBhbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7CiAg
ICAgCi0gICAgaml0Lm1vdmUocHJvcGVydHksIHNjcmF0Y2gpOworICAgIHRvU2xvd3BhdGguYXBw
ZW5kKGppdC5icmFuY2hJZk5vdENlbGwocHJvcGVydHkpKTsKKyAgICB0b1Nsb3dwYXRoLmFwcGVu
ZChqaXQuYnJhbmNoSWZOb3RTdHJpbmcocHJvcGVydHkpKTsKKworICAgIGppdC5sb2FkUHRyKE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKHByb3BlcnR5LCBKU1N0cmluZzo6b2Zmc2V0T2ZWYWx1ZSgp
KSwgc2NyYXRjaCk7CiAgICAgaml0LmFuZDY0KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTY0KH4x
KSwgc2NyYXRjaCk7Ci0gICAgaml0LmxvYWQ2NChDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc2NyYXRj
aCksIHNjcmF0Y2gpOwogICAgIGppdC5sb2FkNjQoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHNjcmF0
Y2gsIFVuaXF1ZWRTdHJpbmdJbXBsOjpvZmZzZXRPZlNpZGVDYWNoZSgpKSwgc2NyYXRjaCk7Ci0g
ICAgdG9TbG93cGF0aC5hcHBlbmQoaml0LmJyYW5jaFRlc3QzMihDQ2FsbEhlbHBlcnM6Olplcm8s
IHNjcmF0Y2gpKTsKKyAgICB0b1Nsb3dwYXRoLmFwcGVuZChqaXQuYnJhbmNoVGVzdDY0KENDYWxs
SGVscGVyczo6WmVybywgc2NyYXRjaCkpOwogCiAgICAgewogICAgICAgICBSZWdpc3RlclNldCBy
ZWdpc3RlcnNUb1ByZXNlcnZlOwpAQCAtNTEzLDcgKzUyMSw2IEBAIHZvaWQgUHJvcGVydHlBY2Nl
c3NTaWRlSW5saW5lQ2FjaGU6OmdlbmVyYXRlQ2FsbHNpdGUoQ0NhbGxIZWxwZXJzJiBqaXQsCiAg
ICAgICAgIGlmIChtdXN0UHJlc2VydmUuY29udGFpbnMoU2lkZVByb3BlcnR5QWNjZXNzUmVnaXN0
ZXJzOjpzY3JhdGNoKSkKICAgICAgICAgICAgIHJlZ2lzdGVyc1RvUHJlc2VydmUuc2V0KFNpZGVQ
cm9wZXJ0eUFjY2Vzc1JlZ2lzdGVyczo6c2NyYXRjaCk7CiAgICAgICAgIEFTU0VSVCghcmVnaXN0
ZXJzVG9QcmVzZXJ2ZS5jb250YWlucyhzY3JhdGNoKSk7Ci0gICAgICAgIHJlZ2lzdGVyc1RvUHJl
c2VydmUuY2xlYXIob3JpZ2luYWxSZXN1bHQpOwogCiAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGV4
dHJhUGFkZGluZ0J5dGVzID0gMDsKICAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZTdGFja0J5dGVz
VXNlZEZvclJlZ2lzdGVyUHJlc2VydmF0aW9uID0gU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjpw
cmVzZXJ2ZVJlZ2lzdGVyc1RvU3RhY2tGb3JDYWxsKGppdCwgcmVnaXN0ZXJzVG9QcmVzZXJ2ZSwg
ZXh0cmFQYWRkaW5nQnl0ZXMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9Qcm9wZXJ0eUFjY2Vzc1NpZGVJbmxpbmVDYWNoZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9Qcm9wZXJ0eUFjY2Vzc1NpZGVJbmxpbmVDYWNoZS5oCmluZGV4IDE1YWRiNWUzNmQ4OS4u
MmQ3OTQxNjFmMjM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Byb3Bl
cnR5QWNjZXNzU2lkZUlubGluZUNhY2hlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9Qcm9wZXJ0eUFjY2Vzc1NpZGVJbmxpbmVDYWNoZS5oCkBAIC01Miw3ICs1Miw3IEBAIHB1Ymxp
YzoKICAgICBQcm9wZXJ0eUFjY2Vzc1NpZGVJbmxpbmVDYWNoZShWTSYgdm0pOwogICAgIH5Qcm9w
ZXJ0eUFjY2Vzc1NpZGVJbmxpbmVDYWNoZSgpOwogCi0gICAgdm9pZCBvYnNlcnZlU3RydWN0dXJl
R2V0QnlJZChib29sIGlzSGl0LCBjb25zdCBKU1ZhbHVlIGJhc2UsCisgICAgdm9pZCBvYnNlcnZl
U3RydWN0dXJlR2V0QnlJZChjb25zdCBKU1ZhbHVlIGJhc2UsCiAgICAgICAgIGNvbnN0IENhY2hl
YWJsZUlkZW50aWZpZXImIGlkZW50aWZpZXIsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCk7CiAK
ICAgICBib29sIHZpc2l0V2VhayhWTSYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdGV4
dC9TdHJpbmdJbXBsLmggYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0ltcGwuaAppbmRleCA3
OTY0MTVlMzY2NTguLjI1YzMwNDMwNmIwMCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvdGV4
dC9TdHJpbmdJbXBsLmgKKysrIGIvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJbXBsLmgKQEAg
LTE0Niw2ICsxNDYsNyBAQCBwcm90ZWN0ZWQ6CiAKICAgICB1bnNpZ25lZCBtX3JlZkNvdW50Owog
ICAgIHVuc2lnbmVkIG1fbGVuZ3RoOworICAgIG11dGFibGUgdWludDY0X3QgbV9zaWRlQ2FjaGUg
eyAwIH07CiAgICAgdW5pb24gewogICAgICAgICBjb25zdCBMQ2hhciogbV9kYXRhODsKICAgICAg
ICAgY29uc3QgVUNoYXIqIG1fZGF0YTE2OwpAQCAtMTU1LDkgKzE1Niw2IEBAIHByb3RlY3RlZDoK
ICAgICAgICAgY29uc3QgY2hhcjE2X3QqIG1fZGF0YTE2Q2hhcjsKICAgICB9OwogICAgIG11dGFi
bGUgdW5zaWduZWQgbV9oYXNoQW5kRmxhZ3M7Ci0gICAgCi1wdWJsaWM6Ci0gICAgbXV0YWJsZSB1
aW50NjRfdCBtX3NpZGVDYWNoZSB7IDAgfTsKIH07CiAKIC8vIEZJWE1FOiBVc2Ugb2YgU3RyaW5n
SW1wbCBhbmQgY29uc3QgaXMgcmF0aGVyIGNvbmZ1c2VkLgpAQCAtMTg5LDkgKzE4Nyw2IEBAIGNs
YXNzIFN0cmluZ0ltcGwgOiBwcml2YXRlIFN0cmluZ0ltcGxTaGFwZSB7CiAgICAgdGVtcGxhdGU8
dHlwZW5hbWU+IGZyaWVuZCBzdHJ1Y3QgV1RGOjpIYXNoQW5kQ2hhcmFjdGVyc1RyYW5zbGF0b3I7
CiAKIHB1YmxpYzoKLSAgICBzdGF0aWMgaW5saW5lIHB0cmRpZmZfdCBvZmZzZXRPZlNpZGVjYWNo
ZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihTdHJpbmdJbXBsLCBtX3NpZGVDYWNoZSk7IH0K
LSAgICBpbmxpbmUgdWludDY0X3QmIHNpZGVDYWNoZSgpIHsgcmV0dXJuIG1fc2lkZUNhY2hlOyB9
Ci0gICAgCiAgICAgZW51bSBCdWZmZXJPd25lcnNoaXAgeyBCdWZmZXJJbnRlcm5hbCwgQnVmZmVy
T3duZWQsIEJ1ZmZlclN1YnN0cmluZywgQnVmZmVyRXh0ZXJuYWwgfTsKIAogICAgIHN0YXRpYyBj
b25zdGV4cHIgdW5zaWduZWQgTWF4TGVuZ3RoID0gU3RyaW5nSW1wbFNoYXBlOjpNYXhMZW5ndGg7
CkBAIC0yODEsNyArMjc2LDkgQEAgcHVibGljOgogICAgIHN0YXRpYyBFeHBlY3RlZDxSZWY8U3Ry
aW5nSW1wbD4sIFVURjhDb252ZXJzaW9uRXJyb3I+IHRyeVJlYWxsb2NhdGUoUmVmPFN0cmluZ0lt
cGw+JiYgb3JpZ2luYWxTdHJpbmcsIHVuc2lnbmVkIGxlbmd0aCwgTENoYXIqJiBkYXRhKTsKICAg
ICBzdGF0aWMgRXhwZWN0ZWQ8UmVmPFN0cmluZ0ltcGw+LCBVVEY4Q29udmVyc2lvbkVycm9yPiB0
cnlSZWFsbG9jYXRlKFJlZjxTdHJpbmdJbXBsPiYmIG9yaWdpbmFsU3RyaW5nLCB1bnNpZ25lZCBs
ZW5ndGgsIFVDaGFyKiYgZGF0YSk7CiAKKyAgICBpbmxpbmUgdWludDY0X3QmIHNpZGVDYWNoZSgp
IHsgcmV0dXJuIG1fc2lkZUNhY2hlOyB9CiAgICAgc3RhdGljIHVuc2lnbmVkIGZsYWdzT2Zmc2V0
KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFN0cmluZ0ltcGwsIG1faGFzaEFuZEZsYWdzKTsg
fQorICAgIHN0YXRpYyB1bnNpZ25lZCBvZmZzZXRPZlNpZGVDYWNoZSgpIHsgcmV0dXJuIE9CSkVD
VF9PRkZTRVRPRihTdHJpbmdJbXBsLCBtX3NpZGVDYWNoZSk7IH0KICAgICBzdGF0aWMgY29uc3Rl
eHByIHVuc2lnbmVkIGZsYWdJczhCaXQoKSB7IHJldHVybiBzX2hhc2hGbGFnOEJpdEJ1ZmZlcjsg
fQogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgZmxhZ0lzQXRvbSgpIHsgcmV0dXJuIHNf
aGFzaEZsYWdTdHJpbmdLaW5kSXNBdG9tOyB9CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25l
ZCBmbGFnSXNTeW1ib2woKSB7IHJldHVybiBzX2hhc2hGbGFnU3RyaW5nS2luZElzU3ltYm9sOyB9
Ci0tIAoyLjMwLjEgKEFwcGxlIEdpdC0xMzApCgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>