<?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>155486</bug_id>
          
          <creation_ts>2016-03-15 01:36:27 -0700</creation_ts>
          <short_desc>[css-grid] Rename GridResolvedPosition to GridPositionsResolver</short_desc>
          <delta_ts>2016-03-15 03:38:35 -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>Layout and Rendering</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>153488</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Manuel Rego Casasnovas">rego</reporter>
          <assigned_to name="Manuel Rego Casasnovas">rego</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>jfernandez</cc>
    
    <cc>rego</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>svillar</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1174929</commentid>
    <comment_count>0</comment_count>
    <who name="Manuel Rego Casasnovas">rego</who>
    <bug_when>2016-03-15 01:36:27 -0700</bug_when>
    <thetext>We&apos;ve a TODO in GridResolvedPosition class:
// TODO(rego): Rename class to GridPositionsResolver.

This was already done in Blink:
https://codereview.chromium.org/1648903002/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1174931</commentid>
    <comment_count>1</comment_count>
      <attachid>274082</attachid>
    <who name="Manuel Rego Casasnovas">rego</who>
    <bug_when>2016-03-15 01:37:59 -0700</bug_when>
    <thetext>Created attachment 274082
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1174932</commentid>
    <comment_count>2</comment_count>
      <attachid>274082</attachid>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2016-03-15 01:47:02 -0700</bug_when>
    <thetext>Comment on attachment 274082
Patch

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

r=me provided all the EWS are happy with the rename

&gt; Source/WebCore/rendering/style/GridPositionsResolver.cpp:2
&gt; + * Copyright (C) 2014 Igalia S.L.

Let&apos;s use this to update the copyright to 2014, 2016

&gt; Source/WebCore/rendering/style/GridPositionsResolver.cpp:38
&gt; +#include &lt;cstdlib&gt;

Are we really using this include?

&gt; Source/WebCore/rendering/style/GridPositionsResolver.h:2
&gt; + * Copyright (C) 2014 Igalia S.L.

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1174946</commentid>
    <comment_count>3</comment_count>
      <attachid>274084</attachid>
    <who name="Manuel Rego Casasnovas">rego</who>
    <bug_when>2016-03-15 02:49:24 -0700</bug_when>
    <thetext>Created attachment 274084
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1174947</commentid>
    <comment_count>4</comment_count>
    <who name="Manuel Rego Casasnovas">rego</who>
    <bug_when>2016-03-15 02:50:34 -0700</bug_when>
    <thetext>Thanks for the review

(In reply to comment #2)
&gt; &gt; Source/WebCore/rendering/style/GridPositionsResolver.cpp:2
&gt; &gt; + * Copyright (C) 2014 Igalia S.L.
&gt; 
&gt; Let&apos;s use this to update the copyright to 2014, 2016

Done.

&gt; 
&gt; &gt; Source/WebCore/rendering/style/GridPositionsResolver.cpp:38
&gt; &gt; +#include &lt;cstdlib&gt;
&gt; 
&gt; Are we really using this include?

We need it for std::abs(int).

&gt; &gt; Source/WebCore/rendering/style/GridPositionsResolver.h:2
&gt; &gt; + * Copyright (C) 2014 Igalia S.L.
&gt; 
&gt; Ditto.

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1174949</commentid>
    <comment_count>5</comment_count>
      <attachid>274084</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-03-15 03:38:30 -0700</bug_when>
    <thetext>Comment on attachment 274084
Patch

Clearing flags on attachment: 274084

Committed r198207: &lt;http://trac.webkit.org/changeset/198207&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1174950</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-03-15 03:38:35 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>274082</attachid>
            <date>2016-03-15 01:37:59 -0700</date>
            <delta_ts>2016-03-15 02:49:17 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-155486-20160315093746.patch</filename>
            <type>text/plain</type>
            <size>59815</size>
            <attacher name="Manuel Rego Casasnovas">rego</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk4MTM1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggM2ViNmU4MzM1ZTE3MDdj
OGE5OTIwMDk1ZDgxNjQxODZjMDEyNmI3Yy4uZDFjZDBiOWIzMDE0NGZhNzhlMzhjYWU2YmU4YjZi
YTE2NDgzYmYzZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUyIEBACisyMDE2LTAzLTE0ICBNYW51
ZWwgUmVnbyBDYXNhc25vdmFzICA8cmVnb0BpZ2FsaWEuY29tPgorCisgICAgICAgIFtjc3MtZ3Jp
ZF0gUmVuYW1lIEdyaWRSZXNvbHZlZFBvc2l0aW9uIHRvIEdyaWRQb3NpdGlvbnNSZXNvbHZlcgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU1NDg2CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgR3JpZFJlc29s
dmVkUG9zaXRpb24gaXMgbm90IHN0b3JpbmcgYSBwb3NpdGlvbiAodHJhY2sgb3IgbGluZSkgYW55
bW9yZS4KKyAgICAgICAgQ3VycmVudGx5IGl0J3MganVzdCBhIGNsYXNzIHdyYXBwaW5nIHRoZSBt
ZXRob2RzIHRvIHJlc29sdmUKKyAgICAgICAgZ3JpZCBwb3NpdGlvbnMgZnJvbSBzdHlsZS4KKyAg
ICAgICAgUmVuYW1lZCB0aGUgY2xhc3MgdG8gYXZvaWQgY29uZnVzaW9ucy4KKworICAgICAgICBO
byBuZXcgdGVzdHMsIG5vIGNoYW5nZSBvZiBiZWhhdmlvci4KKworICAgICAgICAqIENNYWtlTGlz
dHMudHh0OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyR3JpZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJHcmlkOjpwbGFjZUl0ZW1zT25HcmlkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckdyaWQ6
OnBvcHVsYXRlRXhwbGljaXRHcmlkQW5kT3JkZXJJdGVyYXRvcik6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJHcmlkOjpjcmVhdGVFbXB0eUdyaWRBcmVhQXRTcGVjaWZpZWRQb3NpdGlvbnNPdXRz
aWRlR3JpZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJHcmlkOjpwbGFjZVNwZWNpZmllZE1h
am9yQXhpc0l0ZW1zT25HcmlkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckdyaWQ6OnBsYWNl
QXV0b01ham9yQXhpc0l0ZW1PbkdyaWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyR3JpZDo6
b2Zmc2V0QW5kQnJlYWR0aEZvclBvc2l0aW9uZWRDaGlsZCk6CisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlckdyaWQuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvR3JpZENvb3JkaW5hdGUu
aDoKKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvR3JpZFBvc2l0aW9uc1Jlc29sdmVyLmNwcDog
UmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9HcmlkUmVzb2x2ZWRQ
b3NpdGlvbi5jcHAuCisgICAgICAgIChXZWJDb3JlOjppc0NvbHVtblNpZGUpOgorICAgICAgICAo
V2ViQ29yZTo6aXNTdGFydFNpZGUpOgorICAgICAgICAoV2ViQ29yZTo6aW5pdGlhbFBvc2l0aW9u
U2lkZSk6CisgICAgICAgIChXZWJDb3JlOjpmaW5hbFBvc2l0aW9uU2lkZSk6CisgICAgICAgIChX
ZWJDb3JlOjpncmlkTGluZXNGb3JTaWRlKToKKyAgICAgICAgKFdlYkNvcmU6OmltcGxpY2l0TmFt
ZWRHcmlkTGluZUZvclNpZGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JpZFBvc2l0aW9uc1Jlc29s
dmVyOjppc05vbkV4aXN0ZW50TmFtZWRMaW5lT3JBcmVhKToKKyAgICAgICAgKFdlYkNvcmU6OmFk
anVzdEdyaWRQb3NpdGlvbnNGcm9tU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JpZFBvc2l0
aW9uc1Jlc29sdmVyOjpleHBsaWNpdEdyaWRDb2x1bW5Db3VudCk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmlkUG9zaXRpb25zUmVzb2x2ZXI6OmV4cGxpY2l0R3JpZFJvd0NvdW50KToKKyAgICAgICAg
KFdlYkNvcmU6OmV4cGxpY2l0R3JpZFNpemVGb3JTaWRlKToKKyAgICAgICAgKFdlYkNvcmU6Omxv
b2tBaGVhZEZvck5hbWVkR3JpZExpbmUpOgorICAgICAgICAoV2ViQ29yZTo6bG9va0JhY2tGb3JO
YW1lZEdyaWRMaW5lKToKKyAgICAgICAgKFdlYkNvcmU6OnJlc29sdmVOYW1lZEdyaWRMaW5lUG9z
aXRpb25Gcm9tU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6ZGVmaW5pdGVHcmlkU3BhbldpdGhO
YW1lZExpbmVTcGFuQWdhaW5zdE9wcG9zaXRlKToKKyAgICAgICAgKFdlYkNvcmU6OnJlc29sdmVO
YW1lZEdyaWRMaW5lUG9zaXRpb25BZ2FpbnN0T3Bwb3NpdGVQb3NpdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpyZXNvbHZlR3JpZFBvc2l0aW9uQWdhaW5zdE9wcG9zaXRlUG9zaXRpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6R3JpZFBvc2l0aW9uc1Jlc29sdmVyOjpzcGFuU2l6ZUZvckF1dG9QbGFj
ZWRJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OnJlc29sdmVHcmlkUG9zaXRpb25Gcm9tU3R5bGUp
OgorICAgICAgICAoV2ViQ29yZTo6R3JpZFBvc2l0aW9uc1Jlc29sdmVyOjpyZXNvbHZlR3JpZFBv
c2l0aW9uc0Zyb21TdHlsZSk6CisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL0dyaWRQb3NpdGlv
bnNSZXNvbHZlci5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxl
L0dyaWRSZXNvbHZlZFBvc2l0aW9uLmguCisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1N0eWxl
QWxsSW5PbmUuY3BwOgorCiAyMDE2LTAzLTE0ICBBbGV4ZXkgUHJvc2t1cnlha292ICA8YXBAYXBw
bGUuY29tPgogCiAgICAgICAgIEJ1aWxkIGZpeC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggMGY1
YTJkODkzYmIwZDJmN2RhOTRlYzJjNzkyNDk3MzM0MTljYzAyNC4uYTE4YWE1NGQxMDQ5YjdkYzNj
MjdiZmE2YTE1MTViZmNjZmM1YWU0OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ01ha2VM
aXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTI1MzksNyAr
MjUzOSw3IEBAIHNldChXZWJDb3JlX1NPVVJDRVMKICAgICByZW5kZXJpbmcvc3R5bGUvQ29udGVu
dERhdGEuY3BwCiAgICAgcmVuZGVyaW5nL3N0eWxlL0NvdW50ZXJEaXJlY3RpdmVzLmNwcAogICAg
IHJlbmRlcmluZy9zdHlsZS9GaWxsTGF5ZXIuY3BwCi0gICAgcmVuZGVyaW5nL3N0eWxlL0dyaWRS
ZXNvbHZlZFBvc2l0aW9uLmNwcAorICAgIHJlbmRlcmluZy9zdHlsZS9HcmlkUG9zaXRpb25zUmVz
b2x2ZXIuY3BwCiAgICAgcmVuZGVyaW5nL3N0eWxlL0tleWZyYW1lTGlzdC5jcHAKICAgICByZW5k
ZXJpbmcvc3R5bGUvTmluZVBpZWNlSW1hZ2UuY3BwCiAgICAgcmVuZGVyaW5nL3N0eWxlL1F1b3Rl
c0RhdGEuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKaW5kZXggNGIxNzg2MzA1NmU0ZmY2YzFhYjdiMThiNTQxMjVlMGNlYzY4YTc4Ni4u
MDcwMzU3Yjc0NmMxMTk1MGRiM2IyYmIxNzdjYjk4NGY0YWY1MjdlNSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNjE4OCw4ICs2
MTg4LDggQEAKIAkJQ0RGMkIwMTkxODIwNTQwNzAwRjJCNDI0IC8qIE1vY2tUcmFja3MuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENERjJCMDBGMTgyMDU0
MDYwMEYyQjQyNCAvKiBNb2NrVHJhY2tzLmggKi87IH07CiAJCUNERjY1Q0M4MTQ1QjFFNzUwMEM0
QzdBQSAvKiBNZWRpYUNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IENEMjdGNkU0MTQ1NzY3ODcwMDc4MjA3RCAvKiBNZWRpYUNvbnRyb2xs
ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlD
REY2NUNDQTE0NUI0NDg4MDBDNEM3QUEgLyogTWVkaWFDb250cm9sbGVySW50ZXJmYWNlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREY2NUNDOTE0NUI0
M0E3MDBDNEM3QUEgLyogTWVkaWFDb250cm9sbGVySW50ZXJmYWNlLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJQ0RGNzQ4M0UxOEZFQkNFQzAwMDZF
Q0MwIC8qIEdyaWRSZXNvbHZlZFBvc2l0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENERjc0ODNDMThGRUJDRUMwMDA2RUNDMCAvKiBHcmlkUmVz
b2x2ZWRQb3NpdGlvbi5jcHAgKi87IH07Ci0JCUNERjc0ODNGMThGRUJDRUMwMDA2RUNDMCAvKiBH
cmlkUmVzb2x2ZWRQb3NpdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQ0RGNzQ4M0QxOEZFQkNFQzAwMDZFQ0MwIC8qIEdyaWRSZXNvbHZlZFBvc2l0
aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJ
Q0RGNzQ4M0UxOEZFQkNFQzAwMDZFQ0MwIC8qIEdyaWRQb3NpdGlvbnNSZXNvbHZlci5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREY3NDgzQzE4RkVC
Q0VDMDAwNkVDQzAgLyogR3JpZFBvc2l0aW9uc1Jlc29sdmVyLmNwcCAqLzsgfTsKKwkJQ0RGNzQ4
M0YxOEZFQkNFQzAwMDZFQ0MwIC8qIEdyaWRQb3NpdGlvbnNSZXNvbHZlci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RGNzQ4M0QxOEZFQkNFQzAwMDZF
Q0MwIC8qIEdyaWRQb3NpdGlvbnNSZXNvbHZlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCUNERkMzNjA1MThDQTYxQzIwMDI2RTU2RiAvKiBSZW1v
dGVDb21tYW5kTGlzdGVuZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQ0RGQzM2MDMxOENBNjFDMjAwMjZFNTZGIC8qIFJlbW90ZUNvbW1hbmRMaXN0
ZW5lci5jcHAgKi87IH07CiAJCUNERkMzNjA2MThDQTYxQzIwMDI2RTU2RiAvKiBSZW1vdGVDb21t
YW5kTGlzdGVuZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IENERkMzNjA0MThDQTYxQzIwMDI2RTU2RiAvKiBSZW1vdGVDb21tYW5kTGlzdGVuZXIuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlDREZDMzYw
NzE4Q0E2OTZDMDAyNkU1NkYgLyogUmVtb3RlQ29tbWFuZExpc3RlbmVySU9TLm1tIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RGQzM2MDIxOENBNjE2MzAw
MjZFNTZGIC8qIFJlbW90ZUNvbW1hbmRMaXN0ZW5lcklPUy5tbSAqLzsgfTsKQEAgLTE0MjA2LDgg
KzE0MjA2LDggQEAKIAkJQ0RGNDE5OTkxQUIwREExNDAwNEU2NEUxIC8qIG1pc3NpbmdJbWFnZUAz
eC5wbmcgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBp
bWFnZS5wbmc7IHBhdGggPSAibWlzc2luZ0ltYWdlQDN4LnBuZyI7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUNERjY1Q0M5MTQ1QjQzQTcwMEM0QzdBQSAvKiBNZWRpYUNvbnRyb2xsZXJJ
bnRlcmZhY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWVkaWFDb250cm9s
bGVySW50ZXJmYWNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNERjY1Q0NDMTQ1
QjZBRkUwMEM0QzdBQSAvKiBKU0hUTUxNZWRpYUVsZW1lbnRDdXN0b20uY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNIVE1MTWVkaWFFbGVtZW50Q3VzdG9tLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQ0RGNzQ4M0MxOEZFQkNFQzAwMDZFQ0MwIC8q
IEdyaWRSZXNvbHZlZFBvc2l0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEdyaWRSZXNvbHZlZFBvc2l0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJQ0RGNzQ4M0QxOEZFQkNFQzAwMDZFQ0MwIC8qIEdyaWRSZXNvbHZlZFBvc2l0aW9uLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdyaWRSZXNvbHZlZFBvc2l0aW9uLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUNERjc0ODNDMThGRUJDRUMwMDA2RUNDMCAv
KiBHcmlkUG9zaXRpb25zUmVzb2x2ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gR3JpZFBvc2l0aW9uc1Jlc29sdmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJQ0RGNzQ4M0QxOEZFQkNFQzAwMDZFQ0MwIC8qIEdyaWRQb3NpdGlvbnNSZXNvbHZl
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHcmlkUG9zaXRpb25zUmVzb2x2
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0RGQzM2MDExOENBNjE2MzAwMjZF
NTZGIC8qIFJlbW90ZUNvbW1hbmRMaXN0ZW5lcklPUy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBSZW1vdGVDb21tYW5kTGlzdGVuZXJJT1MuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQ0RGQzM2MDIxOENBNjE2MzAwMjZFNTZGIC8qIFJlbW90ZUNvbW1hbmRMaXN0
ZW5lcklPUy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFJlbW90
ZUNvbW1hbmRMaXN0ZW5lcklPUy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0RG
QzM2MDMxOENBNjFDMjAwMjZFNTZGIC8qIFJlbW90ZUNvbW1hbmRMaXN0ZW5lci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW1vdGVDb21tYW5kTGlzdGVuZXIuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjI1NjAsOCArMjI1NjAsOCBAQAogCQkJ
CUNEM0UyNTFCMTgwNDZCMDYwMEUyN0Y1NiAvKiBHcmlkQ29vcmRpbmF0ZS5oICovLAogCQkJCUNE
RUY0RkQ2MTdFODVDOEYwMEFFRTI0QiAvKiBHcmlkTGVuZ3RoLmggKi8sCiAJCQkJQTEyNzA1QzIx
NjU2QkQ2NTAwQzJFMjdDIC8qIEdyaWRQb3NpdGlvbi5oICovLAotCQkJCUNERjc0ODNDMThGRUJD
RUMwMDA2RUNDMCAvKiBHcmlkUmVzb2x2ZWRQb3NpdGlvbi5jcHAgKi8sCi0JCQkJQ0RGNzQ4M0Qx
OEZFQkNFQzAwMDZFQ0MwIC8qIEdyaWRSZXNvbHZlZFBvc2l0aW9uLmggKi8sCisJCQkJQ0RGNzQ4
M0MxOEZFQkNFQzAwMDZFQ0MwIC8qIEdyaWRQb3NpdGlvbnNSZXNvbHZlci5jcHAgKi8sCisJCQkJ
Q0RGNzQ4M0QxOEZFQkNFQzAwMDZFQ0MwIC8qIEdyaWRQb3NpdGlvbnNSZXNvbHZlci5oICovLAog
CQkJCUExMkExMDRFMTY2NDQ0REMwMDhGQTMxMSAvKiBHcmlkVHJhY2tTaXplLmggKi8sCiAJCQkJ
QkM1RUJBMEUwRTgyM0U0NzAwQjI1OTY1IC8qIEtleWZyYW1lTGlzdC5jcHAgKi8sCiAJCQkJQkM1
RUJBMEYwRTgyM0U0NzAwQjI1OTY1IC8qIEtleWZyYW1lTGlzdC5oICovLApAQCAtMjYxNDYsNyAr
MjYxNDYsNyBAQAogCQkJCUNEM0UyNTFDMTgwNDZCMDYwMEUyN0Y1NiAvKiBHcmlkQ29vcmRpbmF0
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0RFRjRGRDcxN0U4NUM4RjAwQUVFMjRCIC8qIEdyaWRM
ZW5ndGguaCBpbiBIZWFkZXJzICovLAogCQkJCUExMjcwNUMzMTY1NkJENjUwMEMyRTI3QyAvKiBH
cmlkUG9zaXRpb24uaCBpbiBIZWFkZXJzICovLAotCQkJCUNERjc0ODNGMThGRUJDRUMwMDA2RUND
MCAvKiBHcmlkUmVzb2x2ZWRQb3NpdGlvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJQ0RGNzQ4M0Yx
OEZFQkNFQzAwMDZFQ0MwIC8qIEdyaWRQb3NpdGlvbnNSZXNvbHZlci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQTEyQTEwNTAxNjY0NDRGRDAwOEZBMzExIC8qIEdyaWRUcmFja1NpemUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTI2RUE4OUE3MUI0RjJCNzUwMDhDNUZEMiAvKiBIYXNoYWJsZUFjdGlvbkxp
c3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTg0ODJCNzQ2MTE5OEMzNTQwMEJGQjAwNSAvKiBIYXNo
Q2hhbmdlRXZlbnQuaCBpbiBIZWFkZXJzICovLApAQCAtMjk4MzcsNyArMjk4MzcsNyBAQAogCQkJ
CTQ5OUIzRUQ2MTI4Q0QzMTQwMEU3MjZDMiAvKiBHcmFwaGljc0xheWVyQ0EuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEZBMjRENzkxNjJERjkxOTAwQTNGNEMwIC8qIEdyYXBoaWNzTGF5ZXJVcGRh
dGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyQTAxNUFBMEFGNkNENTMwMDZCQ0UwRSAvKiBH
cmFwaGljc1R5cGVzLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUNERjc0ODNFMThGRUJDRUMwMDA2
RUNDMCAvKiBHcmlkUmVzb2x2ZWRQb3NpdGlvbi5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlDREY3
NDgzRTE4RkVCQ0VDMDAwNkVDQzAgLyogR3JpZFBvc2l0aW9uc1Jlc29sdmVyLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUY1NUIzREJGMTI1MUYxMkQwMDNFRjI2OSAvKiBIaWRkZW5JbnB1dFR5cGUu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTFBOUQ5RjMxOTVCOTUwMzAwMUIyQjVDIC8qIEhJREdh
bWVwYWQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTE3OUNFMzYxOTVDQUM3RTAwMTlDMTk4IC8q
IEhJREdhbWVwYWRQcm92aWRlci5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJHcmlkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJHcmlkLmNwcAppbmRleCA0YmRiMDE2ODVjZjMzZWYwZTM4NzcyOGU3MzhhNGEw
YTVmZWY0NWI4Li40Zjg3NGExM2U4NjhlNDEzODYwYmFhNDgzOTg3MWRlMmZhM2VkZWVkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyR3JpZC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckdyaWQuY3BwCkBAIC0zMCw3ICszMCw3IEBACiAj
aWYgRU5BQkxFKENTU19HUklEX0xBWU9VVCkKIAogI2luY2x1ZGUgIkdyaWRDb29yZGluYXRlLmgi
Ci0jaW5jbHVkZSAiR3JpZFJlc29sdmVkUG9zaXRpb24uaCIKKyNpbmNsdWRlICJHcmlkUG9zaXRp
b25zUmVzb2x2ZXIuaCIKICNpbmNsdWRlICJMYXlvdXRSZXBhaW50ZXIuaCIKICNpbmNsdWRlICJS
ZW5kZXJMYXllci5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKQEAgLTExODIsOCArMTE4Miw4
IEBAIHZvaWQgUmVuZGVyR3JpZDo6cGxhY2VJdGVtc09uR3JpZCgpCiAgICAgICAgIGluc2VydEl0
ZW1JbnRvR3JpZCgqY2hpbGQsIEdyaWRDb29yZGluYXRlKGNvb3JkaW5hdGUucm93cywgY29vcmRp
bmF0ZS5jb2x1bW5zKSk7CiAgICAgfQogCi0gICAgQVNTRVJUKGdyaWRSb3dDb3VudCgpID49IEdy
aWRSZXNvbHZlZFBvc2l0aW9uOjpleHBsaWNpdEdyaWRSb3dDb3VudChzdHlsZSgpKSk7Ci0gICAg
QVNTRVJUKGdyaWRDb2x1bW5Db3VudCgpID49IEdyaWRSZXNvbHZlZFBvc2l0aW9uOjpleHBsaWNp
dEdyaWRDb2x1bW5Db3VudChzdHlsZSgpKSk7CisgICAgQVNTRVJUKGdyaWRSb3dDb3VudCgpID49
IEdyaWRQb3NpdGlvbnNSZXNvbHZlcjo6ZXhwbGljaXRHcmlkUm93Q291bnQoc3R5bGUoKSkpOwor
ICAgIEFTU0VSVChncmlkQ29sdW1uQ291bnQoKSA+PSBHcmlkUG9zaXRpb25zUmVzb2x2ZXI6OmV4
cGxpY2l0R3JpZENvbHVtbkNvdW50KHN0eWxlKCkpKTsKIAogICAgIHBsYWNlU3BlY2lmaWVkTWFq
b3JBeGlzSXRlbXNPbkdyaWQoc3BlY2lmaWVkTWFqb3JBeGlzQXV0b0dyaWRJdGVtcyk7CiAgICAg
cGxhY2VBdXRvTWFqb3JBeGlzSXRlbXNPbkdyaWQoYXV0b01ham9yQXhpc0F1dG9HcmlkSXRlbXMp
OwpAQCAtMTIwMyw4ICsxMjAzLDggQEAgdm9pZCBSZW5kZXJHcmlkOjpwb3B1bGF0ZUV4cGxpY2l0
R3JpZEFuZE9yZGVySXRlcmF0b3IoKQogewogICAgIE9yZGVySXRlcmF0b3JQb3B1bGF0b3IgcG9w
dWxhdG9yKG1fb3JkZXJJdGVyYXRvcik7CiAgICAgbV9zbWFsbGVzdFJvd1N0YXJ0ID0gbV9zbWFs
bGVzdENvbHVtblN0YXJ0ID0gMDsKLSAgICB1bnNpZ25lZCBtYXhpbXVtUm93SW5kZXggPSBzdGQ6
Om1heDx1bnNpZ25lZD4oMSwgR3JpZFJlc29sdmVkUG9zaXRpb246OmV4cGxpY2l0R3JpZFJvd0Nv
dW50KHN0eWxlKCkpKTsKLSAgICB1bnNpZ25lZCBtYXhpbXVtQ29sdW1uSW5kZXggPSBzdGQ6Om1h
eDx1bnNpZ25lZD4oMSwgR3JpZFJlc29sdmVkUG9zaXRpb246OmV4cGxpY2l0R3JpZENvbHVtbkNv
dW50KHN0eWxlKCkpKTsKKyAgICB1bnNpZ25lZCBtYXhpbXVtUm93SW5kZXggPSBzdGQ6Om1heDx1
bnNpZ25lZD4oMSwgR3JpZFBvc2l0aW9uc1Jlc29sdmVyOjpleHBsaWNpdEdyaWRSb3dDb3VudChz
dHlsZSgpKSk7CisgICAgdW5zaWduZWQgbWF4aW11bUNvbHVtbkluZGV4ID0gc3RkOjptYXg8dW5z
aWduZWQ+KDEsIEdyaWRQb3NpdGlvbnNSZXNvbHZlcjo6ZXhwbGljaXRHcmlkQ29sdW1uQ291bnQo
c3R5bGUoKSkpOwogCiAgICAgZm9yIChSZW5kZXJCb3gqIGNoaWxkID0gZmlyc3RDaGlsZEJveCgp
OyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmdCb3goKSkgewogICAgICAgICBpZiAo
Y2hpbGQtPmlzT3V0T2ZGbG93UG9zaXRpb25lZCgpKQpAQCAtMTIxMiwyMyArMTIxMiwyMyBAQCB2
b2lkIFJlbmRlckdyaWQ6OnBvcHVsYXRlRXhwbGljaXRHcmlkQW5kT3JkZXJJdGVyYXRvcigpCiAK
ICAgICAgICAgcG9wdWxhdG9yLmNvbGxlY3RDaGlsZCgqY2hpbGQpOwogCi0gICAgICAgIEdyaWRT
cGFuIHJvd1Bvc2l0aW9ucyA9IEdyaWRSZXNvbHZlZFBvc2l0aW9uOjpyZXNvbHZlR3JpZFBvc2l0
aW9uc0Zyb21TdHlsZShzdHlsZSgpLCAqY2hpbGQsIEZvclJvd3MpOworICAgICAgICBHcmlkU3Bh
biByb3dQb3NpdGlvbnMgPSBHcmlkUG9zaXRpb25zUmVzb2x2ZXI6OnJlc29sdmVHcmlkUG9zaXRp
b25zRnJvbVN0eWxlKHN0eWxlKCksICpjaGlsZCwgRm9yUm93cyk7CiAgICAgICAgIGlmICghcm93
UG9zaXRpb25zLmlzSW5kZWZpbml0ZSgpKSB7CiAgICAgICAgICAgICBtX3NtYWxsZXN0Um93U3Rh
cnQgPSBzdGQ6Om1pbihtX3NtYWxsZXN0Um93U3RhcnQsIHJvd1Bvc2l0aW9ucy51bnRyYW5zbGF0
ZWRSZXNvbHZlZEluaXRpYWxQb3NpdGlvbigpKTsKICAgICAgICAgICAgIG1heGltdW1Sb3dJbmRl
eCA9IHN0ZDo6bWF4PGludD4obWF4aW11bVJvd0luZGV4LCByb3dQb3NpdGlvbnMudW50cmFuc2xh
dGVkUmVzb2x2ZWRGaW5hbFBvc2l0aW9uKCkpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAg
ICAgLy8gR3JvdyB0aGUgZ3JpZCBmb3IgaXRlbXMgd2l0aCBhIGRlZmluaXRlIHJvdyBzcGFuLCBn
ZXR0aW5nIHRoZSBsYXJnZXN0IHN1Y2ggc3Bhbi4KLSAgICAgICAgICAgIHVuc2lnbmVkIHNwYW5T
aXplID0gR3JpZFJlc29sdmVkUG9zaXRpb246OnNwYW5TaXplRm9yQXV0b1BsYWNlZEl0ZW0oc3R5
bGUoKSwgKmNoaWxkLCBGb3JSb3dzKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIHNwYW5TaXplID0g
R3JpZFBvc2l0aW9uc1Jlc29sdmVyOjpzcGFuU2l6ZUZvckF1dG9QbGFjZWRJdGVtKHN0eWxlKCks
ICpjaGlsZCwgRm9yUm93cyk7CiAgICAgICAgICAgICBtYXhpbXVtUm93SW5kZXggPSBzdGQ6Om1h
eChtYXhpbXVtUm93SW5kZXgsIHNwYW5TaXplKTsKICAgICAgICAgfQogCi0gICAgICAgIEdyaWRT
cGFuIGNvbHVtblBvc2l0aW9ucyA9IEdyaWRSZXNvbHZlZFBvc2l0aW9uOjpyZXNvbHZlR3JpZFBv
c2l0aW9uc0Zyb21TdHlsZShzdHlsZSgpLCAqY2hpbGQsIEZvckNvbHVtbnMpOworICAgICAgICBH
cmlkU3BhbiBjb2x1bW5Qb3NpdGlvbnMgPSBHcmlkUG9zaXRpb25zUmVzb2x2ZXI6OnJlc29sdmVH
cmlkUG9zaXRpb25zRnJvbVN0eWxlKHN0eWxlKCksICpjaGlsZCwgRm9yQ29sdW1ucyk7CiAgICAg
ICAgIGlmICghY29sdW1uUG9zaXRpb25zLmlzSW5kZWZpbml0ZSgpKSB7CiAgICAgICAgICAgICBt
X3NtYWxsZXN0Q29sdW1uU3RhcnQgPSBzdGQ6Om1pbihtX3NtYWxsZXN0Q29sdW1uU3RhcnQsIGNv
bHVtblBvc2l0aW9ucy51bnRyYW5zbGF0ZWRSZXNvbHZlZEluaXRpYWxQb3NpdGlvbigpKTsKICAg
ICAgICAgICAgIG1heGltdW1Db2x1bW5JbmRleCA9IHN0ZDo6bWF4PGludD4obWF4aW11bUNvbHVt
bkluZGV4LCBjb2x1bW5Qb3NpdGlvbnMudW50cmFuc2xhdGVkUmVzb2x2ZWRGaW5hbFBvc2l0aW9u
KCkpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgLy8gR3JvdyB0aGUgZ3JpZCBmb3Ig
aXRlbXMgd2l0aCBhIGRlZmluaXRlIGNvbHVtbiBzcGFuLCBnZXR0aW5nIHRoZSBsYXJnZXN0IHN1
Y2ggc3Bhbi4KLSAgICAgICAgICAgIHVuc2lnbmVkIHNwYW5TaXplID0gR3JpZFJlc29sdmVkUG9z
aXRpb246OnNwYW5TaXplRm9yQXV0b1BsYWNlZEl0ZW0oc3R5bGUoKSwgKmNoaWxkLCBGb3JDb2x1
bW5zKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIHNwYW5TaXplID0gR3JpZFBvc2l0aW9uc1Jlc29s
dmVyOjpzcGFuU2l6ZUZvckF1dG9QbGFjZWRJdGVtKHN0eWxlKCksICpjaGlsZCwgRm9yQ29sdW1u
cyk7CiAgICAgICAgICAgICBtYXhpbXVtQ29sdW1uSW5kZXggPSBzdGQ6Om1heChtYXhpbXVtQ29s
dW1uSW5kZXgsIHNwYW5TaXplKTsKICAgICAgICAgfQogCkBAIC0xMjQ0LDcgKzEyNDQsNyBAQCBz
dGQ6OnVuaXF1ZV9wdHI8R3JpZENvb3JkaW5hdGU+IFJlbmRlckdyaWQ6OmNyZWF0ZUVtcHR5R3Jp
ZEFyZWFBdFNwZWNpZmllZFBvc2l0aQogewogICAgIEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbiBj
cm9zc0RpcmVjdGlvbiA9IHNwZWNpZmllZERpcmVjdGlvbiA9PSBGb3JDb2x1bW5zID8gRm9yUm93
cyA6IEZvckNvbHVtbnM7CiAgICAgY29uc3QgdW5zaWduZWQgZW5kT2ZDcm9zc0RpcmVjdGlvbiA9
IGNyb3NzRGlyZWN0aW9uID09IEZvckNvbHVtbnMgPyBncmlkQ29sdW1uQ291bnQoKSA6IGdyaWRS
b3dDb3VudCgpOwotICAgIHVuc2lnbmVkIGNyb3NzRGlyZWN0aW9uU3BhblNpemUgPSBHcmlkUmVz
b2x2ZWRQb3NpdGlvbjo6c3BhblNpemVGb3JBdXRvUGxhY2VkSXRlbShzdHlsZSgpLCBncmlkSXRl
bSwgY3Jvc3NEaXJlY3Rpb24pOworICAgIHVuc2lnbmVkIGNyb3NzRGlyZWN0aW9uU3BhblNpemUg
PSBHcmlkUG9zaXRpb25zUmVzb2x2ZXI6OnNwYW5TaXplRm9yQXV0b1BsYWNlZEl0ZW0oc3R5bGUo
KSwgZ3JpZEl0ZW0sIGNyb3NzRGlyZWN0aW9uKTsKICAgICBHcmlkU3BhbiBjcm9zc0RpcmVjdGlv
blBvc2l0aW9ucyA9IEdyaWRTcGFuOjp0cmFuc2xhdGVkRGVmaW5pdGVHcmlkU3BhbihlbmRPZkNy
b3NzRGlyZWN0aW9uLCBlbmRPZkNyb3NzRGlyZWN0aW9uICsgY3Jvc3NEaXJlY3Rpb25TcGFuU2l6
ZSk7CiAgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8R3JpZENvb3JkaW5hdGU+KHNwZWNpZmll
ZERpcmVjdGlvbiA9PSBGb3JDb2x1bW5zID8gY3Jvc3NEaXJlY3Rpb25Qb3NpdGlvbnMgOiBzcGVj
aWZpZWRQb3NpdGlvbnMsIHNwZWNpZmllZERpcmVjdGlvbiA9PSBGb3JDb2x1bW5zID8gc3BlY2lm
aWVkUG9zaXRpb25zIDogY3Jvc3NEaXJlY3Rpb25Qb3NpdGlvbnMpOwogfQpAQCAtMTI2Myw3ICsx
MjYzLDcgQEAgdm9pZCBSZW5kZXJHcmlkOjpwbGFjZVNwZWNpZmllZE1ham9yQXhpc0l0ZW1zT25H
cmlkKGNvbnN0IFZlY3RvcjxSZW5kZXJCb3gqPiYgYXUKICAgICAgICAgR3JpZFNwYW4gbWFqb3JB
eGlzUG9zaXRpb25zID0gY2FjaGVkR3JpZFNwYW4oKmF1dG9HcmlkSXRlbSwgYXV0b1BsYWNlbWVu
dE1ham9yQXhpc0RpcmVjdGlvbigpKTsKICAgICAgICAgQVNTRVJUKG1ham9yQXhpc1Bvc2l0aW9u
cy5pc1RyYW5zbGF0ZWREZWZpbml0ZSgpKTsKICAgICAgICAgQVNTRVJUKGNhY2hlZEdyaWRTcGFu
KCphdXRvR3JpZEl0ZW0sIGF1dG9QbGFjZW1lbnRNaW5vckF4aXNEaXJlY3Rpb24oKSkuaXNJbmRl
ZmluaXRlKCkpOwotICAgICAgICB1bnNpZ25lZCBtaW5vckF4aXNTcGFuU2l6ZSA9IEdyaWRSZXNv
bHZlZFBvc2l0aW9uOjpzcGFuU2l6ZUZvckF1dG9QbGFjZWRJdGVtKHN0eWxlKCksICphdXRvR3Jp
ZEl0ZW0sIGF1dG9QbGFjZW1lbnRNaW5vckF4aXNEaXJlY3Rpb24oKSk7CisgICAgICAgIHVuc2ln
bmVkIG1pbm9yQXhpc1NwYW5TaXplID0gR3JpZFBvc2l0aW9uc1Jlc29sdmVyOjpzcGFuU2l6ZUZv
ckF1dG9QbGFjZWRJdGVtKHN0eWxlKCksICphdXRvR3JpZEl0ZW0sIGF1dG9QbGFjZW1lbnRNaW5v
ckF4aXNEaXJlY3Rpb24oKSk7CiAgICAgICAgIHVuc2lnbmVkIG1ham9yQXhpc0luaXRpYWxQb3Np
dGlvbiA9IG1ham9yQXhpc1Bvc2l0aW9ucy5yZXNvbHZlZEluaXRpYWxQb3NpdGlvbigpOwogCiAg
ICAgICAgIEdyaWRJdGVyYXRvciBpdGVyYXRvcihtX2dyaWQsIGF1dG9QbGFjZW1lbnRNYWpvckF4
aXNEaXJlY3Rpb24oKSwgbWFqb3JBeGlzUG9zaXRpb25zLnJlc29sdmVkSW5pdGlhbFBvc2l0aW9u
KCksIGlzR3JpZEF1dG9GbG93RGVuc2UgPyAwIDogbWlub3JBeGlzQ3Vyc29ycy5nZXQobWFqb3JB
eGlzSW5pdGlhbFBvc2l0aW9uKSk7CkBAIC0xMjk3LDcgKzEyOTcsNyBAQCB2b2lkIFJlbmRlckdy
aWQ6OnBsYWNlQXV0b01ham9yQXhpc0l0ZW1zT25HcmlkKGNvbnN0IFZlY3RvcjxSZW5kZXJCb3gq
PiYgYXV0b0dyaQogdm9pZCBSZW5kZXJHcmlkOjpwbGFjZUF1dG9NYWpvckF4aXNJdGVtT25Hcmlk
KFJlbmRlckJveCYgZ3JpZEl0ZW0sIEF1dG9QbGFjZW1lbnRDdXJzb3ImIGF1dG9QbGFjZW1lbnRD
dXJzb3IpCiB7CiAgICAgQVNTRVJUKGNhY2hlZEdyaWRTcGFuKGdyaWRJdGVtLCBhdXRvUGxhY2Vt
ZW50TWFqb3JBeGlzRGlyZWN0aW9uKCkpLmlzSW5kZWZpbml0ZSgpKTsKLSAgICB1bnNpZ25lZCBt
YWpvckF4aXNTcGFuU2l6ZSA9IEdyaWRSZXNvbHZlZFBvc2l0aW9uOjpzcGFuU2l6ZUZvckF1dG9Q
bGFjZWRJdGVtKHN0eWxlKCksIGdyaWRJdGVtLCBhdXRvUGxhY2VtZW50TWFqb3JBeGlzRGlyZWN0
aW9uKCkpOworICAgIHVuc2lnbmVkIG1ham9yQXhpc1NwYW5TaXplID0gR3JpZFBvc2l0aW9uc1Jl
c29sdmVyOjpzcGFuU2l6ZUZvckF1dG9QbGFjZWRJdGVtKHN0eWxlKCksIGdyaWRJdGVtLCBhdXRv
UGxhY2VtZW50TWFqb3JBeGlzRGlyZWN0aW9uKCkpOwogCiAgICAgY29uc3QgdW5zaWduZWQgZW5k
T2ZNYWpvckF4aXMgPSAoYXV0b1BsYWNlbWVudE1ham9yQXhpc0RpcmVjdGlvbigpID09IEZvckNv
bHVtbnMpID8gZ3JpZENvbHVtbkNvdW50KCkgOiBncmlkUm93Q291bnQoKTsKICAgICB1bnNpZ25l
ZCBtYWpvckF4aXNBdXRvUGxhY2VtZW50Q3Vyc29yID0gYXV0b1BsYWNlbWVudE1ham9yQXhpc0Rp
cmVjdGlvbigpID09IEZvckNvbHVtbnMgPyBhdXRvUGxhY2VtZW50Q3Vyc29yLnNlY29uZCA6IGF1
dG9QbGFjZW1lbnRDdXJzb3IuZmlyc3Q7CkBAIC0xMzE4LDcgKzEzMTgsNyBAQCB2b2lkIFJlbmRl
ckdyaWQ6OnBsYWNlQXV0b01ham9yQXhpc0l0ZW1PbkdyaWQoUmVuZGVyQm94JiBncmlkSXRlbSwg
QXV0b1BsYWNlbWVudAogICAgICAgICBpZiAoIWVtcHR5R3JpZEFyZWEpCiAgICAgICAgICAgICBl
bXB0eUdyaWRBcmVhID0gY3JlYXRlRW1wdHlHcmlkQXJlYUF0U3BlY2lmaWVkUG9zaXRpb25zT3V0
c2lkZUdyaWQoZ3JpZEl0ZW0sIGF1dG9QbGFjZW1lbnRNaW5vckF4aXNEaXJlY3Rpb24oKSwgbWlu
b3JBeGlzUG9zaXRpb25zKTsKICAgICB9IGVsc2UgewotICAgICAgICB1bnNpZ25lZCBtaW5vckF4
aXNTcGFuU2l6ZSA9IEdyaWRSZXNvbHZlZFBvc2l0aW9uOjpzcGFuU2l6ZUZvckF1dG9QbGFjZWRJ
dGVtKHN0eWxlKCksIGdyaWRJdGVtLCBhdXRvUGxhY2VtZW50TWlub3JBeGlzRGlyZWN0aW9uKCkp
OworICAgICAgICB1bnNpZ25lZCBtaW5vckF4aXNTcGFuU2l6ZSA9IEdyaWRQb3NpdGlvbnNSZXNv
bHZlcjo6c3BhblNpemVGb3JBdXRvUGxhY2VkSXRlbShzdHlsZSgpLCBncmlkSXRlbSwgYXV0b1Bs
YWNlbWVudE1pbm9yQXhpc0RpcmVjdGlvbigpKTsKIAogICAgICAgICBmb3IgKHVuc2lnbmVkIG1h
am9yQXhpc0luZGV4ID0gbWFqb3JBeGlzQXV0b1BsYWNlbWVudEN1cnNvcjsgbWFqb3JBeGlzSW5k
ZXggPCBlbmRPZk1ham9yQXhpczsgKyttYWpvckF4aXNJbmRleCkgewogICAgICAgICAgICAgR3Jp
ZEl0ZXJhdG9yIGl0ZXJhdG9yKG1fZ3JpZCwgYXV0b1BsYWNlbWVudE1ham9yQXhpc0RpcmVjdGlv
bigpLCBtYWpvckF4aXNJbmRleCwgbWlub3JBeGlzQXV0b1BsYWNlbWVudEN1cnNvcik7CkBAIC0x
NDg2LDcgKzE0ODYsNyBAQCB2b2lkIFJlbmRlckdyaWQ6Om9mZnNldEFuZEJyZWFkdGhGb3JQb3Np
dGlvbmVkQ2hpbGQoY29uc3QgUmVuZGVyQm94JiBjaGlsZCwgR3JpZAogICAgIEFTU0VSVChjaGls
ZC5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpID09IGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkp
OwogICAgIGJvb2wgaXNSb3dBeGlzID0gZGlyZWN0aW9uID09IEZvckNvbHVtbnM7CiAKLSAgICBH
cmlkU3BhbiBwb3NpdGlvbnMgPSBHcmlkUmVzb2x2ZWRQb3NpdGlvbjo6cmVzb2x2ZUdyaWRQb3Np
dGlvbnNGcm9tU3R5bGUoc3R5bGUoKSwgY2hpbGQsIGRpcmVjdGlvbik7CisgICAgR3JpZFNwYW4g
cG9zaXRpb25zID0gR3JpZFBvc2l0aW9uc1Jlc29sdmVyOjpyZXNvbHZlR3JpZFBvc2l0aW9uc0Zy
b21TdHlsZShzdHlsZSgpLCBjaGlsZCwgZGlyZWN0aW9uKTsKICAgICBpZiAocG9zaXRpb25zLmlz
SW5kZWZpbml0ZSgpKSB7CiAgICAgICAgIG9mZnNldCA9IExheW91dFVuaXQoKTsKICAgICAgICAg
YnJlYWR0aCA9IGlzUm93QXhpcyA/IGNsaWVudExvZ2ljYWxXaWR0aCgpIDogY2xpZW50TG9naWNh
bEhlaWdodCgpOwpAQCAtMTUwMSwxNCArMTUwMSwxNCBAQCB2b2lkIFJlbmRlckdyaWQ6Om9mZnNl
dEFuZEJyZWFkdGhGb3JQb3NpdGlvbmVkQ2hpbGQoY29uc3QgUmVuZGVyQm94JiBjaGlsZCwgR3Jp
ZAogICAgIEdyaWRQb3NpdGlvbiBzdGFydFBvc2l0aW9uID0gaXNSb3dBeGlzID8gY2hpbGQuc3R5
bGUoKS5ncmlkSXRlbUNvbHVtblN0YXJ0KCkgOiBjaGlsZC5zdHlsZSgpLmdyaWRJdGVtUm93U3Rh
cnQoKTsKICAgICBHcmlkUG9zaXRpb24gZW5kUG9zaXRpb24gPSBpc1Jvd0F4aXMgPyBjaGlsZC5z
dHlsZSgpLmdyaWRJdGVtQ29sdW1uRW5kKCkgOiBjaGlsZC5zdHlsZSgpLmdyaWRJdGVtUm93RW5k
KCk7CiAgICAgaW50IGZpcnN0RXhwbGljaXRMaW5lID0gc21hbGxlc3RTdGFydDsKLSAgICBpbnQg
bGFzdEV4cGxpY2l0TGluZSA9IChpc1Jvd0F4aXMgPyBHcmlkUmVzb2x2ZWRQb3NpdGlvbjo6ZXhw
bGljaXRHcmlkQ29sdW1uQ291bnQoc3R5bGUoKSkgOiBHcmlkUmVzb2x2ZWRQb3NpdGlvbjo6ZXhw
bGljaXRHcmlkUm93Q291bnQoc3R5bGUoKSkpICsgc21hbGxlc3RTdGFydDsKKyAgICBpbnQgbGFz
dEV4cGxpY2l0TGluZSA9IChpc1Jvd0F4aXMgPyBHcmlkUG9zaXRpb25zUmVzb2x2ZXI6OmV4cGxp
Y2l0R3JpZENvbHVtbkNvdW50KHN0eWxlKCkpIDogR3JpZFBvc2l0aW9uc1Jlc29sdmVyOjpleHBs
aWNpdEdyaWRSb3dDb3VudChzdHlsZSgpKSkgKyBzbWFsbGVzdFN0YXJ0OwogCiAgICAgYm9vbCBz
dGFydElzQXV0byA9IHN0YXJ0UG9zaXRpb24uaXNBdXRvKCkKLSAgICAgICAgfHwgKHN0YXJ0UG9z
aXRpb24uaXNOYW1lZEdyaWRBcmVhKCkgJiYgR3JpZFJlc29sdmVkUG9zaXRpb246OmlzTm9uRXhp
c3RlbnROYW1lZExpbmVPckFyZWEoc3RhcnRQb3NpdGlvbi5uYW1lZEdyaWRMaW5lKCksIHN0eWxl
KCksIChkaXJlY3Rpb24gPT0gRm9yQ29sdW1ucykgPyBDb2x1bW5TdGFydFNpZGUgOiBSb3dTdGFy
dFNpZGUpKQorICAgICAgICB8fCAoc3RhcnRQb3NpdGlvbi5pc05hbWVkR3JpZEFyZWEoKSAmJiBH
cmlkUG9zaXRpb25zUmVzb2x2ZXI6OmlzTm9uRXhpc3RlbnROYW1lZExpbmVPckFyZWEoc3RhcnRQ
b3NpdGlvbi5uYW1lZEdyaWRMaW5lKCksIHN0eWxlKCksIChkaXJlY3Rpb24gPT0gRm9yQ29sdW1u
cykgPyBDb2x1bW5TdGFydFNpZGUgOiBSb3dTdGFydFNpZGUpKQogICAgICAgICB8fCAocmVzb2x2
ZWRJbml0aWFsUG9zaXRpb24gPCBmaXJzdEV4cGxpY2l0TGluZSkKICAgICAgICAgfHwgKHJlc29s
dmVkSW5pdGlhbFBvc2l0aW9uID4gbGFzdEV4cGxpY2l0TGluZSk7CiAgICAgYm9vbCBlbmRJc0F1
dG8gPSBlbmRQb3NpdGlvbi5pc0F1dG8oKQotICAgICAgICB8fCAoZW5kUG9zaXRpb24uaXNOYW1l
ZEdyaWRBcmVhKCkgJiYgR3JpZFJlc29sdmVkUG9zaXRpb246OmlzTm9uRXhpc3RlbnROYW1lZExp
bmVPckFyZWEoZW5kUG9zaXRpb24ubmFtZWRHcmlkTGluZSgpLCBzdHlsZSgpLCAoZGlyZWN0aW9u
ID09IEZvckNvbHVtbnMpID8gQ29sdW1uRW5kU2lkZSA6IFJvd0VuZFNpZGUpKQorICAgICAgICB8
fCAoZW5kUG9zaXRpb24uaXNOYW1lZEdyaWRBcmVhKCkgJiYgR3JpZFBvc2l0aW9uc1Jlc29sdmVy
Ojppc05vbkV4aXN0ZW50TmFtZWRMaW5lT3JBcmVhKGVuZFBvc2l0aW9uLm5hbWVkR3JpZExpbmUo
KSwgc3R5bGUoKSwgKGRpcmVjdGlvbiA9PSBGb3JDb2x1bW5zKSA/IENvbHVtbkVuZFNpZGUgOiBS
b3dFbmRTaWRlKSkKICAgICAgICAgfHwgKHJlc29sdmVkRmluYWxQb3NpdGlvbiA8IGZpcnN0RXhw
bGljaXRMaW5lKQogICAgICAgICB8fCAocmVzb2x2ZWRGaW5hbFBvc2l0aW9uID4gbGFzdEV4cGxp
Y2l0TGluZSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJH
cmlkLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyR3JpZC5oCmluZGV4IGEzZDE4
ZWZlYWM1NDE4MWIxY2YzOTI2MTI0YWY3NDI0MGFhYjExZWQuLjc1MjY0NWRmYTFjZGQ5NjQwOGU2
ZmYzNTlhMjdhN2FhNGI3NDY1NzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJHcmlkLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckdyaWQu
aApAQCAtMjksNyArMjksNyBAQAogCiAjaWYgRU5BQkxFKENTU19HUklEX0xBWU9VVCkKIAotI2lu
Y2x1ZGUgIkdyaWRSZXNvbHZlZFBvc2l0aW9uLmgiCisjaW5jbHVkZSAiR3JpZFBvc2l0aW9uc1Jl
c29sdmVyLmgiCiAjaW5jbHVkZSAiT3JkZXJJdGVyYXRvci5oIgogI2luY2x1ZGUgIlJlbmRlckJs
b2NrLmgiCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9Hcmlk
Q29vcmRpbmF0ZS5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL0dyaWRDb29yZGlu
YXRlLmgKaW5kZXggMDY1ZDc0YTYyNTg2ODA1YmI1MWQyMTYyNzRmNmNhMTU5MjE4MmIyMi4uYWIw
YTNmOWRjMjNkMDYzY2Q3ZTU4OTFmOTdjZDczYjRiMzZhY2RlMSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL0dyaWRDb29yZGluYXRlLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N0eWxlL0dyaWRDb29yZGluYXRlLmgKQEAgLTM0LDcgKzM0LDcgQEAK
IAogI2lmIEVOQUJMRShDU1NfR1JJRF9MQVlPVVQpCiAKLSNpbmNsdWRlICJHcmlkUmVzb2x2ZWRQ
b3NpdGlvbi5oIgorI2luY2x1ZGUgIkdyaWRQb3NpdGlvbnNSZXNvbHZlci5oIgogI2luY2x1ZGUg
PHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9HcmlkUG9zaXRpb25zUmVzb2x2
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL0dyaWRQb3NpdGlvbnNSZXNv
bHZlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uMDE2OTc5YTllODllZDFhZGI3ZTA2OWM0MTM3OTAxYWQwZDM0
N2UyYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9H
cmlkUG9zaXRpb25zUmVzb2x2ZXIuY3BwCkBAIC0wLDAgKzEsMzM0IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE0IElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
KyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkdyaWRQ
b3NpdGlvbnNSZXNvbHZlci5oIgorCisjaWYgRU5BQkxFKENTU19HUklEX0xBWU9VVCkKKworI2lu
Y2x1ZGUgIkdyaWRDb29yZGluYXRlLmgiCisjaW5jbHVkZSAiUmVuZGVyQm94LmgiCisjaW5jbHVk
ZSA8Y3N0ZGxpYj4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgaW5saW5lIGJvb2wg
aXNDb2x1bW5TaWRlKEdyaWRQb3NpdGlvblNpZGUgc2lkZSkKK3sKKyAgICByZXR1cm4gc2lkZSA9
PSBDb2x1bW5TdGFydFNpZGUgfHwgc2lkZSA9PSBDb2x1bW5FbmRTaWRlOworfQorCitzdGF0aWMg
aW5saW5lIGJvb2wgaXNTdGFydFNpZGUoR3JpZFBvc2l0aW9uU2lkZSBzaWRlKQoreworICAgIHJl
dHVybiBzaWRlID09IENvbHVtblN0YXJ0U2lkZSB8fCBzaWRlID09IFJvd1N0YXJ0U2lkZTsKK30K
Kworc3RhdGljIGlubGluZSBHcmlkUG9zaXRpb25TaWRlIGluaXRpYWxQb3NpdGlvblNpZGUoR3Jp
ZFRyYWNrU2l6aW5nRGlyZWN0aW9uIGRpcmVjdGlvbikKK3sKKyAgICByZXR1cm4gZGlyZWN0aW9u
ID09IEZvckNvbHVtbnMgPyBDb2x1bW5TdGFydFNpZGUgOiBSb3dTdGFydFNpZGU7Cit9CisKK3N0
YXRpYyBpbmxpbmUgR3JpZFBvc2l0aW9uU2lkZSBmaW5hbFBvc2l0aW9uU2lkZShHcmlkVHJhY2tT
aXppbmdEaXJlY3Rpb24gZGlyZWN0aW9uKQoreworICAgIHJldHVybiBkaXJlY3Rpb24gPT0gRm9y
Q29sdW1ucyA/IENvbHVtbkVuZFNpZGUgOiBSb3dFbmRTaWRlOworfQorCitzdGF0aWMgY29uc3Qg
TmFtZWRHcmlkTGluZXNNYXAmIGdyaWRMaW5lc0ZvclNpZGUoY29uc3QgUmVuZGVyU3R5bGUmIHN0
eWxlLCBHcmlkUG9zaXRpb25TaWRlIHNpZGUpCit7CisgICAgcmV0dXJuIGlzQ29sdW1uU2lkZShz
aWRlKSA/IHN0eWxlLm5hbWVkR3JpZENvbHVtbkxpbmVzKCkgOiBzdHlsZS5uYW1lZEdyaWRSb3dM
aW5lcygpOworfQorCitzdGF0aWMgY29uc3QgU3RyaW5nIGltcGxpY2l0TmFtZWRHcmlkTGluZUZv
clNpZGUoY29uc3QgU3RyaW5nJiBsaW5lTmFtZSwgR3JpZFBvc2l0aW9uU2lkZSBzaWRlKQorewor
ICAgIHJldHVybiBsaW5lTmFtZSArIChpc1N0YXJ0U2lkZShzaWRlKSA/ICItc3RhcnQiIDogIi1l
bmQiKTsKK30KKworYm9vbCBHcmlkUG9zaXRpb25zUmVzb2x2ZXI6OmlzTm9uRXhpc3RlbnROYW1l
ZExpbmVPckFyZWEoY29uc3QgU3RyaW5nJiBsaW5lTmFtZSwgY29uc3QgUmVuZGVyU3R5bGUmIHN0
eWxlLCBHcmlkUG9zaXRpb25TaWRlIHNpZGUpCit7CisgICAgY29uc3QgTmFtZWRHcmlkTGluZXNN
YXAmIGdyaWRMaW5lTmFtZXMgPSBncmlkTGluZXNGb3JTaWRlKHN0eWxlLCBzaWRlKTsKKyAgICBy
ZXR1cm4gIWdyaWRMaW5lTmFtZXMuY29udGFpbnMoaW1wbGljaXROYW1lZEdyaWRMaW5lRm9yU2lk
ZShsaW5lTmFtZSwgc2lkZSkpICYmICFncmlkTGluZU5hbWVzLmNvbnRhaW5zKGxpbmVOYW1lKTsK
K30KKworc3RhdGljIHZvaWQgYWRqdXN0R3JpZFBvc2l0aW9uc0Zyb21TdHlsZShjb25zdCBSZW5k
ZXJTdHlsZSYgZ3JpZENvbnRhaW5lclN0eWxlLCBjb25zdCBSZW5kZXJCb3gmIGdyaWRJdGVtLCBH
cmlkVHJhY2tTaXppbmdEaXJlY3Rpb24gZGlyZWN0aW9uLCBHcmlkUG9zaXRpb24mIGluaXRpYWxQ
b3NpdGlvbiwgR3JpZFBvc2l0aW9uJiBmaW5hbFBvc2l0aW9uKQoreworICAgIGJvb2wgaXNGb3JD
b2x1bW5zID0gZGlyZWN0aW9uID09IEZvckNvbHVtbnM7CisgICAgaW5pdGlhbFBvc2l0aW9uID0g
aXNGb3JDb2x1bW5zID8gZ3JpZEl0ZW0uc3R5bGUoKS5ncmlkSXRlbUNvbHVtblN0YXJ0KCkgOiBn
cmlkSXRlbS5zdHlsZSgpLmdyaWRJdGVtUm93U3RhcnQoKTsKKyAgICBmaW5hbFBvc2l0aW9uID0g
aXNGb3JDb2x1bW5zID8gZ3JpZEl0ZW0uc3R5bGUoKS5ncmlkSXRlbUNvbHVtbkVuZCgpIDogZ3Jp
ZEl0ZW0uc3R5bGUoKS5ncmlkSXRlbVJvd0VuZCgpOworCisgICAgLy8gV2UgbXVzdCBoYW5kbGUg
dGhlIHBsYWNlbWVudCBlcnJvciBoYW5kbGluZyBjb2RlIGhlcmUgaW5zdGVhZCBvZiBpbiB0aGUg
U3R5bGVBZGp1c3RlciBiZWNhdXNlIHdlIGRvbid0IHdhbnQgdG8KKyAgICAvLyBvdmVyd3JpdGUg
dGhlIHNwZWNpZmllZCB2YWx1ZXMuCisgICAgaWYgKGluaXRpYWxQb3NpdGlvbi5pc1NwYW4oKSAm
JiBmaW5hbFBvc2l0aW9uLmlzU3BhbigpKQorICAgICAgICBmaW5hbFBvc2l0aW9uLnNldEF1dG9Q
b3NpdGlvbigpOworCisgICAgaWYgKGdyaWRJdGVtLmlzT3V0T2ZGbG93UG9zaXRpb25lZCgpKSB7
CisgICAgICAgIC8vIEVhcmx5IGRldGVjdCB0aGUgY2FzZSBvZiBub24gZXhpc3RpbmcgbmFtZWQg
Z3JpZCBsaW5lcyBmb3IgcG9zaXRpb25lZCBpdGVtcy4KKyAgICAgICAgaWYgKGluaXRpYWxQb3Np
dGlvbi5pc05hbWVkR3JpZEFyZWEoKSAmJiBHcmlkUG9zaXRpb25zUmVzb2x2ZXI6OmlzTm9uRXhp
c3RlbnROYW1lZExpbmVPckFyZWEoaW5pdGlhbFBvc2l0aW9uLm5hbWVkR3JpZExpbmUoKSwgZ3Jp
ZENvbnRhaW5lclN0eWxlLCBpbml0aWFsUG9zaXRpb25TaWRlKGRpcmVjdGlvbikpKQorICAgICAg
ICAgICAgaW5pdGlhbFBvc2l0aW9uLnNldEF1dG9Qb3NpdGlvbigpOworCisgICAgICAgIGlmIChm
aW5hbFBvc2l0aW9uLmlzTmFtZWRHcmlkQXJlYSgpICYmIEdyaWRQb3NpdGlvbnNSZXNvbHZlcjo6
aXNOb25FeGlzdGVudE5hbWVkTGluZU9yQXJlYShmaW5hbFBvc2l0aW9uLm5hbWVkR3JpZExpbmUo
KSwgZ3JpZENvbnRhaW5lclN0eWxlLCBmaW5hbFBvc2l0aW9uU2lkZShkaXJlY3Rpb24pKSkKKyAg
ICAgICAgICAgIGZpbmFsUG9zaXRpb24uc2V0QXV0b1Bvc2l0aW9uKCk7CisgICAgfQorCisgICAg
Ly8gSWYgdGhlIGdyaWQgaXRlbSBoYXMgYW4gYXV0b21hdGljIHBvc2l0aW9uIGFuZCBhIGdyaWQg
c3BhbiBmb3IgYSBuYW1lZCBsaW5lIGluIGEgZ2l2ZW4gZGltZW5zaW9uLCBpbnN0ZWFkIHRyZWF0
IHRoZSBncmlkIHNwYW4gYXMgb25lLgorICAgIGlmIChpbml0aWFsUG9zaXRpb24uaXNBdXRvKCkg
JiYgZmluYWxQb3NpdGlvbi5pc1NwYW4oKSAmJiAhZmluYWxQb3NpdGlvbi5uYW1lZEdyaWRMaW5l
KCkuaXNOdWxsKCkpCisgICAgICAgIGZpbmFsUG9zaXRpb24uc2V0U3BhblBvc2l0aW9uKDEsIFN0
cmluZygpKTsKKyAgICBpZiAoZmluYWxQb3NpdGlvbi5pc0F1dG8oKSAmJiBpbml0aWFsUG9zaXRp
b24uaXNTcGFuKCkgJiYgIWluaXRpYWxQb3NpdGlvbi5uYW1lZEdyaWRMaW5lKCkuaXNOdWxsKCkp
CisgICAgICAgIGluaXRpYWxQb3NpdGlvbi5zZXRTcGFuUG9zaXRpb24oMSwgU3RyaW5nKCkpOwor
fQorCit1bnNpZ25lZCBHcmlkUG9zaXRpb25zUmVzb2x2ZXI6OmV4cGxpY2l0R3JpZENvbHVtbkNv
dW50KGNvbnN0IFJlbmRlclN0eWxlJiBncmlkQ29udGFpbmVyU3R5bGUpCit7CisgICAgcmV0dXJu
IHN0ZDo6bWluPHVuc2lnbmVkPihncmlkQ29udGFpbmVyU3R5bGUuZ3JpZENvbHVtbnMoKS5zaXpl
KCksIGtHcmlkTWF4VHJhY2tzKTsKK30KKwordW5zaWduZWQgR3JpZFBvc2l0aW9uc1Jlc29sdmVy
OjpleHBsaWNpdEdyaWRSb3dDb3VudChjb25zdCBSZW5kZXJTdHlsZSYgZ3JpZENvbnRhaW5lclN0
eWxlKQoreworICAgIHJldHVybiBzdGQ6Om1pbjx1bnNpZ25lZD4oZ3JpZENvbnRhaW5lclN0eWxl
LmdyaWRSb3dzKCkuc2l6ZSgpLCBrR3JpZE1heFRyYWNrcyk7Cit9CisKK3N0YXRpYyB1bnNpZ25l
ZCBleHBsaWNpdEdyaWRTaXplRm9yU2lkZShjb25zdCBSZW5kZXJTdHlsZSYgZ3JpZENvbnRhaW5l
clN0eWxlLCBHcmlkUG9zaXRpb25TaWRlIHNpZGUpCit7CisgICAgcmV0dXJuIGlzQ29sdW1uU2lk
ZShzaWRlKSA/IEdyaWRQb3NpdGlvbnNSZXNvbHZlcjo6ZXhwbGljaXRHcmlkQ29sdW1uQ291bnQo
Z3JpZENvbnRhaW5lclN0eWxlKSA6IEdyaWRQb3NpdGlvbnNSZXNvbHZlcjo6ZXhwbGljaXRHcmlk
Um93Q291bnQoZ3JpZENvbnRhaW5lclN0eWxlKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvb2tB
aGVhZEZvck5hbWVkR3JpZExpbmUoaW50IHN0YXJ0LCB1bnNpZ25lZCBudW1iZXJPZkxpbmVzLCBj
b25zdCBWZWN0b3I8dW5zaWduZWQ+KiBuYW1lZEdyaWRMaW5lc0luZGV4ZXMsIHVuc2lnbmVkIGdy
aWRMYXN0TGluZSkKK3sKKyAgICBBU1NFUlQobnVtYmVyT2ZMaW5lcyk7CisKKyAgICAvLyBPbmx5
IGltcGxpY2l0IGxpbmVzIG9uIHRoZSBzZWFyY2ggZGlyZWN0aW9uIGFyZSBhc3N1bWVkIHRvIGhh
dmUgdGhlIGdpdmVuIG5hbWUsIHNvIHdlIGNhbiBzdGFydCB0byBsb29rIGZyb20gZmlyc3QgbGlu
ZS4KKyAgICAvLyBTZWU6IGh0dHBzOi8vZHJhZnRzLmNzc3dnLm9yZy9jc3MtZ3JpZC8jZ3JpZC1w
bGFjZW1lbnQtc3Bhbi1pbnQKKyAgICB1bnNpZ25lZCBlbmQgPSBzdGQ6Om1heChzdGFydCwgMCk7
CisKKyAgICBpZiAoIW5hbWVkR3JpZExpbmVzSW5kZXhlcykKKyAgICAgICAgcmV0dXJuIHN0ZDo6
bWF4KGVuZCwgZ3JpZExhc3RMaW5lICsgMSkgKyBudW1iZXJPZkxpbmVzIC0gMTsKKworICAgIGZv
ciAoOyBudW1iZXJPZkxpbmVzOyArK2VuZCkgeworICAgICAgICBpZiAoZW5kID4gZ3JpZExhc3RM
aW5lIHx8IG5hbWVkR3JpZExpbmVzSW5kZXhlcy0+Y29udGFpbnMoZW5kKSkKKyAgICAgICAgICAg
IG51bWJlck9mTGluZXMtLTsKKyAgICB9CisKKyAgICBBU1NFUlQoZW5kKTsKKyAgICByZXR1cm4g
ZW5kIC0gMTsKK30KKworc3RhdGljIGludCBsb29rQmFja0Zvck5hbWVkR3JpZExpbmUoaW50IGVu
ZCwgdW5zaWduZWQgbnVtYmVyT2ZMaW5lcywgY29uc3QgVmVjdG9yPHVuc2lnbmVkPiogbmFtZWRH
cmlkTGluZXNJbmRleGVzLCBpbnQgZ3JpZExhc3RMaW5lKQoreworICAgIEFTU0VSVChudW1iZXJP
ZkxpbmVzKTsKKworICAgIC8vIE9ubHkgaW1wbGljaXQgbGluZXMgb24gdGhlIHNlYXJjaCBkaXJl
Y3Rpb24gYXJlIGFzc3VtZWQgdG8gaGF2ZSB0aGUgZ2l2ZW4gbmFtZSwgc28gd2UgY2FuIHN0YXJ0
IHRvIGxvb2sgZnJvbSBsYXN0IGxpbmUuCisgICAgLy8gU2VlOiBodHRwczovL2RyYWZ0cy5jc3N3
Zy5vcmcvY3NzLWdyaWQvI2dyaWQtcGxhY2VtZW50LXNwYW4taW50CisgICAgaW50IHN0YXJ0ID0g
c3RkOjptaW4oZW5kLCBncmlkTGFzdExpbmUpOworCisgICAgaWYgKCFuYW1lZEdyaWRMaW5lc0lu
ZGV4ZXMpCisgICAgICAgIHJldHVybiBzdGQ6Om1pbihzdGFydCwgLTEpIC0gbnVtYmVyT2ZMaW5l
cyArIDE7CisKKyAgICBmb3IgKDsgbnVtYmVyT2ZMaW5lczsgLS1zdGFydCkgeworICAgICAgICBp
ZiAoc3RhcnQgPCAwIHx8IG5hbWVkR3JpZExpbmVzSW5kZXhlcy0+Y29udGFpbnMoc3RhdGljX2Nh
c3Q8c2l6ZV90PihzdGFydCkpKQorICAgICAgICAgICAgbnVtYmVyT2ZMaW5lcy0tOworICAgIH0K
KworICAgIHJldHVybiBzdGFydCArIDE7Cit9CisKK3N0YXRpYyBpbnQgcmVzb2x2ZU5hbWVkR3Jp
ZExpbmVQb3NpdGlvbkZyb21TdHlsZShjb25zdCBSZW5kZXJTdHlsZSYgZ3JpZENvbnRhaW5lclN0
eWxlLCBjb25zdCBHcmlkUG9zaXRpb24mIHBvc2l0aW9uLCBHcmlkUG9zaXRpb25TaWRlIHNpZGUp
Cit7CisgICAgQVNTRVJUKCFwb3NpdGlvbi5uYW1lZEdyaWRMaW5lKCkuaXNOdWxsKCkpOworCisg
ICAgY29uc3QgTmFtZWRHcmlkTGluZXNNYXAmIGdyaWRMaW5lc05hbWVzID0gaXNDb2x1bW5TaWRl
KHNpZGUpID8gZ3JpZENvbnRhaW5lclN0eWxlLm5hbWVkR3JpZENvbHVtbkxpbmVzKCkgOiBncmlk
Q29udGFpbmVyU3R5bGUubmFtZWRHcmlkUm93TGluZXMoKTsKKyAgICBhdXRvIGl0ZXJhdG9yID0g
Z3JpZExpbmVzTmFtZXMuZmluZChwb3NpdGlvbi5uYW1lZEdyaWRMaW5lKCkpOworICAgIGNvbnN0
IFZlY3Rvcjx1bnNpZ25lZD4qIGdyaWRMaW5lcyA9IGl0ZXJhdG9yID09IGdyaWRMaW5lc05hbWVz
LmVuZCgpID8gbnVsbHB0ciA6ICZpdGVyYXRvci0+dmFsdWU7CisgICAgdW5zaWduZWQgbGFzdExp
bmUgPSBleHBsaWNpdEdyaWRTaXplRm9yU2lkZShncmlkQ29udGFpbmVyU3R5bGUsIHNpZGUpOwor
ICAgIGlmIChwb3NpdGlvbi5pc1Bvc2l0aXZlKCkpCisgICAgICAgIHJldHVybiBsb29rQWhlYWRG
b3JOYW1lZEdyaWRMaW5lKDAsIHN0ZDo6YWJzKHBvc2l0aW9uLmludGVnZXJQb3NpdGlvbigpKSwg
Z3JpZExpbmVzLCBsYXN0TGluZSk7CisgICAgcmV0dXJuIGxvb2tCYWNrRm9yTmFtZWRHcmlkTGlu
ZShsYXN0TGluZSwgc3RkOjphYnMocG9zaXRpb24uaW50ZWdlclBvc2l0aW9uKCkpLCBncmlkTGlu
ZXMsIGxhc3RMaW5lKTsKK30KKworc3RhdGljIEdyaWRTcGFuIGRlZmluaXRlR3JpZFNwYW5XaXRo
TmFtZWRMaW5lU3BhbkFnYWluc3RPcHBvc2l0ZShpbnQgcmVzb2x2ZWRPcHBvc2l0ZVBvc2l0aW9u
LCBjb25zdCBHcmlkUG9zaXRpb24mIHBvc2l0aW9uLCBHcmlkUG9zaXRpb25TaWRlIHNpZGUsIGNv
bnN0IFZlY3Rvcjx1bnNpZ25lZD4qIGdyaWRMaW5lcywgdW5zaWduZWQgbGFzdExpbmUpCit7Cisg
ICAgaW50IHN0YXJ0LCBlbmQ7CisKKyAgICBpZiAoc2lkZSA9PSBSb3dTdGFydFNpZGUgfHwgc2lk
ZSA9PSBDb2x1bW5TdGFydFNpZGUpIHsKKyAgICAgICAgc3RhcnQgPSBsb29rQmFja0Zvck5hbWVk
R3JpZExpbmUocmVzb2x2ZWRPcHBvc2l0ZVBvc2l0aW9uIC0gMSwgcG9zaXRpb24uc3BhblBvc2l0
aW9uKCksIGdyaWRMaW5lcywgbGFzdExpbmUpOworICAgICAgICBlbmQgPSByZXNvbHZlZE9wcG9z
aXRlUG9zaXRpb247CisgICAgfSBlbHNlIHsKKyAgICAgICAgc3RhcnQgPSByZXNvbHZlZE9wcG9z
aXRlUG9zaXRpb247CisgICAgICAgIGVuZCA9IGxvb2tBaGVhZEZvck5hbWVkR3JpZExpbmUocmVz
b2x2ZWRPcHBvc2l0ZVBvc2l0aW9uICsgMSwgcG9zaXRpb24uc3BhblBvc2l0aW9uKCksIGdyaWRM
aW5lcywgbGFzdExpbmUpOworICAgIH0KKworICAgIHJldHVybiBHcmlkU3Bhbjo6dW50cmFuc2xh
dGVkRGVmaW5pdGVHcmlkU3BhbihzdGFydCwgZW5kKTsKK30KKworc3RhdGljIEdyaWRTcGFuIHJl
c29sdmVOYW1lZEdyaWRMaW5lUG9zaXRpb25BZ2FpbnN0T3Bwb3NpdGVQb3NpdGlvbihjb25zdCBS
ZW5kZXJTdHlsZSYgZ3JpZENvbnRhaW5lclN0eWxlLCBpbnQgcmVzb2x2ZWRPcHBvc2l0ZVBvc2l0
aW9uLCBjb25zdCBHcmlkUG9zaXRpb24mIHBvc2l0aW9uLCBHcmlkUG9zaXRpb25TaWRlIHNpZGUp
Cit7CisgICAgQVNTRVJUKHBvc2l0aW9uLmlzU3BhbigpKTsKKyAgICBBU1NFUlQoIXBvc2l0aW9u
Lm5hbWVkR3JpZExpbmUoKS5pc051bGwoKSk7CisgICAgLy8gTmVnYXRpdmUgcG9zaXRpb25zIGFy
ZSBub3QgYWxsb3dlZCBwZXIgdGhlIHNwZWNpZmljYXRpb24gYW5kIHNob3VsZCBoYXZlIGJlZW4g
aGFuZGxlZCBkdXJpbmcgcGFyc2luZy4KKyAgICBBU1NFUlQocG9zaXRpb24uc3BhblBvc2l0aW9u
KCkgPiAwKTsKKworICAgIGNvbnN0IE5hbWVkR3JpZExpbmVzTWFwJiBncmlkTGluZXNOYW1lcyA9
IGlzQ29sdW1uU2lkZShzaWRlKSA/IGdyaWRDb250YWluZXJTdHlsZS5uYW1lZEdyaWRDb2x1bW5M
aW5lcygpIDogZ3JpZENvbnRhaW5lclN0eWxlLm5hbWVkR3JpZFJvd0xpbmVzKCk7CisgICAgYXV0
byBpdGVyYXRvciA9IGdyaWRMaW5lc05hbWVzLmZpbmQocG9zaXRpb24ubmFtZWRHcmlkTGluZSgp
KTsKKyAgICBjb25zdCBWZWN0b3I8dW5zaWduZWQ+KiBncmlkTGluZXMgPSBpdGVyYXRvciA9PSBn
cmlkTGluZXNOYW1lcy5lbmQoKSA/IG51bGxwdHIgOiAmaXRlcmF0b3ItPnZhbHVlOworICAgIHVu
c2lnbmVkIGxhc3RMaW5lID0gZXhwbGljaXRHcmlkU2l6ZUZvclNpZGUoZ3JpZENvbnRhaW5lclN0
eWxlLCBzaWRlKTsKKworICAgIHJldHVybiBkZWZpbml0ZUdyaWRTcGFuV2l0aE5hbWVkTGluZVNw
YW5BZ2FpbnN0T3Bwb3NpdGUocmVzb2x2ZWRPcHBvc2l0ZVBvc2l0aW9uLCBwb3NpdGlvbiwgc2lk
ZSwgZ3JpZExpbmVzLCBsYXN0TGluZSk7Cit9CisKK3N0YXRpYyBHcmlkU3BhbiByZXNvbHZlR3Jp
ZFBvc2l0aW9uQWdhaW5zdE9wcG9zaXRlUG9zaXRpb24oY29uc3QgUmVuZGVyU3R5bGUmIGdyaWRD
b250YWluZXJTdHlsZSwgaW50IHJlc29sdmVkT3Bwb3NpdGVQb3NpdGlvbiwgY29uc3QgR3JpZFBv
c2l0aW9uJiBwb3NpdGlvbiwgR3JpZFBvc2l0aW9uU2lkZSBzaWRlKQoreworICAgIGlmIChwb3Np
dGlvbi5pc0F1dG8oKSkgeworICAgICAgICBpZiAoaXNTdGFydFNpZGUoc2lkZSkpCisgICAgICAg
ICAgICByZXR1cm4gR3JpZFNwYW46OnVudHJhbnNsYXRlZERlZmluaXRlR3JpZFNwYW4ocmVzb2x2
ZWRPcHBvc2l0ZVBvc2l0aW9uIC0gMSwgcmVzb2x2ZWRPcHBvc2l0ZVBvc2l0aW9uKTsKKyAgICAg
ICAgcmV0dXJuIEdyaWRTcGFuOjp1bnRyYW5zbGF0ZWREZWZpbml0ZUdyaWRTcGFuKHJlc29sdmVk
T3Bwb3NpdGVQb3NpdGlvbiwgcmVzb2x2ZWRPcHBvc2l0ZVBvc2l0aW9uICsgMSk7CisgICAgfQor
CisgICAgQVNTRVJUKHBvc2l0aW9uLmlzU3BhbigpKTsKKyAgICBBU1NFUlQocG9zaXRpb24uc3Bh
blBvc2l0aW9uKCkgPiAwKTsKKworICAgIGlmICghcG9zaXRpb24ubmFtZWRHcmlkTGluZSgpLmlz
TnVsbCgpKSB7CisgICAgICAgIC8vIHNwYW4gMiAnYycgLT4gd2UgbmVlZCB0byBmaW5kIHRoZSBh
cHByb3ByaWF0ZSBncmlkIGxpbmUgYmVmb3JlIC8gYWZ0ZXIgb3VyIG9wcG9zaXRlIHBvc2l0aW9u
LgorICAgICAgICByZXR1cm4gcmVzb2x2ZU5hbWVkR3JpZExpbmVQb3NpdGlvbkFnYWluc3RPcHBv
c2l0ZVBvc2l0aW9uKGdyaWRDb250YWluZXJTdHlsZSwgcmVzb2x2ZWRPcHBvc2l0ZVBvc2l0aW9u
LCBwb3NpdGlvbiwgc2lkZSk7CisgICAgfQorCisgICAgLy8gJ3NwYW4gMScgaXMgY29udGFpbmVk
IGluc2lkZSBhIHNpbmdsZSBncmlkIHRyYWNrIHJlZ2FyZGxlc3Mgb2YgdGhlIGRpcmVjdGlvbi4K
KyAgICAvLyBUaGF0J3Mgd2h5IHRoZSBDU1Mgc3BhbiB2YWx1ZSBpcyBvbmUgbW9yZSB0aGFuIHRo
ZSBvZmZzZXQgd2UgYXBwbHkuCisgICAgdW5zaWduZWQgcG9zaXRpb25PZmZzZXQgPSBwb3NpdGlv
bi5zcGFuUG9zaXRpb24oKTsKKyAgICBpZiAoaXNTdGFydFNpZGUoc2lkZSkpCisgICAgICAgIHJl
dHVybiBHcmlkU3Bhbjo6dW50cmFuc2xhdGVkRGVmaW5pdGVHcmlkU3BhbihyZXNvbHZlZE9wcG9z
aXRlUG9zaXRpb24gLSBwb3NpdGlvbk9mZnNldCwgcmVzb2x2ZWRPcHBvc2l0ZVBvc2l0aW9uKTsK
KworICAgIHJldHVybiBHcmlkU3Bhbjo6dW50cmFuc2xhdGVkRGVmaW5pdGVHcmlkU3BhbihyZXNv
bHZlZE9wcG9zaXRlUG9zaXRpb24sIHJlc29sdmVkT3Bwb3NpdGVQb3NpdGlvbiArIHBvc2l0aW9u
T2Zmc2V0KTsKK30KKwordW5zaWduZWQgR3JpZFBvc2l0aW9uc1Jlc29sdmVyOjpzcGFuU2l6ZUZv
ckF1dG9QbGFjZWRJdGVtKGNvbnN0IFJlbmRlclN0eWxlJiBncmlkQ29udGFpbmVyU3R5bGUsIGNv
bnN0IFJlbmRlckJveCYgZ3JpZEl0ZW0sIEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbiBkaXJlY3Rp
b24pCit7CisgICAgR3JpZFBvc2l0aW9uIGluaXRpYWxQb3NpdGlvbiwgZmluYWxQb3NpdGlvbjsK
KyAgICBhZGp1c3RHcmlkUG9zaXRpb25zRnJvbVN0eWxlKGdyaWRDb250YWluZXJTdHlsZSwgZ3Jp
ZEl0ZW0sIGRpcmVjdGlvbiwgaW5pdGlhbFBvc2l0aW9uLCBmaW5hbFBvc2l0aW9uKTsKKworICAg
IC8vIFRoaXMgbWV0aG9kIHdpbGwgb25seSBiZSB1c2VkIHdoZW4gYm90aCBwb3NpdGlvbnMgbmVl
ZCB0byBiZSByZXNvbHZlZCBhZ2FpbnN0IHRoZSBvcHBvc2l0ZSBvbmUuCisgICAgQVNTRVJUKGlu
aXRpYWxQb3NpdGlvbi5zaG91bGRCZVJlc29sdmVkQWdhaW5zdE9wcG9zaXRlUG9zaXRpb24oKSAm
JiBmaW5hbFBvc2l0aW9uLnNob3VsZEJlUmVzb2x2ZWRBZ2FpbnN0T3Bwb3NpdGVQb3NpdGlvbigp
KTsKKworICAgIGlmIChpbml0aWFsUG9zaXRpb24uaXNBdXRvKCkgJiYgZmluYWxQb3NpdGlvbi5p
c0F1dG8oKSkKKyAgICAgICAgcmV0dXJuIDE7CisKKyAgICBHcmlkUG9zaXRpb24gcG9zaXRpb24g
PSBpbml0aWFsUG9zaXRpb24uaXNTcGFuKCkgPyBpbml0aWFsUG9zaXRpb24gOiBmaW5hbFBvc2l0
aW9uOworICAgIEFTU0VSVChwb3NpdGlvbi5pc1NwYW4oKSk7CisKKyAgICBBU1NFUlQocG9zaXRp
b24uc3BhblBvc2l0aW9uKCkpOworICAgIHJldHVybiBwb3NpdGlvbi5zcGFuUG9zaXRpb24oKTsK
K30KKworc3RhdGljIGludCByZXNvbHZlR3JpZFBvc2l0aW9uRnJvbVN0eWxlKGNvbnN0IFJlbmRl
clN0eWxlJiBncmlkQ29udGFpbmVyU3R5bGUsIGNvbnN0IEdyaWRQb3NpdGlvbiYgcG9zaXRpb24s
IEdyaWRQb3NpdGlvblNpZGUgc2lkZSkKK3sKKyAgICBzd2l0Y2ggKHBvc2l0aW9uLnR5cGUoKSkg
eworICAgIGNhc2UgRXhwbGljaXRQb3NpdGlvbjogeworICAgICAgICBBU1NFUlQocG9zaXRpb24u
aW50ZWdlclBvc2l0aW9uKCkpOworCisgICAgICAgIGlmICghcG9zaXRpb24ubmFtZWRHcmlkTGlu
ZSgpLmlzTnVsbCgpKQorICAgICAgICAgICAgcmV0dXJuIHJlc29sdmVOYW1lZEdyaWRMaW5lUG9z
aXRpb25Gcm9tU3R5bGUoZ3JpZENvbnRhaW5lclN0eWxlLCBwb3NpdGlvbiwgc2lkZSk7CisKKyAg
ICAgICAgLy8gSGFuZGxlIDxpbnRlZ2VyPiBleHBsaWNpdCBwb3NpdGlvbi4KKyAgICAgICAgaWYg
KHBvc2l0aW9uLmlzUG9zaXRpdmUoKSkKKyAgICAgICAgICAgIHJldHVybiBwb3NpdGlvbi5pbnRl
Z2VyUG9zaXRpb24oKSAtIDE7CisKKyAgICAgICAgdW5zaWduZWQgcmVzb2x2ZWRQb3NpdGlvbiA9
IHN0ZDo6YWJzKHBvc2l0aW9uLmludGVnZXJQb3NpdGlvbigpKSAtIDE7CisgICAgICAgIGNvbnN0
IHVuc2lnbmVkIGVuZE9mVHJhY2sgPSBleHBsaWNpdEdyaWRTaXplRm9yU2lkZShncmlkQ29udGFp
bmVyU3R5bGUsIHNpZGUpOworCisgICAgICAgIHJldHVybiBlbmRPZlRyYWNrIC0gcmVzb2x2ZWRQ
b3NpdGlvbjsKKyAgICB9CisgICAgY2FzZSBOYW1lZEdyaWRBcmVhUG9zaXRpb246CisgICAgewor
ICAgICAgICAvLyBGaXJzdCBhdHRlbXB0IHRvIG1hdGNoIHRoZSBncmlkIGFyZWEncyBlZGdlIHRv
IGEgbmFtZWQgZ3JpZCBhcmVhOiBpZiB0aGVyZSBpcyBhIG5hbWVkIGxpbmUgd2l0aCB0aGUgbmFt
ZQorICAgICAgICAvLyAnJzxjdXN0b20taWRlbnQ+LXN0YXJ0IChmb3IgZ3JpZC0qLXN0YXJ0KSAv
IDxjdXN0b20taWRlbnQ+LWVuZCcnIChmb3IgZ3JpZC0qLWVuZCksIGNvbnRyaWJ1dGVzIHRoZSBm
aXJzdCBzdWNoCisgICAgICAgIC8vIGxpbmUgdG8gdGhlIGdyaWQgaXRlbSdzIHBsYWNlbWVudC4K
KyAgICAgICAgU3RyaW5nIG5hbWVkR3JpZExpbmUgPSBwb3NpdGlvbi5uYW1lZEdyaWRMaW5lKCk7
CisgICAgICAgIEFTU0VSVCghcG9zaXRpb24ubmFtZWRHcmlkTGluZSgpLmlzTnVsbCgpKTsKKwor
ICAgICAgICBjb25zdCBOYW1lZEdyaWRMaW5lc01hcCYgZ3JpZExpbmVOYW1lcyA9IGdyaWRMaW5l
c0ZvclNpZGUoZ3JpZENvbnRhaW5lclN0eWxlLCBzaWRlKTsKKyAgICAgICAgYXV0byBpbXBsaWNp
dExpbmUgPSBncmlkTGluZU5hbWVzLmZpbmQoaW1wbGljaXROYW1lZEdyaWRMaW5lRm9yU2lkZShu
YW1lZEdyaWRMaW5lLCBzaWRlKSk7CisgICAgICAgIGlmIChpbXBsaWNpdExpbmUgIT0gZ3JpZExp
bmVOYW1lcy5lbmQoKSkKKyAgICAgICAgICAgIHJldHVybiBpbXBsaWNpdExpbmUtPnZhbHVlWzBd
OworCisgICAgICAgIC8vIE90aGVyd2lzZSwgaWYgdGhlcmUgaXMgYSBuYW1lZCBsaW5lIHdpdGgg
dGhlIHNwZWNpZmllZCBuYW1lLCBjb250cmlidXRlcyB0aGUgZmlyc3Qgc3VjaCBsaW5lIHRvIHRo
ZSBncmlkCisgICAgICAgIC8vIGl0ZW0ncyBwbGFjZW1lbnQuCisgICAgICAgIGF1dG8gZXhwbGlj
aXRMaW5lID0gZ3JpZExpbmVOYW1lcy5maW5kKG5hbWVkR3JpZExpbmUpOworICAgICAgICBpZiAo
ZXhwbGljaXRMaW5lICE9IGdyaWRMaW5lTmFtZXMuZW5kKCkpCisgICAgICAgICAgICByZXR1cm4g
ZXhwbGljaXRMaW5lLT52YWx1ZVswXTsKKworICAgICAgICBBU1NFUlQoR3JpZFBvc2l0aW9uc1Jl
c29sdmVyOjppc05vbkV4aXN0ZW50TmFtZWRMaW5lT3JBcmVhKG5hbWVkR3JpZExpbmUsIGdyaWRD
b250YWluZXJTdHlsZSwgc2lkZSkpOworICAgICAgICAvLyBJZiBub25lIG9mIHRoZSBhYm92ZSB3
b3JrcyBzcGVjcyBtYW5kYXRlIHRvIGFzc3VtZSB0aGF0IGFsbCB0aGUgbGluZXMgaW4gdGhlIGlt
cGxpY2l0IGdyaWQgaGF2ZSB0aGlzIG5hbWUuCisgICAgICAgIHVuc2lnbmVkIGxhc3RMaW5lID0g
ZXhwbGljaXRHcmlkU2l6ZUZvclNpZGUoZ3JpZENvbnRhaW5lclN0eWxlLCBzaWRlKTsKKyAgICAg
ICAgcmV0dXJuIGxhc3RMaW5lICsgMTsKKyAgICB9CisgICAgY2FzZSBBdXRvUG9zaXRpb246Cisg
ICAgY2FzZSBTcGFuUG9zaXRpb246CisgICAgICAgIC8vICdhdXRvJyBhbmQgc3BhbiBkZXBlbmQg
b24gdGhlIG9wcG9zaXRlIHBvc2l0aW9uIGZvciByZXNvbHV0aW9uIChlLmcuIGdyaWQtcm93OiBh
dXRvIC8gMSBvciBncmlkLWNvbHVtbjogc3BhbiAzIC8gIm15SGVhZGVyIikuCisgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK0dyaWRTcGFuIEdyaWRQb3NpdGlv
bnNSZXNvbHZlcjo6cmVzb2x2ZUdyaWRQb3NpdGlvbnNGcm9tU3R5bGUoY29uc3QgUmVuZGVyU3R5
bGUmIGdyaWRDb250YWluZXJTdHlsZSwgY29uc3QgUmVuZGVyQm94JiBncmlkSXRlbSwgR3JpZFRy
YWNrU2l6aW5nRGlyZWN0aW9uIGRpcmVjdGlvbikKK3sKKyAgICBHcmlkUG9zaXRpb24gaW5pdGlh
bFBvc2l0aW9uLCBmaW5hbFBvc2l0aW9uOworICAgIGFkanVzdEdyaWRQb3NpdGlvbnNGcm9tU3R5
bGUoZ3JpZENvbnRhaW5lclN0eWxlLCBncmlkSXRlbSwgZGlyZWN0aW9uLCBpbml0aWFsUG9zaXRp
b24sIGZpbmFsUG9zaXRpb24pOworCisgICAgR3JpZFBvc2l0aW9uU2lkZSBpbml0aWFsU2lkZSA9
IGluaXRpYWxQb3NpdGlvblNpZGUoZGlyZWN0aW9uKTsKKyAgICBHcmlkUG9zaXRpb25TaWRlIGZp
bmFsU2lkZSA9IGZpbmFsUG9zaXRpb25TaWRlKGRpcmVjdGlvbik7CisKKyAgICAvLyBXZSBjYW4n
dCBnZXQgb3VyIGdyaWQgcG9zaXRpb25zIHdpdGhvdXQgcnVubmluZyB0aGUgYXV0byBwbGFjZW1l
bnQgYWxnb3JpdGhtLgorICAgIGlmIChpbml0aWFsUG9zaXRpb24uc2hvdWxkQmVSZXNvbHZlZEFn
YWluc3RPcHBvc2l0ZVBvc2l0aW9uKCkgJiYgZmluYWxQb3NpdGlvbi5zaG91bGRCZVJlc29sdmVk
QWdhaW5zdE9wcG9zaXRlUG9zaXRpb24oKSkKKyAgICAgICAgcmV0dXJuIEdyaWRTcGFuOjppbmRl
ZmluaXRlR3JpZFNwYW4oKTsKKworICAgIGlmIChpbml0aWFsUG9zaXRpb24uc2hvdWxkQmVSZXNv
bHZlZEFnYWluc3RPcHBvc2l0ZVBvc2l0aW9uKCkpIHsKKyAgICAgICAgLy8gSW5mZXIgdGhlIHBv
c2l0aW9uIGZyb20gdGhlIGZpbmFsIHBvc2l0aW9uICgnYXV0byAvIDEnIG9yICdzcGFuIDIgLyAz
JyBjYXNlKS4KKyAgICAgICAgYXV0byBmaW5hbFJlc29sdmVkUG9zaXRpb24gPSByZXNvbHZlR3Jp
ZFBvc2l0aW9uRnJvbVN0eWxlKGdyaWRDb250YWluZXJTdHlsZSwgZmluYWxQb3NpdGlvbiwgZmlu
YWxTaWRlKTsKKyAgICAgICAgcmV0dXJuIHJlc29sdmVHcmlkUG9zaXRpb25BZ2FpbnN0T3Bwb3Np
dGVQb3NpdGlvbihncmlkQ29udGFpbmVyU3R5bGUsIGZpbmFsUmVzb2x2ZWRQb3NpdGlvbiwgaW5p
dGlhbFBvc2l0aW9uLCBpbml0aWFsU2lkZSk7CisgICAgfQorCisgICAgaWYgKGZpbmFsUG9zaXRp
b24uc2hvdWxkQmVSZXNvbHZlZEFnYWluc3RPcHBvc2l0ZVBvc2l0aW9uKCkpIHsKKyAgICAgICAg
Ly8gSW5mZXIgb3VyIHBvc2l0aW9uIGZyb20gdGhlIGluaXRpYWwgcG9zaXRpb24gKCcxIC8gYXV0
bycgb3IgJzMgLyBzcGFuIDInIGNhc2UpLgorICAgICAgICBhdXRvIGluaXRpYWxSZXNvbHZlZFBv
c2l0aW9uID0gcmVzb2x2ZUdyaWRQb3NpdGlvbkZyb21TdHlsZShncmlkQ29udGFpbmVyU3R5bGUs
IGluaXRpYWxQb3NpdGlvbiwgaW5pdGlhbFNpZGUpOworICAgICAgICByZXR1cm4gcmVzb2x2ZUdy
aWRQb3NpdGlvbkFnYWluc3RPcHBvc2l0ZVBvc2l0aW9uKGdyaWRDb250YWluZXJTdHlsZSwgaW5p
dGlhbFJlc29sdmVkUG9zaXRpb24sIGZpbmFsUG9zaXRpb24sIGZpbmFsU2lkZSk7CisgICAgfQor
CisgICAgaW50IHJlc29sdmVkSW5pdGlhbFBvc2l0aW9uID0gcmVzb2x2ZUdyaWRQb3NpdGlvbkZy
b21TdHlsZShncmlkQ29udGFpbmVyU3R5bGUsIGluaXRpYWxQb3NpdGlvbiwgaW5pdGlhbFNpZGUp
OworICAgIGludCByZXNvbHZlZEZpbmFsUG9zaXRpb24gPSByZXNvbHZlR3JpZFBvc2l0aW9uRnJv
bVN0eWxlKGdyaWRDb250YWluZXJTdHlsZSwgZmluYWxQb3NpdGlvbiwgZmluYWxTaWRlKTsKKwor
ICAgIGlmIChyZXNvbHZlZEluaXRpYWxQb3NpdGlvbiA+IHJlc29sdmVkRmluYWxQb3NpdGlvbikK
KyAgICAgICAgc3RkOjpzd2FwKHJlc29sdmVkSW5pdGlhbFBvc2l0aW9uLCByZXNvbHZlZEZpbmFs
UG9zaXRpb24pOworICAgIGVsc2UgaWYgKHJlc29sdmVkSW5pdGlhbFBvc2l0aW9uID09IHJlc29s
dmVkRmluYWxQb3NpdGlvbikKKyAgICAgICAgcmVzb2x2ZWRGaW5hbFBvc2l0aW9uID0gcmVzb2x2
ZWRJbml0aWFsUG9zaXRpb24gKyAxOworCisgICAgcmV0dXJuIEdyaWRTcGFuOjp1bnRyYW5zbGF0
ZWREZWZpbml0ZUdyaWRTcGFuKHJlc29sdmVkSW5pdGlhbFBvc2l0aW9uLCBzdGQ6Om1heChyZXNv
bHZlZEluaXRpYWxQb3NpdGlvbiwgcmVzb2x2ZWRGaW5hbFBvc2l0aW9uKSk7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShDU1NfR1JJRF9MQVlPVVQpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvR3JpZFBvc2l0aW9uc1Jl
c29sdmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvR3JpZFBvc2l0aW9uc1Jl
c29sdmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uNGMxOGM3OGZjYjU1ZjVjMTU2MDZkMzA4NmZjMzEzMzUyNTc4
MWRkZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9H
cmlkUG9zaXRpb25zUmVzb2x2ZXIuaApAQCAtMCwwICsxLDYzIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE0IElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
CisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
CisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAq
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBHcmlkUG9zaXRpb25zUmVzb2x2ZXJfaAorI2RlZmlu
ZSBHcmlkUG9zaXRpb25zUmVzb2x2ZXJfaAorCisjaWYgRU5BQkxFKENTU19HUklEX0xBWU9VVCkK
KworI2luY2x1ZGUgIkdyaWRQb3NpdGlvbi5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Ns
YXNzIEdyaWRTcGFuOworY2xhc3MgUmVuZGVyQm94OworY2xhc3MgUmVuZGVyU3R5bGU7CisKK2Vu
dW0gR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uIHsKKyAgICBGb3JDb2x1bW5zLAorICAgIEZvclJv
d3MKK307CisKKy8vIENsYXNzIHdpdGggYWxsIHRoZSBjb2RlIHJlbGF0ZWQgdG8gZ3JpZCBpdGVt
cyBwb3NpdGlvbnMgcmVzb2x1dGlvbi4KK2NsYXNzIEdyaWRQb3NpdGlvbnNSZXNvbHZlciB7Citw
dWJsaWM6CisgICAgc3RhdGljIHVuc2lnbmVkIHNwYW5TaXplRm9yQXV0b1BsYWNlZEl0ZW0oY29u
c3QgUmVuZGVyU3R5bGUmLCBjb25zdCBSZW5kZXJCb3gmLCBHcmlkVHJhY2tTaXppbmdEaXJlY3Rp
b24pOworICAgIHN0YXRpYyBHcmlkU3BhbiByZXNvbHZlR3JpZFBvc2l0aW9uc0Zyb21TdHlsZShj
b25zdCBSZW5kZXJTdHlsZSYsIGNvbnN0IFJlbmRlckJveCYsIEdyaWRUcmFja1NpemluZ0RpcmVj
dGlvbik7CisgICAgc3RhdGljIHVuc2lnbmVkIGV4cGxpY2l0R3JpZENvbHVtbkNvdW50KGNvbnN0
IFJlbmRlclN0eWxlJik7CisgICAgc3RhdGljIHVuc2lnbmVkIGV4cGxpY2l0R3JpZFJvd0NvdW50
KGNvbnN0IFJlbmRlclN0eWxlJik7CisgICAgc3RhdGljIGJvb2wgaXNOb25FeGlzdGVudE5hbWVk
TGluZU9yQXJlYShjb25zdCBTdHJpbmcmIGxpbmVOYW1lLCBjb25zdCBSZW5kZXJTdHlsZSYsIEdy
aWRQb3NpdGlvblNpZGUpOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYg
Ly8gRU5BQkxFKENTU19HUklEX0xBWU9VVCkKKworI2VuZGlmIC8vIEdyaWRQb3NpdGlvbnNSZXNv
bHZlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvR3JpZFJl
c29sdmVkUG9zaXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL0dyaWRS
ZXNvbHZlZFBvc2l0aW9uLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2NhYjU2
Njk4YjIyNmFjNGRmYTg1ZTFlYmU3MzRiZmU2NWIxOTg0OC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUv
R3JpZFJlc29sdmVkUG9zaXRpb24uY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMzM0ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgSWdhbGlhIFMuTC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICog
ICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0
cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAq
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0j
aW5jbHVkZSAiR3JpZFJlc29sdmVkUG9zaXRpb24uaCIKLQotI2lmIEVOQUJMRShDU1NfR1JJRF9M
QVlPVVQpCi0KLSNpbmNsdWRlICJHcmlkQ29vcmRpbmF0ZS5oIgotI2luY2x1ZGUgIlJlbmRlckJv
eC5oIgotI2luY2x1ZGUgPGNzdGRsaWI+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RhdGlj
IGlubGluZSBib29sIGlzQ29sdW1uU2lkZShHcmlkUG9zaXRpb25TaWRlIHNpZGUpCi17Ci0gICAg
cmV0dXJuIHNpZGUgPT0gQ29sdW1uU3RhcnRTaWRlIHx8IHNpZGUgPT0gQ29sdW1uRW5kU2lkZTsK
LX0KLQotc3RhdGljIGlubGluZSBib29sIGlzU3RhcnRTaWRlKEdyaWRQb3NpdGlvblNpZGUgc2lk
ZSkKLXsKLSAgICByZXR1cm4gc2lkZSA9PSBDb2x1bW5TdGFydFNpZGUgfHwgc2lkZSA9PSBSb3dT
dGFydFNpZGU7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgR3JpZFBvc2l0aW9uU2lkZSBpbml0aWFsUG9z
aXRpb25TaWRlKEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbiBkaXJlY3Rpb24pCi17Ci0gICAgcmV0
dXJuIGRpcmVjdGlvbiA9PSBGb3JDb2x1bW5zID8gQ29sdW1uU3RhcnRTaWRlIDogUm93U3RhcnRT
aWRlOwotfQotCi1zdGF0aWMgaW5saW5lIEdyaWRQb3NpdGlvblNpZGUgZmluYWxQb3NpdGlvblNp
ZGUoR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uIGRpcmVjdGlvbikKLXsKLSAgICByZXR1cm4gZGly
ZWN0aW9uID09IEZvckNvbHVtbnMgPyBDb2x1bW5FbmRTaWRlIDogUm93RW5kU2lkZTsKLX0KLQot
c3RhdGljIGNvbnN0IE5hbWVkR3JpZExpbmVzTWFwJiBncmlkTGluZXNGb3JTaWRlKGNvbnN0IFJl
bmRlclN0eWxlJiBzdHlsZSwgR3JpZFBvc2l0aW9uU2lkZSBzaWRlKQotewotICAgIHJldHVybiBp
c0NvbHVtblNpZGUoc2lkZSkgPyBzdHlsZS5uYW1lZEdyaWRDb2x1bW5MaW5lcygpIDogc3R5bGUu
bmFtZWRHcmlkUm93TGluZXMoKTsKLX0KLQotc3RhdGljIGNvbnN0IFN0cmluZyBpbXBsaWNpdE5h
bWVkR3JpZExpbmVGb3JTaWRlKGNvbnN0IFN0cmluZyYgbGluZU5hbWUsIEdyaWRQb3NpdGlvblNp
ZGUgc2lkZSkKLXsKLSAgICByZXR1cm4gbGluZU5hbWUgKyAoaXNTdGFydFNpZGUoc2lkZSkgPyAi
LXN0YXJ0IiA6ICItZW5kIik7Ci19Ci0KLWJvb2wgR3JpZFJlc29sdmVkUG9zaXRpb246OmlzTm9u
RXhpc3RlbnROYW1lZExpbmVPckFyZWEoY29uc3QgU3RyaW5nJiBsaW5lTmFtZSwgY29uc3QgUmVu
ZGVyU3R5bGUmIHN0eWxlLCBHcmlkUG9zaXRpb25TaWRlIHNpZGUpCi17Ci0gICAgY29uc3QgTmFt
ZWRHcmlkTGluZXNNYXAmIGdyaWRMaW5lTmFtZXMgPSBncmlkTGluZXNGb3JTaWRlKHN0eWxlLCBz
aWRlKTsKLSAgICByZXR1cm4gIWdyaWRMaW5lTmFtZXMuY29udGFpbnMoaW1wbGljaXROYW1lZEdy
aWRMaW5lRm9yU2lkZShsaW5lTmFtZSwgc2lkZSkpICYmICFncmlkTGluZU5hbWVzLmNvbnRhaW5z
KGxpbmVOYW1lKTsKLX0KLQotc3RhdGljIHZvaWQgYWRqdXN0R3JpZFBvc2l0aW9uc0Zyb21TdHls
ZShjb25zdCBSZW5kZXJTdHlsZSYgZ3JpZENvbnRhaW5lclN0eWxlLCBjb25zdCBSZW5kZXJCb3gm
IGdyaWRJdGVtLCBHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb24gZGlyZWN0aW9uLCBHcmlkUG9zaXRp
b24mIGluaXRpYWxQb3NpdGlvbiwgR3JpZFBvc2l0aW9uJiBmaW5hbFBvc2l0aW9uKQotewotICAg
IGJvb2wgaXNGb3JDb2x1bW5zID0gZGlyZWN0aW9uID09IEZvckNvbHVtbnM7Ci0gICAgaW5pdGlh
bFBvc2l0aW9uID0gaXNGb3JDb2x1bW5zID8gZ3JpZEl0ZW0uc3R5bGUoKS5ncmlkSXRlbUNvbHVt
blN0YXJ0KCkgOiBncmlkSXRlbS5zdHlsZSgpLmdyaWRJdGVtUm93U3RhcnQoKTsKLSAgICBmaW5h
bFBvc2l0aW9uID0gaXNGb3JDb2x1bW5zID8gZ3JpZEl0ZW0uc3R5bGUoKS5ncmlkSXRlbUNvbHVt
bkVuZCgpIDogZ3JpZEl0ZW0uc3R5bGUoKS5ncmlkSXRlbVJvd0VuZCgpOwotCi0gICAgLy8gV2Ug
bXVzdCBoYW5kbGUgdGhlIHBsYWNlbWVudCBlcnJvciBoYW5kbGluZyBjb2RlIGhlcmUgaW5zdGVh
ZCBvZiBpbiB0aGUgU3R5bGVBZGp1c3RlciBiZWNhdXNlIHdlIGRvbid0IHdhbnQgdG8KLSAgICAv
LyBvdmVyd3JpdGUgdGhlIHNwZWNpZmllZCB2YWx1ZXMuCi0gICAgaWYgKGluaXRpYWxQb3NpdGlv
bi5pc1NwYW4oKSAmJiBmaW5hbFBvc2l0aW9uLmlzU3BhbigpKQotICAgICAgICBmaW5hbFBvc2l0
aW9uLnNldEF1dG9Qb3NpdGlvbigpOwotCi0gICAgaWYgKGdyaWRJdGVtLmlzT3V0T2ZGbG93UG9z
aXRpb25lZCgpKSB7Ci0gICAgICAgIC8vIEVhcmx5IGRldGVjdCB0aGUgY2FzZSBvZiBub24gZXhp
c3RpbmcgbmFtZWQgZ3JpZCBsaW5lcyBmb3IgcG9zaXRpb25lZCBpdGVtcy4KLSAgICAgICAgaWYg
KGluaXRpYWxQb3NpdGlvbi5pc05hbWVkR3JpZEFyZWEoKSAmJiBHcmlkUmVzb2x2ZWRQb3NpdGlv
bjo6aXNOb25FeGlzdGVudE5hbWVkTGluZU9yQXJlYShpbml0aWFsUG9zaXRpb24ubmFtZWRHcmlk
TGluZSgpLCBncmlkQ29udGFpbmVyU3R5bGUsIGluaXRpYWxQb3NpdGlvblNpZGUoZGlyZWN0aW9u
KSkpCi0gICAgICAgICAgICBpbml0aWFsUG9zaXRpb24uc2V0QXV0b1Bvc2l0aW9uKCk7Ci0KLSAg
ICAgICAgaWYgKGZpbmFsUG9zaXRpb24uaXNOYW1lZEdyaWRBcmVhKCkgJiYgR3JpZFJlc29sdmVk
UG9zaXRpb246OmlzTm9uRXhpc3RlbnROYW1lZExpbmVPckFyZWEoZmluYWxQb3NpdGlvbi5uYW1l
ZEdyaWRMaW5lKCksIGdyaWRDb250YWluZXJTdHlsZSwgZmluYWxQb3NpdGlvblNpZGUoZGlyZWN0
aW9uKSkpCi0gICAgICAgICAgICBmaW5hbFBvc2l0aW9uLnNldEF1dG9Qb3NpdGlvbigpOwotICAg
IH0KLQotICAgIC8vIElmIHRoZSBncmlkIGl0ZW0gaGFzIGFuIGF1dG9tYXRpYyBwb3NpdGlvbiBh
bmQgYSBncmlkIHNwYW4gZm9yIGEgbmFtZWQgbGluZSBpbiBhIGdpdmVuIGRpbWVuc2lvbiwgaW5z
dGVhZCB0cmVhdCB0aGUgZ3JpZCBzcGFuIGFzIG9uZS4KLSAgICBpZiAoaW5pdGlhbFBvc2l0aW9u
LmlzQXV0bygpICYmIGZpbmFsUG9zaXRpb24uaXNTcGFuKCkgJiYgIWZpbmFsUG9zaXRpb24ubmFt
ZWRHcmlkTGluZSgpLmlzTnVsbCgpKQotICAgICAgICBmaW5hbFBvc2l0aW9uLnNldFNwYW5Qb3Np
dGlvbigxLCBTdHJpbmcoKSk7Ci0gICAgaWYgKGZpbmFsUG9zaXRpb24uaXNBdXRvKCkgJiYgaW5p
dGlhbFBvc2l0aW9uLmlzU3BhbigpICYmICFpbml0aWFsUG9zaXRpb24ubmFtZWRHcmlkTGluZSgp
LmlzTnVsbCgpKQotICAgICAgICBpbml0aWFsUG9zaXRpb24uc2V0U3BhblBvc2l0aW9uKDEsIFN0
cmluZygpKTsKLX0KLQotdW5zaWduZWQgR3JpZFJlc29sdmVkUG9zaXRpb246OmV4cGxpY2l0R3Jp
ZENvbHVtbkNvdW50KGNvbnN0IFJlbmRlclN0eWxlJiBncmlkQ29udGFpbmVyU3R5bGUpCi17Ci0g
ICAgcmV0dXJuIHN0ZDo6bWluPHVuc2lnbmVkPihncmlkQ29udGFpbmVyU3R5bGUuZ3JpZENvbHVt
bnMoKS5zaXplKCksIGtHcmlkTWF4VHJhY2tzKTsKLX0KLQotdW5zaWduZWQgR3JpZFJlc29sdmVk
UG9zaXRpb246OmV4cGxpY2l0R3JpZFJvd0NvdW50KGNvbnN0IFJlbmRlclN0eWxlJiBncmlkQ29u
dGFpbmVyU3R5bGUpCi17Ci0gICAgcmV0dXJuIHN0ZDo6bWluPHVuc2lnbmVkPihncmlkQ29udGFp
bmVyU3R5bGUuZ3JpZFJvd3MoKS5zaXplKCksIGtHcmlkTWF4VHJhY2tzKTsKLX0KLQotc3RhdGlj
IHVuc2lnbmVkIGV4cGxpY2l0R3JpZFNpemVGb3JTaWRlKGNvbnN0IFJlbmRlclN0eWxlJiBncmlk
Q29udGFpbmVyU3R5bGUsIEdyaWRQb3NpdGlvblNpZGUgc2lkZSkKLXsKLSAgICByZXR1cm4gaXND
b2x1bW5TaWRlKHNpZGUpID8gR3JpZFJlc29sdmVkUG9zaXRpb246OmV4cGxpY2l0R3JpZENvbHVt
bkNvdW50KGdyaWRDb250YWluZXJTdHlsZSkgOiBHcmlkUmVzb2x2ZWRQb3NpdGlvbjo6ZXhwbGlj
aXRHcmlkUm93Q291bnQoZ3JpZENvbnRhaW5lclN0eWxlKTsKLX0KLQotc3RhdGljIHVuc2lnbmVk
IGxvb2tBaGVhZEZvck5hbWVkR3JpZExpbmUoaW50IHN0YXJ0LCB1bnNpZ25lZCBudW1iZXJPZkxp
bmVzLCBjb25zdCBWZWN0b3I8dW5zaWduZWQ+KiBuYW1lZEdyaWRMaW5lc0luZGV4ZXMsIHVuc2ln
bmVkIGdyaWRMYXN0TGluZSkKLXsKLSAgICBBU1NFUlQobnVtYmVyT2ZMaW5lcyk7Ci0KLSAgICAv
LyBPbmx5IGltcGxpY2l0IGxpbmVzIG9uIHRoZSBzZWFyY2ggZGlyZWN0aW9uIGFyZSBhc3N1bWVk
IHRvIGhhdmUgdGhlIGdpdmVuIG5hbWUsIHNvIHdlIGNhbiBzdGFydCB0byBsb29rIGZyb20gZmly
c3QgbGluZS4KLSAgICAvLyBTZWU6IGh0dHBzOi8vZHJhZnRzLmNzc3dnLm9yZy9jc3MtZ3JpZC8j
Z3JpZC1wbGFjZW1lbnQtc3Bhbi1pbnQKLSAgICB1bnNpZ25lZCBlbmQgPSBzdGQ6Om1heChzdGFy
dCwgMCk7Ci0KLSAgICBpZiAoIW5hbWVkR3JpZExpbmVzSW5kZXhlcykKLSAgICAgICAgcmV0dXJu
IHN0ZDo6bWF4KGVuZCwgZ3JpZExhc3RMaW5lICsgMSkgKyBudW1iZXJPZkxpbmVzIC0gMTsKLQot
ICAgIGZvciAoOyBudW1iZXJPZkxpbmVzOyArK2VuZCkgewotICAgICAgICBpZiAoZW5kID4gZ3Jp
ZExhc3RMaW5lIHx8IG5hbWVkR3JpZExpbmVzSW5kZXhlcy0+Y29udGFpbnMoZW5kKSkKLSAgICAg
ICAgICAgIG51bWJlck9mTGluZXMtLTsKLSAgICB9Ci0KLSAgICBBU1NFUlQoZW5kKTsKLSAgICBy
ZXR1cm4gZW5kIC0gMTsKLX0KLQotc3RhdGljIGludCBsb29rQmFja0Zvck5hbWVkR3JpZExpbmUo
aW50IGVuZCwgdW5zaWduZWQgbnVtYmVyT2ZMaW5lcywgY29uc3QgVmVjdG9yPHVuc2lnbmVkPiog
bmFtZWRHcmlkTGluZXNJbmRleGVzLCBpbnQgZ3JpZExhc3RMaW5lKQotewotICAgIEFTU0VSVChu
dW1iZXJPZkxpbmVzKTsKLQotICAgIC8vIE9ubHkgaW1wbGljaXQgbGluZXMgb24gdGhlIHNlYXJj
aCBkaXJlY3Rpb24gYXJlIGFzc3VtZWQgdG8gaGF2ZSB0aGUgZ2l2ZW4gbmFtZSwgc28gd2UgY2Fu
IHN0YXJ0IHRvIGxvb2sgZnJvbSBsYXN0IGxpbmUuCi0gICAgLy8gU2VlOiBodHRwczovL2RyYWZ0
cy5jc3N3Zy5vcmcvY3NzLWdyaWQvI2dyaWQtcGxhY2VtZW50LXNwYW4taW50Ci0gICAgaW50IHN0
YXJ0ID0gc3RkOjptaW4oZW5kLCBncmlkTGFzdExpbmUpOwotCi0gICAgaWYgKCFuYW1lZEdyaWRM
aW5lc0luZGV4ZXMpCi0gICAgICAgIHJldHVybiBzdGQ6Om1pbihzdGFydCwgLTEpIC0gbnVtYmVy
T2ZMaW5lcyArIDE7Ci0KLSAgICBmb3IgKDsgbnVtYmVyT2ZMaW5lczsgLS1zdGFydCkgewotICAg
ICAgICBpZiAoc3RhcnQgPCAwIHx8IG5hbWVkR3JpZExpbmVzSW5kZXhlcy0+Y29udGFpbnMoc3Rh
dGljX2Nhc3Q8c2l6ZV90PihzdGFydCkpKQotICAgICAgICAgICAgbnVtYmVyT2ZMaW5lcy0tOwot
ICAgIH0KLQotICAgIHJldHVybiBzdGFydCArIDE7Ci19Ci0KLXN0YXRpYyBpbnQgcmVzb2x2ZU5h
bWVkR3JpZExpbmVQb3NpdGlvbkZyb21TdHlsZShjb25zdCBSZW5kZXJTdHlsZSYgZ3JpZENvbnRh
aW5lclN0eWxlLCBjb25zdCBHcmlkUG9zaXRpb24mIHBvc2l0aW9uLCBHcmlkUG9zaXRpb25TaWRl
IHNpZGUpCi17Ci0gICAgQVNTRVJUKCFwb3NpdGlvbi5uYW1lZEdyaWRMaW5lKCkuaXNOdWxsKCkp
OwotCi0gICAgY29uc3QgTmFtZWRHcmlkTGluZXNNYXAmIGdyaWRMaW5lc05hbWVzID0gaXNDb2x1
bW5TaWRlKHNpZGUpID8gZ3JpZENvbnRhaW5lclN0eWxlLm5hbWVkR3JpZENvbHVtbkxpbmVzKCkg
OiBncmlkQ29udGFpbmVyU3R5bGUubmFtZWRHcmlkUm93TGluZXMoKTsKLSAgICBhdXRvIGl0ZXJh
dG9yID0gZ3JpZExpbmVzTmFtZXMuZmluZChwb3NpdGlvbi5uYW1lZEdyaWRMaW5lKCkpOwotICAg
IGNvbnN0IFZlY3Rvcjx1bnNpZ25lZD4qIGdyaWRMaW5lcyA9IGl0ZXJhdG9yID09IGdyaWRMaW5l
c05hbWVzLmVuZCgpID8gbnVsbHB0ciA6ICZpdGVyYXRvci0+dmFsdWU7Ci0gICAgdW5zaWduZWQg
bGFzdExpbmUgPSBleHBsaWNpdEdyaWRTaXplRm9yU2lkZShncmlkQ29udGFpbmVyU3R5bGUsIHNp
ZGUpOwotICAgIGlmIChwb3NpdGlvbi5pc1Bvc2l0aXZlKCkpCi0gICAgICAgIHJldHVybiBsb29r
QWhlYWRGb3JOYW1lZEdyaWRMaW5lKDAsIHN0ZDo6YWJzKHBvc2l0aW9uLmludGVnZXJQb3NpdGlv
bigpKSwgZ3JpZExpbmVzLCBsYXN0TGluZSk7Ci0gICAgcmV0dXJuIGxvb2tCYWNrRm9yTmFtZWRH
cmlkTGluZShsYXN0TGluZSwgc3RkOjphYnMocG9zaXRpb24uaW50ZWdlclBvc2l0aW9uKCkpLCBn
cmlkTGluZXMsIGxhc3RMaW5lKTsKLX0KLQotc3RhdGljIEdyaWRTcGFuIGRlZmluaXRlR3JpZFNw
YW5XaXRoTmFtZWRMaW5lU3BhbkFnYWluc3RPcHBvc2l0ZShpbnQgcmVzb2x2ZWRPcHBvc2l0ZVBv
c2l0aW9uLCBjb25zdCBHcmlkUG9zaXRpb24mIHBvc2l0aW9uLCBHcmlkUG9zaXRpb25TaWRlIHNp
ZGUsIGNvbnN0IFZlY3Rvcjx1bnNpZ25lZD4qIGdyaWRMaW5lcywgdW5zaWduZWQgbGFzdExpbmUp
Ci17Ci0gICAgaW50IHN0YXJ0LCBlbmQ7Ci0KLSAgICBpZiAoc2lkZSA9PSBSb3dTdGFydFNpZGUg
fHwgc2lkZSA9PSBDb2x1bW5TdGFydFNpZGUpIHsKLSAgICAgICAgc3RhcnQgPSBsb29rQmFja0Zv
ck5hbWVkR3JpZExpbmUocmVzb2x2ZWRPcHBvc2l0ZVBvc2l0aW9uIC0gMSwgcG9zaXRpb24uc3Bh
blBvc2l0aW9uKCksIGdyaWRMaW5lcywgbGFzdExpbmUpOwotICAgICAgICBlbmQgPSByZXNvbHZl
ZE9wcG9zaXRlUG9zaXRpb247Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgc3RhcnQgPSByZXNvbHZl
ZE9wcG9zaXRlUG9zaXRpb247Ci0gICAgICAgIGVuZCA9IGxvb2tBaGVhZEZvck5hbWVkR3JpZExp
bmUocmVzb2x2ZWRPcHBvc2l0ZVBvc2l0aW9uICsgMSwgcG9zaXRpb24uc3BhblBvc2l0aW9uKCks
IGdyaWRMaW5lcywgbGFzdExpbmUpOwotICAgIH0KLQotICAgIHJldHVybiBHcmlkU3Bhbjo6dW50
cmFuc2xhdGVkRGVmaW5pdGVHcmlkU3BhbihzdGFydCwgZW5kKTsKLX0KLQotc3RhdGljIEdyaWRT
cGFuIHJlc29sdmVOYW1lZEdyaWRMaW5lUG9zaXRpb25BZ2FpbnN0T3Bwb3NpdGVQb3NpdGlvbihj
b25zdCBSZW5kZXJTdHlsZSYgZ3JpZENvbnRhaW5lclN0eWxlLCBpbnQgcmVzb2x2ZWRPcHBvc2l0
ZVBvc2l0aW9uLCBjb25zdCBHcmlkUG9zaXRpb24mIHBvc2l0aW9uLCBHcmlkUG9zaXRpb25TaWRl
IHNpZGUpCi17Ci0gICAgQVNTRVJUKHBvc2l0aW9uLmlzU3BhbigpKTsKLSAgICBBU1NFUlQoIXBv
c2l0aW9uLm5hbWVkR3JpZExpbmUoKS5pc051bGwoKSk7Ci0gICAgLy8gTmVnYXRpdmUgcG9zaXRp
b25zIGFyZSBub3QgYWxsb3dlZCBwZXIgdGhlIHNwZWNpZmljYXRpb24gYW5kIHNob3VsZCBoYXZl
IGJlZW4gaGFuZGxlZCBkdXJpbmcgcGFyc2luZy4KLSAgICBBU1NFUlQocG9zaXRpb24uc3BhblBv
c2l0aW9uKCkgPiAwKTsKLQotICAgIGNvbnN0IE5hbWVkR3JpZExpbmVzTWFwJiBncmlkTGluZXNO
YW1lcyA9IGlzQ29sdW1uU2lkZShzaWRlKSA/IGdyaWRDb250YWluZXJTdHlsZS5uYW1lZEdyaWRD
b2x1bW5MaW5lcygpIDogZ3JpZENvbnRhaW5lclN0eWxlLm5hbWVkR3JpZFJvd0xpbmVzKCk7Ci0g
ICAgYXV0byBpdGVyYXRvciA9IGdyaWRMaW5lc05hbWVzLmZpbmQocG9zaXRpb24ubmFtZWRHcmlk
TGluZSgpKTsKLSAgICBjb25zdCBWZWN0b3I8dW5zaWduZWQ+KiBncmlkTGluZXMgPSBpdGVyYXRv
ciA9PSBncmlkTGluZXNOYW1lcy5lbmQoKSA/IG51bGxwdHIgOiAmaXRlcmF0b3ItPnZhbHVlOwot
ICAgIHVuc2lnbmVkIGxhc3RMaW5lID0gZXhwbGljaXRHcmlkU2l6ZUZvclNpZGUoZ3JpZENvbnRh
aW5lclN0eWxlLCBzaWRlKTsKLQotICAgIHJldHVybiBkZWZpbml0ZUdyaWRTcGFuV2l0aE5hbWVk
TGluZVNwYW5BZ2FpbnN0T3Bwb3NpdGUocmVzb2x2ZWRPcHBvc2l0ZVBvc2l0aW9uLCBwb3NpdGlv
biwgc2lkZSwgZ3JpZExpbmVzLCBsYXN0TGluZSk7Ci19Ci0KLXN0YXRpYyBHcmlkU3BhbiByZXNv
bHZlR3JpZFBvc2l0aW9uQWdhaW5zdE9wcG9zaXRlUG9zaXRpb24oY29uc3QgUmVuZGVyU3R5bGUm
IGdyaWRDb250YWluZXJTdHlsZSwgaW50IHJlc29sdmVkT3Bwb3NpdGVQb3NpdGlvbiwgY29uc3Qg
R3JpZFBvc2l0aW9uJiBwb3NpdGlvbiwgR3JpZFBvc2l0aW9uU2lkZSBzaWRlKQotewotICAgIGlm
IChwb3NpdGlvbi5pc0F1dG8oKSkgewotICAgICAgICBpZiAoaXNTdGFydFNpZGUoc2lkZSkpCi0g
ICAgICAgICAgICByZXR1cm4gR3JpZFNwYW46OnVudHJhbnNsYXRlZERlZmluaXRlR3JpZFNwYW4o
cmVzb2x2ZWRPcHBvc2l0ZVBvc2l0aW9uIC0gMSwgcmVzb2x2ZWRPcHBvc2l0ZVBvc2l0aW9uKTsK
LSAgICAgICAgcmV0dXJuIEdyaWRTcGFuOjp1bnRyYW5zbGF0ZWREZWZpbml0ZUdyaWRTcGFuKHJl
c29sdmVkT3Bwb3NpdGVQb3NpdGlvbiwgcmVzb2x2ZWRPcHBvc2l0ZVBvc2l0aW9uICsgMSk7Ci0g
ICAgfQotCi0gICAgQVNTRVJUKHBvc2l0aW9uLmlzU3BhbigpKTsKLSAgICBBU1NFUlQocG9zaXRp
b24uc3BhblBvc2l0aW9uKCkgPiAwKTsKLQotICAgIGlmICghcG9zaXRpb24ubmFtZWRHcmlkTGlu
ZSgpLmlzTnVsbCgpKSB7Ci0gICAgICAgIC8vIHNwYW4gMiAnYycgLT4gd2UgbmVlZCB0byBmaW5k
IHRoZSBhcHByb3ByaWF0ZSBncmlkIGxpbmUgYmVmb3JlIC8gYWZ0ZXIgb3VyIG9wcG9zaXRlIHBv
c2l0aW9uLgotICAgICAgICByZXR1cm4gcmVzb2x2ZU5hbWVkR3JpZExpbmVQb3NpdGlvbkFnYWlu
c3RPcHBvc2l0ZVBvc2l0aW9uKGdyaWRDb250YWluZXJTdHlsZSwgcmVzb2x2ZWRPcHBvc2l0ZVBv
c2l0aW9uLCBwb3NpdGlvbiwgc2lkZSk7Ci0gICAgfQotCi0gICAgLy8gJ3NwYW4gMScgaXMgY29u
dGFpbmVkIGluc2lkZSBhIHNpbmdsZSBncmlkIHRyYWNrIHJlZ2FyZGxlc3Mgb2YgdGhlIGRpcmVj
dGlvbi4KLSAgICAvLyBUaGF0J3Mgd2h5IHRoZSBDU1Mgc3BhbiB2YWx1ZSBpcyBvbmUgbW9yZSB0
aGFuIHRoZSBvZmZzZXQgd2UgYXBwbHkuCi0gICAgdW5zaWduZWQgcG9zaXRpb25PZmZzZXQgPSBw
b3NpdGlvbi5zcGFuUG9zaXRpb24oKTsKLSAgICBpZiAoaXNTdGFydFNpZGUoc2lkZSkpCi0gICAg
ICAgIHJldHVybiBHcmlkU3Bhbjo6dW50cmFuc2xhdGVkRGVmaW5pdGVHcmlkU3BhbihyZXNvbHZl
ZE9wcG9zaXRlUG9zaXRpb24gLSBwb3NpdGlvbk9mZnNldCwgcmVzb2x2ZWRPcHBvc2l0ZVBvc2l0
aW9uKTsKLQotICAgIHJldHVybiBHcmlkU3Bhbjo6dW50cmFuc2xhdGVkRGVmaW5pdGVHcmlkU3Bh
bihyZXNvbHZlZE9wcG9zaXRlUG9zaXRpb24sIHJlc29sdmVkT3Bwb3NpdGVQb3NpdGlvbiArIHBv
c2l0aW9uT2Zmc2V0KTsKLX0KLQotdW5zaWduZWQgR3JpZFJlc29sdmVkUG9zaXRpb246OnNwYW5T
aXplRm9yQXV0b1BsYWNlZEl0ZW0oY29uc3QgUmVuZGVyU3R5bGUmIGdyaWRDb250YWluZXJTdHls
ZSwgY29uc3QgUmVuZGVyQm94JiBncmlkSXRlbSwgR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uIGRp
cmVjdGlvbikKLXsKLSAgICBHcmlkUG9zaXRpb24gaW5pdGlhbFBvc2l0aW9uLCBmaW5hbFBvc2l0
aW9uOwotICAgIGFkanVzdEdyaWRQb3NpdGlvbnNGcm9tU3R5bGUoZ3JpZENvbnRhaW5lclN0eWxl
LCBncmlkSXRlbSwgZGlyZWN0aW9uLCBpbml0aWFsUG9zaXRpb24sIGZpbmFsUG9zaXRpb24pOwot
Ci0gICAgLy8gVGhpcyBtZXRob2Qgd2lsbCBvbmx5IGJlIHVzZWQgd2hlbiBib3RoIHBvc2l0aW9u
cyBuZWVkIHRvIGJlIHJlc29sdmVkIGFnYWluc3QgdGhlIG9wcG9zaXRlIG9uZS4KLSAgICBBU1NF
UlQoaW5pdGlhbFBvc2l0aW9uLnNob3VsZEJlUmVzb2x2ZWRBZ2FpbnN0T3Bwb3NpdGVQb3NpdGlv
bigpICYmIGZpbmFsUG9zaXRpb24uc2hvdWxkQmVSZXNvbHZlZEFnYWluc3RPcHBvc2l0ZVBvc2l0
aW9uKCkpOwotCi0gICAgaWYgKGluaXRpYWxQb3NpdGlvbi5pc0F1dG8oKSAmJiBmaW5hbFBvc2l0
aW9uLmlzQXV0bygpKQotICAgICAgICByZXR1cm4gMTsKLQotICAgIEdyaWRQb3NpdGlvbiBwb3Np
dGlvbiA9IGluaXRpYWxQb3NpdGlvbi5pc1NwYW4oKSA/IGluaXRpYWxQb3NpdGlvbiA6IGZpbmFs
UG9zaXRpb247Ci0gICAgQVNTRVJUKHBvc2l0aW9uLmlzU3BhbigpKTsKLQotICAgIEFTU0VSVChw
b3NpdGlvbi5zcGFuUG9zaXRpb24oKSk7Ci0gICAgcmV0dXJuIHBvc2l0aW9uLnNwYW5Qb3NpdGlv
bigpOwotfQotCi1zdGF0aWMgaW50IHJlc29sdmVHcmlkUG9zaXRpb25Gcm9tU3R5bGUoY29uc3Qg
UmVuZGVyU3R5bGUmIGdyaWRDb250YWluZXJTdHlsZSwgY29uc3QgR3JpZFBvc2l0aW9uJiBwb3Np
dGlvbiwgR3JpZFBvc2l0aW9uU2lkZSBzaWRlKQotewotICAgIHN3aXRjaCAocG9zaXRpb24udHlw
ZSgpKSB7Ci0gICAgY2FzZSBFeHBsaWNpdFBvc2l0aW9uOiB7Ci0gICAgICAgIEFTU0VSVChwb3Np
dGlvbi5pbnRlZ2VyUG9zaXRpb24oKSk7Ci0KLSAgICAgICAgaWYgKCFwb3NpdGlvbi5uYW1lZEdy
aWRMaW5lKCkuaXNOdWxsKCkpCi0gICAgICAgICAgICByZXR1cm4gcmVzb2x2ZU5hbWVkR3JpZExp
bmVQb3NpdGlvbkZyb21TdHlsZShncmlkQ29udGFpbmVyU3R5bGUsIHBvc2l0aW9uLCBzaWRlKTsK
LQotICAgICAgICAvLyBIYW5kbGUgPGludGVnZXI+IGV4cGxpY2l0IHBvc2l0aW9uLgotICAgICAg
ICBpZiAocG9zaXRpb24uaXNQb3NpdGl2ZSgpKQotICAgICAgICAgICAgcmV0dXJuIHBvc2l0aW9u
LmludGVnZXJQb3NpdGlvbigpIC0gMTsKLQotICAgICAgICB1bnNpZ25lZCByZXNvbHZlZFBvc2l0
aW9uID0gc3RkOjphYnMocG9zaXRpb24uaW50ZWdlclBvc2l0aW9uKCkpIC0gMTsKLSAgICAgICAg
Y29uc3QgdW5zaWduZWQgZW5kT2ZUcmFjayA9IGV4cGxpY2l0R3JpZFNpemVGb3JTaWRlKGdyaWRD
b250YWluZXJTdHlsZSwgc2lkZSk7Ci0KLSAgICAgICAgcmV0dXJuIGVuZE9mVHJhY2sgLSByZXNv
bHZlZFBvc2l0aW9uOwotICAgIH0KLSAgICBjYXNlIE5hbWVkR3JpZEFyZWFQb3NpdGlvbjoKLSAg
ICB7Ci0gICAgICAgIC8vIEZpcnN0IGF0dGVtcHQgdG8gbWF0Y2ggdGhlIGdyaWQgYXJlYSdzIGVk
Z2UgdG8gYSBuYW1lZCBncmlkIGFyZWE6IGlmIHRoZXJlIGlzIGEgbmFtZWQgbGluZSB3aXRoIHRo
ZSBuYW1lCi0gICAgICAgIC8vICcnPGN1c3RvbS1pZGVudD4tc3RhcnQgKGZvciBncmlkLSotc3Rh
cnQpIC8gPGN1c3RvbS1pZGVudD4tZW5kJycgKGZvciBncmlkLSotZW5kKSwgY29udHJpYnV0ZXMg
dGhlIGZpcnN0IHN1Y2gKLSAgICAgICAgLy8gbGluZSB0byB0aGUgZ3JpZCBpdGVtJ3MgcGxhY2Vt
ZW50LgotICAgICAgICBTdHJpbmcgbmFtZWRHcmlkTGluZSA9IHBvc2l0aW9uLm5hbWVkR3JpZExp
bmUoKTsKLSAgICAgICAgQVNTRVJUKCFwb3NpdGlvbi5uYW1lZEdyaWRMaW5lKCkuaXNOdWxsKCkp
OwotCi0gICAgICAgIGNvbnN0IE5hbWVkR3JpZExpbmVzTWFwJiBncmlkTGluZU5hbWVzID0gZ3Jp
ZExpbmVzRm9yU2lkZShncmlkQ29udGFpbmVyU3R5bGUsIHNpZGUpOwotICAgICAgICBhdXRvIGlt
cGxpY2l0TGluZSA9IGdyaWRMaW5lTmFtZXMuZmluZChpbXBsaWNpdE5hbWVkR3JpZExpbmVGb3JT
aWRlKG5hbWVkR3JpZExpbmUsIHNpZGUpKTsKLSAgICAgICAgaWYgKGltcGxpY2l0TGluZSAhPSBn
cmlkTGluZU5hbWVzLmVuZCgpKQotICAgICAgICAgICAgcmV0dXJuIGltcGxpY2l0TGluZS0+dmFs
dWVbMF07Ci0KLSAgICAgICAgLy8gT3RoZXJ3aXNlLCBpZiB0aGVyZSBpcyBhIG5hbWVkIGxpbmUg
d2l0aCB0aGUgc3BlY2lmaWVkIG5hbWUsIGNvbnRyaWJ1dGVzIHRoZSBmaXJzdCBzdWNoIGxpbmUg
dG8gdGhlIGdyaWQKLSAgICAgICAgLy8gaXRlbSdzIHBsYWNlbWVudC4KLSAgICAgICAgYXV0byBl
eHBsaWNpdExpbmUgPSBncmlkTGluZU5hbWVzLmZpbmQobmFtZWRHcmlkTGluZSk7Ci0gICAgICAg
IGlmIChleHBsaWNpdExpbmUgIT0gZ3JpZExpbmVOYW1lcy5lbmQoKSkKLSAgICAgICAgICAgIHJl
dHVybiBleHBsaWNpdExpbmUtPnZhbHVlWzBdOwotCi0gICAgICAgIEFTU0VSVChHcmlkUmVzb2x2
ZWRQb3NpdGlvbjo6aXNOb25FeGlzdGVudE5hbWVkTGluZU9yQXJlYShuYW1lZEdyaWRMaW5lLCBn
cmlkQ29udGFpbmVyU3R5bGUsIHNpZGUpKTsKLSAgICAgICAgLy8gSWYgbm9uZSBvZiB0aGUgYWJv
dmUgd29ya3Mgc3BlY3MgbWFuZGF0ZSB0byBhc3N1bWUgdGhhdCBhbGwgdGhlIGxpbmVzIGluIHRo
ZSBpbXBsaWNpdCBncmlkIGhhdmUgdGhpcyBuYW1lLgotICAgICAgICB1bnNpZ25lZCBsYXN0TGlu
ZSA9IGV4cGxpY2l0R3JpZFNpemVGb3JTaWRlKGdyaWRDb250YWluZXJTdHlsZSwgc2lkZSk7Ci0g
ICAgICAgIHJldHVybiBsYXN0TGluZSArIDE7Ci0gICAgfQotICAgIGNhc2UgQXV0b1Bvc2l0aW9u
OgotICAgIGNhc2UgU3BhblBvc2l0aW9uOgotICAgICAgICAvLyAnYXV0bycgYW5kIHNwYW4gZGVw
ZW5kIG9uIHRoZSBvcHBvc2l0ZSBwb3NpdGlvbiBmb3IgcmVzb2x1dGlvbiAoZS5nLiBncmlkLXJv
dzogYXV0byAvIDEgb3IgZ3JpZC1jb2x1bW46IHNwYW4gMyAvICJteUhlYWRlciIpLgotICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiAwOwotfQotCi1HcmlkU3BhbiBHcmlkUmVz
b2x2ZWRQb3NpdGlvbjo6cmVzb2x2ZUdyaWRQb3NpdGlvbnNGcm9tU3R5bGUoY29uc3QgUmVuZGVy
U3R5bGUmIGdyaWRDb250YWluZXJTdHlsZSwgY29uc3QgUmVuZGVyQm94JiBncmlkSXRlbSwgR3Jp
ZFRyYWNrU2l6aW5nRGlyZWN0aW9uIGRpcmVjdGlvbikKLXsKLSAgICBHcmlkUG9zaXRpb24gaW5p
dGlhbFBvc2l0aW9uLCBmaW5hbFBvc2l0aW9uOwotICAgIGFkanVzdEdyaWRQb3NpdGlvbnNGcm9t
U3R5bGUoZ3JpZENvbnRhaW5lclN0eWxlLCBncmlkSXRlbSwgZGlyZWN0aW9uLCBpbml0aWFsUG9z
aXRpb24sIGZpbmFsUG9zaXRpb24pOwotCi0gICAgR3JpZFBvc2l0aW9uU2lkZSBpbml0aWFsU2lk
ZSA9IGluaXRpYWxQb3NpdGlvblNpZGUoZGlyZWN0aW9uKTsKLSAgICBHcmlkUG9zaXRpb25TaWRl
IGZpbmFsU2lkZSA9IGZpbmFsUG9zaXRpb25TaWRlKGRpcmVjdGlvbik7Ci0KLSAgICAvLyBXZSBj
YW4ndCBnZXQgb3VyIGdyaWQgcG9zaXRpb25zIHdpdGhvdXQgcnVubmluZyB0aGUgYXV0byBwbGFj
ZW1lbnQgYWxnb3JpdGhtLgotICAgIGlmIChpbml0aWFsUG9zaXRpb24uc2hvdWxkQmVSZXNvbHZl
ZEFnYWluc3RPcHBvc2l0ZVBvc2l0aW9uKCkgJiYgZmluYWxQb3NpdGlvbi5zaG91bGRCZVJlc29s
dmVkQWdhaW5zdE9wcG9zaXRlUG9zaXRpb24oKSkKLSAgICAgICAgcmV0dXJuIEdyaWRTcGFuOjpp
bmRlZmluaXRlR3JpZFNwYW4oKTsKLQotICAgIGlmIChpbml0aWFsUG9zaXRpb24uc2hvdWxkQmVS
ZXNvbHZlZEFnYWluc3RPcHBvc2l0ZVBvc2l0aW9uKCkpIHsKLSAgICAgICAgLy8gSW5mZXIgdGhl
IHBvc2l0aW9uIGZyb20gdGhlIGZpbmFsIHBvc2l0aW9uICgnYXV0byAvIDEnIG9yICdzcGFuIDIg
LyAzJyBjYXNlKS4KLSAgICAgICAgYXV0byBmaW5hbFJlc29sdmVkUG9zaXRpb24gPSByZXNvbHZl
R3JpZFBvc2l0aW9uRnJvbVN0eWxlKGdyaWRDb250YWluZXJTdHlsZSwgZmluYWxQb3NpdGlvbiwg
ZmluYWxTaWRlKTsKLSAgICAgICAgcmV0dXJuIHJlc29sdmVHcmlkUG9zaXRpb25BZ2FpbnN0T3Bw
b3NpdGVQb3NpdGlvbihncmlkQ29udGFpbmVyU3R5bGUsIGZpbmFsUmVzb2x2ZWRQb3NpdGlvbiwg
aW5pdGlhbFBvc2l0aW9uLCBpbml0aWFsU2lkZSk7Ci0gICAgfQotCi0gICAgaWYgKGZpbmFsUG9z
aXRpb24uc2hvdWxkQmVSZXNvbHZlZEFnYWluc3RPcHBvc2l0ZVBvc2l0aW9uKCkpIHsKLSAgICAg
ICAgLy8gSW5mZXIgb3VyIHBvc2l0aW9uIGZyb20gdGhlIGluaXRpYWwgcG9zaXRpb24gKCcxIC8g
YXV0bycgb3IgJzMgLyBzcGFuIDInIGNhc2UpLgotICAgICAgICBhdXRvIGluaXRpYWxSZXNvbHZl
ZFBvc2l0aW9uID0gcmVzb2x2ZUdyaWRQb3NpdGlvbkZyb21TdHlsZShncmlkQ29udGFpbmVyU3R5
bGUsIGluaXRpYWxQb3NpdGlvbiwgaW5pdGlhbFNpZGUpOwotICAgICAgICByZXR1cm4gcmVzb2x2
ZUdyaWRQb3NpdGlvbkFnYWluc3RPcHBvc2l0ZVBvc2l0aW9uKGdyaWRDb250YWluZXJTdHlsZSwg
aW5pdGlhbFJlc29sdmVkUG9zaXRpb24sIGZpbmFsUG9zaXRpb24sIGZpbmFsU2lkZSk7Ci0gICAg
fQotCi0gICAgaW50IHJlc29sdmVkSW5pdGlhbFBvc2l0aW9uID0gcmVzb2x2ZUdyaWRQb3NpdGlv
bkZyb21TdHlsZShncmlkQ29udGFpbmVyU3R5bGUsIGluaXRpYWxQb3NpdGlvbiwgaW5pdGlhbFNp
ZGUpOwotICAgIGludCByZXNvbHZlZEZpbmFsUG9zaXRpb24gPSByZXNvbHZlR3JpZFBvc2l0aW9u
RnJvbVN0eWxlKGdyaWRDb250YWluZXJTdHlsZSwgZmluYWxQb3NpdGlvbiwgZmluYWxTaWRlKTsK
LQotICAgIGlmIChyZXNvbHZlZEluaXRpYWxQb3NpdGlvbiA+IHJlc29sdmVkRmluYWxQb3NpdGlv
bikKLSAgICAgICAgc3RkOjpzd2FwKHJlc29sdmVkSW5pdGlhbFBvc2l0aW9uLCByZXNvbHZlZEZp
bmFsUG9zaXRpb24pOwotICAgIGVsc2UgaWYgKHJlc29sdmVkSW5pdGlhbFBvc2l0aW9uID09IHJl
c29sdmVkRmluYWxQb3NpdGlvbikKLSAgICAgICAgcmVzb2x2ZWRGaW5hbFBvc2l0aW9uID0gcmVz
b2x2ZWRJbml0aWFsUG9zaXRpb24gKyAxOwotCi0gICAgcmV0dXJuIEdyaWRTcGFuOjp1bnRyYW5z
bGF0ZWREZWZpbml0ZUdyaWRTcGFuKHJlc29sdmVkSW5pdGlhbFBvc2l0aW9uLCBzdGQ6Om1heChy
ZXNvbHZlZEluaXRpYWxQb3NpdGlvbiwgcmVzb2x2ZWRGaW5hbFBvc2l0aW9uKSk7Ci19Ci0KLX0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShDU1NfR1JJRF9MQVlPVVQp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvR3JpZFJlc29sdmVk
UG9zaXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9HcmlkUmVzb2x2ZWRQ
b3NpdGlvbi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0Y2IzZjlkOThhZDZlNzE1
ZjA4MDdlYTI1YTVmM2U1MzJkODQ1ODRmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9HcmlkUmVzb2x2
ZWRQb3NpdGlvbi5oCisrKyAvZGV2L251bGwKQEAgLTEsNjQgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxNCBJZ2FsaWEgUy5MLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVy
IHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
Ci0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgR3JpZFJlc29sdmVkUG9zaXRpb25faAotI2Rl
ZmluZSBHcmlkUmVzb2x2ZWRQb3NpdGlvbl9oCi0KLSNpZiBFTkFCTEUoQ1NTX0dSSURfTEFZT1VU
KQotCi0jaW5jbHVkZSAiR3JpZFBvc2l0aW9uLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQot
Y2xhc3MgR3JpZFNwYW47Ci1jbGFzcyBSZW5kZXJCb3g7Ci1jbGFzcyBSZW5kZXJTdHlsZTsKLQot
ZW51bSBHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb24gewotICAgIEZvckNvbHVtbnMsCi0gICAgRm9y
Um93cwotfTsKLQotLy8gQ2xhc3Mgd2l0aCBhbGwgdGhlIGNvZGUgcmVsYXRlZCB0byBncmlkIGl0
ZW1zIHBvc2l0aW9ucyByZXNvbHV0aW9uLgotLy8gVE9ETyhyZWdvKTogUmVuYW1lIGNsYXNzIHRv
IEdyaWRQb3NpdGlvbnNSZXNvbHZlci4KLWNsYXNzIEdyaWRSZXNvbHZlZFBvc2l0aW9uIHsKLXB1
YmxpYzoKLSAgICBzdGF0aWMgdW5zaWduZWQgc3BhblNpemVGb3JBdXRvUGxhY2VkSXRlbShjb25z
dCBSZW5kZXJTdHlsZSYsIGNvbnN0IFJlbmRlckJveCYsIEdyaWRUcmFja1NpemluZ0RpcmVjdGlv
bik7Ci0gICAgc3RhdGljIEdyaWRTcGFuIHJlc29sdmVHcmlkUG9zaXRpb25zRnJvbVN0eWxlKGNv
bnN0IFJlbmRlclN0eWxlJiwgY29uc3QgUmVuZGVyQm94JiwgR3JpZFRyYWNrU2l6aW5nRGlyZWN0
aW9uKTsKLSAgICBzdGF0aWMgdW5zaWduZWQgZXhwbGljaXRHcmlkQ29sdW1uQ291bnQoY29uc3Qg
UmVuZGVyU3R5bGUmKTsKLSAgICBzdGF0aWMgdW5zaWduZWQgZXhwbGljaXRHcmlkUm93Q291bnQo
Y29uc3QgUmVuZGVyU3R5bGUmKTsKLSAgICBzdGF0aWMgYm9vbCBpc05vbkV4aXN0ZW50TmFtZWRM
aW5lT3JBcmVhKGNvbnN0IFN0cmluZyYgbGluZU5hbWUsIGNvbnN0IFJlbmRlclN0eWxlJiwgR3Jp
ZFBvc2l0aW9uU2lkZSk7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAv
LyBFTkFCTEUoQ1NTX0dSSURfTEFZT1VUKQotCi0jZW5kaWYgLy8gR3JpZFJlc29sdmVkUG9zaXRp
b25faApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlQWxs
SW5PbmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlQWxsSW5PbmUu
Y3BwCmluZGV4IDdjNmMwNzlkNjk1MzA4MTE3YWJjOWJiMmRkMTMwNjFkYjE3MDIxMzguLmRmNjQ2
N2U5NDQzYWE3ZWEwYjliOGI0ZmU1ZmNiMGY1Mjk5ZjBmYTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZUFsbEluT25lLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVBbGxJbk9uZS5jcHAKQEAgLTI5LDcgKzI5LDcgQEAK
ICNpbmNsdWRlICJDb250ZW50RGF0YS5jcHAiCiAjaW5jbHVkZSAiQ291bnRlckRpcmVjdGl2ZXMu
Y3BwIgogI2luY2x1ZGUgIkZpbGxMYXllci5jcHAiCi0jaW5jbHVkZSAiR3JpZFJlc29sdmVkUG9z
aXRpb24uY3BwIgorI2luY2x1ZGUgIkdyaWRQb3NpdGlvbnNSZXNvbHZlci5jcHAiCiAjaW5jbHVk
ZSAiS2V5ZnJhbWVMaXN0LmNwcCIKICNpbmNsdWRlICJOaW5lUGllY2VJbWFnZS5jcHAiCiAjaW5j
bHVkZSAiUXVvdGVzRGF0YS5jcHAiCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>274084</attachid>
            <date>2016-03-15 02:49:24 -0700</date>
            <delta_ts>2016-03-15 03:38:30 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-155486-20160315104911.patch</filename>
            <type>text/plain</type>
            <size>59830</size>
            <attacher name="Manuel Rego Casasnovas">rego</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk4MTM1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggM2ViNmU4MzM1ZTE3MDdj
OGE5OTIwMDk1ZDgxNjQxODZjMDEyNmI3Yy4uMDJkZDJiNjY1ODZhNzM0NTk0ZTE5NmE3YzVhMWQ5
MDg4MWIxMjAwYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUyIEBACisyMDE2LTAzLTE0ICBNYW51
ZWwgUmVnbyBDYXNhc25vdmFzICA8cmVnb0BpZ2FsaWEuY29tPgorCisgICAgICAgIFtjc3MtZ3Jp
ZF0gUmVuYW1lIEdyaWRSZXNvbHZlZFBvc2l0aW9uIHRvIEdyaWRQb3NpdGlvbnNSZXNvbHZlcgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU1NDg2CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgU2VyZ2lvIFZpbGxhciBTZW5pbi4KKworICAgICAgICBHcmlk
UmVzb2x2ZWRQb3NpdGlvbiBpcyBub3Qgc3RvcmluZyBhIHBvc2l0aW9uICh0cmFjayBvciBsaW5l
KSBhbnltb3JlLgorICAgICAgICBDdXJyZW50bHkgaXQncyBqdXN0IGEgY2xhc3Mgd3JhcHBpbmcg
dGhlIG1ldGhvZHMgdG8gcmVzb2x2ZQorICAgICAgICBncmlkIHBvc2l0aW9ucyBmcm9tIHN0eWxl
LgorICAgICAgICBSZW5hbWVkIHRoZSBjbGFzcyB0byBhdm9pZCBjb25mdXNpb25zLgorCisgICAg
ICAgIE5vIG5ldyB0ZXN0cywgbm8gY2hhbmdlIG9mIGJlaGF2aW9yLgorCisgICAgICAgICogQ01h
a2VMaXN0cy50eHQ6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJHcmlkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckdyaWQ6OnBsYWNlSXRlbXNPbkdyaWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
R3JpZDo6cG9wdWxhdGVFeHBsaWNpdEdyaWRBbmRPcmRlckl0ZXJhdG9yKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckdyaWQ6OmNyZWF0ZUVtcHR5R3JpZEFyZWFBdFNwZWNpZmllZFBvc2l0aW9u
c091dHNpZGVHcmlkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckdyaWQ6OnBsYWNlU3BlY2lm
aWVkTWFqb3JBeGlzSXRlbXNPbkdyaWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyR3JpZDo6
cGxhY2VBdXRvTWFqb3JBeGlzSXRlbU9uR3JpZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJH
cmlkOjpvZmZzZXRBbmRCcmVhZHRoRm9yUG9zaXRpb25lZENoaWxkKToKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyR3JpZC5oOgorICAgICAgICAqIHJlbmRlcmluZy9zdHlsZS9HcmlkQ29vcmRp
bmF0ZS5oOgorICAgICAgICAqIHJlbmRlcmluZy9zdHlsZS9HcmlkUG9zaXRpb25zUmVzb2x2ZXIu
Y3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL0dyaWRSZXNv
bHZlZFBvc2l0aW9uLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OmlzQ29sdW1uU2lkZSk6CisgICAg
ICAgIChXZWJDb3JlOjppc1N0YXJ0U2lkZSk6CisgICAgICAgIChXZWJDb3JlOjppbml0aWFsUG9z
aXRpb25TaWRlKToKKyAgICAgICAgKFdlYkNvcmU6OmZpbmFsUG9zaXRpb25TaWRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OmdyaWRMaW5lc0ZvclNpZGUpOgorICAgICAgICAoV2ViQ29yZTo6aW1wbGlj
aXROYW1lZEdyaWRMaW5lRm9yU2lkZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmlkUG9zaXRpb25z
UmVzb2x2ZXI6OmlzTm9uRXhpc3RlbnROYW1lZExpbmVPckFyZWEpOgorICAgICAgICAoV2ViQ29y
ZTo6YWRqdXN0R3JpZFBvc2l0aW9uc0Zyb21TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmlk
UG9zaXRpb25zUmVzb2x2ZXI6OmV4cGxpY2l0R3JpZENvbHVtbkNvdW50KToKKyAgICAgICAgKFdl
YkNvcmU6OkdyaWRQb3NpdGlvbnNSZXNvbHZlcjo6ZXhwbGljaXRHcmlkUm93Q291bnQpOgorICAg
ICAgICAoV2ViQ29yZTo6ZXhwbGljaXRHcmlkU2l6ZUZvclNpZGUpOgorICAgICAgICAoV2ViQ29y
ZTo6bG9va0FoZWFkRm9yTmFtZWRHcmlkTGluZSk6CisgICAgICAgIChXZWJDb3JlOjpsb29rQmFj
a0Zvck5hbWVkR3JpZExpbmUpOgorICAgICAgICAoV2ViQ29yZTo6cmVzb2x2ZU5hbWVkR3JpZExp
bmVQb3NpdGlvbkZyb21TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpkZWZpbml0ZUdyaWRTcGFu
V2l0aE5hbWVkTGluZVNwYW5BZ2FpbnN0T3Bwb3NpdGUpOgorICAgICAgICAoV2ViQ29yZTo6cmVz
b2x2ZU5hbWVkR3JpZExpbmVQb3NpdGlvbkFnYWluc3RPcHBvc2l0ZVBvc2l0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OnJlc29sdmVHcmlkUG9zaXRpb25BZ2FpbnN0T3Bwb3NpdGVQb3NpdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpHcmlkUG9zaXRpb25zUmVzb2x2ZXI6OnNwYW5TaXplRm9yQXV0
b1BsYWNlZEl0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6cmVzb2x2ZUdyaWRQb3NpdGlvbkZyb21T
dHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmlkUG9zaXRpb25zUmVzb2x2ZXI6OnJlc29sdmVH
cmlkUG9zaXRpb25zRnJvbVN0eWxlKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvR3JpZFBv
c2l0aW9uc1Jlc29sdmVyLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3R5bGUvR3JpZFJlc29sdmVkUG9zaXRpb24uaC4KKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUv
U3R5bGVBbGxJbk9uZS5jcHA6CisKIDIwMTYtMDMtMTQgIEFsZXhleSBQcm9za3VyeWFrb3YgIDxh
cEBhcHBsZS5jb20+CiAKICAgICAgICAgQnVpbGQgZml4LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAppbmRl
eCAwZjVhMmQ4OTNiYjBkMmY3ZGE5NGVjMmM3OTI0OTczMzQxOWNjMDI0Li5hMThhYTU0ZDEwNDli
N2RjM2MyN2JmYTZhMTUxNWJmY2NmYzVhZTQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9D
TWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dApAQCAtMjUz
OSw3ICsyNTM5LDcgQEAgc2V0KFdlYkNvcmVfU09VUkNFUwogICAgIHJlbmRlcmluZy9zdHlsZS9D
b250ZW50RGF0YS5jcHAKICAgICByZW5kZXJpbmcvc3R5bGUvQ291bnRlckRpcmVjdGl2ZXMuY3Bw
CiAgICAgcmVuZGVyaW5nL3N0eWxlL0ZpbGxMYXllci5jcHAKLSAgICByZW5kZXJpbmcvc3R5bGUv
R3JpZFJlc29sdmVkUG9zaXRpb24uY3BwCisgICAgcmVuZGVyaW5nL3N0eWxlL0dyaWRQb3NpdGlv
bnNSZXNvbHZlci5jcHAKICAgICByZW5kZXJpbmcvc3R5bGUvS2V5ZnJhbWVMaXN0LmNwcAogICAg
IHJlbmRlcmluZy9zdHlsZS9OaW5lUGllY2VJbWFnZS5jcHAKICAgICByZW5kZXJpbmcvc3R5bGUv
UXVvdGVzRGF0YS5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagppbmRleCA0YjE3ODYzMDU2ZTRmZjZjMWFiN2IxOGI1NDEyNWUwY2VjNjhh
Nzg2Li4wNzAzNTdiNzQ2YzExOTUwZGIzYjJiYjE3N2NiOTg0ZjRhZjUyN2U1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC02MTg4
LDggKzYxODgsOCBAQAogCQlDREYyQjAxOTE4MjA1NDA3MDBGMkI0MjQgLyogTW9ja1RyYWNrcy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RGMkIwMEYx
ODIwNTQwNjAwRjJCNDI0IC8qIE1vY2tUcmFja3MuaCAqLzsgfTsKIAkJQ0RGNjVDQzgxNDVCMUU3
NTAwQzRDN0FBIC8qIE1lZGlhQ29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQ0QyN0Y2RTQxNDU3Njc4NzAwNzgyMDdEIC8qIE1lZGlhQ29u
dHJvbGxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCUNERjY1Q0NBMTQ1QjQ0ODgwMEM0QzdBQSAvKiBNZWRpYUNvbnRyb2xsZXJJbnRlcmZhY2Uu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENERjY1Q0M5
MTQ1QjQzQTcwMEM0QzdBQSAvKiBNZWRpYUNvbnRyb2xsZXJJbnRlcmZhY2UuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQlDREY3NDgzRTE4RkVCQ0VD
MDAwNkVDQzAgLyogR3JpZFJlc29sdmVkUG9zaXRpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RGNzQ4M0MxOEZFQkNFQzAwMDZFQ0MwIC8qIEdy
aWRSZXNvbHZlZFBvc2l0aW9uLmNwcCAqLzsgfTsKLQkJQ0RGNzQ4M0YxOEZFQkNFQzAwMDZFQ0Mw
IC8qIEdyaWRSZXNvbHZlZFBvc2l0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBDREY3NDgzRDE4RkVCQ0VDMDAwNkVDQzAgLyogR3JpZFJlc29sdmVk
UG9zaXRpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OworCQlDREY3NDgzRTE4RkVCQ0VDMDAwNkVDQzAgLyogR3JpZFBvc2l0aW9uc1Jlc29sdmVyLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENERjc0ODND
MThGRUJDRUMwMDA2RUNDMCAvKiBHcmlkUG9zaXRpb25zUmVzb2x2ZXIuY3BwICovOyB9OworCQlD
REY3NDgzRjE4RkVCQ0VDMDAwNkVDQzAgLyogR3JpZFBvc2l0aW9uc1Jlc29sdmVyLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREY3NDgzRDE4RkVCQ0VD
MDAwNkVDQzAgLyogR3JpZFBvc2l0aW9uc1Jlc29sdmVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQ0RGQzM2MDUxOENBNjFDMjAwMjZFNTZGIC8q
IFJlbW90ZUNvbW1hbmRMaXN0ZW5lci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBDREZDMzYwMzE4Q0E2MUMyMDAyNkU1NkYgLyogUmVtb3RlQ29tbWFu
ZExpc3RlbmVyLmNwcCAqLzsgfTsKIAkJQ0RGQzM2MDYxOENBNjFDMjAwMjZFNTZGIC8qIFJlbW90
ZUNvbW1hbmRMaXN0ZW5lci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQ0RGQzM2MDQxOENBNjFDMjAwMjZFNTZGIC8qIFJlbW90ZUNvbW1hbmRMaXN0ZW5l
ci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUNE
RkMzNjA3MThDQTY5NkMwMDI2RTU2RiAvKiBSZW1vdGVDb21tYW5kTGlzdGVuZXJJT1MubW0gaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREZDMzYwMjE4Q0E2
MTYzMDAyNkU1NkYgLyogUmVtb3RlQ29tbWFuZExpc3RlbmVySU9TLm1tICovOyB9OwpAQCAtMTQy
MDYsOCArMTQyMDYsOCBAQAogCQlDREY0MTk5OTFBQjBEQTE0MDA0RTY0RTEgLyogbWlzc2luZ0lt
YWdlQDN4LnBuZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IGltYWdlLnBuZzsgcGF0aCA9ICJtaXNzaW5nSW1hZ2VAM3gucG5nIjsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQ0RGNjVDQzkxNDVCNDNBNzAwQzRDN0FBIC8qIE1lZGlhQ29udHJv
bGxlckludGVyZmFjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNZWRpYUNv
bnRyb2xsZXJJbnRlcmZhY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0RGNjVD
Q0MxNDVCNkFGRTAwQzRDN0FBIC8qIEpTSFRNTE1lZGlhRWxlbWVudEN1c3RvbS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0hUTUxNZWRpYUVsZW1lbnRDdXN0b20u
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDREY3NDgzQzE4RkVCQ0VDMDAwNkVD
QzAgLyogR3JpZFJlc29sdmVkUG9zaXRpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gR3JpZFJlc29sdmVkUG9zaXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQlDREY3NDgzRDE4RkVCQ0VDMDAwNkVDQzAgLyogR3JpZFJlc29sdmVkUG9zaXRp
b24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR3JpZFJlc29sdmVkUG9zaXRp
b24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQ0RGNzQ4M0MxOEZFQkNFQzAwMDZF
Q0MwIC8qIEdyaWRQb3NpdGlvbnNSZXNvbHZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBHcmlkUG9zaXRpb25zUmVzb2x2ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlDREY3NDgzRDE4RkVCQ0VDMDAwNkVDQzAgLyogR3JpZFBvc2l0aW9uc1Jl
c29sdmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdyaWRQb3NpdGlvbnNS
ZXNvbHZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDREZDMzYwMTE4Q0E2MTYz
MDAyNkU1NkYgLyogUmVtb3RlQ29tbWFuZExpc3RlbmVySU9TLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFJlbW90ZUNvbW1hbmRMaXN0ZW5lcklPUy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlDREZDMzYwMjE4Q0E2MTYzMDAyNkU1NkYgLyogUmVtb3RlQ29tbWFu
ZExpc3RlbmVySU9TLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0g
UmVtb3RlQ29tbWFuZExpc3RlbmVySU9TLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlDREZDMzYwMzE4Q0E2MUMyMDAyNkU1NkYgLyogUmVtb3RlQ29tbWFuZExpc3RlbmVyLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbW90ZUNvbW1hbmRMaXN0ZW5l
ci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMjU2MCw4ICsyMjU2MCw4IEBA
CiAJCQkJQ0QzRTI1MUIxODA0NkIwNjAwRTI3RjU2IC8qIEdyaWRDb29yZGluYXRlLmggKi8sCiAJ
CQkJQ0RFRjRGRDYxN0U4NUM4RjAwQUVFMjRCIC8qIEdyaWRMZW5ndGguaCAqLywKIAkJCQlBMTI3
MDVDMjE2NTZCRDY1MDBDMkUyN0MgLyogR3JpZFBvc2l0aW9uLmggKi8sCi0JCQkJQ0RGNzQ4M0Mx
OEZFQkNFQzAwMDZFQ0MwIC8qIEdyaWRSZXNvbHZlZFBvc2l0aW9uLmNwcCAqLywKLQkJCQlDREY3
NDgzRDE4RkVCQ0VDMDAwNkVDQzAgLyogR3JpZFJlc29sdmVkUG9zaXRpb24uaCAqLywKKwkJCQlD
REY3NDgzQzE4RkVCQ0VDMDAwNkVDQzAgLyogR3JpZFBvc2l0aW9uc1Jlc29sdmVyLmNwcCAqLywK
KwkJCQlDREY3NDgzRDE4RkVCQ0VDMDAwNkVDQzAgLyogR3JpZFBvc2l0aW9uc1Jlc29sdmVyLmgg
Ki8sCiAJCQkJQTEyQTEwNEUxNjY0NDREQzAwOEZBMzExIC8qIEdyaWRUcmFja1NpemUuaCAqLywK
IAkJCQlCQzVFQkEwRTBFODIzRTQ3MDBCMjU5NjUgLyogS2V5ZnJhbWVMaXN0LmNwcCAqLywKIAkJ
CQlCQzVFQkEwRjBFODIzRTQ3MDBCMjU5NjUgLyogS2V5ZnJhbWVMaXN0LmggKi8sCkBAIC0yNjE0
Niw3ICsyNjE0Niw3IEBACiAJCQkJQ0QzRTI1MUMxODA0NkIwNjAwRTI3RjU2IC8qIEdyaWRDb29y
ZGluYXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQlDREVGNEZENzE3RTg1QzhGMDBBRUUyNEIgLyog
R3JpZExlbmd0aC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTEyNzA1QzMxNjU2QkQ2NTAwQzJFMjdD
IC8qIEdyaWRQb3NpdGlvbi5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQ0RGNzQ4M0YxOEZFQkNFQzAw
MDZFQ0MwIC8qIEdyaWRSZXNvbHZlZFBvc2l0aW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQlDREY3
NDgzRjE4RkVCQ0VDMDAwNkVDQzAgLyogR3JpZFBvc2l0aW9uc1Jlc29sdmVyLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBMTJBMTA1MDE2NjQ0NEZEMDA4RkEzMTEgLyogR3JpZFRyYWNrU2l6ZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMjZFQTg5QTcxQjRGMkI3NTAwOEM1RkQyIC8qIEhhc2hhYmxlQWN0
aW9uTGlzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODQ4MkI3NDYxMTk4QzM1NDAwQkZCMDA1IC8q
IEhhc2hDaGFuZ2VFdmVudC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yOTgzNyw3ICsyOTgzNyw3IEBA
CiAJCQkJNDk5QjNFRDYxMjhDRDMxNDAwRTcyNkMyIC8qIEdyYXBoaWNzTGF5ZXJDQS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkwRkEyNEQ3OTE2MkRGOTE5MDBBM0Y0QzAgLyogR3JhcGhpY3NMYXll
clVwZGF0ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjJBMDE1QUEwQUY2Q0Q1MzAwNkJDRTBF
IC8qIEdyYXBoaWNzVHlwZXMuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQ0RGNzQ4M0UxOEZFQkNF
QzAwMDZFQ0MwIC8qIEdyaWRSZXNvbHZlZFBvc2l0aW9uLmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CUNERjc0ODNFMThGRUJDRUMwMDA2RUNDMCAvKiBHcmlkUG9zaXRpb25zUmVzb2x2ZXIuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJRjU1QjNEQkYxMjUxRjEyRDAwM0VGMjY5IC8qIEhpZGRlbklucHV0
VHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MUE5RDlGMzE5NUI5NTAzMDAxQjJCNUMgLyog
SElER2FtZXBhZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MTc5Q0UzNjE5NUNBQzdFMDAxOUMx
OTggLyogSElER2FtZXBhZFByb3ZpZGVyLmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckdyaWQuY3BwIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckdyaWQuY3BwCmluZGV4IDRiZGIwMTY4NWNmMzNlZjBlMzg3NzI4ZTcz
OGE0YTBhNWZlZjQ1YjguLjRmODc0YTEzZTg2OGU0MTM4NjBiYWE0ODM5ODcxZGUyZmEzZWRlZWQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJHcmlkLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyR3JpZC5jcHAKQEAgLTMwLDcgKzMwLDcg
QEAKICNpZiBFTkFCTEUoQ1NTX0dSSURfTEFZT1VUKQogCiAjaW5jbHVkZSAiR3JpZENvb3JkaW5h
dGUuaCIKLSNpbmNsdWRlICJHcmlkUmVzb2x2ZWRQb3NpdGlvbi5oIgorI2luY2x1ZGUgIkdyaWRQ
b3NpdGlvbnNSZXNvbHZlci5oIgogI2luY2x1ZGUgIkxheW91dFJlcGFpbnRlci5oIgogI2luY2x1
ZGUgIlJlbmRlckxheWVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgpAQCAtMTE4Miw4ICsx
MTgyLDggQEAgdm9pZCBSZW5kZXJHcmlkOjpwbGFjZUl0ZW1zT25HcmlkKCkKICAgICAgICAgaW5z
ZXJ0SXRlbUludG9HcmlkKCpjaGlsZCwgR3JpZENvb3JkaW5hdGUoY29vcmRpbmF0ZS5yb3dzLCBj
b29yZGluYXRlLmNvbHVtbnMpKTsKICAgICB9CiAKLSAgICBBU1NFUlQoZ3JpZFJvd0NvdW50KCkg
Pj0gR3JpZFJlc29sdmVkUG9zaXRpb246OmV4cGxpY2l0R3JpZFJvd0NvdW50KHN0eWxlKCkpKTsK
LSAgICBBU1NFUlQoZ3JpZENvbHVtbkNvdW50KCkgPj0gR3JpZFJlc29sdmVkUG9zaXRpb246OmV4
cGxpY2l0R3JpZENvbHVtbkNvdW50KHN0eWxlKCkpKTsKKyAgICBBU1NFUlQoZ3JpZFJvd0NvdW50
KCkgPj0gR3JpZFBvc2l0aW9uc1Jlc29sdmVyOjpleHBsaWNpdEdyaWRSb3dDb3VudChzdHlsZSgp
KSk7CisgICAgQVNTRVJUKGdyaWRDb2x1bW5Db3VudCgpID49IEdyaWRQb3NpdGlvbnNSZXNvbHZl
cjo6ZXhwbGljaXRHcmlkQ29sdW1uQ291bnQoc3R5bGUoKSkpOwogCiAgICAgcGxhY2VTcGVjaWZp
ZWRNYWpvckF4aXNJdGVtc09uR3JpZChzcGVjaWZpZWRNYWpvckF4aXNBdXRvR3JpZEl0ZW1zKTsK
ICAgICBwbGFjZUF1dG9NYWpvckF4aXNJdGVtc09uR3JpZChhdXRvTWFqb3JBeGlzQXV0b0dyaWRJ
dGVtcyk7CkBAIC0xMjAzLDggKzEyMDMsOCBAQCB2b2lkIFJlbmRlckdyaWQ6OnBvcHVsYXRlRXhw
bGljaXRHcmlkQW5kT3JkZXJJdGVyYXRvcigpCiB7CiAgICAgT3JkZXJJdGVyYXRvclBvcHVsYXRv
ciBwb3B1bGF0b3IobV9vcmRlckl0ZXJhdG9yKTsKICAgICBtX3NtYWxsZXN0Um93U3RhcnQgPSBt
X3NtYWxsZXN0Q29sdW1uU3RhcnQgPSAwOwotICAgIHVuc2lnbmVkIG1heGltdW1Sb3dJbmRleCA9
IHN0ZDo6bWF4PHVuc2lnbmVkPigxLCBHcmlkUmVzb2x2ZWRQb3NpdGlvbjo6ZXhwbGljaXRHcmlk
Um93Q291bnQoc3R5bGUoKSkpOwotICAgIHVuc2lnbmVkIG1heGltdW1Db2x1bW5JbmRleCA9IHN0
ZDo6bWF4PHVuc2lnbmVkPigxLCBHcmlkUmVzb2x2ZWRQb3NpdGlvbjo6ZXhwbGljaXRHcmlkQ29s
dW1uQ291bnQoc3R5bGUoKSkpOworICAgIHVuc2lnbmVkIG1heGltdW1Sb3dJbmRleCA9IHN0ZDo6
bWF4PHVuc2lnbmVkPigxLCBHcmlkUG9zaXRpb25zUmVzb2x2ZXI6OmV4cGxpY2l0R3JpZFJvd0Nv
dW50KHN0eWxlKCkpKTsKKyAgICB1bnNpZ25lZCBtYXhpbXVtQ29sdW1uSW5kZXggPSBzdGQ6Om1h
eDx1bnNpZ25lZD4oMSwgR3JpZFBvc2l0aW9uc1Jlc29sdmVyOjpleHBsaWNpdEdyaWRDb2x1bW5D
b3VudChzdHlsZSgpKSk7CiAKICAgICBmb3IgKFJlbmRlckJveCogY2hpbGQgPSBmaXJzdENoaWxk
Qm94KCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZ0JveCgpKSB7CiAgICAgICAg
IGlmIChjaGlsZC0+aXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkpCkBAIC0xMjEyLDIzICsxMjEyLDIz
IEBAIHZvaWQgUmVuZGVyR3JpZDo6cG9wdWxhdGVFeHBsaWNpdEdyaWRBbmRPcmRlckl0ZXJhdG9y
KCkKIAogICAgICAgICBwb3B1bGF0b3IuY29sbGVjdENoaWxkKCpjaGlsZCk7CiAKLSAgICAgICAg
R3JpZFNwYW4gcm93UG9zaXRpb25zID0gR3JpZFJlc29sdmVkUG9zaXRpb246OnJlc29sdmVHcmlk
UG9zaXRpb25zRnJvbVN0eWxlKHN0eWxlKCksICpjaGlsZCwgRm9yUm93cyk7CisgICAgICAgIEdy
aWRTcGFuIHJvd1Bvc2l0aW9ucyA9IEdyaWRQb3NpdGlvbnNSZXNvbHZlcjo6cmVzb2x2ZUdyaWRQ
b3NpdGlvbnNGcm9tU3R5bGUoc3R5bGUoKSwgKmNoaWxkLCBGb3JSb3dzKTsKICAgICAgICAgaWYg
KCFyb3dQb3NpdGlvbnMuaXNJbmRlZmluaXRlKCkpIHsKICAgICAgICAgICAgIG1fc21hbGxlc3RS
b3dTdGFydCA9IHN0ZDo6bWluKG1fc21hbGxlc3RSb3dTdGFydCwgcm93UG9zaXRpb25zLnVudHJh
bnNsYXRlZFJlc29sdmVkSW5pdGlhbFBvc2l0aW9uKCkpOwogICAgICAgICAgICAgbWF4aW11bVJv
d0luZGV4ID0gc3RkOjptYXg8aW50PihtYXhpbXVtUm93SW5kZXgsIHJvd1Bvc2l0aW9ucy51bnRy
YW5zbGF0ZWRSZXNvbHZlZEZpbmFsUG9zaXRpb24oKSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAg
ICAgICAgICAvLyBHcm93IHRoZSBncmlkIGZvciBpdGVtcyB3aXRoIGEgZGVmaW5pdGUgcm93IHNw
YW4sIGdldHRpbmcgdGhlIGxhcmdlc3Qgc3VjaCBzcGFuLgotICAgICAgICAgICAgdW5zaWduZWQg
c3BhblNpemUgPSBHcmlkUmVzb2x2ZWRQb3NpdGlvbjo6c3BhblNpemVGb3JBdXRvUGxhY2VkSXRl
bShzdHlsZSgpLCAqY2hpbGQsIEZvclJvd3MpOworICAgICAgICAgICAgdW5zaWduZWQgc3BhblNp
emUgPSBHcmlkUG9zaXRpb25zUmVzb2x2ZXI6OnNwYW5TaXplRm9yQXV0b1BsYWNlZEl0ZW0oc3R5
bGUoKSwgKmNoaWxkLCBGb3JSb3dzKTsKICAgICAgICAgICAgIG1heGltdW1Sb3dJbmRleCA9IHN0
ZDo6bWF4KG1heGltdW1Sb3dJbmRleCwgc3BhblNpemUpOwogICAgICAgICB9CiAKLSAgICAgICAg
R3JpZFNwYW4gY29sdW1uUG9zaXRpb25zID0gR3JpZFJlc29sdmVkUG9zaXRpb246OnJlc29sdmVH
cmlkUG9zaXRpb25zRnJvbVN0eWxlKHN0eWxlKCksICpjaGlsZCwgRm9yQ29sdW1ucyk7CisgICAg
ICAgIEdyaWRTcGFuIGNvbHVtblBvc2l0aW9ucyA9IEdyaWRQb3NpdGlvbnNSZXNvbHZlcjo6cmVz
b2x2ZUdyaWRQb3NpdGlvbnNGcm9tU3R5bGUoc3R5bGUoKSwgKmNoaWxkLCBGb3JDb2x1bW5zKTsK
ICAgICAgICAgaWYgKCFjb2x1bW5Qb3NpdGlvbnMuaXNJbmRlZmluaXRlKCkpIHsKICAgICAgICAg
ICAgIG1fc21hbGxlc3RDb2x1bW5TdGFydCA9IHN0ZDo6bWluKG1fc21hbGxlc3RDb2x1bW5TdGFy
dCwgY29sdW1uUG9zaXRpb25zLnVudHJhbnNsYXRlZFJlc29sdmVkSW5pdGlhbFBvc2l0aW9uKCkp
OwogICAgICAgICAgICAgbWF4aW11bUNvbHVtbkluZGV4ID0gc3RkOjptYXg8aW50PihtYXhpbXVt
Q29sdW1uSW5kZXgsIGNvbHVtblBvc2l0aW9ucy51bnRyYW5zbGF0ZWRSZXNvbHZlZEZpbmFsUG9z
aXRpb24oKSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAvLyBHcm93IHRoZSBncmlk
IGZvciBpdGVtcyB3aXRoIGEgZGVmaW5pdGUgY29sdW1uIHNwYW4sIGdldHRpbmcgdGhlIGxhcmdl
c3Qgc3VjaCBzcGFuLgotICAgICAgICAgICAgdW5zaWduZWQgc3BhblNpemUgPSBHcmlkUmVzb2x2
ZWRQb3NpdGlvbjo6c3BhblNpemVGb3JBdXRvUGxhY2VkSXRlbShzdHlsZSgpLCAqY2hpbGQsIEZv
ckNvbHVtbnMpOworICAgICAgICAgICAgdW5zaWduZWQgc3BhblNpemUgPSBHcmlkUG9zaXRpb25z
UmVzb2x2ZXI6OnNwYW5TaXplRm9yQXV0b1BsYWNlZEl0ZW0oc3R5bGUoKSwgKmNoaWxkLCBGb3JD
b2x1bW5zKTsKICAgICAgICAgICAgIG1heGltdW1Db2x1bW5JbmRleCA9IHN0ZDo6bWF4KG1heGlt
dW1Db2x1bW5JbmRleCwgc3BhblNpemUpOwogICAgICAgICB9CiAKQEAgLTEyNDQsNyArMTI0NCw3
IEBAIHN0ZDo6dW5pcXVlX3B0cjxHcmlkQ29vcmRpbmF0ZT4gUmVuZGVyR3JpZDo6Y3JlYXRlRW1w
dHlHcmlkQXJlYUF0U3BlY2lmaWVkUG9zaXRpCiB7CiAgICAgR3JpZFRyYWNrU2l6aW5nRGlyZWN0
aW9uIGNyb3NzRGlyZWN0aW9uID0gc3BlY2lmaWVkRGlyZWN0aW9uID09IEZvckNvbHVtbnMgPyBG
b3JSb3dzIDogRm9yQ29sdW1uczsKICAgICBjb25zdCB1bnNpZ25lZCBlbmRPZkNyb3NzRGlyZWN0
aW9uID0gY3Jvc3NEaXJlY3Rpb24gPT0gRm9yQ29sdW1ucyA/IGdyaWRDb2x1bW5Db3VudCgpIDog
Z3JpZFJvd0NvdW50KCk7Ci0gICAgdW5zaWduZWQgY3Jvc3NEaXJlY3Rpb25TcGFuU2l6ZSA9IEdy
aWRSZXNvbHZlZFBvc2l0aW9uOjpzcGFuU2l6ZUZvckF1dG9QbGFjZWRJdGVtKHN0eWxlKCksIGdy
aWRJdGVtLCBjcm9zc0RpcmVjdGlvbik7CisgICAgdW5zaWduZWQgY3Jvc3NEaXJlY3Rpb25TcGFu
U2l6ZSA9IEdyaWRQb3NpdGlvbnNSZXNvbHZlcjo6c3BhblNpemVGb3JBdXRvUGxhY2VkSXRlbShz
dHlsZSgpLCBncmlkSXRlbSwgY3Jvc3NEaXJlY3Rpb24pOwogICAgIEdyaWRTcGFuIGNyb3NzRGly
ZWN0aW9uUG9zaXRpb25zID0gR3JpZFNwYW46OnRyYW5zbGF0ZWREZWZpbml0ZUdyaWRTcGFuKGVu
ZE9mQ3Jvc3NEaXJlY3Rpb24sIGVuZE9mQ3Jvc3NEaXJlY3Rpb24gKyBjcm9zc0RpcmVjdGlvblNw
YW5TaXplKTsKICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxHcmlkQ29vcmRpbmF0ZT4oc3Bl
Y2lmaWVkRGlyZWN0aW9uID09IEZvckNvbHVtbnMgPyBjcm9zc0RpcmVjdGlvblBvc2l0aW9ucyA6
IHNwZWNpZmllZFBvc2l0aW9ucywgc3BlY2lmaWVkRGlyZWN0aW9uID09IEZvckNvbHVtbnMgPyBz
cGVjaWZpZWRQb3NpdGlvbnMgOiBjcm9zc0RpcmVjdGlvblBvc2l0aW9ucyk7CiB9CkBAIC0xMjYz
LDcgKzEyNjMsNyBAQCB2b2lkIFJlbmRlckdyaWQ6OnBsYWNlU3BlY2lmaWVkTWFqb3JBeGlzSXRl
bXNPbkdyaWQoY29uc3QgVmVjdG9yPFJlbmRlckJveCo+JiBhdQogICAgICAgICBHcmlkU3BhbiBt
YWpvckF4aXNQb3NpdGlvbnMgPSBjYWNoZWRHcmlkU3BhbigqYXV0b0dyaWRJdGVtLCBhdXRvUGxh
Y2VtZW50TWFqb3JBeGlzRGlyZWN0aW9uKCkpOwogICAgICAgICBBU1NFUlQobWFqb3JBeGlzUG9z
aXRpb25zLmlzVHJhbnNsYXRlZERlZmluaXRlKCkpOwogICAgICAgICBBU1NFUlQoY2FjaGVkR3Jp
ZFNwYW4oKmF1dG9HcmlkSXRlbSwgYXV0b1BsYWNlbWVudE1pbm9yQXhpc0RpcmVjdGlvbigpKS5p
c0luZGVmaW5pdGUoKSk7Ci0gICAgICAgIHVuc2lnbmVkIG1pbm9yQXhpc1NwYW5TaXplID0gR3Jp
ZFJlc29sdmVkUG9zaXRpb246OnNwYW5TaXplRm9yQXV0b1BsYWNlZEl0ZW0oc3R5bGUoKSwgKmF1
dG9HcmlkSXRlbSwgYXV0b1BsYWNlbWVudE1pbm9yQXhpc0RpcmVjdGlvbigpKTsKKyAgICAgICAg
dW5zaWduZWQgbWlub3JBeGlzU3BhblNpemUgPSBHcmlkUG9zaXRpb25zUmVzb2x2ZXI6OnNwYW5T
aXplRm9yQXV0b1BsYWNlZEl0ZW0oc3R5bGUoKSwgKmF1dG9HcmlkSXRlbSwgYXV0b1BsYWNlbWVu
dE1pbm9yQXhpc0RpcmVjdGlvbigpKTsKICAgICAgICAgdW5zaWduZWQgbWFqb3JBeGlzSW5pdGlh
bFBvc2l0aW9uID0gbWFqb3JBeGlzUG9zaXRpb25zLnJlc29sdmVkSW5pdGlhbFBvc2l0aW9uKCk7
CiAKICAgICAgICAgR3JpZEl0ZXJhdG9yIGl0ZXJhdG9yKG1fZ3JpZCwgYXV0b1BsYWNlbWVudE1h
am9yQXhpc0RpcmVjdGlvbigpLCBtYWpvckF4aXNQb3NpdGlvbnMucmVzb2x2ZWRJbml0aWFsUG9z
aXRpb24oKSwgaXNHcmlkQXV0b0Zsb3dEZW5zZSA/IDAgOiBtaW5vckF4aXNDdXJzb3JzLmdldCht
YWpvckF4aXNJbml0aWFsUG9zaXRpb24pKTsKQEAgLTEyOTcsNyArMTI5Nyw3IEBAIHZvaWQgUmVu
ZGVyR3JpZDo6cGxhY2VBdXRvTWFqb3JBeGlzSXRlbXNPbkdyaWQoY29uc3QgVmVjdG9yPFJlbmRl
ckJveCo+JiBhdXRvR3JpCiB2b2lkIFJlbmRlckdyaWQ6OnBsYWNlQXV0b01ham9yQXhpc0l0ZW1P
bkdyaWQoUmVuZGVyQm94JiBncmlkSXRlbSwgQXV0b1BsYWNlbWVudEN1cnNvciYgYXV0b1BsYWNl
bWVudEN1cnNvcikKIHsKICAgICBBU1NFUlQoY2FjaGVkR3JpZFNwYW4oZ3JpZEl0ZW0sIGF1dG9Q
bGFjZW1lbnRNYWpvckF4aXNEaXJlY3Rpb24oKSkuaXNJbmRlZmluaXRlKCkpOwotICAgIHVuc2ln
bmVkIG1ham9yQXhpc1NwYW5TaXplID0gR3JpZFJlc29sdmVkUG9zaXRpb246OnNwYW5TaXplRm9y
QXV0b1BsYWNlZEl0ZW0oc3R5bGUoKSwgZ3JpZEl0ZW0sIGF1dG9QbGFjZW1lbnRNYWpvckF4aXNE
aXJlY3Rpb24oKSk7CisgICAgdW5zaWduZWQgbWFqb3JBeGlzU3BhblNpemUgPSBHcmlkUG9zaXRp
b25zUmVzb2x2ZXI6OnNwYW5TaXplRm9yQXV0b1BsYWNlZEl0ZW0oc3R5bGUoKSwgZ3JpZEl0ZW0s
IGF1dG9QbGFjZW1lbnRNYWpvckF4aXNEaXJlY3Rpb24oKSk7CiAKICAgICBjb25zdCB1bnNpZ25l
ZCBlbmRPZk1ham9yQXhpcyA9IChhdXRvUGxhY2VtZW50TWFqb3JBeGlzRGlyZWN0aW9uKCkgPT0g
Rm9yQ29sdW1ucykgPyBncmlkQ29sdW1uQ291bnQoKSA6IGdyaWRSb3dDb3VudCgpOwogICAgIHVu
c2lnbmVkIG1ham9yQXhpc0F1dG9QbGFjZW1lbnRDdXJzb3IgPSBhdXRvUGxhY2VtZW50TWFqb3JB
eGlzRGlyZWN0aW9uKCkgPT0gRm9yQ29sdW1ucyA/IGF1dG9QbGFjZW1lbnRDdXJzb3Iuc2Vjb25k
IDogYXV0b1BsYWNlbWVudEN1cnNvci5maXJzdDsKQEAgLTEzMTgsNyArMTMxOCw3IEBAIHZvaWQg
UmVuZGVyR3JpZDo6cGxhY2VBdXRvTWFqb3JBeGlzSXRlbU9uR3JpZChSZW5kZXJCb3gmIGdyaWRJ
dGVtLCBBdXRvUGxhY2VtZW50CiAgICAgICAgIGlmICghZW1wdHlHcmlkQXJlYSkKICAgICAgICAg
ICAgIGVtcHR5R3JpZEFyZWEgPSBjcmVhdGVFbXB0eUdyaWRBcmVhQXRTcGVjaWZpZWRQb3NpdGlv
bnNPdXRzaWRlR3JpZChncmlkSXRlbSwgYXV0b1BsYWNlbWVudE1pbm9yQXhpc0RpcmVjdGlvbigp
LCBtaW5vckF4aXNQb3NpdGlvbnMpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIHVuc2lnbmVkIG1p
bm9yQXhpc1NwYW5TaXplID0gR3JpZFJlc29sdmVkUG9zaXRpb246OnNwYW5TaXplRm9yQXV0b1Bs
YWNlZEl0ZW0oc3R5bGUoKSwgZ3JpZEl0ZW0sIGF1dG9QbGFjZW1lbnRNaW5vckF4aXNEaXJlY3Rp
b24oKSk7CisgICAgICAgIHVuc2lnbmVkIG1pbm9yQXhpc1NwYW5TaXplID0gR3JpZFBvc2l0aW9u
c1Jlc29sdmVyOjpzcGFuU2l6ZUZvckF1dG9QbGFjZWRJdGVtKHN0eWxlKCksIGdyaWRJdGVtLCBh
dXRvUGxhY2VtZW50TWlub3JBeGlzRGlyZWN0aW9uKCkpOwogCiAgICAgICAgIGZvciAodW5zaWdu
ZWQgbWFqb3JBeGlzSW5kZXggPSBtYWpvckF4aXNBdXRvUGxhY2VtZW50Q3Vyc29yOyBtYWpvckF4
aXNJbmRleCA8IGVuZE9mTWFqb3JBeGlzOyArK21ham9yQXhpc0luZGV4KSB7CiAgICAgICAgICAg
ICBHcmlkSXRlcmF0b3IgaXRlcmF0b3IobV9ncmlkLCBhdXRvUGxhY2VtZW50TWFqb3JBeGlzRGly
ZWN0aW9uKCksIG1ham9yQXhpc0luZGV4LCBtaW5vckF4aXNBdXRvUGxhY2VtZW50Q3Vyc29yKTsK
QEAgLTE0ODYsNyArMTQ4Niw3IEBAIHZvaWQgUmVuZGVyR3JpZDo6b2Zmc2V0QW5kQnJlYWR0aEZv
clBvc2l0aW9uZWRDaGlsZChjb25zdCBSZW5kZXJCb3gmIGNoaWxkLCBHcmlkCiAgICAgQVNTRVJU
KGNoaWxkLmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPT0gaXNIb3Jpem9udGFsV3JpdGluZ01v
ZGUoKSk7CiAgICAgYm9vbCBpc1Jvd0F4aXMgPSBkaXJlY3Rpb24gPT0gRm9yQ29sdW1uczsKIAot
ICAgIEdyaWRTcGFuIHBvc2l0aW9ucyA9IEdyaWRSZXNvbHZlZFBvc2l0aW9uOjpyZXNvbHZlR3Jp
ZFBvc2l0aW9uc0Zyb21TdHlsZShzdHlsZSgpLCBjaGlsZCwgZGlyZWN0aW9uKTsKKyAgICBHcmlk
U3BhbiBwb3NpdGlvbnMgPSBHcmlkUG9zaXRpb25zUmVzb2x2ZXI6OnJlc29sdmVHcmlkUG9zaXRp
b25zRnJvbVN0eWxlKHN0eWxlKCksIGNoaWxkLCBkaXJlY3Rpb24pOwogICAgIGlmIChwb3NpdGlv
bnMuaXNJbmRlZmluaXRlKCkpIHsKICAgICAgICAgb2Zmc2V0ID0gTGF5b3V0VW5pdCgpOwogICAg
ICAgICBicmVhZHRoID0gaXNSb3dBeGlzID8gY2xpZW50TG9naWNhbFdpZHRoKCkgOiBjbGllbnRM
b2dpY2FsSGVpZ2h0KCk7CkBAIC0xNTAxLDE0ICsxNTAxLDE0IEBAIHZvaWQgUmVuZGVyR3JpZDo6
b2Zmc2V0QW5kQnJlYWR0aEZvclBvc2l0aW9uZWRDaGlsZChjb25zdCBSZW5kZXJCb3gmIGNoaWxk
LCBHcmlkCiAgICAgR3JpZFBvc2l0aW9uIHN0YXJ0UG9zaXRpb24gPSBpc1Jvd0F4aXMgPyBjaGls
ZC5zdHlsZSgpLmdyaWRJdGVtQ29sdW1uU3RhcnQoKSA6IGNoaWxkLnN0eWxlKCkuZ3JpZEl0ZW1S
b3dTdGFydCgpOwogICAgIEdyaWRQb3NpdGlvbiBlbmRQb3NpdGlvbiA9IGlzUm93QXhpcyA/IGNo
aWxkLnN0eWxlKCkuZ3JpZEl0ZW1Db2x1bW5FbmQoKSA6IGNoaWxkLnN0eWxlKCkuZ3JpZEl0ZW1S
b3dFbmQoKTsKICAgICBpbnQgZmlyc3RFeHBsaWNpdExpbmUgPSBzbWFsbGVzdFN0YXJ0OwotICAg
IGludCBsYXN0RXhwbGljaXRMaW5lID0gKGlzUm93QXhpcyA/IEdyaWRSZXNvbHZlZFBvc2l0aW9u
OjpleHBsaWNpdEdyaWRDb2x1bW5Db3VudChzdHlsZSgpKSA6IEdyaWRSZXNvbHZlZFBvc2l0aW9u
OjpleHBsaWNpdEdyaWRSb3dDb3VudChzdHlsZSgpKSkgKyBzbWFsbGVzdFN0YXJ0OworICAgIGlu
dCBsYXN0RXhwbGljaXRMaW5lID0gKGlzUm93QXhpcyA/IEdyaWRQb3NpdGlvbnNSZXNvbHZlcjo6
ZXhwbGljaXRHcmlkQ29sdW1uQ291bnQoc3R5bGUoKSkgOiBHcmlkUG9zaXRpb25zUmVzb2x2ZXI6
OmV4cGxpY2l0R3JpZFJvd0NvdW50KHN0eWxlKCkpKSArIHNtYWxsZXN0U3RhcnQ7CiAKICAgICBi
b29sIHN0YXJ0SXNBdXRvID0gc3RhcnRQb3NpdGlvbi5pc0F1dG8oKQotICAgICAgICB8fCAoc3Rh
cnRQb3NpdGlvbi5pc05hbWVkR3JpZEFyZWEoKSAmJiBHcmlkUmVzb2x2ZWRQb3NpdGlvbjo6aXNO
b25FeGlzdGVudE5hbWVkTGluZU9yQXJlYShzdGFydFBvc2l0aW9uLm5hbWVkR3JpZExpbmUoKSwg
c3R5bGUoKSwgKGRpcmVjdGlvbiA9PSBGb3JDb2x1bW5zKSA/IENvbHVtblN0YXJ0U2lkZSA6IFJv
d1N0YXJ0U2lkZSkpCisgICAgICAgIHx8IChzdGFydFBvc2l0aW9uLmlzTmFtZWRHcmlkQXJlYSgp
ICYmIEdyaWRQb3NpdGlvbnNSZXNvbHZlcjo6aXNOb25FeGlzdGVudE5hbWVkTGluZU9yQXJlYShz
dGFydFBvc2l0aW9uLm5hbWVkR3JpZExpbmUoKSwgc3R5bGUoKSwgKGRpcmVjdGlvbiA9PSBGb3JD
b2x1bW5zKSA/IENvbHVtblN0YXJ0U2lkZSA6IFJvd1N0YXJ0U2lkZSkpCiAgICAgICAgIHx8IChy
ZXNvbHZlZEluaXRpYWxQb3NpdGlvbiA8IGZpcnN0RXhwbGljaXRMaW5lKQogICAgICAgICB8fCAo
cmVzb2x2ZWRJbml0aWFsUG9zaXRpb24gPiBsYXN0RXhwbGljaXRMaW5lKTsKICAgICBib29sIGVu
ZElzQXV0byA9IGVuZFBvc2l0aW9uLmlzQXV0bygpCi0gICAgICAgIHx8IChlbmRQb3NpdGlvbi5p
c05hbWVkR3JpZEFyZWEoKSAmJiBHcmlkUmVzb2x2ZWRQb3NpdGlvbjo6aXNOb25FeGlzdGVudE5h
bWVkTGluZU9yQXJlYShlbmRQb3NpdGlvbi5uYW1lZEdyaWRMaW5lKCksIHN0eWxlKCksIChkaXJl
Y3Rpb24gPT0gRm9yQ29sdW1ucykgPyBDb2x1bW5FbmRTaWRlIDogUm93RW5kU2lkZSkpCisgICAg
ICAgIHx8IChlbmRQb3NpdGlvbi5pc05hbWVkR3JpZEFyZWEoKSAmJiBHcmlkUG9zaXRpb25zUmVz
b2x2ZXI6OmlzTm9uRXhpc3RlbnROYW1lZExpbmVPckFyZWEoZW5kUG9zaXRpb24ubmFtZWRHcmlk
TGluZSgpLCBzdHlsZSgpLCAoZGlyZWN0aW9uID09IEZvckNvbHVtbnMpID8gQ29sdW1uRW5kU2lk
ZSA6IFJvd0VuZFNpZGUpKQogICAgICAgICB8fCAocmVzb2x2ZWRGaW5hbFBvc2l0aW9uIDwgZmly
c3RFeHBsaWNpdExpbmUpCiAgICAgICAgIHx8IChyZXNvbHZlZEZpbmFsUG9zaXRpb24gPiBsYXN0
RXhwbGljaXRMaW5lKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckdyaWQuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJHcmlkLmgKaW5kZXgg
YTNkMThlZmVhYzU0MTgxYjFjZjM5MjYxMjRhZjc0MjQwYWFiMTFlZC4uNzUyNjQ1ZGZhMWNkZDk2
NDA4ZTZmZjM1OWEyN2E3YWE0Yjc0NjU3MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckdyaWQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
R3JpZC5oCkBAIC0yOSw3ICsyOSw3IEBACiAKICNpZiBFTkFCTEUoQ1NTX0dSSURfTEFZT1VUKQog
Ci0jaW5jbHVkZSAiR3JpZFJlc29sdmVkUG9zaXRpb24uaCIKKyNpbmNsdWRlICJHcmlkUG9zaXRp
b25zUmVzb2x2ZXIuaCIKICNpbmNsdWRlICJPcmRlckl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiUmVu
ZGVyQmxvY2suaCIKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxl
L0dyaWRDb29yZGluYXRlLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvR3JpZENv
b3JkaW5hdGUuaAppbmRleCAwNjVkNzRhNjI1ODY4MDViYjUxZDIxNjI3NGY2Y2ExNTkyMTgyYjIy
Li5hYjBhM2Y5ZGMyM2QwNjNjZDdlNTg5MWY5N2NkNzNiNGIzNmFjZGUxIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvR3JpZENvb3JkaW5hdGUuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvR3JpZENvb3JkaW5hdGUuaApAQCAtMzQsNyArMzQs
NyBAQAogCiAjaWYgRU5BQkxFKENTU19HUklEX0xBWU9VVCkKIAotI2luY2x1ZGUgIkdyaWRSZXNv
bHZlZFBvc2l0aW9uLmgiCisjaW5jbHVkZSAiR3JpZFBvc2l0aW9uc1Jlc29sdmVyLmgiCiAjaW5j
bHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL0dyaWRQb3NpdGlvbnNS
ZXNvbHZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvR3JpZFBvc2l0aW9u
c1Jlc29sdmVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45NTczYjY3ZWM2MTRiMGQxYzJjNzUyOGNkN2I4NGJh
NGY4OWNhZjkzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0
eWxlL0dyaWRQb3NpdGlvbnNSZXNvbHZlci5jcHAKQEAgLTAsMCArMSwzMzQgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQtMjAxNiBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAg
KiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisg
KiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisg
KiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJHcmlkUG9zaXRpb25zUmVzb2x2ZXIuaCIKKworI2lmIEVOQUJMRShDU1NfR1JJRF9MQVlP
VVQpCisKKyNpbmNsdWRlICJHcmlkQ29vcmRpbmF0ZS5oIgorI2luY2x1ZGUgIlJlbmRlckJveC5o
IgorI2luY2x1ZGUgPGNzdGRsaWI+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGlu
bGluZSBib29sIGlzQ29sdW1uU2lkZShHcmlkUG9zaXRpb25TaWRlIHNpZGUpCit7CisgICAgcmV0
dXJuIHNpZGUgPT0gQ29sdW1uU3RhcnRTaWRlIHx8IHNpZGUgPT0gQ29sdW1uRW5kU2lkZTsKK30K
Kworc3RhdGljIGlubGluZSBib29sIGlzU3RhcnRTaWRlKEdyaWRQb3NpdGlvblNpZGUgc2lkZSkK
K3sKKyAgICByZXR1cm4gc2lkZSA9PSBDb2x1bW5TdGFydFNpZGUgfHwgc2lkZSA9PSBSb3dTdGFy
dFNpZGU7Cit9CisKK3N0YXRpYyBpbmxpbmUgR3JpZFBvc2l0aW9uU2lkZSBpbml0aWFsUG9zaXRp
b25TaWRlKEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbiBkaXJlY3Rpb24pCit7CisgICAgcmV0dXJu
IGRpcmVjdGlvbiA9PSBGb3JDb2x1bW5zID8gQ29sdW1uU3RhcnRTaWRlIDogUm93U3RhcnRTaWRl
OworfQorCitzdGF0aWMgaW5saW5lIEdyaWRQb3NpdGlvblNpZGUgZmluYWxQb3NpdGlvblNpZGUo
R3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uIGRpcmVjdGlvbikKK3sKKyAgICByZXR1cm4gZGlyZWN0
aW9uID09IEZvckNvbHVtbnMgPyBDb2x1bW5FbmRTaWRlIDogUm93RW5kU2lkZTsKK30KKworc3Rh
dGljIGNvbnN0IE5hbWVkR3JpZExpbmVzTWFwJiBncmlkTGluZXNGb3JTaWRlKGNvbnN0IFJlbmRl
clN0eWxlJiBzdHlsZSwgR3JpZFBvc2l0aW9uU2lkZSBzaWRlKQoreworICAgIHJldHVybiBpc0Nv
bHVtblNpZGUoc2lkZSkgPyBzdHlsZS5uYW1lZEdyaWRDb2x1bW5MaW5lcygpIDogc3R5bGUubmFt
ZWRHcmlkUm93TGluZXMoKTsKK30KKworc3RhdGljIGNvbnN0IFN0cmluZyBpbXBsaWNpdE5hbWVk
R3JpZExpbmVGb3JTaWRlKGNvbnN0IFN0cmluZyYgbGluZU5hbWUsIEdyaWRQb3NpdGlvblNpZGUg
c2lkZSkKK3sKKyAgICByZXR1cm4gbGluZU5hbWUgKyAoaXNTdGFydFNpZGUoc2lkZSkgPyAiLXN0
YXJ0IiA6ICItZW5kIik7Cit9CisKK2Jvb2wgR3JpZFBvc2l0aW9uc1Jlc29sdmVyOjppc05vbkV4
aXN0ZW50TmFtZWRMaW5lT3JBcmVhKGNvbnN0IFN0cmluZyYgbGluZU5hbWUsIGNvbnN0IFJlbmRl
clN0eWxlJiBzdHlsZSwgR3JpZFBvc2l0aW9uU2lkZSBzaWRlKQoreworICAgIGNvbnN0IE5hbWVk
R3JpZExpbmVzTWFwJiBncmlkTGluZU5hbWVzID0gZ3JpZExpbmVzRm9yU2lkZShzdHlsZSwgc2lk
ZSk7CisgICAgcmV0dXJuICFncmlkTGluZU5hbWVzLmNvbnRhaW5zKGltcGxpY2l0TmFtZWRHcmlk
TGluZUZvclNpZGUobGluZU5hbWUsIHNpZGUpKSAmJiAhZ3JpZExpbmVOYW1lcy5jb250YWlucyhs
aW5lTmFtZSk7Cit9CisKK3N0YXRpYyB2b2lkIGFkanVzdEdyaWRQb3NpdGlvbnNGcm9tU3R5bGUo
Y29uc3QgUmVuZGVyU3R5bGUmIGdyaWRDb250YWluZXJTdHlsZSwgY29uc3QgUmVuZGVyQm94JiBn
cmlkSXRlbSwgR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uIGRpcmVjdGlvbiwgR3JpZFBvc2l0aW9u
JiBpbml0aWFsUG9zaXRpb24sIEdyaWRQb3NpdGlvbiYgZmluYWxQb3NpdGlvbikKK3sKKyAgICBi
b29sIGlzRm9yQ29sdW1ucyA9IGRpcmVjdGlvbiA9PSBGb3JDb2x1bW5zOworICAgIGluaXRpYWxQ
b3NpdGlvbiA9IGlzRm9yQ29sdW1ucyA/IGdyaWRJdGVtLnN0eWxlKCkuZ3JpZEl0ZW1Db2x1bW5T
dGFydCgpIDogZ3JpZEl0ZW0uc3R5bGUoKS5ncmlkSXRlbVJvd1N0YXJ0KCk7CisgICAgZmluYWxQ
b3NpdGlvbiA9IGlzRm9yQ29sdW1ucyA/IGdyaWRJdGVtLnN0eWxlKCkuZ3JpZEl0ZW1Db2x1bW5F
bmQoKSA6IGdyaWRJdGVtLnN0eWxlKCkuZ3JpZEl0ZW1Sb3dFbmQoKTsKKworICAgIC8vIFdlIG11
c3QgaGFuZGxlIHRoZSBwbGFjZW1lbnQgZXJyb3IgaGFuZGxpbmcgY29kZSBoZXJlIGluc3RlYWQg
b2YgaW4gdGhlIFN0eWxlQWRqdXN0ZXIgYmVjYXVzZSB3ZSBkb24ndCB3YW50IHRvCisgICAgLy8g
b3ZlcndyaXRlIHRoZSBzcGVjaWZpZWQgdmFsdWVzLgorICAgIGlmIChpbml0aWFsUG9zaXRpb24u
aXNTcGFuKCkgJiYgZmluYWxQb3NpdGlvbi5pc1NwYW4oKSkKKyAgICAgICAgZmluYWxQb3NpdGlv
bi5zZXRBdXRvUG9zaXRpb24oKTsKKworICAgIGlmIChncmlkSXRlbS5pc091dE9mRmxvd1Bvc2l0
aW9uZWQoKSkgeworICAgICAgICAvLyBFYXJseSBkZXRlY3QgdGhlIGNhc2Ugb2Ygbm9uIGV4aXN0
aW5nIG5hbWVkIGdyaWQgbGluZXMgZm9yIHBvc2l0aW9uZWQgaXRlbXMuCisgICAgICAgIGlmIChp
bml0aWFsUG9zaXRpb24uaXNOYW1lZEdyaWRBcmVhKCkgJiYgR3JpZFBvc2l0aW9uc1Jlc29sdmVy
Ojppc05vbkV4aXN0ZW50TmFtZWRMaW5lT3JBcmVhKGluaXRpYWxQb3NpdGlvbi5uYW1lZEdyaWRM
aW5lKCksIGdyaWRDb250YWluZXJTdHlsZSwgaW5pdGlhbFBvc2l0aW9uU2lkZShkaXJlY3Rpb24p
KSkKKyAgICAgICAgICAgIGluaXRpYWxQb3NpdGlvbi5zZXRBdXRvUG9zaXRpb24oKTsKKworICAg
ICAgICBpZiAoZmluYWxQb3NpdGlvbi5pc05hbWVkR3JpZEFyZWEoKSAmJiBHcmlkUG9zaXRpb25z
UmVzb2x2ZXI6OmlzTm9uRXhpc3RlbnROYW1lZExpbmVPckFyZWEoZmluYWxQb3NpdGlvbi5uYW1l
ZEdyaWRMaW5lKCksIGdyaWRDb250YWluZXJTdHlsZSwgZmluYWxQb3NpdGlvblNpZGUoZGlyZWN0
aW9uKSkpCisgICAgICAgICAgICBmaW5hbFBvc2l0aW9uLnNldEF1dG9Qb3NpdGlvbigpOworICAg
IH0KKworICAgIC8vIElmIHRoZSBncmlkIGl0ZW0gaGFzIGFuIGF1dG9tYXRpYyBwb3NpdGlvbiBh
bmQgYSBncmlkIHNwYW4gZm9yIGEgbmFtZWQgbGluZSBpbiBhIGdpdmVuIGRpbWVuc2lvbiwgaW5z
dGVhZCB0cmVhdCB0aGUgZ3JpZCBzcGFuIGFzIG9uZS4KKyAgICBpZiAoaW5pdGlhbFBvc2l0aW9u
LmlzQXV0bygpICYmIGZpbmFsUG9zaXRpb24uaXNTcGFuKCkgJiYgIWZpbmFsUG9zaXRpb24ubmFt
ZWRHcmlkTGluZSgpLmlzTnVsbCgpKQorICAgICAgICBmaW5hbFBvc2l0aW9uLnNldFNwYW5Qb3Np
dGlvbigxLCBTdHJpbmcoKSk7CisgICAgaWYgKGZpbmFsUG9zaXRpb24uaXNBdXRvKCkgJiYgaW5p
dGlhbFBvc2l0aW9uLmlzU3BhbigpICYmICFpbml0aWFsUG9zaXRpb24ubmFtZWRHcmlkTGluZSgp
LmlzTnVsbCgpKQorICAgICAgICBpbml0aWFsUG9zaXRpb24uc2V0U3BhblBvc2l0aW9uKDEsIFN0
cmluZygpKTsKK30KKwordW5zaWduZWQgR3JpZFBvc2l0aW9uc1Jlc29sdmVyOjpleHBsaWNpdEdy
aWRDb2x1bW5Db3VudChjb25zdCBSZW5kZXJTdHlsZSYgZ3JpZENvbnRhaW5lclN0eWxlKQorewor
ICAgIHJldHVybiBzdGQ6Om1pbjx1bnNpZ25lZD4oZ3JpZENvbnRhaW5lclN0eWxlLmdyaWRDb2x1
bW5zKCkuc2l6ZSgpLCBrR3JpZE1heFRyYWNrcyk7Cit9CisKK3Vuc2lnbmVkIEdyaWRQb3NpdGlv
bnNSZXNvbHZlcjo6ZXhwbGljaXRHcmlkUm93Q291bnQoY29uc3QgUmVuZGVyU3R5bGUmIGdyaWRD
b250YWluZXJTdHlsZSkKK3sKKyAgICByZXR1cm4gc3RkOjptaW48dW5zaWduZWQ+KGdyaWRDb250
YWluZXJTdHlsZS5ncmlkUm93cygpLnNpemUoKSwga0dyaWRNYXhUcmFja3MpOworfQorCitzdGF0
aWMgdW5zaWduZWQgZXhwbGljaXRHcmlkU2l6ZUZvclNpZGUoY29uc3QgUmVuZGVyU3R5bGUmIGdy
aWRDb250YWluZXJTdHlsZSwgR3JpZFBvc2l0aW9uU2lkZSBzaWRlKQoreworICAgIHJldHVybiBp
c0NvbHVtblNpZGUoc2lkZSkgPyBHcmlkUG9zaXRpb25zUmVzb2x2ZXI6OmV4cGxpY2l0R3JpZENv
bHVtbkNvdW50KGdyaWRDb250YWluZXJTdHlsZSkgOiBHcmlkUG9zaXRpb25zUmVzb2x2ZXI6OmV4
cGxpY2l0R3JpZFJvd0NvdW50KGdyaWRDb250YWluZXJTdHlsZSk7Cit9CisKK3N0YXRpYyB1bnNp
Z25lZCBsb29rQWhlYWRGb3JOYW1lZEdyaWRMaW5lKGludCBzdGFydCwgdW5zaWduZWQgbnVtYmVy
T2ZMaW5lcywgY29uc3QgVmVjdG9yPHVuc2lnbmVkPiogbmFtZWRHcmlkTGluZXNJbmRleGVzLCB1
bnNpZ25lZCBncmlkTGFzdExpbmUpCit7CisgICAgQVNTRVJUKG51bWJlck9mTGluZXMpOworCisg
ICAgLy8gT25seSBpbXBsaWNpdCBsaW5lcyBvbiB0aGUgc2VhcmNoIGRpcmVjdGlvbiBhcmUgYXNz
dW1lZCB0byBoYXZlIHRoZSBnaXZlbiBuYW1lLCBzbyB3ZSBjYW4gc3RhcnQgdG8gbG9vayBmcm9t
IGZpcnN0IGxpbmUuCisgICAgLy8gU2VlOiBodHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcvY3NzLWdy
aWQvI2dyaWQtcGxhY2VtZW50LXNwYW4taW50CisgICAgdW5zaWduZWQgZW5kID0gc3RkOjptYXgo
c3RhcnQsIDApOworCisgICAgaWYgKCFuYW1lZEdyaWRMaW5lc0luZGV4ZXMpCisgICAgICAgIHJl
dHVybiBzdGQ6Om1heChlbmQsIGdyaWRMYXN0TGluZSArIDEpICsgbnVtYmVyT2ZMaW5lcyAtIDE7
CisKKyAgICBmb3IgKDsgbnVtYmVyT2ZMaW5lczsgKytlbmQpIHsKKyAgICAgICAgaWYgKGVuZCA+
IGdyaWRMYXN0TGluZSB8fCBuYW1lZEdyaWRMaW5lc0luZGV4ZXMtPmNvbnRhaW5zKGVuZCkpCisg
ICAgICAgICAgICBudW1iZXJPZkxpbmVzLS07CisgICAgfQorCisgICAgQVNTRVJUKGVuZCk7Cisg
ICAgcmV0dXJuIGVuZCAtIDE7Cit9CisKK3N0YXRpYyBpbnQgbG9va0JhY2tGb3JOYW1lZEdyaWRM
aW5lKGludCBlbmQsIHVuc2lnbmVkIG51bWJlck9mTGluZXMsIGNvbnN0IFZlY3Rvcjx1bnNpZ25l
ZD4qIG5hbWVkR3JpZExpbmVzSW5kZXhlcywgaW50IGdyaWRMYXN0TGluZSkKK3sKKyAgICBBU1NF
UlQobnVtYmVyT2ZMaW5lcyk7CisKKyAgICAvLyBPbmx5IGltcGxpY2l0IGxpbmVzIG9uIHRoZSBz
ZWFyY2ggZGlyZWN0aW9uIGFyZSBhc3N1bWVkIHRvIGhhdmUgdGhlIGdpdmVuIG5hbWUsIHNvIHdl
IGNhbiBzdGFydCB0byBsb29rIGZyb20gbGFzdCBsaW5lLgorICAgIC8vIFNlZTogaHR0cHM6Ly9k
cmFmdHMuY3Nzd2cub3JnL2Nzcy1ncmlkLyNncmlkLXBsYWNlbWVudC1zcGFuLWludAorICAgIGlu
dCBzdGFydCA9IHN0ZDo6bWluKGVuZCwgZ3JpZExhc3RMaW5lKTsKKworICAgIGlmICghbmFtZWRH
cmlkTGluZXNJbmRleGVzKQorICAgICAgICByZXR1cm4gc3RkOjptaW4oc3RhcnQsIC0xKSAtIG51
bWJlck9mTGluZXMgKyAxOworCisgICAgZm9yICg7IG51bWJlck9mTGluZXM7IC0tc3RhcnQpIHsK
KyAgICAgICAgaWYgKHN0YXJ0IDwgMCB8fCBuYW1lZEdyaWRMaW5lc0luZGV4ZXMtPmNvbnRhaW5z
KHN0YXRpY19jYXN0PHNpemVfdD4oc3RhcnQpKSkKKyAgICAgICAgICAgIG51bWJlck9mTGluZXMt
LTsKKyAgICB9CisKKyAgICByZXR1cm4gc3RhcnQgKyAxOworfQorCitzdGF0aWMgaW50IHJlc29s
dmVOYW1lZEdyaWRMaW5lUG9zaXRpb25Gcm9tU3R5bGUoY29uc3QgUmVuZGVyU3R5bGUmIGdyaWRD
b250YWluZXJTdHlsZSwgY29uc3QgR3JpZFBvc2l0aW9uJiBwb3NpdGlvbiwgR3JpZFBvc2l0aW9u
U2lkZSBzaWRlKQoreworICAgIEFTU0VSVCghcG9zaXRpb24ubmFtZWRHcmlkTGluZSgpLmlzTnVs
bCgpKTsKKworICAgIGNvbnN0IE5hbWVkR3JpZExpbmVzTWFwJiBncmlkTGluZXNOYW1lcyA9IGlz
Q29sdW1uU2lkZShzaWRlKSA/IGdyaWRDb250YWluZXJTdHlsZS5uYW1lZEdyaWRDb2x1bW5MaW5l
cygpIDogZ3JpZENvbnRhaW5lclN0eWxlLm5hbWVkR3JpZFJvd0xpbmVzKCk7CisgICAgYXV0byBp
dGVyYXRvciA9IGdyaWRMaW5lc05hbWVzLmZpbmQocG9zaXRpb24ubmFtZWRHcmlkTGluZSgpKTsK
KyAgICBjb25zdCBWZWN0b3I8dW5zaWduZWQ+KiBncmlkTGluZXMgPSBpdGVyYXRvciA9PSBncmlk
TGluZXNOYW1lcy5lbmQoKSA/IG51bGxwdHIgOiAmaXRlcmF0b3ItPnZhbHVlOworICAgIHVuc2ln
bmVkIGxhc3RMaW5lID0gZXhwbGljaXRHcmlkU2l6ZUZvclNpZGUoZ3JpZENvbnRhaW5lclN0eWxl
LCBzaWRlKTsKKyAgICBpZiAocG9zaXRpb24uaXNQb3NpdGl2ZSgpKQorICAgICAgICByZXR1cm4g
bG9va0FoZWFkRm9yTmFtZWRHcmlkTGluZSgwLCBzdGQ6OmFicyhwb3NpdGlvbi5pbnRlZ2VyUG9z
aXRpb24oKSksIGdyaWRMaW5lcywgbGFzdExpbmUpOworICAgIHJldHVybiBsb29rQmFja0Zvck5h
bWVkR3JpZExpbmUobGFzdExpbmUsIHN0ZDo6YWJzKHBvc2l0aW9uLmludGVnZXJQb3NpdGlvbigp
KSwgZ3JpZExpbmVzLCBsYXN0TGluZSk7Cit9CisKK3N0YXRpYyBHcmlkU3BhbiBkZWZpbml0ZUdy
aWRTcGFuV2l0aE5hbWVkTGluZVNwYW5BZ2FpbnN0T3Bwb3NpdGUoaW50IHJlc29sdmVkT3Bwb3Np
dGVQb3NpdGlvbiwgY29uc3QgR3JpZFBvc2l0aW9uJiBwb3NpdGlvbiwgR3JpZFBvc2l0aW9uU2lk
ZSBzaWRlLCBjb25zdCBWZWN0b3I8dW5zaWduZWQ+KiBncmlkTGluZXMsIHVuc2lnbmVkIGxhc3RM
aW5lKQoreworICAgIGludCBzdGFydCwgZW5kOworCisgICAgaWYgKHNpZGUgPT0gUm93U3RhcnRT
aWRlIHx8IHNpZGUgPT0gQ29sdW1uU3RhcnRTaWRlKSB7CisgICAgICAgIHN0YXJ0ID0gbG9va0Jh
Y2tGb3JOYW1lZEdyaWRMaW5lKHJlc29sdmVkT3Bwb3NpdGVQb3NpdGlvbiAtIDEsIHBvc2l0aW9u
LnNwYW5Qb3NpdGlvbigpLCBncmlkTGluZXMsIGxhc3RMaW5lKTsKKyAgICAgICAgZW5kID0gcmVz
b2x2ZWRPcHBvc2l0ZVBvc2l0aW9uOworICAgIH0gZWxzZSB7CisgICAgICAgIHN0YXJ0ID0gcmVz
b2x2ZWRPcHBvc2l0ZVBvc2l0aW9uOworICAgICAgICBlbmQgPSBsb29rQWhlYWRGb3JOYW1lZEdy
aWRMaW5lKHJlc29sdmVkT3Bwb3NpdGVQb3NpdGlvbiArIDEsIHBvc2l0aW9uLnNwYW5Qb3NpdGlv
bigpLCBncmlkTGluZXMsIGxhc3RMaW5lKTsKKyAgICB9CisKKyAgICByZXR1cm4gR3JpZFNwYW46
OnVudHJhbnNsYXRlZERlZmluaXRlR3JpZFNwYW4oc3RhcnQsIGVuZCk7Cit9CisKK3N0YXRpYyBH
cmlkU3BhbiByZXNvbHZlTmFtZWRHcmlkTGluZVBvc2l0aW9uQWdhaW5zdE9wcG9zaXRlUG9zaXRp
b24oY29uc3QgUmVuZGVyU3R5bGUmIGdyaWRDb250YWluZXJTdHlsZSwgaW50IHJlc29sdmVkT3Bw
b3NpdGVQb3NpdGlvbiwgY29uc3QgR3JpZFBvc2l0aW9uJiBwb3NpdGlvbiwgR3JpZFBvc2l0aW9u
U2lkZSBzaWRlKQoreworICAgIEFTU0VSVChwb3NpdGlvbi5pc1NwYW4oKSk7CisgICAgQVNTRVJU
KCFwb3NpdGlvbi5uYW1lZEdyaWRMaW5lKCkuaXNOdWxsKCkpOworICAgIC8vIE5lZ2F0aXZlIHBv
c2l0aW9ucyBhcmUgbm90IGFsbG93ZWQgcGVyIHRoZSBzcGVjaWZpY2F0aW9uIGFuZCBzaG91bGQg
aGF2ZSBiZWVuIGhhbmRsZWQgZHVyaW5nIHBhcnNpbmcuCisgICAgQVNTRVJUKHBvc2l0aW9uLnNw
YW5Qb3NpdGlvbigpID4gMCk7CisKKyAgICBjb25zdCBOYW1lZEdyaWRMaW5lc01hcCYgZ3JpZExp
bmVzTmFtZXMgPSBpc0NvbHVtblNpZGUoc2lkZSkgPyBncmlkQ29udGFpbmVyU3R5bGUubmFtZWRH
cmlkQ29sdW1uTGluZXMoKSA6IGdyaWRDb250YWluZXJTdHlsZS5uYW1lZEdyaWRSb3dMaW5lcygp
OworICAgIGF1dG8gaXRlcmF0b3IgPSBncmlkTGluZXNOYW1lcy5maW5kKHBvc2l0aW9uLm5hbWVk
R3JpZExpbmUoKSk7CisgICAgY29uc3QgVmVjdG9yPHVuc2lnbmVkPiogZ3JpZExpbmVzID0gaXRl
cmF0b3IgPT0gZ3JpZExpbmVzTmFtZXMuZW5kKCkgPyBudWxscHRyIDogJml0ZXJhdG9yLT52YWx1
ZTsKKyAgICB1bnNpZ25lZCBsYXN0TGluZSA9IGV4cGxpY2l0R3JpZFNpemVGb3JTaWRlKGdyaWRD
b250YWluZXJTdHlsZSwgc2lkZSk7CisKKyAgICByZXR1cm4gZGVmaW5pdGVHcmlkU3BhbldpdGhO
YW1lZExpbmVTcGFuQWdhaW5zdE9wcG9zaXRlKHJlc29sdmVkT3Bwb3NpdGVQb3NpdGlvbiwgcG9z
aXRpb24sIHNpZGUsIGdyaWRMaW5lcywgbGFzdExpbmUpOworfQorCitzdGF0aWMgR3JpZFNwYW4g
cmVzb2x2ZUdyaWRQb3NpdGlvbkFnYWluc3RPcHBvc2l0ZVBvc2l0aW9uKGNvbnN0IFJlbmRlclN0
eWxlJiBncmlkQ29udGFpbmVyU3R5bGUsIGludCByZXNvbHZlZE9wcG9zaXRlUG9zaXRpb24sIGNv
bnN0IEdyaWRQb3NpdGlvbiYgcG9zaXRpb24sIEdyaWRQb3NpdGlvblNpZGUgc2lkZSkKK3sKKyAg
ICBpZiAocG9zaXRpb24uaXNBdXRvKCkpIHsKKyAgICAgICAgaWYgKGlzU3RhcnRTaWRlKHNpZGUp
KQorICAgICAgICAgICAgcmV0dXJuIEdyaWRTcGFuOjp1bnRyYW5zbGF0ZWREZWZpbml0ZUdyaWRT
cGFuKHJlc29sdmVkT3Bwb3NpdGVQb3NpdGlvbiAtIDEsIHJlc29sdmVkT3Bwb3NpdGVQb3NpdGlv
bik7CisgICAgICAgIHJldHVybiBHcmlkU3Bhbjo6dW50cmFuc2xhdGVkRGVmaW5pdGVHcmlkU3Bh
bihyZXNvbHZlZE9wcG9zaXRlUG9zaXRpb24sIHJlc29sdmVkT3Bwb3NpdGVQb3NpdGlvbiArIDEp
OworICAgIH0KKworICAgIEFTU0VSVChwb3NpdGlvbi5pc1NwYW4oKSk7CisgICAgQVNTRVJUKHBv
c2l0aW9uLnNwYW5Qb3NpdGlvbigpID4gMCk7CisKKyAgICBpZiAoIXBvc2l0aW9uLm5hbWVkR3Jp
ZExpbmUoKS5pc051bGwoKSkgeworICAgICAgICAvLyBzcGFuIDIgJ2MnIC0+IHdlIG5lZWQgdG8g
ZmluZCB0aGUgYXBwcm9wcmlhdGUgZ3JpZCBsaW5lIGJlZm9yZSAvIGFmdGVyIG91ciBvcHBvc2l0
ZSBwb3NpdGlvbi4KKyAgICAgICAgcmV0dXJuIHJlc29sdmVOYW1lZEdyaWRMaW5lUG9zaXRpb25B
Z2FpbnN0T3Bwb3NpdGVQb3NpdGlvbihncmlkQ29udGFpbmVyU3R5bGUsIHJlc29sdmVkT3Bwb3Np
dGVQb3NpdGlvbiwgcG9zaXRpb24sIHNpZGUpOworICAgIH0KKworICAgIC8vICdzcGFuIDEnIGlz
IGNvbnRhaW5lZCBpbnNpZGUgYSBzaW5nbGUgZ3JpZCB0cmFjayByZWdhcmRsZXNzIG9mIHRoZSBk
aXJlY3Rpb24uCisgICAgLy8gVGhhdCdzIHdoeSB0aGUgQ1NTIHNwYW4gdmFsdWUgaXMgb25lIG1v
cmUgdGhhbiB0aGUgb2Zmc2V0IHdlIGFwcGx5LgorICAgIHVuc2lnbmVkIHBvc2l0aW9uT2Zmc2V0
ID0gcG9zaXRpb24uc3BhblBvc2l0aW9uKCk7CisgICAgaWYgKGlzU3RhcnRTaWRlKHNpZGUpKQor
ICAgICAgICByZXR1cm4gR3JpZFNwYW46OnVudHJhbnNsYXRlZERlZmluaXRlR3JpZFNwYW4ocmVz
b2x2ZWRPcHBvc2l0ZVBvc2l0aW9uIC0gcG9zaXRpb25PZmZzZXQsIHJlc29sdmVkT3Bwb3NpdGVQ
b3NpdGlvbik7CisKKyAgICByZXR1cm4gR3JpZFNwYW46OnVudHJhbnNsYXRlZERlZmluaXRlR3Jp
ZFNwYW4ocmVzb2x2ZWRPcHBvc2l0ZVBvc2l0aW9uLCByZXNvbHZlZE9wcG9zaXRlUG9zaXRpb24g
KyBwb3NpdGlvbk9mZnNldCk7Cit9CisKK3Vuc2lnbmVkIEdyaWRQb3NpdGlvbnNSZXNvbHZlcjo6
c3BhblNpemVGb3JBdXRvUGxhY2VkSXRlbShjb25zdCBSZW5kZXJTdHlsZSYgZ3JpZENvbnRhaW5l
clN0eWxlLCBjb25zdCBSZW5kZXJCb3gmIGdyaWRJdGVtLCBHcmlkVHJhY2tTaXppbmdEaXJlY3Rp
b24gZGlyZWN0aW9uKQoreworICAgIEdyaWRQb3NpdGlvbiBpbml0aWFsUG9zaXRpb24sIGZpbmFs
UG9zaXRpb247CisgICAgYWRqdXN0R3JpZFBvc2l0aW9uc0Zyb21TdHlsZShncmlkQ29udGFpbmVy
U3R5bGUsIGdyaWRJdGVtLCBkaXJlY3Rpb24sIGluaXRpYWxQb3NpdGlvbiwgZmluYWxQb3NpdGlv
bik7CisKKyAgICAvLyBUaGlzIG1ldGhvZCB3aWxsIG9ubHkgYmUgdXNlZCB3aGVuIGJvdGggcG9z
aXRpb25zIG5lZWQgdG8gYmUgcmVzb2x2ZWQgYWdhaW5zdCB0aGUgb3Bwb3NpdGUgb25lLgorICAg
IEFTU0VSVChpbml0aWFsUG9zaXRpb24uc2hvdWxkQmVSZXNvbHZlZEFnYWluc3RPcHBvc2l0ZVBv
c2l0aW9uKCkgJiYgZmluYWxQb3NpdGlvbi5zaG91bGRCZVJlc29sdmVkQWdhaW5zdE9wcG9zaXRl
UG9zaXRpb24oKSk7CisKKyAgICBpZiAoaW5pdGlhbFBvc2l0aW9uLmlzQXV0bygpICYmIGZpbmFs
UG9zaXRpb24uaXNBdXRvKCkpCisgICAgICAgIHJldHVybiAxOworCisgICAgR3JpZFBvc2l0aW9u
IHBvc2l0aW9uID0gaW5pdGlhbFBvc2l0aW9uLmlzU3BhbigpID8gaW5pdGlhbFBvc2l0aW9uIDog
ZmluYWxQb3NpdGlvbjsKKyAgICBBU1NFUlQocG9zaXRpb24uaXNTcGFuKCkpOworCisgICAgQVNT
RVJUKHBvc2l0aW9uLnNwYW5Qb3NpdGlvbigpKTsKKyAgICByZXR1cm4gcG9zaXRpb24uc3BhblBv
c2l0aW9uKCk7Cit9CisKK3N0YXRpYyBpbnQgcmVzb2x2ZUdyaWRQb3NpdGlvbkZyb21TdHlsZShj
b25zdCBSZW5kZXJTdHlsZSYgZ3JpZENvbnRhaW5lclN0eWxlLCBjb25zdCBHcmlkUG9zaXRpb24m
IHBvc2l0aW9uLCBHcmlkUG9zaXRpb25TaWRlIHNpZGUpCit7CisgICAgc3dpdGNoIChwb3NpdGlv
bi50eXBlKCkpIHsKKyAgICBjYXNlIEV4cGxpY2l0UG9zaXRpb246IHsKKyAgICAgICAgQVNTRVJU
KHBvc2l0aW9uLmludGVnZXJQb3NpdGlvbigpKTsKKworICAgICAgICBpZiAoIXBvc2l0aW9uLm5h
bWVkR3JpZExpbmUoKS5pc051bGwoKSkKKyAgICAgICAgICAgIHJldHVybiByZXNvbHZlTmFtZWRH
cmlkTGluZVBvc2l0aW9uRnJvbVN0eWxlKGdyaWRDb250YWluZXJTdHlsZSwgcG9zaXRpb24sIHNp
ZGUpOworCisgICAgICAgIC8vIEhhbmRsZSA8aW50ZWdlcj4gZXhwbGljaXQgcG9zaXRpb24uCisg
ICAgICAgIGlmIChwb3NpdGlvbi5pc1Bvc2l0aXZlKCkpCisgICAgICAgICAgICByZXR1cm4gcG9z
aXRpb24uaW50ZWdlclBvc2l0aW9uKCkgLSAxOworCisgICAgICAgIHVuc2lnbmVkIHJlc29sdmVk
UG9zaXRpb24gPSBzdGQ6OmFicyhwb3NpdGlvbi5pbnRlZ2VyUG9zaXRpb24oKSkgLSAxOworICAg
ICAgICBjb25zdCB1bnNpZ25lZCBlbmRPZlRyYWNrID0gZXhwbGljaXRHcmlkU2l6ZUZvclNpZGUo
Z3JpZENvbnRhaW5lclN0eWxlLCBzaWRlKTsKKworICAgICAgICByZXR1cm4gZW5kT2ZUcmFjayAt
IHJlc29sdmVkUG9zaXRpb247CisgICAgfQorICAgIGNhc2UgTmFtZWRHcmlkQXJlYVBvc2l0aW9u
OgorICAgIHsKKyAgICAgICAgLy8gRmlyc3QgYXR0ZW1wdCB0byBtYXRjaCB0aGUgZ3JpZCBhcmVh
J3MgZWRnZSB0byBhIG5hbWVkIGdyaWQgYXJlYTogaWYgdGhlcmUgaXMgYSBuYW1lZCBsaW5lIHdp
dGggdGhlIG5hbWUKKyAgICAgICAgLy8gJyc8Y3VzdG9tLWlkZW50Pi1zdGFydCAoZm9yIGdyaWQt
Ki1zdGFydCkgLyA8Y3VzdG9tLWlkZW50Pi1lbmQnJyAoZm9yIGdyaWQtKi1lbmQpLCBjb250cmli
dXRlcyB0aGUgZmlyc3Qgc3VjaAorICAgICAgICAvLyBsaW5lIHRvIHRoZSBncmlkIGl0ZW0ncyBw
bGFjZW1lbnQuCisgICAgICAgIFN0cmluZyBuYW1lZEdyaWRMaW5lID0gcG9zaXRpb24ubmFtZWRH
cmlkTGluZSgpOworICAgICAgICBBU1NFUlQoIXBvc2l0aW9uLm5hbWVkR3JpZExpbmUoKS5pc051
bGwoKSk7CisKKyAgICAgICAgY29uc3QgTmFtZWRHcmlkTGluZXNNYXAmIGdyaWRMaW5lTmFtZXMg
PSBncmlkTGluZXNGb3JTaWRlKGdyaWRDb250YWluZXJTdHlsZSwgc2lkZSk7CisgICAgICAgIGF1
dG8gaW1wbGljaXRMaW5lID0gZ3JpZExpbmVOYW1lcy5maW5kKGltcGxpY2l0TmFtZWRHcmlkTGlu
ZUZvclNpZGUobmFtZWRHcmlkTGluZSwgc2lkZSkpOworICAgICAgICBpZiAoaW1wbGljaXRMaW5l
ICE9IGdyaWRMaW5lTmFtZXMuZW5kKCkpCisgICAgICAgICAgICByZXR1cm4gaW1wbGljaXRMaW5l
LT52YWx1ZVswXTsKKworICAgICAgICAvLyBPdGhlcndpc2UsIGlmIHRoZXJlIGlzIGEgbmFtZWQg
bGluZSB3aXRoIHRoZSBzcGVjaWZpZWQgbmFtZSwgY29udHJpYnV0ZXMgdGhlIGZpcnN0IHN1Y2gg
bGluZSB0byB0aGUgZ3JpZAorICAgICAgICAvLyBpdGVtJ3MgcGxhY2VtZW50LgorICAgICAgICBh
dXRvIGV4cGxpY2l0TGluZSA9IGdyaWRMaW5lTmFtZXMuZmluZChuYW1lZEdyaWRMaW5lKTsKKyAg
ICAgICAgaWYgKGV4cGxpY2l0TGluZSAhPSBncmlkTGluZU5hbWVzLmVuZCgpKQorICAgICAgICAg
ICAgcmV0dXJuIGV4cGxpY2l0TGluZS0+dmFsdWVbMF07CisKKyAgICAgICAgQVNTRVJUKEdyaWRQ
b3NpdGlvbnNSZXNvbHZlcjo6aXNOb25FeGlzdGVudE5hbWVkTGluZU9yQXJlYShuYW1lZEdyaWRM
aW5lLCBncmlkQ29udGFpbmVyU3R5bGUsIHNpZGUpKTsKKyAgICAgICAgLy8gSWYgbm9uZSBvZiB0
aGUgYWJvdmUgd29ya3Mgc3BlY3MgbWFuZGF0ZSB0byBhc3N1bWUgdGhhdCBhbGwgdGhlIGxpbmVz
IGluIHRoZSBpbXBsaWNpdCBncmlkIGhhdmUgdGhpcyBuYW1lLgorICAgICAgICB1bnNpZ25lZCBs
YXN0TGluZSA9IGV4cGxpY2l0R3JpZFNpemVGb3JTaWRlKGdyaWRDb250YWluZXJTdHlsZSwgc2lk
ZSk7CisgICAgICAgIHJldHVybiBsYXN0TGluZSArIDE7CisgICAgfQorICAgIGNhc2UgQXV0b1Bv
c2l0aW9uOgorICAgIGNhc2UgU3BhblBvc2l0aW9uOgorICAgICAgICAvLyAnYXV0bycgYW5kIHNw
YW4gZGVwZW5kIG9uIHRoZSBvcHBvc2l0ZSBwb3NpdGlvbiBmb3IgcmVzb2x1dGlvbiAoZS5nLiBn
cmlkLXJvdzogYXV0byAvIDEgb3IgZ3JpZC1jb2x1bW46IHNwYW4gMyAvICJteUhlYWRlciIpLgor
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQor
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiAwOworfQorCitHcmlkU3BhbiBH
cmlkUG9zaXRpb25zUmVzb2x2ZXI6OnJlc29sdmVHcmlkUG9zaXRpb25zRnJvbVN0eWxlKGNvbnN0
IFJlbmRlclN0eWxlJiBncmlkQ29udGFpbmVyU3R5bGUsIGNvbnN0IFJlbmRlckJveCYgZ3JpZEl0
ZW0sIEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbiBkaXJlY3Rpb24pCit7CisgICAgR3JpZFBvc2l0
aW9uIGluaXRpYWxQb3NpdGlvbiwgZmluYWxQb3NpdGlvbjsKKyAgICBhZGp1c3RHcmlkUG9zaXRp
b25zRnJvbVN0eWxlKGdyaWRDb250YWluZXJTdHlsZSwgZ3JpZEl0ZW0sIGRpcmVjdGlvbiwgaW5p
dGlhbFBvc2l0aW9uLCBmaW5hbFBvc2l0aW9uKTsKKworICAgIEdyaWRQb3NpdGlvblNpZGUgaW5p
dGlhbFNpZGUgPSBpbml0aWFsUG9zaXRpb25TaWRlKGRpcmVjdGlvbik7CisgICAgR3JpZFBvc2l0
aW9uU2lkZSBmaW5hbFNpZGUgPSBmaW5hbFBvc2l0aW9uU2lkZShkaXJlY3Rpb24pOworCisgICAg
Ly8gV2UgY2FuJ3QgZ2V0IG91ciBncmlkIHBvc2l0aW9ucyB3aXRob3V0IHJ1bm5pbmcgdGhlIGF1
dG8gcGxhY2VtZW50IGFsZ29yaXRobS4KKyAgICBpZiAoaW5pdGlhbFBvc2l0aW9uLnNob3VsZEJl
UmVzb2x2ZWRBZ2FpbnN0T3Bwb3NpdGVQb3NpdGlvbigpICYmIGZpbmFsUG9zaXRpb24uc2hvdWxk
QmVSZXNvbHZlZEFnYWluc3RPcHBvc2l0ZVBvc2l0aW9uKCkpCisgICAgICAgIHJldHVybiBHcmlk
U3Bhbjo6aW5kZWZpbml0ZUdyaWRTcGFuKCk7CisKKyAgICBpZiAoaW5pdGlhbFBvc2l0aW9uLnNo
b3VsZEJlUmVzb2x2ZWRBZ2FpbnN0T3Bwb3NpdGVQb3NpdGlvbigpKSB7CisgICAgICAgIC8vIElu
ZmVyIHRoZSBwb3NpdGlvbiBmcm9tIHRoZSBmaW5hbCBwb3NpdGlvbiAoJ2F1dG8gLyAxJyBvciAn
c3BhbiAyIC8gMycgY2FzZSkuCisgICAgICAgIGF1dG8gZmluYWxSZXNvbHZlZFBvc2l0aW9uID0g
cmVzb2x2ZUdyaWRQb3NpdGlvbkZyb21TdHlsZShncmlkQ29udGFpbmVyU3R5bGUsIGZpbmFsUG9z
aXRpb24sIGZpbmFsU2lkZSk7CisgICAgICAgIHJldHVybiByZXNvbHZlR3JpZFBvc2l0aW9uQWdh
aW5zdE9wcG9zaXRlUG9zaXRpb24oZ3JpZENvbnRhaW5lclN0eWxlLCBmaW5hbFJlc29sdmVkUG9z
aXRpb24sIGluaXRpYWxQb3NpdGlvbiwgaW5pdGlhbFNpZGUpOworICAgIH0KKworICAgIGlmIChm
aW5hbFBvc2l0aW9uLnNob3VsZEJlUmVzb2x2ZWRBZ2FpbnN0T3Bwb3NpdGVQb3NpdGlvbigpKSB7
CisgICAgICAgIC8vIEluZmVyIG91ciBwb3NpdGlvbiBmcm9tIHRoZSBpbml0aWFsIHBvc2l0aW9u
ICgnMSAvIGF1dG8nIG9yICczIC8gc3BhbiAyJyBjYXNlKS4KKyAgICAgICAgYXV0byBpbml0aWFs
UmVzb2x2ZWRQb3NpdGlvbiA9IHJlc29sdmVHcmlkUG9zaXRpb25Gcm9tU3R5bGUoZ3JpZENvbnRh
aW5lclN0eWxlLCBpbml0aWFsUG9zaXRpb24sIGluaXRpYWxTaWRlKTsKKyAgICAgICAgcmV0dXJu
IHJlc29sdmVHcmlkUG9zaXRpb25BZ2FpbnN0T3Bwb3NpdGVQb3NpdGlvbihncmlkQ29udGFpbmVy
U3R5bGUsIGluaXRpYWxSZXNvbHZlZFBvc2l0aW9uLCBmaW5hbFBvc2l0aW9uLCBmaW5hbFNpZGUp
OworICAgIH0KKworICAgIGludCByZXNvbHZlZEluaXRpYWxQb3NpdGlvbiA9IHJlc29sdmVHcmlk
UG9zaXRpb25Gcm9tU3R5bGUoZ3JpZENvbnRhaW5lclN0eWxlLCBpbml0aWFsUG9zaXRpb24sIGlu
aXRpYWxTaWRlKTsKKyAgICBpbnQgcmVzb2x2ZWRGaW5hbFBvc2l0aW9uID0gcmVzb2x2ZUdyaWRQ
b3NpdGlvbkZyb21TdHlsZShncmlkQ29udGFpbmVyU3R5bGUsIGZpbmFsUG9zaXRpb24sIGZpbmFs
U2lkZSk7CisKKyAgICBpZiAocmVzb2x2ZWRJbml0aWFsUG9zaXRpb24gPiByZXNvbHZlZEZpbmFs
UG9zaXRpb24pCisgICAgICAgIHN0ZDo6c3dhcChyZXNvbHZlZEluaXRpYWxQb3NpdGlvbiwgcmVz
b2x2ZWRGaW5hbFBvc2l0aW9uKTsKKyAgICBlbHNlIGlmIChyZXNvbHZlZEluaXRpYWxQb3NpdGlv
biA9PSByZXNvbHZlZEZpbmFsUG9zaXRpb24pCisgICAgICAgIHJlc29sdmVkRmluYWxQb3NpdGlv
biA9IHJlc29sdmVkSW5pdGlhbFBvc2l0aW9uICsgMTsKKworICAgIHJldHVybiBHcmlkU3Bhbjo6
dW50cmFuc2xhdGVkRGVmaW5pdGVHcmlkU3BhbihyZXNvbHZlZEluaXRpYWxQb3NpdGlvbiwgc3Rk
OjptYXgocmVzb2x2ZWRJbml0aWFsUG9zaXRpb24sIHJlc29sdmVkRmluYWxQb3NpdGlvbikpOwor
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoQ1NTX0dSSURf
TEFZT1VUKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL0dyaWRQ
b3NpdGlvbnNSZXNvbHZlci5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL0dyaWRQ
b3NpdGlvbnNSZXNvbHZlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU4ZDBlYWNiN2FjNzQ5NTQ4OGYxMzYyMzA4
OGE0MzljODMzMTU0NjYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3R5bGUvR3JpZFBvc2l0aW9uc1Jlc29sdmVyLmgKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNC0yMDE2IElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAg
ICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
KyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBHcmlkUG9zaXRpb25zUmVz
b2x2ZXJfaAorI2RlZmluZSBHcmlkUG9zaXRpb25zUmVzb2x2ZXJfaAorCisjaWYgRU5BQkxFKENT
U19HUklEX0xBWU9VVCkKKworI2luY2x1ZGUgIkdyaWRQb3NpdGlvbi5oIgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2NsYXNzIEdyaWRTcGFuOworY2xhc3MgUmVuZGVyQm94OworY2xhc3MgUmVu
ZGVyU3R5bGU7CisKK2VudW0gR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uIHsKKyAgICBGb3JDb2x1
bW5zLAorICAgIEZvclJvd3MKK307CisKKy8vIENsYXNzIHdpdGggYWxsIHRoZSBjb2RlIHJlbGF0
ZWQgdG8gZ3JpZCBpdGVtcyBwb3NpdGlvbnMgcmVzb2x1dGlvbi4KK2NsYXNzIEdyaWRQb3NpdGlv
bnNSZXNvbHZlciB7CitwdWJsaWM6CisgICAgc3RhdGljIHVuc2lnbmVkIHNwYW5TaXplRm9yQXV0
b1BsYWNlZEl0ZW0oY29uc3QgUmVuZGVyU3R5bGUmLCBjb25zdCBSZW5kZXJCb3gmLCBHcmlkVHJh
Y2tTaXppbmdEaXJlY3Rpb24pOworICAgIHN0YXRpYyBHcmlkU3BhbiByZXNvbHZlR3JpZFBvc2l0
aW9uc0Zyb21TdHlsZShjb25zdCBSZW5kZXJTdHlsZSYsIGNvbnN0IFJlbmRlckJveCYsIEdyaWRU
cmFja1NpemluZ0RpcmVjdGlvbik7CisgICAgc3RhdGljIHVuc2lnbmVkIGV4cGxpY2l0R3JpZENv
bHVtbkNvdW50KGNvbnN0IFJlbmRlclN0eWxlJik7CisgICAgc3RhdGljIHVuc2lnbmVkIGV4cGxp
Y2l0R3JpZFJvd0NvdW50KGNvbnN0IFJlbmRlclN0eWxlJik7CisgICAgc3RhdGljIGJvb2wgaXNO
b25FeGlzdGVudE5hbWVkTGluZU9yQXJlYShjb25zdCBTdHJpbmcmIGxpbmVOYW1lLCBjb25zdCBS
ZW5kZXJTdHlsZSYsIEdyaWRQb3NpdGlvblNpZGUpOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCisjZW5kaWYgLy8gRU5BQkxFKENTU19HUklEX0xBWU9VVCkKKworI2VuZGlmIC8vIEdy
aWRQb3NpdGlvbnNSZXNvbHZlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3R5bGUvR3JpZFJlc29sdmVkUG9zaXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N0eWxlL0dyaWRSZXNvbHZlZFBvc2l0aW9uLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggM2NhYjU2Njk4YjIyNmFjNGRmYTg1ZTFlYmU3MzRiZmU2NWIxOTg0OC4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3R5bGUvR3JpZFJlc29sdmVkUG9zaXRpb24uY3BwCisrKyAvZGV2L251bGwKQEAg
LTEsMzM0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgSWdhbGlhIFMuTC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlz
dHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwot
ICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiR3JpZFJlc29sdmVkUG9zaXRpb24uaCIKLQotI2lmIEVO
QUJMRShDU1NfR1JJRF9MQVlPVVQpCi0KLSNpbmNsdWRlICJHcmlkQ29vcmRpbmF0ZS5oIgotI2lu
Y2x1ZGUgIlJlbmRlckJveC5oIgotI2luY2x1ZGUgPGNzdGRsaWI+Ci0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotc3RhdGljIGlubGluZSBib29sIGlzQ29sdW1uU2lkZShHcmlkUG9zaXRpb25TaWRl
IHNpZGUpCi17Ci0gICAgcmV0dXJuIHNpZGUgPT0gQ29sdW1uU3RhcnRTaWRlIHx8IHNpZGUgPT0g
Q29sdW1uRW5kU2lkZTsKLX0KLQotc3RhdGljIGlubGluZSBib29sIGlzU3RhcnRTaWRlKEdyaWRQ
b3NpdGlvblNpZGUgc2lkZSkKLXsKLSAgICByZXR1cm4gc2lkZSA9PSBDb2x1bW5TdGFydFNpZGUg
fHwgc2lkZSA9PSBSb3dTdGFydFNpZGU7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgR3JpZFBvc2l0aW9u
U2lkZSBpbml0aWFsUG9zaXRpb25TaWRlKEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbiBkaXJlY3Rp
b24pCi17Ci0gICAgcmV0dXJuIGRpcmVjdGlvbiA9PSBGb3JDb2x1bW5zID8gQ29sdW1uU3RhcnRT
aWRlIDogUm93U3RhcnRTaWRlOwotfQotCi1zdGF0aWMgaW5saW5lIEdyaWRQb3NpdGlvblNpZGUg
ZmluYWxQb3NpdGlvblNpZGUoR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uIGRpcmVjdGlvbikKLXsK
LSAgICByZXR1cm4gZGlyZWN0aW9uID09IEZvckNvbHVtbnMgPyBDb2x1bW5FbmRTaWRlIDogUm93
RW5kU2lkZTsKLX0KLQotc3RhdGljIGNvbnN0IE5hbWVkR3JpZExpbmVzTWFwJiBncmlkTGluZXNG
b3JTaWRlKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgR3JpZFBvc2l0aW9uU2lkZSBzaWRlKQot
ewotICAgIHJldHVybiBpc0NvbHVtblNpZGUoc2lkZSkgPyBzdHlsZS5uYW1lZEdyaWRDb2x1bW5M
aW5lcygpIDogc3R5bGUubmFtZWRHcmlkUm93TGluZXMoKTsKLX0KLQotc3RhdGljIGNvbnN0IFN0
cmluZyBpbXBsaWNpdE5hbWVkR3JpZExpbmVGb3JTaWRlKGNvbnN0IFN0cmluZyYgbGluZU5hbWUs
IEdyaWRQb3NpdGlvblNpZGUgc2lkZSkKLXsKLSAgICByZXR1cm4gbGluZU5hbWUgKyAoaXNTdGFy
dFNpZGUoc2lkZSkgPyAiLXN0YXJ0IiA6ICItZW5kIik7Ci19Ci0KLWJvb2wgR3JpZFJlc29sdmVk
UG9zaXRpb246OmlzTm9uRXhpc3RlbnROYW1lZExpbmVPckFyZWEoY29uc3QgU3RyaW5nJiBsaW5l
TmFtZSwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBHcmlkUG9zaXRpb25TaWRlIHNpZGUpCi17
Ci0gICAgY29uc3QgTmFtZWRHcmlkTGluZXNNYXAmIGdyaWRMaW5lTmFtZXMgPSBncmlkTGluZXNG
b3JTaWRlKHN0eWxlLCBzaWRlKTsKLSAgICByZXR1cm4gIWdyaWRMaW5lTmFtZXMuY29udGFpbnMo
aW1wbGljaXROYW1lZEdyaWRMaW5lRm9yU2lkZShsaW5lTmFtZSwgc2lkZSkpICYmICFncmlkTGlu
ZU5hbWVzLmNvbnRhaW5zKGxpbmVOYW1lKTsKLX0KLQotc3RhdGljIHZvaWQgYWRqdXN0R3JpZFBv
c2l0aW9uc0Zyb21TdHlsZShjb25zdCBSZW5kZXJTdHlsZSYgZ3JpZENvbnRhaW5lclN0eWxlLCBj
b25zdCBSZW5kZXJCb3gmIGdyaWRJdGVtLCBHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb24gZGlyZWN0
aW9uLCBHcmlkUG9zaXRpb24mIGluaXRpYWxQb3NpdGlvbiwgR3JpZFBvc2l0aW9uJiBmaW5hbFBv
c2l0aW9uKQotewotICAgIGJvb2wgaXNGb3JDb2x1bW5zID0gZGlyZWN0aW9uID09IEZvckNvbHVt
bnM7Ci0gICAgaW5pdGlhbFBvc2l0aW9uID0gaXNGb3JDb2x1bW5zID8gZ3JpZEl0ZW0uc3R5bGUo
KS5ncmlkSXRlbUNvbHVtblN0YXJ0KCkgOiBncmlkSXRlbS5zdHlsZSgpLmdyaWRJdGVtUm93U3Rh
cnQoKTsKLSAgICBmaW5hbFBvc2l0aW9uID0gaXNGb3JDb2x1bW5zID8gZ3JpZEl0ZW0uc3R5bGUo
KS5ncmlkSXRlbUNvbHVtbkVuZCgpIDogZ3JpZEl0ZW0uc3R5bGUoKS5ncmlkSXRlbVJvd0VuZCgp
OwotCi0gICAgLy8gV2UgbXVzdCBoYW5kbGUgdGhlIHBsYWNlbWVudCBlcnJvciBoYW5kbGluZyBj
b2RlIGhlcmUgaW5zdGVhZCBvZiBpbiB0aGUgU3R5bGVBZGp1c3RlciBiZWNhdXNlIHdlIGRvbid0
IHdhbnQgdG8KLSAgICAvLyBvdmVyd3JpdGUgdGhlIHNwZWNpZmllZCB2YWx1ZXMuCi0gICAgaWYg
KGluaXRpYWxQb3NpdGlvbi5pc1NwYW4oKSAmJiBmaW5hbFBvc2l0aW9uLmlzU3BhbigpKQotICAg
ICAgICBmaW5hbFBvc2l0aW9uLnNldEF1dG9Qb3NpdGlvbigpOwotCi0gICAgaWYgKGdyaWRJdGVt
LmlzT3V0T2ZGbG93UG9zaXRpb25lZCgpKSB7Ci0gICAgICAgIC8vIEVhcmx5IGRldGVjdCB0aGUg
Y2FzZSBvZiBub24gZXhpc3RpbmcgbmFtZWQgZ3JpZCBsaW5lcyBmb3IgcG9zaXRpb25lZCBpdGVt
cy4KLSAgICAgICAgaWYgKGluaXRpYWxQb3NpdGlvbi5pc05hbWVkR3JpZEFyZWEoKSAmJiBHcmlk
UmVzb2x2ZWRQb3NpdGlvbjo6aXNOb25FeGlzdGVudE5hbWVkTGluZU9yQXJlYShpbml0aWFsUG9z
aXRpb24ubmFtZWRHcmlkTGluZSgpLCBncmlkQ29udGFpbmVyU3R5bGUsIGluaXRpYWxQb3NpdGlv
blNpZGUoZGlyZWN0aW9uKSkpCi0gICAgICAgICAgICBpbml0aWFsUG9zaXRpb24uc2V0QXV0b1Bv
c2l0aW9uKCk7Ci0KLSAgICAgICAgaWYgKGZpbmFsUG9zaXRpb24uaXNOYW1lZEdyaWRBcmVhKCkg
JiYgR3JpZFJlc29sdmVkUG9zaXRpb246OmlzTm9uRXhpc3RlbnROYW1lZExpbmVPckFyZWEoZmlu
YWxQb3NpdGlvbi5uYW1lZEdyaWRMaW5lKCksIGdyaWRDb250YWluZXJTdHlsZSwgZmluYWxQb3Np
dGlvblNpZGUoZGlyZWN0aW9uKSkpCi0gICAgICAgICAgICBmaW5hbFBvc2l0aW9uLnNldEF1dG9Q
b3NpdGlvbigpOwotICAgIH0KLQotICAgIC8vIElmIHRoZSBncmlkIGl0ZW0gaGFzIGFuIGF1dG9t
YXRpYyBwb3NpdGlvbiBhbmQgYSBncmlkIHNwYW4gZm9yIGEgbmFtZWQgbGluZSBpbiBhIGdpdmVu
IGRpbWVuc2lvbiwgaW5zdGVhZCB0cmVhdCB0aGUgZ3JpZCBzcGFuIGFzIG9uZS4KLSAgICBpZiAo
aW5pdGlhbFBvc2l0aW9uLmlzQXV0bygpICYmIGZpbmFsUG9zaXRpb24uaXNTcGFuKCkgJiYgIWZp
bmFsUG9zaXRpb24ubmFtZWRHcmlkTGluZSgpLmlzTnVsbCgpKQotICAgICAgICBmaW5hbFBvc2l0
aW9uLnNldFNwYW5Qb3NpdGlvbigxLCBTdHJpbmcoKSk7Ci0gICAgaWYgKGZpbmFsUG9zaXRpb24u
aXNBdXRvKCkgJiYgaW5pdGlhbFBvc2l0aW9uLmlzU3BhbigpICYmICFpbml0aWFsUG9zaXRpb24u
bmFtZWRHcmlkTGluZSgpLmlzTnVsbCgpKQotICAgICAgICBpbml0aWFsUG9zaXRpb24uc2V0U3Bh
blBvc2l0aW9uKDEsIFN0cmluZygpKTsKLX0KLQotdW5zaWduZWQgR3JpZFJlc29sdmVkUG9zaXRp
b246OmV4cGxpY2l0R3JpZENvbHVtbkNvdW50KGNvbnN0IFJlbmRlclN0eWxlJiBncmlkQ29udGFp
bmVyU3R5bGUpCi17Ci0gICAgcmV0dXJuIHN0ZDo6bWluPHVuc2lnbmVkPihncmlkQ29udGFpbmVy
U3R5bGUuZ3JpZENvbHVtbnMoKS5zaXplKCksIGtHcmlkTWF4VHJhY2tzKTsKLX0KLQotdW5zaWdu
ZWQgR3JpZFJlc29sdmVkUG9zaXRpb246OmV4cGxpY2l0R3JpZFJvd0NvdW50KGNvbnN0IFJlbmRl
clN0eWxlJiBncmlkQ29udGFpbmVyU3R5bGUpCi17Ci0gICAgcmV0dXJuIHN0ZDo6bWluPHVuc2ln
bmVkPihncmlkQ29udGFpbmVyU3R5bGUuZ3JpZFJvd3MoKS5zaXplKCksIGtHcmlkTWF4VHJhY2tz
KTsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGV4cGxpY2l0R3JpZFNpemVGb3JTaWRlKGNvbnN0IFJl
bmRlclN0eWxlJiBncmlkQ29udGFpbmVyU3R5bGUsIEdyaWRQb3NpdGlvblNpZGUgc2lkZSkKLXsK
LSAgICByZXR1cm4gaXNDb2x1bW5TaWRlKHNpZGUpID8gR3JpZFJlc29sdmVkUG9zaXRpb246OmV4
cGxpY2l0R3JpZENvbHVtbkNvdW50KGdyaWRDb250YWluZXJTdHlsZSkgOiBHcmlkUmVzb2x2ZWRQ
b3NpdGlvbjo6ZXhwbGljaXRHcmlkUm93Q291bnQoZ3JpZENvbnRhaW5lclN0eWxlKTsKLX0KLQot
c3RhdGljIHVuc2lnbmVkIGxvb2tBaGVhZEZvck5hbWVkR3JpZExpbmUoaW50IHN0YXJ0LCB1bnNp
Z25lZCBudW1iZXJPZkxpbmVzLCBjb25zdCBWZWN0b3I8dW5zaWduZWQ+KiBuYW1lZEdyaWRMaW5l
c0luZGV4ZXMsIHVuc2lnbmVkIGdyaWRMYXN0TGluZSkKLXsKLSAgICBBU1NFUlQobnVtYmVyT2ZM
aW5lcyk7Ci0KLSAgICAvLyBPbmx5IGltcGxpY2l0IGxpbmVzIG9uIHRoZSBzZWFyY2ggZGlyZWN0
aW9uIGFyZSBhc3N1bWVkIHRvIGhhdmUgdGhlIGdpdmVuIG5hbWUsIHNvIHdlIGNhbiBzdGFydCB0
byBsb29rIGZyb20gZmlyc3QgbGluZS4KLSAgICAvLyBTZWU6IGh0dHBzOi8vZHJhZnRzLmNzc3dn
Lm9yZy9jc3MtZ3JpZC8jZ3JpZC1wbGFjZW1lbnQtc3Bhbi1pbnQKLSAgICB1bnNpZ25lZCBlbmQg
PSBzdGQ6Om1heChzdGFydCwgMCk7Ci0KLSAgICBpZiAoIW5hbWVkR3JpZExpbmVzSW5kZXhlcykK
LSAgICAgICAgcmV0dXJuIHN0ZDo6bWF4KGVuZCwgZ3JpZExhc3RMaW5lICsgMSkgKyBudW1iZXJP
ZkxpbmVzIC0gMTsKLQotICAgIGZvciAoOyBudW1iZXJPZkxpbmVzOyArK2VuZCkgewotICAgICAg
ICBpZiAoZW5kID4gZ3JpZExhc3RMaW5lIHx8IG5hbWVkR3JpZExpbmVzSW5kZXhlcy0+Y29udGFp
bnMoZW5kKSkKLSAgICAgICAgICAgIG51bWJlck9mTGluZXMtLTsKLSAgICB9Ci0KLSAgICBBU1NF
UlQoZW5kKTsKLSAgICByZXR1cm4gZW5kIC0gMTsKLX0KLQotc3RhdGljIGludCBsb29rQmFja0Zv
ck5hbWVkR3JpZExpbmUoaW50IGVuZCwgdW5zaWduZWQgbnVtYmVyT2ZMaW5lcywgY29uc3QgVmVj
dG9yPHVuc2lnbmVkPiogbmFtZWRHcmlkTGluZXNJbmRleGVzLCBpbnQgZ3JpZExhc3RMaW5lKQot
ewotICAgIEFTU0VSVChudW1iZXJPZkxpbmVzKTsKLQotICAgIC8vIE9ubHkgaW1wbGljaXQgbGlu
ZXMgb24gdGhlIHNlYXJjaCBkaXJlY3Rpb24gYXJlIGFzc3VtZWQgdG8gaGF2ZSB0aGUgZ2l2ZW4g
bmFtZSwgc28gd2UgY2FuIHN0YXJ0IHRvIGxvb2sgZnJvbSBsYXN0IGxpbmUuCi0gICAgLy8gU2Vl
OiBodHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcvY3NzLWdyaWQvI2dyaWQtcGxhY2VtZW50LXNwYW4t
aW50Ci0gICAgaW50IHN0YXJ0ID0gc3RkOjptaW4oZW5kLCBncmlkTGFzdExpbmUpOwotCi0gICAg
aWYgKCFuYW1lZEdyaWRMaW5lc0luZGV4ZXMpCi0gICAgICAgIHJldHVybiBzdGQ6Om1pbihzdGFy
dCwgLTEpIC0gbnVtYmVyT2ZMaW5lcyArIDE7Ci0KLSAgICBmb3IgKDsgbnVtYmVyT2ZMaW5lczsg
LS1zdGFydCkgewotICAgICAgICBpZiAoc3RhcnQgPCAwIHx8IG5hbWVkR3JpZExpbmVzSW5kZXhl
cy0+Y29udGFpbnMoc3RhdGljX2Nhc3Q8c2l6ZV90PihzdGFydCkpKQotICAgICAgICAgICAgbnVt
YmVyT2ZMaW5lcy0tOwotICAgIH0KLQotICAgIHJldHVybiBzdGFydCArIDE7Ci19Ci0KLXN0YXRp
YyBpbnQgcmVzb2x2ZU5hbWVkR3JpZExpbmVQb3NpdGlvbkZyb21TdHlsZShjb25zdCBSZW5kZXJT
dHlsZSYgZ3JpZENvbnRhaW5lclN0eWxlLCBjb25zdCBHcmlkUG9zaXRpb24mIHBvc2l0aW9uLCBH
cmlkUG9zaXRpb25TaWRlIHNpZGUpCi17Ci0gICAgQVNTRVJUKCFwb3NpdGlvbi5uYW1lZEdyaWRM
aW5lKCkuaXNOdWxsKCkpOwotCi0gICAgY29uc3QgTmFtZWRHcmlkTGluZXNNYXAmIGdyaWRMaW5l
c05hbWVzID0gaXNDb2x1bW5TaWRlKHNpZGUpID8gZ3JpZENvbnRhaW5lclN0eWxlLm5hbWVkR3Jp
ZENvbHVtbkxpbmVzKCkgOiBncmlkQ29udGFpbmVyU3R5bGUubmFtZWRHcmlkUm93TGluZXMoKTsK
LSAgICBhdXRvIGl0ZXJhdG9yID0gZ3JpZExpbmVzTmFtZXMuZmluZChwb3NpdGlvbi5uYW1lZEdy
aWRMaW5lKCkpOwotICAgIGNvbnN0IFZlY3Rvcjx1bnNpZ25lZD4qIGdyaWRMaW5lcyA9IGl0ZXJh
dG9yID09IGdyaWRMaW5lc05hbWVzLmVuZCgpID8gbnVsbHB0ciA6ICZpdGVyYXRvci0+dmFsdWU7
Ci0gICAgdW5zaWduZWQgbGFzdExpbmUgPSBleHBsaWNpdEdyaWRTaXplRm9yU2lkZShncmlkQ29u
dGFpbmVyU3R5bGUsIHNpZGUpOwotICAgIGlmIChwb3NpdGlvbi5pc1Bvc2l0aXZlKCkpCi0gICAg
ICAgIHJldHVybiBsb29rQWhlYWRGb3JOYW1lZEdyaWRMaW5lKDAsIHN0ZDo6YWJzKHBvc2l0aW9u
LmludGVnZXJQb3NpdGlvbigpKSwgZ3JpZExpbmVzLCBsYXN0TGluZSk7Ci0gICAgcmV0dXJuIGxv
b2tCYWNrRm9yTmFtZWRHcmlkTGluZShsYXN0TGluZSwgc3RkOjphYnMocG9zaXRpb24uaW50ZWdl
clBvc2l0aW9uKCkpLCBncmlkTGluZXMsIGxhc3RMaW5lKTsKLX0KLQotc3RhdGljIEdyaWRTcGFu
IGRlZmluaXRlR3JpZFNwYW5XaXRoTmFtZWRMaW5lU3BhbkFnYWluc3RPcHBvc2l0ZShpbnQgcmVz
b2x2ZWRPcHBvc2l0ZVBvc2l0aW9uLCBjb25zdCBHcmlkUG9zaXRpb24mIHBvc2l0aW9uLCBHcmlk
UG9zaXRpb25TaWRlIHNpZGUsIGNvbnN0IFZlY3Rvcjx1bnNpZ25lZD4qIGdyaWRMaW5lcywgdW5z
aWduZWQgbGFzdExpbmUpCi17Ci0gICAgaW50IHN0YXJ0LCBlbmQ7Ci0KLSAgICBpZiAoc2lkZSA9
PSBSb3dTdGFydFNpZGUgfHwgc2lkZSA9PSBDb2x1bW5TdGFydFNpZGUpIHsKLSAgICAgICAgc3Rh
cnQgPSBsb29rQmFja0Zvck5hbWVkR3JpZExpbmUocmVzb2x2ZWRPcHBvc2l0ZVBvc2l0aW9uIC0g
MSwgcG9zaXRpb24uc3BhblBvc2l0aW9uKCksIGdyaWRMaW5lcywgbGFzdExpbmUpOwotICAgICAg
ICBlbmQgPSByZXNvbHZlZE9wcG9zaXRlUG9zaXRpb247Ci0gICAgfSBlbHNlIHsKLSAgICAgICAg
c3RhcnQgPSByZXNvbHZlZE9wcG9zaXRlUG9zaXRpb247Ci0gICAgICAgIGVuZCA9IGxvb2tBaGVh
ZEZvck5hbWVkR3JpZExpbmUocmVzb2x2ZWRPcHBvc2l0ZVBvc2l0aW9uICsgMSwgcG9zaXRpb24u
c3BhblBvc2l0aW9uKCksIGdyaWRMaW5lcywgbGFzdExpbmUpOwotICAgIH0KLQotICAgIHJldHVy
biBHcmlkU3Bhbjo6dW50cmFuc2xhdGVkRGVmaW5pdGVHcmlkU3BhbihzdGFydCwgZW5kKTsKLX0K
LQotc3RhdGljIEdyaWRTcGFuIHJlc29sdmVOYW1lZEdyaWRMaW5lUG9zaXRpb25BZ2FpbnN0T3Bw
b3NpdGVQb3NpdGlvbihjb25zdCBSZW5kZXJTdHlsZSYgZ3JpZENvbnRhaW5lclN0eWxlLCBpbnQg
cmVzb2x2ZWRPcHBvc2l0ZVBvc2l0aW9uLCBjb25zdCBHcmlkUG9zaXRpb24mIHBvc2l0aW9uLCBH
cmlkUG9zaXRpb25TaWRlIHNpZGUpCi17Ci0gICAgQVNTRVJUKHBvc2l0aW9uLmlzU3BhbigpKTsK
LSAgICBBU1NFUlQoIXBvc2l0aW9uLm5hbWVkR3JpZExpbmUoKS5pc051bGwoKSk7Ci0gICAgLy8g
TmVnYXRpdmUgcG9zaXRpb25zIGFyZSBub3QgYWxsb3dlZCBwZXIgdGhlIHNwZWNpZmljYXRpb24g
YW5kIHNob3VsZCBoYXZlIGJlZW4gaGFuZGxlZCBkdXJpbmcgcGFyc2luZy4KLSAgICBBU1NFUlQo
cG9zaXRpb24uc3BhblBvc2l0aW9uKCkgPiAwKTsKLQotICAgIGNvbnN0IE5hbWVkR3JpZExpbmVz
TWFwJiBncmlkTGluZXNOYW1lcyA9IGlzQ29sdW1uU2lkZShzaWRlKSA/IGdyaWRDb250YWluZXJT
dHlsZS5uYW1lZEdyaWRDb2x1bW5MaW5lcygpIDogZ3JpZENvbnRhaW5lclN0eWxlLm5hbWVkR3Jp
ZFJvd0xpbmVzKCk7Ci0gICAgYXV0byBpdGVyYXRvciA9IGdyaWRMaW5lc05hbWVzLmZpbmQocG9z
aXRpb24ubmFtZWRHcmlkTGluZSgpKTsKLSAgICBjb25zdCBWZWN0b3I8dW5zaWduZWQ+KiBncmlk
TGluZXMgPSBpdGVyYXRvciA9PSBncmlkTGluZXNOYW1lcy5lbmQoKSA/IG51bGxwdHIgOiAmaXRl
cmF0b3ItPnZhbHVlOwotICAgIHVuc2lnbmVkIGxhc3RMaW5lID0gZXhwbGljaXRHcmlkU2l6ZUZv
clNpZGUoZ3JpZENvbnRhaW5lclN0eWxlLCBzaWRlKTsKLQotICAgIHJldHVybiBkZWZpbml0ZUdy
aWRTcGFuV2l0aE5hbWVkTGluZVNwYW5BZ2FpbnN0T3Bwb3NpdGUocmVzb2x2ZWRPcHBvc2l0ZVBv
c2l0aW9uLCBwb3NpdGlvbiwgc2lkZSwgZ3JpZExpbmVzLCBsYXN0TGluZSk7Ci19Ci0KLXN0YXRp
YyBHcmlkU3BhbiByZXNvbHZlR3JpZFBvc2l0aW9uQWdhaW5zdE9wcG9zaXRlUG9zaXRpb24oY29u
c3QgUmVuZGVyU3R5bGUmIGdyaWRDb250YWluZXJTdHlsZSwgaW50IHJlc29sdmVkT3Bwb3NpdGVQ
b3NpdGlvbiwgY29uc3QgR3JpZFBvc2l0aW9uJiBwb3NpdGlvbiwgR3JpZFBvc2l0aW9uU2lkZSBz
aWRlKQotewotICAgIGlmIChwb3NpdGlvbi5pc0F1dG8oKSkgewotICAgICAgICBpZiAoaXNTdGFy
dFNpZGUoc2lkZSkpCi0gICAgICAgICAgICByZXR1cm4gR3JpZFNwYW46OnVudHJhbnNsYXRlZERl
ZmluaXRlR3JpZFNwYW4ocmVzb2x2ZWRPcHBvc2l0ZVBvc2l0aW9uIC0gMSwgcmVzb2x2ZWRPcHBv
c2l0ZVBvc2l0aW9uKTsKLSAgICAgICAgcmV0dXJuIEdyaWRTcGFuOjp1bnRyYW5zbGF0ZWREZWZp
bml0ZUdyaWRTcGFuKHJlc29sdmVkT3Bwb3NpdGVQb3NpdGlvbiwgcmVzb2x2ZWRPcHBvc2l0ZVBv
c2l0aW9uICsgMSk7Ci0gICAgfQotCi0gICAgQVNTRVJUKHBvc2l0aW9uLmlzU3BhbigpKTsKLSAg
ICBBU1NFUlQocG9zaXRpb24uc3BhblBvc2l0aW9uKCkgPiAwKTsKLQotICAgIGlmICghcG9zaXRp
b24ubmFtZWRHcmlkTGluZSgpLmlzTnVsbCgpKSB7Ci0gICAgICAgIC8vIHNwYW4gMiAnYycgLT4g
d2UgbmVlZCB0byBmaW5kIHRoZSBhcHByb3ByaWF0ZSBncmlkIGxpbmUgYmVmb3JlIC8gYWZ0ZXIg
b3VyIG9wcG9zaXRlIHBvc2l0aW9uLgotICAgICAgICByZXR1cm4gcmVzb2x2ZU5hbWVkR3JpZExp
bmVQb3NpdGlvbkFnYWluc3RPcHBvc2l0ZVBvc2l0aW9uKGdyaWRDb250YWluZXJTdHlsZSwgcmVz
b2x2ZWRPcHBvc2l0ZVBvc2l0aW9uLCBwb3NpdGlvbiwgc2lkZSk7Ci0gICAgfQotCi0gICAgLy8g
J3NwYW4gMScgaXMgY29udGFpbmVkIGluc2lkZSBhIHNpbmdsZSBncmlkIHRyYWNrIHJlZ2FyZGxl
c3Mgb2YgdGhlIGRpcmVjdGlvbi4KLSAgICAvLyBUaGF0J3Mgd2h5IHRoZSBDU1Mgc3BhbiB2YWx1
ZSBpcyBvbmUgbW9yZSB0aGFuIHRoZSBvZmZzZXQgd2UgYXBwbHkuCi0gICAgdW5zaWduZWQgcG9z
aXRpb25PZmZzZXQgPSBwb3NpdGlvbi5zcGFuUG9zaXRpb24oKTsKLSAgICBpZiAoaXNTdGFydFNp
ZGUoc2lkZSkpCi0gICAgICAgIHJldHVybiBHcmlkU3Bhbjo6dW50cmFuc2xhdGVkRGVmaW5pdGVH
cmlkU3BhbihyZXNvbHZlZE9wcG9zaXRlUG9zaXRpb24gLSBwb3NpdGlvbk9mZnNldCwgcmVzb2x2
ZWRPcHBvc2l0ZVBvc2l0aW9uKTsKLQotICAgIHJldHVybiBHcmlkU3Bhbjo6dW50cmFuc2xhdGVk
RGVmaW5pdGVHcmlkU3BhbihyZXNvbHZlZE9wcG9zaXRlUG9zaXRpb24sIHJlc29sdmVkT3Bwb3Np
dGVQb3NpdGlvbiArIHBvc2l0aW9uT2Zmc2V0KTsKLX0KLQotdW5zaWduZWQgR3JpZFJlc29sdmVk
UG9zaXRpb246OnNwYW5TaXplRm9yQXV0b1BsYWNlZEl0ZW0oY29uc3QgUmVuZGVyU3R5bGUmIGdy
aWRDb250YWluZXJTdHlsZSwgY29uc3QgUmVuZGVyQm94JiBncmlkSXRlbSwgR3JpZFRyYWNrU2l6
aW5nRGlyZWN0aW9uIGRpcmVjdGlvbikKLXsKLSAgICBHcmlkUG9zaXRpb24gaW5pdGlhbFBvc2l0
aW9uLCBmaW5hbFBvc2l0aW9uOwotICAgIGFkanVzdEdyaWRQb3NpdGlvbnNGcm9tU3R5bGUoZ3Jp
ZENvbnRhaW5lclN0eWxlLCBncmlkSXRlbSwgZGlyZWN0aW9uLCBpbml0aWFsUG9zaXRpb24sIGZp
bmFsUG9zaXRpb24pOwotCi0gICAgLy8gVGhpcyBtZXRob2Qgd2lsbCBvbmx5IGJlIHVzZWQgd2hl
biBib3RoIHBvc2l0aW9ucyBuZWVkIHRvIGJlIHJlc29sdmVkIGFnYWluc3QgdGhlIG9wcG9zaXRl
IG9uZS4KLSAgICBBU1NFUlQoaW5pdGlhbFBvc2l0aW9uLnNob3VsZEJlUmVzb2x2ZWRBZ2FpbnN0
T3Bwb3NpdGVQb3NpdGlvbigpICYmIGZpbmFsUG9zaXRpb24uc2hvdWxkQmVSZXNvbHZlZEFnYWlu
c3RPcHBvc2l0ZVBvc2l0aW9uKCkpOwotCi0gICAgaWYgKGluaXRpYWxQb3NpdGlvbi5pc0F1dG8o
KSAmJiBmaW5hbFBvc2l0aW9uLmlzQXV0bygpKQotICAgICAgICByZXR1cm4gMTsKLQotICAgIEdy
aWRQb3NpdGlvbiBwb3NpdGlvbiA9IGluaXRpYWxQb3NpdGlvbi5pc1NwYW4oKSA/IGluaXRpYWxQ
b3NpdGlvbiA6IGZpbmFsUG9zaXRpb247Ci0gICAgQVNTRVJUKHBvc2l0aW9uLmlzU3BhbigpKTsK
LQotICAgIEFTU0VSVChwb3NpdGlvbi5zcGFuUG9zaXRpb24oKSk7Ci0gICAgcmV0dXJuIHBvc2l0
aW9uLnNwYW5Qb3NpdGlvbigpOwotfQotCi1zdGF0aWMgaW50IHJlc29sdmVHcmlkUG9zaXRpb25G
cm9tU3R5bGUoY29uc3QgUmVuZGVyU3R5bGUmIGdyaWRDb250YWluZXJTdHlsZSwgY29uc3QgR3Jp
ZFBvc2l0aW9uJiBwb3NpdGlvbiwgR3JpZFBvc2l0aW9uU2lkZSBzaWRlKQotewotICAgIHN3aXRj
aCAocG9zaXRpb24udHlwZSgpKSB7Ci0gICAgY2FzZSBFeHBsaWNpdFBvc2l0aW9uOiB7Ci0gICAg
ICAgIEFTU0VSVChwb3NpdGlvbi5pbnRlZ2VyUG9zaXRpb24oKSk7Ci0KLSAgICAgICAgaWYgKCFw
b3NpdGlvbi5uYW1lZEdyaWRMaW5lKCkuaXNOdWxsKCkpCi0gICAgICAgICAgICByZXR1cm4gcmVz
b2x2ZU5hbWVkR3JpZExpbmVQb3NpdGlvbkZyb21TdHlsZShncmlkQ29udGFpbmVyU3R5bGUsIHBv
c2l0aW9uLCBzaWRlKTsKLQotICAgICAgICAvLyBIYW5kbGUgPGludGVnZXI+IGV4cGxpY2l0IHBv
c2l0aW9uLgotICAgICAgICBpZiAocG9zaXRpb24uaXNQb3NpdGl2ZSgpKQotICAgICAgICAgICAg
cmV0dXJuIHBvc2l0aW9uLmludGVnZXJQb3NpdGlvbigpIC0gMTsKLQotICAgICAgICB1bnNpZ25l
ZCByZXNvbHZlZFBvc2l0aW9uID0gc3RkOjphYnMocG9zaXRpb24uaW50ZWdlclBvc2l0aW9uKCkp
IC0gMTsKLSAgICAgICAgY29uc3QgdW5zaWduZWQgZW5kT2ZUcmFjayA9IGV4cGxpY2l0R3JpZFNp
emVGb3JTaWRlKGdyaWRDb250YWluZXJTdHlsZSwgc2lkZSk7Ci0KLSAgICAgICAgcmV0dXJuIGVu
ZE9mVHJhY2sgLSByZXNvbHZlZFBvc2l0aW9uOwotICAgIH0KLSAgICBjYXNlIE5hbWVkR3JpZEFy
ZWFQb3NpdGlvbjoKLSAgICB7Ci0gICAgICAgIC8vIEZpcnN0IGF0dGVtcHQgdG8gbWF0Y2ggdGhl
IGdyaWQgYXJlYSdzIGVkZ2UgdG8gYSBuYW1lZCBncmlkIGFyZWE6IGlmIHRoZXJlIGlzIGEgbmFt
ZWQgbGluZSB3aXRoIHRoZSBuYW1lCi0gICAgICAgIC8vICcnPGN1c3RvbS1pZGVudD4tc3RhcnQg
KGZvciBncmlkLSotc3RhcnQpIC8gPGN1c3RvbS1pZGVudD4tZW5kJycgKGZvciBncmlkLSotZW5k
KSwgY29udHJpYnV0ZXMgdGhlIGZpcnN0IHN1Y2gKLSAgICAgICAgLy8gbGluZSB0byB0aGUgZ3Jp
ZCBpdGVtJ3MgcGxhY2VtZW50LgotICAgICAgICBTdHJpbmcgbmFtZWRHcmlkTGluZSA9IHBvc2l0
aW9uLm5hbWVkR3JpZExpbmUoKTsKLSAgICAgICAgQVNTRVJUKCFwb3NpdGlvbi5uYW1lZEdyaWRM
aW5lKCkuaXNOdWxsKCkpOwotCi0gICAgICAgIGNvbnN0IE5hbWVkR3JpZExpbmVzTWFwJiBncmlk
TGluZU5hbWVzID0gZ3JpZExpbmVzRm9yU2lkZShncmlkQ29udGFpbmVyU3R5bGUsIHNpZGUpOwot
ICAgICAgICBhdXRvIGltcGxpY2l0TGluZSA9IGdyaWRMaW5lTmFtZXMuZmluZChpbXBsaWNpdE5h
bWVkR3JpZExpbmVGb3JTaWRlKG5hbWVkR3JpZExpbmUsIHNpZGUpKTsKLSAgICAgICAgaWYgKGlt
cGxpY2l0TGluZSAhPSBncmlkTGluZU5hbWVzLmVuZCgpKQotICAgICAgICAgICAgcmV0dXJuIGlt
cGxpY2l0TGluZS0+dmFsdWVbMF07Ci0KLSAgICAgICAgLy8gT3RoZXJ3aXNlLCBpZiB0aGVyZSBp
cyBhIG5hbWVkIGxpbmUgd2l0aCB0aGUgc3BlY2lmaWVkIG5hbWUsIGNvbnRyaWJ1dGVzIHRoZSBm
aXJzdCBzdWNoIGxpbmUgdG8gdGhlIGdyaWQKLSAgICAgICAgLy8gaXRlbSdzIHBsYWNlbWVudC4K
LSAgICAgICAgYXV0byBleHBsaWNpdExpbmUgPSBncmlkTGluZU5hbWVzLmZpbmQobmFtZWRHcmlk
TGluZSk7Ci0gICAgICAgIGlmIChleHBsaWNpdExpbmUgIT0gZ3JpZExpbmVOYW1lcy5lbmQoKSkK
LSAgICAgICAgICAgIHJldHVybiBleHBsaWNpdExpbmUtPnZhbHVlWzBdOwotCi0gICAgICAgIEFT
U0VSVChHcmlkUmVzb2x2ZWRQb3NpdGlvbjo6aXNOb25FeGlzdGVudE5hbWVkTGluZU9yQXJlYShu
YW1lZEdyaWRMaW5lLCBncmlkQ29udGFpbmVyU3R5bGUsIHNpZGUpKTsKLSAgICAgICAgLy8gSWYg
bm9uZSBvZiB0aGUgYWJvdmUgd29ya3Mgc3BlY3MgbWFuZGF0ZSB0byBhc3N1bWUgdGhhdCBhbGwg
dGhlIGxpbmVzIGluIHRoZSBpbXBsaWNpdCBncmlkIGhhdmUgdGhpcyBuYW1lLgotICAgICAgICB1
bnNpZ25lZCBsYXN0TGluZSA9IGV4cGxpY2l0R3JpZFNpemVGb3JTaWRlKGdyaWRDb250YWluZXJT
dHlsZSwgc2lkZSk7Ci0gICAgICAgIHJldHVybiBsYXN0TGluZSArIDE7Ci0gICAgfQotICAgIGNh
c2UgQXV0b1Bvc2l0aW9uOgotICAgIGNhc2UgU3BhblBvc2l0aW9uOgotICAgICAgICAvLyAnYXV0
bycgYW5kIHNwYW4gZGVwZW5kIG9uIHRoZSBvcHBvc2l0ZSBwb3NpdGlvbiBmb3IgcmVzb2x1dGlv
biAoZS5nLiBncmlkLXJvdzogYXV0byAvIDEgb3IgZ3JpZC1jb2x1bW46IHNwYW4gMyAvICJteUhl
YWRlciIpLgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIDA7
Ci0gICAgfQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiAwOwotfQotCi1H
cmlkU3BhbiBHcmlkUmVzb2x2ZWRQb3NpdGlvbjo6cmVzb2x2ZUdyaWRQb3NpdGlvbnNGcm9tU3R5
bGUoY29uc3QgUmVuZGVyU3R5bGUmIGdyaWRDb250YWluZXJTdHlsZSwgY29uc3QgUmVuZGVyQm94
JiBncmlkSXRlbSwgR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uIGRpcmVjdGlvbikKLXsKLSAgICBH
cmlkUG9zaXRpb24gaW5pdGlhbFBvc2l0aW9uLCBmaW5hbFBvc2l0aW9uOwotICAgIGFkanVzdEdy
aWRQb3NpdGlvbnNGcm9tU3R5bGUoZ3JpZENvbnRhaW5lclN0eWxlLCBncmlkSXRlbSwgZGlyZWN0
aW9uLCBpbml0aWFsUG9zaXRpb24sIGZpbmFsUG9zaXRpb24pOwotCi0gICAgR3JpZFBvc2l0aW9u
U2lkZSBpbml0aWFsU2lkZSA9IGluaXRpYWxQb3NpdGlvblNpZGUoZGlyZWN0aW9uKTsKLSAgICBH
cmlkUG9zaXRpb25TaWRlIGZpbmFsU2lkZSA9IGZpbmFsUG9zaXRpb25TaWRlKGRpcmVjdGlvbik7
Ci0KLSAgICAvLyBXZSBjYW4ndCBnZXQgb3VyIGdyaWQgcG9zaXRpb25zIHdpdGhvdXQgcnVubmlu
ZyB0aGUgYXV0byBwbGFjZW1lbnQgYWxnb3JpdGhtLgotICAgIGlmIChpbml0aWFsUG9zaXRpb24u
c2hvdWxkQmVSZXNvbHZlZEFnYWluc3RPcHBvc2l0ZVBvc2l0aW9uKCkgJiYgZmluYWxQb3NpdGlv
bi5zaG91bGRCZVJlc29sdmVkQWdhaW5zdE9wcG9zaXRlUG9zaXRpb24oKSkKLSAgICAgICAgcmV0
dXJuIEdyaWRTcGFuOjppbmRlZmluaXRlR3JpZFNwYW4oKTsKLQotICAgIGlmIChpbml0aWFsUG9z
aXRpb24uc2hvdWxkQmVSZXNvbHZlZEFnYWluc3RPcHBvc2l0ZVBvc2l0aW9uKCkpIHsKLSAgICAg
ICAgLy8gSW5mZXIgdGhlIHBvc2l0aW9uIGZyb20gdGhlIGZpbmFsIHBvc2l0aW9uICgnYXV0byAv
IDEnIG9yICdzcGFuIDIgLyAzJyBjYXNlKS4KLSAgICAgICAgYXV0byBmaW5hbFJlc29sdmVkUG9z
aXRpb24gPSByZXNvbHZlR3JpZFBvc2l0aW9uRnJvbVN0eWxlKGdyaWRDb250YWluZXJTdHlsZSwg
ZmluYWxQb3NpdGlvbiwgZmluYWxTaWRlKTsKLSAgICAgICAgcmV0dXJuIHJlc29sdmVHcmlkUG9z
aXRpb25BZ2FpbnN0T3Bwb3NpdGVQb3NpdGlvbihncmlkQ29udGFpbmVyU3R5bGUsIGZpbmFsUmVz
b2x2ZWRQb3NpdGlvbiwgaW5pdGlhbFBvc2l0aW9uLCBpbml0aWFsU2lkZSk7Ci0gICAgfQotCi0g
ICAgaWYgKGZpbmFsUG9zaXRpb24uc2hvdWxkQmVSZXNvbHZlZEFnYWluc3RPcHBvc2l0ZVBvc2l0
aW9uKCkpIHsKLSAgICAgICAgLy8gSW5mZXIgb3VyIHBvc2l0aW9uIGZyb20gdGhlIGluaXRpYWwg
cG9zaXRpb24gKCcxIC8gYXV0bycgb3IgJzMgLyBzcGFuIDInIGNhc2UpLgotICAgICAgICBhdXRv
IGluaXRpYWxSZXNvbHZlZFBvc2l0aW9uID0gcmVzb2x2ZUdyaWRQb3NpdGlvbkZyb21TdHlsZShn
cmlkQ29udGFpbmVyU3R5bGUsIGluaXRpYWxQb3NpdGlvbiwgaW5pdGlhbFNpZGUpOwotICAgICAg
ICByZXR1cm4gcmVzb2x2ZUdyaWRQb3NpdGlvbkFnYWluc3RPcHBvc2l0ZVBvc2l0aW9uKGdyaWRD
b250YWluZXJTdHlsZSwgaW5pdGlhbFJlc29sdmVkUG9zaXRpb24sIGZpbmFsUG9zaXRpb24sIGZp
bmFsU2lkZSk7Ci0gICAgfQotCi0gICAgaW50IHJlc29sdmVkSW5pdGlhbFBvc2l0aW9uID0gcmVz
b2x2ZUdyaWRQb3NpdGlvbkZyb21TdHlsZShncmlkQ29udGFpbmVyU3R5bGUsIGluaXRpYWxQb3Np
dGlvbiwgaW5pdGlhbFNpZGUpOwotICAgIGludCByZXNvbHZlZEZpbmFsUG9zaXRpb24gPSByZXNv
bHZlR3JpZFBvc2l0aW9uRnJvbVN0eWxlKGdyaWRDb250YWluZXJTdHlsZSwgZmluYWxQb3NpdGlv
biwgZmluYWxTaWRlKTsKLQotICAgIGlmIChyZXNvbHZlZEluaXRpYWxQb3NpdGlvbiA+IHJlc29s
dmVkRmluYWxQb3NpdGlvbikKLSAgICAgICAgc3RkOjpzd2FwKHJlc29sdmVkSW5pdGlhbFBvc2l0
aW9uLCByZXNvbHZlZEZpbmFsUG9zaXRpb24pOwotICAgIGVsc2UgaWYgKHJlc29sdmVkSW5pdGlh
bFBvc2l0aW9uID09IHJlc29sdmVkRmluYWxQb3NpdGlvbikKLSAgICAgICAgcmVzb2x2ZWRGaW5h
bFBvc2l0aW9uID0gcmVzb2x2ZWRJbml0aWFsUG9zaXRpb24gKyAxOwotCi0gICAgcmV0dXJuIEdy
aWRTcGFuOjp1bnRyYW5zbGF0ZWREZWZpbml0ZUdyaWRTcGFuKHJlc29sdmVkSW5pdGlhbFBvc2l0
aW9uLCBzdGQ6Om1heChyZXNvbHZlZEluaXRpYWxQb3NpdGlvbiwgcmVzb2x2ZWRGaW5hbFBvc2l0
aW9uKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShD
U1NfR1JJRF9MQVlPVVQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5
bGUvR3JpZFJlc29sdmVkUG9zaXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHls
ZS9HcmlkUmVzb2x2ZWRQb3NpdGlvbi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0
Y2IzZjlkOThhZDZlNzE1ZjA4MDdlYTI1YTVmM2U1MzJkODQ1ODRmLi4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dHlsZS9HcmlkUmVzb2x2ZWRQb3NpdGlvbi5oCisrKyAvZGV2L251bGwKQEAgLTEsNjQgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBJZ2FsaWEgUy5MLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0g
KiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAot
ICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgR3JpZFJlc29sdmVk
UG9zaXRpb25faAotI2RlZmluZSBHcmlkUmVzb2x2ZWRQb3NpdGlvbl9oCi0KLSNpZiBFTkFCTEUo
Q1NTX0dSSURfTEFZT1VUKQotCi0jaW5jbHVkZSAiR3JpZFBvc2l0aW9uLmgiCi0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQotY2xhc3MgR3JpZFNwYW47Ci1jbGFzcyBSZW5kZXJCb3g7Ci1jbGFzcyBS
ZW5kZXJTdHlsZTsKLQotZW51bSBHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb24gewotICAgIEZvckNv
bHVtbnMsCi0gICAgRm9yUm93cwotfTsKLQotLy8gQ2xhc3Mgd2l0aCBhbGwgdGhlIGNvZGUgcmVs
YXRlZCB0byBncmlkIGl0ZW1zIHBvc2l0aW9ucyByZXNvbHV0aW9uLgotLy8gVE9ETyhyZWdvKTog
UmVuYW1lIGNsYXNzIHRvIEdyaWRQb3NpdGlvbnNSZXNvbHZlci4KLWNsYXNzIEdyaWRSZXNvbHZl
ZFBvc2l0aW9uIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgdW5zaWduZWQgc3BhblNpemVGb3JBdXRv
UGxhY2VkSXRlbShjb25zdCBSZW5kZXJTdHlsZSYsIGNvbnN0IFJlbmRlckJveCYsIEdyaWRUcmFj
a1NpemluZ0RpcmVjdGlvbik7Ci0gICAgc3RhdGljIEdyaWRTcGFuIHJlc29sdmVHcmlkUG9zaXRp
b25zRnJvbVN0eWxlKGNvbnN0IFJlbmRlclN0eWxlJiwgY29uc3QgUmVuZGVyQm94JiwgR3JpZFRy
YWNrU2l6aW5nRGlyZWN0aW9uKTsKLSAgICBzdGF0aWMgdW5zaWduZWQgZXhwbGljaXRHcmlkQ29s
dW1uQ291bnQoY29uc3QgUmVuZGVyU3R5bGUmKTsKLSAgICBzdGF0aWMgdW5zaWduZWQgZXhwbGlj
aXRHcmlkUm93Q291bnQoY29uc3QgUmVuZGVyU3R5bGUmKTsKLSAgICBzdGF0aWMgYm9vbCBpc05v
bkV4aXN0ZW50TmFtZWRMaW5lT3JBcmVhKGNvbnN0IFN0cmluZyYgbGluZU5hbWUsIGNvbnN0IFJl
bmRlclN0eWxlJiwgR3JpZFBvc2l0aW9uU2lkZSk7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoQ1NTX0dSSURfTEFZT1VUKQotCi0jZW5kaWYgLy8gR3Jp
ZFJlc29sdmVkUG9zaXRpb25faApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N0eWxlL1N0eWxlQWxsSW5PbmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxl
L1N0eWxlQWxsSW5PbmUuY3BwCmluZGV4IDdjNmMwNzlkNjk1MzA4MTE3YWJjOWJiMmRkMTMwNjFk
YjE3MDIxMzguLmRmNjQ2N2U5NDQzYWE3ZWEwYjliOGI0ZmU1ZmNiMGY1Mjk5ZjBmYTIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZUFsbEluT25lLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVBbGxJbk9uZS5jcHAKQEAg
LTI5LDcgKzI5LDcgQEAKICNpbmNsdWRlICJDb250ZW50RGF0YS5jcHAiCiAjaW5jbHVkZSAiQ291
bnRlckRpcmVjdGl2ZXMuY3BwIgogI2luY2x1ZGUgIkZpbGxMYXllci5jcHAiCi0jaW5jbHVkZSAi
R3JpZFJlc29sdmVkUG9zaXRpb24uY3BwIgorI2luY2x1ZGUgIkdyaWRQb3NpdGlvbnNSZXNvbHZl
ci5jcHAiCiAjaW5jbHVkZSAiS2V5ZnJhbWVMaXN0LmNwcCIKICNpbmNsdWRlICJOaW5lUGllY2VJ
bWFnZS5jcHAiCiAjaW5jbHVkZSAiUXVvdGVzRGF0YS5jcHAiCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>