<?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>164348</bug_id>
          
          <creation_ts>2016-11-02 16:29:03 -0700</creation_ts>
          <short_desc>One file per class for UnlinkedCodeBlock.h/.cpp</short_desc>
          <delta_ts>2016-11-02 16:33:14 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>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="Geoffrey Garen">ggaren</reporter>
          <assigned_to name="Geoffrey Garen">ggaren</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1247553</commentid>
    <comment_count>0</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2016-11-02 16:29:03 -0700</bug_when>
    <thetext>One file per class for UnlinkedCodeBlock.h/.cpp</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1247554</commentid>
    <comment_count>1</comment_count>
      <attachid>293710</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2016-11-02 16:30:16 -0700</bug_when>
    <thetext>Created attachment 293710
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1247555</commentid>
    <comment_count>2</comment_count>
      <attachid>293710</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-11-02 16:31:12 -0700</bug_when>
    <thetext>Comment on attachment 293710
Patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1247556</commentid>
    <comment_count>3</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2016-11-02 16:33:14 -0700</bug_when>
    <thetext>Committed r208312: &lt;http://trac.webkit.org/changeset/208312&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>293710</attachid>
            <date>2016-11-02 16:30:16 -0700</date>
            <delta_ts>2016-11-02 16:31:12 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-164348-20161102162617.patch</filename>
            <type>text/plain</type>
            <size>494224</size>
            <attacher name="Geoffrey Garen">ggaren</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjA4MzExKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYzMiBA
QAorMjAxNi0xMS0wMiAgR2VvZmZyZXkgR2FyZW4gIDxnZ2FyZW5AYXBwbGUuY29tPgorCisgICAg
ICAgIE9uZSBmaWxlIHBlciBjbGFzcyBmb3IgVW5saW5rZWRDb2RlQmxvY2suaC8uY3BwCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjQzNDgKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIENNYWtlTGlzdHMu
dHh0OgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6
CisgICAgICAgICogYnl0ZWNvZGUvRnVuY3Rpb25Db2RlQmxvY2suaDoKKyAgICAgICAgKiBieXRl
Y29kZS9Nb2R1bGVQcm9ncmFtQ29kZUJsb2NrLmg6CisgICAgICAgICogYnl0ZWNvZGUvUHJvZ3Jh
bUNvZGVCbG9jay5oOgorICAgICAgICAqIGJ5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcDoK
KyAgICAgICAgKEpTQzo6VW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrOjp2aXNpdENoaWxkcmVuKTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrOjp2
aXNpdENoaWxkcmVuKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRQcm9ncmFtQ29k
ZUJsb2NrOjpkZXN0cm95KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRNb2R1bGVQ
cm9ncmFtQ29kZUJsb2NrOjpkZXN0cm95KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5r
ZWRFdmFsQ29kZUJsb2NrOjpkZXN0cm95KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5r
ZWRGdW5jdGlvbkNvZGVCbG9jazo6ZGVzdHJveSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlVu
bGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOjpkZXN0cm95KTogRGVsZXRlZC4KKyAgICAgICAgKiBi
eXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oOgorICAgICAgICAoSlNDOjpVbmxpbmtlZEdsb2Jh
bENvZGVCbG9jazo6VW5saW5rZWRHbG9iYWxDb2RlQmxvY2spOiBEZWxldGVkLgorICAgICAgICAq
IGJ5dGVjb2RlL1VubGlua2VkRXZhbENvZGVCbG9jay5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAuCisgICAgICAgIChK
U0M6OlVubGlua2VkQ29kZUJsb2NrOjpVbmxpbmtlZENvZGVCbG9jayk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjp2aXNpdENoaWxkcmVuKTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmVzdGltYXRlZFNpemUpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6bGluZU51bWJlckZvckJ5dGVjb2RlT2Zm
c2V0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmdldExpbmVB
bmRDb2x1bW4pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpkdW1wTGluZUNvbHVtbkVudHJ5KTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmR1bXBFeHByZXNzaW9u
UmFuZ2VJbmZvKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmV4
cHJlc3Npb25SYW5nZUZvckJ5dGVjb2RlT2Zmc2V0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
VW5saW5rZWRDb2RlQmxvY2s6OmFkZEV4cHJlc3Npb25JbmZvKTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OnR5cGVQcm9maWxlckV4cHJlc3Npb25JbmZvRm9yQnl0
ZWNvZGVPZmZzZXQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6
YWRkVHlwZVByb2ZpbGVyRXhwcmVzc2lvbkluZm8pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpV
bmxpbmtlZFByb2dyYW1Db2RlQmxvY2s6OnZpc2l0Q2hpbGRyZW4pOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpVbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2s6OnZpc2l0Q2hpbGRyZW4pOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6flVubGlua2VkQ29kZUJs
b2NrKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrOjpk
ZXN0cm95KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRNb2R1bGVQcm9ncmFtQ29k
ZUJsb2NrOjpkZXN0cm95KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRGdW5jdGlv
bkNvZGVCbG9jazo6ZGVzdHJveSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlVubGlua2VkRnVu
Y3Rpb25FeGVjdXRhYmxlOjpkZXN0cm95KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5r
ZWRDb2RlQmxvY2s6OnNldEluc3RydWN0aW9ucyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlVu
bGlua2VkQ29kZUJsb2NrOjppbnN0cnVjdGlvbnMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpV
bmxpbmtlZENvZGVCbG9jazo6aGFuZGxlckZvckJ5dGVjb2RlT2Zmc2V0KTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmhhbmRsZXJGb3JJbmRleCk6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjphcHBseU1vZGlmaWNhdGlvbik6IERl
bGV0ZWQuCisgICAgICAgICogYnl0ZWNvZGUvVW5saW5rZWRFdmFsQ29kZUJsb2NrLmg6IENvcGll
ZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5o
LgorICAgICAgICAoSlNDOjpVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZTo6b2Zmc2V0Rm9yVmFsdWUp
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZTo6YWRkKTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRJbnN0cnVjdGlvbjo6VW5saW5rZWRJbnN0
cnVjdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjppc0Nv
bnN0cnVjdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6Omlz
U3RyaWN0TW9kZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjp1
c2VzRXZhbCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpwYXJz
ZU1vZGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6aXNBcnJv
d0Z1bmN0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmRl
cml2ZWRDb250ZXh0VHlwZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJs
b2NrOjpldmFsQ29udGV4dFR5cGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtlZENv
ZGVCbG9jazo6aXNBcnJvd0Z1bmN0aW9uQ29udGV4dCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OlVubGlua2VkQ29kZUJsb2NrOjppc0NsYXNzQ29udGV4dCk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OlVubGlua2VkQ29kZUJsb2NrOjpoYXNFeHByZXNzaW9uSW5mbyk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpleHByZXNzaW9uSW5mbyk6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpzZXRUaGlzUmVnaXN0ZXIpOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6c2V0U2NvcGVSZWdpc3Rlcik6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjp1c2VzR2xvYmFsT2JqZWN0
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OnNldEdsb2JhbE9i
amVjdFJlZ2lzdGVyKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6
Omdsb2JhbE9iamVjdFJlZ2lzdGVyKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRD
b2RlQmxvY2s6OnNldE51bVBhcmFtZXRlcnMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxp
bmtlZENvZGVCbG9jazo6YWRkUGFyYW1ldGVyKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5s
aW5rZWRDb2RlQmxvY2s6Om51bVBhcmFtZXRlcnMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpV
bmxpbmtlZENvZGVCbG9jazo6YWRkUmVnRXhwKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5s
aW5rZWRDb2RlQmxvY2s6Om51bWJlck9mUmVnRXhwcyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OlVubGlua2VkQ29kZUJsb2NrOjpyZWdleHApOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxp
bmtlZENvZGVCbG9jazo6bnVtYmVyT2ZJZGVudGlmaWVycyk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OlVubGlua2VkQ29kZUJsb2NrOjphZGRJZGVudGlmaWVyKTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmlkZW50aWZpZXIpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpVbmxpbmtlZENvZGVCbG9jazo6aWRlbnRpZmllcnMpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpVbmxpbmtlZENvZGVCbG9jazo6YWRkQ29uc3RhbnQpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpVbmxpbmtlZENvZGVCbG9jazo6cmVnaXN0ZXJJbmRleEZvckxpbmtUaW1lQ29uc3RhbnQp
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6Y29uc3RhbnRSZWdp
c3RlcnMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6Y29uc3Rh
bnRSZWdpc3Rlcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpp
c0NvbnN0YW50UmVnaXN0ZXJJbmRleCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlVubGlua2Vk
Q29kZUJsb2NrOjpjb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24pOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6bnVtYmVyT2ZKdW1wVGFyZ2V0cyk6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjphZGRKdW1wVGFyZ2V0KTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6Omp1bXBUYXJnZXQpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6bGFzdEp1bXBUYXJnZXQp
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6aXNCdWlsdGluRnVu
Y3Rpb24pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6Y29uc3Ry
dWN0b3JLaW5kKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OnN1
cGVyQmluZGluZyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpz
Y3JpcHRNb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OnNo
cmlua1RvRml0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6Om51
bUNhbGxlZUxvY2Fscyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2Nr
OjpudW1iZXJPZlN3aXRjaEp1bXBUYWJsZXMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxp
bmtlZENvZGVCbG9jazo6YWRkU3dpdGNoSnVtcFRhYmxlKTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6VW5saW5rZWRDb2RlQmxvY2s6OnN3aXRjaEp1bXBUYWJsZSk6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpudW1iZXJPZlN0cmluZ1N3aXRjaEp1bXBUYWJsZXMp
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6YWRkU3RyaW5nU3dp
dGNoSnVtcFRhYmxlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6
OnN0cmluZ1N3aXRjaEp1bXBUYWJsZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlVubGlua2Vk
Q29kZUJsb2NrOjphZGRGdW5jdGlvbkRlY2wpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxp
bmtlZENvZGVCbG9jazo6ZnVuY3Rpb25EZWNsKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5s
aW5rZWRDb2RlQmxvY2s6Om51bWJlck9mRnVuY3Rpb25EZWNscyk6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjphZGRGdW5jdGlvbkV4cHIpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6ZnVuY3Rpb25FeHByKTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6Om51bWJlck9mRnVuY3Rpb25FeHBycyk6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpudW1iZXJPZkV4Y2VwdGlv
bkhhbmRsZXJzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmFk
ZEV4Y2VwdGlvbkhhbmRsZXIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVC
bG9jazo6ZXhjZXB0aW9uSGFuZGxlcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlVubGlua2Vk
Q29kZUJsb2NrOjphZGRBcnJheVByb2ZpbGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxp
bmtlZENvZGVCbG9jazo6bnVtYmVyT2ZBcnJheVByb2ZpbGVzKTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmFkZEFycmF5QWxsb2NhdGlvblByb2ZpbGUpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6bnVtYmVyT2ZBcnJheUFsbG9j
YXRpb25Qcm9maWxlcyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2Nr
OjphZGRPYmplY3RBbGxvY2F0aW9uUHJvZmlsZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlVu
bGlua2VkQ29kZUJsb2NrOjpudW1iZXJPZk9iamVjdEFsbG9jYXRpb25Qcm9maWxlcyk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjphZGRWYWx1ZVByb2ZpbGUpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6bnVtYmVyT2ZWYWx1ZVBy
b2ZpbGVzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmFkZExM
SW50Q2FsbExpbmtJbmZvKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxv
Y2s6Om51bWJlck9mTExpbnRDYWxsTGlua0luZm9zKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
VW5saW5rZWRDb2RlQmxvY2s6OmNvZGVUeXBlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5s
aW5rZWRDb2RlQmxvY2s6OnRoaXNSZWdpc3Rlcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlVu
bGlua2VkQ29kZUJsb2NrOjpzY29wZVJlZ2lzdGVyKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
VW5saW5rZWRDb2RlQmxvY2s6OmFkZFByb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb24pOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6bnVtYmVyT2ZQcm9wZXJ0eUFjY2Vz
c0luc3RydWN0aW9ucyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2Nr
Ojpwcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9ucyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlVu
bGlua2VkQ29kZUJsb2NrOjpjb25zdGFudEJ1ZmZlckNvdW50KTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmFkZENvbnN0YW50QnVmZmVyKTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmNvbnN0YW50QnVmZmVyKTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6Omhhc1JhcmVEYXRhKTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OnJlY29yZFBhcnNlKTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OnNvdXJjZVVSTERpcmVjdGl2ZSk6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpzb3VyY2VNYXBwaW5nVVJM
RGlyZWN0aXZlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OnNl
dFNvdXJjZVVSTERpcmVjdGl2ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlVubGlua2VkQ29k
ZUJsb2NrOjpzZXRTb3VyY2VNYXBwaW5nVVJMRGlyZWN0aXZlKTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmNvZGVGZWF0dXJlcyk6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpoYXNDYXB0dXJlZFZhcmlhYmxlcyk6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpmaXJzdExpbmUpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6bGluZUNvdW50KTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OnN0YXJ0Q29sdW1uKTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmVuZENvbHVtbik6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjphZGRPcFByb2ZpbGVDb250cm9sRmxvd0J5dGVj
b2RlT2Zmc2V0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6Om9w
UHJvZmlsZUNvbnRyb2xGbG93Qnl0ZWNvZGVPZmZzZXRzKTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6VW5saW5rZWRDb2RlQmxvY2s6Omhhc09wUHJvZmlsZUNvbnRyb2xGbG93Qnl0ZWNvZGVPZmZz
ZXRzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6Ondhc0NvbXBp
bGVkV2l0aERlYnVnZ2luZ09wY29kZXMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtl
ZENvZGVCbG9jazo6ZGlkT3B0aW1pemUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtl
ZENvZGVCbG9jazo6c2V0RGlkT3B0aW1pemUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxp
bmtlZENvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpV
bmxpbmtlZENvZGVCbG9jazo6Y3JlYXRlUmFyZURhdGFJZk5lY2Vzc2FyeSk6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OlVubGlua2VkR2xvYmFsQ29kZUJsb2NrOjpVbmxpbmtlZEdsb2JhbENvZGVC
bG9jayk6IERlbGV0ZWQuCisgICAgICAgICogYnl0ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkNvZGVC
bG9jay5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Vbmxp
bmtlZENvZGVCbG9jay5jcHAuCisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpVbmxp
bmtlZENvZGVCbG9jayk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2Nr
Ojp2aXNpdENoaWxkcmVuKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxv
Y2s6OmVzdGltYXRlZFNpemUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVC
bG9jazo6bGluZU51bWJlckZvckJ5dGVjb2RlT2Zmc2V0KTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6VW5saW5rZWRDb2RlQmxvY2s6OmdldExpbmVBbmRDb2x1bW4pOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpkdW1wTGluZUNvbHVtbkVudHJ5KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5s
aW5rZWRDb2RlQmxvY2s6OmR1bXBFeHByZXNzaW9uUmFuZ2VJbmZvKTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmV4cHJlc3Npb25SYW5nZUZvckJ5dGVjb2RlT2Zm
c2V0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmFkZEV4cHJl
c3Npb25JbmZvKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OnR5
cGVQcm9maWxlckV4cHJlc3Npb25JbmZvRm9yQnl0ZWNvZGVPZmZzZXQpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6YWRkVHlwZVByb2ZpbGVyRXhwcmVzc2lvbklu
Zm8pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2s6OnZp
c2l0Q2hpbGRyZW4pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtlZE1vZHVsZVByb2dy
YW1Db2RlQmxvY2s6OnZpc2l0Q2hpbGRyZW4pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxp
bmtlZENvZGVCbG9jazo6flVubGlua2VkQ29kZUJsb2NrKTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6VW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrOjpkZXN0cm95KTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6VW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrOjpkZXN0cm95KTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6VW5saW5rZWRFdmFsQ29kZUJsb2NrOjpkZXN0cm95KTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU6OmRlc3Ryb3kpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6c2V0SW5zdHJ1Y3Rpb25zKTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6Omluc3RydWN0aW9ucyk6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpoYW5kbGVyRm9yQnl0
ZWNvZGVPZmZzZXQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6
aGFuZGxlckZvckluZGV4KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxv
Y2s6OmFwcGx5TW9kaWZpY2F0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9Vbmxp
bmtlZEZ1bmN0aW9uQ29kZUJsb2NrLmg6IENvcGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oLgorICAgICAgICAoSlNDOjpVbmxpbmtlZFN0
cmluZ0p1bXBUYWJsZTo6b2Zmc2V0Rm9yVmFsdWUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpV
bmxpbmtlZFNpbXBsZUp1bXBUYWJsZTo6YWRkKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5s
aW5rZWRJbnN0cnVjdGlvbjo6VW5saW5rZWRJbnN0cnVjdGlvbik6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjppc0NvbnN0cnVjdG9yKTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmlzU3RyaWN0TW9kZSk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjp1c2VzRXZhbCk6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpwYXJzZU1vZGUpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpVbmxpbmtlZENvZGVCbG9jazo6aXNBcnJvd0Z1bmN0aW9uKTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmRlcml2ZWRDb250ZXh0VHlwZSk6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpldmFsQ29udGV4dFR5cGUpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6aXNBcnJvd0Z1bmN0aW9uQ29u
dGV4dCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjppc0NsYXNz
Q29udGV4dCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpoYXNF
eHByZXNzaW9uSW5mbyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2Nr
OjpleHByZXNzaW9uSW5mbyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJs
b2NrOjpzZXRUaGlzUmVnaXN0ZXIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtlZENv
ZGVCbG9jazo6c2V0U2NvcGVSZWdpc3Rlcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlVubGlu
a2VkQ29kZUJsb2NrOjp1c2VzR2xvYmFsT2JqZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
VW5saW5rZWRDb2RlQmxvY2s6OnNldEdsb2JhbE9iamVjdFJlZ2lzdGVyKTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6Omdsb2JhbE9iamVjdFJlZ2lzdGVyKTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OnNldE51bVBhcmFtZXRlcnMp
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6YWRkUGFyYW1ldGVy
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6Om51bVBhcmFtZXRl
cnMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6YWRkUmVnRXhw
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6Om51bWJlck9mUmVn
RXhwcyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpyZWdleHAp
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6bnVtYmVyT2ZJZGVu
dGlmaWVycyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjphZGRJ
ZGVudGlmaWVyKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6Omlk
ZW50aWZpZXIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6aWRl
bnRpZmllcnMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6YWRk
Q29uc3RhbnQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6cmVn
aXN0ZXJJbmRleEZvckxpbmtUaW1lQ29uc3RhbnQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpV
bmxpbmtlZENvZGVCbG9jazo6Y29uc3RhbnRSZWdpc3RlcnMpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpVbmxpbmtlZENvZGVCbG9jazo6Y29uc3RhbnRSZWdpc3Rlcik6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjppc0NvbnN0YW50UmVnaXN0ZXJJbmRleCk6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpjb25zdGFudHNTb3VyY2VD
b2RlUmVwcmVzZW50YXRpb24pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVC
bG9jazo6bnVtYmVyT2ZKdW1wVGFyZ2V0cyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlVubGlu
a2VkQ29kZUJsb2NrOjphZGRKdW1wVGFyZ2V0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5s
aW5rZWRDb2RlQmxvY2s6Omp1bXBUYXJnZXQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxp
bmtlZENvZGVCbG9jazo6bGFzdEp1bXBUYXJnZXQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpV
bmxpbmtlZENvZGVCbG9jazo6aXNCdWlsdGluRnVuY3Rpb24pOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpVbmxpbmtlZENvZGVCbG9jazo6Y29uc3RydWN0b3JLaW5kKTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OnN1cGVyQmluZGluZyk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpzY3JpcHRNb2RlKTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OnNocmlua1RvRml0KTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6Om51bUNhbGxlZUxvY2Fscyk6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpudW1iZXJPZlN3aXRjaEp1bXBUYWJsZXMp
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6YWRkU3dpdGNoSnVt
cFRhYmxlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OnN3aXRj
aEp1bXBUYWJsZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpu
dW1iZXJPZlN0cmluZ1N3aXRjaEp1bXBUYWJsZXMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpV
bmxpbmtlZENvZGVCbG9jazo6YWRkU3RyaW5nU3dpdGNoSnVtcFRhYmxlKTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OnN0cmluZ1N3aXRjaEp1bXBUYWJsZSk6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjphZGRGdW5jdGlvbkRlY2wp
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6ZnVuY3Rpb25EZWNs
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6Om51bWJlck9mRnVu
Y3Rpb25EZWNscyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjph
ZGRGdW5jdGlvbkV4cHIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9j
azo6ZnVuY3Rpb25FeHByKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxv
Y2s6Om51bWJlck9mRnVuY3Rpb25FeHBycyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlVubGlu
a2VkQ29kZUJsb2NrOjpudW1iZXJPZkV4Y2VwdGlvbkhhbmRsZXJzKTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmFkZEV4Y2VwdGlvbkhhbmRsZXIpOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6ZXhjZXB0aW9uSGFuZGxlcik6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjphZGRBcnJheVByb2ZpbGUp
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6bnVtYmVyT2ZBcnJh
eVByb2ZpbGVzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmFk
ZEFycmF5QWxsb2NhdGlvblByb2ZpbGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtl
ZENvZGVCbG9jazo6bnVtYmVyT2ZBcnJheUFsbG9jYXRpb25Qcm9maWxlcyk6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjphZGRPYmplY3RBbGxvY2F0aW9uUHJvZmls
ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpudW1iZXJPZk9i
amVjdEFsbG9jYXRpb25Qcm9maWxlcyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlVubGlua2Vk
Q29kZUJsb2NrOjphZGRWYWx1ZVByb2ZpbGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxp
bmtlZENvZGVCbG9jazo6bnVtYmVyT2ZWYWx1ZVByb2ZpbGVzKTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmFkZExMSW50Q2FsbExpbmtJbmZvKTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6Om51bWJlck9mTExpbnRDYWxsTGlua0lu
Zm9zKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmNvZGVUeXBl
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OnRoaXNSZWdpc3Rl
cik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpzY29wZVJlZ2lz
dGVyKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmFkZFByb3Bl
cnR5QWNjZXNzSW5zdHJ1Y3Rpb24pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtlZENv
ZGVCbG9jazo6bnVtYmVyT2ZQcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9ucyk6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpwcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9u
cyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpjb25zdGFudEJ1
ZmZlckNvdW50KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmFk
ZENvbnN0YW50QnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxv
Y2s6OmNvbnN0YW50QnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2Rl
QmxvY2s6Omhhc1JhcmVEYXRhKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2Rl
QmxvY2s6OnJlY29yZFBhcnNlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2Rl
QmxvY2s6OnNvdXJjZVVSTERpcmVjdGl2ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlVubGlu
a2VkQ29kZUJsb2NrOjpzb3VyY2VNYXBwaW5nVVJMRGlyZWN0aXZlKTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OnNldFNvdXJjZVVSTERpcmVjdGl2ZSk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpzZXRTb3VyY2VNYXBwaW5nVVJM
RGlyZWN0aXZlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmNv
ZGVGZWF0dXJlcyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpo
YXNDYXB0dXJlZFZhcmlhYmxlcyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlVubGlua2VkQ29k
ZUJsb2NrOjpmaXJzdExpbmUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVC
bG9jazo6bGluZUNvdW50KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxv
Y2s6OnN0YXJ0Q29sdW1uKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxv
Y2s6OmVuZENvbHVtbik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2Nr
OjphZGRPcFByb2ZpbGVDb250cm9sRmxvd0J5dGVjb2RlT2Zmc2V0KTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6Om9wUHJvZmlsZUNvbnRyb2xGbG93Qnl0ZWNvZGVP
ZmZzZXRzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6Omhhc09w
UHJvZmlsZUNvbnRyb2xGbG93Qnl0ZWNvZGVPZmZzZXRzKTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6VW5saW5rZWRDb2RlQmxvY2s6Ondhc0NvbXBpbGVkV2l0aERlYnVnZ2luZ09wY29kZXMpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6ZGlkT3B0aW1pemUpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6c2V0RGlkT3B0aW1pemUp
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6ZmluaXNoQ3JlYXRp
b24pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6Y3JlYXRlUmFy
ZURhdGFJZk5lY2Vzc2FyeSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlVubGlua2VkR2xvYmFs
Q29kZUJsb2NrOjpVbmxpbmtlZEdsb2JhbENvZGVCbG9jayk6IERlbGV0ZWQuCisgICAgICAgICog
Ynl0ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuY3BwOgorICAgICAgICAoSlNDOjpV
bmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6ZGVzdHJveSk6CisgICAgICAgICogYnl0ZWNvZGUv
VW5saW5rZWRHbG9iYWxDb2RlQmxvY2suaDogQ29waWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmguCisgICAgICAgIChKU0M6OlVubGlua2Vk
R2xvYmFsQ29kZUJsb2NrOjpVbmxpbmtlZEdsb2JhbENvZGVCbG9jayk6CisgICAgICAgIChKU0M6
OlVubGlua2VkU3RyaW5nSnVtcFRhYmxlOjpvZmZzZXRGb3JWYWx1ZSk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OlVubGlua2VkU2ltcGxlSnVtcFRhYmxlOjphZGQpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpVbmxpbmtlZEluc3RydWN0aW9uOjpVbmxpbmtlZEluc3RydWN0aW9uKTogRGVsZXRl
ZC4KKyAgICAgICAgKCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2Nr
Ojppc0NvbnN0cnVjdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxv
Y2s6OmlzU3RyaWN0TW9kZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJs
b2NrOjp1c2VzRXZhbCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2Nr
OjpwYXJzZU1vZGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6
aXNBcnJvd0Z1bmN0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxv
Y2s6OmRlcml2ZWRDb250ZXh0VHlwZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlVubGlua2Vk
Q29kZUJsb2NrOjpldmFsQ29udGV4dFR5cGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxp
bmtlZENvZGVCbG9jazo6aXNBcnJvd0Z1bmN0aW9uQ29udGV4dCk6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjppc0NsYXNzQ29udGV4dCk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpoYXNFeHByZXNzaW9uSW5mbyk6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpleHByZXNzaW9uSW5mbyk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpzZXRUaGlzUmVnaXN0ZXIpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6c2V0U2NvcGVSZWdpc3Rl
cik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjp1c2VzR2xvYmFs
T2JqZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OnNldEds
b2JhbE9iamVjdFJlZ2lzdGVyKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2Rl
QmxvY2s6Omdsb2JhbE9iamVjdFJlZ2lzdGVyKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5s
aW5rZWRDb2RlQmxvY2s6OnNldE51bVBhcmFtZXRlcnMpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpVbmxpbmtlZENvZGVCbG9jazo6YWRkUGFyYW1ldGVyKTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6VW5saW5rZWRDb2RlQmxvY2s6Om51bVBhcmFtZXRlcnMpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpVbmxpbmtlZENvZGVCbG9jazo6YWRkUmVnRXhwKTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6VW5saW5rZWRDb2RlQmxvY2s6Om51bWJlck9mUmVnRXhwcyk6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpyZWdleHApOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpVbmxpbmtlZENvZGVCbG9jazo6bnVtYmVyT2ZJZGVudGlmaWVycyk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjphZGRJZGVudGlmaWVyKTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmlkZW50aWZpZXIpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6aWRlbnRpZmllcnMpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6YWRkQ29uc3RhbnQpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6cmVnaXN0ZXJJbmRleEZvckxpbmtUaW1lQ29u
c3RhbnQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6Y29uc3Rh
bnRSZWdpc3RlcnMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6
Y29uc3RhbnRSZWdpc3Rlcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJs
b2NrOjppc0NvbnN0YW50UmVnaXN0ZXJJbmRleCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlVu
bGlua2VkQ29kZUJsb2NrOjpjb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24pOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6bnVtYmVyT2ZKdW1wVGFyZ2V0
cyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjphZGRKdW1wVGFy
Z2V0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6Omp1bXBUYXJn
ZXQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6bGFzdEp1bXBU
YXJnZXQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6aXNCdWls
dGluRnVuY3Rpb24pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6
Y29uc3RydWN0b3JLaW5kKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxv
Y2s6OnN1cGVyQmluZGluZyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJs
b2NrOjpzY3JpcHRNb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxv
Y2s6OnNocmlua1RvRml0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxv
Y2s6Om51bUNhbGxlZUxvY2Fscyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlVubGlua2VkQ29k
ZUJsb2NrOjpudW1iZXJPZlN3aXRjaEp1bXBUYWJsZXMpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpVbmxpbmtlZENvZGVCbG9jazo6YWRkU3dpdGNoSnVtcFRhYmxlKTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OnN3aXRjaEp1bXBUYWJsZSk6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpudW1iZXJPZlN0cmluZ1N3aXRjaEp1bXBU
YWJsZXMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6YWRkU3Ry
aW5nU3dpdGNoSnVtcFRhYmxlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2Rl
QmxvY2s6OnN0cmluZ1N3aXRjaEp1bXBUYWJsZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlVu
bGlua2VkQ29kZUJsb2NrOjphZGRGdW5jdGlvbkRlY2wpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpVbmxpbmtlZENvZGVCbG9jazo6ZnVuY3Rpb25EZWNsKTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6VW5saW5rZWRDb2RlQmxvY2s6Om51bWJlck9mRnVuY3Rpb25EZWNscyk6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjphZGRGdW5jdGlvbkV4cHIpOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6ZnVuY3Rpb25FeHByKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6Om51bWJlck9mRnVuY3Rpb25FeHBy
cyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpudW1iZXJPZkV4
Y2VwdGlvbkhhbmRsZXJzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxv
Y2s6OmFkZEV4Y2VwdGlvbkhhbmRsZXIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtl
ZENvZGVCbG9jazo6ZXhjZXB0aW9uSGFuZGxlcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlVu
bGlua2VkQ29kZUJsb2NrOjphZGRBcnJheVByb2ZpbGUpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpVbmxpbmtlZENvZGVCbG9jazo6bnVtYmVyT2ZBcnJheVByb2ZpbGVzKTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmFkZEFycmF5QWxsb2NhdGlvblByb2ZpbGUp
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6bnVtYmVyT2ZBcnJh
eUFsbG9jYXRpb25Qcm9maWxlcyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlVubGlua2VkQ29k
ZUJsb2NrOjphZGRPYmplY3RBbGxvY2F0aW9uUHJvZmlsZSk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OlVubGlua2VkQ29kZUJsb2NrOjpudW1iZXJPZk9iamVjdEFsbG9jYXRpb25Qcm9maWxlcyk6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjphZGRWYWx1ZVByb2Zp
bGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6bnVtYmVyT2ZW
YWx1ZVByb2ZpbGVzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6
OmFkZExMSW50Q2FsbExpbmtJbmZvKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRD
b2RlQmxvY2s6Om51bWJlck9mTExpbnRDYWxsTGlua0luZm9zKTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmNvZGVUeXBlKTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6VW5saW5rZWRDb2RlQmxvY2s6OnRoaXNSZWdpc3Rlcik6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OlVubGlua2VkQ29kZUJsb2NrOjpzY29wZVJlZ2lzdGVyKTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmFkZFByb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb24pOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6bnVtYmVyT2ZQcm9wZXJ0
eUFjY2Vzc0luc3RydWN0aW9ucyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlVubGlua2VkQ29k
ZUJsb2NrOjpwcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9ucyk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OlVubGlua2VkQ29kZUJsb2NrOjpjb25zdGFudEJ1ZmZlckNvdW50KTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmFkZENvbnN0YW50QnVmZmVyKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmNvbnN0YW50QnVmZmVyKTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6Omhhc1JhcmVEYXRhKTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OnJlY29yZFBhcnNlKTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OnNvdXJjZVVSTERpcmVjdGl2
ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpzb3VyY2VNYXBw
aW5nVVJMRGlyZWN0aXZlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxv
Y2s6OnNldFNvdXJjZVVSTERpcmVjdGl2ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlVubGlu
a2VkQ29kZUJsb2NrOjpzZXRTb3VyY2VNYXBwaW5nVVJMRGlyZWN0aXZlKTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmNvZGVGZWF0dXJlcyk6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpoYXNDYXB0dXJlZFZhcmlhYmxlcyk6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpmaXJzdExpbmUpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6bGluZUNvdW50KTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OnN0YXJ0Q29sdW1uKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmVuZENvbHVtbik6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjphZGRPcFByb2ZpbGVDb250cm9sRmxv
d0J5dGVjb2RlT2Zmc2V0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxv
Y2s6Om9wUHJvZmlsZUNvbnRyb2xGbG93Qnl0ZWNvZGVPZmZzZXRzKTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6Omhhc09wUHJvZmlsZUNvbnRyb2xGbG93Qnl0ZWNv
ZGVPZmZzZXRzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6Ondh
c0NvbXBpbGVkV2l0aERlYnVnZ2luZ09wY29kZXMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpV
bmxpbmtlZENvZGVCbG9jazo6ZGlkT3B0aW1pemUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpV
bmxpbmtlZENvZGVCbG9jazo6c2V0RGlkT3B0aW1pemUpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpVbmxpbmtlZENvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24pOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpVbmxpbmtlZENvZGVCbG9jazo6Y3JlYXRlUmFyZURhdGFJZk5lY2Vzc2FyeSk6IERlbGV0
ZWQuCisgICAgICAgICogYnl0ZWNvZGUvVW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrLmNw
cDogQ29waWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29k
ZUJsb2NrLmNwcC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OlVubGlua2VkQ29k
ZUJsb2NrKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OnZpc2l0
Q2hpbGRyZW4pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6ZXN0
aW1hdGVkU2l6ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjps
aW5lTnVtYmVyRm9yQnl0ZWNvZGVPZmZzZXQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxp
bmtlZENvZGVCbG9jazo6Z2V0TGluZUFuZENvbHVtbik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OmR1bXBMaW5lQ29sdW1uRW50cnkpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtlZENv
ZGVCbG9jazo6ZHVtcEV4cHJlc3Npb25SYW5nZUluZm8pOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpVbmxpbmtlZENvZGVCbG9jazo6ZXhwcmVzc2lvblJhbmdlRm9yQnl0ZWNvZGVPZmZzZXQpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6YWRkRXhwcmVzc2lvbklu
Zm8pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6dHlwZVByb2Zp
bGVyRXhwcmVzc2lvbkluZm9Gb3JCeXRlY29kZU9mZnNldCk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OlVubGlua2VkQ29kZUJsb2NrOjphZGRUeXBlUHJvZmlsZXJFeHByZXNzaW9uSW5mbyk6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OlVubGlua2VkUHJvZ3JhbUNvZGVCbG9jazo6dmlzaXRDaGls
ZHJlbik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjp+VW5saW5r
ZWRDb2RlQmxvY2spOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtlZFByb2dyYW1Db2Rl
QmxvY2s6OmRlc3Ryb3kpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtlZEV2YWxDb2Rl
QmxvY2s6OmRlc3Ryb3kpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtlZEZ1bmN0aW9u
Q29kZUJsb2NrOjpkZXN0cm95KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRGdW5j
dGlvbkV4ZWN1dGFibGU6OmRlc3Ryb3kpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtl
ZENvZGVCbG9jazo6c2V0SW5zdHJ1Y3Rpb25zKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5s
aW5rZWRDb2RlQmxvY2s6Omluc3RydWN0aW9ucyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlVu
bGlua2VkQ29kZUJsb2NrOjpoYW5kbGVyRm9yQnl0ZWNvZGVPZmZzZXQpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6aGFuZGxlckZvckluZGV4KTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmFwcGx5TW9kaWZpY2F0aW9uKTogRGVs
ZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9VbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2su
aDogQ29waWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29k
ZUJsb2NrLmguCisgICAgICAgIChKU0M6OlVubGlua2VkU3RyaW5nSnVtcFRhYmxlOjpvZmZzZXRG
b3JWYWx1ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlVubGlua2VkU2ltcGxlSnVtcFRhYmxl
OjphZGQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtlZEluc3RydWN0aW9uOjpVbmxp
bmtlZEluc3RydWN0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxv
Y2s6OmlzQ29uc3RydWN0b3IpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVC
bG9jazo6aXNTdHJpY3RNb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2Rl
QmxvY2s6OnVzZXNFdmFsKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxv
Y2s6OnBhcnNlTW9kZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2Nr
Ojppc0Fycm93RnVuY3Rpb24pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVC
bG9jazo6ZGVyaXZlZENvbnRleHRUeXBlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5r
ZWRDb2RlQmxvY2s6OmV2YWxDb250ZXh0VHlwZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlVu
bGlua2VkQ29kZUJsb2NrOjppc0Fycm93RnVuY3Rpb25Db250ZXh0KTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmlzQ2xhc3NDb250ZXh0KTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6Omhhc0V4cHJlc3Npb25JbmZvKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmV4cHJlc3Npb25JbmZvKTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OnNldFRoaXNSZWdpc3Rlcik6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpzZXRTY29wZVJlZ2lz
dGVyKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OnVzZXNHbG9i
YWxPYmplY3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6c2V0
R2xvYmFsT2JqZWN0UmVnaXN0ZXIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtlZENv
ZGVCbG9jazo6Z2xvYmFsT2JqZWN0UmVnaXN0ZXIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpV
bmxpbmtlZENvZGVCbG9jazo6c2V0TnVtUGFyYW1ldGVycyk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OlVubGlua2VkQ29kZUJsb2NrOjphZGRQYXJhbWV0ZXIpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpVbmxpbmtlZENvZGVCbG9jazo6bnVtUGFyYW1ldGVycyk6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjphZGRSZWdFeHApOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpVbmxpbmtlZENvZGVCbG9jazo6bnVtYmVyT2ZSZWdFeHBzKTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OnJlZ2V4cCk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OlVubGlua2VkQ29kZUJsb2NrOjpudW1iZXJPZklkZW50aWZpZXJzKTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmFkZElkZW50aWZpZXIpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6aWRlbnRpZmllcik6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjppZGVudGlmaWVycyk6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjphZGRDb25zdGFudCk6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpyZWdpc3RlckluZGV4Rm9yTGlua1RpbWVD
b25zdGFudCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpjb25z
dGFudFJlZ2lzdGVycyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2Nr
Ojpjb25zdGFudFJlZ2lzdGVyKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2Rl
QmxvY2s6OmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
VW5saW5rZWRDb2RlQmxvY2s6OmNvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbik6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpudW1iZXJPZkp1bXBUYXJn
ZXRzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmFkZEp1bXBU
YXJnZXQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6anVtcFRh
cmdldCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpsYXN0SnVt
cFRhcmdldCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjppc0J1
aWx0aW5GdW5jdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2Nr
Ojpjb25zdHJ1Y3RvcktpbmQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVC
bG9jazo6c3VwZXJCaW5kaW5nKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2Rl
QmxvY2s6OnNjcmlwdE1vZGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVC
bG9jazo6c2hyaW5rVG9GaXQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVC
bG9jazo6bnVtQ2FsbGVlTG9jYWxzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRD
b2RlQmxvY2s6Om51bWJlck9mU3dpdGNoSnVtcFRhYmxlcyk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OlVubGlua2VkQ29kZUJsb2NrOjphZGRTd2l0Y2hKdW1wVGFibGUpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6c3dpdGNoSnVtcFRhYmxlKTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6Om51bWJlck9mU3RyaW5nU3dpdGNoSnVt
cFRhYmxlcyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjphZGRT
dHJpbmdTd2l0Y2hKdW1wVGFibGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtlZENv
ZGVCbG9jazo6c3RyaW5nU3dpdGNoSnVtcFRhYmxlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
VW5saW5rZWRDb2RlQmxvY2s6OmFkZEZ1bmN0aW9uRGVjbCk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OlVubGlua2VkQ29kZUJsb2NrOjpmdW5jdGlvbkRlY2wpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpVbmxpbmtlZENvZGVCbG9jazo6bnVtYmVyT2ZGdW5jdGlvbkRlY2xzKTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmFkZEZ1bmN0aW9uRXhwcik6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpmdW5jdGlvbkV4cHIpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6bnVtYmVyT2ZGdW5jdGlvbkV4
cHJzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6Om51bWJlck9m
RXhjZXB0aW9uSGFuZGxlcnMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVC
bG9jazo6YWRkRXhjZXB0aW9uSGFuZGxlcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlVubGlu
a2VkQ29kZUJsb2NrOjpleGNlcHRpb25IYW5kbGVyKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
VW5saW5rZWRDb2RlQmxvY2s6OmFkZEFycmF5UHJvZmlsZSk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OlVubGlua2VkQ29kZUJsb2NrOjpudW1iZXJPZkFycmF5UHJvZmlsZXMpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6YWRkQXJyYXlBbGxvY2F0aW9uUHJvZmls
ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpudW1iZXJPZkFy
cmF5QWxsb2NhdGlvblByb2ZpbGVzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRD
b2RlQmxvY2s6OmFkZE9iamVjdEFsbG9jYXRpb25Qcm9maWxlKTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6Om51bWJlck9mT2JqZWN0QWxsb2NhdGlvblByb2ZpbGVz
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmFkZFZhbHVlUHJv
ZmlsZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpudW1iZXJP
ZlZhbHVlUHJvZmlsZXMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9j
azo6YWRkTExJbnRDYWxsTGlua0luZm8pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtl
ZENvZGVCbG9jazo6bnVtYmVyT2ZMTGludENhbGxMaW5rSW5mb3MpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6Y29kZVR5cGUpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpVbmxpbmtlZENvZGVCbG9jazo6dGhpc1JlZ2lzdGVyKTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OnNjb3BlUmVnaXN0ZXIpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6YWRkUHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbik6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpudW1iZXJPZlByb3Bl
cnR5QWNjZXNzSW5zdHJ1Y3Rpb25zKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRD
b2RlQmxvY2s6OnByb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25zKTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmNvbnN0YW50QnVmZmVyQ291bnQpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6YWRkQ29uc3RhbnRCdWZmZXIpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6Y29uc3RhbnRCdWZmZXIpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6aGFzUmFyZURhdGEpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6cmVjb3JkUGFyc2UpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6c291cmNlVVJMRGlyZWN0
aXZlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OnNvdXJjZU1h
cHBpbmdVUkxEaXJlY3RpdmUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVC
bG9jazo6c2V0U291cmNlVVJMRGlyZWN0aXZlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5s
aW5rZWRDb2RlQmxvY2s6OnNldFNvdXJjZU1hcHBpbmdVUkxEaXJlY3RpdmUpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6Y29kZUZlYXR1cmVzKTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6Omhhc0NhcHR1cmVkVmFyaWFibGVzKTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmZpcnN0TGluZSk6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpsaW5lQ291bnQpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6c3RhcnRDb2x1bW4pOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6ZW5kQ29sdW1uKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmFkZE9wUHJvZmlsZUNvbnRyb2xG
bG93Qnl0ZWNvZGVPZmZzZXQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVC
bG9jazo6b3BQcm9maWxlQ29udHJvbEZsb3dCeXRlY29kZU9mZnNldHMpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6aGFzT3BQcm9maWxlQ29udHJvbEZsb3dCeXRl
Y29kZU9mZnNldHMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6
d2FzQ29tcGlsZWRXaXRoRGVidWdnaW5nT3Bjb2Rlcyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OlVubGlua2VkQ29kZUJsb2NrOjpkaWRPcHRpbWl6ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OlVubGlua2VkQ29kZUJsb2NrOjpzZXREaWRPcHRpbWl6ZSk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OlVubGlua2VkQ29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbik6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpjcmVhdGVSYXJlRGF0YUlmTmVjZXNzYXJ5KTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRHbG9iYWxDb2RlQmxvY2s6OlVubGlua2VkR2xv
YmFsQ29kZUJsb2NrKTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9VbmxpbmtlZFByb2dy
YW1Db2RlQmxvY2suY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwLgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9j
azo6VW5saW5rZWRDb2RlQmxvY2spOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtlZENv
ZGVCbG9jazo6dmlzaXRDaGlsZHJlbik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlVubGlua2Vk
Q29kZUJsb2NrOjplc3RpbWF0ZWRTaXplKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5r
ZWRDb2RlQmxvY2s6OmxpbmVOdW1iZXJGb3JCeXRlY29kZU9mZnNldCk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpnZXRMaW5lQW5kQ29sdW1uKTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6ZHVtcExpbmVDb2x1bW5FbnRyeSk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OlVubGlua2VkQ29kZUJsb2NrOjpkdW1wRXhwcmVzc2lvblJhbmdlSW5mbyk6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpleHByZXNzaW9uUmFuZ2VGb3JCeXRl
Y29kZU9mZnNldCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjph
ZGRFeHByZXNzaW9uSW5mbyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJs
b2NrOjp0eXBlUHJvZmlsZXJFeHByZXNzaW9uSW5mb0ZvckJ5dGVjb2RlT2Zmc2V0KTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmFkZFR5cGVQcm9maWxlckV4cHJl
c3Npb25JbmZvKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRNb2R1bGVQcm9ncmFt
Q29kZUJsb2NrOjp2aXNpdENoaWxkcmVuKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5r
ZWRDb2RlQmxvY2s6On5VbmxpbmtlZENvZGVCbG9jayk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OlVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jazo6ZGVzdHJveSk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OlVubGlua2VkRXZhbENvZGVCbG9jazo6ZGVzdHJveSk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OlVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2s6OmRlc3Ryb3kpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6ZGVzdHJveSk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpzZXRJbnN0cnVjdGlvbnMpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6aW5zdHJ1Y3Rpb25zKTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmhhbmRsZXJGb3JCeXRl
Y29kZU9mZnNldCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpo
YW5kbGVyRm9ySW5kZXgpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9j
azo6YXBwbHlNb2RpZmljYXRpb24pOiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb2RlL1VubGlu
a2VkUHJvZ3JhbUNvZGVCbG9jay5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRTdHJp
bmdKdW1wVGFibGU6Om9mZnNldEZvclZhbHVlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5s
aW5rZWRTaW1wbGVKdW1wVGFibGU6OmFkZCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlVubGlu
a2VkSW5zdHJ1Y3Rpb246OlVubGlua2VkSW5zdHJ1Y3Rpb24pOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpVbmxpbmtlZENvZGVCbG9jazo6aXNDb25zdHJ1Y3Rvcik6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjppc1N0cmljdE1vZGUpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6dXNlc0V2YWwpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpVbmxpbmtlZENvZGVCbG9jazo6cGFyc2VNb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6VW5saW5rZWRDb2RlQmxvY2s6OmlzQXJyb3dGdW5jdGlvbik6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpkZXJpdmVkQ29udGV4dFR5cGUpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6ZXZhbENvbnRleHRUeXBlKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmlzQXJyb3dGdW5jdGlvbkNvbnRl
eHQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6aXNDbGFzc0Nv
bnRleHQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6aGFzRXhw
cmVzc2lvbkluZm8pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6
ZXhwcmVzc2lvbkluZm8pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9j
azo6c2V0VGhpc1JlZ2lzdGVyKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2Rl
QmxvY2s6OnNldFNjb3BlUmVnaXN0ZXIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtl
ZENvZGVCbG9jazo6dXNlc0dsb2JhbE9iamVjdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlVu
bGlua2VkQ29kZUJsb2NrOjpzZXRHbG9iYWxPYmplY3RSZWdpc3Rlcik6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpnbG9iYWxPYmplY3RSZWdpc3Rlcik6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpzZXROdW1QYXJhbWV0ZXJzKTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmFkZFBhcmFtZXRlcik6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpudW1QYXJhbWV0ZXJz
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmFkZFJlZ0V4cCk6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpudW1iZXJPZlJlZ0V4
cHMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6cmVnZXhwKTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6Om51bWJlck9mSWRlbnRp
ZmllcnMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6YWRkSWRl
bnRpZmllcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjppZGVu
dGlmaWVyKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmlkZW50
aWZpZXJzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmFkZENv
bnN0YW50KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OnJlZ2lz
dGVySW5kZXhGb3JMaW5rVGltZUNvbnN0YW50KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5s
aW5rZWRDb2RlQmxvY2s6OmNvbnN0YW50UmVnaXN0ZXJzKTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6VW5saW5rZWRDb2RlQmxvY2s6OmNvbnN0YW50UmVnaXN0ZXIpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6aXNDb25zdGFudFJlZ2lzdGVySW5kZXgpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6Y29uc3RhbnRzU291cmNlQ29k
ZVJlcHJlc2VudGF0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxv
Y2s6Om51bWJlck9mSnVtcFRhcmdldHMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtl
ZENvZGVCbG9jazo6YWRkSnVtcFRhcmdldCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlVubGlu
a2VkQ29kZUJsb2NrOjpqdW1wVGFyZ2V0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5r
ZWRDb2RlQmxvY2s6Omxhc3RKdW1wVGFyZ2V0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5s
aW5rZWRDb2RlQmxvY2s6OmlzQnVpbHRpbkZ1bmN0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6VW5saW5rZWRDb2RlQmxvY2s6OmNvbnN0cnVjdG9yS2luZCk6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpzdXBlckJpbmRpbmcpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6c2NyaXB0TW9kZSk6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpzaHJpbmtUb0ZpdCk6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpudW1DYWxsZWVMb2NhbHMpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6bnVtYmVyT2ZTd2l0Y2hKdW1wVGFibGVzKTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmFkZFN3aXRjaEp1bXBU
YWJsZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpzd2l0Y2hK
dW1wVGFibGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6bnVt
YmVyT2ZTdHJpbmdTd2l0Y2hKdW1wVGFibGVzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5s
aW5rZWRDb2RlQmxvY2s6OmFkZFN0cmluZ1N3aXRjaEp1bXBUYWJsZSk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpzdHJpbmdTd2l0Y2hKdW1wVGFibGUpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6YWRkRnVuY3Rpb25EZWNsKTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmZ1bmN0aW9uRGVjbCk6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpudW1iZXJPZkZ1bmN0
aW9uRGVjbHMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6YWRk
RnVuY3Rpb25FeHByKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6
OmZ1bmN0aW9uRXhwcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2Nr
OjpudW1iZXJPZkZ1bmN0aW9uRXhwcnMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtl
ZENvZGVCbG9jazo6bnVtYmVyT2ZFeGNlcHRpb25IYW5kbGVycyk6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjphZGRFeGNlcHRpb25IYW5kbGVyKTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmV4Y2VwdGlvbkhhbmRsZXIpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6YWRkQXJyYXlQcm9maWxlKTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6Om51bWJlck9mQXJyYXlQ
cm9maWxlcyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjphZGRB
cnJheUFsbG9jYXRpb25Qcm9maWxlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRD
b2RlQmxvY2s6Om51bWJlck9mQXJyYXlBbGxvY2F0aW9uUHJvZmlsZXMpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6YWRkT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUp
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6bnVtYmVyT2ZPYmpl
Y3RBbGxvY2F0aW9uUHJvZmlsZXMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtlZENv
ZGVCbG9jazo6YWRkVmFsdWVQcm9maWxlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5r
ZWRDb2RlQmxvY2s6Om51bWJlck9mVmFsdWVQcm9maWxlcyk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OlVubGlua2VkQ29kZUJsb2NrOjphZGRMTEludENhbGxMaW5rSW5mbyk6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpudW1iZXJPZkxMaW50Q2FsbExpbmtJbmZv
cyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpjb2RlVHlwZSk6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjp0aGlzUmVnaXN0ZXIp
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6c2NvcGVSZWdpc3Rl
cik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjphZGRQcm9wZXJ0
eUFjY2Vzc0luc3RydWN0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2Rl
QmxvY2s6Om51bWJlck9mUHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbnMpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6cHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbnMp
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6Y29uc3RhbnRCdWZm
ZXJDb3VudCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjphZGRD
b25zdGFudEJ1ZmZlcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2Nr
Ojpjb25zdGFudEJ1ZmZlcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJs
b2NrOjpoYXNSYXJlRGF0YSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJs
b2NrOjpyZWNvcmRQYXJzZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJs
b2NrOjpzb3VyY2VVUkxEaXJlY3RpdmUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtl
ZENvZGVCbG9jazo6c291cmNlTWFwcGluZ1VSTERpcmVjdGl2ZSk6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpzZXRTb3VyY2VVUkxEaXJlY3RpdmUpOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6c2V0U291cmNlTWFwcGluZ1VSTERp
cmVjdGl2ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpjb2Rl
RmVhdHVyZXMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6aGFz
Q2FwdHVyZWRWYXJpYWJsZXMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVC
bG9jazo6Zmlyc3RMaW5lKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxv
Y2s6OmxpbmVDb3VudCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2Nr
OjpzdGFydENvbHVtbik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2Nr
OjplbmRDb2x1bW4pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6
YWRkT3BQcm9maWxlQ29udHJvbEZsb3dCeXRlY29kZU9mZnNldCk6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpvcFByb2ZpbGVDb250cm9sRmxvd0J5dGVjb2RlT2Zm
c2V0cyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpoYXNPcFBy
b2ZpbGVDb250cm9sRmxvd0J5dGVjb2RlT2Zmc2V0cyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OlVubGlua2VkQ29kZUJsb2NrOjp3YXNDb21waWxlZFdpdGhEZWJ1Z2dpbmdPcGNvZGVzKTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmRpZE9wdGltaXplKTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OnNldERpZE9wdGltaXplKTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9u
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmNyZWF0ZVJhcmVE
YXRhSWZOZWNlc3NhcnkpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtlZEdsb2JhbENv
ZGVCbG9jazo6VW5saW5rZWRHbG9iYWxDb2RlQmxvY2spOiBEZWxldGVkLgorICAgICAgICAqIGJ5
dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHA6CisgICAgICAgICogcnVudGltZS9Db2Rl
Q2FjaGUuY3BwOgorICAgICAgICAqIHJ1bnRpbWUvRXZhbEV4ZWN1dGFibGUuaDoKKyAgICAgICAg
KiBydW50aW1lL0pTTW9kdWxlUmVjb3JkLmNwcDoKKwogMjAxNi0xMS0wMiAgU2FhbSBCYXJhdGkg
IDxzYmFyYXRpQGFwcGxlLmNvbT4KIAogICAgICAgICBBbGxvY2F0aW9uIGVsaW1pbmF0aW9uIG9m
IHJlc3QgcGFyYW1ldGVyIGRvZXNuJ3QgdGFrZSBpbnRvIGFjY291bnQgaW5kZXhlZCBwcm9wZXJ0
aWVzIG9uIEFycmF5LnByb3RvdHlwZS9PYmplY3QucHJvdG90eXBlCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAyMDgzMDkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTI0NCw4ICsyNDQsMTIg
QEAgc2V0KEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICBieXRlY29kZS9Ub1RoaXNTdGF0dXMu
Y3BwCiAgICAgYnl0ZWNvZGUvVHJhY2tlZFJlZmVyZW5jZXMuY3BwCiAgICAgYnl0ZWNvZGUvVW5s
aW5rZWRDb2RlQmxvY2suY3BwCisgICAgYnl0ZWNvZGUvVW5saW5rZWRFdmFsQ29kZUJsb2NrLmNw
cAorICAgIGJ5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25Db2RlQmxvY2suY3BwCiAgICAgYnl0ZWNv
ZGUvVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuY3BwCiAgICAgYnl0ZWNvZGUvVW5saW5rZWRJ
bnN0cnVjdGlvblN0cmVhbS5jcHAKKyAgICBieXRlY29kZS9VbmxpbmtlZE1vZHVsZVByb2dyYW1D
b2RlQmxvY2suY3BwCisgICAgYnl0ZWNvZGUvVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrLmNwcAog
ICAgIGJ5dGVjb2RlL1ZhbHVlUmVjb3ZlcnkuY3BwCiAgICAgYnl0ZWNvZGUvVmFyaWFibGVXcml0
ZUZpcmVEZXRhaWwuY3BwCiAgICAgYnl0ZWNvZGUvVmlydHVhbFJlZ2lzdGVyLmNwcApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIwODMwOSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3
b3JraW5nIGNvcHkpCkBAIC0xMTUwLDYgKzExNTAsMTYgQEAKIAkJMTRBRDkxMTkxRENBOTdGRDAw
MTRGOUZFIC8qIFByb2dyYW1Db2RlQmxvY2suY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMTRBRDkxMTQxRENBOTdGRDAwMTRGOUZFIC8qIFByb2dyYW1D
b2RlQmxvY2suY3BwICovOyB9OwogCQkxNEFEOTExQTFEQ0E5N0ZEMDAxNEY5RkUgLyogV2ViQXNz
ZW1ibHlDb2RlQmxvY2suY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMTRBRDkxMTUxRENBOTdGRDAwMTRGOUZFIC8qIFdlYkFzc2VtYmx5Q29kZUJsb2Nr
LmNwcCAqLzsgfTsKIAkJMTRBRDkxMUIxRENBOTdGRDAwMTRGOUZFIC8qIEZ1bmN0aW9uQ29kZUJs
b2NrLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0
QUQ5MTE2MURDQTk3RkQwMDE0RjlGRSAvKiBGdW5jdGlvbkNvZGVCbG9jay5jcHAgKi87IH07CisJ
CTE0QUQ5MTIyMURDQTlGQTQwMDE0RjlGRSAvKiBVbmxpbmtlZEdsb2JhbENvZGVCbG9jay5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTRBRDkxMUMxRENB
OUZBNDAwMTRGOUZFIC8qIFVubGlua2VkR2xvYmFsQ29kZUJsb2NrLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMTRBRDkxMjMxRENBOUZBNDAwMTRG
OUZFIC8qIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0QUQ5MTFEMURDQTlGQTQwMDE0RjlGRSAvKiBVbmxp
bmtlZEZ1bmN0aW9uQ29kZUJsb2NrLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKKwkJMTRBRDkxMjQxRENBOUZBNDAwMTRGOUZFIC8qIFVubGlua2VkRXZh
bENvZGVCbG9jay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMTRBRDkxMUUxRENBOUZBNDAwMTRGOUZFIC8qIFVubGlua2VkRXZhbENvZGVCbG9jay5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTE0QUQ5MTI1
MURDQTlGQTQwMDE0RjlGRSAvKiBVbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2suaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0QUQ5MTFGMURDQTlG
QTQwMDE0RjlGRSAvKiBVbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2suaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkxNEFEOTEyNjFEQ0E5RkE0
MDAxNEY5RkUgLyogVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNEFEOTEyMDFEQ0E5RkE0MDAxNEY5RkUgLyog
VW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKKwkJMTRBRDkxMjcxRENBOUZBNDAwMTRGOUZFIC8qIFVubGlua2Vk
RnVuY3Rpb25FeGVjdXRhYmxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAxNEFEOTEyMTFEQ0E5RkE0MDAxNEY5RkUgLyogVW5saW5rZWRGdW5jdGlvbkV4
ZWN1dGFibGUuaCAqLzsgfTsKKwkJMTRBRDkxMkMxRENBQUFCMDAwMTRGOUZFIC8qIFVubGlua2Vk
RXZhbENvZGVCbG9jay5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAxNEFEOTEyODFEQ0FBQUIwMDAxNEY5RkUgLyogVW5saW5rZWRFdmFsQ29kZUJsb2Nr
LmNwcCAqLzsgfTsKKwkJMTRBRDkxMkQxRENBQUFCMDAwMTRGOUZFIC8qIFVubGlua2VkUHJvZ3Jh
bUNvZGVCbG9jay5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAxNEFEOTEyOTFEQ0FBQUIwMDAxNEY5RkUgLyogVW5saW5rZWRQcm9ncmFtQ29kZUJsb2Nr
LmNwcCAqLzsgfTsKKwkJMTRBRDkxMkUxRENBQUFCMDAwMTRGOUZFIC8qIFVubGlua2VkTW9kdWxl
UHJvZ3JhbUNvZGVCbG9jay5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAxNEFEOTEyQTFEQ0FBQUIwMDAxNEY5RkUgLyogVW5saW5rZWRNb2R1bGVQcm9n
cmFtQ29kZUJsb2NrLmNwcCAqLzsgfTsKKwkJMTRBRDkxMkYxRENBQUFCMDAwMTRGOUZFIC8qIFVu
bGlua2VkRnVuY3Rpb25Db2RlQmxvY2suY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMTRBRDkxMkIxRENBQUFCMDAwMTRGOUZFIC8qIFVubGlua2VkRnVu
Y3Rpb25Db2RlQmxvY2suY3BwICovOyB9OwogCQkxNEI3MjNCMjEyRDdEQTQ2MDAzQkQ1RUQgLyog
TWFjaGluZVN0YWNrTWFya2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDE0QjcyMzNGMTJEN0QwREEwMDNCRDVFRCAvKiBNYWNoaW5lU3RhY2tNYXJr
ZXIuY3BwICovOyB9OwogCQkxNEI3MjNCODEyRDdEQTZGMDAzQkQ1RUQgLyogTWFjaGluZVN0YWNr
TWFya2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAx
NEI3MjM0MDEyRDdEMERBMDAzQkQ1RUQgLyogTWFjaGluZVN0YWNrTWFya2VyLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTRCOEVDNzIwQTU2NTIw
OTAwNjJCRTU0IC8qIENvcmVGb3VuZGF0aW9uLmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1NjBBNENGMDRCM0IzRTcwMDhBRTk1MiAv
KiBDb3JlRm91bmRhdGlvbi5mcmFtZXdvcmsgKi87IH07CkBAIC0zNDc1LDYgKzM0ODUsMTYgQEAK
IAkJMTRBRDkxMTQxRENBOTdGRDAwMTRGOUZFIC8qIFByb2dyYW1Db2RlQmxvY2suY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUHJvZ3JhbUNvZGVCbG9jay5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0QUQ5MTE1MURDQTk3RkQwMDE0RjlGRSAvKiBX
ZWJBc3NlbWJseUNvZGVCbG9jay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBXZWJBc3NlbWJseUNvZGVCbG9jay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTE0QUQ5MTE2MURDQTk3RkQwMDE0RjlGRSAvKiBGdW5jdGlvbkNvZGVCbG9jay5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGdW5jdGlvbkNvZGVCbG9jay5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTE0QUQ5MTFDMURDQTlGQTQwMDE0RjlGRSAv
KiBVbmxpbmtlZEdsb2JhbENvZGVCbG9jay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBVbmxpbmtlZEdsb2JhbENvZGVCbG9jay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkxNEFEOTExRDFEQ0E5RkE0MDAxNEY5RkUgLyogVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9j
ay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBVbmxpbmtlZEZ1bmN0aW9uQ29k
ZUJsb2NrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTE0QUQ5MTFFMURDQTlGQTQw
MDE0RjlGRSAvKiBVbmxpbmtlZEV2YWxDb2RlQmxvY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gVW5saW5rZWRFdmFsQ29kZUJsb2NrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTE0QUQ5MTFGMURDQTlGQTQwMDE0RjlGRSAvKiBVbmxpbmtlZE1vZHVsZVByb2dy
YW1Db2RlQmxvY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVW5saW5rZWRN
b2R1bGVQcm9ncmFtQ29kZUJsb2NrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTE0
QUQ5MTIwMURDQTlGQTQwMDE0RjlGRSAvKiBVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2suaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTE0QUQ5MTIxMURDQTlGQTQwMDE0RjlGRSAv
KiBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkxNEFEOTEyODFEQ0FBQUIwMDAxNEY5RkUgLyogVW5saW5rZWRFdmFsQ29kZUJs
b2NrLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFVubGlua2VkRXZh
bENvZGVCbG9jay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTE0QUQ5MTI5MURD
QUFBQjAwMDE0RjlGRSAvKiBVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2suY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMTRBRDkxMkExRENBQUFCMDAwMTRGOUZFIC8q
IFVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBVbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2suY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxNEFEOTEyQjFEQ0FBQUIwMDAxNEY5RkUgLyogVW5s
aW5rZWRGdW5jdGlvbkNvZGVCbG9jay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMTRCNzIzM0YxMkQ3RDBEQTAwM0JENUVEIC8qIE1hY2hpbmVTdGFja01hcmtl
ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNYWNoaW5lU3RhY2tN
YXJrZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNEI3MjM0MDEyRDdEMERB
MDAzQkQ1RUQgLyogTWFjaGluZVN0YWNrTWFya2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IE1hY2hpbmVTdGFja01hcmtlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkxNEJBNzhGMDEzQUFCODhGMDA1QjdDMkMgLyogU2xvdFZpc2l0b3IuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2xvdFZpc2l0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKQEAgLTcxODQsMTAgKzcyMDQsMTkgQEAKIAkJCQkwRjJENERFNzE5ODMyREFDMDA3
RDRCMTkgLyogVHlwZUxvY2F0aW9uLmggKi8sCiAJCQkJQTc5RTc4MUUxNUVFQ0JBODAwNDdDODU1
IC8qIFVubGlua2VkQ29kZUJsb2NrLmNwcCAqLywKIAkJCQlBNzlFNzgxRjE1RUVDQkE4MDA0N0M4
NTUgLyogVW5saW5rZWRDb2RlQmxvY2suaCAqLywKKwkJCQkxNEFEOTEyODFEQ0FBQUIwMDAxNEY5
RkUgLyogVW5saW5rZWRFdmFsQ29kZUJsb2NrLmNwcCAqLywKKwkJCQkxNEFEOTExRTFEQ0E5RkE0
MDAxNEY5RkUgLyogVW5saW5rZWRFdmFsQ29kZUJsb2NrLmggKi8sCisJCQkJMTRBRDkxMkIxRENB
QUFCMDAwMTRGOUZFIC8qIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2suY3BwICovLAorCQkJCTE0
QUQ5MTFEMURDQTlGQTQwMDE0RjlGRSAvKiBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrLmggKi8s
CiAJCQkJMTQxNDJFNTQxQjc5NzNDMDAwRjRCRjRCIC8qIFVubGlua2VkRnVuY3Rpb25FeGVjdXRh
YmxlLmNwcCAqLywKLQkJCQkxNDE0MkU1MDFCNzk2RUNFMDBGNEJGNEIgLyogVW5saW5rZWRGdW5j
dGlvbkV4ZWN1dGFibGUuaCAqLywKKwkJCQkxNEFEOTEyMTFEQ0E5RkE0MDAxNEY5RkUgLyogVW5s
aW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuaCAqLywKKwkJCQkxNEFEOTExQzFEQ0E5RkE0MDAxNEY5
RkUgLyogVW5saW5rZWRHbG9iYWxDb2RlQmxvY2suaCAqLywKIAkJCQlCNTlGODkzODE4OTFBREI1
MDBENUNDREMgLyogVW5saW5rZWRJbnN0cnVjdGlvblN0cmVhbS5jcHAgKi8sCiAJCQkJQjU5Rjg5
MzcxODkxQUQzMzAwRDVDQ0RDIC8qIFVubGlua2VkSW5zdHJ1Y3Rpb25TdHJlYW0uaCAqLywKKwkJ
CQkxNEFEOTEyQTFEQ0FBQUIwMDAxNEY5RkUgLyogVW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJs
b2NrLmNwcCAqLywKKwkJCQkxNEFEOTExRjFEQ0E5RkE0MDAxNEY5RkUgLyogVW5saW5rZWRNb2R1
bGVQcm9ncmFtQ29kZUJsb2NrLmggKi8sCisJCQkJMTRBRDkxMjkxRENBQUFCMDAwMTRGOUZFIC8q
IFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jay5jcHAgKi8sCisJCQkJMTRBRDkxMjAxRENBOUZBNDAw
MTRGOUZFIC8qIFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jay5oICovLAogCQkJCTBGOTYzQjM2MTNG
QzZGREUwMDAyRDlCMiAvKiBWYWx1ZVByb2ZpbGUuaCAqLywKIAkJCQkwRjI0RTU1NzE3Rjc0RURC
MDBBQkIyMTcgLyogVmFsdWVSZWNvdmVyeS5jcHAgKi8sCiAJCQkJMEY0MjZBNDUxNDYwQ0JBQjAw
MTMxRjhGIC8qIFZhbHVlUmVjb3ZlcnkuaCAqLywKQEAgLTcxOTksNiArNzIyOCw3IEBACiAJCQkJ
MEY5MTlEMjMxNTg1M0NERTAwNEE0RTdEIC8qIFdhdGNocG9pbnQuaCAqLywKIAkJCQkxNEFEOTEx
NTFEQ0E5N0ZEMDAxNEY5RkUgLyogV2ViQXNzZW1ibHlDb2RlQmxvY2suY3BwICovLAogCQkJCTE0
QUQ5MTBCMURDQTkyOTQwMDE0RjlGRSAvKiBXZWJBc3NlbWJseUNvZGVCbG9jay5oICovLAorCQkJ
CTE0MTQyRTUwMUI3OTZFQ0UwMEY0QkY0QiAvKiBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5o
ICovLAogCQkJKTsKIAkJCXBhdGggPSBieXRlY29kZTsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7CkBAIC03NTgyLDYgKzc2MTIsNyBAQAogCQkJCTBGRUM4NTc0MUJEQUNEQzcwMDgwRkY3NCAv
KiBBaXJDQ2FsbFNwZWNpYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUM4NTc2MUJEQUNEQzcw
MDgwRkY3NCAvKiBBaXJDb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjM3MzA5MzFDMEQ2N0VF
MDAwNTJCRkEgLyogQWlyVXNlQ291bnRzLmggaW4gSGVhZGVycyAqLywKKwkJCQkxNEFEOTEyNDFE
Q0E5RkE0MDAxNEY5RkUgLyogVW5saW5rZWRFdmFsQ29kZUJsb2NrLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRjQ1NzAzOTFCRTQ0QzkxMDA2MkE2MjkgLyogQWlyRWxpbWluYXRlRGVhZENvZGUuaCBp
biBIZWFkZXJzICovLAogCQkJCTc5QjAwQ0JEMUM2QUIwN0UwMDg4QzY1RCAvKiBQcm94eUNvbnN0
cnVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk1M0Q0NDREQzFEQUYwOEFCMDBCOTI3ODQgLyog
QjNXYXNtQWRkcmVzc1ZhbHVlLmggaW4gSGVhZGVycyAqLywKQEAgLTc2MzgsNiArNzY2OSw3IEBA
CiAJCQkJOTk2QjczMTgxQkRBMDY4MDAwMzMxQjg0IC8qIEFycmF5SXRlcmF0b3JQcm90b3R5cGUu
bHV0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjYzOTQ1NTE1RDA3MDU3MDA2QTU5N0MgLyogQXJy
YXlQcm9maWxlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzNFNzBFMTZGNUNEMDBCMzQ0NjAg
LyogQXJyYXlQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTE0QUQ5MTI1MURDQTlGQTQw
MDE0RjlGRSAvKiBVbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2suaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGQjdGMzk2MTVFRDhFNDYwMEYxNjdCMiAvKiBBcnJheVN0b3JhZ2UuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTk2ODhDQjE1MEVEMTJCNEUwMDFENjQ5RiAvKiBBc3NlbWJsZXJCdWZmZXIu
aCBpbiBIZWFkZXJzICovLAogCQkJCTg2RDNCMkM1MTAxNTZCREUwMDI4NjVFNyAvKiBBc3NlbWJs
ZXJCdWZmZXJXaXRoQ29uc3RhbnRQb29sLmggaW4gSGVhZGVycyAqLywKQEAgLTgwODEsNiArODEx
Myw3IEBACiAJCQkJQTc2NkI0NEYwRUU4RENEMTAwOTUxOENBIC8qIEV4ZWN1dGFibGVBbGxvY2F0
b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0MTQyRTUzMUI3OTZFREQwMEY0QkY0QiAvKiBFeGVj
dXRhYmxlSW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY1NkExRDMxNTAwMEYzNTAwMjk5MkIx
IC8qIEV4ZWN1dGlvbkNvdW50ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTE0QUQ5MTI2MURDQTlG
QTQwMDE0RjlGRSAvKiBVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2suaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGM0FDNzU0MTg4RTVFQzgwMDMyMDI5RiAvKiBFeGl0aW5nSklUVHlwZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJREUyNkU5MDMxQ0I1REQwNTAwRDJCRTgyIC8qIEJ1aWx0aW5FeGVjdXRhYmxl
Q3JlYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCMTA1ODYxNjc1NDgxMjAwRjhBQjZFIC8q
IEV4aXRLaW5kLmggaW4gSGVhZGVycyAqLywKQEAgLTg1NjEsNiArODU5NCw3IEBACiAJCQkJODYx
MkU0Q0QxNTIzODlFQzAwQzgzNkJFIC8qIE1hdGNoUmVzdWx0LmggaW4gSGVhZGVycyAqLywKIAkJ
CQk0MzQwQTQ4NTFBOTA1MUFGMDBENzNDQ0EgLyogTWF0aENvbW1vbi5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQkMxOEM0M0MwRTE2RjVDRDAwQjM0NDYwIC8qIE1hdGhPYmplY3QuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTE0QUQ5MTIyMURDQTlGQTQwMDE0RjlGRSAvKiBVbmxpbmtlZEdsb2JhbENvZGVC
bG9jay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQ3MzQxQ0MxREMwMkQ3MjAwQUEyOUJBIC8qIEV4
ZWN1dGFibGVCYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5MDIxM0UzRTEyM0E0MEMyMDBENDIy
RjMgLyogTWVtb3J5U3RhdGlzdGljcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCNTQ2N0IxNEY1
QzdFMTAwMkMyOTg5IC8qIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuaCBpbiBIZWFkZXJz
ICovLApAQCAtODc0Nyw2ICs4NzgxLDcgQEAKIAkJCQlCQ0RFM0FCODBFNkM4MkY1MDAxNDUzQTcg
LyogU3RydWN0dXJlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDczNDFENjFEQzAyRUI5MDBBQTI5
QkEgLyogTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTdFNEVF
NzA5MEVCQjc5NjMwMDU5MzRBQSAvKiBTdHJ1Y3R1cmVDaGFpbi5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJMTRBRDkxMjcxRENBOUZBNDAwMTRGOUZFIC8qIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxl
LmggaW4gSGVhZGVycyAqLywKIAkJCQlGRTY0OTEzNzFENzhGMDFEMDBBNjk0RDQgLyogRXhjZXB0
aW9uU2NvcGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTJBQUFBMzEyMThCRDQ5RDEwMDM5NENDOCAv
KiBTdHJ1Y3R1cmVJREJsb2IuaCBpbiBIZWFkZXJzICovLAogCQkJCTQzNkU1NDUzMUM0NjhFNzQw
MEI1QUY3MyAvKiBCM0xlZ2FsaXplTWVtb3J5T2Zmc2V0cy5oIGluIEhlYWRlcnMgKi8sCkBAIC04
ODIwLDYgKzg4NTUsNyBAQAogCQkJCTBGOTYzQjM4MTNGQzZGRTkwMDAyRDlCMiAvKiBWYWx1ZVBy
b2ZpbGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNDI2QTQ4MTQ2MENCQjMwMDEzMUY4RiAvKiBW
YWx1ZVJlY292ZXJ5LmggaW4gSGVhZGVycyAqLywKIAkJCQk3OUVFMEMwMDFCNEFGQjg1MDAwMzg1
QzkgLyogVmFyaWFibGVFbnZpcm9ubWVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMTRBRDkxMjMx
RENBOUZBNDAwMTRGOUZFIC8qIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2suaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGNkM3MzUxMUFDOUY5OUYwMEJFMTY4MiAvKiBWYXJpYWJsZVdyaXRlRmlyZURl
dGFpbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFMDUwMkQxQUE5MDk1NjAwRDMzQjMzIC8qIFZh
ck9mZnNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY0MjZBNDkxNDYwQ0JCNzAwMTMxRjhGIC8q
IFZpcnR1YWxSZWdpc3Rlci5oIGluIEhlYWRlcnMgKi8sCkBAIC05NTAwLDYgKzk1MzYsNyBAQAog
CQkJCTBGM0I3RTJBMTlBMTFCODAwMEQ5QkM1NiAvKiBDYWxsVmFyaWFudC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRkUwNTAyNTFBQTkwOTU2MDBEMzNCMzMgLyogQ2xvbmVkQXJndW1lbnRzLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTk2OUEwNzk2MEVEMUQzQUUwMEYxRjY4MSAvKiBDb2RlQmxv
Y2suY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMTRBRDkxMkQxRENBQUFCMDAwMTRGOUZFIC8qIFVu
bGlua2VkUHJvZ3JhbUNvZGVCbG9jay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjhGOTQ0MDE2
Njc2MzMwMDBENjE5NzEgLyogQ29kZUJsb2NrSGFzaC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
RkM5N0YzMzE4MjAyMEQ3MDAyQzlCMjYgLyogQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMzM4RTBGMUJGMDI3NkMwMDEzQzg4RiAvKiBCM01v
dmVDb25zdGFudHMuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC05NjA1LDYgKzk2NDIsNyBAQAogCQkJ
CTBGN0Y5ODhCMUQ5NTk2QzUwMEY0RjEyRSAvKiBERkdTdG9yZUJhcnJpZXJDbHVzdGVyaW5nUGhh
c2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyRkNDRjkxOEE2MDA3MDAwMUEyN0Y4IC8qIERG
R0dyYXBoU2FmZXBvaW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQjE3NjYwMTk2QjhGOUUw
MDkxMDUyQSAvKiBERkdIZWFwTG9jYXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMTRBRDkx
MkUxRENBQUFCMDAwMTRGOUZFIC8qIFVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jay5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkwRkM4NDE2ODFCQThDMzIxMDA2MTgzN0QgLyogREZHSW5mZXJy
ZWRUeXBlQ2hlY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTcwNEQ5MDUxN0EwQkFBODAwNkJB
NTU0IC8qIERGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBG
M0JEMUI3MUI4OTZBMDcwMDU5OEFBNiAvKiBERkdJbnNlcnRpb25TZXQuY3BwIGluIFNvdXJjZXMg
Ki8sCkBAIC05ODY1LDYgKzk5MDMsNyBAQAogCQkJCTE0NkZFNTEyMTFBNzEwNDMwMDg3QUU2NiAv
KiBKSVRDYWxsMzJfNjQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY4Rjk0NDQxNjY3NjM1NDAw
RDYxOTcxIC8qIEpJVENvZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZBRjdFRkQxNjVCQTkx
QjAwMEM4NDU1IC8qIEpJVERpc2Fzc2VtYmxlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkxNEFE
OTEyRjFEQ0FBQUIwMDAxNEY5RkUgLyogVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jay5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkwRjZEQjdFQzFENjE3RDExMDBDREJGOEUgLyogTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUFEMkZDQkUyMURCNThEQUQwMEIzRTcz
NiAvKiBKU1dlYkFzc2VtYmx5Q29tcGlsZUVycm9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBG
NDY4MDgzMTRCQTU3MzEwMEJGRTI3MiAvKiBKSVRFeGNlcHRpb25zLmNwcCBpbiBTb3VyY2VzICov
LApAQCAtOTk2NCw2ICsxMDAwMyw3IEBACiAJCQkJMkEwNUFCRDUxOTYxREYyNDAwMzQxNzUwIC8q
IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFM0VGODg3
NDFCNjZERjIzMDAzRjI2Q0IgLyogSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk4NjI1NTNEMTE2MTM2REE5MDA5RjE3RDAgLyogSlNQcm94eS5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQkxNEFEOTEyQzFEQ0FBQUIwMDAxNEY5RkUgLyogVW5saW5rZWRFdmFsQ29k
ZUJsb2NrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1NTJDMzdGMUFEREI4RkUwMDEzOTcyNiAv
KiBKU1JlbW90ZUluc3BlY3Rvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlEQzAxODQxQTFEMTBD
MThDMDA1N0IwNTMgLyogSklUV29ya2xpc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTkyOEZG
M0IxOEFDNEFFQzAwQjhDRjEyIC8qIEpTUmVwbGF5SW5wdXRzLmNwcCBpbiBTb3VyY2VzICovLApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Z1bmN0aW9uQ29kZUJsb2NrLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Z1bmN0aW9uQ29k
ZUJsb2NrLmgJKHJldmlzaW9uIDIwODMwOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9GdW5jdGlvbkNvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBA
CiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgorI2luY2x1ZGUgIlVubGlu
a2VkRnVuY3Rpb25Db2RlQmxvY2suaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Nb2R1bGVQcm9ncmFtQ29kZUJsb2NrLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL01vZHVsZVByb2dyYW1Db2Rl
QmxvY2suaAkocmV2aXNpb24gMjA4MzA5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL01vZHVsZVByb2dyYW1Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAs
NyBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJHbG9iYWxDb2RlQmxvY2suaCIKKyNpbmNs
dWRlICJVbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2suaCIKIAogbmFtZXNwYWNlIEpTQyB7
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qcm9ncmFtQ29kZUJsb2Nr
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Byb2dyYW1D
b2RlQmxvY2suaAkocmV2aXNpb24gMjA4MzA5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1Byb2dyYW1Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBA
QAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJHbG9iYWxDb2RlQmxvY2suaCIKKyNpbmNsdWRl
ICJVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2suaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJs
b2NrLmNwcAkocmV2aXNpb24gMjA4MzA4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsMjQgKzMzLDIz
IEBACiAjaW5jbHVkZSAiQ29kZUNhY2hlLmgiCiAjaW5jbHVkZSAiRXhlY3V0YWJsZUluZm8uaCIK
ICNpbmNsdWRlICJGdW5jdGlvbk92ZXJyaWRlcy5oIgotI2luY2x1ZGUgIkpTU3RyaW5nLmgiCiAj
aW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIkpTU3RyaW5nLmgiCiAjaW5jbHVkZSAi
UGFyc2VyLmgiCiAjaW5jbHVkZSAiUHJlY2lzZUp1bXBUYXJnZXRzSW5saW5lcy5oIgogI2luY2x1
ZGUgIlNvdXJjZVByb3ZpZGVyLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlLmgiCiAjaW5jbHVkZSAi
U3ltYm9sVGFibGUuaCIKKyNpbmNsdWRlICJVbmxpbmtlZEV2YWxDb2RlQmxvY2suaCIKKyNpbmNs
dWRlICJVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiVW5saW5rZWRJbnN0
cnVjdGlvblN0cmVhbS5oIgorI2luY2x1ZGUgIlVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9j
ay5oIgorI2luY2x1ZGUgIlVubGlua2VkUHJvZ3JhbUNvZGVCbG9jay5oIgogI2luY2x1ZGUgPHd0
Zi9EYXRhTG9nLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCiBjb25zdCBDbGFzc0luZm8gVW5saW5r
ZWRDb2RlQmxvY2s6OnNfaW5mbyA9IHsgIlVubGlua2VkQ29kZUJsb2NrIiwgMCwgMCwgQ1JFQVRF
X01FVEhPRF9UQUJMRShVbmxpbmtlZENvZGVCbG9jaykgfTsKLWNvbnN0IENsYXNzSW5mbyBVbmxp
bmtlZEdsb2JhbENvZGVCbG9jazo6c19pbmZvID0geyAiVW5saW5rZWRHbG9iYWxDb2RlQmxvY2si
LCAmQmFzZTo6c19pbmZvLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKFVubGlua2VkR2xvYmFsQ29k
ZUJsb2NrKSB9OwotY29uc3QgQ2xhc3NJbmZvIFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jazo6c19p
bmZvID0geyAiVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrIiwgJkJhc2U6OnNfaW5mbywgMCwgQ1JF
QVRFX01FVEhPRF9UQUJMRShVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2spIH07Ci1jb25zdCBDbGFz
c0luZm8gVW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrOjpzX2luZm8gPSB7ICJVbmxpbmtl
ZE1vZHVsZVByb2dyYW1Db2RlQmxvY2siLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBDUkVBVEVf
TUVUSE9EX1RBQkxFKFVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jaykgfTsKLWNvbnN0IENs
YXNzSW5mbyBVbmxpbmtlZEV2YWxDb2RlQmxvY2s6OnNfaW5mbyA9IHsgIlVubGlua2VkRXZhbENv
ZGVCbG9jayIsICZCYXNlOjpzX2luZm8sIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoVW5saW5rZWRF
dmFsQ29kZUJsb2NrKSB9OwotY29uc3QgQ2xhc3NJbmZvIFVubGlua2VkRnVuY3Rpb25Db2RlQmxv
Y2s6OnNfaW5mbyA9IHsgIlVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2siLCAmQmFzZTo6c19pbmZv
LCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2spIH07CiAK
IFVubGlua2VkQ29kZUJsb2NrOjpVbmxpbmtlZENvZGVCbG9jayhWTSogdm0sIFN0cnVjdHVyZSog
c3RydWN0dXJlLCBDb2RlVHlwZSBjb2RlVHlwZSwgY29uc3QgRXhlY3V0YWJsZUluZm8mIGluZm8s
IERlYnVnZ2VyTW9kZSBkZWJ1Z2dlck1vZGUpCiAgICAgOiBCYXNlKCp2bSwgc3RydWN0dXJlKQpA
QCAtMzA4LDQ5ICszMDcsMTAgQEAgdm9pZCBVbmxpbmtlZENvZGVCbG9jazo6YWRkVHlwZVByb2Zp
bGVyRQogICAgIG1fcmFyZURhdGEtPm1fdHlwZVByb2ZpbGVySW5mb01hcC5zZXQoaW5zdHJ1Y3Rp
b25PZmZzZXQsIHJhbmdlKTsKIH0KIAotdm9pZCBVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2s6OnZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKLXsKLSAgICBV
bmxpbmtlZFByb2dyYW1Db2RlQmxvY2sqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8VW5saW5rZWRQcm9n
cmFtQ29kZUJsb2NrKj4oY2VsbCk7Ci0gICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlz
T2JqZWN0LCBpbmZvKCkpOwotICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlz
aXRvcik7Ci19Ci0KLXZvaWQgVW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrOjp2aXNpdENo
aWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCi17Ci0gICAgVW5saW5r
ZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrKiB0aGlzT2JqZWN0ID0ganNDYXN0PFVubGlua2VkTW9k
dWxlUHJvZ3JhbUNvZGVCbG9jayo+KGNlbGwpOwotICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJ
VFModGhpc09iamVjdCwgaW5mbygpKTsKLSAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmpl
Y3QsIHZpc2l0b3IpOwotfQotCiBVbmxpbmtlZENvZGVCbG9jazo6flVubGlua2VkQ29kZUJsb2Nr
KCkKIHsKIH0KIAotdm9pZCBVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2s6OmRlc3Ryb3koSlNDZWxs
KiBjZWxsKQotewotICAgIGpzQ2FzdDxVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2sqPihjZWxsKS0+
flVubGlua2VkUHJvZ3JhbUNvZGVCbG9jaygpOwotfQotCi12b2lkIFVubGlua2VkTW9kdWxlUHJv
Z3JhbUNvZGVCbG9jazo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCi17Ci0gICAganNDYXN0PFVubGlu
a2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayo+KGNlbGwpLT5+VW5saW5rZWRNb2R1bGVQcm9ncmFt
Q29kZUJsb2NrKCk7Ci19Ci0KLXZvaWQgVW5saW5rZWRFdmFsQ29kZUJsb2NrOjpkZXN0cm95KEpT
Q2VsbCogY2VsbCkKLXsKLSAgICBqc0Nhc3Q8VW5saW5rZWRFdmFsQ29kZUJsb2NrKj4oY2VsbCkt
Pn5VbmxpbmtlZEV2YWxDb2RlQmxvY2soKTsKLX0KLQotdm9pZCBVbmxpbmtlZEZ1bmN0aW9uQ29k
ZUJsb2NrOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKLXsKLSAgICBqc0Nhc3Q8VW5saW5rZWRGdW5j
dGlvbkNvZGVCbG9jayo+KGNlbGwpLT5+VW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jaygpOwotfQot
Ci12b2lkIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkK
LXsKLSAgICBqc0Nhc3Q8VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqPihjZWxsKS0+flVubGlu
a2VkRnVuY3Rpb25FeGVjdXRhYmxlKCk7Ci19Ci0KIHZvaWQgVW5saW5rZWRDb2RlQmxvY2s6OnNl
dEluc3RydWN0aW9ucyhzdGQ6OnVuaXF1ZV9wdHI8VW5saW5rZWRJbnN0cnVjdGlvblN0cmVhbT4g
aW5zdHJ1Y3Rpb25zKQogewogICAgIEFTU0VSVChpbnN0cnVjdGlvbnMpOwpAQCAtNDI3LDQgKzM4
NywzIEBAIHZvaWQgVW5saW5rZWRDb2RlQmxvY2s6OmFwcGx5TW9kaWZpY2F0aW8KIH0KIAogfQot
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2su
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRD
b2RlQmxvY2suaAkocmV2aXNpb24gMjA4MzA4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5MiwxOTUgKzQ5
Miw0IEBAIHB1YmxpYzoKICAgICBERUNMQVJFX0lORk87CiB9OwogCi1jbGFzcyBVbmxpbmtlZEds
b2JhbENvZGVCbG9jayA6IHB1YmxpYyBVbmxpbmtlZENvZGVCbG9jayB7Ci1wdWJsaWM6Ci0gICAg
dHlwZWRlZiBVbmxpbmtlZENvZGVCbG9jayBCYXNlOwotCi1wcm90ZWN0ZWQ6Ci0gICAgVW5saW5r
ZWRHbG9iYWxDb2RlQmxvY2soVk0qIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQ29kZVR5cGUg
Y29kZVR5cGUsIGNvbnN0IEV4ZWN1dGFibGVJbmZvJiBpbmZvLCBEZWJ1Z2dlck1vZGUgZGVidWdn
ZXJNb2RlKQotICAgICAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSwgY29kZVR5cGUsIGluZm8sIGRl
YnVnZ2VyTW9kZSkKLSAgICB7Ci0gICAgfQotCi0gICAgREVDTEFSRV9JTkZPOwotfTsKLQotY2xh
c3MgVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrIGZpbmFsIDogcHVibGljIFVubGlua2VkR2xvYmFs
Q29kZUJsb2NrIHsKLXByaXZhdGU6Ci0gICAgZnJpZW5kIGNsYXNzIENvZGVDYWNoZTsKLSAgICBz
dGF0aWMgVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrKiBjcmVhdGUoVk0qIHZtLCBjb25zdCBFeGVj
dXRhYmxlSW5mbyYgaW5mbywgRGVidWdnZXJNb2RlIGRlYnVnZ2VyTW9kZSkKLSAgICB7Ci0gICAg
ICAgIFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jayogaW5zdGFuY2UgPSBuZXcgKE5vdE51bGwsIGFs
bG9jYXRlQ2VsbDxVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2s+KHZtLT5oZWFwKSkgVW5saW5rZWRQ
cm9ncmFtQ29kZUJsb2NrKHZtLCB2bS0+dW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrU3RydWN0dXJl
LmdldCgpLCBpbmZvLCBkZWJ1Z2dlck1vZGUpOwotICAgICAgICBpbnN0YW5jZS0+ZmluaXNoQ3Jl
YXRpb24oKnZtKTsKLSAgICAgICAgcmV0dXJuIGluc3RhbmNlOwotICAgIH0KLQotcHVibGljOgot
ICAgIHR5cGVkZWYgVW5saW5rZWRHbG9iYWxDb2RlQmxvY2sgQmFzZTsKLSAgICBzdGF0aWMgY29u
c3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IFN0cnVj
dHVyZUlzSW1tb3J0YWw7Ci0KLSAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwotCi0g
ICAgdm9pZCBzZXRWYXJpYWJsZURlY2xhcmF0aW9ucyhjb25zdCBWYXJpYWJsZUVudmlyb25tZW50
JiBlbnZpcm9ubWVudCkgeyBtX3ZhckRlY2xhcmF0aW9ucyA9IGVudmlyb25tZW50OyB9Ci0gICAg
Y29uc3QgVmFyaWFibGVFbnZpcm9ubWVudCYgdmFyaWFibGVEZWNsYXJhdGlvbnMoKSBjb25zdCB7
IHJldHVybiBtX3ZhckRlY2xhcmF0aW9uczsgfQotCi0gICAgdm9pZCBzZXRMZXhpY2FsRGVjbGFy
YXRpb25zKGNvbnN0IFZhcmlhYmxlRW52aXJvbm1lbnQmIGVudmlyb25tZW50KSB7IG1fbGV4aWNh
bERlY2xhcmF0aW9ucyA9IGVudmlyb25tZW50OyB9Ci0gICAgY29uc3QgVmFyaWFibGVFbnZpcm9u
bWVudCYgbGV4aWNhbERlY2xhcmF0aW9ucygpIGNvbnN0IHsgcmV0dXJuIG1fbGV4aWNhbERlY2xh
cmF0aW9uczsgfQotCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90
VmlzaXRvciYpOwotCi1wcml2YXRlOgotICAgIFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jayhWTSog
dm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBFeGVjdXRhYmxlSW5mbyYgaW5mbywgRGVi
dWdnZXJNb2RlIGRlYnVnZ2VyTW9kZSkKLSAgICAgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUsIEds
b2JhbENvZGUsIGluZm8sIGRlYnVnZ2VyTW9kZSkKLSAgICB7Ci0gICAgfQotCi0gICAgVmFyaWFi
bGVFbnZpcm9ubWVudCBtX3ZhckRlY2xhcmF0aW9uczsKLSAgICBWYXJpYWJsZUVudmlyb25tZW50
IG1fbGV4aWNhbERlY2xhcmF0aW9uczsKLQotcHVibGljOgotICAgIHN0YXRpYyBTdHJ1Y3R1cmUq
IGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpT
VmFsdWUgcHJvdG8pCi0gICAgewotICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0s
IGdsb2JhbE9iamVjdCwgcHJvdG8sIFR5cGVJbmZvKFVubGlua2VkUHJvZ3JhbUNvZGVCbG9ja1R5
cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKLSAgICB9Ci0KLSAgICBERUNMQVJFX0lORk87
Ci19OwotCi1jbGFzcyBVbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2sgZmluYWwgOiBwdWJs
aWMgVW5saW5rZWRHbG9iYWxDb2RlQmxvY2sgewotcHJpdmF0ZToKLSAgICBmcmllbmQgY2xhc3Mg
Q29kZUNhY2hlOwotICAgIHN0YXRpYyBVbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2sqIGNy
ZWF0ZShWTSogdm0sIGNvbnN0IEV4ZWN1dGFibGVJbmZvJiBpbmZvLCBEZWJ1Z2dlck1vZGUgZGVi
dWdnZXJNb2RlKQotICAgIHsKLSAgICAgICAgVW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2Nr
KiBpbnN0YW5jZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFVubGlua2VkTW9kdWxlUHJv
Z3JhbUNvZGVCbG9jaz4odm0tPmhlYXApKSBVbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2so
dm0sIHZtLT51bmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2tTdHJ1Y3R1cmUuZ2V0KCksIGlu
Zm8sIGRlYnVnZ2VyTW9kZSk7Ci0gICAgICAgIGluc3RhbmNlLT5maW5pc2hDcmVhdGlvbigqdm0p
OwotICAgICAgICByZXR1cm4gaW5zdGFuY2U7Ci0gICAgfQotCi1wdWJsaWM6Ci0gICAgdHlwZWRl
ZiBVbmxpbmtlZEdsb2JhbENvZGVCbG9jayBCYXNlOwotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25l
ZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgU3RydWN0dXJlSXNJbW1v
cnRhbDsKLQotICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7Ci0KLSAgICBzdGF0aWMg
dm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7Ci0KLSAgICAvLyBUaGlz
IG9mZnNldCByZXByZXNlbnRzIHRoZSBjb25zdGFudCByZWdpc3RlciBvZmZzZXQgdG8gdGhlIHN0
b3JlZCBzeW1ib2wgdGFibGUgdGhhdCByZXByZXNlbnRzIHRoZSBsYXlvdXQgb2YgdGhlCi0gICAg
Ly8gbW9kdWxlIGVudmlyb25tZW50LiBUaGlzIHN5bWJvbCB0YWJsZSBpcyBjcmVhdGVkIGJ5IHRo
ZSBieXRlIGNvZGUgZ2VuZXJhdG9yIHNpbmNlIHRoZSBtb2R1bGUgZW52aXJvbm1lbnQgaW5jbHVk
ZXMKLSAgICAvLyB0aGUgdG9wLW1vc3QgbGV4aWNhbCBjYXB0dXJlZCB2YXJpYWJsZXMgaW5zaWRl
IHRoZSBtb2R1bGUgY29kZS4gVGhpcyBtZWFucyB0aGF0LCBvbmNlIHRoZSBtb2R1bGUgZW52aXJv
bm1lbnQgaXMKLSAgICAvLyBhbGxvY2F0ZWQgYW5kIGluc3RhbnRpYXRlZCBmcm9tIHRoaXMgc3lt
Ym9sIHRhYmxlLCBpdCBpcyB0aXRlbHkgY291cGxlZCB3aXRoIHRoZSBzcGVjaWZpYyB1bmxpbmtl
ZCBtb2R1bGUgcHJvZ3JhbQotICAgIC8vIGNvZGUgYmxvY2sgYW5kIHRoZSBzdG9yZWQgc3ltYm9s
IHRhYmxlLiBTbyBiZWZvcmUgZXhlY3V0aW5nIHRoZSBtb2R1bGUgY29kZSwgd2Ugc2hvdWxkIG5v
dCBjbGVhciB0aGUgdW5saW5rZWQgbW9kdWxlCi0gICAgLy8gcHJvZ3JhbSBjb2RlIGJsb2NrIGlu
IHRoZSBtb2R1bGUgZXhlY3V0YWJsZS4gVGhpcyByZXF1aXJlbWVudCBpcyBtZXQgYmVjYXVzZSB0
aGUgZ2FyYmFnZSBjb2xsZWN0b3Igb25seSBjbGVhcnMKLSAgICAvLyB1bmxpbmtlZCBjb2RlIGlu
ICgxKSB1bm1hcmtlZCBleGVjdXRhYmxlcyBhbmQgKDIpIGZ1bmN0aW9uIGV4ZWN1dGFibGVzLgot
ICAgIC8vCi0gICAgLy8gU2luY2UgdGhlIGZ1bmN0aW9uIGNvZGUgbWF5IGJlIGV4ZWN1dGVkIHJl
cGVhdGVkbHkgYW5kIHRoZSBlbnZpcm9ubWVudCBvZiBlYWNoIGZ1bmN0aW9uIGV4ZWN1dGlvbiBp
cyBkaWZmZXJlbnQsCi0gICAgLy8gdGhlIGZ1bmN0aW9uIGNvZGUgbmVlZCB0byBhbGxvY2F0ZSBh
bmQgaW5zdGFudGlhdGUgdGhlIGVudmlyb25tZW50IGluIHRoZSBwcm9sb2d1ZSBvZiB0aGUgZnVu
Y3Rpb24gY29kZS4gT24gdGhlCi0gICAgLy8gb3RoZXIgaGFuZCwgdGhlIG1vZHVsZSBjb2RlIGlz
IGV4ZWN1dGVkIG9ubHkgb25jZS4gU28gd2UgY2FuIGluc3RhbnRpYXRlIHRoZSBtb2R1bGUgZW52
aXJvbm1lbnQgb3V0c2lkZSB0aGUgbW9kdWxlCi0gICAgLy8gY29kZS4gQXQgdGhhdCB0aW1lLCB3
ZSBjb25zdHJ1Y3QgdGhlIG1vZHVsZSBlbnZpcm9ubWVudCBieSB1c2luZyB0aGUgc3ltYm9sIHRh
YmxlIHRoYXQgaXMgaGVsZCBieSB0aGUgbW9kdWxlIGV4ZWN1dGFibGUuCi0gICAgLy8gVGhlIHN5
bWJvbCB0YWJsZSBoZWxkIGJ5IHRoZSBleGVjdXRhYmxlIGlzIHRoZSBjbG9uZWQgb25lIGZyb20g
b25lIGluIHRoZSB1bmxpbmtlZCBjb2RlIGJsb2NrLiBJbnN0YW50aWF0aW5nIHRoZSBtb2R1bGUK
LSAgICAvLyBlbnZpcm9ubWVudCBiZWZvcmUgZXhlY3V0aW5nIGFuZCBsaW5raW5nIHRoZSBtb2R1
bGUgY29kZSBpcyByZXF1aXJlZCB0byBsaW5rIHRoZSBpbXBvcnRlZCBiaW5kaW5ncyBiZXR3ZWVu
IHRoZSBtb2R1bGVzLgotICAgIC8vCi0gICAgLy8gVGhlIHVubGlua2VkIG1vZHVsZSBwcm9ncmFt
IGNvZGUgYmxvY2sgb25seSBob2xkcyB0aGUgcHJlLWNsb25lZCBzeW1ib2wgdGFibGUgaW4gaXRz
IGNvbnN0YW50IHJlZ2lzdGVyIHBvb2wuIEl0IGRvZXMKLSAgICAvLyBub3QgaG9sZCB0aGUgaW5z
dGFudGlhdGVkIG1vZHVsZSBlbnZpcm9ubWVudC4gU28gd2hpbGUgdGhlIG1vZHVsZSBlbnZpcm9u
bWVudCByZXF1aXJlcyB0aGUgc3BlY2lmaWMgdW5saW5rZWQgbW9kdWxlCi0gICAgLy8gcHJvZ3Jh
bSBjb2RlIGJsb2NrLCB0aGUgdW5saW5rZWQgbW9kdWxlIGNvZGUgYmxvY2sgY2FuIGJlIHVzZWQg
Zm9yIHRoZSBtb2R1bGUgZW52aXJvbm1lbnQgaW5zdGFudGlhdGVkIGZyb20gdGhpcwotICAgIC8v
IHVubGlua2VkIGNvZGUgYmxvY2suIFRoZXJlIGlzIDE6TiByZWxhdGlvbiBiZXR3ZWVuIHRoZSB1
bmxpbmtlZCBtb2R1bGUgY29kZSBibG9jayBhbmQgdGhlIG1vZHVsZSBlbnZpcm9ubWVudHMuIFNv
IHRoZQotICAgIC8vIHVubGlua2VkIG1vZHVsZSBwcm9ncmFtIGNvZGUgYmxvY2sgY2FuIGJlIGNh
Y2hlZC4KLSAgICAvLwotICAgIC8vIE9uIHRoZSBvdGhlciBoYW5kLCB0aGUgbGlua2VkIGNvZGUg
YmxvY2sgZm9yIHRoZSBtb2R1bGUgZW52aXJvbm1lbnQgaW5jbHVkZXMgdGhlIHJlc29sdmVkIHJl
ZmVyZW5jZXMgdG8gdGhlIGltcG9ydGVkCi0gICAgLy8gYmluZGluZ3MuIFRoZSBpbXBvcnRlZCBi
aW5kaW5nIHJlZmVyZW5jZXMgdGhlIG90aGVyIG1vZHVsZSBlbnZpcm9ubWVudCwgc28gdGhlIGxp
bmtlZCBjb2RlIGJsb2NrIGlzIHRpdGx5IGNvdXBsZWQKLSAgICAvLyB3aXRoIHRoZSBzcGVjaWZp
YyBzZXQgb2YgdGhlIG1vZHVsZSBlbnZpcm9ubWVudHMuIFRodXMsIHRoZSBsaW5rZWQgY29kZSBi
bG9jayBzaG91bGQgbm90IGJlIGNhY2hlZC4KLSAgICBpbnQgbW9kdWxlRW52aXJvbm1lbnRTeW1i
b2xUYWJsZUNvbnN0YW50UmVnaXN0ZXJPZmZzZXQoKSB7IHJldHVybiBtX21vZHVsZUVudmlyb25t
ZW50U3ltYm9sVGFibGVDb25zdGFudFJlZ2lzdGVyT2Zmc2V0OyB9Ci0gICAgdm9pZCBzZXRNb2R1
bGVFbnZpcm9ubWVudFN5bWJvbFRhYmxlQ29uc3RhbnRSZWdpc3Rlck9mZnNldChpbnQgb2Zmc2V0
KQotICAgIHsKLSAgICAgICAgbV9tb2R1bGVFbnZpcm9ubWVudFN5bWJvbFRhYmxlQ29uc3RhbnRS
ZWdpc3Rlck9mZnNldCA9IG9mZnNldDsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgVW5saW5rZWRN
b2R1bGVQcm9ncmFtQ29kZUJsb2NrKFZNKiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0
IEV4ZWN1dGFibGVJbmZvJiBpbmZvLCBEZWJ1Z2dlck1vZGUgZGVidWdnZXJNb2RlKQotICAgICAg
ICA6IEJhc2Uodm0sIHN0cnVjdHVyZSwgTW9kdWxlQ29kZSwgaW5mbywgZGVidWdnZXJNb2RlKQot
ICAgIHsKLSAgICB9Ci0KLSAgICBpbnQgbV9tb2R1bGVFbnZpcm9ubWVudFN5bWJvbFRhYmxlQ29u
c3RhbnRSZWdpc3Rlck9mZnNldCB7IDAgfTsKLQotcHVibGljOgotICAgIHN0YXRpYyBTdHJ1Y3R1
cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTVmFsdWUgcHJvdG8pCi0gICAgewotICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUo
dm0sIGdsb2JhbE9iamVjdCwgcHJvdG8sIFR5cGVJbmZvKFVubGlua2VkTW9kdWxlUHJvZ3JhbUNv
ZGVCbG9ja1R5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKLSAgICB9Ci0KLSAgICBERUNM
QVJFX0lORk87Ci19OwotCi1jbGFzcyBVbmxpbmtlZEV2YWxDb2RlQmxvY2sgZmluYWwgOiBwdWJs
aWMgVW5saW5rZWRHbG9iYWxDb2RlQmxvY2sgewotcHJpdmF0ZToKLSAgICBmcmllbmQgY2xhc3Mg
Q29kZUNhY2hlOwotCi0gICAgc3RhdGljIFVubGlua2VkRXZhbENvZGVCbG9jayogY3JlYXRlKFZN
KiB2bSwgY29uc3QgRXhlY3V0YWJsZUluZm8mIGluZm8sIERlYnVnZ2VyTW9kZSBkZWJ1Z2dlck1v
ZGUpCi0gICAgewotICAgICAgICBVbmxpbmtlZEV2YWxDb2RlQmxvY2sqIGluc3RhbmNlID0gbmV3
IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8VW5saW5rZWRFdmFsQ29kZUJsb2NrPih2bS0+aGVhcCkp
IFVubGlua2VkRXZhbENvZGVCbG9jayh2bSwgdm0tPnVubGlua2VkRXZhbENvZGVCbG9ja1N0cnVj
dHVyZS5nZXQoKSwgaW5mbywgZGVidWdnZXJNb2RlKTsKLSAgICAgICAgaW5zdGFuY2UtPmZpbmlz
aENyZWF0aW9uKCp2bSk7Ci0gICAgICAgIHJldHVybiBpbnN0YW5jZTsKLSAgICB9Ci0KLXB1Ymxp
YzoKLSAgICB0eXBlZGVmIFVubGlua2VkR2xvYmFsQ29kZUJsb2NrIEJhc2U7Ci0gICAgc3RhdGlj
IGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBT
dHJ1Y3R1cmVJc0ltbW9ydGFsOwotCi0gICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsK
LQotICAgIGNvbnN0IElkZW50aWZpZXImIHZhcmlhYmxlKHVuc2lnbmVkIGluZGV4KSB7IHJldHVy
biBtX3ZhcmlhYmxlc1tpbmRleF07IH0KLSAgICB1bnNpZ25lZCBudW1WYXJpYWJsZXMoKSB7IHJl
dHVybiBtX3ZhcmlhYmxlcy5zaXplKCk7IH0KLSAgICB2b2lkIGFkb3B0VmFyaWFibGVzKFZlY3Rv
cjxJZGVudGlmaWVyLCAwLCBVbnNhZmVWZWN0b3JPdmVyZmxvdz4mIHZhcmlhYmxlcykKLSAgICB7
Ci0gICAgICAgIEFTU0VSVChtX3ZhcmlhYmxlcy5pc0VtcHR5KCkpOwotICAgICAgICBtX3Zhcmlh
Ymxlcy5zd2FwKHZhcmlhYmxlcyk7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIFVubGlua2VkRXZh
bENvZGVCbG9jayhWTSogdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBFeGVjdXRhYmxl
SW5mbyYgaW5mbywgRGVidWdnZXJNb2RlIGRlYnVnZ2VyTW9kZSkKLSAgICAgICAgOiBCYXNlKHZt
LCBzdHJ1Y3R1cmUsIEV2YWxDb2RlLCBpbmZvLCBkZWJ1Z2dlck1vZGUpCi0gICAgewotICAgIH0K
LQotICAgIFZlY3RvcjxJZGVudGlmaWVyLCAwLCBVbnNhZmVWZWN0b3JPdmVyZmxvdz4gbV92YXJp
YWJsZXM7Ci0KLXB1YmxpYzoKLSAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUo
Vk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHBy
b3RvLCBUeXBlSW5mbyhVbmxpbmtlZEV2YWxDb2RlQmxvY2tUeXBlLCBTdHJ1Y3R1cmVGbGFncyks
IGluZm8oKSk7Ci0gICAgfQotCi0gICAgREVDTEFSRV9JTkZPOwotfTsKLQotY2xhc3MgVW5saW5r
ZWRGdW5jdGlvbkNvZGVCbG9jayBmaW5hbCA6IHB1YmxpYyBVbmxpbmtlZENvZGVCbG9jayB7Ci1w
dWJsaWM6Ci0gICAgdHlwZWRlZiBVbmxpbmtlZENvZGVCbG9jayBCYXNlOwotICAgIHN0YXRpYyBj
b25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgU3Ry
dWN0dXJlSXNJbW1vcnRhbDsKLQotICAgIHN0YXRpYyBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2Nr
KiBjcmVhdGUoVk0qIHZtLCBDb2RlVHlwZSBjb2RlVHlwZSwgY29uc3QgRXhlY3V0YWJsZUluZm8m
IGluZm8sIERlYnVnZ2VyTW9kZSBkZWJ1Z2dlck1vZGUpCi0gICAgewotICAgICAgICBVbmxpbmtl
ZEZ1bmN0aW9uQ29kZUJsb2NrKiBpbnN0YW5jZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxs
PFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2s+KHZtLT5oZWFwKSkgVW5saW5rZWRGdW5jdGlvbkNv
ZGVCbG9jayh2bSwgdm0tPnVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2tTdHJ1Y3R1cmUuZ2V0KCks
IGNvZGVUeXBlLCBpbmZvLCBkZWJ1Z2dlck1vZGUpOwotICAgICAgICBpbnN0YW5jZS0+ZmluaXNo
Q3JlYXRpb24oKnZtKTsKLSAgICAgICAgcmV0dXJuIGluc3RhbmNlOwotICAgIH0KLQotICAgIHN0
YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7Ci0KLXByaXZhdGU6Ci0gICAgVW5saW5rZWRGdW5j
dGlvbkNvZGVCbG9jayhWTSogdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBDb2RlVHlwZSBjb2Rl
VHlwZSwgY29uc3QgRXhlY3V0YWJsZUluZm8mIGluZm8sIERlYnVnZ2VyTW9kZSBkZWJ1Z2dlck1v
ZGUpCi0gICAgICAgIDogQmFzZSh2bSwgc3RydWN0dXJlLCBjb2RlVHlwZSwgaW5mbywgZGVidWdn
ZXJNb2RlKQotICAgIHsKLSAgICB9Ci0gICAgCi1wdWJsaWM6Ci0gICAgc3RhdGljIFN0cnVjdHVy
ZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
SlNWYWx1ZSBwcm90bykKLSAgICB7Ci0gICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2
bSwgZ2xvYmFsT2JqZWN0LCBwcm90bywgVHlwZUluZm8oVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9j
a1R5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKLSAgICB9Ci0KLSAgICBERUNMQVJFX0lO
Rk87Ci19OwotCiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5r
ZWRFdmFsQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvVW5saW5rZWRFdmFsQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMjA4MzA4KQkoZnJv
bSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwOjIw
ODMwOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEV2YWxDb2Rl
QmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDMwIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEyLTIwMTMsIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKworI2luY2x1ZGUgIlVubGlua2VkQ29kZUJsb2NrLmgiCisKKyNpbmNsdWRl
ICJCeXRlY29kZUdlbmVyYXRvci5oIgorI2luY2x1ZGUgIkJ5dGVjb2RlUmV3cml0ZXIuaCIKKyNp
bmNsdWRlICJDbGFzc0luZm8uaCIKKyNpbmNsdWRlICJDb2RlQ2FjaGUuaCIKKyNpbmNsdWRlICJF
eGVjdXRhYmxlSW5mby5oIgorI2luY2x1ZGUgIkZ1bmN0aW9uT3ZlcnJpZGVzLmgiCisjaW5jbHVk
ZSAiSlNTdHJpbmcuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiUGFyc2Vy
LmgiCisjaW5jbHVkZSAiUHJlY2lzZUp1bXBUYXJnZXRzSW5saW5lcy5oIgorI2luY2x1ZGUgIlNv
dXJjZVByb3ZpZGVyLmgiCisjaW5jbHVkZSAiU3RydWN0dXJlLmgiCisjaW5jbHVkZSAiU3ltYm9s
VGFibGUuaCIKKyNpbmNsdWRlICJVbmxpbmtlZEluc3RydWN0aW9uU3RyZWFtLmgiCisjaW5jbHVk
ZSA8d3RmL0RhdGFMb2cuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NvbnN0IENsYXNzSW5mbyBV
bmxpbmtlZENvZGVCbG9jazo6c19pbmZvID0geyAiVW5saW5rZWRDb2RlQmxvY2siLCAwLCAwLCBD
UkVBVEVfTUVUSE9EX1RBQkxFKFVubGlua2VkQ29kZUJsb2NrKSB9OworY29uc3QgQ2xhc3NJbmZv
IFVubGlua2VkR2xvYmFsQ29kZUJsb2NrOjpzX2luZm8gPSB7ICJVbmxpbmtlZEdsb2JhbENvZGVC
bG9jayIsICZCYXNlOjpzX2luZm8sIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoVW5saW5rZWRHbG9i
YWxDb2RlQmxvY2spIH07Citjb25zdCBDbGFzc0luZm8gVW5saW5rZWRQcm9ncmFtQ29kZUJsb2Nr
OjpzX2luZm8gPSB7ICJVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2siLCAmQmFzZTo6c19pbmZvLCAw
LCBDUkVBVEVfTUVUSE9EX1RBQkxFKFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jaykgfTsKK2NvbnN0
IENsYXNzSW5mbyBVbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2s6OnNfaW5mbyA9IHsgIlVu
bGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIENS
RUFURV9NRVRIT0RfVEFCTEUoVW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrKSB9OworY29u
c3QgQ2xhc3NJbmZvIFVubGlua2VkRXZhbENvZGVCbG9jazo6c19pbmZvID0geyAiVW5saW5rZWRF
dmFsQ29kZUJsb2NrIiwgJkJhc2U6OnNfaW5mbywgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShVbmxp
bmtlZEV2YWxDb2RlQmxvY2spIH07Citjb25zdCBDbGFzc0luZm8gVW5saW5rZWRGdW5jdGlvbkNv
ZGVCbG9jazo6c19pbmZvID0geyAiVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayIsICZCYXNlOjpz
X2luZm8sIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jaykg
fTsKKworVW5saW5rZWRDb2RlQmxvY2s6OlVubGlua2VkQ29kZUJsb2NrKFZNKiB2bSwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIENvZGVUeXBlIGNvZGVUeXBlLCBjb25zdCBFeGVjdXRhYmxlSW5mbyYg
aW5mbywgRGVidWdnZXJNb2RlIGRlYnVnZ2VyTW9kZSkKKyAgICA6IEJhc2UoKnZtLCBzdHJ1Y3R1
cmUpCisgICAgLCBtX251bVZhcnMoMCkKKyAgICAsIG1fbnVtQ2FsbGVlTG9jYWxzKDApCisgICAg
LCBtX251bVBhcmFtZXRlcnMoMCkKKyAgICAsIG1fZ2xvYmFsT2JqZWN0UmVnaXN0ZXIoVmlydHVh
bFJlZ2lzdGVyKCkpCisgICAgLCBtX3VzZXNFdmFsKGluZm8udXNlc0V2YWwoKSkKKyAgICAsIG1f
aXNTdHJpY3RNb2RlKGluZm8uaXNTdHJpY3RNb2RlKCkpCisgICAgLCBtX2lzQ29uc3RydWN0b3Io
aW5mby5pc0NvbnN0cnVjdG9yKCkpCisgICAgLCBtX2hhc0NhcHR1cmVkVmFyaWFibGVzKGZhbHNl
KQorICAgICwgbV9pc0J1aWx0aW5GdW5jdGlvbihpbmZvLmlzQnVpbHRpbkZ1bmN0aW9uKCkpCisg
ICAgLCBtX3N1cGVyQmluZGluZyhzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaW5mby5zdXBlckJpbmRp
bmcoKSkpCisgICAgLCBtX3NjcmlwdE1vZGUoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGluZm8uc2Ny
aXB0TW9kZSgpKSkKKyAgICAsIG1faXNBcnJvd0Z1bmN0aW9uQ29udGV4dChpbmZvLmlzQXJyb3dG
dW5jdGlvbkNvbnRleHQoKSkKKyAgICAsIG1faXNDbGFzc0NvbnRleHQoaW5mby5pc0NsYXNzQ29u
dGV4dCgpKQorICAgICwgbV93YXNDb21waWxlZFdpdGhEZWJ1Z2dpbmdPcGNvZGVzKGRlYnVnZ2Vy
TW9kZSA9PSBEZWJ1Z2dlck1vZGU6OkRlYnVnZ2VyT24gfHwgT3B0aW9uczo6Zm9yY2VEZWJ1Z2dl
ckJ5dGVjb2RlR2VuZXJhdGlvbigpKQorICAgICwgbV9jb25zdHJ1Y3RvcktpbmQoc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KGluZm8uY29uc3RydWN0b3JLaW5kKCkpKQorICAgICwgbV9kZXJpdmVkQ29u
dGV4dFR5cGUoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGluZm8uZGVyaXZlZENvbnRleHRUeXBlKCkp
KQorICAgICwgbV9ldmFsQ29udGV4dFR5cGUoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGluZm8uZXZh
bENvbnRleHRUeXBlKCkpKQorICAgICwgbV9maXJzdExpbmUoMCkKKyAgICAsIG1fbGluZUNvdW50
KDApCisgICAgLCBtX2VuZENvbHVtbihVSU5UX01BWCkKKyAgICAsIG1fZGlkT3B0aW1pemUoTWl4
ZWRUcmlTdGF0ZSkKKyAgICAsIG1fcGFyc2VNb2RlKGluZm8ucGFyc2VNb2RlKCkpCisgICAgLCBt
X2ZlYXR1cmVzKDApCisgICAgLCBtX2NvZGVUeXBlKGNvZGVUeXBlKQorICAgICwgbV9hcnJheVBy
b2ZpbGVDb3VudCgwKQorICAgICwgbV9hcnJheUFsbG9jYXRpb25Qcm9maWxlQ291bnQoMCkKKyAg
ICAsIG1fb2JqZWN0QWxsb2NhdGlvblByb2ZpbGVDb3VudCgwKQorICAgICwgbV92YWx1ZVByb2Zp
bGVDb3VudCgwKQorICAgICwgbV9sbGludENhbGxMaW5rSW5mb0NvdW50KDApCit7CisgICAgZm9y
IChhdXRvJiBjb25zdGFudFJlZ2lzdGVySW5kZXggOiBtX2xpbmtUaW1lQ29uc3RhbnRzKQorICAg
ICAgICBjb25zdGFudFJlZ2lzdGVySW5kZXggPSAwOworICAgIEFTU0VSVChtX2NvbnN0cnVjdG9y
S2luZCA9PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaW5mby5jb25zdHJ1Y3RvcktpbmQoKSkpOwor
fQorCit2b2lkIFVubGlua2VkQ29kZUJsb2NrOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwg
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgVW5saW5rZWRDb2RlQmxvY2sqIHRoaXNPYmpl
Y3QgPSBqc0Nhc3Q8VW5saW5rZWRDb2RlQmxvY2sqPihjZWxsKTsKKyAgICBBU1NFUlRfR0NfT0JK
RUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CisgICAgQmFzZTo6dmlzaXRDaGlsZHJl
bih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKKyAgICBmb3IgKEZ1bmN0aW9uRXhwcmVzc2lvblZlY3Rv
cjo6aXRlcmF0b3IgcHRyID0gdGhpc09iamVjdC0+bV9mdW5jdGlvbkRlY2xzLmJlZ2luKCksIGVu
ZCA9IHRoaXNPYmplY3QtPm1fZnVuY3Rpb25EZWNscy5lbmQoKTsgcHRyICE9IGVuZDsgKytwdHIp
CisgICAgICAgIHZpc2l0b3IuYXBwZW5kKHB0cik7CisgICAgZm9yIChGdW5jdGlvbkV4cHJlc3Np
b25WZWN0b3I6Oml0ZXJhdG9yIHB0ciA9IHRoaXNPYmplY3QtPm1fZnVuY3Rpb25FeHBycy5iZWdp
bigpLCBlbmQgPSB0aGlzT2JqZWN0LT5tX2Z1bmN0aW9uRXhwcnMuZW5kKCk7IHB0ciAhPSBlbmQ7
ICsrcHRyKQorICAgICAgICB2aXNpdG9yLmFwcGVuZChwdHIpOworICAgIHZpc2l0b3IuYXBwZW5k
VmFsdWVzKHRoaXNPYmplY3QtPm1fY29uc3RhbnRSZWdpc3RlcnMuZGF0YSgpLCB0aGlzT2JqZWN0
LT5tX2NvbnN0YW50UmVnaXN0ZXJzLnNpemUoKSk7CisgICAgaWYgKHRoaXNPYmplY3QtPm1fdW5s
aW5rZWRJbnN0cnVjdGlvbnMpCisgICAgICAgIHZpc2l0b3IucmVwb3J0RXh0cmFNZW1vcnlWaXNp
dGVkKHRoaXNPYmplY3QtPm1fdW5saW5rZWRJbnN0cnVjdGlvbnMtPnNpemVJbkJ5dGVzKCkpOwor
ICAgIGlmICh0aGlzT2JqZWN0LT5tX3JhcmVEYXRhKSB7CisgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwLCBlbmQgPSB0aGlzT2JqZWN0LT5tX3JhcmVEYXRhLT5tX3JlZ2V4cHMuc2l6ZSgpOyBpICE9
IGVuZDsgaSsrKQorICAgICAgICAgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fcmFy
ZURhdGEtPm1fcmVnZXhwc1tpXSk7CisgICAgfQorfQorCitzaXplX3QgVW5saW5rZWRDb2RlQmxv
Y2s6OmVzdGltYXRlZFNpemUoSlNDZWxsKiBjZWxsKQoreworICAgIFVubGlua2VkQ29kZUJsb2Nr
KiB0aGlzT2JqZWN0ID0ganNDYXN0PFVubGlua2VkQ29kZUJsb2NrKj4oY2VsbCk7CisgICAgc2l6
ZV90IGV4dHJhU2l6ZSA9IHRoaXNPYmplY3QtPm1fdW5saW5rZWRJbnN0cnVjdGlvbnMgPyB0aGlz
T2JqZWN0LT5tX3VubGlua2VkSW5zdHJ1Y3Rpb25zLT5zaXplSW5CeXRlcygpIDogMDsKKyAgICBy
ZXR1cm4gQmFzZTo6ZXN0aW1hdGVkU2l6ZShjZWxsKSArIGV4dHJhU2l6ZTsKK30KKworaW50IFVu
bGlua2VkQ29kZUJsb2NrOjpsaW5lTnVtYmVyRm9yQnl0ZWNvZGVPZmZzZXQodW5zaWduZWQgYnl0
ZWNvZGVPZmZzZXQpCit7CisgICAgQVNTRVJUKGJ5dGVjb2RlT2Zmc2V0IDwgaW5zdHJ1Y3Rpb25z
KCkuY291bnQoKSk7CisgICAgaW50IGRpdm90OworICAgIGludCBzdGFydE9mZnNldDsKKyAgICBp
bnQgZW5kT2Zmc2V0OworICAgIHVuc2lnbmVkIGxpbmU7CisgICAgdW5zaWduZWQgY29sdW1uOwor
ICAgIGV4cHJlc3Npb25SYW5nZUZvckJ5dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0LCBkaXZv
dCwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCwgbGluZSwgY29sdW1uKTsKKyAgICByZXR1cm4gbGlu
ZTsKK30KKworaW5saW5lIHZvaWQgVW5saW5rZWRDb2RlQmxvY2s6OmdldExpbmVBbmRDb2x1bW4o
Y29uc3QgRXhwcmVzc2lvblJhbmdlSW5mbyYgaW5mbywKKyAgICB1bnNpZ25lZCYgbGluZSwgdW5z
aWduZWQmIGNvbHVtbikgY29uc3QKK3sKKyAgICBzd2l0Y2ggKGluZm8ubW9kZSkgeworICAgIGNh
c2UgRXhwcmVzc2lvblJhbmdlSW5mbzo6RmF0TGluZU1vZGU6CisgICAgICAgIGluZm8uZGVjb2Rl
RmF0TGluZU1vZGUobGluZSwgY29sdW1uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBFeHBy
ZXNzaW9uUmFuZ2VJbmZvOjpGYXRDb2x1bW5Nb2RlOgorICAgICAgICBpbmZvLmRlY29kZUZhdENv
bHVtbk1vZGUobGluZSwgY29sdW1uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBFeHByZXNz
aW9uUmFuZ2VJbmZvOjpGYXRMaW5lQW5kQ29sdW1uTW9kZTogeworICAgICAgICB1bnNpZ25lZCBm
YXRJbmRleCA9IGluZm8ucG9zaXRpb247CisgICAgICAgIEV4cHJlc3Npb25SYW5nZUluZm86OkZh
dFBvc2l0aW9uJiBmYXRQb3MgPSBtX3JhcmVEYXRhLT5tX2V4cHJlc3Npb25JbmZvRmF0UG9zaXRp
b25zW2ZhdEluZGV4XTsKKyAgICAgICAgbGluZSA9IGZhdFBvcy5saW5lOworICAgICAgICBjb2x1
bW4gPSBmYXRQb3MuY29sdW1uOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgfSAvLyBzd2l0
Y2gKK30KKworI2lmbmRlZiBOREVCVUcKK3N0YXRpYyB2b2lkIGR1bXBMaW5lQ29sdW1uRW50cnko
c2l6ZV90IGluZGV4LCBjb25zdCBVbmxpbmtlZEluc3RydWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlv
blN0cmVhbSwgdW5zaWduZWQgaW5zdHJ1Y3Rpb25PZmZzZXQsIHVuc2lnbmVkIGxpbmUsIHVuc2ln
bmVkIGNvbHVtbikKK3sKKyAgICBjb25zdCBhdXRvJiBpbnN0cnVjdGlvbnMgPSBpbnN0cnVjdGlv
blN0cmVhbS51bnBhY2tGb3JEZWJ1Z2dpbmcoKTsKKyAgICBPcGNvZGVJRCBvcGNvZGUgPSBpbnN0
cnVjdGlvbnNbaW5zdHJ1Y3Rpb25PZmZzZXRdLnUub3Bjb2RlOworICAgIGNvbnN0IGNoYXIqIGV2
ZW50ID0gIiI7CisgICAgaWYgKG9wY29kZSA9PSBvcF9kZWJ1ZykgeworICAgICAgICBzd2l0Y2gg
KGluc3RydWN0aW9uc1tpbnN0cnVjdGlvbk9mZnNldCArIDFdLnUub3BlcmFuZCkgeworICAgICAg
ICBjYXNlIFdpbGxFeGVjdXRlUHJvZ3JhbTogZXZlbnQgPSAiIFdpbGxFeGVjdXRlUHJvZ3JhbSI7
IGJyZWFrOworICAgICAgICBjYXNlIERpZEV4ZWN1dGVQcm9ncmFtOiBldmVudCA9ICIgRGlkRXhl
Y3V0ZVByb2dyYW0iOyBicmVhazsKKyAgICAgICAgY2FzZSBEaWRFbnRlckNhbGxGcmFtZTogZXZl
bnQgPSAiIERpZEVudGVyQ2FsbEZyYW1lIjsgYnJlYWs7CisgICAgICAgIGNhc2UgRGlkUmVhY2hC
cmVha3BvaW50OiBldmVudCA9ICIgRGlkUmVhY2hCcmVha3BvaW50IjsgYnJlYWs7CisgICAgICAg
IGNhc2UgV2lsbExlYXZlQ2FsbEZyYW1lOiBldmVudCA9ICIgV2lsbExlYXZlQ2FsbEZyYW1lIjsg
YnJlYWs7CisgICAgICAgIGNhc2UgV2lsbEV4ZWN1dGVTdGF0ZW1lbnQ6IGV2ZW50ID0gIiBXaWxs
RXhlY3V0ZVN0YXRlbWVudCI7IGJyZWFrOworICAgICAgICBjYXNlIFdpbGxFeGVjdXRlRXhwcmVz
c2lvbjogZXZlbnQgPSAiIFdpbGxFeGVjdXRlRXhwcmVzc2lvbiI7IGJyZWFrOworICAgICAgICB9
CisgICAgfQorICAgIGRhdGFMb2dGKCIgIFslenVdIHBjICV1IEAgbGluZSAldSBjb2wgJXUgOiAl
cyVzXG4iLCBpbmRleCwgaW5zdHJ1Y3Rpb25PZmZzZXQsIGxpbmUsIGNvbHVtbiwgb3Bjb2RlTmFt
ZXNbb3Bjb2RlXSwgZXZlbnQpOworfQorCit2b2lkIFVubGlua2VkQ29kZUJsb2NrOjpkdW1wRXhw
cmVzc2lvblJhbmdlSW5mbygpCit7CisgICAgVmVjdG9yPEV4cHJlc3Npb25SYW5nZUluZm8+JiBl
eHByZXNzaW9uSW5mbyA9IG1fZXhwcmVzc2lvbkluZm87CisKKyAgICBzaXplX3Qgc2l6ZSA9IG1f
ZXhwcmVzc2lvbkluZm8uc2l6ZSgpOworICAgIGRhdGFMb2dGKCJVbmxpbmtlZENvZGVCbG9jayAl
cCBleHByZXNzaW9uUmFuZ2VJbmZvWyV6dV0ge1xuIiwgdGhpcywgc2l6ZSk7CisgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKKyAgICAgICAgRXhwcmVzc2lvblJhbmdlSW5m
byYgaW5mbyA9IGV4cHJlc3Npb25JbmZvW2ldOworICAgICAgICB1bnNpZ25lZCBsaW5lOworICAg
ICAgICB1bnNpZ25lZCBjb2x1bW47CisgICAgICAgIGdldExpbmVBbmRDb2x1bW4oaW5mbywgbGlu
ZSwgY29sdW1uKTsKKyAgICAgICAgZHVtcExpbmVDb2x1bW5FbnRyeShpLCBpbnN0cnVjdGlvbnMo
KSwgaW5mby5pbnN0cnVjdGlvbk9mZnNldCwgbGluZSwgY29sdW1uKTsKKyAgICB9CisgICAgZGF0
YUxvZygifVxuIik7Cit9CisjZW5kaWYKKwordm9pZCBVbmxpbmtlZENvZGVCbG9jazo6ZXhwcmVz
c2lvblJhbmdlRm9yQnl0ZWNvZGVPZmZzZXQodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQsCisgICAg
aW50JiBkaXZvdCwgaW50JiBzdGFydE9mZnNldCwgaW50JiBlbmRPZmZzZXQsIHVuc2lnbmVkJiBs
aW5lLCB1bnNpZ25lZCYgY29sdW1uKSBjb25zdAoreworICAgIEFTU0VSVChieXRlY29kZU9mZnNl
dCA8IGluc3RydWN0aW9ucygpLmNvdW50KCkpOworCisgICAgaWYgKCFtX2V4cHJlc3Npb25JbmZv
LnNpemUoKSkgeworICAgICAgICBzdGFydE9mZnNldCA9IDA7CisgICAgICAgIGVuZE9mZnNldCA9
IDA7CisgICAgICAgIGRpdm90ID0gMDsKKyAgICAgICAgbGluZSA9IDA7CisgICAgICAgIGNvbHVt
biA9IDA7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjb25zdCBWZWN0b3I8RXhwcmVz
c2lvblJhbmdlSW5mbz4mIGV4cHJlc3Npb25JbmZvID0gbV9leHByZXNzaW9uSW5mbzsKKworICAg
IGludCBsb3cgPSAwOworICAgIGludCBoaWdoID0gZXhwcmVzc2lvbkluZm8uc2l6ZSgpOworICAg
IHdoaWxlIChsb3cgPCBoaWdoKSB7CisgICAgICAgIGludCBtaWQgPSBsb3cgKyAoaGlnaCAtIGxv
dykgLyAyOworICAgICAgICBpZiAoZXhwcmVzc2lvbkluZm9bbWlkXS5pbnN0cnVjdGlvbk9mZnNl
dCA8PSBieXRlY29kZU9mZnNldCkKKyAgICAgICAgICAgIGxvdyA9IG1pZCArIDE7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIGhpZ2ggPSBtaWQ7CisgICAgfQorCisgICAgaWYgKCFsb3cpCisg
ICAgICAgIGxvdyA9IDE7CisKKyAgICBjb25zdCBFeHByZXNzaW9uUmFuZ2VJbmZvJiBpbmZvID0g
ZXhwcmVzc2lvbkluZm9bbG93IC0gMV07CisgICAgc3RhcnRPZmZzZXQgPSBpbmZvLnN0YXJ0T2Zm
c2V0OworICAgIGVuZE9mZnNldCA9IGluZm8uZW5kT2Zmc2V0OworICAgIGRpdm90ID0gaW5mby5k
aXZvdFBvaW50OworICAgIGdldExpbmVBbmRDb2x1bW4oaW5mbywgbGluZSwgY29sdW1uKTsKK30K
Kwordm9pZCBVbmxpbmtlZENvZGVCbG9jazo6YWRkRXhwcmVzc2lvbkluZm8odW5zaWduZWQgaW5z
dHJ1Y3Rpb25PZmZzZXQsCisgICAgaW50IGRpdm90LCBpbnQgc3RhcnRPZmZzZXQsIGludCBlbmRP
ZmZzZXQsIHVuc2lnbmVkIGxpbmUsIHVuc2lnbmVkIGNvbHVtbikKK3sKKyAgICBpZiAoZGl2b3Qg
PiBFeHByZXNzaW9uUmFuZ2VJbmZvOjpNYXhEaXZvdCkgeworICAgICAgICAvLyBPdmVyZmxvdyBo
YXMgb2NjdXJyZWQsIHdlIGNhbiBvbmx5IGdpdmUgbGluZSBudW1iZXIgaW5mbyBmb3IgZXJyb3Jz
IGZvciB0aGlzIHJlZ2lvbgorICAgICAgICBkaXZvdCA9IDA7CisgICAgICAgIHN0YXJ0T2Zmc2V0
ID0gMDsKKyAgICAgICAgZW5kT2Zmc2V0ID0gMDsKKyAgICB9IGVsc2UgaWYgKHN0YXJ0T2Zmc2V0
ID4gRXhwcmVzc2lvblJhbmdlSW5mbzo6TWF4T2Zmc2V0KSB7CisgICAgICAgIC8vIElmIHRoZSBz
dGFydCBvZmZzZXQgaXMgb3V0IG9mIGJvdW5kcyB3ZSBjbGVhciBib3RoIG9mZnNldHMKKyAgICAg
ICAgLy8gc28gd2Ugb25seSBnZXQgdGhlIGRpdm90IG1hcmtlci4gRXJyb3IgbWVzc2FnZSB3aWxs
IGhhdmUgdG8gYmUgcmVkdWNlZAorICAgICAgICAvLyB0byBsaW5lIGFuZCBjaGFyUG9zaXRpb24g
bnVtYmVyLgorICAgICAgICBzdGFydE9mZnNldCA9IDA7CisgICAgICAgIGVuZE9mZnNldCA9IDA7
CisgICAgfSBlbHNlIGlmIChlbmRPZmZzZXQgPiBFeHByZXNzaW9uUmFuZ2VJbmZvOjpNYXhPZmZz
ZXQpIHsKKyAgICAgICAgLy8gVGhlIGVuZCBvZmZzZXQgaXMgb25seSB1c2VkIGZvciBhZGRpdGlv
bmFsIGNvbnRleHQsIGFuZCBpcyBtdWNoIG1vcmUgbGlrZWx5CisgICAgICAgIC8vIHRvIG92ZXJm
bG93IChlZy4gZnVuY3Rpb24gY2FsbCBhcmd1bWVudHMpIHNvIHdlIGFyZSB3aWxsaW5nIHRvIGRy
b3AgaXQgd2l0aG91dAorICAgICAgICAvLyBkcm9wcGluZyB0aGUgcmVzdCBvZiB0aGUgcmFuZ2Uu
CisgICAgICAgIGVuZE9mZnNldCA9IDA7CisgICAgfQorCisgICAgdW5zaWduZWQgcG9zaXRpb25N
b2RlID0KKyAgICAgICAgKGxpbmUgPD0gRXhwcmVzc2lvblJhbmdlSW5mbzo6TWF4RmF0TGluZU1v
ZGVMaW5lICYmIGNvbHVtbiA8PSBFeHByZXNzaW9uUmFuZ2VJbmZvOjpNYXhGYXRMaW5lTW9kZUNv
bHVtbikgCisgICAgICAgID8gRXhwcmVzc2lvblJhbmdlSW5mbzo6RmF0TGluZU1vZGUKKyAgICAg
ICAgOiAobGluZSA8PSBFeHByZXNzaW9uUmFuZ2VJbmZvOjpNYXhGYXRDb2x1bW5Nb2RlTGluZSAm
JiBjb2x1bW4gPD0gRXhwcmVzc2lvblJhbmdlSW5mbzo6TWF4RmF0Q29sdW1uTW9kZUNvbHVtbikK
KyAgICAgICAgPyBFeHByZXNzaW9uUmFuZ2VJbmZvOjpGYXRDb2x1bW5Nb2RlCisgICAgICAgIDog
RXhwcmVzc2lvblJhbmdlSW5mbzo6RmF0TGluZUFuZENvbHVtbk1vZGU7CisKKyAgICBFeHByZXNz
aW9uUmFuZ2VJbmZvIGluZm87CisgICAgaW5mby5pbnN0cnVjdGlvbk9mZnNldCA9IGluc3RydWN0
aW9uT2Zmc2V0OworICAgIGluZm8uZGl2b3RQb2ludCA9IGRpdm90OworICAgIGluZm8uc3RhcnRP
ZmZzZXQgPSBzdGFydE9mZnNldDsKKyAgICBpbmZvLmVuZE9mZnNldCA9IGVuZE9mZnNldDsKKwor
ICAgIGluZm8ubW9kZSA9IHBvc2l0aW9uTW9kZTsKKyAgICBzd2l0Y2ggKHBvc2l0aW9uTW9kZSkg
eworICAgIGNhc2UgRXhwcmVzc2lvblJhbmdlSW5mbzo6RmF0TGluZU1vZGU6CisgICAgICAgIGlu
Zm8uZW5jb2RlRmF0TGluZU1vZGUobGluZSwgY29sdW1uKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBFeHByZXNzaW9uUmFuZ2VJbmZvOjpGYXRDb2x1bW5Nb2RlOgorICAgICAgICBpbmZvLmVu
Y29kZUZhdENvbHVtbk1vZGUobGluZSwgY29sdW1uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBFeHByZXNzaW9uUmFuZ2VJbmZvOjpGYXRMaW5lQW5kQ29sdW1uTW9kZTogeworICAgICAgICBj
cmVhdGVSYXJlRGF0YUlmTmVjZXNzYXJ5KCk7CisgICAgICAgIHVuc2lnbmVkIGZhdEluZGV4ID0g
bV9yYXJlRGF0YS0+bV9leHByZXNzaW9uSW5mb0ZhdFBvc2l0aW9ucy5zaXplKCk7CisgICAgICAg
IEV4cHJlc3Npb25SYW5nZUluZm86OkZhdFBvc2l0aW9uIGZhdFBvcyA9IHsgbGluZSwgY29sdW1u
IH07CisgICAgICAgIG1fcmFyZURhdGEtPm1fZXhwcmVzc2lvbkluZm9GYXRQb3NpdGlvbnMuYXBw
ZW5kKGZhdFBvcyk7CisgICAgICAgIGluZm8ucG9zaXRpb24gPSBmYXRJbmRleDsKKyAgICB9Cisg
ICAgfSAvLyBzd2l0Y2gKKworICAgIG1fZXhwcmVzc2lvbkluZm8uYXBwZW5kKGluZm8pOworfQor
Citib29sIFVubGlua2VkQ29kZUJsb2NrOjp0eXBlUHJvZmlsZXJFeHByZXNzaW9uSW5mb0ZvckJ5
dGVjb2RlT2Zmc2V0KHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0LCB1bnNpZ25lZCYgc3RhcnREaXZv
dCwgdW5zaWduZWQmIGVuZERpdm90KQoreworICAgIHN0YXRpYyBjb25zdCBib29sIHZlcmJvc2Ug
PSBmYWxzZTsKKyAgICBpZiAoIW1fcmFyZURhdGEpIHsKKyAgICAgICAgaWYgKHZlcmJvc2UpCisg
ICAgICAgICAgICBkYXRhTG9nRigiRG9uJ3QgaGF2ZSBhc3NpZ25tZW50IGluZm8gZm9yIG9mZnNl
dDoldVxuIiwgYnl0ZWNvZGVPZmZzZXQpOworICAgICAgICBzdGFydERpdm90ID0gVUlOVF9NQVg7
CisgICAgICAgIGVuZERpdm90ID0gVUlOVF9NQVg7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisKKyAgICBhdXRvIGl0ZXIgPSBtX3JhcmVEYXRhLT5tX3R5cGVQcm9maWxlckluZm9NYXAu
ZmluZChieXRlY29kZU9mZnNldCk7CisgICAgaWYgKGl0ZXIgPT0gbV9yYXJlRGF0YS0+bV90eXBl
UHJvZmlsZXJJbmZvTWFwLmVuZCgpKSB7CisgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAg
ICAgZGF0YUxvZ0YoIkRvbid0IGhhdmUgYXNzaWdubWVudCBpbmZvIGZvciBvZmZzZXQ6JXVcbiIs
IGJ5dGVjb2RlT2Zmc2V0KTsKKyAgICAgICAgc3RhcnREaXZvdCA9IFVJTlRfTUFYOworICAgICAg
ICBlbmREaXZvdCA9IFVJTlRfTUFYOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAg
IAorICAgIFJhcmVEYXRhOjpUeXBlUHJvZmlsZXJFeHByZXNzaW9uUmFuZ2UmIHJhbmdlID0gaXRl
ci0+dmFsdWU7CisgICAgc3RhcnREaXZvdCA9IHJhbmdlLm1fc3RhcnREaXZvdDsKKyAgICBlbmRE
aXZvdCA9IHJhbmdlLm1fZW5kRGl2b3Q7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgVW5s
aW5rZWRDb2RlQmxvY2s6OmFkZFR5cGVQcm9maWxlckV4cHJlc3Npb25JbmZvKHVuc2lnbmVkIGlu
c3RydWN0aW9uT2Zmc2V0LCB1bnNpZ25lZCBzdGFydERpdm90LCB1bnNpZ25lZCBlbmREaXZvdCkK
K3sKKyAgICBjcmVhdGVSYXJlRGF0YUlmTmVjZXNzYXJ5KCk7CisgICAgUmFyZURhdGE6OlR5cGVQ
cm9maWxlckV4cHJlc3Npb25SYW5nZSByYW5nZTsKKyAgICByYW5nZS5tX3N0YXJ0RGl2b3QgPSBz
dGFydERpdm90OworICAgIHJhbmdlLm1fZW5kRGl2b3QgPSBlbmREaXZvdDsKKyAgICBtX3JhcmVE
YXRhLT5tX3R5cGVQcm9maWxlckluZm9NYXAuc2V0KGluc3RydWN0aW9uT2Zmc2V0LCByYW5nZSk7
Cit9CisKK3ZvaWQgVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrOjp2aXNpdENoaWxkcmVuKEpTQ2Vs
bCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgVW5saW5rZWRQcm9ncmFtQ29k
ZUJsb2NrKiB0aGlzT2JqZWN0ID0ganNDYXN0PFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jayo+KGNl
bGwpOworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsK
KyAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOworfQorCit2b2lk
IFVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jazo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNl
bGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIFVubGlua2VkTW9kdWxlUHJvZ3JhbUNv
ZGVCbG9jayogdGhpc09iamVjdCA9IGpzQ2FzdDxVbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxv
Y2sqPihjZWxsKTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGlu
Zm8oKSk7CisgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKK30K
KworVW5saW5rZWRDb2RlQmxvY2s6On5VbmxpbmtlZENvZGVCbG9jaygpCit7Cit9CisKK3ZvaWQg
VW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKK3sKKyAgICBq
c0Nhc3Q8VW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrKj4oY2VsbCktPn5VbmxpbmtlZFByb2dyYW1D
b2RlQmxvY2soKTsKK30KKwordm9pZCBVbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2s6OmRl
c3Ryb3koSlNDZWxsKiBjZWxsKQoreworICAgIGpzQ2FzdDxVbmxpbmtlZE1vZHVsZVByb2dyYW1D
b2RlQmxvY2sqPihjZWxsKS0+flVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jaygpOworfQor
Cit2b2lkIFVubGlua2VkRXZhbENvZGVCbG9jazo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCit7Cisg
ICAganNDYXN0PFVubGlua2VkRXZhbENvZGVCbG9jayo+KGNlbGwpLT5+VW5saW5rZWRFdmFsQ29k
ZUJsb2NrKCk7Cit9CisKK3ZvaWQgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jazo6ZGVzdHJveShK
U0NlbGwqIGNlbGwpCit7CisgICAganNDYXN0PFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2sqPihj
ZWxsKS0+flVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2soKTsKK30KKwordm9pZCBVbmxpbmtlZEZ1
bmN0aW9uRXhlY3V0YWJsZTo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCit7CisgICAganNDYXN0PFVu
bGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKj4oY2VsbCktPn5VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0
YWJsZSgpOworfQorCit2b2lkIFVubGlua2VkQ29kZUJsb2NrOjpzZXRJbnN0cnVjdGlvbnMoc3Rk
Ojp1bmlxdWVfcHRyPFVubGlua2VkSW5zdHJ1Y3Rpb25TdHJlYW0+IGluc3RydWN0aW9ucykKK3sK
KyAgICBBU1NFUlQoaW5zdHJ1Y3Rpb25zKTsKKyAgICBtX3VubGlua2VkSW5zdHJ1Y3Rpb25zID0g
V1RGTW92ZShpbnN0cnVjdGlvbnMpOworICAgIEhlYXA6OmhlYXAodGhpcyktPnJlcG9ydEV4dHJh
TWVtb3J5QWxsb2NhdGVkKG1fdW5saW5rZWRJbnN0cnVjdGlvbnMtPnNpemVJbkJ5dGVzKCkpOwor
fQorCitjb25zdCBVbmxpbmtlZEluc3RydWN0aW9uU3RyZWFtJiBVbmxpbmtlZENvZGVCbG9jazo6
aW5zdHJ1Y3Rpb25zKCkgY29uc3QKK3sKKyAgICBBU1NFUlQobV91bmxpbmtlZEluc3RydWN0aW9u
cy5nZXQoKSk7CisgICAgcmV0dXJuICptX3VubGlua2VkSW5zdHJ1Y3Rpb25zOworfQorCitVbmxp
bmtlZEhhbmRsZXJJbmZvKiBVbmxpbmtlZENvZGVCbG9jazo6aGFuZGxlckZvckJ5dGVjb2RlT2Zm
c2V0KHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0LCBSZXF1aXJlZEhhbmRsZXIgcmVxdWlyZWRIYW5k
bGVyKQoreworICAgIHJldHVybiBoYW5kbGVyRm9ySW5kZXgoYnl0ZWNvZGVPZmZzZXQsIHJlcXVp
cmVkSGFuZGxlcik7Cit9CisKK1VubGlua2VkSGFuZGxlckluZm8qIFVubGlua2VkQ29kZUJsb2Nr
OjpoYW5kbGVyRm9ySW5kZXgodW5zaWduZWQgaW5kZXgsIFJlcXVpcmVkSGFuZGxlciByZXF1aXJl
ZEhhbmRsZXIpCit7CisgICAgaWYgKCFtX3JhcmVEYXRhKQorICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICByZXR1cm4gVW5saW5rZWRIYW5kbGVySW5mbzo6aGFuZGxlckZvckluZGV4KG1fcmFy
ZURhdGEtPm1fZXhjZXB0aW9uSGFuZGxlcnMsIGluZGV4LCByZXF1aXJlZEhhbmRsZXIpOworfQor
Cit2b2lkIFVubGlua2VkQ29kZUJsb2NrOjphcHBseU1vZGlmaWNhdGlvbihCeXRlY29kZVJld3Jp
dGVyJiByZXdyaXRlcikKK3sKKyAgICAvLyBCZWZvcmUgYXBwbHlpbmcgdGhlIGNoYW5nZXMsIHdl
IGFkanVzdCB0aGUganVtcHMgYmFzZWQgb24gdGhlIG9yaWdpbmFsIGJ5dGVjb2RlIG9mZnNldCwg
dGhlIG9mZnNldCB0byB0aGUganVtcCB0YXJnZXQsIGFuZAorICAgIC8vIHRoZSBpbnNlcnRpb24g
aW5mb3JtYXRpb24uCisKKyAgICBCeXRlY29kZUdyYXBoPFVubGlua2VkQ29kZUJsb2NrPiYgZ3Jh
cGggPSByZXdyaXRlci5ncmFwaCgpOworICAgIFVubGlua2VkSW5zdHJ1Y3Rpb24qIGluc3RydWN0
aW9uc0JlZ2luID0gZ3JhcGguaW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKTsKKworICAgIGZvciAoaW50
IGJ5dGVjb2RlT2Zmc2V0ID0gMCwgaW5zdHJ1Y3Rpb25Db3VudCA9IGdyYXBoLmluc3RydWN0aW9u
cygpLnNpemUoKTsgYnl0ZWNvZGVPZmZzZXQgPCBpbnN0cnVjdGlvbkNvdW50OykgeworICAgICAg
ICBVbmxpbmtlZEluc3RydWN0aW9uKiBjdXJyZW50ID0gaW5zdHJ1Y3Rpb25zQmVnaW4gKyBieXRl
Y29kZU9mZnNldDsKKyAgICAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBjdXJyZW50WzBdLnUub3Bj
b2RlOworICAgICAgICBleHRyYWN0U3RvcmVkSnVtcFRhcmdldHNGb3JCeXRlY29kZU9mZnNldCh0
aGlzLCB2bSgpLT5pbnRlcnByZXRlciwgaW5zdHJ1Y3Rpb25zQmVnaW4sIGJ5dGVjb2RlT2Zmc2V0
LCBbJl0oaW50MzJfdCYgcmVsYXRpdmVPZmZzZXQpIHsKKyAgICAgICAgICAgIHJlbGF0aXZlT2Zm
c2V0ID0gcmV3cml0ZXIuYWRqdXN0SnVtcFRhcmdldChieXRlY29kZU9mZnNldCwgYnl0ZWNvZGVP
ZmZzZXQgKyByZWxhdGl2ZU9mZnNldCk7CisgICAgICAgIH0pOworICAgICAgICBieXRlY29kZU9m
ZnNldCArPSBvcGNvZGVMZW5ndGgob3Bjb2RlSUQpOworICAgIH0KKworICAgIC8vIFRoZW4sIGV4
Y2VwdGlvbiBoYW5kbGVycyBzaG91bGQgYmUgYWRqdXN0ZWQuCisgICAgaWYgKG1fcmFyZURhdGEp
IHsKKyAgICAgICAgZm9yIChVbmxpbmtlZEhhbmRsZXJJbmZvJiBoYW5kbGVyIDogbV9yYXJlRGF0
YS0+bV9leGNlcHRpb25IYW5kbGVycykgeworICAgICAgICAgICAgaGFuZGxlci50YXJnZXQgPSBy
ZXdyaXRlci5hZGp1c3RBYnNvbHV0ZU9mZnNldChoYW5kbGVyLnRhcmdldCk7CisgICAgICAgICAg
ICBoYW5kbGVyLnN0YXJ0ID0gcmV3cml0ZXIuYWRqdXN0QWJzb2x1dGVPZmZzZXQoaGFuZGxlci5z
dGFydCk7CisgICAgICAgICAgICBoYW5kbGVyLmVuZCA9IHJld3JpdGVyLmFkanVzdEFic29sdXRl
T2Zmc2V0KGhhbmRsZXIuZW5kKTsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgbV9yYXJlRGF0YS0+bV9vcFByb2ZpbGVDb250cm9sRmxvd0J5dGVjb2RlT2Zmc2V0
cy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIG1fcmFyZURhdGEtPm1fb3BQcm9maWxlQ29udHJv
bEZsb3dCeXRlY29kZU9mZnNldHNbaV0gPSByZXdyaXRlci5hZGp1c3RBYnNvbHV0ZU9mZnNldCht
X3JhcmVEYXRhLT5tX29wUHJvZmlsZUNvbnRyb2xGbG93Qnl0ZWNvZGVPZmZzZXRzW2ldKTsKKwor
ICAgICAgICBpZiAoIW1fcmFyZURhdGEtPm1fdHlwZVByb2ZpbGVySW5mb01hcC5pc0VtcHR5KCkp
IHsKKyAgICAgICAgICAgIEhhc2hNYXA8dW5zaWduZWQsIFJhcmVEYXRhOjpUeXBlUHJvZmlsZXJF
eHByZXNzaW9uUmFuZ2U+IGFkanVzdGVkVHlwZVByb2ZpbGVySW5mb01hcDsKKyAgICAgICAgICAg
IGZvciAoYXV0byYgZW50cnkgOiBtX3JhcmVEYXRhLT5tX3R5cGVQcm9maWxlckluZm9NYXApCisg
ICAgICAgICAgICAgICAgYWRqdXN0ZWRUeXBlUHJvZmlsZXJJbmZvTWFwLnNldChyZXdyaXRlci5h
ZGp1c3RBYnNvbHV0ZU9mZnNldChlbnRyeS5rZXkpLCBlbnRyeS52YWx1ZSk7CisgICAgICAgICAg
ICBtX3JhcmVEYXRhLT5tX3R5cGVQcm9maWxlckluZm9NYXAuc3dhcChhZGp1c3RlZFR5cGVQcm9m
aWxlckluZm9NYXApOworICAgICAgICB9CisgICAgfQorCisgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBtX3Byb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25zLnNpemUoKTsgKytpKQorICAgICAgICBt
X3Byb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25zW2ldID0gcmV3cml0ZXIuYWRqdXN0QWJzb2x1dGVP
ZmZzZXQobV9wcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uc1tpXSk7CisKKyAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IG1fZXhwcmVzc2lvbkluZm8uc2l6ZSgpOyArK2kpCisgICAgICAgIG1fZXhw
cmVzc2lvbkluZm9baV0uaW5zdHJ1Y3Rpb25PZmZzZXQgPSByZXdyaXRlci5hZGp1c3RBYnNvbHV0
ZU9mZnNldChtX2V4cHJlc3Npb25JbmZvW2ldLmluc3RydWN0aW9uT2Zmc2V0KTsKKworICAgIC8v
IFRoZW4sIG1vZGlmeSB0aGUgdW5saW5rZWQgaW5zdHJ1Y3Rpb25zLgorICAgIHJld3JpdGVyLmFw
cGx5TW9kaWZpY2F0aW9uKCk7CisKKyAgICAvLyBBbmQgcmVjb21wdXRlIHRoZSBqdW1wIHRhcmdl
dCBiYXNlZCBvbiB0aGUgbW9kaWZpZWQgdW5saW5rZWQgaW5zdHJ1Y3Rpb25zLgorICAgIG1fanVt
cFRhcmdldHMuY2xlYXIoKTsKKyAgICByZWNvbXB1dGVQcmVjaXNlSnVtcFRhcmdldHModGhpcywg
Z3JhcGguaW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKSwgZ3JhcGguaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgp
LCBtX2p1bXBUYXJnZXRzKTsKK30KKworfQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvVW5saW5rZWRFdmFsQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRFdmFsQ29kZUJsb2NrLmNwcAkocmV2aXNp
b24gMjA4MzA4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkRXZh
bENvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0LDQwNyArMjQsMTUgQEAKICAqLwog
CiAjaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpbmNsdWRlICJVbmxpbmtlZENvZGVCbG9jay5oIgot
Ci0jaW5jbHVkZSAiQnl0ZWNvZGVHZW5lcmF0b3IuaCIKLSNpbmNsdWRlICJCeXRlY29kZVJld3Jp
dGVyLmgiCi0jaW5jbHVkZSAiQ2xhc3NJbmZvLmgiCi0jaW5jbHVkZSAiQ29kZUNhY2hlLmgiCi0j
aW5jbHVkZSAiRXhlY3V0YWJsZUluZm8uaCIKLSNpbmNsdWRlICJGdW5jdGlvbk92ZXJyaWRlcy5o
IgotI2luY2x1ZGUgIkpTU3RyaW5nLmgiCi0jaW5jbHVkZSAiSlNDSW5saW5lcy5oIgotI2luY2x1
ZGUgIlBhcnNlci5oIgotI2luY2x1ZGUgIlByZWNpc2VKdW1wVGFyZ2V0c0lubGluZXMuaCIKLSNp
bmNsdWRlICJTb3VyY2VQcm92aWRlci5oIgotI2luY2x1ZGUgIlN0cnVjdHVyZS5oIgotI2luY2x1
ZGUgIlN5bWJvbFRhYmxlLmgiCi0jaW5jbHVkZSAiVW5saW5rZWRJbnN0cnVjdGlvblN0cmVhbS5o
IgotI2luY2x1ZGUgPHd0Zi9EYXRhTG9nLmg+CisjaW5jbHVkZSAiVW5saW5rZWRFdmFsQ29kZUJs
b2NrLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCi1jb25zdCBDbGFzc0luZm8gVW5saW5rZWRDb2Rl
QmxvY2s6OnNfaW5mbyA9IHsgIlVubGlua2VkQ29kZUJsb2NrIiwgMCwgMCwgQ1JFQVRFX01FVEhP
RF9UQUJMRShVbmxpbmtlZENvZGVCbG9jaykgfTsKLWNvbnN0IENsYXNzSW5mbyBVbmxpbmtlZEds
b2JhbENvZGVCbG9jazo6c19pbmZvID0geyAiVW5saW5rZWRHbG9iYWxDb2RlQmxvY2siLCAmQmFz
ZTo6c19pbmZvLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKFVubGlua2VkR2xvYmFsQ29kZUJsb2Nr
KSB9OwotY29uc3QgQ2xhc3NJbmZvIFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jazo6c19pbmZvID0g
eyAiVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrIiwgJkJhc2U6OnNfaW5mbywgMCwgQ1JFQVRFX01F
VEhPRF9UQUJMRShVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2spIH07Ci1jb25zdCBDbGFzc0luZm8g
VW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrOjpzX2luZm8gPSB7ICJVbmxpbmtlZE1vZHVs
ZVByb2dyYW1Db2RlQmxvY2siLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBDUkVBVEVfTUVUSE9E
X1RBQkxFKFVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jaykgfTsKIGNvbnN0IENsYXNzSW5m
byBVbmxpbmtlZEV2YWxDb2RlQmxvY2s6OnNfaW5mbyA9IHsgIlVubGlua2VkRXZhbENvZGVCbG9j
ayIsICZCYXNlOjpzX2luZm8sIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoVW5saW5rZWRFdmFsQ29k
ZUJsb2NrKSB9OwotY29uc3QgQ2xhc3NJbmZvIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2s6OnNf
aW5mbyA9IHsgIlVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2siLCAmQmFzZTo6c19pbmZvLCAwLCBD
UkVBVEVfTUVUSE9EX1RBQkxFKFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2spIH07Ci0KLVVubGlu
a2VkQ29kZUJsb2NrOjpVbmxpbmtlZENvZGVCbG9jayhWTSogdm0sIFN0cnVjdHVyZSogc3RydWN0
dXJlLCBDb2RlVHlwZSBjb2RlVHlwZSwgY29uc3QgRXhlY3V0YWJsZUluZm8mIGluZm8sIERlYnVn
Z2VyTW9kZSBkZWJ1Z2dlck1vZGUpCi0gICAgOiBCYXNlKCp2bSwgc3RydWN0dXJlKQotICAgICwg
bV9udW1WYXJzKDApCi0gICAgLCBtX251bUNhbGxlZUxvY2FscygwKQotICAgICwgbV9udW1QYXJh
bWV0ZXJzKDApCi0gICAgLCBtX2dsb2JhbE9iamVjdFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcigp
KQotICAgICwgbV91c2VzRXZhbChpbmZvLnVzZXNFdmFsKCkpCi0gICAgLCBtX2lzU3RyaWN0TW9k
ZShpbmZvLmlzU3RyaWN0TW9kZSgpKQotICAgICwgbV9pc0NvbnN0cnVjdG9yKGluZm8uaXNDb25z
dHJ1Y3RvcigpKQotICAgICwgbV9oYXNDYXB0dXJlZFZhcmlhYmxlcyhmYWxzZSkKLSAgICAsIG1f
aXNCdWlsdGluRnVuY3Rpb24oaW5mby5pc0J1aWx0aW5GdW5jdGlvbigpKQotICAgICwgbV9zdXBl
ckJpbmRpbmcoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGluZm8uc3VwZXJCaW5kaW5nKCkpKQotICAg
ICwgbV9zY3JpcHRNb2RlKHN0YXRpY19jYXN0PHVuc2lnbmVkPihpbmZvLnNjcmlwdE1vZGUoKSkp
Ci0gICAgLCBtX2lzQXJyb3dGdW5jdGlvbkNvbnRleHQoaW5mby5pc0Fycm93RnVuY3Rpb25Db250
ZXh0KCkpCi0gICAgLCBtX2lzQ2xhc3NDb250ZXh0KGluZm8uaXNDbGFzc0NvbnRleHQoKSkKLSAg
ICAsIG1fd2FzQ29tcGlsZWRXaXRoRGVidWdnaW5nT3Bjb2RlcyhkZWJ1Z2dlck1vZGUgPT0gRGVi
dWdnZXJNb2RlOjpEZWJ1Z2dlck9uIHx8IE9wdGlvbnM6OmZvcmNlRGVidWdnZXJCeXRlY29kZUdl
bmVyYXRpb24oKSkKLSAgICAsIG1fY29uc3RydWN0b3JLaW5kKHN0YXRpY19jYXN0PHVuc2lnbmVk
PihpbmZvLmNvbnN0cnVjdG9yS2luZCgpKSkKLSAgICAsIG1fZGVyaXZlZENvbnRleHRUeXBlKHN0
YXRpY19jYXN0PHVuc2lnbmVkPihpbmZvLmRlcml2ZWRDb250ZXh0VHlwZSgpKSkKLSAgICAsIG1f
ZXZhbENvbnRleHRUeXBlKHN0YXRpY19jYXN0PHVuc2lnbmVkPihpbmZvLmV2YWxDb250ZXh0VHlw
ZSgpKSkKLSAgICAsIG1fZmlyc3RMaW5lKDApCi0gICAgLCBtX2xpbmVDb3VudCgwKQotICAgICwg
bV9lbmRDb2x1bW4oVUlOVF9NQVgpCi0gICAgLCBtX2RpZE9wdGltaXplKE1peGVkVHJpU3RhdGUp
Ci0gICAgLCBtX3BhcnNlTW9kZShpbmZvLnBhcnNlTW9kZSgpKQotICAgICwgbV9mZWF0dXJlcygw
KQotICAgICwgbV9jb2RlVHlwZShjb2RlVHlwZSkKLSAgICAsIG1fYXJyYXlQcm9maWxlQ291bnQo
MCkKLSAgICAsIG1fYXJyYXlBbGxvY2F0aW9uUHJvZmlsZUNvdW50KDApCi0gICAgLCBtX29iamVj
dEFsbG9jYXRpb25Qcm9maWxlQ291bnQoMCkKLSAgICAsIG1fdmFsdWVQcm9maWxlQ291bnQoMCkK
LSAgICAsIG1fbGxpbnRDYWxsTGlua0luZm9Db3VudCgwKQotewotICAgIGZvciAoYXV0byYgY29u
c3RhbnRSZWdpc3RlckluZGV4IDogbV9saW5rVGltZUNvbnN0YW50cykKLSAgICAgICAgY29uc3Rh
bnRSZWdpc3RlckluZGV4ID0gMDsKLSAgICBBU1NFUlQobV9jb25zdHJ1Y3RvcktpbmQgPT0gc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KGluZm8uY29uc3RydWN0b3JLaW5kKCkpKTsKLX0KLQotdm9pZCBV
bmxpbmtlZENvZGVCbG9jazo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQotewotICAgIFVubGlua2VkQ29kZUJsb2NrKiB0aGlzT2JqZWN0ID0ganNDYXN0
PFVubGlua2VkQ29kZUJsb2NrKj4oY2VsbCk7Ci0gICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklU
Uyh0aGlzT2JqZWN0LCBpbmZvKCkpOwotICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVj
dCwgdmlzaXRvcik7Ci0gICAgZm9yIChGdW5jdGlvbkV4cHJlc3Npb25WZWN0b3I6Oml0ZXJhdG9y
IHB0ciA9IHRoaXNPYmplY3QtPm1fZnVuY3Rpb25EZWNscy5iZWdpbigpLCBlbmQgPSB0aGlzT2Jq
ZWN0LT5tX2Z1bmN0aW9uRGVjbHMuZW5kKCk7IHB0ciAhPSBlbmQ7ICsrcHRyKQotICAgICAgICB2
aXNpdG9yLmFwcGVuZChwdHIpOwotICAgIGZvciAoRnVuY3Rpb25FeHByZXNzaW9uVmVjdG9yOjpp
dGVyYXRvciBwdHIgPSB0aGlzT2JqZWN0LT5tX2Z1bmN0aW9uRXhwcnMuYmVnaW4oKSwgZW5kID0g
dGhpc09iamVjdC0+bV9mdW5jdGlvbkV4cHJzLmVuZCgpOyBwdHIgIT0gZW5kOyArK3B0cikKLSAg
ICAgICAgdmlzaXRvci5hcHBlbmQocHRyKTsKLSAgICB2aXNpdG9yLmFwcGVuZFZhbHVlcyh0aGlz
T2JqZWN0LT5tX2NvbnN0YW50UmVnaXN0ZXJzLmRhdGEoKSwgdGhpc09iamVjdC0+bV9jb25zdGFu
dFJlZ2lzdGVycy5zaXplKCkpOwotICAgIGlmICh0aGlzT2JqZWN0LT5tX3VubGlua2VkSW5zdHJ1
Y3Rpb25zKQotICAgICAgICB2aXNpdG9yLnJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZCh0aGlzT2Jq
ZWN0LT5tX3VubGlua2VkSW5zdHJ1Y3Rpb25zLT5zaXplSW5CeXRlcygpKTsKLSAgICBpZiAodGhp
c09iamVjdC0+bV9yYXJlRGF0YSkgewotICAgICAgICBmb3IgKHNpemVfdCBpID0gMCwgZW5kID0g
dGhpc09iamVjdC0+bV9yYXJlRGF0YS0+bV9yZWdleHBzLnNpemUoKTsgaSAhPSBlbmQ7IGkrKykK
LSAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX3JhcmVEYXRhLT5tX3Jl
Z2V4cHNbaV0pOwotICAgIH0KLX0KLQotc2l6ZV90IFVubGlua2VkQ29kZUJsb2NrOjplc3RpbWF0
ZWRTaXplKEpTQ2VsbCogY2VsbCkKLXsKLSAgICBVbmxpbmtlZENvZGVCbG9jayogdGhpc09iamVj
dCA9IGpzQ2FzdDxVbmxpbmtlZENvZGVCbG9jayo+KGNlbGwpOwotICAgIHNpemVfdCBleHRyYVNp
emUgPSB0aGlzT2JqZWN0LT5tX3VubGlua2VkSW5zdHJ1Y3Rpb25zID8gdGhpc09iamVjdC0+bV91
bmxpbmtlZEluc3RydWN0aW9ucy0+c2l6ZUluQnl0ZXMoKSA6IDA7Ci0gICAgcmV0dXJuIEJhc2U6
OmVzdGltYXRlZFNpemUoY2VsbCkgKyBleHRyYVNpemU7Ci19Ci0KLWludCBVbmxpbmtlZENvZGVC
bG9jazo6bGluZU51bWJlckZvckJ5dGVjb2RlT2Zmc2V0KHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0
KQotewotICAgIEFTU0VSVChieXRlY29kZU9mZnNldCA8IGluc3RydWN0aW9ucygpLmNvdW50KCkp
OwotICAgIGludCBkaXZvdDsKLSAgICBpbnQgc3RhcnRPZmZzZXQ7Ci0gICAgaW50IGVuZE9mZnNl
dDsKLSAgICB1bnNpZ25lZCBsaW5lOwotICAgIHVuc2lnbmVkIGNvbHVtbjsKLSAgICBleHByZXNz
aW9uUmFuZ2VGb3JCeXRlY29kZU9mZnNldChieXRlY29kZU9mZnNldCwgZGl2b3QsIHN0YXJ0T2Zm
c2V0LCBlbmRPZmZzZXQsIGxpbmUsIGNvbHVtbik7Ci0gICAgcmV0dXJuIGxpbmU7Ci19Ci0KLWlu
bGluZSB2b2lkIFVubGlua2VkQ29kZUJsb2NrOjpnZXRMaW5lQW5kQ29sdW1uKGNvbnN0IEV4cHJl
c3Npb25SYW5nZUluZm8mIGluZm8sCi0gICAgdW5zaWduZWQmIGxpbmUsIHVuc2lnbmVkJiBjb2x1
bW4pIGNvbnN0Ci17Ci0gICAgc3dpdGNoIChpbmZvLm1vZGUpIHsKLSAgICBjYXNlIEV4cHJlc3Np
b25SYW5nZUluZm86OkZhdExpbmVNb2RlOgotICAgICAgICBpbmZvLmRlY29kZUZhdExpbmVNb2Rl
KGxpbmUsIGNvbHVtbik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRXhwcmVzc2lvblJhbmdl
SW5mbzo6RmF0Q29sdW1uTW9kZToKLSAgICAgICAgaW5mby5kZWNvZGVGYXRDb2x1bW5Nb2RlKGxp
bmUsIGNvbHVtbik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRXhwcmVzc2lvblJhbmdlSW5m
bzo6RmF0TGluZUFuZENvbHVtbk1vZGU6IHsKLSAgICAgICAgdW5zaWduZWQgZmF0SW5kZXggPSBp
bmZvLnBvc2l0aW9uOwotICAgICAgICBFeHByZXNzaW9uUmFuZ2VJbmZvOjpGYXRQb3NpdGlvbiYg
ZmF0UG9zID0gbV9yYXJlRGF0YS0+bV9leHByZXNzaW9uSW5mb0ZhdFBvc2l0aW9uc1tmYXRJbmRl
eF07Ci0gICAgICAgIGxpbmUgPSBmYXRQb3MubGluZTsKLSAgICAgICAgY29sdW1uID0gZmF0UG9z
LmNvbHVtbjsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIH0gLy8gc3dpdGNoCi19Ci0KLSNp
Zm5kZWYgTkRFQlVHCi1zdGF0aWMgdm9pZCBkdW1wTGluZUNvbHVtbkVudHJ5KHNpemVfdCBpbmRl
eCwgY29uc3QgVW5saW5rZWRJbnN0cnVjdGlvblN0cmVhbSYgaW5zdHJ1Y3Rpb25TdHJlYW0sIHVu
c2lnbmVkIGluc3RydWN0aW9uT2Zmc2V0LCB1bnNpZ25lZCBsaW5lLCB1bnNpZ25lZCBjb2x1bW4p
Ci17Ci0gICAgY29uc3QgYXV0byYgaW5zdHJ1Y3Rpb25zID0gaW5zdHJ1Y3Rpb25TdHJlYW0udW5w
YWNrRm9yRGVidWdnaW5nKCk7Ci0gICAgT3Bjb2RlSUQgb3Bjb2RlID0gaW5zdHJ1Y3Rpb25zW2lu
c3RydWN0aW9uT2Zmc2V0XS51Lm9wY29kZTsKLSAgICBjb25zdCBjaGFyKiBldmVudCA9ICIiOwot
ICAgIGlmIChvcGNvZGUgPT0gb3BfZGVidWcpIHsKLSAgICAgICAgc3dpdGNoIChpbnN0cnVjdGlv
bnNbaW5zdHJ1Y3Rpb25PZmZzZXQgKyAxXS51Lm9wZXJhbmQpIHsKLSAgICAgICAgY2FzZSBXaWxs
RXhlY3V0ZVByb2dyYW06IGV2ZW50ID0gIiBXaWxsRXhlY3V0ZVByb2dyYW0iOyBicmVhazsKLSAg
ICAgICAgY2FzZSBEaWRFeGVjdXRlUHJvZ3JhbTogZXZlbnQgPSAiIERpZEV4ZWN1dGVQcm9ncmFt
IjsgYnJlYWs7Ci0gICAgICAgIGNhc2UgRGlkRW50ZXJDYWxsRnJhbWU6IGV2ZW50ID0gIiBEaWRF
bnRlckNhbGxGcmFtZSI7IGJyZWFrOwotICAgICAgICBjYXNlIERpZFJlYWNoQnJlYWtwb2ludDog
ZXZlbnQgPSAiIERpZFJlYWNoQnJlYWtwb2ludCI7IGJyZWFrOwotICAgICAgICBjYXNlIFdpbGxM
ZWF2ZUNhbGxGcmFtZTogZXZlbnQgPSAiIFdpbGxMZWF2ZUNhbGxGcmFtZSI7IGJyZWFrOwotICAg
ICAgICBjYXNlIFdpbGxFeGVjdXRlU3RhdGVtZW50OiBldmVudCA9ICIgV2lsbEV4ZWN1dGVTdGF0
ZW1lbnQiOyBicmVhazsKLSAgICAgICAgY2FzZSBXaWxsRXhlY3V0ZUV4cHJlc3Npb246IGV2ZW50
ID0gIiBXaWxsRXhlY3V0ZUV4cHJlc3Npb24iOyBicmVhazsKLSAgICAgICAgfQotICAgIH0KLSAg
ICBkYXRhTG9nRigiICBbJXp1XSBwYyAldSBAIGxpbmUgJXUgY29sICV1IDogJXMlc1xuIiwgaW5k
ZXgsIGluc3RydWN0aW9uT2Zmc2V0LCBsaW5lLCBjb2x1bW4sIG9wY29kZU5hbWVzW29wY29kZV0s
IGV2ZW50KTsKLX0KLQotdm9pZCBVbmxpbmtlZENvZGVCbG9jazo6ZHVtcEV4cHJlc3Npb25SYW5n
ZUluZm8oKQotewotICAgIFZlY3RvcjxFeHByZXNzaW9uUmFuZ2VJbmZvPiYgZXhwcmVzc2lvbklu
Zm8gPSBtX2V4cHJlc3Npb25JbmZvOwotCi0gICAgc2l6ZV90IHNpemUgPSBtX2V4cHJlc3Npb25J
bmZvLnNpemUoKTsKLSAgICBkYXRhTG9nRigiVW5saW5rZWRDb2RlQmxvY2sgJXAgZXhwcmVzc2lv
blJhbmdlSW5mb1slenVdIHtcbiIsIHRoaXMsIHNpemUpOwotICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgc2l6ZTsgaSsrKSB7Ci0gICAgICAgIEV4cHJlc3Npb25SYW5nZUluZm8mIGluZm8gPSBl
eHByZXNzaW9uSW5mb1tpXTsKLSAgICAgICAgdW5zaWduZWQgbGluZTsKLSAgICAgICAgdW5zaWdu
ZWQgY29sdW1uOwotICAgICAgICBnZXRMaW5lQW5kQ29sdW1uKGluZm8sIGxpbmUsIGNvbHVtbik7
Ci0gICAgICAgIGR1bXBMaW5lQ29sdW1uRW50cnkoaSwgaW5zdHJ1Y3Rpb25zKCksIGluZm8uaW5z
dHJ1Y3Rpb25PZmZzZXQsIGxpbmUsIGNvbHVtbik7Ci0gICAgfQotICAgIGRhdGFMb2coIn1cbiIp
OwotfQotI2VuZGlmCi0KLXZvaWQgVW5saW5rZWRDb2RlQmxvY2s6OmV4cHJlc3Npb25SYW5nZUZv
ckJ5dGVjb2RlT2Zmc2V0KHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0LAotICAgIGludCYgZGl2b3Qs
IGludCYgc3RhcnRPZmZzZXQsIGludCYgZW5kT2Zmc2V0LCB1bnNpZ25lZCYgbGluZSwgdW5zaWdu
ZWQmIGNvbHVtbikgY29uc3QKLXsKLSAgICBBU1NFUlQoYnl0ZWNvZGVPZmZzZXQgPCBpbnN0cnVj
dGlvbnMoKS5jb3VudCgpKTsKLQotICAgIGlmICghbV9leHByZXNzaW9uSW5mby5zaXplKCkpIHsK
LSAgICAgICAgc3RhcnRPZmZzZXQgPSAwOwotICAgICAgICBlbmRPZmZzZXQgPSAwOwotICAgICAg
ICBkaXZvdCA9IDA7Ci0gICAgICAgIGxpbmUgPSAwOwotICAgICAgICBjb2x1bW4gPSAwOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgY29uc3QgVmVjdG9yPEV4cHJlc3Npb25SYW5nZUlu
Zm8+JiBleHByZXNzaW9uSW5mbyA9IG1fZXhwcmVzc2lvbkluZm87Ci0KLSAgICBpbnQgbG93ID0g
MDsKLSAgICBpbnQgaGlnaCA9IGV4cHJlc3Npb25JbmZvLnNpemUoKTsKLSAgICB3aGlsZSAobG93
IDwgaGlnaCkgewotICAgICAgICBpbnQgbWlkID0gbG93ICsgKGhpZ2ggLSBsb3cpIC8gMjsKLSAg
ICAgICAgaWYgKGV4cHJlc3Npb25JbmZvW21pZF0uaW5zdHJ1Y3Rpb25PZmZzZXQgPD0gYnl0ZWNv
ZGVPZmZzZXQpCi0gICAgICAgICAgICBsb3cgPSBtaWQgKyAxOwotICAgICAgICBlbHNlCi0gICAg
ICAgICAgICBoaWdoID0gbWlkOwotICAgIH0KLQotICAgIGlmICghbG93KQotICAgICAgICBsb3cg
PSAxOwotCi0gICAgY29uc3QgRXhwcmVzc2lvblJhbmdlSW5mbyYgaW5mbyA9IGV4cHJlc3Npb25J
bmZvW2xvdyAtIDFdOwotICAgIHN0YXJ0T2Zmc2V0ID0gaW5mby5zdGFydE9mZnNldDsKLSAgICBl
bmRPZmZzZXQgPSBpbmZvLmVuZE9mZnNldDsKLSAgICBkaXZvdCA9IGluZm8uZGl2b3RQb2ludDsK
LSAgICBnZXRMaW5lQW5kQ29sdW1uKGluZm8sIGxpbmUsIGNvbHVtbik7Ci19Ci0KLXZvaWQgVW5s
aW5rZWRDb2RlQmxvY2s6OmFkZEV4cHJlc3Npb25JbmZvKHVuc2lnbmVkIGluc3RydWN0aW9uT2Zm
c2V0LAotICAgIGludCBkaXZvdCwgaW50IHN0YXJ0T2Zmc2V0LCBpbnQgZW5kT2Zmc2V0LCB1bnNp
Z25lZCBsaW5lLCB1bnNpZ25lZCBjb2x1bW4pCi17Ci0gICAgaWYgKGRpdm90ID4gRXhwcmVzc2lv
blJhbmdlSW5mbzo6TWF4RGl2b3QpIHsKLSAgICAgICAgLy8gT3ZlcmZsb3cgaGFzIG9jY3VycmVk
LCB3ZSBjYW4gb25seSBnaXZlIGxpbmUgbnVtYmVyIGluZm8gZm9yIGVycm9ycyBmb3IgdGhpcyBy
ZWdpb24KLSAgICAgICAgZGl2b3QgPSAwOwotICAgICAgICBzdGFydE9mZnNldCA9IDA7Ci0gICAg
ICAgIGVuZE9mZnNldCA9IDA7Ci0gICAgfSBlbHNlIGlmIChzdGFydE9mZnNldCA+IEV4cHJlc3Np
b25SYW5nZUluZm86Ok1heE9mZnNldCkgewotICAgICAgICAvLyBJZiB0aGUgc3RhcnQgb2Zmc2V0
IGlzIG91dCBvZiBib3VuZHMgd2UgY2xlYXIgYm90aCBvZmZzZXRzCi0gICAgICAgIC8vIHNvIHdl
IG9ubHkgZ2V0IHRoZSBkaXZvdCBtYXJrZXIuIEVycm9yIG1lc3NhZ2Ugd2lsbCBoYXZlIHRvIGJl
IHJlZHVjZWQKLSAgICAgICAgLy8gdG8gbGluZSBhbmQgY2hhclBvc2l0aW9uIG51bWJlci4KLSAg
ICAgICAgc3RhcnRPZmZzZXQgPSAwOwotICAgICAgICBlbmRPZmZzZXQgPSAwOwotICAgIH0gZWxz
ZSBpZiAoZW5kT2Zmc2V0ID4gRXhwcmVzc2lvblJhbmdlSW5mbzo6TWF4T2Zmc2V0KSB7Ci0gICAg
ICAgIC8vIFRoZSBlbmQgb2Zmc2V0IGlzIG9ubHkgdXNlZCBmb3IgYWRkaXRpb25hbCBjb250ZXh0
LCBhbmQgaXMgbXVjaCBtb3JlIGxpa2VseQotICAgICAgICAvLyB0byBvdmVyZmxvdyAoZWcuIGZ1
bmN0aW9uIGNhbGwgYXJndW1lbnRzKSBzbyB3ZSBhcmUgd2lsbGluZyB0byBkcm9wIGl0IHdpdGhv
dXQKLSAgICAgICAgLy8gZHJvcHBpbmcgdGhlIHJlc3Qgb2YgdGhlIHJhbmdlLgotICAgICAgICBl
bmRPZmZzZXQgPSAwOwotICAgIH0KLQotICAgIHVuc2lnbmVkIHBvc2l0aW9uTW9kZSA9Ci0gICAg
ICAgIChsaW5lIDw9IEV4cHJlc3Npb25SYW5nZUluZm86Ok1heEZhdExpbmVNb2RlTGluZSAmJiBj
b2x1bW4gPD0gRXhwcmVzc2lvblJhbmdlSW5mbzo6TWF4RmF0TGluZU1vZGVDb2x1bW4pIAotICAg
ICAgICA/IEV4cHJlc3Npb25SYW5nZUluZm86OkZhdExpbmVNb2RlCi0gICAgICAgIDogKGxpbmUg
PD0gRXhwcmVzc2lvblJhbmdlSW5mbzo6TWF4RmF0Q29sdW1uTW9kZUxpbmUgJiYgY29sdW1uIDw9
IEV4cHJlc3Npb25SYW5nZUluZm86Ok1heEZhdENvbHVtbk1vZGVDb2x1bW4pCi0gICAgICAgID8g
RXhwcmVzc2lvblJhbmdlSW5mbzo6RmF0Q29sdW1uTW9kZQotICAgICAgICA6IEV4cHJlc3Npb25S
YW5nZUluZm86OkZhdExpbmVBbmRDb2x1bW5Nb2RlOwotCi0gICAgRXhwcmVzc2lvblJhbmdlSW5m
byBpbmZvOwotICAgIGluZm8uaW5zdHJ1Y3Rpb25PZmZzZXQgPSBpbnN0cnVjdGlvbk9mZnNldDsK
LSAgICBpbmZvLmRpdm90UG9pbnQgPSBkaXZvdDsKLSAgICBpbmZvLnN0YXJ0T2Zmc2V0ID0gc3Rh
cnRPZmZzZXQ7Ci0gICAgaW5mby5lbmRPZmZzZXQgPSBlbmRPZmZzZXQ7Ci0KLSAgICBpbmZvLm1v
ZGUgPSBwb3NpdGlvbk1vZGU7Ci0gICAgc3dpdGNoIChwb3NpdGlvbk1vZGUpIHsKLSAgICBjYXNl
IEV4cHJlc3Npb25SYW5nZUluZm86OkZhdExpbmVNb2RlOgotICAgICAgICBpbmZvLmVuY29kZUZh
dExpbmVNb2RlKGxpbmUsIGNvbHVtbik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRXhwcmVz
c2lvblJhbmdlSW5mbzo6RmF0Q29sdW1uTW9kZToKLSAgICAgICAgaW5mby5lbmNvZGVGYXRDb2x1
bW5Nb2RlKGxpbmUsIGNvbHVtbik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRXhwcmVzc2lv
blJhbmdlSW5mbzo6RmF0TGluZUFuZENvbHVtbk1vZGU6IHsKLSAgICAgICAgY3JlYXRlUmFyZURh
dGFJZk5lY2Vzc2FyeSgpOwotICAgICAgICB1bnNpZ25lZCBmYXRJbmRleCA9IG1fcmFyZURhdGEt
Pm1fZXhwcmVzc2lvbkluZm9GYXRQb3NpdGlvbnMuc2l6ZSgpOwotICAgICAgICBFeHByZXNzaW9u
UmFuZ2VJbmZvOjpGYXRQb3NpdGlvbiBmYXRQb3MgPSB7IGxpbmUsIGNvbHVtbiB9OwotICAgICAg
ICBtX3JhcmVEYXRhLT5tX2V4cHJlc3Npb25JbmZvRmF0UG9zaXRpb25zLmFwcGVuZChmYXRQb3Mp
OwotICAgICAgICBpbmZvLnBvc2l0aW9uID0gZmF0SW5kZXg7Ci0gICAgfQotICAgIH0gLy8gc3dp
dGNoCi0KLSAgICBtX2V4cHJlc3Npb25JbmZvLmFwcGVuZChpbmZvKTsKLX0KLQotYm9vbCBVbmxp
bmtlZENvZGVCbG9jazo6dHlwZVByb2ZpbGVyRXhwcmVzc2lvbkluZm9Gb3JCeXRlY29kZU9mZnNl
dCh1bnNpZ25lZCBieXRlY29kZU9mZnNldCwgdW5zaWduZWQmIHN0YXJ0RGl2b3QsIHVuc2lnbmVk
JiBlbmREaXZvdCkKLXsKLSAgICBzdGF0aWMgY29uc3QgYm9vbCB2ZXJib3NlID0gZmFsc2U7Ci0g
ICAgaWYgKCFtX3JhcmVEYXRhKSB7Ci0gICAgICAgIGlmICh2ZXJib3NlKQotICAgICAgICAgICAg
ZGF0YUxvZ0YoIkRvbid0IGhhdmUgYXNzaWdubWVudCBpbmZvIGZvciBvZmZzZXQ6JXVcbiIsIGJ5
dGVjb2RlT2Zmc2V0KTsKLSAgICAgICAgc3RhcnREaXZvdCA9IFVJTlRfTUFYOwotICAgICAgICBl
bmREaXZvdCA9IFVJTlRfTUFYOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAg
YXV0byBpdGVyID0gbV9yYXJlRGF0YS0+bV90eXBlUHJvZmlsZXJJbmZvTWFwLmZpbmQoYnl0ZWNv
ZGVPZmZzZXQpOwotICAgIGlmIChpdGVyID09IG1fcmFyZURhdGEtPm1fdHlwZVByb2ZpbGVySW5m
b01hcC5lbmQoKSkgewotICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgIGRhdGFMb2dG
KCJEb24ndCBoYXZlIGFzc2lnbm1lbnQgaW5mbyBmb3Igb2Zmc2V0OiV1XG4iLCBieXRlY29kZU9m
ZnNldCk7Ci0gICAgICAgIHN0YXJ0RGl2b3QgPSBVSU5UX01BWDsKLSAgICAgICAgZW5kRGl2b3Qg
PSBVSU5UX01BWDsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICAKLSAgICBSYXJl
RGF0YTo6VHlwZVByb2ZpbGVyRXhwcmVzc2lvblJhbmdlJiByYW5nZSA9IGl0ZXItPnZhbHVlOwot
ICAgIHN0YXJ0RGl2b3QgPSByYW5nZS5tX3N0YXJ0RGl2b3Q7Ci0gICAgZW5kRGl2b3QgPSByYW5n
ZS5tX2VuZERpdm90OwotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIFVubGlua2VkQ29kZUJs
b2NrOjphZGRUeXBlUHJvZmlsZXJFeHByZXNzaW9uSW5mbyh1bnNpZ25lZCBpbnN0cnVjdGlvbk9m
ZnNldCwgdW5zaWduZWQgc3RhcnREaXZvdCwgdW5zaWduZWQgZW5kRGl2b3QpCi17Ci0gICAgY3Jl
YXRlUmFyZURhdGFJZk5lY2Vzc2FyeSgpOwotICAgIFJhcmVEYXRhOjpUeXBlUHJvZmlsZXJFeHBy
ZXNzaW9uUmFuZ2UgcmFuZ2U7Ci0gICAgcmFuZ2UubV9zdGFydERpdm90ID0gc3RhcnREaXZvdDsK
LSAgICByYW5nZS5tX2VuZERpdm90ID0gZW5kRGl2b3Q7Ci0gICAgbV9yYXJlRGF0YS0+bV90eXBl
UHJvZmlsZXJJbmZvTWFwLnNldChpbnN0cnVjdGlvbk9mZnNldCwgcmFuZ2UpOwotfQotCi12b2lk
IFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jazo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQotewotICAgIFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jayogdGhp
c09iamVjdCA9IGpzQ2FzdDxVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2sqPihjZWxsKTsKLSAgICBB
U1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7Ci0gICAgQmFzZTo6
dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKLX0KLQotdm9pZCBVbmxpbmtlZE1v
ZHVsZVByb2dyYW1Db2RlQmxvY2s6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90Vmlz
aXRvciYgdmlzaXRvcikKLXsKLSAgICBVbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2sqIHRo
aXNPYmplY3QgPSBqc0Nhc3Q8VW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrKj4oY2VsbCk7
Ci0gICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwotICAg
IEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7Ci19Ci0KLVVubGlua2Vk
Q29kZUJsb2NrOjp+VW5saW5rZWRDb2RlQmxvY2soKQotewotfQotCi12b2lkIFVubGlua2VkUHJv
Z3JhbUNvZGVCbG9jazo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCi17Ci0gICAganNDYXN0PFVubGlu
a2VkUHJvZ3JhbUNvZGVCbG9jayo+KGNlbGwpLT5+VW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrKCk7
Ci19Ci0KLXZvaWQgVW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrOjpkZXN0cm95KEpTQ2Vs
bCogY2VsbCkKLXsKLSAgICBqc0Nhc3Q8VW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrKj4o
Y2VsbCktPn5VbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2soKTsKLX0KIAogdm9pZCBVbmxp
bmtlZEV2YWxDb2RlQmxvY2s6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQogewogICAgIGpzQ2FzdDxV
bmxpbmtlZEV2YWxDb2RlQmxvY2sqPihjZWxsKS0+flVubGlua2VkRXZhbENvZGVCbG9jaygpOwog
fQogCi12b2lkIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2s6OmRlc3Ryb3koSlNDZWxsKiBjZWxs
KQotewotICAgIGpzQ2FzdDxVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKj4oY2VsbCktPn5Vbmxp
bmtlZEZ1bmN0aW9uQ29kZUJsb2NrKCk7Ci19Ci0KLXZvaWQgVW5saW5rZWRGdW5jdGlvbkV4ZWN1
dGFibGU6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQotewotICAgIGpzQ2FzdDxVbmxpbmtlZEZ1bmN0
aW9uRXhlY3V0YWJsZSo+KGNlbGwpLT5+VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUoKTsKLX0K
LQotdm9pZCBVbmxpbmtlZENvZGVCbG9jazo6c2V0SW5zdHJ1Y3Rpb25zKHN0ZDo6dW5pcXVlX3B0
cjxVbmxpbmtlZEluc3RydWN0aW9uU3RyZWFtPiBpbnN0cnVjdGlvbnMpCi17Ci0gICAgQVNTRVJU
KGluc3RydWN0aW9ucyk7Ci0gICAgbV91bmxpbmtlZEluc3RydWN0aW9ucyA9IFdURk1vdmUoaW5z
dHJ1Y3Rpb25zKTsKLSAgICBIZWFwOjpoZWFwKHRoaXMpLT5yZXBvcnRFeHRyYU1lbW9yeUFsbG9j
YXRlZChtX3VubGlua2VkSW5zdHJ1Y3Rpb25zLT5zaXplSW5CeXRlcygpKTsKLX0KLQotY29uc3Qg
VW5saW5rZWRJbnN0cnVjdGlvblN0cmVhbSYgVW5saW5rZWRDb2RlQmxvY2s6Omluc3RydWN0aW9u
cygpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKG1fdW5saW5rZWRJbnN0cnVjdGlvbnMuZ2V0KCkpOwot
ICAgIHJldHVybiAqbV91bmxpbmtlZEluc3RydWN0aW9uczsKLX0KLQotVW5saW5rZWRIYW5kbGVy
SW5mbyogVW5saW5rZWRDb2RlQmxvY2s6OmhhbmRsZXJGb3JCeXRlY29kZU9mZnNldCh1bnNpZ25l
ZCBieXRlY29kZU9mZnNldCwgUmVxdWlyZWRIYW5kbGVyIHJlcXVpcmVkSGFuZGxlcikKLXsKLSAg
ICByZXR1cm4gaGFuZGxlckZvckluZGV4KGJ5dGVjb2RlT2Zmc2V0LCByZXF1aXJlZEhhbmRsZXIp
OwotfQotCi1VbmxpbmtlZEhhbmRsZXJJbmZvKiBVbmxpbmtlZENvZGVCbG9jazo6aGFuZGxlckZv
ckluZGV4KHVuc2lnbmVkIGluZGV4LCBSZXF1aXJlZEhhbmRsZXIgcmVxdWlyZWRIYW5kbGVyKQot
ewotICAgIGlmICghbV9yYXJlRGF0YSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0
dXJuIFVubGlua2VkSGFuZGxlckluZm86OmhhbmRsZXJGb3JJbmRleChtX3JhcmVEYXRhLT5tX2V4
Y2VwdGlvbkhhbmRsZXJzLCBpbmRleCwgcmVxdWlyZWRIYW5kbGVyKTsKIH0KLQotdm9pZCBVbmxp
bmtlZENvZGVCbG9jazo6YXBwbHlNb2RpZmljYXRpb24oQnl0ZWNvZGVSZXdyaXRlciYgcmV3cml0
ZXIpCi17Ci0gICAgLy8gQmVmb3JlIGFwcGx5aW5nIHRoZSBjaGFuZ2VzLCB3ZSBhZGp1c3QgdGhl
IGp1bXBzIGJhc2VkIG9uIHRoZSBvcmlnaW5hbCBieXRlY29kZSBvZmZzZXQsIHRoZSBvZmZzZXQg
dG8gdGhlIGp1bXAgdGFyZ2V0LCBhbmQKLSAgICAvLyB0aGUgaW5zZXJ0aW9uIGluZm9ybWF0aW9u
LgotCi0gICAgQnl0ZWNvZGVHcmFwaDxVbmxpbmtlZENvZGVCbG9jaz4mIGdyYXBoID0gcmV3cml0
ZXIuZ3JhcGgoKTsKLSAgICBVbmxpbmtlZEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbnNCZWdpbiA9
IGdyYXBoLmluc3RydWN0aW9ucygpLmJlZ2luKCk7Ci0KLSAgICBmb3IgKGludCBieXRlY29kZU9m
ZnNldCA9IDAsIGluc3RydWN0aW9uQ291bnQgPSBncmFwaC5pbnN0cnVjdGlvbnMoKS5zaXplKCk7
IGJ5dGVjb2RlT2Zmc2V0IDwgaW5zdHJ1Y3Rpb25Db3VudDspIHsKLSAgICAgICAgVW5saW5rZWRJ
bnN0cnVjdGlvbiogY3VycmVudCA9IGluc3RydWN0aW9uc0JlZ2luICsgYnl0ZWNvZGVPZmZzZXQ7
Ci0gICAgICAgIE9wY29kZUlEIG9wY29kZUlEID0gY3VycmVudFswXS51Lm9wY29kZTsKLSAgICAg
ICAgZXh0cmFjdFN0b3JlZEp1bXBUYXJnZXRzRm9yQnl0ZWNvZGVPZmZzZXQodGhpcywgdm0oKS0+
aW50ZXJwcmV0ZXIsIGluc3RydWN0aW9uc0JlZ2luLCBieXRlY29kZU9mZnNldCwgWyZdKGludDMy
X3QmIHJlbGF0aXZlT2Zmc2V0KSB7Ci0gICAgICAgICAgICByZWxhdGl2ZU9mZnNldCA9IHJld3Jp
dGVyLmFkanVzdEp1bXBUYXJnZXQoYnl0ZWNvZGVPZmZzZXQsIGJ5dGVjb2RlT2Zmc2V0ICsgcmVs
YXRpdmVPZmZzZXQpOwotICAgICAgICB9KTsKLSAgICAgICAgYnl0ZWNvZGVPZmZzZXQgKz0gb3Bj
b2RlTGVuZ3RoKG9wY29kZUlEKTsKLSAgICB9Ci0KLSAgICAvLyBUaGVuLCBleGNlcHRpb24gaGFu
ZGxlcnMgc2hvdWxkIGJlIGFkanVzdGVkLgotICAgIGlmIChtX3JhcmVEYXRhKSB7Ci0gICAgICAg
IGZvciAoVW5saW5rZWRIYW5kbGVySW5mbyYgaGFuZGxlciA6IG1fcmFyZURhdGEtPm1fZXhjZXB0
aW9uSGFuZGxlcnMpIHsKLSAgICAgICAgICAgIGhhbmRsZXIudGFyZ2V0ID0gcmV3cml0ZXIuYWRq
dXN0QWJzb2x1dGVPZmZzZXQoaGFuZGxlci50YXJnZXQpOwotICAgICAgICAgICAgaGFuZGxlci5z
dGFydCA9IHJld3JpdGVyLmFkanVzdEFic29sdXRlT2Zmc2V0KGhhbmRsZXIuc3RhcnQpOwotICAg
ICAgICAgICAgaGFuZGxlci5lbmQgPSByZXdyaXRlci5hZGp1c3RBYnNvbHV0ZU9mZnNldChoYW5k
bGVyLmVuZCk7Ci0gICAgICAgIH0KLQotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1f
cmFyZURhdGEtPm1fb3BQcm9maWxlQ29udHJvbEZsb3dCeXRlY29kZU9mZnNldHMuc2l6ZSgpOyAr
K2kpCi0gICAgICAgICAgICBtX3JhcmVEYXRhLT5tX29wUHJvZmlsZUNvbnRyb2xGbG93Qnl0ZWNv
ZGVPZmZzZXRzW2ldID0gcmV3cml0ZXIuYWRqdXN0QWJzb2x1dGVPZmZzZXQobV9yYXJlRGF0YS0+
bV9vcFByb2ZpbGVDb250cm9sRmxvd0J5dGVjb2RlT2Zmc2V0c1tpXSk7Ci0KLSAgICAgICAgaWYg
KCFtX3JhcmVEYXRhLT5tX3R5cGVQcm9maWxlckluZm9NYXAuaXNFbXB0eSgpKSB7Ci0gICAgICAg
ICAgICBIYXNoTWFwPHVuc2lnbmVkLCBSYXJlRGF0YTo6VHlwZVByb2ZpbGVyRXhwcmVzc2lvblJh
bmdlPiBhZGp1c3RlZFR5cGVQcm9maWxlckluZm9NYXA7Ci0gICAgICAgICAgICBmb3IgKGF1dG8m
IGVudHJ5IDogbV9yYXJlRGF0YS0+bV90eXBlUHJvZmlsZXJJbmZvTWFwKQotICAgICAgICAgICAg
ICAgIGFkanVzdGVkVHlwZVByb2ZpbGVySW5mb01hcC5zZXQocmV3cml0ZXIuYWRqdXN0QWJzb2x1
dGVPZmZzZXQoZW50cnkua2V5KSwgZW50cnkudmFsdWUpOwotICAgICAgICAgICAgbV9yYXJlRGF0
YS0+bV90eXBlUHJvZmlsZXJJbmZvTWFwLnN3YXAoYWRqdXN0ZWRUeXBlUHJvZmlsZXJJbmZvTWFw
KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9wcm9w
ZXJ0eUFjY2Vzc0luc3RydWN0aW9ucy5zaXplKCk7ICsraSkKLSAgICAgICAgbV9wcm9wZXJ0eUFj
Y2Vzc0luc3RydWN0aW9uc1tpXSA9IHJld3JpdGVyLmFkanVzdEFic29sdXRlT2Zmc2V0KG1fcHJv
cGVydHlBY2Nlc3NJbnN0cnVjdGlvbnNbaV0pOwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBtX2V4cHJlc3Npb25JbmZvLnNpemUoKTsgKytpKQotICAgICAgICBtX2V4cHJlc3Npb25JbmZv
W2ldLmluc3RydWN0aW9uT2Zmc2V0ID0gcmV3cml0ZXIuYWRqdXN0QWJzb2x1dGVPZmZzZXQobV9l
eHByZXNzaW9uSW5mb1tpXS5pbnN0cnVjdGlvbk9mZnNldCk7Ci0KLSAgICAvLyBUaGVuLCBtb2Rp
ZnkgdGhlIHVubGlua2VkIGluc3RydWN0aW9ucy4KLSAgICByZXdyaXRlci5hcHBseU1vZGlmaWNh
dGlvbigpOwotCi0gICAgLy8gQW5kIHJlY29tcHV0ZSB0aGUganVtcCB0YXJnZXQgYmFzZWQgb24g
dGhlIG1vZGlmaWVkIHVubGlua2VkIGluc3RydWN0aW9ucy4KLSAgICBtX2p1bXBUYXJnZXRzLmNs
ZWFyKCk7Ci0gICAgcmVjb21wdXRlUHJlY2lzZUp1bXBUYXJnZXRzKHRoaXMsIGdyYXBoLmluc3Ry
dWN0aW9ucygpLmJlZ2luKCksIGdyYXBoLmluc3RydWN0aW9ucygpLnNpemUoKSwgbV9qdW1wVGFy
Z2V0cyk7Ci19Ci0KLX0KLQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Vu
bGlua2VkRXZhbENvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9VbmxpbmtlZEV2YWxDb2RlQmxvY2suaAkocmV2aXNpb24gMjA4MzA4KQkoZnJv
bSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaDoyMDgz
MDgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRFdmFsQ29kZUJs
b2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2ODYgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTItMjAxNiBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVk
ZSAiQnl0ZWNvZGVDb252ZW50aW9ucy5oIgorI2luY2x1ZGUgIkNvZGVTcGVjaWFsaXphdGlvbktp
bmQuaCIKKyNpbmNsdWRlICJDb2RlVHlwZS5oIgorI2luY2x1ZGUgIkNvbnN0cnVjdEFiaWxpdHku
aCIKKyNpbmNsdWRlICJFeHByZXNzaW9uUmFuZ2VJbmZvLmgiCisjaW5jbHVkZSAiSGFuZGxlcklu
Zm8uaCIKKyNpbmNsdWRlICJJZGVudGlmaWVyLmgiCisjaW5jbHVkZSAiSlNDZWxsLmgiCisjaW5j
bHVkZSAiSlNTdHJpbmcuaCIKKyNpbmNsdWRlICJQYXJzZXJNb2Rlcy5oIgorI2luY2x1ZGUgIlJl
Z0V4cC5oIgorI2luY2x1ZGUgIlNwZWNpYWxQb2ludGVyLmgiCisjaW5jbHVkZSAiVW5saW5rZWRG
dW5jdGlvbkV4ZWN1dGFibGUuaCIKKyNpbmNsdWRlICJWYXJpYWJsZUVudmlyb25tZW50LmgiCisj
aW5jbHVkZSAiVmlydHVhbFJlZ2lzdGVyLmgiCisjaW5jbHVkZSA8d3RmL1RyaVN0YXRlLmg+Cisj
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgQnl0ZWNv
ZGVSZXdyaXRlcjsKK2NsYXNzIERlYnVnZ2VyOworY2xhc3MgRnVuY3Rpb25FeGVjdXRhYmxlOwor
Y2xhc3MgUGFyc2VyRXJyb3I7CitjbGFzcyBTY3JpcHRFeGVjdXRhYmxlOworY2xhc3MgU291cmNl
Q29kZTsKK2NsYXNzIFNvdXJjZVByb3ZpZGVyOworY2xhc3MgVW5saW5rZWRDb2RlQmxvY2s7Citj
bGFzcyBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrOworY2xhc3MgVW5saW5rZWRGdW5jdGlvbkV4
ZWN1dGFibGU7CitjbGFzcyBVbmxpbmtlZEluc3RydWN0aW9uU3RyZWFtOworc3RydWN0IEV4ZWN1
dGFibGVJbmZvOworCit0eXBlZGVmIHVuc2lnbmVkIFVubGlua2VkVmFsdWVQcm9maWxlOwordHlw
ZWRlZiB1bnNpZ25lZCBVbmxpbmtlZEFycmF5UHJvZmlsZTsKK3R5cGVkZWYgdW5zaWduZWQgVW5s
aW5rZWRBcnJheUFsbG9jYXRpb25Qcm9maWxlOwordHlwZWRlZiB1bnNpZ25lZCBVbmxpbmtlZE9i
amVjdEFsbG9jYXRpb25Qcm9maWxlOwordHlwZWRlZiB1bnNpZ25lZCBVbmxpbmtlZExMSW50Q2Fs
bExpbmtJbmZvOworCitzdHJ1Y3QgVW5saW5rZWRTdHJpbmdKdW1wVGFibGUgeworICAgIHN0cnVj
dCBPZmZzZXRMb2NhdGlvbiB7CisgICAgICAgIGludDMyX3QgYnJhbmNoT2Zmc2V0OworICAgIH07
CisKKyAgICB0eXBlZGVmIEhhc2hNYXA8UmVmUHRyPFN0cmluZ0ltcGw+LCBPZmZzZXRMb2NhdGlv
bj4gU3RyaW5nT2Zmc2V0VGFibGU7CisgICAgU3RyaW5nT2Zmc2V0VGFibGUgb2Zmc2V0VGFibGU7
CisKKyAgICBpbmxpbmUgaW50MzJfdCBvZmZzZXRGb3JWYWx1ZShTdHJpbmdJbXBsKiB2YWx1ZSwg
aW50MzJfdCBkZWZhdWx0T2Zmc2V0KQorICAgIHsKKyAgICAgICAgU3RyaW5nT2Zmc2V0VGFibGU6
OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG9mZnNldFRhYmxlLmVuZCgpOworICAgICAgICBTdHJpbmdP
ZmZzZXRUYWJsZTo6Y29uc3RfaXRlcmF0b3IgbG9jID0gb2Zmc2V0VGFibGUuZmluZCh2YWx1ZSk7
CisgICAgICAgIGlmIChsb2MgPT0gZW5kKQorICAgICAgICAgICAgcmV0dXJuIGRlZmF1bHRPZmZz
ZXQ7CisgICAgICAgIHJldHVybiBsb2MtPnZhbHVlLmJyYW5jaE9mZnNldDsKKyAgICB9CisKK307
CisKK3N0cnVjdCBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSB7CisgICAgVmVjdG9yPGludDMyX3Q+
IGJyYW5jaE9mZnNldHM7CisgICAgaW50MzJfdCBtaW47CisKKyAgICBpbnQzMl90IG9mZnNldEZv
clZhbHVlKGludDMyX3QgdmFsdWUsIGludDMyX3QgZGVmYXVsdE9mZnNldCk7CisgICAgdm9pZCBh
ZGQoaW50MzJfdCBrZXksIGludDMyX3Qgb2Zmc2V0KQorICAgIHsKKyAgICAgICAgaWYgKCFicmFu
Y2hPZmZzZXRzW2tleV0pCisgICAgICAgICAgICBicmFuY2hPZmZzZXRzW2tleV0gPSBvZmZzZXQ7
CisgICAgfQorfTsKKworc3RydWN0IFVubGlua2VkSW5zdHJ1Y3Rpb24geworICAgIFVubGlua2Vk
SW5zdHJ1Y3Rpb24oKSB7IHUub3BlcmFuZCA9IDA7IH0KKyAgICBVbmxpbmtlZEluc3RydWN0aW9u
KE9wY29kZUlEIG9wY29kZSkgeyB1Lm9wY29kZSA9IG9wY29kZTsgfQorICAgIFVubGlua2VkSW5z
dHJ1Y3Rpb24oaW50IG9wZXJhbmQpIHsgdS5vcGVyYW5kID0gb3BlcmFuZDsgfQorICAgIHVuaW9u
IHsKKyAgICAgICAgT3Bjb2RlSUQgb3Bjb2RlOworICAgICAgICBpbnQzMl90IG9wZXJhbmQ7Cisg
ICAgICAgIHVuc2lnbmVkIGluZGV4OworICAgIH0gdTsKK307CisKK2NsYXNzIFVubGlua2VkQ29k
ZUJsb2NrIDogcHVibGljIEpTQ2VsbCB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBKU0NlbGwgQmFz
ZTsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1
Y3R1cmVGbGFnczsKKworICAgIHN0YXRpYyBjb25zdCBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0
cnVlOworCisgICAgZW51bSB7IENhbGxGdW5jdGlvbiwgQXBwbHlGdW5jdGlvbiB9OworCisgICAg
dHlwZWRlZiBVbmxpbmtlZEluc3RydWN0aW9uIEluc3RydWN0aW9uOworICAgIHR5cGVkZWYgVmVj
dG9yPFVubGlua2VkSW5zdHJ1Y3Rpb24sIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93PiBVbnBhY2tl
ZEluc3RydWN0aW9uczsKKworICAgIGJvb2wgaXNDb25zdHJ1Y3RvcigpIGNvbnN0IHsgcmV0dXJu
IG1faXNDb25zdHJ1Y3RvcjsgfQorICAgIGJvb2wgaXNTdHJpY3RNb2RlKCkgY29uc3QgeyByZXR1
cm4gbV9pc1N0cmljdE1vZGU7IH0KKyAgICBib29sIHVzZXNFdmFsKCkgY29uc3QgeyByZXR1cm4g
bV91c2VzRXZhbDsgfQorICAgIFNvdXJjZVBhcnNlTW9kZSBwYXJzZU1vZGUoKSBjb25zdCB7IHJl
dHVybiBtX3BhcnNlTW9kZTsgfQorICAgIGJvb2wgaXNBcnJvd0Z1bmN0aW9uKCkgY29uc3QgeyBy
ZXR1cm4gaXNBcnJvd0Z1bmN0aW9uUGFyc2VNb2RlKHBhcnNlTW9kZSgpKTsgfQorICAgIERlcml2
ZWRDb250ZXh0VHlwZSBkZXJpdmVkQ29udGV4dFR5cGUoKSBjb25zdCB7IHJldHVybiBzdGF0aWNf
Y2FzdDxEZXJpdmVkQ29udGV4dFR5cGU+KG1fZGVyaXZlZENvbnRleHRUeXBlKTsgfQorICAgIEV2
YWxDb250ZXh0VHlwZSBldmFsQ29udGV4dFR5cGUoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2Fz
dDxFdmFsQ29udGV4dFR5cGU+KG1fZXZhbENvbnRleHRUeXBlKTsgfQorICAgIGJvb2wgaXNBcnJv
d0Z1bmN0aW9uQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1faXNBcnJvd0Z1bmN0aW9uQ29udGV4
dDsgfQorICAgIGJvb2wgaXNDbGFzc0NvbnRleHQoKSBjb25zdCB7IHJldHVybiBtX2lzQ2xhc3ND
b250ZXh0OyB9CisKKyAgICB2b2lkIGFkZEV4cHJlc3Npb25JbmZvKHVuc2lnbmVkIGluc3RydWN0
aW9uT2Zmc2V0LCBpbnQgZGl2b3QsCisgICAgICAgIGludCBzdGFydE9mZnNldCwgaW50IGVuZE9m
ZnNldCwgdW5zaWduZWQgbGluZSwgdW5zaWduZWQgY29sdW1uKTsKKworICAgIHZvaWQgYWRkVHlw
ZVByb2ZpbGVyRXhwcmVzc2lvbkluZm8odW5zaWduZWQgaW5zdHJ1Y3Rpb25PZmZzZXQsIHVuc2ln
bmVkIHN0YXJ0RGl2b3QsIHVuc2lnbmVkIGVuZERpdm90KTsKKworICAgIGJvb2wgaGFzRXhwcmVz
c2lvbkluZm8oKSB7IHJldHVybiBtX2V4cHJlc3Npb25JbmZvLnNpemUoKTsgfQorICAgIGNvbnN0
IFZlY3RvcjxFeHByZXNzaW9uUmFuZ2VJbmZvPiYgZXhwcmVzc2lvbkluZm8oKSB7IHJldHVybiBt
X2V4cHJlc3Npb25JbmZvOyB9CisKKyAgICAvLyBTcGVjaWFsIHJlZ2lzdGVycworICAgIHZvaWQg
c2V0VGhpc1JlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciB0aGlzUmVnaXN0ZXIpIHsgbV90aGlzUmVn
aXN0ZXIgPSB0aGlzUmVnaXN0ZXI7IH0KKyAgICB2b2lkIHNldFNjb3BlUmVnaXN0ZXIoVmlydHVh
bFJlZ2lzdGVyIHNjb3BlUmVnaXN0ZXIpIHsgbV9zY29wZVJlZ2lzdGVyID0gc2NvcGVSZWdpc3Rl
cjsgfQorCisgICAgYm9vbCB1c2VzR2xvYmFsT2JqZWN0KCkgY29uc3QgeyByZXR1cm4gbV9nbG9i
YWxPYmplY3RSZWdpc3Rlci5pc1ZhbGlkKCk7IH0KKyAgICB2b2lkIHNldEdsb2JhbE9iamVjdFJl
Z2lzdGVyKFZpcnR1YWxSZWdpc3RlciBnbG9iYWxPYmplY3RSZWdpc3RlcikgeyBtX2dsb2JhbE9i
amVjdFJlZ2lzdGVyID0gZ2xvYmFsT2JqZWN0UmVnaXN0ZXI7IH0KKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgZ2xvYmFsT2JqZWN0UmVnaXN0ZXIoKSBjb25zdCB7IHJldHVybiBtX2dsb2JhbE9iamVjdFJl
Z2lzdGVyOyB9CisKKyAgICAvLyBQYXJhbWV0ZXIgaW5mb3JtYXRpb24KKyAgICB2b2lkIHNldE51
bVBhcmFtZXRlcnMoaW50IG5ld1ZhbHVlKSB7IG1fbnVtUGFyYW1ldGVycyA9IG5ld1ZhbHVlOyB9
CisgICAgdm9pZCBhZGRQYXJhbWV0ZXIoKSB7IG1fbnVtUGFyYW1ldGVycysrOyB9CisgICAgdW5z
aWduZWQgbnVtUGFyYW1ldGVycygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtUGFyYW1ldGVyczsgfQor
CisgICAgdW5zaWduZWQgYWRkUmVnRXhwKFJlZ0V4cCogcikKKyAgICB7CisgICAgICAgIGNyZWF0
ZVJhcmVEYXRhSWZOZWNlc3NhcnkoKTsKKyAgICAgICAgdW5zaWduZWQgc2l6ZSA9IG1fcmFyZURh
dGEtPm1fcmVnZXhwcy5zaXplKCk7CisgICAgICAgIG1fcmFyZURhdGEtPm1fcmVnZXhwcy5hcHBl
bmQoV3JpdGVCYXJyaWVyPFJlZ0V4cD4oKnZtKCksIHRoaXMsIHIpKTsKKyAgICAgICAgcmV0dXJu
IHNpemU7CisgICAgfQorICAgIHVuc2lnbmVkIG51bWJlck9mUmVnRXhwcygpIGNvbnN0CisgICAg
eworICAgICAgICBpZiAoIW1fcmFyZURhdGEpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAg
ICAgcmV0dXJuIG1fcmFyZURhdGEtPm1fcmVnZXhwcy5zaXplKCk7CisgICAgfQorICAgIFJlZ0V4
cCogcmVnZXhwKGludCBpbmRleCkgY29uc3QgeyBBU1NFUlQobV9yYXJlRGF0YSk7IHJldHVybiBt
X3JhcmVEYXRhLT5tX3JlZ2V4cHNbaW5kZXhdLmdldCgpOyB9CisKKyAgICAvLyBDb25zdGFudCBQ
b29scworCisgICAgc2l6ZV90IG51bWJlck9mSWRlbnRpZmllcnMoKSBjb25zdCB7IHJldHVybiBt
X2lkZW50aWZpZXJzLnNpemUoKTsgfQorICAgIHZvaWQgYWRkSWRlbnRpZmllcihjb25zdCBJZGVu
dGlmaWVyJiBpKSB7IHJldHVybiBtX2lkZW50aWZpZXJzLmFwcGVuZChpKTsgfQorICAgIGNvbnN0
IElkZW50aWZpZXImIGlkZW50aWZpZXIoaW50IGluZGV4KSBjb25zdCB7IHJldHVybiBtX2lkZW50
aWZpZXJzW2luZGV4XTsgfQorICAgIGNvbnN0IFZlY3RvcjxJZGVudGlmaWVyPiYgaWRlbnRpZmll
cnMoKSBjb25zdCB7IHJldHVybiBtX2lkZW50aWZpZXJzOyB9CisKKyAgICB1bnNpZ25lZCBhZGRD
b25zdGFudChKU1ZhbHVlIHYsIFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbiBzb3VyY2VDb2RlUmVw
cmVzZW50YXRpb24gPSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246Ok90aGVyKQorICAgIHsKKyAg
ICAgICAgdW5zaWduZWQgcmVzdWx0ID0gbV9jb25zdGFudFJlZ2lzdGVycy5zaXplKCk7CisgICAg
ICAgIG1fY29uc3RhbnRSZWdpc3RlcnMuYXBwZW5kKFdyaXRlQmFycmllcjxVbmtub3duPigpKTsK
KyAgICAgICAgbV9jb25zdGFudFJlZ2lzdGVycy5sYXN0KCkuc2V0KCp2bSgpLCB0aGlzLCB2KTsK
KyAgICAgICAgbV9jb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24uYXBwZW5kKHNvdXJj
ZUNvZGVSZXByZXNlbnRhdGlvbik7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAg
IHVuc2lnbmVkIGFkZENvbnN0YW50KExpbmtUaW1lQ29uc3RhbnQgdHlwZSkKKyAgICB7CisgICAg
ICAgIHVuc2lnbmVkIHJlc3VsdCA9IG1fY29uc3RhbnRSZWdpc3RlcnMuc2l6ZSgpOworICAgICAg
ICBBU1NFUlQocmVzdWx0KTsKKyAgICAgICAgdW5zaWduZWQgaW5kZXggPSBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4odHlwZSk7CisgICAgICAgIEFTU0VSVChpbmRleCA8IExpbmtUaW1lQ29uc3RhbnRD
b3VudCk7CisgICAgICAgIG1fbGlua1RpbWVDb25zdGFudHNbaW5kZXhdID0gcmVzdWx0OworICAg
ICAgICBtX2NvbnN0YW50UmVnaXN0ZXJzLmFwcGVuZChXcml0ZUJhcnJpZXI8VW5rbm93bj4oKSk7
CisgICAgICAgIG1fY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uLmFwcGVuZChTb3Vy
Y2VDb2RlUmVwcmVzZW50YXRpb246Ok90aGVyKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAg
ICB9CisgICAgdW5zaWduZWQgcmVnaXN0ZXJJbmRleEZvckxpbmtUaW1lQ29uc3RhbnQoTGlua1Rp
bWVDb25zdGFudCB0eXBlKQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgaW5kZXggPSBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4odHlwZSk7CisgICAgICAgIEFTU0VSVChpbmRleCA8IExpbmtUaW1lQ29u
c3RhbnRDb3VudCk7CisgICAgICAgIHJldHVybiBtX2xpbmtUaW1lQ29uc3RhbnRzW2luZGV4XTsK
KyAgICB9CisgICAgY29uc3QgVmVjdG9yPFdyaXRlQmFycmllcjxVbmtub3duPj4mIGNvbnN0YW50
UmVnaXN0ZXJzKCkgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyczsgfQorICAgIGNvbnN0IFdy
aXRlQmFycmllcjxVbmtub3duPiYgY29uc3RhbnRSZWdpc3RlcihpbnQgaW5kZXgpIGNvbnN0IHsg
cmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnNbaW5kZXggLSBGaXJzdENvbnN0YW50UmVnaXN0ZXJJ
bmRleF07IH0KKyAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaXNDb25zdGFudFJlZ2lzdGVySW5kZXgo
aW50IGluZGV4KSBjb25zdCB7IHJldHVybiBpbmRleCA+PSBGaXJzdENvbnN0YW50UmVnaXN0ZXJJ
bmRleDsgfQorICAgIGNvbnN0IFZlY3RvcjxTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24+JiBjb25z
dGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oKSB7IHJldHVybiBtX2NvbnN0YW50c1NvdXJj
ZUNvZGVSZXByZXNlbnRhdGlvbjsgfQorCisgICAgLy8gSnVtcHMKKyAgICBzaXplX3QgbnVtYmVy
T2ZKdW1wVGFyZ2V0cygpIGNvbnN0IHsgcmV0dXJuIG1fanVtcFRhcmdldHMuc2l6ZSgpOyB9Cisg
ICAgdm9pZCBhZGRKdW1wVGFyZ2V0KHVuc2lnbmVkIGp1bXBUYXJnZXQpIHsgbV9qdW1wVGFyZ2V0
cy5hcHBlbmQoanVtcFRhcmdldCk7IH0KKyAgICB1bnNpZ25lZCBqdW1wVGFyZ2V0KGludCBpbmRl
eCkgY29uc3QgeyByZXR1cm4gbV9qdW1wVGFyZ2V0c1tpbmRleF07IH0KKyAgICB1bnNpZ25lZCBs
YXN0SnVtcFRhcmdldCgpIGNvbnN0IHsgcmV0dXJuIG1fanVtcFRhcmdldHMubGFzdCgpOyB9CisK
KyAgICBVbmxpbmtlZEhhbmRsZXJJbmZvKiBoYW5kbGVyRm9yQnl0ZWNvZGVPZmZzZXQodW5zaWdu
ZWQgYnl0ZWNvZGVPZmZzZXQsIFJlcXVpcmVkSGFuZGxlciA9IFJlcXVpcmVkSGFuZGxlcjo6QW55
SGFuZGxlcik7CisgICAgVW5saW5rZWRIYW5kbGVySW5mbyogaGFuZGxlckZvckluZGV4KHVuc2ln
bmVkLCBSZXF1aXJlZEhhbmRsZXIgPSBSZXF1aXJlZEhhbmRsZXI6OkFueUhhbmRsZXIpOworCisg
ICAgYm9vbCBpc0J1aWx0aW5GdW5jdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1faXNCdWlsdGluRnVu
Y3Rpb247IH0KKworICAgIENvbnN0cnVjdG9yS2luZCBjb25zdHJ1Y3RvcktpbmQoKSBjb25zdCB7
IHJldHVybiBzdGF0aWNfY2FzdDxDb25zdHJ1Y3RvcktpbmQ+KG1fY29uc3RydWN0b3JLaW5kKTsg
fQorICAgIFN1cGVyQmluZGluZyBzdXBlckJpbmRpbmcoKSBjb25zdCB7IHJldHVybiBzdGF0aWNf
Y2FzdDxTdXBlckJpbmRpbmc+KG1fc3VwZXJCaW5kaW5nKTsgfQorICAgIEpTUGFyc2VyU2NyaXB0
TW9kZSBzY3JpcHRNb2RlKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8SlNQYXJzZXJTY3Jp
cHRNb2RlPihtX3NjcmlwdE1vZGUpOyB9CisKKyAgICB2b2lkIHNocmlua1RvRml0KCkKKyAgICB7
CisgICAgICAgIG1fanVtcFRhcmdldHMuc2hyaW5rVG9GaXQoKTsKKyAgICAgICAgbV9pZGVudGlm
aWVycy5zaHJpbmtUb0ZpdCgpOworICAgICAgICBtX2NvbnN0YW50UmVnaXN0ZXJzLnNocmlua1Rv
Rml0KCk7CisgICAgICAgIG1fY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uLnNocmlu
a1RvRml0KCk7CisgICAgICAgIG1fZnVuY3Rpb25EZWNscy5zaHJpbmtUb0ZpdCgpOworICAgICAg
ICBtX2Z1bmN0aW9uRXhwcnMuc2hyaW5rVG9GaXQoKTsKKyAgICAgICAgbV9wcm9wZXJ0eUFjY2Vz
c0luc3RydWN0aW9ucy5zaHJpbmtUb0ZpdCgpOworICAgICAgICBtX2V4cHJlc3Npb25JbmZvLnNo
cmlua1RvRml0KCk7CisKKyAgICAgICAgaWYgKG1fcmFyZURhdGEpIHsKKyAgICAgICAgICAgIG1f
cmFyZURhdGEtPm1fZXhjZXB0aW9uSGFuZGxlcnMuc2hyaW5rVG9GaXQoKTsKKyAgICAgICAgICAg
IG1fcmFyZURhdGEtPm1fcmVnZXhwcy5zaHJpbmtUb0ZpdCgpOworICAgICAgICAgICAgbV9yYXJl
RGF0YS0+bV9jb25zdGFudEJ1ZmZlcnMuc2hyaW5rVG9GaXQoKTsKKyAgICAgICAgICAgIG1fcmFy
ZURhdGEtPm1fc3dpdGNoSnVtcFRhYmxlcy5zaHJpbmtUb0ZpdCgpOworICAgICAgICAgICAgbV9y
YXJlRGF0YS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzLnNocmlua1RvRml0KCk7CisgICAgICAg
ICAgICBtX3JhcmVEYXRhLT5tX2V4cHJlc3Npb25JbmZvRmF0UG9zaXRpb25zLnNocmlua1RvRml0
KCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIHNldEluc3RydWN0aW9ucyhzdGQ6OnVu
aXF1ZV9wdHI8VW5saW5rZWRJbnN0cnVjdGlvblN0cmVhbT4pOworICAgIGNvbnN0IFVubGlua2Vk
SW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3RydWN0aW9ucygpIGNvbnN0OworCisgICAgaW50IG51bUNh
bGxlZUxvY2FscygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtQ2FsbGVlTG9jYWxzOyB9CisKKyAgICBp
bnQgbV9udW1WYXJzOworICAgIGludCBtX251bUNhcHR1cmVkVmFyczsKKyAgICBpbnQgbV9udW1D
YWxsZWVMb2NhbHM7CisKKyAgICAvLyBKdW1wIFRhYmxlcworCisgICAgc2l6ZV90IG51bWJlck9m
U3dpdGNoSnVtcFRhYmxlcygpIGNvbnN0IHsgcmV0dXJuIG1fcmFyZURhdGEgPyBtX3JhcmVEYXRh
LT5tX3N3aXRjaEp1bXBUYWJsZXMuc2l6ZSgpIDogMDsgfQorICAgIFVubGlua2VkU2ltcGxlSnVt
cFRhYmxlJiBhZGRTd2l0Y2hKdW1wVGFibGUoKSB7IGNyZWF0ZVJhcmVEYXRhSWZOZWNlc3Nhcnko
KTsgbV9yYXJlRGF0YS0+bV9zd2l0Y2hKdW1wVGFibGVzLmFwcGVuZChVbmxpbmtlZFNpbXBsZUp1
bXBUYWJsZSgpKTsgcmV0dXJuIG1fcmFyZURhdGEtPm1fc3dpdGNoSnVtcFRhYmxlcy5sYXN0KCk7
IH0KKyAgICBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYgc3dpdGNoSnVtcFRhYmxlKGludCB0YWJs
ZUluZGV4KSB7IEFTU0VSVChtX3JhcmVEYXRhKTsgcmV0dXJuIG1fcmFyZURhdGEtPm1fc3dpdGNo
SnVtcFRhYmxlc1t0YWJsZUluZGV4XTsgfQorCisgICAgc2l6ZV90IG51bWJlck9mU3RyaW5nU3dp
dGNoSnVtcFRhYmxlcygpIGNvbnN0IHsgcmV0dXJuIG1fcmFyZURhdGEgPyBtX3JhcmVEYXRhLT5t
X3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMuc2l6ZSgpIDogMDsgfQorICAgIFVubGlua2VkU3RyaW5n
SnVtcFRhYmxlJiBhZGRTdHJpbmdTd2l0Y2hKdW1wVGFibGUoKSB7IGNyZWF0ZVJhcmVEYXRhSWZO
ZWNlc3NhcnkoKTsgbV9yYXJlRGF0YS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzLmFwcGVuZChV
bmxpbmtlZFN0cmluZ0p1bXBUYWJsZSgpKTsgcmV0dXJuIG1fcmFyZURhdGEtPm1fc3RyaW5nU3dp
dGNoSnVtcFRhYmxlcy5sYXN0KCk7IH0KKyAgICBVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZSYgc3Ry
aW5nU3dpdGNoSnVtcFRhYmxlKGludCB0YWJsZUluZGV4KSB7IEFTU0VSVChtX3JhcmVEYXRhKTsg
cmV0dXJuIG1fcmFyZURhdGEtPm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsg
fQorCisgICAgdW5zaWduZWQgYWRkRnVuY3Rpb25EZWNsKFVubGlua2VkRnVuY3Rpb25FeGVjdXRh
YmxlKiBuKQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgc2l6ZSA9IG1fZnVuY3Rpb25EZWNscy5z
aXplKCk7CisgICAgICAgIG1fZnVuY3Rpb25EZWNscy5hcHBlbmQoV3JpdGVCYXJyaWVyPFVubGlu
a2VkRnVuY3Rpb25FeGVjdXRhYmxlPigpKTsKKyAgICAgICAgbV9mdW5jdGlvbkRlY2xzLmxhc3Qo
KS5zZXQoKnZtKCksIHRoaXMsIG4pOworICAgICAgICByZXR1cm4gc2l6ZTsKKyAgICB9CisgICAg
VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uRGVjbChpbnQgaW5kZXgpIHsgcmV0
dXJuIG1fZnVuY3Rpb25EZWNsc1tpbmRleF0uZ2V0KCk7IH0KKyAgICBzaXplX3QgbnVtYmVyT2ZG
dW5jdGlvbkRlY2xzKCkgeyByZXR1cm4gbV9mdW5jdGlvbkRlY2xzLnNpemUoKTsgfQorICAgIHVu
c2lnbmVkIGFkZEZ1bmN0aW9uRXhwcihVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogbikKKyAg
ICB7CisgICAgICAgIHVuc2lnbmVkIHNpemUgPSBtX2Z1bmN0aW9uRXhwcnMuc2l6ZSgpOworICAg
ICAgICBtX2Z1bmN0aW9uRXhwcnMuYXBwZW5kKFdyaXRlQmFycmllcjxVbmxpbmtlZEZ1bmN0aW9u
RXhlY3V0YWJsZT4oKSk7CisgICAgICAgIG1fZnVuY3Rpb25FeHBycy5sYXN0KCkuc2V0KCp2bSgp
LCB0aGlzLCBuKTsKKyAgICAgICAgcmV0dXJuIHNpemU7CisgICAgfQorICAgIFVubGlua2VkRnVu
Y3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbkV4cHIoaW50IGluZGV4KSB7IHJldHVybiBtX2Z1bmN0
aW9uRXhwcnNbaW5kZXhdLmdldCgpOyB9CisgICAgc2l6ZV90IG51bWJlck9mRnVuY3Rpb25FeHBy
cygpIHsgcmV0dXJuIG1fZnVuY3Rpb25FeHBycy5zaXplKCk7IH0KKworICAgIC8vIEV4Y2VwdGlv
biBoYW5kbGluZyBzdXBwb3J0CisgICAgc2l6ZV90IG51bWJlck9mRXhjZXB0aW9uSGFuZGxlcnMo
KSBjb25zdCB7IHJldHVybiBtX3JhcmVEYXRhID8gbV9yYXJlRGF0YS0+bV9leGNlcHRpb25IYW5k
bGVycy5zaXplKCkgOiAwOyB9CisgICAgdm9pZCBhZGRFeGNlcHRpb25IYW5kbGVyKGNvbnN0IFVu
bGlua2VkSGFuZGxlckluZm8mIGhhbmRsZXIpIHsgY3JlYXRlUmFyZURhdGFJZk5lY2Vzc2FyeSgp
OyByZXR1cm4gbV9yYXJlRGF0YS0+bV9leGNlcHRpb25IYW5kbGVycy5hcHBlbmQoaGFuZGxlcik7
IH0KKyAgICBVbmxpbmtlZEhhbmRsZXJJbmZvJiBleGNlcHRpb25IYW5kbGVyKGludCBpbmRleCkg
eyBBU1NFUlQobV9yYXJlRGF0YSk7IHJldHVybiBtX3JhcmVEYXRhLT5tX2V4Y2VwdGlvbkhhbmRs
ZXJzW2luZGV4XTsgfQorCisgICAgVW5saW5rZWRBcnJheVByb2ZpbGUgYWRkQXJyYXlQcm9maWxl
KCkgeyByZXR1cm4gbV9hcnJheVByb2ZpbGVDb3VudCsrOyB9CisgICAgdW5zaWduZWQgbnVtYmVy
T2ZBcnJheVByb2ZpbGVzKCkgeyByZXR1cm4gbV9hcnJheVByb2ZpbGVDb3VudDsgfQorICAgIFVu
bGlua2VkQXJyYXlBbGxvY2F0aW9uUHJvZmlsZSBhZGRBcnJheUFsbG9jYXRpb25Qcm9maWxlKCkg
eyByZXR1cm4gbV9hcnJheUFsbG9jYXRpb25Qcm9maWxlQ291bnQrKzsgfQorICAgIHVuc2lnbmVk
IG51bWJlck9mQXJyYXlBbGxvY2F0aW9uUHJvZmlsZXMoKSB7IHJldHVybiBtX2FycmF5QWxsb2Nh
dGlvblByb2ZpbGVDb3VudDsgfQorICAgIFVubGlua2VkT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUg
YWRkT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUoKSB7IHJldHVybiBtX29iamVjdEFsbG9jYXRpb25Q
cm9maWxlQ291bnQrKzsgfQorICAgIHVuc2lnbmVkIG51bWJlck9mT2JqZWN0QWxsb2NhdGlvblBy
b2ZpbGVzKCkgeyByZXR1cm4gbV9vYmplY3RBbGxvY2F0aW9uUHJvZmlsZUNvdW50OyB9CisgICAg
VW5saW5rZWRWYWx1ZVByb2ZpbGUgYWRkVmFsdWVQcm9maWxlKCkgeyByZXR1cm4gbV92YWx1ZVBy
b2ZpbGVDb3VudCsrOyB9CisgICAgdW5zaWduZWQgbnVtYmVyT2ZWYWx1ZVByb2ZpbGVzKCkgeyBy
ZXR1cm4gbV92YWx1ZVByb2ZpbGVDb3VudDsgfQorCisgICAgVW5saW5rZWRMTEludENhbGxMaW5r
SW5mbyBhZGRMTEludENhbGxMaW5rSW5mbygpIHsgcmV0dXJuIG1fbGxpbnRDYWxsTGlua0luZm9D
b3VudCsrOyB9CisgICAgdW5zaWduZWQgbnVtYmVyT2ZMTGludENhbGxMaW5rSW5mb3MoKSB7IHJl
dHVybiBtX2xsaW50Q2FsbExpbmtJbmZvQ291bnQ7IH0KKworICAgIENvZGVUeXBlIGNvZGVUeXBl
KCkgY29uc3QgeyByZXR1cm4gbV9jb2RlVHlwZTsgfQorCisgICAgVmlydHVhbFJlZ2lzdGVyIHRo
aXNSZWdpc3RlcigpIGNvbnN0IHsgcmV0dXJuIG1fdGhpc1JlZ2lzdGVyOyB9CisgICAgVmlydHVh
bFJlZ2lzdGVyIHNjb3BlUmVnaXN0ZXIoKSBjb25zdCB7IHJldHVybiBtX3Njb3BlUmVnaXN0ZXI7
IH0KKworICAgIHZvaWQgYWRkUHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbih1bnNpZ25lZCBwcm9w
ZXJ0eUFjY2Vzc0luc3RydWN0aW9uKQorICAgIHsKKyAgICAgICAgbV9wcm9wZXJ0eUFjY2Vzc0lu
c3RydWN0aW9ucy5hcHBlbmQocHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbik7CisgICAgfQorCisg
ICAgc2l6ZV90IG51bWJlck9mUHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbnMoKSBjb25zdCB7IHJl
dHVybiBtX3Byb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25zLnNpemUoKTsgfQorICAgIGNvbnN0IFZl
Y3Rvcjx1bnNpZ25lZD4mIHByb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25zKCkgY29uc3QgeyByZXR1
cm4gbV9wcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uczsgfQorCisgICAgdHlwZWRlZiBWZWN0b3I8
SlNWYWx1ZT4gQ29uc3RhbnRCdWZmZXI7CisKKyAgICBzaXplX3QgY29uc3RhbnRCdWZmZXJDb3Vu
dCgpIHsgQVNTRVJUKG1fcmFyZURhdGEpOyByZXR1cm4gbV9yYXJlRGF0YS0+bV9jb25zdGFudEJ1
ZmZlcnMuc2l6ZSgpOyB9CisgICAgdW5zaWduZWQgYWRkQ29uc3RhbnRCdWZmZXIodW5zaWduZWQg
bGVuZ3RoKQorICAgIHsKKyAgICAgICAgY3JlYXRlUmFyZURhdGFJZk5lY2Vzc2FyeSgpOworICAg
ICAgICB1bnNpZ25lZCBzaXplID0gbV9yYXJlRGF0YS0+bV9jb25zdGFudEJ1ZmZlcnMuc2l6ZSgp
OworICAgICAgICBtX3JhcmVEYXRhLT5tX2NvbnN0YW50QnVmZmVycy5hcHBlbmQoVmVjdG9yPEpT
VmFsdWU+KGxlbmd0aCkpOworICAgICAgICByZXR1cm4gc2l6ZTsKKyAgICB9CisKKyAgICBjb25z
dCBDb25zdGFudEJ1ZmZlciYgY29uc3RhbnRCdWZmZXIodW5zaWduZWQgaW5kZXgpIGNvbnN0Cisg
ICAgeworICAgICAgICBBU1NFUlQobV9yYXJlRGF0YSk7CisgICAgICAgIHJldHVybiBtX3JhcmVE
YXRhLT5tX2NvbnN0YW50QnVmZmVyc1tpbmRleF07CisgICAgfQorCisgICAgQ29uc3RhbnRCdWZm
ZXImIGNvbnN0YW50QnVmZmVyKHVuc2lnbmVkIGluZGV4KQorICAgIHsKKyAgICAgICAgQVNTRVJU
KG1fcmFyZURhdGEpOworICAgICAgICByZXR1cm4gbV9yYXJlRGF0YS0+bV9jb25zdGFudEJ1ZmZl
cnNbaW5kZXhdOworICAgIH0KKworICAgIGJvb2wgaGFzUmFyZURhdGEoKSBjb25zdCB7IHJldHVy
biBtX3JhcmVEYXRhLmdldCgpOyB9CisKKyAgICBpbnQgbGluZU51bWJlckZvckJ5dGVjb2RlT2Zm
c2V0KHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KTsKKworICAgIHZvaWQgZXhwcmVzc2lvblJhbmdl
Rm9yQnl0ZWNvZGVPZmZzZXQodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQsIGludCYgZGl2b3QsCisg
ICAgICAgIGludCYgc3RhcnRPZmZzZXQsIGludCYgZW5kT2Zmc2V0LCB1bnNpZ25lZCYgbGluZSwg
dW5zaWduZWQmIGNvbHVtbikgY29uc3Q7CisKKyAgICBib29sIHR5cGVQcm9maWxlckV4cHJlc3Np
b25JbmZvRm9yQnl0ZWNvZGVPZmZzZXQodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQsIHVuc2lnbmVk
JiBzdGFydERpdm90LCB1bnNpZ25lZCYgZW5kRGl2b3QpOworCisgICAgdm9pZCByZWNvcmRQYXJz
ZShDb2RlRmVhdHVyZXMgZmVhdHVyZXMsIGJvb2wgaGFzQ2FwdHVyZWRWYXJpYWJsZXMsIHVuc2ln
bmVkIGZpcnN0TGluZSwgdW5zaWduZWQgbGluZUNvdW50LCB1bnNpZ25lZCBlbmRDb2x1bW4pCisg
ICAgeworICAgICAgICBtX2ZlYXR1cmVzID0gZmVhdHVyZXM7CisgICAgICAgIG1faGFzQ2FwdHVy
ZWRWYXJpYWJsZXMgPSBoYXNDYXB0dXJlZFZhcmlhYmxlczsKKyAgICAgICAgbV9maXJzdExpbmUg
PSBmaXJzdExpbmU7CisgICAgICAgIG1fbGluZUNvdW50ID0gbGluZUNvdW50OworICAgICAgICAv
LyBGb3IgdGhlIFVubGlua2VkQ29kZUJsb2NrLCBzdGFydENvbHVtbiBpcyBhbHdheXMgMC4KKyAg
ICAgICAgbV9lbmRDb2x1bW4gPSBlbmRDb2x1bW47CisgICAgfQorCisgICAgY29uc3QgU3RyaW5n
JiBzb3VyY2VVUkxEaXJlY3RpdmUoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZVVSTERpcmVjdGl2
ZTsgfQorICAgIGNvbnN0IFN0cmluZyYgc291cmNlTWFwcGluZ1VSTERpcmVjdGl2ZSgpIGNvbnN0
IHsgcmV0dXJuIG1fc291cmNlTWFwcGluZ1VSTERpcmVjdGl2ZTsgfQorICAgIHZvaWQgc2V0U291
cmNlVVJMRGlyZWN0aXZlKGNvbnN0IFN0cmluZyYgc291cmNlVVJMKSB7IG1fc291cmNlVVJMRGly
ZWN0aXZlID0gc291cmNlVVJMOyB9CisgICAgdm9pZCBzZXRTb3VyY2VNYXBwaW5nVVJMRGlyZWN0
aXZlKGNvbnN0IFN0cmluZyYgc291cmNlTWFwcGluZ1VSTCkgeyBtX3NvdXJjZU1hcHBpbmdVUkxE
aXJlY3RpdmUgPSBzb3VyY2VNYXBwaW5nVVJMOyB9CisKKyAgICBDb2RlRmVhdHVyZXMgY29kZUZl
YXR1cmVzKCkgY29uc3QgeyByZXR1cm4gbV9mZWF0dXJlczsgfQorICAgIGJvb2wgaGFzQ2FwdHVy
ZWRWYXJpYWJsZXMoKSBjb25zdCB7IHJldHVybiBtX2hhc0NhcHR1cmVkVmFyaWFibGVzOyB9Cisg
ICAgdW5zaWduZWQgZmlyc3RMaW5lKCkgY29uc3QgeyByZXR1cm4gbV9maXJzdExpbmU7IH0KKyAg
ICB1bnNpZ25lZCBsaW5lQ291bnQoKSBjb25zdCB7IHJldHVybiBtX2xpbmVDb3VudDsgfQorICAg
IEFMV0FZU19JTkxJTkUgdW5zaWduZWQgc3RhcnRDb2x1bW4oKSBjb25zdCB7IHJldHVybiAwOyB9
CisgICAgdW5zaWduZWQgZW5kQ29sdW1uKCkgY29uc3QgeyByZXR1cm4gbV9lbmRDb2x1bW47IH0K
KworICAgIHZvaWQgYWRkT3BQcm9maWxlQ29udHJvbEZsb3dCeXRlY29kZU9mZnNldChzaXplX3Qg
b2Zmc2V0KQorICAgIHsKKyAgICAgICAgY3JlYXRlUmFyZURhdGFJZk5lY2Vzc2FyeSgpOworICAg
ICAgICBtX3JhcmVEYXRhLT5tX29wUHJvZmlsZUNvbnRyb2xGbG93Qnl0ZWNvZGVPZmZzZXRzLmFw
cGVuZChvZmZzZXQpOworICAgIH0KKyAgICBjb25zdCBWZWN0b3I8c2l6ZV90PiYgb3BQcm9maWxl
Q29udHJvbEZsb3dCeXRlY29kZU9mZnNldHMoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJU
KG1fcmFyZURhdGEpOworICAgICAgICByZXR1cm4gbV9yYXJlRGF0YS0+bV9vcFByb2ZpbGVDb250
cm9sRmxvd0J5dGVjb2RlT2Zmc2V0czsKKyAgICB9CisgICAgYm9vbCBoYXNPcFByb2ZpbGVDb250
cm9sRmxvd0J5dGVjb2RlT2Zmc2V0cygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9y
YXJlRGF0YSAmJiAhbV9yYXJlRGF0YS0+bV9vcFByb2ZpbGVDb250cm9sRmxvd0J5dGVjb2RlT2Zm
c2V0cy5pc0VtcHR5KCk7CisgICAgfQorCisgICAgdm9pZCBkdW1wRXhwcmVzc2lvblJhbmdlSW5m
bygpOyAvLyBGb3IgZGVidWdnaW5nIHB1cnBvc2Ugb25seS4KKworICAgIGJvb2wgd2FzQ29tcGls
ZWRXaXRoRGVidWdnaW5nT3Bjb2RlcygpIGNvbnN0IHsgcmV0dXJuIG1fd2FzQ29tcGlsZWRXaXRo
RGVidWdnaW5nT3Bjb2RlczsgfQorCisgICAgVHJpU3RhdGUgZGlkT3B0aW1pemUoKSBjb25zdCB7
IHJldHVybiBtX2RpZE9wdGltaXplOyB9CisgICAgdm9pZCBzZXREaWRPcHRpbWl6ZShUcmlTdGF0
ZSBkaWRPcHRpbWl6ZSkgeyBtX2RpZE9wdGltaXplID0gZGlkT3B0aW1pemU7IH0KKworcHJvdGVj
dGVkOgorICAgIFVubGlua2VkQ29kZUJsb2NrKFZNKiwgU3RydWN0dXJlKiwgQ29kZVR5cGUsIGNv
bnN0IEV4ZWN1dGFibGVJbmZvJiwgRGVidWdnZXJNb2RlKTsKKyAgICB+VW5saW5rZWRDb2RlQmxv
Y2soKTsKKworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mIHZtKQorICAgIHsKKyAgICAgICAg
QmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOworICAgIH0KKworcHJpdmF0ZToKKyAgICBmcmllbmQg
Y2xhc3MgQnl0ZWNvZGVSZXdyaXRlcjsKKyAgICB2b2lkIGFwcGx5TW9kaWZpY2F0aW9uKEJ5dGVj
b2RlUmV3cml0ZXImKTsKKworICAgIHZvaWQgY3JlYXRlUmFyZURhdGFJZk5lY2Vzc2FyeSgpCisg
ICAgeworICAgICAgICBpZiAoIW1fcmFyZURhdGEpCisgICAgICAgICAgICBtX3JhcmVEYXRhID0g
c3RkOjptYWtlX3VuaXF1ZTxSYXJlRGF0YT4oKTsKKyAgICB9CisKKyAgICB2b2lkIGdldExpbmVB
bmRDb2x1bW4oY29uc3QgRXhwcmVzc2lvblJhbmdlSW5mbyYsIHVuc2lnbmVkJiBsaW5lLCB1bnNp
Z25lZCYgY29sdW1uKSBjb25zdDsKKworICAgIGludCBtX251bVBhcmFtZXRlcnM7CisKKyAgICBz
dGQ6OnVuaXF1ZV9wdHI8VW5saW5rZWRJbnN0cnVjdGlvblN0cmVhbT4gbV91bmxpbmtlZEluc3Ry
dWN0aW9uczsKKworICAgIFZpcnR1YWxSZWdpc3RlciBtX3RoaXNSZWdpc3RlcjsKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgbV9zY29wZVJlZ2lzdGVyOworICAgIFZpcnR1YWxSZWdpc3RlciBtX2dsb2Jh
bE9iamVjdFJlZ2lzdGVyOworCisgICAgU3RyaW5nIG1fc291cmNlVVJMRGlyZWN0aXZlOworICAg
IFN0cmluZyBtX3NvdXJjZU1hcHBpbmdVUkxEaXJlY3RpdmU7CisKKyAgICB1bnNpZ25lZCBtX3Vz
ZXNFdmFsIDogMTsKKyAgICB1bnNpZ25lZCBtX2lzU3RyaWN0TW9kZSA6IDE7CisgICAgdW5zaWdu
ZWQgbV9pc0NvbnN0cnVjdG9yIDogMTsKKyAgICB1bnNpZ25lZCBtX2hhc0NhcHR1cmVkVmFyaWFi
bGVzIDogMTsKKyAgICB1bnNpZ25lZCBtX2lzQnVpbHRpbkZ1bmN0aW9uIDogMTsKKyAgICB1bnNp
Z25lZCBtX3N1cGVyQmluZGluZyA6IDE7CisgICAgdW5zaWduZWQgbV9zY3JpcHRNb2RlOiAxOwor
ICAgIHVuc2lnbmVkIG1faXNBcnJvd0Z1bmN0aW9uQ29udGV4dCA6IDE7CisgICAgdW5zaWduZWQg
bV9pc0NsYXNzQ29udGV4dCA6IDE7CisgICAgdW5zaWduZWQgbV93YXNDb21waWxlZFdpdGhEZWJ1
Z2dpbmdPcGNvZGVzIDogMTsKKyAgICB1bnNpZ25lZCBtX2NvbnN0cnVjdG9yS2luZCA6IDI7Cisg
ICAgdW5zaWduZWQgbV9kZXJpdmVkQ29udGV4dFR5cGUgOiAyOworICAgIHVuc2lnbmVkIG1fZXZh
bENvbnRleHRUeXBlIDogMjsKKyAgICB1bnNpZ25lZCBtX2ZpcnN0TGluZTsKKyAgICB1bnNpZ25l
ZCBtX2xpbmVDb3VudDsKKyAgICB1bnNpZ25lZCBtX2VuZENvbHVtbjsKKworICAgIFRyaVN0YXRl
IG1fZGlkT3B0aW1pemU7CisgICAgU291cmNlUGFyc2VNb2RlIG1fcGFyc2VNb2RlOworICAgIENv
ZGVGZWF0dXJlcyBtX2ZlYXR1cmVzOworICAgIENvZGVUeXBlIG1fY29kZVR5cGU7CisKKyAgICBW
ZWN0b3I8dW5zaWduZWQ+IG1fanVtcFRhcmdldHM7CisKKyAgICBWZWN0b3I8dW5zaWduZWQ+IG1f
cHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbnM7CisKKyAgICAvLyBDb25zdGFudCBQb29scworICAg
IFZlY3RvcjxJZGVudGlmaWVyPiBtX2lkZW50aWZpZXJzOworICAgIFZlY3RvcjxXcml0ZUJhcnJp
ZXI8VW5rbm93bj4+IG1fY29uc3RhbnRSZWdpc3RlcnM7CisgICAgVmVjdG9yPFNvdXJjZUNvZGVS
ZXByZXNlbnRhdGlvbj4gbV9jb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb247CisgICAg
dHlwZWRlZiBWZWN0b3I8V3JpdGVCYXJyaWVyPFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlPj4g
RnVuY3Rpb25FeHByZXNzaW9uVmVjdG9yOworICAgIEZ1bmN0aW9uRXhwcmVzc2lvblZlY3RvciBt
X2Z1bmN0aW9uRGVjbHM7CisgICAgRnVuY3Rpb25FeHByZXNzaW9uVmVjdG9yIG1fZnVuY3Rpb25F
eHByczsKKyAgICBzdGQ6OmFycmF5PHVuc2lnbmVkLCBMaW5rVGltZUNvbnN0YW50Q291bnQ+IG1f
bGlua1RpbWVDb25zdGFudHM7CisKKyAgICB1bnNpZ25lZCBtX2FycmF5UHJvZmlsZUNvdW50Owor
ICAgIHVuc2lnbmVkIG1fYXJyYXlBbGxvY2F0aW9uUHJvZmlsZUNvdW50OworICAgIHVuc2lnbmVk
IG1fb2JqZWN0QWxsb2NhdGlvblByb2ZpbGVDb3VudDsKKyAgICB1bnNpZ25lZCBtX3ZhbHVlUHJv
ZmlsZUNvdW50OworICAgIHVuc2lnbmVkIG1fbGxpbnRDYWxsTGlua0luZm9Db3VudDsKKworcHVi
bGljOgorICAgIHN0cnVjdCBSYXJlRGF0YSB7CisgICAgICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOworICAgIHB1YmxpYzoKKyAgICAgICAgVmVjdG9yPFVubGlua2VkSGFuZGxlckluZm8+IG1f
ZXhjZXB0aW9uSGFuZGxlcnM7CisKKyAgICAgICAgLy8gUmFyZSBDb25zdGFudHMKKyAgICAgICAg
VmVjdG9yPFdyaXRlQmFycmllcjxSZWdFeHA+PiBtX3JlZ2V4cHM7CisKKyAgICAgICAgLy8gQnVm
ZmVycyB1c2VkIGZvciBsYXJnZSBhcnJheSBsaXRlcmFscworICAgICAgICBWZWN0b3I8Q29uc3Rh
bnRCdWZmZXI+IG1fY29uc3RhbnRCdWZmZXJzOworCisgICAgICAgIC8vIEp1bXAgVGFibGVzCisg
ICAgICAgIFZlY3RvcjxVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZT4gbV9zd2l0Y2hKdW1wVGFibGVz
OworICAgICAgICBWZWN0b3I8VW5saW5rZWRTdHJpbmdKdW1wVGFibGU+IG1fc3RyaW5nU3dpdGNo
SnVtcFRhYmxlczsKKworICAgICAgICBWZWN0b3I8RXhwcmVzc2lvblJhbmdlSW5mbzo6RmF0UG9z
aXRpb24+IG1fZXhwcmVzc2lvbkluZm9GYXRQb3NpdGlvbnM7CisKKyAgICAgICAgc3RydWN0IFR5
cGVQcm9maWxlckV4cHJlc3Npb25SYW5nZSB7CisgICAgICAgICAgICB1bnNpZ25lZCBtX3N0YXJ0
RGl2b3Q7CisgICAgICAgICAgICB1bnNpZ25lZCBtX2VuZERpdm90OworICAgICAgICB9OworICAg
ICAgICBIYXNoTWFwPHVuc2lnbmVkLCBUeXBlUHJvZmlsZXJFeHByZXNzaW9uUmFuZ2U+IG1fdHlw
ZVByb2ZpbGVySW5mb01hcDsKKyAgICAgICAgVmVjdG9yPHNpemVfdD4gbV9vcFByb2ZpbGVDb250
cm9sRmxvd0J5dGVjb2RlT2Zmc2V0czsKKyAgICB9OworCitwcml2YXRlOgorICAgIHN0ZDo6dW5p
cXVlX3B0cjxSYXJlRGF0YT4gbV9yYXJlRGF0YTsKKyAgICBWZWN0b3I8RXhwcmVzc2lvblJhbmdl
SW5mbz4gbV9leHByZXNzaW9uSW5mbzsKKworcHJvdGVjdGVkOgorICAgIHN0YXRpYyB2b2lkIHZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBzdGF0aWMgc2l6ZV90IGVz
dGltYXRlZFNpemUoSlNDZWxsKik7CisKK3B1YmxpYzoKKyAgICBERUNMQVJFX0lORk87Cit9Owor
CitjbGFzcyBVbmxpbmtlZEdsb2JhbENvZGVCbG9jayA6IHB1YmxpYyBVbmxpbmtlZENvZGVCbG9j
ayB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBVbmxpbmtlZENvZGVCbG9jayBCYXNlOworCitwcm90
ZWN0ZWQ6CisgICAgVW5saW5rZWRHbG9iYWxDb2RlQmxvY2soVk0qIHZtLCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgQ29kZVR5cGUgY29kZVR5cGUsIGNvbnN0IEV4ZWN1dGFibGVJbmZvJiBpbmZvLCBE
ZWJ1Z2dlck1vZGUgZGVidWdnZXJNb2RlKQorICAgICAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSwg
Y29kZVR5cGUsIGluZm8sIGRlYnVnZ2VyTW9kZSkKKyAgICB7CisgICAgfQorCisgICAgREVDTEFS
RV9JTkZPOworfTsKKworY2xhc3MgVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrIGZpbmFsIDogcHVi
bGljIFVubGlua2VkR2xvYmFsQ29kZUJsb2NrIHsKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNz
IENvZGVDYWNoZTsKKyAgICBzdGF0aWMgVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrKiBjcmVhdGUo
Vk0qIHZtLCBjb25zdCBFeGVjdXRhYmxlSW5mbyYgaW5mbywgRGVidWdnZXJNb2RlIGRlYnVnZ2Vy
TW9kZSkKKyAgICB7CisgICAgICAgIFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jayogaW5zdGFuY2Ug
PSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2s+KHZt
LT5oZWFwKSkgVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrKHZtLCB2bS0+dW5saW5rZWRQcm9ncmFt
Q29kZUJsb2NrU3RydWN0dXJlLmdldCgpLCBpbmZvLCBkZWJ1Z2dlck1vZGUpOworICAgICAgICBp
bnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24oKnZtKTsKKyAgICAgICAgcmV0dXJuIGluc3RhbmNlOwor
ICAgIH0KKworcHVibGljOgorICAgIHR5cGVkZWYgVW5saW5rZWRHbG9iYWxDb2RlQmxvY2sgQmFz
ZTsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1
Y3R1cmVGbGFncyB8IFN0cnVjdHVyZUlzSW1tb3J0YWw7CisKKyAgICBzdGF0aWMgdm9pZCBkZXN0
cm95KEpTQ2VsbCopOworCisgICAgdm9pZCBzZXRWYXJpYWJsZURlY2xhcmF0aW9ucyhjb25zdCBW
YXJpYWJsZUVudmlyb25tZW50JiBlbnZpcm9ubWVudCkgeyBtX3ZhckRlY2xhcmF0aW9ucyA9IGVu
dmlyb25tZW50OyB9CisgICAgY29uc3QgVmFyaWFibGVFbnZpcm9ubWVudCYgdmFyaWFibGVEZWNs
YXJhdGlvbnMoKSBjb25zdCB7IHJldHVybiBtX3ZhckRlY2xhcmF0aW9uczsgfQorCisgICAgdm9p
ZCBzZXRMZXhpY2FsRGVjbGFyYXRpb25zKGNvbnN0IFZhcmlhYmxlRW52aXJvbm1lbnQmIGVudmly
b25tZW50KSB7IG1fbGV4aWNhbERlY2xhcmF0aW9ucyA9IGVudmlyb25tZW50OyB9CisgICAgY29u
c3QgVmFyaWFibGVFbnZpcm9ubWVudCYgbGV4aWNhbERlY2xhcmF0aW9ucygpIGNvbnN0IHsgcmV0
dXJuIG1fbGV4aWNhbERlY2xhcmF0aW9uczsgfQorCisgICAgc3RhdGljIHZvaWQgdmlzaXRDaGls
ZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworCitwcml2YXRlOgorICAgIFVubGlua2VkUHJv
Z3JhbUNvZGVCbG9jayhWTSogdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBFeGVjdXRh
YmxlSW5mbyYgaW5mbywgRGVidWdnZXJNb2RlIGRlYnVnZ2VyTW9kZSkKKyAgICAgICAgOiBCYXNl
KHZtLCBzdHJ1Y3R1cmUsIEdsb2JhbENvZGUsIGluZm8sIGRlYnVnZ2VyTW9kZSkKKyAgICB7Cisg
ICAgfQorCisgICAgVmFyaWFibGVFbnZpcm9ubWVudCBtX3ZhckRlY2xhcmF0aW9uczsKKyAgICBW
YXJpYWJsZUVudmlyb25tZW50IG1fbGV4aWNhbERlY2xhcmF0aW9uczsKKworcHVibGljOgorICAg
IHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG8pCisgICAgeworICAgICAgICByZXR1cm4gU3Ry
dWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG8sIFR5cGVJbmZvKFVubGlua2Vk
UHJvZ3JhbUNvZGVCbG9ja1R5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKKyAgICB9CisK
KyAgICBERUNMQVJFX0lORk87Cit9OworCitjbGFzcyBVbmxpbmtlZE1vZHVsZVByb2dyYW1Db2Rl
QmxvY2sgZmluYWwgOiBwdWJsaWMgVW5saW5rZWRHbG9iYWxDb2RlQmxvY2sgeworcHJpdmF0ZToK
KyAgICBmcmllbmQgY2xhc3MgQ29kZUNhY2hlOworICAgIHN0YXRpYyBVbmxpbmtlZE1vZHVsZVBy
b2dyYW1Db2RlQmxvY2sqIGNyZWF0ZShWTSogdm0sIGNvbnN0IEV4ZWN1dGFibGVJbmZvJiBpbmZv
LCBEZWJ1Z2dlck1vZGUgZGVidWdnZXJNb2RlKQorICAgIHsKKyAgICAgICAgVW5saW5rZWRNb2R1
bGVQcm9ncmFtQ29kZUJsb2NrKiBpbnN0YW5jZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxs
PFVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jaz4odm0tPmhlYXApKSBVbmxpbmtlZE1vZHVs
ZVByb2dyYW1Db2RlQmxvY2sodm0sIHZtLT51bmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2tT
dHJ1Y3R1cmUuZ2V0KCksIGluZm8sIGRlYnVnZ2VyTW9kZSk7CisgICAgICAgIGluc3RhbmNlLT5m
aW5pc2hDcmVhdGlvbigqdm0pOworICAgICAgICByZXR1cm4gaW5zdGFuY2U7CisgICAgfQorCitw
dWJsaWM6CisgICAgdHlwZWRlZiBVbmxpbmtlZEdsb2JhbENvZGVCbG9jayBCYXNlOworICAgIHN0
YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdz
IHwgU3RydWN0dXJlSXNJbW1vcnRhbDsKKworICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxs
Kik7CisKKyAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9y
Jik7CisKKyAgICAvLyBUaGlzIG9mZnNldCByZXByZXNlbnRzIHRoZSBjb25zdGFudCByZWdpc3Rl
ciBvZmZzZXQgdG8gdGhlIHN0b3JlZCBzeW1ib2wgdGFibGUgdGhhdCByZXByZXNlbnRzIHRoZSBs
YXlvdXQgb2YgdGhlCisgICAgLy8gbW9kdWxlIGVudmlyb25tZW50LiBUaGlzIHN5bWJvbCB0YWJs
ZSBpcyBjcmVhdGVkIGJ5IHRoZSBieXRlIGNvZGUgZ2VuZXJhdG9yIHNpbmNlIHRoZSBtb2R1bGUg
ZW52aXJvbm1lbnQgaW5jbHVkZXMKKyAgICAvLyB0aGUgdG9wLW1vc3QgbGV4aWNhbCBjYXB0dXJl
ZCB2YXJpYWJsZXMgaW5zaWRlIHRoZSBtb2R1bGUgY29kZS4gVGhpcyBtZWFucyB0aGF0LCBvbmNl
IHRoZSBtb2R1bGUgZW52aXJvbm1lbnQgaXMKKyAgICAvLyBhbGxvY2F0ZWQgYW5kIGluc3RhbnRp
YXRlZCBmcm9tIHRoaXMgc3ltYm9sIHRhYmxlLCBpdCBpcyB0aXRlbHkgY291cGxlZCB3aXRoIHRo
ZSBzcGVjaWZpYyB1bmxpbmtlZCBtb2R1bGUgcHJvZ3JhbQorICAgIC8vIGNvZGUgYmxvY2sgYW5k
IHRoZSBzdG9yZWQgc3ltYm9sIHRhYmxlLiBTbyBiZWZvcmUgZXhlY3V0aW5nIHRoZSBtb2R1bGUg
Y29kZSwgd2Ugc2hvdWxkIG5vdCBjbGVhciB0aGUgdW5saW5rZWQgbW9kdWxlCisgICAgLy8gcHJv
Z3JhbSBjb2RlIGJsb2NrIGluIHRoZSBtb2R1bGUgZXhlY3V0YWJsZS4gVGhpcyByZXF1aXJlbWVu
dCBpcyBtZXQgYmVjYXVzZSB0aGUgZ2FyYmFnZSBjb2xsZWN0b3Igb25seSBjbGVhcnMKKyAgICAv
LyB1bmxpbmtlZCBjb2RlIGluICgxKSB1bm1hcmtlZCBleGVjdXRhYmxlcyBhbmQgKDIpIGZ1bmN0
aW9uIGV4ZWN1dGFibGVzLgorICAgIC8vCisgICAgLy8gU2luY2UgdGhlIGZ1bmN0aW9uIGNvZGUg
bWF5IGJlIGV4ZWN1dGVkIHJlcGVhdGVkbHkgYW5kIHRoZSBlbnZpcm9ubWVudCBvZiBlYWNoIGZ1
bmN0aW9uIGV4ZWN1dGlvbiBpcyBkaWZmZXJlbnQsCisgICAgLy8gdGhlIGZ1bmN0aW9uIGNvZGUg
bmVlZCB0byBhbGxvY2F0ZSBhbmQgaW5zdGFudGlhdGUgdGhlIGVudmlyb25tZW50IGluIHRoZSBw
cm9sb2d1ZSBvZiB0aGUgZnVuY3Rpb24gY29kZS4gT24gdGhlCisgICAgLy8gb3RoZXIgaGFuZCwg
dGhlIG1vZHVsZSBjb2RlIGlzIGV4ZWN1dGVkIG9ubHkgb25jZS4gU28gd2UgY2FuIGluc3RhbnRp
YXRlIHRoZSBtb2R1bGUgZW52aXJvbm1lbnQgb3V0c2lkZSB0aGUgbW9kdWxlCisgICAgLy8gY29k
ZS4gQXQgdGhhdCB0aW1lLCB3ZSBjb25zdHJ1Y3QgdGhlIG1vZHVsZSBlbnZpcm9ubWVudCBieSB1
c2luZyB0aGUgc3ltYm9sIHRhYmxlIHRoYXQgaXMgaGVsZCBieSB0aGUgbW9kdWxlIGV4ZWN1dGFi
bGUuCisgICAgLy8gVGhlIHN5bWJvbCB0YWJsZSBoZWxkIGJ5IHRoZSBleGVjdXRhYmxlIGlzIHRo
ZSBjbG9uZWQgb25lIGZyb20gb25lIGluIHRoZSB1bmxpbmtlZCBjb2RlIGJsb2NrLiBJbnN0YW50
aWF0aW5nIHRoZSBtb2R1bGUKKyAgICAvLyBlbnZpcm9ubWVudCBiZWZvcmUgZXhlY3V0aW5nIGFu
ZCBsaW5raW5nIHRoZSBtb2R1bGUgY29kZSBpcyByZXF1aXJlZCB0byBsaW5rIHRoZSBpbXBvcnRl
ZCBiaW5kaW5ncyBiZXR3ZWVuIHRoZSBtb2R1bGVzLgorICAgIC8vCisgICAgLy8gVGhlIHVubGlu
a2VkIG1vZHVsZSBwcm9ncmFtIGNvZGUgYmxvY2sgb25seSBob2xkcyB0aGUgcHJlLWNsb25lZCBz
eW1ib2wgdGFibGUgaW4gaXRzIGNvbnN0YW50IHJlZ2lzdGVyIHBvb2wuIEl0IGRvZXMKKyAgICAv
LyBub3QgaG9sZCB0aGUgaW5zdGFudGlhdGVkIG1vZHVsZSBlbnZpcm9ubWVudC4gU28gd2hpbGUg
dGhlIG1vZHVsZSBlbnZpcm9ubWVudCByZXF1aXJlcyB0aGUgc3BlY2lmaWMgdW5saW5rZWQgbW9k
dWxlCisgICAgLy8gcHJvZ3JhbSBjb2RlIGJsb2NrLCB0aGUgdW5saW5rZWQgbW9kdWxlIGNvZGUg
YmxvY2sgY2FuIGJlIHVzZWQgZm9yIHRoZSBtb2R1bGUgZW52aXJvbm1lbnQgaW5zdGFudGlhdGVk
IGZyb20gdGhpcworICAgIC8vIHVubGlua2VkIGNvZGUgYmxvY2suIFRoZXJlIGlzIDE6TiByZWxh
dGlvbiBiZXR3ZWVuIHRoZSB1bmxpbmtlZCBtb2R1bGUgY29kZSBibG9jayBhbmQgdGhlIG1vZHVs
ZSBlbnZpcm9ubWVudHMuIFNvIHRoZQorICAgIC8vIHVubGlua2VkIG1vZHVsZSBwcm9ncmFtIGNv
ZGUgYmxvY2sgY2FuIGJlIGNhY2hlZC4KKyAgICAvLworICAgIC8vIE9uIHRoZSBvdGhlciBoYW5k
LCB0aGUgbGlua2VkIGNvZGUgYmxvY2sgZm9yIHRoZSBtb2R1bGUgZW52aXJvbm1lbnQgaW5jbHVk
ZXMgdGhlIHJlc29sdmVkIHJlZmVyZW5jZXMgdG8gdGhlIGltcG9ydGVkCisgICAgLy8gYmluZGlu
Z3MuIFRoZSBpbXBvcnRlZCBiaW5kaW5nIHJlZmVyZW5jZXMgdGhlIG90aGVyIG1vZHVsZSBlbnZp
cm9ubWVudCwgc28gdGhlIGxpbmtlZCBjb2RlIGJsb2NrIGlzIHRpdGx5IGNvdXBsZWQKKyAgICAv
LyB3aXRoIHRoZSBzcGVjaWZpYyBzZXQgb2YgdGhlIG1vZHVsZSBlbnZpcm9ubWVudHMuIFRodXMs
IHRoZSBsaW5rZWQgY29kZSBibG9jayBzaG91bGQgbm90IGJlIGNhY2hlZC4KKyAgICBpbnQgbW9k
dWxlRW52aXJvbm1lbnRTeW1ib2xUYWJsZUNvbnN0YW50UmVnaXN0ZXJPZmZzZXQoKSB7IHJldHVy
biBtX21vZHVsZUVudmlyb25tZW50U3ltYm9sVGFibGVDb25zdGFudFJlZ2lzdGVyT2Zmc2V0OyB9
CisgICAgdm9pZCBzZXRNb2R1bGVFbnZpcm9ubWVudFN5bWJvbFRhYmxlQ29uc3RhbnRSZWdpc3Rl
ck9mZnNldChpbnQgb2Zmc2V0KQorICAgIHsKKyAgICAgICAgbV9tb2R1bGVFbnZpcm9ubWVudFN5
bWJvbFRhYmxlQ29uc3RhbnRSZWdpc3Rlck9mZnNldCA9IG9mZnNldDsKKyAgICB9CisKK3ByaXZh
dGU6CisgICAgVW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrKFZNKiB2bSwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUsIGNvbnN0IEV4ZWN1dGFibGVJbmZvJiBpbmZvLCBEZWJ1Z2dlck1vZGUgZGVi
dWdnZXJNb2RlKQorICAgICAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSwgTW9kdWxlQ29kZSwgaW5m
bywgZGVidWdnZXJNb2RlKQorICAgIHsKKyAgICB9CisKKyAgICBpbnQgbV9tb2R1bGVFbnZpcm9u
bWVudFN5bWJvbFRhYmxlQ29uc3RhbnRSZWdpc3Rlck9mZnNldCB7IDAgfTsKKworcHVibGljOgor
ICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG8pCisgICAgeworICAgICAgICByZXR1cm4g
U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG8sIFR5cGVJbmZvKFVubGlu
a2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9ja1R5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsK
KyAgICB9CisKKyAgICBERUNMQVJFX0lORk87Cit9OworCitjbGFzcyBVbmxpbmtlZEV2YWxDb2Rl
QmxvY2sgZmluYWwgOiBwdWJsaWMgVW5saW5rZWRHbG9iYWxDb2RlQmxvY2sgeworcHJpdmF0ZToK
KyAgICBmcmllbmQgY2xhc3MgQ29kZUNhY2hlOworCisgICAgc3RhdGljIFVubGlua2VkRXZhbENv
ZGVCbG9jayogY3JlYXRlKFZNKiB2bSwgY29uc3QgRXhlY3V0YWJsZUluZm8mIGluZm8sIERlYnVn
Z2VyTW9kZSBkZWJ1Z2dlck1vZGUpCisgICAgeworICAgICAgICBVbmxpbmtlZEV2YWxDb2RlQmxv
Y2sqIGluc3RhbmNlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8VW5saW5rZWRFdmFsQ29k
ZUJsb2NrPih2bS0+aGVhcCkpIFVubGlua2VkRXZhbENvZGVCbG9jayh2bSwgdm0tPnVubGlua2Vk
RXZhbENvZGVCbG9ja1N0cnVjdHVyZS5nZXQoKSwgaW5mbywgZGVidWdnZXJNb2RlKTsKKyAgICAg
ICAgaW5zdGFuY2UtPmZpbmlzaENyZWF0aW9uKCp2bSk7CisgICAgICAgIHJldHVybiBpbnN0YW5j
ZTsKKyAgICB9CisKK3B1YmxpYzoKKyAgICB0eXBlZGVmIFVubGlua2VkR2xvYmFsQ29kZUJsb2Nr
IEJhc2U7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6
U3RydWN0dXJlRmxhZ3MgfCBTdHJ1Y3R1cmVJc0ltbW9ydGFsOworCisgICAgc3RhdGljIHZvaWQg
ZGVzdHJveShKU0NlbGwqKTsKKworICAgIGNvbnN0IElkZW50aWZpZXImIHZhcmlhYmxlKHVuc2ln
bmVkIGluZGV4KSB7IHJldHVybiBtX3ZhcmlhYmxlc1tpbmRleF07IH0KKyAgICB1bnNpZ25lZCBu
dW1WYXJpYWJsZXMoKSB7IHJldHVybiBtX3ZhcmlhYmxlcy5zaXplKCk7IH0KKyAgICB2b2lkIGFk
b3B0VmFyaWFibGVzKFZlY3RvcjxJZGVudGlmaWVyLCAwLCBVbnNhZmVWZWN0b3JPdmVyZmxvdz4m
IHZhcmlhYmxlcykKKyAgICB7CisgICAgICAgIEFTU0VSVChtX3ZhcmlhYmxlcy5pc0VtcHR5KCkp
OworICAgICAgICBtX3ZhcmlhYmxlcy5zd2FwKHZhcmlhYmxlcyk7CisgICAgfQorCitwcml2YXRl
OgorICAgIFVubGlua2VkRXZhbENvZGVCbG9jayhWTSogdm0sIFN0cnVjdHVyZSogc3RydWN0dXJl
LCBjb25zdCBFeGVjdXRhYmxlSW5mbyYgaW5mbywgRGVidWdnZXJNb2RlIGRlYnVnZ2VyTW9kZSkK
KyAgICAgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUsIEV2YWxDb2RlLCBpbmZvLCBkZWJ1Z2dlck1v
ZGUpCisgICAgeworICAgIH0KKworICAgIFZlY3RvcjxJZGVudGlmaWVyLCAwLCBVbnNhZmVWZWN0
b3JPdmVyZmxvdz4gbV92YXJpYWJsZXM7CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgU3RydWN0dXJl
KiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBK
U1ZhbHVlIHByb3RvKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZt
LCBnbG9iYWxPYmplY3QsIHByb3RvLCBUeXBlSW5mbyhVbmxpbmtlZEV2YWxDb2RlQmxvY2tUeXBl
LCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CisgICAgfQorCisgICAgREVDTEFSRV9JTkZPOwor
fTsKKworY2xhc3MgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayBmaW5hbCA6IHB1YmxpYyBVbmxp
bmtlZENvZGVCbG9jayB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBVbmxpbmtlZENvZGVCbG9jayBC
YXNlOworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0
cnVjdHVyZUZsYWdzIHwgU3RydWN0dXJlSXNJbW1vcnRhbDsKKworICAgIHN0YXRpYyBVbmxpbmtl
ZEZ1bmN0aW9uQ29kZUJsb2NrKiBjcmVhdGUoVk0qIHZtLCBDb2RlVHlwZSBjb2RlVHlwZSwgY29u
c3QgRXhlY3V0YWJsZUluZm8mIGluZm8sIERlYnVnZ2VyTW9kZSBkZWJ1Z2dlck1vZGUpCisgICAg
eworICAgICAgICBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKiBpbnN0YW5jZSA9IG5ldyAoTm90
TnVsbCwgYWxsb2NhdGVDZWxsPFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2s+KHZtLT5oZWFwKSkg
VW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayh2bSwgdm0tPnVubGlua2VkRnVuY3Rpb25Db2RlQmxv
Y2tTdHJ1Y3R1cmUuZ2V0KCksIGNvZGVUeXBlLCBpbmZvLCBkZWJ1Z2dlck1vZGUpOworICAgICAg
ICBpbnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24oKnZtKTsKKyAgICAgICAgcmV0dXJuIGluc3RhbmNl
OworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CisKK3ByaXZhdGU6
CisgICAgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayhWTSogdm0sIFN0cnVjdHVyZSogc3RydWN0
dXJlLCBDb2RlVHlwZSBjb2RlVHlwZSwgY29uc3QgRXhlY3V0YWJsZUluZm8mIGluZm8sIERlYnVn
Z2VyTW9kZSBkZWJ1Z2dlck1vZGUpCisgICAgICAgIDogQmFzZSh2bSwgc3RydWN0dXJlLCBjb2Rl
VHlwZSwgaW5mbywgZGVidWdnZXJNb2RlKQorICAgIHsKKyAgICB9CisgICAgCitwdWJsaWM6Cisg
ICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90bykKKyAgICB7CisgICAgICAgIHJldHVybiBT
dHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90bywgVHlwZUluZm8oVW5saW5r
ZWRGdW5jdGlvbkNvZGVCbG9ja1R5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKKyAgICB9
CisKKyAgICBERUNMQVJFX0lORk87Cit9OworCit9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvVW5saW5rZWRFdmFsQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkRXZhbENvZGVCbG9jay5oCShyZXZpc2lv
biAyMDgzMDgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRFdmFs
Q29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDU5MyArMjUsMTAgQEAKIAogI3ByYWdt
YSBvbmNlCiAKLSNpbmNsdWRlICJCeXRlY29kZUNvbnZlbnRpb25zLmgiCi0jaW5jbHVkZSAiQ29k
ZVNwZWNpYWxpemF0aW9uS2luZC5oIgotI2luY2x1ZGUgIkNvZGVUeXBlLmgiCi0jaW5jbHVkZSAi
Q29uc3RydWN0QWJpbGl0eS5oIgotI2luY2x1ZGUgIkV4cHJlc3Npb25SYW5nZUluZm8uaCIKLSNp
bmNsdWRlICJIYW5kbGVySW5mby5oIgotI2luY2x1ZGUgIklkZW50aWZpZXIuaCIKLSNpbmNsdWRl
ICJKU0NlbGwuaCIKLSNpbmNsdWRlICJKU1N0cmluZy5oIgotI2luY2x1ZGUgIlBhcnNlck1vZGVz
LmgiCi0jaW5jbHVkZSAiUmVnRXhwLmgiCi0jaW5jbHVkZSAiU3BlY2lhbFBvaW50ZXIuaCIKLSNp
bmNsdWRlICJVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5oIgotI2luY2x1ZGUgIlZhcmlhYmxl
RW52aXJvbm1lbnQuaCIKLSNpbmNsdWRlICJWaXJ0dWFsUmVnaXN0ZXIuaCIKLSNpbmNsdWRlIDx3
dGYvVHJpU3RhdGUuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSAiVW5saW5r
ZWRHbG9iYWxDb2RlQmxvY2suaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWNsYXNzIEJ5dGVjb2Rl
UmV3cml0ZXI7Ci1jbGFzcyBEZWJ1Z2dlcjsKLWNsYXNzIEZ1bmN0aW9uRXhlY3V0YWJsZTsKLWNs
YXNzIFBhcnNlckVycm9yOwotY2xhc3MgU2NyaXB0RXhlY3V0YWJsZTsKLWNsYXNzIFNvdXJjZUNv
ZGU7Ci1jbGFzcyBTb3VyY2VQcm92aWRlcjsKLWNsYXNzIFVubGlua2VkQ29kZUJsb2NrOwotY2xh
c3MgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jazsKLWNsYXNzIFVubGlua2VkRnVuY3Rpb25FeGVj
dXRhYmxlOwotY2xhc3MgVW5saW5rZWRJbnN0cnVjdGlvblN0cmVhbTsKLXN0cnVjdCBFeGVjdXRh
YmxlSW5mbzsKLQotdHlwZWRlZiB1bnNpZ25lZCBVbmxpbmtlZFZhbHVlUHJvZmlsZTsKLXR5cGVk
ZWYgdW5zaWduZWQgVW5saW5rZWRBcnJheVByb2ZpbGU7Ci10eXBlZGVmIHVuc2lnbmVkIFVubGlu
a2VkQXJyYXlBbGxvY2F0aW9uUHJvZmlsZTsKLXR5cGVkZWYgdW5zaWduZWQgVW5saW5rZWRPYmpl
Y3RBbGxvY2F0aW9uUHJvZmlsZTsKLXR5cGVkZWYgdW5zaWduZWQgVW5saW5rZWRMTEludENhbGxM
aW5rSW5mbzsKLQotc3RydWN0IFVubGlua2VkU3RyaW5nSnVtcFRhYmxlIHsKLSAgICBzdHJ1Y3Qg
T2Zmc2V0TG9jYXRpb24gewotICAgICAgICBpbnQzMl90IGJyYW5jaE9mZnNldDsKLSAgICB9Owot
Ci0gICAgdHlwZWRlZiBIYXNoTWFwPFJlZlB0cjxTdHJpbmdJbXBsPiwgT2Zmc2V0TG9jYXRpb24+
IFN0cmluZ09mZnNldFRhYmxlOwotICAgIFN0cmluZ09mZnNldFRhYmxlIG9mZnNldFRhYmxlOwot
Ci0gICAgaW5saW5lIGludDMyX3Qgb2Zmc2V0Rm9yVmFsdWUoU3RyaW5nSW1wbCogdmFsdWUsIGlu
dDMyX3QgZGVmYXVsdE9mZnNldCkKLSAgICB7Ci0gICAgICAgIFN0cmluZ09mZnNldFRhYmxlOjpj
b25zdF9pdGVyYXRvciBlbmQgPSBvZmZzZXRUYWJsZS5lbmQoKTsKLSAgICAgICAgU3RyaW5nT2Zm
c2V0VGFibGU6OmNvbnN0X2l0ZXJhdG9yIGxvYyA9IG9mZnNldFRhYmxlLmZpbmQodmFsdWUpOwot
ICAgICAgICBpZiAobG9jID09IGVuZCkKLSAgICAgICAgICAgIHJldHVybiBkZWZhdWx0T2Zmc2V0
OwotICAgICAgICByZXR1cm4gbG9jLT52YWx1ZS5icmFuY2hPZmZzZXQ7Ci0gICAgfQotCi19Owot
Ci1zdHJ1Y3QgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUgewotICAgIFZlY3RvcjxpbnQzMl90PiBi
cmFuY2hPZmZzZXRzOwotICAgIGludDMyX3QgbWluOwotCi0gICAgaW50MzJfdCBvZmZzZXRGb3JW
YWx1ZShpbnQzMl90IHZhbHVlLCBpbnQzMl90IGRlZmF1bHRPZmZzZXQpOwotICAgIHZvaWQgYWRk
KGludDMyX3Qga2V5LCBpbnQzMl90IG9mZnNldCkKLSAgICB7Ci0gICAgICAgIGlmICghYnJhbmNo
T2Zmc2V0c1trZXldKQotICAgICAgICAgICAgYnJhbmNoT2Zmc2V0c1trZXldID0gb2Zmc2V0Owot
ICAgIH0KLX07Ci0KLXN0cnVjdCBVbmxpbmtlZEluc3RydWN0aW9uIHsKLSAgICBVbmxpbmtlZElu
c3RydWN0aW9uKCkgeyB1Lm9wZXJhbmQgPSAwOyB9Ci0gICAgVW5saW5rZWRJbnN0cnVjdGlvbihP
cGNvZGVJRCBvcGNvZGUpIHsgdS5vcGNvZGUgPSBvcGNvZGU7IH0KLSAgICBVbmxpbmtlZEluc3Ry
dWN0aW9uKGludCBvcGVyYW5kKSB7IHUub3BlcmFuZCA9IG9wZXJhbmQ7IH0KLSAgICB1bmlvbiB7
Ci0gICAgICAgIE9wY29kZUlEIG9wY29kZTsKLSAgICAgICAgaW50MzJfdCBvcGVyYW5kOwotICAg
ICAgICB1bnNpZ25lZCBpbmRleDsKLSAgICB9IHU7Ci19OwotCi1jbGFzcyBVbmxpbmtlZENvZGVC
bG9jayA6IHB1YmxpYyBKU0NlbGwgewotcHVibGljOgotICAgIHR5cGVkZWYgSlNDZWxsIEJhc2U7
Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0
dXJlRmxhZ3M7Ci0KLSAgICBzdGF0aWMgY29uc3QgYm9vbCBuZWVkc0Rlc3RydWN0aW9uID0gdHJ1
ZTsKLQotICAgIGVudW0geyBDYWxsRnVuY3Rpb24sIEFwcGx5RnVuY3Rpb24gfTsKLQotICAgIHR5
cGVkZWYgVW5saW5rZWRJbnN0cnVjdGlvbiBJbnN0cnVjdGlvbjsKLSAgICB0eXBlZGVmIFZlY3Rv
cjxVbmxpbmtlZEluc3RydWN0aW9uLCAwLCBVbnNhZmVWZWN0b3JPdmVyZmxvdz4gVW5wYWNrZWRJ
bnN0cnVjdGlvbnM7Ci0KLSAgICBib29sIGlzQ29uc3RydWN0b3IoKSBjb25zdCB7IHJldHVybiBt
X2lzQ29uc3RydWN0b3I7IH0KLSAgICBib29sIGlzU3RyaWN0TW9kZSgpIGNvbnN0IHsgcmV0dXJu
IG1faXNTdHJpY3RNb2RlOyB9Ci0gICAgYm9vbCB1c2VzRXZhbCgpIGNvbnN0IHsgcmV0dXJuIG1f
dXNlc0V2YWw7IH0KLSAgICBTb3VyY2VQYXJzZU1vZGUgcGFyc2VNb2RlKCkgY29uc3QgeyByZXR1
cm4gbV9wYXJzZU1vZGU7IH0KLSAgICBib29sIGlzQXJyb3dGdW5jdGlvbigpIGNvbnN0IHsgcmV0
dXJuIGlzQXJyb3dGdW5jdGlvblBhcnNlTW9kZShwYXJzZU1vZGUoKSk7IH0KLSAgICBEZXJpdmVk
Q29udGV4dFR5cGUgZGVyaXZlZENvbnRleHRUeXBlKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nh
c3Q8RGVyaXZlZENvbnRleHRUeXBlPihtX2Rlcml2ZWRDb250ZXh0VHlwZSk7IH0KLSAgICBFdmFs
Q29udGV4dFR5cGUgZXZhbENvbnRleHRUeXBlKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8
RXZhbENvbnRleHRUeXBlPihtX2V2YWxDb250ZXh0VHlwZSk7IH0KLSAgICBib29sIGlzQXJyb3dG
dW5jdGlvbkNvbnRleHQoKSBjb25zdCB7IHJldHVybiBtX2lzQXJyb3dGdW5jdGlvbkNvbnRleHQ7
IH0KLSAgICBib29sIGlzQ2xhc3NDb250ZXh0KCkgY29uc3QgeyByZXR1cm4gbV9pc0NsYXNzQ29u
dGV4dDsgfQotCi0gICAgdm9pZCBhZGRFeHByZXNzaW9uSW5mbyh1bnNpZ25lZCBpbnN0cnVjdGlv
bk9mZnNldCwgaW50IGRpdm90LAotICAgICAgICBpbnQgc3RhcnRPZmZzZXQsIGludCBlbmRPZmZz
ZXQsIHVuc2lnbmVkIGxpbmUsIHVuc2lnbmVkIGNvbHVtbik7Ci0KLSAgICB2b2lkIGFkZFR5cGVQ
cm9maWxlckV4cHJlc3Npb25JbmZvKHVuc2lnbmVkIGluc3RydWN0aW9uT2Zmc2V0LCB1bnNpZ25l
ZCBzdGFydERpdm90LCB1bnNpZ25lZCBlbmREaXZvdCk7Ci0KLSAgICBib29sIGhhc0V4cHJlc3Np
b25JbmZvKCkgeyByZXR1cm4gbV9leHByZXNzaW9uSW5mby5zaXplKCk7IH0KLSAgICBjb25zdCBW
ZWN0b3I8RXhwcmVzc2lvblJhbmdlSW5mbz4mIGV4cHJlc3Npb25JbmZvKCkgeyByZXR1cm4gbV9l
eHByZXNzaW9uSW5mbzsgfQotCi0gICAgLy8gU3BlY2lhbCByZWdpc3RlcnMKLSAgICB2b2lkIHNl
dFRoaXNSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgdGhpc1JlZ2lzdGVyKSB7IG1fdGhpc1JlZ2lz
dGVyID0gdGhpc1JlZ2lzdGVyOyB9Ci0gICAgdm9pZCBzZXRTY29wZVJlZ2lzdGVyKFZpcnR1YWxS
ZWdpc3RlciBzY29wZVJlZ2lzdGVyKSB7IG1fc2NvcGVSZWdpc3RlciA9IHNjb3BlUmVnaXN0ZXI7
IH0KLQotICAgIGJvb2wgdXNlc0dsb2JhbE9iamVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fZ2xvYmFs
T2JqZWN0UmVnaXN0ZXIuaXNWYWxpZCgpOyB9Ci0gICAgdm9pZCBzZXRHbG9iYWxPYmplY3RSZWdp
c3RlcihWaXJ0dWFsUmVnaXN0ZXIgZ2xvYmFsT2JqZWN0UmVnaXN0ZXIpIHsgbV9nbG9iYWxPYmpl
Y3RSZWdpc3RlciA9IGdsb2JhbE9iamVjdFJlZ2lzdGVyOyB9Ci0gICAgVmlydHVhbFJlZ2lzdGVy
IGdsb2JhbE9iamVjdFJlZ2lzdGVyKCkgY29uc3QgeyByZXR1cm4gbV9nbG9iYWxPYmplY3RSZWdp
c3RlcjsgfQotCi0gICAgLy8gUGFyYW1ldGVyIGluZm9ybWF0aW9uCi0gICAgdm9pZCBzZXROdW1Q
YXJhbWV0ZXJzKGludCBuZXdWYWx1ZSkgeyBtX251bVBhcmFtZXRlcnMgPSBuZXdWYWx1ZTsgfQot
ICAgIHZvaWQgYWRkUGFyYW1ldGVyKCkgeyBtX251bVBhcmFtZXRlcnMrKzsgfQotICAgIHVuc2ln
bmVkIG51bVBhcmFtZXRlcnMoKSBjb25zdCB7IHJldHVybiBtX251bVBhcmFtZXRlcnM7IH0KLQot
ICAgIHVuc2lnbmVkIGFkZFJlZ0V4cChSZWdFeHAqIHIpCi0gICAgewotICAgICAgICBjcmVhdGVS
YXJlRGF0YUlmTmVjZXNzYXJ5KCk7Ci0gICAgICAgIHVuc2lnbmVkIHNpemUgPSBtX3JhcmVEYXRh
LT5tX3JlZ2V4cHMuc2l6ZSgpOwotICAgICAgICBtX3JhcmVEYXRhLT5tX3JlZ2V4cHMuYXBwZW5k
KFdyaXRlQmFycmllcjxSZWdFeHA+KCp2bSgpLCB0aGlzLCByKSk7Ci0gICAgICAgIHJldHVybiBz
aXplOwotICAgIH0KLSAgICB1bnNpZ25lZCBudW1iZXJPZlJlZ0V4cHMoKSBjb25zdAotICAgIHsK
LSAgICAgICAgaWYgKCFtX3JhcmVEYXRhKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAg
IHJldHVybiBtX3JhcmVEYXRhLT5tX3JlZ2V4cHMuc2l6ZSgpOwotICAgIH0KLSAgICBSZWdFeHAq
IHJlZ2V4cChpbnQgaW5kZXgpIGNvbnN0IHsgQVNTRVJUKG1fcmFyZURhdGEpOyByZXR1cm4gbV9y
YXJlRGF0YS0+bV9yZWdleHBzW2luZGV4XS5nZXQoKTsgfQotCi0gICAgLy8gQ29uc3RhbnQgUG9v
bHMKLQotICAgIHNpemVfdCBudW1iZXJPZklkZW50aWZpZXJzKCkgY29uc3QgeyByZXR1cm4gbV9p
ZGVudGlmaWVycy5zaXplKCk7IH0KLSAgICB2b2lkIGFkZElkZW50aWZpZXIoY29uc3QgSWRlbnRp
ZmllciYgaSkgeyByZXR1cm4gbV9pZGVudGlmaWVycy5hcHBlbmQoaSk7IH0KLSAgICBjb25zdCBJ
ZGVudGlmaWVyJiBpZGVudGlmaWVyKGludCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9pZGVudGlm
aWVyc1tpbmRleF07IH0KLSAgICBjb25zdCBWZWN0b3I8SWRlbnRpZmllcj4mIGlkZW50aWZpZXJz
KCkgY29uc3QgeyByZXR1cm4gbV9pZGVudGlmaWVyczsgfQotCi0gICAgdW5zaWduZWQgYWRkQ29u
c3RhbnQoSlNWYWx1ZSB2LCBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24gc291cmNlQ29kZVJlcHJl
c2VudGF0aW9uID0gU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpPdGhlcikKLSAgICB7Ci0gICAg
ICAgIHVuc2lnbmVkIHJlc3VsdCA9IG1fY29uc3RhbnRSZWdpc3RlcnMuc2l6ZSgpOwotICAgICAg
ICBtX2NvbnN0YW50UmVnaXN0ZXJzLmFwcGVuZChXcml0ZUJhcnJpZXI8VW5rbm93bj4oKSk7Ci0g
ICAgICAgIG1fY29uc3RhbnRSZWdpc3RlcnMubGFzdCgpLnNldCgqdm0oKSwgdGhpcywgdik7Ci0g
ICAgICAgIG1fY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uLmFwcGVuZChzb3VyY2VD
b2RlUmVwcmVzZW50YXRpb24pOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLSAgICB1
bnNpZ25lZCBhZGRDb25zdGFudChMaW5rVGltZUNvbnN0YW50IHR5cGUpCi0gICAgewotICAgICAg
ICB1bnNpZ25lZCByZXN1bHQgPSBtX2NvbnN0YW50UmVnaXN0ZXJzLnNpemUoKTsKLSAgICAgICAg
QVNTRVJUKHJlc3VsdCk7Ci0gICAgICAgIHVuc2lnbmVkIGluZGV4ID0gc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KHR5cGUpOwotICAgICAgICBBU1NFUlQoaW5kZXggPCBMaW5rVGltZUNvbnN0YW50Q291
bnQpOwotICAgICAgICBtX2xpbmtUaW1lQ29uc3RhbnRzW2luZGV4XSA9IHJlc3VsdDsKLSAgICAg
ICAgbV9jb25zdGFudFJlZ2lzdGVycy5hcHBlbmQoV3JpdGVCYXJyaWVyPFVua25vd24+KCkpOwot
ICAgICAgICBtX2NvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbi5hcHBlbmQoU291cmNl
Q29kZVJlcHJlc2VudGF0aW9uOjpPdGhlcik7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAg
fQotICAgIHVuc2lnbmVkIHJlZ2lzdGVySW5kZXhGb3JMaW5rVGltZUNvbnN0YW50KExpbmtUaW1l
Q29uc3RhbnQgdHlwZSkKLSAgICB7Ci0gICAgICAgIHVuc2lnbmVkIGluZGV4ID0gc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KHR5cGUpOwotICAgICAgICBBU1NFUlQoaW5kZXggPCBMaW5rVGltZUNvbnN0
YW50Q291bnQpOwotICAgICAgICByZXR1cm4gbV9saW5rVGltZUNvbnN0YW50c1tpbmRleF07Ci0g
ICAgfQotICAgIGNvbnN0IFZlY3RvcjxXcml0ZUJhcnJpZXI8VW5rbm93bj4+JiBjb25zdGFudFJl
Z2lzdGVycygpIHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnM7IH0KLSAgICBjb25zdCBXcml0
ZUJhcnJpZXI8VW5rbm93bj4mIGNvbnN0YW50UmVnaXN0ZXIoaW50IGluZGV4KSBjb25zdCB7IHJl
dHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW2luZGV4IC0gRmlyc3RDb25zdGFudFJlZ2lzdGVySW5k
ZXhdOyB9Ci0gICAgQUxXQVlTX0lOTElORSBib29sIGlzQ29uc3RhbnRSZWdpc3RlckluZGV4KGlu
dCBpbmRleCkgY29uc3QgeyByZXR1cm4gaW5kZXggPj0gRmlyc3RDb25zdGFudFJlZ2lzdGVySW5k
ZXg7IH0KLSAgICBjb25zdCBWZWN0b3I8U291cmNlQ29kZVJlcHJlc2VudGF0aW9uPiYgY29uc3Rh
bnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uKCkgeyByZXR1cm4gbV9jb25zdGFudHNTb3VyY2VD
b2RlUmVwcmVzZW50YXRpb247IH0KLQotICAgIC8vIEp1bXBzCi0gICAgc2l6ZV90IG51bWJlck9m
SnVtcFRhcmdldHMoKSBjb25zdCB7IHJldHVybiBtX2p1bXBUYXJnZXRzLnNpemUoKTsgfQotICAg
IHZvaWQgYWRkSnVtcFRhcmdldCh1bnNpZ25lZCBqdW1wVGFyZ2V0KSB7IG1fanVtcFRhcmdldHMu
YXBwZW5kKGp1bXBUYXJnZXQpOyB9Ci0gICAgdW5zaWduZWQganVtcFRhcmdldChpbnQgaW5kZXgp
IGNvbnN0IHsgcmV0dXJuIG1fanVtcFRhcmdldHNbaW5kZXhdOyB9Ci0gICAgdW5zaWduZWQgbGFz
dEp1bXBUYXJnZXQoKSBjb25zdCB7IHJldHVybiBtX2p1bXBUYXJnZXRzLmxhc3QoKTsgfQotCi0g
ICAgVW5saW5rZWRIYW5kbGVySW5mbyogaGFuZGxlckZvckJ5dGVjb2RlT2Zmc2V0KHVuc2lnbmVk
IGJ5dGVjb2RlT2Zmc2V0LCBSZXF1aXJlZEhhbmRsZXIgPSBSZXF1aXJlZEhhbmRsZXI6OkFueUhh
bmRsZXIpOwotICAgIFVubGlua2VkSGFuZGxlckluZm8qIGhhbmRsZXJGb3JJbmRleCh1bnNpZ25l
ZCwgUmVxdWlyZWRIYW5kbGVyID0gUmVxdWlyZWRIYW5kbGVyOjpBbnlIYW5kbGVyKTsKLQotICAg
IGJvb2wgaXNCdWlsdGluRnVuY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX2lzQnVpbHRpbkZ1bmN0
aW9uOyB9Ci0KLSAgICBDb25zdHJ1Y3RvcktpbmQgY29uc3RydWN0b3JLaW5kKCkgY29uc3QgeyBy
ZXR1cm4gc3RhdGljX2Nhc3Q8Q29uc3RydWN0b3JLaW5kPihtX2NvbnN0cnVjdG9yS2luZCk7IH0K
LSAgICBTdXBlckJpbmRpbmcgc3VwZXJCaW5kaW5nKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nh
c3Q8U3VwZXJCaW5kaW5nPihtX3N1cGVyQmluZGluZyk7IH0KLSAgICBKU1BhcnNlclNjcmlwdE1v
ZGUgc2NyaXB0TW9kZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEpTUGFyc2VyU2NyaXB0
TW9kZT4obV9zY3JpcHRNb2RlKTsgfQotCi0gICAgdm9pZCBzaHJpbmtUb0ZpdCgpCi0gICAgewot
ICAgICAgICBtX2p1bXBUYXJnZXRzLnNocmlua1RvRml0KCk7Ci0gICAgICAgIG1faWRlbnRpZmll
cnMuc2hyaW5rVG9GaXQoKTsKLSAgICAgICAgbV9jb25zdGFudFJlZ2lzdGVycy5zaHJpbmtUb0Zp
dCgpOwotICAgICAgICBtX2NvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbi5zaHJpbmtU
b0ZpdCgpOwotICAgICAgICBtX2Z1bmN0aW9uRGVjbHMuc2hyaW5rVG9GaXQoKTsKLSAgICAgICAg
bV9mdW5jdGlvbkV4cHJzLnNocmlua1RvRml0KCk7Ci0gICAgICAgIG1fcHJvcGVydHlBY2Nlc3NJ
bnN0cnVjdGlvbnMuc2hyaW5rVG9GaXQoKTsKLSAgICAgICAgbV9leHByZXNzaW9uSW5mby5zaHJp
bmtUb0ZpdCgpOwotCi0gICAgICAgIGlmIChtX3JhcmVEYXRhKSB7Ci0gICAgICAgICAgICBtX3Jh
cmVEYXRhLT5tX2V4Y2VwdGlvbkhhbmRsZXJzLnNocmlua1RvRml0KCk7Ci0gICAgICAgICAgICBt
X3JhcmVEYXRhLT5tX3JlZ2V4cHMuc2hyaW5rVG9GaXQoKTsKLSAgICAgICAgICAgIG1fcmFyZURh
dGEtPm1fY29uc3RhbnRCdWZmZXJzLnNocmlua1RvRml0KCk7Ci0gICAgICAgICAgICBtX3JhcmVE
YXRhLT5tX3N3aXRjaEp1bXBUYWJsZXMuc2hyaW5rVG9GaXQoKTsKLSAgICAgICAgICAgIG1fcmFy
ZURhdGEtPm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcy5zaHJpbmtUb0ZpdCgpOwotICAgICAgICAg
ICAgbV9yYXJlRGF0YS0+bV9leHByZXNzaW9uSW5mb0ZhdFBvc2l0aW9ucy5zaHJpbmtUb0ZpdCgp
OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgdm9pZCBzZXRJbnN0cnVjdGlvbnMoc3RkOjp1bmlx
dWVfcHRyPFVubGlua2VkSW5zdHJ1Y3Rpb25TdHJlYW0+KTsKLSAgICBjb25zdCBVbmxpbmtlZElu
c3RydWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlvbnMoKSBjb25zdDsKLQotICAgIGludCBudW1DYWxs
ZWVMb2NhbHMoKSBjb25zdCB7IHJldHVybiBtX251bUNhbGxlZUxvY2FsczsgfQotCi0gICAgaW50
IG1fbnVtVmFyczsKLSAgICBpbnQgbV9udW1DYXB0dXJlZFZhcnM7Ci0gICAgaW50IG1fbnVtQ2Fs
bGVlTG9jYWxzOwotCi0gICAgLy8gSnVtcCBUYWJsZXMKLQotICAgIHNpemVfdCBudW1iZXJPZlN3
aXRjaEp1bXBUYWJsZXMoKSBjb25zdCB7IHJldHVybiBtX3JhcmVEYXRhID8gbV9yYXJlRGF0YS0+
bV9zd2l0Y2hKdW1wVGFibGVzLnNpemUoKSA6IDA7IH0KLSAgICBVbmxpbmtlZFNpbXBsZUp1bXBU
YWJsZSYgYWRkU3dpdGNoSnVtcFRhYmxlKCkgeyBjcmVhdGVSYXJlRGF0YUlmTmVjZXNzYXJ5KCk7
IG1fcmFyZURhdGEtPm1fc3dpdGNoSnVtcFRhYmxlcy5hcHBlbmQoVW5saW5rZWRTaW1wbGVKdW1w
VGFibGUoKSk7IHJldHVybiBtX3JhcmVEYXRhLT5tX3N3aXRjaEp1bXBUYWJsZXMubGFzdCgpOyB9
Ci0gICAgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUmIHN3aXRjaEp1bXBUYWJsZShpbnQgdGFibGVJ
bmRleCkgeyBBU1NFUlQobV9yYXJlRGF0YSk7IHJldHVybiBtX3JhcmVEYXRhLT5tX3N3aXRjaEp1
bXBUYWJsZXNbdGFibGVJbmRleF07IH0KLQotICAgIHNpemVfdCBudW1iZXJPZlN0cmluZ1N3aXRj
aEp1bXBUYWJsZXMoKSBjb25zdCB7IHJldHVybiBtX3JhcmVEYXRhID8gbV9yYXJlRGF0YS0+bV9z
dHJpbmdTd2l0Y2hKdW1wVGFibGVzLnNpemUoKSA6IDA7IH0KLSAgICBVbmxpbmtlZFN0cmluZ0p1
bXBUYWJsZSYgYWRkU3RyaW5nU3dpdGNoSnVtcFRhYmxlKCkgeyBjcmVhdGVSYXJlRGF0YUlmTmVj
ZXNzYXJ5KCk7IG1fcmFyZURhdGEtPm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcy5hcHBlbmQoVW5s
aW5rZWRTdHJpbmdKdW1wVGFibGUoKSk7IHJldHVybiBtX3JhcmVEYXRhLT5tX3N0cmluZ1N3aXRj
aEp1bXBUYWJsZXMubGFzdCgpOyB9Ci0gICAgVW5saW5rZWRTdHJpbmdKdW1wVGFibGUmIHN0cmlu
Z1N3aXRjaEp1bXBUYWJsZShpbnQgdGFibGVJbmRleCkgeyBBU1NFUlQobV9yYXJlRGF0YSk7IHJl
dHVybiBtX3JhcmVEYXRhLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07IH0K
LQotICAgIHVuc2lnbmVkIGFkZEZ1bmN0aW9uRGVjbChVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJs
ZSogbikKLSAgICB7Ci0gICAgICAgIHVuc2lnbmVkIHNpemUgPSBtX2Z1bmN0aW9uRGVjbHMuc2l6
ZSgpOwotICAgICAgICBtX2Z1bmN0aW9uRGVjbHMuYXBwZW5kKFdyaXRlQmFycmllcjxVbmxpbmtl
ZEZ1bmN0aW9uRXhlY3V0YWJsZT4oKSk7Ci0gICAgICAgIG1fZnVuY3Rpb25EZWNscy5sYXN0KCku
c2V0KCp2bSgpLCB0aGlzLCBuKTsKLSAgICAgICAgcmV0dXJuIHNpemU7Ci0gICAgfQotICAgIFVu
bGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbkRlY2woaW50IGluZGV4KSB7IHJldHVy
biBtX2Z1bmN0aW9uRGVjbHNbaW5kZXhdLmdldCgpOyB9Ci0gICAgc2l6ZV90IG51bWJlck9mRnVu
Y3Rpb25EZWNscygpIHsgcmV0dXJuIG1fZnVuY3Rpb25EZWNscy5zaXplKCk7IH0KLSAgICB1bnNp
Z25lZCBhZGRGdW5jdGlvbkV4cHIoVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIG4pCi0gICAg
ewotICAgICAgICB1bnNpZ25lZCBzaXplID0gbV9mdW5jdGlvbkV4cHJzLnNpemUoKTsKLSAgICAg
ICAgbV9mdW5jdGlvbkV4cHJzLmFwcGVuZChXcml0ZUJhcnJpZXI8VW5saW5rZWRGdW5jdGlvbkV4
ZWN1dGFibGU+KCkpOwotICAgICAgICBtX2Z1bmN0aW9uRXhwcnMubGFzdCgpLnNldCgqdm0oKSwg
dGhpcywgbik7Ci0gICAgICAgIHJldHVybiBzaXplOwotICAgIH0KLSAgICBVbmxpbmtlZEZ1bmN0
aW9uRXhlY3V0YWJsZSogZnVuY3Rpb25FeHByKGludCBpbmRleCkgeyByZXR1cm4gbV9mdW5jdGlv
bkV4cHJzW2luZGV4XS5nZXQoKTsgfQotICAgIHNpemVfdCBudW1iZXJPZkZ1bmN0aW9uRXhwcnMo
KSB7IHJldHVybiBtX2Z1bmN0aW9uRXhwcnMuc2l6ZSgpOyB9Ci0KLSAgICAvLyBFeGNlcHRpb24g
aGFuZGxpbmcgc3VwcG9ydAotICAgIHNpemVfdCBudW1iZXJPZkV4Y2VwdGlvbkhhbmRsZXJzKCkg
Y29uc3QgeyByZXR1cm4gbV9yYXJlRGF0YSA/IG1fcmFyZURhdGEtPm1fZXhjZXB0aW9uSGFuZGxl
cnMuc2l6ZSgpIDogMDsgfQotICAgIHZvaWQgYWRkRXhjZXB0aW9uSGFuZGxlcihjb25zdCBVbmxp
bmtlZEhhbmRsZXJJbmZvJiBoYW5kbGVyKSB7IGNyZWF0ZVJhcmVEYXRhSWZOZWNlc3NhcnkoKTsg
cmV0dXJuIG1fcmFyZURhdGEtPm1fZXhjZXB0aW9uSGFuZGxlcnMuYXBwZW5kKGhhbmRsZXIpOyB9
Ci0gICAgVW5saW5rZWRIYW5kbGVySW5mbyYgZXhjZXB0aW9uSGFuZGxlcihpbnQgaW5kZXgpIHsg
QVNTRVJUKG1fcmFyZURhdGEpOyByZXR1cm4gbV9yYXJlRGF0YS0+bV9leGNlcHRpb25IYW5kbGVy
c1tpbmRleF07IH0KLQotICAgIFVubGlua2VkQXJyYXlQcm9maWxlIGFkZEFycmF5UHJvZmlsZSgp
IHsgcmV0dXJuIG1fYXJyYXlQcm9maWxlQ291bnQrKzsgfQotICAgIHVuc2lnbmVkIG51bWJlck9m
QXJyYXlQcm9maWxlcygpIHsgcmV0dXJuIG1fYXJyYXlQcm9maWxlQ291bnQ7IH0KLSAgICBVbmxp
bmtlZEFycmF5QWxsb2NhdGlvblByb2ZpbGUgYWRkQXJyYXlBbGxvY2F0aW9uUHJvZmlsZSgpIHsg
cmV0dXJuIG1fYXJyYXlBbGxvY2F0aW9uUHJvZmlsZUNvdW50Kys7IH0KLSAgICB1bnNpZ25lZCBu
dW1iZXJPZkFycmF5QWxsb2NhdGlvblByb2ZpbGVzKCkgeyByZXR1cm4gbV9hcnJheUFsbG9jYXRp
b25Qcm9maWxlQ291bnQ7IH0KLSAgICBVbmxpbmtlZE9iamVjdEFsbG9jYXRpb25Qcm9maWxlIGFk
ZE9iamVjdEFsbG9jYXRpb25Qcm9maWxlKCkgeyByZXR1cm4gbV9vYmplY3RBbGxvY2F0aW9uUHJv
ZmlsZUNvdW50Kys7IH0KLSAgICB1bnNpZ25lZCBudW1iZXJPZk9iamVjdEFsbG9jYXRpb25Qcm9m
aWxlcygpIHsgcmV0dXJuIG1fb2JqZWN0QWxsb2NhdGlvblByb2ZpbGVDb3VudDsgfQotICAgIFVu
bGlua2VkVmFsdWVQcm9maWxlIGFkZFZhbHVlUHJvZmlsZSgpIHsgcmV0dXJuIG1fdmFsdWVQcm9m
aWxlQ291bnQrKzsgfQotICAgIHVuc2lnbmVkIG51bWJlck9mVmFsdWVQcm9maWxlcygpIHsgcmV0
dXJuIG1fdmFsdWVQcm9maWxlQ291bnQ7IH0KLQotICAgIFVubGlua2VkTExJbnRDYWxsTGlua0lu
Zm8gYWRkTExJbnRDYWxsTGlua0luZm8oKSB7IHJldHVybiBtX2xsaW50Q2FsbExpbmtJbmZvQ291
bnQrKzsgfQotICAgIHVuc2lnbmVkIG51bWJlck9mTExpbnRDYWxsTGlua0luZm9zKCkgeyByZXR1
cm4gbV9sbGludENhbGxMaW5rSW5mb0NvdW50OyB9Ci0KLSAgICBDb2RlVHlwZSBjb2RlVHlwZSgp
IGNvbnN0IHsgcmV0dXJuIG1fY29kZVR5cGU7IH0KLQotICAgIFZpcnR1YWxSZWdpc3RlciB0aGlz
UmVnaXN0ZXIoKSBjb25zdCB7IHJldHVybiBtX3RoaXNSZWdpc3RlcjsgfQotICAgIFZpcnR1YWxS
ZWdpc3RlciBzY29wZVJlZ2lzdGVyKCkgY29uc3QgeyByZXR1cm4gbV9zY29wZVJlZ2lzdGVyOyB9
Ci0KLSAgICB2b2lkIGFkZFByb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb24odW5zaWduZWQgcHJvcGVy
dHlBY2Nlc3NJbnN0cnVjdGlvbikKLSAgICB7Ci0gICAgICAgIG1fcHJvcGVydHlBY2Nlc3NJbnN0
cnVjdGlvbnMuYXBwZW5kKHByb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb24pOwotICAgIH0KLQotICAg
IHNpemVfdCBudW1iZXJPZlByb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25zKCkgY29uc3QgeyByZXR1
cm4gbV9wcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9ucy5zaXplKCk7IH0KLSAgICBjb25zdCBWZWN0
b3I8dW5zaWduZWQ+JiBwcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9ucygpIGNvbnN0IHsgcmV0dXJu
IG1fcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbnM7IH0KLQotICAgIHR5cGVkZWYgVmVjdG9yPEpT
VmFsdWU+IENvbnN0YW50QnVmZmVyOwotCi0gICAgc2l6ZV90IGNvbnN0YW50QnVmZmVyQ291bnQo
KSB7IEFTU0VSVChtX3JhcmVEYXRhKTsgcmV0dXJuIG1fcmFyZURhdGEtPm1fY29uc3RhbnRCdWZm
ZXJzLnNpemUoKTsgfQotICAgIHVuc2lnbmVkIGFkZENvbnN0YW50QnVmZmVyKHVuc2lnbmVkIGxl
bmd0aCkKLSAgICB7Ci0gICAgICAgIGNyZWF0ZVJhcmVEYXRhSWZOZWNlc3NhcnkoKTsKLSAgICAg
ICAgdW5zaWduZWQgc2l6ZSA9IG1fcmFyZURhdGEtPm1fY29uc3RhbnRCdWZmZXJzLnNpemUoKTsK
LSAgICAgICAgbV9yYXJlRGF0YS0+bV9jb25zdGFudEJ1ZmZlcnMuYXBwZW5kKFZlY3RvcjxKU1Zh
bHVlPihsZW5ndGgpKTsKLSAgICAgICAgcmV0dXJuIHNpemU7Ci0gICAgfQotCi0gICAgY29uc3Qg
Q29uc3RhbnRCdWZmZXImIGNvbnN0YW50QnVmZmVyKHVuc2lnbmVkIGluZGV4KSBjb25zdAotICAg
IHsKLSAgICAgICAgQVNTRVJUKG1fcmFyZURhdGEpOwotICAgICAgICByZXR1cm4gbV9yYXJlRGF0
YS0+bV9jb25zdGFudEJ1ZmZlcnNbaW5kZXhdOwotICAgIH0KLQotICAgIENvbnN0YW50QnVmZmVy
JiBjb25zdGFudEJ1ZmZlcih1bnNpZ25lZCBpbmRleCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVCht
X3JhcmVEYXRhKTsKLSAgICAgICAgcmV0dXJuIG1fcmFyZURhdGEtPm1fY29uc3RhbnRCdWZmZXJz
W2luZGV4XTsKLSAgICB9Ci0KLSAgICBib29sIGhhc1JhcmVEYXRhKCkgY29uc3QgeyByZXR1cm4g
bV9yYXJlRGF0YS5nZXQoKTsgfQotCi0gICAgaW50IGxpbmVOdW1iZXJGb3JCeXRlY29kZU9mZnNl
dCh1bnNpZ25lZCBieXRlY29kZU9mZnNldCk7Ci0KLSAgICB2b2lkIGV4cHJlc3Npb25SYW5nZUZv
ckJ5dGVjb2RlT2Zmc2V0KHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0LCBpbnQmIGRpdm90LAotICAg
ICAgICBpbnQmIHN0YXJ0T2Zmc2V0LCBpbnQmIGVuZE9mZnNldCwgdW5zaWduZWQmIGxpbmUsIHVu
c2lnbmVkJiBjb2x1bW4pIGNvbnN0OwotCi0gICAgYm9vbCB0eXBlUHJvZmlsZXJFeHByZXNzaW9u
SW5mb0ZvckJ5dGVjb2RlT2Zmc2V0KHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0LCB1bnNpZ25lZCYg
c3RhcnREaXZvdCwgdW5zaWduZWQmIGVuZERpdm90KTsKLQotICAgIHZvaWQgcmVjb3JkUGFyc2Uo
Q29kZUZlYXR1cmVzIGZlYXR1cmVzLCBib29sIGhhc0NhcHR1cmVkVmFyaWFibGVzLCB1bnNpZ25l
ZCBmaXJzdExpbmUsIHVuc2lnbmVkIGxpbmVDb3VudCwgdW5zaWduZWQgZW5kQ29sdW1uKQotICAg
IHsKLSAgICAgICAgbV9mZWF0dXJlcyA9IGZlYXR1cmVzOwotICAgICAgICBtX2hhc0NhcHR1cmVk
VmFyaWFibGVzID0gaGFzQ2FwdHVyZWRWYXJpYWJsZXM7Ci0gICAgICAgIG1fZmlyc3RMaW5lID0g
Zmlyc3RMaW5lOwotICAgICAgICBtX2xpbmVDb3VudCA9IGxpbmVDb3VudDsKLSAgICAgICAgLy8g
Rm9yIHRoZSBVbmxpbmtlZENvZGVCbG9jaywgc3RhcnRDb2x1bW4gaXMgYWx3YXlzIDAuCi0gICAg
ICAgIG1fZW5kQ29sdW1uID0gZW5kQ29sdW1uOwotICAgIH0KLQotICAgIGNvbnN0IFN0cmluZyYg
c291cmNlVVJMRGlyZWN0aXZlKCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2VVUkxEaXJlY3RpdmU7
IH0KLSAgICBjb25zdCBTdHJpbmcmIHNvdXJjZU1hcHBpbmdVUkxEaXJlY3RpdmUoKSBjb25zdCB7
IHJldHVybiBtX3NvdXJjZU1hcHBpbmdVUkxEaXJlY3RpdmU7IH0KLSAgICB2b2lkIHNldFNvdXJj
ZVVSTERpcmVjdGl2ZShjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCkgeyBtX3NvdXJjZVVSTERpcmVj
dGl2ZSA9IHNvdXJjZVVSTDsgfQotICAgIHZvaWQgc2V0U291cmNlTWFwcGluZ1VSTERpcmVjdGl2
ZShjb25zdCBTdHJpbmcmIHNvdXJjZU1hcHBpbmdVUkwpIHsgbV9zb3VyY2VNYXBwaW5nVVJMRGly
ZWN0aXZlID0gc291cmNlTWFwcGluZ1VSTDsgfQotCi0gICAgQ29kZUZlYXR1cmVzIGNvZGVGZWF0
dXJlcygpIGNvbnN0IHsgcmV0dXJuIG1fZmVhdHVyZXM7IH0KLSAgICBib29sIGhhc0NhcHR1cmVk
VmFyaWFibGVzKCkgY29uc3QgeyByZXR1cm4gbV9oYXNDYXB0dXJlZFZhcmlhYmxlczsgfQotICAg
IHVuc2lnbmVkIGZpcnN0TGluZSgpIGNvbnN0IHsgcmV0dXJuIG1fZmlyc3RMaW5lOyB9Ci0gICAg
dW5zaWduZWQgbGluZUNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9saW5lQ291bnQ7IH0KLSAgICBB
TFdBWVNfSU5MSU5FIHVuc2lnbmVkIHN0YXJ0Q29sdW1uKCkgY29uc3QgeyByZXR1cm4gMDsgfQot
ICAgIHVuc2lnbmVkIGVuZENvbHVtbigpIGNvbnN0IHsgcmV0dXJuIG1fZW5kQ29sdW1uOyB9Ci0K
LSAgICB2b2lkIGFkZE9wUHJvZmlsZUNvbnRyb2xGbG93Qnl0ZWNvZGVPZmZzZXQoc2l6ZV90IG9m
ZnNldCkKLSAgICB7Ci0gICAgICAgIGNyZWF0ZVJhcmVEYXRhSWZOZWNlc3NhcnkoKTsKLSAgICAg
ICAgbV9yYXJlRGF0YS0+bV9vcFByb2ZpbGVDb250cm9sRmxvd0J5dGVjb2RlT2Zmc2V0cy5hcHBl
bmQob2Zmc2V0KTsKLSAgICB9Ci0gICAgY29uc3QgVmVjdG9yPHNpemVfdD4mIG9wUHJvZmlsZUNv
bnRyb2xGbG93Qnl0ZWNvZGVPZmZzZXRzKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVCht
X3JhcmVEYXRhKTsKLSAgICAgICAgcmV0dXJuIG1fcmFyZURhdGEtPm1fb3BQcm9maWxlQ29udHJv
bEZsb3dCeXRlY29kZU9mZnNldHM7Ci0gICAgfQotICAgIGJvb2wgaGFzT3BQcm9maWxlQ29udHJv
bEZsb3dCeXRlY29kZU9mZnNldHMoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fcmFy
ZURhdGEgJiYgIW1fcmFyZURhdGEtPm1fb3BQcm9maWxlQ29udHJvbEZsb3dCeXRlY29kZU9mZnNl
dHMuaXNFbXB0eSgpOwotICAgIH0KLQotICAgIHZvaWQgZHVtcEV4cHJlc3Npb25SYW5nZUluZm8o
KTsgLy8gRm9yIGRlYnVnZ2luZyBwdXJwb3NlIG9ubHkuCi0KLSAgICBib29sIHdhc0NvbXBpbGVk
V2l0aERlYnVnZ2luZ09wY29kZXMoKSBjb25zdCB7IHJldHVybiBtX3dhc0NvbXBpbGVkV2l0aERl
YnVnZ2luZ09wY29kZXM7IH0KLQotICAgIFRyaVN0YXRlIGRpZE9wdGltaXplKCkgY29uc3QgeyBy
ZXR1cm4gbV9kaWRPcHRpbWl6ZTsgfQotICAgIHZvaWQgc2V0RGlkT3B0aW1pemUoVHJpU3RhdGUg
ZGlkT3B0aW1pemUpIHsgbV9kaWRPcHRpbWl6ZSA9IGRpZE9wdGltaXplOyB9Ci0KLXByb3RlY3Rl
ZDoKLSAgICBVbmxpbmtlZENvZGVCbG9jayhWTSosIFN0cnVjdHVyZSosIENvZGVUeXBlLCBjb25z
dCBFeGVjdXRhYmxlSW5mbyYsIERlYnVnZ2VyTW9kZSk7Ci0gICAgflVubGlua2VkQ29kZUJsb2Nr
KCk7Ci0KLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiB2bSkKLSAgICB7Ci0gICAgICAgIEJh
c2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgZnJpZW5kIGNs
YXNzIEJ5dGVjb2RlUmV3cml0ZXI7Ci0gICAgdm9pZCBhcHBseU1vZGlmaWNhdGlvbihCeXRlY29k
ZVJld3JpdGVyJik7Ci0KLSAgICB2b2lkIGNyZWF0ZVJhcmVEYXRhSWZOZWNlc3NhcnkoKQotICAg
IHsKLSAgICAgICAgaWYgKCFtX3JhcmVEYXRhKQotICAgICAgICAgICAgbV9yYXJlRGF0YSA9IHN0
ZDo6bWFrZV91bmlxdWU8UmFyZURhdGE+KCk7Ci0gICAgfQotCi0gICAgdm9pZCBnZXRMaW5lQW5k
Q29sdW1uKGNvbnN0IEV4cHJlc3Npb25SYW5nZUluZm8mLCB1bnNpZ25lZCYgbGluZSwgdW5zaWdu
ZWQmIGNvbHVtbikgY29uc3Q7Ci0KLSAgICBpbnQgbV9udW1QYXJhbWV0ZXJzOwotCi0gICAgc3Rk
Ojp1bmlxdWVfcHRyPFVubGlua2VkSW5zdHJ1Y3Rpb25TdHJlYW0+IG1fdW5saW5rZWRJbnN0cnVj
dGlvbnM7Ci0KLSAgICBWaXJ0dWFsUmVnaXN0ZXIgbV90aGlzUmVnaXN0ZXI7Ci0gICAgVmlydHVh
bFJlZ2lzdGVyIG1fc2NvcGVSZWdpc3RlcjsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9nbG9iYWxP
YmplY3RSZWdpc3RlcjsKLQotICAgIFN0cmluZyBtX3NvdXJjZVVSTERpcmVjdGl2ZTsKLSAgICBT
dHJpbmcgbV9zb3VyY2VNYXBwaW5nVVJMRGlyZWN0aXZlOwotCi0gICAgdW5zaWduZWQgbV91c2Vz
RXZhbCA6IDE7Ci0gICAgdW5zaWduZWQgbV9pc1N0cmljdE1vZGUgOiAxOwotICAgIHVuc2lnbmVk
IG1faXNDb25zdHJ1Y3RvciA6IDE7Ci0gICAgdW5zaWduZWQgbV9oYXNDYXB0dXJlZFZhcmlhYmxl
cyA6IDE7Ci0gICAgdW5zaWduZWQgbV9pc0J1aWx0aW5GdW5jdGlvbiA6IDE7Ci0gICAgdW5zaWdu
ZWQgbV9zdXBlckJpbmRpbmcgOiAxOwotICAgIHVuc2lnbmVkIG1fc2NyaXB0TW9kZTogMTsKLSAg
ICB1bnNpZ25lZCBtX2lzQXJyb3dGdW5jdGlvbkNvbnRleHQgOiAxOwotICAgIHVuc2lnbmVkIG1f
aXNDbGFzc0NvbnRleHQgOiAxOwotICAgIHVuc2lnbmVkIG1fd2FzQ29tcGlsZWRXaXRoRGVidWdn
aW5nT3Bjb2RlcyA6IDE7Ci0gICAgdW5zaWduZWQgbV9jb25zdHJ1Y3RvcktpbmQgOiAyOwotICAg
IHVuc2lnbmVkIG1fZGVyaXZlZENvbnRleHRUeXBlIDogMjsKLSAgICB1bnNpZ25lZCBtX2V2YWxD
b250ZXh0VHlwZSA6IDI7Ci0gICAgdW5zaWduZWQgbV9maXJzdExpbmU7Ci0gICAgdW5zaWduZWQg
bV9saW5lQ291bnQ7Ci0gICAgdW5zaWduZWQgbV9lbmRDb2x1bW47Ci0KLSAgICBUcmlTdGF0ZSBt
X2RpZE9wdGltaXplOwotICAgIFNvdXJjZVBhcnNlTW9kZSBtX3BhcnNlTW9kZTsKLSAgICBDb2Rl
RmVhdHVyZXMgbV9mZWF0dXJlczsKLSAgICBDb2RlVHlwZSBtX2NvZGVUeXBlOwotCi0gICAgVmVj
dG9yPHVuc2lnbmVkPiBtX2p1bXBUYXJnZXRzOwotCi0gICAgVmVjdG9yPHVuc2lnbmVkPiBtX3By
b3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25zOwotCi0gICAgLy8gQ29uc3RhbnQgUG9vbHMKLSAgICBW
ZWN0b3I8SWRlbnRpZmllcj4gbV9pZGVudGlmaWVyczsKLSAgICBWZWN0b3I8V3JpdGVCYXJyaWVy
PFVua25vd24+PiBtX2NvbnN0YW50UmVnaXN0ZXJzOwotICAgIFZlY3RvcjxTb3VyY2VDb2RlUmVw
cmVzZW50YXRpb24+IG1fY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOwotICAgIHR5
cGVkZWYgVmVjdG9yPFdyaXRlQmFycmllcjxVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZT4+IEZ1
bmN0aW9uRXhwcmVzc2lvblZlY3RvcjsKLSAgICBGdW5jdGlvbkV4cHJlc3Npb25WZWN0b3IgbV9m
dW5jdGlvbkRlY2xzOwotICAgIEZ1bmN0aW9uRXhwcmVzc2lvblZlY3RvciBtX2Z1bmN0aW9uRXhw
cnM7Ci0gICAgc3RkOjphcnJheTx1bnNpZ25lZCwgTGlua1RpbWVDb25zdGFudENvdW50PiBtX2xp
bmtUaW1lQ29uc3RhbnRzOwotCi0gICAgdW5zaWduZWQgbV9hcnJheVByb2ZpbGVDb3VudDsKLSAg
ICB1bnNpZ25lZCBtX2FycmF5QWxsb2NhdGlvblByb2ZpbGVDb3VudDsKLSAgICB1bnNpZ25lZCBt
X29iamVjdEFsbG9jYXRpb25Qcm9maWxlQ291bnQ7Ci0gICAgdW5zaWduZWQgbV92YWx1ZVByb2Zp
bGVDb3VudDsKLSAgICB1bnNpZ25lZCBtX2xsaW50Q2FsbExpbmtJbmZvQ291bnQ7Ci0KLXB1Ymxp
YzoKLSAgICBzdHJ1Y3QgUmFyZURhdGEgewotICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKLSAgICBwdWJsaWM6Ci0gICAgICAgIFZlY3RvcjxVbmxpbmtlZEhhbmRsZXJJbmZvPiBtX2V4
Y2VwdGlvbkhhbmRsZXJzOwotCi0gICAgICAgIC8vIFJhcmUgQ29uc3RhbnRzCi0gICAgICAgIFZl
Y3RvcjxXcml0ZUJhcnJpZXI8UmVnRXhwPj4gbV9yZWdleHBzOwotCi0gICAgICAgIC8vIEJ1ZmZl
cnMgdXNlZCBmb3IgbGFyZ2UgYXJyYXkgbGl0ZXJhbHMKLSAgICAgICAgVmVjdG9yPENvbnN0YW50
QnVmZmVyPiBtX2NvbnN0YW50QnVmZmVyczsKLQotICAgICAgICAvLyBKdW1wIFRhYmxlcwotICAg
ICAgICBWZWN0b3I8VW5saW5rZWRTaW1wbGVKdW1wVGFibGU+IG1fc3dpdGNoSnVtcFRhYmxlczsK
LSAgICAgICAgVmVjdG9yPFVubGlua2VkU3RyaW5nSnVtcFRhYmxlPiBtX3N0cmluZ1N3aXRjaEp1
bXBUYWJsZXM7Ci0KLSAgICAgICAgVmVjdG9yPEV4cHJlc3Npb25SYW5nZUluZm86OkZhdFBvc2l0
aW9uPiBtX2V4cHJlc3Npb25JbmZvRmF0UG9zaXRpb25zOwotCi0gICAgICAgIHN0cnVjdCBUeXBl
UHJvZmlsZXJFeHByZXNzaW9uUmFuZ2UgewotICAgICAgICAgICAgdW5zaWduZWQgbV9zdGFydERp
dm90OwotICAgICAgICAgICAgdW5zaWduZWQgbV9lbmREaXZvdDsKLSAgICAgICAgfTsKLSAgICAg
ICAgSGFzaE1hcDx1bnNpZ25lZCwgVHlwZVByb2ZpbGVyRXhwcmVzc2lvblJhbmdlPiBtX3R5cGVQ
cm9maWxlckluZm9NYXA7Ci0gICAgICAgIFZlY3RvcjxzaXplX3Q+IG1fb3BQcm9maWxlQ29udHJv
bEZsb3dCeXRlY29kZU9mZnNldHM7Ci0gICAgfTsKLQotcHJpdmF0ZToKLSAgICBzdGQ6OnVuaXF1
ZV9wdHI8UmFyZURhdGE+IG1fcmFyZURhdGE7Ci0gICAgVmVjdG9yPEV4cHJlc3Npb25SYW5nZUlu
Zm8+IG1fZXhwcmVzc2lvbkluZm87Ci0KLXByb3RlY3RlZDoKLSAgICBzdGF0aWMgdm9pZCB2aXNp
dENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7Ci0gICAgc3RhdGljIHNpemVfdCBlc3Rp
bWF0ZWRTaXplKEpTQ2VsbCopOwotCi1wdWJsaWM6Ci0gICAgREVDTEFSRV9JTkZPOwotfTsKLQot
Y2xhc3MgVW5saW5rZWRHbG9iYWxDb2RlQmxvY2sgOiBwdWJsaWMgVW5saW5rZWRDb2RlQmxvY2sg
ewotcHVibGljOgotICAgIHR5cGVkZWYgVW5saW5rZWRDb2RlQmxvY2sgQmFzZTsKLQotcHJvdGVj
dGVkOgotICAgIFVubGlua2VkR2xvYmFsQ29kZUJsb2NrKFZNKiB2bSwgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIENvZGVUeXBlIGNvZGVUeXBlLCBjb25zdCBFeGVjdXRhYmxlSW5mbyYgaW5mbywgRGVi
dWdnZXJNb2RlIGRlYnVnZ2VyTW9kZSkKLSAgICAgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUsIGNv
ZGVUeXBlLCBpbmZvLCBkZWJ1Z2dlck1vZGUpCi0gICAgewotICAgIH0KLQotICAgIERFQ0xBUkVf
SU5GTzsKLX07Ci0KLWNsYXNzIFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jayBmaW5hbCA6IHB1Ymxp
YyBVbmxpbmtlZEdsb2JhbENvZGVCbG9jayB7Ci1wcml2YXRlOgotICAgIGZyaWVuZCBjbGFzcyBD
b2RlQ2FjaGU7Ci0gICAgc3RhdGljIFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jayogY3JlYXRlKFZN
KiB2bSwgY29uc3QgRXhlY3V0YWJsZUluZm8mIGluZm8sIERlYnVnZ2VyTW9kZSBkZWJ1Z2dlck1v
ZGUpCi0gICAgewotICAgICAgICBVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2sqIGluc3RhbmNlID0g
bmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8VW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrPih2bS0+
aGVhcCkpIFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jayh2bSwgdm0tPnVubGlua2VkUHJvZ3JhbUNv
ZGVCbG9ja1N0cnVjdHVyZS5nZXQoKSwgaW5mbywgZGVidWdnZXJNb2RlKTsKLSAgICAgICAgaW5z
dGFuY2UtPmZpbmlzaENyZWF0aW9uKCp2bSk7Ci0gICAgICAgIHJldHVybiBpbnN0YW5jZTsKLSAg
ICB9Ci0KLXB1YmxpYzoKLSAgICB0eXBlZGVmIFVubGlua2VkR2xvYmFsQ29kZUJsb2NrIEJhc2U7
Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0
dXJlRmxhZ3MgfCBTdHJ1Y3R1cmVJc0ltbW9ydGFsOwotCi0gICAgc3RhdGljIHZvaWQgZGVzdHJv
eShKU0NlbGwqKTsKLQotICAgIHZvaWQgc2V0VmFyaWFibGVEZWNsYXJhdGlvbnMoY29uc3QgVmFy
aWFibGVFbnZpcm9ubWVudCYgZW52aXJvbm1lbnQpIHsgbV92YXJEZWNsYXJhdGlvbnMgPSBlbnZp
cm9ubWVudDsgfQotICAgIGNvbnN0IFZhcmlhYmxlRW52aXJvbm1lbnQmIHZhcmlhYmxlRGVjbGFy
YXRpb25zKCkgY29uc3QgeyByZXR1cm4gbV92YXJEZWNsYXJhdGlvbnM7IH0KLQotICAgIHZvaWQg
c2V0TGV4aWNhbERlY2xhcmF0aW9ucyhjb25zdCBWYXJpYWJsZUVudmlyb25tZW50JiBlbnZpcm9u
bWVudCkgeyBtX2xleGljYWxEZWNsYXJhdGlvbnMgPSBlbnZpcm9ubWVudDsgfQotICAgIGNvbnN0
IFZhcmlhYmxlRW52aXJvbm1lbnQmIGxleGljYWxEZWNsYXJhdGlvbnMoKSBjb25zdCB7IHJldHVy
biBtX2xleGljYWxEZWNsYXJhdGlvbnM7IH0KLQotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKLQotcHJpdmF0ZToKLSAgICBVbmxpbmtlZFByb2dy
YW1Db2RlQmxvY2soVk0qIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgRXhlY3V0YWJs
ZUluZm8mIGluZm8sIERlYnVnZ2VyTW9kZSBkZWJ1Z2dlck1vZGUpCi0gICAgICAgIDogQmFzZSh2
bSwgc3RydWN0dXJlLCBHbG9iYWxDb2RlLCBpbmZvLCBkZWJ1Z2dlck1vZGUpCi0gICAgewotICAg
IH0KLQotICAgIFZhcmlhYmxlRW52aXJvbm1lbnQgbV92YXJEZWNsYXJhdGlvbnM7Ci0gICAgVmFy
aWFibGVFbnZpcm9ubWVudCBtX2xleGljYWxEZWNsYXJhdGlvbnM7Ci0KLXB1YmxpYzoKLSAgICBz
dGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvKQotICAgIHsKLSAgICAgICAgcmV0dXJuIFN0cnVj
dHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvLCBUeXBlSW5mbyhVbmxpbmtlZFBy
b2dyYW1Db2RlQmxvY2tUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Ci0gICAgfQotCi0g
ICAgREVDTEFSRV9JTkZPOwotfTsKLQotY2xhc3MgVW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJs
b2NrIGZpbmFsIDogcHVibGljIFVubGlua2VkR2xvYmFsQ29kZUJsb2NrIHsKLXByaXZhdGU6Ci0g
ICAgZnJpZW5kIGNsYXNzIENvZGVDYWNoZTsKLSAgICBzdGF0aWMgVW5saW5rZWRNb2R1bGVQcm9n
cmFtQ29kZUJsb2NrKiBjcmVhdGUoVk0qIHZtLCBjb25zdCBFeGVjdXRhYmxlSW5mbyYgaW5mbywg
RGVidWdnZXJNb2RlIGRlYnVnZ2VyTW9kZSkKLSAgICB7Ci0gICAgICAgIFVubGlua2VkTW9kdWxl
UHJvZ3JhbUNvZGVCbG9jayogaW5zdGFuY2UgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxV
bmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2s+KHZtLT5oZWFwKSkgVW5saW5rZWRNb2R1bGVQ
cm9ncmFtQ29kZUJsb2NrKHZtLCB2bS0+dW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrU3Ry
dWN0dXJlLmdldCgpLCBpbmZvLCBkZWJ1Z2dlck1vZGUpOwotICAgICAgICBpbnN0YW5jZS0+Zmlu
aXNoQ3JlYXRpb24oKnZtKTsKLSAgICAgICAgcmV0dXJuIGluc3RhbmNlOwotICAgIH0KLQotcHVi
bGljOgotICAgIHR5cGVkZWYgVW5saW5rZWRHbG9iYWxDb2RlQmxvY2sgQmFzZTsKLSAgICBzdGF0
aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8
IFN0cnVjdHVyZUlzSW1tb3J0YWw7Ci0KLSAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCop
OwotCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYp
OwotCi0gICAgLy8gVGhpcyBvZmZzZXQgcmVwcmVzZW50cyB0aGUgY29uc3RhbnQgcmVnaXN0ZXIg
b2Zmc2V0IHRvIHRoZSBzdG9yZWQgc3ltYm9sIHRhYmxlIHRoYXQgcmVwcmVzZW50cyB0aGUgbGF5
b3V0IG9mIHRoZQotICAgIC8vIG1vZHVsZSBlbnZpcm9ubWVudC4gVGhpcyBzeW1ib2wgdGFibGUg
aXMgY3JlYXRlZCBieSB0aGUgYnl0ZSBjb2RlIGdlbmVyYXRvciBzaW5jZSB0aGUgbW9kdWxlIGVu
dmlyb25tZW50IGluY2x1ZGVzCi0gICAgLy8gdGhlIHRvcC1tb3N0IGxleGljYWwgY2FwdHVyZWQg
dmFyaWFibGVzIGluc2lkZSB0aGUgbW9kdWxlIGNvZGUuIFRoaXMgbWVhbnMgdGhhdCwgb25jZSB0
aGUgbW9kdWxlIGVudmlyb25tZW50IGlzCi0gICAgLy8gYWxsb2NhdGVkIGFuZCBpbnN0YW50aWF0
ZWQgZnJvbSB0aGlzIHN5bWJvbCB0YWJsZSwgaXQgaXMgdGl0ZWx5IGNvdXBsZWQgd2l0aCB0aGUg
c3BlY2lmaWMgdW5saW5rZWQgbW9kdWxlIHByb2dyYW0KLSAgICAvLyBjb2RlIGJsb2NrIGFuZCB0
aGUgc3RvcmVkIHN5bWJvbCB0YWJsZS4gU28gYmVmb3JlIGV4ZWN1dGluZyB0aGUgbW9kdWxlIGNv
ZGUsIHdlIHNob3VsZCBub3QgY2xlYXIgdGhlIHVubGlua2VkIG1vZHVsZQotICAgIC8vIHByb2dy
YW0gY29kZSBibG9jayBpbiB0aGUgbW9kdWxlIGV4ZWN1dGFibGUuIFRoaXMgcmVxdWlyZW1lbnQg
aXMgbWV0IGJlY2F1c2UgdGhlIGdhcmJhZ2UgY29sbGVjdG9yIG9ubHkgY2xlYXJzCi0gICAgLy8g
dW5saW5rZWQgY29kZSBpbiAoMSkgdW5tYXJrZWQgZXhlY3V0YWJsZXMgYW5kICgyKSBmdW5jdGlv
biBleGVjdXRhYmxlcy4KLSAgICAvLwotICAgIC8vIFNpbmNlIHRoZSBmdW5jdGlvbiBjb2RlIG1h
eSBiZSBleGVjdXRlZCByZXBlYXRlZGx5IGFuZCB0aGUgZW52aXJvbm1lbnQgb2YgZWFjaCBmdW5j
dGlvbiBleGVjdXRpb24gaXMgZGlmZmVyZW50LAotICAgIC8vIHRoZSBmdW5jdGlvbiBjb2RlIG5l
ZWQgdG8gYWxsb2NhdGUgYW5kIGluc3RhbnRpYXRlIHRoZSBlbnZpcm9ubWVudCBpbiB0aGUgcHJv
bG9ndWUgb2YgdGhlIGZ1bmN0aW9uIGNvZGUuIE9uIHRoZQotICAgIC8vIG90aGVyIGhhbmQsIHRo
ZSBtb2R1bGUgY29kZSBpcyBleGVjdXRlZCBvbmx5IG9uY2UuIFNvIHdlIGNhbiBpbnN0YW50aWF0
ZSB0aGUgbW9kdWxlIGVudmlyb25tZW50IG91dHNpZGUgdGhlIG1vZHVsZQotICAgIC8vIGNvZGUu
IEF0IHRoYXQgdGltZSwgd2UgY29uc3RydWN0IHRoZSBtb2R1bGUgZW52aXJvbm1lbnQgYnkgdXNp
bmcgdGhlIHN5bWJvbCB0YWJsZSB0aGF0IGlzIGhlbGQgYnkgdGhlIG1vZHVsZSBleGVjdXRhYmxl
LgotICAgIC8vIFRoZSBzeW1ib2wgdGFibGUgaGVsZCBieSB0aGUgZXhlY3V0YWJsZSBpcyB0aGUg
Y2xvbmVkIG9uZSBmcm9tIG9uZSBpbiB0aGUgdW5saW5rZWQgY29kZSBibG9jay4gSW5zdGFudGlh
dGluZyB0aGUgbW9kdWxlCi0gICAgLy8gZW52aXJvbm1lbnQgYmVmb3JlIGV4ZWN1dGluZyBhbmQg
bGlua2luZyB0aGUgbW9kdWxlIGNvZGUgaXMgcmVxdWlyZWQgdG8gbGluayB0aGUgaW1wb3J0ZWQg
YmluZGluZ3MgYmV0d2VlbiB0aGUgbW9kdWxlcy4KLSAgICAvLwotICAgIC8vIFRoZSB1bmxpbmtl
ZCBtb2R1bGUgcHJvZ3JhbSBjb2RlIGJsb2NrIG9ubHkgaG9sZHMgdGhlIHByZS1jbG9uZWQgc3lt
Ym9sIHRhYmxlIGluIGl0cyBjb25zdGFudCByZWdpc3RlciBwb29sLiBJdCBkb2VzCi0gICAgLy8g
bm90IGhvbGQgdGhlIGluc3RhbnRpYXRlZCBtb2R1bGUgZW52aXJvbm1lbnQuIFNvIHdoaWxlIHRo
ZSBtb2R1bGUgZW52aXJvbm1lbnQgcmVxdWlyZXMgdGhlIHNwZWNpZmljIHVubGlua2VkIG1vZHVs
ZQotICAgIC8vIHByb2dyYW0gY29kZSBibG9jaywgdGhlIHVubGlua2VkIG1vZHVsZSBjb2RlIGJs
b2NrIGNhbiBiZSB1c2VkIGZvciB0aGUgbW9kdWxlIGVudmlyb25tZW50IGluc3RhbnRpYXRlZCBm
cm9tIHRoaXMKLSAgICAvLyB1bmxpbmtlZCBjb2RlIGJsb2NrLiBUaGVyZSBpcyAxOk4gcmVsYXRp
b24gYmV0d2VlbiB0aGUgdW5saW5rZWQgbW9kdWxlIGNvZGUgYmxvY2sgYW5kIHRoZSBtb2R1bGUg
ZW52aXJvbm1lbnRzLiBTbyB0aGUKLSAgICAvLyB1bmxpbmtlZCBtb2R1bGUgcHJvZ3JhbSBjb2Rl
IGJsb2NrIGNhbiBiZSBjYWNoZWQuCi0gICAgLy8KLSAgICAvLyBPbiB0aGUgb3RoZXIgaGFuZCwg
dGhlIGxpbmtlZCBjb2RlIGJsb2NrIGZvciB0aGUgbW9kdWxlIGVudmlyb25tZW50IGluY2x1ZGVz
IHRoZSByZXNvbHZlZCByZWZlcmVuY2VzIHRvIHRoZSBpbXBvcnRlZAotICAgIC8vIGJpbmRpbmdz
LiBUaGUgaW1wb3J0ZWQgYmluZGluZyByZWZlcmVuY2VzIHRoZSBvdGhlciBtb2R1bGUgZW52aXJv
bm1lbnQsIHNvIHRoZSBsaW5rZWQgY29kZSBibG9jayBpcyB0aXRseSBjb3VwbGVkCi0gICAgLy8g
d2l0aCB0aGUgc3BlY2lmaWMgc2V0IG9mIHRoZSBtb2R1bGUgZW52aXJvbm1lbnRzLiBUaHVzLCB0
aGUgbGlua2VkIGNvZGUgYmxvY2sgc2hvdWxkIG5vdCBiZSBjYWNoZWQuCi0gICAgaW50IG1vZHVs
ZUVudmlyb25tZW50U3ltYm9sVGFibGVDb25zdGFudFJlZ2lzdGVyT2Zmc2V0KCkgeyByZXR1cm4g
bV9tb2R1bGVFbnZpcm9ubWVudFN5bWJvbFRhYmxlQ29uc3RhbnRSZWdpc3Rlck9mZnNldDsgfQot
ICAgIHZvaWQgc2V0TW9kdWxlRW52aXJvbm1lbnRTeW1ib2xUYWJsZUNvbnN0YW50UmVnaXN0ZXJP
ZmZzZXQoaW50IG9mZnNldCkKLSAgICB7Ci0gICAgICAgIG1fbW9kdWxlRW52aXJvbm1lbnRTeW1i
b2xUYWJsZUNvbnN0YW50UmVnaXN0ZXJPZmZzZXQgPSBvZmZzZXQ7Ci0gICAgfQotCi1wcml2YXRl
OgotICAgIFVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayhWTSogdm0sIFN0cnVjdHVyZSog
c3RydWN0dXJlLCBjb25zdCBFeGVjdXRhYmxlSW5mbyYgaW5mbywgRGVidWdnZXJNb2RlIGRlYnVn
Z2VyTW9kZSkKLSAgICAgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUsIE1vZHVsZUNvZGUsIGluZm8s
IGRlYnVnZ2VyTW9kZSkKLSAgICB7Ci0gICAgfQotCi0gICAgaW50IG1fbW9kdWxlRW52aXJvbm1l
bnRTeW1ib2xUYWJsZUNvbnN0YW50UmVnaXN0ZXJPZmZzZXQgeyAwIH07Ci0KLXB1YmxpYzoKLSAg
ICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvKQotICAgIHsKLSAgICAgICAgcmV0dXJuIFN0
cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvLCBUeXBlSW5mbyhVbmxpbmtl
ZE1vZHVsZVByb2dyYW1Db2RlQmxvY2tUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Ci0g
ICAgfQotCi0gICAgREVDTEFSRV9JTkZPOwotfTsKLQogY2xhc3MgVW5saW5rZWRFdmFsQ29kZUJs
b2NrIGZpbmFsIDogcHVibGljIFVubGlua2VkR2xvYmFsQ29kZUJsb2NrIHsKIHByaXZhdGU6CiAg
ICAgZnJpZW5kIGNsYXNzIENvZGVDYWNoZTsKQEAgLTY1NCwzMyArNzEsNCBAQCBwdWJsaWM6CiAg
ICAgREVDTEFSRV9JTkZPOwogfTsKIAotY2xhc3MgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayBm
aW5hbCA6IHB1YmxpYyBVbmxpbmtlZENvZGVCbG9jayB7Ci1wdWJsaWM6Ci0gICAgdHlwZWRlZiBV
bmxpbmtlZENvZGVCbG9jayBCYXNlOwotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1
cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgU3RydWN0dXJlSXNJbW1vcnRhbDsKLQot
ICAgIHN0YXRpYyBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKiBjcmVhdGUoVk0qIHZtLCBDb2Rl
VHlwZSBjb2RlVHlwZSwgY29uc3QgRXhlY3V0YWJsZUluZm8mIGluZm8sIERlYnVnZ2VyTW9kZSBk
ZWJ1Z2dlck1vZGUpCi0gICAgewotICAgICAgICBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKiBp
bnN0YW5jZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFVubGlua2VkRnVuY3Rpb25Db2Rl
QmxvY2s+KHZtLT5oZWFwKSkgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayh2bSwgdm0tPnVubGlu
a2VkRnVuY3Rpb25Db2RlQmxvY2tTdHJ1Y3R1cmUuZ2V0KCksIGNvZGVUeXBlLCBpbmZvLCBkZWJ1
Z2dlck1vZGUpOwotICAgICAgICBpbnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24oKnZtKTsKLSAgICAg
ICAgcmV0dXJuIGluc3RhbmNlOwotICAgIH0KLQotICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlND
ZWxsKik7Ci0KLXByaXZhdGU6Ci0gICAgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayhWTSogdm0s
IFN0cnVjdHVyZSogc3RydWN0dXJlLCBDb2RlVHlwZSBjb2RlVHlwZSwgY29uc3QgRXhlY3V0YWJs
ZUluZm8mIGluZm8sIERlYnVnZ2VyTW9kZSBkZWJ1Z2dlck1vZGUpCi0gICAgICAgIDogQmFzZSh2
bSwgc3RydWN0dXJlLCBjb2RlVHlwZSwgaW5mbywgZGVidWdnZXJNb2RlKQotICAgIHsKLSAgICB9
Ci0gICAgCi1wdWJsaWM6Ci0gICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZN
JiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90bykKLSAgICB7
Ci0gICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90
bywgVHlwZUluZm8oVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9ja1R5cGUsIFN0cnVjdHVyZUZsYWdz
KSwgaW5mbygpKTsKLSAgICB9Ci0KLSAgICBERUNMQVJFX0lORk87Ci19OwotCiB9CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jay5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2Vk
RnVuY3Rpb25Db2RlQmxvY2suY3BwCShyZXZpc2lvbiAyMDgzMDgpCShmcm9tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHA6MjA4MzA4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25Db2RlQmxvY2suY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDMwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEyLTIwMTMsIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKworI2luY2x1ZGUgIlVubGlua2VkQ29kZUJsb2NrLmgiCisKKyNpbmNsdWRlICJCeXRlY29k
ZUdlbmVyYXRvci5oIgorI2luY2x1ZGUgIkJ5dGVjb2RlUmV3cml0ZXIuaCIKKyNpbmNsdWRlICJD
bGFzc0luZm8uaCIKKyNpbmNsdWRlICJDb2RlQ2FjaGUuaCIKKyNpbmNsdWRlICJFeGVjdXRhYmxl
SW5mby5oIgorI2luY2x1ZGUgIkZ1bmN0aW9uT3ZlcnJpZGVzLmgiCisjaW5jbHVkZSAiSlNTdHJp
bmcuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiUGFyc2VyLmgiCisjaW5j
bHVkZSAiUHJlY2lzZUp1bXBUYXJnZXRzSW5saW5lcy5oIgorI2luY2x1ZGUgIlNvdXJjZVByb3Zp
ZGVyLmgiCisjaW5jbHVkZSAiU3RydWN0dXJlLmgiCisjaW5jbHVkZSAiU3ltYm9sVGFibGUuaCIK
KyNpbmNsdWRlICJVbmxpbmtlZEluc3RydWN0aW9uU3RyZWFtLmgiCisjaW5jbHVkZSA8d3RmL0Rh
dGFMb2cuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NvbnN0IENsYXNzSW5mbyBVbmxpbmtlZENv
ZGVCbG9jazo6c19pbmZvID0geyAiVW5saW5rZWRDb2RlQmxvY2siLCAwLCAwLCBDUkVBVEVfTUVU
SE9EX1RBQkxFKFVubGlua2VkQ29kZUJsb2NrKSB9OworY29uc3QgQ2xhc3NJbmZvIFVubGlua2Vk
R2xvYmFsQ29kZUJsb2NrOjpzX2luZm8gPSB7ICJVbmxpbmtlZEdsb2JhbENvZGVCbG9jayIsICZC
YXNlOjpzX2luZm8sIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoVW5saW5rZWRHbG9iYWxDb2RlQmxv
Y2spIH07Citjb25zdCBDbGFzc0luZm8gVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrOjpzX2luZm8g
PSB7ICJVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2siLCAmQmFzZTo6c19pbmZvLCAwLCBDUkVBVEVf
TUVUSE9EX1RBQkxFKFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jaykgfTsKK2NvbnN0IENsYXNzSW5m
byBVbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2s6OnNfaW5mbyA9IHsgIlVubGlua2VkTW9k
dWxlUHJvZ3JhbUNvZGVCbG9jayIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIENSRUFURV9NRVRI
T0RfVEFCTEUoVW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrKSB9OworY29uc3QgQ2xhc3NJ
bmZvIFVubGlua2VkRXZhbENvZGVCbG9jazo6c19pbmZvID0geyAiVW5saW5rZWRFdmFsQ29kZUJs
b2NrIiwgJkJhc2U6OnNfaW5mbywgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShVbmxpbmtlZEV2YWxD
b2RlQmxvY2spIH07Citjb25zdCBDbGFzc0luZm8gVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jazo6
c19pbmZvID0geyAiVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayIsICZCYXNlOjpzX2luZm8sIDAs
IENSRUFURV9NRVRIT0RfVEFCTEUoVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jaykgfTsKKworVW5s
aW5rZWRDb2RlQmxvY2s6OlVubGlua2VkQ29kZUJsb2NrKFZNKiB2bSwgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIENvZGVUeXBlIGNvZGVUeXBlLCBjb25zdCBFeGVjdXRhYmxlSW5mbyYgaW5mbywgRGVi
dWdnZXJNb2RlIGRlYnVnZ2VyTW9kZSkKKyAgICA6IEJhc2UoKnZtLCBzdHJ1Y3R1cmUpCisgICAg
LCBtX251bVZhcnMoMCkKKyAgICAsIG1fbnVtQ2FsbGVlTG9jYWxzKDApCisgICAgLCBtX251bVBh
cmFtZXRlcnMoMCkKKyAgICAsIG1fZ2xvYmFsT2JqZWN0UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVy
KCkpCisgICAgLCBtX3VzZXNFdmFsKGluZm8udXNlc0V2YWwoKSkKKyAgICAsIG1faXNTdHJpY3RN
b2RlKGluZm8uaXNTdHJpY3RNb2RlKCkpCisgICAgLCBtX2lzQ29uc3RydWN0b3IoaW5mby5pc0Nv
bnN0cnVjdG9yKCkpCisgICAgLCBtX2hhc0NhcHR1cmVkVmFyaWFibGVzKGZhbHNlKQorICAgICwg
bV9pc0J1aWx0aW5GdW5jdGlvbihpbmZvLmlzQnVpbHRpbkZ1bmN0aW9uKCkpCisgICAgLCBtX3N1
cGVyQmluZGluZyhzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaW5mby5zdXBlckJpbmRpbmcoKSkpCisg
ICAgLCBtX3NjcmlwdE1vZGUoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGluZm8uc2NyaXB0TW9kZSgp
KSkKKyAgICAsIG1faXNBcnJvd0Z1bmN0aW9uQ29udGV4dChpbmZvLmlzQXJyb3dGdW5jdGlvbkNv
bnRleHQoKSkKKyAgICAsIG1faXNDbGFzc0NvbnRleHQoaW5mby5pc0NsYXNzQ29udGV4dCgpKQor
ICAgICwgbV93YXNDb21waWxlZFdpdGhEZWJ1Z2dpbmdPcGNvZGVzKGRlYnVnZ2VyTW9kZSA9PSBE
ZWJ1Z2dlck1vZGU6OkRlYnVnZ2VyT24gfHwgT3B0aW9uczo6Zm9yY2VEZWJ1Z2dlckJ5dGVjb2Rl
R2VuZXJhdGlvbigpKQorICAgICwgbV9jb25zdHJ1Y3RvcktpbmQoc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KGluZm8uY29uc3RydWN0b3JLaW5kKCkpKQorICAgICwgbV9kZXJpdmVkQ29udGV4dFR5cGUo
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGluZm8uZGVyaXZlZENvbnRleHRUeXBlKCkpKQorICAgICwg
bV9ldmFsQ29udGV4dFR5cGUoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGluZm8uZXZhbENvbnRleHRU
eXBlKCkpKQorICAgICwgbV9maXJzdExpbmUoMCkKKyAgICAsIG1fbGluZUNvdW50KDApCisgICAg
LCBtX2VuZENvbHVtbihVSU5UX01BWCkKKyAgICAsIG1fZGlkT3B0aW1pemUoTWl4ZWRUcmlTdGF0
ZSkKKyAgICAsIG1fcGFyc2VNb2RlKGluZm8ucGFyc2VNb2RlKCkpCisgICAgLCBtX2ZlYXR1cmVz
KDApCisgICAgLCBtX2NvZGVUeXBlKGNvZGVUeXBlKQorICAgICwgbV9hcnJheVByb2ZpbGVDb3Vu
dCgwKQorICAgICwgbV9hcnJheUFsbG9jYXRpb25Qcm9maWxlQ291bnQoMCkKKyAgICAsIG1fb2Jq
ZWN0QWxsb2NhdGlvblByb2ZpbGVDb3VudCgwKQorICAgICwgbV92YWx1ZVByb2ZpbGVDb3VudCgw
KQorICAgICwgbV9sbGludENhbGxMaW5rSW5mb0NvdW50KDApCit7CisgICAgZm9yIChhdXRvJiBj
b25zdGFudFJlZ2lzdGVySW5kZXggOiBtX2xpbmtUaW1lQ29uc3RhbnRzKQorICAgICAgICBjb25z
dGFudFJlZ2lzdGVySW5kZXggPSAwOworICAgIEFTU0VSVChtX2NvbnN0cnVjdG9yS2luZCA9PSBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oaW5mby5jb25zdHJ1Y3RvcktpbmQoKSkpOworfQorCit2b2lk
IFVubGlua2VkQ29kZUJsb2NrOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCit7CisgICAgVW5saW5rZWRDb2RlQmxvY2sqIHRoaXNPYmplY3QgPSBqc0Nh
c3Q8VW5saW5rZWRDb2RlQmxvY2sqPihjZWxsKTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVS
SVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CisgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2Jq
ZWN0LCB2aXNpdG9yKTsKKyAgICBmb3IgKEZ1bmN0aW9uRXhwcmVzc2lvblZlY3Rvcjo6aXRlcmF0
b3IgcHRyID0gdGhpc09iamVjdC0+bV9mdW5jdGlvbkRlY2xzLmJlZ2luKCksIGVuZCA9IHRoaXNP
YmplY3QtPm1fZnVuY3Rpb25EZWNscy5lbmQoKTsgcHRyICE9IGVuZDsgKytwdHIpCisgICAgICAg
IHZpc2l0b3IuYXBwZW5kKHB0cik7CisgICAgZm9yIChGdW5jdGlvbkV4cHJlc3Npb25WZWN0b3I6
Oml0ZXJhdG9yIHB0ciA9IHRoaXNPYmplY3QtPm1fZnVuY3Rpb25FeHBycy5iZWdpbigpLCBlbmQg
PSB0aGlzT2JqZWN0LT5tX2Z1bmN0aW9uRXhwcnMuZW5kKCk7IHB0ciAhPSBlbmQ7ICsrcHRyKQor
ICAgICAgICB2aXNpdG9yLmFwcGVuZChwdHIpOworICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVzKHRo
aXNPYmplY3QtPm1fY29uc3RhbnRSZWdpc3RlcnMuZGF0YSgpLCB0aGlzT2JqZWN0LT5tX2NvbnN0
YW50UmVnaXN0ZXJzLnNpemUoKSk7CisgICAgaWYgKHRoaXNPYmplY3QtPm1fdW5saW5rZWRJbnN0
cnVjdGlvbnMpCisgICAgICAgIHZpc2l0b3IucmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKHRoaXNP
YmplY3QtPm1fdW5saW5rZWRJbnN0cnVjdGlvbnMtPnNpemVJbkJ5dGVzKCkpOworICAgIGlmICh0
aGlzT2JqZWN0LT5tX3JhcmVEYXRhKSB7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwLCBlbmQg
PSB0aGlzT2JqZWN0LT5tX3JhcmVEYXRhLT5tX3JlZ2V4cHMuc2l6ZSgpOyBpICE9IGVuZDsgaSsr
KQorICAgICAgICAgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fcmFyZURhdGEtPm1f
cmVnZXhwc1tpXSk7CisgICAgfQorfQorCitzaXplX3QgVW5saW5rZWRDb2RlQmxvY2s6OmVzdGlt
YXRlZFNpemUoSlNDZWxsKiBjZWxsKQoreworICAgIFVubGlua2VkQ29kZUJsb2NrKiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PFVubGlua2VkQ29kZUJsb2NrKj4oY2VsbCk7CisgICAgc2l6ZV90IGV4dHJh
U2l6ZSA9IHRoaXNPYmplY3QtPm1fdW5saW5rZWRJbnN0cnVjdGlvbnMgPyB0aGlzT2JqZWN0LT5t
X3VubGlua2VkSW5zdHJ1Y3Rpb25zLT5zaXplSW5CeXRlcygpIDogMDsKKyAgICByZXR1cm4gQmFz
ZTo6ZXN0aW1hdGVkU2l6ZShjZWxsKSArIGV4dHJhU2l6ZTsKK30KKworaW50IFVubGlua2VkQ29k
ZUJsb2NrOjpsaW5lTnVtYmVyRm9yQnl0ZWNvZGVPZmZzZXQodW5zaWduZWQgYnl0ZWNvZGVPZmZz
ZXQpCit7CisgICAgQVNTRVJUKGJ5dGVjb2RlT2Zmc2V0IDwgaW5zdHJ1Y3Rpb25zKCkuY291bnQo
KSk7CisgICAgaW50IGRpdm90OworICAgIGludCBzdGFydE9mZnNldDsKKyAgICBpbnQgZW5kT2Zm
c2V0OworICAgIHVuc2lnbmVkIGxpbmU7CisgICAgdW5zaWduZWQgY29sdW1uOworICAgIGV4cHJl
c3Npb25SYW5nZUZvckJ5dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0LCBkaXZvdCwgc3RhcnRP
ZmZzZXQsIGVuZE9mZnNldCwgbGluZSwgY29sdW1uKTsKKyAgICByZXR1cm4gbGluZTsKK30KKwor
aW5saW5lIHZvaWQgVW5saW5rZWRDb2RlQmxvY2s6OmdldExpbmVBbmRDb2x1bW4oY29uc3QgRXhw
cmVzc2lvblJhbmdlSW5mbyYgaW5mbywKKyAgICB1bnNpZ25lZCYgbGluZSwgdW5zaWduZWQmIGNv
bHVtbikgY29uc3QKK3sKKyAgICBzd2l0Y2ggKGluZm8ubW9kZSkgeworICAgIGNhc2UgRXhwcmVz
c2lvblJhbmdlSW5mbzo6RmF0TGluZU1vZGU6CisgICAgICAgIGluZm8uZGVjb2RlRmF0TGluZU1v
ZGUobGluZSwgY29sdW1uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBFeHByZXNzaW9uUmFu
Z2VJbmZvOjpGYXRDb2x1bW5Nb2RlOgorICAgICAgICBpbmZvLmRlY29kZUZhdENvbHVtbk1vZGUo
bGluZSwgY29sdW1uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBFeHByZXNzaW9uUmFuZ2VJ
bmZvOjpGYXRMaW5lQW5kQ29sdW1uTW9kZTogeworICAgICAgICB1bnNpZ25lZCBmYXRJbmRleCA9
IGluZm8ucG9zaXRpb247CisgICAgICAgIEV4cHJlc3Npb25SYW5nZUluZm86OkZhdFBvc2l0aW9u
JiBmYXRQb3MgPSBtX3JhcmVEYXRhLT5tX2V4cHJlc3Npb25JbmZvRmF0UG9zaXRpb25zW2ZhdElu
ZGV4XTsKKyAgICAgICAgbGluZSA9IGZhdFBvcy5saW5lOworICAgICAgICBjb2x1bW4gPSBmYXRQ
b3MuY29sdW1uOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgfSAvLyBzd2l0Y2gKK30KKwor
I2lmbmRlZiBOREVCVUcKK3N0YXRpYyB2b2lkIGR1bXBMaW5lQ29sdW1uRW50cnkoc2l6ZV90IGlu
ZGV4LCBjb25zdCBVbmxpbmtlZEluc3RydWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlvblN0cmVhbSwg
dW5zaWduZWQgaW5zdHJ1Y3Rpb25PZmZzZXQsIHVuc2lnbmVkIGxpbmUsIHVuc2lnbmVkIGNvbHVt
bikKK3sKKyAgICBjb25zdCBhdXRvJiBpbnN0cnVjdGlvbnMgPSBpbnN0cnVjdGlvblN0cmVhbS51
bnBhY2tGb3JEZWJ1Z2dpbmcoKTsKKyAgICBPcGNvZGVJRCBvcGNvZGUgPSBpbnN0cnVjdGlvbnNb
aW5zdHJ1Y3Rpb25PZmZzZXRdLnUub3Bjb2RlOworICAgIGNvbnN0IGNoYXIqIGV2ZW50ID0gIiI7
CisgICAgaWYgKG9wY29kZSA9PSBvcF9kZWJ1ZykgeworICAgICAgICBzd2l0Y2ggKGluc3RydWN0
aW9uc1tpbnN0cnVjdGlvbk9mZnNldCArIDFdLnUub3BlcmFuZCkgeworICAgICAgICBjYXNlIFdp
bGxFeGVjdXRlUHJvZ3JhbTogZXZlbnQgPSAiIFdpbGxFeGVjdXRlUHJvZ3JhbSI7IGJyZWFrOwor
ICAgICAgICBjYXNlIERpZEV4ZWN1dGVQcm9ncmFtOiBldmVudCA9ICIgRGlkRXhlY3V0ZVByb2dy
YW0iOyBicmVhazsKKyAgICAgICAgY2FzZSBEaWRFbnRlckNhbGxGcmFtZTogZXZlbnQgPSAiIERp
ZEVudGVyQ2FsbEZyYW1lIjsgYnJlYWs7CisgICAgICAgIGNhc2UgRGlkUmVhY2hCcmVha3BvaW50
OiBldmVudCA9ICIgRGlkUmVhY2hCcmVha3BvaW50IjsgYnJlYWs7CisgICAgICAgIGNhc2UgV2ls
bExlYXZlQ2FsbEZyYW1lOiBldmVudCA9ICIgV2lsbExlYXZlQ2FsbEZyYW1lIjsgYnJlYWs7Cisg
ICAgICAgIGNhc2UgV2lsbEV4ZWN1dGVTdGF0ZW1lbnQ6IGV2ZW50ID0gIiBXaWxsRXhlY3V0ZVN0
YXRlbWVudCI7IGJyZWFrOworICAgICAgICBjYXNlIFdpbGxFeGVjdXRlRXhwcmVzc2lvbjogZXZl
bnQgPSAiIFdpbGxFeGVjdXRlRXhwcmVzc2lvbiI7IGJyZWFrOworICAgICAgICB9CisgICAgfQor
ICAgIGRhdGFMb2dGKCIgIFslenVdIHBjICV1IEAgbGluZSAldSBjb2wgJXUgOiAlcyVzXG4iLCBp
bmRleCwgaW5zdHJ1Y3Rpb25PZmZzZXQsIGxpbmUsIGNvbHVtbiwgb3Bjb2RlTmFtZXNbb3Bjb2Rl
XSwgZXZlbnQpOworfQorCit2b2lkIFVubGlua2VkQ29kZUJsb2NrOjpkdW1wRXhwcmVzc2lvblJh
bmdlSW5mbygpCit7CisgICAgVmVjdG9yPEV4cHJlc3Npb25SYW5nZUluZm8+JiBleHByZXNzaW9u
SW5mbyA9IG1fZXhwcmVzc2lvbkluZm87CisKKyAgICBzaXplX3Qgc2l6ZSA9IG1fZXhwcmVzc2lv
bkluZm8uc2l6ZSgpOworICAgIGRhdGFMb2dGKCJVbmxpbmtlZENvZGVCbG9jayAlcCBleHByZXNz
aW9uUmFuZ2VJbmZvWyV6dV0ge1xuIiwgdGhpcywgc2l6ZSk7CisgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBzaXplOyBpKyspIHsKKyAgICAgICAgRXhwcmVzc2lvblJhbmdlSW5mbyYgaW5mbyA9
IGV4cHJlc3Npb25JbmZvW2ldOworICAgICAgICB1bnNpZ25lZCBsaW5lOworICAgICAgICB1bnNp
Z25lZCBjb2x1bW47CisgICAgICAgIGdldExpbmVBbmRDb2x1bW4oaW5mbywgbGluZSwgY29sdW1u
KTsKKyAgICAgICAgZHVtcExpbmVDb2x1bW5FbnRyeShpLCBpbnN0cnVjdGlvbnMoKSwgaW5mby5p
bnN0cnVjdGlvbk9mZnNldCwgbGluZSwgY29sdW1uKTsKKyAgICB9CisgICAgZGF0YUxvZygifVxu
Iik7Cit9CisjZW5kaWYKKwordm9pZCBVbmxpbmtlZENvZGVCbG9jazo6ZXhwcmVzc2lvblJhbmdl
Rm9yQnl0ZWNvZGVPZmZzZXQodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQsCisgICAgaW50JiBkaXZv
dCwgaW50JiBzdGFydE9mZnNldCwgaW50JiBlbmRPZmZzZXQsIHVuc2lnbmVkJiBsaW5lLCB1bnNp
Z25lZCYgY29sdW1uKSBjb25zdAoreworICAgIEFTU0VSVChieXRlY29kZU9mZnNldCA8IGluc3Ry
dWN0aW9ucygpLmNvdW50KCkpOworCisgICAgaWYgKCFtX2V4cHJlc3Npb25JbmZvLnNpemUoKSkg
eworICAgICAgICBzdGFydE9mZnNldCA9IDA7CisgICAgICAgIGVuZE9mZnNldCA9IDA7CisgICAg
ICAgIGRpdm90ID0gMDsKKyAgICAgICAgbGluZSA9IDA7CisgICAgICAgIGNvbHVtbiA9IDA7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjb25zdCBWZWN0b3I8RXhwcmVzc2lvblJhbmdl
SW5mbz4mIGV4cHJlc3Npb25JbmZvID0gbV9leHByZXNzaW9uSW5mbzsKKworICAgIGludCBsb3cg
PSAwOworICAgIGludCBoaWdoID0gZXhwcmVzc2lvbkluZm8uc2l6ZSgpOworICAgIHdoaWxlIChs
b3cgPCBoaWdoKSB7CisgICAgICAgIGludCBtaWQgPSBsb3cgKyAoaGlnaCAtIGxvdykgLyAyOwor
ICAgICAgICBpZiAoZXhwcmVzc2lvbkluZm9bbWlkXS5pbnN0cnVjdGlvbk9mZnNldCA8PSBieXRl
Y29kZU9mZnNldCkKKyAgICAgICAgICAgIGxvdyA9IG1pZCArIDE7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIGhpZ2ggPSBtaWQ7CisgICAgfQorCisgICAgaWYgKCFsb3cpCisgICAgICAgIGxv
dyA9IDE7CisKKyAgICBjb25zdCBFeHByZXNzaW9uUmFuZ2VJbmZvJiBpbmZvID0gZXhwcmVzc2lv
bkluZm9bbG93IC0gMV07CisgICAgc3RhcnRPZmZzZXQgPSBpbmZvLnN0YXJ0T2Zmc2V0OworICAg
IGVuZE9mZnNldCA9IGluZm8uZW5kT2Zmc2V0OworICAgIGRpdm90ID0gaW5mby5kaXZvdFBvaW50
OworICAgIGdldExpbmVBbmRDb2x1bW4oaW5mbywgbGluZSwgY29sdW1uKTsKK30KKwordm9pZCBV
bmxpbmtlZENvZGVCbG9jazo6YWRkRXhwcmVzc2lvbkluZm8odW5zaWduZWQgaW5zdHJ1Y3Rpb25P
ZmZzZXQsCisgICAgaW50IGRpdm90LCBpbnQgc3RhcnRPZmZzZXQsIGludCBlbmRPZmZzZXQsIHVu
c2lnbmVkIGxpbmUsIHVuc2lnbmVkIGNvbHVtbikKK3sKKyAgICBpZiAoZGl2b3QgPiBFeHByZXNz
aW9uUmFuZ2VJbmZvOjpNYXhEaXZvdCkgeworICAgICAgICAvLyBPdmVyZmxvdyBoYXMgb2NjdXJy
ZWQsIHdlIGNhbiBvbmx5IGdpdmUgbGluZSBudW1iZXIgaW5mbyBmb3IgZXJyb3JzIGZvciB0aGlz
IHJlZ2lvbgorICAgICAgICBkaXZvdCA9IDA7CisgICAgICAgIHN0YXJ0T2Zmc2V0ID0gMDsKKyAg
ICAgICAgZW5kT2Zmc2V0ID0gMDsKKyAgICB9IGVsc2UgaWYgKHN0YXJ0T2Zmc2V0ID4gRXhwcmVz
c2lvblJhbmdlSW5mbzo6TWF4T2Zmc2V0KSB7CisgICAgICAgIC8vIElmIHRoZSBzdGFydCBvZmZz
ZXQgaXMgb3V0IG9mIGJvdW5kcyB3ZSBjbGVhciBib3RoIG9mZnNldHMKKyAgICAgICAgLy8gc28g
d2Ugb25seSBnZXQgdGhlIGRpdm90IG1hcmtlci4gRXJyb3IgbWVzc2FnZSB3aWxsIGhhdmUgdG8g
YmUgcmVkdWNlZAorICAgICAgICAvLyB0byBsaW5lIGFuZCBjaGFyUG9zaXRpb24gbnVtYmVyLgor
ICAgICAgICBzdGFydE9mZnNldCA9IDA7CisgICAgICAgIGVuZE9mZnNldCA9IDA7CisgICAgfSBl
bHNlIGlmIChlbmRPZmZzZXQgPiBFeHByZXNzaW9uUmFuZ2VJbmZvOjpNYXhPZmZzZXQpIHsKKyAg
ICAgICAgLy8gVGhlIGVuZCBvZmZzZXQgaXMgb25seSB1c2VkIGZvciBhZGRpdGlvbmFsIGNvbnRl
eHQsIGFuZCBpcyBtdWNoIG1vcmUgbGlrZWx5CisgICAgICAgIC8vIHRvIG92ZXJmbG93IChlZy4g
ZnVuY3Rpb24gY2FsbCBhcmd1bWVudHMpIHNvIHdlIGFyZSB3aWxsaW5nIHRvIGRyb3AgaXQgd2l0
aG91dAorICAgICAgICAvLyBkcm9wcGluZyB0aGUgcmVzdCBvZiB0aGUgcmFuZ2UuCisgICAgICAg
IGVuZE9mZnNldCA9IDA7CisgICAgfQorCisgICAgdW5zaWduZWQgcG9zaXRpb25Nb2RlID0KKyAg
ICAgICAgKGxpbmUgPD0gRXhwcmVzc2lvblJhbmdlSW5mbzo6TWF4RmF0TGluZU1vZGVMaW5lICYm
IGNvbHVtbiA8PSBFeHByZXNzaW9uUmFuZ2VJbmZvOjpNYXhGYXRMaW5lTW9kZUNvbHVtbikgCisg
ICAgICAgID8gRXhwcmVzc2lvblJhbmdlSW5mbzo6RmF0TGluZU1vZGUKKyAgICAgICAgOiAobGlu
ZSA8PSBFeHByZXNzaW9uUmFuZ2VJbmZvOjpNYXhGYXRDb2x1bW5Nb2RlTGluZSAmJiBjb2x1bW4g
PD0gRXhwcmVzc2lvblJhbmdlSW5mbzo6TWF4RmF0Q29sdW1uTW9kZUNvbHVtbikKKyAgICAgICAg
PyBFeHByZXNzaW9uUmFuZ2VJbmZvOjpGYXRDb2x1bW5Nb2RlCisgICAgICAgIDogRXhwcmVzc2lv
blJhbmdlSW5mbzo6RmF0TGluZUFuZENvbHVtbk1vZGU7CisKKyAgICBFeHByZXNzaW9uUmFuZ2VJ
bmZvIGluZm87CisgICAgaW5mby5pbnN0cnVjdGlvbk9mZnNldCA9IGluc3RydWN0aW9uT2Zmc2V0
OworICAgIGluZm8uZGl2b3RQb2ludCA9IGRpdm90OworICAgIGluZm8uc3RhcnRPZmZzZXQgPSBz
dGFydE9mZnNldDsKKyAgICBpbmZvLmVuZE9mZnNldCA9IGVuZE9mZnNldDsKKworICAgIGluZm8u
bW9kZSA9IHBvc2l0aW9uTW9kZTsKKyAgICBzd2l0Y2ggKHBvc2l0aW9uTW9kZSkgeworICAgIGNh
c2UgRXhwcmVzc2lvblJhbmdlSW5mbzo6RmF0TGluZU1vZGU6CisgICAgICAgIGluZm8uZW5jb2Rl
RmF0TGluZU1vZGUobGluZSwgY29sdW1uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBFeHBy
ZXNzaW9uUmFuZ2VJbmZvOjpGYXRDb2x1bW5Nb2RlOgorICAgICAgICBpbmZvLmVuY29kZUZhdENv
bHVtbk1vZGUobGluZSwgY29sdW1uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBFeHByZXNz
aW9uUmFuZ2VJbmZvOjpGYXRMaW5lQW5kQ29sdW1uTW9kZTogeworICAgICAgICBjcmVhdGVSYXJl
RGF0YUlmTmVjZXNzYXJ5KCk7CisgICAgICAgIHVuc2lnbmVkIGZhdEluZGV4ID0gbV9yYXJlRGF0
YS0+bV9leHByZXNzaW9uSW5mb0ZhdFBvc2l0aW9ucy5zaXplKCk7CisgICAgICAgIEV4cHJlc3Np
b25SYW5nZUluZm86OkZhdFBvc2l0aW9uIGZhdFBvcyA9IHsgbGluZSwgY29sdW1uIH07CisgICAg
ICAgIG1fcmFyZURhdGEtPm1fZXhwcmVzc2lvbkluZm9GYXRQb3NpdGlvbnMuYXBwZW5kKGZhdFBv
cyk7CisgICAgICAgIGluZm8ucG9zaXRpb24gPSBmYXRJbmRleDsKKyAgICB9CisgICAgfSAvLyBz
d2l0Y2gKKworICAgIG1fZXhwcmVzc2lvbkluZm8uYXBwZW5kKGluZm8pOworfQorCitib29sIFVu
bGlua2VkQ29kZUJsb2NrOjp0eXBlUHJvZmlsZXJFeHByZXNzaW9uSW5mb0ZvckJ5dGVjb2RlT2Zm
c2V0KHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0LCB1bnNpZ25lZCYgc3RhcnREaXZvdCwgdW5zaWdu
ZWQmIGVuZERpdm90KQoreworICAgIHN0YXRpYyBjb25zdCBib29sIHZlcmJvc2UgPSBmYWxzZTsK
KyAgICBpZiAoIW1fcmFyZURhdGEpIHsKKyAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAg
ICBkYXRhTG9nRigiRG9uJ3QgaGF2ZSBhc3NpZ25tZW50IGluZm8gZm9yIG9mZnNldDoldVxuIiwg
Ynl0ZWNvZGVPZmZzZXQpOworICAgICAgICBzdGFydERpdm90ID0gVUlOVF9NQVg7CisgICAgICAg
IGVuZERpdm90ID0gVUlOVF9NQVg7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAg
ICBhdXRvIGl0ZXIgPSBtX3JhcmVEYXRhLT5tX3R5cGVQcm9maWxlckluZm9NYXAuZmluZChieXRl
Y29kZU9mZnNldCk7CisgICAgaWYgKGl0ZXIgPT0gbV9yYXJlRGF0YS0+bV90eXBlUHJvZmlsZXJJ
bmZvTWFwLmVuZCgpKSB7CisgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgZGF0YUxv
Z0YoIkRvbid0IGhhdmUgYXNzaWdubWVudCBpbmZvIGZvciBvZmZzZXQ6JXVcbiIsIGJ5dGVjb2Rl
T2Zmc2V0KTsKKyAgICAgICAgc3RhcnREaXZvdCA9IFVJTlRfTUFYOworICAgICAgICBlbmREaXZv
dCA9IFVJTlRfTUFYOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAorICAgIFJh
cmVEYXRhOjpUeXBlUHJvZmlsZXJFeHByZXNzaW9uUmFuZ2UmIHJhbmdlID0gaXRlci0+dmFsdWU7
CisgICAgc3RhcnREaXZvdCA9IHJhbmdlLm1fc3RhcnREaXZvdDsKKyAgICBlbmREaXZvdCA9IHJh
bmdlLm1fZW5kRGl2b3Q7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgVW5saW5rZWRDb2Rl
QmxvY2s6OmFkZFR5cGVQcm9maWxlckV4cHJlc3Npb25JbmZvKHVuc2lnbmVkIGluc3RydWN0aW9u
T2Zmc2V0LCB1bnNpZ25lZCBzdGFydERpdm90LCB1bnNpZ25lZCBlbmREaXZvdCkKK3sKKyAgICBj
cmVhdGVSYXJlRGF0YUlmTmVjZXNzYXJ5KCk7CisgICAgUmFyZURhdGE6OlR5cGVQcm9maWxlckV4
cHJlc3Npb25SYW5nZSByYW5nZTsKKyAgICByYW5nZS5tX3N0YXJ0RGl2b3QgPSBzdGFydERpdm90
OworICAgIHJhbmdlLm1fZW5kRGl2b3QgPSBlbmREaXZvdDsKKyAgICBtX3JhcmVEYXRhLT5tX3R5
cGVQcm9maWxlckluZm9NYXAuc2V0KGluc3RydWN0aW9uT2Zmc2V0LCByYW5nZSk7Cit9CisKK3Zv
aWQgVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwg
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrKiB0
aGlzT2JqZWN0ID0ganNDYXN0PFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jayo+KGNlbGwpOworICAg
IEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKKyAgICBCYXNl
Ojp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOworfQorCit2b2lkIFVubGlua2Vk
TW9kdWxlUHJvZ3JhbUNvZGVCbG9jazo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQoreworICAgIFVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayog
dGhpc09iamVjdCA9IGpzQ2FzdDxVbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2sqPihjZWxs
KTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7Cisg
ICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKK30KKworVW5saW5r
ZWRDb2RlQmxvY2s6On5VbmxpbmtlZENvZGVCbG9jaygpCit7Cit9CisKK3ZvaWQgVW5saW5rZWRQ
cm9ncmFtQ29kZUJsb2NrOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKK3sKKyAgICBqc0Nhc3Q8VW5s
aW5rZWRQcm9ncmFtQ29kZUJsb2NrKj4oY2VsbCktPn5VbmxpbmtlZFByb2dyYW1Db2RlQmxvY2so
KTsKK30KKwordm9pZCBVbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2s6OmRlc3Ryb3koSlND
ZWxsKiBjZWxsKQoreworICAgIGpzQ2FzdDxVbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2sq
PihjZWxsKS0+flVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jaygpOworfQorCit2b2lkIFVu
bGlua2VkRXZhbENvZGVCbG9jazo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCit7CisgICAganNDYXN0
PFVubGlua2VkRXZhbENvZGVCbG9jayo+KGNlbGwpLT5+VW5saW5rZWRFdmFsQ29kZUJsb2NrKCk7
Cit9CisKK3ZvaWQgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jazo6ZGVzdHJveShKU0NlbGwqIGNl
bGwpCit7CisgICAganNDYXN0PFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2sqPihjZWxsKS0+flVu
bGlua2VkRnVuY3Rpb25Db2RlQmxvY2soKTsKK30KKwordm9pZCBVbmxpbmtlZEZ1bmN0aW9uRXhl
Y3V0YWJsZTo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCit7CisgICAganNDYXN0PFVubGlua2VkRnVu
Y3Rpb25FeGVjdXRhYmxlKj4oY2VsbCktPn5VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSgpOwor
fQorCit2b2lkIFVubGlua2VkQ29kZUJsb2NrOjpzZXRJbnN0cnVjdGlvbnMoc3RkOjp1bmlxdWVf
cHRyPFVubGlua2VkSW5zdHJ1Y3Rpb25TdHJlYW0+IGluc3RydWN0aW9ucykKK3sKKyAgICBBU1NF
UlQoaW5zdHJ1Y3Rpb25zKTsKKyAgICBtX3VubGlua2VkSW5zdHJ1Y3Rpb25zID0gV1RGTW92ZShp
bnN0cnVjdGlvbnMpOworICAgIEhlYXA6OmhlYXAodGhpcyktPnJlcG9ydEV4dHJhTWVtb3J5QWxs
b2NhdGVkKG1fdW5saW5rZWRJbnN0cnVjdGlvbnMtPnNpemVJbkJ5dGVzKCkpOworfQorCitjb25z
dCBVbmxpbmtlZEluc3RydWN0aW9uU3RyZWFtJiBVbmxpbmtlZENvZGVCbG9jazo6aW5zdHJ1Y3Rp
b25zKCkgY29uc3QKK3sKKyAgICBBU1NFUlQobV91bmxpbmtlZEluc3RydWN0aW9ucy5nZXQoKSk7
CisgICAgcmV0dXJuICptX3VubGlua2VkSW5zdHJ1Y3Rpb25zOworfQorCitVbmxpbmtlZEhhbmRs
ZXJJbmZvKiBVbmxpbmtlZENvZGVCbG9jazo6aGFuZGxlckZvckJ5dGVjb2RlT2Zmc2V0KHVuc2ln
bmVkIGJ5dGVjb2RlT2Zmc2V0LCBSZXF1aXJlZEhhbmRsZXIgcmVxdWlyZWRIYW5kbGVyKQorewor
ICAgIHJldHVybiBoYW5kbGVyRm9ySW5kZXgoYnl0ZWNvZGVPZmZzZXQsIHJlcXVpcmVkSGFuZGxl
cik7Cit9CisKK1VubGlua2VkSGFuZGxlckluZm8qIFVubGlua2VkQ29kZUJsb2NrOjpoYW5kbGVy
Rm9ySW5kZXgodW5zaWduZWQgaW5kZXgsIFJlcXVpcmVkSGFuZGxlciByZXF1aXJlZEhhbmRsZXIp
Cit7CisgICAgaWYgKCFtX3JhcmVEYXRhKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBy
ZXR1cm4gVW5saW5rZWRIYW5kbGVySW5mbzo6aGFuZGxlckZvckluZGV4KG1fcmFyZURhdGEtPm1f
ZXhjZXB0aW9uSGFuZGxlcnMsIGluZGV4LCByZXF1aXJlZEhhbmRsZXIpOworfQorCit2b2lkIFVu
bGlua2VkQ29kZUJsb2NrOjphcHBseU1vZGlmaWNhdGlvbihCeXRlY29kZVJld3JpdGVyJiByZXdy
aXRlcikKK3sKKyAgICAvLyBCZWZvcmUgYXBwbHlpbmcgdGhlIGNoYW5nZXMsIHdlIGFkanVzdCB0
aGUganVtcHMgYmFzZWQgb24gdGhlIG9yaWdpbmFsIGJ5dGVjb2RlIG9mZnNldCwgdGhlIG9mZnNl
dCB0byB0aGUganVtcCB0YXJnZXQsIGFuZAorICAgIC8vIHRoZSBpbnNlcnRpb24gaW5mb3JtYXRp
b24uCisKKyAgICBCeXRlY29kZUdyYXBoPFVubGlua2VkQ29kZUJsb2NrPiYgZ3JhcGggPSByZXdy
aXRlci5ncmFwaCgpOworICAgIFVubGlua2VkSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uc0JlZ2lu
ID0gZ3JhcGguaW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKTsKKworICAgIGZvciAoaW50IGJ5dGVjb2Rl
T2Zmc2V0ID0gMCwgaW5zdHJ1Y3Rpb25Db3VudCA9IGdyYXBoLmluc3RydWN0aW9ucygpLnNpemUo
KTsgYnl0ZWNvZGVPZmZzZXQgPCBpbnN0cnVjdGlvbkNvdW50OykgeworICAgICAgICBVbmxpbmtl
ZEluc3RydWN0aW9uKiBjdXJyZW50ID0gaW5zdHJ1Y3Rpb25zQmVnaW4gKyBieXRlY29kZU9mZnNl
dDsKKyAgICAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBjdXJyZW50WzBdLnUub3Bjb2RlOworICAg
ICAgICBleHRyYWN0U3RvcmVkSnVtcFRhcmdldHNGb3JCeXRlY29kZU9mZnNldCh0aGlzLCB2bSgp
LT5pbnRlcnByZXRlciwgaW5zdHJ1Y3Rpb25zQmVnaW4sIGJ5dGVjb2RlT2Zmc2V0LCBbJl0oaW50
MzJfdCYgcmVsYXRpdmVPZmZzZXQpIHsKKyAgICAgICAgICAgIHJlbGF0aXZlT2Zmc2V0ID0gcmV3
cml0ZXIuYWRqdXN0SnVtcFRhcmdldChieXRlY29kZU9mZnNldCwgYnl0ZWNvZGVPZmZzZXQgKyBy
ZWxhdGl2ZU9mZnNldCk7CisgICAgICAgIH0pOworICAgICAgICBieXRlY29kZU9mZnNldCArPSBv
cGNvZGVMZW5ndGgob3Bjb2RlSUQpOworICAgIH0KKworICAgIC8vIFRoZW4sIGV4Y2VwdGlvbiBo
YW5kbGVycyBzaG91bGQgYmUgYWRqdXN0ZWQuCisgICAgaWYgKG1fcmFyZURhdGEpIHsKKyAgICAg
ICAgZm9yIChVbmxpbmtlZEhhbmRsZXJJbmZvJiBoYW5kbGVyIDogbV9yYXJlRGF0YS0+bV9leGNl
cHRpb25IYW5kbGVycykgeworICAgICAgICAgICAgaGFuZGxlci50YXJnZXQgPSByZXdyaXRlci5h
ZGp1c3RBYnNvbHV0ZU9mZnNldChoYW5kbGVyLnRhcmdldCk7CisgICAgICAgICAgICBoYW5kbGVy
LnN0YXJ0ID0gcmV3cml0ZXIuYWRqdXN0QWJzb2x1dGVPZmZzZXQoaGFuZGxlci5zdGFydCk7Cisg
ICAgICAgICAgICBoYW5kbGVyLmVuZCA9IHJld3JpdGVyLmFkanVzdEFic29sdXRlT2Zmc2V0KGhh
bmRsZXIuZW5kKTsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bV9yYXJlRGF0YS0+bV9vcFByb2ZpbGVDb250cm9sRmxvd0J5dGVjb2RlT2Zmc2V0cy5zaXplKCk7
ICsraSkKKyAgICAgICAgICAgIG1fcmFyZURhdGEtPm1fb3BQcm9maWxlQ29udHJvbEZsb3dCeXRl
Y29kZU9mZnNldHNbaV0gPSByZXdyaXRlci5hZGp1c3RBYnNvbHV0ZU9mZnNldChtX3JhcmVEYXRh
LT5tX29wUHJvZmlsZUNvbnRyb2xGbG93Qnl0ZWNvZGVPZmZzZXRzW2ldKTsKKworICAgICAgICBp
ZiAoIW1fcmFyZURhdGEtPm1fdHlwZVByb2ZpbGVySW5mb01hcC5pc0VtcHR5KCkpIHsKKyAgICAg
ICAgICAgIEhhc2hNYXA8dW5zaWduZWQsIFJhcmVEYXRhOjpUeXBlUHJvZmlsZXJFeHByZXNzaW9u
UmFuZ2U+IGFkanVzdGVkVHlwZVByb2ZpbGVySW5mb01hcDsKKyAgICAgICAgICAgIGZvciAoYXV0
byYgZW50cnkgOiBtX3JhcmVEYXRhLT5tX3R5cGVQcm9maWxlckluZm9NYXApCisgICAgICAgICAg
ICAgICAgYWRqdXN0ZWRUeXBlUHJvZmlsZXJJbmZvTWFwLnNldChyZXdyaXRlci5hZGp1c3RBYnNv
bHV0ZU9mZnNldChlbnRyeS5rZXkpLCBlbnRyeS52YWx1ZSk7CisgICAgICAgICAgICBtX3JhcmVE
YXRhLT5tX3R5cGVQcm9maWxlckluZm9NYXAuc3dhcChhZGp1c3RlZFR5cGVQcm9maWxlckluZm9N
YXApOworICAgICAgICB9CisgICAgfQorCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3By
b3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25zLnNpemUoKTsgKytpKQorICAgICAgICBtX3Byb3BlcnR5
QWNjZXNzSW5zdHJ1Y3Rpb25zW2ldID0gcmV3cml0ZXIuYWRqdXN0QWJzb2x1dGVPZmZzZXQobV9w
cm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uc1tpXSk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IG1fZXhwcmVzc2lvbkluZm8uc2l6ZSgpOyArK2kpCisgICAgICAgIG1fZXhwcmVzc2lvbklu
Zm9baV0uaW5zdHJ1Y3Rpb25PZmZzZXQgPSByZXdyaXRlci5hZGp1c3RBYnNvbHV0ZU9mZnNldCht
X2V4cHJlc3Npb25JbmZvW2ldLmluc3RydWN0aW9uT2Zmc2V0KTsKKworICAgIC8vIFRoZW4sIG1v
ZGlmeSB0aGUgdW5saW5rZWQgaW5zdHJ1Y3Rpb25zLgorICAgIHJld3JpdGVyLmFwcGx5TW9kaWZp
Y2F0aW9uKCk7CisKKyAgICAvLyBBbmQgcmVjb21wdXRlIHRoZSBqdW1wIHRhcmdldCBiYXNlZCBv
biB0aGUgbW9kaWZpZWQgdW5saW5rZWQgaW5zdHJ1Y3Rpb25zLgorICAgIG1fanVtcFRhcmdldHMu
Y2xlYXIoKTsKKyAgICByZWNvbXB1dGVQcmVjaXNlSnVtcFRhcmdldHModGhpcywgZ3JhcGguaW5z
dHJ1Y3Rpb25zKCkuYmVnaW4oKSwgZ3JhcGguaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpLCBtX2p1bXBU
YXJnZXRzKTsKK30KKworfQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
VW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25Db2RlQmxvY2suY3BwCShyZXZpc2lv
biAyMDgzMDgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRGdW5j
dGlvbkNvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0LDQwNyArMjQsMTUgQEAKICAq
LwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpbmNsdWRlICJVbmxpbmtlZENvZGVCbG9jay5o
IgotCi0jaW5jbHVkZSAiQnl0ZWNvZGVHZW5lcmF0b3IuaCIKLSNpbmNsdWRlICJCeXRlY29kZVJl
d3JpdGVyLmgiCi0jaW5jbHVkZSAiQ2xhc3NJbmZvLmgiCi0jaW5jbHVkZSAiQ29kZUNhY2hlLmgi
Ci0jaW5jbHVkZSAiRXhlY3V0YWJsZUluZm8uaCIKLSNpbmNsdWRlICJGdW5jdGlvbk92ZXJyaWRl
cy5oIgotI2luY2x1ZGUgIkpTU3RyaW5nLmgiCi0jaW5jbHVkZSAiSlNDSW5saW5lcy5oIgotI2lu
Y2x1ZGUgIlBhcnNlci5oIgotI2luY2x1ZGUgIlByZWNpc2VKdW1wVGFyZ2V0c0lubGluZXMuaCIK
LSNpbmNsdWRlICJTb3VyY2VQcm92aWRlci5oIgotI2luY2x1ZGUgIlN0cnVjdHVyZS5oIgotI2lu
Y2x1ZGUgIlN5bWJvbFRhYmxlLmgiCi0jaW5jbHVkZSAiVW5saW5rZWRJbnN0cnVjdGlvblN0cmVh
bS5oIgotI2luY2x1ZGUgPHd0Zi9EYXRhTG9nLmg+CisjaW5jbHVkZSAiVW5saW5rZWRGdW5jdGlv
bkNvZGVCbG9jay5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIAotY29uc3QgQ2xhc3NJbmZvIFVubGlu
a2VkQ29kZUJsb2NrOjpzX2luZm8gPSB7ICJVbmxpbmtlZENvZGVCbG9jayIsIDAsIDAsIENSRUFU
RV9NRVRIT0RfVEFCTEUoVW5saW5rZWRDb2RlQmxvY2spIH07Ci1jb25zdCBDbGFzc0luZm8gVW5s
aW5rZWRHbG9iYWxDb2RlQmxvY2s6OnNfaW5mbyA9IHsgIlVubGlua2VkR2xvYmFsQ29kZUJsb2Nr
IiwgJkJhc2U6OnNfaW5mbywgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShVbmxpbmtlZEdsb2JhbENv
ZGVCbG9jaykgfTsKLWNvbnN0IENsYXNzSW5mbyBVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2s6OnNf
aW5mbyA9IHsgIlVubGlua2VkUHJvZ3JhbUNvZGVCbG9jayIsICZCYXNlOjpzX2luZm8sIDAsIENS
RUFURV9NRVRIT0RfVEFCTEUoVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrKSB9OwotY29uc3QgQ2xh
c3NJbmZvIFVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jazo6c19pbmZvID0geyAiVW5saW5r
ZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrIiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgQ1JFQVRF
X01FVEhPRF9UQUJMRShVbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2spIH07Ci1jb25zdCBD
bGFzc0luZm8gVW5saW5rZWRFdmFsQ29kZUJsb2NrOjpzX2luZm8gPSB7ICJVbmxpbmtlZEV2YWxD
b2RlQmxvY2siLCAmQmFzZTo6c19pbmZvLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKFVubGlua2Vk
RXZhbENvZGVCbG9jaykgfTsKIGNvbnN0IENsYXNzSW5mbyBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJs
b2NrOjpzX2luZm8gPSB7ICJVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrIiwgJkJhc2U6OnNfaW5m
bywgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKSB9Owog
Ci1VbmxpbmtlZENvZGVCbG9jazo6VW5saW5rZWRDb2RlQmxvY2soVk0qIHZtLCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwgQ29kZVR5cGUgY29kZVR5cGUsIGNvbnN0IEV4ZWN1dGFibGVJbmZvJiBpbmZv
LCBEZWJ1Z2dlck1vZGUgZGVidWdnZXJNb2RlKQotICAgIDogQmFzZSgqdm0sIHN0cnVjdHVyZSkK
LSAgICAsIG1fbnVtVmFycygwKQotICAgICwgbV9udW1DYWxsZWVMb2NhbHMoMCkKLSAgICAsIG1f
bnVtUGFyYW1ldGVycygwKQotICAgICwgbV9nbG9iYWxPYmplY3RSZWdpc3RlcihWaXJ0dWFsUmVn
aXN0ZXIoKSkKLSAgICAsIG1fdXNlc0V2YWwoaW5mby51c2VzRXZhbCgpKQotICAgICwgbV9pc1N0
cmljdE1vZGUoaW5mby5pc1N0cmljdE1vZGUoKSkKLSAgICAsIG1faXNDb25zdHJ1Y3RvcihpbmZv
LmlzQ29uc3RydWN0b3IoKSkKLSAgICAsIG1faGFzQ2FwdHVyZWRWYXJpYWJsZXMoZmFsc2UpCi0g
ICAgLCBtX2lzQnVpbHRpbkZ1bmN0aW9uKGluZm8uaXNCdWlsdGluRnVuY3Rpb24oKSkKLSAgICAs
IG1fc3VwZXJCaW5kaW5nKHN0YXRpY19jYXN0PHVuc2lnbmVkPihpbmZvLnN1cGVyQmluZGluZygp
KSkKLSAgICAsIG1fc2NyaXB0TW9kZShzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaW5mby5zY3JpcHRN
b2RlKCkpKQotICAgICwgbV9pc0Fycm93RnVuY3Rpb25Db250ZXh0KGluZm8uaXNBcnJvd0Z1bmN0
aW9uQ29udGV4dCgpKQotICAgICwgbV9pc0NsYXNzQ29udGV4dChpbmZvLmlzQ2xhc3NDb250ZXh0
KCkpCi0gICAgLCBtX3dhc0NvbXBpbGVkV2l0aERlYnVnZ2luZ09wY29kZXMoZGVidWdnZXJNb2Rl
ID09IERlYnVnZ2VyTW9kZTo6RGVidWdnZXJPbiB8fCBPcHRpb25zOjpmb3JjZURlYnVnZ2VyQnl0
ZWNvZGVHZW5lcmF0aW9uKCkpCi0gICAgLCBtX2NvbnN0cnVjdG9yS2luZChzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oaW5mby5jb25zdHJ1Y3RvcktpbmQoKSkpCi0gICAgLCBtX2Rlcml2ZWRDb250ZXh0
VHlwZShzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaW5mby5kZXJpdmVkQ29udGV4dFR5cGUoKSkpCi0g
ICAgLCBtX2V2YWxDb250ZXh0VHlwZShzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaW5mby5ldmFsQ29u
dGV4dFR5cGUoKSkpCi0gICAgLCBtX2ZpcnN0TGluZSgwKQotICAgICwgbV9saW5lQ291bnQoMCkK
LSAgICAsIG1fZW5kQ29sdW1uKFVJTlRfTUFYKQotICAgICwgbV9kaWRPcHRpbWl6ZShNaXhlZFRy
aVN0YXRlKQotICAgICwgbV9wYXJzZU1vZGUoaW5mby5wYXJzZU1vZGUoKSkKLSAgICAsIG1fZmVh
dHVyZXMoMCkKLSAgICAsIG1fY29kZVR5cGUoY29kZVR5cGUpCi0gICAgLCBtX2FycmF5UHJvZmls
ZUNvdW50KDApCi0gICAgLCBtX2FycmF5QWxsb2NhdGlvblByb2ZpbGVDb3VudCgwKQotICAgICwg
bV9vYmplY3RBbGxvY2F0aW9uUHJvZmlsZUNvdW50KDApCi0gICAgLCBtX3ZhbHVlUHJvZmlsZUNv
dW50KDApCi0gICAgLCBtX2xsaW50Q2FsbExpbmtJbmZvQ291bnQoMCkKLXsKLSAgICBmb3IgKGF1
dG8mIGNvbnN0YW50UmVnaXN0ZXJJbmRleCA6IG1fbGlua1RpbWVDb25zdGFudHMpCi0gICAgICAg
IGNvbnN0YW50UmVnaXN0ZXJJbmRleCA9IDA7Ci0gICAgQVNTRVJUKG1fY29uc3RydWN0b3JLaW5k
ID09IHN0YXRpY19jYXN0PHVuc2lnbmVkPihpbmZvLmNvbnN0cnVjdG9yS2luZCgpKSk7Ci19Ci0K
LXZvaWQgVW5saW5rZWRDb2RlQmxvY2s6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90
VmlzaXRvciYgdmlzaXRvcikKLXsKLSAgICBVbmxpbmtlZENvZGVCbG9jayogdGhpc09iamVjdCA9
IGpzQ2FzdDxVbmxpbmtlZENvZGVCbG9jayo+KGNlbGwpOwotICAgIEFTU0VSVF9HQ19PQkpFQ1Rf
SU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKLSAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRo
aXNPYmplY3QsIHZpc2l0b3IpOwotICAgIGZvciAoRnVuY3Rpb25FeHByZXNzaW9uVmVjdG9yOjpp
dGVyYXRvciBwdHIgPSB0aGlzT2JqZWN0LT5tX2Z1bmN0aW9uRGVjbHMuYmVnaW4oKSwgZW5kID0g
dGhpc09iamVjdC0+bV9mdW5jdGlvbkRlY2xzLmVuZCgpOyBwdHIgIT0gZW5kOyArK3B0cikKLSAg
ICAgICAgdmlzaXRvci5hcHBlbmQocHRyKTsKLSAgICBmb3IgKEZ1bmN0aW9uRXhwcmVzc2lvblZl
Y3Rvcjo6aXRlcmF0b3IgcHRyID0gdGhpc09iamVjdC0+bV9mdW5jdGlvbkV4cHJzLmJlZ2luKCks
IGVuZCA9IHRoaXNPYmplY3QtPm1fZnVuY3Rpb25FeHBycy5lbmQoKTsgcHRyICE9IGVuZDsgKytw
dHIpCi0gICAgICAgIHZpc2l0b3IuYXBwZW5kKHB0cik7Ci0gICAgdmlzaXRvci5hcHBlbmRWYWx1
ZXModGhpc09iamVjdC0+bV9jb25zdGFudFJlZ2lzdGVycy5kYXRhKCksIHRoaXNPYmplY3QtPm1f
Y29uc3RhbnRSZWdpc3RlcnMuc2l6ZSgpKTsKLSAgICBpZiAodGhpc09iamVjdC0+bV91bmxpbmtl
ZEluc3RydWN0aW9ucykKLSAgICAgICAgdmlzaXRvci5yZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQo
dGhpc09iamVjdC0+bV91bmxpbmtlZEluc3RydWN0aW9ucy0+c2l6ZUluQnl0ZXMoKSk7Ci0gICAg
aWYgKHRoaXNPYmplY3QtPm1fcmFyZURhdGEpIHsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDAs
IGVuZCA9IHRoaXNPYmplY3QtPm1fcmFyZURhdGEtPm1fcmVnZXhwcy5zaXplKCk7IGkgIT0gZW5k
OyBpKyspCi0gICAgICAgICAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9yYXJlRGF0
YS0+bV9yZWdleHBzW2ldKTsKLSAgICB9Ci19Ci0KLXNpemVfdCBVbmxpbmtlZENvZGVCbG9jazo6
ZXN0aW1hdGVkU2l6ZShKU0NlbGwqIGNlbGwpCi17Ci0gICAgVW5saW5rZWRDb2RlQmxvY2sqIHRo
aXNPYmplY3QgPSBqc0Nhc3Q8VW5saW5rZWRDb2RlQmxvY2sqPihjZWxsKTsKLSAgICBzaXplX3Qg
ZXh0cmFTaXplID0gdGhpc09iamVjdC0+bV91bmxpbmtlZEluc3RydWN0aW9ucyA/IHRoaXNPYmpl
Y3QtPm1fdW5saW5rZWRJbnN0cnVjdGlvbnMtPnNpemVJbkJ5dGVzKCkgOiAwOwotICAgIHJldHVy
biBCYXNlOjplc3RpbWF0ZWRTaXplKGNlbGwpICsgZXh0cmFTaXplOwotfQotCi1pbnQgVW5saW5r
ZWRDb2RlQmxvY2s6OmxpbmVOdW1iZXJGb3JCeXRlY29kZU9mZnNldCh1bnNpZ25lZCBieXRlY29k
ZU9mZnNldCkKLXsKLSAgICBBU1NFUlQoYnl0ZWNvZGVPZmZzZXQgPCBpbnN0cnVjdGlvbnMoKS5j
b3VudCgpKTsKLSAgICBpbnQgZGl2b3Q7Ci0gICAgaW50IHN0YXJ0T2Zmc2V0OwotICAgIGludCBl
bmRPZmZzZXQ7Ci0gICAgdW5zaWduZWQgbGluZTsKLSAgICB1bnNpZ25lZCBjb2x1bW47Ci0gICAg
ZXhwcmVzc2lvblJhbmdlRm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQsIGRpdm90LCBz
dGFydE9mZnNldCwgZW5kT2Zmc2V0LCBsaW5lLCBjb2x1bW4pOwotICAgIHJldHVybiBsaW5lOwot
fQotCi1pbmxpbmUgdm9pZCBVbmxpbmtlZENvZGVCbG9jazo6Z2V0TGluZUFuZENvbHVtbihjb25z
dCBFeHByZXNzaW9uUmFuZ2VJbmZvJiBpbmZvLAotICAgIHVuc2lnbmVkJiBsaW5lLCB1bnNpZ25l
ZCYgY29sdW1uKSBjb25zdAotewotICAgIHN3aXRjaCAoaW5mby5tb2RlKSB7Ci0gICAgY2FzZSBF
eHByZXNzaW9uUmFuZ2VJbmZvOjpGYXRMaW5lTW9kZToKLSAgICAgICAgaW5mby5kZWNvZGVGYXRM
aW5lTW9kZShsaW5lLCBjb2x1bW4pOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEV4cHJlc3Np
b25SYW5nZUluZm86OkZhdENvbHVtbk1vZGU6Ci0gICAgICAgIGluZm8uZGVjb2RlRmF0Q29sdW1u
TW9kZShsaW5lLCBjb2x1bW4pOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEV4cHJlc3Npb25S
YW5nZUluZm86OkZhdExpbmVBbmRDb2x1bW5Nb2RlOiB7Ci0gICAgICAgIHVuc2lnbmVkIGZhdElu
ZGV4ID0gaW5mby5wb3NpdGlvbjsKLSAgICAgICAgRXhwcmVzc2lvblJhbmdlSW5mbzo6RmF0UG9z
aXRpb24mIGZhdFBvcyA9IG1fcmFyZURhdGEtPm1fZXhwcmVzc2lvbkluZm9GYXRQb3NpdGlvbnNb
ZmF0SW5kZXhdOwotICAgICAgICBsaW5lID0gZmF0UG9zLmxpbmU7Ci0gICAgICAgIGNvbHVtbiA9
IGZhdFBvcy5jb2x1bW47Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICB9IC8vIHN3aXRjaAot
fQotCi0jaWZuZGVmIE5ERUJVRwotc3RhdGljIHZvaWQgZHVtcExpbmVDb2x1bW5FbnRyeShzaXpl
X3QgaW5kZXgsIGNvbnN0IFVubGlua2VkSW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3RydWN0aW9uU3Ry
ZWFtLCB1bnNpZ25lZCBpbnN0cnVjdGlvbk9mZnNldCwgdW5zaWduZWQgbGluZSwgdW5zaWduZWQg
Y29sdW1uKQotewotICAgIGNvbnN0IGF1dG8mIGluc3RydWN0aW9ucyA9IGluc3RydWN0aW9uU3Ry
ZWFtLnVucGFja0ZvckRlYnVnZ2luZygpOwotICAgIE9wY29kZUlEIG9wY29kZSA9IGluc3RydWN0
aW9uc1tpbnN0cnVjdGlvbk9mZnNldF0udS5vcGNvZGU7Ci0gICAgY29uc3QgY2hhciogZXZlbnQg
PSAiIjsKLSAgICBpZiAob3Bjb2RlID09IG9wX2RlYnVnKSB7Ci0gICAgICAgIHN3aXRjaCAoaW5z
dHJ1Y3Rpb25zW2luc3RydWN0aW9uT2Zmc2V0ICsgMV0udS5vcGVyYW5kKSB7Ci0gICAgICAgIGNh
c2UgV2lsbEV4ZWN1dGVQcm9ncmFtOiBldmVudCA9ICIgV2lsbEV4ZWN1dGVQcm9ncmFtIjsgYnJl
YWs7Ci0gICAgICAgIGNhc2UgRGlkRXhlY3V0ZVByb2dyYW06IGV2ZW50ID0gIiBEaWRFeGVjdXRl
UHJvZ3JhbSI7IGJyZWFrOwotICAgICAgICBjYXNlIERpZEVudGVyQ2FsbEZyYW1lOiBldmVudCA9
ICIgRGlkRW50ZXJDYWxsRnJhbWUiOyBicmVhazsKLSAgICAgICAgY2FzZSBEaWRSZWFjaEJyZWFr
cG9pbnQ6IGV2ZW50ID0gIiBEaWRSZWFjaEJyZWFrcG9pbnQiOyBicmVhazsKLSAgICAgICAgY2Fz
ZSBXaWxsTGVhdmVDYWxsRnJhbWU6IGV2ZW50ID0gIiBXaWxsTGVhdmVDYWxsRnJhbWUiOyBicmVh
azsKLSAgICAgICAgY2FzZSBXaWxsRXhlY3V0ZVN0YXRlbWVudDogZXZlbnQgPSAiIFdpbGxFeGVj
dXRlU3RhdGVtZW50IjsgYnJlYWs7Ci0gICAgICAgIGNhc2UgV2lsbEV4ZWN1dGVFeHByZXNzaW9u
OiBldmVudCA9ICIgV2lsbEV4ZWN1dGVFeHByZXNzaW9uIjsgYnJlYWs7Ci0gICAgICAgIH0KLSAg
ICB9Ci0gICAgZGF0YUxvZ0YoIiAgWyV6dV0gcGMgJXUgQCBsaW5lICV1IGNvbCAldSA6ICVzJXNc
biIsIGluZGV4LCBpbnN0cnVjdGlvbk9mZnNldCwgbGluZSwgY29sdW1uLCBvcGNvZGVOYW1lc1tv
cGNvZGVdLCBldmVudCk7Ci19Ci0KLXZvaWQgVW5saW5rZWRDb2RlQmxvY2s6OmR1bXBFeHByZXNz
aW9uUmFuZ2VJbmZvKCkKLXsKLSAgICBWZWN0b3I8RXhwcmVzc2lvblJhbmdlSW5mbz4mIGV4cHJl
c3Npb25JbmZvID0gbV9leHByZXNzaW9uSW5mbzsKLQotICAgIHNpemVfdCBzaXplID0gbV9leHBy
ZXNzaW9uSW5mby5zaXplKCk7Ci0gICAgZGF0YUxvZ0YoIlVubGlua2VkQ29kZUJsb2NrICVwIGV4
cHJlc3Npb25SYW5nZUluZm9bJXp1XSB7XG4iLCB0aGlzLCBzaXplKTsKLSAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IHNpemU7IGkrKykgewotICAgICAgICBFeHByZXNzaW9uUmFuZ2VJbmZvJiBp
bmZvID0gZXhwcmVzc2lvbkluZm9baV07Ci0gICAgICAgIHVuc2lnbmVkIGxpbmU7Ci0gICAgICAg
IHVuc2lnbmVkIGNvbHVtbjsKLSAgICAgICAgZ2V0TGluZUFuZENvbHVtbihpbmZvLCBsaW5lLCBj
b2x1bW4pOwotICAgICAgICBkdW1wTGluZUNvbHVtbkVudHJ5KGksIGluc3RydWN0aW9ucygpLCBp
bmZvLmluc3RydWN0aW9uT2Zmc2V0LCBsaW5lLCBjb2x1bW4pOwotICAgIH0KLSAgICBkYXRhTG9n
KCJ9XG4iKTsKLX0KLSNlbmRpZgotCi12b2lkIFVubGlua2VkQ29kZUJsb2NrOjpleHByZXNzaW9u
UmFuZ2VGb3JCeXRlY29kZU9mZnNldCh1bnNpZ25lZCBieXRlY29kZU9mZnNldCwKLSAgICBpbnQm
IGRpdm90LCBpbnQmIHN0YXJ0T2Zmc2V0LCBpbnQmIGVuZE9mZnNldCwgdW5zaWduZWQmIGxpbmUs
IHVuc2lnbmVkJiBjb2x1bW4pIGNvbnN0Ci17Ci0gICAgQVNTRVJUKGJ5dGVjb2RlT2Zmc2V0IDwg
aW5zdHJ1Y3Rpb25zKCkuY291bnQoKSk7Ci0KLSAgICBpZiAoIW1fZXhwcmVzc2lvbkluZm8uc2l6
ZSgpKSB7Ci0gICAgICAgIHN0YXJ0T2Zmc2V0ID0gMDsKLSAgICAgICAgZW5kT2Zmc2V0ID0gMDsK
LSAgICAgICAgZGl2b3QgPSAwOwotICAgICAgICBsaW5lID0gMDsKLSAgICAgICAgY29sdW1uID0g
MDsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGNvbnN0IFZlY3RvcjxFeHByZXNzaW9u
UmFuZ2VJbmZvPiYgZXhwcmVzc2lvbkluZm8gPSBtX2V4cHJlc3Npb25JbmZvOwotCi0gICAgaW50
IGxvdyA9IDA7Ci0gICAgaW50IGhpZ2ggPSBleHByZXNzaW9uSW5mby5zaXplKCk7Ci0gICAgd2hp
bGUgKGxvdyA8IGhpZ2gpIHsKLSAgICAgICAgaW50IG1pZCA9IGxvdyArIChoaWdoIC0gbG93KSAv
IDI7Ci0gICAgICAgIGlmIChleHByZXNzaW9uSW5mb1ttaWRdLmluc3RydWN0aW9uT2Zmc2V0IDw9
IGJ5dGVjb2RlT2Zmc2V0KQotICAgICAgICAgICAgbG93ID0gbWlkICsgMTsKLSAgICAgICAgZWxz
ZQotICAgICAgICAgICAgaGlnaCA9IG1pZDsKLSAgICB9Ci0KLSAgICBpZiAoIWxvdykKLSAgICAg
ICAgbG93ID0gMTsKLQotICAgIGNvbnN0IEV4cHJlc3Npb25SYW5nZUluZm8mIGluZm8gPSBleHBy
ZXNzaW9uSW5mb1tsb3cgLSAxXTsKLSAgICBzdGFydE9mZnNldCA9IGluZm8uc3RhcnRPZmZzZXQ7
Ci0gICAgZW5kT2Zmc2V0ID0gaW5mby5lbmRPZmZzZXQ7Ci0gICAgZGl2b3QgPSBpbmZvLmRpdm90
UG9pbnQ7Ci0gICAgZ2V0TGluZUFuZENvbHVtbihpbmZvLCBsaW5lLCBjb2x1bW4pOwotfQotCi12
b2lkIFVubGlua2VkQ29kZUJsb2NrOjphZGRFeHByZXNzaW9uSW5mbyh1bnNpZ25lZCBpbnN0cnVj
dGlvbk9mZnNldCwKLSAgICBpbnQgZGl2b3QsIGludCBzdGFydE9mZnNldCwgaW50IGVuZE9mZnNl
dCwgdW5zaWduZWQgbGluZSwgdW5zaWduZWQgY29sdW1uKQotewotICAgIGlmIChkaXZvdCA+IEV4
cHJlc3Npb25SYW5nZUluZm86Ok1heERpdm90KSB7Ci0gICAgICAgIC8vIE92ZXJmbG93IGhhcyBv
Y2N1cnJlZCwgd2UgY2FuIG9ubHkgZ2l2ZSBsaW5lIG51bWJlciBpbmZvIGZvciBlcnJvcnMgZm9y
IHRoaXMgcmVnaW9uCi0gICAgICAgIGRpdm90ID0gMDsKLSAgICAgICAgc3RhcnRPZmZzZXQgPSAw
OwotICAgICAgICBlbmRPZmZzZXQgPSAwOwotICAgIH0gZWxzZSBpZiAoc3RhcnRPZmZzZXQgPiBF
eHByZXNzaW9uUmFuZ2VJbmZvOjpNYXhPZmZzZXQpIHsKLSAgICAgICAgLy8gSWYgdGhlIHN0YXJ0
IG9mZnNldCBpcyBvdXQgb2YgYm91bmRzIHdlIGNsZWFyIGJvdGggb2Zmc2V0cwotICAgICAgICAv
LyBzbyB3ZSBvbmx5IGdldCB0aGUgZGl2b3QgbWFya2VyLiBFcnJvciBtZXNzYWdlIHdpbGwgaGF2
ZSB0byBiZSByZWR1Y2VkCi0gICAgICAgIC8vIHRvIGxpbmUgYW5kIGNoYXJQb3NpdGlvbiBudW1i
ZXIuCi0gICAgICAgIHN0YXJ0T2Zmc2V0ID0gMDsKLSAgICAgICAgZW5kT2Zmc2V0ID0gMDsKLSAg
ICB9IGVsc2UgaWYgKGVuZE9mZnNldCA+IEV4cHJlc3Npb25SYW5nZUluZm86Ok1heE9mZnNldCkg
ewotICAgICAgICAvLyBUaGUgZW5kIG9mZnNldCBpcyBvbmx5IHVzZWQgZm9yIGFkZGl0aW9uYWwg
Y29udGV4dCwgYW5kIGlzIG11Y2ggbW9yZSBsaWtlbHkKLSAgICAgICAgLy8gdG8gb3ZlcmZsb3cg
KGVnLiBmdW5jdGlvbiBjYWxsIGFyZ3VtZW50cykgc28gd2UgYXJlIHdpbGxpbmcgdG8gZHJvcCBp
dCB3aXRob3V0Ci0gICAgICAgIC8vIGRyb3BwaW5nIHRoZSByZXN0IG9mIHRoZSByYW5nZS4KLSAg
ICAgICAgZW5kT2Zmc2V0ID0gMDsKLSAgICB9Ci0KLSAgICB1bnNpZ25lZCBwb3NpdGlvbk1vZGUg
PQotICAgICAgICAobGluZSA8PSBFeHByZXNzaW9uUmFuZ2VJbmZvOjpNYXhGYXRMaW5lTW9kZUxp
bmUgJiYgY29sdW1uIDw9IEV4cHJlc3Npb25SYW5nZUluZm86Ok1heEZhdExpbmVNb2RlQ29sdW1u
KSAKLSAgICAgICAgPyBFeHByZXNzaW9uUmFuZ2VJbmZvOjpGYXRMaW5lTW9kZQotICAgICAgICA6
IChsaW5lIDw9IEV4cHJlc3Npb25SYW5nZUluZm86Ok1heEZhdENvbHVtbk1vZGVMaW5lICYmIGNv
bHVtbiA8PSBFeHByZXNzaW9uUmFuZ2VJbmZvOjpNYXhGYXRDb2x1bW5Nb2RlQ29sdW1uKQotICAg
ICAgICA/IEV4cHJlc3Npb25SYW5nZUluZm86OkZhdENvbHVtbk1vZGUKLSAgICAgICAgOiBFeHBy
ZXNzaW9uUmFuZ2VJbmZvOjpGYXRMaW5lQW5kQ29sdW1uTW9kZTsKLQotICAgIEV4cHJlc3Npb25S
YW5nZUluZm8gaW5mbzsKLSAgICBpbmZvLmluc3RydWN0aW9uT2Zmc2V0ID0gaW5zdHJ1Y3Rpb25P
ZmZzZXQ7Ci0gICAgaW5mby5kaXZvdFBvaW50ID0gZGl2b3Q7Ci0gICAgaW5mby5zdGFydE9mZnNl
dCA9IHN0YXJ0T2Zmc2V0OwotICAgIGluZm8uZW5kT2Zmc2V0ID0gZW5kT2Zmc2V0OwotCi0gICAg
aW5mby5tb2RlID0gcG9zaXRpb25Nb2RlOwotICAgIHN3aXRjaCAocG9zaXRpb25Nb2RlKSB7Ci0g
ICAgY2FzZSBFeHByZXNzaW9uUmFuZ2VJbmZvOjpGYXRMaW5lTW9kZToKLSAgICAgICAgaW5mby5l
bmNvZGVGYXRMaW5lTW9kZShsaW5lLCBjb2x1bW4pOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IEV4cHJlc3Npb25SYW5nZUluZm86OkZhdENvbHVtbk1vZGU6Ci0gICAgICAgIGluZm8uZW5jb2Rl
RmF0Q29sdW1uTW9kZShsaW5lLCBjb2x1bW4pOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEV4
cHJlc3Npb25SYW5nZUluZm86OkZhdExpbmVBbmRDb2x1bW5Nb2RlOiB7Ci0gICAgICAgIGNyZWF0
ZVJhcmVEYXRhSWZOZWNlc3NhcnkoKTsKLSAgICAgICAgdW5zaWduZWQgZmF0SW5kZXggPSBtX3Jh
cmVEYXRhLT5tX2V4cHJlc3Npb25JbmZvRmF0UG9zaXRpb25zLnNpemUoKTsKLSAgICAgICAgRXhw
cmVzc2lvblJhbmdlSW5mbzo6RmF0UG9zaXRpb24gZmF0UG9zID0geyBsaW5lLCBjb2x1bW4gfTsK
LSAgICAgICAgbV9yYXJlRGF0YS0+bV9leHByZXNzaW9uSW5mb0ZhdFBvc2l0aW9ucy5hcHBlbmQo
ZmF0UG9zKTsKLSAgICAgICAgaW5mby5wb3NpdGlvbiA9IGZhdEluZGV4OwotICAgIH0KLSAgICB9
IC8vIHN3aXRjaAotCi0gICAgbV9leHByZXNzaW9uSW5mby5hcHBlbmQoaW5mbyk7Ci19Ci0KLWJv
b2wgVW5saW5rZWRDb2RlQmxvY2s6OnR5cGVQcm9maWxlckV4cHJlc3Npb25JbmZvRm9yQnl0ZWNv
ZGVPZmZzZXQodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQsIHVuc2lnbmVkJiBzdGFydERpdm90LCB1
bnNpZ25lZCYgZW5kRGl2b3QpCi17Ci0gICAgc3RhdGljIGNvbnN0IGJvb2wgdmVyYm9zZSA9IGZh
bHNlOwotICAgIGlmICghbV9yYXJlRGF0YSkgewotICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAg
ICAgICAgIGRhdGFMb2dGKCJEb24ndCBoYXZlIGFzc2lnbm1lbnQgaW5mbyBmb3Igb2Zmc2V0OiV1
XG4iLCBieXRlY29kZU9mZnNldCk7Ci0gICAgICAgIHN0YXJ0RGl2b3QgPSBVSU5UX01BWDsKLSAg
ICAgICAgZW5kRGl2b3QgPSBVSU5UX01BWDsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
LQotICAgIGF1dG8gaXRlciA9IG1fcmFyZURhdGEtPm1fdHlwZVByb2ZpbGVySW5mb01hcC5maW5k
KGJ5dGVjb2RlT2Zmc2V0KTsKLSAgICBpZiAoaXRlciA9PSBtX3JhcmVEYXRhLT5tX3R5cGVQcm9m
aWxlckluZm9NYXAuZW5kKCkpIHsKLSAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAgICBk
YXRhTG9nRigiRG9uJ3QgaGF2ZSBhc3NpZ25tZW50IGluZm8gZm9yIG9mZnNldDoldVxuIiwgYnl0
ZWNvZGVPZmZzZXQpOwotICAgICAgICBzdGFydERpdm90ID0gVUlOVF9NQVg7Ci0gICAgICAgIGVu
ZERpdm90ID0gVUlOVF9NQVg7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgCi0g
ICAgUmFyZURhdGE6OlR5cGVQcm9maWxlckV4cHJlc3Npb25SYW5nZSYgcmFuZ2UgPSBpdGVyLT52
YWx1ZTsKLSAgICBzdGFydERpdm90ID0gcmFuZ2UubV9zdGFydERpdm90OwotICAgIGVuZERpdm90
ID0gcmFuZ2UubV9lbmREaXZvdDsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBVbmxpbmtl
ZENvZGVCbG9jazo6YWRkVHlwZVByb2ZpbGVyRXhwcmVzc2lvbkluZm8odW5zaWduZWQgaW5zdHJ1
Y3Rpb25PZmZzZXQsIHVuc2lnbmVkIHN0YXJ0RGl2b3QsIHVuc2lnbmVkIGVuZERpdm90KQotewot
ICAgIGNyZWF0ZVJhcmVEYXRhSWZOZWNlc3NhcnkoKTsKLSAgICBSYXJlRGF0YTo6VHlwZVByb2Zp
bGVyRXhwcmVzc2lvblJhbmdlIHJhbmdlOwotICAgIHJhbmdlLm1fc3RhcnREaXZvdCA9IHN0YXJ0
RGl2b3Q7Ci0gICAgcmFuZ2UubV9lbmREaXZvdCA9IGVuZERpdm90OwotICAgIG1fcmFyZURhdGEt
Pm1fdHlwZVByb2ZpbGVySW5mb01hcC5zZXQoaW5zdHJ1Y3Rpb25PZmZzZXQsIHJhbmdlKTsKLX0K
LQotdm9pZCBVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2s6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBj
ZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKLXsKLSAgICBVbmxpbmtlZFByb2dyYW1Db2RlQmxv
Y2sqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8VW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrKj4oY2VsbCk7
Ci0gICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwotICAg
IEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7Ci19Ci0KLXZvaWQgVW5s
aW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwg
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCi17Ci0gICAgVW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJs
b2NrKiB0aGlzT2JqZWN0ID0ganNDYXN0PFVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayo+
KGNlbGwpOwotICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygp
KTsKLSAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwotfQotCi1V
bmxpbmtlZENvZGVCbG9jazo6flVubGlua2VkQ29kZUJsb2NrKCkKLXsKLX0KLQotdm9pZCBVbmxp
bmtlZFByb2dyYW1Db2RlQmxvY2s6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQotewotICAgIGpzQ2Fz
dDxVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2sqPihjZWxsKS0+flVubGlua2VkUHJvZ3JhbUNvZGVC
bG9jaygpOwotfQotCi12b2lkIFVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jazo6ZGVzdHJv
eShKU0NlbGwqIGNlbGwpCi17Ci0gICAganNDYXN0PFVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVC
bG9jayo+KGNlbGwpLT5+VW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrKCk7Ci19Ci0KLXZv
aWQgVW5saW5rZWRFdmFsQ29kZUJsb2NrOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKLXsKLSAgICBq
c0Nhc3Q8VW5saW5rZWRFdmFsQ29kZUJsb2NrKj4oY2VsbCktPn5VbmxpbmtlZEV2YWxDb2RlQmxv
Y2soKTsKLX0KLQogdm9pZCBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrOjpkZXN0cm95KEpTQ2Vs
bCogY2VsbCkKIHsKICAgICBqc0Nhc3Q8VW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayo+KGNlbGwp
LT5+VW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jaygpOwogfQogCi12b2lkIFVubGlua2VkRnVuY3Rp
b25FeGVjdXRhYmxlOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKLXsKLSAgICBqc0Nhc3Q8VW5saW5r
ZWRGdW5jdGlvbkV4ZWN1dGFibGUqPihjZWxsKS0+flVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxl
KCk7Ci19Ci0KLXZvaWQgVW5saW5rZWRDb2RlQmxvY2s6OnNldEluc3RydWN0aW9ucyhzdGQ6OnVu
aXF1ZV9wdHI8VW5saW5rZWRJbnN0cnVjdGlvblN0cmVhbT4gaW5zdHJ1Y3Rpb25zKQotewotICAg
IEFTU0VSVChpbnN0cnVjdGlvbnMpOwotICAgIG1fdW5saW5rZWRJbnN0cnVjdGlvbnMgPSBXVEZN
b3ZlKGluc3RydWN0aW9ucyk7Ci0gICAgSGVhcDo6aGVhcCh0aGlzKS0+cmVwb3J0RXh0cmFNZW1v
cnlBbGxvY2F0ZWQobV91bmxpbmtlZEluc3RydWN0aW9ucy0+c2l6ZUluQnl0ZXMoKSk7Ci19Ci0K
LWNvbnN0IFVubGlua2VkSW5zdHJ1Y3Rpb25TdHJlYW0mIFVubGlua2VkQ29kZUJsb2NrOjppbnN0
cnVjdGlvbnMoKSBjb25zdAotewotICAgIEFTU0VSVChtX3VubGlua2VkSW5zdHJ1Y3Rpb25zLmdl
dCgpKTsKLSAgICByZXR1cm4gKm1fdW5saW5rZWRJbnN0cnVjdGlvbnM7Ci19Ci0KLVVubGlua2Vk
SGFuZGxlckluZm8qIFVubGlua2VkQ29kZUJsb2NrOjpoYW5kbGVyRm9yQnl0ZWNvZGVPZmZzZXQo
dW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQsIFJlcXVpcmVkSGFuZGxlciByZXF1aXJlZEhhbmRsZXIp
Ci17Ci0gICAgcmV0dXJuIGhhbmRsZXJGb3JJbmRleChieXRlY29kZU9mZnNldCwgcmVxdWlyZWRI
YW5kbGVyKTsKLX0KLQotVW5saW5rZWRIYW5kbGVySW5mbyogVW5saW5rZWRDb2RlQmxvY2s6Omhh
bmRsZXJGb3JJbmRleCh1bnNpZ25lZCBpbmRleCwgUmVxdWlyZWRIYW5kbGVyIHJlcXVpcmVkSGFu
ZGxlcikKLXsKLSAgICBpZiAoIW1fcmFyZURhdGEpCi0gICAgICAgIHJldHVybiBudWxscHRyOwot
ICAgIHJldHVybiBVbmxpbmtlZEhhbmRsZXJJbmZvOjpoYW5kbGVyRm9ySW5kZXgobV9yYXJlRGF0
YS0+bV9leGNlcHRpb25IYW5kbGVycywgaW5kZXgsIHJlcXVpcmVkSGFuZGxlcik7CiB9Ci0KLXZv
aWQgVW5saW5rZWRDb2RlQmxvY2s6OmFwcGx5TW9kaWZpY2F0aW9uKEJ5dGVjb2RlUmV3cml0ZXIm
IHJld3JpdGVyKQotewotICAgIC8vIEJlZm9yZSBhcHBseWluZyB0aGUgY2hhbmdlcywgd2UgYWRq
dXN0IHRoZSBqdW1wcyBiYXNlZCBvbiB0aGUgb3JpZ2luYWwgYnl0ZWNvZGUgb2Zmc2V0LCB0aGUg
b2Zmc2V0IHRvIHRoZSBqdW1wIHRhcmdldCwgYW5kCi0gICAgLy8gdGhlIGluc2VydGlvbiBpbmZv
cm1hdGlvbi4KLQotICAgIEJ5dGVjb2RlR3JhcGg8VW5saW5rZWRDb2RlQmxvY2s+JiBncmFwaCA9
IHJld3JpdGVyLmdyYXBoKCk7Ci0gICAgVW5saW5rZWRJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb25z
QmVnaW4gPSBncmFwaC5pbnN0cnVjdGlvbnMoKS5iZWdpbigpOwotCi0gICAgZm9yIChpbnQgYnl0
ZWNvZGVPZmZzZXQgPSAwLCBpbnN0cnVjdGlvbkNvdW50ID0gZ3JhcGguaW5zdHJ1Y3Rpb25zKCku
c2l6ZSgpOyBieXRlY29kZU9mZnNldCA8IGluc3RydWN0aW9uQ291bnQ7KSB7Ci0gICAgICAgIFVu
bGlua2VkSW5zdHJ1Y3Rpb24qIGN1cnJlbnQgPSBpbnN0cnVjdGlvbnNCZWdpbiArIGJ5dGVjb2Rl
T2Zmc2V0OwotICAgICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IGN1cnJlbnRbMF0udS5vcGNvZGU7
Ci0gICAgICAgIGV4dHJhY3RTdG9yZWRKdW1wVGFyZ2V0c0ZvckJ5dGVjb2RlT2Zmc2V0KHRoaXMs
IHZtKCktPmludGVycHJldGVyLCBpbnN0cnVjdGlvbnNCZWdpbiwgYnl0ZWNvZGVPZmZzZXQsIFsm
XShpbnQzMl90JiByZWxhdGl2ZU9mZnNldCkgewotICAgICAgICAgICAgcmVsYXRpdmVPZmZzZXQg
PSByZXdyaXRlci5hZGp1c3RKdW1wVGFyZ2V0KGJ5dGVjb2RlT2Zmc2V0LCBieXRlY29kZU9mZnNl
dCArIHJlbGF0aXZlT2Zmc2V0KTsKLSAgICAgICAgfSk7Ci0gICAgICAgIGJ5dGVjb2RlT2Zmc2V0
ICs9IG9wY29kZUxlbmd0aChvcGNvZGVJRCk7Ci0gICAgfQotCi0gICAgLy8gVGhlbiwgZXhjZXB0
aW9uIGhhbmRsZXJzIHNob3VsZCBiZSBhZGp1c3RlZC4KLSAgICBpZiAobV9yYXJlRGF0YSkgewot
ICAgICAgICBmb3IgKFVubGlua2VkSGFuZGxlckluZm8mIGhhbmRsZXIgOiBtX3JhcmVEYXRhLT5t
X2V4Y2VwdGlvbkhhbmRsZXJzKSB7Ci0gICAgICAgICAgICBoYW5kbGVyLnRhcmdldCA9IHJld3Jp
dGVyLmFkanVzdEFic29sdXRlT2Zmc2V0KGhhbmRsZXIudGFyZ2V0KTsKLSAgICAgICAgICAgIGhh
bmRsZXIuc3RhcnQgPSByZXdyaXRlci5hZGp1c3RBYnNvbHV0ZU9mZnNldChoYW5kbGVyLnN0YXJ0
KTsKLSAgICAgICAgICAgIGhhbmRsZXIuZW5kID0gcmV3cml0ZXIuYWRqdXN0QWJzb2x1dGVPZmZz
ZXQoaGFuZGxlci5lbmQpOwotICAgICAgICB9Ci0KLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBtX3JhcmVEYXRhLT5tX29wUHJvZmlsZUNvbnRyb2xGbG93Qnl0ZWNvZGVPZmZzZXRzLnNp
emUoKTsgKytpKQotICAgICAgICAgICAgbV9yYXJlRGF0YS0+bV9vcFByb2ZpbGVDb250cm9sRmxv
d0J5dGVjb2RlT2Zmc2V0c1tpXSA9IHJld3JpdGVyLmFkanVzdEFic29sdXRlT2Zmc2V0KG1fcmFy
ZURhdGEtPm1fb3BQcm9maWxlQ29udHJvbEZsb3dCeXRlY29kZU9mZnNldHNbaV0pOwotCi0gICAg
ICAgIGlmICghbV9yYXJlRGF0YS0+bV90eXBlUHJvZmlsZXJJbmZvTWFwLmlzRW1wdHkoKSkgewot
ICAgICAgICAgICAgSGFzaE1hcDx1bnNpZ25lZCwgUmFyZURhdGE6OlR5cGVQcm9maWxlckV4cHJl
c3Npb25SYW5nZT4gYWRqdXN0ZWRUeXBlUHJvZmlsZXJJbmZvTWFwOwotICAgICAgICAgICAgZm9y
IChhdXRvJiBlbnRyeSA6IG1fcmFyZURhdGEtPm1fdHlwZVByb2ZpbGVySW5mb01hcCkKLSAgICAg
ICAgICAgICAgICBhZGp1c3RlZFR5cGVQcm9maWxlckluZm9NYXAuc2V0KHJld3JpdGVyLmFkanVz
dEFic29sdXRlT2Zmc2V0KGVudHJ5LmtleSksIGVudHJ5LnZhbHVlKTsKLSAgICAgICAgICAgIG1f
cmFyZURhdGEtPm1fdHlwZVByb2ZpbGVySW5mb01hcC5zd2FwKGFkanVzdGVkVHlwZVByb2ZpbGVy
SW5mb01hcCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IG1fcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbnMuc2l6ZSgpOyArK2kpCi0gICAgICAgIG1fcHJv
cGVydHlBY2Nlc3NJbnN0cnVjdGlvbnNbaV0gPSByZXdyaXRlci5hZGp1c3RBYnNvbHV0ZU9mZnNl
dChtX3Byb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25zW2ldKTsKLQotICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgbV9leHByZXNzaW9uSW5mby5zaXplKCk7ICsraSkKLSAgICAgICAgbV9leHByZXNz
aW9uSW5mb1tpXS5pbnN0cnVjdGlvbk9mZnNldCA9IHJld3JpdGVyLmFkanVzdEFic29sdXRlT2Zm
c2V0KG1fZXhwcmVzc2lvbkluZm9baV0uaW5zdHJ1Y3Rpb25PZmZzZXQpOwotCi0gICAgLy8gVGhl
biwgbW9kaWZ5IHRoZSB1bmxpbmtlZCBpbnN0cnVjdGlvbnMuCi0gICAgcmV3cml0ZXIuYXBwbHlN
b2RpZmljYXRpb24oKTsKLQotICAgIC8vIEFuZCByZWNvbXB1dGUgdGhlIGp1bXAgdGFyZ2V0IGJh
c2VkIG9uIHRoZSBtb2RpZmllZCB1bmxpbmtlZCBpbnN0cnVjdGlvbnMuCi0gICAgbV9qdW1wVGFy
Z2V0cy5jbGVhcigpOwotICAgIHJlY29tcHV0ZVByZWNpc2VKdW1wVGFyZ2V0cyh0aGlzLCBncmFw
aC5pbnN0cnVjdGlvbnMoKS5iZWdpbigpLCBncmFwaC5pbnN0cnVjdGlvbnMoKS5zaXplKCksIG1f
anVtcFRhcmdldHMpOwotfQotCi19Ci0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9VbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25Db2RlQmxvY2suaAkocmV2aXNp
b24gMjA4MzA4KQkoZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRD
b2RlQmxvY2suaDoyMDgzMDgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5s
aW5rZWRGdW5jdGlvbkNvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjg2IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTYgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJh
Z21hIG9uY2UKKworI2luY2x1ZGUgIkJ5dGVjb2RlQ29udmVudGlvbnMuaCIKKyNpbmNsdWRlICJD
b2RlU3BlY2lhbGl6YXRpb25LaW5kLmgiCisjaW5jbHVkZSAiQ29kZVR5cGUuaCIKKyNpbmNsdWRl
ICJDb25zdHJ1Y3RBYmlsaXR5LmgiCisjaW5jbHVkZSAiRXhwcmVzc2lvblJhbmdlSW5mby5oIgor
I2luY2x1ZGUgIkhhbmRsZXJJbmZvLmgiCisjaW5jbHVkZSAiSWRlbnRpZmllci5oIgorI2luY2x1
ZGUgIkpTQ2VsbC5oIgorI2luY2x1ZGUgIkpTU3RyaW5nLmgiCisjaW5jbHVkZSAiUGFyc2VyTW9k
ZXMuaCIKKyNpbmNsdWRlICJSZWdFeHAuaCIKKyNpbmNsdWRlICJTcGVjaWFsUG9pbnRlci5oIgor
I2luY2x1ZGUgIlVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLmgiCisjaW5jbHVkZSAiVmFyaWFi
bGVFbnZpcm9ubWVudC5oIgorI2luY2x1ZGUgIlZpcnR1YWxSZWdpc3Rlci5oIgorI2luY2x1ZGUg
PHd0Zi9UcmlTdGF0ZS5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpT
QyB7CisKK2NsYXNzIEJ5dGVjb2RlUmV3cml0ZXI7CitjbGFzcyBEZWJ1Z2dlcjsKK2NsYXNzIEZ1
bmN0aW9uRXhlY3V0YWJsZTsKK2NsYXNzIFBhcnNlckVycm9yOworY2xhc3MgU2NyaXB0RXhlY3V0
YWJsZTsKK2NsYXNzIFNvdXJjZUNvZGU7CitjbGFzcyBTb3VyY2VQcm92aWRlcjsKK2NsYXNzIFVu
bGlua2VkQ29kZUJsb2NrOworY2xhc3MgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jazsKK2NsYXNz
IFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOworY2xhc3MgVW5saW5rZWRJbnN0cnVjdGlvblN0
cmVhbTsKK3N0cnVjdCBFeGVjdXRhYmxlSW5mbzsKKwordHlwZWRlZiB1bnNpZ25lZCBVbmxpbmtl
ZFZhbHVlUHJvZmlsZTsKK3R5cGVkZWYgdW5zaWduZWQgVW5saW5rZWRBcnJheVByb2ZpbGU7Cit0
eXBlZGVmIHVuc2lnbmVkIFVubGlua2VkQXJyYXlBbGxvY2F0aW9uUHJvZmlsZTsKK3R5cGVkZWYg
dW5zaWduZWQgVW5saW5rZWRPYmplY3RBbGxvY2F0aW9uUHJvZmlsZTsKK3R5cGVkZWYgdW5zaWdu
ZWQgVW5saW5rZWRMTEludENhbGxMaW5rSW5mbzsKKworc3RydWN0IFVubGlua2VkU3RyaW5nSnVt
cFRhYmxlIHsKKyAgICBzdHJ1Y3QgT2Zmc2V0TG9jYXRpb24geworICAgICAgICBpbnQzMl90IGJy
YW5jaE9mZnNldDsKKyAgICB9OworCisgICAgdHlwZWRlZiBIYXNoTWFwPFJlZlB0cjxTdHJpbmdJ
bXBsPiwgT2Zmc2V0TG9jYXRpb24+IFN0cmluZ09mZnNldFRhYmxlOworICAgIFN0cmluZ09mZnNl
dFRhYmxlIG9mZnNldFRhYmxlOworCisgICAgaW5saW5lIGludDMyX3Qgb2Zmc2V0Rm9yVmFsdWUo
U3RyaW5nSW1wbCogdmFsdWUsIGludDMyX3QgZGVmYXVsdE9mZnNldCkKKyAgICB7CisgICAgICAg
IFN0cmluZ09mZnNldFRhYmxlOjpjb25zdF9pdGVyYXRvciBlbmQgPSBvZmZzZXRUYWJsZS5lbmQo
KTsKKyAgICAgICAgU3RyaW5nT2Zmc2V0VGFibGU6OmNvbnN0X2l0ZXJhdG9yIGxvYyA9IG9mZnNl
dFRhYmxlLmZpbmQodmFsdWUpOworICAgICAgICBpZiAobG9jID09IGVuZCkKKyAgICAgICAgICAg
IHJldHVybiBkZWZhdWx0T2Zmc2V0OworICAgICAgICByZXR1cm4gbG9jLT52YWx1ZS5icmFuY2hP
ZmZzZXQ7CisgICAgfQorCit9OworCitzdHJ1Y3QgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUgewor
ICAgIFZlY3RvcjxpbnQzMl90PiBicmFuY2hPZmZzZXRzOworICAgIGludDMyX3QgbWluOworCisg
ICAgaW50MzJfdCBvZmZzZXRGb3JWYWx1ZShpbnQzMl90IHZhbHVlLCBpbnQzMl90IGRlZmF1bHRP
ZmZzZXQpOworICAgIHZvaWQgYWRkKGludDMyX3Qga2V5LCBpbnQzMl90IG9mZnNldCkKKyAgICB7
CisgICAgICAgIGlmICghYnJhbmNoT2Zmc2V0c1trZXldKQorICAgICAgICAgICAgYnJhbmNoT2Zm
c2V0c1trZXldID0gb2Zmc2V0OworICAgIH0KK307CisKK3N0cnVjdCBVbmxpbmtlZEluc3RydWN0
aW9uIHsKKyAgICBVbmxpbmtlZEluc3RydWN0aW9uKCkgeyB1Lm9wZXJhbmQgPSAwOyB9CisgICAg
VW5saW5rZWRJbnN0cnVjdGlvbihPcGNvZGVJRCBvcGNvZGUpIHsgdS5vcGNvZGUgPSBvcGNvZGU7
IH0KKyAgICBVbmxpbmtlZEluc3RydWN0aW9uKGludCBvcGVyYW5kKSB7IHUub3BlcmFuZCA9IG9w
ZXJhbmQ7IH0KKyAgICB1bmlvbiB7CisgICAgICAgIE9wY29kZUlEIG9wY29kZTsKKyAgICAgICAg
aW50MzJfdCBvcGVyYW5kOworICAgICAgICB1bnNpZ25lZCBpbmRleDsKKyAgICB9IHU7Cit9Owor
CitjbGFzcyBVbmxpbmtlZENvZGVCbG9jayA6IHB1YmxpYyBKU0NlbGwgeworcHVibGljOgorICAg
IHR5cGVkZWYgSlNDZWxsIEJhc2U7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVy
ZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3M7CisKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBu
ZWVkc0Rlc3RydWN0aW9uID0gdHJ1ZTsKKworICAgIGVudW0geyBDYWxsRnVuY3Rpb24sIEFwcGx5
RnVuY3Rpb24gfTsKKworICAgIHR5cGVkZWYgVW5saW5rZWRJbnN0cnVjdGlvbiBJbnN0cnVjdGlv
bjsKKyAgICB0eXBlZGVmIFZlY3RvcjxVbmxpbmtlZEluc3RydWN0aW9uLCAwLCBVbnNhZmVWZWN0
b3JPdmVyZmxvdz4gVW5wYWNrZWRJbnN0cnVjdGlvbnM7CisKKyAgICBib29sIGlzQ29uc3RydWN0
b3IoKSBjb25zdCB7IHJldHVybiBtX2lzQ29uc3RydWN0b3I7IH0KKyAgICBib29sIGlzU3RyaWN0
TW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNTdHJpY3RNb2RlOyB9CisgICAgYm9vbCB1c2VzRXZh
bCgpIGNvbnN0IHsgcmV0dXJuIG1fdXNlc0V2YWw7IH0KKyAgICBTb3VyY2VQYXJzZU1vZGUgcGFy
c2VNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9wYXJzZU1vZGU7IH0KKyAgICBib29sIGlzQXJyb3dG
dW5jdGlvbigpIGNvbnN0IHsgcmV0dXJuIGlzQXJyb3dGdW5jdGlvblBhcnNlTW9kZShwYXJzZU1v
ZGUoKSk7IH0KKyAgICBEZXJpdmVkQ29udGV4dFR5cGUgZGVyaXZlZENvbnRleHRUeXBlKCkgY29u
c3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8RGVyaXZlZENvbnRleHRUeXBlPihtX2Rlcml2ZWRDb250
ZXh0VHlwZSk7IH0KKyAgICBFdmFsQ29udGV4dFR5cGUgZXZhbENvbnRleHRUeXBlKCkgY29uc3Qg
eyByZXR1cm4gc3RhdGljX2Nhc3Q8RXZhbENvbnRleHRUeXBlPihtX2V2YWxDb250ZXh0VHlwZSk7
IH0KKyAgICBib29sIGlzQXJyb3dGdW5jdGlvbkNvbnRleHQoKSBjb25zdCB7IHJldHVybiBtX2lz
QXJyb3dGdW5jdGlvbkNvbnRleHQ7IH0KKyAgICBib29sIGlzQ2xhc3NDb250ZXh0KCkgY29uc3Qg
eyByZXR1cm4gbV9pc0NsYXNzQ29udGV4dDsgfQorCisgICAgdm9pZCBhZGRFeHByZXNzaW9uSW5m
byh1bnNpZ25lZCBpbnN0cnVjdGlvbk9mZnNldCwgaW50IGRpdm90LAorICAgICAgICBpbnQgc3Rh
cnRPZmZzZXQsIGludCBlbmRPZmZzZXQsIHVuc2lnbmVkIGxpbmUsIHVuc2lnbmVkIGNvbHVtbik7
CisKKyAgICB2b2lkIGFkZFR5cGVQcm9maWxlckV4cHJlc3Npb25JbmZvKHVuc2lnbmVkIGluc3Ry
dWN0aW9uT2Zmc2V0LCB1bnNpZ25lZCBzdGFydERpdm90LCB1bnNpZ25lZCBlbmREaXZvdCk7CisK
KyAgICBib29sIGhhc0V4cHJlc3Npb25JbmZvKCkgeyByZXR1cm4gbV9leHByZXNzaW9uSW5mby5z
aXplKCk7IH0KKyAgICBjb25zdCBWZWN0b3I8RXhwcmVzc2lvblJhbmdlSW5mbz4mIGV4cHJlc3Np
b25JbmZvKCkgeyByZXR1cm4gbV9leHByZXNzaW9uSW5mbzsgfQorCisgICAgLy8gU3BlY2lhbCBy
ZWdpc3RlcnMKKyAgICB2b2lkIHNldFRoaXNSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgdGhpc1Jl
Z2lzdGVyKSB7IG1fdGhpc1JlZ2lzdGVyID0gdGhpc1JlZ2lzdGVyOyB9CisgICAgdm9pZCBzZXRT
Y29wZVJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBzY29wZVJlZ2lzdGVyKSB7IG1fc2NvcGVSZWdp
c3RlciA9IHNjb3BlUmVnaXN0ZXI7IH0KKworICAgIGJvb2wgdXNlc0dsb2JhbE9iamVjdCgpIGNv
bnN0IHsgcmV0dXJuIG1fZ2xvYmFsT2JqZWN0UmVnaXN0ZXIuaXNWYWxpZCgpOyB9CisgICAgdm9p
ZCBzZXRHbG9iYWxPYmplY3RSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgZ2xvYmFsT2JqZWN0UmVn
aXN0ZXIpIHsgbV9nbG9iYWxPYmplY3RSZWdpc3RlciA9IGdsb2JhbE9iamVjdFJlZ2lzdGVyOyB9
CisgICAgVmlydHVhbFJlZ2lzdGVyIGdsb2JhbE9iamVjdFJlZ2lzdGVyKCkgY29uc3QgeyByZXR1
cm4gbV9nbG9iYWxPYmplY3RSZWdpc3RlcjsgfQorCisgICAgLy8gUGFyYW1ldGVyIGluZm9ybWF0
aW9uCisgICAgdm9pZCBzZXROdW1QYXJhbWV0ZXJzKGludCBuZXdWYWx1ZSkgeyBtX251bVBhcmFt
ZXRlcnMgPSBuZXdWYWx1ZTsgfQorICAgIHZvaWQgYWRkUGFyYW1ldGVyKCkgeyBtX251bVBhcmFt
ZXRlcnMrKzsgfQorICAgIHVuc2lnbmVkIG51bVBhcmFtZXRlcnMoKSBjb25zdCB7IHJldHVybiBt
X251bVBhcmFtZXRlcnM7IH0KKworICAgIHVuc2lnbmVkIGFkZFJlZ0V4cChSZWdFeHAqIHIpCisg
ICAgeworICAgICAgICBjcmVhdGVSYXJlRGF0YUlmTmVjZXNzYXJ5KCk7CisgICAgICAgIHVuc2ln
bmVkIHNpemUgPSBtX3JhcmVEYXRhLT5tX3JlZ2V4cHMuc2l6ZSgpOworICAgICAgICBtX3JhcmVE
YXRhLT5tX3JlZ2V4cHMuYXBwZW5kKFdyaXRlQmFycmllcjxSZWdFeHA+KCp2bSgpLCB0aGlzLCBy
KSk7CisgICAgICAgIHJldHVybiBzaXplOworICAgIH0KKyAgICB1bnNpZ25lZCBudW1iZXJPZlJl
Z0V4cHMoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKCFtX3JhcmVEYXRhKQorICAgICAgICAg
ICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBtX3JhcmVEYXRhLT5tX3JlZ2V4cHMuc2l6ZSgp
OworICAgIH0KKyAgICBSZWdFeHAqIHJlZ2V4cChpbnQgaW5kZXgpIGNvbnN0IHsgQVNTRVJUKG1f
cmFyZURhdGEpOyByZXR1cm4gbV9yYXJlRGF0YS0+bV9yZWdleHBzW2luZGV4XS5nZXQoKTsgfQor
CisgICAgLy8gQ29uc3RhbnQgUG9vbHMKKworICAgIHNpemVfdCBudW1iZXJPZklkZW50aWZpZXJz
KCkgY29uc3QgeyByZXR1cm4gbV9pZGVudGlmaWVycy5zaXplKCk7IH0KKyAgICB2b2lkIGFkZElk
ZW50aWZpZXIoY29uc3QgSWRlbnRpZmllciYgaSkgeyByZXR1cm4gbV9pZGVudGlmaWVycy5hcHBl
bmQoaSk7IH0KKyAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudGlmaWVyKGludCBpbmRleCkgY29u
c3QgeyByZXR1cm4gbV9pZGVudGlmaWVyc1tpbmRleF07IH0KKyAgICBjb25zdCBWZWN0b3I8SWRl
bnRpZmllcj4mIGlkZW50aWZpZXJzKCkgY29uc3QgeyByZXR1cm4gbV9pZGVudGlmaWVyczsgfQor
CisgICAgdW5zaWduZWQgYWRkQ29uc3RhbnQoSlNWYWx1ZSB2LCBTb3VyY2VDb2RlUmVwcmVzZW50
YXRpb24gc291cmNlQ29kZVJlcHJlc2VudGF0aW9uID0gU291cmNlQ29kZVJlcHJlc2VudGF0aW9u
OjpPdGhlcikKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIHJlc3VsdCA9IG1fY29uc3RhbnRSZWdp
c3RlcnMuc2l6ZSgpOworICAgICAgICBtX2NvbnN0YW50UmVnaXN0ZXJzLmFwcGVuZChXcml0ZUJh
cnJpZXI8VW5rbm93bj4oKSk7CisgICAgICAgIG1fY29uc3RhbnRSZWdpc3RlcnMubGFzdCgpLnNl
dCgqdm0oKSwgdGhpcywgdik7CisgICAgICAgIG1fY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2Vu
dGF0aW9uLmFwcGVuZChzb3VyY2VDb2RlUmVwcmVzZW50YXRpb24pOworICAgICAgICByZXR1cm4g
cmVzdWx0OworICAgIH0KKyAgICB1bnNpZ25lZCBhZGRDb25zdGFudChMaW5rVGltZUNvbnN0YW50
IHR5cGUpCisgICAgeworICAgICAgICB1bnNpZ25lZCByZXN1bHQgPSBtX2NvbnN0YW50UmVnaXN0
ZXJzLnNpemUoKTsKKyAgICAgICAgQVNTRVJUKHJlc3VsdCk7CisgICAgICAgIHVuc2lnbmVkIGlu
ZGV4ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHR5cGUpOworICAgICAgICBBU1NFUlQoaW5kZXgg
PCBMaW5rVGltZUNvbnN0YW50Q291bnQpOworICAgICAgICBtX2xpbmtUaW1lQ29uc3RhbnRzW2lu
ZGV4XSA9IHJlc3VsdDsKKyAgICAgICAgbV9jb25zdGFudFJlZ2lzdGVycy5hcHBlbmQoV3JpdGVC
YXJyaWVyPFVua25vd24+KCkpOworICAgICAgICBtX2NvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNl
bnRhdGlvbi5hcHBlbmQoU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpPdGhlcik7CisgICAgICAg
IHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIHVuc2lnbmVkIHJlZ2lzdGVySW5kZXhGb3JMaW5r
VGltZUNvbnN0YW50KExpbmtUaW1lQ29uc3RhbnQgdHlwZSkKKyAgICB7CisgICAgICAgIHVuc2ln
bmVkIGluZGV4ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHR5cGUpOworICAgICAgICBBU1NFUlQo
aW5kZXggPCBMaW5rVGltZUNvbnN0YW50Q291bnQpOworICAgICAgICByZXR1cm4gbV9saW5rVGlt
ZUNvbnN0YW50c1tpbmRleF07CisgICAgfQorICAgIGNvbnN0IFZlY3RvcjxXcml0ZUJhcnJpZXI8
VW5rbm93bj4+JiBjb25zdGFudFJlZ2lzdGVycygpIHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3Rl
cnM7IH0KKyAgICBjb25zdCBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIGNvbnN0YW50UmVnaXN0ZXIo
aW50IGluZGV4KSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW2luZGV4IC0gRmly
c3RDb25zdGFudFJlZ2lzdGVySW5kZXhdOyB9CisgICAgQUxXQVlTX0lOTElORSBib29sIGlzQ29u
c3RhbnRSZWdpc3RlckluZGV4KGludCBpbmRleCkgY29uc3QgeyByZXR1cm4gaW5kZXggPj0gRmly
c3RDb25zdGFudFJlZ2lzdGVySW5kZXg7IH0KKyAgICBjb25zdCBWZWN0b3I8U291cmNlQ29kZVJl
cHJlc2VudGF0aW9uPiYgY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uKCkgeyByZXR1
cm4gbV9jb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb247IH0KKworICAgIC8vIEp1bXBz
CisgICAgc2l6ZV90IG51bWJlck9mSnVtcFRhcmdldHMoKSBjb25zdCB7IHJldHVybiBtX2p1bXBU
YXJnZXRzLnNpemUoKTsgfQorICAgIHZvaWQgYWRkSnVtcFRhcmdldCh1bnNpZ25lZCBqdW1wVGFy
Z2V0KSB7IG1fanVtcFRhcmdldHMuYXBwZW5kKGp1bXBUYXJnZXQpOyB9CisgICAgdW5zaWduZWQg
anVtcFRhcmdldChpbnQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fanVtcFRhcmdldHNbaW5kZXhd
OyB9CisgICAgdW5zaWduZWQgbGFzdEp1bXBUYXJnZXQoKSBjb25zdCB7IHJldHVybiBtX2p1bXBU
YXJnZXRzLmxhc3QoKTsgfQorCisgICAgVW5saW5rZWRIYW5kbGVySW5mbyogaGFuZGxlckZvckJ5
dGVjb2RlT2Zmc2V0KHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0LCBSZXF1aXJlZEhhbmRsZXIgPSBS
ZXF1aXJlZEhhbmRsZXI6OkFueUhhbmRsZXIpOworICAgIFVubGlua2VkSGFuZGxlckluZm8qIGhh
bmRsZXJGb3JJbmRleCh1bnNpZ25lZCwgUmVxdWlyZWRIYW5kbGVyID0gUmVxdWlyZWRIYW5kbGVy
OjpBbnlIYW5kbGVyKTsKKworICAgIGJvb2wgaXNCdWlsdGluRnVuY3Rpb24oKSBjb25zdCB7IHJl
dHVybiBtX2lzQnVpbHRpbkZ1bmN0aW9uOyB9CisKKyAgICBDb25zdHJ1Y3RvcktpbmQgY29uc3Ry
dWN0b3JLaW5kKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Q29uc3RydWN0b3JLaW5kPiht
X2NvbnN0cnVjdG9yS2luZCk7IH0KKyAgICBTdXBlckJpbmRpbmcgc3VwZXJCaW5kaW5nKCkgY29u
c3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8U3VwZXJCaW5kaW5nPihtX3N1cGVyQmluZGluZyk7IH0K
KyAgICBKU1BhcnNlclNjcmlwdE1vZGUgc2NyaXB0TW9kZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRp
Y19jYXN0PEpTUGFyc2VyU2NyaXB0TW9kZT4obV9zY3JpcHRNb2RlKTsgfQorCisgICAgdm9pZCBz
aHJpbmtUb0ZpdCgpCisgICAgeworICAgICAgICBtX2p1bXBUYXJnZXRzLnNocmlua1RvRml0KCk7
CisgICAgICAgIG1faWRlbnRpZmllcnMuc2hyaW5rVG9GaXQoKTsKKyAgICAgICAgbV9jb25zdGFu
dFJlZ2lzdGVycy5zaHJpbmtUb0ZpdCgpOworICAgICAgICBtX2NvbnN0YW50c1NvdXJjZUNvZGVS
ZXByZXNlbnRhdGlvbi5zaHJpbmtUb0ZpdCgpOworICAgICAgICBtX2Z1bmN0aW9uRGVjbHMuc2hy
aW5rVG9GaXQoKTsKKyAgICAgICAgbV9mdW5jdGlvbkV4cHJzLnNocmlua1RvRml0KCk7CisgICAg
ICAgIG1fcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbnMuc2hyaW5rVG9GaXQoKTsKKyAgICAgICAg
bV9leHByZXNzaW9uSW5mby5zaHJpbmtUb0ZpdCgpOworCisgICAgICAgIGlmIChtX3JhcmVEYXRh
KSB7CisgICAgICAgICAgICBtX3JhcmVEYXRhLT5tX2V4Y2VwdGlvbkhhbmRsZXJzLnNocmlua1Rv
Rml0KCk7CisgICAgICAgICAgICBtX3JhcmVEYXRhLT5tX3JlZ2V4cHMuc2hyaW5rVG9GaXQoKTsK
KyAgICAgICAgICAgIG1fcmFyZURhdGEtPm1fY29uc3RhbnRCdWZmZXJzLnNocmlua1RvRml0KCk7
CisgICAgICAgICAgICBtX3JhcmVEYXRhLT5tX3N3aXRjaEp1bXBUYWJsZXMuc2hyaW5rVG9GaXQo
KTsKKyAgICAgICAgICAgIG1fcmFyZURhdGEtPm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcy5zaHJp
bmtUb0ZpdCgpOworICAgICAgICAgICAgbV9yYXJlRGF0YS0+bV9leHByZXNzaW9uSW5mb0ZhdFBv
c2l0aW9ucy5zaHJpbmtUb0ZpdCgpOworICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCBzZXRJ
bnN0cnVjdGlvbnMoc3RkOjp1bmlxdWVfcHRyPFVubGlua2VkSW5zdHJ1Y3Rpb25TdHJlYW0+KTsK
KyAgICBjb25zdCBVbmxpbmtlZEluc3RydWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlvbnMoKSBjb25z
dDsKKworICAgIGludCBudW1DYWxsZWVMb2NhbHMoKSBjb25zdCB7IHJldHVybiBtX251bUNhbGxl
ZUxvY2FsczsgfQorCisgICAgaW50IG1fbnVtVmFyczsKKyAgICBpbnQgbV9udW1DYXB0dXJlZFZh
cnM7CisgICAgaW50IG1fbnVtQ2FsbGVlTG9jYWxzOworCisgICAgLy8gSnVtcCBUYWJsZXMKKwor
ICAgIHNpemVfdCBudW1iZXJPZlN3aXRjaEp1bXBUYWJsZXMoKSBjb25zdCB7IHJldHVybiBtX3Jh
cmVEYXRhID8gbV9yYXJlRGF0YS0+bV9zd2l0Y2hKdW1wVGFibGVzLnNpemUoKSA6IDA7IH0KKyAg
ICBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYgYWRkU3dpdGNoSnVtcFRhYmxlKCkgeyBjcmVhdGVS
YXJlRGF0YUlmTmVjZXNzYXJ5KCk7IG1fcmFyZURhdGEtPm1fc3dpdGNoSnVtcFRhYmxlcy5hcHBl
bmQoVW5saW5rZWRTaW1wbGVKdW1wVGFibGUoKSk7IHJldHVybiBtX3JhcmVEYXRhLT5tX3N3aXRj
aEp1bXBUYWJsZXMubGFzdCgpOyB9CisgICAgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUmIHN3aXRj
aEp1bXBUYWJsZShpbnQgdGFibGVJbmRleCkgeyBBU1NFUlQobV9yYXJlRGF0YSk7IHJldHVybiBt
X3JhcmVEYXRhLT5tX3N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07IH0KKworICAgIHNpemVf
dCBudW1iZXJPZlN0cmluZ1N3aXRjaEp1bXBUYWJsZXMoKSBjb25zdCB7IHJldHVybiBtX3JhcmVE
YXRhID8gbV9yYXJlRGF0YS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzLnNpemUoKSA6IDA7IH0K
KyAgICBVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZSYgYWRkU3RyaW5nU3dpdGNoSnVtcFRhYmxlKCkg
eyBjcmVhdGVSYXJlRGF0YUlmTmVjZXNzYXJ5KCk7IG1fcmFyZURhdGEtPm1fc3RyaW5nU3dpdGNo
SnVtcFRhYmxlcy5hcHBlbmQoVW5saW5rZWRTdHJpbmdKdW1wVGFibGUoKSk7IHJldHVybiBtX3Jh
cmVEYXRhLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMubGFzdCgpOyB9CisgICAgVW5saW5rZWRT
dHJpbmdKdW1wVGFibGUmIHN0cmluZ1N3aXRjaEp1bXBUYWJsZShpbnQgdGFibGVJbmRleCkgeyBB
U1NFUlQobV9yYXJlRGF0YSk7IHJldHVybiBtX3JhcmVEYXRhLT5tX3N0cmluZ1N3aXRjaEp1bXBU
YWJsZXNbdGFibGVJbmRleF07IH0KKworICAgIHVuc2lnbmVkIGFkZEZ1bmN0aW9uRGVjbChVbmxp
bmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogbikKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIHNpemUg
PSBtX2Z1bmN0aW9uRGVjbHMuc2l6ZSgpOworICAgICAgICBtX2Z1bmN0aW9uRGVjbHMuYXBwZW5k
KFdyaXRlQmFycmllcjxVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZT4oKSk7CisgICAgICAgIG1f
ZnVuY3Rpb25EZWNscy5sYXN0KCkuc2V0KCp2bSgpLCB0aGlzLCBuKTsKKyAgICAgICAgcmV0dXJu
IHNpemU7CisgICAgfQorICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbkRl
Y2woaW50IGluZGV4KSB7IHJldHVybiBtX2Z1bmN0aW9uRGVjbHNbaW5kZXhdLmdldCgpOyB9Cisg
ICAgc2l6ZV90IG51bWJlck9mRnVuY3Rpb25EZWNscygpIHsgcmV0dXJuIG1fZnVuY3Rpb25EZWNs
cy5zaXplKCk7IH0KKyAgICB1bnNpZ25lZCBhZGRGdW5jdGlvbkV4cHIoVW5saW5rZWRGdW5jdGlv
bkV4ZWN1dGFibGUqIG4pCisgICAgeworICAgICAgICB1bnNpZ25lZCBzaXplID0gbV9mdW5jdGlv
bkV4cHJzLnNpemUoKTsKKyAgICAgICAgbV9mdW5jdGlvbkV4cHJzLmFwcGVuZChXcml0ZUJhcnJp
ZXI8VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU+KCkpOworICAgICAgICBtX2Z1bmN0aW9uRXhw
cnMubGFzdCgpLnNldCgqdm0oKSwgdGhpcywgbik7CisgICAgICAgIHJldHVybiBzaXplOworICAg
IH0KKyAgICBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb25FeHByKGludCBpbmRl
eCkgeyByZXR1cm4gbV9mdW5jdGlvbkV4cHJzW2luZGV4XS5nZXQoKTsgfQorICAgIHNpemVfdCBu
dW1iZXJPZkZ1bmN0aW9uRXhwcnMoKSB7IHJldHVybiBtX2Z1bmN0aW9uRXhwcnMuc2l6ZSgpOyB9
CisKKyAgICAvLyBFeGNlcHRpb24gaGFuZGxpbmcgc3VwcG9ydAorICAgIHNpemVfdCBudW1iZXJP
ZkV4Y2VwdGlvbkhhbmRsZXJzKCkgY29uc3QgeyByZXR1cm4gbV9yYXJlRGF0YSA/IG1fcmFyZURh
dGEtPm1fZXhjZXB0aW9uSGFuZGxlcnMuc2l6ZSgpIDogMDsgfQorICAgIHZvaWQgYWRkRXhjZXB0
aW9uSGFuZGxlcihjb25zdCBVbmxpbmtlZEhhbmRsZXJJbmZvJiBoYW5kbGVyKSB7IGNyZWF0ZVJh
cmVEYXRhSWZOZWNlc3NhcnkoKTsgcmV0dXJuIG1fcmFyZURhdGEtPm1fZXhjZXB0aW9uSGFuZGxl
cnMuYXBwZW5kKGhhbmRsZXIpOyB9CisgICAgVW5saW5rZWRIYW5kbGVySW5mbyYgZXhjZXB0aW9u
SGFuZGxlcihpbnQgaW5kZXgpIHsgQVNTRVJUKG1fcmFyZURhdGEpOyByZXR1cm4gbV9yYXJlRGF0
YS0+bV9leGNlcHRpb25IYW5kbGVyc1tpbmRleF07IH0KKworICAgIFVubGlua2VkQXJyYXlQcm9m
aWxlIGFkZEFycmF5UHJvZmlsZSgpIHsgcmV0dXJuIG1fYXJyYXlQcm9maWxlQ291bnQrKzsgfQor
ICAgIHVuc2lnbmVkIG51bWJlck9mQXJyYXlQcm9maWxlcygpIHsgcmV0dXJuIG1fYXJyYXlQcm9m
aWxlQ291bnQ7IH0KKyAgICBVbmxpbmtlZEFycmF5QWxsb2NhdGlvblByb2ZpbGUgYWRkQXJyYXlB
bGxvY2F0aW9uUHJvZmlsZSgpIHsgcmV0dXJuIG1fYXJyYXlBbGxvY2F0aW9uUHJvZmlsZUNvdW50
Kys7IH0KKyAgICB1bnNpZ25lZCBudW1iZXJPZkFycmF5QWxsb2NhdGlvblByb2ZpbGVzKCkgeyBy
ZXR1cm4gbV9hcnJheUFsbG9jYXRpb25Qcm9maWxlQ291bnQ7IH0KKyAgICBVbmxpbmtlZE9iamVj
dEFsbG9jYXRpb25Qcm9maWxlIGFkZE9iamVjdEFsbG9jYXRpb25Qcm9maWxlKCkgeyByZXR1cm4g
bV9vYmplY3RBbGxvY2F0aW9uUHJvZmlsZUNvdW50Kys7IH0KKyAgICB1bnNpZ25lZCBudW1iZXJP
Zk9iamVjdEFsbG9jYXRpb25Qcm9maWxlcygpIHsgcmV0dXJuIG1fb2JqZWN0QWxsb2NhdGlvblBy
b2ZpbGVDb3VudDsgfQorICAgIFVubGlua2VkVmFsdWVQcm9maWxlIGFkZFZhbHVlUHJvZmlsZSgp
IHsgcmV0dXJuIG1fdmFsdWVQcm9maWxlQ291bnQrKzsgfQorICAgIHVuc2lnbmVkIG51bWJlck9m
VmFsdWVQcm9maWxlcygpIHsgcmV0dXJuIG1fdmFsdWVQcm9maWxlQ291bnQ7IH0KKworICAgIFVu
bGlua2VkTExJbnRDYWxsTGlua0luZm8gYWRkTExJbnRDYWxsTGlua0luZm8oKSB7IHJldHVybiBt
X2xsaW50Q2FsbExpbmtJbmZvQ291bnQrKzsgfQorICAgIHVuc2lnbmVkIG51bWJlck9mTExpbnRD
YWxsTGlua0luZm9zKCkgeyByZXR1cm4gbV9sbGludENhbGxMaW5rSW5mb0NvdW50OyB9CisKKyAg
ICBDb2RlVHlwZSBjb2RlVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29kZVR5cGU7IH0KKworICAg
IFZpcnR1YWxSZWdpc3RlciB0aGlzUmVnaXN0ZXIoKSBjb25zdCB7IHJldHVybiBtX3RoaXNSZWdp
c3RlcjsgfQorICAgIFZpcnR1YWxSZWdpc3RlciBzY29wZVJlZ2lzdGVyKCkgY29uc3QgeyByZXR1
cm4gbV9zY29wZVJlZ2lzdGVyOyB9CisKKyAgICB2b2lkIGFkZFByb3BlcnR5QWNjZXNzSW5zdHJ1
Y3Rpb24odW5zaWduZWQgcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbikKKyAgICB7CisgICAgICAg
IG1fcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbnMuYXBwZW5kKHByb3BlcnR5QWNjZXNzSW5zdHJ1
Y3Rpb24pOworICAgIH0KKworICAgIHNpemVfdCBudW1iZXJPZlByb3BlcnR5QWNjZXNzSW5zdHJ1
Y3Rpb25zKCkgY29uc3QgeyByZXR1cm4gbV9wcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9ucy5zaXpl
KCk7IH0KKyAgICBjb25zdCBWZWN0b3I8dW5zaWduZWQ+JiBwcm9wZXJ0eUFjY2Vzc0luc3RydWN0
aW9ucygpIGNvbnN0IHsgcmV0dXJuIG1fcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbnM7IH0KKwor
ICAgIHR5cGVkZWYgVmVjdG9yPEpTVmFsdWU+IENvbnN0YW50QnVmZmVyOworCisgICAgc2l6ZV90
IGNvbnN0YW50QnVmZmVyQ291bnQoKSB7IEFTU0VSVChtX3JhcmVEYXRhKTsgcmV0dXJuIG1fcmFy
ZURhdGEtPm1fY29uc3RhbnRCdWZmZXJzLnNpemUoKTsgfQorICAgIHVuc2lnbmVkIGFkZENvbnN0
YW50QnVmZmVyKHVuc2lnbmVkIGxlbmd0aCkKKyAgICB7CisgICAgICAgIGNyZWF0ZVJhcmVEYXRh
SWZOZWNlc3NhcnkoKTsKKyAgICAgICAgdW5zaWduZWQgc2l6ZSA9IG1fcmFyZURhdGEtPm1fY29u
c3RhbnRCdWZmZXJzLnNpemUoKTsKKyAgICAgICAgbV9yYXJlRGF0YS0+bV9jb25zdGFudEJ1ZmZl
cnMuYXBwZW5kKFZlY3RvcjxKU1ZhbHVlPihsZW5ndGgpKTsKKyAgICAgICAgcmV0dXJuIHNpemU7
CisgICAgfQorCisgICAgY29uc3QgQ29uc3RhbnRCdWZmZXImIGNvbnN0YW50QnVmZmVyKHVuc2ln
bmVkIGluZGV4KSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fcmFyZURhdGEpOworICAg
ICAgICByZXR1cm4gbV9yYXJlRGF0YS0+bV9jb25zdGFudEJ1ZmZlcnNbaW5kZXhdOworICAgIH0K
KworICAgIENvbnN0YW50QnVmZmVyJiBjb25zdGFudEJ1ZmZlcih1bnNpZ25lZCBpbmRleCkKKyAg
ICB7CisgICAgICAgIEFTU0VSVChtX3JhcmVEYXRhKTsKKyAgICAgICAgcmV0dXJuIG1fcmFyZURh
dGEtPm1fY29uc3RhbnRCdWZmZXJzW2luZGV4XTsKKyAgICB9CisKKyAgICBib29sIGhhc1JhcmVE
YXRhKCkgY29uc3QgeyByZXR1cm4gbV9yYXJlRGF0YS5nZXQoKTsgfQorCisgICAgaW50IGxpbmVO
dW1iZXJGb3JCeXRlY29kZU9mZnNldCh1bnNpZ25lZCBieXRlY29kZU9mZnNldCk7CisKKyAgICB2
b2lkIGV4cHJlc3Npb25SYW5nZUZvckJ5dGVjb2RlT2Zmc2V0KHVuc2lnbmVkIGJ5dGVjb2RlT2Zm
c2V0LCBpbnQmIGRpdm90LAorICAgICAgICBpbnQmIHN0YXJ0T2Zmc2V0LCBpbnQmIGVuZE9mZnNl
dCwgdW5zaWduZWQmIGxpbmUsIHVuc2lnbmVkJiBjb2x1bW4pIGNvbnN0OworCisgICAgYm9vbCB0
eXBlUHJvZmlsZXJFeHByZXNzaW9uSW5mb0ZvckJ5dGVjb2RlT2Zmc2V0KHVuc2lnbmVkIGJ5dGVj
b2RlT2Zmc2V0LCB1bnNpZ25lZCYgc3RhcnREaXZvdCwgdW5zaWduZWQmIGVuZERpdm90KTsKKwor
ICAgIHZvaWQgcmVjb3JkUGFyc2UoQ29kZUZlYXR1cmVzIGZlYXR1cmVzLCBib29sIGhhc0NhcHR1
cmVkVmFyaWFibGVzLCB1bnNpZ25lZCBmaXJzdExpbmUsIHVuc2lnbmVkIGxpbmVDb3VudCwgdW5z
aWduZWQgZW5kQ29sdW1uKQorICAgIHsKKyAgICAgICAgbV9mZWF0dXJlcyA9IGZlYXR1cmVzOwor
ICAgICAgICBtX2hhc0NhcHR1cmVkVmFyaWFibGVzID0gaGFzQ2FwdHVyZWRWYXJpYWJsZXM7Cisg
ICAgICAgIG1fZmlyc3RMaW5lID0gZmlyc3RMaW5lOworICAgICAgICBtX2xpbmVDb3VudCA9IGxp
bmVDb3VudDsKKyAgICAgICAgLy8gRm9yIHRoZSBVbmxpbmtlZENvZGVCbG9jaywgc3RhcnRDb2x1
bW4gaXMgYWx3YXlzIDAuCisgICAgICAgIG1fZW5kQ29sdW1uID0gZW5kQ29sdW1uOworICAgIH0K
KworICAgIGNvbnN0IFN0cmluZyYgc291cmNlVVJMRGlyZWN0aXZlKCkgY29uc3QgeyByZXR1cm4g
bV9zb3VyY2VVUkxEaXJlY3RpdmU7IH0KKyAgICBjb25zdCBTdHJpbmcmIHNvdXJjZU1hcHBpbmdV
UkxEaXJlY3RpdmUoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZU1hcHBpbmdVUkxEaXJlY3RpdmU7
IH0KKyAgICB2b2lkIHNldFNvdXJjZVVSTERpcmVjdGl2ZShjb25zdCBTdHJpbmcmIHNvdXJjZVVS
TCkgeyBtX3NvdXJjZVVSTERpcmVjdGl2ZSA9IHNvdXJjZVVSTDsgfQorICAgIHZvaWQgc2V0U291
cmNlTWFwcGluZ1VSTERpcmVjdGl2ZShjb25zdCBTdHJpbmcmIHNvdXJjZU1hcHBpbmdVUkwpIHsg
bV9zb3VyY2VNYXBwaW5nVVJMRGlyZWN0aXZlID0gc291cmNlTWFwcGluZ1VSTDsgfQorCisgICAg
Q29kZUZlYXR1cmVzIGNvZGVGZWF0dXJlcygpIGNvbnN0IHsgcmV0dXJuIG1fZmVhdHVyZXM7IH0K
KyAgICBib29sIGhhc0NhcHR1cmVkVmFyaWFibGVzKCkgY29uc3QgeyByZXR1cm4gbV9oYXNDYXB0
dXJlZFZhcmlhYmxlczsgfQorICAgIHVuc2lnbmVkIGZpcnN0TGluZSgpIGNvbnN0IHsgcmV0dXJu
IG1fZmlyc3RMaW5lOyB9CisgICAgdW5zaWduZWQgbGluZUNvdW50KCkgY29uc3QgeyByZXR1cm4g
bV9saW5lQ291bnQ7IH0KKyAgICBBTFdBWVNfSU5MSU5FIHVuc2lnbmVkIHN0YXJ0Q29sdW1uKCkg
Y29uc3QgeyByZXR1cm4gMDsgfQorICAgIHVuc2lnbmVkIGVuZENvbHVtbigpIGNvbnN0IHsgcmV0
dXJuIG1fZW5kQ29sdW1uOyB9CisKKyAgICB2b2lkIGFkZE9wUHJvZmlsZUNvbnRyb2xGbG93Qnl0
ZWNvZGVPZmZzZXQoc2l6ZV90IG9mZnNldCkKKyAgICB7CisgICAgICAgIGNyZWF0ZVJhcmVEYXRh
SWZOZWNlc3NhcnkoKTsKKyAgICAgICAgbV9yYXJlRGF0YS0+bV9vcFByb2ZpbGVDb250cm9sRmxv
d0J5dGVjb2RlT2Zmc2V0cy5hcHBlbmQob2Zmc2V0KTsKKyAgICB9CisgICAgY29uc3QgVmVjdG9y
PHNpemVfdD4mIG9wUHJvZmlsZUNvbnRyb2xGbG93Qnl0ZWNvZGVPZmZzZXRzKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIEFTU0VSVChtX3JhcmVEYXRhKTsKKyAgICAgICAgcmV0dXJuIG1fcmFyZURh
dGEtPm1fb3BQcm9maWxlQ29udHJvbEZsb3dCeXRlY29kZU9mZnNldHM7CisgICAgfQorICAgIGJv
b2wgaGFzT3BQcm9maWxlQ29udHJvbEZsb3dCeXRlY29kZU9mZnNldHMoKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIG1fcmFyZURhdGEgJiYgIW1fcmFyZURhdGEtPm1fb3BQcm9maWxlQ29u
dHJvbEZsb3dCeXRlY29kZU9mZnNldHMuaXNFbXB0eSgpOworICAgIH0KKworICAgIHZvaWQgZHVt
cEV4cHJlc3Npb25SYW5nZUluZm8oKTsgLy8gRm9yIGRlYnVnZ2luZyBwdXJwb3NlIG9ubHkuCisK
KyAgICBib29sIHdhc0NvbXBpbGVkV2l0aERlYnVnZ2luZ09wY29kZXMoKSBjb25zdCB7IHJldHVy
biBtX3dhc0NvbXBpbGVkV2l0aERlYnVnZ2luZ09wY29kZXM7IH0KKworICAgIFRyaVN0YXRlIGRp
ZE9wdGltaXplKCkgY29uc3QgeyByZXR1cm4gbV9kaWRPcHRpbWl6ZTsgfQorICAgIHZvaWQgc2V0
RGlkT3B0aW1pemUoVHJpU3RhdGUgZGlkT3B0aW1pemUpIHsgbV9kaWRPcHRpbWl6ZSA9IGRpZE9w
dGltaXplOyB9CisKK3Byb3RlY3RlZDoKKyAgICBVbmxpbmtlZENvZGVCbG9jayhWTSosIFN0cnVj
dHVyZSosIENvZGVUeXBlLCBjb25zdCBFeGVjdXRhYmxlSW5mbyYsIERlYnVnZ2VyTW9kZSk7Cisg
ICAgflVubGlua2VkQ29kZUJsb2NrKCk7CisKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiB2
bSkKKyAgICB7CisgICAgICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICB9CisKK3By
aXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIEJ5dGVjb2RlUmV3cml0ZXI7CisgICAgdm9pZCBhcHBs
eU1vZGlmaWNhdGlvbihCeXRlY29kZVJld3JpdGVyJik7CisKKyAgICB2b2lkIGNyZWF0ZVJhcmVE
YXRhSWZOZWNlc3NhcnkoKQorICAgIHsKKyAgICAgICAgaWYgKCFtX3JhcmVEYXRhKQorICAgICAg
ICAgICAgbV9yYXJlRGF0YSA9IHN0ZDo6bWFrZV91bmlxdWU8UmFyZURhdGE+KCk7CisgICAgfQor
CisgICAgdm9pZCBnZXRMaW5lQW5kQ29sdW1uKGNvbnN0IEV4cHJlc3Npb25SYW5nZUluZm8mLCB1
bnNpZ25lZCYgbGluZSwgdW5zaWduZWQmIGNvbHVtbikgY29uc3Q7CisKKyAgICBpbnQgbV9udW1Q
YXJhbWV0ZXJzOworCisgICAgc3RkOjp1bmlxdWVfcHRyPFVubGlua2VkSW5zdHJ1Y3Rpb25TdHJl
YW0+IG1fdW5saW5rZWRJbnN0cnVjdGlvbnM7CisKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgbV90aGlz
UmVnaXN0ZXI7CisgICAgVmlydHVhbFJlZ2lzdGVyIG1fc2NvcGVSZWdpc3RlcjsKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgbV9nbG9iYWxPYmplY3RSZWdpc3RlcjsKKworICAgIFN0cmluZyBtX3NvdXJj
ZVVSTERpcmVjdGl2ZTsKKyAgICBTdHJpbmcgbV9zb3VyY2VNYXBwaW5nVVJMRGlyZWN0aXZlOwor
CisgICAgdW5zaWduZWQgbV91c2VzRXZhbCA6IDE7CisgICAgdW5zaWduZWQgbV9pc1N0cmljdE1v
ZGUgOiAxOworICAgIHVuc2lnbmVkIG1faXNDb25zdHJ1Y3RvciA6IDE7CisgICAgdW5zaWduZWQg
bV9oYXNDYXB0dXJlZFZhcmlhYmxlcyA6IDE7CisgICAgdW5zaWduZWQgbV9pc0J1aWx0aW5GdW5j
dGlvbiA6IDE7CisgICAgdW5zaWduZWQgbV9zdXBlckJpbmRpbmcgOiAxOworICAgIHVuc2lnbmVk
IG1fc2NyaXB0TW9kZTogMTsKKyAgICB1bnNpZ25lZCBtX2lzQXJyb3dGdW5jdGlvbkNvbnRleHQg
OiAxOworICAgIHVuc2lnbmVkIG1faXNDbGFzc0NvbnRleHQgOiAxOworICAgIHVuc2lnbmVkIG1f
d2FzQ29tcGlsZWRXaXRoRGVidWdnaW5nT3Bjb2RlcyA6IDE7CisgICAgdW5zaWduZWQgbV9jb25z
dHJ1Y3RvcktpbmQgOiAyOworICAgIHVuc2lnbmVkIG1fZGVyaXZlZENvbnRleHRUeXBlIDogMjsK
KyAgICB1bnNpZ25lZCBtX2V2YWxDb250ZXh0VHlwZSA6IDI7CisgICAgdW5zaWduZWQgbV9maXJz
dExpbmU7CisgICAgdW5zaWduZWQgbV9saW5lQ291bnQ7CisgICAgdW5zaWduZWQgbV9lbmRDb2x1
bW47CisKKyAgICBUcmlTdGF0ZSBtX2RpZE9wdGltaXplOworICAgIFNvdXJjZVBhcnNlTW9kZSBt
X3BhcnNlTW9kZTsKKyAgICBDb2RlRmVhdHVyZXMgbV9mZWF0dXJlczsKKyAgICBDb2RlVHlwZSBt
X2NvZGVUeXBlOworCisgICAgVmVjdG9yPHVuc2lnbmVkPiBtX2p1bXBUYXJnZXRzOworCisgICAg
VmVjdG9yPHVuc2lnbmVkPiBtX3Byb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25zOworCisgICAgLy8g
Q29uc3RhbnQgUG9vbHMKKyAgICBWZWN0b3I8SWRlbnRpZmllcj4gbV9pZGVudGlmaWVyczsKKyAg
ICBWZWN0b3I8V3JpdGVCYXJyaWVyPFVua25vd24+PiBtX2NvbnN0YW50UmVnaXN0ZXJzOworICAg
IFZlY3RvcjxTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24+IG1fY29uc3RhbnRzU291cmNlQ29kZVJl
cHJlc2VudGF0aW9uOworICAgIHR5cGVkZWYgVmVjdG9yPFdyaXRlQmFycmllcjxVbmxpbmtlZEZ1
bmN0aW9uRXhlY3V0YWJsZT4+IEZ1bmN0aW9uRXhwcmVzc2lvblZlY3RvcjsKKyAgICBGdW5jdGlv
bkV4cHJlc3Npb25WZWN0b3IgbV9mdW5jdGlvbkRlY2xzOworICAgIEZ1bmN0aW9uRXhwcmVzc2lv
blZlY3RvciBtX2Z1bmN0aW9uRXhwcnM7CisgICAgc3RkOjphcnJheTx1bnNpZ25lZCwgTGlua1Rp
bWVDb25zdGFudENvdW50PiBtX2xpbmtUaW1lQ29uc3RhbnRzOworCisgICAgdW5zaWduZWQgbV9h
cnJheVByb2ZpbGVDb3VudDsKKyAgICB1bnNpZ25lZCBtX2FycmF5QWxsb2NhdGlvblByb2ZpbGVD
b3VudDsKKyAgICB1bnNpZ25lZCBtX29iamVjdEFsbG9jYXRpb25Qcm9maWxlQ291bnQ7CisgICAg
dW5zaWduZWQgbV92YWx1ZVByb2ZpbGVDb3VudDsKKyAgICB1bnNpZ25lZCBtX2xsaW50Q2FsbExp
bmtJbmZvQ291bnQ7CisKK3B1YmxpYzoKKyAgICBzdHJ1Y3QgUmFyZURhdGEgeworICAgICAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKyAgICBwdWJsaWM6CisgICAgICAgIFZlY3RvcjxVbmxp
bmtlZEhhbmRsZXJJbmZvPiBtX2V4Y2VwdGlvbkhhbmRsZXJzOworCisgICAgICAgIC8vIFJhcmUg
Q29uc3RhbnRzCisgICAgICAgIFZlY3RvcjxXcml0ZUJhcnJpZXI8UmVnRXhwPj4gbV9yZWdleHBz
OworCisgICAgICAgIC8vIEJ1ZmZlcnMgdXNlZCBmb3IgbGFyZ2UgYXJyYXkgbGl0ZXJhbHMKKyAg
ICAgICAgVmVjdG9yPENvbnN0YW50QnVmZmVyPiBtX2NvbnN0YW50QnVmZmVyczsKKworICAgICAg
ICAvLyBKdW1wIFRhYmxlcworICAgICAgICBWZWN0b3I8VW5saW5rZWRTaW1wbGVKdW1wVGFibGU+
IG1fc3dpdGNoSnVtcFRhYmxlczsKKyAgICAgICAgVmVjdG9yPFVubGlua2VkU3RyaW5nSnVtcFRh
YmxlPiBtX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXM7CisKKyAgICAgICAgVmVjdG9yPEV4cHJlc3Np
b25SYW5nZUluZm86OkZhdFBvc2l0aW9uPiBtX2V4cHJlc3Npb25JbmZvRmF0UG9zaXRpb25zOwor
CisgICAgICAgIHN0cnVjdCBUeXBlUHJvZmlsZXJFeHByZXNzaW9uUmFuZ2UgeworICAgICAgICAg
ICAgdW5zaWduZWQgbV9zdGFydERpdm90OworICAgICAgICAgICAgdW5zaWduZWQgbV9lbmREaXZv
dDsKKyAgICAgICAgfTsKKyAgICAgICAgSGFzaE1hcDx1bnNpZ25lZCwgVHlwZVByb2ZpbGVyRXhw
cmVzc2lvblJhbmdlPiBtX3R5cGVQcm9maWxlckluZm9NYXA7CisgICAgICAgIFZlY3RvcjxzaXpl
X3Q+IG1fb3BQcm9maWxlQ29udHJvbEZsb3dCeXRlY29kZU9mZnNldHM7CisgICAgfTsKKworcHJp
dmF0ZToKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8UmFyZURhdGE+IG1fcmFyZURhdGE7CisgICAgVmVj
dG9yPEV4cHJlc3Npb25SYW5nZUluZm8+IG1fZXhwcmVzc2lvbkluZm87CisKK3Byb3RlY3RlZDoK
KyAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7Cisg
ICAgc3RhdGljIHNpemVfdCBlc3RpbWF0ZWRTaXplKEpTQ2VsbCopOworCitwdWJsaWM6CisgICAg
REVDTEFSRV9JTkZPOworfTsKKworY2xhc3MgVW5saW5rZWRHbG9iYWxDb2RlQmxvY2sgOiBwdWJs
aWMgVW5saW5rZWRDb2RlQmxvY2sgeworcHVibGljOgorICAgIHR5cGVkZWYgVW5saW5rZWRDb2Rl
QmxvY2sgQmFzZTsKKworcHJvdGVjdGVkOgorICAgIFVubGlua2VkR2xvYmFsQ29kZUJsb2NrKFZN
KiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIENvZGVUeXBlIGNvZGVUeXBlLCBjb25zdCBFeGVj
dXRhYmxlSW5mbyYgaW5mbywgRGVidWdnZXJNb2RlIGRlYnVnZ2VyTW9kZSkKKyAgICAgICAgOiBC
YXNlKHZtLCBzdHJ1Y3R1cmUsIGNvZGVUeXBlLCBpbmZvLCBkZWJ1Z2dlck1vZGUpCisgICAgewor
ICAgIH0KKworICAgIERFQ0xBUkVfSU5GTzsKK307CisKK2NsYXNzIFVubGlua2VkUHJvZ3JhbUNv
ZGVCbG9jayBmaW5hbCA6IHB1YmxpYyBVbmxpbmtlZEdsb2JhbENvZGVCbG9jayB7Citwcml2YXRl
OgorICAgIGZyaWVuZCBjbGFzcyBDb2RlQ2FjaGU7CisgICAgc3RhdGljIFVubGlua2VkUHJvZ3Jh
bUNvZGVCbG9jayogY3JlYXRlKFZNKiB2bSwgY29uc3QgRXhlY3V0YWJsZUluZm8mIGluZm8sIERl
YnVnZ2VyTW9kZSBkZWJ1Z2dlck1vZGUpCisgICAgeworICAgICAgICBVbmxpbmtlZFByb2dyYW1D
b2RlQmxvY2sqIGluc3RhbmNlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8VW5saW5rZWRQ
cm9ncmFtQ29kZUJsb2NrPih2bS0+aGVhcCkpIFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jayh2bSwg
dm0tPnVubGlua2VkUHJvZ3JhbUNvZGVCbG9ja1N0cnVjdHVyZS5nZXQoKSwgaW5mbywgZGVidWdn
ZXJNb2RlKTsKKyAgICAgICAgaW5zdGFuY2UtPmZpbmlzaENyZWF0aW9uKCp2bSk7CisgICAgICAg
IHJldHVybiBpbnN0YW5jZTsKKyAgICB9CisKK3B1YmxpYzoKKyAgICB0eXBlZGVmIFVubGlua2Vk
R2xvYmFsQ29kZUJsb2NrIEJhc2U7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVy
ZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBTdHJ1Y3R1cmVJc0ltbW9ydGFsOworCisg
ICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKKworICAgIHZvaWQgc2V0VmFyaWFibGVE
ZWNsYXJhdGlvbnMoY29uc3QgVmFyaWFibGVFbnZpcm9ubWVudCYgZW52aXJvbm1lbnQpIHsgbV92
YXJEZWNsYXJhdGlvbnMgPSBlbnZpcm9ubWVudDsgfQorICAgIGNvbnN0IFZhcmlhYmxlRW52aXJv
bm1lbnQmIHZhcmlhYmxlRGVjbGFyYXRpb25zKCkgY29uc3QgeyByZXR1cm4gbV92YXJEZWNsYXJh
dGlvbnM7IH0KKworICAgIHZvaWQgc2V0TGV4aWNhbERlY2xhcmF0aW9ucyhjb25zdCBWYXJpYWJs
ZUVudmlyb25tZW50JiBlbnZpcm9ubWVudCkgeyBtX2xleGljYWxEZWNsYXJhdGlvbnMgPSBlbnZp
cm9ubWVudDsgfQorICAgIGNvbnN0IFZhcmlhYmxlRW52aXJvbm1lbnQmIGxleGljYWxEZWNsYXJh
dGlvbnMoKSBjb25zdCB7IHJldHVybiBtX2xleGljYWxEZWNsYXJhdGlvbnM7IH0KKworICAgIHN0
YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKworcHJpdmF0
ZToKKyAgICBVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2soVk0qIHZtLCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwgY29uc3QgRXhlY3V0YWJsZUluZm8mIGluZm8sIERlYnVnZ2VyTW9kZSBkZWJ1Z2dlck1v
ZGUpCisgICAgICAgIDogQmFzZSh2bSwgc3RydWN0dXJlLCBHbG9iYWxDb2RlLCBpbmZvLCBkZWJ1
Z2dlck1vZGUpCisgICAgeworICAgIH0KKworICAgIFZhcmlhYmxlRW52aXJvbm1lbnQgbV92YXJE
ZWNsYXJhdGlvbnM7CisgICAgVmFyaWFibGVFbnZpcm9ubWVudCBtX2xleGljYWxEZWNsYXJhdGlv
bnM7CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0m
IHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3Rv
LCBUeXBlSW5mbyhVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2tUeXBlLCBTdHJ1Y3R1cmVGbGFncyks
IGluZm8oKSk7CisgICAgfQorCisgICAgREVDTEFSRV9JTkZPOworfTsKKworY2xhc3MgVW5saW5r
ZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrIGZpbmFsIDogcHVibGljIFVubGlua2VkR2xvYmFsQ29k
ZUJsb2NrIHsKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIENvZGVDYWNoZTsKKyAgICBzdGF0
aWMgVW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrKiBjcmVhdGUoVk0qIHZtLCBjb25zdCBF
eGVjdXRhYmxlSW5mbyYgaW5mbywgRGVidWdnZXJNb2RlIGRlYnVnZ2VyTW9kZSkKKyAgICB7Cisg
ICAgICAgIFVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayogaW5zdGFuY2UgPSBuZXcgKE5v
dE51bGwsIGFsbG9jYXRlQ2VsbDxVbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2s+KHZtLT5o
ZWFwKSkgVW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrKHZtLCB2bS0+dW5saW5rZWRNb2R1
bGVQcm9ncmFtQ29kZUJsb2NrU3RydWN0dXJlLmdldCgpLCBpbmZvLCBkZWJ1Z2dlck1vZGUpOwor
ICAgICAgICBpbnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24oKnZtKTsKKyAgICAgICAgcmV0dXJuIGlu
c3RhbmNlOworICAgIH0KKworcHVibGljOgorICAgIHR5cGVkZWYgVW5saW5rZWRHbG9iYWxDb2Rl
QmxvY2sgQmFzZTsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBC
YXNlOjpTdHJ1Y3R1cmVGbGFncyB8IFN0cnVjdHVyZUlzSW1tb3J0YWw7CisKKyAgICBzdGF0aWMg
dm9pZCBkZXN0cm95KEpTQ2VsbCopOworCisgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihK
U0NlbGwqLCBTbG90VmlzaXRvciYpOworCisgICAgLy8gVGhpcyBvZmZzZXQgcmVwcmVzZW50cyB0
aGUgY29uc3RhbnQgcmVnaXN0ZXIgb2Zmc2V0IHRvIHRoZSBzdG9yZWQgc3ltYm9sIHRhYmxlIHRo
YXQgcmVwcmVzZW50cyB0aGUgbGF5b3V0IG9mIHRoZQorICAgIC8vIG1vZHVsZSBlbnZpcm9ubWVu
dC4gVGhpcyBzeW1ib2wgdGFibGUgaXMgY3JlYXRlZCBieSB0aGUgYnl0ZSBjb2RlIGdlbmVyYXRv
ciBzaW5jZSB0aGUgbW9kdWxlIGVudmlyb25tZW50IGluY2x1ZGVzCisgICAgLy8gdGhlIHRvcC1t
b3N0IGxleGljYWwgY2FwdHVyZWQgdmFyaWFibGVzIGluc2lkZSB0aGUgbW9kdWxlIGNvZGUuIFRo
aXMgbWVhbnMgdGhhdCwgb25jZSB0aGUgbW9kdWxlIGVudmlyb25tZW50IGlzCisgICAgLy8gYWxs
b2NhdGVkIGFuZCBpbnN0YW50aWF0ZWQgZnJvbSB0aGlzIHN5bWJvbCB0YWJsZSwgaXQgaXMgdGl0
ZWx5IGNvdXBsZWQgd2l0aCB0aGUgc3BlY2lmaWMgdW5saW5rZWQgbW9kdWxlIHByb2dyYW0KKyAg
ICAvLyBjb2RlIGJsb2NrIGFuZCB0aGUgc3RvcmVkIHN5bWJvbCB0YWJsZS4gU28gYmVmb3JlIGV4
ZWN1dGluZyB0aGUgbW9kdWxlIGNvZGUsIHdlIHNob3VsZCBub3QgY2xlYXIgdGhlIHVubGlua2Vk
IG1vZHVsZQorICAgIC8vIHByb2dyYW0gY29kZSBibG9jayBpbiB0aGUgbW9kdWxlIGV4ZWN1dGFi
bGUuIFRoaXMgcmVxdWlyZW1lbnQgaXMgbWV0IGJlY2F1c2UgdGhlIGdhcmJhZ2UgY29sbGVjdG9y
IG9ubHkgY2xlYXJzCisgICAgLy8gdW5saW5rZWQgY29kZSBpbiAoMSkgdW5tYXJrZWQgZXhlY3V0
YWJsZXMgYW5kICgyKSBmdW5jdGlvbiBleGVjdXRhYmxlcy4KKyAgICAvLworICAgIC8vIFNpbmNl
IHRoZSBmdW5jdGlvbiBjb2RlIG1heSBiZSBleGVjdXRlZCByZXBlYXRlZGx5IGFuZCB0aGUgZW52
aXJvbm1lbnQgb2YgZWFjaCBmdW5jdGlvbiBleGVjdXRpb24gaXMgZGlmZmVyZW50LAorICAgIC8v
IHRoZSBmdW5jdGlvbiBjb2RlIG5lZWQgdG8gYWxsb2NhdGUgYW5kIGluc3RhbnRpYXRlIHRoZSBl
bnZpcm9ubWVudCBpbiB0aGUgcHJvbG9ndWUgb2YgdGhlIGZ1bmN0aW9uIGNvZGUuIE9uIHRoZQor
ICAgIC8vIG90aGVyIGhhbmQsIHRoZSBtb2R1bGUgY29kZSBpcyBleGVjdXRlZCBvbmx5IG9uY2Uu
IFNvIHdlIGNhbiBpbnN0YW50aWF0ZSB0aGUgbW9kdWxlIGVudmlyb25tZW50IG91dHNpZGUgdGhl
IG1vZHVsZQorICAgIC8vIGNvZGUuIEF0IHRoYXQgdGltZSwgd2UgY29uc3RydWN0IHRoZSBtb2R1
bGUgZW52aXJvbm1lbnQgYnkgdXNpbmcgdGhlIHN5bWJvbCB0YWJsZSB0aGF0IGlzIGhlbGQgYnkg
dGhlIG1vZHVsZSBleGVjdXRhYmxlLgorICAgIC8vIFRoZSBzeW1ib2wgdGFibGUgaGVsZCBieSB0
aGUgZXhlY3V0YWJsZSBpcyB0aGUgY2xvbmVkIG9uZSBmcm9tIG9uZSBpbiB0aGUgdW5saW5rZWQg
Y29kZSBibG9jay4gSW5zdGFudGlhdGluZyB0aGUgbW9kdWxlCisgICAgLy8gZW52aXJvbm1lbnQg
YmVmb3JlIGV4ZWN1dGluZyBhbmQgbGlua2luZyB0aGUgbW9kdWxlIGNvZGUgaXMgcmVxdWlyZWQg
dG8gbGluayB0aGUgaW1wb3J0ZWQgYmluZGluZ3MgYmV0d2VlbiB0aGUgbW9kdWxlcy4KKyAgICAv
LworICAgIC8vIFRoZSB1bmxpbmtlZCBtb2R1bGUgcHJvZ3JhbSBjb2RlIGJsb2NrIG9ubHkgaG9s
ZHMgdGhlIHByZS1jbG9uZWQgc3ltYm9sIHRhYmxlIGluIGl0cyBjb25zdGFudCByZWdpc3RlciBw
b29sLiBJdCBkb2VzCisgICAgLy8gbm90IGhvbGQgdGhlIGluc3RhbnRpYXRlZCBtb2R1bGUgZW52
aXJvbm1lbnQuIFNvIHdoaWxlIHRoZSBtb2R1bGUgZW52aXJvbm1lbnQgcmVxdWlyZXMgdGhlIHNw
ZWNpZmljIHVubGlua2VkIG1vZHVsZQorICAgIC8vIHByb2dyYW0gY29kZSBibG9jaywgdGhlIHVu
bGlua2VkIG1vZHVsZSBjb2RlIGJsb2NrIGNhbiBiZSB1c2VkIGZvciB0aGUgbW9kdWxlIGVudmly
b25tZW50IGluc3RhbnRpYXRlZCBmcm9tIHRoaXMKKyAgICAvLyB1bmxpbmtlZCBjb2RlIGJsb2Nr
LiBUaGVyZSBpcyAxOk4gcmVsYXRpb24gYmV0d2VlbiB0aGUgdW5saW5rZWQgbW9kdWxlIGNvZGUg
YmxvY2sgYW5kIHRoZSBtb2R1bGUgZW52aXJvbm1lbnRzLiBTbyB0aGUKKyAgICAvLyB1bmxpbmtl
ZCBtb2R1bGUgcHJvZ3JhbSBjb2RlIGJsb2NrIGNhbiBiZSBjYWNoZWQuCisgICAgLy8KKyAgICAv
LyBPbiB0aGUgb3RoZXIgaGFuZCwgdGhlIGxpbmtlZCBjb2RlIGJsb2NrIGZvciB0aGUgbW9kdWxl
IGVudmlyb25tZW50IGluY2x1ZGVzIHRoZSByZXNvbHZlZCByZWZlcmVuY2VzIHRvIHRoZSBpbXBv
cnRlZAorICAgIC8vIGJpbmRpbmdzLiBUaGUgaW1wb3J0ZWQgYmluZGluZyByZWZlcmVuY2VzIHRo
ZSBvdGhlciBtb2R1bGUgZW52aXJvbm1lbnQsIHNvIHRoZSBsaW5rZWQgY29kZSBibG9jayBpcyB0
aXRseSBjb3VwbGVkCisgICAgLy8gd2l0aCB0aGUgc3BlY2lmaWMgc2V0IG9mIHRoZSBtb2R1bGUg
ZW52aXJvbm1lbnRzLiBUaHVzLCB0aGUgbGlua2VkIGNvZGUgYmxvY2sgc2hvdWxkIG5vdCBiZSBj
YWNoZWQuCisgICAgaW50IG1vZHVsZUVudmlyb25tZW50U3ltYm9sVGFibGVDb25zdGFudFJlZ2lz
dGVyT2Zmc2V0KCkgeyByZXR1cm4gbV9tb2R1bGVFbnZpcm9ubWVudFN5bWJvbFRhYmxlQ29uc3Rh
bnRSZWdpc3Rlck9mZnNldDsgfQorICAgIHZvaWQgc2V0TW9kdWxlRW52aXJvbm1lbnRTeW1ib2xU
YWJsZUNvbnN0YW50UmVnaXN0ZXJPZmZzZXQoaW50IG9mZnNldCkKKyAgICB7CisgICAgICAgIG1f
bW9kdWxlRW52aXJvbm1lbnRTeW1ib2xUYWJsZUNvbnN0YW50UmVnaXN0ZXJPZmZzZXQgPSBvZmZz
ZXQ7CisgICAgfQorCitwcml2YXRlOgorICAgIFVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9j
ayhWTSogdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBFeGVjdXRhYmxlSW5mbyYgaW5m
bywgRGVidWdnZXJNb2RlIGRlYnVnZ2VyTW9kZSkKKyAgICAgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1
cmUsIE1vZHVsZUNvZGUsIGluZm8sIGRlYnVnZ2VyTW9kZSkKKyAgICB7CisgICAgfQorCisgICAg
aW50IG1fbW9kdWxlRW52aXJvbm1lbnRTeW1ib2xUYWJsZUNvbnN0YW50UmVnaXN0ZXJPZmZzZXQg
eyAwIH07CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUo
Vk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHBy
b3RvLCBUeXBlSW5mbyhVbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2tUeXBlLCBTdHJ1Y3R1
cmVGbGFncyksIGluZm8oKSk7CisgICAgfQorCisgICAgREVDTEFSRV9JTkZPOworfTsKKworY2xh
c3MgVW5saW5rZWRFdmFsQ29kZUJsb2NrIGZpbmFsIDogcHVibGljIFVubGlua2VkR2xvYmFsQ29k
ZUJsb2NrIHsKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIENvZGVDYWNoZTsKKworICAgIHN0
YXRpYyBVbmxpbmtlZEV2YWxDb2RlQmxvY2sqIGNyZWF0ZShWTSogdm0sIGNvbnN0IEV4ZWN1dGFi
bGVJbmZvJiBpbmZvLCBEZWJ1Z2dlck1vZGUgZGVidWdnZXJNb2RlKQorICAgIHsKKyAgICAgICAg
VW5saW5rZWRFdmFsQ29kZUJsb2NrKiBpbnN0YW5jZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVD
ZWxsPFVubGlua2VkRXZhbENvZGVCbG9jaz4odm0tPmhlYXApKSBVbmxpbmtlZEV2YWxDb2RlQmxv
Y2sodm0sIHZtLT51bmxpbmtlZEV2YWxDb2RlQmxvY2tTdHJ1Y3R1cmUuZ2V0KCksIGluZm8sIGRl
YnVnZ2VyTW9kZSk7CisgICAgICAgIGluc3RhbmNlLT5maW5pc2hDcmVhdGlvbigqdm0pOworICAg
ICAgICByZXR1cm4gaW5zdGFuY2U7CisgICAgfQorCitwdWJsaWM6CisgICAgdHlwZWRlZiBVbmxp
bmtlZEdsb2JhbENvZGVCbG9jayBCYXNlOworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1
Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgU3RydWN0dXJlSXNJbW1vcnRhbDsK
KworICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CisKKyAgICBjb25zdCBJZGVudGlm
aWVyJiB2YXJpYWJsZSh1bnNpZ25lZCBpbmRleCkgeyByZXR1cm4gbV92YXJpYWJsZXNbaW5kZXhd
OyB9CisgICAgdW5zaWduZWQgbnVtVmFyaWFibGVzKCkgeyByZXR1cm4gbV92YXJpYWJsZXMuc2l6
ZSgpOyB9CisgICAgdm9pZCBhZG9wdFZhcmlhYmxlcyhWZWN0b3I8SWRlbnRpZmllciwgMCwgVW5z
YWZlVmVjdG9yT3ZlcmZsb3c+JiB2YXJpYWJsZXMpCisgICAgeworICAgICAgICBBU1NFUlQobV92
YXJpYWJsZXMuaXNFbXB0eSgpKTsKKyAgICAgICAgbV92YXJpYWJsZXMuc3dhcCh2YXJpYWJsZXMp
OworICAgIH0KKworcHJpdmF0ZToKKyAgICBVbmxpbmtlZEV2YWxDb2RlQmxvY2soVk0qIHZtLCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgRXhlY3V0YWJsZUluZm8mIGluZm8sIERlYnVnZ2Vy
TW9kZSBkZWJ1Z2dlck1vZGUpCisgICAgICAgIDogQmFzZSh2bSwgc3RydWN0dXJlLCBFdmFsQ29k
ZSwgaW5mbywgZGVidWdnZXJNb2RlKQorICAgIHsKKyAgICB9CisKKyAgICBWZWN0b3I8SWRlbnRp
ZmllciwgMCwgVW5zYWZlVmVjdG9yT3ZlcmZsb3c+IG1fdmFyaWFibGVzOworCitwdWJsaWM6Cisg
ICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90bykKKyAgICB7CisgICAgICAgIHJldHVybiBT
dHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90bywgVHlwZUluZm8oVW5saW5r
ZWRFdmFsQ29kZUJsb2NrVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworICAgIH0KKwor
ICAgIERFQ0xBUkVfSU5GTzsKK307CisKK2NsYXNzIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2sg
ZmluYWwgOiBwdWJsaWMgVW5saW5rZWRDb2RlQmxvY2sgeworcHVibGljOgorICAgIHR5cGVkZWYg
VW5saW5rZWRDb2RlQmxvY2sgQmFzZTsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0
dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IFN0cnVjdHVyZUlzSW1tb3J0YWw7CisK
KyAgICBzdGF0aWMgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayogY3JlYXRlKFZNKiB2bSwgQ29k
ZVR5cGUgY29kZVR5cGUsIGNvbnN0IEV4ZWN1dGFibGVJbmZvJiBpbmZvLCBEZWJ1Z2dlck1vZGUg
ZGVidWdnZXJNb2RlKQorICAgIHsKKyAgICAgICAgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayog
aW5zdGFuY2UgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxVbmxpbmtlZEZ1bmN0aW9uQ29k
ZUJsb2NrPih2bS0+aGVhcCkpIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2sodm0sIHZtLT51bmxp
bmtlZEZ1bmN0aW9uQ29kZUJsb2NrU3RydWN0dXJlLmdldCgpLCBjb2RlVHlwZSwgaW5mbywgZGVi
dWdnZXJNb2RlKTsKKyAgICAgICAgaW5zdGFuY2UtPmZpbmlzaENyZWF0aW9uKCp2bSk7CisgICAg
ICAgIHJldHVybiBpbnN0YW5jZTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpT
Q2VsbCopOworCitwcml2YXRlOgorICAgIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2soVk0qIHZt
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQ29kZVR5cGUgY29kZVR5cGUsIGNvbnN0IEV4ZWN1dGFi
bGVJbmZvJiBpbmZvLCBEZWJ1Z2dlck1vZGUgZGVidWdnZXJNb2RlKQorICAgICAgICA6IEJhc2Uo
dm0sIHN0cnVjdHVyZSwgY29kZVR5cGUsIGluZm8sIGRlYnVnZ2VyTW9kZSkKKyAgICB7CisgICAg
fQorICAgIAorcHVibGljOgorICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShW
TSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG8pCisgICAg
eworICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJv
dG8sIFR5cGVJbmZvKFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2tUeXBlLCBTdHJ1Y3R1cmVGbGFn
cyksIGluZm8oKSk7CisgICAgfQorCisgICAgREVDTEFSRV9JTkZPOworfTsKKworfQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25Db2RlQmxvY2su
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRG
dW5jdGlvbkNvZGVCbG9jay5oCShyZXZpc2lvbiAyMDgzMDgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yNSw2MzUgKzI1LDEwIEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSAiQnl0ZWNv
ZGVDb252ZW50aW9ucy5oIgotI2luY2x1ZGUgIkNvZGVTcGVjaWFsaXphdGlvbktpbmQuaCIKLSNp
bmNsdWRlICJDb2RlVHlwZS5oIgotI2luY2x1ZGUgIkNvbnN0cnVjdEFiaWxpdHkuaCIKLSNpbmNs
dWRlICJFeHByZXNzaW9uUmFuZ2VJbmZvLmgiCi0jaW5jbHVkZSAiSGFuZGxlckluZm8uaCIKLSNp
bmNsdWRlICJJZGVudGlmaWVyLmgiCi0jaW5jbHVkZSAiSlNDZWxsLmgiCi0jaW5jbHVkZSAiSlNT
dHJpbmcuaCIKLSNpbmNsdWRlICJQYXJzZXJNb2Rlcy5oIgotI2luY2x1ZGUgIlJlZ0V4cC5oIgot
I2luY2x1ZGUgIlNwZWNpYWxQb2ludGVyLmgiCi0jaW5jbHVkZSAiVW5saW5rZWRGdW5jdGlvbkV4
ZWN1dGFibGUuaCIKLSNpbmNsdWRlICJWYXJpYWJsZUVudmlyb25tZW50LmgiCi0jaW5jbHVkZSAi
VmlydHVhbFJlZ2lzdGVyLmgiCi0jaW5jbHVkZSA8d3RmL1RyaVN0YXRlLmg+Ci0jaW5jbHVkZSA8
d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgIlVubGlua2VkQ29kZUJsb2NrLmgiCiAKIG5hbWVzcGFj
ZSBKU0MgewogCi1jbGFzcyBCeXRlY29kZVJld3JpdGVyOwotY2xhc3MgRGVidWdnZXI7Ci1jbGFz
cyBGdW5jdGlvbkV4ZWN1dGFibGU7Ci1jbGFzcyBQYXJzZXJFcnJvcjsKLWNsYXNzIFNjcmlwdEV4
ZWN1dGFibGU7Ci1jbGFzcyBTb3VyY2VDb2RlOwotY2xhc3MgU291cmNlUHJvdmlkZXI7Ci1jbGFz
cyBVbmxpbmtlZENvZGVCbG9jazsKLWNsYXNzIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2s7Ci1j
bGFzcyBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTsKLWNsYXNzIFVubGlua2VkSW5zdHJ1Y3Rp
b25TdHJlYW07Ci1zdHJ1Y3QgRXhlY3V0YWJsZUluZm87Ci0KLXR5cGVkZWYgdW5zaWduZWQgVW5s
aW5rZWRWYWx1ZVByb2ZpbGU7Ci10eXBlZGVmIHVuc2lnbmVkIFVubGlua2VkQXJyYXlQcm9maWxl
OwotdHlwZWRlZiB1bnNpZ25lZCBVbmxpbmtlZEFycmF5QWxsb2NhdGlvblByb2ZpbGU7Ci10eXBl
ZGVmIHVuc2lnbmVkIFVubGlua2VkT2JqZWN0QWxsb2NhdGlvblByb2ZpbGU7Ci10eXBlZGVmIHVu
c2lnbmVkIFVubGlua2VkTExJbnRDYWxsTGlua0luZm87Ci0KLXN0cnVjdCBVbmxpbmtlZFN0cmlu
Z0p1bXBUYWJsZSB7Ci0gICAgc3RydWN0IE9mZnNldExvY2F0aW9uIHsKLSAgICAgICAgaW50MzJf
dCBicmFuY2hPZmZzZXQ7Ci0gICAgfTsKLQotICAgIHR5cGVkZWYgSGFzaE1hcDxSZWZQdHI8U3Ry
aW5nSW1wbD4sIE9mZnNldExvY2F0aW9uPiBTdHJpbmdPZmZzZXRUYWJsZTsKLSAgICBTdHJpbmdP
ZmZzZXRUYWJsZSBvZmZzZXRUYWJsZTsKLQotICAgIGlubGluZSBpbnQzMl90IG9mZnNldEZvclZh
bHVlKFN0cmluZ0ltcGwqIHZhbHVlLCBpbnQzMl90IGRlZmF1bHRPZmZzZXQpCi0gICAgewotICAg
ICAgICBTdHJpbmdPZmZzZXRUYWJsZTo6Y29uc3RfaXRlcmF0b3IgZW5kID0gb2Zmc2V0VGFibGUu
ZW5kKCk7Ci0gICAgICAgIFN0cmluZ09mZnNldFRhYmxlOjpjb25zdF9pdGVyYXRvciBsb2MgPSBv
ZmZzZXRUYWJsZS5maW5kKHZhbHVlKTsKLSAgICAgICAgaWYgKGxvYyA9PSBlbmQpCi0gICAgICAg
ICAgICByZXR1cm4gZGVmYXVsdE9mZnNldDsKLSAgICAgICAgcmV0dXJuIGxvYy0+dmFsdWUuYnJh
bmNoT2Zmc2V0OwotICAgIH0KLQotfTsKLQotc3RydWN0IFVubGlua2VkU2ltcGxlSnVtcFRhYmxl
IHsKLSAgICBWZWN0b3I8aW50MzJfdD4gYnJhbmNoT2Zmc2V0czsKLSAgICBpbnQzMl90IG1pbjsK
LQotICAgIGludDMyX3Qgb2Zmc2V0Rm9yVmFsdWUoaW50MzJfdCB2YWx1ZSwgaW50MzJfdCBkZWZh
dWx0T2Zmc2V0KTsKLSAgICB2b2lkIGFkZChpbnQzMl90IGtleSwgaW50MzJfdCBvZmZzZXQpCi0g
ICAgewotICAgICAgICBpZiAoIWJyYW5jaE9mZnNldHNba2V5XSkKLSAgICAgICAgICAgIGJyYW5j
aE9mZnNldHNba2V5XSA9IG9mZnNldDsKLSAgICB9Ci19OwotCi1zdHJ1Y3QgVW5saW5rZWRJbnN0
cnVjdGlvbiB7Ci0gICAgVW5saW5rZWRJbnN0cnVjdGlvbigpIHsgdS5vcGVyYW5kID0gMDsgfQot
ICAgIFVubGlua2VkSW5zdHJ1Y3Rpb24oT3Bjb2RlSUQgb3Bjb2RlKSB7IHUub3Bjb2RlID0gb3Bj
b2RlOyB9Ci0gICAgVW5saW5rZWRJbnN0cnVjdGlvbihpbnQgb3BlcmFuZCkgeyB1Lm9wZXJhbmQg
PSBvcGVyYW5kOyB9Ci0gICAgdW5pb24gewotICAgICAgICBPcGNvZGVJRCBvcGNvZGU7Ci0gICAg
ICAgIGludDMyX3Qgb3BlcmFuZDsKLSAgICAgICAgdW5zaWduZWQgaW5kZXg7Ci0gICAgfSB1Owot
fTsKLQotY2xhc3MgVW5saW5rZWRDb2RlQmxvY2sgOiBwdWJsaWMgSlNDZWxsIHsKLXB1YmxpYzoK
LSAgICB0eXBlZGVmIEpTQ2VsbCBCYXNlOwotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1
Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzOwotCi0gICAgc3RhdGljIGNvbnN0IGJv
b2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7Ci0KLSAgICBlbnVtIHsgQ2FsbEZ1bmN0aW9uLCBB
cHBseUZ1bmN0aW9uIH07Ci0KLSAgICB0eXBlZGVmIFVubGlua2VkSW5zdHJ1Y3Rpb24gSW5zdHJ1
Y3Rpb247Ci0gICAgdHlwZWRlZiBWZWN0b3I8VW5saW5rZWRJbnN0cnVjdGlvbiwgMCwgVW5zYWZl
VmVjdG9yT3ZlcmZsb3c+IFVucGFja2VkSW5zdHJ1Y3Rpb25zOwotCi0gICAgYm9vbCBpc0NvbnN0
cnVjdG9yKCkgY29uc3QgeyByZXR1cm4gbV9pc0NvbnN0cnVjdG9yOyB9Ci0gICAgYm9vbCBpc1N0
cmljdE1vZGUoKSBjb25zdCB7IHJldHVybiBtX2lzU3RyaWN0TW9kZTsgfQotICAgIGJvb2wgdXNl
c0V2YWwoKSBjb25zdCB7IHJldHVybiBtX3VzZXNFdmFsOyB9Ci0gICAgU291cmNlUGFyc2VNb2Rl
IHBhcnNlTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyc2VNb2RlOyB9Ci0gICAgYm9vbCBpc0Fy
cm93RnVuY3Rpb24oKSBjb25zdCB7IHJldHVybiBpc0Fycm93RnVuY3Rpb25QYXJzZU1vZGUocGFy
c2VNb2RlKCkpOyB9Ci0gICAgRGVyaXZlZENvbnRleHRUeXBlIGRlcml2ZWRDb250ZXh0VHlwZSgp
IGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PERlcml2ZWRDb250ZXh0VHlwZT4obV9kZXJpdmVk
Q29udGV4dFR5cGUpOyB9Ci0gICAgRXZhbENvbnRleHRUeXBlIGV2YWxDb250ZXh0VHlwZSgpIGNv
bnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEV2YWxDb250ZXh0VHlwZT4obV9ldmFsQ29udGV4dFR5
cGUpOyB9Ci0gICAgYm9vbCBpc0Fycm93RnVuY3Rpb25Db250ZXh0KCkgY29uc3QgeyByZXR1cm4g
bV9pc0Fycm93RnVuY3Rpb25Db250ZXh0OyB9Ci0gICAgYm9vbCBpc0NsYXNzQ29udGV4dCgpIGNv
bnN0IHsgcmV0dXJuIG1faXNDbGFzc0NvbnRleHQ7IH0KLQotICAgIHZvaWQgYWRkRXhwcmVzc2lv
bkluZm8odW5zaWduZWQgaW5zdHJ1Y3Rpb25PZmZzZXQsIGludCBkaXZvdCwKLSAgICAgICAgaW50
IHN0YXJ0T2Zmc2V0LCBpbnQgZW5kT2Zmc2V0LCB1bnNpZ25lZCBsaW5lLCB1bnNpZ25lZCBjb2x1
bW4pOwotCi0gICAgdm9pZCBhZGRUeXBlUHJvZmlsZXJFeHByZXNzaW9uSW5mbyh1bnNpZ25lZCBp
bnN0cnVjdGlvbk9mZnNldCwgdW5zaWduZWQgc3RhcnREaXZvdCwgdW5zaWduZWQgZW5kRGl2b3Qp
OwotCi0gICAgYm9vbCBoYXNFeHByZXNzaW9uSW5mbygpIHsgcmV0dXJuIG1fZXhwcmVzc2lvbklu
Zm8uc2l6ZSgpOyB9Ci0gICAgY29uc3QgVmVjdG9yPEV4cHJlc3Npb25SYW5nZUluZm8+JiBleHBy
ZXNzaW9uSW5mbygpIHsgcmV0dXJuIG1fZXhwcmVzc2lvbkluZm87IH0KLQotICAgIC8vIFNwZWNp
YWwgcmVnaXN0ZXJzCi0gICAgdm9pZCBzZXRUaGlzUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHRo
aXNSZWdpc3RlcikgeyBtX3RoaXNSZWdpc3RlciA9IHRoaXNSZWdpc3RlcjsgfQotICAgIHZvaWQg
c2V0U2NvcGVSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgc2NvcGVSZWdpc3RlcikgeyBtX3Njb3Bl
UmVnaXN0ZXIgPSBzY29wZVJlZ2lzdGVyOyB9Ci0KLSAgICBib29sIHVzZXNHbG9iYWxPYmplY3Qo
KSBjb25zdCB7IHJldHVybiBtX2dsb2JhbE9iamVjdFJlZ2lzdGVyLmlzVmFsaWQoKTsgfQotICAg
IHZvaWQgc2V0R2xvYmFsT2JqZWN0UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIGdsb2JhbE9iamVj
dFJlZ2lzdGVyKSB7IG1fZ2xvYmFsT2JqZWN0UmVnaXN0ZXIgPSBnbG9iYWxPYmplY3RSZWdpc3Rl
cjsgfQotICAgIFZpcnR1YWxSZWdpc3RlciBnbG9iYWxPYmplY3RSZWdpc3RlcigpIGNvbnN0IHsg
cmV0dXJuIG1fZ2xvYmFsT2JqZWN0UmVnaXN0ZXI7IH0KLQotICAgIC8vIFBhcmFtZXRlciBpbmZv
cm1hdGlvbgotICAgIHZvaWQgc2V0TnVtUGFyYW1ldGVycyhpbnQgbmV3VmFsdWUpIHsgbV9udW1Q
YXJhbWV0ZXJzID0gbmV3VmFsdWU7IH0KLSAgICB2b2lkIGFkZFBhcmFtZXRlcigpIHsgbV9udW1Q
YXJhbWV0ZXJzKys7IH0KLSAgICB1bnNpZ25lZCBudW1QYXJhbWV0ZXJzKCkgY29uc3QgeyByZXR1
cm4gbV9udW1QYXJhbWV0ZXJzOyB9Ci0KLSAgICB1bnNpZ25lZCBhZGRSZWdFeHAoUmVnRXhwKiBy
KQotICAgIHsKLSAgICAgICAgY3JlYXRlUmFyZURhdGFJZk5lY2Vzc2FyeSgpOwotICAgICAgICB1
bnNpZ25lZCBzaXplID0gbV9yYXJlRGF0YS0+bV9yZWdleHBzLnNpemUoKTsKLSAgICAgICAgbV9y
YXJlRGF0YS0+bV9yZWdleHBzLmFwcGVuZChXcml0ZUJhcnJpZXI8UmVnRXhwPigqdm0oKSwgdGhp
cywgcikpOwotICAgICAgICByZXR1cm4gc2l6ZTsKLSAgICB9Ci0gICAgdW5zaWduZWQgbnVtYmVy
T2ZSZWdFeHBzKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIGlmICghbV9yYXJlRGF0YSkKLSAgICAg
ICAgICAgIHJldHVybiAwOwotICAgICAgICByZXR1cm4gbV9yYXJlRGF0YS0+bV9yZWdleHBzLnNp
emUoKTsKLSAgICB9Ci0gICAgUmVnRXhwKiByZWdleHAoaW50IGluZGV4KSBjb25zdCB7IEFTU0VS
VChtX3JhcmVEYXRhKTsgcmV0dXJuIG1fcmFyZURhdGEtPm1fcmVnZXhwc1tpbmRleF0uZ2V0KCk7
IH0KLQotICAgIC8vIENvbnN0YW50IFBvb2xzCi0KLSAgICBzaXplX3QgbnVtYmVyT2ZJZGVudGlm
aWVycygpIGNvbnN0IHsgcmV0dXJuIG1faWRlbnRpZmllcnMuc2l6ZSgpOyB9Ci0gICAgdm9pZCBh
ZGRJZGVudGlmaWVyKGNvbnN0IElkZW50aWZpZXImIGkpIHsgcmV0dXJuIG1faWRlbnRpZmllcnMu
YXBwZW5kKGkpOyB9Ci0gICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnRpZmllcihpbnQgaW5kZXgp
IGNvbnN0IHsgcmV0dXJuIG1faWRlbnRpZmllcnNbaW5kZXhdOyB9Ci0gICAgY29uc3QgVmVjdG9y
PElkZW50aWZpZXI+JiBpZGVudGlmaWVycygpIGNvbnN0IHsgcmV0dXJuIG1faWRlbnRpZmllcnM7
IH0KLQotICAgIHVuc2lnbmVkIGFkZENvbnN0YW50KEpTVmFsdWUgdiwgU291cmNlQ29kZVJlcHJl
c2VudGF0aW9uIHNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbiA9IFNvdXJjZUNvZGVSZXByZXNlbnRh
dGlvbjo6T3RoZXIpCi0gICAgewotICAgICAgICB1bnNpZ25lZCByZXN1bHQgPSBtX2NvbnN0YW50
UmVnaXN0ZXJzLnNpemUoKTsKLSAgICAgICAgbV9jb25zdGFudFJlZ2lzdGVycy5hcHBlbmQoV3Jp
dGVCYXJyaWVyPFVua25vd24+KCkpOwotICAgICAgICBtX2NvbnN0YW50UmVnaXN0ZXJzLmxhc3Qo
KS5zZXQoKnZtKCksIHRoaXMsIHYpOwotICAgICAgICBtX2NvbnN0YW50c1NvdXJjZUNvZGVSZXBy
ZXNlbnRhdGlvbi5hcHBlbmQoc291cmNlQ29kZVJlcHJlc2VudGF0aW9uKTsKLSAgICAgICAgcmV0
dXJuIHJlc3VsdDsKLSAgICB9Ci0gICAgdW5zaWduZWQgYWRkQ29uc3RhbnQoTGlua1RpbWVDb25z
dGFudCB0eXBlKQotICAgIHsKLSAgICAgICAgdW5zaWduZWQgcmVzdWx0ID0gbV9jb25zdGFudFJl
Z2lzdGVycy5zaXplKCk7Ci0gICAgICAgIEFTU0VSVChyZXN1bHQpOwotICAgICAgICB1bnNpZ25l
ZCBpbmRleCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPih0eXBlKTsKLSAgICAgICAgQVNTRVJUKGlu
ZGV4IDwgTGlua1RpbWVDb25zdGFudENvdW50KTsKLSAgICAgICAgbV9saW5rVGltZUNvbnN0YW50
c1tpbmRleF0gPSByZXN1bHQ7Ci0gICAgICAgIG1fY29uc3RhbnRSZWdpc3RlcnMuYXBwZW5kKFdy
aXRlQmFycmllcjxVbmtub3duPigpKTsKLSAgICAgICAgbV9jb25zdGFudHNTb3VyY2VDb2RlUmVw
cmVzZW50YXRpb24uYXBwZW5kKFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6T3RoZXIpOwotICAg
ICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLSAgICB1bnNpZ25lZCByZWdpc3RlckluZGV4Rm9y
TGlua1RpbWVDb25zdGFudChMaW5rVGltZUNvbnN0YW50IHR5cGUpCi0gICAgewotICAgICAgICB1
bnNpZ25lZCBpbmRleCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPih0eXBlKTsKLSAgICAgICAgQVNT
RVJUKGluZGV4IDwgTGlua1RpbWVDb25zdGFudENvdW50KTsKLSAgICAgICAgcmV0dXJuIG1fbGlu
a1RpbWVDb25zdGFudHNbaW5kZXhdOwotICAgIH0KLSAgICBjb25zdCBWZWN0b3I8V3JpdGVCYXJy
aWVyPFVua25vd24+PiYgY29uc3RhbnRSZWdpc3RlcnMoKSB7IHJldHVybiBtX2NvbnN0YW50UmVn
aXN0ZXJzOyB9Ci0gICAgY29uc3QgV3JpdGVCYXJyaWVyPFVua25vd24+JiBjb25zdGFudFJlZ2lz
dGVyKGludCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tpbmRleCAt
IEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4XTsgfQotICAgIEFMV0FZU19JTkxJTkUgYm9vbCBp
c0NvbnN0YW50UmVnaXN0ZXJJbmRleChpbnQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGluZGV4ID49
IEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4OyB9Ci0gICAgY29uc3QgVmVjdG9yPFNvdXJjZUNv
ZGVSZXByZXNlbnRhdGlvbj4mIGNvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbigpIHsg
cmV0dXJuIG1fY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOyB9Ci0KLSAgICAvLyBK
dW1wcwotICAgIHNpemVfdCBudW1iZXJPZkp1bXBUYXJnZXRzKCkgY29uc3QgeyByZXR1cm4gbV9q
dW1wVGFyZ2V0cy5zaXplKCk7IH0KLSAgICB2b2lkIGFkZEp1bXBUYXJnZXQodW5zaWduZWQganVt
cFRhcmdldCkgeyBtX2p1bXBUYXJnZXRzLmFwcGVuZChqdW1wVGFyZ2V0KTsgfQotICAgIHVuc2ln
bmVkIGp1bXBUYXJnZXQoaW50IGluZGV4KSBjb25zdCB7IHJldHVybiBtX2p1bXBUYXJnZXRzW2lu
ZGV4XTsgfQotICAgIHVuc2lnbmVkIGxhc3RKdW1wVGFyZ2V0KCkgY29uc3QgeyByZXR1cm4gbV9q
dW1wVGFyZ2V0cy5sYXN0KCk7IH0KLQotICAgIFVubGlua2VkSGFuZGxlckluZm8qIGhhbmRsZXJG
b3JCeXRlY29kZU9mZnNldCh1bnNpZ25lZCBieXRlY29kZU9mZnNldCwgUmVxdWlyZWRIYW5kbGVy
ID0gUmVxdWlyZWRIYW5kbGVyOjpBbnlIYW5kbGVyKTsKLSAgICBVbmxpbmtlZEhhbmRsZXJJbmZv
KiBoYW5kbGVyRm9ySW5kZXgodW5zaWduZWQsIFJlcXVpcmVkSGFuZGxlciA9IFJlcXVpcmVkSGFu
ZGxlcjo6QW55SGFuZGxlcik7Ci0KLSAgICBib29sIGlzQnVpbHRpbkZ1bmN0aW9uKCkgY29uc3Qg
eyByZXR1cm4gbV9pc0J1aWx0aW5GdW5jdGlvbjsgfQotCi0gICAgQ29uc3RydWN0b3JLaW5kIGNv
bnN0cnVjdG9yS2luZCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PENvbnN0cnVjdG9yS2lu
ZD4obV9jb25zdHJ1Y3RvcktpbmQpOyB9Ci0gICAgU3VwZXJCaW5kaW5nIHN1cGVyQmluZGluZygp
IGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFN1cGVyQmluZGluZz4obV9zdXBlckJpbmRpbmcp
OyB9Ci0gICAgSlNQYXJzZXJTY3JpcHRNb2RlIHNjcmlwdE1vZGUoKSBjb25zdCB7IHJldHVybiBz
dGF0aWNfY2FzdDxKU1BhcnNlclNjcmlwdE1vZGU+KG1fc2NyaXB0TW9kZSk7IH0KLQotICAgIHZv
aWQgc2hyaW5rVG9GaXQoKQotICAgIHsKLSAgICAgICAgbV9qdW1wVGFyZ2V0cy5zaHJpbmtUb0Zp
dCgpOwotICAgICAgICBtX2lkZW50aWZpZXJzLnNocmlua1RvRml0KCk7Ci0gICAgICAgIG1fY29u
c3RhbnRSZWdpc3RlcnMuc2hyaW5rVG9GaXQoKTsKLSAgICAgICAgbV9jb25zdGFudHNTb3VyY2VD
b2RlUmVwcmVzZW50YXRpb24uc2hyaW5rVG9GaXQoKTsKLSAgICAgICAgbV9mdW5jdGlvbkRlY2xz
LnNocmlua1RvRml0KCk7Ci0gICAgICAgIG1fZnVuY3Rpb25FeHBycy5zaHJpbmtUb0ZpdCgpOwot
ICAgICAgICBtX3Byb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25zLnNocmlua1RvRml0KCk7Ci0gICAg
ICAgIG1fZXhwcmVzc2lvbkluZm8uc2hyaW5rVG9GaXQoKTsKLQotICAgICAgICBpZiAobV9yYXJl
RGF0YSkgewotICAgICAgICAgICAgbV9yYXJlRGF0YS0+bV9leGNlcHRpb25IYW5kbGVycy5zaHJp
bmtUb0ZpdCgpOwotICAgICAgICAgICAgbV9yYXJlRGF0YS0+bV9yZWdleHBzLnNocmlua1RvRml0
KCk7Ci0gICAgICAgICAgICBtX3JhcmVEYXRhLT5tX2NvbnN0YW50QnVmZmVycy5zaHJpbmtUb0Zp
dCgpOwotICAgICAgICAgICAgbV9yYXJlRGF0YS0+bV9zd2l0Y2hKdW1wVGFibGVzLnNocmlua1Rv
Rml0KCk7Ci0gICAgICAgICAgICBtX3JhcmVEYXRhLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMu
c2hyaW5rVG9GaXQoKTsKLSAgICAgICAgICAgIG1fcmFyZURhdGEtPm1fZXhwcmVzc2lvbkluZm9G
YXRQb3NpdGlvbnMuc2hyaW5rVG9GaXQoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHZvaWQg
c2V0SW5zdHJ1Y3Rpb25zKHN0ZDo6dW5pcXVlX3B0cjxVbmxpbmtlZEluc3RydWN0aW9uU3RyZWFt
Pik7Ci0gICAgY29uc3QgVW5saW5rZWRJbnN0cnVjdGlvblN0cmVhbSYgaW5zdHJ1Y3Rpb25zKCkg
Y29uc3Q7Ci0KLSAgICBpbnQgbnVtQ2FsbGVlTG9jYWxzKCkgY29uc3QgeyByZXR1cm4gbV9udW1D
YWxsZWVMb2NhbHM7IH0KLQotICAgIGludCBtX251bVZhcnM7Ci0gICAgaW50IG1fbnVtQ2FwdHVy
ZWRWYXJzOwotICAgIGludCBtX251bUNhbGxlZUxvY2FsczsKLQotICAgIC8vIEp1bXAgVGFibGVz
Ci0KLSAgICBzaXplX3QgbnVtYmVyT2ZTd2l0Y2hKdW1wVGFibGVzKCkgY29uc3QgeyByZXR1cm4g
bV9yYXJlRGF0YSA/IG1fcmFyZURhdGEtPm1fc3dpdGNoSnVtcFRhYmxlcy5zaXplKCkgOiAwOyB9
Ci0gICAgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUmIGFkZFN3aXRjaEp1bXBUYWJsZSgpIHsgY3Jl
YXRlUmFyZURhdGFJZk5lY2Vzc2FyeSgpOyBtX3JhcmVEYXRhLT5tX3N3aXRjaEp1bXBUYWJsZXMu
YXBwZW5kKFVubGlua2VkU2ltcGxlSnVtcFRhYmxlKCkpOyByZXR1cm4gbV9yYXJlRGF0YS0+bV9z
d2l0Y2hKdW1wVGFibGVzLmxhc3QoKTsgfQotICAgIFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiBz
d2l0Y2hKdW1wVGFibGUoaW50IHRhYmxlSW5kZXgpIHsgQVNTRVJUKG1fcmFyZURhdGEpOyByZXR1
cm4gbV9yYXJlRGF0YS0+bV9zd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOyB9Ci0KLSAgICBz
aXplX3QgbnVtYmVyT2ZTdHJpbmdTd2l0Y2hKdW1wVGFibGVzKCkgY29uc3QgeyByZXR1cm4gbV9y
YXJlRGF0YSA/IG1fcmFyZURhdGEtPm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcy5zaXplKCkgOiAw
OyB9Ci0gICAgVW5saW5rZWRTdHJpbmdKdW1wVGFibGUmIGFkZFN0cmluZ1N3aXRjaEp1bXBUYWJs
ZSgpIHsgY3JlYXRlUmFyZURhdGFJZk5lY2Vzc2FyeSgpOyBtX3JhcmVEYXRhLT5tX3N0cmluZ1N3
aXRjaEp1bXBUYWJsZXMuYXBwZW5kKFVubGlua2VkU3RyaW5nSnVtcFRhYmxlKCkpOyByZXR1cm4g
bV9yYXJlRGF0YS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzLmxhc3QoKTsgfQotICAgIFVubGlu
a2VkU3RyaW5nSnVtcFRhYmxlJiBzdHJpbmdTd2l0Y2hKdW1wVGFibGUoaW50IHRhYmxlSW5kZXgp
IHsgQVNTRVJUKG1fcmFyZURhdGEpOyByZXR1cm4gbV9yYXJlRGF0YS0+bV9zdHJpbmdTd2l0Y2hK
dW1wVGFibGVzW3RhYmxlSW5kZXhdOyB9Ci0KLSAgICB1bnNpZ25lZCBhZGRGdW5jdGlvbkRlY2wo
VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIG4pCi0gICAgewotICAgICAgICB1bnNpZ25lZCBz
aXplID0gbV9mdW5jdGlvbkRlY2xzLnNpemUoKTsKLSAgICAgICAgbV9mdW5jdGlvbkRlY2xzLmFw
cGVuZChXcml0ZUJhcnJpZXI8VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU+KCkpOwotICAgICAg
ICBtX2Z1bmN0aW9uRGVjbHMubGFzdCgpLnNldCgqdm0oKSwgdGhpcywgbik7Ci0gICAgICAgIHJl
dHVybiBzaXplOwotICAgIH0KLSAgICBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rp
b25EZWNsKGludCBpbmRleCkgeyByZXR1cm4gbV9mdW5jdGlvbkRlY2xzW2luZGV4XS5nZXQoKTsg
fQotICAgIHNpemVfdCBudW1iZXJPZkZ1bmN0aW9uRGVjbHMoKSB7IHJldHVybiBtX2Z1bmN0aW9u
RGVjbHMuc2l6ZSgpOyB9Ci0gICAgdW5zaWduZWQgYWRkRnVuY3Rpb25FeHByKFVubGlua2VkRnVu
Y3Rpb25FeGVjdXRhYmxlKiBuKQotICAgIHsKLSAgICAgICAgdW5zaWduZWQgc2l6ZSA9IG1fZnVu
Y3Rpb25FeHBycy5zaXplKCk7Ci0gICAgICAgIG1fZnVuY3Rpb25FeHBycy5hcHBlbmQoV3JpdGVC
YXJyaWVyPFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlPigpKTsKLSAgICAgICAgbV9mdW5jdGlv
bkV4cHJzLmxhc3QoKS5zZXQoKnZtKCksIHRoaXMsIG4pOwotICAgICAgICByZXR1cm4gc2l6ZTsK
LSAgICB9Ci0gICAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uRXhwcihpbnQg
aW5kZXgpIHsgcmV0dXJuIG1fZnVuY3Rpb25FeHByc1tpbmRleF0uZ2V0KCk7IH0KLSAgICBzaXpl
X3QgbnVtYmVyT2ZGdW5jdGlvbkV4cHJzKCkgeyByZXR1cm4gbV9mdW5jdGlvbkV4cHJzLnNpemUo
KTsgfQotCi0gICAgLy8gRXhjZXB0aW9uIGhhbmRsaW5nIHN1cHBvcnQKLSAgICBzaXplX3QgbnVt
YmVyT2ZFeGNlcHRpb25IYW5kbGVycygpIGNvbnN0IHsgcmV0dXJuIG1fcmFyZURhdGEgPyBtX3Jh
cmVEYXRhLT5tX2V4Y2VwdGlvbkhhbmRsZXJzLnNpemUoKSA6IDA7IH0KLSAgICB2b2lkIGFkZEV4
Y2VwdGlvbkhhbmRsZXIoY29uc3QgVW5saW5rZWRIYW5kbGVySW5mbyYgaGFuZGxlcikgeyBjcmVh
dGVSYXJlRGF0YUlmTmVjZXNzYXJ5KCk7IHJldHVybiBtX3JhcmVEYXRhLT5tX2V4Y2VwdGlvbkhh
bmRsZXJzLmFwcGVuZChoYW5kbGVyKTsgfQotICAgIFVubGlua2VkSGFuZGxlckluZm8mIGV4Y2Vw
dGlvbkhhbmRsZXIoaW50IGluZGV4KSB7IEFTU0VSVChtX3JhcmVEYXRhKTsgcmV0dXJuIG1fcmFy
ZURhdGEtPm1fZXhjZXB0aW9uSGFuZGxlcnNbaW5kZXhdOyB9Ci0KLSAgICBVbmxpbmtlZEFycmF5
UHJvZmlsZSBhZGRBcnJheVByb2ZpbGUoKSB7IHJldHVybiBtX2FycmF5UHJvZmlsZUNvdW50Kys7
IH0KLSAgICB1bnNpZ25lZCBudW1iZXJPZkFycmF5UHJvZmlsZXMoKSB7IHJldHVybiBtX2FycmF5
UHJvZmlsZUNvdW50OyB9Ci0gICAgVW5saW5rZWRBcnJheUFsbG9jYXRpb25Qcm9maWxlIGFkZEFy
cmF5QWxsb2NhdGlvblByb2ZpbGUoKSB7IHJldHVybiBtX2FycmF5QWxsb2NhdGlvblByb2ZpbGVD
b3VudCsrOyB9Ci0gICAgdW5zaWduZWQgbnVtYmVyT2ZBcnJheUFsbG9jYXRpb25Qcm9maWxlcygp
IHsgcmV0dXJuIG1fYXJyYXlBbGxvY2F0aW9uUHJvZmlsZUNvdW50OyB9Ci0gICAgVW5saW5rZWRP
YmplY3RBbGxvY2F0aW9uUHJvZmlsZSBhZGRPYmplY3RBbGxvY2F0aW9uUHJvZmlsZSgpIHsgcmV0
dXJuIG1fb2JqZWN0QWxsb2NhdGlvblByb2ZpbGVDb3VudCsrOyB9Ci0gICAgdW5zaWduZWQgbnVt
YmVyT2ZPYmplY3RBbGxvY2F0aW9uUHJvZmlsZXMoKSB7IHJldHVybiBtX29iamVjdEFsbG9jYXRp
b25Qcm9maWxlQ291bnQ7IH0KLSAgICBVbmxpbmtlZFZhbHVlUHJvZmlsZSBhZGRWYWx1ZVByb2Zp
bGUoKSB7IHJldHVybiBtX3ZhbHVlUHJvZmlsZUNvdW50Kys7IH0KLSAgICB1bnNpZ25lZCBudW1i
ZXJPZlZhbHVlUHJvZmlsZXMoKSB7IHJldHVybiBtX3ZhbHVlUHJvZmlsZUNvdW50OyB9Ci0KLSAg
ICBVbmxpbmtlZExMSW50Q2FsbExpbmtJbmZvIGFkZExMSW50Q2FsbExpbmtJbmZvKCkgeyByZXR1
cm4gbV9sbGludENhbGxMaW5rSW5mb0NvdW50Kys7IH0KLSAgICB1bnNpZ25lZCBudW1iZXJPZkxM
aW50Q2FsbExpbmtJbmZvcygpIHsgcmV0dXJuIG1fbGxpbnRDYWxsTGlua0luZm9Db3VudDsgfQot
Ci0gICAgQ29kZVR5cGUgY29kZVR5cGUoKSBjb25zdCB7IHJldHVybiBtX2NvZGVUeXBlOyB9Ci0K
LSAgICBWaXJ0dWFsUmVnaXN0ZXIgdGhpc1JlZ2lzdGVyKCkgY29uc3QgeyByZXR1cm4gbV90aGlz
UmVnaXN0ZXI7IH0KLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGVSZWdpc3RlcigpIGNvbnN0IHsg
cmV0dXJuIG1fc2NvcGVSZWdpc3RlcjsgfQotCi0gICAgdm9pZCBhZGRQcm9wZXJ0eUFjY2Vzc0lu
c3RydWN0aW9uKHVuc2lnbmVkIHByb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb24pCi0gICAgewotICAg
ICAgICBtX3Byb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25zLmFwcGVuZChwcm9wZXJ0eUFjY2Vzc0lu
c3RydWN0aW9uKTsKLSAgICB9Ci0KLSAgICBzaXplX3QgbnVtYmVyT2ZQcm9wZXJ0eUFjY2Vzc0lu
c3RydWN0aW9ucygpIGNvbnN0IHsgcmV0dXJuIG1fcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbnMu
c2l6ZSgpOyB9Ci0gICAgY29uc3QgVmVjdG9yPHVuc2lnbmVkPiYgcHJvcGVydHlBY2Nlc3NJbnN0
cnVjdGlvbnMoKSBjb25zdCB7IHJldHVybiBtX3Byb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25zOyB9
Ci0KLSAgICB0eXBlZGVmIFZlY3RvcjxKU1ZhbHVlPiBDb25zdGFudEJ1ZmZlcjsKLQotICAgIHNp
emVfdCBjb25zdGFudEJ1ZmZlckNvdW50KCkgeyBBU1NFUlQobV9yYXJlRGF0YSk7IHJldHVybiBt
X3JhcmVEYXRhLT5tX2NvbnN0YW50QnVmZmVycy5zaXplKCk7IH0KLSAgICB1bnNpZ25lZCBhZGRD
b25zdGFudEJ1ZmZlcih1bnNpZ25lZCBsZW5ndGgpCi0gICAgewotICAgICAgICBjcmVhdGVSYXJl
RGF0YUlmTmVjZXNzYXJ5KCk7Ci0gICAgICAgIHVuc2lnbmVkIHNpemUgPSBtX3JhcmVEYXRhLT5t
X2NvbnN0YW50QnVmZmVycy5zaXplKCk7Ci0gICAgICAgIG1fcmFyZURhdGEtPm1fY29uc3RhbnRC
dWZmZXJzLmFwcGVuZChWZWN0b3I8SlNWYWx1ZT4obGVuZ3RoKSk7Ci0gICAgICAgIHJldHVybiBz
aXplOwotICAgIH0KLQotICAgIGNvbnN0IENvbnN0YW50QnVmZmVyJiBjb25zdGFudEJ1ZmZlcih1
bnNpZ25lZCBpbmRleCkgY29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVChtX3JhcmVEYXRhKTsK
LSAgICAgICAgcmV0dXJuIG1fcmFyZURhdGEtPm1fY29uc3RhbnRCdWZmZXJzW2luZGV4XTsKLSAg
ICB9Ci0KLSAgICBDb25zdGFudEJ1ZmZlciYgY29uc3RhbnRCdWZmZXIodW5zaWduZWQgaW5kZXgp
Ci0gICAgewotICAgICAgICBBU1NFUlQobV9yYXJlRGF0YSk7Ci0gICAgICAgIHJldHVybiBtX3Jh
cmVEYXRhLT5tX2NvbnN0YW50QnVmZmVyc1tpbmRleF07Ci0gICAgfQotCi0gICAgYm9vbCBoYXNS
YXJlRGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fcmFyZURhdGEuZ2V0KCk7IH0KLQotICAgIGludCBs
aW5lTnVtYmVyRm9yQnl0ZWNvZGVPZmZzZXQodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQpOwotCi0g
ICAgdm9pZCBleHByZXNzaW9uUmFuZ2VGb3JCeXRlY29kZU9mZnNldCh1bnNpZ25lZCBieXRlY29k
ZU9mZnNldCwgaW50JiBkaXZvdCwKLSAgICAgICAgaW50JiBzdGFydE9mZnNldCwgaW50JiBlbmRP
ZmZzZXQsIHVuc2lnbmVkJiBsaW5lLCB1bnNpZ25lZCYgY29sdW1uKSBjb25zdDsKLQotICAgIGJv
b2wgdHlwZVByb2ZpbGVyRXhwcmVzc2lvbkluZm9Gb3JCeXRlY29kZU9mZnNldCh1bnNpZ25lZCBi
eXRlY29kZU9mZnNldCwgdW5zaWduZWQmIHN0YXJ0RGl2b3QsIHVuc2lnbmVkJiBlbmREaXZvdCk7
Ci0KLSAgICB2b2lkIHJlY29yZFBhcnNlKENvZGVGZWF0dXJlcyBmZWF0dXJlcywgYm9vbCBoYXND
YXB0dXJlZFZhcmlhYmxlcywgdW5zaWduZWQgZmlyc3RMaW5lLCB1bnNpZ25lZCBsaW5lQ291bnQs
IHVuc2lnbmVkIGVuZENvbHVtbikKLSAgICB7Ci0gICAgICAgIG1fZmVhdHVyZXMgPSBmZWF0dXJl
czsKLSAgICAgICAgbV9oYXNDYXB0dXJlZFZhcmlhYmxlcyA9IGhhc0NhcHR1cmVkVmFyaWFibGVz
OwotICAgICAgICBtX2ZpcnN0TGluZSA9IGZpcnN0TGluZTsKLSAgICAgICAgbV9saW5lQ291bnQg
PSBsaW5lQ291bnQ7Ci0gICAgICAgIC8vIEZvciB0aGUgVW5saW5rZWRDb2RlQmxvY2ssIHN0YXJ0
Q29sdW1uIGlzIGFsd2F5cyAwLgotICAgICAgICBtX2VuZENvbHVtbiA9IGVuZENvbHVtbjsKLSAg
ICB9Ci0KLSAgICBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTERpcmVjdGl2ZSgpIGNvbnN0IHsgcmV0
dXJuIG1fc291cmNlVVJMRGlyZWN0aXZlOyB9Ci0gICAgY29uc3QgU3RyaW5nJiBzb3VyY2VNYXBw
aW5nVVJMRGlyZWN0aXZlKCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2VNYXBwaW5nVVJMRGlyZWN0
aXZlOyB9Ci0gICAgdm9pZCBzZXRTb3VyY2VVUkxEaXJlY3RpdmUoY29uc3QgU3RyaW5nJiBzb3Vy
Y2VVUkwpIHsgbV9zb3VyY2VVUkxEaXJlY3RpdmUgPSBzb3VyY2VVUkw7IH0KLSAgICB2b2lkIHNl
dFNvdXJjZU1hcHBpbmdVUkxEaXJlY3RpdmUoY29uc3QgU3RyaW5nJiBzb3VyY2VNYXBwaW5nVVJM
KSB7IG1fc291cmNlTWFwcGluZ1VSTERpcmVjdGl2ZSA9IHNvdXJjZU1hcHBpbmdVUkw7IH0KLQot
ICAgIENvZGVGZWF0dXJlcyBjb2RlRmVhdHVyZXMoKSBjb25zdCB7IHJldHVybiBtX2ZlYXR1cmVz
OyB9Ci0gICAgYm9vbCBoYXNDYXB0dXJlZFZhcmlhYmxlcygpIGNvbnN0IHsgcmV0dXJuIG1faGFz
Q2FwdHVyZWRWYXJpYWJsZXM7IH0KLSAgICB1bnNpZ25lZCBmaXJzdExpbmUoKSBjb25zdCB7IHJl
dHVybiBtX2ZpcnN0TGluZTsgfQotICAgIHVuc2lnbmVkIGxpbmVDb3VudCgpIGNvbnN0IHsgcmV0
dXJuIG1fbGluZUNvdW50OyB9Ci0gICAgQUxXQVlTX0lOTElORSB1bnNpZ25lZCBzdGFydENvbHVt
bigpIGNvbnN0IHsgcmV0dXJuIDA7IH0KLSAgICB1bnNpZ25lZCBlbmRDb2x1bW4oKSBjb25zdCB7
IHJldHVybiBtX2VuZENvbHVtbjsgfQotCi0gICAgdm9pZCBhZGRPcFByb2ZpbGVDb250cm9sRmxv
d0J5dGVjb2RlT2Zmc2V0KHNpemVfdCBvZmZzZXQpCi0gICAgewotICAgICAgICBjcmVhdGVSYXJl
RGF0YUlmTmVjZXNzYXJ5KCk7Ci0gICAgICAgIG1fcmFyZURhdGEtPm1fb3BQcm9maWxlQ29udHJv
bEZsb3dCeXRlY29kZU9mZnNldHMuYXBwZW5kKG9mZnNldCk7Ci0gICAgfQotICAgIGNvbnN0IFZl
Y3RvcjxzaXplX3Q+JiBvcFByb2ZpbGVDb250cm9sRmxvd0J5dGVjb2RlT2Zmc2V0cygpIGNvbnN0
Ci0gICAgewotICAgICAgICBBU1NFUlQobV9yYXJlRGF0YSk7Ci0gICAgICAgIHJldHVybiBtX3Jh
cmVEYXRhLT5tX29wUHJvZmlsZUNvbnRyb2xGbG93Qnl0ZWNvZGVPZmZzZXRzOwotICAgIH0KLSAg
ICBib29sIGhhc09wUHJvZmlsZUNvbnRyb2xGbG93Qnl0ZWNvZGVPZmZzZXRzKCkgY29uc3QKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBtX3JhcmVEYXRhICYmICFtX3JhcmVEYXRhLT5tX29wUHJvZmls
ZUNvbnRyb2xGbG93Qnl0ZWNvZGVPZmZzZXRzLmlzRW1wdHkoKTsKLSAgICB9Ci0KLSAgICB2b2lk
IGR1bXBFeHByZXNzaW9uUmFuZ2VJbmZvKCk7IC8vIEZvciBkZWJ1Z2dpbmcgcHVycG9zZSBvbmx5
LgotCi0gICAgYm9vbCB3YXNDb21waWxlZFdpdGhEZWJ1Z2dpbmdPcGNvZGVzKCkgY29uc3QgeyBy
ZXR1cm4gbV93YXNDb21waWxlZFdpdGhEZWJ1Z2dpbmdPcGNvZGVzOyB9Ci0KLSAgICBUcmlTdGF0
ZSBkaWRPcHRpbWl6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGlkT3B0aW1pemU7IH0KLSAgICB2b2lk
IHNldERpZE9wdGltaXplKFRyaVN0YXRlIGRpZE9wdGltaXplKSB7IG1fZGlkT3B0aW1pemUgPSBk
aWRPcHRpbWl6ZTsgfQotCi1wcm90ZWN0ZWQ6Ci0gICAgVW5saW5rZWRDb2RlQmxvY2soVk0qLCBT
dHJ1Y3R1cmUqLCBDb2RlVHlwZSwgY29uc3QgRXhlY3V0YWJsZUluZm8mLCBEZWJ1Z2dlck1vZGUp
OwotICAgIH5VbmxpbmtlZENvZGVCbG9jaygpOwotCi0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihW
TSYgdm0pCi0gICAgewotICAgICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7Ci0gICAgfQot
Ci1wcml2YXRlOgotICAgIGZyaWVuZCBjbGFzcyBCeXRlY29kZVJld3JpdGVyOwotICAgIHZvaWQg
YXBwbHlNb2RpZmljYXRpb24oQnl0ZWNvZGVSZXdyaXRlciYpOwotCi0gICAgdm9pZCBjcmVhdGVS
YXJlRGF0YUlmTmVjZXNzYXJ5KCkKLSAgICB7Ci0gICAgICAgIGlmICghbV9yYXJlRGF0YSkKLSAg
ICAgICAgICAgIG1fcmFyZURhdGEgPSBzdGQ6Om1ha2VfdW5pcXVlPFJhcmVEYXRhPigpOwotICAg
IH0KLQotICAgIHZvaWQgZ2V0TGluZUFuZENvbHVtbihjb25zdCBFeHByZXNzaW9uUmFuZ2VJbmZv
JiwgdW5zaWduZWQmIGxpbmUsIHVuc2lnbmVkJiBjb2x1bW4pIGNvbnN0OwotCi0gICAgaW50IG1f
bnVtUGFyYW1ldGVyczsKLQotICAgIHN0ZDo6dW5pcXVlX3B0cjxVbmxpbmtlZEluc3RydWN0aW9u
U3RyZWFtPiBtX3VubGlua2VkSW5zdHJ1Y3Rpb25zOwotCi0gICAgVmlydHVhbFJlZ2lzdGVyIG1f
dGhpc1JlZ2lzdGVyOwotICAgIFZpcnR1YWxSZWdpc3RlciBtX3Njb3BlUmVnaXN0ZXI7Ci0gICAg
VmlydHVhbFJlZ2lzdGVyIG1fZ2xvYmFsT2JqZWN0UmVnaXN0ZXI7Ci0KLSAgICBTdHJpbmcgbV9z
b3VyY2VVUkxEaXJlY3RpdmU7Ci0gICAgU3RyaW5nIG1fc291cmNlTWFwcGluZ1VSTERpcmVjdGl2
ZTsKLQotICAgIHVuc2lnbmVkIG1fdXNlc0V2YWwgOiAxOwotICAgIHVuc2lnbmVkIG1faXNTdHJp
Y3RNb2RlIDogMTsKLSAgICB1bnNpZ25lZCBtX2lzQ29uc3RydWN0b3IgOiAxOwotICAgIHVuc2ln
bmVkIG1faGFzQ2FwdHVyZWRWYXJpYWJsZXMgOiAxOwotICAgIHVuc2lnbmVkIG1faXNCdWlsdGlu
RnVuY3Rpb24gOiAxOwotICAgIHVuc2lnbmVkIG1fc3VwZXJCaW5kaW5nIDogMTsKLSAgICB1bnNp
Z25lZCBtX3NjcmlwdE1vZGU6IDE7Ci0gICAgdW5zaWduZWQgbV9pc0Fycm93RnVuY3Rpb25Db250
ZXh0IDogMTsKLSAgICB1bnNpZ25lZCBtX2lzQ2xhc3NDb250ZXh0IDogMTsKLSAgICB1bnNpZ25l
ZCBtX3dhc0NvbXBpbGVkV2l0aERlYnVnZ2luZ09wY29kZXMgOiAxOwotICAgIHVuc2lnbmVkIG1f
Y29uc3RydWN0b3JLaW5kIDogMjsKLSAgICB1bnNpZ25lZCBtX2Rlcml2ZWRDb250ZXh0VHlwZSA6
IDI7Ci0gICAgdW5zaWduZWQgbV9ldmFsQ29udGV4dFR5cGUgOiAyOwotICAgIHVuc2lnbmVkIG1f
Zmlyc3RMaW5lOwotICAgIHVuc2lnbmVkIG1fbGluZUNvdW50OwotICAgIHVuc2lnbmVkIG1fZW5k
Q29sdW1uOwotCi0gICAgVHJpU3RhdGUgbV9kaWRPcHRpbWl6ZTsKLSAgICBTb3VyY2VQYXJzZU1v
ZGUgbV9wYXJzZU1vZGU7Ci0gICAgQ29kZUZlYXR1cmVzIG1fZmVhdHVyZXM7Ci0gICAgQ29kZVR5
cGUgbV9jb2RlVHlwZTsKLQotICAgIFZlY3Rvcjx1bnNpZ25lZD4gbV9qdW1wVGFyZ2V0czsKLQot
ICAgIFZlY3Rvcjx1bnNpZ25lZD4gbV9wcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uczsKLQotICAg
IC8vIENvbnN0YW50IFBvb2xzCi0gICAgVmVjdG9yPElkZW50aWZpZXI+IG1faWRlbnRpZmllcnM7
Ci0gICAgVmVjdG9yPFdyaXRlQmFycmllcjxVbmtub3duPj4gbV9jb25zdGFudFJlZ2lzdGVyczsK
LSAgICBWZWN0b3I8U291cmNlQ29kZVJlcHJlc2VudGF0aW9uPiBtX2NvbnN0YW50c1NvdXJjZUNv
ZGVSZXByZXNlbnRhdGlvbjsKLSAgICB0eXBlZGVmIFZlY3RvcjxXcml0ZUJhcnJpZXI8VW5saW5r
ZWRGdW5jdGlvbkV4ZWN1dGFibGU+PiBGdW5jdGlvbkV4cHJlc3Npb25WZWN0b3I7Ci0gICAgRnVu
Y3Rpb25FeHByZXNzaW9uVmVjdG9yIG1fZnVuY3Rpb25EZWNsczsKLSAgICBGdW5jdGlvbkV4cHJl
c3Npb25WZWN0b3IgbV9mdW5jdGlvbkV4cHJzOwotICAgIHN0ZDo6YXJyYXk8dW5zaWduZWQsIExp
bmtUaW1lQ29uc3RhbnRDb3VudD4gbV9saW5rVGltZUNvbnN0YW50czsKLQotICAgIHVuc2lnbmVk
IG1fYXJyYXlQcm9maWxlQ291bnQ7Ci0gICAgdW5zaWduZWQgbV9hcnJheUFsbG9jYXRpb25Qcm9m
aWxlQ291bnQ7Ci0gICAgdW5zaWduZWQgbV9vYmplY3RBbGxvY2F0aW9uUHJvZmlsZUNvdW50Owot
ICAgIHVuc2lnbmVkIG1fdmFsdWVQcm9maWxlQ291bnQ7Ci0gICAgdW5zaWduZWQgbV9sbGludENh
bGxMaW5rSW5mb0NvdW50OwotCi1wdWJsaWM6Ci0gICAgc3RydWN0IFJhcmVEYXRhIHsKLSAgICAg
ICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci0gICAgcHVibGljOgotICAgICAgICBWZWN0b3I8
VW5saW5rZWRIYW5kbGVySW5mbz4gbV9leGNlcHRpb25IYW5kbGVyczsKLQotICAgICAgICAvLyBS
YXJlIENvbnN0YW50cwotICAgICAgICBWZWN0b3I8V3JpdGVCYXJyaWVyPFJlZ0V4cD4+IG1fcmVn
ZXhwczsKLQotICAgICAgICAvLyBCdWZmZXJzIHVzZWQgZm9yIGxhcmdlIGFycmF5IGxpdGVyYWxz
Ci0gICAgICAgIFZlY3RvcjxDb25zdGFudEJ1ZmZlcj4gbV9jb25zdGFudEJ1ZmZlcnM7Ci0KLSAg
ICAgICAgLy8gSnVtcCBUYWJsZXMKLSAgICAgICAgVmVjdG9yPFVubGlua2VkU2ltcGxlSnVtcFRh
YmxlPiBtX3N3aXRjaEp1bXBUYWJsZXM7Ci0gICAgICAgIFZlY3RvcjxVbmxpbmtlZFN0cmluZ0p1
bXBUYWJsZT4gbV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzOwotCi0gICAgICAgIFZlY3RvcjxFeHBy
ZXNzaW9uUmFuZ2VJbmZvOjpGYXRQb3NpdGlvbj4gbV9leHByZXNzaW9uSW5mb0ZhdFBvc2l0aW9u
czsKLQotICAgICAgICBzdHJ1Y3QgVHlwZVByb2ZpbGVyRXhwcmVzc2lvblJhbmdlIHsKLSAgICAg
ICAgICAgIHVuc2lnbmVkIG1fc3RhcnREaXZvdDsKLSAgICAgICAgICAgIHVuc2lnbmVkIG1fZW5k
RGl2b3Q7Ci0gICAgICAgIH07Ci0gICAgICAgIEhhc2hNYXA8dW5zaWduZWQsIFR5cGVQcm9maWxl
ckV4cHJlc3Npb25SYW5nZT4gbV90eXBlUHJvZmlsZXJJbmZvTWFwOwotICAgICAgICBWZWN0b3I8
c2l6ZV90PiBtX29wUHJvZmlsZUNvbnRyb2xGbG93Qnl0ZWNvZGVPZmZzZXRzOwotICAgIH07Ci0K
LXByaXZhdGU6Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFJhcmVEYXRhPiBtX3JhcmVEYXRhOwotICAg
IFZlY3RvcjxFeHByZXNzaW9uUmFuZ2VJbmZvPiBtX2V4cHJlc3Npb25JbmZvOwotCi1wcm90ZWN0
ZWQ6Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYp
OwotICAgIHN0YXRpYyBzaXplX3QgZXN0aW1hdGVkU2l6ZShKU0NlbGwqKTsKLQotcHVibGljOgot
ICAgIERFQ0xBUkVfSU5GTzsKLX07Ci0KLWNsYXNzIFVubGlua2VkR2xvYmFsQ29kZUJsb2NrIDog
cHVibGljIFVubGlua2VkQ29kZUJsb2NrIHsKLXB1YmxpYzoKLSAgICB0eXBlZGVmIFVubGlua2Vk
Q29kZUJsb2NrIEJhc2U7Ci0KLXByb3RlY3RlZDoKLSAgICBVbmxpbmtlZEdsb2JhbENvZGVCbG9j
ayhWTSogdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBDb2RlVHlwZSBjb2RlVHlwZSwgY29uc3Qg
RXhlY3V0YWJsZUluZm8mIGluZm8sIERlYnVnZ2VyTW9kZSBkZWJ1Z2dlck1vZGUpCi0gICAgICAg
IDogQmFzZSh2bSwgc3RydWN0dXJlLCBjb2RlVHlwZSwgaW5mbywgZGVidWdnZXJNb2RlKQotICAg
IHsKLSAgICB9Ci0KLSAgICBERUNMQVJFX0lORk87Ci19OwotCi1jbGFzcyBVbmxpbmtlZFByb2dy
YW1Db2RlQmxvY2sgZmluYWwgOiBwdWJsaWMgVW5saW5rZWRHbG9iYWxDb2RlQmxvY2sgewotcHJp
dmF0ZToKLSAgICBmcmllbmQgY2xhc3MgQ29kZUNhY2hlOwotICAgIHN0YXRpYyBVbmxpbmtlZFBy
b2dyYW1Db2RlQmxvY2sqIGNyZWF0ZShWTSogdm0sIGNvbnN0IEV4ZWN1dGFibGVJbmZvJiBpbmZv
LCBEZWJ1Z2dlck1vZGUgZGVidWdnZXJNb2RlKQotICAgIHsKLSAgICAgICAgVW5saW5rZWRQcm9n
cmFtQ29kZUJsb2NrKiBpbnN0YW5jZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFVubGlu
a2VkUHJvZ3JhbUNvZGVCbG9jaz4odm0tPmhlYXApKSBVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2so
dm0sIHZtLT51bmxpbmtlZFByb2dyYW1Db2RlQmxvY2tTdHJ1Y3R1cmUuZ2V0KCksIGluZm8sIGRl
YnVnZ2VyTW9kZSk7Ci0gICAgICAgIGluc3RhbmNlLT5maW5pc2hDcmVhdGlvbigqdm0pOwotICAg
ICAgICByZXR1cm4gaW5zdGFuY2U7Ci0gICAgfQotCi1wdWJsaWM6Ci0gICAgdHlwZWRlZiBVbmxp
bmtlZEdsb2JhbENvZGVCbG9jayBCYXNlOwotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1
Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgU3RydWN0dXJlSXNJbW1vcnRhbDsK
LQotICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7Ci0KLSAgICB2b2lkIHNldFZhcmlh
YmxlRGVjbGFyYXRpb25zKGNvbnN0IFZhcmlhYmxlRW52aXJvbm1lbnQmIGVudmlyb25tZW50KSB7
IG1fdmFyRGVjbGFyYXRpb25zID0gZW52aXJvbm1lbnQ7IH0KLSAgICBjb25zdCBWYXJpYWJsZUVu
dmlyb25tZW50JiB2YXJpYWJsZURlY2xhcmF0aW9ucygpIGNvbnN0IHsgcmV0dXJuIG1fdmFyRGVj
bGFyYXRpb25zOyB9Ci0KLSAgICB2b2lkIHNldExleGljYWxEZWNsYXJhdGlvbnMoY29uc3QgVmFy
aWFibGVFbnZpcm9ubWVudCYgZW52aXJvbm1lbnQpIHsgbV9sZXhpY2FsRGVjbGFyYXRpb25zID0g
ZW52aXJvbm1lbnQ7IH0KLSAgICBjb25zdCBWYXJpYWJsZUVudmlyb25tZW50JiBsZXhpY2FsRGVj
bGFyYXRpb25zKCkgY29uc3QgeyByZXR1cm4gbV9sZXhpY2FsRGVjbGFyYXRpb25zOyB9Ci0KLSAg
ICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7Ci0KLXBy
aXZhdGU6Ci0gICAgVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrKFZNKiB2bSwgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUsIGNvbnN0IEV4ZWN1dGFibGVJbmZvJiBpbmZvLCBEZWJ1Z2dlck1vZGUgZGVidWdn
ZXJNb2RlKQotICAgICAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSwgR2xvYmFsQ29kZSwgaW5mbywg
ZGVidWdnZXJNb2RlKQotICAgIHsKLSAgICB9Ci0KLSAgICBWYXJpYWJsZUVudmlyb25tZW50IG1f
dmFyRGVjbGFyYXRpb25zOwotICAgIFZhcmlhYmxlRW52aXJvbm1lbnQgbV9sZXhpY2FsRGVjbGFy
YXRpb25zOwotCi1wdWJsaWM6Ci0gICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJl
KFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90bykKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBw
cm90bywgVHlwZUluZm8oVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrVHlwZSwgU3RydWN0dXJlRmxh
Z3MpLCBpbmZvKCkpOwotICAgIH0KLQotICAgIERFQ0xBUkVfSU5GTzsKLX07Ci0KLWNsYXNzIFVu
bGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayBmaW5hbCA6IHB1YmxpYyBVbmxpbmtlZEdsb2Jh
bENvZGVCbG9jayB7Ci1wcml2YXRlOgotICAgIGZyaWVuZCBjbGFzcyBDb2RlQ2FjaGU7Ci0gICAg
c3RhdGljIFVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayogY3JlYXRlKFZNKiB2bSwgY29u
c3QgRXhlY3V0YWJsZUluZm8mIGluZm8sIERlYnVnZ2VyTW9kZSBkZWJ1Z2dlck1vZGUpCi0gICAg
ewotICAgICAgICBVbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2sqIGluc3RhbmNlID0gbmV3
IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8VW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrPih2
bS0+aGVhcCkpIFVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayh2bSwgdm0tPnVubGlua2Vk
TW9kdWxlUHJvZ3JhbUNvZGVCbG9ja1N0cnVjdHVyZS5nZXQoKSwgaW5mbywgZGVidWdnZXJNb2Rl
KTsKLSAgICAgICAgaW5zdGFuY2UtPmZpbmlzaENyZWF0aW9uKCp2bSk7Ci0gICAgICAgIHJldHVy
biBpbnN0YW5jZTsKLSAgICB9Ci0KLXB1YmxpYzoKLSAgICB0eXBlZGVmIFVubGlua2VkR2xvYmFs
Q29kZUJsb2NrIEJhc2U7Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdz
ID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBTdHJ1Y3R1cmVJc0ltbW9ydGFsOwotCi0gICAgc3Rh
dGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKLQotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKLQotICAgIC8vIFRoaXMgb2Zmc2V0IHJlcHJlc2Vu
dHMgdGhlIGNvbnN0YW50IHJlZ2lzdGVyIG9mZnNldCB0byB0aGUgc3RvcmVkIHN5bWJvbCB0YWJs
ZSB0aGF0IHJlcHJlc2VudHMgdGhlIGxheW91dCBvZiB0aGUKLSAgICAvLyBtb2R1bGUgZW52aXJv
bm1lbnQuIFRoaXMgc3ltYm9sIHRhYmxlIGlzIGNyZWF0ZWQgYnkgdGhlIGJ5dGUgY29kZSBnZW5l
cmF0b3Igc2luY2UgdGhlIG1vZHVsZSBlbnZpcm9ubWVudCBpbmNsdWRlcwotICAgIC8vIHRoZSB0
b3AtbW9zdCBsZXhpY2FsIGNhcHR1cmVkIHZhcmlhYmxlcyBpbnNpZGUgdGhlIG1vZHVsZSBjb2Rl
LiBUaGlzIG1lYW5zIHRoYXQsIG9uY2UgdGhlIG1vZHVsZSBlbnZpcm9ubWVudCBpcwotICAgIC8v
IGFsbG9jYXRlZCBhbmQgaW5zdGFudGlhdGVkIGZyb20gdGhpcyBzeW1ib2wgdGFibGUsIGl0IGlz
IHRpdGVseSBjb3VwbGVkIHdpdGggdGhlIHNwZWNpZmljIHVubGlua2VkIG1vZHVsZSBwcm9ncmFt
Ci0gICAgLy8gY29kZSBibG9jayBhbmQgdGhlIHN0b3JlZCBzeW1ib2wgdGFibGUuIFNvIGJlZm9y
ZSBleGVjdXRpbmcgdGhlIG1vZHVsZSBjb2RlLCB3ZSBzaG91bGQgbm90IGNsZWFyIHRoZSB1bmxp
bmtlZCBtb2R1bGUKLSAgICAvLyBwcm9ncmFtIGNvZGUgYmxvY2sgaW4gdGhlIG1vZHVsZSBleGVj
dXRhYmxlLiBUaGlzIHJlcXVpcmVtZW50IGlzIG1ldCBiZWNhdXNlIHRoZSBnYXJiYWdlIGNvbGxl
Y3RvciBvbmx5IGNsZWFycwotICAgIC8vIHVubGlua2VkIGNvZGUgaW4gKDEpIHVubWFya2VkIGV4
ZWN1dGFibGVzIGFuZCAoMikgZnVuY3Rpb24gZXhlY3V0YWJsZXMuCi0gICAgLy8KLSAgICAvLyBT
aW5jZSB0aGUgZnVuY3Rpb24gY29kZSBtYXkgYmUgZXhlY3V0ZWQgcmVwZWF0ZWRseSBhbmQgdGhl
IGVudmlyb25tZW50IG9mIGVhY2ggZnVuY3Rpb24gZXhlY3V0aW9uIGlzIGRpZmZlcmVudCwKLSAg
ICAvLyB0aGUgZnVuY3Rpb24gY29kZSBuZWVkIHRvIGFsbG9jYXRlIGFuZCBpbnN0YW50aWF0ZSB0
aGUgZW52aXJvbm1lbnQgaW4gdGhlIHByb2xvZ3VlIG9mIHRoZSBmdW5jdGlvbiBjb2RlLiBPbiB0
aGUKLSAgICAvLyBvdGhlciBoYW5kLCB0aGUgbW9kdWxlIGNvZGUgaXMgZXhlY3V0ZWQgb25seSBv
bmNlLiBTbyB3ZSBjYW4gaW5zdGFudGlhdGUgdGhlIG1vZHVsZSBlbnZpcm9ubWVudCBvdXRzaWRl
IHRoZSBtb2R1bGUKLSAgICAvLyBjb2RlLiBBdCB0aGF0IHRpbWUsIHdlIGNvbnN0cnVjdCB0aGUg
bW9kdWxlIGVudmlyb25tZW50IGJ5IHVzaW5nIHRoZSBzeW1ib2wgdGFibGUgdGhhdCBpcyBoZWxk
IGJ5IHRoZSBtb2R1bGUgZXhlY3V0YWJsZS4KLSAgICAvLyBUaGUgc3ltYm9sIHRhYmxlIGhlbGQg
YnkgdGhlIGV4ZWN1dGFibGUgaXMgdGhlIGNsb25lZCBvbmUgZnJvbSBvbmUgaW4gdGhlIHVubGlu
a2VkIGNvZGUgYmxvY2suIEluc3RhbnRpYXRpbmcgdGhlIG1vZHVsZQotICAgIC8vIGVudmlyb25t
ZW50IGJlZm9yZSBleGVjdXRpbmcgYW5kIGxpbmtpbmcgdGhlIG1vZHVsZSBjb2RlIGlzIHJlcXVp
cmVkIHRvIGxpbmsgdGhlIGltcG9ydGVkIGJpbmRpbmdzIGJldHdlZW4gdGhlIG1vZHVsZXMuCi0g
ICAgLy8KLSAgICAvLyBUaGUgdW5saW5rZWQgbW9kdWxlIHByb2dyYW0gY29kZSBibG9jayBvbmx5
IGhvbGRzIHRoZSBwcmUtY2xvbmVkIHN5bWJvbCB0YWJsZSBpbiBpdHMgY29uc3RhbnQgcmVnaXN0
ZXIgcG9vbC4gSXQgZG9lcwotICAgIC8vIG5vdCBob2xkIHRoZSBpbnN0YW50aWF0ZWQgbW9kdWxl
IGVudmlyb25tZW50LiBTbyB3aGlsZSB0aGUgbW9kdWxlIGVudmlyb25tZW50IHJlcXVpcmVzIHRo
ZSBzcGVjaWZpYyB1bmxpbmtlZCBtb2R1bGUKLSAgICAvLyBwcm9ncmFtIGNvZGUgYmxvY2ssIHRo
ZSB1bmxpbmtlZCBtb2R1bGUgY29kZSBibG9jayBjYW4gYmUgdXNlZCBmb3IgdGhlIG1vZHVsZSBl
bnZpcm9ubWVudCBpbnN0YW50aWF0ZWQgZnJvbSB0aGlzCi0gICAgLy8gdW5saW5rZWQgY29kZSBi
bG9jay4gVGhlcmUgaXMgMTpOIHJlbGF0aW9uIGJldHdlZW4gdGhlIHVubGlua2VkIG1vZHVsZSBj
b2RlIGJsb2NrIGFuZCB0aGUgbW9kdWxlIGVudmlyb25tZW50cy4gU28gdGhlCi0gICAgLy8gdW5s
aW5rZWQgbW9kdWxlIHByb2dyYW0gY29kZSBibG9jayBjYW4gYmUgY2FjaGVkLgotICAgIC8vCi0g
ICAgLy8gT24gdGhlIG90aGVyIGhhbmQsIHRoZSBsaW5rZWQgY29kZSBibG9jayBmb3IgdGhlIG1v
ZHVsZSBlbnZpcm9ubWVudCBpbmNsdWRlcyB0aGUgcmVzb2x2ZWQgcmVmZXJlbmNlcyB0byB0aGUg
aW1wb3J0ZWQKLSAgICAvLyBiaW5kaW5ncy4gVGhlIGltcG9ydGVkIGJpbmRpbmcgcmVmZXJlbmNl
cyB0aGUgb3RoZXIgbW9kdWxlIGVudmlyb25tZW50LCBzbyB0aGUgbGlua2VkIGNvZGUgYmxvY2sg
aXMgdGl0bHkgY291cGxlZAotICAgIC8vIHdpdGggdGhlIHNwZWNpZmljIHNldCBvZiB0aGUgbW9k
dWxlIGVudmlyb25tZW50cy4gVGh1cywgdGhlIGxpbmtlZCBjb2RlIGJsb2NrIHNob3VsZCBub3Qg
YmUgY2FjaGVkLgotICAgIGludCBtb2R1bGVFbnZpcm9ubWVudFN5bWJvbFRhYmxlQ29uc3RhbnRS
ZWdpc3Rlck9mZnNldCgpIHsgcmV0dXJuIG1fbW9kdWxlRW52aXJvbm1lbnRTeW1ib2xUYWJsZUNv
bnN0YW50UmVnaXN0ZXJPZmZzZXQ7IH0KLSAgICB2b2lkIHNldE1vZHVsZUVudmlyb25tZW50U3lt
Ym9sVGFibGVDb25zdGFudFJlZ2lzdGVyT2Zmc2V0KGludCBvZmZzZXQpCi0gICAgewotICAgICAg
ICBtX21vZHVsZUVudmlyb25tZW50U3ltYm9sVGFibGVDb25zdGFudFJlZ2lzdGVyT2Zmc2V0ID0g
b2Zmc2V0OwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBVbmxpbmtlZE1vZHVsZVByb2dyYW1Db2Rl
QmxvY2soVk0qIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgRXhlY3V0YWJsZUluZm8m
IGluZm8sIERlYnVnZ2VyTW9kZSBkZWJ1Z2dlck1vZGUpCi0gICAgICAgIDogQmFzZSh2bSwgc3Ry
dWN0dXJlLCBNb2R1bGVDb2RlLCBpbmZvLCBkZWJ1Z2dlck1vZGUpCi0gICAgewotICAgIH0KLQot
ICAgIGludCBtX21vZHVsZUVudmlyb25tZW50U3ltYm9sVGFibGVDb25zdGFudFJlZ2lzdGVyT2Zm
c2V0IHsgMCB9OwotCi1wdWJsaWM6Ci0gICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0
dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90bykK
LSAgICB7Ci0gICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0
LCBwcm90bywgVHlwZUluZm8oVW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrVHlwZSwgU3Ry
dWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwotICAgIH0KLQotICAgIERFQ0xBUkVfSU5GTzsKLX07Ci0K
LWNsYXNzIFVubGlua2VkRXZhbENvZGVCbG9jayBmaW5hbCA6IHB1YmxpYyBVbmxpbmtlZEdsb2Jh
bENvZGVCbG9jayB7Ci1wcml2YXRlOgotICAgIGZyaWVuZCBjbGFzcyBDb2RlQ2FjaGU7Ci0KLSAg
ICBzdGF0aWMgVW5saW5rZWRFdmFsQ29kZUJsb2NrKiBjcmVhdGUoVk0qIHZtLCBjb25zdCBFeGVj
dXRhYmxlSW5mbyYgaW5mbywgRGVidWdnZXJNb2RlIGRlYnVnZ2VyTW9kZSkKLSAgICB7Ci0gICAg
ICAgIFVubGlua2VkRXZhbENvZGVCbG9jayogaW5zdGFuY2UgPSBuZXcgKE5vdE51bGwsIGFsbG9j
YXRlQ2VsbDxVbmxpbmtlZEV2YWxDb2RlQmxvY2s+KHZtLT5oZWFwKSkgVW5saW5rZWRFdmFsQ29k
ZUJsb2NrKHZtLCB2bS0+dW5saW5rZWRFdmFsQ29kZUJsb2NrU3RydWN0dXJlLmdldCgpLCBpbmZv
LCBkZWJ1Z2dlck1vZGUpOwotICAgICAgICBpbnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24oKnZtKTsK
LSAgICAgICAgcmV0dXJuIGluc3RhbmNlOwotICAgIH0KLQotcHVibGljOgotICAgIHR5cGVkZWYg
VW5saW5rZWRHbG9iYWxDb2RlQmxvY2sgQmFzZTsKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQg
U3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IFN0cnVjdHVyZUlzSW1tb3J0
YWw7Ci0KLSAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwotCi0gICAgY29uc3QgSWRl
bnRpZmllciYgdmFyaWFibGUodW5zaWduZWQgaW5kZXgpIHsgcmV0dXJuIG1fdmFyaWFibGVzW2lu
ZGV4XTsgfQotICAgIHVuc2lnbmVkIG51bVZhcmlhYmxlcygpIHsgcmV0dXJuIG1fdmFyaWFibGVz
LnNpemUoKTsgfQotICAgIHZvaWQgYWRvcHRWYXJpYWJsZXMoVmVjdG9yPElkZW50aWZpZXIsIDAs
IFVuc2FmZVZlY3Rvck92ZXJmbG93PiYgdmFyaWFibGVzKQotICAgIHsKLSAgICAgICAgQVNTRVJU
KG1fdmFyaWFibGVzLmlzRW1wdHkoKSk7Ci0gICAgICAgIG1fdmFyaWFibGVzLnN3YXAodmFyaWFi
bGVzKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgVW5saW5rZWRFdmFsQ29kZUJsb2NrKFZNKiB2
bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IEV4ZWN1dGFibGVJbmZvJiBpbmZvLCBEZWJ1
Z2dlck1vZGUgZGVidWdnZXJNb2RlKQotICAgICAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSwgRXZh
bENvZGUsIGluZm8sIGRlYnVnZ2VyTW9kZSkKLSAgICB7Ci0gICAgfQotCi0gICAgVmVjdG9yPElk
ZW50aWZpZXIsIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93PiBtX3ZhcmlhYmxlczsKLQotcHVibGlj
OgotICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG8pCi0gICAgewotICAgICAgICByZXR1
cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG8sIFR5cGVJbmZvKFVu
bGlua2VkRXZhbENvZGVCbG9ja1R5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKLSAgICB9
Ci0KLSAgICBERUNMQVJFX0lORk87Ci19OwotCiBjbGFzcyBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJs
b2NrIGZpbmFsIDogcHVibGljIFVubGlua2VkQ29kZUJsb2NrIHsKIHB1YmxpYzoKICAgICB0eXBl
ZGVmIFVubGlua2VkQ29kZUJsb2NrIEJhc2U7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5j
cHAJKHJldmlzaW9uIDIwODMwOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9V
bmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDYgKzM2
LDcgQEAKICNpbmNsdWRlICJQYXJzZXIuaCIKICNpbmNsdWRlICJTb3VyY2VQcm92aWRlci5oIgog
I2luY2x1ZGUgIlN0cnVjdHVyZS5oIgorI2luY2x1ZGUgIlVubGlua2VkRnVuY3Rpb25Db2RlQmxv
Y2suaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTExNiw2ICsxMTcsMTEgQEAgVW5saW5rZWRG
dW5jdGlvbkV4ZWN1dGFibGU6OlVubGlua2VkRnVuYwogICAgIG1fcGFyZW50U2NvcGVURFpWYXJp
YWJsZXMuc3dhcChwYXJlbnRTY29wZVREWlZhcmlhYmxlcyk7CiB9CiAKK3ZvaWQgVW5saW5rZWRG
dW5jdGlvbkV4ZWN1dGFibGU6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQoreworICAgIGpzQ2FzdDxV
bmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGNlbGwpLT5+VW5saW5rZWRGdW5jdGlvbkV4ZWN1
dGFibGUoKTsKK30KKwogdm9pZCBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6dmlzaXRDaGls
ZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFVubGlua2Vk
RnVuY3Rpb25FeGVjdXRhYmxlKiB0aGlzT2JqZWN0ID0ganNDYXN0PFVubGlua2VkRnVuY3Rpb25F
eGVjdXRhYmxlKj4oY2VsbCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
VW5saW5rZWRHbG9iYWxDb2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvVW5saW5rZWRHbG9iYWxDb2RlQmxvY2suaAkocmV2aXNpb24gMjA4MzA4
KQkoZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2su
aDoyMDgzMDgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRHbG9i
YWxDb2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY4NiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMi0yMDE2IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisK
KyNpbmNsdWRlICJCeXRlY29kZUNvbnZlbnRpb25zLmgiCisjaW5jbHVkZSAiQ29kZVNwZWNpYWxp
emF0aW9uS2luZC5oIgorI2luY2x1ZGUgIkNvZGVUeXBlLmgiCisjaW5jbHVkZSAiQ29uc3RydWN0
QWJpbGl0eS5oIgorI2luY2x1ZGUgIkV4cHJlc3Npb25SYW5nZUluZm8uaCIKKyNpbmNsdWRlICJI
YW5kbGVySW5mby5oIgorI2luY2x1ZGUgIklkZW50aWZpZXIuaCIKKyNpbmNsdWRlICJKU0NlbGwu
aCIKKyNpbmNsdWRlICJKU1N0cmluZy5oIgorI2luY2x1ZGUgIlBhcnNlck1vZGVzLmgiCisjaW5j
bHVkZSAiUmVnRXhwLmgiCisjaW5jbHVkZSAiU3BlY2lhbFBvaW50ZXIuaCIKKyNpbmNsdWRlICJV
bmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5oIgorI2luY2x1ZGUgIlZhcmlhYmxlRW52aXJvbm1l
bnQuaCIKKyNpbmNsdWRlICJWaXJ0dWFsUmVnaXN0ZXIuaCIKKyNpbmNsdWRlIDx3dGYvVHJpU3Rh
dGUuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFz
cyBCeXRlY29kZVJld3JpdGVyOworY2xhc3MgRGVidWdnZXI7CitjbGFzcyBGdW5jdGlvbkV4ZWN1
dGFibGU7CitjbGFzcyBQYXJzZXJFcnJvcjsKK2NsYXNzIFNjcmlwdEV4ZWN1dGFibGU7CitjbGFz
cyBTb3VyY2VDb2RlOworY2xhc3MgU291cmNlUHJvdmlkZXI7CitjbGFzcyBVbmxpbmtlZENvZGVC
bG9jazsKK2NsYXNzIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2s7CitjbGFzcyBVbmxpbmtlZEZ1
bmN0aW9uRXhlY3V0YWJsZTsKK2NsYXNzIFVubGlua2VkSW5zdHJ1Y3Rpb25TdHJlYW07CitzdHJ1
Y3QgRXhlY3V0YWJsZUluZm87CisKK3R5cGVkZWYgdW5zaWduZWQgVW5saW5rZWRWYWx1ZVByb2Zp
bGU7Cit0eXBlZGVmIHVuc2lnbmVkIFVubGlua2VkQXJyYXlQcm9maWxlOwordHlwZWRlZiB1bnNp
Z25lZCBVbmxpbmtlZEFycmF5QWxsb2NhdGlvblByb2ZpbGU7Cit0eXBlZGVmIHVuc2lnbmVkIFVu
bGlua2VkT2JqZWN0QWxsb2NhdGlvblByb2ZpbGU7Cit0eXBlZGVmIHVuc2lnbmVkIFVubGlua2Vk
TExJbnRDYWxsTGlua0luZm87CisKK3N0cnVjdCBVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZSB7Cisg
ICAgc3RydWN0IE9mZnNldExvY2F0aW9uIHsKKyAgICAgICAgaW50MzJfdCBicmFuY2hPZmZzZXQ7
CisgICAgfTsKKworICAgIHR5cGVkZWYgSGFzaE1hcDxSZWZQdHI8U3RyaW5nSW1wbD4sIE9mZnNl
dExvY2F0aW9uPiBTdHJpbmdPZmZzZXRUYWJsZTsKKyAgICBTdHJpbmdPZmZzZXRUYWJsZSBvZmZz
ZXRUYWJsZTsKKworICAgIGlubGluZSBpbnQzMl90IG9mZnNldEZvclZhbHVlKFN0cmluZ0ltcGwq
IHZhbHVlLCBpbnQzMl90IGRlZmF1bHRPZmZzZXQpCisgICAgeworICAgICAgICBTdHJpbmdPZmZz
ZXRUYWJsZTo6Y29uc3RfaXRlcmF0b3IgZW5kID0gb2Zmc2V0VGFibGUuZW5kKCk7CisgICAgICAg
IFN0cmluZ09mZnNldFRhYmxlOjpjb25zdF9pdGVyYXRvciBsb2MgPSBvZmZzZXRUYWJsZS5maW5k
KHZhbHVlKTsKKyAgICAgICAgaWYgKGxvYyA9PSBlbmQpCisgICAgICAgICAgICByZXR1cm4gZGVm
YXVsdE9mZnNldDsKKyAgICAgICAgcmV0dXJuIGxvYy0+dmFsdWUuYnJhbmNoT2Zmc2V0OworICAg
IH0KKworfTsKKworc3RydWN0IFVubGlua2VkU2ltcGxlSnVtcFRhYmxlIHsKKyAgICBWZWN0b3I8
aW50MzJfdD4gYnJhbmNoT2Zmc2V0czsKKyAgICBpbnQzMl90IG1pbjsKKworICAgIGludDMyX3Qg
b2Zmc2V0Rm9yVmFsdWUoaW50MzJfdCB2YWx1ZSwgaW50MzJfdCBkZWZhdWx0T2Zmc2V0KTsKKyAg
ICB2b2lkIGFkZChpbnQzMl90IGtleSwgaW50MzJfdCBvZmZzZXQpCisgICAgeworICAgICAgICBp
ZiAoIWJyYW5jaE9mZnNldHNba2V5XSkKKyAgICAgICAgICAgIGJyYW5jaE9mZnNldHNba2V5XSA9
IG9mZnNldDsKKyAgICB9Cit9OworCitzdHJ1Y3QgVW5saW5rZWRJbnN0cnVjdGlvbiB7CisgICAg
VW5saW5rZWRJbnN0cnVjdGlvbigpIHsgdS5vcGVyYW5kID0gMDsgfQorICAgIFVubGlua2VkSW5z
dHJ1Y3Rpb24oT3Bjb2RlSUQgb3Bjb2RlKSB7IHUub3Bjb2RlID0gb3Bjb2RlOyB9CisgICAgVW5s
aW5rZWRJbnN0cnVjdGlvbihpbnQgb3BlcmFuZCkgeyB1Lm9wZXJhbmQgPSBvcGVyYW5kOyB9Cisg
ICAgdW5pb24geworICAgICAgICBPcGNvZGVJRCBvcGNvZGU7CisgICAgICAgIGludDMyX3Qgb3Bl
cmFuZDsKKyAgICAgICAgdW5zaWduZWQgaW5kZXg7CisgICAgfSB1OworfTsKKworY2xhc3MgVW5s
aW5rZWRDb2RlQmxvY2sgOiBwdWJsaWMgSlNDZWxsIHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEpT
Q2VsbCBCYXNlOworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJh
c2U6OlN0cnVjdHVyZUZsYWdzOworCisgICAgc3RhdGljIGNvbnN0IGJvb2wgbmVlZHNEZXN0cnVj
dGlvbiA9IHRydWU7CisKKyAgICBlbnVtIHsgQ2FsbEZ1bmN0aW9uLCBBcHBseUZ1bmN0aW9uIH07
CisKKyAgICB0eXBlZGVmIFVubGlua2VkSW5zdHJ1Y3Rpb24gSW5zdHJ1Y3Rpb247CisgICAgdHlw
ZWRlZiBWZWN0b3I8VW5saW5rZWRJbnN0cnVjdGlvbiwgMCwgVW5zYWZlVmVjdG9yT3ZlcmZsb3c+
IFVucGFja2VkSW5zdHJ1Y3Rpb25zOworCisgICAgYm9vbCBpc0NvbnN0cnVjdG9yKCkgY29uc3Qg
eyByZXR1cm4gbV9pc0NvbnN0cnVjdG9yOyB9CisgICAgYm9vbCBpc1N0cmljdE1vZGUoKSBjb25z
dCB7IHJldHVybiBtX2lzU3RyaWN0TW9kZTsgfQorICAgIGJvb2wgdXNlc0V2YWwoKSBjb25zdCB7
IHJldHVybiBtX3VzZXNFdmFsOyB9CisgICAgU291cmNlUGFyc2VNb2RlIHBhcnNlTW9kZSgpIGNv
bnN0IHsgcmV0dXJuIG1fcGFyc2VNb2RlOyB9CisgICAgYm9vbCBpc0Fycm93RnVuY3Rpb24oKSBj
b25zdCB7IHJldHVybiBpc0Fycm93RnVuY3Rpb25QYXJzZU1vZGUocGFyc2VNb2RlKCkpOyB9Cisg
ICAgRGVyaXZlZENvbnRleHRUeXBlIGRlcml2ZWRDb250ZXh0VHlwZSgpIGNvbnN0IHsgcmV0dXJu
IHN0YXRpY19jYXN0PERlcml2ZWRDb250ZXh0VHlwZT4obV9kZXJpdmVkQ29udGV4dFR5cGUpOyB9
CisgICAgRXZhbENvbnRleHRUeXBlIGV2YWxDb250ZXh0VHlwZSgpIGNvbnN0IHsgcmV0dXJuIHN0
YXRpY19jYXN0PEV2YWxDb250ZXh0VHlwZT4obV9ldmFsQ29udGV4dFR5cGUpOyB9CisgICAgYm9v
bCBpc0Fycm93RnVuY3Rpb25Db250ZXh0KCkgY29uc3QgeyByZXR1cm4gbV9pc0Fycm93RnVuY3Rp
b25Db250ZXh0OyB9CisgICAgYm9vbCBpc0NsYXNzQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1f
aXNDbGFzc0NvbnRleHQ7IH0KKworICAgIHZvaWQgYWRkRXhwcmVzc2lvbkluZm8odW5zaWduZWQg
aW5zdHJ1Y3Rpb25PZmZzZXQsIGludCBkaXZvdCwKKyAgICAgICAgaW50IHN0YXJ0T2Zmc2V0LCBp
bnQgZW5kT2Zmc2V0LCB1bnNpZ25lZCBsaW5lLCB1bnNpZ25lZCBjb2x1bW4pOworCisgICAgdm9p
ZCBhZGRUeXBlUHJvZmlsZXJFeHByZXNzaW9uSW5mbyh1bnNpZ25lZCBpbnN0cnVjdGlvbk9mZnNl
dCwgdW5zaWduZWQgc3RhcnREaXZvdCwgdW5zaWduZWQgZW5kRGl2b3QpOworCisgICAgYm9vbCBo
YXNFeHByZXNzaW9uSW5mbygpIHsgcmV0dXJuIG1fZXhwcmVzc2lvbkluZm8uc2l6ZSgpOyB9Cisg
ICAgY29uc3QgVmVjdG9yPEV4cHJlc3Npb25SYW5nZUluZm8+JiBleHByZXNzaW9uSW5mbygpIHsg
cmV0dXJuIG1fZXhwcmVzc2lvbkluZm87IH0KKworICAgIC8vIFNwZWNpYWwgcmVnaXN0ZXJzCisg
ICAgdm9pZCBzZXRUaGlzUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHRoaXNSZWdpc3RlcikgeyBt
X3RoaXNSZWdpc3RlciA9IHRoaXNSZWdpc3RlcjsgfQorICAgIHZvaWQgc2V0U2NvcGVSZWdpc3Rl
cihWaXJ0dWFsUmVnaXN0ZXIgc2NvcGVSZWdpc3RlcikgeyBtX3Njb3BlUmVnaXN0ZXIgPSBzY29w
ZVJlZ2lzdGVyOyB9CisKKyAgICBib29sIHVzZXNHbG9iYWxPYmplY3QoKSBjb25zdCB7IHJldHVy
biBtX2dsb2JhbE9iamVjdFJlZ2lzdGVyLmlzVmFsaWQoKTsgfQorICAgIHZvaWQgc2V0R2xvYmFs
T2JqZWN0UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIGdsb2JhbE9iamVjdFJlZ2lzdGVyKSB7IG1f
Z2xvYmFsT2JqZWN0UmVnaXN0ZXIgPSBnbG9iYWxPYmplY3RSZWdpc3RlcjsgfQorICAgIFZpcnR1
YWxSZWdpc3RlciBnbG9iYWxPYmplY3RSZWdpc3RlcigpIGNvbnN0IHsgcmV0dXJuIG1fZ2xvYmFs
T2JqZWN0UmVnaXN0ZXI7IH0KKworICAgIC8vIFBhcmFtZXRlciBpbmZvcm1hdGlvbgorICAgIHZv
aWQgc2V0TnVtUGFyYW1ldGVycyhpbnQgbmV3VmFsdWUpIHsgbV9udW1QYXJhbWV0ZXJzID0gbmV3
VmFsdWU7IH0KKyAgICB2b2lkIGFkZFBhcmFtZXRlcigpIHsgbV9udW1QYXJhbWV0ZXJzKys7IH0K
KyAgICB1bnNpZ25lZCBudW1QYXJhbWV0ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9udW1QYXJhbWV0
ZXJzOyB9CisKKyAgICB1bnNpZ25lZCBhZGRSZWdFeHAoUmVnRXhwKiByKQorICAgIHsKKyAgICAg
ICAgY3JlYXRlUmFyZURhdGFJZk5lY2Vzc2FyeSgpOworICAgICAgICB1bnNpZ25lZCBzaXplID0g
bV9yYXJlRGF0YS0+bV9yZWdleHBzLnNpemUoKTsKKyAgICAgICAgbV9yYXJlRGF0YS0+bV9yZWdl
eHBzLmFwcGVuZChXcml0ZUJhcnJpZXI8UmVnRXhwPigqdm0oKSwgdGhpcywgcikpOworICAgICAg
ICByZXR1cm4gc2l6ZTsKKyAgICB9CisgICAgdW5zaWduZWQgbnVtYmVyT2ZSZWdFeHBzKCkgY29u
c3QKKyAgICB7CisgICAgICAgIGlmICghbV9yYXJlRGF0YSkKKyAgICAgICAgICAgIHJldHVybiAw
OworICAgICAgICByZXR1cm4gbV9yYXJlRGF0YS0+bV9yZWdleHBzLnNpemUoKTsKKyAgICB9Cisg
ICAgUmVnRXhwKiByZWdleHAoaW50IGluZGV4KSBjb25zdCB7IEFTU0VSVChtX3JhcmVEYXRhKTsg
cmV0dXJuIG1fcmFyZURhdGEtPm1fcmVnZXhwc1tpbmRleF0uZ2V0KCk7IH0KKworICAgIC8vIENv
bnN0YW50IFBvb2xzCisKKyAgICBzaXplX3QgbnVtYmVyT2ZJZGVudGlmaWVycygpIGNvbnN0IHsg
cmV0dXJuIG1faWRlbnRpZmllcnMuc2l6ZSgpOyB9CisgICAgdm9pZCBhZGRJZGVudGlmaWVyKGNv
bnN0IElkZW50aWZpZXImIGkpIHsgcmV0dXJuIG1faWRlbnRpZmllcnMuYXBwZW5kKGkpOyB9Cisg
ICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnRpZmllcihpbnQgaW5kZXgpIGNvbnN0IHsgcmV0dXJu
IG1faWRlbnRpZmllcnNbaW5kZXhdOyB9CisgICAgY29uc3QgVmVjdG9yPElkZW50aWZpZXI+JiBp
ZGVudGlmaWVycygpIGNvbnN0IHsgcmV0dXJuIG1faWRlbnRpZmllcnM7IH0KKworICAgIHVuc2ln
bmVkIGFkZENvbnN0YW50KEpTVmFsdWUgdiwgU291cmNlQ29kZVJlcHJlc2VudGF0aW9uIHNvdXJj
ZUNvZGVSZXByZXNlbnRhdGlvbiA9IFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6T3RoZXIpCisg
ICAgeworICAgICAgICB1bnNpZ25lZCByZXN1bHQgPSBtX2NvbnN0YW50UmVnaXN0ZXJzLnNpemUo
KTsKKyAgICAgICAgbV9jb25zdGFudFJlZ2lzdGVycy5hcHBlbmQoV3JpdGVCYXJyaWVyPFVua25v
d24+KCkpOworICAgICAgICBtX2NvbnN0YW50UmVnaXN0ZXJzLmxhc3QoKS5zZXQoKnZtKCksIHRo
aXMsIHYpOworICAgICAgICBtX2NvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbi5hcHBl
bmQoc291cmNlQ29kZVJlcHJlc2VudGF0aW9uKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAg
ICB9CisgICAgdW5zaWduZWQgYWRkQ29uc3RhbnQoTGlua1RpbWVDb25zdGFudCB0eXBlKQorICAg
IHsKKyAgICAgICAgdW5zaWduZWQgcmVzdWx0ID0gbV9jb25zdGFudFJlZ2lzdGVycy5zaXplKCk7
CisgICAgICAgIEFTU0VSVChyZXN1bHQpOworICAgICAgICB1bnNpZ25lZCBpbmRleCA9IHN0YXRp
Y19jYXN0PHVuc2lnbmVkPih0eXBlKTsKKyAgICAgICAgQVNTRVJUKGluZGV4IDwgTGlua1RpbWVD
b25zdGFudENvdW50KTsKKyAgICAgICAgbV9saW5rVGltZUNvbnN0YW50c1tpbmRleF0gPSByZXN1
bHQ7CisgICAgICAgIG1fY29uc3RhbnRSZWdpc3RlcnMuYXBwZW5kKFdyaXRlQmFycmllcjxVbmtu
b3duPigpKTsKKyAgICAgICAgbV9jb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24uYXBw
ZW5kKFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6T3RoZXIpOworICAgICAgICByZXR1cm4gcmVz
dWx0OworICAgIH0KKyAgICB1bnNpZ25lZCByZWdpc3RlckluZGV4Rm9yTGlua1RpbWVDb25zdGFu
dChMaW5rVGltZUNvbnN0YW50IHR5cGUpCisgICAgeworICAgICAgICB1bnNpZ25lZCBpbmRleCA9
IHN0YXRpY19jYXN0PHVuc2lnbmVkPih0eXBlKTsKKyAgICAgICAgQVNTRVJUKGluZGV4IDwgTGlu
a1RpbWVDb25zdGFudENvdW50KTsKKyAgICAgICAgcmV0dXJuIG1fbGlua1RpbWVDb25zdGFudHNb
aW5kZXhdOworICAgIH0KKyAgICBjb25zdCBWZWN0b3I8V3JpdGVCYXJyaWVyPFVua25vd24+PiYg
Y29uc3RhbnRSZWdpc3RlcnMoKSB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzOyB9CisgICAg
Y29uc3QgV3JpdGVCYXJyaWVyPFVua25vd24+JiBjb25zdGFudFJlZ2lzdGVyKGludCBpbmRleCkg
Y29uc3QgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tpbmRleCAtIEZpcnN0Q29uc3RhbnRS
ZWdpc3RlckluZGV4XTsgfQorICAgIEFMV0FZU19JTkxJTkUgYm9vbCBpc0NvbnN0YW50UmVnaXN0
ZXJJbmRleChpbnQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGluZGV4ID49IEZpcnN0Q29uc3RhbnRS
ZWdpc3RlckluZGV4OyB9CisgICAgY29uc3QgVmVjdG9yPFNvdXJjZUNvZGVSZXByZXNlbnRhdGlv
bj4mIGNvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbigpIHsgcmV0dXJuIG1fY29uc3Rh
bnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOyB9CisKKyAgICAvLyBKdW1wcworICAgIHNpemVf
dCBudW1iZXJPZkp1bXBUYXJnZXRzKCkgY29uc3QgeyByZXR1cm4gbV9qdW1wVGFyZ2V0cy5zaXpl
KCk7IH0KKyAgICB2b2lkIGFkZEp1bXBUYXJnZXQodW5zaWduZWQganVtcFRhcmdldCkgeyBtX2p1
bXBUYXJnZXRzLmFwcGVuZChqdW1wVGFyZ2V0KTsgfQorICAgIHVuc2lnbmVkIGp1bXBUYXJnZXQo
aW50IGluZGV4KSBjb25zdCB7IHJldHVybiBtX2p1bXBUYXJnZXRzW2luZGV4XTsgfQorICAgIHVu
c2lnbmVkIGxhc3RKdW1wVGFyZ2V0KCkgY29uc3QgeyByZXR1cm4gbV9qdW1wVGFyZ2V0cy5sYXN0
KCk7IH0KKworICAgIFVubGlua2VkSGFuZGxlckluZm8qIGhhbmRsZXJGb3JCeXRlY29kZU9mZnNl
dCh1bnNpZ25lZCBieXRlY29kZU9mZnNldCwgUmVxdWlyZWRIYW5kbGVyID0gUmVxdWlyZWRIYW5k
bGVyOjpBbnlIYW5kbGVyKTsKKyAgICBVbmxpbmtlZEhhbmRsZXJJbmZvKiBoYW5kbGVyRm9ySW5k
ZXgodW5zaWduZWQsIFJlcXVpcmVkSGFuZGxlciA9IFJlcXVpcmVkSGFuZGxlcjo6QW55SGFuZGxl
cik7CisKKyAgICBib29sIGlzQnVpbHRpbkZ1bmN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9pc0J1
aWx0aW5GdW5jdGlvbjsgfQorCisgICAgQ29uc3RydWN0b3JLaW5kIGNvbnN0cnVjdG9yS2luZCgp
IGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PENvbnN0cnVjdG9yS2luZD4obV9jb25zdHJ1Y3Rv
cktpbmQpOyB9CisgICAgU3VwZXJCaW5kaW5nIHN1cGVyQmluZGluZygpIGNvbnN0IHsgcmV0dXJu
IHN0YXRpY19jYXN0PFN1cGVyQmluZGluZz4obV9zdXBlckJpbmRpbmcpOyB9CisgICAgSlNQYXJz
ZXJTY3JpcHRNb2RlIHNjcmlwdE1vZGUoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxKU1Bh
cnNlclNjcmlwdE1vZGU+KG1fc2NyaXB0TW9kZSk7IH0KKworICAgIHZvaWQgc2hyaW5rVG9GaXQo
KQorICAgIHsKKyAgICAgICAgbV9qdW1wVGFyZ2V0cy5zaHJpbmtUb0ZpdCgpOworICAgICAgICBt
X2lkZW50aWZpZXJzLnNocmlua1RvRml0KCk7CisgICAgICAgIG1fY29uc3RhbnRSZWdpc3RlcnMu
c2hyaW5rVG9GaXQoKTsKKyAgICAgICAgbV9jb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRp
b24uc2hyaW5rVG9GaXQoKTsKKyAgICAgICAgbV9mdW5jdGlvbkRlY2xzLnNocmlua1RvRml0KCk7
CisgICAgICAgIG1fZnVuY3Rpb25FeHBycy5zaHJpbmtUb0ZpdCgpOworICAgICAgICBtX3Byb3Bl
cnR5QWNjZXNzSW5zdHJ1Y3Rpb25zLnNocmlua1RvRml0KCk7CisgICAgICAgIG1fZXhwcmVzc2lv
bkluZm8uc2hyaW5rVG9GaXQoKTsKKworICAgICAgICBpZiAobV9yYXJlRGF0YSkgeworICAgICAg
ICAgICAgbV9yYXJlRGF0YS0+bV9leGNlcHRpb25IYW5kbGVycy5zaHJpbmtUb0ZpdCgpOworICAg
ICAgICAgICAgbV9yYXJlRGF0YS0+bV9yZWdleHBzLnNocmlua1RvRml0KCk7CisgICAgICAgICAg
ICBtX3JhcmVEYXRhLT5tX2NvbnN0YW50QnVmZmVycy5zaHJpbmtUb0ZpdCgpOworICAgICAgICAg
ICAgbV9yYXJlRGF0YS0+bV9zd2l0Y2hKdW1wVGFibGVzLnNocmlua1RvRml0KCk7CisgICAgICAg
ICAgICBtX3JhcmVEYXRhLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMuc2hyaW5rVG9GaXQoKTsK
KyAgICAgICAgICAgIG1fcmFyZURhdGEtPm1fZXhwcmVzc2lvbkluZm9GYXRQb3NpdGlvbnMuc2hy
aW5rVG9GaXQoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgc2V0SW5zdHJ1Y3Rpb25z
KHN0ZDo6dW5pcXVlX3B0cjxVbmxpbmtlZEluc3RydWN0aW9uU3RyZWFtPik7CisgICAgY29uc3Qg
VW5saW5rZWRJbnN0cnVjdGlvblN0cmVhbSYgaW5zdHJ1Y3Rpb25zKCkgY29uc3Q7CisKKyAgICBp
bnQgbnVtQ2FsbGVlTG9jYWxzKCkgY29uc3QgeyByZXR1cm4gbV9udW1DYWxsZWVMb2NhbHM7IH0K
KworICAgIGludCBtX251bVZhcnM7CisgICAgaW50IG1fbnVtQ2FwdHVyZWRWYXJzOworICAgIGlu
dCBtX251bUNhbGxlZUxvY2FsczsKKworICAgIC8vIEp1bXAgVGFibGVzCisKKyAgICBzaXplX3Qg
bnVtYmVyT2ZTd2l0Y2hKdW1wVGFibGVzKCkgY29uc3QgeyByZXR1cm4gbV9yYXJlRGF0YSA/IG1f
cmFyZURhdGEtPm1fc3dpdGNoSnVtcFRhYmxlcy5zaXplKCkgOiAwOyB9CisgICAgVW5saW5rZWRT
aW1wbGVKdW1wVGFibGUmIGFkZFN3aXRjaEp1bXBUYWJsZSgpIHsgY3JlYXRlUmFyZURhdGFJZk5l
Y2Vzc2FyeSgpOyBtX3JhcmVEYXRhLT5tX3N3aXRjaEp1bXBUYWJsZXMuYXBwZW5kKFVubGlua2Vk
U2ltcGxlSnVtcFRhYmxlKCkpOyByZXR1cm4gbV9yYXJlRGF0YS0+bV9zd2l0Y2hKdW1wVGFibGVz
Lmxhc3QoKTsgfQorICAgIFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiBzd2l0Y2hKdW1wVGFibGUo
aW50IHRhYmxlSW5kZXgpIHsgQVNTRVJUKG1fcmFyZURhdGEpOyByZXR1cm4gbV9yYXJlRGF0YS0+
bV9zd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOyB9CisKKyAgICBzaXplX3QgbnVtYmVyT2ZT
dHJpbmdTd2l0Y2hKdW1wVGFibGVzKCkgY29uc3QgeyByZXR1cm4gbV9yYXJlRGF0YSA/IG1fcmFy
ZURhdGEtPm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcy5zaXplKCkgOiAwOyB9CisgICAgVW5saW5r
ZWRTdHJpbmdKdW1wVGFibGUmIGFkZFN0cmluZ1N3aXRjaEp1bXBUYWJsZSgpIHsgY3JlYXRlUmFy
ZURhdGFJZk5lY2Vzc2FyeSgpOyBtX3JhcmVEYXRhLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMu
YXBwZW5kKFVubGlua2VkU3RyaW5nSnVtcFRhYmxlKCkpOyByZXR1cm4gbV9yYXJlRGF0YS0+bV9z
dHJpbmdTd2l0Y2hKdW1wVGFibGVzLmxhc3QoKTsgfQorICAgIFVubGlua2VkU3RyaW5nSnVtcFRh
YmxlJiBzdHJpbmdTd2l0Y2hKdW1wVGFibGUoaW50IHRhYmxlSW5kZXgpIHsgQVNTRVJUKG1fcmFy
ZURhdGEpOyByZXR1cm4gbV9yYXJlRGF0YS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzW3RhYmxl
SW5kZXhdOyB9CisKKyAgICB1bnNpZ25lZCBhZGRGdW5jdGlvbkRlY2woVW5saW5rZWRGdW5jdGlv
bkV4ZWN1dGFibGUqIG4pCisgICAgeworICAgICAgICB1bnNpZ25lZCBzaXplID0gbV9mdW5jdGlv
bkRlY2xzLnNpemUoKTsKKyAgICAgICAgbV9mdW5jdGlvbkRlY2xzLmFwcGVuZChXcml0ZUJhcnJp
ZXI8VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU+KCkpOworICAgICAgICBtX2Z1bmN0aW9uRGVj
bHMubGFzdCgpLnNldCgqdm0oKSwgdGhpcywgbik7CisgICAgICAgIHJldHVybiBzaXplOworICAg
IH0KKyAgICBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb25EZWNsKGludCBpbmRl
eCkgeyByZXR1cm4gbV9mdW5jdGlvbkRlY2xzW2luZGV4XS5nZXQoKTsgfQorICAgIHNpemVfdCBu
dW1iZXJPZkZ1bmN0aW9uRGVjbHMoKSB7IHJldHVybiBtX2Z1bmN0aW9uRGVjbHMuc2l6ZSgpOyB9
CisgICAgdW5zaWduZWQgYWRkRnVuY3Rpb25FeHByKFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxl
KiBuKQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgc2l6ZSA9IG1fZnVuY3Rpb25FeHBycy5zaXpl
KCk7CisgICAgICAgIG1fZnVuY3Rpb25FeHBycy5hcHBlbmQoV3JpdGVCYXJyaWVyPFVubGlua2Vk
RnVuY3Rpb25FeGVjdXRhYmxlPigpKTsKKyAgICAgICAgbV9mdW5jdGlvbkV4cHJzLmxhc3QoKS5z
ZXQoKnZtKCksIHRoaXMsIG4pOworICAgICAgICByZXR1cm4gc2l6ZTsKKyAgICB9CisgICAgVW5s
aW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uRXhwcihpbnQgaW5kZXgpIHsgcmV0dXJu
IG1fZnVuY3Rpb25FeHByc1tpbmRleF0uZ2V0KCk7IH0KKyAgICBzaXplX3QgbnVtYmVyT2ZGdW5j
dGlvbkV4cHJzKCkgeyByZXR1cm4gbV9mdW5jdGlvbkV4cHJzLnNpemUoKTsgfQorCisgICAgLy8g
RXhjZXB0aW9uIGhhbmRsaW5nIHN1cHBvcnQKKyAgICBzaXplX3QgbnVtYmVyT2ZFeGNlcHRpb25I
YW5kbGVycygpIGNvbnN0IHsgcmV0dXJuIG1fcmFyZURhdGEgPyBtX3JhcmVEYXRhLT5tX2V4Y2Vw
dGlvbkhhbmRsZXJzLnNpemUoKSA6IDA7IH0KKyAgICB2b2lkIGFkZEV4Y2VwdGlvbkhhbmRsZXIo
Y29uc3QgVW5saW5rZWRIYW5kbGVySW5mbyYgaGFuZGxlcikgeyBjcmVhdGVSYXJlRGF0YUlmTmVj
ZXNzYXJ5KCk7IHJldHVybiBtX3JhcmVEYXRhLT5tX2V4Y2VwdGlvbkhhbmRsZXJzLmFwcGVuZCho
YW5kbGVyKTsgfQorICAgIFVubGlua2VkSGFuZGxlckluZm8mIGV4Y2VwdGlvbkhhbmRsZXIoaW50
IGluZGV4KSB7IEFTU0VSVChtX3JhcmVEYXRhKTsgcmV0dXJuIG1fcmFyZURhdGEtPm1fZXhjZXB0
aW9uSGFuZGxlcnNbaW5kZXhdOyB9CisKKyAgICBVbmxpbmtlZEFycmF5UHJvZmlsZSBhZGRBcnJh
eVByb2ZpbGUoKSB7IHJldHVybiBtX2FycmF5UHJvZmlsZUNvdW50Kys7IH0KKyAgICB1bnNpZ25l
ZCBudW1iZXJPZkFycmF5UHJvZmlsZXMoKSB7IHJldHVybiBtX2FycmF5UHJvZmlsZUNvdW50OyB9
CisgICAgVW5saW5rZWRBcnJheUFsbG9jYXRpb25Qcm9maWxlIGFkZEFycmF5QWxsb2NhdGlvblBy
b2ZpbGUoKSB7IHJldHVybiBtX2FycmF5QWxsb2NhdGlvblByb2ZpbGVDb3VudCsrOyB9CisgICAg
dW5zaWduZWQgbnVtYmVyT2ZBcnJheUFsbG9jYXRpb25Qcm9maWxlcygpIHsgcmV0dXJuIG1fYXJy
YXlBbGxvY2F0aW9uUHJvZmlsZUNvdW50OyB9CisgICAgVW5saW5rZWRPYmplY3RBbGxvY2F0aW9u
UHJvZmlsZSBhZGRPYmplY3RBbGxvY2F0aW9uUHJvZmlsZSgpIHsgcmV0dXJuIG1fb2JqZWN0QWxs
b2NhdGlvblByb2ZpbGVDb3VudCsrOyB9CisgICAgdW5zaWduZWQgbnVtYmVyT2ZPYmplY3RBbGxv
Y2F0aW9uUHJvZmlsZXMoKSB7IHJldHVybiBtX29iamVjdEFsbG9jYXRpb25Qcm9maWxlQ291bnQ7
IH0KKyAgICBVbmxpbmtlZFZhbHVlUHJvZmlsZSBhZGRWYWx1ZVByb2ZpbGUoKSB7IHJldHVybiBt
X3ZhbHVlUHJvZmlsZUNvdW50Kys7IH0KKyAgICB1bnNpZ25lZCBudW1iZXJPZlZhbHVlUHJvZmls
ZXMoKSB7IHJldHVybiBtX3ZhbHVlUHJvZmlsZUNvdW50OyB9CisKKyAgICBVbmxpbmtlZExMSW50
Q2FsbExpbmtJbmZvIGFkZExMSW50Q2FsbExpbmtJbmZvKCkgeyByZXR1cm4gbV9sbGludENhbGxM
aW5rSW5mb0NvdW50Kys7IH0KKyAgICB1bnNpZ25lZCBudW1iZXJPZkxMaW50Q2FsbExpbmtJbmZv
cygpIHsgcmV0dXJuIG1fbGxpbnRDYWxsTGlua0luZm9Db3VudDsgfQorCisgICAgQ29kZVR5cGUg
Y29kZVR5cGUoKSBjb25zdCB7IHJldHVybiBtX2NvZGVUeXBlOyB9CisKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgdGhpc1JlZ2lzdGVyKCkgY29uc3QgeyByZXR1cm4gbV90aGlzUmVnaXN0ZXI7IH0KKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGVSZWdpc3RlcigpIGNvbnN0IHsgcmV0dXJuIG1fc2NvcGVS
ZWdpc3RlcjsgfQorCisgICAgdm9pZCBhZGRQcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uKHVuc2ln
bmVkIHByb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb24pCisgICAgeworICAgICAgICBtX3Byb3BlcnR5
QWNjZXNzSW5zdHJ1Y3Rpb25zLmFwcGVuZChwcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uKTsKKyAg
ICB9CisKKyAgICBzaXplX3QgbnVtYmVyT2ZQcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9ucygpIGNv
bnN0IHsgcmV0dXJuIG1fcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbnMuc2l6ZSgpOyB9CisgICAg
Y29uc3QgVmVjdG9yPHVuc2lnbmVkPiYgcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbnMoKSBjb25z
dCB7IHJldHVybiBtX3Byb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25zOyB9CisKKyAgICB0eXBlZGVm
IFZlY3RvcjxKU1ZhbHVlPiBDb25zdGFudEJ1ZmZlcjsKKworICAgIHNpemVfdCBjb25zdGFudEJ1
ZmZlckNvdW50KCkgeyBBU1NFUlQobV9yYXJlRGF0YSk7IHJldHVybiBtX3JhcmVEYXRhLT5tX2Nv
bnN0YW50QnVmZmVycy5zaXplKCk7IH0KKyAgICB1bnNpZ25lZCBhZGRDb25zdGFudEJ1ZmZlcih1
bnNpZ25lZCBsZW5ndGgpCisgICAgeworICAgICAgICBjcmVhdGVSYXJlRGF0YUlmTmVjZXNzYXJ5
KCk7CisgICAgICAgIHVuc2lnbmVkIHNpemUgPSBtX3JhcmVEYXRhLT5tX2NvbnN0YW50QnVmZmVy
cy5zaXplKCk7CisgICAgICAgIG1fcmFyZURhdGEtPm1fY29uc3RhbnRCdWZmZXJzLmFwcGVuZChW
ZWN0b3I8SlNWYWx1ZT4obGVuZ3RoKSk7CisgICAgICAgIHJldHVybiBzaXplOworICAgIH0KKwor
ICAgIGNvbnN0IENvbnN0YW50QnVmZmVyJiBjb25zdGFudEJ1ZmZlcih1bnNpZ25lZCBpbmRleCkg
Y29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChtX3JhcmVEYXRhKTsKKyAgICAgICAgcmV0dXJu
IG1fcmFyZURhdGEtPm1fY29uc3RhbnRCdWZmZXJzW2luZGV4XTsKKyAgICB9CisKKyAgICBDb25z
dGFudEJ1ZmZlciYgY29uc3RhbnRCdWZmZXIodW5zaWduZWQgaW5kZXgpCisgICAgeworICAgICAg
ICBBU1NFUlQobV9yYXJlRGF0YSk7CisgICAgICAgIHJldHVybiBtX3JhcmVEYXRhLT5tX2NvbnN0
YW50QnVmZmVyc1tpbmRleF07CisgICAgfQorCisgICAgYm9vbCBoYXNSYXJlRGF0YSgpIGNvbnN0
IHsgcmV0dXJuIG1fcmFyZURhdGEuZ2V0KCk7IH0KKworICAgIGludCBsaW5lTnVtYmVyRm9yQnl0
ZWNvZGVPZmZzZXQodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQpOworCisgICAgdm9pZCBleHByZXNz
aW9uUmFuZ2VGb3JCeXRlY29kZU9mZnNldCh1bnNpZ25lZCBieXRlY29kZU9mZnNldCwgaW50JiBk
aXZvdCwKKyAgICAgICAgaW50JiBzdGFydE9mZnNldCwgaW50JiBlbmRPZmZzZXQsIHVuc2lnbmVk
JiBsaW5lLCB1bnNpZ25lZCYgY29sdW1uKSBjb25zdDsKKworICAgIGJvb2wgdHlwZVByb2ZpbGVy
RXhwcmVzc2lvbkluZm9Gb3JCeXRlY29kZU9mZnNldCh1bnNpZ25lZCBieXRlY29kZU9mZnNldCwg
dW5zaWduZWQmIHN0YXJ0RGl2b3QsIHVuc2lnbmVkJiBlbmREaXZvdCk7CisKKyAgICB2b2lkIHJl
Y29yZFBhcnNlKENvZGVGZWF0dXJlcyBmZWF0dXJlcywgYm9vbCBoYXNDYXB0dXJlZFZhcmlhYmxl
cywgdW5zaWduZWQgZmlyc3RMaW5lLCB1bnNpZ25lZCBsaW5lQ291bnQsIHVuc2lnbmVkIGVuZENv
bHVtbikKKyAgICB7CisgICAgICAgIG1fZmVhdHVyZXMgPSBmZWF0dXJlczsKKyAgICAgICAgbV9o
YXNDYXB0dXJlZFZhcmlhYmxlcyA9IGhhc0NhcHR1cmVkVmFyaWFibGVzOworICAgICAgICBtX2Zp
cnN0TGluZSA9IGZpcnN0TGluZTsKKyAgICAgICAgbV9saW5lQ291bnQgPSBsaW5lQ291bnQ7Cisg
ICAgICAgIC8vIEZvciB0aGUgVW5saW5rZWRDb2RlQmxvY2ssIHN0YXJ0Q29sdW1uIGlzIGFsd2F5
cyAwLgorICAgICAgICBtX2VuZENvbHVtbiA9IGVuZENvbHVtbjsKKyAgICB9CisKKyAgICBjb25z
dCBTdHJpbmcmIHNvdXJjZVVSTERpcmVjdGl2ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlVVJM
RGlyZWN0aXZlOyB9CisgICAgY29uc3QgU3RyaW5nJiBzb3VyY2VNYXBwaW5nVVJMRGlyZWN0aXZl
KCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2VNYXBwaW5nVVJMRGlyZWN0aXZlOyB9CisgICAgdm9p
ZCBzZXRTb3VyY2VVUkxEaXJlY3RpdmUoY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwpIHsgbV9zb3Vy
Y2VVUkxEaXJlY3RpdmUgPSBzb3VyY2VVUkw7IH0KKyAgICB2b2lkIHNldFNvdXJjZU1hcHBpbmdV
UkxEaXJlY3RpdmUoY29uc3QgU3RyaW5nJiBzb3VyY2VNYXBwaW5nVVJMKSB7IG1fc291cmNlTWFw
cGluZ1VSTERpcmVjdGl2ZSA9IHNvdXJjZU1hcHBpbmdVUkw7IH0KKworICAgIENvZGVGZWF0dXJl
cyBjb2RlRmVhdHVyZXMoKSBjb25zdCB7IHJldHVybiBtX2ZlYXR1cmVzOyB9CisgICAgYm9vbCBo
YXNDYXB0dXJlZFZhcmlhYmxlcygpIGNvbnN0IHsgcmV0dXJuIG1faGFzQ2FwdHVyZWRWYXJpYWJs
ZXM7IH0KKyAgICB1bnNpZ25lZCBmaXJzdExpbmUoKSBjb25zdCB7IHJldHVybiBtX2ZpcnN0TGlu
ZTsgfQorICAgIHVuc2lnbmVkIGxpbmVDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fbGluZUNvdW50
OyB9CisgICAgQUxXQVlTX0lOTElORSB1bnNpZ25lZCBzdGFydENvbHVtbigpIGNvbnN0IHsgcmV0
dXJuIDA7IH0KKyAgICB1bnNpZ25lZCBlbmRDb2x1bW4oKSBjb25zdCB7IHJldHVybiBtX2VuZENv
bHVtbjsgfQorCisgICAgdm9pZCBhZGRPcFByb2ZpbGVDb250cm9sRmxvd0J5dGVjb2RlT2Zmc2V0
KHNpemVfdCBvZmZzZXQpCisgICAgeworICAgICAgICBjcmVhdGVSYXJlRGF0YUlmTmVjZXNzYXJ5
KCk7CisgICAgICAgIG1fcmFyZURhdGEtPm1fb3BQcm9maWxlQ29udHJvbEZsb3dCeXRlY29kZU9m
ZnNldHMuYXBwZW5kKG9mZnNldCk7CisgICAgfQorICAgIGNvbnN0IFZlY3RvcjxzaXplX3Q+JiBv
cFByb2ZpbGVDb250cm9sRmxvd0J5dGVjb2RlT2Zmc2V0cygpIGNvbnN0CisgICAgeworICAgICAg
ICBBU1NFUlQobV9yYXJlRGF0YSk7CisgICAgICAgIHJldHVybiBtX3JhcmVEYXRhLT5tX29wUHJv
ZmlsZUNvbnRyb2xGbG93Qnl0ZWNvZGVPZmZzZXRzOworICAgIH0KKyAgICBib29sIGhhc09wUHJv
ZmlsZUNvbnRyb2xGbG93Qnl0ZWNvZGVPZmZzZXRzKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiBtX3JhcmVEYXRhICYmICFtX3JhcmVEYXRhLT5tX29wUHJvZmlsZUNvbnRyb2xGbG93Qnl0
ZWNvZGVPZmZzZXRzLmlzRW1wdHkoKTsKKyAgICB9CisKKyAgICB2b2lkIGR1bXBFeHByZXNzaW9u
UmFuZ2VJbmZvKCk7IC8vIEZvciBkZWJ1Z2dpbmcgcHVycG9zZSBvbmx5LgorCisgICAgYm9vbCB3
YXNDb21waWxlZFdpdGhEZWJ1Z2dpbmdPcGNvZGVzKCkgY29uc3QgeyByZXR1cm4gbV93YXNDb21w
aWxlZFdpdGhEZWJ1Z2dpbmdPcGNvZGVzOyB9CisKKyAgICBUcmlTdGF0ZSBkaWRPcHRpbWl6ZSgp
IGNvbnN0IHsgcmV0dXJuIG1fZGlkT3B0aW1pemU7IH0KKyAgICB2b2lkIHNldERpZE9wdGltaXpl
KFRyaVN0YXRlIGRpZE9wdGltaXplKSB7IG1fZGlkT3B0aW1pemUgPSBkaWRPcHRpbWl6ZTsgfQor
Citwcm90ZWN0ZWQ6CisgICAgVW5saW5rZWRDb2RlQmxvY2soVk0qLCBTdHJ1Y3R1cmUqLCBDb2Rl
VHlwZSwgY29uc3QgRXhlY3V0YWJsZUluZm8mLCBEZWJ1Z2dlck1vZGUpOworICAgIH5Vbmxpbmtl
ZENvZGVCbG9jaygpOworCisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYgdm0pCisgICAgewor
ICAgICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CisgICAgfQorCitwcml2YXRlOgorICAg
IGZyaWVuZCBjbGFzcyBCeXRlY29kZVJld3JpdGVyOworICAgIHZvaWQgYXBwbHlNb2RpZmljYXRp
b24oQnl0ZWNvZGVSZXdyaXRlciYpOworCisgICAgdm9pZCBjcmVhdGVSYXJlRGF0YUlmTmVjZXNz
YXJ5KCkKKyAgICB7CisgICAgICAgIGlmICghbV9yYXJlRGF0YSkKKyAgICAgICAgICAgIG1fcmFy
ZURhdGEgPSBzdGQ6Om1ha2VfdW5pcXVlPFJhcmVEYXRhPigpOworICAgIH0KKworICAgIHZvaWQg
Z2V0TGluZUFuZENvbHVtbihjb25zdCBFeHByZXNzaW9uUmFuZ2VJbmZvJiwgdW5zaWduZWQmIGxp
bmUsIHVuc2lnbmVkJiBjb2x1bW4pIGNvbnN0OworCisgICAgaW50IG1fbnVtUGFyYW1ldGVyczsK
KworICAgIHN0ZDo6dW5pcXVlX3B0cjxVbmxpbmtlZEluc3RydWN0aW9uU3RyZWFtPiBtX3VubGlu
a2VkSW5zdHJ1Y3Rpb25zOworCisgICAgVmlydHVhbFJlZ2lzdGVyIG1fdGhpc1JlZ2lzdGVyOwor
ICAgIFZpcnR1YWxSZWdpc3RlciBtX3Njb3BlUmVnaXN0ZXI7CisgICAgVmlydHVhbFJlZ2lzdGVy
IG1fZ2xvYmFsT2JqZWN0UmVnaXN0ZXI7CisKKyAgICBTdHJpbmcgbV9zb3VyY2VVUkxEaXJlY3Rp
dmU7CisgICAgU3RyaW5nIG1fc291cmNlTWFwcGluZ1VSTERpcmVjdGl2ZTsKKworICAgIHVuc2ln
bmVkIG1fdXNlc0V2YWwgOiAxOworICAgIHVuc2lnbmVkIG1faXNTdHJpY3RNb2RlIDogMTsKKyAg
ICB1bnNpZ25lZCBtX2lzQ29uc3RydWN0b3IgOiAxOworICAgIHVuc2lnbmVkIG1faGFzQ2FwdHVy
ZWRWYXJpYWJsZXMgOiAxOworICAgIHVuc2lnbmVkIG1faXNCdWlsdGluRnVuY3Rpb24gOiAxOwor
ICAgIHVuc2lnbmVkIG1fc3VwZXJCaW5kaW5nIDogMTsKKyAgICB1bnNpZ25lZCBtX3NjcmlwdE1v
ZGU6IDE7CisgICAgdW5zaWduZWQgbV9pc0Fycm93RnVuY3Rpb25Db250ZXh0IDogMTsKKyAgICB1
bnNpZ25lZCBtX2lzQ2xhc3NDb250ZXh0IDogMTsKKyAgICB1bnNpZ25lZCBtX3dhc0NvbXBpbGVk
V2l0aERlYnVnZ2luZ09wY29kZXMgOiAxOworICAgIHVuc2lnbmVkIG1fY29uc3RydWN0b3JLaW5k
IDogMjsKKyAgICB1bnNpZ25lZCBtX2Rlcml2ZWRDb250ZXh0VHlwZSA6IDI7CisgICAgdW5zaWdu
ZWQgbV9ldmFsQ29udGV4dFR5cGUgOiAyOworICAgIHVuc2lnbmVkIG1fZmlyc3RMaW5lOworICAg
IHVuc2lnbmVkIG1fbGluZUNvdW50OworICAgIHVuc2lnbmVkIG1fZW5kQ29sdW1uOworCisgICAg
VHJpU3RhdGUgbV9kaWRPcHRpbWl6ZTsKKyAgICBTb3VyY2VQYXJzZU1vZGUgbV9wYXJzZU1vZGU7
CisgICAgQ29kZUZlYXR1cmVzIG1fZmVhdHVyZXM7CisgICAgQ29kZVR5cGUgbV9jb2RlVHlwZTsK
KworICAgIFZlY3Rvcjx1bnNpZ25lZD4gbV9qdW1wVGFyZ2V0czsKKworICAgIFZlY3Rvcjx1bnNp
Z25lZD4gbV9wcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uczsKKworICAgIC8vIENvbnN0YW50IFBv
b2xzCisgICAgVmVjdG9yPElkZW50aWZpZXI+IG1faWRlbnRpZmllcnM7CisgICAgVmVjdG9yPFdy
aXRlQmFycmllcjxVbmtub3duPj4gbV9jb25zdGFudFJlZ2lzdGVyczsKKyAgICBWZWN0b3I8U291
cmNlQ29kZVJlcHJlc2VudGF0aW9uPiBtX2NvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlv
bjsKKyAgICB0eXBlZGVmIFZlY3RvcjxXcml0ZUJhcnJpZXI8VW5saW5rZWRGdW5jdGlvbkV4ZWN1
dGFibGU+PiBGdW5jdGlvbkV4cHJlc3Npb25WZWN0b3I7CisgICAgRnVuY3Rpb25FeHByZXNzaW9u
VmVjdG9yIG1fZnVuY3Rpb25EZWNsczsKKyAgICBGdW5jdGlvbkV4cHJlc3Npb25WZWN0b3IgbV9m
dW5jdGlvbkV4cHJzOworICAgIHN0ZDo6YXJyYXk8dW5zaWduZWQsIExpbmtUaW1lQ29uc3RhbnRD
b3VudD4gbV9saW5rVGltZUNvbnN0YW50czsKKworICAgIHVuc2lnbmVkIG1fYXJyYXlQcm9maWxl
Q291bnQ7CisgICAgdW5zaWduZWQgbV9hcnJheUFsbG9jYXRpb25Qcm9maWxlQ291bnQ7CisgICAg
dW5zaWduZWQgbV9vYmplY3RBbGxvY2F0aW9uUHJvZmlsZUNvdW50OworICAgIHVuc2lnbmVkIG1f
dmFsdWVQcm9maWxlQ291bnQ7CisgICAgdW5zaWduZWQgbV9sbGludENhbGxMaW5rSW5mb0NvdW50
OworCitwdWJsaWM6CisgICAgc3RydWN0IFJhcmVEYXRhIHsKKyAgICAgICAgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7CisgICAgcHVibGljOgorICAgICAgICBWZWN0b3I8VW5saW5rZWRIYW5kbGVy
SW5mbz4gbV9leGNlcHRpb25IYW5kbGVyczsKKworICAgICAgICAvLyBSYXJlIENvbnN0YW50cwor
ICAgICAgICBWZWN0b3I8V3JpdGVCYXJyaWVyPFJlZ0V4cD4+IG1fcmVnZXhwczsKKworICAgICAg
ICAvLyBCdWZmZXJzIHVzZWQgZm9yIGxhcmdlIGFycmF5IGxpdGVyYWxzCisgICAgICAgIFZlY3Rv
cjxDb25zdGFudEJ1ZmZlcj4gbV9jb25zdGFudEJ1ZmZlcnM7CisKKyAgICAgICAgLy8gSnVtcCBU
YWJsZXMKKyAgICAgICAgVmVjdG9yPFVubGlua2VkU2ltcGxlSnVtcFRhYmxlPiBtX3N3aXRjaEp1
bXBUYWJsZXM7CisgICAgICAgIFZlY3RvcjxVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZT4gbV9zdHJp
bmdTd2l0Y2hKdW1wVGFibGVzOworCisgICAgICAgIFZlY3RvcjxFeHByZXNzaW9uUmFuZ2VJbmZv
OjpGYXRQb3NpdGlvbj4gbV9leHByZXNzaW9uSW5mb0ZhdFBvc2l0aW9uczsKKworICAgICAgICBz
dHJ1Y3QgVHlwZVByb2ZpbGVyRXhwcmVzc2lvblJhbmdlIHsKKyAgICAgICAgICAgIHVuc2lnbmVk
IG1fc3RhcnREaXZvdDsKKyAgICAgICAgICAgIHVuc2lnbmVkIG1fZW5kRGl2b3Q7CisgICAgICAg
IH07CisgICAgICAgIEhhc2hNYXA8dW5zaWduZWQsIFR5cGVQcm9maWxlckV4cHJlc3Npb25SYW5n
ZT4gbV90eXBlUHJvZmlsZXJJbmZvTWFwOworICAgICAgICBWZWN0b3I8c2l6ZV90PiBtX29wUHJv
ZmlsZUNvbnRyb2xGbG93Qnl0ZWNvZGVPZmZzZXRzOworICAgIH07CisKK3ByaXZhdGU6CisgICAg
c3RkOjp1bmlxdWVfcHRyPFJhcmVEYXRhPiBtX3JhcmVEYXRhOworICAgIFZlY3RvcjxFeHByZXNz
aW9uUmFuZ2VJbmZvPiBtX2V4cHJlc3Npb25JbmZvOworCitwcm90ZWN0ZWQ6CisgICAgc3RhdGlj
IHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIHN0YXRpYyBz
aXplX3QgZXN0aW1hdGVkU2l6ZShKU0NlbGwqKTsKKworcHVibGljOgorICAgIERFQ0xBUkVfSU5G
TzsKK307CisKK2NsYXNzIFVubGlua2VkR2xvYmFsQ29kZUJsb2NrIDogcHVibGljIFVubGlua2Vk
Q29kZUJsb2NrIHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIFVubGlua2VkQ29kZUJsb2NrIEJhc2U7
CisKK3Byb3RlY3RlZDoKKyAgICBVbmxpbmtlZEdsb2JhbENvZGVCbG9jayhWTSogdm0sIFN0cnVj
dHVyZSogc3RydWN0dXJlLCBDb2RlVHlwZSBjb2RlVHlwZSwgY29uc3QgRXhlY3V0YWJsZUluZm8m
IGluZm8sIERlYnVnZ2VyTW9kZSBkZWJ1Z2dlck1vZGUpCisgICAgICAgIDogQmFzZSh2bSwgc3Ry
dWN0dXJlLCBjb2RlVHlwZSwgaW5mbywgZGVidWdnZXJNb2RlKQorICAgIHsKKyAgICB9CisKKyAg
ICBERUNMQVJFX0lORk87Cit9OworCitjbGFzcyBVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2sgZmlu
YWwgOiBwdWJsaWMgVW5saW5rZWRHbG9iYWxDb2RlQmxvY2sgeworcHJpdmF0ZToKKyAgICBmcmll
bmQgY2xhc3MgQ29kZUNhY2hlOworICAgIHN0YXRpYyBVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2sq
IGNyZWF0ZShWTSogdm0sIGNvbnN0IEV4ZWN1dGFibGVJbmZvJiBpbmZvLCBEZWJ1Z2dlck1vZGUg
ZGVidWdnZXJNb2RlKQorICAgIHsKKyAgICAgICAgVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrKiBp
bnN0YW5jZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFVubGlua2VkUHJvZ3JhbUNvZGVC
bG9jaz4odm0tPmhlYXApKSBVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2sodm0sIHZtLT51bmxpbmtl
ZFByb2dyYW1Db2RlQmxvY2tTdHJ1Y3R1cmUuZ2V0KCksIGluZm8sIGRlYnVnZ2VyTW9kZSk7Cisg
ICAgICAgIGluc3RhbmNlLT5maW5pc2hDcmVhdGlvbigqdm0pOworICAgICAgICByZXR1cm4gaW5z
dGFuY2U7CisgICAgfQorCitwdWJsaWM6CisgICAgdHlwZWRlZiBVbmxpbmtlZEdsb2JhbENvZGVC
bG9jayBCYXNlOworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJh
c2U6OlN0cnVjdHVyZUZsYWdzIHwgU3RydWN0dXJlSXNJbW1vcnRhbDsKKworICAgIHN0YXRpYyB2
b2lkIGRlc3Ryb3koSlNDZWxsKik7CisKKyAgICB2b2lkIHNldFZhcmlhYmxlRGVjbGFyYXRpb25z
KGNvbnN0IFZhcmlhYmxlRW52aXJvbm1lbnQmIGVudmlyb25tZW50KSB7IG1fdmFyRGVjbGFyYXRp
b25zID0gZW52aXJvbm1lbnQ7IH0KKyAgICBjb25zdCBWYXJpYWJsZUVudmlyb25tZW50JiB2YXJp
YWJsZURlY2xhcmF0aW9ucygpIGNvbnN0IHsgcmV0dXJuIG1fdmFyRGVjbGFyYXRpb25zOyB9CisK
KyAgICB2b2lkIHNldExleGljYWxEZWNsYXJhdGlvbnMoY29uc3QgVmFyaWFibGVFbnZpcm9ubWVu
dCYgZW52aXJvbm1lbnQpIHsgbV9sZXhpY2FsRGVjbGFyYXRpb25zID0gZW52aXJvbm1lbnQ7IH0K
KyAgICBjb25zdCBWYXJpYWJsZUVudmlyb25tZW50JiBsZXhpY2FsRGVjbGFyYXRpb25zKCkgY29u
c3QgeyByZXR1cm4gbV9sZXhpY2FsRGVjbGFyYXRpb25zOyB9CisKKyAgICBzdGF0aWMgdm9pZCB2
aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisKK3ByaXZhdGU6CisgICAgVW5s
aW5rZWRQcm9ncmFtQ29kZUJsb2NrKFZNKiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0
IEV4ZWN1dGFibGVJbmZvJiBpbmZvLCBEZWJ1Z2dlck1vZGUgZGVidWdnZXJNb2RlKQorICAgICAg
ICA6IEJhc2Uodm0sIHN0cnVjdHVyZSwgR2xvYmFsQ29kZSwgaW5mbywgZGVidWdnZXJNb2RlKQor
ICAgIHsKKyAgICB9CisKKyAgICBWYXJpYWJsZUVudmlyb25tZW50IG1fdmFyRGVjbGFyYXRpb25z
OworICAgIFZhcmlhYmxlRW52aXJvbm1lbnQgbV9sZXhpY2FsRGVjbGFyYXRpb25zOworCitwdWJs
aWM6CisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90bykKKyAgICB7CisgICAgICAgIHJl
dHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90bywgVHlwZUluZm8o
VW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwor
ICAgIH0KKworICAgIERFQ0xBUkVfSU5GTzsKK307CisKK2NsYXNzIFVubGlua2VkTW9kdWxlUHJv
Z3JhbUNvZGVCbG9jayBmaW5hbCA6IHB1YmxpYyBVbmxpbmtlZEdsb2JhbENvZGVCbG9jayB7Citw
cml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBDb2RlQ2FjaGU7CisgICAgc3RhdGljIFVubGlua2Vk
TW9kdWxlUHJvZ3JhbUNvZGVCbG9jayogY3JlYXRlKFZNKiB2bSwgY29uc3QgRXhlY3V0YWJsZUlu
Zm8mIGluZm8sIERlYnVnZ2VyTW9kZSBkZWJ1Z2dlck1vZGUpCisgICAgeworICAgICAgICBVbmxp
bmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2sqIGluc3RhbmNlID0gbmV3IChOb3ROdWxsLCBhbGxv
Y2F0ZUNlbGw8VW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrPih2bS0+aGVhcCkpIFVubGlu
a2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayh2bSwgdm0tPnVubGlua2VkTW9kdWxlUHJvZ3JhbUNv
ZGVCbG9ja1N0cnVjdHVyZS5nZXQoKSwgaW5mbywgZGVidWdnZXJNb2RlKTsKKyAgICAgICAgaW5z
dGFuY2UtPmZpbmlzaENyZWF0aW9uKCp2bSk7CisgICAgICAgIHJldHVybiBpbnN0YW5jZTsKKyAg
ICB9CisKK3B1YmxpYzoKKyAgICB0eXBlZGVmIFVubGlua2VkR2xvYmFsQ29kZUJsb2NrIEJhc2U7
CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0
dXJlRmxhZ3MgfCBTdHJ1Y3R1cmVJc0ltbW9ydGFsOworCisgICAgc3RhdGljIHZvaWQgZGVzdHJv
eShKU0NlbGwqKTsKKworICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xv
dFZpc2l0b3ImKTsKKworICAgIC8vIFRoaXMgb2Zmc2V0IHJlcHJlc2VudHMgdGhlIGNvbnN0YW50
IHJlZ2lzdGVyIG9mZnNldCB0byB0aGUgc3RvcmVkIHN5bWJvbCB0YWJsZSB0aGF0IHJlcHJlc2Vu
dHMgdGhlIGxheW91dCBvZiB0aGUKKyAgICAvLyBtb2R1bGUgZW52aXJvbm1lbnQuIFRoaXMgc3lt
Ym9sIHRhYmxlIGlzIGNyZWF0ZWQgYnkgdGhlIGJ5dGUgY29kZSBnZW5lcmF0b3Igc2luY2UgdGhl
IG1vZHVsZSBlbnZpcm9ubWVudCBpbmNsdWRlcworICAgIC8vIHRoZSB0b3AtbW9zdCBsZXhpY2Fs
IGNhcHR1cmVkIHZhcmlhYmxlcyBpbnNpZGUgdGhlIG1vZHVsZSBjb2RlLiBUaGlzIG1lYW5zIHRo
YXQsIG9uY2UgdGhlIG1vZHVsZSBlbnZpcm9ubWVudCBpcworICAgIC8vIGFsbG9jYXRlZCBhbmQg
aW5zdGFudGlhdGVkIGZyb20gdGhpcyBzeW1ib2wgdGFibGUsIGl0IGlzIHRpdGVseSBjb3VwbGVk
IHdpdGggdGhlIHNwZWNpZmljIHVubGlua2VkIG1vZHVsZSBwcm9ncmFtCisgICAgLy8gY29kZSBi
bG9jayBhbmQgdGhlIHN0b3JlZCBzeW1ib2wgdGFibGUuIFNvIGJlZm9yZSBleGVjdXRpbmcgdGhl
IG1vZHVsZSBjb2RlLCB3ZSBzaG91bGQgbm90IGNsZWFyIHRoZSB1bmxpbmtlZCBtb2R1bGUKKyAg
ICAvLyBwcm9ncmFtIGNvZGUgYmxvY2sgaW4gdGhlIG1vZHVsZSBleGVjdXRhYmxlLiBUaGlzIHJl
cXVpcmVtZW50IGlzIG1ldCBiZWNhdXNlIHRoZSBnYXJiYWdlIGNvbGxlY3RvciBvbmx5IGNsZWFy
cworICAgIC8vIHVubGlua2VkIGNvZGUgaW4gKDEpIHVubWFya2VkIGV4ZWN1dGFibGVzIGFuZCAo
MikgZnVuY3Rpb24gZXhlY3V0YWJsZXMuCisgICAgLy8KKyAgICAvLyBTaW5jZSB0aGUgZnVuY3Rp
b24gY29kZSBtYXkgYmUgZXhlY3V0ZWQgcmVwZWF0ZWRseSBhbmQgdGhlIGVudmlyb25tZW50IG9m
IGVhY2ggZnVuY3Rpb24gZXhlY3V0aW9uIGlzIGRpZmZlcmVudCwKKyAgICAvLyB0aGUgZnVuY3Rp
b24gY29kZSBuZWVkIHRvIGFsbG9jYXRlIGFuZCBpbnN0YW50aWF0ZSB0aGUgZW52aXJvbm1lbnQg
aW4gdGhlIHByb2xvZ3VlIG9mIHRoZSBmdW5jdGlvbiBjb2RlLiBPbiB0aGUKKyAgICAvLyBvdGhl
ciBoYW5kLCB0aGUgbW9kdWxlIGNvZGUgaXMgZXhlY3V0ZWQgb25seSBvbmNlLiBTbyB3ZSBjYW4g
aW5zdGFudGlhdGUgdGhlIG1vZHVsZSBlbnZpcm9ubWVudCBvdXRzaWRlIHRoZSBtb2R1bGUKKyAg
ICAvLyBjb2RlLiBBdCB0aGF0IHRpbWUsIHdlIGNvbnN0cnVjdCB0aGUgbW9kdWxlIGVudmlyb25t
ZW50IGJ5IHVzaW5nIHRoZSBzeW1ib2wgdGFibGUgdGhhdCBpcyBoZWxkIGJ5IHRoZSBtb2R1bGUg
ZXhlY3V0YWJsZS4KKyAgICAvLyBUaGUgc3ltYm9sIHRhYmxlIGhlbGQgYnkgdGhlIGV4ZWN1dGFi
bGUgaXMgdGhlIGNsb25lZCBvbmUgZnJvbSBvbmUgaW4gdGhlIHVubGlua2VkIGNvZGUgYmxvY2su
IEluc3RhbnRpYXRpbmcgdGhlIG1vZHVsZQorICAgIC8vIGVudmlyb25tZW50IGJlZm9yZSBleGVj
dXRpbmcgYW5kIGxpbmtpbmcgdGhlIG1vZHVsZSBjb2RlIGlzIHJlcXVpcmVkIHRvIGxpbmsgdGhl
IGltcG9ydGVkIGJpbmRpbmdzIGJldHdlZW4gdGhlIG1vZHVsZXMuCisgICAgLy8KKyAgICAvLyBU
aGUgdW5saW5rZWQgbW9kdWxlIHByb2dyYW0gY29kZSBibG9jayBvbmx5IGhvbGRzIHRoZSBwcmUt
Y2xvbmVkIHN5bWJvbCB0YWJsZSBpbiBpdHMgY29uc3RhbnQgcmVnaXN0ZXIgcG9vbC4gSXQgZG9l
cworICAgIC8vIG5vdCBob2xkIHRoZSBpbnN0YW50aWF0ZWQgbW9kdWxlIGVudmlyb25tZW50LiBT
byB3aGlsZSB0aGUgbW9kdWxlIGVudmlyb25tZW50IHJlcXVpcmVzIHRoZSBzcGVjaWZpYyB1bmxp
bmtlZCBtb2R1bGUKKyAgICAvLyBwcm9ncmFtIGNvZGUgYmxvY2ssIHRoZSB1bmxpbmtlZCBtb2R1
bGUgY29kZSBibG9jayBjYW4gYmUgdXNlZCBmb3IgdGhlIG1vZHVsZSBlbnZpcm9ubWVudCBpbnN0
YW50aWF0ZWQgZnJvbSB0aGlzCisgICAgLy8gdW5saW5rZWQgY29kZSBibG9jay4gVGhlcmUgaXMg
MTpOIHJlbGF0aW9uIGJldHdlZW4gdGhlIHVubGlua2VkIG1vZHVsZSBjb2RlIGJsb2NrIGFuZCB0
aGUgbW9kdWxlIGVudmlyb25tZW50cy4gU28gdGhlCisgICAgLy8gdW5saW5rZWQgbW9kdWxlIHBy
b2dyYW0gY29kZSBibG9jayBjYW4gYmUgY2FjaGVkLgorICAgIC8vCisgICAgLy8gT24gdGhlIG90
aGVyIGhhbmQsIHRoZSBsaW5rZWQgY29kZSBibG9jayBmb3IgdGhlIG1vZHVsZSBlbnZpcm9ubWVu
dCBpbmNsdWRlcyB0aGUgcmVzb2x2ZWQgcmVmZXJlbmNlcyB0byB0aGUgaW1wb3J0ZWQKKyAgICAv
LyBiaW5kaW5ncy4gVGhlIGltcG9ydGVkIGJpbmRpbmcgcmVmZXJlbmNlcyB0aGUgb3RoZXIgbW9k
dWxlIGVudmlyb25tZW50LCBzbyB0aGUgbGlua2VkIGNvZGUgYmxvY2sgaXMgdGl0bHkgY291cGxl
ZAorICAgIC8vIHdpdGggdGhlIHNwZWNpZmljIHNldCBvZiB0aGUgbW9kdWxlIGVudmlyb25tZW50
cy4gVGh1cywgdGhlIGxpbmtlZCBjb2RlIGJsb2NrIHNob3VsZCBub3QgYmUgY2FjaGVkLgorICAg
IGludCBtb2R1bGVFbnZpcm9ubWVudFN5bWJvbFRhYmxlQ29uc3RhbnRSZWdpc3Rlck9mZnNldCgp
IHsgcmV0dXJuIG1fbW9kdWxlRW52aXJvbm1lbnRTeW1ib2xUYWJsZUNvbnN0YW50UmVnaXN0ZXJP
ZmZzZXQ7IH0KKyAgICB2b2lkIHNldE1vZHVsZUVudmlyb25tZW50U3ltYm9sVGFibGVDb25zdGFu
dFJlZ2lzdGVyT2Zmc2V0KGludCBvZmZzZXQpCisgICAgeworICAgICAgICBtX21vZHVsZUVudmly
b25tZW50U3ltYm9sVGFibGVDb25zdGFudFJlZ2lzdGVyT2Zmc2V0ID0gb2Zmc2V0OworICAgIH0K
KworcHJpdmF0ZToKKyAgICBVbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2soVk0qIHZtLCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgRXhlY3V0YWJsZUluZm8mIGluZm8sIERlYnVnZ2Vy
TW9kZSBkZWJ1Z2dlck1vZGUpCisgICAgICAgIDogQmFzZSh2bSwgc3RydWN0dXJlLCBNb2R1bGVD
b2RlLCBpbmZvLCBkZWJ1Z2dlck1vZGUpCisgICAgeworICAgIH0KKworICAgIGludCBtX21vZHVs
ZUVudmlyb25tZW50U3ltYm9sVGFibGVDb25zdGFudFJlZ2lzdGVyT2Zmc2V0IHsgMCB9OworCitw
dWJsaWM6CisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90bykKKyAgICB7CisgICAgICAg
IHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90bywgVHlwZUlu
Zm8oVW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBp
bmZvKCkpOworICAgIH0KKworICAgIERFQ0xBUkVfSU5GTzsKK307CisKK2NsYXNzIFVubGlua2Vk
RXZhbENvZGVCbG9jayBmaW5hbCA6IHB1YmxpYyBVbmxpbmtlZEdsb2JhbENvZGVCbG9jayB7Citw
cml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBDb2RlQ2FjaGU7CisKKyAgICBzdGF0aWMgVW5saW5r
ZWRFdmFsQ29kZUJsb2NrKiBjcmVhdGUoVk0qIHZtLCBjb25zdCBFeGVjdXRhYmxlSW5mbyYgaW5m
bywgRGVidWdnZXJNb2RlIGRlYnVnZ2VyTW9kZSkKKyAgICB7CisgICAgICAgIFVubGlua2VkRXZh
bENvZGVCbG9jayogaW5zdGFuY2UgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxVbmxpbmtl
ZEV2YWxDb2RlQmxvY2s+KHZtLT5oZWFwKSkgVW5saW5rZWRFdmFsQ29kZUJsb2NrKHZtLCB2bS0+
dW5saW5rZWRFdmFsQ29kZUJsb2NrU3RydWN0dXJlLmdldCgpLCBpbmZvLCBkZWJ1Z2dlck1vZGUp
OworICAgICAgICBpbnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24oKnZtKTsKKyAgICAgICAgcmV0dXJu
IGluc3RhbmNlOworICAgIH0KKworcHVibGljOgorICAgIHR5cGVkZWYgVW5saW5rZWRHbG9iYWxD
b2RlQmxvY2sgQmFzZTsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3Mg
PSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IFN0cnVjdHVyZUlzSW1tb3J0YWw7CisKKyAgICBzdGF0
aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOworCisgICAgY29uc3QgSWRlbnRpZmllciYgdmFyaWFi
bGUodW5zaWduZWQgaW5kZXgpIHsgcmV0dXJuIG1fdmFyaWFibGVzW2luZGV4XTsgfQorICAgIHVu
c2lnbmVkIG51bVZhcmlhYmxlcygpIHsgcmV0dXJuIG1fdmFyaWFibGVzLnNpemUoKTsgfQorICAg
IHZvaWQgYWRvcHRWYXJpYWJsZXMoVmVjdG9yPElkZW50aWZpZXIsIDAsIFVuc2FmZVZlY3Rvck92
ZXJmbG93PiYgdmFyaWFibGVzKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fdmFyaWFibGVzLmlz
RW1wdHkoKSk7CisgICAgICAgIG1fdmFyaWFibGVzLnN3YXAodmFyaWFibGVzKTsKKyAgICB9CisK
K3ByaXZhdGU6CisgICAgVW5saW5rZWRFdmFsQ29kZUJsb2NrKFZNKiB2bSwgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUsIGNvbnN0IEV4ZWN1dGFibGVJbmZvJiBpbmZvLCBEZWJ1Z2dlck1vZGUgZGVidWdn
ZXJNb2RlKQorICAgICAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSwgRXZhbENvZGUsIGluZm8sIGRl
YnVnZ2VyTW9kZSkKKyAgICB7CisgICAgfQorCisgICAgVmVjdG9yPElkZW50aWZpZXIsIDAsIFVu
c2FmZVZlY3Rvck92ZXJmbG93PiBtX3ZhcmlhYmxlczsKKworcHVibGljOgorICAgIHN0YXRpYyBT
dHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEpTVmFsdWUgcHJvdG8pCisgICAgeworICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpj
cmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG8sIFR5cGVJbmZvKFVubGlua2VkRXZhbENvZGVC
bG9ja1R5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKKyAgICB9CisKKyAgICBERUNMQVJF
X0lORk87Cit9OworCitjbGFzcyBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrIGZpbmFsIDogcHVi
bGljIFVubGlua2VkQ29kZUJsb2NrIHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIFVubGlua2VkQ29k
ZUJsb2NrIEJhc2U7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0g
QmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBTdHJ1Y3R1cmVJc0ltbW9ydGFsOworCisgICAgc3RhdGlj
IFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2sqIGNyZWF0ZShWTSogdm0sIENvZGVUeXBlIGNvZGVU
eXBlLCBjb25zdCBFeGVjdXRhYmxlSW5mbyYgaW5mbywgRGVidWdnZXJNb2RlIGRlYnVnZ2VyTW9k
ZSkKKyAgICB7CisgICAgICAgIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2sqIGluc3RhbmNlID0g
bmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8VW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jaz4odm0t
PmhlYXApKSBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKHZtLCB2bS0+dW5saW5rZWRGdW5jdGlv
bkNvZGVCbG9ja1N0cnVjdHVyZS5nZXQoKSwgY29kZVR5cGUsIGluZm8sIGRlYnVnZ2VyTW9kZSk7
CisgICAgICAgIGluc3RhbmNlLT5maW5pc2hDcmVhdGlvbigqdm0pOworICAgICAgICByZXR1cm4g
aW5zdGFuY2U7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKKwor
cHJpdmF0ZToKKyAgICBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKFZNKiB2bSwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUsIENvZGVUeXBlIGNvZGVUeXBlLCBjb25zdCBFeGVjdXRhYmxlSW5mbyYgaW5m
bywgRGVidWdnZXJNb2RlIGRlYnVnZ2VyTW9kZSkKKyAgICAgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1
cmUsIGNvZGVUeXBlLCBpbmZvLCBkZWJ1Z2dlck1vZGUpCisgICAgeworICAgIH0KKyAgICAKK3B1
YmxpYzoKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvLCBUeXBlSW5m
byhVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkp
OworICAgIH0KKworICAgIERFQ0xBUkVfSU5GTzsKK307CisKK30KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEdsb2JhbENvZGVCbG9jay5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEdsb2JhbENvZGVCbG9j
ay5oCShyZXZpc2lvbiAyMDgzMDgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
VW5saW5rZWRHbG9iYWxDb2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMjUsNDczICsyNSwx
MCBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgIkJ5dGVjb2RlQ29udmVudGlvbnMuaCIK
LSNpbmNsdWRlICJDb2RlU3BlY2lhbGl6YXRpb25LaW5kLmgiCi0jaW5jbHVkZSAiQ29kZVR5cGUu
aCIKLSNpbmNsdWRlICJDb25zdHJ1Y3RBYmlsaXR5LmgiCi0jaW5jbHVkZSAiRXhwcmVzc2lvblJh
bmdlSW5mby5oIgotI2luY2x1ZGUgIkhhbmRsZXJJbmZvLmgiCi0jaW5jbHVkZSAiSWRlbnRpZmll
ci5oIgotI2luY2x1ZGUgIkpTQ2VsbC5oIgotI2luY2x1ZGUgIkpTU3RyaW5nLmgiCi0jaW5jbHVk
ZSAiUGFyc2VyTW9kZXMuaCIKLSNpbmNsdWRlICJSZWdFeHAuaCIKLSNpbmNsdWRlICJTcGVjaWFs
UG9pbnRlci5oIgotI2luY2x1ZGUgIlVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLmgiCi0jaW5j
bHVkZSAiVmFyaWFibGVFbnZpcm9ubWVudC5oIgotI2luY2x1ZGUgIlZpcnR1YWxSZWdpc3Rlci5o
IgotI2luY2x1ZGUgPHd0Zi9UcmlTdGF0ZS5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNp
bmNsdWRlICJVbmxpbmtlZENvZGVCbG9jay5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIAotY2xhc3Mg
Qnl0ZWNvZGVSZXdyaXRlcjsKLWNsYXNzIERlYnVnZ2VyOwotY2xhc3MgRnVuY3Rpb25FeGVjdXRh
YmxlOwotY2xhc3MgUGFyc2VyRXJyb3I7Ci1jbGFzcyBTY3JpcHRFeGVjdXRhYmxlOwotY2xhc3Mg
U291cmNlQ29kZTsKLWNsYXNzIFNvdXJjZVByb3ZpZGVyOwotY2xhc3MgVW5saW5rZWRDb2RlQmxv
Y2s7Ci1jbGFzcyBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrOwotY2xhc3MgVW5saW5rZWRGdW5j
dGlvbkV4ZWN1dGFibGU7Ci1jbGFzcyBVbmxpbmtlZEluc3RydWN0aW9uU3RyZWFtOwotc3RydWN0
IEV4ZWN1dGFibGVJbmZvOwotCi10eXBlZGVmIHVuc2lnbmVkIFVubGlua2VkVmFsdWVQcm9maWxl
OwotdHlwZWRlZiB1bnNpZ25lZCBVbmxpbmtlZEFycmF5UHJvZmlsZTsKLXR5cGVkZWYgdW5zaWdu
ZWQgVW5saW5rZWRBcnJheUFsbG9jYXRpb25Qcm9maWxlOwotdHlwZWRlZiB1bnNpZ25lZCBVbmxp
bmtlZE9iamVjdEFsbG9jYXRpb25Qcm9maWxlOwotdHlwZWRlZiB1bnNpZ25lZCBVbmxpbmtlZExM
SW50Q2FsbExpbmtJbmZvOwotCi1zdHJ1Y3QgVW5saW5rZWRTdHJpbmdKdW1wVGFibGUgewotICAg
IHN0cnVjdCBPZmZzZXRMb2NhdGlvbiB7Ci0gICAgICAgIGludDMyX3QgYnJhbmNoT2Zmc2V0Owot
ICAgIH07Ci0KLSAgICB0eXBlZGVmIEhhc2hNYXA8UmVmUHRyPFN0cmluZ0ltcGw+LCBPZmZzZXRM
b2NhdGlvbj4gU3RyaW5nT2Zmc2V0VGFibGU7Ci0gICAgU3RyaW5nT2Zmc2V0VGFibGUgb2Zmc2V0
VGFibGU7Ci0KLSAgICBpbmxpbmUgaW50MzJfdCBvZmZzZXRGb3JWYWx1ZShTdHJpbmdJbXBsKiB2
YWx1ZSwgaW50MzJfdCBkZWZhdWx0T2Zmc2V0KQotICAgIHsKLSAgICAgICAgU3RyaW5nT2Zmc2V0
VGFibGU6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG9mZnNldFRhYmxlLmVuZCgpOwotICAgICAgICBT
dHJpbmdPZmZzZXRUYWJsZTo6Y29uc3RfaXRlcmF0b3IgbG9jID0gb2Zmc2V0VGFibGUuZmluZCh2
YWx1ZSk7Ci0gICAgICAgIGlmIChsb2MgPT0gZW5kKQotICAgICAgICAgICAgcmV0dXJuIGRlZmF1
bHRPZmZzZXQ7Ci0gICAgICAgIHJldHVybiBsb2MtPnZhbHVlLmJyYW5jaE9mZnNldDsKLSAgICB9
Ci0KLX07Ci0KLXN0cnVjdCBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSB7Ci0gICAgVmVjdG9yPGlu
dDMyX3Q+IGJyYW5jaE9mZnNldHM7Ci0gICAgaW50MzJfdCBtaW47Ci0KLSAgICBpbnQzMl90IG9m
ZnNldEZvclZhbHVlKGludDMyX3QgdmFsdWUsIGludDMyX3QgZGVmYXVsdE9mZnNldCk7Ci0gICAg
dm9pZCBhZGQoaW50MzJfdCBrZXksIGludDMyX3Qgb2Zmc2V0KQotICAgIHsKLSAgICAgICAgaWYg
KCFicmFuY2hPZmZzZXRzW2tleV0pCi0gICAgICAgICAgICBicmFuY2hPZmZzZXRzW2tleV0gPSBv
ZmZzZXQ7Ci0gICAgfQotfTsKLQotc3RydWN0IFVubGlua2VkSW5zdHJ1Y3Rpb24gewotICAgIFVu
bGlua2VkSW5zdHJ1Y3Rpb24oKSB7IHUub3BlcmFuZCA9IDA7IH0KLSAgICBVbmxpbmtlZEluc3Ry
dWN0aW9uKE9wY29kZUlEIG9wY29kZSkgeyB1Lm9wY29kZSA9IG9wY29kZTsgfQotICAgIFVubGlu
a2VkSW5zdHJ1Y3Rpb24oaW50IG9wZXJhbmQpIHsgdS5vcGVyYW5kID0gb3BlcmFuZDsgfQotICAg
IHVuaW9uIHsKLSAgICAgICAgT3Bjb2RlSUQgb3Bjb2RlOwotICAgICAgICBpbnQzMl90IG9wZXJh
bmQ7Ci0gICAgICAgIHVuc2lnbmVkIGluZGV4OwotICAgIH0gdTsKLX07Ci0KLWNsYXNzIFVubGlu
a2VkQ29kZUJsb2NrIDogcHVibGljIEpTQ2VsbCB7Ci1wdWJsaWM6Ci0gICAgdHlwZWRlZiBKU0Nl
bGwgQmFzZTsKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNl
OjpTdHJ1Y3R1cmVGbGFnczsKLQotICAgIHN0YXRpYyBjb25zdCBib29sIG5lZWRzRGVzdHJ1Y3Rp
b24gPSB0cnVlOwotCi0gICAgZW51bSB7IENhbGxGdW5jdGlvbiwgQXBwbHlGdW5jdGlvbiB9Owot
Ci0gICAgdHlwZWRlZiBVbmxpbmtlZEluc3RydWN0aW9uIEluc3RydWN0aW9uOwotICAgIHR5cGVk
ZWYgVmVjdG9yPFVubGlua2VkSW5zdHJ1Y3Rpb24sIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93PiBV
bnBhY2tlZEluc3RydWN0aW9uczsKLQotICAgIGJvb2wgaXNDb25zdHJ1Y3RvcigpIGNvbnN0IHsg
cmV0dXJuIG1faXNDb25zdHJ1Y3RvcjsgfQotICAgIGJvb2wgaXNTdHJpY3RNb2RlKCkgY29uc3Qg
eyByZXR1cm4gbV9pc1N0cmljdE1vZGU7IH0KLSAgICBib29sIHVzZXNFdmFsKCkgY29uc3QgeyBy
ZXR1cm4gbV91c2VzRXZhbDsgfQotICAgIFNvdXJjZVBhcnNlTW9kZSBwYXJzZU1vZGUoKSBjb25z
dCB7IHJldHVybiBtX3BhcnNlTW9kZTsgfQotICAgIGJvb2wgaXNBcnJvd0Z1bmN0aW9uKCkgY29u
c3QgeyByZXR1cm4gaXNBcnJvd0Z1bmN0aW9uUGFyc2VNb2RlKHBhcnNlTW9kZSgpKTsgfQotICAg
IERlcml2ZWRDb250ZXh0VHlwZSBkZXJpdmVkQ29udGV4dFR5cGUoKSBjb25zdCB7IHJldHVybiBz
dGF0aWNfY2FzdDxEZXJpdmVkQ29udGV4dFR5cGU+KG1fZGVyaXZlZENvbnRleHRUeXBlKTsgfQot
ICAgIEV2YWxDb250ZXh0VHlwZSBldmFsQ29udGV4dFR5cGUoKSBjb25zdCB7IHJldHVybiBzdGF0
aWNfY2FzdDxFdmFsQ29udGV4dFR5cGU+KG1fZXZhbENvbnRleHRUeXBlKTsgfQotICAgIGJvb2wg
aXNBcnJvd0Z1bmN0aW9uQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1faXNBcnJvd0Z1bmN0aW9u
Q29udGV4dDsgfQotICAgIGJvb2wgaXNDbGFzc0NvbnRleHQoKSBjb25zdCB7IHJldHVybiBtX2lz
Q2xhc3NDb250ZXh0OyB9Ci0KLSAgICB2b2lkIGFkZEV4cHJlc3Npb25JbmZvKHVuc2lnbmVkIGlu
c3RydWN0aW9uT2Zmc2V0LCBpbnQgZGl2b3QsCi0gICAgICAgIGludCBzdGFydE9mZnNldCwgaW50
IGVuZE9mZnNldCwgdW5zaWduZWQgbGluZSwgdW5zaWduZWQgY29sdW1uKTsKLQotICAgIHZvaWQg
YWRkVHlwZVByb2ZpbGVyRXhwcmVzc2lvbkluZm8odW5zaWduZWQgaW5zdHJ1Y3Rpb25PZmZzZXQs
IHVuc2lnbmVkIHN0YXJ0RGl2b3QsIHVuc2lnbmVkIGVuZERpdm90KTsKLQotICAgIGJvb2wgaGFz
RXhwcmVzc2lvbkluZm8oKSB7IHJldHVybiBtX2V4cHJlc3Npb25JbmZvLnNpemUoKTsgfQotICAg
IGNvbnN0IFZlY3RvcjxFeHByZXNzaW9uUmFuZ2VJbmZvPiYgZXhwcmVzc2lvbkluZm8oKSB7IHJl
dHVybiBtX2V4cHJlc3Npb25JbmZvOyB9Ci0KLSAgICAvLyBTcGVjaWFsIHJlZ2lzdGVycwotICAg
IHZvaWQgc2V0VGhpc1JlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciB0aGlzUmVnaXN0ZXIpIHsgbV90
aGlzUmVnaXN0ZXIgPSB0aGlzUmVnaXN0ZXI7IH0KLSAgICB2b2lkIHNldFNjb3BlUmVnaXN0ZXIo
VmlydHVhbFJlZ2lzdGVyIHNjb3BlUmVnaXN0ZXIpIHsgbV9zY29wZVJlZ2lzdGVyID0gc2NvcGVS
ZWdpc3RlcjsgfQotCi0gICAgYm9vbCB1c2VzR2xvYmFsT2JqZWN0KCkgY29uc3QgeyByZXR1cm4g
bV9nbG9iYWxPYmplY3RSZWdpc3Rlci5pc1ZhbGlkKCk7IH0KLSAgICB2b2lkIHNldEdsb2JhbE9i
amVjdFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBnbG9iYWxPYmplY3RSZWdpc3RlcikgeyBtX2ds
b2JhbE9iamVjdFJlZ2lzdGVyID0gZ2xvYmFsT2JqZWN0UmVnaXN0ZXI7IH0KLSAgICBWaXJ0dWFs
UmVnaXN0ZXIgZ2xvYmFsT2JqZWN0UmVnaXN0ZXIoKSBjb25zdCB7IHJldHVybiBtX2dsb2JhbE9i
amVjdFJlZ2lzdGVyOyB9Ci0KLSAgICAvLyBQYXJhbWV0ZXIgaW5mb3JtYXRpb24KLSAgICB2b2lk
IHNldE51bVBhcmFtZXRlcnMoaW50IG5ld1ZhbHVlKSB7IG1fbnVtUGFyYW1ldGVycyA9IG5ld1Zh
bHVlOyB9Ci0gICAgdm9pZCBhZGRQYXJhbWV0ZXIoKSB7IG1fbnVtUGFyYW1ldGVycysrOyB9Ci0g
ICAgdW5zaWduZWQgbnVtUGFyYW1ldGVycygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtUGFyYW1ldGVy
czsgfQotCi0gICAgdW5zaWduZWQgYWRkUmVnRXhwKFJlZ0V4cCogcikKLSAgICB7Ci0gICAgICAg
IGNyZWF0ZVJhcmVEYXRhSWZOZWNlc3NhcnkoKTsKLSAgICAgICAgdW5zaWduZWQgc2l6ZSA9IG1f
cmFyZURhdGEtPm1fcmVnZXhwcy5zaXplKCk7Ci0gICAgICAgIG1fcmFyZURhdGEtPm1fcmVnZXhw
cy5hcHBlbmQoV3JpdGVCYXJyaWVyPFJlZ0V4cD4oKnZtKCksIHRoaXMsIHIpKTsKLSAgICAgICAg
cmV0dXJuIHNpemU7Ci0gICAgfQotICAgIHVuc2lnbmVkIG51bWJlck9mUmVnRXhwcygpIGNvbnN0
Ci0gICAgewotICAgICAgICBpZiAoIW1fcmFyZURhdGEpCi0gICAgICAgICAgICByZXR1cm4gMDsK
LSAgICAgICAgcmV0dXJuIG1fcmFyZURhdGEtPm1fcmVnZXhwcy5zaXplKCk7Ci0gICAgfQotICAg
IFJlZ0V4cCogcmVnZXhwKGludCBpbmRleCkgY29uc3QgeyBBU1NFUlQobV9yYXJlRGF0YSk7IHJl
dHVybiBtX3JhcmVEYXRhLT5tX3JlZ2V4cHNbaW5kZXhdLmdldCgpOyB9Ci0KLSAgICAvLyBDb25z
dGFudCBQb29scwotCi0gICAgc2l6ZV90IG51bWJlck9mSWRlbnRpZmllcnMoKSBjb25zdCB7IHJl
dHVybiBtX2lkZW50aWZpZXJzLnNpemUoKTsgfQotICAgIHZvaWQgYWRkSWRlbnRpZmllcihjb25z
dCBJZGVudGlmaWVyJiBpKSB7IHJldHVybiBtX2lkZW50aWZpZXJzLmFwcGVuZChpKTsgfQotICAg
IGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIoaW50IGluZGV4KSBjb25zdCB7IHJldHVybiBt
X2lkZW50aWZpZXJzW2luZGV4XTsgfQotICAgIGNvbnN0IFZlY3RvcjxJZGVudGlmaWVyPiYgaWRl
bnRpZmllcnMoKSBjb25zdCB7IHJldHVybiBtX2lkZW50aWZpZXJzOyB9Ci0KLSAgICB1bnNpZ25l
ZCBhZGRDb25zdGFudChKU1ZhbHVlIHYsIFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbiBzb3VyY2VD
b2RlUmVwcmVzZW50YXRpb24gPSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246Ok90aGVyKQotICAg
IHsKLSAgICAgICAgdW5zaWduZWQgcmVzdWx0ID0gbV9jb25zdGFudFJlZ2lzdGVycy5zaXplKCk7
Ci0gICAgICAgIG1fY29uc3RhbnRSZWdpc3RlcnMuYXBwZW5kKFdyaXRlQmFycmllcjxVbmtub3du
PigpKTsKLSAgICAgICAgbV9jb25zdGFudFJlZ2lzdGVycy5sYXN0KCkuc2V0KCp2bSgpLCB0aGlz
LCB2KTsKLSAgICAgICAgbV9jb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24uYXBwZW5k
KHNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbik7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAg
fQotICAgIHVuc2lnbmVkIGFkZENvbnN0YW50KExpbmtUaW1lQ29uc3RhbnQgdHlwZSkKLSAgICB7
Ci0gICAgICAgIHVuc2lnbmVkIHJlc3VsdCA9IG1fY29uc3RhbnRSZWdpc3RlcnMuc2l6ZSgpOwot
ICAgICAgICBBU1NFUlQocmVzdWx0KTsKLSAgICAgICAgdW5zaWduZWQgaW5kZXggPSBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4odHlwZSk7Ci0gICAgICAgIEFTU0VSVChpbmRleCA8IExpbmtUaW1lQ29u
c3RhbnRDb3VudCk7Ci0gICAgICAgIG1fbGlua1RpbWVDb25zdGFudHNbaW5kZXhdID0gcmVzdWx0
OwotICAgICAgICBtX2NvbnN0YW50UmVnaXN0ZXJzLmFwcGVuZChXcml0ZUJhcnJpZXI8VW5rbm93
bj4oKSk7Ci0gICAgICAgIG1fY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uLmFwcGVu
ZChTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246Ok90aGVyKTsKLSAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKLSAgICB9Ci0gICAgdW5zaWduZWQgcmVnaXN0ZXJJbmRleEZvckxpbmtUaW1lQ29uc3RhbnQo
TGlua1RpbWVDb25zdGFudCB0eXBlKQotICAgIHsKLSAgICAgICAgdW5zaWduZWQgaW5kZXggPSBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4odHlwZSk7Ci0gICAgICAgIEFTU0VSVChpbmRleCA8IExpbmtU
aW1lQ29uc3RhbnRDb3VudCk7Ci0gICAgICAgIHJldHVybiBtX2xpbmtUaW1lQ29uc3RhbnRzW2lu
ZGV4XTsKLSAgICB9Ci0gICAgY29uc3QgVmVjdG9yPFdyaXRlQmFycmllcjxVbmtub3duPj4mIGNv
bnN0YW50UmVnaXN0ZXJzKCkgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyczsgfQotICAgIGNv
bnN0IFdyaXRlQmFycmllcjxVbmtub3duPiYgY29uc3RhbnRSZWdpc3RlcihpbnQgaW5kZXgpIGNv
bnN0IHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnNbaW5kZXggLSBGaXJzdENvbnN0YW50UmVn
aXN0ZXJJbmRleF07IH0KLSAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaXNDb25zdGFudFJlZ2lzdGVy
SW5kZXgoaW50IGluZGV4KSBjb25zdCB7IHJldHVybiBpbmRleCA+PSBGaXJzdENvbnN0YW50UmVn
aXN0ZXJJbmRleDsgfQotICAgIGNvbnN0IFZlY3RvcjxTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24+
JiBjb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oKSB7IHJldHVybiBtX2NvbnN0YW50
c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjsgfQotCi0gICAgLy8gSnVtcHMKLSAgICBzaXplX3Qg
bnVtYmVyT2ZKdW1wVGFyZ2V0cygpIGNvbnN0IHsgcmV0dXJuIG1fanVtcFRhcmdldHMuc2l6ZSgp
OyB9Ci0gICAgdm9pZCBhZGRKdW1wVGFyZ2V0KHVuc2lnbmVkIGp1bXBUYXJnZXQpIHsgbV9qdW1w
VGFyZ2V0cy5hcHBlbmQoanVtcFRhcmdldCk7IH0KLSAgICB1bnNpZ25lZCBqdW1wVGFyZ2V0KGlu
dCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9qdW1wVGFyZ2V0c1tpbmRleF07IH0KLSAgICB1bnNp
Z25lZCBsYXN0SnVtcFRhcmdldCgpIGNvbnN0IHsgcmV0dXJuIG1fanVtcFRhcmdldHMubGFzdCgp
OyB9Ci0KLSAgICBVbmxpbmtlZEhhbmRsZXJJbmZvKiBoYW5kbGVyRm9yQnl0ZWNvZGVPZmZzZXQo
dW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQsIFJlcXVpcmVkSGFuZGxlciA9IFJlcXVpcmVkSGFuZGxl
cjo6QW55SGFuZGxlcik7Ci0gICAgVW5saW5rZWRIYW5kbGVySW5mbyogaGFuZGxlckZvckluZGV4
KHVuc2lnbmVkLCBSZXF1aXJlZEhhbmRsZXIgPSBSZXF1aXJlZEhhbmRsZXI6OkFueUhhbmRsZXIp
OwotCi0gICAgYm9vbCBpc0J1aWx0aW5GdW5jdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1faXNCdWls
dGluRnVuY3Rpb247IH0KLQotICAgIENvbnN0cnVjdG9yS2luZCBjb25zdHJ1Y3RvcktpbmQoKSBj
b25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxDb25zdHJ1Y3RvcktpbmQ+KG1fY29uc3RydWN0b3JL
aW5kKTsgfQotICAgIFN1cGVyQmluZGluZyBzdXBlckJpbmRpbmcoKSBjb25zdCB7IHJldHVybiBz
dGF0aWNfY2FzdDxTdXBlckJpbmRpbmc+KG1fc3VwZXJCaW5kaW5nKTsgfQotICAgIEpTUGFyc2Vy
U2NyaXB0TW9kZSBzY3JpcHRNb2RlKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8SlNQYXJz
ZXJTY3JpcHRNb2RlPihtX3NjcmlwdE1vZGUpOyB9Ci0KLSAgICB2b2lkIHNocmlua1RvRml0KCkK
LSAgICB7Ci0gICAgICAgIG1fanVtcFRhcmdldHMuc2hyaW5rVG9GaXQoKTsKLSAgICAgICAgbV9p
ZGVudGlmaWVycy5zaHJpbmtUb0ZpdCgpOwotICAgICAgICBtX2NvbnN0YW50UmVnaXN0ZXJzLnNo
cmlua1RvRml0KCk7Ci0gICAgICAgIG1fY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9u
LnNocmlua1RvRml0KCk7Ci0gICAgICAgIG1fZnVuY3Rpb25EZWNscy5zaHJpbmtUb0ZpdCgpOwot
ICAgICAgICBtX2Z1bmN0aW9uRXhwcnMuc2hyaW5rVG9GaXQoKTsKLSAgICAgICAgbV9wcm9wZXJ0
eUFjY2Vzc0luc3RydWN0aW9ucy5zaHJpbmtUb0ZpdCgpOwotICAgICAgICBtX2V4cHJlc3Npb25J
bmZvLnNocmlua1RvRml0KCk7Ci0KLSAgICAgICAgaWYgKG1fcmFyZURhdGEpIHsKLSAgICAgICAg
ICAgIG1fcmFyZURhdGEtPm1fZXhjZXB0aW9uSGFuZGxlcnMuc2hyaW5rVG9GaXQoKTsKLSAgICAg
ICAgICAgIG1fcmFyZURhdGEtPm1fcmVnZXhwcy5zaHJpbmtUb0ZpdCgpOwotICAgICAgICAgICAg
bV9yYXJlRGF0YS0+bV9jb25zdGFudEJ1ZmZlcnMuc2hyaW5rVG9GaXQoKTsKLSAgICAgICAgICAg
IG1fcmFyZURhdGEtPm1fc3dpdGNoSnVtcFRhYmxlcy5zaHJpbmtUb0ZpdCgpOwotICAgICAgICAg
ICAgbV9yYXJlRGF0YS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzLnNocmlua1RvRml0KCk7Ci0g
ICAgICAgICAgICBtX3JhcmVEYXRhLT5tX2V4cHJlc3Npb25JbmZvRmF0UG9zaXRpb25zLnNocmlu
a1RvRml0KCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICB2b2lkIHNldEluc3RydWN0aW9ucyhz
dGQ6OnVuaXF1ZV9wdHI8VW5saW5rZWRJbnN0cnVjdGlvblN0cmVhbT4pOwotICAgIGNvbnN0IFVu
bGlua2VkSW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3RydWN0aW9ucygpIGNvbnN0OwotCi0gICAgaW50
IG51bUNhbGxlZUxvY2FscygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtQ2FsbGVlTG9jYWxzOyB9Ci0K
LSAgICBpbnQgbV9udW1WYXJzOwotICAgIGludCBtX251bUNhcHR1cmVkVmFyczsKLSAgICBpbnQg
bV9udW1DYWxsZWVMb2NhbHM7Ci0KLSAgICAvLyBKdW1wIFRhYmxlcwotCi0gICAgc2l6ZV90IG51
bWJlck9mU3dpdGNoSnVtcFRhYmxlcygpIGNvbnN0IHsgcmV0dXJuIG1fcmFyZURhdGEgPyBtX3Jh
cmVEYXRhLT5tX3N3aXRjaEp1bXBUYWJsZXMuc2l6ZSgpIDogMDsgfQotICAgIFVubGlua2VkU2lt
cGxlSnVtcFRhYmxlJiBhZGRTd2l0Y2hKdW1wVGFibGUoKSB7IGNyZWF0ZVJhcmVEYXRhSWZOZWNl
c3NhcnkoKTsgbV9yYXJlRGF0YS0+bV9zd2l0Y2hKdW1wVGFibGVzLmFwcGVuZChVbmxpbmtlZFNp
bXBsZUp1bXBUYWJsZSgpKTsgcmV0dXJuIG1fcmFyZURhdGEtPm1fc3dpdGNoSnVtcFRhYmxlcy5s
YXN0KCk7IH0KLSAgICBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYgc3dpdGNoSnVtcFRhYmxlKGlu
dCB0YWJsZUluZGV4KSB7IEFTU0VSVChtX3JhcmVEYXRhKTsgcmV0dXJuIG1fcmFyZURhdGEtPm1f
c3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsgfQotCi0gICAgc2l6ZV90IG51bWJlck9mU3Ry
aW5nU3dpdGNoSnVtcFRhYmxlcygpIGNvbnN0IHsgcmV0dXJuIG1fcmFyZURhdGEgPyBtX3JhcmVE
YXRhLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMuc2l6ZSgpIDogMDsgfQotICAgIFVubGlua2Vk
U3RyaW5nSnVtcFRhYmxlJiBhZGRTdHJpbmdTd2l0Y2hKdW1wVGFibGUoKSB7IGNyZWF0ZVJhcmVE
YXRhSWZOZWNlc3NhcnkoKTsgbV9yYXJlRGF0YS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzLmFw
cGVuZChVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZSgpKTsgcmV0dXJuIG1fcmFyZURhdGEtPm1fc3Ry
aW5nU3dpdGNoSnVtcFRhYmxlcy5sYXN0KCk7IH0KLSAgICBVbmxpbmtlZFN0cmluZ0p1bXBUYWJs
ZSYgc3RyaW5nU3dpdGNoSnVtcFRhYmxlKGludCB0YWJsZUluZGV4KSB7IEFTU0VSVChtX3JhcmVE
YXRhKTsgcmV0dXJuIG1fcmFyZURhdGEtPm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlc1t0YWJsZUlu
ZGV4XTsgfQotCi0gICAgdW5zaWduZWQgYWRkRnVuY3Rpb25EZWNsKFVubGlua2VkRnVuY3Rpb25F
eGVjdXRhYmxlKiBuKQotICAgIHsKLSAgICAgICAgdW5zaWduZWQgc2l6ZSA9IG1fZnVuY3Rpb25E
ZWNscy5zaXplKCk7Ci0gICAgICAgIG1fZnVuY3Rpb25EZWNscy5hcHBlbmQoV3JpdGVCYXJyaWVy
PFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlPigpKTsKLSAgICAgICAgbV9mdW5jdGlvbkRlY2xz
Lmxhc3QoKS5zZXQoKnZtKCksIHRoaXMsIG4pOwotICAgICAgICByZXR1cm4gc2l6ZTsKLSAgICB9
Ci0gICAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uRGVjbChpbnQgaW5kZXgp
IHsgcmV0dXJuIG1fZnVuY3Rpb25EZWNsc1tpbmRleF0uZ2V0KCk7IH0KLSAgICBzaXplX3QgbnVt
YmVyT2ZGdW5jdGlvbkRlY2xzKCkgeyByZXR1cm4gbV9mdW5jdGlvbkRlY2xzLnNpemUoKTsgfQot
ICAgIHVuc2lnbmVkIGFkZEZ1bmN0aW9uRXhwcihVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSog
bikKLSAgICB7Ci0gICAgICAgIHVuc2lnbmVkIHNpemUgPSBtX2Z1bmN0aW9uRXhwcnMuc2l6ZSgp
OwotICAgICAgICBtX2Z1bmN0aW9uRXhwcnMuYXBwZW5kKFdyaXRlQmFycmllcjxVbmxpbmtlZEZ1
bmN0aW9uRXhlY3V0YWJsZT4oKSk7Ci0gICAgICAgIG1fZnVuY3Rpb25FeHBycy5sYXN0KCkuc2V0
KCp2bSgpLCB0aGlzLCBuKTsKLSAgICAgICAgcmV0dXJuIHNpemU7Ci0gICAgfQotICAgIFVubGlu
a2VkRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbkV4cHIoaW50IGluZGV4KSB7IHJldHVybiBt
X2Z1bmN0aW9uRXhwcnNbaW5kZXhdLmdldCgpOyB9Ci0gICAgc2l6ZV90IG51bWJlck9mRnVuY3Rp
b25FeHBycygpIHsgcmV0dXJuIG1fZnVuY3Rpb25FeHBycy5zaXplKCk7IH0KLQotICAgIC8vIEV4
Y2VwdGlvbiBoYW5kbGluZyBzdXBwb3J0Ci0gICAgc2l6ZV90IG51bWJlck9mRXhjZXB0aW9uSGFu
ZGxlcnMoKSBjb25zdCB7IHJldHVybiBtX3JhcmVEYXRhID8gbV9yYXJlRGF0YS0+bV9leGNlcHRp
b25IYW5kbGVycy5zaXplKCkgOiAwOyB9Ci0gICAgdm9pZCBhZGRFeGNlcHRpb25IYW5kbGVyKGNv
bnN0IFVubGlua2VkSGFuZGxlckluZm8mIGhhbmRsZXIpIHsgY3JlYXRlUmFyZURhdGFJZk5lY2Vz
c2FyeSgpOyByZXR1cm4gbV9yYXJlRGF0YS0+bV9leGNlcHRpb25IYW5kbGVycy5hcHBlbmQoaGFu
ZGxlcik7IH0KLSAgICBVbmxpbmtlZEhhbmRsZXJJbmZvJiBleGNlcHRpb25IYW5kbGVyKGludCBp
bmRleCkgeyBBU1NFUlQobV9yYXJlRGF0YSk7IHJldHVybiBtX3JhcmVEYXRhLT5tX2V4Y2VwdGlv
bkhhbmRsZXJzW2luZGV4XTsgfQotCi0gICAgVW5saW5rZWRBcnJheVByb2ZpbGUgYWRkQXJyYXlQ
cm9maWxlKCkgeyByZXR1cm4gbV9hcnJheVByb2ZpbGVDb3VudCsrOyB9Ci0gICAgdW5zaWduZWQg
bnVtYmVyT2ZBcnJheVByb2ZpbGVzKCkgeyByZXR1cm4gbV9hcnJheVByb2ZpbGVDb3VudDsgfQot
ICAgIFVubGlua2VkQXJyYXlBbGxvY2F0aW9uUHJvZmlsZSBhZGRBcnJheUFsbG9jYXRpb25Qcm9m
aWxlKCkgeyByZXR1cm4gbV9hcnJheUFsbG9jYXRpb25Qcm9maWxlQ291bnQrKzsgfQotICAgIHVu
c2lnbmVkIG51bWJlck9mQXJyYXlBbGxvY2F0aW9uUHJvZmlsZXMoKSB7IHJldHVybiBtX2FycmF5
QWxsb2NhdGlvblByb2ZpbGVDb3VudDsgfQotICAgIFVubGlua2VkT2JqZWN0QWxsb2NhdGlvblBy
b2ZpbGUgYWRkT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUoKSB7IHJldHVybiBtX29iamVjdEFsbG9j
YXRpb25Qcm9maWxlQ291bnQrKzsgfQotICAgIHVuc2lnbmVkIG51bWJlck9mT2JqZWN0QWxsb2Nh
dGlvblByb2ZpbGVzKCkgeyByZXR1cm4gbV9vYmplY3RBbGxvY2F0aW9uUHJvZmlsZUNvdW50OyB9
Ci0gICAgVW5saW5rZWRWYWx1ZVByb2ZpbGUgYWRkVmFsdWVQcm9maWxlKCkgeyByZXR1cm4gbV92
YWx1ZVByb2ZpbGVDb3VudCsrOyB9Ci0gICAgdW5zaWduZWQgbnVtYmVyT2ZWYWx1ZVByb2ZpbGVz
KCkgeyByZXR1cm4gbV92YWx1ZVByb2ZpbGVDb3VudDsgfQotCi0gICAgVW5saW5rZWRMTEludENh
bGxMaW5rSW5mbyBhZGRMTEludENhbGxMaW5rSW5mbygpIHsgcmV0dXJuIG1fbGxpbnRDYWxsTGlu
a0luZm9Db3VudCsrOyB9Ci0gICAgdW5zaWduZWQgbnVtYmVyT2ZMTGludENhbGxMaW5rSW5mb3Mo
KSB7IHJldHVybiBtX2xsaW50Q2FsbExpbmtJbmZvQ291bnQ7IH0KLQotICAgIENvZGVUeXBlIGNv
ZGVUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9jb2RlVHlwZTsgfQotCi0gICAgVmlydHVhbFJlZ2lz
dGVyIHRoaXNSZWdpc3RlcigpIGNvbnN0IHsgcmV0dXJuIG1fdGhpc1JlZ2lzdGVyOyB9Ci0gICAg
VmlydHVhbFJlZ2lzdGVyIHNjb3BlUmVnaXN0ZXIoKSBjb25zdCB7IHJldHVybiBtX3Njb3BlUmVn
aXN0ZXI7IH0KLQotICAgIHZvaWQgYWRkUHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbih1bnNpZ25l
ZCBwcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uKQotICAgIHsKLSAgICAgICAgbV9wcm9wZXJ0eUFj
Y2Vzc0luc3RydWN0aW9ucy5hcHBlbmQocHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbik7Ci0gICAg
fQotCi0gICAgc2l6ZV90IG51bWJlck9mUHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbnMoKSBjb25z
dCB7IHJldHVybiBtX3Byb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25zLnNpemUoKTsgfQotICAgIGNv
bnN0IFZlY3Rvcjx1bnNpZ25lZD4mIHByb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25zKCkgY29uc3Qg
eyByZXR1cm4gbV9wcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uczsgfQotCi0gICAgdHlwZWRlZiBW
ZWN0b3I8SlNWYWx1ZT4gQ29uc3RhbnRCdWZmZXI7Ci0KLSAgICBzaXplX3QgY29uc3RhbnRCdWZm
ZXJDb3VudCgpIHsgQVNTRVJUKG1fcmFyZURhdGEpOyByZXR1cm4gbV9yYXJlRGF0YS0+bV9jb25z
dGFudEJ1ZmZlcnMuc2l6ZSgpOyB9Ci0gICAgdW5zaWduZWQgYWRkQ29uc3RhbnRCdWZmZXIodW5z
aWduZWQgbGVuZ3RoKQotICAgIHsKLSAgICAgICAgY3JlYXRlUmFyZURhdGFJZk5lY2Vzc2FyeSgp
OwotICAgICAgICB1bnNpZ25lZCBzaXplID0gbV9yYXJlRGF0YS0+bV9jb25zdGFudEJ1ZmZlcnMu
c2l6ZSgpOwotICAgICAgICBtX3JhcmVEYXRhLT5tX2NvbnN0YW50QnVmZmVycy5hcHBlbmQoVmVj
dG9yPEpTVmFsdWU+KGxlbmd0aCkpOwotICAgICAgICByZXR1cm4gc2l6ZTsKLSAgICB9Ci0KLSAg
ICBjb25zdCBDb25zdGFudEJ1ZmZlciYgY29uc3RhbnRCdWZmZXIodW5zaWduZWQgaW5kZXgpIGNv
bnN0Ci0gICAgewotICAgICAgICBBU1NFUlQobV9yYXJlRGF0YSk7Ci0gICAgICAgIHJldHVybiBt
X3JhcmVEYXRhLT5tX2NvbnN0YW50QnVmZmVyc1tpbmRleF07Ci0gICAgfQotCi0gICAgQ29uc3Rh
bnRCdWZmZXImIGNvbnN0YW50QnVmZmVyKHVuc2lnbmVkIGluZGV4KQotICAgIHsKLSAgICAgICAg
QVNTRVJUKG1fcmFyZURhdGEpOwotICAgICAgICByZXR1cm4gbV9yYXJlRGF0YS0+bV9jb25zdGFu
dEJ1ZmZlcnNbaW5kZXhdOwotICAgIH0KLQotICAgIGJvb2wgaGFzUmFyZURhdGEoKSBjb25zdCB7
IHJldHVybiBtX3JhcmVEYXRhLmdldCgpOyB9Ci0KLSAgICBpbnQgbGluZU51bWJlckZvckJ5dGVj
b2RlT2Zmc2V0KHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KTsKLQotICAgIHZvaWQgZXhwcmVzc2lv
blJhbmdlRm9yQnl0ZWNvZGVPZmZzZXQodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQsIGludCYgZGl2
b3QsCi0gICAgICAgIGludCYgc3RhcnRPZmZzZXQsIGludCYgZW5kT2Zmc2V0LCB1bnNpZ25lZCYg
bGluZSwgdW5zaWduZWQmIGNvbHVtbikgY29uc3Q7Ci0KLSAgICBib29sIHR5cGVQcm9maWxlckV4
cHJlc3Npb25JbmZvRm9yQnl0ZWNvZGVPZmZzZXQodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQsIHVu
c2lnbmVkJiBzdGFydERpdm90LCB1bnNpZ25lZCYgZW5kRGl2b3QpOwotCi0gICAgdm9pZCByZWNv
cmRQYXJzZShDb2RlRmVhdHVyZXMgZmVhdHVyZXMsIGJvb2wgaGFzQ2FwdHVyZWRWYXJpYWJsZXMs
IHVuc2lnbmVkIGZpcnN0TGluZSwgdW5zaWduZWQgbGluZUNvdW50LCB1bnNpZ25lZCBlbmRDb2x1
bW4pCi0gICAgewotICAgICAgICBtX2ZlYXR1cmVzID0gZmVhdHVyZXM7Ci0gICAgICAgIG1faGFz
Q2FwdHVyZWRWYXJpYWJsZXMgPSBoYXNDYXB0dXJlZFZhcmlhYmxlczsKLSAgICAgICAgbV9maXJz
dExpbmUgPSBmaXJzdExpbmU7Ci0gICAgICAgIG1fbGluZUNvdW50ID0gbGluZUNvdW50OwotICAg
ICAgICAvLyBGb3IgdGhlIFVubGlua2VkQ29kZUJsb2NrLCBzdGFydENvbHVtbiBpcyBhbHdheXMg
MC4KLSAgICAgICAgbV9lbmRDb2x1bW4gPSBlbmRDb2x1bW47Ci0gICAgfQotCi0gICAgY29uc3Qg
U3RyaW5nJiBzb3VyY2VVUkxEaXJlY3RpdmUoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZVVSTERp
cmVjdGl2ZTsgfQotICAgIGNvbnN0IFN0cmluZyYgc291cmNlTWFwcGluZ1VSTERpcmVjdGl2ZSgp
IGNvbnN0IHsgcmV0dXJuIG1fc291cmNlTWFwcGluZ1VSTERpcmVjdGl2ZTsgfQotICAgIHZvaWQg
c2V0U291cmNlVVJMRGlyZWN0aXZlKGNvbnN0IFN0cmluZyYgc291cmNlVVJMKSB7IG1fc291cmNl
VVJMRGlyZWN0aXZlID0gc291cmNlVVJMOyB9Ci0gICAgdm9pZCBzZXRTb3VyY2VNYXBwaW5nVVJM
RGlyZWN0aXZlKGNvbnN0IFN0cmluZyYgc291cmNlTWFwcGluZ1VSTCkgeyBtX3NvdXJjZU1hcHBp
bmdVUkxEaXJlY3RpdmUgPSBzb3VyY2VNYXBwaW5nVVJMOyB9Ci0KLSAgICBDb2RlRmVhdHVyZXMg
Y29kZUZlYXR1cmVzKCkgY29uc3QgeyByZXR1cm4gbV9mZWF0dXJlczsgfQotICAgIGJvb2wgaGFz
Q2FwdHVyZWRWYXJpYWJsZXMoKSBjb25zdCB7IHJldHVybiBtX2hhc0NhcHR1cmVkVmFyaWFibGVz
OyB9Ci0gICAgdW5zaWduZWQgZmlyc3RMaW5lKCkgY29uc3QgeyByZXR1cm4gbV9maXJzdExpbmU7
IH0KLSAgICB1bnNpZ25lZCBsaW5lQ291bnQoKSBjb25zdCB7IHJldHVybiBtX2xpbmVDb3VudDsg
fQotICAgIEFMV0FZU19JTkxJTkUgdW5zaWduZWQgc3RhcnRDb2x1bW4oKSBjb25zdCB7IHJldHVy
biAwOyB9Ci0gICAgdW5zaWduZWQgZW5kQ29sdW1uKCkgY29uc3QgeyByZXR1cm4gbV9lbmRDb2x1
bW47IH0KLQotICAgIHZvaWQgYWRkT3BQcm9maWxlQ29udHJvbEZsb3dCeXRlY29kZU9mZnNldChz
aXplX3Qgb2Zmc2V0KQotICAgIHsKLSAgICAgICAgY3JlYXRlUmFyZURhdGFJZk5lY2Vzc2FyeSgp
OwotICAgICAgICBtX3JhcmVEYXRhLT5tX29wUHJvZmlsZUNvbnRyb2xGbG93Qnl0ZWNvZGVPZmZz
ZXRzLmFwcGVuZChvZmZzZXQpOwotICAgIH0KLSAgICBjb25zdCBWZWN0b3I8c2l6ZV90PiYgb3BQ
cm9maWxlQ29udHJvbEZsb3dCeXRlY29kZU9mZnNldHMoKSBjb25zdAotICAgIHsKLSAgICAgICAg
QVNTRVJUKG1fcmFyZURhdGEpOwotICAgICAgICByZXR1cm4gbV9yYXJlRGF0YS0+bV9vcFByb2Zp
bGVDb250cm9sRmxvd0J5dGVjb2RlT2Zmc2V0czsKLSAgICB9Ci0gICAgYm9vbCBoYXNPcFByb2Zp
bGVDb250cm9sRmxvd0J5dGVjb2RlT2Zmc2V0cygpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1
cm4gbV9yYXJlRGF0YSAmJiAhbV9yYXJlRGF0YS0+bV9vcFByb2ZpbGVDb250cm9sRmxvd0J5dGVj
b2RlT2Zmc2V0cy5pc0VtcHR5KCk7Ci0gICAgfQotCi0gICAgdm9pZCBkdW1wRXhwcmVzc2lvblJh
bmdlSW5mbygpOyAvLyBGb3IgZGVidWdnaW5nIHB1cnBvc2Ugb25seS4KLQotICAgIGJvb2wgd2Fz
Q29tcGlsZWRXaXRoRGVidWdnaW5nT3Bjb2RlcygpIGNvbnN0IHsgcmV0dXJuIG1fd2FzQ29tcGls
ZWRXaXRoRGVidWdnaW5nT3Bjb2RlczsgfQotCi0gICAgVHJpU3RhdGUgZGlkT3B0aW1pemUoKSBj
b25zdCB7IHJldHVybiBtX2RpZE9wdGltaXplOyB9Ci0gICAgdm9pZCBzZXREaWRPcHRpbWl6ZShU
cmlTdGF0ZSBkaWRPcHRpbWl6ZSkgeyBtX2RpZE9wdGltaXplID0gZGlkT3B0aW1pemU7IH0KLQot
cHJvdGVjdGVkOgotICAgIFVubGlua2VkQ29kZUJsb2NrKFZNKiwgU3RydWN0dXJlKiwgQ29kZVR5
cGUsIGNvbnN0IEV4ZWN1dGFibGVJbmZvJiwgRGVidWdnZXJNb2RlKTsKLSAgICB+VW5saW5rZWRD
b2RlQmxvY2soKTsKLQotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mIHZtKQotICAgIHsKLSAg
ICAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBm
cmllbmQgY2xhc3MgQnl0ZWNvZGVSZXdyaXRlcjsKLSAgICB2b2lkIGFwcGx5TW9kaWZpY2F0aW9u
KEJ5dGVjb2RlUmV3cml0ZXImKTsKLQotICAgIHZvaWQgY3JlYXRlUmFyZURhdGFJZk5lY2Vzc2Fy
eSgpCi0gICAgewotICAgICAgICBpZiAoIW1fcmFyZURhdGEpCi0gICAgICAgICAgICBtX3JhcmVE
YXRhID0gc3RkOjptYWtlX3VuaXF1ZTxSYXJlRGF0YT4oKTsKLSAgICB9Ci0KLSAgICB2b2lkIGdl
dExpbmVBbmRDb2x1bW4oY29uc3QgRXhwcmVzc2lvblJhbmdlSW5mbyYsIHVuc2lnbmVkJiBsaW5l
LCB1bnNpZ25lZCYgY29sdW1uKSBjb25zdDsKLQotICAgIGludCBtX251bVBhcmFtZXRlcnM7Ci0K
LSAgICBzdGQ6OnVuaXF1ZV9wdHI8VW5saW5rZWRJbnN0cnVjdGlvblN0cmVhbT4gbV91bmxpbmtl
ZEluc3RydWN0aW9uczsKLQotICAgIFZpcnR1YWxSZWdpc3RlciBtX3RoaXNSZWdpc3RlcjsKLSAg
ICBWaXJ0dWFsUmVnaXN0ZXIgbV9zY29wZVJlZ2lzdGVyOwotICAgIFZpcnR1YWxSZWdpc3RlciBt
X2dsb2JhbE9iamVjdFJlZ2lzdGVyOwotCi0gICAgU3RyaW5nIG1fc291cmNlVVJMRGlyZWN0aXZl
OwotICAgIFN0cmluZyBtX3NvdXJjZU1hcHBpbmdVUkxEaXJlY3RpdmU7Ci0KLSAgICB1bnNpZ25l
ZCBtX3VzZXNFdmFsIDogMTsKLSAgICB1bnNpZ25lZCBtX2lzU3RyaWN0TW9kZSA6IDE7Ci0gICAg
dW5zaWduZWQgbV9pc0NvbnN0cnVjdG9yIDogMTsKLSAgICB1bnNpZ25lZCBtX2hhc0NhcHR1cmVk
VmFyaWFibGVzIDogMTsKLSAgICB1bnNpZ25lZCBtX2lzQnVpbHRpbkZ1bmN0aW9uIDogMTsKLSAg
ICB1bnNpZ25lZCBtX3N1cGVyQmluZGluZyA6IDE7Ci0gICAgdW5zaWduZWQgbV9zY3JpcHRNb2Rl
OiAxOwotICAgIHVuc2lnbmVkIG1faXNBcnJvd0Z1bmN0aW9uQ29udGV4dCA6IDE7Ci0gICAgdW5z
aWduZWQgbV9pc0NsYXNzQ29udGV4dCA6IDE7Ci0gICAgdW5zaWduZWQgbV93YXNDb21waWxlZFdp
dGhEZWJ1Z2dpbmdPcGNvZGVzIDogMTsKLSAgICB1bnNpZ25lZCBtX2NvbnN0cnVjdG9yS2luZCA6
IDI7Ci0gICAgdW5zaWduZWQgbV9kZXJpdmVkQ29udGV4dFR5cGUgOiAyOwotICAgIHVuc2lnbmVk
IG1fZXZhbENvbnRleHRUeXBlIDogMjsKLSAgICB1bnNpZ25lZCBtX2ZpcnN0TGluZTsKLSAgICB1
bnNpZ25lZCBtX2xpbmVDb3VudDsKLSAgICB1bnNpZ25lZCBtX2VuZENvbHVtbjsKLQotICAgIFRy
aVN0YXRlIG1fZGlkT3B0aW1pemU7Ci0gICAgU291cmNlUGFyc2VNb2RlIG1fcGFyc2VNb2RlOwot
ICAgIENvZGVGZWF0dXJlcyBtX2ZlYXR1cmVzOwotICAgIENvZGVUeXBlIG1fY29kZVR5cGU7Ci0K
LSAgICBWZWN0b3I8dW5zaWduZWQ+IG1fanVtcFRhcmdldHM7Ci0KLSAgICBWZWN0b3I8dW5zaWdu
ZWQ+IG1fcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbnM7Ci0KLSAgICAvLyBDb25zdGFudCBQb29s
cwotICAgIFZlY3RvcjxJZGVudGlmaWVyPiBtX2lkZW50aWZpZXJzOwotICAgIFZlY3RvcjxXcml0
ZUJhcnJpZXI8VW5rbm93bj4+IG1fY29uc3RhbnRSZWdpc3RlcnM7Ci0gICAgVmVjdG9yPFNvdXJj
ZUNvZGVSZXByZXNlbnRhdGlvbj4gbV9jb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb247
Ci0gICAgdHlwZWRlZiBWZWN0b3I8V3JpdGVCYXJyaWVyPFVubGlua2VkRnVuY3Rpb25FeGVjdXRh
YmxlPj4gRnVuY3Rpb25FeHByZXNzaW9uVmVjdG9yOwotICAgIEZ1bmN0aW9uRXhwcmVzc2lvblZl
Y3RvciBtX2Z1bmN0aW9uRGVjbHM7Ci0gICAgRnVuY3Rpb25FeHByZXNzaW9uVmVjdG9yIG1fZnVu
Y3Rpb25FeHByczsKLSAgICBzdGQ6OmFycmF5PHVuc2lnbmVkLCBMaW5rVGltZUNvbnN0YW50Q291
bnQ+IG1fbGlua1RpbWVDb25zdGFudHM7Ci0KLSAgICB1bnNpZ25lZCBtX2FycmF5UHJvZmlsZUNv
dW50OwotICAgIHVuc2lnbmVkIG1fYXJyYXlBbGxvY2F0aW9uUHJvZmlsZUNvdW50OwotICAgIHVu
c2lnbmVkIG1fb2JqZWN0QWxsb2NhdGlvblByb2ZpbGVDb3VudDsKLSAgICB1bnNpZ25lZCBtX3Zh
bHVlUHJvZmlsZUNvdW50OwotICAgIHVuc2lnbmVkIG1fbGxpbnRDYWxsTGlua0luZm9Db3VudDsK
LQotcHVibGljOgotICAgIHN0cnVjdCBSYXJlRGF0YSB7Ci0gICAgICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOwotICAgIHB1YmxpYzoKLSAgICAgICAgVmVjdG9yPFVubGlua2VkSGFuZGxlcklu
Zm8+IG1fZXhjZXB0aW9uSGFuZGxlcnM7Ci0KLSAgICAgICAgLy8gUmFyZSBDb25zdGFudHMKLSAg
ICAgICAgVmVjdG9yPFdyaXRlQmFycmllcjxSZWdFeHA+PiBtX3JlZ2V4cHM7Ci0KLSAgICAgICAg
Ly8gQnVmZmVycyB1c2VkIGZvciBsYXJnZSBhcnJheSBsaXRlcmFscwotICAgICAgICBWZWN0b3I8
Q29uc3RhbnRCdWZmZXI+IG1fY29uc3RhbnRCdWZmZXJzOwotCi0gICAgICAgIC8vIEp1bXAgVGFi
bGVzCi0gICAgICAgIFZlY3RvcjxVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZT4gbV9zd2l0Y2hKdW1w
VGFibGVzOwotICAgICAgICBWZWN0b3I8VW5saW5rZWRTdHJpbmdKdW1wVGFibGU+IG1fc3RyaW5n
U3dpdGNoSnVtcFRhYmxlczsKLQotICAgICAgICBWZWN0b3I8RXhwcmVzc2lvblJhbmdlSW5mbzo6
RmF0UG9zaXRpb24+IG1fZXhwcmVzc2lvbkluZm9GYXRQb3NpdGlvbnM7Ci0KLSAgICAgICAgc3Ry
dWN0IFR5cGVQcm9maWxlckV4cHJlc3Npb25SYW5nZSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBt
X3N0YXJ0RGl2b3Q7Ci0gICAgICAgICAgICB1bnNpZ25lZCBtX2VuZERpdm90OwotICAgICAgICB9
OwotICAgICAgICBIYXNoTWFwPHVuc2lnbmVkLCBUeXBlUHJvZmlsZXJFeHByZXNzaW9uUmFuZ2U+
IG1fdHlwZVByb2ZpbGVySW5mb01hcDsKLSAgICAgICAgVmVjdG9yPHNpemVfdD4gbV9vcFByb2Zp
bGVDb250cm9sRmxvd0J5dGVjb2RlT2Zmc2V0czsKLSAgICB9OwotCi1wcml2YXRlOgotICAgIHN0
ZDo6dW5pcXVlX3B0cjxSYXJlRGF0YT4gbV9yYXJlRGF0YTsKLSAgICBWZWN0b3I8RXhwcmVzc2lv
blJhbmdlSW5mbz4gbV9leHByZXNzaW9uSW5mbzsKLQotcHJvdGVjdGVkOgotICAgIHN0YXRpYyB2
b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKLSAgICBzdGF0aWMgc2l6
ZV90IGVzdGltYXRlZFNpemUoSlNDZWxsKik7Ci0KLXB1YmxpYzoKLSAgICBERUNMQVJFX0lORk87
Ci19OwotCiBjbGFzcyBVbmxpbmtlZEdsb2JhbENvZGVCbG9jayA6IHB1YmxpYyBVbmxpbmtlZENv
ZGVCbG9jayB7CiBwdWJsaWM6CiAgICAgdHlwZWRlZiBVbmxpbmtlZENvZGVCbG9jayBCYXNlOwpA
QCAtNTAxLDE4NiArMzgsNiBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIDogQmFzZSh2bSwgc3RydWN0
dXJlLCBjb2RlVHlwZSwgaW5mbywgZGVidWdnZXJNb2RlKQogICAgIHsKICAgICB9Ci0KLSAgICBE
RUNMQVJFX0lORk87Ci19OwotCi1jbGFzcyBVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2sgZmluYWwg
OiBwdWJsaWMgVW5saW5rZWRHbG9iYWxDb2RlQmxvY2sgewotcHJpdmF0ZToKLSAgICBmcmllbmQg
Y2xhc3MgQ29kZUNhY2hlOwotICAgIHN0YXRpYyBVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2sqIGNy
ZWF0ZShWTSogdm0sIGNvbnN0IEV4ZWN1dGFibGVJbmZvJiBpbmZvLCBEZWJ1Z2dlck1vZGUgZGVi
dWdnZXJNb2RlKQotICAgIHsKLSAgICAgICAgVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrKiBpbnN0
YW5jZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFVubGlua2VkUHJvZ3JhbUNvZGVCbG9j
az4odm0tPmhlYXApKSBVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2sodm0sIHZtLT51bmxpbmtlZFBy
b2dyYW1Db2RlQmxvY2tTdHJ1Y3R1cmUuZ2V0KCksIGluZm8sIGRlYnVnZ2VyTW9kZSk7Ci0gICAg
ICAgIGluc3RhbmNlLT5maW5pc2hDcmVhdGlvbigqdm0pOwotICAgICAgICByZXR1cm4gaW5zdGFu
Y2U7Ci0gICAgfQotCi1wdWJsaWM6Ci0gICAgdHlwZWRlZiBVbmxpbmtlZEdsb2JhbENvZGVCbG9j
ayBCYXNlOwotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6
OlN0cnVjdHVyZUZsYWdzIHwgU3RydWN0dXJlSXNJbW1vcnRhbDsKLQotICAgIHN0YXRpYyB2b2lk
IGRlc3Ryb3koSlNDZWxsKik7Ci0KLSAgICB2b2lkIHNldFZhcmlhYmxlRGVjbGFyYXRpb25zKGNv
bnN0IFZhcmlhYmxlRW52aXJvbm1lbnQmIGVudmlyb25tZW50KSB7IG1fdmFyRGVjbGFyYXRpb25z
ID0gZW52aXJvbm1lbnQ7IH0KLSAgICBjb25zdCBWYXJpYWJsZUVudmlyb25tZW50JiB2YXJpYWJs
ZURlY2xhcmF0aW9ucygpIGNvbnN0IHsgcmV0dXJuIG1fdmFyRGVjbGFyYXRpb25zOyB9Ci0KLSAg
ICB2b2lkIHNldExleGljYWxEZWNsYXJhdGlvbnMoY29uc3QgVmFyaWFibGVFbnZpcm9ubWVudCYg
ZW52aXJvbm1lbnQpIHsgbV9sZXhpY2FsRGVjbGFyYXRpb25zID0gZW52aXJvbm1lbnQ7IH0KLSAg
ICBjb25zdCBWYXJpYWJsZUVudmlyb25tZW50JiBsZXhpY2FsRGVjbGFyYXRpb25zKCkgY29uc3Qg
eyByZXR1cm4gbV9sZXhpY2FsRGVjbGFyYXRpb25zOyB9Ci0KLSAgICBzdGF0aWMgdm9pZCB2aXNp
dENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7Ci0KLXByaXZhdGU6Ci0gICAgVW5saW5r
ZWRQcm9ncmFtQ29kZUJsb2NrKFZNKiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IEV4
ZWN1dGFibGVJbmZvJiBpbmZvLCBEZWJ1Z2dlck1vZGUgZGVidWdnZXJNb2RlKQotICAgICAgICA6
IEJhc2Uodm0sIHN0cnVjdHVyZSwgR2xvYmFsQ29kZSwgaW5mbywgZGVidWdnZXJNb2RlKQotICAg
IHsKLSAgICB9Ci0KLSAgICBWYXJpYWJsZUVudmlyb25tZW50IG1fdmFyRGVjbGFyYXRpb25zOwot
ICAgIFZhcmlhYmxlRW52aXJvbm1lbnQgbV9sZXhpY2FsRGVjbGFyYXRpb25zOwotCi1wdWJsaWM6
Ci0gICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90bykKLSAgICB7Ci0gICAgICAgIHJldHVy
biBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90bywgVHlwZUluZm8oVW5s
aW5rZWRQcm9ncmFtQ29kZUJsb2NrVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwotICAg
IH0KLQotICAgIERFQ0xBUkVfSU5GTzsKLX07Ci0KLWNsYXNzIFVubGlua2VkTW9kdWxlUHJvZ3Jh
bUNvZGVCbG9jayBmaW5hbCA6IHB1YmxpYyBVbmxpbmtlZEdsb2JhbENvZGVCbG9jayB7Ci1wcml2
YXRlOgotICAgIGZyaWVuZCBjbGFzcyBDb2RlQ2FjaGU7Ci0gICAgc3RhdGljIFVubGlua2VkTW9k
dWxlUHJvZ3JhbUNvZGVCbG9jayogY3JlYXRlKFZNKiB2bSwgY29uc3QgRXhlY3V0YWJsZUluZm8m
IGluZm8sIERlYnVnZ2VyTW9kZSBkZWJ1Z2dlck1vZGUpCi0gICAgewotICAgICAgICBVbmxpbmtl
ZE1vZHVsZVByb2dyYW1Db2RlQmxvY2sqIGluc3RhbmNlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0
ZUNlbGw8VW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrPih2bS0+aGVhcCkpIFVubGlua2Vk
TW9kdWxlUHJvZ3JhbUNvZGVCbG9jayh2bSwgdm0tPnVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVC
bG9ja1N0cnVjdHVyZS5nZXQoKSwgaW5mbywgZGVidWdnZXJNb2RlKTsKLSAgICAgICAgaW5zdGFu
Y2UtPmZpbmlzaENyZWF0aW9uKCp2bSk7Ci0gICAgICAgIHJldHVybiBpbnN0YW5jZTsKLSAgICB9
Ci0KLXB1YmxpYzoKLSAgICB0eXBlZGVmIFVubGlua2VkR2xvYmFsQ29kZUJsb2NrIEJhc2U7Ci0g
ICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJl
RmxhZ3MgfCBTdHJ1Y3R1cmVJc0ltbW9ydGFsOwotCi0gICAgc3RhdGljIHZvaWQgZGVzdHJveShK
U0NlbGwqKTsKLQotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZp
c2l0b3ImKTsKLQotICAgIC8vIFRoaXMgb2Zmc2V0IHJlcHJlc2VudHMgdGhlIGNvbnN0YW50IHJl
Z2lzdGVyIG9mZnNldCB0byB0aGUgc3RvcmVkIHN5bWJvbCB0YWJsZSB0aGF0IHJlcHJlc2VudHMg
dGhlIGxheW91dCBvZiB0aGUKLSAgICAvLyBtb2R1bGUgZW52aXJvbm1lbnQuIFRoaXMgc3ltYm9s
IHRhYmxlIGlzIGNyZWF0ZWQgYnkgdGhlIGJ5dGUgY29kZSBnZW5lcmF0b3Igc2luY2UgdGhlIG1v
ZHVsZSBlbnZpcm9ubWVudCBpbmNsdWRlcwotICAgIC8vIHRoZSB0b3AtbW9zdCBsZXhpY2FsIGNh
cHR1cmVkIHZhcmlhYmxlcyBpbnNpZGUgdGhlIG1vZHVsZSBjb2RlLiBUaGlzIG1lYW5zIHRoYXQs
IG9uY2UgdGhlIG1vZHVsZSBlbnZpcm9ubWVudCBpcwotICAgIC8vIGFsbG9jYXRlZCBhbmQgaW5z
dGFudGlhdGVkIGZyb20gdGhpcyBzeW1ib2wgdGFibGUsIGl0IGlzIHRpdGVseSBjb3VwbGVkIHdp
dGggdGhlIHNwZWNpZmljIHVubGlua2VkIG1vZHVsZSBwcm9ncmFtCi0gICAgLy8gY29kZSBibG9j
ayBhbmQgdGhlIHN0b3JlZCBzeW1ib2wgdGFibGUuIFNvIGJlZm9yZSBleGVjdXRpbmcgdGhlIG1v
ZHVsZSBjb2RlLCB3ZSBzaG91bGQgbm90IGNsZWFyIHRoZSB1bmxpbmtlZCBtb2R1bGUKLSAgICAv
LyBwcm9ncmFtIGNvZGUgYmxvY2sgaW4gdGhlIG1vZHVsZSBleGVjdXRhYmxlLiBUaGlzIHJlcXVp
cmVtZW50IGlzIG1ldCBiZWNhdXNlIHRoZSBnYXJiYWdlIGNvbGxlY3RvciBvbmx5IGNsZWFycwot
ICAgIC8vIHVubGlua2VkIGNvZGUgaW4gKDEpIHVubWFya2VkIGV4ZWN1dGFibGVzIGFuZCAoMikg
ZnVuY3Rpb24gZXhlY3V0YWJsZXMuCi0gICAgLy8KLSAgICAvLyBTaW5jZSB0aGUgZnVuY3Rpb24g
Y29kZSBtYXkgYmUgZXhlY3V0ZWQgcmVwZWF0ZWRseSBhbmQgdGhlIGVudmlyb25tZW50IG9mIGVh
Y2ggZnVuY3Rpb24gZXhlY3V0aW9uIGlzIGRpZmZlcmVudCwKLSAgICAvLyB0aGUgZnVuY3Rpb24g
Y29kZSBuZWVkIHRvIGFsbG9jYXRlIGFuZCBpbnN0YW50aWF0ZSB0aGUgZW52aXJvbm1lbnQgaW4g
dGhlIHByb2xvZ3VlIG9mIHRoZSBmdW5jdGlvbiBjb2RlLiBPbiB0aGUKLSAgICAvLyBvdGhlciBo
YW5kLCB0aGUgbW9kdWxlIGNvZGUgaXMgZXhlY3V0ZWQgb25seSBvbmNlLiBTbyB3ZSBjYW4gaW5z
dGFudGlhdGUgdGhlIG1vZHVsZSBlbnZpcm9ubWVudCBvdXRzaWRlIHRoZSBtb2R1bGUKLSAgICAv
LyBjb2RlLiBBdCB0aGF0IHRpbWUsIHdlIGNvbnN0cnVjdCB0aGUgbW9kdWxlIGVudmlyb25tZW50
IGJ5IHVzaW5nIHRoZSBzeW1ib2wgdGFibGUgdGhhdCBpcyBoZWxkIGJ5IHRoZSBtb2R1bGUgZXhl
Y3V0YWJsZS4KLSAgICAvLyBUaGUgc3ltYm9sIHRhYmxlIGhlbGQgYnkgdGhlIGV4ZWN1dGFibGUg
aXMgdGhlIGNsb25lZCBvbmUgZnJvbSBvbmUgaW4gdGhlIHVubGlua2VkIGNvZGUgYmxvY2suIElu
c3RhbnRpYXRpbmcgdGhlIG1vZHVsZQotICAgIC8vIGVudmlyb25tZW50IGJlZm9yZSBleGVjdXRp
bmcgYW5kIGxpbmtpbmcgdGhlIG1vZHVsZSBjb2RlIGlzIHJlcXVpcmVkIHRvIGxpbmsgdGhlIGlt
cG9ydGVkIGJpbmRpbmdzIGJldHdlZW4gdGhlIG1vZHVsZXMuCi0gICAgLy8KLSAgICAvLyBUaGUg
dW5saW5rZWQgbW9kdWxlIHByb2dyYW0gY29kZSBibG9jayBvbmx5IGhvbGRzIHRoZSBwcmUtY2xv
bmVkIHN5bWJvbCB0YWJsZSBpbiBpdHMgY29uc3RhbnQgcmVnaXN0ZXIgcG9vbC4gSXQgZG9lcwot
ICAgIC8vIG5vdCBob2xkIHRoZSBpbnN0YW50aWF0ZWQgbW9kdWxlIGVudmlyb25tZW50LiBTbyB3
aGlsZSB0aGUgbW9kdWxlIGVudmlyb25tZW50IHJlcXVpcmVzIHRoZSBzcGVjaWZpYyB1bmxpbmtl
ZCBtb2R1bGUKLSAgICAvLyBwcm9ncmFtIGNvZGUgYmxvY2ssIHRoZSB1bmxpbmtlZCBtb2R1bGUg
Y29kZSBibG9jayBjYW4gYmUgdXNlZCBmb3IgdGhlIG1vZHVsZSBlbnZpcm9ubWVudCBpbnN0YW50
aWF0ZWQgZnJvbSB0aGlzCi0gICAgLy8gdW5saW5rZWQgY29kZSBibG9jay4gVGhlcmUgaXMgMTpO
IHJlbGF0aW9uIGJldHdlZW4gdGhlIHVubGlua2VkIG1vZHVsZSBjb2RlIGJsb2NrIGFuZCB0aGUg
bW9kdWxlIGVudmlyb25tZW50cy4gU28gdGhlCi0gICAgLy8gdW5saW5rZWQgbW9kdWxlIHByb2dy
YW0gY29kZSBibG9jayBjYW4gYmUgY2FjaGVkLgotICAgIC8vCi0gICAgLy8gT24gdGhlIG90aGVy
IGhhbmQsIHRoZSBsaW5rZWQgY29kZSBibG9jayBmb3IgdGhlIG1vZHVsZSBlbnZpcm9ubWVudCBp
bmNsdWRlcyB0aGUgcmVzb2x2ZWQgcmVmZXJlbmNlcyB0byB0aGUgaW1wb3J0ZWQKLSAgICAvLyBi
aW5kaW5ncy4gVGhlIGltcG9ydGVkIGJpbmRpbmcgcmVmZXJlbmNlcyB0aGUgb3RoZXIgbW9kdWxl
IGVudmlyb25tZW50LCBzbyB0aGUgbGlua2VkIGNvZGUgYmxvY2sgaXMgdGl0bHkgY291cGxlZAot
ICAgIC8vIHdpdGggdGhlIHNwZWNpZmljIHNldCBvZiB0aGUgbW9kdWxlIGVudmlyb25tZW50cy4g
VGh1cywgdGhlIGxpbmtlZCBjb2RlIGJsb2NrIHNob3VsZCBub3QgYmUgY2FjaGVkLgotICAgIGlu
dCBtb2R1bGVFbnZpcm9ubWVudFN5bWJvbFRhYmxlQ29uc3RhbnRSZWdpc3Rlck9mZnNldCgpIHsg
cmV0dXJuIG1fbW9kdWxlRW52aXJvbm1lbnRTeW1ib2xUYWJsZUNvbnN0YW50UmVnaXN0ZXJPZmZz
ZXQ7IH0KLSAgICB2b2lkIHNldE1vZHVsZUVudmlyb25tZW50U3ltYm9sVGFibGVDb25zdGFudFJl
Z2lzdGVyT2Zmc2V0KGludCBvZmZzZXQpCi0gICAgewotICAgICAgICBtX21vZHVsZUVudmlyb25t
ZW50U3ltYm9sVGFibGVDb25zdGFudFJlZ2lzdGVyT2Zmc2V0ID0gb2Zmc2V0OwotICAgIH0KLQot
cHJpdmF0ZToKLSAgICBVbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2soVk0qIHZtLCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgRXhlY3V0YWJsZUluZm8mIGluZm8sIERlYnVnZ2VyTW9k
ZSBkZWJ1Z2dlck1vZGUpCi0gICAgICAgIDogQmFzZSh2bSwgc3RydWN0dXJlLCBNb2R1bGVDb2Rl
LCBpbmZvLCBkZWJ1Z2dlck1vZGUpCi0gICAgewotICAgIH0KLQotICAgIGludCBtX21vZHVsZUVu
dmlyb25tZW50U3ltYm9sVGFibGVDb25zdGFudFJlZ2lzdGVyT2Zmc2V0IHsgMCB9OwotCi1wdWJs
aWM6Ci0gICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90bykKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90bywgVHlwZUluZm8o
VW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZv
KCkpOwotICAgIH0KLQotICAgIERFQ0xBUkVfSU5GTzsKLX07Ci0KLWNsYXNzIFVubGlua2VkRXZh
bENvZGVCbG9jayBmaW5hbCA6IHB1YmxpYyBVbmxpbmtlZEdsb2JhbENvZGVCbG9jayB7Ci1wcml2
YXRlOgotICAgIGZyaWVuZCBjbGFzcyBDb2RlQ2FjaGU7Ci0KLSAgICBzdGF0aWMgVW5saW5rZWRF
dmFsQ29kZUJsb2NrKiBjcmVhdGUoVk0qIHZtLCBjb25zdCBFeGVjdXRhYmxlSW5mbyYgaW5mbywg
RGVidWdnZXJNb2RlIGRlYnVnZ2VyTW9kZSkKLSAgICB7Ci0gICAgICAgIFVubGlua2VkRXZhbENv
ZGVCbG9jayogaW5zdGFuY2UgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxVbmxpbmtlZEV2
YWxDb2RlQmxvY2s+KHZtLT5oZWFwKSkgVW5saW5rZWRFdmFsQ29kZUJsb2NrKHZtLCB2bS0+dW5s
aW5rZWRFdmFsQ29kZUJsb2NrU3RydWN0dXJlLmdldCgpLCBpbmZvLCBkZWJ1Z2dlck1vZGUpOwot
ICAgICAgICBpbnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24oKnZtKTsKLSAgICAgICAgcmV0dXJuIGlu
c3RhbmNlOwotICAgIH0KLQotcHVibGljOgotICAgIHR5cGVkZWYgVW5saW5rZWRHbG9iYWxDb2Rl
QmxvY2sgQmFzZTsKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBC
YXNlOjpTdHJ1Y3R1cmVGbGFncyB8IFN0cnVjdHVyZUlzSW1tb3J0YWw7Ci0KLSAgICBzdGF0aWMg
dm9pZCBkZXN0cm95KEpTQ2VsbCopOwotCi0gICAgY29uc3QgSWRlbnRpZmllciYgdmFyaWFibGUo
dW5zaWduZWQgaW5kZXgpIHsgcmV0dXJuIG1fdmFyaWFibGVzW2luZGV4XTsgfQotICAgIHVuc2ln
bmVkIG51bVZhcmlhYmxlcygpIHsgcmV0dXJuIG1fdmFyaWFibGVzLnNpemUoKTsgfQotICAgIHZv
aWQgYWRvcHRWYXJpYWJsZXMoVmVjdG9yPElkZW50aWZpZXIsIDAsIFVuc2FmZVZlY3Rvck92ZXJm
bG93PiYgdmFyaWFibGVzKQotICAgIHsKLSAgICAgICAgQVNTRVJUKG1fdmFyaWFibGVzLmlzRW1w
dHkoKSk7Ci0gICAgICAgIG1fdmFyaWFibGVzLnN3YXAodmFyaWFibGVzKTsKLSAgICB9Ci0KLXBy
aXZhdGU6Ci0gICAgVW5saW5rZWRFdmFsQ29kZUJsb2NrKFZNKiB2bSwgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIGNvbnN0IEV4ZWN1dGFibGVJbmZvJiBpbmZvLCBEZWJ1Z2dlck1vZGUgZGVidWdnZXJN
b2RlKQotICAgICAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSwgRXZhbENvZGUsIGluZm8sIGRlYnVn
Z2VyTW9kZSkKLSAgICB7Ci0gICAgfQotCi0gICAgVmVjdG9yPElkZW50aWZpZXIsIDAsIFVuc2Fm
ZVZlY3Rvck92ZXJmbG93PiBtX3ZhcmlhYmxlczsKLQotcHVibGljOgotICAgIHN0YXRpYyBTdHJ1
Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTVmFsdWUgcHJvdG8pCi0gICAgewotICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVh
dGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG8sIFR5cGVJbmZvKFVubGlua2VkRXZhbENvZGVCbG9j
a1R5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKLSAgICB9Ci0KLSAgICBERUNMQVJFX0lO
Rk87Ci19OwotCi1jbGFzcyBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrIGZpbmFsIDogcHVibGlj
IFVubGlua2VkQ29kZUJsb2NrIHsKLXB1YmxpYzoKLSAgICB0eXBlZGVmIFVubGlua2VkQ29kZUJs
b2NrIEJhc2U7Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFz
ZTo6U3RydWN0dXJlRmxhZ3MgfCBTdHJ1Y3R1cmVJc0ltbW9ydGFsOwotCi0gICAgc3RhdGljIFVu
bGlua2VkRnVuY3Rpb25Db2RlQmxvY2sqIGNyZWF0ZShWTSogdm0sIENvZGVUeXBlIGNvZGVUeXBl
LCBjb25zdCBFeGVjdXRhYmxlSW5mbyYgaW5mbywgRGVidWdnZXJNb2RlIGRlYnVnZ2VyTW9kZSkK
LSAgICB7Ci0gICAgICAgIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2sqIGluc3RhbmNlID0gbmV3
IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8VW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jaz4odm0tPmhl
YXApKSBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKHZtLCB2bS0+dW5saW5rZWRGdW5jdGlvbkNv
ZGVCbG9ja1N0cnVjdHVyZS5nZXQoKSwgY29kZVR5cGUsIGluZm8sIGRlYnVnZ2VyTW9kZSk7Ci0g
ICAgICAgIGluc3RhbmNlLT5maW5pc2hDcmVhdGlvbigqdm0pOwotICAgICAgICByZXR1cm4gaW5z
dGFuY2U7Ci0gICAgfQotCi0gICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKLQotcHJp
dmF0ZToKLSAgICBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKFZNKiB2bSwgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUsIENvZGVUeXBlIGNvZGVUeXBlLCBjb25zdCBFeGVjdXRhYmxlSW5mbyYgaW5mbywg
RGVidWdnZXJNb2RlIGRlYnVnZ2VyTW9kZSkKLSAgICAgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUs
IGNvZGVUeXBlLCBpbmZvLCBkZWJ1Z2dlck1vZGUpCi0gICAgewotICAgIH0KLSAgICAKLXB1Ymxp
YzoKLSAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvLCBUeXBlSW5mbyhV
bmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwot
ICAgIH0KLQotICAgIERFQ0xBUkVfSU5GTzsKIH07CiAKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2suY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZE1vZHVsZVBy
b2dyYW1Db2RlQmxvY2suY3BwCShyZXZpc2lvbiAyMDgzMDgpCShmcm9tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHA6MjA4MzA4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jay5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTItMjAxMywgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorCisjaW5jbHVkZSAiVW5saW5rZWRDb2RlQmxvY2suaCIKKworI2luY2x1ZGUgIkJ5dGVj
b2RlR2VuZXJhdG9yLmgiCisjaW5jbHVkZSAiQnl0ZWNvZGVSZXdyaXRlci5oIgorI2luY2x1ZGUg
IkNsYXNzSW5mby5oIgorI2luY2x1ZGUgIkNvZGVDYWNoZS5oIgorI2luY2x1ZGUgIkV4ZWN1dGFi
bGVJbmZvLmgiCisjaW5jbHVkZSAiRnVuY3Rpb25PdmVycmlkZXMuaCIKKyNpbmNsdWRlICJKU1N0
cmluZy5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlICJQYXJzZXIuaCIKKyNp
bmNsdWRlICJQcmVjaXNlSnVtcFRhcmdldHNJbmxpbmVzLmgiCisjaW5jbHVkZSAiU291cmNlUHJv
dmlkZXIuaCIKKyNpbmNsdWRlICJTdHJ1Y3R1cmUuaCIKKyNpbmNsdWRlICJTeW1ib2xUYWJsZS5o
IgorI2luY2x1ZGUgIlVubGlua2VkSW5zdHJ1Y3Rpb25TdHJlYW0uaCIKKyNpbmNsdWRlIDx3dGYv
RGF0YUxvZy5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY29uc3QgQ2xhc3NJbmZvIFVubGlua2Vk
Q29kZUJsb2NrOjpzX2luZm8gPSB7ICJVbmxpbmtlZENvZGVCbG9jayIsIDAsIDAsIENSRUFURV9N
RVRIT0RfVEFCTEUoVW5saW5rZWRDb2RlQmxvY2spIH07Citjb25zdCBDbGFzc0luZm8gVW5saW5r
ZWRHbG9iYWxDb2RlQmxvY2s6OnNfaW5mbyA9IHsgIlVubGlua2VkR2xvYmFsQ29kZUJsb2NrIiwg
JkJhc2U6OnNfaW5mbywgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShVbmxpbmtlZEdsb2JhbENvZGVC
bG9jaykgfTsKK2NvbnN0IENsYXNzSW5mbyBVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2s6OnNfaW5m
byA9IHsgIlVubGlua2VkUHJvZ3JhbUNvZGVCbG9jayIsICZCYXNlOjpzX2luZm8sIDAsIENSRUFU
RV9NRVRIT0RfVEFCTEUoVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrKSB9OworY29uc3QgQ2xhc3NJ
bmZvIFVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jazo6c19pbmZvID0geyAiVW5saW5rZWRN
b2R1bGVQcm9ncmFtQ29kZUJsb2NrIiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgQ1JFQVRFX01F
VEhPRF9UQUJMRShVbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2spIH07Citjb25zdCBDbGFz
c0luZm8gVW5saW5rZWRFdmFsQ29kZUJsb2NrOjpzX2luZm8gPSB7ICJVbmxpbmtlZEV2YWxDb2Rl
QmxvY2siLCAmQmFzZTo6c19pbmZvLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKFVubGlua2VkRXZh
bENvZGVCbG9jaykgfTsKK2NvbnN0IENsYXNzSW5mbyBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2Nr
OjpzX2luZm8gPSB7ICJVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrIiwgJkJhc2U6OnNfaW5mbywg
MCwgQ1JFQVRFX01FVEhPRF9UQUJMRShVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKSB9OworCitV
bmxpbmtlZENvZGVCbG9jazo6VW5saW5rZWRDb2RlQmxvY2soVk0qIHZtLCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgQ29kZVR5cGUgY29kZVR5cGUsIGNvbnN0IEV4ZWN1dGFibGVJbmZvJiBpbmZvLCBE
ZWJ1Z2dlck1vZGUgZGVidWdnZXJNb2RlKQorICAgIDogQmFzZSgqdm0sIHN0cnVjdHVyZSkKKyAg
ICAsIG1fbnVtVmFycygwKQorICAgICwgbV9udW1DYWxsZWVMb2NhbHMoMCkKKyAgICAsIG1fbnVt
UGFyYW1ldGVycygwKQorICAgICwgbV9nbG9iYWxPYmplY3RSZWdpc3RlcihWaXJ0dWFsUmVnaXN0
ZXIoKSkKKyAgICAsIG1fdXNlc0V2YWwoaW5mby51c2VzRXZhbCgpKQorICAgICwgbV9pc1N0cmlj
dE1vZGUoaW5mby5pc1N0cmljdE1vZGUoKSkKKyAgICAsIG1faXNDb25zdHJ1Y3RvcihpbmZvLmlz
Q29uc3RydWN0b3IoKSkKKyAgICAsIG1faGFzQ2FwdHVyZWRWYXJpYWJsZXMoZmFsc2UpCisgICAg
LCBtX2lzQnVpbHRpbkZ1bmN0aW9uKGluZm8uaXNCdWlsdGluRnVuY3Rpb24oKSkKKyAgICAsIG1f
c3VwZXJCaW5kaW5nKHN0YXRpY19jYXN0PHVuc2lnbmVkPihpbmZvLnN1cGVyQmluZGluZygpKSkK
KyAgICAsIG1fc2NyaXB0TW9kZShzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaW5mby5zY3JpcHRNb2Rl
KCkpKQorICAgICwgbV9pc0Fycm93RnVuY3Rpb25Db250ZXh0KGluZm8uaXNBcnJvd0Z1bmN0aW9u
Q29udGV4dCgpKQorICAgICwgbV9pc0NsYXNzQ29udGV4dChpbmZvLmlzQ2xhc3NDb250ZXh0KCkp
CisgICAgLCBtX3dhc0NvbXBpbGVkV2l0aERlYnVnZ2luZ09wY29kZXMoZGVidWdnZXJNb2RlID09
IERlYnVnZ2VyTW9kZTo6RGVidWdnZXJPbiB8fCBPcHRpb25zOjpmb3JjZURlYnVnZ2VyQnl0ZWNv
ZGVHZW5lcmF0aW9uKCkpCisgICAgLCBtX2NvbnN0cnVjdG9yS2luZChzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oaW5mby5jb25zdHJ1Y3RvcktpbmQoKSkpCisgICAgLCBtX2Rlcml2ZWRDb250ZXh0VHlw
ZShzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaW5mby5kZXJpdmVkQ29udGV4dFR5cGUoKSkpCisgICAg
LCBtX2V2YWxDb250ZXh0VHlwZShzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaW5mby5ldmFsQ29udGV4
dFR5cGUoKSkpCisgICAgLCBtX2ZpcnN0TGluZSgwKQorICAgICwgbV9saW5lQ291bnQoMCkKKyAg
ICAsIG1fZW5kQ29sdW1uKFVJTlRfTUFYKQorICAgICwgbV9kaWRPcHRpbWl6ZShNaXhlZFRyaVN0
YXRlKQorICAgICwgbV9wYXJzZU1vZGUoaW5mby5wYXJzZU1vZGUoKSkKKyAgICAsIG1fZmVhdHVy
ZXMoMCkKKyAgICAsIG1fY29kZVR5cGUoY29kZVR5cGUpCisgICAgLCBtX2FycmF5UHJvZmlsZUNv
dW50KDApCisgICAgLCBtX2FycmF5QWxsb2NhdGlvblByb2ZpbGVDb3VudCgwKQorICAgICwgbV9v
YmplY3RBbGxvY2F0aW9uUHJvZmlsZUNvdW50KDApCisgICAgLCBtX3ZhbHVlUHJvZmlsZUNvdW50
KDApCisgICAgLCBtX2xsaW50Q2FsbExpbmtJbmZvQ291bnQoMCkKK3sKKyAgICBmb3IgKGF1dG8m
IGNvbnN0YW50UmVnaXN0ZXJJbmRleCA6IG1fbGlua1RpbWVDb25zdGFudHMpCisgICAgICAgIGNv
bnN0YW50UmVnaXN0ZXJJbmRleCA9IDA7CisgICAgQVNTRVJUKG1fY29uc3RydWN0b3JLaW5kID09
IHN0YXRpY19jYXN0PHVuc2lnbmVkPihpbmZvLmNvbnN0cnVjdG9yS2luZCgpKSk7Cit9CisKK3Zv
aWQgVW5saW5rZWRDb2RlQmxvY2s6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90Vmlz
aXRvciYgdmlzaXRvcikKK3sKKyAgICBVbmxpbmtlZENvZGVCbG9jayogdGhpc09iamVjdCA9IGpz
Q2FzdDxVbmxpbmtlZENvZGVCbG9jayo+KGNlbGwpOworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5I
RVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKKyAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNP
YmplY3QsIHZpc2l0b3IpOworICAgIGZvciAoRnVuY3Rpb25FeHByZXNzaW9uVmVjdG9yOjppdGVy
YXRvciBwdHIgPSB0aGlzT2JqZWN0LT5tX2Z1bmN0aW9uRGVjbHMuYmVnaW4oKSwgZW5kID0gdGhp
c09iamVjdC0+bV9mdW5jdGlvbkRlY2xzLmVuZCgpOyBwdHIgIT0gZW5kOyArK3B0cikKKyAgICAg
ICAgdmlzaXRvci5hcHBlbmQocHRyKTsKKyAgICBmb3IgKEZ1bmN0aW9uRXhwcmVzc2lvblZlY3Rv
cjo6aXRlcmF0b3IgcHRyID0gdGhpc09iamVjdC0+bV9mdW5jdGlvbkV4cHJzLmJlZ2luKCksIGVu
ZCA9IHRoaXNPYmplY3QtPm1fZnVuY3Rpb25FeHBycy5lbmQoKTsgcHRyICE9IGVuZDsgKytwdHIp
CisgICAgICAgIHZpc2l0b3IuYXBwZW5kKHB0cik7CisgICAgdmlzaXRvci5hcHBlbmRWYWx1ZXMo
dGhpc09iamVjdC0+bV9jb25zdGFudFJlZ2lzdGVycy5kYXRhKCksIHRoaXNPYmplY3QtPm1fY29u
c3RhbnRSZWdpc3RlcnMuc2l6ZSgpKTsKKyAgICBpZiAodGhpc09iamVjdC0+bV91bmxpbmtlZElu
c3RydWN0aW9ucykKKyAgICAgICAgdmlzaXRvci5yZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQodGhp
c09iamVjdC0+bV91bmxpbmtlZEluc3RydWN0aW9ucy0+c2l6ZUluQnl0ZXMoKSk7CisgICAgaWYg
KHRoaXNPYmplY3QtPm1fcmFyZURhdGEpIHsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDAsIGVu
ZCA9IHRoaXNPYmplY3QtPm1fcmFyZURhdGEtPm1fcmVnZXhwcy5zaXplKCk7IGkgIT0gZW5kOyBp
KyspCisgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9yYXJlRGF0YS0+
bV9yZWdleHBzW2ldKTsKKyAgICB9Cit9CisKK3NpemVfdCBVbmxpbmtlZENvZGVCbG9jazo6ZXN0
aW1hdGVkU2l6ZShKU0NlbGwqIGNlbGwpCit7CisgICAgVW5saW5rZWRDb2RlQmxvY2sqIHRoaXNP
YmplY3QgPSBqc0Nhc3Q8VW5saW5rZWRDb2RlQmxvY2sqPihjZWxsKTsKKyAgICBzaXplX3QgZXh0
cmFTaXplID0gdGhpc09iamVjdC0+bV91bmxpbmtlZEluc3RydWN0aW9ucyA/IHRoaXNPYmplY3Qt
Pm1fdW5saW5rZWRJbnN0cnVjdGlvbnMtPnNpemVJbkJ5dGVzKCkgOiAwOworICAgIHJldHVybiBC
YXNlOjplc3RpbWF0ZWRTaXplKGNlbGwpICsgZXh0cmFTaXplOworfQorCitpbnQgVW5saW5rZWRD
b2RlQmxvY2s6OmxpbmVOdW1iZXJGb3JCeXRlY29kZU9mZnNldCh1bnNpZ25lZCBieXRlY29kZU9m
ZnNldCkKK3sKKyAgICBBU1NFUlQoYnl0ZWNvZGVPZmZzZXQgPCBpbnN0cnVjdGlvbnMoKS5jb3Vu
dCgpKTsKKyAgICBpbnQgZGl2b3Q7CisgICAgaW50IHN0YXJ0T2Zmc2V0OworICAgIGludCBlbmRP
ZmZzZXQ7CisgICAgdW5zaWduZWQgbGluZTsKKyAgICB1bnNpZ25lZCBjb2x1bW47CisgICAgZXhw
cmVzc2lvblJhbmdlRm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQsIGRpdm90LCBzdGFy
dE9mZnNldCwgZW5kT2Zmc2V0LCBsaW5lLCBjb2x1bW4pOworICAgIHJldHVybiBsaW5lOworfQor
CitpbmxpbmUgdm9pZCBVbmxpbmtlZENvZGVCbG9jazo6Z2V0TGluZUFuZENvbHVtbihjb25zdCBF
eHByZXNzaW9uUmFuZ2VJbmZvJiBpbmZvLAorICAgIHVuc2lnbmVkJiBsaW5lLCB1bnNpZ25lZCYg
Y29sdW1uKSBjb25zdAoreworICAgIHN3aXRjaCAoaW5mby5tb2RlKSB7CisgICAgY2FzZSBFeHBy
ZXNzaW9uUmFuZ2VJbmZvOjpGYXRMaW5lTW9kZToKKyAgICAgICAgaW5mby5kZWNvZGVGYXRMaW5l
TW9kZShsaW5lLCBjb2x1bW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEV4cHJlc3Npb25S
YW5nZUluZm86OkZhdENvbHVtbk1vZGU6CisgICAgICAgIGluZm8uZGVjb2RlRmF0Q29sdW1uTW9k
ZShsaW5lLCBjb2x1bW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEV4cHJlc3Npb25SYW5n
ZUluZm86OkZhdExpbmVBbmRDb2x1bW5Nb2RlOiB7CisgICAgICAgIHVuc2lnbmVkIGZhdEluZGV4
ID0gaW5mby5wb3NpdGlvbjsKKyAgICAgICAgRXhwcmVzc2lvblJhbmdlSW5mbzo6RmF0UG9zaXRp
b24mIGZhdFBvcyA9IG1fcmFyZURhdGEtPm1fZXhwcmVzc2lvbkluZm9GYXRQb3NpdGlvbnNbZmF0
SW5kZXhdOworICAgICAgICBsaW5lID0gZmF0UG9zLmxpbmU7CisgICAgICAgIGNvbHVtbiA9IGZh
dFBvcy5jb2x1bW47CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICB9IC8vIHN3aXRjaAorfQor
CisjaWZuZGVmIE5ERUJVRworc3RhdGljIHZvaWQgZHVtcExpbmVDb2x1bW5FbnRyeShzaXplX3Qg
aW5kZXgsIGNvbnN0IFVubGlua2VkSW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3RydWN0aW9uU3RyZWFt
LCB1bnNpZ25lZCBpbnN0cnVjdGlvbk9mZnNldCwgdW5zaWduZWQgbGluZSwgdW5zaWduZWQgY29s
dW1uKQoreworICAgIGNvbnN0IGF1dG8mIGluc3RydWN0aW9ucyA9IGluc3RydWN0aW9uU3RyZWFt
LnVucGFja0ZvckRlYnVnZ2luZygpOworICAgIE9wY29kZUlEIG9wY29kZSA9IGluc3RydWN0aW9u
c1tpbnN0cnVjdGlvbk9mZnNldF0udS5vcGNvZGU7CisgICAgY29uc3QgY2hhciogZXZlbnQgPSAi
IjsKKyAgICBpZiAob3Bjb2RlID09IG9wX2RlYnVnKSB7CisgICAgICAgIHN3aXRjaCAoaW5zdHJ1
Y3Rpb25zW2luc3RydWN0aW9uT2Zmc2V0ICsgMV0udS5vcGVyYW5kKSB7CisgICAgICAgIGNhc2Ug
V2lsbEV4ZWN1dGVQcm9ncmFtOiBldmVudCA9ICIgV2lsbEV4ZWN1dGVQcm9ncmFtIjsgYnJlYWs7
CisgICAgICAgIGNhc2UgRGlkRXhlY3V0ZVByb2dyYW06IGV2ZW50ID0gIiBEaWRFeGVjdXRlUHJv
Z3JhbSI7IGJyZWFrOworICAgICAgICBjYXNlIERpZEVudGVyQ2FsbEZyYW1lOiBldmVudCA9ICIg
RGlkRW50ZXJDYWxsRnJhbWUiOyBicmVhazsKKyAgICAgICAgY2FzZSBEaWRSZWFjaEJyZWFrcG9p
bnQ6IGV2ZW50ID0gIiBEaWRSZWFjaEJyZWFrcG9pbnQiOyBicmVhazsKKyAgICAgICAgY2FzZSBX
aWxsTGVhdmVDYWxsRnJhbWU6IGV2ZW50ID0gIiBXaWxsTGVhdmVDYWxsRnJhbWUiOyBicmVhazsK
KyAgICAgICAgY2FzZSBXaWxsRXhlY3V0ZVN0YXRlbWVudDogZXZlbnQgPSAiIFdpbGxFeGVjdXRl
U3RhdGVtZW50IjsgYnJlYWs7CisgICAgICAgIGNhc2UgV2lsbEV4ZWN1dGVFeHByZXNzaW9uOiBl
dmVudCA9ICIgV2lsbEV4ZWN1dGVFeHByZXNzaW9uIjsgYnJlYWs7CisgICAgICAgIH0KKyAgICB9
CisgICAgZGF0YUxvZ0YoIiAgWyV6dV0gcGMgJXUgQCBsaW5lICV1IGNvbCAldSA6ICVzJXNcbiIs
IGluZGV4LCBpbnN0cnVjdGlvbk9mZnNldCwgbGluZSwgY29sdW1uLCBvcGNvZGVOYW1lc1tvcGNv
ZGVdLCBldmVudCk7Cit9CisKK3ZvaWQgVW5saW5rZWRDb2RlQmxvY2s6OmR1bXBFeHByZXNzaW9u
UmFuZ2VJbmZvKCkKK3sKKyAgICBWZWN0b3I8RXhwcmVzc2lvblJhbmdlSW5mbz4mIGV4cHJlc3Np
b25JbmZvID0gbV9leHByZXNzaW9uSW5mbzsKKworICAgIHNpemVfdCBzaXplID0gbV9leHByZXNz
aW9uSW5mby5zaXplKCk7CisgICAgZGF0YUxvZ0YoIlVubGlua2VkQ29kZUJsb2NrICVwIGV4cHJl
c3Npb25SYW5nZUluZm9bJXp1XSB7XG4iLCB0aGlzLCBzaXplKTsKKyAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IHNpemU7IGkrKykgeworICAgICAgICBFeHByZXNzaW9uUmFuZ2VJbmZvJiBpbmZv
ID0gZXhwcmVzc2lvbkluZm9baV07CisgICAgICAgIHVuc2lnbmVkIGxpbmU7CisgICAgICAgIHVu
c2lnbmVkIGNvbHVtbjsKKyAgICAgICAgZ2V0TGluZUFuZENvbHVtbihpbmZvLCBsaW5lLCBjb2x1
bW4pOworICAgICAgICBkdW1wTGluZUNvbHVtbkVudHJ5KGksIGluc3RydWN0aW9ucygpLCBpbmZv
Lmluc3RydWN0aW9uT2Zmc2V0LCBsaW5lLCBjb2x1bW4pOworICAgIH0KKyAgICBkYXRhTG9nKCJ9
XG4iKTsKK30KKyNlbmRpZgorCit2b2lkIFVubGlua2VkQ29kZUJsb2NrOjpleHByZXNzaW9uUmFu
Z2VGb3JCeXRlY29kZU9mZnNldCh1bnNpZ25lZCBieXRlY29kZU9mZnNldCwKKyAgICBpbnQmIGRp
dm90LCBpbnQmIHN0YXJ0T2Zmc2V0LCBpbnQmIGVuZE9mZnNldCwgdW5zaWduZWQmIGxpbmUsIHVu
c2lnbmVkJiBjb2x1bW4pIGNvbnN0Cit7CisgICAgQVNTRVJUKGJ5dGVjb2RlT2Zmc2V0IDwgaW5z
dHJ1Y3Rpb25zKCkuY291bnQoKSk7CisKKyAgICBpZiAoIW1fZXhwcmVzc2lvbkluZm8uc2l6ZSgp
KSB7CisgICAgICAgIHN0YXJ0T2Zmc2V0ID0gMDsKKyAgICAgICAgZW5kT2Zmc2V0ID0gMDsKKyAg
ICAgICAgZGl2b3QgPSAwOworICAgICAgICBsaW5lID0gMDsKKyAgICAgICAgY29sdW1uID0gMDsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGNvbnN0IFZlY3RvcjxFeHByZXNzaW9uUmFu
Z2VJbmZvPiYgZXhwcmVzc2lvbkluZm8gPSBtX2V4cHJlc3Npb25JbmZvOworCisgICAgaW50IGxv
dyA9IDA7CisgICAgaW50IGhpZ2ggPSBleHByZXNzaW9uSW5mby5zaXplKCk7CisgICAgd2hpbGUg
KGxvdyA8IGhpZ2gpIHsKKyAgICAgICAgaW50IG1pZCA9IGxvdyArIChoaWdoIC0gbG93KSAvIDI7
CisgICAgICAgIGlmIChleHByZXNzaW9uSW5mb1ttaWRdLmluc3RydWN0aW9uT2Zmc2V0IDw9IGJ5
dGVjb2RlT2Zmc2V0KQorICAgICAgICAgICAgbG93ID0gbWlkICsgMTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgaGlnaCA9IG1pZDsKKyAgICB9CisKKyAgICBpZiAoIWxvdykKKyAgICAgICAg
bG93ID0gMTsKKworICAgIGNvbnN0IEV4cHJlc3Npb25SYW5nZUluZm8mIGluZm8gPSBleHByZXNz
aW9uSW5mb1tsb3cgLSAxXTsKKyAgICBzdGFydE9mZnNldCA9IGluZm8uc3RhcnRPZmZzZXQ7Cisg
ICAgZW5kT2Zmc2V0ID0gaW5mby5lbmRPZmZzZXQ7CisgICAgZGl2b3QgPSBpbmZvLmRpdm90UG9p
bnQ7CisgICAgZ2V0TGluZUFuZENvbHVtbihpbmZvLCBsaW5lLCBjb2x1bW4pOworfQorCit2b2lk
IFVubGlua2VkQ29kZUJsb2NrOjphZGRFeHByZXNzaW9uSW5mbyh1bnNpZ25lZCBpbnN0cnVjdGlv
bk9mZnNldCwKKyAgICBpbnQgZGl2b3QsIGludCBzdGFydE9mZnNldCwgaW50IGVuZE9mZnNldCwg
dW5zaWduZWQgbGluZSwgdW5zaWduZWQgY29sdW1uKQoreworICAgIGlmIChkaXZvdCA+IEV4cHJl
c3Npb25SYW5nZUluZm86Ok1heERpdm90KSB7CisgICAgICAgIC8vIE92ZXJmbG93IGhhcyBvY2N1
cnJlZCwgd2UgY2FuIG9ubHkgZ2l2ZSBsaW5lIG51bWJlciBpbmZvIGZvciBlcnJvcnMgZm9yIHRo
aXMgcmVnaW9uCisgICAgICAgIGRpdm90ID0gMDsKKyAgICAgICAgc3RhcnRPZmZzZXQgPSAwOwor
ICAgICAgICBlbmRPZmZzZXQgPSAwOworICAgIH0gZWxzZSBpZiAoc3RhcnRPZmZzZXQgPiBFeHBy
ZXNzaW9uUmFuZ2VJbmZvOjpNYXhPZmZzZXQpIHsKKyAgICAgICAgLy8gSWYgdGhlIHN0YXJ0IG9m
ZnNldCBpcyBvdXQgb2YgYm91bmRzIHdlIGNsZWFyIGJvdGggb2Zmc2V0cworICAgICAgICAvLyBz
byB3ZSBvbmx5IGdldCB0aGUgZGl2b3QgbWFya2VyLiBFcnJvciBtZXNzYWdlIHdpbGwgaGF2ZSB0
byBiZSByZWR1Y2VkCisgICAgICAgIC8vIHRvIGxpbmUgYW5kIGNoYXJQb3NpdGlvbiBudW1iZXIu
CisgICAgICAgIHN0YXJ0T2Zmc2V0ID0gMDsKKyAgICAgICAgZW5kT2Zmc2V0ID0gMDsKKyAgICB9
IGVsc2UgaWYgKGVuZE9mZnNldCA+IEV4cHJlc3Npb25SYW5nZUluZm86Ok1heE9mZnNldCkgewor
ICAgICAgICAvLyBUaGUgZW5kIG9mZnNldCBpcyBvbmx5IHVzZWQgZm9yIGFkZGl0aW9uYWwgY29u
dGV4dCwgYW5kIGlzIG11Y2ggbW9yZSBsaWtlbHkKKyAgICAgICAgLy8gdG8gb3ZlcmZsb3cgKGVn
LiBmdW5jdGlvbiBjYWxsIGFyZ3VtZW50cykgc28gd2UgYXJlIHdpbGxpbmcgdG8gZHJvcCBpdCB3
aXRob3V0CisgICAgICAgIC8vIGRyb3BwaW5nIHRoZSByZXN0IG9mIHRoZSByYW5nZS4KKyAgICAg
ICAgZW5kT2Zmc2V0ID0gMDsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBwb3NpdGlvbk1vZGUgPQor
ICAgICAgICAobGluZSA8PSBFeHByZXNzaW9uUmFuZ2VJbmZvOjpNYXhGYXRMaW5lTW9kZUxpbmUg
JiYgY29sdW1uIDw9IEV4cHJlc3Npb25SYW5nZUluZm86Ok1heEZhdExpbmVNb2RlQ29sdW1uKSAK
KyAgICAgICAgPyBFeHByZXNzaW9uUmFuZ2VJbmZvOjpGYXRMaW5lTW9kZQorICAgICAgICA6IChs
aW5lIDw9IEV4cHJlc3Npb25SYW5nZUluZm86Ok1heEZhdENvbHVtbk1vZGVMaW5lICYmIGNvbHVt
biA8PSBFeHByZXNzaW9uUmFuZ2VJbmZvOjpNYXhGYXRDb2x1bW5Nb2RlQ29sdW1uKQorICAgICAg
ICA/IEV4cHJlc3Npb25SYW5nZUluZm86OkZhdENvbHVtbk1vZGUKKyAgICAgICAgOiBFeHByZXNz
aW9uUmFuZ2VJbmZvOjpGYXRMaW5lQW5kQ29sdW1uTW9kZTsKKworICAgIEV4cHJlc3Npb25SYW5n
ZUluZm8gaW5mbzsKKyAgICBpbmZvLmluc3RydWN0aW9uT2Zmc2V0ID0gaW5zdHJ1Y3Rpb25PZmZz
ZXQ7CisgICAgaW5mby5kaXZvdFBvaW50ID0gZGl2b3Q7CisgICAgaW5mby5zdGFydE9mZnNldCA9
IHN0YXJ0T2Zmc2V0OworICAgIGluZm8uZW5kT2Zmc2V0ID0gZW5kT2Zmc2V0OworCisgICAgaW5m
by5tb2RlID0gcG9zaXRpb25Nb2RlOworICAgIHN3aXRjaCAocG9zaXRpb25Nb2RlKSB7CisgICAg
Y2FzZSBFeHByZXNzaW9uUmFuZ2VJbmZvOjpGYXRMaW5lTW9kZToKKyAgICAgICAgaW5mby5lbmNv
ZGVGYXRMaW5lTW9kZShsaW5lLCBjb2x1bW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEV4
cHJlc3Npb25SYW5nZUluZm86OkZhdENvbHVtbk1vZGU6CisgICAgICAgIGluZm8uZW5jb2RlRmF0
Q29sdW1uTW9kZShsaW5lLCBjb2x1bW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEV4cHJl
c3Npb25SYW5nZUluZm86OkZhdExpbmVBbmRDb2x1bW5Nb2RlOiB7CisgICAgICAgIGNyZWF0ZVJh
cmVEYXRhSWZOZWNlc3NhcnkoKTsKKyAgICAgICAgdW5zaWduZWQgZmF0SW5kZXggPSBtX3JhcmVE
YXRhLT5tX2V4cHJlc3Npb25JbmZvRmF0UG9zaXRpb25zLnNpemUoKTsKKyAgICAgICAgRXhwcmVz
c2lvblJhbmdlSW5mbzo6RmF0UG9zaXRpb24gZmF0UG9zID0geyBsaW5lLCBjb2x1bW4gfTsKKyAg
ICAgICAgbV9yYXJlRGF0YS0+bV9leHByZXNzaW9uSW5mb0ZhdFBvc2l0aW9ucy5hcHBlbmQoZmF0
UG9zKTsKKyAgICAgICAgaW5mby5wb3NpdGlvbiA9IGZhdEluZGV4OworICAgIH0KKyAgICB9IC8v
IHN3aXRjaAorCisgICAgbV9leHByZXNzaW9uSW5mby5hcHBlbmQoaW5mbyk7Cit9CisKK2Jvb2wg
VW5saW5rZWRDb2RlQmxvY2s6OnR5cGVQcm9maWxlckV4cHJlc3Npb25JbmZvRm9yQnl0ZWNvZGVP
ZmZzZXQodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQsIHVuc2lnbmVkJiBzdGFydERpdm90LCB1bnNp
Z25lZCYgZW5kRGl2b3QpCit7CisgICAgc3RhdGljIGNvbnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNl
OworICAgIGlmICghbV9yYXJlRGF0YSkgeworICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAg
ICAgIGRhdGFMb2dGKCJEb24ndCBoYXZlIGFzc2lnbm1lbnQgaW5mbyBmb3Igb2Zmc2V0OiV1XG4i
LCBieXRlY29kZU9mZnNldCk7CisgICAgICAgIHN0YXJ0RGl2b3QgPSBVSU5UX01BWDsKKyAgICAg
ICAgZW5kRGl2b3QgPSBVSU5UX01BWDsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwor
ICAgIGF1dG8gaXRlciA9IG1fcmFyZURhdGEtPm1fdHlwZVByb2ZpbGVySW5mb01hcC5maW5kKGJ5
dGVjb2RlT2Zmc2V0KTsKKyAgICBpZiAoaXRlciA9PSBtX3JhcmVEYXRhLT5tX3R5cGVQcm9maWxl
ckluZm9NYXAuZW5kKCkpIHsKKyAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICBkYXRh
TG9nRigiRG9uJ3QgaGF2ZSBhc3NpZ25tZW50IGluZm8gZm9yIG9mZnNldDoldVxuIiwgYnl0ZWNv
ZGVPZmZzZXQpOworICAgICAgICBzdGFydERpdm90ID0gVUlOVF9NQVg7CisgICAgICAgIGVuZERp
dm90ID0gVUlOVF9NQVg7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAg
UmFyZURhdGE6OlR5cGVQcm9maWxlckV4cHJlc3Npb25SYW5nZSYgcmFuZ2UgPSBpdGVyLT52YWx1
ZTsKKyAgICBzdGFydERpdm90ID0gcmFuZ2UubV9zdGFydERpdm90OworICAgIGVuZERpdm90ID0g
cmFuZ2UubV9lbmREaXZvdDsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBVbmxpbmtlZENv
ZGVCbG9jazo6YWRkVHlwZVByb2ZpbGVyRXhwcmVzc2lvbkluZm8odW5zaWduZWQgaW5zdHJ1Y3Rp
b25PZmZzZXQsIHVuc2lnbmVkIHN0YXJ0RGl2b3QsIHVuc2lnbmVkIGVuZERpdm90KQoreworICAg
IGNyZWF0ZVJhcmVEYXRhSWZOZWNlc3NhcnkoKTsKKyAgICBSYXJlRGF0YTo6VHlwZVByb2ZpbGVy
RXhwcmVzc2lvblJhbmdlIHJhbmdlOworICAgIHJhbmdlLm1fc3RhcnREaXZvdCA9IHN0YXJ0RGl2
b3Q7CisgICAgcmFuZ2UubV9lbmREaXZvdCA9IGVuZERpdm90OworICAgIG1fcmFyZURhdGEtPm1f
dHlwZVByb2ZpbGVySW5mb01hcC5zZXQoaW5zdHJ1Y3Rpb25PZmZzZXQsIHJhbmdlKTsKK30KKwor
dm9pZCBVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2s6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxs
LCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2sq
IHRoaXNPYmplY3QgPSBqc0Nhc3Q8VW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrKj4oY2VsbCk7Cisg
ICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOworICAgIEJh
c2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7Cit9CisKK3ZvaWQgVW5saW5r
ZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xv
dFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgVW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2Nr
KiB0aGlzT2JqZWN0ID0ganNDYXN0PFVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayo+KGNl
bGwpOworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsK
KyAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOworfQorCitVbmxp
bmtlZENvZGVCbG9jazo6flVubGlua2VkQ29kZUJsb2NrKCkKK3sKK30KKwordm9pZCBVbmxpbmtl
ZFByb2dyYW1Db2RlQmxvY2s6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQoreworICAgIGpzQ2FzdDxV
bmxpbmtlZFByb2dyYW1Db2RlQmxvY2sqPihjZWxsKS0+flVubGlua2VkUHJvZ3JhbUNvZGVCbG9j
aygpOworfQorCit2b2lkIFVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jazo6ZGVzdHJveShK
U0NlbGwqIGNlbGwpCit7CisgICAganNDYXN0PFVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9j
ayo+KGNlbGwpLT5+VW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrKCk7Cit9CisKK3ZvaWQg
VW5saW5rZWRFdmFsQ29kZUJsb2NrOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKK3sKKyAgICBqc0Nh
c3Q8VW5saW5rZWRFdmFsQ29kZUJsb2NrKj4oY2VsbCktPn5VbmxpbmtlZEV2YWxDb2RlQmxvY2so
KTsKK30KKwordm9pZCBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrOjpkZXN0cm95KEpTQ2VsbCog
Y2VsbCkKK3sKKyAgICBqc0Nhc3Q8VW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayo+KGNlbGwpLT5+
VW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jaygpOworfQorCit2b2lkIFVubGlua2VkRnVuY3Rpb25F
eGVjdXRhYmxlOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKK3sKKyAgICBqc0Nhc3Q8VW5saW5rZWRG
dW5jdGlvbkV4ZWN1dGFibGUqPihjZWxsKS0+flVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKCk7
Cit9CisKK3ZvaWQgVW5saW5rZWRDb2RlQmxvY2s6OnNldEluc3RydWN0aW9ucyhzdGQ6OnVuaXF1
ZV9wdHI8VW5saW5rZWRJbnN0cnVjdGlvblN0cmVhbT4gaW5zdHJ1Y3Rpb25zKQoreworICAgIEFT
U0VSVChpbnN0cnVjdGlvbnMpOworICAgIG1fdW5saW5rZWRJbnN0cnVjdGlvbnMgPSBXVEZNb3Zl
KGluc3RydWN0aW9ucyk7CisgICAgSGVhcDo6aGVhcCh0aGlzKS0+cmVwb3J0RXh0cmFNZW1vcnlB
bGxvY2F0ZWQobV91bmxpbmtlZEluc3RydWN0aW9ucy0+c2l6ZUluQnl0ZXMoKSk7Cit9CisKK2Nv
bnN0IFVubGlua2VkSW5zdHJ1Y3Rpb25TdHJlYW0mIFVubGlua2VkQ29kZUJsb2NrOjppbnN0cnVj
dGlvbnMoKSBjb25zdAoreworICAgIEFTU0VSVChtX3VubGlua2VkSW5zdHJ1Y3Rpb25zLmdldCgp
KTsKKyAgICByZXR1cm4gKm1fdW5saW5rZWRJbnN0cnVjdGlvbnM7Cit9CisKK1VubGlua2VkSGFu
ZGxlckluZm8qIFVubGlua2VkQ29kZUJsb2NrOjpoYW5kbGVyRm9yQnl0ZWNvZGVPZmZzZXQodW5z
aWduZWQgYnl0ZWNvZGVPZmZzZXQsIFJlcXVpcmVkSGFuZGxlciByZXF1aXJlZEhhbmRsZXIpCit7
CisgICAgcmV0dXJuIGhhbmRsZXJGb3JJbmRleChieXRlY29kZU9mZnNldCwgcmVxdWlyZWRIYW5k
bGVyKTsKK30KKworVW5saW5rZWRIYW5kbGVySW5mbyogVW5saW5rZWRDb2RlQmxvY2s6OmhhbmRs
ZXJGb3JJbmRleCh1bnNpZ25lZCBpbmRleCwgUmVxdWlyZWRIYW5kbGVyIHJlcXVpcmVkSGFuZGxl
cikKK3sKKyAgICBpZiAoIW1fcmFyZURhdGEpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAg
IHJldHVybiBVbmxpbmtlZEhhbmRsZXJJbmZvOjpoYW5kbGVyRm9ySW5kZXgobV9yYXJlRGF0YS0+
bV9leGNlcHRpb25IYW5kbGVycywgaW5kZXgsIHJlcXVpcmVkSGFuZGxlcik7Cit9CisKK3ZvaWQg
VW5saW5rZWRDb2RlQmxvY2s6OmFwcGx5TW9kaWZpY2F0aW9uKEJ5dGVjb2RlUmV3cml0ZXImIHJl
d3JpdGVyKQoreworICAgIC8vIEJlZm9yZSBhcHBseWluZyB0aGUgY2hhbmdlcywgd2UgYWRqdXN0
IHRoZSBqdW1wcyBiYXNlZCBvbiB0aGUgb3JpZ2luYWwgYnl0ZWNvZGUgb2Zmc2V0LCB0aGUgb2Zm
c2V0IHRvIHRoZSBqdW1wIHRhcmdldCwgYW5kCisgICAgLy8gdGhlIGluc2VydGlvbiBpbmZvcm1h
dGlvbi4KKworICAgIEJ5dGVjb2RlR3JhcGg8VW5saW5rZWRDb2RlQmxvY2s+JiBncmFwaCA9IHJl
d3JpdGVyLmdyYXBoKCk7CisgICAgVW5saW5rZWRJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb25zQmVn
aW4gPSBncmFwaC5pbnN0cnVjdGlvbnMoKS5iZWdpbigpOworCisgICAgZm9yIChpbnQgYnl0ZWNv
ZGVPZmZzZXQgPSAwLCBpbnN0cnVjdGlvbkNvdW50ID0gZ3JhcGguaW5zdHJ1Y3Rpb25zKCkuc2l6
ZSgpOyBieXRlY29kZU9mZnNldCA8IGluc3RydWN0aW9uQ291bnQ7KSB7CisgICAgICAgIFVubGlu
a2VkSW5zdHJ1Y3Rpb24qIGN1cnJlbnQgPSBpbnN0cnVjdGlvbnNCZWdpbiArIGJ5dGVjb2RlT2Zm
c2V0OworICAgICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IGN1cnJlbnRbMF0udS5vcGNvZGU7Cisg
ICAgICAgIGV4dHJhY3RTdG9yZWRKdW1wVGFyZ2V0c0ZvckJ5dGVjb2RlT2Zmc2V0KHRoaXMsIHZt
KCktPmludGVycHJldGVyLCBpbnN0cnVjdGlvbnNCZWdpbiwgYnl0ZWNvZGVPZmZzZXQsIFsmXShp
bnQzMl90JiByZWxhdGl2ZU9mZnNldCkgeworICAgICAgICAgICAgcmVsYXRpdmVPZmZzZXQgPSBy
ZXdyaXRlci5hZGp1c3RKdW1wVGFyZ2V0KGJ5dGVjb2RlT2Zmc2V0LCBieXRlY29kZU9mZnNldCAr
IHJlbGF0aXZlT2Zmc2V0KTsKKyAgICAgICAgfSk7CisgICAgICAgIGJ5dGVjb2RlT2Zmc2V0ICs9
IG9wY29kZUxlbmd0aChvcGNvZGVJRCk7CisgICAgfQorCisgICAgLy8gVGhlbiwgZXhjZXB0aW9u
IGhhbmRsZXJzIHNob3VsZCBiZSBhZGp1c3RlZC4KKyAgICBpZiAobV9yYXJlRGF0YSkgeworICAg
ICAgICBmb3IgKFVubGlua2VkSGFuZGxlckluZm8mIGhhbmRsZXIgOiBtX3JhcmVEYXRhLT5tX2V4
Y2VwdGlvbkhhbmRsZXJzKSB7CisgICAgICAgICAgICBoYW5kbGVyLnRhcmdldCA9IHJld3JpdGVy
LmFkanVzdEFic29sdXRlT2Zmc2V0KGhhbmRsZXIudGFyZ2V0KTsKKyAgICAgICAgICAgIGhhbmRs
ZXIuc3RhcnQgPSByZXdyaXRlci5hZGp1c3RBYnNvbHV0ZU9mZnNldChoYW5kbGVyLnN0YXJ0KTsK
KyAgICAgICAgICAgIGhhbmRsZXIuZW5kID0gcmV3cml0ZXIuYWRqdXN0QWJzb2x1dGVPZmZzZXQo
aGFuZGxlci5lbmQpOworICAgICAgICB9CisKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBtX3JhcmVEYXRhLT5tX29wUHJvZmlsZUNvbnRyb2xGbG93Qnl0ZWNvZGVPZmZzZXRzLnNpemUo
KTsgKytpKQorICAgICAgICAgICAgbV9yYXJlRGF0YS0+bV9vcFByb2ZpbGVDb250cm9sRmxvd0J5
dGVjb2RlT2Zmc2V0c1tpXSA9IHJld3JpdGVyLmFkanVzdEFic29sdXRlT2Zmc2V0KG1fcmFyZURh
dGEtPm1fb3BQcm9maWxlQ29udHJvbEZsb3dCeXRlY29kZU9mZnNldHNbaV0pOworCisgICAgICAg
IGlmICghbV9yYXJlRGF0YS0+bV90eXBlUHJvZmlsZXJJbmZvTWFwLmlzRW1wdHkoKSkgeworICAg
ICAgICAgICAgSGFzaE1hcDx1bnNpZ25lZCwgUmFyZURhdGE6OlR5cGVQcm9maWxlckV4cHJlc3Np
b25SYW5nZT4gYWRqdXN0ZWRUeXBlUHJvZmlsZXJJbmZvTWFwOworICAgICAgICAgICAgZm9yIChh
dXRvJiBlbnRyeSA6IG1fcmFyZURhdGEtPm1fdHlwZVByb2ZpbGVySW5mb01hcCkKKyAgICAgICAg
ICAgICAgICBhZGp1c3RlZFR5cGVQcm9maWxlckluZm9NYXAuc2V0KHJld3JpdGVyLmFkanVzdEFi
c29sdXRlT2Zmc2V0KGVudHJ5LmtleSksIGVudHJ5LnZhbHVlKTsKKyAgICAgICAgICAgIG1fcmFy
ZURhdGEtPm1fdHlwZVByb2ZpbGVySW5mb01hcC5zd2FwKGFkanVzdGVkVHlwZVByb2ZpbGVySW5m
b01hcCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1f
cHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbnMuc2l6ZSgpOyArK2kpCisgICAgICAgIG1fcHJvcGVy
dHlBY2Nlc3NJbnN0cnVjdGlvbnNbaV0gPSByZXdyaXRlci5hZGp1c3RBYnNvbHV0ZU9mZnNldCht
X3Byb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25zW2ldKTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbV9leHByZXNzaW9uSW5mby5zaXplKCk7ICsraSkKKyAgICAgICAgbV9leHByZXNzaW9u
SW5mb1tpXS5pbnN0cnVjdGlvbk9mZnNldCA9IHJld3JpdGVyLmFkanVzdEFic29sdXRlT2Zmc2V0
KG1fZXhwcmVzc2lvbkluZm9baV0uaW5zdHJ1Y3Rpb25PZmZzZXQpOworCisgICAgLy8gVGhlbiwg
bW9kaWZ5IHRoZSB1bmxpbmtlZCBpbnN0cnVjdGlvbnMuCisgICAgcmV3cml0ZXIuYXBwbHlNb2Rp
ZmljYXRpb24oKTsKKworICAgIC8vIEFuZCByZWNvbXB1dGUgdGhlIGp1bXAgdGFyZ2V0IGJhc2Vk
IG9uIHRoZSBtb2RpZmllZCB1bmxpbmtlZCBpbnN0cnVjdGlvbnMuCisgICAgbV9qdW1wVGFyZ2V0
cy5jbGVhcigpOworICAgIHJlY29tcHV0ZVByZWNpc2VKdW1wVGFyZ2V0cyh0aGlzLCBncmFwaC5p
bnN0cnVjdGlvbnMoKS5iZWdpbigpLCBncmFwaC5pbnN0cnVjdGlvbnMoKS5zaXplKCksIG1fanVt
cFRhcmdldHMpOworfQorCit9CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9VbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2su
Y3BwCShyZXZpc2lvbiAyMDgzMDgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
VW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQs
Mjk2ICsyNCwxMSBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLQotI2luY2x1ZGUgIlVu
bGlua2VkQ29kZUJsb2NrLmgiCi0KLSNpbmNsdWRlICJCeXRlY29kZUdlbmVyYXRvci5oIgotI2lu
Y2x1ZGUgIkJ5dGVjb2RlUmV3cml0ZXIuaCIKLSNpbmNsdWRlICJDbGFzc0luZm8uaCIKLSNpbmNs
dWRlICJDb2RlQ2FjaGUuaCIKLSNpbmNsdWRlICJFeGVjdXRhYmxlSW5mby5oIgotI2luY2x1ZGUg
IkZ1bmN0aW9uT3ZlcnJpZGVzLmgiCi0jaW5jbHVkZSAiSlNTdHJpbmcuaCIKLSNpbmNsdWRlICJK
U0NJbmxpbmVzLmgiCi0jaW5jbHVkZSAiUGFyc2VyLmgiCi0jaW5jbHVkZSAiUHJlY2lzZUp1bXBU
YXJnZXRzSW5saW5lcy5oIgotI2luY2x1ZGUgIlNvdXJjZVByb3ZpZGVyLmgiCi0jaW5jbHVkZSAi
U3RydWN0dXJlLmgiCi0jaW5jbHVkZSAiU3ltYm9sVGFibGUuaCIKLSNpbmNsdWRlICJVbmxpbmtl
ZEluc3RydWN0aW9uU3RyZWFtLmgiCi0jaW5jbHVkZSA8d3RmL0RhdGFMb2cuaD4KKyNpbmNsdWRl
ICJVbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2suaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAK
LWNvbnN0IENsYXNzSW5mbyBVbmxpbmtlZENvZGVCbG9jazo6c19pbmZvID0geyAiVW5saW5rZWRD
b2RlQmxvY2siLCAwLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKFVubGlua2VkQ29kZUJsb2NrKSB9
OwotY29uc3QgQ2xhc3NJbmZvIFVubGlua2VkR2xvYmFsQ29kZUJsb2NrOjpzX2luZm8gPSB7ICJV
bmxpbmtlZEdsb2JhbENvZGVCbG9jayIsICZCYXNlOjpzX2luZm8sIDAsIENSRUFURV9NRVRIT0Rf
VEFCTEUoVW5saW5rZWRHbG9iYWxDb2RlQmxvY2spIH07Ci1jb25zdCBDbGFzc0luZm8gVW5saW5r
ZWRQcm9ncmFtQ29kZUJsb2NrOjpzX2luZm8gPSB7ICJVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2si
LCAmQmFzZTo6c19pbmZvLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKFVubGlua2VkUHJvZ3JhbUNv
ZGVCbG9jaykgfTsKIGNvbnN0IENsYXNzSW5mbyBVbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxv
Y2s6OnNfaW5mbyA9IHsgIlVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayIsICZCYXNlOjpz
X2luZm8sIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoVW5saW5rZWRNb2R1bGVQcm9ncmFt
Q29kZUJsb2NrKSB9OwotY29uc3QgQ2xhc3NJbmZvIFVubGlua2VkRXZhbENvZGVCbG9jazo6c19p
bmZvID0geyAiVW5saW5rZWRFdmFsQ29kZUJsb2NrIiwgJkJhc2U6OnNfaW5mbywgMCwgQ1JFQVRF
X01FVEhPRF9UQUJMRShVbmxpbmtlZEV2YWxDb2RlQmxvY2spIH07Ci1jb25zdCBDbGFzc0luZm8g
VW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jazo6c19pbmZvID0geyAiVW5saW5rZWRGdW5jdGlvbkNv
ZGVCbG9jayIsICZCYXNlOjpzX2luZm8sIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoVW5saW5rZWRG
dW5jdGlvbkNvZGVCbG9jaykgfTsKLQotVW5saW5rZWRDb2RlQmxvY2s6OlVubGlua2VkQ29kZUJs
b2NrKFZNKiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIENvZGVUeXBlIGNvZGVUeXBlLCBjb25z
dCBFeGVjdXRhYmxlSW5mbyYgaW5mbywgRGVidWdnZXJNb2RlIGRlYnVnZ2VyTW9kZSkKLSAgICA6
IEJhc2UoKnZtLCBzdHJ1Y3R1cmUpCi0gICAgLCBtX251bVZhcnMoMCkKLSAgICAsIG1fbnVtQ2Fs
bGVlTG9jYWxzKDApCi0gICAgLCBtX251bVBhcmFtZXRlcnMoMCkKLSAgICAsIG1fZ2xvYmFsT2Jq
ZWN0UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyKCkpCi0gICAgLCBtX3VzZXNFdmFsKGluZm8udXNl
c0V2YWwoKSkKLSAgICAsIG1faXNTdHJpY3RNb2RlKGluZm8uaXNTdHJpY3RNb2RlKCkpCi0gICAg
LCBtX2lzQ29uc3RydWN0b3IoaW5mby5pc0NvbnN0cnVjdG9yKCkpCi0gICAgLCBtX2hhc0NhcHR1
cmVkVmFyaWFibGVzKGZhbHNlKQotICAgICwgbV9pc0J1aWx0aW5GdW5jdGlvbihpbmZvLmlzQnVp
bHRpbkZ1bmN0aW9uKCkpCi0gICAgLCBtX3N1cGVyQmluZGluZyhzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4oaW5mby5zdXBlckJpbmRpbmcoKSkpCi0gICAgLCBtX3NjcmlwdE1vZGUoc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KGluZm8uc2NyaXB0TW9kZSgpKSkKLSAgICAsIG1faXNBcnJvd0Z1bmN0aW9uQ29u
dGV4dChpbmZvLmlzQXJyb3dGdW5jdGlvbkNvbnRleHQoKSkKLSAgICAsIG1faXNDbGFzc0NvbnRl
eHQoaW5mby5pc0NsYXNzQ29udGV4dCgpKQotICAgICwgbV93YXNDb21waWxlZFdpdGhEZWJ1Z2dp
bmdPcGNvZGVzKGRlYnVnZ2VyTW9kZSA9PSBEZWJ1Z2dlck1vZGU6OkRlYnVnZ2VyT24gfHwgT3B0
aW9uczo6Zm9yY2VEZWJ1Z2dlckJ5dGVjb2RlR2VuZXJhdGlvbigpKQotICAgICwgbV9jb25zdHJ1
Y3RvcktpbmQoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGluZm8uY29uc3RydWN0b3JLaW5kKCkpKQot
ICAgICwgbV9kZXJpdmVkQ29udGV4dFR5cGUoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGluZm8uZGVy
aXZlZENvbnRleHRUeXBlKCkpKQotICAgICwgbV9ldmFsQ29udGV4dFR5cGUoc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KGluZm8uZXZhbENvbnRleHRUeXBlKCkpKQotICAgICwgbV9maXJzdExpbmUoMCkK
LSAgICAsIG1fbGluZUNvdW50KDApCi0gICAgLCBtX2VuZENvbHVtbihVSU5UX01BWCkKLSAgICAs
IG1fZGlkT3B0aW1pemUoTWl4ZWRUcmlTdGF0ZSkKLSAgICAsIG1fcGFyc2VNb2RlKGluZm8ucGFy
c2VNb2RlKCkpCi0gICAgLCBtX2ZlYXR1cmVzKDApCi0gICAgLCBtX2NvZGVUeXBlKGNvZGVUeXBl
KQotICAgICwgbV9hcnJheVByb2ZpbGVDb3VudCgwKQotICAgICwgbV9hcnJheUFsbG9jYXRpb25Q
cm9maWxlQ291bnQoMCkKLSAgICAsIG1fb2JqZWN0QWxsb2NhdGlvblByb2ZpbGVDb3VudCgwKQot
ICAgICwgbV92YWx1ZVByb2ZpbGVDb3VudCgwKQotICAgICwgbV9sbGludENhbGxMaW5rSW5mb0Nv
dW50KDApCi17Ci0gICAgZm9yIChhdXRvJiBjb25zdGFudFJlZ2lzdGVySW5kZXggOiBtX2xpbmtU
aW1lQ29uc3RhbnRzKQotICAgICAgICBjb25zdGFudFJlZ2lzdGVySW5kZXggPSAwOwotICAgIEFT
U0VSVChtX2NvbnN0cnVjdG9yS2luZCA9PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaW5mby5jb25z
dHJ1Y3RvcktpbmQoKSkpOwotfQotCi12b2lkIFVubGlua2VkQ29kZUJsb2NrOjp2aXNpdENoaWxk
cmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCi17Ci0gICAgVW5saW5rZWRD
b2RlQmxvY2sqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8VW5saW5rZWRDb2RlQmxvY2sqPihjZWxsKTsK
LSAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7Ci0gICAg
QmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKLSAgICBmb3IgKEZ1bmN0
aW9uRXhwcmVzc2lvblZlY3Rvcjo6aXRlcmF0b3IgcHRyID0gdGhpc09iamVjdC0+bV9mdW5jdGlv
bkRlY2xzLmJlZ2luKCksIGVuZCA9IHRoaXNPYmplY3QtPm1fZnVuY3Rpb25EZWNscy5lbmQoKTsg
cHRyICE9IGVuZDsgKytwdHIpCi0gICAgICAgIHZpc2l0b3IuYXBwZW5kKHB0cik7Ci0gICAgZm9y
IChGdW5jdGlvbkV4cHJlc3Npb25WZWN0b3I6Oml0ZXJhdG9yIHB0ciA9IHRoaXNPYmplY3QtPm1f
ZnVuY3Rpb25FeHBycy5iZWdpbigpLCBlbmQgPSB0aGlzT2JqZWN0LT5tX2Z1bmN0aW9uRXhwcnMu
ZW5kKCk7IHB0ciAhPSBlbmQ7ICsrcHRyKQotICAgICAgICB2aXNpdG9yLmFwcGVuZChwdHIpOwot
ICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVzKHRoaXNPYmplY3QtPm1fY29uc3RhbnRSZWdpc3RlcnMu
ZGF0YSgpLCB0aGlzT2JqZWN0LT5tX2NvbnN0YW50UmVnaXN0ZXJzLnNpemUoKSk7Ci0gICAgaWYg
KHRoaXNPYmplY3QtPm1fdW5saW5rZWRJbnN0cnVjdGlvbnMpCi0gICAgICAgIHZpc2l0b3IucmVw
b3J0RXh0cmFNZW1vcnlWaXNpdGVkKHRoaXNPYmplY3QtPm1fdW5saW5rZWRJbnN0cnVjdGlvbnMt
PnNpemVJbkJ5dGVzKCkpOwotICAgIGlmICh0aGlzT2JqZWN0LT5tX3JhcmVEYXRhKSB7Ci0gICAg
ICAgIGZvciAoc2l6ZV90IGkgPSAwLCBlbmQgPSB0aGlzT2JqZWN0LT5tX3JhcmVEYXRhLT5tX3Jl
Z2V4cHMuc2l6ZSgpOyBpICE9IGVuZDsgaSsrKQotICAgICAgICAgICAgdmlzaXRvci5hcHBlbmQo
JnRoaXNPYmplY3QtPm1fcmFyZURhdGEtPm1fcmVnZXhwc1tpXSk7Ci0gICAgfQotfQotCi1zaXpl
X3QgVW5saW5rZWRDb2RlQmxvY2s6OmVzdGltYXRlZFNpemUoSlNDZWxsKiBjZWxsKQotewotICAg
IFVubGlua2VkQ29kZUJsb2NrKiB0aGlzT2JqZWN0ID0ganNDYXN0PFVubGlua2VkQ29kZUJsb2Nr
Kj4oY2VsbCk7Ci0gICAgc2l6ZV90IGV4dHJhU2l6ZSA9IHRoaXNPYmplY3QtPm1fdW5saW5rZWRJ
bnN0cnVjdGlvbnMgPyB0aGlzT2JqZWN0LT5tX3VubGlua2VkSW5zdHJ1Y3Rpb25zLT5zaXplSW5C
eXRlcygpIDogMDsKLSAgICByZXR1cm4gQmFzZTo6ZXN0aW1hdGVkU2l6ZShjZWxsKSArIGV4dHJh
U2l6ZTsKLX0KLQotaW50IFVubGlua2VkQ29kZUJsb2NrOjpsaW5lTnVtYmVyRm9yQnl0ZWNvZGVP
ZmZzZXQodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQpCi17Ci0gICAgQVNTRVJUKGJ5dGVjb2RlT2Zm
c2V0IDwgaW5zdHJ1Y3Rpb25zKCkuY291bnQoKSk7Ci0gICAgaW50IGRpdm90OwotICAgIGludCBz
dGFydE9mZnNldDsKLSAgICBpbnQgZW5kT2Zmc2V0OwotICAgIHVuc2lnbmVkIGxpbmU7Ci0gICAg
dW5zaWduZWQgY29sdW1uOwotICAgIGV4cHJlc3Npb25SYW5nZUZvckJ5dGVjb2RlT2Zmc2V0KGJ5
dGVjb2RlT2Zmc2V0LCBkaXZvdCwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCwgbGluZSwgY29sdW1u
KTsKLSAgICByZXR1cm4gbGluZTsKLX0KLQotaW5saW5lIHZvaWQgVW5saW5rZWRDb2RlQmxvY2s6
OmdldExpbmVBbmRDb2x1bW4oY29uc3QgRXhwcmVzc2lvblJhbmdlSW5mbyYgaW5mbywKLSAgICB1
bnNpZ25lZCYgbGluZSwgdW5zaWduZWQmIGNvbHVtbikgY29uc3QKLXsKLSAgICBzd2l0Y2ggKGlu
Zm8ubW9kZSkgewotICAgIGNhc2UgRXhwcmVzc2lvblJhbmdlSW5mbzo6RmF0TGluZU1vZGU6Ci0g
ICAgICAgIGluZm8uZGVjb2RlRmF0TGluZU1vZGUobGluZSwgY29sdW1uKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBFeHByZXNzaW9uUmFuZ2VJbmZvOjpGYXRDb2x1bW5Nb2RlOgotICAgICAg
ICBpbmZvLmRlY29kZUZhdENvbHVtbk1vZGUobGluZSwgY29sdW1uKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBFeHByZXNzaW9uUmFuZ2VJbmZvOjpGYXRMaW5lQW5kQ29sdW1uTW9kZTogewot
ICAgICAgICB1bnNpZ25lZCBmYXRJbmRleCA9IGluZm8ucG9zaXRpb247Ci0gICAgICAgIEV4cHJl
c3Npb25SYW5nZUluZm86OkZhdFBvc2l0aW9uJiBmYXRQb3MgPSBtX3JhcmVEYXRhLT5tX2V4cHJl
c3Npb25JbmZvRmF0UG9zaXRpb25zW2ZhdEluZGV4XTsKLSAgICAgICAgbGluZSA9IGZhdFBvcy5s
aW5lOwotICAgICAgICBjb2x1bW4gPSBmYXRQb3MuY29sdW1uOwotICAgICAgICBicmVhazsKLSAg
ICB9Ci0gICAgfSAvLyBzd2l0Y2gKLX0KLQotI2lmbmRlZiBOREVCVUcKLXN0YXRpYyB2b2lkIGR1
bXBMaW5lQ29sdW1uRW50cnkoc2l6ZV90IGluZGV4LCBjb25zdCBVbmxpbmtlZEluc3RydWN0aW9u
U3RyZWFtJiBpbnN0cnVjdGlvblN0cmVhbSwgdW5zaWduZWQgaW5zdHJ1Y3Rpb25PZmZzZXQsIHVu
c2lnbmVkIGxpbmUsIHVuc2lnbmVkIGNvbHVtbikKLXsKLSAgICBjb25zdCBhdXRvJiBpbnN0cnVj
dGlvbnMgPSBpbnN0cnVjdGlvblN0cmVhbS51bnBhY2tGb3JEZWJ1Z2dpbmcoKTsKLSAgICBPcGNv
ZGVJRCBvcGNvZGUgPSBpbnN0cnVjdGlvbnNbaW5zdHJ1Y3Rpb25PZmZzZXRdLnUub3Bjb2RlOwot
ICAgIGNvbnN0IGNoYXIqIGV2ZW50ID0gIiI7Ci0gICAgaWYgKG9wY29kZSA9PSBvcF9kZWJ1Zykg
ewotICAgICAgICBzd2l0Y2ggKGluc3RydWN0aW9uc1tpbnN0cnVjdGlvbk9mZnNldCArIDFdLnUu
b3BlcmFuZCkgewotICAgICAgICBjYXNlIFdpbGxFeGVjdXRlUHJvZ3JhbTogZXZlbnQgPSAiIFdp
bGxFeGVjdXRlUHJvZ3JhbSI7IGJyZWFrOwotICAgICAgICBjYXNlIERpZEV4ZWN1dGVQcm9ncmFt
OiBldmVudCA9ICIgRGlkRXhlY3V0ZVByb2dyYW0iOyBicmVhazsKLSAgICAgICAgY2FzZSBEaWRF
bnRlckNhbGxGcmFtZTogZXZlbnQgPSAiIERpZEVudGVyQ2FsbEZyYW1lIjsgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgRGlkUmVhY2hCcmVha3BvaW50OiBldmVudCA9ICIgRGlkUmVhY2hCcmVha3BvaW50
IjsgYnJlYWs7Ci0gICAgICAgIGNhc2UgV2lsbExlYXZlQ2FsbEZyYW1lOiBldmVudCA9ICIgV2ls
bExlYXZlQ2FsbEZyYW1lIjsgYnJlYWs7Ci0gICAgICAgIGNhc2UgV2lsbEV4ZWN1dGVTdGF0ZW1l
bnQ6IGV2ZW50ID0gIiBXaWxsRXhlY3V0ZVN0YXRlbWVudCI7IGJyZWFrOwotICAgICAgICBjYXNl
IFdpbGxFeGVjdXRlRXhwcmVzc2lvbjogZXZlbnQgPSAiIFdpbGxFeGVjdXRlRXhwcmVzc2lvbiI7
IGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotICAgIGRhdGFMb2dGKCIgIFslenVdIHBjICV1IEAg
bGluZSAldSBjb2wgJXUgOiAlcyVzXG4iLCBpbmRleCwgaW5zdHJ1Y3Rpb25PZmZzZXQsIGxpbmUs
IGNvbHVtbiwgb3Bjb2RlTmFtZXNbb3Bjb2RlXSwgZXZlbnQpOwotfQotCi12b2lkIFVubGlua2Vk
Q29kZUJsb2NrOjpkdW1wRXhwcmVzc2lvblJhbmdlSW5mbygpCi17Ci0gICAgVmVjdG9yPEV4cHJl
c3Npb25SYW5nZUluZm8+JiBleHByZXNzaW9uSW5mbyA9IG1fZXhwcmVzc2lvbkluZm87Ci0KLSAg
ICBzaXplX3Qgc2l6ZSA9IG1fZXhwcmVzc2lvbkluZm8uc2l6ZSgpOwotICAgIGRhdGFMb2dGKCJV
bmxpbmtlZENvZGVCbG9jayAlcCBleHByZXNzaW9uUmFuZ2VJbmZvWyV6dV0ge1xuIiwgdGhpcywg
c2l6ZSk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKLSAgICAgICAg
RXhwcmVzc2lvblJhbmdlSW5mbyYgaW5mbyA9IGV4cHJlc3Npb25JbmZvW2ldOwotICAgICAgICB1
bnNpZ25lZCBsaW5lOwotICAgICAgICB1bnNpZ25lZCBjb2x1bW47Ci0gICAgICAgIGdldExpbmVB
bmRDb2x1bW4oaW5mbywgbGluZSwgY29sdW1uKTsKLSAgICAgICAgZHVtcExpbmVDb2x1bW5FbnRy
eShpLCBpbnN0cnVjdGlvbnMoKSwgaW5mby5pbnN0cnVjdGlvbk9mZnNldCwgbGluZSwgY29sdW1u
KTsKLSAgICB9Ci0gICAgZGF0YUxvZygifVxuIik7Ci19Ci0jZW5kaWYKLQotdm9pZCBVbmxpbmtl
ZENvZGVCbG9jazo6ZXhwcmVzc2lvblJhbmdlRm9yQnl0ZWNvZGVPZmZzZXQodW5zaWduZWQgYnl0
ZWNvZGVPZmZzZXQsCi0gICAgaW50JiBkaXZvdCwgaW50JiBzdGFydE9mZnNldCwgaW50JiBlbmRP
ZmZzZXQsIHVuc2lnbmVkJiBsaW5lLCB1bnNpZ25lZCYgY29sdW1uKSBjb25zdAotewotICAgIEFT
U0VSVChieXRlY29kZU9mZnNldCA8IGluc3RydWN0aW9ucygpLmNvdW50KCkpOwotCi0gICAgaWYg
KCFtX2V4cHJlc3Npb25JbmZvLnNpemUoKSkgewotICAgICAgICBzdGFydE9mZnNldCA9IDA7Ci0g
ICAgICAgIGVuZE9mZnNldCA9IDA7Ci0gICAgICAgIGRpdm90ID0gMDsKLSAgICAgICAgbGluZSA9
IDA7Ci0gICAgICAgIGNvbHVtbiA9IDA7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBj
b25zdCBWZWN0b3I8RXhwcmVzc2lvblJhbmdlSW5mbz4mIGV4cHJlc3Npb25JbmZvID0gbV9leHBy
ZXNzaW9uSW5mbzsKLQotICAgIGludCBsb3cgPSAwOwotICAgIGludCBoaWdoID0gZXhwcmVzc2lv
bkluZm8uc2l6ZSgpOwotICAgIHdoaWxlIChsb3cgPCBoaWdoKSB7Ci0gICAgICAgIGludCBtaWQg
PSBsb3cgKyAoaGlnaCAtIGxvdykgLyAyOwotICAgICAgICBpZiAoZXhwcmVzc2lvbkluZm9bbWlk
XS5pbnN0cnVjdGlvbk9mZnNldCA8PSBieXRlY29kZU9mZnNldCkKLSAgICAgICAgICAgIGxvdyA9
IG1pZCArIDE7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGhpZ2ggPSBtaWQ7Ci0gICAgfQot
Ci0gICAgaWYgKCFsb3cpCi0gICAgICAgIGxvdyA9IDE7Ci0KLSAgICBjb25zdCBFeHByZXNzaW9u
UmFuZ2VJbmZvJiBpbmZvID0gZXhwcmVzc2lvbkluZm9bbG93IC0gMV07Ci0gICAgc3RhcnRPZmZz
ZXQgPSBpbmZvLnN0YXJ0T2Zmc2V0OwotICAgIGVuZE9mZnNldCA9IGluZm8uZW5kT2Zmc2V0Owot
ICAgIGRpdm90ID0gaW5mby5kaXZvdFBvaW50OwotICAgIGdldExpbmVBbmRDb2x1bW4oaW5mbywg
bGluZSwgY29sdW1uKTsKLX0KLQotdm9pZCBVbmxpbmtlZENvZGVCbG9jazo6YWRkRXhwcmVzc2lv
bkluZm8odW5zaWduZWQgaW5zdHJ1Y3Rpb25PZmZzZXQsCi0gICAgaW50IGRpdm90LCBpbnQgc3Rh
cnRPZmZzZXQsIGludCBlbmRPZmZzZXQsIHVuc2lnbmVkIGxpbmUsIHVuc2lnbmVkIGNvbHVtbikK
LXsKLSAgICBpZiAoZGl2b3QgPiBFeHByZXNzaW9uUmFuZ2VJbmZvOjpNYXhEaXZvdCkgewotICAg
ICAgICAvLyBPdmVyZmxvdyBoYXMgb2NjdXJyZWQsIHdlIGNhbiBvbmx5IGdpdmUgbGluZSBudW1i
ZXIgaW5mbyBmb3IgZXJyb3JzIGZvciB0aGlzIHJlZ2lvbgotICAgICAgICBkaXZvdCA9IDA7Ci0g
ICAgICAgIHN0YXJ0T2Zmc2V0ID0gMDsKLSAgICAgICAgZW5kT2Zmc2V0ID0gMDsKLSAgICB9IGVs
c2UgaWYgKHN0YXJ0T2Zmc2V0ID4gRXhwcmVzc2lvblJhbmdlSW5mbzo6TWF4T2Zmc2V0KSB7Ci0g
ICAgICAgIC8vIElmIHRoZSBzdGFydCBvZmZzZXQgaXMgb3V0IG9mIGJvdW5kcyB3ZSBjbGVhciBi
b3RoIG9mZnNldHMKLSAgICAgICAgLy8gc28gd2Ugb25seSBnZXQgdGhlIGRpdm90IG1hcmtlci4g
RXJyb3IgbWVzc2FnZSB3aWxsIGhhdmUgdG8gYmUgcmVkdWNlZAotICAgICAgICAvLyB0byBsaW5l
IGFuZCBjaGFyUG9zaXRpb24gbnVtYmVyLgotICAgICAgICBzdGFydE9mZnNldCA9IDA7Ci0gICAg
ICAgIGVuZE9mZnNldCA9IDA7Ci0gICAgfSBlbHNlIGlmIChlbmRPZmZzZXQgPiBFeHByZXNzaW9u
UmFuZ2VJbmZvOjpNYXhPZmZzZXQpIHsKLSAgICAgICAgLy8gVGhlIGVuZCBvZmZzZXQgaXMgb25s
eSB1c2VkIGZvciBhZGRpdGlvbmFsIGNvbnRleHQsIGFuZCBpcyBtdWNoIG1vcmUgbGlrZWx5Ci0g
ICAgICAgIC8vIHRvIG92ZXJmbG93IChlZy4gZnVuY3Rpb24gY2FsbCBhcmd1bWVudHMpIHNvIHdl
IGFyZSB3aWxsaW5nIHRvIGRyb3AgaXQgd2l0aG91dAotICAgICAgICAvLyBkcm9wcGluZyB0aGUg
cmVzdCBvZiB0aGUgcmFuZ2UuCi0gICAgICAgIGVuZE9mZnNldCA9IDA7Ci0gICAgfQotCi0gICAg
dW5zaWduZWQgcG9zaXRpb25Nb2RlID0KLSAgICAgICAgKGxpbmUgPD0gRXhwcmVzc2lvblJhbmdl
SW5mbzo6TWF4RmF0TGluZU1vZGVMaW5lICYmIGNvbHVtbiA8PSBFeHByZXNzaW9uUmFuZ2VJbmZv
OjpNYXhGYXRMaW5lTW9kZUNvbHVtbikgCi0gICAgICAgID8gRXhwcmVzc2lvblJhbmdlSW5mbzo6
RmF0TGluZU1vZGUKLSAgICAgICAgOiAobGluZSA8PSBFeHByZXNzaW9uUmFuZ2VJbmZvOjpNYXhG
YXRDb2x1bW5Nb2RlTGluZSAmJiBjb2x1bW4gPD0gRXhwcmVzc2lvblJhbmdlSW5mbzo6TWF4RmF0
Q29sdW1uTW9kZUNvbHVtbikKLSAgICAgICAgPyBFeHByZXNzaW9uUmFuZ2VJbmZvOjpGYXRDb2x1
bW5Nb2RlCi0gICAgICAgIDogRXhwcmVzc2lvblJhbmdlSW5mbzo6RmF0TGluZUFuZENvbHVtbk1v
ZGU7Ci0KLSAgICBFeHByZXNzaW9uUmFuZ2VJbmZvIGluZm87Ci0gICAgaW5mby5pbnN0cnVjdGlv
bk9mZnNldCA9IGluc3RydWN0aW9uT2Zmc2V0OwotICAgIGluZm8uZGl2b3RQb2ludCA9IGRpdm90
OwotICAgIGluZm8uc3RhcnRPZmZzZXQgPSBzdGFydE9mZnNldDsKLSAgICBpbmZvLmVuZE9mZnNl
dCA9IGVuZE9mZnNldDsKLQotICAgIGluZm8ubW9kZSA9IHBvc2l0aW9uTW9kZTsKLSAgICBzd2l0
Y2ggKHBvc2l0aW9uTW9kZSkgewotICAgIGNhc2UgRXhwcmVzc2lvblJhbmdlSW5mbzo6RmF0TGlu
ZU1vZGU6Ci0gICAgICAgIGluZm8uZW5jb2RlRmF0TGluZU1vZGUobGluZSwgY29sdW1uKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBFeHByZXNzaW9uUmFuZ2VJbmZvOjpGYXRDb2x1bW5Nb2Rl
OgotICAgICAgICBpbmZvLmVuY29kZUZhdENvbHVtbk1vZGUobGluZSwgY29sdW1uKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBFeHByZXNzaW9uUmFuZ2VJbmZvOjpGYXRMaW5lQW5kQ29sdW1u
TW9kZTogewotICAgICAgICBjcmVhdGVSYXJlRGF0YUlmTmVjZXNzYXJ5KCk7Ci0gICAgICAgIHVu
c2lnbmVkIGZhdEluZGV4ID0gbV9yYXJlRGF0YS0+bV9leHByZXNzaW9uSW5mb0ZhdFBvc2l0aW9u
cy5zaXplKCk7Ci0gICAgICAgIEV4cHJlc3Npb25SYW5nZUluZm86OkZhdFBvc2l0aW9uIGZhdFBv
cyA9IHsgbGluZSwgY29sdW1uIH07Ci0gICAgICAgIG1fcmFyZURhdGEtPm1fZXhwcmVzc2lvbklu
Zm9GYXRQb3NpdGlvbnMuYXBwZW5kKGZhdFBvcyk7Ci0gICAgICAgIGluZm8ucG9zaXRpb24gPSBm
YXRJbmRleDsKLSAgICB9Ci0gICAgfSAvLyBzd2l0Y2gKLQotICAgIG1fZXhwcmVzc2lvbkluZm8u
YXBwZW5kKGluZm8pOwotfQotCi1ib29sIFVubGlua2VkQ29kZUJsb2NrOjp0eXBlUHJvZmlsZXJF
eHByZXNzaW9uSW5mb0ZvckJ5dGVjb2RlT2Zmc2V0KHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0LCB1
bnNpZ25lZCYgc3RhcnREaXZvdCwgdW5zaWduZWQmIGVuZERpdm90KQotewotICAgIHN0YXRpYyBj
b25zdCBib29sIHZlcmJvc2UgPSBmYWxzZTsKLSAgICBpZiAoIW1fcmFyZURhdGEpIHsKLSAgICAg
ICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAgICBkYXRhTG9nRigiRG9uJ3QgaGF2ZSBhc3NpZ25t
ZW50IGluZm8gZm9yIG9mZnNldDoldVxuIiwgYnl0ZWNvZGVPZmZzZXQpOwotICAgICAgICBzdGFy
dERpdm90ID0gVUlOVF9NQVg7Ci0gICAgICAgIGVuZERpdm90ID0gVUlOVF9NQVg7Ci0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBhdXRvIGl0ZXIgPSBtX3JhcmVEYXRhLT5tX3R5
cGVQcm9maWxlckluZm9NYXAuZmluZChieXRlY29kZU9mZnNldCk7Ci0gICAgaWYgKGl0ZXIgPT0g
bV9yYXJlRGF0YS0+bV90eXBlUHJvZmlsZXJJbmZvTWFwLmVuZCgpKSB7Ci0gICAgICAgIGlmICh2
ZXJib3NlKQotICAgICAgICAgICAgZGF0YUxvZ0YoIkRvbid0IGhhdmUgYXNzaWdubWVudCBpbmZv
IGZvciBvZmZzZXQ6JXVcbiIsIGJ5dGVjb2RlT2Zmc2V0KTsKLSAgICAgICAgc3RhcnREaXZvdCA9
IFVJTlRfTUFYOwotICAgICAgICBlbmREaXZvdCA9IFVJTlRfTUFYOwotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQotICAgIAotICAgIFJhcmVEYXRhOjpUeXBlUHJvZmlsZXJFeHByZXNzaW9u
UmFuZ2UmIHJhbmdlID0gaXRlci0+dmFsdWU7Ci0gICAgc3RhcnREaXZvdCA9IHJhbmdlLm1fc3Rh
cnREaXZvdDsKLSAgICBlbmREaXZvdCA9IHJhbmdlLm1fZW5kRGl2b3Q7Ci0gICAgcmV0dXJuIHRy
dWU7Ci19Ci0KLXZvaWQgVW5saW5rZWRDb2RlQmxvY2s6OmFkZFR5cGVQcm9maWxlckV4cHJlc3Np
b25JbmZvKHVuc2lnbmVkIGluc3RydWN0aW9uT2Zmc2V0LCB1bnNpZ25lZCBzdGFydERpdm90LCB1
bnNpZ25lZCBlbmREaXZvdCkKLXsKLSAgICBjcmVhdGVSYXJlRGF0YUlmTmVjZXNzYXJ5KCk7Ci0g
ICAgUmFyZURhdGE6OlR5cGVQcm9maWxlckV4cHJlc3Npb25SYW5nZSByYW5nZTsKLSAgICByYW5n
ZS5tX3N0YXJ0RGl2b3QgPSBzdGFydERpdm90OwotICAgIHJhbmdlLm1fZW5kRGl2b3QgPSBlbmRE
aXZvdDsKLSAgICBtX3JhcmVEYXRhLT5tX3R5cGVQcm9maWxlckluZm9NYXAuc2V0KGluc3RydWN0
aW9uT2Zmc2V0LCByYW5nZSk7Ci19Ci0KLXZvaWQgVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrOjp2
aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCi17Ci0gICAg
VW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrKiB0aGlzT2JqZWN0ID0ganNDYXN0PFVubGlua2VkUHJv
Z3JhbUNvZGVCbG9jayo+KGNlbGwpOwotICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhp
c09iamVjdCwgaW5mbygpKTsKLSAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZp
c2l0b3IpOwotfQogCiB2b2lkIFVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jazo6dmlzaXRD
aGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewpAQCAtMzIyLDEw
OSArMzcsOSBAQCB2b2lkIFVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jazo6dmlzCiAgICAg
QmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKIH0KIAotVW5saW5rZWRD
b2RlQmxvY2s6On5VbmxpbmtlZENvZGVCbG9jaygpCi17Ci19Ci0KLXZvaWQgVW5saW5rZWRQcm9n
cmFtQ29kZUJsb2NrOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKLXsKLSAgICBqc0Nhc3Q8VW5saW5r
ZWRQcm9ncmFtQ29kZUJsb2NrKj4oY2VsbCktPn5VbmxpbmtlZFByb2dyYW1Db2RlQmxvY2soKTsK
LX0KLQogdm9pZCBVbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2s6OmRlc3Ryb3koSlNDZWxs
KiBjZWxsKQogewogICAgIGpzQ2FzdDxVbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2sqPihj
ZWxsKS0+flVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jaygpOwogfQogCi12b2lkIFVubGlu
a2VkRXZhbENvZGVCbG9jazo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCi17Ci0gICAganNDYXN0PFVu
bGlua2VkRXZhbENvZGVCbG9jayo+KGNlbGwpLT5+VW5saW5rZWRFdmFsQ29kZUJsb2NrKCk7Ci19
Ci0KLXZvaWQgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jazo6ZGVzdHJveShKU0NlbGwqIGNlbGwp
Ci17Ci0gICAganNDYXN0PFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2sqPihjZWxsKS0+flVubGlu
a2VkRnVuY3Rpb25Db2RlQmxvY2soKTsKLX0KLQotdm9pZCBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0
YWJsZTo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCi17Ci0gICAganNDYXN0PFVubGlua2VkRnVuY3Rp
b25FeGVjdXRhYmxlKj4oY2VsbCktPn5VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSgpOwotfQot
Ci12b2lkIFVubGlua2VkQ29kZUJsb2NrOjpzZXRJbnN0cnVjdGlvbnMoc3RkOjp1bmlxdWVfcHRy
PFVubGlua2VkSW5zdHJ1Y3Rpb25TdHJlYW0+IGluc3RydWN0aW9ucykKLXsKLSAgICBBU1NFUlQo
aW5zdHJ1Y3Rpb25zKTsKLSAgICBtX3VubGlua2VkSW5zdHJ1Y3Rpb25zID0gV1RGTW92ZShpbnN0
cnVjdGlvbnMpOwotICAgIEhlYXA6OmhlYXAodGhpcyktPnJlcG9ydEV4dHJhTWVtb3J5QWxsb2Nh
dGVkKG1fdW5saW5rZWRJbnN0cnVjdGlvbnMtPnNpemVJbkJ5dGVzKCkpOwotfQotCi1jb25zdCBV
bmxpbmtlZEluc3RydWN0aW9uU3RyZWFtJiBVbmxpbmtlZENvZGVCbG9jazo6aW5zdHJ1Y3Rpb25z
KCkgY29uc3QKLXsKLSAgICBBU1NFUlQobV91bmxpbmtlZEluc3RydWN0aW9ucy5nZXQoKSk7Ci0g
ICAgcmV0dXJuICptX3VubGlua2VkSW5zdHJ1Y3Rpb25zOwotfQotCi1VbmxpbmtlZEhhbmRsZXJJ
bmZvKiBVbmxpbmtlZENvZGVCbG9jazo6aGFuZGxlckZvckJ5dGVjb2RlT2Zmc2V0KHVuc2lnbmVk
IGJ5dGVjb2RlT2Zmc2V0LCBSZXF1aXJlZEhhbmRsZXIgcmVxdWlyZWRIYW5kbGVyKQotewotICAg
IHJldHVybiBoYW5kbGVyRm9ySW5kZXgoYnl0ZWNvZGVPZmZzZXQsIHJlcXVpcmVkSGFuZGxlcik7
Ci19Ci0KLVVubGlua2VkSGFuZGxlckluZm8qIFVubGlua2VkQ29kZUJsb2NrOjpoYW5kbGVyRm9y
SW5kZXgodW5zaWduZWQgaW5kZXgsIFJlcXVpcmVkSGFuZGxlciByZXF1aXJlZEhhbmRsZXIpCi17
Ci0gICAgaWYgKCFtX3JhcmVEYXRhKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1
cm4gVW5saW5rZWRIYW5kbGVySW5mbzo6aGFuZGxlckZvckluZGV4KG1fcmFyZURhdGEtPm1fZXhj
ZXB0aW9uSGFuZGxlcnMsIGluZGV4LCByZXF1aXJlZEhhbmRsZXIpOwogfQotCi12b2lkIFVubGlu
a2VkQ29kZUJsb2NrOjphcHBseU1vZGlmaWNhdGlvbihCeXRlY29kZVJld3JpdGVyJiByZXdyaXRl
cikKLXsKLSAgICAvLyBCZWZvcmUgYXBwbHlpbmcgdGhlIGNoYW5nZXMsIHdlIGFkanVzdCB0aGUg
anVtcHMgYmFzZWQgb24gdGhlIG9yaWdpbmFsIGJ5dGVjb2RlIG9mZnNldCwgdGhlIG9mZnNldCB0
byB0aGUganVtcCB0YXJnZXQsIGFuZAotICAgIC8vIHRoZSBpbnNlcnRpb24gaW5mb3JtYXRpb24u
Ci0KLSAgICBCeXRlY29kZUdyYXBoPFVubGlua2VkQ29kZUJsb2NrPiYgZ3JhcGggPSByZXdyaXRl
ci5ncmFwaCgpOwotICAgIFVubGlua2VkSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uc0JlZ2luID0g
Z3JhcGguaW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKTsKLQotICAgIGZvciAoaW50IGJ5dGVjb2RlT2Zm
c2V0ID0gMCwgaW5zdHJ1Y3Rpb25Db3VudCA9IGdyYXBoLmluc3RydWN0aW9ucygpLnNpemUoKTsg
Ynl0ZWNvZGVPZmZzZXQgPCBpbnN0cnVjdGlvbkNvdW50OykgewotICAgICAgICBVbmxpbmtlZElu
c3RydWN0aW9uKiBjdXJyZW50ID0gaW5zdHJ1Y3Rpb25zQmVnaW4gKyBieXRlY29kZU9mZnNldDsK
LSAgICAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBjdXJyZW50WzBdLnUub3Bjb2RlOwotICAgICAg
ICBleHRyYWN0U3RvcmVkSnVtcFRhcmdldHNGb3JCeXRlY29kZU9mZnNldCh0aGlzLCB2bSgpLT5p
bnRlcnByZXRlciwgaW5zdHJ1Y3Rpb25zQmVnaW4sIGJ5dGVjb2RlT2Zmc2V0LCBbJl0oaW50MzJf
dCYgcmVsYXRpdmVPZmZzZXQpIHsKLSAgICAgICAgICAgIHJlbGF0aXZlT2Zmc2V0ID0gcmV3cml0
ZXIuYWRqdXN0SnVtcFRhcmdldChieXRlY29kZU9mZnNldCwgYnl0ZWNvZGVPZmZzZXQgKyByZWxh
dGl2ZU9mZnNldCk7Ci0gICAgICAgIH0pOwotICAgICAgICBieXRlY29kZU9mZnNldCArPSBvcGNv
ZGVMZW5ndGgob3Bjb2RlSUQpOwotICAgIH0KLQotICAgIC8vIFRoZW4sIGV4Y2VwdGlvbiBoYW5k
bGVycyBzaG91bGQgYmUgYWRqdXN0ZWQuCi0gICAgaWYgKG1fcmFyZURhdGEpIHsKLSAgICAgICAg
Zm9yIChVbmxpbmtlZEhhbmRsZXJJbmZvJiBoYW5kbGVyIDogbV9yYXJlRGF0YS0+bV9leGNlcHRp
b25IYW5kbGVycykgewotICAgICAgICAgICAgaGFuZGxlci50YXJnZXQgPSByZXdyaXRlci5hZGp1
c3RBYnNvbHV0ZU9mZnNldChoYW5kbGVyLnRhcmdldCk7Ci0gICAgICAgICAgICBoYW5kbGVyLnN0
YXJ0ID0gcmV3cml0ZXIuYWRqdXN0QWJzb2x1dGVPZmZzZXQoaGFuZGxlci5zdGFydCk7Ci0gICAg
ICAgICAgICBoYW5kbGVyLmVuZCA9IHJld3JpdGVyLmFkanVzdEFic29sdXRlT2Zmc2V0KGhhbmRs
ZXIuZW5kKTsKLSAgICAgICAgfQotCi0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9y
YXJlRGF0YS0+bV9vcFByb2ZpbGVDb250cm9sRmxvd0J5dGVjb2RlT2Zmc2V0cy5zaXplKCk7ICsr
aSkKLSAgICAgICAgICAgIG1fcmFyZURhdGEtPm1fb3BQcm9maWxlQ29udHJvbEZsb3dCeXRlY29k
ZU9mZnNldHNbaV0gPSByZXdyaXRlci5hZGp1c3RBYnNvbHV0ZU9mZnNldChtX3JhcmVEYXRhLT5t
X29wUHJvZmlsZUNvbnRyb2xGbG93Qnl0ZWNvZGVPZmZzZXRzW2ldKTsKLQotICAgICAgICBpZiAo
IW1fcmFyZURhdGEtPm1fdHlwZVByb2ZpbGVySW5mb01hcC5pc0VtcHR5KCkpIHsKLSAgICAgICAg
ICAgIEhhc2hNYXA8dW5zaWduZWQsIFJhcmVEYXRhOjpUeXBlUHJvZmlsZXJFeHByZXNzaW9uUmFu
Z2U+IGFkanVzdGVkVHlwZVByb2ZpbGVySW5mb01hcDsKLSAgICAgICAgICAgIGZvciAoYXV0byYg
ZW50cnkgOiBtX3JhcmVEYXRhLT5tX3R5cGVQcm9maWxlckluZm9NYXApCi0gICAgICAgICAgICAg
ICAgYWRqdXN0ZWRUeXBlUHJvZmlsZXJJbmZvTWFwLnNldChyZXdyaXRlci5hZGp1c3RBYnNvbHV0
ZU9mZnNldChlbnRyeS5rZXkpLCBlbnRyeS52YWx1ZSk7Ci0gICAgICAgICAgICBtX3JhcmVEYXRh
LT5tX3R5cGVQcm9maWxlckluZm9NYXAuc3dhcChhZGp1c3RlZFR5cGVQcm9maWxlckluZm9NYXAp
OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3Byb3Bl
cnR5QWNjZXNzSW5zdHJ1Y3Rpb25zLnNpemUoKTsgKytpKQotICAgICAgICBtX3Byb3BlcnR5QWNj
ZXNzSW5zdHJ1Y3Rpb25zW2ldID0gcmV3cml0ZXIuYWRqdXN0QWJzb2x1dGVPZmZzZXQobV9wcm9w
ZXJ0eUFjY2Vzc0luc3RydWN0aW9uc1tpXSk7Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IG1fZXhwcmVzc2lvbkluZm8uc2l6ZSgpOyArK2kpCi0gICAgICAgIG1fZXhwcmVzc2lvbkluZm9b
aV0uaW5zdHJ1Y3Rpb25PZmZzZXQgPSByZXdyaXRlci5hZGp1c3RBYnNvbHV0ZU9mZnNldChtX2V4
cHJlc3Npb25JbmZvW2ldLmluc3RydWN0aW9uT2Zmc2V0KTsKLQotICAgIC8vIFRoZW4sIG1vZGlm
eSB0aGUgdW5saW5rZWQgaW5zdHJ1Y3Rpb25zLgotICAgIHJld3JpdGVyLmFwcGx5TW9kaWZpY2F0
aW9uKCk7Ci0KLSAgICAvLyBBbmQgcmVjb21wdXRlIHRoZSBqdW1wIHRhcmdldCBiYXNlZCBvbiB0
aGUgbW9kaWZpZWQgdW5saW5rZWQgaW5zdHJ1Y3Rpb25zLgotICAgIG1fanVtcFRhcmdldHMuY2xl
YXIoKTsKLSAgICByZWNvbXB1dGVQcmVjaXNlSnVtcFRhcmdldHModGhpcywgZ3JhcGguaW5zdHJ1
Y3Rpb25zKCkuYmVnaW4oKSwgZ3JhcGguaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpLCBtX2p1bXBUYXJn
ZXRzKTsKLX0KLQotfQotCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5s
aW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jay5oCShyZXZp
c2lvbiAyMDgzMDgpCShmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Vbmxpbmtl
ZENvZGVCbG9jay5oOjIwODMwOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9V
bmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDY4NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE2IEFwcGxlIEluYy4gQWxsIFJp
Z2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJCeXRlY29kZUNvbnZlbnRpb25zLmgiCisjaW5j
bHVkZSAiQ29kZVNwZWNpYWxpemF0aW9uS2luZC5oIgorI2luY2x1ZGUgIkNvZGVUeXBlLmgiCisj
aW5jbHVkZSAiQ29uc3RydWN0QWJpbGl0eS5oIgorI2luY2x1ZGUgIkV4cHJlc3Npb25SYW5nZUlu
Zm8uaCIKKyNpbmNsdWRlICJIYW5kbGVySW5mby5oIgorI2luY2x1ZGUgIklkZW50aWZpZXIuaCIK
KyNpbmNsdWRlICJKU0NlbGwuaCIKKyNpbmNsdWRlICJKU1N0cmluZy5oIgorI2luY2x1ZGUgIlBh
cnNlck1vZGVzLmgiCisjaW5jbHVkZSAiUmVnRXhwLmgiCisjaW5jbHVkZSAiU3BlY2lhbFBvaW50
ZXIuaCIKKyNpbmNsdWRlICJVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5oIgorI2luY2x1ZGUg
IlZhcmlhYmxlRW52aXJvbm1lbnQuaCIKKyNpbmNsdWRlICJWaXJ0dWFsUmVnaXN0ZXIuaCIKKyNp
bmNsdWRlIDx3dGYvVHJpU3RhdGUuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVz
cGFjZSBKU0MgeworCitjbGFzcyBCeXRlY29kZVJld3JpdGVyOworY2xhc3MgRGVidWdnZXI7Citj
bGFzcyBGdW5jdGlvbkV4ZWN1dGFibGU7CitjbGFzcyBQYXJzZXJFcnJvcjsKK2NsYXNzIFNjcmlw
dEV4ZWN1dGFibGU7CitjbGFzcyBTb3VyY2VDb2RlOworY2xhc3MgU291cmNlUHJvdmlkZXI7Citj
bGFzcyBVbmxpbmtlZENvZGVCbG9jazsKK2NsYXNzIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2s7
CitjbGFzcyBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTsKK2NsYXNzIFVubGlua2VkSW5zdHJ1
Y3Rpb25TdHJlYW07CitzdHJ1Y3QgRXhlY3V0YWJsZUluZm87CisKK3R5cGVkZWYgdW5zaWduZWQg
VW5saW5rZWRWYWx1ZVByb2ZpbGU7Cit0eXBlZGVmIHVuc2lnbmVkIFVubGlua2VkQXJyYXlQcm9m
aWxlOwordHlwZWRlZiB1bnNpZ25lZCBVbmxpbmtlZEFycmF5QWxsb2NhdGlvblByb2ZpbGU7Cit0
eXBlZGVmIHVuc2lnbmVkIFVubGlua2VkT2JqZWN0QWxsb2NhdGlvblByb2ZpbGU7Cit0eXBlZGVm
IHVuc2lnbmVkIFVubGlua2VkTExJbnRDYWxsTGlua0luZm87CisKK3N0cnVjdCBVbmxpbmtlZFN0
cmluZ0p1bXBUYWJsZSB7CisgICAgc3RydWN0IE9mZnNldExvY2F0aW9uIHsKKyAgICAgICAgaW50
MzJfdCBicmFuY2hPZmZzZXQ7CisgICAgfTsKKworICAgIHR5cGVkZWYgSGFzaE1hcDxSZWZQdHI8
U3RyaW5nSW1wbD4sIE9mZnNldExvY2F0aW9uPiBTdHJpbmdPZmZzZXRUYWJsZTsKKyAgICBTdHJp
bmdPZmZzZXRUYWJsZSBvZmZzZXRUYWJsZTsKKworICAgIGlubGluZSBpbnQzMl90IG9mZnNldEZv
clZhbHVlKFN0cmluZ0ltcGwqIHZhbHVlLCBpbnQzMl90IGRlZmF1bHRPZmZzZXQpCisgICAgewor
ICAgICAgICBTdHJpbmdPZmZzZXRUYWJsZTo6Y29uc3RfaXRlcmF0b3IgZW5kID0gb2Zmc2V0VGFi
bGUuZW5kKCk7CisgICAgICAgIFN0cmluZ09mZnNldFRhYmxlOjpjb25zdF9pdGVyYXRvciBsb2Mg
PSBvZmZzZXRUYWJsZS5maW5kKHZhbHVlKTsKKyAgICAgICAgaWYgKGxvYyA9PSBlbmQpCisgICAg
ICAgICAgICByZXR1cm4gZGVmYXVsdE9mZnNldDsKKyAgICAgICAgcmV0dXJuIGxvYy0+dmFsdWUu
YnJhbmNoT2Zmc2V0OworICAgIH0KKworfTsKKworc3RydWN0IFVubGlua2VkU2ltcGxlSnVtcFRh
YmxlIHsKKyAgICBWZWN0b3I8aW50MzJfdD4gYnJhbmNoT2Zmc2V0czsKKyAgICBpbnQzMl90IG1p
bjsKKworICAgIGludDMyX3Qgb2Zmc2V0Rm9yVmFsdWUoaW50MzJfdCB2YWx1ZSwgaW50MzJfdCBk
ZWZhdWx0T2Zmc2V0KTsKKyAgICB2b2lkIGFkZChpbnQzMl90IGtleSwgaW50MzJfdCBvZmZzZXQp
CisgICAgeworICAgICAgICBpZiAoIWJyYW5jaE9mZnNldHNba2V5XSkKKyAgICAgICAgICAgIGJy
YW5jaE9mZnNldHNba2V5XSA9IG9mZnNldDsKKyAgICB9Cit9OworCitzdHJ1Y3QgVW5saW5rZWRJ
bnN0cnVjdGlvbiB7CisgICAgVW5saW5rZWRJbnN0cnVjdGlvbigpIHsgdS5vcGVyYW5kID0gMDsg
fQorICAgIFVubGlua2VkSW5zdHJ1Y3Rpb24oT3Bjb2RlSUQgb3Bjb2RlKSB7IHUub3Bjb2RlID0g
b3Bjb2RlOyB9CisgICAgVW5saW5rZWRJbnN0cnVjdGlvbihpbnQgb3BlcmFuZCkgeyB1Lm9wZXJh
bmQgPSBvcGVyYW5kOyB9CisgICAgdW5pb24geworICAgICAgICBPcGNvZGVJRCBvcGNvZGU7Cisg
ICAgICAgIGludDMyX3Qgb3BlcmFuZDsKKyAgICAgICAgdW5zaWduZWQgaW5kZXg7CisgICAgfSB1
OworfTsKKworY2xhc3MgVW5saW5rZWRDb2RlQmxvY2sgOiBwdWJsaWMgSlNDZWxsIHsKK3B1Ymxp
YzoKKyAgICB0eXBlZGVmIEpTQ2VsbCBCYXNlOworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBT
dHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzOworCisgICAgc3RhdGljIGNvbnN0
IGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7CisKKyAgICBlbnVtIHsgQ2FsbEZ1bmN0aW9u
LCBBcHBseUZ1bmN0aW9uIH07CisKKyAgICB0eXBlZGVmIFVubGlua2VkSW5zdHJ1Y3Rpb24gSW5z
dHJ1Y3Rpb247CisgICAgdHlwZWRlZiBWZWN0b3I8VW5saW5rZWRJbnN0cnVjdGlvbiwgMCwgVW5z
YWZlVmVjdG9yT3ZlcmZsb3c+IFVucGFja2VkSW5zdHJ1Y3Rpb25zOworCisgICAgYm9vbCBpc0Nv
bnN0cnVjdG9yKCkgY29uc3QgeyByZXR1cm4gbV9pc0NvbnN0cnVjdG9yOyB9CisgICAgYm9vbCBp
c1N0cmljdE1vZGUoKSBjb25zdCB7IHJldHVybiBtX2lzU3RyaWN0TW9kZTsgfQorICAgIGJvb2wg
dXNlc0V2YWwoKSBjb25zdCB7IHJldHVybiBtX3VzZXNFdmFsOyB9CisgICAgU291cmNlUGFyc2VN
b2RlIHBhcnNlTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyc2VNb2RlOyB9CisgICAgYm9vbCBp
c0Fycm93RnVuY3Rpb24oKSBjb25zdCB7IHJldHVybiBpc0Fycm93RnVuY3Rpb25QYXJzZU1vZGUo
cGFyc2VNb2RlKCkpOyB9CisgICAgRGVyaXZlZENvbnRleHRUeXBlIGRlcml2ZWRDb250ZXh0VHlw
ZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PERlcml2ZWRDb250ZXh0VHlwZT4obV9kZXJp
dmVkQ29udGV4dFR5cGUpOyB9CisgICAgRXZhbENvbnRleHRUeXBlIGV2YWxDb250ZXh0VHlwZSgp
IGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEV2YWxDb250ZXh0VHlwZT4obV9ldmFsQ29udGV4
dFR5cGUpOyB9CisgICAgYm9vbCBpc0Fycm93RnVuY3Rpb25Db250ZXh0KCkgY29uc3QgeyByZXR1
cm4gbV9pc0Fycm93RnVuY3Rpb25Db250ZXh0OyB9CisgICAgYm9vbCBpc0NsYXNzQ29udGV4dCgp
IGNvbnN0IHsgcmV0dXJuIG1faXNDbGFzc0NvbnRleHQ7IH0KKworICAgIHZvaWQgYWRkRXhwcmVz
c2lvbkluZm8odW5zaWduZWQgaW5zdHJ1Y3Rpb25PZmZzZXQsIGludCBkaXZvdCwKKyAgICAgICAg
aW50IHN0YXJ0T2Zmc2V0LCBpbnQgZW5kT2Zmc2V0LCB1bnNpZ25lZCBsaW5lLCB1bnNpZ25lZCBj
b2x1bW4pOworCisgICAgdm9pZCBhZGRUeXBlUHJvZmlsZXJFeHByZXNzaW9uSW5mbyh1bnNpZ25l
ZCBpbnN0cnVjdGlvbk9mZnNldCwgdW5zaWduZWQgc3RhcnREaXZvdCwgdW5zaWduZWQgZW5kRGl2
b3QpOworCisgICAgYm9vbCBoYXNFeHByZXNzaW9uSW5mbygpIHsgcmV0dXJuIG1fZXhwcmVzc2lv
bkluZm8uc2l6ZSgpOyB9CisgICAgY29uc3QgVmVjdG9yPEV4cHJlc3Npb25SYW5nZUluZm8+JiBl
eHByZXNzaW9uSW5mbygpIHsgcmV0dXJuIG1fZXhwcmVzc2lvbkluZm87IH0KKworICAgIC8vIFNw
ZWNpYWwgcmVnaXN0ZXJzCisgICAgdm9pZCBzZXRUaGlzUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVy
IHRoaXNSZWdpc3RlcikgeyBtX3RoaXNSZWdpc3RlciA9IHRoaXNSZWdpc3RlcjsgfQorICAgIHZv
aWQgc2V0U2NvcGVSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgc2NvcGVSZWdpc3RlcikgeyBtX3Nj
b3BlUmVnaXN0ZXIgPSBzY29wZVJlZ2lzdGVyOyB9CisKKyAgICBib29sIHVzZXNHbG9iYWxPYmpl
Y3QoKSBjb25zdCB7IHJldHVybiBtX2dsb2JhbE9iamVjdFJlZ2lzdGVyLmlzVmFsaWQoKTsgfQor
ICAgIHZvaWQgc2V0R2xvYmFsT2JqZWN0UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIGdsb2JhbE9i
amVjdFJlZ2lzdGVyKSB7IG1fZ2xvYmFsT2JqZWN0UmVnaXN0ZXIgPSBnbG9iYWxPYmplY3RSZWdp
c3RlcjsgfQorICAgIFZpcnR1YWxSZWdpc3RlciBnbG9iYWxPYmplY3RSZWdpc3RlcigpIGNvbnN0
IHsgcmV0dXJuIG1fZ2xvYmFsT2JqZWN0UmVnaXN0ZXI7IH0KKworICAgIC8vIFBhcmFtZXRlciBp
bmZvcm1hdGlvbgorICAgIHZvaWQgc2V0TnVtUGFyYW1ldGVycyhpbnQgbmV3VmFsdWUpIHsgbV9u
dW1QYXJhbWV0ZXJzID0gbmV3VmFsdWU7IH0KKyAgICB2b2lkIGFkZFBhcmFtZXRlcigpIHsgbV9u
dW1QYXJhbWV0ZXJzKys7IH0KKyAgICB1bnNpZ25lZCBudW1QYXJhbWV0ZXJzKCkgY29uc3QgeyBy
ZXR1cm4gbV9udW1QYXJhbWV0ZXJzOyB9CisKKyAgICB1bnNpZ25lZCBhZGRSZWdFeHAoUmVnRXhw
KiByKQorICAgIHsKKyAgICAgICAgY3JlYXRlUmFyZURhdGFJZk5lY2Vzc2FyeSgpOworICAgICAg
ICB1bnNpZ25lZCBzaXplID0gbV9yYXJlRGF0YS0+bV9yZWdleHBzLnNpemUoKTsKKyAgICAgICAg
bV9yYXJlRGF0YS0+bV9yZWdleHBzLmFwcGVuZChXcml0ZUJhcnJpZXI8UmVnRXhwPigqdm0oKSwg
dGhpcywgcikpOworICAgICAgICByZXR1cm4gc2l6ZTsKKyAgICB9CisgICAgdW5zaWduZWQgbnVt
YmVyT2ZSZWdFeHBzKCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmICghbV9yYXJlRGF0YSkKKyAg
ICAgICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gbV9yYXJlRGF0YS0+bV9yZWdleHBz
LnNpemUoKTsKKyAgICB9CisgICAgUmVnRXhwKiByZWdleHAoaW50IGluZGV4KSBjb25zdCB7IEFT
U0VSVChtX3JhcmVEYXRhKTsgcmV0dXJuIG1fcmFyZURhdGEtPm1fcmVnZXhwc1tpbmRleF0uZ2V0
KCk7IH0KKworICAgIC8vIENvbnN0YW50IFBvb2xzCisKKyAgICBzaXplX3QgbnVtYmVyT2ZJZGVu
dGlmaWVycygpIGNvbnN0IHsgcmV0dXJuIG1faWRlbnRpZmllcnMuc2l6ZSgpOyB9CisgICAgdm9p
ZCBhZGRJZGVudGlmaWVyKGNvbnN0IElkZW50aWZpZXImIGkpIHsgcmV0dXJuIG1faWRlbnRpZmll
cnMuYXBwZW5kKGkpOyB9CisgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnRpZmllcihpbnQgaW5k
ZXgpIGNvbnN0IHsgcmV0dXJuIG1faWRlbnRpZmllcnNbaW5kZXhdOyB9CisgICAgY29uc3QgVmVj
dG9yPElkZW50aWZpZXI+JiBpZGVudGlmaWVycygpIGNvbnN0IHsgcmV0dXJuIG1faWRlbnRpZmll
cnM7IH0KKworICAgIHVuc2lnbmVkIGFkZENvbnN0YW50KEpTVmFsdWUgdiwgU291cmNlQ29kZVJl
cHJlc2VudGF0aW9uIHNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbiA9IFNvdXJjZUNvZGVSZXByZXNl
bnRhdGlvbjo6T3RoZXIpCisgICAgeworICAgICAgICB1bnNpZ25lZCByZXN1bHQgPSBtX2NvbnN0
YW50UmVnaXN0ZXJzLnNpemUoKTsKKyAgICAgICAgbV9jb25zdGFudFJlZ2lzdGVycy5hcHBlbmQo
V3JpdGVCYXJyaWVyPFVua25vd24+KCkpOworICAgICAgICBtX2NvbnN0YW50UmVnaXN0ZXJzLmxh
c3QoKS5zZXQoKnZtKCksIHRoaXMsIHYpOworICAgICAgICBtX2NvbnN0YW50c1NvdXJjZUNvZGVS
ZXByZXNlbnRhdGlvbi5hcHBlbmQoc291cmNlQ29kZVJlcHJlc2VudGF0aW9uKTsKKyAgICAgICAg
cmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgdW5zaWduZWQgYWRkQ29uc3RhbnQoTGlua1RpbWVD
b25zdGFudCB0eXBlKQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgcmVzdWx0ID0gbV9jb25zdGFu
dFJlZ2lzdGVycy5zaXplKCk7CisgICAgICAgIEFTU0VSVChyZXN1bHQpOworICAgICAgICB1bnNp
Z25lZCBpbmRleCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPih0eXBlKTsKKyAgICAgICAgQVNTRVJU
KGluZGV4IDwgTGlua1RpbWVDb25zdGFudENvdW50KTsKKyAgICAgICAgbV9saW5rVGltZUNvbnN0
YW50c1tpbmRleF0gPSByZXN1bHQ7CisgICAgICAgIG1fY29uc3RhbnRSZWdpc3RlcnMuYXBwZW5k
KFdyaXRlQmFycmllcjxVbmtub3duPigpKTsKKyAgICAgICAgbV9jb25zdGFudHNTb3VyY2VDb2Rl
UmVwcmVzZW50YXRpb24uYXBwZW5kKFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6T3RoZXIpOwor
ICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICB1bnNpZ25lZCByZWdpc3RlckluZGV4
Rm9yTGlua1RpbWVDb25zdGFudChMaW5rVGltZUNvbnN0YW50IHR5cGUpCisgICAgeworICAgICAg
ICB1bnNpZ25lZCBpbmRleCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPih0eXBlKTsKKyAgICAgICAg
QVNTRVJUKGluZGV4IDwgTGlua1RpbWVDb25zdGFudENvdW50KTsKKyAgICAgICAgcmV0dXJuIG1f
bGlua1RpbWVDb25zdGFudHNbaW5kZXhdOworICAgIH0KKyAgICBjb25zdCBWZWN0b3I8V3JpdGVC
YXJyaWVyPFVua25vd24+PiYgY29uc3RhbnRSZWdpc3RlcnMoKSB7IHJldHVybiBtX2NvbnN0YW50
UmVnaXN0ZXJzOyB9CisgICAgY29uc3QgV3JpdGVCYXJyaWVyPFVua25vd24+JiBjb25zdGFudFJl
Z2lzdGVyKGludCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tpbmRl
eCAtIEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4XTsgfQorICAgIEFMV0FZU19JTkxJTkUgYm9v
bCBpc0NvbnN0YW50UmVnaXN0ZXJJbmRleChpbnQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGluZGV4
ID49IEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4OyB9CisgICAgY29uc3QgVmVjdG9yPFNvdXJj
ZUNvZGVSZXByZXNlbnRhdGlvbj4mIGNvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbigp
IHsgcmV0dXJuIG1fY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOyB9CisKKyAgICAv
LyBKdW1wcworICAgIHNpemVfdCBudW1iZXJPZkp1bXBUYXJnZXRzKCkgY29uc3QgeyByZXR1cm4g
bV9qdW1wVGFyZ2V0cy5zaXplKCk7IH0KKyAgICB2b2lkIGFkZEp1bXBUYXJnZXQodW5zaWduZWQg
anVtcFRhcmdldCkgeyBtX2p1bXBUYXJnZXRzLmFwcGVuZChqdW1wVGFyZ2V0KTsgfQorICAgIHVu
c2lnbmVkIGp1bXBUYXJnZXQoaW50IGluZGV4KSBjb25zdCB7IHJldHVybiBtX2p1bXBUYXJnZXRz
W2luZGV4XTsgfQorICAgIHVuc2lnbmVkIGxhc3RKdW1wVGFyZ2V0KCkgY29uc3QgeyByZXR1cm4g
bV9qdW1wVGFyZ2V0cy5sYXN0KCk7IH0KKworICAgIFVubGlua2VkSGFuZGxlckluZm8qIGhhbmRs
ZXJGb3JCeXRlY29kZU9mZnNldCh1bnNpZ25lZCBieXRlY29kZU9mZnNldCwgUmVxdWlyZWRIYW5k
bGVyID0gUmVxdWlyZWRIYW5kbGVyOjpBbnlIYW5kbGVyKTsKKyAgICBVbmxpbmtlZEhhbmRsZXJJ
bmZvKiBoYW5kbGVyRm9ySW5kZXgodW5zaWduZWQsIFJlcXVpcmVkSGFuZGxlciA9IFJlcXVpcmVk
SGFuZGxlcjo6QW55SGFuZGxlcik7CisKKyAgICBib29sIGlzQnVpbHRpbkZ1bmN0aW9uKCkgY29u
c3QgeyByZXR1cm4gbV9pc0J1aWx0aW5GdW5jdGlvbjsgfQorCisgICAgQ29uc3RydWN0b3JLaW5k
IGNvbnN0cnVjdG9yS2luZCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PENvbnN0cnVjdG9y
S2luZD4obV9jb25zdHJ1Y3RvcktpbmQpOyB9CisgICAgU3VwZXJCaW5kaW5nIHN1cGVyQmluZGlu
ZygpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFN1cGVyQmluZGluZz4obV9zdXBlckJpbmRp
bmcpOyB9CisgICAgSlNQYXJzZXJTY3JpcHRNb2RlIHNjcmlwdE1vZGUoKSBjb25zdCB7IHJldHVy
biBzdGF0aWNfY2FzdDxKU1BhcnNlclNjcmlwdE1vZGU+KG1fc2NyaXB0TW9kZSk7IH0KKworICAg
IHZvaWQgc2hyaW5rVG9GaXQoKQorICAgIHsKKyAgICAgICAgbV9qdW1wVGFyZ2V0cy5zaHJpbmtU
b0ZpdCgpOworICAgICAgICBtX2lkZW50aWZpZXJzLnNocmlua1RvRml0KCk7CisgICAgICAgIG1f
Y29uc3RhbnRSZWdpc3RlcnMuc2hyaW5rVG9GaXQoKTsKKyAgICAgICAgbV9jb25zdGFudHNTb3Vy
Y2VDb2RlUmVwcmVzZW50YXRpb24uc2hyaW5rVG9GaXQoKTsKKyAgICAgICAgbV9mdW5jdGlvbkRl
Y2xzLnNocmlua1RvRml0KCk7CisgICAgICAgIG1fZnVuY3Rpb25FeHBycy5zaHJpbmtUb0ZpdCgp
OworICAgICAgICBtX3Byb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25zLnNocmlua1RvRml0KCk7Cisg
ICAgICAgIG1fZXhwcmVzc2lvbkluZm8uc2hyaW5rVG9GaXQoKTsKKworICAgICAgICBpZiAobV9y
YXJlRGF0YSkgeworICAgICAgICAgICAgbV9yYXJlRGF0YS0+bV9leGNlcHRpb25IYW5kbGVycy5z
aHJpbmtUb0ZpdCgpOworICAgICAgICAgICAgbV9yYXJlRGF0YS0+bV9yZWdleHBzLnNocmlua1Rv
Rml0KCk7CisgICAgICAgICAgICBtX3JhcmVEYXRhLT5tX2NvbnN0YW50QnVmZmVycy5zaHJpbmtU
b0ZpdCgpOworICAgICAgICAgICAgbV9yYXJlRGF0YS0+bV9zd2l0Y2hKdW1wVGFibGVzLnNocmlu
a1RvRml0KCk7CisgICAgICAgICAgICBtX3JhcmVEYXRhLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJs
ZXMuc2hyaW5rVG9GaXQoKTsKKyAgICAgICAgICAgIG1fcmFyZURhdGEtPm1fZXhwcmVzc2lvbklu
Zm9GYXRQb3NpdGlvbnMuc2hyaW5rVG9GaXQoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZv
aWQgc2V0SW5zdHJ1Y3Rpb25zKHN0ZDo6dW5pcXVlX3B0cjxVbmxpbmtlZEluc3RydWN0aW9uU3Ry
ZWFtPik7CisgICAgY29uc3QgVW5saW5rZWRJbnN0cnVjdGlvblN0cmVhbSYgaW5zdHJ1Y3Rpb25z
KCkgY29uc3Q7CisKKyAgICBpbnQgbnVtQ2FsbGVlTG9jYWxzKCkgY29uc3QgeyByZXR1cm4gbV9u
dW1DYWxsZWVMb2NhbHM7IH0KKworICAgIGludCBtX251bVZhcnM7CisgICAgaW50IG1fbnVtQ2Fw
dHVyZWRWYXJzOworICAgIGludCBtX251bUNhbGxlZUxvY2FsczsKKworICAgIC8vIEp1bXAgVGFi
bGVzCisKKyAgICBzaXplX3QgbnVtYmVyT2ZTd2l0Y2hKdW1wVGFibGVzKCkgY29uc3QgeyByZXR1
cm4gbV9yYXJlRGF0YSA/IG1fcmFyZURhdGEtPm1fc3dpdGNoSnVtcFRhYmxlcy5zaXplKCkgOiAw
OyB9CisgICAgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUmIGFkZFN3aXRjaEp1bXBUYWJsZSgpIHsg
Y3JlYXRlUmFyZURhdGFJZk5lY2Vzc2FyeSgpOyBtX3JhcmVEYXRhLT5tX3N3aXRjaEp1bXBUYWJs
ZXMuYXBwZW5kKFVubGlua2VkU2ltcGxlSnVtcFRhYmxlKCkpOyByZXR1cm4gbV9yYXJlRGF0YS0+
bV9zd2l0Y2hKdW1wVGFibGVzLmxhc3QoKTsgfQorICAgIFVubGlua2VkU2ltcGxlSnVtcFRhYmxl
JiBzd2l0Y2hKdW1wVGFibGUoaW50IHRhYmxlSW5kZXgpIHsgQVNTRVJUKG1fcmFyZURhdGEpOyBy
ZXR1cm4gbV9yYXJlRGF0YS0+bV9zd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOyB9CisKKyAg
ICBzaXplX3QgbnVtYmVyT2ZTdHJpbmdTd2l0Y2hKdW1wVGFibGVzKCkgY29uc3QgeyByZXR1cm4g
bV9yYXJlRGF0YSA/IG1fcmFyZURhdGEtPm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcy5zaXplKCkg
OiAwOyB9CisgICAgVW5saW5rZWRTdHJpbmdKdW1wVGFibGUmIGFkZFN0cmluZ1N3aXRjaEp1bXBU
YWJsZSgpIHsgY3JlYXRlUmFyZURhdGFJZk5lY2Vzc2FyeSgpOyBtX3JhcmVEYXRhLT5tX3N0cmlu
Z1N3aXRjaEp1bXBUYWJsZXMuYXBwZW5kKFVubGlua2VkU3RyaW5nSnVtcFRhYmxlKCkpOyByZXR1
cm4gbV9yYXJlRGF0YS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzLmxhc3QoKTsgfQorICAgIFVu
bGlua2VkU3RyaW5nSnVtcFRhYmxlJiBzdHJpbmdTd2l0Y2hKdW1wVGFibGUoaW50IHRhYmxlSW5k
ZXgpIHsgQVNTRVJUKG1fcmFyZURhdGEpOyByZXR1cm4gbV9yYXJlRGF0YS0+bV9zdHJpbmdTd2l0
Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOyB9CisKKyAgICB1bnNpZ25lZCBhZGRGdW5jdGlvbkRl
Y2woVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIG4pCisgICAgeworICAgICAgICB1bnNpZ25l
ZCBzaXplID0gbV9mdW5jdGlvbkRlY2xzLnNpemUoKTsKKyAgICAgICAgbV9mdW5jdGlvbkRlY2xz
LmFwcGVuZChXcml0ZUJhcnJpZXI8VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU+KCkpOworICAg
ICAgICBtX2Z1bmN0aW9uRGVjbHMubGFzdCgpLnNldCgqdm0oKSwgdGhpcywgbik7CisgICAgICAg
IHJldHVybiBzaXplOworICAgIH0KKyAgICBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVu
Y3Rpb25EZWNsKGludCBpbmRleCkgeyByZXR1cm4gbV9mdW5jdGlvbkRlY2xzW2luZGV4XS5nZXQo
KTsgfQorICAgIHNpemVfdCBudW1iZXJPZkZ1bmN0aW9uRGVjbHMoKSB7IHJldHVybiBtX2Z1bmN0
aW9uRGVjbHMuc2l6ZSgpOyB9CisgICAgdW5zaWduZWQgYWRkRnVuY3Rpb25FeHByKFVubGlua2Vk
RnVuY3Rpb25FeGVjdXRhYmxlKiBuKQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgc2l6ZSA9IG1f
ZnVuY3Rpb25FeHBycy5zaXplKCk7CisgICAgICAgIG1fZnVuY3Rpb25FeHBycy5hcHBlbmQoV3Jp
dGVCYXJyaWVyPFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlPigpKTsKKyAgICAgICAgbV9mdW5j
dGlvbkV4cHJzLmxhc3QoKS5zZXQoKnZtKCksIHRoaXMsIG4pOworICAgICAgICByZXR1cm4gc2l6
ZTsKKyAgICB9CisgICAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uRXhwcihp
bnQgaW5kZXgpIHsgcmV0dXJuIG1fZnVuY3Rpb25FeHByc1tpbmRleF0uZ2V0KCk7IH0KKyAgICBz
aXplX3QgbnVtYmVyT2ZGdW5jdGlvbkV4cHJzKCkgeyByZXR1cm4gbV9mdW5jdGlvbkV4cHJzLnNp
emUoKTsgfQorCisgICAgLy8gRXhjZXB0aW9uIGhhbmRsaW5nIHN1cHBvcnQKKyAgICBzaXplX3Qg
bnVtYmVyT2ZFeGNlcHRpb25IYW5kbGVycygpIGNvbnN0IHsgcmV0dXJuIG1fcmFyZURhdGEgPyBt
X3JhcmVEYXRhLT5tX2V4Y2VwdGlvbkhhbmRsZXJzLnNpemUoKSA6IDA7IH0KKyAgICB2b2lkIGFk
ZEV4Y2VwdGlvbkhhbmRsZXIoY29uc3QgVW5saW5rZWRIYW5kbGVySW5mbyYgaGFuZGxlcikgeyBj
cmVhdGVSYXJlRGF0YUlmTmVjZXNzYXJ5KCk7IHJldHVybiBtX3JhcmVEYXRhLT5tX2V4Y2VwdGlv
bkhhbmRsZXJzLmFwcGVuZChoYW5kbGVyKTsgfQorICAgIFVubGlua2VkSGFuZGxlckluZm8mIGV4
Y2VwdGlvbkhhbmRsZXIoaW50IGluZGV4KSB7IEFTU0VSVChtX3JhcmVEYXRhKTsgcmV0dXJuIG1f
cmFyZURhdGEtPm1fZXhjZXB0aW9uSGFuZGxlcnNbaW5kZXhdOyB9CisKKyAgICBVbmxpbmtlZEFy
cmF5UHJvZmlsZSBhZGRBcnJheVByb2ZpbGUoKSB7IHJldHVybiBtX2FycmF5UHJvZmlsZUNvdW50
Kys7IH0KKyAgICB1bnNpZ25lZCBudW1iZXJPZkFycmF5UHJvZmlsZXMoKSB7IHJldHVybiBtX2Fy
cmF5UHJvZmlsZUNvdW50OyB9CisgICAgVW5saW5rZWRBcnJheUFsbG9jYXRpb25Qcm9maWxlIGFk
ZEFycmF5QWxsb2NhdGlvblByb2ZpbGUoKSB7IHJldHVybiBtX2FycmF5QWxsb2NhdGlvblByb2Zp
bGVDb3VudCsrOyB9CisgICAgdW5zaWduZWQgbnVtYmVyT2ZBcnJheUFsbG9jYXRpb25Qcm9maWxl
cygpIHsgcmV0dXJuIG1fYXJyYXlBbGxvY2F0aW9uUHJvZmlsZUNvdW50OyB9CisgICAgVW5saW5r
ZWRPYmplY3RBbGxvY2F0aW9uUHJvZmlsZSBhZGRPYmplY3RBbGxvY2F0aW9uUHJvZmlsZSgpIHsg
cmV0dXJuIG1fb2JqZWN0QWxsb2NhdGlvblByb2ZpbGVDb3VudCsrOyB9CisgICAgdW5zaWduZWQg
bnVtYmVyT2ZPYmplY3RBbGxvY2F0aW9uUHJvZmlsZXMoKSB7IHJldHVybiBtX29iamVjdEFsbG9j
YXRpb25Qcm9maWxlQ291bnQ7IH0KKyAgICBVbmxpbmtlZFZhbHVlUHJvZmlsZSBhZGRWYWx1ZVBy
b2ZpbGUoKSB7IHJldHVybiBtX3ZhbHVlUHJvZmlsZUNvdW50Kys7IH0KKyAgICB1bnNpZ25lZCBu
dW1iZXJPZlZhbHVlUHJvZmlsZXMoKSB7IHJldHVybiBtX3ZhbHVlUHJvZmlsZUNvdW50OyB9CisK
KyAgICBVbmxpbmtlZExMSW50Q2FsbExpbmtJbmZvIGFkZExMSW50Q2FsbExpbmtJbmZvKCkgeyBy
ZXR1cm4gbV9sbGludENhbGxMaW5rSW5mb0NvdW50Kys7IH0KKyAgICB1bnNpZ25lZCBudW1iZXJP
ZkxMaW50Q2FsbExpbmtJbmZvcygpIHsgcmV0dXJuIG1fbGxpbnRDYWxsTGlua0luZm9Db3VudDsg
fQorCisgICAgQ29kZVR5cGUgY29kZVR5cGUoKSBjb25zdCB7IHJldHVybiBtX2NvZGVUeXBlOyB9
CisKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdGhpc1JlZ2lzdGVyKCkgY29uc3QgeyByZXR1cm4gbV90
aGlzUmVnaXN0ZXI7IH0KKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGVSZWdpc3RlcigpIGNvbnN0
IHsgcmV0dXJuIG1fc2NvcGVSZWdpc3RlcjsgfQorCisgICAgdm9pZCBhZGRQcm9wZXJ0eUFjY2Vz
c0luc3RydWN0aW9uKHVuc2lnbmVkIHByb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb24pCisgICAgewor
ICAgICAgICBtX3Byb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25zLmFwcGVuZChwcm9wZXJ0eUFjY2Vz
c0luc3RydWN0aW9uKTsKKyAgICB9CisKKyAgICBzaXplX3QgbnVtYmVyT2ZQcm9wZXJ0eUFjY2Vz
c0luc3RydWN0aW9ucygpIGNvbnN0IHsgcmV0dXJuIG1fcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlv
bnMuc2l6ZSgpOyB9CisgICAgY29uc3QgVmVjdG9yPHVuc2lnbmVkPiYgcHJvcGVydHlBY2Nlc3NJ
bnN0cnVjdGlvbnMoKSBjb25zdCB7IHJldHVybiBtX3Byb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25z
OyB9CisKKyAgICB0eXBlZGVmIFZlY3RvcjxKU1ZhbHVlPiBDb25zdGFudEJ1ZmZlcjsKKworICAg
IHNpemVfdCBjb25zdGFudEJ1ZmZlckNvdW50KCkgeyBBU1NFUlQobV9yYXJlRGF0YSk7IHJldHVy
biBtX3JhcmVEYXRhLT5tX2NvbnN0YW50QnVmZmVycy5zaXplKCk7IH0KKyAgICB1bnNpZ25lZCBh
ZGRDb25zdGFudEJ1ZmZlcih1bnNpZ25lZCBsZW5ndGgpCisgICAgeworICAgICAgICBjcmVhdGVS
YXJlRGF0YUlmTmVjZXNzYXJ5KCk7CisgICAgICAgIHVuc2lnbmVkIHNpemUgPSBtX3JhcmVEYXRh
LT5tX2NvbnN0YW50QnVmZmVycy5zaXplKCk7CisgICAgICAgIG1fcmFyZURhdGEtPm1fY29uc3Rh
bnRCdWZmZXJzLmFwcGVuZChWZWN0b3I8SlNWYWx1ZT4obGVuZ3RoKSk7CisgICAgICAgIHJldHVy
biBzaXplOworICAgIH0KKworICAgIGNvbnN0IENvbnN0YW50QnVmZmVyJiBjb25zdGFudEJ1ZmZl
cih1bnNpZ25lZCBpbmRleCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChtX3JhcmVEYXRh
KTsKKyAgICAgICAgcmV0dXJuIG1fcmFyZURhdGEtPm1fY29uc3RhbnRCdWZmZXJzW2luZGV4XTsK
KyAgICB9CisKKyAgICBDb25zdGFudEJ1ZmZlciYgY29uc3RhbnRCdWZmZXIodW5zaWduZWQgaW5k
ZXgpCisgICAgeworICAgICAgICBBU1NFUlQobV9yYXJlRGF0YSk7CisgICAgICAgIHJldHVybiBt
X3JhcmVEYXRhLT5tX2NvbnN0YW50QnVmZmVyc1tpbmRleF07CisgICAgfQorCisgICAgYm9vbCBo
YXNSYXJlRGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fcmFyZURhdGEuZ2V0KCk7IH0KKworICAgIGlu
dCBsaW5lTnVtYmVyRm9yQnl0ZWNvZGVPZmZzZXQodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQpOwor
CisgICAgdm9pZCBleHByZXNzaW9uUmFuZ2VGb3JCeXRlY29kZU9mZnNldCh1bnNpZ25lZCBieXRl
Y29kZU9mZnNldCwgaW50JiBkaXZvdCwKKyAgICAgICAgaW50JiBzdGFydE9mZnNldCwgaW50JiBl
bmRPZmZzZXQsIHVuc2lnbmVkJiBsaW5lLCB1bnNpZ25lZCYgY29sdW1uKSBjb25zdDsKKworICAg
IGJvb2wgdHlwZVByb2ZpbGVyRXhwcmVzc2lvbkluZm9Gb3JCeXRlY29kZU9mZnNldCh1bnNpZ25l
ZCBieXRlY29kZU9mZnNldCwgdW5zaWduZWQmIHN0YXJ0RGl2b3QsIHVuc2lnbmVkJiBlbmREaXZv
dCk7CisKKyAgICB2b2lkIHJlY29yZFBhcnNlKENvZGVGZWF0dXJlcyBmZWF0dXJlcywgYm9vbCBo
YXNDYXB0dXJlZFZhcmlhYmxlcywgdW5zaWduZWQgZmlyc3RMaW5lLCB1bnNpZ25lZCBsaW5lQ291
bnQsIHVuc2lnbmVkIGVuZENvbHVtbikKKyAgICB7CisgICAgICAgIG1fZmVhdHVyZXMgPSBmZWF0
dXJlczsKKyAgICAgICAgbV9oYXNDYXB0dXJlZFZhcmlhYmxlcyA9IGhhc0NhcHR1cmVkVmFyaWFi
bGVzOworICAgICAgICBtX2ZpcnN0TGluZSA9IGZpcnN0TGluZTsKKyAgICAgICAgbV9saW5lQ291
bnQgPSBsaW5lQ291bnQ7CisgICAgICAgIC8vIEZvciB0aGUgVW5saW5rZWRDb2RlQmxvY2ssIHN0
YXJ0Q29sdW1uIGlzIGFsd2F5cyAwLgorICAgICAgICBtX2VuZENvbHVtbiA9IGVuZENvbHVtbjsK
KyAgICB9CisKKyAgICBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTERpcmVjdGl2ZSgpIGNvbnN0IHsg
cmV0dXJuIG1fc291cmNlVVJMRGlyZWN0aXZlOyB9CisgICAgY29uc3QgU3RyaW5nJiBzb3VyY2VN
YXBwaW5nVVJMRGlyZWN0aXZlKCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2VNYXBwaW5nVVJMRGly
ZWN0aXZlOyB9CisgICAgdm9pZCBzZXRTb3VyY2VVUkxEaXJlY3RpdmUoY29uc3QgU3RyaW5nJiBz
b3VyY2VVUkwpIHsgbV9zb3VyY2VVUkxEaXJlY3RpdmUgPSBzb3VyY2VVUkw7IH0KKyAgICB2b2lk
IHNldFNvdXJjZU1hcHBpbmdVUkxEaXJlY3RpdmUoY29uc3QgU3RyaW5nJiBzb3VyY2VNYXBwaW5n
VVJMKSB7IG1fc291cmNlTWFwcGluZ1VSTERpcmVjdGl2ZSA9IHNvdXJjZU1hcHBpbmdVUkw7IH0K
KworICAgIENvZGVGZWF0dXJlcyBjb2RlRmVhdHVyZXMoKSBjb25zdCB7IHJldHVybiBtX2ZlYXR1
cmVzOyB9CisgICAgYm9vbCBoYXNDYXB0dXJlZFZhcmlhYmxlcygpIGNvbnN0IHsgcmV0dXJuIG1f
aGFzQ2FwdHVyZWRWYXJpYWJsZXM7IH0KKyAgICB1bnNpZ25lZCBmaXJzdExpbmUoKSBjb25zdCB7
IHJldHVybiBtX2ZpcnN0TGluZTsgfQorICAgIHVuc2lnbmVkIGxpbmVDb3VudCgpIGNvbnN0IHsg
cmV0dXJuIG1fbGluZUNvdW50OyB9CisgICAgQUxXQVlTX0lOTElORSB1bnNpZ25lZCBzdGFydENv
bHVtbigpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKyAgICB1bnNpZ25lZCBlbmRDb2x1bW4oKSBjb25z
dCB7IHJldHVybiBtX2VuZENvbHVtbjsgfQorCisgICAgdm9pZCBhZGRPcFByb2ZpbGVDb250cm9s
Rmxvd0J5dGVjb2RlT2Zmc2V0KHNpemVfdCBvZmZzZXQpCisgICAgeworICAgICAgICBjcmVhdGVS
YXJlRGF0YUlmTmVjZXNzYXJ5KCk7CisgICAgICAgIG1fcmFyZURhdGEtPm1fb3BQcm9maWxlQ29u
dHJvbEZsb3dCeXRlY29kZU9mZnNldHMuYXBwZW5kKG9mZnNldCk7CisgICAgfQorICAgIGNvbnN0
IFZlY3RvcjxzaXplX3Q+JiBvcFByb2ZpbGVDb250cm9sRmxvd0J5dGVjb2RlT2Zmc2V0cygpIGNv
bnN0CisgICAgeworICAgICAgICBBU1NFUlQobV9yYXJlRGF0YSk7CisgICAgICAgIHJldHVybiBt
X3JhcmVEYXRhLT5tX29wUHJvZmlsZUNvbnRyb2xGbG93Qnl0ZWNvZGVPZmZzZXRzOworICAgIH0K
KyAgICBib29sIGhhc09wUHJvZmlsZUNvbnRyb2xGbG93Qnl0ZWNvZGVPZmZzZXRzKCkgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiBtX3JhcmVEYXRhICYmICFtX3JhcmVEYXRhLT5tX29wUHJv
ZmlsZUNvbnRyb2xGbG93Qnl0ZWNvZGVPZmZzZXRzLmlzRW1wdHkoKTsKKyAgICB9CisKKyAgICB2
b2lkIGR1bXBFeHByZXNzaW9uUmFuZ2VJbmZvKCk7IC8vIEZvciBkZWJ1Z2dpbmcgcHVycG9zZSBv
bmx5LgorCisgICAgYm9vbCB3YXNDb21waWxlZFdpdGhEZWJ1Z2dpbmdPcGNvZGVzKCkgY29uc3Qg
eyByZXR1cm4gbV93YXNDb21waWxlZFdpdGhEZWJ1Z2dpbmdPcGNvZGVzOyB9CisKKyAgICBUcmlT
dGF0ZSBkaWRPcHRpbWl6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGlkT3B0aW1pemU7IH0KKyAgICB2
b2lkIHNldERpZE9wdGltaXplKFRyaVN0YXRlIGRpZE9wdGltaXplKSB7IG1fZGlkT3B0aW1pemUg
PSBkaWRPcHRpbWl6ZTsgfQorCitwcm90ZWN0ZWQ6CisgICAgVW5saW5rZWRDb2RlQmxvY2soVk0q
LCBTdHJ1Y3R1cmUqLCBDb2RlVHlwZSwgY29uc3QgRXhlY3V0YWJsZUluZm8mLCBEZWJ1Z2dlck1v
ZGUpOworICAgIH5VbmxpbmtlZENvZGVCbG9jaygpOworCisgICAgdm9pZCBmaW5pc2hDcmVhdGlv
bihWTSYgdm0pCisgICAgeworICAgICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CisgICAg
fQorCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBCeXRlY29kZVJld3JpdGVyOworICAgIHZv
aWQgYXBwbHlNb2RpZmljYXRpb24oQnl0ZWNvZGVSZXdyaXRlciYpOworCisgICAgdm9pZCBjcmVh
dGVSYXJlRGF0YUlmTmVjZXNzYXJ5KCkKKyAgICB7CisgICAgICAgIGlmICghbV9yYXJlRGF0YSkK
KyAgICAgICAgICAgIG1fcmFyZURhdGEgPSBzdGQ6Om1ha2VfdW5pcXVlPFJhcmVEYXRhPigpOwor
ICAgIH0KKworICAgIHZvaWQgZ2V0TGluZUFuZENvbHVtbihjb25zdCBFeHByZXNzaW9uUmFuZ2VJ
bmZvJiwgdW5zaWduZWQmIGxpbmUsIHVuc2lnbmVkJiBjb2x1bW4pIGNvbnN0OworCisgICAgaW50
IG1fbnVtUGFyYW1ldGVyczsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxVbmxpbmtlZEluc3RydWN0
aW9uU3RyZWFtPiBtX3VubGlua2VkSW5zdHJ1Y3Rpb25zOworCisgICAgVmlydHVhbFJlZ2lzdGVy
IG1fdGhpc1JlZ2lzdGVyOworICAgIFZpcnR1YWxSZWdpc3RlciBtX3Njb3BlUmVnaXN0ZXI7Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIG1fZ2xvYmFsT2JqZWN0UmVnaXN0ZXI7CisKKyAgICBTdHJpbmcg
bV9zb3VyY2VVUkxEaXJlY3RpdmU7CisgICAgU3RyaW5nIG1fc291cmNlTWFwcGluZ1VSTERpcmVj
dGl2ZTsKKworICAgIHVuc2lnbmVkIG1fdXNlc0V2YWwgOiAxOworICAgIHVuc2lnbmVkIG1faXNT
dHJpY3RNb2RlIDogMTsKKyAgICB1bnNpZ25lZCBtX2lzQ29uc3RydWN0b3IgOiAxOworICAgIHVu
c2lnbmVkIG1faGFzQ2FwdHVyZWRWYXJpYWJsZXMgOiAxOworICAgIHVuc2lnbmVkIG1faXNCdWls
dGluRnVuY3Rpb24gOiAxOworICAgIHVuc2lnbmVkIG1fc3VwZXJCaW5kaW5nIDogMTsKKyAgICB1
bnNpZ25lZCBtX3NjcmlwdE1vZGU6IDE7CisgICAgdW5zaWduZWQgbV9pc0Fycm93RnVuY3Rpb25D
b250ZXh0IDogMTsKKyAgICB1bnNpZ25lZCBtX2lzQ2xhc3NDb250ZXh0IDogMTsKKyAgICB1bnNp
Z25lZCBtX3dhc0NvbXBpbGVkV2l0aERlYnVnZ2luZ09wY29kZXMgOiAxOworICAgIHVuc2lnbmVk
IG1fY29uc3RydWN0b3JLaW5kIDogMjsKKyAgICB1bnNpZ25lZCBtX2Rlcml2ZWRDb250ZXh0VHlw
ZSA6IDI7CisgICAgdW5zaWduZWQgbV9ldmFsQ29udGV4dFR5cGUgOiAyOworICAgIHVuc2lnbmVk
IG1fZmlyc3RMaW5lOworICAgIHVuc2lnbmVkIG1fbGluZUNvdW50OworICAgIHVuc2lnbmVkIG1f
ZW5kQ29sdW1uOworCisgICAgVHJpU3RhdGUgbV9kaWRPcHRpbWl6ZTsKKyAgICBTb3VyY2VQYXJz
ZU1vZGUgbV9wYXJzZU1vZGU7CisgICAgQ29kZUZlYXR1cmVzIG1fZmVhdHVyZXM7CisgICAgQ29k
ZVR5cGUgbV9jb2RlVHlwZTsKKworICAgIFZlY3Rvcjx1bnNpZ25lZD4gbV9qdW1wVGFyZ2V0czsK
KworICAgIFZlY3Rvcjx1bnNpZ25lZD4gbV9wcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uczsKKwor
ICAgIC8vIENvbnN0YW50IFBvb2xzCisgICAgVmVjdG9yPElkZW50aWZpZXI+IG1faWRlbnRpZmll
cnM7CisgICAgVmVjdG9yPFdyaXRlQmFycmllcjxVbmtub3duPj4gbV9jb25zdGFudFJlZ2lzdGVy
czsKKyAgICBWZWN0b3I8U291cmNlQ29kZVJlcHJlc2VudGF0aW9uPiBtX2NvbnN0YW50c1NvdXJj
ZUNvZGVSZXByZXNlbnRhdGlvbjsKKyAgICB0eXBlZGVmIFZlY3RvcjxXcml0ZUJhcnJpZXI8VW5s
aW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU+PiBGdW5jdGlvbkV4cHJlc3Npb25WZWN0b3I7CisgICAg
RnVuY3Rpb25FeHByZXNzaW9uVmVjdG9yIG1fZnVuY3Rpb25EZWNsczsKKyAgICBGdW5jdGlvbkV4
cHJlc3Npb25WZWN0b3IgbV9mdW5jdGlvbkV4cHJzOworICAgIHN0ZDo6YXJyYXk8dW5zaWduZWQs
IExpbmtUaW1lQ29uc3RhbnRDb3VudD4gbV9saW5rVGltZUNvbnN0YW50czsKKworICAgIHVuc2ln
bmVkIG1fYXJyYXlQcm9maWxlQ291bnQ7CisgICAgdW5zaWduZWQgbV9hcnJheUFsbG9jYXRpb25Q
cm9maWxlQ291bnQ7CisgICAgdW5zaWduZWQgbV9vYmplY3RBbGxvY2F0aW9uUHJvZmlsZUNvdW50
OworICAgIHVuc2lnbmVkIG1fdmFsdWVQcm9maWxlQ291bnQ7CisgICAgdW5zaWduZWQgbV9sbGlu
dENhbGxMaW5rSW5mb0NvdW50OworCitwdWJsaWM6CisgICAgc3RydWN0IFJhcmVEYXRhIHsKKyAg
ICAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisgICAgcHVibGljOgorICAgICAgICBWZWN0
b3I8VW5saW5rZWRIYW5kbGVySW5mbz4gbV9leGNlcHRpb25IYW5kbGVyczsKKworICAgICAgICAv
LyBSYXJlIENvbnN0YW50cworICAgICAgICBWZWN0b3I8V3JpdGVCYXJyaWVyPFJlZ0V4cD4+IG1f
cmVnZXhwczsKKworICAgICAgICAvLyBCdWZmZXJzIHVzZWQgZm9yIGxhcmdlIGFycmF5IGxpdGVy
YWxzCisgICAgICAgIFZlY3RvcjxDb25zdGFudEJ1ZmZlcj4gbV9jb25zdGFudEJ1ZmZlcnM7CisK
KyAgICAgICAgLy8gSnVtcCBUYWJsZXMKKyAgICAgICAgVmVjdG9yPFVubGlua2VkU2ltcGxlSnVt
cFRhYmxlPiBtX3N3aXRjaEp1bXBUYWJsZXM7CisgICAgICAgIFZlY3RvcjxVbmxpbmtlZFN0cmlu
Z0p1bXBUYWJsZT4gbV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzOworCisgICAgICAgIFZlY3RvcjxF
eHByZXNzaW9uUmFuZ2VJbmZvOjpGYXRQb3NpdGlvbj4gbV9leHByZXNzaW9uSW5mb0ZhdFBvc2l0
aW9uczsKKworICAgICAgICBzdHJ1Y3QgVHlwZVByb2ZpbGVyRXhwcmVzc2lvblJhbmdlIHsKKyAg
ICAgICAgICAgIHVuc2lnbmVkIG1fc3RhcnREaXZvdDsKKyAgICAgICAgICAgIHVuc2lnbmVkIG1f
ZW5kRGl2b3Q7CisgICAgICAgIH07CisgICAgICAgIEhhc2hNYXA8dW5zaWduZWQsIFR5cGVQcm9m
aWxlckV4cHJlc3Npb25SYW5nZT4gbV90eXBlUHJvZmlsZXJJbmZvTWFwOworICAgICAgICBWZWN0
b3I8c2l6ZV90PiBtX29wUHJvZmlsZUNvbnRyb2xGbG93Qnl0ZWNvZGVPZmZzZXRzOworICAgIH07
CisKK3ByaXZhdGU6CisgICAgc3RkOjp1bmlxdWVfcHRyPFJhcmVEYXRhPiBtX3JhcmVEYXRhOwor
ICAgIFZlY3RvcjxFeHByZXNzaW9uUmFuZ2VJbmZvPiBtX2V4cHJlc3Npb25JbmZvOworCitwcm90
ZWN0ZWQ6CisgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRv
ciYpOworICAgIHN0YXRpYyBzaXplX3QgZXN0aW1hdGVkU2l6ZShKU0NlbGwqKTsKKworcHVibGlj
OgorICAgIERFQ0xBUkVfSU5GTzsKK307CisKK2NsYXNzIFVubGlua2VkR2xvYmFsQ29kZUJsb2Nr
IDogcHVibGljIFVubGlua2VkQ29kZUJsb2NrIHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIFVubGlu
a2VkQ29kZUJsb2NrIEJhc2U7CisKK3Byb3RlY3RlZDoKKyAgICBVbmxpbmtlZEdsb2JhbENvZGVC
bG9jayhWTSogdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBDb2RlVHlwZSBjb2RlVHlwZSwgY29u
c3QgRXhlY3V0YWJsZUluZm8mIGluZm8sIERlYnVnZ2VyTW9kZSBkZWJ1Z2dlck1vZGUpCisgICAg
ICAgIDogQmFzZSh2bSwgc3RydWN0dXJlLCBjb2RlVHlwZSwgaW5mbywgZGVidWdnZXJNb2RlKQor
ICAgIHsKKyAgICB9CisKKyAgICBERUNMQVJFX0lORk87Cit9OworCitjbGFzcyBVbmxpbmtlZFBy
b2dyYW1Db2RlQmxvY2sgZmluYWwgOiBwdWJsaWMgVW5saW5rZWRHbG9iYWxDb2RlQmxvY2sgewor
cHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgQ29kZUNhY2hlOworICAgIHN0YXRpYyBVbmxpbmtl
ZFByb2dyYW1Db2RlQmxvY2sqIGNyZWF0ZShWTSogdm0sIGNvbnN0IEV4ZWN1dGFibGVJbmZvJiBp
bmZvLCBEZWJ1Z2dlck1vZGUgZGVidWdnZXJNb2RlKQorICAgIHsKKyAgICAgICAgVW5saW5rZWRQ
cm9ncmFtQ29kZUJsb2NrKiBpbnN0YW5jZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFVu
bGlua2VkUHJvZ3JhbUNvZGVCbG9jaz4odm0tPmhlYXApKSBVbmxpbmtlZFByb2dyYW1Db2RlQmxv
Y2sodm0sIHZtLT51bmxpbmtlZFByb2dyYW1Db2RlQmxvY2tTdHJ1Y3R1cmUuZ2V0KCksIGluZm8s
IGRlYnVnZ2VyTW9kZSk7CisgICAgICAgIGluc3RhbmNlLT5maW5pc2hDcmVhdGlvbigqdm0pOwor
ICAgICAgICByZXR1cm4gaW5zdGFuY2U7CisgICAgfQorCitwdWJsaWM6CisgICAgdHlwZWRlZiBV
bmxpbmtlZEdsb2JhbENvZGVCbG9jayBCYXNlOworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBT
dHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgU3RydWN0dXJlSXNJbW1vcnRh
bDsKKworICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CisKKyAgICB2b2lkIHNldFZh
cmlhYmxlRGVjbGFyYXRpb25zKGNvbnN0IFZhcmlhYmxlRW52aXJvbm1lbnQmIGVudmlyb25tZW50
KSB7IG1fdmFyRGVjbGFyYXRpb25zID0gZW52aXJvbm1lbnQ7IH0KKyAgICBjb25zdCBWYXJpYWJs
ZUVudmlyb25tZW50JiB2YXJpYWJsZURlY2xhcmF0aW9ucygpIGNvbnN0IHsgcmV0dXJuIG1fdmFy
RGVjbGFyYXRpb25zOyB9CisKKyAgICB2b2lkIHNldExleGljYWxEZWNsYXJhdGlvbnMoY29uc3Qg
VmFyaWFibGVFbnZpcm9ubWVudCYgZW52aXJvbm1lbnQpIHsgbV9sZXhpY2FsRGVjbGFyYXRpb25z
ID0gZW52aXJvbm1lbnQ7IH0KKyAgICBjb25zdCBWYXJpYWJsZUVudmlyb25tZW50JiBsZXhpY2Fs
RGVjbGFyYXRpb25zKCkgY29uc3QgeyByZXR1cm4gbV9sZXhpY2FsRGVjbGFyYXRpb25zOyB9CisK
KyAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisK
K3ByaXZhdGU6CisgICAgVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrKFZNKiB2bSwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUsIGNvbnN0IEV4ZWN1dGFibGVJbmZvJiBpbmZvLCBEZWJ1Z2dlck1vZGUgZGVi
dWdnZXJNb2RlKQorICAgICAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSwgR2xvYmFsQ29kZSwgaW5m
bywgZGVidWdnZXJNb2RlKQorICAgIHsKKyAgICB9CisKKyAgICBWYXJpYWJsZUVudmlyb25tZW50
IG1fdmFyRGVjbGFyYXRpb25zOworICAgIFZhcmlhYmxlRW52aXJvbm1lbnQgbV9sZXhpY2FsRGVj
bGFyYXRpb25zOworCitwdWJsaWM6CisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0
dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90bykK
KyAgICB7CisgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0
LCBwcm90bywgVHlwZUluZm8oVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrVHlwZSwgU3RydWN0dXJl
RmxhZ3MpLCBpbmZvKCkpOworICAgIH0KKworICAgIERFQ0xBUkVfSU5GTzsKK307CisKK2NsYXNz
IFVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayBmaW5hbCA6IHB1YmxpYyBVbmxpbmtlZEds
b2JhbENvZGVCbG9jayB7Citwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBDb2RlQ2FjaGU7Cisg
ICAgc3RhdGljIFVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayogY3JlYXRlKFZNKiB2bSwg
Y29uc3QgRXhlY3V0YWJsZUluZm8mIGluZm8sIERlYnVnZ2VyTW9kZSBkZWJ1Z2dlck1vZGUpCisg
ICAgeworICAgICAgICBVbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2sqIGluc3RhbmNlID0g
bmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8VW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2Nr
Pih2bS0+aGVhcCkpIFVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayh2bSwgdm0tPnVubGlu
a2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9ja1N0cnVjdHVyZS5nZXQoKSwgaW5mbywgZGVidWdnZXJN
b2RlKTsKKyAgICAgICAgaW5zdGFuY2UtPmZpbmlzaENyZWF0aW9uKCp2bSk7CisgICAgICAgIHJl
dHVybiBpbnN0YW5jZTsKKyAgICB9CisKK3B1YmxpYzoKKyAgICB0eXBlZGVmIFVubGlua2VkR2xv
YmFsQ29kZUJsb2NrIEJhc2U7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZs
YWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBTdHJ1Y3R1cmVJc0ltbW9ydGFsOworCisgICAg
c3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKKworICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKworICAgIC8vIFRoaXMgb2Zmc2V0IHJlcHJl
c2VudHMgdGhlIGNvbnN0YW50IHJlZ2lzdGVyIG9mZnNldCB0byB0aGUgc3RvcmVkIHN5bWJvbCB0
YWJsZSB0aGF0IHJlcHJlc2VudHMgdGhlIGxheW91dCBvZiB0aGUKKyAgICAvLyBtb2R1bGUgZW52
aXJvbm1lbnQuIFRoaXMgc3ltYm9sIHRhYmxlIGlzIGNyZWF0ZWQgYnkgdGhlIGJ5dGUgY29kZSBn
ZW5lcmF0b3Igc2luY2UgdGhlIG1vZHVsZSBlbnZpcm9ubWVudCBpbmNsdWRlcworICAgIC8vIHRo
ZSB0b3AtbW9zdCBsZXhpY2FsIGNhcHR1cmVkIHZhcmlhYmxlcyBpbnNpZGUgdGhlIG1vZHVsZSBj
b2RlLiBUaGlzIG1lYW5zIHRoYXQsIG9uY2UgdGhlIG1vZHVsZSBlbnZpcm9ubWVudCBpcworICAg
IC8vIGFsbG9jYXRlZCBhbmQgaW5zdGFudGlhdGVkIGZyb20gdGhpcyBzeW1ib2wgdGFibGUsIGl0
IGlzIHRpdGVseSBjb3VwbGVkIHdpdGggdGhlIHNwZWNpZmljIHVubGlua2VkIG1vZHVsZSBwcm9n
cmFtCisgICAgLy8gY29kZSBibG9jayBhbmQgdGhlIHN0b3JlZCBzeW1ib2wgdGFibGUuIFNvIGJl
Zm9yZSBleGVjdXRpbmcgdGhlIG1vZHVsZSBjb2RlLCB3ZSBzaG91bGQgbm90IGNsZWFyIHRoZSB1
bmxpbmtlZCBtb2R1bGUKKyAgICAvLyBwcm9ncmFtIGNvZGUgYmxvY2sgaW4gdGhlIG1vZHVsZSBl
eGVjdXRhYmxlLiBUaGlzIHJlcXVpcmVtZW50IGlzIG1ldCBiZWNhdXNlIHRoZSBnYXJiYWdlIGNv
bGxlY3RvciBvbmx5IGNsZWFycworICAgIC8vIHVubGlua2VkIGNvZGUgaW4gKDEpIHVubWFya2Vk
IGV4ZWN1dGFibGVzIGFuZCAoMikgZnVuY3Rpb24gZXhlY3V0YWJsZXMuCisgICAgLy8KKyAgICAv
LyBTaW5jZSB0aGUgZnVuY3Rpb24gY29kZSBtYXkgYmUgZXhlY3V0ZWQgcmVwZWF0ZWRseSBhbmQg
dGhlIGVudmlyb25tZW50IG9mIGVhY2ggZnVuY3Rpb24gZXhlY3V0aW9uIGlzIGRpZmZlcmVudCwK
KyAgICAvLyB0aGUgZnVuY3Rpb24gY29kZSBuZWVkIHRvIGFsbG9jYXRlIGFuZCBpbnN0YW50aWF0
ZSB0aGUgZW52aXJvbm1lbnQgaW4gdGhlIHByb2xvZ3VlIG9mIHRoZSBmdW5jdGlvbiBjb2RlLiBP
biB0aGUKKyAgICAvLyBvdGhlciBoYW5kLCB0aGUgbW9kdWxlIGNvZGUgaXMgZXhlY3V0ZWQgb25s
eSBvbmNlLiBTbyB3ZSBjYW4gaW5zdGFudGlhdGUgdGhlIG1vZHVsZSBlbnZpcm9ubWVudCBvdXRz
aWRlIHRoZSBtb2R1bGUKKyAgICAvLyBjb2RlLiBBdCB0aGF0IHRpbWUsIHdlIGNvbnN0cnVjdCB0
aGUgbW9kdWxlIGVudmlyb25tZW50IGJ5IHVzaW5nIHRoZSBzeW1ib2wgdGFibGUgdGhhdCBpcyBo
ZWxkIGJ5IHRoZSBtb2R1bGUgZXhlY3V0YWJsZS4KKyAgICAvLyBUaGUgc3ltYm9sIHRhYmxlIGhl
bGQgYnkgdGhlIGV4ZWN1dGFibGUgaXMgdGhlIGNsb25lZCBvbmUgZnJvbSBvbmUgaW4gdGhlIHVu
bGlua2VkIGNvZGUgYmxvY2suIEluc3RhbnRpYXRpbmcgdGhlIG1vZHVsZQorICAgIC8vIGVudmly
b25tZW50IGJlZm9yZSBleGVjdXRpbmcgYW5kIGxpbmtpbmcgdGhlIG1vZHVsZSBjb2RlIGlzIHJl
cXVpcmVkIHRvIGxpbmsgdGhlIGltcG9ydGVkIGJpbmRpbmdzIGJldHdlZW4gdGhlIG1vZHVsZXMu
CisgICAgLy8KKyAgICAvLyBUaGUgdW5saW5rZWQgbW9kdWxlIHByb2dyYW0gY29kZSBibG9jayBv
bmx5IGhvbGRzIHRoZSBwcmUtY2xvbmVkIHN5bWJvbCB0YWJsZSBpbiBpdHMgY29uc3RhbnQgcmVn
aXN0ZXIgcG9vbC4gSXQgZG9lcworICAgIC8vIG5vdCBob2xkIHRoZSBpbnN0YW50aWF0ZWQgbW9k
dWxlIGVudmlyb25tZW50LiBTbyB3aGlsZSB0aGUgbW9kdWxlIGVudmlyb25tZW50IHJlcXVpcmVz
IHRoZSBzcGVjaWZpYyB1bmxpbmtlZCBtb2R1bGUKKyAgICAvLyBwcm9ncmFtIGNvZGUgYmxvY2ss
IHRoZSB1bmxpbmtlZCBtb2R1bGUgY29kZSBibG9jayBjYW4gYmUgdXNlZCBmb3IgdGhlIG1vZHVs
ZSBlbnZpcm9ubWVudCBpbnN0YW50aWF0ZWQgZnJvbSB0aGlzCisgICAgLy8gdW5saW5rZWQgY29k
ZSBibG9jay4gVGhlcmUgaXMgMTpOIHJlbGF0aW9uIGJldHdlZW4gdGhlIHVubGlua2VkIG1vZHVs
ZSBjb2RlIGJsb2NrIGFuZCB0aGUgbW9kdWxlIGVudmlyb25tZW50cy4gU28gdGhlCisgICAgLy8g
dW5saW5rZWQgbW9kdWxlIHByb2dyYW0gY29kZSBibG9jayBjYW4gYmUgY2FjaGVkLgorICAgIC8v
CisgICAgLy8gT24gdGhlIG90aGVyIGhhbmQsIHRoZSBsaW5rZWQgY29kZSBibG9jayBmb3IgdGhl
IG1vZHVsZSBlbnZpcm9ubWVudCBpbmNsdWRlcyB0aGUgcmVzb2x2ZWQgcmVmZXJlbmNlcyB0byB0
aGUgaW1wb3J0ZWQKKyAgICAvLyBiaW5kaW5ncy4gVGhlIGltcG9ydGVkIGJpbmRpbmcgcmVmZXJl
bmNlcyB0aGUgb3RoZXIgbW9kdWxlIGVudmlyb25tZW50LCBzbyB0aGUgbGlua2VkIGNvZGUgYmxv
Y2sgaXMgdGl0bHkgY291cGxlZAorICAgIC8vIHdpdGggdGhlIHNwZWNpZmljIHNldCBvZiB0aGUg
bW9kdWxlIGVudmlyb25tZW50cy4gVGh1cywgdGhlIGxpbmtlZCBjb2RlIGJsb2NrIHNob3VsZCBu
b3QgYmUgY2FjaGVkLgorICAgIGludCBtb2R1bGVFbnZpcm9ubWVudFN5bWJvbFRhYmxlQ29uc3Rh
bnRSZWdpc3Rlck9mZnNldCgpIHsgcmV0dXJuIG1fbW9kdWxlRW52aXJvbm1lbnRTeW1ib2xUYWJs
ZUNvbnN0YW50UmVnaXN0ZXJPZmZzZXQ7IH0KKyAgICB2b2lkIHNldE1vZHVsZUVudmlyb25tZW50
U3ltYm9sVGFibGVDb25zdGFudFJlZ2lzdGVyT2Zmc2V0KGludCBvZmZzZXQpCisgICAgeworICAg
ICAgICBtX21vZHVsZUVudmlyb25tZW50U3ltYm9sVGFibGVDb25zdGFudFJlZ2lzdGVyT2Zmc2V0
ID0gb2Zmc2V0OworICAgIH0KKworcHJpdmF0ZToKKyAgICBVbmxpbmtlZE1vZHVsZVByb2dyYW1D
b2RlQmxvY2soVk0qIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgRXhlY3V0YWJsZUlu
Zm8mIGluZm8sIERlYnVnZ2VyTW9kZSBkZWJ1Z2dlck1vZGUpCisgICAgICAgIDogQmFzZSh2bSwg
c3RydWN0dXJlLCBNb2R1bGVDb2RlLCBpbmZvLCBkZWJ1Z2dlck1vZGUpCisgICAgeworICAgIH0K
KworICAgIGludCBtX21vZHVsZUVudmlyb25tZW50U3ltYm9sVGFibGVDb25zdGFudFJlZ2lzdGVy
T2Zmc2V0IHsgMCB9OworCitwdWJsaWM6CisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3Ry
dWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90
bykKKyAgICB7CisgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2Jq
ZWN0LCBwcm90bywgVHlwZUluZm8oVW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrVHlwZSwg
U3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworICAgIH0KKworICAgIERFQ0xBUkVfSU5GTzsKK307
CisKK2NsYXNzIFVubGlua2VkRXZhbENvZGVCbG9jayBmaW5hbCA6IHB1YmxpYyBVbmxpbmtlZEds
b2JhbENvZGVCbG9jayB7Citwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBDb2RlQ2FjaGU7CisK
KyAgICBzdGF0aWMgVW5saW5rZWRFdmFsQ29kZUJsb2NrKiBjcmVhdGUoVk0qIHZtLCBjb25zdCBF
eGVjdXRhYmxlSW5mbyYgaW5mbywgRGVidWdnZXJNb2RlIGRlYnVnZ2VyTW9kZSkKKyAgICB7Cisg
ICAgICAgIFVubGlua2VkRXZhbENvZGVCbG9jayogaW5zdGFuY2UgPSBuZXcgKE5vdE51bGwsIGFs
bG9jYXRlQ2VsbDxVbmxpbmtlZEV2YWxDb2RlQmxvY2s+KHZtLT5oZWFwKSkgVW5saW5rZWRFdmFs
Q29kZUJsb2NrKHZtLCB2bS0+dW5saW5rZWRFdmFsQ29kZUJsb2NrU3RydWN0dXJlLmdldCgpLCBp
bmZvLCBkZWJ1Z2dlck1vZGUpOworICAgICAgICBpbnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24oKnZt
KTsKKyAgICAgICAgcmV0dXJuIGluc3RhbmNlOworICAgIH0KKworcHVibGljOgorICAgIHR5cGVk
ZWYgVW5saW5rZWRHbG9iYWxDb2RlQmxvY2sgQmFzZTsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWdu
ZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IFN0cnVjdHVyZUlzSW1t
b3J0YWw7CisKKyAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOworCisgICAgY29uc3Qg
SWRlbnRpZmllciYgdmFyaWFibGUodW5zaWduZWQgaW5kZXgpIHsgcmV0dXJuIG1fdmFyaWFibGVz
W2luZGV4XTsgfQorICAgIHVuc2lnbmVkIG51bVZhcmlhYmxlcygpIHsgcmV0dXJuIG1fdmFyaWFi
bGVzLnNpemUoKTsgfQorICAgIHZvaWQgYWRvcHRWYXJpYWJsZXMoVmVjdG9yPElkZW50aWZpZXIs
IDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93PiYgdmFyaWFibGVzKQorICAgIHsKKyAgICAgICAgQVNT
RVJUKG1fdmFyaWFibGVzLmlzRW1wdHkoKSk7CisgICAgICAgIG1fdmFyaWFibGVzLnN3YXAodmFy
aWFibGVzKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgVW5saW5rZWRFdmFsQ29kZUJsb2NrKFZN
KiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IEV4ZWN1dGFibGVJbmZvJiBpbmZvLCBE
ZWJ1Z2dlck1vZGUgZGVidWdnZXJNb2RlKQorICAgICAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSwg
RXZhbENvZGUsIGluZm8sIGRlYnVnZ2VyTW9kZSkKKyAgICB7CisgICAgfQorCisgICAgVmVjdG9y
PElkZW50aWZpZXIsIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93PiBtX3ZhcmlhYmxlczsKKworcHVi
bGljOgorICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG8pCisgICAgeworICAgICAgICBy
ZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG8sIFR5cGVJbmZv
KFVubGlua2VkRXZhbENvZGVCbG9ja1R5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKKyAg
ICB9CisKKyAgICBERUNMQVJFX0lORk87Cit9OworCitjbGFzcyBVbmxpbmtlZEZ1bmN0aW9uQ29k
ZUJsb2NrIGZpbmFsIDogcHVibGljIFVubGlua2VkQ29kZUJsb2NrIHsKK3B1YmxpYzoKKyAgICB0
eXBlZGVmIFVubGlua2VkQ29kZUJsb2NrIEJhc2U7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVk
IFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBTdHJ1Y3R1cmVJc0ltbW9y
dGFsOworCisgICAgc3RhdGljIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2sqIGNyZWF0ZShWTSog
dm0sIENvZGVUeXBlIGNvZGVUeXBlLCBjb25zdCBFeGVjdXRhYmxlSW5mbyYgaW5mbywgRGVidWdn
ZXJNb2RlIGRlYnVnZ2VyTW9kZSkKKyAgICB7CisgICAgICAgIFVubGlua2VkRnVuY3Rpb25Db2Rl
QmxvY2sqIGluc3RhbmNlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8VW5saW5rZWRGdW5j
dGlvbkNvZGVCbG9jaz4odm0tPmhlYXApKSBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKHZtLCB2
bS0+dW5saW5rZWRGdW5jdGlvbkNvZGVCbG9ja1N0cnVjdHVyZS5nZXQoKSwgY29kZVR5cGUsIGlu
Zm8sIGRlYnVnZ2VyTW9kZSk7CisgICAgICAgIGluc3RhbmNlLT5maW5pc2hDcmVhdGlvbigqdm0p
OworICAgICAgICByZXR1cm4gaW5zdGFuY2U7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgZGVz
dHJveShKU0NlbGwqKTsKKworcHJpdmF0ZToKKyAgICBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2Nr
KFZNKiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIENvZGVUeXBlIGNvZGVUeXBlLCBjb25zdCBF
eGVjdXRhYmxlSW5mbyYgaW5mbywgRGVidWdnZXJNb2RlIGRlYnVnZ2VyTW9kZSkKKyAgICAgICAg
OiBCYXNlKHZtLCBzdHJ1Y3R1cmUsIGNvZGVUeXBlLCBpbmZvLCBkZWJ1Z2dlck1vZGUpCisgICAg
eworICAgIH0KKyAgICAKK3B1YmxpYzoKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1
Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3Rv
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmpl
Y3QsIHByb3RvLCBUeXBlSW5mbyhVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrVHlwZSwgU3RydWN0
dXJlRmxhZ3MpLCBpbmZvKCkpOworICAgIH0KKworICAgIERFQ0xBUkVfSU5GTzsKK307CisKK30K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZE1vZHVsZVByb2dy
YW1Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvVW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrLmgJKHJldmlzaW9uIDIwODMwOCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZE1vZHVsZVByb2dyYW1Db2Rl
QmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMjUsNTI4ICsyNSwxMCBAQAogCiAjcHJhZ21hIG9u
Y2UKIAotI2luY2x1ZGUgIkJ5dGVjb2RlQ29udmVudGlvbnMuaCIKLSNpbmNsdWRlICJDb2RlU3Bl
Y2lhbGl6YXRpb25LaW5kLmgiCi0jaW5jbHVkZSAiQ29kZVR5cGUuaCIKLSNpbmNsdWRlICJDb25z
dHJ1Y3RBYmlsaXR5LmgiCi0jaW5jbHVkZSAiRXhwcmVzc2lvblJhbmdlSW5mby5oIgotI2luY2x1
ZGUgIkhhbmRsZXJJbmZvLmgiCi0jaW5jbHVkZSAiSWRlbnRpZmllci5oIgotI2luY2x1ZGUgIkpT
Q2VsbC5oIgotI2luY2x1ZGUgIkpTU3RyaW5nLmgiCi0jaW5jbHVkZSAiUGFyc2VyTW9kZXMuaCIK
LSNpbmNsdWRlICJSZWdFeHAuaCIKLSNpbmNsdWRlICJTcGVjaWFsUG9pbnRlci5oIgotI2luY2x1
ZGUgIlVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLmgiCi0jaW5jbHVkZSAiVmFyaWFibGVFbnZp
cm9ubWVudC5oIgotI2luY2x1ZGUgIlZpcnR1YWxSZWdpc3Rlci5oIgotI2luY2x1ZGUgPHd0Zi9U
cmlTdGF0ZS5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlICJVbmxpbmtlZEds
b2JhbENvZGVCbG9jay5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIAotY2xhc3MgQnl0ZWNvZGVSZXdy
aXRlcjsKLWNsYXNzIERlYnVnZ2VyOwotY2xhc3MgRnVuY3Rpb25FeGVjdXRhYmxlOwotY2xhc3Mg
UGFyc2VyRXJyb3I7Ci1jbGFzcyBTY3JpcHRFeGVjdXRhYmxlOwotY2xhc3MgU291cmNlQ29kZTsK
LWNsYXNzIFNvdXJjZVByb3ZpZGVyOwotY2xhc3MgVW5saW5rZWRDb2RlQmxvY2s7Ci1jbGFzcyBV
bmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrOwotY2xhc3MgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFi
bGU7Ci1jbGFzcyBVbmxpbmtlZEluc3RydWN0aW9uU3RyZWFtOwotc3RydWN0IEV4ZWN1dGFibGVJ
bmZvOwotCi10eXBlZGVmIHVuc2lnbmVkIFVubGlua2VkVmFsdWVQcm9maWxlOwotdHlwZWRlZiB1
bnNpZ25lZCBVbmxpbmtlZEFycmF5UHJvZmlsZTsKLXR5cGVkZWYgdW5zaWduZWQgVW5saW5rZWRB
cnJheUFsbG9jYXRpb25Qcm9maWxlOwotdHlwZWRlZiB1bnNpZ25lZCBVbmxpbmtlZE9iamVjdEFs
bG9jYXRpb25Qcm9maWxlOwotdHlwZWRlZiB1bnNpZ25lZCBVbmxpbmtlZExMSW50Q2FsbExpbmtJ
bmZvOwotCi1zdHJ1Y3QgVW5saW5rZWRTdHJpbmdKdW1wVGFibGUgewotICAgIHN0cnVjdCBPZmZz
ZXRMb2NhdGlvbiB7Ci0gICAgICAgIGludDMyX3QgYnJhbmNoT2Zmc2V0OwotICAgIH07Ci0KLSAg
ICB0eXBlZGVmIEhhc2hNYXA8UmVmUHRyPFN0cmluZ0ltcGw+LCBPZmZzZXRMb2NhdGlvbj4gU3Ry
aW5nT2Zmc2V0VGFibGU7Ci0gICAgU3RyaW5nT2Zmc2V0VGFibGUgb2Zmc2V0VGFibGU7Ci0KLSAg
ICBpbmxpbmUgaW50MzJfdCBvZmZzZXRGb3JWYWx1ZShTdHJpbmdJbXBsKiB2YWx1ZSwgaW50MzJf
dCBkZWZhdWx0T2Zmc2V0KQotICAgIHsKLSAgICAgICAgU3RyaW5nT2Zmc2V0VGFibGU6OmNvbnN0
X2l0ZXJhdG9yIGVuZCA9IG9mZnNldFRhYmxlLmVuZCgpOwotICAgICAgICBTdHJpbmdPZmZzZXRU
YWJsZTo6Y29uc3RfaXRlcmF0b3IgbG9jID0gb2Zmc2V0VGFibGUuZmluZCh2YWx1ZSk7Ci0gICAg
ICAgIGlmIChsb2MgPT0gZW5kKQotICAgICAgICAgICAgcmV0dXJuIGRlZmF1bHRPZmZzZXQ7Ci0g
ICAgICAgIHJldHVybiBsb2MtPnZhbHVlLmJyYW5jaE9mZnNldDsKLSAgICB9Ci0KLX07Ci0KLXN0
cnVjdCBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSB7Ci0gICAgVmVjdG9yPGludDMyX3Q+IGJyYW5j
aE9mZnNldHM7Ci0gICAgaW50MzJfdCBtaW47Ci0KLSAgICBpbnQzMl90IG9mZnNldEZvclZhbHVl
KGludDMyX3QgdmFsdWUsIGludDMyX3QgZGVmYXVsdE9mZnNldCk7Ci0gICAgdm9pZCBhZGQoaW50
MzJfdCBrZXksIGludDMyX3Qgb2Zmc2V0KQotICAgIHsKLSAgICAgICAgaWYgKCFicmFuY2hPZmZz
ZXRzW2tleV0pCi0gICAgICAgICAgICBicmFuY2hPZmZzZXRzW2tleV0gPSBvZmZzZXQ7Ci0gICAg
fQotfTsKLQotc3RydWN0IFVubGlua2VkSW5zdHJ1Y3Rpb24gewotICAgIFVubGlua2VkSW5zdHJ1
Y3Rpb24oKSB7IHUub3BlcmFuZCA9IDA7IH0KLSAgICBVbmxpbmtlZEluc3RydWN0aW9uKE9wY29k
ZUlEIG9wY29kZSkgeyB1Lm9wY29kZSA9IG9wY29kZTsgfQotICAgIFVubGlua2VkSW5zdHJ1Y3Rp
b24oaW50IG9wZXJhbmQpIHsgdS5vcGVyYW5kID0gb3BlcmFuZDsgfQotICAgIHVuaW9uIHsKLSAg
ICAgICAgT3Bjb2RlSUQgb3Bjb2RlOwotICAgICAgICBpbnQzMl90IG9wZXJhbmQ7Ci0gICAgICAg
IHVuc2lnbmVkIGluZGV4OwotICAgIH0gdTsKLX07Ci0KLWNsYXNzIFVubGlua2VkQ29kZUJsb2Nr
IDogcHVibGljIEpTQ2VsbCB7Ci1wdWJsaWM6Ci0gICAgdHlwZWRlZiBKU0NlbGwgQmFzZTsKLSAg
ICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVG
bGFnczsKLQotICAgIHN0YXRpYyBjb25zdCBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOwot
Ci0gICAgZW51bSB7IENhbGxGdW5jdGlvbiwgQXBwbHlGdW5jdGlvbiB9OwotCi0gICAgdHlwZWRl
ZiBVbmxpbmtlZEluc3RydWN0aW9uIEluc3RydWN0aW9uOwotICAgIHR5cGVkZWYgVmVjdG9yPFVu
bGlua2VkSW5zdHJ1Y3Rpb24sIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93PiBVbnBhY2tlZEluc3Ry
dWN0aW9uczsKLQotICAgIGJvb2wgaXNDb25zdHJ1Y3RvcigpIGNvbnN0IHsgcmV0dXJuIG1faXND
b25zdHJ1Y3RvcjsgfQotICAgIGJvb2wgaXNTdHJpY3RNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9p
c1N0cmljdE1vZGU7IH0KLSAgICBib29sIHVzZXNFdmFsKCkgY29uc3QgeyByZXR1cm4gbV91c2Vz
RXZhbDsgfQotICAgIFNvdXJjZVBhcnNlTW9kZSBwYXJzZU1vZGUoKSBjb25zdCB7IHJldHVybiBt
X3BhcnNlTW9kZTsgfQotICAgIGJvb2wgaXNBcnJvd0Z1bmN0aW9uKCkgY29uc3QgeyByZXR1cm4g
aXNBcnJvd0Z1bmN0aW9uUGFyc2VNb2RlKHBhcnNlTW9kZSgpKTsgfQotICAgIERlcml2ZWRDb250
ZXh0VHlwZSBkZXJpdmVkQ29udGV4dFR5cGUoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxE
ZXJpdmVkQ29udGV4dFR5cGU+KG1fZGVyaXZlZENvbnRleHRUeXBlKTsgfQotICAgIEV2YWxDb250
ZXh0VHlwZSBldmFsQ29udGV4dFR5cGUoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxFdmFs
Q29udGV4dFR5cGU+KG1fZXZhbENvbnRleHRUeXBlKTsgfQotICAgIGJvb2wgaXNBcnJvd0Z1bmN0
aW9uQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1faXNBcnJvd0Z1bmN0aW9uQ29udGV4dDsgfQot
ICAgIGJvb2wgaXNDbGFzc0NvbnRleHQoKSBjb25zdCB7IHJldHVybiBtX2lzQ2xhc3NDb250ZXh0
OyB9Ci0KLSAgICB2b2lkIGFkZEV4cHJlc3Npb25JbmZvKHVuc2lnbmVkIGluc3RydWN0aW9uT2Zm
c2V0LCBpbnQgZGl2b3QsCi0gICAgICAgIGludCBzdGFydE9mZnNldCwgaW50IGVuZE9mZnNldCwg
dW5zaWduZWQgbGluZSwgdW5zaWduZWQgY29sdW1uKTsKLQotICAgIHZvaWQgYWRkVHlwZVByb2Zp
bGVyRXhwcmVzc2lvbkluZm8odW5zaWduZWQgaW5zdHJ1Y3Rpb25PZmZzZXQsIHVuc2lnbmVkIHN0
YXJ0RGl2b3QsIHVuc2lnbmVkIGVuZERpdm90KTsKLQotICAgIGJvb2wgaGFzRXhwcmVzc2lvbklu
Zm8oKSB7IHJldHVybiBtX2V4cHJlc3Npb25JbmZvLnNpemUoKTsgfQotICAgIGNvbnN0IFZlY3Rv
cjxFeHByZXNzaW9uUmFuZ2VJbmZvPiYgZXhwcmVzc2lvbkluZm8oKSB7IHJldHVybiBtX2V4cHJl
c3Npb25JbmZvOyB9Ci0KLSAgICAvLyBTcGVjaWFsIHJlZ2lzdGVycwotICAgIHZvaWQgc2V0VGhp
c1JlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciB0aGlzUmVnaXN0ZXIpIHsgbV90aGlzUmVnaXN0ZXIg
PSB0aGlzUmVnaXN0ZXI7IH0KLSAgICB2b2lkIHNldFNjb3BlUmVnaXN0ZXIoVmlydHVhbFJlZ2lz
dGVyIHNjb3BlUmVnaXN0ZXIpIHsgbV9zY29wZVJlZ2lzdGVyID0gc2NvcGVSZWdpc3RlcjsgfQot
Ci0gICAgYm9vbCB1c2VzR2xvYmFsT2JqZWN0KCkgY29uc3QgeyByZXR1cm4gbV9nbG9iYWxPYmpl
Y3RSZWdpc3Rlci5pc1ZhbGlkKCk7IH0KLSAgICB2b2lkIHNldEdsb2JhbE9iamVjdFJlZ2lzdGVy
KFZpcnR1YWxSZWdpc3RlciBnbG9iYWxPYmplY3RSZWdpc3RlcikgeyBtX2dsb2JhbE9iamVjdFJl
Z2lzdGVyID0gZ2xvYmFsT2JqZWN0UmVnaXN0ZXI7IH0KLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZ2xv
YmFsT2JqZWN0UmVnaXN0ZXIoKSBjb25zdCB7IHJldHVybiBtX2dsb2JhbE9iamVjdFJlZ2lzdGVy
OyB9Ci0KLSAgICAvLyBQYXJhbWV0ZXIgaW5mb3JtYXRpb24KLSAgICB2b2lkIHNldE51bVBhcmFt
ZXRlcnMoaW50IG5ld1ZhbHVlKSB7IG1fbnVtUGFyYW1ldGVycyA9IG5ld1ZhbHVlOyB9Ci0gICAg
dm9pZCBhZGRQYXJhbWV0ZXIoKSB7IG1fbnVtUGFyYW1ldGVycysrOyB9Ci0gICAgdW5zaWduZWQg
bnVtUGFyYW1ldGVycygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtUGFyYW1ldGVyczsgfQotCi0gICAg
dW5zaWduZWQgYWRkUmVnRXhwKFJlZ0V4cCogcikKLSAgICB7Ci0gICAgICAgIGNyZWF0ZVJhcmVE
YXRhSWZOZWNlc3NhcnkoKTsKLSAgICAgICAgdW5zaWduZWQgc2l6ZSA9IG1fcmFyZURhdGEtPm1f
cmVnZXhwcy5zaXplKCk7Ci0gICAgICAgIG1fcmFyZURhdGEtPm1fcmVnZXhwcy5hcHBlbmQoV3Jp
dGVCYXJyaWVyPFJlZ0V4cD4oKnZtKCksIHRoaXMsIHIpKTsKLSAgICAgICAgcmV0dXJuIHNpemU7
Ci0gICAgfQotICAgIHVuc2lnbmVkIG51bWJlck9mUmVnRXhwcygpIGNvbnN0Ci0gICAgewotICAg
ICAgICBpZiAoIW1fcmFyZURhdGEpCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgcmV0
dXJuIG1fcmFyZURhdGEtPm1fcmVnZXhwcy5zaXplKCk7Ci0gICAgfQotICAgIFJlZ0V4cCogcmVn
ZXhwKGludCBpbmRleCkgY29uc3QgeyBBU1NFUlQobV9yYXJlRGF0YSk7IHJldHVybiBtX3JhcmVE
YXRhLT5tX3JlZ2V4cHNbaW5kZXhdLmdldCgpOyB9Ci0KLSAgICAvLyBDb25zdGFudCBQb29scwot
Ci0gICAgc2l6ZV90IG51bWJlck9mSWRlbnRpZmllcnMoKSBjb25zdCB7IHJldHVybiBtX2lkZW50
aWZpZXJzLnNpemUoKTsgfQotICAgIHZvaWQgYWRkSWRlbnRpZmllcihjb25zdCBJZGVudGlmaWVy
JiBpKSB7IHJldHVybiBtX2lkZW50aWZpZXJzLmFwcGVuZChpKTsgfQotICAgIGNvbnN0IElkZW50
aWZpZXImIGlkZW50aWZpZXIoaW50IGluZGV4KSBjb25zdCB7IHJldHVybiBtX2lkZW50aWZpZXJz
W2luZGV4XTsgfQotICAgIGNvbnN0IFZlY3RvcjxJZGVudGlmaWVyPiYgaWRlbnRpZmllcnMoKSBj
b25zdCB7IHJldHVybiBtX2lkZW50aWZpZXJzOyB9Ci0KLSAgICB1bnNpZ25lZCBhZGRDb25zdGFu
dChKU1ZhbHVlIHYsIFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbiBzb3VyY2VDb2RlUmVwcmVzZW50
YXRpb24gPSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246Ok90aGVyKQotICAgIHsKLSAgICAgICAg
dW5zaWduZWQgcmVzdWx0ID0gbV9jb25zdGFudFJlZ2lzdGVycy5zaXplKCk7Ci0gICAgICAgIG1f
Y29uc3RhbnRSZWdpc3RlcnMuYXBwZW5kKFdyaXRlQmFycmllcjxVbmtub3duPigpKTsKLSAgICAg
ICAgbV9jb25zdGFudFJlZ2lzdGVycy5sYXN0KCkuc2V0KCp2bSgpLCB0aGlzLCB2KTsKLSAgICAg
ICAgbV9jb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24uYXBwZW5kKHNvdXJjZUNvZGVS
ZXByZXNlbnRhdGlvbik7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotICAgIHVuc2ln
bmVkIGFkZENvbnN0YW50KExpbmtUaW1lQ29uc3RhbnQgdHlwZSkKLSAgICB7Ci0gICAgICAgIHVu
c2lnbmVkIHJlc3VsdCA9IG1fY29uc3RhbnRSZWdpc3RlcnMuc2l6ZSgpOwotICAgICAgICBBU1NF
UlQocmVzdWx0KTsKLSAgICAgICAgdW5zaWduZWQgaW5kZXggPSBzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4odHlwZSk7Ci0gICAgICAgIEFTU0VSVChpbmRleCA8IExpbmtUaW1lQ29uc3RhbnRDb3VudCk7
Ci0gICAgICAgIG1fbGlua1RpbWVDb25zdGFudHNbaW5kZXhdID0gcmVzdWx0OwotICAgICAgICBt
X2NvbnN0YW50UmVnaXN0ZXJzLmFwcGVuZChXcml0ZUJhcnJpZXI8VW5rbm93bj4oKSk7Ci0gICAg
ICAgIG1fY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uLmFwcGVuZChTb3VyY2VDb2Rl
UmVwcmVzZW50YXRpb246Ok90aGVyKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0g
ICAgdW5zaWduZWQgcmVnaXN0ZXJJbmRleEZvckxpbmtUaW1lQ29uc3RhbnQoTGlua1RpbWVDb25z
dGFudCB0eXBlKQotICAgIHsKLSAgICAgICAgdW5zaWduZWQgaW5kZXggPSBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4odHlwZSk7Ci0gICAgICAgIEFTU0VSVChpbmRleCA8IExpbmtUaW1lQ29uc3RhbnRD
b3VudCk7Ci0gICAgICAgIHJldHVybiBtX2xpbmtUaW1lQ29uc3RhbnRzW2luZGV4XTsKLSAgICB9
Ci0gICAgY29uc3QgVmVjdG9yPFdyaXRlQmFycmllcjxVbmtub3duPj4mIGNvbnN0YW50UmVnaXN0
ZXJzKCkgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyczsgfQotICAgIGNvbnN0IFdyaXRlQmFy
cmllcjxVbmtub3duPiYgY29uc3RhbnRSZWdpc3RlcihpbnQgaW5kZXgpIGNvbnN0IHsgcmV0dXJu
IG1fY29uc3RhbnRSZWdpc3RlcnNbaW5kZXggLSBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleF07
IH0KLSAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaXNDb25zdGFudFJlZ2lzdGVySW5kZXgoaW50IGlu
ZGV4KSBjb25zdCB7IHJldHVybiBpbmRleCA+PSBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleDsg
fQotICAgIGNvbnN0IFZlY3RvcjxTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24+JiBjb25zdGFudHNT
b3VyY2VDb2RlUmVwcmVzZW50YXRpb24oKSB7IHJldHVybiBtX2NvbnN0YW50c1NvdXJjZUNvZGVS
ZXByZXNlbnRhdGlvbjsgfQotCi0gICAgLy8gSnVtcHMKLSAgICBzaXplX3QgbnVtYmVyT2ZKdW1w
VGFyZ2V0cygpIGNvbnN0IHsgcmV0dXJuIG1fanVtcFRhcmdldHMuc2l6ZSgpOyB9Ci0gICAgdm9p
ZCBhZGRKdW1wVGFyZ2V0KHVuc2lnbmVkIGp1bXBUYXJnZXQpIHsgbV9qdW1wVGFyZ2V0cy5hcHBl
bmQoanVtcFRhcmdldCk7IH0KLSAgICB1bnNpZ25lZCBqdW1wVGFyZ2V0KGludCBpbmRleCkgY29u
c3QgeyByZXR1cm4gbV9qdW1wVGFyZ2V0c1tpbmRleF07IH0KLSAgICB1bnNpZ25lZCBsYXN0SnVt
cFRhcmdldCgpIGNvbnN0IHsgcmV0dXJuIG1fanVtcFRhcmdldHMubGFzdCgpOyB9Ci0KLSAgICBV
bmxpbmtlZEhhbmRsZXJJbmZvKiBoYW5kbGVyRm9yQnl0ZWNvZGVPZmZzZXQodW5zaWduZWQgYnl0
ZWNvZGVPZmZzZXQsIFJlcXVpcmVkSGFuZGxlciA9IFJlcXVpcmVkSGFuZGxlcjo6QW55SGFuZGxl
cik7Ci0gICAgVW5saW5rZWRIYW5kbGVySW5mbyogaGFuZGxlckZvckluZGV4KHVuc2lnbmVkLCBS
ZXF1aXJlZEhhbmRsZXIgPSBSZXF1aXJlZEhhbmRsZXI6OkFueUhhbmRsZXIpOwotCi0gICAgYm9v
bCBpc0J1aWx0aW5GdW5jdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1faXNCdWlsdGluRnVuY3Rpb247
IH0KLQotICAgIENvbnN0cnVjdG9yS2luZCBjb25zdHJ1Y3RvcktpbmQoKSBjb25zdCB7IHJldHVy
biBzdGF0aWNfY2FzdDxDb25zdHJ1Y3RvcktpbmQ+KG1fY29uc3RydWN0b3JLaW5kKTsgfQotICAg
IFN1cGVyQmluZGluZyBzdXBlckJpbmRpbmcoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxT
dXBlckJpbmRpbmc+KG1fc3VwZXJCaW5kaW5nKTsgfQotICAgIEpTUGFyc2VyU2NyaXB0TW9kZSBz
Y3JpcHRNb2RlKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8SlNQYXJzZXJTY3JpcHRNb2Rl
PihtX3NjcmlwdE1vZGUpOyB9Ci0KLSAgICB2b2lkIHNocmlua1RvRml0KCkKLSAgICB7Ci0gICAg
ICAgIG1fanVtcFRhcmdldHMuc2hyaW5rVG9GaXQoKTsKLSAgICAgICAgbV9pZGVudGlmaWVycy5z
aHJpbmtUb0ZpdCgpOwotICAgICAgICBtX2NvbnN0YW50UmVnaXN0ZXJzLnNocmlua1RvRml0KCk7
Ci0gICAgICAgIG1fY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uLnNocmlua1RvRml0
KCk7Ci0gICAgICAgIG1fZnVuY3Rpb25EZWNscy5zaHJpbmtUb0ZpdCgpOwotICAgICAgICBtX2Z1
bmN0aW9uRXhwcnMuc2hyaW5rVG9GaXQoKTsKLSAgICAgICAgbV9wcm9wZXJ0eUFjY2Vzc0luc3Ry
dWN0aW9ucy5zaHJpbmtUb0ZpdCgpOwotICAgICAgICBtX2V4cHJlc3Npb25JbmZvLnNocmlua1Rv
Rml0KCk7Ci0KLSAgICAgICAgaWYgKG1fcmFyZURhdGEpIHsKLSAgICAgICAgICAgIG1fcmFyZURh
dGEtPm1fZXhjZXB0aW9uSGFuZGxlcnMuc2hyaW5rVG9GaXQoKTsKLSAgICAgICAgICAgIG1fcmFy
ZURhdGEtPm1fcmVnZXhwcy5zaHJpbmtUb0ZpdCgpOwotICAgICAgICAgICAgbV9yYXJlRGF0YS0+
bV9jb25zdGFudEJ1ZmZlcnMuc2hyaW5rVG9GaXQoKTsKLSAgICAgICAgICAgIG1fcmFyZURhdGEt
Pm1fc3dpdGNoSnVtcFRhYmxlcy5zaHJpbmtUb0ZpdCgpOwotICAgICAgICAgICAgbV9yYXJlRGF0
YS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzLnNocmlua1RvRml0KCk7Ci0gICAgICAgICAgICBt
X3JhcmVEYXRhLT5tX2V4cHJlc3Npb25JbmZvRmF0UG9zaXRpb25zLnNocmlua1RvRml0KCk7Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICB2b2lkIHNldEluc3RydWN0aW9ucyhzdGQ6OnVuaXF1ZV9w
dHI8VW5saW5rZWRJbnN0cnVjdGlvblN0cmVhbT4pOwotICAgIGNvbnN0IFVubGlua2VkSW5zdHJ1
Y3Rpb25TdHJlYW0mIGluc3RydWN0aW9ucygpIGNvbnN0OwotCi0gICAgaW50IG51bUNhbGxlZUxv
Y2FscygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtQ2FsbGVlTG9jYWxzOyB9Ci0KLSAgICBpbnQgbV9u
dW1WYXJzOwotICAgIGludCBtX251bUNhcHR1cmVkVmFyczsKLSAgICBpbnQgbV9udW1DYWxsZWVM
b2NhbHM7Ci0KLSAgICAvLyBKdW1wIFRhYmxlcwotCi0gICAgc2l6ZV90IG51bWJlck9mU3dpdGNo
SnVtcFRhYmxlcygpIGNvbnN0IHsgcmV0dXJuIG1fcmFyZURhdGEgPyBtX3JhcmVEYXRhLT5tX3N3
aXRjaEp1bXBUYWJsZXMuc2l6ZSgpIDogMDsgfQotICAgIFVubGlua2VkU2ltcGxlSnVtcFRhYmxl
JiBhZGRTd2l0Y2hKdW1wVGFibGUoKSB7IGNyZWF0ZVJhcmVEYXRhSWZOZWNlc3NhcnkoKTsgbV9y
YXJlRGF0YS0+bV9zd2l0Y2hKdW1wVGFibGVzLmFwcGVuZChVbmxpbmtlZFNpbXBsZUp1bXBUYWJs
ZSgpKTsgcmV0dXJuIG1fcmFyZURhdGEtPm1fc3dpdGNoSnVtcFRhYmxlcy5sYXN0KCk7IH0KLSAg
ICBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYgc3dpdGNoSnVtcFRhYmxlKGludCB0YWJsZUluZGV4
KSB7IEFTU0VSVChtX3JhcmVEYXRhKTsgcmV0dXJuIG1fcmFyZURhdGEtPm1fc3dpdGNoSnVtcFRh
Ymxlc1t0YWJsZUluZGV4XTsgfQotCi0gICAgc2l6ZV90IG51bWJlck9mU3RyaW5nU3dpdGNoSnVt
cFRhYmxlcygpIGNvbnN0IHsgcmV0dXJuIG1fcmFyZURhdGEgPyBtX3JhcmVEYXRhLT5tX3N0cmlu
Z1N3aXRjaEp1bXBUYWJsZXMuc2l6ZSgpIDogMDsgfQotICAgIFVubGlua2VkU3RyaW5nSnVtcFRh
YmxlJiBhZGRTdHJpbmdTd2l0Y2hKdW1wVGFibGUoKSB7IGNyZWF0ZVJhcmVEYXRhSWZOZWNlc3Nh
cnkoKTsgbV9yYXJlRGF0YS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzLmFwcGVuZChVbmxpbmtl
ZFN0cmluZ0p1bXBUYWJsZSgpKTsgcmV0dXJuIG1fcmFyZURhdGEtPm1fc3RyaW5nU3dpdGNoSnVt
cFRhYmxlcy5sYXN0KCk7IH0KLSAgICBVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZSYgc3RyaW5nU3dp
dGNoSnVtcFRhYmxlKGludCB0YWJsZUluZGV4KSB7IEFTU0VSVChtX3JhcmVEYXRhKTsgcmV0dXJu
IG1fcmFyZURhdGEtPm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsgfQotCi0g
ICAgdW5zaWduZWQgYWRkRnVuY3Rpb25EZWNsKFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiBu
KQotICAgIHsKLSAgICAgICAgdW5zaWduZWQgc2l6ZSA9IG1fZnVuY3Rpb25EZWNscy5zaXplKCk7
Ci0gICAgICAgIG1fZnVuY3Rpb25EZWNscy5hcHBlbmQoV3JpdGVCYXJyaWVyPFVubGlua2VkRnVu
Y3Rpb25FeGVjdXRhYmxlPigpKTsKLSAgICAgICAgbV9mdW5jdGlvbkRlY2xzLmxhc3QoKS5zZXQo
KnZtKCksIHRoaXMsIG4pOwotICAgICAgICByZXR1cm4gc2l6ZTsKLSAgICB9Ci0gICAgVW5saW5r
ZWRGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uRGVjbChpbnQgaW5kZXgpIHsgcmV0dXJuIG1f
ZnVuY3Rpb25EZWNsc1tpbmRleF0uZ2V0KCk7IH0KLSAgICBzaXplX3QgbnVtYmVyT2ZGdW5jdGlv
bkRlY2xzKCkgeyByZXR1cm4gbV9mdW5jdGlvbkRlY2xzLnNpemUoKTsgfQotICAgIHVuc2lnbmVk
IGFkZEZ1bmN0aW9uRXhwcihVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogbikKLSAgICB7Ci0g
ICAgICAgIHVuc2lnbmVkIHNpemUgPSBtX2Z1bmN0aW9uRXhwcnMuc2l6ZSgpOwotICAgICAgICBt
X2Z1bmN0aW9uRXhwcnMuYXBwZW5kKFdyaXRlQmFycmllcjxVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0
YWJsZT4oKSk7Ci0gICAgICAgIG1fZnVuY3Rpb25FeHBycy5sYXN0KCkuc2V0KCp2bSgpLCB0aGlz
LCBuKTsKLSAgICAgICAgcmV0dXJuIHNpemU7Ci0gICAgfQotICAgIFVubGlua2VkRnVuY3Rpb25F
eGVjdXRhYmxlKiBmdW5jdGlvbkV4cHIoaW50IGluZGV4KSB7IHJldHVybiBtX2Z1bmN0aW9uRXhw
cnNbaW5kZXhdLmdldCgpOyB9Ci0gICAgc2l6ZV90IG51bWJlck9mRnVuY3Rpb25FeHBycygpIHsg
cmV0dXJuIG1fZnVuY3Rpb25FeHBycy5zaXplKCk7IH0KLQotICAgIC8vIEV4Y2VwdGlvbiBoYW5k
bGluZyBzdXBwb3J0Ci0gICAgc2l6ZV90IG51bWJlck9mRXhjZXB0aW9uSGFuZGxlcnMoKSBjb25z
dCB7IHJldHVybiBtX3JhcmVEYXRhID8gbV9yYXJlRGF0YS0+bV9leGNlcHRpb25IYW5kbGVycy5z
aXplKCkgOiAwOyB9Ci0gICAgdm9pZCBhZGRFeGNlcHRpb25IYW5kbGVyKGNvbnN0IFVubGlua2Vk
SGFuZGxlckluZm8mIGhhbmRsZXIpIHsgY3JlYXRlUmFyZURhdGFJZk5lY2Vzc2FyeSgpOyByZXR1
cm4gbV9yYXJlRGF0YS0+bV9leGNlcHRpb25IYW5kbGVycy5hcHBlbmQoaGFuZGxlcik7IH0KLSAg
ICBVbmxpbmtlZEhhbmRsZXJJbmZvJiBleGNlcHRpb25IYW5kbGVyKGludCBpbmRleCkgeyBBU1NF
UlQobV9yYXJlRGF0YSk7IHJldHVybiBtX3JhcmVEYXRhLT5tX2V4Y2VwdGlvbkhhbmRsZXJzW2lu
ZGV4XTsgfQotCi0gICAgVW5saW5rZWRBcnJheVByb2ZpbGUgYWRkQXJyYXlQcm9maWxlKCkgeyBy
ZXR1cm4gbV9hcnJheVByb2ZpbGVDb3VudCsrOyB9Ci0gICAgdW5zaWduZWQgbnVtYmVyT2ZBcnJh
eVByb2ZpbGVzKCkgeyByZXR1cm4gbV9hcnJheVByb2ZpbGVDb3VudDsgfQotICAgIFVubGlua2Vk
QXJyYXlBbGxvY2F0aW9uUHJvZmlsZSBhZGRBcnJheUFsbG9jYXRpb25Qcm9maWxlKCkgeyByZXR1
cm4gbV9hcnJheUFsbG9jYXRpb25Qcm9maWxlQ291bnQrKzsgfQotICAgIHVuc2lnbmVkIG51bWJl
ck9mQXJyYXlBbGxvY2F0aW9uUHJvZmlsZXMoKSB7IHJldHVybiBtX2FycmF5QWxsb2NhdGlvblBy
b2ZpbGVDb3VudDsgfQotICAgIFVubGlua2VkT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUgYWRkT2Jq
ZWN0QWxsb2NhdGlvblByb2ZpbGUoKSB7IHJldHVybiBtX29iamVjdEFsbG9jYXRpb25Qcm9maWxl
Q291bnQrKzsgfQotICAgIHVuc2lnbmVkIG51bWJlck9mT2JqZWN0QWxsb2NhdGlvblByb2ZpbGVz
KCkgeyByZXR1cm4gbV9vYmplY3RBbGxvY2F0aW9uUHJvZmlsZUNvdW50OyB9Ci0gICAgVW5saW5r
ZWRWYWx1ZVByb2ZpbGUgYWRkVmFsdWVQcm9maWxlKCkgeyByZXR1cm4gbV92YWx1ZVByb2ZpbGVD
b3VudCsrOyB9Ci0gICAgdW5zaWduZWQgbnVtYmVyT2ZWYWx1ZVByb2ZpbGVzKCkgeyByZXR1cm4g
bV92YWx1ZVByb2ZpbGVDb3VudDsgfQotCi0gICAgVW5saW5rZWRMTEludENhbGxMaW5rSW5mbyBh
ZGRMTEludENhbGxMaW5rSW5mbygpIHsgcmV0dXJuIG1fbGxpbnRDYWxsTGlua0luZm9Db3VudCsr
OyB9Ci0gICAgdW5zaWduZWQgbnVtYmVyT2ZMTGludENhbGxMaW5rSW5mb3MoKSB7IHJldHVybiBt
X2xsaW50Q2FsbExpbmtJbmZvQ291bnQ7IH0KLQotICAgIENvZGVUeXBlIGNvZGVUeXBlKCkgY29u
c3QgeyByZXR1cm4gbV9jb2RlVHlwZTsgfQotCi0gICAgVmlydHVhbFJlZ2lzdGVyIHRoaXNSZWdp
c3RlcigpIGNvbnN0IHsgcmV0dXJuIG1fdGhpc1JlZ2lzdGVyOyB9Ci0gICAgVmlydHVhbFJlZ2lz
dGVyIHNjb3BlUmVnaXN0ZXIoKSBjb25zdCB7IHJldHVybiBtX3Njb3BlUmVnaXN0ZXI7IH0KLQot
ICAgIHZvaWQgYWRkUHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbih1bnNpZ25lZCBwcm9wZXJ0eUFj
Y2Vzc0luc3RydWN0aW9uKQotICAgIHsKLSAgICAgICAgbV9wcm9wZXJ0eUFjY2Vzc0luc3RydWN0
aW9ucy5hcHBlbmQocHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbik7Ci0gICAgfQotCi0gICAgc2l6
ZV90IG51bWJlck9mUHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbnMoKSBjb25zdCB7IHJldHVybiBt
X3Byb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25zLnNpemUoKTsgfQotICAgIGNvbnN0IFZlY3Rvcjx1
bnNpZ25lZD4mIHByb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25zKCkgY29uc3QgeyByZXR1cm4gbV9w
cm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uczsgfQotCi0gICAgdHlwZWRlZiBWZWN0b3I8SlNWYWx1
ZT4gQ29uc3RhbnRCdWZmZXI7Ci0KLSAgICBzaXplX3QgY29uc3RhbnRCdWZmZXJDb3VudCgpIHsg
QVNTRVJUKG1fcmFyZURhdGEpOyByZXR1cm4gbV9yYXJlRGF0YS0+bV9jb25zdGFudEJ1ZmZlcnMu
c2l6ZSgpOyB9Ci0gICAgdW5zaWduZWQgYWRkQ29uc3RhbnRCdWZmZXIodW5zaWduZWQgbGVuZ3Ro
KQotICAgIHsKLSAgICAgICAgY3JlYXRlUmFyZURhdGFJZk5lY2Vzc2FyeSgpOwotICAgICAgICB1
bnNpZ25lZCBzaXplID0gbV9yYXJlRGF0YS0+bV9jb25zdGFudEJ1ZmZlcnMuc2l6ZSgpOwotICAg
ICAgICBtX3JhcmVEYXRhLT5tX2NvbnN0YW50QnVmZmVycy5hcHBlbmQoVmVjdG9yPEpTVmFsdWU+
KGxlbmd0aCkpOwotICAgICAgICByZXR1cm4gc2l6ZTsKLSAgICB9Ci0KLSAgICBjb25zdCBDb25z
dGFudEJ1ZmZlciYgY29uc3RhbnRCdWZmZXIodW5zaWduZWQgaW5kZXgpIGNvbnN0Ci0gICAgewot
ICAgICAgICBBU1NFUlQobV9yYXJlRGF0YSk7Ci0gICAgICAgIHJldHVybiBtX3JhcmVEYXRhLT5t
X2NvbnN0YW50QnVmZmVyc1tpbmRleF07Ci0gICAgfQotCi0gICAgQ29uc3RhbnRCdWZmZXImIGNv
bnN0YW50QnVmZmVyKHVuc2lnbmVkIGluZGV4KQotICAgIHsKLSAgICAgICAgQVNTRVJUKG1fcmFy
ZURhdGEpOwotICAgICAgICByZXR1cm4gbV9yYXJlRGF0YS0+bV9jb25zdGFudEJ1ZmZlcnNbaW5k
ZXhdOwotICAgIH0KLQotICAgIGJvb2wgaGFzUmFyZURhdGEoKSBjb25zdCB7IHJldHVybiBtX3Jh
cmVEYXRhLmdldCgpOyB9Ci0KLSAgICBpbnQgbGluZU51bWJlckZvckJ5dGVjb2RlT2Zmc2V0KHVu
c2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KTsKLQotICAgIHZvaWQgZXhwcmVzc2lvblJhbmdlRm9yQnl0
ZWNvZGVPZmZzZXQodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQsIGludCYgZGl2b3QsCi0gICAgICAg
IGludCYgc3RhcnRPZmZzZXQsIGludCYgZW5kT2Zmc2V0LCB1bnNpZ25lZCYgbGluZSwgdW5zaWdu
ZWQmIGNvbHVtbikgY29uc3Q7Ci0KLSAgICBib29sIHR5cGVQcm9maWxlckV4cHJlc3Npb25JbmZv
Rm9yQnl0ZWNvZGVPZmZzZXQodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQsIHVuc2lnbmVkJiBzdGFy
dERpdm90LCB1bnNpZ25lZCYgZW5kRGl2b3QpOwotCi0gICAgdm9pZCByZWNvcmRQYXJzZShDb2Rl
RmVhdHVyZXMgZmVhdHVyZXMsIGJvb2wgaGFzQ2FwdHVyZWRWYXJpYWJsZXMsIHVuc2lnbmVkIGZp
cnN0TGluZSwgdW5zaWduZWQgbGluZUNvdW50LCB1bnNpZ25lZCBlbmRDb2x1bW4pCi0gICAgewot
ICAgICAgICBtX2ZlYXR1cmVzID0gZmVhdHVyZXM7Ci0gICAgICAgIG1faGFzQ2FwdHVyZWRWYXJp
YWJsZXMgPSBoYXNDYXB0dXJlZFZhcmlhYmxlczsKLSAgICAgICAgbV9maXJzdExpbmUgPSBmaXJz
dExpbmU7Ci0gICAgICAgIG1fbGluZUNvdW50ID0gbGluZUNvdW50OwotICAgICAgICAvLyBGb3Ig
dGhlIFVubGlua2VkQ29kZUJsb2NrLCBzdGFydENvbHVtbiBpcyBhbHdheXMgMC4KLSAgICAgICAg
bV9lbmRDb2x1bW4gPSBlbmRDb2x1bW47Ci0gICAgfQotCi0gICAgY29uc3QgU3RyaW5nJiBzb3Vy
Y2VVUkxEaXJlY3RpdmUoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZVVSTERpcmVjdGl2ZTsgfQot
ICAgIGNvbnN0IFN0cmluZyYgc291cmNlTWFwcGluZ1VSTERpcmVjdGl2ZSgpIGNvbnN0IHsgcmV0
dXJuIG1fc291cmNlTWFwcGluZ1VSTERpcmVjdGl2ZTsgfQotICAgIHZvaWQgc2V0U291cmNlVVJM
RGlyZWN0aXZlKGNvbnN0IFN0cmluZyYgc291cmNlVVJMKSB7IG1fc291cmNlVVJMRGlyZWN0aXZl
ID0gc291cmNlVVJMOyB9Ci0gICAgdm9pZCBzZXRTb3VyY2VNYXBwaW5nVVJMRGlyZWN0aXZlKGNv
bnN0IFN0cmluZyYgc291cmNlTWFwcGluZ1VSTCkgeyBtX3NvdXJjZU1hcHBpbmdVUkxEaXJlY3Rp
dmUgPSBzb3VyY2VNYXBwaW5nVVJMOyB9Ci0KLSAgICBDb2RlRmVhdHVyZXMgY29kZUZlYXR1cmVz
KCkgY29uc3QgeyByZXR1cm4gbV9mZWF0dXJlczsgfQotICAgIGJvb2wgaGFzQ2FwdHVyZWRWYXJp
YWJsZXMoKSBjb25zdCB7IHJldHVybiBtX2hhc0NhcHR1cmVkVmFyaWFibGVzOyB9Ci0gICAgdW5z
aWduZWQgZmlyc3RMaW5lKCkgY29uc3QgeyByZXR1cm4gbV9maXJzdExpbmU7IH0KLSAgICB1bnNp
Z25lZCBsaW5lQ291bnQoKSBjb25zdCB7IHJldHVybiBtX2xpbmVDb3VudDsgfQotICAgIEFMV0FZ
U19JTkxJTkUgdW5zaWduZWQgc3RhcnRDb2x1bW4oKSBjb25zdCB7IHJldHVybiAwOyB9Ci0gICAg
dW5zaWduZWQgZW5kQ29sdW1uKCkgY29uc3QgeyByZXR1cm4gbV9lbmRDb2x1bW47IH0KLQotICAg
IHZvaWQgYWRkT3BQcm9maWxlQ29udHJvbEZsb3dCeXRlY29kZU9mZnNldChzaXplX3Qgb2Zmc2V0
KQotICAgIHsKLSAgICAgICAgY3JlYXRlUmFyZURhdGFJZk5lY2Vzc2FyeSgpOwotICAgICAgICBt
X3JhcmVEYXRhLT5tX29wUHJvZmlsZUNvbnRyb2xGbG93Qnl0ZWNvZGVPZmZzZXRzLmFwcGVuZChv
ZmZzZXQpOwotICAgIH0KLSAgICBjb25zdCBWZWN0b3I8c2l6ZV90PiYgb3BQcm9maWxlQ29udHJv
bEZsb3dCeXRlY29kZU9mZnNldHMoKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKG1fcmFy
ZURhdGEpOwotICAgICAgICByZXR1cm4gbV9yYXJlRGF0YS0+bV9vcFByb2ZpbGVDb250cm9sRmxv
d0J5dGVjb2RlT2Zmc2V0czsKLSAgICB9Ci0gICAgYm9vbCBoYXNPcFByb2ZpbGVDb250cm9sRmxv
d0J5dGVjb2RlT2Zmc2V0cygpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9yYXJlRGF0
YSAmJiAhbV9yYXJlRGF0YS0+bV9vcFByb2ZpbGVDb250cm9sRmxvd0J5dGVjb2RlT2Zmc2V0cy5p
c0VtcHR5KCk7Ci0gICAgfQotCi0gICAgdm9pZCBkdW1wRXhwcmVzc2lvblJhbmdlSW5mbygpOyAv
LyBGb3IgZGVidWdnaW5nIHB1cnBvc2Ugb25seS4KLQotICAgIGJvb2wgd2FzQ29tcGlsZWRXaXRo
RGVidWdnaW5nT3Bjb2RlcygpIGNvbnN0IHsgcmV0dXJuIG1fd2FzQ29tcGlsZWRXaXRoRGVidWdn
aW5nT3Bjb2RlczsgfQotCi0gICAgVHJpU3RhdGUgZGlkT3B0aW1pemUoKSBjb25zdCB7IHJldHVy
biBtX2RpZE9wdGltaXplOyB9Ci0gICAgdm9pZCBzZXREaWRPcHRpbWl6ZShUcmlTdGF0ZSBkaWRP
cHRpbWl6ZSkgeyBtX2RpZE9wdGltaXplID0gZGlkT3B0aW1pemU7IH0KLQotcHJvdGVjdGVkOgot
ICAgIFVubGlua2VkQ29kZUJsb2NrKFZNKiwgU3RydWN0dXJlKiwgQ29kZVR5cGUsIGNvbnN0IEV4
ZWN1dGFibGVJbmZvJiwgRGVidWdnZXJNb2RlKTsKLSAgICB+VW5saW5rZWRDb2RlQmxvY2soKTsK
LQotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mIHZtKQotICAgIHsKLSAgICAgICAgQmFzZTo6
ZmluaXNoQ3JlYXRpb24odm0pOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBmcmllbmQgY2xhc3Mg
Qnl0ZWNvZGVSZXdyaXRlcjsKLSAgICB2b2lkIGFwcGx5TW9kaWZpY2F0aW9uKEJ5dGVjb2RlUmV3
cml0ZXImKTsKLQotICAgIHZvaWQgY3JlYXRlUmFyZURhdGFJZk5lY2Vzc2FyeSgpCi0gICAgewot
ICAgICAgICBpZiAoIW1fcmFyZURhdGEpCi0gICAgICAgICAgICBtX3JhcmVEYXRhID0gc3RkOjpt
YWtlX3VuaXF1ZTxSYXJlRGF0YT4oKTsKLSAgICB9Ci0KLSAgICB2b2lkIGdldExpbmVBbmRDb2x1
bW4oY29uc3QgRXhwcmVzc2lvblJhbmdlSW5mbyYsIHVuc2lnbmVkJiBsaW5lLCB1bnNpZ25lZCYg
Y29sdW1uKSBjb25zdDsKLQotICAgIGludCBtX251bVBhcmFtZXRlcnM7Ci0KLSAgICBzdGQ6OnVu
aXF1ZV9wdHI8VW5saW5rZWRJbnN0cnVjdGlvblN0cmVhbT4gbV91bmxpbmtlZEluc3RydWN0aW9u
czsKLQotICAgIFZpcnR1YWxSZWdpc3RlciBtX3RoaXNSZWdpc3RlcjsKLSAgICBWaXJ0dWFsUmVn
aXN0ZXIgbV9zY29wZVJlZ2lzdGVyOwotICAgIFZpcnR1YWxSZWdpc3RlciBtX2dsb2JhbE9iamVj
dFJlZ2lzdGVyOwotCi0gICAgU3RyaW5nIG1fc291cmNlVVJMRGlyZWN0aXZlOwotICAgIFN0cmlu
ZyBtX3NvdXJjZU1hcHBpbmdVUkxEaXJlY3RpdmU7Ci0KLSAgICB1bnNpZ25lZCBtX3VzZXNFdmFs
IDogMTsKLSAgICB1bnNpZ25lZCBtX2lzU3RyaWN0TW9kZSA6IDE7Ci0gICAgdW5zaWduZWQgbV9p
c0NvbnN0cnVjdG9yIDogMTsKLSAgICB1bnNpZ25lZCBtX2hhc0NhcHR1cmVkVmFyaWFibGVzIDog
MTsKLSAgICB1bnNpZ25lZCBtX2lzQnVpbHRpbkZ1bmN0aW9uIDogMTsKLSAgICB1bnNpZ25lZCBt
X3N1cGVyQmluZGluZyA6IDE7Ci0gICAgdW5zaWduZWQgbV9zY3JpcHRNb2RlOiAxOwotICAgIHVu
c2lnbmVkIG1faXNBcnJvd0Z1bmN0aW9uQ29udGV4dCA6IDE7Ci0gICAgdW5zaWduZWQgbV9pc0Ns
YXNzQ29udGV4dCA6IDE7Ci0gICAgdW5zaWduZWQgbV93YXNDb21waWxlZFdpdGhEZWJ1Z2dpbmdP
cGNvZGVzIDogMTsKLSAgICB1bnNpZ25lZCBtX2NvbnN0cnVjdG9yS2luZCA6IDI7Ci0gICAgdW5z
aWduZWQgbV9kZXJpdmVkQ29udGV4dFR5cGUgOiAyOwotICAgIHVuc2lnbmVkIG1fZXZhbENvbnRl
eHRUeXBlIDogMjsKLSAgICB1bnNpZ25lZCBtX2ZpcnN0TGluZTsKLSAgICB1bnNpZ25lZCBtX2xp
bmVDb3VudDsKLSAgICB1bnNpZ25lZCBtX2VuZENvbHVtbjsKLQotICAgIFRyaVN0YXRlIG1fZGlk
T3B0aW1pemU7Ci0gICAgU291cmNlUGFyc2VNb2RlIG1fcGFyc2VNb2RlOwotICAgIENvZGVGZWF0
dXJlcyBtX2ZlYXR1cmVzOwotICAgIENvZGVUeXBlIG1fY29kZVR5cGU7Ci0KLSAgICBWZWN0b3I8
dW5zaWduZWQ+IG1fanVtcFRhcmdldHM7Ci0KLSAgICBWZWN0b3I8dW5zaWduZWQ+IG1fcHJvcGVy
dHlBY2Nlc3NJbnN0cnVjdGlvbnM7Ci0KLSAgICAvLyBDb25zdGFudCBQb29scwotICAgIFZlY3Rv
cjxJZGVudGlmaWVyPiBtX2lkZW50aWZpZXJzOwotICAgIFZlY3RvcjxXcml0ZUJhcnJpZXI8VW5r
bm93bj4+IG1fY29uc3RhbnRSZWdpc3RlcnM7Ci0gICAgVmVjdG9yPFNvdXJjZUNvZGVSZXByZXNl
bnRhdGlvbj4gbV9jb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb247Ci0gICAgdHlwZWRl
ZiBWZWN0b3I8V3JpdGVCYXJyaWVyPFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlPj4gRnVuY3Rp
b25FeHByZXNzaW9uVmVjdG9yOwotICAgIEZ1bmN0aW9uRXhwcmVzc2lvblZlY3RvciBtX2Z1bmN0
aW9uRGVjbHM7Ci0gICAgRnVuY3Rpb25FeHByZXNzaW9uVmVjdG9yIG1fZnVuY3Rpb25FeHByczsK
LSAgICBzdGQ6OmFycmF5PHVuc2lnbmVkLCBMaW5rVGltZUNvbnN0YW50Q291bnQ+IG1fbGlua1Rp
bWVDb25zdGFudHM7Ci0KLSAgICB1bnNpZ25lZCBtX2FycmF5UHJvZmlsZUNvdW50OwotICAgIHVu
c2lnbmVkIG1fYXJyYXlBbGxvY2F0aW9uUHJvZmlsZUNvdW50OwotICAgIHVuc2lnbmVkIG1fb2Jq
ZWN0QWxsb2NhdGlvblByb2ZpbGVDb3VudDsKLSAgICB1bnNpZ25lZCBtX3ZhbHVlUHJvZmlsZUNv
dW50OwotICAgIHVuc2lnbmVkIG1fbGxpbnRDYWxsTGlua0luZm9Db3VudDsKLQotcHVibGljOgot
ICAgIHN0cnVjdCBSYXJlRGF0YSB7Ci0gICAgICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwot
ICAgIHB1YmxpYzoKLSAgICAgICAgVmVjdG9yPFVubGlua2VkSGFuZGxlckluZm8+IG1fZXhjZXB0
aW9uSGFuZGxlcnM7Ci0KLSAgICAgICAgLy8gUmFyZSBDb25zdGFudHMKLSAgICAgICAgVmVjdG9y
PFdyaXRlQmFycmllcjxSZWdFeHA+PiBtX3JlZ2V4cHM7Ci0KLSAgICAgICAgLy8gQnVmZmVycyB1
c2VkIGZvciBsYXJnZSBhcnJheSBsaXRlcmFscwotICAgICAgICBWZWN0b3I8Q29uc3RhbnRCdWZm
ZXI+IG1fY29uc3RhbnRCdWZmZXJzOwotCi0gICAgICAgIC8vIEp1bXAgVGFibGVzCi0gICAgICAg
IFZlY3RvcjxVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZT4gbV9zd2l0Y2hKdW1wVGFibGVzOwotICAg
ICAgICBWZWN0b3I8VW5saW5rZWRTdHJpbmdKdW1wVGFibGU+IG1fc3RyaW5nU3dpdGNoSnVtcFRh
YmxlczsKLQotICAgICAgICBWZWN0b3I8RXhwcmVzc2lvblJhbmdlSW5mbzo6RmF0UG9zaXRpb24+
IG1fZXhwcmVzc2lvbkluZm9GYXRQb3NpdGlvbnM7Ci0KLSAgICAgICAgc3RydWN0IFR5cGVQcm9m
aWxlckV4cHJlc3Npb25SYW5nZSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBtX3N0YXJ0RGl2b3Q7
Ci0gICAgICAgICAgICB1bnNpZ25lZCBtX2VuZERpdm90OwotICAgICAgICB9OwotICAgICAgICBI
YXNoTWFwPHVuc2lnbmVkLCBUeXBlUHJvZmlsZXJFeHByZXNzaW9uUmFuZ2U+IG1fdHlwZVByb2Zp
bGVySW5mb01hcDsKLSAgICAgICAgVmVjdG9yPHNpemVfdD4gbV9vcFByb2ZpbGVDb250cm9sRmxv
d0J5dGVjb2RlT2Zmc2V0czsKLSAgICB9OwotCi1wcml2YXRlOgotICAgIHN0ZDo6dW5pcXVlX3B0
cjxSYXJlRGF0YT4gbV9yYXJlRGF0YTsKLSAgICBWZWN0b3I8RXhwcmVzc2lvblJhbmdlSW5mbz4g
bV9leHByZXNzaW9uSW5mbzsKLQotcHJvdGVjdGVkOgotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKLSAgICBzdGF0aWMgc2l6ZV90IGVzdGltYXRl
ZFNpemUoSlNDZWxsKik7Ci0KLXB1YmxpYzoKLSAgICBERUNMQVJFX0lORk87Ci19OwotCi1jbGFz
cyBVbmxpbmtlZEdsb2JhbENvZGVCbG9jayA6IHB1YmxpYyBVbmxpbmtlZENvZGVCbG9jayB7Ci1w
dWJsaWM6Ci0gICAgdHlwZWRlZiBVbmxpbmtlZENvZGVCbG9jayBCYXNlOwotCi1wcm90ZWN0ZWQ6
Ci0gICAgVW5saW5rZWRHbG9iYWxDb2RlQmxvY2soVk0qIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwgQ29kZVR5cGUgY29kZVR5cGUsIGNvbnN0IEV4ZWN1dGFibGVJbmZvJiBpbmZvLCBEZWJ1Z2dl
ck1vZGUgZGVidWdnZXJNb2RlKQotICAgICAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSwgY29kZVR5
cGUsIGluZm8sIGRlYnVnZ2VyTW9kZSkKLSAgICB7Ci0gICAgfQotCi0gICAgREVDTEFSRV9JTkZP
OwotfTsKLQotY2xhc3MgVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrIGZpbmFsIDogcHVibGljIFVu
bGlua2VkR2xvYmFsQ29kZUJsb2NrIHsKLXByaXZhdGU6Ci0gICAgZnJpZW5kIGNsYXNzIENvZGVD
YWNoZTsKLSAgICBzdGF0aWMgVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrKiBjcmVhdGUoVk0qIHZt
LCBjb25zdCBFeGVjdXRhYmxlSW5mbyYgaW5mbywgRGVidWdnZXJNb2RlIGRlYnVnZ2VyTW9kZSkK
LSAgICB7Ci0gICAgICAgIFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jayogaW5zdGFuY2UgPSBuZXcg
KE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2s+KHZtLT5oZWFw
KSkgVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrKHZtLCB2bS0+dW5saW5rZWRQcm9ncmFtQ29kZUJs
b2NrU3RydWN0dXJlLmdldCgpLCBpbmZvLCBkZWJ1Z2dlck1vZGUpOwotICAgICAgICBpbnN0YW5j
ZS0+ZmluaXNoQ3JlYXRpb24oKnZtKTsKLSAgICAgICAgcmV0dXJuIGluc3RhbmNlOwotICAgIH0K
LQotcHVibGljOgotICAgIHR5cGVkZWYgVW5saW5rZWRHbG9iYWxDb2RlQmxvY2sgQmFzZTsKLSAg
ICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVG
bGFncyB8IFN0cnVjdHVyZUlzSW1tb3J0YWw7Ci0KLSAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpT
Q2VsbCopOwotCi0gICAgdm9pZCBzZXRWYXJpYWJsZURlY2xhcmF0aW9ucyhjb25zdCBWYXJpYWJs
ZUVudmlyb25tZW50JiBlbnZpcm9ubWVudCkgeyBtX3ZhckRlY2xhcmF0aW9ucyA9IGVudmlyb25t
ZW50OyB9Ci0gICAgY29uc3QgVmFyaWFibGVFbnZpcm9ubWVudCYgdmFyaWFibGVEZWNsYXJhdGlv
bnMoKSBjb25zdCB7IHJldHVybiBtX3ZhckRlY2xhcmF0aW9uczsgfQotCi0gICAgdm9pZCBzZXRM
ZXhpY2FsRGVjbGFyYXRpb25zKGNvbnN0IFZhcmlhYmxlRW52aXJvbm1lbnQmIGVudmlyb25tZW50
KSB7IG1fbGV4aWNhbERlY2xhcmF0aW9ucyA9IGVudmlyb25tZW50OyB9Ci0gICAgY29uc3QgVmFy
aWFibGVFbnZpcm9ubWVudCYgbGV4aWNhbERlY2xhcmF0aW9ucygpIGNvbnN0IHsgcmV0dXJuIG1f
bGV4aWNhbERlY2xhcmF0aW9uczsgfQotCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihK
U0NlbGwqLCBTbG90VmlzaXRvciYpOwotCi1wcml2YXRlOgotICAgIFVubGlua2VkUHJvZ3JhbUNv
ZGVCbG9jayhWTSogdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBFeGVjdXRhYmxlSW5m
byYgaW5mbywgRGVidWdnZXJNb2RlIGRlYnVnZ2VyTW9kZSkKLSAgICAgICAgOiBCYXNlKHZtLCBz
dHJ1Y3R1cmUsIEdsb2JhbENvZGUsIGluZm8sIGRlYnVnZ2VyTW9kZSkKLSAgICB7Ci0gICAgfQot
Ci0gICAgVmFyaWFibGVFbnZpcm9ubWVudCBtX3ZhckRlY2xhcmF0aW9uczsKLSAgICBWYXJpYWJs
ZUVudmlyb25tZW50IG1fbGV4aWNhbERlY2xhcmF0aW9uczsKLQotcHVibGljOgotICAgIHN0YXRp
YyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEpTVmFsdWUgcHJvdG8pCi0gICAgewotICAgICAgICByZXR1cm4gU3RydWN0dXJl
OjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG8sIFR5cGVJbmZvKFVubGlua2VkUHJvZ3Jh
bUNvZGVCbG9ja1R5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKLSAgICB9Ci0KLSAgICBE
RUNMQVJFX0lORk87Ci19OwotCiBjbGFzcyBVbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2sg
ZmluYWwgOiBwdWJsaWMgVW5saW5rZWRHbG9iYWxDb2RlQmxvY2sgewogcHJpdmF0ZToKICAgICBm
cmllbmQgY2xhc3MgQ29kZUNhY2hlOwpAQCAtNjEyLDc1ICs5NCw0IEBAIHB1YmxpYzoKICAgICBE
RUNMQVJFX0lORk87CiB9OwogCi1jbGFzcyBVbmxpbmtlZEV2YWxDb2RlQmxvY2sgZmluYWwgOiBw
dWJsaWMgVW5saW5rZWRHbG9iYWxDb2RlQmxvY2sgewotcHJpdmF0ZToKLSAgICBmcmllbmQgY2xh
c3MgQ29kZUNhY2hlOwotCi0gICAgc3RhdGljIFVubGlua2VkRXZhbENvZGVCbG9jayogY3JlYXRl
KFZNKiB2bSwgY29uc3QgRXhlY3V0YWJsZUluZm8mIGluZm8sIERlYnVnZ2VyTW9kZSBkZWJ1Z2dl
ck1vZGUpCi0gICAgewotICAgICAgICBVbmxpbmtlZEV2YWxDb2RlQmxvY2sqIGluc3RhbmNlID0g
bmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8VW5saW5rZWRFdmFsQ29kZUJsb2NrPih2bS0+aGVh
cCkpIFVubGlua2VkRXZhbENvZGVCbG9jayh2bSwgdm0tPnVubGlua2VkRXZhbENvZGVCbG9ja1N0
cnVjdHVyZS5nZXQoKSwgaW5mbywgZGVidWdnZXJNb2RlKTsKLSAgICAgICAgaW5zdGFuY2UtPmZp
bmlzaENyZWF0aW9uKCp2bSk7Ci0gICAgICAgIHJldHVybiBpbnN0YW5jZTsKLSAgICB9Ci0KLXB1
YmxpYzoKLSAgICB0eXBlZGVmIFVubGlua2VkR2xvYmFsQ29kZUJsb2NrIEJhc2U7Ci0gICAgc3Rh
dGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3Mg
fCBTdHJ1Y3R1cmVJc0ltbW9ydGFsOwotCi0gICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwq
KTsKLQotICAgIGNvbnN0IElkZW50aWZpZXImIHZhcmlhYmxlKHVuc2lnbmVkIGluZGV4KSB7IHJl
dHVybiBtX3ZhcmlhYmxlc1tpbmRleF07IH0KLSAgICB1bnNpZ25lZCBudW1WYXJpYWJsZXMoKSB7
IHJldHVybiBtX3ZhcmlhYmxlcy5zaXplKCk7IH0KLSAgICB2b2lkIGFkb3B0VmFyaWFibGVzKFZl
Y3RvcjxJZGVudGlmaWVyLCAwLCBVbnNhZmVWZWN0b3JPdmVyZmxvdz4mIHZhcmlhYmxlcykKLSAg
ICB7Ci0gICAgICAgIEFTU0VSVChtX3ZhcmlhYmxlcy5pc0VtcHR5KCkpOwotICAgICAgICBtX3Zh
cmlhYmxlcy5zd2FwKHZhcmlhYmxlcyk7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIFVubGlua2Vk
RXZhbENvZGVCbG9jayhWTSogdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBFeGVjdXRh
YmxlSW5mbyYgaW5mbywgRGVidWdnZXJNb2RlIGRlYnVnZ2VyTW9kZSkKLSAgICAgICAgOiBCYXNl
KHZtLCBzdHJ1Y3R1cmUsIEV2YWxDb2RlLCBpbmZvLCBkZWJ1Z2dlck1vZGUpCi0gICAgewotICAg
IH0KLQotICAgIFZlY3RvcjxJZGVudGlmaWVyLCAwLCBVbnNhZmVWZWN0b3JPdmVyZmxvdz4gbV92
YXJpYWJsZXM7Ci0KLXB1YmxpYzoKLSAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1
cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3Qs
IHByb3RvLCBUeXBlSW5mbyhVbmxpbmtlZEV2YWxDb2RlQmxvY2tUeXBlLCBTdHJ1Y3R1cmVGbGFn
cyksIGluZm8oKSk7Ci0gICAgfQotCi0gICAgREVDTEFSRV9JTkZPOwotfTsKLQotY2xhc3MgVW5s
aW5rZWRGdW5jdGlvbkNvZGVCbG9jayBmaW5hbCA6IHB1YmxpYyBVbmxpbmtlZENvZGVCbG9jayB7
Ci1wdWJsaWM6Ci0gICAgdHlwZWRlZiBVbmxpbmtlZENvZGVCbG9jayBCYXNlOwotICAgIHN0YXRp
YyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwg
U3RydWN0dXJlSXNJbW1vcnRhbDsKLQotICAgIHN0YXRpYyBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJs
b2NrKiBjcmVhdGUoVk0qIHZtLCBDb2RlVHlwZSBjb2RlVHlwZSwgY29uc3QgRXhlY3V0YWJsZUlu
Zm8mIGluZm8sIERlYnVnZ2VyTW9kZSBkZWJ1Z2dlck1vZGUpCi0gICAgewotICAgICAgICBVbmxp
bmtlZEZ1bmN0aW9uQ29kZUJsb2NrKiBpbnN0YW5jZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVD
ZWxsPFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2s+KHZtLT5oZWFwKSkgVW5saW5rZWRGdW5jdGlv
bkNvZGVCbG9jayh2bSwgdm0tPnVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2tTdHJ1Y3R1cmUuZ2V0
KCksIGNvZGVUeXBlLCBpbmZvLCBkZWJ1Z2dlck1vZGUpOwotICAgICAgICBpbnN0YW5jZS0+Zmlu
aXNoQ3JlYXRpb24oKnZtKTsKLSAgICAgICAgcmV0dXJuIGluc3RhbmNlOwotICAgIH0KLQotICAg
IHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7Ci0KLXByaXZhdGU6Ci0gICAgVW5saW5rZWRG
dW5jdGlvbkNvZGVCbG9jayhWTSogdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBDb2RlVHlwZSBj
b2RlVHlwZSwgY29uc3QgRXhlY3V0YWJsZUluZm8mIGluZm8sIERlYnVnZ2VyTW9kZSBkZWJ1Z2dl
ck1vZGUpCi0gICAgICAgIDogQmFzZSh2bSwgc3RydWN0dXJlLCBjb2RlVHlwZSwgaW5mbywgZGVi
dWdnZXJNb2RlKQotICAgIHsKLSAgICB9Ci0gICAgCi1wdWJsaWM6Ci0gICAgc3RhdGljIFN0cnVj
dHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgSlNWYWx1ZSBwcm90bykKLSAgICB7Ci0gICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0
ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90bywgVHlwZUluZm8oVW5saW5rZWRGdW5jdGlvbkNvZGVC
bG9ja1R5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKLSAgICB9Ci0KLSAgICBERUNMQVJF
X0lORk87Ci19OwotCiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5s
aW5rZWRQcm9ncmFtQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMjA4
MzA4KQkoZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxv
Y2suY3BwOjIwODMwOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Vbmxpbmtl
ZFByb2dyYW1Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDMwIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTMsIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCBS
aWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIlVubGlua2VkQ29kZUJsb2NrLmgi
CisKKyNpbmNsdWRlICJCeXRlY29kZUdlbmVyYXRvci5oIgorI2luY2x1ZGUgIkJ5dGVjb2RlUmV3
cml0ZXIuaCIKKyNpbmNsdWRlICJDbGFzc0luZm8uaCIKKyNpbmNsdWRlICJDb2RlQ2FjaGUuaCIK
KyNpbmNsdWRlICJFeGVjdXRhYmxlSW5mby5oIgorI2luY2x1ZGUgIkZ1bmN0aW9uT3ZlcnJpZGVz
LmgiCisjaW5jbHVkZSAiSlNTdHJpbmcuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5j
bHVkZSAiUGFyc2VyLmgiCisjaW5jbHVkZSAiUHJlY2lzZUp1bXBUYXJnZXRzSW5saW5lcy5oIgor
I2luY2x1ZGUgIlNvdXJjZVByb3ZpZGVyLmgiCisjaW5jbHVkZSAiU3RydWN0dXJlLmgiCisjaW5j
bHVkZSAiU3ltYm9sVGFibGUuaCIKKyNpbmNsdWRlICJVbmxpbmtlZEluc3RydWN0aW9uU3RyZWFt
LmgiCisjaW5jbHVkZSA8d3RmL0RhdGFMb2cuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NvbnN0
IENsYXNzSW5mbyBVbmxpbmtlZENvZGVCbG9jazo6c19pbmZvID0geyAiVW5saW5rZWRDb2RlQmxv
Y2siLCAwLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKFVubGlua2VkQ29kZUJsb2NrKSB9OworY29u
c3QgQ2xhc3NJbmZvIFVubGlua2VkR2xvYmFsQ29kZUJsb2NrOjpzX2luZm8gPSB7ICJVbmxpbmtl
ZEdsb2JhbENvZGVCbG9jayIsICZCYXNlOjpzX2luZm8sIDAsIENSRUFURV9NRVRIT0RfVEFCTEUo
VW5saW5rZWRHbG9iYWxDb2RlQmxvY2spIH07Citjb25zdCBDbGFzc0luZm8gVW5saW5rZWRQcm9n
cmFtQ29kZUJsb2NrOjpzX2luZm8gPSB7ICJVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2siLCAmQmFz
ZTo6c19pbmZvLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKFVubGlua2VkUHJvZ3JhbUNvZGVCbG9j
aykgfTsKK2NvbnN0IENsYXNzSW5mbyBVbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2s6OnNf
aW5mbyA9IHsgIlVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayIsICZCYXNlOjpzX2luZm8s
IG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoVW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJs
b2NrKSB9OworY29uc3QgQ2xhc3NJbmZvIFVubGlua2VkRXZhbENvZGVCbG9jazo6c19pbmZvID0g
eyAiVW5saW5rZWRFdmFsQ29kZUJsb2NrIiwgJkJhc2U6OnNfaW5mbywgMCwgQ1JFQVRFX01FVEhP
RF9UQUJMRShVbmxpbmtlZEV2YWxDb2RlQmxvY2spIH07Citjb25zdCBDbGFzc0luZm8gVW5saW5r
ZWRGdW5jdGlvbkNvZGVCbG9jazo6c19pbmZvID0geyAiVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9j
ayIsICZCYXNlOjpzX2luZm8sIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoVW5saW5rZWRGdW5jdGlv
bkNvZGVCbG9jaykgfTsKKworVW5saW5rZWRDb2RlQmxvY2s6OlVubGlua2VkQ29kZUJsb2NrKFZN
KiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIENvZGVUeXBlIGNvZGVUeXBlLCBjb25zdCBFeGVj
dXRhYmxlSW5mbyYgaW5mbywgRGVidWdnZXJNb2RlIGRlYnVnZ2VyTW9kZSkKKyAgICA6IEJhc2Uo
KnZtLCBzdHJ1Y3R1cmUpCisgICAgLCBtX251bVZhcnMoMCkKKyAgICAsIG1fbnVtQ2FsbGVlTG9j
YWxzKDApCisgICAgLCBtX251bVBhcmFtZXRlcnMoMCkKKyAgICAsIG1fZ2xvYmFsT2JqZWN0UmVn
aXN0ZXIoVmlydHVhbFJlZ2lzdGVyKCkpCisgICAgLCBtX3VzZXNFdmFsKGluZm8udXNlc0V2YWwo
KSkKKyAgICAsIG1faXNTdHJpY3RNb2RlKGluZm8uaXNTdHJpY3RNb2RlKCkpCisgICAgLCBtX2lz
Q29uc3RydWN0b3IoaW5mby5pc0NvbnN0cnVjdG9yKCkpCisgICAgLCBtX2hhc0NhcHR1cmVkVmFy
aWFibGVzKGZhbHNlKQorICAgICwgbV9pc0J1aWx0aW5GdW5jdGlvbihpbmZvLmlzQnVpbHRpbkZ1
bmN0aW9uKCkpCisgICAgLCBtX3N1cGVyQmluZGluZyhzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaW5m
by5zdXBlckJpbmRpbmcoKSkpCisgICAgLCBtX3NjcmlwdE1vZGUoc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KGluZm8uc2NyaXB0TW9kZSgpKSkKKyAgICAsIG1faXNBcnJvd0Z1bmN0aW9uQ29udGV4dChp
bmZvLmlzQXJyb3dGdW5jdGlvbkNvbnRleHQoKSkKKyAgICAsIG1faXNDbGFzc0NvbnRleHQoaW5m
by5pc0NsYXNzQ29udGV4dCgpKQorICAgICwgbV93YXNDb21waWxlZFdpdGhEZWJ1Z2dpbmdPcGNv
ZGVzKGRlYnVnZ2VyTW9kZSA9PSBEZWJ1Z2dlck1vZGU6OkRlYnVnZ2VyT24gfHwgT3B0aW9uczo6
Zm9yY2VEZWJ1Z2dlckJ5dGVjb2RlR2VuZXJhdGlvbigpKQorICAgICwgbV9jb25zdHJ1Y3Rvcktp
bmQoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGluZm8uY29uc3RydWN0b3JLaW5kKCkpKQorICAgICwg
bV9kZXJpdmVkQ29udGV4dFR5cGUoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGluZm8uZGVyaXZlZENv
bnRleHRUeXBlKCkpKQorICAgICwgbV9ldmFsQ29udGV4dFR5cGUoc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KGluZm8uZXZhbENvbnRleHRUeXBlKCkpKQorICAgICwgbV9maXJzdExpbmUoMCkKKyAgICAs
IG1fbGluZUNvdW50KDApCisgICAgLCBtX2VuZENvbHVtbihVSU5UX01BWCkKKyAgICAsIG1fZGlk
T3B0aW1pemUoTWl4ZWRUcmlTdGF0ZSkKKyAgICAsIG1fcGFyc2VNb2RlKGluZm8ucGFyc2VNb2Rl
KCkpCisgICAgLCBtX2ZlYXR1cmVzKDApCisgICAgLCBtX2NvZGVUeXBlKGNvZGVUeXBlKQorICAg
ICwgbV9hcnJheVByb2ZpbGVDb3VudCgwKQorICAgICwgbV9hcnJheUFsbG9jYXRpb25Qcm9maWxl
Q291bnQoMCkKKyAgICAsIG1fb2JqZWN0QWxsb2NhdGlvblByb2ZpbGVDb3VudCgwKQorICAgICwg
bV92YWx1ZVByb2ZpbGVDb3VudCgwKQorICAgICwgbV9sbGludENhbGxMaW5rSW5mb0NvdW50KDAp
Cit7CisgICAgZm9yIChhdXRvJiBjb25zdGFudFJlZ2lzdGVySW5kZXggOiBtX2xpbmtUaW1lQ29u
c3RhbnRzKQorICAgICAgICBjb25zdGFudFJlZ2lzdGVySW5kZXggPSAwOworICAgIEFTU0VSVCht
X2NvbnN0cnVjdG9yS2luZCA9PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaW5mby5jb25zdHJ1Y3Rv
cktpbmQoKSkpOworfQorCit2b2lkIFVubGlua2VkQ29kZUJsb2NrOjp2aXNpdENoaWxkcmVuKEpT
Q2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgVW5saW5rZWRDb2RlQmxv
Y2sqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8VW5saW5rZWRDb2RlQmxvY2sqPihjZWxsKTsKKyAgICBB
U1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CisgICAgQmFzZTo6
dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKKyAgICBmb3IgKEZ1bmN0aW9uRXhw
cmVzc2lvblZlY3Rvcjo6aXRlcmF0b3IgcHRyID0gdGhpc09iamVjdC0+bV9mdW5jdGlvbkRlY2xz
LmJlZ2luKCksIGVuZCA9IHRoaXNPYmplY3QtPm1fZnVuY3Rpb25EZWNscy5lbmQoKTsgcHRyICE9
IGVuZDsgKytwdHIpCisgICAgICAgIHZpc2l0b3IuYXBwZW5kKHB0cik7CisgICAgZm9yIChGdW5j
dGlvbkV4cHJlc3Npb25WZWN0b3I6Oml0ZXJhdG9yIHB0ciA9IHRoaXNPYmplY3QtPm1fZnVuY3Rp
b25FeHBycy5iZWdpbigpLCBlbmQgPSB0aGlzT2JqZWN0LT5tX2Z1bmN0aW9uRXhwcnMuZW5kKCk7
IHB0ciAhPSBlbmQ7ICsrcHRyKQorICAgICAgICB2aXNpdG9yLmFwcGVuZChwdHIpOworICAgIHZp
c2l0b3IuYXBwZW5kVmFsdWVzKHRoaXNPYmplY3QtPm1fY29uc3RhbnRSZWdpc3RlcnMuZGF0YSgp
LCB0aGlzT2JqZWN0LT5tX2NvbnN0YW50UmVnaXN0ZXJzLnNpemUoKSk7CisgICAgaWYgKHRoaXNP
YmplY3QtPm1fdW5saW5rZWRJbnN0cnVjdGlvbnMpCisgICAgICAgIHZpc2l0b3IucmVwb3J0RXh0
cmFNZW1vcnlWaXNpdGVkKHRoaXNPYmplY3QtPm1fdW5saW5rZWRJbnN0cnVjdGlvbnMtPnNpemVJ
bkJ5dGVzKCkpOworICAgIGlmICh0aGlzT2JqZWN0LT5tX3JhcmVEYXRhKSB7CisgICAgICAgIGZv
ciAoc2l6ZV90IGkgPSAwLCBlbmQgPSB0aGlzT2JqZWN0LT5tX3JhcmVEYXRhLT5tX3JlZ2V4cHMu
c2l6ZSgpOyBpICE9IGVuZDsgaSsrKQorICAgICAgICAgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNP
YmplY3QtPm1fcmFyZURhdGEtPm1fcmVnZXhwc1tpXSk7CisgICAgfQorfQorCitzaXplX3QgVW5s
aW5rZWRDb2RlQmxvY2s6OmVzdGltYXRlZFNpemUoSlNDZWxsKiBjZWxsKQoreworICAgIFVubGlu
a2VkQ29kZUJsb2NrKiB0aGlzT2JqZWN0ID0ganNDYXN0PFVubGlua2VkQ29kZUJsb2NrKj4oY2Vs
bCk7CisgICAgc2l6ZV90IGV4dHJhU2l6ZSA9IHRoaXNPYmplY3QtPm1fdW5saW5rZWRJbnN0cnVj
dGlvbnMgPyB0aGlzT2JqZWN0LT5tX3VubGlua2VkSW5zdHJ1Y3Rpb25zLT5zaXplSW5CeXRlcygp
IDogMDsKKyAgICByZXR1cm4gQmFzZTo6ZXN0aW1hdGVkU2l6ZShjZWxsKSArIGV4dHJhU2l6ZTsK
K30KKworaW50IFVubGlua2VkQ29kZUJsb2NrOjpsaW5lTnVtYmVyRm9yQnl0ZWNvZGVPZmZzZXQo
dW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQpCit7CisgICAgQVNTRVJUKGJ5dGVjb2RlT2Zmc2V0IDwg
aW5zdHJ1Y3Rpb25zKCkuY291bnQoKSk7CisgICAgaW50IGRpdm90OworICAgIGludCBzdGFydE9m
ZnNldDsKKyAgICBpbnQgZW5kT2Zmc2V0OworICAgIHVuc2lnbmVkIGxpbmU7CisgICAgdW5zaWdu
ZWQgY29sdW1uOworICAgIGV4cHJlc3Npb25SYW5nZUZvckJ5dGVjb2RlT2Zmc2V0KGJ5dGVjb2Rl
T2Zmc2V0LCBkaXZvdCwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCwgbGluZSwgY29sdW1uKTsKKyAg
ICByZXR1cm4gbGluZTsKK30KKworaW5saW5lIHZvaWQgVW5saW5rZWRDb2RlQmxvY2s6OmdldExp
bmVBbmRDb2x1bW4oY29uc3QgRXhwcmVzc2lvblJhbmdlSW5mbyYgaW5mbywKKyAgICB1bnNpZ25l
ZCYgbGluZSwgdW5zaWduZWQmIGNvbHVtbikgY29uc3QKK3sKKyAgICBzd2l0Y2ggKGluZm8ubW9k
ZSkgeworICAgIGNhc2UgRXhwcmVzc2lvblJhbmdlSW5mbzo6RmF0TGluZU1vZGU6CisgICAgICAg
IGluZm8uZGVjb2RlRmF0TGluZU1vZGUobGluZSwgY29sdW1uKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBFeHByZXNzaW9uUmFuZ2VJbmZvOjpGYXRDb2x1bW5Nb2RlOgorICAgICAgICBpbmZv
LmRlY29kZUZhdENvbHVtbk1vZGUobGluZSwgY29sdW1uKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBFeHByZXNzaW9uUmFuZ2VJbmZvOjpGYXRMaW5lQW5kQ29sdW1uTW9kZTogeworICAgICAg
ICB1bnNpZ25lZCBmYXRJbmRleCA9IGluZm8ucG9zaXRpb247CisgICAgICAgIEV4cHJlc3Npb25S
YW5nZUluZm86OkZhdFBvc2l0aW9uJiBmYXRQb3MgPSBtX3JhcmVEYXRhLT5tX2V4cHJlc3Npb25J
bmZvRmF0UG9zaXRpb25zW2ZhdEluZGV4XTsKKyAgICAgICAgbGluZSA9IGZhdFBvcy5saW5lOwor
ICAgICAgICBjb2x1bW4gPSBmYXRQb3MuY29sdW1uOworICAgICAgICBicmVhazsKKyAgICB9Cisg
ICAgfSAvLyBzd2l0Y2gKK30KKworI2lmbmRlZiBOREVCVUcKK3N0YXRpYyB2b2lkIGR1bXBMaW5l
Q29sdW1uRW50cnkoc2l6ZV90IGluZGV4LCBjb25zdCBVbmxpbmtlZEluc3RydWN0aW9uU3RyZWFt
JiBpbnN0cnVjdGlvblN0cmVhbSwgdW5zaWduZWQgaW5zdHJ1Y3Rpb25PZmZzZXQsIHVuc2lnbmVk
IGxpbmUsIHVuc2lnbmVkIGNvbHVtbikKK3sKKyAgICBjb25zdCBhdXRvJiBpbnN0cnVjdGlvbnMg
PSBpbnN0cnVjdGlvblN0cmVhbS51bnBhY2tGb3JEZWJ1Z2dpbmcoKTsKKyAgICBPcGNvZGVJRCBv
cGNvZGUgPSBpbnN0cnVjdGlvbnNbaW5zdHJ1Y3Rpb25PZmZzZXRdLnUub3Bjb2RlOworICAgIGNv
bnN0IGNoYXIqIGV2ZW50ID0gIiI7CisgICAgaWYgKG9wY29kZSA9PSBvcF9kZWJ1ZykgeworICAg
ICAgICBzd2l0Y2ggKGluc3RydWN0aW9uc1tpbnN0cnVjdGlvbk9mZnNldCArIDFdLnUub3BlcmFu
ZCkgeworICAgICAgICBjYXNlIFdpbGxFeGVjdXRlUHJvZ3JhbTogZXZlbnQgPSAiIFdpbGxFeGVj
dXRlUHJvZ3JhbSI7IGJyZWFrOworICAgICAgICBjYXNlIERpZEV4ZWN1dGVQcm9ncmFtOiBldmVu
dCA9ICIgRGlkRXhlY3V0ZVByb2dyYW0iOyBicmVhazsKKyAgICAgICAgY2FzZSBEaWRFbnRlckNh
bGxGcmFtZTogZXZlbnQgPSAiIERpZEVudGVyQ2FsbEZyYW1lIjsgYnJlYWs7CisgICAgICAgIGNh
c2UgRGlkUmVhY2hCcmVha3BvaW50OiBldmVudCA9ICIgRGlkUmVhY2hCcmVha3BvaW50IjsgYnJl
YWs7CisgICAgICAgIGNhc2UgV2lsbExlYXZlQ2FsbEZyYW1lOiBldmVudCA9ICIgV2lsbExlYXZl
Q2FsbEZyYW1lIjsgYnJlYWs7CisgICAgICAgIGNhc2UgV2lsbEV4ZWN1dGVTdGF0ZW1lbnQ6IGV2
ZW50ID0gIiBXaWxsRXhlY3V0ZVN0YXRlbWVudCI7IGJyZWFrOworICAgICAgICBjYXNlIFdpbGxF
eGVjdXRlRXhwcmVzc2lvbjogZXZlbnQgPSAiIFdpbGxFeGVjdXRlRXhwcmVzc2lvbiI7IGJyZWFr
OworICAgICAgICB9CisgICAgfQorICAgIGRhdGFMb2dGKCIgIFslenVdIHBjICV1IEAgbGluZSAl
dSBjb2wgJXUgOiAlcyVzXG4iLCBpbmRleCwgaW5zdHJ1Y3Rpb25PZmZzZXQsIGxpbmUsIGNvbHVt
biwgb3Bjb2RlTmFtZXNbb3Bjb2RlXSwgZXZlbnQpOworfQorCit2b2lkIFVubGlua2VkQ29kZUJs
b2NrOjpkdW1wRXhwcmVzc2lvblJhbmdlSW5mbygpCit7CisgICAgVmVjdG9yPEV4cHJlc3Npb25S
YW5nZUluZm8+JiBleHByZXNzaW9uSW5mbyA9IG1fZXhwcmVzc2lvbkluZm87CisKKyAgICBzaXpl
X3Qgc2l6ZSA9IG1fZXhwcmVzc2lvbkluZm8uc2l6ZSgpOworICAgIGRhdGFMb2dGKCJVbmxpbmtl
ZENvZGVCbG9jayAlcCBleHByZXNzaW9uUmFuZ2VJbmZvWyV6dV0ge1xuIiwgdGhpcywgc2l6ZSk7
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKKyAgICAgICAgRXhwcmVz
c2lvblJhbmdlSW5mbyYgaW5mbyA9IGV4cHJlc3Npb25JbmZvW2ldOworICAgICAgICB1bnNpZ25l
ZCBsaW5lOworICAgICAgICB1bnNpZ25lZCBjb2x1bW47CisgICAgICAgIGdldExpbmVBbmRDb2x1
bW4oaW5mbywgbGluZSwgY29sdW1uKTsKKyAgICAgICAgZHVtcExpbmVDb2x1bW5FbnRyeShpLCBp
bnN0cnVjdGlvbnMoKSwgaW5mby5pbnN0cnVjdGlvbk9mZnNldCwgbGluZSwgY29sdW1uKTsKKyAg
ICB9CisgICAgZGF0YUxvZygifVxuIik7Cit9CisjZW5kaWYKKwordm9pZCBVbmxpbmtlZENvZGVC
bG9jazo6ZXhwcmVzc2lvblJhbmdlRm9yQnl0ZWNvZGVPZmZzZXQodW5zaWduZWQgYnl0ZWNvZGVP
ZmZzZXQsCisgICAgaW50JiBkaXZvdCwgaW50JiBzdGFydE9mZnNldCwgaW50JiBlbmRPZmZzZXQs
IHVuc2lnbmVkJiBsaW5lLCB1bnNpZ25lZCYgY29sdW1uKSBjb25zdAoreworICAgIEFTU0VSVChi
eXRlY29kZU9mZnNldCA8IGluc3RydWN0aW9ucygpLmNvdW50KCkpOworCisgICAgaWYgKCFtX2V4
cHJlc3Npb25JbmZvLnNpemUoKSkgeworICAgICAgICBzdGFydE9mZnNldCA9IDA7CisgICAgICAg
IGVuZE9mZnNldCA9IDA7CisgICAgICAgIGRpdm90ID0gMDsKKyAgICAgICAgbGluZSA9IDA7Cisg
ICAgICAgIGNvbHVtbiA9IDA7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjb25zdCBW
ZWN0b3I8RXhwcmVzc2lvblJhbmdlSW5mbz4mIGV4cHJlc3Npb25JbmZvID0gbV9leHByZXNzaW9u
SW5mbzsKKworICAgIGludCBsb3cgPSAwOworICAgIGludCBoaWdoID0gZXhwcmVzc2lvbkluZm8u
c2l6ZSgpOworICAgIHdoaWxlIChsb3cgPCBoaWdoKSB7CisgICAgICAgIGludCBtaWQgPSBsb3cg
KyAoaGlnaCAtIGxvdykgLyAyOworICAgICAgICBpZiAoZXhwcmVzc2lvbkluZm9bbWlkXS5pbnN0
cnVjdGlvbk9mZnNldCA8PSBieXRlY29kZU9mZnNldCkKKyAgICAgICAgICAgIGxvdyA9IG1pZCAr
IDE7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGhpZ2ggPSBtaWQ7CisgICAgfQorCisgICAg
aWYgKCFsb3cpCisgICAgICAgIGxvdyA9IDE7CisKKyAgICBjb25zdCBFeHByZXNzaW9uUmFuZ2VJ
bmZvJiBpbmZvID0gZXhwcmVzc2lvbkluZm9bbG93IC0gMV07CisgICAgc3RhcnRPZmZzZXQgPSBp
bmZvLnN0YXJ0T2Zmc2V0OworICAgIGVuZE9mZnNldCA9IGluZm8uZW5kT2Zmc2V0OworICAgIGRp
dm90ID0gaW5mby5kaXZvdFBvaW50OworICAgIGdldExpbmVBbmRDb2x1bW4oaW5mbywgbGluZSwg
Y29sdW1uKTsKK30KKwordm9pZCBVbmxpbmtlZENvZGVCbG9jazo6YWRkRXhwcmVzc2lvbkluZm8o
dW5zaWduZWQgaW5zdHJ1Y3Rpb25PZmZzZXQsCisgICAgaW50IGRpdm90LCBpbnQgc3RhcnRPZmZz
ZXQsIGludCBlbmRPZmZzZXQsIHVuc2lnbmVkIGxpbmUsIHVuc2lnbmVkIGNvbHVtbikKK3sKKyAg
ICBpZiAoZGl2b3QgPiBFeHByZXNzaW9uUmFuZ2VJbmZvOjpNYXhEaXZvdCkgeworICAgICAgICAv
LyBPdmVyZmxvdyBoYXMgb2NjdXJyZWQsIHdlIGNhbiBvbmx5IGdpdmUgbGluZSBudW1iZXIgaW5m
byBmb3IgZXJyb3JzIGZvciB0aGlzIHJlZ2lvbgorICAgICAgICBkaXZvdCA9IDA7CisgICAgICAg
IHN0YXJ0T2Zmc2V0ID0gMDsKKyAgICAgICAgZW5kT2Zmc2V0ID0gMDsKKyAgICB9IGVsc2UgaWYg
KHN0YXJ0T2Zmc2V0ID4gRXhwcmVzc2lvblJhbmdlSW5mbzo6TWF4T2Zmc2V0KSB7CisgICAgICAg
IC8vIElmIHRoZSBzdGFydCBvZmZzZXQgaXMgb3V0IG9mIGJvdW5kcyB3ZSBjbGVhciBib3RoIG9m
ZnNldHMKKyAgICAgICAgLy8gc28gd2Ugb25seSBnZXQgdGhlIGRpdm90IG1hcmtlci4gRXJyb3Ig
bWVzc2FnZSB3aWxsIGhhdmUgdG8gYmUgcmVkdWNlZAorICAgICAgICAvLyB0byBsaW5lIGFuZCBj
aGFyUG9zaXRpb24gbnVtYmVyLgorICAgICAgICBzdGFydE9mZnNldCA9IDA7CisgICAgICAgIGVu
ZE9mZnNldCA9IDA7CisgICAgfSBlbHNlIGlmIChlbmRPZmZzZXQgPiBFeHByZXNzaW9uUmFuZ2VJ
bmZvOjpNYXhPZmZzZXQpIHsKKyAgICAgICAgLy8gVGhlIGVuZCBvZmZzZXQgaXMgb25seSB1c2Vk
IGZvciBhZGRpdGlvbmFsIGNvbnRleHQsIGFuZCBpcyBtdWNoIG1vcmUgbGlrZWx5CisgICAgICAg
IC8vIHRvIG92ZXJmbG93IChlZy4gZnVuY3Rpb24gY2FsbCBhcmd1bWVudHMpIHNvIHdlIGFyZSB3
aWxsaW5nIHRvIGRyb3AgaXQgd2l0aG91dAorICAgICAgICAvLyBkcm9wcGluZyB0aGUgcmVzdCBv
ZiB0aGUgcmFuZ2UuCisgICAgICAgIGVuZE9mZnNldCA9IDA7CisgICAgfQorCisgICAgdW5zaWdu
ZWQgcG9zaXRpb25Nb2RlID0KKyAgICAgICAgKGxpbmUgPD0gRXhwcmVzc2lvblJhbmdlSW5mbzo6
TWF4RmF0TGluZU1vZGVMaW5lICYmIGNvbHVtbiA8PSBFeHByZXNzaW9uUmFuZ2VJbmZvOjpNYXhG
YXRMaW5lTW9kZUNvbHVtbikgCisgICAgICAgID8gRXhwcmVzc2lvblJhbmdlSW5mbzo6RmF0TGlu
ZU1vZGUKKyAgICAgICAgOiAobGluZSA8PSBFeHByZXNzaW9uUmFuZ2VJbmZvOjpNYXhGYXRDb2x1
bW5Nb2RlTGluZSAmJiBjb2x1bW4gPD0gRXhwcmVzc2lvblJhbmdlSW5mbzo6TWF4RmF0Q29sdW1u
TW9kZUNvbHVtbikKKyAgICAgICAgPyBFeHByZXNzaW9uUmFuZ2VJbmZvOjpGYXRDb2x1bW5Nb2Rl
CisgICAgICAgIDogRXhwcmVzc2lvblJhbmdlSW5mbzo6RmF0TGluZUFuZENvbHVtbk1vZGU7CisK
KyAgICBFeHByZXNzaW9uUmFuZ2VJbmZvIGluZm87CisgICAgaW5mby5pbnN0cnVjdGlvbk9mZnNl
dCA9IGluc3RydWN0aW9uT2Zmc2V0OworICAgIGluZm8uZGl2b3RQb2ludCA9IGRpdm90OworICAg
IGluZm8uc3RhcnRPZmZzZXQgPSBzdGFydE9mZnNldDsKKyAgICBpbmZvLmVuZE9mZnNldCA9IGVu
ZE9mZnNldDsKKworICAgIGluZm8ubW9kZSA9IHBvc2l0aW9uTW9kZTsKKyAgICBzd2l0Y2ggKHBv
c2l0aW9uTW9kZSkgeworICAgIGNhc2UgRXhwcmVzc2lvblJhbmdlSW5mbzo6RmF0TGluZU1vZGU6
CisgICAgICAgIGluZm8uZW5jb2RlRmF0TGluZU1vZGUobGluZSwgY29sdW1uKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBFeHByZXNzaW9uUmFuZ2VJbmZvOjpGYXRDb2x1bW5Nb2RlOgorICAg
ICAgICBpbmZvLmVuY29kZUZhdENvbHVtbk1vZGUobGluZSwgY29sdW1uKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBFeHByZXNzaW9uUmFuZ2VJbmZvOjpGYXRMaW5lQW5kQ29sdW1uTW9kZTog
eworICAgICAgICBjcmVhdGVSYXJlRGF0YUlmTmVjZXNzYXJ5KCk7CisgICAgICAgIHVuc2lnbmVk
IGZhdEluZGV4ID0gbV9yYXJlRGF0YS0+bV9leHByZXNzaW9uSW5mb0ZhdFBvc2l0aW9ucy5zaXpl
KCk7CisgICAgICAgIEV4cHJlc3Npb25SYW5nZUluZm86OkZhdFBvc2l0aW9uIGZhdFBvcyA9IHsg
bGluZSwgY29sdW1uIH07CisgICAgICAgIG1fcmFyZURhdGEtPm1fZXhwcmVzc2lvbkluZm9GYXRQ
b3NpdGlvbnMuYXBwZW5kKGZhdFBvcyk7CisgICAgICAgIGluZm8ucG9zaXRpb24gPSBmYXRJbmRl
eDsKKyAgICB9CisgICAgfSAvLyBzd2l0Y2gKKworICAgIG1fZXhwcmVzc2lvbkluZm8uYXBwZW5k
KGluZm8pOworfQorCitib29sIFVubGlua2VkQ29kZUJsb2NrOjp0eXBlUHJvZmlsZXJFeHByZXNz
aW9uSW5mb0ZvckJ5dGVjb2RlT2Zmc2V0KHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0LCB1bnNpZ25l
ZCYgc3RhcnREaXZvdCwgdW5zaWduZWQmIGVuZERpdm90KQoreworICAgIHN0YXRpYyBjb25zdCBi
b29sIHZlcmJvc2UgPSBmYWxzZTsKKyAgICBpZiAoIW1fcmFyZURhdGEpIHsKKyAgICAgICAgaWYg
KHZlcmJvc2UpCisgICAgICAgICAgICBkYXRhTG9nRigiRG9uJ3QgaGF2ZSBhc3NpZ25tZW50IGlu
Zm8gZm9yIG9mZnNldDoldVxuIiwgYnl0ZWNvZGVPZmZzZXQpOworICAgICAgICBzdGFydERpdm90
ID0gVUlOVF9NQVg7CisgICAgICAgIGVuZERpdm90ID0gVUlOVF9NQVg7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisKKyAgICBhdXRvIGl0ZXIgPSBtX3JhcmVEYXRhLT5tX3R5cGVQcm9m
aWxlckluZm9NYXAuZmluZChieXRlY29kZU9mZnNldCk7CisgICAgaWYgKGl0ZXIgPT0gbV9yYXJl
RGF0YS0+bV90eXBlUHJvZmlsZXJJbmZvTWFwLmVuZCgpKSB7CisgICAgICAgIGlmICh2ZXJib3Nl
KQorICAgICAgICAgICAgZGF0YUxvZ0YoIkRvbid0IGhhdmUgYXNzaWdubWVudCBpbmZvIGZvciBv
ZmZzZXQ6JXVcbiIsIGJ5dGVjb2RlT2Zmc2V0KTsKKyAgICAgICAgc3RhcnREaXZvdCA9IFVJTlRf
TUFYOworICAgICAgICBlbmREaXZvdCA9IFVJTlRfTUFYOworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorICAgIAorICAgIFJhcmVEYXRhOjpUeXBlUHJvZmlsZXJFeHByZXNzaW9uUmFuZ2Um
IHJhbmdlID0gaXRlci0+dmFsdWU7CisgICAgc3RhcnREaXZvdCA9IHJhbmdlLm1fc3RhcnREaXZv
dDsKKyAgICBlbmREaXZvdCA9IHJhbmdlLm1fZW5kRGl2b3Q7CisgICAgcmV0dXJuIHRydWU7Cit9
CisKK3ZvaWQgVW5saW5rZWRDb2RlQmxvY2s6OmFkZFR5cGVQcm9maWxlckV4cHJlc3Npb25JbmZv
KHVuc2lnbmVkIGluc3RydWN0aW9uT2Zmc2V0LCB1bnNpZ25lZCBzdGFydERpdm90LCB1bnNpZ25l
ZCBlbmREaXZvdCkKK3sKKyAgICBjcmVhdGVSYXJlRGF0YUlmTmVjZXNzYXJ5KCk7CisgICAgUmFy
ZURhdGE6OlR5cGVQcm9maWxlckV4cHJlc3Npb25SYW5nZSByYW5nZTsKKyAgICByYW5nZS5tX3N0
YXJ0RGl2b3QgPSBzdGFydERpdm90OworICAgIHJhbmdlLm1fZW5kRGl2b3QgPSBlbmREaXZvdDsK
KyAgICBtX3JhcmVEYXRhLT5tX3R5cGVQcm9maWxlckluZm9NYXAuc2V0KGluc3RydWN0aW9uT2Zm
c2V0LCByYW5nZSk7Cit9CisKK3ZvaWQgVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrOjp2aXNpdENo
aWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgVW5saW5r
ZWRQcm9ncmFtQ29kZUJsb2NrKiB0aGlzT2JqZWN0ID0ganNDYXN0PFVubGlua2VkUHJvZ3JhbUNv
ZGVCbG9jayo+KGNlbGwpOworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVj
dCwgaW5mbygpKTsKKyAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3Ip
OworfQorCit2b2lkIFVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jazo6dmlzaXRDaGlsZHJl
bihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIFVubGlua2VkTW9k
dWxlUHJvZ3JhbUNvZGVCbG9jayogdGhpc09iamVjdCA9IGpzQ2FzdDxVbmxpbmtlZE1vZHVsZVBy
b2dyYW1Db2RlQmxvY2sqPihjZWxsKTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRo
aXNPYmplY3QsIGluZm8oKSk7CisgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2
aXNpdG9yKTsKK30KKworVW5saW5rZWRDb2RlQmxvY2s6On5VbmxpbmtlZENvZGVCbG9jaygpCit7
Cit9CisKK3ZvaWQgVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrOjpkZXN0cm95KEpTQ2VsbCogY2Vs
bCkKK3sKKyAgICBqc0Nhc3Q8VW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrKj4oY2VsbCktPn5Vbmxp
bmtlZFByb2dyYW1Db2RlQmxvY2soKTsKK30KKwordm9pZCBVbmxpbmtlZE1vZHVsZVByb2dyYW1D
b2RlQmxvY2s6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQoreworICAgIGpzQ2FzdDxVbmxpbmtlZE1v
ZHVsZVByb2dyYW1Db2RlQmxvY2sqPihjZWxsKS0+flVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVC
bG9jaygpOworfQorCit2b2lkIFVubGlua2VkRXZhbENvZGVCbG9jazo6ZGVzdHJveShKU0NlbGwq
IGNlbGwpCit7CisgICAganNDYXN0PFVubGlua2VkRXZhbENvZGVCbG9jayo+KGNlbGwpLT5+VW5s
aW5rZWRFdmFsQ29kZUJsb2NrKCk7Cit9CisKK3ZvaWQgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9j
azo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCit7CisgICAganNDYXN0PFVubGlua2VkRnVuY3Rpb25D
b2RlQmxvY2sqPihjZWxsKS0+flVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2soKTsKK30KKwordm9p
ZCBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCit7Cisg
ICAganNDYXN0PFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKj4oY2VsbCktPn5VbmxpbmtlZEZ1
bmN0aW9uRXhlY3V0YWJsZSgpOworfQorCit2b2lkIFVubGlua2VkQ29kZUJsb2NrOjpzZXRJbnN0
cnVjdGlvbnMoc3RkOjp1bmlxdWVfcHRyPFVubGlua2VkSW5zdHJ1Y3Rpb25TdHJlYW0+IGluc3Ry
dWN0aW9ucykKK3sKKyAgICBBU1NFUlQoaW5zdHJ1Y3Rpb25zKTsKKyAgICBtX3VubGlua2VkSW5z
dHJ1Y3Rpb25zID0gV1RGTW92ZShpbnN0cnVjdGlvbnMpOworICAgIEhlYXA6OmhlYXAodGhpcykt
PnJlcG9ydEV4dHJhTWVtb3J5QWxsb2NhdGVkKG1fdW5saW5rZWRJbnN0cnVjdGlvbnMtPnNpemVJ
bkJ5dGVzKCkpOworfQorCitjb25zdCBVbmxpbmtlZEluc3RydWN0aW9uU3RyZWFtJiBVbmxpbmtl
ZENvZGVCbG9jazo6aW5zdHJ1Y3Rpb25zKCkgY29uc3QKK3sKKyAgICBBU1NFUlQobV91bmxpbmtl
ZEluc3RydWN0aW9ucy5nZXQoKSk7CisgICAgcmV0dXJuICptX3VubGlua2VkSW5zdHJ1Y3Rpb25z
OworfQorCitVbmxpbmtlZEhhbmRsZXJJbmZvKiBVbmxpbmtlZENvZGVCbG9jazo6aGFuZGxlckZv
ckJ5dGVjb2RlT2Zmc2V0KHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0LCBSZXF1aXJlZEhhbmRsZXIg
cmVxdWlyZWRIYW5kbGVyKQoreworICAgIHJldHVybiBoYW5kbGVyRm9ySW5kZXgoYnl0ZWNvZGVP
ZmZzZXQsIHJlcXVpcmVkSGFuZGxlcik7Cit9CisKK1VubGlua2VkSGFuZGxlckluZm8qIFVubGlu
a2VkQ29kZUJsb2NrOjpoYW5kbGVyRm9ySW5kZXgodW5zaWduZWQgaW5kZXgsIFJlcXVpcmVkSGFu
ZGxlciByZXF1aXJlZEhhbmRsZXIpCit7CisgICAgaWYgKCFtX3JhcmVEYXRhKQorICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gVW5saW5rZWRIYW5kbGVySW5mbzo6aGFuZGxlckZv
ckluZGV4KG1fcmFyZURhdGEtPm1fZXhjZXB0aW9uSGFuZGxlcnMsIGluZGV4LCByZXF1aXJlZEhh
bmRsZXIpOworfQorCit2b2lkIFVubGlua2VkQ29kZUJsb2NrOjphcHBseU1vZGlmaWNhdGlvbihC
eXRlY29kZVJld3JpdGVyJiByZXdyaXRlcikKK3sKKyAgICAvLyBCZWZvcmUgYXBwbHlpbmcgdGhl
IGNoYW5nZXMsIHdlIGFkanVzdCB0aGUganVtcHMgYmFzZWQgb24gdGhlIG9yaWdpbmFsIGJ5dGVj
b2RlIG9mZnNldCwgdGhlIG9mZnNldCB0byB0aGUganVtcCB0YXJnZXQsIGFuZAorICAgIC8vIHRo
ZSBpbnNlcnRpb24gaW5mb3JtYXRpb24uCisKKyAgICBCeXRlY29kZUdyYXBoPFVubGlua2VkQ29k
ZUJsb2NrPiYgZ3JhcGggPSByZXdyaXRlci5ncmFwaCgpOworICAgIFVubGlua2VkSW5zdHJ1Y3Rp
b24qIGluc3RydWN0aW9uc0JlZ2luID0gZ3JhcGguaW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKTsKKwor
ICAgIGZvciAoaW50IGJ5dGVjb2RlT2Zmc2V0ID0gMCwgaW5zdHJ1Y3Rpb25Db3VudCA9IGdyYXBo
Lmluc3RydWN0aW9ucygpLnNpemUoKTsgYnl0ZWNvZGVPZmZzZXQgPCBpbnN0cnVjdGlvbkNvdW50
OykgeworICAgICAgICBVbmxpbmtlZEluc3RydWN0aW9uKiBjdXJyZW50ID0gaW5zdHJ1Y3Rpb25z
QmVnaW4gKyBieXRlY29kZU9mZnNldDsKKyAgICAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBjdXJy
ZW50WzBdLnUub3Bjb2RlOworICAgICAgICBleHRyYWN0U3RvcmVkSnVtcFRhcmdldHNGb3JCeXRl
Y29kZU9mZnNldCh0aGlzLCB2bSgpLT5pbnRlcnByZXRlciwgaW5zdHJ1Y3Rpb25zQmVnaW4sIGJ5
dGVjb2RlT2Zmc2V0LCBbJl0oaW50MzJfdCYgcmVsYXRpdmVPZmZzZXQpIHsKKyAgICAgICAgICAg
IHJlbGF0aXZlT2Zmc2V0ID0gcmV3cml0ZXIuYWRqdXN0SnVtcFRhcmdldChieXRlY29kZU9mZnNl
dCwgYnl0ZWNvZGVPZmZzZXQgKyByZWxhdGl2ZU9mZnNldCk7CisgICAgICAgIH0pOworICAgICAg
ICBieXRlY29kZU9mZnNldCArPSBvcGNvZGVMZW5ndGgob3Bjb2RlSUQpOworICAgIH0KKworICAg
IC8vIFRoZW4sIGV4Y2VwdGlvbiBoYW5kbGVycyBzaG91bGQgYmUgYWRqdXN0ZWQuCisgICAgaWYg
KG1fcmFyZURhdGEpIHsKKyAgICAgICAgZm9yIChVbmxpbmtlZEhhbmRsZXJJbmZvJiBoYW5kbGVy
IDogbV9yYXJlRGF0YS0+bV9leGNlcHRpb25IYW5kbGVycykgeworICAgICAgICAgICAgaGFuZGxl
ci50YXJnZXQgPSByZXdyaXRlci5hZGp1c3RBYnNvbHV0ZU9mZnNldChoYW5kbGVyLnRhcmdldCk7
CisgICAgICAgICAgICBoYW5kbGVyLnN0YXJ0ID0gcmV3cml0ZXIuYWRqdXN0QWJzb2x1dGVPZmZz
ZXQoaGFuZGxlci5zdGFydCk7CisgICAgICAgICAgICBoYW5kbGVyLmVuZCA9IHJld3JpdGVyLmFk
anVzdEFic29sdXRlT2Zmc2V0KGhhbmRsZXIuZW5kKTsKKyAgICAgICAgfQorCisgICAgICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9yYXJlRGF0YS0+bV9vcFByb2ZpbGVDb250cm9sRmxvd0J5
dGVjb2RlT2Zmc2V0cy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIG1fcmFyZURhdGEtPm1fb3BQ
cm9maWxlQ29udHJvbEZsb3dCeXRlY29kZU9mZnNldHNbaV0gPSByZXdyaXRlci5hZGp1c3RBYnNv
bHV0ZU9mZnNldChtX3JhcmVEYXRhLT5tX29wUHJvZmlsZUNvbnRyb2xGbG93Qnl0ZWNvZGVPZmZz
ZXRzW2ldKTsKKworICAgICAgICBpZiAoIW1fcmFyZURhdGEtPm1fdHlwZVByb2ZpbGVySW5mb01h
cC5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIEhhc2hNYXA8dW5zaWduZWQsIFJhcmVEYXRhOjpU
eXBlUHJvZmlsZXJFeHByZXNzaW9uUmFuZ2U+IGFkanVzdGVkVHlwZVByb2ZpbGVySW5mb01hcDsK
KyAgICAgICAgICAgIGZvciAoYXV0byYgZW50cnkgOiBtX3JhcmVEYXRhLT5tX3R5cGVQcm9maWxl
ckluZm9NYXApCisgICAgICAgICAgICAgICAgYWRqdXN0ZWRUeXBlUHJvZmlsZXJJbmZvTWFwLnNl
dChyZXdyaXRlci5hZGp1c3RBYnNvbHV0ZU9mZnNldChlbnRyeS5rZXkpLCBlbnRyeS52YWx1ZSk7
CisgICAgICAgICAgICBtX3JhcmVEYXRhLT5tX3R5cGVQcm9maWxlckluZm9NYXAuc3dhcChhZGp1
c3RlZFR5cGVQcm9maWxlckluZm9NYXApOworICAgICAgICB9CisgICAgfQorCisgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBtX3Byb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25zLnNpemUoKTsgKytp
KQorICAgICAgICBtX3Byb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25zW2ldID0gcmV3cml0ZXIuYWRq
dXN0QWJzb2x1dGVPZmZzZXQobV9wcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uc1tpXSk7CisKKyAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZXhwcmVzc2lvbkluZm8uc2l6ZSgpOyArK2kpCisg
ICAgICAgIG1fZXhwcmVzc2lvbkluZm9baV0uaW5zdHJ1Y3Rpb25PZmZzZXQgPSByZXdyaXRlci5h
ZGp1c3RBYnNvbHV0ZU9mZnNldChtX2V4cHJlc3Npb25JbmZvW2ldLmluc3RydWN0aW9uT2Zmc2V0
KTsKKworICAgIC8vIFRoZW4sIG1vZGlmeSB0aGUgdW5saW5rZWQgaW5zdHJ1Y3Rpb25zLgorICAg
IHJld3JpdGVyLmFwcGx5TW9kaWZpY2F0aW9uKCk7CisKKyAgICAvLyBBbmQgcmVjb21wdXRlIHRo
ZSBqdW1wIHRhcmdldCBiYXNlZCBvbiB0aGUgbW9kaWZpZWQgdW5saW5rZWQgaW5zdHJ1Y3Rpb25z
LgorICAgIG1fanVtcFRhcmdldHMuY2xlYXIoKTsKKyAgICByZWNvbXB1dGVQcmVjaXNlSnVtcFRh
cmdldHModGhpcywgZ3JhcGguaW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKSwgZ3JhcGguaW5zdHJ1Y3Rp
b25zKCkuc2l6ZSgpLCBtX2p1bXBUYXJnZXRzKTsKK30KKworfQorCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRQcm9ncmFtQ29k
ZUJsb2NrLmNwcAkocmV2aXNpb24gMjA4MzA4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1VubGlua2VkUHJvZ3JhbUNvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0
LDI4OSArMjQsMTEgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpbmNsdWRlICJV
bmxpbmtlZENvZGVCbG9jay5oIgotCi0jaW5jbHVkZSAiQnl0ZWNvZGVHZW5lcmF0b3IuaCIKLSNp
bmNsdWRlICJCeXRlY29kZVJld3JpdGVyLmgiCi0jaW5jbHVkZSAiQ2xhc3NJbmZvLmgiCi0jaW5j
bHVkZSAiQ29kZUNhY2hlLmgiCi0jaW5jbHVkZSAiRXhlY3V0YWJsZUluZm8uaCIKLSNpbmNsdWRl
ICJGdW5jdGlvbk92ZXJyaWRlcy5oIgotI2luY2x1ZGUgIkpTU3RyaW5nLmgiCi0jaW5jbHVkZSAi
SlNDSW5saW5lcy5oIgotI2luY2x1ZGUgIlBhcnNlci5oIgotI2luY2x1ZGUgIlByZWNpc2VKdW1w
VGFyZ2V0c0lubGluZXMuaCIKLSNpbmNsdWRlICJTb3VyY2VQcm92aWRlci5oIgotI2luY2x1ZGUg
IlN0cnVjdHVyZS5oIgotI2luY2x1ZGUgIlN5bWJvbFRhYmxlLmgiCi0jaW5jbHVkZSAiVW5saW5r
ZWRJbnN0cnVjdGlvblN0cmVhbS5oIgotI2luY2x1ZGUgPHd0Zi9EYXRhTG9nLmg+CisjaW5jbHVk
ZSAiVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCi1jb25z
dCBDbGFzc0luZm8gVW5saW5rZWRDb2RlQmxvY2s6OnNfaW5mbyA9IHsgIlVubGlua2VkQ29kZUJs
b2NrIiwgMCwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShVbmxpbmtlZENvZGVCbG9jaykgfTsKLWNv
bnN0IENsYXNzSW5mbyBVbmxpbmtlZEdsb2JhbENvZGVCbG9jazo6c19pbmZvID0geyAiVW5saW5r
ZWRHbG9iYWxDb2RlQmxvY2siLCAmQmFzZTo6c19pbmZvLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxF
KFVubGlua2VkR2xvYmFsQ29kZUJsb2NrKSB9OwogY29uc3QgQ2xhc3NJbmZvIFVubGlua2VkUHJv
Z3JhbUNvZGVCbG9jazo6c19pbmZvID0geyAiVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrIiwgJkJh
c2U6OnNfaW5mbywgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShVbmxpbmtlZFByb2dyYW1Db2RlQmxv
Y2spIH07Ci1jb25zdCBDbGFzc0luZm8gVW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrOjpz
X2luZm8gPSB7ICJVbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2siLCAmQmFzZTo6c19pbmZv
LCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKFVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVC
bG9jaykgfTsKLWNvbnN0IENsYXNzSW5mbyBVbmxpbmtlZEV2YWxDb2RlQmxvY2s6OnNfaW5mbyA9
IHsgIlVubGlua2VkRXZhbENvZGVCbG9jayIsICZCYXNlOjpzX2luZm8sIDAsIENSRUFURV9NRVRI
T0RfVEFCTEUoVW5saW5rZWRFdmFsQ29kZUJsb2NrKSB9OwotY29uc3QgQ2xhc3NJbmZvIFVubGlu
a2VkRnVuY3Rpb25Db2RlQmxvY2s6OnNfaW5mbyA9IHsgIlVubGlua2VkRnVuY3Rpb25Db2RlQmxv
Y2siLCAmQmFzZTo6c19pbmZvLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKFVubGlua2VkRnVuY3Rp
b25Db2RlQmxvY2spIH07Ci0KLVVubGlua2VkQ29kZUJsb2NrOjpVbmxpbmtlZENvZGVCbG9jayhW
TSogdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBDb2RlVHlwZSBjb2RlVHlwZSwgY29uc3QgRXhl
Y3V0YWJsZUluZm8mIGluZm8sIERlYnVnZ2VyTW9kZSBkZWJ1Z2dlck1vZGUpCi0gICAgOiBCYXNl
KCp2bSwgc3RydWN0dXJlKQotICAgICwgbV9udW1WYXJzKDApCi0gICAgLCBtX251bUNhbGxlZUxv
Y2FscygwKQotICAgICwgbV9udW1QYXJhbWV0ZXJzKDApCi0gICAgLCBtX2dsb2JhbE9iamVjdFJl
Z2lzdGVyKFZpcnR1YWxSZWdpc3RlcigpKQotICAgICwgbV91c2VzRXZhbChpbmZvLnVzZXNFdmFs
KCkpCi0gICAgLCBtX2lzU3RyaWN0TW9kZShpbmZvLmlzU3RyaWN0TW9kZSgpKQotICAgICwgbV9p
c0NvbnN0cnVjdG9yKGluZm8uaXNDb25zdHJ1Y3RvcigpKQotICAgICwgbV9oYXNDYXB0dXJlZFZh
cmlhYmxlcyhmYWxzZSkKLSAgICAsIG1faXNCdWlsdGluRnVuY3Rpb24oaW5mby5pc0J1aWx0aW5G
dW5jdGlvbigpKQotICAgICwgbV9zdXBlckJpbmRpbmcoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGlu
Zm8uc3VwZXJCaW5kaW5nKCkpKQotICAgICwgbV9zY3JpcHRNb2RlKHN0YXRpY19jYXN0PHVuc2ln
bmVkPihpbmZvLnNjcmlwdE1vZGUoKSkpCi0gICAgLCBtX2lzQXJyb3dGdW5jdGlvbkNvbnRleHQo
aW5mby5pc0Fycm93RnVuY3Rpb25Db250ZXh0KCkpCi0gICAgLCBtX2lzQ2xhc3NDb250ZXh0KGlu
Zm8uaXNDbGFzc0NvbnRleHQoKSkKLSAgICAsIG1fd2FzQ29tcGlsZWRXaXRoRGVidWdnaW5nT3Bj
b2RlcyhkZWJ1Z2dlck1vZGUgPT0gRGVidWdnZXJNb2RlOjpEZWJ1Z2dlck9uIHx8IE9wdGlvbnM6
OmZvcmNlRGVidWdnZXJCeXRlY29kZUdlbmVyYXRpb24oKSkKLSAgICAsIG1fY29uc3RydWN0b3JL
aW5kKHN0YXRpY19jYXN0PHVuc2lnbmVkPihpbmZvLmNvbnN0cnVjdG9yS2luZCgpKSkKLSAgICAs
IG1fZGVyaXZlZENvbnRleHRUeXBlKHN0YXRpY19jYXN0PHVuc2lnbmVkPihpbmZvLmRlcml2ZWRD
b250ZXh0VHlwZSgpKSkKLSAgICAsIG1fZXZhbENvbnRleHRUeXBlKHN0YXRpY19jYXN0PHVuc2ln
bmVkPihpbmZvLmV2YWxDb250ZXh0VHlwZSgpKSkKLSAgICAsIG1fZmlyc3RMaW5lKDApCi0gICAg
LCBtX2xpbmVDb3VudCgwKQotICAgICwgbV9lbmRDb2x1bW4oVUlOVF9NQVgpCi0gICAgLCBtX2Rp
ZE9wdGltaXplKE1peGVkVHJpU3RhdGUpCi0gICAgLCBtX3BhcnNlTW9kZShpbmZvLnBhcnNlTW9k
ZSgpKQotICAgICwgbV9mZWF0dXJlcygwKQotICAgICwgbV9jb2RlVHlwZShjb2RlVHlwZSkKLSAg
ICAsIG1fYXJyYXlQcm9maWxlQ291bnQoMCkKLSAgICAsIG1fYXJyYXlBbGxvY2F0aW9uUHJvZmls
ZUNvdW50KDApCi0gICAgLCBtX29iamVjdEFsbG9jYXRpb25Qcm9maWxlQ291bnQoMCkKLSAgICAs
IG1fdmFsdWVQcm9maWxlQ291bnQoMCkKLSAgICAsIG1fbGxpbnRDYWxsTGlua0luZm9Db3VudCgw
KQotewotICAgIGZvciAoYXV0byYgY29uc3RhbnRSZWdpc3RlckluZGV4IDogbV9saW5rVGltZUNv
bnN0YW50cykKLSAgICAgICAgY29uc3RhbnRSZWdpc3RlckluZGV4ID0gMDsKLSAgICBBU1NFUlQo
bV9jb25zdHJ1Y3RvcktpbmQgPT0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGluZm8uY29uc3RydWN0
b3JLaW5kKCkpKTsKLX0KLQotdm9pZCBVbmxpbmtlZENvZGVCbG9jazo6dmlzaXRDaGlsZHJlbihK
U0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQotewotICAgIFVubGlua2VkQ29kZUJs
b2NrKiB0aGlzT2JqZWN0ID0ganNDYXN0PFVubGlua2VkQ29kZUJsb2NrKj4oY2VsbCk7Ci0gICAg
QVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwotICAgIEJhc2U6
OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7Ci0gICAgZm9yIChGdW5jdGlvbkV4
cHJlc3Npb25WZWN0b3I6Oml0ZXJhdG9yIHB0ciA9IHRoaXNPYmplY3QtPm1fZnVuY3Rpb25EZWNs
cy5iZWdpbigpLCBlbmQgPSB0aGlzT2JqZWN0LT5tX2Z1bmN0aW9uRGVjbHMuZW5kKCk7IHB0ciAh
PSBlbmQ7ICsrcHRyKQotICAgICAgICB2aXNpdG9yLmFwcGVuZChwdHIpOwotICAgIGZvciAoRnVu
Y3Rpb25FeHByZXNzaW9uVmVjdG9yOjppdGVyYXRvciBwdHIgPSB0aGlzT2JqZWN0LT5tX2Z1bmN0
aW9uRXhwcnMuYmVnaW4oKSwgZW5kID0gdGhpc09iamVjdC0+bV9mdW5jdGlvbkV4cHJzLmVuZCgp
OyBwdHIgIT0gZW5kOyArK3B0cikKLSAgICAgICAgdmlzaXRvci5hcHBlbmQocHRyKTsKLSAgICB2
aXNpdG9yLmFwcGVuZFZhbHVlcyh0aGlzT2JqZWN0LT5tX2NvbnN0YW50UmVnaXN0ZXJzLmRhdGEo
KSwgdGhpc09iamVjdC0+bV9jb25zdGFudFJlZ2lzdGVycy5zaXplKCkpOwotICAgIGlmICh0aGlz
T2JqZWN0LT5tX3VubGlua2VkSW5zdHJ1Y3Rpb25zKQotICAgICAgICB2aXNpdG9yLnJlcG9ydEV4
dHJhTWVtb3J5VmlzaXRlZCh0aGlzT2JqZWN0LT5tX3VubGlua2VkSW5zdHJ1Y3Rpb25zLT5zaXpl
SW5CeXRlcygpKTsKLSAgICBpZiAodGhpc09iamVjdC0+bV9yYXJlRGF0YSkgewotICAgICAgICBm
b3IgKHNpemVfdCBpID0gMCwgZW5kID0gdGhpc09iamVjdC0+bV9yYXJlRGF0YS0+bV9yZWdleHBz
LnNpemUoKTsgaSAhPSBlbmQ7IGkrKykKLSAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlz
T2JqZWN0LT5tX3JhcmVEYXRhLT5tX3JlZ2V4cHNbaV0pOwotICAgIH0KLX0KLQotc2l6ZV90IFVu
bGlua2VkQ29kZUJsb2NrOjplc3RpbWF0ZWRTaXplKEpTQ2VsbCogY2VsbCkKLXsKLSAgICBVbmxp
bmtlZENvZGVCbG9jayogdGhpc09iamVjdCA9IGpzQ2FzdDxVbmxpbmtlZENvZGVCbG9jayo+KGNl
bGwpOwotICAgIHNpemVfdCBleHRyYVNpemUgPSB0aGlzT2JqZWN0LT5tX3VubGlua2VkSW5zdHJ1
Y3Rpb25zID8gdGhpc09iamVjdC0+bV91bmxpbmtlZEluc3RydWN0aW9ucy0+c2l6ZUluQnl0ZXMo
KSA6IDA7Ci0gICAgcmV0dXJuIEJhc2U6OmVzdGltYXRlZFNpemUoY2VsbCkgKyBleHRyYVNpemU7
Ci19Ci0KLWludCBVbmxpbmtlZENvZGVCbG9jazo6bGluZU51bWJlckZvckJ5dGVjb2RlT2Zmc2V0
KHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KQotewotICAgIEFTU0VSVChieXRlY29kZU9mZnNldCA8
IGluc3RydWN0aW9ucygpLmNvdW50KCkpOwotICAgIGludCBkaXZvdDsKLSAgICBpbnQgc3RhcnRP
ZmZzZXQ7Ci0gICAgaW50IGVuZE9mZnNldDsKLSAgICB1bnNpZ25lZCBsaW5lOwotICAgIHVuc2ln
bmVkIGNvbHVtbjsKLSAgICBleHByZXNzaW9uUmFuZ2VGb3JCeXRlY29kZU9mZnNldChieXRlY29k
ZU9mZnNldCwgZGl2b3QsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQsIGxpbmUsIGNvbHVtbik7Ci0g
ICAgcmV0dXJuIGxpbmU7Ci19Ci0KLWlubGluZSB2b2lkIFVubGlua2VkQ29kZUJsb2NrOjpnZXRM
aW5lQW5kQ29sdW1uKGNvbnN0IEV4cHJlc3Npb25SYW5nZUluZm8mIGluZm8sCi0gICAgdW5zaWdu
ZWQmIGxpbmUsIHVuc2lnbmVkJiBjb2x1bW4pIGNvbnN0Ci17Ci0gICAgc3dpdGNoIChpbmZvLm1v
ZGUpIHsKLSAgICBjYXNlIEV4cHJlc3Npb25SYW5nZUluZm86OkZhdExpbmVNb2RlOgotICAgICAg
ICBpbmZvLmRlY29kZUZhdExpbmVNb2RlKGxpbmUsIGNvbHVtbik7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgRXhwcmVzc2lvblJhbmdlSW5mbzo6RmF0Q29sdW1uTW9kZToKLSAgICAgICAgaW5m
by5kZWNvZGVGYXRDb2x1bW5Nb2RlKGxpbmUsIGNvbHVtbik7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgRXhwcmVzc2lvblJhbmdlSW5mbzo6RmF0TGluZUFuZENvbHVtbk1vZGU6IHsKLSAgICAg
ICAgdW5zaWduZWQgZmF0SW5kZXggPSBpbmZvLnBvc2l0aW9uOwotICAgICAgICBFeHByZXNzaW9u
UmFuZ2VJbmZvOjpGYXRQb3NpdGlvbiYgZmF0UG9zID0gbV9yYXJlRGF0YS0+bV9leHByZXNzaW9u
SW5mb0ZhdFBvc2l0aW9uc1tmYXRJbmRleF07Ci0gICAgICAgIGxpbmUgPSBmYXRQb3MubGluZTsK
LSAgICAgICAgY29sdW1uID0gZmF0UG9zLmNvbHVtbjsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQot
ICAgIH0gLy8gc3dpdGNoCi19Ci0KLSNpZm5kZWYgTkRFQlVHCi1zdGF0aWMgdm9pZCBkdW1wTGlu
ZUNvbHVtbkVudHJ5KHNpemVfdCBpbmRleCwgY29uc3QgVW5saW5rZWRJbnN0cnVjdGlvblN0cmVh
bSYgaW5zdHJ1Y3Rpb25TdHJlYW0sIHVuc2lnbmVkIGluc3RydWN0aW9uT2Zmc2V0LCB1bnNpZ25l
ZCBsaW5lLCB1bnNpZ25lZCBjb2x1bW4pCi17Ci0gICAgY29uc3QgYXV0byYgaW5zdHJ1Y3Rpb25z
ID0gaW5zdHJ1Y3Rpb25TdHJlYW0udW5wYWNrRm9yRGVidWdnaW5nKCk7Ci0gICAgT3Bjb2RlSUQg
b3Bjb2RlID0gaW5zdHJ1Y3Rpb25zW2luc3RydWN0aW9uT2Zmc2V0XS51Lm9wY29kZTsKLSAgICBj
b25zdCBjaGFyKiBldmVudCA9ICIiOwotICAgIGlmIChvcGNvZGUgPT0gb3BfZGVidWcpIHsKLSAg
ICAgICAgc3dpdGNoIChpbnN0cnVjdGlvbnNbaW5zdHJ1Y3Rpb25PZmZzZXQgKyAxXS51Lm9wZXJh
bmQpIHsKLSAgICAgICAgY2FzZSBXaWxsRXhlY3V0ZVByb2dyYW06IGV2ZW50ID0gIiBXaWxsRXhl
Y3V0ZVByb2dyYW0iOyBicmVhazsKLSAgICAgICAgY2FzZSBEaWRFeGVjdXRlUHJvZ3JhbTogZXZl
bnQgPSAiIERpZEV4ZWN1dGVQcm9ncmFtIjsgYnJlYWs7Ci0gICAgICAgIGNhc2UgRGlkRW50ZXJD
YWxsRnJhbWU6IGV2ZW50ID0gIiBEaWRFbnRlckNhbGxGcmFtZSI7IGJyZWFrOwotICAgICAgICBj
YXNlIERpZFJlYWNoQnJlYWtwb2ludDogZXZlbnQgPSAiIERpZFJlYWNoQnJlYWtwb2ludCI7IGJy
ZWFrOwotICAgICAgICBjYXNlIFdpbGxMZWF2ZUNhbGxGcmFtZTogZXZlbnQgPSAiIFdpbGxMZWF2
ZUNhbGxGcmFtZSI7IGJyZWFrOwotICAgICAgICBjYXNlIFdpbGxFeGVjdXRlU3RhdGVtZW50OiBl
dmVudCA9ICIgV2lsbEV4ZWN1dGVTdGF0ZW1lbnQiOyBicmVhazsKLSAgICAgICAgY2FzZSBXaWxs
RXhlY3V0ZUV4cHJlc3Npb246IGV2ZW50ID0gIiBXaWxsRXhlY3V0ZUV4cHJlc3Npb24iOyBicmVh
azsKLSAgICAgICAgfQotICAgIH0KLSAgICBkYXRhTG9nRigiICBbJXp1XSBwYyAldSBAIGxpbmUg
JXUgY29sICV1IDogJXMlc1xuIiwgaW5kZXgsIGluc3RydWN0aW9uT2Zmc2V0LCBsaW5lLCBjb2x1
bW4sIG9wY29kZU5hbWVzW29wY29kZV0sIGV2ZW50KTsKLX0KLQotdm9pZCBVbmxpbmtlZENvZGVC
bG9jazo6ZHVtcEV4cHJlc3Npb25SYW5nZUluZm8oKQotewotICAgIFZlY3RvcjxFeHByZXNzaW9u
UmFuZ2VJbmZvPiYgZXhwcmVzc2lvbkluZm8gPSBtX2V4cHJlc3Npb25JbmZvOwotCi0gICAgc2l6
ZV90IHNpemUgPSBtX2V4cHJlc3Npb25JbmZvLnNpemUoKTsKLSAgICBkYXRhTG9nRigiVW5saW5r
ZWRDb2RlQmxvY2sgJXAgZXhwcmVzc2lvblJhbmdlSW5mb1slenVdIHtcbiIsIHRoaXMsIHNpemUp
OwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7Ci0gICAgICAgIEV4cHJl
c3Npb25SYW5nZUluZm8mIGluZm8gPSBleHByZXNzaW9uSW5mb1tpXTsKLSAgICAgICAgdW5zaWdu
ZWQgbGluZTsKLSAgICAgICAgdW5zaWduZWQgY29sdW1uOwotICAgICAgICBnZXRMaW5lQW5kQ29s
dW1uKGluZm8sIGxpbmUsIGNvbHVtbik7Ci0gICAgICAgIGR1bXBMaW5lQ29sdW1uRW50cnkoaSwg
aW5zdHJ1Y3Rpb25zKCksIGluZm8uaW5zdHJ1Y3Rpb25PZmZzZXQsIGxpbmUsIGNvbHVtbik7Ci0g
ICAgfQotICAgIGRhdGFMb2coIn1cbiIpOwotfQotI2VuZGlmCi0KLXZvaWQgVW5saW5rZWRDb2Rl
QmxvY2s6OmV4cHJlc3Npb25SYW5nZUZvckJ5dGVjb2RlT2Zmc2V0KHVuc2lnbmVkIGJ5dGVjb2Rl
T2Zmc2V0LAotICAgIGludCYgZGl2b3QsIGludCYgc3RhcnRPZmZzZXQsIGludCYgZW5kT2Zmc2V0
LCB1bnNpZ25lZCYgbGluZSwgdW5zaWduZWQmIGNvbHVtbikgY29uc3QKLXsKLSAgICBBU1NFUlQo
Ynl0ZWNvZGVPZmZzZXQgPCBpbnN0cnVjdGlvbnMoKS5jb3VudCgpKTsKLQotICAgIGlmICghbV9l
eHByZXNzaW9uSW5mby5zaXplKCkpIHsKLSAgICAgICAgc3RhcnRPZmZzZXQgPSAwOwotICAgICAg
ICBlbmRPZmZzZXQgPSAwOwotICAgICAgICBkaXZvdCA9IDA7Ci0gICAgICAgIGxpbmUgPSAwOwot
ICAgICAgICBjb2x1bW4gPSAwOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgY29uc3Qg
VmVjdG9yPEV4cHJlc3Npb25SYW5nZUluZm8+JiBleHByZXNzaW9uSW5mbyA9IG1fZXhwcmVzc2lv
bkluZm87Ci0KLSAgICBpbnQgbG93ID0gMDsKLSAgICBpbnQgaGlnaCA9IGV4cHJlc3Npb25JbmZv
LnNpemUoKTsKLSAgICB3aGlsZSAobG93IDwgaGlnaCkgewotICAgICAgICBpbnQgbWlkID0gbG93
ICsgKGhpZ2ggLSBsb3cpIC8gMjsKLSAgICAgICAgaWYgKGV4cHJlc3Npb25JbmZvW21pZF0uaW5z
dHJ1Y3Rpb25PZmZzZXQgPD0gYnl0ZWNvZGVPZmZzZXQpCi0gICAgICAgICAgICBsb3cgPSBtaWQg
KyAxOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBoaWdoID0gbWlkOwotICAgIH0KLQotICAg
IGlmICghbG93KQotICAgICAgICBsb3cgPSAxOwotCi0gICAgY29uc3QgRXhwcmVzc2lvblJhbmdl
SW5mbyYgaW5mbyA9IGV4cHJlc3Npb25JbmZvW2xvdyAtIDFdOwotICAgIHN0YXJ0T2Zmc2V0ID0g
aW5mby5zdGFydE9mZnNldDsKLSAgICBlbmRPZmZzZXQgPSBpbmZvLmVuZE9mZnNldDsKLSAgICBk
aXZvdCA9IGluZm8uZGl2b3RQb2ludDsKLSAgICBnZXRMaW5lQW5kQ29sdW1uKGluZm8sIGxpbmUs
IGNvbHVtbik7Ci19Ci0KLXZvaWQgVW5saW5rZWRDb2RlQmxvY2s6OmFkZEV4cHJlc3Npb25JbmZv
KHVuc2lnbmVkIGluc3RydWN0aW9uT2Zmc2V0LAotICAgIGludCBkaXZvdCwgaW50IHN0YXJ0T2Zm
c2V0LCBpbnQgZW5kT2Zmc2V0LCB1bnNpZ25lZCBsaW5lLCB1bnNpZ25lZCBjb2x1bW4pCi17Ci0g
ICAgaWYgKGRpdm90ID4gRXhwcmVzc2lvblJhbmdlSW5mbzo6TWF4RGl2b3QpIHsKLSAgICAgICAg
Ly8gT3ZlcmZsb3cgaGFzIG9jY3VycmVkLCB3ZSBjYW4gb25seSBnaXZlIGxpbmUgbnVtYmVyIGlu
Zm8gZm9yIGVycm9ycyBmb3IgdGhpcyByZWdpb24KLSAgICAgICAgZGl2b3QgPSAwOwotICAgICAg
ICBzdGFydE9mZnNldCA9IDA7Ci0gICAgICAgIGVuZE9mZnNldCA9IDA7Ci0gICAgfSBlbHNlIGlm
IChzdGFydE9mZnNldCA+IEV4cHJlc3Npb25SYW5nZUluZm86Ok1heE9mZnNldCkgewotICAgICAg
ICAvLyBJZiB0aGUgc3RhcnQgb2Zmc2V0IGlzIG91dCBvZiBib3VuZHMgd2UgY2xlYXIgYm90aCBv
ZmZzZXRzCi0gICAgICAgIC8vIHNvIHdlIG9ubHkgZ2V0IHRoZSBkaXZvdCBtYXJrZXIuIEVycm9y
IG1lc3NhZ2Ugd2lsbCBoYXZlIHRvIGJlIHJlZHVjZWQKLSAgICAgICAgLy8gdG8gbGluZSBhbmQg
Y2hhclBvc2l0aW9uIG51bWJlci4KLSAgICAgICAgc3RhcnRPZmZzZXQgPSAwOwotICAgICAgICBl
bmRPZmZzZXQgPSAwOwotICAgIH0gZWxzZSBpZiAoZW5kT2Zmc2V0ID4gRXhwcmVzc2lvblJhbmdl
SW5mbzo6TWF4T2Zmc2V0KSB7Ci0gICAgICAgIC8vIFRoZSBlbmQgb2Zmc2V0IGlzIG9ubHkgdXNl
ZCBmb3IgYWRkaXRpb25hbCBjb250ZXh0LCBhbmQgaXMgbXVjaCBtb3JlIGxpa2VseQotICAgICAg
ICAvLyB0byBvdmVyZmxvdyAoZWcuIGZ1bmN0aW9uIGNhbGwgYXJndW1lbnRzKSBzbyB3ZSBhcmUg
d2lsbGluZyB0byBkcm9wIGl0IHdpdGhvdXQKLSAgICAgICAgLy8gZHJvcHBpbmcgdGhlIHJlc3Qg
b2YgdGhlIHJhbmdlLgotICAgICAgICBlbmRPZmZzZXQgPSAwOwotICAgIH0KLQotICAgIHVuc2ln
bmVkIHBvc2l0aW9uTW9kZSA9Ci0gICAgICAgIChsaW5lIDw9IEV4cHJlc3Npb25SYW5nZUluZm86
Ok1heEZhdExpbmVNb2RlTGluZSAmJiBjb2x1bW4gPD0gRXhwcmVzc2lvblJhbmdlSW5mbzo6TWF4
RmF0TGluZU1vZGVDb2x1bW4pIAotICAgICAgICA/IEV4cHJlc3Npb25SYW5nZUluZm86OkZhdExp
bmVNb2RlCi0gICAgICAgIDogKGxpbmUgPD0gRXhwcmVzc2lvblJhbmdlSW5mbzo6TWF4RmF0Q29s
dW1uTW9kZUxpbmUgJiYgY29sdW1uIDw9IEV4cHJlc3Npb25SYW5nZUluZm86Ok1heEZhdENvbHVt
bk1vZGVDb2x1bW4pCi0gICAgICAgID8gRXhwcmVzc2lvblJhbmdlSW5mbzo6RmF0Q29sdW1uTW9k
ZQotICAgICAgICA6IEV4cHJlc3Npb25SYW5nZUluZm86OkZhdExpbmVBbmRDb2x1bW5Nb2RlOwot
Ci0gICAgRXhwcmVzc2lvblJhbmdlSW5mbyBpbmZvOwotICAgIGluZm8uaW5zdHJ1Y3Rpb25PZmZz
ZXQgPSBpbnN0cnVjdGlvbk9mZnNldDsKLSAgICBpbmZvLmRpdm90UG9pbnQgPSBkaXZvdDsKLSAg
ICBpbmZvLnN0YXJ0T2Zmc2V0ID0gc3RhcnRPZmZzZXQ7Ci0gICAgaW5mby5lbmRPZmZzZXQgPSBl
bmRPZmZzZXQ7Ci0KLSAgICBpbmZvLm1vZGUgPSBwb3NpdGlvbk1vZGU7Ci0gICAgc3dpdGNoIChw
b3NpdGlvbk1vZGUpIHsKLSAgICBjYXNlIEV4cHJlc3Npb25SYW5nZUluZm86OkZhdExpbmVNb2Rl
OgotICAgICAgICBpbmZvLmVuY29kZUZhdExpbmVNb2RlKGxpbmUsIGNvbHVtbik7Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgRXhwcmVzc2lvblJhbmdlSW5mbzo6RmF0Q29sdW1uTW9kZToKLSAg
ICAgICAgaW5mby5lbmNvZGVGYXRDb2x1bW5Nb2RlKGxpbmUsIGNvbHVtbik7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgRXhwcmVzc2lvblJhbmdlSW5mbzo6RmF0TGluZUFuZENvbHVtbk1vZGU6
IHsKLSAgICAgICAgY3JlYXRlUmFyZURhdGFJZk5lY2Vzc2FyeSgpOwotICAgICAgICB1bnNpZ25l
ZCBmYXRJbmRleCA9IG1fcmFyZURhdGEtPm1fZXhwcmVzc2lvbkluZm9GYXRQb3NpdGlvbnMuc2l6
ZSgpOwotICAgICAgICBFeHByZXNzaW9uUmFuZ2VJbmZvOjpGYXRQb3NpdGlvbiBmYXRQb3MgPSB7
IGxpbmUsIGNvbHVtbiB9OwotICAgICAgICBtX3JhcmVEYXRhLT5tX2V4cHJlc3Npb25JbmZvRmF0
UG9zaXRpb25zLmFwcGVuZChmYXRQb3MpOwotICAgICAgICBpbmZvLnBvc2l0aW9uID0gZmF0SW5k
ZXg7Ci0gICAgfQotICAgIH0gLy8gc3dpdGNoCi0KLSAgICBtX2V4cHJlc3Npb25JbmZvLmFwcGVu
ZChpbmZvKTsKLX0KLQotYm9vbCBVbmxpbmtlZENvZGVCbG9jazo6dHlwZVByb2ZpbGVyRXhwcmVz
c2lvbkluZm9Gb3JCeXRlY29kZU9mZnNldCh1bnNpZ25lZCBieXRlY29kZU9mZnNldCwgdW5zaWdu
ZWQmIHN0YXJ0RGl2b3QsIHVuc2lnbmVkJiBlbmREaXZvdCkKLXsKLSAgICBzdGF0aWMgY29uc3Qg
Ym9vbCB2ZXJib3NlID0gZmFsc2U7Ci0gICAgaWYgKCFtX3JhcmVEYXRhKSB7Ci0gICAgICAgIGlm
ICh2ZXJib3NlKQotICAgICAgICAgICAgZGF0YUxvZ0YoIkRvbid0IGhhdmUgYXNzaWdubWVudCBp
bmZvIGZvciBvZmZzZXQ6JXVcbiIsIGJ5dGVjb2RlT2Zmc2V0KTsKLSAgICAgICAgc3RhcnREaXZv
dCA9IFVJTlRfTUFYOwotICAgICAgICBlbmREaXZvdCA9IFVJTlRfTUFYOwotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgYXV0byBpdGVyID0gbV9yYXJlRGF0YS0+bV90eXBlUHJv
ZmlsZXJJbmZvTWFwLmZpbmQoYnl0ZWNvZGVPZmZzZXQpOwotICAgIGlmIChpdGVyID09IG1fcmFy
ZURhdGEtPm1fdHlwZVByb2ZpbGVySW5mb01hcC5lbmQoKSkgewotICAgICAgICBpZiAodmVyYm9z
ZSkKLSAgICAgICAgICAgIGRhdGFMb2dGKCJEb24ndCBoYXZlIGFzc2lnbm1lbnQgaW5mbyBmb3Ig
b2Zmc2V0OiV1XG4iLCBieXRlY29kZU9mZnNldCk7Ci0gICAgICAgIHN0YXJ0RGl2b3QgPSBVSU5U
X01BWDsKLSAgICAgICAgZW5kRGl2b3QgPSBVSU5UX01BWDsKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLSAgICAKLSAgICBSYXJlRGF0YTo6VHlwZVByb2ZpbGVyRXhwcmVzc2lvblJhbmdl
JiByYW5nZSA9IGl0ZXItPnZhbHVlOwotICAgIHN0YXJ0RGl2b3QgPSByYW5nZS5tX3N0YXJ0RGl2
b3Q7Ci0gICAgZW5kRGl2b3QgPSByYW5nZS5tX2VuZERpdm90OwotICAgIHJldHVybiB0cnVlOwot
fQotCi12b2lkIFVubGlua2VkQ29kZUJsb2NrOjphZGRUeXBlUHJvZmlsZXJFeHByZXNzaW9uSW5m
byh1bnNpZ25lZCBpbnN0cnVjdGlvbk9mZnNldCwgdW5zaWduZWQgc3RhcnREaXZvdCwgdW5zaWdu
ZWQgZW5kRGl2b3QpCi17Ci0gICAgY3JlYXRlUmFyZURhdGFJZk5lY2Vzc2FyeSgpOwotICAgIFJh
cmVEYXRhOjpUeXBlUHJvZmlsZXJFeHByZXNzaW9uUmFuZ2UgcmFuZ2U7Ci0gICAgcmFuZ2UubV9z
dGFydERpdm90ID0gc3RhcnREaXZvdDsKLSAgICByYW5nZS5tX2VuZERpdm90ID0gZW5kRGl2b3Q7
Ci0gICAgbV9yYXJlRGF0YS0+bV90eXBlUHJvZmlsZXJJbmZvTWFwLnNldChpbnN0cnVjdGlvbk9m
ZnNldCwgcmFuZ2UpOwotfQogCiB2b2lkIFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jazo6dmlzaXRD
aGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewpAQCAtMzE1LDEx
NiArMzcsOSBAQCB2b2lkIFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jazo6dmlzaXRDaGlsCiAgICAg
QmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKIH0KIAotdm9pZCBVbmxp
bmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2s6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBT
bG90VmlzaXRvciYgdmlzaXRvcikKLXsKLSAgICBVbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxv
Y2sqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8VW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrKj4o
Y2VsbCk7Ci0gICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkp
OwotICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7Ci19Ci0KLVVu
bGlua2VkQ29kZUJsb2NrOjp+VW5saW5rZWRDb2RlQmxvY2soKQotewotfQotCiB2b2lkIFVubGlu
a2VkUHJvZ3JhbUNvZGVCbG9jazo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCiB7CiAgICAganNDYXN0
PFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jayo+KGNlbGwpLT5+VW5saW5rZWRQcm9ncmFtQ29kZUJs
b2NrKCk7CiB9CiAKLXZvaWQgVW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrOjpkZXN0cm95
KEpTQ2VsbCogY2VsbCkKLXsKLSAgICBqc0Nhc3Q8VW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJs
b2NrKj4oY2VsbCktPn5VbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2soKTsKLX0KLQotdm9p
ZCBVbmxpbmtlZEV2YWxDb2RlQmxvY2s6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQotewotICAgIGpz
Q2FzdDxVbmxpbmtlZEV2YWxDb2RlQmxvY2sqPihjZWxsKS0+flVubGlua2VkRXZhbENvZGVCbG9j
aygpOwotfQotCi12b2lkIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2s6OmRlc3Ryb3koSlNDZWxs
KiBjZWxsKQotewotICAgIGpzQ2FzdDxVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKj4oY2VsbCkt
Pn5VbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKCk7Ci19Ci0KLXZvaWQgVW5saW5rZWRGdW5jdGlv
bkV4ZWN1dGFibGU6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQotewotICAgIGpzQ2FzdDxVbmxpbmtl
ZEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGNlbGwpLT5+VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUo
KTsKLX0KLQotdm9pZCBVbmxpbmtlZENvZGVCbG9jazo6c2V0SW5zdHJ1Y3Rpb25zKHN0ZDo6dW5p
cXVlX3B0cjxVbmxpbmtlZEluc3RydWN0aW9uU3RyZWFtPiBpbnN0cnVjdGlvbnMpCi17Ci0gICAg
QVNTRVJUKGluc3RydWN0aW9ucyk7Ci0gICAgbV91bmxpbmtlZEluc3RydWN0aW9ucyA9IFdURk1v
dmUoaW5zdHJ1Y3Rpb25zKTsKLSAgICBIZWFwOjpoZWFwKHRoaXMpLT5yZXBvcnRFeHRyYU1lbW9y
eUFsbG9jYXRlZChtX3VubGlua2VkSW5zdHJ1Y3Rpb25zLT5zaXplSW5CeXRlcygpKTsKLX0KLQot
Y29uc3QgVW5saW5rZWRJbnN0cnVjdGlvblN0cmVhbSYgVW5saW5rZWRDb2RlQmxvY2s6Omluc3Ry
dWN0aW9ucygpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKG1fdW5saW5rZWRJbnN0cnVjdGlvbnMuZ2V0
KCkpOwotICAgIHJldHVybiAqbV91bmxpbmtlZEluc3RydWN0aW9uczsKLX0KLQotVW5saW5rZWRI
YW5kbGVySW5mbyogVW5saW5rZWRDb2RlQmxvY2s6OmhhbmRsZXJGb3JCeXRlY29kZU9mZnNldCh1
bnNpZ25lZCBieXRlY29kZU9mZnNldCwgUmVxdWlyZWRIYW5kbGVyIHJlcXVpcmVkSGFuZGxlcikK
LXsKLSAgICByZXR1cm4gaGFuZGxlckZvckluZGV4KGJ5dGVjb2RlT2Zmc2V0LCByZXF1aXJlZEhh
bmRsZXIpOwotfQotCi1VbmxpbmtlZEhhbmRsZXJJbmZvKiBVbmxpbmtlZENvZGVCbG9jazo6aGFu
ZGxlckZvckluZGV4KHVuc2lnbmVkIGluZGV4LCBSZXF1aXJlZEhhbmRsZXIgcmVxdWlyZWRIYW5k
bGVyKQotewotICAgIGlmICghbV9yYXJlRGF0YSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0g
ICAgcmV0dXJuIFVubGlua2VkSGFuZGxlckluZm86OmhhbmRsZXJGb3JJbmRleChtX3JhcmVEYXRh
LT5tX2V4Y2VwdGlvbkhhbmRsZXJzLCBpbmRleCwgcmVxdWlyZWRIYW5kbGVyKTsKIH0KLQotdm9p
ZCBVbmxpbmtlZENvZGVCbG9jazo6YXBwbHlNb2RpZmljYXRpb24oQnl0ZWNvZGVSZXdyaXRlciYg
cmV3cml0ZXIpCi17Ci0gICAgLy8gQmVmb3JlIGFwcGx5aW5nIHRoZSBjaGFuZ2VzLCB3ZSBhZGp1
c3QgdGhlIGp1bXBzIGJhc2VkIG9uIHRoZSBvcmlnaW5hbCBieXRlY29kZSBvZmZzZXQsIHRoZSBv
ZmZzZXQgdG8gdGhlIGp1bXAgdGFyZ2V0LCBhbmQKLSAgICAvLyB0aGUgaW5zZXJ0aW9uIGluZm9y
bWF0aW9uLgotCi0gICAgQnl0ZWNvZGVHcmFwaDxVbmxpbmtlZENvZGVCbG9jaz4mIGdyYXBoID0g
cmV3cml0ZXIuZ3JhcGgoKTsKLSAgICBVbmxpbmtlZEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbnNC
ZWdpbiA9IGdyYXBoLmluc3RydWN0aW9ucygpLmJlZ2luKCk7Ci0KLSAgICBmb3IgKGludCBieXRl
Y29kZU9mZnNldCA9IDAsIGluc3RydWN0aW9uQ291bnQgPSBncmFwaC5pbnN0cnVjdGlvbnMoKS5z
aXplKCk7IGJ5dGVjb2RlT2Zmc2V0IDwgaW5zdHJ1Y3Rpb25Db3VudDspIHsKLSAgICAgICAgVW5s
aW5rZWRJbnN0cnVjdGlvbiogY3VycmVudCA9IGluc3RydWN0aW9uc0JlZ2luICsgYnl0ZWNvZGVP
ZmZzZXQ7Ci0gICAgICAgIE9wY29kZUlEIG9wY29kZUlEID0gY3VycmVudFswXS51Lm9wY29kZTsK
LSAgICAgICAgZXh0cmFjdFN0b3JlZEp1bXBUYXJnZXRzRm9yQnl0ZWNvZGVPZmZzZXQodGhpcywg
dm0oKS0+aW50ZXJwcmV0ZXIsIGluc3RydWN0aW9uc0JlZ2luLCBieXRlY29kZU9mZnNldCwgWyZd
KGludDMyX3QmIHJlbGF0aXZlT2Zmc2V0KSB7Ci0gICAgICAgICAgICByZWxhdGl2ZU9mZnNldCA9
IHJld3JpdGVyLmFkanVzdEp1bXBUYXJnZXQoYnl0ZWNvZGVPZmZzZXQsIGJ5dGVjb2RlT2Zmc2V0
ICsgcmVsYXRpdmVPZmZzZXQpOwotICAgICAgICB9KTsKLSAgICAgICAgYnl0ZWNvZGVPZmZzZXQg
Kz0gb3Bjb2RlTGVuZ3RoKG9wY29kZUlEKTsKLSAgICB9Ci0KLSAgICAvLyBUaGVuLCBleGNlcHRp
b24gaGFuZGxlcnMgc2hvdWxkIGJlIGFkanVzdGVkLgotICAgIGlmIChtX3JhcmVEYXRhKSB7Ci0g
ICAgICAgIGZvciAoVW5saW5rZWRIYW5kbGVySW5mbyYgaGFuZGxlciA6IG1fcmFyZURhdGEtPm1f
ZXhjZXB0aW9uSGFuZGxlcnMpIHsKLSAgICAgICAgICAgIGhhbmRsZXIudGFyZ2V0ID0gcmV3cml0
ZXIuYWRqdXN0QWJzb2x1dGVPZmZzZXQoaGFuZGxlci50YXJnZXQpOwotICAgICAgICAgICAgaGFu
ZGxlci5zdGFydCA9IHJld3JpdGVyLmFkanVzdEFic29sdXRlT2Zmc2V0KGhhbmRsZXIuc3RhcnQp
OwotICAgICAgICAgICAgaGFuZGxlci5lbmQgPSByZXdyaXRlci5hZGp1c3RBYnNvbHV0ZU9mZnNl
dChoYW5kbGVyLmVuZCk7Ci0gICAgICAgIH0KLQotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IG1fcmFyZURhdGEtPm1fb3BQcm9maWxlQ29udHJvbEZsb3dCeXRlY29kZU9mZnNldHMuc2l6
ZSgpOyArK2kpCi0gICAgICAgICAgICBtX3JhcmVEYXRhLT5tX29wUHJvZmlsZUNvbnRyb2xGbG93
Qnl0ZWNvZGVPZmZzZXRzW2ldID0gcmV3cml0ZXIuYWRqdXN0QWJzb2x1dGVPZmZzZXQobV9yYXJl
RGF0YS0+bV9vcFByb2ZpbGVDb250cm9sRmxvd0J5dGVjb2RlT2Zmc2V0c1tpXSk7Ci0KLSAgICAg
ICAgaWYgKCFtX3JhcmVEYXRhLT5tX3R5cGVQcm9maWxlckluZm9NYXAuaXNFbXB0eSgpKSB7Ci0g
ICAgICAgICAgICBIYXNoTWFwPHVuc2lnbmVkLCBSYXJlRGF0YTo6VHlwZVByb2ZpbGVyRXhwcmVz
c2lvblJhbmdlPiBhZGp1c3RlZFR5cGVQcm9maWxlckluZm9NYXA7Ci0gICAgICAgICAgICBmb3Ig
KGF1dG8mIGVudHJ5IDogbV9yYXJlRGF0YS0+bV90eXBlUHJvZmlsZXJJbmZvTWFwKQotICAgICAg
ICAgICAgICAgIGFkanVzdGVkVHlwZVByb2ZpbGVySW5mb01hcC5zZXQocmV3cml0ZXIuYWRqdXN0
QWJzb2x1dGVPZmZzZXQoZW50cnkua2V5KSwgZW50cnkudmFsdWUpOwotICAgICAgICAgICAgbV9y
YXJlRGF0YS0+bV90eXBlUHJvZmlsZXJJbmZvTWFwLnN3YXAoYWRqdXN0ZWRUeXBlUHJvZmlsZXJJ
bmZvTWFwKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bV9wcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9ucy5zaXplKCk7ICsraSkKLSAgICAgICAgbV9wcm9w
ZXJ0eUFjY2Vzc0luc3RydWN0aW9uc1tpXSA9IHJld3JpdGVyLmFkanVzdEFic29sdXRlT2Zmc2V0
KG1fcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbnNbaV0pOwotCi0gICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBtX2V4cHJlc3Npb25JbmZvLnNpemUoKTsgKytpKQotICAgICAgICBtX2V4cHJlc3Np
b25JbmZvW2ldLmluc3RydWN0aW9uT2Zmc2V0ID0gcmV3cml0ZXIuYWRqdXN0QWJzb2x1dGVPZmZz
ZXQobV9leHByZXNzaW9uSW5mb1tpXS5pbnN0cnVjdGlvbk9mZnNldCk7Ci0KLSAgICAvLyBUaGVu
LCBtb2RpZnkgdGhlIHVubGlua2VkIGluc3RydWN0aW9ucy4KLSAgICByZXdyaXRlci5hcHBseU1v
ZGlmaWNhdGlvbigpOwotCi0gICAgLy8gQW5kIHJlY29tcHV0ZSB0aGUganVtcCB0YXJnZXQgYmFz
ZWQgb24gdGhlIG1vZGlmaWVkIHVubGlua2VkIGluc3RydWN0aW9ucy4KLSAgICBtX2p1bXBUYXJn
ZXRzLmNsZWFyKCk7Ci0gICAgcmVjb21wdXRlUHJlY2lzZUp1bXBUYXJnZXRzKHRoaXMsIGdyYXBo
Lmluc3RydWN0aW9ucygpLmJlZ2luKCksIGdyYXBoLmluc3RydWN0aW9ucygpLnNpemUoKSwgbV9q
dW1wVGFyZ2V0cyk7Ci19Ci0KLX0KLQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1VubGlua2VkUHJvZ3JhbUNvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZFByb2dyYW1Db2RlQmxvY2suaAkocmV2aXNpb24g
MjA4MzA4KQkoZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2Rl
QmxvY2suaDoyMDgzMDgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5r
ZWRQcm9ncmFtQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2ODYgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxNiBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEg
b25jZQorCisjaW5jbHVkZSAiQnl0ZWNvZGVDb252ZW50aW9ucy5oIgorI2luY2x1ZGUgIkNvZGVT
cGVjaWFsaXphdGlvbktpbmQuaCIKKyNpbmNsdWRlICJDb2RlVHlwZS5oIgorI2luY2x1ZGUgIkNv
bnN0cnVjdEFiaWxpdHkuaCIKKyNpbmNsdWRlICJFeHByZXNzaW9uUmFuZ2VJbmZvLmgiCisjaW5j
bHVkZSAiSGFuZGxlckluZm8uaCIKKyNpbmNsdWRlICJJZGVudGlmaWVyLmgiCisjaW5jbHVkZSAi
SlNDZWxsLmgiCisjaW5jbHVkZSAiSlNTdHJpbmcuaCIKKyNpbmNsdWRlICJQYXJzZXJNb2Rlcy5o
IgorI2luY2x1ZGUgIlJlZ0V4cC5oIgorI2luY2x1ZGUgIlNwZWNpYWxQb2ludGVyLmgiCisjaW5j
bHVkZSAiVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuaCIKKyNpbmNsdWRlICJWYXJpYWJsZUVu
dmlyb25tZW50LmgiCisjaW5jbHVkZSAiVmlydHVhbFJlZ2lzdGVyLmgiCisjaW5jbHVkZSA8d3Rm
L1RyaVN0YXRlLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsK
KworY2xhc3MgQnl0ZWNvZGVSZXdyaXRlcjsKK2NsYXNzIERlYnVnZ2VyOworY2xhc3MgRnVuY3Rp
b25FeGVjdXRhYmxlOworY2xhc3MgUGFyc2VyRXJyb3I7CitjbGFzcyBTY3JpcHRFeGVjdXRhYmxl
OworY2xhc3MgU291cmNlQ29kZTsKK2NsYXNzIFNvdXJjZVByb3ZpZGVyOworY2xhc3MgVW5saW5r
ZWRDb2RlQmxvY2s7CitjbGFzcyBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrOworY2xhc3MgVW5s
aW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU7CitjbGFzcyBVbmxpbmtlZEluc3RydWN0aW9uU3RyZWFt
Oworc3RydWN0IEV4ZWN1dGFibGVJbmZvOworCit0eXBlZGVmIHVuc2lnbmVkIFVubGlua2VkVmFs
dWVQcm9maWxlOwordHlwZWRlZiB1bnNpZ25lZCBVbmxpbmtlZEFycmF5UHJvZmlsZTsKK3R5cGVk
ZWYgdW5zaWduZWQgVW5saW5rZWRBcnJheUFsbG9jYXRpb25Qcm9maWxlOwordHlwZWRlZiB1bnNp
Z25lZCBVbmxpbmtlZE9iamVjdEFsbG9jYXRpb25Qcm9maWxlOwordHlwZWRlZiB1bnNpZ25lZCBV
bmxpbmtlZExMSW50Q2FsbExpbmtJbmZvOworCitzdHJ1Y3QgVW5saW5rZWRTdHJpbmdKdW1wVGFi
bGUgeworICAgIHN0cnVjdCBPZmZzZXRMb2NhdGlvbiB7CisgICAgICAgIGludDMyX3QgYnJhbmNo
T2Zmc2V0OworICAgIH07CisKKyAgICB0eXBlZGVmIEhhc2hNYXA8UmVmUHRyPFN0cmluZ0ltcGw+
LCBPZmZzZXRMb2NhdGlvbj4gU3RyaW5nT2Zmc2V0VGFibGU7CisgICAgU3RyaW5nT2Zmc2V0VGFi
bGUgb2Zmc2V0VGFibGU7CisKKyAgICBpbmxpbmUgaW50MzJfdCBvZmZzZXRGb3JWYWx1ZShTdHJp
bmdJbXBsKiB2YWx1ZSwgaW50MzJfdCBkZWZhdWx0T2Zmc2V0KQorICAgIHsKKyAgICAgICAgU3Ry
aW5nT2Zmc2V0VGFibGU6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG9mZnNldFRhYmxlLmVuZCgpOwor
ICAgICAgICBTdHJpbmdPZmZzZXRUYWJsZTo6Y29uc3RfaXRlcmF0b3IgbG9jID0gb2Zmc2V0VGFi
bGUuZmluZCh2YWx1ZSk7CisgICAgICAgIGlmIChsb2MgPT0gZW5kKQorICAgICAgICAgICAgcmV0
dXJuIGRlZmF1bHRPZmZzZXQ7CisgICAgICAgIHJldHVybiBsb2MtPnZhbHVlLmJyYW5jaE9mZnNl
dDsKKyAgICB9CisKK307CisKK3N0cnVjdCBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSB7CisgICAg
VmVjdG9yPGludDMyX3Q+IGJyYW5jaE9mZnNldHM7CisgICAgaW50MzJfdCBtaW47CisKKyAgICBp
bnQzMl90IG9mZnNldEZvclZhbHVlKGludDMyX3QgdmFsdWUsIGludDMyX3QgZGVmYXVsdE9mZnNl
dCk7CisgICAgdm9pZCBhZGQoaW50MzJfdCBrZXksIGludDMyX3Qgb2Zmc2V0KQorICAgIHsKKyAg
ICAgICAgaWYgKCFicmFuY2hPZmZzZXRzW2tleV0pCisgICAgICAgICAgICBicmFuY2hPZmZzZXRz
W2tleV0gPSBvZmZzZXQ7CisgICAgfQorfTsKKworc3RydWN0IFVubGlua2VkSW5zdHJ1Y3Rpb24g
eworICAgIFVubGlua2VkSW5zdHJ1Y3Rpb24oKSB7IHUub3BlcmFuZCA9IDA7IH0KKyAgICBVbmxp
bmtlZEluc3RydWN0aW9uKE9wY29kZUlEIG9wY29kZSkgeyB1Lm9wY29kZSA9IG9wY29kZTsgfQor
ICAgIFVubGlua2VkSW5zdHJ1Y3Rpb24oaW50IG9wZXJhbmQpIHsgdS5vcGVyYW5kID0gb3BlcmFu
ZDsgfQorICAgIHVuaW9uIHsKKyAgICAgICAgT3Bjb2RlSUQgb3Bjb2RlOworICAgICAgICBpbnQz
Ml90IG9wZXJhbmQ7CisgICAgICAgIHVuc2lnbmVkIGluZGV4OworICAgIH0gdTsKK307CisKK2Ns
YXNzIFVubGlua2VkQ29kZUJsb2NrIDogcHVibGljIEpTQ2VsbCB7CitwdWJsaWM6CisgICAgdHlw
ZWRlZiBKU0NlbGwgQmFzZTsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxh
Z3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFnczsKKworICAgIHN0YXRpYyBjb25zdCBib29sIG5lZWRz
RGVzdHJ1Y3Rpb24gPSB0cnVlOworCisgICAgZW51bSB7IENhbGxGdW5jdGlvbiwgQXBwbHlGdW5j
dGlvbiB9OworCisgICAgdHlwZWRlZiBVbmxpbmtlZEluc3RydWN0aW9uIEluc3RydWN0aW9uOwor
ICAgIHR5cGVkZWYgVmVjdG9yPFVubGlua2VkSW5zdHJ1Y3Rpb24sIDAsIFVuc2FmZVZlY3Rvck92
ZXJmbG93PiBVbnBhY2tlZEluc3RydWN0aW9uczsKKworICAgIGJvb2wgaXNDb25zdHJ1Y3Rvcigp
IGNvbnN0IHsgcmV0dXJuIG1faXNDb25zdHJ1Y3RvcjsgfQorICAgIGJvb2wgaXNTdHJpY3RNb2Rl
KCkgY29uc3QgeyByZXR1cm4gbV9pc1N0cmljdE1vZGU7IH0KKyAgICBib29sIHVzZXNFdmFsKCkg
Y29uc3QgeyByZXR1cm4gbV91c2VzRXZhbDsgfQorICAgIFNvdXJjZVBhcnNlTW9kZSBwYXJzZU1v
ZGUoKSBjb25zdCB7IHJldHVybiBtX3BhcnNlTW9kZTsgfQorICAgIGJvb2wgaXNBcnJvd0Z1bmN0
aW9uKCkgY29uc3QgeyByZXR1cm4gaXNBcnJvd0Z1bmN0aW9uUGFyc2VNb2RlKHBhcnNlTW9kZSgp
KTsgfQorICAgIERlcml2ZWRDb250ZXh0VHlwZSBkZXJpdmVkQ29udGV4dFR5cGUoKSBjb25zdCB7
IHJldHVybiBzdGF0aWNfY2FzdDxEZXJpdmVkQ29udGV4dFR5cGU+KG1fZGVyaXZlZENvbnRleHRU
eXBlKTsgfQorICAgIEV2YWxDb250ZXh0VHlwZSBldmFsQ29udGV4dFR5cGUoKSBjb25zdCB7IHJl
dHVybiBzdGF0aWNfY2FzdDxFdmFsQ29udGV4dFR5cGU+KG1fZXZhbENvbnRleHRUeXBlKTsgfQor
ICAgIGJvb2wgaXNBcnJvd0Z1bmN0aW9uQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1faXNBcnJv
d0Z1bmN0aW9uQ29udGV4dDsgfQorICAgIGJvb2wgaXNDbGFzc0NvbnRleHQoKSBjb25zdCB7IHJl
dHVybiBtX2lzQ2xhc3NDb250ZXh0OyB9CisKKyAgICB2b2lkIGFkZEV4cHJlc3Npb25JbmZvKHVu
c2lnbmVkIGluc3RydWN0aW9uT2Zmc2V0LCBpbnQgZGl2b3QsCisgICAgICAgIGludCBzdGFydE9m
ZnNldCwgaW50IGVuZE9mZnNldCwgdW5zaWduZWQgbGluZSwgdW5zaWduZWQgY29sdW1uKTsKKwor
ICAgIHZvaWQgYWRkVHlwZVByb2ZpbGVyRXhwcmVzc2lvbkluZm8odW5zaWduZWQgaW5zdHJ1Y3Rp
b25PZmZzZXQsIHVuc2lnbmVkIHN0YXJ0RGl2b3QsIHVuc2lnbmVkIGVuZERpdm90KTsKKworICAg
IGJvb2wgaGFzRXhwcmVzc2lvbkluZm8oKSB7IHJldHVybiBtX2V4cHJlc3Npb25JbmZvLnNpemUo
KTsgfQorICAgIGNvbnN0IFZlY3RvcjxFeHByZXNzaW9uUmFuZ2VJbmZvPiYgZXhwcmVzc2lvbklu
Zm8oKSB7IHJldHVybiBtX2V4cHJlc3Npb25JbmZvOyB9CisKKyAgICAvLyBTcGVjaWFsIHJlZ2lz
dGVycworICAgIHZvaWQgc2V0VGhpc1JlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciB0aGlzUmVnaXN0
ZXIpIHsgbV90aGlzUmVnaXN0ZXIgPSB0aGlzUmVnaXN0ZXI7IH0KKyAgICB2b2lkIHNldFNjb3Bl
UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHNjb3BlUmVnaXN0ZXIpIHsgbV9zY29wZVJlZ2lzdGVy
ID0gc2NvcGVSZWdpc3RlcjsgfQorCisgICAgYm9vbCB1c2VzR2xvYmFsT2JqZWN0KCkgY29uc3Qg
eyByZXR1cm4gbV9nbG9iYWxPYmplY3RSZWdpc3Rlci5pc1ZhbGlkKCk7IH0KKyAgICB2b2lkIHNl
dEdsb2JhbE9iamVjdFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBnbG9iYWxPYmplY3RSZWdpc3Rl
cikgeyBtX2dsb2JhbE9iamVjdFJlZ2lzdGVyID0gZ2xvYmFsT2JqZWN0UmVnaXN0ZXI7IH0KKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZ2xvYmFsT2JqZWN0UmVnaXN0ZXIoKSBjb25zdCB7IHJldHVybiBt
X2dsb2JhbE9iamVjdFJlZ2lzdGVyOyB9CisKKyAgICAvLyBQYXJhbWV0ZXIgaW5mb3JtYXRpb24K
KyAgICB2b2lkIHNldE51bVBhcmFtZXRlcnMoaW50IG5ld1ZhbHVlKSB7IG1fbnVtUGFyYW1ldGVy
cyA9IG5ld1ZhbHVlOyB9CisgICAgdm9pZCBhZGRQYXJhbWV0ZXIoKSB7IG1fbnVtUGFyYW1ldGVy
cysrOyB9CisgICAgdW5zaWduZWQgbnVtUGFyYW1ldGVycygpIGNvbnN0IHsgcmV0dXJuIG1fbnVt
UGFyYW1ldGVyczsgfQorCisgICAgdW5zaWduZWQgYWRkUmVnRXhwKFJlZ0V4cCogcikKKyAgICB7
CisgICAgICAgIGNyZWF0ZVJhcmVEYXRhSWZOZWNlc3NhcnkoKTsKKyAgICAgICAgdW5zaWduZWQg
c2l6ZSA9IG1fcmFyZURhdGEtPm1fcmVnZXhwcy5zaXplKCk7CisgICAgICAgIG1fcmFyZURhdGEt
Pm1fcmVnZXhwcy5hcHBlbmQoV3JpdGVCYXJyaWVyPFJlZ0V4cD4oKnZtKCksIHRoaXMsIHIpKTsK
KyAgICAgICAgcmV0dXJuIHNpemU7CisgICAgfQorICAgIHVuc2lnbmVkIG51bWJlck9mUmVnRXhw
cygpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoIW1fcmFyZURhdGEpCisgICAgICAgICAgICBy
ZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIG1fcmFyZURhdGEtPm1fcmVnZXhwcy5zaXplKCk7Cisg
ICAgfQorICAgIFJlZ0V4cCogcmVnZXhwKGludCBpbmRleCkgY29uc3QgeyBBU1NFUlQobV9yYXJl
RGF0YSk7IHJldHVybiBtX3JhcmVEYXRhLT5tX3JlZ2V4cHNbaW5kZXhdLmdldCgpOyB9CisKKyAg
ICAvLyBDb25zdGFudCBQb29scworCisgICAgc2l6ZV90IG51bWJlck9mSWRlbnRpZmllcnMoKSBj
b25zdCB7IHJldHVybiBtX2lkZW50aWZpZXJzLnNpemUoKTsgfQorICAgIHZvaWQgYWRkSWRlbnRp
Zmllcihjb25zdCBJZGVudGlmaWVyJiBpKSB7IHJldHVybiBtX2lkZW50aWZpZXJzLmFwcGVuZChp
KTsgfQorICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIoaW50IGluZGV4KSBjb25zdCB7
IHJldHVybiBtX2lkZW50aWZpZXJzW2luZGV4XTsgfQorICAgIGNvbnN0IFZlY3RvcjxJZGVudGlm
aWVyPiYgaWRlbnRpZmllcnMoKSBjb25zdCB7IHJldHVybiBtX2lkZW50aWZpZXJzOyB9CisKKyAg
ICB1bnNpZ25lZCBhZGRDb25zdGFudChKU1ZhbHVlIHYsIFNvdXJjZUNvZGVSZXByZXNlbnRhdGlv
biBzb3VyY2VDb2RlUmVwcmVzZW50YXRpb24gPSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246Ok90
aGVyKQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgcmVzdWx0ID0gbV9jb25zdGFudFJlZ2lzdGVy
cy5zaXplKCk7CisgICAgICAgIG1fY29uc3RhbnRSZWdpc3RlcnMuYXBwZW5kKFdyaXRlQmFycmll
cjxVbmtub3duPigpKTsKKyAgICAgICAgbV9jb25zdGFudFJlZ2lzdGVycy5sYXN0KCkuc2V0KCp2
bSgpLCB0aGlzLCB2KTsKKyAgICAgICAgbV9jb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRp
b24uYXBwZW5kKHNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbik7CisgICAgICAgIHJldHVybiByZXN1
bHQ7CisgICAgfQorICAgIHVuc2lnbmVkIGFkZENvbnN0YW50KExpbmtUaW1lQ29uc3RhbnQgdHlw
ZSkKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIHJlc3VsdCA9IG1fY29uc3RhbnRSZWdpc3RlcnMu
c2l6ZSgpOworICAgICAgICBBU1NFUlQocmVzdWx0KTsKKyAgICAgICAgdW5zaWduZWQgaW5kZXgg
PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4odHlwZSk7CisgICAgICAgIEFTU0VSVChpbmRleCA8IExp
bmtUaW1lQ29uc3RhbnRDb3VudCk7CisgICAgICAgIG1fbGlua1RpbWVDb25zdGFudHNbaW5kZXhd
ID0gcmVzdWx0OworICAgICAgICBtX2NvbnN0YW50UmVnaXN0ZXJzLmFwcGVuZChXcml0ZUJhcnJp
ZXI8VW5rbm93bj4oKSk7CisgICAgICAgIG1fY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0
aW9uLmFwcGVuZChTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246Ok90aGVyKTsKKyAgICAgICAgcmV0
dXJuIHJlc3VsdDsKKyAgICB9CisgICAgdW5zaWduZWQgcmVnaXN0ZXJJbmRleEZvckxpbmtUaW1l
Q29uc3RhbnQoTGlua1RpbWVDb25zdGFudCB0eXBlKQorICAgIHsKKyAgICAgICAgdW5zaWduZWQg
aW5kZXggPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4odHlwZSk7CisgICAgICAgIEFTU0VSVChpbmRl
eCA8IExpbmtUaW1lQ29uc3RhbnRDb3VudCk7CisgICAgICAgIHJldHVybiBtX2xpbmtUaW1lQ29u
c3RhbnRzW2luZGV4XTsKKyAgICB9CisgICAgY29uc3QgVmVjdG9yPFdyaXRlQmFycmllcjxVbmtu
b3duPj4mIGNvbnN0YW50UmVnaXN0ZXJzKCkgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyczsg
fQorICAgIGNvbnN0IFdyaXRlQmFycmllcjxVbmtub3duPiYgY29uc3RhbnRSZWdpc3RlcihpbnQg
aW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnNbaW5kZXggLSBGaXJzdENv
bnN0YW50UmVnaXN0ZXJJbmRleF07IH0KKyAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaXNDb25zdGFu
dFJlZ2lzdGVySW5kZXgoaW50IGluZGV4KSBjb25zdCB7IHJldHVybiBpbmRleCA+PSBGaXJzdENv
bnN0YW50UmVnaXN0ZXJJbmRleDsgfQorICAgIGNvbnN0IFZlY3RvcjxTb3VyY2VDb2RlUmVwcmVz
ZW50YXRpb24+JiBjb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oKSB7IHJldHVybiBt
X2NvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjsgfQorCisgICAgLy8gSnVtcHMKKyAg
ICBzaXplX3QgbnVtYmVyT2ZKdW1wVGFyZ2V0cygpIGNvbnN0IHsgcmV0dXJuIG1fanVtcFRhcmdl
dHMuc2l6ZSgpOyB9CisgICAgdm9pZCBhZGRKdW1wVGFyZ2V0KHVuc2lnbmVkIGp1bXBUYXJnZXQp
IHsgbV9qdW1wVGFyZ2V0cy5hcHBlbmQoanVtcFRhcmdldCk7IH0KKyAgICB1bnNpZ25lZCBqdW1w
VGFyZ2V0KGludCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9qdW1wVGFyZ2V0c1tpbmRleF07IH0K
KyAgICB1bnNpZ25lZCBsYXN0SnVtcFRhcmdldCgpIGNvbnN0IHsgcmV0dXJuIG1fanVtcFRhcmdl
dHMubGFzdCgpOyB9CisKKyAgICBVbmxpbmtlZEhhbmRsZXJJbmZvKiBoYW5kbGVyRm9yQnl0ZWNv
ZGVPZmZzZXQodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQsIFJlcXVpcmVkSGFuZGxlciA9IFJlcXVp
cmVkSGFuZGxlcjo6QW55SGFuZGxlcik7CisgICAgVW5saW5rZWRIYW5kbGVySW5mbyogaGFuZGxl
ckZvckluZGV4KHVuc2lnbmVkLCBSZXF1aXJlZEhhbmRsZXIgPSBSZXF1aXJlZEhhbmRsZXI6OkFu
eUhhbmRsZXIpOworCisgICAgYm9vbCBpc0J1aWx0aW5GdW5jdGlvbigpIGNvbnN0IHsgcmV0dXJu
IG1faXNCdWlsdGluRnVuY3Rpb247IH0KKworICAgIENvbnN0cnVjdG9yS2luZCBjb25zdHJ1Y3Rv
cktpbmQoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxDb25zdHJ1Y3RvcktpbmQ+KG1fY29u
c3RydWN0b3JLaW5kKTsgfQorICAgIFN1cGVyQmluZGluZyBzdXBlckJpbmRpbmcoKSBjb25zdCB7
IHJldHVybiBzdGF0aWNfY2FzdDxTdXBlckJpbmRpbmc+KG1fc3VwZXJCaW5kaW5nKTsgfQorICAg
IEpTUGFyc2VyU2NyaXB0TW9kZSBzY3JpcHRNb2RlKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nh
c3Q8SlNQYXJzZXJTY3JpcHRNb2RlPihtX3NjcmlwdE1vZGUpOyB9CisKKyAgICB2b2lkIHNocmlu
a1RvRml0KCkKKyAgICB7CisgICAgICAgIG1fanVtcFRhcmdldHMuc2hyaW5rVG9GaXQoKTsKKyAg
ICAgICAgbV9pZGVudGlmaWVycy5zaHJpbmtUb0ZpdCgpOworICAgICAgICBtX2NvbnN0YW50UmVn
aXN0ZXJzLnNocmlua1RvRml0KCk7CisgICAgICAgIG1fY29uc3RhbnRzU291cmNlQ29kZVJlcHJl
c2VudGF0aW9uLnNocmlua1RvRml0KCk7CisgICAgICAgIG1fZnVuY3Rpb25EZWNscy5zaHJpbmtU
b0ZpdCgpOworICAgICAgICBtX2Z1bmN0aW9uRXhwcnMuc2hyaW5rVG9GaXQoKTsKKyAgICAgICAg
bV9wcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9ucy5zaHJpbmtUb0ZpdCgpOworICAgICAgICBtX2V4
cHJlc3Npb25JbmZvLnNocmlua1RvRml0KCk7CisKKyAgICAgICAgaWYgKG1fcmFyZURhdGEpIHsK
KyAgICAgICAgICAgIG1fcmFyZURhdGEtPm1fZXhjZXB0aW9uSGFuZGxlcnMuc2hyaW5rVG9GaXQo
KTsKKyAgICAgICAgICAgIG1fcmFyZURhdGEtPm1fcmVnZXhwcy5zaHJpbmtUb0ZpdCgpOworICAg
ICAgICAgICAgbV9yYXJlRGF0YS0+bV9jb25zdGFudEJ1ZmZlcnMuc2hyaW5rVG9GaXQoKTsKKyAg
ICAgICAgICAgIG1fcmFyZURhdGEtPm1fc3dpdGNoSnVtcFRhYmxlcy5zaHJpbmtUb0ZpdCgpOwor
ICAgICAgICAgICAgbV9yYXJlRGF0YS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzLnNocmlua1Rv
Rml0KCk7CisgICAgICAgICAgICBtX3JhcmVEYXRhLT5tX2V4cHJlc3Npb25JbmZvRmF0UG9zaXRp
b25zLnNocmlua1RvRml0KCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIHNldEluc3Ry
dWN0aW9ucyhzdGQ6OnVuaXF1ZV9wdHI8VW5saW5rZWRJbnN0cnVjdGlvblN0cmVhbT4pOworICAg
IGNvbnN0IFVubGlua2VkSW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3RydWN0aW9ucygpIGNvbnN0Owor
CisgICAgaW50IG51bUNhbGxlZUxvY2FscygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtQ2FsbGVlTG9j
YWxzOyB9CisKKyAgICBpbnQgbV9udW1WYXJzOworICAgIGludCBtX251bUNhcHR1cmVkVmFyczsK
KyAgICBpbnQgbV9udW1DYWxsZWVMb2NhbHM7CisKKyAgICAvLyBKdW1wIFRhYmxlcworCisgICAg
c2l6ZV90IG51bWJlck9mU3dpdGNoSnVtcFRhYmxlcygpIGNvbnN0IHsgcmV0dXJuIG1fcmFyZURh
dGEgPyBtX3JhcmVEYXRhLT5tX3N3aXRjaEp1bXBUYWJsZXMuc2l6ZSgpIDogMDsgfQorICAgIFVu
bGlua2VkU2ltcGxlSnVtcFRhYmxlJiBhZGRTd2l0Y2hKdW1wVGFibGUoKSB7IGNyZWF0ZVJhcmVE
YXRhSWZOZWNlc3NhcnkoKTsgbV9yYXJlRGF0YS0+bV9zd2l0Y2hKdW1wVGFibGVzLmFwcGVuZChV
bmxpbmtlZFNpbXBsZUp1bXBUYWJsZSgpKTsgcmV0dXJuIG1fcmFyZURhdGEtPm1fc3dpdGNoSnVt
cFRhYmxlcy5sYXN0KCk7IH0KKyAgICBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYgc3dpdGNoSnVt
cFRhYmxlKGludCB0YWJsZUluZGV4KSB7IEFTU0VSVChtX3JhcmVEYXRhKTsgcmV0dXJuIG1fcmFy
ZURhdGEtPm1fc3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsgfQorCisgICAgc2l6ZV90IG51
bWJlck9mU3RyaW5nU3dpdGNoSnVtcFRhYmxlcygpIGNvbnN0IHsgcmV0dXJuIG1fcmFyZURhdGEg
PyBtX3JhcmVEYXRhLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMuc2l6ZSgpIDogMDsgfQorICAg
IFVubGlua2VkU3RyaW5nSnVtcFRhYmxlJiBhZGRTdHJpbmdTd2l0Y2hKdW1wVGFibGUoKSB7IGNy
ZWF0ZVJhcmVEYXRhSWZOZWNlc3NhcnkoKTsgbV9yYXJlRGF0YS0+bV9zdHJpbmdTd2l0Y2hKdW1w
VGFibGVzLmFwcGVuZChVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZSgpKTsgcmV0dXJuIG1fcmFyZURh
dGEtPm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcy5sYXN0KCk7IH0KKyAgICBVbmxpbmtlZFN0cmlu
Z0p1bXBUYWJsZSYgc3RyaW5nU3dpdGNoSnVtcFRhYmxlKGludCB0YWJsZUluZGV4KSB7IEFTU0VS
VChtX3JhcmVEYXRhKTsgcmV0dXJuIG1fcmFyZURhdGEtPm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxl
c1t0YWJsZUluZGV4XTsgfQorCisgICAgdW5zaWduZWQgYWRkRnVuY3Rpb25EZWNsKFVubGlua2Vk
RnVuY3Rpb25FeGVjdXRhYmxlKiBuKQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgc2l6ZSA9IG1f
ZnVuY3Rpb25EZWNscy5zaXplKCk7CisgICAgICAgIG1fZnVuY3Rpb25EZWNscy5hcHBlbmQoV3Jp
dGVCYXJyaWVyPFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlPigpKTsKKyAgICAgICAgbV9mdW5j
dGlvbkRlY2xzLmxhc3QoKS5zZXQoKnZtKCksIHRoaXMsIG4pOworICAgICAgICByZXR1cm4gc2l6
ZTsKKyAgICB9CisgICAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uRGVjbChp
bnQgaW5kZXgpIHsgcmV0dXJuIG1fZnVuY3Rpb25EZWNsc1tpbmRleF0uZ2V0KCk7IH0KKyAgICBz
aXplX3QgbnVtYmVyT2ZGdW5jdGlvbkRlY2xzKCkgeyByZXR1cm4gbV9mdW5jdGlvbkRlY2xzLnNp
emUoKTsgfQorICAgIHVuc2lnbmVkIGFkZEZ1bmN0aW9uRXhwcihVbmxpbmtlZEZ1bmN0aW9uRXhl
Y3V0YWJsZSogbikKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIHNpemUgPSBtX2Z1bmN0aW9uRXhw
cnMuc2l6ZSgpOworICAgICAgICBtX2Z1bmN0aW9uRXhwcnMuYXBwZW5kKFdyaXRlQmFycmllcjxV
bmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZT4oKSk7CisgICAgICAgIG1fZnVuY3Rpb25FeHBycy5s
YXN0KCkuc2V0KCp2bSgpLCB0aGlzLCBuKTsKKyAgICAgICAgcmV0dXJuIHNpemU7CisgICAgfQor
ICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbkV4cHIoaW50IGluZGV4KSB7
IHJldHVybiBtX2Z1bmN0aW9uRXhwcnNbaW5kZXhdLmdldCgpOyB9CisgICAgc2l6ZV90IG51bWJl
ck9mRnVuY3Rpb25FeHBycygpIHsgcmV0dXJuIG1fZnVuY3Rpb25FeHBycy5zaXplKCk7IH0KKwor
ICAgIC8vIEV4Y2VwdGlvbiBoYW5kbGluZyBzdXBwb3J0CisgICAgc2l6ZV90IG51bWJlck9mRXhj
ZXB0aW9uSGFuZGxlcnMoKSBjb25zdCB7IHJldHVybiBtX3JhcmVEYXRhID8gbV9yYXJlRGF0YS0+
bV9leGNlcHRpb25IYW5kbGVycy5zaXplKCkgOiAwOyB9CisgICAgdm9pZCBhZGRFeGNlcHRpb25I
YW5kbGVyKGNvbnN0IFVubGlua2VkSGFuZGxlckluZm8mIGhhbmRsZXIpIHsgY3JlYXRlUmFyZURh
dGFJZk5lY2Vzc2FyeSgpOyByZXR1cm4gbV9yYXJlRGF0YS0+bV9leGNlcHRpb25IYW5kbGVycy5h
cHBlbmQoaGFuZGxlcik7IH0KKyAgICBVbmxpbmtlZEhhbmRsZXJJbmZvJiBleGNlcHRpb25IYW5k
bGVyKGludCBpbmRleCkgeyBBU1NFUlQobV9yYXJlRGF0YSk7IHJldHVybiBtX3JhcmVEYXRhLT5t
X2V4Y2VwdGlvbkhhbmRsZXJzW2luZGV4XTsgfQorCisgICAgVW5saW5rZWRBcnJheVByb2ZpbGUg
YWRkQXJyYXlQcm9maWxlKCkgeyByZXR1cm4gbV9hcnJheVByb2ZpbGVDb3VudCsrOyB9CisgICAg
dW5zaWduZWQgbnVtYmVyT2ZBcnJheVByb2ZpbGVzKCkgeyByZXR1cm4gbV9hcnJheVByb2ZpbGVD
b3VudDsgfQorICAgIFVubGlua2VkQXJyYXlBbGxvY2F0aW9uUHJvZmlsZSBhZGRBcnJheUFsbG9j
YXRpb25Qcm9maWxlKCkgeyByZXR1cm4gbV9hcnJheUFsbG9jYXRpb25Qcm9maWxlQ291bnQrKzsg
fQorICAgIHVuc2lnbmVkIG51bWJlck9mQXJyYXlBbGxvY2F0aW9uUHJvZmlsZXMoKSB7IHJldHVy
biBtX2FycmF5QWxsb2NhdGlvblByb2ZpbGVDb3VudDsgfQorICAgIFVubGlua2VkT2JqZWN0QWxs
b2NhdGlvblByb2ZpbGUgYWRkT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUoKSB7IHJldHVybiBtX29i
amVjdEFsbG9jYXRpb25Qcm9maWxlQ291bnQrKzsgfQorICAgIHVuc2lnbmVkIG51bWJlck9mT2Jq
ZWN0QWxsb2NhdGlvblByb2ZpbGVzKCkgeyByZXR1cm4gbV9vYmplY3RBbGxvY2F0aW9uUHJvZmls
ZUNvdW50OyB9CisgICAgVW5saW5rZWRWYWx1ZVByb2ZpbGUgYWRkVmFsdWVQcm9maWxlKCkgeyBy
ZXR1cm4gbV92YWx1ZVByb2ZpbGVDb3VudCsrOyB9CisgICAgdW5zaWduZWQgbnVtYmVyT2ZWYWx1
ZVByb2ZpbGVzKCkgeyByZXR1cm4gbV92YWx1ZVByb2ZpbGVDb3VudDsgfQorCisgICAgVW5saW5r
ZWRMTEludENhbGxMaW5rSW5mbyBhZGRMTEludENhbGxMaW5rSW5mbygpIHsgcmV0dXJuIG1fbGxp
bnRDYWxsTGlua0luZm9Db3VudCsrOyB9CisgICAgdW5zaWduZWQgbnVtYmVyT2ZMTGludENhbGxM
aW5rSW5mb3MoKSB7IHJldHVybiBtX2xsaW50Q2FsbExpbmtJbmZvQ291bnQ7IH0KKworICAgIENv
ZGVUeXBlIGNvZGVUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9jb2RlVHlwZTsgfQorCisgICAgVmly
dHVhbFJlZ2lzdGVyIHRoaXNSZWdpc3RlcigpIGNvbnN0IHsgcmV0dXJuIG1fdGhpc1JlZ2lzdGVy
OyB9CisgICAgVmlydHVhbFJlZ2lzdGVyIHNjb3BlUmVnaXN0ZXIoKSBjb25zdCB7IHJldHVybiBt
X3Njb3BlUmVnaXN0ZXI7IH0KKworICAgIHZvaWQgYWRkUHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlv
bih1bnNpZ25lZCBwcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uKQorICAgIHsKKyAgICAgICAgbV9w
cm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9ucy5hcHBlbmQocHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlv
bik7CisgICAgfQorCisgICAgc2l6ZV90IG51bWJlck9mUHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlv
bnMoKSBjb25zdCB7IHJldHVybiBtX3Byb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25zLnNpemUoKTsg
fQorICAgIGNvbnN0IFZlY3Rvcjx1bnNpZ25lZD4mIHByb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25z
KCkgY29uc3QgeyByZXR1cm4gbV9wcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uczsgfQorCisgICAg
dHlwZWRlZiBWZWN0b3I8SlNWYWx1ZT4gQ29uc3RhbnRCdWZmZXI7CisKKyAgICBzaXplX3QgY29u
c3RhbnRCdWZmZXJDb3VudCgpIHsgQVNTRVJUKG1fcmFyZURhdGEpOyByZXR1cm4gbV9yYXJlRGF0
YS0+bV9jb25zdGFudEJ1ZmZlcnMuc2l6ZSgpOyB9CisgICAgdW5zaWduZWQgYWRkQ29uc3RhbnRC
dWZmZXIodW5zaWduZWQgbGVuZ3RoKQorICAgIHsKKyAgICAgICAgY3JlYXRlUmFyZURhdGFJZk5l
Y2Vzc2FyeSgpOworICAgICAgICB1bnNpZ25lZCBzaXplID0gbV9yYXJlRGF0YS0+bV9jb25zdGFu
dEJ1ZmZlcnMuc2l6ZSgpOworICAgICAgICBtX3JhcmVEYXRhLT5tX2NvbnN0YW50QnVmZmVycy5h
cHBlbmQoVmVjdG9yPEpTVmFsdWU+KGxlbmd0aCkpOworICAgICAgICByZXR1cm4gc2l6ZTsKKyAg
ICB9CisKKyAgICBjb25zdCBDb25zdGFudEJ1ZmZlciYgY29uc3RhbnRCdWZmZXIodW5zaWduZWQg
aW5kZXgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQobV9yYXJlRGF0YSk7CisgICAgICAg
IHJldHVybiBtX3JhcmVEYXRhLT5tX2NvbnN0YW50QnVmZmVyc1tpbmRleF07CisgICAgfQorCisg
ICAgQ29uc3RhbnRCdWZmZXImIGNvbnN0YW50QnVmZmVyKHVuc2lnbmVkIGluZGV4KQorICAgIHsK
KyAgICAgICAgQVNTRVJUKG1fcmFyZURhdGEpOworICAgICAgICByZXR1cm4gbV9yYXJlRGF0YS0+
bV9jb25zdGFudEJ1ZmZlcnNbaW5kZXhdOworICAgIH0KKworICAgIGJvb2wgaGFzUmFyZURhdGEo
KSBjb25zdCB7IHJldHVybiBtX3JhcmVEYXRhLmdldCgpOyB9CisKKyAgICBpbnQgbGluZU51bWJl
ckZvckJ5dGVjb2RlT2Zmc2V0KHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KTsKKworICAgIHZvaWQg
ZXhwcmVzc2lvblJhbmdlRm9yQnl0ZWNvZGVPZmZzZXQodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQs
IGludCYgZGl2b3QsCisgICAgICAgIGludCYgc3RhcnRPZmZzZXQsIGludCYgZW5kT2Zmc2V0LCB1
bnNpZ25lZCYgbGluZSwgdW5zaWduZWQmIGNvbHVtbikgY29uc3Q7CisKKyAgICBib29sIHR5cGVQ
cm9maWxlckV4cHJlc3Npb25JbmZvRm9yQnl0ZWNvZGVPZmZzZXQodW5zaWduZWQgYnl0ZWNvZGVP
ZmZzZXQsIHVuc2lnbmVkJiBzdGFydERpdm90LCB1bnNpZ25lZCYgZW5kRGl2b3QpOworCisgICAg
dm9pZCByZWNvcmRQYXJzZShDb2RlRmVhdHVyZXMgZmVhdHVyZXMsIGJvb2wgaGFzQ2FwdHVyZWRW
YXJpYWJsZXMsIHVuc2lnbmVkIGZpcnN0TGluZSwgdW5zaWduZWQgbGluZUNvdW50LCB1bnNpZ25l
ZCBlbmRDb2x1bW4pCisgICAgeworICAgICAgICBtX2ZlYXR1cmVzID0gZmVhdHVyZXM7CisgICAg
ICAgIG1faGFzQ2FwdHVyZWRWYXJpYWJsZXMgPSBoYXNDYXB0dXJlZFZhcmlhYmxlczsKKyAgICAg
ICAgbV9maXJzdExpbmUgPSBmaXJzdExpbmU7CisgICAgICAgIG1fbGluZUNvdW50ID0gbGluZUNv
dW50OworICAgICAgICAvLyBGb3IgdGhlIFVubGlua2VkQ29kZUJsb2NrLCBzdGFydENvbHVtbiBp
cyBhbHdheXMgMC4KKyAgICAgICAgbV9lbmRDb2x1bW4gPSBlbmRDb2x1bW47CisgICAgfQorCisg
ICAgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkxEaXJlY3RpdmUoKSBjb25zdCB7IHJldHVybiBtX3Nv
dXJjZVVSTERpcmVjdGl2ZTsgfQorICAgIGNvbnN0IFN0cmluZyYgc291cmNlTWFwcGluZ1VSTERp
cmVjdGl2ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlTWFwcGluZ1VSTERpcmVjdGl2ZTsgfQor
ICAgIHZvaWQgc2V0U291cmNlVVJMRGlyZWN0aXZlKGNvbnN0IFN0cmluZyYgc291cmNlVVJMKSB7
IG1fc291cmNlVVJMRGlyZWN0aXZlID0gc291cmNlVVJMOyB9CisgICAgdm9pZCBzZXRTb3VyY2VN
YXBwaW5nVVJMRGlyZWN0aXZlKGNvbnN0IFN0cmluZyYgc291cmNlTWFwcGluZ1VSTCkgeyBtX3Nv
dXJjZU1hcHBpbmdVUkxEaXJlY3RpdmUgPSBzb3VyY2VNYXBwaW5nVVJMOyB9CisKKyAgICBDb2Rl
RmVhdHVyZXMgY29kZUZlYXR1cmVzKCkgY29uc3QgeyByZXR1cm4gbV9mZWF0dXJlczsgfQorICAg
IGJvb2wgaGFzQ2FwdHVyZWRWYXJpYWJsZXMoKSBjb25zdCB7IHJldHVybiBtX2hhc0NhcHR1cmVk
VmFyaWFibGVzOyB9CisgICAgdW5zaWduZWQgZmlyc3RMaW5lKCkgY29uc3QgeyByZXR1cm4gbV9m
aXJzdExpbmU7IH0KKyAgICB1bnNpZ25lZCBsaW5lQ291bnQoKSBjb25zdCB7IHJldHVybiBtX2xp
bmVDb3VudDsgfQorICAgIEFMV0FZU19JTkxJTkUgdW5zaWduZWQgc3RhcnRDb2x1bW4oKSBjb25z
dCB7IHJldHVybiAwOyB9CisgICAgdW5zaWduZWQgZW5kQ29sdW1uKCkgY29uc3QgeyByZXR1cm4g
bV9lbmRDb2x1bW47IH0KKworICAgIHZvaWQgYWRkT3BQcm9maWxlQ29udHJvbEZsb3dCeXRlY29k
ZU9mZnNldChzaXplX3Qgb2Zmc2V0KQorICAgIHsKKyAgICAgICAgY3JlYXRlUmFyZURhdGFJZk5l
Y2Vzc2FyeSgpOworICAgICAgICBtX3JhcmVEYXRhLT5tX29wUHJvZmlsZUNvbnRyb2xGbG93Qnl0
ZWNvZGVPZmZzZXRzLmFwcGVuZChvZmZzZXQpOworICAgIH0KKyAgICBjb25zdCBWZWN0b3I8c2l6
ZV90PiYgb3BQcm9maWxlQ29udHJvbEZsb3dCeXRlY29kZU9mZnNldHMoKSBjb25zdAorICAgIHsK
KyAgICAgICAgQVNTRVJUKG1fcmFyZURhdGEpOworICAgICAgICByZXR1cm4gbV9yYXJlRGF0YS0+
bV9vcFByb2ZpbGVDb250cm9sRmxvd0J5dGVjb2RlT2Zmc2V0czsKKyAgICB9CisgICAgYm9vbCBo
YXNPcFByb2ZpbGVDb250cm9sRmxvd0J5dGVjb2RlT2Zmc2V0cygpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gbV9yYXJlRGF0YSAmJiAhbV9yYXJlRGF0YS0+bV9vcFByb2ZpbGVDb250cm9s
Rmxvd0J5dGVjb2RlT2Zmc2V0cy5pc0VtcHR5KCk7CisgICAgfQorCisgICAgdm9pZCBkdW1wRXhw
cmVzc2lvblJhbmdlSW5mbygpOyAvLyBGb3IgZGVidWdnaW5nIHB1cnBvc2Ugb25seS4KKworICAg
IGJvb2wgd2FzQ29tcGlsZWRXaXRoRGVidWdnaW5nT3Bjb2RlcygpIGNvbnN0IHsgcmV0dXJuIG1f
d2FzQ29tcGlsZWRXaXRoRGVidWdnaW5nT3Bjb2RlczsgfQorCisgICAgVHJpU3RhdGUgZGlkT3B0
aW1pemUoKSBjb25zdCB7IHJldHVybiBtX2RpZE9wdGltaXplOyB9CisgICAgdm9pZCBzZXREaWRP
cHRpbWl6ZShUcmlTdGF0ZSBkaWRPcHRpbWl6ZSkgeyBtX2RpZE9wdGltaXplID0gZGlkT3B0aW1p
emU7IH0KKworcHJvdGVjdGVkOgorICAgIFVubGlua2VkQ29kZUJsb2NrKFZNKiwgU3RydWN0dXJl
KiwgQ29kZVR5cGUsIGNvbnN0IEV4ZWN1dGFibGVJbmZvJiwgRGVidWdnZXJNb2RlKTsKKyAgICB+
VW5saW5rZWRDb2RlQmxvY2soKTsKKworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mIHZtKQor
ICAgIHsKKyAgICAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOworICAgIH0KKworcHJpdmF0
ZToKKyAgICBmcmllbmQgY2xhc3MgQnl0ZWNvZGVSZXdyaXRlcjsKKyAgICB2b2lkIGFwcGx5TW9k
aWZpY2F0aW9uKEJ5dGVjb2RlUmV3cml0ZXImKTsKKworICAgIHZvaWQgY3JlYXRlUmFyZURhdGFJ
Zk5lY2Vzc2FyeSgpCisgICAgeworICAgICAgICBpZiAoIW1fcmFyZURhdGEpCisgICAgICAgICAg
ICBtX3JhcmVEYXRhID0gc3RkOjptYWtlX3VuaXF1ZTxSYXJlRGF0YT4oKTsKKyAgICB9CisKKyAg
ICB2b2lkIGdldExpbmVBbmRDb2x1bW4oY29uc3QgRXhwcmVzc2lvblJhbmdlSW5mbyYsIHVuc2ln
bmVkJiBsaW5lLCB1bnNpZ25lZCYgY29sdW1uKSBjb25zdDsKKworICAgIGludCBtX251bVBhcmFt
ZXRlcnM7CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8VW5saW5rZWRJbnN0cnVjdGlvblN0cmVhbT4g
bV91bmxpbmtlZEluc3RydWN0aW9uczsKKworICAgIFZpcnR1YWxSZWdpc3RlciBtX3RoaXNSZWdp
c3RlcjsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9zY29wZVJlZ2lzdGVyOworICAgIFZpcnR1YWxS
ZWdpc3RlciBtX2dsb2JhbE9iamVjdFJlZ2lzdGVyOworCisgICAgU3RyaW5nIG1fc291cmNlVVJM
RGlyZWN0aXZlOworICAgIFN0cmluZyBtX3NvdXJjZU1hcHBpbmdVUkxEaXJlY3RpdmU7CisKKyAg
ICB1bnNpZ25lZCBtX3VzZXNFdmFsIDogMTsKKyAgICB1bnNpZ25lZCBtX2lzU3RyaWN0TW9kZSA6
IDE7CisgICAgdW5zaWduZWQgbV9pc0NvbnN0cnVjdG9yIDogMTsKKyAgICB1bnNpZ25lZCBtX2hh
c0NhcHR1cmVkVmFyaWFibGVzIDogMTsKKyAgICB1bnNpZ25lZCBtX2lzQnVpbHRpbkZ1bmN0aW9u
IDogMTsKKyAgICB1bnNpZ25lZCBtX3N1cGVyQmluZGluZyA6IDE7CisgICAgdW5zaWduZWQgbV9z
Y3JpcHRNb2RlOiAxOworICAgIHVuc2lnbmVkIG1faXNBcnJvd0Z1bmN0aW9uQ29udGV4dCA6IDE7
CisgICAgdW5zaWduZWQgbV9pc0NsYXNzQ29udGV4dCA6IDE7CisgICAgdW5zaWduZWQgbV93YXND
b21waWxlZFdpdGhEZWJ1Z2dpbmdPcGNvZGVzIDogMTsKKyAgICB1bnNpZ25lZCBtX2NvbnN0cnVj
dG9yS2luZCA6IDI7CisgICAgdW5zaWduZWQgbV9kZXJpdmVkQ29udGV4dFR5cGUgOiAyOworICAg
IHVuc2lnbmVkIG1fZXZhbENvbnRleHRUeXBlIDogMjsKKyAgICB1bnNpZ25lZCBtX2ZpcnN0TGlu
ZTsKKyAgICB1bnNpZ25lZCBtX2xpbmVDb3VudDsKKyAgICB1bnNpZ25lZCBtX2VuZENvbHVtbjsK
KworICAgIFRyaVN0YXRlIG1fZGlkT3B0aW1pemU7CisgICAgU291cmNlUGFyc2VNb2RlIG1fcGFy
c2VNb2RlOworICAgIENvZGVGZWF0dXJlcyBtX2ZlYXR1cmVzOworICAgIENvZGVUeXBlIG1fY29k
ZVR5cGU7CisKKyAgICBWZWN0b3I8dW5zaWduZWQ+IG1fanVtcFRhcmdldHM7CisKKyAgICBWZWN0
b3I8dW5zaWduZWQ+IG1fcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbnM7CisKKyAgICAvLyBDb25z
dGFudCBQb29scworICAgIFZlY3RvcjxJZGVudGlmaWVyPiBtX2lkZW50aWZpZXJzOworICAgIFZl
Y3RvcjxXcml0ZUJhcnJpZXI8VW5rbm93bj4+IG1fY29uc3RhbnRSZWdpc3RlcnM7CisgICAgVmVj
dG9yPFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbj4gbV9jb25zdGFudHNTb3VyY2VDb2RlUmVwcmVz
ZW50YXRpb247CisgICAgdHlwZWRlZiBWZWN0b3I8V3JpdGVCYXJyaWVyPFVubGlua2VkRnVuY3Rp
b25FeGVjdXRhYmxlPj4gRnVuY3Rpb25FeHByZXNzaW9uVmVjdG9yOworICAgIEZ1bmN0aW9uRXhw
cmVzc2lvblZlY3RvciBtX2Z1bmN0aW9uRGVjbHM7CisgICAgRnVuY3Rpb25FeHByZXNzaW9uVmVj
dG9yIG1fZnVuY3Rpb25FeHByczsKKyAgICBzdGQ6OmFycmF5PHVuc2lnbmVkLCBMaW5rVGltZUNv
bnN0YW50Q291bnQ+IG1fbGlua1RpbWVDb25zdGFudHM7CisKKyAgICB1bnNpZ25lZCBtX2FycmF5
UHJvZmlsZUNvdW50OworICAgIHVuc2lnbmVkIG1fYXJyYXlBbGxvY2F0aW9uUHJvZmlsZUNvdW50
OworICAgIHVuc2lnbmVkIG1fb2JqZWN0QWxsb2NhdGlvblByb2ZpbGVDb3VudDsKKyAgICB1bnNp
Z25lZCBtX3ZhbHVlUHJvZmlsZUNvdW50OworICAgIHVuc2lnbmVkIG1fbGxpbnRDYWxsTGlua0lu
Zm9Db3VudDsKKworcHVibGljOgorICAgIHN0cnVjdCBSYXJlRGF0YSB7CisgICAgICAgIFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOworICAgIHB1YmxpYzoKKyAgICAgICAgVmVjdG9yPFVubGlua2Vk
SGFuZGxlckluZm8+IG1fZXhjZXB0aW9uSGFuZGxlcnM7CisKKyAgICAgICAgLy8gUmFyZSBDb25z
dGFudHMKKyAgICAgICAgVmVjdG9yPFdyaXRlQmFycmllcjxSZWdFeHA+PiBtX3JlZ2V4cHM7CisK
KyAgICAgICAgLy8gQnVmZmVycyB1c2VkIGZvciBsYXJnZSBhcnJheSBsaXRlcmFscworICAgICAg
ICBWZWN0b3I8Q29uc3RhbnRCdWZmZXI+IG1fY29uc3RhbnRCdWZmZXJzOworCisgICAgICAgIC8v
IEp1bXAgVGFibGVzCisgICAgICAgIFZlY3RvcjxVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZT4gbV9z
d2l0Y2hKdW1wVGFibGVzOworICAgICAgICBWZWN0b3I8VW5saW5rZWRTdHJpbmdKdW1wVGFibGU+
IG1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlczsKKworICAgICAgICBWZWN0b3I8RXhwcmVzc2lvblJh
bmdlSW5mbzo6RmF0UG9zaXRpb24+IG1fZXhwcmVzc2lvbkluZm9GYXRQb3NpdGlvbnM7CisKKyAg
ICAgICAgc3RydWN0IFR5cGVQcm9maWxlckV4cHJlc3Npb25SYW5nZSB7CisgICAgICAgICAgICB1
bnNpZ25lZCBtX3N0YXJ0RGl2b3Q7CisgICAgICAgICAgICB1bnNpZ25lZCBtX2VuZERpdm90Owor
ICAgICAgICB9OworICAgICAgICBIYXNoTWFwPHVuc2lnbmVkLCBUeXBlUHJvZmlsZXJFeHByZXNz
aW9uUmFuZ2U+IG1fdHlwZVByb2ZpbGVySW5mb01hcDsKKyAgICAgICAgVmVjdG9yPHNpemVfdD4g
bV9vcFByb2ZpbGVDb250cm9sRmxvd0J5dGVjb2RlT2Zmc2V0czsKKyAgICB9OworCitwcml2YXRl
OgorICAgIHN0ZDo6dW5pcXVlX3B0cjxSYXJlRGF0YT4gbV9yYXJlRGF0YTsKKyAgICBWZWN0b3I8
RXhwcmVzc2lvblJhbmdlSW5mbz4gbV9leHByZXNzaW9uSW5mbzsKKworcHJvdGVjdGVkOgorICAg
IHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBz
dGF0aWMgc2l6ZV90IGVzdGltYXRlZFNpemUoSlNDZWxsKik7CisKK3B1YmxpYzoKKyAgICBERUNM
QVJFX0lORk87Cit9OworCitjbGFzcyBVbmxpbmtlZEdsb2JhbENvZGVCbG9jayA6IHB1YmxpYyBV
bmxpbmtlZENvZGVCbG9jayB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBVbmxpbmtlZENvZGVCbG9j
ayBCYXNlOworCitwcm90ZWN0ZWQ6CisgICAgVW5saW5rZWRHbG9iYWxDb2RlQmxvY2soVk0qIHZt
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQ29kZVR5cGUgY29kZVR5cGUsIGNvbnN0IEV4ZWN1dGFi
bGVJbmZvJiBpbmZvLCBEZWJ1Z2dlck1vZGUgZGVidWdnZXJNb2RlKQorICAgICAgICA6IEJhc2Uo
dm0sIHN0cnVjdHVyZSwgY29kZVR5cGUsIGluZm8sIGRlYnVnZ2VyTW9kZSkKKyAgICB7CisgICAg
fQorCisgICAgREVDTEFSRV9JTkZPOworfTsKKworY2xhc3MgVW5saW5rZWRQcm9ncmFtQ29kZUJs
b2NrIGZpbmFsIDogcHVibGljIFVubGlua2VkR2xvYmFsQ29kZUJsb2NrIHsKK3ByaXZhdGU6Cisg
ICAgZnJpZW5kIGNsYXNzIENvZGVDYWNoZTsKKyAgICBzdGF0aWMgVW5saW5rZWRQcm9ncmFtQ29k
ZUJsb2NrKiBjcmVhdGUoVk0qIHZtLCBjb25zdCBFeGVjdXRhYmxlSW5mbyYgaW5mbywgRGVidWdn
ZXJNb2RlIGRlYnVnZ2VyTW9kZSkKKyAgICB7CisgICAgICAgIFVubGlua2VkUHJvZ3JhbUNvZGVC
bG9jayogaW5zdGFuY2UgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxVbmxpbmtlZFByb2dy
YW1Db2RlQmxvY2s+KHZtLT5oZWFwKSkgVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrKHZtLCB2bS0+
dW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrU3RydWN0dXJlLmdldCgpLCBpbmZvLCBkZWJ1Z2dlck1v
ZGUpOworICAgICAgICBpbnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24oKnZtKTsKKyAgICAgICAgcmV0
dXJuIGluc3RhbmNlOworICAgIH0KKworcHVibGljOgorICAgIHR5cGVkZWYgVW5saW5rZWRHbG9i
YWxDb2RlQmxvY2sgQmFzZTsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxh
Z3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IFN0cnVjdHVyZUlzSW1tb3J0YWw7CisKKyAgICBz
dGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOworCisgICAgdm9pZCBzZXRWYXJpYWJsZURlY2xh
cmF0aW9ucyhjb25zdCBWYXJpYWJsZUVudmlyb25tZW50JiBlbnZpcm9ubWVudCkgeyBtX3ZhckRl
Y2xhcmF0aW9ucyA9IGVudmlyb25tZW50OyB9CisgICAgY29uc3QgVmFyaWFibGVFbnZpcm9ubWVu
dCYgdmFyaWFibGVEZWNsYXJhdGlvbnMoKSBjb25zdCB7IHJldHVybiBtX3ZhckRlY2xhcmF0aW9u
czsgfQorCisgICAgdm9pZCBzZXRMZXhpY2FsRGVjbGFyYXRpb25zKGNvbnN0IFZhcmlhYmxlRW52
aXJvbm1lbnQmIGVudmlyb25tZW50KSB7IG1fbGV4aWNhbERlY2xhcmF0aW9ucyA9IGVudmlyb25t
ZW50OyB9CisgICAgY29uc3QgVmFyaWFibGVFbnZpcm9ubWVudCYgbGV4aWNhbERlY2xhcmF0aW9u
cygpIGNvbnN0IHsgcmV0dXJuIG1fbGV4aWNhbERlY2xhcmF0aW9uczsgfQorCisgICAgc3RhdGlj
IHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworCitwcml2YXRlOgor
ICAgIFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jayhWTSogdm0sIFN0cnVjdHVyZSogc3RydWN0dXJl
LCBjb25zdCBFeGVjdXRhYmxlSW5mbyYgaW5mbywgRGVidWdnZXJNb2RlIGRlYnVnZ2VyTW9kZSkK
KyAgICAgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUsIEdsb2JhbENvZGUsIGluZm8sIGRlYnVnZ2Vy
TW9kZSkKKyAgICB7CisgICAgfQorCisgICAgVmFyaWFibGVFbnZpcm9ubWVudCBtX3ZhckRlY2xh
cmF0aW9uczsKKyAgICBWYXJpYWJsZUVudmlyb25tZW50IG1fbGV4aWNhbERlY2xhcmF0aW9uczsK
KworcHVibGljOgorICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0s
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG8pCisgICAgeworICAg
ICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG8sIFR5
cGVJbmZvKFVubGlua2VkUHJvZ3JhbUNvZGVCbG9ja1R5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5m
bygpKTsKKyAgICB9CisKKyAgICBERUNMQVJFX0lORk87Cit9OworCitjbGFzcyBVbmxpbmtlZE1v
ZHVsZVByb2dyYW1Db2RlQmxvY2sgZmluYWwgOiBwdWJsaWMgVW5saW5rZWRHbG9iYWxDb2RlQmxv
Y2sgeworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgQ29kZUNhY2hlOworICAgIHN0YXRpYyBV
bmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2sqIGNyZWF0ZShWTSogdm0sIGNvbnN0IEV4ZWN1
dGFibGVJbmZvJiBpbmZvLCBEZWJ1Z2dlck1vZGUgZGVidWdnZXJNb2RlKQorICAgIHsKKyAgICAg
ICAgVW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrKiBpbnN0YW5jZSA9IG5ldyAoTm90TnVs
bCwgYWxsb2NhdGVDZWxsPFVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jaz4odm0tPmhlYXAp
KSBVbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2sodm0sIHZtLT51bmxpbmtlZE1vZHVsZVBy
b2dyYW1Db2RlQmxvY2tTdHJ1Y3R1cmUuZ2V0KCksIGluZm8sIGRlYnVnZ2VyTW9kZSk7CisgICAg
ICAgIGluc3RhbmNlLT5maW5pc2hDcmVhdGlvbigqdm0pOworICAgICAgICByZXR1cm4gaW5zdGFu
Y2U7CisgICAgfQorCitwdWJsaWM6CisgICAgdHlwZWRlZiBVbmxpbmtlZEdsb2JhbENvZGVCbG9j
ayBCYXNlOworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6
OlN0cnVjdHVyZUZsYWdzIHwgU3RydWN0dXJlSXNJbW1vcnRhbDsKKworICAgIHN0YXRpYyB2b2lk
IGRlc3Ryb3koSlNDZWxsKik7CisKKyAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2Vs
bCosIFNsb3RWaXNpdG9yJik7CisKKyAgICAvLyBUaGlzIG9mZnNldCByZXByZXNlbnRzIHRoZSBj
b25zdGFudCByZWdpc3RlciBvZmZzZXQgdG8gdGhlIHN0b3JlZCBzeW1ib2wgdGFibGUgdGhhdCBy
ZXByZXNlbnRzIHRoZSBsYXlvdXQgb2YgdGhlCisgICAgLy8gbW9kdWxlIGVudmlyb25tZW50LiBU
aGlzIHN5bWJvbCB0YWJsZSBpcyBjcmVhdGVkIGJ5IHRoZSBieXRlIGNvZGUgZ2VuZXJhdG9yIHNp
bmNlIHRoZSBtb2R1bGUgZW52aXJvbm1lbnQgaW5jbHVkZXMKKyAgICAvLyB0aGUgdG9wLW1vc3Qg
bGV4aWNhbCBjYXB0dXJlZCB2YXJpYWJsZXMgaW5zaWRlIHRoZSBtb2R1bGUgY29kZS4gVGhpcyBt
ZWFucyB0aGF0LCBvbmNlIHRoZSBtb2R1bGUgZW52aXJvbm1lbnQgaXMKKyAgICAvLyBhbGxvY2F0
ZWQgYW5kIGluc3RhbnRpYXRlZCBmcm9tIHRoaXMgc3ltYm9sIHRhYmxlLCBpdCBpcyB0aXRlbHkg
Y291cGxlZCB3aXRoIHRoZSBzcGVjaWZpYyB1bmxpbmtlZCBtb2R1bGUgcHJvZ3JhbQorICAgIC8v
IGNvZGUgYmxvY2sgYW5kIHRoZSBzdG9yZWQgc3ltYm9sIHRhYmxlLiBTbyBiZWZvcmUgZXhlY3V0
aW5nIHRoZSBtb2R1bGUgY29kZSwgd2Ugc2hvdWxkIG5vdCBjbGVhciB0aGUgdW5saW5rZWQgbW9k
dWxlCisgICAgLy8gcHJvZ3JhbSBjb2RlIGJsb2NrIGluIHRoZSBtb2R1bGUgZXhlY3V0YWJsZS4g
VGhpcyByZXF1aXJlbWVudCBpcyBtZXQgYmVjYXVzZSB0aGUgZ2FyYmFnZSBjb2xsZWN0b3Igb25s
eSBjbGVhcnMKKyAgICAvLyB1bmxpbmtlZCBjb2RlIGluICgxKSB1bm1hcmtlZCBleGVjdXRhYmxl
cyBhbmQgKDIpIGZ1bmN0aW9uIGV4ZWN1dGFibGVzLgorICAgIC8vCisgICAgLy8gU2luY2UgdGhl
IGZ1bmN0aW9uIGNvZGUgbWF5IGJlIGV4ZWN1dGVkIHJlcGVhdGVkbHkgYW5kIHRoZSBlbnZpcm9u
bWVudCBvZiBlYWNoIGZ1bmN0aW9uIGV4ZWN1dGlvbiBpcyBkaWZmZXJlbnQsCisgICAgLy8gdGhl
IGZ1bmN0aW9uIGNvZGUgbmVlZCB0byBhbGxvY2F0ZSBhbmQgaW5zdGFudGlhdGUgdGhlIGVudmly
b25tZW50IGluIHRoZSBwcm9sb2d1ZSBvZiB0aGUgZnVuY3Rpb24gY29kZS4gT24gdGhlCisgICAg
Ly8gb3RoZXIgaGFuZCwgdGhlIG1vZHVsZSBjb2RlIGlzIGV4ZWN1dGVkIG9ubHkgb25jZS4gU28g
d2UgY2FuIGluc3RhbnRpYXRlIHRoZSBtb2R1bGUgZW52aXJvbm1lbnQgb3V0c2lkZSB0aGUgbW9k
dWxlCisgICAgLy8gY29kZS4gQXQgdGhhdCB0aW1lLCB3ZSBjb25zdHJ1Y3QgdGhlIG1vZHVsZSBl
bnZpcm9ubWVudCBieSB1c2luZyB0aGUgc3ltYm9sIHRhYmxlIHRoYXQgaXMgaGVsZCBieSB0aGUg
bW9kdWxlIGV4ZWN1dGFibGUuCisgICAgLy8gVGhlIHN5bWJvbCB0YWJsZSBoZWxkIGJ5IHRoZSBl
eGVjdXRhYmxlIGlzIHRoZSBjbG9uZWQgb25lIGZyb20gb25lIGluIHRoZSB1bmxpbmtlZCBjb2Rl
IGJsb2NrLiBJbnN0YW50aWF0aW5nIHRoZSBtb2R1bGUKKyAgICAvLyBlbnZpcm9ubWVudCBiZWZv
cmUgZXhlY3V0aW5nIGFuZCBsaW5raW5nIHRoZSBtb2R1bGUgY29kZSBpcyByZXF1aXJlZCB0byBs
aW5rIHRoZSBpbXBvcnRlZCBiaW5kaW5ncyBiZXR3ZWVuIHRoZSBtb2R1bGVzLgorICAgIC8vCisg
ICAgLy8gVGhlIHVubGlua2VkIG1vZHVsZSBwcm9ncmFtIGNvZGUgYmxvY2sgb25seSBob2xkcyB0
aGUgcHJlLWNsb25lZCBzeW1ib2wgdGFibGUgaW4gaXRzIGNvbnN0YW50IHJlZ2lzdGVyIHBvb2wu
IEl0IGRvZXMKKyAgICAvLyBub3QgaG9sZCB0aGUgaW5zdGFudGlhdGVkIG1vZHVsZSBlbnZpcm9u
bWVudC4gU28gd2hpbGUgdGhlIG1vZHVsZSBlbnZpcm9ubWVudCByZXF1aXJlcyB0aGUgc3BlY2lm
aWMgdW5saW5rZWQgbW9kdWxlCisgICAgLy8gcHJvZ3JhbSBjb2RlIGJsb2NrLCB0aGUgdW5saW5r
ZWQgbW9kdWxlIGNvZGUgYmxvY2sgY2FuIGJlIHVzZWQgZm9yIHRoZSBtb2R1bGUgZW52aXJvbm1l
bnQgaW5zdGFudGlhdGVkIGZyb20gdGhpcworICAgIC8vIHVubGlua2VkIGNvZGUgYmxvY2suIFRo
ZXJlIGlzIDE6TiByZWxhdGlvbiBiZXR3ZWVuIHRoZSB1bmxpbmtlZCBtb2R1bGUgY29kZSBibG9j
ayBhbmQgdGhlIG1vZHVsZSBlbnZpcm9ubWVudHMuIFNvIHRoZQorICAgIC8vIHVubGlua2VkIG1v
ZHVsZSBwcm9ncmFtIGNvZGUgYmxvY2sgY2FuIGJlIGNhY2hlZC4KKyAgICAvLworICAgIC8vIE9u
IHRoZSBvdGhlciBoYW5kLCB0aGUgbGlua2VkIGNvZGUgYmxvY2sgZm9yIHRoZSBtb2R1bGUgZW52
aXJvbm1lbnQgaW5jbHVkZXMgdGhlIHJlc29sdmVkIHJlZmVyZW5jZXMgdG8gdGhlIGltcG9ydGVk
CisgICAgLy8gYmluZGluZ3MuIFRoZSBpbXBvcnRlZCBiaW5kaW5nIHJlZmVyZW5jZXMgdGhlIG90
aGVyIG1vZHVsZSBlbnZpcm9ubWVudCwgc28gdGhlIGxpbmtlZCBjb2RlIGJsb2NrIGlzIHRpdGx5
IGNvdXBsZWQKKyAgICAvLyB3aXRoIHRoZSBzcGVjaWZpYyBzZXQgb2YgdGhlIG1vZHVsZSBlbnZp
cm9ubWVudHMuIFRodXMsIHRoZSBsaW5rZWQgY29kZSBibG9jayBzaG91bGQgbm90IGJlIGNhY2hl
ZC4KKyAgICBpbnQgbW9kdWxlRW52aXJvbm1lbnRTeW1ib2xUYWJsZUNvbnN0YW50UmVnaXN0ZXJP
ZmZzZXQoKSB7IHJldHVybiBtX21vZHVsZUVudmlyb25tZW50U3ltYm9sVGFibGVDb25zdGFudFJl
Z2lzdGVyT2Zmc2V0OyB9CisgICAgdm9pZCBzZXRNb2R1bGVFbnZpcm9ubWVudFN5bWJvbFRhYmxl
Q29uc3RhbnRSZWdpc3Rlck9mZnNldChpbnQgb2Zmc2V0KQorICAgIHsKKyAgICAgICAgbV9tb2R1
bGVFbnZpcm9ubWVudFN5bWJvbFRhYmxlQ29uc3RhbnRSZWdpc3Rlck9mZnNldCA9IG9mZnNldDsK
KyAgICB9CisKK3ByaXZhdGU6CisgICAgVW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrKFZN
KiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IEV4ZWN1dGFibGVJbmZvJiBpbmZvLCBE
ZWJ1Z2dlck1vZGUgZGVidWdnZXJNb2RlKQorICAgICAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSwg
TW9kdWxlQ29kZSwgaW5mbywgZGVidWdnZXJNb2RlKQorICAgIHsKKyAgICB9CisKKyAgICBpbnQg
bV9tb2R1bGVFbnZpcm9ubWVudFN5bWJvbFRhYmxlQ29uc3RhbnRSZWdpc3Rlck9mZnNldCB7IDAg
fTsKKworcHVibGljOgorICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYg
dm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG8pCisgICAgewor
ICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG8s
IFR5cGVJbmZvKFVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9ja1R5cGUsIFN0cnVjdHVyZUZs
YWdzKSwgaW5mbygpKTsKKyAgICB9CisKKyAgICBERUNMQVJFX0lORk87Cit9OworCitjbGFzcyBV
bmxpbmtlZEV2YWxDb2RlQmxvY2sgZmluYWwgOiBwdWJsaWMgVW5saW5rZWRHbG9iYWxDb2RlQmxv
Y2sgeworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgQ29kZUNhY2hlOworCisgICAgc3RhdGlj
IFVubGlua2VkRXZhbENvZGVCbG9jayogY3JlYXRlKFZNKiB2bSwgY29uc3QgRXhlY3V0YWJsZUlu
Zm8mIGluZm8sIERlYnVnZ2VyTW9kZSBkZWJ1Z2dlck1vZGUpCisgICAgeworICAgICAgICBVbmxp
bmtlZEV2YWxDb2RlQmxvY2sqIGluc3RhbmNlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8
VW5saW5rZWRFdmFsQ29kZUJsb2NrPih2bS0+aGVhcCkpIFVubGlua2VkRXZhbENvZGVCbG9jayh2
bSwgdm0tPnVubGlua2VkRXZhbENvZGVCbG9ja1N0cnVjdHVyZS5nZXQoKSwgaW5mbywgZGVidWdn
ZXJNb2RlKTsKKyAgICAgICAgaW5zdGFuY2UtPmZpbmlzaENyZWF0aW9uKCp2bSk7CisgICAgICAg
IHJldHVybiBpbnN0YW5jZTsKKyAgICB9CisKK3B1YmxpYzoKKyAgICB0eXBlZGVmIFVubGlua2Vk
R2xvYmFsQ29kZUJsb2NrIEJhc2U7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVy
ZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBTdHJ1Y3R1cmVJc0ltbW9ydGFsOworCisg
ICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKKworICAgIGNvbnN0IElkZW50aWZpZXIm
IHZhcmlhYmxlKHVuc2lnbmVkIGluZGV4KSB7IHJldHVybiBtX3ZhcmlhYmxlc1tpbmRleF07IH0K
KyAgICB1bnNpZ25lZCBudW1WYXJpYWJsZXMoKSB7IHJldHVybiBtX3ZhcmlhYmxlcy5zaXplKCk7
IH0KKyAgICB2b2lkIGFkb3B0VmFyaWFibGVzKFZlY3RvcjxJZGVudGlmaWVyLCAwLCBVbnNhZmVW
ZWN0b3JPdmVyZmxvdz4mIHZhcmlhYmxlcykKKyAgICB7CisgICAgICAgIEFTU0VSVChtX3Zhcmlh
Ymxlcy5pc0VtcHR5KCkpOworICAgICAgICBtX3ZhcmlhYmxlcy5zd2FwKHZhcmlhYmxlcyk7Cisg
ICAgfQorCitwcml2YXRlOgorICAgIFVubGlua2VkRXZhbENvZGVCbG9jayhWTSogdm0sIFN0cnVj
dHVyZSogc3RydWN0dXJlLCBjb25zdCBFeGVjdXRhYmxlSW5mbyYgaW5mbywgRGVidWdnZXJNb2Rl
IGRlYnVnZ2VyTW9kZSkKKyAgICAgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUsIEV2YWxDb2RlLCBp
bmZvLCBkZWJ1Z2dlck1vZGUpCisgICAgeworICAgIH0KKworICAgIFZlY3RvcjxJZGVudGlmaWVy
LCAwLCBVbnNhZmVWZWN0b3JPdmVyZmxvdz4gbV92YXJpYWJsZXM7CisKK3B1YmxpYzoKKyAgICBz
dGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFN0cnVj
dHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvLCBUeXBlSW5mbyhVbmxpbmtlZEV2
YWxDb2RlQmxvY2tUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CisgICAgfQorCisgICAg
REVDTEFSRV9JTkZPOworfTsKKworY2xhc3MgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayBmaW5h
bCA6IHB1YmxpYyBVbmxpbmtlZENvZGVCbG9jayB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBVbmxp
bmtlZENvZGVCbG9jayBCYXNlOworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVG
bGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgU3RydWN0dXJlSXNJbW1vcnRhbDsKKworICAg
IHN0YXRpYyBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKiBjcmVhdGUoVk0qIHZtLCBDb2RlVHlw
ZSBjb2RlVHlwZSwgY29uc3QgRXhlY3V0YWJsZUluZm8mIGluZm8sIERlYnVnZ2VyTW9kZSBkZWJ1
Z2dlck1vZGUpCisgICAgeworICAgICAgICBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKiBpbnN0
YW5jZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFVubGlua2VkRnVuY3Rpb25Db2RlQmxv
Y2s+KHZtLT5oZWFwKSkgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayh2bSwgdm0tPnVubGlua2Vk
RnVuY3Rpb25Db2RlQmxvY2tTdHJ1Y3R1cmUuZ2V0KCksIGNvZGVUeXBlLCBpbmZvLCBkZWJ1Z2dl
ck1vZGUpOworICAgICAgICBpbnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24oKnZtKTsKKyAgICAgICAg
cmV0dXJuIGluc3RhbmNlOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxs
Kik7CisKK3ByaXZhdGU6CisgICAgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayhWTSogdm0sIFN0
cnVjdHVyZSogc3RydWN0dXJlLCBDb2RlVHlwZSBjb2RlVHlwZSwgY29uc3QgRXhlY3V0YWJsZUlu
Zm8mIGluZm8sIERlYnVnZ2VyTW9kZSBkZWJ1Z2dlck1vZGUpCisgICAgICAgIDogQmFzZSh2bSwg
c3RydWN0dXJlLCBjb2RlVHlwZSwgaW5mbywgZGVidWdnZXJNb2RlKQorICAgIHsKKyAgICB9Cisg
ICAgCitwdWJsaWM6CisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2
bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90bykKKyAgICB7Cisg
ICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90bywg
VHlwZUluZm8oVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9ja1R5cGUsIFN0cnVjdHVyZUZsYWdzKSwg
aW5mbygpKTsKKyAgICB9CisKKyAgICBERUNMQVJFX0lORk87Cit9OworCit9CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkUHJvZ3Jh
bUNvZGVCbG9jay5oCShyZXZpc2lvbiAyMDgzMDgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1
LDQ4NiArMjUsMTAgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJCeXRlY29kZUNvbnZl
bnRpb25zLmgiCi0jaW5jbHVkZSAiQ29kZVNwZWNpYWxpemF0aW9uS2luZC5oIgotI2luY2x1ZGUg
IkNvZGVUeXBlLmgiCi0jaW5jbHVkZSAiQ29uc3RydWN0QWJpbGl0eS5oIgotI2luY2x1ZGUgIkV4
cHJlc3Npb25SYW5nZUluZm8uaCIKLSNpbmNsdWRlICJIYW5kbGVySW5mby5oIgotI2luY2x1ZGUg
IklkZW50aWZpZXIuaCIKLSNpbmNsdWRlICJKU0NlbGwuaCIKLSNpbmNsdWRlICJKU1N0cmluZy5o
IgotI2luY2x1ZGUgIlBhcnNlck1vZGVzLmgiCi0jaW5jbHVkZSAiUmVnRXhwLmgiCi0jaW5jbHVk
ZSAiU3BlY2lhbFBvaW50ZXIuaCIKLSNpbmNsdWRlICJVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJs
ZS5oIgotI2luY2x1ZGUgIlZhcmlhYmxlRW52aXJvbm1lbnQuaCIKLSNpbmNsdWRlICJWaXJ0dWFs
UmVnaXN0ZXIuaCIKLSNpbmNsdWRlIDx3dGYvVHJpU3RhdGUuaD4KLSNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+CisjaW5jbHVkZSAiVW5saW5rZWRHbG9iYWxDb2RlQmxvY2suaCIKIAogbmFtZXNwYWNl
IEpTQyB7CiAKLWNsYXNzIEJ5dGVjb2RlUmV3cml0ZXI7Ci1jbGFzcyBEZWJ1Z2dlcjsKLWNsYXNz
IEZ1bmN0aW9uRXhlY3V0YWJsZTsKLWNsYXNzIFBhcnNlckVycm9yOwotY2xhc3MgU2NyaXB0RXhl
Y3V0YWJsZTsKLWNsYXNzIFNvdXJjZUNvZGU7Ci1jbGFzcyBTb3VyY2VQcm92aWRlcjsKLWNsYXNz
IFVubGlua2VkQ29kZUJsb2NrOwotY2xhc3MgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jazsKLWNs
YXNzIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOwotY2xhc3MgVW5saW5rZWRJbnN0cnVjdGlv
blN0cmVhbTsKLXN0cnVjdCBFeGVjdXRhYmxlSW5mbzsKLQotdHlwZWRlZiB1bnNpZ25lZCBVbmxp
bmtlZFZhbHVlUHJvZmlsZTsKLXR5cGVkZWYgdW5zaWduZWQgVW5saW5rZWRBcnJheVByb2ZpbGU7
Ci10eXBlZGVmIHVuc2lnbmVkIFVubGlua2VkQXJyYXlBbGxvY2F0aW9uUHJvZmlsZTsKLXR5cGVk
ZWYgdW5zaWduZWQgVW5saW5rZWRPYmplY3RBbGxvY2F0aW9uUHJvZmlsZTsKLXR5cGVkZWYgdW5z
aWduZWQgVW5saW5rZWRMTEludENhbGxMaW5rSW5mbzsKLQotc3RydWN0IFVubGlua2VkU3RyaW5n
SnVtcFRhYmxlIHsKLSAgICBzdHJ1Y3QgT2Zmc2V0TG9jYXRpb24gewotICAgICAgICBpbnQzMl90
IGJyYW5jaE9mZnNldDsKLSAgICB9OwotCi0gICAgdHlwZWRlZiBIYXNoTWFwPFJlZlB0cjxTdHJp
bmdJbXBsPiwgT2Zmc2V0TG9jYXRpb24+IFN0cmluZ09mZnNldFRhYmxlOwotICAgIFN0cmluZ09m
ZnNldFRhYmxlIG9mZnNldFRhYmxlOwotCi0gICAgaW5saW5lIGludDMyX3Qgb2Zmc2V0Rm9yVmFs
dWUoU3RyaW5nSW1wbCogdmFsdWUsIGludDMyX3QgZGVmYXVsdE9mZnNldCkKLSAgICB7Ci0gICAg
ICAgIFN0cmluZ09mZnNldFRhYmxlOjpjb25zdF9pdGVyYXRvciBlbmQgPSBvZmZzZXRUYWJsZS5l
bmQoKTsKLSAgICAgICAgU3RyaW5nT2Zmc2V0VGFibGU6OmNvbnN0X2l0ZXJhdG9yIGxvYyA9IG9m
ZnNldFRhYmxlLmZpbmQodmFsdWUpOwotICAgICAgICBpZiAobG9jID09IGVuZCkKLSAgICAgICAg
ICAgIHJldHVybiBkZWZhdWx0T2Zmc2V0OwotICAgICAgICByZXR1cm4gbG9jLT52YWx1ZS5icmFu
Y2hPZmZzZXQ7Ci0gICAgfQotCi19OwotCi1zdHJ1Y3QgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUg
ewotICAgIFZlY3RvcjxpbnQzMl90PiBicmFuY2hPZmZzZXRzOwotICAgIGludDMyX3QgbWluOwot
Ci0gICAgaW50MzJfdCBvZmZzZXRGb3JWYWx1ZShpbnQzMl90IHZhbHVlLCBpbnQzMl90IGRlZmF1
bHRPZmZzZXQpOwotICAgIHZvaWQgYWRkKGludDMyX3Qga2V5LCBpbnQzMl90IG9mZnNldCkKLSAg
ICB7Ci0gICAgICAgIGlmICghYnJhbmNoT2Zmc2V0c1trZXldKQotICAgICAgICAgICAgYnJhbmNo
T2Zmc2V0c1trZXldID0gb2Zmc2V0OwotICAgIH0KLX07Ci0KLXN0cnVjdCBVbmxpbmtlZEluc3Ry
dWN0aW9uIHsKLSAgICBVbmxpbmtlZEluc3RydWN0aW9uKCkgeyB1Lm9wZXJhbmQgPSAwOyB9Ci0g
ICAgVW5saW5rZWRJbnN0cnVjdGlvbihPcGNvZGVJRCBvcGNvZGUpIHsgdS5vcGNvZGUgPSBvcGNv
ZGU7IH0KLSAgICBVbmxpbmtlZEluc3RydWN0aW9uKGludCBvcGVyYW5kKSB7IHUub3BlcmFuZCA9
IG9wZXJhbmQ7IH0KLSAgICB1bmlvbiB7Ci0gICAgICAgIE9wY29kZUlEIG9wY29kZTsKLSAgICAg
ICAgaW50MzJfdCBvcGVyYW5kOwotICAgICAgICB1bnNpZ25lZCBpbmRleDsKLSAgICB9IHU7Ci19
OwotCi1jbGFzcyBVbmxpbmtlZENvZGVCbG9jayA6IHB1YmxpYyBKU0NlbGwgewotcHVibGljOgot
ICAgIHR5cGVkZWYgSlNDZWxsIEJhc2U7Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVj
dHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3M7Ci0KLSAgICBzdGF0aWMgY29uc3QgYm9v
bCBuZWVkc0Rlc3RydWN0aW9uID0gdHJ1ZTsKLQotICAgIGVudW0geyBDYWxsRnVuY3Rpb24sIEFw
cGx5RnVuY3Rpb24gfTsKLQotICAgIHR5cGVkZWYgVW5saW5rZWRJbnN0cnVjdGlvbiBJbnN0cnVj
dGlvbjsKLSAgICB0eXBlZGVmIFZlY3RvcjxVbmxpbmtlZEluc3RydWN0aW9uLCAwLCBVbnNhZmVW
ZWN0b3JPdmVyZmxvdz4gVW5wYWNrZWRJbnN0cnVjdGlvbnM7Ci0KLSAgICBib29sIGlzQ29uc3Ry
dWN0b3IoKSBjb25zdCB7IHJldHVybiBtX2lzQ29uc3RydWN0b3I7IH0KLSAgICBib29sIGlzU3Ry
aWN0TW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNTdHJpY3RNb2RlOyB9Ci0gICAgYm9vbCB1c2Vz
RXZhbCgpIGNvbnN0IHsgcmV0dXJuIG1fdXNlc0V2YWw7IH0KLSAgICBTb3VyY2VQYXJzZU1vZGUg
cGFyc2VNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9wYXJzZU1vZGU7IH0KLSAgICBib29sIGlzQXJy
b3dGdW5jdGlvbigpIGNvbnN0IHsgcmV0dXJuIGlzQXJyb3dGdW5jdGlvblBhcnNlTW9kZShwYXJz
ZU1vZGUoKSk7IH0KLSAgICBEZXJpdmVkQ29udGV4dFR5cGUgZGVyaXZlZENvbnRleHRUeXBlKCkg
Y29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8RGVyaXZlZENvbnRleHRUeXBlPihtX2Rlcml2ZWRD
b250ZXh0VHlwZSk7IH0KLSAgICBFdmFsQ29udGV4dFR5cGUgZXZhbENvbnRleHRUeXBlKCkgY29u
c3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8RXZhbENvbnRleHRUeXBlPihtX2V2YWxDb250ZXh0VHlw
ZSk7IH0KLSAgICBib29sIGlzQXJyb3dGdW5jdGlvbkNvbnRleHQoKSBjb25zdCB7IHJldHVybiBt
X2lzQXJyb3dGdW5jdGlvbkNvbnRleHQ7IH0KLSAgICBib29sIGlzQ2xhc3NDb250ZXh0KCkgY29u
c3QgeyByZXR1cm4gbV9pc0NsYXNzQ29udGV4dDsgfQotCi0gICAgdm9pZCBhZGRFeHByZXNzaW9u
SW5mbyh1bnNpZ25lZCBpbnN0cnVjdGlvbk9mZnNldCwgaW50IGRpdm90LAotICAgICAgICBpbnQg
c3RhcnRPZmZzZXQsIGludCBlbmRPZmZzZXQsIHVuc2lnbmVkIGxpbmUsIHVuc2lnbmVkIGNvbHVt
bik7Ci0KLSAgICB2b2lkIGFkZFR5cGVQcm9maWxlckV4cHJlc3Npb25JbmZvKHVuc2lnbmVkIGlu
c3RydWN0aW9uT2Zmc2V0LCB1bnNpZ25lZCBzdGFydERpdm90LCB1bnNpZ25lZCBlbmREaXZvdCk7
Ci0KLSAgICBib29sIGhhc0V4cHJlc3Npb25JbmZvKCkgeyByZXR1cm4gbV9leHByZXNzaW9uSW5m
by5zaXplKCk7IH0KLSAgICBjb25zdCBWZWN0b3I8RXhwcmVzc2lvblJhbmdlSW5mbz4mIGV4cHJl
c3Npb25JbmZvKCkgeyByZXR1cm4gbV9leHByZXNzaW9uSW5mbzsgfQotCi0gICAgLy8gU3BlY2lh
bCByZWdpc3RlcnMKLSAgICB2b2lkIHNldFRoaXNSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgdGhp
c1JlZ2lzdGVyKSB7IG1fdGhpc1JlZ2lzdGVyID0gdGhpc1JlZ2lzdGVyOyB9Ci0gICAgdm9pZCBz
ZXRTY29wZVJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBzY29wZVJlZ2lzdGVyKSB7IG1fc2NvcGVS
ZWdpc3RlciA9IHNjb3BlUmVnaXN0ZXI7IH0KLQotICAgIGJvb2wgdXNlc0dsb2JhbE9iamVjdCgp
IGNvbnN0IHsgcmV0dXJuIG1fZ2xvYmFsT2JqZWN0UmVnaXN0ZXIuaXNWYWxpZCgpOyB9Ci0gICAg
dm9pZCBzZXRHbG9iYWxPYmplY3RSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgZ2xvYmFsT2JqZWN0
UmVnaXN0ZXIpIHsgbV9nbG9iYWxPYmplY3RSZWdpc3RlciA9IGdsb2JhbE9iamVjdFJlZ2lzdGVy
OyB9Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGdsb2JhbE9iamVjdFJlZ2lzdGVyKCkgY29uc3QgeyBy
ZXR1cm4gbV9nbG9iYWxPYmplY3RSZWdpc3RlcjsgfQotCi0gICAgLy8gUGFyYW1ldGVyIGluZm9y
bWF0aW9uCi0gICAgdm9pZCBzZXROdW1QYXJhbWV0ZXJzKGludCBuZXdWYWx1ZSkgeyBtX251bVBh
cmFtZXRlcnMgPSBuZXdWYWx1ZTsgfQotICAgIHZvaWQgYWRkUGFyYW1ldGVyKCkgeyBtX251bVBh
cmFtZXRlcnMrKzsgfQotICAgIHVuc2lnbmVkIG51bVBhcmFtZXRlcnMoKSBjb25zdCB7IHJldHVy
biBtX251bVBhcmFtZXRlcnM7IH0KLQotICAgIHVuc2lnbmVkIGFkZFJlZ0V4cChSZWdFeHAqIHIp
Ci0gICAgewotICAgICAgICBjcmVhdGVSYXJlRGF0YUlmTmVjZXNzYXJ5KCk7Ci0gICAgICAgIHVu
c2lnbmVkIHNpemUgPSBtX3JhcmVEYXRhLT5tX3JlZ2V4cHMuc2l6ZSgpOwotICAgICAgICBtX3Jh
cmVEYXRhLT5tX3JlZ2V4cHMuYXBwZW5kKFdyaXRlQmFycmllcjxSZWdFeHA+KCp2bSgpLCB0aGlz
LCByKSk7Ci0gICAgICAgIHJldHVybiBzaXplOwotICAgIH0KLSAgICB1bnNpZ25lZCBudW1iZXJP
ZlJlZ0V4cHMoKSBjb25zdAotICAgIHsKLSAgICAgICAgaWYgKCFtX3JhcmVEYXRhKQotICAgICAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIHJldHVybiBtX3JhcmVEYXRhLT5tX3JlZ2V4cHMuc2l6
ZSgpOwotICAgIH0KLSAgICBSZWdFeHAqIHJlZ2V4cChpbnQgaW5kZXgpIGNvbnN0IHsgQVNTRVJU
KG1fcmFyZURhdGEpOyByZXR1cm4gbV9yYXJlRGF0YS0+bV9yZWdleHBzW2luZGV4XS5nZXQoKTsg
fQotCi0gICAgLy8gQ29uc3RhbnQgUG9vbHMKLQotICAgIHNpemVfdCBudW1iZXJPZklkZW50aWZp
ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9pZGVudGlmaWVycy5zaXplKCk7IH0KLSAgICB2b2lkIGFk
ZElkZW50aWZpZXIoY29uc3QgSWRlbnRpZmllciYgaSkgeyByZXR1cm4gbV9pZGVudGlmaWVycy5h
cHBlbmQoaSk7IH0KLSAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudGlmaWVyKGludCBpbmRleCkg
Y29uc3QgeyByZXR1cm4gbV9pZGVudGlmaWVyc1tpbmRleF07IH0KLSAgICBjb25zdCBWZWN0b3I8
SWRlbnRpZmllcj4mIGlkZW50aWZpZXJzKCkgY29uc3QgeyByZXR1cm4gbV9pZGVudGlmaWVyczsg
fQotCi0gICAgdW5zaWduZWQgYWRkQ29uc3RhbnQoSlNWYWx1ZSB2LCBTb3VyY2VDb2RlUmVwcmVz
ZW50YXRpb24gc291cmNlQ29kZVJlcHJlc2VudGF0aW9uID0gU291cmNlQ29kZVJlcHJlc2VudGF0
aW9uOjpPdGhlcikKLSAgICB7Ci0gICAgICAgIHVuc2lnbmVkIHJlc3VsdCA9IG1fY29uc3RhbnRS
ZWdpc3RlcnMuc2l6ZSgpOwotICAgICAgICBtX2NvbnN0YW50UmVnaXN0ZXJzLmFwcGVuZChXcml0
ZUJhcnJpZXI8VW5rbm93bj4oKSk7Ci0gICAgICAgIG1fY29uc3RhbnRSZWdpc3RlcnMubGFzdCgp
LnNldCgqdm0oKSwgdGhpcywgdik7Ci0gICAgICAgIG1fY29uc3RhbnRzU291cmNlQ29kZVJlcHJl
c2VudGF0aW9uLmFwcGVuZChzb3VyY2VDb2RlUmVwcmVzZW50YXRpb24pOwotICAgICAgICByZXR1
cm4gcmVzdWx0OwotICAgIH0KLSAgICB1bnNpZ25lZCBhZGRDb25zdGFudChMaW5rVGltZUNvbnN0
YW50IHR5cGUpCi0gICAgewotICAgICAgICB1bnNpZ25lZCByZXN1bHQgPSBtX2NvbnN0YW50UmVn
aXN0ZXJzLnNpemUoKTsKLSAgICAgICAgQVNTRVJUKHJlc3VsdCk7Ci0gICAgICAgIHVuc2lnbmVk
IGluZGV4ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHR5cGUpOwotICAgICAgICBBU1NFUlQoaW5k
ZXggPCBMaW5rVGltZUNvbnN0YW50Q291bnQpOwotICAgICAgICBtX2xpbmtUaW1lQ29uc3RhbnRz
W2luZGV4XSA9IHJlc3VsdDsKLSAgICAgICAgbV9jb25zdGFudFJlZ2lzdGVycy5hcHBlbmQoV3Jp
dGVCYXJyaWVyPFVua25vd24+KCkpOwotICAgICAgICBtX2NvbnN0YW50c1NvdXJjZUNvZGVSZXBy
ZXNlbnRhdGlvbi5hcHBlbmQoU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpPdGhlcik7Ci0gICAg
ICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotICAgIHVuc2lnbmVkIHJlZ2lzdGVySW5kZXhGb3JM
aW5rVGltZUNvbnN0YW50KExpbmtUaW1lQ29uc3RhbnQgdHlwZSkKLSAgICB7Ci0gICAgICAgIHVu
c2lnbmVkIGluZGV4ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHR5cGUpOwotICAgICAgICBBU1NF
UlQoaW5kZXggPCBMaW5rVGltZUNvbnN0YW50Q291bnQpOwotICAgICAgICByZXR1cm4gbV9saW5r
VGltZUNvbnN0YW50c1tpbmRleF07Ci0gICAgfQotICAgIGNvbnN0IFZlY3RvcjxXcml0ZUJhcnJp
ZXI8VW5rbm93bj4+JiBjb25zdGFudFJlZ2lzdGVycygpIHsgcmV0dXJuIG1fY29uc3RhbnRSZWdp
c3RlcnM7IH0KLSAgICBjb25zdCBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIGNvbnN0YW50UmVnaXN0
ZXIoaW50IGluZGV4KSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW2luZGV4IC0g
Rmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXhdOyB9Ci0gICAgQUxXQVlTX0lOTElORSBib29sIGlz
Q29uc3RhbnRSZWdpc3RlckluZGV4KGludCBpbmRleCkgY29uc3QgeyByZXR1cm4gaW5kZXggPj0g
Rmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXg7IH0KLSAgICBjb25zdCBWZWN0b3I8U291cmNlQ29k
ZVJlcHJlc2VudGF0aW9uPiYgY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uKCkgeyBy
ZXR1cm4gbV9jb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb247IH0KLQotICAgIC8vIEp1
bXBzCi0gICAgc2l6ZV90IG51bWJlck9mSnVtcFRhcmdldHMoKSBjb25zdCB7IHJldHVybiBtX2p1
bXBUYXJnZXRzLnNpemUoKTsgfQotICAgIHZvaWQgYWRkSnVtcFRhcmdldCh1bnNpZ25lZCBqdW1w
VGFyZ2V0KSB7IG1fanVtcFRhcmdldHMuYXBwZW5kKGp1bXBUYXJnZXQpOyB9Ci0gICAgdW5zaWdu
ZWQganVtcFRhcmdldChpbnQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fanVtcFRhcmdldHNbaW5k
ZXhdOyB9Ci0gICAgdW5zaWduZWQgbGFzdEp1bXBUYXJnZXQoKSBjb25zdCB7IHJldHVybiBtX2p1
bXBUYXJnZXRzLmxhc3QoKTsgfQotCi0gICAgVW5saW5rZWRIYW5kbGVySW5mbyogaGFuZGxlckZv
ckJ5dGVjb2RlT2Zmc2V0KHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0LCBSZXF1aXJlZEhhbmRsZXIg
PSBSZXF1aXJlZEhhbmRsZXI6OkFueUhhbmRsZXIpOwotICAgIFVubGlua2VkSGFuZGxlckluZm8q
IGhhbmRsZXJGb3JJbmRleCh1bnNpZ25lZCwgUmVxdWlyZWRIYW5kbGVyID0gUmVxdWlyZWRIYW5k
bGVyOjpBbnlIYW5kbGVyKTsKLQotICAgIGJvb2wgaXNCdWlsdGluRnVuY3Rpb24oKSBjb25zdCB7
IHJldHVybiBtX2lzQnVpbHRpbkZ1bmN0aW9uOyB9Ci0KLSAgICBDb25zdHJ1Y3RvcktpbmQgY29u
c3RydWN0b3JLaW5kKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Q29uc3RydWN0b3JLaW5k
PihtX2NvbnN0cnVjdG9yS2luZCk7IH0KLSAgICBTdXBlckJpbmRpbmcgc3VwZXJCaW5kaW5nKCkg
Y29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8U3VwZXJCaW5kaW5nPihtX3N1cGVyQmluZGluZyk7
IH0KLSAgICBKU1BhcnNlclNjcmlwdE1vZGUgc2NyaXB0TW9kZSgpIGNvbnN0IHsgcmV0dXJuIHN0
YXRpY19jYXN0PEpTUGFyc2VyU2NyaXB0TW9kZT4obV9zY3JpcHRNb2RlKTsgfQotCi0gICAgdm9p
ZCBzaHJpbmtUb0ZpdCgpCi0gICAgewotICAgICAgICBtX2p1bXBUYXJnZXRzLnNocmlua1RvRml0
KCk7Ci0gICAgICAgIG1faWRlbnRpZmllcnMuc2hyaW5rVG9GaXQoKTsKLSAgICAgICAgbV9jb25z
dGFudFJlZ2lzdGVycy5zaHJpbmtUb0ZpdCgpOwotICAgICAgICBtX2NvbnN0YW50c1NvdXJjZUNv
ZGVSZXByZXNlbnRhdGlvbi5zaHJpbmtUb0ZpdCgpOwotICAgICAgICBtX2Z1bmN0aW9uRGVjbHMu
c2hyaW5rVG9GaXQoKTsKLSAgICAgICAgbV9mdW5jdGlvbkV4cHJzLnNocmlua1RvRml0KCk7Ci0g
ICAgICAgIG1fcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbnMuc2hyaW5rVG9GaXQoKTsKLSAgICAg
ICAgbV9leHByZXNzaW9uSW5mby5zaHJpbmtUb0ZpdCgpOwotCi0gICAgICAgIGlmIChtX3JhcmVE
YXRhKSB7Ci0gICAgICAgICAgICBtX3JhcmVEYXRhLT5tX2V4Y2VwdGlvbkhhbmRsZXJzLnNocmlu
a1RvRml0KCk7Ci0gICAgICAgICAgICBtX3JhcmVEYXRhLT5tX3JlZ2V4cHMuc2hyaW5rVG9GaXQo
KTsKLSAgICAgICAgICAgIG1fcmFyZURhdGEtPm1fY29uc3RhbnRCdWZmZXJzLnNocmlua1RvRml0
KCk7Ci0gICAgICAgICAgICBtX3JhcmVEYXRhLT5tX3N3aXRjaEp1bXBUYWJsZXMuc2hyaW5rVG9G
aXQoKTsKLSAgICAgICAgICAgIG1fcmFyZURhdGEtPm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcy5z
aHJpbmtUb0ZpdCgpOwotICAgICAgICAgICAgbV9yYXJlRGF0YS0+bV9leHByZXNzaW9uSW5mb0Zh
dFBvc2l0aW9ucy5zaHJpbmtUb0ZpdCgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgdm9pZCBz
ZXRJbnN0cnVjdGlvbnMoc3RkOjp1bmlxdWVfcHRyPFVubGlua2VkSW5zdHJ1Y3Rpb25TdHJlYW0+
KTsKLSAgICBjb25zdCBVbmxpbmtlZEluc3RydWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlvbnMoKSBj
b25zdDsKLQotICAgIGludCBudW1DYWxsZWVMb2NhbHMoKSBjb25zdCB7IHJldHVybiBtX251bUNh
bGxlZUxvY2FsczsgfQotCi0gICAgaW50IG1fbnVtVmFyczsKLSAgICBpbnQgbV9udW1DYXB0dXJl
ZFZhcnM7Ci0gICAgaW50IG1fbnVtQ2FsbGVlTG9jYWxzOwotCi0gICAgLy8gSnVtcCBUYWJsZXMK
LQotICAgIHNpemVfdCBudW1iZXJPZlN3aXRjaEp1bXBUYWJsZXMoKSBjb25zdCB7IHJldHVybiBt
X3JhcmVEYXRhID8gbV9yYXJlRGF0YS0+bV9zd2l0Y2hKdW1wVGFibGVzLnNpemUoKSA6IDA7IH0K
LSAgICBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYgYWRkU3dpdGNoSnVtcFRhYmxlKCkgeyBjcmVh
dGVSYXJlRGF0YUlmTmVjZXNzYXJ5KCk7IG1fcmFyZURhdGEtPm1fc3dpdGNoSnVtcFRhYmxlcy5h
cHBlbmQoVW5saW5rZWRTaW1wbGVKdW1wVGFibGUoKSk7IHJldHVybiBtX3JhcmVEYXRhLT5tX3N3
aXRjaEp1bXBUYWJsZXMubGFzdCgpOyB9Ci0gICAgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUmIHN3
aXRjaEp1bXBUYWJsZShpbnQgdGFibGVJbmRleCkgeyBBU1NFUlQobV9yYXJlRGF0YSk7IHJldHVy
biBtX3JhcmVEYXRhLT5tX3N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07IH0KLQotICAgIHNp
emVfdCBudW1iZXJPZlN0cmluZ1N3aXRjaEp1bXBUYWJsZXMoKSBjb25zdCB7IHJldHVybiBtX3Jh
cmVEYXRhID8gbV9yYXJlRGF0YS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzLnNpemUoKSA6IDA7
IH0KLSAgICBVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZSYgYWRkU3RyaW5nU3dpdGNoSnVtcFRhYmxl
KCkgeyBjcmVhdGVSYXJlRGF0YUlmTmVjZXNzYXJ5KCk7IG1fcmFyZURhdGEtPm1fc3RyaW5nU3dp
dGNoSnVtcFRhYmxlcy5hcHBlbmQoVW5saW5rZWRTdHJpbmdKdW1wVGFibGUoKSk7IHJldHVybiBt
X3JhcmVEYXRhLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMubGFzdCgpOyB9Ci0gICAgVW5saW5r
ZWRTdHJpbmdKdW1wVGFibGUmIHN0cmluZ1N3aXRjaEp1bXBUYWJsZShpbnQgdGFibGVJbmRleCkg
eyBBU1NFUlQobV9yYXJlRGF0YSk7IHJldHVybiBtX3JhcmVEYXRhLT5tX3N0cmluZ1N3aXRjaEp1
bXBUYWJsZXNbdGFibGVJbmRleF07IH0KLQotICAgIHVuc2lnbmVkIGFkZEZ1bmN0aW9uRGVjbChV
bmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogbikKLSAgICB7Ci0gICAgICAgIHVuc2lnbmVkIHNp
emUgPSBtX2Z1bmN0aW9uRGVjbHMuc2l6ZSgpOwotICAgICAgICBtX2Z1bmN0aW9uRGVjbHMuYXBw
ZW5kKFdyaXRlQmFycmllcjxVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZT4oKSk7Ci0gICAgICAg
IG1fZnVuY3Rpb25EZWNscy5sYXN0KCkuc2V0KCp2bSgpLCB0aGlzLCBuKTsKLSAgICAgICAgcmV0
dXJuIHNpemU7Ci0gICAgfQotICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlv
bkRlY2woaW50IGluZGV4KSB7IHJldHVybiBtX2Z1bmN0aW9uRGVjbHNbaW5kZXhdLmdldCgpOyB9
Ci0gICAgc2l6ZV90IG51bWJlck9mRnVuY3Rpb25EZWNscygpIHsgcmV0dXJuIG1fZnVuY3Rpb25E
ZWNscy5zaXplKCk7IH0KLSAgICB1bnNpZ25lZCBhZGRGdW5jdGlvbkV4cHIoVW5saW5rZWRGdW5j
dGlvbkV4ZWN1dGFibGUqIG4pCi0gICAgewotICAgICAgICB1bnNpZ25lZCBzaXplID0gbV9mdW5j
dGlvbkV4cHJzLnNpemUoKTsKLSAgICAgICAgbV9mdW5jdGlvbkV4cHJzLmFwcGVuZChXcml0ZUJh
cnJpZXI8VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU+KCkpOwotICAgICAgICBtX2Z1bmN0aW9u
RXhwcnMubGFzdCgpLnNldCgqdm0oKSwgdGhpcywgbik7Ci0gICAgICAgIHJldHVybiBzaXplOwot
ICAgIH0KLSAgICBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb25FeHByKGludCBp
bmRleCkgeyByZXR1cm4gbV9mdW5jdGlvbkV4cHJzW2luZGV4XS5nZXQoKTsgfQotICAgIHNpemVf
dCBudW1iZXJPZkZ1bmN0aW9uRXhwcnMoKSB7IHJldHVybiBtX2Z1bmN0aW9uRXhwcnMuc2l6ZSgp
OyB9Ci0KLSAgICAvLyBFeGNlcHRpb24gaGFuZGxpbmcgc3VwcG9ydAotICAgIHNpemVfdCBudW1i
ZXJPZkV4Y2VwdGlvbkhhbmRsZXJzKCkgY29uc3QgeyByZXR1cm4gbV9yYXJlRGF0YSA/IG1fcmFy
ZURhdGEtPm1fZXhjZXB0aW9uSGFuZGxlcnMuc2l6ZSgpIDogMDsgfQotICAgIHZvaWQgYWRkRXhj
ZXB0aW9uSGFuZGxlcihjb25zdCBVbmxpbmtlZEhhbmRsZXJJbmZvJiBoYW5kbGVyKSB7IGNyZWF0
ZVJhcmVEYXRhSWZOZWNlc3NhcnkoKTsgcmV0dXJuIG1fcmFyZURhdGEtPm1fZXhjZXB0aW9uSGFu
ZGxlcnMuYXBwZW5kKGhhbmRsZXIpOyB9Ci0gICAgVW5saW5rZWRIYW5kbGVySW5mbyYgZXhjZXB0
aW9uSGFuZGxlcihpbnQgaW5kZXgpIHsgQVNTRVJUKG1fcmFyZURhdGEpOyByZXR1cm4gbV9yYXJl
RGF0YS0+bV9leGNlcHRpb25IYW5kbGVyc1tpbmRleF07IH0KLQotICAgIFVubGlua2VkQXJyYXlQ
cm9maWxlIGFkZEFycmF5UHJvZmlsZSgpIHsgcmV0dXJuIG1fYXJyYXlQcm9maWxlQ291bnQrKzsg
fQotICAgIHVuc2lnbmVkIG51bWJlck9mQXJyYXlQcm9maWxlcygpIHsgcmV0dXJuIG1fYXJyYXlQ
cm9maWxlQ291bnQ7IH0KLSAgICBVbmxpbmtlZEFycmF5QWxsb2NhdGlvblByb2ZpbGUgYWRkQXJy
YXlBbGxvY2F0aW9uUHJvZmlsZSgpIHsgcmV0dXJuIG1fYXJyYXlBbGxvY2F0aW9uUHJvZmlsZUNv
dW50Kys7IH0KLSAgICB1bnNpZ25lZCBudW1iZXJPZkFycmF5QWxsb2NhdGlvblByb2ZpbGVzKCkg
eyByZXR1cm4gbV9hcnJheUFsbG9jYXRpb25Qcm9maWxlQ291bnQ7IH0KLSAgICBVbmxpbmtlZE9i
amVjdEFsbG9jYXRpb25Qcm9maWxlIGFkZE9iamVjdEFsbG9jYXRpb25Qcm9maWxlKCkgeyByZXR1
cm4gbV9vYmplY3RBbGxvY2F0aW9uUHJvZmlsZUNvdW50Kys7IH0KLSAgICB1bnNpZ25lZCBudW1i
ZXJPZk9iamVjdEFsbG9jYXRpb25Qcm9maWxlcygpIHsgcmV0dXJuIG1fb2JqZWN0QWxsb2NhdGlv
blByb2ZpbGVDb3VudDsgfQotICAgIFVubGlua2VkVmFsdWVQcm9maWxlIGFkZFZhbHVlUHJvZmls
ZSgpIHsgcmV0dXJuIG1fdmFsdWVQcm9maWxlQ291bnQrKzsgfQotICAgIHVuc2lnbmVkIG51bWJl
ck9mVmFsdWVQcm9maWxlcygpIHsgcmV0dXJuIG1fdmFsdWVQcm9maWxlQ291bnQ7IH0KLQotICAg
IFVubGlua2VkTExJbnRDYWxsTGlua0luZm8gYWRkTExJbnRDYWxsTGlua0luZm8oKSB7IHJldHVy
biBtX2xsaW50Q2FsbExpbmtJbmZvQ291bnQrKzsgfQotICAgIHVuc2lnbmVkIG51bWJlck9mTExp
bnRDYWxsTGlua0luZm9zKCkgeyByZXR1cm4gbV9sbGludENhbGxMaW5rSW5mb0NvdW50OyB9Ci0K
LSAgICBDb2RlVHlwZSBjb2RlVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29kZVR5cGU7IH0KLQot
ICAgIFZpcnR1YWxSZWdpc3RlciB0aGlzUmVnaXN0ZXIoKSBjb25zdCB7IHJldHVybiBtX3RoaXNS
ZWdpc3RlcjsgfQotICAgIFZpcnR1YWxSZWdpc3RlciBzY29wZVJlZ2lzdGVyKCkgY29uc3QgeyBy
ZXR1cm4gbV9zY29wZVJlZ2lzdGVyOyB9Ci0KLSAgICB2b2lkIGFkZFByb3BlcnR5QWNjZXNzSW5z
dHJ1Y3Rpb24odW5zaWduZWQgcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbikKLSAgICB7Ci0gICAg
ICAgIG1fcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbnMuYXBwZW5kKHByb3BlcnR5QWNjZXNzSW5z
dHJ1Y3Rpb24pOwotICAgIH0KLQotICAgIHNpemVfdCBudW1iZXJPZlByb3BlcnR5QWNjZXNzSW5z
dHJ1Y3Rpb25zKCkgY29uc3QgeyByZXR1cm4gbV9wcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9ucy5z
aXplKCk7IH0KLSAgICBjb25zdCBWZWN0b3I8dW5zaWduZWQ+JiBwcm9wZXJ0eUFjY2Vzc0luc3Ry
dWN0aW9ucygpIGNvbnN0IHsgcmV0dXJuIG1fcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbnM7IH0K
LQotICAgIHR5cGVkZWYgVmVjdG9yPEpTVmFsdWU+IENvbnN0YW50QnVmZmVyOwotCi0gICAgc2l6
ZV90IGNvbnN0YW50QnVmZmVyQ291bnQoKSB7IEFTU0VSVChtX3JhcmVEYXRhKTsgcmV0dXJuIG1f
cmFyZURhdGEtPm1fY29uc3RhbnRCdWZmZXJzLnNpemUoKTsgfQotICAgIHVuc2lnbmVkIGFkZENv
bnN0YW50QnVmZmVyKHVuc2lnbmVkIGxlbmd0aCkKLSAgICB7Ci0gICAgICAgIGNyZWF0ZVJhcmVE
YXRhSWZOZWNlc3NhcnkoKTsKLSAgICAgICAgdW5zaWduZWQgc2l6ZSA9IG1fcmFyZURhdGEtPm1f
Y29uc3RhbnRCdWZmZXJzLnNpemUoKTsKLSAgICAgICAgbV9yYXJlRGF0YS0+bV9jb25zdGFudEJ1
ZmZlcnMuYXBwZW5kKFZlY3RvcjxKU1ZhbHVlPihsZW5ndGgpKTsKLSAgICAgICAgcmV0dXJuIHNp
emU7Ci0gICAgfQotCi0gICAgY29uc3QgQ29uc3RhbnRCdWZmZXImIGNvbnN0YW50QnVmZmVyKHVu
c2lnbmVkIGluZGV4KSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKG1fcmFyZURhdGEpOwot
ICAgICAgICByZXR1cm4gbV9yYXJlRGF0YS0+bV9jb25zdGFudEJ1ZmZlcnNbaW5kZXhdOwotICAg
IH0KLQotICAgIENvbnN0YW50QnVmZmVyJiBjb25zdGFudEJ1ZmZlcih1bnNpZ25lZCBpbmRleCkK
LSAgICB7Ci0gICAgICAgIEFTU0VSVChtX3JhcmVEYXRhKTsKLSAgICAgICAgcmV0dXJuIG1fcmFy
ZURhdGEtPm1fY29uc3RhbnRCdWZmZXJzW2luZGV4XTsKLSAgICB9Ci0KLSAgICBib29sIGhhc1Jh
cmVEYXRhKCkgY29uc3QgeyByZXR1cm4gbV9yYXJlRGF0YS5nZXQoKTsgfQotCi0gICAgaW50IGxp
bmVOdW1iZXJGb3JCeXRlY29kZU9mZnNldCh1bnNpZ25lZCBieXRlY29kZU9mZnNldCk7Ci0KLSAg
ICB2b2lkIGV4cHJlc3Npb25SYW5nZUZvckJ5dGVjb2RlT2Zmc2V0KHVuc2lnbmVkIGJ5dGVjb2Rl
T2Zmc2V0LCBpbnQmIGRpdm90LAotICAgICAgICBpbnQmIHN0YXJ0T2Zmc2V0LCBpbnQmIGVuZE9m
ZnNldCwgdW5zaWduZWQmIGxpbmUsIHVuc2lnbmVkJiBjb2x1bW4pIGNvbnN0OwotCi0gICAgYm9v
bCB0eXBlUHJvZmlsZXJFeHByZXNzaW9uSW5mb0ZvckJ5dGVjb2RlT2Zmc2V0KHVuc2lnbmVkIGJ5
dGVjb2RlT2Zmc2V0LCB1bnNpZ25lZCYgc3RhcnREaXZvdCwgdW5zaWduZWQmIGVuZERpdm90KTsK
LQotICAgIHZvaWQgcmVjb3JkUGFyc2UoQ29kZUZlYXR1cmVzIGZlYXR1cmVzLCBib29sIGhhc0Nh
cHR1cmVkVmFyaWFibGVzLCB1bnNpZ25lZCBmaXJzdExpbmUsIHVuc2lnbmVkIGxpbmVDb3VudCwg
dW5zaWduZWQgZW5kQ29sdW1uKQotICAgIHsKLSAgICAgICAgbV9mZWF0dXJlcyA9IGZlYXR1cmVz
OwotICAgICAgICBtX2hhc0NhcHR1cmVkVmFyaWFibGVzID0gaGFzQ2FwdHVyZWRWYXJpYWJsZXM7
Ci0gICAgICAgIG1fZmlyc3RMaW5lID0gZmlyc3RMaW5lOwotICAgICAgICBtX2xpbmVDb3VudCA9
IGxpbmVDb3VudDsKLSAgICAgICAgLy8gRm9yIHRoZSBVbmxpbmtlZENvZGVCbG9jaywgc3RhcnRD
b2x1bW4gaXMgYWx3YXlzIDAuCi0gICAgICAgIG1fZW5kQ29sdW1uID0gZW5kQ29sdW1uOwotICAg
IH0KLQotICAgIGNvbnN0IFN0cmluZyYgc291cmNlVVJMRGlyZWN0aXZlKCkgY29uc3QgeyByZXR1
cm4gbV9zb3VyY2VVUkxEaXJlY3RpdmU7IH0KLSAgICBjb25zdCBTdHJpbmcmIHNvdXJjZU1hcHBp
bmdVUkxEaXJlY3RpdmUoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZU1hcHBpbmdVUkxEaXJlY3Rp
dmU7IH0KLSAgICB2b2lkIHNldFNvdXJjZVVSTERpcmVjdGl2ZShjb25zdCBTdHJpbmcmIHNvdXJj
ZVVSTCkgeyBtX3NvdXJjZVVSTERpcmVjdGl2ZSA9IHNvdXJjZVVSTDsgfQotICAgIHZvaWQgc2V0
U291cmNlTWFwcGluZ1VSTERpcmVjdGl2ZShjb25zdCBTdHJpbmcmIHNvdXJjZU1hcHBpbmdVUkwp
IHsgbV9zb3VyY2VNYXBwaW5nVVJMRGlyZWN0aXZlID0gc291cmNlTWFwcGluZ1VSTDsgfQotCi0g
ICAgQ29kZUZlYXR1cmVzIGNvZGVGZWF0dXJlcygpIGNvbnN0IHsgcmV0dXJuIG1fZmVhdHVyZXM7
IH0KLSAgICBib29sIGhhc0NhcHR1cmVkVmFyaWFibGVzKCkgY29uc3QgeyByZXR1cm4gbV9oYXND
YXB0dXJlZFZhcmlhYmxlczsgfQotICAgIHVuc2lnbmVkIGZpcnN0TGluZSgpIGNvbnN0IHsgcmV0
dXJuIG1fZmlyc3RMaW5lOyB9Ci0gICAgdW5zaWduZWQgbGluZUNvdW50KCkgY29uc3QgeyByZXR1
cm4gbV9saW5lQ291bnQ7IH0KLSAgICBBTFdBWVNfSU5MSU5FIHVuc2lnbmVkIHN0YXJ0Q29sdW1u
KCkgY29uc3QgeyByZXR1cm4gMDsgfQotICAgIHVuc2lnbmVkIGVuZENvbHVtbigpIGNvbnN0IHsg
cmV0dXJuIG1fZW5kQ29sdW1uOyB9Ci0KLSAgICB2b2lkIGFkZE9wUHJvZmlsZUNvbnRyb2xGbG93
Qnl0ZWNvZGVPZmZzZXQoc2l6ZV90IG9mZnNldCkKLSAgICB7Ci0gICAgICAgIGNyZWF0ZVJhcmVE
YXRhSWZOZWNlc3NhcnkoKTsKLSAgICAgICAgbV9yYXJlRGF0YS0+bV9vcFByb2ZpbGVDb250cm9s
Rmxvd0J5dGVjb2RlT2Zmc2V0cy5hcHBlbmQob2Zmc2V0KTsKLSAgICB9Ci0gICAgY29uc3QgVmVj
dG9yPHNpemVfdD4mIG9wUHJvZmlsZUNvbnRyb2xGbG93Qnl0ZWNvZGVPZmZzZXRzKCkgY29uc3QK
LSAgICB7Ci0gICAgICAgIEFTU0VSVChtX3JhcmVEYXRhKTsKLSAgICAgICAgcmV0dXJuIG1fcmFy
ZURhdGEtPm1fb3BQcm9maWxlQ29udHJvbEZsb3dCeXRlY29kZU9mZnNldHM7Ci0gICAgfQotICAg
IGJvb2wgaGFzT3BQcm9maWxlQ29udHJvbEZsb3dCeXRlY29kZU9mZnNldHMoKSBjb25zdAotICAg
IHsKLSAgICAgICAgcmV0dXJuIG1fcmFyZURhdGEgJiYgIW1fcmFyZURhdGEtPm1fb3BQcm9maWxl
Q29udHJvbEZsb3dCeXRlY29kZU9mZnNldHMuaXNFbXB0eSgpOwotICAgIH0KLQotICAgIHZvaWQg
ZHVtcEV4cHJlc3Npb25SYW5nZUluZm8oKTsgLy8gRm9yIGRlYnVnZ2luZyBwdXJwb3NlIG9ubHku
Ci0KLSAgICBib29sIHdhc0NvbXBpbGVkV2l0aERlYnVnZ2luZ09wY29kZXMoKSBjb25zdCB7IHJl
dHVybiBtX3dhc0NvbXBpbGVkV2l0aERlYnVnZ2luZ09wY29kZXM7IH0KLQotICAgIFRyaVN0YXRl
IGRpZE9wdGltaXplKCkgY29uc3QgeyByZXR1cm4gbV9kaWRPcHRpbWl6ZTsgfQotICAgIHZvaWQg
c2V0RGlkT3B0aW1pemUoVHJpU3RhdGUgZGlkT3B0aW1pemUpIHsgbV9kaWRPcHRpbWl6ZSA9IGRp
ZE9wdGltaXplOyB9Ci0KLXByb3RlY3RlZDoKLSAgICBVbmxpbmtlZENvZGVCbG9jayhWTSosIFN0
cnVjdHVyZSosIENvZGVUeXBlLCBjb25zdCBFeGVjdXRhYmxlSW5mbyYsIERlYnVnZ2VyTW9kZSk7
Ci0gICAgflVubGlua2VkQ29kZUJsb2NrKCk7Ci0KLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZN
JiB2bSkKLSAgICB7Ci0gICAgICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKLSAgICB9Ci0K
LXByaXZhdGU6Ci0gICAgZnJpZW5kIGNsYXNzIEJ5dGVjb2RlUmV3cml0ZXI7Ci0gICAgdm9pZCBh
cHBseU1vZGlmaWNhdGlvbihCeXRlY29kZVJld3JpdGVyJik7Ci0KLSAgICB2b2lkIGNyZWF0ZVJh
cmVEYXRhSWZOZWNlc3NhcnkoKQotICAgIHsKLSAgICAgICAgaWYgKCFtX3JhcmVEYXRhKQotICAg
ICAgICAgICAgbV9yYXJlRGF0YSA9IHN0ZDo6bWFrZV91bmlxdWU8UmFyZURhdGE+KCk7Ci0gICAg
fQotCi0gICAgdm9pZCBnZXRMaW5lQW5kQ29sdW1uKGNvbnN0IEV4cHJlc3Npb25SYW5nZUluZm8m
LCB1bnNpZ25lZCYgbGluZSwgdW5zaWduZWQmIGNvbHVtbikgY29uc3Q7Ci0KLSAgICBpbnQgbV9u
dW1QYXJhbWV0ZXJzOwotCi0gICAgc3RkOjp1bmlxdWVfcHRyPFVubGlua2VkSW5zdHJ1Y3Rpb25T
dHJlYW0+IG1fdW5saW5rZWRJbnN0cnVjdGlvbnM7Ci0KLSAgICBWaXJ0dWFsUmVnaXN0ZXIgbV90
aGlzUmVnaXN0ZXI7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIG1fc2NvcGVSZWdpc3RlcjsKLSAgICBW
aXJ0dWFsUmVnaXN0ZXIgbV9nbG9iYWxPYmplY3RSZWdpc3RlcjsKLQotICAgIFN0cmluZyBtX3Nv
dXJjZVVSTERpcmVjdGl2ZTsKLSAgICBTdHJpbmcgbV9zb3VyY2VNYXBwaW5nVVJMRGlyZWN0aXZl
OwotCi0gICAgdW5zaWduZWQgbV91c2VzRXZhbCA6IDE7Ci0gICAgdW5zaWduZWQgbV9pc1N0cmlj
dE1vZGUgOiAxOwotICAgIHVuc2lnbmVkIG1faXNDb25zdHJ1Y3RvciA6IDE7Ci0gICAgdW5zaWdu
ZWQgbV9oYXNDYXB0dXJlZFZhcmlhYmxlcyA6IDE7Ci0gICAgdW5zaWduZWQgbV9pc0J1aWx0aW5G
dW5jdGlvbiA6IDE7Ci0gICAgdW5zaWduZWQgbV9zdXBlckJpbmRpbmcgOiAxOwotICAgIHVuc2ln
bmVkIG1fc2NyaXB0TW9kZTogMTsKLSAgICB1bnNpZ25lZCBtX2lzQXJyb3dGdW5jdGlvbkNvbnRl
eHQgOiAxOwotICAgIHVuc2lnbmVkIG1faXNDbGFzc0NvbnRleHQgOiAxOwotICAgIHVuc2lnbmVk
IG1fd2FzQ29tcGlsZWRXaXRoRGVidWdnaW5nT3Bjb2RlcyA6IDE7Ci0gICAgdW5zaWduZWQgbV9j
b25zdHJ1Y3RvcktpbmQgOiAyOwotICAgIHVuc2lnbmVkIG1fZGVyaXZlZENvbnRleHRUeXBlIDog
MjsKLSAgICB1bnNpZ25lZCBtX2V2YWxDb250ZXh0VHlwZSA6IDI7Ci0gICAgdW5zaWduZWQgbV9m
aXJzdExpbmU7Ci0gICAgdW5zaWduZWQgbV9saW5lQ291bnQ7Ci0gICAgdW5zaWduZWQgbV9lbmRD
b2x1bW47Ci0KLSAgICBUcmlTdGF0ZSBtX2RpZE9wdGltaXplOwotICAgIFNvdXJjZVBhcnNlTW9k
ZSBtX3BhcnNlTW9kZTsKLSAgICBDb2RlRmVhdHVyZXMgbV9mZWF0dXJlczsKLSAgICBDb2RlVHlw
ZSBtX2NvZGVUeXBlOwotCi0gICAgVmVjdG9yPHVuc2lnbmVkPiBtX2p1bXBUYXJnZXRzOwotCi0g
ICAgVmVjdG9yPHVuc2lnbmVkPiBtX3Byb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25zOwotCi0gICAg
Ly8gQ29uc3RhbnQgUG9vbHMKLSAgICBWZWN0b3I8SWRlbnRpZmllcj4gbV9pZGVudGlmaWVyczsK
LSAgICBWZWN0b3I8V3JpdGVCYXJyaWVyPFVua25vd24+PiBtX2NvbnN0YW50UmVnaXN0ZXJzOwot
ICAgIFZlY3RvcjxTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24+IG1fY29uc3RhbnRzU291cmNlQ29k
ZVJlcHJlc2VudGF0aW9uOwotICAgIHR5cGVkZWYgVmVjdG9yPFdyaXRlQmFycmllcjxVbmxpbmtl
ZEZ1bmN0aW9uRXhlY3V0YWJsZT4+IEZ1bmN0aW9uRXhwcmVzc2lvblZlY3RvcjsKLSAgICBGdW5j
dGlvbkV4cHJlc3Npb25WZWN0b3IgbV9mdW5jdGlvbkRlY2xzOwotICAgIEZ1bmN0aW9uRXhwcmVz
c2lvblZlY3RvciBtX2Z1bmN0aW9uRXhwcnM7Ci0gICAgc3RkOjphcnJheTx1bnNpZ25lZCwgTGlu
a1RpbWVDb25zdGFudENvdW50PiBtX2xpbmtUaW1lQ29uc3RhbnRzOwotCi0gICAgdW5zaWduZWQg
bV9hcnJheVByb2ZpbGVDb3VudDsKLSAgICB1bnNpZ25lZCBtX2FycmF5QWxsb2NhdGlvblByb2Zp
bGVDb3VudDsKLSAgICB1bnNpZ25lZCBtX29iamVjdEFsbG9jYXRpb25Qcm9maWxlQ291bnQ7Ci0g
ICAgdW5zaWduZWQgbV92YWx1ZVByb2ZpbGVDb3VudDsKLSAgICB1bnNpZ25lZCBtX2xsaW50Q2Fs
bExpbmtJbmZvQ291bnQ7Ci0KLXB1YmxpYzoKLSAgICBzdHJ1Y3QgUmFyZURhdGEgewotICAgICAg
ICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLSAgICBwdWJsaWM6Ci0gICAgICAgIFZlY3RvcjxV
bmxpbmtlZEhhbmRsZXJJbmZvPiBtX2V4Y2VwdGlvbkhhbmRsZXJzOwotCi0gICAgICAgIC8vIFJh
cmUgQ29uc3RhbnRzCi0gICAgICAgIFZlY3RvcjxXcml0ZUJhcnJpZXI8UmVnRXhwPj4gbV9yZWdl
eHBzOwotCi0gICAgICAgIC8vIEJ1ZmZlcnMgdXNlZCBmb3IgbGFyZ2UgYXJyYXkgbGl0ZXJhbHMK
LSAgICAgICAgVmVjdG9yPENvbnN0YW50QnVmZmVyPiBtX2NvbnN0YW50QnVmZmVyczsKLQotICAg
ICAgICAvLyBKdW1wIFRhYmxlcwotICAgICAgICBWZWN0b3I8VW5saW5rZWRTaW1wbGVKdW1wVGFi
bGU+IG1fc3dpdGNoSnVtcFRhYmxlczsKLSAgICAgICAgVmVjdG9yPFVubGlua2VkU3RyaW5nSnVt
cFRhYmxlPiBtX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXM7Ci0KLSAgICAgICAgVmVjdG9yPEV4cHJl
c3Npb25SYW5nZUluZm86OkZhdFBvc2l0aW9uPiBtX2V4cHJlc3Npb25JbmZvRmF0UG9zaXRpb25z
OwotCi0gICAgICAgIHN0cnVjdCBUeXBlUHJvZmlsZXJFeHByZXNzaW9uUmFuZ2UgewotICAgICAg
ICAgICAgdW5zaWduZWQgbV9zdGFydERpdm90OwotICAgICAgICAgICAgdW5zaWduZWQgbV9lbmRE
aXZvdDsKLSAgICAgICAgfTsKLSAgICAgICAgSGFzaE1hcDx1bnNpZ25lZCwgVHlwZVByb2ZpbGVy
RXhwcmVzc2lvblJhbmdlPiBtX3R5cGVQcm9maWxlckluZm9NYXA7Ci0gICAgICAgIFZlY3Rvcjxz
aXplX3Q+IG1fb3BQcm9maWxlQ29udHJvbEZsb3dCeXRlY29kZU9mZnNldHM7Ci0gICAgfTsKLQot
cHJpdmF0ZToKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8UmFyZURhdGE+IG1fcmFyZURhdGE7Ci0gICAg
VmVjdG9yPEV4cHJlc3Npb25SYW5nZUluZm8+IG1fZXhwcmVzc2lvbkluZm87Ci0KLXByb3RlY3Rl
ZDoKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7
Ci0gICAgc3RhdGljIHNpemVfdCBlc3RpbWF0ZWRTaXplKEpTQ2VsbCopOwotCi1wdWJsaWM6Ci0g
ICAgREVDTEFSRV9JTkZPOwotfTsKLQotY2xhc3MgVW5saW5rZWRHbG9iYWxDb2RlQmxvY2sgOiBw
dWJsaWMgVW5saW5rZWRDb2RlQmxvY2sgewotcHVibGljOgotICAgIHR5cGVkZWYgVW5saW5rZWRD
b2RlQmxvY2sgQmFzZTsKLQotcHJvdGVjdGVkOgotICAgIFVubGlua2VkR2xvYmFsQ29kZUJsb2Nr
KFZNKiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIENvZGVUeXBlIGNvZGVUeXBlLCBjb25zdCBF
eGVjdXRhYmxlSW5mbyYgaW5mbywgRGVidWdnZXJNb2RlIGRlYnVnZ2VyTW9kZSkKLSAgICAgICAg
OiBCYXNlKHZtLCBzdHJ1Y3R1cmUsIGNvZGVUeXBlLCBpbmZvLCBkZWJ1Z2dlck1vZGUpCi0gICAg
ewotICAgIH0KLQotICAgIERFQ0xBUkVfSU5GTzsKLX07Ci0KIGNsYXNzIFVubGlua2VkUHJvZ3Jh
bUNvZGVCbG9jayBmaW5hbCA6IHB1YmxpYyBVbmxpbmtlZEdsb2JhbENvZGVCbG9jayB7CiBwcml2
YXRlOgogICAgIGZyaWVuZCBjbGFzcyBDb2RlQ2FjaGU7CkBAIC01NDcsMTQwICs3MSw0IEBAIHB1
YmxpYzoKICAgICBERUNMQVJFX0lORk87CiB9OwogCi1jbGFzcyBVbmxpbmtlZE1vZHVsZVByb2dy
YW1Db2RlQmxvY2sgZmluYWwgOiBwdWJsaWMgVW5saW5rZWRHbG9iYWxDb2RlQmxvY2sgewotcHJp
dmF0ZToKLSAgICBmcmllbmQgY2xhc3MgQ29kZUNhY2hlOwotICAgIHN0YXRpYyBVbmxpbmtlZE1v
ZHVsZVByb2dyYW1Db2RlQmxvY2sqIGNyZWF0ZShWTSogdm0sIGNvbnN0IEV4ZWN1dGFibGVJbmZv
JiBpbmZvLCBEZWJ1Z2dlck1vZGUgZGVidWdnZXJNb2RlKQotICAgIHsKLSAgICAgICAgVW5saW5r
ZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrKiBpbnN0YW5jZSA9IG5ldyAoTm90TnVsbCwgYWxsb2Nh
dGVDZWxsPFVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jaz4odm0tPmhlYXApKSBVbmxpbmtl
ZE1vZHVsZVByb2dyYW1Db2RlQmxvY2sodm0sIHZtLT51bmxpbmtlZE1vZHVsZVByb2dyYW1Db2Rl
QmxvY2tTdHJ1Y3R1cmUuZ2V0KCksIGluZm8sIGRlYnVnZ2VyTW9kZSk7Ci0gICAgICAgIGluc3Rh
bmNlLT5maW5pc2hDcmVhdGlvbigqdm0pOwotICAgICAgICByZXR1cm4gaW5zdGFuY2U7Ci0gICAg
fQotCi1wdWJsaWM6Ci0gICAgdHlwZWRlZiBVbmxpbmtlZEdsb2JhbENvZGVCbG9jayBCYXNlOwot
ICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVy
ZUZsYWdzIHwgU3RydWN0dXJlSXNJbW1vcnRhbDsKLQotICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3ko
SlNDZWxsKik7Ci0KLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RW
aXNpdG9yJik7Ci0KLSAgICAvLyBUaGlzIG9mZnNldCByZXByZXNlbnRzIHRoZSBjb25zdGFudCBy
ZWdpc3RlciBvZmZzZXQgdG8gdGhlIHN0b3JlZCBzeW1ib2wgdGFibGUgdGhhdCByZXByZXNlbnRz
IHRoZSBsYXlvdXQgb2YgdGhlCi0gICAgLy8gbW9kdWxlIGVudmlyb25tZW50LiBUaGlzIHN5bWJv
bCB0YWJsZSBpcyBjcmVhdGVkIGJ5IHRoZSBieXRlIGNvZGUgZ2VuZXJhdG9yIHNpbmNlIHRoZSBt
b2R1bGUgZW52aXJvbm1lbnQgaW5jbHVkZXMKLSAgICAvLyB0aGUgdG9wLW1vc3QgbGV4aWNhbCBj
YXB0dXJlZCB2YXJpYWJsZXMgaW5zaWRlIHRoZSBtb2R1bGUgY29kZS4gVGhpcyBtZWFucyB0aGF0
LCBvbmNlIHRoZSBtb2R1bGUgZW52aXJvbm1lbnQgaXMKLSAgICAvLyBhbGxvY2F0ZWQgYW5kIGlu
c3RhbnRpYXRlZCBmcm9tIHRoaXMgc3ltYm9sIHRhYmxlLCBpdCBpcyB0aXRlbHkgY291cGxlZCB3
aXRoIHRoZSBzcGVjaWZpYyB1bmxpbmtlZCBtb2R1bGUgcHJvZ3JhbQotICAgIC8vIGNvZGUgYmxv
Y2sgYW5kIHRoZSBzdG9yZWQgc3ltYm9sIHRhYmxlLiBTbyBiZWZvcmUgZXhlY3V0aW5nIHRoZSBt
b2R1bGUgY29kZSwgd2Ugc2hvdWxkIG5vdCBjbGVhciB0aGUgdW5saW5rZWQgbW9kdWxlCi0gICAg
Ly8gcHJvZ3JhbSBjb2RlIGJsb2NrIGluIHRoZSBtb2R1bGUgZXhlY3V0YWJsZS4gVGhpcyByZXF1
aXJlbWVudCBpcyBtZXQgYmVjYXVzZSB0aGUgZ2FyYmFnZSBjb2xsZWN0b3Igb25seSBjbGVhcnMK
LSAgICAvLyB1bmxpbmtlZCBjb2RlIGluICgxKSB1bm1hcmtlZCBleGVjdXRhYmxlcyBhbmQgKDIp
IGZ1bmN0aW9uIGV4ZWN1dGFibGVzLgotICAgIC8vCi0gICAgLy8gU2luY2UgdGhlIGZ1bmN0aW9u
IGNvZGUgbWF5IGJlIGV4ZWN1dGVkIHJlcGVhdGVkbHkgYW5kIHRoZSBlbnZpcm9ubWVudCBvZiBl
YWNoIGZ1bmN0aW9uIGV4ZWN1dGlvbiBpcyBkaWZmZXJlbnQsCi0gICAgLy8gdGhlIGZ1bmN0aW9u
IGNvZGUgbmVlZCB0byBhbGxvY2F0ZSBhbmQgaW5zdGFudGlhdGUgdGhlIGVudmlyb25tZW50IGlu
IHRoZSBwcm9sb2d1ZSBvZiB0aGUgZnVuY3Rpb24gY29kZS4gT24gdGhlCi0gICAgLy8gb3RoZXIg
aGFuZCwgdGhlIG1vZHVsZSBjb2RlIGlzIGV4ZWN1dGVkIG9ubHkgb25jZS4gU28gd2UgY2FuIGlu
c3RhbnRpYXRlIHRoZSBtb2R1bGUgZW52aXJvbm1lbnQgb3V0c2lkZSB0aGUgbW9kdWxlCi0gICAg
Ly8gY29kZS4gQXQgdGhhdCB0aW1lLCB3ZSBjb25zdHJ1Y3QgdGhlIG1vZHVsZSBlbnZpcm9ubWVu
dCBieSB1c2luZyB0aGUgc3ltYm9sIHRhYmxlIHRoYXQgaXMgaGVsZCBieSB0aGUgbW9kdWxlIGV4
ZWN1dGFibGUuCi0gICAgLy8gVGhlIHN5bWJvbCB0YWJsZSBoZWxkIGJ5IHRoZSBleGVjdXRhYmxl
IGlzIHRoZSBjbG9uZWQgb25lIGZyb20gb25lIGluIHRoZSB1bmxpbmtlZCBjb2RlIGJsb2NrLiBJ
bnN0YW50aWF0aW5nIHRoZSBtb2R1bGUKLSAgICAvLyBlbnZpcm9ubWVudCBiZWZvcmUgZXhlY3V0
aW5nIGFuZCBsaW5raW5nIHRoZSBtb2R1bGUgY29kZSBpcyByZXF1aXJlZCB0byBsaW5rIHRoZSBp
bXBvcnRlZCBiaW5kaW5ncyBiZXR3ZWVuIHRoZSBtb2R1bGVzLgotICAgIC8vCi0gICAgLy8gVGhl
IHVubGlua2VkIG1vZHVsZSBwcm9ncmFtIGNvZGUgYmxvY2sgb25seSBob2xkcyB0aGUgcHJlLWNs
b25lZCBzeW1ib2wgdGFibGUgaW4gaXRzIGNvbnN0YW50IHJlZ2lzdGVyIHBvb2wuIEl0IGRvZXMK
LSAgICAvLyBub3QgaG9sZCB0aGUgaW5zdGFudGlhdGVkIG1vZHVsZSBlbnZpcm9ubWVudC4gU28g
d2hpbGUgdGhlIG1vZHVsZSBlbnZpcm9ubWVudCByZXF1aXJlcyB0aGUgc3BlY2lmaWMgdW5saW5r
ZWQgbW9kdWxlCi0gICAgLy8gcHJvZ3JhbSBjb2RlIGJsb2NrLCB0aGUgdW5saW5rZWQgbW9kdWxl
IGNvZGUgYmxvY2sgY2FuIGJlIHVzZWQgZm9yIHRoZSBtb2R1bGUgZW52aXJvbm1lbnQgaW5zdGFu
dGlhdGVkIGZyb20gdGhpcwotICAgIC8vIHVubGlua2VkIGNvZGUgYmxvY2suIFRoZXJlIGlzIDE6
TiByZWxhdGlvbiBiZXR3ZWVuIHRoZSB1bmxpbmtlZCBtb2R1bGUgY29kZSBibG9jayBhbmQgdGhl
IG1vZHVsZSBlbnZpcm9ubWVudHMuIFNvIHRoZQotICAgIC8vIHVubGlua2VkIG1vZHVsZSBwcm9n
cmFtIGNvZGUgYmxvY2sgY2FuIGJlIGNhY2hlZC4KLSAgICAvLwotICAgIC8vIE9uIHRoZSBvdGhl
ciBoYW5kLCB0aGUgbGlua2VkIGNvZGUgYmxvY2sgZm9yIHRoZSBtb2R1bGUgZW52aXJvbm1lbnQg
aW5jbHVkZXMgdGhlIHJlc29sdmVkIHJlZmVyZW5jZXMgdG8gdGhlIGltcG9ydGVkCi0gICAgLy8g
YmluZGluZ3MuIFRoZSBpbXBvcnRlZCBiaW5kaW5nIHJlZmVyZW5jZXMgdGhlIG90aGVyIG1vZHVs
ZSBlbnZpcm9ubWVudCwgc28gdGhlIGxpbmtlZCBjb2RlIGJsb2NrIGlzIHRpdGx5IGNvdXBsZWQK
LSAgICAvLyB3aXRoIHRoZSBzcGVjaWZpYyBzZXQgb2YgdGhlIG1vZHVsZSBlbnZpcm9ubWVudHMu
IFRodXMsIHRoZSBsaW5rZWQgY29kZSBibG9jayBzaG91bGQgbm90IGJlIGNhY2hlZC4KLSAgICBp
bnQgbW9kdWxlRW52aXJvbm1lbnRTeW1ib2xUYWJsZUNvbnN0YW50UmVnaXN0ZXJPZmZzZXQoKSB7
IHJldHVybiBtX21vZHVsZUVudmlyb25tZW50U3ltYm9sVGFibGVDb25zdGFudFJlZ2lzdGVyT2Zm
c2V0OyB9Ci0gICAgdm9pZCBzZXRNb2R1bGVFbnZpcm9ubWVudFN5bWJvbFRhYmxlQ29uc3RhbnRS
ZWdpc3Rlck9mZnNldChpbnQgb2Zmc2V0KQotICAgIHsKLSAgICAgICAgbV9tb2R1bGVFbnZpcm9u
bWVudFN5bWJvbFRhYmxlQ29uc3RhbnRSZWdpc3Rlck9mZnNldCA9IG9mZnNldDsKLSAgICB9Ci0K
LXByaXZhdGU6Ci0gICAgVW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrKFZNKiB2bSwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IEV4ZWN1dGFibGVJbmZvJiBpbmZvLCBEZWJ1Z2dlck1v
ZGUgZGVidWdnZXJNb2RlKQotICAgICAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSwgTW9kdWxlQ29k
ZSwgaW5mbywgZGVidWdnZXJNb2RlKQotICAgIHsKLSAgICB9Ci0KLSAgICBpbnQgbV9tb2R1bGVF
bnZpcm9ubWVudFN5bWJvbFRhYmxlQ29uc3RhbnRSZWdpc3Rlck9mZnNldCB7IDAgfTsKLQotcHVi
bGljOgotICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG8pCi0gICAgewotICAgICAgICBy
ZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG8sIFR5cGVJbmZv
KFVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9ja1R5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5m
bygpKTsKLSAgICB9Ci0KLSAgICBERUNMQVJFX0lORk87Ci19OwotCi1jbGFzcyBVbmxpbmtlZEV2
YWxDb2RlQmxvY2sgZmluYWwgOiBwdWJsaWMgVW5saW5rZWRHbG9iYWxDb2RlQmxvY2sgewotcHJp
dmF0ZToKLSAgICBmcmllbmQgY2xhc3MgQ29kZUNhY2hlOwotCi0gICAgc3RhdGljIFVubGlua2Vk
RXZhbENvZGVCbG9jayogY3JlYXRlKFZNKiB2bSwgY29uc3QgRXhlY3V0YWJsZUluZm8mIGluZm8s
IERlYnVnZ2VyTW9kZSBkZWJ1Z2dlck1vZGUpCi0gICAgewotICAgICAgICBVbmxpbmtlZEV2YWxD
b2RlQmxvY2sqIGluc3RhbmNlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8VW5saW5rZWRF
dmFsQ29kZUJsb2NrPih2bS0+aGVhcCkpIFVubGlua2VkRXZhbENvZGVCbG9jayh2bSwgdm0tPnVu
bGlua2VkRXZhbENvZGVCbG9ja1N0cnVjdHVyZS5nZXQoKSwgaW5mbywgZGVidWdnZXJNb2RlKTsK
LSAgICAgICAgaW5zdGFuY2UtPmZpbmlzaENyZWF0aW9uKCp2bSk7Ci0gICAgICAgIHJldHVybiBp
bnN0YW5jZTsKLSAgICB9Ci0KLXB1YmxpYzoKLSAgICB0eXBlZGVmIFVubGlua2VkR2xvYmFsQ29k
ZUJsb2NrIEJhc2U7Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0g
QmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBTdHJ1Y3R1cmVJc0ltbW9ydGFsOwotCi0gICAgc3RhdGlj
IHZvaWQgZGVzdHJveShKU0NlbGwqKTsKLQotICAgIGNvbnN0IElkZW50aWZpZXImIHZhcmlhYmxl
KHVuc2lnbmVkIGluZGV4KSB7IHJldHVybiBtX3ZhcmlhYmxlc1tpbmRleF07IH0KLSAgICB1bnNp
Z25lZCBudW1WYXJpYWJsZXMoKSB7IHJldHVybiBtX3ZhcmlhYmxlcy5zaXplKCk7IH0KLSAgICB2
b2lkIGFkb3B0VmFyaWFibGVzKFZlY3RvcjxJZGVudGlmaWVyLCAwLCBVbnNhZmVWZWN0b3JPdmVy
Zmxvdz4mIHZhcmlhYmxlcykKLSAgICB7Ci0gICAgICAgIEFTU0VSVChtX3ZhcmlhYmxlcy5pc0Vt
cHR5KCkpOwotICAgICAgICBtX3ZhcmlhYmxlcy5zd2FwKHZhcmlhYmxlcyk7Ci0gICAgfQotCi1w
cml2YXRlOgotICAgIFVubGlua2VkRXZhbENvZGVCbG9jayhWTSogdm0sIFN0cnVjdHVyZSogc3Ry
dWN0dXJlLCBjb25zdCBFeGVjdXRhYmxlSW5mbyYgaW5mbywgRGVidWdnZXJNb2RlIGRlYnVnZ2Vy
TW9kZSkKLSAgICAgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUsIEV2YWxDb2RlLCBpbmZvLCBkZWJ1
Z2dlck1vZGUpCi0gICAgewotICAgIH0KLQotICAgIFZlY3RvcjxJZGVudGlmaWVyLCAwLCBVbnNh
ZmVWZWN0b3JPdmVyZmxvdz4gbV92YXJpYWJsZXM7Ci0KLXB1YmxpYzoKLSAgICBzdGF0aWMgU3Ry
dWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBKU1ZhbHVlIHByb3RvKQotICAgIHsKLSAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3Jl
YXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvLCBUeXBlSW5mbyhVbmxpbmtlZEV2YWxDb2RlQmxv
Y2tUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Ci0gICAgfQotCi0gICAgREVDTEFSRV9J
TkZPOwotfTsKLQotY2xhc3MgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayBmaW5hbCA6IHB1Ymxp
YyBVbmxpbmtlZENvZGVCbG9jayB7Ci1wdWJsaWM6Ci0gICAgdHlwZWRlZiBVbmxpbmtlZENvZGVC
bG9jayBCYXNlOwotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJh
c2U6OlN0cnVjdHVyZUZsYWdzIHwgU3RydWN0dXJlSXNJbW1vcnRhbDsKLQotICAgIHN0YXRpYyBV
bmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKiBjcmVhdGUoVk0qIHZtLCBDb2RlVHlwZSBjb2RlVHlw
ZSwgY29uc3QgRXhlY3V0YWJsZUluZm8mIGluZm8sIERlYnVnZ2VyTW9kZSBkZWJ1Z2dlck1vZGUp
Ci0gICAgewotICAgICAgICBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKiBpbnN0YW5jZSA9IG5l
dyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2s+KHZtLT5o
ZWFwKSkgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayh2bSwgdm0tPnVubGlua2VkRnVuY3Rpb25D
b2RlQmxvY2tTdHJ1Y3R1cmUuZ2V0KCksIGNvZGVUeXBlLCBpbmZvLCBkZWJ1Z2dlck1vZGUpOwot
ICAgICAgICBpbnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24oKnZtKTsKLSAgICAgICAgcmV0dXJuIGlu
c3RhbmNlOwotICAgIH0KLQotICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7Ci0KLXBy
aXZhdGU6Ci0gICAgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayhWTSogdm0sIFN0cnVjdHVyZSog
c3RydWN0dXJlLCBDb2RlVHlwZSBjb2RlVHlwZSwgY29uc3QgRXhlY3V0YWJsZUluZm8mIGluZm8s
IERlYnVnZ2VyTW9kZSBkZWJ1Z2dlck1vZGUpCi0gICAgICAgIDogQmFzZSh2bSwgc3RydWN0dXJl
LCBjb2RlVHlwZSwgaW5mbywgZGVidWdnZXJNb2RlKQotICAgIHsKLSAgICB9Ci0gICAgCi1wdWJs
aWM6Ci0gICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90bykKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90bywgVHlwZUluZm8o
VW5saW5rZWRGdW5jdGlvbkNvZGVCbG9ja1R5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsK
LSAgICB9Ci0KLSAgICBERUNMQVJFX0lORk87Ci19OwotCiB9CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNw
cAkocmV2aXNpb24gMjA4MzA4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxl
ci9CeXRlY29kZUdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDE3ICszNywyMSBA
QAogI2luY2x1ZGUgIkJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5oIgogI2luY2x1ZGUgIkRlZmlu
ZVByb3BlcnR5QXR0cmlidXRlcy5oIgogI2luY2x1ZGUgIkludGVycHJldGVyLmgiCisjaW5jbHVk
ZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIKICNpbmNsdWRlICJKU0dl
bmVyYXRvckZ1bmN0aW9uLmgiCiAjaW5jbHVkZSAiSlNMZXhpY2FsRW52aXJvbm1lbnQuaCIKICNp
bmNsdWRlICJKU1RlbXBsYXRlUmVnaXN0cnlLZXkuaCIKICNpbmNsdWRlICJMb3dMZXZlbEludGVy
cHJldGVyLmgiCi0jaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIk9wdGlvbnMuaCIK
ICNpbmNsdWRlICJTdGFja0FsaWdubWVudC5oIgogI2luY2x1ZGUgIlN0cm9uZ0lubGluZXMuaCIK
ICNpbmNsdWRlICJVbmxpbmtlZENvZGVCbG9jay5oIgorI2luY2x1ZGUgIlVubGlua2VkRXZhbENv
ZGVCbG9jay5oIgorI2luY2x1ZGUgIlVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2suaCIKICNpbmNs
dWRlICJVbmxpbmtlZEluc3RydWN0aW9uU3RyZWFtLmgiCisjaW5jbHVkZSAiVW5saW5rZWRNb2R1
bGVQcm9ncmFtQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAiVW5saW5rZWRQcm9ncmFtQ29kZUJsb2Nr
LmgiCiAjaW5jbHVkZSA8d3RmL0NvbW1hUHJpbnRlci5oPgogI2luY2x1ZGUgPHd0Zi9TbWFsbFB0
clNldC5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0NvZGVDYWNoZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29kZUNhY2hlLmNwcAkocmV2aXNpb24gMjA4MzA4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29kZUNhY2hlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzEsNiArMzEsOSBAQAogI2luY2x1ZGUgIlBhcnNlci5oIgogI2luY2x1ZGUgIlN0cm9u
Z0lubGluZXMuaCIKICNpbmNsdWRlICJVbmxpbmtlZENvZGVCbG9jay5oIgorI2luY2x1ZGUgIlVu
bGlua2VkRXZhbENvZGVCbG9jay5oIgorI2luY2x1ZGUgIlVubGlua2VkTW9kdWxlUHJvZ3JhbUNv
ZGVCbG9jay5oIgorI2luY2x1ZGUgIlVubGlua2VkUHJvZ3JhbUNvZGVCbG9jay5oIgogCiBuYW1l
c3BhY2UgSlNDIHsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXZhbEV4
ZWN1dGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9F
dmFsRXhlY3V0YWJsZS5oCShyZXZpc2lvbiAyMDgzMDgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9FdmFsRXhlY3V0YWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3
IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGFibGUuaCIKKyNpbmNs
dWRlICJVbmxpbmtlZEV2YWxDb2RlQmxvY2suaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlUmVjb3JkLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZVJlY29yZC5jcHAJ
KHJldmlzaW9uIDIwODMwOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9k
dWxlUmVjb3JkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUg
IkpTTWFwLmgiCiAjaW5jbHVkZSAiSlNNb2R1bGVFbnZpcm9ubWVudC5oIgogI2luY2x1ZGUgIkpT
TW9kdWxlTmFtZXNwYWNlT2JqZWN0LmgiCisjaW5jbHVkZSAiVW5saW5rZWRNb2R1bGVQcm9ncmFt
Q29kZUJsb2NrLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCg==
</data>
<flag name="review"
          id="316556"
          type_id="1"
          status="+"
          setter="saam"
    />
          </attachment>
      

    </bug>

</bugzilla>