<?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>107879</bug_id>
          
          <creation_ts>2013-01-24 16:43:09 -0800</creation_ts>
          <short_desc>Move Authentication and Downloads from WebProcess to Shared</short_desc>
          <delta_ts>2013-01-25 10:40:23 -0800</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>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</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="Brady Eidson">beidson</reporter>
          <assigned_to name="Brady Eidson">beidson</assigned_to>
          <cc>andersca</cc>
    
    <cc>rniwa</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>815978</commentid>
    <comment_count>0</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-01-24 16:43:09 -0800</bug_when>
    <thetext>Move Authentication and Downloads from WebProcess to Shared

They&apos;re now used in multiple processes (Web, Network, and I&apos;m working on using them in the UIProcess) so they belong in the Shared folder.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>815994</commentid>
    <comment_count>1</comment_count>
      <attachid>184613</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-01-24 16:53:22 -0800</bug_when>
    <thetext>Created attachment 184613
Patch v1

Rubberstampable, hopefully</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>816005</commentid>
    <comment_count>2</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-01-24 17:00:42 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/140752</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>816032</commentid>
    <comment_count>3</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-01-24 17:49:42 -0800</bug_when>
    <thetext>I think this patch broke Mac builds:

make: *** No rule to make target `AuthenticationManagerMessageReceiver.cpp&apos;, needed by `all&apos;.  Stop.
Command /bin/sh failed with exit code 2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>816042</commentid>
    <comment_count>4</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-01-24 17:58:03 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; I think this patch broke Mac builds:
&gt; 
&gt; make: *** No rule to make target `AuthenticationManagerMessageReceiver.cpp&apos;, needed by `all&apos;.  Stop.
&gt; Command /bin/sh failed with exit code 2

Never mind. It seems like this was an issue with my local build files.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>816069</commentid>
    <comment_count>5</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-01-24 18:32:36 -0800</bug_when>
    <thetext>Actually, it reproduced. Landed the fix suggested by andersca in http://trac.webkit.org/changeset/140762.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>816600</commentid>
    <comment_count>6</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-01-25 07:55:38 -0800</bug_when>
    <thetext>Sorry bout that (Didn&apos;t effect my build either, but I see why too!)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>816729</commentid>
    <comment_count>7</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-01-25 10:40:23 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; Sorry bout that (Didn&apos;t effect my build either, but I see why too!)

It worked on bots too so it&apos;s either some xcode setting or incremental build thing.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>184613</attachid>
            <date>2013-01-24 16:53:22 -0800</date>
            <delta_ts>2013-01-24 16:55:44 -0800</delta_ts>
            <desc>Patch v1</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>223189</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYktp
dDIvQ01ha2VMaXN0cy50eHQKaW5kZXggMGEzMjM0Ni4uY2ViODcwYSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYktpdDIvQ01ha2VMaXN0
cy50eHQKQEAgLTYsOCArNiwxMCBAQCBzZXQoV2ViS2l0Ml9JTkNMVURFX0RJUkVDVE9SSUVTCiAg
ICAgIiR7V0VCS0lUMl9ESVJ9L1NoYXJlZCIKICAgICAiJHtXRUJLSVQyX0RJUn0vU2hhcmVkL0FQ
SSIKICAgICAiJHtXRUJLSVQyX0RJUn0vU2hhcmVkL0FQSS9jIgorICAgICIke1dFQktJVDJfRElS
fS9TaGFyZWQvQXV0aGVudGljYXRpb24iCiAgICAgIiR7V0VCS0lUMl9ESVJ9L1NoYXJlZC9Db29y
ZGluYXRlZEdyYXBoaWNzIgogICAgICIke1dFQktJVDJfRElSfS9TaGFyZWQvQ29yZUlQQ1N1cHBv
cnQiCisgICAgIiR7V0VCS0lUMl9ESVJ9L1NoYXJlZC9Eb3dubG9hZHMiCiAgICAgIiR7V0VCS0lU
Ml9ESVJ9L1NoYXJlZC9OZXR3b3JrIgogICAgICIke1dFQktJVDJfRElSfS9TaGFyZWQvUGx1Z2lu
cyIKICAgICAiJHtXRUJLSVQyX0RJUn0vU2hhcmVkL1BsdWdpbnMvTmV0c2NhcGUiCkBAIC0yNSwx
MCArMjcsOCBAQCBzZXQoV2ViS2l0Ml9JTkNMVURFX0RJUkVDVE9SSUVTCiAgICAgIiR7V0VCS0lU
Ml9ESVJ9L1VJUHJvY2Vzcy9QbHVnaW5zIgogICAgICIke1dFQktJVDJfRElSfS9XZWJQcm9jZXNz
IgogICAgICIke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0FwcGxpY2F0aW9uQ2FjaGUiCi0gICAg
IiR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvQXV0aGVudGljYXRpb24iCiAgICAgIiR7V0VCS0lU
Ml9ESVJ9L1dlYlByb2Nlc3MvQmF0dGVyeSIKICAgICAiJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vz
cy9Db29raWVzIgotICAgICIke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0Rvd25sb2FkcyIKICAg
ICAiJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9GdWxsU2NyZWVuIgogICAgICIke1dFQktJVDJf
RElSfS9XZWJQcm9jZXNzL0dlb2xvY2F0aW9uIgogICAgICIke1dFQktJVDJfRElSfS9XZWJQcm9j
ZXNzL05ldHdvcmtJbmZvIgpAQCAtMzgxLDE1ICszODEsMTUgQEAgc2V0KFdlYktpdDJfU09VUkNF
UwogCiAgICAgV2ViUHJvY2Vzcy9BcHBsaWNhdGlvbkNhY2hlL1dlYkFwcGxpY2F0aW9uQ2FjaGVN
YW5hZ2VyLmNwcAogCi0gICAgV2ViUHJvY2Vzcy9BdXRoZW50aWNhdGlvbi9BdXRoZW50aWNhdGlv
bk1hbmFnZXIuY3BwCisgICAgU2hhcmVkL0F1dGhlbnRpY2F0aW9uL0F1dGhlbnRpY2F0aW9uTWFu
YWdlci5jcHAKIAogICAgIFdlYlByb2Nlc3MvQmF0dGVyeS9XZWJCYXR0ZXJ5TWFuYWdlci5jcHAK
IAogICAgIFdlYlByb2Nlc3MvQ29va2llcy9XZWJDb29raWVNYW5hZ2VyLmNwcAogCi0gICAgV2Vi
UHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWQuY3BwCi0gICAgV2ViUHJvY2Vzcy9Eb3dubG9hZHMv
RG93bmxvYWRBdXRoZW50aWNhdGlvbkNsaWVudC5jcHAKLSAgICBXZWJQcm9jZXNzL0Rvd25sb2Fk
cy9Eb3dubG9hZE1hbmFnZXIuY3BwCisgICAgU2hhcmVkL0Rvd25sb2Fkcy9Eb3dubG9hZC5jcHAK
KyAgICBTaGFyZWQvRG93bmxvYWRzL0Rvd25sb2FkQXV0aGVudGljYXRpb25DbGllbnQuY3BwCisg
ICAgU2hhcmVkL0Rvd25sb2Fkcy9Eb3dubG9hZE1hbmFnZXIuY3BwCiAKICAgICBXZWJQcm9jZXNz
L0Z1bGxTY3JlZW4vV2ViRnVsbFNjcmVlbk1hbmFnZXIuY3BwCiAKQEAgLTU1Miw3ICs1NTIsNyBA
QCBzZXQoV2ViS2l0Ml9NRVNTQUdFU19JTl9GSUxFUwogCiAgICAgV2ViUHJvY2Vzcy9BcHBsaWNh
dGlvbkNhY2hlL1dlYkFwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyLm1lc3NhZ2VzLmluCiAKLSAgICBX
ZWJQcm9jZXNzL0F1dGhlbnRpY2F0aW9uL0F1dGhlbnRpY2F0aW9uTWFuYWdlci5tZXNzYWdlcy5p
bgorICAgIFNoYXJlZC9BdXRoZW50aWNhdGlvbi9BdXRoZW50aWNhdGlvbk1hbmFnZXIubWVzc2Fn
ZXMuaW4KIAogICAgIFdlYlByb2Nlc3MvQmF0dGVyeS9XZWJCYXR0ZXJ5TWFuYWdlci5tZXNzYWdl
cy5pbgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cKaW5kZXggMTI1OTIzNS4uYzMwNzcxYyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDM2IEBACisyMDEzLTAxLTI0ICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4K
KworICAgICAgICBNb3ZlIEF1dGhlbnRpY2F0aW9uIGFuZCBEb3dubG9hZHMgZnJvbSBXZWJQcm9j
ZXNzIHRvIFNoYXJlZC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTEwNzg3OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICogU2hhcmVkL0F1dGhlbnRpY2F0aW9uL0F1dGhlbnRpY2F0aW9uTWFuYWdlci5jcHA6
IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0F1dGhlbnRpY2F0aW9uL0F1
dGhlbnRpY2F0aW9uTWFuYWdlci5jcHAuCisgICAgICAgICogU2hhcmVkL0F1dGhlbnRpY2F0aW9u
L0F1dGhlbnRpY2F0aW9uTWFuYWdlci5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9BdXRoZW50aWNhdGlvbi9BdXRoZW50aWNhdGlvbk1hbmFnZXIuaC4KKyAgICAgICAg
KiBTaGFyZWQvQXV0aGVudGljYXRpb24vQXV0aGVudGljYXRpb25NYW5hZ2VyLm1lc3NhZ2VzLmlu
OiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9BdXRoZW50aWNhdGlvbi9B
dXRoZW50aWNhdGlvbk1hbmFnZXIubWVzc2FnZXMuaW4uCisgICAgICAgICogU2hhcmVkL0F1dGhl
bnRpY2F0aW9uL21hYy9BdXRoZW50aWNhdGlvbk1hbmFnZXIubWFjLm1tOiBSZW5hbWVkIGZyb20g
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9BdXRoZW50aWNhdGlvbi9tYWMvQXV0aGVudGljYXRp
b25NYW5hZ2VyLm1hYy5tbS4KKyAgICAgICAgKiBTaGFyZWQvRG93bmxvYWRzL0Rvd25sb2FkLmNw
cDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvRG93bmxvYWRzL0Rvd25s
b2FkLmNwcC4KKyAgICAgICAgKiBTaGFyZWQvRG93bmxvYWRzL0Rvd25sb2FkLmg6IFJlbmFtZWQg
ZnJvbSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZC5oLgorICAg
ICAgICAqIFNoYXJlZC9Eb3dubG9hZHMvRG93bmxvYWRBdXRoZW50aWNhdGlvbkNsaWVudC5jcHA6
IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9h
ZEF1dGhlbnRpY2F0aW9uQ2xpZW50LmNwcC4KKyAgICAgICAgKiBTaGFyZWQvRG93bmxvYWRzL0Rv
d25sb2FkQXV0aGVudGljYXRpb25DbGllbnQuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkQXV0aGVudGljYXRpb25DbGllbnQuaC4KKyAg
ICAgICAgKiBTaGFyZWQvRG93bmxvYWRzL0Rvd25sb2FkTWFuYWdlci5jcHA6IFJlbmFtZWQgZnJv
bSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZE1hbmFnZXIuY3Bw
LgorICAgICAgICAqIFNoYXJlZC9Eb3dubG9hZHMvRG93bmxvYWRNYW5hZ2VyLmg6IFJlbmFtZWQg
ZnJvbSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZE1hbmFnZXIu
aC4KKyAgICAgICAgKiBTaGFyZWQvRG93bmxvYWRzL2NmbmV0L0Rvd25sb2FkQ0ZOZXQuY3BwOiBS
ZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Eb3dubG9hZHMvY2ZuZXQvRG93
bmxvYWRDRk5ldC5jcHAuCisgICAgICAgICogU2hhcmVkL0Rvd25sb2Fkcy9jdXJsL0Rvd25sb2Fk
Q3VybC5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0Rvd25sb2Fk
cy9jdXJsL0Rvd25sb2FkQ3VybC5jcHAuCisgICAgICAgICogU2hhcmVkL0Rvd25sb2Fkcy9lZmwv
RG93bmxvYWRTb3VwRXJyb3JzRWZsLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvRG93bmxvYWRzL2VmbC9Eb3dubG9hZFNvdXBFcnJvcnNFZmwuY3BwLgorICAgICAg
ICAqIFNoYXJlZC9Eb3dubG9hZHMvZ3RrL0Rvd25sb2FkU291cEVycm9yc0d0ay5jcHA6IFJlbmFt
ZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0Rvd25sb2Fkcy9ndGsvRG93bmxvYWRT
b3VwRXJyb3JzR3RrLmNwcC4KKyAgICAgICAgKiBTaGFyZWQvRG93bmxvYWRzL21hYy9Eb3dubG9h
ZE1hYy5tbTogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvRG93bmxvYWRz
L21hYy9Eb3dubG9hZE1hYy5tbS4KKyAgICAgICAgKiBTaGFyZWQvRG93bmxvYWRzL3F0L0Rvd25s
b2FkUXQuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Eb3dubG9h
ZHMvcXQvRG93bmxvYWRRdC5jcHAuCisgICAgICAgICogU2hhcmVkL0Rvd25sb2Fkcy9xdC9RdEZp
bGVEb3dubG9hZGVyLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
RG93bmxvYWRzL3F0L1F0RmlsZURvd25sb2FkZXIuY3BwLgorICAgICAgICAqIFNoYXJlZC9Eb3du
bG9hZHMvcXQvUXRGaWxlRG93bmxvYWRlci5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9Eb3dubG9hZHMvcXQvUXRGaWxlRG93bmxvYWRlci5oLgorICAgICAgICAqIFNo
YXJlZC9Eb3dubG9hZHMvc291cC9Eb3dubG9hZFNvdXAuY3BwOiBSZW5hbWVkIGZyb20gU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9Eb3dubG9hZHMvc291cC9Eb3dubG9hZFNvdXAuY3BwLgorICAg
ICAgICAqIFNoYXJlZC9Eb3dubG9hZHMvc291cC9Eb3dubG9hZFNvdXBFcnJvcnMuaDogUmVuYW1l
ZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvRG93bmxvYWRzL3NvdXAvRG93bmxvYWRT
b3VwRXJyb3JzLmguCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBHTlVt
YWtlZmlsZS5saXN0LmFtOgorICAgICAgICAqIFRhcmdldC5wcmk6CisgICAgICAgICogV2ViS2l0
Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorCiAyMDEzLTAxLTI0ICBDaHJpc3RvcGhlIER1
bWV6ICA8Y2hyaXN0b3BoZS5kdW1lekBpbnRlbC5jb20+CiAKICAgICAgICAgW0VGTF1bV0syXSBV
c2UgQyBBUEkgaW5zaWRlIGV3a19mYXZpY29uX2RhdGFiYXNlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9HTlVtYWtlZmlsZS5saXN0LmFtIGIvU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUu
bGlzdC5hbQppbmRleCBkNWRkNDdiLi4zMmYwZTI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9HTlVtYWtlZmlsZS5saXN0LmFtCisrKyBiL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmxp
c3QuYW0KQEAgLTM2OSw2ICszNjksOCBAQCB3ZWJraXQyX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9X
ZWJLaXQyL1NoYXJlZC9BUEkvYy9XS1VzZXJDb250ZW50VVJMUGF0dGVybi5oIFwKIAlTb3VyY2Uv
V2ViS2l0Mi9TaGFyZWQvQVBJT2JqZWN0LmNwcCBcCiAJU291cmNlL1dlYktpdDIvU2hhcmVkL0FQ
SU9iamVjdC5oIFwKKwlTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQXV0aGVudGljYXRpb24vQXV0aGVu
dGljYXRpb25NYW5hZ2VyLmNwcCBcCisJU291cmNlL1dlYktpdDIvU2hhcmVkL0F1dGhlbnRpY2F0
aW9uL0F1dGhlbnRpY2F0aW9uTWFuYWdlci5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQmxv
Y2tpbmdSZXNwb25zZU1hcC5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvU2hhcmVhYmxlQml0
bWFwLmNwcCBcCiAJU291cmNlL1dlYktpdDIvU2hhcmVkL1NoYXJlYWJsZUJpdG1hcC5oIFwKQEAg
LTM4NCw2ICszODYsMTQgQEAgd2Via2l0Ml9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvQ29yZUlQQ1N1cHBvcnQvV2ViQ29ubmVjdGlvbk1lc3NhZ2VLaW5kcy5oIFwKIAlTb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvQ29yZUlQQ1N1cHBvcnQvV2ViQ29udGV4dE1lc3NhZ2VLaW5kcy5o
IFwKIAlTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvRHJhd2luZ0FyZWFJbmZvLmggXAorCVNvdXJjZS9X
ZWJLaXQyL1NoYXJlZC9Eb3dubG9hZHMvRG93bmxvYWQuY3BwIFwKKwlTb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvRG93bmxvYWRzL0Rvd25sb2FkLmggXAorCVNvdXJjZS9XZWJLaXQyL1NoYXJlZC9Eb3du
bG9hZHMvRG93bmxvYWRBdXRoZW50aWNhdGlvbkNsaWVudC5oIFwKKwlTb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvRG93bmxvYWRzL0Rvd25sb2FkTWFuYWdlci5jcHAgXAorCVNvdXJjZS9XZWJLaXQyL1No
YXJlZC9Eb3dubG9hZHMvRG93bmxvYWRNYW5hZ2VyLmggXAorCVNvdXJjZS9XZWJLaXQyL1NoYXJl
ZC9Eb3dubG9hZHMvZ3RrL0Rvd25sb2FkU291cEVycm9yc0d0ay5jcHAgXAorCVNvdXJjZS9XZWJL
aXQyL1NoYXJlZC9Eb3dubG9hZHMvc291cC9Eb3dubG9hZFNvdXAuY3BwIFwKKwlTb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvRG93bmxvYWRzL3NvdXAvRG93bmxvYWRTb3VwRXJyb3JzLmggXAogCVNvdXJj
ZS9XZWJLaXQyL1NoYXJlZC9FZGl0b3JTdGF0ZS5jcHAgXAogCVNvdXJjZS9XZWJLaXQyL1NoYXJl
ZC9FZGl0b3JTdGF0ZS5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvRm9udFNtb290aGluZ0xl
dmVsLmggXApAQCAtOTY5LDggKzk3OSw2IEBAIHdlYmtpdDJfc291cmNlcyArPSBcCiAJU291cmNl
L1dlYktpdDIvV2ViS2l0MlByZWZpeC5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0Fw
cGxpY2F0aW9uQ2FjaGUvV2ViQXBwbGljYXRpb25DYWNoZU1hbmFnZXIuaCBcCiAJU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9BcHBsaWNhdGlvbkNhY2hlL1dlYkFwcGxpY2F0aW9uQ2FjaGVNYW5h
Z2VyLmNwcCBcCi0JU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9BdXRoZW50aWNhdGlvbi9BdXRo
ZW50aWNhdGlvbk1hbmFnZXIuY3BwIFwKLQlTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0F1dGhl
bnRpY2F0aW9uL0F1dGhlbnRpY2F0aW9uTWFuYWdlci5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL0JhdHRlcnkvV2ViQmF0dGVyeU1hbmFnZXIuY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL0JhdHRlcnkvV2ViQmF0dGVyeU1hbmFnZXIuaCBcCiAJU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9Db29raWVzL1dlYkNvb2tpZU1hbmFnZXIuaCBcCkBAIC05NzgsMTQgKzk4Niw2
IEBAIHdlYmtpdDJfc291cmNlcyArPSBcCiAJU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Db29r
aWVzL3NvdXAvV2ViQ29va2llTWFuYWdlclNvdXAuY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL0Nvb2tpZXMvc291cC9XZWJLaXRTb3VwQ29va2llSmFyU3FsaXRlLmNwcCBcCiAJU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Db29raWVzL3NvdXAvV2ViS2l0U291cENvb2tpZUphclNx
bGl0ZS5oIFwKLQlTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZC5j
cHAgXAotCVNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkLmggXAot
CVNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkQXV0aGVudGljYXRp
b25DbGllbnQuaCBcCi0JU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxv
YWRNYW5hZ2VyLmNwcCBcCi0JU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Eb3dubG9hZHMvRG93
bmxvYWRNYW5hZ2VyLmggXAotCVNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvRG93bmxvYWRzL2d0
ay9Eb3dubG9hZFNvdXBFcnJvcnNHdGsuY3BwIFwKLQlTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L0Rvd25sb2Fkcy9zb3VwL0Rvd25sb2FkU291cC5jcHAgXAotCVNvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvRG93bmxvYWRzL3NvdXAvRG93bmxvYWRTb3VwRXJyb3JzLmggXAogCVNvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvRnVsbFNjcmVlbi9XZWJGdWxsU2NyZWVuTWFuYWdlci5jcHAgXAogCVNv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvRnVsbFNjcmVlbi9XZWJGdWxsU2NyZWVuTWFuYWdlci5o
IFwKIAlTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0dlb2xvY2F0aW9uL0dlb2xvY2F0aW9uUGVy
bWlzc2lvblJlcXVlc3RNYW5hZ2VyLmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvQXV0aGVudGljYXRpb24vQXV0aGVudGljYXRpb25NYW5hZ2VyLmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL1NoYXJlZC9BdXRoZW50aWNhdGlvbi9BdXRoZW50aWNhdGlvbk1hbmFnZXIuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiNzVlZjcKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQXV0aGVudGljYXRpb24vQXV0aGVudGljYXRpb25N
YW5hZ2VyLmNwcApAQCAtMCwwICsxLDE0MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJBdXRoZW50aWNhdGlvbk1hbmFnZXIuaCIKKworI2luY2x1ZGUgIkF1
dGhlbnRpY2F0aW9uTWFuYWdlck1lc3NhZ2VzLmgiCisjaW5jbHVkZSAiQ2hpbGRQcm9jZXNzLmgi
CisjaW5jbHVkZSAiRG93bmxvYWQuaCIKKyNpbmNsdWRlICJEb3dubG9hZFByb3h5TWVzc2FnZXMu
aCIKKyNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKKyNpbmNsdWRlICJXZWJGcmFt
ZS5oIgorI2luY2x1ZGUgIldlYlBhZ2UuaCIKKyNpbmNsdWRlICJXZWJQYWdlUHJveHlNZXNzYWdl
cy5oIgorI2luY2x1ZGUgPFdlYkNvcmUvQXV0aGVudGljYXRpb25DaGFsbGVuZ2UuaD4KKyNpbmNs
dWRlIDxXZWJDb3JlL0F1dGhlbnRpY2F0aW9uQ2xpZW50Lmg+CisKK3VzaW5nIG5hbWVzcGFjZSBX
ZWJDb3JlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKworc3RhdGljIHVpbnQ2NF90IGdlbmVyYXRl
QXV0aGVudGljYXRpb25DaGFsbGVuZ2VJRCgpCit7CisgICAgc3RhdGljIHVpbnQ2NF90IHVuaXF1
ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlSUQgPSAxOworICAgIHJldHVybiB1bmlxdWVBdXRoZW50
aWNhdGlvbkNoYWxsZW5nZUlEKys7Cit9CisKK2NvbnN0IEF0b21pY1N0cmluZyYgQXV0aGVudGlj
YXRpb25NYW5hZ2VyOjpzdXBwbGVtZW50TmFtZSgpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NB
TChBdG9taWNTdHJpbmcsIG5hbWUsICgiQXV0aGVudGljYXRpb25NYW5hZ2VyIiwgQXRvbWljU3Ry
aW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkpOworICAgIHJldHVybiBuYW1lOworfQorCitBdXRo
ZW50aWNhdGlvbk1hbmFnZXI6OkF1dGhlbnRpY2F0aW9uTWFuYWdlcihDaGlsZFByb2Nlc3MqIHBy
b2Nlc3MpCisgICAgOiBtX3Byb2Nlc3MocHJvY2VzcykKK3sKKyAgICBtX3Byb2Nlc3MtPmFkZE1l
c3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6QXV0aGVudGljYXRpb25NYW5hZ2VyOjptZXNzYWdlUmVj
ZWl2ZXJOYW1lKCksIHRoaXMpOworfQorCit2b2lkIEF1dGhlbnRpY2F0aW9uTWFuYWdlcjo6ZGlk
UmVjZWl2ZU1lc3NhZ2UoQ29yZUlQQzo6Q29ubmVjdGlvbiogY29ubmVjdGlvbiwgQ29yZUlQQzo6
TWVzc2FnZUlEIG1lc3NhZ2VJRCwgQ29yZUlQQzo6TWVzc2FnZURlY29kZXImIGRlY29kZXIpCit7
CisgICAgZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uTWFuYWdlck1lc3NhZ2UoY29ubmVjdGlvbiwg
bWVzc2FnZUlELCBkZWNvZGVyKTsKK30KKwordm9pZCBBdXRoZW50aWNhdGlvbk1hbmFnZXI6OmRp
ZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShXZWJGcmFtZSogZnJhbWUsIGNvbnN0IEF1
dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiBhdXRoZW50aWNhdGlvbkNoYWxsZW5nZSkKK3sKKyAgICBB
U1NFUlQoZnJhbWUpOworICAgIEFTU0VSVChmcmFtZS0+cGFnZSgpKTsKKworICAgIHVpbnQ2NF90
IGNoYWxsZW5nZUlEID0gZ2VuZXJhdGVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZUlEKCk7CisgICAg
bV9jaGFsbGVuZ2VzLnNldChjaGFsbGVuZ2VJRCwgYXV0aGVudGljYXRpb25DaGFsbGVuZ2UpOyAg
ICAKKyAgICAKKyAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGlk
UmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKGZyYW1lLT5mcmFtZUlEKCksIGF1dGhlbnRp
Y2F0aW9uQ2hhbGxlbmdlLCBjaGFsbGVuZ2VJRCksIGZyYW1lLT5wYWdlKCktPnBhZ2VJRCgpKTsK
K30KKwordm9pZCBBdXRoZW50aWNhdGlvbk1hbmFnZXI6OmRpZFJlY2VpdmVBdXRoZW50aWNhdGlv
bkNoYWxsZW5nZShEb3dubG9hZCogZG93bmxvYWQsIGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxl
bmdlJiBhdXRoZW50aWNhdGlvbkNoYWxsZW5nZSkKK3sKKyAgICB1aW50NjRfdCBjaGFsbGVuZ2VJ
RCA9IGdlbmVyYXRlQXV0aGVudGljYXRpb25DaGFsbGVuZ2VJRCgpOworICAgIG1fY2hhbGxlbmdl
cy5zZXQoY2hhbGxlbmdlSUQsIGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKTsKKworICAgIGRvd25s
b2FkLT5zZW5kKE1lc3NhZ2VzOjpEb3dubG9hZFByb3h5OjpEaWRSZWNlaXZlQXV0aGVudGljYXRp
b25DaGFsbGVuZ2UoYXV0aGVudGljYXRpb25DaGFsbGVuZ2UsIGNoYWxsZW5nZUlEKSk7Cit9CisK
Ky8vIEN1cnJlbnRseSwgb25seSBNYWMga25vd3MgaG93IHRvIHJlc3BvbmQgdG8gYXV0aGVudGlj
YXRpb24gY2hhbGxlbmdlcyB3aXRoIGNlcnRpZmljYXRlIGluZm8uCisjaWYgIVVTRShTRUNVUklU
WV9GUkFNRVdPUkspCitib29sIEF1dGhlbnRpY2F0aW9uTWFuYWdlcjo6dHJ5VXNlUGxhdGZvcm1D
ZXJ0aWZpY2F0ZUluZm9Gb3JDaGFsbGVuZ2UoY29uc3QgV2ViQ29yZTo6QXV0aGVudGljYXRpb25D
aGFsbGVuZ2UmLCBjb25zdCBQbGF0Zm9ybUNlcnRpZmljYXRlSW5mbyYpCit7CisgICAgcmV0dXJu
IGZhbHNlOworfQorI2VuZGlmCisKK3ZvaWQgQXV0aGVudGljYXRpb25NYW5hZ2VyOjp1c2VDcmVk
ZW50aWFsRm9yQ2hhbGxlbmdlKHVpbnQ2NF90IGNoYWxsZW5nZUlELCBjb25zdCBDcmVkZW50aWFs
JiBjcmVkZW50aWFsLCBjb25zdCBQbGF0Zm9ybUNlcnRpZmljYXRlSW5mbyYgY2VydGlmaWNhdGVJ
bmZvKQoreworICAgIEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlIGNoYWxsZW5nZSA9IG1fY2hhbGxl
bmdlcy50YWtlKGNoYWxsZW5nZUlEKTsKKyAgICBBU1NFUlQoIWNoYWxsZW5nZS5pc051bGwoKSk7
CisgICAgCisgICAgaWYgKHRyeVVzZVBsYXRmb3JtQ2VydGlmaWNhdGVJbmZvRm9yQ2hhbGxlbmdl
KGNoYWxsZW5nZSwgY2VydGlmaWNhdGVJbmZvKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAg
IEF1dGhlbnRpY2F0aW9uQ2xpZW50KiBjb3JlQ2xpZW50ID0gY2hhbGxlbmdlLmF1dGhlbnRpY2F0
aW9uQ2xpZW50KCk7CisgICAgaWYgKCFjb3JlQ2xpZW50KSB7CisgICAgICAgIC8vIFRoaXMgYXV0
aGVudGljYXRpb24gY2hhbGxlbmdlIGNvbWVzIGZyb20gYSBkb3dubG9hZC4KKyAgICAgICAgRG93
bmxvYWQ6OnJlY2VpdmVkQ3JlZGVudGlhbChjaGFsbGVuZ2UsIGNyZWRlbnRpYWwpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgY29yZUNsaWVudC0+cmVjZWl2ZWRDcmVkZW50aWFsKGNo
YWxsZW5nZSwgY3JlZGVudGlhbCk7Cit9CisKK3ZvaWQgQXV0aGVudGljYXRpb25NYW5hZ2VyOjpj
b250aW51ZVdpdGhvdXRDcmVkZW50aWFsRm9yQ2hhbGxlbmdlKHVpbnQ2NF90IGNoYWxsZW5nZUlE
KQoreworICAgIEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlIGNoYWxsZW5nZSA9IG1fY2hhbGxlbmdl
cy50YWtlKGNoYWxsZW5nZUlEKTsKKyAgICBBU1NFUlQoIWNoYWxsZW5nZS5pc051bGwoKSk7Cisg
ICAgQXV0aGVudGljYXRpb25DbGllbnQqIGNvcmVDbGllbnQgPSBjaGFsbGVuZ2UuYXV0aGVudGlj
YXRpb25DbGllbnQoKTsKKyAgICBpZiAoIWNvcmVDbGllbnQpIHsKKyAgICAgICAgLy8gVGhpcyBh
dXRoZW50aWNhdGlvbiBjaGFsbGVuZ2UgY29tZXMgZnJvbSBhIGRvd25sb2FkLgorICAgICAgICBE
b3dubG9hZDo6cmVjZWl2ZWRSZXF1ZXN0VG9Db250aW51ZVdpdGhvdXRDcmVkZW50aWFsKGNoYWxs
ZW5nZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjb3JlQ2xpZW50LT5yZWNlaXZl
ZFJlcXVlc3RUb0NvbnRpbnVlV2l0aG91dENyZWRlbnRpYWwoY2hhbGxlbmdlKTsKK30KKwordm9p
ZCBBdXRoZW50aWNhdGlvbk1hbmFnZXI6OmNhbmNlbENoYWxsZW5nZSh1aW50NjRfdCBjaGFsbGVu
Z2VJRCkKK3sKKyAgICBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSBjaGFsbGVuZ2UgPSBtX2NoYWxs
ZW5nZXMudGFrZShjaGFsbGVuZ2VJRCk7CisgICAgQVNTRVJUKCFjaGFsbGVuZ2UuaXNOdWxsKCkp
OworICAgIEF1dGhlbnRpY2F0aW9uQ2xpZW50KiBjb3JlQ2xpZW50ID0gY2hhbGxlbmdlLmF1dGhl
bnRpY2F0aW9uQ2xpZW50KCk7CisgICAgaWYgKCFjb3JlQ2xpZW50KSB7CisgICAgICAgIC8vIFRo
aXMgYXV0aGVudGljYXRpb24gY2hhbGxlbmdlIGNvbWVzIGZyb20gYSBkb3dubG9hZC4KKyAgICAg
ICAgRG93bmxvYWQ6OnJlY2VpdmVkQ2FuY2VsbGF0aW9uKGNoYWxsZW5nZSk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBjb3JlQ2xpZW50LT5yZWNlaXZlZENhbmNlbGxhdGlvbihjaGFs
bGVuZ2UpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1NoYXJlZC9BdXRoZW50aWNhdGlvbi9BdXRoZW50aWNhdGlvbk1hbmFnZXIuaCBiL1Nv
dXJjZS9XZWJLaXQyL1NoYXJlZC9BdXRoZW50aWNhdGlvbi9BdXRoZW50aWNhdGlvbk1hbmFnZXIu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MDcyODM4Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL0F1dGhlbnRpY2F0aW9uL0F1dGhlbnRpY2F0
aW9uTWFuYWdlci5oCkBAIC0wLDAgKzEsNzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEF1dGhl
bnRpY2F0aW9uTWFuYWdlcl9oCisjZGVmaW5lIEF1dGhlbnRpY2F0aW9uTWFuYWdlcl9oCisKKyNp
bmNsdWRlICJNZXNzYWdlUmVjZWl2ZXIuaCIKKyNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzc1N1cHBs
ZW1lbnQuaCIKKyNpbmNsdWRlICJXZWJQcm9jZXNzU3VwcGxlbWVudC5oIgorI2luY2x1ZGUgPFdl
YkNvcmUvQXV0aGVudGljYXRpb25DaGFsbGVuZ2UuaD4KKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5o
PgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICBj
bGFzcyBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZTsKKyAgICBjbGFzcyBDcmVkZW50aWFsOworfQor
CituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgQ2hpbGRQcm9jZXNzOworY2xhc3MgRG93bmxv
YWQ7CitjbGFzcyBQbGF0Zm9ybUNlcnRpZmljYXRlSW5mbzsKK2NsYXNzIFdlYkZyYW1lOworCitj
bGFzcyBBdXRoZW50aWNhdGlvbk1hbmFnZXIgOiBwdWJsaWMgV2ViUHJvY2Vzc1N1cHBsZW1lbnQs
IHB1YmxpYyBOZXR3b3JrUHJvY2Vzc1N1cHBsZW1lbnQsIHB1YmxpYyBDb3JlSVBDOjpNZXNzYWdl
UmVjZWl2ZXIgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEF1dGhlbnRpY2F0aW9uTWFuYWdl
cik7CitwdWJsaWM6CisgICAgZXhwbGljaXQgQXV0aGVudGljYXRpb25NYW5hZ2VyKENoaWxkUHJv
Y2VzcyopOworCisgICAgc3RhdGljIGNvbnN0IEF0b21pY1N0cmluZyYgc3VwcGxlbWVudE5hbWUo
KTsKKworICAgIHZvaWQgZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKFdlYkZyYW1l
KiwgY29uc3QgV2ViQ29yZTo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2UmKTsKKyAgICB2b2lkIGRp
ZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShEb3dubG9hZCosIGNvbnN0IFdlYkNvcmU6
OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJik7CisKKyAgICB2b2lkIHVzZUNyZWRlbnRpYWxGb3JD
aGFsbGVuZ2UodWludDY0X3QgY2hhbGxlbmdlSUQsIGNvbnN0IFdlYkNvcmU6OkNyZWRlbnRpYWwm
LCBjb25zdCBQbGF0Zm9ybUNlcnRpZmljYXRlSW5mbyYpOworICAgIHZvaWQgY29udGludWVXaXRo
b3V0Q3JlZGVudGlhbEZvckNoYWxsZW5nZSh1aW50NjRfdCBjaGFsbGVuZ2VJRCk7CisgICAgdm9p
ZCBjYW5jZWxDaGFsbGVuZ2UodWludDY0X3QgY2hhbGxlbmdlSUQpOworCitwcml2YXRlOgorICAg
IC8vIENvcmVJUEM6Ok1lc3NhZ2VSZWNlaXZlcgorICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZl
TWVzc2FnZShDb3JlSVBDOjpDb25uZWN0aW9uKiwgQ29yZUlQQzo6TWVzc2FnZUlELCBDb3JlSVBD
OjpNZXNzYWdlRGVjb2RlciYpIE9WRVJSSURFOworICAgIHZvaWQgZGlkUmVjZWl2ZUF1dGhlbnRp
Y2F0aW9uTWFuYWdlck1lc3NhZ2UoQ29yZUlQQzo6Q29ubmVjdGlvbiosIENvcmVJUEM6Ok1lc3Nh
Z2VJRCwgQ29yZUlQQzo6TWVzc2FnZURlY29kZXImKTsKKworICAgIGJvb2wgdHJ5VXNlUGxhdGZv
cm1DZXJ0aWZpY2F0ZUluZm9Gb3JDaGFsbGVuZ2UoY29uc3QgV2ViQ29yZTo6QXV0aGVudGljYXRp
b25DaGFsbGVuZ2UmLCBjb25zdCBQbGF0Zm9ybUNlcnRpZmljYXRlSW5mbyYpOworCisgICAgQ2hp
bGRQcm9jZXNzKiBtX3Byb2Nlc3M7CisKKyAgICB0eXBlZGVmIEhhc2hNYXA8dWludDY0X3QsIFdl
YkNvcmU6OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlPiBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZU1h
cDsKKyAgICBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZU1hcCBtX2NoYWxsZW5nZXM7Cit9OworCit9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEF1dGhlbnRpY2F0aW9uTWFuYWdlcl9o
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQXV0aGVudGljYXRpb24vQXV0aGVu
dGljYXRpb25NYW5hZ2VyLm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL0F1dGhl
bnRpY2F0aW9uL0F1dGhlbnRpY2F0aW9uTWFuYWdlci5tZXNzYWdlcy5pbgpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi40MjJkOWFjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdDIvU2hhcmVkL0F1dGhlbnRpY2F0aW9uL0F1dGhlbnRpY2F0aW9uTWFuYWdlci5tZXNz
YWdlcy5pbgpAQCAtMCwwICsxLDI3IEBACisjIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJl
IG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyMgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgor
IyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMCisjIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisjIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
CisjIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisjIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisKK21lc3NhZ2VzIC0+IEF1dGhlbnRpY2F0aW9uTWFuYWdlciBMZWdhY3lSZWNlaXZl
ciB7CisgICAgdm9pZCBVc2VDcmVkZW50aWFsRm9yQ2hhbGxlbmdlKHVpbnQ2NF90IGNoYWxsZW5n
ZUlELCBXZWJDb3JlOjpDcmVkZW50aWFsIGNyZWRlbnRpYWwsIFdlYktpdDo6UGxhdGZvcm1DZXJ0
aWZpY2F0ZUluZm8gY2VydGlmaWNhdGUpOworICAgIHZvaWQgQ29udGludWVXaXRob3V0Q3JlZGVu
dGlhbEZvckNoYWxsZW5nZSh1aW50NjRfdCBjaGFsbGVuZ2VJRCk7CisgICAgdm9pZCBDYW5jZWxD
aGFsbGVuZ2UodWludDY0X3QgY2hhbGxlbmdlSUQpOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvU2hhcmVkL0F1dGhlbnRpY2F0aW9uL21hYy9BdXRoZW50aWNhdGlvbk1hbmFnZXIubWFj
Lm1tIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL0F1dGhlbnRpY2F0aW9uL21hYy9BdXRoZW50aWNh
dGlvbk1hbmFnZXIubWFjLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFh
NzcyYzMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQXV0aGVudGlj
YXRpb24vbWFjL0F1dGhlbnRpY2F0aW9uTWFuYWdlci5tYWMubW0KQEAgLTAsMCArMSw3MiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBdXRoZW50aWNhdGlv
bk1hbmFnZXIuaCIKKworI2lmIFVTRShTRUNVUklUWV9GUkFNRVdPUkspCisKKyNpbmNsdWRlICJQ
bGF0Zm9ybUNlcnRpZmljYXRlSW5mby5oIgorI2luY2x1ZGUgPFNlY3VyaXR5L1NlY0lkZW50aXR5
Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9BdXRoZW50aWNhdGlvbkNoYWxsZW5nZS5oPgorCit1c2lu
ZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2Jvb2wgQXV0aGVu
dGljYXRpb25NYW5hZ2VyOjp0cnlVc2VQbGF0Zm9ybUNlcnRpZmljYXRlSW5mb0ZvckNoYWxsZW5n
ZShjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYgY2hhbGxlbmdlLCBjb25zdCBQbGF0Zm9y
bUNlcnRpZmljYXRlSW5mbyYgY2VydGlmaWNhdGVJbmZvKQoreworICAgIC8vIEZJWE1FIChOZXR3
b3JrUHJvY2Vzcyk6IFRoaXMgb2NjdXJzIGluIHRoZSBXZWJQcm9jZXNzIGFuZCB0aGVyZWZvcmUg
d29uJ3Qgd29yay4KKyAgICAvLyBXZSBuZWVkIHRoaXMgdG8gaGFwcGVuIGluIHRoZSBOZXR3b3Jr
UHJvY2Vzcy4KKworICAgIENGQXJyYXlSZWYgY2hhaW4gPSBjZXJ0aWZpY2F0ZUluZm8uY2VydGlm
aWNhdGVDaGFpbigpOworICAgIGlmICghY2hhaW4pCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgCisgICAgQVNTRVJUKENGQXJyYXlHZXRDb3VudChjaGFpbikpOworCisgICAgLy8gVGhl
IHBhc3NlZC1pbiBjZXJ0aWZpY2F0ZSBjaGFpbiBpbmNsdWRlcyB0aGUgaWRlbnRpdHkgY2VydGlm
aWNhdGUgYXQgaW5kZXggMCwgYW5kIGFkZGl0aW9uYWwgY2VydGlmaWNhdGVzIHN0YXJ0aW5nIGF0
IGluZGV4IDEuCisgICAgU2VjSWRlbnRpdHlSZWYgaWRlbnRpdHk7CisgICAgT1NTdGF0dXMgcmVz
dWx0ID0gU2VjSWRlbnRpdHlDcmVhdGVXaXRoQ2VydGlmaWNhdGUoTlVMTCwgKFNlY0NlcnRpZmlj
YXRlUmVmKUNGQXJyYXlHZXRWYWx1ZUF0SW5kZXgoY2hhaW4sIDApLCAmaWRlbnRpdHkpOworICAg
IGlmIChyZXN1bHQgIT0gZXJyU2VjU3VjY2VzcykgeworICAgICAgICBMT0dfRVJST1IoIlVuYWJs
ZSB0byBjcmVhdGUgU2VjSWRlbnRpdHlSZWYgd2l0aCBjZXJ0aWZpY2F0ZSAtICVpIiwgcmVzdWx0
KTsKKyAgICAgICAgW2NoYWxsZW5nZS5zZW5kZXIoKSBjYW5jZWxBdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZTpjaGFsbGVuZ2UubnNVUkxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSgpXTsKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorCisgICAgQ0ZJbmRleCBjaGFpbkNvdW50ID0gQ0ZBcnJheUdl
dENvdW50KGNoYWluKTsKKyAgICBOU0FycmF5ICpuc0NoYWluID0gY2hhaW5Db3VudCA+IDEgPyBb
KE5TQXJyYXkgKiljaGFpbiBzdWJhcnJheVdpdGhSYW5nZTpOU01ha2VSYW5nZSgxLCBjaGFpbkNv
dW50IC0gMSldIDogbmlsOworCisgICAgTlNVUkxDcmVkZW50aWFsICpjcmVkZW50aWFsID0gW05T
VVJMQ3JlZGVudGlhbCBjcmVkZW50aWFsV2l0aElkZW50aXR5OmlkZW50aXR5CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VydGlm
aWNhdGVzOm5zQ2hhaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcGVyc2lzdGVuY2U6TlNVUkxDcmVkZW50aWFsUGVyc2lzdGVu
Y2VOb25lXTsKKworICAgIFtjaGFsbGVuZ2Uuc2VuZGVyKCkgdXNlQ3JlZGVudGlhbDpjcmVkZW50
aWFsIGZvckF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlOmNoYWxsZW5nZS5uc1VSTEF1dGhlbnRpY2F0
aW9uQ2hhbGxlbmdlKCldOworICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKKworI2VuZGlmIC8vIFVTRShTRUNVUklUWV9GUkFNRVdPUkspCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvRG93bmxvYWRzL0Rvd25sb2FkLmNwcCBiL1NvdXJjZS9XZWJL
aXQyL1NoYXJlZC9Eb3dubG9hZHMvRG93bmxvYWQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjNmNjI0MTYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvRG93bmxvYWRzL0Rvd25sb2FkLmNwcApAQCAtMCwwICsxLDE2MiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMCwgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJEb3dubG9hZC5oIgorCisj
aW5jbHVkZSAiQXV0aGVudGljYXRpb25NYW5hZ2VyLmgiCisjaW5jbHVkZSAiQ29ubmVjdGlvbi5o
IgorI2luY2x1ZGUgIkRhdGFSZWZlcmVuY2UuaCIKKyNpbmNsdWRlICJEb3dubG9hZEF1dGhlbnRp
Y2F0aW9uQ2xpZW50LmgiCisjaW5jbHVkZSAiRG93bmxvYWRQcm94eU1lc3NhZ2VzLmgiCisjaW5j
bHVkZSAiRG93bmxvYWRNYW5hZ2VyLmgiCisjaW5jbHVkZSAiU2FuZGJveEV4dGVuc2lvbi5oIgor
I2luY2x1ZGUgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgorCit1c2luZyBuYW1lc3BhY2UgV2Vi
Q29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1Bhc3NPd25QdHI8RG93bmxvYWQ+IERvd25s
b2FkOjpjcmVhdGUoRG93bmxvYWRNYW5hZ2VyJiBkb3dubG9hZE1hbmFnZXIsIHVpbnQ2NF90IGRv
d25sb2FkSUQsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKK3sKKyAgICByZXR1cm4g
YWRvcHRQdHIobmV3IERvd25sb2FkKGRvd25sb2FkTWFuYWdlciwgZG93bmxvYWRJRCwgcmVxdWVz
dCkpOworfQorCitEb3dubG9hZDo6RG93bmxvYWQoRG93bmxvYWRNYW5hZ2VyJiBkb3dubG9hZE1h
bmFnZXIsIHVpbnQ2NF90IGRvd25sb2FkSUQsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVz
dCkKKyAgICA6IG1fZG93bmxvYWRNYW5hZ2VyKGRvd25sb2FkTWFuYWdlcikKKyAgICAsIG1fZG93
bmxvYWRJRChkb3dubG9hZElEKQorICAgICwgbV9yZXF1ZXN0KHJlcXVlc3QpCisjaWYgVVNFKENG
TkVUV09SSykKKyAgICAsIG1fYWxsb3dPdmVyd3JpdGUoZmFsc2UpCisjZW5kaWYKKyNpZiBQTEFU
Rk9STShRVCkKKyAgICAsIG1fcXREb3dubG9hZGVyKDApCisjZW5kaWYKK3sKKyAgICBBU1NFUlQo
bV9kb3dubG9hZElEKTsKKworICAgIG1fZG93bmxvYWRNYW5hZ2VyLmRpZENyZWF0ZURvd25sb2Fk
KCk7Cit9CisKK0Rvd25sb2FkOjp+RG93bmxvYWQoKQoreworICAgIHBsYXRmb3JtSW52YWxpZGF0
ZSgpOworCisgICAgbV9kb3dubG9hZE1hbmFnZXIuZGlkRGVzdHJveURvd25sb2FkKCk7Cit9CisK
K0NvcmVJUEM6OkNvbm5lY3Rpb24qIERvd25sb2FkOjpjb25uZWN0aW9uKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbV9kb3dubG9hZE1hbmFnZXIuZG93bmxvYWRQcm94eUNvbm5lY3Rpb24oKTsKK30K
Kwordm9pZCBEb3dubG9hZDo6ZGlkU3RhcnQoKQoreworICAgIHNlbmQoTWVzc2FnZXM6OkRvd25s
b2FkUHJveHk6OkRpZFN0YXJ0KG1fcmVxdWVzdCkpOworfQorCit2b2lkIERvd25sb2FkOjpkaWRS
ZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVu
Z2UmIGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKQoreworICAgIG1fZG93bmxvYWRNYW5hZ2VyLmRv
d25sb2Fkc0F1dGhlbnRpY2F0aW9uTWFuYWdlcigpLmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNo
YWxsZW5nZSh0aGlzLCBhdXRoZW50aWNhdGlvbkNoYWxsZW5nZSk7Cit9CisKK3ZvaWQgRG93bmxv
YWQ6OmRpZFJlY2VpdmVSZXNwb25zZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkK
K3sKKyAgICBzZW5kKE1lc3NhZ2VzOjpEb3dubG9hZFByb3h5OjpEaWRSZWNlaXZlUmVzcG9uc2Uo
cmVzcG9uc2UpKTsKK30KKwordm9pZCBEb3dubG9hZDo6ZGlkUmVjZWl2ZURhdGEodWludDY0X3Qg
bGVuZ3RoKQoreworICAgIHNlbmQoTWVzc2FnZXM6OkRvd25sb2FkUHJveHk6OkRpZFJlY2VpdmVE
YXRhKGxlbmd0aCkpOworfQorCitib29sIERvd25sb2FkOjpzaG91bGREZWNvZGVTb3VyY2VEYXRh
T2ZNSU1FVHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlKQoreworICAgIGJvb2wgcmVzdWx0Owor
ICAgIGlmICghc2VuZFN5bmMoTWVzc2FnZXM6OkRvd25sb2FkUHJveHk6OlNob3VsZERlY29kZVNv
dXJjZURhdGFPZk1JTUVUeXBlKG1pbWVUeXBlKSwgTWVzc2FnZXM6OkRvd25sb2FkUHJveHk6OlNo
b3VsZERlY29kZVNvdXJjZURhdGFPZk1JTUVUeXBlOjpSZXBseShyZXN1bHQpKSkKKyAgICAgICAg
cmV0dXJuIHRydWU7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitTdHJpbmcgRG93bmxvYWQ6
OnJldHJpZXZlRGVzdGluYXRpb25XaXRoU3VnZ2VzdGVkRmlsZW5hbWUoY29uc3QgU3RyaW5nJiBm
aWxlbmFtZSwgYm9vbCYgYWxsb3dPdmVyd3JpdGUpCit7CisgICAgU3RyaW5nIGRlc3RpbmF0aW9u
OworICAgIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlOwor
ICAgIGlmICghc2VuZFN5bmMoTWVzc2FnZXM6OkRvd25sb2FkUHJveHk6OkRlY2lkZURlc3RpbmF0
aW9uV2l0aFN1Z2dlc3RlZEZpbGVuYW1lKGZpbGVuYW1lKSwgTWVzc2FnZXM6OkRvd25sb2FkUHJv
eHk6OkRlY2lkZURlc3RpbmF0aW9uV2l0aFN1Z2dlc3RlZEZpbGVuYW1lOjpSZXBseShkZXN0aW5h
dGlvbiwgYWxsb3dPdmVyd3JpdGUsIHNhbmRib3hFeHRlbnNpb25IYW5kbGUpKSkKKyAgICAgICAg
cmV0dXJuIFN0cmluZygpOworCisgICAgbV9zYW5kYm94RXh0ZW5zaW9uID0gU2FuZGJveEV4dGVu
c2lvbjo6Y3JlYXRlKHNhbmRib3hFeHRlbnNpb25IYW5kbGUpOworICAgIGlmIChtX3NhbmRib3hF
eHRlbnNpb24pCisgICAgICAgIG1fc2FuZGJveEV4dGVuc2lvbi0+Y29uc3VtZSgpOworCisgICAg
cmV0dXJuIGRlc3RpbmF0aW9uOworfQorCitTdHJpbmcgRG93bmxvYWQ6OmRlY2lkZURlc3RpbmF0
aW9uV2l0aFN1Z2dlc3RlZEZpbGVuYW1lKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIGJvb2wmIGFs
bG93T3ZlcndyaXRlKQoreworICAgIFN0cmluZyBkZXN0aW5hdGlvbiA9IHJldHJpZXZlRGVzdGlu
YXRpb25XaXRoU3VnZ2VzdGVkRmlsZW5hbWUoZmlsZW5hbWUsIGFsbG93T3ZlcndyaXRlKTsKKwor
ICAgIGRpZERlY2lkZURlc3RpbmF0aW9uKGRlc3RpbmF0aW9uLCBhbGxvd092ZXJ3cml0ZSk7CisK
KyAgICByZXR1cm4gZGVzdGluYXRpb247Cit9CisKK3ZvaWQgRG93bmxvYWQ6OmRpZENyZWF0ZURl
c3RpbmF0aW9uKGNvbnN0IFN0cmluZyYgcGF0aCkKK3sKKyAgICBzZW5kKE1lc3NhZ2VzOjpEb3du
bG9hZFByb3h5OjpEaWRDcmVhdGVEZXN0aW5hdGlvbihwYXRoKSk7Cit9CisKK3ZvaWQgRG93bmxv
YWQ6OmRpZEZpbmlzaCgpCit7CisgICAgcGxhdGZvcm1EaWRGaW5pc2goKTsKKworICAgIHNlbmQo
TWVzc2FnZXM6OkRvd25sb2FkUHJveHk6OkRpZEZpbmlzaCgpKTsKKworICAgIGlmIChtX3NhbmRi
b3hFeHRlbnNpb24pCisgICAgICAgIG1fc2FuZGJveEV4dGVuc2lvbi0+aW52YWxpZGF0ZSgpOwor
CisgICAgbV9kb3dubG9hZE1hbmFnZXIuZG93bmxvYWRGaW5pc2hlZCh0aGlzKTsKK30KKwordm9p
ZCBEb3dubG9hZDo6ZGlkRmFpbChjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJvciwgY29uc3QgQ29y
ZUlQQzo6RGF0YVJlZmVyZW5jZSYgcmVzdW1lRGF0YSkKK3sKKyAgICBzZW5kKE1lc3NhZ2VzOjpE
b3dubG9hZFByb3h5OjpEaWRGYWlsKGVycm9yLCByZXN1bWVEYXRhKSk7CisKKyAgICBpZiAobV9z
YW5kYm94RXh0ZW5zaW9uKQorICAgICAgICBtX3NhbmRib3hFeHRlbnNpb24tPmludmFsaWRhdGUo
KTsKKyAgICBtX2Rvd25sb2FkTWFuYWdlci5kb3dubG9hZEZpbmlzaGVkKHRoaXMpOworfQorCit2
b2lkIERvd25sb2FkOjpkaWRDYW5jZWwoY29uc3QgQ29yZUlQQzo6RGF0YVJlZmVyZW5jZSYgcmVz
dW1lRGF0YSkKK3sKKyAgICBzZW5kKE1lc3NhZ2VzOjpEb3dubG9hZFByb3h5OjpEaWRDYW5jZWwo
cmVzdW1lRGF0YSkpOworCisgICAgaWYgKG1fc2FuZGJveEV4dGVuc2lvbikKKyAgICAgICAgbV9z
YW5kYm94RXh0ZW5zaW9uLT5pbnZhbGlkYXRlKCk7CisgICAgbV9kb3dubG9hZE1hbmFnZXIuZG93
bmxvYWRGaW5pc2hlZCh0aGlzKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvRG93bmxvYWRzL0Rvd25sb2FkLmggYi9Tb3VyY2Uv
V2ViS2l0Mi9TaGFyZWQvRG93bmxvYWRzL0Rvd25sb2FkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uNzczODdiMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1NoYXJlZC9Eb3dubG9hZHMvRG93bmxvYWQuaApAQCAtMCwwICsxLDE1NSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMCwgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpZm5kZWYgRG93bmxvYWRfaAorI2RlZmluZSBEb3dubG9hZF9oCisKKyNpbmNs
dWRlICJNZXNzYWdlU2VuZGVyLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZVJlcXVlc3Qu
aD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0
ci5oPgorCisjaWYgUExBVEZPUk0oTUFDKQorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKwor
T0JKQ19DTEFTUyBOU1VSTERvd25sb2FkOworT0JKQ19DTEFTUyBXS0Rvd25sb2FkQXNEZWxlZ2F0
ZTsKKyNlbmRpZgorCisjaWYgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShFRkwpCisjaW5jbHVk
ZSA8V2ViQ29yZS9SZXNvdXJjZUhhbmRsZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VI
YW5kbGVDbGllbnQuaD4KKyNlbmRpZgorCisjaWYgVVNFKENGTkVUV09SSykKKyNpbmNsdWRlIDxD
Rk5ldHdvcmsvQ0ZVUkxEb3dubG9hZFByaXYuaD4KKyNlbmRpZgorCituYW1lc3BhY2UgQ29yZUlQ
QyB7CisgICAgY2xhc3MgRGF0YVJlZmVyZW5jZTsKK30KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
ICAgIGNsYXNzIEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlOworICAgIGNsYXNzIENyZWRlbnRpYWw7
CisgICAgY2xhc3MgUmVzb3VyY2VFcnJvcjsKKyAgICBjbGFzcyBSZXNvdXJjZUhhbmRsZTsKKyAg
ICBjbGFzcyBSZXNvdXJjZVJlc3BvbnNlOworfQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xh
c3MgRG93bmxvYWRBdXRoZW50aWNhdGlvbkNsaWVudDsKK2NsYXNzIERvd25sb2FkTWFuYWdlcjsK
K2NsYXNzIFNhbmRib3hFeHRlbnNpb247CitjbGFzcyBXZWJQYWdlOworCisjaWYgUExBVEZPUk0o
UVQpCitjbGFzcyBRdEZpbGVEb3dubG9hZGVyOworI2VuZGlmCisKK2NsYXNzIERvd25sb2FkIDog
cHVibGljIENvcmVJUEM6Ok1lc3NhZ2VTZW5kZXI8RG93bmxvYWQ+IHsKKyAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShEb3dubG9hZCk7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8RG93
bmxvYWQ+IGNyZWF0ZShEb3dubG9hZE1hbmFnZXImLCB1aW50NjRfdCBkb3dubG9hZElELCBjb25z
dCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmKTsKKyAgICB+RG93bmxvYWQoKTsKKworICAgIC8v
IFVzZWQgYnkgTWVzc2FnZVNlbmRlci4KKyAgICBDb3JlSVBDOjpDb25uZWN0aW9uKiBjb25uZWN0
aW9uKCkgY29uc3Q7CisgICAgdWludDY0X3QgZGVzdGluYXRpb25JRCgpIGNvbnN0IHsgcmV0dXJu
IGRvd25sb2FkSUQoKTsgfQorCisgICAgdm9pZCBzdGFydCgpOworICAgIHZvaWQgc3RhcnRXaXRo
SGFuZGxlKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlKiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VS
ZXNwb25zZSYpOworICAgIHZvaWQgY2FuY2VsKCk7CisKKyAgICB1aW50NjRfdCBkb3dubG9hZElE
KCkgY29uc3QgeyByZXR1cm4gbV9kb3dubG9hZElEOyB9CisKKyAgICB2b2lkIGRpZFN0YXJ0KCk7
CisgICAgdm9pZCBkaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoY29uc3QgV2ViQ29y
ZTo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2UmKTsKKyAgICB2b2lkIGRpZFJlY2VpdmVSZXNwb25z
ZShjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJik7CisgICAgdm9pZCBkaWRSZWNlaXZl
RGF0YSh1aW50NjRfdCBsZW5ndGgpOworICAgIGJvb2wgc2hvdWxkRGVjb2RlU291cmNlRGF0YU9m
TUlNRVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSk7CisgICAgU3RyaW5nIGRlY2lkZURlc3Rp
bmF0aW9uV2l0aFN1Z2dlc3RlZEZpbGVuYW1lKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIGJvb2wm
IGFsbG93T3ZlcndyaXRlKTsKKyAgICB2b2lkIGRpZENyZWF0ZURlc3RpbmF0aW9uKGNvbnN0IFN0
cmluZyYgcGF0aCk7CisgICAgdm9pZCBkaWRGaW5pc2goKTsKKyAgICB2b2lkIHBsYXRmb3JtRGlk
RmluaXNoKCk7CisgICAgdm9pZCBkaWRGYWlsKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlRXJyb3Im
LCBjb25zdCBDb3JlSVBDOjpEYXRhUmVmZXJlbmNlJiByZXN1bWVEYXRhKTsKKyAgICB2b2lkIGRp
ZENhbmNlbChjb25zdCBDb3JlSVBDOjpEYXRhUmVmZXJlbmNlJiByZXN1bWVEYXRhKTsKKyAgICB2
b2lkIGRpZERlY2lkZURlc3RpbmF0aW9uKGNvbnN0IFN0cmluZyYsIGJvb2wgYWxsb3dPdmVyd3Jp
dGUpOworCisjaWYgUExBVEZPUk0oUVQpCisgICAgdm9pZCBzdGFydFRyYW5zZmVyKGNvbnN0IFN0
cmluZyYgZGVzdGluYXRpb24pOworI2VuZGlmCisKKyNpZiBVU0UoQ0ZORVRXT1JLKQorICAgIGNv
bnN0IFN0cmluZyYgZGVzdGluYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2Rlc3RpbmF0aW9uOyB9
CisgICAgRG93bmxvYWRBdXRoZW50aWNhdGlvbkNsaWVudCogYXV0aGVudGljYXRpb25DbGllbnQo
KTsKKyNlbmRpZgorCisgICAgLy8gQXV0aGVudGljYXRpb24KKyAgICBzdGF0aWMgdm9pZCByZWNl
aXZlZENyZWRlbnRpYWwoY29uc3QgV2ViQ29yZTo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2UmLCBj
b25zdCBXZWJDb3JlOjpDcmVkZW50aWFsJik7CisgICAgc3RhdGljIHZvaWQgcmVjZWl2ZWRSZXF1
ZXN0VG9Db250aW51ZVdpdGhvdXRDcmVkZW50aWFsKGNvbnN0IFdlYkNvcmU6OkF1dGhlbnRpY2F0
aW9uQ2hhbGxlbmdlJik7CisgICAgc3RhdGljIHZvaWQgcmVjZWl2ZWRDYW5jZWxsYXRpb24oY29u
c3QgV2ViQ29yZTo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2UmKTsKKworICAgIHZvaWQgdXNlQ3Jl
ZGVudGlhbChjb25zdCBXZWJDb3JlOjpBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYsIGNvbnN0IFdl
YkNvcmU6OkNyZWRlbnRpYWwmKTsKKyAgICB2b2lkIGNvbnRpbnVlV2l0aG91dENyZWRlbnRpYWwo
Y29uc3QgV2ViQ29yZTo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2UmKTsKKyAgICB2b2lkIGNhbmNl
bEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKGNvbnN0IFdlYkNvcmU6OkF1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlJik7CisKK3ByaXZhdGU6CisgICAgRG93bmxvYWQoRG93bmxvYWRNYW5hZ2VyJiwgdWlu
dDY0X3QgZG93bmxvYWRJRCwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Jik7CisKKyAg
ICB2b2lkIHBsYXRmb3JtSW52YWxpZGF0ZSgpOworCisgICAgU3RyaW5nIHJldHJpZXZlRGVzdGlu
YXRpb25XaXRoU3VnZ2VzdGVkRmlsZW5hbWUoY29uc3QgU3RyaW5nJiBmaWxlbmFtZSwgYm9vbCYg
YWxsb3dPdmVyd3JpdGUpOworCisgICAgRG93bmxvYWRNYW5hZ2VyJiBtX2Rvd25sb2FkTWFuYWdl
cjsKKyAgICB1aW50NjRfdCBtX2Rvd25sb2FkSUQ7CisgICAgV2ViQ29yZTo6UmVzb3VyY2VSZXF1
ZXN0IG1fcmVxdWVzdDsKKworICAgIFJlZlB0cjxTYW5kYm94RXh0ZW5zaW9uPiBtX3NhbmRib3hF
eHRlbnNpb247CisKKyNpZiBQTEFURk9STShNQUMpCisgICAgUmV0YWluUHRyPE5TVVJMRG93bmxv
YWQ+IG1fbnNVUkxEb3dubG9hZDsKKyAgICBSZXRhaW5QdHI8V0tEb3dubG9hZEFzRGVsZWdhdGU+
IG1fZGVsZWdhdGU7CisjZW5kaWYKKyAgICBib29sIG1fYWxsb3dPdmVyd3JpdGU7CisgICAgU3Ry
aW5nIG1fZGVzdGluYXRpb247CisgICAgU3RyaW5nIG1fYnVuZGxlUGF0aDsKKyNpZiBVU0UoQ0ZO
RVRXT1JLKQorICAgIFJldGFpblB0cjxDRlVSTERvd25sb2FkUmVmPiBtX2Rvd25sb2FkOworICAg
IFJlZlB0cjxEb3dubG9hZEF1dGhlbnRpY2F0aW9uQ2xpZW50PiBtX2F1dGhlbnRpY2F0aW9uQ2xp
ZW50OworI2VuZGlmCisjaWYgUExBVEZPUk0oUVQpCisgICAgUXRGaWxlRG93bmxvYWRlciogbV9x
dERvd25sb2FkZXI7CisjZW5kaWYKKyNpZiBQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKEVGTCkK
KyAgICBPd25QdHI8V2ViQ29yZTo6UmVzb3VyY2VIYW5kbGVDbGllbnQ+IG1fZG93bmxvYWRDbGll
bnQ7CisgICAgUmVmUHRyPFdlYkNvcmU6OlJlc291cmNlSGFuZGxlPiBtX3Jlc291cmNlSGFuZGxl
OworI2VuZGlmCit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIERvd25s
b2FkX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Eb3dubG9hZHMvRG93bmxv
YWRBdXRoZW50aWNhdGlvbkNsaWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvRG93bmxv
YWRzL0Rvd25sb2FkQXV0aGVudGljYXRpb25DbGllbnQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjJmMTU4MGYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvRG93bmxvYWRzL0Rvd25sb2FkQXV0aGVudGljYXRpb25DbGllbnQuY3BwCkBAIC0w
LDAgKzEsNjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
RG93bmxvYWRBdXRoZW50aWNhdGlvbkNsaWVudC5oIgorCisjaW5jbHVkZSAiRG93bmxvYWQuaCIK
KwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitEb3du
bG9hZEF1dGhlbnRpY2F0aW9uQ2xpZW50OjpEb3dubG9hZEF1dGhlbnRpY2F0aW9uQ2xpZW50KERv
d25sb2FkKiBkb3dubG9hZCkKKyAgICA6IG1fZG93bmxvYWQoZG93bmxvYWQpCit7CisgICAgQVNT
RVJUX0FSRyhkb3dubG9hZCwgZG93bmxvYWQpOworfQorCit2b2lkIERvd25sb2FkQXV0aGVudGlj
YXRpb25DbGllbnQ6OnJlY2VpdmVkQ3JlZGVudGlhbChjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZSYgY2hhbGxlbmdlLCBjb25zdCBDcmVkZW50aWFsJiBjcmVkZW50aWFsKQoreworICAgIGlm
ICghbV9kb3dubG9hZCkKKyAgICAgICAgcmV0dXJuOworICAgIG1fZG93bmxvYWQtPnVzZUNyZWRl
bnRpYWwoY2hhbGxlbmdlLCBjcmVkZW50aWFsKTsKK30KKwordm9pZCBEb3dubG9hZEF1dGhlbnRp
Y2F0aW9uQ2xpZW50OjpyZWNlaXZlZFJlcXVlc3RUb0NvbnRpbnVlV2l0aG91dENyZWRlbnRpYWwo
Y29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmIGNoYWxsZW5nZSkKK3sKKyAgICBpZiAoIW1f
ZG93bmxvYWQpCisgICAgICAgIHJldHVybjsKKyAgICBtX2Rvd25sb2FkLT5jb250aW51ZVdpdGhv
dXRDcmVkZW50aWFsKGNoYWxsZW5nZSk7Cit9CisKK3ZvaWQgRG93bmxvYWRBdXRoZW50aWNhdGlv
bkNsaWVudDo6cmVjZWl2ZWRDYW5jZWxsYXRpb24oY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVu
Z2UmIGNoYWxsZW5nZSkKK3sKKyAgICBpZiAoIW1fZG93bmxvYWQpCisgICAgICAgIHJldHVybjsK
KyAgICBtX2Rvd25sb2FkLT5jYW5jZWxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShjaGFsbGVuZ2Up
OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1NoYXJlZC9Eb3dubG9hZHMvRG93bmxvYWRBdXRoZW50aWNhdGlvbkNsaWVudC5oIGIvU291cmNl
L1dlYktpdDIvU2hhcmVkL0Rvd25sb2Fkcy9Eb3dubG9hZEF1dGhlbnRpY2F0aW9uQ2xpZW50LmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzYzMjFhZQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Eb3dubG9hZHMvRG93bmxvYWRBdXRoZW50aWNh
dGlvbkNsaWVudC5oCkBAIC0wLDAgKzEsNjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIERvd25s
b2FkQXV0aGVudGljYXRpb25DbGllbnRfaAorI2RlZmluZSBEb3dubG9hZEF1dGhlbnRpY2F0aW9u
Q2xpZW50X2gKKworI2luY2x1ZGUgPFdlYkNvcmUvQXV0aGVudGljYXRpb25DbGllbnQuaD4KKyNp
bmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICBjbGFzcyBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZTsK
KyAgICBjbGFzcyBDcmVkZW50aWFsOworfQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3Mg
RG93bmxvYWQ7CisKK2NsYXNzIERvd25sb2FkQXV0aGVudGljYXRpb25DbGllbnQgOiBwdWJsaWMg
UmVmQ291bnRlZDxEb3dubG9hZEF1dGhlbnRpY2F0aW9uQ2xpZW50PiwgcHVibGljIFdlYkNvcmU6
OkF1dGhlbnRpY2F0aW9uQ2xpZW50IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxE
b3dubG9hZEF1dGhlbnRpY2F0aW9uQ2xpZW50PiBjcmVhdGUoRG93bmxvYWQqIGRvd25sb2FkKSB7
IHJldHVybiBhZG9wdFJlZihuZXcgRG93bmxvYWRBdXRoZW50aWNhdGlvbkNsaWVudChkb3dubG9h
ZCkpOyB9CisKKyAgICB2b2lkIGRldGFjaCgpIHsgbV9kb3dubG9hZCA9IDA7IH0KKworICAgIHVz
aW5nIFJlZkNvdW50ZWQ8RG93bmxvYWRBdXRoZW50aWNhdGlvbkNsaWVudD46OnJlZjsKKyAgICB1
c2luZyBSZWZDb3VudGVkPERvd25sb2FkQXV0aGVudGljYXRpb25DbGllbnQ+OjpkZXJlZjsKKwor
cHJpdmF0ZToKKyAgICBEb3dubG9hZEF1dGhlbnRpY2F0aW9uQ2xpZW50KERvd25sb2FkKik7CisK
KyAgICB2aXJ0dWFsIHZvaWQgcmVjZWl2ZWRDcmVkZW50aWFsKGNvbnN0IFdlYkNvcmU6OkF1dGhl
bnRpY2F0aW9uQ2hhbGxlbmdlJiwgY29uc3QgV2ViQ29yZTo6Q3JlZGVudGlhbCYpOworICAgIHZp
cnR1YWwgdm9pZCByZWNlaXZlZFJlcXVlc3RUb0NvbnRpbnVlV2l0aG91dENyZWRlbnRpYWwoY29u
c3QgV2ViQ29yZTo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2UmKTsKKyAgICB2aXJ0dWFsIHZvaWQg
cmVjZWl2ZWRDYW5jZWxsYXRpb24oY29uc3QgV2ViQ29yZTo6QXV0aGVudGljYXRpb25DaGFsbGVu
Z2UmKTsKKworICAgIHZpcnR1YWwgdm9pZCByZWZBdXRoZW50aWNhdGlvbkNsaWVudCgpIHsgcmVm
KCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGVyZWZBdXRoZW50aWNhdGlvbkNsaWVudCgpIHsgZGVy
ZWYoKTsgfQorCisgICAgRG93bmxvYWQqIG1fZG93bmxvYWQ7Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKKworI2VuZGlmIC8vIERvd25sb2FkQXV0aGVudGljYXRpb25DbGllbnRfaApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL0Rvd25sb2Fkcy9Eb3dubG9hZE1hbmFnZXIu
Y3BwIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL0Rvd25sb2Fkcy9Eb3dubG9hZE1hbmFnZXIuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5MTcyZTAKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvRG93bmxvYWRzL0Rvd25sb2FkTWFuYWdlci5j
cHAKQEAgLTAsMCArMSwxMDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiRG93bmxvYWRNYW5hZ2VyLmgiCisKKyNpbmNsdWRlICJEb3dubG9hZC5oIgorI2lu
Y2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisK
K25hbWVzcGFjZSBXZWJLaXQgeworCitEb3dubG9hZE1hbmFnZXI6OkRvd25sb2FkTWFuYWdlcihD
bGllbnQqIGNsaWVudCkKKyAgICA6IG1fY2xpZW50KGNsaWVudCkKK3sKK30KKwordm9pZCBEb3du
bG9hZE1hbmFnZXI6OnN0YXJ0RG93bmxvYWQodWludDY0X3QgZG93bmxvYWRJRCwgY29uc3QgUmVz
b3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQoreworICAgIE93blB0cjxEb3dubG9hZD4gZG93bmxvYWQg
PSBEb3dubG9hZDo6Y3JlYXRlKCp0aGlzLCBkb3dubG9hZElELCByZXF1ZXN0KTsKKyAgICBkb3du
bG9hZC0+c3RhcnQoKTsKKworICAgIEFTU0VSVCghbV9kb3dubG9hZHMuY29udGFpbnMoZG93bmxv
YWRJRCkpOworICAgIG1fZG93bmxvYWRzLnNldChkb3dubG9hZElELCBkb3dubG9hZC5sZWFrUHRy
KCkpOworfQorCit2b2lkIERvd25sb2FkTWFuYWdlcjo6Y29udmVydEhhbmRsZVRvRG93bmxvYWQo
dWludDY0X3QgZG93bmxvYWRJRCwgUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSwgY29uc3QgUmVzb3Vy
Y2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKK3sK
KyAgICBPd25QdHI8RG93bmxvYWQ+IGRvd25sb2FkID0gRG93bmxvYWQ6OmNyZWF0ZSgqdGhpcywg
ZG93bmxvYWRJRCwgcmVxdWVzdCk7CisKKyAgICBkb3dubG9hZC0+c3RhcnRXaXRoSGFuZGxlKGhh
bmRsZSwgcmVzcG9uc2UpOworICAgIEFTU0VSVCghbV9kb3dubG9hZHMuY29udGFpbnMoZG93bmxv
YWRJRCkpOworICAgIG1fZG93bmxvYWRzLnNldChkb3dubG9hZElELCBkb3dubG9hZC5sZWFrUHRy
KCkpOworfQorCit2b2lkIERvd25sb2FkTWFuYWdlcjo6Y2FuY2VsRG93bmxvYWQodWludDY0X3Qg
ZG93bmxvYWRJRCkKK3sKKyAgICBEb3dubG9hZCogZG93bmxvYWQgPSBtX2Rvd25sb2Fkcy5nZXQo
ZG93bmxvYWRJRCk7CisgICAgaWYgKCFkb3dubG9hZCkKKyAgICAgICAgcmV0dXJuOworCisgICAg
ZG93bmxvYWQtPmNhbmNlbCgpOworfQorCit2b2lkIERvd25sb2FkTWFuYWdlcjo6ZG93bmxvYWRG
aW5pc2hlZChEb3dubG9hZCogZG93bmxvYWQpCit7CisgICAgQVNTRVJUKG1fZG93bmxvYWRzLmNv
bnRhaW5zKGRvd25sb2FkLT5kb3dubG9hZElEKCkpKTsKKyAgICBtX2Rvd25sb2Fkcy5yZW1vdmUo
ZG93bmxvYWQtPmRvd25sb2FkSUQoKSk7CisKKyAgICBkZWxldGUgZG93bmxvYWQ7Cit9CisKK3Zv
aWQgRG93bmxvYWRNYW5hZ2VyOjpkaWRDcmVhdGVEb3dubG9hZCgpCit7CisgICAgbV9jbGllbnQt
PmRpZENyZWF0ZURvd25sb2FkKCk7Cit9CisKK3ZvaWQgRG93bmxvYWRNYW5hZ2VyOjpkaWREZXN0
cm95RG93bmxvYWQoKQoreworICAgIG1fY2xpZW50LT5kaWREZXN0cm95RG93bmxvYWQoKTsKK30K
KworQ29yZUlQQzo6Q29ubmVjdGlvbiogRG93bmxvYWRNYW5hZ2VyOjpkb3dubG9hZFByb3h5Q29u
bmVjdGlvbigpCit7CisgICAgcmV0dXJuIG1fY2xpZW50LT5kb3dubG9hZFByb3h5Q29ubmVjdGlv
bigpOworfQorCitBdXRoZW50aWNhdGlvbk1hbmFnZXImIERvd25sb2FkTWFuYWdlcjo6ZG93bmxv
YWRzQXV0aGVudGljYXRpb25NYW5hZ2VyKCkKK3sKKyAgICByZXR1cm4gbV9jbGllbnQtPmRvd25s
b2Fkc0F1dGhlbnRpY2F0aW9uTWFuYWdlcigpOworfQorCisjaWYgUExBVEZPUk0oUVQpCit2b2lk
IERvd25sb2FkTWFuYWdlcjo6c3RhcnRUcmFuc2Zlcih1aW50NjRfdCBkb3dubG9hZElELCBjb25z
dCBTdHJpbmcmIGRlc3RpbmF0aW9uKQoreworICAgIEFTU0VSVChtX2Rvd25sb2Fkcy5jb250YWlu
cyhkb3dubG9hZElEKSk7CisgICAgRG93bmxvYWQqIGRvd25sb2FkID0gbV9kb3dubG9hZHMuZ2V0
KGRvd25sb2FkSUQpOworICAgIGRvd25sb2FkLT5zdGFydFRyYW5zZmVyKGRlc3RpbmF0aW9uKTsK
K30KKyNlbmRpZgorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1NoYXJlZC9Eb3dubG9hZHMvRG93bmxvYWRNYW5hZ2VyLmggYi9Tb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvRG93bmxvYWRzL0Rvd25sb2FkTWFuYWdlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjBiOTAxZTIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvRG93bmxvYWRzL0Rvd25sb2FkTWFuYWdlci5oCkBAIC0wLDAgKzEsOTAgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaWZuZGVmIERvd25sb2FkTWFuYWdlcl9oCisjZGVmaW5lIERvd25sb2FkTWFu
YWdlcl9oCisKKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFw
Lmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
K2NsYXNzIFJlc291cmNlSGFuZGxlOworY2xhc3MgUmVzb3VyY2VSZXF1ZXN0OworY2xhc3MgUmVz
b3VyY2VSZXNwb25zZTsKK30KKworbmFtZXNwYWNlIENvcmVJUEMgeworY2xhc3MgQ29ubmVjdGlv
bjsKK30KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIEF1dGhlbnRpY2F0aW9uTWFuYWdl
cjsKK2NsYXNzIERvd25sb2FkOworY2xhc3MgV2ViUGFnZTsKKworY2xhc3MgRG93bmxvYWRNYW5h
Z2VyIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShEb3dubG9hZE1hbmFnZXIpOworCitwdWJs
aWM6CisgICAgY2xhc3MgQ2xpZW50IHsKKyAgICBwdWJsaWM6CisgICAgICAgIHZpcnR1YWwgfkNs
aWVudCgpIHsgfQorCisgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRDcmVhdGVEb3dubG9hZCgpID0g
MDsKKyAgICAgICAgdmlydHVhbCB2b2lkIGRpZERlc3Ryb3lEb3dubG9hZCgpID0gMDsKKyAgICAg
ICAgdmlydHVhbCBDb3JlSVBDOjpDb25uZWN0aW9uKiBkb3dubG9hZFByb3h5Q29ubmVjdGlvbigp
ID0gMDsKKyAgICAgICAgdmlydHVhbCBBdXRoZW50aWNhdGlvbk1hbmFnZXImIGRvd25sb2Fkc0F1
dGhlbnRpY2F0aW9uTWFuYWdlcigpID0gMDsKKyAgICB9OworCisgICAgZXhwbGljaXQgRG93bmxv
YWRNYW5hZ2VyKENsaWVudCopOworCisgICAgdm9pZCBzdGFydERvd25sb2FkKHVpbnQ2NF90IGRv
d25sb2FkSUQsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYpOworICAgIHZvaWQgY29u
dmVydEhhbmRsZVRvRG93bmxvYWQodWludDY0X3QgZG93bmxvYWRJRCwgV2ViQ29yZTo6UmVzb3Vy
Y2VIYW5kbGUqLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBXZWJDb3Jl
OjpSZXNvdXJjZVJlc3BvbnNlJik7CisKKyAgICB2b2lkIGNhbmNlbERvd25sb2FkKHVpbnQ2NF90
IGRvd25sb2FkSUQpOworCisgICAgdm9pZCBkb3dubG9hZEZpbmlzaGVkKERvd25sb2FkKik7Cisg
ICAgYm9vbCBpc0Rvd25sb2FkaW5nKCkgY29uc3QgeyByZXR1cm4gIW1fZG93bmxvYWRzLmlzRW1w
dHkoKTsgfQorCisgICAgdm9pZCBkaWRDcmVhdGVEb3dubG9hZCgpOworICAgIHZvaWQgZGlkRGVz
dHJveURvd25sb2FkKCk7CisKKyAgICBDb3JlSVBDOjpDb25uZWN0aW9uKiBkb3dubG9hZFByb3h5
Q29ubmVjdGlvbigpOworICAgIEF1dGhlbnRpY2F0aW9uTWFuYWdlciYgZG93bmxvYWRzQXV0aGVu
dGljYXRpb25NYW5hZ2VyKCk7CisKKyNpZiBQTEFURk9STShRVCkKKyAgICB2b2lkIHN0YXJ0VHJh
bnNmZXIodWludDY0X3QgZG93bmxvYWRJRCwgY29uc3QgU3RyaW5nJiBkZXN0aW5hdGlvbik7Cisj
ZW5kaWYKKworcHJpdmF0ZToKKyAgICBDbGllbnQqIG1fY2xpZW50OworICAgIEhhc2hNYXA8dWlu
dDY0X3QsIERvd25sb2FkKj4gbV9kb3dubG9hZHM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJL
aXQKKworI2VuZGlmIC8vIERvd25sb2FkTWFuYWdlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvRG93bmxvYWRzL2NmbmV0L0Rvd25sb2FkQ0ZOZXQuY3BwIGIvU291cmNlL1dl
YktpdDIvU2hhcmVkL0Rvd25sb2Fkcy9jZm5ldC9Eb3dubG9hZENGTmV0LmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OWIzODYxCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYktpdDIvU2hhcmVkL0Rvd25sb2Fkcy9jZm5ldC9Eb3dubG9hZENGTmV0LmNwcApAQCAt
MCwwICsxLDI2NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJEb3dubG9hZC5oIgorCisjaW5jbHVkZSAiRGF0YVJlZmVyZW5jZS5oIgorI2luY2x1
ZGUgIkRvd25sb2FkQXV0aGVudGljYXRpb25DbGllbnQuaCIKKworI3ByYWdtYSB3YXJuaW5nKHB1
c2gsIDApCisjaW5jbHVkZSA8V2ViQ29yZS9BdXRoZW50aWNhdGlvbkNGLmg+CisjaW5jbHVkZSA8
V2ViQ29yZS9BdXRoZW50aWNhdGlvbkNoYWxsZW5nZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRG93
bmxvYWRCdW5kbGUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0xvYWRlclJ1bkxvb3BDRi5oPgorI2lu
Y2x1ZGUgPFdlYkNvcmUvTm90SW1wbGVtZW50ZWQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1Jlc291
cmNlRXJyb3IuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlSGFuZGxlLmg+CisjaW5jbHVk
ZSA8V2ViQ29yZS9SZXNvdXJjZVJlc3BvbnNlLmg+CisjcHJhZ21hIHdhcm5pbmcocG9wKQorCit1
c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKKy8vIENGVVJM
RG93bmxvYWQgQ2FsbGJhY2tzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3N0YXRpYyB2b2lkIGRpZFN0YXJ0Q2FsbGJhY2so
Q0ZVUkxEb3dubG9hZFJlZiBkb3dubG9hZCwgY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7CitzdGF0
aWMgQ0ZVUkxSZXF1ZXN0UmVmIHdpbGxTZW5kUmVxdWVzdENhbGxiYWNrKENGVVJMRG93bmxvYWRS
ZWYgZG93bmxvYWQsIENGVVJMUmVxdWVzdFJlZiByZXF1ZXN0LCBDRlVSTFJlc3BvbnNlUmVmIHJl
ZGlyZWN0aW9uUmVzcG9uc2UsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pOworc3RhdGljIHZvaWQg
ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlQ2FsbGJhY2soQ0ZVUkxEb3dubG9hZFJl
ZiBkb3dubG9hZCwgQ0ZVUkxBdXRoQ2hhbGxlbmdlUmVmIGNoYWxsZW5nZSwgY29uc3Qgdm9pZCog
Y2xpZW50SW5mbyk7CitzdGF0aWMgdm9pZCBkaWRSZWNlaXZlUmVzcG9uc2VDYWxsYmFjayhDRlVS
TERvd25sb2FkUmVmIGRvd25sb2FkLCBDRlVSTFJlc3BvbnNlUmVmIHJlc3BvbnNlLCBjb25zdCB2
b2lkKiBjbGllbnRJbmZvKTsKK3N0YXRpYyB2b2lkIHdpbGxSZXN1bWVXaXRoUmVzcG9uc2VDYWxs
YmFjayhDRlVSTERvd25sb2FkUmVmIGRvd25sb2FkLCBDRlVSTFJlc3BvbnNlUmVmIHJlc3BvbnNl
LCBVSW50NjQgc3RhcnRpbmdCeXRlLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKTsKK3N0YXRpYyB2
b2lkIGRpZFJlY2VpdmVEYXRhQ2FsbGJhY2soQ0ZVUkxEb3dubG9hZFJlZiBkb3dubG9hZCwgQ0ZJ
bmRleCBsZW5ndGgsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pOworc3RhdGljIEJvb2xlYW4gc2hv
dWxkRGVjb2RlRGF0YU9mTUlNRVR5cGVDYWxsYmFjayhDRlVSTERvd25sb2FkUmVmIGRvd25sb2Fk
LCBDRlN0cmluZ1JlZiBlbmNvZGluZ1R5cGUsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pOworc3Rh
dGljIHZvaWQgZGVjaWRlRGVzdGluYXRpb25XaXRoU3VnZ2VzdGVkT2JqZWN0TmFtZUNhbGxiYWNr
KENGVVJMRG93bmxvYWRSZWYgZG93bmxvYWQsIENGU3RyaW5nUmVmIG9iamVjdE5hbWUsIGNvbnN0
IHZvaWQqIGNsaWVudEluZm8pOworc3RhdGljIHZvaWQgZGlkQ3JlYXRlRGVzdGluYXRpb25DYWxs
YmFjayhDRlVSTERvd25sb2FkUmVmIGRvd25sb2FkLCBDRlVSTFJlZiBwYXRoLCBjb25zdCB2b2lk
KiBjbGllbnRJbmZvKTsKK3N0YXRpYyB2b2lkIGRpZEZpbmlzaENhbGxiYWNrKENGVVJMRG93bmxv
YWRSZWYgZG93bmxvYWQsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pOworc3RhdGljIHZvaWQgZGlk
RmFpbENhbGxiYWNrKENGVVJMRG93bmxvYWRSZWYgZG93bmxvYWQsIENGRXJyb3JSZWYgZXJyb3Is
IGNvbnN0IHZvaWQqIGNsaWVudEluZm8pOworCit2b2lkIERvd25sb2FkOjp1c2VDcmVkZW50aWFs
KGNvbnN0IFdlYkNvcmU6OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiBjaGFsbGVuZ2UsIGNvbnN0
IFdlYkNvcmU6OkNyZWRlbnRpYWwmIGNyZWRlbnRpYWwpCit7CisgICAgaWYgKCFtX2Rvd25sb2Fk
KQorICAgICAgICByZXR1cm47CisgICAgUmV0YWluUHRyPENGVVJMQ3JlZGVudGlhbFJlZj4gY2ZD
cmVkZW50aWFsKEFkb3B0Q0YsIGNyZWF0ZUNGKGNyZWRlbnRpYWwpKTsKKyAgICBDRlVSTERvd25s
b2FkVXNlQ3JlZGVudGlhbChtX2Rvd25sb2FkLmdldCgpLCBjZkNyZWRlbnRpYWwuZ2V0KCksIGNo
YWxsZW5nZS5jZlVSTEF1dGhDaGFsbGVuZ2VSZWYoKSk7Cit9CisKK3ZvaWQgRG93bmxvYWQ6OmNv
bnRpbnVlV2l0aG91dENyZWRlbnRpYWwoY29uc3QgV2ViQ29yZTo6QXV0aGVudGljYXRpb25DaGFs
bGVuZ2UmIGNoYWxsZW5nZSkKK3sKKyAgICBpZiAoIW1fZG93bmxvYWQpCisgICAgICAgIHJldHVy
bjsKKyAgICBDRlVSTERvd25sb2FkVXNlQ3JlZGVudGlhbChtX2Rvd25sb2FkLmdldCgpLCAwLCBj
aGFsbGVuZ2UuY2ZVUkxBdXRoQ2hhbGxlbmdlUmVmKCkpOworfQorCit2b2lkIERvd25sb2FkOjpj
YW5jZWxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShjb25zdCBXZWJDb3JlOjpBdXRoZW50aWNhdGlv
bkNoYWxsZW5nZSYpCit7CisgICAgaWYgKCFtX2Rvd25sb2FkKQorICAgICAgICByZXR1cm47Cisg
ICAgQ0ZVUkxEb3dubG9hZENhbmNlbChtX2Rvd25sb2FkLmdldCgpKTsKKyAgICBtX2Rvd25sb2Fk
ID0gMDsKK30KKworRG93bmxvYWRBdXRoZW50aWNhdGlvbkNsaWVudCogRG93bmxvYWQ6OmF1dGhl
bnRpY2F0aW9uQ2xpZW50KCkKK3sKKyAgICBpZiAoIW1fYXV0aGVudGljYXRpb25DbGllbnQpCisg
ICAgICAgIG1fYXV0aGVudGljYXRpb25DbGllbnQgPSBEb3dubG9hZEF1dGhlbnRpY2F0aW9uQ2xp
ZW50OjpjcmVhdGUodGhpcyk7CisgICAgcmV0dXJuIG1fYXV0aGVudGljYXRpb25DbGllbnQuZ2V0
KCk7Cit9CisKK3ZvaWQgRG93bmxvYWQ6OnN0YXJ0KCkKK3sKKyAgICBBU1NFUlQoIW1fZG93bmxv
YWQpOworCisgICAgQ0ZVUkxSZXF1ZXN0UmVmIGNmUmVxdWVzdCA9IG1fcmVxdWVzdC5jZlVSTFJl
cXVlc3QoKTsKKworICAgIENGVVJMRG93bmxvYWRDbGllbnQgY2xpZW50ID0gezAsIHRoaXMsIDAs
IDAsIDAsIGRpZFN0YXJ0Q2FsbGJhY2ssIHdpbGxTZW5kUmVxdWVzdENhbGxiYWNrLCBkaWRSZWNl
aXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2VDYWxsYmFjaywgCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZGlkUmVjZWl2ZVJlc3BvbnNlQ2FsbGJhY2ssIHdpbGxSZXN1bWVXaXRo
UmVzcG9uc2VDYWxsYmFjaywgZGlkUmVjZWl2ZURhdGFDYWxsYmFjaywgc2hvdWxkRGVjb2RlRGF0
YU9mTUlNRVR5cGVDYWxsYmFjaywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZGVjaWRlRGVzdGluYXRpb25XaXRoU3VnZ2VzdGVkT2JqZWN0TmFtZUNhbGxiYWNrLCBkaWRDcmVh
dGVEZXN0aW5hdGlvbkNhbGxiYWNrLCBkaWRGaW5pc2hDYWxsYmFjaywgZGlkRmFpbENhbGxiYWNr
fTsKKyAgICBtX2Rvd25sb2FkLmFkb3B0Q0YoQ0ZVUkxEb3dubG9hZENyZWF0ZSgwLCBjZlJlcXVl
c3QsICZjbGllbnQpKTsKKworICAgIC8vIEZJWE1FOiBBbGxvdyB0aGlzIHRvIGJlIGNoYW5nZWQg
YnkgdGhlIGNsaWVudC4KKyAgICBDRlVSTERvd25sb2FkU2V0RGVsZXRlc1Vwb25GYWlsdXJlKG1f
ZG93bmxvYWQuZ2V0KCksIGZhbHNlKTsKKworI2lmIE9TKFdJTkRPV1MpCisgICAgQ0ZVUkxEb3du
bG9hZFNjaGVkdWxlV2l0aEN1cnJlbnRNZXNzYWdlUXVldWUobV9kb3dubG9hZC5nZXQoKSk7Cisj
ZW5kaWYKKyAgICBDRlVSTERvd25sb2FkU2NoZWR1bGVEb3dubG9hZFdpdGhSdW5Mb29wKG1fZG93
bmxvYWQuZ2V0KCksIGxvYWRlclJ1bkxvb3AoKSwga0NGUnVuTG9vcERlZmF1bHRNb2RlKTsKKwor
ICAgIENGVVJMRG93bmxvYWRTdGFydChtX2Rvd25sb2FkLmdldCgpKTsKK30KKwordm9pZCBEb3du
bG9hZDo6c3RhcnRXaXRoSGFuZGxlKFJlc291cmNlSGFuZGxlKiBoYW5kbGUsIGNvbnN0IFJlc291
cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQoreworICAgIEFTU0VSVCghbV9kb3dubG9hZCk7CisKKyAg
ICBDRlVSTENvbm5lY3Rpb25SZWYgY29ubmVjdGlvbiA9IGhhbmRsZS0+Y29ubmVjdGlvbigpOwor
ICAgIGlmICghY29ubmVjdGlvbikKKyAgICAgICAgcmV0dXJuOworCisgICAgQ0ZVUkxEb3dubG9h
ZENsaWVudCBjbGllbnQgPSB7MCwgdGhpcywgMCwgMCwgMCwgZGlkU3RhcnRDYWxsYmFjaywgd2ls
bFNlbmRSZXF1ZXN0Q2FsbGJhY2ssIGRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZUNh
bGxiYWNrLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWRSZWNlaXZlUmVz
cG9uc2VDYWxsYmFjaywgd2lsbFJlc3VtZVdpdGhSZXNwb25zZUNhbGxiYWNrLCBkaWRSZWNlaXZl
RGF0YUNhbGxiYWNrLCBzaG91bGREZWNvZGVEYXRhT2ZNSU1FVHlwZUNhbGxiYWNrLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlY2lkZURlc3RpbmF0aW9uV2l0aFN1Z2dlc3Rl
ZE9iamVjdE5hbWVDYWxsYmFjaywgZGlkQ3JlYXRlRGVzdGluYXRpb25DYWxsYmFjaywgZGlkRmlu
aXNoQ2FsbGJhY2ssIGRpZEZhaWxDYWxsYmFja307CisKKyAgICBtX2Rvd25sb2FkLmFkb3B0Q0Yo
Q0ZVUkxEb3dubG9hZENyZWF0ZUFuZFN0YXJ0V2l0aExvYWRpbmdDb25uZWN0aW9uKDAsIGNvbm5l
Y3Rpb24sIGhhbmRsZS0+Zmlyc3RSZXF1ZXN0KCkuY2ZVUkxSZXF1ZXN0KCksIHJlc3BvbnNlLmNm
VVJMUmVzcG9uc2UoKSwgJmNsaWVudCkpOworCisgICAgLy8gSXQgaXMgcG9zc2libGUgZm9yIENG
VVJMRG93bmxvYWRDcmVhdGVBbmRTdGFydFdpdGhMb2FkaW5nQ29ubmVjdGlvbigpIHRvIGZhaWwg
aWYgdGhlIHBhc3NlZCBpbiBDRlVSTENvbm5lY3Rpb24gaXMgbm90IGluIGEgImRvd25sb2FkYWJs
ZSBzdGF0ZSIKKyAgICAvLyBIb3dldmVyLCB3ZSBzaG91bGQgbmV2ZXIgaGl0IHRoYXQgY2FzZQor
ICAgIGlmICghbV9kb3dubG9hZCkKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisKKyAg
ICAvLyBUaGUgQ0ZVUkxEb3dubG9hZCBlaXRoZXIgc3RhcnRzIHN1Y2Nlc3NmdWxseSBhbmQgcmV0
YWlucyB0aGUgQ0ZVUkxDb25uZWN0aW9uLCAKKyAgICAvLyBvciBpdCBmYWlscyB0byBjcmVhdGlu
ZyBhbmQgd2UgaGF2ZSBhIG5vdy11c2VsZXNzIGNvbm5lY3Rpb24gd2l0aCBhIGRhbmdsaW5nIHJl
Zi4gCisgICAgLy8gRWl0aGVyIHdheSwgd2UgbmVlZCB0byByZWxlYXNlIHRoZSBjb25uZWN0aW9u
IHRvIGJhbGFuY2Ugb3V0IHJlZiBjb3VudHMKKyAgICBoYW5kbGUtPnJlbGVhc2VDb25uZWN0aW9u
Rm9yRG93bmxvYWQoKTsKKyAgICBDRlJlbGVhc2UoY29ubmVjdGlvbik7Cit9CisKK3ZvaWQgRG93
bmxvYWQ6OmNhbmNlbCgpCit7CisgICAgQVNTRVJUKG1fZG93bmxvYWQpOworICAgIGlmICghbV9k
b3dubG9hZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgQ0ZVUkxEb3dubG9hZFNldERlbGV0ZXNV
cG9uRmFpbHVyZShtX2Rvd25sb2FkLmdldCgpLCBmYWxzZSk7CisgICAgQ0ZVUkxEb3dubG9hZENh
bmNlbChtX2Rvd25sb2FkLmdldCgpKTsKKworICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IHJlc3Vt
ZURhdGEoQWRvcHRDRiwgQ0ZVUkxEb3dubG9hZENvcHlSZXN1bWVEYXRhKG1fZG93bmxvYWQuZ2V0
KCkpKTsKKyAgICBpZiAocmVzdW1lRGF0YSkKKyAgICAgICAgRG93bmxvYWRCdW5kbGU6OmFwcGVu
ZFJlc3VtZURhdGEocmVzdW1lRGF0YS5nZXQoKSwgbV9idW5kbGVQYXRoKTsKKworICAgIGRpZENh
bmNlbChDb3JlSVBDOjpEYXRhUmVmZXJlbmNlKCkpOworfQorCit2b2lkIERvd25sb2FkOjpwbGF0
Zm9ybUludmFsaWRhdGUoKQoreworICAgIG1fZG93bmxvYWQgPSBudWxscHRyOworICAgIGlmICht
X2F1dGhlbnRpY2F0aW9uQ2xpZW50KQorICAgICAgICBtX2F1dGhlbnRpY2F0aW9uQ2xpZW50LT5k
ZXRhY2goKTsKK30KKwordm9pZCBEb3dubG9hZDo6ZGlkRGVjaWRlRGVzdGluYXRpb24oY29uc3Qg
U3RyaW5nJiBkZXN0aW5hdGlvbiwgYm9vbCBhbGxvd092ZXJ3cml0ZSkKK3sKKyAgICBBU1NFUlQo
IWRlc3RpbmF0aW9uLmlzRW1wdHkoKSk7CisgICAgaWYgKGRlc3RpbmF0aW9uLmlzRW1wdHkoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgbV9hbGxvd092ZXJ3cml0ZSA9IGFsbG93T3ZlcndyaXRl
OworICAgIG1fZGVzdGluYXRpb24gPSBkZXN0aW5hdGlvbjsKKyAgICBtX2J1bmRsZVBhdGggPSBk
ZXN0aW5hdGlvbiArIERvd25sb2FkQnVuZGxlOjpmaWxlRXh0ZW5zaW9uKCk7CisKKyAgICBSZXRh
aW5QdHI8Q0ZTdHJpbmdSZWY+IGJ1bmRsZVBhdGgoQWRvcHRDRiwgQ0ZTdHJpbmdDcmVhdGVXaXRo
Q2hhcmFjdGVyc05vQ29weSgwLCByZWludGVycHJldF9jYXN0PGNvbnN0IFVuaUNoYXIqPihtX2J1
bmRsZVBhdGguY2hhcmFjdGVycygpKSwgbV9idW5kbGVQYXRoLmxlbmd0aCgpLCBrQ0ZBbGxvY2F0
b3JOdWxsKSk7CisgICAgUmV0YWluUHRyPENGVVJMUmVmPiBidW5kbGVQYXRoVVJMKEFkb3B0Q0Ys
IENGVVJMQ3JlYXRlV2l0aEZpbGVTeXN0ZW1QYXRoKDAsIGJ1bmRsZVBhdGguZ2V0KCksIGtDRlVS
TFdpbmRvd3NQYXRoU3R5bGUsIGZhbHNlKSk7CisgICAgQ0ZVUkxEb3dubG9hZFNldERlc3RpbmF0
aW9uKG1fZG93bmxvYWQuZ2V0KCksIGJ1bmRsZVBhdGhVUkwuZ2V0KCksIGFsbG93T3ZlcndyaXRl
KTsKK30KKworLy8gQ0ZVUkxEb3dubG9hZCBDYWxsYmFja3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorc3RhdGljIERvd25s
b2FkKiBkb3dubG9hZEZyb21DbGllbnRJbmZvKGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCit7Cisg
ICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8RG93bmxvYWQqPihjb25zdF9jYXN0PHZvaWQqPihj
bGllbnRJbmZvKSk7Cit9CisKK3ZvaWQgZGlkU3RhcnRDYWxsYmFjayhDRlVSTERvd25sb2FkUmVm
LCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQoreyAKKyAgICBkb3dubG9hZEZyb21DbGllbnRJbmZv
KGNsaWVudEluZm8pLT5kaWRTdGFydCgpOyAKK30KKworQ0ZVUkxSZXF1ZXN0UmVmIHdpbGxTZW5k
UmVxdWVzdENhbGxiYWNrKENGVVJMRG93bmxvYWRSZWYsIENGVVJMUmVxdWVzdFJlZiByZXF1ZXN0
LCBDRlVSTFJlc3BvbnNlUmVmIHJlZGlyZWN0aW9uUmVzcG9uc2UsIGNvbnN0IHZvaWQqIGNsaWVu
dEluZm8pCit7IAorICAgIC8vIENGTmV0d29yayByZXF1aXJlcyB1cyB0byByZXR1cm4gYSByZXRh
aW5lZCByZXF1ZXN0LgorICAgIENGUmV0YWluKHJlcXVlc3QpOworICAgIHJldHVybiByZXF1ZXN0
OworfQorCit2b2lkIGRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZUNhbGxiYWNrKENG
VVJMRG93bmxvYWRSZWYsIENGVVJMQXV0aENoYWxsZW5nZVJlZiBjaGFsbGVuZ2UsIGNvbnN0IHZv
aWQqIGNsaWVudEluZm8pCit7CisgICAgRG93bmxvYWQqIGRvd25sb2FkID0gZG93bmxvYWRGcm9t
Q2xpZW50SW5mbyhjbGllbnRJbmZvKTsKKyAgICBkb3dubG9hZC0+ZGlkUmVjZWl2ZUF1dGhlbnRp
Y2F0aW9uQ2hhbGxlbmdlKEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKGNoYWxsZW5nZSwgZG93bmxv
YWQtPmF1dGhlbnRpY2F0aW9uQ2xpZW50KCkpKTsKK30KKwordm9pZCBkaWRSZWNlaXZlUmVzcG9u
c2VDYWxsYmFjayhDRlVSTERvd25sb2FkUmVmLCBDRlVSTFJlc3BvbnNlUmVmIHJlc3BvbnNlLCBj
b25zdCB2b2lkKiBjbGllbnRJbmZvKQoreworICAgIGRvd25sb2FkRnJvbUNsaWVudEluZm8oY2xp
ZW50SW5mbyktPmRpZFJlY2VpdmVSZXNwb25zZShSZXNvdXJjZVJlc3BvbnNlKHJlc3BvbnNlKSk7
IAorfQorCit2b2lkIHdpbGxSZXN1bWVXaXRoUmVzcG9uc2VDYWxsYmFjayhDRlVSTERvd25sb2Fk
UmVmLCBDRlVSTFJlc3BvbnNlUmVmIHJlc3BvbnNlLCBVSW50NjQgc3RhcnRpbmdCeXRlLCBjb25z
dCB2b2lkKiBjbGllbnRJbmZvKQoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQuCisgICAgbm90
SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBkaWRSZWNlaXZlRGF0YUNhbGxiYWNrKENGVVJMRG93
bmxvYWRSZWYsIENGSW5kZXggbGVuZ3RoLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQoreyAKKyAg
ICBkb3dubG9hZEZyb21DbGllbnRJbmZvKGNsaWVudEluZm8pLT5kaWRSZWNlaXZlRGF0YShsZW5n
dGgpOworfQorCitCb29sZWFuIHNob3VsZERlY29kZURhdGFPZk1JTUVUeXBlQ2FsbGJhY2soQ0ZV
UkxEb3dubG9hZFJlZiwgQ0ZTdHJpbmdSZWYgZW5jb2RpbmdUeXBlLCBjb25zdCB2b2lkKiBjbGll
bnRJbmZvKQoreyAKKyAgICByZXR1cm4gZG93bmxvYWRGcm9tQ2xpZW50SW5mbyhjbGllbnRJbmZv
KS0+c2hvdWxkRGVjb2RlU291cmNlRGF0YU9mTUlNRVR5cGUoZW5jb2RpbmdUeXBlKTsKK30KKwor
dm9pZCBkZWNpZGVEZXN0aW5hdGlvbldpdGhTdWdnZXN0ZWRPYmplY3ROYW1lQ2FsbGJhY2soQ0ZV
UkxEb3dubG9hZFJlZiwgQ0ZTdHJpbmdSZWYgb2JqZWN0TmFtZSwgY29uc3Qgdm9pZCogY2xpZW50
SW5mbykKK3sgCisgICAgRG93bmxvYWQqIGRvd25sb2FkID0gZG93bmxvYWRGcm9tQ2xpZW50SW5m
byhjbGllbnRJbmZvKTsKKyAgICBib29sIGFsbG93T3ZlcndyaXRlOworICAgIGRvd25sb2FkLT5k
ZWNpZGVEZXN0aW5hdGlvbldpdGhTdWdnZXN0ZWRGaWxlbmFtZShvYmplY3ROYW1lLCBhbGxvd092
ZXJ3cml0ZSk7Cit9CisKK3ZvaWQgZGlkQ3JlYXRlRGVzdGluYXRpb25DYWxsYmFjayhDRlVSTERv
d25sb2FkUmVmLCBDRlVSTFJlZiwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKK3sKKyAgICAvLyBU
aGUgY29uY2VwdCBvZiB0aGUgIi5kb3dubG9hZCBidW5kbGUiIGlzIGludGVybmFsIHRvIHRoZSBE
b3dubG9hZCwgc28gd2UgdHJ5IHRvIGhpZGUgaXRzCisgICAgLy8gZXhpc3RlbmNlIGJ5IHJlcG9y
dGluZyB0aGUgZmluYWwgZGVzdGluYXRpb24gd2FzIGNyZWF0ZWQsIHdoZW4gaW4gcmVhbGl0eSB0
aGUgYnVuZGxlIHdhcyBjcmVhdGVkLgorCisgICAgRG93bmxvYWQqIGRvd25sb2FkID0gZG93bmxv
YWRGcm9tQ2xpZW50SW5mbyhjbGllbnRJbmZvKTsKKyAgICBkb3dubG9hZC0+ZGlkQ3JlYXRlRGVz
dGluYXRpb24oZG93bmxvYWQtPmRlc3RpbmF0aW9uKCkpOworfQorCit2b2lkIGRpZEZpbmlzaENh
bGxiYWNrKENGVVJMRG93bmxvYWRSZWYsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCit7IAorICAg
IGRvd25sb2FkRnJvbUNsaWVudEluZm8oY2xpZW50SW5mbyktPmRpZEZpbmlzaCgpOworfQorCit2
b2lkIGRpZEZhaWxDYWxsYmFjayhDRlVSTERvd25sb2FkUmVmLCBDRkVycm9yUmVmIGVycm9yLCBj
b25zdCB2b2lkKiBjbGllbnRJbmZvKQoreyAKKyAgICBDb3JlSVBDOjpEYXRhUmVmZXJlbmNlIGRh
dGFSZWZlcmVuY2UoMCwgMCk7CisgICAgZG93bmxvYWRGcm9tQ2xpZW50SW5mbyhjbGllbnRJbmZv
KS0+ZGlkRmFpbChSZXNvdXJjZUVycm9yKGVycm9yKSwgZGF0YVJlZmVyZW5jZSk7Cit9CisKK3Zv
aWQgRG93bmxvYWQ6OnJlY2VpdmVkQ3JlZGVudGlhbChjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZSYgYXV0aGVudGljYXRpb25DaGFsbGVuZ2UsIGNvbnN0IENyZWRlbnRpYWwmIGNyZWRlbnRp
YWwpCit7CisgICAgQVNTRVJUKGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLmF1dGhlbnRpY2F0aW9u
Q2xpZW50KCkpOworICAgIGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLmF1dGhlbnRpY2F0aW9uQ2xp
ZW50KCktPnJlY2VpdmVkQ3JlZGVudGlhbChhdXRoZW50aWNhdGlvbkNoYWxsZW5nZSwgY3JlZGVu
dGlhbCk7Cit9CisKK3ZvaWQgRG93bmxvYWQ6OnJlY2VpdmVkUmVxdWVzdFRvQ29udGludWVXaXRo
b3V0Q3JlZGVudGlhbChjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYgYXV0aGVudGljYXRp
b25DaGFsbGVuZ2UpCit7CisgICAgQVNTRVJUKGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLmF1dGhl
bnRpY2F0aW9uQ2xpZW50KCkpOworICAgIGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLmF1dGhlbnRp
Y2F0aW9uQ2xpZW50KCktPnJlY2VpdmVkUmVxdWVzdFRvQ29udGludWVXaXRob3V0Q3JlZGVudGlh
bChhdXRoZW50aWNhdGlvbkNoYWxsZW5nZSk7Cit9CisKK3ZvaWQgRG93bmxvYWQ6OnJlY2VpdmVk
Q2FuY2VsbGF0aW9uKGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiBhdXRoZW50aWNhdGlv
bkNoYWxsZW5nZSkKK3sKKyAgICBBU1NFUlQoYXV0aGVudGljYXRpb25DaGFsbGVuZ2UuYXV0aGVu
dGljYXRpb25DbGllbnQoKSk7CisgICAgYXV0aGVudGljYXRpb25DaGFsbGVuZ2UuYXV0aGVudGlj
YXRpb25DbGllbnQoKS0+cmVjZWl2ZWRDYW5jZWxsYXRpb24oYXV0aGVudGljYXRpb25DaGFsbGVu
Z2UpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1NoYXJlZC9Eb3dubG9hZHMvY3VybC9Eb3dubG9hZEN1cmwuY3BwIGIvU291cmNlL1dlYktp
dDIvU2hhcmVkL0Rvd25sb2Fkcy9jdXJsL0Rvd25sb2FkQ3VybC5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uMDU2MDdlZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1NoYXJlZC9Eb3dubG9hZHMvY3VybC9Eb3dubG9hZEN1cmwuY3BwCkBAIC0wLDAgKzEs
OTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEwIEJyZW50IEZ1bGdoYW0gPGJmdWxn
aGFtQHdlYmtpdC5vcmc+CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJEb3dubG9hZC5oIgorCisjaW5jbHVkZSA8V2ViQ29yZS9Ob3RJbXBsZW1lbnRlZC5oPgorCit1
c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3ZvaWQgRG93
bmxvYWQ6OnN0YXJ0KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIERvd25s
b2FkOjpzdGFydFdpdGhIYW5kbGUoUmVzb3VyY2VIYW5kbGUqLCBjb25zdCBSZXNvdXJjZVJlc3Bv
bnNlJikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIERvd25sb2FkOjpjYW5j
ZWwoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgRG93bmxvYWQ6OnBsYXRm
b3JtSW52YWxpZGF0ZSgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBEb3du
bG9hZDo6ZGlkRGVjaWRlRGVzdGluYXRpb24oY29uc3QgU3RyaW5nJiBkZXN0aW5hdGlvbiwgYm9v
bCBhbGxvd092ZXJ3cml0ZSkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIERv
d25sb2FkOjpyZWNlaXZlZENyZWRlbnRpYWwoY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2Um
IGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLCBjb25zdCBDcmVkZW50aWFsJiBjcmVkZW50aWFsKQor
eworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgRG93bmxvYWQ6OnJlY2VpdmVkUmVx
dWVzdFRvQ29udGludWVXaXRob3V0Q3JlZGVudGlhbChjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZSYgYXV0aGVudGljYXRpb25DaGFsbGVuZ2UpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsK
K30KKwordm9pZCBEb3dubG9hZDo6cmVjZWl2ZWRDYW5jZWxsYXRpb24oY29uc3QgQXV0aGVudGlj
YXRpb25DaGFsbGVuZ2UmIGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKQoreworICAgIG5vdEltcGxl
bWVudGVkKCk7Cit9CisKK3ZvaWQgRG93bmxvYWQ6OnVzZUNyZWRlbnRpYWwoY29uc3QgQXV0aGVu
dGljYXRpb25DaGFsbGVuZ2UmLCBjb25zdCBDcmVkZW50aWFsJikKK3sKKyAgICBub3RJbXBsZW1l
bnRlZCgpOworfQorCit2b2lkIERvd25sb2FkOjpjb250aW51ZVdpdGhvdXRDcmVkZW50aWFsKGNv
bnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
fQorCit2b2lkIERvd25sb2FkOjpjYW5jZWxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShjb25zdCBB
dXRoZW50aWNhdGlvbkNoYWxsZW5nZSYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
RG93bmxvYWRzL2VmbC9Eb3dubG9hZFNvdXBFcnJvcnNFZmwuY3BwIGIvU291cmNlL1dlYktpdDIv
U2hhcmVkL0Rvd25sb2Fkcy9lZmwvRG93bmxvYWRTb3VwRXJyb3JzRWZsLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NDZmMzUxCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYktpdDIvU2hhcmVkL0Rvd25sb2Fkcy9lZmwvRG93bmxvYWRTb3VwRXJyb3JzRWZsLmNw
cApAQCAtMCwwICsxLDQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEludGVsIENvcnBv
cmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiRG93bmxvYWRTb3VwRXJyb3JzLmgiCisKKyNpbmNsdWRlIDxXZWJDb3Jl
L0Vycm9yc0VmbC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VFcnJvci5oPgorCit1c2lu
ZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1Jlc291cmNlRXJy
b3IgcGxhdGZvcm1Eb3dubG9hZE5ldHdvcmtFcnJvcihpbnQgZXJyb3JDb2RlLCBjb25zdCBTdHJp
bmcmIGZhaWxpbmdVUkwsIGNvbnN0IFN0cmluZyYgbG9jYWxpemVkRGVzY3JpcHRpb24pCit7Cisg
ICAgcmV0dXJuIGRvd25sb2FkTmV0d29ya0Vycm9yKFJlc291cmNlRXJyb3IoZXJyb3JEb21haW5E
b3dubG9hZCwgZXJyb3JDb2RlLCBmYWlsaW5nVVJMLCBsb2NhbGl6ZWREZXNjcmlwdGlvbikpOwor
fQorCitSZXNvdXJjZUVycm9yIHBsYXRmb3JtRG93bmxvYWREZXN0aW5hdGlvbkVycm9yKGNvbnN0
IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCit7Cisg
ICAgcmV0dXJuIGRvd25sb2FkRGVzdGluYXRpb25FcnJvcihyZXNwb25zZSwgbWVzc2FnZSk7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hh
cmVkL0Rvd25sb2Fkcy9ndGsvRG93bmxvYWRTb3VwRXJyb3JzR3RrLmNwcCBiL1NvdXJjZS9XZWJL
aXQyL1NoYXJlZC9Eb3dubG9hZHMvZ3RrL0Rvd25sb2FkU291cEVycm9yc0d0ay5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQzZjlkMwotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Eb3dubG9hZHMvZ3RrL0Rvd25sb2FkU291cEVycm9yc0d0
ay5jcHAKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJbnRlbCBD
b3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkRvd25sb2FkU291cEVycm9ycy5oIgorCisjaW5jbHVkZSA8V2Vi
Q29yZS9FcnJvcnNHdGsuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlRXJyb3IuaD4KKwor
dXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitSZXNvdXJj
ZUVycm9yIHBsYXRmb3JtRG93bmxvYWROZXR3b3JrRXJyb3IoaW50IGVycm9yQ29kZSwgY29uc3Qg
U3RyaW5nJiBmYWlsaW5nVVJMLCBjb25zdCBTdHJpbmcmIGxvY2FsaXplZERlc2NyaXB0aW9uKQor
eworICAgIHJldHVybiBkb3dubG9hZE5ldHdvcmtFcnJvcihSZXNvdXJjZUVycm9yKGVycm9yRG9t
YWluRG93bmxvYWQsIGVycm9yQ29kZSwgZmFpbGluZ1VSTCwgbG9jYWxpemVkRGVzY3JpcHRpb24p
KTsKK30KKworUmVzb3VyY2VFcnJvciBwbGF0Zm9ybURvd25sb2FkRGVzdGluYXRpb25FcnJvcihj
b25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQor
eworICAgIHJldHVybiBkb3dubG9hZERlc3RpbmF0aW9uRXJyb3IocmVzcG9uc2UsIG1lc3NhZ2Up
OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1NoYXJlZC9Eb3dubG9hZHMvbWFjL0Rvd25sb2FkTWFjLm1tIGIvU291cmNlL1dlYktpdDIvU2hh
cmVkL0Rvd25sb2Fkcy9tYWMvRG93bmxvYWRNYWMubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uMWY2ZmZlMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1No
YXJlZC9Eb3dubG9hZHMvbWFjL0Rvd25sb2FkTWFjLm1tCkBAIC0wLDAgKzEsMjQyIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJEb3dubG9hZC5oIgor
CisjaW1wb3J0IDxXZWJDb3JlL0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLmg+CisjaW1wb3J0IDxX
ZWJDb3JlL0F1dGhlbnRpY2F0aW9uTWFjLmg+CisjaW1wb3J0IDxXZWJDb3JlL05vdEltcGxlbWVu
dGVkLmg+CisjaW1wb3J0IDxXZWJDb3JlL1Jlc291cmNlSGFuZGxlLmg+CisjaW1wb3J0IDxXZWJD
b3JlL1Jlc291cmNlUmVzcG9uc2UuaD4KKyNpbXBvcnQgIkRhdGFSZWZlcmVuY2UuaCIKKyNpbXBv
cnQgIldlYlBhZ2UuaCIKKworQGludGVyZmFjZSBOU1VSTERvd25sb2FkIChXZWJOU1VSTERvd25s
b2FkRGV0YWlscykKKysoaWQpX2Rvd25sb2FkV2l0aExvYWRpbmdDb25uZWN0aW9uOihOU1VSTENv
bm5lY3Rpb24gKiljb25uZWN0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVz
dDooTlNVUkxSZXF1ZXN0ICopcmVxdWVzdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVz
cG9uc2U6KE5TVVJMUmVzcG9uc2UgKilyCisgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxl
Z2F0ZTooaWQpZGVsZWdhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3h5Oihp
ZClwcm94eTsKK0BlbmQKKworQGludGVyZmFjZSBXS0Rvd25sb2FkQXNEZWxlZ2F0ZSA6IE5TT2Jq
ZWN0IDxOU1VSTERvd25sb2FkRGVsZWdhdGU+IHsKKyAgICBXZWJLaXQ6OkRvd25sb2FkKiBfZG93
bmxvYWQ7Cit9CistIChpZClpbml0V2l0aERvd25sb2FkOihXZWJLaXQ6OkRvd25sb2FkKilkb3du
bG9hZDsKKy0gKHZvaWQpaW52YWxpZGF0ZTsKK0BlbmQKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNv
cmU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCit2b2lkIERvd25sb2FkOjpzdGFydCgpCit7Cisg
ICAgQVNTRVJUKCFtX25zVVJMRG93bmxvYWQpOworICAgIEFTU0VSVCghbV9kZWxlZ2F0ZSk7CisK
KyAgICBtX2RlbGVnYXRlLmFkb3B0TlMoW1tXS0Rvd25sb2FkQXNEZWxlZ2F0ZSBhbGxvY10gaW5p
dFdpdGhEb3dubG9hZDp0aGlzXSk7CisgICAgbV9uc1VSTERvd25sb2FkLmFkb3B0TlMoW1tOU1VS
TERvd25sb2FkIGFsbG9jXSBpbml0V2l0aFJlcXVlc3Q6bV9yZXF1ZXN0Lm5zVVJMUmVxdWVzdCgp
IGRlbGVnYXRlOm1fZGVsZWdhdGUuZ2V0KCldKTsKKworICAgIC8vIEZJWE1FOiBBbGxvdyB0aGlz
IHRvIGJlIGNoYW5nZWQgYnkgdGhlIGNsaWVudC4KKyAgICBbbV9uc1VSTERvd25sb2FkLmdldCgp
IHNldERlbGV0ZXNGaWxlVXBvbkZhaWx1cmU6Tk9dOworfQorCit2b2lkIERvd25sb2FkOjpzdGFy
dFdpdGhIYW5kbGUoUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSwgY29uc3QgUmVzb3VyY2VSZXNwb25z
ZSYgcmVzcG9uc2UpCit7CisgICAgQVNTRVJUKCFtX25zVVJMRG93bmxvYWQpOworICAgIEFTU0VS
VCghbV9kZWxlZ2F0ZSk7CisKKyAgICBpZCBwcm94eSA9IGhhbmRsZS0+cmVsZWFzZVByb3h5KCk7
CisgICAgQVNTRVJUKHByb3h5KTsKKworICAgIG1fZGVsZWdhdGUuYWRvcHROUyhbW1dLRG93bmxv
YWRBc0RlbGVnYXRlIGFsbG9jXSBpbml0V2l0aERvd25sb2FkOnRoaXNdKTsKKyAgICBtX25zVVJM
RG93bmxvYWQgPSBbTlNVUkxEb3dubG9hZCBfZG93bmxvYWRXaXRoTG9hZGluZ0Nvbm5lY3Rpb246
aGFuZGxlLT5jb25uZWN0aW9uKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3Q6bV9yZXF1ZXN0Lm5zVVJMUmVxdWVzdCgp
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJlc3BvbnNlOnJlc3BvbnNlLm5zVVJMUmVzcG9uc2UoKQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZWdhdGU6bV9kZWxl
Z2F0ZS5nZXQoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcHJveHk6cHJveHldOworCisgICAgLy8gRklYTUU6IEFsbG93IHRo
aXMgdG8gYmUgY2hhbmdlZCBieSB0aGUgY2xpZW50LgorICAgIFttX25zVVJMRG93bmxvYWQuZ2V0
KCkgc2V0RGVsZXRlc0ZpbGVVcG9uRmFpbHVyZTpOT107Cit9CisKK3ZvaWQgRG93bmxvYWQ6OmNh
bmNlbCgpCit7CisgICAgW21fbnNVUkxEb3dubG9hZC5nZXQoKSBjYW5jZWxdOworCisgICAgUmV0
YWluUHRyPE5TRGF0YT4gcmVzdW1lRGF0YSA9IFttX25zVVJMRG93bmxvYWQuZ2V0KCkgcmVzdW1l
RGF0YV07CisgICAgZGlkQ2FuY2VsKENvcmVJUEM6OkRhdGFSZWZlcmVuY2UocmVpbnRlcnByZXRf
Y2FzdDxjb25zdCB1aW50OF90Kj4oW3Jlc3VtZURhdGEuZ2V0KCkgYnl0ZXNdKSwgW3Jlc3VtZURh
dGEuZ2V0KCkgbGVuZ3RoXSkpOworfQorCit2b2lkIERvd25sb2FkOjpwbGF0Zm9ybUludmFsaWRh
dGUoKQoreworICAgIEFTU0VSVChtX25zVVJMRG93bmxvYWQpOworICAgIEFTU0VSVChtX2RlbGVn
YXRlKTsKKworICAgIFttX2RlbGVnYXRlLmdldCgpIGludmFsaWRhdGVdOworICAgIG1fZGVsZWdh
dGUgPSBudWxscHRyOworICAgIG1fbnNVUkxEb3dubG9hZCA9IG51bGxwdHI7Cit9CisKK3ZvaWQg
RG93bmxvYWQ6OmRpZERlY2lkZURlc3RpbmF0aW9uKGNvbnN0IFN0cmluZyYgZGVzdGluYXRpb24s
IGJvb2wgYWxsb3dPdmVyd3JpdGUpCit7Cit9CisKK3ZvaWQgRG93bmxvYWQ6OnBsYXRmb3JtRGlk
RmluaXNoKCkKK3sKK30KKwordm9pZCBEb3dubG9hZDo6cmVjZWl2ZWRDcmVkZW50aWFsKGNvbnN0
IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiBhdXRoZW50aWNhdGlvbkNoYWxsZW5nZSwgY29uc3Qg
Q3JlZGVudGlhbCYgY3JlZGVudGlhbCkKK3sKKyAgICBbYXV0aGVudGljYXRpb25DaGFsbGVuZ2Uu
c2VuZGVyKCkgdXNlQ3JlZGVudGlhbDptYWMoY3JlZGVudGlhbCkgZm9yQXV0aGVudGljYXRpb25D
aGFsbGVuZ2U6YXV0aGVudGljYXRpb25DaGFsbGVuZ2UubnNVUkxBdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZSgpXTsKK30KKwordm9pZCBEb3dubG9hZDo6cmVjZWl2ZWRSZXF1ZXN0VG9Db250aW51ZVdp
dGhvdXRDcmVkZW50aWFsKGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiBhdXRoZW50aWNh
dGlvbkNoYWxsZW5nZSkKK3sKKyAgICBbYXV0aGVudGljYXRpb25DaGFsbGVuZ2Uuc2VuZGVyKCkg
Y29udGludWVXaXRob3V0Q3JlZGVudGlhbEZvckF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlOmF1dGhl
bnRpY2F0aW9uQ2hhbGxlbmdlLm5zVVJMQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoKV07Cit9CisK
K3ZvaWQgRG93bmxvYWQ6OnJlY2VpdmVkQ2FuY2VsbGF0aW9uKGNvbnN0IEF1dGhlbnRpY2F0aW9u
Q2hhbGxlbmdlJiBhdXRoZW50aWNhdGlvbkNoYWxsZW5nZSkKK3sKKyAgICBbYXV0aGVudGljYXRp
b25DaGFsbGVuZ2Uuc2VuZGVyKCkgY2FuY2VsQXV0aGVudGljYXRpb25DaGFsbGVuZ2U6YXV0aGVu
dGljYXRpb25DaGFsbGVuZ2UubnNVUkxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSgpXTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKK0BpbXBsZW1lbnRhdGlvbiBXS0Rvd25sb2FkQXNEZWxl
Z2F0ZQorCistIChpZClpbml0V2l0aERvd25sb2FkOihXZWJLaXQ6OkRvd25sb2FkKilkb3dubG9h
ZAoreworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYgKCFzZWxmKQorICAgICAgICBy
ZXR1cm4gbmlsOworCisgICAgX2Rvd25sb2FkID0gZG93bmxvYWQ7CisgICAgcmV0dXJuIHNlbGY7
Cit9CisKKy0gKHZvaWQpaW52YWxpZGF0ZQoreworICAgIF9kb3dubG9hZCA9IDA7Cit9CisKKy0g
KHZvaWQpZG93bmxvYWREaWRCZWdpbjooTlNVUkxEb3dubG9hZCAqKWRvd25sb2FkCit7CisgICAg
aWYgKF9kb3dubG9hZCkKKyAgICAgICAgX2Rvd25sb2FkLT5kaWRTdGFydCgpOworfQorCistIChO
U1VSTFJlcXVlc3QgKilkb3dubG9hZDooTlNVUkxEb3dubG9hZCAqKWRvd25sb2FkIHdpbGxTZW5k
UmVxdWVzdDooTlNVUkxSZXF1ZXN0ICopcmVxdWVzdCByZWRpcmVjdFJlc3BvbnNlOihOU1VSTFJl
c3BvbnNlICopcmVkaXJlY3RSZXNwb25zZQoreworICAgIHJldHVybiByZXF1ZXN0OworfQorCist
IChCT09MKWRvd25sb2FkOihOU1VSTERvd25sb2FkICopY29ubmVjdGlvbiBjYW5BdXRoZW50aWNh
dGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlOihOU1VSTFByb3RlY3Rpb25TcGFjZSAqKXByb3RlY3Rp
b25TcGFjZQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQuCisgICAgbm90SW1wbGVtZW50ZWQo
KTsKKyAgICByZXR1cm4gTk87Cit9CisKKy0gKHZvaWQpZG93bmxvYWQ6KE5TVVJMRG93bmxvYWQg
Kilkb3dubG9hZCBkaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2U6KE5TVVJMQXV0aGVu
dGljYXRpb25DaGFsbGVuZ2UgKiljaGFsbGVuZ2UKK3sKKyAgICBpZiAoX2Rvd25sb2FkKQorICAg
ICAgICBfZG93bmxvYWQtPmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShjb3JlKGNo
YWxsZW5nZSkpOworfQorCistICh2b2lkKWRvd25sb2FkOihOU1VSTERvd25sb2FkICopZG93bmxv
YWQgZGlkQ2FuY2VsQXV0aGVudGljYXRpb25DaGFsbGVuZ2U6KE5TVVJMQXV0aGVudGljYXRpb25D
aGFsbGVuZ2UgKiljaGFsbGVuZ2UKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50LgorICAgIG5v
dEltcGxlbWVudGVkKCk7Cit9CisKKy0gKEJPT0wpZG93bmxvYWRTaG91bGRVc2VDcmVkZW50aWFs
U3RvcmFnZTooTlNVUkxEb3dubG9hZCAqKWRvd25sb2FkCit7CisgICAgcmV0dXJuIE5POworfQor
CistICh2b2lkKWRvd25sb2FkOihOU1VSTERvd25sb2FkICopZG93bmxvYWQgZGlkUmVjZWl2ZVJl
c3BvbnNlOihOU1VSTFJlc3BvbnNlICopcmVzcG9uc2UKK3sKKyAgICBpZiAoX2Rvd25sb2FkKQor
ICAgICAgICBfZG93bmxvYWQtPmRpZFJlY2VpdmVSZXNwb25zZShyZXNwb25zZSk7Cit9CisKKy0g
KHZvaWQpZG93bmxvYWQ6KE5TVVJMRG93bmxvYWQgKilkb3dubG9hZCB3aWxsUmVzdW1lV2l0aFJl
c3BvbnNlOihOU1VSTFJlc3BvbnNlICopcmVzcG9uc2UgZnJvbUJ5dGU6KGxvbmcgbG9uZylzdGFy
dGluZ0J5dGUKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50LgorICAgIG5vdEltcGxlbWVudGVk
KCk7Cit9CisKKy0gKHZvaWQpZG93bmxvYWQ6KE5TVVJMRG93bmxvYWQgKilkb3dubG9hZCBkaWRS
ZWNlaXZlRGF0YU9mTGVuZ3RoOihOU1VJbnRlZ2VyKWxlbmd0aAoreworICAgIGlmIChfZG93bmxv
YWQpCisgICAgICAgIF9kb3dubG9hZC0+ZGlkUmVjZWl2ZURhdGEobGVuZ3RoKTsKK30KKworLSAo
Qk9PTClkb3dubG9hZDooTlNVUkxEb3dubG9hZCAqKWRvd25sb2FkIHNob3VsZERlY29kZVNvdXJj
ZURhdGFPZk1JTUVUeXBlOihOU1N0cmluZyAqKWVuY29kaW5nVHlwZQoreworICAgIGlmIChfZG93
bmxvYWQpCisgICAgICAgIHJldHVybiBfZG93bmxvYWQtPnNob3VsZERlY29kZVNvdXJjZURhdGFP
Zk1JTUVUeXBlKGVuY29kaW5nVHlwZSk7CisKKyAgICByZXR1cm4gWUVTOworfQorCistICh2b2lk
KWRvd25sb2FkOihOU1VSTERvd25sb2FkICopZG93bmxvYWQgZGVjaWRlRGVzdGluYXRpb25XaXRo
U3VnZ2VzdGVkRmlsZW5hbWU6KE5TU3RyaW5nICopZmlsZW5hbWUKK3sKKyAgICBTdHJpbmcgZGVz
dGluYXRpb247CisgICAgYm9vbCBhbGxvd092ZXJ3cml0ZTsKKyAgICBpZiAoX2Rvd25sb2FkKQor
ICAgICAgICBkZXN0aW5hdGlvbiA9IF9kb3dubG9hZC0+ZGVjaWRlRGVzdGluYXRpb25XaXRoU3Vn
Z2VzdGVkRmlsZW5hbWUoZmlsZW5hbWUsIGFsbG93T3ZlcndyaXRlKTsKKworICAgIGlmICghZGVz
dGluYXRpb24uaXNOdWxsKCkpCisgICAgICAgIFtkb3dubG9hZCBzZXREZXN0aW5hdGlvbjpkZXN0
aW5hdGlvbiBhbGxvd092ZXJ3cml0ZTphbGxvd092ZXJ3cml0ZV07Cit9CisKKy0gKHZvaWQpZG93
bmxvYWQ6KE5TVVJMRG93bmxvYWQgKilkb3dubG9hZCBkaWRDcmVhdGVEZXN0aW5hdGlvbjooTlNT
dHJpbmcgKilwYXRoCit7CisgICAgaWYgKF9kb3dubG9hZCkKKyAgICAgICAgX2Rvd25sb2FkLT5k
aWRDcmVhdGVEZXN0aW5hdGlvbihwYXRoKTsKK30KKworLSAodm9pZClkb3dubG9hZERpZEZpbmlz
aDooTlNVUkxEb3dubG9hZCAqKWRvd25sb2FkCit7CisgICAgaWYgKF9kb3dubG9hZCkKKyAgICAg
ICAgX2Rvd25sb2FkLT5kaWRGaW5pc2goKTsKK30KKworLSAodm9pZClkb3dubG9hZDooTlNVUkxE
b3dubG9hZCAqKWRvd25sb2FkIGRpZEZhaWxXaXRoRXJyb3I6KE5TRXJyb3IgKillcnJvcgorewor
ICAgIGlmICghX2Rvd25sb2FkKQorICAgICAgICByZXR1cm47CisKKyAgICBSZXRhaW5QdHI8TlNE
YXRhPiByZXN1bWVEYXRhID0gW2Rvd25sb2FkIHJlc3VtZURhdGFdOworICAgIENvcmVJUEM6OkRh
dGFSZWZlcmVuY2UgZGF0YVJlZmVyZW5jZShyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3Qq
PihbcmVzdW1lRGF0YS5nZXQoKSBieXRlc10pLCBbcmVzdW1lRGF0YS5nZXQoKSBsZW5ndGhdKTsK
KworICAgIF9kb3dubG9hZC0+ZGlkRmFpbChlcnJvciwgZGF0YVJlZmVyZW5jZSk7Cit9CisKK0Bl
bmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Eb3dubG9hZHMvcXQvRG93bmxv
YWRRdC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvRG93bmxvYWRzL3F0L0Rvd25sb2FkUXQu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4OWU0NzEKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvRG93bmxvYWRzL3F0L0Rvd25sb2FkUXQu
Y3BwCkBAIC0wLDAgKzEsMTAyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDExIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBOb2tp
YSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRvd25sb2FkLmgiCisKKyNpbmNsdWRlICJRdEZp
bGVEb3dubG9hZGVyLmgiCisjaW5jbHVkZSAiV2ViUHJvY2Vzcy5oIgorI2luY2x1ZGUgPFdlYkNv
cmUvTm90SW1wbGVtZW50ZWQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1FOZXR3b3JrUmVwbHlIYW5k
bGVyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZUhhbmRsZS5oPgorI2luY2x1ZGUgPFdl
YkNvcmUvUmVzb3VyY2VIYW5kbGVJbnRlcm5hbC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3Vy
Y2VSZXNwb25zZS5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdl
YktpdCB7CisKK3ZvaWQgRG93bmxvYWQ6OnN0YXJ0KCkKK3sKKyAgICBRTmV0d29ya0FjY2Vzc01h
bmFnZXIqIG1hbmFnZXIgPSBXZWJQcm9jZXNzOjpzaGFyZWQoKS5uZXR3b3JrQWNjZXNzTWFuYWdl
cigpOworICAgIEFTU0VSVChtYW5hZ2VyKTsKKyAgICBBU1NFUlQoIW1fcXREb3dubG9hZGVyKTsK
KworICAgIG1fcXREb3dubG9hZGVyID0gbmV3IFF0RmlsZURvd25sb2FkZXIodGhpcywgYWRvcHRQ
dHIobWFuYWdlci0+Z2V0KG1fcmVxdWVzdC50b05ldHdvcmtSZXF1ZXN0KCkpKSk7CisgICAgbV9x
dERvd25sb2FkZXItPmluaXQoKTsKK30KKwordm9pZCBEb3dubG9hZDo6c3RhcnRXaXRoSGFuZGxl
KFJlc291cmNlSGFuZGxlKiBoYW5kbGUsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3ApCit7
CisgICAgQVNTRVJUKCFtX3F0RG93bmxvYWRlcik7CisgICAgbV9xdERvd25sb2FkZXIgPSBuZXcg
UXRGaWxlRG93bmxvYWRlcih0aGlzLCBhZG9wdFB0cihoYW5kbGUtPmdldEludGVybmFsKCktPm1f
am9iLT5yZWxlYXNlKCkpKTsKKyAgICBtX3F0RG93bmxvYWRlci0+aW5pdCgpOworfQorCit2b2lk
IERvd25sb2FkOjpjYW5jZWwoKQoreworICAgIEFTU0VSVChtX3F0RG93bmxvYWRlcik7CisgICAg
bV9xdERvd25sb2FkZXItPmNhbmNlbCgpOworfQorCit2b2lkIERvd25sb2FkOjpwbGF0Zm9ybUlu
dmFsaWRhdGUoKQoreworICAgIEFTU0VSVChtX3F0RG93bmxvYWRlcik7CisgICAgbV9xdERvd25s
b2FkZXItPmRlbGV0ZUxhdGVyKCk7CisgICAgbV9xdERvd25sb2FkZXIgPSAwOworfQorCit2b2lk
IERvd25sb2FkOjpkaWREZWNpZGVEZXN0aW5hdGlvbihjb25zdCBTdHJpbmcmIGRlc3RpbmF0aW9u
LCBib29sIGFsbG93T3ZlcndyaXRlKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3Zv
aWQgRG93bmxvYWQ6OnN0YXJ0VHJhbnNmZXIoY29uc3QgU3RyaW5nJiBkZXN0aW5hdGlvbikKK3sK
KyAgICBtX3F0RG93bmxvYWRlci0+c3RhcnRUcmFuc2ZlcihkZXN0aW5hdGlvbik7Cit9CisKK3Zv
aWQgRG93bmxvYWQ6OnBsYXRmb3JtRGlkRmluaXNoKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgp
OworfQorCit2b2lkIERvd25sb2FkOjpyZWNlaXZlZENyZWRlbnRpYWwoY29uc3QgQXV0aGVudGlj
YXRpb25DaGFsbGVuZ2UmIGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLCBjb25zdCBDcmVkZW50aWFs
JiBjcmVkZW50aWFsKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgRG93bmxv
YWQ6OnJlY2VpdmVkUmVxdWVzdFRvQ29udGludWVXaXRob3V0Q3JlZGVudGlhbChjb25zdCBBdXRo
ZW50aWNhdGlvbkNoYWxsZW5nZSYgYXV0aGVudGljYXRpb25DaGFsbGVuZ2UpCit7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBEb3dubG9hZDo6cmVjZWl2ZWRDYW5jZWxsYXRpb24o
Y29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmIGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKQor
eworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL0Rvd25sb2Fkcy9xdC9RdEZpbGVEb3dubG9h
ZGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Eb3dubG9hZHMvcXQvUXRGaWxlRG93bmxv
YWRlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzNiMmU4ZAotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Eb3dubG9hZHMvcXQvUXRGaWxl
RG93bmxvYWRlci5jcHAKQEAgLTAsMCArMSwyNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKgorICog
VGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJv
Z3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlF0RmlsZURvd25sb2FkZXIuaCIKKworI2luY2x1ZGUg
IkRhdGFSZWZlcmVuY2UuaCIKKyNpbmNsdWRlICJEb3dubG9hZC5oIgorI2luY2x1ZGUgIkhUVFBQ
YXJzZXJzLmgiCisjaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgorI2luY2x1ZGUgPFFDb3Jl
QXBwbGljYXRpb24+CisjaW5jbHVkZSA8UUZpbGU+CisjaW5jbHVkZSA8UUZpbGVJbmZvPgorI2lu
Y2x1ZGUgPFFOZXR3b3JrQWNjZXNzTWFuYWdlcj4KKyNpbmNsdWRlIDxXZWJDb3JlL1FOZXR3b3Jr
UmVwbHlIYW5kbGVyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZUVycm9yLmg+CisjaW5j
bHVkZSA8V2ViQ29yZS9SZXNvdXJjZVJlc3BvbnNlLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJD
b3JlOwordXNpbmcgbmFtZXNwYWNlIFdURjsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1F0Rmls
ZURvd25sb2FkZXI6OlF0RmlsZURvd25sb2FkZXIoRG93bmxvYWQqIGRvd25sb2FkLCBQYXNzT3du
UHRyPFFOZXR3b3JrUmVwbHk+IHJlcGx5KQorICAgIDogbV9kb3dubG9hZChkb3dubG9hZCkKKyAg
ICAsIG1fcmVwbHkocmVwbHkpCisgICAgLCBtX2Vycm9yKFFOZXR3b3JrUmVwbHk6Ok5vRXJyb3Ip
CisgICAgLCBtX2hlYWRlcnNSZWFkKGZhbHNlKQoreworfQorCitRdEZpbGVEb3dubG9hZGVyOjp+
UXRGaWxlRG93bmxvYWRlcigpCit7CisgICAgaWYgKCFtX2Rlc3RpbmF0aW9uRmlsZSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgYWJvcnREb3dubG9hZFdyaXRpbmdBbmRFbWl0RXJyb3IoUXRGaWxl
RG93bmxvYWRlcjo6RG93bmxvYWRFcnJvckFib3J0ZWQpOworfQorCit2b2lkIFF0RmlsZURvd25s
b2FkZXI6OmluaXQoKQoreworICAgIGNvbm5lY3QobV9yZXBseS5nZXQoKSwgU0lHTkFMKHJlYWR5
UmVhZCgpKSwgU0xPVChvblJlYWR5UmVhZCgpKSk7CisgICAgY29ubmVjdChtX3JlcGx5LmdldCgp
LCBTSUdOQUwoZmluaXNoZWQoKSksIFNMT1Qob25GaW5pc2hlZCgpKSk7CisgICAgY29ubmVjdCht
X3JlcGx5LmdldCgpLCBTSUdOQUwoZXJyb3IoUU5ldHdvcmtSZXBseTo6TmV0d29ya0Vycm9yKSks
IFNMT1Qob25FcnJvcihRTmV0d29ya1JlcGx5OjpOZXR3b3JrRXJyb3IpKSk7Cit9CisKK1FTdHJp
bmcgUXRGaWxlRG93bmxvYWRlcjo6ZGV0ZXJtaW5lRmlsZW5hbWUoKQoreworICAgIEFTU0VSVCgh
bV9kZXN0aW5hdGlvbkZpbGUpOworCisgICAgUVN0cmluZyBmaWxlbmFtZUNhbmRpZGF0ZSA9IGZp
bGVuYW1lRnJvbUhUVFBDb250ZW50RGlzcG9zaXRpb24oUVN0cmluZzo6ZnJvbUxhdGluMShtX3Jl
cGx5LT5yYXdIZWFkZXIoIkNvbnRlbnQtRGlzcG9zaXRpb24iKSkpOworICAgIGlmIChmaWxlbmFt
ZUNhbmRpZGF0ZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgS1VSTCBrdXJsID0gbV9yZXBseS0+dXJs
KCk7CisgICAgICAgIGZpbGVuYW1lQ2FuZGlkYXRlID0gZGVjb2RlVVJMRXNjYXBlU2VxdWVuY2Vz
KGt1cmwubGFzdFBhdGhDb21wb25lbnQoKSk7CisgICAgfQorCisgICAgaWYgKGZpbGVuYW1lQ2Fu
ZGlkYXRlLmlzRW1wdHkoKSkgeworICAgICAgICBhYm9ydERvd25sb2FkV3JpdGluZ0FuZEVtaXRF
cnJvcihRdEZpbGVEb3dubG9hZGVyOjpEb3dubG9hZEVycm9yQ2Fubm90RGV0ZXJtaW5lRmlsZW5h
bWUpOworICAgICAgICByZXR1cm4gUVN0cmluZygpOworICAgIH0KKworICAgIC8vIE1ha2Ugc3Vy
ZSB0aGF0IHdlIHJlbW92ZSBwb3NzaWJsZSAiLi4vLi4iIHBhcnRzIGluIHRoZSBnaXZlbiBmaWxl
IG5hbWUuCisgICAgUUZpbGVJbmZvIGZpbGVuYW1lRmlsdGVyKGZpbGVuYW1lQ2FuZGlkYXRlKTsK
KyAgICBRU3RyaW5nIGZpbGVuYW1lID0gZmlsZW5hbWVGaWx0ZXIuZmlsZU5hbWUoKTsKKworICAg
IGlmIChmaWxlbmFtZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgYWJvcnREb3dubG9hZFdyaXRpbmdB
bmRFbWl0RXJyb3IoUXRGaWxlRG93bmxvYWRlcjo6RG93bmxvYWRFcnJvckNhbm5vdERldGVybWlu
ZUZpbGVuYW1lKTsKKyAgICAgICAgcmV0dXJuIFFTdHJpbmcoKTsKKyAgICB9CisKKyAgICByZXR1
cm4gZmlsZW5hbWU7Cit9CisKK3ZvaWQgUXRGaWxlRG93bmxvYWRlcjo6c3RhcnRUcmFuc2Zlcihj
b25zdCBRU3RyaW5nJiBkZWNpZGVkRmlsZVBhdGgpCit7CisgICAgQVNTRVJUKCFtX2Rlc3RpbmF0
aW9uRmlsZSk7CisKKyAgICAvLyBFcnJvciBtaWdodCBoYXZlIG9jY3VyZWQgZHVyaW5nIGRlc3Rp
bmF0aW9uIHF1ZXJ5LgorICAgIGlmIChtX2Vycm9yICE9IFFOZXR3b3JrUmVwbHk6Ok5vRXJyb3Ip
IHsKKyAgICAgICAgYWJvcnREb3dubG9hZFdyaXRpbmdBbmRFbWl0RXJyb3IoUXRGaWxlRG93bmxv
YWRlcjo6RG93bmxvYWRFcnJvck5ldHdvcmtGYWlsdXJlKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIGlmIChkZWNpZGVkRmlsZVBhdGguaXNFbXB0eSgpKSB7CisgICAgICAgIGFib3J0
RG93bmxvYWRXcml0aW5nQW5kRW1pdEVycm9yKFF0RmlsZURvd25sb2FkZXI6OkRvd25sb2FkRXJy
b3JDYW5jZWxsZWQpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgT3duUHRyPFFGaWxl
PiBkb3dubG9hZEZpbGUgPSBhZG9wdFB0cihuZXcgUUZpbGUoZGVjaWRlZEZpbGVQYXRoKSk7CisK
KyAgICBpZiAoIWRvd25sb2FkRmlsZS0+b3BlbihRSU9EZXZpY2U6OldyaXRlT25seSB8IFFJT0Rl
dmljZTo6VHJ1bmNhdGUpKSB7CisgICAgICAgIGFib3J0RG93bmxvYWRXcml0aW5nQW5kRW1pdEVy
cm9yKFF0RmlsZURvd25sb2FkZXI6OkRvd25sb2FkRXJyb3JDYW5ub3RPcGVuRmlsZSk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBBc3NpZ25pbmcgdG8gbV9kZXN0aW5hdGlvbkZp
bGUgZmxhZ3MgdGhhdCBlaXRoZXIgZXJyb3Igb3IKKyAgICAvLyBmaW5pc2hlZCBzaGFsbCBiZSBj
YWxsZWQgaW4gdGhlIGVuZC4KKyAgICBtX2Rlc3RpbmF0aW9uRmlsZSA9IGRvd25sb2FkRmlsZS5y
ZWxlYXNlKCk7CisKKyAgICBtX2Rvd25sb2FkLT5kaWRDcmVhdGVEZXN0aW5hdGlvbihtX2Rlc3Rp
bmF0aW9uRmlsZS0+ZmlsZU5hbWUoKSk7CisKKyAgICAvLyBXZSBtaWdodCBoYXZlIGdvdHRlbiBy
ZWFkeVJlYWQgYWxyZWFkeSBldmVuIGJlZm9yZSB0aGlzIGZ1bmN0aW9uCisgICAgLy8gd2FzIGNh
bGxlZC4KKyAgICBpZiAobV9yZXBseS0+Ynl0ZXNBdmFpbGFibGUoKSkKKyAgICAgICAgb25SZWFk
eVJlYWQoKTsKKworICAgIC8vIFdlIG1pZ2h0IGhhdmUgZ290dGVuIGZpbmlzaGVkIGFscmVhZHkg
ZXZlbiBiZWZvcmUgdGhpcworICAgIC8vIGZ1bmN0aW9uIHdhcyBjYWxsZWQuCisgICAgaWYgKG1f
cmVwbHktPmlzRmluaXNoZWQoKSkKKyAgICAgICAgb25GaW5pc2hlZCgpOworfQorCit2b2lkIFF0
RmlsZURvd25sb2FkZXI6OmFib3J0RG93bmxvYWRXcml0aW5nQW5kRW1pdEVycm9yKFF0RmlsZURv
d25sb2FkZXI6OkRvd25sb2FkRXJyb3IgZXJyb3JDb2RlKQoreworICAgIG1fcmVwbHktPmFib3J0
KCk7CisKKyAgICAvLyBPbiBuZXR3b3JrIGZhaWx1cmVzIGl0J3MgUU5ldHdvcmtSZXBseUhhbmRs
ZXI6OmVycm9yRm9yUmVwbHkgd2hvIHdpbGwgaGFuZGxlIGVycm9ycy4KKyAgICBpZiAoZXJyb3JD
b2RlID09IFF0RmlsZURvd25sb2FkZXI6OkRvd25sb2FkRXJyb3JOZXR3b3JrRmFpbHVyZSkgewor
ICAgICAgICBtX2Rvd25sb2FkLT5kaWRGYWlsKFFOZXR3b3JrUmVwbHlIYW5kbGVyOjplcnJvckZv
clJlcGx5KG1fcmVwbHkuZ2V0KCkpLCBDb3JlSVBDOjpEYXRhUmVmZXJlbmNlKDAsIDApKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFFTdHJpbmcgdHJhbnNsYXRlZEVycm9yTWVzc2Fn
ZTsKKyAgICBzd2l0Y2ggKGVycm9yQ29kZSkgeworICAgIGNhc2UgUXRGaWxlRG93bmxvYWRlcjo6
RG93bmxvYWRFcnJvckFib3J0ZWQ6CisgICAgICAgIHRyYW5zbGF0ZWRFcnJvck1lc3NhZ2UgPSBR
Q29yZUFwcGxpY2F0aW9uOjp0cmFuc2xhdGUoIlF0RmlsZURvd25sb2FkZXIiLCAiRG93bmxvYWQg
YWJvcnRlZCIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFF0RmlsZURvd25sb2FkZXI6OkRv
d25sb2FkRXJyb3JDYW5ub3RXcml0ZVRvRmlsZToKKyAgICAgICAgdHJhbnNsYXRlZEVycm9yTWVz
c2FnZSA9IFFDb3JlQXBwbGljYXRpb246OnRyYW5zbGF0ZSgiUXRGaWxlRG93bmxvYWRlciIsICJD
YW5ub3Qgd3JpdGUgdG8gZmlsZSIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFF0RmlsZURv
d25sb2FkZXI6OkRvd25sb2FkRXJyb3JDYW5ub3RPcGVuRmlsZToKKyAgICAgICAgdHJhbnNsYXRl
ZEVycm9yTWVzc2FnZSA9IFFDb3JlQXBwbGljYXRpb246OnRyYW5zbGF0ZSgiUXRGaWxlRG93bmxv
YWRlciIsICJDYW5ub3Qgb3BlbiBmaWxlIGZvciB3cml0aW5nIik7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgUXRGaWxlRG93bmxvYWRlcjo6RG93bmxvYWRFcnJvckRlc3RpbmF0aW9uQWxyZWFk
eUV4aXN0czoKKyAgICAgICAgdHJhbnNsYXRlZEVycm9yTWVzc2FnZSA9IFFDb3JlQXBwbGljYXRp
b246OnRyYW5zbGF0ZSgiUXRGaWxlRG93bmxvYWRlciIsICJEZXN0aW5hdGlvbiBhbHJlYWR5IGV4
aXN0cyIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFF0RmlsZURvd25sb2FkZXI6OkRvd25s
b2FkRXJyb3JDYW5jZWxsZWQ6CisgICAgICAgIHRyYW5zbGF0ZWRFcnJvck1lc3NhZ2UgPSBRQ29y
ZUFwcGxpY2F0aW9uOjp0cmFuc2xhdGUoIlF0RmlsZURvd25sb2FkZXIiLCAiRG93bmxvYWQgY2Fu
Y2VsbGVkIGJ5IGNhbGxlciIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFF0RmlsZURvd25s
b2FkZXI6OkRvd25sb2FkRXJyb3JDYW5ub3REZXRlcm1pbmVGaWxlbmFtZToKKyAgICAgICAgdHJh
bnNsYXRlZEVycm9yTWVzc2FnZSA9IFFDb3JlQXBwbGljYXRpb246OnRyYW5zbGF0ZSgiUXRGaWxl
RG93bmxvYWRlciIsICJDYW5ub3QgZGV0ZXJtaW5lIGZpbGVuYW1lIik7CisgICAgICAgIGJyZWFr
OworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKwor
ICAgIFJlc291cmNlRXJyb3IgZG93bmxvYWRFcnJvcigiRG93bmxvYWQiLCBlcnJvckNvZGUsIG1f
cmVwbHktPnVybCgpLnRvU3RyaW5nKCksIHRyYW5zbGF0ZWRFcnJvck1lc3NhZ2UpOworCisgICAg
bV9kb3dubG9hZC0+ZGlkRmFpbChkb3dubG9hZEVycm9yLCBDb3JlSVBDOjpEYXRhUmVmZXJlbmNl
KDAsIDApKTsKK30KKwordm9pZCBRdEZpbGVEb3dubG9hZGVyOjpoYW5kbGVEb3dubG9hZFJlc3Bv
bnNlKCkKK3sKKyAgICAvLyBCeSBBUEkgY29udHJhY3QsIFFOZXR3b3JrUmVwbHk6Om1ldGFEYXRh
Q2hhbmdlZCBjYW5ub3QgcmVhbGx5IGJlIHRydXN0ZWQuCisgICAgLy8gVGh1cyB3ZSBuZWVkIHRv
IGNhbGwgdGhpcyB1cG9uIHJlY2VpdmluZyBmaXJzdCBkYXRhLgorICAgIFN0cmluZyBjb250ZW50
VHlwZSA9IG1fcmVwbHktPmhlYWRlcihRTmV0d29ya1JlcXVlc3Q6OkNvbnRlbnRUeXBlSGVhZGVy
KS50b1N0cmluZygpOworICAgIFN0cmluZyBlbmNvZGluZyA9IGV4dHJhY3RDaGFyc2V0RnJvbU1l
ZGlhVHlwZShjb250ZW50VHlwZSk7CisgICAgU3RyaW5nIG1pbWVUeXBlID0gZXh0cmFjdE1JTUVU
eXBlRnJvbU1lZGlhVHlwZShjb250ZW50VHlwZSk7CisgICAgU3RyaW5nIGZpbGVuYW1lID0gZGV0
ZXJtaW5lRmlsZW5hbWUoKTsKKworICAgIC8vIElmIGZpbGVuYW1lIGlzIGVtcHR5IGl0IG1lYW5z
IGRldGVybWluZUZpbGVuYW1lIGFib3J0ZWQgYW5kIGVtaXR0ZWQgYW4gZXJyb3IuCisgICAgaWYg
KGZpbGVuYW1lLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gTGV0J3MgdHJ5
IHRvIGd1ZXNzIGZyb20gdGhlIGV4dGVuc2lvbi4KKyAgICBpZiAobWltZVR5cGUuaXNFbXB0eSgp
KQorICAgICAgICBtaW1lVHlwZSA9IE1JTUVUeXBlUmVnaXN0cnk6OmdldE1JTUVUeXBlRm9yUGF0
aChtX3JlcGx5LT51cmwoKS5wYXRoKCkpOworCisgICAgUmVzb3VyY2VSZXNwb25zZSByZXNwb25z
ZShtX3JlcGx5LT51cmwoKSwgbWltZVR5cGUsIG1fcmVwbHktPmhlYWRlcihRTmV0d29ya1JlcXVl
c3Q6OkNvbnRlbnRMZW5ndGhIZWFkZXIpLnRvTG9uZ0xvbmcoKSwgZW5jb2RpbmcsIGZpbGVuYW1l
KTsKKyAgICBtX2Rvd25sb2FkLT5kaWRSZWNlaXZlUmVzcG9uc2UocmVzcG9uc2UpOworfQorCit2
b2lkIFF0RmlsZURvd25sb2FkZXI6Om9uUmVhZHlSZWFkKCkKK3sKKyAgICBpZiAobV9kZXN0aW5h
dGlvbkZpbGUpIHsKKyAgICAgICAgUUJ5dGVBcnJheSBjb250ZW50ID0gbV9yZXBseS0+cmVhZEFs
bCgpOworICAgICAgICBpZiAoY29udGVudC5zaXplKCkgPD0gMCkKKyAgICAgICAgICAgIHJldHVy
bjsKKworICAgICAgICBxaW50NjQgYnl0ZXNXcml0dGVuID0gbV9kZXN0aW5hdGlvbkZpbGUtPndy
aXRlKGNvbnRlbnQpOworCisgICAgICAgIGlmIChieXRlc1dyaXR0ZW4gPT0gLTEpIHsKKyAgICAg
ICAgICAgIGFib3J0RG93bmxvYWRXcml0aW5nQW5kRW1pdEVycm9yKFF0RmlsZURvd25sb2FkZXI6
OkRvd25sb2FkRXJyb3JDYW5ub3RXcml0ZVRvRmlsZSk7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKworICAgICAgICAvLyBUaGVyZSBtaWdodCBhIGNvcm5lciBjYXNlIHRvIGJlIGZp
eGVkIGhlcmUgaWYgYnl0ZXNXcml0dGVuICE9IGNvbnRlbnQuc2l6ZSgpCisgICAgICAgIC8vIGRv
ZXMgbm90IGFjdHVhbGx5IHJlcHJlc2VudCBhbiBlcnJvci4KKyAgICAgICAgQVNTRVJUKGJ5dGVz
V3JpdHRlbiA9PSBjb250ZW50LnNpemUoKSk7CisKKyAgICAgICAgbV9kb3dubG9hZC0+ZGlkUmVj
ZWl2ZURhdGEoYnl0ZXNXcml0dGVuKTsKKyAgICB9IGVsc2UgaWYgKCFtX2hlYWRlcnNSZWFkKSB7
CisgICAgICAgIGhhbmRsZURvd25sb2FkUmVzcG9uc2UoKTsKKyAgICAgICAgbV9oZWFkZXJzUmVh
ZCA9IHRydWU7CisgICAgfQorfQorCit2b2lkIFF0RmlsZURvd25sb2FkZXI6Om9uRmluaXNoZWQo
KQoreworICAgIC8vIElmIGl0J3MgZmluaXNoZWQgYW5kIHdlIGhhdmVuJ3QgZXZlbiByZWFkIHRo
ZSBoZWFkZXJzLCBpdCBtZWFucyB3ZSBuZXZlciBnb3QgdG8gb25SZWFkeVJlYWQgYW5kIHRoYXQg
d2UgYXJlCisgICAgLy8gcHJvYmFibHkgZGVhbGluZyB3aXRoIHRoZSBkb3dubG9hZCBvZiBhIGxv
Y2FsIGZpbGUgb3Igb2YgYSBzbWFsbCBmaWxlIHRoYXQgd2FzIHN0YXJ0ZWQgd2l0aCBhIGhhbmRs
ZS4KKyAgICBpZiAoIW1faGVhZGVyc1JlYWQpIHsKKyAgICAgICAgaGFuZGxlRG93bmxvYWRSZXNw
b25zZSgpOworICAgICAgICBtX2hlYWRlcnNSZWFkID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIGlmICghbV9kZXN0aW5hdGlvbkZpbGUpCisgICAgICAgIHJldHVybjsKKwor
ICAgIG1fZGVzdGluYXRpb25GaWxlLmNsZWFyKCk7CisKKyAgICBpZiAobV9lcnJvciA9PSBRTmV0
d29ya1JlcGx5OjpOb0Vycm9yKQorICAgICAgICBtX2Rvd25sb2FkLT5kaWRGaW5pc2goKTsKKyAg
ICBlbHNlIGlmICAobV9lcnJvciA9PSBRTmV0d29ya1JlcGx5OjpPcGVyYXRpb25DYW5jZWxlZEVy
cm9yKQorICAgICAgICBhYm9ydERvd25sb2FkV3JpdGluZ0FuZEVtaXRFcnJvcihRdEZpbGVEb3du
bG9hZGVyOjpEb3dubG9hZEVycm9yQ2FuY2VsbGVkKTsKKyAgICBlbHNlCisgICAgICAgIGFib3J0
RG93bmxvYWRXcml0aW5nQW5kRW1pdEVycm9yKFF0RmlsZURvd25sb2FkZXI6OkRvd25sb2FkRXJy
b3JOZXR3b3JrRmFpbHVyZSk7Cit9CisKK3ZvaWQgUXRGaWxlRG93bmxvYWRlcjo6b25FcnJvcihR
TmV0d29ya1JlcGx5OjpOZXR3b3JrRXJyb3IgY29kZSkKK3sKKyAgICBtX2Vycm9yID0gY29kZTsK
K30KKwordm9pZCBRdEZpbGVEb3dubG9hZGVyOjpjYW5jZWwoKQoreworICAgIG1fcmVwbHktPmFi
b3J0KCk7CisgICAgLy8gUXRGaWxlRG93bmxvYWRlcjo6b25GaW5pc2hlZCgpIHdpbGwgYmUgY2Fs
bGVkIGFuZCB3aWxsIHJhaXNlIGEgRG93bmxvYWRFcnJvckNhbmNlbGxlZC4KK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CisjaW5jbHVkZSAibW9jX1F0RmlsZURvd25sb2FkZXIuY3BwIgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL0Rvd25sb2Fkcy9xdC9RdEZpbGVEb3dubG9h
ZGVyLmggYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvRG93bmxvYWRzL3F0L1F0RmlsZURvd25sb2Fk
ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNjg4MDYzCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL0Rvd25sb2Fkcy9xdC9RdEZpbGVEb3du
bG9hZGVyLmgKQEAgLTAsMCArMSw4MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBOb2tp
YSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAqCisgKiBUaGlzIHBy
b2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgUXRG
aWxlRG93bmxvYWRlcl9oCisjZGVmaW5lIFF0RmlsZURvd25sb2FkZXJfaAorCisjaW5jbHVkZSA8
UU5ldHdvcmtSZXBseT4KKyNpbmNsdWRlIDxRTmV0d29ya1JlcXVlc3Q+CisjaW5jbHVkZSA8d3Rm
L093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisKK1FUX0JFR0lOX05BTUVT
UEFDRQorY2xhc3MgUUZpbGU7CitjbGFzcyBRTmV0d29ya0FjY2Vzc01hbmFnZXI7CitjbGFzcyBR
TmV0d29ya1JlcXVlc3Q7CitRVF9FTkRfTkFNRVNQQUNFCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
K2NsYXNzIFJlc291cmNlRXJyb3I7Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworY2xhc3MgRG93
bmxvYWQ7CisKK2NsYXNzIFF0RmlsZURvd25sb2FkZXIgOiBwdWJsaWMgUU9iamVjdCB7CisgICAg
UV9PQkpFQ1QKK3B1YmxpYzoKKyAgICBRdEZpbGVEb3dubG9hZGVyKERvd25sb2FkKiwgUGFzc093
blB0cjxRTmV0d29ya1JlcGx5Pik7CisgICAgdmlydHVhbCB+UXRGaWxlRG93bmxvYWRlcigpOwor
ICAgIHZvaWQgY2FuY2VsKCk7CisgICAgdm9pZCBpbml0KCk7CisgICAgdm9pZCBzdGFydFRyYW5z
ZmVyKGNvbnN0IFFTdHJpbmcmIGRlc3RpbmF0aW9uKTsKKworICAgIGVudW0gRG93bmxvYWRFcnJv
ciB7CisgICAgICAgIERvd25sb2FkRXJyb3JBYm9ydGVkID0gMCwKKyAgICAgICAgRG93bmxvYWRF
cnJvckNhbm5vdFdyaXRlVG9GaWxlLAorICAgICAgICBEb3dubG9hZEVycm9yQ2Fubm90T3BlbkZp
bGUsCisgICAgICAgIERvd25sb2FkRXJyb3JEZXN0aW5hdGlvbkFscmVhZHlFeGlzdHMsCisgICAg
ICAgIERvd25sb2FkRXJyb3JDYW5jZWxsZWQsCisgICAgICAgIERvd25sb2FkRXJyb3JDYW5ub3RE
ZXRlcm1pbmVGaWxlbmFtZSwKKyAgICAgICAgRG93bmxvYWRFcnJvck5ldHdvcmtGYWlsdXJlCisg
ICAgfTsKKworcHJpdmF0ZSBRX1NMT1RTOgorICAgIHZvaWQgb25SZWFkeVJlYWQoKTsKKyAgICB2
b2lkIG9uRmluaXNoZWQoKTsKKyAgICB2b2lkIG9uRXJyb3IoUU5ldHdvcmtSZXBseTo6TmV0d29y
a0Vycm9yKTsKKworcHJpdmF0ZToKKyAgICB2b2lkIGFib3J0RG93bmxvYWRXcml0aW5nQW5kRW1p
dEVycm9yKFF0RmlsZURvd25sb2FkZXI6OkRvd25sb2FkRXJyb3IpOworICAgIFFTdHJpbmcgZGV0
ZXJtaW5lRmlsZW5hbWUoKTsKKyAgICB2b2lkIGhhbmRsZURvd25sb2FkUmVzcG9uc2UoKTsKKwor
ICAgIERvd25sb2FkKiBtX2Rvd25sb2FkOworICAgIE93blB0cjxRTmV0d29ya1JlcGx5PiBtX3Jl
cGx5OworICAgIE93blB0cjxRRmlsZT4gbV9kZXN0aW5hdGlvbkZpbGU7CisgICAgUU5ldHdvcmtS
ZXBseTo6TmV0d29ya0Vycm9yIG1fZXJyb3I7CisgICAgYm9vbCBtX2hlYWRlcnNSZWFkOworfTsK
KworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvU2hhcmVkL0Rvd25sb2Fkcy9zb3VwL0Rvd25sb2FkU291cC5jcHAgYi9Tb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvRG93bmxvYWRzL3NvdXAvRG93bmxvYWRTb3VwLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMWUwYTQxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdDIvU2hhcmVkL0Rvd25sb2Fkcy9zb3VwL0Rvd25sb2FkU291cC5jcHAKQEAgLTAsMCAr
MSwyNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEwIEJyZW50IEZ1bGdoYW0gPGJm
dWxnaGFtQHdlYmtpdC5vcmc+CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJEb3dubG9hZC5oIgorCisjaW5jbHVkZSAiRGF0YVJlZmVyZW5jZS5oIgorI2luY2x1ZGUg
IkRvd25sb2FkU291cEVycm9ycy5oIgorI2luY2x1ZGUgPFdlYkNvcmUvTm90SW1wbGVtZW50ZWQu
aD4KKyNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlSGFuZGxlSW50ZXJuYWwuaD4KKyNpbmNsdWRl
IDxnaW8vZ2lvLmg+CisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR093blB0ci5oPgorI2luY2x1ZGUg
PHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisK
KyNpZiBQTEFURk9STShHVEspCisjaW5jbHVkZSA8Z2xpYi9naTE4bi1saWIuaD4KKyNlbmRpZgor
Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNz
IERvd25sb2FkQ2xpZW50IDogcHVibGljIFJlc291cmNlSGFuZGxlQ2xpZW50IHsKKyAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShEb3dubG9hZENsaWVudCk7CitwdWJsaWM6CisgICAgRG93bmxvYWRD
bGllbnQoRG93bmxvYWQqIGRvd25sb2FkKQorICAgICAgICA6IG1fZG93bmxvYWQoZG93bmxvYWQp
CisgICAgICAgICwgbV9oYW5kbGVSZXNwb25zZUxhdGVySUQoMCkKKyAgICB7CisgICAgfQorCisg
ICAgfkRvd25sb2FkQ2xpZW50KCkKKyAgICB7CisgICAgICAgIGlmIChtX2hhbmRsZVJlc3BvbnNl
TGF0ZXJJRCkKKyAgICAgICAgICAgIGdfc291cmNlX3JlbW92ZShtX2hhbmRsZVJlc3BvbnNlTGF0
ZXJJRCk7CisgICAgfQorCisgICAgdm9pZCBkb3dubG9hZEZhaWxlZChjb25zdCBSZXNvdXJjZUVy
cm9yJiBlcnJvcikKKyAgICB7CisgICAgICAgIG1fZG93bmxvYWQtPmRpZEZhaWwoZXJyb3IsIENv
cmVJUEM6OkRhdGFSZWZlcmVuY2UoKSk7CisgICAgfQorCisgICAgdm9pZCBkaWRSZWNlaXZlUmVz
cG9uc2UoUmVzb3VyY2VIYW5kbGUqLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkK
KyAgICB7CisgICAgICAgIG1fcmVzcG9uc2UgPSBhZG9wdEdSZWYocmVzcG9uc2UudG9Tb3VwTWVz
c2FnZSgpKTsKKyAgICAgICAgbV9kb3dubG9hZC0+ZGlkUmVjZWl2ZVJlc3BvbnNlKHJlc3BvbnNl
KTsKKworICAgICAgICBpZiAocmVzcG9uc2UuaHR0cFN0YXR1c0NvZGUoKSA+PSA0MDApIHsKKyAg
ICAgICAgICAgIGRvd25sb2FkRmFpbGVkKHBsYXRmb3JtRG93bmxvYWROZXR3b3JrRXJyb3IocmVz
cG9uc2UuaHR0cFN0YXR1c0NvZGUoKSwgcmVzcG9uc2UudXJsKCkuc3RyaW5nKCksIHJlc3BvbnNl
Lmh0dHBTdGF0dXNUZXh0KCkpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisg
ICAgICAgIFN0cmluZyBzdWdnZXN0ZWRGaWxlbmFtZSA9IHJlc3BvbnNlLnN1Z2dlc3RlZEZpbGVu
YW1lKCk7CisgICAgICAgIGlmIChzdWdnZXN0ZWRGaWxlbmFtZS5pc0VtcHR5KCkpIHsKKyAgICAg
ICAgICAgIEtVUkwgdXJsID0gcmVzcG9uc2UudXJsKCk7CisgICAgICAgICAgICB1cmwuc2V0UXVl
cnkoU3RyaW5nKCkpOworICAgICAgICAgICAgdXJsLnJlbW92ZUZyYWdtZW50SWRlbnRpZmllcigp
OworICAgICAgICAgICAgc3VnZ2VzdGVkRmlsZW5hbWUgPSBkZWNvZGVVUkxFc2NhcGVTZXF1ZW5j
ZXModXJsLmxhc3RQYXRoQ29tcG9uZW50KCkpOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBv
dmVyd3JpdGU7CisgICAgICAgIFN0cmluZyBkZXN0aW5hdGlvblVSSSA9IG1fZG93bmxvYWQtPmRl
Y2lkZURlc3RpbmF0aW9uV2l0aFN1Z2dlc3RlZEZpbGVuYW1lKHN1Z2dlc3RlZEZpbGVuYW1lLCBv
dmVyd3JpdGUpOworICAgICAgICBpZiAoZGVzdGluYXRpb25VUkkuaXNFbXB0eSgpKSB7CisjaWYg
UExBVEZPUk0oR1RLKQorICAgICAgICAgICAgR093blB0cjxjaGFyPiBidWZmZXIoZ19zdHJkdXBf
cHJpbnRmKF8oIkNhbm5vdCBkZXRlcm1pbmUgZGVzdGluYXRpb24gVVJJIGZvciBkb3dubG9hZCB3
aXRoIHN1Z2dlc3RlZCBmaWxlbmFtZSAlcyIpLCBzdWdnZXN0ZWRGaWxlbmFtZS51dGY4KCkuZGF0
YSgpKSk7CisgICAgICAgICAgICBTdHJpbmcgZXJyb3JNZXNzYWdlID0gU3RyaW5nOjpmcm9tVVRG
OChidWZmZXIuZ2V0KCkpOworI2Vsc2UKKyAgICAgICAgICAgIFN0cmluZyBlcnJvck1lc3NhZ2Ug
PSBtYWtlU3RyaW5nKCJDYW5ub3QgZGV0ZXJtaW5lIGRlc3RpbmF0aW9uIFVSSSBmb3IgZG93bmxv
YWQgd2l0aCBzdWdnZXN0ZWQgZmlsZW5hbWUgIiwgc3VnZ2VzdGVkRmlsZW5hbWUpOworI2VuZGlm
CisgICAgICAgICAgICBkb3dubG9hZEZhaWxlZChwbGF0Zm9ybURvd25sb2FkRGVzdGluYXRpb25F
cnJvcihyZXNwb25zZSwgZXJyb3JNZXNzYWdlKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKworICAgICAgICBHUmVmUHRyPEdGaWxlPiBmaWxlID0gYWRvcHRHUmVmKGdfZmlsZV9u
ZXdfZm9yX3VyaShkZXN0aW5hdGlvblVSSS51dGY4KCkuZGF0YSgpKSk7CisgICAgICAgIEdPd25Q
dHI8R0Vycm9yPiBlcnJvcjsKKyAgICAgICAgbV9vdXRwdXRTdHJlYW0gPSBhZG9wdEdSZWYoZ19m
aWxlX3JlcGxhY2UoZmlsZS5nZXQoKSwgMCwgVFJVRSwgR19GSUxFX0NSRUFURV9OT05FLCAwLCAm
ZXJyb3Iub3V0UHRyKCkpKTsKKyAgICAgICAgaWYgKCFtX291dHB1dFN0cmVhbSkgeworICAgICAg
ICAgICAgZG93bmxvYWRGYWlsZWQocGxhdGZvcm1Eb3dubG9hZERlc3RpbmF0aW9uRXJyb3IocmVz
cG9uc2UsIGVycm9yLT5tZXNzYWdlKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KworICAgICAgICBHUmVmUHRyPEdGaWxlSW5mbz4gaW5mbyA9IGFkb3B0R1JlZihnX2ZpbGVfaW5m
b19uZXcoKSk7CisgICAgICAgIGdfZmlsZV9pbmZvX3NldF9hdHRyaWJ1dGVfc3RyaW5nKGluZm8u
Z2V0KCksICJtZXRhZGF0YTo6ZG93bmxvYWQtdXJpIiwgcmVzcG9uc2UudXJsKCkuc3RyaW5nKCku
dXRmOCgpLmRhdGEoKSk7CisgICAgICAgIGdfZmlsZV9zZXRfYXR0cmlidXRlc19hc3luYyhmaWxl
LmdldCgpLCBpbmZvLmdldCgpLCBHX0ZJTEVfUVVFUllfSU5GT19OT05FLCBHX1BSSU9SSVRZX0RF
RkFVTFQsIDAsIDAsIDApOworCisgICAgICAgIG1fZG93bmxvYWQtPmRpZENyZWF0ZURlc3RpbmF0
aW9uKGRlc3RpbmF0aW9uVVJJKTsKKyAgICB9CisKKyAgICB2b2lkIGRpZFJlY2VpdmVEYXRhKFJl
c291cmNlSGFuZGxlKiwgY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0aCwgaW50IC8qZW5jb2Rl
ZERhdGFMZW5ndGgqLykKKyAgICB7CisgICAgICAgIGlmIChtX2hhbmRsZVJlc3BvbnNlTGF0ZXJJ
RCkgeworICAgICAgICAgICAgZ19zb3VyY2VfcmVtb3ZlKG1faGFuZGxlUmVzcG9uc2VMYXRlcklE
KTsKKyAgICAgICAgICAgIGhhbmRsZVJlc3BvbnNlKCk7CisgICAgICAgIH0KKworICAgICAgICBn
c2l6ZSBieXRlc1dyaXR0ZW47CisgICAgICAgIEdPd25QdHI8R0Vycm9yPiBlcnJvcjsKKyAgICAg
ICAgZ19vdXRwdXRfc3RyZWFtX3dyaXRlX2FsbChHX09VVFBVVF9TVFJFQU0obV9vdXRwdXRTdHJl
YW0uZ2V0KCkpLCBkYXRhLCBsZW5ndGgsICZieXRlc1dyaXR0ZW4sIDAsICZlcnJvci5vdXRQdHIo
KSk7CisgICAgICAgIGlmIChlcnJvcikgeworICAgICAgICAgICAgZG93bmxvYWRGYWlsZWQocGxh
dGZvcm1Eb3dubG9hZERlc3RpbmF0aW9uRXJyb3IoUmVzb3VyY2VSZXNwb25zZShtX3Jlc3BvbnNl
LmdldCgpKSwgZXJyb3ItPm1lc3NhZ2UpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorICAgICAgICBtX2Rvd25sb2FkLT5kaWRSZWNlaXZlRGF0YShieXRlc1dyaXR0ZW4pOworICAg
IH0KKworICAgIHZvaWQgZGlkRmluaXNoTG9hZGluZyhSZXNvdXJjZUhhbmRsZSosIGRvdWJsZSkK
KyAgICB7CisgICAgICAgIG1fb3V0cHV0U3RyZWFtID0gMDsKKyAgICAgICAgbV9kb3dubG9hZC0+
ZGlkRmluaXNoKCk7CisgICAgfQorCisgICAgdm9pZCBkaWRGYWlsKFJlc291cmNlSGFuZGxlKiwg
Y29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3IpCisgICAgeworICAgICAgICBkb3dubG9hZEZhaWxl
ZChwbGF0Zm9ybURvd25sb2FkTmV0d29ya0Vycm9yKGVycm9yLmVycm9yQ29kZSgpLCBlcnJvci5m
YWlsaW5nVVJMKCksIGVycm9yLmxvY2FsaXplZERlc2NyaXB0aW9uKCkpKTsKKyAgICB9CisKKyAg
ICB2b2lkIHdhc0Jsb2NrZWQoUmVzb3VyY2VIYW5kbGUqKQorICAgIHsKKyAgICAgICAgbm90SW1w
bGVtZW50ZWQoKTsKKyAgICB9CisKKyAgICB2b2lkIGNhbm5vdFNob3dVUkwoUmVzb3VyY2VIYW5k
bGUqKQorICAgIHsKKyAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICB9CisKKyAgICB2b2lk
IGhhbmRsZVJlc3BvbnNlKCkKKyAgICB7CisgICAgICAgIG1faGFuZGxlUmVzcG9uc2VMYXRlcklE
ID0gMDsKKyAgICAgICAgZGlkUmVjZWl2ZVJlc3BvbnNlKDAsIG1fZGVsYXllZFJlc3BvbnNlKTsK
KyAgICB9CisKKyAgICBzdGF0aWMgZ2Jvb2xlYW4gaGFuZGxlUmVzcG9uc2VMYXRlckNhbGxiYWNr
KERvd25sb2FkQ2xpZW50KiBkb3dubG9hZENsaWVudCkKKyAgICB7CisgICAgICAgIGRvd25sb2Fk
Q2xpZW50LT5oYW5kbGVSZXNwb25zZSgpOworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQor
CisgICAgdm9pZCBoYW5kbGVSZXNwb25zZUxhdGVyKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJl
c3BvbnNlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKCFtX3Jlc3BvbnNlKTsKKyAgICAgICAgQVNT
RVJUKCFtX2hhbmRsZVJlc3BvbnNlTGF0ZXJJRCk7CisKKyAgICAgICAgbV9kZWxheWVkUmVzcG9u
c2UgPSByZXNwb25zZTsKKworICAgICAgICAvLyBDYWxsIGRpZFJlY2VpdmVSZXNwb25zZSBpbiBh
biBpZGxlIHRvIG1ha2Ugc3VyZSB0aGUgZG93bmxvYWQgaXMgYWRkZWQKKyAgICAgICAgLy8gdG8g
dGhlIERvd25sb2FkTWFuYWdlciBkb3dubG9hZHMgbWFwLgorICAgICAgICBtX2hhbmRsZVJlc3Bv
bnNlTGF0ZXJJRCA9IGdfaWRsZV9hZGRfZnVsbChHX1BSSU9SSVRZX0RFRkFVTFQsIHJlaW50ZXJw
cmV0X2Nhc3Q8R1NvdXJjZUZ1bmM+KGhhbmRsZVJlc3BvbnNlTGF0ZXJDYWxsYmFjayksIHRoaXMs
IDApOworICAgIH0KKworICAgIERvd25sb2FkKiBtX2Rvd25sb2FkOworICAgIEdSZWZQdHI8R0Zp
bGVPdXRwdXRTdHJlYW0+IG1fb3V0cHV0U3RyZWFtOworICAgIEdSZWZQdHI8U291cE1lc3NhZ2U+
IG1fcmVzcG9uc2U7CisgICAgUmVzb3VyY2VSZXNwb25zZSBtX2RlbGF5ZWRSZXNwb25zZTsKKyAg
ICB1bnNpZ25lZCBtX2hhbmRsZVJlc3BvbnNlTGF0ZXJJRDsKK307CisKK3ZvaWQgRG93bmxvYWQ6
OnN0YXJ0KCkKK3sKKyAgICBBU1NFUlQoIW1fZG93bmxvYWRDbGllbnQpOworICAgIEFTU0VSVCgh
bV9yZXNvdXJjZUhhbmRsZSk7CisgICAgbV9kb3dubG9hZENsaWVudCA9IGFkb3B0UHRyKG5ldyBE
b3dubG9hZENsaWVudCh0aGlzKSk7CisgICAgbV9yZXNvdXJjZUhhbmRsZSA9IFJlc291cmNlSGFu
ZGxlOjpjcmVhdGUoMCwgbV9yZXF1ZXN0LCBtX2Rvd25sb2FkQ2xpZW50LmdldCgpLCBmYWxzZSwg
ZmFsc2UpOworICAgIGRpZFN0YXJ0KCk7Cit9CisKK3ZvaWQgRG93bmxvYWQ6OnN0YXJ0V2l0aEhh
bmRsZShSZXNvdXJjZUhhbmRsZSogcmVzb3VyY2VIYW5kbGUsIGNvbnN0IFJlc291cmNlUmVzcG9u
c2UmIHJlc3BvbnNlKQoreworICAgIEFTU0VSVCghbV9kb3dubG9hZENsaWVudCk7CisgICAgQVNT
RVJUKCFtX3Jlc291cmNlSGFuZGxlKTsKKyAgICBtX2Rvd25sb2FkQ2xpZW50ID0gYWRvcHRQdHIo
bmV3IERvd25sb2FkQ2xpZW50KHRoaXMpKTsKKyAgICByZXNvdXJjZUhhbmRsZS0+c2V0Q2xpZW50
KG1fZG93bmxvYWRDbGllbnQuZ2V0KCkpOworICAgIG1fcmVzb3VyY2VIYW5kbGUgPSByZXNvdXJj
ZUhhbmRsZTsKKyAgICBkaWRTdGFydCgpOworICAgIHN0YXRpY19jYXN0PERvd25sb2FkQ2xpZW50
Kj4obV9kb3dubG9hZENsaWVudC5nZXQoKSktPmhhbmRsZVJlc3BvbnNlTGF0ZXIocmVzcG9uc2Up
OworfQorCit2b2lkIERvd25sb2FkOjpjYW5jZWwoKQoreworICAgIGlmICghbV9yZXNvdXJjZUhh
bmRsZSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fcmVzb3VyY2VIYW5kbGUtPmNhbmNlbCgpOwor
ICAgIGRpZENhbmNlbChDb3JlSVBDOjpEYXRhUmVmZXJlbmNlKCkpOworICAgIG1fcmVzb3VyY2VI
YW5kbGUgPSAwOworfQorCit2b2lkIERvd25sb2FkOjpwbGF0Zm9ybUludmFsaWRhdGUoKQorewor
ICAgIGlmIChtX3Jlc291cmNlSGFuZGxlKSB7CisgICAgICAgIG1fcmVzb3VyY2VIYW5kbGUtPnNl
dENsaWVudCgwKTsKKyAgICAgICAgbV9yZXNvdXJjZUhhbmRsZS0+Y2FuY2VsKCk7CisgICAgICAg
IG1fcmVzb3VyY2VIYW5kbGUgPSAwOworICAgIH0KKyAgICBtX2Rvd25sb2FkQ2xpZW50LnJlbGVh
c2UoKTsKK30KKwordm9pZCBEb3dubG9hZDo6ZGlkRGVjaWRlRGVzdGluYXRpb24oY29uc3QgU3Ry
aW5nJiAvKmRlc3RpbmF0aW9uKi8sIGJvb2wgLyphbGxvd092ZXJ3cml0ZSovKQoreworICAgIG5v
dEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgRG93bmxvYWQ6OnBsYXRmb3JtRGlkRmluaXNoKCkK
K3sKKyAgICBtX3Jlc291cmNlSGFuZGxlID0gMDsKK30KKwordm9pZCBEb3dubG9hZDo6cmVjZWl2
ZWRDcmVkZW50aWFsKGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiwgY29uc3QgQ3JlZGVu
dGlhbCYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBEb3dubG9hZDo6cmVj
ZWl2ZWRSZXF1ZXN0VG9Db250aW51ZVdpdGhvdXRDcmVkZW50aWFsKGNvbnN0IEF1dGhlbnRpY2F0
aW9uQ2hhbGxlbmdlJikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIERvd25s
b2FkOjpyZWNlaXZlZENhbmNlbGxhdGlvbihjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYp
Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBEb3dubG9hZDo6Y29udGludWVX
aXRob3V0Q3JlZGVudGlhbChjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSAmKQoreworICAg
IG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgRG93bmxvYWQ6OnVzZUNyZWRlbnRpYWwoY29u
c3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmLCBjb25zdCBDcmVkZW50aWFsJikKK3sKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIERvd25sb2FkOjpjYW5jZWxBdXRoZW50aWNhdGlv
bkNoYWxsZW5nZShjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYpCit7CisgICAgbm90SW1w
bGVtZW50ZWQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvRG93bmxvYWRzL3NvdXAvRG93bmxvYWRTb3VwRXJyb3JzLmggYi9T
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvRG93bmxvYWRzL3NvdXAvRG93bmxvYWRTb3VwRXJyb3JzLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODllMjNlMAotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Eb3dubG9hZHMvc291cC9Eb3dubG9hZFNvdXBF
cnJvcnMuaApAQCAtMCwwICsxLDM5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEludGVs
IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIERv
d25sb2FkU291cEVycm9yc19oCisjZGVmaW5lIERvd25sb2FkU291cEVycm9yc19oCisKKyNpbmNs
dWRlIDxXZWJDb3JlL1Jlc291cmNlSGFuZGxlLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJDb3JlOjpSZXNvdXJjZUVycm9yIHBs
YXRmb3JtRG93bmxvYWROZXR3b3JrRXJyb3IoaW50IGVycm9yQ29kZSwgY29uc3QgU3RyaW5nJiBm
YWlsaW5nVVJMLCBjb25zdCBTdHJpbmcmIGxvY2FsaXplZERlc2NyaXB0aW9uKTsKK1dlYkNvcmU6
OlJlc291cmNlRXJyb3IgcGxhdGZvcm1Eb3dubG9hZERlc3RpbmF0aW9uRXJyb3IoY29uc3QgV2Vi
Q29yZTo6UmVzb3VyY2VSZXNwb25zZSYsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSk7CisKK30gLy8g
bmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRG93bmxvYWRTb3VwRXJyb3JzX2gKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1RhcmdldC5wcmkgYi9Tb3VyY2UvV2ViS2l0Mi9UYXJnZXQu
cHJpCmluZGV4IDMxNDEyMTIuLjU0OTFhMDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1Rh
cmdldC5wcmkKKysrIGIvU291cmNlL1dlYktpdDIvVGFyZ2V0LnByaQpAQCAtNzAsMTIgKzcwLDE2
IEBAIEhFQURFUlMgKz0gXAogICAgIFNoYXJlZC9BUEkvYy9XS1VzZXJDb250ZW50VVJMUGF0dGVy
bi5oIFwKICAgICBTaGFyZWQvQVBJL2MvcXQvV0tJbWFnZVF0LmggXAogICAgIFNoYXJlZC9BUElD
bGllbnRUcmFpdHMuaCBcCisgICAgU2hhcmVkL0F1dGhlbnRpY2F0aW9uL0F1dGhlbnRpY2F0aW9u
TWFuYWdlci5oIFwKICAgICBTaGFyZWQvU2hhcmVhYmxlQml0bWFwLmggXAogICAgIFNoYXJlZC9D
YWNoZU1vZGVsLmggXAogICAgIFNoYXJlZC9DaGlsZFByb2Nlc3MuaCBcCiAgICAgU2hhcmVkL0No
aWxkUHJvY2Vzc1Byb3h5LmggXAogICAgIFNoYXJlZC9Db25uZWN0aW9uU3RhY2suaCBcCiAgICAg
U2hhcmVkL0RpY3Rpb25hcnlQb3B1cEluZm8uaCBcCisgICAgU2hhcmVkL0Rvd25sb2Fkcy9Eb3du
bG9hZC5oIFwKKyAgICBTaGFyZWQvRG93bmxvYWRzL0Rvd25sb2FkTWFuYWdlci5oIFwKKyAgICBT
aGFyZWQvRG93bmxvYWRzL3F0L1F0RmlsZURvd25sb2FkZXIuaCBcCiAgICAgU2hhcmVkL0VkaXRv
clN0YXRlLmggXAogICAgIFNoYXJlZC9Gb250SW5mby5oIFwKICAgICBTaGFyZWQvSW1hZ2VPcHRp
b25zLmggXApAQCAtMjkwLDEyICsyOTQsOCBAQCBIRUFERVJTICs9IFwKICAgICBVSVByb2Nlc3Mv
V2ViVmlicmF0aW9uUHJvdmlkZXIuaCBcCiAgICAgVUlQcm9jZXNzL1dlYlZpYnJhdGlvblByb3h5
LmggXAogICAgIFdlYlByb2Nlc3MvQXBwbGljYXRpb25DYWNoZS9XZWJBcHBsaWNhdGlvbkNhY2hl
TWFuYWdlci5oIFwKLSAgICBXZWJQcm9jZXNzL0F1dGhlbnRpY2F0aW9uL0F1dGhlbnRpY2F0aW9u
TWFuYWdlci5oIFwKICAgICBXZWJQcm9jZXNzL0JhdHRlcnkvV2ViQmF0dGVyeU1hbmFnZXIuaCBc
CiAgICAgV2ViUHJvY2Vzcy9Db29raWVzL1dlYkNvb2tpZU1hbmFnZXIuaCBcCi0gICAgV2ViUHJv
Y2Vzcy9Eb3dubG9hZHMvRG93bmxvYWQuaCBcCi0gICAgV2ViUHJvY2Vzcy9Eb3dubG9hZHMvRG93
bmxvYWRNYW5hZ2VyLmggXAotICAgIFdlYlByb2Nlc3MvRG93bmxvYWRzL3F0L1F0RmlsZURvd25s
b2FkZXIuaCBcCiAgICAgV2ViUHJvY2Vzcy9GdWxsU2NyZWVuL1dlYkZ1bGxTY3JlZW5NYW5hZ2Vy
LmggXAogICAgIFdlYlByb2Nlc3MvR2VvbG9jYXRpb24vR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVx
dWVzdE1hbmFnZXIuaCBcCiAgICAgV2ViUHJvY2Vzcy9HZW9sb2NhdGlvbi9XZWJHZW9sb2NhdGlv
bk1hbmFnZXIuaCBcCkBAIC00NDQsNiArNDQ0LDcgQEAgU09VUkNFUyArPSBcCiAgICAgU2hhcmVk
L0FQSS9jL3F0L1dLSW1hZ2VRdC5jcHAgXAogICAgIFNoYXJlZC9BUElDbGllbnRUcmFpdHMuY3Bw
IFwKICAgICBTaGFyZWQvQVBJT2JqZWN0LmNwcCBcCisgICAgU2hhcmVkL0F1dGhlbnRpY2F0aW9u
L0F1dGhlbnRpY2F0aW9uTWFuYWdlci5jcHAgXAogICAgIFNoYXJlZC9QbHVnaW5zL05ldHNjYXBl
L05ldHNjYXBlUGx1Z2luTW9kdWxlLmNwcCBcCiAgICAgU2hhcmVkL1BsdWdpbnMvTmV0c2NhcGUv
TmV0c2NhcGVQbHVnaW5Nb2R1bGVOb25lLmNwcCBcCiAgICAgU2hhcmVkL1BsdWdpbnMvTmV0c2Nh
cGUveDExL05ldHNjYXBlUGx1Z2luTW9kdWxlWDExLmNwcCBcCkBAIC00NjAsNiArNDYxLDEwIEBA
IFNPVVJDRVMgKz0gXAogICAgIFNoYXJlZC9DaGlsZFByb2Nlc3NQcm94eS5jcHAgXAogICAgIFNo
YXJlZC9Db25uZWN0aW9uU3RhY2suY3BwIFwKICAgICBTaGFyZWQvRGljdGlvbmFyeVBvcHVwSW5m
by5jcHAgXAorICAgIFNoYXJlZC9Eb3dubG9hZHMvRG93bmxvYWQuY3BwIFwKKyAgICBTaGFyZWQv
RG93bmxvYWRzL0Rvd25sb2FkTWFuYWdlci5jcHAgXAorICAgIFNoYXJlZC9Eb3dubG9hZHMvcXQv
RG93bmxvYWRRdC5jcHAgXAorICAgIFNoYXJlZC9Eb3dubG9hZHMvcXQvUXRGaWxlRG93bmxvYWRl
ci5jcHAgXAogICAgIFNoYXJlZC9FZGl0b3JTdGF0ZS5jcHAgXAogICAgIFNoYXJlZC9Gb250SW5m
by5jcHAgXAogICAgIFNoYXJlZC9JbW11dGFibGVBcnJheS5jcHAgXApAQCAtNjYyLDE0ICs2Njcs
OSBAQCBTT1VSQ0VTICs9IFwKICAgICBVSVByb2Nlc3MvcXQvV2ViUHJlZmVyZW5jZXNRdC5jcHAg
XAogICAgIFVJUHJvY2Vzcy9xdC9XZWJQcm9jZXNzUHJveHlRdC5jcHAgXAogICAgIFdlYlByb2Nl
c3MvQXBwbGljYXRpb25DYWNoZS9XZWJBcHBsaWNhdGlvbkNhY2hlTWFuYWdlci5jcHAgXAotICAg
IFdlYlByb2Nlc3MvQXV0aGVudGljYXRpb24vQXV0aGVudGljYXRpb25NYW5hZ2VyLmNwcCBcCiAg
ICAgV2ViUHJvY2Vzcy9CYXR0ZXJ5L1dlYkJhdHRlcnlNYW5hZ2VyLmNwcCBcCiAgICAgV2ViUHJv
Y2Vzcy9Db29raWVzL1dlYkNvb2tpZU1hbmFnZXIuY3BwIFwKICAgICBXZWJQcm9jZXNzL0Nvb2tp
ZXMvcXQvV2ViQ29va2llTWFuYWdlclF0LmNwcCBcCi0gICAgV2ViUHJvY2Vzcy9Eb3dubG9hZHMv
RG93bmxvYWQuY3BwIFwKLSAgICBXZWJQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZE1hbmFnZXIu
Y3BwIFwKLSAgICBXZWJQcm9jZXNzL0Rvd25sb2Fkcy9xdC9Eb3dubG9hZFF0LmNwcCBcCi0gICAg
V2ViUHJvY2Vzcy9Eb3dubG9hZHMvcXQvUXRGaWxlRG93bmxvYWRlci5jcHAgXAogICAgIFdlYlBy
b2Nlc3MvRnVsbFNjcmVlbi9XZWJGdWxsU2NyZWVuTWFuYWdlci5jcHAgXAogICAgIFdlYlByb2Nl
c3MvR2VvbG9jYXRpb24vR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXIuY3BwIFwK
ICAgICBXZWJQcm9jZXNzL0dlb2xvY2F0aW9uL1dlYkdlb2xvY2F0aW9uTWFuYWdlci5jcHAgXApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qIGIvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmlu
ZGV4IDBlODUwN2EuLjllYmE1NjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTEzOSwxMSArMTM5LDYgQEAKIAkJMUE1OTRBQkEx
MTJBMUZCNjAwOURFN0M3IC8qIFdlYlVJQ2xpZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBNTk0QUI4MTEyQTFGQjYwMDlERTdDNyAvKiBXZWJV
SUNsaWVudC5jcHAgKi87IH07CiAJCTFBNTk0QUJCMTEyQTFGQjYwMDlERTdDNyAvKiBXZWJVSUNs
aWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE1
OTRBQjkxMTJBMUZCNjAwOURFN0M3IC8qIFdlYlVJQ2xpZW50LmggKi87IH07CiAJCTFBNUU0REE0
MTJEM0JEM0QwMDk5QTJCQiAvKiBUZXh0Q2hlY2tlclN0YXRlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTVFNERBMzEyRDNCRDNEMDA5OUEyQkIgLyog
VGV4dENoZWNrZXJTdGF0ZS5oICovOyB9OwotCQkxQTYxNjE0RjEyNzc5OEI1MDAzQUNEODYgLyog
RG93bmxvYWRNYW5hZ2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDFBNjE2MTREMTI3Nzk4QjUwMDNBQ0Q4NiAvKiBEb3dubG9hZE1hbmFnZXIuY3Bw
ICovOyB9OwotCQkxQTYxNjE1MDEyNzc5OEI1MDAzQUNEODYgLyogRG93bmxvYWRNYW5hZ2VyLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTYxNjE0RTEy
Nzc5OEI1MDAzQUNEODYgLyogRG93bmxvYWRNYW5hZ2VyLmggKi87IH07Ci0JCTFBNjE2MUQ0MTI3
ODk4MUMwMDNBQ0Q4NiAvKiBEb3dubG9hZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMUE2MTYxRDIxMjc4OTgxQzAwM0FDRDg2IC8qIERvd25sb2FkLmgg
Ki87IH07Ci0JCTFBNjE2MUQ1MTI3ODk4MUMwMDNBQ0Q4NiAvKiBEb3dubG9hZC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTYxNjFEMzEyNzg5ODFD
MDAzQUNEODYgLyogRG93bmxvYWQuY3BwICovOyB9OwotCQkxQTYxNjM5NjEyNzg5QjJGMDAzQUNE
ODYgLyogRG93bmxvYWRNYWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAxQTYxNjM5NTEyNzg5QjJGMDAzQUNEODYgLyogRG93bmxvYWRNYWMubW0gKi87
IH07CiAJCTFBNjQyMEU0MTJEQ0UyRkYwMENBQUUyQyAvKiBTaGFyZWFibGVCaXRtYXAuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE2NDIwRTIxMkRD
RTJGRjAwQ0FBRTJDIC8qIFNoYXJlYWJsZUJpdG1hcC5jcHAgKi87IH07CiAJCTFBNjQyMEU1MTJE
Q0UyRkYwMENBQUUyQyAvKiBTaGFyZWFibGVCaXRtYXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBNjQyMEUzMTJEQ0UyRkYwMENBQUUyQyAvKiBTaGFy
ZWFibGVCaXRtYXAuaCAqLzsgfTsKIAkJMUE2NDIxODYxMkRDRjQ5MjAwQ0FBRTJDIC8qIERyYXdp
bmdBcmVhUHJveHlJbXBsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAxQTY0MjE4NDEyRENGNDkyMDBDQUFFMkMgLyogRHJhd2luZ0FyZWFQcm94eUltcGwu
aCAqLzsgfTsKQEAgLTQyMyw4ICs0MTgsNiBAQAogCQk1MTJFMzU2QjEzMEI1N0YwMDBBQkQxOUEg
LyogV2ViQXBwbGljYXRpb25DYWNoZU1hbmFnZXJNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTEyRTM1NjkxMzBCNTdGMDAwQUJEMTlBIC8q
IFdlYkFwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyTWVzc2FnZXMuaCAqLzsgfTsKIAkJNTEyRTM1Rjgx
MzBCNjQyRTAwQUJEMTlBIC8qIFdlYkFwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyUHJveHlNZXNzYWdl
UmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTEyRTM1RjYxMzBCNjQyRTAwQUJEMTlBIC8qIFdlYkFwcGxpY2F0aW9uQ2FjaGVNYW5hZ2Vy
UHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwICovOyB9OwogCQk1MTJFMzVGOTEzMEI2NDJFMDBBQkQx
OUEgLyogV2ViQXBwbGljYXRpb25DYWNoZU1hbmFnZXJQcm94eU1lc3NhZ2VzLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTJFMzVGNzEzMEI2NDJFMDBB
QkQxOUEgLyogV2ViQXBwbGljYXRpb25DYWNoZU1hbmFnZXJQcm94eU1lc3NhZ2VzLmggKi87IH07
Ci0JCTUxMkY1ODhBMTJBODgzNjYwMDYyOTUzMCAvKiBBdXRoZW50aWNhdGlvbk1hbmFnZXIuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTEyRjU4ODcx
MkE4ODM2NjAwNjI5NTMwIC8qIEF1dGhlbnRpY2F0aW9uTWFuYWdlci5jcHAgKi87IH07Ci0JCTUx
MkY1ODhCMTJBODgzNjYwMDYyOTUzMCAvKiBBdXRoZW50aWNhdGlvbk1hbmFnZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxMkY1ODg4MTJBODgzNjYw
MDYyOTUzMCAvKiBBdXRoZW50aWNhdGlvbk1hbmFnZXIuaCAqLzsgfTsKIAkJNTEyRjU4OTYxMkE4
ODM4ODAwNjI5NTMwIC8qIEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUHJveHkuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTEyRjU4OEUxMkE4ODM4ODAw
NjI5NTMwIC8qIEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUHJveHkuY3BwICovOyB9OwogCQk1MTJG
NTg5NzEyQTg4Mzg4MDA2Mjk1MzAgLyogQXV0aGVudGljYXRpb25DaGFsbGVuZ2VQcm94eS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTEyRjU4OEYxMkE4
ODM4ODAwNjI5NTMwIC8qIEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUHJveHkuaCAqLzsgfTsKIAkJ
NTEyRjU4OTgxMkE4ODM4ODAwNjI5NTMwIC8qIEF1dGhlbnRpY2F0aW9uRGVjaXNpb25MaXN0ZW5l
ci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTJG
NTg5MDEyQTg4Mzg4MDA2Mjk1MzAgLyogQXV0aGVudGljYXRpb25EZWNpc2lvbkxpc3RlbmVyLmNw
cCAqLzsgfTsKQEAgLTQ4Niw2ICs0NzksMTYgQEAKIAkJNTE4RDJDQUUxMkQ1MTUzQjAwM0JCOTNC
IC8qIFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDUxOEQyQ0FDMTJENTE1M0IwMDNCQjkzQiAvKiBXZWJCYWNrRm9y
d2FyZExpc3RJdGVtLmggKi87IH07CiAJCTUxOEQyQ0NBMTJENTFERkIwMDNCQjkzQiAvKiBTZXNz
aW9uU3RhdGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTE4RDJDQzgxMkQ1MURGQjAwM0JCOTNCIC8qIFNlc3Npb25TdGF0ZS5jcHAgKi87IH07CiAJ
CTUxOEQyQ0NCMTJENTFERkIwMDNCQjkzQiAvKiBTZXNzaW9uU3RhdGUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxOEQyQ0M5MTJENTFERkIwMDNCQjkz
QiAvKiBTZXNzaW9uU3RhdGUuaCAqLzsgfTsKKwkJNTE4RThFRjgxNkIyMDkxQzAwRTkxNDI5IC8q
IEF1dGhlbnRpY2F0aW9uTWFuYWdlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1MThFOEVGMzE2QjIwOTFDMDBFOTE0MjkgLyogQXV0aGVudGljYXRp
b25NYW5hZ2VyLmNwcCAqLzsgfTsKKwkJNTE4RThFRjkxNkIyMDkxQzAwRTkxNDI5IC8qIEF1dGhl
bnRpY2F0aW9uTWFuYWdlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNTE4RThFRjQxNkIyMDkxQzAwRTkxNDI5IC8qIEF1dGhlbnRpY2F0aW9uTWFuYWdl
ci5oICovOyB9OworCQk1MThFOEVGQjE2QjIwOTFDMDBFOTE0MjkgLyogQXV0aGVudGljYXRpb25N
YW5hZ2VyLm1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDUxOEU4RUY3MTZCMjA5MUMwMEU5MTQyOSAvKiBBdXRoZW50aWNhdGlvbk1hbmFnZXIubWFj
Lm1tICovOyB9OworCQk1MThFOEYwNzE2QjIwOTM3MDBFOTE0MjkgLyogRG93bmxvYWQuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE4RThFRkUxNkIy
MDkzNzAwRTkxNDI5IC8qIERvd25sb2FkLmNwcCAqLzsgfTsKKwkJNTE4RThGMDgxNkIyMDkzNzAw
RTkxNDI5IC8qIERvd25sb2FkLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1MThFOEVGRjE2QjIwOTM3MDBFOTE0MjkgLyogRG93bmxvYWQuaCAqLzsgfTsK
KwkJNTE4RThGMDkxNkIyMDkzNzAwRTkxNDI5IC8qIERvd25sb2FkQXV0aGVudGljYXRpb25DbGll
bnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE4
RThGMDAxNkIyMDkzNzAwRTkxNDI5IC8qIERvd25sb2FkQXV0aGVudGljYXRpb25DbGllbnQuY3Bw
ICovOyB9OworCQk1MThFOEYwQTE2QjIwOTM3MDBFOTE0MjkgLyogRG93bmxvYWRBdXRoZW50aWNh
dGlvbkNsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTE4RThGMDExNkIyMDkzNzAwRTkxNDI5IC8qIERvd25sb2FkQXV0aGVudGljYXRpb25DbGll
bnQuaCAqLzsgfTsKKwkJNTE4RThGMEIxNkIyMDkzNzAwRTkxNDI5IC8qIERvd25sb2FkTWFuYWdl
ci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MThF
OEYwMjE2QjIwOTM3MDBFOTE0MjkgLyogRG93bmxvYWRNYW5hZ2VyLmNwcCAqLzsgfTsKKwkJNTE4
RThGMEMxNkIyMDkzNzAwRTkxNDI5IC8qIERvd25sb2FkTWFuYWdlci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE4RThGMDMxNkIyMDkzNzAwRTkxNDI5
IC8qIERvd25sb2FkTWFuYWdlci5oICovOyB9OworCQk1MThFOEYwRDE2QjIwOTM3MDBFOTE0Mjkg
LyogRG93bmxvYWRNYWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1MThFOEYwNTE2QjIwOTM3MDBFOTE0MjkgLyogRG93bmxvYWRNYWMubW0gKi87IH07
CiAJCTUxOUI0RkY0MTZBOUVBOTcwMDY2ODc0RCAvKiBTY2hlZHVsYWJsZUxvYWRlci5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTlCNEZGMjE2QTlF
QTk3MDA2Njg3NEQgLyogU2NoZWR1bGFibGVMb2FkZXIuY3BwICovOyB9OwogCQk1MTlCNEZGNTE2
QTlFQTk3MDA2Njg3NEQgLyogU2NoZWR1bGFibGVMb2FkZXIuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxOUI0RkYzMTZBOUVBOTcwMDY2ODc0RCAvKiBT
Y2hlZHVsYWJsZUxvYWRlci5oICovOyB9OwogCQk1MUE1NTVGNTEyOEM2QzQ3MDA5QUJDRUMgLyog
V0tDb250ZXh0TWVudUl0ZW0uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTFBNTU1RjMxMjhDNkM0NzAwOUFCQ0VDIC8qIFdLQ29udGV4dE1lbnVJdGVt
LmNwcCAqLzsgfTsKQEAgLTUxMSw3ICs1MTQsNiBAQAogCQk1MUIxNUE4NTEzODQzQTM5MDAzMjFB
RDggLyogRW52aXJvbm1lbnRVdGlsaXRpZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDUxQjE1QTgzMTM4NDNBMzkwMDMyMUFEOCAvKiBFbnZpcm9ubWVu
dFV0aWxpdGllcy5oICovOyB9OwogCQk1MUIzMDA1MDEyNTI5RDBFMDAwQjVDQTAgLyogV2ViQmFj
a0ZvcndhcmRMaXN0Q0YuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNTFCMzAwNEUxMjUyOUQwRTAwMEI1Q0EwIC8qIFdlYkJhY2tGb3J3YXJkTGlzdENG
LmNwcCAqLzsgfTsKIAkJNTFCMzAwNTExMjUyOUQwRTAwMEI1Q0EwIC8qIFdlYlBhZ2VQcm94eUNG
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxQjMw
MDRGMTI1MjlEMEUwMDBCNUNBMCAvKiBXZWJQYWdlUHJveHlDRi5jcHAgKi87IH07Ci0JCTUxQzQw
MzJDMTM2NzQ5RDgwMERDOTcyRCAvKiBBdXRoZW50aWNhdGlvbk1hbmFnZXIubWFjLm1tIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFDNDAzMkIxMzY3NDlE
ODAwREM5NzJEIC8qIEF1dGhlbnRpY2F0aW9uTWFuYWdlci5tYWMubW0gKi87IH07CiAJCTUxQ0JC
QTBGMTY1MjE5QjYwMDVCRThGRCAvKiBOZXR3b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVycy5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUNCQkEwRDE2
NTIxOUI2MDA1QkU4RkQgLyogTmV0d29ya1Jlc291cmNlTG9hZFBhcmFtZXRlcnMuY3BwICovOyB9
OwogCQk1MUNCQkExMDE2NTIxOUI2MDA1QkU4RkQgLyogTmV0d29ya1Jlc291cmNlTG9hZFBhcmFt
ZXRlcnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUx
Q0JCQTBFMTY1MjE5QjYwMDVCRThGRCAvKiBOZXR3b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVycy5o
ICovOyB9OwogCQk1MUQwMkY2NDEzMkVDNUI5MDBCRUFBOTYgLyogV2ViSWNvbkRhdGFiYXNlTWVz
c2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDUxRDAyRjYzMTMyRUM1QjkwMEJFQUE5NiAvKiBXZWJJY29uRGF0YWJhc2VNZXNzYWdl
UmVjZWl2ZXIuY3BwICovOyB9OwpAQCAtMTM2NSwxMSArMTM2Nyw2IEBACiAJCTFBNTk0QUI4MTEy
QTFGQjYwMDlERTdDNyAvKiBXZWJVSUNsaWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBXZWJVSUNsaWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTFBNTk0QUI5MTEyQTFGQjYwMDlERTdDNyAvKiBXZWJVSUNsaWVudC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJVSUNsaWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkxQTVFNERBMzEyRDNCRDNEMDA5OUEyQkIgLyogVGV4dENoZWNrZXJTdGF0ZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUZXh0Q2hlY2tlclN0YXRlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTFBNjE2MTREMTI3Nzk4QjUwMDNBQ0Q4NiAvKiBE
b3dubG9hZE1hbmFnZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
RG93bmxvYWRNYW5hZ2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMUE2MTYx
NEUxMjc3OThCNTAwM0FDRDg2IC8qIERvd25sb2FkTWFuYWdlci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBEb3dubG9hZE1hbmFnZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJMUE2MTYxRDIxMjc4OTgxQzAwM0FDRDg2IC8qIERvd25sb2FkLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERvd25sb2FkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCTFBNjE2MUQzMTI3ODk4MUMwMDNBQ0Q4NiAvKiBEb3dubG9hZC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEb3dubG9hZC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCTFBNjE2Mzk1MTI3ODlCMkYwMDNBQ0Q4NiAvKiBEb3dubG9hZE1h
Yy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IERvd25sb2FkTWFj
Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQTY0MjBFMjEyRENFMkZGMDBDQUFF
MkMgLyogU2hhcmVhYmxlQml0bWFwLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFNoYXJlYWJsZUJpdG1hcC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTFBNjQyMEUzMTJEQ0UyRkYwMENBQUUyQyAvKiBTaGFyZWFibGVCaXRtYXAuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2hhcmVhYmxlQml0bWFwLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTFBNjQyMTg0MTJEQ0Y0OTIwMENBQUUyQyAvKiBEcmF3aW5nQXJlYVBy
b3h5SW1wbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEcmF3aW5nQXJlYVBy
b3h5SW1wbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTY5NCw5ICsxNjkxLDYg
QEAKIAkJNTEyRTM1RjAxMzBCNjM4QzAwQUJEMTlBIC8qIFdlYkFwcGxpY2F0aW9uQ2FjaGVNYW5h
Z2VyUHJveHkubWVzc2FnZXMuaW4gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gV2ViQXBwbGljYXRp
b25DYWNoZU1hbmFnZXJQcm94eS5tZXNzYWdlcy5pbjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNTEyRTM1RjYxMzBCNjQyRTAwQUJEMTlBIC8qIFdlYkFwcGxpY2F0aW9uQ2FjaGVNYW5h
Z2VyUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gV2ViQXBwbGljYXRpb25DYWNoZU1hbmFnZXJQcm94eU1lc3NhZ2VSZWNlaXZlci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxMkUzNUY3MTMwQjY0MkUwMEFCRDE5
QSAvKiBXZWJBcHBsaWNhdGlvbkNhY2hlTWFuYWdlclByb3h5TWVzc2FnZXMuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViQXBwbGljYXRpb25DYWNoZU1hbmFnZXJQcm94eU1l
c3NhZ2VzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUxMkY1ODg3MTJBODgzNjYw
MDYyOTUzMCAvKiBBdXRoZW50aWNhdGlvbk1hbmFnZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gQXV0aGVudGljYXRpb25NYW5hZ2VyLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJNTEyRjU4ODgxMkE4ODM2NjAwNjI5NTMwIC8qIEF1dGhlbnRpY2F0
aW9uTWFuYWdlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBdXRoZW50aWNh
dGlvbk1hbmFnZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTEyRjU4ODkxMkE4
ODM2NjAwNjI5NTMwIC8qIEF1dGhlbnRpY2F0aW9uTWFuYWdlci5tZXNzYWdlcy5pbiAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHRleHQ7IHBhdGggPSBBdXRoZW50aWNhdGlvbk1hbmFnZXIubWVzc2FnZXMuaW47IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxMkY1ODhFMTJBODgzODgwMDYyOTUzMCAvKiBBdXRo
ZW50aWNhdGlvbkNoYWxsZW5nZVByb3h5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUHJveHkuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk1MTJGNTg4RjEyQTg4Mzg4MDA2Mjk1MzAgLyogQXV0aGVudGljYXRp
b25DaGFsbGVuZ2VQcm94eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBdXRo
ZW50aWNhdGlvbkNoYWxsZW5nZVByb3h5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTUxMkY1ODkwMTJBODgzODgwMDYyOTUzMCAvKiBBdXRoZW50aWNhdGlvbkRlY2lzaW9uTGlzdGVu
ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQXV0aGVudGljYXRp
b25EZWNpc2lvbkxpc3RlbmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE3
NTEsNiArMTc0NSwxNyBAQAogCQk1MThEMkNBQzEyRDUxNTNCMDAzQkI5M0IgLyogV2ViQmFja0Zv
cndhcmRMaXN0SXRlbS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJCYWNr
Rm9yd2FyZExpc3RJdGVtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxOEQyQ0M4
MTJENTFERkIwMDNCQjkzQiAvKiBTZXNzaW9uU3RhdGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gU2Vzc2lvblN0YXRlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNTE4RDJDQzkxMkQ1MURGQjAwM0JCOTNCIC8qIFNlc3Npb25TdGF0ZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTZXNzaW9uU3RhdGUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJNTE4RThFRjMxNkIyMDkxQzAwRTkxNDI5IC8qIEF1dGhlbnRpY2F0
aW9uTWFuYWdlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBBdXRo
ZW50aWNhdGlvbk1hbmFnZXIuY3BwOyBwYXRoID0gQXV0aGVudGljYXRpb24vQXV0aGVudGljYXRp
b25NYW5hZ2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTE4RThFRjQxNkIy
MDkxQzAwRTkxNDI5IC8qIEF1dGhlbnRpY2F0aW9uTWFuYWdlci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBBdXRoZW50aWNhdGlvbk1hbmFnZXIuaDsgcGF0aCA9IEF1dGhlbnRp
Y2F0aW9uL0F1dGhlbnRpY2F0aW9uTWFuYWdlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk1MThFOEVGNTE2QjIwOTFDMDBFOTE0MjkgLyogQXV0aGVudGljYXRpb25NYW5hZ2VyLm1l
c3NhZ2VzLmluICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9IEF1dGhlbnRpY2F0aW9uTWFuYWdlci5t
ZXNzYWdlcy5pbjsgcGF0aCA9IEF1dGhlbnRpY2F0aW9uL0F1dGhlbnRpY2F0aW9uTWFuYWdlci5t
ZXNzYWdlcy5pbjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTE4RThFRjcxNkIyMDkx
QzAwRTkxNDI5IC8qIEF1dGhlbnRpY2F0aW9uTWFuYWdlci5tYWMubW0gKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBBdXRoZW50aWNhdGlvbk1hbmFnZXIubWFjLm1tOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MThFOEVGRTE2QjIwOTM3MDBFOTE0MjkgLyog
RG93bmxvYWQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRG93bmxv
YWQuY3BwOyBwYXRoID0gRG93bmxvYWRzL0Rvd25sb2FkLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJNTE4RThFRkYxNkIyMDkzNzAwRTkxNDI5IC8qIERvd25sb2FkLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERvd25sb2FkLmg7IHBhdGggPSBEb3dubG9hZHMv
RG93bmxvYWQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTE4RThGMDAxNkIyMDkz
NzAwRTkxNDI5IC8qIERvd25sb2FkQXV0aGVudGljYXRpb25DbGllbnQuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRG93bmxvYWRBdXRoZW50aWNhdGlvbkNsaWVudC5j
cHA7IHBhdGggPSBEb3dubG9hZHMvRG93bmxvYWRBdXRoZW50aWNhdGlvbkNsaWVudC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUxOEU4RjAxMTZCMjA5MzcwMEU5MTQyOSAvKiBE
b3dubG9hZEF1dGhlbnRpY2F0aW9uQ2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IERvd25sb2FkQXV0aGVudGljYXRpb25DbGllbnQuaDsgcGF0aCA9IERvd25sb2Fkcy9E
b3dubG9hZEF1dGhlbnRpY2F0aW9uQ2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTUxOEU4RjAyMTZCMjA5MzcwMEU5MTQyOSAvKiBEb3dubG9hZE1hbmFnZXIuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRG93bmxvYWRNYW5hZ2VyLmNwcDsgcGF0
aCA9IERvd25sb2Fkcy9Eb3dubG9hZE1hbmFnZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk1MThFOEYwMzE2QjIwOTM3MDBFOTE0MjkgLyogRG93bmxvYWRNYW5hZ2VyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERvd25sb2FkTWFuYWdlci5oOyBwYXRoID0g
RG93bmxvYWRzL0Rvd25sb2FkTWFuYWdlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk1MThFOEYwNTE2QjIwOTM3MDBFOTE0MjkgLyogRG93bmxvYWRNYWMubW0gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBEb3dubG9hZE1hYy5tbTsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNTE5QjRGRjIxNkE5RUE5NzAwNjY4NzREIC8qIFNjaGVkdWxhYmxl
TG9hZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFNjaGVkdWxh
YmxlTG9hZGVyLmNwcDsgcGF0aCA9IE5ldHdvcmtQcm9jZXNzL1NjaGVkdWxhYmxlTG9hZGVyLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTE5QjRGRjMxNkE5RUE5NzAwNjY4NzRE
IC8qIFNjaGVkdWxhYmxlTG9hZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IFNjaGVkdWxhYmxlTG9hZGVyLmg7IHBhdGggPSBOZXR3b3JrUHJvY2Vzcy9TY2hlZHVsYWJsZUxv
YWRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MUE1NTVGMzEyOEM2QzQ3MDA5
QUJDRUMgLyogV0tDb250ZXh0TWVudUl0ZW0uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gV0tDb250ZXh0TWVudUl0ZW0uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtMTc4Niw3ICsxNzkxLDYgQEAKIAkJNTFCMTVBODMxMzg0M0EzOTAwMzIxQUQ4IC8q
IEVudmlyb25tZW50VXRpbGl0aWVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IEVudmlyb25tZW50VXRpbGl0aWVzLmg7IHBhdGggPSB1bml4L0Vudmlyb25tZW50VXRpbGl0aWVz
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxQjMwMDRFMTI1MjlEMEUwMDBCNUNB
MCAvKiBXZWJCYWNrRm9yd2FyZExpc3RDRi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IG5hbWUgPSBXZWJCYWNrRm9yd2FyZExpc3RDRi5jcHA7IHBhdGggPSBjZi9XZWJCYWNrRm9y
d2FyZExpc3RDRi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxQjMwMDRGMTI1
MjlEMEUwMDBCNUNBMCAvKiBXZWJQYWdlUHJveHlDRi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IG5hbWUgPSBXZWJQYWdlUHJveHlDRi5jcHA7IHBhdGggPSBjZi9XZWJQYWdlUHJv
eHlDRi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUxQzQwMzJCMTM2NzQ5RDgw
MERDOTcyRCAvKiBBdXRoZW50aWNhdGlvbk1hbmFnZXIubWFjLm1tICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAub2JqY3BwOyBuYW1lID0gQXV0aGVudGljYXRpb25NYW5hZ2VyLm1hYy5tbTsgcGF0
aCA9IG1hYy9BdXRoZW50aWNhdGlvbk1hbmFnZXIubWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk1MUNCQkEwRDE2NTIxOUI2MDA1QkU4RkQgLyogTmV0d29ya1Jlc291cmNlTG9h
ZFBhcmFtZXRlcnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gTmV0
d29ya1Jlc291cmNlTG9hZFBhcmFtZXRlcnMuY3BwOyBwYXRoID0gTmV0d29yay9OZXR3b3JrUmVz
b3VyY2VMb2FkUGFyYW1ldGVycy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUx
Q0JCQTBFMTY1MjE5QjYwMDVCRThGRCAvKiBOZXR3b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVycy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBOZXR3b3JrUmVzb3VyY2VMb2FkUGFy
YW1ldGVycy5oOyBwYXRoID0gTmV0d29yay9OZXR3b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVycy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MUQwMkY2MzEzMkVDNUI5MDBCRUFBOTYg
LyogV2ViSWNvbkRhdGFiYXNlTWVzc2FnZVJlY2VpdmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFdlYkljb25EYXRhYmFzZU1lc3NhZ2VSZWNlaXZlci5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMTQ2LDcgKzIxNTAsNyBAQAogCQlCQ0FDQzQw
RDE2QjBCN0JFMDBCNkUwOTIgLyogQmFzZVhQQ1NlcnZpY2UueGNjb25maWcgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnhjY29uZmlnOyBwYXRo
ID0gQmFzZVhQQ1NlcnZpY2UueGNjb25maWc7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUJDQUNDNDBFMTZCMEI4QTgwMEI2RTA5MiAvKiBXZWJDb250ZW50U2VydmljZS54Y2NvbmZpZyAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQueGNj
b25maWc7IHBhdGggPSBXZWJDb250ZW50U2VydmljZS54Y2NvbmZpZzsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQkNBQ0M0MEYxNkIwQjhBODAwQjZFMDkyIC8qIFdlYkNvbnRlbnRTZXJ2
aWNlLkRldmVsb3BtZW50LnhjY29uZmlnICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gdGV4dC54Y2NvbmZpZzsgcGF0aCA9IFdlYkNvbnRlbnRTZXJ2aWNl
LkRldmVsb3BtZW50LnhjY29uZmlnOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlCQ0FF
OURFOTE2MEMwOTc0MDBBMzMyMTcgLyogY29tLmFwcGxlLldlYktpdC5XZWJDb250ZW50Rm9yRGV2
ZWxvcG1lbnQueHBjICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5
cGUgPSB3cmFwcGVyLmNmYnVuZGxlOyBpbmNsdWRlSW5JbmRleCA9IDA7IHBhdGggPSBjb20uYXBw
bGUuV2ViS2l0LldlYkNvbnRlbnRGb3JEZXZlbG9wbWVudC54cGM7IHNvdXJjZVRyZWUgPSBCVUlM
VF9QUk9EVUNUU19ESVI7IH07CisJCUJDQUU5REU5MTYwQzA5NzQwMEEzMzIxNyAvKiBjb20uYXBw
bGUuV2ViS2l0LldlYkNvbnRlbnRGb3JEZXZlbG9wbWVudC54cGMgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHdyYXBwZXIuY2ZidW5kbGU7IGluY2x1ZGVJ
bkluZGV4ID0gMDsgbmFtZSA9IGNvbS5hcHBsZS5XZWJLaXQuV2ViQ29udGVudEZvckRldmVsb3Bt
ZW50LnhwYzsgcGF0aCA9IGNvbS5hcHBsZS5XZWJLaXQuV2ViQ29udGVudC5EZXZlbG9wbWVudC54
cGM7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CiAJCUJDQUU5REVGMTYwQzA5
NzUwMEEzMzIxNyAvKiBJbmZvLnBsaXN0ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gdGV4dC5wbGlzdC54bWw7IHBhdGggPSBJbmZvLnBsaXN0OyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQ0FFOUUwMTE2MEMxMkRBMDBBMzMyMTcgLyogSW5m
by5wbGlzdCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHRleHQucGxpc3QueG1sOyBuYW1lID0gSW5mby5wbGlzdDsgcGF0aCA9IFdlYlByb2Nlc3NTZXJ2
aWNlL0luZm8ucGxpc3Q7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDQUU5RTA0MTYw
QzEzNzgwMEEzMzIxNyAvKiBXZWJQcm9jZXNzU2VydmljZUZvcldlYktpdERldmVsb3BtZW50TWFp
bi5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYlByb2Nlc3NT
ZXJ2aWNlRm9yV2ViS2l0RGV2ZWxvcG1lbnRNYWluLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtMjY2MCwyNiArMjY2NCw2IEBACiAJCQl0YWJXaWR0aCA9IDg7CiAJCQl1c2VzVGFi
cyA9IDA7CiAJCX07Ci0JCTFBNjE2MTRDMTI3Nzk4QjUwMDNBQ0Q4NiAvKiBEb3dubG9hZHMgKi8g
PSB7Ci0JCQlpc2EgPSBQQlhHcm91cDsKLQkJCWNoaWxkcmVuID0gKAotCQkJCTFBNjE2Mzk0MTI3
ODlCMkYwMDNBQ0Q4NiAvKiBtYWMgKi8sCi0JCQkJMUE2MTYxRDMxMjc4OTgxQzAwM0FDRDg2IC8q
IERvd25sb2FkLmNwcCAqLywKLQkJCQkxQTYxNjFEMjEyNzg5ODFDMDAzQUNEODYgLyogRG93bmxv
YWQuaCAqLywKLQkJCQkxQTYxNjE0RDEyNzc5OEI1MDAzQUNEODYgLyogRG93bmxvYWRNYW5hZ2Vy
LmNwcCAqLywKLQkJCQkxQTYxNjE0RTEyNzc5OEI1MDAzQUNEODYgLyogRG93bmxvYWRNYW5hZ2Vy
LmggKi8sCi0JCQkpOwotCQkJcGF0aCA9IERvd25sb2FkczsKLQkJCXNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7Ci0JCX07Ci0JCTFBNjE2Mzk0MTI3ODlCMkYwMDNBQ0Q4NiAvKiBtYWMgKi8gPSB7Ci0J
CQlpc2EgPSBQQlhHcm91cDsKLQkJCWNoaWxkcmVuID0gKAotCQkJCTFBNjE2Mzk1MTI3ODlCMkYw
MDNBQ0Q4NiAvKiBEb3dubG9hZE1hYy5tbSAqLywKLQkJCSk7Ci0JCQlwYXRoID0gbWFjOwotCQkJ
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKLQkJfTsKIAkJMUE2RkEwMUMxMUUxNTI2MzAwREIxMzcx
IC8qIG1hYyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCkBAIC0y
Nzg2LDkgKzI3NzAsMTEgQEAKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCiAJ
CQkJQkNEREIzMTQxMjRFQkNFRjAwNDhEMTNDIC8qIEFQSSAqLywKKwkJCQk1MThFOEVGMTE2QjIw
OEYwMDBFOTE0MjkgLyogQXV0aGVudGljYXRpb24gKi8sCiAJCQkJMUFBRjBDNDcxMkIxNjMyODAw
OEU0OUUyIC8qIGNmICovLAogCQkJCUMwMUEyNUZGMTI2NjJGMjEwMEM5RUQ1NSAvKiBjZyAqLywK
IAkJCQlCQzExMUI1RjExMkY2MzVFMDAzMzdCQUIgLyogQ29yZUlQQ1N1cHBvcnQgKi8sCisJCQkJ
NTE4RThFRjIxNkIyMDhGODAwRTkxNDI5IC8qIERvd25sb2FkcyAqLywKIAkJCQlCQzExMUI1QTEx
MkY2MjgyMDAzMzdCQUIgLyogbWFjICovLAogCQkJCTUxQThBNjBEMTYyN0YyQUMwMDBEOTBFOSAv
KiBOZXR3b3JrICovLAogCQkJCTFBQUUwNThDMTI3OURDRDQwMDg1MjQxOCAvKiBQbHVnaW5zICov
LApAQCAtMzI1NiwxNyArMzI0Miw2IEBACiAJCQluYW1lID0gQXBwbGljYXRpb25DYWNoZTsKIAkJ
CXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07Ci0JCTUxMkY1ODg2MTJBODgzNDcwMDYyOTUz
MCAvKiBBdXRoZW50aWNhdGlvbiAqLyA9IHsKLQkJCWlzYSA9IFBCWEdyb3VwOwotCQkJY2hpbGRy
ZW4gPSAoCi0JCQkJNTFDNDAzMkExMzY3NDlDNDAwREM5NzJEIC8qIG1hYyAqLywKLQkJCQk1MTJG
NTg4NzEyQTg4MzY2MDA2Mjk1MzAgLyogQXV0aGVudGljYXRpb25NYW5hZ2VyLmNwcCAqLywKLQkJ
CQk1MTJGNTg4ODEyQTg4MzY2MDA2Mjk1MzAgLyogQXV0aGVudGljYXRpb25NYW5hZ2VyLmggKi8s
Ci0JCQkJNTEyRjU4ODkxMkE4ODM2NjAwNjI5NTMwIC8qIEF1dGhlbnRpY2F0aW9uTWFuYWdlci5t
ZXNzYWdlcy5pbiAqLywKLQkJCSk7Ci0JCQlwYXRoID0gQXV0aGVudGljYXRpb247Ci0JCQlzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOwotCQl9OwogCQk1MTJGNTg4RDEyQTg4MzZGMDA2Mjk1MzAgLyog
QXV0aGVudGljYXRpb24gKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0g
KApAQCAtMzI5MCw2ICszMjY1LDQ5IEBACiAJCQluYW1lID0gbWFjOwogCQkJc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsKIAkJfTsKKwkJNTE4RThFRjExNkIyMDhGMDAwRTkxNDI5IC8qIEF1dGhlbnRp
Y2F0aW9uICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQk1
MThFOEVGMzE2QjIwOTFDMDBFOTE0MjkgLyogQXV0aGVudGljYXRpb25NYW5hZ2VyLmNwcCAqLywK
KwkJCQk1MThFOEVGNDE2QjIwOTFDMDBFOTE0MjkgLyogQXV0aGVudGljYXRpb25NYW5hZ2VyLmgg
Ki8sCisJCQkJNTE4RThFRjUxNkIyMDkxQzAwRTkxNDI5IC8qIEF1dGhlbnRpY2F0aW9uTWFuYWdl
ci5tZXNzYWdlcy5pbiAqLywKKwkJCQk1MThFOEVGNjE2QjIwOTFDMDBFOTE0MjkgLyogbWFjICov
LAorCQkJKTsKKwkJCW5hbWUgPSBBdXRoZW50aWNhdGlvbjsKKwkJCXNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7CisJCX07CisJCTUxOEU4RUYyMTZCMjA4RjgwMEU5MTQyOSAvKiBEb3dubG9hZHMgKi8g
PSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCTUxOEU4RjA0MTZC
MjA5MzcwMEU5MTQyOSAvKiBtYWMgKi8sCisJCQkJNTE4RThFRkUxNkIyMDkzNzAwRTkxNDI5IC8q
IERvd25sb2FkLmNwcCAqLywKKwkJCQk1MThFOEVGRjE2QjIwOTM3MDBFOTE0MjkgLyogRG93bmxv
YWQuaCAqLywKKwkJCQk1MThFOEYwMDE2QjIwOTM3MDBFOTE0MjkgLyogRG93bmxvYWRBdXRoZW50
aWNhdGlvbkNsaWVudC5jcHAgKi8sCisJCQkJNTE4RThGMDExNkIyMDkzNzAwRTkxNDI5IC8qIERv
d25sb2FkQXV0aGVudGljYXRpb25DbGllbnQuaCAqLywKKwkJCQk1MThFOEYwMjE2QjIwOTM3MDBF
OTE0MjkgLyogRG93bmxvYWRNYW5hZ2VyLmNwcCAqLywKKwkJCQk1MThFOEYwMzE2QjIwOTM3MDBF
OTE0MjkgLyogRG93bmxvYWRNYW5hZ2VyLmggKi8sCisJCQkpOworCQkJbmFtZSA9IERvd25sb2Fk
czsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CisJCTUxOEU4RUY2MTZCMjA5MUMw
MEU5MTQyOSAvKiBtYWMgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0g
KAorCQkJCTUxOEU4RUY3MTZCMjA5MUMwMEU5MTQyOSAvKiBBdXRoZW50aWNhdGlvbk1hbmFnZXIu
bWFjLm1tICovLAorCQkJKTsKKwkJCW5hbWUgPSBtYWM7CisJCQlwYXRoID0gQXV0aGVudGljYXRp
b24vbWFjOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKKwkJNTE4RThGMDQxNkIy
MDkzNzAwRTkxNDI5IC8qIG1hYyAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRy
ZW4gPSAoCisJCQkJNTE4RThGMDUxNkIyMDkzNzAwRTkxNDI5IC8qIERvd25sb2FkTWFjLm1tICov
LAorCQkJKTsKKwkJCW5hbWUgPSBtYWM7CisJCQlwYXRoID0gRG93bmxvYWRzL21hYzsKKwkJCXNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CiAJCTUxQThBNjBEMTYyN0YyQUMwMDBEOTBFOSAv
KiBOZXR3b3JrICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKQEAg
LTMzMzIsMTQgKzMzNTAsNiBAQAogCQkJbmFtZSA9IGNmOwogCQkJc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsKIAkJfTsKLQkJNTFDNDAzMkExMzY3NDlDNDAwREM5NzJEIC8qIG1hYyAqLyA9IHsKLQkJ
CWlzYSA9IFBCWEdyb3VwOwotCQkJY2hpbGRyZW4gPSAoCi0JCQkJNTFDNDAzMkIxMzY3NDlEODAw
REM5NzJEIC8qIEF1dGhlbnRpY2F0aW9uTWFuYWdlci5tYWMubW0gKi8sCi0JCQkpOwotCQkJbmFt
ZSA9IG1hYzsKLQkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7Ci0JCX07CiAJCTUxRkJCOUMxMTMy
RTA3OTIwMEYzMjdCNCAvKiBJY29uRGF0YWJhc2UgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsK
IAkJCWNoaWxkcmVuID0gKApAQCAtMzM5Niw5ICszNDA2LDcgQEAKIAkJCWlzYSA9IFBCWEdyb3Vw
OwogCQkJY2hpbGRyZW4gPSAoCiAJCQkJNTEyRTM1MkExMzBCNTU5OTAwQUJEMTlBIC8qIEFwcGxp
Y2F0aW9uQ2FjaGUgKi8sCi0JCQkJNTEyRjU4ODYxMkE4ODM0NzAwNjI5NTMwIC8qIEF1dGhlbnRp
Y2F0aW9uICovLAogCQkJCTMzMDkzNDRCMTMxNUI5M0EwMDk3QTdCQyAvKiBDb29raWVzICovLAot
CQkJCTFBNjE2MTRDMTI3Nzk4QjUwMDNBQ0Q4NiAvKiBEb3dubG9hZHMgKi8sCiAJCQkJQ0Q3M0JB
M0QxMzFBMkEyMTAwRUVERUQyIC8qIEZ1bGxTY3JlZW4gKi8sCiAJCQkJQkMwRTVGQ0IxMkQ2OTZE
RDAwMTJBNzJBIC8qIEdlb2xvY2F0aW9uICovLAogCQkJCTUxRkJCOUMxMTMyRTA3OTIwMEYzMjdC
NCAvKiBJY29uRGF0YWJhc2UgKi8sCkBAIC00NTYxLDcgKzQ1NjksNiBAQAogCQkJCUUxQTMxNzMy
MTM0Q0VBNkMwMDdDOUE0RiAvKiBBdHRyaWJ1dGVkU3RyaW5nLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk1MTJGNTg5NzEyQTg4Mzg4MDA2Mjk1MzAgLyogQXV0aGVudGljYXRpb25DaGFsbGVuZ2VQcm94
eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTEyRjU4OTkxMkE4ODM4ODAwNjI5NTMwIC8qIEF1dGhl
bnRpY2F0aW9uRGVjaXNpb25MaXN0ZW5lci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNTEyRjU4OEIx
MkE4ODM2NjAwNjI5NTMwIC8qIEF1dGhlbnRpY2F0aW9uTWFuYWdlci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJNTEyRjU4QTMxMkE4ODNBRDAwNjI5NTMwIC8qIEF1dGhlbnRpY2F0aW9uTWFuYWdlck1l
c3NhZ2VzLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTY0MjU2ODEyREU0MkVDMDBDQUFFMkMgLyog
QmFja2luZ1N0b3JlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUM0MUFDNzEyNjNDODgzMDAwNTRF
OTQgLyogQmluYXJ5U2VtYXBob3JlLmggaW4gSGVhZGVycyAqLywKQEAgLTQ1ODMsOCArNDU5MCw2
IEBACiAJCQkJMUE4RUZERkExMjUzQ0FBMjAwRjcwNjdGIC8qIERhdGFSZWZlcmVuY2UuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTkzRkM2N0JFMTJEM0NDRjIwMEE2MDYxMCAvKiBEZWNvZGVyQWRhcHRl
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNFODFEOTkxMzFBRTAyMTAwMjQxOTEwIC8qIERpY3Rp
b25hcnlQb3B1cEluZm8uaCBpbiBIZWFkZXJzICovLAotCQkJCTFBNjE2MUQ0MTI3ODk4MUMwMDNB
Q0Q4NiAvKiBEb3dubG9hZC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMUE2MTYxNTAxMjc3OThCNTAw
M0FDRDg2IC8qIERvd25sb2FkTWFuYWdlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFCN0Q0Q0Ex
Mjg4QUFBNzAwQ0ZEMDhDIC8qIERvd25sb2FkUHJveHkuaCBpbiBIZWFkZXJzICovLAogCQkJCTFB
RDI1RTk2MTY3QUIwODEwMEVBOUJDRCAvKiBEb3dubG9hZFByb3h5TWFwLmggaW4gSGVhZGVycyAq
LywKIAkJCQkxQUI3RDYxQTEyODhCOUQ5MDBDRkQwOEMgLyogRG93bmxvYWRQcm94eU1lc3NhZ2Vz
LmggaW4gSGVhZGVycyAqLywKQEAgLTUwNjAsNiArNTA2NSwxMCBAQAogCQkJCTUxODE1QkEwMTZB
NjIyMjEwMDU0NTAxRiAvKiBTeW5jTmV0d29ya1Jlc291cmNlTG9hZGVyLmggaW4gSGVhZGVycyAq
LywKIAkJCQk1MTlCNEZGNTE2QTlFQTk3MDA2Njg3NEQgLyogU2NoZWR1bGFibGVMb2FkZXIuaCBp
biBIZWFkZXJzICovLAogCQkJCUUxRTU1MkM1MTZBRTA2NUYwMDRFRDY1MyAvKiBTYW5kYm94SW5p
dGlhbGl6YXRpb25QYXJhbWV0ZXJzLmggaW4gSGVhZGVycyAqLywKKwkJCQk1MThFOEVGOTE2QjIw
OTFDMDBFOTE0MjkgLyogQXV0aGVudGljYXRpb25NYW5hZ2VyLmggaW4gSGVhZGVycyAqLywKKwkJ
CQk1MThFOEYwODE2QjIwOTM3MDBFOTE0MjkgLyogRG93bmxvYWQuaCBpbiBIZWFkZXJzICovLAor
CQkJCTUxOEU4RjBBMTZCMjA5MzcwMEU5MTQyOSAvKiBEb3dubG9hZEF1dGhlbnRpY2F0aW9uQ2xp
ZW50LmggaW4gSGVhZGVycyAqLywKKwkJCQk1MThFOEYwQzE2QjIwOTM3MDBFOTE0MjkgLyogRG93
bmxvYWRNYW5hZ2VyLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95
bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTU1MzcsOCArNTU0Niw2IEBACiAJCQkJ
RTFBMzE3MzUxMzRDRUE4MDAwN0M5QTRGIC8qIEF0dHJpYnV0ZWRTdHJpbmcubW0gaW4gU291cmNl
cyAqLywKIAkJCQk1MTJGNTg5NjEyQTg4Mzg4MDA2Mjk1MzAgLyogQXV0aGVudGljYXRpb25DaGFs
bGVuZ2VQcm94eS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MTJGNTg5ODEyQTg4Mzg4MDA2Mjk1
MzAgLyogQXV0aGVudGljYXRpb25EZWNpc2lvbkxpc3RlbmVyLmNwcCBpbiBTb3VyY2VzICovLAot
CQkJCTUxMkY1ODhBMTJBODgzNjYwMDYyOTUzMCAvKiBBdXRoZW50aWNhdGlvbk1hbmFnZXIuY3Bw
IGluIFNvdXJjZXMgKi8sCi0JCQkJNTFDNDAzMkMxMzY3NDlEODAwREM5NzJEIC8qIEF1dGhlbnRp
Y2F0aW9uTWFuYWdlci5tYWMubW0gaW4gU291cmNlcyAqLywKIAkJCQk1MTJGNThBMjEyQTg4M0FE
MDA2Mjk1MzAgLyogQXV0aGVudGljYXRpb25NYW5hZ2VyTWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTFBNjQyNTY5MTJERTQyRUMwMENBQUUyQyAvKiBCYWNraW5nU3RvcmUu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUE2NDI5MkQxMkRFNUY5ODAwQ0FBRTJDIC8qIEJhY2tp
bmdTdG9yZU1hYy5tbSBpbiBTb3VyY2VzICovLApAQCAtNTU2Miw5ICs1NTY5LDYgQEAKIAkJCQkx
QThFRkRGRTEyNTNDQjZFMDBGNzA2N0YgLyogRGF0YVJlZmVyZW5jZS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk5M0ZDNjdCRDEyRDNDQ0YyMDBBNjA2MTAgLyogRGVjb2RlckFkYXB0ZXIuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQkNFODFEOTgxMzFBRTAyMTAwMjQxOTEwIC8qIERpY3Rpb25hcnlQ
b3B1cEluZm8uY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMUE2MTYxRDUxMjc4OTgxQzAwM0FDRDg2
IC8qIERvd25sb2FkLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTFBNjE2Mzk2MTI3ODlCMkYwMDNB
Q0Q4NiAvKiBEb3dubG9hZE1hYy5tbSBpbiBTb3VyY2VzICovLAotCQkJCTFBNjE2MTRGMTI3Nzk4
QjUwMDNBQ0Q4NiAvKiBEb3dubG9hZE1hbmFnZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUFC
N0Q0Q0IxMjg4QUFBNzAwQ0ZEMDhDIC8qIERvd25sb2FkUHJveHkuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMUFEMjVFOTUxNjdBQjA4MTAwRUE5QkNEIC8qIERvd25sb2FkUHJveHlNYXAuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMUFCN0Q2MTkxMjg4QjlEOTAwQ0ZEMDhDIC8qIERvd25sb2FkUHJv
eHlNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC02MDM5LDYgKzYwNDMsMTIg
QEAKIAkJCQk1MTgxNUI5RjE2QTYyMjIxMDA1NDUwMUYgLyogU3luY05ldHdvcmtSZXNvdXJjZUxv
YWRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MTlCNEZGNDE2QTlFQTk3MDA2Njg3NEQgLyog
U2NoZWR1bGFibGVMb2FkZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTFFNTUyQzQxNkFFMDY1
RjAwNEVENjUzIC8qIFNhbmRib3hJbml0aWFsaWF0aW9uUGFyYW1ldGVyc01hYy5tbSBpbiBTb3Vy
Y2VzICovLAorCQkJCTUxOEU4RUY4MTZCMjA5MUMwMEU5MTQyOSAvKiBBdXRoZW50aWNhdGlvbk1h
bmFnZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNTE4RThFRkIxNkIyMDkxQzAwRTkxNDI5IC8q
IEF1dGhlbnRpY2F0aW9uTWFuYWdlci5tYWMubW0gaW4gU291cmNlcyAqLywKKwkJCQk1MThFOEYw
NzE2QjIwOTM3MDBFOTE0MjkgLyogRG93bmxvYWQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNTE4
RThGMDkxNkIyMDkzNzAwRTkxNDI5IC8qIERvd25sb2FkQXV0aGVudGljYXRpb25DbGllbnQuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJNTE4RThGMEIxNkIyMDkzNzAwRTkxNDI5IC8qIERvd25sb2Fk
TWFuYWdlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1MThFOEYwRDE2QjIwOTM3MDBFOTE0Mjkg
LyogRG93bmxvYWRNYWMubW0gaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVw
bG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvQXV0aGVudGljYXRpb24vQXV0aGVudGljYXRpb25NYW5hZ2VyLmNwcCBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvQXV0aGVudGljYXRpb24vQXV0aGVudGljYXRpb25N
YW5hZ2VyLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGI3NWVmNy4uMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0F1dGhlbnRpY2F0aW9uL0F1dGhlbnRp
Y2F0aW9uTWFuYWdlci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxNDAgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJBdXRoZW50aWNhdGlvbk1hbmFn
ZXIuaCIKLQotI2luY2x1ZGUgIkF1dGhlbnRpY2F0aW9uTWFuYWdlck1lc3NhZ2VzLmgiCi0jaW5j
bHVkZSAiQ2hpbGRQcm9jZXNzLmgiCi0jaW5jbHVkZSAiRG93bmxvYWQuaCIKLSNpbmNsdWRlICJE
b3dubG9hZFByb3h5TWVzc2FnZXMuaCIKLSNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMu
aCIKLSNpbmNsdWRlICJXZWJGcmFtZS5oIgotI2luY2x1ZGUgIldlYlBhZ2UuaCIKLSNpbmNsdWRl
ICJXZWJQYWdlUHJveHlNZXNzYWdlcy5oIgotI2luY2x1ZGUgPFdlYkNvcmUvQXV0aGVudGljYXRp
b25DaGFsbGVuZ2UuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0F1dGhlbnRpY2F0aW9uQ2xpZW50Lmg+
Ci0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotc3Rh
dGljIHVpbnQ2NF90IGdlbmVyYXRlQXV0aGVudGljYXRpb25DaGFsbGVuZ2VJRCgpCi17Ci0gICAg
c3RhdGljIHVpbnQ2NF90IHVuaXF1ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlSUQgPSAxOwotICAg
IHJldHVybiB1bmlxdWVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZUlEKys7Ci19Ci0KLWNvbnN0IEF0
b21pY1N0cmluZyYgQXV0aGVudGljYXRpb25NYW5hZ2VyOjpzdXBwbGVtZW50TmFtZSgpCi17Ci0g
ICAgREVGSU5FX1NUQVRJQ19MT0NBTChBdG9taWNTdHJpbmcsIG5hbWUsICgiQXV0aGVudGljYXRp
b25NYW5hZ2VyIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkpOwotICAgIHJl
dHVybiBuYW1lOwotfQotCi1BdXRoZW50aWNhdGlvbk1hbmFnZXI6OkF1dGhlbnRpY2F0aW9uTWFu
YWdlcihDaGlsZFByb2Nlc3MqIHByb2Nlc3MpCi0gICAgOiBtX3Byb2Nlc3MocHJvY2VzcykKLXsK
LSAgICBtX3Byb2Nlc3MtPmFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6QXV0aGVudGljYXRp
b25NYW5hZ2VyOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIHRoaXMpOwotfQotCi12b2lkIEF1dGhl
bnRpY2F0aW9uTWFuYWdlcjo6ZGlkUmVjZWl2ZU1lc3NhZ2UoQ29yZUlQQzo6Q29ubmVjdGlvbiog
Y29ubmVjdGlvbiwgQ29yZUlQQzo6TWVzc2FnZUlEIG1lc3NhZ2VJRCwgQ29yZUlQQzo6TWVzc2Fn
ZURlY29kZXImIGRlY29kZXIpCi17Ci0gICAgZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uTWFuYWdl
ck1lc3NhZ2UoY29ubmVjdGlvbiwgbWVzc2FnZUlELCBkZWNvZGVyKTsKLX0KLQotdm9pZCBBdXRo
ZW50aWNhdGlvbk1hbmFnZXI6OmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShXZWJG
cmFtZSogZnJhbWUsIGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiBhdXRoZW50aWNhdGlv
bkNoYWxsZW5nZSkKLXsKLSAgICBBU1NFUlQoZnJhbWUpOwotICAgIEFTU0VSVChmcmFtZS0+cGFn
ZSgpKTsKLQotICAgIHVpbnQ2NF90IGNoYWxsZW5nZUlEID0gZ2VuZXJhdGVBdXRoZW50aWNhdGlv
bkNoYWxsZW5nZUlEKCk7Ci0gICAgbV9jaGFsbGVuZ2VzLnNldChjaGFsbGVuZ2VJRCwgYXV0aGVu
dGljYXRpb25DaGFsbGVuZ2UpOyAgICAKLSAgICAKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2Fn
ZXM6OldlYlBhZ2VQcm94eTo6RGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKGZyYW1l
LT5mcmFtZUlEKCksIGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLCBjaGFsbGVuZ2VJRCksIGZyYW1l
LT5wYWdlKCktPnBhZ2VJRCgpKTsKLX0KLQotdm9pZCBBdXRoZW50aWNhdGlvbk1hbmFnZXI6OmRp
ZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShEb3dubG9hZCogZG93bmxvYWQsIGNvbnN0
IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiBhdXRoZW50aWNhdGlvbkNoYWxsZW5nZSkKLXsKLSAg
ICB1aW50NjRfdCBjaGFsbGVuZ2VJRCA9IGdlbmVyYXRlQXV0aGVudGljYXRpb25DaGFsbGVuZ2VJ
RCgpOwotICAgIG1fY2hhbGxlbmdlcy5zZXQoY2hhbGxlbmdlSUQsIGF1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlKTsKLQotICAgIGRvd25sb2FkLT5zZW5kKE1lc3NhZ2VzOjpEb3dubG9hZFByb3h5OjpE
aWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoYXV0aGVudGljYXRpb25DaGFsbGVuZ2Us
IGNoYWxsZW5nZUlEKSk7Ci19Ci0KLS8vIEN1cnJlbnRseSwgb25seSBNYWMga25vd3MgaG93IHRv
IHJlc3BvbmQgdG8gYXV0aGVudGljYXRpb24gY2hhbGxlbmdlcyB3aXRoIGNlcnRpZmljYXRlIGlu
Zm8uCi0jaWYgIVVTRShTRUNVUklUWV9GUkFNRVdPUkspCi1ib29sIEF1dGhlbnRpY2F0aW9uTWFu
YWdlcjo6dHJ5VXNlUGxhdGZvcm1DZXJ0aWZpY2F0ZUluZm9Gb3JDaGFsbGVuZ2UoY29uc3QgV2Vi
Q29yZTo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2UmLCBjb25zdCBQbGF0Zm9ybUNlcnRpZmljYXRl
SW5mbyYpCi17Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotI2VuZGlmCi0KLXZvaWQgQXV0aGVudGlj
YXRpb25NYW5hZ2VyOjp1c2VDcmVkZW50aWFsRm9yQ2hhbGxlbmdlKHVpbnQ2NF90IGNoYWxsZW5n
ZUlELCBjb25zdCBDcmVkZW50aWFsJiBjcmVkZW50aWFsLCBjb25zdCBQbGF0Zm9ybUNlcnRpZmlj
YXRlSW5mbyYgY2VydGlmaWNhdGVJbmZvKQotewotICAgIEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
IGNoYWxsZW5nZSA9IG1fY2hhbGxlbmdlcy50YWtlKGNoYWxsZW5nZUlEKTsKLSAgICBBU1NFUlQo
IWNoYWxsZW5nZS5pc051bGwoKSk7Ci0gICAgCi0gICAgaWYgKHRyeVVzZVBsYXRmb3JtQ2VydGlm
aWNhdGVJbmZvRm9yQ2hhbGxlbmdlKGNoYWxsZW5nZSwgY2VydGlmaWNhdGVJbmZvKSkKLSAgICAg
ICAgcmV0dXJuOwotICAgIAotICAgIEF1dGhlbnRpY2F0aW9uQ2xpZW50KiBjb3JlQ2xpZW50ID0g
Y2hhbGxlbmdlLmF1dGhlbnRpY2F0aW9uQ2xpZW50KCk7Ci0gICAgaWYgKCFjb3JlQ2xpZW50KSB7
Ci0gICAgICAgIC8vIFRoaXMgYXV0aGVudGljYXRpb24gY2hhbGxlbmdlIGNvbWVzIGZyb20gYSBk
b3dubG9hZC4KLSAgICAgICAgRG93bmxvYWQ6OnJlY2VpdmVkQ3JlZGVudGlhbChjaGFsbGVuZ2Us
IGNyZWRlbnRpYWwpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgY29yZUNsaWVudC0+
cmVjZWl2ZWRDcmVkZW50aWFsKGNoYWxsZW5nZSwgY3JlZGVudGlhbCk7Ci19Ci0KLXZvaWQgQXV0
aGVudGljYXRpb25NYW5hZ2VyOjpjb250aW51ZVdpdGhvdXRDcmVkZW50aWFsRm9yQ2hhbGxlbmdl
KHVpbnQ2NF90IGNoYWxsZW5nZUlEKQotewotICAgIEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlIGNo
YWxsZW5nZSA9IG1fY2hhbGxlbmdlcy50YWtlKGNoYWxsZW5nZUlEKTsKLSAgICBBU1NFUlQoIWNo
YWxsZW5nZS5pc051bGwoKSk7Ci0gICAgQXV0aGVudGljYXRpb25DbGllbnQqIGNvcmVDbGllbnQg
PSBjaGFsbGVuZ2UuYXV0aGVudGljYXRpb25DbGllbnQoKTsKLSAgICBpZiAoIWNvcmVDbGllbnQp
IHsKLSAgICAgICAgLy8gVGhpcyBhdXRoZW50aWNhdGlvbiBjaGFsbGVuZ2UgY29tZXMgZnJvbSBh
IGRvd25sb2FkLgotICAgICAgICBEb3dubG9hZDo6cmVjZWl2ZWRSZXF1ZXN0VG9Db250aW51ZVdp
dGhvdXRDcmVkZW50aWFsKGNoYWxsZW5nZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICBjb3JlQ2xpZW50LT5yZWNlaXZlZFJlcXVlc3RUb0NvbnRpbnVlV2l0aG91dENyZWRlbnRpYWwo
Y2hhbGxlbmdlKTsKLX0KLQotdm9pZCBBdXRoZW50aWNhdGlvbk1hbmFnZXI6OmNhbmNlbENoYWxs
ZW5nZSh1aW50NjRfdCBjaGFsbGVuZ2VJRCkKLXsKLSAgICBBdXRoZW50aWNhdGlvbkNoYWxsZW5n
ZSBjaGFsbGVuZ2UgPSBtX2NoYWxsZW5nZXMudGFrZShjaGFsbGVuZ2VJRCk7Ci0gICAgQVNTRVJU
KCFjaGFsbGVuZ2UuaXNOdWxsKCkpOwotICAgIEF1dGhlbnRpY2F0aW9uQ2xpZW50KiBjb3JlQ2xp
ZW50ID0gY2hhbGxlbmdlLmF1dGhlbnRpY2F0aW9uQ2xpZW50KCk7Ci0gICAgaWYgKCFjb3JlQ2xp
ZW50KSB7Ci0gICAgICAgIC8vIFRoaXMgYXV0aGVudGljYXRpb24gY2hhbGxlbmdlIGNvbWVzIGZy
b20gYSBkb3dubG9hZC4KLSAgICAgICAgRG93bmxvYWQ6OnJlY2VpdmVkQ2FuY2VsbGF0aW9uKGNo
YWxsZW5nZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBjb3JlQ2xpZW50LT5yZWNl
aXZlZENhbmNlbGxhdGlvbihjaGFsbGVuZ2UpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvQXV0aGVudGljYXRpb24vQXV0
aGVudGljYXRpb25NYW5hZ2VyLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0F1dGhlbnRp
Y2F0aW9uL0F1dGhlbnRpY2F0aW9uTWFuYWdlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCA0MDcyODM4Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvQXV0
aGVudGljYXRpb24vQXV0aGVudGljYXRpb25NYW5hZ2VyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3
NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
LSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBBdXRoZW50aWNhdGlvbk1hbmFnZXJfaAot
I2RlZmluZSBBdXRoZW50aWNhdGlvbk1hbmFnZXJfaAotCi0jaW5jbHVkZSAiTWVzc2FnZVJlY2Vp
dmVyLmgiCi0jaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3NTdXBwbGVtZW50LmgiCi0jaW5jbHVkZSAi
V2ViUHJvY2Vzc1N1cHBsZW1lbnQuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0F1dGhlbnRpY2F0aW9u
Q2hhbGxlbmdlLmg+Ci0jaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KLSNpbmNsdWRlIDx3dGYvSGFz
aE1hcC5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0gICAgY2xhc3MgQXV0aGVudGljYXRpb25D
aGFsbGVuZ2U7Ci0gICAgY2xhc3MgQ3JlZGVudGlhbDsKLX0KLQotbmFtZXNwYWNlIFdlYktpdCB7
Ci0KLWNsYXNzIENoaWxkUHJvY2VzczsKLWNsYXNzIERvd25sb2FkOwotY2xhc3MgUGxhdGZvcm1D
ZXJ0aWZpY2F0ZUluZm87Ci1jbGFzcyBXZWJGcmFtZTsKLQotY2xhc3MgQXV0aGVudGljYXRpb25N
YW5hZ2VyIDogcHVibGljIFdlYlByb2Nlc3NTdXBwbGVtZW50LCBwdWJsaWMgTmV0d29ya1Byb2Nl
c3NTdXBwbGVtZW50LCBwdWJsaWMgQ29yZUlQQzo6TWVzc2FnZVJlY2VpdmVyIHsKLSAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShBdXRoZW50aWNhdGlvbk1hbmFnZXIpOwotcHVibGljOgotICAgIGV4
cGxpY2l0IEF1dGhlbnRpY2F0aW9uTWFuYWdlcihDaGlsZFByb2Nlc3MqKTsKLQotICAgIHN0YXRp
YyBjb25zdCBBdG9taWNTdHJpbmcmIHN1cHBsZW1lbnROYW1lKCk7Ci0KLSAgICB2b2lkIGRpZFJl
Y2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShXZWJGcmFtZSosIGNvbnN0IFdlYkNvcmU6OkF1
dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJik7Ci0gICAgdm9pZCBkaWRSZWNlaXZlQXV0aGVudGljYXRp
b25DaGFsbGVuZ2UoRG93bmxvYWQqLCBjb25zdCBXZWJDb3JlOjpBdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZSYpOwotCi0gICAgdm9pZCB1c2VDcmVkZW50aWFsRm9yQ2hhbGxlbmdlKHVpbnQ2NF90IGNo
YWxsZW5nZUlELCBjb25zdCBXZWJDb3JlOjpDcmVkZW50aWFsJiwgY29uc3QgUGxhdGZvcm1DZXJ0
aWZpY2F0ZUluZm8mKTsKLSAgICB2b2lkIGNvbnRpbnVlV2l0aG91dENyZWRlbnRpYWxGb3JDaGFs
bGVuZ2UodWludDY0X3QgY2hhbGxlbmdlSUQpOwotICAgIHZvaWQgY2FuY2VsQ2hhbGxlbmdlKHVp
bnQ2NF90IGNoYWxsZW5nZUlEKTsKLQotcHJpdmF0ZToKLSAgICAvLyBDb3JlSVBDOjpNZXNzYWdl
UmVjZWl2ZXIKLSAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoQ29yZUlQQzo6Q29u
bmVjdGlvbiosIENvcmVJUEM6Ok1lc3NhZ2VJRCwgQ29yZUlQQzo6TWVzc2FnZURlY29kZXImKSBP
VkVSUklERTsKLSAgICB2b2lkIGRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbk1hbmFnZXJNZXNzYWdl
KENvcmVJUEM6OkNvbm5lY3Rpb24qLCBDb3JlSVBDOjpNZXNzYWdlSUQsIENvcmVJUEM6Ok1lc3Nh
Z2VEZWNvZGVyJik7Ci0KLSAgICBib29sIHRyeVVzZVBsYXRmb3JtQ2VydGlmaWNhdGVJbmZvRm9y
Q2hhbGxlbmdlKGNvbnN0IFdlYkNvcmU6OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiwgY29uc3Qg
UGxhdGZvcm1DZXJ0aWZpY2F0ZUluZm8mKTsKLQotICAgIENoaWxkUHJvY2VzcyogbV9wcm9jZXNz
OwotCi0gICAgdHlwZWRlZiBIYXNoTWFwPHVpbnQ2NF90LCBXZWJDb3JlOjpBdXRoZW50aWNhdGlv
bkNoYWxsZW5nZT4gQXV0aGVudGljYXRpb25DaGFsbGVuZ2VNYXA7Ci0gICAgQXV0aGVudGljYXRp
b25DaGFsbGVuZ2VNYXAgbV9jaGFsbGVuZ2VzOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0
Ci0KLSNlbmRpZiAvLyBBdXRoZW50aWNhdGlvbk1hbmFnZXJfaApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9BdXRoZW50aWNhdGlvbi9BdXRoZW50aWNhdGlvbk1hbmFnZXIu
bWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0F1dGhlbnRpY2F0aW9uL0F1
dGhlbnRpY2F0aW9uTWFuYWdlci5tZXNzYWdlcy5pbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggNDIyZDlhYy4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0F1
dGhlbnRpY2F0aW9uL0F1dGhlbnRpY2F0aW9uTWFuYWdlci5tZXNzYWdlcy5pbgorKysgL2Rldi9u
dWxsCkBAIC0xLDI3ICswLDAgQEAKLSMgQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotIyBhcmUgbWV0
OgotIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0jICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotIwotIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotIyBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAotIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0jIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCi0jIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwKLSMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKLSMgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKLSMg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwKLSMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSMgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLQotbWVzc2FnZXMgLT4gQXV0aGVudGljYXRpb25NYW5hZ2VyIExlZ2FjeVJlY2VpdmVyIHsK
LSAgICB2b2lkIFVzZUNyZWRlbnRpYWxGb3JDaGFsbGVuZ2UodWludDY0X3QgY2hhbGxlbmdlSUQs
IFdlYkNvcmU6OkNyZWRlbnRpYWwgY3JlZGVudGlhbCwgV2ViS2l0OjpQbGF0Zm9ybUNlcnRpZmlj
YXRlSW5mbyBjZXJ0aWZpY2F0ZSk7Ci0gICAgdm9pZCBDb250aW51ZVdpdGhvdXRDcmVkZW50aWFs
Rm9yQ2hhbGxlbmdlKHVpbnQ2NF90IGNoYWxsZW5nZUlEKTsKLSAgICB2b2lkIENhbmNlbENoYWxs
ZW5nZSh1aW50NjRfdCBjaGFsbGVuZ2VJRCk7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL0F1dGhlbnRpY2F0aW9uL21hYy9BdXRoZW50aWNhdGlvbk1hbmFnZXIubWFj
Lm1tIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9BdXRoZW50aWNhdGlvbi9tYWMvQXV0aGVu
dGljYXRpb25NYW5hZ2VyLm1hYy5tbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWE3
NzJjMy4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0F1dGhlbnRpY2F0
aW9uL21hYy9BdXRoZW50aWNhdGlvbk1hbmFnZXIubWFjLm1tCisrKyAvZGV2L251bGwKQEAgLTEs
NzIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJB
dXRoZW50aWNhdGlvbk1hbmFnZXIuaCIKLQotI2lmIFVTRShTRUNVUklUWV9GUkFNRVdPUkspCi0K
LSNpbmNsdWRlICJQbGF0Zm9ybUNlcnRpZmljYXRlSW5mby5oIgotI2luY2x1ZGUgPFNlY3VyaXR5
L1NlY0lkZW50aXR5Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9BdXRoZW50aWNhdGlvbkNoYWxsZW5n
ZS5oPgotCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0K
LWJvb2wgQXV0aGVudGljYXRpb25NYW5hZ2VyOjp0cnlVc2VQbGF0Zm9ybUNlcnRpZmljYXRlSW5m
b0ZvckNoYWxsZW5nZShjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYgY2hhbGxlbmdlLCBj
b25zdCBQbGF0Zm9ybUNlcnRpZmljYXRlSW5mbyYgY2VydGlmaWNhdGVJbmZvKQotewotICAgIC8v
IEZJWE1FIChOZXR3b3JrUHJvY2Vzcyk6IFRoaXMgb2NjdXJzIGluIHRoZSBXZWJQcm9jZXNzIGFu
ZCB0aGVyZWZvcmUgd29uJ3Qgd29yay4KLSAgICAvLyBXZSBuZWVkIHRoaXMgdG8gaGFwcGVuIGlu
IHRoZSBOZXR3b3JrUHJvY2Vzcy4KLQotICAgIENGQXJyYXlSZWYgY2hhaW4gPSBjZXJ0aWZpY2F0
ZUluZm8uY2VydGlmaWNhdGVDaGFpbigpOwotICAgIGlmICghY2hhaW4pCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgCi0gICAgQVNTRVJUKENGQXJyYXlHZXRDb3VudChjaGFpbikpOwot
Ci0gICAgLy8gVGhlIHBhc3NlZC1pbiBjZXJ0aWZpY2F0ZSBjaGFpbiBpbmNsdWRlcyB0aGUgaWRl
bnRpdHkgY2VydGlmaWNhdGUgYXQgaW5kZXggMCwgYW5kIGFkZGl0aW9uYWwgY2VydGlmaWNhdGVz
IHN0YXJ0aW5nIGF0IGluZGV4IDEuCi0gICAgU2VjSWRlbnRpdHlSZWYgaWRlbnRpdHk7Ci0gICAg
T1NTdGF0dXMgcmVzdWx0ID0gU2VjSWRlbnRpdHlDcmVhdGVXaXRoQ2VydGlmaWNhdGUoTlVMTCwg
KFNlY0NlcnRpZmljYXRlUmVmKUNGQXJyYXlHZXRWYWx1ZUF0SW5kZXgoY2hhaW4sIDApLCAmaWRl
bnRpdHkpOwotICAgIGlmIChyZXN1bHQgIT0gZXJyU2VjU3VjY2VzcykgewotICAgICAgICBMT0df
RVJST1IoIlVuYWJsZSB0byBjcmVhdGUgU2VjSWRlbnRpdHlSZWYgd2l0aCBjZXJ0aWZpY2F0ZSAt
ICVpIiwgcmVzdWx0KTsKLSAgICAgICAgW2NoYWxsZW5nZS5zZW5kZXIoKSBjYW5jZWxBdXRoZW50
aWNhdGlvbkNoYWxsZW5nZTpjaGFsbGVuZ2UubnNVUkxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSgp
XTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgQ0ZJbmRleCBjaGFpbkNvdW50
ID0gQ0ZBcnJheUdldENvdW50KGNoYWluKTsKLSAgICBOU0FycmF5ICpuc0NoYWluID0gY2hhaW5D
b3VudCA+IDEgPyBbKE5TQXJyYXkgKiljaGFpbiBzdWJhcnJheVdpdGhSYW5nZTpOU01ha2VSYW5n
ZSgxLCBjaGFpbkNvdW50IC0gMSldIDogbmlsOwotCi0gICAgTlNVUkxDcmVkZW50aWFsICpjcmVk
ZW50aWFsID0gW05TVVJMQ3JlZGVudGlhbCBjcmVkZW50aWFsV2l0aElkZW50aXR5OmlkZW50aXR5
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY2VydGlmaWNhdGVzOm5zQ2hhaW4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVyc2lzdGVuY2U6TlNVUkxDcmVkZW50
aWFsUGVyc2lzdGVuY2VOb25lXTsKLQotICAgIFtjaGFsbGVuZ2Uuc2VuZGVyKCkgdXNlQ3JlZGVu
dGlhbDpjcmVkZW50aWFsIGZvckF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlOmNoYWxsZW5nZS5uc1VS
TEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKCldOwotICAgIHJldHVybiB0cnVlOwotfQotCi19IC8v
IG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIFVTRShTRUNVUklUWV9GUkFNRVdPUkspCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZC5j
cHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZC5jcHAKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNmNjI0MTYuLjAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWQuY3BwCisrKyAvZGV2L251bGwK
QEAgLTEsMTYyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
LSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0g
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0jaW5jbHVkZSAiRG93bmxvYWQuaCIKLQotI2luY2x1ZGUgIkF1dGhlbnRpY2F0aW9uTWFuYWdl
ci5oIgotI2luY2x1ZGUgIkNvbm5lY3Rpb24uaCIKLSNpbmNsdWRlICJEYXRhUmVmZXJlbmNlLmgi
Ci0jaW5jbHVkZSAiRG93bmxvYWRBdXRoZW50aWNhdGlvbkNsaWVudC5oIgotI2luY2x1ZGUgIkRv
d25sb2FkUHJveHlNZXNzYWdlcy5oIgotI2luY2x1ZGUgIkRvd25sb2FkTWFuYWdlci5oIgotI2lu
Y2x1ZGUgIlNhbmRib3hFeHRlbnNpb24uaCIKLSNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2Rl
cnMuaCIKLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewot
Ci1QYXNzT3duUHRyPERvd25sb2FkPiBEb3dubG9hZDo6Y3JlYXRlKERvd25sb2FkTWFuYWdlciYg
ZG93bmxvYWRNYW5hZ2VyLCB1aW50NjRfdCBkb3dubG9hZElELCBjb25zdCBSZXNvdXJjZVJlcXVl
c3QmIHJlcXVlc3QpCi17Ci0gICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBEb3dubG9hZChkb3dubG9h
ZE1hbmFnZXIsIGRvd25sb2FkSUQsIHJlcXVlc3QpKTsKLX0KLQotRG93bmxvYWQ6OkRvd25sb2Fk
KERvd25sb2FkTWFuYWdlciYgZG93bmxvYWRNYW5hZ2VyLCB1aW50NjRfdCBkb3dubG9hZElELCBj
b25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCi0gICAgOiBtX2Rvd25sb2FkTWFuYWdlcihk
b3dubG9hZE1hbmFnZXIpCi0gICAgLCBtX2Rvd25sb2FkSUQoZG93bmxvYWRJRCkKLSAgICAsIG1f
cmVxdWVzdChyZXF1ZXN0KQotI2lmIFVTRShDRk5FVFdPUkspCi0gICAgLCBtX2FsbG93T3Zlcndy
aXRlKGZhbHNlKQotI2VuZGlmCi0jaWYgUExBVEZPUk0oUVQpCi0gICAgLCBtX3F0RG93bmxvYWRl
cigwKQotI2VuZGlmCi17Ci0gICAgQVNTRVJUKG1fZG93bmxvYWRJRCk7Ci0KLSAgICBtX2Rvd25s
b2FkTWFuYWdlci5kaWRDcmVhdGVEb3dubG9hZCgpOwotfQotCi1Eb3dubG9hZDo6fkRvd25sb2Fk
KCkKLXsKLSAgICBwbGF0Zm9ybUludmFsaWRhdGUoKTsKLQotICAgIG1fZG93bmxvYWRNYW5hZ2Vy
LmRpZERlc3Ryb3lEb3dubG9hZCgpOwotfQotCi1Db3JlSVBDOjpDb25uZWN0aW9uKiBEb3dubG9h
ZDo6Y29ubmVjdGlvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fZG93bmxvYWRNYW5hZ2VyLmRv
d25sb2FkUHJveHlDb25uZWN0aW9uKCk7Ci19Ci0KLXZvaWQgRG93bmxvYWQ6OmRpZFN0YXJ0KCkK
LXsKLSAgICBzZW5kKE1lc3NhZ2VzOjpEb3dubG9hZFByb3h5OjpEaWRTdGFydChtX3JlcXVlc3Qp
KTsKLX0KLQotdm9pZCBEb3dubG9hZDo6ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
KGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiBhdXRoZW50aWNhdGlvbkNoYWxsZW5nZSkK
LXsKLSAgICBtX2Rvd25sb2FkTWFuYWdlci5kb3dubG9hZHNBdXRoZW50aWNhdGlvbk1hbmFnZXIo
KS5kaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UodGhpcywgYXV0aGVudGljYXRpb25D
aGFsbGVuZ2UpOwotfQotCi12b2lkIERvd25sb2FkOjpkaWRSZWNlaXZlUmVzcG9uc2UoY29uc3Qg
UmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCi17Ci0gICAgc2VuZChNZXNzYWdlczo6RG93bmxv
YWRQcm94eTo6RGlkUmVjZWl2ZVJlc3BvbnNlKHJlc3BvbnNlKSk7Ci19Ci0KLXZvaWQgRG93bmxv
YWQ6OmRpZFJlY2VpdmVEYXRhKHVpbnQ2NF90IGxlbmd0aCkKLXsKLSAgICBzZW5kKE1lc3NhZ2Vz
OjpEb3dubG9hZFByb3h5OjpEaWRSZWNlaXZlRGF0YShsZW5ndGgpKTsKLX0KLQotYm9vbCBEb3du
bG9hZDo6c2hvdWxkRGVjb2RlU291cmNlRGF0YU9mTUlNRVR5cGUoY29uc3QgU3RyaW5nJiBtaW1l
VHlwZSkKLXsKLSAgICBib29sIHJlc3VsdDsKLSAgICBpZiAoIXNlbmRTeW5jKE1lc3NhZ2VzOjpE
b3dubG9hZFByb3h5OjpTaG91bGREZWNvZGVTb3VyY2VEYXRhT2ZNSU1FVHlwZShtaW1lVHlwZSks
IE1lc3NhZ2VzOjpEb3dubG9hZFByb3h5OjpTaG91bGREZWNvZGVTb3VyY2VEYXRhT2ZNSU1FVHlw
ZTo6UmVwbHkocmVzdWx0KSkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgcmV0dXJuIHJl
c3VsdDsKLX0KLQotU3RyaW5nIERvd25sb2FkOjpyZXRyaWV2ZURlc3RpbmF0aW9uV2l0aFN1Z2dl
c3RlZEZpbGVuYW1lKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIGJvb2wmIGFsbG93T3ZlcndyaXRl
KQotewotICAgIFN0cmluZyBkZXN0aW5hdGlvbjsKLSAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5k
bGUgc2FuZGJveEV4dGVuc2lvbkhhbmRsZTsKLSAgICBpZiAoIXNlbmRTeW5jKE1lc3NhZ2VzOjpE
b3dubG9hZFByb3h5OjpEZWNpZGVEZXN0aW5hdGlvbldpdGhTdWdnZXN0ZWRGaWxlbmFtZShmaWxl
bmFtZSksIE1lc3NhZ2VzOjpEb3dubG9hZFByb3h5OjpEZWNpZGVEZXN0aW5hdGlvbldpdGhTdWdn
ZXN0ZWRGaWxlbmFtZTo6UmVwbHkoZGVzdGluYXRpb24sIGFsbG93T3ZlcndyaXRlLCBzYW5kYm94
RXh0ZW5zaW9uSGFuZGxlKSkpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLQotICAgIG1fc2Fu
ZGJveEV4dGVuc2lvbiA9IFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZShzYW5kYm94RXh0ZW5zaW9u
SGFuZGxlKTsKLSAgICBpZiAobV9zYW5kYm94RXh0ZW5zaW9uKQotICAgICAgICBtX3NhbmRib3hF
eHRlbnNpb24tPmNvbnN1bWUoKTsKLQotICAgIHJldHVybiBkZXN0aW5hdGlvbjsKLX0KLQotU3Ry
aW5nIERvd25sb2FkOjpkZWNpZGVEZXN0aW5hdGlvbldpdGhTdWdnZXN0ZWRGaWxlbmFtZShjb25z
dCBTdHJpbmcmIGZpbGVuYW1lLCBib29sJiBhbGxvd092ZXJ3cml0ZSkKLXsKLSAgICBTdHJpbmcg
ZGVzdGluYXRpb24gPSByZXRyaWV2ZURlc3RpbmF0aW9uV2l0aFN1Z2dlc3RlZEZpbGVuYW1lKGZp
bGVuYW1lLCBhbGxvd092ZXJ3cml0ZSk7Ci0KLSAgICBkaWREZWNpZGVEZXN0aW5hdGlvbihkZXN0
aW5hdGlvbiwgYWxsb3dPdmVyd3JpdGUpOwotCi0gICAgcmV0dXJuIGRlc3RpbmF0aW9uOwotfQot
Ci12b2lkIERvd25sb2FkOjpkaWRDcmVhdGVEZXN0aW5hdGlvbihjb25zdCBTdHJpbmcmIHBhdGgp
Ci17Ci0gICAgc2VuZChNZXNzYWdlczo6RG93bmxvYWRQcm94eTo6RGlkQ3JlYXRlRGVzdGluYXRp
b24ocGF0aCkpOwotfQotCi12b2lkIERvd25sb2FkOjpkaWRGaW5pc2goKQotewotICAgIHBsYXRm
b3JtRGlkRmluaXNoKCk7Ci0KLSAgICBzZW5kKE1lc3NhZ2VzOjpEb3dubG9hZFByb3h5OjpEaWRG
aW5pc2goKSk7Ci0KLSAgICBpZiAobV9zYW5kYm94RXh0ZW5zaW9uKQotICAgICAgICBtX3NhbmRi
b3hFeHRlbnNpb24tPmludmFsaWRhdGUoKTsKLQotICAgIG1fZG93bmxvYWRNYW5hZ2VyLmRvd25s
b2FkRmluaXNoZWQodGhpcyk7Ci19Ci0KLXZvaWQgRG93bmxvYWQ6OmRpZEZhaWwoY29uc3QgUmVz
b3VyY2VFcnJvciYgZXJyb3IsIGNvbnN0IENvcmVJUEM6OkRhdGFSZWZlcmVuY2UmIHJlc3VtZURh
dGEpCi17Ci0gICAgc2VuZChNZXNzYWdlczo6RG93bmxvYWRQcm94eTo6RGlkRmFpbChlcnJvciwg
cmVzdW1lRGF0YSkpOwotCi0gICAgaWYgKG1fc2FuZGJveEV4dGVuc2lvbikKLSAgICAgICAgbV9z
YW5kYm94RXh0ZW5zaW9uLT5pbnZhbGlkYXRlKCk7Ci0gICAgbV9kb3dubG9hZE1hbmFnZXIuZG93
bmxvYWRGaW5pc2hlZCh0aGlzKTsKLX0KLQotdm9pZCBEb3dubG9hZDo6ZGlkQ2FuY2VsKGNvbnN0
IENvcmVJUEM6OkRhdGFSZWZlcmVuY2UmIHJlc3VtZURhdGEpCi17Ci0gICAgc2VuZChNZXNzYWdl
czo6RG93bmxvYWRQcm94eTo6RGlkQ2FuY2VsKHJlc3VtZURhdGEpKTsKLQotICAgIGlmIChtX3Nh
bmRib3hFeHRlbnNpb24pCi0gICAgICAgIG1fc2FuZGJveEV4dGVuc2lvbi0+aW52YWxpZGF0ZSgp
OwotICAgIG1fZG93bmxvYWRNYW5hZ2VyLmRvd25sb2FkRmluaXNoZWQodGhpcyk7Ci19Ci0KLX0g
Ly8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9Eb3dubG9hZHMvRG93bmxvYWQuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvRG93bmxv
YWRzL0Rvd25sb2FkLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc3Mzg3YjIuLjAw
MDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWQu
aAorKysgL2Rldi9udWxsCkBAIC0xLDE1NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEwLCAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lm
bmRlZiBEb3dubG9hZF9oCi0jZGVmaW5lIERvd25sb2FkX2gKLQotI2luY2x1ZGUgIk1lc3NhZ2VT
ZW5kZXIuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlUmVxdWVzdC5oPgotI2luY2x1ZGUg
PHd0Zi9Ob25jb3B5YWJsZS5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+Ci0KLSNpZiBQ
TEFURk9STShNQUMpCi0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotCi1PQkpDX0NMQVNTIE5T
VVJMRG93bmxvYWQ7Ci1PQkpDX0NMQVNTIFdLRG93bmxvYWRBc0RlbGVnYXRlOwotI2VuZGlmCi0K
LSNpZiBQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKEVGTCkKLSNpbmNsdWRlIDxXZWJDb3JlL1Jl
c291cmNlSGFuZGxlLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZUhhbmRsZUNsaWVudC5o
PgotI2VuZGlmCi0KLSNpZiBVU0UoQ0ZORVRXT1JLKQotI2luY2x1ZGUgPENGTmV0d29yay9DRlVS
TERvd25sb2FkUHJpdi5oPgotI2VuZGlmCi0KLW5hbWVzcGFjZSBDb3JlSVBDIHsKLSAgICBjbGFz
cyBEYXRhUmVmZXJlbmNlOwotfQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0gICAgY2xhc3MgQXV0
aGVudGljYXRpb25DaGFsbGVuZ2U7Ci0gICAgY2xhc3MgQ3JlZGVudGlhbDsKLSAgICBjbGFzcyBS
ZXNvdXJjZUVycm9yOwotICAgIGNsYXNzIFJlc291cmNlSGFuZGxlOwotICAgIGNsYXNzIFJlc291
cmNlUmVzcG9uc2U7Ci19Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1jbGFzcyBEb3dubG9hZEF1
dGhlbnRpY2F0aW9uQ2xpZW50OwotY2xhc3MgRG93bmxvYWRNYW5hZ2VyOwotY2xhc3MgU2FuZGJv
eEV4dGVuc2lvbjsKLWNsYXNzIFdlYlBhZ2U7Ci0KLSNpZiBQTEFURk9STShRVCkKLWNsYXNzIFF0
RmlsZURvd25sb2FkZXI7Ci0jZW5kaWYKLQotY2xhc3MgRG93bmxvYWQgOiBwdWJsaWMgQ29yZUlQ
Qzo6TWVzc2FnZVNlbmRlcjxEb3dubG9hZD4gewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKERv
d25sb2FkKTsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxEb3dubG9hZD4gY3JlYXRl
KERvd25sb2FkTWFuYWdlciYsIHVpbnQ2NF90IGRvd25sb2FkSUQsIGNvbnN0IFdlYkNvcmU6OlJl
c291cmNlUmVxdWVzdCYpOwotICAgIH5Eb3dubG9hZCgpOwotCi0gICAgLy8gVXNlZCBieSBNZXNz
YWdlU2VuZGVyLgotICAgIENvcmVJUEM6OkNvbm5lY3Rpb24qIGNvbm5lY3Rpb24oKSBjb25zdDsK
LSAgICB1aW50NjRfdCBkZXN0aW5hdGlvbklEKCkgY29uc3QgeyByZXR1cm4gZG93bmxvYWRJRCgp
OyB9Ci0KLSAgICB2b2lkIHN0YXJ0KCk7Ci0gICAgdm9pZCBzdGFydFdpdGhIYW5kbGUoV2ViQ29y
ZTo6UmVzb3VyY2VIYW5kbGUqLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJik7Ci0g
ICAgdm9pZCBjYW5jZWwoKTsKLQotICAgIHVpbnQ2NF90IGRvd25sb2FkSUQoKSBjb25zdCB7IHJl
dHVybiBtX2Rvd25sb2FkSUQ7IH0KLQotICAgIHZvaWQgZGlkU3RhcnQoKTsKLSAgICB2b2lkIGRp
ZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShjb25zdCBXZWJDb3JlOjpBdXRoZW50aWNh
dGlvbkNoYWxsZW5nZSYpOwotICAgIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlKGNvbnN0IFdlYkNv
cmU6OlJlc291cmNlUmVzcG9uc2UmKTsKLSAgICB2b2lkIGRpZFJlY2VpdmVEYXRhKHVpbnQ2NF90
IGxlbmd0aCk7Ci0gICAgYm9vbCBzaG91bGREZWNvZGVTb3VyY2VEYXRhT2ZNSU1FVHlwZShjb25z
dCBTdHJpbmcmIG1pbWVUeXBlKTsKLSAgICBTdHJpbmcgZGVjaWRlRGVzdGluYXRpb25XaXRoU3Vn
Z2VzdGVkRmlsZW5hbWUoY29uc3QgU3RyaW5nJiBmaWxlbmFtZSwgYm9vbCYgYWxsb3dPdmVyd3Jp
dGUpOwotICAgIHZvaWQgZGlkQ3JlYXRlRGVzdGluYXRpb24oY29uc3QgU3RyaW5nJiBwYXRoKTsK
LSAgICB2b2lkIGRpZEZpbmlzaCgpOwotICAgIHZvaWQgcGxhdGZvcm1EaWRGaW5pc2goKTsKLSAg
ICB2b2lkIGRpZEZhaWwoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYsIGNvbnN0IENvcmVJ
UEM6OkRhdGFSZWZlcmVuY2UmIHJlc3VtZURhdGEpOwotICAgIHZvaWQgZGlkQ2FuY2VsKGNvbnN0
IENvcmVJUEM6OkRhdGFSZWZlcmVuY2UmIHJlc3VtZURhdGEpOwotICAgIHZvaWQgZGlkRGVjaWRl
RGVzdGluYXRpb24oY29uc3QgU3RyaW5nJiwgYm9vbCBhbGxvd092ZXJ3cml0ZSk7Ci0KLSNpZiBQ
TEFURk9STShRVCkKLSAgICB2b2lkIHN0YXJ0VHJhbnNmZXIoY29uc3QgU3RyaW5nJiBkZXN0aW5h
dGlvbik7Ci0jZW5kaWYKLQotI2lmIFVTRShDRk5FVFdPUkspCi0gICAgY29uc3QgU3RyaW5nJiBk
ZXN0aW5hdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZGVzdGluYXRpb247IH0KLSAgICBEb3dubG9h
ZEF1dGhlbnRpY2F0aW9uQ2xpZW50KiBhdXRoZW50aWNhdGlvbkNsaWVudCgpOwotI2VuZGlmCi0K
LSAgICAvLyBBdXRoZW50aWNhdGlvbgotICAgIHN0YXRpYyB2b2lkIHJlY2VpdmVkQ3JlZGVudGlh
bChjb25zdCBXZWJDb3JlOjpBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYsIGNvbnN0IFdlYkNvcmU6
OkNyZWRlbnRpYWwmKTsKLSAgICBzdGF0aWMgdm9pZCByZWNlaXZlZFJlcXVlc3RUb0NvbnRpbnVl
V2l0aG91dENyZWRlbnRpYWwoY29uc3QgV2ViQ29yZTo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2Um
KTsKLSAgICBzdGF0aWMgdm9pZCByZWNlaXZlZENhbmNlbGxhdGlvbihjb25zdCBXZWJDb3JlOjpB
dXRoZW50aWNhdGlvbkNoYWxsZW5nZSYpOwotCi0gICAgdm9pZCB1c2VDcmVkZW50aWFsKGNvbnN0
IFdlYkNvcmU6OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiwgY29uc3QgV2ViQ29yZTo6Q3JlZGVu
dGlhbCYpOwotICAgIHZvaWQgY29udGludWVXaXRob3V0Q3JlZGVudGlhbChjb25zdCBXZWJDb3Jl
OjpBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYpOwotICAgIHZvaWQgY2FuY2VsQXV0aGVudGljYXRp
b25DaGFsbGVuZ2UoY29uc3QgV2ViQ29yZTo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2UmKTsKLQot
cHJpdmF0ZToKLSAgICBEb3dubG9hZChEb3dubG9hZE1hbmFnZXImLCB1aW50NjRfdCBkb3dubG9h
ZElELCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmKTsKLQotICAgIHZvaWQgcGxhdGZv
cm1JbnZhbGlkYXRlKCk7Ci0KLSAgICBTdHJpbmcgcmV0cmlldmVEZXN0aW5hdGlvbldpdGhTdWdn
ZXN0ZWRGaWxlbmFtZShjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBib29sJiBhbGxvd092ZXJ3cml0
ZSk7Ci0KLSAgICBEb3dubG9hZE1hbmFnZXImIG1fZG93bmxvYWRNYW5hZ2VyOwotICAgIHVpbnQ2
NF90IG1fZG93bmxvYWRJRDsKLSAgICBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QgbV9yZXF1ZXN0
OwotCi0gICAgUmVmUHRyPFNhbmRib3hFeHRlbnNpb24+IG1fc2FuZGJveEV4dGVuc2lvbjsKLQot
I2lmIFBMQVRGT1JNKE1BQykKLSAgICBSZXRhaW5QdHI8TlNVUkxEb3dubG9hZD4gbV9uc1VSTERv
d25sb2FkOwotICAgIFJldGFpblB0cjxXS0Rvd25sb2FkQXNEZWxlZ2F0ZT4gbV9kZWxlZ2F0ZTsK
LSNlbmRpZgotICAgIGJvb2wgbV9hbGxvd092ZXJ3cml0ZTsKLSAgICBTdHJpbmcgbV9kZXN0aW5h
dGlvbjsKLSAgICBTdHJpbmcgbV9idW5kbGVQYXRoOwotI2lmIFVTRShDRk5FVFdPUkspCi0gICAg
UmV0YWluUHRyPENGVVJMRG93bmxvYWRSZWY+IG1fZG93bmxvYWQ7Ci0gICAgUmVmUHRyPERvd25s
b2FkQXV0aGVudGljYXRpb25DbGllbnQ+IG1fYXV0aGVudGljYXRpb25DbGllbnQ7Ci0jZW5kaWYK
LSNpZiBQTEFURk9STShRVCkKLSAgICBRdEZpbGVEb3dubG9hZGVyKiBtX3F0RG93bmxvYWRlcjsK
LSNlbmRpZgotI2lmIFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oRUZMKQotICAgIE93blB0cjxX
ZWJDb3JlOjpSZXNvdXJjZUhhbmRsZUNsaWVudD4gbV9kb3dubG9hZENsaWVudDsKLSAgICBSZWZQ
dHI8V2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU+IG1fcmVzb3VyY2VIYW5kbGU7Ci0jZW5kaWYKLX07
Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gRG93bmxvYWRfaApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRBdXRoZW50
aWNhdGlvbkNsaWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0Rvd25sb2Fkcy9E
b3dubG9hZEF1dGhlbnRpY2F0aW9uQ2xpZW50LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMmYxNTgwZi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0Rv
d25sb2Fkcy9Eb3dubG9hZEF1dGhlbnRpY2F0aW9uQ2xpZW50LmNwcAorKysgL2Rldi9udWxsCkBA
IC0xLDYyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiRG93bmxvYWRBdXRoZW50aWNhdGlvbkNsaWVudC5oIgotCi0jaW5jbHVkZSAiRG93bmxvYWQu
aCIKLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1E
b3dubG9hZEF1dGhlbnRpY2F0aW9uQ2xpZW50OjpEb3dubG9hZEF1dGhlbnRpY2F0aW9uQ2xpZW50
KERvd25sb2FkKiBkb3dubG9hZCkKLSAgICA6IG1fZG93bmxvYWQoZG93bmxvYWQpCi17Ci0gICAg
QVNTRVJUX0FSRyhkb3dubG9hZCwgZG93bmxvYWQpOwotfQotCi12b2lkIERvd25sb2FkQXV0aGVu
dGljYXRpb25DbGllbnQ6OnJlY2VpdmVkQ3JlZGVudGlhbChjb25zdCBBdXRoZW50aWNhdGlvbkNo
YWxsZW5nZSYgY2hhbGxlbmdlLCBjb25zdCBDcmVkZW50aWFsJiBjcmVkZW50aWFsKQotewotICAg
IGlmICghbV9kb3dubG9hZCkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fZG93bmxvYWQtPnVzZUNy
ZWRlbnRpYWwoY2hhbGxlbmdlLCBjcmVkZW50aWFsKTsKLX0KLQotdm9pZCBEb3dubG9hZEF1dGhl
bnRpY2F0aW9uQ2xpZW50OjpyZWNlaXZlZFJlcXVlc3RUb0NvbnRpbnVlV2l0aG91dENyZWRlbnRp
YWwoY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmIGNoYWxsZW5nZSkKLXsKLSAgICBpZiAo
IW1fZG93bmxvYWQpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2Rvd25sb2FkLT5jb250aW51ZVdp
dGhvdXRDcmVkZW50aWFsKGNoYWxsZW5nZSk7Ci19Ci0KLXZvaWQgRG93bmxvYWRBdXRoZW50aWNh
dGlvbkNsaWVudDo6cmVjZWl2ZWRDYW5jZWxsYXRpb24oY29uc3QgQXV0aGVudGljYXRpb25DaGFs
bGVuZ2UmIGNoYWxsZW5nZSkKLXsKLSAgICBpZiAoIW1fZG93bmxvYWQpCi0gICAgICAgIHJldHVy
bjsKLSAgICBtX2Rvd25sb2FkLT5jYW5jZWxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShjaGFsbGVu
Z2UpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkQXV0aGVudGljYXRpb25DbGllbnQuaCBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkQXV0aGVudGljYXRp
b25DbGllbnQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzYzMjFhZS4uMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZEF1dGhl
bnRpY2F0aW9uQ2xpZW50LmgKKysrIC9kZXYvbnVsbApAQCAtMSw2NiArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
LSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
Ci0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotI2lmbmRlZiBEb3dubG9hZEF1dGhlbnRpY2F0aW9uQ2xpZW50X2gKLSNkZWZpbmUgRG93
bmxvYWRBdXRoZW50aWNhdGlvbkNsaWVudF9oCi0KLSNpbmNsdWRlIDxXZWJDb3JlL0F1dGhlbnRp
Y2F0aW9uQ2xpZW50Lmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KLSNpbmNsdWRlIDx3
dGYvUmVmQ291bnRlZC5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0gICAgY2xhc3MgQXV0aGVu
dGljYXRpb25DaGFsbGVuZ2U7Ci0gICAgY2xhc3MgQ3JlZGVudGlhbDsKLX0KLQotbmFtZXNwYWNl
IFdlYktpdCB7Ci0KLWNsYXNzIERvd25sb2FkOwotCi1jbGFzcyBEb3dubG9hZEF1dGhlbnRpY2F0
aW9uQ2xpZW50IDogcHVibGljIFJlZkNvdW50ZWQ8RG93bmxvYWRBdXRoZW50aWNhdGlvbkNsaWVu
dD4sIHB1YmxpYyBXZWJDb3JlOjpBdXRoZW50aWNhdGlvbkNsaWVudCB7Ci1wdWJsaWM6Ci0gICAg
c3RhdGljIFBhc3NSZWZQdHI8RG93bmxvYWRBdXRoZW50aWNhdGlvbkNsaWVudD4gY3JlYXRlKERv
d25sb2FkKiBkb3dubG9hZCkgeyByZXR1cm4gYWRvcHRSZWYobmV3IERvd25sb2FkQXV0aGVudGlj
YXRpb25DbGllbnQoZG93bmxvYWQpKTsgfQotCi0gICAgdm9pZCBkZXRhY2goKSB7IG1fZG93bmxv
YWQgPSAwOyB9Ci0KLSAgICB1c2luZyBSZWZDb3VudGVkPERvd25sb2FkQXV0aGVudGljYXRpb25D
bGllbnQ+OjpyZWY7Ci0gICAgdXNpbmcgUmVmQ291bnRlZDxEb3dubG9hZEF1dGhlbnRpY2F0aW9u
Q2xpZW50Pjo6ZGVyZWY7Ci0KLXByaXZhdGU6Ci0gICAgRG93bmxvYWRBdXRoZW50aWNhdGlvbkNs
aWVudChEb3dubG9hZCopOwotCi0gICAgdmlydHVhbCB2b2lkIHJlY2VpdmVkQ3JlZGVudGlhbChj
b25zdCBXZWJDb3JlOjpBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYsIGNvbnN0IFdlYkNvcmU6OkNy
ZWRlbnRpYWwmKTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjZWl2ZWRSZXF1ZXN0VG9Db250aW51ZVdp
dGhvdXRDcmVkZW50aWFsKGNvbnN0IFdlYkNvcmU6OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJik7
Ci0gICAgdmlydHVhbCB2b2lkIHJlY2VpdmVkQ2FuY2VsbGF0aW9uKGNvbnN0IFdlYkNvcmU6OkF1
dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJik7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgcmVmQXV0aGVudGlj
YXRpb25DbGllbnQoKSB7IHJlZigpOyB9Ci0gICAgdmlydHVhbCB2b2lkIGRlcmVmQXV0aGVudGlj
YXRpb25DbGllbnQoKSB7IGRlcmVmKCk7IH0KLQotICAgIERvd25sb2FkKiBtX2Rvd25sb2FkOwot
fTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBEb3dubG9hZEF1dGhlbnRp
Y2F0aW9uQ2xpZW50X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvRG93
bmxvYWRzL0Rvd25sb2FkTWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0Rv
d25sb2Fkcy9Eb3dubG9hZE1hbmFnZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCBiOTE3MmUwLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvRG93bmxv
YWRzL0Rvd25sb2FkTWFuYWdlci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMDUgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJEb3dubG9hZE1hbmFn
ZXIuaCIKLQotI2luY2x1ZGUgIkRvd25sb2FkLmgiCi0jaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJh
cy5oPgotCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0K
LURvd25sb2FkTWFuYWdlcjo6RG93bmxvYWRNYW5hZ2VyKENsaWVudCogY2xpZW50KQotICAgIDog
bV9jbGllbnQoY2xpZW50KQotewotfQotCi12b2lkIERvd25sb2FkTWFuYWdlcjo6c3RhcnREb3du
bG9hZCh1aW50NjRfdCBkb3dubG9hZElELCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3Qp
Ci17Ci0gICAgT3duUHRyPERvd25sb2FkPiBkb3dubG9hZCA9IERvd25sb2FkOjpjcmVhdGUoKnRo
aXMsIGRvd25sb2FkSUQsIHJlcXVlc3QpOwotICAgIGRvd25sb2FkLT5zdGFydCgpOwotCi0gICAg
QVNTRVJUKCFtX2Rvd25sb2Fkcy5jb250YWlucyhkb3dubG9hZElEKSk7Ci0gICAgbV9kb3dubG9h
ZHMuc2V0KGRvd25sb2FkSUQsIGRvd25sb2FkLmxlYWtQdHIoKSk7Ci19Ci0KLXZvaWQgRG93bmxv
YWRNYW5hZ2VyOjpjb252ZXJ0SGFuZGxlVG9Eb3dubG9hZCh1aW50NjRfdCBkb3dubG9hZElELCBS
ZXNvdXJjZUhhbmRsZSogaGFuZGxlLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNv
bnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQotewotICAgIE93blB0cjxEb3dubG9hZD4g
ZG93bmxvYWQgPSBEb3dubG9hZDo6Y3JlYXRlKCp0aGlzLCBkb3dubG9hZElELCByZXF1ZXN0KTsK
LQotICAgIGRvd25sb2FkLT5zdGFydFdpdGhIYW5kbGUoaGFuZGxlLCByZXNwb25zZSk7Ci0gICAg
QVNTRVJUKCFtX2Rvd25sb2Fkcy5jb250YWlucyhkb3dubG9hZElEKSk7Ci0gICAgbV9kb3dubG9h
ZHMuc2V0KGRvd25sb2FkSUQsIGRvd25sb2FkLmxlYWtQdHIoKSk7Ci19Ci0KLXZvaWQgRG93bmxv
YWRNYW5hZ2VyOjpjYW5jZWxEb3dubG9hZCh1aW50NjRfdCBkb3dubG9hZElEKQotewotICAgIERv
d25sb2FkKiBkb3dubG9hZCA9IG1fZG93bmxvYWRzLmdldChkb3dubG9hZElEKTsKLSAgICBpZiAo
IWRvd25sb2FkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBkb3dubG9hZC0+Y2FuY2VsKCk7Ci19
Ci0KLXZvaWQgRG93bmxvYWRNYW5hZ2VyOjpkb3dubG9hZEZpbmlzaGVkKERvd25sb2FkKiBkb3du
bG9hZCkKLXsKLSAgICBBU1NFUlQobV9kb3dubG9hZHMuY29udGFpbnMoZG93bmxvYWQtPmRvd25s
b2FkSUQoKSkpOwotICAgIG1fZG93bmxvYWRzLnJlbW92ZShkb3dubG9hZC0+ZG93bmxvYWRJRCgp
KTsKLQotICAgIGRlbGV0ZSBkb3dubG9hZDsKLX0KLQotdm9pZCBEb3dubG9hZE1hbmFnZXI6OmRp
ZENyZWF0ZURvd25sb2FkKCkKLXsKLSAgICBtX2NsaWVudC0+ZGlkQ3JlYXRlRG93bmxvYWQoKTsK
LX0KLQotdm9pZCBEb3dubG9hZE1hbmFnZXI6OmRpZERlc3Ryb3lEb3dubG9hZCgpCi17Ci0gICAg
bV9jbGllbnQtPmRpZERlc3Ryb3lEb3dubG9hZCgpOwotfQotCi1Db3JlSVBDOjpDb25uZWN0aW9u
KiBEb3dubG9hZE1hbmFnZXI6OmRvd25sb2FkUHJveHlDb25uZWN0aW9uKCkKLXsKLSAgICByZXR1
cm4gbV9jbGllbnQtPmRvd25sb2FkUHJveHlDb25uZWN0aW9uKCk7Ci19Ci0KLUF1dGhlbnRpY2F0
aW9uTWFuYWdlciYgRG93bmxvYWRNYW5hZ2VyOjpkb3dubG9hZHNBdXRoZW50aWNhdGlvbk1hbmFn
ZXIoKQotewotICAgIHJldHVybiBtX2NsaWVudC0+ZG93bmxvYWRzQXV0aGVudGljYXRpb25NYW5h
Z2VyKCk7Ci19Ci0KLSNpZiBQTEFURk9STShRVCkKLXZvaWQgRG93bmxvYWRNYW5hZ2VyOjpzdGFy
dFRyYW5zZmVyKHVpbnQ2NF90IGRvd25sb2FkSUQsIGNvbnN0IFN0cmluZyYgZGVzdGluYXRpb24p
Ci17Ci0gICAgQVNTRVJUKG1fZG93bmxvYWRzLmNvbnRhaW5zKGRvd25sb2FkSUQpKTsKLSAgICBE
b3dubG9hZCogZG93bmxvYWQgPSBtX2Rvd25sb2Fkcy5nZXQoZG93bmxvYWRJRCk7Ci0gICAgZG93
bmxvYWQtPnN0YXJ0VHJhbnNmZXIoZGVzdGluYXRpb24pOwotfQotI2VuZGlmCi0KLX0gLy8gbmFt
ZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Eb3du
bG9hZHMvRG93bmxvYWRNYW5hZ2VyLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0Rvd25s
b2Fkcy9Eb3dubG9hZE1hbmFnZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGI5
MDFlMi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0Rvd25sb2Fkcy9E
b3dubG9hZE1hbmFnZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDkwICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jaWZuZGVmIERvd25sb2FkTWFuYWdlcl9oCi0jZGVmaW5lIERvd25sb2FkTWFuYWdlcl9o
Ci0KLSNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0j
aW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLWNsYXNz
IFJlc291cmNlSGFuZGxlOwotY2xhc3MgUmVzb3VyY2VSZXF1ZXN0OwotY2xhc3MgUmVzb3VyY2VS
ZXNwb25zZTsKLX0KLQotbmFtZXNwYWNlIENvcmVJUEMgewotY2xhc3MgQ29ubmVjdGlvbjsKLX0K
LQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIEF1dGhlbnRpY2F0aW9uTWFuYWdlcjsKLWNs
YXNzIERvd25sb2FkOwotY2xhc3MgV2ViUGFnZTsKLQotY2xhc3MgRG93bmxvYWRNYW5hZ2VyIHsK
LSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShEb3dubG9hZE1hbmFnZXIpOwotCi1wdWJsaWM6Ci0g
ICAgY2xhc3MgQ2xpZW50IHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIHZpcnR1YWwgfkNsaWVudCgp
IHsgfQotCi0gICAgICAgIHZpcnR1YWwgdm9pZCBkaWRDcmVhdGVEb3dubG9hZCgpID0gMDsKLSAg
ICAgICAgdmlydHVhbCB2b2lkIGRpZERlc3Ryb3lEb3dubG9hZCgpID0gMDsKLSAgICAgICAgdmly
dHVhbCBDb3JlSVBDOjpDb25uZWN0aW9uKiBkb3dubG9hZFByb3h5Q29ubmVjdGlvbigpID0gMDsK
LSAgICAgICAgdmlydHVhbCBBdXRoZW50aWNhdGlvbk1hbmFnZXImIGRvd25sb2Fkc0F1dGhlbnRp
Y2F0aW9uTWFuYWdlcigpID0gMDsKLSAgICB9OwotCi0gICAgZXhwbGljaXQgRG93bmxvYWRNYW5h
Z2VyKENsaWVudCopOwotCi0gICAgdm9pZCBzdGFydERvd25sb2FkKHVpbnQ2NF90IGRvd25sb2Fk
SUQsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYpOwotICAgIHZvaWQgY29udmVydEhh
bmRsZVRvRG93bmxvYWQodWludDY0X3QgZG93bmxvYWRJRCwgV2ViQ29yZTo6UmVzb3VyY2VIYW5k
bGUqLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBXZWJDb3JlOjpSZXNv
dXJjZVJlc3BvbnNlJik7Ci0KLSAgICB2b2lkIGNhbmNlbERvd25sb2FkKHVpbnQ2NF90IGRvd25s
b2FkSUQpOwotCi0gICAgdm9pZCBkb3dubG9hZEZpbmlzaGVkKERvd25sb2FkKik7Ci0gICAgYm9v
bCBpc0Rvd25sb2FkaW5nKCkgY29uc3QgeyByZXR1cm4gIW1fZG93bmxvYWRzLmlzRW1wdHkoKTsg
fQotCi0gICAgdm9pZCBkaWRDcmVhdGVEb3dubG9hZCgpOwotICAgIHZvaWQgZGlkRGVzdHJveURv
d25sb2FkKCk7Ci0KLSAgICBDb3JlSVBDOjpDb25uZWN0aW9uKiBkb3dubG9hZFByb3h5Q29ubmVj
dGlvbigpOwotICAgIEF1dGhlbnRpY2F0aW9uTWFuYWdlciYgZG93bmxvYWRzQXV0aGVudGljYXRp
b25NYW5hZ2VyKCk7Ci0KLSNpZiBQTEFURk9STShRVCkKLSAgICB2b2lkIHN0YXJ0VHJhbnNmZXIo
dWludDY0X3QgZG93bmxvYWRJRCwgY29uc3QgU3RyaW5nJiBkZXN0aW5hdGlvbik7Ci0jZW5kaWYK
LQotcHJpdmF0ZToKLSAgICBDbGllbnQqIG1fY2xpZW50OwotICAgIEhhc2hNYXA8dWludDY0X3Qs
IERvd25sb2FkKj4gbV9kb3dubG9hZHM7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQot
I2VuZGlmIC8vIERvd25sb2FkTWFuYWdlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL0Rvd25sb2Fkcy9jZm5ldC9Eb3dubG9hZENGTmV0LmNwcCBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvRG93bmxvYWRzL2NmbmV0L0Rvd25sb2FkQ0ZOZXQuY3BwCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0OWIzODYxLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvRG93bmxvYWRzL2NmbmV0L0Rvd25sb2FkQ0ZOZXQuY3BwCisrKyAvZGV2
L251bGwKQEAgLTEsMjY2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
Ci0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
LSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29u
ZmlnLmgiCi0jaW5jbHVkZSAiRG93bmxvYWQuaCIKLQotI2luY2x1ZGUgIkRhdGFSZWZlcmVuY2Uu
aCIKLSNpbmNsdWRlICJEb3dubG9hZEF1dGhlbnRpY2F0aW9uQ2xpZW50LmgiCi0KLSNwcmFnbWEg
d2FybmluZyhwdXNoLCAwKQotI2luY2x1ZGUgPFdlYkNvcmUvQXV0aGVudGljYXRpb25DRi5oPgot
I2luY2x1ZGUgPFdlYkNvcmUvQXV0aGVudGljYXRpb25DaGFsbGVuZ2UuaD4KLSNpbmNsdWRlIDxX
ZWJDb3JlL0Rvd25sb2FkQnVuZGxlLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9Mb2FkZXJSdW5Mb29w
Q0YuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL05vdEltcGxlbWVudGVkLmg+Ci0jaW5jbHVkZSA8V2Vi
Q29yZS9SZXNvdXJjZUVycm9yLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZUhhbmRsZS5o
PgotI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VSZXNwb25zZS5oPgotI3ByYWdtYSB3YXJuaW5n
KHBvcCkKLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewot
Ci0vLyBDRlVSTERvd25sb2FkIENhbGxiYWNrcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1zdGF0aWMgdm9pZCBkaWRTdGFy
dENhbGxiYWNrKENGVVJMRG93bmxvYWRSZWYgZG93bmxvYWQsIGNvbnN0IHZvaWQqIGNsaWVudElu
Zm8pOwotc3RhdGljIENGVVJMUmVxdWVzdFJlZiB3aWxsU2VuZFJlcXVlc3RDYWxsYmFjayhDRlVS
TERvd25sb2FkUmVmIGRvd25sb2FkLCBDRlVSTFJlcXVlc3RSZWYgcmVxdWVzdCwgQ0ZVUkxSZXNw
b25zZVJlZiByZWRpcmVjdGlvblJlc3BvbnNlLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKTsKLXN0
YXRpYyB2b2lkIGRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZUNhbGxiYWNrKENGVVJM
RG93bmxvYWRSZWYgZG93bmxvYWQsIENGVVJMQXV0aENoYWxsZW5nZVJlZiBjaGFsbGVuZ2UsIGNv
bnN0IHZvaWQqIGNsaWVudEluZm8pOwotc3RhdGljIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlQ2Fs
bGJhY2soQ0ZVUkxEb3dubG9hZFJlZiBkb3dubG9hZCwgQ0ZVUkxSZXNwb25zZVJlZiByZXNwb25z
ZSwgY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7Ci1zdGF0aWMgdm9pZCB3aWxsUmVzdW1lV2l0aFJl
c3BvbnNlQ2FsbGJhY2soQ0ZVUkxEb3dubG9hZFJlZiBkb3dubG9hZCwgQ0ZVUkxSZXNwb25zZVJl
ZiByZXNwb25zZSwgVUludDY0IHN0YXJ0aW5nQnl0ZSwgY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7
Ci1zdGF0aWMgdm9pZCBkaWRSZWNlaXZlRGF0YUNhbGxiYWNrKENGVVJMRG93bmxvYWRSZWYgZG93
bmxvYWQsIENGSW5kZXggbGVuZ3RoLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKTsKLXN0YXRpYyBC
b29sZWFuIHNob3VsZERlY29kZURhdGFPZk1JTUVUeXBlQ2FsbGJhY2soQ0ZVUkxEb3dubG9hZFJl
ZiBkb3dubG9hZCwgQ0ZTdHJpbmdSZWYgZW5jb2RpbmdUeXBlLCBjb25zdCB2b2lkKiBjbGllbnRJ
bmZvKTsKLXN0YXRpYyB2b2lkIGRlY2lkZURlc3RpbmF0aW9uV2l0aFN1Z2dlc3RlZE9iamVjdE5h
bWVDYWxsYmFjayhDRlVSTERvd25sb2FkUmVmIGRvd25sb2FkLCBDRlN0cmluZ1JlZiBvYmplY3RO
YW1lLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKTsKLXN0YXRpYyB2b2lkIGRpZENyZWF0ZURlc3Rp
bmF0aW9uQ2FsbGJhY2soQ0ZVUkxEb3dubG9hZFJlZiBkb3dubG9hZCwgQ0ZVUkxSZWYgcGF0aCwg
Y29uc3Qgdm9pZCogY2xpZW50SW5mbyk7Ci1zdGF0aWMgdm9pZCBkaWRGaW5pc2hDYWxsYmFjayhD
RlVSTERvd25sb2FkUmVmIGRvd25sb2FkLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKTsKLXN0YXRp
YyB2b2lkIGRpZEZhaWxDYWxsYmFjayhDRlVSTERvd25sb2FkUmVmIGRvd25sb2FkLCBDRkVycm9y
UmVmIGVycm9yLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKTsKLQotdm9pZCBEb3dubG9hZDo6dXNl
Q3JlZGVudGlhbChjb25zdCBXZWJDb3JlOjpBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYgY2hhbGxl
bmdlLCBjb25zdCBXZWJDb3JlOjpDcmVkZW50aWFsJiBjcmVkZW50aWFsKQotewotICAgIGlmICgh
bV9kb3dubG9hZCkKLSAgICAgICAgcmV0dXJuOwotICAgIFJldGFpblB0cjxDRlVSTENyZWRlbnRp
YWxSZWY+IGNmQ3JlZGVudGlhbChBZG9wdENGLCBjcmVhdGVDRihjcmVkZW50aWFsKSk7Ci0gICAg
Q0ZVUkxEb3dubG9hZFVzZUNyZWRlbnRpYWwobV9kb3dubG9hZC5nZXQoKSwgY2ZDcmVkZW50aWFs
LmdldCgpLCBjaGFsbGVuZ2UuY2ZVUkxBdXRoQ2hhbGxlbmdlUmVmKCkpOwotfQotCi12b2lkIERv
d25sb2FkOjpjb250aW51ZVdpdGhvdXRDcmVkZW50aWFsKGNvbnN0IFdlYkNvcmU6OkF1dGhlbnRp
Y2F0aW9uQ2hhbGxlbmdlJiBjaGFsbGVuZ2UpCi17Ci0gICAgaWYgKCFtX2Rvd25sb2FkKQotICAg
ICAgICByZXR1cm47Ci0gICAgQ0ZVUkxEb3dubG9hZFVzZUNyZWRlbnRpYWwobV9kb3dubG9hZC5n
ZXQoKSwgMCwgY2hhbGxlbmdlLmNmVVJMQXV0aENoYWxsZW5nZVJlZigpKTsKLX0KLQotdm9pZCBE
b3dubG9hZDo6Y2FuY2VsQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoY29uc3QgV2ViQ29yZTo6QXV0
aGVudGljYXRpb25DaGFsbGVuZ2UmKQotewotICAgIGlmICghbV9kb3dubG9hZCkKLSAgICAgICAg
cmV0dXJuOwotICAgIENGVVJMRG93bmxvYWRDYW5jZWwobV9kb3dubG9hZC5nZXQoKSk7Ci0gICAg
bV9kb3dubG9hZCA9IDA7Ci19Ci0KLURvd25sb2FkQXV0aGVudGljYXRpb25DbGllbnQqIERvd25s
b2FkOjphdXRoZW50aWNhdGlvbkNsaWVudCgpCi17Ci0gICAgaWYgKCFtX2F1dGhlbnRpY2F0aW9u
Q2xpZW50KQotICAgICAgICBtX2F1dGhlbnRpY2F0aW9uQ2xpZW50ID0gRG93bmxvYWRBdXRoZW50
aWNhdGlvbkNsaWVudDo6Y3JlYXRlKHRoaXMpOwotICAgIHJldHVybiBtX2F1dGhlbnRpY2F0aW9u
Q2xpZW50LmdldCgpOwotfQotCi12b2lkIERvd25sb2FkOjpzdGFydCgpCi17Ci0gICAgQVNTRVJU
KCFtX2Rvd25sb2FkKTsKLQotICAgIENGVVJMUmVxdWVzdFJlZiBjZlJlcXVlc3QgPSBtX3JlcXVl
c3QuY2ZVUkxSZXF1ZXN0KCk7Ci0KLSAgICBDRlVSTERvd25sb2FkQ2xpZW50IGNsaWVudCA9IHsw
LCB0aGlzLCAwLCAwLCAwLCBkaWRTdGFydENhbGxiYWNrLCB3aWxsU2VuZFJlcXVlc3RDYWxsYmFj
aywgZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlQ2FsbGJhY2ssIAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGRpZFJlY2VpdmVSZXNwb25zZUNhbGxiYWNrLCB3aWxs
UmVzdW1lV2l0aFJlc3BvbnNlQ2FsbGJhY2ssIGRpZFJlY2VpdmVEYXRhQ2FsbGJhY2ssIHNob3Vs
ZERlY29kZURhdGFPZk1JTUVUeXBlQ2FsbGJhY2ssIAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGRlY2lkZURlc3RpbmF0aW9uV2l0aFN1Z2dlc3RlZE9iamVjdE5hbWVDYWxsYmFj
aywgZGlkQ3JlYXRlRGVzdGluYXRpb25DYWxsYmFjaywgZGlkRmluaXNoQ2FsbGJhY2ssIGRpZEZh
aWxDYWxsYmFja307Ci0gICAgbV9kb3dubG9hZC5hZG9wdENGKENGVVJMRG93bmxvYWRDcmVhdGUo
MCwgY2ZSZXF1ZXN0LCAmY2xpZW50KSk7Ci0KLSAgICAvLyBGSVhNRTogQWxsb3cgdGhpcyB0byBi
ZSBjaGFuZ2VkIGJ5IHRoZSBjbGllbnQuCi0gICAgQ0ZVUkxEb3dubG9hZFNldERlbGV0ZXNVcG9u
RmFpbHVyZShtX2Rvd25sb2FkLmdldCgpLCBmYWxzZSk7Ci0KLSNpZiBPUyhXSU5ET1dTKQotICAg
IENGVVJMRG93bmxvYWRTY2hlZHVsZVdpdGhDdXJyZW50TWVzc2FnZVF1ZXVlKG1fZG93bmxvYWQu
Z2V0KCkpOwotI2VuZGlmCi0gICAgQ0ZVUkxEb3dubG9hZFNjaGVkdWxlRG93bmxvYWRXaXRoUnVu
TG9vcChtX2Rvd25sb2FkLmdldCgpLCBsb2FkZXJSdW5Mb29wKCksIGtDRlJ1bkxvb3BEZWZhdWx0
TW9kZSk7Ci0KLSAgICBDRlVSTERvd25sb2FkU3RhcnQobV9kb3dubG9hZC5nZXQoKSk7Ci19Ci0K
LXZvaWQgRG93bmxvYWQ6OnN0YXJ0V2l0aEhhbmRsZShSZXNvdXJjZUhhbmRsZSogaGFuZGxlLCBj
b25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKLXsKLSAgICBBU1NFUlQoIW1fZG93bmxv
YWQpOwotCi0gICAgQ0ZVUkxDb25uZWN0aW9uUmVmIGNvbm5lY3Rpb24gPSBoYW5kbGUtPmNvbm5l
Y3Rpb24oKTsKLSAgICBpZiAoIWNvbm5lY3Rpb24pCi0gICAgICAgIHJldHVybjsKLQotICAgIENG
VVJMRG93bmxvYWRDbGllbnQgY2xpZW50ID0gezAsIHRoaXMsIDAsIDAsIDAsIGRpZFN0YXJ0Q2Fs
bGJhY2ssIHdpbGxTZW5kUmVxdWVzdENhbGxiYWNrLCBkaWRSZWNlaXZlQXV0aGVudGljYXRpb25D
aGFsbGVuZ2VDYWxsYmFjaywgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlk
UmVjZWl2ZVJlc3BvbnNlQ2FsbGJhY2ssIHdpbGxSZXN1bWVXaXRoUmVzcG9uc2VDYWxsYmFjaywg
ZGlkUmVjZWl2ZURhdGFDYWxsYmFjaywgc2hvdWxkRGVjb2RlRGF0YU9mTUlNRVR5cGVDYWxsYmFj
aywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWNpZGVEZXN0aW5hdGlvbldp
dGhTdWdnZXN0ZWRPYmplY3ROYW1lQ2FsbGJhY2ssIGRpZENyZWF0ZURlc3RpbmF0aW9uQ2FsbGJh
Y2ssIGRpZEZpbmlzaENhbGxiYWNrLCBkaWRGYWlsQ2FsbGJhY2t9OwotCi0gICAgbV9kb3dubG9h
ZC5hZG9wdENGKENGVVJMRG93bmxvYWRDcmVhdGVBbmRTdGFydFdpdGhMb2FkaW5nQ29ubmVjdGlv
bigwLCBjb25uZWN0aW9uLCBoYW5kbGUtPmZpcnN0UmVxdWVzdCgpLmNmVVJMUmVxdWVzdCgpLCBy
ZXNwb25zZS5jZlVSTFJlc3BvbnNlKCksICZjbGllbnQpKTsKLQotICAgIC8vIEl0IGlzIHBvc3Np
YmxlIGZvciBDRlVSTERvd25sb2FkQ3JlYXRlQW5kU3RhcnRXaXRoTG9hZGluZ0Nvbm5lY3Rpb24o
KSB0byBmYWlsIGlmIHRoZSBwYXNzZWQgaW4gQ0ZVUkxDb25uZWN0aW9uIGlzIG5vdCBpbiBhICJk
b3dubG9hZGFibGUgc3RhdGUiCi0gICAgLy8gSG93ZXZlciwgd2Ugc2hvdWxkIG5ldmVyIGhpdCB0
aGF0IGNhc2UKLSAgICBpZiAoIW1fZG93bmxvYWQpCi0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwotCi0gICAgLy8gVGhlIENGVVJMRG93bmxvYWQgZWl0aGVyIHN0YXJ0cyBzdWNjZXNzZnVs
bHkgYW5kIHJldGFpbnMgdGhlIENGVVJMQ29ubmVjdGlvbiwgCi0gICAgLy8gb3IgaXQgZmFpbHMg
dG8gY3JlYXRpbmcgYW5kIHdlIGhhdmUgYSBub3ctdXNlbGVzcyBjb25uZWN0aW9uIHdpdGggYSBk
YW5nbGluZyByZWYuIAotICAgIC8vIEVpdGhlciB3YXksIHdlIG5lZWQgdG8gcmVsZWFzZSB0aGUg
Y29ubmVjdGlvbiB0byBiYWxhbmNlIG91dCByZWYgY291bnRzCi0gICAgaGFuZGxlLT5yZWxlYXNl
Q29ubmVjdGlvbkZvckRvd25sb2FkKCk7Ci0gICAgQ0ZSZWxlYXNlKGNvbm5lY3Rpb24pOwotfQot
Ci12b2lkIERvd25sb2FkOjpjYW5jZWwoKQotewotICAgIEFTU0VSVChtX2Rvd25sb2FkKTsKLSAg
ICBpZiAoIW1fZG93bmxvYWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIENGVVJMRG93bmxvYWRT
ZXREZWxldGVzVXBvbkZhaWx1cmUobV9kb3dubG9hZC5nZXQoKSwgZmFsc2UpOwotICAgIENGVVJM
RG93bmxvYWRDYW5jZWwobV9kb3dubG9hZC5nZXQoKSk7Ci0KLSAgICBSZXRhaW5QdHI8Q0ZEYXRh
UmVmPiByZXN1bWVEYXRhKEFkb3B0Q0YsIENGVVJMRG93bmxvYWRDb3B5UmVzdW1lRGF0YShtX2Rv
d25sb2FkLmdldCgpKSk7Ci0gICAgaWYgKHJlc3VtZURhdGEpCi0gICAgICAgIERvd25sb2FkQnVu
ZGxlOjphcHBlbmRSZXN1bWVEYXRhKHJlc3VtZURhdGEuZ2V0KCksIG1fYnVuZGxlUGF0aCk7Ci0K
LSAgICBkaWRDYW5jZWwoQ29yZUlQQzo6RGF0YVJlZmVyZW5jZSgpKTsKLX0KLQotdm9pZCBEb3du
bG9hZDo6cGxhdGZvcm1JbnZhbGlkYXRlKCkKLXsKLSAgICBtX2Rvd25sb2FkID0gbnVsbHB0cjsK
LSAgICBpZiAobV9hdXRoZW50aWNhdGlvbkNsaWVudCkKLSAgICAgICAgbV9hdXRoZW50aWNhdGlv
bkNsaWVudC0+ZGV0YWNoKCk7Ci19Ci0KLXZvaWQgRG93bmxvYWQ6OmRpZERlY2lkZURlc3RpbmF0
aW9uKGNvbnN0IFN0cmluZyYgZGVzdGluYXRpb24sIGJvb2wgYWxsb3dPdmVyd3JpdGUpCi17Ci0g
ICAgQVNTRVJUKCFkZXN0aW5hdGlvbi5pc0VtcHR5KCkpOwotICAgIGlmIChkZXN0aW5hdGlvbi5p
c0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fYWxsb3dPdmVyd3JpdGUgPSBhbGxv
d092ZXJ3cml0ZTsKLSAgICBtX2Rlc3RpbmF0aW9uID0gZGVzdGluYXRpb247Ci0gICAgbV9idW5k
bGVQYXRoID0gZGVzdGluYXRpb24gKyBEb3dubG9hZEJ1bmRsZTo6ZmlsZUV4dGVuc2lvbigpOwot
Ci0gICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBidW5kbGVQYXRoKEFkb3B0Q0YsIENGU3RyaW5n
Q3JlYXRlV2l0aENoYXJhY3RlcnNOb0NvcHkoMCwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBVbmlD
aGFyKj4obV9idW5kbGVQYXRoLmNoYXJhY3RlcnMoKSksIG1fYnVuZGxlUGF0aC5sZW5ndGgoKSwg
a0NGQWxsb2NhdG9yTnVsbCkpOwotICAgIFJldGFpblB0cjxDRlVSTFJlZj4gYnVuZGxlUGF0aFVS
TChBZG9wdENGLCBDRlVSTENyZWF0ZVdpdGhGaWxlU3lzdGVtUGF0aCgwLCBidW5kbGVQYXRoLmdl
dCgpLCBrQ0ZVUkxXaW5kb3dzUGF0aFN0eWxlLCBmYWxzZSkpOwotICAgIENGVVJMRG93bmxvYWRT
ZXREZXN0aW5hdGlvbihtX2Rvd25sb2FkLmdldCgpLCBidW5kbGVQYXRoVVJMLmdldCgpLCBhbGxv
d092ZXJ3cml0ZSk7Ci19Ci0KLS8vIENGVVJMRG93bmxvYWQgQ2FsbGJhY2tzIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXN0
YXRpYyBEb3dubG9hZCogZG93bmxvYWRGcm9tQ2xpZW50SW5mbyhjb25zdCB2b2lkKiBjbGllbnRJ
bmZvKQotewotICAgIHJldHVybiByZWludGVycHJldF9jYXN0PERvd25sb2FkKj4oY29uc3RfY2Fz
dDx2b2lkKj4oY2xpZW50SW5mbykpOwotfQotCi12b2lkIGRpZFN0YXJ0Q2FsbGJhY2soQ0ZVUkxE
b3dubG9hZFJlZiwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKLXsgCi0gICAgZG93bmxvYWRGcm9t
Q2xpZW50SW5mbyhjbGllbnRJbmZvKS0+ZGlkU3RhcnQoKTsgCi19Ci0KLUNGVVJMUmVxdWVzdFJl
ZiB3aWxsU2VuZFJlcXVlc3RDYWxsYmFjayhDRlVSTERvd25sb2FkUmVmLCBDRlVSTFJlcXVlc3RS
ZWYgcmVxdWVzdCwgQ0ZVUkxSZXNwb25zZVJlZiByZWRpcmVjdGlvblJlc3BvbnNlLCBjb25zdCB2
b2lkKiBjbGllbnRJbmZvKQoteyAKLSAgICAvLyBDRk5ldHdvcmsgcmVxdWlyZXMgdXMgdG8gcmV0
dXJuIGEgcmV0YWluZWQgcmVxdWVzdC4KLSAgICBDRlJldGFpbihyZXF1ZXN0KTsKLSAgICByZXR1
cm4gcmVxdWVzdDsKLX0KLQotdm9pZCBkaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2VD
YWxsYmFjayhDRlVSTERvd25sb2FkUmVmLCBDRlVSTEF1dGhDaGFsbGVuZ2VSZWYgY2hhbGxlbmdl
LCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQotewotICAgIERvd25sb2FkKiBkb3dubG9hZCA9IGRv
d25sb2FkRnJvbUNsaWVudEluZm8oY2xpZW50SW5mbyk7Ci0gICAgZG93bmxvYWQtPmRpZFJlY2Vp
dmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShjaGFsbGVu
Z2UsIGRvd25sb2FkLT5hdXRoZW50aWNhdGlvbkNsaWVudCgpKSk7Ci19Ci0KLXZvaWQgZGlkUmVj
ZWl2ZVJlc3BvbnNlQ2FsbGJhY2soQ0ZVUkxEb3dubG9hZFJlZiwgQ0ZVUkxSZXNwb25zZVJlZiBy
ZXNwb25zZSwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKLXsKLSAgICBkb3dubG9hZEZyb21DbGll
bnRJbmZvKGNsaWVudEluZm8pLT5kaWRSZWNlaXZlUmVzcG9uc2UoUmVzb3VyY2VSZXNwb25zZShy
ZXNwb25zZSkpOyAKLX0KLQotdm9pZCB3aWxsUmVzdW1lV2l0aFJlc3BvbnNlQ2FsbGJhY2soQ0ZV
UkxEb3dubG9hZFJlZiwgQ0ZVUkxSZXNwb25zZVJlZiByZXNwb25zZSwgVUludDY0IHN0YXJ0aW5n
Qnl0ZSwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKLXsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50
LgotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgZGlkUmVjZWl2ZURhdGFDYWxsYmFj
ayhDRlVSTERvd25sb2FkUmVmLCBDRkluZGV4IGxlbmd0aCwgY29uc3Qgdm9pZCogY2xpZW50SW5m
bykKLXsgCi0gICAgZG93bmxvYWRGcm9tQ2xpZW50SW5mbyhjbGllbnRJbmZvKS0+ZGlkUmVjZWl2
ZURhdGEobGVuZ3RoKTsKLX0KLQotQm9vbGVhbiBzaG91bGREZWNvZGVEYXRhT2ZNSU1FVHlwZUNh
bGxiYWNrKENGVVJMRG93bmxvYWRSZWYsIENGU3RyaW5nUmVmIGVuY29kaW5nVHlwZSwgY29uc3Qg
dm9pZCogY2xpZW50SW5mbykKLXsgCi0gICAgcmV0dXJuIGRvd25sb2FkRnJvbUNsaWVudEluZm8o
Y2xpZW50SW5mbyktPnNob3VsZERlY29kZVNvdXJjZURhdGFPZk1JTUVUeXBlKGVuY29kaW5nVHlw
ZSk7Ci19Ci0KLXZvaWQgZGVjaWRlRGVzdGluYXRpb25XaXRoU3VnZ2VzdGVkT2JqZWN0TmFtZUNh
bGxiYWNrKENGVVJMRG93bmxvYWRSZWYsIENGU3RyaW5nUmVmIG9iamVjdE5hbWUsIGNvbnN0IHZv
aWQqIGNsaWVudEluZm8pCi17IAotICAgIERvd25sb2FkKiBkb3dubG9hZCA9IGRvd25sb2FkRnJv
bUNsaWVudEluZm8oY2xpZW50SW5mbyk7Ci0gICAgYm9vbCBhbGxvd092ZXJ3cml0ZTsKLSAgICBk
b3dubG9hZC0+ZGVjaWRlRGVzdGluYXRpb25XaXRoU3VnZ2VzdGVkRmlsZW5hbWUob2JqZWN0TmFt
ZSwgYWxsb3dPdmVyd3JpdGUpOwotfQotCi12b2lkIGRpZENyZWF0ZURlc3RpbmF0aW9uQ2FsbGJh
Y2soQ0ZVUkxEb3dubG9hZFJlZiwgQ0ZVUkxSZWYsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCi17
Ci0gICAgLy8gVGhlIGNvbmNlcHQgb2YgdGhlICIuZG93bmxvYWQgYnVuZGxlIiBpcyBpbnRlcm5h
bCB0byB0aGUgRG93bmxvYWQsIHNvIHdlIHRyeSB0byBoaWRlIGl0cwotICAgIC8vIGV4aXN0ZW5j
ZSBieSByZXBvcnRpbmcgdGhlIGZpbmFsIGRlc3RpbmF0aW9uIHdhcyBjcmVhdGVkLCB3aGVuIGlu
IHJlYWxpdHkgdGhlIGJ1bmRsZSB3YXMgY3JlYXRlZC4KLQotICAgIERvd25sb2FkKiBkb3dubG9h
ZCA9IGRvd25sb2FkRnJvbUNsaWVudEluZm8oY2xpZW50SW5mbyk7Ci0gICAgZG93bmxvYWQtPmRp
ZENyZWF0ZURlc3RpbmF0aW9uKGRvd25sb2FkLT5kZXN0aW5hdGlvbigpKTsKLX0KLQotdm9pZCBk
aWRGaW5pc2hDYWxsYmFjayhDRlVSTERvd25sb2FkUmVmLCBjb25zdCB2b2lkKiBjbGllbnRJbmZv
KQoteyAKLSAgICBkb3dubG9hZEZyb21DbGllbnRJbmZvKGNsaWVudEluZm8pLT5kaWRGaW5pc2go
KTsKLX0KLQotdm9pZCBkaWRGYWlsQ2FsbGJhY2soQ0ZVUkxEb3dubG9hZFJlZiwgQ0ZFcnJvclJl
ZiBlcnJvciwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKLXsgCi0gICAgQ29yZUlQQzo6RGF0YVJl
ZmVyZW5jZSBkYXRhUmVmZXJlbmNlKDAsIDApOwotICAgIGRvd25sb2FkRnJvbUNsaWVudEluZm8o
Y2xpZW50SW5mbyktPmRpZEZhaWwoUmVzb3VyY2VFcnJvcihlcnJvciksIGRhdGFSZWZlcmVuY2Up
OwotfQotCi12b2lkIERvd25sb2FkOjpyZWNlaXZlZENyZWRlbnRpYWwoY29uc3QgQXV0aGVudGlj
YXRpb25DaGFsbGVuZ2UmIGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLCBjb25zdCBDcmVkZW50aWFs
JiBjcmVkZW50aWFsKQotewotICAgIEFTU0VSVChhdXRoZW50aWNhdGlvbkNoYWxsZW5nZS5hdXRo
ZW50aWNhdGlvbkNsaWVudCgpKTsKLSAgICBhdXRoZW50aWNhdGlvbkNoYWxsZW5nZS5hdXRoZW50
aWNhdGlvbkNsaWVudCgpLT5yZWNlaXZlZENyZWRlbnRpYWwoYXV0aGVudGljYXRpb25DaGFsbGVu
Z2UsIGNyZWRlbnRpYWwpOwotfQotCi12b2lkIERvd25sb2FkOjpyZWNlaXZlZFJlcXVlc3RUb0Nv
bnRpbnVlV2l0aG91dENyZWRlbnRpYWwoY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmIGF1
dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKQotewotICAgIEFTU0VSVChhdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZS5hdXRoZW50aWNhdGlvbkNsaWVudCgpKTsKLSAgICBhdXRoZW50aWNhdGlvbkNoYWxsZW5n
ZS5hdXRoZW50aWNhdGlvbkNsaWVudCgpLT5yZWNlaXZlZFJlcXVlc3RUb0NvbnRpbnVlV2l0aG91
dENyZWRlbnRpYWwoYXV0aGVudGljYXRpb25DaGFsbGVuZ2UpOwotfQotCi12b2lkIERvd25sb2Fk
OjpyZWNlaXZlZENhbmNlbGxhdGlvbihjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYgYXV0
aGVudGljYXRpb25DaGFsbGVuZ2UpCi17Ci0gICAgQVNTRVJUKGF1dGhlbnRpY2F0aW9uQ2hhbGxl
bmdlLmF1dGhlbnRpY2F0aW9uQ2xpZW50KCkpOwotICAgIGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
LmF1dGhlbnRpY2F0aW9uQ2xpZW50KCktPnJlY2VpdmVkQ2FuY2VsbGF0aW9uKGF1dGhlbnRpY2F0
aW9uQ2hhbGxlbmdlKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0Rvd25sb2Fkcy9jdXJsL0Rvd25sb2FkQ3VybC5jcHAg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0Rvd25sb2Fkcy9jdXJsL0Rvd25sb2FkQ3VybC5j
cHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA1NjA3ZWYuLjAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Eb3dubG9hZHMvY3VybC9Eb3dubG9hZEN1cmwuY3Bw
CisrKyAvZGV2L251bGwKQEAgLTEsOTEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MCwgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTAgQnJlbnQgRnVsZ2hhbSA8YmZ1bGdoYW1Ad2Via2l0Lm9yZz4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lu
Y2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkRvd25sb2FkLmgiCi0KLSNpbmNsdWRlIDxXZWJD
b3JlL05vdEltcGxlbWVudGVkLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1uYW1l
c3BhY2UgV2ViS2l0IHsKLQotdm9pZCBEb3dubG9hZDo6c3RhcnQoKQotewotICAgIG5vdEltcGxl
bWVudGVkKCk7Ci19Ci0KLXZvaWQgRG93bmxvYWQ6OnN0YXJ0V2l0aEhhbmRsZShSZXNvdXJjZUhh
bmRsZSosIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7
Ci19Ci0KLXZvaWQgRG93bmxvYWQ6OmNhbmNlbCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsK
LX0KLQotdm9pZCBEb3dubG9hZDo6cGxhdGZvcm1JbnZhbGlkYXRlKCkKLXsKLSAgICBub3RJbXBs
ZW1lbnRlZCgpOwotfQotCi12b2lkIERvd25sb2FkOjpkaWREZWNpZGVEZXN0aW5hdGlvbihjb25z
dCBTdHJpbmcmIGRlc3RpbmF0aW9uLCBib29sIGFsbG93T3ZlcndyaXRlKQotewotICAgIG5vdElt
cGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgRG93bmxvYWQ6OnJlY2VpdmVkQ3JlZGVudGlhbChjb25z
dCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYgYXV0aGVudGljYXRpb25DaGFsbGVuZ2UsIGNvbnN0
IENyZWRlbnRpYWwmIGNyZWRlbnRpYWwpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQot
dm9pZCBEb3dubG9hZDo6cmVjZWl2ZWRSZXF1ZXN0VG9Db250aW51ZVdpdGhvdXRDcmVkZW50aWFs
KGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiBhdXRoZW50aWNhdGlvbkNoYWxsZW5nZSkK
LXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIERvd25sb2FkOjpyZWNlaXZlZENh
bmNlbGxhdGlvbihjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYgYXV0aGVudGljYXRpb25D
aGFsbGVuZ2UpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBEb3dubG9hZDo6
dXNlQ3JlZGVudGlhbChjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYsIGNvbnN0IENyZWRl
bnRpYWwmKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgRG93bmxvYWQ6OmNv
bnRpbnVlV2l0aG91dENyZWRlbnRpYWwoY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmKQot
ewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgRG93bmxvYWQ6OmNhbmNlbEF1dGhl
bnRpY2F0aW9uQ2hhbGxlbmdlKGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJikKLXsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvRG93bmxvYWRzL2VmbC9Eb3dubG9hZFNvdXBF
cnJvcnNFZmwuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Eb3dubG9hZHMvZWZsL0Rv
d25sb2FkU291cEVycm9yc0VmbC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk0
NmYzNTEuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Eb3dubG9hZHMv
ZWZsL0Rvd25sb2FkU291cEVycm9yc0VmbC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw0NiArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAi
RG93bmxvYWRTb3VwRXJyb3JzLmgiCi0KLSNpbmNsdWRlIDxXZWJDb3JlL0Vycm9yc0VmbC5oPgot
I2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VFcnJvci5oPgotCi11c2luZyBuYW1lc3BhY2UgV2Vi
Q29yZTsKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLVJlc291cmNlRXJyb3IgcGxhdGZvcm1Eb3du
bG9hZE5ldHdvcmtFcnJvcihpbnQgZXJyb3JDb2RlLCBjb25zdCBTdHJpbmcmIGZhaWxpbmdVUkws
IGNvbnN0IFN0cmluZyYgbG9jYWxpemVkRGVzY3JpcHRpb24pCi17Ci0gICAgcmV0dXJuIGRvd25s
b2FkTmV0d29ya0Vycm9yKFJlc291cmNlRXJyb3IoZXJyb3JEb21haW5Eb3dubG9hZCwgZXJyb3JD
b2RlLCBmYWlsaW5nVVJMLCBsb2NhbGl6ZWREZXNjcmlwdGlvbikpOwotfQotCi1SZXNvdXJjZUVy
cm9yIHBsYXRmb3JtRG93bmxvYWREZXN0aW5hdGlvbkVycm9yKGNvbnN0IFJlc291cmNlUmVzcG9u
c2UmIHJlc3BvbnNlLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCi17Ci0gICAgcmV0dXJuIGRvd25s
b2FkRGVzdGluYXRpb25FcnJvcihyZXNwb25zZSwgbWVzc2FnZSk7Ci19Ci0KLX0gLy8gbmFtZXNw
YWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Eb3dubG9h
ZHMvZ3RrL0Rvd25sb2FkU291cEVycm9yc0d0ay5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL0Rvd25sb2Fkcy9ndGsvRG93bmxvYWRTb3VwRXJyb3JzR3RrLmNwcApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMGQzZjlkMy4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL0Rvd25sb2Fkcy9ndGsvRG93bmxvYWRTb3VwRXJyb3JzR3RrLmNwcAorKysgL2Rl
di9udWxsCkBAIC0xLDQ2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgSW50ZWwg
Q29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJj
b25maWcuaCIKLSNpbmNsdWRlICJEb3dubG9hZFNvdXBFcnJvcnMuaCIKLQotI2luY2x1ZGUgPFdl
YkNvcmUvRXJyb3JzR3RrLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZUVycm9yLmg+Ci0K
LXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotUmVzb3Vy
Y2VFcnJvciBwbGF0Zm9ybURvd25sb2FkTmV0d29ya0Vycm9yKGludCBlcnJvckNvZGUsIGNvbnN0
IFN0cmluZyYgZmFpbGluZ1VSTCwgY29uc3QgU3RyaW5nJiBsb2NhbGl6ZWREZXNjcmlwdGlvbikK
LXsKLSAgICByZXR1cm4gZG93bmxvYWROZXR3b3JrRXJyb3IoUmVzb3VyY2VFcnJvcihlcnJvckRv
bWFpbkRvd25sb2FkLCBlcnJvckNvZGUsIGZhaWxpbmdVUkwsIGxvY2FsaXplZERlc2NyaXB0aW9u
KSk7Ci19Ci0KLVJlc291cmNlRXJyb3IgcGxhdGZvcm1Eb3dubG9hZERlc3RpbmF0aW9uRXJyb3Io
Y29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkK
LXsKLSAgICByZXR1cm4gZG93bmxvYWREZXN0aW5hdGlvbkVycm9yKHJlc3BvbnNlLCBtZXNzYWdl
KTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL0Rvd25sb2Fkcy9tYWMvRG93bmxvYWRNYWMubW0gYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL0Rvd25sb2Fkcy9tYWMvRG93bmxvYWRNYWMubW0KZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDFmNmZmZTIuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9Eb3dubG9hZHMvbWFjL0Rvd25sb2FkTWFjLm1tCisrKyAvZGV2L251bGwKQEAgLTEs
MjQyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBv
cnQgIkRvd25sb2FkLmgiCi0KLSNpbXBvcnQgPFdlYkNvcmUvQXV0aGVudGljYXRpb25DaGFsbGVu
Z2UuaD4KLSNpbXBvcnQgPFdlYkNvcmUvQXV0aGVudGljYXRpb25NYWMuaD4KLSNpbXBvcnQgPFdl
YkNvcmUvTm90SW1wbGVtZW50ZWQuaD4KLSNpbXBvcnQgPFdlYkNvcmUvUmVzb3VyY2VIYW5kbGUu
aD4KLSNpbXBvcnQgPFdlYkNvcmUvUmVzb3VyY2VSZXNwb25zZS5oPgotI2ltcG9ydCAiRGF0YVJl
ZmVyZW5jZS5oIgotI2ltcG9ydCAiV2ViUGFnZS5oIgotCi1AaW50ZXJmYWNlIE5TVVJMRG93bmxv
YWQgKFdlYk5TVVJMRG93bmxvYWREZXRhaWxzKQotKyhpZClfZG93bmxvYWRXaXRoTG9hZGluZ0Nv
bm5lY3Rpb246KE5TVVJMQ29ubmVjdGlvbiAqKWNvbm5lY3Rpb24KLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXF1ZXN0OihOU1VSTFJlcXVlc3QgKilyZXF1ZXN0Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXNwb25zZTooTlNVUkxSZXNwb25zZSAqKXIKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGRlbGVnYXRlOihpZClkZWxlZ2F0ZQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcHJveHk6KGlkKXByb3h5OwotQGVuZAotCi1AaW50ZXJmYWNlIFdLRG93bmxvYWRB
c0RlbGVnYXRlIDogTlNPYmplY3QgPE5TVVJMRG93bmxvYWREZWxlZ2F0ZT4gewotICAgIFdlYktp
dDo6RG93bmxvYWQqIF9kb3dubG9hZDsKLX0KLS0gKGlkKWluaXRXaXRoRG93bmxvYWQ6KFdlYktp
dDo6RG93bmxvYWQqKWRvd25sb2FkOwotLSAodm9pZClpbnZhbGlkYXRlOwotQGVuZAotCi11c2lu
ZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLXZvaWQgRG93bmxv
YWQ6OnN0YXJ0KCkKLXsKLSAgICBBU1NFUlQoIW1fbnNVUkxEb3dubG9hZCk7Ci0gICAgQVNTRVJU
KCFtX2RlbGVnYXRlKTsKLQotICAgIG1fZGVsZWdhdGUuYWRvcHROUyhbW1dLRG93bmxvYWRBc0Rl
bGVnYXRlIGFsbG9jXSBpbml0V2l0aERvd25sb2FkOnRoaXNdKTsKLSAgICBtX25zVVJMRG93bmxv
YWQuYWRvcHROUyhbW05TVVJMRG93bmxvYWQgYWxsb2NdIGluaXRXaXRoUmVxdWVzdDptX3JlcXVl
c3QubnNVUkxSZXF1ZXN0KCkgZGVsZWdhdGU6bV9kZWxlZ2F0ZS5nZXQoKV0pOwotCi0gICAgLy8g
RklYTUU6IEFsbG93IHRoaXMgdG8gYmUgY2hhbmdlZCBieSB0aGUgY2xpZW50LgotICAgIFttX25z
VVJMRG93bmxvYWQuZ2V0KCkgc2V0RGVsZXRlc0ZpbGVVcG9uRmFpbHVyZTpOT107Ci19Ci0KLXZv
aWQgRG93bmxvYWQ6OnN0YXJ0V2l0aEhhbmRsZShSZXNvdXJjZUhhbmRsZSogaGFuZGxlLCBjb25z
dCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKLXsKLSAgICBBU1NFUlQoIW1fbnNVUkxEb3du
bG9hZCk7Ci0gICAgQVNTRVJUKCFtX2RlbGVnYXRlKTsKLQotICAgIGlkIHByb3h5ID0gaGFuZGxl
LT5yZWxlYXNlUHJveHkoKTsKLSAgICBBU1NFUlQocHJveHkpOwotCi0gICAgbV9kZWxlZ2F0ZS5h
ZG9wdE5TKFtbV0tEb3dubG9hZEFzRGVsZWdhdGUgYWxsb2NdIGluaXRXaXRoRG93bmxvYWQ6dGhp
c10pOwotICAgIG1fbnNVUkxEb3dubG9hZCA9IFtOU1VSTERvd25sb2FkIF9kb3dubG9hZFdpdGhM
b2FkaW5nQ29ubmVjdGlvbjpoYW5kbGUtPmNvbm5lY3Rpb24oKQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdDptX3JlcXVl
c3QubnNVUkxSZXF1ZXN0KCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2U6cmVzcG9uc2UubnNVUkxSZXNwb25zZSgpCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBkZWxlZ2F0ZTptX2RlbGVnYXRlLmdldCgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm94eTpwcm94eV07Ci0KLSAgICAv
LyBGSVhNRTogQWxsb3cgdGhpcyB0byBiZSBjaGFuZ2VkIGJ5IHRoZSBjbGllbnQuCi0gICAgW21f
bnNVUkxEb3dubG9hZC5nZXQoKSBzZXREZWxldGVzRmlsZVVwb25GYWlsdXJlOk5PXTsKLX0KLQot
dm9pZCBEb3dubG9hZDo6Y2FuY2VsKCkKLXsKLSAgICBbbV9uc1VSTERvd25sb2FkLmdldCgpIGNh
bmNlbF07Ci0KLSAgICBSZXRhaW5QdHI8TlNEYXRhPiByZXN1bWVEYXRhID0gW21fbnNVUkxEb3du
bG9hZC5nZXQoKSByZXN1bWVEYXRhXTsKLSAgICBkaWRDYW5jZWwoQ29yZUlQQzo6RGF0YVJlZmVy
ZW5jZShyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihbcmVzdW1lRGF0YS5nZXQoKSBi
eXRlc10pLCBbcmVzdW1lRGF0YS5nZXQoKSBsZW5ndGhdKSk7Ci19Ci0KLXZvaWQgRG93bmxvYWQ6
OnBsYXRmb3JtSW52YWxpZGF0ZSgpCi17Ci0gICAgQVNTRVJUKG1fbnNVUkxEb3dubG9hZCk7Ci0g
ICAgQVNTRVJUKG1fZGVsZWdhdGUpOwotCi0gICAgW21fZGVsZWdhdGUuZ2V0KCkgaW52YWxpZGF0
ZV07Ci0gICAgbV9kZWxlZ2F0ZSA9IG51bGxwdHI7Ci0gICAgbV9uc1VSTERvd25sb2FkID0gbnVs
bHB0cjsKLX0KLQotdm9pZCBEb3dubG9hZDo6ZGlkRGVjaWRlRGVzdGluYXRpb24oY29uc3QgU3Ry
aW5nJiBkZXN0aW5hdGlvbiwgYm9vbCBhbGxvd092ZXJ3cml0ZSkKLXsKLX0KLQotdm9pZCBEb3du
bG9hZDo6cGxhdGZvcm1EaWRGaW5pc2goKQotewotfQotCi12b2lkIERvd25sb2FkOjpyZWNlaXZl
ZENyZWRlbnRpYWwoY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmIGF1dGhlbnRpY2F0aW9u
Q2hhbGxlbmdlLCBjb25zdCBDcmVkZW50aWFsJiBjcmVkZW50aWFsKQotewotICAgIFthdXRoZW50
aWNhdGlvbkNoYWxsZW5nZS5zZW5kZXIoKSB1c2VDcmVkZW50aWFsOm1hYyhjcmVkZW50aWFsKSBm
b3JBdXRoZW50aWNhdGlvbkNoYWxsZW5nZTphdXRoZW50aWNhdGlvbkNoYWxsZW5nZS5uc1VSTEF1
dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKCldOwotfQotCi12b2lkIERvd25sb2FkOjpyZWNlaXZlZFJl
cXVlc3RUb0NvbnRpbnVlV2l0aG91dENyZWRlbnRpYWwoY29uc3QgQXV0aGVudGljYXRpb25DaGFs
bGVuZ2UmIGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKQotewotICAgIFthdXRoZW50aWNhdGlvbkNo
YWxsZW5nZS5zZW5kZXIoKSBjb250aW51ZVdpdGhvdXRDcmVkZW50aWFsRm9yQXV0aGVudGljYXRp
b25DaGFsbGVuZ2U6YXV0aGVudGljYXRpb25DaGFsbGVuZ2UubnNVUkxBdXRoZW50aWNhdGlvbkNo
YWxsZW5nZSgpXTsKLX0KLQotdm9pZCBEb3dubG9hZDo6cmVjZWl2ZWRDYW5jZWxsYXRpb24oY29u
c3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmIGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKQotewot
ICAgIFthdXRoZW50aWNhdGlvbkNoYWxsZW5nZS5zZW5kZXIoKSBjYW5jZWxBdXRoZW50aWNhdGlv
bkNoYWxsZW5nZTphdXRoZW50aWNhdGlvbkNoYWxsZW5nZS5uc1VSTEF1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlKCldOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotQGltcGxlbWVudGF0aW9u
IFdLRG93bmxvYWRBc0RlbGVnYXRlCi0KLS0gKGlkKWluaXRXaXRoRG93bmxvYWQ6KFdlYktpdDo6
RG93bmxvYWQqKWRvd25sb2FkCi17Ci0gICAgc2VsZiA9IFtzdXBlciBpbml0XTsKLSAgICBpZiAo
IXNlbGYpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICBfZG93bmxvYWQgPSBkb3dubG9hZDsK
LSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClpbnZhbGlkYXRlCi17Ci0gICAgX2Rvd25s
b2FkID0gMDsKLX0KLQotLSAodm9pZClkb3dubG9hZERpZEJlZ2luOihOU1VSTERvd25sb2FkICop
ZG93bmxvYWQKLXsKLSAgICBpZiAoX2Rvd25sb2FkKQotICAgICAgICBfZG93bmxvYWQtPmRpZFN0
YXJ0KCk7Ci19Ci0KLS0gKE5TVVJMUmVxdWVzdCAqKWRvd25sb2FkOihOU1VSTERvd25sb2FkICop
ZG93bmxvYWQgd2lsbFNlbmRSZXF1ZXN0OihOU1VSTFJlcXVlc3QgKilyZXF1ZXN0IHJlZGlyZWN0
UmVzcG9uc2U6KE5TVVJMUmVzcG9uc2UgKilyZWRpcmVjdFJlc3BvbnNlCi17Ci0gICAgcmV0dXJu
IHJlcXVlc3Q7Ci19Ci0KLS0gKEJPT0wpZG93bmxvYWQ6KE5TVVJMRG93bmxvYWQgKiljb25uZWN0
aW9uIGNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2U6KE5TVVJMUHJvdGVjdGlv
blNwYWNlICopcHJvdGVjdGlvblNwYWNlCi17Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudC4KLSAg
ICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBOTzsKLX0KLQotLSAodm9pZClkb3dubG9h
ZDooTlNVUkxEb3dubG9hZCAqKWRvd25sb2FkIGRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZTooTlNVUkxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSAqKWNoYWxsZW5nZQotewotICAgIGlm
IChfZG93bmxvYWQpCi0gICAgICAgIF9kb3dubG9hZC0+ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9u
Q2hhbGxlbmdlKGNvcmUoY2hhbGxlbmdlKSk7Ci19Ci0KLS0gKHZvaWQpZG93bmxvYWQ6KE5TVVJM
RG93bmxvYWQgKilkb3dubG9hZCBkaWRDYW5jZWxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZTooTlNV
UkxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSAqKWNoYWxsZW5nZQotewotICAgIC8vIEZJWE1FOiBJ
bXBsZW1lbnQuCi0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotLSAoQk9PTClkb3dubG9hZFNo
b3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlOihOU1VSTERvd25sb2FkICopZG93bmxvYWQKLXsKLSAg
ICByZXR1cm4gTk87Ci19Ci0KLS0gKHZvaWQpZG93bmxvYWQ6KE5TVVJMRG93bmxvYWQgKilkb3du
bG9hZCBkaWRSZWNlaXZlUmVzcG9uc2U6KE5TVVJMUmVzcG9uc2UgKilyZXNwb25zZQotewotICAg
IGlmIChfZG93bmxvYWQpCi0gICAgICAgIF9kb3dubG9hZC0+ZGlkUmVjZWl2ZVJlc3BvbnNlKHJl
c3BvbnNlKTsKLX0KLQotLSAodm9pZClkb3dubG9hZDooTlNVUkxEb3dubG9hZCAqKWRvd25sb2Fk
IHdpbGxSZXN1bWVXaXRoUmVzcG9uc2U6KE5TVVJMUmVzcG9uc2UgKilyZXNwb25zZSBmcm9tQnl0
ZToobG9uZyBsb25nKXN0YXJ0aW5nQnl0ZQotewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQuCi0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotLSAodm9pZClkb3dubG9hZDooTlNVUkxEb3dubG9h
ZCAqKWRvd25sb2FkIGRpZFJlY2VpdmVEYXRhT2ZMZW5ndGg6KE5TVUludGVnZXIpbGVuZ3RoCi17
Ci0gICAgaWYgKF9kb3dubG9hZCkKLSAgICAgICAgX2Rvd25sb2FkLT5kaWRSZWNlaXZlRGF0YShs
ZW5ndGgpOwotfQotCi0tIChCT09MKWRvd25sb2FkOihOU1VSTERvd25sb2FkICopZG93bmxvYWQg
c2hvdWxkRGVjb2RlU291cmNlRGF0YU9mTUlNRVR5cGU6KE5TU3RyaW5nICopZW5jb2RpbmdUeXBl
Ci17Ci0gICAgaWYgKF9kb3dubG9hZCkKLSAgICAgICAgcmV0dXJuIF9kb3dubG9hZC0+c2hvdWxk
RGVjb2RlU291cmNlRGF0YU9mTUlNRVR5cGUoZW5jb2RpbmdUeXBlKTsKLQotICAgIHJldHVybiBZ
RVM7Ci19Ci0KLS0gKHZvaWQpZG93bmxvYWQ6KE5TVVJMRG93bmxvYWQgKilkb3dubG9hZCBkZWNp
ZGVEZXN0aW5hdGlvbldpdGhTdWdnZXN0ZWRGaWxlbmFtZTooTlNTdHJpbmcgKilmaWxlbmFtZQot
ewotICAgIFN0cmluZyBkZXN0aW5hdGlvbjsKLSAgICBib29sIGFsbG93T3ZlcndyaXRlOwotICAg
IGlmIChfZG93bmxvYWQpCi0gICAgICAgIGRlc3RpbmF0aW9uID0gX2Rvd25sb2FkLT5kZWNpZGVE
ZXN0aW5hdGlvbldpdGhTdWdnZXN0ZWRGaWxlbmFtZShmaWxlbmFtZSwgYWxsb3dPdmVyd3JpdGUp
OwotCi0gICAgaWYgKCFkZXN0aW5hdGlvbi5pc051bGwoKSkKLSAgICAgICAgW2Rvd25sb2FkIHNl
dERlc3RpbmF0aW9uOmRlc3RpbmF0aW9uIGFsbG93T3ZlcndyaXRlOmFsbG93T3ZlcndyaXRlXTsK
LX0KLQotLSAodm9pZClkb3dubG9hZDooTlNVUkxEb3dubG9hZCAqKWRvd25sb2FkIGRpZENyZWF0
ZURlc3RpbmF0aW9uOihOU1N0cmluZyAqKXBhdGgKLXsKLSAgICBpZiAoX2Rvd25sb2FkKQotICAg
ICAgICBfZG93bmxvYWQtPmRpZENyZWF0ZURlc3RpbmF0aW9uKHBhdGgpOwotfQotCi0tICh2b2lk
KWRvd25sb2FkRGlkRmluaXNoOihOU1VSTERvd25sb2FkICopZG93bmxvYWQKLXsKLSAgICBpZiAo
X2Rvd25sb2FkKQotICAgICAgICBfZG93bmxvYWQtPmRpZEZpbmlzaCgpOwotfQotCi0tICh2b2lk
KWRvd25sb2FkOihOU1VSTERvd25sb2FkICopZG93bmxvYWQgZGlkRmFpbFdpdGhFcnJvcjooTlNF
cnJvciAqKWVycm9yCi17Ci0gICAgaWYgKCFfZG93bmxvYWQpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIFJldGFpblB0cjxOU0RhdGE+IHJlc3VtZURhdGEgPSBbZG93bmxvYWQgcmVzdW1lRGF0YV07
Ci0gICAgQ29yZUlQQzo6RGF0YVJlZmVyZW5jZSBkYXRhUmVmZXJlbmNlKHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgdWludDhfdCo+KFtyZXN1bWVEYXRhLmdldCgpIGJ5dGVzXSksIFtyZXN1bWVEYXRh
LmdldCgpIGxlbmd0aF0pOwotCi0gICAgX2Rvd25sb2FkLT5kaWRGYWlsKGVycm9yLCBkYXRhUmVm
ZXJlbmNlKTsKLX0KLQotQGVuZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9Eb3dubG9hZHMvcXQvRG93bmxvYWRRdC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L0Rvd25sb2Fkcy9xdC9Eb3dubG9hZFF0LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggODg5ZTQ3MS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0Rvd25s
b2Fkcy9xdC9Eb3dubG9hZFF0LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDEwMiArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRz
IHN1YnNpZGlhcnkoLWllcykKLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1
ZGUgIkRvd25sb2FkLmgiCi0KLSNpbmNsdWRlICJRdEZpbGVEb3dubG9hZGVyLmgiCi0jaW5jbHVk
ZSAiV2ViUHJvY2Vzcy5oIgotI2luY2x1ZGUgPFdlYkNvcmUvTm90SW1wbGVtZW50ZWQuaD4KLSNp
bmNsdWRlIDxXZWJDb3JlL1FOZXR3b3JrUmVwbHlIYW5kbGVyLmg+Ci0jaW5jbHVkZSA8V2ViQ29y
ZS9SZXNvdXJjZUhhbmRsZS5oPgotI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VIYW5kbGVJbnRl
cm5hbC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VSZXNwb25zZS5oPgotCi11c2luZyBu
YW1lc3BhY2UgV2ViQ29yZTsKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLXZvaWQgRG93bmxvYWQ6
OnN0YXJ0KCkKLXsKLSAgICBRTmV0d29ya0FjY2Vzc01hbmFnZXIqIG1hbmFnZXIgPSBXZWJQcm9j
ZXNzOjpzaGFyZWQoKS5uZXR3b3JrQWNjZXNzTWFuYWdlcigpOwotICAgIEFTU0VSVChtYW5hZ2Vy
KTsKLSAgICBBU1NFUlQoIW1fcXREb3dubG9hZGVyKTsKLQotICAgIG1fcXREb3dubG9hZGVyID0g
bmV3IFF0RmlsZURvd25sb2FkZXIodGhpcywgYWRvcHRQdHIobWFuYWdlci0+Z2V0KG1fcmVxdWVz
dC50b05ldHdvcmtSZXF1ZXN0KCkpKSk7Ci0gICAgbV9xdERvd25sb2FkZXItPmluaXQoKTsKLX0K
LQotdm9pZCBEb3dubG9hZDo6c3RhcnRXaXRoSGFuZGxlKFJlc291cmNlSGFuZGxlKiBoYW5kbGUs
IGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3ApCi17Ci0gICAgQVNTRVJUKCFtX3F0RG93bmxv
YWRlcik7Ci0gICAgbV9xdERvd25sb2FkZXIgPSBuZXcgUXRGaWxlRG93bmxvYWRlcih0aGlzLCBh
ZG9wdFB0cihoYW5kbGUtPmdldEludGVybmFsKCktPm1fam9iLT5yZWxlYXNlKCkpKTsKLSAgICBt
X3F0RG93bmxvYWRlci0+aW5pdCgpOwotfQotCi12b2lkIERvd25sb2FkOjpjYW5jZWwoKQotewot
ICAgIEFTU0VSVChtX3F0RG93bmxvYWRlcik7Ci0gICAgbV9xdERvd25sb2FkZXItPmNhbmNlbCgp
OwotfQotCi12b2lkIERvd25sb2FkOjpwbGF0Zm9ybUludmFsaWRhdGUoKQotewotICAgIEFTU0VS
VChtX3F0RG93bmxvYWRlcik7Ci0gICAgbV9xdERvd25sb2FkZXItPmRlbGV0ZUxhdGVyKCk7Ci0g
ICAgbV9xdERvd25sb2FkZXIgPSAwOwotfQotCi12b2lkIERvd25sb2FkOjpkaWREZWNpZGVEZXN0
aW5hdGlvbihjb25zdCBTdHJpbmcmIGRlc3RpbmF0aW9uLCBib29sIGFsbG93T3ZlcndyaXRlKQot
ewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgRG93bmxvYWQ6OnN0YXJ0VHJhbnNm
ZXIoY29uc3QgU3RyaW5nJiBkZXN0aW5hdGlvbikKLXsKLSAgICBtX3F0RG93bmxvYWRlci0+c3Rh
cnRUcmFuc2ZlcihkZXN0aW5hdGlvbik7Ci19Ci0KLXZvaWQgRG93bmxvYWQ6OnBsYXRmb3JtRGlk
RmluaXNoKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIERvd25sb2FkOjpy
ZWNlaXZlZENyZWRlbnRpYWwoY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmIGF1dGhlbnRp
Y2F0aW9uQ2hhbGxlbmdlLCBjb25zdCBDcmVkZW50aWFsJiBjcmVkZW50aWFsKQotewotICAgIG5v
dEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgRG93bmxvYWQ6OnJlY2VpdmVkUmVxdWVzdFRvQ29u
dGludWVXaXRob3V0Q3JlZGVudGlhbChjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYgYXV0
aGVudGljYXRpb25DaGFsbGVuZ2UpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9p
ZCBEb3dubG9hZDo6cmVjZWl2ZWRDYW5jZWxsYXRpb24oY29uc3QgQXV0aGVudGljYXRpb25DaGFs
bGVuZ2UmIGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7
Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9Eb3dubG9hZHMvcXQvUXRGaWxlRG93bmxvYWRlci5jcHAgYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL0Rvd25sb2Fkcy9xdC9RdEZpbGVEb3dubG9hZGVyLmNwcApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzNiMmU4ZC4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL0Rvd25sb2Fkcy9xdC9RdEZpbGVEb3dubG9hZGVyLmNwcAorKysgL2Rl
di9udWxsCkBAIC0xLDI0OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIE5va2lh
IENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQotICoKLSAqIFRoaXMgcHJv
Z3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
Ci0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
Ci0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqCi0gKi8KLSNpbmNsdWRlICJjb25m
aWcuaCIKLSNpbmNsdWRlICJRdEZpbGVEb3dubG9hZGVyLmgiCi0KLSNpbmNsdWRlICJEYXRhUmVm
ZXJlbmNlLmgiCi0jaW5jbHVkZSAiRG93bmxvYWQuaCIKLSNpbmNsdWRlICJIVFRQUGFyc2Vycy5o
IgotI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKLSNpbmNsdWRlIDxRQ29yZUFwcGxpY2F0
aW9uPgotI2luY2x1ZGUgPFFGaWxlPgotI2luY2x1ZGUgPFFGaWxlSW5mbz4KLSNpbmNsdWRlIDxR
TmV0d29ya0FjY2Vzc01hbmFnZXI+Ci0jaW5jbHVkZSA8V2ViQ29yZS9RTmV0d29ya1JlcGx5SGFu
ZGxlci5oPgotI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VFcnJvci5oPgotI2luY2x1ZGUgPFdl
YkNvcmUvUmVzb3VyY2VSZXNwb25zZS5oPgotCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLXVz
aW5nIG5hbWVzcGFjZSBXVEY7Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1RdEZpbGVEb3dubG9h
ZGVyOjpRdEZpbGVEb3dubG9hZGVyKERvd25sb2FkKiBkb3dubG9hZCwgUGFzc093blB0cjxRTmV0
d29ya1JlcGx5PiByZXBseSkKLSAgICA6IG1fZG93bmxvYWQoZG93bmxvYWQpCi0gICAgLCBtX3Jl
cGx5KHJlcGx5KQotICAgICwgbV9lcnJvcihRTmV0d29ya1JlcGx5OjpOb0Vycm9yKQotICAgICwg
bV9oZWFkZXJzUmVhZChmYWxzZSkKLXsKLX0KLQotUXRGaWxlRG93bmxvYWRlcjo6flF0RmlsZURv
d25sb2FkZXIoKQotewotICAgIGlmICghbV9kZXN0aW5hdGlvbkZpbGUpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGFib3J0RG93bmxvYWRXcml0aW5nQW5kRW1pdEVycm9yKFF0RmlsZURvd25sb2Fk
ZXI6OkRvd25sb2FkRXJyb3JBYm9ydGVkKTsKLX0KLQotdm9pZCBRdEZpbGVEb3dubG9hZGVyOjpp
bml0KCkKLXsKLSAgICBjb25uZWN0KG1fcmVwbHkuZ2V0KCksIFNJR05BTChyZWFkeVJlYWQoKSks
IFNMT1Qob25SZWFkeVJlYWQoKSkpOwotICAgIGNvbm5lY3QobV9yZXBseS5nZXQoKSwgU0lHTkFM
KGZpbmlzaGVkKCkpLCBTTE9UKG9uRmluaXNoZWQoKSkpOwotICAgIGNvbm5lY3QobV9yZXBseS5n
ZXQoKSwgU0lHTkFMKGVycm9yKFFOZXR3b3JrUmVwbHk6Ok5ldHdvcmtFcnJvcikpLCBTTE9UKG9u
RXJyb3IoUU5ldHdvcmtSZXBseTo6TmV0d29ya0Vycm9yKSkpOwotfQotCi1RU3RyaW5nIFF0Rmls
ZURvd25sb2FkZXI6OmRldGVybWluZUZpbGVuYW1lKCkKLXsKLSAgICBBU1NFUlQoIW1fZGVzdGlu
YXRpb25GaWxlKTsKLQotICAgIFFTdHJpbmcgZmlsZW5hbWVDYW5kaWRhdGUgPSBmaWxlbmFtZUZy
b21IVFRQQ29udGVudERpc3Bvc2l0aW9uKFFTdHJpbmc6OmZyb21MYXRpbjEobV9yZXBseS0+cmF3
SGVhZGVyKCJDb250ZW50LURpc3Bvc2l0aW9uIikpKTsKLSAgICBpZiAoZmlsZW5hbWVDYW5kaWRh
dGUuaXNFbXB0eSgpKSB7Ci0gICAgICAgIEtVUkwga3VybCA9IG1fcmVwbHktPnVybCgpOwotICAg
ICAgICBmaWxlbmFtZUNhbmRpZGF0ZSA9IGRlY29kZVVSTEVzY2FwZVNlcXVlbmNlcyhrdXJsLmxh
c3RQYXRoQ29tcG9uZW50KCkpOwotICAgIH0KLQotICAgIGlmIChmaWxlbmFtZUNhbmRpZGF0ZS5p
c0VtcHR5KCkpIHsKLSAgICAgICAgYWJvcnREb3dubG9hZFdyaXRpbmdBbmRFbWl0RXJyb3IoUXRG
aWxlRG93bmxvYWRlcjo6RG93bmxvYWRFcnJvckNhbm5vdERldGVybWluZUZpbGVuYW1lKTsKLSAg
ICAgICAgcmV0dXJuIFFTdHJpbmcoKTsKLSAgICB9Ci0KLSAgICAvLyBNYWtlIHN1cmUgdGhhdCB3
ZSByZW1vdmUgcG9zc2libGUgIi4uLy4uIiBwYXJ0cyBpbiB0aGUgZ2l2ZW4gZmlsZSBuYW1lLgot
ICAgIFFGaWxlSW5mbyBmaWxlbmFtZUZpbHRlcihmaWxlbmFtZUNhbmRpZGF0ZSk7Ci0gICAgUVN0
cmluZyBmaWxlbmFtZSA9IGZpbGVuYW1lRmlsdGVyLmZpbGVOYW1lKCk7Ci0KLSAgICBpZiAoZmls
ZW5hbWUuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGFib3J0RG93bmxvYWRXcml0aW5nQW5kRW1pdEVy
cm9yKFF0RmlsZURvd25sb2FkZXI6OkRvd25sb2FkRXJyb3JDYW5ub3REZXRlcm1pbmVGaWxlbmFt
ZSk7Ci0gICAgICAgIHJldHVybiBRU3RyaW5nKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZpbGVu
YW1lOwotfQotCi12b2lkIFF0RmlsZURvd25sb2FkZXI6OnN0YXJ0VHJhbnNmZXIoY29uc3QgUVN0
cmluZyYgZGVjaWRlZEZpbGVQYXRoKQotewotICAgIEFTU0VSVCghbV9kZXN0aW5hdGlvbkZpbGUp
OwotCi0gICAgLy8gRXJyb3IgbWlnaHQgaGF2ZSBvY2N1cmVkIGR1cmluZyBkZXN0aW5hdGlvbiBx
dWVyeS4KLSAgICBpZiAobV9lcnJvciAhPSBRTmV0d29ya1JlcGx5OjpOb0Vycm9yKSB7Ci0gICAg
ICAgIGFib3J0RG93bmxvYWRXcml0aW5nQW5kRW1pdEVycm9yKFF0RmlsZURvd25sb2FkZXI6OkRv
d25sb2FkRXJyb3JOZXR3b3JrRmFpbHVyZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICBpZiAoZGVjaWRlZEZpbGVQYXRoLmlzRW1wdHkoKSkgewotICAgICAgICBhYm9ydERvd25sb2Fk
V3JpdGluZ0FuZEVtaXRFcnJvcihRdEZpbGVEb3dubG9hZGVyOjpEb3dubG9hZEVycm9yQ2FuY2Vs
bGVkKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIE93blB0cjxRRmlsZT4gZG93bmxv
YWRGaWxlID0gYWRvcHRQdHIobmV3IFFGaWxlKGRlY2lkZWRGaWxlUGF0aCkpOwotCi0gICAgaWYg
KCFkb3dubG9hZEZpbGUtPm9wZW4oUUlPRGV2aWNlOjpXcml0ZU9ubHkgfCBRSU9EZXZpY2U6OlRy
dW5jYXRlKSkgewotICAgICAgICBhYm9ydERvd25sb2FkV3JpdGluZ0FuZEVtaXRFcnJvcihRdEZp
bGVEb3dubG9hZGVyOjpEb3dubG9hZEVycm9yQ2Fubm90T3BlbkZpbGUpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgLy8gQXNzaWduaW5nIHRvIG1fZGVzdGluYXRpb25GaWxlIGZsYWdz
IHRoYXQgZWl0aGVyIGVycm9yIG9yCi0gICAgLy8gZmluaXNoZWQgc2hhbGwgYmUgY2FsbGVkIGlu
IHRoZSBlbmQuCi0gICAgbV9kZXN0aW5hdGlvbkZpbGUgPSBkb3dubG9hZEZpbGUucmVsZWFzZSgp
OwotCi0gICAgbV9kb3dubG9hZC0+ZGlkQ3JlYXRlRGVzdGluYXRpb24obV9kZXN0aW5hdGlvbkZp
bGUtPmZpbGVOYW1lKCkpOwotCi0gICAgLy8gV2UgbWlnaHQgaGF2ZSBnb3R0ZW4gcmVhZHlSZWFk
IGFscmVhZHkgZXZlbiBiZWZvcmUgdGhpcyBmdW5jdGlvbgotICAgIC8vIHdhcyBjYWxsZWQuCi0g
ICAgaWYgKG1fcmVwbHktPmJ5dGVzQXZhaWxhYmxlKCkpCi0gICAgICAgIG9uUmVhZHlSZWFkKCk7
Ci0KLSAgICAvLyBXZSBtaWdodCBoYXZlIGdvdHRlbiBmaW5pc2hlZCBhbHJlYWR5IGV2ZW4gYmVm
b3JlIHRoaXMKLSAgICAvLyBmdW5jdGlvbiB3YXMgY2FsbGVkLgotICAgIGlmIChtX3JlcGx5LT5p
c0ZpbmlzaGVkKCkpCi0gICAgICAgIG9uRmluaXNoZWQoKTsKLX0KLQotdm9pZCBRdEZpbGVEb3du
bG9hZGVyOjphYm9ydERvd25sb2FkV3JpdGluZ0FuZEVtaXRFcnJvcihRdEZpbGVEb3dubG9hZGVy
OjpEb3dubG9hZEVycm9yIGVycm9yQ29kZSkKLXsKLSAgICBtX3JlcGx5LT5hYm9ydCgpOwotCi0g
ICAgLy8gT24gbmV0d29yayBmYWlsdXJlcyBpdCdzIFFOZXR3b3JrUmVwbHlIYW5kbGVyOjplcnJv
ckZvclJlcGx5IHdobyB3aWxsIGhhbmRsZSBlcnJvcnMuCi0gICAgaWYgKGVycm9yQ29kZSA9PSBR
dEZpbGVEb3dubG9hZGVyOjpEb3dubG9hZEVycm9yTmV0d29ya0ZhaWx1cmUpIHsKLSAgICAgICAg
bV9kb3dubG9hZC0+ZGlkRmFpbChRTmV0d29ya1JlcGx5SGFuZGxlcjo6ZXJyb3JGb3JSZXBseSht
X3JlcGx5LmdldCgpKSwgQ29yZUlQQzo6RGF0YVJlZmVyZW5jZSgwLCAwKSk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBRU3RyaW5nIHRyYW5zbGF0ZWRFcnJvck1lc3NhZ2U7Ci0gICAg
c3dpdGNoIChlcnJvckNvZGUpIHsKLSAgICBjYXNlIFF0RmlsZURvd25sb2FkZXI6OkRvd25sb2Fk
RXJyb3JBYm9ydGVkOgotICAgICAgICB0cmFuc2xhdGVkRXJyb3JNZXNzYWdlID0gUUNvcmVBcHBs
aWNhdGlvbjo6dHJhbnNsYXRlKCJRdEZpbGVEb3dubG9hZGVyIiwgIkRvd25sb2FkIGFib3J0ZWQi
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBRdEZpbGVEb3dubG9hZGVyOjpEb3dubG9hZEVy
cm9yQ2Fubm90V3JpdGVUb0ZpbGU6Ci0gICAgICAgIHRyYW5zbGF0ZWRFcnJvck1lc3NhZ2UgPSBR
Q29yZUFwcGxpY2F0aW9uOjp0cmFuc2xhdGUoIlF0RmlsZURvd25sb2FkZXIiLCAiQ2Fubm90IHdy
aXRlIHRvIGZpbGUiKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBRdEZpbGVEb3dubG9hZGVy
OjpEb3dubG9hZEVycm9yQ2Fubm90T3BlbkZpbGU6Ci0gICAgICAgIHRyYW5zbGF0ZWRFcnJvck1l
c3NhZ2UgPSBRQ29yZUFwcGxpY2F0aW9uOjp0cmFuc2xhdGUoIlF0RmlsZURvd25sb2FkZXIiLCAi
Q2Fubm90IG9wZW4gZmlsZSBmb3Igd3JpdGluZyIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IFF0RmlsZURvd25sb2FkZXI6OkRvd25sb2FkRXJyb3JEZXN0aW5hdGlvbkFscmVhZHlFeGlzdHM6
Ci0gICAgICAgIHRyYW5zbGF0ZWRFcnJvck1lc3NhZ2UgPSBRQ29yZUFwcGxpY2F0aW9uOjp0cmFu
c2xhdGUoIlF0RmlsZURvd25sb2FkZXIiLCAiRGVzdGluYXRpb24gYWxyZWFkeSBleGlzdHMiKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBRdEZpbGVEb3dubG9hZGVyOjpEb3dubG9hZEVycm9y
Q2FuY2VsbGVkOgotICAgICAgICB0cmFuc2xhdGVkRXJyb3JNZXNzYWdlID0gUUNvcmVBcHBsaWNh
dGlvbjo6dHJhbnNsYXRlKCJRdEZpbGVEb3dubG9hZGVyIiwgIkRvd25sb2FkIGNhbmNlbGxlZCBi
eSBjYWxsZXIiKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBRdEZpbGVEb3dubG9hZGVyOjpE
b3dubG9hZEVycm9yQ2Fubm90RGV0ZXJtaW5lRmlsZW5hbWU6Ci0gICAgICAgIHRyYW5zbGF0ZWRF
cnJvck1lc3NhZ2UgPSBRQ29yZUFwcGxpY2F0aW9uOjp0cmFuc2xhdGUoIlF0RmlsZURvd25sb2Fk
ZXIiLCAiQ2Fubm90IGRldGVybWluZSBmaWxlbmFtZSIpOwotICAgICAgICBicmVhazsKLSAgICBk
ZWZhdWx0OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci0KLSAgICBSZXNv
dXJjZUVycm9yIGRvd25sb2FkRXJyb3IoIkRvd25sb2FkIiwgZXJyb3JDb2RlLCBtX3JlcGx5LT51
cmwoKS50b1N0cmluZygpLCB0cmFuc2xhdGVkRXJyb3JNZXNzYWdlKTsKLQotICAgIG1fZG93bmxv
YWQtPmRpZEZhaWwoZG93bmxvYWRFcnJvciwgQ29yZUlQQzo6RGF0YVJlZmVyZW5jZSgwLCAwKSk7
Ci19Ci0KLXZvaWQgUXRGaWxlRG93bmxvYWRlcjo6aGFuZGxlRG93bmxvYWRSZXNwb25zZSgpCi17
Ci0gICAgLy8gQnkgQVBJIGNvbnRyYWN0LCBRTmV0d29ya1JlcGx5OjptZXRhRGF0YUNoYW5nZWQg
Y2Fubm90IHJlYWxseSBiZSB0cnVzdGVkLgotICAgIC8vIFRodXMgd2UgbmVlZCB0byBjYWxsIHRo
aXMgdXBvbiByZWNlaXZpbmcgZmlyc3QgZGF0YS4KLSAgICBTdHJpbmcgY29udGVudFR5cGUgPSBt
X3JlcGx5LT5oZWFkZXIoUU5ldHdvcmtSZXF1ZXN0OjpDb250ZW50VHlwZUhlYWRlcikudG9TdHJp
bmcoKTsKLSAgICBTdHJpbmcgZW5jb2RpbmcgPSBleHRyYWN0Q2hhcnNldEZyb21NZWRpYVR5cGUo
Y29udGVudFR5cGUpOwotICAgIFN0cmluZyBtaW1lVHlwZSA9IGV4dHJhY3RNSU1FVHlwZUZyb21N
ZWRpYVR5cGUoY29udGVudFR5cGUpOwotICAgIFN0cmluZyBmaWxlbmFtZSA9IGRldGVybWluZUZp
bGVuYW1lKCk7Ci0KLSAgICAvLyBJZiBmaWxlbmFtZSBpcyBlbXB0eSBpdCBtZWFucyBkZXRlcm1p
bmVGaWxlbmFtZSBhYm9ydGVkIGFuZCBlbWl0dGVkIGFuIGVycm9yLgotICAgIGlmIChmaWxlbmFt
ZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIExldCdzIHRyeSB0byBndWVz
cyBmcm9tIHRoZSBleHRlbnNpb24uCi0gICAgaWYgKG1pbWVUeXBlLmlzRW1wdHkoKSkKLSAgICAg
ICAgbWltZVR5cGUgPSBNSU1FVHlwZVJlZ2lzdHJ5OjpnZXRNSU1FVHlwZUZvclBhdGgobV9yZXBs
eS0+dXJsKCkucGF0aCgpKTsKLQotICAgIFJlc291cmNlUmVzcG9uc2UgcmVzcG9uc2UobV9yZXBs
eS0+dXJsKCksIG1pbWVUeXBlLCBtX3JlcGx5LT5oZWFkZXIoUU5ldHdvcmtSZXF1ZXN0OjpDb250
ZW50TGVuZ3RoSGVhZGVyKS50b0xvbmdMb25nKCksIGVuY29kaW5nLCBmaWxlbmFtZSk7Ci0gICAg
bV9kb3dubG9hZC0+ZGlkUmVjZWl2ZVJlc3BvbnNlKHJlc3BvbnNlKTsKLX0KLQotdm9pZCBRdEZp
bGVEb3dubG9hZGVyOjpvblJlYWR5UmVhZCgpCi17Ci0gICAgaWYgKG1fZGVzdGluYXRpb25GaWxl
KSB7Ci0gICAgICAgIFFCeXRlQXJyYXkgY29udGVudCA9IG1fcmVwbHktPnJlYWRBbGwoKTsKLSAg
ICAgICAgaWYgKGNvbnRlbnQuc2l6ZSgpIDw9IDApCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAg
ICAgICAgcWludDY0IGJ5dGVzV3JpdHRlbiA9IG1fZGVzdGluYXRpb25GaWxlLT53cml0ZShjb250
ZW50KTsKLQotICAgICAgICBpZiAoYnl0ZXNXcml0dGVuID09IC0xKSB7Ci0gICAgICAgICAgICBh
Ym9ydERvd25sb2FkV3JpdGluZ0FuZEVtaXRFcnJvcihRdEZpbGVEb3dubG9hZGVyOjpEb3dubG9h
ZEVycm9yQ2Fubm90V3JpdGVUb0ZpbGUpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9
Ci0KLSAgICAgICAgLy8gVGhlcmUgbWlnaHQgYSBjb3JuZXIgY2FzZSB0byBiZSBmaXhlZCBoZXJl
IGlmIGJ5dGVzV3JpdHRlbiAhPSBjb250ZW50LnNpemUoKQotICAgICAgICAvLyBkb2VzIG5vdCBh
Y3R1YWxseSByZXByZXNlbnQgYW4gZXJyb3IuCi0gICAgICAgIEFTU0VSVChieXRlc1dyaXR0ZW4g
PT0gY29udGVudC5zaXplKCkpOwotCi0gICAgICAgIG1fZG93bmxvYWQtPmRpZFJlY2VpdmVEYXRh
KGJ5dGVzV3JpdHRlbik7Ci0gICAgfSBlbHNlIGlmICghbV9oZWFkZXJzUmVhZCkgewotICAgICAg
ICBoYW5kbGVEb3dubG9hZFJlc3BvbnNlKCk7Ci0gICAgICAgIG1faGVhZGVyc1JlYWQgPSB0cnVl
OwotICAgIH0KLX0KLQotdm9pZCBRdEZpbGVEb3dubG9hZGVyOjpvbkZpbmlzaGVkKCkKLXsKLSAg
ICAvLyBJZiBpdCdzIGZpbmlzaGVkIGFuZCB3ZSBoYXZlbid0IGV2ZW4gcmVhZCB0aGUgaGVhZGVy
cywgaXQgbWVhbnMgd2UgbmV2ZXIgZ290IHRvIG9uUmVhZHlSZWFkIGFuZCB0aGF0IHdlIGFyZQot
ICAgIC8vIHByb2JhYmx5IGRlYWxpbmcgd2l0aCB0aGUgZG93bmxvYWQgb2YgYSBsb2NhbCBmaWxl
IG9yIG9mIGEgc21hbGwgZmlsZSB0aGF0IHdhcyBzdGFydGVkIHdpdGggYSBoYW5kbGUuCi0gICAg
aWYgKCFtX2hlYWRlcnNSZWFkKSB7Ci0gICAgICAgIGhhbmRsZURvd25sb2FkUmVzcG9uc2UoKTsK
LSAgICAgICAgbV9oZWFkZXJzUmVhZCA9IHRydWU7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICBpZiAoIW1fZGVzdGluYXRpb25GaWxlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2Rl
c3RpbmF0aW9uRmlsZS5jbGVhcigpOwotCi0gICAgaWYgKG1fZXJyb3IgPT0gUU5ldHdvcmtSZXBs
eTo6Tm9FcnJvcikKLSAgICAgICAgbV9kb3dubG9hZC0+ZGlkRmluaXNoKCk7Ci0gICAgZWxzZSBp
ZiAgKG1fZXJyb3IgPT0gUU5ldHdvcmtSZXBseTo6T3BlcmF0aW9uQ2FuY2VsZWRFcnJvcikKLSAg
ICAgICAgYWJvcnREb3dubG9hZFdyaXRpbmdBbmRFbWl0RXJyb3IoUXRGaWxlRG93bmxvYWRlcjo6
RG93bmxvYWRFcnJvckNhbmNlbGxlZCk7Ci0gICAgZWxzZQotICAgICAgICBhYm9ydERvd25sb2Fk
V3JpdGluZ0FuZEVtaXRFcnJvcihRdEZpbGVEb3dubG9hZGVyOjpEb3dubG9hZEVycm9yTmV0d29y
a0ZhaWx1cmUpOwotfQotCi12b2lkIFF0RmlsZURvd25sb2FkZXI6Om9uRXJyb3IoUU5ldHdvcmtS
ZXBseTo6TmV0d29ya0Vycm9yIGNvZGUpCi17Ci0gICAgbV9lcnJvciA9IGNvZGU7Ci19Ci0KLXZv
aWQgUXRGaWxlRG93bmxvYWRlcjo6Y2FuY2VsKCkKLXsKLSAgICBtX3JlcGx5LT5hYm9ydCgpOwot
ICAgIC8vIFF0RmlsZURvd25sb2FkZXI6Om9uRmluaXNoZWQoKSB3aWxsIGJlIGNhbGxlZCBhbmQg
d2lsbCByYWlzZSBhIERvd25sb2FkRXJyb3JDYW5jZWxsZWQuCi19Ci0KLX0gLy8gbmFtZXNwYWNl
IFdlYktpdAotI2luY2x1ZGUgIm1vY19RdEZpbGVEb3dubG9hZGVyLmNwcCIKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvRG93bmxvYWRzL3F0L1F0RmlsZURvd25sb2FkZXIu
aCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvRG93bmxvYWRzL3F0L1F0RmlsZURvd25sb2Fk
ZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjY4ODA2My4uMDAwMDAwMAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0Rvd25sb2Fkcy9xdC9RdEZpbGVEb3dubG9hZGVy
LmgKKysrIC9kZXYvbnVsbApAQCAtMSw4MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQotICoKLSAq
IFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
Ci0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHBy
b2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqCi0gKi8KLQotI2lm
bmRlZiBRdEZpbGVEb3dubG9hZGVyX2gKLSNkZWZpbmUgUXRGaWxlRG93bmxvYWRlcl9oCi0KLSNp
bmNsdWRlIDxRTmV0d29ya1JlcGx5PgotI2luY2x1ZGUgPFFOZXR3b3JrUmVxdWVzdD4KLSNpbmNs
dWRlIDx3dGYvT3duUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KLQotUVRfQkVH
SU5fTkFNRVNQQUNFCi1jbGFzcyBRRmlsZTsKLWNsYXNzIFFOZXR3b3JrQWNjZXNzTWFuYWdlcjsK
LWNsYXNzIFFOZXR3b3JrUmVxdWVzdDsKLVFUX0VORF9OQU1FU1BBQ0UKLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotY2xhc3MgUmVzb3VyY2VFcnJvcjsKLX0KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci1j
bGFzcyBEb3dubG9hZDsKLQotY2xhc3MgUXRGaWxlRG93bmxvYWRlciA6IHB1YmxpYyBRT2JqZWN0
IHsKLSAgICBRX09CSkVDVAotcHVibGljOgotICAgIFF0RmlsZURvd25sb2FkZXIoRG93bmxvYWQq
LCBQYXNzT3duUHRyPFFOZXR3b3JrUmVwbHk+KTsKLSAgICB2aXJ0dWFsIH5RdEZpbGVEb3dubG9h
ZGVyKCk7Ci0gICAgdm9pZCBjYW5jZWwoKTsKLSAgICB2b2lkIGluaXQoKTsKLSAgICB2b2lkIHN0
YXJ0VHJhbnNmZXIoY29uc3QgUVN0cmluZyYgZGVzdGluYXRpb24pOwotCi0gICAgZW51bSBEb3du
bG9hZEVycm9yIHsKLSAgICAgICAgRG93bmxvYWRFcnJvckFib3J0ZWQgPSAwLAotICAgICAgICBE
b3dubG9hZEVycm9yQ2Fubm90V3JpdGVUb0ZpbGUsCi0gICAgICAgIERvd25sb2FkRXJyb3JDYW5u
b3RPcGVuRmlsZSwKLSAgICAgICAgRG93bmxvYWRFcnJvckRlc3RpbmF0aW9uQWxyZWFkeUV4aXN0
cywKLSAgICAgICAgRG93bmxvYWRFcnJvckNhbmNlbGxlZCwKLSAgICAgICAgRG93bmxvYWRFcnJv
ckNhbm5vdERldGVybWluZUZpbGVuYW1lLAotICAgICAgICBEb3dubG9hZEVycm9yTmV0d29ya0Zh
aWx1cmUKLSAgICB9OwotCi1wcml2YXRlIFFfU0xPVFM6Ci0gICAgdm9pZCBvblJlYWR5UmVhZCgp
OwotICAgIHZvaWQgb25GaW5pc2hlZCgpOwotICAgIHZvaWQgb25FcnJvcihRTmV0d29ya1JlcGx5
OjpOZXR3b3JrRXJyb3IpOwotCi1wcml2YXRlOgotICAgIHZvaWQgYWJvcnREb3dubG9hZFdyaXRp
bmdBbmRFbWl0RXJyb3IoUXRGaWxlRG93bmxvYWRlcjo6RG93bmxvYWRFcnJvcik7Ci0gICAgUVN0
cmluZyBkZXRlcm1pbmVGaWxlbmFtZSgpOwotICAgIHZvaWQgaGFuZGxlRG93bmxvYWRSZXNwb25z
ZSgpOwotCi0gICAgRG93bmxvYWQqIG1fZG93bmxvYWQ7Ci0gICAgT3duUHRyPFFOZXR3b3JrUmVw
bHk+IG1fcmVwbHk7Ci0gICAgT3duUHRyPFFGaWxlPiBtX2Rlc3RpbmF0aW9uRmlsZTsKLSAgICBR
TmV0d29ya1JlcGx5OjpOZXR3b3JrRXJyb3IgbV9lcnJvcjsKLSAgICBib29sIG1faGVhZGVyc1Jl
YWQ7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0Rvd25sb2Fkcy9zb3VwL0Rvd25sb2FkU291cC5jcHAg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0Rvd25sb2Fkcy9zb3VwL0Rvd25sb2FkU291cC5j
cHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDExZTBhNDEuLjAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Eb3dubG9hZHMvc291cC9Eb3dubG9hZFNvdXAuY3Bw
CisrKyAvZGV2L251bGwKQEAgLTEsMjYxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTAsIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDEwIEJyZW50IEZ1bGdoYW0gPGJmdWxnaGFtQHdlYmtpdC5vcmc+Ci0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJEb3dubG9hZC5oIgotCi0jaW5jbHVkZSAiRGF0
YVJlZmVyZW5jZS5oIgotI2luY2x1ZGUgIkRvd25sb2FkU291cEVycm9ycy5oIgotI2luY2x1ZGUg
PFdlYkNvcmUvTm90SW1wbGVtZW50ZWQuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlSGFu
ZGxlSW50ZXJuYWwuaD4KLSNpbmNsdWRlIDxnaW8vZ2lvLmg+Ci0jaW5jbHVkZSA8d3RmL2dvYmpl
Y3QvR093blB0ci5oPgotI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KLSNpbmNsdWRl
IDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLSNpZiBQTEFURk9STShHVEspCi0jaW5jbHVkZSA8Z2xp
Yi9naTE4bi1saWIuaD4KLSNlbmRpZgotCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotbmFt
ZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIERvd25sb2FkQ2xpZW50IDogcHVibGljIFJlc291cmNl
SGFuZGxlQ2xpZW50IHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShEb3dubG9hZENsaWVudCk7
Ci1wdWJsaWM6Ci0gICAgRG93bmxvYWRDbGllbnQoRG93bmxvYWQqIGRvd25sb2FkKQotICAgICAg
ICA6IG1fZG93bmxvYWQoZG93bmxvYWQpCi0gICAgICAgICwgbV9oYW5kbGVSZXNwb25zZUxhdGVy
SUQoMCkKLSAgICB7Ci0gICAgfQotCi0gICAgfkRvd25sb2FkQ2xpZW50KCkKLSAgICB7Ci0gICAg
ICAgIGlmIChtX2hhbmRsZVJlc3BvbnNlTGF0ZXJJRCkKLSAgICAgICAgICAgIGdfc291cmNlX3Jl
bW92ZShtX2hhbmRsZVJlc3BvbnNlTGF0ZXJJRCk7Ci0gICAgfQotCi0gICAgdm9pZCBkb3dubG9h
ZEZhaWxlZChjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJvcikKLSAgICB7Ci0gICAgICAgIG1fZG93
bmxvYWQtPmRpZEZhaWwoZXJyb3IsIENvcmVJUEM6OkRhdGFSZWZlcmVuY2UoKSk7Ci0gICAgfQot
Ci0gICAgdm9pZCBkaWRSZWNlaXZlUmVzcG9uc2UoUmVzb3VyY2VIYW5kbGUqLCBjb25zdCBSZXNv
dXJjZVJlc3BvbnNlJiByZXNwb25zZSkKLSAgICB7Ci0gICAgICAgIG1fcmVzcG9uc2UgPSBhZG9w
dEdSZWYocmVzcG9uc2UudG9Tb3VwTWVzc2FnZSgpKTsKLSAgICAgICAgbV9kb3dubG9hZC0+ZGlk
UmVjZWl2ZVJlc3BvbnNlKHJlc3BvbnNlKTsKLQotICAgICAgICBpZiAocmVzcG9uc2UuaHR0cFN0
YXR1c0NvZGUoKSA+PSA0MDApIHsKLSAgICAgICAgICAgIGRvd25sb2FkRmFpbGVkKHBsYXRmb3Jt
RG93bmxvYWROZXR3b3JrRXJyb3IocmVzcG9uc2UuaHR0cFN0YXR1c0NvZGUoKSwgcmVzcG9uc2Uu
dXJsKCkuc3RyaW5nKCksIHJlc3BvbnNlLmh0dHBTdGF0dXNUZXh0KCkpKTsKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIFN0cmluZyBzdWdnZXN0ZWRGaWxlbmFtZSA9
IHJlc3BvbnNlLnN1Z2dlc3RlZEZpbGVuYW1lKCk7Ci0gICAgICAgIGlmIChzdWdnZXN0ZWRGaWxl
bmFtZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIEtVUkwgdXJsID0gcmVzcG9uc2UudXJsKCk7
Ci0gICAgICAgICAgICB1cmwuc2V0UXVlcnkoU3RyaW5nKCkpOwotICAgICAgICAgICAgdXJsLnJl
bW92ZUZyYWdtZW50SWRlbnRpZmllcigpOwotICAgICAgICAgICAgc3VnZ2VzdGVkRmlsZW5hbWUg
PSBkZWNvZGVVUkxFc2NhcGVTZXF1ZW5jZXModXJsLmxhc3RQYXRoQ29tcG9uZW50KCkpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgYm9vbCBvdmVyd3JpdGU7Ci0gICAgICAgIFN0cmluZyBkZXN0aW5h
dGlvblVSSSA9IG1fZG93bmxvYWQtPmRlY2lkZURlc3RpbmF0aW9uV2l0aFN1Z2dlc3RlZEZpbGVu
YW1lKHN1Z2dlc3RlZEZpbGVuYW1lLCBvdmVyd3JpdGUpOwotICAgICAgICBpZiAoZGVzdGluYXRp
b25VUkkuaXNFbXB0eSgpKSB7Ci0jaWYgUExBVEZPUk0oR1RLKQotICAgICAgICAgICAgR093blB0
cjxjaGFyPiBidWZmZXIoZ19zdHJkdXBfcHJpbnRmKF8oIkNhbm5vdCBkZXRlcm1pbmUgZGVzdGlu
YXRpb24gVVJJIGZvciBkb3dubG9hZCB3aXRoIHN1Z2dlc3RlZCBmaWxlbmFtZSAlcyIpLCBzdWdn
ZXN0ZWRGaWxlbmFtZS51dGY4KCkuZGF0YSgpKSk7Ci0gICAgICAgICAgICBTdHJpbmcgZXJyb3JN
ZXNzYWdlID0gU3RyaW5nOjpmcm9tVVRGOChidWZmZXIuZ2V0KCkpOwotI2Vsc2UKLSAgICAgICAg
ICAgIFN0cmluZyBlcnJvck1lc3NhZ2UgPSBtYWtlU3RyaW5nKCJDYW5ub3QgZGV0ZXJtaW5lIGRl
c3RpbmF0aW9uIFVSSSBmb3IgZG93bmxvYWQgd2l0aCBzdWdnZXN0ZWQgZmlsZW5hbWUgIiwgc3Vn
Z2VzdGVkRmlsZW5hbWUpOwotI2VuZGlmCi0gICAgICAgICAgICBkb3dubG9hZEZhaWxlZChwbGF0
Zm9ybURvd25sb2FkRGVzdGluYXRpb25FcnJvcihyZXNwb25zZSwgZXJyb3JNZXNzYWdlKSk7Ci0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBHUmVmUHRyPEdGaWxlPiBm
aWxlID0gYWRvcHRHUmVmKGdfZmlsZV9uZXdfZm9yX3VyaShkZXN0aW5hdGlvblVSSS51dGY4KCku
ZGF0YSgpKSk7Ci0gICAgICAgIEdPd25QdHI8R0Vycm9yPiBlcnJvcjsKLSAgICAgICAgbV9vdXRw
dXRTdHJlYW0gPSBhZG9wdEdSZWYoZ19maWxlX3JlcGxhY2UoZmlsZS5nZXQoKSwgMCwgVFJVRSwg
R19GSUxFX0NSRUFURV9OT05FLCAwLCAmZXJyb3Iub3V0UHRyKCkpKTsKLSAgICAgICAgaWYgKCFt
X291dHB1dFN0cmVhbSkgewotICAgICAgICAgICAgZG93bmxvYWRGYWlsZWQocGxhdGZvcm1Eb3du
bG9hZERlc3RpbmF0aW9uRXJyb3IocmVzcG9uc2UsIGVycm9yLT5tZXNzYWdlKSk7Ci0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBHUmVmUHRyPEdGaWxlSW5mbz4gaW5m
byA9IGFkb3B0R1JlZihnX2ZpbGVfaW5mb19uZXcoKSk7Ci0gICAgICAgIGdfZmlsZV9pbmZvX3Nl
dF9hdHRyaWJ1dGVfc3RyaW5nKGluZm8uZ2V0KCksICJtZXRhZGF0YTo6ZG93bmxvYWQtdXJpIiwg
cmVzcG9uc2UudXJsKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgIGdfZmlsZV9z
ZXRfYXR0cmlidXRlc19hc3luYyhmaWxlLmdldCgpLCBpbmZvLmdldCgpLCBHX0ZJTEVfUVVFUllf
SU5GT19OT05FLCBHX1BSSU9SSVRZX0RFRkFVTFQsIDAsIDAsIDApOwotCi0gICAgICAgIG1fZG93
bmxvYWQtPmRpZENyZWF0ZURlc3RpbmF0aW9uKGRlc3RpbmF0aW9uVVJJKTsKLSAgICB9Ci0KLSAg
ICB2b2lkIGRpZFJlY2VpdmVEYXRhKFJlc291cmNlSGFuZGxlKiwgY29uc3QgY2hhciogZGF0YSwg
aW50IGxlbmd0aCwgaW50IC8qZW5jb2RlZERhdGFMZW5ndGgqLykKLSAgICB7Ci0gICAgICAgIGlm
IChtX2hhbmRsZVJlc3BvbnNlTGF0ZXJJRCkgewotICAgICAgICAgICAgZ19zb3VyY2VfcmVtb3Zl
KG1faGFuZGxlUmVzcG9uc2VMYXRlcklEKTsKLSAgICAgICAgICAgIGhhbmRsZVJlc3BvbnNlKCk7
Ci0gICAgICAgIH0KLQotICAgICAgICBnc2l6ZSBieXRlc1dyaXR0ZW47Ci0gICAgICAgIEdPd25Q
dHI8R0Vycm9yPiBlcnJvcjsKLSAgICAgICAgZ19vdXRwdXRfc3RyZWFtX3dyaXRlX2FsbChHX09V
VFBVVF9TVFJFQU0obV9vdXRwdXRTdHJlYW0uZ2V0KCkpLCBkYXRhLCBsZW5ndGgsICZieXRlc1dy
aXR0ZW4sIDAsICZlcnJvci5vdXRQdHIoKSk7Ci0gICAgICAgIGlmIChlcnJvcikgewotICAgICAg
ICAgICAgZG93bmxvYWRGYWlsZWQocGxhdGZvcm1Eb3dubG9hZERlc3RpbmF0aW9uRXJyb3IoUmVz
b3VyY2VSZXNwb25zZShtX3Jlc3BvbnNlLmdldCgpKSwgZXJyb3ItPm1lc3NhZ2UpKTsKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBtX2Rvd25sb2FkLT5kaWRSZWNlaXZl
RGF0YShieXRlc1dyaXR0ZW4pOwotICAgIH0KLQotICAgIHZvaWQgZGlkRmluaXNoTG9hZGluZyhS
ZXNvdXJjZUhhbmRsZSosIGRvdWJsZSkKLSAgICB7Ci0gICAgICAgIG1fb3V0cHV0U3RyZWFtID0g
MDsKLSAgICAgICAgbV9kb3dubG9hZC0+ZGlkRmluaXNoKCk7Ci0gICAgfQotCi0gICAgdm9pZCBk
aWRGYWlsKFJlc291cmNlSGFuZGxlKiwgY29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3IpCi0gICAg
ewotICAgICAgICBkb3dubG9hZEZhaWxlZChwbGF0Zm9ybURvd25sb2FkTmV0d29ya0Vycm9yKGVy
cm9yLmVycm9yQ29kZSgpLCBlcnJvci5mYWlsaW5nVVJMKCksIGVycm9yLmxvY2FsaXplZERlc2Ny
aXB0aW9uKCkpKTsKLSAgICB9Ci0KLSAgICB2b2lkIHdhc0Jsb2NrZWQoUmVzb3VyY2VIYW5kbGUq
KQotICAgIHsKLSAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICB9Ci0KLSAgICB2b2lkIGNh
bm5vdFNob3dVUkwoUmVzb3VyY2VIYW5kbGUqKQotICAgIHsKLSAgICAgICAgbm90SW1wbGVtZW50
ZWQoKTsKLSAgICB9Ci0KLSAgICB2b2lkIGhhbmRsZVJlc3BvbnNlKCkKLSAgICB7Ci0gICAgICAg
IG1faGFuZGxlUmVzcG9uc2VMYXRlcklEID0gMDsKLSAgICAgICAgZGlkUmVjZWl2ZVJlc3BvbnNl
KDAsIG1fZGVsYXllZFJlc3BvbnNlKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgZ2Jvb2xlYW4gaGFu
ZGxlUmVzcG9uc2VMYXRlckNhbGxiYWNrKERvd25sb2FkQ2xpZW50KiBkb3dubG9hZENsaWVudCkK
LSAgICB7Ci0gICAgICAgIGRvd25sb2FkQ2xpZW50LT5oYW5kbGVSZXNwb25zZSgpOwotICAgICAg
ICByZXR1cm4gRkFMU0U7Ci0gICAgfQotCi0gICAgdm9pZCBoYW5kbGVSZXNwb25zZUxhdGVyKGNv
bnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQotICAgIHsKLSAgICAgICAgQVNTRVJUKCFt
X3Jlc3BvbnNlKTsKLSAgICAgICAgQVNTRVJUKCFtX2hhbmRsZVJlc3BvbnNlTGF0ZXJJRCk7Ci0K
LSAgICAgICAgbV9kZWxheWVkUmVzcG9uc2UgPSByZXNwb25zZTsKLQotICAgICAgICAvLyBDYWxs
IGRpZFJlY2VpdmVSZXNwb25zZSBpbiBhbiBpZGxlIHRvIG1ha2Ugc3VyZSB0aGUgZG93bmxvYWQg
aXMgYWRkZWQKLSAgICAgICAgLy8gdG8gdGhlIERvd25sb2FkTWFuYWdlciBkb3dubG9hZHMgbWFw
LgotICAgICAgICBtX2hhbmRsZVJlc3BvbnNlTGF0ZXJJRCA9IGdfaWRsZV9hZGRfZnVsbChHX1BS
SU9SSVRZX0RFRkFVTFQsIHJlaW50ZXJwcmV0X2Nhc3Q8R1NvdXJjZUZ1bmM+KGhhbmRsZVJlc3Bv
bnNlTGF0ZXJDYWxsYmFjayksIHRoaXMsIDApOwotICAgIH0KLQotICAgIERvd25sb2FkKiBtX2Rv
d25sb2FkOwotICAgIEdSZWZQdHI8R0ZpbGVPdXRwdXRTdHJlYW0+IG1fb3V0cHV0U3RyZWFtOwot
ICAgIEdSZWZQdHI8U291cE1lc3NhZ2U+IG1fcmVzcG9uc2U7Ci0gICAgUmVzb3VyY2VSZXNwb25z
ZSBtX2RlbGF5ZWRSZXNwb25zZTsKLSAgICB1bnNpZ25lZCBtX2hhbmRsZVJlc3BvbnNlTGF0ZXJJ
RDsKLX07Ci0KLXZvaWQgRG93bmxvYWQ6OnN0YXJ0KCkKLXsKLSAgICBBU1NFUlQoIW1fZG93bmxv
YWRDbGllbnQpOwotICAgIEFTU0VSVCghbV9yZXNvdXJjZUhhbmRsZSk7Ci0gICAgbV9kb3dubG9h
ZENsaWVudCA9IGFkb3B0UHRyKG5ldyBEb3dubG9hZENsaWVudCh0aGlzKSk7Ci0gICAgbV9yZXNv
dXJjZUhhbmRsZSA9IFJlc291cmNlSGFuZGxlOjpjcmVhdGUoMCwgbV9yZXF1ZXN0LCBtX2Rvd25s
b2FkQ2xpZW50LmdldCgpLCBmYWxzZSwgZmFsc2UpOwotICAgIGRpZFN0YXJ0KCk7Ci19Ci0KLXZv
aWQgRG93bmxvYWQ6OnN0YXJ0V2l0aEhhbmRsZShSZXNvdXJjZUhhbmRsZSogcmVzb3VyY2VIYW5k
bGUsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQotewotICAgIEFTU0VSVCghbV9k
b3dubG9hZENsaWVudCk7Ci0gICAgQVNTRVJUKCFtX3Jlc291cmNlSGFuZGxlKTsKLSAgICBtX2Rv
d25sb2FkQ2xpZW50ID0gYWRvcHRQdHIobmV3IERvd25sb2FkQ2xpZW50KHRoaXMpKTsKLSAgICBy
ZXNvdXJjZUhhbmRsZS0+c2V0Q2xpZW50KG1fZG93bmxvYWRDbGllbnQuZ2V0KCkpOwotICAgIG1f
cmVzb3VyY2VIYW5kbGUgPSByZXNvdXJjZUhhbmRsZTsKLSAgICBkaWRTdGFydCgpOwotICAgIHN0
YXRpY19jYXN0PERvd25sb2FkQ2xpZW50Kj4obV9kb3dubG9hZENsaWVudC5nZXQoKSktPmhhbmRs
ZVJlc3BvbnNlTGF0ZXIocmVzcG9uc2UpOwotfQotCi12b2lkIERvd25sb2FkOjpjYW5jZWwoKQot
ewotICAgIGlmICghbV9yZXNvdXJjZUhhbmRsZSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fcmVz
b3VyY2VIYW5kbGUtPmNhbmNlbCgpOwotICAgIGRpZENhbmNlbChDb3JlSVBDOjpEYXRhUmVmZXJl
bmNlKCkpOwotICAgIG1fcmVzb3VyY2VIYW5kbGUgPSAwOwotfQotCi12b2lkIERvd25sb2FkOjpw
bGF0Zm9ybUludmFsaWRhdGUoKQotewotICAgIGlmIChtX3Jlc291cmNlSGFuZGxlKSB7Ci0gICAg
ICAgIG1fcmVzb3VyY2VIYW5kbGUtPnNldENsaWVudCgwKTsKLSAgICAgICAgbV9yZXNvdXJjZUhh
bmRsZS0+Y2FuY2VsKCk7Ci0gICAgICAgIG1fcmVzb3VyY2VIYW5kbGUgPSAwOwotICAgIH0KLSAg
ICBtX2Rvd25sb2FkQ2xpZW50LnJlbGVhc2UoKTsKLX0KLQotdm9pZCBEb3dubG9hZDo6ZGlkRGVj
aWRlRGVzdGluYXRpb24oY29uc3QgU3RyaW5nJiAvKmRlc3RpbmF0aW9uKi8sIGJvb2wgLyphbGxv
d092ZXJ3cml0ZSovKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgRG93bmxv
YWQ6OnBsYXRmb3JtRGlkRmluaXNoKCkKLXsKLSAgICBtX3Jlc291cmNlSGFuZGxlID0gMDsKLX0K
LQotdm9pZCBEb3dubG9hZDo6cmVjZWl2ZWRDcmVkZW50aWFsKGNvbnN0IEF1dGhlbnRpY2F0aW9u
Q2hhbGxlbmdlJiwgY29uc3QgQ3JlZGVudGlhbCYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsK
LX0KLQotdm9pZCBEb3dubG9hZDo6cmVjZWl2ZWRSZXF1ZXN0VG9Db250aW51ZVdpdGhvdXRDcmVk
ZW50aWFsKGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJikKLXsKLSAgICBub3RJbXBsZW1l
bnRlZCgpOwotfQotCi12b2lkIERvd25sb2FkOjpyZWNlaXZlZENhbmNlbGxhdGlvbihjb25zdCBB
dXRoZW50aWNhdGlvbkNoYWxsZW5nZSYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQot
dm9pZCBEb3dubG9hZDo6Y29udGludWVXaXRob3V0Q3JlZGVudGlhbChjb25zdCBBdXRoZW50aWNh
dGlvbkNoYWxsZW5nZSAmKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgRG93
bmxvYWQ6OnVzZUNyZWRlbnRpYWwoY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmLCBjb25z
dCBDcmVkZW50aWFsJikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIERvd25s
b2FkOjpjYW5jZWxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShjb25zdCBBdXRoZW50aWNhdGlvbkNo
YWxsZW5nZSYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0Rvd25sb2Fkcy9z
b3VwL0Rvd25sb2FkU291cEVycm9ycy5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Eb3du
bG9hZHMvc291cC9Eb3dubG9hZFNvdXBFcnJvcnMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggODllMjNlMC4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0Rv
d25sb2Fkcy9zb3VwL0Rvd25sb2FkU291cEVycm9ycy5oCisrKyAvZGV2L251bGwKQEAgLTEsMzkg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBEb3dubG9hZFNvdXBFcnJvcnNf
aAotI2RlZmluZSBEb3dubG9hZFNvdXBFcnJvcnNfaAotCi0jaW5jbHVkZSA8V2ViQ29yZS9SZXNv
dXJjZUhhbmRsZS5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3Bh
Y2UgV2ViS2l0IHsKLQotV2ViQ29yZTo6UmVzb3VyY2VFcnJvciBwbGF0Zm9ybURvd25sb2FkTmV0
d29ya0Vycm9yKGludCBlcnJvckNvZGUsIGNvbnN0IFN0cmluZyYgZmFpbGluZ1VSTCwgY29uc3Qg
U3RyaW5nJiBsb2NhbGl6ZWREZXNjcmlwdGlvbik7Ci1XZWJDb3JlOjpSZXNvdXJjZUVycm9yIHBs
YXRmb3JtRG93bmxvYWREZXN0aW5hdGlvbkVycm9yKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVz
cG9uc2UmLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpOwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQK
LQotI2VuZGlmIC8vIERvd25sb2FkU291cEVycm9yc19oCg==
</data>
<flag name="review"
          id="203394"
          type_id="1"
          status="+"
          setter="andersca"
    />
          </attachment>
      

    </bug>

</bugzilla>