<?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>157380</bug_id>
          
          <creation_ts>2016-05-05 12:08:03 -0700</creation_ts>
          <short_desc>[Linux] Remove seccomp filters support</short_desc>
          <delta_ts>2016-05-10 11:09:18 -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>WebKit2</component>
          <version>Other</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Linux</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="Michael Catanzaro">mcatanzaro</reporter>
          <assigned_to name="Michael Catanzaro">mcatanzaro</assigned_to>
          <cc>bugs-noreply</cc>
    
    <cc>clopez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>jh718.park</cc>
    
    <cc>mcatanzaro</cc>
    
    <cc>ossy</cc>
    
    <cc>tmpsantos</cc>
    
    <cc>tonikitoo</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1190408</commentid>
    <comment_count>0</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2016-05-05 12:08:03 -0700</bug_when>
    <thetext>Remove seccomp filters support. Seccomp filters are an experimental feature that is not currently used in any port and just didn&apos;t pan out. This code is not currently secure, nobody is working on making it secure, and it requires a complete architectural rewrite as whitelisting individual files and syscalls is not reasonable or scalable. There are many actually secure Linux sandboxing tools around nowadays, e.g Bubblewrap, which should be investigated instead.

This is not to say that Linux sandboxing is unimportant, nor that seccomp filters are not an important component of a Linux sandbox. It is to say that seccomp filters are not suitable as the *primary* security mechanism in an effective sandbox. It was never intended for that role, anyway.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1190409</commentid>
    <comment_count>1</comment_count>
      <attachid>278178</attachid>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2016-05-05 12:14:02 -0700</bug_when>
    <thetext>Created attachment 278178
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1191502</commentid>
    <comment_count>2</comment_count>
      <attachid>278178</attachid>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2016-05-10 07:32:23 -0700</bug_when>
    <thetext>Comment on attachment 278178
Patch

Let&apos;s land it, cq+</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1191510</commentid>
    <comment_count>3</comment_count>
      <attachid>278178</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-05-10 07:55:12 -0700</bug_when>
    <thetext>Comment on attachment 278178
Patch

Clearing flags on attachment: 278178

Committed r200621: &lt;http://trac.webkit.org/changeset/200621&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1191511</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-05-10 07:55:18 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>278178</attachid>
            <date>2016-05-05 12:14:02 -0700</date>
            <delta_ts>2016-05-10 07:55:12 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-157380-20160505141442.patch</filename>
            <type>text/plain</type>
            <size>125825</size>
            <attacher name="Michael Catanzaro">mcatanzaro</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjAwNDY2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggYTZkODg1ZWNiOTgzZjc3
YzA3NDU0ZDM3YjQ5M2FmMmMwZDY2MThkZi4uZTdiOTBhY2Q5NzgzMTY1NDQxNDMyYTU2MDAzMTNm
MjNmMDE0NzBiZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ4IEBACisyMDE2LTA1LTA1ICBNaWNo
YWVsIENhdGFuemFybyAgPG1jYXRhbnphcm9AaWdhbGlhLmNvbT4KKworICAgICAgICBbTGludXhd
IFJlbW92ZSBzZWNjb21wIGZpbHRlcnMgc3VwcG9ydAorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU3MzgwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0Ny
ZWF0aW9uUGFyYW1ldGVycy5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzQ3Jl
YXRpb25QYXJhbWV0ZXJzOjplbmNvZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpOZXR3
b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVyczo6ZGVjb2RlKTogRGVsZXRlZC4KKyAgICAgICAg
KiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5oOgorICAg
ICAgICAqIFBsYXRmb3JtRWZsLmNtYWtlOgorICAgICAgICAqIFBsYXRmb3JtR1RLLmNtYWtlOgor
ICAgICAgICAqIFNoYXJlZC9XZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6V2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVyczo6ZW5jb2RlKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVyczo6ZGVjb2Rl
KTogRGVsZXRlZC4KKyAgICAgICAgKiBTaGFyZWQvV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVy
cy5oOgorICAgICAgICAqIFNoYXJlZC9saW51eC9TZWNjb21wRmlsdGVycy9PcGVuU3lzY2FsbC5j
cHA6IFJlbW92ZWQuCisgICAgICAgICogU2hhcmVkL2xpbnV4L1NlY2NvbXBGaWx0ZXJzL09wZW5T
eXNjYWxsLmg6IFJlbW92ZWQuCisgICAgICAgICogU2hhcmVkL2xpbnV4L1NlY2NvbXBGaWx0ZXJz
L1NlY2NvbXBCcm9rZXIuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIFNoYXJlZC9saW51eC9TZWNj
b21wRmlsdGVycy9TZWNjb21wQnJva2VyLmg6IFJlbW92ZWQuCisgICAgICAgICogU2hhcmVkL2xp
bnV4L1NlY2NvbXBGaWx0ZXJzL1NlY2NvbXBGaWx0ZXJzLmNwcDogUmVtb3ZlZC4KKyAgICAgICAg
KiBTaGFyZWQvbGludXgvU2VjY29tcEZpbHRlcnMvU2VjY29tcEZpbHRlcnMuaDogUmVtb3ZlZC4K
KyAgICAgICAgKiBTaGFyZWQvbGludXgvU2VjY29tcEZpbHRlcnMvU2lnYWN0aW9uU3lzY2FsbC5j
cHA6IFJlbW92ZWQuCisgICAgICAgICogU2hhcmVkL2xpbnV4L1NlY2NvbXBGaWx0ZXJzL1NpZ2Fj
dGlvblN5c2NhbGwuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBTaGFyZWQvbGludXgvU2VjY29tcEZp
bHRlcnMvU2lncHJvY21hc2tTeXNjYWxsLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBTaGFyZWQv
bGludXgvU2VjY29tcEZpbHRlcnMvU2lncHJvY21hc2tTeXNjYWxsLmg6IFJlbW92ZWQuCisgICAg
ICAgICogU2hhcmVkL2xpbnV4L1NlY2NvbXBGaWx0ZXJzL1N5c2NhbGwuY3BwOiBSZW1vdmVkLgor
ICAgICAgICAqIFNoYXJlZC9saW51eC9TZWNjb21wRmlsdGVycy9TeXNjYWxsLmg6IFJlbW92ZWQu
CisgICAgICAgICogU2hhcmVkL2xpbnV4L1NlY2NvbXBGaWx0ZXJzL1N5c2NhbGxQb2xpY3kuY3Bw
OiBSZW1vdmVkLgorICAgICAgICAqIFNoYXJlZC9saW51eC9TZWNjb21wRmlsdGVycy9TeXNjYWxs
UG9saWN5Lmg6IFJlbW92ZWQuCisgICAgICAgICogU2hhcmVkL2xpbnV4L1NlY2NvbXBGaWx0ZXJz
L1hER0Jhc2VEaXJlY3RvcnkuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBTaGFyZWQvbGludXgvU2Vj
Y29tcEZpbHRlcnMvWERHQmFzZURpcmVjdG9yeUdMaWIuY3BwOiBSZW1vdmVkLgorICAgICAgICAq
IFVJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nl
c3NQb29sOjplbnN1cmVOZXR3b3JrUHJvY2Vzcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6
OldlYlByb2Nlc3NQb29sOjpjcmVhdGVOZXdXZWJQcm9jZXNzKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmNvb2tpZVN0b3JhZ2VEaXJlY3RvcnkpOiBEZWxldGVk
LgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5oOgorICAgICAgICAqIFdlYlBy
b2Nlc3MvZWZsL1NlY2NvbXBGaWx0ZXJzV2ViUHJvY2Vzc0VmbC5jcHA6IFJlbW92ZWQuCisgICAg
ICAgICogV2ViUHJvY2Vzcy9lZmwvU2VjY29tcEZpbHRlcnNXZWJQcm9jZXNzRWZsLmg6IFJlbW92
ZWQuCisgICAgICAgICogV2ViUHJvY2Vzcy9ndGsvU2VjY29tcEZpbHRlcnNXZWJQcm9jZXNzR3Rr
LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL2d0ay9TZWNjb21wRmlsdGVyc1dl
YlByb2Nlc3NHdGsuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL3NvdXAvV2ViUHJv
Y2Vzc1NvdXAuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzOjpwbGF0Zm9ybUluaXRp
YWxpemVXZWJQcm9jZXNzKTogRGVsZXRlZC4KKwogMjAxNi0wNS0wMiAgU2FtIFdlaW5pZyAgPHNh
bUB3ZWJraXQub3JnPgogCiAgICAgICAgIE9uIHBsYXRmb3JtcyB0aGF0IHN1cHBvcnQgaXQsIHVz
ZSBhIFNlY1RydXN0UmVmIGFzIHRoZSBiYXNpcyBvZiBDZXJ0aWZpY2F0ZUluZm8gaW5zdGVhZCBv
ZiBhIGNoYWluIG9mIFNlY0NlcnRpZmljYXRlUmVmcy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcCBi
L1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJh
bWV0ZXJzLmNwcAppbmRleCA4YWQ1N2M0NDQyY2JjNWQyNzQzZDY5MGE5NmU5YzhjZTRlZTQzODhm
Li5iNDhmZDAwMmFjZGQxM2RjZDVmNDFhY2YyY2UxMjFhNzI4OTQ2Yjc0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1l
dGVycy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nl
c3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwCkBAIC01Myw5ICs1Myw2IEBAIHZvaWQgTmV0d29ya1By
b2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM6OmVuY29kZShJUEM6OkFyZ3VtZW50RW5jb2RlciYgZW5j
b2RlcikgY29uCiAgICAgZW5jb2RlciA8PCBzaG91bGRFbmFibGVOZXR3b3JrQ2FjaGVTcGVjdWxh
dGl2ZVJldmFsaWRhdGlvbjsKICNlbmRpZgogI2VuZGlmCi0jaWYgRU5BQkxFKFNFQ0NPTVBfRklM
VEVSUykKLSAgICBlbmNvZGVyIDw8IGNvb2tpZVN0b3JhZ2VEaXJlY3Rvcnk7Ci0jZW5kaWYKICNp
ZiBQTEFURk9STShNQUMpICYmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTAx
MTAwCiAgICAgZW5jb2RlciA8PCB1aVByb2Nlc3NDb29raWVTdG9yYWdlSWRlbnRpZmllcjsKICNl
bmRpZgpAQCAtMTExLDEwICsxMDgsNiBAQCBib29sIE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJh
bWV0ZXJzOjpkZWNvZGUoSVBDOjpBcmd1bWVudERlY29kZXImIGRlY29kZXIsIE5ldAogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAjZW5kaWYKICNlbmRpZgotI2lmIEVOQUJMRShTRUNDT01QX0ZJTFRF
UlMpCi0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuY29va2llU3RvcmFnZURpcmVjdG9y
eSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSNlbmRpZgogI2lmIFBMQVRGT1JNKE1BQykgJiYg
X19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDExMDAKICAgICBpZiAoIWRlY29k
ZXIuZGVjb2RlKHJlc3VsdC51aVByb2Nlc3NDb29raWVTdG9yYWdlSWRlbnRpZmllcikpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9j
ZXNzL05ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmggYi9Tb3VyY2UvV2ViS2l0Mi9O
ZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5oCmluZGV4IDU4
ZTNiMTg4YjE1MzkwODRjMzk5ODc5NGQ0Zjg1NjFhODAwY2ZlNjcuLjRhNThlNGE0ZDY2ZTE0ZWU4
ODk3ZGQwYzgyNzdhNjMxNjRhMzA2MDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdv
cmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmgKKysrIGIvU291cmNl
L1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMu
aApAQCAtNjIsOSArNjIsNiBAQCBzdHJ1Y3QgTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRl
cnMgewogICAgIGJvb2wgc2hvdWxkRW5hYmxlTmV0d29ya0NhY2hlU3BlY3VsYXRpdmVSZXZhbGlk
YXRpb247CiAjZW5kaWYKICNlbmRpZgotI2lmIEVOQUJMRShTRUNDT01QX0ZJTFRFUlMpCi0gICAg
U3RyaW5nIGNvb2tpZVN0b3JhZ2VEaXJlY3Rvcnk7Ci0jZW5kaWYKICNpZiBQTEFURk9STShNQUMp
ICYmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTAxMTAwCiAgICAgVmVjdG9y
PHVpbnQ4X3Q+IHVpUHJvY2Vzc0Nvb2tpZVN0b3JhZ2VJZGVudGlmaWVyOwogI2VuZGlmCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZSBiL1NvdXJjZS9XZWJLaXQy
L1BsYXRmb3JtRWZsLmNtYWtlCmluZGV4IDBkNmE5OWYwY2Y1YzRlMDBhMDAxNWQyN2U3NTA5OWUx
YzAxNzNkYTcuLjI0MjA4MWM5MzYwZTYwMTgwODliYWVlOGFjODRlZDA2MTM5ZmI0ZWYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1BsYXRmb3JtRWZsLmNtYWtlCkBAIC01MCwxNSArNTAsNiBAQCBsaXN0KEFQUEVORCBXZWJL
aXQyX1NPVVJDRVMKIAogICAgIFNoYXJlZC9saW51eC9XZWJNZW1vcnlTYW1wbGVyTGludXguY3Bw
CiAKLSAgICBTaGFyZWQvbGludXgvU2VjY29tcEZpbHRlcnMvT3BlblN5c2NhbGwuY3BwCi0gICAg
U2hhcmVkL2xpbnV4L1NlY2NvbXBGaWx0ZXJzL1NlY2NvbXBCcm9rZXIuY3BwCi0gICAgU2hhcmVk
L2xpbnV4L1NlY2NvbXBGaWx0ZXJzL1NlY2NvbXBGaWx0ZXJzLmNwcAotICAgIFNoYXJlZC9saW51
eC9TZWNjb21wRmlsdGVycy9TaWdhY3Rpb25TeXNjYWxsLmNwcAotICAgIFNoYXJlZC9saW51eC9T
ZWNjb21wRmlsdGVycy9TaWdwcm9jbWFza1N5c2NhbGwuY3BwCi0gICAgU2hhcmVkL2xpbnV4L1Nl
Y2NvbXBGaWx0ZXJzL1N5c2NhbGwuY3BwCi0gICAgU2hhcmVkL2xpbnV4L1NlY2NvbXBGaWx0ZXJz
L1N5c2NhbGxQb2xpY3kuY3BwCi0gICAgU2hhcmVkL2xpbnV4L1NlY2NvbXBGaWx0ZXJzL1hER0Jh
c2VEaXJlY3RvcnlHTGliLmNwcAotCiAgICAgU2hhcmVkL3NvdXAvV2ViQ29yZUFyZ3VtZW50Q29k
ZXJzU291cC5jcHAKIAogICAgIFNoYXJlZC91bml4L0NoaWxkUHJvY2Vzc01haW4uY3BwCkBAIC0y
MTksNyArMjEwLDYgQEAgbGlzdChBUFBFTkQgV2ViS2l0Ml9TT1VSQ0VTCiAgICAgV2ViUHJvY2Vz
cy9XZWJQYWdlL2dzdHJlYW1lci9XZWJQYWdlR1N0cmVhbWVyLmNwcAogCiAgICAgV2ViUHJvY2Vz
cy9lZmwvRXh0ZW5zaW9uTWFuYWdlckVmbC5jcHAKLSAgICBXZWJQcm9jZXNzL2VmbC9TZWNjb21w
RmlsdGVyc1dlYlByb2Nlc3NFZmwuY3BwCiAgICAgV2ViUHJvY2Vzcy9lZmwvV2ViUHJvY2Vzc01h
aW5FZmwuY3BwCiAKICAgICBXZWJQcm9jZXNzL3NvdXAvV2ViS2l0U291cFJlcXVlc3RJbnB1dFN0
cmVhbS5jcHAKQEAgLTM1MSwyMSArMzQxLDYgQEAgbGlzdChBUFBFTkQgV2ViUHJvY2Vzc19MSUJS
QVJJRVMKICAgICAke1NRTElURV9MSUJSQVJJRVN9CiApCiAKLWlmIChFTkFCTEVfU0VDQ09NUF9G
SUxURVJTKQotICAgIGxpc3QoQVBQRU5EIFdlYktpdDJfTElCUkFSSUVTCi0gICAgICAgICR7TElC
U0VDQ09NUF9MSUJSQVJJRVN9Ci0gICAgKQotICAgIGxpc3QoQVBQRU5EIFdlYktpdDJfU1lTVEVN
X0lOQ0xVREVfRElSRUNUT1JJRVMKLSAgICAgICAgJHtMSUJTRUNDT01QX0lOQ0xVREVfRElSU30K
LSAgICApCi0KLSAgICAjIElmIGJ1aWxkaW5nIHdpdGggamhidWlsZCwgYWRkIHRoZSByb290IGJ1
aWxkIGRpcmVjdG9yeSB0byB0aGUKLSAgICAjIGZpbGVzeXN0ZW0gYWNjZXNzIHBvbGljeS4KLSAg
ICBpZiAoREVWRUxPUEVSX01PREUgQU5EIElTX0RJUkVDVE9SWSAke0NNQUtFX1NPVVJDRV9ESVJ9
L1dlYktpdEJ1aWxkL0RlcGVuZGVuY2llc0VGTCkKLSAgICAgICAgYWRkX2RlZmluaXRpb25zKC1E
U09VUkNFX0RJUj1cIiR7Q01BS0VfU09VUkNFX0RJUn1cIikKLSAgICBlbmRpZiAoKQotZW5kaWYg
KCkKLQogaWYgKEVOQUJMRV9FQ09SRV9YKQogICAgIGxpc3QoQVBQRU5EIFdlYlByb2Nlc3NfTElC
UkFSSUVTCiAgICAgICAgICR7RUNPUkVfWF9MSUJSQVJJRVN9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9QbGF0Zm9ybUdUSy5jbWFrZSBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtR1RLLmNt
YWtlCmluZGV4IDM0NzY5MzQ2YTk5NTk0ZTQxYzIwN2ExYzNhN2QxNTVmMWI2MDJlODkuLmFjMDJl
NGM2NTUzNWNlY2FkYjg4YzUzY2MwODgyNjU5OGI1YjE1MjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1BsYXRmb3JtR1RLLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtR1RL
LmNtYWtlCkBAIC03NiwxNSArNzYsNiBAQCBsaXN0KEFQUEVORCBXZWJLaXQyX1NPVVJDRVMKIAog
ICAgIFNoYXJlZC9saW51eC9XZWJNZW1vcnlTYW1wbGVyTGludXguY3BwCiAKLSAgICBTaGFyZWQv
bGludXgvU2VjY29tcEZpbHRlcnMvT3BlblN5c2NhbGwuY3BwCi0gICAgU2hhcmVkL2xpbnV4L1Nl
Y2NvbXBGaWx0ZXJzL1NlY2NvbXBCcm9rZXIuY3BwCi0gICAgU2hhcmVkL2xpbnV4L1NlY2NvbXBG
aWx0ZXJzL1NlY2NvbXBGaWx0ZXJzLmNwcAotICAgIFNoYXJlZC9saW51eC9TZWNjb21wRmlsdGVy
cy9TaWdhY3Rpb25TeXNjYWxsLmNwcAotICAgIFNoYXJlZC9saW51eC9TZWNjb21wRmlsdGVycy9T
aWdwcm9jbWFza1N5c2NhbGwuY3BwCi0gICAgU2hhcmVkL2xpbnV4L1NlY2NvbXBGaWx0ZXJzL1N5
c2NhbGwuY3BwCi0gICAgU2hhcmVkL2xpbnV4L1NlY2NvbXBGaWx0ZXJzL1N5c2NhbGxQb2xpY3ku
Y3BwCi0gICAgU2hhcmVkL2xpbnV4L1NlY2NvbXBGaWx0ZXJzL1hER0Jhc2VEaXJlY3RvcnlHTGli
LmNwcAotCiAgICAgU2hhcmVkL3NvdXAvV2ViQ29yZUFyZ3VtZW50Q29kZXJzU291cC5jcHAKIAog
ICAgIFNoYXJlZC91bml4L0NoaWxkUHJvY2Vzc01haW4uY3BwCkBAIC0zNTksOCArMzUwLDYgQEAg
bGlzdChBUFBFTkQgV2ViS2l0Ml9TT1VSQ0VTCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9X
ZWJQYWdlR3RrLmNwcAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9ndGsvV2ViUHJpbnRPcGVyYXRp
b25HdGsuY3BwCiAKLSAgICBXZWJQcm9jZXNzL2d0ay9TZWNjb21wRmlsdGVyc1dlYlByb2Nlc3NH
dGsuY3BwCi0gICAgV2ViUHJvY2Vzcy9ndGsvU2VjY29tcEZpbHRlcnNXZWJQcm9jZXNzR3RrLmgK
ICAgICBXZWJQcm9jZXNzL2d0ay9XZWJHdGtFeHRlbnNpb25NYW5hZ2VyLmNwcAogICAgIFdlYlBy
b2Nlc3MvZ3RrL1dlYkd0a0luamVjdGVkQnVuZGxlTWFpbi5jcHAKICAgICBXZWJQcm9jZXNzL2d0
ay9XZWJQcm9jZXNzTWFpbkd0ay5jcHAKQEAgLTUxMiw3ICs1MDEsNiBAQCBsaXN0KEFQUEVORCBX
ZWJLaXQyX0lOQ0xVREVfRElSRUNUT1JJRVMKICAgICAiJHtXRUJLSVQyX0RJUn0vU2hhcmVkL2ds
aWIiCiAgICAgIiR7V0VCS0lUMl9ESVJ9L1NoYXJlZC9ndGsiCiAgICAgIiR7V0VCS0lUMl9ESVJ9
L1NoYXJlZC9saW51eCIKLSAgICAiJHtXRUJLSVQyX0RJUn0vU2hhcmVkL2xpbnV4L1NlY2NvbXBG
aWx0ZXJzIgogICAgICIke1dFQktJVDJfRElSfS9TaGFyZWQvc291cCIKICAgICAiJHtXRUJLSVQy
X0RJUn0vU2hhcmVkL3VuaXgiCiAgICAgIiR7V0VCS0lUMl9ESVJ9L1VJUHJvY2Vzcy9BUEkvQy9j
YWlybyIKQEAgLTYwMSwyMSArNTg5LDYgQEAgbGlzdChBUFBFTkQgV2ViS2l0Ml9MSUJSQVJJRVMK
ICkKIGVuZGlmICgpCiAKLWlmIChFTkFCTEVfU0VDQ09NUF9GSUxURVJTKQotICAgIGxpc3QoQVBQ
RU5EIFdlYktpdDJfTElCUkFSSUVTCi0gICAgICAgICR7TElCU0VDQ09NUF9MSUJSQVJJRVN9Ci0g
ICAgKQotICAgIGxpc3QoQVBQRU5EIFdlYktpdDJfU1lTVEVNX0lOQ0xVREVfRElSRUNUT1JJRVMK
LSAgICAgICAgJHtMSUJTRUNDT01QX0lOQ0xVREVfRElSU30KLSAgICApCi0KLSAgICAjIElmIGJ1
aWxkaW5nIHdpdGggV2ViS2l0IGpoYnVpbGQgKG5vdCBHTk9NRSBqaGJ1aWxkKSwgYWRkIHRoZSBy
b290IGJ1aWxkCi0gICAgIyBkaXJlY3RvcnkgdG8gdGhlIGZpbGVzeXN0ZW0gYWNjZXNzIHBvbGlj
eS4KLSAgICBpZiAoREVWRUxPUEVSX01PREUgQU5EIElTX0RJUkVDVE9SWSAke0NNQUtFX1NPVVJD
RV9ESVJ9L1dlYktpdEJ1aWxkL0RlcGVuZGVuY2llc0dUSykKLSAgICAgICAgYWRkX2RlZmluaXRp
b25zKC1EU09VUkNFX0RJUj1cIiR7Q01BS0VfU09VUkNFX0RJUn1cIikKLSAgICBlbmRpZiAoKQot
ZW5kaWYgKCkKLQogQUREX1dIT0xFX0FSQ0hJVkVfVE9fTElCUkFSSUVTKFdlYktpdDJfTElCUkFS
SUVTKQogCiBzZXQoV2ViS2l0Ml9NQVJTSEFMX0xJU1QgJHtXRUJLSVQyX0RJUn0vVUlQcm9jZXNz
L0FQSS9ndGsvd2Via2l0Mm1hcnNoYWwubGlzdCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1NoYXJlZC9XZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcCBiL1NvdXJjZS9XZWJLaXQy
L1NoYXJlZC9XZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcAppbmRleCBlMTE0MjVkYmYw
Y2FmOTU2NTRkYzRmODZmNDk3OGE1ZjM4ZTVkYmIzLi5lNWNhMWZiZGNiZDI5NGJjYmNkMWNlY2Uz
ZDY3YWRmNGQzZjRhNDI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViUHJv
Y2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1dl
YlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwCkBAIC02OCw5ICs2OCw2IEBAIHZvaWQgV2Vi
UHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVyczo6ZW5jb2RlKElQQzo6QXJndW1lbnRFbmNvZGVyJiBl
bmNvZGVyKSBjb25zdAogICAgIGVuY29kZXIgPDwgd2ViU1FMRGF0YWJhc2VEaXJlY3RvcnlFeHRl
bnNpb25IYW5kbGU7CiAgICAgZW5jb2RlciA8PCBtZWRpYUNhY2hlRGlyZWN0b3J5OwogICAgIGVu
Y29kZXIgPDwgbWVkaWFDYWNoZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsKLSNpZiBFTkFCTEUo
U0VDQ09NUF9GSUxURVJTKQotICAgIGVuY29kZXIgPDwgY29va2llU3RvcmFnZURpcmVjdG9yeTsK
LSNlbmRpZgogI2lmIFBMQVRGT1JNKE1BQykgJiYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFV
SVJFRCA+PSAxMDExMDAKICAgICBlbmNvZGVyIDw8IHVpUHJvY2Vzc0Nvb2tpZVN0b3JhZ2VJZGVu
dGlmaWVyOwogI2VuZGlmCkBAIC0xNjksMTAgKzE2Niw2IEBAIGJvb2wgV2ViUHJvY2Vzc0NyZWF0
aW9uUGFyYW1ldGVyczo6ZGVjb2RlKElQQzo6QXJndW1lbnREZWNvZGVyJiBkZWNvZGVyLCBXZWJQ
cm9jCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHBhcmFt
ZXRlcnMubWVkaWFDYWNoZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKLSNpZiBFTkFCTEUoU0VDQ09NUF9GSUxURVJTKQotICAgIGlmICghZGVjb2Rlci5k
ZWNvZGUocGFyYW1ldGVycy5jb29raWVTdG9yYWdlRGlyZWN0b3J5KSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotI2VuZGlmCiAjaWYgUExBVEZPUk0oTUFDKSAmJiBfX01BQ19PU19YX1ZFUlNJT05f
TUlOX1JFUVVJUkVEID49IDEwMTEwMAogICAgIGlmICghZGVjb2Rlci5kZWNvZGUocGFyYW1ldGVy
cy51aVByb2Nlc3NDb29raWVTdG9yYWdlSWRlbnRpZmllcikpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJQcm9jZXNzQ3JlYXRpb25Q
YXJhbWV0ZXJzLmggYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViUHJvY2Vzc0NyZWF0aW9uUGFy
YW1ldGVycy5oCmluZGV4IGMzMTA2ZGE2NmNlOGNlZDM4ODQwMTg2NDBjODE0YTFjNzIxYjkxZDMu
LmE3MGNlNjJlMzk4ZDY3ODg3ZGU3ODVlOGY0NTY1NmZmYTQ4Y2M3YmQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmgKKysrIGIv
U291cmNlL1dlYktpdDIvU2hhcmVkL1dlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuaApAQCAt
NzUsOSArNzUsNiBAQCBzdHJ1Y3QgV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyB7CiAgICAg
U2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlIHdlYlNRTERhdGFiYXNlRGlyZWN0b3J5RXh0ZW5zaW9u
SGFuZGxlOwogICAgIFN0cmluZyBtZWRpYUNhY2hlRGlyZWN0b3J5OwogICAgIFNhbmRib3hFeHRl
bnNpb246OkhhbmRsZSBtZWRpYUNhY2hlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlOwotI2lmIEVO
QUJMRShTRUNDT01QX0ZJTFRFUlMpCi0gICAgU3RyaW5nIGNvb2tpZVN0b3JhZ2VEaXJlY3Rvcnk7
Ci0jZW5kaWYKICNpZiBQTEFURk9STShNQUMpICYmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVR
VUlSRUQgPj0gMTAxMTAwCiAgICAgVmVjdG9yPHVpbnQ4X3Q+IHVpUHJvY2Vzc0Nvb2tpZVN0b3Jh
Z2VJZGVudGlmaWVyOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
bGludXgvU2VjY29tcEZpbHRlcnMvT3BlblN5c2NhbGwuY3BwIGIvU291cmNlL1dlYktpdDIvU2hh
cmVkL2xpbnV4L1NlY2NvbXBGaWx0ZXJzL09wZW5TeXNjYWxsLmNwcApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMThkZjUwOGU5MDBkYmU5ODJkYmFkOTk0NzEwOWExMDJiNDk3ZmU5Mi4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvbGludXgvU2VjY29tcEZpbHRlcnMvT3BlblN5c2NhbGwuY3BwCisrKyAvZGV2
L251bGwKQEAgLTEsMjE5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgSW50ZWwg
Q29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJj
b25maWcuaCIKLSNpbmNsdWRlICJPcGVuU3lzY2FsbC5oIgotCi0jaWYgRU5BQkxFKFNFQ0NPTVBf
RklMVEVSUykKLQotI2luY2x1ZGUgIkFyZ3VtZW50Q29kZXJzLmgiCi0jaW5jbHVkZSAiU3lzY2Fs
bFBvbGljeS5oIgotI2luY2x1ZGUgPGVycm5vLmg+Ci0jaW5jbHVkZSA8ZmNudGwuaD4KLSNpbmNs
dWRlIDxzZWNjb21wLmg+Ci0jaW5jbHVkZSA8c3lzL3N0YXQuaD4KLSNpbmNsdWRlIDxzeXMvdHlw
ZXMuaD4KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcu
aD4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLUNPTVBJTEVfQVNTRVJUKCFPX1JET05MWSwgT19S
RE9OTFkpOwotQ09NUElMRV9BU1NFUlQoT19XUk9OTFkgPT0gMSwgT19XUk9OTFkpOwotQ09NUElM
RV9BU1NFUlQoT19SRFdSID09IDIsIE9fUkRXUik7Ci0KLXN0ZDo6dW5pcXVlX3B0cjxTeXNjYWxs
PiBPcGVuU3lzY2FsbDo6Y3JlYXRlRnJvbU9wZW5hdENvbnRleHQobWNvbnRleHRfdCogY29udGV4
dCkKLXsKLSAgICBhdXRvIG9wZW4gPSBzdGQ6Om1ha2VfdW5pcXVlPE9wZW5TeXNjYWxsPihudWxs
cHRyKTsKLQotICAgIG9wZW4tPnNldEZsYWdzKGNvbnRleHQtPmdyZWdzW1JFR19BUkcyXSk7Ci0g
ICAgb3Blbi0+c2V0TW9kZShjb250ZXh0LT5ncmVnc1tSRUdfQVJHM10pOwotICAgIG9wZW4tPnNl
dENvbnRleHQoY29udGV4dCk7Ci0KLSAgICBpbnQgZmQgPSBjb250ZXh0LT5ncmVnc1tSRUdfQVJH
MF07Ci0gICAgY2hhciogcGF0aCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGNvbnRleHQtPmdy
ZWdzW1JFR19BUkcxXSk7Ci0KLSAgICBpZiAocGF0aFswXSA9PSAnLycpIHsKLSAgICAgICAgb3Bl
bi0+c2V0UGF0aChwYXRoKTsKLSAgICAgICAgcmV0dXJuIFdURk1vdmUob3Blbik7Ci0gICAgfQot
Ci0gICAgc3RydWN0IHN0YXQgcGF0aFN0YXQ7Ci0gICAgaWYgKGZzdGF0KGZkLCAmcGF0aFN0YXQp
ID09IC0xKSB7Ci0gICAgICAgIGNvbnRleHQtPmdyZWdzW1JFR19TWVNDQUxMXSA9IC1lcnJubzsK
LSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAgaWYgKCFTX0lTRElSKHBhdGhT
dGF0LnN0X21vZGUpKSB7Ci0gICAgICAgIGNvbnRleHQtPmdyZWdzW1JFR19TWVNDQUxMXSA9IC1F
Tk9URElSOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0KLSAgICBjaGFyIGZkTGlu
a1BhdGhbMzJdOwotICAgIHNucHJpbnRmKGZkTGlua1BhdGgsIHNpemVvZihmZExpbmtQYXRoKSwg
Ii9wcm9jL3NlbGYvZmQvJWQiLCBmZCk7Ci0KLSAgICBjaGFyIGZkUGF0aFtQQVRIX01BWF07Ci0g
ICAgc3NpemVfdCBzaXplID0gcmVhZGxpbmsoZmRMaW5rUGF0aCwgZmRQYXRoLCBzaXplb2YoZmRQ
YXRoKSAtIDEpOwotICAgIGlmIChzaXplID09IC0xKSB7Ci0gICAgICAgIGNvbnRleHQtPmdyZWdz
W1JFR19TWVNDQUxMXSA9IC1lcnJubzsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQot
Ci0gICAgLy8gVGhlICIrIDIiIGhlcmUgc3RhbmRzIGZvciB0aGUgJy8nIGFuZCBudWxsIHRlcm1p
bmF0b3IuCi0gICAgaWYgKHNpemUgKyBzdHJsZW4ocGF0aCkgKyAyID4gUEFUSF9NQVgpIHsKLSAg
ICAgICAgY29udGV4dC0+Z3JlZ3NbUkVHX1NZU0NBTExdID0gLUVOQU1FVE9PTE9ORzsKLSAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAgc3ByaW50ZigmZmRQYXRoW3NpemVdLCAi
LyVzIiwgcGF0aCk7Ci0gICAgb3Blbi0+c2V0UGF0aChmZFBhdGgpOwotCi0gICAgcmV0dXJuIFdU
Rk1vdmUob3Blbik7Ci19Ci0KLXN0ZDo6dW5pcXVlX3B0cjxTeXNjYWxsPiBPcGVuU3lzY2FsbDo6
Y3JlYXRlRnJvbUNyZWF0Q29udGV4dChtY29udGV4dF90KiBjb250ZXh0KQotewotICAgIGF1dG8g
b3BlbiA9IHN0ZDo6bWFrZV91bmlxdWU8T3BlblN5c2NhbGw+KG51bGxwdHIpOwotCi0gICAgb3Bl
bi0+c2V0UGF0aChDU3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGNvbnRleHQtPmdyZWdz
W1JFR19BUkcwXSkpKTsKLSAgICBvcGVuLT5zZXRGbGFncyhPX0NSRUFUIHwgT19XUk9OTFkgfCBP
X1RSVU5DKTsKLSAgICBvcGVuLT5zZXRNb2RlKGNvbnRleHQtPmdyZWdzW1JFR19BUkcxXSk7Ci0g
ICAgb3Blbi0+c2V0Q29udGV4dChjb250ZXh0KTsKLQotICAgIHJldHVybiBXVEZNb3ZlKG9wZW4p
OwotfQotCi1PcGVuU3lzY2FsbDo6T3BlblN5c2NhbGwobWNvbnRleHRfdCogY29udGV4dCkKLSAg
ICA6IFN5c2NhbGwoX19OUl9vcGVuLCBjb250ZXh0KQotICAgICwgbV9mbGFncygwKQotICAgICwg
bV9tb2RlKDApCi17Ci0gICAgaWYgKCFjb250ZXh0KQotICAgICAgICByZXR1cm47Ci0KLSAgICBt
X3BhdGggPSBDU3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGNvbnRleHQtPmdyZWdzW1JF
R19BUkcwXSkpOwotICAgIG1fZmxhZ3MgPSBjb250ZXh0LT5ncmVnc1tSRUdfQVJHMV07Ci0gICAg
bV9tb2RlID0gY29udGV4dC0+Z3JlZ3NbUkVHX0FSRzJdOwotfQotCi12b2lkIE9wZW5TeXNjYWxs
OjpzZXRSZXN1bHQoY29uc3QgU3lzY2FsbFJlc3VsdCogcmVzdWx0KQotewotICAgIEFTU0VSVChj
b250ZXh0KCkgJiYgcmVzdWx0LT50eXBlKCkgPT0gdHlwZSgpKTsKLQotICAgIGNvbnN0IE9wZW5T
eXNjYWxsUmVzdWx0KiBvcGVuUmVzdWx0ID0gc3RhdGljX2Nhc3Q8Y29uc3QgT3BlblN5c2NhbGxS
ZXN1bHQqPihyZXN1bHQpOwotCi0gICAgaWYgKG9wZW5SZXN1bHQtPmZkKCkgPj0gMCkKLSAgICAg
ICAgY29udGV4dCgpLT5ncmVnc1tSRUdfU1lTQ0FMTF0gPSBkdXAob3BlblJlc3VsdC0+ZmQoKSk7
Ci0gICAgZWxzZQotICAgICAgICBjb250ZXh0KCktPmdyZWdzW1JFR19TWVNDQUxMXSA9IC1vcGVu
UmVzdWx0LT5lcnJvck51bWJlcigpOwotfQotCi1zdGQ6OnVuaXF1ZV9wdHI8U3lzY2FsbFJlc3Vs
dD4gT3BlblN5c2NhbGw6OmV4ZWN1dGUoY29uc3QgU3lzY2FsbFBvbGljeSYgcG9saWN5KQotewot
ICAgIGlmICghc3RybmNtcCgiL3Byb2Mvc2VsZi8iLCBtX3BhdGguZGF0YSgpLCAxMSkpIHsKLSAg
ICAgICAgU3RyaW5nIHJlc29sdmVkU2VsZlBhdGggPSBBU0NJSUxpdGVyYWwoIi9wcm9jLyIpICsg
U3RyaW5nOjpudW1iZXIoZ2V0cHBpZCgpKSArICZtX3BhdGguZGF0YSgpWzEwXTsKLSAgICAgICAg
bV9wYXRoID0gcmVzb2x2ZWRTZWxmUGF0aC51dGY4KCkuZGF0YSgpOwotICAgIH0KLQotICAgIFN5
c2NhbGxQb2xpY3k6OlBlcm1pc3Npb24gcGVybWlzc2lvbiA9IFN5c2NhbGxQb2xpY3k6Ok5vdEFs
bG93ZWQ7Ci0gICAgaWYgKG1fZmxhZ3MgJiBPX1JEV1IpCi0gICAgICAgIHBlcm1pc3Npb24gPSBz
dGF0aWNfY2FzdDxTeXNjYWxsUG9saWN5OjpQZXJtaXNzaW9uPihwZXJtaXNzaW9uIHwgU3lzY2Fs
bFBvbGljeTo6UmVhZEFuZFdyaXRlKTsKLSAgICBlbHNlIGlmIChtX2ZsYWdzICYgT19XUk9OTFkp
Ci0gICAgICAgIHBlcm1pc3Npb24gPSBzdGF0aWNfY2FzdDxTeXNjYWxsUG9saWN5OjpQZXJtaXNz
aW9uPihwZXJtaXNzaW9uIHwgU3lzY2FsbFBvbGljeTo6V3JpdGUpOwotICAgIGVsc2UKLSAgICAg
ICAgcGVybWlzc2lvbiA9IHN0YXRpY19jYXN0PFN5c2NhbGxQb2xpY3k6OlBlcm1pc3Npb24+KHBl
cm1pc3Npb24gfCBTeXNjYWxsUG9saWN5OjpSZWFkKTsKLQotICAgIC8vIENyZWF0ZSBhIGZpbGUg
aW1wbGllcyB3cml0ZSBwZXJtaXNzaW9uIG9uIHRoZSBkaXJlY3RvcnkuCi0gICAgaWYgKG1fZmxh
Z3MgJiBPX0NSRUFUIHx8IG1fZmxhZ3MgJiBPX0VYQ0wpCi0gICAgICAgIHBlcm1pc3Npb24gPSBz
dGF0aWNfY2FzdDxTeXNjYWxsUG9saWN5OjpQZXJtaXNzaW9uPihwZXJtaXNzaW9uIHwgU3lzY2Fs
bFBvbGljeTo6V3JpdGUpOwotCi0gICAgaWYgKCFwb2xpY3kuaGFzUGVybWlzc2lvbkZvclBhdGgo
bV9wYXRoLmRhdGEoKSwgcGVybWlzc2lvbikpCi0gICAgICAgIHJldHVybiBzdGQ6Om1ha2VfdW5p
cXVlPE9wZW5TeXNjYWxsUmVzdWx0PigtMSwgRUFDQ0VTKTsKLQotICAgIC8vIFBlcm1pc3Npb24g
Z3JhbnRlZCwgZXhlY3V0ZSB0aGUgc3lzY2FsbC4gVGhlIHN5c2NhbGwgbWlnaHQgc3RpbGwKLSAg
ICAvLyBmYWlsIGJlY2F1c2Ugb2YgaGFyZCBwZXJtaXNzaW9ucyBlbmZvcmNlZCBieSB0aGUgZmls
ZXN5c3RlbSBhbmQKLSAgICAvLyB0aGluZ3MgbGlrZSBpZiB0aGUgZW50cnkgZG9lcyBub3QgZXhp
c3QuCi0gICAgaW50IGZkID0gb3BlbihtX3BhdGguZGF0YSgpLCBtX2ZsYWdzLCBtX21vZGUpOwot
ICAgIGludCBlcnJvck51bWJlciA9IGZkID09IC0xID8gZXJybm8gOiAwOwotCi0gICAgcmV0dXJu
IHN0ZDo6bWFrZV91bmlxdWU8T3BlblN5c2NhbGxSZXN1bHQ+KGZkLCBlcnJvck51bWJlcik7Ci19
Ci0KLXZvaWQgT3BlblN5c2NhbGw6OmVuY29kZShJUEM6OkFyZ3VtZW50RW5jb2RlciYgZW5jb2Rl
cikgY29uc3QKLXsKLSAgICBlbmNvZGVyIDw8IHR5cGUoKTsKLSAgICBlbmNvZGVyIDw8IG1fcGF0
aDsKLSAgICBlbmNvZGVyIDw8IG1fZmxhZ3M7Ci0gICAgZW5jb2RlciA8PCBtX21vZGU7Ci19Ci0K
LWJvb2wgT3BlblN5c2NhbGw6OmRlY29kZShJUEM6OkFyZ3VtZW50RGVjb2RlciogZGVjb2RlcikK
LXsKLSAgICAvLyBtX3R5cGUgYWxyZWFkeSBkZWNvZGVkIGJ5IHRoZSBwYXJlbnQgY2xhc3MuCi0K
LSAgICBpZiAoIWRlY29kZXItPmRlY29kZShtX3BhdGgpKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUobV9mbGFncykpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIHJldHVybiBkZWNvZGVyLT5kZWNvZGUobV9tb2RlKTsKLX0KLQotT3BlblN5c2Nh
bGxSZXN1bHQ6Ok9wZW5TeXNjYWxsUmVzdWx0KGludCBmZCwgaW50IGVycm9yTnVtYmVyKQotICAg
IDogU3lzY2FsbFJlc3VsdChfX05SX29wZW4pCi0gICAgLCBtX2ZkKGZkKQotICAgICwgbV9lcnJv
ck51bWJlcihlcnJvck51bWJlcikKLXsKLX0KLQotT3BlblN5c2NhbGxSZXN1bHQ6On5PcGVuU3lz
Y2FsbFJlc3VsdCgpCi17Ci0gICAgaWYgKG1fZmQgPj0gMCkKLSAgICAgICAgY2xvc2UobV9mZCk7
Ci19Ci0KLXZvaWQgT3BlblN5c2NhbGxSZXN1bHQ6OmVuY29kZShJUEM6OkFyZ3VtZW50RW5jb2Rl
ciYgZW5jb2RlcikgY29uc3QKLXsKLSAgICBlbmNvZGVyIDw8IHR5cGUoKTsKLQotICAgIGlmICht
X2ZkID49IDApIHsKLSAgICAgICAgSVBDOjpBdHRhY2htZW50IGF0dGFjaG1lbnQobV9mZCk7Ci0g
ICAgICAgIGVuY29kZXIuYWRkQXR0YWNobWVudChXVEZNb3ZlKGF0dGFjaG1lbnQpKTsKLSAgICB9
Ci0KLSAgICBlbmNvZGVyIDw8IG1fZXJyb3JOdW1iZXI7Ci19Ci0KLWJvb2wgT3BlblN5c2NhbGxS
ZXN1bHQ6OmRlY29kZShJUEM6OkFyZ3VtZW50RGVjb2RlciogZGVjb2RlciwgaW50IGZkKQotewot
ICAgIGlmIChmZCA+PSAwKQotICAgICAgICBtX2ZkID0gZmQ7Ci0KLSAgICByZXR1cm4gZGVjb2Rl
ci0+ZGVjb2RlKG1fZXJyb3JOdW1iZXIpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQot
I2VuZGlmIC8vIEVOQUJMRShTRUNDT01QX0ZJTFRFUlMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvbGludXgvU2VjY29tcEZpbHRlcnMvT3BlblN5c2NhbGwuaCBiL1NvdXJjZS9X
ZWJLaXQyL1NoYXJlZC9saW51eC9TZWNjb21wRmlsdGVycy9PcGVuU3lzY2FsbC5oCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NmU1MjkyMmU5NmM3Yzk0ZmE2N2FmOTQyYzMzNDgyOTY3
NWU1MDIyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1NoYXJlZC9saW51eC9TZWNjb21wRmlsdGVycy9PcGVuU3lzY2FsbC5oCisr
KyAvZGV2L251bGwKQEAgLTEsODYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBJ
bnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRl
ZiBPcGVuU3lzY2FsbF9oCi0jZGVmaW5lIE9wZW5TeXNjYWxsX2gKLQotI2lmIEVOQUJMRShTRUND
T01QX0ZJTFRFUlMpCi0KLSNpbmNsdWRlICJTeXNjYWxsLmgiCi0jaW5jbHVkZSA8d3RmL3RleHQv
Q1N0cmluZy5oPgotCi1uYW1lc3BhY2UgSVBDIHsKLWNsYXNzIEFyZ3VtZW50RGVjb2RlcjsKLWNs
YXNzIEFyZ3VtZW50RW5jb2RlcjsKLX0KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIE9w
ZW5TeXNjYWxsIDogcHVibGljIFN5c2NhbGwgewotcHVibGljOgotICAgIHN0YXRpYyBzdGQ6OnVu
aXF1ZV9wdHI8U3lzY2FsbD4gY3JlYXRlRnJvbU9wZW5hdENvbnRleHQobWNvbnRleHRfdCopOwot
ICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8U3lzY2FsbD4gY3JlYXRlRnJvbUNyZWF0Q29udGV4
dChtY29udGV4dF90Kik7Ci0KLSAgICBleHBsaWNpdCBPcGVuU3lzY2FsbChtY29udGV4dF90Kik7
Ci0KLSAgICB2b2lkIHNldFBhdGgoY29uc3QgQ1N0cmluZyYgcGF0aCkgeyBtX3BhdGggPSBwYXRo
OyB9OwotICAgIHZvaWQgc2V0RmxhZ3MoY29uc3QgaW50IGZsYWdzKSB7IG1fZmxhZ3MgPSBmbGFn
czsgfTsKLSAgICB2b2lkIHNldE1vZGUoY29uc3QgbW9kZV90IG1vZGUpIHsgbV9tb2RlID0gbW9k
ZTsgfTsKLQotICAgIC8vIFN5c2NhbGwgaW1wbGVtZW50YXRpb24uCi0gICAgdmlydHVhbCB2b2lk
IHNldFJlc3VsdChjb25zdCBTeXNjYWxsUmVzdWx0Kik7Ci0gICAgdmlydHVhbCBzdGQ6OnVuaXF1
ZV9wdHI8U3lzY2FsbFJlc3VsdD4gZXhlY3V0ZShjb25zdCBTeXNjYWxsUG9saWN5Jik7Ci0gICAg
dmlydHVhbCB2b2lkIGVuY29kZShJUEM6OkFyZ3VtZW50RW5jb2RlciYpIGNvbnN0OwotICAgIHZp
cnR1YWwgYm9vbCBkZWNvZGUoSVBDOjpBcmd1bWVudERlY29kZXIqKTsKLQotcHJpdmF0ZToKLSAg
ICBDU3RyaW5nIG1fcGF0aDsKLSAgICBpbnQgbV9mbGFnczsKLSAgICBtb2RlX3QgbV9tb2RlOwot
fTsKLQotY2xhc3MgT3BlblN5c2NhbGxSZXN1bHQgOiBwdWJsaWMgU3lzY2FsbFJlc3VsdCB7Ci1w
dWJsaWM6Ci0gICAgT3BlblN5c2NhbGxSZXN1bHQoaW50IGZkLCBpbnQgZXJyb3JOdW1iZXIpOwot
ICAgIH5PcGVuU3lzY2FsbFJlc3VsdCgpOwotCi0gICAgaW50IGZkKCkgY29uc3QgeyByZXR1cm4g
bV9mZDsgfQotICAgIGludCBlcnJvck51bWJlcigpIGNvbnN0IHsgcmV0dXJuIG1fZXJyb3JOdW1i
ZXI7IH0KLQotICAgIC8vIFN5c2NhbGxSZXN1bHQgaW1wbGVtZW50YXRpb24uCi0gICAgdmlydHVh
bCB2b2lkIGVuY29kZShJUEM6OkFyZ3VtZW50RW5jb2RlciYpIGNvbnN0OwotICAgIHZpcnR1YWwg
Ym9vbCBkZWNvZGUoSVBDOjpBcmd1bWVudERlY29kZXIqLCBpbnQgZmQpOwotCi1wcml2YXRlOgot
ICAgIGludCBtX2ZkOwotICAgIGludCBtX2Vycm9yTnVtYmVyOwotfTsKLQotCi19IC8vIG5hbWVz
cGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIEVOQUJMRShTRUNDT01QX0ZJTFRFUlMpCi0KLSNlbmRp
ZiAvLyBPcGVuU3lzY2FsbF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbGlu
dXgvU2VjY29tcEZpbHRlcnMvU2VjY29tcEJyb2tlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvbGludXgvU2VjY29tcEZpbHRlcnMvU2VjY29tcEJyb2tlci5jcHAKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IGNiY2NmNTNiZDg5OGQ0MmEwODNjOWNiNjU0MWI1ZDk2YWM4MmRmYzAu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YktpdDIvU2hhcmVkL2xpbnV4L1NlY2NvbXBGaWx0ZXJzL1NlY2NvbXBCcm9rZXIuY3BwCisrKyAv
ZGV2L251bGwKQEAgLTEsMzczICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEwIE5va2lh
IENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQotICogQ29weXJpZ2h0IChD
KSAyMDExIElnYWxpYSBTLkwuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgSW50ZWwgQ29ycG9yYXRp
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIK
LSNpbmNsdWRlICJTZWNjb21wQnJva2VyLmgiCi0KLSNpZiBFTkFCTEUoU0VDQ09NUF9GSUxURVJT
KQotCi0jaW5jbHVkZSAiQXJndW1lbnRDb2RlcnMuaCIKLSNpbmNsdWRlICJTeXNjYWxsLmgiCi0j
aW5jbHVkZSA8ZXJybm8uaD4KLSNpbmNsdWRlIDxmY250bC5oPgotI2luY2x1ZGUgPHNlY2NvbXAu
aD4KLSNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+Ci0jaW5jbHVkZSA8c3lzL3N0YXQuaD4KLSNpbmNs
dWRlIDxzeXMvdHlwZXMuaD4KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLQotI2lmbmRlZiBTWVNfU0VD
Q09NUAotI2RlZmluZSBTWVNfU0VDQ09NUCAxCi0jZW5kaWYKLQotc3RhdGljIGNvbnN0IHNpemVf
dCBtZXNzYWdlTWF4U2l6ZSA9IDQwOTY7Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1jbGFzcyBT
ZWNjb21wQnJva2VyQ2xpZW50IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgU2VjY29tcEJyb2tlckNs
aWVudCYgc2luZ2xldG9uKGludCBzb2NrZXQgPSAtMSk7Ci0gICAgflNlY2NvbXBCcm9rZXJDbGll
bnQoKTsKLQotICAgIHZvaWQgZGlzcGF0Y2goU3lzY2FsbCopIGNvbnN0OwotCi0gICAgYm9vbCBo
YW5kbGVJZk9wZW5pbmdDYWNoZWRGaWxlKG1jb250ZXh0X3QqKSBjb25zdDsKLQotcHJpdmF0ZToK
LSAgICBTZWNjb21wQnJva2VyQ2xpZW50KGludCBzb2NrZXQpOwotCi0gICAgdm9pZCBjYWNoZUZp
bGUoY29uc3QgY2hhciogcGF0aCk7Ci0KLSAgICBpbnQgbV9zb2NrZXQ7Ci0KLSAgICBtdXRhYmxl
IExvY2sgbV9zb2NrZXRMb2NrOwotCi0gICAgLy8gTWFwcyBmaWxlcyB0aGF0IG1heSBiZSByZWFk
IGJ5IG1hbGxvYygpIHRvIG9wZW4gZmlsZSBkZXNjcmlwdG9ycy4KLSAgICBIYXNoTWFwPFN0cmlu
ZywgaW50PiBtX2ZpbGVEZXNjcmlwdG9yQ2FjaGU7Ci19OwotCi1zdGF0aWMgc3NpemVfdCBzZW5k
TWVzc2FnZShpbnQgc29ja2V0LCB2b2lkKiBkYXRhLCBzaXplX3Qgc2l6ZSwgaW50IGZkID0gLTEp
Ci17Ci0gICAgQVNTRVJUKHNpemUgPD0gbWVzc2FnZU1heFNpemUpOwotCi0gICAgc3RydWN0IG1z
Z2hkciBtZXNzYWdlOwotICAgIG1lbXNldCgmbWVzc2FnZSwgMCwgc2l6ZW9mKG1lc3NhZ2UpKTsK
LQotICAgIHN0cnVjdCBpb3ZlYyBpb3Y7Ci0gICAgbWVtc2V0KCZpb3YsIDAsIHNpemVvZihpb3Yp
KTsKLSAgICBpb3YuaW92X2Jhc2UgPSBkYXRhOwotICAgIGlvdi5pb3ZfbGVuID0gc2l6ZTsKLQot
ICAgIG1lc3NhZ2UubXNnX2lvdiA9ICZpb3Y7Ci0gICAgbWVzc2FnZS5tc2dfaW92bGVuID0gMTsK
LQotICAgIGNoYXIgY29udHJvbFtDTVNHX1NQQUNFKHNpemVvZihmZCkpXTsKLSAgICBpZiAoZmQg
Pj0gMCkgewotICAgICAgICBtZXNzYWdlLm1zZ19jb250cm9sID0gY29udHJvbDsKLSAgICAgICAg
bWVzc2FnZS5tc2dfY29udHJvbGxlbiA9IHNpemVvZihjb250cm9sKTsKLSAgICAgICAgbWVtc2V0
KG1lc3NhZ2UubXNnX2NvbnRyb2wsIDAsIG1lc3NhZ2UubXNnX2NvbnRyb2xsZW4pOwotCi0gICAg
ICAgIHN0cnVjdCBjbXNnaGRyKiBjbXNnID0gQ01TR19GSVJTVEhEUigmbWVzc2FnZSk7Ci0gICAg
ICAgIGNtc2ctPmNtc2dfbGV2ZWwgPSBTT0xfU09DS0VUOwotICAgICAgICBjbXNnLT5jbXNnX3R5
cGUgPSBTQ01fUklHSFRTOwotICAgICAgICBjbXNnLT5jbXNnX2xlbiA9IENNU0dfTEVOKHNpemVv
ZihmZCkpOwotCi0gICAgICAgIG1lbW1vdmUoQ01TR19EQVRBKGNtc2cpLCAmZmQsIHNpemVvZihm
ZCkpOwotICAgIH0KLQotICAgIHJldHVybiBzZW5kbXNnKHNvY2tldCwgJm1lc3NhZ2UsIDApOwot
fQotCi1zdGF0aWMgc3NpemVfdCByZWNlaXZlTWVzc2FnZShpbnQgc29ja2V0LCB2b2lkKiBkYXRh
LCBzaXplX3Qgc2l6ZSwgaW50KiBmZCA9IDApCi17Ci0gICAgc3RydWN0IG1zZ2hkciBtZXNzYWdl
OwotICAgIG1lbXNldCgmbWVzc2FnZSwgMCwgc2l6ZW9mKG1lc3NhZ2UpKTsKLQotICAgIHN0cnVj
dCBpb3ZlYyBpb3Y7Ci0gICAgbWVtc2V0KCZpb3YsIDAsIHNpemVvZihpb3YpKTsKLSAgICBpb3Yu
aW92X2Jhc2UgPSBkYXRhOwotICAgIGlvdi5pb3ZfbGVuID0gc2l6ZTsKLQotICAgIG1lc3NhZ2Uu
bXNnX2lvdiA9ICZpb3Y7Ci0gICAgbWVzc2FnZS5tc2dfaW92bGVuID0gMTsKLQotICAgIGNoYXIg
Y29udHJvbFtDTVNHX1NQQUNFKHNpemVvZihmZCkpXTsKLSAgICBtZXNzYWdlLm1zZ19jb250cm9s
ID0gY29udHJvbDsKLSAgICBtZXNzYWdlLm1zZ19jb250cm9sbGVuID0gc2l6ZW9mKGNvbnRyb2wp
OwotICAgIG1lbXNldChtZXNzYWdlLm1zZ19jb250cm9sLCAwLCBtZXNzYWdlLm1zZ19jb250cm9s
bGVuKTsKLQotICAgIHNzaXplX3QgcmVjZWl2ZWRCeXRlcyA9IHJlY3Ztc2coc29ja2V0LCAmbWVz
c2FnZSwgMCk7Ci0KLSAgICBpZiAoZmQgJiYgcmVjZWl2ZWRCeXRlcyA+IDApIHsKLSAgICAgICAg
c3RydWN0IGNtc2doZHIqIGNtc2cgPSBDTVNHX0ZJUlNUSERSKCZtZXNzYWdlKTsKLSAgICAgICAg
aWYgKGNtc2cgJiYgY21zZy0+Y21zZ19sZXZlbCA9PSBTT0xfU09DS0VUICYmIGNtc2ctPmNtc2df
dHlwZSA9PSBTQ01fUklHSFRTKQotICAgICAgICAgICAgbWVtY3B5KGZkLCBDTVNHX0RBVEEoY21z
ZyksIHNpemVvZigqZmQpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgKmZkID0gLTE7Ci0g
ICAgfQotCi0gICAgcmV0dXJuIHJlY2VpdmVkQnl0ZXMgPj0gMCA/IHJlY2VpdmVkQnl0ZXMgOiAt
ZXJybm87Ci19Ci0KLXN0YXRpYyB2b2lkIFNJR1NZU0hhbmRsZXIoaW50IHNpZ25hbCwgc2lnaW5m
b190KiBpbmZvLCB2b2lkKiBkYXRhKQotewotICAgIGlmIChzaWduYWwgIT0gU0lHU1lTIHx8IGlu
Zm8tPnNpX2NvZGUgIT0gU1lTX1NFQ0NPTVApCi0gICAgICAgIENSQVNIKCk7Ci0KLSAgICB1Y29u
dGV4dF90KiB1Y29udGV4dCA9IHN0YXRpY19jYXN0PHVjb250ZXh0X3QqPihkYXRhKTsKLSAgICBp
ZiAoIXVjb250ZXh0KQotICAgICAgICBDUkFTSCgpOwotCi0gICAgU2VjY29tcEJyb2tlckNsaWVu
dCogY2xpZW50ID0gJlNlY2NvbXBCcm9rZXJDbGllbnQ6OnNpbmdsZXRvbigpOwotCi0gICAgaWYg
KGNsaWVudC0+aGFuZGxlSWZPcGVuaW5nQ2FjaGVkRmlsZSgmdWNvbnRleHQtPnVjX21jb250ZXh0
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gY3JlYXRlRnJvbUNvbnRleHQgbWlnaHQgcmV0
dXJuIGEgbnVsbHB0ciBpZiBpdCBpcyBhYmxlIHRvIHJlc29sdmUgdGhlCi0gICAgLy8gc3lzY2Fs
bCBsb2NhbGx5IHdpdGhvdXQgc2VuZGluZyBpdCB0byB0aGUgYnJva2VyIHByb2Nlc3MuIEluIHRo
aXMgY2FzZSwKLSAgICAvLyB3ZSBqdXN0IHJldHVybi4gRXhhbXBsZXMgb2YgbG9jYWxseSByZXNv
bHZlZCBzeXNjYWxscyBhcmUgdGhlIG9uZXMKLSAgICAvLyB3aXRoIGNhY2hlZCByZXNvdXJjZXMg
YW5kIGludmFsaWQgYXJndW1lbnRzLgotICAgIHN0ZDo6dW5pcXVlX3B0cjxTeXNjYWxsPiBzeXNj
YWxsID0gU3lzY2FsbDo6Y3JlYXRlRnJvbUNvbnRleHQodWNvbnRleHQpOwotICAgIGlmICghc3lz
Y2FsbCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgY2xpZW50LT5kaXNwYXRjaChzeXNjYWxsLmdl
dCgpKTsKLX0KLQotc3RhdGljIHZvaWQgcmVnaXN0ZXJTSUdTWVNIYW5kbGVyKCkKLXsKLSAgICBz
dHJ1Y3Qgc2lnYWN0aW9uIGFjdGlvbjsKLSAgICBtZW1zZXQoJmFjdGlvbiwgMCwgc2l6ZW9mKGFj
dGlvbikpOwotICAgIGFjdGlvbi5zYV9zaWdhY3Rpb24gPSAmU0lHU1lTSGFuZGxlcjsKLSAgICBh
Y3Rpb24uc2FfZmxhZ3MgPSBTQV9TSUdJTkZPIHwgU0FfTk9ERUZFUjsKLQotICAgIGlmIChzaWdh
Y3Rpb24oU0lHU1lTLCAmYWN0aW9uLCAwKSA8IDApCi0gICAgICAgIENSQVNIKCk7Ci0KLSAgICBz
aWdzZXRfdCBtYXNrOwotICAgIHNpZ2VtcHR5c2V0KCZtYXNrKTsKLSAgICBzaWdhZGRzZXQoJm1h
c2ssIFNJR1NZUyk7Ci0KLSAgICBpZiAoc2lncHJvY21hc2soU0lHX1VOQkxPQ0ssICZtYXNrLCAw
KSA8IDApCi0gICAgICAgIENSQVNIKCk7Ci19Ci0KLVNlY2NvbXBCcm9rZXJDbGllbnQmIFNlY2Nv
bXBCcm9rZXJDbGllbnQ6OnNpbmdsZXRvbihpbnQgc29ja2V0KQotewotICAgIERFUFJFQ0FURURf
REVGSU5FX1NUQVRJQ19MT0NBTChTZWNjb21wQnJva2VyQ2xpZW50LCBicm9rZXJDbGllbnQsIChz
b2NrZXQpKTsKLQotICAgIHJldHVybiBicm9rZXJDbGllbnQ7Ci19Ci0KLVNlY2NvbXBCcm9rZXJD
bGllbnQ6OlNlY2NvbXBCcm9rZXJDbGllbnQoaW50IHNvY2tldCkKLSAgICA6IG1fc29ja2V0KHNv
Y2tldCkKLXsKLSAgICBBU1NFUlQobV9zb2NrZXQgPj0gMCk7Ci0KLSAgICBjYWNoZUZpbGUoIi9w
cm9jL3N5cy92bS9vdmVyY29tbWl0X21lbW9yeSIpOwotICAgIGNhY2hlRmlsZSgiL3N5cy9kZXZp
Y2VzL3N5c3RlbS9jcHUvb25saW5lIik7Ci19Ci0KLVNlY2NvbXBCcm9rZXJDbGllbnQ6On5TZWNj
b21wQnJva2VyQ2xpZW50KCkKLXsKLSAgICBmb3IgKGludCBmZCA6IG1fZmlsZURlc2NyaXB0b3JD
YWNoZS52YWx1ZXMoKSkKLSAgICAgICAgY2xvc2UoZmQpOwotICAgIGNsb3NlKG1fc29ja2V0KTsK
LX0KLQotdm9pZCBTZWNjb21wQnJva2VyQ2xpZW50OjpkaXNwYXRjaChTeXNjYWxsKiBzeXNjYWxs
KSBjb25zdAotewotICAgIGF1dG8gZW5jb2RlciA9IHN0ZDo6bWFrZV91bmlxdWU8SVBDOjpBcmd1
bWVudEVuY29kZXI+KCk7Ci0gICAgZW5jb2Rlci0+ZW5jb2RlKCpzeXNjYWxsKTsKLQotICAgIGNo
YXIgYnVmZmVyW21lc3NhZ2VNYXhTaXplXTsKLSAgICBzc2l6ZV90IHJlY2VpdmVkQnl0ZXMgPSAw
OwotICAgIGludCBmZCA9IC0xOwotCi0gICAgbV9zb2NrZXRMb2NrLmxvY2soKTsKLQotICAgIGlm
IChzZW5kTWVzc2FnZShtX3NvY2tldCwgZW5jb2Rlci0+YnVmZmVyKCksIGVuY29kZXItPmJ1ZmZl
clNpemUoKSkgPCAwKQotICAgICAgICBDUkFTSCgpOwotCi0gICAgd2hpbGUgKHRydWUpIHsKLSAg
ICAgICAgcmVjZWl2ZWRCeXRlcyA9IHJlY2VpdmVNZXNzYWdlKG1fc29ja2V0LCAmYnVmZmVyLCBz
aXplb2YoYnVmZmVyKSwgJmZkKTsKLSAgICAgICAgaWYgKHJlY2VpdmVkQnl0ZXMgPiAwKQotICAg
ICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgaWYgKHJlY2VpdmVkQnl0ZXMgIT0gLUVJTlRSKQot
ICAgICAgICAgICAgQ1JBU0goKTsKLSAgICB9Ci0KLSAgICBtX3NvY2tldExvY2sudW5sb2NrKCk7
Ci0KLSAgICBhdXRvIGRlY29kZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPElQQzo6QXJndW1lbnREZWNv
ZGVyPigoY29uc3QgdWludDhfdCopIGJ1ZmZlciwgcmVjZWl2ZWRCeXRlcyk7Ci0gICAgc3RkOjp1
bmlxdWVfcHRyPFN5c2NhbGxSZXN1bHQ+IHJlc3VsdCA9IFN5c2NhbGxSZXN1bHQ6OmNyZWF0ZUZy
b21EZWNvZGVyKGRlY29kZXIuZ2V0KCksIGZkKTsKLSAgICBpZiAoIXJlc3VsdCkKLSAgICAgICAg
Q1JBU0goKTsKLQotICAgIHN5c2NhbGwtPnNldFJlc3VsdChyZXN1bHQuZ2V0KCkpOwotfQotCi1i
b29sIFNlY2NvbXBCcm9rZXJDbGllbnQ6OmhhbmRsZUlmT3BlbmluZ0NhY2hlZEZpbGUobWNvbnRl
eHRfdCogY29udGV4dCkgY29uc3QKLXsKLSAgICBpZiAoY29udGV4dC0+Z3JlZ3NbUkVHX1NZU0NB
TExdICE9IF9fTlJfb3BlbikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgY29uc3QgY2hh
ciAqcGF0aCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGNvbnRleHQtPmdyZWdzW1JFR19BUkcw
XSk7Ci0KLSAgICBhdXRvIGl0ZXIgPSBtX2ZpbGVEZXNjcmlwdG9yQ2FjaGUuZmluZChwYXRoKTsK
LSAgICBpZiAoaXRlciA9PSBtX2ZpbGVEZXNjcmlwdG9yQ2FjaGUuZW5kKCkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIC8vIE1hbGxvYyB3aWxsIGV2ZW50dWFsbHkgY2hlY2sgdGhlIG51
bWJlciBvZiBvbmxpbmUgQ1BVcyAoaS5lIGJlaW5nCi0gICAgLy8gc2NoZWR1bGVkKSBwcmVzZW50
IG9uIHRoZSBzeXN0ZW0gYnkgb3BlbmluZyBhIHNwZWNpYWwgZmlsZS4gSWYgaXQgZG9lcwotICAg
IC8vIHRoYXQgaW4gdGhlIG1pZGRsZSBvZiB0aGUgU0lHU1lTIHNpZ25hbCBoYW5kbGVyLCBpdCBt
aWdodCB0cmlnZ2VyIGEKLSAgICAvLyByZWN1cnNpdmUgYXR0ZW1wdCBvZiBwcm94eWluZyB0aGUg
b3BlbigpIHN5c2NhbGwgdG8gdGhlIGJyb2tlci4gVGhlIHNhbWUKLSAgICAvLyBwcm9ibGVtIG9j
Y3VycyBpZiBtYWxsb2MoKSBjaGVja3MgdGhlIG1lbW9yeSBvdmVyY29tbWl0IHBvbGljeS4gQmVj
YXVzZQotICAgIC8vIG9mIHRoYXQsIHdlIGNhY2hlIHRoZXNlIHJlc291cmNlcy4KLSAgICBjb250
ZXh0LT5ncmVnc1tSRUdfU1lTQ0FMTF0gPSBkdXAoaXRlci0+dmFsdWUpOwotCi0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLXZvaWQgU2VjY29tcEJyb2tlckNsaWVudDo6Y2FjaGVGaWxlKGNvbnN0IGNo
YXIqIHBhdGgpCi17Ci0gICAgaW50IGZkID0gb3BlbihwYXRoLCBPX1JET05MWSk7Ci0gICAgQVNT
RVJUKGZkID49IDApOwotICAgIG1fZmlsZURlc2NyaXB0b3JDYWNoZS5zZXQocGF0aCwgZmQpOwot
fQotCi12b2lkIFNlY2NvbXBCcm9rZXI6OmxhdW5jaFByb2Nlc3MoU2VjY29tcEZpbHRlcnMqIGZp
bHRlcnMsIGNvbnN0IFN5c2NhbGxQb2xpY3kmIHBvbGljeSkKLXsKLSAgICBzdGF0aWMgYm9vbCBp
bml0aWFsaXplZCA9IGZhbHNlOwotICAgIGlmIChpbml0aWFsaXplZCkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgaWYgKGZpbHRlcnMtPmRlZmF1bHRBY3Rpb24oKSA9PSBTZWNjb21wRmlsdGVyczo6
QWxsb3cpIHsKLSAgICAgICAgLy8gVGhlIHNpZ3Byb2NtYXNrIGZpbHRlcnMgYmVsbG93IGFyZSBu
ZWVkZWQgdG8gdHJhcCBzaWdwcm9jbWFzaygpCi0gICAgICAgIC8vIHNvIHdlIGNhbiBwcmV2ZW50
IHRoZSBydW5uaW5nIHByb2Nlc3NlcyBmcm9tIGJsb2NraW5nIFNJR1NZUy4KLSAgICAgICAgZmls
dGVycy0+YWRkUnVsZSgic2lncHJvY21hc2siLCBTZWNjb21wRmlsdGVyczo6VHJhcCwKLSAgICAg
ICAgICAgIDAsIFNlY2NvbXBGaWx0ZXJzOjpFcXVhbCwgU0lHX0JMT0NLLAotICAgICAgICAgICAg
MSwgU2VjY29tcEZpbHRlcnM6Ok5vdEVxdWFsLCAwKTsKLSAgICAgICAgZmlsdGVycy0+YWRkUnVs
ZSgic2lncHJvY21hc2siLCBTZWNjb21wRmlsdGVyczo6VHJhcCwKLSAgICAgICAgICAgIDAsIFNl
Y2NvbXBGaWx0ZXJzOjpFcXVhbCwgU0lHX1NFVE1BU0ssCi0gICAgICAgICAgICAxLCBTZWNjb21w
RmlsdGVyczo6Tm90RXF1YWwsIDApOwotICAgICAgICBmaWx0ZXJzLT5hZGRSdWxlKCJydF9zaWdw
cm9jbWFzayIsIFNlY2NvbXBGaWx0ZXJzOjpUcmFwLAotICAgICAgICAgICAgMCwgU2VjY29tcEZp
bHRlcnM6OkVxdWFsLCBTSUdfQkxPQ0ssCi0gICAgICAgICAgICAxLCBTZWNjb21wRmlsdGVyczo6
Tm90RXF1YWwsIDApOwotICAgICAgICBmaWx0ZXJzLT5hZGRSdWxlKCJydF9zaWdwcm9jbWFzayIs
IFNlY2NvbXBGaWx0ZXJzOjpUcmFwLAotICAgICAgICAgICAgMCwgU2VjY29tcEZpbHRlcnM6OkVx
dWFsLCBTSUdfU0VUTUFTSywKLSAgICAgICAgICAgIDEsIFNlY2NvbXBGaWx0ZXJzOjpOb3RFcXVh
bCwgMCk7Ci0KLSAgICAgICAgLy8gVGhlIHNpZ2FjdGlvbiBmaWx0ZXJzIGJlbGxvdyBhcmUgbmVl
ZGVkIHRvIHRyYXAgc2lnYWN0aW9uKCkKLSAgICAgICAgLy8gc28gd2UgY2FuIHByZXZlbnQgdGhl
IHJ1bm5pbmcgcHJvY2Vzc2VzIGZyb20gaGFuZGxpbmcgU0lHU1lTLgotICAgICAgICBmaWx0ZXJz
LT5hZGRSdWxlKCJzaWdhY3Rpb24iLCBTZWNjb21wRmlsdGVyczo6VHJhcCwKLSAgICAgICAgICAg
IDAsIFNlY2NvbXBGaWx0ZXJzOjpFcXVhbCwgU0lHU1lTKTsKLSAgICAgICAgZmlsdGVycy0+YWRk
UnVsZSgicnRfc2lnYWN0aW9uIiwgU2VjY29tcEZpbHRlcnM6OlRyYXAsCi0gICAgICAgICAgICAw
LCBTZWNjb21wRmlsdGVyczo6RXF1YWwsIFNJR1NZUyk7Ci0gICAgfQotCi0gICAgaWYgKGZpbHRl
cnMtPmRlZmF1bHRBY3Rpb24oKSAhPSBTZWNjb21wRmlsdGVyczo6QWxsb3cpIHsKLSAgICAgICAg
Ly8gTmVlZGVkIGZvciB0aGUgU0lHU1lTIGhhbmRsZXIgdG8gd29yay4KLSAgICAgICAgZmlsdGVy
cy0+YWRkUnVsZSgic2lncmV0dXJuIiwgU2VjY29tcEZpbHRlcnM6OkFsbG93KTsKLSAgICAgICAg
ZmlsdGVycy0+YWRkUnVsZSgicnRfc2lncmV0dXJuIiwgU2VjY29tcEZpbHRlcnM6OkFsbG93KTsK
LQotICAgICAgICAvLyBOZWVkZWQgYnkgbWFsbG9jIGFuZCBmcmVlLiBXZSBtdXN0IG5ldmVyIHRy
YXAgYSBzeXNjYWxsIGluc2lkZSBlaXRoZXIKLSAgICAgICAgLy8gYmVjYXVzZSB3ZSBuZWVkIHRo
ZW0gaW4gb3VyIFNJR1NZUyBoYW5kbGVyIGFuZCB0aGV5IGFyZSBub25yZWVudHJhbnQuCi0gICAg
ICAgIGZpbHRlcnMtPmFkZFJ1bGUoImJyayIsIFNlY2NvbXBGaWx0ZXJzOjpBbGxvdyk7Ci0gICAg
fQotCi0gICAgU2VjY29tcEJyb2tlciBzZWNjb21wQnJva2VyOwotICAgIHNlY2NvbXBCcm9rZXIu
c2V0U3lzY2FsbFBvbGljeShwb2xpY3kpOwotICAgIHNlY2NvbXBCcm9rZXIuaW5pdGlhbGl6ZSgp
OwotCi0gICAgaW5pdGlhbGl6ZWQgPSB0cnVlOwotfQotCi12b2lkIFNlY2NvbXBCcm9rZXI6Omlu
aXRpYWxpemUoKQotewotICAgIGludCBzb2NrZXRzWzJdOwotICAgIGlmIChzb2NrZXRwYWlyKEFG
X1VOSVgsIFNPQ0tfU1RSRUFNLCAwLCBzb2NrZXRzKSA8IDApCi0gICAgICAgIENSQVNIKCk7Ci0K
LSAgICBwaWRfdCBwaWQgPSBmb3JrKCk7Ci0gICAgaWYgKHBpZCkgeyAvLyBTYW5kYm94ZWQgcHJv
Y2Vzcy4KLSAgICAgICAgY2xvc2Uoc29ja2V0c1sxXSk7Ci0gICAgICAgIFNlY2NvbXBCcm9rZXJD
bGllbnQ6OnNpbmdsZXRvbihzb2NrZXRzWzBdKTsKLSAgICAgICAgcmVnaXN0ZXJTSUdTWVNIYW5k
bGVyKCk7Ci0gICAgfSBlbHNlIHsgLy8gQnJva2VyLgotICAgICAgICAvLyBUT0RPOiBUaGUgYnJv
a2VyIHNob3VsZCBzZXR1cCBzZWNjb21wIGZpbHRlcnMKLSAgICAgICAgLy8gZm9yIGl0c2VsZiBh
bmQgYmxvY2sgZXZlcnl0aGluZyBlbHNlIG90aGVyIHRoYW4KLSAgICAgICAgLy8gdGhlIG1pbmlt
YWwgc2V0IG9mIHN5c2NhbGxzIG5lZWRlZCB0byBleGVjdXRlIHRoZQotICAgICAgICAvLyBzeXNj
YWxscyBpdCBpcyBzdXBwb3NlIHRvIHByb3h5LgotICAgICAgICBjbG9zZShzb2NrZXRzWzBdKTsK
LSAgICAgICAgcnVuTG9vcChzb2NrZXRzWzFdKTsKLSAgICB9Ci19Ci0KLU5PX1JFVFVSTiB2b2lk
IFNlY2NvbXBCcm9rZXI6OnJ1bkxvb3AoaW50IHNvY2tldCkKLXsKLSAgICAvLyBDbG9zZSB1bm5l
Y2Vzc2FyeSBpbmhlcml0ZWQgZmlsZSBkZXNjcmlwdG9ycy4KLSAgICBmb3IgKGludCBpID0gU1RE
RVJSX0ZJTEVOTyArIDE7IGkgPCBGRF9TRVRTSVpFOyArK2kpIHsKLSAgICAgICAgaWYgKGkgIT0g
c29ja2V0KQotICAgICAgICAgICAgY2xvc2UoaSk7Ci0gICAgfQotCi0gICAgd2hpbGUgKHRydWUp
IHsKLSAgICAgICAgY2hhciBidWZmZXJbbWVzc2FnZU1heFNpemVdOwotICAgICAgICBzc2l6ZV90
IHJlY2VpdmVkQnl0ZXMgPSByZWNlaXZlTWVzc2FnZShzb2NrZXQsICZidWZmZXIsIHNpemVvZihi
dWZmZXIpKTsKLSAgICAgICAgaWYgKHJlY2VpdmVkQnl0ZXMgPT0gLUVJTlRSKQotICAgICAgICAg
ICAgY29udGludWU7Ci0KLSAgICAgICAgaWYgKHJlY2VpdmVkQnl0ZXMgPD0gMCkKLSAgICAgICAg
ICAgIGV4aXQocmVjZWl2ZWRCeXRlcyA/IEVYSVRfRkFJTFVSRSA6IEVYSVRfU1VDQ0VTUyk7Ci0K
LSAgICAgICAgYXV0byBkZWNvZGVyID0gc3RkOjptYWtlX3VuaXF1ZTxJUEM6OkFyZ3VtZW50RGVj
b2Rlcj4oKGNvbnN0IHVpbnQ4X3QqKSBidWZmZXIsIHJlY2VpdmVkQnl0ZXMpOwotICAgICAgICBz
dGQ6OnVuaXF1ZV9wdHI8U3lzY2FsbD4gc3lzY2FsbCA9IFN5c2NhbGw6OmNyZWF0ZUZyb21EZWNv
ZGVyKGRlY29kZXIuZ2V0KCkpOwotICAgICAgICBpZiAoIXN5c2NhbGwpCi0gICAgICAgICAgICBl
eGl0KEVYSVRfRkFJTFVSRSk7Ci0KLSAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFN5c2NhbGxSZXN1
bHQ+IHJlc3VsdCA9IHN5c2NhbGwtPmV4ZWN1dGUobV9wb2xpY3kpOwotICAgICAgICBpZiAoIXJl
c3VsdCkKLSAgICAgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKLQotICAgICAgICBhdXRvIGVu
Y29kZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPElQQzo6QXJndW1lbnRFbmNvZGVyPigpOwotICAgICAg
ICBlbmNvZGVyLT5lbmNvZGUoKnJlc3VsdCk7Ci0KLSAgICAgICAgVmVjdG9yPElQQzo6QXR0YWNo
bWVudD4gYXR0YWNobWVudHMgPSBlbmNvZGVyLT5yZWxlYXNlQXR0YWNobWVudHMoKTsKLSAgICAg
ICAgaW50IGZkID0gYXR0YWNobWVudHMuc2l6ZSgpID09IDEgPyBhdHRhY2htZW50c1swXS5maWxl
RGVzY3JpcHRvcigpIDogLTE7Ci0KLSAgICAgICAgLy8gVGhlIGNsaWVudCBpcyBkb3duLCB0aGUg
YnJva2VyIHNob3VsZCBnbyBhd2F5LgotICAgICAgICBpZiAoc2VuZE1lc3NhZ2Uoc29ja2V0LCBl
bmNvZGVyLT5idWZmZXIoKSwgZW5jb2Rlci0+YnVmZmVyU2l6ZSgpLCBmZCkgPCAwKQotICAgICAg
ICAgICAgZXhpdChFWElUX1NVQ0NFU1MpOwotICAgIH0KLX0KLQotfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0Ci0KLSNlbmRpZiAvLyBFTkFCTEUoU0VDQ09NUF9GSUxURVJTKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvU2hhcmVkL2xpbnV4L1NlY2NvbXBGaWx0ZXJzL1NlY2NvbXBCcm9rZXIuaCBi
L1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9saW51eC9TZWNjb21wRmlsdGVycy9TZWNjb21wQnJva2Vy
LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE3NWM4NmI3NGU3ZjdlMjQ5NjFjODc4
Y2E2YTI3YzA1NGNlZjg4NjkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL2xpbnV4L1NlY2NvbXBGaWx0ZXJzL1NlY2Nv
bXBCcm9rZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDYyICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLSNpZm5kZWYgU2VjY29tcEJyb2tlcl9oCi0jZGVmaW5lIFNlY2NvbXBCcm9rZXJfaAot
Ci0jaWYgRU5BQkxFKFNFQ0NPTVBfRklMVEVSUykKLQotI2luY2x1ZGUgIlNlY2NvbXBGaWx0ZXJz
LmgiCi0jaW5jbHVkZSAiU3lzY2FsbC5oIgotI2luY2x1ZGUgIlN5c2NhbGxQb2xpY3kuaCIKLSNp
bmNsdWRlIDxzaWduYWwuaD4KLSNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KLSNpbmNsdWRl
IDx3dGYvVGhyZWFkaW5nLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi1uYW1lc3BhY2Ug
V2ViS2l0IHsKLQotY2xhc3MgU2VjY29tcEJyb2tlciB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFC
TEUoU2VjY29tcEJyb2tlcik7Ci0KLXB1YmxpYzoKLSAgICBzdGF0aWMgdm9pZCBsYXVuY2hQcm9j
ZXNzKFNlY2NvbXBGaWx0ZXJzKiwgY29uc3QgU3lzY2FsbFBvbGljeSYpOwotCi0gICAgdm9pZCBp
bml0aWFsaXplKCk7Ci0gICAgdm9pZCBzZXRTeXNjYWxsUG9saWN5KGNvbnN0IFN5c2NhbGxQb2xp
Y3kmIHBvbGljeSkgeyBtX3BvbGljeSA9IHBvbGljeTsgfQotCi1wcml2YXRlOgotICAgIFNlY2Nv
bXBCcm9rZXIoKSB7IH0KLQotICAgIHZvaWQgcnVuTG9vcChpbnQgc29ja2V0KTsKLQotICAgIFN5
c2NhbGxQb2xpY3kgbV9wb2xpY3k7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2Vu
ZGlmIC8vIEVOQUJMRShTRUNDT01QX0ZJTFRFUlMpCi0KLSNlbmRpZiAvLyBTZWNjb21wQnJva2Vy
X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9saW51eC9TZWNjb21wRmlsdGVy
cy9TZWNjb21wRmlsdGVycy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbGludXgvU2VjY29t
cEZpbHRlcnMvU2VjY29tcEZpbHRlcnMuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCA2MjE2ZGZkMzNlNDEzNTcwM2VlY2U1ODc2M2VjYzUzZDYyZWQ4NDVhLi4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9s
aW51eC9TZWNjb21wRmlsdGVycy9TZWNjb21wRmlsdGVycy5jcHAKKysrIC9kZXYvbnVsbApAQCAt
MSwxMTggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBJbnRlbCBDb3Jwb3JhdGlv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0g
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgot
I2luY2x1ZGUgIlNlY2NvbXBGaWx0ZXJzLmgiCi0KLSNpZiBFTkFCTEUoU0VDQ09NUF9GSUxURVJT
KQotCi0jaW5jbHVkZSAiU2VjY29tcEJyb2tlci5oIgotI2luY2x1ZGUgPHNlY2NvbXAuaD4KLSNp
bmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotQ09NUElM
RV9BU1NFUlQoU2VjY29tcEZpbHRlcnM6OkFsbG93ID09IFNDTVBfQUNUX0FMTE9XLCBBbGxvdyk7
Ci1DT01QSUxFX0FTU0VSVChTZWNjb21wRmlsdGVyczo6S2lsbCA9PSBTQ01QX0FDVF9LSUxMLCBL
aWxsKTsKLUNPTVBJTEVfQVNTRVJUKFNlY2NvbXBGaWx0ZXJzOjpUcmFwID09IFNDTVBfQUNUX1RS
QVAsIFRyYXApOwotCi1DT01QSUxFX0FTU0VSVChTZWNjb21wRmlsdGVyczo6Tm90U2V0ID09IHN0
YXRpY19jYXN0PFNlY2NvbXBGaWx0ZXJzOjpPcGVyYXRvcj4oX1NDTVBfQ01QX01JTiksIE5vdFNl
dCk7Ci1DT01QSUxFX0FTU0VSVChTZWNjb21wRmlsdGVyczo6Tm90RXF1YWwgPT0gc3RhdGljX2Nh
c3Q8U2VjY29tcEZpbHRlcnM6Ok9wZXJhdG9yPihTQ01QX0NNUF9ORSksIE5vdEVxdWFsKTsKLUNP
TVBJTEVfQVNTRVJUKFNlY2NvbXBGaWx0ZXJzOjpFcXVhbCA9PSBzdGF0aWNfY2FzdDxTZWNjb21w
RmlsdGVyczo6T3BlcmF0b3I+KFNDTVBfQ01QX0VRKSwgRXF1YWwpOwotCi1DT01QSUxFX0FTU0VS
VChzaXplb2Yoc2NtcF9kYXR1bV90KSA9PSBzaXplb2YodWludDY0X3QpLCBzY21wX2RhdHVtX3Qp
OwotCi1TZWNjb21wRmlsdGVyczo6U2VjY29tcEZpbHRlcnMoQWN0aW9uIGRlZmF1bHRBY3Rpb24p
Ci0gICAgOiBtX2NvbnRleHQoc2VjY29tcF9pbml0KGRlZmF1bHRBY3Rpb24pKQotICAgICwgbV9p
bml0aWFsaXplZChmYWxzZSkKLXsKLSAgICBpZiAoIW1fY29udGV4dCkKLSAgICAgICAgQ1JBU0go
KTsKLX0KLQotU2VjY29tcEZpbHRlcnM6On5TZWNjb21wRmlsdGVycygpCi17Ci0gICAgc2VjY29t
cF9yZWxlYXNlKG1fY29udGV4dCk7Ci19Ci0KLXZvaWQgU2VjY29tcEZpbHRlcnM6OmFkZFJ1bGUo
Y29uc3QgY2hhciogc3lzY2FsbE5hbWUsIEFjdGlvbiBhY3Rpb24sCi0gICAgdW5zaWduZWQgYXJn
TnVtMSwgT3BlcmF0b3Igb3BlcmF0b3IxLCB1aW50NjRfdCBkYXRhMSwKLSAgICB1bnNpZ25lZCBh
cmdOdW0yLCBPcGVyYXRvciBvcGVyYXRvcjIsIHVpbnQ2NF90IGRhdGEyKQotewotICAgIGludCBz
eXNjYWxsID0gc2VjY29tcF9zeXNjYWxsX3Jlc29sdmVfbmFtZShzeXNjYWxsTmFtZSk7Ci0gICAg
aWYgKHN5c2NhbGwgPT0gX19OUl9TQ01QX0VSUk9SKQotICAgICAgICBDUkFTSCgpOwotCi0gICAg
aW50IHJlc3VsdDsKLSAgICBpZiAob3BlcmF0b3IyICE9IE5vdFNldCkKLSAgICAgICAgcmVzdWx0
ID0gc2VjY29tcF9ydWxlX2FkZChtX2NvbnRleHQsIGFjdGlvbiwgc3lzY2FsbCwgMiwKLSAgICAg
ICAgICAgIFNDTVBfQ01QKGFyZ051bTEsIHN0YXRpY19jYXN0PHNjbXBfY29tcGFyZT4ob3BlcmF0
b3IxKSwgZGF0YTEsIDApLAotICAgICAgICAgICAgU0NNUF9DTVAoYXJnTnVtMiwgc3RhdGljX2Nh
c3Q8c2NtcF9jb21wYXJlPihvcGVyYXRvcjIpLCBkYXRhMiwgMCkpOwotICAgIGVsc2UgaWYgKG9w
ZXJhdG9yMSAhPSBOb3RTZXQpCi0gICAgICAgIHJlc3VsdCA9IHNlY2NvbXBfcnVsZV9hZGQobV9j
b250ZXh0LCBhY3Rpb24sIHN5c2NhbGwsIDEsCi0gICAgICAgICAgICBTQ01QX0NNUChhcmdOdW0x
LCBzdGF0aWNfY2FzdDxzY21wX2NvbXBhcmU+KG9wZXJhdG9yMSksIGRhdGExLCAwKSk7Ci0gICAg
ZWxzZQotICAgICAgICByZXN1bHQgPSBzZWNjb21wX3J1bGVfYWRkKG1fY29udGV4dCwgYWN0aW9u
LCBzeXNjYWxsLCAwKTsKLQotICAgIGlmIChyZXN1bHQgPCAwKQotICAgICAgICBDUkFTSCgpOwot
fQotCi12b2lkIFNlY2NvbXBGaWx0ZXJzOjppbml0aWFsaXplKCkKLXsKLSAgICBpZiAobV9pbml0
aWFsaXplZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gSW1wbGVtZW50IHRoaXMgaXMgbm90
IHJlcXVpcmVkIGluIGNhc2Ugd2UgYXJlIGp1c3QKLSAgICAvLyBzZXR0aW5nIGZpbHRlcnMuIFRo
aXMgaXMgYSBnb29kIHBsYWNlIHRvIGNyZWF0ZSB0aGUKLSAgICAvLyBicm9rZXIgYW5kIHN5c2Nh
bGwgcG9saWN5IG90aGVyd2lzZS4KLSAgICBwbGF0Zm9ybUluaXRpYWxpemUoKTsKLQotICAgIGlm
IChzZWNjb21wX2xvYWQobV9jb250ZXh0KSA8IDApCi0gICAgICAgIENSQVNIKCk7Ci0KLSAgICBt
X2luaXRpYWxpemVkID0gdHJ1ZTsKLX0KLQotU2VjY29tcEZpbHRlcnM6OkFjdGlvbiBTZWNjb21w
RmlsdGVyczo6ZGVmYXVsdEFjdGlvbigpIGNvbnN0Ci17Ci0gICAgdWludDMyX3QgdmFsdWU7Ci0g
ICAgaWYgKHNlY2NvbXBfYXR0cl9nZXQobV9jb250ZXh0LCBTQ01QX0ZMVEFUUl9BQ1RfREVGQVVM
VCwgJnZhbHVlKSA9PSAtMSkKLSAgICAgICAgQ1JBU0goKTsKLQotICAgIEFjdGlvbiByZXN1bHQg
PSBzdGF0aWNfY2FzdDxBY3Rpb24+KHZhbHVlKTsKLSAgICBzd2l0Y2ggKHJlc3VsdCkgewotICAg
IGNhc2UgQWxsb3c6Ci0gICAgY2FzZSBLaWxsOgotICAgIGNhc2UgVHJhcDoKLSAgICAgICAgcmV0
dXJuIHJlc3VsdDsKLSAgICB9Ci0KLSAgICBDUkFTSCgpOwotfQotCi19IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKLQotI2VuZGlmIC8vIEVOQUJMRShTRUNDT01QX0ZJTFRFUlMpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvbGludXgvU2VjY29tcEZpbHRlcnMvU2VjY29tcEZpbHRlcnMu
aCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9saW51eC9TZWNjb21wRmlsdGVycy9TZWNjb21wRmls
dGVycy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmN2RmZTlmM2Y5YzVhODRhYzNl
MGEyYjU5MzEzOGNmNTExNGViMDA4Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9saW51eC9TZWNjb21wRmlsdGVycy9T
ZWNjb21wRmlsdGVycy5oCisrKyAvZGV2L251bGwKQEAgLTEsNzcgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMyBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI2lmbmRlZiBTZWNjb21wRmlsdGVyc19oCi0jZGVmaW5lIFNlY2NvbXBGaWx0
ZXJzX2gKLQotI2lmIEVOQUJMRShTRUNDT01QX0ZJTFRFUlMpCi0KLSNpbmNsdWRlIDx3dGYvTm9u
Y29weWFibGUuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIFNlY2NvbXBGaWx0ZXJz
IHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTZWNjb21wRmlsdGVycyk7Ci0KLXB1YmxpYzoK
LSAgICBlbnVtIEFjdGlvbiB7Ci0gICAgICAgIEFsbG93ID0gMHg3ZmZmMDAwMFUsCi0gICAgICAg
IEtpbGwgID0gMHgwMDAwMDAwMFUsCi0gICAgICAgIFRyYXAgID0gMHgwMDAzMDAwMFUKLSAgICB9
OwotCi0gICAgZW51bSBPcGVyYXRvciB7Ci0gICAgICAgIE5vdFNldCAgID0gMCwKLSAgICAgICAg
Tm90RXF1YWwgPSAxLAotICAgICAgICBFcXVhbCAgICA9IDQKLSAgICB9OwotCi0gICAgZXhwbGlj
aXQgU2VjY29tcEZpbHRlcnMoQWN0aW9uIGRlZmF1bHRBY3Rpb24pOwotICAgIHZpcnR1YWwgflNl
Y2NvbXBGaWx0ZXJzKCk7Ci0KLSAgICB2b2lkKiBjb250ZXh0KCkgeyByZXR1cm4gbV9jb250ZXh0
OyB9OwotCi0gICAgdm9pZCBhZGRSdWxlKGNvbnN0IGNoYXIqIHN5c2NhbGxOYW1lLCBBY3Rpb24s
Ci0gICAgICAgIHVuc2lnbmVkIGFyZ051bTEgPSAwLCBPcGVyYXRvciBvcGVyYXRvcjEgPSBOb3RT
ZXQsIHVpbnQ2NF90IGRhdGExID0gMCwKLSAgICAgICAgdW5zaWduZWQgYXJnTnVtMiA9IDAsIE9w
ZXJhdG9yIG9wZXJhdG9yMiA9IE5vdFNldCwgdWludDY0X3QgZGF0YTIgPSAwKTsKLQotICAgIHZv
aWQgaW5pdGlhbGl6ZSgpOwotCi0gICAgQWN0aW9uIGRlZmF1bHRBY3Rpb24oKSBjb25zdDsKLQot
cHJpdmF0ZToKLSAgICB2aXJ0dWFsIHZvaWQgcGxhdGZvcm1Jbml0aWFsaXplKCkgeyB9Ci0KLSAg
ICB0eXBlZGVmIHZvaWQgKkhBTkRMRTsKLQotICAgIEhBTkRMRSBtX2NvbnRleHQ7Ci0gICAgYm9v
bCBtX2luaXRpYWxpemVkOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAv
LyBFTkFCTEUoU0VDQ09NUF9GSUxURVJTKQotCi0jZW5kaWYgLy8gU2VjY29tcEZpbHRlcnNfaApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL2xpbnV4L1NlY2NvbXBGaWx0ZXJzL1Np
Z2FjdGlvblN5c2NhbGwuY3BwIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL2xpbnV4L1NlY2NvbXBG
aWx0ZXJzL1NpZ2FjdGlvblN5c2NhbGwuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwYjJlOWNkNGNiYjQ1ZTk4MzUyYjUzNGIyOGQzZjM3ZWViMTZhNzVlLi4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9s
aW51eC9TZWNjb21wRmlsdGVycy9TaWdhY3Rpb25TeXNjYWxsLmNwcAorKysgL2Rldi9udWxsCkBA
IC0xLDQ4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgSW50ZWwgQ29ycG9yYXRp
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIK
LSNpbmNsdWRlICJTaWdhY3Rpb25TeXNjYWxsLmgiCi0KLSNpZiBFTkFCTEUoU0VDQ09NUF9GSUxU
RVJTKQotCi0jaW5jbHVkZSA8c2lnbmFsLmg+Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1zdGQ6
OnVuaXF1ZV9wdHI8U3lzY2FsbD4gU2lnYWN0aW9uU3lzY2FsbDo6Y3JlYXRlRnJvbUNvbnRleHQo
bWNvbnRleHRfdCogY29udGV4dCkKLXsKLSAgICAvLyBXZSBqdXN0IGlnbm9yZSBhbnkgYXR0ZW1w
dCBvZiBpbnN0YWxsaW5nIGEgaGFuZGxlciBmb3IgU0lHU1lTIHNpbmNlIHRoaXMKLSAgICAvLyBz
aWduYWwgaXMgbmVjZXNzYXJ5IGZvciB0aGUgc2FuZGJveCB0byB3b3JrLgotICAgIEFTU0VSVChj
b250ZXh0ICYmIGNvbnRleHQtPmdyZWdzW1JFR19BUkcwXSA9PSBTSUdTWVMpOwotCi0gICAgY29u
dGV4dC0+Z3JlZ3NbUkVHX1NZU0NBTExdID0gMDsKLQotICAgIHJldHVybiBudWxscHRyOwotfQot
Ci19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIEVOQUJMRShTRUNDT01QX0ZJTFRF
UlMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbGludXgvU2VjY29tcEZpbHRl
cnMvU2lnYWN0aW9uU3lzY2FsbC5oIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL2xpbnV4L1NlY2Nv
bXBGaWx0ZXJzL1NpZ2FjdGlvblN5c2NhbGwuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggZWQ1MmUzZmZkMGQwZGQ5ZWIzYjkzNWEyMzUxYWZkZmU4ZmNjNjc3Yi4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
bGludXgvU2VjY29tcEZpbHRlcnMvU2lnYWN0aW9uU3lzY2FsbC5oCisrKyAvZGV2L251bGwKQEAg
LTEsNDMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBJbnRlbCBDb3Jwb3JhdGlv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0g
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBTaWdhY3Rpb25TeXNj
YWxsX2gKLSNkZWZpbmUgU2lnYWN0aW9uU3lzY2FsbF9oCi0KLSNpZiBFTkFCTEUoU0VDQ09NUF9G
SUxURVJTKQotCi0jaW5jbHVkZSAiU3lzY2FsbC5oIgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQot
c3RydWN0IFNpZ2FjdGlvblN5c2NhbGwgewotICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8U3lz
Y2FsbD4gY3JlYXRlRnJvbUNvbnRleHQobWNvbnRleHRfdCopOwotfTsKLQotfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBFTkFCTEUoU0VDQ09NUF9GSUxURVJTKQotCi0jZW5kaWYg
Ly8gU2lnYWN0aW9uU3lzY2FsbF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
bGludXgvU2VjY29tcEZpbHRlcnMvU2lncHJvY21hc2tTeXNjYWxsLmNwcCBiL1NvdXJjZS9XZWJL
aXQyL1NoYXJlZC9saW51eC9TZWNjb21wRmlsdGVycy9TaWdwcm9jbWFza1N5c2NhbGwuY3BwCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NzlmZjlkODNmZWQ0ZGE5YjU4M2NmNjU5Nzcy
Y2YwZDExYTBkMjlkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9saW51eC9TZWNjb21wRmlsdGVycy9TaWdwcm9jbWFz
a1N5c2NhbGwuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNjQgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMyBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlNpZ3Byb2NtYXNrU3lzY2Fs
bC5oIgotCi0jaWYgRU5BQkxFKFNFQ0NPTVBfRklMVEVSUykKLQotI2luY2x1ZGUgPHNpZ25hbC5o
PgotI2luY2x1ZGUgPHN0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotc3RkOjp1bmlx
dWVfcHRyPFN5c2NhbGw+IFNpZ3Byb2NtYXNrU3lzY2FsbDo6Y3JlYXRlRnJvbUNvbnRleHQodWNv
bnRleHRfdCogdWNvbnRleHQpCi17Ci0gICAgLy8gVGhpcyBzeXNjYWxsIGlzIG5ldmVyIHByb3hp
ZWQgdG8gdGhlIGJyb2tlciBwcm9jZXNzIGFuZCByZXNvbHZlZCBsb2NhbGx5LgotICAgIC8vIFdo
YXQgd2UgZG8gaGVyZSBpcyBzaWxlbnRseSByZW1vdmUgU0lHU1lTIGZyb20gdGhlIHNpZ25hbCBz
ZXQgc28gbm8KLSAgICAvLyB0aHJlYWQgd2lsbCBldmVyIGJlIGFibGUgdG8gYmxvY2sgaXQuCi0g
ICAgQVNTRVJUKHVjb250ZXh0KTsKLQotICAgIG1jb250ZXh0X3QgbWNvbnRleHQgPSB1Y29udGV4
dC0+dWNfbWNvbnRleHQ7Ci0gICAgaW50IGhvdyA9IG1jb250ZXh0LmdyZWdzW1JFR19BUkcwXTsK
LSAgICBzaWdzZXRfdCogc2V0ID0gcmVpbnRlcnByZXRfY2FzdDxzaWdzZXRfdCo+KG1jb250ZXh0
LmdyZWdzW1JFR19BUkcxXSk7Ci0gICAgc2lnc2V0X3QqIG9sZFNldCA9IHJlaW50ZXJwcmV0X2Nh
c3Q8c2lnc2V0X3QqPihtY29udGV4dC5ncmVnc1tSRUdfQVJHMl0pOwotCi0gICAgaWYgKG9sZFNl
dCkKLSAgICAgICAgbWVtY3B5KG9sZFNldCwgJnVjb250ZXh0LT51Y19zaWdtYXNrLCBzaXplb2Yo
c2lnc2V0X3QpKTsKLQotICAgIGlmIChob3cgPT0gU0lHX1NFVE1BU0spCi0gICAgICAgIG1lbWNw
eSgmdWNvbnRleHQtPnVjX3NpZ21hc2ssIHNldCwgc2l6ZW9mKHNpZ3NldF90KSk7Ci0gICAgZWxz
ZQotICAgICAgICBzaWdvcnNldCgmdWNvbnRleHQtPnVjX3NpZ21hc2ssIHNldCwgJnVjb250ZXh0
LT51Y19zaWdtYXNrKTsKLQotICAgIHNpZ2RlbHNldCgmdWNvbnRleHQtPnVjX3NpZ21hc2ssIFNJ
R1NZUyk7Ci0gICAgbWNvbnRleHQuZ3JlZ3NbUkVHX1NZU0NBTExdID0gMDsKLQotICAgIHJldHVy
biBudWxscHRyOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIEVOQUJM
RShTRUNDT01QX0ZJTFRFUlMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbGlu
dXgvU2VjY29tcEZpbHRlcnMvU2lncHJvY21hc2tTeXNjYWxsLmggYi9Tb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvbGludXgvU2VjY29tcEZpbHRlcnMvU2lncHJvY21hc2tTeXNjYWxsLmgKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwZjAyMjc1MjQ2ODYyYjY3MDMzMGZlNjU4YWI5ZmIyZmUz
Y2FhOGYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYktpdDIvU2hhcmVkL2xpbnV4L1NlY2NvbXBGaWx0ZXJzL1NpZ3Byb2NtYXNrU3lzY2Fs
bC5oCisrKyAvZGV2L251bGwKQEAgLTEsNDMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMyBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
I2lmbmRlZiBTaWdwcm9jbWFza1N5c2NhbGxfaAotI2RlZmluZSBTaWdwcm9jbWFza1N5c2NhbGxf
aAotCi0jaWYgRU5BQkxFKFNFQ0NPTVBfRklMVEVSUykKLQotI2luY2x1ZGUgIlN5c2NhbGwuaCIK
LQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLXN0cnVjdCBTaWdwcm9jbWFza1N5c2NhbGwgewotICAg
IHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8U3lzY2FsbD4gY3JlYXRlRnJvbUNvbnRleHQodWNvbnRl
eHRfdCopOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBFTkFCTEUo
U0VDQ09NUF9GSUxURVJTKQotCi0jZW5kaWYgLy8gU2lncHJvY21hc2tTeXNjYWxsX2gKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9saW51eC9TZWNjb21wRmlsdGVycy9TeXNjYWxs
LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9saW51eC9TZWNjb21wRmlsdGVycy9TeXNjYWxs
LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjVkYWM4MzllY2U0NTM4ODhjMTA1
YmIxZmMwNGE2NDZiNTliY2IxZi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbGludXgvU2VjY29tcEZpbHRlcnMvU3lz
Y2FsbC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxNTIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMyBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxNSBJZ2FsaWEgUy5MLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmln
LmgiCi0jaW5jbHVkZSAiU3lzY2FsbC5oIgotCi0jaWYgRU5BQkxFKFNFQ0NPTVBfRklMVEVSUykK
LQotI2luY2x1ZGUgIkFyZ3VtZW50Q29kZXJzLmgiCi0jaW5jbHVkZSAiT3BlblN5c2NhbGwuaCIK
LSNpbmNsdWRlICJTaWdhY3Rpb25TeXNjYWxsLmgiCi0jaW5jbHVkZSAiU2lncHJvY21hc2tTeXNj
YWxsLmgiCi0jaW5jbHVkZSA8bGltaXRzPgotI2luY2x1ZGUgPHNlY2NvbXAuaD4KLSNpbmNsdWRl
IDxzdHJpbmcuaD4KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0K
LS8vIFRoZSByZWR1bmRhbnQgImNvbnN0ZXhwciBjb25zdCIgaXMgdG8gcGxhY2F0ZSBDbGFuZydz
IC1Xd3JpdGFibGUtc3RyaW5ncy4KLXN0YXRpYyBjb25zdGV4cHIgY29uc3QgY2hhciogY29uc3Qg
bWVzc2FnZSA9ICJCbG9ja2VkIHVuZXhwZWN0ZWQgc3lzY2FsbDogIjsKLQotLy8gU2luY2UgInNw
cmludGYiIGlzIG5vdCBzaWduYWwtc2FmZSwgcmVpbXBsZW1lbnQgJWQgaGVyZS4gQmFzZWQgb24g
Y29kZSBmcm9tCi0vLyBodHRwOi8vb3V0Zmx1eC5uZXQvdGVhY2gtc2VjY29tcCBieSBXaWxsIERy
ZXdyeSBhbmQgS2VlcyBDb29rLCByZWxlYXNlZCB1bmRlcgotLy8gdGhlIENocm9taXVtIEJTRCBs
aWNlbnNlLgotc3RhdGljIHZvaWQgd3JpdGVVbnNpZ25lZEludChjaGFyKiBidWYsIHVuc2lnbmVk
IHZhbCkKLXsKLSAgICBpbnQgd2lkdGggPSAwOwotICAgIHVuc2lnbmVkIHRlbnM7Ci0KLSAgICBp
ZiAoIXZhbCkgewotICAgICAgICBzdHJjcHkoYnVmLCAiMCIpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotICAgIGZvciAodGVucyA9IHZhbDsgdGVuczsgdGVucyAvPSAxMCkKLSAgICAgICAgKyt3
aWR0aDsKLSAgICBidWZbd2lkdGhdID0gJ1wwJzsKLSAgICBmb3IgKHRlbnMgPSB2YWw7IHRlbnM7
IHRlbnMgLz0gMTApCi0gICAgICAgIGJ1ZlstLXdpZHRoXSA9ICcwJyArICh0ZW5zICUgMTApOwot
fQotCi1zdGF0aWMgdm9pZCByZXBvcnRVbmV4cGVjdGVkU3lzY2FsbCh1bnNpZ25lZCBzeXNjYWxs
KQotewotICAgIGNoYXIgYnVmWzEyOF07Ci0jaWYgZGVmaW5lZChfX2hhc19idWlsdGluKQotI2lm
IF9faGFzX2J1aWx0aW4oX19idWlsdGluX3N0cmxlbikKLSAgICAvLyBCdWZmZXIgbXVzdCBiZSBi
aWcgZW5vdWdoIGZvciB0aGUgbGl0ZXJhbCwgcGx1cyB0aGUgbnVtYmVyIG9mIGRpZ2l0cyBpbiB0
aGUgbGFyZ2VzdCBwb3NzaWJsZQotICAgIC8vIHVuc2lnbmVkIGludCwgcGx1cyBvbmUgZm9yIHRo
ZSBuZXdsaW5lLCBwbHVzIG9uZSBtb3JlIGZvciB0aGUgdHJhaWxpbmcgbnVsbC4KLSAgICBzdGF0
aWNfYXNzZXJ0KF9fYnVpbHRpbl9zdHJsZW4obWVzc2FnZSkgKyBzdGQ6Om51bWVyaWNfbGltaXRz
PHVuc2lnbmVkPjo6ZGlnaXRzMTAgKyAyIDwgc2l6ZW9mKGJ1ZiksICJCdWZmZXIgdG9vIHNtYWxs
Iik7Ci0jZW5kaWYKLSNlbmRpZgotICAgIHN0cmNweShidWYsIG1lc3NhZ2UpOwotICAgIHdyaXRl
VW5zaWduZWRJbnQoYnVmICsgc3RybGVuKGJ1ZiksIHN5c2NhbGwpOwotICAgIHN0cmNhdChidWYs
ICJcbiIpOwotICAgIGludCB1bnVzZWQgX19hdHRyaWJ1dGVfXygodW51c2VkKSk7Ci0gICAgdW51
c2VkID0gd3JpdGUoU1RERVJSX0ZJTEVOTywgYnVmLCBzdHJsZW4oYnVmKSk7Ci19Ci0KLXN0ZDo6
dW5pcXVlX3B0cjxTeXNjYWxsPiBTeXNjYWxsOjpjcmVhdGVGcm9tQ29udGV4dCh1Y29udGV4dF90
KiB1Y29udGV4dCkKLXsKLSAgICBtY29udGV4dF90KiBtY29udGV4dCA9ICZ1Y29udGV4dC0+dWNf
bWNvbnRleHQ7Ci0KLSAgICBzd2l0Y2ggKG1jb250ZXh0LT5ncmVnc1tSRUdfU1lTQ0FMTF0pIHsK
LSAgICBjYXNlIF9fTlJfb3BlbjoKLSAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8T3Bl
blN5c2NhbGw+KG1jb250ZXh0KTsKLSAgICBjYXNlIF9fTlJfb3BlbmF0OgotICAgICAgICByZXR1
cm4gT3BlblN5c2NhbGw6OmNyZWF0ZUZyb21PcGVuYXRDb250ZXh0KG1jb250ZXh0KTsKLSAgICBj
YXNlIF9fTlJfY3JlYXQ6Ci0gICAgICAgIHJldHVybiBPcGVuU3lzY2FsbDo6Y3JlYXRlRnJvbUNy
ZWF0Q29udGV4dChtY29udGV4dCk7Ci0gICAgY2FzZSBfX05SX3NpZ3Byb2NtYXNrOgotICAgIGNh
c2UgX19OUl9ydF9zaWdwcm9jbWFzazoKLSAgICAgICAgcmV0dXJuIFNpZ3Byb2NtYXNrU3lzY2Fs
bDo6Y3JlYXRlRnJvbUNvbnRleHQodWNvbnRleHQpOwotICAgIGNhc2UgX19OUl9zaWdhY3Rpb246
Ci0gICAgY2FzZSBfX05SX3J0X3NpZ2FjdGlvbjoKLSAgICAgICAgcmV0dXJuIFNpZ2FjdGlvblN5
c2NhbGw6OmNyZWF0ZUZyb21Db250ZXh0KG1jb250ZXh0KTsKLSAgICBkZWZhdWx0OgotICAgICAg
ICByZXBvcnRVbmV4cGVjdGVkU3lzY2FsbChtY29udGV4dC0+Z3JlZ3NbUkVHX1NZU0NBTExdKTsK
LSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIG51bGxw
dHI7Ci19Ci0KLXN0ZDo6dW5pcXVlX3B0cjxTeXNjYWxsPiBTeXNjYWxsOjpjcmVhdGVGcm9tRGVj
b2RlcihJUEM6OkFyZ3VtZW50RGVjb2RlciogZGVjb2RlcikKLXsKLSAgICBpbnQgdHlwZTsKLSAg
ICBpZiAoIWRlY29kZXItPmRlY29kZSh0eXBlKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0K
LSAgICBzdGQ6OnVuaXF1ZV9wdHI8U3lzY2FsbD4gc3lzY2FsbDsKLSAgICBpZiAodHlwZSA9PSBf
X05SX29wZW4pCi0gICAgICAgIHN5c2NhbGwgPSBzdGQ6Om1ha2VfdW5pcXVlPE9wZW5TeXNjYWxs
PihudWxscHRyKTsKLQotICAgIGlmICghc3lzY2FsbC0+ZGVjb2RlKGRlY29kZXIpKQotICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLQotICAgIHJldHVybiBzeXNjYWxsOwotfQotCi1TeXNjYWxsOjpT
eXNjYWxsKGludCB0eXBlLCBtY29udGV4dF90KiBjb250ZXh0KQotICAgIDogbV90eXBlKHR5cGUp
Ci0gICAgLCBtX2NvbnRleHQoY29udGV4dCkKLXsKLX0KLQotc3RkOjp1bmlxdWVfcHRyPFN5c2Nh
bGxSZXN1bHQ+IFN5c2NhbGxSZXN1bHQ6OmNyZWF0ZUZyb21EZWNvZGVyKElQQzo6QXJndW1lbnRE
ZWNvZGVyKiBkZWNvZGVyLCBpbnQgZmQpCi17Ci0gICAgaW50IHR5cGU7Ci0gICAgaWYgKCFkZWNv
ZGVyLT5kZWNvZGUodHlwZSkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgc3RkOjp1
bmlxdWVfcHRyPFN5c2NhbGxSZXN1bHQ+IHJlc3VsdDsKLSAgICBpZiAodHlwZSA9PSBfX05SX29w
ZW4pCi0gICAgICAgIHJlc3VsdCA9IHN0ZDo6bWFrZV91bmlxdWU8T3BlblN5c2NhbGxSZXN1bHQ+
KC0xLCAwKTsKLQotICAgIGlmICghcmVzdWx0LT5kZWNvZGUoZGVjb2RlciwgZmQpKQotICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLVN5c2NhbGxSZXN1
bHQ6OlN5c2NhbGxSZXN1bHQoaW50IHR5cGUpCi0gICAgOiBtX3R5cGUodHlwZSkKLXsKLX0KLQot
fSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBFTkFCTEUoU0VDQ09NUF9GSUxURVJT
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL2xpbnV4L1NlY2NvbXBGaWx0ZXJz
L1N5c2NhbGwuaCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9saW51eC9TZWNjb21wRmlsdGVycy9T
eXNjYWxsLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVmZTE3NmE2OTNiMDA3Yzdj
NGE5ODBhYTI1Y2UxYWIxZjQ0M2U3N2EuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL2xpbnV4L1NlY2NvbXBGaWx0ZXJz
L1N5c2NhbGwuaAorKysgL2Rldi9udWxsCkBAIC0xLDExMyArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEzIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jaWZuZGVmIFN5c2NhbGxfaAotI2RlZmluZSBTeXNjYWxsX2gKLQotI2lmIEVOQUJM
RShTRUNDT01QX0ZJTFRFUlMpCi0KLSNpZiBDUFUoWDg2XzY0KQotI2RlZmluZSBSRUdfU1lTQ0FM
TCBSRUdfUkFYCi0jZGVmaW5lIFJFR19BUkcwICAgIFJFR19SREkKLSNkZWZpbmUgUkVHX0FSRzEg
ICAgUkVHX1JTSQotI2RlZmluZSBSRUdfQVJHMiAgICBSRUdfUkRYCi0jZGVmaW5lIFJFR19BUkcz
ICAgIFJFR19SMTAKLSNlbGlmIENQVShYODYpCi0jZGVmaW5lIFJFR19TWVNDQUxMIFJFR19FQVgK
LSNkZWZpbmUgUkVHX0FSRzAgICAgUkVHX0VCWAotI2RlZmluZSBSRUdfQVJHMSAgICBSRUdfRUNY
Ci0jZGVmaW5lIFJFR19BUkcyICAgIFJFR19FRFgKLSNkZWZpbmUgUkVHX0FSRzMgICAgUkVHX0VT
SQotI2Vsc2UKLSNlcnJvciAiQ1BVIG5vdCBzdXBwb3J0ZWQuIgotI2VuZGlmCi0KLSNpbmNsdWRl
IDxzaWduYWwuaD4KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpbmNsdWRlIDx3dGYvTm9uY29w
eWFibGUuaD4KLSNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+Ci0KLW5hbWVzcGFjZSBJUEMg
ewotY2xhc3MgQXJndW1lbnREZWNvZGVyOwotY2xhc3MgQXJndW1lbnRFbmNvZGVyOwotfQotCi1u
YW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgU3lzY2FsbFJlc3VsdDsKLWNsYXNzIFN5c2NhbGxQ
b2xpY3k7Ci0KLWNsYXNzIFN5c2NhbGwgewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFN5c2Nh
bGwpOwotCi1wdWJsaWM6Ci0gICAgdmlydHVhbCB+U3lzY2FsbCgpIHsgfQotCi0gICAgc3RhdGlj
IHN0ZDo6dW5pcXVlX3B0cjxTeXNjYWxsPiBjcmVhdGVGcm9tQ29udGV4dCh1Y29udGV4dF90Kik7
Ci0gICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxTeXNjYWxsPiBjcmVhdGVGcm9tRGVjb2RlcihJ
UEM6OkFyZ3VtZW50RGVjb2RlciopOwotCi0gICAgaW50IHR5cGUoKSBjb25zdCB7IHJldHVybiBt
X3R5cGU7IH0KLQotICAgIHZvaWQgc2V0Q29udGV4dChtY29udGV4dF90KiBjb250ZXh0KSB7IG1f
Y29udGV4dCA9IGNvbnRleHQ7IH0KLSAgICBtY29udGV4dF90KiBjb250ZXh0KCkgY29uc3QgeyBy
ZXR1cm4gbV9jb250ZXh0OyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0UmVzdWx0KGNvbnN0IFN5
c2NhbGxSZXN1bHQqKSA9IDA7Ci0gICAgdmlydHVhbCBzdGQ6OnVuaXF1ZV9wdHI8U3lzY2FsbFJl
c3VsdD4gZXhlY3V0ZShjb25zdCBTeXNjYWxsUG9saWN5JikgPSAwOwotICAgIHZpcnR1YWwgdm9p
ZCBlbmNvZGUoSVBDOjpBcmd1bWVudEVuY29kZXImKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBi
b29sIGRlY29kZShJUEM6OkFyZ3VtZW50RGVjb2RlciopID0gMDsKLQotcHJvdGVjdGVkOgotICAg
IFN5c2NhbGwoaW50IHR5cGUsIG1jb250ZXh0X3QqKTsKLQotcHJpdmF0ZToKLSAgICBpbnQgbV90
eXBlOwotICAgIG1jb250ZXh0X3QqIG1fY29udGV4dDsKLX07Ci0KLWNsYXNzIFN5c2NhbGxSZXN1
bHQgewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFN5c2NhbGxSZXN1bHQpOwotCi1wdWJsaWM6
Ci0gICAgdmlydHVhbCB+U3lzY2FsbFJlc3VsdCgpIHsgfQotCi0gICAgc3RhdGljIHN0ZDo6dW5p
cXVlX3B0cjxTeXNjYWxsUmVzdWx0PiBjcmVhdGVGcm9tRGVjb2RlcihJUEM6OkFyZ3VtZW50RGVj
b2RlciosIGludCBmZCk7Ci0KLSAgICBpbnQgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsg
fQotCi0gICAgdmlydHVhbCB2b2lkIGVuY29kZShJUEM6OkFyZ3VtZW50RW5jb2RlciYpIGNvbnN0
ID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgZGVjb2RlKElQQzo6QXJndW1lbnREZWNvZGVyKiwgaW50
IGZkPS0xKSA9IDA7Ci0KLXByb3RlY3RlZDoKLSAgICBTeXNjYWxsUmVzdWx0KGludCB0eXBlKTsK
LQotcHJpdmF0ZToKLSAgICBpbnQgbV90eXBlOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0
Ci0KLSNlbmRpZiAvLyBFTkFCTEUoU0VDQ09NUF9GSUxURVJTKQotCi0jZW5kaWYgLy8gU3lzY2Fs
bF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbGludXgvU2VjY29tcEZpbHRl
cnMvU3lzY2FsbFBvbGljeS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbGludXgvU2VjY29t
cEZpbHRlcnMvU3lzY2FsbFBvbGljeS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IGY2MWJjODYxNzVkMjgwOWYzYjI2ZGY0YjhmZjQ0MmY0YzgzNjA0MjkuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL2xp
bnV4L1NlY2NvbXBGaWx0ZXJzL1N5c2NhbGxQb2xpY3kuY3BwCisrKyAvZGV2L251bGwKQEAgLTEs
Mjk1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgSW50ZWwgQ29ycG9yYXRpb24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJTeXNjYWxsUG9saWN5LmgiCi0KLSNpZiBFTkFCTEUoU0VDQ09NUF9GSUxURVJTKQot
Ci0jaW5jbHVkZSAiUGx1Z2luU2VhcmNoUGF0aC5oIgotI2luY2x1ZGUgIldlYlByb2Nlc3NDcmVh
dGlvblBhcmFtZXRlcnMuaCIKLSNpbmNsdWRlICJYREdCYXNlRGlyZWN0b3J5LmgiCi0jaW5jbHVk
ZSA8bGliZ2VuLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8c3lzL3N0YXQuaD4K
LSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLQotbmFtZXNwYWNl
IFdlYktpdCB7Ci0KLXN0YXRpYyBTdHJpbmcgcmVtb3ZlVHJhaWxpbmdTbGFzaChjb25zdCBTdHJp
bmcmIHBhdGgpCi17Ci0gICAgaWYgKHBhdGguZW5kc1dpdGgoJy8nKSkKLSAgICAgICAgcmV0dXJu
IHBhdGgubGVmdChwYXRoLmxlbmd0aCgpIC0gMSk7Ci0KLSAgICByZXR1cm4gcGF0aDsKLX0KLQot
Ym9vbCBTeXNjYWxsUG9saWN5OjpoYXNQZXJtaXNzaW9uRm9yUGF0aChjb25zdCBjaGFyKiBwYXRo
LCBQZXJtaXNzaW9uIHBlcm1pc3Npb24pIGNvbnN0Ci17Ci0gICAgLy8gVGhlIHJvb3QgZGlyZWN0
b3J5IHBvbGljeSBuZWVkcyB0byBiZSBzZXQgYmVjYXVzZSBpdCBpcyB0aGUKLSAgICAvLyB1bHRp
bWF0ZSBmYWxsYmFjayB3aGVuIHJld2luZGluZyBkaXJlY3Rvcmllcy4KLSAgICBBU1NFUlQobV9k
aXJlY3RvcnlQZXJtaXNzaW9uLmNvbnRhaW5zKCIvIikpOwotCi0gICAgaWYgKHBlcm1pc3Npb24g
PT0gTm90QWxsb3dlZCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgY2hhciogYmFzZVBh
dGggPSBzdHJkdXAocGF0aCk7Ci0gICAgY2hhciogY2Fub25pY2FsUGF0aCA9IGNhbm9uaWNhbGl6
ZV9maWxlX25hbWUoYmFzZVBhdGgpOwotCi0gICAgd2hpbGUgKGNhbm9uaWNhbFBhdGgpIHsKLSAg
ICAgICAgc3RydWN0IHN0YXQgcGF0aFN0YXQ7Ci0gICAgICAgIGlmIChzdGF0KGNhbm9uaWNhbFBh
dGgsICZwYXRoU3RhdCkgPT0gLTEpIHsKLSAgICAgICAgICAgIGZyZWUoYmFzZVBhdGgpOwotICAg
ICAgICAgICAgZnJlZShjYW5vbmljYWxQYXRoKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgfQotCi0gICAgICAgIGlmIChTX0lTRElSKHBhdGhTdGF0LnN0X21vZGUpKQotICAg
ICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgUGVybWlzc2lvbk1hcDo6Y29uc3RfaXRlcmF0b3Ig
cG9saWN5ID0gbV9maWxlUGVybWlzc2lvbi5maW5kKFN0cmluZyhjYW5vbmljYWxQYXRoKSk7Ci0g
ICAgICAgIGlmIChwb2xpY3kgIT0gbV9maWxlUGVybWlzc2lvbi5lbmQoKSkgewotICAgICAgICAg
ICAgZnJlZShiYXNlUGF0aCk7Ci0gICAgICAgICAgICBmcmVlKGNhbm9uaWNhbFBhdGgpOwotICAg
ICAgICAgICAgcmV0dXJuIChwZXJtaXNzaW9uICYgcG9saWN5LT52YWx1ZSkgPT0gcGVybWlzc2lv
bjsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIElmIG5vdCBhIGRpcmVjdG9yeSBuZWl0aGVyIGEg
ZmlsZSB3aXRoIGEgcG9saWN5IGRlZmluZWQsCi0gICAgICAgIC8vIHdlIHNldCBjYW5vbmljYWxQ
YXRoIHRvIHplcm8gdG8gZm9yY2UgYSByZXdpbmQgdG8gdGhlIHBhcmVudAotICAgICAgICAvLyBk
aXJlY3RvcnkuCi0gICAgICAgIGZyZWUoY2Fub25pY2FsUGF0aCk7Ci0gICAgICAgIGNhbm9uaWNh
bFBhdGggPSAwOwotICAgIH0KLQotICAgIHdoaWxlICghY2Fub25pY2FsUGF0aCkgewotICAgICAg
ICBjaGFyKiBjdXJyZW50QmFzZURpcmVjdG9yeSA9IGRpcm5hbWUoYmFzZVBhdGgpOwotICAgICAg
ICBjYW5vbmljYWxQYXRoID0gY2Fub25pY2FsaXplX2ZpbGVfbmFtZShjdXJyZW50QmFzZURpcmVj
dG9yeSk7Ci0gICAgfQotCi0gICAgUGVybWlzc2lvbk1hcDo6Y29uc3RfaXRlcmF0b3IgcG9saWN5
ID0gbV9kaXJlY3RvcnlQZXJtaXNzaW9uLmZpbmQoU3RyaW5nKGNhbm9uaWNhbFBhdGgpKTsKLSAg
ICB3aGlsZSAocG9saWN5ID09IG1fZGlyZWN0b3J5UGVybWlzc2lvbi5lbmQoKSkgewotICAgICAg
ICBjaGFyKiBjdXJyZW50QmFzZURpcmVjdG9yeSA9IGRpcm5hbWUoY2Fub25pY2FsUGF0aCk7Ci0g
ICAgICAgIHBvbGljeSA9IG1fZGlyZWN0b3J5UGVybWlzc2lvbi5maW5kKFN0cmluZyhjdXJyZW50
QmFzZURpcmVjdG9yeSkpOwotICAgIH0KLQotICAgIGZyZWUoYmFzZVBhdGgpOwotICAgIGZyZWUo
Y2Fub25pY2FsUGF0aCk7Ci0KLSAgICBpZiAoKHBlcm1pc3Npb24gJiBwb2xpY3ktPnZhbHVlKSA9
PSBwZXJtaXNzaW9uKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIC8vIERvbid0IHdhcm4g
aWYgdGhlIGZpbGUgZG9lc24ndCBleGlzdCBhdCBhbGwuCi0gICAgaWYgKCFhY2Nlc3MocGF0aCwg
Rl9PSykgfHwgZXJybm8gIT0gRU5PRU5UKQotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkJsb2Nr
ZWQgaW1wZXJtaXNzaWJsZSAlcyBhY2Nlc3MgdG8gJXNcbiIsIFN5c2NhbGxQb2xpY3k6OnBlcm1p
c3Npb25Ub1N0cmluZyhwZXJtaXNzaW9uKSwgcGF0aCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQot
Ci1zdGF0aWMgU3RyaW5nIGNhbm9uaWNhbGl6ZUZpbGVOYW1lKGNvbnN0IFN0cmluZyYgcGF0aCkK
LXsKLSAgICBjaGFyKiBjYW5vbmljYWxpemVkUGF0aCA9IGNhbm9uaWNhbGl6ZV9maWxlX25hbWUo
cGF0aC51dGY4KCkuZGF0YSgpKTsKLSAgICBpZiAoY2Fub25pY2FsaXplZFBhdGgpIHsKLSAgICAg
ICAgU3RyaW5nIHJlc3VsdCA9IFN0cmluZzo6ZnJvbVVURjgoY2Fub25pY2FsaXplZFBhdGgpOwot
ICAgICAgICBmcmVlKGNhbm9uaWNhbGl6ZWRQYXRoKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsK
LSAgICB9Ci0gICAgcmV0dXJuIHBhdGg7Ci19Ci0KLXZvaWQgU3lzY2FsbFBvbGljeTo6YWRkRmls
ZVBlcm1pc3Npb24oY29uc3QgU3RyaW5nJiBwYXRoLCBQZXJtaXNzaW9uIHBlcm1pc3Npb24pCi17
Ci0gICAgQVNTRVJUKCFwYXRoLmlzRW1wdHkoKSAmJiBwYXRoLnN0YXJ0c1dpdGgoJy8nKSAgJiYg
IXBhdGguZW5kc1dpdGgoJy8nKSAmJiAhcGF0aC5jb250YWlucygiLy8iKSk7Ci0KLSAgICBtX2Zp
bGVQZXJtaXNzaW9uLnNldChjYW5vbmljYWxpemVGaWxlTmFtZShwYXRoKSwgcGVybWlzc2lvbik7
Ci19Ci0KLXZvaWQgU3lzY2FsbFBvbGljeTo6YWRkRGlyZWN0b3J5UGVybWlzc2lvbihjb25zdCBT
dHJpbmcmIHBhdGgsIFBlcm1pc3Npb24gcGVybWlzc2lvbikKLXsKLSAgICBBU1NFUlQocGF0aC5z
dGFydHNXaXRoKCcvJykgJiYgIXBhdGguY29udGFpbnMoIi8vIikgJiYgKHBhdGgubGVuZ3RoKCkg
PT0gMSB8fCAhcGF0aC5lbmRzV2l0aCgnLycpKSk7Ci0KLSAgICBtX2RpcmVjdG9yeVBlcm1pc3Np
b24uc2V0KGNhbm9uaWNhbGl6ZUZpbGVOYW1lKHBhdGgpLCBwZXJtaXNzaW9uKTsKLX0KLQotdm9p
ZCBTeXNjYWxsUG9saWN5OjphZGREZWZhdWx0V2ViUHJvY2Vzc1BvbGljeShjb25zdCBXZWJQcm9j
ZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzKQotewotICAgIC8vIERpcmVjdG9yaWVz
IHNldHRpbmdzIGNvbWluZyBmcm9tIHRoZSBVSVByb2Nlc3MuCi0gICAgaWYgKCFwYXJhbWV0ZXJz
LmFwcGxpY2F0aW9uQ2FjaGVEaXJlY3RvcnkuaXNFbXB0eSgpKQotICAgICAgICBhZGREaXJlY3Rv
cnlQZXJtaXNzaW9uKHJlbW92ZVRyYWlsaW5nU2xhc2gocGFyYW1ldGVycy5hcHBsaWNhdGlvbkNh
Y2hlRGlyZWN0b3J5KSwgUmVhZEFuZFdyaXRlKTsKLSAgICBpZiAoIXBhcmFtZXRlcnMud2ViU1FM
RGF0YWJhc2VEaXJlY3RvcnkuaXNFbXB0eSgpKQotICAgICAgICBhZGREaXJlY3RvcnlQZXJtaXNz
aW9uKHJlbW92ZVRyYWlsaW5nU2xhc2gocGFyYW1ldGVycy53ZWJTUUxEYXRhYmFzZURpcmVjdG9y
eSksIFJlYWRBbmRXcml0ZSk7Ci0gICAgaWYgKCFwYXJhbWV0ZXJzLmNvb2tpZVN0b3JhZ2VEaXJl
Y3RvcnkuaXNFbXB0eSgpKQotICAgICAgICBhZGREaXJlY3RvcnlQZXJtaXNzaW9uKHJlbW92ZVRy
YWlsaW5nU2xhc2gocGFyYW1ldGVycy5jb29raWVTdG9yYWdlRGlyZWN0b3J5KSwgUmVhZEFuZFdy
aXRlKTsKLQotICAgIC8vIFRoZSByb290IHBvbGljeSB3aWxsIGJsb2NrIGFjY2VzcyB0byBhbnkg
ZGlyZWN0b3J5IG9yCi0gICAgLy8gZmlsZSB1bmxlc3Mgd2hpdGUgbGlzdGVkIGJlbGxvdyBvciBi
eSBwbGF0Zm9ybS4KLSAgICBhZGREaXJlY3RvcnlQZXJtaXNzaW9uKEFTQ0lJTGl0ZXJhbCgiLyIp
LCBOb3RBbGxvd2VkKTsKLQotICAgIC8vIFN5c3RlbSBsaWJyYXJ5IGRpcmVjdG9yaWVzCi0gICAg
YWRkRGlyZWN0b3J5UGVybWlzc2lvbihBU0NJSUxpdGVyYWwoIi9saWIiKSwgUmVhZCk7Ci0gICAg
YWRkRGlyZWN0b3J5UGVybWlzc2lvbihBU0NJSUxpdGVyYWwoIi9saWIzMiIpLCBSZWFkKTsKLSAg
ICBhZGREaXJlY3RvcnlQZXJtaXNzaW9uKEFTQ0lJTGl0ZXJhbCgiL2xpYjY0IiksIFJlYWQpOwot
ICAgIGFkZERpcmVjdG9yeVBlcm1pc3Npb24oQVNDSUlMaXRlcmFsKCIvdXNyL2xpYiIpLCBSZWFk
KTsKLSAgICBhZGREaXJlY3RvcnlQZXJtaXNzaW9uKEFTQ0lJTGl0ZXJhbCgiL3Vzci9saWIzMiIp
LCBSZWFkKTsKLSAgICBhZGREaXJlY3RvcnlQZXJtaXNzaW9uKEFTQ0lJTGl0ZXJhbCgiL3Vzci9s
aWI2NCIpLCBSZWFkKTsKLSAgICBhZGREaXJlY3RvcnlQZXJtaXNzaW9uKEFTQ0lJTGl0ZXJhbCgi
L3Vzci9sb2NhbC9saWIiKSwgUmVhZCk7Ci0gICAgYWRkRGlyZWN0b3J5UGVybWlzc2lvbihBU0NJ
SUxpdGVyYWwoIi91c3IvbG9jYWwvbGliMzIiKSwgUmVhZCk7Ci0gICAgYWRkRGlyZWN0b3J5UGVy
bWlzc2lvbihBU0NJSUxpdGVyYWwoIi91c3IvbG9jYWwvbGliNjQiKSwgUmVhZCk7Ci0gICAgYWRk
RGlyZWN0b3J5UGVybWlzc2lvbihBU0NJSUxpdGVyYWwoTElCRElSKSwgUmVhZCk7Ci0KLSAgICAv
LyBTeXN0ZW0gZGF0YSBkaXJlY3RvcmllcwotICAgIGFkZERpcmVjdG9yeVBlcm1pc3Npb24oQVND
SUlMaXRlcmFsKCIvdXNyL3NoYXJlIiksIFJlYWQpOwotICAgIGFkZERpcmVjdG9yeVBlcm1pc3Np
b24oQVNDSUlMaXRlcmFsKCIvdXNyL2xvY2FsL3NoYXJlIiksIFJlYWQpOwotICAgIGFkZERpcmVj
dG9yeVBlcm1pc3Npb24oQVNDSUlMaXRlcmFsKERBVEFESVIpLCBSZWFkKTsKLQotICAgIC8vIE5Q
QVBJIHBsdWdpbnMKLSAgICBmb3IgKFN0cmluZyYgcGF0aCA6IHBsdWdpbnNEaXJlY3Rvcmllcygp
KQotICAgICAgICBhZGREaXJlY3RvcnlQZXJtaXNzaW9uKHBhdGgsIFJlYWQpOwotCi0gICAgLy8g
U1NMIENlcnRpZmljYXRlcy4KLSAgICBhZGREaXJlY3RvcnlQZXJtaXNzaW9uKEFTQ0lJTGl0ZXJh
bCgiL2V0Yy9zc2wvY2VydHMiKSwgUmVhZCk7Ci0KLSAgICAvLyBBdWRpbyBkZXZpY2VzLCByYW5k
b20gbnVtYmVyIGdlbmVyYXRvcnMsIGV0Yy4KLSAgICBhZGREaXJlY3RvcnlQZXJtaXNzaW9uKEFT
Q0lJTGl0ZXJhbCgiL2RldiIpLCBSZWFkQW5kV3JpdGUpOwotCi0gICAgLy8gVGVtcG9yYXJ5IGZp
bGVzIGFuZCBwcm9jZXNzIHNlbGYgaW5mb3JtYXRpb24uCi0gICAgYWRkRGlyZWN0b3J5UGVybWlz
c2lvbihBU0NJSUxpdGVyYWwoIi90bXAiKSwgUmVhZEFuZFdyaXRlKTsKLSAgICBhZGREaXJlY3Rv
cnlQZXJtaXNzaW9uKEFTQ0lJTGl0ZXJhbCgiL3Byb2MvIikgKyBTdHJpbmc6Om51bWJlcihnZXRw
aWQoKSksIFJlYWRBbmRXcml0ZSk7Ci0KLSAgICAvLyBJbiBzb21lIGRpc3Ryb3MgL2Rldi9zaG0g
aXMgYSBzeW1ib2xpYyBsaW5rIHRvIC9ydW4vc2htLCBhbmQgaW4KLSAgICAvLyB0aGlzIGNhc2Us
IHRoZSBjYW5vbmljYWwgcGF0aCByZXNvbHZlciB3aWxsIGZvbGxvdyB0aGUgbGluay4gSWYKLSAg
ICAvLyBpbnNpZGUgL2RldiwgdGhlIHBvbGljeSBpcyBhbHJlYWR5IHNldC4KLSAgICBhZGREaXJl
Y3RvcnlQZXJtaXNzaW9uKEFTQ0lJTGl0ZXJhbCgiL3J1bi9zaG0iKSwgUmVhZEFuZFdyaXRlKTsK
LQotICAgIC8vIE5lZWRlZCBieSBnbGliYyBmb3IgbmV0d29ya2luZyBhbmQgbG9jYWxlLgotICAg
IGFkZEZpbGVQZXJtaXNzaW9uKEFTQ0lJTGl0ZXJhbCgiL2V0Yy9nYWkuY29uZiIpLCBSZWFkKTsK
LSAgICBhZGRGaWxlUGVybWlzc2lvbihBU0NJSUxpdGVyYWwoIi9ldGMvaG9zdC5jb25mIiksIFJl
YWQpOwotICAgIGFkZEZpbGVQZXJtaXNzaW9uKEFTQ0lJTGl0ZXJhbCgiL2V0Yy9ob3N0cyIpLCBS
ZWFkKTsKLSAgICBhZGRGaWxlUGVybWlzc2lvbihBU0NJSUxpdGVyYWwoIi9ldGMvbG9jYWx0aW1l
IiksIFJlYWQpOwotICAgIGFkZEZpbGVQZXJtaXNzaW9uKEFTQ0lJTGl0ZXJhbCgiL2V0Yy9uc3N3
aXRjaC5jb25mIiksIFJlYWQpOwotCi0gICAgLy8gTmVlZGVkIGZvciBETlMgcmVzb2x0aW9uLiBJ
biBzb21lIGRpc3Ryb3MsIHRoZSByZXNvbHYuY29uZiBpbnNpZGUKLSAgICAvLyAvZXRjIGlzIGp1
c3QgYSBzeW1ib2xpYyBsaW5rLgotICAgIGFkZEZpbGVQZXJtaXNzaW9uKEFTQ0lJTGl0ZXJhbCgi
L2V0Yy9yZXNvbHYuY29uZiIpLCBSZWFkKTsKLSAgICBhZGRGaWxlUGVybWlzc2lvbihBU0NJSUxp
dGVyYWwoIi9ydW4vcmVzb2x2Y29uZi9yZXNvbHYuY29uZiIpLCBSZWFkKTsKLQotICAgIC8vIE5l
ZWRlZCB0byBjb252ZXJ0IHVpZCBhbmQgZ2lkIGludG8gbmFtZXMuCi0gICAgYWRkRmlsZVBlcm1p
c3Npb24oQVNDSUlMaXRlcmFsKCIvZXRjL2dyb3VwIiksIFJlYWQpOwotICAgIGFkZEZpbGVQZXJt
aXNzaW9uKEFTQ0lJTGl0ZXJhbCgiL2V0Yy9wYXNzd2QiKSwgUmVhZCk7Ci0KLSAgICAvLyBOZWVk
ZWQgYnkgdGhlIGxvYWRlci4KLSAgICBhZGRGaWxlUGVybWlzc2lvbihBU0NJSUxpdGVyYWwoIi9l
dGMvbGQuc28uY2FjaGUiKSwgUmVhZCk7Ci0KLSAgICAvLyBOZWVkZWQgYnkgdmFyaW91cywgaW5j
bHVkaW5nIHRvb2xraXRzLCBmb3Igb3B0aW1pemF0aW9ucyBiYXNlZAotICAgIC8vIG9uIHRoZSBj
dXJyZW50IGFtb3VudCBvZiBmcmVlIHN5c3RlbSBtZW1vcnkuCi0gICAgYWRkRmlsZVBlcm1pc3Np
b24oQVNDSUlMaXRlcmFsKCIvcHJvYy9jcHVpbmZvIiksIFJlYWQpOwotICAgIGFkZEZpbGVQZXJt
aXNzaW9uKEFTQ0lJTGl0ZXJhbCgiL3Byb2MvZmlsZXN5c3RlbXMiKSwgUmVhZCk7Ci0gICAgYWRk
RmlsZVBlcm1pc3Npb24oQVNDSUlMaXRlcmFsKCIvcHJvYy9tZW1pbmZvIiksIFJlYWQpOwotICAg
IGFkZEZpbGVQZXJtaXNzaW9uKEFTQ0lJTGl0ZXJhbCgiL3Byb2Mvc3RhdCIpLCBSZWFkKTsKLQot
ICAgIC8vIE5lZWRlZCBieSBELUJ1cy4KLSAgICBhZGRGaWxlUGVybWlzc2lvbihBU0NJSUxpdGVy
YWwoIi92YXIvbGliL2RidXMvbWFjaGluZS1pZCIpLCBSZWFkKTsKLQotICAgIC8vIE5lZWRlZCBi
eSBhdC1zcGkyLgotICAgIC8vIEZJWE1FIFRoaXMgaXMgdG9vIHBlcm1pc3NpdmU6IGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDMwMDQKLSAgICBhZGREaXJlY3RvcnlQ
ZXJtaXNzaW9uKCIvcnVuL3VzZXIvIiArIFN0cmluZzo6bnVtYmVyKGdldHVpZCgpKSwgUmVhZEFu
ZFdyaXRlKTsKLQotICAgIC8vIE5lZWRlZCBieSBXZWJLaXQncyBtZW1vcnkgcHJlc3N1cmUgaGFu
ZGxlci4KLSAgICBhZGRGaWxlUGVybWlzc2lvbihBU0NJSUxpdGVyYWwoIi9zeXMvZnMvY2dyb3Vw
L21lbW9yeS9tZW1vcnkucHJlc3N1cmVfbGV2ZWwiKSwgUmVhZCk7Ci0gICAgYWRkRmlsZVBlcm1p
c3Npb24oQVNDSUlMaXRlcmFsKCIvc3lzL2ZzL2Nncm91cC9tZW1vcnkvY2dyb3VwLmV2ZW50X2Nv
bnRyb2wiKSwgUmVhZCk7Ci0KLSAgICAvLyBYMTEgY29ubmVjdGlvbiB0b2tlbi4KLSAgICBhZGRG
aWxlUGVybWlzc2lvbih1c2VySG9tZURpcmVjdG9yeSgpICsgIi8uWGF1dGhvcml0eSIsIFJlYWQp
OwotCi0gICAgLy8gTUlNRSB0eXBlIHJlc29sdXRpb24uCi0gICAgYWRkRGlyZWN0b3J5UGVybWlz
c2lvbih1c2VyRGF0YURpcmVjdG9yeSgpICsgIi9taW1lIiwgUmVhZCk7Ci0KLSAgICAvLyBOZWVk
ZWQgYnkgTlZJRElBIHByb3ByaWV0YXJ5IGdyYXBoaWNzIGRyaXZlci4KLSAgICBhZGREaXJlY3Rv
cnlQZXJtaXNzaW9uKHVzZXJIb21lRGlyZWN0b3J5KCkgKyAiLy5udiIsIFJlYWRBbmRXcml0ZSk7
Ci0KLSAgICAvLyBOZWVkZWQgYnkgdWRldi4KLSAgICBhZGREaXJlY3RvcnlQZXJtaXNzaW9uKEFT
Q0lJTGl0ZXJhbCgiL2V0Yy91ZGV2IiksIFJlYWQpOwotICAgIGFkZERpcmVjdG9yeVBlcm1pc3Np
b24oQVNDSUlMaXRlcmFsKCIvcnVuL3VkZXYiKSwgUmVhZCk7Ci0gICAgYWRkRGlyZWN0b3J5UGVy
bWlzc2lvbihBU0NJSUxpdGVyYWwoIi9zeXMvYnVzIiksIFJlYWQpOwotICAgIGFkZERpcmVjdG9y
eVBlcm1pc3Npb24oQVNDSUlMaXRlcmFsKCIvc3lzL2NsYXNzIiksIFJlYWQpOwotICAgIGFkZERp
cmVjdG9yeVBlcm1pc3Npb24oQVNDSUlMaXRlcmFsKCIvc3lzL2RldmljZXMiKSwgUmVhZCk7Ci0K
LSAgICAvLyBQdWxzZUF1ZGlvCi0gICAgYWRkRmlsZVBlcm1pc3Npb24oQVNDSUlMaXRlcmFsKCIv
ZXRjL2Fzb3VuZC5jb25mIiksIFJlYWQpOwotICAgIGFkZERpcmVjdG9yeVBlcm1pc3Npb24odXNl
ckNvbmZpZ0RpcmVjdG9yeSgpICsgIi8ucHVsc2UiLCBSZWFkKTsKLSAgICBhZGREaXJlY3RvcnlQ
ZXJtaXNzaW9uKHVzZXJIb21lRGlyZWN0b3J5KCkgKyAiLy5wdWxzZSIsIFJlYWQpOwotCi0gICAg
Ly8gTWVzYQotICAgIGFkZEZpbGVQZXJtaXNzaW9uKEFTQ0lJTGl0ZXJhbCgiL2V0Yy9kcmlyYyIp
LCBSZWFkKTsKLSAgICBhZGRGaWxlUGVybWlzc2lvbih1c2VySG9tZURpcmVjdG9yeSgpICsgIi8u
ZHJpcmMiLCBSZWFkKTsKLSAgICBhZGRGaWxlUGVybWlzc2lvbihBU0NJSUxpdGVyYWwoIi9zeXMv
ZnMvc2VsaW51eC9ib29sZWFucy9hbGxvd19leGVjbWVtIiksIFJlYWQpOwotCi0gICAgLy8gR1N0
cmVhbWVyCi0gICAgYWRkRGlyZWN0b3J5UGVybWlzc2lvbihTdHJpbmc6OmZyb21VVEY4KExJQkVY
RUNESVIpICsgIi9nc3RyZWFtZXItMS4wIiwgUmVhZCk7Ci0gICAgYWRkRGlyZWN0b3J5UGVybWlz
c2lvbih1c2VyRGF0YURpcmVjdG9yeSgpICsgIi9nc3RyZWFtZXItMS4wIiwgUmVhZCk7Ci0gICAg
YWRkRGlyZWN0b3J5UGVybWlzc2lvbih1c2VyQ2FjaGVEaXJlY3RvcnkoKSArICIvZ3N0cmVhbWVy
LTEuMCIsIFJlYWRBbmRXcml0ZSk7Ci0gICAgYWRkRGlyZWN0b3J5UGVybWlzc2lvbih1c2VySG9t
ZURpcmVjdG9yeSgpICsgIi8uZnJlaTByLTEiLCBSZWFkQW5kV3JpdGUpOwotICAgIGlmIChjaGFy
KiBnc3RyZWFtZXJQbHVnaW5EaXJlY3RvcnkgPSBnZXRlbnYoIkdTVF9QTFVHSU5fUEFUSF8xXzAi
KSkKLSAgICAgICAgYWRkRGlyZWN0b3J5UGVybWlzc2lvbihnc3RyZWFtZXJQbHVnaW5EaXJlY3Rv
cnksIFJlYWQpOwotICAgIGlmIChjaGFyKiBnc3RyZWFtZXJSZWdpc3RyeUZpbGUgPSBnZXRlbnYo
IkdTVF9SRUdJU1RSWV8xXzAiKSkKLSAgICAgICAgYWRkRmlsZVBlcm1pc3Npb24oZ3N0cmVhbWVy
UmVnaXN0cnlGaWxlLCBSZWFkQW5kV3JpdGUpOwotCi0gICAgLy8gRm9udGNvbmZpZwotICAgIGFk
ZERpcmVjdG9yeVBlcm1pc3Npb24odXNlckNhY2hlRGlyZWN0b3J5KCkgKyAiL2ZvbnRjb25maWci
LCBSZWFkQW5kV3JpdGUpOwotICAgIGFkZERpcmVjdG9yeVBlcm1pc3Npb24odXNlckNvbmZpZ0Rp
cmVjdG9yeSgpICsgIi9mb250Y29uZmlnIiwgUmVhZCk7Ci0gICAgYWRkRGlyZWN0b3J5UGVybWlz
c2lvbih1c2VyQ29uZmlnRGlyZWN0b3J5KCkgKyAiL2ZvbnRzIiwgUmVhZCk7Ci0gICAgYWRkRGly
ZWN0b3J5UGVybWlzc2lvbih1c2VyRGF0YURpcmVjdG9yeSgpICsgIi9mb250cyIsIFJlYWQpOwot
ICAgIGFkZERpcmVjdG9yeVBlcm1pc3Npb24odXNlckhvbWVEaXJlY3RvcnkoKSArICIvZm9udGNv
bmZpZyIsIFJlYWQpOwotICAgIGFkZERpcmVjdG9yeVBlcm1pc3Npb24odXNlckhvbWVEaXJlY3Rv
cnkoKSArICIvLmZvbnRzIiwgUmVhZCk7Ci0gICAgYWRkRGlyZWN0b3J5UGVybWlzc2lvbihBU0NJ
SUxpdGVyYWwoIi9ldGMvZm9udHMiKSwgUmVhZCk7Ci0gICAgYWRkRGlyZWN0b3J5UGVybWlzc2lv
bihBU0NJSUxpdGVyYWwoIi92YXIvY2FjaGUvZm9udGNvbmZpZyIpLCBSZWFkKTsKLQotI2lmIEVO
QUJMRShERVZFTE9QRVJfTU9ERSkgJiYgZGVmaW5lZChTT1VSQ0VfRElSKQotICAgIC8vIERldmVs
b3BlcnMgdXNpbmcgYnVpbGQtd2Via2l0IGV4cGVjdCBzb21lIGxpYnJhcmllcyB0byBiZSBsb2Fk
ZWQKLSAgICAvLyBmcm9tIHRoZSBidWlsZCByb290IGRpcmVjdG9yeSBhbmQgdGhleSBhbHNvIG5l
ZWQgYWNjZXNzIHRvIGxheW91dCB0ZXN0Ci0gICAgLy8gZmlsZXMuCi0gICAgYWRkRGlyZWN0b3J5
UGVybWlzc2lvbihTdHJpbmc6OmZyb21VVEY4KFNPVVJDRV9ESVIpLCBTeXNjYWxsUG9saWN5OjpS
ZWFkQW5kV3JpdGUpOwotI2VuZGlmCi19Ci0KLWNvbnN0IGNoYXIqIFN5c2NhbGxQb2xpY3k6OnBl
cm1pc3Npb25Ub1N0cmluZyhQZXJtaXNzaW9uIHBlcm1pc3Npb24pCi17Ci0gICAgc3dpdGNoIChw
ZXJtaXNzaW9uKSB7Ci0gICAgY2FzZSBSZWFkOgotICAgICAgICByZXR1cm4gInJlYWQiOwotICAg
IGNhc2UgV3JpdGU6Ci0gICAgICAgIHJldHVybiAid3JpdGUiOwotICAgIGNhc2UgUmVhZEFuZFdy
aXRlOgotICAgICAgICByZXR1cm4gInJlYWQvd3JpdGUiOwotICAgIGNhc2UgTm90QWxsb3dlZDoK
LSAgICAgICAgcmV0dXJuICJkaXNhbGxvd2VkIjsKLSAgICB9Ci0KLSAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKLSAgICByZXR1cm4gInVua25vd24gYWN0aW9uIjsKLX0KLQotfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBFTkFCTEUoU0VDQ09NUF9GSUxURVJTKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL2xpbnV4L1NlY2NvbXBGaWx0ZXJzL1N5c2NhbGxQb2xp
Y3kuaCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9saW51eC9TZWNjb21wRmlsdGVycy9TeXNjYWxs
UG9saWN5LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIyNjgwZGM5YWIwODgxMTQy
OGU4ZDk2OGQwODUyZTc1NzMxMWY3OTIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL2xpbnV4L1NlY2NvbXBGaWx0ZXJz
L1N5c2NhbGxQb2xpY3kuaAorKysgL2Rldi9udWxsCkBAIC0xLDY3ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNpZm5kZWYgU3lzY2FsbFBvbGljeV9oCi0jZGVmaW5lIFN5c2NhbGxQb2xp
Y3lfaAotCi0jaWYgRU5BQkxFKFNFQ0NPTVBfRklMVEVSUykKLQotI2luY2x1ZGUgPHd0Zi9IYXNo
TWFwLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgotI2luY2x1ZGUgPHd0Zi90
ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotc3RydWN0IFdlYlByb2Nl
c3NDcmVhdGlvblBhcmFtZXRlcnM7Ci0KLWNsYXNzIFN5c2NhbGxQb2xpY3kgewotcHVibGljOgot
ICAgIGVudW0gUGVybWlzc2lvbiB7Ci0gICAgICAgIE5vdEFsbG93ZWQgICA9IDAsCi0gICAgICAg
IFJlYWQgICAgICAgICA9IDEsCi0gICAgICAgIFdyaXRlICAgICAgICA9IDEgPDwgMSwKLSAgICAg
ICAgUmVhZEFuZFdyaXRlID0gUmVhZCB8IFdyaXRlCi0gICAgfTsKLQotICAgIGJvb2wgaGFzUGVy
bWlzc2lvbkZvclBhdGgoY29uc3QgY2hhciogcGF0aCwgUGVybWlzc2lvbikgY29uc3Q7Ci0KLSAg
ICB2b2lkIGFkZEZpbGVQZXJtaXNzaW9uKGNvbnN0IFN0cmluZyYgcGF0aCwgUGVybWlzc2lvbik7
Ci0gICAgdm9pZCBhZGREaXJlY3RvcnlQZXJtaXNzaW9uKGNvbnN0IFN0cmluZyYgcGF0aCwgUGVy
bWlzc2lvbik7Ci0KLSAgICB2b2lkIGFkZERlZmF1bHRXZWJQcm9jZXNzUG9saWN5KGNvbnN0IFdl
YlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMmKTsKLQotICAgIHN0YXRpYyBjb25zdCBjaGFyKiBw
ZXJtaXNzaW9uVG9TdHJpbmcoUGVybWlzc2lvbik7Ci0KLXByaXZhdGU6Ci0gICAgdHlwZWRlZiBI
YXNoTWFwPFN0cmluZywgaW50PiBQZXJtaXNzaW9uTWFwOwotICAgIFBlcm1pc3Npb25NYXAgbV9m
aWxlUGVybWlzc2lvbjsKLSAgICBQZXJtaXNzaW9uTWFwIG1fZGlyZWN0b3J5UGVybWlzc2lvbjsK
LX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gRU5BQkxFKFNFQ0NPTVBf
RklMVEVSUykKLQotI2VuZGlmIC8vIFN5c2NhbGxQb2xpY3lfaApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvU2hhcmVkL2xpbnV4L1NlY2NvbXBGaWx0ZXJzL1hER0Jhc2VEaXJlY3RvcnkuaCBi
L1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9saW51eC9TZWNjb21wRmlsdGVycy9YREdCYXNlRGlyZWN0
b3J5LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdlNjhjNWExMTVhNjViMTUxYjM4
OTg3YjYwZTM3OWJlY2RkMjU2YzUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL2xpbnV4L1NlY2NvbXBGaWx0ZXJzL1hE
R0Jhc2VEaXJlY3RvcnkuaAorKysgL2Rldi9udWxsCkBAIC0xLDQ2ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTUgSWdhbGlhIFMuTC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgWERH
QmFzZURpcmVjdG9yeV9oCi0jZGVmaW5lIFhER0Jhc2VEaXJlY3RvcnlfaAotCi0jaWYgRU5BQkxF
KFNFQ0NPTVBfRklMVEVSUykKLQotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1u
YW1lc3BhY2UgV2ViS2l0IHsKLQotU3RyaW5nIHVzZXJDYWNoZURpcmVjdG9yeSgpOwotU3RyaW5n
IHVzZXJDb25maWdEaXJlY3RvcnkoKTsKLVN0cmluZyB1c2VyRGF0YURpcmVjdG9yeSgpOwotU3Ry
aW5nIHVzZXJIb21lRGlyZWN0b3J5KCk7Ci1TdHJpbmcgdXNlclJ1bnRpbWVEaXJlY3RvcnkoKTsK
LQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBFTkFCTEUoU0VDQ09NUF9GSUxU
RVJTKQotCi0jZW5kaWYgLy8gWERHQmFzZURpcmVjdG9yeV9oCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9TaGFyZWQvbGludXgvU2VjY29tcEZpbHRlcnMvWERHQmFzZURpcmVjdG9yeUdMaWIu
Y3BwIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL2xpbnV4L1NlY2NvbXBGaWx0ZXJzL1hER0Jhc2VE
aXJlY3RvcnlHTGliLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDZkYWZlZGZh
OTcwNjU4MWU3MTgxZDdjOWQwNzg2ZGIwMzUxNmU5MS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbGludXgvU2VjY29t
cEZpbHRlcnMvWERHQmFzZURpcmVjdG9yeUdMaWIuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNjMg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBJZ2FsaWEgUy5MLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
LSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
Ci0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlhER0Jhc2VEaXJlY3RvcnkuaCIK
LQotI2lmIEVOQUJMRShTRUNDT01QX0ZJTFRFUlMpCi0KLSNpbmNsdWRlIDxnbGliLmg+Ci0KLW5h
bWVzcGFjZSBXZWJLaXQgewotCi1TdHJpbmcgdXNlckhvbWVEaXJlY3RvcnkoKQotewotICAgIHJl
dHVybiBTdHJpbmc6OmZyb21VVEY4KGdfZ2V0X2hvbWVfZGlyKCkpOwotfQotCi1TdHJpbmcgdXNl
ckNhY2hlRGlyZWN0b3J5KCkKLXsKLSAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChnX2dldF91
c2VyX2NhY2hlX2RpcigpKTsKLX0KLQotU3RyaW5nIHVzZXJDb25maWdEaXJlY3RvcnkoKQotewot
ICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KGdfZ2V0X3VzZXJfY29uZmlnX2RpcigpKTsKLX0K
LQotU3RyaW5nIHVzZXJEYXRhRGlyZWN0b3J5KCkKLXsKLSAgICByZXR1cm4gU3RyaW5nOjpmcm9t
VVRGOChnX2dldF91c2VyX2RhdGFfZGlyKCkpOwotfQotCi1TdHJpbmcgdXNlclJ1bnRpbWVEaXJl
Y3RvcnkoKQotewotICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KGdfZ2V0X3VzZXJfcnVudGlt
ZV9kaXIoKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gRU5BQkxF
KFNFQ0NPTVBfRklMVEVSUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9X
ZWJQcm9jZXNzUG9vbC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bv
b2wuY3BwCmluZGV4IGViOWMyZmQyNzllZmQ3NGZkM2I4MDJlZWMxYTRiZmNhM2ZlOWUyZGMuLmJk
YWU1ZjIzZmNjNTYyNDhkZmU0OTJiYjhiMzFhYjc5MmEwYjVhMjAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHAKKysrIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcApAQCAtMzUzLDEwICszNTMsNiBAQCBOZXR3
b3JrUHJvY2Vzc1Byb3h5JiBXZWJQcm9jZXNzUG9vbDo6ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKQog
ICAgIGlmICghcGFyYW1ldGVycy5kaXNrQ2FjaGVEaXJlY3RvcnkuaXNFbXB0eSgpKQogICAgICAg
ICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkocGFy
YW1ldGVycy5kaXNrQ2FjaGVEaXJlY3RvcnksIHBhcmFtZXRlcnMuZGlza0NhY2hlRGlyZWN0b3J5
RXh0ZW5zaW9uSGFuZGxlKTsKIAotI2lmIEVOQUJMRShTRUNDT01QX0ZJTFRFUlMpCi0gICAgcGFy
YW1ldGVycy5jb29raWVTdG9yYWdlRGlyZWN0b3J5ID0gdGhpcy0+Y29va2llU3RvcmFnZURpcmVj
dG9yeSgpOwotI2VuZGlmCi0KICNpZiBQTEFURk9STShJT1MpCiAgICAgU3RyaW5nIGNvb2tpZVN0
b3JhZ2VEaXJlY3RvcnkgPSB0aGlzLT5jb29raWVTdG9yYWdlRGlyZWN0b3J5KCk7CiAgICAgaWYg
KCFjb29raWVTdG9yYWdlRGlyZWN0b3J5LmlzRW1wdHkoKSkKQEAgLTU1MSwxMCArNTQ3LDYgQEAg
V2ViUHJvY2Vzc1Byb3h5JiBXZWJQcm9jZXNzUG9vbDo6Y3JlYXRlTmV3V2ViUHJvY2VzcygpCiAg
ICAgcGFyYW1ldGVycy5tZWRpYUNhY2hlRGlyZWN0b3J5ID0gbV9jb25maWd1cmF0aW9uLT5tZWRp
YUNhY2hlRGlyZWN0b3J5KCk7CiAgICAgaWYgKCFwYXJhbWV0ZXJzLm1lZGlhQ2FjaGVEaXJlY3Rv
cnkuaXNFbXB0eSgpKQogICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JS
ZWFkV3JpdGVEaXJlY3RvcnkocGFyYW1ldGVycy5tZWRpYUNhY2hlRGlyZWN0b3J5LCBwYXJhbWV0
ZXJzLm1lZGlhQ2FjaGVEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotICAgIAotI2lmIEVOQUJM
RShTRUNDT01QX0ZJTFRFUlMpCi0gICAgcGFyYW1ldGVycy5jb29raWVTdG9yYWdlRGlyZWN0b3J5
ID0gdGhpcy0+Y29va2llU3RvcmFnZURpcmVjdG9yeSgpOwotI2VuZGlmCiAKICNpZiBQTEFURk9S
TShJT1MpCiAgICAgU3RyaW5nIGNvb2tpZVN0b3JhZ2VEaXJlY3RvcnkgPSB0aGlzLT5jb29raWVT
dG9yYWdlRGlyZWN0b3J5KCk7CkBAIC0xMDgyLDE3ICsxMDc0LDYgQEAgU3RyaW5nIFdlYlByb2Nl
c3NQb29sOjppY29uRGF0YWJhc2VQYXRoKCkgY29uc3QKICAgICByZXR1cm4gcGxhdGZvcm1EZWZh
dWx0SWNvbkRhdGFiYXNlUGF0aCgpOwogfQogCi0jaWYgRU5BQkxFKFNFQ0NPTVBfRklMVEVSUykK
LVN0cmluZyBXZWJQcm9jZXNzUG9vbDo6Y29va2llU3RvcmFnZURpcmVjdG9yeSgpIGNvbnN0Ci17
Ci0gICAgaWYgKCFtX292ZXJyaWRlQ29va2llU3RvcmFnZURpcmVjdG9yeS5pc0VtcHR5KCkpCi0g
ICAgICAgIHJldHVybiBtX292ZXJyaWRlQ29va2llU3RvcmFnZURpcmVjdG9yeTsKLQotICAgIC8v
IEZJWE1FOiBUaGlzIGRvZXNuJ3QgbWFrZSBtdWNoIHNlbnNlLiBJcyB0aGlzIGZ1bmN0aW9uIHVz
ZWQgYXQgYWxsPyBXZSB1c2VkIHRvIGNhbGwgcGxhdGZvcm0gY29kZSwgYnV0IG5vIGV4aXN0aW5n
IHBsYXRmb3JtcyBpbXBsZW1lbnRlZCB0aGF0IGZ1bmN0aW9uLgotICAgIHJldHVybiBlbXB0eVN0
cmluZygpOwotfQotI2VuZGlmCi0KIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnVzZVRlc3RpbmdOZXR3
b3JrU2Vzc2lvbigpCiB7CiAgICAgQVNTRVJUKG1fcHJvY2Vzc2VzLmlzRW1wdHkoKSk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuaCBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5oCmluZGV4IGE3ODhmNzI4MTQwNzBm
OGY4YzJlODAxOWFmMDE1MGQxN2QwNzE2NmQuLjlmZDE0MzM2MGUwM2JmNGY4MTcyMzEyMjJlYjFh
ZDQ2MmFjYjA2YmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQcm9j
ZXNzUG9vbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5o
CkBAIC00MDEsNyArNDAxLDcgQEAgcHJpdmF0ZToKIAogICAgIFN0cmluZyBwbGF0Zm9ybURlZmF1
bHRJY29uRGF0YWJhc2VQYXRoKCkgY29uc3Q7CiAKLSNpZiBQTEFURk9STShJT1MpIHx8IEVOQUJM
RShTRUNDT01QX0ZJTFRFUlMpCisjaWYgUExBVEZPUk0oSU9TKQogICAgIFN0cmluZyBjb29raWVT
dG9yYWdlRGlyZWN0b3J5KCkgY29uc3Q7CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9lZmwvU2VjY29tcEZpbHRlcnNXZWJQcm9jZXNzRWZsLmNwcCBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvZWZsL1NlY2NvbXBGaWx0ZXJzV2ViUHJvY2Vzc0VmbC5j
cHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ5M2MwYjE2ZjZhODA0N2UzZmUxM2Ey
ZjZhYzdkYmEzZGE3YjBkMzMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9lZmwvU2VjY29tcEZpbHRlcnNXZWJQ
cm9jZXNzRWZsLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDc5ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJTZWNjb21wRmlsdGVyc1dl
YlByb2Nlc3NFZmwuaCIKLQotI2lmIEVOQUJMRShTRUNDT01QX0ZJTFRFUlMpCi0KLSNpbmNsdWRl
ICJXZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmgiCi0jaW5jbHVkZSA8V2ViS2l0L1NlY2Nv
bXBCcm9rZXIuaD4KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpbmNsdWRlIDx1bmlzdGQuaD4K
LQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLVNlY2NvbXBGaWx0ZXJzV2ViUHJvY2Vzc0VmbDo6U2Vj
Y29tcEZpbHRlcnNXZWJQcm9jZXNzRWZsKGNvbnN0IFdlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRl
cnMmIHBhcmFtZXRlcnMpCi0gICAgOiBTZWNjb21wRmlsdGVycyhBbGxvdykKLXsKLSAgICBtX3Bv
bGljeS5hZGREZWZhdWx0V2ViUHJvY2Vzc1BvbGljeShwYXJhbWV0ZXJzKTsKLX0KLQotdm9pZCBT
ZWNjb21wRmlsdGVyc1dlYlByb2Nlc3NFZmw6OnBsYXRmb3JtSW5pdGlhbGl6ZSgpCi17Ci0gICAg
Ly8gVE9ETzogV2Ugc2hvdWxkIGJsb2NrIGFsbCB0aGUgc3lzY2FsbHMgYW5kIHdoaXRlbGlzdAot
ICAgIC8vIHdoYXQgd2UgbmVlZCArIHRyYXAgd2hhdCBzaG91bGQgYmUgaGFuZGxlZCBieSB0aGUg
YnJva2VyLgotICAgIGFkZFJ1bGUoIm9wZW4iLCBUcmFwKTsKLSAgICBhZGRSdWxlKCJvcGVuYXQi
LCBUcmFwKTsKLSAgICBhZGRSdWxlKCJjcmVhdCIsIFRyYXApOwotCi0gICAgLy8gTmVlZGVkIGJ5
IEVlemUgb24gTmV0d29ya1N0YXRlTm90aWZpZXJFZmwuCi0gICAgbV9wb2xpY3kuYWRkRGlyZWN0
b3J5UGVybWlzc2lvbihBU0NJSUxpdGVyYWwoIi9zeXMvYnVzIiksIFN5c2NhbGxQb2xpY3k6OlJl
YWQpOwotICAgIG1fcG9saWN5LmFkZERpcmVjdG9yeVBlcm1pc3Npb24oQVNDSUlMaXRlcmFsKCIv
c3lzL2NsYXNzIiksIFN5c2NhbGxQb2xpY3k6OlJlYWQpOwotICAgIG1fcG9saWN5LmFkZERpcmVj
dG9yeVBlcm1pc3Npb24oQVNDSUlMaXRlcmFsKCIvc3lzL2RldmljZXMiKSwgU3lzY2FsbFBvbGlj
eTo6UmVhZCk7Ci0gICAgbV9wb2xpY3kuYWRkRmlsZVBlcm1pc3Npb24oQVNDSUlMaXRlcmFsKCIv
ZXRjL3VkZXYvdWRldi5jb25mIiksIFN5c2NhbGxQb2xpY3k6OlJlYWQpOwotCi0gICAgLy8gUGxh
Y2Ugd2hlcmUgdGhlIHRoZW1lIGFuZCBpY29ucyBhcmUgaW5zdGFsbGVkLgotICAgIGNoYXIqIGRh
dGFEaXIgPSBjYW5vbmljYWxpemVfZmlsZV9uYW1lKERBVEFfRElSKTsKLSAgICBpZiAoZGF0YURp
cikgewotICAgICAgICBtX3BvbGljeS5hZGREaXJlY3RvcnlQZXJtaXNzaW9uKFN0cmluZzo6ZnJv
bVVURjgoZGF0YURpciksIFN5c2NhbGxQb2xpY3k6OlJlYWQpOwotICAgICAgICBmcmVlKGRhdGFE
aXIpOwotICAgIH0KLQotI2lmIFVTRShHU1RSRUFNRVIpCi0gICAgLy8gVmlkZW8gcGxheWJhY2sg
cmVxdWlyZXMgYWNjZXNzIHRvIHRoZSByb290IG9mIHRoZSB1c2VyIGNhY2hlIGRpciB3aGljaAot
ICAgIC8vIGlzIG5vdCByaWdodC4gV2UgbmVlZCB0byBjaGVjayB3aXRoIHRoZXNlIGRpcmVjdG9y
aWVzIG9uIGdzdHJlYW1lcgotICAgIC8vIGNhbiBiZSBjb25maWd1cmVkLgotICAgIGNoYXIqIGhv
bWVEaXIgPSBnZXRlbnYoIkhPTUUiKTsKLSAgICBpZiAoaG9tZURpcikKLSAgICAgICAgbV9wb2xp
Y3kuYWRkRGlyZWN0b3J5UGVybWlzc2lvbihTdHJpbmc6OmZyb21VVEY4KGhvbWVEaXIpICsgIi8u
Y2FjaGUiLCBTeXNjYWxsUG9saWN5OjpSZWFkQW5kV3JpdGUpOwotI2VuZGlmCi0KLSAgICBTZWNj
b21wQnJva2VyOjpsYXVuY2hQcm9jZXNzKHRoaXMsIG1fcG9saWN5KTsKLX0KLQotfSAvLyBuYW1l
c3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBFTkFCTEUoU0VDQ09NUF9GSUxURVJTKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9lZmwvU2VjY29tcEZpbHRlcnNXZWJQcm9j
ZXNzRWZsLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2VmbC9TZWNjb21wRmlsdGVyc1dl
YlByb2Nlc3NFZmwuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGI0MGRjNDNiZjg5
MTFiMzlhNzA5MWEzNjU2MzAwMTI1ZmYzNjEzMi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2VmbC9TZWNjb21w
RmlsdGVyc1dlYlByb2Nlc3NFZmwuaAorKysgL2Rldi9udWxsCkBAIC0xLDUyICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgU2VjY29tcEZpbHRlcnNXZWJQcm9jZXNzRWZsX2gK
LSNkZWZpbmUgU2VjY29tcEZpbHRlcnNXZWJQcm9jZXNzRWZsX2gKLQotI2lmIEVOQUJMRShTRUND
T01QX0ZJTFRFUlMpCi0KLSNpbmNsdWRlIDxXZWJLaXQvU2VjY29tcEZpbHRlcnMuaD4KLSNpbmNs
dWRlIDxXZWJLaXQvU3lzY2FsbFBvbGljeS5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xh
c3MgV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVyczsKLQotY2xhc3MgU2VjY29tcEZpbHRlcnNX
ZWJQcm9jZXNzRWZsIDogcHVibGljIFNlY2NvbXBGaWx0ZXJzIHsKLXB1YmxpYzoKLSAgICBTZWNj
b21wRmlsdGVyc1dlYlByb2Nlc3NFZmwoY29uc3QgV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVy
cyYpOwotCi1wcml2YXRlOgotICAgIHZpcnR1YWwgdm9pZCBwbGF0Zm9ybUluaXRpYWxpemUoKTsK
LQotICAgIFN5c2NhbGxQb2xpY3kgbV9wb2xpY3k7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJL
aXQKLQotI2VuZGlmIC8vIEVOQUJMRShTRUNDT01QX0ZJTFRFUlMpCi0KLSNlbmRpZiAvLyBTZWNj
b21wRmlsdGVyc1dlYlByb2Nlc3NFZmxfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9ndGsvU2VjY29tcEZpbHRlcnNXZWJQcm9jZXNzR3RrLmNwcCBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvZ3RrL1NlY2NvbXBGaWx0ZXJzV2ViUHJvY2Vzc0d0ay5jcHAKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNmOTg2ZjgyN2E5NTY3NDRiMWY3NzRlNWRiZmJmNDY4
N2IzYjFiYTMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9ndGsvU2VjY29tcEZpbHRlcnNXZWJQcm9jZXNzR3Rr
LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDcwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTUgSWdhbGlhIFMuTC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0g
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgot
I2luY2x1ZGUgIlNlY2NvbXBGaWx0ZXJzV2ViUHJvY2Vzc0d0ay5oIgotCi0jaWYgRU5BQkxFKFNF
Q0NPTVBfRklMVEVSUykKLQotI2luY2x1ZGUgIlNlY2NvbXBCcm9rZXIuaCIKLSNpbmNsdWRlICJX
ZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmgiCi0jaW5jbHVkZSA8Z2xpYi5oPgotI2luY2x1
ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPHVuaXN0ZC5oPgotCi1uYW1lc3BhY2UgV2ViS2l0
IHsKLQotU2VjY29tcEZpbHRlcnNXZWJQcm9jZXNzR3RrOjpTZWNjb21wRmlsdGVyc1dlYlByb2Nl
c3NHdGsoY29uc3QgV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyYgcGFyYW1ldGVycykKLSAg
ICA6IFNlY2NvbXBGaWx0ZXJzKEFsbG93KQotewotICAgIG1fcG9saWN5LmFkZERlZmF1bHRXZWJQ
cm9jZXNzUG9saWN5KHBhcmFtZXRlcnMpOwotfQotCi12b2lkIFNlY2NvbXBGaWx0ZXJzV2ViUHJv
Y2Vzc0d0azo6cGxhdGZvcm1Jbml0aWFsaXplKCkKLXsKLSAgICAvLyBUT0RPOiBXZSBzaG91bGQg
YmxvY2sgYWxsIHRoZSBzeXNjYWxscyBhbmQgd2hpdGVsaXN0Ci0gICAgLy8gd2hhdCB3ZSBuZWVk
ICsgdHJhcCB3aGF0IHNob3VsZCBiZSBoYW5kbGVkIGJ5IHRoZSBicm9rZXIuCi0gICAgYWRkUnVs
ZSgib3BlbiIsIFRyYXApOwotICAgIGFkZFJ1bGUoIm9wZW5hdCIsIFRyYXApOwotICAgIGFkZFJ1
bGUoImNyZWF0IiwgVHJhcCk7Ci0KLSNpZiBVU0UoR1NUUkVBTUVSKQotICAgIG1fcG9saWN5LmFk
ZERpcmVjdG9yeVBlcm1pc3Npb24oU3RyaW5nOjpmcm9tVVRGOChnX2dldF91c2VyX2NhY2hlX2Rp
cigpKSArICIvZ3N0cmVhbWVyLTEuMCIsIFN5c2NhbGxQb2xpY3k6OlJlYWRBbmRXcml0ZSk7Ci0g
ICAgbV9wb2xpY3kuYWRkRGlyZWN0b3J5UGVybWlzc2lvbihTdHJpbmc6OmZyb21VVEY4KGdfZ2V0
X3VzZXJfZGF0YV9kaXIoKSkgKyAiL2dzdHJlYW1lci0xLjAiLCBTeXNjYWxsUG9saWN5OjpSZWFk
QW5kV3JpdGUpOwotICAgIG1fcG9saWN5LmFkZERpcmVjdG9yeVBlcm1pc3Npb24oU3RyaW5nOjpm
cm9tVVRGOChMSUJFWEVDRElSKSArICIvZ3N0cmVhbWVyLTEuMCIsIFN5c2NhbGxQb2xpY3k6OlJl
YWQpOwotI2VuZGlmCi0KLSAgICBtX3BvbGljeS5hZGREaXJlY3RvcnlQZXJtaXNzaW9uKFN0cmlu
Zzo6ZnJvbVVURjgoZ19nZXRfdXNlcl9kYXRhX2RpcigpKSArICIvZ3Zmcy1tZXRhZGF0YSIsIFN5
c2NhbGxQb2xpY3k6OlJlYWRBbmRXcml0ZSk7Ci0KLSAgICAvLyBGb3IgbGliWGF1Ci0gICAgbV9w
b2xpY3kuYWRkRGlyZWN0b3J5UGVybWlzc2lvbihBU0NJSUxpdGVyYWwoIi9ydW4vZ2RtIiksIFN5
c2NhbGxQb2xpY3k6OlJlYWQpOwotCi0gICAgU2VjY29tcEJyb2tlcjo6bGF1bmNoUHJvY2Vzcyh0
aGlzLCBtX3BvbGljeSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8g
RU5BQkxFKFNFQ0NPTVBfRklMVEVSUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvZ3RrL1NlY2NvbXBGaWx0ZXJzV2ViUHJvY2Vzc0d0ay5oIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9ndGsvU2VjY29tcEZpbHRlcnNXZWJQcm9jZXNzR3RrLmgKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDEzOWYxZjdmM2YxZjFjMzE5Mzk1YWQzMzk4OWVjZTMyMDllNjkx
NzMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9ndGsvU2VjY29tcEZpbHRlcnNXZWJQcm9jZXNzR3RrLmgKKysr
IC9kZXYvbnVsbApAQCAtMSw1MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIElu
dGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVm
IFNlY2NvbXBGaWx0ZXJzV2ViUHJvY2Vzc0d0a19oCi0jZGVmaW5lIFNlY2NvbXBGaWx0ZXJzV2Vi
UHJvY2Vzc0d0a19oCi0KLSNpZiBFTkFCTEUoU0VDQ09NUF9GSUxURVJTKQotCi0jaW5jbHVkZSAi
U2VjY29tcEZpbHRlcnMuaCIKLSNpbmNsdWRlICJTeXNjYWxsUG9saWN5LmgiCi0KLW5hbWVzcGFj
ZSBXZWJLaXQgewotCi1zdHJ1Y3QgV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVyczsKLQotY2xh
c3MgU2VjY29tcEZpbHRlcnNXZWJQcm9jZXNzR3RrIDogcHVibGljIFNlY2NvbXBGaWx0ZXJzIHsK
LXB1YmxpYzoKLSAgICBTZWNjb21wRmlsdGVyc1dlYlByb2Nlc3NHdGsoY29uc3QgV2ViUHJvY2Vz
c0NyZWF0aW9uUGFyYW1ldGVycyYpOwotCi1wcml2YXRlOgotICAgIHZvaWQgcGxhdGZvcm1Jbml0
aWFsaXplKCkgb3ZlcnJpZGU7Ci0KLSAgICBTeXNjYWxsUG9saWN5IG1fcG9saWN5OwotfTsKLQot
fSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBFTkFCTEUoU0VDQ09NUF9GSUxURVJT
KQotCi0jZW5kaWYgLy8gU2VjY29tcEZpbHRlcnNXZWJQcm9jZXNzR3RrX2gKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mvc291cC9XZWJQcm9jZXNzU291cC5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL3NvdXAvV2ViUHJvY2Vzc1NvdXAuY3BwCmluZGV4IGIxYjkz
Y2NhN2M5OTg4ZTRlY2UyMTcyZTUyMjU3NDAyZWQyN2EzM2UuLjVmZGEyMWI2MmEzMDA2Y2U1Y2Iz
OGYzNGFhNmRhNmRlMmZhYTNkNjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3Mvc291cC9XZWJQcm9jZXNzU291cC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9zb3VwL1dlYlByb2Nlc3NTb3VwLmNwcApAQCAtMjcsMTIgKzI3LDYgQEAKICNpbmNsdWRlICJj
b25maWcuaCIKICNpbmNsdWRlICJXZWJQcm9jZXNzLmgiCiAKLSNpZiBQTEFURk9STShFRkwpCi0j
aW5jbHVkZSAiU2VjY29tcEZpbHRlcnNXZWJQcm9jZXNzRWZsLmgiCi0jZWxpZiBQTEFURk9STShH
VEspCi0jaW5jbHVkZSAiU2VjY29tcEZpbHRlcnNXZWJQcm9jZXNzR3RrLmgiCi0jZW5kaWYKLQog
I2luY2x1ZGUgIkNlcnRpZmljYXRlSW5mby5oIgogI2luY2x1ZGUgIldlYkNvb2tpZU1hbmFnZXIu
aCIKICNpbmNsdWRlICJXZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmgiCkBAIC04NCwxNiAr
NzgsNiBAQCB2b2lkIFdlYlByb2Nlc3M6OnBsYXRmb3JtQ2xlYXJSZXNvdXJjZUNhY2hlcyhSZXNv
dXJjZUNhY2hlc1RvQ2xlYXIgY2FjaGVzVG9DbGVhcgogCiB2b2lkIFdlYlByb2Nlc3M6OnBsYXRm
b3JtSW5pdGlhbGl6ZVdlYlByb2Nlc3MoV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyYmIHBh
cmFtZXRlcnMpCiB7Ci0jaWYgRU5BQkxFKFNFQ0NPTVBfRklMVEVSUykKLSAgICB7Ci0jaWYgUExB
VEZPUk0oRUZMKQotICAgICAgICBTZWNjb21wRmlsdGVyc1dlYlByb2Nlc3NFZmwgc2VjY29tcEZp
bHRlcnMocGFyYW1ldGVycyk7Ci0jZWxpZiBQTEFURk9STShHVEspCi0gICAgICAgIFNlY2NvbXBG
aWx0ZXJzV2ViUHJvY2Vzc0d0ayBzZWNjb21wRmlsdGVycyhwYXJhbWV0ZXJzKTsKLSNlbmRpZgot
ICAgICAgICBzZWNjb21wRmlsdGVycy5pbml0aWFsaXplKCk7Ci0gICAgfQotI2VuZGlmCiB9CiAK
IHZvaWQgV2ViUHJvY2Vzczo6cGxhdGZvcm1UZXJtaW5hdGUoKQpkaWZmIC0tZ2l0IGEvU291cmNl
L2NtYWtlL0ZpbmRMaWJTZWNjb21wLmNtYWtlIGIvU291cmNlL2NtYWtlL0ZpbmRMaWJTZWNjb21w
LmNtYWtlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMTI5YzhiNzBmNjJjZWFhYzNj
NmE3NWE2ZjNkN2EzZDNjNDkwM2MyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9jbWFrZS9GaW5kTGliU2VjY29tcC5jbWFrZQorKysgL2Rldi9u
dWxsCkBAIC0xLDQ2ICswLDAgQEAKLSMgQ29weXJpZ2h0IChjKSAyMDEzLCBJbnRlbCBDb3Jwb3Jh
dGlvbgotIwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6Ci0jCi0jICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzCi0jICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0jICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAotIyAgIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KLSMg
ICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSMgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEludGVsIENvcnBvcmF0aW9uIG5vciB0aGUgbmFtZXMg
b2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkKLSMgICBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0Ci0jICAgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotIwotIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKLSMg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQotIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotIyBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUK
LSMgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgotIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSMgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKLSMgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0jCi0jIFRyeSB0byBmaW5kIGxpYnNlY2NvbXAgaW5jbHVk
ZSBhbmQgbGlicmFyeSBkaXJlY3Rvcmllcy4KLSMKLSMgQWZ0ZXIgc3VjY2Vzc2Z1bCBkaXNjb3Zl
cnksIHRoaXMgd2lsbCBzZXQgZm9yIGluY2x1c2lvbiB3aGVyZSBuZWVkZWQ6Ci0jIExJQlNFQ0NP
TVBfSU5DTFVERV9ESVJTIC0gY29udGFpbmcgdGhlIGxpYnNlY2NvbXAgaGVhZGVycwotIyBMSUJT
RUNDT01QX0xJQlJBUklFUyAtIGNvbnRhaW5nIHRoZSBsaWJzZWNjb21wIGxpYnJhcnkKLQotaW5j
bHVkZShGaW5kUGtnQ29uZmlnKQotCi1wa2dfY2hlY2tfbW9kdWxlcyhQQ19MSUJTRUNDT01QIGxp
YnNlY2NvbXApCi0KLWZpbmRfcGF0aChMSUJTRUNDT01QX0lOQ0xVREVfRElSUyBOQU1FUyBzZWNj
b21wLmgKLSAgICBISU5UUyAke1BDX0xJQlNFQ0NPTVBfSU5DTFVERV9ESVJTfSAke1BDX0xJQlNF
Q0NPTVBfSU5DTFVERURJUn0KLSkKLQotZmluZF9saWJyYXJ5KExJQlNFQ0NPTVBfTElCUkFSSUVT
IE5BTUVTIHNlY2NvbXAKLSAgICBISU5UUyAke1BDX0xJQlNFQ0NPTVBfTElCUkFSWV9ESVJTfSAk
e1BDX0xJQlNFQ0NPTVBfTElCRElSfQotKQotCi1pbmNsdWRlKEZpbmRQYWNrYWdlSGFuZGxlU3Rh
bmRhcmRBcmdzKQotRklORF9QQUNLQUdFX0hBTkRMRV9TVEFOREFSRF9BUkdTKHNlY2NvbXAgREVG
QVVMVF9NU0cgTElCU0VDQ09NUF9JTkNMVURFX0RJUlMgTElCU0VDQ09NUF9MSUJSQVJJRVMpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvY21ha2UvT3B0aW9uc0VmbC5jbWFrZSBiL1NvdXJjZS9jbWFrZS9P
cHRpb25zRWZsLmNtYWtlCmluZGV4IDk2ZGIyZmY0NzE3MjdjNjg4Nzk1OWUyZDdlNzVjYmMyNzY2
NGEzMWQuLjQwYzA4OGFiNmNlNGExOTIzNjUxYzlkZGQxOTA4ZGJhNTEyMThlMTAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9jbWFrZS9PcHRpb25zRWZsLmNtYWtlCisrKyBiL1NvdXJjZS9jbWFrZS9PcHRp
b25zRWZsLmNtYWtlCkBAIC0xMjIsNyArMTIyLDYgQEAgV0VCS0lUX09QVElPTl9ERUZBVUxUX1BP
UlRfVkFMVUUoRU5BQkxFX1BVQkxJQ19TVUZGSVhfTElTVCBQUklWQVRFIE9OKQogV0VCS0lUX09Q
VElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX1JFU09MVVRJT05fTUVESUFfUVVFUlkgUFVC
TElDIE9OKQogV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX1JFUVVFU1Rf
QU5JTUFUSU9OX0ZSQU1FIFBVQkxJQyBPTikKIFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZB
TFVFKEVOQUJMRV9TQU1QTElOR19QUk9GSUxFUiBQVUJMSUMgT04pCi1XRUJLSVRfT1BUSU9OX0RF
RkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfU0VDQ09NUF9GSUxURVJTIFBVQkxJQyBPRkYpCiBXRUJL
SVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfU0hBRE9XX0RPTSBQUklWQVRFIE9G
RikKIFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9TUEVFQ0hfU1lOVEhF
U0lTIFBVQkxJQyBPTikKIFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9T
UEVMTENIRUNLIFBVQkxJQyBPTikKQEAgLTI3MywxMCArMjcyLDYgQEAgaWYgKEVOQUJMRV9XRUJH
TCBBTkQgT1BFTkdMWF9GT1VORCkKICAgICBlbmRpZiAoKQogZW5kaWYgKCkKIAotaWYgKEVOQUJM
RV9TRUNDT01QX0ZJTFRFUlMpCi0gICAgZmluZF9wYWNrYWdlKExpYlNlY2NvbXAgUkVRVUlSRUQp
Ci1lbmRpZiAoKQotCiBpZiAoRU5BQkxFX1NQRUxMQ0hFQ0spCiAgICAgZmluZF9wYWNrYWdlKEVu
Y2hhbnQgUkVRVUlSRUQpCiBlbmRpZiAoKQpkaWZmIC0tZ2l0IGEvU291cmNlL2NtYWtlL09wdGlv
bnNHVEsuY21ha2UgYi9Tb3VyY2UvY21ha2UvT3B0aW9uc0dUSy5jbWFrZQppbmRleCAyNzAyNjA4
ZWM0YzI0MTQ4MTc1YjRkYjcyOGJiNGRhZWNiMjFmZGMyLi44Y2Q4NzJiZGY0NjUyOGVjOWJkZTAz
ODA1NmE1YzBlN2Q2NzhlZTk3IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21ha2UvT3B0aW9uc0dUSy5j
bWFrZQorKysgYi9Tb3VyY2UvY21ha2UvT3B0aW9uc0dUSy5jbWFrZQpAQCAtMzE0LDEzICszMTQs
NiBAQCBpZiAoRU5BQkxFX1BMVUdJTl9QUk9DRVNTX0dUSzIpCiAgICAgZmluZF9wYWNrYWdlKEdE
SzIgMi4yNC4xMCBSRVFVSVJFRCkKIGVuZGlmICgpCiAKLWlmIChFTkFCTEVfU0VDQ09NUF9GSUxU
RVJTKQotICAgIGZpbmRfcGFja2FnZShMaWJTZWNjb21wKQotICAgIGlmIChOT1QgUENfTElCU0VD
Q09NUF9GT1VORCkKLSAgICAgICAgbWVzc2FnZShGQVRBTF9FUlJPUiAibGlic2VjY29tcCBpcyBy
ZXF1aXJlZCBmb3IgRU5BQkxFX1NFQ0NPTVBfRklMVEVSUyIpCi0gICAgZW5kaWYgKCkKLWVuZGlm
ICgpCi0KIGlmIChFTkFCTEVfU1BFTExDSEVDSykKICAgICBmaW5kX3BhY2thZ2UoRW5jaGFudCkK
ICAgICBpZiAoTk9UIFBDX0VOQ0hBTlRfRk9VTkQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21ha2Uv
V2ViS2l0RmVhdHVyZXMuY21ha2UgYi9Tb3VyY2UvY21ha2UvV2ViS2l0RmVhdHVyZXMuY21ha2UK
aW5kZXggNzY4ZTNlNTlkN2UxOWFhYWEwNGYwMjIxNzgzNWNlOTY5NjdjMDkyZS4uNTM4MzdkODAy
NGEwOTk1NmRkOTg5NjhjZjczY2NmYjc3ZjEwMjBjNyAxMDA2NDQKLS0tIGEvU291cmNlL2NtYWtl
L1dlYktpdEZlYXR1cmVzLmNtYWtlCisrKyBiL1NvdXJjZS9jbWFrZS9XZWJLaXRGZWF0dXJlcy5j
bWFrZQpAQCAtMTY5LDcgKzE2OSw2IEBAIG1hY3JvKFdFQktJVF9PUFRJT05fQkVHSU4pCiAgICAg
V0VCS0lUX09QVElPTl9ERUZJTkUoRU5BQkxFX1JFU09VUkNFX1VTQUdFICJUb2dnbGUgcmVzb3Vy
Y2UgdXNhZ2Ugc3VwcG9ydCIgUFJJVkFURSBPRkYpCiAgICAgV0VCS0lUX09QVElPTl9ERUZJTkUo
RU5BQkxFX1JVQkJFUl9CQU5ESU5HICJUb2dnbGUgcnViYmVyIGJhbmRpbmcgc3VwcG9ydCIgUFJJ
VkFURSBPRkYpCiAgICAgV0VCS0lUX09QVElPTl9ERUZJTkUoRU5BQkxFX1NBTVBMSU5HX1BST0ZJ
TEVSICJUb2dnbGUgc2FtcGxpbmcgcHJvZmlsZXIgc3VwcG9ydCIgUFJJVkFURSBPTikKLSAgICBX
RUJLSVRfT1BUSU9OX0RFRklORShFTkFCTEVfU0VDQ09NUF9GSUxURVJTICJUb2dnbGUgTGludXgg
c2VjY29tcCBmaWx0ZXJzIGZvciB0aGUgV2ViUHJvY2VzcyBzdXBwb3J0IiBQUklWQVRFIE9GRikK
ICAgICBXRUJLSVRfT1BUSU9OX0RFRklORShFTkFCTEVfU0VSVklDRV9DT05UUk9MUyAiVG9nZ2xl
IHNlcnZpY2UgY29udHJvbHMgc3VwcG9ydCIgUFJJVkFURSBPRkYpCiAgICAgV0VCS0lUX09QVElP
Tl9ERUZJTkUoRU5BQkxFX1NIQURPV19ET00gIlRvZ2dsZSBzaGFkb3cgZG9tIiBQUklWQVRFIE9G
RikKICAgICBXRUJLSVRfT1BUSU9OX0RFRklORShFTkFCTEVfU01PT1RIX1NDUk9MTElORyAiVG9n
Z2xlIHNtb290aCBzY3JvbGxpbmciIFBSSVZBVEUgT0ZGKQpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hh
bmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IGE3ZGYxYmMwZWM4MjU1ODM4YTA4YzNjZDVl
MjhkM2ViMWNjNTQ3MTQuLmQ0NWM3NWEyNzA5N2RhZTIyYzI1ODBkMzMyNDYxYzhkZGEyY2Q4MTAg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNyBAQAorMjAxNi0wNS0wNSAgTWljaGFlbCBDYXRhbnphcm8gIDxtY2F0YW56YXJvQGln
YWxpYS5jb20+CisKKyAgICAgICAgW0xpbnV4XSBSZW1vdmUgc2VjY29tcCBmaWx0ZXJzIHN1cHBv
cnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NzM4
MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogU2Ny
aXB0cy93ZWJraXRwZXJsL0ZlYXR1cmVMaXN0LnBtOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkv
UGxhdGZvcm1FZmwuY21ha2U6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9QbGF0Zm9ybUdUSy5j
bWFrZToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDIvU2VjY29tcEZpbHRl
cnMuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIGVmbC9qaGJ1aWxkLm1vZHVsZXM6CisgICAgICAg
ICogZ3RrL2poYnVpbGQubW9kdWxlczoKKwogMjAxNi0wNS0wNCAgQWxleCBDaHJpc3RlbnNlbiAg
PGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgogCiAgICAgICAgIEJsb2NrZWQgcmVkaXJlY3RlZCBt
YWluIHJlc291cmNlIHJlcXVlc3RzIG5lZWQgZGVzY3JpcHRpdmUgZXJyb3JzCmRpZmYgLS1naXQg
YS9Ub29scy9TY3JpcHRzL3dlYmtpdHBlcmwvRmVhdHVyZUxpc3QucG0gYi9Ub29scy9TY3JpcHRz
L3dlYmtpdHBlcmwvRmVhdHVyZUxpc3QucG0KaW5kZXggNjBkODkzMzViOWFiMmNlMWVlZjg2ZTBi
ODc0YmE4NzczODg3MmM1Ni4uZWI4NTJiN2QwNjk4MDdmNmVjM2IzYTYzYzdlODA5YTZmMjA2YmNm
MyAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRwZXJsL0ZlYXR1cmVMaXN0LnBtCisr
KyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cGVybC9GZWF0dXJlTGlzdC5wbQpAQCAtMTI1LDcgKzEy
NSw2IEBAIG15ICgKICAgICAkcmVxdWVzdEFuaW1hdGlvbkZyYW1lU3VwcG9ydCwKICAgICAkcmVz
b3VyY2VUaW1pbmdTdXBwb3J0LAogICAgICRzY3JpcHRlZFNwZWVjaFN1cHBvcnQsCi0gICAgJHNl
Y2NvbXBGaWx0ZXJzU3VwcG9ydCwKICAgICAkc2hhZG93RE9NU3VwcG9ydCwKICAgICAkc3RyZWFt
c0FQSVN1cHBvcnQsCiAgICAgJHN0eWxlU2NvcGVkU3VwcG9ydCwKQEAgLTM4Niw5ICszODUsNiBA
QCBteSBAZmVhdHVyZXMgPSAoCiAgICAgeyBvcHRpb24gPT4gInJlcXVlc3QtYW5pbWF0aW9uLWZy
YW1lIiwgZGVzYyA9PiAiVG9nZ2xlIFJlcXVlc3QgQW5pbWF0aW9uIEZyYW1lIHN1cHBvcnQiLAog
ICAgICAgZGVmaW5lID0+ICJFTkFCTEVfUkVRVUVTVF9BTklNQVRJT05fRlJBTUUiLCBkZWZhdWx0
ID0+IDEsIHZhbHVlID0+IFwkcmVxdWVzdEFuaW1hdGlvbkZyYW1lU3VwcG9ydCB9LAogCi0gICAg
eyBvcHRpb24gPT4gInNlY2NvbXAtZmlsdGVycyIsIGRlc2MgPT4gIlRvZ2dsZSBTZWNjb21wIEZp
bHRlciBzYW5kYm94IiwKLSAgICAgIGRlZmluZSA9PiAiRU5BQkxFX1NFQ0NPTVBfRklMVEVSUyIs
IGRlZmF1bHQgPT4gMCwgdmFsdWUgPT4gXCRzZWNjb21wRmlsdGVyc1N1cHBvcnQgfSwKLQogICAg
IHsgb3B0aW9uID0+ICJzY3JpcHRlZC1zcGVlY2giLCBkZXNjID0+ICJUb2dnbGUgU2NyaXB0ZWQg
U3BlZWNoIHN1cHBvcnQiLAogICAgICAgZGVmaW5lID0+ICJFTkFCTEVfU0NSSVBURURfU1BFRUNI
IiwgZGVmYXVsdCA9PiAwLCB2YWx1ZSA9PiBcJHNjcmlwdGVkU3BlZWNoU3VwcG9ydCB9LAogCmRp
ZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1BsYXRmb3JtRWZsLmNtYWtlIGIvVG9vbHMv
VGVzdFdlYktpdEFQSS9QbGF0Zm9ybUVmbC5jbWFrZQppbmRleCA2N2UyNWU3NmM2NDNmMWI3OGMw
MTAxM2RmYTc0MjE5ZDhiNzUyY2UwLi5lNzJjMDY1YmRkMTJmYTdkZGI2YmExNDlmNjhlMWFkZTEz
NDYzODc1IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1BsYXRmb3JtRWZsLmNtYWtl
CisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvUGxhdGZvcm1FZmwuY21ha2UKQEAgLTEzMiwxMiAr
MTMyLDYgQEAgc2V0KHRlc3Rfd2Via2l0Ml9hcGlfZmFpbF9CSU5BUklFUwogICAgIFdpbGxMb2Fk
CiApCiAKLWlmIChFTkFCTEVfU0VDQ09NUF9GSUxURVJTKQotICAgIGxpc3QoQVBQRU5EIHRlc3Rf
d2Via2l0Ml9hcGlfZmFpbF9CSU5BUklFUwotICAgICAgICBTZWNjb21wRmlsdGVycwotICAgICkK
LWVuZGlmICgpCi0KICMgVGVzdHMgZGlzYWJsZWQgYmVjYXVzZSBvZiBtaXNzaW5nIGZlYXR1cmVz
IG9uIHRoZSB0ZXN0IGhhcm5lc3M6CiAjCiAjICAgU3BhY2ViYXJTY3JvbGxpbmcKZGlmZiAtLWdp
dCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvUGxhdGZvcm1HVEsuY21ha2UgYi9Ub29scy9UZXN0V2Vi
S2l0QVBJL1BsYXRmb3JtR1RLLmNtYWtlCmluZGV4IGY0YTZhM2EyMGMwZmQyNWE4ZjRkODJlNWQ2
MTVjYTdiZDc4NWVlZGEuLjYwOWU4NzlkZjUwMzI4OTEyM2YzOWZjZWY0MDMzZDkxNDQ4YzkwNmUg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvUGxhdGZvcm1HVEsuY21ha2UKKysrIGIv
VG9vbHMvVGVzdFdlYktpdEFQSS9QbGF0Zm9ybUdUSy5jbWFrZQpAQCAtMTI0LDIwICsxMjQsNiBA
QCBhZGRfdGVzdChUZXN0V2ViS2l0MiAke1RFU1RXRUJLSVRBUElfUlVOVElNRV9PVVRQVVRfRElS
RUNUT1JZfS9XZWJLaXQyL1Rlc3RXZWJLaQogc2V0X3Rlc3RzX3Byb3BlcnRpZXMoVGVzdFdlYktp
dDIgUFJPUEVSVElFUyBUSU1FT1VUIDYwKQogc2V0X3RhcmdldF9wcm9wZXJ0aWVzKFRlc3RXZWJL
aXQyIFBST1BFUlRJRVMgUlVOVElNRV9PVVRQVVRfRElSRUNUT1JZICR7VEVTVFdFQktJVEFQSV9S
VU5USU1FX09VVFBVVF9ESVJFQ1RPUll9L1dlYktpdDIpCiAKLWlmIChFTkFCTEVfU0VDQ09NUF9G
SUxURVJTKQotICAgICMgVGhpcyB0ZXN0IG5lZWRzIHRvIGJlIGluIGl0cyBvd24gZXhlY3V0YWJs
ZS4gSXQncyBhIGdlbmVyYWwgdGVzdCBvZiB0aGUKLSAgICAjIHNlY2NvbXAgZmlsdGVyIG1lY2hh
bmlzbSwgYW5kIHRoZSBmaWx0ZXJzIGl0IHNldHMgYXJlIGluY29tcGF0aWJsZSB3aXRoCi0gICAg
IyB0aGUgY29ycmVjdCBvcGVyYXRpb24gb2YgV2ViS2l0IGFuZCB0aGUgb3RoZXIgdGVzdHMuCi0g
ICAgYWRkX2V4ZWN1dGFibGUoVGVzdFNlY2NvbXBGaWx0ZXJzCi0gICAgICAgICR7VEVTVFdFQktJ
VEFQSV9ESVJ9L1Rlc3RzL1dlYktpdDIvU2VjY29tcEZpbHRlcnMuY3BwCi0gICAgKQotCi0gICAg
dGFyZ2V0X2xpbmtfbGlicmFyaWVzKFRlc3RTZWNjb21wRmlsdGVycyAke3Rlc3Rfd2Via2l0Ml9h
cGlfTElCUkFSSUVTfSkKLSAgICBhZGRfdGVzdChUZXN0U2VjY29tcEZpbHRlcnMgJHtURVNUV0VC
S0lUQVBJX1JVTlRJTUVfT1VUUFVUX0RJUkVDVE9SWX0vV2ViS2l0Mi9UZXN0V2ViS2l0MikKLSAg
ICBzZXRfdGVzdHNfcHJvcGVydGllcyhUZXN0U2VjY29tcEZpbHRlcnMgUFJPUEVSVElFUyBUSU1F
T1VUIDUpCi0gICAgc2V0X3RhcmdldF9wcm9wZXJ0aWVzKFRlc3RTZWNjb21wRmlsdGVycyBQUk9Q
RVJUSUVTIFJVTlRJTUVfT1VUUFVUX0RJUkVDVE9SWSAke1RFU1RXRUJLSVRBUElfUlVOVElNRV9P
VVRQVVRfRElSRUNUT1JZfS9XZWJLaXQyKQotZW5kaWYgKCkKLQogc2V0KFRlc3RXZWJDb3JlR3Rr
X1NPVVJDRVMKICAgICAke1RFU1RXRUJLSVRBUElfRElSfS9UZXN0cy9XZWJDb3JlL2d0ay9Vc2Vy
QWdlbnRRdWlya3MuY3BwCiApCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdDIvU2VjY29tcEZpbHRlcnMuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXQyL1NlY2NvbXBGaWx0ZXJzLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
OWNhNjA4MGQzZTA1OTAyNTUwYTEwODNjYjRkMmMyMWVjMjJlNDU2Zi4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdDIvU2VjY29tcEZpbHRlcnMuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNDQxICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2luY2x1ZGUg
PFdlYktpdC9TZWNjb21wQnJva2VyLmg+Ci0jaW5jbHVkZSA8V2ViS2l0L1NlY2NvbXBGaWx0ZXJz
Lmg+Ci0jaW5jbHVkZSA8V2ViS2l0L1N5c2NhbGxQb2xpY3kuaD4KLSNpbmNsdWRlIDxlcnJuby5o
PgotI2luY2x1ZGUgPGZjbnRsLmg+Ci0jaW5jbHVkZSA8cHRocmVhZC5oPgotI2luY2x1ZGUgPHNp
Z25hbC5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN5cy9zdGF0Lmg+Ci0jaW5j
bHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotI2luY2x1
ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi11c2luZyBuYW1lc3BhY2UgV2ViS2l0OwotCi1u
YW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7Ci0KLURFUFJFQ0FURURfREVGSU5FX1NUQVRJQ19MT0NB
TChTdHJpbmcsIHJvb3REaXIsIChBU0NJSUxpdGVyYWwoIi8iKSkpOwotREVQUkVDQVRFRF9ERUZJ
TkVfU1RBVElDX0xPQ0FMKFN0cmluZywgaG9tZURpciwgKFN0cmluZyhnZXRlbnYoIkhPTUUiKSkp
KTsKLURFUFJFQ0FURURfREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIHVzckRpciwgKEFTQ0lJ
TGl0ZXJhbCgiL3VzciIpKSk7Ci1ERVBSRUNBVEVEX0RFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5n
LCB1c3JTYmluRGlyLCAoQVNDSUlMaXRlcmFsKCIvdXNyL3NiaW4iKSkpOwotREVQUkVDQVRFRF9E
RUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgdGVzdERpclJlYWQsIChBU0NJSUxpdGVyYWwoIi90
bXAvV2ViS2l0U2VjY29tcEZpbHRlcnMvdGVzdFJlYWQiKSkpOwotREVQUkVDQVRFRF9ERUZJTkVf
U1RBVElDX0xPQ0FMKFN0cmluZywgdGVzdERpcldyaXRlLCAoQVNDSUlMaXRlcmFsKCIvdG1wL1dl
YktpdFNlY2NvbXBGaWx0ZXJzL3Rlc3RXcml0ZSIpKSk7Ci1ERVBSRUNBVEVEX0RFRklORV9TVEFU
SUNfTE9DQUwoU3RyaW5nLCB0ZXN0RGlyUmVhZEFuZFdyaXRlLCAoQVNDSUlMaXRlcmFsKCIvdG1w
L1dlYktpdFNlY2NvbXBGaWx0ZXJzL3Rlc3RSZWFkQW5kV3JpdGUiKSkpOwotREVQUkVDQVRFRF9E
RUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgdGVzdERpck5vdEFsbG93ZWQsIChBU0NJSUxpdGVy
YWwoIi90bXAvV2ViS2l0U2VjY29tcEZpbHRlcnMvdGVzdE5vdEFsbG93ZWQiKSkpOwotREVQUkVD
QVRFRF9ERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgdGVzdEZpbGVOb3RBbGxvd2VkLCAodGVz
dERpclJlYWRBbmRXcml0ZSArICIvdGVzdEZpbGVQb2xpY3kiKSk7Ci1ERVBSRUNBVEVEX0RFRklO
RV9TVEFUSUNfTE9DQUwoU3RyaW5nLCB0ZXN0RmlsZVJlYWRBbmRXcml0ZSwgKHRlc3REaXJOb3RB
bGxvd2VkICsgIi90ZXN0RmlsZVBvbGljeSIpKTsKLQotc3RhdGljIGNvbnN0IG1vZGVfdCBkZWZh
dWx0TW9kZSA9IFNfSVJVU1IgfCBTX0lXVVNSIHwgU19JWFVTUjsKLQotY2xhc3MgU2VjY29tcEVu
dmlyb25tZW50IDogcHVibGljIHRlc3Rpbmc6OkVudmlyb25tZW50IHsKLXB1YmxpYzoKLSAgICB2
aXJ0dWFsIHZvaWQgU2V0VXAoKQotICAgIHsKLSAgICAgICAgQVNTRVJUX1RSVUUoIWhvbWVEaXIu
aXNFbXB0eSgpKTsKLQotICAgICAgICBta2RpcigiL3RtcC9XZWJLaXRTZWNjb21wRmlsdGVycyIs
IGRlZmF1bHRNb2RlKTsKLSAgICAgICAgbWtkaXIodGVzdERpclJlYWQudXRmOCgpLmRhdGEoKSwg
ZGVmYXVsdE1vZGUpOwotICAgICAgICBta2Rpcih0ZXN0RGlyV3JpdGUudXRmOCgpLmRhdGEoKSwg
ZGVmYXVsdE1vZGUpOwotICAgICAgICBta2Rpcih0ZXN0RGlyUmVhZEFuZFdyaXRlLnV0ZjgoKS5k
YXRhKCksIGRlZmF1bHRNb2RlKTsKLSAgICAgICAgbWtkaXIodGVzdERpck5vdEFsbG93ZWQudXRm
OCgpLmRhdGEoKSwgZGVmYXVsdE1vZGUpOwotCi0gICAgICAgIC8vIENyZWF0ZSBhIGZpbGUgZm9y
IHRoZSBSZWFkIG9ubHkgYW5kIE5vdEFsbG93ZWQgZGlyZWN0b3J5IGJlZm9yZQotICAgICAgICAv
LyBsb2FkaW5nIHRoZSBmaWx0ZXJzLgotICAgICAgICBTdHJpbmcgZmlsZSA9IHRlc3REaXJSZWFk
ICsgIi90ZXN0RmlsZSI7Ci0gICAgICAgIGludCBmZCA9IG9wZW4oZmlsZS51dGY4KCkuZGF0YSgp
LCBPX1JEV1IgfCBPX0NSRUFULCBkZWZhdWx0TW9kZSk7Ci0gICAgICAgIEFTU0VSVF9ORShjbG9z
ZShmZCksIC0xKTsKLSAgICAgICAgZmlsZSA9IHRlc3REaXJOb3RBbGxvd2VkICsgIi90ZXN0Rmls
ZSI7Ci0gICAgICAgIGZkID0gb3BlbihmaWxlLnV0ZjgoKS5kYXRhKCksIE9fUkRXUiB8IE9fQ1JF
QVQsIGRlZmF1bHRNb2RlKTsKLSAgICAgICAgQVNTRVJUX05FKGNsb3NlKGZkKSwgLTEpOwotCi0g
ICAgICAgIC8vIENyZWF0ZSBmaWxlcyBmb3IgdGhlIGZpbGUgcG9saWN5IHRlc3RzLiBGaWxlIHBv
bGljaWVzIHByZWNlZGVzIHRoZQotICAgICAgICAvLyBkaXJlY3RvcnkgcG9saWN5LiBJbiB0aGlz
IGNhc2UsIHdlIGNyZWF0ZSBhIGZpbGUgd2l0aCByZWFkIGFuZCB3cml0ZQotICAgICAgICAvLyBw
b2xpY2llcyBpbnNpZGUgYSBkaXJlY3RvcnkgdGhhdCBpcyBub3QgYWxsb3dlZCwgYW5kIHZpY2Ug
dmVyc2EuIAotICAgICAgICBmZCA9IG9wZW4odGVzdEZpbGVOb3RBbGxvd2VkLnV0ZjgoKS5kYXRh
KCksIE9fUkRXUiB8IE9fQ1JFQVQsIGRlZmF1bHRNb2RlKTsKLSAgICAgICAgQVNTRVJUX05FKGNs
b3NlKGZkKSwgLTEpOwotICAgICAgICBmZCA9IG9wZW4odGVzdEZpbGVSZWFkQW5kV3JpdGUudXRm
OCgpLmRhdGEoKSwgT19SRFdSIHwgT19DUkVBVCwgZGVmYXVsdE1vZGUpOwotICAgICAgICBBU1NF
UlRfTkUoY2xvc2UoZmQpLCAtMSk7Ci0KLSAgICAgICAgU3lzY2FsbFBvbGljeSBwb2xpY3k7Ci0g
ICAgICAgIHBvbGljeS5hZGREaXJlY3RvcnlQZXJtaXNzaW9uKHJvb3REaXIsIFN5c2NhbGxQb2xp
Y3k6Ok5vdEFsbG93ZWQpOwotICAgICAgICBwb2xpY3kuYWRkRGlyZWN0b3J5UGVybWlzc2lvbih1
c3JEaXIsIFN5c2NhbGxQb2xpY3k6OlJlYWQpOwotICAgICAgICBwb2xpY3kuYWRkRGlyZWN0b3J5
UGVybWlzc2lvbih1c3JTYmluRGlyLCBTeXNjYWxsUG9saWN5OjpOb3RBbGxvd2VkKTsKLSAgICAg
ICAgcG9saWN5LmFkZERpcmVjdG9yeVBlcm1pc3Npb24odGVzdERpclJlYWQsIFN5c2NhbGxQb2xp
Y3k6OlJlYWQpOwotICAgICAgICBwb2xpY3kuYWRkRGlyZWN0b3J5UGVybWlzc2lvbih0ZXN0RGly
V3JpdGUsIFN5c2NhbGxQb2xpY3k6OldyaXRlKTsKLSAgICAgICAgcG9saWN5LmFkZERpcmVjdG9y
eVBlcm1pc3Npb24odGVzdERpclJlYWRBbmRXcml0ZSwgU3lzY2FsbFBvbGljeTo6UmVhZEFuZFdy
aXRlKTsKLSAgICAgICAgcG9saWN5LmFkZERpcmVjdG9yeVBlcm1pc3Npb24odGVzdERpck5vdEFs
bG93ZWQsIFN5c2NhbGxQb2xpY3k6Ok5vdEFsbG93ZWQpOwotICAgICAgICBwb2xpY3kuYWRkRmls
ZVBlcm1pc3Npb24odGVzdEZpbGVOb3RBbGxvd2VkLCBTeXNjYWxsUG9saWN5OjpOb3RBbGxvd2Vk
KTsKLSAgICAgICAgcG9saWN5LmFkZEZpbGVQZXJtaXNzaW9uKHRlc3RGaWxlUmVhZEFuZFdyaXRl
LCBTeXNjYWxsUG9saWN5OjpSZWFkQW5kV3JpdGUpOwotCi0gICAgICAgIFNlY2NvbXBGaWx0ZXJz
IHNlY2NvbXBGaWx0ZXJzKFNlY2NvbXBGaWx0ZXJzOjpBbGxvdyk7Ci0gICAgICAgIHNlY2NvbXBG
aWx0ZXJzLmFkZFJ1bGUoIm9wZW4iLCBTZWNjb21wRmlsdGVyczo6VHJhcCk7Ci0gICAgICAgIHNl
Y2NvbXBGaWx0ZXJzLmFkZFJ1bGUoIm9wZW5hdCIsIFNlY2NvbXBGaWx0ZXJzOjpUcmFwKTsKLSAg
ICAgICAgc2VjY29tcEZpbHRlcnMuYWRkUnVsZSgiY3JlYXQiLCBTZWNjb21wRmlsdGVyczo6VHJh
cCk7Ci0KLSAgICAgICAgU2VjY29tcEJyb2tlcjo6bGF1bmNoUHJvY2Vzcygmc2VjY29tcEZpbHRl
cnMsIHBvbGljeSk7Ci0gICAgICAgIHNlY2NvbXBGaWx0ZXJzLmluaXRpYWxpemUoKTsKLSAgICB9
Ci0KLSAgICB2aXJ0dWFsIHZvaWQgVGVhckRvd24oKQotICAgIHsKLSAgICAgICAgLy8gVGhpcyB3
aWxsIGhhdmUgdG8gbW92ZSB0byBhIHNlcGFyYXRlZCBwcm9jZXNzIGNyZWF0ZWQgYmVmb3JlIGxv
YWRpbmcKLSAgICAgICAgLy8gdGhlIGZpbHRlcnMgd2hlbiB3ZSBwdXQgdGhlIHJtZGlyL3VubGlu
ayBwb2xpY2llcyBpbiBwbGFjZS4KLSAgICAgICAgdW5saW5rKCIvdG1wL1dlYktpdFNlY2NvbXBG
aWx0ZXJzL3Rlc3ROb3RBbGxvd2VkL3Rlc3RGaWxlIik7Ci0gICAgICAgIHVubGluaygiL3RtcC9X
ZWJLaXRTZWNjb21wRmlsdGVycy90ZXN0Tm90QWxsb3dlZC90ZXN0RmlsZVBvbGljeSIpOwotICAg
ICAgICB1bmxpbmsoIi90bXAvV2ViS2l0U2VjY29tcEZpbHRlcnMvdGVzdFJlYWRBbmRXcml0ZS90
ZXN0RmlsZSIpOwotICAgICAgICB1bmxpbmsoIi90bXAvV2ViS2l0U2VjY29tcEZpbHRlcnMvdGVz
dFJlYWRBbmRXcml0ZS90ZXN0RmlsZTIiKTsKLSAgICAgICAgdW5saW5rKCIvdG1wL1dlYktpdFNl
Y2NvbXBGaWx0ZXJzL3Rlc3RSZWFkQW5kV3JpdGUvdGVzdEZpbGUzIik7Ci0gICAgICAgIHVubGlu
aygiL3RtcC9XZWJLaXRTZWNjb21wRmlsdGVycy90ZXN0UmVhZEFuZFdyaXRlL3Rlc3RGaWxlUG9s
aWN5Iik7Ci0gICAgICAgIHVubGluaygiL3RtcC9XZWJLaXRTZWNjb21wRmlsdGVycy90ZXN0V3Jp
dGUvdGVzdEZpbGUiKTsKLSAgICAgICAgdW5saW5rKCIvdG1wL1dlYktpdFNlY2NvbXBGaWx0ZXJz
L3Rlc3RXcml0ZS90ZXN0RmlsZTIiKTsKLSAgICAgICAgdW5saW5rKCIvdG1wL1dlYktpdFNlY2Nv
bXBGaWx0ZXJzL3Rlc3RSZWFkL3Rlc3RGaWxlIik7Ci0gICAgICAgIHJtZGlyKCIvdG1wL1dlYktp
dFNlY2NvbXBGaWx0ZXJzL3Rlc3ROb3RBbGxvd2VkIik7Ci0gICAgICAgIHJtZGlyKCIvdG1wL1dl
YktpdFNlY2NvbXBGaWx0ZXJzL3Rlc3RSZWFkQW5kV3JpdGUiKTsKLSAgICAgICAgcm1kaXIoIi90
bXAvV2ViS2l0U2VjY29tcEZpbHRlcnMvdGVzdFdyaXRlIik7Ci0gICAgICAgIHJtZGlyKCIvdG1w
L1dlYktpdFNlY2NvbXBGaWx0ZXJzL3Rlc3RSZWFkIik7Ci0gICAgICAgIHJtZGlyKCIvdG1wL1dl
YktpdFNlY2NvbXBGaWx0ZXJzIik7Ci0gICAgfQotfTsKLQotOjp0ZXN0aW5nOjpFbnZpcm9ubWVu
dCogY29uc3QgZW52ID0gOjp0ZXN0aW5nOjpBZGRHbG9iYWxUZXN0RW52aXJvbm1lbnQobmV3IFNl
Y2NvbXBFbnZpcm9ubWVudCk7Ci0KLXN0YXRpYyB2b2lkIGR1bW15SGFuZGxlcihpbnQsIHNpZ2lu
Zm9fdCosIHZvaWQqKQotewotfQotCi1URVNUKFdlYktpdDIsIHNpZ2FjdGlvbikKLXsKLSAgICAv
LyBTZXR0aW5nIGEgaGFuZGxlciBzaG91bGQgYmUgZW5vdWdoIHRvIGJyZWFrIGFueSBzdWJzZXF1
ZW50IHRlc3QgaWYKLSAgICAvLyBub3Qgc2lsZW50bHkgaWdub3JlZCBieSB0aGUgc2FuZGJveC4K
LSAgICBzdHJ1Y3Qgc2lnYWN0aW9uIGFjdGlvbjsKLSAgICBtZW1zZXQoJmFjdGlvbiwgMCwgc2l6
ZW9mKGFjdGlvbikpOwotICAgIGFjdGlvbi5zYV9zaWdhY3Rpb24gPSAmZHVtbXlIYW5kbGVyOwot
ICAgIGFjdGlvbi5zYV9mbGFncyA9IFNBX1NJR0lORk87Ci0KLSAgICBBU1NFUlRfTkUoc2lnYWN0
aW9uKFNJR1NZUywgJmFjdGlvbiwgMCksIC0xKTsKLX0KLQotVEVTVChXZWJLaXQyLCBzaWdwcm9j
bWFzaykKLXsKLSAgICAvLyBXZSB0ZXN0IGhlcmUgdGhlIG1lY2hhbmlzbSBpbnN0YWxsZWQgdG8g
cHJldmVudCBTSUdTWVMgdG8gYmUgYmxvY2tlZC4gQW55Ci0gICAgLy8gYXR0ZW1wIHRvIGFkZCBT
SUdTWVMgdG8gdGhlIHNldCBvZiBibG9ja2VkIHNpZ25hbHMgd2lsbCBiZSBzaWxlbnRseQotICAg
IC8vIGlnbm9yZWQgKGJ1dCBvdGhlciBzaWduYWxzIHdpbGwgYmUgYmxvY2tlZCBqdXN0IGZpbmUp
LgotICAgIHNpZ3NldF90IHNldCwgb2xkU2V0OwotICAgIHNpZ2VtcHR5c2V0KCZzZXQpOwotICAg
IHNpZ2FkZHNldCgmc2V0LCBTSUdTWVMpOwotICAgIHNpZ2FkZHNldCgmc2V0LCBTSUdVU1IxKTsK
LQotICAgIEFTU0VSVF9ORShzaWdwcm9jbWFzayhTSUdfQkxPQ0ssICZzZXQsIDApLCAtMSk7Ci0g
ICAgQVNTRVJUX05FKHNpZ3Byb2NtYXNrKFNJR19CTE9DSywgMCwgJm9sZFNldCksIC0xKTsKLSAg
ICBBU1NFUlRfRkFMU0Uoc2lnaXNtZW1iZXIoJm9sZFNldCwgU0lHU1lTKSkgPDwgIlNJR1NZUyBz
aG91bGQgbm90IGJlIGJsb2NrZWQuIjsKLSAgICBBU1NFUlRfVFJVRShzaWdpc21lbWJlcigmb2xk
U2V0LCBTSUdVU1IxKSkgPDwgIk90aGVyIHNpZ25hbHMgc2hvdWxkIGJlIGJsb2NrZWQgbm9ybWFs
bHkuIjsKLQotICAgIHNpZ2VtcHR5c2V0KCZzZXQpOwotICAgIHNpZ2FkZHNldCgmc2V0LCBTSUdT
WVMpOwotICAgIHNpZ2FkZHNldCgmc2V0LCBTSUdVU1IyKTsKLQotICAgIEFTU0VSVF9ORShzaWdw
cm9jbWFzayhTSUdfU0VUTUFTSywgJnNldCwgJm9sZFNldCksIC0xKTsKLSAgICBBU1NFUlRfTkUo
c2lncHJvY21hc2soU0lHX1NFVE1BU0ssIDAsICZzZXQpLCAtMSk7Ci0gICAgQVNTRVJUX0ZBTFNF
KHNpZ2lzbWVtYmVyKCZzZXQsIFNJR1NZUykpIDw8ICJTSUdTWVMgc2hvdWxkIG5vdCBiZSBibG9j
a2VkLiI7Ci0gICAgQVNTRVJUX1RSVUUoc2lnaXNtZW1iZXIoJnNldCwgU0lHVVNSMikpIDw8ICJP
dGhlciBzaWduYWxzIHNob3VsZCBiZSBibG9ja2VkIG5vcm1hbGx5LiI7Ci0gICAgQVNTRVJUX0ZB
TFNFKHNpZ2lzbWVtYmVyKCZvbGRTZXQsIFNJR1VTUjIpKTsKLQotICAgIEFTU0VSVF9ORShzaWdw
cm9jbWFzayhTSUdfU0VUTUFTSywgJm9sZFNldCwgMCksIC0xKSA8PCAiU2hvdWxkIHJlc3RvcmUg
dGhlIG9sZCBzaWduYWwgc2V0IGp1c3QgZmluZS4iOwotICAgIEFTU0VSVF9ORShzaWdwcm9jbWFz
ayhTSUdfU0VUTUFTSywgMCwgJnNldCksIC0xKTsKLSAgICBBU1NFUlRfRkFMU0Uoc2lnaXNtZW1i
ZXIoJnNldCwgU0lHVVNSMikpIDw8ICJUaGUgcmVzdG9yZWQgc2V0IGRvZXNuJ3QgaGF2ZSBTSUdV
U1IyLiI7Ci19Ci0KLVRFU1QoV2ViS2l0Miwgb3BlbikKLXsKLSAgICAvLyBSZWFkIG9ubHkgZGly
ZWN0b3J5LgotICAgIFN0cmluZyBmaWxlID0gdGVzdERpclJlYWQgKyAiL3Rlc3RGaWxlIjsKLSAg
ICBpbnQgZmQgPSBvcGVuKGZpbGUudXRmOCgpLmRhdGEoKSwgT19SRFdSKTsKLSAgICBFWFBFQ1Rf
VFJVRShmZCA9PSAtMSAmJiBlcnJubyA9PSBFQUNDRVMpOwotCi0gICAgZmQgPSBvcGVuKGZpbGUu
dXRmOCgpLmRhdGEoKSwgT19XUk9OTFkpOwotICAgIEVYUEVDVF9UUlVFKGZkID09IC0xICYmIGVy
cm5vID09IEVBQ0NFUyk7Ci0KLSAgICBmZCA9IG9wZW4oZmlsZS51dGY4KCkuZGF0YSgpLCBPX1JE
T05MWSB8IE9fQ1JFQVQsIGRlZmF1bHRNb2RlKTsKLSAgICBFWFBFQ1RfVFJVRShmZCA9PSAtMSAm
JiBlcnJubyA9PSBFQUNDRVMpOwotCi0gICAgZmQgPSBvcGVuKGZpbGUudXRmOCgpLmRhdGEoKSwg
T19SRE9OTFkpOwotICAgIEVYUEVDVF9ORShmZCwgLTEpOwotICAgIGNsb3NlKGZkKTsKLQotICAg
IGZpbGUgPSB0ZXN0RGlyUmVhZCArICIvVGhpc0ZpbGVEb2VzTm90RXhpc3QiOwotICAgIGZkID0g
b3BlbihmaWxlLnV0ZjgoKS5kYXRhKCksIE9fUkRPTkxZKTsKLSAgICBFWFBFQ1RfVFJVRShmZCA9
PSAtMSAmJiBlcnJubyA9PSBFTk9FTlQpIDw8ICJTaG91bGQgcmV0dXJuIEVOT0VOVCB3aGVuIHRy
eWluZyAiIFwKLSAgICAgICAgInRvIG9wZW4gYSBmaWxlIHRoYXQgZG9lcyBub3QgZXhpdCBhbmQg
dGhlIHBlcm1pc3Npb25zIGFyZSBPSy4iOwotCi0gICAgZmQgPSBvcGVuKGZpbGUudXRmOCgpLmRh
dGEoKSwgT19XUk9OTFkpOwotICAgIEVYUEVDVF9UUlVFKGZkID09IC0xICYmIGVycm5vID09IEVB
Q0NFUykgPDwgIlNob3VsZCByZXR1cm4gRUFDQ0VTIHdoZW4gdHJ5aW5nICIgXAotICAgICAgICAi
dG8gb3BlbiBhIGZpbGUgdGhhdCBkb2VzIG5vdCBleGl0IGFuZCB0aGUgcGVybWlzc2lvbnMgYXJl
IG5vdCBPSy4iOwotCi0gICAgLy8gV3JpdGUgb25seSBkaXJlY3RvcnkuCi0gICAgZmlsZSA9IHRl
c3REaXJXcml0ZSArICIvdGVzdEZpbGUiOwotICAgIGZkID0gb3BlbihmaWxlLnV0ZjgoKS5kYXRh
KCksIE9fV1JPTkxZIHwgT19DUkVBVCwgZGVmYXVsdE1vZGUpOwotICAgIEFTU0VSVF9ORShmZCwg
LTEpOwotICAgIGNsb3NlKGZkKTsKLQotICAgIGZkID0gb3BlbihmaWxlLnV0ZjgoKS5kYXRhKCks
IE9fUkRXUik7Ci0gICAgRVhQRUNUX1RSVUUoZmQgPT0gLTEgJiYgZXJybm8gPT0gRUFDQ0VTKTsK
LQotICAgIGZkID0gb3BlbihmaWxlLnV0ZjgoKS5kYXRhKCksIE9fUkRPTkxZKTsKLSAgICBFWFBF
Q1RfVFJVRShmZCA9PSAtMSAmJiBlcnJubyA9PSBFQUNDRVMpOwotCi0gICAgZmQgPSBvcGVuKGZp
bGUudXRmOCgpLmRhdGEoKSwgT19XUk9OTFkpOwotICAgIEVYUEVDVF9ORShmZCwgLTEpOwotICAg
IGNsb3NlKGZkKTsKLQotICAgIC8vIFJlYWQgYW4gd3JpdGUgZGlyZWN0b3J5LgotICAgIGZpbGUg
PSB0ZXN0RGlyUmVhZEFuZFdyaXRlICsgIi90ZXN0RmlsZSI7Ci0gICAgZmQgPSBvcGVuKGZpbGUu
dXRmOCgpLmRhdGEoKSwgT19XUk9OTFkgfCBPX0NSRUFULCBkZWZhdWx0TW9kZSk7Ci0gICAgQVNT
RVJUX05FKGZkLCAtMSk7Ci0gICAgY2xvc2UoZmQpOwotCi0gICAgZmQgPSBvcGVuKGZpbGUudXRm
OCgpLmRhdGEoKSwgT19SRFdSKTsKLSAgICBFWFBFQ1RfTkUoZmQsIC0xKTsKLSAgICBjbG9zZShm
ZCk7Ci0KLSAgICBmZCA9IG9wZW4oZmlsZS51dGY4KCkuZGF0YSgpLCBPX1JET05MWSk7Ci0gICAg
RVhQRUNUX05FKGZkLCAtMSk7Ci0gICAgY2xvc2UoZmQpOwotCi0gICAgZmQgPSBvcGVuKGZpbGUu
dXRmOCgpLmRhdGEoKSwgT19XUk9OTFkpOwotICAgIEVYUEVDVF9ORShmZCwgLTEpOwotICAgIGNs
b3NlKGZkKTsKLQotICAgIC8vIE5vdEFsbG93ZWQgZGlyZWN0b3J5LgotICAgIGZpbGUgPSB0ZXN0
RGlyTm90QWxsb3dlZCArICIvdGVzdEZpbGUiOwotICAgIGZkID0gb3BlbihmaWxlLnV0ZjgoKS5k
YXRhKCksIE9fV1JPTkxZIHwgT19DUkVBVCwgZGVmYXVsdE1vZGUpOwotICAgIEVYUEVDVF9UUlVF
KGZkID09IC0xICYmIGVycm5vID09IEVBQ0NFUyk7Ci0KLSAgICBmZCA9IG9wZW4oZmlsZS51dGY4
KCkuZGF0YSgpLCBPX1JEV1IpOwotICAgIEVYUEVDVF9UUlVFKGZkID09IC0xICYmIGVycm5vID09
IEVBQ0NFUyk7Ci0KLSAgICBmZCA9IG9wZW4oZmlsZS51dGY4KCkuZGF0YSgpLCBPX1JET05MWSk7
Ci0gICAgRVhQRUNUX1RSVUUoZmQgPT0gLTEgJiYgZXJybm8gPT0gRUFDQ0VTKTsKLQotICAgIGZk
ID0gb3BlbihmaWxlLnV0ZjgoKS5kYXRhKCksIE9fV1JPTkxZKTsKLSAgICBFWFBFQ1RfVFJVRShm
ZCA9PSAtMSAmJiBlcnJubyA9PSBFQUNDRVMpOwotCi0KLSAgICAvLyBUaGUgL3VzciBkaXJlY3Rv
cnkgaGVyZSBoYXMgcmVhZCBwZXJtaXNzaW9ucywgc28gaXQncyBzdWJkaXJlY3RvcmllcwotICAg
IC8vIHNob3VsZCByZXNvbHZlIHRvIHRoZSAvdXNyIHBlcm1pc3Npb25zIHVubGVzcyBleHBsaWNp
dGx5IHNwZWNpZmllZC4KLSAgICBmaWxlID0gdXNyRGlyICsgIi9iaW4vYmFzZW5hbWUiOwotICAg
IGZkID0gb3BlbihmaWxlLnV0ZjgoKS5kYXRhKCksIE9fUkRPTkxZKTsKLSAgICBFWFBFQ1RfTkUo
ZmQsIC0xKSA8PCAiU3ViZGlyZWN0b3JpZXMgc2hvdWxkIHdpdGggbm8gcG9saWN5IHNob3VsZCAi
IFwKLSAgICAgICAgImluaGVyaXQgdGhlIHBhcmVudCdzIHBvbGljaWVzLiI7Ci0gICAgY2xvc2Uo
ZmQpOwotCi0gICAgZmlsZSA9IHVzclNiaW5EaXIgKyAiL2FkZHVzZXIiOwotICAgIGZkID0gb3Bl
bihmaWxlLnV0ZjgoKS5kYXRhKCksIE9fUkRPTkxZKTsKLSAgICBFWFBFQ1RfVFJVRShmZCA9PSAt
MSAmJiBlcnJubyA9PSBFQUNDRVMpIDw8ICJUaGlzIGRpcmVjdG9yeSBzaG91bGQgaGF2ZSAiIFwK
LSAgICAgICAgIml0cyBvd24gcG9saWN5IGluc3RlYWQgb2YgdGhlIHBhcmVudCdzLiI7Ci0KLSAg
ICAvLyBBY2Nlc3MgdG8gdGhlIHJlc3Qgb2YgdGhlIGZpbGVzIHN5c3RlbSBpcyBibG9ja2VkIGFu
ZCBzaG91bGQKLSAgICAvLyBuZXZlciByZXR1cm4gYW55dGhpbmcgZWxzZSBvdGhlciB0aGFuIEVB
Q0NFUyByZWdhcmRsZXNzIGlmIHRoZQotICAgIC8vIGZpbGUgZXhpc3RzIG9yIG5vdC4gVGhlIHJl
YXNvbiBpcyBiZWNhdXNlIGl0IHdpbGwgZmFsbGJhY2sgdG8gdGhlCi0gICAgLy8gcG9saWN5IG9m
IHRoZSBSb290IGRpcmVjdG9yeSwgbWFya2VkIGFzIE5vdEFsbG93ZWQuCi0gICAgZmlsZSA9IGhv
bWVEaXIgKyAiL3Rlc3RGaWxlIjsKLSAgICBmZCA9IG9wZW4oZmlsZS51dGY4KCkuZGF0YSgpLCBP
X1JEV1IgfCBPX0NSRUFULCBkZWZhdWx0TW9kZSk7Ci0gICAgRVhQRUNUX1RSVUUoZmQgPT0gLTEg
JiYgZXJybm8gPT0gRUFDQ0VTKTsKLQotICAgIGZkID0gb3BlbigiL2V0Yy9wYXNzd2QiLCBPX1JE
T05MWSk7Ci0gICAgRVhQRUNUX1RSVUUoZmQgPT0gLTEgJiYgZXJybm8gPT0gRUFDQ0VTKTsKLQot
ICAgIGZpbGUgPSB0ZXN0RGlyUmVhZEFuZFdyaXRlICsgIi8uLi8uLi8uLi9ldGMvcGFzc3dkIjsK
LSAgICBmZCA9IG9wZW4oZmlsZS51dGY4KCkuZGF0YSgpLCBPX1JET05MWSk7Ci0gICAgRVhQRUNU
X1RSVUUoZmQgPT0gLTEgJiYgZXJybm8gPT0gRUFDQ0VTKTsKLQotICAgIGZpbGUgPSB0ZXN0RGly
UmVhZEFuZFdyaXRlICsgIi8uLi8uLi8uLiIgKyB0ZXN0RGlyUmVhZEFuZFdyaXRlICsgIi8uLi8u
Li8uLi9ldGMvcGFzc3dkIjsKLSAgICBmZCA9IG9wZW4oZmlsZS51dGY4KCkuZGF0YSgpLCBPX1JE
T05MWSk7Ci0gICAgRVhQRUNUX1RSVUUoZmQgPT0gLTEgJiYgZXJybm8gPT0gRUFDQ0VTKTsKLQot
ICAgIC8vIEhlcmUgd2UgdGVzdCBmaWxlIHBvbGljaWVzLiBUaGUgaGF2ZSBwcmVjZWRlbmNlIG92
ZXIgZGlyZWN0b3J5IHBvbGljaWVzLgotICAgIC8vIFRoZSBmaWxlIGJlbGxvdyBsaXZlcyBpbnNp
ZGUgYSBkaXJlY3Rvcnkgd2l0aCBSZWFkQW5kV3JpdGUgcG9saWN5LgotICAgIGZkID0gb3Blbih0
ZXN0RmlsZU5vdEFsbG93ZWQudXRmOCgpLmRhdGEoKSwgT19SRE9OTFkpOwotICAgIEVYUEVDVF9U
UlVFKGZkID09IC0xICYmIGVycm5vID09IEVBQ0NFUyk7Ci0KLSAgICBmZCA9IG9wZW4odGVzdEZp
bGVOb3RBbGxvd2VkLnV0ZjgoKS5kYXRhKCksIE9fV1JPTkxZKTsKLSAgICBFWFBFQ1RfVFJVRShm
ZCA9PSAtMSAmJiBlcnJubyA9PSBFQUNDRVMpOwotCi0gICAgZmQgPSBvcGVuKHRlc3RGaWxlTm90
QWxsb3dlZC51dGY4KCkuZGF0YSgpLCBPX1JEV1IpOwotICAgIEVYUEVDVF9UUlVFKGZkID09IC0x
ICYmIGVycm5vID09IEVBQ0NFUyk7Ci0KLSAgICBmaWxlID0gdGVzdERpclJlYWRBbmRXcml0ZSAr
ICIvLi4vLi4vLi4iICsgdGVzdERpclJlYWRBbmRXcml0ZSArICIvdGVzdEZpbGVQb2xpY3kiOwot
ICAgIGZkID0gb3BlbihmaWxlLnV0ZjgoKS5kYXRhKCksIE9fUkRPTkxZKTsKLSAgICBFWFBFQ1Rf
VFJVRShmZCA9PSAtMSAmJiBlcnJubyA9PSBFQUNDRVMpOwotCi0gICAgLy8gVGhlIG5leHQgZmls
ZSBpcyBsb2NhdGVkIGluc2lkZSBhIGRpcmVjdG9yeSBtYXJrZWQgYXMgTm90QWxsb3dlZCwgYnV0
Ci0gICAgLy8gaXQgaGFzIGl0cyBvd24gZmlsZSBwb2xpY3kgdGhhdCBwcmVjZWRlcyB0aGUgZGly
ZWN0b3J5IHBvbGljeS4KLSAgICBmZCA9IG9wZW4odGVzdEZpbGVSZWFkQW5kV3JpdGUudXRmOCgp
LmRhdGEoKSwgT19SRE9OTFkpOwotICAgIEVYUEVDVF9ORShmZCwgLTEpOwotICAgIGNsb3NlKGZk
KTsKLQotICAgIGZkID0gb3Blbih0ZXN0RmlsZVJlYWRBbmRXcml0ZS51dGY4KCkuZGF0YSgpLCBP
X1dST05MWSk7Ci0gICAgRVhQRUNUX05FKGZkLCAtMSk7Ci0gICAgY2xvc2UoZmQpOwotCi0gICAg
ZmQgPSBvcGVuKHRlc3RGaWxlUmVhZEFuZFdyaXRlLnV0ZjgoKS5kYXRhKCksIE9fUkRXUik7Ci0g
ICAgRVhQRUNUX05FKGZkLCAtMSk7Ci0gICAgY2xvc2UoZmQpOwotCi0gICAgZmlsZSA9IHRlc3RE
aXJSZWFkQW5kV3JpdGUgKyAiLy4uLy4uLy4uIiArIHRlc3REaXJOb3RBbGxvd2VkICsgIi90ZXN0
RmlsZVBvbGljeSI7Ci0gICAgZmQgPSBvcGVuKGZpbGUudXRmOCgpLmRhdGEoKSwgT19SRE9OTFkp
OwotICAgIEVYUEVDVF9ORShmZCwgLTEpOwotICAgIGNsb3NlKGZkKTsKLX0KLQotVEVTVChXZWJL
aXQyLCBjcmVhdCkKLXsKLSAgICAvLyBSZWFkIG9ubHkgZGlyZWN0b3J5LgotICAgIFN0cmluZyBm
aWxlID0gdGVzdERpclJlYWQgKyAiL3Rlc3RGaWxlMiI7Ci0gICAgaW50IGZkID0gY3JlYXQoZmls
ZS51dGY4KCkuZGF0YSgpLCBkZWZhdWx0TW9kZSk7Ci0gICAgRVhQRUNUX1RSVUUoZmQgPT0gLTEg
JiYgZXJybm8gPT0gRUFDQ0VTKTsKLQotICAgIC8vIFdyaXRlIG9ubHkgZGlyZWN0b3J5LgotICAg
IGZpbGUgPSB0ZXN0RGlyV3JpdGUgKyAiL3Rlc3RGaWxlMiI7Ci0gICAgZmQgPSBjcmVhdChmaWxl
LnV0ZjgoKS5kYXRhKCksIGRlZmF1bHRNb2RlKTsKLSAgICBFWFBFQ1RfTkUoZmQsIC0xKTsKLSAg
ICBjbG9zZShmZCk7Ci0KLSAgICAvLyBSZWFkIGFuIHdyaXRlIGRpcmVjdG9yeS4KLSAgICBmaWxl
ID0gdGVzdERpclJlYWRBbmRXcml0ZSArICIvdGVzdEZpbGUyIjsKLSAgICBmZCA9IGNyZWF0KGZp
bGUudXRmOCgpLmRhdGEoKSwgZGVmYXVsdE1vZGUpOwotICAgIEVYUEVDVF9ORShmZCwgLTEpOwot
ICAgIGNsb3NlKGZkKTsKLQotICAgIC8vIE5vdEFsbG93ZWQgZGlyZWN0b3J5LgotICAgIGZpbGUg
PSB0ZXN0RGlyTm90QWxsb3dlZCArICIvdGVzdEZpbGUyIjsKLSAgICBmZCA9IGNyZWF0KGZpbGUu
dXRmOCgpLmRhdGEoKSwgZGVmYXVsdE1vZGUpOwotICAgIEVYUEVDVF9UUlVFKGZkID09IC0xICYm
IGVycm5vID09IEVBQ0NFUyk7Ci19Ci0KLVRFU1QoV2ViS2l0Miwgb3BlbmF0KQotewotICAgIGlu
dCBkaXJGZCA9IG9wZW4odGVzdERpclJlYWRBbmRXcml0ZS51dGY4KCkuZGF0YSgpLCBPX1JET05M
WSk7Ci0gICAgQVNTRVJUX05FKGRpckZkLCAtMSk7Ci0KLSAgICBpbnQgZmQgPSBvcGVuYXQoZGly
RmQsICJ0ZXN0RmlsZTMiLCBPX1JEV1IgfCBPX0NSRUFULCBkZWZhdWx0TW9kZSk7Ci0gICAgRVhQ
RUNUX05FKGZkLCAtMSk7Ci0gICAgY2xvc2UoZmQpOwotCi0gICAgZmQgPSBvcGVuYXQoZGlyRmQs
ICJ0ZXN0RmlsZTMiLCBPX1JEV1IpOwotICAgIEVYUEVDVF9ORShmZCwgLTEpOwotICAgIGNsb3Nl
KGZkKTsKLQotICAgIGZkID0gb3BlbmF0KGRpckZkLCAidGVzdEZpbGUzIiwgT19SRE9OTFkpOwot
ICAgIEVYUEVDVF9ORShmZCwgLTEpOwotICAgIGNsb3NlKGZkKTsKLQotICAgIGZkID0gb3BlbmF0
KGRpckZkLCAidGVzdEZpbGUzIiwgT19XUk9OTFkpOwotICAgIEVYUEVDVF9ORShmZCwgLTEpOwot
Ci0gICAgZmQgPSBvcGVuYXQoZmQsICJ0ZXN0RmlsZTMiLCBPX1dST05MWSk7Ci0gICAgRVhQRUNU
X1RSVUUoZmQgPT0gLTEgJiYgZXJybm8gPT0gRU5PVERJUikgPDwgIlNob3VsZCByZXR1cm4gRU5P
VERJUiB3aGVuIHRoZSBmZCBpcyBhIGZpbGUuIjsKLSAgICBjbG9zZShmZCk7Ci0KLSAgICBTdHJp
bmcgZmlsZSA9ICIuLi8uLi8uLiIgKyB0ZXN0RGlyUmVhZEFuZFdyaXRlICsgIi90ZXN0RmlsZTMi
OwotICAgIGZkID0gb3BlbmF0KGRpckZkLCBmaWxlLnV0ZjgoKS5kYXRhKCksIE9fV1JPTkxZKTsK
LSAgICBFWFBFQ1RfTkUoZmQsIC0xKTsKLSAgICBjbG9zZShmZCk7Ci0KLSAgICBmaWxlID0gIi4u
Ly4uLy4uIiArIHRlc3REaXJSZWFkICsgIi90ZXN0RmlsZTMiOwotICAgIGZkID0gb3BlbmF0KGRp
ckZkLCBmaWxlLnV0ZjgoKS5kYXRhKCksIE9fV1JPTkxZKTsKLSAgICBFWFBFQ1RfVFJVRShmZCA9
PSAtMSAmJiBlcnJubyA9PSBFQUNDRVMpOwotCi0gICAgZmlsZSA9IHRlc3REaXJSZWFkQW5kV3Jp
dGUgKyAiL3Rlc3RGaWxlMyI7Ci0gICAgZmQgPSBvcGVuYXQoLTEsIGZpbGUudXRmOCgpLmRhdGEo
KSwgT19XUk9OTFkpOwotICAgIEVYUEVDVF9ORShmZCwgLTEpIDw8ICJEaXJlY3RvcnkgZmQgc2hv
dWxkIGJlIGlnbm9yZWQgd2hlbiB0aGUgcGF0aCBpcyBhYnNvbHV0ZS4iOwotICAgIGNsb3NlKGZk
KTsKLQotICAgIGZkID0gb3BlbmF0KC0xLCAidGVzdEZpbGUzIiwgT19XUk9OTFkpOwotICAgIEVY
UEVDVF9UUlVFKGZkID09IC0xICYmIGVycm5vID09IEVCQURGKSA8PCAiU2hvdWxkIHJldHVybiBF
QkFERiB3aGVuIHRoZSBmZCBpcyBpbnZhbGlkLiI7Ci0gICAgY2xvc2UoZGlyRmQpOwotCi0gICAg
ZGlyRmQgPSBvcGVuKHRlc3REaXJOb3RBbGxvd2VkLnV0ZjgoKS5kYXRhKCksIE9fUkRPTkxZKTsK
LSAgICBFWFBFQ1RfVFJVRShkaXJGZCA9PSAtMSAmJiBlcnJubyA9PSBFQUNDRVMpOwotCi0gICAg
ZGlyRmQgPSBvcGVuKHRlc3REaXJSZWFkLnV0ZjgoKS5kYXRhKCksIE9fUkRPTkxZKTsKLSAgICBB
U1NFUlRfTkUoZGlyRmQsIC0xKTsKLQotICAgIGZkID0gb3BlbmF0KGRpckZkLCAidGVzdEZpbGUy
IiwgT19SRE9OTFkgfCBPX0NSRUFULCBkZWZhdWx0TW9kZSk7Ci0gICAgRVhQRUNUX1RSVUUoZmQg
PT0gLTEgJiYgZXJybm8gPT0gRUFDQ0VTKTsKLQotICAgIGZkID0gb3BlbmF0KGRpckZkLCAidGVz
dEZpbGUiLCBPX1dST05MWSk7Ci0gICAgRVhQRUNUX1RSVUUoZmQgPT0gLTEgJiYgZXJybm8gPT0g
RUFDQ0VTKTsKLSAgICBjbG9zZShkaXJGZCk7Ci19Ci0KLXN0YXRpYyB2b2lkKiBzdHJlc3NUZXN0
KHZvaWQqKQotewotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNTAwOyArK2kpIHsKLSAgICAgICAg
aW50IGZkID0gb3BlbigiL3RtcC9XZWJLaXRTZWNjb21wRmlsdGVycy90ZXN0UmVhZC90ZXN0Rmls
ZSIsIE9fUkRXUik7Ci0gICAgICAgIEVYUEVDVF9UUlVFKGZkID09IC0xICYmIGVycm5vID09IEVB
Q0NFUyk7Ci0KLSAgICAgICAgZmQgPSBvcGVuKCIvdG1wL1dlYktpdFNlY2NvbXBGaWx0ZXJzL3Rl
c3RSZWFkL3Rlc3RGaWxlIiwgT19SRE9OTFkpOwotICAgICAgICBFWFBFQ1RfTkUoZmQsIC0xKTsK
LSAgICAgICAgY2xvc2UoZmQpOwotCi0gICAgICAgIGZkID0gb3BlbigiL3RtcC9XZWJLaXRTZWNj
b21wRmlsdGVycy90ZXN0Tm90QWxsb3dlZC90ZXN0RmlsZSIsIE9fUkRPTkxZKTsKLSAgICAgICAg
RVhQRUNUX1RSVUUoZmQgPT0gLTEgJiYgZXJybm8gPT0gRUFDQ0VTKTsKLQotICAgICAgICBmZCA9
IGNyZWF0KCIvdG1wL1dlYktpdFNlY2NvbXBGaWx0ZXJzL3Rlc3ROb3RBbGxvd2VkL1Nob2xkTm90
QmVBbGxvd2VkIiwgZGVmYXVsdE1vZGUpOwotICAgICAgICBFWFBFQ1RfVFJVRShmZCA9PSAtMSAm
JiBlcnJubyA9PSBFQUNDRVMpOwotCi0gICAgICAgIGludCBkaXJGZCA9IG9wZW4oIi90bXAvV2Vi
S2l0U2VjY29tcEZpbHRlcnMvdGVzdFJlYWQiLCBPX1JET05MWSk7Ci0gICAgICAgIEVYUEVDVF9O
RShkaXJGZCwgLTEpOwotCi0gICAgICAgIGZkID0gb3BlbmF0KGRpckZkLCAidGVzdEZpbGUiLCBP
X1JET05MWSk7Ci0gICAgICAgIEVYUEVDVF9ORShmZCwgLTEpOwotICAgICAgICBjbG9zZShmZCk7
Ci0gICAgICAgIGNsb3NlKGRpckZkKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotVEVT
VChXZWJLaXQyLCB0aHJlYWRpbmcpCi17Ci0gICAgLy8gVGVzdHMgaWYgY29uY3VycmVudCBzeXNj
YWxsIGV4ZWN1dGlvbiB3b3JrcyBmaW5lLiBJdCBjYW4gYmUKLSAgICAvLyBhbHNvIHVzZWQgZm9y
IHBlcmZvcm1hbmNlIHRlc3RpbmcgYW5kIGxlYWsgZGV0ZWN0aW9uLiBUaGUgdGVzdAotICAgIC8v
IGlzIGRpc2FibGVkIG9uIERlYnVnIG1vZGUgYmVjYXVzZSBpdCBjYW4gYmUgd2F5IHRvbyB2ZXJi
b3NlLgotICAgIHB0aHJlYWRfdCB0aHJlYWRzWzVdOwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBzaXplb2YodGhyZWFkcykgLyBzaXplb2YocHRocmVhZF90KTsgKytpKQotICAgICAgICBwdGhy
ZWFkX2NyZWF0ZSgmdGhyZWFkc1tpXSwgMCwgc3RyZXNzVGVzdCwgMCk7Ci0KLSAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IHNpemVvZih0aHJlYWRzKSAvIHNpemVvZihwdGhyZWFkX3QpOyArK2kpCi0g
ICAgICAgIHB0aHJlYWRfam9pbih0aHJlYWRzW2ldLCAwKTsKLX0KLQotfSAvLyBuYW1lc3BhY2Ug
VGVzdFdlYktpdEFQSQpkaWZmIC0tZ2l0IGEvVG9vbHMvZWZsL2poYnVpbGQubW9kdWxlcyBiL1Rv
b2xzL2VmbC9qaGJ1aWxkLm1vZHVsZXMKaW5kZXggMDk4MmNhN2FmNDY4YzI2OGQ2MWFjN2U1NTU5
OGZhNWEwODRjY2NiMC4uYjA5ZmI0NDhjYTIwY2Q4ZWRhM2MxNjczNGU0MjM2YWI5MjlmODUzNyAx
MDA2NDQKLS0tIGEvVG9vbHMvZWZsL2poYnVpbGQubW9kdWxlcworKysgYi9Ub29scy9lZmwvamhi
dWlsZC5tb2R1bGVzCkBAIC0yMSw3ICsyMSw2IEBACiAgICAgICA8ZGVwIHBhY2thZ2U9ImdzdC1w
bHVnaW5zLWdvb2QiLz4KICAgICAgIDxkZXAgcGFja2FnZT0iZ3N0LXBsdWdpbnMtYmFkIi8+CiAg
ICAgICA8ZGVwIHBhY2thZ2U9ImdzdC1saWJhdiIvPgotICAgICAgPGRlcCBwYWNrYWdlPSJsaWJz
ZWNjb21wIi8+CiAgICAgICA8ZGVwIHBhY2thZ2U9ImF0ayIvPgogICAgICAgPGRlcCBwYWNrYWdl
PSJvcGVud2VicnRjIi8+CiAgICAgPC9kZXBlbmRlbmNpZXM+CkBAIC0yNjcsMTMgKzI2Niw2IEBA
CiAgICAgPC9icmFuY2g+CiAgIDwvYXV0b3Rvb2xzPgogCi0gIDxhdXRvdG9vbHMgaWQ9ImxpYnNl
Y2NvbXAiIGF1dG9nZW4tc2g9ImNvbmZpZ3VyZSI+Ci0gICAgICA8YnJhbmNoIG1vZHVsZT0ic2Vj
Y29tcC9saWJzZWNjb21wL3JlbGVhc2VzL2Rvd25sb2FkL3YyLjIuMy9saWJzZWNjb21wLTIuMi4z
LnRhci5neiIgdmVyc2lvbj0iMi4yLjMiCi0gICAgICAgICAgcmVwbz0iZ2l0aHViLmNvbSIKLSAg
ICAgICAgICBoYXNoPSJzaGEyNTY6ZDliNDAwYjcwM2NhYjdiYjA0Yjg0YjliNmU1MjA3NmE2MzBi
NjczODE5ZDc1NDE3NTdiY2MxNjQ2N2I2ZDQ5ZSI+Ci0gICAgICA8L2JyYW5jaD4KLSAgPC9hdXRv
dG9vbHM+Ci0KICAgPGF1dG90b29scyBpZD0iYXRrIgogICAgICAgICAgICAgIGF1dG9nZW4tc2g9
ImNvbmZpZ3VyZSIKICAgICAgICAgICAgICBhdXRvZ2VuYXJncz0iLS1kaXNhYmxlLWludHJvc3Bl
Y3Rpb24iPgpkaWZmIC0tZ2l0IGEvVG9vbHMvZ3RrL2poYnVpbGQubW9kdWxlcyBiL1Rvb2xzL2d0
ay9qaGJ1aWxkLm1vZHVsZXMKaW5kZXggNGVlOTkwZmFhMTc3MmMwMjZlOTJhMmIwNDNlZTM1YmE3
OTlmOGM2Yi4uZmNhODY1YTUxYTRmYWQwYzFmNTgwODdkMzQxYzBiYzNmYjE2MzRkMiAxMDA2NDQK
LS0tIGEvVG9vbHMvZ3RrL2poYnVpbGQubW9kdWxlcworKysgYi9Ub29scy9ndGsvamhidWlsZC5t
b2R1bGVzCkBAIC0zMyw3ICszMyw2IEBACiAgICAgICA8aWYgY29uZGl0aW9uLXNldD0ibGludXgi
PgogICAgICAgICAgIDxkZXAgcGFja2FnZT0ieHNlcnZlciIvPgogICAgICAgICAgIDxkZXAgcGFj
a2FnZT0ibWVzYSIvPgotICAgICAgICAgIDxkZXAgcGFja2FnZT0ibGlic2VjY29tcCIvPgogICAg
ICAgICAgIDxkZXAgcGFja2FnZT0iYXQtc3BpMi1jb3JlIi8+CiAgICAgICAgICAgPGRlcCBwYWNr
YWdlPSJhdC1zcGkyLWF0ayIvPgogICAgICAgPC9pZj4KQEAgLTEzNiwxMCArMTM1LDYgQEAKICAg
ICAgICAgICAgICBtZDVzdW09ImY1ODk4YjI5YmJmZDcwNTAyODMxYTIxMmQ5MjQ5ZDEwIi8+CiAg
IDwvYXV0b3Rvb2xzPgogCi0gIDxhdXRvdG9vbHMgaWQ9ImxpYnNlY2NvbXAiIHN1cHBvcnRzLW5v
bi1zcmNkaXItYnVpbGRzPSJubyIgYXV0b2dlbi1zaD0iLi9hdXRvZ2VuLnNoOyAuL2NvbmZpZ3Vy
ZSI+Ci0gICAgPGJyYW5jaCByZXBvPSJnaXRodWIuY29tIiBtb2R1bGU9InNlY2NvbXAvbGlic2Vj
Y29tcC5naXQiIHRhZz0idjIuMi4zIi8+Ci0gIDwvYXV0b3Rvb2xzPgotCiAgIDxhdXRvdG9vbHMg
aWQ9Imdkay1waXhidWYiIGF1dG9nZW4tc2g9ImNvbmZpZ3VyZSIKICAgICAgICAgICAgICBhdXRv
Z2VuYXJncz0iLS1kaXNhYmxlLWludHJvc3BlY3Rpb24iPgogICAgIDxkZXBlbmRlbmNpZXM+CmRp
ZmYgLS1naXQgYS9DaGFuZ2VMb2cgYi9DaGFuZ2VMb2cKaW5kZXggYWRiZjcyOWM0YjAxNTYwZWI0
Nzk4Yjg5N2JmNDgyNzE2NjVhNWRjZC4uYzMwOTc1MjA4ZmJlN2E2MTE0NzZlZWQ4YmQ4NDdmZGFk
ZTFiMWU1NCAxMDA2NDQKLS0tIGEvQ2hhbmdlTG9nCisrKyBiL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDE1IEBACisyMDE2LTA1LTA1ICBNaWNoYWVsIENhdGFuemFybyAgPG1jYXRhbnphcm9AaWdhbGlh
LmNvbT4KKworICAgICAgICBbTGludXhdIFJlbW92ZSBzZWNjb21wIGZpbHRlcnMgc3VwcG9ydAor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU3MzgwCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBTb3VyY2Uv
Y21ha2UvRmluZExpYlNlY2NvbXAuY21ha2U6IFJlbW92ZWQuCisgICAgICAgICogU291cmNlL2Nt
YWtlL09wdGlvbnNFZmwuY21ha2U6CisgICAgICAgICogU291cmNlL2NtYWtlL09wdGlvbnNHVEsu
Y21ha2U6CisgICAgICAgICogU291cmNlL2NtYWtlL1dlYktpdEZlYXR1cmVzLmNtYWtlOgorCiAy
MDE2LTA1LTAyICBQZXIgQXJuZSBWb2xsYW4gIDxwZWF2b0BvdXRsb29rLmNvbT4KIAogICAgICAg
ICBbV2luXSBFbmFibGUgSW5kZXhlZERCLgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>