<?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>82677</bug_id>
          
          <creation_ts>2012-03-29 16:53:16 -0700</creation_ts>
          <short_desc>[Chromium] Delete WebKit/chromium/bridge</short_desc>
          <delta_ts>2012-03-31 00:47:22 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Adam Barth">abarth</reporter>
          <assigned_to name="Adam Barth">abarth</assigned_to>
          <cc>dglazkov</cc>
    
    <cc>fishd</cc>
    
    <cc>jamesr</cc>
    
    <cc>tkent</cc>
    
    <cc>tommyw</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>591710</commentid>
    <comment_count>0</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-03-29 16:53:16 -0700</bug_when>
    <thetext>[Chromium] Delete WebKit/chromium/bridge</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>591715</commentid>
    <comment_count>1</comment_count>
      <attachid>134695</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-03-29 17:00:15 -0700</bug_when>
    <thetext>Created attachment 134695
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>591719</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-29 17:03:53 -0700</bug_when>
    <thetext>Please wait for approval from abarth@webkit.org, dglazkov@chromium.org, fishd@chromium.org, jamesr@chromium.org or tkent@chromium.org before submitting, as this patch contains changes to the Chromium public API. See also https://trac.webkit.org/wiki/ChromiumWebKitAPI.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>591721</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-29 17:04:25 -0700</bug_when>
    <thetext>Attachment 134695 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/Platform/ChangeLog&apos;, u&apos;Source/Platf...&quot; exit_code: 1
Source/WebCore/platform/chromium/support/WebMediaStreamSourcesRequest.cpp:36:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebCore/platform/chromium/support/WebMediaStreamSourcesRequest.cpp:38:  Found header this file implements after other header. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Source/WebCore/platform/chromium/support/WebMediaHints.cpp:37:  Found header this file implements after other header. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Source/WebCore/platform/chromium/support/WebICEOptions.cpp:36:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebCore/platform/chromium/support/WebMediaStreamComponent.cpp:37:  Found header this file implements after other header. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Source/WebCore/platform/chromium/support/WebICECandidateDescriptor.cpp:36:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebCore/platform/chromium/support/WebMediaStreamSource.cpp:37:  Found header this file implements after other header. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Source/WebCore/platform/chromium/support/WebMediaStreamDescriptor.cpp:36:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebCore/platform/chromium/support/WebMediaStreamDescriptor.cpp:38:  Found header this file implements after other header. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Total errors found: 9 in 52 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>591960</commentid>
    <comment_count>4</comment_count>
    <who name="Tommy Widenflycht">tommyw</who>
    <bug_when>2012-03-30 01:51:33 -0700</bug_when>
    <thetext>I like this patch a lot  and it can be further simplified by deleting the *Internal classes (to my eternal joy and happiness). I&apos;ll be happy to do this in a follow-up patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>591967</commentid>
    <comment_count>5</comment_count>
    <who name="Tommy Widenflycht">tommyw</who>
    <bug_when>2012-03-30 02:13:27 -0700</bug_when>
    <thetext>There seems to be a major problem with the patch in that the files going to Source/Platform/chromium/public are missing. 

You could try generating the patch yourself with 
git diff --no-renames --no-prefix master..HEAD &gt;some_filename
and uploading it manually. If you are using git that is.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>592264</commentid>
    <comment_count>6</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-03-30 10:33:20 -0700</bug_when>
    <thetext>From the actual patch:

Index: Source/Platform/chromium/public/WebICECandidateDescriptor.h
===================================================================
--- Source/Platform/chromium/public/WebICECandidateDescriptor.h	(revision 112571)	(from Source/WebKit/chromium/public/platform/WebICECandidateDescriptor.h:112571)
+++ Source/Platform/chromium/public/WebICECandidateDescriptor.h	(working copy)
Index: Source/Platform/chromium/public/WebICEOptions.h
===================================================================
--- Source/Platform/chromium/public/WebICEOptions.h	(revision 112571)	(from Source/WebKit/chromium/public/platform/WebICEOptions.h:112571)
+++ Source/Platform/chromium/public/WebICEOptions.h	(working copy)


that looks fine to me. I&apos;ll patch this in locally to review</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>592272</commentid>
    <comment_count>7</comment_count>
      <attachid>134695</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-03-30 10:40:38 -0700</bug_when>
    <thetext>Comment on attachment 134695
Patch

Looks great! R=me. You&apos;ve got merge conflicts in the .gypis, but that&apos;s not a huge surprise.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>592296</commentid>
    <comment_count>8</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-03-30 10:57:27 -0700</bug_when>
    <thetext>Unfortunately, some of the earlier patches were rolled back, so I&apos;ll need to figure them out first,</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>592816</commentid>
    <comment_count>9</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-03-31 00:45:05 -0700</bug_when>
    <thetext>Committed r112784: &lt;http://trac.webkit.org/changeset/112784&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>592817</commentid>
    <comment_count>10</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-03-31 00:47:22 -0700</bug_when>
    <thetext>&gt; Unfortunately, some of the earlier patches were rolled back, so I&apos;ll need to figure them out first,

I managed to beat the Windows component build into shape and was able to re-land the earlier patches.

&gt; I like this patch a lot  and it can be further simplified by deleting the *Internal classes (to my eternal joy and happiness). I&apos;ll be happy to do this in a follow-up patch.

Yay!  That&apos;s the goal.  Getting rid of the &quot;Internal&quot; classes would be quite welcome.  Depending on how that works, we might need to do some more build system work.  Let me know if you run into any difficulties.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>134695</attachid>
            <date>2012-03-29 17:00:15 -0700</date>
            <delta_ts>2012-03-30 10:40:38 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-82677-20120329170014.patch</filename>
            <type>text/plain</type>
            <size>238562</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9QbGF0Zm9ybS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1Bs
YXRmb3JtL0NoYW5nZUxvZwkocmV2aXNpb24gMTEyNjEwKQorKysgU291cmNlL1BsYXRmb3JtL0No
YW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM5IEBACisyMDEyLTAzLTI5ICBBZGFt
IEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CisKKyAgICAgICAgW0Nocm9taXVtXSBEZWxldGUg
V2ViS2l0L2Nocm9taXVtL2JyaWRnZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9ODI2NzcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBUaGlzIHBhdGNoIG1vdmVzIGFsbCB0aGUgTWVkaWFTdHJlYW0tcmVsYXRl
ZCBwbGF0Zm9ybSBBUElzIGZyb20KKyAgICAgICAgV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9wbGF0
Zm9ybSBpbnRvIFBsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy4gVGhpcyBpcworICAgICAgICBwYXJ0
IG9mIGEgbGFyZ2VyIHByb2plY3QgdG8gbW9yZSBjbGVhcmx5IHNlcGFyYXRlIHRoZSBwbGF0Zm9y
bSBhbmQKKyAgICAgICAgY2xpZW50IHBvcnRpb25zIG9mIHRoZSBDaHJvbWl1bSBXZWJLaXQgQVBJ
LgorCisgICAgICAgICogUGxhdGZvcm0uZ3lwaToKKyAgICAgICAgKiBjaHJvbWl1bS9wdWJsaWMv
UGxhdGZvcm0uaDoKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChQbGF0Zm9ybSk6CisgICAg
ICAgIChXZWJLaXQ6OlBsYXRmb3JtOjpjcmVhdGVQZWVyQ29ubmVjdGlvbkhhbmRsZXIpOgorICAg
ICAgICAoV2ViS2l0OjpQbGF0Zm9ybTo6Y3JlYXRlUGVlckNvbm5lY3Rpb24wMEhhbmRsZXIpOgor
ICAgICAgICAoV2ViS2l0OjpQbGF0Zm9ybTo6Y3JlYXRlTWVkaWFTdHJlYW1DZW50ZXIpOgorICAg
ICAgICAqIGNocm9taXVtL3B1YmxpYy9XZWJJQ0VDYW5kaWRhdGVEZXNjcmlwdG9yLmg6IENvcGll
ZCBmcm9tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL3BsYXRmb3JtL1dlYklDRUNhbmRp
ZGF0ZURlc2NyaXB0b3IuaC4KKyAgICAgICAgKiBjaHJvbWl1bS9wdWJsaWMvV2ViSUNFT3B0aW9u
cy5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9wbGF0Zm9ybS9X
ZWJJQ0VPcHRpb25zLmguCisgICAgICAgICogY2hyb21pdW0vcHVibGljL1dlYk1lZGlhSGludHMu
aDogQ29waWVkIGZyb20gU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvcGxhdGZvcm0vV2Vi
TWVkaWFIaW50cy5oLgorICAgICAgICAqIGNocm9taXVtL3B1YmxpYy9XZWJNZWRpYVN0cmVhbUNl
bnRlci5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9wbGF0Zm9y
bS9XZWJNZWRpYVN0cmVhbUNlbnRlci5oLgorICAgICAgICAqIGNocm9taXVtL3B1YmxpYy9XZWJN
ZWRpYVN0cmVhbUNlbnRlckNsaWVudC5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3B1YmxpYy9wbGF0Zm9ybS9XZWJNZWRpYVN0cmVhbUNlbnRlckNsaWVudC5oLgorICAgICAg
ICAqIGNocm9taXVtL3B1YmxpYy9XZWJNZWRpYVN0cmVhbUNvbXBvbmVudC5oOiBDb3BpZWQgZnJv
bSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9wbGF0Zm9ybS9XZWJNZWRpYVN0cmVhbUNv
bXBvbmVudC5oLgorICAgICAgICAqIGNocm9taXVtL3B1YmxpYy9XZWJNZWRpYVN0cmVhbURlc2Ny
aXB0b3IuaDogQ29waWVkIGZyb20gU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvcGxhdGZv
cm0vV2ViTWVkaWFTdHJlYW1EZXNjcmlwdG9yLmguCisgICAgICAgICogY2hyb21pdW0vcHVibGlj
L1dlYk1lZGlhU3RyZWFtU291cmNlLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJLaXQvY2hyb21p
dW0vcHVibGljL3BsYXRmb3JtL1dlYk1lZGlhU3RyZWFtU291cmNlLmguCisgICAgICAgICogY2hy
b21pdW0vcHVibGljL1dlYk1lZGlhU3RyZWFtU291cmNlc1JlcXVlc3QuaDogQ29waWVkIGZyb20g
U291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvcGxhdGZvcm0vV2ViTWVkaWFTdHJlYW1Tb3Vy
Y2VzUmVxdWVzdC5oLgorICAgICAgICAqIGNocm9taXVtL3B1YmxpYy9XZWJQZWVyQ29ubmVjdGlv
bjAwSGFuZGxlci5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9w
bGF0Zm9ybS9XZWJQZWVyQ29ubmVjdGlvbjAwSGFuZGxlci5oLgorICAgICAgICAqIGNocm9taXVt
L3B1YmxpYy9XZWJQZWVyQ29ubmVjdGlvbjAwSGFuZGxlckNsaWVudC5oOiBDb3BpZWQgZnJvbSBT
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9wbGF0Zm9ybS9XZWJQZWVyQ29ubmVjdGlvbjAw
SGFuZGxlckNsaWVudC5oLgorICAgICAgICAqIGNocm9taXVtL3B1YmxpYy9XZWJQZWVyQ29ubmVj
dGlvbkhhbmRsZXIuaDogQ29waWVkIGZyb20gU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMv
cGxhdGZvcm0vV2ViUGVlckNvbm5lY3Rpb25IYW5kbGVyLmguCisgICAgICAgIChXZWJQZWVyQ29u
bmVjdGlvbkhhbmRsZXIpOgorICAgICAgICAqIGNocm9taXVtL3B1YmxpYy9XZWJQZWVyQ29ubmVj
dGlvbkhhbmRsZXJDbGllbnQuaDogQ29waWVkIGZyb20gU291cmNlL1dlYktpdC9jaHJvbWl1bS9w
dWJsaWMvcGxhdGZvcm0vV2ViUGVlckNvbm5lY3Rpb25IYW5kbGVyQ2xpZW50LmguCisgICAgICAg
ICogY2hyb21pdW0vcHVibGljL1dlYlNlc3Npb25EZXNjcmlwdGlvbkRlc2NyaXB0b3IuaDogQ29w
aWVkIGZyb20gU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvcGxhdGZvcm0vV2ViU2Vzc2lv
bkRlc2NyaXB0aW9uRGVzY3JpcHRvci5oLgorICAgICAgICAqIGNocm9taXVtL3B1YmxpYy9XZWJW
ZWN0b3IuaDogQ29waWVkIGZyb20gU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvcGxhdGZv
cm0vV2ViVmVjdG9yLmguCisKIDIwMTItMDMtMjkgIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0
Lm9yZz4KIAogICAgICAgICBbQ2hyb21pdW1dIE1vdmUgY3JlYXRlVVJMTG9hZGVyKCkgaW50byBQ
bGF0Zm9ybQpJbmRleDogU291cmNlL1BsYXRmb3JtL1BsYXRmb3JtLmd5cGkKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1BsYXRmb3JtL1BsYXRmb3JtLmd5cGkJKHJldmlzaW9uIDExMjU3MSkKKysrIFNv
dXJjZS9QbGF0Zm9ybS9QbGF0Zm9ybS5neXBpCSh3b3JraW5nIGNvcHkpCkBAIC00NywxNSArNDcs
MjkgQEAKICAgICAgICAgICAgICdjaHJvbWl1bS9wdWJsaWMvV2ViSFRUUEJvZHkuaCcsCiAgICAg
ICAgICAgICAnY2hyb21pdW0vcHVibGljL1dlYkhUVFBIZWFkZXJWaXNpdG9yLmgnLAogICAgICAg
ICAgICAgJ2Nocm9taXVtL3B1YmxpYy9XZWJIVFRQTG9hZEluZm8uaCcsCisgICAgICAgICAgICAn
Y2hyb21pdW0vcHVibGljL1dlYklDRUNhbmRpZGF0ZURlc2NyaXB0b3IuaCcsCisgICAgICAgICAg
ICAnY2hyb21pdW0vcHVibGljL1dlYklDRU9wdGlvbnMuaCcsCiAgICAgICAgICAgICAnY2hyb21p
dW0vcHVibGljL1dlYkxheWVyLmgnLAogICAgICAgICAgICAgJ2Nocm9taXVtL3B1YmxpYy9XZWJM
YXllclRyZWVWaWV3LmgnLAogICAgICAgICAgICAgJ2Nocm9taXVtL3B1YmxpYy9XZWJMYXllclRy
ZWVWaWV3Q2xpZW50LmgnLAorICAgICAgICAgICAgJ2Nocm9taXVtL3B1YmxpYy9XZWJNZWRpYUhp
bnRzLmgnLAorICAgICAgICAgICAgJ2Nocm9taXVtL3B1YmxpYy9XZWJNZWRpYVN0cmVhbUNlbnRl
ci5oJywKKyAgICAgICAgICAgICdjaHJvbWl1bS9wdWJsaWMvV2ViTWVkaWFTdHJlYW1DZW50ZXJD
bGllbnQuaCcsCisgICAgICAgICAgICAnY2hyb21pdW0vcHVibGljL1dlYk1lZGlhU3RyZWFtQ29t
cG9uZW50LmgnLAorICAgICAgICAgICAgJ2Nocm9taXVtL3B1YmxpYy9XZWJNZWRpYVN0cmVhbURl
c2NyaXB0b3IuaCcsCisgICAgICAgICAgICAnY2hyb21pdW0vcHVibGljL1dlYk1lZGlhU3RyZWFt
U291cmNlLmgnLAorICAgICAgICAgICAgJ2Nocm9taXVtL3B1YmxpYy9XZWJNZWRpYVN0cmVhbVNv
dXJjZXNSZXF1ZXN0LmgnLAogICAgICAgICAgICAgJ2Nocm9taXVtL3B1YmxpYy9XZWJNaW1lUmVn
aXN0cnkuaCcsCiAgICAgICAgICAgICAnY2hyb21pdW0vcHVibGljL1dlYk5vbkNvcHlhYmxlLmgn
LAorICAgICAgICAgICAgJ2Nocm9taXVtL3B1YmxpYy9XZWJQZWVyQ29ubmVjdGlvbjAwSGFuZGxl
ci5oJywKKyAgICAgICAgICAgICdjaHJvbWl1bS9wdWJsaWMvV2ViUGVlckNvbm5lY3Rpb24wMEhh
bmRsZXJDbGllbnQuaCcsCisgICAgICAgICAgICAnY2hyb21pdW0vcHVibGljL1dlYlBlZXJDb25u
ZWN0aW9uSGFuZGxlci5oJywKKyAgICAgICAgICAgICdjaHJvbWl1bS9wdWJsaWMvV2ViUGVlckNv
bm5lY3Rpb25IYW5kbGVyQ2xpZW50LmgnLAogICAgICAgICAgICAgJ2Nocm9taXVtL3B1YmxpYy9X
ZWJQb2ludC5oJywKICAgICAgICAgICAgICdjaHJvbWl1bS9wdWJsaWMvV2ViUHJpdmF0ZU93blB0
ci5oJywKICAgICAgICAgICAgICdjaHJvbWl1bS9wdWJsaWMvV2ViUHJpdmF0ZVB0ci5oJywKICAg
ICAgICAgICAgICdjaHJvbWl1bS9wdWJsaWMvV2ViUmVjdC5oJywKKyAgICAgICAgICAgICdjaHJv
bWl1bS9wdWJsaWMvV2ViU2Vzc2lvbkRlc2NyaXB0aW9uRGVzY3JpcHRvci5oJywKICAgICAgICAg
ICAgICdjaHJvbWl1bS9wdWJsaWMvV2ViU2l6ZS5oJywKICAgICAgICAgICAgICdjaHJvbWl1bS9w
dWJsaWMvV2ViU29saWRDb2xvckxheWVyLmgnLAogICAgICAgICAgICAgJ2Nocm9taXVtL3B1Ymxp
Yy9XZWJTdHJpbmcuaCcsCkBAIC02Niw2ICs4MCw3IEBACiAgICAgICAgICAgICAnY2hyb21pdW0v
cHVibGljL1dlYlVSTExvYWRlckNsaWVudC5oJywKICAgICAgICAgICAgICdjaHJvbWl1bS9wdWJs
aWMvV2ViVVJMUmVxdWVzdC5oJywKICAgICAgICAgICAgICdjaHJvbWl1bS9wdWJsaWMvV2ViVVJM
UmVzcG9uc2UuaCcsCisgICAgICAgICAgICAnY2hyb21pdW0vcHVibGljL1dlYlZlY3Rvci5oJywK
ICAgICAgICAgICAgICdjaHJvbWl1bS9zcmMvUGxhdGZvcm0uY3BwJywKICAgICAgICAgICAgICdj
aHJvbWl1bS9zcmMvV2ViQ1N0cmluZy5jcHAnLAogICAgICAgICAgICAgJ2Nocm9taXVtL3NyYy9X
ZWJGbG9hdFF1YWQuY3BwJywKSW5kZXg6IFNvdXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS9wdWJsaWMv
UGxhdGZvcm0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGlj
L1BsYXRmb3JtLmgJKHJldmlzaW9uIDExMjU3MSkKKysrIFNvdXJjZS9QbGF0Zm9ybS9jaHJvbWl1
bS9wdWJsaWMvUGxhdGZvcm0uaAkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUsMTIgQEAKIAog
bmFtZXNwYWNlIFdlYktpdCB7CiAKK2NsYXNzIFdlYk1lZGlhU3RyZWFtQ2VudGVyOworY2xhc3Mg
V2ViTWVkaWFTdHJlYW1DZW50ZXJDbGllbnQ7CitjbGFzcyBXZWJQZWVyQ29ubmVjdGlvbjAwSGFu
ZGxlcjsKK2NsYXNzIFdlYlBlZXJDb25uZWN0aW9uMDBIYW5kbGVyQ2xpZW50OworY2xhc3MgV2Vi
UGVlckNvbm5lY3Rpb25IYW5kbGVyOworY2xhc3MgV2ViUGVlckNvbm5lY3Rpb25IYW5kbGVyQ2xp
ZW50OwogY2xhc3MgV2ViVVJMTG9hZGVyOwogCiBjbGFzcyBQbGF0Zm9ybSB7CkBAIC00OCw2ICs1
NCwyMSBAQCBwdWJsaWM6CiAgICAgLy8gUmV0dXJucyBhIG5ldyBXZWJVUkxMb2FkZXIgaW5zdGFu
Y2UuCiAgICAgdmlydHVhbCBXZWJVUkxMb2FkZXIqIGNyZWF0ZVVSTExvYWRlcigpIHsgcmV0dXJu
IDA7IH0KIAorICAgIC8vIFdlYlJUQyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICAvLyBERVBSRUNBVEVECisgICAgLy8gQ3Jl
YXRlcyBhbiBXZWJQZWVyQ29ubmVjdGlvbkhhbmRsZXIgZm9yIERlcHJlY2F0ZWRQZWVyQ29ubmVj
dGlvbi4KKyAgICAvLyBNYXkgcmV0dXJuIG51bGwgaWYgV2ViUlRDIGZ1bmN0aW9uYWxpdHkgaXMg
bm90IGF2YWxpYWJsZSBvciBvdXQgb2YgcmVzb3VyY2VzLgorICAgIHZpcnR1YWwgV2ViUGVlckNv
bm5lY3Rpb25IYW5kbGVyKiBjcmVhdGVQZWVyQ29ubmVjdGlvbkhhbmRsZXIoV2ViUGVlckNvbm5l
Y3Rpb25IYW5kbGVyQ2xpZW50KikgeyByZXR1cm4gMDsgfQorCisgICAgLy8gQ3JlYXRlcyBhbiBX
ZWJQZWVyQ29ubmVjdGlvbjAwSGFuZGxlciBmb3IgUGVlckNvbm5lY3Rpb24wMC4KKyAgICAvLyBU
aGlzIGlzIGFuIGhpZ2hseSBleHBlcmltZW50YWwgZmVhdHVyZSBub3QgeWV0IGluIHRoZSBXZWJS
VEMgc3RhbmRhcmQuCisgICAgLy8gTWF5IHJldHVybiBudWxsIGlmIFdlYlJUQyBmdW5jdGlvbmFs
aXR5IGlzIG5vdCBhdmFsaWFibGUgb3Igb3V0IG9mIHJlc291cmNlcy4KKyAgICB2aXJ0dWFsIFdl
YlBlZXJDb25uZWN0aW9uMDBIYW5kbGVyKiBjcmVhdGVQZWVyQ29ubmVjdGlvbjAwSGFuZGxlcihX
ZWJQZWVyQ29ubmVjdGlvbjAwSGFuZGxlckNsaWVudCopIHsgcmV0dXJuIDA7IH0KKworICAgIC8v
IE1heSByZXR1cm4gbnVsbCBpZiBXZWJSVEMgZnVuY3Rpb25hbGl0eSBpcyBub3QgYXZhbGlhYmxl
IG9yIG91dCBvZiByZXNvdXJjZXMuCisgICAgdmlydHVhbCBXZWJNZWRpYVN0cmVhbUNlbnRlciog
Y3JlYXRlTWVkaWFTdHJlYW1DZW50ZXIoV2ViTWVkaWFTdHJlYW1DZW50ZXJDbGllbnQqKSB7IHJl
dHVybiAwOyB9CisKIHByb3RlY3RlZDoKICAgICB+UGxhdGZvcm0oKSB7IH0KIH07CkluZGV4OiBT
b3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYklDRUNhbmRpZGF0ZURlc2NyaXB0b3Iu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYklDRUNh
bmRpZGF0ZURlc2NyaXB0b3IuaAkocmV2aXNpb24gMTEyNTcxKQkoZnJvbSBTb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3B1YmxpYy9wbGF0Zm9ybS9XZWJJQ0VDYW5kaWRhdGVEZXNjcmlwdG9yLmg6MTEy
NTcxKQorKysgU291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJJQ0VDYW5kaWRhdGVE
ZXNjcmlwdG9yLmgJKHdvcmtpbmcgY29weSkKSW5kZXg6IFNvdXJjZS9QbGF0Zm9ybS9jaHJvbWl1
bS9wdWJsaWMvV2ViSUNFT3B0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9QbGF0Zm9ybS9j
aHJvbWl1bS9wdWJsaWMvV2ViSUNFT3B0aW9ucy5oCShyZXZpc2lvbiAxMTI1NzEpCShmcm9tIFNv
dXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL3BsYXRmb3JtL1dlYklDRU9wdGlvbnMuaDoxMTI1
NzEpCisrKyBTb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYklDRU9wdGlvbnMuaAko
d29ya2luZyBjb3B5KQpJbmRleDogU291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJN
ZWRpYUhpbnRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3B1Ymxp
Yy9XZWJNZWRpYUhpbnRzLmgJKHJldmlzaW9uIDExMjU3MSkJKGZyb20gU291cmNlL1dlYktpdC9j
aHJvbWl1bS9wdWJsaWMvcGxhdGZvcm0vV2ViTWVkaWFIaW50cy5oOjExMjU3MSkKKysrIFNvdXJj
ZS9QbGF0Zm9ybS9jaHJvbWl1bS9wdWJsaWMvV2ViTWVkaWFIaW50cy5oCSh3b3JraW5nIGNvcHkp
CkluZGV4OiBTb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYk1lZGlhU3RyZWFtQ2Vu
dGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJN
ZWRpYVN0cmVhbUNlbnRlci5oCShyZXZpc2lvbiAxMTI1NzEpCShmcm9tIFNvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vcHVibGljL3BsYXRmb3JtL1dlYk1lZGlhU3RyZWFtQ2VudGVyLmg6MTEyNTcxKQor
KysgU291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJNZWRpYVN0cmVhbUNlbnRlci5o
CSh3b3JraW5nIGNvcHkpCkluZGV4OiBTb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dl
Yk1lZGlhU3RyZWFtQ2VudGVyQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1BsYXRmb3Jt
L2Nocm9taXVtL3B1YmxpYy9XZWJNZWRpYVN0cmVhbUNlbnRlckNsaWVudC5oCShyZXZpc2lvbiAx
MTI1NzEpCShmcm9tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL3BsYXRmb3JtL1dlYk1l
ZGlhU3RyZWFtQ2VudGVyQ2xpZW50Lmg6MTEyNTcxKQorKysgU291cmNlL1BsYXRmb3JtL2Nocm9t
aXVtL3B1YmxpYy9XZWJNZWRpYVN0cmVhbUNlbnRlckNsaWVudC5oCSh3b3JraW5nIGNvcHkpCklu
ZGV4OiBTb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYk1lZGlhU3RyZWFtQ29tcG9u
ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJN
ZWRpYVN0cmVhbUNvbXBvbmVudC5oCShyZXZpc2lvbiAxMTI1NzEpCShmcm9tIFNvdXJjZS9XZWJL
aXQvY2hyb21pdW0vcHVibGljL3BsYXRmb3JtL1dlYk1lZGlhU3RyZWFtQ29tcG9uZW50Lmg6MTEy
NTcxKQorKysgU291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJNZWRpYVN0cmVhbUNv
bXBvbmVudC5oCSh3b3JraW5nIGNvcHkpCkluZGV4OiBTb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0v
cHVibGljL1dlYk1lZGlhU3RyZWFtRGVzY3JpcHRvci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9Q
bGF0Zm9ybS9jaHJvbWl1bS9wdWJsaWMvV2ViTWVkaWFTdHJlYW1EZXNjcmlwdG9yLmgJKHJldmlz
aW9uIDExMjU3MSkJKGZyb20gU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvcGxhdGZvcm0v
V2ViTWVkaWFTdHJlYW1EZXNjcmlwdG9yLmg6MTEyNTcxKQorKysgU291cmNlL1BsYXRmb3JtL2No
cm9taXVtL3B1YmxpYy9XZWJNZWRpYVN0cmVhbURlc2NyaXB0b3IuaAkod29ya2luZyBjb3B5KQpJ
bmRleDogU291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJNZWRpYVN0cmVhbVNvdXJj
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS9wdWJsaWMvV2ViTWVk
aWFTdHJlYW1Tb3VyY2UuaAkocmV2aXNpb24gMTEyNTcxKQkoZnJvbSBTb3VyY2UvV2ViS2l0L2No
cm9taXVtL3B1YmxpYy9wbGF0Zm9ybS9XZWJNZWRpYVN0cmVhbVNvdXJjZS5oOjExMjU3MSkKKysr
IFNvdXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS9wdWJsaWMvV2ViTWVkaWFTdHJlYW1Tb3VyY2UuaAko
d29ya2luZyBjb3B5KQpJbmRleDogU291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJN
ZWRpYVN0cmVhbVNvdXJjZXNSZXF1ZXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1BsYXRmb3Jt
L2Nocm9taXVtL3B1YmxpYy9XZWJNZWRpYVN0cmVhbVNvdXJjZXNSZXF1ZXN0LmgJKHJldmlzaW9u
IDExMjU3MSkJKGZyb20gU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvcGxhdGZvcm0vV2Vi
TWVkaWFTdHJlYW1Tb3VyY2VzUmVxdWVzdC5oOjExMjU3MSkKKysrIFNvdXJjZS9QbGF0Zm9ybS9j
aHJvbWl1bS9wdWJsaWMvV2ViTWVkaWFTdHJlYW1Tb3VyY2VzUmVxdWVzdC5oCSh3b3JraW5nIGNv
cHkpCkluZGV4OiBTb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYlBlZXJDb25uZWN0
aW9uMDBIYW5kbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3B1
YmxpYy9XZWJQZWVyQ29ubmVjdGlvbjAwSGFuZGxlci5oCShyZXZpc2lvbiAxMTI1NzEpCShmcm9t
IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL3BsYXRmb3JtL1dlYlBlZXJDb25uZWN0aW9u
MDBIYW5kbGVyLmg6MTEyNTcxKQorKysgU291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9X
ZWJQZWVyQ29ubmVjdGlvbjAwSGFuZGxlci5oCSh3b3JraW5nIGNvcHkpCkluZGV4OiBTb3VyY2Uv
UGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYlBlZXJDb25uZWN0aW9uMDBIYW5kbGVyQ2xpZW50
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJQZWVy
Q29ubmVjdGlvbjAwSGFuZGxlckNsaWVudC5oCShyZXZpc2lvbiAxMTI1NzEpCShmcm9tIFNvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL3BsYXRmb3JtL1dlYlBlZXJDb25uZWN0aW9uMDBIYW5k
bGVyQ2xpZW50Lmg6MTEyNTcxKQorKysgU291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9X
ZWJQZWVyQ29ubmVjdGlvbjAwSGFuZGxlckNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkluZGV4OiBT
b3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYlBlZXJDb25uZWN0aW9uSGFuZGxlci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS9wdWJsaWMvV2ViUGVlckNv
bm5lY3Rpb25IYW5kbGVyLmgJKHJldmlzaW9uIDExMjU3MSkJKGZyb20gU291cmNlL1dlYktpdC9j
aHJvbWl1bS9wdWJsaWMvcGxhdGZvcm0vV2ViUGVlckNvbm5lY3Rpb25IYW5kbGVyLmg6MTEyNTcx
KQorKysgU291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJQZWVyQ29ubmVjdGlvbkhh
bmRsZXIuaAkod29ya2luZyBjb3B5KQpJbmRleDogU291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3B1
YmxpYy9XZWJQZWVyQ29ubmVjdGlvbkhhbmRsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvUGxh
dGZvcm0vY2hyb21pdW0vcHVibGljL1dlYlBlZXJDb25uZWN0aW9uSGFuZGxlci5oCShyZXZpc2lv
biAxMTI1NzEpCisrKyBTb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYlBlZXJDb25u
ZWN0aW9uSGFuZGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw2IEBACiAjaWZuZGVm
IFdlYlBlZXJDb25uZWN0aW9uSGFuZGxlcl9oCiAjZGVmaW5lIFdlYlBlZXJDb25uZWN0aW9uSGFu
ZGxlcl9oCiAKLSNpbmNsdWRlICIuLi9XZWJTZWN1cml0eU9yaWdpbi5oIiAvLyBGSVhNRTogVGhp
cyBpcyBhIGxheWVyaW5nIHZpb2xhdGlvbi4KICNpbmNsdWRlICJXZWJTdHJpbmcuaCIKICNpbmNs
dWRlICJXZWJWZWN0b3IuaCIKIApAQCAtNTQsOSArNTMsNiBAQCBjbGFzcyBXZWJQZWVyQ29ubmVj
dGlvbkhhbmRsZXIgewogcHVibGljOgogICAgIHZpcnR1YWwgfldlYlBlZXJDb25uZWN0aW9uSGFu
ZGxlcigpIHsgfQogCi0gICAgLy8gREVQUkVDQVRFRAotICAgIHZpcnR1YWwgdm9pZCBpbml0aWFs
aXplKGNvbnN0IFdlYlN0cmluZyYgc2VydmVyQ29uZmlndXJhdGlvbiwgY29uc3QgV2ViU2VjdXJp
dHlPcmlnaW4mKSB7IH07Ci0KICAgICB2aXJ0dWFsIHZvaWQgaW5pdGlhbGl6ZShjb25zdCBXZWJT
dHJpbmcmIHNlcnZlckNvbmZpZ3VyYXRpb24sIGNvbnN0IFdlYlN0cmluZyYgdXNlcm5hbWUpIHsg
fTsKIAogICAgIHZpcnR1YWwgdm9pZCBwcm9kdWNlSW5pdGlhbE9mZmVyKGNvbnN0IFdlYlZlY3Rv
cjxXZWJNZWRpYVN0cmVhbURlc2NyaXB0b3I+JiBwZW5kaW5nQWRkU3RyZWFtcykgPSAwOwpJbmRl
eDogU291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJQZWVyQ29ubmVjdGlvbkhhbmRs
ZXJDbGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGlj
L1dlYlBlZXJDb25uZWN0aW9uSGFuZGxlckNsaWVudC5oCShyZXZpc2lvbiAxMTI1NzEpCShmcm9t
IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL3BsYXRmb3JtL1dlYlBlZXJDb25uZWN0aW9u
SGFuZGxlckNsaWVudC5oOjExMjU3MSkKKysrIFNvdXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS9wdWJs
aWMvV2ViUGVlckNvbm5lY3Rpb25IYW5kbGVyQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKSW5kZXg6
IFNvdXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS9wdWJsaWMvV2ViU2Vzc2lvbkRlc2NyaXB0aW9uRGVz
Y3JpcHRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS9wdWJsaWMv
V2ViU2Vzc2lvbkRlc2NyaXB0aW9uRGVzY3JpcHRvci5oCShyZXZpc2lvbiAxMTI1NzEpCShmcm9t
IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL3BsYXRmb3JtL1dlYlNlc3Npb25EZXNjcmlw
dGlvbkRlc2NyaXB0b3IuaDoxMTI1NzEpCisrKyBTb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vcHVi
bGljL1dlYlNlc3Npb25EZXNjcmlwdGlvbkRlc2NyaXB0b3IuaAkod29ya2luZyBjb3B5KQpJbmRl
eDogU291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJWZWN0b3IuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYlZlY3Rvci5oCShyZXZpc2lv
biAxMTI1NzEpCShmcm9tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL3BsYXRmb3JtL1dl
YlZlY3Rvci5oOjExMjU3MSkKKysrIFNvdXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS9wdWJsaWMvV2Vi
VmVjdG9yLmgJKHdvcmtpbmcgY29weSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDExMjYxMCkK
KysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM0
IEBACisyMDEyLTAzLTI5ICBBZGFtIEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CisKKyAgICAg
ICAgW0Nocm9taXVtXSBEZWxldGUgV2ViS2l0L2Nocm9taXVtL2JyaWRnZQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODI2NzcKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGVzZSBmaWxlcyBhcmUganVzdCBt
b3ZlZCBmcm9tIHRoZSBXZWJLaXQgbGF5ZXIgd2l0aCB0aGVpciBpbmNsdWRlCisgICAgICAgIGRp
cmVjdGl2ZXMgYWRqdXN0ZWQuCisKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICog
cGxhdGZvcm0vY2hyb21pdW0vc3VwcG9ydC9XZWJJQ0VDYW5kaWRhdGVEZXNjcmlwdG9yLmNwcDog
Q29waWVkIGZyb20gU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSUNFQ2FuZGlkYXRlRGVz
Y3JpcHRvci5jcHAuCisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vc3VwcG9ydC9XZWJJQ0VP
cHRpb25zLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSUNF
T3B0aW9ucy5jcHAuCisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vc3VwcG9ydC9XZWJNZWRp
YUhpbnRzLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTWVk
aWFIaW50cy5jcHAuCisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vc3VwcG9ydC9XZWJNZWRp
YVN0cmVhbUNvbXBvbmVudC5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYk1lZGlhU3RyZWFtQ29tcG9uZW50LmNwcC4KKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJv
bWl1bS9zdXBwb3J0L1dlYk1lZGlhU3RyZWFtRGVzY3JpcHRvci5jcHA6IENvcGllZCBmcm9tIFNv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYk1lZGlhU3RyZWFtRGVzY3JpcHRvci5jcHAuCisg
ICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vc3VwcG9ydC9XZWJNZWRpYVN0cmVhbVNvdXJjZS5j
cHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYk1lZGlhU3RyZWFt
U291cmNlLmNwcC4KKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9zdXBwb3J0L1dlYk1lZGlh
U3RyZWFtU291cmNlc1JlcXVlc3QuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJNZWRpYVN0cmVhbVNvdXJjZXNSZXF1ZXN0LmNwcC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9tZWRpYXN0cmVhbS9jaHJvbWl1bS9EZXByZWNhdGVkUGVlckNvbm5lY3Rpb25IYW5kbGVy
LmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYktpdC9jaHJvbWl1bS9icmlkZ2UvRGVwcmVjYXRl
ZFBlZXJDb25uZWN0aW9uSGFuZGxlci5jcHAuCisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJl
YW0vY2hyb21pdW0vRGVwcmVjYXRlZFBlZXJDb25uZWN0aW9uSGFuZGxlckludGVybmFsLmNwcDog
Q29waWVkIGZyb20gU291cmNlL1dlYktpdC9jaHJvbWl1bS9icmlkZ2UvRGVwcmVjYXRlZFBlZXJD
b25uZWN0aW9uSGFuZGxlckludGVybmFsLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OkRlcHJlY2F0
ZWRQZWVyQ29ubmVjdGlvbkhhbmRsZXJJbnRlcm5hbDo6RGVwcmVjYXRlZFBlZXJDb25uZWN0aW9u
SGFuZGxlckludGVybmFsKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9jaHJvbWl1
bS9EZXByZWNhdGVkUGVlckNvbm5lY3Rpb25IYW5kbGVySW50ZXJuYWwuaDogQ29waWVkIGZyb20g
U291cmNlL1dlYktpdC9jaHJvbWl1bS9icmlkZ2UvRGVwcmVjYXRlZFBlZXJDb25uZWN0aW9uSGFu
ZGxlckludGVybmFsLmguCisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vY2hyb21pdW0v
TWVkaWFTdHJlYW1DZW50ZXJDaHJvbWl1bS5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vYnJpZGdlL01lZGlhU3RyZWFtQ2VudGVyLmNwcC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9tZWRpYXN0cmVhbS9jaHJvbWl1bS9NZWRpYVN0cmVhbUNlbnRlckludGVybmFsLmNwcDogQ29w
aWVkIGZyb20gU291cmNlL1dlYktpdC9jaHJvbWl1bS9icmlkZ2UvTWVkaWFTdHJlYW1DZW50ZXJJ
bnRlcm5hbC5jcHAuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbUNlbnRlckludGVybmFs
OjpNZWRpYVN0cmVhbUNlbnRlckludGVybmFsKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0
cmVhbS9jaHJvbWl1bS9NZWRpYVN0cmVhbUNlbnRlckludGVybmFsLmg6IENvcGllZCBmcm9tIFNv
dXJjZS9XZWJLaXQvY2hyb21pdW0vYnJpZGdlL01lZGlhU3RyZWFtQ2VudGVySW50ZXJuYWwuaC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9jaHJvbWl1bS9QZWVyQ29ubmVjdGlvbjAw
SGFuZGxlci5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vYnJpZGdlL1Bl
ZXJDb25uZWN0aW9uMDBIYW5kbGVyLmNwcC4KKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVh
bS9jaHJvbWl1bS9QZWVyQ29ubmVjdGlvbjAwSGFuZGxlckludGVybmFsLmNwcDogQ29waWVkIGZy
b20gU291cmNlL1dlYktpdC9jaHJvbWl1bS9icmlkZ2UvUGVlckNvbm5lY3Rpb24wMEhhbmRsZXJJ
bnRlcm5hbC5jcHAuCisgICAgICAgIChXZWJDb3JlOjpQZWVyQ29ubmVjdGlvbjAwSGFuZGxlcklu
dGVybmFsOjpQZWVyQ29ubmVjdGlvbjAwSGFuZGxlckludGVybmFsKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9tZWRpYXN0cmVhbS9jaHJvbWl1bS9QZWVyQ29ubmVjdGlvbjAwSGFuZGxlckludGVybmFs
Lmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vYnJpZGdlL1BlZXJDb25uZWN0
aW9uMDBIYW5kbGVySW50ZXJuYWwuaC4KKwogMjAxMi0wMy0yOSAgTmF0ZSBDaGFwaW4gIDxqYXBo
ZXRAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFNpbXBsaWZ5IHJlcG9ydGluZyBhIG1haW4gcmVz
b3VyY2UgZXJyb3IgdG8gRG9jdW1lbnRMb2FkZXIgYW5kCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLmd5cGkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCShy
ZXZpc2lvbiAxMTI1NzkpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHdvcmtpbmcg
Y29weSkKQEAgLTQzNCw2ICs0MzQsMTUgQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9tZWRpYXN0
cmVhbS9QZWVyQ29ubmVjdGlvbjAwSGFuZGxlckNsaWVudC5oJywKICAgICAgICAgICAgICdwbGF0
Zm9ybS9tZWRpYXN0cmVhbS9TZXNzaW9uRGVzY3JpcHRpb25EZXNjcmlwdG9yLmNwcCcsCiAgICAg
ICAgICAgICAncGxhdGZvcm0vbWVkaWFzdHJlYW0vU2Vzc2lvbkRlc2NyaXB0aW9uRGVzY3JpcHRv
ci5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9tZWRpYXN0cmVhbS9jaHJvbWl1bS9EZXByZWNh
dGVkUGVlckNvbm5lY3Rpb25IYW5kbGVyLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vbWVk
aWFzdHJlYW0vY2hyb21pdW0vRGVwcmVjYXRlZFBlZXJDb25uZWN0aW9uSGFuZGxlckludGVybmFs
LmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vbWVkaWFzdHJlYW0vY2hyb21pdW0vRGVwcmVj
YXRlZFBlZXJDb25uZWN0aW9uSGFuZGxlckludGVybmFsLmgnLAorICAgICAgICAgICAgJ3BsYXRm
b3JtL21lZGlhc3RyZWFtL2Nocm9taXVtL01lZGlhU3RyZWFtQ2VudGVyQ2hyb21pdW0uY3BwJywK
KyAgICAgICAgICAgICdwbGF0Zm9ybS9tZWRpYXN0cmVhbS9jaHJvbWl1bS9NZWRpYVN0cmVhbUNl
bnRlckludGVybmFsLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vbWVkaWFzdHJlYW0vY2hy
b21pdW0vTWVkaWFTdHJlYW1DZW50ZXJJbnRlcm5hbC5oJywKKyAgICAgICAgICAgICdwbGF0Zm9y
bS9tZWRpYXN0cmVhbS9jaHJvbWl1bS9QZWVyQ29ubmVjdGlvbjAwSGFuZGxlci5jcHAnLAorICAg
ICAgICAgICAgJ3BsYXRmb3JtL21lZGlhc3RyZWFtL2Nocm9taXVtL1BlZXJDb25uZWN0aW9uMDBI
YW5kbGVySW50ZXJuYWwuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9tZWRpYXN0cmVhbS9j
aHJvbWl1bS9QZWVyQ29ubmVjdGlvbjAwSGFuZGxlckludGVybmFsLmgnLAogICAgICAgICAgICAg
J3BsYXRmb3JtL21vY2svRGV2aWNlT3JpZW50YXRpb25DbGllbnRNb2NrLmgnLAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL21vY2svR2VvbG9jYXRpb25DbGllbnRNb2NrLmgnLAogICAgICAgICAgICAg
J3BsYXRmb3JtL25ldHdvcmsvQXV0aGVudGljYXRpb25DaGFsbGVuZ2VCYXNlLmgnLApAQCAtMzI3
NCw2ICszMjgzLDE0IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vc3VwcG9ydC9X
ZWJEYXRhLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vc3VwcG9ydC9XZWJI
VFRQQm9keS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQvV2Vi
SFRUUExvYWRJbmZvLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vc3VwcG9y
dC9XZWJJQ0VDYW5kaWRhdGVEZXNjcmlwdG9yLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0v
Y2hyb21pdW0vc3VwcG9ydC9XZWJJQ0VPcHRpb25zLmNwcCcsCisgICAgICAgICAgICAncGxhdGZv
cm0vY2hyb21pdW0vc3VwcG9ydC9XZWJNZWRpYUhpbnRzLmNwcCcsCisgICAgICAgICAgICAncGxh
dGZvcm0vY2hyb21pdW0vc3VwcG9ydC9XZWJNZWRpYUhpbnRzLmNwcCcsCisgICAgICAgICAgICAn
cGxhdGZvcm0vY2hyb21pdW0vc3VwcG9ydC9XZWJNZWRpYVN0cmVhbUNvbXBvbmVudC5jcHAnLAor
ICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQvV2ViTWVkaWFTdHJlYW1EZXNj
cmlwdG9yLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vc3VwcG9ydC9XZWJN
ZWRpYVN0cmVhbVNvdXJjZS5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL3N1
cHBvcnQvV2ViTWVkaWFTdHJlYW1Tb3VyY2VzUmVxdWVzdC5jcHAnLAogICAgICAgICAgICAgJ3Bs
YXRmb3JtL2Nocm9taXVtL3N1cHBvcnQvV2ViVVJMLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZv
cm0vY2hyb21pdW0vc3VwcG9ydC9XZWJVUkxFcnJvci5jcHAnLAogICAgICAgICAgICAgJ3BsYXRm
b3JtL2Nocm9taXVtL3N1cHBvcnQvV2ViVVJMUmVxdWVzdC5jcHAnLApJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vc3VwcG9ydC9XZWJJQ0VDYW5kaWRhdGVEZXNjcmlwdG9y
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9zdXBw
b3J0L1dlYklDRUNhbmRpZGF0ZURlc2NyaXB0b3IuY3BwCShyZXZpc2lvbiAxMTI1NzEpCShmcm9t
IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklDRUNhbmRpZGF0ZURlc2NyaXB0b3IuY3Bw
OjExMjU3MSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQvV2Vi
SUNFQ2FuZGlkYXRlRGVzY3JpcHRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4OSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
CisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICog
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCisKKyNpbmNs
dWRlICJwbGF0Zm9ybS9XZWJJQ0VDYW5kaWRhdGVEZXNjcmlwdG9yLmgiCisKKyNpbmNsdWRlICJJ
Y2VDYW5kaWRhdGVEZXNjcmlwdG9yLmgiCisjaW5jbHVkZSAicGxhdGZvcm0vV2ViU3RyaW5nLmgi
CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKworV2Vi
SUNFQ2FuZGlkYXRlRGVzY3JpcHRvcjo6V2ViSUNFQ2FuZGlkYXRlRGVzY3JpcHRvcihJY2VDYW5k
aWRhdGVEZXNjcmlwdG9yKiBpY2VDYW5kaWRhdGUpCisgICAgOiBtX3ByaXZhdGUoaWNlQ2FuZGlk
YXRlKQoreworfQorCitXZWJJQ0VDYW5kaWRhdGVEZXNjcmlwdG9yOjpXZWJJQ0VDYW5kaWRhdGVE
ZXNjcmlwdG9yKFBhc3NSZWZQdHI8SWNlQ2FuZGlkYXRlRGVzY3JpcHRvcj4gaWNlQ2FuZGlkYXRl
KQorICAgIDogbV9wcml2YXRlKGljZUNhbmRpZGF0ZSkKK3sKK30KKwordm9pZCBXZWJJQ0VDYW5k
aWRhdGVEZXNjcmlwdG9yOjphc3NpZ24oY29uc3QgV2ViSUNFQ2FuZGlkYXRlRGVzY3JpcHRvciYg
b3RoZXIpCit7CisgICAgbV9wcml2YXRlID0gb3RoZXIubV9wcml2YXRlOworfQorCit2b2lkIFdl
YklDRUNhbmRpZGF0ZURlc2NyaXB0b3I6OnJlc2V0KCkKK3sKKyAgICBtX3ByaXZhdGUucmVzZXQo
KTsKK30KKwordm9pZCBXZWJJQ0VDYW5kaWRhdGVEZXNjcmlwdG9yOjppbml0aWFsaXplKGNvbnN0
IFdlYlN0cmluZyYgbGFiZWwsIGNvbnN0IFdlYlN0cmluZyYgY2FuZGlkYXRlTGluZSkKK3sKKyAg
ICBtX3ByaXZhdGUgPSBJY2VDYW5kaWRhdGVEZXNjcmlwdG9yOjpjcmVhdGUobGFiZWwsIGNhbmRp
ZGF0ZUxpbmUpOworfQorCitXZWJJQ0VDYW5kaWRhdGVEZXNjcmlwdG9yOjpvcGVyYXRvciBQYXNz
UmVmUHRyPFdlYkNvcmU6OkljZUNhbmRpZGF0ZURlc2NyaXB0b3I+KCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbV9wcml2YXRlLmdldCgpOworfQorCitXZWJTdHJpbmcgV2ViSUNFQ2FuZGlkYXRlRGVz
Y3JpcHRvcjo6bGFiZWwoKSBjb25zdAoreworICAgIEFTU0VSVCghbV9wcml2YXRlLmlzTnVsbCgp
KTsKKyAgICByZXR1cm4gbV9wcml2YXRlLmdldCgpLT5sYWJlbCgpOworfQorCitXZWJTdHJpbmcg
V2ViSUNFQ2FuZGlkYXRlRGVzY3JpcHRvcjo6Y2FuZGlkYXRlTGluZSgpIGNvbnN0Cit7CisgICAg
QVNTRVJUKCFtX3ByaXZhdGUuaXNOdWxsKCkpOworICAgIHJldHVybiBtX3ByaXZhdGUuZ2V0KCkt
PmNhbmRpZGF0ZUxpbmUoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAv
LyBFTkFCTEUoTUVESUFfU1RSRUFNKQorCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9j
aHJvbWl1bS9zdXBwb3J0L1dlYklDRUNhbmRpZGF0ZURlc2NyaXB0b3IuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQvV2ViSUNFQ2FuZGlk
YXRlRGVzY3JpcHRvci5jcHAJKHJldmlzaW9uIDExMjU3MikKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2Nocm9taXVtL3N1cHBvcnQvV2ViSUNFQ2FuZGlkYXRlRGVzY3JpcHRvci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMyLDEwICszMiwxMCBAQAogCiAjaWYgRU5BQkxFKE1FRElBX1NUUkVB
TSkKIAotI2luY2x1ZGUgInBsYXRmb3JtL1dlYklDRUNhbmRpZGF0ZURlc2NyaXB0b3IuaCIKKyNp
bmNsdWRlIDxwdWJsaWMvV2ViSUNFQ2FuZGlkYXRlRGVzY3JpcHRvci5oPgogCiAjaW5jbHVkZSAi
SWNlQ2FuZGlkYXRlRGVzY3JpcHRvci5oIgotI2luY2x1ZGUgInBsYXRmb3JtL1dlYlN0cmluZy5o
IgorI2luY2x1ZGUgPHB1YmxpYy9XZWJTdHJpbmcuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNv
cmU7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQvV2Vi
SUNFT3B0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hy
b21pdW0vc3VwcG9ydC9XZWJJQ0VPcHRpb25zLmNwcAkocmV2aXNpb24gMTEyNTcxKQkoZnJvbSBT
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJQ0VPcHRpb25zLmNwcDoxMTI1NzEpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9zdXBwb3J0L1dlYklDRU9wdGlvbnMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
ICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAg
ICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwor
ICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAor
ICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNp
ZiBFTkFCTEUoTUVESUFfU1RSRUFNKQorCisjaW5jbHVkZSAicGxhdGZvcm0vV2ViSUNFT3B0aW9u
cy5oIgorCisjaW5jbHVkZSAiSWNlT3B0aW9ucy5oIgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29y
ZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1dlYklDRU9wdGlvbnM6OldlYklDRU9wdGlvbnMo
Y29uc3QgUGFzc1JlZlB0cjxJY2VPcHRpb25zPiYgbWVkaWFIaW50cykKKyAgICA6IG1fcHJpdmF0
ZShtZWRpYUhpbnRzKQoreworfQorCit2b2lkIFdlYklDRU9wdGlvbnM6OmFzc2lnbihjb25zdCBX
ZWJJQ0VPcHRpb25zJiBvdGhlcikKK3sKKyAgICBtX3ByaXZhdGUgPSBvdGhlci5tX3ByaXZhdGU7
Cit9CisKK3ZvaWQgV2ViSUNFT3B0aW9uczo6aW5pdGlhbGl6ZShDYW5kaWRhdGVUeXBlIGNhbmRp
ZGF0ZVR5cGUpCit7CisgICAgQVNTRVJUKGlzTnVsbCgpKTsKKyAgICBtX3ByaXZhdGUgPSBJY2VP
cHRpb25zOjpjcmVhdGUoc3RhdGljX2Nhc3Q8SWNlT3B0aW9uczo6VXNlQ2FuZGlkYXRlc09wdGlv
bj4oY2FuZGlkYXRlVHlwZSkpOworfQorCit2b2lkIFdlYklDRU9wdGlvbnM6OnJlc2V0KCkKK3sK
KyAgICBtX3ByaXZhdGUucmVzZXQoKTsKK30KKworV2ViSUNFT3B0aW9uczo6Q2FuZGlkYXRlVHlw
ZSBXZWJJQ0VPcHRpb25zOjpjYW5kaWRhdGVUeXBlVG9Vc2UoKSBjb25zdAoreworICAgIEFTU0VS
VCghaXNOdWxsKCkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxDYW5kaWRhdGVUeXBlPihtX3By
aXZhdGUtPnVzZUNhbmRpZGF0ZXMoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisj
ZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkKKwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vY2hyb21pdW0vc3VwcG9ydC9XZWJJQ0VPcHRpb25zLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9zdXBwb3J0L1dlYklDRU9wdGlvbnMuY3Bw
CShyZXZpc2lvbiAxMTI1NzIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9z
dXBwb3J0L1dlYklDRU9wdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw3IEBA
CiAKICNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQogCi0jaW5jbHVkZSAicGxhdGZvcm0vV2ViSUNF
T3B0aW9ucy5oIgorI2luY2x1ZGUgPHB1YmxpYy9XZWJJQ0VPcHRpb25zLmg+CiAKICNpbmNsdWRl
ICJJY2VPcHRpb25zLmgiCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVt
L3N1cHBvcnQvV2ViTWVkaWFIaW50cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vY2hyb21pdW0vc3VwcG9ydC9XZWJNZWRpYUhpbnRzLmNwcAkocmV2aXNpb24gMTEy
NTcxKQkoZnJvbSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJNZWRpYUhpbnRzLmNwcDox
MTI1NzEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9zdXBwb3J0L1dlYk1l
ZGlhSGludHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzkgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0
aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAor
ICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQorCisjaW5jbHVkZSAicGxhdGZvcm0v
V2ViTWVkaWFIaW50cy5oIgorCisjaW5jbHVkZSAiTWVkaWFIaW50cy5oIgorCit1c2luZyBuYW1l
c3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1dlYk1lZGlhSGludHM6Oldl
Yk1lZGlhSGludHMoY29uc3QgUGFzc1JlZlB0cjxNZWRpYUhpbnRzPiYgbWVkaWFIaW50cykKKyAg
ICA6IG1fcHJpdmF0ZShtZWRpYUhpbnRzKQoreworfQorCit2b2lkIFdlYk1lZGlhSGludHM6OmFz
c2lnbihjb25zdCBXZWJNZWRpYUhpbnRzJiBvdGhlcikKK3sKKyAgICBtX3ByaXZhdGUgPSBvdGhl
ci5tX3ByaXZhdGU7Cit9CisKK3ZvaWQgV2ViTWVkaWFIaW50czo6aW5pdGlhbGl6ZShib29sIGF1
ZGlvLCBib29sIHZpZGVvKQoreworICAgIEFTU0VSVChpc051bGwoKSk7CisgICAgbV9wcml2YXRl
ID0gTWVkaWFIaW50czo6Y3JlYXRlKGF1ZGlvLCB2aWRlbyk7Cit9CisKK3ZvaWQgV2ViTWVkaWFI
aW50czo6cmVzZXQoKQoreworICAgIG1fcHJpdmF0ZS5yZXNldCgpOworfQorCitib29sIFdlYk1l
ZGlhSGludHM6OmF1ZGlvKCkgY29uc3QKK3sKKyAgICBBU1NFUlQoIWlzTnVsbCgpKTsKKyAgICBy
ZXR1cm4gbV9wcml2YXRlLT5hdWRpbygpOworfQorCitib29sIFdlYk1lZGlhSGludHM6OnZpZGVv
KCkgY29uc3QKK3sKKyAgICBBU1NFUlQoIWlzTnVsbCgpKTsKKyAgICByZXR1cm4gbV9wcml2YXRl
LT52aWRlbygpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJM
RShNRURJQV9TVFJFQU0pCisKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVt
L3N1cHBvcnQvV2ViTWVkaWFIaW50cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vY2hyb21pdW0vc3VwcG9ydC9XZWJNZWRpYUhpbnRzLmNwcAkocmV2aXNpb24gMTEy
NTcyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vc3VwcG9ydC9XZWJNZWRp
YUhpbnRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNyBAQAogCiAjaWYgRU5BQkxF
KE1FRElBX1NUUkVBTSkKIAotI2luY2x1ZGUgInBsYXRmb3JtL1dlYk1lZGlhSGludHMuaCIKKyNp
bmNsdWRlIDxwdWJsaWMvV2ViTWVkaWFIaW50cy5oPgogCiAjaW5jbHVkZSAiTWVkaWFIaW50cy5o
IgogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9zdXBwb3J0L1dlYk1l
ZGlhU3RyZWFtQ29tcG9uZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9jaHJvbWl1bS9zdXBwb3J0L1dlYk1lZGlhU3RyZWFtQ29tcG9uZW50LmNwcAkocmV2aXNp
b24gMTEyNTcxKQkoZnJvbSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJNZWRpYVN0cmVh
bUNvbXBvbmVudC5jcHA6MTEyNTcxKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21p
dW0vc3VwcG9ydC9XZWJNZWRpYVN0cmVhbUNvbXBvbmVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw4NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICog
bWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1l
IG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICog
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAq
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShNRURJQV9TVFJF
QU0pCisKKyNpbmNsdWRlICJwbGF0Zm9ybS9XZWJNZWRpYVN0cmVhbUNvbXBvbmVudC5oIgorCisj
aW5jbHVkZSAiTWVkaWFTdHJlYW1Db21wb25lbnQuaCIKKyNpbmNsdWRlICJwbGF0Zm9ybS9XZWJN
ZWRpYVN0cmVhbVNvdXJjZS5oIgorI2luY2x1ZGUgInBsYXRmb3JtL1dlYlN0cmluZy5oIgorI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVz
cGFjZSBXZWJLaXQgeworCitXZWJNZWRpYVN0cmVhbUNvbXBvbmVudDo6V2ViTWVkaWFTdHJlYW1D
b21wb25lbnQoV2ViQ29yZTo6TWVkaWFTdHJlYW1Db21wb25lbnQqIG1lZGlhU3RyZWFtQ29tcG9u
ZW50KQorICAgIDogbV9wcml2YXRlKG1lZGlhU3RyZWFtQ29tcG9uZW50KQoreworfQorCitXZWJN
ZWRpYVN0cmVhbUNvbXBvbmVudCYgV2ViTWVkaWFTdHJlYW1Db21wb25lbnQ6Om9wZXJhdG9yPShX
ZWJDb3JlOjpNZWRpYVN0cmVhbUNvbXBvbmVudCogbWVkaWFTdHJlYW1Db21wb25lbnQpCit7Cisg
ICAgbV9wcml2YXRlID0gbWVkaWFTdHJlYW1Db21wb25lbnQ7CisgICAgcmV0dXJuICp0aGlzOwor
fQorCit2b2lkIFdlYk1lZGlhU3RyZWFtQ29tcG9uZW50OjpyZXNldCgpCit7CisgICAgbV9wcml2
YXRlLnJlc2V0KCk7Cit9CisKK1dlYk1lZGlhU3RyZWFtQ29tcG9uZW50OjpvcGVyYXRvciBQYXNz
UmVmUHRyPE1lZGlhU3RyZWFtQ29tcG9uZW50PigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJp
dmF0ZS5nZXQoKTsKK30KKworV2ViTWVkaWFTdHJlYW1Db21wb25lbnQ6Om9wZXJhdG9yIE1lZGlh
U3RyZWFtQ29tcG9uZW50KigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS5nZXQoKTsK
K30KKworYm9vbCBXZWJNZWRpYVN0cmVhbUNvbXBvbmVudDo6aXNFbmFibGVkKCkgY29uc3QKK3sK
KyAgICBBU1NFUlQoIW1fcHJpdmF0ZS5pc051bGwoKSk7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS5n
ZXQoKS0+ZW5hYmxlZCgpOworfQorCitXZWJNZWRpYVN0cmVhbVNvdXJjZSBXZWJNZWRpYVN0cmVh
bUNvbXBvbmVudDo6c291cmNlKCkgY29uc3QKK3sKKyAgICBBU1NFUlQoIW1fcHJpdmF0ZS5pc051
bGwoKSk7CisgICAgcmV0dXJuIFdlYk1lZGlhU3RyZWFtU291cmNlKG1fcHJpdmF0ZS5nZXQoKS0+
c291cmNlKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJM
RShNRURJQV9TVFJFQU0pCisKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVt
L3N1cHBvcnQvV2ViTWVkaWFTdHJlYW1Db21wb25lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQvV2ViTWVkaWFTdHJlYW1Db21wb25l
bnQuY3BwCShyZXZpc2lvbiAxMTI1NzIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJv
bWl1bS9zdXBwb3J0L1dlYk1lZGlhU3RyZWFtQ29tcG9uZW50LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzIsMTEgKzMyLDExIEBACiAKICNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQogCi0jaW5jbHVk
ZSAicGxhdGZvcm0vV2ViTWVkaWFTdHJlYW1Db21wb25lbnQuaCIKKyNpbmNsdWRlIDxwdWJsaWMv
V2ViTWVkaWFTdHJlYW1Db21wb25lbnQuaD4KIAogI2luY2x1ZGUgIk1lZGlhU3RyZWFtQ29tcG9u
ZW50LmgiCi0jaW5jbHVkZSAicGxhdGZvcm0vV2ViTWVkaWFTdHJlYW1Tb3VyY2UuaCIKLSNpbmNs
dWRlICJwbGF0Zm9ybS9XZWJTdHJpbmcuaCIKKyNpbmNsdWRlIDxwdWJsaWMvV2ViTWVkaWFTdHJl
YW1Tb3VyY2UuaD4KKyNpbmNsdWRlIDxwdWJsaWMvV2ViU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQvV2ViTWVkaWFTdHJlYW1EZXNjcmlwdG9yLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9zdXBwb3J0
L1dlYk1lZGlhU3RyZWFtRGVzY3JpcHRvci5jcHAJKHJldmlzaW9uIDExMjU3MSkJKGZyb20gU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTWVkaWFTdHJlYW1EZXNjcmlwdG9yLmNwcDoxMTI1
NzEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9zdXBwb3J0L1dlYk1lZGlh
U3RyZWFtRGVzY3JpcHRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNTMgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICog
ZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBu
b3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVS
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAq
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQorCisjaW5jbHVkZSAi
cGxhdGZvcm0vV2ViTWVkaWFTdHJlYW1EZXNjcmlwdG9yLmgiCisKKyNpbmNsdWRlICJNZWRpYVN0
cmVhbUNvbXBvbmVudC5oIgorI2luY2x1ZGUgIk1lZGlhU3RyZWFtRGVzY3JpcHRvci5oIgorI2lu
Y2x1ZGUgIk1lZGlhU3RyZWFtU291cmNlLmgiCisjaW5jbHVkZSAicGxhdGZvcm0vV2ViTWVkaWFT
dHJlYW1Db21wb25lbnQuaCIKKyNpbmNsdWRlICJwbGF0Zm9ybS9XZWJNZWRpYVN0cmVhbVNvdXJj
ZS5oIgorI2luY2x1ZGUgInBsYXRmb3JtL1dlYlN0cmluZy5oIgorI2luY2x1ZGUgPHd0Zi9WZWN0
b3IuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJLaXQgewor
CitXZWJNZWRpYVN0cmVhbURlc2NyaXB0b3I6OldlYk1lZGlhU3RyZWFtRGVzY3JpcHRvcihjb25z
dCBQYXNzUmVmUHRyPFdlYkNvcmU6Ok1lZGlhU3RyZWFtRGVzY3JpcHRvcj4mIG1lZGlhU3RyZWFt
RGVzY3JpcHRvcikKKyAgICA6IG1fcHJpdmF0ZShtZWRpYVN0cmVhbURlc2NyaXB0b3IpCit7Cit9
CisKK1dlYk1lZGlhU3RyZWFtRGVzY3JpcHRvcjo6V2ViTWVkaWFTdHJlYW1EZXNjcmlwdG9yKFdl
YkNvcmU6Ok1lZGlhU3RyZWFtRGVzY3JpcHRvciogbWVkaWFTdHJlYW1EZXNjcmlwdG9yKQorICAg
IDogbV9wcml2YXRlKG1lZGlhU3RyZWFtRGVzY3JpcHRvcikKK3sKK30KKwordm9pZCBXZWJNZWRp
YVN0cmVhbURlc2NyaXB0b3I6OnJlc2V0KCkKK3sKKyAgICBtX3ByaXZhdGUucmVzZXQoKTsKK30K
KworV2ViU3RyaW5nIFdlYk1lZGlhU3RyZWFtRGVzY3JpcHRvcjo6bGFiZWwoKSBjb25zdAorewor
ICAgIHJldHVybiBtX3ByaXZhdGUtPmxhYmVsKCk7Cit9CisKKy8vIEZJWE1FOiBDbGVhbnVwIHdo
ZW4gdGhlIGNocm9taXVtIGNvZGUgaGFzIHN3aXRjaGVkIHRvIHRoZSBzcGxpdCBzb3VyY2VzIGlt
cGxlbWVudGF0aW9uLgordm9pZCBXZWJNZWRpYVN0cmVhbURlc2NyaXB0b3I6OnNvdXJjZXMoV2Vi
VmVjdG9yPFdlYk1lZGlhU3RyZWFtU291cmNlPiYgd2ViU291cmNlcykgY29uc3QKK3sKKyAgICBz
aXplX3QgbnVtYmVyT2ZBdWRpb1NvdXJjZXMgPSBtX3ByaXZhdGUtPm51bWJlck9mQXVkaW9Db21w
b25lbnRzKCk7CisgICAgc2l6ZV90IG51bWJlck9mVmlkZW9Tb3VyY2VzID0gbV9wcml2YXRlLT5u
dW1iZXJPZlZpZGVvQ29tcG9uZW50cygpOworICAgIFdlYlZlY3RvcjxXZWJNZWRpYVN0cmVhbVNv
dXJjZT4gcmVzdWx0KG51bWJlck9mQXVkaW9Tb3VyY2VzICsgbnVtYmVyT2ZWaWRlb1NvdXJjZXMp
OworICAgIHNpemVfdCBpID0gMDsKKyAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IG51bWJlck9m
QXVkaW9Tb3VyY2VzOyArK2ksICsraikKKyAgICAgICAgcmVzdWx0W2ldID0gbV9wcml2YXRlLT5h
dWRpb0NvbXBvbmVudChqKS0+c291cmNlKCk7CisgICAgZm9yIChzaXplX3QgaiA9IDA7IGogPCBu
dW1iZXJPZlZpZGVvU291cmNlczsgKytpLCArK2opCisgICAgICAgIHJlc3VsdFtpXSA9IG1fcHJp
dmF0ZS0+dmlkZW9Db21wb25lbnQoaiktPnNvdXJjZSgpOworICAgIHdlYlNvdXJjZXMuc3dhcChy
ZXN1bHQpOworfQorCit2b2lkIFdlYk1lZGlhU3RyZWFtRGVzY3JpcHRvcjo6YXVkaW9Tb3VyY2Vz
KFdlYlZlY3RvcjxXZWJNZWRpYVN0cmVhbUNvbXBvbmVudD4mIHdlYlNvdXJjZXMpIGNvbnN0Cit7
CisgICAgc2l6ZV90IG51bWJlck9mU291cmNlcyA9IG1fcHJpdmF0ZS0+bnVtYmVyT2ZBdWRpb0Nv
bXBvbmVudHMoKTsKKyAgICBXZWJWZWN0b3I8V2ViTWVkaWFTdHJlYW1Db21wb25lbnQ+IHJlc3Vs
dChudW1iZXJPZlNvdXJjZXMpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtYmVyT2ZT
b3VyY2VzOyArK2kpCisgICAgICAgIHJlc3VsdFtpXSA9IG1fcHJpdmF0ZS0+YXVkaW9Db21wb25l
bnQoaSk7CisgICAgd2ViU291cmNlcy5zd2FwKHJlc3VsdCk7Cit9CisKK3ZvaWQgV2ViTWVkaWFT
dHJlYW1EZXNjcmlwdG9yOjp2aWRlb1NvdXJjZXMoV2ViVmVjdG9yPFdlYk1lZGlhU3RyZWFtQ29t
cG9uZW50PiYgd2ViU291cmNlcykgY29uc3QKK3sKKyAgICBzaXplX3QgbnVtYmVyT2ZTb3VyY2Vz
ID0gbV9wcml2YXRlLT5udW1iZXJPZlZpZGVvQ29tcG9uZW50cygpOworICAgIFdlYlZlY3RvcjxX
ZWJNZWRpYVN0cmVhbUNvbXBvbmVudD4gcmVzdWx0KG51bWJlck9mU291cmNlcyk7CisgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBudW1iZXJPZlNvdXJjZXM7ICsraSkKKyAgICAgICAgcmVzdWx0
W2ldID0gbV9wcml2YXRlLT52aWRlb0NvbXBvbmVudChpKTsKKyAgICB3ZWJTb3VyY2VzLnN3YXAo
cmVzdWx0KTsKK30KKworV2ViTWVkaWFTdHJlYW1EZXNjcmlwdG9yJiBXZWJNZWRpYVN0cmVhbURl
c2NyaXB0b3I6Om9wZXJhdG9yPShjb25zdCBQYXNzUmVmUHRyPFdlYkNvcmU6Ok1lZGlhU3RyZWFt
RGVzY3JpcHRvcj4mIG1lZGlhU3RyZWFtRGVzY3JpcHRvcikKK3sKKyAgICBtX3ByaXZhdGUgPSBt
ZWRpYVN0cmVhbURlc2NyaXB0b3I7CisgICAgcmV0dXJuICp0aGlzOworfQorCitXZWJNZWRpYVN0
cmVhbURlc2NyaXB0b3I6Om9wZXJhdG9yIFBhc3NSZWZQdHI8V2ViQ29yZTo6TWVkaWFTdHJlYW1E
ZXNjcmlwdG9yPigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS5nZXQoKTsKK30KKwor
V2ViTWVkaWFTdHJlYW1EZXNjcmlwdG9yOjpvcGVyYXRvciBXZWJDb3JlOjpNZWRpYVN0cmVhbURl
c2NyaXB0b3IqKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlLmdldCgpOworfQorCisv
LyBGSVhNRTogQ2xlYW51cCB3aGVuIHRoZSBjaHJvbWl1bSBjb2RlIGhhcyBzd2l0Y2hlZCB0byB0
aGUgc3BsaXQgc291cmNlcyBpbXBsZW1lbnRhdGlvbi4KK3ZvaWQgV2ViTWVkaWFTdHJlYW1EZXNj
cmlwdG9yOjppbml0aWFsaXplKGNvbnN0IFdlYlN0cmluZyYgbGFiZWwsIGNvbnN0IFdlYlZlY3Rv
cjxXZWJNZWRpYVN0cmVhbVNvdXJjZT4mIHNvdXJjZXMpCit7CisgICAgTWVkaWFTdHJlYW1Tb3Vy
Y2VWZWN0b3IgYXVkaW8sIHZpZGVvOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc291cmNl
cy5zaXplKCk7ICsraSkgeworICAgICAgICBNZWRpYVN0cmVhbVNvdXJjZSogY3VyciA9IHNvdXJj
ZXNbaV07CisgICAgICAgIGlmIChjdXJyLT50eXBlKCkgPT0gTWVkaWFTdHJlYW1Tb3VyY2U6OlR5
cGVBdWRpbykKKyAgICAgICAgICAgIGF1ZGlvLmFwcGVuZChjdXJyKTsKKyAgICAgICAgZWxzZSBp
ZiAoY3Vyci0+dHlwZSgpID09IE1lZGlhU3RyZWFtU291cmNlOjpUeXBlVmlkZW8pCisgICAgICAg
ICAgICB2aWRlby5hcHBlbmQoY3Vycik7CisgICAgfQorICAgIG1fcHJpdmF0ZSA9IE1lZGlhU3Ry
ZWFtRGVzY3JpcHRvcjo6Y3JlYXRlKGxhYmVsLCBhdWRpbywgdmlkZW8pOworfQorCit2b2lkIFdl
Yk1lZGlhU3RyZWFtRGVzY3JpcHRvcjo6aW5pdGlhbGl6ZShjb25zdCBXZWJTdHJpbmcmIGxhYmVs
LCBjb25zdCBXZWJWZWN0b3I8V2ViTWVkaWFTdHJlYW1Tb3VyY2U+JiBhdWRpb1NvdXJjZXMsIGNv
bnN0IFdlYlZlY3RvcjxXZWJNZWRpYVN0cmVhbVNvdXJjZT4mIHZpZGVvU291cmNlcykKK3sKKyAg
ICBNZWRpYVN0cmVhbVNvdXJjZVZlY3RvciBhdWRpbywgdmlkZW87CisgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBhdWRpb1NvdXJjZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgTWVkaWFTdHJl
YW1Tb3VyY2UqIGN1cnIgPSBhdWRpb1NvdXJjZXNbaV07CisgICAgICAgIGF1ZGlvLmFwcGVuZChj
dXJyKTsKKyAgICB9CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2aWRlb1NvdXJjZXMuc2l6
ZSgpOyArK2kpIHsKKyAgICAgICAgTWVkaWFTdHJlYW1Tb3VyY2UqIGN1cnIgPSB2aWRlb1NvdXJj
ZXNbaV07CisgICAgICAgIHZpZGVvLmFwcGVuZChjdXJyKTsKKyAgICB9CisgICAgbV9wcml2YXRl
ID0gTWVkaWFTdHJlYW1EZXNjcmlwdG9yOjpjcmVhdGUobGFiZWwsIGF1ZGlvLCB2aWRlbyk7Cit9
CisKK3ZvaWQgV2ViTWVkaWFTdHJlYW1EZXNjcmlwdG9yOjphc3NpZ24oY29uc3QgV2ViTWVkaWFT
dHJlYW1EZXNjcmlwdG9yJiBvdGhlcikKK3sKKyAgICBtX3ByaXZhdGUgPSBvdGhlci5tX3ByaXZh
dGU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKE1FRElB
X1NUUkVBTSkKKwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vc3VwcG9y
dC9XZWJNZWRpYVN0cmVhbURlc2NyaXB0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQvV2ViTWVkaWFTdHJlYW1EZXNjcmlwdG9yLmNw
cAkocmV2aXNpb24gMTEyNTcyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0v
c3VwcG9ydC9XZWJNZWRpYVN0cmVhbURlc2NyaXB0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
MiwxNCArMzIsMTQgQEAKIAogI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCiAKLSNpbmNsdWRlICJw
bGF0Zm9ybS9XZWJNZWRpYVN0cmVhbURlc2NyaXB0b3IuaCIKKyNpbmNsdWRlIDxwdWJsaWMvV2Vi
TWVkaWFTdHJlYW1EZXNjcmlwdG9yLmg+CiAKICNpbmNsdWRlICJNZWRpYVN0cmVhbUNvbXBvbmVu
dC5oIgogI2luY2x1ZGUgIk1lZGlhU3RyZWFtRGVzY3JpcHRvci5oIgogI2luY2x1ZGUgIk1lZGlh
U3RyZWFtU291cmNlLmgiCi0jaW5jbHVkZSAicGxhdGZvcm0vV2ViTWVkaWFTdHJlYW1Db21wb25l
bnQuaCIKLSNpbmNsdWRlICJwbGF0Zm9ybS9XZWJNZWRpYVN0cmVhbVNvdXJjZS5oIgotI2luY2x1
ZGUgInBsYXRmb3JtL1dlYlN0cmluZy5oIgorI2luY2x1ZGUgPHB1YmxpYy9XZWJNZWRpYVN0cmVh
bUNvbXBvbmVudC5oPgorI2luY2x1ZGUgPHB1YmxpYy9XZWJNZWRpYVN0cmVhbVNvdXJjZS5oPgor
I2luY2x1ZGUgPHB1YmxpYy9XZWJTdHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAK
IHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Y2hyb21pdW0vc3VwcG9ydC9XZWJNZWRpYVN0cmVhbVNvdXJjZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vc3VwcG9ydC9XZWJNZWRpYVN0cmVhbVNv
dXJjZS5jcHAJKHJldmlzaW9uIDExMjU3MSkJKGZyb20gU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViTWVkaWFTdHJlYW1Tb3VyY2UuY3BwOjExMjU3MSkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2Nocm9taXVtL3N1cHBvcnQvV2ViTWVkaWFTdHJlYW1Tb3VyY2UuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMTAyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAq
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRo
ZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxF
KE1FRElBX1NUUkVBTSkKKworI2luY2x1ZGUgInBsYXRmb3JtL1dlYk1lZGlhU3RyZWFtU291cmNl
LmgiCisKKyNpbmNsdWRlICJNZWRpYVN0cmVhbVNvdXJjZS5oIgorI2luY2x1ZGUgInBsYXRmb3Jt
L1dlYlN0cmluZy5oIgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKwordXNpbmcgbmFtZXNwYWNl
IFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJNZWRpYVN0cmVhbVNvdXJjZTo6
V2ViTWVkaWFTdHJlYW1Tb3VyY2UoY29uc3QgUGFzc1JlZlB0cjxNZWRpYVN0cmVhbVNvdXJjZT4m
IG1lZGlhU3RyZWFtU291cmNlKQorICAgIDogbV9wcml2YXRlKG1lZGlhU3RyZWFtU291cmNlKQor
eworfQorCitXZWJNZWRpYVN0cmVhbVNvdXJjZSYgV2ViTWVkaWFTdHJlYW1Tb3VyY2U6Om9wZXJh
dG9yPShXZWJDb3JlOjpNZWRpYVN0cmVhbVNvdXJjZSogbWVkaWFTdHJlYW1Tb3VyY2UpCit7Cisg
ICAgbV9wcml2YXRlID0gbWVkaWFTdHJlYW1Tb3VyY2U7CisgICAgcmV0dXJuICp0aGlzOworfQor
Cit2b2lkIFdlYk1lZGlhU3RyZWFtU291cmNlOjphc3NpZ24oY29uc3QgV2ViTWVkaWFTdHJlYW1T
b3VyY2UmIG90aGVyKQoreworICAgIG1fcHJpdmF0ZSA9IG90aGVyLm1fcHJpdmF0ZTsKK30KKwor
dm9pZCBXZWJNZWRpYVN0cmVhbVNvdXJjZTo6cmVzZXQoKQoreworICAgIG1fcHJpdmF0ZS5yZXNl
dCgpOworfQorCitXZWJNZWRpYVN0cmVhbVNvdXJjZTo6b3BlcmF0b3IgUGFzc1JlZlB0cjxNZWRp
YVN0cmVhbVNvdXJjZT4oKSBjb25zdAoreworICAgIHJldHVybiBtX3ByaXZhdGUuZ2V0KCk7Cit9
CisKK1dlYk1lZGlhU3RyZWFtU291cmNlOjpvcGVyYXRvciBNZWRpYVN0cmVhbVNvdXJjZSooKSBj
b25zdAoreworICAgIHJldHVybiBtX3ByaXZhdGUuZ2V0KCk7Cit9CisKK3ZvaWQgV2ViTWVkaWFT
dHJlYW1Tb3VyY2U6OmluaXRpYWxpemUoY29uc3QgV2ViU3RyaW5nJiBpZCwgVHlwZSB0eXBlLCBj
b25zdCBXZWJTdHJpbmcmIG5hbWUpCit7CisgICAgbV9wcml2YXRlID0gTWVkaWFTdHJlYW1Tb3Vy
Y2U6OmNyZWF0ZShpZCwgc3RhdGljX2Nhc3Q8TWVkaWFTdHJlYW1Tb3VyY2U6OlR5cGU+KHR5cGUp
LCBuYW1lKTsKK30KKworV2ViU3RyaW5nIFdlYk1lZGlhU3RyZWFtU291cmNlOjppZCgpIGNvbnN0
Cit7CisgICAgQVNTRVJUKCFtX3ByaXZhdGUuaXNOdWxsKCkpOworICAgIHJldHVybiBtX3ByaXZh
dGUuZ2V0KCktPmlkKCk7Cit9CisKK1dlYk1lZGlhU3RyZWFtU291cmNlOjpUeXBlIFdlYk1lZGlh
U3RyZWFtU291cmNlOjp0eXBlKCkgY29uc3QKK3sKKyAgICBBU1NFUlQoIW1fcHJpdmF0ZS5pc051
bGwoKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFR5cGU+KG1fcHJpdmF0ZS5nZXQoKS0+dHlw
ZSgpKTsKK30KKworV2ViU3RyaW5nIFdlYk1lZGlhU3RyZWFtU291cmNlOjpuYW1lKCkgY29uc3QK
K3sKKyAgICBBU1NFUlQoIW1fcHJpdmF0ZS5pc051bGwoKSk7CisgICAgcmV0dXJuIG1fcHJpdmF0
ZS5nZXQoKS0+bmFtZSgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8v
IEVOQUJMRShNRURJQV9TVFJFQU0pCisKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2No
cm9taXVtL3N1cHBvcnQvV2ViTWVkaWFTdHJlYW1Tb3VyY2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQvV2ViTWVkaWFTdHJlYW1Tb3Vy
Y2UuY3BwCShyZXZpc2lvbiAxMTI1NzIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJv
bWl1bS9zdXBwb3J0L1dlYk1lZGlhU3RyZWFtU291cmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzIsMTAgKzMyLDEwIEBACiAKICNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQogCi0jaW5jbHVkZSAi
cGxhdGZvcm0vV2ViTWVkaWFTdHJlYW1Tb3VyY2UuaCIKKyNpbmNsdWRlIDxwdWJsaWMvV2ViTWVk
aWFTdHJlYW1Tb3VyY2UuaD4KIAogI2luY2x1ZGUgIk1lZGlhU3RyZWFtU291cmNlLmgiCi0jaW5j
bHVkZSAicGxhdGZvcm0vV2ViU3RyaW5nLmgiCisjaW5jbHVkZSA8cHVibGljL1dlYlN0cmluZy5o
PgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9zdXBwb3J0L1dlYk1lZGlhU3Ry
ZWFtU291cmNlc1JlcXVlc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2Nocm9taXVtL3N1cHBvcnQvV2ViTWVkaWFTdHJlYW1Tb3VyY2VzUmVxdWVzdC5jcHAJKHJl
dmlzaW9uIDExMjU3MSkJKGZyb20gU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTWVkaWFT
dHJlYW1Tb3VyY2VzUmVxdWVzdC5jcHA6MTEyNTcxKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vY2hyb21pdW0vc3VwcG9ydC9XZWJNZWRpYVN0cmVhbVNvdXJjZXNSZXF1ZXN0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDg4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
KyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5B
QkxFKE1FRElBX1NUUkVBTSkKKworI2luY2x1ZGUgInBsYXRmb3JtL1dlYk1lZGlhU3RyZWFtU291
cmNlc1JlcXVlc3QuaCIKKworI2luY2x1ZGUgIk1lZGlhU3RyZWFtQ2VudGVyLmgiCisjaW5jbHVk
ZSAiTWVkaWFTdHJlYW1Tb3VyY2UuaCIKKyNpbmNsdWRlICJwbGF0Zm9ybS9XZWJNZWRpYVN0cmVh
bVNvdXJjZS5oIgorI2luY2x1ZGUgInBsYXRmb3JtL1dlYlZlY3Rvci5oIgorI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJL
aXQgeworCitXZWJNZWRpYVN0cmVhbVNvdXJjZXNSZXF1ZXN0OjpXZWJNZWRpYVN0cmVhbVNvdXJj
ZXNSZXF1ZXN0KGNvbnN0IFBhc3NSZWZQdHI8V2ViQ29yZTo6TWVkaWFTdHJlYW1Tb3VyY2VzUXVl
cnlDbGllbnQ+JiBxdWVyeUNsaWVudCkKKyAgICA6IG1fcHJpdmF0ZShxdWVyeUNsaWVudCkKK3sK
K30KKwordm9pZCBXZWJNZWRpYVN0cmVhbVNvdXJjZXNSZXF1ZXN0OjpyZXNldCgpCit7CisgICAg
bV9wcml2YXRlLnJlc2V0KCk7Cit9CisKK2Jvb2wgV2ViTWVkaWFTdHJlYW1Tb3VyY2VzUmVxdWVz
dDo6YXVkaW8oKSBjb25zdAoreworICAgIEFTU0VSVCghaXNOdWxsKCkpOworICAgIHJldHVybiBt
X3ByaXZhdGUtPmF1ZGlvKCk7Cit9CisKK2Jvb2wgV2ViTWVkaWFTdHJlYW1Tb3VyY2VzUmVxdWVz
dDo6dmlkZW8oKSBjb25zdAoreworICAgIEFTU0VSVCghaXNOdWxsKCkpOworICAgIHJldHVybiBt
X3ByaXZhdGUtPnZpZGVvKCk7Cit9CisKK3ZvaWQgV2ViTWVkaWFTdHJlYW1Tb3VyY2VzUmVxdWVz
dDo6ZGlkQ29tcGxldGVRdWVyeShjb25zdCBXZWJWZWN0b3I8V2ViTWVkaWFTdHJlYW1Tb3VyY2U+
JiBhdWRpb1NvdXJjZXMsIGNvbnN0IFdlYlZlY3RvcjxXZWJNZWRpYVN0cmVhbVNvdXJjZT4mIHZp
ZGVvU291cmNlcykgY29uc3QKK3sKKyAgICBBU1NFUlQoIWlzTnVsbCgpKTsKKyAgICBNZWRpYVN0
cmVhbVNvdXJjZVZlY3RvciBhdWRpbzsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGF1ZGlv
U291cmNlcy5zaXplKCk7ICsraSkgeworICAgICAgICBNZWRpYVN0cmVhbVNvdXJjZSogY3VyciA9
IGF1ZGlvU291cmNlc1tpXTsKKyAgICAgICAgYXVkaW8uYXBwZW5kKGN1cnIpOworICAgIH0KKyAg
ICBNZWRpYVN0cmVhbVNvdXJjZVZlY3RvciB2aWRlbzsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IHZpZGVvU291cmNlcy5zaXplKCk7ICsraSkgeworICAgICAgICBNZWRpYVN0cmVhbVNvdXJj
ZSogY3VyciA9IHZpZGVvU291cmNlc1tpXTsKKyAgICAgICAgdmlkZW8uYXBwZW5kKGN1cnIpOwor
ICAgIH0KKyAgICBtX3ByaXZhdGUtPmRpZENvbXBsZXRlUXVlcnkoYXVkaW8sIHZpZGVvKTsKK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFN
KQorCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9zdXBwb3J0L1dlYk1l
ZGlhU3RyZWFtU291cmNlc1JlcXVlc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQvV2ViTWVkaWFTdHJlYW1Tb3VyY2VzUmVxdWVzdC5j
cHAJKHJldmlzaW9uIDExMjU3MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVt
L3N1cHBvcnQvV2ViTWVkaWFTdHJlYW1Tb3VyY2VzUmVxdWVzdC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMyLDEyICszMiwxMiBAQAogCiAjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKIAotI2luY2x1
ZGUgInBsYXRmb3JtL1dlYk1lZGlhU3RyZWFtU291cmNlc1JlcXVlc3QuaCIKKyNpbmNsdWRlIDxw
dWJsaWMvV2ViTWVkaWFTdHJlYW1Tb3VyY2VzUmVxdWVzdC5oPgogCiAjaW5jbHVkZSAiTWVkaWFT
dHJlYW1DZW50ZXIuaCIKICNpbmNsdWRlICJNZWRpYVN0cmVhbVNvdXJjZS5oIgotI2luY2x1ZGUg
InBsYXRmb3JtL1dlYk1lZGlhU3RyZWFtU291cmNlLmgiCi0jaW5jbHVkZSAicGxhdGZvcm0vV2Vi
VmVjdG9yLmgiCisjaW5jbHVkZSA8cHVibGljL1dlYk1lZGlhU3RyZWFtU291cmNlLmg+CisjaW5j
bHVkZSA8cHVibGljL1dlYlZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogdXNp
bmcgbmFtZXNwYWNlIFdlYkNvcmU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRp
YXN0cmVhbS9jaHJvbWl1bS9EZXByZWNhdGVkUGVlckNvbm5lY3Rpb25IYW5kbGVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9jaHJvbWl1bS9E
ZXByZWNhdGVkUGVlckNvbm5lY3Rpb25IYW5kbGVyLmNwcAkocmV2aXNpb24gMTEyNTcxKQkoZnJv
bSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL2JyaWRnZS9EZXByZWNhdGVkUGVlckNvbm5lY3Rpb25I
YW5kbGVyLmNwcDoxMTI1NzEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVh
bS9jaHJvbWl1bS9EZXByZWNhdGVkUGVlckNvbm5lY3Rpb25IYW5kbGVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDg4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
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
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKE1F
RElBX1NUUkVBTSkKKworI2luY2x1ZGUgIkRlcHJlY2F0ZWRQZWVyQ29ubmVjdGlvbkhhbmRsZXIu
aCIKKworI2luY2x1ZGUgIkRlcHJlY2F0ZWRQZWVyQ29ubmVjdGlvbkhhbmRsZXJDbGllbnQuaCIK
KyNpbmNsdWRlICJEZXByZWNhdGVkUGVlckNvbm5lY3Rpb25IYW5kbGVySW50ZXJuYWwuaCIKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitQYXNzT3duUHRyPERlcHJlY2F0ZWRQZWVyQ29ubmVjdGlv
bkhhbmRsZXI+IERlcHJlY2F0ZWRQZWVyQ29ubmVjdGlvbkhhbmRsZXI6OmNyZWF0ZShEZXByZWNh
dGVkUGVlckNvbm5lY3Rpb25IYW5kbGVyQ2xpZW50KiBjbGllbnQsIGNvbnN0IFN0cmluZyYgc2Vy
dmVyQ29uZmlndXJhdGlvbiwgY29uc3QgU3RyaW5nJiB1c2VybmFtZSkKK3sKKyAgICByZXR1cm4g
YWRvcHRQdHIobmV3IERlcHJlY2F0ZWRQZWVyQ29ubmVjdGlvbkhhbmRsZXIoY2xpZW50LCBzZXJ2
ZXJDb25maWd1cmF0aW9uLCB1c2VybmFtZSkpOworfQorCitEZXByZWNhdGVkUGVlckNvbm5lY3Rp
b25IYW5kbGVyOjpEZXByZWNhdGVkUGVlckNvbm5lY3Rpb25IYW5kbGVyKERlcHJlY2F0ZWRQZWVy
Q29ubmVjdGlvbkhhbmRsZXJDbGllbnQqIGNsaWVudCwgY29uc3QgU3RyaW5nJiBzZXJ2ZXJDb25m
aWd1cmF0aW9uLCBjb25zdCBTdHJpbmcmIHVzZXJuYW1lKQorICAgIDogbV9wcml2YXRlKGFkb3B0
UHRyKG5ldyBEZXByZWNhdGVkUGVlckNvbm5lY3Rpb25IYW5kbGVySW50ZXJuYWwoY2xpZW50LCBz
ZXJ2ZXJDb25maWd1cmF0aW9uLCB1c2VybmFtZSkpKQoreworfQorCitEZXByZWNhdGVkUGVlckNv
bm5lY3Rpb25IYW5kbGVyOjp+RGVwcmVjYXRlZFBlZXJDb25uZWN0aW9uSGFuZGxlcigpCit7Cit9
CisKK3ZvaWQgRGVwcmVjYXRlZFBlZXJDb25uZWN0aW9uSGFuZGxlcjo6cHJvZHVjZUluaXRpYWxP
ZmZlcihjb25zdCBNZWRpYVN0cmVhbURlc2NyaXB0b3JWZWN0b3ImIHBlbmRpbmdBZGRTdHJlYW1z
KQoreworICAgIG1fcHJpdmF0ZS0+cHJvZHVjZUluaXRpYWxPZmZlcihwZW5kaW5nQWRkU3RyZWFt
cyk7Cit9CisKK3ZvaWQgRGVwcmVjYXRlZFBlZXJDb25uZWN0aW9uSGFuZGxlcjo6aGFuZGxlSW5p
dGlhbE9mZmVyKGNvbnN0IFN0cmluZyYgc2RwKQoreworICAgIG1fcHJpdmF0ZS0+aGFuZGxlSW5p
dGlhbE9mZmVyKHNkcCk7Cit9CisKK3ZvaWQgRGVwcmVjYXRlZFBlZXJDb25uZWN0aW9uSGFuZGxl
cjo6cHJvY2Vzc1NEUChjb25zdCBTdHJpbmcmIHNkcCkKK3sKKyAgICBtX3ByaXZhdGUtPnByb2Nl
c3NTRFAoc2RwKTsKK30KKwordm9pZCBEZXByZWNhdGVkUGVlckNvbm5lY3Rpb25IYW5kbGVyOjpw
cm9jZXNzUGVuZGluZ1N0cmVhbXMoY29uc3QgTWVkaWFTdHJlYW1EZXNjcmlwdG9yVmVjdG9yJiBw
ZW5kaW5nQWRkU3RyZWFtcywgY29uc3QgTWVkaWFTdHJlYW1EZXNjcmlwdG9yVmVjdG9yJiBwZW5k
aW5nUmVtb3ZlU3RyZWFtcykKK3sKKyAgICBtX3ByaXZhdGUtPnByb2Nlc3NQZW5kaW5nU3RyZWFt
cyhwZW5kaW5nQWRkU3RyZWFtcywgcGVuZGluZ1JlbW92ZVN0cmVhbXMpOworfQorCit2b2lkIERl
cHJlY2F0ZWRQZWVyQ29ubmVjdGlvbkhhbmRsZXI6OnNlbmREYXRhU3RyZWFtTWVzc2FnZShjb25z
dCBjaGFyKiBkYXRhLCBzaXplX3QgbGVuZ3RoKQoreworICAgIG1fcHJpdmF0ZS0+c2VuZERhdGFT
dHJlYW1NZXNzYWdlKGRhdGEsIGxlbmd0aCk7Cit9CisKK3ZvaWQgRGVwcmVjYXRlZFBlZXJDb25u
ZWN0aW9uSGFuZGxlcjo6c3RvcCgpCit7CisgICAgbV9wcml2YXRlLT5zdG9wKCk7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9jaHJvbWl1bS9EZXByZWNh
dGVkUGVlckNvbm5lY3Rpb25IYW5kbGVySW50ZXJuYWwuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2Nocm9taXVtL0RlcHJlY2F0ZWRQZWVyQ29u
bmVjdGlvbkhhbmRsZXJJbnRlcm5hbC5jcHAJKHJldmlzaW9uIDExMjU3MSkJKGZyb20gU291cmNl
L1dlYktpdC9jaHJvbWl1bS9icmlkZ2UvRGVwcmVjYXRlZFBlZXJDb25uZWN0aW9uSGFuZGxlcklu
dGVybmFsLmNwcDoxMTI1NzEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVh
bS9jaHJvbWl1bS9EZXByZWNhdGVkUGVlckNvbm5lY3Rpb25IYW5kbGVySW50ZXJuYWwuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTM3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEx
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAq
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYg
RU5BQkxFKE1FRElBX1NUUkVBTSkKKworI2luY2x1ZGUgIkRlcHJlY2F0ZWRQZWVyQ29ubmVjdGlv
bkhhbmRsZXJJbnRlcm5hbC5oIgorCisjaW5jbHVkZSAiRGVwcmVjYXRlZFBlZXJDb25uZWN0aW9u
SGFuZGxlckNsaWVudC5oIgorI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCisjaW5jbHVkZSAi
V2ViS2l0LmgiCisjaW5jbHVkZSAicGxhdGZvcm0vV2ViS2l0UGxhdGZvcm1TdXBwb3J0LmgiCisj
aW5jbHVkZSAicGxhdGZvcm0vV2ViTWVkaWFTdHJlYW1EZXNjcmlwdG9yLmgiCisjaW5jbHVkZSAi
cGxhdGZvcm0vV2ViUGVlckNvbm5lY3Rpb25IYW5kbGVyLmgiCisjaW5jbHVkZSAicGxhdGZvcm0v
V2ViUGVlckNvbm5lY3Rpb25IYW5kbGVyQ2xpZW50LmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NPd25Q
dHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitEZXByZWNhdGVkUGVlckNvbm5lY3Rpb25I
YW5kbGVySW50ZXJuYWw6OkRlcHJlY2F0ZWRQZWVyQ29ubmVjdGlvbkhhbmRsZXJJbnRlcm5hbChE
ZXByZWNhdGVkUGVlckNvbm5lY3Rpb25IYW5kbGVyQ2xpZW50KiBjbGllbnQsIGNvbnN0IFN0cmlu
ZyYgc2VydmVyQ29uZmlndXJhdGlvbiwgY29uc3QgU3RyaW5nJiB1c2VybmFtZSkKKyAgICA6IG1f
Y2xpZW50KGNsaWVudCkKK3sKKyAgICBBU1NFUlQobV9jbGllbnQpOworICAgIG1fd2ViSGFuZGxl
ciA9IGFkb3B0UHRyKFdlYktpdDo6d2ViS2l0UGxhdGZvcm1TdXBwb3J0KCktPmNyZWF0ZVBlZXJD
b25uZWN0aW9uSGFuZGxlcih0aGlzKSk7CisgICAgLy8gRklYTUU6IFdoZW4gdGhlcmUgaXMgc29t
ZSBlcnJvciByZXBvcnRpbmcgYXZhbGlhYmxlIGluIHRoZSBQZWVyQ29ubmVjdGlvbiBvYmplY3Qg
cmVwb3J0CisgICAgLy8gaWYgd2UgZGlkbid0IGdldCBhIFdlYlBlZXJDb25uZWN0aW9uSGFuZGxl
ciBpbnN0YW5jZS4KKworICAgIGlmIChtX3dlYkhhbmRsZXIpIHsKKyAgICAgICAgLy8gRHVhbCBj
YWxscyBkdWUgdG8gQVBJIGNoYW5nZQorICAgICAgICBtX3dlYkhhbmRsZXItPmluaXRpYWxpemUo
c2VydmVyQ29uZmlndXJhdGlvbiwgdXNlcm5hbWUpOworCisgICAgICAgIC8vIERFUFJFQ0FURUQK
KyAgICAgICAgbV93ZWJIYW5kbGVyLT5pbml0aWFsaXplKHNlcnZlckNvbmZpZ3VyYXRpb24sIFNl
Y3VyaXR5T3JpZ2luOjpjcmVhdGVGcm9tU3RyaW5nKHVzZXJuYW1lKSk7CisgICAgfQorfQorCitE
ZXByZWNhdGVkUGVlckNvbm5lY3Rpb25IYW5kbGVySW50ZXJuYWw6On5EZXByZWNhdGVkUGVlckNv
bm5lY3Rpb25IYW5kbGVySW50ZXJuYWwoKQoreworfQorCit2b2lkIERlcHJlY2F0ZWRQZWVyQ29u
bmVjdGlvbkhhbmRsZXJJbnRlcm5hbDo6cHJvZHVjZUluaXRpYWxPZmZlcihjb25zdCBNZWRpYVN0
cmVhbURlc2NyaXB0b3JWZWN0b3ImIHBlbmRpbmdBZGRTdHJlYW1zKQoreworICAgIGlmIChtX3dl
YkhhbmRsZXIpCisgICAgICAgIG1fd2ViSGFuZGxlci0+cHJvZHVjZUluaXRpYWxPZmZlcihwZW5k
aW5nQWRkU3RyZWFtcyk7Cit9CisKK3ZvaWQgRGVwcmVjYXRlZFBlZXJDb25uZWN0aW9uSGFuZGxl
ckludGVybmFsOjpoYW5kbGVJbml0aWFsT2ZmZXIoY29uc3QgU3RyaW5nJiBzZHApCit7CisgICAg
aWYgKG1fd2ViSGFuZGxlcikKKyAgICAgICAgbV93ZWJIYW5kbGVyLT5oYW5kbGVJbml0aWFsT2Zm
ZXIoc2RwKTsKK30KKwordm9pZCBEZXByZWNhdGVkUGVlckNvbm5lY3Rpb25IYW5kbGVySW50ZXJu
YWw6OnByb2Nlc3NTRFAoY29uc3QgU3RyaW5nJiBzZHApCit7CisgICAgaWYgKG1fd2ViSGFuZGxl
cikKKyAgICAgICAgbV93ZWJIYW5kbGVyLT5wcm9jZXNzU0RQKHNkcCk7Cit9CisKK3ZvaWQgRGVw
cmVjYXRlZFBlZXJDb25uZWN0aW9uSGFuZGxlckludGVybmFsOjpwcm9jZXNzUGVuZGluZ1N0cmVh
bXMoY29uc3QgTWVkaWFTdHJlYW1EZXNjcmlwdG9yVmVjdG9yJiBwZW5kaW5nQWRkU3RyZWFtcywg
Y29uc3QgTWVkaWFTdHJlYW1EZXNjcmlwdG9yVmVjdG9yJiBwZW5kaW5nUmVtb3ZlU3RyZWFtcykK
K3sKKyAgICBpZiAobV93ZWJIYW5kbGVyKQorICAgICAgICBtX3dlYkhhbmRsZXItPnByb2Nlc3NQ
ZW5kaW5nU3RyZWFtcyhwZW5kaW5nQWRkU3RyZWFtcywgcGVuZGluZ1JlbW92ZVN0cmVhbXMpOwor
fQorCit2b2lkIERlcHJlY2F0ZWRQZWVyQ29ubmVjdGlvbkhhbmRsZXJJbnRlcm5hbDo6c2VuZERh
dGFTdHJlYW1NZXNzYWdlKGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBsZW5ndGgpCit7CisgICAg
aWYgKG1fd2ViSGFuZGxlcikKKyAgICAgICAgbV93ZWJIYW5kbGVyLT5zZW5kRGF0YVN0cmVhbU1l
c3NhZ2UoZGF0YSwgbGVuZ3RoKTsKK30KKwordm9pZCBEZXByZWNhdGVkUGVlckNvbm5lY3Rpb25I
YW5kbGVySW50ZXJuYWw6OnN0b3AoKQoreworICAgIGlmIChtX3dlYkhhbmRsZXIpCisgICAgICAg
IG1fd2ViSGFuZGxlci0+c3RvcCgpOworfQorCit2b2lkIERlcHJlY2F0ZWRQZWVyQ29ubmVjdGlv
bkhhbmRsZXJJbnRlcm5hbDo6ZGlkQ29tcGxldGVJQ0VQcm9jZXNzaW5nKCkKK3sKKyAgICBpZiAo
bV93ZWJIYW5kbGVyKQorICAgICAgICBtX2NsaWVudC0+ZGlkQ29tcGxldGVJQ0VQcm9jZXNzaW5n
KCk7Cit9CisKK3ZvaWQgRGVwcmVjYXRlZFBlZXJDb25uZWN0aW9uSGFuZGxlckludGVybmFsOjpk
aWRHZW5lcmF0ZVNEUChjb25zdCBXZWJLaXQ6OldlYlN0cmluZyYgc2RwKQoreworICAgIGlmICht
X3dlYkhhbmRsZXIpCisgICAgICAgIG1fY2xpZW50LT5kaWRHZW5lcmF0ZVNEUChzZHApOworfQor
Cit2b2lkIERlcHJlY2F0ZWRQZWVyQ29ubmVjdGlvbkhhbmRsZXJJbnRlcm5hbDo6ZGlkUmVjZWl2
ZURhdGFTdHJlYW1NZXNzYWdlKGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBsZW5ndGgpCit7Cisg
ICAgaWYgKG1fd2ViSGFuZGxlcikKKyAgICAgICAgbV9jbGllbnQtPmRpZFJlY2VpdmVEYXRhU3Ry
ZWFtTWVzc2FnZShkYXRhLCBsZW5ndGgpOworfQorCit2b2lkIERlcHJlY2F0ZWRQZWVyQ29ubmVj
dGlvbkhhbmRsZXJJbnRlcm5hbDo6ZGlkQWRkUmVtb3RlU3RyZWFtKGNvbnN0IFdlYktpdDo6V2Vi
TWVkaWFTdHJlYW1EZXNjcmlwdG9yJiB3ZWJNZWRpYVN0cmVhbURlc2NyaXB0b3IpCit7CisgICAg
aWYgKG1fd2ViSGFuZGxlcikKKyAgICAgICAgbV9jbGllbnQtPmRpZEFkZFJlbW90ZVN0cmVhbSh3
ZWJNZWRpYVN0cmVhbURlc2NyaXB0b3IpOworfQorCit2b2lkIERlcHJlY2F0ZWRQZWVyQ29ubmVj
dGlvbkhhbmRsZXJJbnRlcm5hbDo6ZGlkUmVtb3ZlUmVtb3RlU3RyZWFtKGNvbnN0IFdlYktpdDo6
V2ViTWVkaWFTdHJlYW1EZXNjcmlwdG9yJiB3ZWJNZWRpYVN0cmVhbURlc2NyaXB0b3IpCit7Cisg
ICAgaWYgKG1fd2ViSGFuZGxlcikKKyAgICAgICAgbV9jbGllbnQtPmRpZFJlbW92ZVJlbW90ZVN0
cmVhbSh3ZWJNZWRpYVN0cmVhbURlc2NyaXB0b3IpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKQpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vY2hyb21pdW0vRGVwcmVjYXRlZFBlZXJDb25uZWN0aW9u
SGFuZGxlckludGVybmFsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tZWRpYXN0cmVhbS9jaHJvbWl1bS9EZXByZWNhdGVkUGVlckNvbm5lY3Rpb25IYW5kbGVySW50
ZXJuYWwuY3BwCShyZXZpc2lvbiAxMTI1NzEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9jaHJvbWl1bS9EZXByZWNhdGVkUGVlckNvbm5lY3Rpb25IYW5kbGVySW50ZXJu
YWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwxMiArMzUsMTAgQEAKICNpbmNsdWRlICJEZXBy
ZWNhdGVkUGVlckNvbm5lY3Rpb25IYW5kbGVySW50ZXJuYWwuaCIKIAogI2luY2x1ZGUgIkRlcHJl
Y2F0ZWRQZWVyQ29ubmVjdGlvbkhhbmRsZXJDbGllbnQuaCIKLSNpbmNsdWRlICJTZWN1cml0eU9y
aWdpbi5oIgotI2luY2x1ZGUgIldlYktpdC5oIgotI2luY2x1ZGUgInBsYXRmb3JtL1dlYktpdFBs
YXRmb3JtU3VwcG9ydC5oIgotI2luY2x1ZGUgInBsYXRmb3JtL1dlYk1lZGlhU3RyZWFtRGVzY3Jp
cHRvci5oIgotI2luY2x1ZGUgInBsYXRmb3JtL1dlYlBlZXJDb25uZWN0aW9uSGFuZGxlci5oIgot
I2luY2x1ZGUgInBsYXRmb3JtL1dlYlBlZXJDb25uZWN0aW9uSGFuZGxlckNsaWVudC5oIgorI2lu
Y2x1ZGUgPHB1YmxpYy9QbGF0Zm9ybS5oPgorI2luY2x1ZGUgPHB1YmxpYy9XZWJNZWRpYVN0cmVh
bURlc2NyaXB0b3IuaD4KKyNpbmNsdWRlIDxwdWJsaWMvV2ViUGVlckNvbm5lY3Rpb25IYW5kbGVy
Lmg+CisjaW5jbHVkZSA8cHVibGljL1dlYlBlZXJDb25uZWN0aW9uSGFuZGxlckNsaWVudC5oPgog
I2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTQ5
LDE3ICs0NywxMiBAQCBEZXByZWNhdGVkUGVlckNvbm5lY3Rpb25IYW5kbGVySW50ZXJuYWw6CiAg
ICAgOiBtX2NsaWVudChjbGllbnQpCiB7CiAgICAgQVNTRVJUKG1fY2xpZW50KTsKLSAgICBtX3dl
YkhhbmRsZXIgPSBhZG9wdFB0cihXZWJLaXQ6OndlYktpdFBsYXRmb3JtU3VwcG9ydCgpLT5jcmVh
dGVQZWVyQ29ubmVjdGlvbkhhbmRsZXIodGhpcykpOworICAgIG1fd2ViSGFuZGxlciA9IGFkb3B0
UHRyKFdlYktpdDo6UGxhdGZvcm06OmN1cnJlbnQoKS0+Y3JlYXRlUGVlckNvbm5lY3Rpb25IYW5k
bGVyKHRoaXMpKTsKICAgICAvLyBGSVhNRTogV2hlbiB0aGVyZSBpcyBzb21lIGVycm9yIHJlcG9y
dGluZyBhdmFsaWFibGUgaW4gdGhlIFBlZXJDb25uZWN0aW9uIG9iamVjdCByZXBvcnQKICAgICAv
LyBpZiB3ZSBkaWRuJ3QgZ2V0IGEgV2ViUGVlckNvbm5lY3Rpb25IYW5kbGVyIGluc3RhbmNlLgog
Ci0gICAgaWYgKG1fd2ViSGFuZGxlcikgewotICAgICAgICAvLyBEdWFsIGNhbGxzIGR1ZSB0byBB
UEkgY2hhbmdlCisgICAgaWYgKG1fd2ViSGFuZGxlcikKICAgICAgICAgbV93ZWJIYW5kbGVyLT5p
bml0aWFsaXplKHNlcnZlckNvbmZpZ3VyYXRpb24sIHVzZXJuYW1lKTsKLQotICAgICAgICAvLyBE
RVBSRUNBVEVECi0gICAgICAgIG1fd2ViSGFuZGxlci0+aW5pdGlhbGl6ZShzZXJ2ZXJDb25maWd1
cmF0aW9uLCBTZWN1cml0eU9yaWdpbjo6Y3JlYXRlRnJvbVN0cmluZyh1c2VybmFtZSkpOwotICAg
IH0KIH0KIAogRGVwcmVjYXRlZFBlZXJDb25uZWN0aW9uSGFuZGxlckludGVybmFsOjp+RGVwcmVj
YXRlZFBlZXJDb25uZWN0aW9uSGFuZGxlckludGVybmFsKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21lZGlhc3RyZWFtL2Nocm9taXVtL0RlcHJlY2F0ZWRQZWVyQ29ubmVjdGlvbkhh
bmRsZXJJbnRlcm5hbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21l
ZGlhc3RyZWFtL2Nocm9taXVtL0RlcHJlY2F0ZWRQZWVyQ29ubmVjdGlvbkhhbmRsZXJJbnRlcm5h
bC5oCShyZXZpc2lvbiAxMTI1NzEpCShmcm9tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vYnJpZGdl
L0RlcHJlY2F0ZWRQZWVyQ29ubmVjdGlvbkhhbmRsZXJJbnRlcm5hbC5oOjExMjU3MSkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2Nocm9taXVtL0RlcHJlY2F0ZWRQZWVy
Q29ubmVjdGlvbkhhbmRsZXJJbnRlcm5hbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODAg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisg
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUg
SW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAq
IE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaWZuZGVmIERlcHJlY2F0ZWRQZWVyQ29ubmVjdGlvbkhhbmRsZXJJbnRlcm5hbF9oCisjZGVm
aW5lIERlcHJlY2F0ZWRQZWVyQ29ubmVjdGlvbkhhbmRsZXJJbnRlcm5hbF9oCisKKyNpZiBFTkFC
TEUoTUVESUFfU1RSRUFNKQorCisjaW5jbHVkZSAiTWVkaWFTdHJlYW1EZXNjcmlwdG9yLmgiCisj
aW5jbHVkZSAicGxhdGZvcm0vV2ViUGVlckNvbm5lY3Rpb25IYW5kbGVyQ2xpZW50LmgiCisjaW5j
bHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVk
ZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworY2xhc3MgV2Vi
UGVlckNvbm5lY3Rpb25IYW5kbGVyOworY2xhc3MgV2ViU3RyaW5nOworY2xhc3MgV2ViTWVkaWFT
dHJlYW1EZXNjcmlwdG9yOworfQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIERlcHJl
Y2F0ZWRQZWVyQ29ubmVjdGlvbkhhbmRsZXJDbGllbnQ7CisKK2NsYXNzIERlcHJlY2F0ZWRQZWVy
Q29ubmVjdGlvbkhhbmRsZXJJbnRlcm5hbCA6IHB1YmxpYyBXZWJLaXQ6OldlYlBlZXJDb25uZWN0
aW9uSGFuZGxlckNsaWVudCB7CitwdWJsaWM6CisgICAgRGVwcmVjYXRlZFBlZXJDb25uZWN0aW9u
SGFuZGxlckludGVybmFsKERlcHJlY2F0ZWRQZWVyQ29ubmVjdGlvbkhhbmRsZXJDbGllbnQqLCBj
b25zdCBTdHJpbmcmIHNlcnZlckNvbmZpZ3VyYXRpb24sIGNvbnN0IFN0cmluZyYgdXNlcm5hbWUp
OworICAgIH5EZXByZWNhdGVkUGVlckNvbm5lY3Rpb25IYW5kbGVySW50ZXJuYWwoKTsKKworICAg
IHZpcnR1YWwgdm9pZCBwcm9kdWNlSW5pdGlhbE9mZmVyKGNvbnN0IE1lZGlhU3RyZWFtRGVzY3Jp
cHRvclZlY3RvciYgcGVuZGluZ0FkZFN0cmVhbXMpOworICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVJ
bml0aWFsT2ZmZXIoY29uc3QgU3RyaW5nJiBzZHApOworICAgIHZpcnR1YWwgdm9pZCBwcm9jZXNz
U0RQKGNvbnN0IFN0cmluZyYgc2RwKTsKKyAgICB2aXJ0dWFsIHZvaWQgcHJvY2Vzc1BlbmRpbmdT
dHJlYW1zKGNvbnN0IE1lZGlhU3RyZWFtRGVzY3JpcHRvclZlY3RvciYgcGVuZGluZ0FkZFN0cmVh
bXMsIGNvbnN0IE1lZGlhU3RyZWFtRGVzY3JpcHRvclZlY3RvciYgcGVuZGluZ1JlbW92ZVN0cmVh
bXMpOworICAgIHZpcnR1YWwgdm9pZCBzZW5kRGF0YVN0cmVhbU1lc3NhZ2UoY29uc3QgY2hhciog
ZGF0YSwgc2l6ZV90IGxlbmd0aCk7CisgICAgdmlydHVhbCB2b2lkIHN0b3AoKTsKKworICAgIC8v
IFdlYktpdDo6V2ViUGVlckNvbm5lY3Rpb25IYW5kbGVyQ2xpZW50IGltcGxlbWVudGF0aW9uLgor
ICAgIHZpcnR1YWwgdm9pZCBkaWRDb21wbGV0ZUlDRVByb2Nlc3NpbmcoKTsKKyAgICB2aXJ0dWFs
IHZvaWQgZGlkR2VuZXJhdGVTRFAoY29uc3QgV2ViS2l0OjpXZWJTdHJpbmcmIHNkcCk7CisgICAg
dmlydHVhbCB2b2lkIGRpZFJlY2VpdmVEYXRhU3RyZWFtTWVzc2FnZShjb25zdCBjaGFyKiBkYXRh
LCBzaXplX3QgbGVuZ3RoKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkQWRkUmVtb3RlU3RyZWFtKGNv
bnN0IFdlYktpdDo6V2ViTWVkaWFTdHJlYW1EZXNjcmlwdG9yJik7CisgICAgdmlydHVhbCB2b2lk
IGRpZFJlbW92ZVJlbW90ZVN0cmVhbShjb25zdCBXZWJLaXQ6OldlYk1lZGlhU3RyZWFtRGVzY3Jp
cHRvciYpOworCitwcml2YXRlOgorICAgIE93blB0cjxXZWJLaXQ6OldlYlBlZXJDb25uZWN0aW9u
SGFuZGxlcj4gbV93ZWJIYW5kbGVyOworICAgIERlcHJlY2F0ZWRQZWVyQ29ubmVjdGlvbkhhbmRs
ZXJDbGllbnQqIG1fY2xpZW50OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5k
aWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkKKworI2VuZGlmIC8vIERlcHJlY2F0ZWRQZWVyQ29u
bmVjdGlvbkhhbmRsZXJJbnRlcm5hbF9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9jaHJvbWl1bS9EZXByZWNhdGVkUGVlckNvbm5lY3Rpb25IYW5kbGVySW50ZXJu
YWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9j
aHJvbWl1bS9EZXByZWNhdGVkUGVlckNvbm5lY3Rpb25IYW5kbGVySW50ZXJuYWwuaAkocmV2aXNp
b24gMTEyNTcxKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vY2hyb21p
dW0vRGVwcmVjYXRlZFBlZXJDb25uZWN0aW9uSGFuZGxlckludGVybmFsLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTM0LDcgKzM0LDcgQEAKICNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQogCiAjaW5jbHVk
ZSAiTWVkaWFTdHJlYW1EZXNjcmlwdG9yLmgiCi0jaW5jbHVkZSAicGxhdGZvcm0vV2ViUGVlckNv
bm5lY3Rpb25IYW5kbGVyQ2xpZW50LmgiCisjaW5jbHVkZSA8cHVibGljL1dlYlBlZXJDb25uZWN0
aW9uSGFuZGxlckNsaWVudC5oPgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KICNpbmNsdWRlIDx3
dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vY2hyb21pdW0vTWVkaWFTdHJlYW1D
ZW50ZXJDaHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWVkaWFzdHJlYW0vY2hyb21pdW0vTWVkaWFTdHJlYW1DZW50ZXJDaHJvbWl1bS5jcHAJKHJldmlz
aW9uIDExMjU3MSkJKGZyb20gU291cmNlL1dlYktpdC9jaHJvbWl1bS9icmlkZ2UvTWVkaWFTdHJl
YW1DZW50ZXIuY3BwOjExMjU3MSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3Ry
ZWFtL2Nocm9taXVtL01lZGlhU3RyZWFtQ2VudGVyQ2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsODQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
KyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUg
bmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20K
KyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICog
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
CisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoTUVESUFf
U1RSRUFNKQorCisjaW5jbHVkZSAiTWVkaWFTdHJlYW1DZW50ZXIuaCIKKworI2luY2x1ZGUgIk1l
ZGlhU3RyZWFtQ2VudGVySW50ZXJuYWwuaCIKKyNpbmNsdWRlICJNZWRpYVN0cmVhbURlc2NyaXB0
b3IuaCIKKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK01lZGlhU3RyZWFtQ2VudGVyOjpNZWRpYVN0cmVhbUNlbnRlcigpCisgICAgOiBtX3ByaXZh
dGUoYWRvcHRQdHIobmV3IE1lZGlhU3RyZWFtQ2VudGVySW50ZXJuYWwodGhpcykpKQoreworfQor
CitNZWRpYVN0cmVhbUNlbnRlcjo6fk1lZGlhU3RyZWFtQ2VudGVyKCkKK3sKK30KKwordm9pZCBN
ZWRpYVN0cmVhbUNlbnRlcjo6cXVlcnlNZWRpYVN0cmVhbVNvdXJjZXMoUGFzc1JlZlB0cjxNZWRp
YVN0cmVhbVNvdXJjZXNRdWVyeUNsaWVudD4gY2xpZW50KQoreworICAgIG1fcHJpdmF0ZS0+cXVl
cnlNZWRpYVN0cmVhbVNvdXJjZXMoY2xpZW50KTsKK30KKwordm9pZCBNZWRpYVN0cmVhbUNlbnRl
cjo6ZGlkU2V0TWVkaWFTdHJlYW1UcmFja0VuYWJsZWQoTWVkaWFTdHJlYW1EZXNjcmlwdG9yKiBz
dHJlYW0sICBNZWRpYVN0cmVhbUNvbXBvbmVudCogY29tcG9uZW50KQoreworICAgIG1fcHJpdmF0
ZS0+ZGlkU2V0TWVkaWFTdHJlYW1UcmFja0VuYWJsZWQoc3RyZWFtLCBjb21wb25lbnQpOworfQor
Cit2b2lkIE1lZGlhU3RyZWFtQ2VudGVyOjpkaWRTdG9wTG9jYWxNZWRpYVN0cmVhbShNZWRpYVN0
cmVhbURlc2NyaXB0b3IqIHN0cmVhbSkKK3sKKyAgICBtX3ByaXZhdGUtPmRpZFN0b3BMb2NhbE1l
ZGlhU3RyZWFtKHN0cmVhbSk7Cit9CisKK3ZvaWQgTWVkaWFTdHJlYW1DZW50ZXI6OmRpZENvbnN0
cnVjdE1lZGlhU3RyZWFtKE1lZGlhU3RyZWFtRGVzY3JpcHRvciogc3RyZWFtKQoreworICAgIG1f
cHJpdmF0ZS0+ZGlkQ29uc3RydWN0TWVkaWFTdHJlYW0oc3RyZWFtKTsKK30KKworU3RyaW5nIE1l
ZGlhU3RyZWFtQ2VudGVyOjpjb25zdHJ1Y3RTRFAoSWNlQ2FuZGlkYXRlRGVzY3JpcHRvciogaWNl
Q2FuZGlkYXRlKQoreworICAgIHJldHVybiBtX3ByaXZhdGUtPmNvbnN0cnVjdFNEUChpY2VDYW5k
aWRhdGUpOworfQorCitTdHJpbmcgTWVkaWFTdHJlYW1DZW50ZXI6OmNvbnN0cnVjdFNEUChTZXNz
aW9uRGVzY3JpcHRpb25EZXNjcmlwdG9yKiBzZXNzaW9uRGVzY3JpcHRpb24pCit7CisgICAgcmV0
dXJuIG1fcHJpdmF0ZS0+Y29uc3RydWN0U0RQKHNlc3Npb25EZXNjcmlwdGlvbik7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9jaHJvbWl1bS9NZWRpYVN0
cmVhbUNlbnRlckludGVybmFsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tZWRpYXN0cmVhbS9jaHJvbWl1bS9NZWRpYVN0cmVhbUNlbnRlckludGVybmFsLmNwcAko
cmV2aXNpb24gMTEyNTcxKQkoZnJvbSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL2JyaWRnZS9NZWRp
YVN0cmVhbUNlbnRlckludGVybmFsLmNwcDoxMTI1NzEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tZWRpYXN0cmVhbS9jaHJvbWl1bS9NZWRpYVN0cmVhbUNlbnRlckludGVybmFsLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDExMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
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
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lm
IEVOQUJMRShNRURJQV9TVFJFQU0pCisKKyNpbmNsdWRlICJNZWRpYVN0cmVhbUNlbnRlckludGVy
bmFsLmgiCisKKyNpbmNsdWRlICJJY2VDYW5kaWRhdGVEZXNjcmlwdG9yLmgiCisjaW5jbHVkZSAi
TWVkaWFTdHJlYW1DZW50ZXIuaCIKKyNpbmNsdWRlICJNZWRpYVN0cmVhbUNvbXBvbmVudC5oIgor
I2luY2x1ZGUgIk1lZGlhU3RyZWFtU291cmNlLmgiCisjaW5jbHVkZSAiU2Vzc2lvbkRlc2NyaXB0
aW9uRGVzY3JpcHRvci5oIgorI2luY2x1ZGUgIldlYktpdC5oIgorI2luY2x1ZGUgInBsYXRmb3Jt
L1dlYklDRUNhbmRpZGF0ZURlc2NyaXB0b3IuaCIKKyNpbmNsdWRlICJwbGF0Zm9ybS9XZWJLaXRQ
bGF0Zm9ybVN1cHBvcnQuaCIKKyNpbmNsdWRlICJwbGF0Zm9ybS9XZWJNZWRpYVN0cmVhbUNlbnRl
ci5oIgorI2luY2x1ZGUgInBsYXRmb3JtL1dlYk1lZGlhU3RyZWFtQ29tcG9uZW50LmgiCisjaW5j
bHVkZSAicGxhdGZvcm0vV2ViTWVkaWFTdHJlYW1EZXNjcmlwdG9yLmgiCisjaW5jbHVkZSAicGxh
dGZvcm0vV2ViTWVkaWFTdHJlYW1Tb3VyY2VzUmVxdWVzdC5oIgorI2luY2x1ZGUgInBsYXRmb3Jt
L1dlYlNlc3Npb25EZXNjcmlwdGlvbkRlc2NyaXB0b3IuaCIKKyNpbmNsdWRlIDx3dGYvUGFzc093
blB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK01lZGlhU3RyZWFtQ2VudGVySW50ZXJu
YWw6Ok1lZGlhU3RyZWFtQ2VudGVySW50ZXJuYWwoTWVkaWFTdHJlYW1DZW50ZXIqIG93bmVyKQor
ICAgIDogbV9wcml2YXRlKGFkb3B0UHRyKFdlYktpdDo6d2ViS2l0UGxhdGZvcm1TdXBwb3J0KCkt
PmNyZWF0ZU1lZGlhU3RyZWFtQ2VudGVyKHRoaXMpKSkKKyAgICAsIG1fb3duZXIob3duZXIpCit7
Cit9CisKK01lZGlhU3RyZWFtQ2VudGVySW50ZXJuYWw6On5NZWRpYVN0cmVhbUNlbnRlckludGVy
bmFsKCkKK3sKK30KKwordm9pZCBNZWRpYVN0cmVhbUNlbnRlckludGVybmFsOjpxdWVyeU1lZGlh
U3RyZWFtU291cmNlcyhQYXNzUmVmUHRyPE1lZGlhU3RyZWFtU291cmNlc1F1ZXJ5Q2xpZW50PiBj
bGllbnQpCit7CisgICAgLy8gRklYTUU6IFJlbW92ZSB0aGlzICJzaG9ydC1jaXJjdWl0IiBhbmQg
Zm9yd2FyZCB0byBtX3ByaXZhdGUgd2hlbiBDaHJvbWUgaGFzIGltcGxlbWVudGVkIFdlYk1lZGlh
U3RyZWFtQ2VudGVyLgorICAgIE1lZGlhU3RyZWFtU291cmNlVmVjdG9yIGF1ZGlvU291cmNlcywg
dmlkZW9Tb3VyY2VzOworICAgIGNsaWVudC0+ZGlkQ29tcGxldGVRdWVyeShhdWRpb1NvdXJjZXMs
IHZpZGVvU291cmNlcyk7Cit9CisKK3ZvaWQgTWVkaWFTdHJlYW1DZW50ZXJJbnRlcm5hbDo6ZGlk
U2V0TWVkaWFTdHJlYW1UcmFja0VuYWJsZWQoTWVkaWFTdHJlYW1EZXNjcmlwdG9yKiBzdHJlYW0s
IE1lZGlhU3RyZWFtQ29tcG9uZW50KiBjb21wb25lbnQpCit7CisgICAgaWYgKG1fcHJpdmF0ZSkg
eworICAgICAgICBpZiAoY29tcG9uZW50LT5lbmFibGVkKCkpCisgICAgICAgICAgICBtX3ByaXZh
dGUtPmRpZEVuYWJsZU1lZGlhU3RyZWFtVHJhY2soc3RyZWFtLCBjb21wb25lbnQpOworICAgICAg
ICBlbHNlCisgICAgICAgICAgICBtX3ByaXZhdGUtPmRpZERpc2FibGVNZWRpYVN0cmVhbVRyYWNr
KHN0cmVhbSwgY29tcG9uZW50KTsKKyAgICB9Cit9CisKK3ZvaWQgTWVkaWFTdHJlYW1DZW50ZXJJ
bnRlcm5hbDo6ZGlkU3RvcExvY2FsTWVkaWFTdHJlYW0oTWVkaWFTdHJlYW1EZXNjcmlwdG9yKiBz
dHJlYW0pCit7CisgICAgaWYgKG1fcHJpdmF0ZSkKKyAgICAgICAgbV9wcml2YXRlLT5kaWRTdG9w
TG9jYWxNZWRpYVN0cmVhbShzdHJlYW0pOworfQorCit2b2lkIE1lZGlhU3RyZWFtQ2VudGVySW50
ZXJuYWw6OmRpZENvbnN0cnVjdE1lZGlhU3RyZWFtKE1lZGlhU3RyZWFtRGVzY3JpcHRvciogc3Ry
ZWFtKQoreworICAgIGlmIChtX3ByaXZhdGUpCisgICAgICAgIG1fcHJpdmF0ZS0+ZGlkQ29uc3Ry
dWN0TWVkaWFTdHJlYW0oc3RyZWFtKTsKK30KKworU3RyaW5nIE1lZGlhU3RyZWFtQ2VudGVySW50
ZXJuYWw6OmNvbnN0cnVjdFNEUChJY2VDYW5kaWRhdGVEZXNjcmlwdG9yKiBpY2VDYW5kaWRhdGUp
Cit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZSA/IG1fcHJpdmF0ZS0+Y29uc3RydWN0U0RQKFdlYktp
dDo6V2ViSUNFQ2FuZGlkYXRlRGVzY3JpcHRvcihpY2VDYW5kaWRhdGUpKSA6ICIiOworfQorCitT
dHJpbmcgTWVkaWFTdHJlYW1DZW50ZXJJbnRlcm5hbDo6Y29uc3RydWN0U0RQKFNlc3Npb25EZXNj
cmlwdGlvbkRlc2NyaXB0b3IqIHNlc3Npb25EZXNjcmlwdGlvbikKK3sKKyAgICByZXR1cm4gbV9w
cml2YXRlID8gbV9wcml2YXRlLT5jb25zdHJ1Y3RTRFAoV2ViS2l0OjpXZWJTZXNzaW9uRGVzY3Jp
cHRpb25EZXNjcmlwdG9yKHNlc3Npb25EZXNjcmlwdGlvbikpIDogIiI7Cit9CisKK3ZvaWQgTWVk
aWFTdHJlYW1DZW50ZXJJbnRlcm5hbDo6c3RvcExvY2FsTWVkaWFTdHJlYW0oY29uc3QgV2ViS2l0
OjpXZWJNZWRpYVN0cmVhbURlc2NyaXB0b3ImIHN0cmVhbSkKK3sKKyAgICBtX293bmVyLT5lbmRM
b2NhbE1lZGlhU3RyZWFtKHN0cmVhbSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
I2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tZWRpYXN0cmVhbS9jaHJvbWl1bS9NZWRpYVN0cmVhbUNlbnRlckludGVybmFsLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9jaHJvbWl1
bS9NZWRpYVN0cmVhbUNlbnRlckludGVybmFsLmNwcAkocmV2aXNpb24gMTEyNTcxKQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vY2hyb21pdW0vTWVkaWFTdHJlYW1DZW50
ZXJJbnRlcm5hbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDIwICszOSwxOSBAQAogI2luY2x1
ZGUgIk1lZGlhU3RyZWFtQ29tcG9uZW50LmgiCiAjaW5jbHVkZSAiTWVkaWFTdHJlYW1Tb3VyY2Uu
aCIKICNpbmNsdWRlICJTZXNzaW9uRGVzY3JpcHRpb25EZXNjcmlwdG9yLmgiCi0jaW5jbHVkZSAi
V2ViS2l0LmgiCi0jaW5jbHVkZSAicGxhdGZvcm0vV2ViSUNFQ2FuZGlkYXRlRGVzY3JpcHRvci5o
IgotI2luY2x1ZGUgInBsYXRmb3JtL1dlYktpdFBsYXRmb3JtU3VwcG9ydC5oIgotI2luY2x1ZGUg
InBsYXRmb3JtL1dlYk1lZGlhU3RyZWFtQ2VudGVyLmgiCi0jaW5jbHVkZSAicGxhdGZvcm0vV2Vi
TWVkaWFTdHJlYW1Db21wb25lbnQuaCIKLSNpbmNsdWRlICJwbGF0Zm9ybS9XZWJNZWRpYVN0cmVh
bURlc2NyaXB0b3IuaCIKLSNpbmNsdWRlICJwbGF0Zm9ybS9XZWJNZWRpYVN0cmVhbVNvdXJjZXNS
ZXF1ZXN0LmgiCi0jaW5jbHVkZSAicGxhdGZvcm0vV2ViU2Vzc2lvbkRlc2NyaXB0aW9uRGVzY3Jp
cHRvci5oIgorI2luY2x1ZGUgPHB1YmxpYy9QbGF0Zm9ybS5oPgorI2luY2x1ZGUgPHB1YmxpYy9X
ZWJJQ0VDYW5kaWRhdGVEZXNjcmlwdG9yLmg+CisjaW5jbHVkZSA8cHVibGljL1dlYk1lZGlhU3Ry
ZWFtQ2VudGVyLmg+CisjaW5jbHVkZSA8cHVibGljL1dlYk1lZGlhU3RyZWFtQ29tcG9uZW50Lmg+
CisjaW5jbHVkZSA8cHVibGljL1dlYk1lZGlhU3RyZWFtRGVzY3JpcHRvci5oPgorI2luY2x1ZGUg
PHB1YmxpYy9XZWJNZWRpYVN0cmVhbVNvdXJjZXNSZXF1ZXN0Lmg+CisjaW5jbHVkZSA8cHVibGlj
L1dlYlNlc3Npb25EZXNjcmlwdGlvbkRlc2NyaXB0b3IuaD4KICNpbmNsdWRlIDx3dGYvUGFzc093
blB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIE1lZGlhU3RyZWFtQ2VudGVySW50ZXJu
YWw6Ok1lZGlhU3RyZWFtQ2VudGVySW50ZXJuYWwoTWVkaWFTdHJlYW1DZW50ZXIqIG93bmVyKQot
ICAgIDogbV9wcml2YXRlKGFkb3B0UHRyKFdlYktpdDo6d2ViS2l0UGxhdGZvcm1TdXBwb3J0KCkt
PmNyZWF0ZU1lZGlhU3RyZWFtQ2VudGVyKHRoaXMpKSkKKyAgICA6IG1fcHJpdmF0ZShhZG9wdFB0
cihXZWJLaXQ6OlBsYXRmb3JtOjpjdXJyZW50KCktPmNyZWF0ZU1lZGlhU3RyZWFtQ2VudGVyKHRo
aXMpKSkKICAgICAsIG1fb3duZXIob3duZXIpCiB7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tZWRpYXN0cmVhbS9jaHJvbWl1bS9NZWRpYVN0cmVhbUNlbnRlckludGVybmFsLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vY2hyb21p
dW0vTWVkaWFTdHJlYW1DZW50ZXJJbnRlcm5hbC5oCShyZXZpc2lvbiAxMTI1NzEpCShmcm9tIFNv
dXJjZS9XZWJLaXQvY2hyb21pdW0vYnJpZGdlL01lZGlhU3RyZWFtQ2VudGVySW50ZXJuYWwuaDox
MTI1NzEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9jaHJvbWl1bS9N
ZWRpYVN0cmVhbUNlbnRlckludGVybmFsLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3OCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
CisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICog
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpZm5kZWYgTWVkaWFTdHJlYW1DZW50ZXJJbnRlcm5hbF9oCisjZGVmaW5lIE1lZGlhU3RyZWFt
Q2VudGVySW50ZXJuYWxfaAorCisjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKKworI2luY2x1ZGUg
InBsYXRmb3JtL1dlYk1lZGlhU3RyZWFtQ2VudGVyQ2xpZW50LmgiCisjaW5jbHVkZSA8d3RmL093
blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQv
V1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworY2xhc3MgV2ViTWVkaWFTdHJlYW1D
ZW50ZXI7Cit9CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSWNlQ2FuZGlkYXRlRGVz
Y3JpcHRvcjsKK2NsYXNzIE1lZGlhU3RyZWFtQ2VudGVyOworY2xhc3MgTWVkaWFTdHJlYW1Db21w
b25lbnQ7CitjbGFzcyBNZWRpYVN0cmVhbURlc2NyaXB0b3I7CitjbGFzcyBNZWRpYVN0cmVhbVNv
dXJjZXNRdWVyeUNsaWVudDsKK2NsYXNzIFNlc3Npb25EZXNjcmlwdGlvbkRlc2NyaXB0b3I7CisK
K2NsYXNzIE1lZGlhU3RyZWFtQ2VudGVySW50ZXJuYWwgOiBwdWJsaWMgV2ViS2l0OjpXZWJNZWRp
YVN0cmVhbUNlbnRlckNsaWVudCB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgTWVkaWFTdHJlYW1D
ZW50ZXJJbnRlcm5hbChNZWRpYVN0cmVhbUNlbnRlciopOworICAgIH5NZWRpYVN0cmVhbUNlbnRl
ckludGVybmFsKCk7CisKKyAgICB2b2lkIHF1ZXJ5TWVkaWFTdHJlYW1Tb3VyY2VzKFBhc3NSZWZQ
dHI8TWVkaWFTdHJlYW1Tb3VyY2VzUXVlcnlDbGllbnQ+KTsKKyAgICB2b2lkIGRpZFNldE1lZGlh
U3RyZWFtVHJhY2tFbmFibGVkKE1lZGlhU3RyZWFtRGVzY3JpcHRvciosIE1lZGlhU3RyZWFtQ29t
cG9uZW50Kik7CisgICAgdm9pZCBkaWRTdG9wTG9jYWxNZWRpYVN0cmVhbShNZWRpYVN0cmVhbURl
c2NyaXB0b3IqKTsKKyAgICB2b2lkIGRpZENvbnN0cnVjdE1lZGlhU3RyZWFtKE1lZGlhU3RyZWFt
RGVzY3JpcHRvciopOworICAgIFN0cmluZyBjb25zdHJ1Y3RTRFAoSWNlQ2FuZGlkYXRlRGVzY3Jp
cHRvciopOworICAgIFN0cmluZyBjb25zdHJ1Y3RTRFAoU2Vzc2lvbkRlc2NyaXB0aW9uRGVzY3Jp
cHRvciopOworCisgICAgLy8gRnJvbSBXZWJLaXQ6OldlYk1lZGlhU3RyZWFtQ2VudGVyQ2xpZW50
LgorICAgIHZpcnR1YWwgdm9pZCBzdG9wTG9jYWxNZWRpYVN0cmVhbShjb25zdCBXZWJLaXQ6Oldl
Yk1lZGlhU3RyZWFtRGVzY3JpcHRvciYpOworCitwcml2YXRlOgorICAgIE93blB0cjxXZWJLaXQ6
OldlYk1lZGlhU3RyZWFtQ2VudGVyPiBtX3ByaXZhdGU7CisgICAgTWVkaWFTdHJlYW1DZW50ZXIq
IG1fb3duZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFC
TEUoTUVESUFfU1RSRUFNKQorCisjZW5kaWYgLy8gTWVkaWFTdHJlYW1DZW50ZXJJbnRlcm5hbF9o
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9jaHJvbWl1bS9NZWRp
YVN0cmVhbUNlbnRlckludGVybmFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWVkaWFzdHJlYW0vY2hyb21pdW0vTWVkaWFTdHJlYW1DZW50ZXJJbnRlcm5hbC5oCShy
ZXZpc2lvbiAxMTI1NzEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9j
aHJvbWl1bS9NZWRpYVN0cmVhbUNlbnRlckludGVybmFsLmgJKHdvcmtpbmcgY29weSkKQEAgLTMz
LDcgKzMzLDcgQEAKIAogI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCiAKLSNpbmNsdWRlICJwbGF0
Zm9ybS9XZWJNZWRpYVN0cmVhbUNlbnRlckNsaWVudC5oIgorI2luY2x1ZGUgPHB1YmxpYy9XZWJN
ZWRpYVN0cmVhbUNlbnRlckNsaWVudC5oPgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KICNpbmNs
dWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vY2hyb21pdW0vUGVlckNv
bm5lY3Rpb24wMEhhbmRsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21lZGlhc3RyZWFtL2Nocm9taXVtL1BlZXJDb25uZWN0aW9uMDBIYW5kbGVyLmNwcAkocmV2
aXNpb24gMTEyNTcxKQkoZnJvbSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL2JyaWRnZS9QZWVyQ29u
bmVjdGlvbjAwSGFuZGxlci5jcHA6MTEyNTcxKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWVkaWFzdHJlYW0vY2hyb21pdW0vUGVlckNvbm5lY3Rpb24wMEhhbmRsZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMTE4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIKKyAqICAgIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJp
YnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tIHRoaXMKKyAqICAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisj
aWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKKworI2luY2x1ZGUgIlBlZXJDb25uZWN0aW9uMDBIYW5k
bGVyLmgiCisKKyNpbmNsdWRlICJJY2VDYW5kaWRhdGVEZXNjcmlwdG9yLmgiCisjaW5jbHVkZSAi
SWNlT3B0aW9ucy5oIgorI2luY2x1ZGUgIk1lZGlhSGludHMuaCIKKyNpbmNsdWRlICJNZWRpYVN0
cmVhbURlc2NyaXB0b3IuaCIKKyNpbmNsdWRlICJQZWVyQ29ubmVjdGlvbjAwSGFuZGxlckNsaWVu
dC5oIgorI2luY2x1ZGUgIlBlZXJDb25uZWN0aW9uMDBIYW5kbGVySW50ZXJuYWwuaCIKKyNpbmNs
dWRlICJTZXNzaW9uRGVzY3JpcHRpb25EZXNjcmlwdG9yLmgiCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworUGFzc093blB0cjxQZWVyQ29ubmVjdGlvbjAwSGFuZGxlcj4gUGVlckNvbm5lY3Rpb24w
MEhhbmRsZXI6OmNyZWF0ZShQZWVyQ29ubmVjdGlvbjAwSGFuZGxlckNsaWVudCogY2xpZW50LCBj
b25zdCBTdHJpbmcmIHNlcnZlckNvbmZpZ3VyYXRpb24sIGNvbnN0IFN0cmluZyYgdXNlcm5hbWUp
Cit7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBQZWVyQ29ubmVjdGlvbjAwSGFuZGxlcihjbGll
bnQsIHNlcnZlckNvbmZpZ3VyYXRpb24sIHVzZXJuYW1lKSk7Cit9CisKK1BlZXJDb25uZWN0aW9u
MDBIYW5kbGVyOjpQZWVyQ29ubmVjdGlvbjAwSGFuZGxlcihQZWVyQ29ubmVjdGlvbjAwSGFuZGxl
ckNsaWVudCogY2xpZW50LCBjb25zdCBTdHJpbmcmIHNlcnZlckNvbmZpZ3VyYXRpb24sIGNvbnN0
IFN0cmluZyYgdXNlcm5hbWUpCisgICAgOiBtX3ByaXZhdGUoYWRvcHRQdHIobmV3IFBlZXJDb25u
ZWN0aW9uMDBIYW5kbGVySW50ZXJuYWwoY2xpZW50LCBzZXJ2ZXJDb25maWd1cmF0aW9uLCB1c2Vy
bmFtZSkpKQoreworfQorCitQZWVyQ29ubmVjdGlvbjAwSGFuZGxlcjo6flBlZXJDb25uZWN0aW9u
MDBIYW5kbGVyKCkKK3sKK30KKworUGFzc1JlZlB0cjxTZXNzaW9uRGVzY3JpcHRpb25EZXNjcmlw
dG9yPiBQZWVyQ29ubmVjdGlvbjAwSGFuZGxlcjo6Y3JlYXRlT2ZmZXIoUGFzc1JlZlB0cjxNZWRp
YUhpbnRzPiBtZWRpYUhpbnRzKQoreworICAgIHJldHVybiBtX3ByaXZhdGUtPmNyZWF0ZU9mZmVy
KG1lZGlhSGludHMpOworfQorCitQYXNzUmVmUHRyPFNlc3Npb25EZXNjcmlwdGlvbkRlc2NyaXB0
b3I+IFBlZXJDb25uZWN0aW9uMDBIYW5kbGVyOjpjcmVhdGVBbnN3ZXIoY29uc3QgU3RyaW5nJiBv
ZmZlciwgUGFzc1JlZlB0cjxNZWRpYUhpbnRzPiBtZWRpYUhpbnRzKQoreworICAgIHJldHVybiBt
X3ByaXZhdGUtPmNyZWF0ZUFuc3dlcihvZmZlciwgbWVkaWFIaW50cyk7Cit9CisKK2Jvb2wgUGVl
ckNvbm5lY3Rpb24wMEhhbmRsZXI6OnNldExvY2FsRGVzY3JpcHRpb24oaW50IGFjdGlvbiwgUGFz
c1JlZlB0cjxTZXNzaW9uRGVzY3JpcHRpb25EZXNjcmlwdG9yPiBzZXNzaW9uRGVzY3JpcHRpb24p
Cit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+c2V0TG9jYWxEZXNjcmlwdGlvbihhY3Rpb24sIHNl
c3Npb25EZXNjcmlwdGlvbik7Cit9CisKK2Jvb2wgUGVlckNvbm5lY3Rpb24wMEhhbmRsZXI6OnNl
dFJlbW90ZURlc2NyaXB0aW9uKGludCBhY3Rpb24sIFBhc3NSZWZQdHI8U2Vzc2lvbkRlc2NyaXB0
aW9uRGVzY3JpcHRvcj4gc2Vzc2lvbkRlc2NyaXB0aW9uKQoreworICAgIHJldHVybiBtX3ByaXZh
dGUtPnNldFJlbW90ZURlc2NyaXB0aW9uKGFjdGlvbiwgc2Vzc2lvbkRlc2NyaXB0aW9uKTsKK30K
KworUGFzc1JlZlB0cjxTZXNzaW9uRGVzY3JpcHRpb25EZXNjcmlwdG9yPiBQZWVyQ29ubmVjdGlv
bjAwSGFuZGxlcjo6bG9jYWxEZXNjcmlwdGlvbigpCit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+
bG9jYWxEZXNjcmlwdGlvbigpOworfQorCitQYXNzUmVmUHRyPFNlc3Npb25EZXNjcmlwdGlvbkRl
c2NyaXB0b3I+IFBlZXJDb25uZWN0aW9uMDBIYW5kbGVyOjpyZW1vdGVEZXNjcmlwdGlvbigpCit7
CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+cmVtb3RlRGVzY3JpcHRpb24oKTsKK30KKworYm9vbCBQ
ZWVyQ29ubmVjdGlvbjAwSGFuZGxlcjo6c3RhcnRJY2UoUGFzc1JlZlB0cjxJY2VPcHRpb25zPiBp
Y2VPcHRpb25zKQoreworICAgIHJldHVybiBtX3ByaXZhdGUtPnN0YXJ0SWNlKGljZU9wdGlvbnMp
OworfQorCitib29sIFBlZXJDb25uZWN0aW9uMDBIYW5kbGVyOjpwcm9jZXNzSWNlTWVzc2FnZShQ
YXNzUmVmUHRyPEljZUNhbmRpZGF0ZURlc2NyaXB0b3I+IGljZUNhbmRpZGF0ZSkKK3sKKyAgICBy
ZXR1cm4gbV9wcml2YXRlLT5wcm9jZXNzSWNlTWVzc2FnZShpY2VDYW5kaWRhdGUpOworfQorCit2
b2lkIFBlZXJDb25uZWN0aW9uMDBIYW5kbGVyOjphZGRTdHJlYW0oUGFzc1JlZlB0cjxNZWRpYVN0
cmVhbURlc2NyaXB0b3I+IG1lZGlhU3RyZWFtKQoreworICAgIG1fcHJpdmF0ZS0+YWRkU3RyZWFt
KG1lZGlhU3RyZWFtKTsKK30KKwordm9pZCBQZWVyQ29ubmVjdGlvbjAwSGFuZGxlcjo6cmVtb3Zl
U3RyZWFtKFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1EZXNjcmlwdG9yPiBtZWRpYVN0cmVhbSkKK3sK
KyAgICBtX3ByaXZhdGUtPnJlbW92ZVN0cmVhbShtZWRpYVN0cmVhbSk7Cit9CisKK3ZvaWQgUGVl
ckNvbm5lY3Rpb24wMEhhbmRsZXI6OnN0b3AoKQoreworICAgIG1fcHJpdmF0ZS0+c3RvcCgpOwor
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RS
RUFNKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vY2hyb21pdW0v
UGVlckNvbm5lY3Rpb24wMEhhbmRsZXJJbnRlcm5hbC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vY2hyb21pdW0vUGVlckNvbm5lY3Rpb24wMEhh
bmRsZXJJbnRlcm5hbC5jcHAJKHJldmlzaW9uIDExMjU3MSkJKGZyb20gU291cmNlL1dlYktpdC9j
aHJvbWl1bS9icmlkZ2UvUGVlckNvbm5lY3Rpb24wMEhhbmRsZXJJbnRlcm5hbC5jcHA6MTEyNTcx
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vY2hyb21pdW0vUGVlckNv
bm5lY3Rpb24wMEhhbmRsZXJJbnRlcm5hbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwx
ODcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAq
CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICog
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29n
bGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
KyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQorCisj
aW5jbHVkZSAiUGVlckNvbm5lY3Rpb24wMEhhbmRsZXJJbnRlcm5hbC5oIgorCisjaW5jbHVkZSAi
SWNlQ2FuZGlkYXRlRGVzY3JpcHRvci5oIgorI2luY2x1ZGUgIkljZU9wdGlvbnMuaCIKKyNpbmNs
dWRlICJNZWRpYUhpbnRzLmgiCisjaW5jbHVkZSAiUGVlckNvbm5lY3Rpb24wMC5oIgorI2luY2x1
ZGUgIlBlZXJDb25uZWN0aW9uMDBIYW5kbGVyQ2xpZW50LmgiCisjaW5jbHVkZSAiU2Vzc2lvbkRl
c2NyaXB0aW9uRGVzY3JpcHRvci5oIgorI2luY2x1ZGUgIldlYktpdC5oIgorI2luY2x1ZGUgInBs
YXRmb3JtL1dlYklDRUNhbmRpZGF0ZURlc2NyaXB0b3IuaCIKKyNpbmNsdWRlICJwbGF0Zm9ybS9X
ZWJJQ0VPcHRpb25zLmgiCisjaW5jbHVkZSAicGxhdGZvcm0vV2ViS2l0UGxhdGZvcm1TdXBwb3J0
LmgiCisjaW5jbHVkZSAicGxhdGZvcm0vV2ViTWVkaWFIaW50cy5oIgorI2luY2x1ZGUgInBsYXRm
b3JtL1dlYk1lZGlhU3RyZWFtRGVzY3JpcHRvci5oIgorI2luY2x1ZGUgInBsYXRmb3JtL1dlYlBl
ZXJDb25uZWN0aW9uMDBIYW5kbGVyLmgiCisjaW5jbHVkZSAicGxhdGZvcm0vV2ViUGVlckNvbm5l
Y3Rpb24wMEhhbmRsZXJDbGllbnQuaCIKKyNpbmNsdWRlICJwbGF0Zm9ybS9XZWJTZXNzaW9uRGVz
Y3JpcHRpb25EZXNjcmlwdG9yLmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitQZWVyQ29ubmVjdGlvbjAwSGFuZGxlckludGVybmFsOjpQZWVy
Q29ubmVjdGlvbjAwSGFuZGxlckludGVybmFsKFBlZXJDb25uZWN0aW9uMDBIYW5kbGVyQ2xpZW50
KiBjbGllbnQsIGNvbnN0IFN0cmluZyYgc2VydmVyQ29uZmlndXJhdGlvbiwgY29uc3QgU3RyaW5n
JiB1c2VybmFtZSkKKyAgICA6IG1fY2xpZW50KGNsaWVudCkKK3sKKyAgICBBU1NFUlQobV9jbGll
bnQpOworICAgIG1fd2ViSGFuZGxlciA9IGFkb3B0UHRyKFdlYktpdDo6d2ViS2l0UGxhdGZvcm1T
dXBwb3J0KCktPmNyZWF0ZVBlZXJDb25uZWN0aW9uMDBIYW5kbGVyKHRoaXMpKTsKKyAgICAvLyBG
SVhNRTogV2hlbiB0aGVyZSBpcyBzb21lIGVycm9yIHJlcG9ydGluZyBhdmFsaWFibGUgaW4gdGhl
IFBlZXJDb25uZWN0aW9uIG9iamVjdCByZXBvcnQKKyAgICAvLyBpZiB3ZSBkaWRuJ3QgZ2V0IGEg
V2ViUGVlckNvbm5lY3Rpb24wMEhhbmRsZXIgaW5zdGFuY2UuCisKKyAgICBpZiAobV93ZWJIYW5k
bGVyKQorICAgICAgICBtX3dlYkhhbmRsZXItPmluaXRpYWxpemUoc2VydmVyQ29uZmlndXJhdGlv
biwgdXNlcm5hbWUpOworfQorCitQZWVyQ29ubmVjdGlvbjAwSGFuZGxlckludGVybmFsOjp+UGVl
ckNvbm5lY3Rpb24wMEhhbmRsZXJJbnRlcm5hbCgpCit7Cit9CisKK1Bhc3NSZWZQdHI8U2Vzc2lv
bkRlc2NyaXB0aW9uRGVzY3JpcHRvcj4gUGVlckNvbm5lY3Rpb24wMEhhbmRsZXJJbnRlcm5hbDo6
Y3JlYXRlT2ZmZXIoUGFzc1JlZlB0cjxNZWRpYUhpbnRzPiBtZWRpYUhpbnRzKQoreworICAgIGlm
ICghbV93ZWJIYW5kbGVyKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBtX3dlYkhh
bmRsZXItPmNyZWF0ZU9mZmVyKG1lZGlhSGludHMpOworfQorCitQYXNzUmVmUHRyPFNlc3Npb25E
ZXNjcmlwdGlvbkRlc2NyaXB0b3I+IFBlZXJDb25uZWN0aW9uMDBIYW5kbGVySW50ZXJuYWw6OmNy
ZWF0ZUFuc3dlcihjb25zdCBTdHJpbmcmIG9mZmVyLCBQYXNzUmVmUHRyPE1lZGlhSGludHM+IG1l
ZGlhSGludHMpCit7CisgICAgaWYgKCFtX3dlYkhhbmRsZXIpCisgICAgICAgIHJldHVybiAwOwor
CisgICAgcmV0dXJuIG1fd2ViSGFuZGxlci0+Y3JlYXRlQW5zd2VyKG9mZmVyLCBtZWRpYUhpbnRz
KTsKK30KKworYm9vbCBQZWVyQ29ubmVjdGlvbjAwSGFuZGxlckludGVybmFsOjpzZXRMb2NhbERl
c2NyaXB0aW9uKGludCBhY3Rpb24sIFBhc3NSZWZQdHI8U2Vzc2lvbkRlc2NyaXB0aW9uRGVzY3Jp
cHRvcj4gc2Vzc2lvbkRlc2NyaXB0aW9uKQoreworICAgIGlmICghbV93ZWJIYW5kbGVyKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gbV93ZWJIYW5kbGVyLT5zZXRMb2NhbERl
c2NyaXB0aW9uKHN0YXRpY19jYXN0PFdlYktpdDo6V2ViUGVlckNvbm5lY3Rpb24wMEhhbmRsZXI6
OkFjdGlvbj4oYWN0aW9uKSwgc2Vzc2lvbkRlc2NyaXB0aW9uKTsKK30KKworYm9vbCBQZWVyQ29u
bmVjdGlvbjAwSGFuZGxlckludGVybmFsOjpzZXRSZW1vdGVEZXNjcmlwdGlvbihpbnQgYWN0aW9u
LCBQYXNzUmVmUHRyPFNlc3Npb25EZXNjcmlwdGlvbkRlc2NyaXB0b3I+IHNlc3Npb25EZXNjcmlw
dGlvbikKK3sKKyAgICBpZiAoIW1fd2ViSGFuZGxlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgcmV0dXJuIG1fd2ViSGFuZGxlci0+c2V0UmVtb3RlRGVzY3JpcHRpb24oc3RhdGljX2Nh
c3Q8V2ViS2l0OjpXZWJQZWVyQ29ubmVjdGlvbjAwSGFuZGxlcjo6QWN0aW9uPihhY3Rpb24pLCBz
ZXNzaW9uRGVzY3JpcHRpb24pOworfQorCitQYXNzUmVmUHRyPFNlc3Npb25EZXNjcmlwdGlvbkRl
c2NyaXB0b3I+IFBlZXJDb25uZWN0aW9uMDBIYW5kbGVySW50ZXJuYWw6OmxvY2FsRGVzY3JpcHRp
b24oKQoreworICAgIGlmICghbV93ZWJIYW5kbGVyKQorICAgICAgICByZXR1cm4gMDsKKworICAg
IHJldHVybiBtX3dlYkhhbmRsZXItPmxvY2FsRGVzY3JpcHRpb24oKTsKK30KKworUGFzc1JlZlB0
cjxTZXNzaW9uRGVzY3JpcHRpb25EZXNjcmlwdG9yPiBQZWVyQ29ubmVjdGlvbjAwSGFuZGxlcklu
dGVybmFsOjpyZW1vdGVEZXNjcmlwdGlvbigpCit7CisgICAgaWYgKCFtX3dlYkhhbmRsZXIpCisg
ICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIG1fd2ViSGFuZGxlci0+cmVtb3RlRGVzY3Jp
cHRpb24oKTsKK30KKworYm9vbCBQZWVyQ29ubmVjdGlvbjAwSGFuZGxlckludGVybmFsOjpzdGFy
dEljZShQYXNzUmVmUHRyPEljZU9wdGlvbnM+IGljZU9wdGlvbnMpCit7CisgICAgaWYgKCFtX3dl
YkhhbmRsZXIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBtX3dlYkhhbmRs
ZXItPnN0YXJ0SWNlKGljZU9wdGlvbnMpOworfQorCitib29sIFBlZXJDb25uZWN0aW9uMDBIYW5k
bGVySW50ZXJuYWw6OnByb2Nlc3NJY2VNZXNzYWdlKFBhc3NSZWZQdHI8SWNlQ2FuZGlkYXRlRGVz
Y3JpcHRvcj4gaWNlQ2FuZGlkYXRlKQoreworICAgIGlmICghbV93ZWJIYW5kbGVyKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gbV93ZWJIYW5kbGVyLT5wcm9jZXNzSWNlTWVz
c2FnZShpY2VDYW5kaWRhdGUpOworfQorCit2b2lkIFBlZXJDb25uZWN0aW9uMDBIYW5kbGVySW50
ZXJuYWw6OmFkZFN0cmVhbShQYXNzUmVmUHRyPE1lZGlhU3RyZWFtRGVzY3JpcHRvcj4gbWVkaWFT
dHJlYW0pCit7CisgICAgaWYgKCFtX3dlYkhhbmRsZXIpCisgICAgICAgIHJldHVybjsKKworICAg
IG1fd2ViSGFuZGxlci0+YWRkU3RyZWFtKG1lZGlhU3RyZWFtKTsKK30KKwordm9pZCBQZWVyQ29u
bmVjdGlvbjAwSGFuZGxlckludGVybmFsOjpyZW1vdmVTdHJlYW0oUGFzc1JlZlB0cjxNZWRpYVN0
cmVhbURlc2NyaXB0b3I+IG1lZGlhU3RyZWFtKQoreworICAgIGlmICghbV93ZWJIYW5kbGVyKQor
ICAgICAgICByZXR1cm47CisKKyAgICBtX3dlYkhhbmRsZXItPnJlbW92ZVN0cmVhbShtZWRpYVN0
cmVhbSk7Cit9CisKK3ZvaWQgUGVlckNvbm5lY3Rpb24wMEhhbmRsZXJJbnRlcm5hbDo6c3RvcCgp
Cit7CisgICAgaWYgKCFtX3dlYkhhbmRsZXIpCisgICAgICAgIHJldHVybjsKKworICAgIG1fd2Vi
SGFuZGxlci0+c3RvcCgpOworfQorCit2b2lkIFBlZXJDb25uZWN0aW9uMDBIYW5kbGVySW50ZXJu
YWw6OmRpZEdlbmVyYXRlSUNFQ2FuZGlkYXRlKGNvbnN0IFdlYktpdDo6V2ViSUNFQ2FuZGlkYXRl
RGVzY3JpcHRvciYgaWNlQ2FuZGlkYXRlLCBib29sIG1vcmVUb0ZvbGxvdykKK3sKKyAgICBtX2Ns
aWVudC0+ZGlkR2VuZXJhdGVJY2VDYW5kaWRhdGUoaWNlQ2FuZGlkYXRlLCBtb3JlVG9Gb2xsb3cp
OworfQorCit2b2lkIFBlZXJDb25uZWN0aW9uMDBIYW5kbGVySW50ZXJuYWw6OmRpZENoYW5nZVJl
YWR5U3RhdGUoUmVhZHlTdGF0ZSBzdGF0ZSkKK3sKKyAgICBtX2NsaWVudC0+ZGlkQ2hhbmdlUmVh
ZHlTdGF0ZShzdGF0ZSk7Cit9CisKK3ZvaWQgUGVlckNvbm5lY3Rpb24wMEhhbmRsZXJJbnRlcm5h
bDo6ZGlkQ2hhbmdlSUNFU3RhdGUoSUNFU3RhdGUgc3RhdGUpCit7CisgICAgbV9jbGllbnQtPmRp
ZENoYW5nZUljZVN0YXRlKHN0YXRlKTsKK30KKwordm9pZCBQZWVyQ29ubmVjdGlvbjAwSGFuZGxl
ckludGVybmFsOjpkaWRBZGRSZW1vdGVTdHJlYW0oY29uc3QgV2ViS2l0OjpXZWJNZWRpYVN0cmVh
bURlc2NyaXB0b3ImIHdlYk1lZGlhU3RyZWFtRGVzY3JpcHRvcikKK3sKKyAgICBtX2NsaWVudC0+
ZGlkQWRkUmVtb3RlU3RyZWFtKHdlYk1lZGlhU3RyZWFtRGVzY3JpcHRvcik7Cit9CisKK3ZvaWQg
UGVlckNvbm5lY3Rpb24wMEhhbmRsZXJJbnRlcm5hbDo6ZGlkUmVtb3ZlUmVtb3RlU3RyZWFtKGNv
bnN0IFdlYktpdDo6V2ViTWVkaWFTdHJlYW1EZXNjcmlwdG9yJiB3ZWJNZWRpYVN0cmVhbURlc2Ny
aXB0b3IpCit7CisgICAgbV9jbGllbnQtPmRpZFJlbW92ZVJlbW90ZVN0cmVhbSh3ZWJNZWRpYVN0
cmVhbURlc2NyaXB0b3IpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAv
LyBFTkFCTEUoTUVESUFfU1RSRUFNKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVk
aWFzdHJlYW0vY2hyb21pdW0vUGVlckNvbm5lY3Rpb24wMEhhbmRsZXJJbnRlcm5hbC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vY2hyb21pdW0v
UGVlckNvbm5lY3Rpb24wMEhhbmRsZXJJbnRlcm5hbC5jcHAJKHJldmlzaW9uIDExMjU3MSkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2Nocm9taXVtL1BlZXJDb25uZWN0
aW9uMDBIYW5kbGVySW50ZXJuYWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCwxNSArNDAsMTQg
QEAKICNpbmNsdWRlICJQZWVyQ29ubmVjdGlvbjAwLmgiCiAjaW5jbHVkZSAiUGVlckNvbm5lY3Rp
b24wMEhhbmRsZXJDbGllbnQuaCIKICNpbmNsdWRlICJTZXNzaW9uRGVzY3JpcHRpb25EZXNjcmlw
dG9yLmgiCi0jaW5jbHVkZSAiV2ViS2l0LmgiCi0jaW5jbHVkZSAicGxhdGZvcm0vV2ViSUNFQ2Fu
ZGlkYXRlRGVzY3JpcHRvci5oIgotI2luY2x1ZGUgInBsYXRmb3JtL1dlYklDRU9wdGlvbnMuaCIK
LSNpbmNsdWRlICJwbGF0Zm9ybS9XZWJLaXRQbGF0Zm9ybVN1cHBvcnQuaCIKLSNpbmNsdWRlICJw
bGF0Zm9ybS9XZWJNZWRpYUhpbnRzLmgiCi0jaW5jbHVkZSAicGxhdGZvcm0vV2ViTWVkaWFTdHJl
YW1EZXNjcmlwdG9yLmgiCi0jaW5jbHVkZSAicGxhdGZvcm0vV2ViUGVlckNvbm5lY3Rpb24wMEhh
bmRsZXIuaCIKLSNpbmNsdWRlICJwbGF0Zm9ybS9XZWJQZWVyQ29ubmVjdGlvbjAwSGFuZGxlckNs
aWVudC5oIgotI2luY2x1ZGUgInBsYXRmb3JtL1dlYlNlc3Npb25EZXNjcmlwdGlvbkRlc2NyaXB0
b3IuaCIKKyNpbmNsdWRlIDxwdWJsaWMvUGxhdGZvcm0uaD4KKyNpbmNsdWRlIDxwdWJsaWMvV2Vi
SUNFQ2FuZGlkYXRlRGVzY3JpcHRvci5oPgorI2luY2x1ZGUgPHB1YmxpYy9XZWJJQ0VPcHRpb25z
Lmg+CisjaW5jbHVkZSA8cHVibGljL1dlYk1lZGlhSGludHMuaD4KKyNpbmNsdWRlIDxwdWJsaWMv
V2ViTWVkaWFTdHJlYW1EZXNjcmlwdG9yLmg+CisjaW5jbHVkZSA8cHVibGljL1dlYlBlZXJDb25u
ZWN0aW9uMDBIYW5kbGVyLmg+CisjaW5jbHVkZSA8cHVibGljL1dlYlBlZXJDb25uZWN0aW9uMDBI
YW5kbGVyQ2xpZW50Lmg+CisjaW5jbHVkZSA8cHVibGljL1dlYlNlc3Npb25EZXNjcmlwdGlvbkRl
c2NyaXB0b3IuaD4KICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CkBAIC01Nyw3ICs1Niw3IEBAIFBlZXJDb25uZWN0aW9uMDBIYW5kbGVySW50ZXJuYWw6
OlBlZXJDb24KICAgICA6IG1fY2xpZW50KGNsaWVudCkKIHsKICAgICBBU1NFUlQobV9jbGllbnQp
OwotICAgIG1fd2ViSGFuZGxlciA9IGFkb3B0UHRyKFdlYktpdDo6d2ViS2l0UGxhdGZvcm1TdXBw
b3J0KCktPmNyZWF0ZVBlZXJDb25uZWN0aW9uMDBIYW5kbGVyKHRoaXMpKTsKKyAgICBtX3dlYkhh
bmRsZXIgPSBhZG9wdFB0cihXZWJLaXQ6OlBsYXRmb3JtOjpjdXJyZW50KCktPmNyZWF0ZVBlZXJD
b25uZWN0aW9uMDBIYW5kbGVyKHRoaXMpKTsKICAgICAvLyBGSVhNRTogV2hlbiB0aGVyZSBpcyBz
b21lIGVycm9yIHJlcG9ydGluZyBhdmFsaWFibGUgaW4gdGhlIFBlZXJDb25uZWN0aW9uIG9iamVj
dCByZXBvcnQKICAgICAvLyBpZiB3ZSBkaWRuJ3QgZ2V0IGEgV2ViUGVlckNvbm5lY3Rpb24wMEhh
bmRsZXIgaW5zdGFuY2UuCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3Ry
ZWFtL2Nocm9taXVtL1BlZXJDb25uZWN0aW9uMDBIYW5kbGVySW50ZXJuYWwuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9jaHJvbWl1bS9QZWVyQ29u
bmVjdGlvbjAwSGFuZGxlckludGVybmFsLmgJKHJldmlzaW9uIDExMjU3MSkJKGZyb20gU291cmNl
L1dlYktpdC9jaHJvbWl1bS9icmlkZ2UvUGVlckNvbm5lY3Rpb24wMEhhbmRsZXJJbnRlcm5hbC5o
OjExMjU3MSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2Nocm9taXVt
L1BlZXJDb25uZWN0aW9uMDBIYW5kbGVySW50ZXJuYWwuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDkwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6
CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIK
KyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2lmbmRlZiBQZWVyQ29ubmVjdGlvbjAwSGFuZGxlckludGVybmFsX2gKKyNkZWZp
bmUgUGVlckNvbm5lY3Rpb24wMEhhbmRsZXJJbnRlcm5hbF9oCisKKyNpZiBFTkFCTEUoTUVESUFf
U1RSRUFNKQorCisjaW5jbHVkZSAiTWVkaWFTdHJlYW1EZXNjcmlwdG9yLmgiCisjaW5jbHVkZSAi
cGxhdGZvcm0vV2ViUGVlckNvbm5lY3Rpb24wMEhhbmRsZXJDbGllbnQuaCIKKyNpbmNsdWRlIDx3
dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CitjbGFzcyBXZWJJQ0VDYW5k
aWRhdGVEZXNjcmlwdG9yOworY2xhc3MgV2ViUGVlckNvbm5lY3Rpb24wMEhhbmRsZXI7CitjbGFz
cyBXZWJNZWRpYVN0cmVhbURlc2NyaXB0b3I7CitjbGFzcyBXZWJTdHJpbmc7Cit9CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSWNlQ2FuZGlkYXRlRGVzY3JpcHRvcjsKK2NsYXNzIElj
ZU9wdGlvbnM7CitjbGFzcyBNZWRpYUhpbnRzOworY2xhc3MgUGVlckNvbm5lY3Rpb24wMEhhbmRs
ZXJDbGllbnQ7CitjbGFzcyBTZXNzaW9uRGVzY3JpcHRpb25EZXNjcmlwdG9yOworCitjbGFzcyBQ
ZWVyQ29ubmVjdGlvbjAwSGFuZGxlckludGVybmFsIDogcHVibGljIFdlYktpdDo6V2ViUGVlckNv
bm5lY3Rpb24wMEhhbmRsZXJDbGllbnQgeworcHVibGljOgorICAgIFBlZXJDb25uZWN0aW9uMDBI
YW5kbGVySW50ZXJuYWwoUGVlckNvbm5lY3Rpb24wMEhhbmRsZXJDbGllbnQqLCBjb25zdCBTdHJp
bmcmIHNlcnZlckNvbmZpZ3VyYXRpb24sIGNvbnN0IFN0cmluZyYgdXNlcm5hbWUpOworICAgIH5Q
ZWVyQ29ubmVjdGlvbjAwSGFuZGxlckludGVybmFsKCk7CisKKyAgICBQYXNzUmVmUHRyPFNlc3Np
b25EZXNjcmlwdGlvbkRlc2NyaXB0b3I+IGNyZWF0ZU9mZmVyKFBhc3NSZWZQdHI8TWVkaWFIaW50
cz4pOworICAgIFBhc3NSZWZQdHI8U2Vzc2lvbkRlc2NyaXB0aW9uRGVzY3JpcHRvcj4gY3JlYXRl
QW5zd2VyKGNvbnN0IFN0cmluZyYgb2ZmZXIsIFBhc3NSZWZQdHI8TWVkaWFIaW50cz4pOworICAg
IGJvb2wgc2V0TG9jYWxEZXNjcmlwdGlvbihpbnQgYWN0aW9uLCBQYXNzUmVmUHRyPFNlc3Npb25E
ZXNjcmlwdGlvbkRlc2NyaXB0b3I+KTsKKyAgICBib29sIHNldFJlbW90ZURlc2NyaXB0aW9uKGlu
dCBhY3Rpb24sIFBhc3NSZWZQdHI8U2Vzc2lvbkRlc2NyaXB0aW9uRGVzY3JpcHRvcj4pOworICAg
IFBhc3NSZWZQdHI8U2Vzc2lvbkRlc2NyaXB0aW9uRGVzY3JpcHRvcj4gbG9jYWxEZXNjcmlwdGlv
bigpOworICAgIFBhc3NSZWZQdHI8U2Vzc2lvbkRlc2NyaXB0aW9uRGVzY3JpcHRvcj4gcmVtb3Rl
RGVzY3JpcHRpb24oKTsKKyAgICBib29sIHN0YXJ0SWNlKFBhc3NSZWZQdHI8SWNlT3B0aW9ucz4p
OworICAgIGJvb2wgcHJvY2Vzc0ljZU1lc3NhZ2UoUGFzc1JlZlB0cjxJY2VDYW5kaWRhdGVEZXNj
cmlwdG9yPik7CisgICAgdm9pZCBhZGRTdHJlYW0oUGFzc1JlZlB0cjxNZWRpYVN0cmVhbURlc2Ny
aXB0b3I+KTsKKyAgICB2b2lkIHJlbW92ZVN0cmVhbShQYXNzUmVmUHRyPE1lZGlhU3RyZWFtRGVz
Y3JpcHRvcj4pOworICAgIHZvaWQgc3RvcCgpOworCisgICAgLy8gV2ViS2l0OjpXZWJKU0VQUGVl
ckNvbm5lY3Rpb25IYW5kbGVyQ2xpZW50IGltcGxlbWVudGF0aW9uLgorICAgIHZpcnR1YWwgdm9p
ZCBkaWRHZW5lcmF0ZUlDRUNhbmRpZGF0ZShjb25zdCBXZWJLaXQ6OldlYklDRUNhbmRpZGF0ZURl
c2NyaXB0b3ImLCBib29sIG1vcmVUb0ZvbGxvdyk7CisgICAgdmlydHVhbCB2b2lkIGRpZENoYW5n
ZVJlYWR5U3RhdGUoUmVhZHlTdGF0ZSk7CisgICAgdmlydHVhbCB2b2lkIGRpZENoYW5nZUlDRVN0
YXRlKElDRVN0YXRlKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkQWRkUmVtb3RlU3RyZWFtKGNvbnN0
IFdlYktpdDo6V2ViTWVkaWFTdHJlYW1EZXNjcmlwdG9yJik7CisgICAgdmlydHVhbCB2b2lkIGRp
ZFJlbW92ZVJlbW90ZVN0cmVhbShjb25zdCBXZWJLaXQ6OldlYk1lZGlhU3RyZWFtRGVzY3JpcHRv
ciYpOworCitwcml2YXRlOgorICAgIE93blB0cjxXZWJLaXQ6OldlYlBlZXJDb25uZWN0aW9uMDBI
YW5kbGVyPiBtX3dlYkhhbmRsZXI7CisgICAgUGVlckNvbm5lY3Rpb24wMEhhbmRsZXJDbGllbnQq
IG1fY2xpZW50OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5B
QkxFKE1FRElBX1NUUkVBTSkKKworI2VuZGlmIC8vIFBlZXJDb25uZWN0aW9uMDBIYW5kbGVySW50
ZXJuYWxfaApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vY2hyb21p
dW0vUGVlckNvbm5lY3Rpb24wMEhhbmRsZXJJbnRlcm5hbC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2Nocm9taXVtL1BlZXJDb25uZWN0aW9uMDBI
YW5kbGVySW50ZXJuYWwuaAkocmV2aXNpb24gMTEyNTcxKQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWVkaWFzdHJlYW0vY2hyb21pdW0vUGVlckNvbm5lY3Rpb24wMEhhbmRsZXJJbnRlcm5h
bC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3IEBACiAjaWYgRU5BQkxFKE1FRElBX1NU
UkVBTSkKIAogI2luY2x1ZGUgIk1lZGlhU3RyZWFtRGVzY3JpcHRvci5oIgotI2luY2x1ZGUgInBs
YXRmb3JtL1dlYlBlZXJDb25uZWN0aW9uMDBIYW5kbGVyQ2xpZW50LmgiCisjaW5jbHVkZSA8cHVi
bGljL1dlYlBlZXJDb25uZWN0aW9uMDBIYW5kbGVyQ2xpZW50Lmg+CiAjaW5jbHVkZSA8d3RmL093
blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQv
V1RGU3RyaW5nLmg+CkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkocmV2aXNpb24gMTEy
NjEwKQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkK
QEAgLTEsMyArMSw1MSBAQAorMjAxMi0wMy0yOSAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQu
b3JnPgorCisgICAgICAgIFtDaHJvbWl1bV0gRGVsZXRlIFdlYktpdC9jaHJvbWl1bS9icmlkZ2UK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgyNjc3CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRGVsZXRlIFdl
YktpdC9jaHJvbWl1bS9icmlkZ2UuICBUaGlzIHdhcyBhIGRpcmVjdG9yeSB3ZSB3ZXJlCisgICAg
ICAgIGV4cGVyaW1lbnRpbmcgd2l0aCBzdG9yaW5nIFdlYkNvcmUtbmFtZXNwYWNlZCBjb2RlLiBO
b3cgd2UncmUgYWJsZSB0bworICAgICAgICBhY3R1YWxseSBrZWVwIHRoYXQgY29kZSBpbiBXZWJD
b3JlIGl0c2VsZiwgd2hpY2ggaXMgbXVjaCBtb3JlIHNlbnNpYmxlLgorCisgICAgICAgICogV2Vi
S2l0Lmd5cDoKKyAgICAgICAgKiBicmlkZ2U6IFJlbW92ZWQuCisgICAgICAgICogYnJpZGdlL0Rl
cHJlY2F0ZWRQZWVyQ29ubmVjdGlvbkhhbmRsZXIuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIGJy
aWRnZS9EZXByZWNhdGVkUGVlckNvbm5lY3Rpb25IYW5kbGVySW50ZXJuYWwuY3BwOiBSZW1vdmVk
LgorICAgICAgICAqIGJyaWRnZS9EZXByZWNhdGVkUGVlckNvbm5lY3Rpb25IYW5kbGVySW50ZXJu
YWwuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBicmlkZ2UvTWVkaWFTdHJlYW1DZW50ZXIuY3BwOiBS
ZW1vdmVkLgorICAgICAgICAqIGJyaWRnZS9NZWRpYVN0cmVhbUNlbnRlckludGVybmFsLmNwcDog
UmVtb3ZlZC4KKyAgICAgICAgKiBicmlkZ2UvTWVkaWFTdHJlYW1DZW50ZXJJbnRlcm5hbC5oOiBS
ZW1vdmVkLgorICAgICAgICAqIGJyaWRnZS9QZWVyQ29ubmVjdGlvbjAwSGFuZGxlci5jcHA6IFJl
bW92ZWQuCisgICAgICAgICogYnJpZGdlL1BlZXJDb25uZWN0aW9uMDBIYW5kbGVySW50ZXJuYWwu
Y3BwOiBSZW1vdmVkLgorICAgICAgICAqIGJyaWRnZS9QZWVyQ29ubmVjdGlvbjAwSGFuZGxlcklu
dGVybmFsLmg6IFJlbW92ZWQuCisgICAgICAgICogcHVibGljL3BsYXRmb3JtL1dlYklDRUNhbmRp
ZGF0ZURlc2NyaXB0b3IuaDogUmVwbGFjZWQuCisgICAgICAgICogcHVibGljL3BsYXRmb3JtL1dl
YklDRU9wdGlvbnMuaDogUmVwbGFjZWQuCisgICAgICAgICogcHVibGljL3BsYXRmb3JtL1dlYktp
dFBsYXRmb3JtU3VwcG9ydC5oOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktpdFBs
YXRmb3JtU3VwcG9ydCk6CisgICAgICAgICogcHVibGljL3BsYXRmb3JtL1dlYk1lZGlhSGludHMu
aDogUmVwbGFjZWQuCisgICAgICAgICogcHVibGljL3BsYXRmb3JtL1dlYk1lZGlhU3RyZWFtQ2Vu
dGVyLmg6IFJlcGxhY2VkLgorICAgICAgICAqIHB1YmxpYy9wbGF0Zm9ybS9XZWJNZWRpYVN0cmVh
bUNlbnRlckNsaWVudC5oOiBSZXBsYWNlZC4KKyAgICAgICAgKiBwdWJsaWMvcGxhdGZvcm0vV2Vi
TWVkaWFTdHJlYW1Db21wb25lbnQuaDogUmVwbGFjZWQuCisgICAgICAgICogcHVibGljL3BsYXRm
b3JtL1dlYk1lZGlhU3RyZWFtRGVzY3JpcHRvci5oOiBSZXBsYWNlZC4KKyAgICAgICAgKiBwdWJs
aWMvcGxhdGZvcm0vV2ViTWVkaWFTdHJlYW1Tb3VyY2UuaDogUmVwbGFjZWQuCisgICAgICAgICog
cHVibGljL3BsYXRmb3JtL1dlYk1lZGlhU3RyZWFtU291cmNlc1JlcXVlc3QuaDogUmVwbGFjZWQu
CisgICAgICAgICogcHVibGljL3BsYXRmb3JtL1dlYlBlZXJDb25uZWN0aW9uMDBIYW5kbGVyLmg6
IFJlcGxhY2VkLgorICAgICAgICAqIHB1YmxpYy9wbGF0Zm9ybS9XZWJQZWVyQ29ubmVjdGlvbjAw
SGFuZGxlckNsaWVudC5oOiBSZXBsYWNlZC4KKyAgICAgICAgKiBwdWJsaWMvcGxhdGZvcm0vV2Vi
UGVlckNvbm5lY3Rpb25IYW5kbGVyLmg6IFJlcGxhY2VkLgorICAgICAgICAqIHB1YmxpYy9wbGF0
Zm9ybS9XZWJQZWVyQ29ubmVjdGlvbkhhbmRsZXJDbGllbnQuaDogUmVwbGFjZWQuCisgICAgICAg
ICogcHVibGljL3BsYXRmb3JtL1dlYlNlc3Npb25EZXNjcmlwdGlvbkRlc2NyaXB0b3IuaDogUmVw
bGFjZWQuCisgICAgICAgICogcHVibGljL3BsYXRmb3JtL1dlYlZlY3Rvci5oOiBSZXBsYWNlZC4K
KyAgICAgICAgKiBzcmMvV2ViSUNFQ2FuZGlkYXRlRGVzY3JpcHRvci5jcHA6IFJlbW92ZWQuCisg
ICAgICAgICogc3JjL1dlYklDRU9wdGlvbnMuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHNyYy9X
ZWJNZWRpYUhpbnRzLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBzcmMvV2ViTWVkaWFTdHJlYW1D
b21wb25lbnQuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHNyYy9XZWJNZWRpYVN0cmVhbURlc2Ny
aXB0b3IuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHNyYy9XZWJNZWRpYVN0cmVhbVNvdXJjZS5j
cHA6IFJlbW92ZWQuCisgICAgICAgICogc3JjL1dlYk1lZGlhU3RyZWFtU291cmNlc1JlcXVlc3Qu
Y3BwOiBSZW1vdmVkLgorCiAyMDEyLTAzLTI5ICBBZGFtIEJhcnRoICA8YWJhcnRoQHdlYmtpdC5v
cmc+CiAKICAgICAgICAgW0Nocm9taXVtXSBNb3ZlIFJlc291cmNlSGFuZGxlIHRvIFdlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9jaHJvbWl1bQpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9X
ZWJLaXQuZ3lwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5
cAkocmV2aXNpb24gMTEyNTc5KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lw
CSh3b3JraW5nIGNvcHkpCkBAIC05MSwxNSArOTEsNiBAQAogICAgICAgICAgICAgICAgICdXRUJL
SVRfSU1QTEVNRU5UQVRJT049MScsCiAgICAgICAgICAgICBdLAogICAgICAgICAgICAgJ3NvdXJj
ZXMnOiBbCi0gICAgICAgICAgICAgICAgJ2JyaWRnZS9EZXByZWNhdGVkUGVlckNvbm5lY3Rpb25I
YW5kbGVyLmNwcCcsCi0gICAgICAgICAgICAgICAgJ2JyaWRnZS9EZXByZWNhdGVkUGVlckNvbm5l
Y3Rpb25IYW5kbGVySW50ZXJuYWwuY3BwJywKLSAgICAgICAgICAgICAgICAnYnJpZGdlL0RlcHJl
Y2F0ZWRQZWVyQ29ubmVjdGlvbkhhbmRsZXJJbnRlcm5hbC5oJywKLSAgICAgICAgICAgICAgICAn
YnJpZGdlL01lZGlhU3RyZWFtQ2VudGVyLmNwcCcsCi0gICAgICAgICAgICAgICAgJ2JyaWRnZS9N
ZWRpYVN0cmVhbUNlbnRlckludGVybmFsLmNwcCcsCi0gICAgICAgICAgICAgICAgJ2JyaWRnZS9N
ZWRpYVN0cmVhbUNlbnRlckludGVybmFsLmgnLAotICAgICAgICAgICAgICAgICdicmlkZ2UvUGVl
ckNvbm5lY3Rpb24wMEhhbmRsZXIuY3BwJywKLSAgICAgICAgICAgICAgICAnYnJpZGdlL1BlZXJD
b25uZWN0aW9uMDBIYW5kbGVySW50ZXJuYWwuY3BwJywKLSAgICAgICAgICAgICAgICAnYnJpZGdl
L1BlZXJDb25uZWN0aW9uMDBIYW5kbGVySW50ZXJuYWwuaCcsCiAgICAgICAgICAgICAgICAgJ3B1
YmxpYy9XZWJBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uLmgnLAogICAgICAgICAgICAgICAgICdw
dWJsaWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdC5oJywKICAgICAgICAgICAgICAgICAncHVibGlj
L1dlYkFjY2Vzc2liaWxpdHlSb2xlLmgnLApAQCAtMTc2LDggKzE2Nyw2IEBACiAgICAgICAgICAg
ICAgICAgJ3B1YmxpYy9XZWJHZW9sb2NhdGlvblBvc2l0aW9uLmgnLAogICAgICAgICAgICAgICAg
ICdwdWJsaWMvV2ViR2x5cGhDYWNoZS5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYkhp
c3RvcnlJdGVtLmgnLAotICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViSUNFQ2FuZGlkYXRlRGVz
Y3JpcHRvci5oJywKLSAgICAgICAgICAgICAgICAncHVibGljL1dlYklDRU9wdGlvbnMuaCcsCiAg
ICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJJREJDYWxsYmFja3MuaCcsCiAgICAgICAgICAgICAg
ICAgJ3B1YmxpYy9XZWJJREJDdXJzb3IuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJJ
REJEYXRhYmFzZS5oJywKQEAgLTIwMiw3ICsxOTEsNiBAQAogICAgICAgICAgICAgICAgICdwdWJs
aWMvV2ViSW50ZW50U2VydmljZUluZm8uaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJL
aXQuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJMYWJlbEVsZW1lbnQuaCcsCi0gICAg
ICAgICAgICAgICAgJ3B1YmxpYy9XZWJNZWRpYUhpbnRzLmgnLAogICAgICAgICAgICAgICAgICdw
dWJsaWMvV2ViTWVkaWFQbGF5ZXIuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJNZWRp
YVBsYXllckFjdGlvbi5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYk1lZGlhUGxheWVy
Q2xpZW50LmgnLApAQCAtMjUwLDcgKzIzOCw2IEBACiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9X
ZWJTZWN1cml0eU9yaWdpbi5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYlNlY3VyaXR5
UG9saWN5LmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViU2VsZWN0RWxlbWVudC5oJywK
LSAgICAgICAgICAgICAgICAncHVibGljL1dlYlNlc3Npb25EZXNjcmlwdGlvbkRlc2NyaXB0b3Iu
aCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJTZXR0aW5ncy5oJywKICAgICAgICAgICAg
ICAgICAncHVibGljL1dlYlNoYXJlZFdvcmtlckNsaWVudC5oJywKICAgICAgICAgICAgICAgICAn
cHVibGljL1dlYlNoYXJlZFdvcmtlci5oJywKQEAgLTMyNSwxNiArMzEyLDcgQEAKICAgICAgICAg
ICAgICAgICAncHVibGljL3BsYXRmb3JtL1dlYkxheWVyVHJlZVZpZXcuaCcsCiAgICAgICAgICAg
ICAgICAgJ3B1YmxpYy9wbGF0Zm9ybS9XZWJMYXllclRyZWVWaWV3Q2xpZW50LmgnLAogICAgICAg
ICAgICAgICAgICdwdWJsaWMvcGxhdGZvcm0vV2ViTG9jYWxpemVkU3RyaW5nLmgnLAotICAgICAg
ICAgICAgICAgICdwdWJsaWMvcGxhdGZvcm0vV2ViTWVkaWFTdHJlYW1DZW50ZXIuaCcsCi0gICAg
ICAgICAgICAgICAgJ3B1YmxpYy9wbGF0Zm9ybS9XZWJNZWRpYVN0cmVhbUNvbXBvbmVudC5oJywK
LSAgICAgICAgICAgICAgICAncHVibGljL3BsYXRmb3JtL1dlYk1lZGlhU3RyZWFtRGVzY3JpcHRv
ci5oJywKLSAgICAgICAgICAgICAgICAncHVibGljL3BsYXRmb3JtL1dlYk1lZGlhU3RyZWFtU291
cmNlLmgnLAotICAgICAgICAgICAgICAgICdwdWJsaWMvcGxhdGZvcm0vV2ViTWVkaWFTdHJlYW1T
b3VyY2VzUmVxdWVzdC5oJywKICAgICAgICAgICAgICAgICAncHVibGljL3BsYXRmb3JtL1dlYk5v
bkNvcHlhYmxlLmgnLAotICAgICAgICAgICAgICAgICdwdWJsaWMvcGxhdGZvcm0vV2ViUGVlckNv
bm5lY3Rpb24wMEhhbmRsZXIuaCcsCi0gICAgICAgICAgICAgICAgJ3B1YmxpYy9wbGF0Zm9ybS9X
ZWJQZWVyQ29ubmVjdGlvbjAwSGFuZGxlckNsaWVudC5oJywKLSAgICAgICAgICAgICAgICAncHVi
bGljL3BsYXRmb3JtL1dlYlBlZXJDb25uZWN0aW9uSGFuZGxlci5oJywKLSAgICAgICAgICAgICAg
ICAncHVibGljL3BsYXRmb3JtL1dlYlBlZXJDb25uZWN0aW9uSGFuZGxlckNsaWVudC5oJywKICAg
ICAgICAgICAgICAgICAncHVibGljL3BsYXRmb3JtL1dlYlBvaW50LmgnLAogICAgICAgICAgICAg
ICAgICdwdWJsaWMvcGxhdGZvcm0vV2ViUHJpdmF0ZU93blB0ci5oJywKICAgICAgICAgICAgICAg
ICAncHVibGljL3BsYXRmb3JtL1dlYlByaXZhdGVQdHIuaCcsCkBAIC01NjQsOCArNTQyLDYgQEAK
ICAgICAgICAgICAgICAgICAnc3JjL1dlYkdseXBoQ2FjaGUuY3BwJywKICAgICAgICAgICAgICAg
ICAnc3JjL1dlYkdyYXBoaWNzQ29udGV4dDNELmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9X
ZWJIaXN0b3J5SXRlbS5jcHAnLAotICAgICAgICAgICAgICAgICdzcmMvV2ViSUNFQ2FuZGlkYXRl
RGVzY3JpcHRvci5jcHAnLAotICAgICAgICAgICAgICAgICdzcmMvV2ViSUNFT3B0aW9ucy5jcHAn
LAogICAgICAgICAgICAgICAgICdzcmMvV2ViSWNvbkxvYWRpbmdDb21wbGV0aW9uSW1wbC5jcHAn
LAogICAgICAgICAgICAgICAgICdzcmMvV2ViSWNvbkxvYWRpbmdDb21wbGV0aW9uSW1wbC5oJywK
ICAgICAgICAgICAgICAgICAnc3JjL1dlYklEQkNhbGxiYWNrc0ltcGwuY3BwJywKQEAgLTYwOCwx
NCArNTg0LDkgQEAKICAgICAgICAgICAgICAgICAnc3JjL1dlYkxheWVyVHJlZVZpZXcuY3BwJywK
ICAgICAgICAgICAgICAgICAnc3JjL1dlYkxheWVyVHJlZVZpZXdJbXBsLmNwcCcsCiAgICAgICAg
ICAgICAgICAgJ3NyYy9XZWJMYXllclRyZWVWaWV3SW1wbC5oJywKLSAgICAgICAgICAgICAgICAn
c3JjL1dlYk1lZGlhSGludHMuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYk1lZGlhUGxh
eWVyQ2xpZW50SW1wbC5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViTWVkaWFQbGF5ZXJD
bGllbnRJbXBsLmgnLAotICAgICAgICAgICAgICAgICdzcmMvV2ViTWVkaWFTdHJlYW1Db21wb25l
bnQuY3BwJywKLSAgICAgICAgICAgICAgICAnc3JjL1dlYk1lZGlhU3RyZWFtRGVzY3JpcHRvci5j
cHAnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViTWVkaWFTdHJlYW1SZWdpc3RyeS5jcHAnLAot
ICAgICAgICAgICAgICAgICdzcmMvV2ViTWVkaWFTdHJlYW1Tb3VyY2UuY3BwJywKLSAgICAgICAg
ICAgICAgICAnc3JjL1dlYk1lZGlhU3RyZWFtU291cmNlc1JlcXVlc3QuY3BwJywKICAgICAgICAg
ICAgICAgICAnc3JjL1dlYk5hbWVkTm9kZU1hcC5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMv
V2ViTmV0d29ya1N0YXRlTm90aWZpZXIuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYk5v
ZGUuY3BwJywKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vYnJpZGdlL0RlcHJlY2F0ZWRQ
ZWVyQ29ubmVjdGlvbkhhbmRsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hy
b21pdW0vYnJpZGdlL0RlcHJlY2F0ZWRQZWVyQ29ubmVjdGlvbkhhbmRsZXIuY3BwCShyZXZpc2lv
biAxMTI1NzEpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL2JyaWRnZS9EZXByZWNhdGVkUGVl
ckNvbm5lY3Rpb25IYW5kbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw4OCArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAg
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAq
IGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4g
bm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0g
KiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lu
Y2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKLQotI2luY2x1ZGUg
IkRlcHJlY2F0ZWRQZWVyQ29ubmVjdGlvbkhhbmRsZXIuaCIKLQotI2luY2x1ZGUgIkRlcHJlY2F0
ZWRQZWVyQ29ubmVjdGlvbkhhbmRsZXJDbGllbnQuaCIKLSNpbmNsdWRlICJEZXByZWNhdGVkUGVl
ckNvbm5lY3Rpb25IYW5kbGVySW50ZXJuYWwuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1Q
YXNzT3duUHRyPERlcHJlY2F0ZWRQZWVyQ29ubmVjdGlvbkhhbmRsZXI+IERlcHJlY2F0ZWRQZWVy
Q29ubmVjdGlvbkhhbmRsZXI6OmNyZWF0ZShEZXByZWNhdGVkUGVlckNvbm5lY3Rpb25IYW5kbGVy
Q2xpZW50KiBjbGllbnQsIGNvbnN0IFN0cmluZyYgc2VydmVyQ29uZmlndXJhdGlvbiwgY29uc3Qg
U3RyaW5nJiB1c2VybmFtZSkKLXsKLSAgICByZXR1cm4gYWRvcHRQdHIobmV3IERlcHJlY2F0ZWRQ
ZWVyQ29ubmVjdGlvbkhhbmRsZXIoY2xpZW50LCBzZXJ2ZXJDb25maWd1cmF0aW9uLCB1c2VybmFt
ZSkpOwotfQotCi1EZXByZWNhdGVkUGVlckNvbm5lY3Rpb25IYW5kbGVyOjpEZXByZWNhdGVkUGVl
ckNvbm5lY3Rpb25IYW5kbGVyKERlcHJlY2F0ZWRQZWVyQ29ubmVjdGlvbkhhbmRsZXJDbGllbnQq
IGNsaWVudCwgY29uc3QgU3RyaW5nJiBzZXJ2ZXJDb25maWd1cmF0aW9uLCBjb25zdCBTdHJpbmcm
IHVzZXJuYW1lKQotICAgIDogbV9wcml2YXRlKGFkb3B0UHRyKG5ldyBEZXByZWNhdGVkUGVlckNv
bm5lY3Rpb25IYW5kbGVySW50ZXJuYWwoY2xpZW50LCBzZXJ2ZXJDb25maWd1cmF0aW9uLCB1c2Vy
bmFtZSkpKQotewotfQotCi1EZXByZWNhdGVkUGVlckNvbm5lY3Rpb25IYW5kbGVyOjp+RGVwcmVj
YXRlZFBlZXJDb25uZWN0aW9uSGFuZGxlcigpCi17Ci19Ci0KLXZvaWQgRGVwcmVjYXRlZFBlZXJD
b25uZWN0aW9uSGFuZGxlcjo6cHJvZHVjZUluaXRpYWxPZmZlcihjb25zdCBNZWRpYVN0cmVhbURl
c2NyaXB0b3JWZWN0b3ImIHBlbmRpbmdBZGRTdHJlYW1zKQotewotICAgIG1fcHJpdmF0ZS0+cHJv
ZHVjZUluaXRpYWxPZmZlcihwZW5kaW5nQWRkU3RyZWFtcyk7Ci19Ci0KLXZvaWQgRGVwcmVjYXRl
ZFBlZXJDb25uZWN0aW9uSGFuZGxlcjo6aGFuZGxlSW5pdGlhbE9mZmVyKGNvbnN0IFN0cmluZyYg
c2RwKQotewotICAgIG1fcHJpdmF0ZS0+aGFuZGxlSW5pdGlhbE9mZmVyKHNkcCk7Ci19Ci0KLXZv
aWQgRGVwcmVjYXRlZFBlZXJDb25uZWN0aW9uSGFuZGxlcjo6cHJvY2Vzc1NEUChjb25zdCBTdHJp
bmcmIHNkcCkKLXsKLSAgICBtX3ByaXZhdGUtPnByb2Nlc3NTRFAoc2RwKTsKLX0KLQotdm9pZCBE
ZXByZWNhdGVkUGVlckNvbm5lY3Rpb25IYW5kbGVyOjpwcm9jZXNzUGVuZGluZ1N0cmVhbXMoY29u
c3QgTWVkaWFTdHJlYW1EZXNjcmlwdG9yVmVjdG9yJiBwZW5kaW5nQWRkU3RyZWFtcywgY29uc3Qg
TWVkaWFTdHJlYW1EZXNjcmlwdG9yVmVjdG9yJiBwZW5kaW5nUmVtb3ZlU3RyZWFtcykKLXsKLSAg
ICBtX3ByaXZhdGUtPnByb2Nlc3NQZW5kaW5nU3RyZWFtcyhwZW5kaW5nQWRkU3RyZWFtcywgcGVu
ZGluZ1JlbW92ZVN0cmVhbXMpOwotfQotCi12b2lkIERlcHJlY2F0ZWRQZWVyQ29ubmVjdGlvbkhh
bmRsZXI6OnNlbmREYXRhU3RyZWFtTWVzc2FnZShjb25zdCBjaGFyKiBkYXRhLCBzaXplX3QgbGVu
Z3RoKQotewotICAgIG1fcHJpdmF0ZS0+c2VuZERhdGFTdHJlYW1NZXNzYWdlKGRhdGEsIGxlbmd0
aCk7Ci19Ci0KLXZvaWQgRGVwcmVjYXRlZFBlZXJDb25uZWN0aW9uSGFuZGxlcjo6c3RvcCgpCi17
Ci0gICAgbV9wcml2YXRlLT5zdG9wKCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQot
I2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL2JyaWRnZS9EZXByZWNhdGVkUGVlckNvbm5lY3Rpb25IYW5kbGVySW50ZXJuYWwuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vYnJpZGdlL0RlcHJlY2F0ZWRQZWVy
Q29ubmVjdGlvbkhhbmRsZXJJbnRlcm5hbC5jcHAJKHJldmlzaW9uIDExMjU3MSkKKysrIFNvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vYnJpZGdlL0RlcHJlY2F0ZWRQZWVyQ29ubmVjdGlvbkhhbmRsZXJJ
bnRlcm5hbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTM3ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0
aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAot
ICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29u
ZmlnLmgiCi0KLSNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQotCi0jaW5jbHVkZSAiRGVwcmVjYXRl
ZFBlZXJDb25uZWN0aW9uSGFuZGxlckludGVybmFsLmgiCi0KLSNpbmNsdWRlICJEZXByZWNhdGVk
UGVlckNvbm5lY3Rpb25IYW5kbGVyQ2xpZW50LmgiCi0jaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4u
aCIKLSNpbmNsdWRlICJXZWJLaXQuaCIKLSNpbmNsdWRlICJwbGF0Zm9ybS9XZWJLaXRQbGF0Zm9y
bVN1cHBvcnQuaCIKLSNpbmNsdWRlICJwbGF0Zm9ybS9XZWJNZWRpYVN0cmVhbURlc2NyaXB0b3Iu
aCIKLSNpbmNsdWRlICJwbGF0Zm9ybS9XZWJQZWVyQ29ubmVjdGlvbkhhbmRsZXIuaCIKLSNpbmNs
dWRlICJwbGF0Zm9ybS9XZWJQZWVyQ29ubmVjdGlvbkhhbmRsZXJDbGllbnQuaCIKLSNpbmNsdWRl
IDx3dGYvUGFzc093blB0ci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLURlcHJlY2F0ZWRQ
ZWVyQ29ubmVjdGlvbkhhbmRsZXJJbnRlcm5hbDo6RGVwcmVjYXRlZFBlZXJDb25uZWN0aW9uSGFu
ZGxlckludGVybmFsKERlcHJlY2F0ZWRQZWVyQ29ubmVjdGlvbkhhbmRsZXJDbGllbnQqIGNsaWVu
dCwgY29uc3QgU3RyaW5nJiBzZXJ2ZXJDb25maWd1cmF0aW9uLCBjb25zdCBTdHJpbmcmIHVzZXJu
YW1lKQotICAgIDogbV9jbGllbnQoY2xpZW50KQotewotICAgIEFTU0VSVChtX2NsaWVudCk7Ci0g
ICAgbV93ZWJIYW5kbGVyID0gYWRvcHRQdHIoV2ViS2l0Ojp3ZWJLaXRQbGF0Zm9ybVN1cHBvcnQo
KS0+Y3JlYXRlUGVlckNvbm5lY3Rpb25IYW5kbGVyKHRoaXMpKTsKLSAgICAvLyBGSVhNRTogV2hl
biB0aGVyZSBpcyBzb21lIGVycm9yIHJlcG9ydGluZyBhdmFsaWFibGUgaW4gdGhlIFBlZXJDb25u
ZWN0aW9uIG9iamVjdCByZXBvcnQKLSAgICAvLyBpZiB3ZSBkaWRuJ3QgZ2V0IGEgV2ViUGVlckNv
bm5lY3Rpb25IYW5kbGVyIGluc3RhbmNlLgotCi0gICAgaWYgKG1fd2ViSGFuZGxlcikgewotICAg
ICAgICAvLyBEdWFsIGNhbGxzIGR1ZSB0byBBUEkgY2hhbmdlCi0gICAgICAgIG1fd2ViSGFuZGxl
ci0+aW5pdGlhbGl6ZShzZXJ2ZXJDb25maWd1cmF0aW9uLCB1c2VybmFtZSk7Ci0KLSAgICAgICAg
Ly8gREVQUkVDQVRFRAotICAgICAgICBtX3dlYkhhbmRsZXItPmluaXRpYWxpemUoc2VydmVyQ29u
ZmlndXJhdGlvbiwgU2VjdXJpdHlPcmlnaW46OmNyZWF0ZUZyb21TdHJpbmcodXNlcm5hbWUpKTsK
LSAgICB9Ci19Ci0KLURlcHJlY2F0ZWRQZWVyQ29ubmVjdGlvbkhhbmRsZXJJbnRlcm5hbDo6fkRl
cHJlY2F0ZWRQZWVyQ29ubmVjdGlvbkhhbmRsZXJJbnRlcm5hbCgpCi17Ci19Ci0KLXZvaWQgRGVw
cmVjYXRlZFBlZXJDb25uZWN0aW9uSGFuZGxlckludGVybmFsOjpwcm9kdWNlSW5pdGlhbE9mZmVy
KGNvbnN0IE1lZGlhU3RyZWFtRGVzY3JpcHRvclZlY3RvciYgcGVuZGluZ0FkZFN0cmVhbXMpCi17
Ci0gICAgaWYgKG1fd2ViSGFuZGxlcikKLSAgICAgICAgbV93ZWJIYW5kbGVyLT5wcm9kdWNlSW5p
dGlhbE9mZmVyKHBlbmRpbmdBZGRTdHJlYW1zKTsKLX0KLQotdm9pZCBEZXByZWNhdGVkUGVlckNv
bm5lY3Rpb25IYW5kbGVySW50ZXJuYWw6OmhhbmRsZUluaXRpYWxPZmZlcihjb25zdCBTdHJpbmcm
IHNkcCkKLXsKLSAgICBpZiAobV93ZWJIYW5kbGVyKQotICAgICAgICBtX3dlYkhhbmRsZXItPmhh
bmRsZUluaXRpYWxPZmZlcihzZHApOwotfQotCi12b2lkIERlcHJlY2F0ZWRQZWVyQ29ubmVjdGlv
bkhhbmRsZXJJbnRlcm5hbDo6cHJvY2Vzc1NEUChjb25zdCBTdHJpbmcmIHNkcCkKLXsKLSAgICBp
ZiAobV93ZWJIYW5kbGVyKQotICAgICAgICBtX3dlYkhhbmRsZXItPnByb2Nlc3NTRFAoc2RwKTsK
LX0KLQotdm9pZCBEZXByZWNhdGVkUGVlckNvbm5lY3Rpb25IYW5kbGVySW50ZXJuYWw6OnByb2Nl
c3NQZW5kaW5nU3RyZWFtcyhjb25zdCBNZWRpYVN0cmVhbURlc2NyaXB0b3JWZWN0b3ImIHBlbmRp
bmdBZGRTdHJlYW1zLCBjb25zdCBNZWRpYVN0cmVhbURlc2NyaXB0b3JWZWN0b3ImIHBlbmRpbmdS
ZW1vdmVTdHJlYW1zKQotewotICAgIGlmIChtX3dlYkhhbmRsZXIpCi0gICAgICAgIG1fd2ViSGFu
ZGxlci0+cHJvY2Vzc1BlbmRpbmdTdHJlYW1zKHBlbmRpbmdBZGRTdHJlYW1zLCBwZW5kaW5nUmVt
b3ZlU3RyZWFtcyk7Ci19Ci0KLXZvaWQgRGVwcmVjYXRlZFBlZXJDb25uZWN0aW9uSGFuZGxlcklu
dGVybmFsOjpzZW5kRGF0YVN0cmVhbU1lc3NhZ2UoY29uc3QgY2hhciogZGF0YSwgc2l6ZV90IGxl
bmd0aCkKLXsKLSAgICBpZiAobV93ZWJIYW5kbGVyKQotICAgICAgICBtX3dlYkhhbmRsZXItPnNl
bmREYXRhU3RyZWFtTWVzc2FnZShkYXRhLCBsZW5ndGgpOwotfQotCi12b2lkIERlcHJlY2F0ZWRQ
ZWVyQ29ubmVjdGlvbkhhbmRsZXJJbnRlcm5hbDo6c3RvcCgpCi17Ci0gICAgaWYgKG1fd2ViSGFu
ZGxlcikKLSAgICAgICAgbV93ZWJIYW5kbGVyLT5zdG9wKCk7Ci19Ci0KLXZvaWQgRGVwcmVjYXRl
ZFBlZXJDb25uZWN0aW9uSGFuZGxlckludGVybmFsOjpkaWRDb21wbGV0ZUlDRVByb2Nlc3Npbmco
KQotewotICAgIGlmIChtX3dlYkhhbmRsZXIpCi0gICAgICAgIG1fY2xpZW50LT5kaWRDb21wbGV0
ZUlDRVByb2Nlc3NpbmcoKTsKLX0KLQotdm9pZCBEZXByZWNhdGVkUGVlckNvbm5lY3Rpb25IYW5k
bGVySW50ZXJuYWw6OmRpZEdlbmVyYXRlU0RQKGNvbnN0IFdlYktpdDo6V2ViU3RyaW5nJiBzZHAp
Ci17Ci0gICAgaWYgKG1fd2ViSGFuZGxlcikKLSAgICAgICAgbV9jbGllbnQtPmRpZEdlbmVyYXRl
U0RQKHNkcCk7Ci19Ci0KLXZvaWQgRGVwcmVjYXRlZFBlZXJDb25uZWN0aW9uSGFuZGxlckludGVy
bmFsOjpkaWRSZWNlaXZlRGF0YVN0cmVhbU1lc3NhZ2UoY29uc3QgY2hhciogZGF0YSwgc2l6ZV90
IGxlbmd0aCkKLXsKLSAgICBpZiAobV93ZWJIYW5kbGVyKQotICAgICAgICBtX2NsaWVudC0+ZGlk
UmVjZWl2ZURhdGFTdHJlYW1NZXNzYWdlKGRhdGEsIGxlbmd0aCk7Ci19Ci0KLXZvaWQgRGVwcmVj
YXRlZFBlZXJDb25uZWN0aW9uSGFuZGxlckludGVybmFsOjpkaWRBZGRSZW1vdGVTdHJlYW0oY29u
c3QgV2ViS2l0OjpXZWJNZWRpYVN0cmVhbURlc2NyaXB0b3ImIHdlYk1lZGlhU3RyZWFtRGVzY3Jp
cHRvcikKLXsKLSAgICBpZiAobV93ZWJIYW5kbGVyKQotICAgICAgICBtX2NsaWVudC0+ZGlkQWRk
UmVtb3RlU3RyZWFtKHdlYk1lZGlhU3RyZWFtRGVzY3JpcHRvcik7Ci19Ci0KLXZvaWQgRGVwcmVj
YXRlZFBlZXJDb25uZWN0aW9uSGFuZGxlckludGVybmFsOjpkaWRSZW1vdmVSZW1vdGVTdHJlYW0o
Y29uc3QgV2ViS2l0OjpXZWJNZWRpYVN0cmVhbURlc2NyaXB0b3ImIHdlYk1lZGlhU3RyZWFtRGVz
Y3JpcHRvcikKLXsKLSAgICBpZiAobV93ZWJIYW5kbGVyKQotICAgICAgICBtX2NsaWVudC0+ZGlk
UmVtb3ZlUmVtb3RlU3RyZWFtKHdlYk1lZGlhU3RyZWFtRGVzY3JpcHRvcik7Ci19Ci0KLX0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pCkluZGV4
OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL2JyaWRnZS9EZXByZWNhdGVkUGVlckNvbm5lY3Rpb25I
YW5kbGVySW50ZXJuYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL2Jy
aWRnZS9EZXByZWNhdGVkUGVlckNvbm5lY3Rpb25IYW5kbGVySW50ZXJuYWwuaAkocmV2aXNpb24g
MTEyNTcxKQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9icmlkZ2UvRGVwcmVjYXRlZFBlZXJD
b25uZWN0aW9uSGFuZGxlckludGVybmFsLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsODAgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
Ci0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICog
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LSNpZm5kZWYgRGVwcmVjYXRlZFBlZXJDb25uZWN0aW9uSGFuZGxlckludGVybmFsX2gKLSNkZWZp
bmUgRGVwcmVjYXRlZFBlZXJDb25uZWN0aW9uSGFuZGxlckludGVybmFsX2gKLQotI2lmIEVOQUJM
RShNRURJQV9TVFJFQU0pCi0KLSNpbmNsdWRlICJNZWRpYVN0cmVhbURlc2NyaXB0b3IuaCIKLSNp
bmNsdWRlICJwbGF0Zm9ybS9XZWJQZWVyQ29ubmVjdGlvbkhhbmRsZXJDbGllbnQuaCIKLSNpbmNs
dWRlIDx3dGYvT3duUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KLSNpbmNsdWRl
IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci1jbGFzcyBXZWJQ
ZWVyQ29ubmVjdGlvbkhhbmRsZXI7Ci1jbGFzcyBXZWJTdHJpbmc7Ci1jbGFzcyBXZWJNZWRpYVN0
cmVhbURlc2NyaXB0b3I7Ci19Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgRGVwcmVj
YXRlZFBlZXJDb25uZWN0aW9uSGFuZGxlckNsaWVudDsKLQotY2xhc3MgRGVwcmVjYXRlZFBlZXJD
b25uZWN0aW9uSGFuZGxlckludGVybmFsIDogcHVibGljIFdlYktpdDo6V2ViUGVlckNvbm5lY3Rp
b25IYW5kbGVyQ2xpZW50IHsKLXB1YmxpYzoKLSAgICBEZXByZWNhdGVkUGVlckNvbm5lY3Rpb25I
YW5kbGVySW50ZXJuYWwoRGVwcmVjYXRlZFBlZXJDb25uZWN0aW9uSGFuZGxlckNsaWVudCosIGNv
bnN0IFN0cmluZyYgc2VydmVyQ29uZmlndXJhdGlvbiwgY29uc3QgU3RyaW5nJiB1c2VybmFtZSk7
Ci0gICAgfkRlcHJlY2F0ZWRQZWVyQ29ubmVjdGlvbkhhbmRsZXJJbnRlcm5hbCgpOwotCi0gICAg
dmlydHVhbCB2b2lkIHByb2R1Y2VJbml0aWFsT2ZmZXIoY29uc3QgTWVkaWFTdHJlYW1EZXNjcmlw
dG9yVmVjdG9yJiBwZW5kaW5nQWRkU3RyZWFtcyk7Ci0gICAgdmlydHVhbCB2b2lkIGhhbmRsZUlu
aXRpYWxPZmZlcihjb25zdCBTdHJpbmcmIHNkcCk7Ci0gICAgdmlydHVhbCB2b2lkIHByb2Nlc3NT
RFAoY29uc3QgU3RyaW5nJiBzZHApOwotICAgIHZpcnR1YWwgdm9pZCBwcm9jZXNzUGVuZGluZ1N0
cmVhbXMoY29uc3QgTWVkaWFTdHJlYW1EZXNjcmlwdG9yVmVjdG9yJiBwZW5kaW5nQWRkU3RyZWFt
cywgY29uc3QgTWVkaWFTdHJlYW1EZXNjcmlwdG9yVmVjdG9yJiBwZW5kaW5nUmVtb3ZlU3RyZWFt
cyk7Ci0gICAgdmlydHVhbCB2b2lkIHNlbmREYXRhU3RyZWFtTWVzc2FnZShjb25zdCBjaGFyKiBk
YXRhLCBzaXplX3QgbGVuZ3RoKTsKLSAgICB2aXJ0dWFsIHZvaWQgc3RvcCgpOwotCi0gICAgLy8g
V2ViS2l0OjpXZWJQZWVyQ29ubmVjdGlvbkhhbmRsZXJDbGllbnQgaW1wbGVtZW50YXRpb24uCi0g
ICAgdmlydHVhbCB2b2lkIGRpZENvbXBsZXRlSUNFUHJvY2Vzc2luZygpOwotICAgIHZpcnR1YWwg
dm9pZCBkaWRHZW5lcmF0ZVNEUChjb25zdCBXZWJLaXQ6OldlYlN0cmluZyYgc2RwKTsKLSAgICB2
aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZURhdGFTdHJlYW1NZXNzYWdlKGNvbnN0IGNoYXIqIGRhdGEs
IHNpemVfdCBsZW5ndGgpOwotICAgIHZpcnR1YWwgdm9pZCBkaWRBZGRSZW1vdGVTdHJlYW0oY29u
c3QgV2ViS2l0OjpXZWJNZWRpYVN0cmVhbURlc2NyaXB0b3ImKTsKLSAgICB2aXJ0dWFsIHZvaWQg
ZGlkUmVtb3ZlUmVtb3RlU3RyZWFtKGNvbnN0IFdlYktpdDo6V2ViTWVkaWFTdHJlYW1EZXNjcmlw
dG9yJik7Ci0KLXByaXZhdGU6Ci0gICAgT3duUHRyPFdlYktpdDo6V2ViUGVlckNvbm5lY3Rpb25I
YW5kbGVyPiBtX3dlYkhhbmRsZXI7Ci0gICAgRGVwcmVjYXRlZFBlZXJDb25uZWN0aW9uSGFuZGxl
ckNsaWVudCogbV9jbGllbnQ7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRp
ZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKQotCi0jZW5kaWYgLy8gRGVwcmVjYXRlZFBlZXJDb25u
ZWN0aW9uSGFuZGxlckludGVybmFsX2gKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vYnJp
ZGdlL01lZGlhU3RyZWFtQ2VudGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2No
cm9taXVtL2JyaWRnZS9NZWRpYVN0cmVhbUNlbnRlci5jcHAJKHJldmlzaW9uIDExMjU3MSkKKysr
IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vYnJpZGdlL01lZGlhU3RyZWFtQ2VudGVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw4NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
LSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5B
QkxFKE1FRElBX1NUUkVBTSkKLQotI2luY2x1ZGUgIk1lZGlhU3RyZWFtQ2VudGVyLmgiCi0KLSNp
bmNsdWRlICJNZWRpYVN0cmVhbUNlbnRlckludGVybmFsLmgiCi0jaW5jbHVkZSAiTWVkaWFTdHJl
YW1EZXNjcmlwdG9yLmgiCi0jaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KLQotbmFtZXNwYWNl
IFdlYkNvcmUgewotCi1NZWRpYVN0cmVhbUNlbnRlcjo6TWVkaWFTdHJlYW1DZW50ZXIoKQotICAg
IDogbV9wcml2YXRlKGFkb3B0UHRyKG5ldyBNZWRpYVN0cmVhbUNlbnRlckludGVybmFsKHRoaXMp
KSkKLXsKLX0KLQotTWVkaWFTdHJlYW1DZW50ZXI6On5NZWRpYVN0cmVhbUNlbnRlcigpCi17Ci19
Ci0KLXZvaWQgTWVkaWFTdHJlYW1DZW50ZXI6OnF1ZXJ5TWVkaWFTdHJlYW1Tb3VyY2VzKFBhc3NS
ZWZQdHI8TWVkaWFTdHJlYW1Tb3VyY2VzUXVlcnlDbGllbnQ+IGNsaWVudCkKLXsKLSAgICBtX3By
aXZhdGUtPnF1ZXJ5TWVkaWFTdHJlYW1Tb3VyY2VzKGNsaWVudCk7Ci19Ci0KLXZvaWQgTWVkaWFT
dHJlYW1DZW50ZXI6OmRpZFNldE1lZGlhU3RyZWFtVHJhY2tFbmFibGVkKE1lZGlhU3RyZWFtRGVz
Y3JpcHRvciogc3RyZWFtLCAgTWVkaWFTdHJlYW1Db21wb25lbnQqIGNvbXBvbmVudCkKLXsKLSAg
ICBtX3ByaXZhdGUtPmRpZFNldE1lZGlhU3RyZWFtVHJhY2tFbmFibGVkKHN0cmVhbSwgY29tcG9u
ZW50KTsKLX0KLQotdm9pZCBNZWRpYVN0cmVhbUNlbnRlcjo6ZGlkU3RvcExvY2FsTWVkaWFTdHJl
YW0oTWVkaWFTdHJlYW1EZXNjcmlwdG9yKiBzdHJlYW0pCi17Ci0gICAgbV9wcml2YXRlLT5kaWRT
dG9wTG9jYWxNZWRpYVN0cmVhbShzdHJlYW0pOwotfQotCi12b2lkIE1lZGlhU3RyZWFtQ2VudGVy
OjpkaWRDb25zdHJ1Y3RNZWRpYVN0cmVhbShNZWRpYVN0cmVhbURlc2NyaXB0b3IqIHN0cmVhbSkK
LXsKLSAgICBtX3ByaXZhdGUtPmRpZENvbnN0cnVjdE1lZGlhU3RyZWFtKHN0cmVhbSk7Ci19Ci0K
LVN0cmluZyBNZWRpYVN0cmVhbUNlbnRlcjo6Y29uc3RydWN0U0RQKEljZUNhbmRpZGF0ZURlc2Ny
aXB0b3IqIGljZUNhbmRpZGF0ZSkKLXsKLSAgICByZXR1cm4gbV9wcml2YXRlLT5jb25zdHJ1Y3RT
RFAoaWNlQ2FuZGlkYXRlKTsKLX0KLQotU3RyaW5nIE1lZGlhU3RyZWFtQ2VudGVyOjpjb25zdHJ1
Y3RTRFAoU2Vzc2lvbkRlc2NyaXB0aW9uRGVzY3JpcHRvciogc2Vzc2lvbkRlc2NyaXB0aW9uKQot
ewotICAgIHJldHVybiBtX3ByaXZhdGUtPmNvbnN0cnVjdFNEUChzZXNzaW9uRGVzY3JpcHRpb24p
OwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoTUVESUFf
U1RSRUFNKQpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9icmlkZ2UvTWVkaWFTdHJlYW1D
ZW50ZXJJbnRlcm5hbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9i
cmlkZ2UvTWVkaWFTdHJlYW1DZW50ZXJJbnRlcm5hbC5jcHAJKHJldmlzaW9uIDExMjU3MSkKKysr
IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vYnJpZGdlL01lZGlhU3RyZWFtQ2VudGVySW50ZXJuYWwu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDExMCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAq
ICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0g
KiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgot
Ci0jaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKLQotI2luY2x1ZGUgIk1lZGlhU3RyZWFtQ2VudGVy
SW50ZXJuYWwuaCIKLQotI2luY2x1ZGUgIkljZUNhbmRpZGF0ZURlc2NyaXB0b3IuaCIKLSNpbmNs
dWRlICJNZWRpYVN0cmVhbUNlbnRlci5oIgotI2luY2x1ZGUgIk1lZGlhU3RyZWFtQ29tcG9uZW50
LmgiCi0jaW5jbHVkZSAiTWVkaWFTdHJlYW1Tb3VyY2UuaCIKLSNpbmNsdWRlICJTZXNzaW9uRGVz
Y3JpcHRpb25EZXNjcmlwdG9yLmgiCi0jaW5jbHVkZSAiV2ViS2l0LmgiCi0jaW5jbHVkZSAicGxh
dGZvcm0vV2ViSUNFQ2FuZGlkYXRlRGVzY3JpcHRvci5oIgotI2luY2x1ZGUgInBsYXRmb3JtL1dl
YktpdFBsYXRmb3JtU3VwcG9ydC5oIgotI2luY2x1ZGUgInBsYXRmb3JtL1dlYk1lZGlhU3RyZWFt
Q2VudGVyLmgiCi0jaW5jbHVkZSAicGxhdGZvcm0vV2ViTWVkaWFTdHJlYW1Db21wb25lbnQuaCIK
LSNpbmNsdWRlICJwbGF0Zm9ybS9XZWJNZWRpYVN0cmVhbURlc2NyaXB0b3IuaCIKLSNpbmNsdWRl
ICJwbGF0Zm9ybS9XZWJNZWRpYVN0cmVhbVNvdXJjZXNSZXF1ZXN0LmgiCi0jaW5jbHVkZSAicGxh
dGZvcm0vV2ViU2Vzc2lvbkRlc2NyaXB0aW9uRGVzY3JpcHRvci5oIgotI2luY2x1ZGUgPHd0Zi9Q
YXNzT3duUHRyLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotTWVkaWFTdHJlYW1DZW50ZXJJ
bnRlcm5hbDo6TWVkaWFTdHJlYW1DZW50ZXJJbnRlcm5hbChNZWRpYVN0cmVhbUNlbnRlciogb3du
ZXIpCi0gICAgOiBtX3ByaXZhdGUoYWRvcHRQdHIoV2ViS2l0Ojp3ZWJLaXRQbGF0Zm9ybVN1cHBv
cnQoKS0+Y3JlYXRlTWVkaWFTdHJlYW1DZW50ZXIodGhpcykpKQotICAgICwgbV9vd25lcihvd25l
cikKLXsKLX0KLQotTWVkaWFTdHJlYW1DZW50ZXJJbnRlcm5hbDo6fk1lZGlhU3RyZWFtQ2VudGVy
SW50ZXJuYWwoKQotewotfQotCi12b2lkIE1lZGlhU3RyZWFtQ2VudGVySW50ZXJuYWw6OnF1ZXJ5
TWVkaWFTdHJlYW1Tb3VyY2VzKFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1Tb3VyY2VzUXVlcnlDbGll
bnQ+IGNsaWVudCkKLXsKLSAgICAvLyBGSVhNRTogUmVtb3ZlIHRoaXMgInNob3J0LWNpcmN1aXQi
IGFuZCBmb3J3YXJkIHRvIG1fcHJpdmF0ZSB3aGVuIENocm9tZSBoYXMgaW1wbGVtZW50ZWQgV2Vi
TWVkaWFTdHJlYW1DZW50ZXIuCi0gICAgTWVkaWFTdHJlYW1Tb3VyY2VWZWN0b3IgYXVkaW9Tb3Vy
Y2VzLCB2aWRlb1NvdXJjZXM7Ci0gICAgY2xpZW50LT5kaWRDb21wbGV0ZVF1ZXJ5KGF1ZGlvU291
cmNlcywgdmlkZW9Tb3VyY2VzKTsKLX0KLQotdm9pZCBNZWRpYVN0cmVhbUNlbnRlckludGVybmFs
OjpkaWRTZXRNZWRpYVN0cmVhbVRyYWNrRW5hYmxlZChNZWRpYVN0cmVhbURlc2NyaXB0b3IqIHN0
cmVhbSwgTWVkaWFTdHJlYW1Db21wb25lbnQqIGNvbXBvbmVudCkKLXsKLSAgICBpZiAobV9wcml2
YXRlKSB7Ci0gICAgICAgIGlmIChjb21wb25lbnQtPmVuYWJsZWQoKSkKLSAgICAgICAgICAgIG1f
cHJpdmF0ZS0+ZGlkRW5hYmxlTWVkaWFTdHJlYW1UcmFjayhzdHJlYW0sIGNvbXBvbmVudCk7Ci0g
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1fcHJpdmF0ZS0+ZGlkRGlzYWJsZU1lZGlhU3RyZWFt
VHJhY2soc3RyZWFtLCBjb21wb25lbnQpOwotICAgIH0KLX0KLQotdm9pZCBNZWRpYVN0cmVhbUNl
bnRlckludGVybmFsOjpkaWRTdG9wTG9jYWxNZWRpYVN0cmVhbShNZWRpYVN0cmVhbURlc2NyaXB0
b3IqIHN0cmVhbSkKLXsKLSAgICBpZiAobV9wcml2YXRlKQotICAgICAgICBtX3ByaXZhdGUtPmRp
ZFN0b3BMb2NhbE1lZGlhU3RyZWFtKHN0cmVhbSk7Ci19Ci0KLXZvaWQgTWVkaWFTdHJlYW1DZW50
ZXJJbnRlcm5hbDo6ZGlkQ29uc3RydWN0TWVkaWFTdHJlYW0oTWVkaWFTdHJlYW1EZXNjcmlwdG9y
KiBzdHJlYW0pCi17Ci0gICAgaWYgKG1fcHJpdmF0ZSkKLSAgICAgICAgbV9wcml2YXRlLT5kaWRD
b25zdHJ1Y3RNZWRpYVN0cmVhbShzdHJlYW0pOwotfQotCi1TdHJpbmcgTWVkaWFTdHJlYW1DZW50
ZXJJbnRlcm5hbDo6Y29uc3RydWN0U0RQKEljZUNhbmRpZGF0ZURlc2NyaXB0b3IqIGljZUNhbmRp
ZGF0ZSkKLXsKLSAgICByZXR1cm4gbV9wcml2YXRlID8gbV9wcml2YXRlLT5jb25zdHJ1Y3RTRFAo
V2ViS2l0OjpXZWJJQ0VDYW5kaWRhdGVEZXNjcmlwdG9yKGljZUNhbmRpZGF0ZSkpIDogIiI7Ci19
Ci0KLVN0cmluZyBNZWRpYVN0cmVhbUNlbnRlckludGVybmFsOjpjb25zdHJ1Y3RTRFAoU2Vzc2lv
bkRlc2NyaXB0aW9uRGVzY3JpcHRvciogc2Vzc2lvbkRlc2NyaXB0aW9uKQotewotICAgIHJldHVy
biBtX3ByaXZhdGUgPyBtX3ByaXZhdGUtPmNvbnN0cnVjdFNEUChXZWJLaXQ6OldlYlNlc3Npb25E
ZXNjcmlwdGlvbkRlc2NyaXB0b3Ioc2Vzc2lvbkRlc2NyaXB0aW9uKSkgOiAiIjsKLX0KLQotdm9p
ZCBNZWRpYVN0cmVhbUNlbnRlckludGVybmFsOjpzdG9wTG9jYWxNZWRpYVN0cmVhbShjb25zdCBX
ZWJLaXQ6OldlYk1lZGlhU3RyZWFtRGVzY3JpcHRvciYgc3RyZWFtKQotewotICAgIG1fb3duZXIt
PmVuZExvY2FsTWVkaWFTdHJlYW0oc3RyZWFtKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQotCi0jZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkKSW5kZXg6IFNvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vYnJpZGdlL01lZGlhU3RyZWFtQ2VudGVySW50ZXJuYWwuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL2JyaWRnZS9NZWRpYVN0cmVhbUNlbnRlckludGVybmFs
LmgJKHJldmlzaW9uIDExMjU3MSkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vYnJpZGdlL01l
ZGlhU3RyZWFtQ2VudGVySW50ZXJuYWwuaAkod29ya2luZyBjb3B5KQpAQCAtMSw3OCArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICog
ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
LSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBP
V05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
Ci0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
I2lmbmRlZiBNZWRpYVN0cmVhbUNlbnRlckludGVybmFsX2gKLSNkZWZpbmUgTWVkaWFTdHJlYW1D
ZW50ZXJJbnRlcm5hbF9oCi0KLSNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQotCi0jaW5jbHVkZSAi
cGxhdGZvcm0vV2ViTWVkaWFTdHJlYW1DZW50ZXJDbGllbnQuaCIKLSNpbmNsdWRlIDx3dGYvT3du
UHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci1jbGFzcyBXZWJNZWRpYVN0cmVhbUNl
bnRlcjsKLX0KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBJY2VDYW5kaWRhdGVEZXNj
cmlwdG9yOwotY2xhc3MgTWVkaWFTdHJlYW1DZW50ZXI7Ci1jbGFzcyBNZWRpYVN0cmVhbUNvbXBv
bmVudDsKLWNsYXNzIE1lZGlhU3RyZWFtRGVzY3JpcHRvcjsKLWNsYXNzIE1lZGlhU3RyZWFtU291
cmNlc1F1ZXJ5Q2xpZW50OwotY2xhc3MgU2Vzc2lvbkRlc2NyaXB0aW9uRGVzY3JpcHRvcjsKLQot
Y2xhc3MgTWVkaWFTdHJlYW1DZW50ZXJJbnRlcm5hbCA6IHB1YmxpYyBXZWJLaXQ6OldlYk1lZGlh
U3RyZWFtQ2VudGVyQ2xpZW50IHsKLXB1YmxpYzoKLSAgICBleHBsaWNpdCBNZWRpYVN0cmVhbUNl
bnRlckludGVybmFsKE1lZGlhU3RyZWFtQ2VudGVyKik7Ci0gICAgfk1lZGlhU3RyZWFtQ2VudGVy
SW50ZXJuYWwoKTsKLQotICAgIHZvaWQgcXVlcnlNZWRpYVN0cmVhbVNvdXJjZXMoUGFzc1JlZlB0
cjxNZWRpYVN0cmVhbVNvdXJjZXNRdWVyeUNsaWVudD4pOwotICAgIHZvaWQgZGlkU2V0TWVkaWFT
dHJlYW1UcmFja0VuYWJsZWQoTWVkaWFTdHJlYW1EZXNjcmlwdG9yKiwgTWVkaWFTdHJlYW1Db21w
b25lbnQqKTsKLSAgICB2b2lkIGRpZFN0b3BMb2NhbE1lZGlhU3RyZWFtKE1lZGlhU3RyZWFtRGVz
Y3JpcHRvciopOwotICAgIHZvaWQgZGlkQ29uc3RydWN0TWVkaWFTdHJlYW0oTWVkaWFTdHJlYW1E
ZXNjcmlwdG9yKik7Ci0gICAgU3RyaW5nIGNvbnN0cnVjdFNEUChJY2VDYW5kaWRhdGVEZXNjcmlw
dG9yKik7Ci0gICAgU3RyaW5nIGNvbnN0cnVjdFNEUChTZXNzaW9uRGVzY3JpcHRpb25EZXNjcmlw
dG9yKik7Ci0KLSAgICAvLyBGcm9tIFdlYktpdDo6V2ViTWVkaWFTdHJlYW1DZW50ZXJDbGllbnQu
Ci0gICAgdmlydHVhbCB2b2lkIHN0b3BMb2NhbE1lZGlhU3RyZWFtKGNvbnN0IFdlYktpdDo6V2Vi
TWVkaWFTdHJlYW1EZXNjcmlwdG9yJik7Ci0KLXByaXZhdGU6Ci0gICAgT3duUHRyPFdlYktpdDo6
V2ViTWVkaWFTdHJlYW1DZW50ZXI+IG1fcHJpdmF0ZTsKLSAgICBNZWRpYVN0cmVhbUNlbnRlciog
bV9vd25lcjsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJM
RShNRURJQV9TVFJFQU0pCi0KLSNlbmRpZiAvLyBNZWRpYVN0cmVhbUNlbnRlckludGVybmFsX2gK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vYnJpZGdlL1BlZXJDb25uZWN0aW9uMDBIYW5k
bGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL2JyaWRnZS9QZWVy
Q29ubmVjdGlvbjAwSGFuZGxlci5jcHAJKHJldmlzaW9uIDExMjU3MSkKKysrIFNvdXJjZS9XZWJL
aXQvY2hyb21pdW0vYnJpZGdlL1BlZXJDb25uZWN0aW9uMDBIYW5kbGVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSwxMTggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCi0gKiAgICBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiAgICBkaXN0cmlidXRpb24uCi0gKiAzLiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1
dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbSB0aGlzCi0gKiAgICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0g
KiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lm
IEVOQUJMRShNRURJQV9TVFJFQU0pCi0KLSNpbmNsdWRlICJQZWVyQ29ubmVjdGlvbjAwSGFuZGxl
ci5oIgotCi0jaW5jbHVkZSAiSWNlQ2FuZGlkYXRlRGVzY3JpcHRvci5oIgotI2luY2x1ZGUgIklj
ZU9wdGlvbnMuaCIKLSNpbmNsdWRlICJNZWRpYUhpbnRzLmgiCi0jaW5jbHVkZSAiTWVkaWFTdHJl
YW1EZXNjcmlwdG9yLmgiCi0jaW5jbHVkZSAiUGVlckNvbm5lY3Rpb24wMEhhbmRsZXJDbGllbnQu
aCIKLSNpbmNsdWRlICJQZWVyQ29ubmVjdGlvbjAwSGFuZGxlckludGVybmFsLmgiCi0jaW5jbHVk
ZSAiU2Vzc2lvbkRlc2NyaXB0aW9uRGVzY3JpcHRvci5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLVBhc3NPd25QdHI8UGVlckNvbm5lY3Rpb24wMEhhbmRsZXI+IFBlZXJDb25uZWN0aW9uMDBI
YW5kbGVyOjpjcmVhdGUoUGVlckNvbm5lY3Rpb24wMEhhbmRsZXJDbGllbnQqIGNsaWVudCwgY29u
c3QgU3RyaW5nJiBzZXJ2ZXJDb25maWd1cmF0aW9uLCBjb25zdCBTdHJpbmcmIHVzZXJuYW1lKQot
ewotICAgIHJldHVybiBhZG9wdFB0cihuZXcgUGVlckNvbm5lY3Rpb24wMEhhbmRsZXIoY2xpZW50
LCBzZXJ2ZXJDb25maWd1cmF0aW9uLCB1c2VybmFtZSkpOwotfQotCi1QZWVyQ29ubmVjdGlvbjAw
SGFuZGxlcjo6UGVlckNvbm5lY3Rpb24wMEhhbmRsZXIoUGVlckNvbm5lY3Rpb24wMEhhbmRsZXJD
bGllbnQqIGNsaWVudCwgY29uc3QgU3RyaW5nJiBzZXJ2ZXJDb25maWd1cmF0aW9uLCBjb25zdCBT
dHJpbmcmIHVzZXJuYW1lKQotICAgIDogbV9wcml2YXRlKGFkb3B0UHRyKG5ldyBQZWVyQ29ubmVj
dGlvbjAwSGFuZGxlckludGVybmFsKGNsaWVudCwgc2VydmVyQ29uZmlndXJhdGlvbiwgdXNlcm5h
bWUpKSkKLXsKLX0KLQotUGVlckNvbm5lY3Rpb24wMEhhbmRsZXI6On5QZWVyQ29ubmVjdGlvbjAw
SGFuZGxlcigpCi17Ci19Ci0KLVBhc3NSZWZQdHI8U2Vzc2lvbkRlc2NyaXB0aW9uRGVzY3JpcHRv
cj4gUGVlckNvbm5lY3Rpb24wMEhhbmRsZXI6OmNyZWF0ZU9mZmVyKFBhc3NSZWZQdHI8TWVkaWFI
aW50cz4gbWVkaWFIaW50cykKLXsKLSAgICByZXR1cm4gbV9wcml2YXRlLT5jcmVhdGVPZmZlciht
ZWRpYUhpbnRzKTsKLX0KLQotUGFzc1JlZlB0cjxTZXNzaW9uRGVzY3JpcHRpb25EZXNjcmlwdG9y
PiBQZWVyQ29ubmVjdGlvbjAwSGFuZGxlcjo6Y3JlYXRlQW5zd2VyKGNvbnN0IFN0cmluZyYgb2Zm
ZXIsIFBhc3NSZWZQdHI8TWVkaWFIaW50cz4gbWVkaWFIaW50cykKLXsKLSAgICByZXR1cm4gbV9w
cml2YXRlLT5jcmVhdGVBbnN3ZXIob2ZmZXIsIG1lZGlhSGludHMpOwotfQotCi1ib29sIFBlZXJD
b25uZWN0aW9uMDBIYW5kbGVyOjpzZXRMb2NhbERlc2NyaXB0aW9uKGludCBhY3Rpb24sIFBhc3NS
ZWZQdHI8U2Vzc2lvbkRlc2NyaXB0aW9uRGVzY3JpcHRvcj4gc2Vzc2lvbkRlc2NyaXB0aW9uKQot
ewotICAgIHJldHVybiBtX3ByaXZhdGUtPnNldExvY2FsRGVzY3JpcHRpb24oYWN0aW9uLCBzZXNz
aW9uRGVzY3JpcHRpb24pOwotfQotCi1ib29sIFBlZXJDb25uZWN0aW9uMDBIYW5kbGVyOjpzZXRS
ZW1vdGVEZXNjcmlwdGlvbihpbnQgYWN0aW9uLCBQYXNzUmVmUHRyPFNlc3Npb25EZXNjcmlwdGlv
bkRlc2NyaXB0b3I+IHNlc3Npb25EZXNjcmlwdGlvbikKLXsKLSAgICByZXR1cm4gbV9wcml2YXRl
LT5zZXRSZW1vdGVEZXNjcmlwdGlvbihhY3Rpb24sIHNlc3Npb25EZXNjcmlwdGlvbik7Ci19Ci0K
LVBhc3NSZWZQdHI8U2Vzc2lvbkRlc2NyaXB0aW9uRGVzY3JpcHRvcj4gUGVlckNvbm5lY3Rpb24w
MEhhbmRsZXI6OmxvY2FsRGVzY3JpcHRpb24oKQotewotICAgIHJldHVybiBtX3ByaXZhdGUtPmxv
Y2FsRGVzY3JpcHRpb24oKTsKLX0KLQotUGFzc1JlZlB0cjxTZXNzaW9uRGVzY3JpcHRpb25EZXNj
cmlwdG9yPiBQZWVyQ29ubmVjdGlvbjAwSGFuZGxlcjo6cmVtb3RlRGVzY3JpcHRpb24oKQotewot
ICAgIHJldHVybiBtX3ByaXZhdGUtPnJlbW90ZURlc2NyaXB0aW9uKCk7Ci19Ci0KLWJvb2wgUGVl
ckNvbm5lY3Rpb24wMEhhbmRsZXI6OnN0YXJ0SWNlKFBhc3NSZWZQdHI8SWNlT3B0aW9ucz4gaWNl
T3B0aW9ucykKLXsKLSAgICByZXR1cm4gbV9wcml2YXRlLT5zdGFydEljZShpY2VPcHRpb25zKTsK
LX0KLQotYm9vbCBQZWVyQ29ubmVjdGlvbjAwSGFuZGxlcjo6cHJvY2Vzc0ljZU1lc3NhZ2UoUGFz
c1JlZlB0cjxJY2VDYW5kaWRhdGVEZXNjcmlwdG9yPiBpY2VDYW5kaWRhdGUpCi17Ci0gICAgcmV0
dXJuIG1fcHJpdmF0ZS0+cHJvY2Vzc0ljZU1lc3NhZ2UoaWNlQ2FuZGlkYXRlKTsKLX0KLQotdm9p
ZCBQZWVyQ29ubmVjdGlvbjAwSGFuZGxlcjo6YWRkU3RyZWFtKFBhc3NSZWZQdHI8TWVkaWFTdHJl
YW1EZXNjcmlwdG9yPiBtZWRpYVN0cmVhbSkKLXsKLSAgICBtX3ByaXZhdGUtPmFkZFN0cmVhbSht
ZWRpYVN0cmVhbSk7Ci19Ci0KLXZvaWQgUGVlckNvbm5lY3Rpb24wMEhhbmRsZXI6OnJlbW92ZVN0
cmVhbShQYXNzUmVmUHRyPE1lZGlhU3RyZWFtRGVzY3JpcHRvcj4gbWVkaWFTdHJlYW0pCi17Ci0g
ICAgbV9wcml2YXRlLT5yZW1vdmVTdHJlYW0obWVkaWFTdHJlYW0pOwotfQotCi12b2lkIFBlZXJD
b25uZWN0aW9uMDBIYW5kbGVyOjpzdG9wKCkKLXsKLSAgICBtX3ByaXZhdGUtPnN0b3AoKTsKLX0K
LQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVB
TSkKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vYnJpZGdlL1BlZXJDb25uZWN0aW9uMDBI
YW5kbGVySW50ZXJuYWwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0v
YnJpZGdlL1BlZXJDb25uZWN0aW9uMDBIYW5kbGVySW50ZXJuYWwuY3BwCShyZXZpc2lvbiAxMTI1
NzEpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL2JyaWRnZS9QZWVyQ29ubmVjdGlvbjAwSGFu
ZGxlckludGVybmFsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxODcgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0
cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0
aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0g
KiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCi0KLSNpbmNsdWRlICJQZWVy
Q29ubmVjdGlvbjAwSGFuZGxlckludGVybmFsLmgiCi0KLSNpbmNsdWRlICJJY2VDYW5kaWRhdGVE
ZXNjcmlwdG9yLmgiCi0jaW5jbHVkZSAiSWNlT3B0aW9ucy5oIgotI2luY2x1ZGUgIk1lZGlhSGlu
dHMuaCIKLSNpbmNsdWRlICJQZWVyQ29ubmVjdGlvbjAwLmgiCi0jaW5jbHVkZSAiUGVlckNvbm5l
Y3Rpb24wMEhhbmRsZXJDbGllbnQuaCIKLSNpbmNsdWRlICJTZXNzaW9uRGVzY3JpcHRpb25EZXNj
cmlwdG9yLmgiCi0jaW5jbHVkZSAiV2ViS2l0LmgiCi0jaW5jbHVkZSAicGxhdGZvcm0vV2ViSUNF
Q2FuZGlkYXRlRGVzY3JpcHRvci5oIgotI2luY2x1ZGUgInBsYXRmb3JtL1dlYklDRU9wdGlvbnMu
aCIKLSNpbmNsdWRlICJwbGF0Zm9ybS9XZWJLaXRQbGF0Zm9ybVN1cHBvcnQuaCIKLSNpbmNsdWRl
ICJwbGF0Zm9ybS9XZWJNZWRpYUhpbnRzLmgiCi0jaW5jbHVkZSAicGxhdGZvcm0vV2ViTWVkaWFT
dHJlYW1EZXNjcmlwdG9yLmgiCi0jaW5jbHVkZSAicGxhdGZvcm0vV2ViUGVlckNvbm5lY3Rpb24w
MEhhbmRsZXIuaCIKLSNpbmNsdWRlICJwbGF0Zm9ybS9XZWJQZWVyQ29ubmVjdGlvbjAwSGFuZGxl
ckNsaWVudC5oIgotI2luY2x1ZGUgInBsYXRmb3JtL1dlYlNlc3Npb25EZXNjcmlwdGlvbkRlc2Ny
aXB0b3IuaCIKLSNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLVBlZXJDb25uZWN0aW9uMDBIYW5kbGVySW50ZXJuYWw6OlBlZXJDb25uZWN0aW9uMDBI
YW5kbGVySW50ZXJuYWwoUGVlckNvbm5lY3Rpb24wMEhhbmRsZXJDbGllbnQqIGNsaWVudCwgY29u
c3QgU3RyaW5nJiBzZXJ2ZXJDb25maWd1cmF0aW9uLCBjb25zdCBTdHJpbmcmIHVzZXJuYW1lKQot
ICAgIDogbV9jbGllbnQoY2xpZW50KQotewotICAgIEFTU0VSVChtX2NsaWVudCk7Ci0gICAgbV93
ZWJIYW5kbGVyID0gYWRvcHRQdHIoV2ViS2l0Ojp3ZWJLaXRQbGF0Zm9ybVN1cHBvcnQoKS0+Y3Jl
YXRlUGVlckNvbm5lY3Rpb24wMEhhbmRsZXIodGhpcykpOwotICAgIC8vIEZJWE1FOiBXaGVuIHRo
ZXJlIGlzIHNvbWUgZXJyb3IgcmVwb3J0aW5nIGF2YWxpYWJsZSBpbiB0aGUgUGVlckNvbm5lY3Rp
b24gb2JqZWN0IHJlcG9ydAotICAgIC8vIGlmIHdlIGRpZG4ndCBnZXQgYSBXZWJQZWVyQ29ubmVj
dGlvbjAwSGFuZGxlciBpbnN0YW5jZS4KLQotICAgIGlmIChtX3dlYkhhbmRsZXIpCi0gICAgICAg
IG1fd2ViSGFuZGxlci0+aW5pdGlhbGl6ZShzZXJ2ZXJDb25maWd1cmF0aW9uLCB1c2VybmFtZSk7
Ci19Ci0KLVBlZXJDb25uZWN0aW9uMDBIYW5kbGVySW50ZXJuYWw6On5QZWVyQ29ubmVjdGlvbjAw
SGFuZGxlckludGVybmFsKCkKLXsKLX0KLQotUGFzc1JlZlB0cjxTZXNzaW9uRGVzY3JpcHRpb25E
ZXNjcmlwdG9yPiBQZWVyQ29ubmVjdGlvbjAwSGFuZGxlckludGVybmFsOjpjcmVhdGVPZmZlcihQ
YXNzUmVmUHRyPE1lZGlhSGludHM+IG1lZGlhSGludHMpCi17Ci0gICAgaWYgKCFtX3dlYkhhbmRs
ZXIpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIG1fd2ViSGFuZGxlci0+Y3JlYXRl
T2ZmZXIobWVkaWFIaW50cyk7Ci19Ci0KLVBhc3NSZWZQdHI8U2Vzc2lvbkRlc2NyaXB0aW9uRGVz
Y3JpcHRvcj4gUGVlckNvbm5lY3Rpb24wMEhhbmRsZXJJbnRlcm5hbDo6Y3JlYXRlQW5zd2VyKGNv
bnN0IFN0cmluZyYgb2ZmZXIsIFBhc3NSZWZQdHI8TWVkaWFIaW50cz4gbWVkaWFIaW50cykKLXsK
LSAgICBpZiAoIW1fd2ViSGFuZGxlcikKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4g
bV93ZWJIYW5kbGVyLT5jcmVhdGVBbnN3ZXIob2ZmZXIsIG1lZGlhSGludHMpOwotfQotCi1ib29s
IFBlZXJDb25uZWN0aW9uMDBIYW5kbGVySW50ZXJuYWw6OnNldExvY2FsRGVzY3JpcHRpb24oaW50
IGFjdGlvbiwgUGFzc1JlZlB0cjxTZXNzaW9uRGVzY3JpcHRpb25EZXNjcmlwdG9yPiBzZXNzaW9u
RGVzY3JpcHRpb24pCi17Ci0gICAgaWYgKCFtX3dlYkhhbmRsZXIpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIHJldHVybiBtX3dlYkhhbmRsZXItPnNldExvY2FsRGVzY3JpcHRpb24oc3Rh
dGljX2Nhc3Q8V2ViS2l0OjpXZWJQZWVyQ29ubmVjdGlvbjAwSGFuZGxlcjo6QWN0aW9uPihhY3Rp
b24pLCBzZXNzaW9uRGVzY3JpcHRpb24pOwotfQotCi1ib29sIFBlZXJDb25uZWN0aW9uMDBIYW5k
bGVySW50ZXJuYWw6OnNldFJlbW90ZURlc2NyaXB0aW9uKGludCBhY3Rpb24sIFBhc3NSZWZQdHI8
U2Vzc2lvbkRlc2NyaXB0aW9uRGVzY3JpcHRvcj4gc2Vzc2lvbkRlc2NyaXB0aW9uKQotewotICAg
IGlmICghbV93ZWJIYW5kbGVyKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4g
bV93ZWJIYW5kbGVyLT5zZXRSZW1vdGVEZXNjcmlwdGlvbihzdGF0aWNfY2FzdDxXZWJLaXQ6Oldl
YlBlZXJDb25uZWN0aW9uMDBIYW5kbGVyOjpBY3Rpb24+KGFjdGlvbiksIHNlc3Npb25EZXNjcmlw
dGlvbik7Ci19Ci0KLVBhc3NSZWZQdHI8U2Vzc2lvbkRlc2NyaXB0aW9uRGVzY3JpcHRvcj4gUGVl
ckNvbm5lY3Rpb24wMEhhbmRsZXJJbnRlcm5hbDo6bG9jYWxEZXNjcmlwdGlvbigpCi17Ci0gICAg
aWYgKCFtX3dlYkhhbmRsZXIpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIG1fd2Vi
SGFuZGxlci0+bG9jYWxEZXNjcmlwdGlvbigpOwotfQotCi1QYXNzUmVmUHRyPFNlc3Npb25EZXNj
cmlwdGlvbkRlc2NyaXB0b3I+IFBlZXJDb25uZWN0aW9uMDBIYW5kbGVySW50ZXJuYWw6OnJlbW90
ZURlc2NyaXB0aW9uKCkKLXsKLSAgICBpZiAoIW1fd2ViSGFuZGxlcikKLSAgICAgICAgcmV0dXJu
IDA7Ci0KLSAgICByZXR1cm4gbV93ZWJIYW5kbGVyLT5yZW1vdGVEZXNjcmlwdGlvbigpOwotfQot
Ci1ib29sIFBlZXJDb25uZWN0aW9uMDBIYW5kbGVySW50ZXJuYWw6OnN0YXJ0SWNlKFBhc3NSZWZQ
dHI8SWNlT3B0aW9ucz4gaWNlT3B0aW9ucykKLXsKLSAgICBpZiAoIW1fd2ViSGFuZGxlcikKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIG1fd2ViSGFuZGxlci0+c3RhcnRJY2Uo
aWNlT3B0aW9ucyk7Ci19Ci0KLWJvb2wgUGVlckNvbm5lY3Rpb24wMEhhbmRsZXJJbnRlcm5hbDo6
cHJvY2Vzc0ljZU1lc3NhZ2UoUGFzc1JlZlB0cjxJY2VDYW5kaWRhdGVEZXNjcmlwdG9yPiBpY2VD
YW5kaWRhdGUpCi17Ci0gICAgaWYgKCFtX3dlYkhhbmRsZXIpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIHJldHVybiBtX3dlYkhhbmRsZXItPnByb2Nlc3NJY2VNZXNzYWdlKGljZUNhbmRp
ZGF0ZSk7Ci19Ci0KLXZvaWQgUGVlckNvbm5lY3Rpb24wMEhhbmRsZXJJbnRlcm5hbDo6YWRkU3Ry
ZWFtKFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1EZXNjcmlwdG9yPiBtZWRpYVN0cmVhbSkKLXsKLSAg
ICBpZiAoIW1fd2ViSGFuZGxlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV93ZWJIYW5kbGVy
LT5hZGRTdHJlYW0obWVkaWFTdHJlYW0pOwotfQotCi12b2lkIFBlZXJDb25uZWN0aW9uMDBIYW5k
bGVySW50ZXJuYWw6OnJlbW92ZVN0cmVhbShQYXNzUmVmUHRyPE1lZGlhU3RyZWFtRGVzY3JpcHRv
cj4gbWVkaWFTdHJlYW0pCi17Ci0gICAgaWYgKCFtX3dlYkhhbmRsZXIpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIG1fd2ViSGFuZGxlci0+cmVtb3ZlU3RyZWFtKG1lZGlhU3RyZWFtKTsKLX0KLQot
dm9pZCBQZWVyQ29ubmVjdGlvbjAwSGFuZGxlckludGVybmFsOjpzdG9wKCkKLXsKLSAgICBpZiAo
IW1fd2ViSGFuZGxlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV93ZWJIYW5kbGVyLT5zdG9w
KCk7Ci19Ci0KLXZvaWQgUGVlckNvbm5lY3Rpb24wMEhhbmRsZXJJbnRlcm5hbDo6ZGlkR2VuZXJh
dGVJQ0VDYW5kaWRhdGUoY29uc3QgV2ViS2l0OjpXZWJJQ0VDYW5kaWRhdGVEZXNjcmlwdG9yJiBp
Y2VDYW5kaWRhdGUsIGJvb2wgbW9yZVRvRm9sbG93KQotewotICAgIG1fY2xpZW50LT5kaWRHZW5l
cmF0ZUljZUNhbmRpZGF0ZShpY2VDYW5kaWRhdGUsIG1vcmVUb0ZvbGxvdyk7Ci19Ci0KLXZvaWQg
UGVlckNvbm5lY3Rpb24wMEhhbmRsZXJJbnRlcm5hbDo6ZGlkQ2hhbmdlUmVhZHlTdGF0ZShSZWFk
eVN0YXRlIHN0YXRlKQotewotICAgIG1fY2xpZW50LT5kaWRDaGFuZ2VSZWFkeVN0YXRlKHN0YXRl
KTsKLX0KLQotdm9pZCBQZWVyQ29ubmVjdGlvbjAwSGFuZGxlckludGVybmFsOjpkaWRDaGFuZ2VJ
Q0VTdGF0ZShJQ0VTdGF0ZSBzdGF0ZSkKLXsKLSAgICBtX2NsaWVudC0+ZGlkQ2hhbmdlSWNlU3Rh
dGUoc3RhdGUpOwotfQotCi12b2lkIFBlZXJDb25uZWN0aW9uMDBIYW5kbGVySW50ZXJuYWw6OmRp
ZEFkZFJlbW90ZVN0cmVhbShjb25zdCBXZWJLaXQ6OldlYk1lZGlhU3RyZWFtRGVzY3JpcHRvciYg
d2ViTWVkaWFTdHJlYW1EZXNjcmlwdG9yKQotewotICAgIG1fY2xpZW50LT5kaWRBZGRSZW1vdGVT
dHJlYW0od2ViTWVkaWFTdHJlYW1EZXNjcmlwdG9yKTsKLX0KLQotdm9pZCBQZWVyQ29ubmVjdGlv
bjAwSGFuZGxlckludGVybmFsOjpkaWRSZW1vdmVSZW1vdGVTdHJlYW0oY29uc3QgV2ViS2l0OjpX
ZWJNZWRpYVN0cmVhbURlc2NyaXB0b3ImIHdlYk1lZGlhU3RyZWFtRGVzY3JpcHRvcikKLXsKLSAg
ICBtX2NsaWVudC0+ZGlkUmVtb3ZlUmVtb3RlU3RyZWFtKHdlYk1lZGlhU3RyZWFtRGVzY3JpcHRv
cik7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShNRURJ
QV9TVFJFQU0pCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL2JyaWRnZS9QZWVyQ29ubmVj
dGlvbjAwSGFuZGxlckludGVybmFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJv
bWl1bS9icmlkZ2UvUGVlckNvbm5lY3Rpb24wMEhhbmRsZXJJbnRlcm5hbC5oCShyZXZpc2lvbiAx
MTI1NzEpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL2JyaWRnZS9QZWVyQ29ubmVjdGlvbjAw
SGFuZGxlckludGVybmFsLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsOTAgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0
cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0
aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0g
KiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYg
UGVlckNvbm5lY3Rpb24wMEhhbmRsZXJJbnRlcm5hbF9oCi0jZGVmaW5lIFBlZXJDb25uZWN0aW9u
MDBIYW5kbGVySW50ZXJuYWxfaAotCi0jaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKLQotI2luY2x1
ZGUgIk1lZGlhU3RyZWFtRGVzY3JpcHRvci5oIgotI2luY2x1ZGUgInBsYXRmb3JtL1dlYlBlZXJD
b25uZWN0aW9uMDBIYW5kbGVyQ2xpZW50LmgiCi0jaW5jbHVkZSA8d3RmL093blB0ci5oPgotI2lu
Y2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotY2xhc3MgV2ViSUNFQ2FuZGlkYXRlRGVzY3JpcHRvcjsK
LWNsYXNzIFdlYlBlZXJDb25uZWN0aW9uMDBIYW5kbGVyOwotY2xhc3MgV2ViTWVkaWFTdHJlYW1E
ZXNjcmlwdG9yOwotY2xhc3MgV2ViU3RyaW5nOwotfQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0K
LWNsYXNzIEljZUNhbmRpZGF0ZURlc2NyaXB0b3I7Ci1jbGFzcyBJY2VPcHRpb25zOwotY2xhc3Mg
TWVkaWFIaW50czsKLWNsYXNzIFBlZXJDb25uZWN0aW9uMDBIYW5kbGVyQ2xpZW50OwotY2xhc3Mg
U2Vzc2lvbkRlc2NyaXB0aW9uRGVzY3JpcHRvcjsKLQotY2xhc3MgUGVlckNvbm5lY3Rpb24wMEhh
bmRsZXJJbnRlcm5hbCA6IHB1YmxpYyBXZWJLaXQ6OldlYlBlZXJDb25uZWN0aW9uMDBIYW5kbGVy
Q2xpZW50IHsKLXB1YmxpYzoKLSAgICBQZWVyQ29ubmVjdGlvbjAwSGFuZGxlckludGVybmFsKFBl
ZXJDb25uZWN0aW9uMDBIYW5kbGVyQ2xpZW50KiwgY29uc3QgU3RyaW5nJiBzZXJ2ZXJDb25maWd1
cmF0aW9uLCBjb25zdCBTdHJpbmcmIHVzZXJuYW1lKTsKLSAgICB+UGVlckNvbm5lY3Rpb24wMEhh
bmRsZXJJbnRlcm5hbCgpOwotCi0gICAgUGFzc1JlZlB0cjxTZXNzaW9uRGVzY3JpcHRpb25EZXNj
cmlwdG9yPiBjcmVhdGVPZmZlcihQYXNzUmVmUHRyPE1lZGlhSGludHM+KTsKLSAgICBQYXNzUmVm
UHRyPFNlc3Npb25EZXNjcmlwdGlvbkRlc2NyaXB0b3I+IGNyZWF0ZUFuc3dlcihjb25zdCBTdHJp
bmcmIG9mZmVyLCBQYXNzUmVmUHRyPE1lZGlhSGludHM+KTsKLSAgICBib29sIHNldExvY2FsRGVz
Y3JpcHRpb24oaW50IGFjdGlvbiwgUGFzc1JlZlB0cjxTZXNzaW9uRGVzY3JpcHRpb25EZXNjcmlw
dG9yPik7Ci0gICAgYm9vbCBzZXRSZW1vdGVEZXNjcmlwdGlvbihpbnQgYWN0aW9uLCBQYXNzUmVm
UHRyPFNlc3Npb25EZXNjcmlwdGlvbkRlc2NyaXB0b3I+KTsKLSAgICBQYXNzUmVmUHRyPFNlc3Np
b25EZXNjcmlwdGlvbkRlc2NyaXB0b3I+IGxvY2FsRGVzY3JpcHRpb24oKTsKLSAgICBQYXNzUmVm
UHRyPFNlc3Npb25EZXNjcmlwdGlvbkRlc2NyaXB0b3I+IHJlbW90ZURlc2NyaXB0aW9uKCk7Ci0g
ICAgYm9vbCBzdGFydEljZShQYXNzUmVmUHRyPEljZU9wdGlvbnM+KTsKLSAgICBib29sIHByb2Nl
c3NJY2VNZXNzYWdlKFBhc3NSZWZQdHI8SWNlQ2FuZGlkYXRlRGVzY3JpcHRvcj4pOwotICAgIHZv
aWQgYWRkU3RyZWFtKFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1EZXNjcmlwdG9yPik7Ci0gICAgdm9p
ZCByZW1vdmVTdHJlYW0oUGFzc1JlZlB0cjxNZWRpYVN0cmVhbURlc2NyaXB0b3I+KTsKLSAgICB2
b2lkIHN0b3AoKTsKLQotICAgIC8vIFdlYktpdDo6V2ViSlNFUFBlZXJDb25uZWN0aW9uSGFuZGxl
ckNsaWVudCBpbXBsZW1lbnRhdGlvbi4KLSAgICB2aXJ0dWFsIHZvaWQgZGlkR2VuZXJhdGVJQ0VD
YW5kaWRhdGUoY29uc3QgV2ViS2l0OjpXZWJJQ0VDYW5kaWRhdGVEZXNjcmlwdG9yJiwgYm9vbCBt
b3JlVG9Gb2xsb3cpOwotICAgIHZpcnR1YWwgdm9pZCBkaWRDaGFuZ2VSZWFkeVN0YXRlKFJlYWR5
U3RhdGUpOwotICAgIHZpcnR1YWwgdm9pZCBkaWRDaGFuZ2VJQ0VTdGF0ZShJQ0VTdGF0ZSk7Ci0g
ICAgdmlydHVhbCB2b2lkIGRpZEFkZFJlbW90ZVN0cmVhbShjb25zdCBXZWJLaXQ6OldlYk1lZGlh
U3RyZWFtRGVzY3JpcHRvciYpOwotICAgIHZpcnR1YWwgdm9pZCBkaWRSZW1vdmVSZW1vdGVTdHJl
YW0oY29uc3QgV2ViS2l0OjpXZWJNZWRpYVN0cmVhbURlc2NyaXB0b3ImKTsKLQotcHJpdmF0ZToK
LSAgICBPd25QdHI8V2ViS2l0OjpXZWJQZWVyQ29ubmVjdGlvbjAwSGFuZGxlcj4gbV93ZWJIYW5k
bGVyOwotICAgIFBlZXJDb25uZWN0aW9uMDBIYW5kbGVyQ2xpZW50KiBtX2NsaWVudDsKLX07Ci0K
LX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0p
Ci0KLSNlbmRpZiAvLyBQZWVyQ29ubmVjdGlvbjAwSGFuZGxlckludGVybmFsX2gKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL3BsYXRmb3JtL1dlYklDRUNhbmRpZGF0ZURlc2Ny
aXB0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9wbGF0
Zm9ybS9XZWJJQ0VDYW5kaWRhdGVEZXNjcmlwdG9yLmgJKHJldmlzaW9uIDExMjU3MSkKKysrIFNv
dXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL3BsYXRmb3JtL1dlYklDRUNhbmRpZGF0ZURlc2Ny
aXB0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMiw4MSArMiwyNSBAQAogICogQ29weXJpZ2h0IChD
KSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CiAg
KgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAq
IGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29v
Z2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICogMS4g
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCiAgKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAot
ICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
CisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgog
ICovCiAKLSNpZm5kZWYgV2ViSUNFQ2FuZGlkYXRlRGVzY3JpcHRvcl9oCi0jZGVmaW5lIFdlYklD
RUNhbmRpZGF0ZURlc2NyaXB0b3JfaAotCi0jaW5jbHVkZSAiV2ViQ29tbW9uLmgiCi0jaW5jbHVk
ZSAiV2ViUHJpdmF0ZVB0ci5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1jbGFzcyBJY2VDYW5k
aWRhdGVEZXNjcmlwdG9yOwotfQotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgV2ViU3Ry
aW5nOwotCi1jbGFzcyBXZWJJQ0VDYW5kaWRhdGVEZXNjcmlwdG9yIHsKLXB1YmxpYzoKLSAgICBX
ZWJJQ0VDYW5kaWRhdGVEZXNjcmlwdG9yKCkgeyB9Ci0gICAgV2ViSUNFQ2FuZGlkYXRlRGVzY3Jp
cHRvcihjb25zdCBXZWJJQ0VDYW5kaWRhdGVEZXNjcmlwdG9yJiBvdGhlcikgeyBhc3NpZ24ob3Ro
ZXIpOyB9Ci0gICAgfldlYklDRUNhbmRpZGF0ZURlc2NyaXB0b3IoKSB7IHJlc2V0KCk7IH0KLQot
ICAgIFdlYklDRUNhbmRpZGF0ZURlc2NyaXB0b3ImIG9wZXJhdG9yPShjb25zdCBXZWJJQ0VDYW5k
aWRhdGVEZXNjcmlwdG9yJiBvdGhlcikKLSAgICB7Ci0gICAgICAgIGFzc2lnbihvdGhlcik7Ci0g
ICAgICAgIHJldHVybiAqdGhpczsKLSAgICB9Ci0KLSAgICBXRUJLSVRfRVhQT1JUIHZvaWQgYXNz
aWduKGNvbnN0IFdlYklDRUNhbmRpZGF0ZURlc2NyaXB0b3ImKTsKLQotICAgIFdFQktJVF9FWFBP
UlQgdm9pZCBpbml0aWFsaXplKGNvbnN0IFdlYlN0cmluZyYgbGFiZWwsIGNvbnN0IFdlYlN0cmlu
ZyYgY2FuZGlkYXRlTGluZSk7Ci0gICAgV0VCS0lUX0VYUE9SVCB2b2lkIHJlc2V0KCk7Ci0gICAg
Ym9vbCBpc051bGwoKSBjb25zdCB7IHJldHVybiBtX3ByaXZhdGUuaXNOdWxsKCk7IH0KLQotICAg
IC8vIFRoZSBTRFAgbT0gbGluZSB0aGlzIGNhbmRpZGF0ZSBpcyBhc3NvY2lhdGVkIHdpdGguCi0g
ICAgV0VCS0lUX0VYUE9SVCBXZWJTdHJpbmcgbGFiZWwoKSBjb25zdDsKLQotICAgIC8vIFRoZSBh
Y3R1YWwgU0RQIGNhbmRpZGF0ZS4KLSAgICBXRUJLSVRfRVhQT1JUIFdlYlN0cmluZyBjYW5kaWRh
dGVMaW5lKCkgY29uc3Q7Ci0KLSNpZiBXRUJLSVRfSU1QTEVNRU5UQVRJT04KLSAgICBXZWJJQ0VD
YW5kaWRhdGVEZXNjcmlwdG9yKFdlYkNvcmU6OkljZUNhbmRpZGF0ZURlc2NyaXB0b3IqKTsKLSAg
ICBXZWJJQ0VDYW5kaWRhdGVEZXNjcmlwdG9yKFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpJY2VD
YW5kaWRhdGVEZXNjcmlwdG9yPik7Ci0KLSAgICBvcGVyYXRvciBXVEY6OlBhc3NSZWZQdHI8V2Vi
Q29yZTo6SWNlQ2FuZGlkYXRlRGVzY3JpcHRvcj4oKSBjb25zdDsKLSNlbmRpZgotCi1wcml2YXRl
OgotICAgIFdlYlByaXZhdGVQdHI8V2ViQ29yZTo6SWNlQ2FuZGlkYXRlRGVzY3JpcHRvcj4gbV9w
cml2YXRlOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBXZWJJQ0VD
YW5kaWRhdGVEZXNjcmlwdG9yX2gKKyNpbmNsdWRlICIuLi8uLi8uLi8uLi9QbGF0Zm9ybS9jaHJv
bWl1bS9wdWJsaWMvV2ViSUNFQ2FuZGlkYXRlRGVzY3JpcHRvci5oIgpJbmRleDogU291cmNlL1dl
YktpdC9jaHJvbWl1bS9wdWJsaWMvcGxhdGZvcm0vV2ViSUNFT3B0aW9ucy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL3BsYXRmb3JtL1dlYklDRU9wdGlvbnMu
aAkocmV2aXNpb24gMTEyNTcxKQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvcGxh
dGZvcm0vV2ViSUNFT3B0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yLDgxICsyLDI1IEBACiAg
KiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKICAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KICAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
Ci0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YK
KyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCiAgKi8KIAotI2lmbmRlZiBXZWJJQ0VPcHRpb25zX2gKLSNkZWZpbmUgV2Vi
SUNFT3B0aW9uc19oCi0KLSNpbmNsdWRlICJXZWJDb21tb24uaCIKLSNpbmNsdWRlICJXZWJOb25D
b3B5YWJsZS5oIgotI2luY2x1ZGUgIldlYlByaXZhdGVQdHIuaCIKLQotbmFtZXNwYWNlIFdlYkNv
cmUgewotY2xhc3MgSWNlT3B0aW9uczsKLX0KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNz
IFdlYlN0cmluZzsKLQotY2xhc3MgV2ViSUNFT3B0aW9ucyB7Ci1wdWJsaWM6Ci0gICAgZW51bSBD
YW5kaWRhdGVUeXBlIHsKLSAgICAgICAgQ2FuZGlkYXRlVHlwZUFsbCwKLSAgICAgICAgQ2FuZGlk
YXRlVHlwZU5vUmVsYXksCi0gICAgICAgIENhbmRpZGF0ZVR5cGVPbmx5UmVsYXksCi0gICAgfTsK
LQotICAgIFdlYklDRU9wdGlvbnMoKSB7IH0KLSAgICBXZWJJQ0VPcHRpb25zKGNvbnN0IFdlYklD
RU9wdGlvbnMmIG90aGVyKSB7IGFzc2lnbihvdGhlcik7IH0KLSAgICB+V2ViSUNFT3B0aW9ucygp
IHsgcmVzZXQoKTsgfQotCi0gICAgV2ViSUNFT3B0aW9ucyYgb3BlcmF0b3I9KGNvbnN0IFdlYklD
RU9wdGlvbnMmIG90aGVyKQotICAgIHsKLSAgICAgICAgYXNzaWduKG90aGVyKTsKLSAgICAgICAg
cmV0dXJuICp0aGlzOwotICAgIH0KLQotICAgIFdFQktJVF9FWFBPUlQgdm9pZCBhc3NpZ24oY29u
c3QgV2ViSUNFT3B0aW9ucyYpOwotCi0gICAgV0VCS0lUX0VYUE9SVCB2b2lkIGluaXRpYWxpemUo
Q2FuZGlkYXRlVHlwZSk7Ci0gICAgV0VCS0lUX0VYUE9SVCB2b2lkIHJlc2V0KCk7Ci0gICAgYm9v
bCBpc051bGwoKSBjb25zdCB7IHJldHVybiBtX3ByaXZhdGUuaXNOdWxsKCk7IH0KLQotICAgIFdF
QktJVF9FWFBPUlQgQ2FuZGlkYXRlVHlwZSBjYW5kaWRhdGVUeXBlVG9Vc2UoKSBjb25zdDsKLQot
I2lmIFdFQktJVF9JTVBMRU1FTlRBVElPTgotICAgIFdlYklDRU9wdGlvbnMoY29uc3QgV1RGOjpQ
YXNzUmVmUHRyPFdlYkNvcmU6OkljZU9wdGlvbnM+Jik7Ci0jZW5kaWYKLQotcHJpdmF0ZToKLSAg
ICBXZWJQcml2YXRlUHRyPFdlYkNvcmU6OkljZU9wdGlvbnM+IG1fcHJpdmF0ZTsKLX07Ci0KLX0g
Ly8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gV2ViSUNFT3B0aW9uc19oCisjaW5jbHVk
ZSAiLi4vLi4vLi4vLi4vUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYklDRU9wdGlvbnMuaCIK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL3BsYXRmb3JtL1dlYktpdFBsYXRm
b3JtU3VwcG9ydC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGlj
L3BsYXRmb3JtL1dlYktpdFBsYXRmb3JtU3VwcG9ydC5oCShyZXZpc2lvbiAxMTI1NzEpCisrKyBT
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9wbGF0Zm9ybS9XZWJLaXRQbGF0Zm9ybVN1cHBv
cnQuaAkod29ya2luZyBjb3B5KQpAQCAtNjAsMTQgKzYwLDkgQEAgY2xhc3MgV2ViRmlsZVN5c3Rl
bTsKIGNsYXNzIFdlYkZpbGVVdGlsaXRpZXM7CiBjbGFzcyBXZWJJREJGYWN0b3J5OyAvLyBGSVhN
RTogRG9lcyB0aGlzIGJlbG9uZyBpbiBwbGF0Zm9ybT8KIGNsYXNzIFdlYklEQktleTsgLy8gRklY
TUU6IERvZXMgdGhpcyBiZWxvbmcgaW4gcGxhdGZvcm0/Ci1jbGFzcyBXZWJQZWVyQ29ubmVjdGlv
bjAwSGFuZGxlcjsKLWNsYXNzIFdlYlBlZXJDb25uZWN0aW9uMDBIYW5kbGVyQ2xpZW50OwotY2xh
c3MgV2ViTWVkaWFTdHJlYW1DZW50ZXI7Ci1jbGFzcyBXZWJNZWRpYVN0cmVhbUNlbnRlckNsaWVu
dDsKIGNsYXNzIFdlYk1lc3NhZ2VQb3J0Q2hhbm5lbDsgLy8gRklYTUU6IERvZXMgdGhpcyBiZWxv
bmcgaW4gcGxhdGZvcm0/CiBjbGFzcyBXZWJNaW1lUmVnaXN0cnk7CiBjbGFzcyBXZWJQZWVyQ29u
bmVjdGlvbkhhbmRsZXI7Ci1jbGFzcyBXZWJQZWVyQ29ubmVjdGlvbkhhbmRsZXJDbGllbnQ7CiBj
bGFzcyBXZWJQbHVnaW5MaXN0QnVpbGRlcjsgLy8gRklYTUU6IERvZXMgdGhpcyBiZWxvbmcgaW4g
cGxhdGZvcm0/CiBjbGFzcyBXZWJTYW5kYm94U3VwcG9ydDsKIGNsYXNzIFdlYlNoYXJlZFdvcmtl
clJlcG9zaXRvcnk7IC8vIEZJWE1FOiBEb2VzIHRoaXMgYmVsb25nIGluIHBsYXRmb3JtPwpAQCAt
NDAzLDIxICszOTgsNiBAQCBwdWJsaWM6CiAgICAgLy8gTXVzdCByZXR1cm4gbm9uLW51bGwuCiAg
ICAgdmlydHVhbCBXZWJGaWxlU3lzdGVtKiBmaWxlU3lzdGVtKCkgeyByZXR1cm4gMDsgfQogCi0g
ICAgLy8gV2ViUlRDIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KLQotICAgIC8vIERFUFJFQ0FURUQKLSAgICAvLyBDcmVhdGVzIGFuIFdl
YlBlZXJDb25uZWN0aW9uSGFuZGxlciBmb3IgRGVwcmVjYXRlZFBlZXJDb25uZWN0aW9uLgotICAg
IC8vIE1heSByZXR1cm4gbnVsbCBpZiBXZWJSVEMgZnVuY3Rpb25hbGl0eSBpcyBub3QgYXZhbGlh
YmxlIG9yIG91dCBvZiByZXNvdXJjZXMuCi0gICAgdmlydHVhbCBXZWJQZWVyQ29ubmVjdGlvbkhh
bmRsZXIqIGNyZWF0ZVBlZXJDb25uZWN0aW9uSGFuZGxlcihXZWJQZWVyQ29ubmVjdGlvbkhhbmRs
ZXJDbGllbnQqKSB7IHJldHVybiAwOyB9Ci0KLSAgICAvLyBDcmVhdGVzIGFuIFdlYlBlZXJDb25u
ZWN0aW9uMDBIYW5kbGVyIGZvciBQZWVyQ29ubmVjdGlvbjAwLgotICAgIC8vIFRoaXMgaXMgYW4g
aGlnaGx5IGV4cGVyaW1lbnRhbCBmZWF0dXJlIG5vdCB5ZXQgaW4gdGhlIFdlYlJUQyBzdGFuZGFy
ZC4KLSAgICAvLyBNYXkgcmV0dXJuIG51bGwgaWYgV2ViUlRDIGZ1bmN0aW9uYWxpdHkgaXMgbm90
IGF2YWxpYWJsZSBvciBvdXQgb2YgcmVzb3VyY2VzLgotICAgIHZpcnR1YWwgV2ViUGVlckNvbm5l
Y3Rpb24wMEhhbmRsZXIqIGNyZWF0ZVBlZXJDb25uZWN0aW9uMDBIYW5kbGVyKFdlYlBlZXJDb25u
ZWN0aW9uMDBIYW5kbGVyQ2xpZW50KikgeyByZXR1cm4gMDsgfQotCi0gICAgLy8gTWF5IHJldHVy
biBudWxsIGlmIFdlYlJUQyBmdW5jdGlvbmFsaXR5IGlzIG5vdCBhdmFsaWFibGUgb3Igb3V0IG9m
IHJlc291cmNlcy4KLSAgICB2aXJ0dWFsIFdlYk1lZGlhU3RyZWFtQ2VudGVyKiBjcmVhdGVNZWRp
YVN0cmVhbUNlbnRlcihXZWJNZWRpYVN0cmVhbUNlbnRlckNsaWVudCopIHsgcmV0dXJuIDA7IH0K
LQogICAgIC8vIFdlYldvcmtlciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKICAgICB2aXJ0dWFsIHZvaWQgZGlkU3RhcnRXb3JrZXJS
dW5Mb29wKGNvbnN0IFdlYldvcmtlclJ1bkxvb3AmKSB7IH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vcHVibGljL3BsYXRmb3JtL1dlYk1lZGlhSGludHMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9wbGF0Zm9ybS9XZWJNZWRpYUhpbnRzLmgJKHJl
dmlzaW9uIDExMjU3MSkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL3BsYXRmb3Jt
L1dlYk1lZGlhSGludHMuaAkod29ya2luZyBjb3B5KQpAQCAtMiw3NiArMiwyNSBAQAogICogQ29w
eXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CiAgKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0g
KiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiAgKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICog
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisg
KiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgogICovCiAKLSNpZm5kZWYgV2ViTWVkaWFIaW50c19oCi0jZGVmaW5lIFdlYk1lZGlh
SGludHNfaAotCi0jaW5jbHVkZSAiV2ViQ29tbW9uLmgiCi0jaW5jbHVkZSAiV2ViTm9uQ29weWFi
bGUuaCIKLSNpbmNsdWRlICJXZWJQcml2YXRlUHRyLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsK
LWNsYXNzIE1lZGlhSGludHM7Ci19Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1jbGFzcyBXZWJT
dHJpbmc7Ci0KLWNsYXNzIFdlYk1lZGlhSGludHMgewotcHVibGljOgotICAgIFdlYk1lZGlhSGlu
dHMoKSB7IH0KLSAgICBXZWJNZWRpYUhpbnRzKGNvbnN0IFdlYk1lZGlhSGludHMmIG90aGVyKSB7
IGFzc2lnbihvdGhlcik7IH0KLSAgICB+V2ViTWVkaWFIaW50cygpIHsgcmVzZXQoKTsgfQotCi0g
ICAgV2ViTWVkaWFIaW50cyYgb3BlcmF0b3I9KGNvbnN0IFdlYk1lZGlhSGludHMmIG90aGVyKQot
ICAgIHsKLSAgICAgICAgYXNzaWduKG90aGVyKTsKLSAgICAgICAgcmV0dXJuICp0aGlzOwotICAg
IH0KLQotICAgIFdFQktJVF9FWFBPUlQgdm9pZCBhc3NpZ24oY29uc3QgV2ViTWVkaWFIaW50cyYp
OwotCi0gICAgV0VCS0lUX0VYUE9SVCB2b2lkIGluaXRpYWxpemUoYm9vbCBhdWRpbywgYm9vbCB2
aWRlbyk7Ci0gICAgV0VCS0lUX0VYUE9SVCB2b2lkIHJlc2V0KCk7Ci0gICAgYm9vbCBpc051bGwo
KSBjb25zdCB7IHJldHVybiBtX3ByaXZhdGUuaXNOdWxsKCk7IH0KLQotICAgIFdFQktJVF9FWFBP
UlQgYm9vbCBhdWRpbygpIGNvbnN0OwotICAgIFdFQktJVF9FWFBPUlQgYm9vbCB2aWRlbygpIGNv
bnN0OwotCi0jaWYgV0VCS0lUX0lNUExFTUVOVEFUSU9OCi0gICAgV2ViTWVkaWFIaW50cyhjb25z
dCBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6TWVkaWFIaW50cz4mKTsKLSNlbmRpZgotCi1wcml2
YXRlOgotICAgIFdlYlByaXZhdGVQdHI8V2ViQ29yZTo6TWVkaWFIaW50cz4gbV9wcml2YXRlOwot
fTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBXZWJNZWRpYUhpbnRzX2gK
KyNpbmNsdWRlICIuLi8uLi8uLi8uLi9QbGF0Zm9ybS9jaHJvbWl1bS9wdWJsaWMvV2ViTWVkaWFI
aW50cy5oIgpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvcGxhdGZvcm0vV2Vi
TWVkaWFTdHJlYW1DZW50ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3B1YmxpYy9wbGF0Zm9ybS9XZWJNZWRpYVN0cmVhbUNlbnRlci5oCShyZXZpc2lvbiAxMTI1NzEp
CisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9wbGF0Zm9ybS9XZWJNZWRpYVN0cmVh
bUNlbnRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yLDYwICsyLDI1IEBACiAgKiBDb3B5cmlnaHQg
KEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
ICAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgot
ICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBH
b29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKiAx
LiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KICAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICog
TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
Ci0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CiAgKi8KIAotI2lmbmRlZiBXZWJNZWRpYVN0cmVhbUNlbnRlcl9oCi0jZGVmaW5lIFdlYk1lZGlh
U3RyZWFtQ2VudGVyX2gKLQotI2luY2x1ZGUgIldlYlN0cmluZy5oIgotCi1uYW1lc3BhY2UgV2Vi
S2l0IHsKLWNsYXNzIFdlYklDRUNhbmRpZGF0ZURlc2NyaXB0b3I7Ci1jbGFzcyBXZWJNZWRpYVN0
cmVhbUNvbXBvbmVudDsKLWNsYXNzIFdlYk1lZGlhU3RyZWFtRGVzY3JpcHRvcjsKLWNsYXNzIFdl
Yk1lZGlhU3RyZWFtU291cmNlc1JlcXVlc3Q7Ci1jbGFzcyBXZWJTZXNzaW9uRGVzY3JpcHRpb25E
ZXNjcmlwdG9yOwotCi1jbGFzcyBXZWJNZWRpYVN0cmVhbUNlbnRlciB7Ci1wdWJsaWM6Ci0gICAg
dmlydHVhbCB+V2ViTWVkaWFTdHJlYW1DZW50ZXIoKSB7IH0KLQotICAgIHZpcnR1YWwgdm9pZCBx
dWVyeU1lZGlhU3RyZWFtU291cmNlcyhjb25zdCBXZWJNZWRpYVN0cmVhbVNvdXJjZXNSZXF1ZXN0
JikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBkaWRFbmFibGVNZWRpYVN0cmVhbVRyYWNrKGNvbnN0
IFdlYk1lZGlhU3RyZWFtRGVzY3JpcHRvciYsIGNvbnN0IFdlYk1lZGlhU3RyZWFtQ29tcG9uZW50
JikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBkaWREaXNhYmxlTWVkaWFTdHJlYW1UcmFjayhjb25z
dCBXZWJNZWRpYVN0cmVhbURlc2NyaXB0b3ImLCBjb25zdCBXZWJNZWRpYVN0cmVhbUNvbXBvbmVu
dCYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZGlkU3RvcExvY2FsTWVkaWFTdHJlYW0oY29uc3Qg
V2ViTWVkaWFTdHJlYW1EZXNjcmlwdG9yJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBkaWRDb25z
dHJ1Y3RNZWRpYVN0cmVhbShjb25zdCBXZWJNZWRpYVN0cmVhbURlc2NyaXB0b3ImKSA9IDA7Ci0K
LSAgICAvLyBGSVhNRTogTWFrZSBwdXJlIHZpcnR1YWwgYWZ0ZXIgaW1wbGVtZW50YXRpb24uCi0g
ICAgdmlydHVhbCBXZWJTdHJpbmcgY29uc3RydWN0U0RQKGNvbnN0IFdlYklDRUNhbmRpZGF0ZURl
c2NyaXB0b3ImKSB7IHJldHVybiBXZWJTdHJpbmcoKTsgfQotICAgIHZpcnR1YWwgV2ViU3RyaW5n
IGNvbnN0cnVjdFNEUChjb25zdCBXZWJTZXNzaW9uRGVzY3JpcHRpb25EZXNjcmlwdG9yJikgeyBy
ZXR1cm4gV2ViU3RyaW5nKCk7IH0KLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5k
aWYgLy8gV2ViTWVkaWFTdHJlYW1DZW50ZXJfaAotCisjaW5jbHVkZSAiLi4vLi4vLi4vLi4vUGxh
dGZvcm0vY2hyb21pdW0vcHVibGljL1dlYk1lZGlhU3RyZWFtQ2VudGVyLmgiCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9wbGF0Zm9ybS9XZWJNZWRpYVN0cmVhbUNlbnRlckNs
aWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL3BsYXRm
b3JtL1dlYk1lZGlhU3RyZWFtQ2VudGVyQ2xpZW50LmgJKHJldmlzaW9uIDExMjU3MSkKKysrIFNv
dXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL3BsYXRmb3JtL1dlYk1lZGlhU3RyZWFtQ2VudGVy
Q2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTIsNDYgKzIsMjUgQEAKICAqIENvcHlyaWdodCAo
QykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogog
ICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0g
KiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdv
b2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqIDEu
ICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgogICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
LSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
ICAqLwogCi0jaWZuZGVmIFdlYk1lZGlhU3RyZWFtQ2VudGVyQ2xpZW50X2gKLSNkZWZpbmUgV2Vi
TWVkaWFTdHJlYW1DZW50ZXJDbGllbnRfaAotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3Mg
V2ViTWVkaWFTdHJlYW1EZXNjcmlwdG9yOwotCi1jbGFzcyBXZWJNZWRpYVN0cmVhbUNlbnRlckNs
aWVudCB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB+V2ViTWVkaWFTdHJlYW1DZW50ZXJDbGllbnQo
KSB7IH0KLQotICAgIHZpcnR1YWwgdm9pZCBzdG9wTG9jYWxNZWRpYVN0cmVhbShjb25zdCBXZWJN
ZWRpYVN0cmVhbURlc2NyaXB0b3ImKSA9IDA7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQK
LQotI2VuZGlmIC8vIFdlYk1lZGlhU3RyZWFtQ2VudGVyQ2xpZW50X2gKKyNpbmNsdWRlICIuLi8u
Li8uLi8uLi9QbGF0Zm9ybS9jaHJvbWl1bS9wdWJsaWMvV2ViTWVkaWFTdHJlYW1DZW50ZXJDbGll
bnQuaCIKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL3BsYXRmb3JtL1dlYk1l
ZGlhU3RyZWFtQ29tcG9uZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1
bS9wdWJsaWMvcGxhdGZvcm0vV2ViTWVkaWFTdHJlYW1Db21wb25lbnQuaAkocmV2aXNpb24gMTEy
NTcxKQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvcGxhdGZvcm0vV2ViTWVkaWFT
dHJlYW1Db21wb25lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMiw3MCArMiwyNSBAQAogICogQ29w
eXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CiAgKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0g
KiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiAgKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICog
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisg
KiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgogICovCiAKLSNpZm5kZWYgV2ViTWVkaWFTdHJlYW1Db21wb25lbnRfaAotI2RlZmlu
ZSBXZWJNZWRpYVN0cmVhbUNvbXBvbmVudF9oCi0KLSNpbmNsdWRlICJXZWJDb21tb24uaCIKLSNp
bmNsdWRlICJXZWJOb25Db3B5YWJsZS5oIgotI2luY2x1ZGUgIldlYlByaXZhdGVQdHIuaCIKLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotY2xhc3MgTWVkaWFTdHJlYW1Db21wb25lbnQ7Ci19Ci0KLW5h
bWVzcGFjZSBXZWJLaXQgewotCi1jbGFzcyBXZWJNZWRpYVN0cmVhbVNvdXJjZTsKLWNsYXNzIFdl
YlN0cmluZzsKLQotY2xhc3MgV2ViTWVkaWFTdHJlYW1Db21wb25lbnQgewotcHVibGljOgotICAg
IFdlYk1lZGlhU3RyZWFtQ29tcG9uZW50KCkgeyB9Ci0gICAgfldlYk1lZGlhU3RyZWFtQ29tcG9u
ZW50KCkgeyByZXNldCgpOyB9Ci0KLSAgICBXRUJLSVRfRVhQT1JUIHZvaWQgcmVzZXQoKTsKLSAg
ICBib29sIGlzTnVsbCgpIGNvbnN0IHsgcmV0dXJuIG1fcHJpdmF0ZS5pc051bGwoKTsgfQotCi0g
ICAgV0VCS0lUX0VYUE9SVCBXZWJNZWRpYVN0cmVhbVNvdXJjZSBzb3VyY2UoKSBjb25zdDsKLSAg
ICBXRUJLSVRfRVhQT1JUIGJvb2wgaXNFbmFibGVkKCkgY29uc3Q7Ci0KLSNpZiBXRUJLSVRfSU1Q
TEVNRU5UQVRJT04KLSAgICBXZWJNZWRpYVN0cmVhbUNvbXBvbmVudChXZWJDb3JlOjpNZWRpYVN0
cmVhbUNvbXBvbmVudCopOwotICAgIFdlYk1lZGlhU3RyZWFtQ29tcG9uZW50JiBvcGVyYXRvcj0o
V2ViQ29yZTo6TWVkaWFTdHJlYW1Db21wb25lbnQqKTsKLSAgICBvcGVyYXRvciBXVEY6OlBhc3NS
ZWZQdHI8V2ViQ29yZTo6TWVkaWFTdHJlYW1Db21wb25lbnQ+KCkgY29uc3Q7Ci0gICAgb3BlcmF0
b3IgV2ViQ29yZTo6TWVkaWFTdHJlYW1Db21wb25lbnQqKCkgY29uc3Q7Ci0jZW5kaWYKLQotcHJp
dmF0ZToKLSAgICBXZWJQcml2YXRlUHRyPFdlYkNvcmU6Ok1lZGlhU3RyZWFtQ29tcG9uZW50PiBt
X3ByaXZhdGU7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIFdlYk1l
ZGlhU3RyZWFtQ29tcG9uZW50X2gKKyNpbmNsdWRlICIuLi8uLi8uLi8uLi9QbGF0Zm9ybS9jaHJv
bWl1bS9wdWJsaWMvV2ViTWVkaWFTdHJlYW1Db21wb25lbnQuaCIKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvY2hyb21pdW0vcHVibGljL3BsYXRmb3JtL1dlYk1lZGlhU3RyZWFtRGVzY3JpcHRvci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL3BsYXRmb3JtL1dlYk1l
ZGlhU3RyZWFtRGVzY3JpcHRvci5oCShyZXZpc2lvbiAxMTI1NzEpCisrKyBTb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3B1YmxpYy9wbGF0Zm9ybS9XZWJNZWRpYVN0cmVhbURlc2NyaXB0b3IuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw4NiArMSwyNiBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKICAqIGFyZSBtZXQ6CisgKgogICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CiAgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgogICogMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CiAgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQogICogICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiAgKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQogICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAogICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZCiAgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwogICogKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCi0gKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMKLSAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpZm5k
ZWYgV2ViTWVkaWFTdHJlYW1EZXNjcmlwdG9yX2gKLSNkZWZpbmUgV2ViTWVkaWFTdHJlYW1EZXNj
cmlwdG9yX2gKLQotI2luY2x1ZGUgIldlYkNvbW1vbi5oIgotI2luY2x1ZGUgIldlYk5vbkNvcHlh
YmxlLmgiCi0jaW5jbHVkZSAiV2ViUHJpdmF0ZVB0ci5oIgotI2luY2x1ZGUgIldlYlZlY3Rvci5o
IgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1jbGFzcyBNZWRpYVN0cmVhbURlc2NyaXB0b3I7Ci19
Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1jbGFzcyBXZWJNZWRpYVN0cmVhbUNvbXBvbmVudDsK
LWNsYXNzIFdlYk1lZGlhU3RyZWFtU291cmNlOwotY2xhc3MgV2ViU3RyaW5nOwotCi1jbGFzcyBX
ZWJNZWRpYVN0cmVhbURlc2NyaXB0b3IgewotcHVibGljOgotICAgIFdlYk1lZGlhU3RyZWFtRGVz
Y3JpcHRvcigpIHsgfQotICAgIFdlYk1lZGlhU3RyZWFtRGVzY3JpcHRvcihjb25zdCBXZWJNZWRp
YVN0cmVhbURlc2NyaXB0b3ImIG90aGVyKSB7IGFzc2lnbihvdGhlcik7IH0KLSAgICB+V2ViTWVk
aWFTdHJlYW1EZXNjcmlwdG9yKCkgeyByZXNldCgpOyB9Ci0KLSAgICBXZWJNZWRpYVN0cmVhbURl
c2NyaXB0b3ImIG9wZXJhdG9yPShjb25zdCBXZWJNZWRpYVN0cmVhbURlc2NyaXB0b3ImIG90aGVy
KQotICAgIHsKLSAgICAgICAgYXNzaWduKG90aGVyKTsKLSAgICAgICAgcmV0dXJuICp0aGlzOwot
ICAgIH0KLQotICAgIFdFQktJVF9FWFBPUlQgdm9pZCBhc3NpZ24oY29uc3QgV2ViTWVkaWFTdHJl
YW1EZXNjcmlwdG9yJik7Ci0KLSAgICAvLyBERVBSRUNBVEVECi0gICAgV0VCS0lUX0VYUE9SVCB2
b2lkIGluaXRpYWxpemUoY29uc3QgV2ViU3RyaW5nJiBsYWJlbCwgY29uc3QgV2ViVmVjdG9yPFdl
Yk1lZGlhU3RyZWFtU291cmNlPiYpOwotCi0gICAgV0VCS0lUX0VYUE9SVCB2b2lkIGluaXRpYWxp
emUoY29uc3QgV2ViU3RyaW5nJiBsYWJlbCwgY29uc3QgV2ViVmVjdG9yPFdlYk1lZGlhU3RyZWFt
U291cmNlPiYgYXVkaW9Tb3VyY2VzLCBjb25zdCBXZWJWZWN0b3I8V2ViTWVkaWFTdHJlYW1Tb3Vy
Y2U+JiB2aWRlb1NvdXJjZXMpOwotICAgIFdFQktJVF9FWFBPUlQgdm9pZCByZXNldCgpOwotICAg
IGJvb2wgaXNOdWxsKCkgY29uc3QgeyByZXR1cm4gbV9wcml2YXRlLmlzTnVsbCgpOyB9Ci0KLSAg
ICBXRUJLSVRfRVhQT1JUIFdlYlN0cmluZyBsYWJlbCgpIGNvbnN0OwotCi0gICAgLy8gREVQUkVD
QVRFRAotICAgIFdFQktJVF9FWFBPUlQgdm9pZCBzb3VyY2VzKFdlYlZlY3RvcjxXZWJNZWRpYVN0
cmVhbVNvdXJjZT4mKSBjb25zdDsKLQotICAgIFdFQktJVF9FWFBPUlQgdm9pZCBhdWRpb1NvdXJj
ZXMoV2ViVmVjdG9yPFdlYk1lZGlhU3RyZWFtQ29tcG9uZW50PiYpIGNvbnN0OwotICAgIFdFQktJ
VF9FWFBPUlQgdm9pZCB2aWRlb1NvdXJjZXMoV2ViVmVjdG9yPFdlYk1lZGlhU3RyZWFtQ29tcG9u
ZW50PiYpIGNvbnN0OwotCi0jaWYgV0VCS0lUX0lNUExFTUVOVEFUSU9OCi0gICAgV2ViTWVkaWFT
dHJlYW1EZXNjcmlwdG9yKFdlYkNvcmU6Ok1lZGlhU3RyZWFtRGVzY3JpcHRvciopOwotICAgIFdl
Yk1lZGlhU3RyZWFtRGVzY3JpcHRvcihjb25zdCBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6TWVk
aWFTdHJlYW1EZXNjcmlwdG9yPiYpOwotICAgIG9wZXJhdG9yIFdURjo6UGFzc1JlZlB0cjxXZWJD
b3JlOjpNZWRpYVN0cmVhbURlc2NyaXB0b3I+KCkgY29uc3Q7Ci0gICAgb3BlcmF0b3IgV2ViQ29y
ZTo6TWVkaWFTdHJlYW1EZXNjcmlwdG9yKigpIGNvbnN0OwotICAgIFdlYk1lZGlhU3RyZWFtRGVz
Y3JpcHRvciYgb3BlcmF0b3I9KGNvbnN0IFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpNZWRpYVN0
cmVhbURlc2NyaXB0b3I+Jik7Ci0jZW5kaWYKLQotcHJpdmF0ZToKLSAgICBXZWJQcml2YXRlUHRy
PFdlYkNvcmU6Ok1lZGlhU3RyZWFtRGVzY3JpcHRvcj4gbV9wcml2YXRlOwotfTsKLQotfSAvLyBu
YW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBXZWJNZWRpYVN0cmVhbURlc2NyaXB0b3JfaAor
I2luY2x1ZGUgIi4uLy4uLy4uLy4uL1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJNZWRpYVN0
cmVhbURlc2NyaXB0b3IuaCIKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL3Bs
YXRmb3JtL1dlYk1lZGlhU3RyZWFtU291cmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9jaHJvbWl1bS9wdWJsaWMvcGxhdGZvcm0vV2ViTWVkaWFTdHJlYW1Tb3VyY2UuaAkocmV2aXNp
b24gMTEyNTcxKQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvcGxhdGZvcm0vV2Vi
TWVkaWFTdHJlYW1Tb3VyY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSw4NiArMSwyNiBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CiAgKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiAgKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICog
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
CisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgogICovCiAKLSNpZm5kZWYgV2ViTWVkaWFTdHJlYW1Tb3VyY2VfaAotI2Rl
ZmluZSBXZWJNZWRpYVN0cmVhbVNvdXJjZV9oCi0KLSNpbmNsdWRlICJXZWJDb21tb24uaCIKLSNp
bmNsdWRlICJXZWJOb25Db3B5YWJsZS5oIgotI2luY2x1ZGUgIldlYlByaXZhdGVQdHIuaCIKLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotY2xhc3MgTWVkaWFTdHJlYW1Tb3VyY2U7Ci19Ci0KLW5hbWVz
cGFjZSBXZWJLaXQgewotCi1jbGFzcyBXZWJTdHJpbmc7Ci0KLWNsYXNzIFdlYk1lZGlhU3RyZWFt
U291cmNlIHsKLXB1YmxpYzoKLSAgICBlbnVtIFR5cGUgewotICAgICAgICBUeXBlQXVkaW8sCi0g
ICAgICAgIFR5cGVWaWRlbwotICAgIH07Ci0KLSAgICBXZWJNZWRpYVN0cmVhbVNvdXJjZSgpIHsg
fQotICAgIFdlYk1lZGlhU3RyZWFtU291cmNlKGNvbnN0IFdlYk1lZGlhU3RyZWFtU291cmNlJiBv
dGhlcikgeyBhc3NpZ24ob3RoZXIpOyB9Ci0gICAgfldlYk1lZGlhU3RyZWFtU291cmNlKCkgeyBy
ZXNldCgpOyB9Ci0KLSAgICBXZWJNZWRpYVN0cmVhbVNvdXJjZSYgb3BlcmF0b3I9KGNvbnN0IFdl
Yk1lZGlhU3RyZWFtU291cmNlJiBvdGhlcikKLSAgICB7Ci0gICAgICAgIGFzc2lnbihvdGhlcik7
Ci0gICAgICAgIHJldHVybiAqdGhpczsKLSAgICB9Ci0KLSAgICBXRUJLSVRfRVhQT1JUIHZvaWQg
YXNzaWduKGNvbnN0IFdlYk1lZGlhU3RyZWFtU291cmNlJik7Ci0KLSAgICBXRUJLSVRfRVhQT1JU
IHZvaWQgaW5pdGlhbGl6ZShjb25zdCBXZWJTdHJpbmcmIGlkLCBUeXBlLCBjb25zdCBXZWJTdHJp
bmcmIG5hbWUpOwotICAgIFdFQktJVF9FWFBPUlQgdm9pZCByZXNldCgpOwotICAgIGJvb2wgaXNO
dWxsKCkgY29uc3QgeyByZXR1cm4gbV9wcml2YXRlLmlzTnVsbCgpOyB9Ci0KLSAgICBXRUJLSVRf
RVhQT1JUIFdlYlN0cmluZyBpZCgpIGNvbnN0OwotICAgIFdFQktJVF9FWFBPUlQgVHlwZSB0eXBl
KCkgY29uc3Q7Ci0gICAgV0VCS0lUX0VYUE9SVCBXZWJTdHJpbmcgbmFtZSgpIGNvbnN0OwotCi0j
aWYgV0VCS0lUX0lNUExFTUVOVEFUSU9OCi0gICAgV2ViTWVkaWFTdHJlYW1Tb3VyY2UoY29uc3Qg
V1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6Ok1lZGlhU3RyZWFtU291cmNlPiYpOwotICAgIFdlYk1l
ZGlhU3RyZWFtU291cmNlJiBvcGVyYXRvcj0oV2ViQ29yZTo6TWVkaWFTdHJlYW1Tb3VyY2UqKTsK
LSAgICBvcGVyYXRvciBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6TWVkaWFTdHJlYW1Tb3VyY2U+
KCkgY29uc3Q7Ci0gICAgb3BlcmF0b3IgV2ViQ29yZTo6TWVkaWFTdHJlYW1Tb3VyY2UqKCkgY29u
c3Q7Ci0jZW5kaWYKLQotcHJpdmF0ZToKLSAgICBXZWJQcml2YXRlUHRyPFdlYkNvcmU6Ok1lZGlh
U3RyZWFtU291cmNlPiBtX3ByaXZhdGU7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQot
I2VuZGlmIC8vIFdlYk1lZGlhU3RyZWFtU291cmNlX2gKKyNpbmNsdWRlICIuLi8uLi8uLi8uLi9Q
bGF0Zm9ybS9jaHJvbWl1bS9wdWJsaWMvV2ViTWVkaWFTdHJlYW1Tb3VyY2UuaCIKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL3BsYXRmb3JtL1dlYk1lZGlhU3RyZWFtU291cmNl
c1JlcXVlc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9w
bGF0Zm9ybS9XZWJNZWRpYVN0cmVhbVNvdXJjZXNSZXF1ZXN0LmgJKHJldmlzaW9uIDExMjU3MSkK
KysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL3BsYXRmb3JtL1dlYk1lZGlhU3RyZWFt
U291cmNlc1JlcXVlc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMiw2OCArMiwyNSBAQAogICogQ29w
eXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CiAgKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0g
KiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiAgKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICog
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisg
KiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgogICovCiAKLSNpZm5kZWYgV2ViTWVkaWFTdHJlYW1Tb3VyY2VzUmVxdWVzdF9oCi0j
ZGVmaW5lIFdlYk1lZGlhU3RyZWFtU291cmNlc1JlcXVlc3RfaAotCi0jaW5jbHVkZSAiV2ViQ29t
bW9uLmgiCi0jaW5jbHVkZSAiV2ViUHJpdmF0ZVB0ci5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci1jbGFzcyBNZWRpYVN0cmVhbVNvdXJjZXNRdWVyeUNsaWVudDsKLX0KLQotbmFtZXNwYWNlIFdl
YktpdCB7Ci0KLWNsYXNzIFdlYk1lZGlhU3RyZWFtU291cmNlOwotdGVtcGxhdGUgPHR5cGVuYW1l
IFQ+IGNsYXNzIFdlYlZlY3RvcjsKLQotY2xhc3MgV2ViTWVkaWFTdHJlYW1Tb3VyY2VzUmVxdWVz
dCB7Ci1wdWJsaWM6Ci0gICAgV2ViTWVkaWFTdHJlYW1Tb3VyY2VzUmVxdWVzdCgpIHsgfQotICAg
IH5XZWJNZWRpYVN0cmVhbVNvdXJjZXNSZXF1ZXN0KCkgeyByZXNldCgpOyB9Ci0KLSAgICBXRUJL
SVRfRVhQT1JUIHZvaWQgcmVzZXQoKTsKLSAgICBib29sIGlzTnVsbCgpIGNvbnN0IHsgcmV0dXJu
IG1fcHJpdmF0ZS5pc051bGwoKTsgfQotCi0gICAgV0VCS0lUX0VYUE9SVCBib29sIGF1ZGlvKCkg
Y29uc3Q7Ci0gICAgV0VCS0lUX0VYUE9SVCBib29sIHZpZGVvKCkgY29uc3Q7Ci0KLSAgICBXRUJL
SVRfRVhQT1JUIHZvaWQgZGlkQ29tcGxldGVRdWVyeShjb25zdCBXZWJWZWN0b3I8V2ViTWVkaWFT
dHJlYW1Tb3VyY2U+JiBhdWRpb1NvdXJjZXMsIGNvbnN0IFdlYlZlY3RvcjxXZWJNZWRpYVN0cmVh
bVNvdXJjZT4mIHZpZGVvU291cmNlcykgY29uc3Q7Ci0KLSNpZiBXRUJLSVRfSU1QTEVNRU5UQVRJ
T04KLSAgICBXZWJNZWRpYVN0cmVhbVNvdXJjZXNSZXF1ZXN0KGNvbnN0IFdURjo6UGFzc1JlZlB0
cjxXZWJDb3JlOjpNZWRpYVN0cmVhbVNvdXJjZXNRdWVyeUNsaWVudD4mKTsKLSNlbmRpZgotCi1w
cml2YXRlOgotICAgIFdlYlByaXZhdGVQdHI8V2ViQ29yZTo6TWVkaWFTdHJlYW1Tb3VyY2VzUXVl
cnlDbGllbnQ+IG1fcHJpdmF0ZTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5k
aWYgLy8gV2ViTWVkaWFTdHJlYW1Tb3VyY2VzUmVxdWVzdF9oCisjaW5jbHVkZSAiLi4vLi4vLi4v
Li4vUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYk1lZGlhU3RyZWFtU291cmNlc1JlcXVlc3Qu
aCIKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL3BsYXRmb3JtL1dlYlBlZXJD
b25uZWN0aW9uMDBIYW5kbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1
bS9wdWJsaWMvcGxhdGZvcm0vV2ViUGVlckNvbm5lY3Rpb24wMEhhbmRsZXIuaAkocmV2aXNpb24g
MTEyNTcxKQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvcGxhdGZvcm0vV2ViUGVl
ckNvbm5lY3Rpb24wMEhhbmRsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMiw3MyArMiwyNSBAQAog
ICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CiAgKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiAgKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICog
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
CisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgogICovCiAKLSNpZm5kZWYgV2ViUGVlckNvbm5lY3Rpb24wMEhhbmRsZXJf
aAotI2RlZmluZSBXZWJQZWVyQ29ubmVjdGlvbjAwSGFuZGxlcl9oCi0KLSNpbmNsdWRlICJXZWJT
dHJpbmcuaCIKLSNpbmNsdWRlICJXZWJWZWN0b3IuaCIKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0K
LWNsYXNzIFdlYklDRUNhbmRpZGF0ZURlc2NyaXB0b3I7Ci1jbGFzcyBXZWJJQ0VPcHRpb25zOwot
Y2xhc3MgV2ViUGVlckNvbm5lY3Rpb24wMEhhbmRsZXJDbGllbnQ7Ci1jbGFzcyBXZWJNZWRpYUhp
bnRzOwotY2xhc3MgV2ViTWVkaWFTdHJlYW1EZXNjcmlwdG9yOwotY2xhc3MgV2ViU2Vzc2lvbkRl
c2NyaXB0aW9uRGVzY3JpcHRvcjsKLQotY2xhc3MgV2ViUGVlckNvbm5lY3Rpb24wMEhhbmRsZXIg
ewotcHVibGljOgotICAgIGVudW0gQWN0aW9uIHsKLSAgICAgICAgQWN0aW9uU0RQT2ZmZXIgPSAw
eDEwMCwKLSAgICAgICAgQWN0aW9uU0RQUFJhbnN3ZXIgPSAweDIwMCwKLSAgICAgICAgQWN0aW9u
U0RQQW5zd2VyID0gMHgzMDAKLSAgICB9OwotCi0gICAgdmlydHVhbCB+V2ViUGVlckNvbm5lY3Rp
b24wMEhhbmRsZXIoKSB7IH0KLQotICAgIHZpcnR1YWwgdm9pZCBpbml0aWFsaXplKGNvbnN0IFdl
YlN0cmluZyYgc2VydmVyQ29uZmlndXJhdGlvbiwgY29uc3QgV2ViU3RyaW5nJiB1c2VybmFtZSkg
PSAwOwotCi0gICAgdmlydHVhbCBXZWJTZXNzaW9uRGVzY3JpcHRpb25EZXNjcmlwdG9yIGNyZWF0
ZU9mZmVyKGNvbnN0IFdlYk1lZGlhSGludHMmKSA9IDA7Ci0gICAgdmlydHVhbCBXZWJTZXNzaW9u
RGVzY3JpcHRpb25EZXNjcmlwdG9yIGNyZWF0ZUFuc3dlcihjb25zdCBXZWJTdHJpbmcmIG9mZmVy
LCBjb25zdCBXZWJNZWRpYUhpbnRzJikgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBzZXRMb2NhbERl
c2NyaXB0aW9uKEFjdGlvbiwgY29uc3QgV2ViU2Vzc2lvbkRlc2NyaXB0aW9uRGVzY3JpcHRvciYp
ID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgc2V0UmVtb3RlRGVzY3JpcHRpb24oQWN0aW9uLCBjb25z
dCBXZWJTZXNzaW9uRGVzY3JpcHRpb25EZXNjcmlwdG9yJikgPSAwOwotICAgIHZpcnR1YWwgV2Vi
U2Vzc2lvbkRlc2NyaXB0aW9uRGVzY3JpcHRvciBsb2NhbERlc2NyaXB0aW9uKCkgPSAwOwotICAg
IHZpcnR1YWwgV2ViU2Vzc2lvbkRlc2NyaXB0aW9uRGVzY3JpcHRvciByZW1vdGVEZXNjcmlwdGlv
bigpID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgc3RhcnRJY2UoY29uc3QgV2ViSUNFT3B0aW9ucyYp
ID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgcHJvY2Vzc0ljZU1lc3NhZ2UoY29uc3QgV2ViSUNFQ2Fu
ZGlkYXRlRGVzY3JpcHRvciYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgYWRkU3RyZWFtKGNvbnN0
IFdlYk1lZGlhU3RyZWFtRGVzY3JpcHRvciYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVtb3Zl
U3RyZWFtKGNvbnN0IFdlYk1lZGlhU3RyZWFtRGVzY3JpcHRvciYpID0gMDsKLQotICAgIHZpcnR1
YWwgdm9pZCBzdG9wKCkgPSAwOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRp
ZiAvLyBXZWJQZWVyQ29ubmVjdGlvbjAwSGFuZGxlcl9oCisjaW5jbHVkZSAiLi4vLi4vLi4vLi4v
UGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYlBlZXJDb25uZWN0aW9uMDBIYW5kbGVyLmgiCklu
ZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9wbGF0Zm9ybS9XZWJQZWVyQ29ubmVj
dGlvbjAwSGFuZGxlckNsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21p
dW0vcHVibGljL3BsYXRmb3JtL1dlYlBlZXJDb25uZWN0aW9uMDBIYW5kbGVyQ2xpZW50LmgJKHJl
dmlzaW9uIDExMjU3MSkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL3BsYXRmb3Jt
L1dlYlBlZXJDb25uZWN0aW9uMDBIYW5kbGVyQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTIs
NjggKzIsMjUgQEAKICAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0Ogor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgogICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAg
ICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRz
Ci0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgogICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0g
KiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJB
UyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICog
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaWZuZGVmIFdlYlBlZXJDb25uZWN0
aW9uMDBIYW5kbGVyQ2xpZW50X2gKLSNkZWZpbmUgV2ViUGVlckNvbm5lY3Rpb24wMEhhbmRsZXJD
bGllbnRfaAotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLWNsYXNzIFdlYklDRUNhbmRpZGF0ZURlc2Ny
aXB0b3I7Ci1jbGFzcyBXZWJNZWRpYVN0cmVhbURlc2NyaXB0b3I7Ci1jbGFzcyBXZWJTdHJpbmc7
Ci0KLWNsYXNzIFdlYlBlZXJDb25uZWN0aW9uMDBIYW5kbGVyQ2xpZW50IHsKLXB1YmxpYzoKLSAg
ICBlbnVtIFJlYWR5U3RhdGUgewotICAgICAgICBSZWFkeVN0YXRlTmV3ID0gMCwKLSAgICAgICAg
UmVhZHlTdGF0ZU5lZ290aWF0aW5nID0gMSwKLSAgICAgICAgUmVhZHlTdGF0ZUFjdGl2ZSA9IDIs
Ci0gICAgICAgIFJlYWR5U3RhdGVDbG9zZWQgPSAzCi0gICAgfTsKLQotICAgIGVudW0gSUNFU3Rh
dGUgewotICAgICAgICBJQ0VTdGF0ZUdhdGhlcmluZyA9IDB4MTAwLAotICAgICAgICBJQ0VTdGF0
ZVdhaXRpbmcgPSAweDIwMCwKLSAgICAgICAgSUNFU3RhdGVDaGVja2luZyA9IDB4MzAwLAotICAg
ICAgICBJQ0VTdGF0ZUNvbm5lY3RlZCA9IDB4NDAwLAotICAgICAgICBJQ0VTdGF0ZUNvbXBsZXRl
ZCA9IDB4NTAwLAotICAgICAgICBJQ0VTdGF0ZUZhaWxlZCA9IDB4NjAwLAotICAgICAgICBJQ0VT
dGF0ZUNsb3NlZCA9IDB4NzAwCi0gICAgfTsKLQotICAgIHZpcnR1YWwgfldlYlBlZXJDb25uZWN0
aW9uMDBIYW5kbGVyQ2xpZW50KCkgeyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZGlkR2VuZXJhdGVJ
Q0VDYW5kaWRhdGUoY29uc3QgV2ViSUNFQ2FuZGlkYXRlRGVzY3JpcHRvciYsIGJvb2wgbW9yZVRv
Rm9sbG93KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRpZENoYW5nZVJlYWR5U3RhdGUoUmVhZHlT
dGF0ZSkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBkaWRDaGFuZ2VJQ0VTdGF0ZShJQ0VTdGF0ZSkg
PSAwOwotICAgIHZpcnR1YWwgdm9pZCBkaWRBZGRSZW1vdGVTdHJlYW0oY29uc3QgV2ViTWVkaWFT
dHJlYW1EZXNjcmlwdG9yJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBkaWRSZW1vdmVSZW1vdGVT
dHJlYW0oY29uc3QgV2ViTWVkaWFTdHJlYW1EZXNjcmlwdG9yJikgPSAwOwotfTsKLQotfSAvLyBu
YW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBXZWJQZWVyQ29ubmVjdGlvbjAwSGFuZGxlckNs
aWVudF9oCisjaW5jbHVkZSAiLi4vLi4vLi4vLi4vUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dl
YlBlZXJDb25uZWN0aW9uMDBIYW5kbGVyQ2xpZW50LmgiCkluZGV4OiBTb3VyY2UvV2ViS2l0L2No
cm9taXVtL3B1YmxpYy9wbGF0Zm9ybS9XZWJQZWVyQ29ubmVjdGlvbkhhbmRsZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9wbGF0Zm9ybS9XZWJQZWVyQ29u
bmVjdGlvbkhhbmRsZXIuaAkocmV2aXNpb24gMTEyNTcxKQorKysgU291cmNlL1dlYktpdC9jaHJv
bWl1bS9wdWJsaWMvcGxhdGZvcm0vV2ViUGVlckNvbm5lY3Rpb25IYW5kbGVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNzMgKzEsMjYgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQotICogbWV0OgorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgogICoKLSAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0
cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0
aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqIDEuICBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgogICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAq
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMg
Q09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRT
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAq
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaWZuZGVm
IFdlYlBlZXJDb25uZWN0aW9uSGFuZGxlcl9oCi0jZGVmaW5lIFdlYlBlZXJDb25uZWN0aW9uSGFu
ZGxlcl9oCi0KLSNpbmNsdWRlICIuLi9XZWJTZWN1cml0eU9yaWdpbi5oIiAvLyBGSVhNRTogVGhp
cyBpcyBhIGxheWVyaW5nIHZpb2xhdGlvbi4KLSNpbmNsdWRlICJXZWJTdHJpbmcuaCIKLSNpbmNs
dWRlICJXZWJWZWN0b3IuaCIKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIFdlYk1lZGlh
U3RyZWFtRGVzY3JpcHRvcjsKLWNsYXNzIFdlYlBlZXJDb25uZWN0aW9uSGFuZGxlckNsaWVudDsK
LQotLy8gTm90ZToKLS8vIFNEUCBzdGFuZHMgZm9yIFNlc3Npb24gRGVzY3JpcHRpb24gUHJvdG9j
b2wsIHdoaWNoIGlzIGludGVuZGVkIGZvciBkZXNjcmliaW5nCi0vLyBtdWx0aW1lZGlhIHNlc3Np
b25zIGZvciB0aGUgcHVycG9zZXMgb2Ygc2Vzc2lvbiBhbm5vdW5jZW1lbnQsIHNlc3Npb24KLS8v
IGludml0YXRpb24sIGFuZCBvdGhlciBmb3JtcyBvZiBtdWx0aW1lZGlhIHNlc3Npb24gaW5pdGlh
dGlvbi4KLS8vCi0vLyBNb3JlIGluZm9ybWF0aW9uIGNhbiBiZSBmb3VuZCBoZXJlOgotLy8gaHR0
cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNDU2NgotLy8gaHR0cDovL2VuLndpa2lwZWRpYS5v
cmcvd2lraS9TZXNzaW9uX0Rlc2NyaXB0aW9uX1Byb3RvY29sCi0KLQotY2xhc3MgV2ViUGVlckNv
bm5lY3Rpb25IYW5kbGVyIHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIH5XZWJQZWVyQ29ubmVjdGlv
bkhhbmRsZXIoKSB7IH0KLQotICAgIC8vIERFUFJFQ0FURUQKLSAgICB2aXJ0dWFsIHZvaWQgaW5p
dGlhbGl6ZShjb25zdCBXZWJTdHJpbmcmIHNlcnZlckNvbmZpZ3VyYXRpb24sIGNvbnN0IFdlYlNl
Y3VyaXR5T3JpZ2luJikgeyB9OwotCi0gICAgdmlydHVhbCB2b2lkIGluaXRpYWxpemUoY29uc3Qg
V2ViU3RyaW5nJiBzZXJ2ZXJDb25maWd1cmF0aW9uLCBjb25zdCBXZWJTdHJpbmcmIHVzZXJuYW1l
KSB7IH07Ci0KLSAgICB2aXJ0dWFsIHZvaWQgcHJvZHVjZUluaXRpYWxPZmZlcihjb25zdCBXZWJW
ZWN0b3I8V2ViTWVkaWFTdHJlYW1EZXNjcmlwdG9yPiYgcGVuZGluZ0FkZFN0cmVhbXMpID0gMDsK
LSAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlSW5pdGlhbE9mZmVyKGNvbnN0IFdlYlN0cmluZyYgc2Rw
KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHByb2Nlc3NTRFAoY29uc3QgV2ViU3RyaW5nJiBzZHAp
ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcHJvY2Vzc1BlbmRpbmdTdHJlYW1zKGNvbnN0IFdlYlZl
Y3RvcjxXZWJNZWRpYVN0cmVhbURlc2NyaXB0b3I+JiBwZW5kaW5nQWRkU3RyZWFtcywgY29uc3Qg
V2ViVmVjdG9yPFdlYk1lZGlhU3RyZWFtRGVzY3JpcHRvcj4mIHBlbmRpbmdSZW1vdmVTdHJlYW1z
KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHNlbmREYXRhU3RyZWFtTWVzc2FnZShjb25zdCBjaGFy
KiBkYXRhLCBzaXplX3QgbGVuZ3RoKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc3RvcCgpID0g
MDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gV2ViUGVlckNvbm5l
Y3Rpb25IYW5kbGVyX2gKKyNpbmNsdWRlICIuLi8uLi8uLi8uLi9QbGF0Zm9ybS9jaHJvbWl1bS9w
dWJsaWMvV2ViUGVlckNvbm5lY3Rpb25IYW5kbGVyLmgiCkluZGV4OiBTb3VyY2UvV2ViS2l0L2No
cm9taXVtL3B1YmxpYy9wbGF0Zm9ybS9XZWJQZWVyQ29ubmVjdGlvbkhhbmRsZXJDbGllbnQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9wbGF0Zm9ybS9XZWJQ
ZWVyQ29ubmVjdGlvbkhhbmRsZXJDbGllbnQuaAkocmV2aXNpb24gMTEyNTcxKQorKysgU291cmNl
L1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvcGxhdGZvcm0vV2ViUGVlckNvbm5lY3Rpb25IYW5kbGVy
Q2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNTIgKzEsMjYgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgogICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
Ci0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAq
IDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgogICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0g
KiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KICAqLwogCi0jaWZuZGVmIFdlYlBlZXJDb25uZWN0aW9uSGFuZGxlckNsaWVudF9oCi0jZGVm
aW5lIFdlYlBlZXJDb25uZWN0aW9uSGFuZGxlckNsaWVudF9oCi0KLW5hbWVzcGFjZSBXZWJLaXQg
ewotCi1jbGFzcyBXZWJNZWRpYVN0cmVhbURlc2NyaXB0b3I7Ci1jbGFzcyBXZWJTdHJpbmc7Ci0K
LWNsYXNzIFdlYlBlZXJDb25uZWN0aW9uSGFuZGxlckNsaWVudCB7Ci1wdWJsaWM6Ci0gICAgdmly
dHVhbCB+V2ViUGVlckNvbm5lY3Rpb25IYW5kbGVyQ2xpZW50KCkgeyB9Ci0KLSAgICB2aXJ0dWFs
IHZvaWQgZGlkQ29tcGxldGVJQ0VQcm9jZXNzaW5nKCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBk
aWRHZW5lcmF0ZVNEUChjb25zdCBXZWJTdHJpbmcmIHNkcCkgPSAwOwotICAgIHZpcnR1YWwgdm9p
ZCBkaWRSZWNlaXZlRGF0YVN0cmVhbU1lc3NhZ2UoY29uc3QgY2hhciogZGF0YSwgc2l6ZV90IGxl
bmd0aCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBkaWRBZGRSZW1vdGVTdHJlYW0oY29uc3QgV2Vi
TWVkaWFTdHJlYW1EZXNjcmlwdG9yJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBkaWRSZW1vdmVS
ZW1vdGVTdHJlYW0oY29uc3QgV2ViTWVkaWFTdHJlYW1EZXNjcmlwdG9yJikgPSAwOwotfTsKLQot
fSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBXZWJQZWVyQ29ubmVjdGlvbkhhbmRs
ZXJDbGllbnRfaAorI2luY2x1ZGUgIi4uLy4uLy4uLy4uL1BsYXRmb3JtL2Nocm9taXVtL3B1Ymxp
Yy9XZWJQZWVyQ29ubmVjdGlvbkhhbmRsZXJDbGllbnQuaCIKSW5kZXg6IFNvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vcHVibGljL3BsYXRmb3JtL1dlYlNlc3Npb25EZXNjcmlwdGlvbkRlc2NyaXB0b3Iu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9wbGF0Zm9ybS9X
ZWJTZXNzaW9uRGVzY3JpcHRpb25EZXNjcmlwdG9yLmgJKHJldmlzaW9uIDExMjU3MSkKKysrIFNv
dXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL3BsYXRmb3JtL1dlYlNlc3Npb25EZXNjcmlwdGlv
bkRlc2NyaXB0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMiw5MiArMiwyNSBAQAogICogQ29weXJp
Z2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CiAgKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgor
ICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiAgKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
LSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgogICovCiAKLSNpZm5kZWYgV2ViU2Vzc2lvbkRlc2NyaXB0aW9uRGVzY3JpcHRvcl9oCi0j
ZGVmaW5lIFdlYlNlc3Npb25EZXNjcmlwdGlvbkRlc2NyaXB0b3JfaAotCi0jaW5jbHVkZSAiV2Vi
Q29tbW9uLmgiCi0jaW5jbHVkZSAiV2ViTm9uQ29weWFibGUuaCIKLSNpbmNsdWRlICJXZWJQcml2
YXRlUHRyLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLWNsYXNzIFNlc3Npb25EZXNjcmlwdGlv
bkRlc2NyaXB0b3I7Ci19Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotY2xhc3MgV2ViU3RyaW5nOwot
Y2xhc3MgV2ViSUNFQ2FuZGlkYXRlRGVzY3JpcHRvcjsKLQotLyoKLSAqICBJbiBvcmRlciB0byBl
c3RhYmxpc2ggdGhlIG1lZGlhIHBsYW5lLCBQZWVyQ29ubmVjdGlvbiBuZWVkcyBzcGVjaWZpYwot
ICogIHBhcmFtZXRlcnMgdG8gaW5kaWNhdGUgd2hhdCB0byB0cmFuc21pdCB0byB0aGUgcmVtb3Rl
IHNpZGUsIGFzIHdlbGwKLSAqICBhcyBob3cgdG8gaGFuZGxlIHRoZSBtZWRpYSB0aGF0IGlzIHJl
Y2VpdmVkLiBUaGVzZSBwYXJhbWV0ZXJzIGFyZQotICogIGRldGVybWluZWQgYnkgdGhlIGV4Y2hh
bmdlIG9mIHNlc3Npb24gZGVzY3JpcHRpb25zIGluIG9mZmVycyBhbmQKLSAqICBhbnN3ZXJzLCBh
bmQgdGhlcmUgYXJlIGNlcnRhaW4gZGV0YWlscyB0byB0aGlzIHByb2Nlc3MgdGhhdCBtdXN0IGJl
Ci0gKiAgaGFuZGxlZCBpbiB0aGUgSlNFUCBBUElzLgotCi0gKiAgV2hldGhlciBhIHNlc3Npb24g
ZGVzY3JpcHRpb24gd2FzIHNlbnQgb3IgcmVjZWl2ZWQgYWZmZWN0cyB0aGUKLSAqICBtZWFuaW5n
IG9mIHRoYXQgZGVzY3JpcHRpb24uIEZvciBleGFtcGxlLCB0aGUgbGlzdCBvZiBjb2RlY3Mgc2Vu
dCB0bwotICogIGEgcmVtb3RlIHBhcnR5IGluZGljYXRlcyB3aGF0IHRoZSBsb2NhbCBzaWRlIGlz
IHdpbGxpbmcgdG8gZGVjb2RlLAotICogIGFuZCB3aGF0IHRoZSByZW1vdGUgcGFydHkgc2hvdWxk
IHNlbmQuCi0gKi8KLWNsYXNzIFdlYlNlc3Npb25EZXNjcmlwdGlvbkRlc2NyaXB0b3IgewotcHVi
bGljOgotICAgIFdlYlNlc3Npb25EZXNjcmlwdGlvbkRlc2NyaXB0b3IoKSB7IH0KLSAgICBXZWJT
ZXNzaW9uRGVzY3JpcHRpb25EZXNjcmlwdG9yKGNvbnN0IFdlYlNlc3Npb25EZXNjcmlwdGlvbkRl
c2NyaXB0b3ImIG90aGVyKSB7IGFzc2lnbihvdGhlcik7IH0KLSAgICB+V2ViU2Vzc2lvbkRlc2Ny
aXB0aW9uRGVzY3JpcHRvcigpIHsgcmVzZXQoKTsgfQotCi0gICAgV2ViU2Vzc2lvbkRlc2NyaXB0
aW9uRGVzY3JpcHRvciYgb3BlcmF0b3I9KGNvbnN0IFdlYlNlc3Npb25EZXNjcmlwdGlvbkRlc2Ny
aXB0b3ImIG90aGVyKQotICAgIHsKLSAgICAgICAgYXNzaWduKG90aGVyKTsKLSAgICAgICAgcmV0
dXJuICp0aGlzOwotICAgIH0KLQotICAgIFdFQktJVF9FWFBPUlQgdm9pZCBhc3NpZ24oY29uc3Qg
V2ViU2Vzc2lvbkRlc2NyaXB0aW9uRGVzY3JpcHRvciYpOwotCi0gICAgV0VCS0lUX0VYUE9SVCB2
b2lkIGluaXRpYWxpemUoY29uc3QgV2ViU3RyaW5nJiBzZHApOwotICAgIFdFQktJVF9FWFBPUlQg
dm9pZCByZXNldCgpOwotICAgIGJvb2wgaXNOdWxsKCkgY29uc3QgeyByZXR1cm4gbV9wcml2YXRl
LmlzTnVsbCgpOyB9Ci0KLSAgICBXRUJLSVRfRVhQT1JUIHNpemVfdCBudW1iZXJPZkFkZGVkQ2Fu
ZGlkYXRlcygpIGNvbnN0OwotICAgIFdFQktJVF9FWFBPUlQgV2ViSUNFQ2FuZGlkYXRlRGVzY3Jp
cHRvciBjYW5kaWRhdGUoc2l6ZV90IGluZGV4KSBjb25zdDsKLSAgICBXRUJLSVRfRVhQT1JUIFdl
YlN0cmluZyBpbml0aWFsU0RQKCkgY29uc3Q7Ci0KLSNpZiBXRUJLSVRfSU1QTEVNRU5UQVRJT04K
LSAgICBXZWJTZXNzaW9uRGVzY3JpcHRpb25EZXNjcmlwdG9yKGNvbnN0IFdURjo6UGFzc1JlZlB0
cjxXZWJDb3JlOjpTZXNzaW9uRGVzY3JpcHRpb25EZXNjcmlwdG9yPiYpOwotCi0gICAgb3BlcmF0
b3IgV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6OlNlc3Npb25EZXNjcmlwdGlvbkRlc2NyaXB0b3I+
KCk7Ci0jZW5kaWYKLQotcHJpdmF0ZToKLSAgICBXZWJQcml2YXRlUHRyPFdlYkNvcmU6OlNlc3Np
b25EZXNjcmlwdGlvbkRlc2NyaXB0b3I+IG1fcHJpdmF0ZTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNl
IFdlYktpdAotCi0jZW5kaWYgLy8gV2ViU2Vzc2lvbkRlc2NyaXB0aW9uRGVzY3JpcHRvcl9oCisj
aW5jbHVkZSAiLi4vLi4vLi4vLi4vUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYlNlc3Npb25E
ZXNjcmlwdGlvbkRlc2NyaXB0b3IuaCIKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVi
bGljL3BsYXRmb3JtL1dlYlZlY3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hy
b21pdW0vcHVibGljL3BsYXRmb3JtL1dlYlZlY3Rvci5oCShyZXZpc2lvbiAxMTI1NzEpCisrKyBT
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9wbGF0Zm9ybS9XZWJWZWN0b3IuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSwxODYgKzEsMjYgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZQotICogbWV0OgorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgogICoKLSAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBk
aXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5v
ciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqIDEuICBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgogICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
LSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJ
VFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICog
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1Ig
SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMK
KyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaWZu
ZGVmIFdlYlZlY3Rvcl9oCi0jZGVmaW5lIFdlYlZlY3Rvcl9oCi0KLSNpbmNsdWRlICJXZWJDb21t
b24uaCIKLQotI2luY2x1ZGUgPGFsZ29yaXRobT4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLS8v
IEEgc2ltcGxlIHZlY3RvciBjbGFzcy4KLS8vCi0vLyBTYW1wbGUgdXNhZ2U6Ci0vLwotLy8gICB2
b2lkIEZvbyhXZWJWZWN0b3I8aW50PiYgcmVzdWx0KQotLy8gICB7Ci0vLyAgICAgICBXZWJWZWN0
b3I8aW50PiBkYXRhKDEwKTsKLS8vICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZGF0YS5z
aXplKCk7ICsraSkKLS8vICAgICAgICAgICBkYXRhW2ldID0gLi4uCi0vLyAgICAgICByZXN1bHQu
c3dhcChkYXRhKTsKLS8vICAgfQotLy8KLS8vIEl0IGlzIGFsc28gcG9zc2libGUgdG8gYXNzaWdu
IGZyb20gb3RoZXIgdHlwZXMgb2YgcmFuZG9tIGFjY2VzcwotLy8gY29udGFpbmVyczoKLS8vCi0v
LyAgIHZvaWQgRm9vKGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgaW5wdXQpCi0vLyAg
IHsKLS8vICAgICAgIFdlYlZlY3RvcjxXZWJDU3RyaW5nPiBjc3RyaW5ncyA9IGlucHV0OwotLy8g
ICAgICAgLi4uCi0vLyAgIH0KLS8vCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLWNsYXNzIFdlYlZl
Y3RvciB7Ci1wdWJsaWM6Ci0gICAgdHlwZWRlZiBUIFZhbHVlVHlwZTsKLQotICAgIH5XZWJWZWN0
b3IoKQotICAgIHsKLSAgICAgICAgZGVzdHJveSgpOwotICAgIH0KLQotICAgIGV4cGxpY2l0IFdl
YlZlY3RvcihzaXplX3Qgc2l6ZSA9IDApCi0gICAgewotICAgICAgICBpbml0aWFsaXplKHNpemUp
OwotICAgIH0KLQotICAgIFdlYlZlY3Rvcihjb25zdCBXZWJWZWN0b3I8VD4mIG90aGVyKQotICAg
IHsKLSAgICAgICAgaW5pdGlhbGl6ZUZyb20ob3RoZXIubV9wdHIsIG90aGVyLm1fc2l6ZSk7Ci0g
ICAgfQotCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIEM+Ci0gICAgV2ViVmVjdG9yKGNvbnN0IEMm
IG90aGVyKQotICAgIHsKLSAgICAgICAgaW5pdGlhbGl6ZUZyb20ob3RoZXIuc2l6ZSgpID8gJm90
aGVyWzBdIDogMCwgb3RoZXIuc2l6ZSgpKTsKLSAgICB9Ci0KLSAgICBXZWJWZWN0b3ImIG9wZXJh
dG9yPShjb25zdCBXZWJWZWN0b3ImIG90aGVyKQotICAgIHsKLSAgICAgICAgaWYgKHRoaXMgIT0g
Jm90aGVyKQotICAgICAgICAgICAgYXNzaWduKG90aGVyKTsKLSAgICAgICAgcmV0dXJuICp0aGlz
OwotICAgIH0KLQotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBDPgotICAgIFdlYlZlY3RvcjxUPiYg
b3BlcmF0b3I9KGNvbnN0IEMmIG90aGVyKQotICAgIHsKLSAgICAgICAgaWYgKHRoaXMgIT0gcmVp
bnRlcnByZXRfY2FzdDxjb25zdCBXZWJWZWN0b3I8VD4qPigmb3RoZXIpKQotICAgICAgICAgICAg
YXNzaWduKG90aGVyKTsKLSAgICAgICAgcmV0dXJuICp0aGlzOwotICAgIH0KLQotICAgIHRlbXBs
YXRlIDx0eXBlbmFtZSBDPgotICAgIHZvaWQgYXNzaWduKGNvbnN0IEMmIG90aGVyKQotICAgIHsK
LSAgICAgICAgYXNzaWduKG90aGVyLnNpemUoKSA/ICZvdGhlclswXSA6IDAsIG90aGVyLnNpemUo
KSk7Ci0gICAgfQotCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIFU+Ci0gICAgdm9pZCBhc3NpZ24o
Y29uc3QgVSogdmFsdWVzLCBzaXplX3Qgc2l6ZSkKLSAgICB7Ci0gICAgICAgIGRlc3Ryb3koKTsK
LSAgICAgICAgaW5pdGlhbGl6ZUZyb20odmFsdWVzLCBzaXplKTsKLSAgICB9Ci0KLSAgICBzaXpl
X3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQotICAgIGJvb2wgaXNFbXB0eSgpIGNv
bnN0IHsgcmV0dXJuICFtX3NpemU7IH0KLQotICAgIFQmIG9wZXJhdG9yW10oc2l6ZV90IGkpCi0g
ICAgewotICAgICAgICBXRUJLSVRfQVNTRVJUKGkgPCBtX3NpemUpOwotICAgICAgICByZXR1cm4g
bV9wdHJbaV07Ci0gICAgfQotICAgIGNvbnN0IFQmIG9wZXJhdG9yW10oc2l6ZV90IGkpIGNvbnN0
Ci0gICAgewotICAgICAgICBXRUJLSVRfQVNTRVJUKGkgPCBtX3NpemUpOwotICAgICAgICByZXR1
cm4gbV9wdHJbaV07Ci0gICAgfQotICAgIAotICAgIGJvb2wgY29udGFpbnMoY29uc3QgVCYgdmFs
dWUpIGNvbnN0Ci0gICAgewotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fc2l6ZTsg
aSsrKSB7Ci0gICAgICAgICAgICBpZiAobV9wdHJbaV0gPT0gdmFsdWUpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
LQotICAgIFQqIGRhdGEoKSB7IHJldHVybiBtX3B0cjsgfQotICAgIGNvbnN0IFQqIGRhdGEoKSBj
b25zdCB7IHJldHVybiBtX3B0cjsgfQotCi0gICAgdm9pZCBzd2FwKFdlYlZlY3RvcjxUPiYgb3Ro
ZXIpCi0gICAgewotICAgICAgICBzdGQ6OnN3YXAobV9wdHIsIG90aGVyLm1fcHRyKTsKLSAgICAg
ICAgc3RkOjpzd2FwKG1fc2l6ZSwgb3RoZXIubV9zaXplKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0g
ICAgdm9pZCBpbml0aWFsaXplKHNpemVfdCBzaXplKQotICAgIHsKLSAgICAgICAgbV9zaXplID0g
c2l6ZTsKLSAgICAgICAgaWYgKCFtX3NpemUpCi0gICAgICAgICAgICBtX3B0ciA9IDA7Ci0gICAg
ICAgIGVsc2UgewotICAgICAgICAgICAgbV9wdHIgPSBzdGF0aWNfY2FzdDxUKj4oOjpvcGVyYXRv
ciBuZXcoc2l6ZW9mKFQpICogbV9zaXplKSk7Ci0gICAgICAgICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IG1fc2l6ZTsgKytpKQotICAgICAgICAgICAgICAgIG5ldyAoJm1fcHRyW2ldKSBUKCk7
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4KLSAgICB2b2lk
IGluaXRpYWxpemVGcm9tKGNvbnN0IFUqIHZhbHVlcywgc2l6ZV90IHNpemUpCi0gICAgewotICAg
ICAgICBtX3NpemUgPSBzaXplOwotICAgICAgICBpZiAoIW1fc2l6ZSkKLSAgICAgICAgICAgIG1f
cHRyID0gMDsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBtX3B0ciA9IHN0YXRpY19jYXN0
PFQqPig6Om9wZXJhdG9yIG5ldyhzaXplb2YoVCkgKiBtX3NpemUpKTsKLSAgICAgICAgICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9zaXplOyArK2kpCi0gICAgICAgICAgICAgICAgbmV3ICgm
bV9wdHJbaV0pIFQodmFsdWVzW2ldKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHZvaWQgZGVz
dHJveSgpCi0gICAgewotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fc2l6ZTsgKytp
KQotICAgICAgICAgICAgbV9wdHJbaV0uflQoKTsKLSAgICAgICAgOjpvcGVyYXRvciBkZWxldGUo
bV9wdHIpOwotICAgIH0KLQotICAgIFQqIG1fcHRyOwotICAgIHNpemVfdCBtX3NpemU7Ci19Owot
Ci19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmCisjaW5jbHVkZSAiLi4vLi4vLi4vLi4v
UGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYlZlY3Rvci5oIgpJbmRleDogU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvV2ViSUNFQ2FuZGlkYXRlRGVzY3JpcHRvci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSUNFQ2FuZGlkYXRlRGVzY3JpcHRvci5j
cHAJKHJldmlzaW9uIDExMjU3MSkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklD
RUNhbmRpZGF0ZURlc2NyaXB0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDg5ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQot
ICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5j
LiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
LSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQotCi0jaW5jbHVk
ZSAicGxhdGZvcm0vV2ViSUNFQ2FuZGlkYXRlRGVzY3JpcHRvci5oIgotCi0jaW5jbHVkZSAiSWNl
Q2FuZGlkYXRlRGVzY3JpcHRvci5oIgotI2luY2x1ZGUgInBsYXRmb3JtL1dlYlN0cmluZy5oIgot
Ci11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLVdlYklD
RUNhbmRpZGF0ZURlc2NyaXB0b3I6OldlYklDRUNhbmRpZGF0ZURlc2NyaXB0b3IoSWNlQ2FuZGlk
YXRlRGVzY3JpcHRvciogaWNlQ2FuZGlkYXRlKQotICAgIDogbV9wcml2YXRlKGljZUNhbmRpZGF0
ZSkKLXsKLX0KLQotV2ViSUNFQ2FuZGlkYXRlRGVzY3JpcHRvcjo6V2ViSUNFQ2FuZGlkYXRlRGVz
Y3JpcHRvcihQYXNzUmVmUHRyPEljZUNhbmRpZGF0ZURlc2NyaXB0b3I+IGljZUNhbmRpZGF0ZSkK
LSAgICA6IG1fcHJpdmF0ZShpY2VDYW5kaWRhdGUpCi17Ci19Ci0KLXZvaWQgV2ViSUNFQ2FuZGlk
YXRlRGVzY3JpcHRvcjo6YXNzaWduKGNvbnN0IFdlYklDRUNhbmRpZGF0ZURlc2NyaXB0b3ImIG90
aGVyKQotewotICAgIG1fcHJpdmF0ZSA9IG90aGVyLm1fcHJpdmF0ZTsKLX0KLQotdm9pZCBXZWJJ
Q0VDYW5kaWRhdGVEZXNjcmlwdG9yOjpyZXNldCgpCi17Ci0gICAgbV9wcml2YXRlLnJlc2V0KCk7
Ci19Ci0KLXZvaWQgV2ViSUNFQ2FuZGlkYXRlRGVzY3JpcHRvcjo6aW5pdGlhbGl6ZShjb25zdCBX
ZWJTdHJpbmcmIGxhYmVsLCBjb25zdCBXZWJTdHJpbmcmIGNhbmRpZGF0ZUxpbmUpCi17Ci0gICAg
bV9wcml2YXRlID0gSWNlQ2FuZGlkYXRlRGVzY3JpcHRvcjo6Y3JlYXRlKGxhYmVsLCBjYW5kaWRh
dGVMaW5lKTsKLX0KLQotV2ViSUNFQ2FuZGlkYXRlRGVzY3JpcHRvcjo6b3BlcmF0b3IgUGFzc1Jl
ZlB0cjxXZWJDb3JlOjpJY2VDYW5kaWRhdGVEZXNjcmlwdG9yPigpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIG1fcHJpdmF0ZS5nZXQoKTsKLX0KLQotV2ViU3RyaW5nIFdlYklDRUNhbmRpZGF0ZURlc2Ny
aXB0b3I6OmxhYmVsKCkgY29uc3QKLXsKLSAgICBBU1NFUlQoIW1fcHJpdmF0ZS5pc051bGwoKSk7
Ci0gICAgcmV0dXJuIG1fcHJpdmF0ZS5nZXQoKS0+bGFiZWwoKTsKLX0KLQotV2ViU3RyaW5nIFdl
YklDRUNhbmRpZGF0ZURlc2NyaXB0b3I6OmNhbmRpZGF0ZUxpbmUoKSBjb25zdAotewotICAgIEFT
U0VSVCghbV9wcml2YXRlLmlzTnVsbCgpKTsKLSAgICByZXR1cm4gbV9wcml2YXRlLmdldCgpLT5j
YW5kaWRhdGVMaW5lKCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8g
RU5BQkxFKE1FRElBX1NUUkVBTSkKLQpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
V2ViSUNFT3B0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViSUNFT3B0aW9ucy5jcHAJKHJldmlzaW9uIDExMjU3MSkKKysrIFNvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYklDRU9wdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDczICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAq
Ci0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICog
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29n
bGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
LSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQotCi0j
aW5jbHVkZSAicGxhdGZvcm0vV2ViSUNFT3B0aW9ucy5oIgotCi0jaW5jbHVkZSAiSWNlT3B0aW9u
cy5oIgotCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0K
LVdlYklDRU9wdGlvbnM6OldlYklDRU9wdGlvbnMoY29uc3QgUGFzc1JlZlB0cjxJY2VPcHRpb25z
PiYgbWVkaWFIaW50cykKLSAgICA6IG1fcHJpdmF0ZShtZWRpYUhpbnRzKQotewotfQotCi12b2lk
IFdlYklDRU9wdGlvbnM6OmFzc2lnbihjb25zdCBXZWJJQ0VPcHRpb25zJiBvdGhlcikKLXsKLSAg
ICBtX3ByaXZhdGUgPSBvdGhlci5tX3ByaXZhdGU7Ci19Ci0KLXZvaWQgV2ViSUNFT3B0aW9uczo6
aW5pdGlhbGl6ZShDYW5kaWRhdGVUeXBlIGNhbmRpZGF0ZVR5cGUpCi17Ci0gICAgQVNTRVJUKGlz
TnVsbCgpKTsKLSAgICBtX3ByaXZhdGUgPSBJY2VPcHRpb25zOjpjcmVhdGUoc3RhdGljX2Nhc3Q8
SWNlT3B0aW9uczo6VXNlQ2FuZGlkYXRlc09wdGlvbj4oY2FuZGlkYXRlVHlwZSkpOwotfQotCi12
b2lkIFdlYklDRU9wdGlvbnM6OnJlc2V0KCkKLXsKLSAgICBtX3ByaXZhdGUucmVzZXQoKTsKLX0K
LQotV2ViSUNFT3B0aW9uczo6Q2FuZGlkYXRlVHlwZSBXZWJJQ0VPcHRpb25zOjpjYW5kaWRhdGVU
eXBlVG9Vc2UoKSBjb25zdAotewotICAgIEFTU0VSVCghaXNOdWxsKCkpOwotICAgIHJldHVybiBz
dGF0aWNfY2FzdDxDYW5kaWRhdGVUeXBlPihtX3ByaXZhdGUtPnVzZUNhbmRpZGF0ZXMoKSk7Ci19
Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVB
TSkKLQpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTWVkaWFIaW50cy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTWVkaWFIaW50cy5j
cHAJKHJldmlzaW9uIDExMjU3MSkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYk1l
ZGlhSGludHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDc5ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0
aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAot
ICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29u
ZmlnLmgiCi0KLSNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQotCi0jaW5jbHVkZSAicGxhdGZvcm0v
V2ViTWVkaWFIaW50cy5oIgotCi0jaW5jbHVkZSAiTWVkaWFIaW50cy5oIgotCi11c2luZyBuYW1l
c3BhY2UgV2ViQ29yZTsKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLVdlYk1lZGlhSGludHM6Oldl
Yk1lZGlhSGludHMoY29uc3QgUGFzc1JlZlB0cjxNZWRpYUhpbnRzPiYgbWVkaWFIaW50cykKLSAg
ICA6IG1fcHJpdmF0ZShtZWRpYUhpbnRzKQotewotfQotCi12b2lkIFdlYk1lZGlhSGludHM6OmFz
c2lnbihjb25zdCBXZWJNZWRpYUhpbnRzJiBvdGhlcikKLXsKLSAgICBtX3ByaXZhdGUgPSBvdGhl
ci5tX3ByaXZhdGU7Ci19Ci0KLXZvaWQgV2ViTWVkaWFIaW50czo6aW5pdGlhbGl6ZShib29sIGF1
ZGlvLCBib29sIHZpZGVvKQotewotICAgIEFTU0VSVChpc051bGwoKSk7Ci0gICAgbV9wcml2YXRl
ID0gTWVkaWFIaW50czo6Y3JlYXRlKGF1ZGlvLCB2aWRlbyk7Ci19Ci0KLXZvaWQgV2ViTWVkaWFI
aW50czo6cmVzZXQoKQotewotICAgIG1fcHJpdmF0ZS5yZXNldCgpOwotfQotCi1ib29sIFdlYk1l
ZGlhSGludHM6OmF1ZGlvKCkgY29uc3QKLXsKLSAgICBBU1NFUlQoIWlzTnVsbCgpKTsKLSAgICBy
ZXR1cm4gbV9wcml2YXRlLT5hdWRpbygpOwotfQotCi1ib29sIFdlYk1lZGlhSGludHM6OnZpZGVv
KCkgY29uc3QKLXsKLSAgICBBU1NFUlQoIWlzTnVsbCgpKTsKLSAgICByZXR1cm4gbV9wcml2YXRl
LT52aWRlbygpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIEVOQUJM
RShNRURJQV9TVFJFQU0pCi0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYk1l
ZGlhU3RyZWFtQ29tcG9uZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJNZWRpYVN0cmVhbUNvbXBvbmVudC5jcHAJKHJldmlzaW9uIDExMjU3MSkKKysr
IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYk1lZGlhU3RyZWFtQ29tcG9uZW50LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw4NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEy
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAq
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAq
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYg
RU5BQkxFKE1FRElBX1NUUkVBTSkKLQotI2luY2x1ZGUgInBsYXRmb3JtL1dlYk1lZGlhU3RyZWFt
Q29tcG9uZW50LmgiCi0KLSNpbmNsdWRlICJNZWRpYVN0cmVhbUNvbXBvbmVudC5oIgotI2luY2x1
ZGUgInBsYXRmb3JtL1dlYk1lZGlhU3RyZWFtU291cmNlLmgiCi0jaW5jbHVkZSAicGxhdGZvcm0v
V2ViU3RyaW5nLmgiCi0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi11c2luZyBuYW1lc3BhY2Ug
V2ViQ29yZTsKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLVdlYk1lZGlhU3RyZWFtQ29tcG9uZW50
OjpXZWJNZWRpYVN0cmVhbUNvbXBvbmVudChXZWJDb3JlOjpNZWRpYVN0cmVhbUNvbXBvbmVudCog
bWVkaWFTdHJlYW1Db21wb25lbnQpCi0gICAgOiBtX3ByaXZhdGUobWVkaWFTdHJlYW1Db21wb25l
bnQpCi17Ci19Ci0KLVdlYk1lZGlhU3RyZWFtQ29tcG9uZW50JiBXZWJNZWRpYVN0cmVhbUNvbXBv
bmVudDo6b3BlcmF0b3I9KFdlYkNvcmU6Ok1lZGlhU3RyZWFtQ29tcG9uZW50KiBtZWRpYVN0cmVh
bUNvbXBvbmVudCkKLXsKLSAgICBtX3ByaXZhdGUgPSBtZWRpYVN0cmVhbUNvbXBvbmVudDsKLSAg
ICByZXR1cm4gKnRoaXM7Ci19Ci0KLXZvaWQgV2ViTWVkaWFTdHJlYW1Db21wb25lbnQ6OnJlc2V0
KCkKLXsKLSAgICBtX3ByaXZhdGUucmVzZXQoKTsKLX0KLQotV2ViTWVkaWFTdHJlYW1Db21wb25l
bnQ6Om9wZXJhdG9yIFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1Db21wb25lbnQ+KCkgY29uc3QKLXsK
LSAgICByZXR1cm4gbV9wcml2YXRlLmdldCgpOwotfQotCi1XZWJNZWRpYVN0cmVhbUNvbXBvbmVu
dDo6b3BlcmF0b3IgTWVkaWFTdHJlYW1Db21wb25lbnQqKCkgY29uc3QKLXsKLSAgICByZXR1cm4g
bV9wcml2YXRlLmdldCgpOwotfQotCi1ib29sIFdlYk1lZGlhU3RyZWFtQ29tcG9uZW50Ojppc0Vu
YWJsZWQoKSBjb25zdAotewotICAgIEFTU0VSVCghbV9wcml2YXRlLmlzTnVsbCgpKTsKLSAgICBy
ZXR1cm4gbV9wcml2YXRlLmdldCgpLT5lbmFibGVkKCk7Ci19Ci0KLVdlYk1lZGlhU3RyZWFtU291
cmNlIFdlYk1lZGlhU3RyZWFtQ29tcG9uZW50Ojpzb3VyY2UoKSBjb25zdAotewotICAgIEFTU0VS
VCghbV9wcml2YXRlLmlzTnVsbCgpKTsKLSAgICByZXR1cm4gV2ViTWVkaWFTdHJlYW1Tb3VyY2Uo
bV9wcml2YXRlLmdldCgpLT5zb3VyY2UoKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAot
Ci0jZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkKLQpJbmRleDogU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvV2ViTWVkaWFTdHJlYW1EZXNjcmlwdG9yLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJNZWRpYVN0cmVhbURlc2NyaXB0b3IuY3BwCShy
ZXZpc2lvbiAxMTI1NzEpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJNZWRpYVN0
cmVhbURlc2NyaXB0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDE1MyArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRp
c3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
LSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKLQotI2luY2x1ZGUgInBs
YXRmb3JtL1dlYk1lZGlhU3RyZWFtRGVzY3JpcHRvci5oIgotCi0jaW5jbHVkZSAiTWVkaWFTdHJl
YW1Db21wb25lbnQuaCIKLSNpbmNsdWRlICJNZWRpYVN0cmVhbURlc2NyaXB0b3IuaCIKLSNpbmNs
dWRlICJNZWRpYVN0cmVhbVNvdXJjZS5oIgotI2luY2x1ZGUgInBsYXRmb3JtL1dlYk1lZGlhU3Ry
ZWFtQ29tcG9uZW50LmgiCi0jaW5jbHVkZSAicGxhdGZvcm0vV2ViTWVkaWFTdHJlYW1Tb3VyY2Uu
aCIKLSNpbmNsdWRlICJwbGF0Zm9ybS9XZWJTdHJpbmcuaCIKLSNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQot
V2ViTWVkaWFTdHJlYW1EZXNjcmlwdG9yOjpXZWJNZWRpYVN0cmVhbURlc2NyaXB0b3IoY29uc3Qg
UGFzc1JlZlB0cjxXZWJDb3JlOjpNZWRpYVN0cmVhbURlc2NyaXB0b3I+JiBtZWRpYVN0cmVhbURl
c2NyaXB0b3IpCi0gICAgOiBtX3ByaXZhdGUobWVkaWFTdHJlYW1EZXNjcmlwdG9yKQotewotfQot
Ci1XZWJNZWRpYVN0cmVhbURlc2NyaXB0b3I6OldlYk1lZGlhU3RyZWFtRGVzY3JpcHRvcihXZWJD
b3JlOjpNZWRpYVN0cmVhbURlc2NyaXB0b3IqIG1lZGlhU3RyZWFtRGVzY3JpcHRvcikKLSAgICA6
IG1fcHJpdmF0ZShtZWRpYVN0cmVhbURlc2NyaXB0b3IpCi17Ci19Ci0KLXZvaWQgV2ViTWVkaWFT
dHJlYW1EZXNjcmlwdG9yOjpyZXNldCgpCi17Ci0gICAgbV9wcml2YXRlLnJlc2V0KCk7Ci19Ci0K
LVdlYlN0cmluZyBXZWJNZWRpYVN0cmVhbURlc2NyaXB0b3I6OmxhYmVsKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gbV9wcml2YXRlLT5sYWJlbCgpOwotfQotCi0vLyBGSVhNRTogQ2xlYW51cCB3aGVu
IHRoZSBjaHJvbWl1bSBjb2RlIGhhcyBzd2l0Y2hlZCB0byB0aGUgc3BsaXQgc291cmNlcyBpbXBs
ZW1lbnRhdGlvbi4KLXZvaWQgV2ViTWVkaWFTdHJlYW1EZXNjcmlwdG9yOjpzb3VyY2VzKFdlYlZl
Y3RvcjxXZWJNZWRpYVN0cmVhbVNvdXJjZT4mIHdlYlNvdXJjZXMpIGNvbnN0Ci17Ci0gICAgc2l6
ZV90IG51bWJlck9mQXVkaW9Tb3VyY2VzID0gbV9wcml2YXRlLT5udW1iZXJPZkF1ZGlvQ29tcG9u
ZW50cygpOwotICAgIHNpemVfdCBudW1iZXJPZlZpZGVvU291cmNlcyA9IG1fcHJpdmF0ZS0+bnVt
YmVyT2ZWaWRlb0NvbXBvbmVudHMoKTsKLSAgICBXZWJWZWN0b3I8V2ViTWVkaWFTdHJlYW1Tb3Vy
Y2U+IHJlc3VsdChudW1iZXJPZkF1ZGlvU291cmNlcyArIG51bWJlck9mVmlkZW9Tb3VyY2VzKTsK
LSAgICBzaXplX3QgaSA9IDA7Ci0gICAgZm9yIChzaXplX3QgaiA9IDA7IGogPCBudW1iZXJPZkF1
ZGlvU291cmNlczsgKytpLCArK2opCi0gICAgICAgIHJlc3VsdFtpXSA9IG1fcHJpdmF0ZS0+YXVk
aW9Db21wb25lbnQoaiktPnNvdXJjZSgpOwotICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwgbnVt
YmVyT2ZWaWRlb1NvdXJjZXM7ICsraSwgKytqKQotICAgICAgICByZXN1bHRbaV0gPSBtX3ByaXZh
dGUtPnZpZGVvQ29tcG9uZW50KGopLT5zb3VyY2UoKTsKLSAgICB3ZWJTb3VyY2VzLnN3YXAocmVz
dWx0KTsKLX0KLQotdm9pZCBXZWJNZWRpYVN0cmVhbURlc2NyaXB0b3I6OmF1ZGlvU291cmNlcyhX
ZWJWZWN0b3I8V2ViTWVkaWFTdHJlYW1Db21wb25lbnQ+JiB3ZWJTb3VyY2VzKSBjb25zdAotewot
ICAgIHNpemVfdCBudW1iZXJPZlNvdXJjZXMgPSBtX3ByaXZhdGUtPm51bWJlck9mQXVkaW9Db21w
b25lbnRzKCk7Ci0gICAgV2ViVmVjdG9yPFdlYk1lZGlhU3RyZWFtQ29tcG9uZW50PiByZXN1bHQo
bnVtYmVyT2ZTb3VyY2VzKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bWJlck9mU291
cmNlczsgKytpKQotICAgICAgICByZXN1bHRbaV0gPSBtX3ByaXZhdGUtPmF1ZGlvQ29tcG9uZW50
KGkpOwotICAgIHdlYlNvdXJjZXMuc3dhcChyZXN1bHQpOwotfQotCi12b2lkIFdlYk1lZGlhU3Ry
ZWFtRGVzY3JpcHRvcjo6dmlkZW9Tb3VyY2VzKFdlYlZlY3RvcjxXZWJNZWRpYVN0cmVhbUNvbXBv
bmVudD4mIHdlYlNvdXJjZXMpIGNvbnN0Ci17Ci0gICAgc2l6ZV90IG51bWJlck9mU291cmNlcyA9
IG1fcHJpdmF0ZS0+bnVtYmVyT2ZWaWRlb0NvbXBvbmVudHMoKTsKLSAgICBXZWJWZWN0b3I8V2Vi
TWVkaWFTdHJlYW1Db21wb25lbnQ+IHJlc3VsdChudW1iZXJPZlNvdXJjZXMpOwotICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbnVtYmVyT2ZTb3VyY2VzOyArK2kpCi0gICAgICAgIHJlc3VsdFtp
XSA9IG1fcHJpdmF0ZS0+dmlkZW9Db21wb25lbnQoaSk7Ci0gICAgd2ViU291cmNlcy5zd2FwKHJl
c3VsdCk7Ci19Ci0KLVdlYk1lZGlhU3RyZWFtRGVzY3JpcHRvciYgV2ViTWVkaWFTdHJlYW1EZXNj
cmlwdG9yOjpvcGVyYXRvcj0oY29uc3QgUGFzc1JlZlB0cjxXZWJDb3JlOjpNZWRpYVN0cmVhbURl
c2NyaXB0b3I+JiBtZWRpYVN0cmVhbURlc2NyaXB0b3IpCi17Ci0gICAgbV9wcml2YXRlID0gbWVk
aWFTdHJlYW1EZXNjcmlwdG9yOwotICAgIHJldHVybiAqdGhpczsKLX0KLQotV2ViTWVkaWFTdHJl
YW1EZXNjcmlwdG9yOjpvcGVyYXRvciBQYXNzUmVmUHRyPFdlYkNvcmU6Ok1lZGlhU3RyZWFtRGVz
Y3JpcHRvcj4oKSBjb25zdAotewotICAgIHJldHVybiBtX3ByaXZhdGUuZ2V0KCk7Ci19Ci0KLVdl
Yk1lZGlhU3RyZWFtRGVzY3JpcHRvcjo6b3BlcmF0b3IgV2ViQ29yZTo6TWVkaWFTdHJlYW1EZXNj
cmlwdG9yKigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fcHJpdmF0ZS5nZXQoKTsKLX0KLQotLy8g
RklYTUU6IENsZWFudXAgd2hlbiB0aGUgY2hyb21pdW0gY29kZSBoYXMgc3dpdGNoZWQgdG8gdGhl
IHNwbGl0IHNvdXJjZXMgaW1wbGVtZW50YXRpb24uCi12b2lkIFdlYk1lZGlhU3RyZWFtRGVzY3Jp
cHRvcjo6aW5pdGlhbGl6ZShjb25zdCBXZWJTdHJpbmcmIGxhYmVsLCBjb25zdCBXZWJWZWN0b3I8
V2ViTWVkaWFTdHJlYW1Tb3VyY2U+JiBzb3VyY2VzKQotewotICAgIE1lZGlhU3RyZWFtU291cmNl
VmVjdG9yIGF1ZGlvLCB2aWRlbzsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNvdXJjZXMu
c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgTWVkaWFTdHJlYW1Tb3VyY2UqIGN1cnIgPSBzb3VyY2Vz
W2ldOwotICAgICAgICBpZiAoY3Vyci0+dHlwZSgpID09IE1lZGlhU3RyZWFtU291cmNlOjpUeXBl
QXVkaW8pCi0gICAgICAgICAgICBhdWRpby5hcHBlbmQoY3Vycik7Ci0gICAgICAgIGVsc2UgaWYg
KGN1cnItPnR5cGUoKSA9PSBNZWRpYVN0cmVhbVNvdXJjZTo6VHlwZVZpZGVvKQotICAgICAgICAg
ICAgdmlkZW8uYXBwZW5kKGN1cnIpOwotICAgIH0KLSAgICBtX3ByaXZhdGUgPSBNZWRpYVN0cmVh
bURlc2NyaXB0b3I6OmNyZWF0ZShsYWJlbCwgYXVkaW8sIHZpZGVvKTsKLX0KLQotdm9pZCBXZWJN
ZWRpYVN0cmVhbURlc2NyaXB0b3I6OmluaXRpYWxpemUoY29uc3QgV2ViU3RyaW5nJiBsYWJlbCwg
Y29uc3QgV2ViVmVjdG9yPFdlYk1lZGlhU3RyZWFtU291cmNlPiYgYXVkaW9Tb3VyY2VzLCBjb25z
dCBXZWJWZWN0b3I8V2ViTWVkaWFTdHJlYW1Tb3VyY2U+JiB2aWRlb1NvdXJjZXMpCi17Ci0gICAg
TWVkaWFTdHJlYW1Tb3VyY2VWZWN0b3IgYXVkaW8sIHZpZGVvOwotICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgYXVkaW9Tb3VyY2VzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIE1lZGlhU3RyZWFt
U291cmNlKiBjdXJyID0gYXVkaW9Tb3VyY2VzW2ldOwotICAgICAgICBhdWRpby5hcHBlbmQoY3Vy
cik7Ci0gICAgfQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdmlkZW9Tb3VyY2VzLnNpemUo
KTsgKytpKSB7Ci0gICAgICAgIE1lZGlhU3RyZWFtU291cmNlKiBjdXJyID0gdmlkZW9Tb3VyY2Vz
W2ldOwotICAgICAgICB2aWRlby5hcHBlbmQoY3Vycik7Ci0gICAgfQotICAgIG1fcHJpdmF0ZSA9
IE1lZGlhU3RyZWFtRGVzY3JpcHRvcjo6Y3JlYXRlKGxhYmVsLCBhdWRpbywgdmlkZW8pOwotfQot
Ci12b2lkIFdlYk1lZGlhU3RyZWFtRGVzY3JpcHRvcjo6YXNzaWduKGNvbnN0IFdlYk1lZGlhU3Ry
ZWFtRGVzY3JpcHRvciYgb3RoZXIpCi17Ci0gICAgbV9wcml2YXRlID0gb3RoZXIubV9wcml2YXRl
OwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIEVOQUJMRShNRURJQV9T
VFJFQU0pCi0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYk1lZGlhU3RyZWFt
U291cmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJN
ZWRpYVN0cmVhbVNvdXJjZS5jcHAJKHJldmlzaW9uIDExMjU3MSkKKysrIFNvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYk1lZGlhU3RyZWFtU291cmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSwxMDIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICog
bWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1l
IG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICog
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAq
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShNRURJQV9TVFJF
QU0pCi0KLSNpbmNsdWRlICJwbGF0Zm9ybS9XZWJNZWRpYVN0cmVhbVNvdXJjZS5oIgotCi0jaW5j
bHVkZSAiTWVkaWFTdHJlYW1Tb3VyY2UuaCIKLSNpbmNsdWRlICJwbGF0Zm9ybS9XZWJTdHJpbmcu
aCIKLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwot
Ci1uYW1lc3BhY2UgV2ViS2l0IHsKLQotV2ViTWVkaWFTdHJlYW1Tb3VyY2U6OldlYk1lZGlhU3Ry
ZWFtU291cmNlKGNvbnN0IFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1Tb3VyY2U+JiBtZWRpYVN0cmVh
bVNvdXJjZSkKLSAgICA6IG1fcHJpdmF0ZShtZWRpYVN0cmVhbVNvdXJjZSkKLXsKLX0KLQotV2Vi
TWVkaWFTdHJlYW1Tb3VyY2UmIFdlYk1lZGlhU3RyZWFtU291cmNlOjpvcGVyYXRvcj0oV2ViQ29y
ZTo6TWVkaWFTdHJlYW1Tb3VyY2UqIG1lZGlhU3RyZWFtU291cmNlKQotewotICAgIG1fcHJpdmF0
ZSA9IG1lZGlhU3RyZWFtU291cmNlOwotICAgIHJldHVybiAqdGhpczsKLX0KLQotdm9pZCBXZWJN
ZWRpYVN0cmVhbVNvdXJjZTo6YXNzaWduKGNvbnN0IFdlYk1lZGlhU3RyZWFtU291cmNlJiBvdGhl
cikKLXsKLSAgICBtX3ByaXZhdGUgPSBvdGhlci5tX3ByaXZhdGU7Ci19Ci0KLXZvaWQgV2ViTWVk
aWFTdHJlYW1Tb3VyY2U6OnJlc2V0KCkKLXsKLSAgICBtX3ByaXZhdGUucmVzZXQoKTsKLX0KLQot
V2ViTWVkaWFTdHJlYW1Tb3VyY2U6Om9wZXJhdG9yIFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1Tb3Vy
Y2U+KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9wcml2YXRlLmdldCgpOwotfQotCi1XZWJNZWRp
YVN0cmVhbVNvdXJjZTo6b3BlcmF0b3IgTWVkaWFTdHJlYW1Tb3VyY2UqKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gbV9wcml2YXRlLmdldCgpOwotfQotCi12b2lkIFdlYk1lZGlhU3RyZWFtU291cmNl
Ojppbml0aWFsaXplKGNvbnN0IFdlYlN0cmluZyYgaWQsIFR5cGUgdHlwZSwgY29uc3QgV2ViU3Ry
aW5nJiBuYW1lKQotewotICAgIG1fcHJpdmF0ZSA9IE1lZGlhU3RyZWFtU291cmNlOjpjcmVhdGUo
aWQsIHN0YXRpY19jYXN0PE1lZGlhU3RyZWFtU291cmNlOjpUeXBlPih0eXBlKSwgbmFtZSk7Ci19
Ci0KLVdlYlN0cmluZyBXZWJNZWRpYVN0cmVhbVNvdXJjZTo6aWQoKSBjb25zdAotewotICAgIEFT
U0VSVCghbV9wcml2YXRlLmlzTnVsbCgpKTsKLSAgICByZXR1cm4gbV9wcml2YXRlLmdldCgpLT5p
ZCgpOwotfQotCi1XZWJNZWRpYVN0cmVhbVNvdXJjZTo6VHlwZSBXZWJNZWRpYVN0cmVhbVNvdXJj
ZTo6dHlwZSgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKCFtX3ByaXZhdGUuaXNOdWxsKCkpOwotICAg
IHJldHVybiBzdGF0aWNfY2FzdDxUeXBlPihtX3ByaXZhdGUuZ2V0KCktPnR5cGUoKSk7Ci19Ci0K
LVdlYlN0cmluZyBXZWJNZWRpYVN0cmVhbVNvdXJjZTo6bmFtZSgpIGNvbnN0Ci17Ci0gICAgQVNT
RVJUKCFtX3ByaXZhdGUuaXNOdWxsKCkpOwotICAgIHJldHVybiBtX3ByaXZhdGUuZ2V0KCktPm5h
bWUoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBFTkFCTEUoTUVE
SUFfU1RSRUFNKQotCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJNZWRpYVN0
cmVhbVNvdXJjZXNSZXF1ZXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJNZWRpYVN0cmVhbVNvdXJjZXNSZXF1ZXN0LmNwcAkocmV2aXNpb24gMTEyNTcx
KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTWVkaWFTdHJlYW1Tb3VyY2VzUmVx
dWVzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsODggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24u
Ci0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMg
b2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcu
aCIKLQotI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCi0KLSNpbmNsdWRlICJwbGF0Zm9ybS9XZWJN
ZWRpYVN0cmVhbVNvdXJjZXNSZXF1ZXN0LmgiCi0KLSNpbmNsdWRlICJNZWRpYVN0cmVhbUNlbnRl
ci5oIgotI2luY2x1ZGUgIk1lZGlhU3RyZWFtU291cmNlLmgiCi0jaW5jbHVkZSAicGxhdGZvcm0v
V2ViTWVkaWFTdHJlYW1Tb3VyY2UuaCIKLSNpbmNsdWRlICJwbGF0Zm9ybS9XZWJWZWN0b3IuaCIK
LSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1u
YW1lc3BhY2UgV2ViS2l0IHsKLQotV2ViTWVkaWFTdHJlYW1Tb3VyY2VzUmVxdWVzdDo6V2ViTWVk
aWFTdHJlYW1Tb3VyY2VzUmVxdWVzdChjb25zdCBQYXNzUmVmUHRyPFdlYkNvcmU6Ok1lZGlhU3Ry
ZWFtU291cmNlc1F1ZXJ5Q2xpZW50PiYgcXVlcnlDbGllbnQpCi0gICAgOiBtX3ByaXZhdGUocXVl
cnlDbGllbnQpCi17Ci19Ci0KLXZvaWQgV2ViTWVkaWFTdHJlYW1Tb3VyY2VzUmVxdWVzdDo6cmVz
ZXQoKQotewotICAgIG1fcHJpdmF0ZS5yZXNldCgpOwotfQotCi1ib29sIFdlYk1lZGlhU3RyZWFt
U291cmNlc1JlcXVlc3Q6OmF1ZGlvKCkgY29uc3QKLXsKLSAgICBBU1NFUlQoIWlzTnVsbCgpKTsK
LSAgICByZXR1cm4gbV9wcml2YXRlLT5hdWRpbygpOwotfQotCi1ib29sIFdlYk1lZGlhU3RyZWFt
U291cmNlc1JlcXVlc3Q6OnZpZGVvKCkgY29uc3QKLXsKLSAgICBBU1NFUlQoIWlzTnVsbCgpKTsK
LSAgICByZXR1cm4gbV9wcml2YXRlLT52aWRlbygpOwotfQotCi12b2lkIFdlYk1lZGlhU3RyZWFt
U291cmNlc1JlcXVlc3Q6OmRpZENvbXBsZXRlUXVlcnkoY29uc3QgV2ViVmVjdG9yPFdlYk1lZGlh
U3RyZWFtU291cmNlPiYgYXVkaW9Tb3VyY2VzLCBjb25zdCBXZWJWZWN0b3I8V2ViTWVkaWFTdHJl
YW1Tb3VyY2U+JiB2aWRlb1NvdXJjZXMpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKCFpc051bGwoKSk7
Ci0gICAgTWVkaWFTdHJlYW1Tb3VyY2VWZWN0b3IgYXVkaW87Ci0gICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBhdWRpb1NvdXJjZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgTWVkaWFTdHJlYW1T
b3VyY2UqIGN1cnIgPSBhdWRpb1NvdXJjZXNbaV07Ci0gICAgICAgIGF1ZGlvLmFwcGVuZChjdXJy
KTsKLSAgICB9Ci0gICAgTWVkaWFTdHJlYW1Tb3VyY2VWZWN0b3IgdmlkZW87Ci0gICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCB2aWRlb1NvdXJjZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgTWVk
aWFTdHJlYW1Tb3VyY2UqIGN1cnIgPSB2aWRlb1NvdXJjZXNbaV07Ci0gICAgICAgIHZpZGVvLmFw
cGVuZChjdXJyKTsKLSAgICB9Ci0gICAgbV9wcml2YXRlLT5kaWRDb21wbGV0ZVF1ZXJ5KGF1ZGlv
LCB2aWRlbyk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gRU5BQkxF
KE1FRElBX1NUUkVBTSkKLQo=
</data>
<flag name="review"
          id="139013"
          type_id="1"
          status="+"
          setter="jamesr"
    />
          </attachment>
      

    </bug>

</bugzilla>