<?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>216468</bug_id>
          
          <creation_ts>2020-09-13 16:50:37 -0700</creation_ts>
          <short_desc>[WebIDL] Move synthetic operation creation from IDLParser to CodeGeneratorJS</short_desc>
          <delta_ts>2020-09-14 16:00:26 -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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sam Weinig">sam</reporter>
          <assigned_to name="Sam Weinig">sam</assigned_to>
          <cc>cdumez</cc>
    
    <cc>darin</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1688154</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-09-13 16:50:37 -0700</bug_when>
    <thetext>[WebIDL] Move synthetic operation creation from IDLParser to CodeGeneratorJS</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1688160</commentid>
    <comment_count>1</comment_count>
      <attachid>408667</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-09-13 17:01:30 -0700</bug_when>
    <thetext>Created attachment 408667
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1688161</commentid>
    <comment_count>2</comment_count>
      <attachid>408668</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-09-13 17:27:26 -0700</bug_when>
    <thetext>Created attachment 408668
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1688420</commentid>
    <comment_count>3</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-09-14 14:31:47 -0700</bug_when>
    <thetext>Should be ready for review now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1688427</commentid>
    <comment_count>4</comment_count>
      <attachid>408748</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-09-14 14:55:31 -0700</bug_when>
    <thetext>Created attachment 408748
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1688439</commentid>
    <comment_count>5</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-09-14 15:30:13 -0700</bug_when>
    <thetext>Committed r267051: &lt;https://trac.webkit.org/changeset/267051&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 408748.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1688440</commentid>
    <comment_count>6</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-09-14 15:31:22 -0700</bug_when>
    <thetext>&lt;rdar://problem/68882304&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>408667</attachid>
            <date>2020-09-13 17:01:30 -0700</date>
            <delta_ts>2020-09-13 17:27:25 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-216468-20200913170129.patch</filename>
            <type>text/plain</type>
            <size>123396</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2NzAwNikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM4IEBACisyMDIwLTA5LTEzICBTYW0gV2Vp
bmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBbV2ViSURMXSBNb3ZlIHN5bnRoZXRp
YyBvcGVyYXRpb24gY3JlYXRpb24gZnJvbSBJRExQYXJzZXIgdG8gQ29kZUdlbmVyYXRvckpTCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTY0NjgKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRyZXNzIEZJ
WE1FcyBpbiBJRExQYXJzZXIgYnkgbW92aW5nIHN5bnRoZXRpYyBvcGVyYXRpb24gY3JlYXRpb24g
b3V0IG9mIElETFBhcnNlcgorICAgICAgICBhbmQgaW50byBDb2RlR2VuZXJhdG9ySlMuIFJlcGxh
Y2UgdXNlIG9mIGlzSXRlcmFibGUvaXNNYXBMaWtlL2lzU2V0TGlrZSBwcmVkaWNhdGVzCisgICAg
ICAgIG9uIElETE9wZXJhdGlvbiBhbmQgSURMQXR0cmlidXRlIHdpdGggZXh0ZW5kZWQgYXR0cmli
dXRlcywgRnJvbUl0ZXJhYmxlLCAKKyAgICAgICAgRm9yd2FyZFRvTWFwTGlrZSBhbmQgRm9yd2Fy
ZFRvU2V0TGlrZS4KKworICAgICAgICBXaGlsZSB0aGlzIGNoYW5nZSBjb21wbGV0ZWx5IHJlbW92
ZXMgYWxsIG5vdGlvbiBvZiBvcGVyYXRpb25zL2F0dHJpYnV0ZXMgZnJvbSAKKyAgICAgICAgSURM
TWFwTGlrZSBhbmQgSURMU2V0TGlrZSwgSURMSXRlcmFibGUgcmV0YWlucyBhbiBvcGVyYXRpb25z
IGFycmF5LCBub3cgb25seQorICAgICAgICB1c2VkIGJ5IENvZGVHZW5lcmF0b3JKUywgdG8gYXZv
aWQgYSBsYXJnZXIgcmVmYWN0b3Jpbmcgb2YgdGhlIGNvZGUgZ2VuZXJhdGlvbi4KKyAgICAgICAg
RXZlbnR1YWxseSwgaXQgd291bGQgYmUgZ29vZCB0byBzdG9wIHVzaW5nIEFTVCBsZXZlbCBvcGVy
YXRpb25zIGFuZCBhdHRyaWJ1dGVzCisgICAgICAgIHRvIG1vZGVsIHRoZXNlIHN5bnRoZXRpYyBv
cGVyYXRpb25zLCBhbmQgaW5zdGVhZCBoYXZlIHRoZSBjb2RlIGdlbmVyYXRpb24KKyAgICAgICAg
bWFpbnRhaW4gYSBtb2RlbCB0aGF0IG1vcmUgY2xvc2VseSByZXNlbWJsZXMgdGhlIEVDTUFTY3Jp
cHQgb3V0cHV0IGRpcmVjdGx5LgorCisgICAgICAgIFdoaWxlIGhlcmUsIGFsc28gZml4IHRoZSBp
c3N1ZSB0aGF0IG1hcGxpa2UgYW5kIHNldGxpa2Ugd2VyZSBhbHdheXMgb3ZlcnJpZGluZworICAg
ICAgICBzZXQvY2xlYXIvZGVsZXRlIGFuZCBhZGQvY2xlYXIvZGVsZXRlIChyZXNwZWN0aXZlbHkp
IHdoZXJlIGFzIFdlYklETCBzYXlzIHRoZXkKKyAgICAgICAgc2hvdWxkIG9ubHkgYWRkIHRob3Nl
IGlmIHRoZSBpbnRlcmZhY2UgZG9lc24ndCBhbHJlYWR5IGhhdmUgbWVtYmVycyB3aXRoIHRob3Nl
CisgICAgICAgIG5hbWVzLiBBZGRzIG5ldyB0ZXN0cyBmb3IgdGhpcyBiZWhhdmlvci4KKworICAg
ICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtOgorICAgICAgICAqIGJp
bmRpbmdzL3NjcmlwdHMvSURMUGFyc2VyLnBtOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMv
dGVzdC9CaW5kaW5nVGVzdEdsb2JhbENvbnN0cnVjdG9ycy5pZGw6CisgICAgICAgICogYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TWFw
TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucy5oOiBBZGRlZC4KKyAgICAgICAgKiBiaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucy5j
cHA6IEFkZGVkLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXRM
aWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zLmg6IEFkZGVkLgorICAgICAgICAqIGJpbmRpbmdz
L3NjcmlwdHMvdGVzdC9TdXBwbGVtZW50YWxEZXBlbmRlbmNpZXMuZGVwOgorICAgICAgICAqIGJp
bmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucy5p
ZGw6IEFkZGVkLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0U2V0TGlrZVdp
dGhPdmVycmlkZGVuT3BlcmF0aW9ucy5pZGw6IEFkZGVkLgorCiAyMDIwLTA5LTEzICBTYW0gV2Vp
bmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KIAogICAgICAgICBGSVhNRSBpbiBNZWRpYURldmljZXMu
aWRsIGlzIGluY29ycmVjdApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9D
b2RlR2VuZXJhdG9ySlMucG0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0JKHJldmlzaW9uIDI2NzAwNikKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCSh3b3JraW5nIGNvcHkp
CkBAIC0xNjMsNiArMTYzLDkgQEAgc3ViIEdlbmVyYXRlSW50ZXJmYWNlCiAKICAgICAkY29kZUdl
bmVyYXRvci0+TGlua092ZXJsb2FkZWRPcGVyYXRpb25zKCRpbnRlcmZhY2UpOwogCisgICAgQWRk
SXRlcmFibGVPcGVyYXRpb25JZk5lZWRlZCgkaW50ZXJmYWNlKTsKKyAgICBBZGRNYXBMaWtlQXR0
cmlidXRlc0FuZE9wZXJhdGlvbklmTmVlZGVkKCRpbnRlcmZhY2UpOworICAgIEFkZFNldExpa2VB
dHRyaWJ1dGVzQW5kT3BlcmF0aW9uSWZOZWVkZWQoJGludGVyZmFjZSk7CiAgICAgQWRkU3RyaW5n
aWZpZXJPcGVyYXRpb25JZk5lZWRlZCgkaW50ZXJmYWNlKTsKICAgICBBZGRMZWdhY3lDYWxsZXJP
cGVyYXRpb25JZk5lZWRlZCgkaW50ZXJmYWNlKTsKIApAQCAtMTc1LDYgKzE3OCwyNzMgQEAgc3Vi
IEdlbmVyYXRlSW50ZXJmYWNlCiAgICAgfQogfQogCitzdWIgQWRkSXRlcmFibGVPcGVyYXRpb25J
Zk5lZWRlZAoreworICAgIG15ICRpbnRlcmZhY2UgPSBzaGlmdDsKKworICAgIHJldHVybiB1bmxl
c3MgJGludGVyZmFjZS0+aXRlcmFibGU7CisKKyAgICAkaW50ZXJmYWNlLT5pdGVyYWJsZS0+ZXh0
ZW5kZWRBdHRyaWJ1dGVzLT57RnJvbUl0ZXJhYmxlfSA9IDE7CisKKyAgICBteSAkc3ltYm9sSXRl
cmF0b3JPcGVyYXRpb24gPSBJRExPcGVyYXRpb24tPm5ldygpOworICAgICRzeW1ib2xJdGVyYXRv
ck9wZXJhdGlvbi0+bmFtZSgiW1N5bWJvbC5JdGVyYXRvcl0iKTsKKyAgICBJRExQYXJzZXI6OmNv
cHlFeHRlbmRlZEF0dHJpYnV0ZXMoJHN5bWJvbEl0ZXJhdG9yT3BlcmF0aW9uLT5leHRlbmRlZEF0
dHJpYnV0ZXMsICRpbnRlcmZhY2UtPml0ZXJhYmxlLT5leHRlbmRlZEF0dHJpYnV0ZXMpOworICAg
IHB1c2goQHskaW50ZXJmYWNlLT5pdGVyYWJsZS0+b3BlcmF0aW9uc30sICRzeW1ib2xJdGVyYXRv
ck9wZXJhdGlvbik7CisgICAgcHVzaChAeyRpbnRlcmZhY2UtPm9wZXJhdGlvbnN9LCAkc3ltYm9s
SXRlcmF0b3JPcGVyYXRpb24pIGlmIElzS2V5VmFsdWVJdGVyYWJsZUludGVyZmFjZSgkaW50ZXJm
YWNlKTsKKworICAgIG15ICRlbnRyaWVzT3BlcmF0aW9uID0gSURMT3BlcmF0aW9uLT5uZXcoKTsK
KyAgICAkZW50cmllc09wZXJhdGlvbi0+bmFtZSgiZW50cmllcyIpOworICAgIElETFBhcnNlcjo6
Y29weUV4dGVuZGVkQXR0cmlidXRlcygkZW50cmllc09wZXJhdGlvbi0+ZXh0ZW5kZWRBdHRyaWJ1
dGVzLCAkaW50ZXJmYWNlLT5pdGVyYWJsZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzKTsKKyAgICBwdXNo
KEB7JGludGVyZmFjZS0+aXRlcmFibGUtPm9wZXJhdGlvbnN9LCAkZW50cmllc09wZXJhdGlvbik7
CisgICAgcHVzaChAeyRpbnRlcmZhY2UtPm9wZXJhdGlvbnN9LCAkZW50cmllc09wZXJhdGlvbikg
aWYgSXNLZXlWYWx1ZUl0ZXJhYmxlSW50ZXJmYWNlKCRpbnRlcmZhY2UpOworCisgICAgbXkgJGtl
eXNPcGVyYXRpb24gPSBJRExPcGVyYXRpb24tPm5ldygpOworICAgICRrZXlzT3BlcmF0aW9uLT5u
YW1lKCJrZXlzIik7CisgICAgSURMUGFyc2VyOjpjb3B5RXh0ZW5kZWRBdHRyaWJ1dGVzKCRrZXlz
T3BlcmF0aW9uLT5leHRlbmRlZEF0dHJpYnV0ZXMsICRpbnRlcmZhY2UtPml0ZXJhYmxlLT5leHRl
bmRlZEF0dHJpYnV0ZXMpOworICAgIHB1c2goQHskaW50ZXJmYWNlLT5pdGVyYWJsZS0+b3BlcmF0
aW9uc30sICRrZXlzT3BlcmF0aW9uKTsKKyAgICBwdXNoKEB7JGludGVyZmFjZS0+b3BlcmF0aW9u
c30sICRrZXlzT3BlcmF0aW9uKSBpZiBJc0tleVZhbHVlSXRlcmFibGVJbnRlcmZhY2UoJGludGVy
ZmFjZSk7CisKKyAgICBteSAkdmFsdWVzT3BlcmF0aW9uID0gSURMT3BlcmF0aW9uLT5uZXcoKTsK
KyAgICAkdmFsdWVzT3BlcmF0aW9uLT5uYW1lKCJ2YWx1ZXMiKTsKKyAgICBJRExQYXJzZXI6OmNv
cHlFeHRlbmRlZEF0dHJpYnV0ZXMoJHZhbHVlc09wZXJhdGlvbi0+ZXh0ZW5kZWRBdHRyaWJ1dGVz
LCAkaW50ZXJmYWNlLT5pdGVyYWJsZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzKTsKKyAgICBwdXNoKEB7
JGludGVyZmFjZS0+aXRlcmFibGUtPm9wZXJhdGlvbnN9LCAkdmFsdWVzT3BlcmF0aW9uKTsKKyAg
ICBwdXNoKEB7JGludGVyZmFjZS0+b3BlcmF0aW9uc30sICR2YWx1ZXNPcGVyYXRpb24pIGlmIElz
S2V5VmFsdWVJdGVyYWJsZUludGVyZmFjZSgkaW50ZXJmYWNlKTsKKworICAgIG15ICRmb3JFYWNo
T3BlcmF0aW9uID0gSURMT3BlcmF0aW9uLT5uZXcoKTsKKyAgICAkZm9yRWFjaE9wZXJhdGlvbi0+
bmFtZSgiZm9yRWFjaCIpOworICAgIG15ICRmb3JFYWNoQXJndW1lbnQgPSBJRExBcmd1bWVudC0+
bmV3KCk7CisgICAgJGZvckVhY2hBcmd1bWVudC0+bmFtZSgiY2FsbGJhY2siKTsKKyAgICAkZm9y
RWFjaEFyZ3VtZW50LT50eXBlKElETFBhcnNlcjo6bWFrZVNpbXBsZVR5cGUoImFueSIpKTsKKyAg
ICBwdXNoKEB7JGZvckVhY2hPcGVyYXRpb24tPmFyZ3VtZW50c30sICgkZm9yRWFjaEFyZ3VtZW50
KSk7CisgICAgSURMUGFyc2VyOjpjb3B5RXh0ZW5kZWRBdHRyaWJ1dGVzKCRmb3JFYWNoT3BlcmF0
aW9uLT5leHRlbmRlZEF0dHJpYnV0ZXMsICRpbnRlcmZhY2UtPml0ZXJhYmxlLT5leHRlbmRlZEF0
dHJpYnV0ZXMpOworICAgIHB1c2goQHskaW50ZXJmYWNlLT5pdGVyYWJsZS0+b3BlcmF0aW9uc30s
ICRmb3JFYWNoT3BlcmF0aW9uKTsKKyAgICBwdXNoKEB7JGludGVyZmFjZS0+b3BlcmF0aW9uc30s
ICRmb3JFYWNoT3BlcmF0aW9uKSBpZiBJc0tleVZhbHVlSXRlcmFibGVJbnRlcmZhY2UoJGludGVy
ZmFjZSk7Cit9CisKK3N1YiBBZGRNYXBMaWtlQXR0cmlidXRlc0FuZE9wZXJhdGlvbklmTmVlZGVk
Cit7CisgICAgbXkgJGludGVyZmFjZSA9IHNoaWZ0OworCisgICAgcmV0dXJuIHVubGVzcyAkaW50
ZXJmYWNlLT5tYXBMaWtlOworCisgICAgJGludGVyZmFjZS0+bWFwTGlrZS0+ZXh0ZW5kZWRBdHRy
aWJ1dGVzLT57Rm9yd2FyZFRvTWFwTGlrZX0gPSAxOworCisgICAgIyBodHRwczovL2hleWNhbS5n
aXRodWIuaW8vd2ViaWRsLyNlcy1tYXAtc2l6ZQorICAgIG15ICRzaXplQXR0cmlidXRlID0gSURM
QXR0cmlidXRlLT5uZXcoKTsKKyAgICAkc2l6ZUF0dHJpYnV0ZS0+bmFtZSgic2l6ZSIpOworICAg
ICRzaXplQXR0cmlidXRlLT5pc1JlYWRPbmx5KDEpOworICAgICRzaXplQXR0cmlidXRlLT50eXBl
KElETFBhcnNlcjo6bWFrZVNpbXBsZVR5cGUoImFueSIpKTsKKyAgICBJRExQYXJzZXI6OmNvcHlF
eHRlbmRlZEF0dHJpYnV0ZXMoJHNpemVBdHRyaWJ1dGUtPmV4dGVuZGVkQXR0cmlidXRlcywgJGlu
dGVyZmFjZS0+bWFwTGlrZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzKTsKKyAgICAkc2l6ZUF0dHJpYnV0
ZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Tm90RW51bWVyYWJsZX0gPSAxOworICAgIHB1c2goQHsk
aW50ZXJmYWNlLT5hdHRyaWJ1dGVzfSwgJHNpemVBdHRyaWJ1dGUpOworCisgICAgIyBodHRwczov
L2hleWNhbS5naXRodWIuaW8vd2ViaWRsLyNlcy1tYXAtZ2V0LWhhcworICAgIG15ICRnZXRPcGVy
YXRpb24gPSBJRExPcGVyYXRpb24tPm5ldygpOworICAgICRnZXRPcGVyYXRpb24tPm5hbWUoImdl
dCIpOworICAgIG15ICRnZXRBcmd1bWVudCA9IElETEFyZ3VtZW50LT5uZXcoKTsKKyAgICAkZ2V0
QXJndW1lbnQtPm5hbWUoImtleSIpOworICAgICRnZXRBcmd1bWVudC0+dHlwZShJRExQYXJzZXI6
OmNsb25lVHlwZSgkaW50ZXJmYWNlLT5tYXBMaWtlLT5rZXlUeXBlKSk7CisgICAgcHVzaChAeyRn
ZXRPcGVyYXRpb24tPmFyZ3VtZW50c30sICgkZ2V0QXJndW1lbnQpKTsKKyAgICAkZ2V0T3BlcmF0
aW9uLT50eXBlKElETFBhcnNlcjo6bWFrZVNpbXBsZVR5cGUoImFueSIpKTsKKyAgICBJRExQYXJz
ZXI6OmNvcHlFeHRlbmRlZEF0dHJpYnV0ZXMoJGdldE9wZXJhdGlvbi0+ZXh0ZW5kZWRBdHRyaWJ1
dGVzLCAkaW50ZXJmYWNlLT5tYXBMaWtlLT5leHRlbmRlZEF0dHJpYnV0ZXMpOworICAgICRnZXRP
cGVyYXRpb24tPmV4dGVuZGVkQXR0cmlidXRlcy0+e05vdEVudW1lcmFibGV9ID0gMTsKKyAgICBw
dXNoKEB7JGludGVyZmFjZS0+b3BlcmF0aW9uc30sICRnZXRPcGVyYXRpb24pOworCisgICAgbXkg
JGhhc09wZXJhdGlvbiA9IElETE9wZXJhdGlvbi0+bmV3KCk7CisgICAgJGhhc09wZXJhdGlvbi0+
bmFtZSgiaGFzIik7CisgICAgbXkgJGhhc0FyZ3VtZW50ID0gSURMQXJndW1lbnQtPm5ldygpOwor
ICAgICRoYXNBcmd1bWVudC0+bmFtZSgia2V5Iik7CisgICAgJGhhc0FyZ3VtZW50LT50eXBlKElE
TFBhcnNlcjo6Y2xvbmVUeXBlKCRpbnRlcmZhY2UtPm1hcExpa2UtPmtleVR5cGUpKTsKKyAgICBw
dXNoKEB7JGhhc09wZXJhdGlvbi0+YXJndW1lbnRzfSwgKCRoYXNBcmd1bWVudCkpOworICAgICRo
YXNPcGVyYXRpb24tPnR5cGUoSURMUGFyc2VyOjptYWtlU2ltcGxlVHlwZSgiYW55IikpOworICAg
IElETFBhcnNlcjo6Y29weUV4dGVuZGVkQXR0cmlidXRlcygkaGFzT3BlcmF0aW9uLT5leHRlbmRl
ZEF0dHJpYnV0ZXMsICRpbnRlcmZhY2UtPm1hcExpa2UtPmV4dGVuZGVkQXR0cmlidXRlcyk7Cisg
ICAgJGhhc09wZXJhdGlvbi0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Tm90RW51bWVyYWJsZX0gPSAx
OworICAgIHB1c2goQHskaW50ZXJmYWNlLT5vcGVyYXRpb25zfSwgJGhhc09wZXJhdGlvbik7CisK
KyAgICAjIGh0dHBzOi8vaGV5Y2FtLmdpdGh1Yi5pby93ZWJpZGwvI2VzLW1hcC1lbnRyaWVzCisg
ICAgbXkgJGVudHJpZXNPcGVyYXRpb24gPSBJRExPcGVyYXRpb24tPm5ldygpOworICAgICRlbnRy
aWVzT3BlcmF0aW9uLT5uYW1lKCJlbnRyaWVzIik7CisgICAgJGVudHJpZXNPcGVyYXRpb24tPnR5
cGUoSURMUGFyc2VyOjptYWtlU2ltcGxlVHlwZSgiYW55IikpOworICAgIElETFBhcnNlcjo6Y29w
eUV4dGVuZGVkQXR0cmlidXRlcygkZW50cmllc09wZXJhdGlvbi0+ZXh0ZW5kZWRBdHRyaWJ1dGVz
LCAkaW50ZXJmYWNlLT5tYXBMaWtlLT5leHRlbmRlZEF0dHJpYnV0ZXMpOworICAgICRlbnRyaWVz
T3BlcmF0aW9uLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntOb3RFbnVtZXJhYmxlfSA9IDE7CisgICAg
cHVzaChAeyRpbnRlcmZhY2UtPm9wZXJhdGlvbnN9LCAkZW50cmllc09wZXJhdGlvbik7CisKKyAg
ICAjIGh0dHBzOi8vaGV5Y2FtLmdpdGh1Yi5pby93ZWJpZGwvI2VzLW1hcC1rZXlzLXZhbHVlcwor
ICAgIG15ICRrZXlzT3BlcmF0aW9uID0gSURMT3BlcmF0aW9uLT5uZXcoKTsKKyAgICAka2V5c09w
ZXJhdGlvbi0+bmFtZSgia2V5cyIpOworICAgICRrZXlzT3BlcmF0aW9uLT50eXBlKElETFBhcnNl
cjo6bWFrZVNpbXBsZVR5cGUoImFueSIpKTsKKyAgICBJRExQYXJzZXI6OmNvcHlFeHRlbmRlZEF0
dHJpYnV0ZXMoJGtleXNPcGVyYXRpb24tPmV4dGVuZGVkQXR0cmlidXRlcywgJGludGVyZmFjZS0+
bWFwTGlrZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzKTsKKyAgICAka2V5c09wZXJhdGlvbi0+ZXh0ZW5k
ZWRBdHRyaWJ1dGVzLT57Tm90RW51bWVyYWJsZX0gPSAxOworICAgIHB1c2goQHskaW50ZXJmYWNl
LT5vcGVyYXRpb25zfSwgJGtleXNPcGVyYXRpb24pOworCisgICAgbXkgJHZhbHVlc09wZXJhdGlv
biA9IElETE9wZXJhdGlvbi0+bmV3KCk7CisgICAgJHZhbHVlc09wZXJhdGlvbi0+bmFtZSgidmFs
dWVzIik7CisgICAgJHZhbHVlc09wZXJhdGlvbi0+dHlwZShJRExQYXJzZXI6Om1ha2VTaW1wbGVU
eXBlKCJhbnkiKSk7CisgICAgSURMUGFyc2VyOjpjb3B5RXh0ZW5kZWRBdHRyaWJ1dGVzKCR2YWx1
ZXNPcGVyYXRpb24tPmV4dGVuZGVkQXR0cmlidXRlcywgJGludGVyZmFjZS0+bWFwTGlrZS0+ZXh0
ZW5kZWRBdHRyaWJ1dGVzKTsKKyAgICAkdmFsdWVzT3BlcmF0aW9uLT5leHRlbmRlZEF0dHJpYnV0
ZXMtPntOb3RFbnVtZXJhYmxlfSA9IDE7CisgICAgcHVzaChAeyRpbnRlcmZhY2UtPm9wZXJhdGlv
bnN9LCAkdmFsdWVzT3BlcmF0aW9uKTsKKworICAgICMgaHR0cHM6Ly9oZXljYW0uZ2l0aHViLmlv
L3dlYmlkbC8jZXMtZm9yRWFjaAorICAgIG15ICRmb3JFYWNoT3BlcmF0aW9uID0gSURMT3BlcmF0
aW9uLT5uZXcoKTsKKyAgICAkZm9yRWFjaE9wZXJhdGlvbi0+bmFtZSgiZm9yRWFjaCIpOworICAg
ICRmb3JFYWNoT3BlcmF0aW9uLT50eXBlKElETFBhcnNlcjo6bWFrZVNpbXBsZVR5cGUoImFueSIp
KTsKKyAgICBteSAkZm9yRWFjaEFyZ3VtZW50ID0gSURMQXJndW1lbnQtPm5ldygpOworICAgICRm
b3JFYWNoQXJndW1lbnQtPm5hbWUoImNhbGxiYWNrIik7CisgICAgJGZvckVhY2hBcmd1bWVudC0+
dHlwZShJRExQYXJzZXI6Om1ha2VTaW1wbGVUeXBlKCJhbnkiKSk7CisgICAgcHVzaChAeyRmb3JF
YWNoT3BlcmF0aW9uLT5hcmd1bWVudHN9LCAoJGZvckVhY2hBcmd1bWVudCkpOworICAgIElETFBh
cnNlcjo6Y29weUV4dGVuZGVkQXR0cmlidXRlcygkZm9yRWFjaE9wZXJhdGlvbi0+ZXh0ZW5kZWRB
dHRyaWJ1dGVzLCAkaW50ZXJmYWNlLT5tYXBMaWtlLT5leHRlbmRlZEF0dHJpYnV0ZXMpOworICAg
IHB1c2goQHskaW50ZXJmYWNlLT5vcGVyYXRpb25zfSwgJGZvckVhY2hPcGVyYXRpb24pOworCisg
ICAgcmV0dXJuIGlmICRpbnRlcmZhY2UtPm1hcExpa2UtPmlzUmVhZE9ubHk7CisKKyAgICAjIGh0
dHBzOi8vaGV5Y2FtLmdpdGh1Yi5pby93ZWJpZGwvI2VzLW1hcC1zZXQKKyAgICB1bmxlc3MgKGdy
ZXAgeyAkXy0+bmFtZSBlcSAic2V0IiB9IChAeyRpbnRlcmZhY2UtPmF0dHJpYnV0ZXN9LCBAeyRp
bnRlcmZhY2UtPm9wZXJhdGlvbnN9LCBAeyRpbnRlcmZhY2UtPmNvbnN0YW50c30pKSB7CisgICAg
ICAgIG15ICRzZXRPcGVyYXRpb24gPSBJRExPcGVyYXRpb24tPm5ldygpOworICAgICAgICAkc2V0
T3BlcmF0aW9uLT5uYW1lKCJzZXQiKTsKKyAgICAgICAgbXkgJHNldEtleUFyZ3VtZW50ID0gSURM
QXJndW1lbnQtPm5ldygpOworICAgICAgICAkc2V0S2V5QXJndW1lbnQtPm5hbWUoImtleSIpOwor
ICAgICAgICAkc2V0S2V5QXJndW1lbnQtPnR5cGUoSURMUGFyc2VyOjpjbG9uZVR5cGUoJGludGVy
ZmFjZS0+bWFwTGlrZS0+a2V5VHlwZSkpOworICAgICAgICBteSAkc2V0VmFsdWVBcmd1bWVudCA9
IElETEFyZ3VtZW50LT5uZXcoKTsKKyAgICAgICAgJHNldFZhbHVlQXJndW1lbnQtPm5hbWUoInZh
bHVlIik7CisgICAgICAgICRzZXRWYWx1ZUFyZ3VtZW50LT50eXBlKElETFBhcnNlcjo6Y2xvbmVU
eXBlKCRpbnRlcmZhY2UtPm1hcExpa2UtPnZhbHVlVHlwZSkpOworICAgICAgICBwdXNoKEB7JHNl
dE9wZXJhdGlvbi0+YXJndW1lbnRzfSwgKCRzZXRLZXlBcmd1bWVudCkpOworICAgICAgICBwdXNo
KEB7JHNldE9wZXJhdGlvbi0+YXJndW1lbnRzfSwgKCRzZXRWYWx1ZUFyZ3VtZW50KSk7CisgICAg
ICAgICRzZXRPcGVyYXRpb24tPnR5cGUoSURMUGFyc2VyOjptYWtlU2ltcGxlVHlwZSgiYW55Iikp
OworICAgICAgICBJRExQYXJzZXI6OmNvcHlFeHRlbmRlZEF0dHJpYnV0ZXMoJHNldE9wZXJhdGlv
bi0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLCAkaW50ZXJmYWNlLT5tYXBMaWtlLT5leHRlbmRlZEF0dHJp
YnV0ZXMpOworICAgICAgICAkc2V0T3BlcmF0aW9uLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntOb3RF
bnVtZXJhYmxlfSA9IDE7CisgICAgICAgIHB1c2goQHskaW50ZXJmYWNlLT5vcGVyYXRpb25zfSwg
JHNldE9wZXJhdGlvbik7CisgICAgfQorCisgICAgIyBodHRwczovL2hleWNhbS5naXRodWIuaW8v
d2ViaWRsLyNlcy1tYXAtY2xlYXIKKyAgICB1bmxlc3MgKGdyZXAgeyAkXy0+bmFtZSBlcSAiY2xl
YXIiIH0gKEB7JGludGVyZmFjZS0+YXR0cmlidXRlc30sIEB7JGludGVyZmFjZS0+b3BlcmF0aW9u
c30sIEB7JGludGVyZmFjZS0+Y29uc3RhbnRzfSkpIHsKKyAgICAgICAgbXkgJGNsZWFyT3BlcmF0
aW9uID0gSURMT3BlcmF0aW9uLT5uZXcoKTsKKyAgICAgICAgJGNsZWFyT3BlcmF0aW9uLT5uYW1l
KCJjbGVhciIpOworICAgICAgICAkY2xlYXJPcGVyYXRpb24tPnR5cGUoSURMUGFyc2VyOjptYWtl
U2ltcGxlVHlwZSgidW5kZWZpbmVkIikpOworICAgICAgICBJRExQYXJzZXI6OmNvcHlFeHRlbmRl
ZEF0dHJpYnV0ZXMoJGNsZWFyT3BlcmF0aW9uLT5leHRlbmRlZEF0dHJpYnV0ZXMsICRpbnRlcmZh
Y2UtPm1hcExpa2UtPmV4dGVuZGVkQXR0cmlidXRlcyk7CisgICAgICAgICRjbGVhck9wZXJhdGlv
bi0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Tm90RW51bWVyYWJsZX0gPSAxOworICAgICAgICBwdXNo
KEB7JGludGVyZmFjZS0+b3BlcmF0aW9uc30sICRjbGVhck9wZXJhdGlvbik7CisgICAgfQorCisg
ICAgIyBodHRwczovL2hleWNhbS5naXRodWIuaW8vd2ViaWRsLyNlcy1tYXAtZGVsZXRlCisgICAg
dW5sZXNzIChncmVwIHsgJF8tPm5hbWUgZXEgImRlbGV0ZSIgfSAoQHskaW50ZXJmYWNlLT5hdHRy
aWJ1dGVzfSwgQHskaW50ZXJmYWNlLT5vcGVyYXRpb25zfSwgQHskaW50ZXJmYWNlLT5jb25zdGFu
dHN9KSkgeworICAgICAgICBteSAkZGVsZXRlT3BlcmF0aW9uID0gSURMT3BlcmF0aW9uLT5uZXco
KTsKKyAgICAgICAgJGRlbGV0ZU9wZXJhdGlvbi0+bmFtZSgiZGVsZXRlIik7CisgICAgICAgIG15
ICRkZWxldGVBcmd1bWVudCA9IElETEFyZ3VtZW50LT5uZXcoKTsKKyAgICAgICAgJGRlbGV0ZUFy
Z3VtZW50LT5uYW1lKCJrZXkiKTsKKyAgICAgICAgJGRlbGV0ZUFyZ3VtZW50LT50eXBlKElETFBh
cnNlcjo6Y2xvbmVUeXBlKCRpbnRlcmZhY2UtPm1hcExpa2UtPmtleVR5cGUpKTsKKyAgICAgICAg
cHVzaChAeyRkZWxldGVPcGVyYXRpb24tPmFyZ3VtZW50c30sICgkZGVsZXRlQXJndW1lbnQpKTsK
KyAgICAgICAgJGRlbGV0ZU9wZXJhdGlvbi0+dHlwZShJRExQYXJzZXI6Om1ha2VTaW1wbGVUeXBl
KCJhbnkiKSk7CisgICAgICAgIElETFBhcnNlcjo6Y29weUV4dGVuZGVkQXR0cmlidXRlcygkZGVs
ZXRlT3BlcmF0aW9uLT5leHRlbmRlZEF0dHJpYnV0ZXMsICRpbnRlcmZhY2UtPm1hcExpa2UtPmV4
dGVuZGVkQXR0cmlidXRlcyk7CisgICAgICAgICRkZWxldGVPcGVyYXRpb24tPmV4dGVuZGVkQXR0
cmlidXRlcy0+e05vdEVudW1lcmFibGV9ID0gMTsKKyAgICAgICAgcHVzaChAeyRpbnRlcmZhY2Ut
Pm9wZXJhdGlvbnN9LCAkZGVsZXRlT3BlcmF0aW9uKTsKKyAgICB9Cit9CisKK3N1YiBBZGRTZXRM
aWtlQXR0cmlidXRlc0FuZE9wZXJhdGlvbklmTmVlZGVkCit7CisgICAgbXkgJGludGVyZmFjZSA9
IHNoaWZ0OworCisgICAgcmV0dXJuIHVubGVzcyAkaW50ZXJmYWNlLT5zZXRMaWtlOworCisgICAg
JGludGVyZmFjZS0+c2V0TGlrZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Rm9yd2FyZFRvU2V0TGlr
ZX0gPSAxOworCisgICAgIyBodHRwczovL2hleWNhbS5naXRodWIuaW8vd2ViaWRsLyNlcy1zZXQt
c2l6ZQorICAgIG15ICRzaXplQXR0cmlidXRlID0gSURMQXR0cmlidXRlLT5uZXcoKTsKKyAgICAk
c2l6ZUF0dHJpYnV0ZS0+bmFtZSgic2l6ZSIpOworICAgICRzaXplQXR0cmlidXRlLT5pc1JlYWRP
bmx5KDEpOworICAgICRzaXplQXR0cmlidXRlLT50eXBlKElETFBhcnNlcjo6bWFrZVNpbXBsZVR5
cGUoImFueSIpKTsKKyAgICBJRExQYXJzZXI6OmNvcHlFeHRlbmRlZEF0dHJpYnV0ZXMoJHNpemVB
dHRyaWJ1dGUtPmV4dGVuZGVkQXR0cmlidXRlcywgJGludGVyZmFjZS0+c2V0TGlrZS0+ZXh0ZW5k
ZWRBdHRyaWJ1dGVzKTsKKyAgICAkc2l6ZUF0dHJpYnV0ZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57
Tm90RW51bWVyYWJsZX0gPSAxOworICAgIHB1c2goQHskaW50ZXJmYWNlLT5hdHRyaWJ1dGVzfSwg
JHNpemVBdHRyaWJ1dGUpOworCisgICAgIyBodHRwczovL2hleWNhbS5naXRodWIuaW8vd2ViaWRs
LyNlcy1zZXQtaGFzCisgICAgbXkgJGhhc09wZXJhdGlvbiA9IElETE9wZXJhdGlvbi0+bmV3KCk7
CisgICAgJGhhc09wZXJhdGlvbi0+bmFtZSgiaGFzIik7CisgICAgbXkgJGhhc0FyZ3VtZW50ID0g
SURMQXJndW1lbnQtPm5ldygpOworICAgICRoYXNBcmd1bWVudC0+bmFtZSgia2V5Iik7CisgICAg
JGhhc0FyZ3VtZW50LT50eXBlKElETFBhcnNlcjo6Y2xvbmVUeXBlKCRpbnRlcmZhY2UtPnNldExp
a2UtPml0ZW1UeXBlKSk7CisgICAgcHVzaChAeyRoYXNPcGVyYXRpb24tPmFyZ3VtZW50c30sICgk
aGFzQXJndW1lbnQpKTsKKyAgICAkaGFzT3BlcmF0aW9uLT50eXBlKElETFBhcnNlcjo6bWFrZVNp
bXBsZVR5cGUoImFueSIpKTsKKyAgICBJRExQYXJzZXI6OmNvcHlFeHRlbmRlZEF0dHJpYnV0ZXMo
JGhhc09wZXJhdGlvbi0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLCAkaW50ZXJmYWNlLT5zZXRMaWtlLT5l
eHRlbmRlZEF0dHJpYnV0ZXMpOworICAgICRoYXNPcGVyYXRpb24tPmV4dGVuZGVkQXR0cmlidXRl
cy0+e05vdEVudW1lcmFibGV9ID0gMTsKKyAgICBwdXNoKEB7JGludGVyZmFjZS0+b3BlcmF0aW9u
c30sICRoYXNPcGVyYXRpb24pOworCisgICAgIyBodHRwczovL2hleWNhbS5naXRodWIuaW8vd2Vi
aWRsLyNlcy1zZXQtZW50cmllcy1rZXlzCisgICAgbXkgJGVudHJpZXNPcGVyYXRpb24gPSBJRExP
cGVyYXRpb24tPm5ldygpOworICAgICRlbnRyaWVzT3BlcmF0aW9uLT5uYW1lKCJlbnRyaWVzIik7
CisgICAgJGVudHJpZXNPcGVyYXRpb24tPnR5cGUoSURMUGFyc2VyOjptYWtlU2ltcGxlVHlwZSgi
YW55IikpOworICAgIElETFBhcnNlcjo6Y29weUV4dGVuZGVkQXR0cmlidXRlcygkZW50cmllc09w
ZXJhdGlvbi0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLCAkaW50ZXJmYWNlLT5zZXRMaWtlLT5leHRlbmRl
ZEF0dHJpYnV0ZXMpOworICAgICRlbnRyaWVzT3BlcmF0aW9uLT5leHRlbmRlZEF0dHJpYnV0ZXMt
PntOb3RFbnVtZXJhYmxlfSA9IDE7CisgICAgcHVzaChAeyRpbnRlcmZhY2UtPm9wZXJhdGlvbnN9
LCAkZW50cmllc09wZXJhdGlvbik7CisKKyAgICBteSAka2V5c09wZXJhdGlvbiA9IElETE9wZXJh
dGlvbi0+bmV3KCk7CisgICAgJGtleXNPcGVyYXRpb24tPm5hbWUoImtleXMiKTsKKyAgICAka2V5
c09wZXJhdGlvbi0+dHlwZShJRExQYXJzZXI6Om1ha2VTaW1wbGVUeXBlKCJhbnkiKSk7CisgICAg
SURMUGFyc2VyOjpjb3B5RXh0ZW5kZWRBdHRyaWJ1dGVzKCRrZXlzT3BlcmF0aW9uLT5leHRlbmRl
ZEF0dHJpYnV0ZXMsICRpbnRlcmZhY2UtPnNldExpa2UtPmV4dGVuZGVkQXR0cmlidXRlcyk7Cisg
ICAgJGtleXNPcGVyYXRpb24tPmV4dGVuZGVkQXR0cmlidXRlcy0+e05vdEVudW1lcmFibGV9ID0g
MTsKKyAgICBwdXNoKEB7JGludGVyZmFjZS0+b3BlcmF0aW9uc30sICRrZXlzT3BlcmF0aW9uKTsK
KworICAgICMgaHR0cHM6Ly9oZXljYW0uZ2l0aHViLmlvL3dlYmlkbC8jZXMtc2V0LXZhbHVlcwor
ICAgIG15ICR2YWx1ZXNPcGVyYXRpb24gPSBJRExPcGVyYXRpb24tPm5ldygpOworICAgICR2YWx1
ZXNPcGVyYXRpb24tPm5hbWUoInZhbHVlcyIpOworICAgICR2YWx1ZXNPcGVyYXRpb24tPnR5cGUo
SURMUGFyc2VyOjptYWtlU2ltcGxlVHlwZSgiYW55IikpOworICAgIElETFBhcnNlcjo6Y29weUV4
dGVuZGVkQXR0cmlidXRlcygkdmFsdWVzT3BlcmF0aW9uLT5leHRlbmRlZEF0dHJpYnV0ZXMsICRp
bnRlcmZhY2UtPnNldExpa2UtPmV4dGVuZGVkQXR0cmlidXRlcyk7CisgICAgJHZhbHVlc09wZXJh
dGlvbi0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Tm90RW51bWVyYWJsZX0gPSAxOworICAgIHB1c2go
QHskaW50ZXJmYWNlLT5vcGVyYXRpb25zfSwgJHZhbHVlc09wZXJhdGlvbik7CisKKyAgICAjIGh0
dHBzOi8vaGV5Y2FtLmdpdGh1Yi5pby93ZWJpZGwvI2VzLWZvckVhY2gKKyAgICBteSAkZm9yRWFj
aE9wZXJhdGlvbiA9IElETE9wZXJhdGlvbi0+bmV3KCk7CisgICAgJGZvckVhY2hPcGVyYXRpb24t
Pm5hbWUoImZvckVhY2giKTsKKyAgICBteSAkZm9yRWFjaEFyZ3VtZW50ID0gSURMQXJndW1lbnQt
Pm5ldygpOworICAgICRmb3JFYWNoQXJndW1lbnQtPm5hbWUoImNhbGxiYWNrIik7CisgICAgJGZv
ckVhY2hBcmd1bWVudC0+dHlwZShJRExQYXJzZXI6Om1ha2VTaW1wbGVUeXBlKCJhbnkiKSk7Cisg
ICAgcHVzaChAeyRmb3JFYWNoT3BlcmF0aW9uLT5hcmd1bWVudHN9LCAoJGZvckVhY2hBcmd1bWVu
dCkpOworICAgICRmb3JFYWNoT3BlcmF0aW9uLT50eXBlKElETFBhcnNlcjo6bWFrZVNpbXBsZVR5
cGUoImFueSIpKTsKKyAgICBJRExQYXJzZXI6OmNvcHlFeHRlbmRlZEF0dHJpYnV0ZXMoJGZvckVh
Y2hPcGVyYXRpb24tPmV4dGVuZGVkQXR0cmlidXRlcywgJGludGVyZmFjZS0+c2V0TGlrZS0+ZXh0
ZW5kZWRBdHRyaWJ1dGVzKTsKKyAgICAjIEZJWE1FOiBUaGUgV2ViSURMIHNwZWMgc2F5cyB0aGF0
IHRoZSBmb3JFYWNoIG9wZXJhdGlvbiBzaG91bGQgYmUgZW51bWVyYWJsZS4KKyAgICAkZm9yRWFj
aE9wZXJhdGlvbi0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Tm90RW51bWVyYWJsZX0gPSAxOworICAg
IHB1c2goQHskaW50ZXJmYWNlLT5vcGVyYXRpb25zfSwgJGZvckVhY2hPcGVyYXRpb24pOworCisg
ICAgcmV0dXJuIGlmICRpbnRlcmZhY2UtPnNldExpa2UtPmlzUmVhZE9ubHk7CisKKyAgICAjIGh0
dHBzOi8vaGV5Y2FtLmdpdGh1Yi5pby93ZWJpZGwvI2VzLWFkZC1kZWxldGUKKyAgICB1bmxlc3Mg
KGdyZXAgeyAkXy0+bmFtZSBlcSAiYWRkIiB9IChAeyRpbnRlcmZhY2UtPmF0dHJpYnV0ZXN9LCBA
eyRpbnRlcmZhY2UtPm9wZXJhdGlvbnN9LCBAeyRpbnRlcmZhY2UtPmNvbnN0YW50c30pKSB7Cisg
ICAgICAgIG15ICRhZGRPcGVyYXRpb24gPSBJRExPcGVyYXRpb24tPm5ldygpOworICAgICAgICAk
YWRkT3BlcmF0aW9uLT5uYW1lKCJhZGQiKTsKKyAgICAgICAgbXkgJGFkZEFyZ3VtZW50ID0gSURM
QXJndW1lbnQtPm5ldygpOworICAgICAgICAkYWRkQXJndW1lbnQtPm5hbWUoImtleSIpOworICAg
ICAgICAkYWRkQXJndW1lbnQtPnR5cGUoSURMUGFyc2VyOjpjbG9uZVR5cGUoJGludGVyZmFjZS0+
c2V0TGlrZS0+aXRlbVR5cGUpKTsKKyAgICAgICAgcHVzaChAeyRhZGRPcGVyYXRpb24tPmFyZ3Vt
ZW50c30sICgkYWRkQXJndW1lbnQpKTsKKyAgICAgICAgJGFkZE9wZXJhdGlvbi0+dHlwZShJRExQ
YXJzZXI6Om1ha2VTaW1wbGVUeXBlKCJhbnkiKSk7CisgICAgICAgIElETFBhcnNlcjo6Y29weUV4
dGVuZGVkQXR0cmlidXRlcygkYWRkT3BlcmF0aW9uLT5leHRlbmRlZEF0dHJpYnV0ZXMsICRpbnRl
cmZhY2UtPnNldExpa2UtPmV4dGVuZGVkQXR0cmlidXRlcyk7CisgICAgICAgICRhZGRPcGVyYXRp
b24tPmV4dGVuZGVkQXR0cmlidXRlcy0+e05vdEVudW1lcmFibGV9ID0gMTsKKyAgICAgICAgcHVz
aChAeyRpbnRlcmZhY2UtPm9wZXJhdGlvbnN9LCAkYWRkT3BlcmF0aW9uKTsKKyAgICB9CisKKyAg
ICAjIGh0dHBzOi8vaGV5Y2FtLmdpdGh1Yi5pby93ZWJpZGwvI2VzLXNldC1jbGVhcgorICAgIHVu
bGVzcyAoZ3JlcCB7ICRfLT5uYW1lIGVxICJjbGVhciIgfSAoQHskaW50ZXJmYWNlLT5hdHRyaWJ1
dGVzfSwgQHskaW50ZXJmYWNlLT5vcGVyYXRpb25zfSwgQHskaW50ZXJmYWNlLT5jb25zdGFudHN9
KSkgeworICAgICAgICBteSAkY2xlYXJPcGVyYXRpb24gPSBJRExPcGVyYXRpb24tPm5ldygpOwor
ICAgICAgICAkY2xlYXJPcGVyYXRpb24tPm5hbWUoImNsZWFyIik7CisgICAgICAgICRjbGVhck9w
ZXJhdGlvbi0+dHlwZShJRExQYXJzZXI6Om1ha2VTaW1wbGVUeXBlKCJ1bmRlZmluZWQiKSk7Cisg
ICAgICAgIElETFBhcnNlcjo6Y29weUV4dGVuZGVkQXR0cmlidXRlcygkY2xlYXJPcGVyYXRpb24t
PmV4dGVuZGVkQXR0cmlidXRlcywgJGludGVyZmFjZS0+c2V0TGlrZS0+ZXh0ZW5kZWRBdHRyaWJ1
dGVzKTsKKyAgICAgICAgJGNsZWFyT3BlcmF0aW9uLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntOb3RF
bnVtZXJhYmxlfSA9IDE7CisgICAgICAgIHB1c2goQHskaW50ZXJmYWNlLT5vcGVyYXRpb25zfSwg
JGNsZWFyT3BlcmF0aW9uKTsKKyAgICB9CisKKyAgICB1bmxlc3MgKGdyZXAgeyAkXy0+bmFtZSBl
cSAiZGVsZXRlIiB9IChAeyRpbnRlcmZhY2UtPmF0dHJpYnV0ZXN9LCBAeyRpbnRlcmZhY2UtPm9w
ZXJhdGlvbnN9LCBAeyRpbnRlcmZhY2UtPmNvbnN0YW50c30pKSB7CisgICAgICAgIG15ICRkZWxl
dGVPcGVyYXRpb24gPSBJRExPcGVyYXRpb24tPm5ldygpOworICAgICAgICAkZGVsZXRlT3BlcmF0
aW9uLT5uYW1lKCJkZWxldGUiKTsKKyAgICAgICAgbXkgJGRlbGV0ZUFyZ3VtZW50ID0gSURMQXJn
dW1lbnQtPm5ldygpOworICAgICAgICAkZGVsZXRlQXJndW1lbnQtPm5hbWUoImtleSIpOworICAg
ICAgICAkZGVsZXRlQXJndW1lbnQtPnR5cGUoSURMUGFyc2VyOjpjbG9uZVR5cGUoJGludGVyZmFj
ZS0+c2V0TGlrZS0+aXRlbVR5cGUpKTsKKyAgICAgICAgcHVzaChAeyRkZWxldGVPcGVyYXRpb24t
PmFyZ3VtZW50c30sICgkZGVsZXRlQXJndW1lbnQpKTsKKyAgICAgICAgJGRlbGV0ZU9wZXJhdGlv
bi0+dHlwZShJRExQYXJzZXI6Om1ha2VTaW1wbGVUeXBlKCJhbnkiKSk7CisgICAgICAgIElETFBh
cnNlcjo6Y29weUV4dGVuZGVkQXR0cmlidXRlcygkZGVsZXRlT3BlcmF0aW9uLT5leHRlbmRlZEF0
dHJpYnV0ZXMsICRpbnRlcmZhY2UtPnNldExpa2UtPmV4dGVuZGVkQXR0cmlidXRlcyk7CisgICAg
ICAgICRkZWxldGVPcGVyYXRpb24tPmV4dGVuZGVkQXR0cmlidXRlcy0+e05vdEVudW1lcmFibGV9
ID0gMTsKKyAgICAgICAgcHVzaChAeyRpbnRlcmZhY2UtPm9wZXJhdGlvbnN9LCAkZGVsZXRlT3Bl
cmF0aW9uKTsKKyAgICB9Cit9CisKIHN1YiBBZGRTdHJpbmdpZmllck9wZXJhdGlvbklmTmVlZGVk
CiB7CiAgICAgbXkgJGludGVyZmFjZSA9IHNoaWZ0OwpAQCAtMTYwNCwxMSArMTg3NCwxMSBAQCBz
dWIgR2V0RnVsbHlRdWFsaWZpZWRJbXBsZW1lbnRhdGlvbkNhbGxOCiAgICAgICAgIHJldHVybiAk
aW50ZXJmYWNlLT50eXBlLT5uYW1lIC4gIjo6JHtpbXBsZW1lbnRhdGlvbk5hbWV9IjsKICAgICB9
CiAgICAgCi0gICAgaWYgKCRwcm9wZXJ0eS0+aXNNYXBMaWtlKSB7CisgICAgaWYgKCRwcm9wZXJ0
eS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Rm9yd2FyZFRvTWFwTGlrZX0pIHsKICAgICAgICAgcmV0
dXJuICJmb3J3YXJkIiAuICRjb2RlR2VuZXJhdG9yLT5XS191Y2ZpcnN0KCRwcm9wZXJ0eS0+bmFt
ZSkgLiAiVG9NYXBMaWtlIjsKICAgICB9CiAgICAgCi0gICAgaWYgKCRwcm9wZXJ0eS0+aXNTZXRM
aWtlKSB7CisgICAgaWYgKCRwcm9wZXJ0eS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Rm9yd2FyZFRv
U2V0TGlrZX0pIHsKICAgICAgICAgcmV0dXJuICJmb3J3YXJkIiAuICRjb2RlR2VuZXJhdG9yLT5X
S191Y2ZpcnN0KCRwcm9wZXJ0eS0+bmFtZSkgLiAiVG9TZXRMaWtlIjsKICAgICB9CiAKQEAgLTE2
MjMsNyArMTg5Myw3IEBAIHN1YiBBZGRBZGRpdGlvbmFsQXJndW1lbnRzRm9ySW1wbGVtZW50YXQK
ICAgICAgICAgdW5zaGlmdChAJGFyZ3VtZW50cywgJGltcGxFeHByZXNzaW9uKTsKICAgICB9CiAg
ICAgCi0gICAgaWYgKCRwcm9wZXJ0eS0+aXNNYXBMaWtlIG9yICRwcm9wZXJ0eS0+aXNTZXRMaWtl
KSB7CisgICAgaWYgKCRwcm9wZXJ0eS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Rm9yd2FyZFRvTWFw
TGlrZX0gb3IgJHByb3BlcnR5LT5leHRlbmRlZEF0dHJpYnV0ZXMtPntGb3J3YXJkVG9TZXRMaWtl
fSkgewogICAgICAgICBwdXNoKEAkYXJndW1lbnRzLCAkZ2xvYmFsT2JqZWN0KTsKICAgICAgICAg
aWYgKHJlZigkcHJvcGVydHkpIGVxICJJRExPcGVyYXRpb24iKSB7CiAgICAgICAgICAgICBwdXNo
KEAkYXJndW1lbnRzLCAkY2FsbEZyYW1lKTsKQEAgLTE3NjEsOCArMjAzMSw4IEBAIHN1YiBJc0Fj
Y2VsZXJhdGVkRE9NQXR0cmlidXRlCiAgICAgcmV0dXJuIDAgaWYgJGludGVyZmFjZS0+ZXh0ZW5k
ZWRBdHRyaWJ1dGVzLT57Q3VzdG9tUHJveHlUb0pTT2JqZWN0fTsKIAogICAgIHJldHVybiAwIGlm
ICRhdHRyaWJ1dGUtPmlzU3RhdGljOwotICAgIHJldHVybiAwIGlmICRhdHRyaWJ1dGUtPmlzTWFw
TGlrZTsKLSAgICByZXR1cm4gMCBpZiAkYXR0cmlidXRlLT5pc1NldExpa2U7CisgICAgcmV0dXJu
IDAgaWYgJGF0dHJpYnV0ZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Rm9yd2FyZFRvTWFwTGlrZX07
CisgICAgcmV0dXJuIDAgaWYgJGF0dHJpYnV0ZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Rm9yd2Fy
ZFRvU2V0TGlrZX07CiAgICAgcmV0dXJuIDAgaWYgJGNvZGVHZW5lcmF0b3ItPklzQ29uc3RydWN0
b3JUeXBlKCRhdHRyaWJ1dGUtPnR5cGUpOwogICAgIHJldHVybiAwIGlmIElzSlNCdWlsdGluKCRp
bnRlcmZhY2UsICRhdHRyaWJ1dGUpOwogICAgIHJldHVybiAwIGlmICRhdHRyaWJ1dGUtPmV4dGVu
ZGVkQXR0cmlidXRlcy0+e0xlZ2FjeUxlbmllbnRUaGlzfTsKQEAgLTE4NDEsOSArMjExMSw2IEBA
IHN1YiBQcm90b3R5cGVPcGVyYXRpb25Db3VudAogICAgICAgICAkY291bnQrKyBpZiAhJG9wZXJh
dGlvbi0+aXNTdGF0aWMgJiYgIU9wZXJhdGlvblNob3VsZEJlT25JbnN0YW5jZSgkaW50ZXJmYWNl
LCAkb3BlcmF0aW9uKTsKICAgICB9CiAKLSAgICAkY291bnQgKz0gc2NhbGFyIEB7JGludGVyZmFj
ZS0+aXRlcmFibGUtPm9wZXJhdGlvbnN9IGlmICRpbnRlcmZhY2UtPml0ZXJhYmxlOwotICAgICRj
b3VudCArPSBzY2FsYXIgQHskaW50ZXJmYWNlLT5tYXBMaWtlLT5vcGVyYXRpb25zfSBpZiAkaW50
ZXJmYWNlLT5tYXBMaWtlOwotICAgICRjb3VudCArPSBzY2FsYXIgQHskaW50ZXJmYWNlLT5zZXRM
aWtlLT5vcGVyYXRpb25zfSBpZiAkaW50ZXJmYWNlLT5zZXRMaWtlOwogICAgICRjb3VudCArPSBz
Y2FsYXIgQHskaW50ZXJmYWNlLT5zZXJpYWxpemFibGUtPm9wZXJhdGlvbnN9IGlmICRpbnRlcmZh
Y2UtPnNlcmlhbGl6YWJsZTsKIAogICAgIHJldHVybiAkY291bnQ7CkBAIC0zMTA4LDggKzMzNzUs
NiBAQCBzdWIgR2VuZXJhdGVQcm9wZXJ0aWVzSGFzaFRhYmxlCiAgICAgcmV0dXJuIDAgaWYgISRw
cm9wZXJ0eUNvdW50OwogCiAgICAgbXkgQGF0dHJpYnV0ZXMgPSBAeyRpbnRlcmZhY2UtPmF0dHJp
YnV0ZXN9OwotICAgIHB1c2goQGF0dHJpYnV0ZXMsIEB7JGludGVyZmFjZS0+bWFwTGlrZS0+YXR0
cmlidXRlc30pIGlmICRpbnRlcmZhY2UtPm1hcExpa2U7Ci0gICAgcHVzaChAYXR0cmlidXRlcywg
QHskaW50ZXJmYWNlLT5zZXRMaWtlLT5hdHRyaWJ1dGVzfSkgaWYgJGludGVyZmFjZS0+c2V0TGlr
ZTsKIAogICAgIGZvcmVhY2ggbXkgJGF0dHJpYnV0ZSAoQGF0dHJpYnV0ZXMpIHsKICAgICAgICAg
bmV4dCBpZiAoJGF0dHJpYnV0ZS0+aXNTdGF0aWMpOwpAQCAtMzE2MCw5ICszNDI1LDYgQEAgc3Vi
IEdlbmVyYXRlUHJvcGVydGllc0hhc2hUYWJsZQogICAgIH0KIAogICAgIG15IEBvcGVyYXRpb25z
ID0gQHskaW50ZXJmYWNlLT5vcGVyYXRpb25zfTsKLSAgICBwdXNoKEBvcGVyYXRpb25zLCBAeyRp
bnRlcmZhY2UtPml0ZXJhYmxlLT5vcGVyYXRpb25zfSkgaWYgSXNLZXlWYWx1ZUl0ZXJhYmxlSW50
ZXJmYWNlKCRpbnRlcmZhY2UpOwotICAgIHB1c2goQG9wZXJhdGlvbnMsIEB7JGludGVyZmFjZS0+
bWFwTGlrZS0+b3BlcmF0aW9uc30pIGlmICRpbnRlcmZhY2UtPm1hcExpa2U7Ci0gICAgcHVzaChA
b3BlcmF0aW9ucywgQHskaW50ZXJmYWNlLT5zZXRMaWtlLT5vcGVyYXRpb25zfSkgaWYgJGludGVy
ZmFjZS0+c2V0TGlrZTsKICAgICBwdXNoKEBvcGVyYXRpb25zLCBAeyRpbnRlcmZhY2UtPnNlcmlh
bGl6YWJsZS0+b3BlcmF0aW9uc30pIGlmICRpbnRlcmZhY2UtPnNlcmlhbGl6YWJsZTsKICAgICBm
b3JlYWNoIG15ICRvcGVyYXRpb24gKEBvcGVyYXRpb25zKSB7CiAgICAgICAgIG5leHQgaWYgKCRv
cGVyYXRpb24tPmV4dGVuZGVkQXR0cmlidXRlcy0+e1ByaXZhdGVJZGVudGlmaWVyfSBhbmQgbm90
ICRvcGVyYXRpb24tPmV4dGVuZGVkQXR0cmlidXRlcy0+e1B1YmxpY0lkZW50aWZpZXJ9KTsKQEAg
LTM5NjgsMTQgKzQyMzAsOSBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgIHB1c2go
QGltcGxDb250ZW50LCBHZW5lcmF0ZURpY3Rpb25hcmllc0ltcGxlbWVudGF0aW9uQ29udGVudCgk
aW50ZXJmYWNlLCAkZGljdGlvbmFyaWVzKSk7CiAKICAgICBteSBAb3BlcmF0aW9ucyA9IEB7JGlu
dGVyZmFjZS0+b3BlcmF0aW9uc307Ci0gICAgcHVzaChAb3BlcmF0aW9ucywgQHskaW50ZXJmYWNl
LT5pdGVyYWJsZS0+b3BlcmF0aW9uc30pIGlmIElzS2V5VmFsdWVJdGVyYWJsZUludGVyZmFjZSgk
aW50ZXJmYWNlKTsKLSAgICBwdXNoKEBvcGVyYXRpb25zLCBAeyRpbnRlcmZhY2UtPm1hcExpa2Ut
Pm9wZXJhdGlvbnN9KSBpZiAkaW50ZXJmYWNlLT5tYXBMaWtlOwotICAgIHB1c2goQG9wZXJhdGlv
bnMsIEB7JGludGVyZmFjZS0+c2V0TGlrZS0+b3BlcmF0aW9uc30pIGlmICRpbnRlcmZhY2UtPnNl
dExpa2U7CiAgICAgcHVzaChAb3BlcmF0aW9ucywgQHskaW50ZXJmYWNlLT5zZXJpYWxpemFibGUt
Pm9wZXJhdGlvbnN9KSBpZiAkaW50ZXJmYWNlLT5zZXJpYWxpemFibGU7CiAKICAgICBteSBAYXR0
cmlidXRlcyA9IEB7JGludGVyZmFjZS0+YXR0cmlidXRlc307Ci0gICAgcHVzaChAYXR0cmlidXRl
cywgQHskaW50ZXJmYWNlLT5tYXBMaWtlLT5hdHRyaWJ1dGVzfSkgaWYgJGludGVyZmFjZS0+bWFw
TGlrZTsKLSAgICBwdXNoKEBhdHRyaWJ1dGVzLCBAeyRpbnRlcmZhY2UtPnNldExpa2UtPmF0dHJp
YnV0ZXN9KSBpZiAkaW50ZXJmYWNlLT5zZXRMaWtlOwogCiAgICAgbXkgJG51bUNvbnN0YW50cyA9
IEB7JGludGVyZmFjZS0+Y29uc3RhbnRzfTsKICAgICBteSAkbnVtT3BlcmF0aW9ucyA9IEBvcGVy
YXRpb25zOwpAQCAtNTAzMSw3ICs1Mjg4LDcgQEAgc3ViIEdlbmVyYXRlQXR0cmlidXRlR2V0dGVy
Qm9keURlZmluaXRpbwogCiAgICAgICAgIG15ICRnbG9iYWxPYmplY3RSZWZlcmVuY2UgPSAkYXR0
cmlidXRlLT5pc1N0YXRpYyA/ICIqanNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oJmxleGljYWxH
bG9iYWxPYmplY3QpIiA6ICIqdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSI7CiAgICAgICAgIG15
ICR0b0pTRXhwcmVzc2lvbiA9IE5hdGl2ZVRvSlNWYWx1ZVVzaW5nUmVmZXJlbmNlcygkYXR0cmli
dXRlLCAkaW50ZXJmYWNlLCAiJHtmdW5jdGlvbk5hbWV9KCIgLiBqb2luKCIsICIsIEBhcmd1bWVu
dHMpIC4gIikiLCAkZ2xvYmFsT2JqZWN0UmVmZXJlbmNlKTsKLSAgICAgICAgcHVzaChAJG91dHB1
dEFycmF5LCAiICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTtcbiIpIHVubGVz
cyAkYXR0cmlidXRlLT5pc1N0YXRpYyBvciAkYXR0cmlidXRlLT5pc01hcExpa2Ugb3IgJGF0dHJp
YnV0ZS0+aXNTZXRMaWtlOworICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgYXV0byYg
aW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpO1xuIikgdW5sZXNzICRhdHRyaWJ1dGUtPmlzU3Rh
dGljIG9yICRhdHRyaWJ1dGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+e0ZvcndhcmRUb01hcExpa2V9
IG9yICRhdHRyaWJ1dGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+e0ZvcndhcmRUb1NldExpa2V9Owog
CiAgICAgICAgIGlmICghSXNSZWFkb25seSgkYXR0cmlidXRlKSkgewogICAgICAgICAgICAgbXkg
JGNhbGxUcmFjaW5nQ2FsbGJhY2sgPSAkYXR0cmlidXRlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntD
YWxsVHJhY2luZ0NhbGxiYWNrfSB8fCAkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntD
YWxsVHJhY2luZ0NhbGxiYWNrfTsKQEAgLTUzNzQsNyArNTYzMSw3IEBAIHN1YiBHZW5lcmF0ZU9w
ZXJhdGlvbkJvZHlEZWZpbml0aW9uCiAgICAgfSBlbHNpZiAoSGFzQ3VzdG9tTWV0aG9kKCRvcGVy
YXRpb24pKSB7CiAgICAgICAgIEdlbmVyYXRlSW1wbGVtZW50YXRpb25DdXN0b21GdW5jdGlvbkNh
bGwoJG91dHB1dEFycmF5LCAkb3BlcmF0aW9uLCAkaW50ZXJmYWNlLCAkY2xhc3NOYW1lLCAkZnVu
Y3Rpb25JbXBsZW1lbnRhdGlvbk5hbWUsICRpbmRlbnQpOwogICAgIH0gZWxzZSB7Ci0gICAgICAg
IGlmICghJG9wZXJhdGlvbi0+aXNNYXBMaWtlICYmICEkb3BlcmF0aW9uLT5pc1NldExpa2UgJiYg
ISRvcGVyYXRpb24tPmlzU3RhdGljKSB7CisgICAgICAgIGlmICghJG9wZXJhdGlvbi0+ZXh0ZW5k
ZWRBdHRyaWJ1dGVzLT57Rm9yd2FyZFRvTWFwTGlrZX0gJiYgISRvcGVyYXRpb24tPmV4dGVuZGVk
QXR0cmlidXRlcy0+e0ZvcndhcmRUb1NldExpa2V9ICYmICEkb3BlcmF0aW9uLT5pc1N0YXRpYykg
ewogICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGF1dG8mIGltcGwgPSBjYXN0
ZWRUaGlzLT53cmFwcGVkKCk7XG4iKTsKICAgICAgICAgfQogCkBAIC01Mzk5LDcgKzU2NTYsNyBA
QCBzdWIgR2VuZXJhdGVPcGVyYXRpb25EZWZpbml0aW9uCiAgICAgbXkgKCRvdXRwdXRBcnJheSwg
JGludGVyZmFjZSwgJGNsYXNzTmFtZSwgJG9wZXJhdGlvbikgPSBAXzsKIAogICAgIHJldHVybiBp
ZiBJc0pTQnVpbHRpbigkaW50ZXJmYWNlLCAkb3BlcmF0aW9uKTsKLSAgICByZXR1cm4gaWYgJG9w
ZXJhdGlvbi0+aXNJdGVyYWJsZTsKKyAgICByZXR1cm4gaWYgJG9wZXJhdGlvbi0+ZXh0ZW5kZWRB
dHRyaWJ1dGVzLT57RnJvbUl0ZXJhYmxlfTsKICAgICByZXR1cm4gaWYgJG9wZXJhdGlvbi0+aXNT
ZXJpYWxpemVyOwogCiAgICAgbXkgJGlzQ3VzdG9tID0gSGFzQ3VzdG9tTWV0aG9kKCRvcGVyYXRp
b24pOwpAQCAtNzU1Miw5ICs3ODA5LDYgQEAgc3ViIEdldFJ1bnRpbWVFbmFibGVkU3RhdGljUHJv
cGVydGllcwogICAgIG15IEBydW50aW1lRW5hYmxlZFByb3BlcnRpZXMgPSAoKTsKIAogICAgIG15
IEBhdHRyaWJ1dGVzID0gQHskaW50ZXJmYWNlLT5hdHRyaWJ1dGVzfTsKLSAgICBwdXNoKEBhdHRy
aWJ1dGVzLCBAeyRpbnRlcmZhY2UtPm1hcExpa2UtPmF0dHJpYnV0ZXN9KSBpZiAkaW50ZXJmYWNl
LT5tYXBMaWtlOwotICAgIHB1c2goQGF0dHJpYnV0ZXMsIEB7JGludGVyZmFjZS0+c2V0TGlrZS0+
YXR0cmlidXRlc30pIGlmICRpbnRlcmZhY2UtPnNldExpa2U7Ci0KICAgICBmb3JlYWNoIG15ICRh
dHRyaWJ1dGUgKEBhdHRyaWJ1dGVzKSB7CiAgICAgICAgIG5leHQgaWYgQXR0cmlidXRlU2hvdWxk
QmVPbkluc3RhbmNlKCRpbnRlcmZhY2UsICRhdHRyaWJ1dGUpICE9IDA7CiAgICAgICAgIG5leHQg
aWYgbm90ICRhdHRyaWJ1dGUtPmlzU3RhdGljOwpAQCAtNzU2NSw5ICs3ODE5LDYgQEAgc3ViIEdl
dFJ1bnRpbWVFbmFibGVkU3RhdGljUHJvcGVydGllcwogICAgIH0KIAogICAgIG15IEBvcGVyYXRp
b25zID0gQHskaW50ZXJmYWNlLT5vcGVyYXRpb25zfTsKLSAgICBwdXNoKEBvcGVyYXRpb25zLCBA
eyRpbnRlcmZhY2UtPml0ZXJhYmxlLT5vcGVyYXRpb25zfSkgaWYgSXNLZXlWYWx1ZUl0ZXJhYmxl
SW50ZXJmYWNlKCRpbnRlcmZhY2UpOwotICAgIHB1c2goQG9wZXJhdGlvbnMsIEB7JGludGVyZmFj
ZS0+bWFwTGlrZS0+b3BlcmF0aW9uc30pIGlmICRpbnRlcmZhY2UtPm1hcExpa2U7Ci0gICAgcHVz
aChAb3BlcmF0aW9ucywgQHskaW50ZXJmYWNlLT5zZXRMaWtlLT5vcGVyYXRpb25zfSkgaWYgJGlu
dGVyZmFjZS0+c2V0TGlrZTsKICAgICBwdXNoKEBvcGVyYXRpb25zLCBAeyRpbnRlcmZhY2UtPnNl
cmlhbGl6YWJsZS0+b3BlcmF0aW9uc30pIGlmICRpbnRlcmZhY2UtPnNlcmlhbGl6YWJsZTsKICAg
ICBmb3JlYWNoIG15ICRvcGVyYXRpb24gKEBvcGVyYXRpb25zKSB7CiAgICAgICAgIG5leHQgaWYg
KCRvcGVyYXRpb24tPmV4dGVuZGVkQXR0cmlidXRlcy0+e1ByaXZhdGVJZGVudGlmaWVyfSBhbmQg
bm90ICRvcGVyYXRpb24tPmV4dGVuZGVkQXR0cmlidXRlcy0+e1B1YmxpY0lkZW50aWZpZXJ9KTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvSURMUGFyc2VyLnBtCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvSURMUGFyc2VyLnBtCShy
ZXZpc2lvbiAyNjcwMDYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0lETFBh
cnNlci5wbQkod29ya2luZyBjb3B5KQpAQCAtNzMsNyArNzMsNyBAQCBzdHJ1Y3QoIElETEludGVy
ZmFjZSA9PiB7CiAgICAgbWFwTGlrZSA9PiAnJCcsICMgVXNlZCBmb3IgbWFwTGlrZSBpbnRlcmZh
Y2VzLCBvZiB0eXBlICdJRExNYXBMaWtlJwogICAgIHNldExpa2UgPT4gJyQnLCAjIFVzZWQgZm9y
IHNldExpa2UgaW50ZXJmYWNlcywgb2YgdHlwZSAnSURMU2V0TGlrZScKICAgICBzZXJpYWxpemFi
bGUgPT4gJyQnLCAjIFVzZWQgZm9yIHNlcmlhbGl6YWJsZSBpbnRlcmZhY2VzLCBvZiB0eXBlICdJ
RExTZXJpYWxpemFibGUnCi0gICAgZXh0ZW5kZWRBdHRyaWJ1dGVzID0+ICckJywKKyAgICBleHRl
bmRlZEF0dHJpYnV0ZXMgPT4gJyUnLAogfSk7CiAKICMgVXNlZCB0byByZXByZXNlbnQgYW4gYXJn
dW1lbnQgdG8gYSBJRExPcGVyYXRpb24uCkBAIC05MywxMSArOTMsOCBAQCBzdHJ1Y3QoIElETE9w
ZXJhdGlvbiA9PiB7CiAgICAgYXJndW1lbnRzID0+ICdAJywgIyBMaXN0IG9mICdJRExBcmd1bWVu
dCcKICAgICBpc0NvbnN0cnVjdG9yID0+ICckJywKICAgICBpc1N0YXRpYyA9PiAnJCcsCi0gICAg
aXNJdGVyYWJsZSA9PiAnJCcsCiAgICAgaXNTZXJpYWxpemVyID0+ICckJywKICAgICBpc1N0cmlu
Z2lmaWVyID0+ICckJywKLSAgICBpc01hcExpa2UgPT4gJyQnLAotICAgIGlzU2V0TGlrZSA9PiAn
JCcsCiAgICAgc3BlY2lhbHMgPT4gJ0AnLAogICAgIGV4dGVuZGVkQXR0cmlidXRlcyA9PiAnJScs
CiB9KTsKQEAgLTEwOSwxMiArMTA2LDEwIEBAIHN0cnVjdCggSURMQXR0cmlidXRlID0+IHsKICAg
ICB0eXBlID0+ICdJRExUeXBlJywKICAgICBpc0NvbnN0cnVjdG9yID0+ICckJywKICAgICBpc1N0
YXRpYyA9PiAnJCcsCi0gICAgaXNNYXBMaWtlID0+ICckJywKLSAgICBpc1NldExpa2UgPT4gJyQn
LAogICAgIGlzU3RyaW5naWZpZXIgPT4gJyQnLAogICAgIGlzUmVhZE9ubHkgPT4gJyQnLAogICAg
IGlzSW5oZXJpdCA9PiAnJCcsCi0gICAgZXh0ZW5kZWRBdHRyaWJ1dGVzID0+ICckJywKKyAgICBl
eHRlbmRlZEF0dHJpYnV0ZXMgPT4gJyUnLAogfSk7CiAKICMgaHR0cHM6Ly9oZXljYW0uZ2l0aHVi
LmlvL3dlYmlkbC8jaWRsLWl0ZXJhYmxlCkBAIC0xMjIsOCArMTE3LDggQEAgc3RydWN0KCBJRExJ
dGVyYWJsZSA9PiB7CiAgICAgaXNLZXlWYWx1ZSA9PiAnJCcsCiAgICAga2V5VHlwZSA9PiAnSURM
VHlwZScsCiAgICAgdmFsdWVUeXBlID0+ICdJRExUeXBlJywKLSAgICBvcGVyYXRpb25zID0+ICdA
JywgIyBJdGVyYWJsZSBvcGVyYXRpb25zIChlbnRyaWVzLCBrZXlzLCB2YWx1ZXMsIFtTeW1ib2wu
SXRlcmF0b3JdLCBmb3JFYWNoKQotICAgIGV4dGVuZGVkQXR0cmlidXRlcyA9PiAnJCcsCisgICAg
b3BlcmF0aW9ucyA9PiAnQCcsCisgICAgZXh0ZW5kZWRBdHRyaWJ1dGVzID0+ICclJywKIH0pOwog
CiAjIGh0dHBzOi8vaGV5Y2FtLmdpdGh1Yi5pby93ZWJpZGwvI2lkbC1hc3luYy1pdGVyYWJsZQpA
QCAtMTMyLDcgKzEyNyw3IEBAIHN0cnVjdCggSURMQXN5bmNJdGVyYWJsZSA9PiB7CiAgICAga2V5
VHlwZSA9PiAnSURMVHlwZScsCiAgICAgdmFsdWVUeXBlID0+ICdJRExUeXBlJywKICAgICBhcmd1
bWVudHMgPT4gJ0AnLCAjIExpc3Qgb2YgJ0lETEFyZ3VtZW50JwotICAgIGV4dGVuZGVkQXR0cmli
dXRlcyA9PiAnJCcsCisgICAgZXh0ZW5kZWRBdHRyaWJ1dGVzID0+ICclJywKIH0pOwogCiAjIGh0
dHBzOi8vaGV5Y2FtLmdpdGh1Yi5pby93ZWJpZGwvI2VzLW1hcGxpa2UKQEAgLTE0MCwxOCArMTM1
LDE0IEBAIHN0cnVjdCggSURMTWFwTGlrZSA9PiB7CiAgICAgaXNSZWFkT25seSA9PiAnJCcsCiAg
ICAga2V5VHlwZSA9PiAnSURMVHlwZScsCiAgICAgdmFsdWVUeXBlID0+ICdJRExUeXBlJywKLSAg
ICBhdHRyaWJ1dGVzID0+ICdAJywgIyBNYXBMaWtlIGF0dHJpYnV0ZXMgKHNpemUpCi0gICAgb3Bl
cmF0aW9ucyA9PiAnQCcsICMgTWFwTGlrZSBvcGVyYXRpb25zIChlbnRyaWVzLCBrZXlzLCB2YWx1
ZXMsIGZvckVhY2gsIGdldCwgaGFzIGFuZCBpZiBub3QgcmVhZG9ubHksIGRlbGV0ZSwgc2V0IGFu
ZCBjbGVhcikKLSAgICBleHRlbmRlZEF0dHJpYnV0ZXMgPT4gJyQnLAorICAgIGV4dGVuZGVkQXR0
cmlidXRlcyA9PiAnJScsCiB9KTsKIAogIyBodHRwczovL2hleWNhbS5naXRodWIuaW8vd2ViaWRs
LyNlcy1zZXRsaWtlCiBzdHJ1Y3QoIElETFNldExpa2UgPT4gewogICAgIGlzUmVhZE9ubHkgPT4g
JyQnLAogICAgIGl0ZW1UeXBlID0+ICdJRExUeXBlJywKLSAgICBhdHRyaWJ1dGVzID0+ICdAJywg
IyBTZXRMaWtlIGF0dHJpYnV0ZXMgKHNpemUpCi0gICAgb3BlcmF0aW9ucyA9PiAnQCcsICMgU2V0
TGlrZSBvcGVyYXRpb25zIChlbnRyaWVzLCBrZXlzLCB2YWx1ZXMsIGZvckVhY2gsIGhhcyBhbmQg
aWYgbm90IHJlYWRvbmx5LCBkZWxldGUsIHNldCBhbmQgY2xlYXIpCi0gICAgZXh0ZW5kZWRBdHRy
aWJ1dGVzID0+ICckJywKKyAgICBleHRlbmRlZEF0dHJpYnV0ZXMgPT4gJyUnLAogfSk7CiAKICMg
aHR0cHM6Ly9oZXljYW0uZ2l0aHViLmlvL3dlYmlkbC8jaWRsLXNlcmlhbGl6ZXJzCkBAIC0xNjgs
NyArMTU5LDcgQEAgc3RydWN0KCBJRExDb25zdGFudCA9PiB7CiAgICAgbmFtZSA9PiAnJCcsCiAg
ICAgdHlwZSA9PiAnSURMVHlwZScsCiAgICAgdmFsdWUgPT4gJyQnLAotICAgIGV4dGVuZGVkQXR0
cmlidXRlcyA9PiAnJCcsCisgICAgZXh0ZW5kZWRBdHRyaWJ1dGVzID0+ICclJywKIH0pOwogCiAj
IGh0dHBzOi8vaGV5Y2FtLmdpdGh1Yi5pby93ZWJpZGwvI2lkbC1lbnVtcwpAQCAtMTc2LDcgKzE2
Nyw3IEBAIHN0cnVjdCggSURMRW51bSA9PiB7CiAgICAgbmFtZSA9PiAnJCcsCiAgICAgdHlwZSA9
PiAnSURMVHlwZScsCiAgICAgdmFsdWVzID0+ICdAJywKLSAgICBleHRlbmRlZEF0dHJpYnV0ZXMg
PT4gJyQnLAorICAgIGV4dGVuZGVkQXR0cmlidXRlcyA9PiAnJScsCiB9KTsKIAogIyBodHRwczov
L2hleWNhbS5naXRodWIuaW8vd2ViaWRsLyNkZm4tZGljdGlvbmFyeS1tZW1iZXIKQEAgLTE4NSw3
ICsxNzYsNyBAQCBzdHJ1Y3QoIElETERpY3Rpb25hcnlNZW1iZXIgPT4gewogICAgIHR5cGUgPT4g
J0lETFR5cGUnLAogICAgIGlzUmVxdWlyZWQgPT4gJyQnLAogICAgIGRlZmF1bHQgPT4gJyQnLAot
ICAgIGV4dGVuZGVkQXR0cmlidXRlcyA9PiAnJCcsCisgICAgZXh0ZW5kZWRBdHRyaWJ1dGVzID0+
ICclJywKIH0pOwogCiAjIGh0dHBzOi8vaGV5Y2FtLmdpdGh1Yi5pby93ZWJpZGwvI2lkbC1kaWN0
aW9uYXJpZXMKQEAgLTE5NCwxNCArMTg1LDE0IEBAIHN0cnVjdCggSURMRGljdGlvbmFyeSA9PiB7
CiAgICAgcGFyZW50VHlwZSA9PiAnSURMVHlwZScsCiAgICAgbWVtYmVycyA9PiAnQCcsICMgTGlz
dCBvZiAnSURMRGljdGlvbmFyeU1lbWJlcicKICAgICBpc1BhcnRpYWwgPT4gJyQnLCAjIFVzZWQg
Zm9yIHBhcnRpYWwgZGljdGlvbmFyaWVzCi0gICAgZXh0ZW5kZWRBdHRyaWJ1dGVzID0+ICckJywK
KyAgICBleHRlbmRlZEF0dHJpYnV0ZXMgPT4gJyUnLAogfSk7CiAKICMgaHR0cHM6Ly9oZXljYW0u
Z2l0aHViLmlvL3dlYmlkbC8jaWRsLWNhbGxiYWNrLWZ1bmN0aW9ucwogc3RydWN0KCBJRExDYWxs
YmFja0Z1bmN0aW9uID0+IHsKICAgICB0eXBlID0+ICckJywKICAgICBvcGVyYXRpb24gPT4gJ0lE
TE9wZXJhdGlvbicsCi0gICAgZXh0ZW5kZWRBdHRyaWJ1dGVzID0+ICckJywKKyAgICBleHRlbmRl
ZEF0dHJpYnV0ZXMgPT4gJyUnLAogfSk7CiAKICMgaHR0cHM6Ly9oZXljYW0uZ2l0aHViLmlvL3dl
YmlkbC8jaWRsLW5hbWVzcGFjZXMKQEAgLTIxMCwxNCArMjAxLDE0IEBAIHN0cnVjdCggSURMTmFt
ZXNwYWNlID0+IHsKICAgICBvcGVyYXRpb25zID0+ICdAJywgIyBMaXN0IG9mICdJRExPcGVyYXRp
b24nCiAgICAgYXR0cmlidXRlcyA9PiAnQCcsICMgTGlzdCBvZiAnSURMQXR0cmlidXRlJwogICAg
IGlzUGFydGlhbCA9PiAnJCcsICMgVXNlZCBmb3IgcGFydGlhbCBuYW1lc3BhY2VzCi0gICAgZXh0
ZW5kZWRBdHRyaWJ1dGVzID0+ICckJywKKyAgICBleHRlbmRlZEF0dHJpYnV0ZXMgPT4gJyUnLAog
fSk7CiAKICMgaHR0cHM6Ly9oZXljYW0uZ2l0aHViLmlvL3dlYmlkbC8jaW5jbHVkZXMtc3RhdGVt
ZW50CiBzdHJ1Y3QoIElETEluY2x1ZGVzU3RhdGVtZW50ID0+IHsKICAgICBpbnRlcmZhY2VJZGVu
dGlmaWVyID0+ICckJywKICAgICBtaXhpbklkZW50aWZpZXIgPT4gJyQnLAotICAgIGV4dGVuZGVk
QXR0cmlidXRlcyA9PiAnJCcsCisgICAgZXh0ZW5kZWRBdHRyaWJ1dGVzID0+ICclJywKIH0pOwog
CiAjIGh0dHBzOi8vaGV5Y2FtLmdpdGh1Yi5pby93ZWJpZGwvI2lkbC10eXBlZGVmcwpAQCAtNTk5
LDExICs1OTAsOCBAQCBzdWIgY2xvbmVPcGVyYXRpb24KIAogICAgICRjbG9uZWRPcGVyYXRpb24t
PmlzQ29uc3RydWN0b3IoJG9wZXJhdGlvbi0+aXNDb25zdHJ1Y3Rvcik7CiAgICAgJGNsb25lZE9w
ZXJhdGlvbi0+aXNTdGF0aWMoJG9wZXJhdGlvbi0+aXNTdGF0aWMpOwotICAgICRjbG9uZWRPcGVy
YXRpb24tPmlzSXRlcmFibGUoJG9wZXJhdGlvbi0+aXNJdGVyYWJsZSk7CiAgICAgJGNsb25lZE9w
ZXJhdGlvbi0+aXNTZXJpYWxpemVyKCRvcGVyYXRpb24tPmlzU2VyaWFsaXplcik7CiAgICAgJGNs
b25lZE9wZXJhdGlvbi0+aXNTdHJpbmdpZmllcigkb3BlcmF0aW9uLT5pc1N0cmluZ2lmaWVyKTsK
LSAgICAkY2xvbmVkT3BlcmF0aW9uLT5pc01hcExpa2UoJG9wZXJhdGlvbi0+aXNNYXBMaWtlKTsK
LSAgICAkY2xvbmVkT3BlcmF0aW9uLT5pc1NldExpa2UoJG9wZXJhdGlvbi0+aXNTZXRMaWtlKTsK
ICAgICAkY2xvbmVkT3BlcmF0aW9uLT5zcGVjaWFscygkb3BlcmF0aW9uLT5zcGVjaWFscyk7CiAK
ICAgICBjb3B5RXh0ZW5kZWRBdHRyaWJ1dGVzKCRjbG9uZWRPcGVyYXRpb24tPmV4dGVuZGVkQXR0
cmlidXRlcywgJG9wZXJhdGlvbi0+ZXh0ZW5kZWRBdHRyaWJ1dGVzKTsKQEAgLTcxNSw5ICs3MDMs
NiBAQCBzdWIgYXBwbHlUeXBlZGVmcwogICAgICAgICAgICAgICAgIGlmICgkZGVmaW5pdGlvbi0+
aXRlcmFibGUtPnZhbHVlVHlwZSkgewogICAgICAgICAgICAgICAgICAgICAkZGVmaW5pdGlvbi0+
aXRlcmFibGUtPnZhbHVlVHlwZSgkc2VsZi0+dHlwZUJ5QXBwbHlpbmdUeXBlZGVmcygkZGVmaW5p
dGlvbi0+aXRlcmFibGUtPnZhbHVlVHlwZSkpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICBmb3JlYWNoIG15ICRvcGVyYXRpb24gKEB7JGRlZmluaXRpb24tPml0ZXJhYmxlLT5v
cGVyYXRpb25zfSkgewotICAgICAgICAgICAgICAgICAgICAkc2VsZi0+YXBwbHlUeXBlZGVmc1Rv
T3BlcmF0aW9uKCRvcGVyYXRpb24pOwotICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIGlmICgkZGVmaW5pdGlvbi0+YXN5bmNJdGVyYWJsZSkgewogICAgICAgICAg
ICAgICAgIGlmICgkZGVmaW5pdGlvbi0+YXN5bmNJdGVyYWJsZS0+a2V5VHlwZSkgewpAQCAtNzM3
LDIzICs3MjIsMTEgQEAgc3ViIGFwcGx5VHlwZWRlZnMKICAgICAgICAgICAgICAgICBpZiAoJGRl
ZmluaXRpb24tPm1hcExpa2UtPnZhbHVlVHlwZSkgewogICAgICAgICAgICAgICAgICAgICAkZGVm
aW5pdGlvbi0+bWFwTGlrZS0+dmFsdWVUeXBlKCRzZWxmLT50eXBlQnlBcHBseWluZ1R5cGVkZWZz
KCRkZWZpbml0aW9uLT5tYXBMaWtlLT52YWx1ZVR5cGUpKTsKICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgZm9yZWFjaCBteSAkYXR0cmlidXRlIChAeyRkZWZpbml0aW9uLT5tYXBM
aWtlLT5hdHRyaWJ1dGVzfSkgewotICAgICAgICAgICAgICAgICAgICAkYXR0cmlidXRlLT50eXBl
KCRzZWxmLT50eXBlQnlBcHBseWluZ1R5cGVkZWZzKCRhdHRyaWJ1dGUtPnR5cGUpKTsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZm9yZWFjaCBteSAkb3BlcmF0aW9uIChAeyRk
ZWZpbml0aW9uLT5tYXBMaWtlLT5vcGVyYXRpb25zfSkgewotICAgICAgICAgICAgICAgICAgICAk
c2VsZi0+YXBwbHlUeXBlZGVmc1RvT3BlcmF0aW9uKCRvcGVyYXRpb24pOwotICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmICgkZGVmaW5pdGlvbi0+c2V0TGlr
ZSkgewogICAgICAgICAgICAgICAgIGlmICgkZGVmaW5pdGlvbi0+c2V0TGlrZS0+aXRlbVR5cGUp
IHsKICAgICAgICAgICAgICAgICAgICAgJGRlZmluaXRpb24tPnNldExpa2UtPml0ZW1UeXBlKCRz
ZWxmLT50eXBlQnlBcHBseWluZ1R5cGVkZWZzKCRkZWZpbml0aW9uLT5zZXRMaWtlLT5pdGVtVHlw
ZSkpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBmb3JlYWNoIG15ICRhdHRy
aWJ1dGUgKEB7JGRlZmluaXRpb24tPnNldExpa2UtPmF0dHJpYnV0ZXN9KSB7Ci0gICAgICAgICAg
ICAgICAgICAgICRhdHRyaWJ1dGUtPnR5cGUoJHNlbGYtPnR5cGVCeUFwcGx5aW5nVHlwZWRlZnMo
JGF0dHJpYnV0ZS0+dHlwZSkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBm
b3JlYWNoIG15ICRvcGVyYXRpb24gKEB7JGRlZmluaXRpb24tPnNldExpa2UtPm9wZXJhdGlvbnN9
KSB7Ci0gICAgICAgICAgICAgICAgICAgICRzZWxmLT5hcHBseVR5cGVkZWZzVG9PcGVyYXRpb24o
JG9wZXJhdGlvbik7Ci0gICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9
IGVsc2lmIChyZWYoJGRlZmluaXRpb24pIGVxICJJRExEaWN0aW9uYXJ5IikgewogICAgICAgICAg
ICAgZm9yZWFjaCBteSAkbWVtYmVyIChAeyRkZWZpbml0aW9uLT5tZW1iZXJzfSkgewpAQCAtMTMx
NywxMCArMTI5MCwxMCBAQCBzdWIgcGFyc2VQYXJ0aWFsSW50ZXJmYWNlTWVtYmVyCiAgICAgICAg
IHJldHVybiAkc2VsZi0+cGFyc2VBdHRyaWJ1dGVSZXN0KCRleHRlbmRlZEF0dHJpYnV0ZUxpc3Qp
OwogICAgIH0KICAgICBpZiAoJG5leHQtPnZhbHVlKCkgZXEgIm1hcGxpa2UiKSB7Ci0gICAgICAg
IHJldHVybiAkc2VsZi0+cGFyc2VNYXBMaWtlUmVzdCgkZXh0ZW5kZWRBdHRyaWJ1dGVMaXN0LCAw
KTsKKyAgICAgICAgcmV0dXJuICRzZWxmLT5wYXJzZU1hcExpa2VSZXN0KCRleHRlbmRlZEF0dHJp
YnV0ZUxpc3QpOwogICAgIH0KICAgICBpZiAoJG5leHQtPnZhbHVlKCkgZXEgInNldGxpa2UiKSB7
Ci0gICAgICAgIHJldHVybiAkc2VsZi0+cGFyc2VTZXRMaWtlUmVzdCgkZXh0ZW5kZWRBdHRyaWJ1
dGVMaXN0LCAwKTsKKyAgICAgICAgcmV0dXJuICRzZWxmLT5wYXJzZVNldExpa2VSZXN0KCRleHRl
bmRlZEF0dHJpYnV0ZUxpc3QpOwogICAgIH0KICAgICBpZiAoJG5leHQtPnZhbHVlKCkgZXEgImlu
aGVyaXQiKSB7CiAgICAgICAgIHJldHVybiAkc2VsZi0+cGFyc2VJbmhlcml0QXR0cmlidXRlKCRl
eHRlbmRlZEF0dHJpYnV0ZUxpc3QpOwpAQCAtMTc2MywxMCArMTczNiwxNCBAQCBzdWIgcGFyc2VS
ZWFkT25seU1lbWJlcgogICAgICAgICAgICAgcmV0dXJuICRhdHRyaWJ1dGU7CiAgICAgICAgIH0K
ICAgICAgICAgaWYgKCRuZXh0LT52YWx1ZSgpIGVxICJtYXBsaWtlIikgewotICAgICAgICAgICAg
cmV0dXJuICRzZWxmLT5wYXJzZU1hcExpa2VSZXN0KCRleHRlbmRlZEF0dHJpYnV0ZUxpc3QsIDEp
OworICAgICAgICAgICAgbXkgJG1hcExpa2UgPSAkc2VsZi0+cGFyc2VNYXBMaWtlUmVzdCgkZXh0
ZW5kZWRBdHRyaWJ1dGVMaXN0KTsKKyAgICAgICAgICAgICRtYXBMaWtlLT5pc1JlYWRPbmx5KDEp
OworICAgICAgICAgICAgcmV0dXJuICRtYXBMaWtlOwogICAgICAgICB9CiAgICAgICAgIGlmICgk
bmV4dC0+dmFsdWUoKSBlcSAic2V0bGlrZSIpIHsKLSAgICAgICAgICAgIHJldHVybiAkc2VsZi0+
cGFyc2VTZXRMaWtlUmVzdCgkZXh0ZW5kZWRBdHRyaWJ1dGVMaXN0LCAxKTsKKyAgICAgICAgICAg
IG15ICRzZXRMaWtlID0gJHNlbGYtPnBhcnNlU2V0TGlrZVJlc3QoJGV4dGVuZGVkQXR0cmlidXRl
TGlzdCk7CisgICAgICAgICAgICAkc2V0TGlrZS0+aXNSZWFkT25seSgxKTsKKyAgICAgICAgICAg
IHJldHVybiAkc2V0TGlrZTsKICAgICAgICAgfQogICAgIH0KICAgICAkc2VsZi0+YXNzZXJ0VW5l
eHBlY3RlZFRva2VuKCRuZXh0LT52YWx1ZSgpLCBfX0xJTkVfXyk7CkBAIC0yMjA3LDM1NSArMjE4
NCw4NCBAQCBzdWIgcGFyc2VJdGVyYWJsZVJlc3QKICAgICBteSAkbmV4dCA9ICRzZWxmLT5uZXh0
VG9rZW4oKTsKICAgICBpZiAoJG5leHQtPnZhbHVlKCkgZXEgIml0ZXJhYmxlIikgewogICAgICAg
ICAkc2VsZi0+YXNzZXJ0VG9rZW5WYWx1ZSgkc2VsZi0+Z2V0VG9rZW4oKSwgIml0ZXJhYmxlIiwg
X19MSU5FX18pOwotICAgICAgICBteSAkaXRlcmFibGVOb2RlID0gJHNlbGYtPnBhcnNlT3B0aW9u
YWxJdGVyYWJsZUludGVyZmFjZSgkZXh0ZW5kZWRBdHRyaWJ1dGVMaXN0KTsKLSAgICAgICAgJHNl
bGYtPmFzc2VydFRva2VuVmFsdWUoJHNlbGYtPmdldFRva2VuKCksICI7IiwgX19MSU5FX18pOwot
ICAgICAgICByZXR1cm4gJGl0ZXJhYmxlTm9kZTsKLSAgICB9Ci0gICAgJHNlbGYtPmFzc2VydFVu
ZXhwZWN0ZWRUb2tlbigkbmV4dC0+dmFsdWUoKSwgX19MSU5FX18pOwotfQogCi1zdWIgcGFyc2VP
cHRpb25hbEl0ZXJhYmxlSW50ZXJmYWNlCi17Ci0gICAgbXkgJHNlbGYgPSBzaGlmdDsKLSAgICBt
eSAkZXh0ZW5kZWRBdHRyaWJ1dGVMaXN0ID0gc2hpZnQ7CisgICAgICAgIG15ICRpdGVyYWJsZSA9
IElETEl0ZXJhYmxlLT5uZXcoKTsKIAotICAgIG15ICRuZXdEYXRhTm9kZSA9IElETEl0ZXJhYmxl
LT5uZXcoKTsKKyAgICAgICAgJHNlbGYtPmFzc2VydFRva2VuVmFsdWUoJHNlbGYtPmdldFRva2Vu
KCksICI8IiwgX19MSU5FX18pOworICAgICAgICBteSAkdHlwZTEgPSAkc2VsZi0+cGFyc2VUeXBl
V2l0aEV4dGVuZGVkQXR0cmlidXRlcygpOwogCi0gICAgJHNlbGYtPmFzc2VydEV4dGVuZGVkQXR0
cmlidXRlc1ZhbGlkRm9yQ29udGV4dCgkZXh0ZW5kZWRBdHRyaWJ1dGVMaXN0LCAiaXRlcmFibGUi
KTsKLSAgICAkbmV3RGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcygkZXh0ZW5kZWRBdHRyaWJ1
dGVMaXN0KTsKKyAgICAgICAgaWYgKCRzZWxmLT5uZXh0VG9rZW4oKS0+dmFsdWUoKSBlcSAiLCIp
IHsKKyAgICAgICAgICAgICRzZWxmLT5hc3NlcnRUb2tlblZhbHVlKCRzZWxmLT5nZXRUb2tlbigp
LCAiLCIsIF9fTElORV9fKTsKIAotICAgICRzZWxmLT5hc3NlcnRUb2tlblZhbHVlKCRzZWxmLT5n
ZXRUb2tlbigpLCAiPCIsIF9fTElORV9fKTsKLSAgICBteSAkdHlwZTEgPSAkc2VsZi0+cGFyc2VU
eXBlV2l0aEV4dGVuZGVkQXR0cmlidXRlcygpOworICAgICAgICAgICAgbXkgJHR5cGUyID0gJHNl
bGYtPnBhcnNlVHlwZVdpdGhFeHRlbmRlZEF0dHJpYnV0ZXMoKTsKKyAgICAgICAgICAgICRpdGVy
YWJsZS0+aXNLZXlWYWx1ZSgxKTsKKyAgICAgICAgICAgICRpdGVyYWJsZS0+a2V5VHlwZSgkdHlw
ZTEpOworICAgICAgICAgICAgJGl0ZXJhYmxlLT52YWx1ZVR5cGUoJHR5cGUyKTsKKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICRpdGVyYWJsZS0+aXNLZXlWYWx1ZSgwKTsKKyAgICAgICAg
ICAgICRpdGVyYWJsZS0+dmFsdWVUeXBlKCR0eXBlMSk7CisgICAgICAgIH0KKyAgICAgICAgJHNl
bGYtPmFzc2VydFRva2VuVmFsdWUoJHNlbGYtPmdldFRva2VuKCksICI+IiwgX19MSU5FX18pOwor
ICAgICAgICAkc2VsZi0+YXNzZXJ0VG9rZW5WYWx1ZSgkc2VsZi0+Z2V0VG9rZW4oKSwgIjsiLCBf
X0xJTkVfXyk7CiAKLSAgICBpZiAoJHNlbGYtPm5leHRUb2tlbigpLT52YWx1ZSgpIGVxICIsIikg
ewotICAgICAgICAkc2VsZi0+YXNzZXJ0VG9rZW5WYWx1ZSgkc2VsZi0+Z2V0VG9rZW4oKSwgIiwi
LCBfX0xJTkVfXyk7CisgICAgICAgICRzZWxmLT5hc3NlcnRFeHRlbmRlZEF0dHJpYnV0ZXNWYWxp
ZEZvckNvbnRleHQoJGV4dGVuZGVkQXR0cmlidXRlTGlzdCwgIml0ZXJhYmxlIik7CisgICAgICAg
ICRpdGVyYWJsZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzKCRleHRlbmRlZEF0dHJpYnV0ZUxpc3QpOwog
Ci0gICAgICAgIG15ICR0eXBlMiA9ICRzZWxmLT5wYXJzZVR5cGVXaXRoRXh0ZW5kZWRBdHRyaWJ1
dGVzKCk7Ci0gICAgICAgICRuZXdEYXRhTm9kZS0+aXNLZXlWYWx1ZSgxKTsKLSAgICAgICAgJG5l
d0RhdGFOb2RlLT5rZXlUeXBlKCR0eXBlMSk7Ci0gICAgICAgICRuZXdEYXRhTm9kZS0+dmFsdWVU
eXBlKCR0eXBlMik7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgJG5ld0RhdGFOb2RlLT5pc0tleVZh
bHVlKDApOwotICAgICAgICAkbmV3RGF0YU5vZGUtPnZhbHVlVHlwZSgkdHlwZTEpOworICAgICAg
ICByZXR1cm4gJGl0ZXJhYmxlOwogICAgIH0KLSAgICAkc2VsZi0+YXNzZXJ0VG9rZW5WYWx1ZSgk
c2VsZi0+Z2V0VG9rZW4oKSwgIj4iLCBfX0xJTkVfXyk7Ci0KLSAgICAjIEZJWE1FOiBTeW50aGV0
aWMgb3BlcmF0aW9ucyBzaG91bGQgbm90IGJlIGFkZGVkIGR1cmluZyBwYXJzaW5nLiBJbnN0ZWFk
LCB0aGUgQ29kZUdlbmVyYXRvcgotICAgICMgc2hvdWxkIGJlIHJlc3BvbnNpYmxlIGZvciB0aGVt
LgotCi0gICAgbXkgJHN5bWJvbEl0ZXJhdG9yT3BlcmF0aW9uID0gSURMT3BlcmF0aW9uLT5uZXco
KTsKLSAgICAkc3ltYm9sSXRlcmF0b3JPcGVyYXRpb24tPm5hbWUoIltTeW1ib2wuSXRlcmF0b3Jd
Iik7Ci0gICAgJHN5bWJvbEl0ZXJhdG9yT3BlcmF0aW9uLT5leHRlbmRlZEF0dHJpYnV0ZXMoJGV4
dGVuZGVkQXR0cmlidXRlTGlzdCk7Ci0gICAgJHN5bWJvbEl0ZXJhdG9yT3BlcmF0aW9uLT5pc0l0
ZXJhYmxlKDEpOwotCi0gICAgbXkgJGVudHJpZXNPcGVyYXRpb24gPSBJRExPcGVyYXRpb24tPm5l
dygpOwotICAgICRlbnRyaWVzT3BlcmF0aW9uLT5uYW1lKCJlbnRyaWVzIik7Ci0gICAgJGVudHJp
ZXNPcGVyYXRpb24tPmV4dGVuZGVkQXR0cmlidXRlcygkZXh0ZW5kZWRBdHRyaWJ1dGVMaXN0KTsK
LSAgICAkZW50cmllc09wZXJhdGlvbi0+aXNJdGVyYWJsZSgxKTsKLQotICAgIG15ICRrZXlzT3Bl
cmF0aW9uID0gSURMT3BlcmF0aW9uLT5uZXcoKTsKLSAgICAka2V5c09wZXJhdGlvbi0+bmFtZSgi
a2V5cyIpOwotICAgICRrZXlzT3BlcmF0aW9uLT5leHRlbmRlZEF0dHJpYnV0ZXMoJGV4dGVuZGVk
QXR0cmlidXRlTGlzdCk7Ci0gICAgJGtleXNPcGVyYXRpb24tPmlzSXRlcmFibGUoMSk7Ci0KLSAg
ICBteSAkdmFsdWVzT3BlcmF0aW9uID0gSURMT3BlcmF0aW9uLT5uZXcoKTsKLSAgICAkdmFsdWVz
T3BlcmF0aW9uLT5uYW1lKCJ2YWx1ZXMiKTsKLSAgICAkdmFsdWVzT3BlcmF0aW9uLT5leHRlbmRl
ZEF0dHJpYnV0ZXMoJGV4dGVuZGVkQXR0cmlidXRlTGlzdCk7Ci0gICAgJHZhbHVlc09wZXJhdGlv
bi0+aXNJdGVyYWJsZSgxKTsKLQotICAgIG15ICRmb3JFYWNoT3BlcmF0aW9uID0gSURMT3BlcmF0
aW9uLT5uZXcoKTsKLSAgICAkZm9yRWFjaE9wZXJhdGlvbi0+bmFtZSgiZm9yRWFjaCIpOwotICAg
ICRmb3JFYWNoT3BlcmF0aW9uLT5leHRlbmRlZEF0dHJpYnV0ZXMoJGV4dGVuZGVkQXR0cmlidXRl
TGlzdCk7Ci0gICAgJGZvckVhY2hPcGVyYXRpb24tPmlzSXRlcmFibGUoMSk7Ci0gICAgbXkgJGZv
ckVhY2hBcmd1bWVudCA9IElETEFyZ3VtZW50LT5uZXcoKTsKLSAgICAkZm9yRWFjaEFyZ3VtZW50
LT5uYW1lKCJjYWxsYmFjayIpOwotICAgICRmb3JFYWNoQXJndW1lbnQtPnR5cGUobWFrZVNpbXBs
ZVR5cGUoImFueSIpKTsKLSAgICBwdXNoKEB7JGZvckVhY2hPcGVyYXRpb24tPmFyZ3VtZW50c30s
ICgkZm9yRWFjaEFyZ3VtZW50KSk7Ci0KLSAgICBwdXNoKEB7JG5ld0RhdGFOb2RlLT5vcGVyYXRp
b25zfSwgJHN5bWJvbEl0ZXJhdG9yT3BlcmF0aW9uKTsKLSAgICBwdXNoKEB7JG5ld0RhdGFOb2Rl
LT5vcGVyYXRpb25zfSwgJGVudHJpZXNPcGVyYXRpb24pOwotICAgIHB1c2goQHskbmV3RGF0YU5v
ZGUtPm9wZXJhdGlvbnN9LCAka2V5c09wZXJhdGlvbik7Ci0gICAgcHVzaChAeyRuZXdEYXRhTm9k
ZS0+b3BlcmF0aW9uc30sICR2YWx1ZXNPcGVyYXRpb24pOwotICAgIHB1c2goQHskbmV3RGF0YU5v
ZGUtPm9wZXJhdGlvbnN9LCAkZm9yRWFjaE9wZXJhdGlvbik7Ci0KLSAgICByZXR1cm4gJG5ld0Rh
dGFOb2RlOworICAgICRzZWxmLT5hc3NlcnRVbmV4cGVjdGVkVG9rZW4oJG5leHQtPnZhbHVlKCks
IF9fTElORV9fKTsKIH0KIAogc3ViIHBhcnNlTWFwTGlrZVJlc3QKIHsKICAgICBteSAkc2VsZiA9
IHNoaWZ0OwogICAgIG15ICRleHRlbmRlZEF0dHJpYnV0ZUxpc3QgPSBzaGlmdDsKLSAgICBteSAk
aXNSZWFkT25seSA9IHNoaWZ0OwogCiAgICAgbXkgJG5leHQgPSAkc2VsZi0+bmV4dFRva2VuKCk7
CiAgICAgaWYgKCRuZXh0LT52YWx1ZSgpIGVxICJtYXBsaWtlIikgewogICAgICAgICAkc2VsZi0+
YXNzZXJ0VG9rZW5WYWx1ZSgkc2VsZi0+Z2V0VG9rZW4oKSwgIm1hcGxpa2UiLCBfX0xJTkVfXyk7
Ci0gICAgICAgIG15ICRtYXBMaWtlTm9kZSA9ICRzZWxmLT5wYXJzZU1hcExpa2VQcm9wZXJ0aWVz
KCRleHRlbmRlZEF0dHJpYnV0ZUxpc3QsICRpc1JlYWRPbmx5KTsKKworICAgICAgICBteSAkbWFw
bGlrZSA9IElETE1hcExpa2UtPm5ldygpOworCisgICAgICAgICRzZWxmLT5hc3NlcnRUb2tlblZh
bHVlKCRzZWxmLT5nZXRUb2tlbigpLCAiPCIsIF9fTElORV9fKTsKKyAgICAgICAgJG1hcGxpa2Ut
PmtleVR5cGUoJHNlbGYtPnBhcnNlVHlwZVdpdGhFeHRlbmRlZEF0dHJpYnV0ZXMoKSk7CisgICAg
ICAgICRzZWxmLT5hc3NlcnRUb2tlblZhbHVlKCRzZWxmLT5nZXRUb2tlbigpLCAiLCIsIF9fTElO
RV9fKTsKKyAgICAgICAgJG1hcGxpa2UtPnZhbHVlVHlwZSgkc2VsZi0+cGFyc2VUeXBlV2l0aEV4
dGVuZGVkQXR0cmlidXRlcygpKTsKKyAgICAgICAgJHNlbGYtPmFzc2VydFRva2VuVmFsdWUoJHNl
bGYtPmdldFRva2VuKCksICI+IiwgX19MSU5FX18pOwogICAgICAgICAkc2VsZi0+YXNzZXJ0VG9r
ZW5WYWx1ZSgkc2VsZi0+Z2V0VG9rZW4oKSwgIjsiLCBfX0xJTkVfXyk7Ci0gICAgICAgIHJldHVy
biAkbWFwTGlrZU5vZGU7Ci0gICAgfQotICAgICRzZWxmLT5hc3NlcnRVbmV4cGVjdGVkVG9rZW4o
JG5leHQtPnZhbHVlKCksIF9fTElORV9fKTsKLX0KIAotc3ViIHBhcnNlTWFwTGlrZVByb3BlcnRp
ZXMKLXsKLSAgICBteSAkc2VsZiA9IHNoaWZ0OwotICAgIG15ICRleHRlbmRlZEF0dHJpYnV0ZUxp
c3QgPSBzaGlmdDsKLSAgICBteSAkaXNSZWFkT25seSA9IHNoaWZ0OwotCi0gICAgbXkgJG1hcGxp
a2UgPSBJRExNYXBMaWtlLT5uZXcoKTsKLSAgICAkbWFwbGlrZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVz
KCRleHRlbmRlZEF0dHJpYnV0ZUxpc3QpOwotICAgICRtYXBsaWtlLT5pc1JlYWRPbmx5KCRpc1Jl
YWRPbmx5KTsKLQotICAgICRzZWxmLT5hc3NlcnRUb2tlblZhbHVlKCRzZWxmLT5nZXRUb2tlbigp
LCAiPCIsIF9fTElORV9fKTsKLSAgICAkbWFwbGlrZS0+a2V5VHlwZSgkc2VsZi0+cGFyc2VUeXBl
V2l0aEV4dGVuZGVkQXR0cmlidXRlcygpKTsKLSAgICAkc2VsZi0+YXNzZXJ0VG9rZW5WYWx1ZSgk
c2VsZi0+Z2V0VG9rZW4oKSwgIiwiLCBfX0xJTkVfXyk7Ci0gICAgJG1hcGxpa2UtPnZhbHVlVHlw
ZSgkc2VsZi0+cGFyc2VUeXBlV2l0aEV4dGVuZGVkQXR0cmlidXRlcygpKTsKLSAgICAkc2VsZi0+
YXNzZXJ0VG9rZW5WYWx1ZSgkc2VsZi0+Z2V0VG9rZW4oKSwgIj4iLCBfX0xJTkVfXyk7Ci0KLSAg
ICAjIEZJWE1FOiBTeW50aGV0aWMgb3BlcmF0aW9ucyBzaG91bGQgbm90IGJlIGFkZGVkIGR1cmlu
ZyBwYXJzaW5nLiBJbnN0ZWFkLCB0aGUgQ29kZUdlbmVyYXRvcgotICAgICMgc2hvdWxkIGJlIHJl
c3BvbnNpYmxlIGZvciB0aGVtLgotCi0gICAgbXkgJG5vdEVudW1lcmFibGVFeHRlbmRlZEF0dHJp
YnV0ZUxpc3QgPSAkZXh0ZW5kZWRBdHRyaWJ1dGVMaXN0OwotICAgICRub3RFbnVtZXJhYmxlRXh0
ZW5kZWRBdHRyaWJ1dGVMaXN0LT57Tm90RW51bWVyYWJsZX0gPSAxOwotCi0gICAgbXkgJHNpemVB
dHRyaWJ1dGUgPSBJRExBdHRyaWJ1dGUtPm5ldygpOwotICAgICRzaXplQXR0cmlidXRlLT5uYW1l
KCJzaXplIik7Ci0gICAgJHNpemVBdHRyaWJ1dGUtPmlzTWFwTGlrZSgxKTsKLSAgICAkc2l6ZUF0
dHJpYnV0ZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzKCRleHRlbmRlZEF0dHJpYnV0ZUxpc3QpOwotICAg
ICRzaXplQXR0cmlidXRlLT5pc1JlYWRPbmx5KDEpOwotICAgICRzaXplQXR0cmlidXRlLT50eXBl
KG1ha2VTaW1wbGVUeXBlKCJhbnkiKSk7Ci0gICAgcHVzaChAeyRtYXBsaWtlLT5hdHRyaWJ1dGVz
fSwgJHNpemVBdHRyaWJ1dGUpOwotCi0gICAgbXkgJGdldE9wZXJhdGlvbiA9IElETE9wZXJhdGlv
bi0+bmV3KCk7Ci0gICAgJGdldE9wZXJhdGlvbi0+bmFtZSgiZ2V0Iik7Ci0gICAgJGdldE9wZXJh
dGlvbi0+aXNNYXBMaWtlKDEpOwotICAgIG15ICRnZXRBcmd1bWVudCA9IElETEFyZ3VtZW50LT5u
ZXcoKTsKLSAgICAkZ2V0QXJndW1lbnQtPm5hbWUoImtleSIpOwotICAgICRnZXRBcmd1bWVudC0+
dHlwZSgkbWFwbGlrZS0+a2V5VHlwZSk7Ci0gICAgJGdldEFyZ3VtZW50LT5leHRlbmRlZEF0dHJp
YnV0ZXMoJGV4dGVuZGVkQXR0cmlidXRlTGlzdCk7Ci0gICAgcHVzaChAeyRnZXRPcGVyYXRpb24t
PmFyZ3VtZW50c30sICgkZ2V0QXJndW1lbnQpKTsKLSAgICAkZ2V0T3BlcmF0aW9uLT5leHRlbmRl
ZEF0dHJpYnV0ZXMoJG5vdEVudW1lcmFibGVFeHRlbmRlZEF0dHJpYnV0ZUxpc3QpOwotICAgICRn
ZXRPcGVyYXRpb24tPnR5cGUobWFrZVNpbXBsZVR5cGUoImFueSIpKTsKLQotICAgIG15ICRoYXNP
cGVyYXRpb24gPSBJRExPcGVyYXRpb24tPm5ldygpOwotICAgICRoYXNPcGVyYXRpb24tPm5hbWUo
ImhhcyIpOwotICAgICRoYXNPcGVyYXRpb24tPmlzTWFwTGlrZSgxKTsKLSAgICBteSAkaGFzQXJn
dW1lbnQgPSBJRExBcmd1bWVudC0+bmV3KCk7Ci0gICAgJGhhc0FyZ3VtZW50LT5uYW1lKCJrZXki
KTsKLSAgICAkaGFzQXJndW1lbnQtPnR5cGUoJG1hcGxpa2UtPmtleVR5cGUpOwotICAgICRoYXNB
cmd1bWVudC0+ZXh0ZW5kZWRBdHRyaWJ1dGVzKCRleHRlbmRlZEF0dHJpYnV0ZUxpc3QpOwotICAg
IHB1c2goQHskaGFzT3BlcmF0aW9uLT5hcmd1bWVudHN9LCAoJGhhc0FyZ3VtZW50KSk7Ci0gICAg
JGhhc09wZXJhdGlvbi0+ZXh0ZW5kZWRBdHRyaWJ1dGVzKCRub3RFbnVtZXJhYmxlRXh0ZW5kZWRB
dHRyaWJ1dGVMaXN0KTsKLSAgICAkaGFzT3BlcmF0aW9uLT50eXBlKG1ha2VTaW1wbGVUeXBlKCJh
bnkiKSk7Ci0KLSAgICBteSAkZW50cmllc09wZXJhdGlvbiA9IElETE9wZXJhdGlvbi0+bmV3KCk7
Ci0gICAgJGVudHJpZXNPcGVyYXRpb24tPm5hbWUoImVudHJpZXMiKTsKLSAgICAkZW50cmllc09w
ZXJhdGlvbi0+aXNNYXBMaWtlKDEpOwotICAgICRlbnRyaWVzT3BlcmF0aW9uLT5leHRlbmRlZEF0
dHJpYnV0ZXMoJG5vdEVudW1lcmFibGVFeHRlbmRlZEF0dHJpYnV0ZUxpc3QpOwotICAgICRlbnRy
aWVzT3BlcmF0aW9uLT50eXBlKG1ha2VTaW1wbGVUeXBlKCJhbnkiKSk7Ci0KLSAgICBteSAka2V5
c09wZXJhdGlvbiA9IElETE9wZXJhdGlvbi0+bmV3KCk7Ci0gICAgJGtleXNPcGVyYXRpb24tPm5h
bWUoImtleXMiKTsKLSAgICAka2V5c09wZXJhdGlvbi0+aXNNYXBMaWtlKDEpOwotICAgICRrZXlz
T3BlcmF0aW9uLT5leHRlbmRlZEF0dHJpYnV0ZXMoJG5vdEVudW1lcmFibGVFeHRlbmRlZEF0dHJp
YnV0ZUxpc3QpOwotICAgICRrZXlzT3BlcmF0aW9uLT50eXBlKG1ha2VTaW1wbGVUeXBlKCJhbnki
KSk7Ci0KLSAgICBteSAkdmFsdWVzT3BlcmF0aW9uID0gSURMT3BlcmF0aW9uLT5uZXcoKTsKLSAg
ICAkdmFsdWVzT3BlcmF0aW9uLT5uYW1lKCJ2YWx1ZXMiKTsKLSAgICAkdmFsdWVzT3BlcmF0aW9u
LT5pc01hcExpa2UoMSk7Ci0gICAgJHZhbHVlc09wZXJhdGlvbi0+ZXh0ZW5kZWRBdHRyaWJ1dGVz
KCRleHRlbmRlZEF0dHJpYnV0ZUxpc3QpOwotICAgICR2YWx1ZXNPcGVyYXRpb24tPmV4dGVuZGVk
QXR0cmlidXRlcy0+e05vdEVudW1lcmFibGV9ID0gMTsKLSAgICAkdmFsdWVzT3BlcmF0aW9uLT50
eXBlKG1ha2VTaW1wbGVUeXBlKCJhbnkiKSk7Ci0KLSAgICBteSAkZm9yRWFjaE9wZXJhdGlvbiA9
IElETE9wZXJhdGlvbi0+bmV3KCk7Ci0gICAgJGZvckVhY2hPcGVyYXRpb24tPm5hbWUoImZvckVh
Y2giKTsKLSAgICAkZm9yRWFjaE9wZXJhdGlvbi0+aXNNYXBMaWtlKDEpOwotICAgICRmb3JFYWNo
T3BlcmF0aW9uLT5leHRlbmRlZEF0dHJpYnV0ZXMoe30pOwotICAgICRmb3JFYWNoT3BlcmF0aW9u
LT50eXBlKG1ha2VTaW1wbGVUeXBlKCJhbnkiKSk7Ci0gICAgbXkgJGZvckVhY2hBcmd1bWVudCA9
IElETEFyZ3VtZW50LT5uZXcoKTsKLSAgICAkZm9yRWFjaEFyZ3VtZW50LT5uYW1lKCJjYWxsYmFj
ayIpOwotICAgICRmb3JFYWNoQXJndW1lbnQtPnR5cGUobWFrZVNpbXBsZVR5cGUoImFueSIpKTsK
LSAgICAkZm9yRWFjaEFyZ3VtZW50LT5leHRlbmRlZEF0dHJpYnV0ZXMoJGV4dGVuZGVkQXR0cmli
dXRlTGlzdCk7Ci0gICAgcHVzaChAeyRmb3JFYWNoT3BlcmF0aW9uLT5hcmd1bWVudHN9LCAoJGZv
ckVhY2hBcmd1bWVudCkpOwotCi0gICAgcHVzaChAeyRtYXBsaWtlLT5vcGVyYXRpb25zfSwgJGdl
dE9wZXJhdGlvbik7Ci0gICAgcHVzaChAeyRtYXBsaWtlLT5vcGVyYXRpb25zfSwgJGhhc09wZXJh
dGlvbik7Ci0gICAgcHVzaChAeyRtYXBsaWtlLT5vcGVyYXRpb25zfSwgJGVudHJpZXNPcGVyYXRp
b24pOwotICAgIHB1c2goQHskbWFwbGlrZS0+b3BlcmF0aW9uc30sICRrZXlzT3BlcmF0aW9uKTsK
LSAgICBwdXNoKEB7JG1hcGxpa2UtPm9wZXJhdGlvbnN9LCAkdmFsdWVzT3BlcmF0aW9uKTsKLSAg
ICBwdXNoKEB7JG1hcGxpa2UtPm9wZXJhdGlvbnN9LCAkZm9yRWFjaE9wZXJhdGlvbik7Ci0KLSAg
ICByZXR1cm4gJG1hcGxpa2UgaWYgJGlzUmVhZE9ubHk7Ci0KLSAgICBteSAkc2V0T3BlcmF0aW9u
ID0gSURMT3BlcmF0aW9uLT5uZXcoKTsKLSAgICAkc2V0T3BlcmF0aW9uLT5uYW1lKCJzZXQiKTsK
LSAgICAkc2V0T3BlcmF0aW9uLT5pc01hcExpa2UoMSk7Ci0gICAgbXkgJHNldEtleUFyZ3VtZW50
ID0gSURMQXJndW1lbnQtPm5ldygpOwotICAgICRzZXRLZXlBcmd1bWVudC0+bmFtZSgia2V5Iik7
Ci0gICAgJHNldEtleUFyZ3VtZW50LT50eXBlKCRtYXBsaWtlLT5rZXlUeXBlKTsKLSAgICAkc2V0
S2V5QXJndW1lbnQtPmV4dGVuZGVkQXR0cmlidXRlcygkZXh0ZW5kZWRBdHRyaWJ1dGVMaXN0KTsK
LSAgICBteSAkc2V0VmFsdWVBcmd1bWVudCA9IElETEFyZ3VtZW50LT5uZXcoKTsKLSAgICAkc2V0
VmFsdWVBcmd1bWVudC0+bmFtZSgidmFsdWUiKTsKLSAgICAkc2V0VmFsdWVBcmd1bWVudC0+dHlw
ZSgkbWFwbGlrZS0+dmFsdWVUeXBlKTsKLSAgICAkc2V0VmFsdWVBcmd1bWVudC0+ZXh0ZW5kZWRB
dHRyaWJ1dGVzKCRleHRlbmRlZEF0dHJpYnV0ZUxpc3QpOwotICAgIHB1c2goQHskc2V0T3BlcmF0
aW9uLT5hcmd1bWVudHN9LCAoJHNldEtleUFyZ3VtZW50KSk7Ci0gICAgcHVzaChAeyRzZXRPcGVy
YXRpb24tPmFyZ3VtZW50c30sICgkc2V0VmFsdWVBcmd1bWVudCkpOwotICAgICRzZXRPcGVyYXRp
b24tPmV4dGVuZGVkQXR0cmlidXRlcygkbm90RW51bWVyYWJsZUV4dGVuZGVkQXR0cmlidXRlTGlz
dCk7Ci0gICAgJHNldE9wZXJhdGlvbi0+dHlwZShtYWtlU2ltcGxlVHlwZSgiYW55IikpOwotCi0g
ICAgbXkgJGNsZWFyT3BlcmF0aW9uID0gSURMT3BlcmF0aW9uLT5uZXcoKTsKLSAgICAkY2xlYXJP
cGVyYXRpb24tPm5hbWUoImNsZWFyIik7Ci0gICAgJGNsZWFyT3BlcmF0aW9uLT5pc01hcExpa2Uo
MSk7Ci0gICAgJGNsZWFyT3BlcmF0aW9uLT5leHRlbmRlZEF0dHJpYnV0ZXMoJG5vdEVudW1lcmFi
bGVFeHRlbmRlZEF0dHJpYnV0ZUxpc3QpOwotICAgICRjbGVhck9wZXJhdGlvbi0+dHlwZShtYWtl
U2ltcGxlVHlwZSgidW5kZWZpbmVkIikpOwotCi0gICAgbXkgJGRlbGV0ZU9wZXJhdGlvbiA9IElE
TE9wZXJhdGlvbi0+bmV3KCk7Ci0gICAgJGRlbGV0ZU9wZXJhdGlvbi0+bmFtZSgiZGVsZXRlIik7
Ci0gICAgJGRlbGV0ZU9wZXJhdGlvbi0+aXNNYXBMaWtlKDEpOwotICAgIG15ICRkZWxldGVBcmd1
bWVudCA9IElETEFyZ3VtZW50LT5uZXcoKTsKLSAgICAkZGVsZXRlQXJndW1lbnQtPm5hbWUoImtl
eSIpOwotICAgICRkZWxldGVBcmd1bWVudC0+dHlwZSgkbWFwbGlrZS0+a2V5VHlwZSk7Ci0gICAg
JGRlbGV0ZUFyZ3VtZW50LT5leHRlbmRlZEF0dHJpYnV0ZXMoJGV4dGVuZGVkQXR0cmlidXRlTGlz
dCk7Ci0gICAgcHVzaChAeyRkZWxldGVPcGVyYXRpb24tPmFyZ3VtZW50c30sICgkZGVsZXRlQXJn
dW1lbnQpKTsKLSAgICAkZGVsZXRlT3BlcmF0aW9uLT5leHRlbmRlZEF0dHJpYnV0ZXMoJG5vdEVu
dW1lcmFibGVFeHRlbmRlZEF0dHJpYnV0ZUxpc3QpOwotICAgICRkZWxldGVPcGVyYXRpb24tPnR5
cGUobWFrZVNpbXBsZVR5cGUoImFueSIpKTsKLQotICAgIHB1c2goQHskbWFwbGlrZS0+b3BlcmF0
aW9uc30sICRzZXRPcGVyYXRpb24pOwotICAgIHB1c2goQHskbWFwbGlrZS0+b3BlcmF0aW9uc30s
ICRjbGVhck9wZXJhdGlvbik7Ci0gICAgcHVzaChAeyRtYXBsaWtlLT5vcGVyYXRpb25zfSwgJGRl
bGV0ZU9wZXJhdGlvbik7CisgICAgICAgICRzZWxmLT5hc3NlcnRFeHRlbmRlZEF0dHJpYnV0ZXNW
YWxpZEZvckNvbnRleHQoJGV4dGVuZGVkQXR0cmlidXRlTGlzdCwgIm1hcC1saWtlIik7CisgICAg
ICAgICRtYXBsaWtlLT5leHRlbmRlZEF0dHJpYnV0ZXMoJGV4dGVuZGVkQXR0cmlidXRlTGlzdCk7
CiAKLSAgICByZXR1cm4gJG1hcGxpa2U7CisgICAgICAgIHJldHVybiAkbWFwbGlrZTsKKyAgICB9
CisgICAgJHNlbGYtPmFzc2VydFVuZXhwZWN0ZWRUb2tlbigkbmV4dC0+dmFsdWUoKSwgX19MSU5F
X18pOwogfQogCiBzdWIgcGFyc2VTZXRMaWtlUmVzdAogewogICAgIG15ICRzZWxmID0gc2hpZnQ7
CiAgICAgbXkgJGV4dGVuZGVkQXR0cmlidXRlTGlzdCA9IHNoaWZ0OwotICAgIG15ICRpc1JlYWRP
bmx5ID0gc2hpZnQ7CiAKICAgICBteSAkbmV4dCA9ICRzZWxmLT5uZXh0VG9rZW4oKTsKICAgICBp
ZiAoJG5leHQtPnZhbHVlKCkgZXEgInNldGxpa2UiKSB7CiAgICAgICAgICRzZWxmLT5hc3NlcnRU
b2tlblZhbHVlKCRzZWxmLT5nZXRUb2tlbigpLCAic2V0bGlrZSIsIF9fTElORV9fKTsKLSAgICAg
ICAgbXkgJHNldExpa2VOb2RlID0gJHNlbGYtPnBhcnNlU2V0TGlrZVByb3BlcnRpZXMoJGV4dGVu
ZGVkQXR0cmlidXRlTGlzdCwgJGlzUmVhZE9ubHkpOworICAgICAgICAKKyAgICAgICAgbXkgJHNl
dGxpa2UgPSBJRExTZXRMaWtlLT5uZXcoKTsKKworICAgICAgICAkc2VsZi0+YXNzZXJ0VG9rZW5W
YWx1ZSgkc2VsZi0+Z2V0VG9rZW4oKSwgIjwiLCBfX0xJTkVfXyk7CisgICAgICAgICRzZXRsaWtl
LT5pdGVtVHlwZSgkc2VsZi0+cGFyc2VUeXBlV2l0aEV4dGVuZGVkQXR0cmlidXRlcygpKTsKKyAg
ICAgICAgJHNlbGYtPmFzc2VydFRva2VuVmFsdWUoJHNlbGYtPmdldFRva2VuKCksICI+IiwgX19M
SU5FX18pOwogICAgICAgICAkc2VsZi0+YXNzZXJ0VG9rZW5WYWx1ZSgkc2VsZi0+Z2V0VG9rZW4o
KSwgIjsiLCBfX0xJTkVfXyk7Ci0gICAgICAgIHJldHVybiAkc2V0TGlrZU5vZGU7CisKKyAgICAg
ICAgJHNlbGYtPmFzc2VydEV4dGVuZGVkQXR0cmlidXRlc1ZhbGlkRm9yQ29udGV4dCgkZXh0ZW5k
ZWRBdHRyaWJ1dGVMaXN0LCAic2V0LWxpa2UiKTsKKyAgICAgICAgJHNldGxpa2UtPmV4dGVuZGVk
QXR0cmlidXRlcygkZXh0ZW5kZWRBdHRyaWJ1dGVMaXN0KTsKKyAgICAgICAgCisgICAgICAgIHJl
dHVybiAkc2V0bGlrZTsKICAgICB9CiAgICAgJHNlbGYtPmFzc2VydFVuZXhwZWN0ZWRUb2tlbigk
bmV4dC0+dmFsdWUoKSwgX19MSU5FX18pOwogfQogCi1zdWIgcGFyc2VTZXRMaWtlUHJvcGVydGll
cwotewotICAgIG15ICRzZWxmID0gc2hpZnQ7Ci0gICAgbXkgJGV4dGVuZGVkQXR0cmlidXRlTGlz
dCA9IHNoaWZ0OwotICAgIG15ICRpc1JlYWRPbmx5ID0gc2hpZnQ7Ci0KLSAgICBteSAkc2V0bGlr
ZSA9IElETFNldExpa2UtPm5ldygpOwotICAgICRzZXRsaWtlLT5leHRlbmRlZEF0dHJpYnV0ZXMo
JGV4dGVuZGVkQXR0cmlidXRlTGlzdCk7Ci0KLSAgICAkc2VsZi0+YXNzZXJ0VG9rZW5WYWx1ZSgk
c2VsZi0+Z2V0VG9rZW4oKSwgIjwiLCBfX0xJTkVfXyk7Ci0gICAgJHNldGxpa2UtPml0ZW1UeXBl
KCRzZWxmLT5wYXJzZVR5cGVXaXRoRXh0ZW5kZWRBdHRyaWJ1dGVzKCkpOwotICAgICRzZWxmLT5h
c3NlcnRUb2tlblZhbHVlKCRzZWxmLT5nZXRUb2tlbigpLCAiPiIsIF9fTElORV9fKTsKLQotICAg
ICMgRklYTUU6IFN5bnRoZXRpYyBvcGVyYXRpb25zIHNob3VsZCBub3QgYmUgYWRkZWQgZHVyaW5n
IHBhcnNpbmcuIEluc3RlYWQsIHRoZSBDb2RlR2VuZXJhdG9yCi0gICAgIyBzaG91bGQgYmUgcmVz
cG9uc2libGUgZm9yIHRoZW0uCi0KLSAgICBteSAkbm90RW51bWVyYWJsZUV4dGVuZGVkQXR0cmli
dXRlTGlzdCA9ICRleHRlbmRlZEF0dHJpYnV0ZUxpc3Q7Ci0gICAgJG5vdEVudW1lcmFibGVFeHRl
bmRlZEF0dHJpYnV0ZUxpc3QtPntOb3RFbnVtZXJhYmxlfSA9IDE7Ci0KLSAgICBteSAkc2l6ZUF0
dHJpYnV0ZSA9IElETEF0dHJpYnV0ZS0+bmV3KCk7Ci0gICAgJHNpemVBdHRyaWJ1dGUtPm5hbWUo
InNpemUiKTsKLSAgICAkc2l6ZUF0dHJpYnV0ZS0+aXNTZXRMaWtlKDEpOwotICAgICRzaXplQXR0
cmlidXRlLT5leHRlbmRlZEF0dHJpYnV0ZXMoJGV4dGVuZGVkQXR0cmlidXRlTGlzdCk7Ci0gICAg
JHNpemVBdHRyaWJ1dGUtPmlzUmVhZE9ubHkoMSk7Ci0gICAgJHNpemVBdHRyaWJ1dGUtPnR5cGUo
bWFrZVNpbXBsZVR5cGUoImFueSIpKTsKLSAgICBwdXNoKEB7JHNldGxpa2UtPmF0dHJpYnV0ZXN9
LCAkc2l6ZUF0dHJpYnV0ZSk7Ci0KLSAgICBteSAkaGFzT3BlcmF0aW9uID0gSURMT3BlcmF0aW9u
LT5uZXcoKTsKLSAgICAkaGFzT3BlcmF0aW9uLT5uYW1lKCJoYXMiKTsKLSAgICAkaGFzT3BlcmF0
aW9uLT5pc1NldExpa2UoMSk7Ci0gICAgbXkgJGhhc0FyZ3VtZW50ID0gSURMQXJndW1lbnQtPm5l
dygpOwotICAgICRoYXNBcmd1bWVudC0+bmFtZSgia2V5Iik7Ci0gICAgJGhhc0FyZ3VtZW50LT50
eXBlKCRzZXRsaWtlLT5pdGVtVHlwZSk7Ci0gICAgJGhhc0FyZ3VtZW50LT5leHRlbmRlZEF0dHJp
YnV0ZXMoJGV4dGVuZGVkQXR0cmlidXRlTGlzdCk7Ci0gICAgcHVzaChAeyRoYXNPcGVyYXRpb24t
PmFyZ3VtZW50c30sICgkaGFzQXJndW1lbnQpKTsKLSAgICAkaGFzT3BlcmF0aW9uLT5leHRlbmRl
ZEF0dHJpYnV0ZXMoJG5vdEVudW1lcmFibGVFeHRlbmRlZEF0dHJpYnV0ZUxpc3QpOwotICAgICRo
YXNPcGVyYXRpb24tPnR5cGUobWFrZVNpbXBsZVR5cGUoImFueSIpKTsKLQotICAgIG15ICRlbnRy
aWVzT3BlcmF0aW9uID0gSURMT3BlcmF0aW9uLT5uZXcoKTsKLSAgICAkZW50cmllc09wZXJhdGlv
bi0+bmFtZSgiZW50cmllcyIpOwotICAgICRlbnRyaWVzT3BlcmF0aW9uLT5pc1NldExpa2UoMSk7
Ci0gICAgJGVudHJpZXNPcGVyYXRpb24tPmV4dGVuZGVkQXR0cmlidXRlcygkbm90RW51bWVyYWJs
ZUV4dGVuZGVkQXR0cmlidXRlTGlzdCk7Ci0gICAgJGVudHJpZXNPcGVyYXRpb24tPnR5cGUobWFr
ZVNpbXBsZVR5cGUoImFueSIpKTsKLQotICAgIG15ICRrZXlzT3BlcmF0aW9uID0gSURMT3BlcmF0
aW9uLT5uZXcoKTsKLSAgICAka2V5c09wZXJhdGlvbi0+bmFtZSgia2V5cyIpOwotICAgICRrZXlz
T3BlcmF0aW9uLT5pc1NldExpa2UoMSk7Ci0gICAgJGtleXNPcGVyYXRpb24tPmV4dGVuZGVkQXR0
cmlidXRlcygkbm90RW51bWVyYWJsZUV4dGVuZGVkQXR0cmlidXRlTGlzdCk7Ci0gICAgJGtleXNP
cGVyYXRpb24tPnR5cGUobWFrZVNpbXBsZVR5cGUoImFueSIpKTsKLQotICAgIG15ICR2YWx1ZXNP
cGVyYXRpb24gPSBJRExPcGVyYXRpb24tPm5ldygpOwotICAgICR2YWx1ZXNPcGVyYXRpb24tPm5h
bWUoInZhbHVlcyIpOwotICAgICR2YWx1ZXNPcGVyYXRpb24tPmlzU2V0TGlrZSgxKTsKLSAgICAk
dmFsdWVzT3BlcmF0aW9uLT5leHRlbmRlZEF0dHJpYnV0ZXMoJGV4dGVuZGVkQXR0cmlidXRlTGlz
dCk7Ci0gICAgJHZhbHVlc09wZXJhdGlvbi0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Tm90RW51bWVy
YWJsZX0gPSAxOwotICAgICR2YWx1ZXNPcGVyYXRpb24tPnR5cGUobWFrZVNpbXBsZVR5cGUoImFu
eSIpKTsKLQotICAgIG15ICRmb3JFYWNoT3BlcmF0aW9uID0gSURMT3BlcmF0aW9uLT5uZXcoKTsK
LSAgICAkZm9yRWFjaE9wZXJhdGlvbi0+bmFtZSgiZm9yRWFjaCIpOwotICAgICRmb3JFYWNoT3Bl
cmF0aW9uLT5pc1NldExpa2UoMSk7Ci0gICAgbXkgJGZvckVhY2hBcmd1bWVudCA9IElETEFyZ3Vt
ZW50LT5uZXcoKTsKLSAgICAkZm9yRWFjaEFyZ3VtZW50LT5uYW1lKCJjYWxsYmFjayIpOwotICAg
ICRmb3JFYWNoQXJndW1lbnQtPnR5cGUobWFrZVNpbXBsZVR5cGUoImFueSIpKTsKLSAgICAkZm9y
RWFjaEFyZ3VtZW50LT5leHRlbmRlZEF0dHJpYnV0ZXMoJGV4dGVuZGVkQXR0cmlidXRlTGlzdCk7
Ci0gICAgcHVzaChAeyRmb3JFYWNoT3BlcmF0aW9uLT5hcmd1bWVudHN9LCAoJGZvckVhY2hBcmd1
bWVudCkpOwotICAgICRmb3JFYWNoT3BlcmF0aW9uLT5leHRlbmRlZEF0dHJpYnV0ZXMoJGV4dGVu
ZGVkQXR0cmlidXRlTGlzdCk7Ci0gICAgJGZvckVhY2hPcGVyYXRpb24tPmV4dGVuZGVkQXR0cmli
dXRlcy0+e0VudW1lcmFibGV9ID0gMTsKLSAgICAkZm9yRWFjaE9wZXJhdGlvbi0+dHlwZShtYWtl
U2ltcGxlVHlwZSgiYW55IikpOwotCi0gICAgcHVzaChAeyRzZXRsaWtlLT5vcGVyYXRpb25zfSwg
JGhhc09wZXJhdGlvbik7Ci0gICAgcHVzaChAeyRzZXRsaWtlLT5vcGVyYXRpb25zfSwgJGVudHJp
ZXNPcGVyYXRpb24pOwotICAgIHB1c2goQHskc2V0bGlrZS0+b3BlcmF0aW9uc30sICRrZXlzT3Bl
cmF0aW9uKTsKLSAgICBwdXNoKEB7JHNldGxpa2UtPm9wZXJhdGlvbnN9LCAkdmFsdWVzT3BlcmF0
aW9uKTsKLSAgICBwdXNoKEB7JHNldGxpa2UtPm9wZXJhdGlvbnN9LCAkZm9yRWFjaE9wZXJhdGlv
bik7Ci0KLSAgICByZXR1cm4gJHNldGxpa2UgaWYgJGlzUmVhZE9ubHk7Ci0KLSAgICBteSAkYWRk
T3BlcmF0aW9uID0gSURMT3BlcmF0aW9uLT5uZXcoKTsKLSAgICAkYWRkT3BlcmF0aW9uLT5uYW1l
KCJhZGQiKTsKLSAgICAkYWRkT3BlcmF0aW9uLT5pc1NldExpa2UoMSk7Ci0gICAgbXkgJGFkZEFy
Z3VtZW50ID0gSURMQXJndW1lbnQtPm5ldygpOwotICAgICRhZGRBcmd1bWVudC0+bmFtZSgia2V5
Iik7Ci0gICAgJGFkZEFyZ3VtZW50LT50eXBlKCRzZXRsaWtlLT5pdGVtVHlwZSk7Ci0gICAgJGFk
ZEFyZ3VtZW50LT5leHRlbmRlZEF0dHJpYnV0ZXMoJGV4dGVuZGVkQXR0cmlidXRlTGlzdCk7Ci0g
ICAgcHVzaChAeyRhZGRPcGVyYXRpb24tPmFyZ3VtZW50c30sICgkYWRkQXJndW1lbnQpKTsKLSAg
ICAkYWRkT3BlcmF0aW9uLT5leHRlbmRlZEF0dHJpYnV0ZXMoJG5vdEVudW1lcmFibGVFeHRlbmRl
ZEF0dHJpYnV0ZUxpc3QpOwotICAgICRhZGRPcGVyYXRpb24tPnR5cGUobWFrZVNpbXBsZVR5cGUo
ImFueSIpKTsKLQotICAgIG15ICRjbGVhck9wZXJhdGlvbiA9IElETE9wZXJhdGlvbi0+bmV3KCk7
Ci0gICAgJGNsZWFyT3BlcmF0aW9uLT5uYW1lKCJjbGVhciIpOwotICAgICRjbGVhck9wZXJhdGlv
bi0+aXNTZXRMaWtlKDEpOwotICAgICRjbGVhck9wZXJhdGlvbi0+ZXh0ZW5kZWRBdHRyaWJ1dGVz
KCRub3RFbnVtZXJhYmxlRXh0ZW5kZWRBdHRyaWJ1dGVMaXN0KTsKLSAgICAkY2xlYXJPcGVyYXRp
b24tPnR5cGUobWFrZVNpbXBsZVR5cGUoInVuZGVmaW5lZCIpKTsKLQotICAgIG15ICRkZWxldGVP
cGVyYXRpb24gPSBJRExPcGVyYXRpb24tPm5ldygpOwotICAgICRkZWxldGVPcGVyYXRpb24tPm5h
bWUoImRlbGV0ZSIpOwotICAgICRkZWxldGVPcGVyYXRpb24tPmlzU2V0TGlrZSgxKTsKLSAgICBt
eSAkZGVsZXRlQXJndW1lbnQgPSBJRExBcmd1bWVudC0+bmV3KCk7Ci0gICAgJGRlbGV0ZUFyZ3Vt
ZW50LT5uYW1lKCJrZXkiKTsKLSAgICAkZGVsZXRlQXJndW1lbnQtPnR5cGUoJHNldGxpa2UtPml0
ZW1UeXBlKTsKLSAgICAkZGVsZXRlQXJndW1lbnQtPmV4dGVuZGVkQXR0cmlidXRlcygkZXh0ZW5k
ZWRBdHRyaWJ1dGVMaXN0KTsKLSAgICBwdXNoKEB7JGRlbGV0ZU9wZXJhdGlvbi0+YXJndW1lbnRz
fSwgKCRkZWxldGVBcmd1bWVudCkpOwotICAgICRkZWxldGVPcGVyYXRpb24tPmV4dGVuZGVkQXR0
cmlidXRlcygkbm90RW51bWVyYWJsZUV4dGVuZGVkQXR0cmlidXRlTGlzdCk7Ci0gICAgJGRlbGV0
ZU9wZXJhdGlvbi0+dHlwZShtYWtlU2ltcGxlVHlwZSgiYW55IikpOwotCi0gICAgcHVzaChAeyRz
ZXRsaWtlLT5vcGVyYXRpb25zfSwgJGFkZE9wZXJhdGlvbik7Ci0gICAgcHVzaChAeyRzZXRsaWtl
LT5vcGVyYXRpb25zfSwgJGNsZWFyT3BlcmF0aW9uKTsKLSAgICBwdXNoKEB7JHNldGxpa2UtPm9w
ZXJhdGlvbnN9LCAkZGVsZXRlT3BlcmF0aW9uKTsKLQotICAgIHJldHVybiAkc2V0bGlrZTsKLX0K
LQogc3ViIHBhcnNlT3BlcmF0aW9uUmVzdAogewogICAgIG15ICRzZWxmID0gc2hpZnQ7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvQmluZGluZ1Rlc3RHbG9iYWxD
b25zdHJ1Y3RvcnMuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9CaW5kaW5nVGVzdEdsb2JhbENvbnN0cnVjdG9ycy5pZGwJKHJldmlzaW9uIDI2
NzAwNikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9CaW5kaW5nVGVz
dEdsb2JhbENvbnN0cnVjdG9ycy5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAg
cGFydGlhbCBpbnRlcmZhY2UgVGVzdEdsb2JhbE9iamVjdCB7CiAgICAgYXR0cmlidXRlIFRlc3RM
ZWdhY3lGYWN0b3J5RnVuY3Rpb25MZWdhY3lGYWN0b3J5RnVuY3Rpb25Db25zdHJ1Y3RvciBBdWRp
bzsKICAgICBhdHRyaWJ1dGUgVGVzdExlZ2FjeU92ZXJyaWRlQnVpbHRJbnNDb25zdHJ1Y3RvciBU
ZXN0TGVnYWN5T3ZlcnJpZGVCdWlsdEluczsKICAgICBhdHRyaWJ1dGUgVGVzdE1hcExpa2VDb25z
dHJ1Y3RvciBUZXN0TWFwTGlrZTsKKyAgICBhdHRyaWJ1dGUgVGVzdE1hcExpa2VXaXRoT3ZlcnJp
ZGRlbk9wZXJhdGlvbnNDb25zdHJ1Y3RvciBUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0
aW9uczsKICAgICBhdHRyaWJ1dGUgVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmll
ckNvbnN0cnVjdG9yIFRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXI7CiAgICAg
YXR0cmlidXRlIFRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbkNvbnN0
cnVjdG9yIFRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbjsKICAgICBh
dHRyaWJ1dGUgVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyQ29uc3RydWN0
b3IgVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyOwpAQCAtNTksNiArNjAs
NyBAQCBwYXJ0aWFsIGludGVyZmFjZSBUZXN0R2xvYmFsT2JqZWN0IHsKICAgICBhdHRyaWJ1dGUg
VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWxDb25zdHJ1Y3RvciBUZXN0U2VyaWFsaXphdGlv
bkluaGVyaXRGaW5hbDsKICAgICBbQ29uZGl0aW9uYWw9Q29uZGl0aW9uMXxDb25kaXRpb24yXSBh
dHRyaWJ1dGUgVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNvbnN0cnVjdG9yIFRl
c3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U7CiAgICAgYXR0cmlidXRlIFRlc3RTZXRM
aWtlQ29uc3RydWN0b3IgVGVzdFNldExpa2U7CisgICAgYXR0cmlidXRlIFRlc3RTZXRMaWtlV2l0
aE92ZXJyaWRkZW5PcGVyYXRpb25zQ29uc3RydWN0b3IgVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRl
bk9wZXJhdGlvbnM7CiAgICAgYXR0cmlidXRlIFRlc3RTdHJpbmdpZmllckNvbnN0cnVjdG9yIFRl
c3RTdHJpbmdpZmllcjsKICAgICBhdHRyaWJ1dGUgVGVzdFN0cmluZ2lmaWVyQW5vbnltb3VzT3Bl
cmF0aW9uQ29uc3RydWN0b3IgVGVzdFN0cmluZ2lmaWVyQW5vbnltb3VzT3BlcmF0aW9uOwogICAg
IGF0dHJpYnV0ZSBUZXN0U3RyaW5naWZpZXJOYW1lZE9wZXJhdGlvbkNvbnN0cnVjdG9yIFRlc3RT
dHJpbmdpZmllck5hbWVkT3BlcmF0aW9uOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L1N1cHBsZW1lbnRhbERlcGVuZGVuY2llcy5kZXAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1N1cHBsZW1lbnRhbERlcGVuZGVu
Y2llcy5kZXAJKHJldmlzaW9uIDI2NzAwNikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9TdXBwbGVtZW50YWxEZXBlbmRlbmNpZXMuZGVwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMjYsNiArMTI2LDkgQEAgV2ViRE9NVGVzdExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMuaDogCiBK
U1Rlc3RNYXBMaWtlLmg6IAogRE9NVGVzdE1hcExpa2UuaDogCiBXZWJET01UZXN0TWFwTGlrZS5o
OiAKK0pTVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMuaDogCitET01UZXN0TWFw
TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucy5oOiAKK1dlYkRPTVRlc3RNYXBMaWtlV2l0aE92
ZXJyaWRkZW5PcGVyYXRpb25zLmg6IAogSlNUZXN0TWl4aW5JbnRlcmZhY2UuaDogVGVzdFBhcnRp
YWxNaXhpbkludGVyZmFjZS5pZGwKIERPTVRlc3RNaXhpbkludGVyZmFjZS5oOiBUZXN0UGFydGlh
bE1peGluSW50ZXJmYWNlLmlkbAogV2ViRE9NVGVzdE1peGluSW50ZXJmYWNlLmg6IFRlc3RQYXJ0
aWFsTWl4aW5JbnRlcmZhY2UuaWRsCkBAIC0yMzMsNiArMjM2LDkgQEAgV2ViRE9NVGVzdFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZQogSlNUZXN0U2V0TGlrZS5oOiAKIERPTVRlc3RTZXRM
aWtlLmg6IAogV2ViRE9NVGVzdFNldExpa2UuaDogCitKU1Rlc3RTZXRMaWtlV2l0aE92ZXJyaWRk
ZW5PcGVyYXRpb25zLmg6IAorRE9NVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMu
aDogCitXZWJET01UZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucy5oOiAKIEpTVGVz
dFN0YW5kYWxvbmVEaWN0aW9uYXJ5Lmg6IFRlc3RTdXBwbGVtZW50YWwuaWRsCiBET01UZXN0U3Rh
bmRhbG9uZURpY3Rpb25hcnkuaDogVGVzdFN1cHBsZW1lbnRhbC5pZGwKIFdlYkRPTVRlc3RTdGFu
ZGFsb25lRGljdGlvbmFyeS5oOiBUZXN0U3VwcGxlbWVudGFsLmlkbApJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVy
YXRpb25zLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMuaWRsCShub25leGlzdGVu
dCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0TWFwTGlrZVdp
dGhPdmVycmlkZGVuT3BlcmF0aW9ucy5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKK2ludGVyZmFjZSBUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0
aW9ucyB7CisgICAgbWFwbGlrZTxET01TdHJpbmcsIERPTVN0cmluZz47CisgICAgCisgICAgYXR0
cmlidXRlIGxvbmcgc2V0OworICAgIHVuZGVmaW5lZCBjbGVhcigpOworfTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVu
T3BlcmF0aW9ucy5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L1Rlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zLmlkbAkobm9uZXhp
c3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdFNldExp
a2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCitpbnRlcmZhY2UgVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9w
ZXJhdGlvbnMgeworICAgIHNldGxpa2U8RE9NU3RyaW5nPjsKKyAgICAKKyAgICBhdHRyaWJ1dGUg
bG9uZyBhZGQ7CisgICAgdW5kZWZpbmVkIGRlbGV0ZSgpOworfTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5P
cGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucy5jcHAJKG5v
bmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNDg1IEBACisvKgorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQg
b3BlbiBzb3VyY2UgcHJvamVjdC4KKyAgICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5
IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorCisgICAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJKU1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zLmgi
CisKKyNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKKyNpbmNsdWRlICJET01Jc29TdWJzcGFj
ZXMuaCIKKyNpbmNsdWRlICJKU0RPTUF0dHJpYnV0ZS5oIgorI2luY2x1ZGUgIkpTRE9NQmluZGlu
Zy5oIgorI2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxlLmgiCisjaW5j
bHVkZSAiSlNET01Db252ZXJ0QW55LmgiCisjaW5jbHVkZSAiSlNET01Db252ZXJ0TnVtYmVycy5o
IgorI2luY2x1ZGUgIkpTRE9NQ29udmVydFN0cmluZ3MuaCIKKyNpbmNsdWRlICJKU0RPTUV4Y2Vw
dGlvbkhhbmRsaW5nLmgiCisjaW5jbHVkZSAiSlNET01NYXBMaWtlLmgiCisjaW5jbHVkZSAiSlNE
T01PcGVyYXRpb24uaCIKKyNpbmNsdWRlICJKU0RPTVdyYXBwZXJDYWNoZS5oIgorI2luY2x1ZGUg
IlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKKyNpbmNsdWRlICJXZWJDb3JlSlNDbGllbnREYXRh
LmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvQnVpbHRpbk5hbWVzLmg+CisjaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvRnVuY3Rpb25Qcm90b3R5cGUuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9IZWFwQW5hbHl6ZXIuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0NJbmxpbmVz
Lmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNEZXN0cnVjdGlibGVPYmplY3RIZWFwQ2Vs
bFR5cGUuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9TdWJzcGFjZUlubGluZXMuaD4KKyNp
bmNsdWRlIDx3dGYvR2V0UHRyLmg+CisjaW5jbHVkZSA8d3RmL1BvaW50ZXJQcmVwYXJhdGlvbnMu
aD4KKyNpbmNsdWRlIDx3dGYvVVJMLmg+CisKKworbmFtZXNwYWNlIFdlYkNvcmUgewordXNpbmcg
bmFtZXNwYWNlIEpTQzsKKworLy8gRnVuY3Rpb25zCisKK0pTQzo6RW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBqc1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zUHJvdG90eXBl
RnVuY3Rpb25DbGVhcihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpDYWxsRnJhbWUqKTsKK0pT
Qzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRk
ZW5PcGVyYXRpb25zUHJvdG90eXBlRnVuY3Rpb25HZXQoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpT
Qzo6Q2FsbEZyYW1lKik7CitKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0
TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9uc1Byb3RvdHlwZUZ1bmN0aW9uSGFzKEpTQzo6
SlNHbG9iYWxPYmplY3QqLCBKU0M6OkNhbGxGcmFtZSopOworSlNDOjpFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGpzVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnNQcm90b3R5
cGVGdW5jdGlvbkVudHJpZXMoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6Q2FsbEZyYW1lKik7
CitKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0TWFwTGlrZVdpdGhPdmVy
cmlkZGVuT3BlcmF0aW9uc1Byb3RvdHlwZUZ1bmN0aW9uS2V5cyhKU0M6OkpTR2xvYmFsT2JqZWN0
KiwgSlNDOjpDYWxsRnJhbWUqKTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBq
c1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zUHJvdG90eXBlRnVuY3Rpb25WYWx1
ZXMoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6Q2FsbEZyYW1lKik7CitKU0M6OkVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9u
c1Byb3RvdHlwZUZ1bmN0aW9uRm9yRWFjaChKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpDYWxs
RnJhbWUqKTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RNYXBMaWtl
V2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zUHJvdG90eXBlRnVuY3Rpb25EZWxldGUoSlNDOjpKU0ds
b2JhbE9iamVjdCosIEpTQzo6Q2FsbEZyYW1lKik7CisKKy8vIEF0dHJpYnV0ZXMKKworSlNDOjpF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zQ29uc3Ry
dWN0b3IoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJv
cGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9u
c0NvbnN0cnVjdG9yKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBK
U0M6OkVuY29kZWRKU1ZhbHVlKTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0TWFwTGlrZVdp
dGhPdmVycmlkZGVuT3BlcmF0aW9uc1NldChKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RNYXBMaWtlV2l0
aE92ZXJyaWRkZW5PcGVyYXRpb25zU2V0KEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29k
ZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUganNU
ZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9uc1NpemUoSlNDOjpKU0dsb2JhbE9iamVj
dCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKKworY2xhc3MgSlNU
ZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9uc1Byb3RvdHlwZSBmaW5hbCA6IHB1Ymxp
YyBKU0M6OkpTTm9uRmluYWxPYmplY3QgeworcHVibGljOgorICAgIHVzaW5nIEJhc2UgPSBKU0M6
OkpTTm9uRmluYWxPYmplY3Q7CisgICAgc3RhdGljIEpTVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRl
bk9wZXJhdGlvbnNQcm90b3R5cGUqIGNyZWF0ZShKU0M6OlZNJiB2bSwgSlNET01HbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICB7CisgICAg
ICAgIEpTVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnNQcm90b3R5cGUqIHB0ciA9
IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0TWFwTGlrZVdpdGhPdmVycmlk
ZGVuT3BlcmF0aW9uc1Byb3RvdHlwZT4odm0uaGVhcCkpIEpTVGVzdE1hcExpa2VXaXRoT3ZlcnJp
ZGRlbk9wZXJhdGlvbnNQcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKTsKKyAg
ICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbih2bSk7CisgICAgICAgIHJldHVybiBwdHI7CisgICAg
fQorCisgICAgREVDTEFSRV9JTkZPOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBK
U0M6OlN1YnNwYWNlQWNjZXNzPgorICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFj
ZUZvcihKU0M6OlZNJiB2bSkKKyAgICB7CisgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQ
QUNFX1NIQVJBQkxFKEpTVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnNQcm90b3R5
cGUsIEJhc2UpOworICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3BhY2U7CisgICAgfQor
ICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBK
U0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUp
CisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFs
T2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1
cmVGbGFncyksIGluZm8oKSk7CisgICAgfQorCitwcml2YXRlOgorICAgIEpTVGVzdE1hcExpa2VX
aXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnNQcm90b3R5cGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9i
YWxPYmplY3QqLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgICAgICA6IEpTQzo6SlNO
b25GaW5hbE9iamVjdCh2bSwgc3RydWN0dXJlKQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIGZp
bmlzaENyZWF0aW9uKEpTQzo6Vk0mKTsKK307CitTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9T
SEFSQUJMRShKU1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zUHJvdG90eXBlLCBK
U1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zUHJvdG90eXBlOjpCYXNlKTsKKwor
dXNpbmcgSlNUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9uc0NvbnN0cnVjdG9yID0g
SlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGU8SlNUZXN0TWFwTGlrZVdpdGhPdmVycmlk
ZGVuT3BlcmF0aW9ucz47CisKK3RlbXBsYXRlPD4gSlNWYWx1ZSBKU1Rlc3RNYXBMaWtlV2l0aE92
ZXJyaWRkZW5PcGVyYXRpb25zQ29uc3RydWN0b3I6OnByb3RvdHlwZUZvclN0cnVjdHVyZShKU0M6
OlZNJiB2bSwgY29uc3QgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKK3sKKyAgICBV
TlVTRURfUEFSQU0odm0pOworICAgIHJldHVybiBnbG9iYWxPYmplY3QuZnVuY3Rpb25Qcm90b3R5
cGUoKTsKK30KKwordGVtcGxhdGU8PiB2b2lkIEpTVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9w
ZXJhdGlvbnNDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMoVk0mIHZtLCBKU0RPTUds
b2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQoreworICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVy
dHlOYW1lcy0+cHJvdG90eXBlLCBKU1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25z
Ojpwcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRv
bnREZWxldGUgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVy
dHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKKyAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFt
ZXMtPm5hbWUsIGpzTm9udHJpdmlhbFN0cmluZyh2bSwgIlRlc3RNYXBMaWtlV2l0aE92ZXJyaWRk
ZW5PcGVyYXRpb25zIl9zKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6
OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CisgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9w
ZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVyKDApLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpS
ZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKK30KKwordGVtcGxh
dGU8PiBjb25zdCBDbGFzc0luZm8gSlNUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9u
c0NvbnN0cnVjdG9yOjpzX2luZm8gPSB7ICJUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0
aW9ucyIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFC
TEUoSlNUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9uc0NvbnN0cnVjdG9yKSB9Owor
CisvKiBIYXNoIHRhYmxlIGZvciBwcm90b3R5cGUgKi8KKworc3RhdGljIGNvbnN0IEhhc2hUYWJs
ZVZhbHVlIEpTVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnNQcm90b3R5cGVUYWJs
ZVZhbHVlc1tdID0KK3sKKyAgICB7ICJjb25zdHJ1Y3RvciIsIHN0YXRpY19jYXN0PHVuc2lnbmVk
PihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSksIE5vSW50cmluc2ljLCB7IChpbnRw
dHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0TWFwTGlr
ZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9uc0NvbnN0cnVjdG9yKSwgKGludHB0cl90KSBzdGF0aWNf
Y2FzdDxQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYz4oc2V0SlNUZXN0TWFwTGlrZVdpdGhP
dmVycmlkZGVuT3BlcmF0aW9uc0NvbnN0cnVjdG9yKSB9IH0sCisgICAgeyAic2V0Iiwgc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkN1c3RvbUFjY2Vzc29yIHwg
SlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RE9NQXR0cmlidXRlKSwgTm9JbnRyaW5zaWMsIHsgKGlu
dHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3RNYXBM
aWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zU2V0KSwgKGludHB0cl90KSBzdGF0aWNfY2FzdDxQ
dXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYz4oc2V0SlNUZXN0TWFwTGlrZVdpdGhPdmVycmlk
ZGVuT3BlcmF0aW9uc1NldCkgfSB9LAorICAgIHsgInNpemUiLCBzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0gfCBKU0M6OlByb3BlcnR5QXR0cmli
dXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkN1c3RvbUFjY2Vzc29yKSwg
Tm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFs
dWVGdW5jPihqc1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zU2l6ZSksIChpbnRw
dHJfdCkgc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmM+KDApIH0gfSwK
KyAgICB7ICJjbGVhciIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmli
dXRlOjpGdW5jdGlvbiksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxSYXdO
YXRpdmVGdW5jdGlvbj4oanNUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9uc1Byb3Rv
dHlwZUZ1bmN0aW9uQ2xlYXIpLCAoaW50cHRyX3QpICgwKSB9IH0sCisgICAgeyAiZ2V0Iiwgc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtIHwgSlND
OjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RnVuY3Rpb24pLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qp
c3RhdGljX2Nhc3Q8UmF3TmF0aXZlRnVuY3Rpb24+KGpzVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRl
bk9wZXJhdGlvbnNQcm90b3R5cGVGdW5jdGlvbkdldCksIChpbnRwdHJfdCkgKDEpIH0gfSwKKyAg
ICB7ICJoYXMiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6
RG9udEVudW0gfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpGdW5jdGlvbiksIE5vSW50cmluc2lj
LCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxSYXdOYXRpdmVGdW5jdGlvbj4oanNUZXN0TWFwTGlr
ZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9uc1Byb3RvdHlwZUZ1bmN0aW9uSGFzKSwgKGludHB0cl90
KSAoMSkgfSB9LAorICAgIHsgImVudHJpZXMiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNDOjpQ
cm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0gfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpGdW5j
dGlvbiksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxSYXdOYXRpdmVGdW5j
dGlvbj4oanNUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9uc1Byb3RvdHlwZUZ1bmN0
aW9uRW50cmllcyksIChpbnRwdHJfdCkgKDApIH0gfSwKKyAgICB7ICJrZXlzIiwgc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtIHwgSlNDOjpQcm9w
ZXJ0eUF0dHJpYnV0ZTo6RnVuY3Rpb24pLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGlj
X2Nhc3Q8UmF3TmF0aXZlRnVuY3Rpb24+KGpzVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJh
dGlvbnNQcm90b3R5cGVGdW5jdGlvbktleXMpLCAoaW50cHRyX3QpICgwKSB9IH0sCisgICAgeyAi
dmFsdWVzIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRv
bnRFbnVtIHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RnVuY3Rpb24pLCBOb0ludHJpbnNpYywg
eyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UmF3TmF0aXZlRnVuY3Rpb24+KGpzVGVzdE1hcExpa2VX
aXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnNQcm90b3R5cGVGdW5jdGlvblZhbHVlcyksIChpbnRwdHJf
dCkgKDApIH0gfSwKKyAgICB7ICJmb3JFYWNoIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6
UHJvcGVydHlBdHRyaWJ1dGU6OkZ1bmN0aW9uKSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0
YXRpY19jYXN0PFJhd05hdGl2ZUZ1bmN0aW9uPihqc1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5P
cGVyYXRpb25zUHJvdG90eXBlRnVuY3Rpb25Gb3JFYWNoKSwgKGludHB0cl90KSAoMSkgfSB9LAor
ICAgIHsgImRlbGV0ZSIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmli
dXRlOjpEb250RW51bSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkZ1bmN0aW9uKSwgTm9JbnRy
aW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PFJhd05hdGl2ZUZ1bmN0aW9uPihqc1Rlc3RN
YXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zUHJvdG90eXBlRnVuY3Rpb25EZWxldGUpLCAo
aW50cHRyX3QpICgxKSB9IH0sCit9OworCitjb25zdCBDbGFzc0luZm8gSlNUZXN0TWFwTGlrZVdp
dGhPdmVycmlkZGVuT3BlcmF0aW9uc1Byb3RvdHlwZTo6c19pbmZvID0geyAiVGVzdE1hcExpa2VX
aXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMiLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRy
LCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlv
bnNQcm90b3R5cGUpIH07CisKK3ZvaWQgSlNUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0
aW9uc1Byb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQoreworICAgIEJhc2U6OmZpbmlz
aENyZWF0aW9uKHZtKTsKKyAgICByZWlmeVN0YXRpY1Byb3BlcnRpZXModm0sIEpTVGVzdE1hcExp
a2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnM6OmluZm8oKSwgSlNUZXN0TWFwTGlrZVdpdGhPdmVy
cmlkZGVuT3BlcmF0aW9uc1Byb3RvdHlwZVRhYmxlVmFsdWVzLCAqdGhpcyk7CisgICAgcHV0RGly
ZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5pdGVyYXRvclN5bWJvbCwgZ2V0RGlyZWN0KHZtLCB2
bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS5lbnRyaWVzUHVibGljTmFtZSgpKSwgc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7Cisg
ICAgSlNDX1RPX1NUUklOR19UQUdfV0lUSE9VVF9UUkFOU0lUSU9OKCk7Cit9CisKK2NvbnN0IENs
YXNzSW5mbyBKU1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zOjpzX2luZm8gPSB7
ICJUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucyIsICZCYXNlOjpzX2luZm8sIG51
bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNUZXN0TWFwTGlrZVdpdGhPdmVy
cmlkZGVuT3BlcmF0aW9ucykgfTsKKworSlNUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0
aW9uczo6SlNUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucyhTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgUmVmPFRlc3RNYXBMaWtl
V2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zPiYmIGltcGwpCisgICAgOiBKU0RPTVdyYXBwZXI8VGVz
dE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnM+KHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0
LCBXVEZNb3ZlKGltcGwpKQoreworfQorCit2b2lkIEpTVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRl
bk9wZXJhdGlvbnM6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKK3sKKyAgICBCYXNlOjpmaW5pc2hD
cmVhdGlvbih2bSk7CisgICAgQVNTRVJUKGluaGVyaXRzKHZtLCBpbmZvKCkpKTsKKworICAgIHN0
YXRpY19hc3NlcnQoIXN0ZDo6aXNfYmFzZV9vZjxBY3RpdmVET01PYmplY3QsIFRlc3RNYXBMaWtl
V2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zPjo6dmFsdWUsICJJbnRlcmZhY2UgaXMgbm90IG1hcmtl
ZCBhcyBbQWN0aXZlRE9NT2JqZWN0XSBldmVuIHRob3VnaCBpbXBsZW1lbnRhdGlvbiBjbGFzcyBz
dWJjbGFzc2VzIEFjdGl2ZURPTU9iamVjdC4iKTsKKworfQorCitKU09iamVjdCogSlNUZXN0TWFw
TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9uczo6Y3JlYXRlUHJvdG90eXBlKFZNJiB2bSwgSlNE
T01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKK3sKKyAgICByZXR1cm4gSlNUZXN0TWFwTGlr
ZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9uc1Byb3RvdHlwZTo6Y3JlYXRlKHZtLCAmZ2xvYmFsT2Jq
ZWN0LCBKU1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zUHJvdG90eXBlOjpjcmVh
dGVTdHJ1Y3R1cmUodm0sICZnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC5vYmplY3RQcm90b3R5
cGUoKSkpOworfQorCitKU09iamVjdCogSlNUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0
aW9uczo6cHJvdG90eXBlKFZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkK
K3sKKyAgICByZXR1cm4gZ2V0RE9NUHJvdG90eXBlPEpTVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRl
bk9wZXJhdGlvbnM+KHZtLCBnbG9iYWxPYmplY3QpOworfQorCitKU1ZhbHVlIEpTVGVzdE1hcExp
a2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnM6OmdldENvbnN0cnVjdG9yKFZNJiB2bSwgY29uc3Qg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKK3sKKyAgICByZXR1cm4gZ2V0RE9NQ29uc3Ry
dWN0b3I8SlNUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9uc0NvbnN0cnVjdG9yPih2
bSwgKmpzQ2FzdDxjb25zdCBKU0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCkpOworfQor
Cit2b2lkIEpTVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnM6OmRlc3Ryb3koSlND
OjpKU0NlbGwqIGNlbGwpCit7CisgICAgSlNUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0
aW9ucyogdGhpc09iamVjdCA9IHN0YXRpY19jYXN0PEpTVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRl
bk9wZXJhdGlvbnMqPihjZWxsKTsKKyAgICB0aGlzT2JqZWN0LT5KU1Rlc3RNYXBMaWtlV2l0aE92
ZXJyaWRkZW5PcGVyYXRpb25zOjp+SlNUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9u
cygpOworfQorCit0ZW1wbGF0ZTw+IGlubGluZSBKU1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5P
cGVyYXRpb25zKiBJRExBdHRyaWJ1dGU8SlNUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0
aW9ucz46OmNhc3QoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRK
U1ZhbHVlIHRoaXNWYWx1ZSkKK3sKKyAgICByZXR1cm4ganNEeW5hbWljQ2FzdDxKU1Rlc3RNYXBM
aWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zKj4oSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9i
amVjdCksIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKK30KKwordGVtcGxhdGU8PiBpbmxp
bmUgSlNUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucyogSURMT3BlcmF0aW9uPEpT
VGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnM+OjpjYXN0KEpTR2xvYmFsT2JqZWN0
JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUmIGNhbGxGcmFtZSkKK3sKKyAgICByZXR1
cm4ganNEeW5hbWljQ2FzdDxKU1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zKj4o
SlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCksIGNhbGxGcmFtZS50aGlzVmFsdWUoKSk7
Cit9CisKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlv
bnNDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2Rl
ZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCit7CisgICAgVk0mIHZtID0gSlNDOjpn
ZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKKyAgICBhdXRvKiBwcm90b3R5cGUgPSBqc0R5bmFtaWNDYXN0PEpT
VGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnNQcm90b3R5cGUqPih2bSwgSlNWYWx1
ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAgIGlmIChVTkxJS0VMWSghcHJvdG90eXBlKSkKKyAg
ICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dT
Y29wZSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Rlc3RNYXBMaWtlV2l0aE92ZXJy
aWRkZW5PcGVyYXRpb25zOjpnZXRDb25zdHJ1Y3RvcihKU0M6OmdldFZNKGxleGljYWxHbG9iYWxP
YmplY3QpLCBwcm90b3R5cGUtPmdsb2JhbE9iamVjdCgpKSk7Cit9CisKK2Jvb2wgc2V0SlNUZXN0
TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9uc0NvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0
KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRWYWx1ZSkKK3sKKyAgICBWTSYgdm0gPSBKU0M6OmdldFZNKGxleGljYWxH
bG9iYWxPYmplY3QpOworICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOworICAgIGF1dG8qIHByb3RvdHlwZSA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0TWFwTGlrZVdp
dGhPdmVycmlkZGVuT3BlcmF0aW9uc1Byb3RvdHlwZSo+KHZtLCBKU1ZhbHVlOjpkZWNvZGUodGhp
c1ZhbHVlKSk7CisgICAgaWYgKFVOTElLRUxZKCFwcm90b3R5cGUpKSB7CisgICAgICAgIHRocm93
Vk1UeXBlRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSk7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0
b3IKKyAgICByZXR1cm4gcHJvdG90eXBlLT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMt
PmNvbnN0cnVjdG9yLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSk7Cit9CisKK3N0YXRp
YyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zU2V0
R2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RNYXBMaWtl
V2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zJiB0aGlzT2JqZWN0KQoreworICAgIGF1dG8mIHZtID0g
SlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3Jh
cHBlZCgpOworICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExMb25n
PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLnNldCgpKSkpOworfQorCitF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zU2V0KEpT
R2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFs
dWUsIFByb3BlcnR5TmFtZSkKK3sKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdE1hcExp
a2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnM+OjpnZXQ8anNUZXN0TWFwTGlrZVdpdGhPdmVycmlk
ZGVuT3BlcmF0aW9uc1NldEdldHRlciwgQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OkFzc2VydD4o
KmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgInNldCIpOworfQorCitzdGF0aWMgaW5s
aW5lIGJvb2wgc2V0SlNUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9uc1NldFNldHRl
cihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0TWFwTGlrZVdpdGhP
dmVycmlkZGVuT3BlcmF0aW9ucyYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBh
dXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGF1dG8gdGhy
b3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGF1dG8mIGltcGwgPSB0aGlz
T2JqZWN0LndyYXBwZWQoKTsKKyAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExMb25n
PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0
aHJvd1Njb3BlLCBmYWxzZSk7CisgICAgQXR0cmlidXRlU2V0dGVyOjpjYWxsKGxleGljYWxHbG9i
YWxPYmplY3QsIHRocm93U2NvcGUsIFsmXSB7CisgICAgICAgIHJldHVybiBpbXBsLnNldFNldChX
VEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CisgICAgfSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jv
b2wgc2V0SlNUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9uc1NldChKU0dsb2JhbE9i
amVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCit7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rl
c3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zPjo6c2V0PHNldEpTVGVzdE1hcExpa2VX
aXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnNTZXRTZXR0ZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0
aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgInNldCIpOworfQorCitzdGF0aWMgaW5saW5lIEpTVmFs
dWUganNUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9uc1NpemVHZXR0ZXIoSlNHbG9i
YWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRl
bk9wZXJhdGlvbnMmIHRoaXNPYmplY3QpCit7CisgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZs
ZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURM
QW55PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBmb3J3YXJkU2l6ZVRvTWFwTGlr
ZShsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzT2JqZWN0KSkpKTsKK30KKworRW5jb2RlZEpTVmFs
dWUganNUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9uc1NpemUoSlNHbG9iYWxPYmpl
Y3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVy
dHlOYW1lKQoreworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0TWFwTGlrZVdpdGhPdmVy
cmlkZGVuT3BlcmF0aW9ucz46OmdldDxqc1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRp
b25zU2l6ZUdldHRlcj4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgInNpemUiKTsK
K30KKworc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE1hcExpa2VXaXRo
T3ZlcnJpZGRlbk9wZXJhdGlvbnNQcm90b3R5cGVGdW5jdGlvbkNsZWFyQm9keShKU0M6OkpTR2xv
YmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OkNhbGxGcmFtZSogY2FsbEZyYW1l
LCB0eXBlbmFtZSBJRExPcGVyYXRpb248SlNUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0
aW9ucz46OkNsYXNzUGFyYW1ldGVyIGNhc3RlZFRoaXMpCit7CisgICAgYXV0byYgdm0gPSBKU0M6
OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBV
TlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3Jh
cHBlZCgpOworICAgIHRocm93U2NvcGUucmVsZWFzZSgpOworICAgIGltcGwuY2xlYXIoKTsKKyAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworfQorCitFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnNQ
cm90b3R5cGVGdW5jdGlvbkNsZWFyKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0
LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKK3sKKyAgICByZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVz
dE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnM+OjpjYWxsPGpzVGVzdE1hcExpa2VXaXRo
T3ZlcnJpZGRlbk9wZXJhdGlvbnNQcm90b3R5cGVGdW5jdGlvbkNsZWFyQm9keT4oKmxleGljYWxH
bG9iYWxPYmplY3QsICpjYWxsRnJhbWUsICJjbGVhciIpOworfQorCitzdGF0aWMgaW5saW5lIEpT
Qzo6RW5jb2RlZEpTVmFsdWUganNUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9uc1By
b3RvdHlwZUZ1bmN0aW9uR2V0Qm9keShKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFs
T2JqZWN0LCBKU0M6OkNhbGxGcmFtZSogY2FsbEZyYW1lLCB0eXBlbmFtZSBJRExPcGVyYXRpb248
SlNUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucz46OkNsYXNzUGFyYW1ldGVyIGNh
c3RlZFRoaXMpCit7CisgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmpl
Y3QpOworICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAg
IFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsK
KyAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAxKSkKKyAgICAg
ICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBj
cmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CisgICAg
RW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJn
dW1lbnQoMCk7CisgICAgYXV0byBrZXkgPSBjb252ZXJ0PElETERPTVN0cmluZz4oKmxleGljYWxH
bG9iYWxPYmplY3QsIGFyZ3VtZW50MC52YWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0
aHJvd1Njb3BlLCBKU1ZhbHVlOjplbmNvZGUodG9KUzxJRExBbnk+KGZvcndhcmRHZXRUb01hcExp
a2UoKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUsICpjYXN0ZWRUaGlzLCBXVEZNb3Zl
KGtleSkpKSkpOworfQorCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE1hcExp
a2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnNQcm90b3R5cGVGdW5jdGlvbkdldChKU0dsb2JhbE9i
amVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCit7CisgICAg
cmV0dXJuIElETE9wZXJhdGlvbjxKU1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25z
Pjo6Y2FsbDxqc1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zUHJvdG90eXBlRnVu
Y3Rpb25HZXRCb2R5PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSwgImdldCIpOwor
fQorCitzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0TWFwTGlrZVdpdGhP
dmVycmlkZGVuT3BlcmF0aW9uc1Byb3RvdHlwZUZ1bmN0aW9uSGFzQm9keShKU0M6OkpTR2xvYmFs
T2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OkNhbGxGcmFtZSogY2FsbEZyYW1lLCB0
eXBlbmFtZSBJRExPcGVyYXRpb248SlNUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9u
cz46OkNsYXNzUGFyYW1ldGVyIGNhc3RlZFRoaXMpCit7CisgICAgYXV0byYgdm0gPSBKU0M6Omdl
dFZNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBVTlVT
RURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVu
dENvdW50KCkgPCAxKSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFs
T2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2Fs
R2xvYmFsT2JqZWN0KSk7CisgICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNh
bGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7CisgICAgYXV0byBrZXkgPSBjb252ZXJ0PElE
TERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MC52YWx1ZSgpKTsKKyAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAg
IFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCBKU1ZhbHVlOjplbmNvZGUodG9KUzxJRExB
bnk+KGZvcndhcmRIYXNUb01hcExpa2UoKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUs
ICpjYXN0ZWRUaGlzLCBXVEZNb3ZlKGtleSkpKSkpOworfQorCitFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGpzVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnNQcm90b3R5cGVG
dW5jdGlvbkhhcyhKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1l
KiBjYWxsRnJhbWUpCit7CisgICAgcmV0dXJuIElETE9wZXJhdGlvbjxKU1Rlc3RNYXBMaWtlV2l0
aE92ZXJyaWRkZW5PcGVyYXRpb25zPjo6Y2FsbDxqc1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5P
cGVyYXRpb25zUHJvdG90eXBlRnVuY3Rpb25IYXNCb2R5PigqbGV4aWNhbEdsb2JhbE9iamVjdCwg
KmNhbGxGcmFtZSwgImhhcyIpOworfQorCitzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFs
dWUganNUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9uc1Byb3RvdHlwZUZ1bmN0aW9u
RW50cmllc0JvZHkoSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlND
OjpDYWxsRnJhbWUqIGNhbGxGcmFtZSwgdHlwZW5hbWUgSURMT3BlcmF0aW9uPEpTVGVzdE1hcExp
a2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnM+OjpDbGFzc1BhcmFtZXRlciBjYXN0ZWRUaGlzKQor
eworICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBh
dXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBVTlVTRURfUEFS
QU0odGhyb3dTY29wZSk7CisgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgUkVMRUFT
RV9BTkRfUkVUVVJOKHRocm93U2NvcGUsIEpTVmFsdWU6OmVuY29kZSh0b0pTPElETEFueT4oZm9y
d2FyZEVudHJpZXNUb01hcExpa2UoKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUsICpj
YXN0ZWRUaGlzKSkpKTsKK30KKworRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RN
YXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zUHJvdG90eXBlRnVuY3Rpb25FbnRyaWVzKEpT
R2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkK
K3sKKyAgICByZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9w
ZXJhdGlvbnM+OjpjYWxsPGpzVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnNQcm90
b3R5cGVGdW5jdGlvbkVudHJpZXNCb2R5PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFt
ZSwgImVudHJpZXMiKTsKK30KKworc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpz
VGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnNQcm90b3R5cGVGdW5jdGlvbktleXNC
b2R5KEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6Q2FsbEZy
YW1lKiBjYWxsRnJhbWUsIHR5cGVuYW1lIElETE9wZXJhdGlvbjxKU1Rlc3RNYXBMaWtlV2l0aE92
ZXJyaWRkZW5PcGVyYXRpb25zPjo6Q2xhc3NQYXJhbWV0ZXIgY2FzdGVkVGhpcykKK3sKKyAgICBh
dXRvJiB2bSA9IEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgYXV0byB0aHJv
d1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93
U2NvcGUpOworICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIFJFTEVBU0VfQU5EX1JF
VFVSTih0aHJvd1Njb3BlLCBKU1ZhbHVlOjplbmNvZGUodG9KUzxJRExBbnk+KGZvcndhcmRLZXlz
VG9NYXBMaWtlKCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lLCAqY2FzdGVkVGhpcykp
KSk7Cit9CisKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0TWFwTGlrZVdpdGhP
dmVycmlkZGVuT3BlcmF0aW9uc1Byb3RvdHlwZUZ1bmN0aW9uS2V5cyhKU0dsb2JhbE9iamVjdCog
bGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCit7CisgICAgcmV0dXJu
IElETE9wZXJhdGlvbjxKU1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zPjo6Y2Fs
bDxqc1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zUHJvdG90eXBlRnVuY3Rpb25L
ZXlzQm9keT4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUsICJrZXlzIik7Cit9CisK
K3N0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RNYXBMaWtlV2l0aE92ZXJy
aWRkZW5PcGVyYXRpb25zUHJvdG90eXBlRnVuY3Rpb25WYWx1ZXNCb2R5KEpTQzo6SlNHbG9iYWxP
YmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6Q2FsbEZyYW1lKiBjYWxsRnJhbWUsIHR5
cGVuYW1lIElETE9wZXJhdGlvbjxKU1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25z
Pjo6Q2xhc3NQYXJhbWV0ZXIgY2FzdGVkVGhpcykKK3sKKyAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0
Vk0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIFVOVVNF
RF9QQVJBTShjYWxsRnJhbWUpOworICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCBK
U1ZhbHVlOjplbmNvZGUodG9KUzxJRExBbnk+KGZvcndhcmRWYWx1ZXNUb01hcExpa2UoKmxleGlj
YWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUsICpjYXN0ZWRUaGlzKSkpKTsKK30KKworRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRp
b25zUHJvdG90eXBlRnVuY3Rpb25WYWx1ZXMoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxP
YmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQoreworICAgIHJldHVybiBJRExPcGVyYXRpb248
SlNUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucz46OmNhbGw8anNUZXN0TWFwTGlr
ZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9uc1Byb3RvdHlwZUZ1bmN0aW9uVmFsdWVzQm9keT4oKmxl
eGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUsICJ2YWx1ZXMiKTsKK30KKworc3RhdGljIGlu
bGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJh
dGlvbnNQcm90b3R5cGVGdW5jdGlvbkZvckVhY2hCb2R5KEpTQzo6SlNHbG9iYWxPYmplY3QqIGxl
eGljYWxHbG9iYWxPYmplY3QsIEpTQzo6Q2FsbEZyYW1lKiBjYWxsRnJhbWUsIHR5cGVuYW1lIElE
TE9wZXJhdGlvbjxKU1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zPjo6Q2xhc3NQ
YXJhbWV0ZXIgY2FzdGVkVGhpcykKK3sKKyAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0obGV4aWNh
bEdsb2JhbE9iamVjdCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIFVOVVNFRF9QQVJBTShj
YWxsRnJhbWUpOworICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8
IDEpKQorICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRo
cm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmpl
Y3QpKTsKKyAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0gY2FsbEZyYW1lLT51
bmNoZWNrZWRBcmd1bWVudCgwKTsKKyAgICBhdXRvIGNhbGxiYWNrID0gY29udmVydDxJRExBbnk+
KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDAudmFsdWUoKSk7CisgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRUxFQVNFX0FO
RF9SRVRVUk4odGhyb3dTY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKHRvSlM8SURMQW55Pihmb3J3YXJk
Rm9yRWFjaFRvTWFwTGlrZSgqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSwgKmNhc3Rl
ZFRoaXMsIFdURk1vdmUoY2FsbGJhY2spKSkpKTsKK30KKworRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBqc1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zUHJvdG90eXBlRnVu
Y3Rpb25Gb3JFYWNoKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJh
bWUqIGNhbGxGcmFtZSkKK3sKKyAgICByZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVzdE1hcExpa2VX
aXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnM+OjpjYWxsPGpzVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRl
bk9wZXJhdGlvbnNQcm90b3R5cGVGdW5jdGlvbkZvckVhY2hCb2R5PigqbGV4aWNhbEdsb2JhbE9i
amVjdCwgKmNhbGxGcmFtZSwgImZvckVhY2giKTsKK30KKworc3RhdGljIGlubGluZSBKU0M6OkVu
Y29kZWRKU1ZhbHVlIGpzVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnNQcm90b3R5
cGVGdW5jdGlvbkRlbGV0ZUJvZHkoSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9i
amVjdCwgSlNDOjpDYWxsRnJhbWUqIGNhbGxGcmFtZSwgdHlwZW5hbWUgSURMT3BlcmF0aW9uPEpT
VGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnM+OjpDbGFzc1BhcmFtZXRlciBjYXN0
ZWRUaGlzKQoreworICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0
KTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBV
TlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7Cisg
ICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCisgICAgICAg
IHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3Jl
YXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOworICAgIEVu
c3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3Vt
ZW50KDApOworICAgIGF1dG8ga2V5ID0gY29udmVydDxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xv
YmFsT2JqZWN0LCBhcmd1bWVudDAudmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0
aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhy
b3dTY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKHRvSlM8SURMQW55Pihmb3J3YXJkRGVsZXRlVG9NYXBM
aWtlKCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lLCAqY2FzdGVkVGhpcywgV1RGTW92
ZShrZXkpKSkpKTsKK30KKworRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RNYXBM
aWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zUHJvdG90eXBlRnVuY3Rpb25EZWxldGUoSlNHbG9i
YWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQorewor
ICAgIHJldHVybiBJRExPcGVyYXRpb248SlNUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0
aW9ucz46OmNhbGw8anNUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9uc1Byb3RvdHlw
ZUZ1bmN0aW9uRGVsZXRlQm9keT4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUsICJk
ZWxldGUiKTsKK30KKworSlNDOjpJc29TdWJzcGFjZSogSlNUZXN0TWFwTGlrZVdpdGhPdmVycmlk
ZGVuT3BlcmF0aW9uczo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQoreworICAgIGF1dG8m
IGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRh
KTsKKyAgICBhdXRvJiBzcGFjZXMgPSBjbGllbnREYXRhLnN1YnNwYWNlcygpOworICAgIGlmIChh
dXRvKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRl
bk9wZXJhdGlvbnMuZ2V0KCkpCisgICAgICAgIHJldHVybiBzcGFjZTsKKyAgICBzdGF0aWNfYXNz
ZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdE1h
cExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnM+IHx8ICFKU1Rlc3RNYXBMaWtlV2l0aE92ZXJy
aWRkZW5PcGVyYXRpb25zOjpuZWVkc0Rlc3RydWN0aW9uKTsKKyAgICBpZiBjb25zdGV4cHIgKHN0
ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdE1hcExpa2VX
aXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnM+KQorICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRl
c3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zID0gbWFrZVVuaXF1ZTxJc29TdWJzcGFj
ZT4gSVNPX1NVQlNQQUNFX0lOSVQodm0uaGVhcCwgdm0uZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENl
bGxUeXBlLmdldCgpLCBKU1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zKTsKKyAg
ICBlbHNlCisgICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE1hcExpa2VXaXRoT3ZlcnJp
ZGRlbk9wZXJhdGlvbnMgPSBtYWtlVW5pcXVlPElzb1N1YnNwYWNlPiBJU09fU1VCU1BBQ0VfSU5J
VCh2bS5oZWFwLCB2bS5jZWxsSGVhcENlbGxUeXBlLmdldCgpLCBKU1Rlc3RNYXBMaWtlV2l0aE92
ZXJyaWRkZW5PcGVyYXRpb25zKTsKKyAgICBhdXRvKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNl
Rm9yVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMuZ2V0KCk7CitJR05PUkVfV0FS
TklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQorSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0
YXV0b2xvZ2ljYWwtY29tcGFyZSIpCisgICAgaWYgKCZKU1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRk
ZW5PcGVyYXRpb25zOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzICE9ICZKU0M6OkpTQ2VsbDo6dmlz
aXRPdXRwdXRDb25zdHJhaW50cykKKyAgICAgICAgY2xpZW50RGF0YS5vdXRwdXRDb25zdHJhaW50
U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKK0lHTk9SRV9XQVJOSU5HU19FTkQKK0lHTk9SRV9XQVJO
SU5HU19FTkQKKyAgICByZXR1cm4gc3BhY2U7Cit9CisKK3ZvaWQgSlNUZXN0TWFwTGlrZVdpdGhP
dmVycmlkZGVuT3BlcmF0aW9uczo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6
ZXImIGFuYWx5emVyKQoreworICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0TWFw
TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucyo+KGNlbGwpOworICAgIGFuYWx5emVyLnNldFdy
YXBwZWRPYmplY3RGb3JDZWxsKGNlbGwsICZ0aGlzT2JqZWN0LT53cmFwcGVkKCkpOworICAgIGlm
ICh0aGlzT2JqZWN0LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpCisgICAgICAgIGFuYWx5emVy
LnNldExhYmVsRm9yQ2VsbChjZWxsLCAidXJsICIgKyB0aGlzT2JqZWN0LT5zY3JpcHRFeGVjdXRp
b25Db250ZXh0KCktPnVybCgpLnN0cmluZygpKTsKKyAgICBCYXNlOjphbmFseXplSGVhcChjZWxs
LCBhbmFseXplcik7Cit9CisKK2Jvb2wgSlNUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0
aW9uc093bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVu
a25vd24+IGhhbmRsZSwgdm9pZCosIFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiog
cmVhc29uKQoreworICAgIFVOVVNFRF9QQVJBTShoYW5kbGUpOworICAgIFVOVVNFRF9QQVJBTSh2
aXNpdG9yKTsKKyAgICBVTlVTRURfUEFSQU0ocmVhc29uKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKK3ZvaWQgSlNUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9uc093bmVyOjpmaW5h
bGl6ZShKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCogY29udGV4dCkKK3sK
KyAgICBhdXRvKiBqc1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zID0gc3RhdGlj
X2Nhc3Q8SlNUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucyo+KGhhbmRsZS5zbG90
KCktPmFzQ2VsbCgpKTsKKyAgICBhdXRvJiB3b3JsZCA9ICpzdGF0aWNfY2FzdDxET01XcmFwcGVy
V29ybGQqPihjb250ZXh0KTsKKyAgICB1bmNhY2hlV3JhcHBlcih3b3JsZCwgJmpzVGVzdE1hcExp
a2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMtPndyYXBwZWQoKSwganNUZXN0TWFwTGlrZVdpdGhP
dmVycmlkZGVuT3BlcmF0aW9ucyk7Cit9CisKKyNpZiBFTkFCTEUoQklORElOR19JTlRFR1JJVFkp
CisjaWYgUExBVEZPUk0oV0lOKQorI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQ0ODMpCitleHRl
cm4gIkMiIHsgZXh0ZXJuIHZvaWQgKCpjb25zdCBfX2lkZW50aWZpZXIoIj8/XzdUZXN0TWFwTGlr
ZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9uc0BXZWJDb3JlQEA2QkAiKVtdKSgpOyB9CisjZWxzZQor
ZXh0ZXJuICJDIiB7IGV4dGVybiB2b2lkKiBfWlRWTjdXZWJDb3JlMzVUZXN0TWFwTGlrZVdpdGhP
dmVycmlkZGVuT3BlcmF0aW9uc0VbXTsgfQorI2VuZGlmCisjZW5kaWYKKworSlNDOjpKU1ZhbHVl
IHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTRE9NR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIFJlZjxUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucz4m
JiBpbXBsKQoreworCisjaWYgRU5BQkxFKEJJTkRJTkdfSU5URUdSSVRZKQorICAgIGNvbnN0IHZv
aWQqIGFjdHVhbFZUYWJsZVBvaW50ZXIgPSBnZXRWVGFibGVQb2ludGVyKGltcGwucHRyKCkpOwor
I2lmIFBMQVRGT1JNKFdJTikKKyAgICB2b2lkKiBleHBlY3RlZFZUYWJsZVBvaW50ZXIgPSBfX2lk
ZW50aWZpZXIoIj8/XzdUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9uc0BXZWJDb3Jl
QEA2QkAiKTsKKyNlbHNlCisgICAgdm9pZCogZXhwZWN0ZWRWVGFibGVQb2ludGVyID0gJl9aVFZO
N1dlYkNvcmUzNVRlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zRVsyXTsKKyNlbmRp
ZgorCisgICAgLy8gSWYgdGhpcyBmYWlscyBUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0
aW9ucyBkb2VzIG5vdCBoYXZlIGEgdnRhYmxlLCBzbyB5b3UgbmVlZCB0byBhZGQgdGhlCisgICAg
Ly8gSW1wbGVtZW50YXRpb25MYWNrc1ZUYWJsZSBhdHRyaWJ1dGUgdG8gdGhlIGludGVyZmFjZSBk
ZWZpbml0aW9uCisgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3BvbHltb3JwaGljPFRlc3RNYXBM
aWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zPjo6dmFsdWUsICJUZXN0TWFwTGlrZVdpdGhPdmVy
cmlkZGVuT3BlcmF0aW9ucyBpcyBub3QgcG9seW1vcnBoaWMiKTsKKworICAgIC8vIElmIHlvdSBo
aXQgdGhpcyBhc3NlcnRpb24geW91IGVpdGhlciBoYXZlIGEgdXNlIGFmdGVyIGZyZWUgYnVnLCBv
cgorICAgIC8vIFRlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zIGhhcyBzdWJjbGFz
c2VzLiBJZiBUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucyBoYXMgc3ViY2xhc3Nl
cyB0aGF0IGdldCBwYXNzZWQKKyAgICAvLyB0byB0b0pTKCkgd2UgY3VycmVudGx5IHJlcXVpcmUg
VGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMgeW91IHRvIG9wdCBvdXQgb2YgYmlu
ZGluZyBoYXJkZW5pbmcKKyAgICAvLyBieSBhZGRpbmcgdGhlIFNraXBWVGFibGVWYWxpZGF0aW9u
IGF0dHJpYnV0ZSB0byB0aGUgaW50ZXJmYWNlIElETCBkZWZpbml0aW9uCisgICAgUkVMRUFTRV9B
U1NFUlQoYWN0dWFsVlRhYmxlUG9pbnRlciA9PSBleHBlY3RlZFZUYWJsZVBvaW50ZXIpOworI2Vu
ZGlmCisgICAgcmV0dXJuIGNyZWF0ZVdyYXBwZXI8VGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9w
ZXJhdGlvbnM+KGdsb2JhbE9iamVjdCwgV1RGTW92ZShpbXBsKSk7Cit9CisKK0pTQzo6SlNWYWx1
ZSB0b0pTKEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTRE9NR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFRlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRp
b25zJiBpbXBsKQoreworICAgIHJldHVybiB3cmFwKGxleGljYWxHbG9iYWxPYmplY3QsIGdsb2Jh
bE9iamVjdCwgaW1wbCk7Cit9CisKK1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25z
KiBKU1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zOjp0b1dyYXBwZWQoSlNDOjpW
TSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBpZiAoYXV0byogd3JhcHBlciA9IGpz
RHluYW1pY0Nhc3Q8SlNUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucyo+KHZtLCB2
YWx1ZSkpCisgICAgICAgIHJldHVybiAmd3JhcHBlci0+d3JhcHBlZCgpOworICAgIHJldHVybiBu
dWxscHRyOworfQorCit9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RNYXBMaWtl
V2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9w
ZXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDkzIEBACisvKgorICAgIFRoaXMg
ZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAgICBUaGlz
IGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1Qg
TU9ESUZZIQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAg
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAg
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KKyovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiSlNET01XcmFwcGVyLmgiCisj
aW5jbHVkZSAiVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMuaCIKKyNpbmNsdWRl
IDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBK
U1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zIDogcHVibGljIEpTRE9NV3JhcHBl
cjxUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucz4geworcHVibGljOgorICAgIHVz
aW5nIEJhc2UgPSBKU0RPTVdyYXBwZXI8VGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlv
bnM+OworICAgIHN0YXRpYyBKU1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zKiBj
cmVhdGUoSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgUmVmPFRlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zPiYmIGltcGwp
CisgICAgeworICAgICAgICBKU1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zKiBw
dHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdE1hcExpa2VXaXRoT3Zl
cnJpZGRlbk9wZXJhdGlvbnM+KGdsb2JhbE9iamVjdC0+dm0oKS5oZWFwKSkgSlNUZXN0TWFwTGlr
ZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucyhzdHJ1Y3R1cmUsICpnbG9iYWxPYmplY3QsIFdURk1v
dmUoaW1wbCkpOworICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKGdsb2JhbE9iamVjdC0+dm0o
KSk7CisgICAgICAgIHJldHVybiBwdHI7CisgICAgfQorCisgICAgc3RhdGljIEpTQzo6SlNPYmpl
Y3QqIGNyZWF0ZVByb3RvdHlwZShKU0M6OlZNJiwgSlNET01HbG9iYWxPYmplY3QmKTsKKyAgICBz
dGF0aWMgSlNDOjpKU09iamVjdCogcHJvdG90eXBlKEpTQzo6Vk0mLCBKU0RPTUdsb2JhbE9iamVj
dCYpOworICAgIHN0YXRpYyBUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucyogdG9X
cmFwcGVkKEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOworICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3ko
SlNDOjpKU0NlbGwqKTsKKworICAgIERFQ0xBUkVfSU5GTzsKKworICAgIHN0YXRpYyBKU0M6OlN0
cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCisgICAgeworICAgICAgICBy
ZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUs
IEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSwg
SlNDOjpOb25BcnJheSk7CisgICAgfQorCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBnZXRDb25z
dHJ1Y3RvcihKU0M6OlZNJiwgY29uc3QgSlNDOjpKU0dsb2JhbE9iamVjdCopOworICAgIHRlbXBs
YXRlPHR5cGVuYW1lLCBKU0M6OlN1YnNwYWNlQWNjZXNzIG1vZGU+IHN0YXRpYyBKU0M6Oklzb1N1
YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKKyAgICB7CisgICAgICAgIGlmIGNvbnN0
ZXhwciAobW9kZSA9PSBKU0M6OlN1YnNwYWNlQWNjZXNzOjpDb25jdXJyZW50bHkpCisgICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbCh2bSk7
CisgICAgfQorICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoSlND
OjpWTSYgdm0pOworICAgIHN0YXRpYyB2b2lkIGFuYWx5emVIZWFwKEpTQ2VsbCosIEpTQzo6SGVh
cEFuYWx5emVyJik7Citwcm90ZWN0ZWQ6CisgICAgSlNUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVu
T3BlcmF0aW9ucyhKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0JiwgUmVmPFRlc3RN
YXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zPiYmKTsKKworICAgIHZvaWQgZmluaXNoQ3Jl
YXRpb24oSlNDOjpWTSYpOworfTsKKworY2xhc3MgSlNUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVu
T3BlcmF0aW9uc093bmVyIDogcHVibGljIEpTQzo6V2Vha0hhbmRsZU93bmVyIHsKK3B1YmxpYzoK
KyAgICB2aXJ0dWFsIGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8
SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgSlNDOjpTbG90VmlzaXRvciYsIGNvbnN0IGNo
YXIqKik7CisgICAgdmlydHVhbCB2b2lkIGZpbmFsaXplKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93
bj4sIHZvaWQqIGNvbnRleHQpOworfTsKKworaW5saW5lIEpTQzo6V2Vha0hhbmRsZU93bmVyKiB3
cmFwcGVyT3duZXIoRE9NV3JhcHBlcldvcmxkJiwgVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9w
ZXJhdGlvbnMqKQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxKU1Rlc3RNYXBMaWtlV2l0
aE92ZXJyaWRkZW5PcGVyYXRpb25zT3duZXI+IG93bmVyOworICAgIHJldHVybiAmb3duZXIuZ2V0
KCk7Cit9CisKK2lubGluZSB2b2lkKiB3cmFwcGVyS2V5KFRlc3RNYXBMaWtlV2l0aE92ZXJyaWRk
ZW5PcGVyYXRpb25zKiB3cmFwcGFibGVPYmplY3QpCit7CisgICAgcmV0dXJuIHdyYXBwYWJsZU9i
amVjdDsKK30KKworSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTRE9N
R2xvYmFsT2JqZWN0KiwgVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMmKTsKK2lu
bGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFs
T2JqZWN0LCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBUZXN0TWFwTGlrZVdpdGhP
dmVycmlkZGVuT3BlcmF0aW9ucyogaW1wbCkgeyByZXR1cm4gaW1wbCA/IHRvSlMobGV4aWNhbEds
b2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LCAqaW1wbCkgOiBKU0M6OmpzTnVsbCgpOyB9CitKU0M6
OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNET01HbG9i
YWxPYmplY3QqLCBSZWY8VGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnM+JiYpOwor
aW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6SlNHbG9iYWxPYmplY3Qq
IGxleGljYWxHbG9iYWxPYmplY3QsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJl
ZlB0cjxUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucz4mJiBpbXBsKSB7IHJldHVy
biBpbXBsID8gdG9KU05ld2x5Q3JlYXRlZChsZXhpY2FsR2xvYmFsT2JqZWN0LCBnbG9iYWxPYmpl
Y3QsIGltcGwucmVsZWFzZU5vbk51bGwoKSkgOiBKU0M6OmpzTnVsbCgpOyB9CisKK3RlbXBsYXRl
PD4gc3RydWN0IEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxUZXN0TWFwTGlrZVdpdGhPdmVy
cmlkZGVuT3BlcmF0aW9ucz4geworICAgIHVzaW5nIFdyYXBwZXJDbGFzcyA9IEpTVGVzdE1hcExp
a2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnM7CisgICAgdXNpbmcgVG9XcmFwcGVkUmV0dXJuVHlw
ZSA9IFRlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zKjsKK307CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2V0TGlr
ZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucy5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRl
bk9wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDYxIEBACisvKgorICAg
IFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAg
ICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBE
TyBOT1QgTU9ESUZZIQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
CisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJKU1Rlc3RT
ZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zLmgiCisKKyNpbmNsdWRlICJBY3RpdmVET01P
YmplY3QuaCIKKyNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJKU0RPTUF0
dHJpYnV0ZS5oIgorI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgorI2luY2x1ZGUgIkpTRE9NQ29u
c3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxlLmgiCisjaW5jbHVkZSAiSlNET01Db252ZXJ0QW55Lmgi
CisjaW5jbHVkZSAiSlNET01Db252ZXJ0TnVtYmVycy5oIgorI2luY2x1ZGUgIkpTRE9NQ29udmVy
dFN0cmluZ3MuaCIKKyNpbmNsdWRlICJKU0RPTUV4Y2VwdGlvbkhhbmRsaW5nLmgiCisjaW5jbHVk
ZSAiSlNET01PcGVyYXRpb24uaCIKKyNpbmNsdWRlICJKU0RPTVNldExpa2UuaCIKKyNpbmNsdWRl
ICJKU0RPTVdyYXBwZXJDYWNoZS5oIgorI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQu
aCIKKyNpbmNsdWRlICJXZWJDb3JlSlNDbGllbnREYXRhLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvQnVpbHRpbk5hbWVzLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvRnVuY3Rpb25Q
cm90b3R5cGUuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9IZWFwQW5hbHl6ZXIuaD4KKyNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0NJbmxpbmVzLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSlNEZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUuaD4KKyNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9TdWJzcGFjZUlubGluZXMuaD4KKyNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+Cisj
aW5jbHVkZSA8d3RmL1BvaW50ZXJQcmVwYXJhdGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvVVJMLmg+
CisKKworbmFtZXNwYWNlIFdlYkNvcmUgewordXNpbmcgbmFtZXNwYWNlIEpTQzsKKworLy8gRnVu
Y3Rpb25zCisKK0pTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RTZXRMaWtl
V2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zUHJvdG90eXBlRnVuY3Rpb25EZWxldGUoSlNDOjpKU0ds
b2JhbE9iamVjdCosIEpTQzo6Q2FsbEZyYW1lKik7CitKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwganNUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9uc1Byb3RvdHlwZUZ1
bmN0aW9uSGFzKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkNhbGxGcmFtZSopOworSlNDOjpF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9w
ZXJhdGlvbnNQcm90b3R5cGVGdW5jdGlvbkVudHJpZXMoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpT
Qzo6Q2FsbEZyYW1lKik7CitKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0
U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9uc1Byb3RvdHlwZUZ1bmN0aW9uS2V5cyhKU0M6
OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpDYWxsRnJhbWUqKTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBqc1Rlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zUHJvdG90
eXBlRnVuY3Rpb25WYWx1ZXMoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6Q2FsbEZyYW1lKik7
CitKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0U2V0TGlrZVdpdGhPdmVy
cmlkZGVuT3BlcmF0aW9uc1Byb3RvdHlwZUZ1bmN0aW9uRm9yRWFjaChKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiwgSlNDOjpDYWxsRnJhbWUqKTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBqc1Rlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zUHJvdG90eXBlRnVuY3Rpb25D
bGVhcihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpDYWxsRnJhbWUqKTsKKworLy8gQXR0cmli
dXRlcworCitKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9w
ZXJhdGlvbnNDb25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNW
YWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RTZXRMaWtlV2l0aE92ZXJy
aWRkZW5PcGVyYXRpb25zQ29uc3RydWN0b3IoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5j
b2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOworSlNDOjpFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zQWRkKEpTQzo6SlNHbG9iYWxPYmpl
Y3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpT
VGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnNBZGQoSlNDOjpKU0dsb2JhbE9iamVj
dCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOworSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zU2l6ZShKU0M6
OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUp
OworCitjbGFzcyBKU1Rlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zUHJvdG90eXBl
IGZpbmFsIDogcHVibGljIEpTQzo6SlNOb25GaW5hbE9iamVjdCB7CitwdWJsaWM6CisgICAgdXNp
bmcgQmFzZSA9IEpTQzo6SlNOb25GaW5hbE9iamVjdDsKKyAgICBzdGF0aWMgSlNUZXN0U2V0TGlr
ZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9uc1Byb3RvdHlwZSogY3JlYXRlKEpTQzo6Vk0mIHZtLCBK
U0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJl
KQorICAgIHsKKyAgICAgICAgSlNUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9uc1By
b3RvdHlwZSogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3RTZXRM
aWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zUHJvdG90eXBlPih2bS5oZWFwKSkgSlNUZXN0U2V0
TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9uc1Byb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0LCBz
dHJ1Y3R1cmUpOworICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICAgICAgcmV0
dXJuIHB0cjsKKyAgICB9CisKKyAgICBERUNMQVJFX0lORk87CisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgQ2VsbFR5cGUsIEpTQzo6U3Vic3BhY2VBY2Nlc3M+CisgICAgc3RhdGljIEpTQzo6SXNvU3Vi
c3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQorICAgIHsKKyAgICAgICAgU1RBVElDX0FT
U0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoSlNUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3Bl
cmF0aW9uc1Byb3RvdHlwZSwgQmFzZSk7CisgICAgICAgIHJldHVybiAmdm0ucGxhaW5PYmplY3RT
cGFjZTsKKyAgICB9CisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUo
SlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1Zh
bHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3Jl
YXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVj
dFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAg
SlNUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9uc1Byb3RvdHlwZShKU0M6OlZNJiB2
bSwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAg
ICAgIDogSlNDOjpKU05vbkZpbmFsT2JqZWN0KHZtLCBzdHJ1Y3R1cmUpCisgICAgeworICAgIH0K
KworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYpOworfTsKK1NUQVRJQ19BU1NFUlRf
SVNPX1NVQlNQQUNFX1NIQVJBQkxFKEpTVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlv
bnNQcm90b3R5cGUsIEpTVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnNQcm90b3R5
cGU6OkJhc2UpOworCit1c2luZyBKU1Rlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25z
Q29uc3RydWN0b3IgPSBKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZTxKU1Rlc3RTZXRM
aWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zPjsKKwordGVtcGxhdGU8PiBKU1ZhbHVlIEpTVGVz
dFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnNDb25zdHJ1Y3Rvcjo6cHJvdG90eXBlRm9y
U3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBjb25zdCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2Jq
ZWN0KQoreworICAgIFVOVVNFRF9QQVJBTSh2bSk7CisgICAgcmV0dXJuIGdsb2JhbE9iamVjdC5m
dW5jdGlvblByb3RvdHlwZSgpOworfQorCit0ZW1wbGF0ZTw+IHZvaWQgSlNUZXN0U2V0TGlrZVdp
dGhPdmVycmlkZGVuT3BlcmF0aW9uc0NvbnN0cnVjdG9yOjppbml0aWFsaXplUHJvcGVydGllcyhW
TSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCit7CisgICAgcHV0RGlyZWN0
KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpTVGVzdFNldExpa2VXaXRoT3ZlcnJp
ZGRlbk9wZXJhdGlvbnM6OnByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0KSwgSlNDOjpQcm9wZXJ0
eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5
IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOworICAgIHB1dERpcmVjdCh2bSwg
dm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250cml2aWFsU3RyaW5nKHZtLCAiVGVzdFNldExp
a2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMiX3MpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpS
ZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKKyAgICBwdXREaXJl
Y3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1iZXIoMCksIEpTQzo6UHJvcGVy
dHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0p
OworfQorCit0ZW1wbGF0ZTw+IGNvbnN0IENsYXNzSW5mbyBKU1Rlc3RTZXRMaWtlV2l0aE92ZXJy
aWRkZW5PcGVyYXRpb25zQ29uc3RydWN0b3I6OnNfaW5mbyA9IHsgIlRlc3RTZXRMaWtlV2l0aE92
ZXJyaWRkZW5PcGVyYXRpb25zIiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JF
QVRFX01FVEhPRF9UQUJMRShKU1Rlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zQ29u
c3RydWN0b3IpIH07CisKKy8qIEhhc2ggdGFibGUgZm9yIHByb3RvdHlwZSAqLworCitzdGF0aWMg
Y29uc3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9u
c1Byb3RvdHlwZVRhYmxlVmFsdWVzW10gPQoreworICAgIHsgImNvbnN0cnVjdG9yIiwgc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSwgTm9JbnRy
aW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5j
Pihqc1Rlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zQ29uc3RydWN0b3IpLCAoaW50
cHRyX3QpIHN0YXRpY19jYXN0PFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jPihzZXRKU1Rl
c3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zQ29uc3RydWN0b3IpIH0gfSwKKyAgICB7
ICJhZGQiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6Q3Vz
dG9tQWNjZXNzb3IgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpET01BdHRyaWJ1dGUpLCBOb0lu
dHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1
bmM+KGpzVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnNBZGQpLCAoaW50cHRyX3Qp
IHN0YXRpY19jYXN0PFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jPihzZXRKU1Rlc3RTZXRM
aWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zQWRkKSB9IH0sCisgICAgeyAic2l6ZSIsIHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSB8IEpTQzo6
UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6Q3Vz
dG9tQWNjZXNzb3IpLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVy
dHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlv
bnNTaXplKSwgKGludHB0cl90KSBzdGF0aWNfY2FzdDxQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVl
RnVuYz4oMCkgfSB9LAorICAgIHsgImRlbGV0ZSIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6
OlByb3BlcnR5QXR0cmlidXRlOjpGdW5jdGlvbiksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClz
dGF0aWNfY2FzdDxSYXdOYXRpdmVGdW5jdGlvbj4oanNUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVu
T3BlcmF0aW9uc1Byb3RvdHlwZUZ1bmN0aW9uRGVsZXRlKSwgKGludHB0cl90KSAoMCkgfSB9LAor
ICAgIHsgImhhcyIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRl
OjpEb250RW51bSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkZ1bmN0aW9uKSwgTm9JbnRyaW5z
aWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PFJhd05hdGl2ZUZ1bmN0aW9uPihqc1Rlc3RTZXRM
aWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zUHJvdG90eXBlRnVuY3Rpb25IYXMpLCAoaW50cHRy
X3QpICgxKSB9IH0sCisgICAgeyAiZW50cmllcyIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6
OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkZ1
bmN0aW9uKSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PFJhd05hdGl2ZUZ1
bmN0aW9uPihqc1Rlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zUHJvdG90eXBlRnVu
Y3Rpb25FbnRyaWVzKSwgKGludHB0cl90KSAoMCkgfSB9LAorICAgIHsgImtleXMiLCBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0gfCBKU0M6OlBy
b3BlcnR5QXR0cmlidXRlOjpGdW5jdGlvbiksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0
aWNfY2FzdDxSYXdOYXRpdmVGdW5jdGlvbj4oanNUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3Bl
cmF0aW9uc1Byb3RvdHlwZUZ1bmN0aW9uS2V5cyksIChpbnRwdHJfdCkgKDApIH0gfSwKKyAgICB7
ICJ2YWx1ZXMiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6
RG9udEVudW0gfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpGdW5jdGlvbiksIE5vSW50cmluc2lj
LCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxSYXdOYXRpdmVGdW5jdGlvbj4oanNUZXN0U2V0TGlr
ZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9uc1Byb3RvdHlwZUZ1bmN0aW9uVmFsdWVzKSwgKGludHB0
cl90KSAoMCkgfSB9LAorICAgIHsgImZvckVhY2giLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlND
OjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0gfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpG
dW5jdGlvbiksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxSYXdOYXRpdmVG
dW5jdGlvbj4oanNUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9uc1Byb3RvdHlwZUZ1
bmN0aW9uRm9yRWFjaCksIChpbnRwdHJfdCkgKDEpIH0gfSwKKyAgICB7ICJjbGVhciIsIHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSB8IEpTQzo6
UHJvcGVydHlBdHRyaWJ1dGU6OkZ1bmN0aW9uKSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0
YXRpY19jYXN0PFJhd05hdGl2ZUZ1bmN0aW9uPihqc1Rlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5P
cGVyYXRpb25zUHJvdG90eXBlRnVuY3Rpb25DbGVhciksIChpbnRwdHJfdCkgKDApIH0gfSwKK307
CisKK2NvbnN0IENsYXNzSW5mbyBKU1Rlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25z
UHJvdG90eXBlOjpzX2luZm8gPSB7ICJUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9u
cyIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUo
SlNUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9uc1Byb3RvdHlwZSkgfTsKKwordm9p
ZCBKU1Rlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zUHJvdG90eXBlOjpmaW5pc2hD
cmVhdGlvbihWTSYgdm0pCit7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOworICAgIHJl
aWZ5U3RhdGljUHJvcGVydGllcyh2bSwgSlNUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0
aW9uczo6aW5mbygpLCBKU1Rlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zUHJvdG90
eXBlVGFibGVWYWx1ZXMsICp0aGlzKTsKKyAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFt
ZXMtPml0ZXJhdG9yU3ltYm9sLCBnZXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmJ1aWx0
aW5OYW1lcygpLmVudHJpZXNQdWJsaWNOYW1lKCkpLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlND
OjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pKTsKKyAgICBKU0NfVE9fU1RSSU5HX1RBR19X
SVRIT1VUX1RSQU5TSVRJT04oKTsKK30KKworY29uc3QgQ2xhc3NJbmZvIEpTVGVzdFNldExpa2VX
aXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnM6OnNfaW5mbyA9IHsgIlRlc3RTZXRMaWtlV2l0aE92ZXJy
aWRkZW5PcGVyYXRpb25zIiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRF
X01FVEhPRF9UQUJMRShKU1Rlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zKSB9Owor
CitKU1Rlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zOjpKU1Rlc3RTZXRMaWtlV2l0
aE92ZXJyaWRkZW5PcGVyYXRpb25zKFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9i
amVjdCYgZ2xvYmFsT2JqZWN0LCBSZWY8VGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlv
bnM+JiYgaW1wbCkKKyAgICA6IEpTRE9NV3JhcHBlcjxUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVu
T3BlcmF0aW9ucz4oc3RydWN0dXJlLCBnbG9iYWxPYmplY3QsIFdURk1vdmUoaW1wbCkpCit7Cit9
CisKK3ZvaWQgSlNUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9uczo6ZmluaXNoQ3Jl
YXRpb24oVk0mIHZtKQoreworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICBBU1NF
UlQoaW5oZXJpdHModm0sIGluZm8oKSkpOworCisgICAgc3RhdGljX2Fzc2VydCghc3RkOjppc19i
YXNlX29mPEFjdGl2ZURPTU9iamVjdCwgVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlv
bnM+Ojp2YWx1ZSwgIkludGVyZmFjZSBpcyBub3QgbWFya2VkIGFzIFtBY3RpdmVET01PYmplY3Rd
IGV2ZW4gdGhvdWdoIGltcGxlbWVudGF0aW9uIGNsYXNzIHN1YmNsYXNzZXMgQWN0aXZlRE9NT2Jq
ZWN0LiIpOworCit9CisKK0pTT2JqZWN0KiBKU1Rlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVy
YXRpb25zOjpjcmVhdGVQcm90b3R5cGUoVk0mIHZtLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFs
T2JqZWN0KQoreworICAgIHJldHVybiBKU1Rlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRp
b25zUHJvdG90eXBlOjpjcmVhdGUodm0sICZnbG9iYWxPYmplY3QsIEpTVGVzdFNldExpa2VXaXRo
T3ZlcnJpZGRlbk9wZXJhdGlvbnNQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZSh2bSwgJmdsb2Jh
bE9iamVjdCwgZ2xvYmFsT2JqZWN0Lm9iamVjdFByb3RvdHlwZSgpKSk7Cit9CisKK0pTT2JqZWN0
KiBKU1Rlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zOjpwcm90b3R5cGUoVk0mIHZt
LCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQoreworICAgIHJldHVybiBnZXRET01Q
cm90b3R5cGU8SlNUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucz4odm0sIGdsb2Jh
bE9iamVjdCk7Cit9CisKK0pTVmFsdWUgSlNUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0
aW9uczo6Z2V0Q29uc3RydWN0b3IoVk0mIHZtLCBjb25zdCBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0KQoreworICAgIHJldHVybiBnZXRET01Db25zdHJ1Y3RvcjxKU1Rlc3RTZXRMaWtlV2l0
aE92ZXJyaWRkZW5PcGVyYXRpb25zQ29uc3RydWN0b3I+KHZtLCAqanNDYXN0PGNvbnN0IEpTRE9N
R2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KSk7Cit9CisKK3ZvaWQgSlNUZXN0U2V0TGlrZVdp
dGhPdmVycmlkZGVuT3BlcmF0aW9uczo6ZGVzdHJveShKU0M6OkpTQ2VsbCogY2VsbCkKK3sKKyAg
ICBKU1Rlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zKiB0aGlzT2JqZWN0ID0gc3Rh
dGljX2Nhc3Q8SlNUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucyo+KGNlbGwpOwor
ICAgIHRoaXNPYmplY3QtPkpTVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnM6On5K
U1Rlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zKCk7Cit9CisKK3RlbXBsYXRlPD4g
aW5saW5lIEpTVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMqIElETEF0dHJpYnV0
ZTxKU1Rlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zPjo6Y2FzdChKU0dsb2JhbE9i
amVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlKQorewor
ICAgIHJldHVybiBqc0R5bmFtaWNDYXN0PEpTVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJh
dGlvbnMqPihKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KSwgSlNWYWx1ZTo6ZGVjb2Rl
KHRoaXNWYWx1ZSkpOworfQorCit0ZW1wbGF0ZTw+IGlubGluZSBKU1Rlc3RTZXRMaWtlV2l0aE92
ZXJyaWRkZW5PcGVyYXRpb25zKiBJRExPcGVyYXRpb248SlNUZXN0U2V0TGlrZVdpdGhPdmVycmlk
ZGVuT3BlcmF0aW9ucz46OmNhc3QoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3Qs
IENhbGxGcmFtZSYgY2FsbEZyYW1lKQoreworICAgIHJldHVybiBqc0R5bmFtaWNDYXN0PEpTVGVz
dFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMqPihKU0M6OmdldFZNKCZsZXhpY2FsR2xv
YmFsT2JqZWN0KSwgY2FsbEZyYW1lLnRoaXNWYWx1ZSgpKTsKK30KKworRW5jb2RlZEpTVmFsdWUg
anNUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9uc0NvbnN0cnVjdG9yKEpTR2xvYmFs
T2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFBy
b3BlcnR5TmFtZSkKK3sKKyAgICBWTSYgdm0gPSBKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmpl
Y3QpOworICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAg
IGF1dG8qIHByb3RvdHlwZSA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0U2V0TGlrZVdpdGhPdmVycmlk
ZGVuT3BlcmF0aW9uc1Byb3RvdHlwZSo+KHZtLCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7
CisgICAgaWYgKFVOTElLRUxZKCFwcm90b3R5cGUpKQorICAgICAgICByZXR1cm4gdGhyb3dWTVR5
cGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlKTsKKyAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKEpTVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnM6OmdldENv
bnN0cnVjdG9yKEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCksIHByb3RvdHlwZS0+Z2xv
YmFsT2JqZWN0KCkpKTsKK30KKworYm9vbCBzZXRKU1Rlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5P
cGVyYXRpb25zQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3Qs
IEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQor
eworICAgIFZNJiB2bSA9IEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgYXV0
byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgYXV0byogcHJvdG90
eXBlID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25z
UHJvdG90eXBlKj4odm0sIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKKyAgICBpZiAoVU5M
SUtFTFkoIXByb3RvdHlwZSkpIHsKKyAgICAgICAgdGhyb3dWTVR5cGVFcnJvcihsZXhpY2FsR2xv
YmFsT2JqZWN0LCB0aHJvd1Njb3BlKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAg
ICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3RvcgorICAgIHJldHVybiBwcm90b3R5
cGUtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+Y29uc3RydWN0b3IsIEpTVmFsdWU6
OmRlY29kZShlbmNvZGVkVmFsdWUpKTsKK30KKworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVz
dFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnNBZGRHZXR0ZXIoSlNHbG9iYWxPYmplY3Qm
IGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlv
bnMmIHRoaXNPYmplY3QpCit7CisgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xv
YmFsT2JqZWN0KTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CisgICAgUkVMRUFTRV9B
TkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETExvbmc+KGxleGljYWxHbG9iYWxPYmplY3Qs
IHRocm93U2NvcGUsIGltcGwuYWRkKCkpKSk7Cit9CisKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdFNl
dExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnNBZGQoSlNHbG9iYWxPYmplY3QqIGxleGljYWxH
bG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorewor
ICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0
aW9ucz46OmdldDxqc1Rlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zQWRkR2V0dGVy
LCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6QXNzZXJ0PigqbGV4aWNhbEdsb2JhbE9iamVjdCwg
dGhpc1ZhbHVlLCAiYWRkIik7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RTZXRM
aWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zQWRkU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zJiB0
aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQoreworICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgm
bGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOworICAg
IGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETExvbmc+KGxleGljYWxHbG9iYWxPYmplY3Qs
IHZhbHVlKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKKyAg
ICBBdHRyaWJ1dGVTZXR0ZXI6OmNhbGwobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwg
WyZdIHsKKyAgICAgICAgcmV0dXJuIGltcGwuc2V0QWRkKFdURk1vdmUobmF0aXZlVmFsdWUpKTsK
KyAgICB9KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBzZXRKU1Rlc3RTZXRMaWtlV2l0
aE92ZXJyaWRkZW5PcGVyYXRpb25zQWRkKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1
ZSkKK3sKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRl
bk9wZXJhdGlvbnM+OjpzZXQ8c2V0SlNUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9u
c0FkZFNldHRlcj4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVl
LCAiYWRkIik7Cit9CisKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RTZXRMaWtlV2l0aE92
ZXJyaWRkZW5PcGVyYXRpb25zU2l6ZUdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2Jh
bE9iamVjdCwgSlNUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucyYgdGhpc09iamVj
dCkKK3sKKyAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwor
ICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIFJFTEVB
U0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExBbnk+KGxleGljYWxHbG9iYWxPYmpl
Y3QsIHRocm93U2NvcGUsIGZvcndhcmRTaXplVG9TZXRMaWtlKGxleGljYWxHbG9iYWxPYmplY3Qs
IHRoaXNPYmplY3QpKSkpOworfQorCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXRMaWtlV2l0aE92
ZXJyaWRkZW5PcGVyYXRpb25zU2l6ZShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVj
dCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCit7CisgICAgcmV0dXJu
IElETEF0dHJpYnV0ZTxKU1Rlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zPjo6Z2V0
PGpzVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnNTaXplR2V0dGVyPigqbGV4aWNh
bEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCAic2l6ZSIpOworfQorCitzdGF0aWMgaW5saW5lIEpT
Qzo6RW5jb2RlZEpTVmFsdWUganNUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9uc1By
b3RvdHlwZUZ1bmN0aW9uRGVsZXRlQm9keShKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xv
YmFsT2JqZWN0LCBKU0M6OkNhbGxGcmFtZSogY2FsbEZyYW1lLCB0eXBlbmFtZSBJRExPcGVyYXRp
b248SlNUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucz46OkNsYXNzUGFyYW1ldGVy
IGNhc3RlZFRoaXMpCit7CisgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKGxleGljYWxHbG9iYWxP
YmplY3QpOworICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwor
ICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1l
KTsKKyAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOworICAgIHRocm93U2Nv
cGUucmVsZWFzZSgpOworICAgIGltcGwuZGVsZXRlKCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKK30KKworRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBq
c1Rlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zUHJvdG90eXBlRnVuY3Rpb25EZWxl
dGUoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZy
YW1lKQoreworICAgIHJldHVybiBJRExPcGVyYXRpb248SlNUZXN0U2V0TGlrZVdpdGhPdmVycmlk
ZGVuT3BlcmF0aW9ucz46OmNhbGw8anNUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9u
c1Byb3RvdHlwZUZ1bmN0aW9uRGVsZXRlQm9keT4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxs
RnJhbWUsICJkZWxldGUiKTsKK30KKworc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVl
IGpzVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnNQcm90b3R5cGVGdW5jdGlvbkhh
c0JvZHkoSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpDYWxs
RnJhbWUqIGNhbGxGcmFtZSwgdHlwZW5hbWUgSURMT3BlcmF0aW9uPEpTVGVzdFNldExpa2VXaXRo
T3ZlcnJpZGRlbk9wZXJhdGlvbnM+OjpDbGFzc1BhcmFtZXRlciBjYXN0ZWRUaGlzKQoreworICAg
IGF1dG8mIHZtID0gSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBhdXRvIHRo
cm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBVTlVTRURfUEFSQU0odGhy
b3dTY29wZSk7CisgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFVOTElLRUxZ
KGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCisgICAgICAgIHJldHVybiB0aHJvd1ZN
RXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJn
dW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOworICAgIEVuc3VyZVN0aWxsQWxpdmVT
Y29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApOworICAgIGF1
dG8ga2V5ID0gY29udmVydDxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1
bWVudDAudmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNv
ZGVkSlNWYWx1ZSgpKTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgSlNWYWx1
ZTo6ZW5jb2RlKHRvSlM8SURMQW55Pihmb3J3YXJkSGFzVG9TZXRMaWtlKCpsZXhpY2FsR2xvYmFs
T2JqZWN0LCAqY2FsbEZyYW1lLCAqY2FzdGVkVGhpcywgV1RGTW92ZShrZXkpKSkpKTsKK30KKwor
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5P
cGVyYXRpb25zUHJvdG90eXBlRnVuY3Rpb25IYXMoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9i
YWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQoreworICAgIHJldHVybiBJRExPcGVyYXRp
b248SlNUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucz46OmNhbGw8anNUZXN0U2V0
TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9uc1Byb3RvdHlwZUZ1bmN0aW9uSGFzQm9keT4oKmxl
eGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUsICJoYXMiKTsKK30KKworc3RhdGljIGlubGlu
ZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlv
bnNQcm90b3R5cGVGdW5jdGlvbkVudHJpZXNCb2R5KEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGlj
YWxHbG9iYWxPYmplY3QsIEpTQzo6Q2FsbEZyYW1lKiBjYWxsRnJhbWUsIHR5cGVuYW1lIElETE9w
ZXJhdGlvbjxKU1Rlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zPjo6Q2xhc3NQYXJh
bWV0ZXIgY2FzdGVkVGhpcykKK3sKKyAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0obGV4aWNhbEds
b2JhbE9iamVjdCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIFVOVVNFRF9QQVJBTShjYWxs
RnJhbWUpOworICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCBKU1ZhbHVlOjplbmNv
ZGUodG9KUzxJRExBbnk+KGZvcndhcmRFbnRyaWVzVG9TZXRMaWtlKCpsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCAqY2FsbEZyYW1lLCAqY2FzdGVkVGhpcykpKSk7Cit9CisKK0VuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwganNUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9uc1Byb3RvdHlw
ZUZ1bmN0aW9uRW50cmllcyhKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUpCit7CisgICAgcmV0dXJuIElETE9wZXJhdGlvbjxKU1Rlc3RTZXRM
aWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zPjo6Y2FsbDxqc1Rlc3RTZXRMaWtlV2l0aE92ZXJy
aWRkZW5PcGVyYXRpb25zUHJvdG90eXBlRnVuY3Rpb25FbnRyaWVzQm9keT4oKmxleGljYWxHbG9i
YWxPYmplY3QsICpjYWxsRnJhbWUsICJlbnRyaWVzIik7Cit9CisKK3N0YXRpYyBpbmxpbmUgSlND
OjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zUHJv
dG90eXBlRnVuY3Rpb25LZXlzQm9keShKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFs
T2JqZWN0LCBKU0M6OkNhbGxGcmFtZSogY2FsbEZyYW1lLCB0eXBlbmFtZSBJRExPcGVyYXRpb248
SlNUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucz46OkNsYXNzUGFyYW1ldGVyIGNh
c3RlZFRoaXMpCit7CisgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmpl
Y3QpOworICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAg
IFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsK
KyAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKHRvSlM8
SURMQW55Pihmb3J3YXJkS2V5c1RvU2V0TGlrZSgqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxG
cmFtZSwgKmNhc3RlZFRoaXMpKSkpOworfQorCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGpzVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnNQcm90b3R5cGVGdW5jdGlvbktl
eXMoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZy
YW1lKQoreworICAgIHJldHVybiBJRExPcGVyYXRpb248SlNUZXN0U2V0TGlrZVdpdGhPdmVycmlk
ZGVuT3BlcmF0aW9ucz46OmNhbGw8anNUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9u
c1Byb3RvdHlwZUZ1bmN0aW9uS2V5c0JvZHk+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZy
YW1lLCAia2V5cyIpOworfQorCitzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNU
ZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9uc1Byb3RvdHlwZUZ1bmN0aW9uVmFsdWVz
Qm9keShKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OkNhbGxG
cmFtZSogY2FsbEZyYW1lLCB0eXBlbmFtZSBJRExPcGVyYXRpb248SlNUZXN0U2V0TGlrZVdpdGhP
dmVycmlkZGVuT3BlcmF0aW9ucz46OkNsYXNzUGFyYW1ldGVyIGNhc3RlZFRoaXMpCit7CisgICAg
YXV0byYgdm0gPSBKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGF1dG8gdGhy
b3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIFVOVVNFRF9QQVJBTSh0aHJv
d1Njb3BlKTsKKyAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBSRUxFQVNFX0FORF9S
RVRVUk4odGhyb3dTY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKHRvSlM8SURMQW55Pihmb3J3YXJkVmFs
dWVzVG9TZXRMaWtlKCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lLCAqY2FzdGVkVGhp
cykpKSk7Cit9CisKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0U2V0TGlrZVdp
dGhPdmVycmlkZGVuT3BlcmF0aW9uc1Byb3RvdHlwZUZ1bmN0aW9uVmFsdWVzKEpTR2xvYmFsT2Jq
ZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKK3sKKyAgICBy
ZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnM+
OjpjYWxsPGpzVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnNQcm90b3R5cGVGdW5j
dGlvblZhbHVlc0JvZHk+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lLCAidmFsdWVz
Iik7Cit9CisKK3N0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXRMaWtl
V2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zUHJvdG90eXBlRnVuY3Rpb25Gb3JFYWNoQm9keShKU0M6
OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OkNhbGxGcmFtZSogY2Fs
bEZyYW1lLCB0eXBlbmFtZSBJRExPcGVyYXRpb248SlNUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVu
T3BlcmF0aW9ucz46OkNsYXNzUGFyYW1ldGVyIGNhc3RlZFRoaXMpCit7CisgICAgYXV0byYgdm0g
PSBKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGF1dG8gdGhyb3dTY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsK
KyAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1l
LT5hcmd1bWVudENvdW50KCkgPCAxKSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhp
Y2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJv
cihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CisgICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3Vt
ZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7CisgICAgYXV0byBjYWxsYmFj
ayA9IGNvbnZlcnQ8SURMQW55PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVl
KCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUo
KSk7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsIEpTVmFsdWU6OmVuY29kZSh0
b0pTPElETEFueT4oZm9yd2FyZEZvckVhY2hUb1NldExpa2UoKmxleGljYWxHbG9iYWxPYmplY3Qs
ICpjYWxsRnJhbWUsICpjYXN0ZWRUaGlzLCBXVEZNb3ZlKGNhbGxiYWNrKSkpKSk7Cit9CisKK0Vu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3Bl
cmF0aW9uc1Byb3RvdHlwZUZ1bmN0aW9uRm9yRWFjaChKU0dsb2JhbE9iamVjdCogbGV4aWNhbEds
b2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCit7CisgICAgcmV0dXJuIElETE9wZXJh
dGlvbjxKU1Rlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zPjo6Y2FsbDxqc1Rlc3RT
ZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zUHJvdG90eXBlRnVuY3Rpb25Gb3JFYWNoQm9k
eT4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUsICJmb3JFYWNoIik7Cit9CisKK3N0
YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXRMaWtlV2l0aE92ZXJyaWRk
ZW5PcGVyYXRpb25zUHJvdG90eXBlRnVuY3Rpb25DbGVhckJvZHkoSlNDOjpKU0dsb2JhbE9iamVj
dCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpDYWxsRnJhbWUqIGNhbGxGcmFtZSwgdHlwZW5h
bWUgSURMT3BlcmF0aW9uPEpTVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnM+OjpD
bGFzc1BhcmFtZXRlciBjYXN0ZWRUaGlzKQoreworICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTShs
ZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgVU5VU0VEX1BB
UkFNKGNhbGxGcmFtZSk7CisgICAgdGhyb3dTY29wZS5yZWxlYXNlKCk7CisgICAgZm9yd2FyZENs
ZWFyVG9TZXRMaWtlKCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lLCAqY2FzdGVkVGhp
cyk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKK30KKworRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVy
YXRpb25zUHJvdG90eXBlRnVuY3Rpb25DbGVhcihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2Jh
bE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCit7CisgICAgcmV0dXJuIElETE9wZXJhdGlv
bjxKU1Rlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zPjo6Y2FsbDxqc1Rlc3RTZXRM
aWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zUHJvdG90eXBlRnVuY3Rpb25DbGVhckJvZHk+KCps
ZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lLCAiY2xlYXIiKTsKK30KKworSlNDOjpJc29T
dWJzcGFjZSogSlNUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9uczo6c3Vic3BhY2VG
b3JJbXBsKEpTQzo6Vk0mIHZtKQoreworICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nh
c3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKKyAgICBhdXRvJiBzcGFjZXMgPSBj
bGllbnREYXRhLnN1YnNwYWNlcygpOworICAgIGlmIChhdXRvKiBzcGFjZSA9IHNwYWNlcy5tX3N1
YnNwYWNlRm9yVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMuZ2V0KCkpCisgICAg
ICAgIHJldHVybiBzcGFjZTsKKyAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpT
Qzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJh
dGlvbnM+IHx8ICFKU1Rlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zOjpuZWVkc0Rl
c3RydWN0aW9uKTsKKyAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNE
ZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnM+
KQorICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5P
cGVyYXRpb25zID0gbWFrZVVuaXF1ZTxJc29TdWJzcGFjZT4gSVNPX1NVQlNQQUNFX0lOSVQodm0u
aGVhcCwgdm0uZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLmdldCgpLCBKU1Rlc3RTZXRM
aWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zKTsKKyAgICBlbHNlCisgICAgICAgIHNwYWNlcy5t
X3N1YnNwYWNlRm9yVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMgPSBtYWtlVW5p
cXVlPElzb1N1YnNwYWNlPiBJU09fU1VCU1BBQ0VfSU5JVCh2bS5oZWFwLCB2bS5jZWxsSGVhcENl
bGxUeXBlLmdldCgpLCBKU1Rlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zKTsKKyAg
ICBhdXRvKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdFNldExpa2VXaXRoT3ZlcnJp
ZGRlbk9wZXJhdGlvbnMuZ2V0KCk7CitJR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxl
LWNvZGUiKQorSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCisg
ICAgaWYgKCZKU1Rlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zOjp2aXNpdE91dHB1
dENvbnN0cmFpbnRzICE9ICZKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50cykKKyAg
ICAgICAgY2xpZW50RGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsK
K0lHTk9SRV9XQVJOSU5HU19FTkQKK0lHTk9SRV9XQVJOSU5HU19FTkQKKyAgICByZXR1cm4gc3Bh
Y2U7Cit9CisKK3ZvaWQgSlNUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9uczo6YW5h
bHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQoreworICAgIGF1
dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0
aW9ucyo+KGNlbGwpOworICAgIGFuYWx5emVyLnNldFdyYXBwZWRPYmplY3RGb3JDZWxsKGNlbGws
ICZ0aGlzT2JqZWN0LT53cmFwcGVkKCkpOworICAgIGlmICh0aGlzT2JqZWN0LT5zY3JpcHRFeGVj
dXRpb25Db250ZXh0KCkpCisgICAgICAgIGFuYWx5emVyLnNldExhYmVsRm9yQ2VsbChjZWxsLCAi
dXJsICIgKyB0aGlzT2JqZWN0LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPnVybCgpLnN0cmlu
ZygpKTsKKyAgICBCYXNlOjphbmFseXplSGVhcChjZWxsLCBhbmFseXplcik7Cit9CisKK2Jvb2wg
SlNUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9uc093bmVyOjppc1JlYWNoYWJsZUZy
b21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIFNs
b3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQoreworICAgIFVOVVNFRF9Q
QVJBTShoYW5kbGUpOworICAgIFVOVVNFRF9QQVJBTSh2aXNpdG9yKTsKKyAgICBVTlVTRURfUEFS
QU0ocmVhc29uKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgSlNUZXN0U2V0TGlrZVdp
dGhPdmVycmlkZGVuT3BlcmF0aW9uc093bmVyOjpmaW5hbGl6ZShKU0M6OkhhbmRsZTxKU0M6OlVu
a25vd24+IGhhbmRsZSwgdm9pZCogY29udGV4dCkKK3sKKyAgICBhdXRvKiBqc1Rlc3RTZXRMaWtl
V2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zID0gc3RhdGljX2Nhc3Q8SlNUZXN0U2V0TGlrZVdpdGhP
dmVycmlkZGVuT3BlcmF0aW9ucyo+KGhhbmRsZS5zbG90KCktPmFzQ2VsbCgpKTsKKyAgICBhdXRv
JiB3b3JsZCA9ICpzdGF0aWNfY2FzdDxET01XcmFwcGVyV29ybGQqPihjb250ZXh0KTsKKyAgICB1
bmNhY2hlV3JhcHBlcih3b3JsZCwgJmpzVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlv
bnMtPndyYXBwZWQoKSwganNUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucyk7Cit9
CisKKyNpZiBFTkFCTEUoQklORElOR19JTlRFR1JJVFkpCisjaWYgUExBVEZPUk0oV0lOKQorI3By
YWdtYSB3YXJuaW5nKGRpc2FibGU6IDQ0ODMpCitleHRlcm4gIkMiIHsgZXh0ZXJuIHZvaWQgKCpj
b25zdCBfX2lkZW50aWZpZXIoIj8/XzdUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9u
c0BXZWJDb3JlQEA2QkAiKVtdKSgpOyB9CisjZWxzZQorZXh0ZXJuICJDIiB7IGV4dGVybiB2b2lk
KiBfWlRWTjdXZWJDb3JlMzVUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9uc0VbXTsg
fQorI2VuZGlmCisjZW5kaWYKKworSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpK
U0dsb2JhbE9iamVjdCosIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZjxUZXN0
U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucz4mJiBpbXBsKQoreworCisjaWYgRU5BQkxF
KEJJTkRJTkdfSU5URUdSSVRZKQorICAgIGNvbnN0IHZvaWQqIGFjdHVhbFZUYWJsZVBvaW50ZXIg
PSBnZXRWVGFibGVQb2ludGVyKGltcGwucHRyKCkpOworI2lmIFBMQVRGT1JNKFdJTikKKyAgICB2
b2lkKiBleHBlY3RlZFZUYWJsZVBvaW50ZXIgPSBfX2lkZW50aWZpZXIoIj8/XzdUZXN0U2V0TGlr
ZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9uc0BXZWJDb3JlQEA2QkAiKTsKKyNlbHNlCisgICAgdm9p
ZCogZXhwZWN0ZWRWVGFibGVQb2ludGVyID0gJl9aVFZON1dlYkNvcmUzNVRlc3RTZXRMaWtlV2l0
aE92ZXJyaWRkZW5PcGVyYXRpb25zRVsyXTsKKyNlbmRpZgorCisgICAgLy8gSWYgdGhpcyBmYWls
cyBUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucyBkb2VzIG5vdCBoYXZlIGEgdnRh
YmxlLCBzbyB5b3UgbmVlZCB0byBhZGQgdGhlCisgICAgLy8gSW1wbGVtZW50YXRpb25MYWNrc1ZU
YWJsZSBhdHRyaWJ1dGUgdG8gdGhlIGludGVyZmFjZSBkZWZpbml0aW9uCisgICAgc3RhdGljX2Fz
c2VydChzdGQ6OmlzX3BvbHltb3JwaGljPFRlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRp
b25zPjo6dmFsdWUsICJUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucyBpcyBub3Qg
cG9seW1vcnBoaWMiKTsKKworICAgIC8vIElmIHlvdSBoaXQgdGhpcyBhc3NlcnRpb24geW91IGVp
dGhlciBoYXZlIGEgdXNlIGFmdGVyIGZyZWUgYnVnLCBvcgorICAgIC8vIFRlc3RTZXRMaWtlV2l0
aE92ZXJyaWRkZW5PcGVyYXRpb25zIGhhcyBzdWJjbGFzc2VzLiBJZiBUZXN0U2V0TGlrZVdpdGhP
dmVycmlkZGVuT3BlcmF0aW9ucyBoYXMgc3ViY2xhc3NlcyB0aGF0IGdldCBwYXNzZWQKKyAgICAv
LyB0byB0b0pTKCkgd2UgY3VycmVudGx5IHJlcXVpcmUgVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRl
bk9wZXJhdGlvbnMgeW91IHRvIG9wdCBvdXQgb2YgYmluZGluZyBoYXJkZW5pbmcKKyAgICAvLyBi
eSBhZGRpbmcgdGhlIFNraXBWVGFibGVWYWxpZGF0aW9uIGF0dHJpYnV0ZSB0byB0aGUgaW50ZXJm
YWNlIElETCBkZWZpbml0aW9uCisgICAgUkVMRUFTRV9BU1NFUlQoYWN0dWFsVlRhYmxlUG9pbnRl
ciA9PSBleHBlY3RlZFZUYWJsZVBvaW50ZXIpOworI2VuZGlmCisgICAgcmV0dXJuIGNyZWF0ZVdy
YXBwZXI8VGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnM+KGdsb2JhbE9iamVjdCwg
V1RGTW92ZShpbXBsKSk7Cit9CisKK0pTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6SlNHbG9iYWxPYmpl
Y3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IFRlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zJiBpbXBsKQoreworICAgIHJldHVy
biB3cmFwKGxleGljYWxHbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdCwgaW1wbCk7Cit9CisKK1Rl
c3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zKiBKU1Rlc3RTZXRMaWtlV2l0aE92ZXJy
aWRkZW5PcGVyYXRpb25zOjp0b1dyYXBwZWQoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1
ZSkKK3sKKyAgICBpZiAoYXV0byogd3JhcHBlciA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0U2V0TGlr
ZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucyo+KHZtLCB2YWx1ZSkpCisgICAgICAgIHJldHVybiAm
d3JhcHBlci0+d3JhcHBlZCgpOworICAgIHJldHVybiBudWxscHRyOworfQorCit9CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2V0TGlrZVdpdGhP
dmVycmlkZGVuT3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25z
LmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDkzIEBACisvKgorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJL
aXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAgICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVk
IGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorCisgICAgVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAg
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNwcmFnbWEgb25j
ZQorCisjaW5jbHVkZSAiSlNET01XcmFwcGVyLmgiCisjaW5jbHVkZSAiVGVzdFNldExpa2VXaXRo
T3ZlcnJpZGRlbk9wZXJhdGlvbnMuaCIKKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBKU1Rlc3RTZXRMaWtlV2l0aE92ZXJyaWRk
ZW5PcGVyYXRpb25zIDogcHVibGljIEpTRE9NV3JhcHBlcjxUZXN0U2V0TGlrZVdpdGhPdmVycmlk
ZGVuT3BlcmF0aW9ucz4geworcHVibGljOgorICAgIHVzaW5nIEJhc2UgPSBKU0RPTVdyYXBwZXI8
VGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnM+OworICAgIHN0YXRpYyBKU1Rlc3RT
ZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zKiBjcmVhdGUoSlNDOjpTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmPFRlc3RTZXRMaWtl
V2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zPiYmIGltcGwpCisgICAgeworICAgICAgICBKU1Rlc3RT
ZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6
YWxsb2NhdGVDZWxsPEpTVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnM+KGdsb2Jh
bE9iamVjdC0+dm0oKS5oZWFwKSkgSlNUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9u
cyhzdHJ1Y3R1cmUsICpnbG9iYWxPYmplY3QsIFdURk1vdmUoaW1wbCkpOworICAgICAgICBwdHIt
PmZpbmlzaENyZWF0aW9uKGdsb2JhbE9iamVjdC0+dm0oKSk7CisgICAgICAgIHJldHVybiBwdHI7
CisgICAgfQorCisgICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIGNyZWF0ZVByb3RvdHlwZShKU0M6
OlZNJiwgSlNET01HbG9iYWxPYmplY3QmKTsKKyAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogcHJv
dG90eXBlKEpTQzo6Vk0mLCBKU0RPTUdsb2JhbE9iamVjdCYpOworICAgIHN0YXRpYyBUZXN0U2V0
TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucyogdG9XcmFwcGVkKEpTQzo6Vk0mLCBKU0M6OkpT
VmFsdWUpOworICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDOjpKU0NlbGwqKTsKKworICAgIERF
Q0xBUkVfSU5GTzsKKworICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJl
KEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNW
YWx1ZSBwcm90b3R5cGUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNy
ZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmpl
Y3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSwgSlNDOjpOb25BcnJheSk7CisgICAgfQor
CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBnZXRDb25zdHJ1Y3RvcihKU0M6OlZNJiwgY29uc3Qg
SlNDOjpKU0dsb2JhbE9iamVjdCopOworICAgIHRlbXBsYXRlPHR5cGVuYW1lLCBKU0M6OlN1YnNw
YWNlQWNjZXNzIG1vZGU+IHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6
OlZNJiB2bSkKKyAgICB7CisgICAgICAgIGlmIGNvbnN0ZXhwciAobW9kZSA9PSBKU0M6OlN1YnNw
YWNlQWNjZXNzOjpDb25jdXJyZW50bHkpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICAgICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbCh2bSk7CisgICAgfQorICAgIHN0YXRpYyBKU0M6
Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pOworICAgIHN0YXRpYyB2
b2lkIGFuYWx5emVIZWFwKEpTQ2VsbCosIEpTQzo6SGVhcEFuYWx5emVyJik7Citwcm90ZWN0ZWQ6
CisgICAgSlNUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucyhKU0M6OlN0cnVjdHVy
ZSosIEpTRE9NR2xvYmFsT2JqZWN0JiwgUmVmPFRlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVy
YXRpb25zPiYmKTsKKworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYpOworfTsKKwor
Y2xhc3MgSlNUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9uc093bmVyIDogcHVibGlj
IEpTQzo6V2Vha0hhbmRsZU93bmVyIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIGJvb2wgaXNSZWFj
aGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29u
dGV4dCwgSlNDOjpTbG90VmlzaXRvciYsIGNvbnN0IGNoYXIqKik7CisgICAgdmlydHVhbCB2b2lk
IGZpbmFsaXplKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQpOworfTsK
KworaW5saW5lIEpTQzo6V2Vha0hhbmRsZU93bmVyKiB3cmFwcGVyT3duZXIoRE9NV3JhcHBlcldv
cmxkJiwgVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMqKQoreworICAgIHN0YXRp
YyBOZXZlckRlc3Ryb3llZDxKU1Rlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zT3du
ZXI+IG93bmVyOworICAgIHJldHVybiAmb3duZXIuZ2V0KCk7Cit9CisKK2lubGluZSB2b2lkKiB3
cmFwcGVyS2V5KFRlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zKiB3cmFwcGFibGVP
YmplY3QpCit7CisgICAgcmV0dXJuIHdyYXBwYWJsZU9iamVjdDsKK30KKworSlNDOjpKU1ZhbHVl
IHRvSlMoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTRE9NR2xvYmFsT2JqZWN0KiwgVGVzdFNldExp
a2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMmKTsKK2lubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhK
U0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0RPTUdsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucyogaW1w
bCkgeyByZXR1cm4gaW1wbCA/IHRvSlMobGV4aWNhbEdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0
LCAqaW1wbCkgOiBKU0M6OmpzTnVsbCgpOyB9CitKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRl
ZChKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNET01HbG9iYWxPYmplY3QqLCBSZWY8VGVzdFNldExp
a2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnM+JiYpOworaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pT
TmV3bHlDcmVhdGVkKEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpT
RE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZlB0cjxUZXN0U2V0TGlrZVdpdGhPdmVy
cmlkZGVuT3BlcmF0aW9ucz4mJiBpbXBsKSB7IHJldHVybiBpbXBsID8gdG9KU05ld2x5Q3JlYXRl
ZChsZXhpY2FsR2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QsIGltcGwucmVsZWFzZU5vbk51bGwo
KSkgOiBKU0M6OmpzTnVsbCgpOyB9CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTRE9NV3JhcHBlckNv
bnZlcnRlclRyYWl0czxUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucz4geworICAg
IHVzaW5nIFdyYXBwZXJDbGFzcyA9IEpTVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlv
bnM7CisgICAgdXNpbmcgVG9XcmFwcGVkUmV0dXJuVHlwZSA9IFRlc3RTZXRMaWtlV2l0aE92ZXJy
aWRkZW5PcGVyYXRpb25zKjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>408668</attachid>
            <date>2020-09-13 17:27:26 -0700</date>
            <delta_ts>2020-09-14 14:55:29 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-216468-20200913172725.patch</filename>
            <type>text/plain</type>
            <size>140815</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2NzAwNikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM4IEBACisyMDIwLTA5LTEzICBTYW0gV2Vp
bmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBbV2ViSURMXSBNb3ZlIHN5bnRoZXRp
YyBvcGVyYXRpb24gY3JlYXRpb24gZnJvbSBJRExQYXJzZXIgdG8gQ29kZUdlbmVyYXRvckpTCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTY0NjgKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRyZXNzIEZJ
WE1FcyBpbiBJRExQYXJzZXIgYnkgbW92aW5nIHN5bnRoZXRpYyBvcGVyYXRpb24gY3JlYXRpb24g
b3V0IG9mIElETFBhcnNlcgorICAgICAgICBhbmQgaW50byBDb2RlR2VuZXJhdG9ySlMuIFJlcGxh
Y2UgdXNlIG9mIGlzSXRlcmFibGUvaXNNYXBMaWtlL2lzU2V0TGlrZSBwcmVkaWNhdGVzCisgICAg
ICAgIG9uIElETE9wZXJhdGlvbiBhbmQgSURMQXR0cmlidXRlIHdpdGggZXh0ZW5kZWQgYXR0cmli
dXRlcywgRnJvbUl0ZXJhYmxlLCAKKyAgICAgICAgRm9yd2FyZFRvTWFwTGlrZSBhbmQgRm9yd2Fy
ZFRvU2V0TGlrZS4KKworICAgICAgICBXaGlsZSB0aGlzIGNoYW5nZSBjb21wbGV0ZWx5IHJlbW92
ZXMgYWxsIG5vdGlvbiBvZiBvcGVyYXRpb25zL2F0dHJpYnV0ZXMgZnJvbSAKKyAgICAgICAgSURM
TWFwTGlrZSBhbmQgSURMU2V0TGlrZSwgSURMSXRlcmFibGUgcmV0YWlucyBhbiBvcGVyYXRpb25z
IGFycmF5LCBub3cgb25seQorICAgICAgICB1c2VkIGJ5IENvZGVHZW5lcmF0b3JKUywgdG8gYXZv
aWQgYSBsYXJnZXIgcmVmYWN0b3Jpbmcgb2YgdGhlIGNvZGUgZ2VuZXJhdGlvbi4KKyAgICAgICAg
RXZlbnR1YWxseSwgaXQgd291bGQgYmUgZ29vZCB0byBzdG9wIHVzaW5nIEFTVCBsZXZlbCBvcGVy
YXRpb25zIGFuZCBhdHRyaWJ1dGVzCisgICAgICAgIHRvIG1vZGVsIHRoZXNlIHN5bnRoZXRpYyBv
cGVyYXRpb25zLCBhbmQgaW5zdGVhZCBoYXZlIHRoZSBjb2RlIGdlbmVyYXRpb24KKyAgICAgICAg
bWFpbnRhaW4gYSBtb2RlbCB0aGF0IG1vcmUgY2xvc2VseSByZXNlbWJsZXMgdGhlIEVDTUFTY3Jp
cHQgb3V0cHV0IGRpcmVjdGx5LgorCisgICAgICAgIFdoaWxlIGhlcmUsIGFsc28gZml4IHRoZSBp
c3N1ZSB0aGF0IG1hcGxpa2UgYW5kIHNldGxpa2Ugd2VyZSBhbHdheXMgb3ZlcnJpZGluZworICAg
ICAgICBzZXQvY2xlYXIvZGVsZXRlIGFuZCBhZGQvY2xlYXIvZGVsZXRlIChyZXNwZWN0aXZlbHkp
IHdoZXJlIGFzIFdlYklETCBzYXlzIHRoZXkKKyAgICAgICAgc2hvdWxkIG9ubHkgYWRkIHRob3Nl
IGlmIHRoZSBpbnRlcmZhY2UgZG9lc24ndCBhbHJlYWR5IGhhdmUgbWVtYmVycyB3aXRoIHRob3Nl
CisgICAgICAgIG5hbWVzLiBBZGRzIG5ldyB0ZXN0cyBmb3IgdGhpcyBiZWhhdmlvci4KKworICAg
ICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtOgorICAgICAgICAqIGJp
bmRpbmdzL3NjcmlwdHMvSURMUGFyc2VyLnBtOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMv
dGVzdC9CaW5kaW5nVGVzdEdsb2JhbENvbnN0cnVjdG9ycy5pZGw6CisgICAgICAgICogYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TWFw
TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucy5oOiBBZGRlZC4KKyAgICAgICAgKiBiaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucy5j
cHA6IEFkZGVkLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXRM
aWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zLmg6IEFkZGVkLgorICAgICAgICAqIGJpbmRpbmdz
L3NjcmlwdHMvdGVzdC9TdXBwbGVtZW50YWxEZXBlbmRlbmNpZXMuZGVwOgorICAgICAgICAqIGJp
bmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucy5p
ZGw6IEFkZGVkLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0U2V0TGlrZVdp
dGhPdmVycmlkZGVuT3BlcmF0aW9ucy5pZGw6IEFkZGVkLgorCiAyMDIwLTA5LTEzICBTYW0gV2Vp
bmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KIAogICAgICAgICBGSVhNRSBpbiBNZWRpYURldmljZXMu
aWRsIGlzIGluY29ycmVjdApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9D
b2RlR2VuZXJhdG9ySlMucG0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0JKHJldmlzaW9uIDI2NzAwNikKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCSh3b3JraW5nIGNvcHkp
CkBAIC0xNjMsNiArMTYzLDkgQEAgc3ViIEdlbmVyYXRlSW50ZXJmYWNlCiAKICAgICAkY29kZUdl
bmVyYXRvci0+TGlua092ZXJsb2FkZWRPcGVyYXRpb25zKCRpbnRlcmZhY2UpOwogCisgICAgQWRk
SXRlcmFibGVPcGVyYXRpb25JZk5lZWRlZCgkaW50ZXJmYWNlKTsKKyAgICBBZGRNYXBMaWtlQXR0
cmlidXRlc0FuZE9wZXJhdGlvbklmTmVlZGVkKCRpbnRlcmZhY2UpOworICAgIEFkZFNldExpa2VB
dHRyaWJ1dGVzQW5kT3BlcmF0aW9uSWZOZWVkZWQoJGludGVyZmFjZSk7CiAgICAgQWRkU3RyaW5n
aWZpZXJPcGVyYXRpb25JZk5lZWRlZCgkaW50ZXJmYWNlKTsKICAgICBBZGRMZWdhY3lDYWxsZXJP
cGVyYXRpb25JZk5lZWRlZCgkaW50ZXJmYWNlKTsKIApAQCAtMTc1LDYgKzE3OCwyNzMgQEAgc3Vi
IEdlbmVyYXRlSW50ZXJmYWNlCiAgICAgfQogfQogCitzdWIgQWRkSXRlcmFibGVPcGVyYXRpb25J
Zk5lZWRlZAoreworICAgIG15ICRpbnRlcmZhY2UgPSBzaGlmdDsKKworICAgIHJldHVybiB1bmxl
c3MgJGludGVyZmFjZS0+aXRlcmFibGU7CisKKyAgICAkaW50ZXJmYWNlLT5pdGVyYWJsZS0+ZXh0
ZW5kZWRBdHRyaWJ1dGVzLT57RnJvbUl0ZXJhYmxlfSA9IDE7CisKKyAgICBteSAkc3ltYm9sSXRl
cmF0b3JPcGVyYXRpb24gPSBJRExPcGVyYXRpb24tPm5ldygpOworICAgICRzeW1ib2xJdGVyYXRv
ck9wZXJhdGlvbi0+bmFtZSgiW1N5bWJvbC5JdGVyYXRvcl0iKTsKKyAgICBJRExQYXJzZXI6OmNv
cHlFeHRlbmRlZEF0dHJpYnV0ZXMoJHN5bWJvbEl0ZXJhdG9yT3BlcmF0aW9uLT5leHRlbmRlZEF0
dHJpYnV0ZXMsICRpbnRlcmZhY2UtPml0ZXJhYmxlLT5leHRlbmRlZEF0dHJpYnV0ZXMpOworICAg
IHB1c2goQHskaW50ZXJmYWNlLT5pdGVyYWJsZS0+b3BlcmF0aW9uc30sICRzeW1ib2xJdGVyYXRv
ck9wZXJhdGlvbik7CisgICAgcHVzaChAeyRpbnRlcmZhY2UtPm9wZXJhdGlvbnN9LCAkc3ltYm9s
SXRlcmF0b3JPcGVyYXRpb24pIGlmIElzS2V5VmFsdWVJdGVyYWJsZUludGVyZmFjZSgkaW50ZXJm
YWNlKTsKKworICAgIG15ICRlbnRyaWVzT3BlcmF0aW9uID0gSURMT3BlcmF0aW9uLT5uZXcoKTsK
KyAgICAkZW50cmllc09wZXJhdGlvbi0+bmFtZSgiZW50cmllcyIpOworICAgIElETFBhcnNlcjo6
Y29weUV4dGVuZGVkQXR0cmlidXRlcygkZW50cmllc09wZXJhdGlvbi0+ZXh0ZW5kZWRBdHRyaWJ1
dGVzLCAkaW50ZXJmYWNlLT5pdGVyYWJsZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzKTsKKyAgICBwdXNo
KEB7JGludGVyZmFjZS0+aXRlcmFibGUtPm9wZXJhdGlvbnN9LCAkZW50cmllc09wZXJhdGlvbik7
CisgICAgcHVzaChAeyRpbnRlcmZhY2UtPm9wZXJhdGlvbnN9LCAkZW50cmllc09wZXJhdGlvbikg
aWYgSXNLZXlWYWx1ZUl0ZXJhYmxlSW50ZXJmYWNlKCRpbnRlcmZhY2UpOworCisgICAgbXkgJGtl
eXNPcGVyYXRpb24gPSBJRExPcGVyYXRpb24tPm5ldygpOworICAgICRrZXlzT3BlcmF0aW9uLT5u
YW1lKCJrZXlzIik7CisgICAgSURMUGFyc2VyOjpjb3B5RXh0ZW5kZWRBdHRyaWJ1dGVzKCRrZXlz
T3BlcmF0aW9uLT5leHRlbmRlZEF0dHJpYnV0ZXMsICRpbnRlcmZhY2UtPml0ZXJhYmxlLT5leHRl
bmRlZEF0dHJpYnV0ZXMpOworICAgIHB1c2goQHskaW50ZXJmYWNlLT5pdGVyYWJsZS0+b3BlcmF0
aW9uc30sICRrZXlzT3BlcmF0aW9uKTsKKyAgICBwdXNoKEB7JGludGVyZmFjZS0+b3BlcmF0aW9u
c30sICRrZXlzT3BlcmF0aW9uKSBpZiBJc0tleVZhbHVlSXRlcmFibGVJbnRlcmZhY2UoJGludGVy
ZmFjZSk7CisKKyAgICBteSAkdmFsdWVzT3BlcmF0aW9uID0gSURMT3BlcmF0aW9uLT5uZXcoKTsK
KyAgICAkdmFsdWVzT3BlcmF0aW9uLT5uYW1lKCJ2YWx1ZXMiKTsKKyAgICBJRExQYXJzZXI6OmNv
cHlFeHRlbmRlZEF0dHJpYnV0ZXMoJHZhbHVlc09wZXJhdGlvbi0+ZXh0ZW5kZWRBdHRyaWJ1dGVz
LCAkaW50ZXJmYWNlLT5pdGVyYWJsZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzKTsKKyAgICBwdXNoKEB7
JGludGVyZmFjZS0+aXRlcmFibGUtPm9wZXJhdGlvbnN9LCAkdmFsdWVzT3BlcmF0aW9uKTsKKyAg
ICBwdXNoKEB7JGludGVyZmFjZS0+b3BlcmF0aW9uc30sICR2YWx1ZXNPcGVyYXRpb24pIGlmIElz
S2V5VmFsdWVJdGVyYWJsZUludGVyZmFjZSgkaW50ZXJmYWNlKTsKKworICAgIG15ICRmb3JFYWNo
T3BlcmF0aW9uID0gSURMT3BlcmF0aW9uLT5uZXcoKTsKKyAgICAkZm9yRWFjaE9wZXJhdGlvbi0+
bmFtZSgiZm9yRWFjaCIpOworICAgIG15ICRmb3JFYWNoQXJndW1lbnQgPSBJRExBcmd1bWVudC0+
bmV3KCk7CisgICAgJGZvckVhY2hBcmd1bWVudC0+bmFtZSgiY2FsbGJhY2siKTsKKyAgICAkZm9y
RWFjaEFyZ3VtZW50LT50eXBlKElETFBhcnNlcjo6bWFrZVNpbXBsZVR5cGUoImFueSIpKTsKKyAg
ICBwdXNoKEB7JGZvckVhY2hPcGVyYXRpb24tPmFyZ3VtZW50c30sICgkZm9yRWFjaEFyZ3VtZW50
KSk7CisgICAgSURMUGFyc2VyOjpjb3B5RXh0ZW5kZWRBdHRyaWJ1dGVzKCRmb3JFYWNoT3BlcmF0
aW9uLT5leHRlbmRlZEF0dHJpYnV0ZXMsICRpbnRlcmZhY2UtPml0ZXJhYmxlLT5leHRlbmRlZEF0
dHJpYnV0ZXMpOworICAgIHB1c2goQHskaW50ZXJmYWNlLT5pdGVyYWJsZS0+b3BlcmF0aW9uc30s
ICRmb3JFYWNoT3BlcmF0aW9uKTsKKyAgICBwdXNoKEB7JGludGVyZmFjZS0+b3BlcmF0aW9uc30s
ICRmb3JFYWNoT3BlcmF0aW9uKSBpZiBJc0tleVZhbHVlSXRlcmFibGVJbnRlcmZhY2UoJGludGVy
ZmFjZSk7Cit9CisKK3N1YiBBZGRNYXBMaWtlQXR0cmlidXRlc0FuZE9wZXJhdGlvbklmTmVlZGVk
Cit7CisgICAgbXkgJGludGVyZmFjZSA9IHNoaWZ0OworCisgICAgcmV0dXJuIHVubGVzcyAkaW50
ZXJmYWNlLT5tYXBMaWtlOworCisgICAgJGludGVyZmFjZS0+bWFwTGlrZS0+ZXh0ZW5kZWRBdHRy
aWJ1dGVzLT57Rm9yd2FyZFRvTWFwTGlrZX0gPSAxOworCisgICAgIyBodHRwczovL2hleWNhbS5n
aXRodWIuaW8vd2ViaWRsLyNlcy1tYXAtc2l6ZQorICAgIG15ICRzaXplQXR0cmlidXRlID0gSURM
QXR0cmlidXRlLT5uZXcoKTsKKyAgICAkc2l6ZUF0dHJpYnV0ZS0+bmFtZSgic2l6ZSIpOworICAg
ICRzaXplQXR0cmlidXRlLT5pc1JlYWRPbmx5KDEpOworICAgICRzaXplQXR0cmlidXRlLT50eXBl
KElETFBhcnNlcjo6bWFrZVNpbXBsZVR5cGUoImFueSIpKTsKKyAgICBJRExQYXJzZXI6OmNvcHlF
eHRlbmRlZEF0dHJpYnV0ZXMoJHNpemVBdHRyaWJ1dGUtPmV4dGVuZGVkQXR0cmlidXRlcywgJGlu
dGVyZmFjZS0+bWFwTGlrZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzKTsKKyAgICAkc2l6ZUF0dHJpYnV0
ZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Tm90RW51bWVyYWJsZX0gPSAxOworICAgIHB1c2goQHsk
aW50ZXJmYWNlLT5hdHRyaWJ1dGVzfSwgJHNpemVBdHRyaWJ1dGUpOworCisgICAgIyBodHRwczov
L2hleWNhbS5naXRodWIuaW8vd2ViaWRsLyNlcy1tYXAtZ2V0LWhhcworICAgIG15ICRnZXRPcGVy
YXRpb24gPSBJRExPcGVyYXRpb24tPm5ldygpOworICAgICRnZXRPcGVyYXRpb24tPm5hbWUoImdl
dCIpOworICAgIG15ICRnZXRBcmd1bWVudCA9IElETEFyZ3VtZW50LT5uZXcoKTsKKyAgICAkZ2V0
QXJndW1lbnQtPm5hbWUoImtleSIpOworICAgICRnZXRBcmd1bWVudC0+dHlwZShJRExQYXJzZXI6
OmNsb25lVHlwZSgkaW50ZXJmYWNlLT5tYXBMaWtlLT5rZXlUeXBlKSk7CisgICAgcHVzaChAeyRn
ZXRPcGVyYXRpb24tPmFyZ3VtZW50c30sICgkZ2V0QXJndW1lbnQpKTsKKyAgICAkZ2V0T3BlcmF0
aW9uLT50eXBlKElETFBhcnNlcjo6bWFrZVNpbXBsZVR5cGUoImFueSIpKTsKKyAgICBJRExQYXJz
ZXI6OmNvcHlFeHRlbmRlZEF0dHJpYnV0ZXMoJGdldE9wZXJhdGlvbi0+ZXh0ZW5kZWRBdHRyaWJ1
dGVzLCAkaW50ZXJmYWNlLT5tYXBMaWtlLT5leHRlbmRlZEF0dHJpYnV0ZXMpOworICAgICRnZXRP
cGVyYXRpb24tPmV4dGVuZGVkQXR0cmlidXRlcy0+e05vdEVudW1lcmFibGV9ID0gMTsKKyAgICBw
dXNoKEB7JGludGVyZmFjZS0+b3BlcmF0aW9uc30sICRnZXRPcGVyYXRpb24pOworCisgICAgbXkg
JGhhc09wZXJhdGlvbiA9IElETE9wZXJhdGlvbi0+bmV3KCk7CisgICAgJGhhc09wZXJhdGlvbi0+
bmFtZSgiaGFzIik7CisgICAgbXkgJGhhc0FyZ3VtZW50ID0gSURMQXJndW1lbnQtPm5ldygpOwor
ICAgICRoYXNBcmd1bWVudC0+bmFtZSgia2V5Iik7CisgICAgJGhhc0FyZ3VtZW50LT50eXBlKElE
TFBhcnNlcjo6Y2xvbmVUeXBlKCRpbnRlcmZhY2UtPm1hcExpa2UtPmtleVR5cGUpKTsKKyAgICBw
dXNoKEB7JGhhc09wZXJhdGlvbi0+YXJndW1lbnRzfSwgKCRoYXNBcmd1bWVudCkpOworICAgICRo
YXNPcGVyYXRpb24tPnR5cGUoSURMUGFyc2VyOjptYWtlU2ltcGxlVHlwZSgiYW55IikpOworICAg
IElETFBhcnNlcjo6Y29weUV4dGVuZGVkQXR0cmlidXRlcygkaGFzT3BlcmF0aW9uLT5leHRlbmRl
ZEF0dHJpYnV0ZXMsICRpbnRlcmZhY2UtPm1hcExpa2UtPmV4dGVuZGVkQXR0cmlidXRlcyk7Cisg
ICAgJGhhc09wZXJhdGlvbi0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Tm90RW51bWVyYWJsZX0gPSAx
OworICAgIHB1c2goQHskaW50ZXJmYWNlLT5vcGVyYXRpb25zfSwgJGhhc09wZXJhdGlvbik7CisK
KyAgICAjIGh0dHBzOi8vaGV5Y2FtLmdpdGh1Yi5pby93ZWJpZGwvI2VzLW1hcC1lbnRyaWVzCisg
ICAgbXkgJGVudHJpZXNPcGVyYXRpb24gPSBJRExPcGVyYXRpb24tPm5ldygpOworICAgICRlbnRy
aWVzT3BlcmF0aW9uLT5uYW1lKCJlbnRyaWVzIik7CisgICAgJGVudHJpZXNPcGVyYXRpb24tPnR5
cGUoSURMUGFyc2VyOjptYWtlU2ltcGxlVHlwZSgiYW55IikpOworICAgIElETFBhcnNlcjo6Y29w
eUV4dGVuZGVkQXR0cmlidXRlcygkZW50cmllc09wZXJhdGlvbi0+ZXh0ZW5kZWRBdHRyaWJ1dGVz
LCAkaW50ZXJmYWNlLT5tYXBMaWtlLT5leHRlbmRlZEF0dHJpYnV0ZXMpOworICAgICRlbnRyaWVz
T3BlcmF0aW9uLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntOb3RFbnVtZXJhYmxlfSA9IDE7CisgICAg
cHVzaChAeyRpbnRlcmZhY2UtPm9wZXJhdGlvbnN9LCAkZW50cmllc09wZXJhdGlvbik7CisKKyAg
ICAjIGh0dHBzOi8vaGV5Y2FtLmdpdGh1Yi5pby93ZWJpZGwvI2VzLW1hcC1rZXlzLXZhbHVlcwor
ICAgIG15ICRrZXlzT3BlcmF0aW9uID0gSURMT3BlcmF0aW9uLT5uZXcoKTsKKyAgICAka2V5c09w
ZXJhdGlvbi0+bmFtZSgia2V5cyIpOworICAgICRrZXlzT3BlcmF0aW9uLT50eXBlKElETFBhcnNl
cjo6bWFrZVNpbXBsZVR5cGUoImFueSIpKTsKKyAgICBJRExQYXJzZXI6OmNvcHlFeHRlbmRlZEF0
dHJpYnV0ZXMoJGtleXNPcGVyYXRpb24tPmV4dGVuZGVkQXR0cmlidXRlcywgJGludGVyZmFjZS0+
bWFwTGlrZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzKTsKKyAgICAka2V5c09wZXJhdGlvbi0+ZXh0ZW5k
ZWRBdHRyaWJ1dGVzLT57Tm90RW51bWVyYWJsZX0gPSAxOworICAgIHB1c2goQHskaW50ZXJmYWNl
LT5vcGVyYXRpb25zfSwgJGtleXNPcGVyYXRpb24pOworCisgICAgbXkgJHZhbHVlc09wZXJhdGlv
biA9IElETE9wZXJhdGlvbi0+bmV3KCk7CisgICAgJHZhbHVlc09wZXJhdGlvbi0+bmFtZSgidmFs
dWVzIik7CisgICAgJHZhbHVlc09wZXJhdGlvbi0+dHlwZShJRExQYXJzZXI6Om1ha2VTaW1wbGVU
eXBlKCJhbnkiKSk7CisgICAgSURMUGFyc2VyOjpjb3B5RXh0ZW5kZWRBdHRyaWJ1dGVzKCR2YWx1
ZXNPcGVyYXRpb24tPmV4dGVuZGVkQXR0cmlidXRlcywgJGludGVyZmFjZS0+bWFwTGlrZS0+ZXh0
ZW5kZWRBdHRyaWJ1dGVzKTsKKyAgICAkdmFsdWVzT3BlcmF0aW9uLT5leHRlbmRlZEF0dHJpYnV0
ZXMtPntOb3RFbnVtZXJhYmxlfSA9IDE7CisgICAgcHVzaChAeyRpbnRlcmZhY2UtPm9wZXJhdGlv
bnN9LCAkdmFsdWVzT3BlcmF0aW9uKTsKKworICAgICMgaHR0cHM6Ly9oZXljYW0uZ2l0aHViLmlv
L3dlYmlkbC8jZXMtZm9yRWFjaAorICAgIG15ICRmb3JFYWNoT3BlcmF0aW9uID0gSURMT3BlcmF0
aW9uLT5uZXcoKTsKKyAgICAkZm9yRWFjaE9wZXJhdGlvbi0+bmFtZSgiZm9yRWFjaCIpOworICAg
ICRmb3JFYWNoT3BlcmF0aW9uLT50eXBlKElETFBhcnNlcjo6bWFrZVNpbXBsZVR5cGUoImFueSIp
KTsKKyAgICBteSAkZm9yRWFjaEFyZ3VtZW50ID0gSURMQXJndW1lbnQtPm5ldygpOworICAgICRm
b3JFYWNoQXJndW1lbnQtPm5hbWUoImNhbGxiYWNrIik7CisgICAgJGZvckVhY2hBcmd1bWVudC0+
dHlwZShJRExQYXJzZXI6Om1ha2VTaW1wbGVUeXBlKCJhbnkiKSk7CisgICAgcHVzaChAeyRmb3JF
YWNoT3BlcmF0aW9uLT5hcmd1bWVudHN9LCAoJGZvckVhY2hBcmd1bWVudCkpOworICAgIElETFBh
cnNlcjo6Y29weUV4dGVuZGVkQXR0cmlidXRlcygkZm9yRWFjaE9wZXJhdGlvbi0+ZXh0ZW5kZWRB
dHRyaWJ1dGVzLCAkaW50ZXJmYWNlLT5tYXBMaWtlLT5leHRlbmRlZEF0dHJpYnV0ZXMpOworICAg
IHB1c2goQHskaW50ZXJmYWNlLT5vcGVyYXRpb25zfSwgJGZvckVhY2hPcGVyYXRpb24pOworCisg
ICAgcmV0dXJuIGlmICRpbnRlcmZhY2UtPm1hcExpa2UtPmlzUmVhZE9ubHk7CisKKyAgICAjIGh0
dHBzOi8vaGV5Y2FtLmdpdGh1Yi5pby93ZWJpZGwvI2VzLW1hcC1zZXQKKyAgICB1bmxlc3MgKGdy
ZXAgeyAkXy0+bmFtZSBlcSAic2V0IiB9IChAeyRpbnRlcmZhY2UtPmF0dHJpYnV0ZXN9LCBAeyRp
bnRlcmZhY2UtPm9wZXJhdGlvbnN9LCBAeyRpbnRlcmZhY2UtPmNvbnN0YW50c30pKSB7CisgICAg
ICAgIG15ICRzZXRPcGVyYXRpb24gPSBJRExPcGVyYXRpb24tPm5ldygpOworICAgICAgICAkc2V0
T3BlcmF0aW9uLT5uYW1lKCJzZXQiKTsKKyAgICAgICAgbXkgJHNldEtleUFyZ3VtZW50ID0gSURM
QXJndW1lbnQtPm5ldygpOworICAgICAgICAkc2V0S2V5QXJndW1lbnQtPm5hbWUoImtleSIpOwor
ICAgICAgICAkc2V0S2V5QXJndW1lbnQtPnR5cGUoSURMUGFyc2VyOjpjbG9uZVR5cGUoJGludGVy
ZmFjZS0+bWFwTGlrZS0+a2V5VHlwZSkpOworICAgICAgICBteSAkc2V0VmFsdWVBcmd1bWVudCA9
IElETEFyZ3VtZW50LT5uZXcoKTsKKyAgICAgICAgJHNldFZhbHVlQXJndW1lbnQtPm5hbWUoInZh
bHVlIik7CisgICAgICAgICRzZXRWYWx1ZUFyZ3VtZW50LT50eXBlKElETFBhcnNlcjo6Y2xvbmVU
eXBlKCRpbnRlcmZhY2UtPm1hcExpa2UtPnZhbHVlVHlwZSkpOworICAgICAgICBwdXNoKEB7JHNl
dE9wZXJhdGlvbi0+YXJndW1lbnRzfSwgKCRzZXRLZXlBcmd1bWVudCkpOworICAgICAgICBwdXNo
KEB7JHNldE9wZXJhdGlvbi0+YXJndW1lbnRzfSwgKCRzZXRWYWx1ZUFyZ3VtZW50KSk7CisgICAg
ICAgICRzZXRPcGVyYXRpb24tPnR5cGUoSURMUGFyc2VyOjptYWtlU2ltcGxlVHlwZSgiYW55Iikp
OworICAgICAgICBJRExQYXJzZXI6OmNvcHlFeHRlbmRlZEF0dHJpYnV0ZXMoJHNldE9wZXJhdGlv
bi0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLCAkaW50ZXJmYWNlLT5tYXBMaWtlLT5leHRlbmRlZEF0dHJp
YnV0ZXMpOworICAgICAgICAkc2V0T3BlcmF0aW9uLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntOb3RF
bnVtZXJhYmxlfSA9IDE7CisgICAgICAgIHB1c2goQHskaW50ZXJmYWNlLT5vcGVyYXRpb25zfSwg
JHNldE9wZXJhdGlvbik7CisgICAgfQorCisgICAgIyBodHRwczovL2hleWNhbS5naXRodWIuaW8v
d2ViaWRsLyNlcy1tYXAtY2xlYXIKKyAgICB1bmxlc3MgKGdyZXAgeyAkXy0+bmFtZSBlcSAiY2xl
YXIiIH0gKEB7JGludGVyZmFjZS0+YXR0cmlidXRlc30sIEB7JGludGVyZmFjZS0+b3BlcmF0aW9u
c30sIEB7JGludGVyZmFjZS0+Y29uc3RhbnRzfSkpIHsKKyAgICAgICAgbXkgJGNsZWFyT3BlcmF0
aW9uID0gSURMT3BlcmF0aW9uLT5uZXcoKTsKKyAgICAgICAgJGNsZWFyT3BlcmF0aW9uLT5uYW1l
KCJjbGVhciIpOworICAgICAgICAkY2xlYXJPcGVyYXRpb24tPnR5cGUoSURMUGFyc2VyOjptYWtl
U2ltcGxlVHlwZSgidW5kZWZpbmVkIikpOworICAgICAgICBJRExQYXJzZXI6OmNvcHlFeHRlbmRl
ZEF0dHJpYnV0ZXMoJGNsZWFyT3BlcmF0aW9uLT5leHRlbmRlZEF0dHJpYnV0ZXMsICRpbnRlcmZh
Y2UtPm1hcExpa2UtPmV4dGVuZGVkQXR0cmlidXRlcyk7CisgICAgICAgICRjbGVhck9wZXJhdGlv
bi0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Tm90RW51bWVyYWJsZX0gPSAxOworICAgICAgICBwdXNo
KEB7JGludGVyZmFjZS0+b3BlcmF0aW9uc30sICRjbGVhck9wZXJhdGlvbik7CisgICAgfQorCisg
ICAgIyBodHRwczovL2hleWNhbS5naXRodWIuaW8vd2ViaWRsLyNlcy1tYXAtZGVsZXRlCisgICAg
dW5sZXNzIChncmVwIHsgJF8tPm5hbWUgZXEgImRlbGV0ZSIgfSAoQHskaW50ZXJmYWNlLT5hdHRy
aWJ1dGVzfSwgQHskaW50ZXJmYWNlLT5vcGVyYXRpb25zfSwgQHskaW50ZXJmYWNlLT5jb25zdGFu
dHN9KSkgeworICAgICAgICBteSAkZGVsZXRlT3BlcmF0aW9uID0gSURMT3BlcmF0aW9uLT5uZXco
KTsKKyAgICAgICAgJGRlbGV0ZU9wZXJhdGlvbi0+bmFtZSgiZGVsZXRlIik7CisgICAgICAgIG15
ICRkZWxldGVBcmd1bWVudCA9IElETEFyZ3VtZW50LT5uZXcoKTsKKyAgICAgICAgJGRlbGV0ZUFy
Z3VtZW50LT5uYW1lKCJrZXkiKTsKKyAgICAgICAgJGRlbGV0ZUFyZ3VtZW50LT50eXBlKElETFBh
cnNlcjo6Y2xvbmVUeXBlKCRpbnRlcmZhY2UtPm1hcExpa2UtPmtleVR5cGUpKTsKKyAgICAgICAg
cHVzaChAeyRkZWxldGVPcGVyYXRpb24tPmFyZ3VtZW50c30sICgkZGVsZXRlQXJndW1lbnQpKTsK
KyAgICAgICAgJGRlbGV0ZU9wZXJhdGlvbi0+dHlwZShJRExQYXJzZXI6Om1ha2VTaW1wbGVUeXBl
KCJhbnkiKSk7CisgICAgICAgIElETFBhcnNlcjo6Y29weUV4dGVuZGVkQXR0cmlidXRlcygkZGVs
ZXRlT3BlcmF0aW9uLT5leHRlbmRlZEF0dHJpYnV0ZXMsICRpbnRlcmZhY2UtPm1hcExpa2UtPmV4
dGVuZGVkQXR0cmlidXRlcyk7CisgICAgICAgICRkZWxldGVPcGVyYXRpb24tPmV4dGVuZGVkQXR0
cmlidXRlcy0+e05vdEVudW1lcmFibGV9ID0gMTsKKyAgICAgICAgcHVzaChAeyRpbnRlcmZhY2Ut
Pm9wZXJhdGlvbnN9LCAkZGVsZXRlT3BlcmF0aW9uKTsKKyAgICB9Cit9CisKK3N1YiBBZGRTZXRM
aWtlQXR0cmlidXRlc0FuZE9wZXJhdGlvbklmTmVlZGVkCit7CisgICAgbXkgJGludGVyZmFjZSA9
IHNoaWZ0OworCisgICAgcmV0dXJuIHVubGVzcyAkaW50ZXJmYWNlLT5zZXRMaWtlOworCisgICAg
JGludGVyZmFjZS0+c2V0TGlrZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Rm9yd2FyZFRvU2V0TGlr
ZX0gPSAxOworCisgICAgIyBodHRwczovL2hleWNhbS5naXRodWIuaW8vd2ViaWRsLyNlcy1zZXQt
c2l6ZQorICAgIG15ICRzaXplQXR0cmlidXRlID0gSURMQXR0cmlidXRlLT5uZXcoKTsKKyAgICAk
c2l6ZUF0dHJpYnV0ZS0+bmFtZSgic2l6ZSIpOworICAgICRzaXplQXR0cmlidXRlLT5pc1JlYWRP
bmx5KDEpOworICAgICRzaXplQXR0cmlidXRlLT50eXBlKElETFBhcnNlcjo6bWFrZVNpbXBsZVR5
cGUoImFueSIpKTsKKyAgICBJRExQYXJzZXI6OmNvcHlFeHRlbmRlZEF0dHJpYnV0ZXMoJHNpemVB
dHRyaWJ1dGUtPmV4dGVuZGVkQXR0cmlidXRlcywgJGludGVyZmFjZS0+c2V0TGlrZS0+ZXh0ZW5k
ZWRBdHRyaWJ1dGVzKTsKKyAgICAkc2l6ZUF0dHJpYnV0ZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57
Tm90RW51bWVyYWJsZX0gPSAxOworICAgIHB1c2goQHskaW50ZXJmYWNlLT5hdHRyaWJ1dGVzfSwg
JHNpemVBdHRyaWJ1dGUpOworCisgICAgIyBodHRwczovL2hleWNhbS5naXRodWIuaW8vd2ViaWRs
LyNlcy1zZXQtaGFzCisgICAgbXkgJGhhc09wZXJhdGlvbiA9IElETE9wZXJhdGlvbi0+bmV3KCk7
CisgICAgJGhhc09wZXJhdGlvbi0+bmFtZSgiaGFzIik7CisgICAgbXkgJGhhc0FyZ3VtZW50ID0g
SURMQXJndW1lbnQtPm5ldygpOworICAgICRoYXNBcmd1bWVudC0+bmFtZSgia2V5Iik7CisgICAg
JGhhc0FyZ3VtZW50LT50eXBlKElETFBhcnNlcjo6Y2xvbmVUeXBlKCRpbnRlcmZhY2UtPnNldExp
a2UtPml0ZW1UeXBlKSk7CisgICAgcHVzaChAeyRoYXNPcGVyYXRpb24tPmFyZ3VtZW50c30sICgk
aGFzQXJndW1lbnQpKTsKKyAgICAkaGFzT3BlcmF0aW9uLT50eXBlKElETFBhcnNlcjo6bWFrZVNp
bXBsZVR5cGUoImFueSIpKTsKKyAgICBJRExQYXJzZXI6OmNvcHlFeHRlbmRlZEF0dHJpYnV0ZXMo
JGhhc09wZXJhdGlvbi0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLCAkaW50ZXJmYWNlLT5zZXRMaWtlLT5l
eHRlbmRlZEF0dHJpYnV0ZXMpOworICAgICRoYXNPcGVyYXRpb24tPmV4dGVuZGVkQXR0cmlidXRl
cy0+e05vdEVudW1lcmFibGV9ID0gMTsKKyAgICBwdXNoKEB7JGludGVyZmFjZS0+b3BlcmF0aW9u
c30sICRoYXNPcGVyYXRpb24pOworCisgICAgIyBodHRwczovL2hleWNhbS5naXRodWIuaW8vd2Vi
aWRsLyNlcy1zZXQtZW50cmllcy1rZXlzCisgICAgbXkgJGVudHJpZXNPcGVyYXRpb24gPSBJRExP
cGVyYXRpb24tPm5ldygpOworICAgICRlbnRyaWVzT3BlcmF0aW9uLT5uYW1lKCJlbnRyaWVzIik7
CisgICAgJGVudHJpZXNPcGVyYXRpb24tPnR5cGUoSURMUGFyc2VyOjptYWtlU2ltcGxlVHlwZSgi
YW55IikpOworICAgIElETFBhcnNlcjo6Y29weUV4dGVuZGVkQXR0cmlidXRlcygkZW50cmllc09w
ZXJhdGlvbi0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLCAkaW50ZXJmYWNlLT5zZXRMaWtlLT5leHRlbmRl
ZEF0dHJpYnV0ZXMpOworICAgICRlbnRyaWVzT3BlcmF0aW9uLT5leHRlbmRlZEF0dHJpYnV0ZXMt
PntOb3RFbnVtZXJhYmxlfSA9IDE7CisgICAgcHVzaChAeyRpbnRlcmZhY2UtPm9wZXJhdGlvbnN9
LCAkZW50cmllc09wZXJhdGlvbik7CisKKyAgICBteSAka2V5c09wZXJhdGlvbiA9IElETE9wZXJh
dGlvbi0+bmV3KCk7CisgICAgJGtleXNPcGVyYXRpb24tPm5hbWUoImtleXMiKTsKKyAgICAka2V5
c09wZXJhdGlvbi0+dHlwZShJRExQYXJzZXI6Om1ha2VTaW1wbGVUeXBlKCJhbnkiKSk7CisgICAg
SURMUGFyc2VyOjpjb3B5RXh0ZW5kZWRBdHRyaWJ1dGVzKCRrZXlzT3BlcmF0aW9uLT5leHRlbmRl
ZEF0dHJpYnV0ZXMsICRpbnRlcmZhY2UtPnNldExpa2UtPmV4dGVuZGVkQXR0cmlidXRlcyk7Cisg
ICAgJGtleXNPcGVyYXRpb24tPmV4dGVuZGVkQXR0cmlidXRlcy0+e05vdEVudW1lcmFibGV9ID0g
MTsKKyAgICBwdXNoKEB7JGludGVyZmFjZS0+b3BlcmF0aW9uc30sICRrZXlzT3BlcmF0aW9uKTsK
KworICAgICMgaHR0cHM6Ly9oZXljYW0uZ2l0aHViLmlvL3dlYmlkbC8jZXMtc2V0LXZhbHVlcwor
ICAgIG15ICR2YWx1ZXNPcGVyYXRpb24gPSBJRExPcGVyYXRpb24tPm5ldygpOworICAgICR2YWx1
ZXNPcGVyYXRpb24tPm5hbWUoInZhbHVlcyIpOworICAgICR2YWx1ZXNPcGVyYXRpb24tPnR5cGUo
SURMUGFyc2VyOjptYWtlU2ltcGxlVHlwZSgiYW55IikpOworICAgIElETFBhcnNlcjo6Y29weUV4
dGVuZGVkQXR0cmlidXRlcygkdmFsdWVzT3BlcmF0aW9uLT5leHRlbmRlZEF0dHJpYnV0ZXMsICRp
bnRlcmZhY2UtPnNldExpa2UtPmV4dGVuZGVkQXR0cmlidXRlcyk7CisgICAgJHZhbHVlc09wZXJh
dGlvbi0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Tm90RW51bWVyYWJsZX0gPSAxOworICAgIHB1c2go
QHskaW50ZXJmYWNlLT5vcGVyYXRpb25zfSwgJHZhbHVlc09wZXJhdGlvbik7CisKKyAgICAjIGh0
dHBzOi8vaGV5Y2FtLmdpdGh1Yi5pby93ZWJpZGwvI2VzLWZvckVhY2gKKyAgICBteSAkZm9yRWFj
aE9wZXJhdGlvbiA9IElETE9wZXJhdGlvbi0+bmV3KCk7CisgICAgJGZvckVhY2hPcGVyYXRpb24t
Pm5hbWUoImZvckVhY2giKTsKKyAgICBteSAkZm9yRWFjaEFyZ3VtZW50ID0gSURMQXJndW1lbnQt
Pm5ldygpOworICAgICRmb3JFYWNoQXJndW1lbnQtPm5hbWUoImNhbGxiYWNrIik7CisgICAgJGZv
ckVhY2hBcmd1bWVudC0+dHlwZShJRExQYXJzZXI6Om1ha2VTaW1wbGVUeXBlKCJhbnkiKSk7Cisg
ICAgcHVzaChAeyRmb3JFYWNoT3BlcmF0aW9uLT5hcmd1bWVudHN9LCAoJGZvckVhY2hBcmd1bWVu
dCkpOworICAgICRmb3JFYWNoT3BlcmF0aW9uLT50eXBlKElETFBhcnNlcjo6bWFrZVNpbXBsZVR5
cGUoImFueSIpKTsKKyAgICBJRExQYXJzZXI6OmNvcHlFeHRlbmRlZEF0dHJpYnV0ZXMoJGZvckVh
Y2hPcGVyYXRpb24tPmV4dGVuZGVkQXR0cmlidXRlcywgJGludGVyZmFjZS0+c2V0TGlrZS0+ZXh0
ZW5kZWRBdHRyaWJ1dGVzKTsKKyAgICAjIEZJWE1FOiBUaGUgV2ViSURMIHNwZWMgc2F5cyB0aGF0
IHRoZSBmb3JFYWNoIG9wZXJhdGlvbiBzaG91bGQgYmUgZW51bWVyYWJsZS4KKyAgICAkZm9yRWFj
aE9wZXJhdGlvbi0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Tm90RW51bWVyYWJsZX0gPSAxOworICAg
IHB1c2goQHskaW50ZXJmYWNlLT5vcGVyYXRpb25zfSwgJGZvckVhY2hPcGVyYXRpb24pOworCisg
ICAgcmV0dXJuIGlmICRpbnRlcmZhY2UtPnNldExpa2UtPmlzUmVhZE9ubHk7CisKKyAgICAjIGh0
dHBzOi8vaGV5Y2FtLmdpdGh1Yi5pby93ZWJpZGwvI2VzLWFkZC1kZWxldGUKKyAgICB1bmxlc3Mg
KGdyZXAgeyAkXy0+bmFtZSBlcSAiYWRkIiB9IChAeyRpbnRlcmZhY2UtPmF0dHJpYnV0ZXN9LCBA
eyRpbnRlcmZhY2UtPm9wZXJhdGlvbnN9LCBAeyRpbnRlcmZhY2UtPmNvbnN0YW50c30pKSB7Cisg
ICAgICAgIG15ICRhZGRPcGVyYXRpb24gPSBJRExPcGVyYXRpb24tPm5ldygpOworICAgICAgICAk
YWRkT3BlcmF0aW9uLT5uYW1lKCJhZGQiKTsKKyAgICAgICAgbXkgJGFkZEFyZ3VtZW50ID0gSURM
QXJndW1lbnQtPm5ldygpOworICAgICAgICAkYWRkQXJndW1lbnQtPm5hbWUoImtleSIpOworICAg
ICAgICAkYWRkQXJndW1lbnQtPnR5cGUoSURMUGFyc2VyOjpjbG9uZVR5cGUoJGludGVyZmFjZS0+
c2V0TGlrZS0+aXRlbVR5cGUpKTsKKyAgICAgICAgcHVzaChAeyRhZGRPcGVyYXRpb24tPmFyZ3Vt
ZW50c30sICgkYWRkQXJndW1lbnQpKTsKKyAgICAgICAgJGFkZE9wZXJhdGlvbi0+dHlwZShJRExQ
YXJzZXI6Om1ha2VTaW1wbGVUeXBlKCJhbnkiKSk7CisgICAgICAgIElETFBhcnNlcjo6Y29weUV4
dGVuZGVkQXR0cmlidXRlcygkYWRkT3BlcmF0aW9uLT5leHRlbmRlZEF0dHJpYnV0ZXMsICRpbnRl
cmZhY2UtPnNldExpa2UtPmV4dGVuZGVkQXR0cmlidXRlcyk7CisgICAgICAgICRhZGRPcGVyYXRp
b24tPmV4dGVuZGVkQXR0cmlidXRlcy0+e05vdEVudW1lcmFibGV9ID0gMTsKKyAgICAgICAgcHVz
aChAeyRpbnRlcmZhY2UtPm9wZXJhdGlvbnN9LCAkYWRkT3BlcmF0aW9uKTsKKyAgICB9CisKKyAg
ICAjIGh0dHBzOi8vaGV5Y2FtLmdpdGh1Yi5pby93ZWJpZGwvI2VzLXNldC1jbGVhcgorICAgIHVu
bGVzcyAoZ3JlcCB7ICRfLT5uYW1lIGVxICJjbGVhciIgfSAoQHskaW50ZXJmYWNlLT5hdHRyaWJ1
dGVzfSwgQHskaW50ZXJmYWNlLT5vcGVyYXRpb25zfSwgQHskaW50ZXJmYWNlLT5jb25zdGFudHN9
KSkgeworICAgICAgICBteSAkY2xlYXJPcGVyYXRpb24gPSBJRExPcGVyYXRpb24tPm5ldygpOwor
ICAgICAgICAkY2xlYXJPcGVyYXRpb24tPm5hbWUoImNsZWFyIik7CisgICAgICAgICRjbGVhck9w
ZXJhdGlvbi0+dHlwZShJRExQYXJzZXI6Om1ha2VTaW1wbGVUeXBlKCJ1bmRlZmluZWQiKSk7Cisg
ICAgICAgIElETFBhcnNlcjo6Y29weUV4dGVuZGVkQXR0cmlidXRlcygkY2xlYXJPcGVyYXRpb24t
PmV4dGVuZGVkQXR0cmlidXRlcywgJGludGVyZmFjZS0+c2V0TGlrZS0+ZXh0ZW5kZWRBdHRyaWJ1
dGVzKTsKKyAgICAgICAgJGNsZWFyT3BlcmF0aW9uLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntOb3RF
bnVtZXJhYmxlfSA9IDE7CisgICAgICAgIHB1c2goQHskaW50ZXJmYWNlLT5vcGVyYXRpb25zfSwg
JGNsZWFyT3BlcmF0aW9uKTsKKyAgICB9CisKKyAgICB1bmxlc3MgKGdyZXAgeyAkXy0+bmFtZSBl
cSAiZGVsZXRlIiB9IChAeyRpbnRlcmZhY2UtPmF0dHJpYnV0ZXN9LCBAeyRpbnRlcmZhY2UtPm9w
ZXJhdGlvbnN9LCBAeyRpbnRlcmZhY2UtPmNvbnN0YW50c30pKSB7CisgICAgICAgIG15ICRkZWxl
dGVPcGVyYXRpb24gPSBJRExPcGVyYXRpb24tPm5ldygpOworICAgICAgICAkZGVsZXRlT3BlcmF0
aW9uLT5uYW1lKCJkZWxldGUiKTsKKyAgICAgICAgbXkgJGRlbGV0ZUFyZ3VtZW50ID0gSURMQXJn
dW1lbnQtPm5ldygpOworICAgICAgICAkZGVsZXRlQXJndW1lbnQtPm5hbWUoImtleSIpOworICAg
ICAgICAkZGVsZXRlQXJndW1lbnQtPnR5cGUoSURMUGFyc2VyOjpjbG9uZVR5cGUoJGludGVyZmFj
ZS0+c2V0TGlrZS0+aXRlbVR5cGUpKTsKKyAgICAgICAgcHVzaChAeyRkZWxldGVPcGVyYXRpb24t
PmFyZ3VtZW50c30sICgkZGVsZXRlQXJndW1lbnQpKTsKKyAgICAgICAgJGRlbGV0ZU9wZXJhdGlv
bi0+dHlwZShJRExQYXJzZXI6Om1ha2VTaW1wbGVUeXBlKCJhbnkiKSk7CisgICAgICAgIElETFBh
cnNlcjo6Y29weUV4dGVuZGVkQXR0cmlidXRlcygkZGVsZXRlT3BlcmF0aW9uLT5leHRlbmRlZEF0
dHJpYnV0ZXMsICRpbnRlcmZhY2UtPnNldExpa2UtPmV4dGVuZGVkQXR0cmlidXRlcyk7CisgICAg
ICAgICRkZWxldGVPcGVyYXRpb24tPmV4dGVuZGVkQXR0cmlidXRlcy0+e05vdEVudW1lcmFibGV9
ID0gMTsKKyAgICAgICAgcHVzaChAeyRpbnRlcmZhY2UtPm9wZXJhdGlvbnN9LCAkZGVsZXRlT3Bl
cmF0aW9uKTsKKyAgICB9Cit9CisKIHN1YiBBZGRTdHJpbmdpZmllck9wZXJhdGlvbklmTmVlZGVk
CiB7CiAgICAgbXkgJGludGVyZmFjZSA9IHNoaWZ0OwpAQCAtMTYwNCwxMSArMTg3NCwxMSBAQCBz
dWIgR2V0RnVsbHlRdWFsaWZpZWRJbXBsZW1lbnRhdGlvbkNhbGxOCiAgICAgICAgIHJldHVybiAk
aW50ZXJmYWNlLT50eXBlLT5uYW1lIC4gIjo6JHtpbXBsZW1lbnRhdGlvbk5hbWV9IjsKICAgICB9
CiAgICAgCi0gICAgaWYgKCRwcm9wZXJ0eS0+aXNNYXBMaWtlKSB7CisgICAgaWYgKCRwcm9wZXJ0
eS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Rm9yd2FyZFRvTWFwTGlrZX0pIHsKICAgICAgICAgcmV0
dXJuICJmb3J3YXJkIiAuICRjb2RlR2VuZXJhdG9yLT5XS191Y2ZpcnN0KCRwcm9wZXJ0eS0+bmFt
ZSkgLiAiVG9NYXBMaWtlIjsKICAgICB9CiAgICAgCi0gICAgaWYgKCRwcm9wZXJ0eS0+aXNTZXRM
aWtlKSB7CisgICAgaWYgKCRwcm9wZXJ0eS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Rm9yd2FyZFRv
U2V0TGlrZX0pIHsKICAgICAgICAgcmV0dXJuICJmb3J3YXJkIiAuICRjb2RlR2VuZXJhdG9yLT5X
S191Y2ZpcnN0KCRwcm9wZXJ0eS0+bmFtZSkgLiAiVG9TZXRMaWtlIjsKICAgICB9CiAKQEAgLTE2
MjMsNyArMTg5Myw3IEBAIHN1YiBBZGRBZGRpdGlvbmFsQXJndW1lbnRzRm9ySW1wbGVtZW50YXQK
ICAgICAgICAgdW5zaGlmdChAJGFyZ3VtZW50cywgJGltcGxFeHByZXNzaW9uKTsKICAgICB9CiAg
ICAgCi0gICAgaWYgKCRwcm9wZXJ0eS0+aXNNYXBMaWtlIG9yICRwcm9wZXJ0eS0+aXNTZXRMaWtl
KSB7CisgICAgaWYgKCRwcm9wZXJ0eS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Rm9yd2FyZFRvTWFw
TGlrZX0gb3IgJHByb3BlcnR5LT5leHRlbmRlZEF0dHJpYnV0ZXMtPntGb3J3YXJkVG9TZXRMaWtl
fSkgewogICAgICAgICBwdXNoKEAkYXJndW1lbnRzLCAkZ2xvYmFsT2JqZWN0KTsKICAgICAgICAg
aWYgKHJlZigkcHJvcGVydHkpIGVxICJJRExPcGVyYXRpb24iKSB7CiAgICAgICAgICAgICBwdXNo
KEAkYXJndW1lbnRzLCAkY2FsbEZyYW1lKTsKQEAgLTE3NjEsOCArMjAzMSw4IEBAIHN1YiBJc0Fj
Y2VsZXJhdGVkRE9NQXR0cmlidXRlCiAgICAgcmV0dXJuIDAgaWYgJGludGVyZmFjZS0+ZXh0ZW5k
ZWRBdHRyaWJ1dGVzLT57Q3VzdG9tUHJveHlUb0pTT2JqZWN0fTsKIAogICAgIHJldHVybiAwIGlm
ICRhdHRyaWJ1dGUtPmlzU3RhdGljOwotICAgIHJldHVybiAwIGlmICRhdHRyaWJ1dGUtPmlzTWFw
TGlrZTsKLSAgICByZXR1cm4gMCBpZiAkYXR0cmlidXRlLT5pc1NldExpa2U7CisgICAgcmV0dXJu
IDAgaWYgJGF0dHJpYnV0ZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Rm9yd2FyZFRvTWFwTGlrZX07
CisgICAgcmV0dXJuIDAgaWYgJGF0dHJpYnV0ZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Rm9yd2Fy
ZFRvU2V0TGlrZX07CiAgICAgcmV0dXJuIDAgaWYgJGNvZGVHZW5lcmF0b3ItPklzQ29uc3RydWN0
b3JUeXBlKCRhdHRyaWJ1dGUtPnR5cGUpOwogICAgIHJldHVybiAwIGlmIElzSlNCdWlsdGluKCRp
bnRlcmZhY2UsICRhdHRyaWJ1dGUpOwogICAgIHJldHVybiAwIGlmICRhdHRyaWJ1dGUtPmV4dGVu
ZGVkQXR0cmlidXRlcy0+e0xlZ2FjeUxlbmllbnRUaGlzfTsKQEAgLTE4NDEsOSArMjExMSw2IEBA
IHN1YiBQcm90b3R5cGVPcGVyYXRpb25Db3VudAogICAgICAgICAkY291bnQrKyBpZiAhJG9wZXJh
dGlvbi0+aXNTdGF0aWMgJiYgIU9wZXJhdGlvblNob3VsZEJlT25JbnN0YW5jZSgkaW50ZXJmYWNl
LCAkb3BlcmF0aW9uKTsKICAgICB9CiAKLSAgICAkY291bnQgKz0gc2NhbGFyIEB7JGludGVyZmFj
ZS0+aXRlcmFibGUtPm9wZXJhdGlvbnN9IGlmICRpbnRlcmZhY2UtPml0ZXJhYmxlOwotICAgICRj
b3VudCArPSBzY2FsYXIgQHskaW50ZXJmYWNlLT5tYXBMaWtlLT5vcGVyYXRpb25zfSBpZiAkaW50
ZXJmYWNlLT5tYXBMaWtlOwotICAgICRjb3VudCArPSBzY2FsYXIgQHskaW50ZXJmYWNlLT5zZXRM
aWtlLT5vcGVyYXRpb25zfSBpZiAkaW50ZXJmYWNlLT5zZXRMaWtlOwogICAgICRjb3VudCArPSBz
Y2FsYXIgQHskaW50ZXJmYWNlLT5zZXJpYWxpemFibGUtPm9wZXJhdGlvbnN9IGlmICRpbnRlcmZh
Y2UtPnNlcmlhbGl6YWJsZTsKIAogICAgIHJldHVybiAkY291bnQ7CkBAIC0zMTA4LDggKzMzNzUs
NiBAQCBzdWIgR2VuZXJhdGVQcm9wZXJ0aWVzSGFzaFRhYmxlCiAgICAgcmV0dXJuIDAgaWYgISRw
cm9wZXJ0eUNvdW50OwogCiAgICAgbXkgQGF0dHJpYnV0ZXMgPSBAeyRpbnRlcmZhY2UtPmF0dHJp
YnV0ZXN9OwotICAgIHB1c2goQGF0dHJpYnV0ZXMsIEB7JGludGVyZmFjZS0+bWFwTGlrZS0+YXR0
cmlidXRlc30pIGlmICRpbnRlcmZhY2UtPm1hcExpa2U7Ci0gICAgcHVzaChAYXR0cmlidXRlcywg
QHskaW50ZXJmYWNlLT5zZXRMaWtlLT5hdHRyaWJ1dGVzfSkgaWYgJGludGVyZmFjZS0+c2V0TGlr
ZTsKIAogICAgIGZvcmVhY2ggbXkgJGF0dHJpYnV0ZSAoQGF0dHJpYnV0ZXMpIHsKICAgICAgICAg
bmV4dCBpZiAoJGF0dHJpYnV0ZS0+aXNTdGF0aWMpOwpAQCAtMzE2MCw5ICszNDI1LDYgQEAgc3Vi
IEdlbmVyYXRlUHJvcGVydGllc0hhc2hUYWJsZQogICAgIH0KIAogICAgIG15IEBvcGVyYXRpb25z
ID0gQHskaW50ZXJmYWNlLT5vcGVyYXRpb25zfTsKLSAgICBwdXNoKEBvcGVyYXRpb25zLCBAeyRp
bnRlcmZhY2UtPml0ZXJhYmxlLT5vcGVyYXRpb25zfSkgaWYgSXNLZXlWYWx1ZUl0ZXJhYmxlSW50
ZXJmYWNlKCRpbnRlcmZhY2UpOwotICAgIHB1c2goQG9wZXJhdGlvbnMsIEB7JGludGVyZmFjZS0+
bWFwTGlrZS0+b3BlcmF0aW9uc30pIGlmICRpbnRlcmZhY2UtPm1hcExpa2U7Ci0gICAgcHVzaChA
b3BlcmF0aW9ucywgQHskaW50ZXJmYWNlLT5zZXRMaWtlLT5vcGVyYXRpb25zfSkgaWYgJGludGVy
ZmFjZS0+c2V0TGlrZTsKICAgICBwdXNoKEBvcGVyYXRpb25zLCBAeyRpbnRlcmZhY2UtPnNlcmlh
bGl6YWJsZS0+b3BlcmF0aW9uc30pIGlmICRpbnRlcmZhY2UtPnNlcmlhbGl6YWJsZTsKICAgICBm
b3JlYWNoIG15ICRvcGVyYXRpb24gKEBvcGVyYXRpb25zKSB7CiAgICAgICAgIG5leHQgaWYgKCRv
cGVyYXRpb24tPmV4dGVuZGVkQXR0cmlidXRlcy0+e1ByaXZhdGVJZGVudGlmaWVyfSBhbmQgbm90
ICRvcGVyYXRpb24tPmV4dGVuZGVkQXR0cmlidXRlcy0+e1B1YmxpY0lkZW50aWZpZXJ9KTsKQEAg
LTM5NjgsMTQgKzQyMzAsOSBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgIHB1c2go
QGltcGxDb250ZW50LCBHZW5lcmF0ZURpY3Rpb25hcmllc0ltcGxlbWVudGF0aW9uQ29udGVudCgk
aW50ZXJmYWNlLCAkZGljdGlvbmFyaWVzKSk7CiAKICAgICBteSBAb3BlcmF0aW9ucyA9IEB7JGlu
dGVyZmFjZS0+b3BlcmF0aW9uc307Ci0gICAgcHVzaChAb3BlcmF0aW9ucywgQHskaW50ZXJmYWNl
LT5pdGVyYWJsZS0+b3BlcmF0aW9uc30pIGlmIElzS2V5VmFsdWVJdGVyYWJsZUludGVyZmFjZSgk
aW50ZXJmYWNlKTsKLSAgICBwdXNoKEBvcGVyYXRpb25zLCBAeyRpbnRlcmZhY2UtPm1hcExpa2Ut
Pm9wZXJhdGlvbnN9KSBpZiAkaW50ZXJmYWNlLT5tYXBMaWtlOwotICAgIHB1c2goQG9wZXJhdGlv
bnMsIEB7JGludGVyZmFjZS0+c2V0TGlrZS0+b3BlcmF0aW9uc30pIGlmICRpbnRlcmZhY2UtPnNl
dExpa2U7CiAgICAgcHVzaChAb3BlcmF0aW9ucywgQHskaW50ZXJmYWNlLT5zZXJpYWxpemFibGUt
Pm9wZXJhdGlvbnN9KSBpZiAkaW50ZXJmYWNlLT5zZXJpYWxpemFibGU7CiAKICAgICBteSBAYXR0
cmlidXRlcyA9IEB7JGludGVyZmFjZS0+YXR0cmlidXRlc307Ci0gICAgcHVzaChAYXR0cmlidXRl
cywgQHskaW50ZXJmYWNlLT5tYXBMaWtlLT5hdHRyaWJ1dGVzfSkgaWYgJGludGVyZmFjZS0+bWFw
TGlrZTsKLSAgICBwdXNoKEBhdHRyaWJ1dGVzLCBAeyRpbnRlcmZhY2UtPnNldExpa2UtPmF0dHJp
YnV0ZXN9KSBpZiAkaW50ZXJmYWNlLT5zZXRMaWtlOwogCiAgICAgbXkgJG51bUNvbnN0YW50cyA9
IEB7JGludGVyZmFjZS0+Y29uc3RhbnRzfTsKICAgICBteSAkbnVtT3BlcmF0aW9ucyA9IEBvcGVy
YXRpb25zOwpAQCAtNTAzMSw3ICs1Mjg4LDcgQEAgc3ViIEdlbmVyYXRlQXR0cmlidXRlR2V0dGVy
Qm9keURlZmluaXRpbwogCiAgICAgICAgIG15ICRnbG9iYWxPYmplY3RSZWZlcmVuY2UgPSAkYXR0
cmlidXRlLT5pc1N0YXRpYyA/ICIqanNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oJmxleGljYWxH
bG9iYWxPYmplY3QpIiA6ICIqdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSI7CiAgICAgICAgIG15
ICR0b0pTRXhwcmVzc2lvbiA9IE5hdGl2ZVRvSlNWYWx1ZVVzaW5nUmVmZXJlbmNlcygkYXR0cmli
dXRlLCAkaW50ZXJmYWNlLCAiJHtmdW5jdGlvbk5hbWV9KCIgLiBqb2luKCIsICIsIEBhcmd1bWVu
dHMpIC4gIikiLCAkZ2xvYmFsT2JqZWN0UmVmZXJlbmNlKTsKLSAgICAgICAgcHVzaChAJG91dHB1
dEFycmF5LCAiICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTtcbiIpIHVubGVz
cyAkYXR0cmlidXRlLT5pc1N0YXRpYyBvciAkYXR0cmlidXRlLT5pc01hcExpa2Ugb3IgJGF0dHJp
YnV0ZS0+aXNTZXRMaWtlOworICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgYXV0byYg
aW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpO1xuIikgdW5sZXNzICRhdHRyaWJ1dGUtPmlzU3Rh
dGljIG9yICRhdHRyaWJ1dGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+e0ZvcndhcmRUb01hcExpa2V9
IG9yICRhdHRyaWJ1dGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+e0ZvcndhcmRUb1NldExpa2V9Owog
CiAgICAgICAgIGlmICghSXNSZWFkb25seSgkYXR0cmlidXRlKSkgewogICAgICAgICAgICAgbXkg
JGNhbGxUcmFjaW5nQ2FsbGJhY2sgPSAkYXR0cmlidXRlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntD
YWxsVHJhY2luZ0NhbGxiYWNrfSB8fCAkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntD
YWxsVHJhY2luZ0NhbGxiYWNrfTsKQEAgLTUzNzQsNyArNTYzMSw3IEBAIHN1YiBHZW5lcmF0ZU9w
ZXJhdGlvbkJvZHlEZWZpbml0aW9uCiAgICAgfSBlbHNpZiAoSGFzQ3VzdG9tTWV0aG9kKCRvcGVy
YXRpb24pKSB7CiAgICAgICAgIEdlbmVyYXRlSW1wbGVtZW50YXRpb25DdXN0b21GdW5jdGlvbkNh
bGwoJG91dHB1dEFycmF5LCAkb3BlcmF0aW9uLCAkaW50ZXJmYWNlLCAkY2xhc3NOYW1lLCAkZnVu
Y3Rpb25JbXBsZW1lbnRhdGlvbk5hbWUsICRpbmRlbnQpOwogICAgIH0gZWxzZSB7Ci0gICAgICAg
IGlmICghJG9wZXJhdGlvbi0+aXNNYXBMaWtlICYmICEkb3BlcmF0aW9uLT5pc1NldExpa2UgJiYg
ISRvcGVyYXRpb24tPmlzU3RhdGljKSB7CisgICAgICAgIGlmICghJG9wZXJhdGlvbi0+ZXh0ZW5k
ZWRBdHRyaWJ1dGVzLT57Rm9yd2FyZFRvTWFwTGlrZX0gJiYgISRvcGVyYXRpb24tPmV4dGVuZGVk
QXR0cmlidXRlcy0+e0ZvcndhcmRUb1NldExpa2V9ICYmICEkb3BlcmF0aW9uLT5pc1N0YXRpYykg
ewogICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGF1dG8mIGltcGwgPSBjYXN0
ZWRUaGlzLT53cmFwcGVkKCk7XG4iKTsKICAgICAgICAgfQogCkBAIC01Mzk5LDcgKzU2NTYsNyBA
QCBzdWIgR2VuZXJhdGVPcGVyYXRpb25EZWZpbml0aW9uCiAgICAgbXkgKCRvdXRwdXRBcnJheSwg
JGludGVyZmFjZSwgJGNsYXNzTmFtZSwgJG9wZXJhdGlvbikgPSBAXzsKIAogICAgIHJldHVybiBp
ZiBJc0pTQnVpbHRpbigkaW50ZXJmYWNlLCAkb3BlcmF0aW9uKTsKLSAgICByZXR1cm4gaWYgJG9w
ZXJhdGlvbi0+aXNJdGVyYWJsZTsKKyAgICByZXR1cm4gaWYgJG9wZXJhdGlvbi0+ZXh0ZW5kZWRB
dHRyaWJ1dGVzLT57RnJvbUl0ZXJhYmxlfTsKICAgICByZXR1cm4gaWYgJG9wZXJhdGlvbi0+aXNT
ZXJpYWxpemVyOwogCiAgICAgbXkgJGlzQ3VzdG9tID0gSGFzQ3VzdG9tTWV0aG9kKCRvcGVyYXRp
b24pOwpAQCAtNzU1Miw5ICs3ODA5LDYgQEAgc3ViIEdldFJ1bnRpbWVFbmFibGVkU3RhdGljUHJv
cGVydGllcwogICAgIG15IEBydW50aW1lRW5hYmxlZFByb3BlcnRpZXMgPSAoKTsKIAogICAgIG15
IEBhdHRyaWJ1dGVzID0gQHskaW50ZXJmYWNlLT5hdHRyaWJ1dGVzfTsKLSAgICBwdXNoKEBhdHRy
aWJ1dGVzLCBAeyRpbnRlcmZhY2UtPm1hcExpa2UtPmF0dHJpYnV0ZXN9KSBpZiAkaW50ZXJmYWNl
LT5tYXBMaWtlOwotICAgIHB1c2goQGF0dHJpYnV0ZXMsIEB7JGludGVyZmFjZS0+c2V0TGlrZS0+
YXR0cmlidXRlc30pIGlmICRpbnRlcmZhY2UtPnNldExpa2U7Ci0KICAgICBmb3JlYWNoIG15ICRh
dHRyaWJ1dGUgKEBhdHRyaWJ1dGVzKSB7CiAgICAgICAgIG5leHQgaWYgQXR0cmlidXRlU2hvdWxk
QmVPbkluc3RhbmNlKCRpbnRlcmZhY2UsICRhdHRyaWJ1dGUpICE9IDA7CiAgICAgICAgIG5leHQg
aWYgbm90ICRhdHRyaWJ1dGUtPmlzU3RhdGljOwpAQCAtNzU2NSw5ICs3ODE5LDYgQEAgc3ViIEdl
dFJ1bnRpbWVFbmFibGVkU3RhdGljUHJvcGVydGllcwogICAgIH0KIAogICAgIG15IEBvcGVyYXRp
b25zID0gQHskaW50ZXJmYWNlLT5vcGVyYXRpb25zfTsKLSAgICBwdXNoKEBvcGVyYXRpb25zLCBA
eyRpbnRlcmZhY2UtPml0ZXJhYmxlLT5vcGVyYXRpb25zfSkgaWYgSXNLZXlWYWx1ZUl0ZXJhYmxl
SW50ZXJmYWNlKCRpbnRlcmZhY2UpOwotICAgIHB1c2goQG9wZXJhdGlvbnMsIEB7JGludGVyZmFj
ZS0+bWFwTGlrZS0+b3BlcmF0aW9uc30pIGlmICRpbnRlcmZhY2UtPm1hcExpa2U7Ci0gICAgcHVz
aChAb3BlcmF0aW9ucywgQHskaW50ZXJmYWNlLT5zZXRMaWtlLT5vcGVyYXRpb25zfSkgaWYgJGlu
dGVyZmFjZS0+c2V0TGlrZTsKICAgICBwdXNoKEBvcGVyYXRpb25zLCBAeyRpbnRlcmZhY2UtPnNl
cmlhbGl6YWJsZS0+b3BlcmF0aW9uc30pIGlmICRpbnRlcmZhY2UtPnNlcmlhbGl6YWJsZTsKICAg
ICBmb3JlYWNoIG15ICRvcGVyYXRpb24gKEBvcGVyYXRpb25zKSB7CiAgICAgICAgIG5leHQgaWYg
KCRvcGVyYXRpb24tPmV4dGVuZGVkQXR0cmlidXRlcy0+e1ByaXZhdGVJZGVudGlmaWVyfSBhbmQg
bm90ICRvcGVyYXRpb24tPmV4dGVuZGVkQXR0cmlidXRlcy0+e1B1YmxpY0lkZW50aWZpZXJ9KTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvSURMUGFyc2VyLnBtCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvSURMUGFyc2VyLnBtCShy
ZXZpc2lvbiAyNjcwMDYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0lETFBh
cnNlci5wbQkod29ya2luZyBjb3B5KQpAQCAtNzMsNyArNzMsNyBAQCBzdHJ1Y3QoIElETEludGVy
ZmFjZSA9PiB7CiAgICAgbWFwTGlrZSA9PiAnJCcsICMgVXNlZCBmb3IgbWFwTGlrZSBpbnRlcmZh
Y2VzLCBvZiB0eXBlICdJRExNYXBMaWtlJwogICAgIHNldExpa2UgPT4gJyQnLCAjIFVzZWQgZm9y
IHNldExpa2UgaW50ZXJmYWNlcywgb2YgdHlwZSAnSURMU2V0TGlrZScKICAgICBzZXJpYWxpemFi
bGUgPT4gJyQnLCAjIFVzZWQgZm9yIHNlcmlhbGl6YWJsZSBpbnRlcmZhY2VzLCBvZiB0eXBlICdJ
RExTZXJpYWxpemFibGUnCi0gICAgZXh0ZW5kZWRBdHRyaWJ1dGVzID0+ICckJywKKyAgICBleHRl
bmRlZEF0dHJpYnV0ZXMgPT4gJyUnLAogfSk7CiAKICMgVXNlZCB0byByZXByZXNlbnQgYW4gYXJn
dW1lbnQgdG8gYSBJRExPcGVyYXRpb24uCkBAIC05MywxMSArOTMsOCBAQCBzdHJ1Y3QoIElETE9w
ZXJhdGlvbiA9PiB7CiAgICAgYXJndW1lbnRzID0+ICdAJywgIyBMaXN0IG9mICdJRExBcmd1bWVu
dCcKICAgICBpc0NvbnN0cnVjdG9yID0+ICckJywKICAgICBpc1N0YXRpYyA9PiAnJCcsCi0gICAg
aXNJdGVyYWJsZSA9PiAnJCcsCiAgICAgaXNTZXJpYWxpemVyID0+ICckJywKICAgICBpc1N0cmlu
Z2lmaWVyID0+ICckJywKLSAgICBpc01hcExpa2UgPT4gJyQnLAotICAgIGlzU2V0TGlrZSA9PiAn
JCcsCiAgICAgc3BlY2lhbHMgPT4gJ0AnLAogICAgIGV4dGVuZGVkQXR0cmlidXRlcyA9PiAnJScs
CiB9KTsKQEAgLTEwOSwxMiArMTA2LDEwIEBAIHN0cnVjdCggSURMQXR0cmlidXRlID0+IHsKICAg
ICB0eXBlID0+ICdJRExUeXBlJywKICAgICBpc0NvbnN0cnVjdG9yID0+ICckJywKICAgICBpc1N0
YXRpYyA9PiAnJCcsCi0gICAgaXNNYXBMaWtlID0+ICckJywKLSAgICBpc1NldExpa2UgPT4gJyQn
LAogICAgIGlzU3RyaW5naWZpZXIgPT4gJyQnLAogICAgIGlzUmVhZE9ubHkgPT4gJyQnLAogICAg
IGlzSW5oZXJpdCA9PiAnJCcsCi0gICAgZXh0ZW5kZWRBdHRyaWJ1dGVzID0+ICckJywKKyAgICBl
eHRlbmRlZEF0dHJpYnV0ZXMgPT4gJyUnLAogfSk7CiAKICMgaHR0cHM6Ly9oZXljYW0uZ2l0aHVi
LmlvL3dlYmlkbC8jaWRsLWl0ZXJhYmxlCkBAIC0xMjIsOCArMTE3LDggQEAgc3RydWN0KCBJRExJ
dGVyYWJsZSA9PiB7CiAgICAgaXNLZXlWYWx1ZSA9PiAnJCcsCiAgICAga2V5VHlwZSA9PiAnSURM
VHlwZScsCiAgICAgdmFsdWVUeXBlID0+ICdJRExUeXBlJywKLSAgICBvcGVyYXRpb25zID0+ICdA
JywgIyBJdGVyYWJsZSBvcGVyYXRpb25zIChlbnRyaWVzLCBrZXlzLCB2YWx1ZXMsIFtTeW1ib2wu
SXRlcmF0b3JdLCBmb3JFYWNoKQotICAgIGV4dGVuZGVkQXR0cmlidXRlcyA9PiAnJCcsCisgICAg
b3BlcmF0aW9ucyA9PiAnQCcsCisgICAgZXh0ZW5kZWRBdHRyaWJ1dGVzID0+ICclJywKIH0pOwog
CiAjIGh0dHBzOi8vaGV5Y2FtLmdpdGh1Yi5pby93ZWJpZGwvI2lkbC1hc3luYy1pdGVyYWJsZQpA
QCAtMTMyLDcgKzEyNyw3IEBAIHN0cnVjdCggSURMQXN5bmNJdGVyYWJsZSA9PiB7CiAgICAga2V5
VHlwZSA9PiAnSURMVHlwZScsCiAgICAgdmFsdWVUeXBlID0+ICdJRExUeXBlJywKICAgICBhcmd1
bWVudHMgPT4gJ0AnLCAjIExpc3Qgb2YgJ0lETEFyZ3VtZW50JwotICAgIGV4dGVuZGVkQXR0cmli
dXRlcyA9PiAnJCcsCisgICAgZXh0ZW5kZWRBdHRyaWJ1dGVzID0+ICclJywKIH0pOwogCiAjIGh0
dHBzOi8vaGV5Y2FtLmdpdGh1Yi5pby93ZWJpZGwvI2VzLW1hcGxpa2UKQEAgLTE0MCwxOCArMTM1
LDE0IEBAIHN0cnVjdCggSURMTWFwTGlrZSA9PiB7CiAgICAgaXNSZWFkT25seSA9PiAnJCcsCiAg
ICAga2V5VHlwZSA9PiAnSURMVHlwZScsCiAgICAgdmFsdWVUeXBlID0+ICdJRExUeXBlJywKLSAg
ICBhdHRyaWJ1dGVzID0+ICdAJywgIyBNYXBMaWtlIGF0dHJpYnV0ZXMgKHNpemUpCi0gICAgb3Bl
cmF0aW9ucyA9PiAnQCcsICMgTWFwTGlrZSBvcGVyYXRpb25zIChlbnRyaWVzLCBrZXlzLCB2YWx1
ZXMsIGZvckVhY2gsIGdldCwgaGFzIGFuZCBpZiBub3QgcmVhZG9ubHksIGRlbGV0ZSwgc2V0IGFu
ZCBjbGVhcikKLSAgICBleHRlbmRlZEF0dHJpYnV0ZXMgPT4gJyQnLAorICAgIGV4dGVuZGVkQXR0
cmlidXRlcyA9PiAnJScsCiB9KTsKIAogIyBodHRwczovL2hleWNhbS5naXRodWIuaW8vd2ViaWRs
LyNlcy1zZXRsaWtlCiBzdHJ1Y3QoIElETFNldExpa2UgPT4gewogICAgIGlzUmVhZE9ubHkgPT4g
JyQnLAogICAgIGl0ZW1UeXBlID0+ICdJRExUeXBlJywKLSAgICBhdHRyaWJ1dGVzID0+ICdAJywg
IyBTZXRMaWtlIGF0dHJpYnV0ZXMgKHNpemUpCi0gICAgb3BlcmF0aW9ucyA9PiAnQCcsICMgU2V0
TGlrZSBvcGVyYXRpb25zIChlbnRyaWVzLCBrZXlzLCB2YWx1ZXMsIGZvckVhY2gsIGhhcyBhbmQg
aWYgbm90IHJlYWRvbmx5LCBkZWxldGUsIHNldCBhbmQgY2xlYXIpCi0gICAgZXh0ZW5kZWRBdHRy
aWJ1dGVzID0+ICckJywKKyAgICBleHRlbmRlZEF0dHJpYnV0ZXMgPT4gJyUnLAogfSk7CiAKICMg
aHR0cHM6Ly9oZXljYW0uZ2l0aHViLmlvL3dlYmlkbC8jaWRsLXNlcmlhbGl6ZXJzCkBAIC0xNjgs
NyArMTU5LDcgQEAgc3RydWN0KCBJRExDb25zdGFudCA9PiB7CiAgICAgbmFtZSA9PiAnJCcsCiAg
ICAgdHlwZSA9PiAnSURMVHlwZScsCiAgICAgdmFsdWUgPT4gJyQnLAotICAgIGV4dGVuZGVkQXR0
cmlidXRlcyA9PiAnJCcsCisgICAgZXh0ZW5kZWRBdHRyaWJ1dGVzID0+ICclJywKIH0pOwogCiAj
IGh0dHBzOi8vaGV5Y2FtLmdpdGh1Yi5pby93ZWJpZGwvI2lkbC1lbnVtcwpAQCAtMTc2LDcgKzE2
Nyw3IEBAIHN0cnVjdCggSURMRW51bSA9PiB7CiAgICAgbmFtZSA9PiAnJCcsCiAgICAgdHlwZSA9
PiAnSURMVHlwZScsCiAgICAgdmFsdWVzID0+ICdAJywKLSAgICBleHRlbmRlZEF0dHJpYnV0ZXMg
PT4gJyQnLAorICAgIGV4dGVuZGVkQXR0cmlidXRlcyA9PiAnJScsCiB9KTsKIAogIyBodHRwczov
L2hleWNhbS5naXRodWIuaW8vd2ViaWRsLyNkZm4tZGljdGlvbmFyeS1tZW1iZXIKQEAgLTE4NSw3
ICsxNzYsNyBAQCBzdHJ1Y3QoIElETERpY3Rpb25hcnlNZW1iZXIgPT4gewogICAgIHR5cGUgPT4g
J0lETFR5cGUnLAogICAgIGlzUmVxdWlyZWQgPT4gJyQnLAogICAgIGRlZmF1bHQgPT4gJyQnLAot
ICAgIGV4dGVuZGVkQXR0cmlidXRlcyA9PiAnJCcsCisgICAgZXh0ZW5kZWRBdHRyaWJ1dGVzID0+
ICclJywKIH0pOwogCiAjIGh0dHBzOi8vaGV5Y2FtLmdpdGh1Yi5pby93ZWJpZGwvI2lkbC1kaWN0
aW9uYXJpZXMKQEAgLTE5NCwxNCArMTg1LDE0IEBAIHN0cnVjdCggSURMRGljdGlvbmFyeSA9PiB7
CiAgICAgcGFyZW50VHlwZSA9PiAnSURMVHlwZScsCiAgICAgbWVtYmVycyA9PiAnQCcsICMgTGlz
dCBvZiAnSURMRGljdGlvbmFyeU1lbWJlcicKICAgICBpc1BhcnRpYWwgPT4gJyQnLCAjIFVzZWQg
Zm9yIHBhcnRpYWwgZGljdGlvbmFyaWVzCi0gICAgZXh0ZW5kZWRBdHRyaWJ1dGVzID0+ICckJywK
KyAgICBleHRlbmRlZEF0dHJpYnV0ZXMgPT4gJyUnLAogfSk7CiAKICMgaHR0cHM6Ly9oZXljYW0u
Z2l0aHViLmlvL3dlYmlkbC8jaWRsLWNhbGxiYWNrLWZ1bmN0aW9ucwogc3RydWN0KCBJRExDYWxs
YmFja0Z1bmN0aW9uID0+IHsKICAgICB0eXBlID0+ICckJywKICAgICBvcGVyYXRpb24gPT4gJ0lE
TE9wZXJhdGlvbicsCi0gICAgZXh0ZW5kZWRBdHRyaWJ1dGVzID0+ICckJywKKyAgICBleHRlbmRl
ZEF0dHJpYnV0ZXMgPT4gJyUnLAogfSk7CiAKICMgaHR0cHM6Ly9oZXljYW0uZ2l0aHViLmlvL3dl
YmlkbC8jaWRsLW5hbWVzcGFjZXMKQEAgLTIxMCwxNCArMjAxLDE0IEBAIHN0cnVjdCggSURMTmFt
ZXNwYWNlID0+IHsKICAgICBvcGVyYXRpb25zID0+ICdAJywgIyBMaXN0IG9mICdJRExPcGVyYXRp
b24nCiAgICAgYXR0cmlidXRlcyA9PiAnQCcsICMgTGlzdCBvZiAnSURMQXR0cmlidXRlJwogICAg
IGlzUGFydGlhbCA9PiAnJCcsICMgVXNlZCBmb3IgcGFydGlhbCBuYW1lc3BhY2VzCi0gICAgZXh0
ZW5kZWRBdHRyaWJ1dGVzID0+ICckJywKKyAgICBleHRlbmRlZEF0dHJpYnV0ZXMgPT4gJyUnLAog
fSk7CiAKICMgaHR0cHM6Ly9oZXljYW0uZ2l0aHViLmlvL3dlYmlkbC8jaW5jbHVkZXMtc3RhdGVt
ZW50CiBzdHJ1Y3QoIElETEluY2x1ZGVzU3RhdGVtZW50ID0+IHsKICAgICBpbnRlcmZhY2VJZGVu
dGlmaWVyID0+ICckJywKICAgICBtaXhpbklkZW50aWZpZXIgPT4gJyQnLAotICAgIGV4dGVuZGVk
QXR0cmlidXRlcyA9PiAnJCcsCisgICAgZXh0ZW5kZWRBdHRyaWJ1dGVzID0+ICclJywKIH0pOwog
CiAjIGh0dHBzOi8vaGV5Y2FtLmdpdGh1Yi5pby93ZWJpZGwvI2lkbC10eXBlZGVmcwpAQCAtNTk5
LDExICs1OTAsOCBAQCBzdWIgY2xvbmVPcGVyYXRpb24KIAogICAgICRjbG9uZWRPcGVyYXRpb24t
PmlzQ29uc3RydWN0b3IoJG9wZXJhdGlvbi0+aXNDb25zdHJ1Y3Rvcik7CiAgICAgJGNsb25lZE9w
ZXJhdGlvbi0+aXNTdGF0aWMoJG9wZXJhdGlvbi0+aXNTdGF0aWMpOwotICAgICRjbG9uZWRPcGVy
YXRpb24tPmlzSXRlcmFibGUoJG9wZXJhdGlvbi0+aXNJdGVyYWJsZSk7CiAgICAgJGNsb25lZE9w
ZXJhdGlvbi0+aXNTZXJpYWxpemVyKCRvcGVyYXRpb24tPmlzU2VyaWFsaXplcik7CiAgICAgJGNs
b25lZE9wZXJhdGlvbi0+aXNTdHJpbmdpZmllcigkb3BlcmF0aW9uLT5pc1N0cmluZ2lmaWVyKTsK
LSAgICAkY2xvbmVkT3BlcmF0aW9uLT5pc01hcExpa2UoJG9wZXJhdGlvbi0+aXNNYXBMaWtlKTsK
LSAgICAkY2xvbmVkT3BlcmF0aW9uLT5pc1NldExpa2UoJG9wZXJhdGlvbi0+aXNTZXRMaWtlKTsK
ICAgICAkY2xvbmVkT3BlcmF0aW9uLT5zcGVjaWFscygkb3BlcmF0aW9uLT5zcGVjaWFscyk7CiAK
ICAgICBjb3B5RXh0ZW5kZWRBdHRyaWJ1dGVzKCRjbG9uZWRPcGVyYXRpb24tPmV4dGVuZGVkQXR0
cmlidXRlcywgJG9wZXJhdGlvbi0+ZXh0ZW5kZWRBdHRyaWJ1dGVzKTsKQEAgLTcxNSw5ICs3MDMs
NiBAQCBzdWIgYXBwbHlUeXBlZGVmcwogICAgICAgICAgICAgICAgIGlmICgkZGVmaW5pdGlvbi0+
aXRlcmFibGUtPnZhbHVlVHlwZSkgewogICAgICAgICAgICAgICAgICAgICAkZGVmaW5pdGlvbi0+
aXRlcmFibGUtPnZhbHVlVHlwZSgkc2VsZi0+dHlwZUJ5QXBwbHlpbmdUeXBlZGVmcygkZGVmaW5p
dGlvbi0+aXRlcmFibGUtPnZhbHVlVHlwZSkpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICBmb3JlYWNoIG15ICRvcGVyYXRpb24gKEB7JGRlZmluaXRpb24tPml0ZXJhYmxlLT5v
cGVyYXRpb25zfSkgewotICAgICAgICAgICAgICAgICAgICAkc2VsZi0+YXBwbHlUeXBlZGVmc1Rv
T3BlcmF0aW9uKCRvcGVyYXRpb24pOwotICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIGlmICgkZGVmaW5pdGlvbi0+YXN5bmNJdGVyYWJsZSkgewogICAgICAgICAg
ICAgICAgIGlmICgkZGVmaW5pdGlvbi0+YXN5bmNJdGVyYWJsZS0+a2V5VHlwZSkgewpAQCAtNzM3
LDIzICs3MjIsMTEgQEAgc3ViIGFwcGx5VHlwZWRlZnMKICAgICAgICAgICAgICAgICBpZiAoJGRl
ZmluaXRpb24tPm1hcExpa2UtPnZhbHVlVHlwZSkgewogICAgICAgICAgICAgICAgICAgICAkZGVm
aW5pdGlvbi0+bWFwTGlrZS0+dmFsdWVUeXBlKCRzZWxmLT50eXBlQnlBcHBseWluZ1R5cGVkZWZz
KCRkZWZpbml0aW9uLT5tYXBMaWtlLT52YWx1ZVR5cGUpKTsKICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgZm9yZWFjaCBteSAkYXR0cmlidXRlIChAeyRkZWZpbml0aW9uLT5tYXBM
aWtlLT5hdHRyaWJ1dGVzfSkgewotICAgICAgICAgICAgICAgICAgICAkYXR0cmlidXRlLT50eXBl
KCRzZWxmLT50eXBlQnlBcHBseWluZ1R5cGVkZWZzKCRhdHRyaWJ1dGUtPnR5cGUpKTsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZm9yZWFjaCBteSAkb3BlcmF0aW9uIChAeyRk
ZWZpbml0aW9uLT5tYXBMaWtlLT5vcGVyYXRpb25zfSkgewotICAgICAgICAgICAgICAgICAgICAk
c2VsZi0+YXBwbHlUeXBlZGVmc1RvT3BlcmF0aW9uKCRvcGVyYXRpb24pOwotICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmICgkZGVmaW5pdGlvbi0+c2V0TGlr
ZSkgewogICAgICAgICAgICAgICAgIGlmICgkZGVmaW5pdGlvbi0+c2V0TGlrZS0+aXRlbVR5cGUp
IHsKICAgICAgICAgICAgICAgICAgICAgJGRlZmluaXRpb24tPnNldExpa2UtPml0ZW1UeXBlKCRz
ZWxmLT50eXBlQnlBcHBseWluZ1R5cGVkZWZzKCRkZWZpbml0aW9uLT5zZXRMaWtlLT5pdGVtVHlw
ZSkpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBmb3JlYWNoIG15ICRhdHRy
aWJ1dGUgKEB7JGRlZmluaXRpb24tPnNldExpa2UtPmF0dHJpYnV0ZXN9KSB7Ci0gICAgICAgICAg
ICAgICAgICAgICRhdHRyaWJ1dGUtPnR5cGUoJHNlbGYtPnR5cGVCeUFwcGx5aW5nVHlwZWRlZnMo
JGF0dHJpYnV0ZS0+dHlwZSkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBm
b3JlYWNoIG15ICRvcGVyYXRpb24gKEB7JGRlZmluaXRpb24tPnNldExpa2UtPm9wZXJhdGlvbnN9
KSB7Ci0gICAgICAgICAgICAgICAgICAgICRzZWxmLT5hcHBseVR5cGVkZWZzVG9PcGVyYXRpb24o
JG9wZXJhdGlvbik7Ci0gICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9
IGVsc2lmIChyZWYoJGRlZmluaXRpb24pIGVxICJJRExEaWN0aW9uYXJ5IikgewogICAgICAgICAg
ICAgZm9yZWFjaCBteSAkbWVtYmVyIChAeyRkZWZpbml0aW9uLT5tZW1iZXJzfSkgewpAQCAtMTMx
NywxMCArMTI5MCwxMCBAQCBzdWIgcGFyc2VQYXJ0aWFsSW50ZXJmYWNlTWVtYmVyCiAgICAgICAg
IHJldHVybiAkc2VsZi0+cGFyc2VBdHRyaWJ1dGVSZXN0KCRleHRlbmRlZEF0dHJpYnV0ZUxpc3Qp
OwogICAgIH0KICAgICBpZiAoJG5leHQtPnZhbHVlKCkgZXEgIm1hcGxpa2UiKSB7Ci0gICAgICAg
IHJldHVybiAkc2VsZi0+cGFyc2VNYXBMaWtlUmVzdCgkZXh0ZW5kZWRBdHRyaWJ1dGVMaXN0LCAw
KTsKKyAgICAgICAgcmV0dXJuICRzZWxmLT5wYXJzZU1hcExpa2VSZXN0KCRleHRlbmRlZEF0dHJp
YnV0ZUxpc3QpOwogICAgIH0KICAgICBpZiAoJG5leHQtPnZhbHVlKCkgZXEgInNldGxpa2UiKSB7
Ci0gICAgICAgIHJldHVybiAkc2VsZi0+cGFyc2VTZXRMaWtlUmVzdCgkZXh0ZW5kZWRBdHRyaWJ1
dGVMaXN0LCAwKTsKKyAgICAgICAgcmV0dXJuICRzZWxmLT5wYXJzZVNldExpa2VSZXN0KCRleHRl
bmRlZEF0dHJpYnV0ZUxpc3QpOwogICAgIH0KICAgICBpZiAoJG5leHQtPnZhbHVlKCkgZXEgImlu
aGVyaXQiKSB7CiAgICAgICAgIHJldHVybiAkc2VsZi0+cGFyc2VJbmhlcml0QXR0cmlidXRlKCRl
eHRlbmRlZEF0dHJpYnV0ZUxpc3QpOwpAQCAtMTc2MywxMCArMTczNiwxNCBAQCBzdWIgcGFyc2VS
ZWFkT25seU1lbWJlcgogICAgICAgICAgICAgcmV0dXJuICRhdHRyaWJ1dGU7CiAgICAgICAgIH0K
ICAgICAgICAgaWYgKCRuZXh0LT52YWx1ZSgpIGVxICJtYXBsaWtlIikgewotICAgICAgICAgICAg
cmV0dXJuICRzZWxmLT5wYXJzZU1hcExpa2VSZXN0KCRleHRlbmRlZEF0dHJpYnV0ZUxpc3QsIDEp
OworICAgICAgICAgICAgbXkgJG1hcExpa2UgPSAkc2VsZi0+cGFyc2VNYXBMaWtlUmVzdCgkZXh0
ZW5kZWRBdHRyaWJ1dGVMaXN0KTsKKyAgICAgICAgICAgICRtYXBMaWtlLT5pc1JlYWRPbmx5KDEp
OworICAgICAgICAgICAgcmV0dXJuICRtYXBMaWtlOwogICAgICAgICB9CiAgICAgICAgIGlmICgk
bmV4dC0+dmFsdWUoKSBlcSAic2V0bGlrZSIpIHsKLSAgICAgICAgICAgIHJldHVybiAkc2VsZi0+
cGFyc2VTZXRMaWtlUmVzdCgkZXh0ZW5kZWRBdHRyaWJ1dGVMaXN0LCAxKTsKKyAgICAgICAgICAg
IG15ICRzZXRMaWtlID0gJHNlbGYtPnBhcnNlU2V0TGlrZVJlc3QoJGV4dGVuZGVkQXR0cmlidXRl
TGlzdCk7CisgICAgICAgICAgICAkc2V0TGlrZS0+aXNSZWFkT25seSgxKTsKKyAgICAgICAgICAg
IHJldHVybiAkc2V0TGlrZTsKICAgICAgICAgfQogICAgIH0KICAgICAkc2VsZi0+YXNzZXJ0VW5l
eHBlY3RlZFRva2VuKCRuZXh0LT52YWx1ZSgpLCBfX0xJTkVfXyk7CkBAIC0yMjA3LDM1NSArMjE4
NCw4NCBAQCBzdWIgcGFyc2VJdGVyYWJsZVJlc3QKICAgICBteSAkbmV4dCA9ICRzZWxmLT5uZXh0
VG9rZW4oKTsKICAgICBpZiAoJG5leHQtPnZhbHVlKCkgZXEgIml0ZXJhYmxlIikgewogICAgICAg
ICAkc2VsZi0+YXNzZXJ0VG9rZW5WYWx1ZSgkc2VsZi0+Z2V0VG9rZW4oKSwgIml0ZXJhYmxlIiwg
X19MSU5FX18pOwotICAgICAgICBteSAkaXRlcmFibGVOb2RlID0gJHNlbGYtPnBhcnNlT3B0aW9u
YWxJdGVyYWJsZUludGVyZmFjZSgkZXh0ZW5kZWRBdHRyaWJ1dGVMaXN0KTsKLSAgICAgICAgJHNl
bGYtPmFzc2VydFRva2VuVmFsdWUoJHNlbGYtPmdldFRva2VuKCksICI7IiwgX19MSU5FX18pOwot
ICAgICAgICByZXR1cm4gJGl0ZXJhYmxlTm9kZTsKLSAgICB9Ci0gICAgJHNlbGYtPmFzc2VydFVu
ZXhwZWN0ZWRUb2tlbigkbmV4dC0+dmFsdWUoKSwgX19MSU5FX18pOwotfQogCi1zdWIgcGFyc2VP
cHRpb25hbEl0ZXJhYmxlSW50ZXJmYWNlCi17Ci0gICAgbXkgJHNlbGYgPSBzaGlmdDsKLSAgICBt
eSAkZXh0ZW5kZWRBdHRyaWJ1dGVMaXN0ID0gc2hpZnQ7CisgICAgICAgIG15ICRpdGVyYWJsZSA9
IElETEl0ZXJhYmxlLT5uZXcoKTsKIAotICAgIG15ICRuZXdEYXRhTm9kZSA9IElETEl0ZXJhYmxl
LT5uZXcoKTsKKyAgICAgICAgJHNlbGYtPmFzc2VydFRva2VuVmFsdWUoJHNlbGYtPmdldFRva2Vu
KCksICI8IiwgX19MSU5FX18pOworICAgICAgICBteSAkdHlwZTEgPSAkc2VsZi0+cGFyc2VUeXBl
V2l0aEV4dGVuZGVkQXR0cmlidXRlcygpOwogCi0gICAgJHNlbGYtPmFzc2VydEV4dGVuZGVkQXR0
cmlidXRlc1ZhbGlkRm9yQ29udGV4dCgkZXh0ZW5kZWRBdHRyaWJ1dGVMaXN0LCAiaXRlcmFibGUi
KTsKLSAgICAkbmV3RGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcygkZXh0ZW5kZWRBdHRyaWJ1
dGVMaXN0KTsKKyAgICAgICAgaWYgKCRzZWxmLT5uZXh0VG9rZW4oKS0+dmFsdWUoKSBlcSAiLCIp
IHsKKyAgICAgICAgICAgICRzZWxmLT5hc3NlcnRUb2tlblZhbHVlKCRzZWxmLT5nZXRUb2tlbigp
LCAiLCIsIF9fTElORV9fKTsKIAotICAgICRzZWxmLT5hc3NlcnRUb2tlblZhbHVlKCRzZWxmLT5n
ZXRUb2tlbigpLCAiPCIsIF9fTElORV9fKTsKLSAgICBteSAkdHlwZTEgPSAkc2VsZi0+cGFyc2VU
eXBlV2l0aEV4dGVuZGVkQXR0cmlidXRlcygpOworICAgICAgICAgICAgbXkgJHR5cGUyID0gJHNl
bGYtPnBhcnNlVHlwZVdpdGhFeHRlbmRlZEF0dHJpYnV0ZXMoKTsKKyAgICAgICAgICAgICRpdGVy
YWJsZS0+aXNLZXlWYWx1ZSgxKTsKKyAgICAgICAgICAgICRpdGVyYWJsZS0+a2V5VHlwZSgkdHlw
ZTEpOworICAgICAgICAgICAgJGl0ZXJhYmxlLT52YWx1ZVR5cGUoJHR5cGUyKTsKKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICRpdGVyYWJsZS0+aXNLZXlWYWx1ZSgwKTsKKyAgICAgICAg
ICAgICRpdGVyYWJsZS0+dmFsdWVUeXBlKCR0eXBlMSk7CisgICAgICAgIH0KKyAgICAgICAgJHNl
bGYtPmFzc2VydFRva2VuVmFsdWUoJHNlbGYtPmdldFRva2VuKCksICI+IiwgX19MSU5FX18pOwor
ICAgICAgICAkc2VsZi0+YXNzZXJ0VG9rZW5WYWx1ZSgkc2VsZi0+Z2V0VG9rZW4oKSwgIjsiLCBf
X0xJTkVfXyk7CiAKLSAgICBpZiAoJHNlbGYtPm5leHRUb2tlbigpLT52YWx1ZSgpIGVxICIsIikg
ewotICAgICAgICAkc2VsZi0+YXNzZXJ0VG9rZW5WYWx1ZSgkc2VsZi0+Z2V0VG9rZW4oKSwgIiwi
LCBfX0xJTkVfXyk7CisgICAgICAgICRzZWxmLT5hc3NlcnRFeHRlbmRlZEF0dHJpYnV0ZXNWYWxp
ZEZvckNvbnRleHQoJGV4dGVuZGVkQXR0cmlidXRlTGlzdCwgIml0ZXJhYmxlIik7CisgICAgICAg
ICRpdGVyYWJsZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzKCRleHRlbmRlZEF0dHJpYnV0ZUxpc3QpOwog
Ci0gICAgICAgIG15ICR0eXBlMiA9ICRzZWxmLT5wYXJzZVR5cGVXaXRoRXh0ZW5kZWRBdHRyaWJ1
dGVzKCk7Ci0gICAgICAgICRuZXdEYXRhTm9kZS0+aXNLZXlWYWx1ZSgxKTsKLSAgICAgICAgJG5l
d0RhdGFOb2RlLT5rZXlUeXBlKCR0eXBlMSk7Ci0gICAgICAgICRuZXdEYXRhTm9kZS0+dmFsdWVU
eXBlKCR0eXBlMik7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgJG5ld0RhdGFOb2RlLT5pc0tleVZh
bHVlKDApOwotICAgICAgICAkbmV3RGF0YU5vZGUtPnZhbHVlVHlwZSgkdHlwZTEpOworICAgICAg
ICByZXR1cm4gJGl0ZXJhYmxlOwogICAgIH0KLSAgICAkc2VsZi0+YXNzZXJ0VG9rZW5WYWx1ZSgk
c2VsZi0+Z2V0VG9rZW4oKSwgIj4iLCBfX0xJTkVfXyk7Ci0KLSAgICAjIEZJWE1FOiBTeW50aGV0
aWMgb3BlcmF0aW9ucyBzaG91bGQgbm90IGJlIGFkZGVkIGR1cmluZyBwYXJzaW5nLiBJbnN0ZWFk
LCB0aGUgQ29kZUdlbmVyYXRvcgotICAgICMgc2hvdWxkIGJlIHJlc3BvbnNpYmxlIGZvciB0aGVt
LgotCi0gICAgbXkgJHN5bWJvbEl0ZXJhdG9yT3BlcmF0aW9uID0gSURMT3BlcmF0aW9uLT5uZXco
KTsKLSAgICAkc3ltYm9sSXRlcmF0b3JPcGVyYXRpb24tPm5hbWUoIltTeW1ib2wuSXRlcmF0b3Jd
Iik7Ci0gICAgJHN5bWJvbEl0ZXJhdG9yT3BlcmF0aW9uLT5leHRlbmRlZEF0dHJpYnV0ZXMoJGV4
dGVuZGVkQXR0cmlidXRlTGlzdCk7Ci0gICAgJHN5bWJvbEl0ZXJhdG9yT3BlcmF0aW9uLT5pc0l0
ZXJhYmxlKDEpOwotCi0gICAgbXkgJGVudHJpZXNPcGVyYXRpb24gPSBJRExPcGVyYXRpb24tPm5l
dygpOwotICAgICRlbnRyaWVzT3BlcmF0aW9uLT5uYW1lKCJlbnRyaWVzIik7Ci0gICAgJGVudHJp
ZXNPcGVyYXRpb24tPmV4dGVuZGVkQXR0cmlidXRlcygkZXh0ZW5kZWRBdHRyaWJ1dGVMaXN0KTsK
LSAgICAkZW50cmllc09wZXJhdGlvbi0+aXNJdGVyYWJsZSgxKTsKLQotICAgIG15ICRrZXlzT3Bl
cmF0aW9uID0gSURMT3BlcmF0aW9uLT5uZXcoKTsKLSAgICAka2V5c09wZXJhdGlvbi0+bmFtZSgi
a2V5cyIpOwotICAgICRrZXlzT3BlcmF0aW9uLT5leHRlbmRlZEF0dHJpYnV0ZXMoJGV4dGVuZGVk
QXR0cmlidXRlTGlzdCk7Ci0gICAgJGtleXNPcGVyYXRpb24tPmlzSXRlcmFibGUoMSk7Ci0KLSAg
ICBteSAkdmFsdWVzT3BlcmF0aW9uID0gSURMT3BlcmF0aW9uLT5uZXcoKTsKLSAgICAkdmFsdWVz
T3BlcmF0aW9uLT5uYW1lKCJ2YWx1ZXMiKTsKLSAgICAkdmFsdWVzT3BlcmF0aW9uLT5leHRlbmRl
ZEF0dHJpYnV0ZXMoJGV4dGVuZGVkQXR0cmlidXRlTGlzdCk7Ci0gICAgJHZhbHVlc09wZXJhdGlv
bi0+aXNJdGVyYWJsZSgxKTsKLQotICAgIG15ICRmb3JFYWNoT3BlcmF0aW9uID0gSURMT3BlcmF0
aW9uLT5uZXcoKTsKLSAgICAkZm9yRWFjaE9wZXJhdGlvbi0+bmFtZSgiZm9yRWFjaCIpOwotICAg
ICRmb3JFYWNoT3BlcmF0aW9uLT5leHRlbmRlZEF0dHJpYnV0ZXMoJGV4dGVuZGVkQXR0cmlidXRl
TGlzdCk7Ci0gICAgJGZvckVhY2hPcGVyYXRpb24tPmlzSXRlcmFibGUoMSk7Ci0gICAgbXkgJGZv
ckVhY2hBcmd1bWVudCA9IElETEFyZ3VtZW50LT5uZXcoKTsKLSAgICAkZm9yRWFjaEFyZ3VtZW50
LT5uYW1lKCJjYWxsYmFjayIpOwotICAgICRmb3JFYWNoQXJndW1lbnQtPnR5cGUobWFrZVNpbXBs
ZVR5cGUoImFueSIpKTsKLSAgICBwdXNoKEB7JGZvckVhY2hPcGVyYXRpb24tPmFyZ3VtZW50c30s
ICgkZm9yRWFjaEFyZ3VtZW50KSk7Ci0KLSAgICBwdXNoKEB7JG5ld0RhdGFOb2RlLT5vcGVyYXRp
b25zfSwgJHN5bWJvbEl0ZXJhdG9yT3BlcmF0aW9uKTsKLSAgICBwdXNoKEB7JG5ld0RhdGFOb2Rl
LT5vcGVyYXRpb25zfSwgJGVudHJpZXNPcGVyYXRpb24pOwotICAgIHB1c2goQHskbmV3RGF0YU5v
ZGUtPm9wZXJhdGlvbnN9LCAka2V5c09wZXJhdGlvbik7Ci0gICAgcHVzaChAeyRuZXdEYXRhTm9k
ZS0+b3BlcmF0aW9uc30sICR2YWx1ZXNPcGVyYXRpb24pOwotICAgIHB1c2goQHskbmV3RGF0YU5v
ZGUtPm9wZXJhdGlvbnN9LCAkZm9yRWFjaE9wZXJhdGlvbik7Ci0KLSAgICByZXR1cm4gJG5ld0Rh
dGFOb2RlOworICAgICRzZWxmLT5hc3NlcnRVbmV4cGVjdGVkVG9rZW4oJG5leHQtPnZhbHVlKCks
IF9fTElORV9fKTsKIH0KIAogc3ViIHBhcnNlTWFwTGlrZVJlc3QKIHsKICAgICBteSAkc2VsZiA9
IHNoaWZ0OwogICAgIG15ICRleHRlbmRlZEF0dHJpYnV0ZUxpc3QgPSBzaGlmdDsKLSAgICBteSAk
aXNSZWFkT25seSA9IHNoaWZ0OwogCiAgICAgbXkgJG5leHQgPSAkc2VsZi0+bmV4dFRva2VuKCk7
CiAgICAgaWYgKCRuZXh0LT52YWx1ZSgpIGVxICJtYXBsaWtlIikgewogICAgICAgICAkc2VsZi0+
YXNzZXJ0VG9rZW5WYWx1ZSgkc2VsZi0+Z2V0VG9rZW4oKSwgIm1hcGxpa2UiLCBfX0xJTkVfXyk7
Ci0gICAgICAgIG15ICRtYXBMaWtlTm9kZSA9ICRzZWxmLT5wYXJzZU1hcExpa2VQcm9wZXJ0aWVz
KCRleHRlbmRlZEF0dHJpYnV0ZUxpc3QsICRpc1JlYWRPbmx5KTsKKworICAgICAgICBteSAkbWFw
bGlrZSA9IElETE1hcExpa2UtPm5ldygpOworCisgICAgICAgICRzZWxmLT5hc3NlcnRUb2tlblZh
bHVlKCRzZWxmLT5nZXRUb2tlbigpLCAiPCIsIF9fTElORV9fKTsKKyAgICAgICAgJG1hcGxpa2Ut
PmtleVR5cGUoJHNlbGYtPnBhcnNlVHlwZVdpdGhFeHRlbmRlZEF0dHJpYnV0ZXMoKSk7CisgICAg
ICAgICRzZWxmLT5hc3NlcnRUb2tlblZhbHVlKCRzZWxmLT5nZXRUb2tlbigpLCAiLCIsIF9fTElO
RV9fKTsKKyAgICAgICAgJG1hcGxpa2UtPnZhbHVlVHlwZSgkc2VsZi0+cGFyc2VUeXBlV2l0aEV4
dGVuZGVkQXR0cmlidXRlcygpKTsKKyAgICAgICAgJHNlbGYtPmFzc2VydFRva2VuVmFsdWUoJHNl
bGYtPmdldFRva2VuKCksICI+IiwgX19MSU5FX18pOwogICAgICAgICAkc2VsZi0+YXNzZXJ0VG9r
ZW5WYWx1ZSgkc2VsZi0+Z2V0VG9rZW4oKSwgIjsiLCBfX0xJTkVfXyk7Ci0gICAgICAgIHJldHVy
biAkbWFwTGlrZU5vZGU7Ci0gICAgfQotICAgICRzZWxmLT5hc3NlcnRVbmV4cGVjdGVkVG9rZW4o
JG5leHQtPnZhbHVlKCksIF9fTElORV9fKTsKLX0KIAotc3ViIHBhcnNlTWFwTGlrZVByb3BlcnRp
ZXMKLXsKLSAgICBteSAkc2VsZiA9IHNoaWZ0OwotICAgIG15ICRleHRlbmRlZEF0dHJpYnV0ZUxp
c3QgPSBzaGlmdDsKLSAgICBteSAkaXNSZWFkT25seSA9IHNoaWZ0OwotCi0gICAgbXkgJG1hcGxp
a2UgPSBJRExNYXBMaWtlLT5uZXcoKTsKLSAgICAkbWFwbGlrZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVz
KCRleHRlbmRlZEF0dHJpYnV0ZUxpc3QpOwotICAgICRtYXBsaWtlLT5pc1JlYWRPbmx5KCRpc1Jl
YWRPbmx5KTsKLQotICAgICRzZWxmLT5hc3NlcnRUb2tlblZhbHVlKCRzZWxmLT5nZXRUb2tlbigp
LCAiPCIsIF9fTElORV9fKTsKLSAgICAkbWFwbGlrZS0+a2V5VHlwZSgkc2VsZi0+cGFyc2VUeXBl
V2l0aEV4dGVuZGVkQXR0cmlidXRlcygpKTsKLSAgICAkc2VsZi0+YXNzZXJ0VG9rZW5WYWx1ZSgk
c2VsZi0+Z2V0VG9rZW4oKSwgIiwiLCBfX0xJTkVfXyk7Ci0gICAgJG1hcGxpa2UtPnZhbHVlVHlw
ZSgkc2VsZi0+cGFyc2VUeXBlV2l0aEV4dGVuZGVkQXR0cmlidXRlcygpKTsKLSAgICAkc2VsZi0+
YXNzZXJ0VG9rZW5WYWx1ZSgkc2VsZi0+Z2V0VG9rZW4oKSwgIj4iLCBfX0xJTkVfXyk7Ci0KLSAg
ICAjIEZJWE1FOiBTeW50aGV0aWMgb3BlcmF0aW9ucyBzaG91bGQgbm90IGJlIGFkZGVkIGR1cmlu
ZyBwYXJzaW5nLiBJbnN0ZWFkLCB0aGUgQ29kZUdlbmVyYXRvcgotICAgICMgc2hvdWxkIGJlIHJl
c3BvbnNpYmxlIGZvciB0aGVtLgotCi0gICAgbXkgJG5vdEVudW1lcmFibGVFeHRlbmRlZEF0dHJp
YnV0ZUxpc3QgPSAkZXh0ZW5kZWRBdHRyaWJ1dGVMaXN0OwotICAgICRub3RFbnVtZXJhYmxlRXh0
ZW5kZWRBdHRyaWJ1dGVMaXN0LT57Tm90RW51bWVyYWJsZX0gPSAxOwotCi0gICAgbXkgJHNpemVB
dHRyaWJ1dGUgPSBJRExBdHRyaWJ1dGUtPm5ldygpOwotICAgICRzaXplQXR0cmlidXRlLT5uYW1l
KCJzaXplIik7Ci0gICAgJHNpemVBdHRyaWJ1dGUtPmlzTWFwTGlrZSgxKTsKLSAgICAkc2l6ZUF0
dHJpYnV0ZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzKCRleHRlbmRlZEF0dHJpYnV0ZUxpc3QpOwotICAg
ICRzaXplQXR0cmlidXRlLT5pc1JlYWRPbmx5KDEpOwotICAgICRzaXplQXR0cmlidXRlLT50eXBl
KG1ha2VTaW1wbGVUeXBlKCJhbnkiKSk7Ci0gICAgcHVzaChAeyRtYXBsaWtlLT5hdHRyaWJ1dGVz
fSwgJHNpemVBdHRyaWJ1dGUpOwotCi0gICAgbXkgJGdldE9wZXJhdGlvbiA9IElETE9wZXJhdGlv
bi0+bmV3KCk7Ci0gICAgJGdldE9wZXJhdGlvbi0+bmFtZSgiZ2V0Iik7Ci0gICAgJGdldE9wZXJh
dGlvbi0+aXNNYXBMaWtlKDEpOwotICAgIG15ICRnZXRBcmd1bWVudCA9IElETEFyZ3VtZW50LT5u
ZXcoKTsKLSAgICAkZ2V0QXJndW1lbnQtPm5hbWUoImtleSIpOwotICAgICRnZXRBcmd1bWVudC0+
dHlwZSgkbWFwbGlrZS0+a2V5VHlwZSk7Ci0gICAgJGdldEFyZ3VtZW50LT5leHRlbmRlZEF0dHJp
YnV0ZXMoJGV4dGVuZGVkQXR0cmlidXRlTGlzdCk7Ci0gICAgcHVzaChAeyRnZXRPcGVyYXRpb24t
PmFyZ3VtZW50c30sICgkZ2V0QXJndW1lbnQpKTsKLSAgICAkZ2V0T3BlcmF0aW9uLT5leHRlbmRl
ZEF0dHJpYnV0ZXMoJG5vdEVudW1lcmFibGVFeHRlbmRlZEF0dHJpYnV0ZUxpc3QpOwotICAgICRn
ZXRPcGVyYXRpb24tPnR5cGUobWFrZVNpbXBsZVR5cGUoImFueSIpKTsKLQotICAgIG15ICRoYXNP
cGVyYXRpb24gPSBJRExPcGVyYXRpb24tPm5ldygpOwotICAgICRoYXNPcGVyYXRpb24tPm5hbWUo
ImhhcyIpOwotICAgICRoYXNPcGVyYXRpb24tPmlzTWFwTGlrZSgxKTsKLSAgICBteSAkaGFzQXJn
dW1lbnQgPSBJRExBcmd1bWVudC0+bmV3KCk7Ci0gICAgJGhhc0FyZ3VtZW50LT5uYW1lKCJrZXki
KTsKLSAgICAkaGFzQXJndW1lbnQtPnR5cGUoJG1hcGxpa2UtPmtleVR5cGUpOwotICAgICRoYXNB
cmd1bWVudC0+ZXh0ZW5kZWRBdHRyaWJ1dGVzKCRleHRlbmRlZEF0dHJpYnV0ZUxpc3QpOwotICAg
IHB1c2goQHskaGFzT3BlcmF0aW9uLT5hcmd1bWVudHN9LCAoJGhhc0FyZ3VtZW50KSk7Ci0gICAg
JGhhc09wZXJhdGlvbi0+ZXh0ZW5kZWRBdHRyaWJ1dGVzKCRub3RFbnVtZXJhYmxlRXh0ZW5kZWRB
dHRyaWJ1dGVMaXN0KTsKLSAgICAkaGFzT3BlcmF0aW9uLT50eXBlKG1ha2VTaW1wbGVUeXBlKCJh
bnkiKSk7Ci0KLSAgICBteSAkZW50cmllc09wZXJhdGlvbiA9IElETE9wZXJhdGlvbi0+bmV3KCk7
Ci0gICAgJGVudHJpZXNPcGVyYXRpb24tPm5hbWUoImVudHJpZXMiKTsKLSAgICAkZW50cmllc09w
ZXJhdGlvbi0+aXNNYXBMaWtlKDEpOwotICAgICRlbnRyaWVzT3BlcmF0aW9uLT5leHRlbmRlZEF0
dHJpYnV0ZXMoJG5vdEVudW1lcmFibGVFeHRlbmRlZEF0dHJpYnV0ZUxpc3QpOwotICAgICRlbnRy
aWVzT3BlcmF0aW9uLT50eXBlKG1ha2VTaW1wbGVUeXBlKCJhbnkiKSk7Ci0KLSAgICBteSAka2V5
c09wZXJhdGlvbiA9IElETE9wZXJhdGlvbi0+bmV3KCk7Ci0gICAgJGtleXNPcGVyYXRpb24tPm5h
bWUoImtleXMiKTsKLSAgICAka2V5c09wZXJhdGlvbi0+aXNNYXBMaWtlKDEpOwotICAgICRrZXlz
T3BlcmF0aW9uLT5leHRlbmRlZEF0dHJpYnV0ZXMoJG5vdEVudW1lcmFibGVFeHRlbmRlZEF0dHJp
YnV0ZUxpc3QpOwotICAgICRrZXlzT3BlcmF0aW9uLT50eXBlKG1ha2VTaW1wbGVUeXBlKCJhbnki
KSk7Ci0KLSAgICBteSAkdmFsdWVzT3BlcmF0aW9uID0gSURMT3BlcmF0aW9uLT5uZXcoKTsKLSAg
ICAkdmFsdWVzT3BlcmF0aW9uLT5uYW1lKCJ2YWx1ZXMiKTsKLSAgICAkdmFsdWVzT3BlcmF0aW9u
LT5pc01hcExpa2UoMSk7Ci0gICAgJHZhbHVlc09wZXJhdGlvbi0+ZXh0ZW5kZWRBdHRyaWJ1dGVz
KCRleHRlbmRlZEF0dHJpYnV0ZUxpc3QpOwotICAgICR2YWx1ZXNPcGVyYXRpb24tPmV4dGVuZGVk
QXR0cmlidXRlcy0+e05vdEVudW1lcmFibGV9ID0gMTsKLSAgICAkdmFsdWVzT3BlcmF0aW9uLT50
eXBlKG1ha2VTaW1wbGVUeXBlKCJhbnkiKSk7Ci0KLSAgICBteSAkZm9yRWFjaE9wZXJhdGlvbiA9
IElETE9wZXJhdGlvbi0+bmV3KCk7Ci0gICAgJGZvckVhY2hPcGVyYXRpb24tPm5hbWUoImZvckVh
Y2giKTsKLSAgICAkZm9yRWFjaE9wZXJhdGlvbi0+aXNNYXBMaWtlKDEpOwotICAgICRmb3JFYWNo
T3BlcmF0aW9uLT5leHRlbmRlZEF0dHJpYnV0ZXMoe30pOwotICAgICRmb3JFYWNoT3BlcmF0aW9u
LT50eXBlKG1ha2VTaW1wbGVUeXBlKCJhbnkiKSk7Ci0gICAgbXkgJGZvckVhY2hBcmd1bWVudCA9
IElETEFyZ3VtZW50LT5uZXcoKTsKLSAgICAkZm9yRWFjaEFyZ3VtZW50LT5uYW1lKCJjYWxsYmFj
ayIpOwotICAgICRmb3JFYWNoQXJndW1lbnQtPnR5cGUobWFrZVNpbXBsZVR5cGUoImFueSIpKTsK
LSAgICAkZm9yRWFjaEFyZ3VtZW50LT5leHRlbmRlZEF0dHJpYnV0ZXMoJGV4dGVuZGVkQXR0cmli
dXRlTGlzdCk7Ci0gICAgcHVzaChAeyRmb3JFYWNoT3BlcmF0aW9uLT5hcmd1bWVudHN9LCAoJGZv
ckVhY2hBcmd1bWVudCkpOwotCi0gICAgcHVzaChAeyRtYXBsaWtlLT5vcGVyYXRpb25zfSwgJGdl
dE9wZXJhdGlvbik7Ci0gICAgcHVzaChAeyRtYXBsaWtlLT5vcGVyYXRpb25zfSwgJGhhc09wZXJh
dGlvbik7Ci0gICAgcHVzaChAeyRtYXBsaWtlLT5vcGVyYXRpb25zfSwgJGVudHJpZXNPcGVyYXRp
b24pOwotICAgIHB1c2goQHskbWFwbGlrZS0+b3BlcmF0aW9uc30sICRrZXlzT3BlcmF0aW9uKTsK
LSAgICBwdXNoKEB7JG1hcGxpa2UtPm9wZXJhdGlvbnN9LCAkdmFsdWVzT3BlcmF0aW9uKTsKLSAg
ICBwdXNoKEB7JG1hcGxpa2UtPm9wZXJhdGlvbnN9LCAkZm9yRWFjaE9wZXJhdGlvbik7Ci0KLSAg
ICByZXR1cm4gJG1hcGxpa2UgaWYgJGlzUmVhZE9ubHk7Ci0KLSAgICBteSAkc2V0T3BlcmF0aW9u
ID0gSURMT3BlcmF0aW9uLT5uZXcoKTsKLSAgICAkc2V0T3BlcmF0aW9uLT5uYW1lKCJzZXQiKTsK
LSAgICAkc2V0T3BlcmF0aW9uLT5pc01hcExpa2UoMSk7Ci0gICAgbXkgJHNldEtleUFyZ3VtZW50
ID0gSURMQXJndW1lbnQtPm5ldygpOwotICAgICRzZXRLZXlBcmd1bWVudC0+bmFtZSgia2V5Iik7
Ci0gICAgJHNldEtleUFyZ3VtZW50LT50eXBlKCRtYXBsaWtlLT5rZXlUeXBlKTsKLSAgICAkc2V0
S2V5QXJndW1lbnQtPmV4dGVuZGVkQXR0cmlidXRlcygkZXh0ZW5kZWRBdHRyaWJ1dGVMaXN0KTsK
LSAgICBteSAkc2V0VmFsdWVBcmd1bWVudCA9IElETEFyZ3VtZW50LT5uZXcoKTsKLSAgICAkc2V0
VmFsdWVBcmd1bWVudC0+bmFtZSgidmFsdWUiKTsKLSAgICAkc2V0VmFsdWVBcmd1bWVudC0+dHlw
ZSgkbWFwbGlrZS0+dmFsdWVUeXBlKTsKLSAgICAkc2V0VmFsdWVBcmd1bWVudC0+ZXh0ZW5kZWRB
dHRyaWJ1dGVzKCRleHRlbmRlZEF0dHJpYnV0ZUxpc3QpOwotICAgIHB1c2goQHskc2V0T3BlcmF0
aW9uLT5hcmd1bWVudHN9LCAoJHNldEtleUFyZ3VtZW50KSk7Ci0gICAgcHVzaChAeyRzZXRPcGVy
YXRpb24tPmFyZ3VtZW50c30sICgkc2V0VmFsdWVBcmd1bWVudCkpOwotICAgICRzZXRPcGVyYXRp
b24tPmV4dGVuZGVkQXR0cmlidXRlcygkbm90RW51bWVyYWJsZUV4dGVuZGVkQXR0cmlidXRlTGlz
dCk7Ci0gICAgJHNldE9wZXJhdGlvbi0+dHlwZShtYWtlU2ltcGxlVHlwZSgiYW55IikpOwotCi0g
ICAgbXkgJGNsZWFyT3BlcmF0aW9uID0gSURMT3BlcmF0aW9uLT5uZXcoKTsKLSAgICAkY2xlYXJP
cGVyYXRpb24tPm5hbWUoImNsZWFyIik7Ci0gICAgJGNsZWFyT3BlcmF0aW9uLT5pc01hcExpa2Uo
MSk7Ci0gICAgJGNsZWFyT3BlcmF0aW9uLT5leHRlbmRlZEF0dHJpYnV0ZXMoJG5vdEVudW1lcmFi
bGVFeHRlbmRlZEF0dHJpYnV0ZUxpc3QpOwotICAgICRjbGVhck9wZXJhdGlvbi0+dHlwZShtYWtl
U2ltcGxlVHlwZSgidW5kZWZpbmVkIikpOwotCi0gICAgbXkgJGRlbGV0ZU9wZXJhdGlvbiA9IElE
TE9wZXJhdGlvbi0+bmV3KCk7Ci0gICAgJGRlbGV0ZU9wZXJhdGlvbi0+bmFtZSgiZGVsZXRlIik7
Ci0gICAgJGRlbGV0ZU9wZXJhdGlvbi0+aXNNYXBMaWtlKDEpOwotICAgIG15ICRkZWxldGVBcmd1
bWVudCA9IElETEFyZ3VtZW50LT5uZXcoKTsKLSAgICAkZGVsZXRlQXJndW1lbnQtPm5hbWUoImtl
eSIpOwotICAgICRkZWxldGVBcmd1bWVudC0+dHlwZSgkbWFwbGlrZS0+a2V5VHlwZSk7Ci0gICAg
JGRlbGV0ZUFyZ3VtZW50LT5leHRlbmRlZEF0dHJpYnV0ZXMoJGV4dGVuZGVkQXR0cmlidXRlTGlz
dCk7Ci0gICAgcHVzaChAeyRkZWxldGVPcGVyYXRpb24tPmFyZ3VtZW50c30sICgkZGVsZXRlQXJn
dW1lbnQpKTsKLSAgICAkZGVsZXRlT3BlcmF0aW9uLT5leHRlbmRlZEF0dHJpYnV0ZXMoJG5vdEVu
dW1lcmFibGVFeHRlbmRlZEF0dHJpYnV0ZUxpc3QpOwotICAgICRkZWxldGVPcGVyYXRpb24tPnR5
cGUobWFrZVNpbXBsZVR5cGUoImFueSIpKTsKLQotICAgIHB1c2goQHskbWFwbGlrZS0+b3BlcmF0
aW9uc30sICRzZXRPcGVyYXRpb24pOwotICAgIHB1c2goQHskbWFwbGlrZS0+b3BlcmF0aW9uc30s
ICRjbGVhck9wZXJhdGlvbik7Ci0gICAgcHVzaChAeyRtYXBsaWtlLT5vcGVyYXRpb25zfSwgJGRl
bGV0ZU9wZXJhdGlvbik7CisgICAgICAgICRzZWxmLT5hc3NlcnRFeHRlbmRlZEF0dHJpYnV0ZXNW
YWxpZEZvckNvbnRleHQoJGV4dGVuZGVkQXR0cmlidXRlTGlzdCwgIm1hcC1saWtlIik7CisgICAg
ICAgICRtYXBsaWtlLT5leHRlbmRlZEF0dHJpYnV0ZXMoJGV4dGVuZGVkQXR0cmlidXRlTGlzdCk7
CiAKLSAgICByZXR1cm4gJG1hcGxpa2U7CisgICAgICAgIHJldHVybiAkbWFwbGlrZTsKKyAgICB9
CisgICAgJHNlbGYtPmFzc2VydFVuZXhwZWN0ZWRUb2tlbigkbmV4dC0+dmFsdWUoKSwgX19MSU5F
X18pOwogfQogCiBzdWIgcGFyc2VTZXRMaWtlUmVzdAogewogICAgIG15ICRzZWxmID0gc2hpZnQ7
CiAgICAgbXkgJGV4dGVuZGVkQXR0cmlidXRlTGlzdCA9IHNoaWZ0OwotICAgIG15ICRpc1JlYWRP
bmx5ID0gc2hpZnQ7CiAKICAgICBteSAkbmV4dCA9ICRzZWxmLT5uZXh0VG9rZW4oKTsKICAgICBp
ZiAoJG5leHQtPnZhbHVlKCkgZXEgInNldGxpa2UiKSB7CiAgICAgICAgICRzZWxmLT5hc3NlcnRU
b2tlblZhbHVlKCRzZWxmLT5nZXRUb2tlbigpLCAic2V0bGlrZSIsIF9fTElORV9fKTsKLSAgICAg
ICAgbXkgJHNldExpa2VOb2RlID0gJHNlbGYtPnBhcnNlU2V0TGlrZVByb3BlcnRpZXMoJGV4dGVu
ZGVkQXR0cmlidXRlTGlzdCwgJGlzUmVhZE9ubHkpOworICAgICAgICAKKyAgICAgICAgbXkgJHNl
dGxpa2UgPSBJRExTZXRMaWtlLT5uZXcoKTsKKworICAgICAgICAkc2VsZi0+YXNzZXJ0VG9rZW5W
YWx1ZSgkc2VsZi0+Z2V0VG9rZW4oKSwgIjwiLCBfX0xJTkVfXyk7CisgICAgICAgICRzZXRsaWtl
LT5pdGVtVHlwZSgkc2VsZi0+cGFyc2VUeXBlV2l0aEV4dGVuZGVkQXR0cmlidXRlcygpKTsKKyAg
ICAgICAgJHNlbGYtPmFzc2VydFRva2VuVmFsdWUoJHNlbGYtPmdldFRva2VuKCksICI+IiwgX19M
SU5FX18pOwogICAgICAgICAkc2VsZi0+YXNzZXJ0VG9rZW5WYWx1ZSgkc2VsZi0+Z2V0VG9rZW4o
KSwgIjsiLCBfX0xJTkVfXyk7Ci0gICAgICAgIHJldHVybiAkc2V0TGlrZU5vZGU7CisKKyAgICAg
ICAgJHNlbGYtPmFzc2VydEV4dGVuZGVkQXR0cmlidXRlc1ZhbGlkRm9yQ29udGV4dCgkZXh0ZW5k
ZWRBdHRyaWJ1dGVMaXN0LCAic2V0LWxpa2UiKTsKKyAgICAgICAgJHNldGxpa2UtPmV4dGVuZGVk
QXR0cmlidXRlcygkZXh0ZW5kZWRBdHRyaWJ1dGVMaXN0KTsKKyAgICAgICAgCisgICAgICAgIHJl
dHVybiAkc2V0bGlrZTsKICAgICB9CiAgICAgJHNlbGYtPmFzc2VydFVuZXhwZWN0ZWRUb2tlbigk
bmV4dC0+dmFsdWUoKSwgX19MSU5FX18pOwogfQogCi1zdWIgcGFyc2VTZXRMaWtlUHJvcGVydGll
cwotewotICAgIG15ICRzZWxmID0gc2hpZnQ7Ci0gICAgbXkgJGV4dGVuZGVkQXR0cmlidXRlTGlz
dCA9IHNoaWZ0OwotICAgIG15ICRpc1JlYWRPbmx5ID0gc2hpZnQ7Ci0KLSAgICBteSAkc2V0bGlr
ZSA9IElETFNldExpa2UtPm5ldygpOwotICAgICRzZXRsaWtlLT5leHRlbmRlZEF0dHJpYnV0ZXMo
JGV4dGVuZGVkQXR0cmlidXRlTGlzdCk7Ci0KLSAgICAkc2VsZi0+YXNzZXJ0VG9rZW5WYWx1ZSgk
c2VsZi0+Z2V0VG9rZW4oKSwgIjwiLCBfX0xJTkVfXyk7Ci0gICAgJHNldGxpa2UtPml0ZW1UeXBl
KCRzZWxmLT5wYXJzZVR5cGVXaXRoRXh0ZW5kZWRBdHRyaWJ1dGVzKCkpOwotICAgICRzZWxmLT5h
c3NlcnRUb2tlblZhbHVlKCRzZWxmLT5nZXRUb2tlbigpLCAiPiIsIF9fTElORV9fKTsKLQotICAg
ICMgRklYTUU6IFN5bnRoZXRpYyBvcGVyYXRpb25zIHNob3VsZCBub3QgYmUgYWRkZWQgZHVyaW5n
IHBhcnNpbmcuIEluc3RlYWQsIHRoZSBDb2RlR2VuZXJhdG9yCi0gICAgIyBzaG91bGQgYmUgcmVz
cG9uc2libGUgZm9yIHRoZW0uCi0KLSAgICBteSAkbm90RW51bWVyYWJsZUV4dGVuZGVkQXR0cmli
dXRlTGlzdCA9ICRleHRlbmRlZEF0dHJpYnV0ZUxpc3Q7Ci0gICAgJG5vdEVudW1lcmFibGVFeHRl
bmRlZEF0dHJpYnV0ZUxpc3QtPntOb3RFbnVtZXJhYmxlfSA9IDE7Ci0KLSAgICBteSAkc2l6ZUF0
dHJpYnV0ZSA9IElETEF0dHJpYnV0ZS0+bmV3KCk7Ci0gICAgJHNpemVBdHRyaWJ1dGUtPm5hbWUo
InNpemUiKTsKLSAgICAkc2l6ZUF0dHJpYnV0ZS0+aXNTZXRMaWtlKDEpOwotICAgICRzaXplQXR0
cmlidXRlLT5leHRlbmRlZEF0dHJpYnV0ZXMoJGV4dGVuZGVkQXR0cmlidXRlTGlzdCk7Ci0gICAg
JHNpemVBdHRyaWJ1dGUtPmlzUmVhZE9ubHkoMSk7Ci0gICAgJHNpemVBdHRyaWJ1dGUtPnR5cGUo
bWFrZVNpbXBsZVR5cGUoImFueSIpKTsKLSAgICBwdXNoKEB7JHNldGxpa2UtPmF0dHJpYnV0ZXN9
LCAkc2l6ZUF0dHJpYnV0ZSk7Ci0KLSAgICBteSAkaGFzT3BlcmF0aW9uID0gSURMT3BlcmF0aW9u
LT5uZXcoKTsKLSAgICAkaGFzT3BlcmF0aW9uLT5uYW1lKCJoYXMiKTsKLSAgICAkaGFzT3BlcmF0
aW9uLT5pc1NldExpa2UoMSk7Ci0gICAgbXkgJGhhc0FyZ3VtZW50ID0gSURMQXJndW1lbnQtPm5l
dygpOwotICAgICRoYXNBcmd1bWVudC0+bmFtZSgia2V5Iik7Ci0gICAgJGhhc0FyZ3VtZW50LT50
eXBlKCRzZXRsaWtlLT5pdGVtVHlwZSk7Ci0gICAgJGhhc0FyZ3VtZW50LT5leHRlbmRlZEF0dHJp
YnV0ZXMoJGV4dGVuZGVkQXR0cmlidXRlTGlzdCk7Ci0gICAgcHVzaChAeyRoYXNPcGVyYXRpb24t
PmFyZ3VtZW50c30sICgkaGFzQXJndW1lbnQpKTsKLSAgICAkaGFzT3BlcmF0aW9uLT5leHRlbmRl
ZEF0dHJpYnV0ZXMoJG5vdEVudW1lcmFibGVFeHRlbmRlZEF0dHJpYnV0ZUxpc3QpOwotICAgICRo
YXNPcGVyYXRpb24tPnR5cGUobWFrZVNpbXBsZVR5cGUoImFueSIpKTsKLQotICAgIG15ICRlbnRy
aWVzT3BlcmF0aW9uID0gSURMT3BlcmF0aW9uLT5uZXcoKTsKLSAgICAkZW50cmllc09wZXJhdGlv
bi0+bmFtZSgiZW50cmllcyIpOwotICAgICRlbnRyaWVzT3BlcmF0aW9uLT5pc1NldExpa2UoMSk7
Ci0gICAgJGVudHJpZXNPcGVyYXRpb24tPmV4dGVuZGVkQXR0cmlidXRlcygkbm90RW51bWVyYWJs
ZUV4dGVuZGVkQXR0cmlidXRlTGlzdCk7Ci0gICAgJGVudHJpZXNPcGVyYXRpb24tPnR5cGUobWFr
ZVNpbXBsZVR5cGUoImFueSIpKTsKLQotICAgIG15ICRrZXlzT3BlcmF0aW9uID0gSURMT3BlcmF0
aW9uLT5uZXcoKTsKLSAgICAka2V5c09wZXJhdGlvbi0+bmFtZSgia2V5cyIpOwotICAgICRrZXlz
T3BlcmF0aW9uLT5pc1NldExpa2UoMSk7Ci0gICAgJGtleXNPcGVyYXRpb24tPmV4dGVuZGVkQXR0
cmlidXRlcygkbm90RW51bWVyYWJsZUV4dGVuZGVkQXR0cmlidXRlTGlzdCk7Ci0gICAgJGtleXNP
cGVyYXRpb24tPnR5cGUobWFrZVNpbXBsZVR5cGUoImFueSIpKTsKLQotICAgIG15ICR2YWx1ZXNP
cGVyYXRpb24gPSBJRExPcGVyYXRpb24tPm5ldygpOwotICAgICR2YWx1ZXNPcGVyYXRpb24tPm5h
bWUoInZhbHVlcyIpOwotICAgICR2YWx1ZXNPcGVyYXRpb24tPmlzU2V0TGlrZSgxKTsKLSAgICAk
dmFsdWVzT3BlcmF0aW9uLT5leHRlbmRlZEF0dHJpYnV0ZXMoJGV4dGVuZGVkQXR0cmlidXRlTGlz
dCk7Ci0gICAgJHZhbHVlc09wZXJhdGlvbi0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Tm90RW51bWVy
YWJsZX0gPSAxOwotICAgICR2YWx1ZXNPcGVyYXRpb24tPnR5cGUobWFrZVNpbXBsZVR5cGUoImFu
eSIpKTsKLQotICAgIG15ICRmb3JFYWNoT3BlcmF0aW9uID0gSURMT3BlcmF0aW9uLT5uZXcoKTsK
LSAgICAkZm9yRWFjaE9wZXJhdGlvbi0+bmFtZSgiZm9yRWFjaCIpOwotICAgICRmb3JFYWNoT3Bl
cmF0aW9uLT5pc1NldExpa2UoMSk7Ci0gICAgbXkgJGZvckVhY2hBcmd1bWVudCA9IElETEFyZ3Vt
ZW50LT5uZXcoKTsKLSAgICAkZm9yRWFjaEFyZ3VtZW50LT5uYW1lKCJjYWxsYmFjayIpOwotICAg
ICRmb3JFYWNoQXJndW1lbnQtPnR5cGUobWFrZVNpbXBsZVR5cGUoImFueSIpKTsKLSAgICAkZm9y
RWFjaEFyZ3VtZW50LT5leHRlbmRlZEF0dHJpYnV0ZXMoJGV4dGVuZGVkQXR0cmlidXRlTGlzdCk7
Ci0gICAgcHVzaChAeyRmb3JFYWNoT3BlcmF0aW9uLT5hcmd1bWVudHN9LCAoJGZvckVhY2hBcmd1
bWVudCkpOwotICAgICRmb3JFYWNoT3BlcmF0aW9uLT5leHRlbmRlZEF0dHJpYnV0ZXMoJGV4dGVu
ZGVkQXR0cmlidXRlTGlzdCk7Ci0gICAgJGZvckVhY2hPcGVyYXRpb24tPmV4dGVuZGVkQXR0cmli
dXRlcy0+e0VudW1lcmFibGV9ID0gMTsKLSAgICAkZm9yRWFjaE9wZXJhdGlvbi0+dHlwZShtYWtl
U2ltcGxlVHlwZSgiYW55IikpOwotCi0gICAgcHVzaChAeyRzZXRsaWtlLT5vcGVyYXRpb25zfSwg
JGhhc09wZXJhdGlvbik7Ci0gICAgcHVzaChAeyRzZXRsaWtlLT5vcGVyYXRpb25zfSwgJGVudHJp
ZXNPcGVyYXRpb24pOwotICAgIHB1c2goQHskc2V0bGlrZS0+b3BlcmF0aW9uc30sICRrZXlzT3Bl
cmF0aW9uKTsKLSAgICBwdXNoKEB7JHNldGxpa2UtPm9wZXJhdGlvbnN9LCAkdmFsdWVzT3BlcmF0
aW9uKTsKLSAgICBwdXNoKEB7JHNldGxpa2UtPm9wZXJhdGlvbnN9LCAkZm9yRWFjaE9wZXJhdGlv
bik7Ci0KLSAgICByZXR1cm4gJHNldGxpa2UgaWYgJGlzUmVhZE9ubHk7Ci0KLSAgICBteSAkYWRk
T3BlcmF0aW9uID0gSURMT3BlcmF0aW9uLT5uZXcoKTsKLSAgICAkYWRkT3BlcmF0aW9uLT5uYW1l
KCJhZGQiKTsKLSAgICAkYWRkT3BlcmF0aW9uLT5pc1NldExpa2UoMSk7Ci0gICAgbXkgJGFkZEFy
Z3VtZW50ID0gSURMQXJndW1lbnQtPm5ldygpOwotICAgICRhZGRBcmd1bWVudC0+bmFtZSgia2V5
Iik7Ci0gICAgJGFkZEFyZ3VtZW50LT50eXBlKCRzZXRsaWtlLT5pdGVtVHlwZSk7Ci0gICAgJGFk
ZEFyZ3VtZW50LT5leHRlbmRlZEF0dHJpYnV0ZXMoJGV4dGVuZGVkQXR0cmlidXRlTGlzdCk7Ci0g
ICAgcHVzaChAeyRhZGRPcGVyYXRpb24tPmFyZ3VtZW50c30sICgkYWRkQXJndW1lbnQpKTsKLSAg
ICAkYWRkT3BlcmF0aW9uLT5leHRlbmRlZEF0dHJpYnV0ZXMoJG5vdEVudW1lcmFibGVFeHRlbmRl
ZEF0dHJpYnV0ZUxpc3QpOwotICAgICRhZGRPcGVyYXRpb24tPnR5cGUobWFrZVNpbXBsZVR5cGUo
ImFueSIpKTsKLQotICAgIG15ICRjbGVhck9wZXJhdGlvbiA9IElETE9wZXJhdGlvbi0+bmV3KCk7
Ci0gICAgJGNsZWFyT3BlcmF0aW9uLT5uYW1lKCJjbGVhciIpOwotICAgICRjbGVhck9wZXJhdGlv
bi0+aXNTZXRMaWtlKDEpOwotICAgICRjbGVhck9wZXJhdGlvbi0+ZXh0ZW5kZWRBdHRyaWJ1dGVz
KCRub3RFbnVtZXJhYmxlRXh0ZW5kZWRBdHRyaWJ1dGVMaXN0KTsKLSAgICAkY2xlYXJPcGVyYXRp
b24tPnR5cGUobWFrZVNpbXBsZVR5cGUoInVuZGVmaW5lZCIpKTsKLQotICAgIG15ICRkZWxldGVP
cGVyYXRpb24gPSBJRExPcGVyYXRpb24tPm5ldygpOwotICAgICRkZWxldGVPcGVyYXRpb24tPm5h
bWUoImRlbGV0ZSIpOwotICAgICRkZWxldGVPcGVyYXRpb24tPmlzU2V0TGlrZSgxKTsKLSAgICBt
eSAkZGVsZXRlQXJndW1lbnQgPSBJRExBcmd1bWVudC0+bmV3KCk7Ci0gICAgJGRlbGV0ZUFyZ3Vt
ZW50LT5uYW1lKCJrZXkiKTsKLSAgICAkZGVsZXRlQXJndW1lbnQtPnR5cGUoJHNldGxpa2UtPml0
ZW1UeXBlKTsKLSAgICAkZGVsZXRlQXJndW1lbnQtPmV4dGVuZGVkQXR0cmlidXRlcygkZXh0ZW5k
ZWRBdHRyaWJ1dGVMaXN0KTsKLSAgICBwdXNoKEB7JGRlbGV0ZU9wZXJhdGlvbi0+YXJndW1lbnRz
fSwgKCRkZWxldGVBcmd1bWVudCkpOwotICAgICRkZWxldGVPcGVyYXRpb24tPmV4dGVuZGVkQXR0
cmlidXRlcygkbm90RW51bWVyYWJsZUV4dGVuZGVkQXR0cmlidXRlTGlzdCk7Ci0gICAgJGRlbGV0
ZU9wZXJhdGlvbi0+dHlwZShtYWtlU2ltcGxlVHlwZSgiYW55IikpOwotCi0gICAgcHVzaChAeyRz
ZXRsaWtlLT5vcGVyYXRpb25zfSwgJGFkZE9wZXJhdGlvbik7Ci0gICAgcHVzaChAeyRzZXRsaWtl
LT5vcGVyYXRpb25zfSwgJGNsZWFyT3BlcmF0aW9uKTsKLSAgICBwdXNoKEB7JHNldGxpa2UtPm9w
ZXJhdGlvbnN9LCAkZGVsZXRlT3BlcmF0aW9uKTsKLQotICAgIHJldHVybiAkc2V0bGlrZTsKLX0K
LQogc3ViIHBhcnNlT3BlcmF0aW9uUmVzdAogewogICAgIG15ICRzZWxmID0gc2hpZnQ7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvQmluZGluZ1Rlc3RHbG9iYWxD
b25zdHJ1Y3RvcnMuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9CaW5kaW5nVGVzdEdsb2JhbENvbnN0cnVjdG9ycy5pZGwJKHJldmlzaW9uIDI2
NzAwNikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9CaW5kaW5nVGVz
dEdsb2JhbENvbnN0cnVjdG9ycy5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAg
cGFydGlhbCBpbnRlcmZhY2UgVGVzdEdsb2JhbE9iamVjdCB7CiAgICAgYXR0cmlidXRlIFRlc3RM
ZWdhY3lGYWN0b3J5RnVuY3Rpb25MZWdhY3lGYWN0b3J5RnVuY3Rpb25Db25zdHJ1Y3RvciBBdWRp
bzsKICAgICBhdHRyaWJ1dGUgVGVzdExlZ2FjeU92ZXJyaWRlQnVpbHRJbnNDb25zdHJ1Y3RvciBU
ZXN0TGVnYWN5T3ZlcnJpZGVCdWlsdEluczsKICAgICBhdHRyaWJ1dGUgVGVzdE1hcExpa2VDb25z
dHJ1Y3RvciBUZXN0TWFwTGlrZTsKKyAgICBhdHRyaWJ1dGUgVGVzdE1hcExpa2VXaXRoT3ZlcnJp
ZGRlbk9wZXJhdGlvbnNDb25zdHJ1Y3RvciBUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0
aW9uczsKICAgICBhdHRyaWJ1dGUgVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmll
ckNvbnN0cnVjdG9yIFRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXI7CiAgICAg
YXR0cmlidXRlIFRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbkNvbnN0
cnVjdG9yIFRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbjsKICAgICBh
dHRyaWJ1dGUgVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyQ29uc3RydWN0
b3IgVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyOwpAQCAtNTksNiArNjAs
NyBAQCBwYXJ0aWFsIGludGVyZmFjZSBUZXN0R2xvYmFsT2JqZWN0IHsKICAgICBhdHRyaWJ1dGUg
VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWxDb25zdHJ1Y3RvciBUZXN0U2VyaWFsaXphdGlv
bkluaGVyaXRGaW5hbDsKICAgICBbQ29uZGl0aW9uYWw9Q29uZGl0aW9uMXxDb25kaXRpb24yXSBh
dHRyaWJ1dGUgVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNvbnN0cnVjdG9yIFRl
c3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U7CiAgICAgYXR0cmlidXRlIFRlc3RTZXRM
aWtlQ29uc3RydWN0b3IgVGVzdFNldExpa2U7CisgICAgYXR0cmlidXRlIFRlc3RTZXRMaWtlV2l0
aE92ZXJyaWRkZW5PcGVyYXRpb25zQ29uc3RydWN0b3IgVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRl
bk9wZXJhdGlvbnM7CiAgICAgYXR0cmlidXRlIFRlc3RTdHJpbmdpZmllckNvbnN0cnVjdG9yIFRl
c3RTdHJpbmdpZmllcjsKICAgICBhdHRyaWJ1dGUgVGVzdFN0cmluZ2lmaWVyQW5vbnltb3VzT3Bl
cmF0aW9uQ29uc3RydWN0b3IgVGVzdFN0cmluZ2lmaWVyQW5vbnltb3VzT3BlcmF0aW9uOwogICAg
IGF0dHJpYnV0ZSBUZXN0U3RyaW5naWZpZXJOYW1lZE9wZXJhdGlvbkNvbnN0cnVjdG9yIFRlc3RT
dHJpbmdpZmllck5hbWVkT3BlcmF0aW9uOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L1N1cHBsZW1lbnRhbERlcGVuZGVuY2llcy5kZXAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1N1cHBsZW1lbnRhbERlcGVuZGVu
Y2llcy5kZXAJKHJldmlzaW9uIDI2NzAwNikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9TdXBwbGVtZW50YWxEZXBlbmRlbmNpZXMuZGVwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMjYsNiArMTI2LDkgQEAgV2ViRE9NVGVzdExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMuaDogCiBK
U1Rlc3RNYXBMaWtlLmg6IAogRE9NVGVzdE1hcExpa2UuaDogCiBXZWJET01UZXN0TWFwTGlrZS5o
OiAKK0pTVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMuaDogCitET01UZXN0TWFw
TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucy5oOiAKK1dlYkRPTVRlc3RNYXBMaWtlV2l0aE92
ZXJyaWRkZW5PcGVyYXRpb25zLmg6IAogSlNUZXN0TWl4aW5JbnRlcmZhY2UuaDogVGVzdFBhcnRp
YWxNaXhpbkludGVyZmFjZS5pZGwKIERPTVRlc3RNaXhpbkludGVyZmFjZS5oOiBUZXN0UGFydGlh
bE1peGluSW50ZXJmYWNlLmlkbAogV2ViRE9NVGVzdE1peGluSW50ZXJmYWNlLmg6IFRlc3RQYXJ0
aWFsTWl4aW5JbnRlcmZhY2UuaWRsCkBAIC0yMzMsNiArMjM2LDkgQEAgV2ViRE9NVGVzdFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZQogSlNUZXN0U2V0TGlrZS5oOiAKIERPTVRlc3RTZXRM
aWtlLmg6IAogV2ViRE9NVGVzdFNldExpa2UuaDogCitKU1Rlc3RTZXRMaWtlV2l0aE92ZXJyaWRk
ZW5PcGVyYXRpb25zLmg6IAorRE9NVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMu
aDogCitXZWJET01UZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucy5oOiAKIEpTVGVz
dFN0YW5kYWxvbmVEaWN0aW9uYXJ5Lmg6IFRlc3RTdXBwbGVtZW50YWwuaWRsCiBET01UZXN0U3Rh
bmRhbG9uZURpY3Rpb25hcnkuaDogVGVzdFN1cHBsZW1lbnRhbC5pZGwKIFdlYkRPTVRlc3RTdGFu
ZGFsb25lRGljdGlvbmFyeS5oOiBUZXN0U3VwcGxlbWVudGFsLmlkbApJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVy
YXRpb25zLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMuaWRsCShub25leGlzdGVu
dCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0TWFwTGlrZVdp
dGhPdmVycmlkZGVuT3BlcmF0aW9ucy5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKK2ludGVyZmFjZSBUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0
aW9ucyB7CisgICAgbWFwbGlrZTxET01TdHJpbmcsIERPTVN0cmluZz47CisgICAgCisgICAgYXR0
cmlidXRlIGxvbmcgc2V0OworICAgIHVuZGVmaW5lZCBjbGVhcigpOworfTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVu
T3BlcmF0aW9ucy5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L1Rlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zLmlkbAkobm9uZXhp
c3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdFNldExp
a2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCitpbnRlcmZhY2UgVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9w
ZXJhdGlvbnMgeworICAgIHNldGxpa2U8RE9NU3RyaW5nPjsKKyAgICAKKyAgICBhdHRyaWJ1dGUg
bG9uZyBhZGQ7CisgICAgdW5kZWZpbmVkIGRlbGV0ZSgpOworfTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RHbG9iYWxPYmplY3QuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RH
bG9iYWxPYmplY3QuY3BwCShyZXZpc2lvbiAyNjcwMDYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0R2xvYmFsT2JqZWN0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNjIsNiArNjIsNyBAQAogI2luY2x1ZGUgIkpTVGVzdExlZ2FjeUZhY3RvcnlGdW5jdGlv
bi5oIgogI2luY2x1ZGUgIkpTVGVzdExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMuaCIKICNpbmNsdWRl
ICJKU1Rlc3RNYXBMaWtlLmgiCisjaW5jbHVkZSAiSlNUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVu
T3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRl
bnRpZmllci5oIgogI2luY2x1ZGUgIkpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5n
RXhjZXB0aW9uLmgiCiAjaW5jbHVkZSAiSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElk
ZW50aWZpZXIuaCIKQEAgLTkwLDYgKzkxLDcgQEAKICNpbmNsdWRlICJKU1Rlc3RTZXJpYWxpemF0
aW9uSW5oZXJpdC5oIgogI2luY2x1ZGUgIkpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWwu
aCIKICNpbmNsdWRlICJKU1Rlc3RTZXRMaWtlLmgiCisjaW5jbHVkZSAiSlNUZXN0U2V0TGlrZVdp
dGhPdmVycmlkZGVuT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkpTVGVzdFN0cmluZ2lmaWVyLmgi
CiAjaW5jbHVkZSAiSlNUZXN0U3RyaW5naWZpZXJBbm9ueW1vdXNPcGVyYXRpb24uaCIKICNpbmNs
dWRlICJKU1Rlc3RTdHJpbmdpZmllck5hbWVkT3BlcmF0aW9uLmgiCkBAIC0yMzQsNiArMjM2LDgg
QEAgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZQogYm9vbCBzZXRKU1Rl
c3RHbG9iYWxPYmplY3RUZXN0TGVnYWN5T3ZlcnJpZGVCdWlsdEluc0NvbnN0cnVjdG9yKEpTQzo6
SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVl
KTsKIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdE1hcExpa2VDb25z
dHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQ
cm9wZXJ0eU5hbWUpOwogYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TWFwTGlrZUNvbnN0
cnVjdG9yKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVu
Y29kZWRKU1ZhbHVlKTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVz
dE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnNDb25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFs
T2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBz
ZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9uc0Nv
bnN0cnVjdG9yKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6
OkVuY29kZWRKU1ZhbHVlKTsKIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0
VGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllckNvbnN0cnVjdG9yKEpTQzo6SlNH
bG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7CiBi
b29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50
aWZpZXJDb25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1
ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CiBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2Jh
bE9iamVjdFRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbkNvbnN0cnVj
dG9yKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3Bl
cnR5TmFtZSk7CkBAIC0yOTgsNiArMzAyLDggQEAgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RU
ZXN0U2VyaWFsaXplZAogI2VuZGlmCiBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9i
amVjdFRlc3RTZXRMaWtlQ29uc3RydWN0b3IoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5j
b2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2Jq
ZWN0VGVzdFNldExpa2VDb25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CitKU0M6OkVuY29kZWRKU1ZhbHVlIGpz
VGVzdEdsb2JhbE9iamVjdFRlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zQ29uc3Ry
dWN0b3IoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJv
cGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFNldExpa2VXaXRoT3Zl
cnJpZGRlbk9wZXJhdGlvbnNDb25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpF
bmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CiBKU0M6OkVuY29kZWRKU1ZhbHVl
IGpzVGVzdEdsb2JhbE9iamVjdFRlc3RTdHJpbmdpZmllckNvbnN0cnVjdG9yKEpTQzo6SlNHbG9i
YWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7CiBib29s
IHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RTdHJpbmdpZmllckNvbnN0cnVjdG9yKEpTQzo6SlNH
bG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsK
IEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdFN0cmluZ2lmaWVyQW5v
bnltb3VzT3BlcmF0aW9uQ29uc3RydWN0b3IoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5j
b2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKQEAgLTMyNSwxMSArMzMxLDExIEBAIHVz
aW5nIEpTVGVzdEdsb2JhbE9iamVjdENvbnN0cnVjdG9yID0gSlMKIAogc3RhdGljIGNvbnN0IHN0
cnVjdCBDb21wYWN0SGFzaEluZGV4IEpTVGVzdEdsb2JhbE9iamVjdFRhYmxlSW5kZXhbMjcwXSA9
IHsKICAgICB7IC0xLCAtMSB9LAotICAgIHsgNDIsIC0xIH0sCisgICAgeyA0MywgLTEgfSwKICAg
ICB7IC0xLCAtMSB9LAogICAgIHsgMCwgLTEgfSwKICAgICB7IDgsIDI2NSB9LAotICAgIHsgNDYs
IC0xIH0sCisgICAgeyA0NywgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0s
CiAgICAgeyAtMSwgLTEgfSwKQEAgLTMzNyw3ICszNDMsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0
IENvbXBhY3RIYXNoSW5kZXggSlNUCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAog
ICAgIHsgLTEsIC0xIH0sCi0gICAgeyA1NSwgLTEgfSwKKyAgICB7IDU2LCAtMSB9LAogICAgIHsg
LTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LApAQCAtMzQ1LDcgKzM1
MSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgQ29tcGFjdEhhc2hJbmRleCBKU1QKICAgICB7IC0x
LCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKLSAgICB7IDY3LCAtMSB9
LAorICAgIHsgNjksIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAg
IHsgLTEsIC0xIH0sCkBAIC0zNTksMTMgKzM2NSwxMyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IENv
bXBhY3RIYXNoSW5kZXggSlNUCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAg
IHsgLTEsIC0xIH0sCi0gICAgeyAzNiwgLTEgfSwKKyAgICB7IDM3LCAtMSB9LAogICAgIHsgLTEs
IC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0s
CiAgICAgeyAtMSwgLTEgfSwKLSAgICB7IDcyLCAtMSB9LAorICAgIHsgNzQsIC0xIH0sCiAgICAg
eyAxNCwgMjU5IH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LApAQCAtMzc0LDEx
ICszODAsMTEgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBDb21wYWN0SGFzaEluZGV4IEpTVAogICAg
IHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAotICAgIHsgNDAs
IC0xIH0sCisgICAgeyA0MSwgLTEgfSwKICAgICB7IDIxLCAyNTYgfSwKICAgICB7IDEwLCAtMSB9
LAogICAgIHsgLTEsIC0xIH0sCi0gICAgeyA0NywgLTEgfSwKKyAgICB7IDQ4LCAtMSB9LAogICAg
IHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LApAQCAtMzg3LDcg
KzM5Myw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgQ29tcGFjdEhhc2hJbmRleCBKU1QKICAgICB7
IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKLSAgICB7IDM4LCAt
MSB9LAorICAgIHsgMzksIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAog
ICAgIHsgLTEsIC0xIH0sCkBAIC00MDgsOCArNDE0LDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBD
b21wYWN0SGFzaEluZGV4IEpTVAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAg
ICB7IC0xLCAtMSB9LAotICAgIHsgLTEsIC0xIH0sCi0gICAgeyA2MSwgLTEgfSwKKyAgICB7IDMy
LCAtMSB9LAorICAgIHsgNjIsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9
LAogICAgIHsgLTEsIC0xIH0sCkBAIC00MTgsNyArNDI0LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVj
dCBDb21wYWN0SGFzaEluZGV4IEpTVAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAyNSwgMjU3IH0s
CiAgICAgeyAtMSwgLTEgfSwKLSAgICB7IDYyLCAtMSB9LAorICAgIHsgNjQsIC0xIH0sCiAgICAg
eyAyMCwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCkBAIC00MjgsNyAr
NDM0LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBDb21wYWN0SGFzaEluZGV4IEpTVAogICAgIHsg
LTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAotICAgIHsgMzcsIC0x
IH0sCisgICAgeyAzOCwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAg
ICAgeyA0LCAtMSB9LApAQCAtNDM5LDcgKzQ0NSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgQ29t
cGFjdEhhc2hJbmRleCBKU1QKICAgICB7IDI2LCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAg
eyAyLCAyNjkgfSwKLSAgICB7IDM5LCAtMSB9LAorICAgIHsgNDAsIC0xIH0sCiAgICAgeyAtMSwg
LTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCkBAIC00NDksNyArNDU1LDcg
QEAgc3RhdGljIGNvbnN0IHN0cnVjdCBDb21wYWN0SGFzaEluZGV4IEpTVAogICAgIHsgLTEsIC0x
IH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAotICAgIHsgNTksIC0xIH0sCisg
ICAgeyA2MCwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAt
MSwgLTEgfSwKQEAgLTQ1OCwxMyArNDY0LDEzIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgQ29tcGFj
dEhhc2hJbmRleCBKU1QKICAgICB7IC0xLCAtMSB9LAogICAgIHsgMzAsIC0xIH0sCiAgICAgeyAt
MSwgLTEgfSwKLSAgICB7IDQ0LCAtMSB9LAorICAgIHsgNDUsIC0xIH0sCiAgICAgeyAtMSwgLTEg
fSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAg
ICB7IC0xLCAtMSB9LAotICAgIHsgNTQsIC0xIH0sCisgICAgeyA1NSwgLTEgfSwKICAgICB7IC0x
LCAtMSB9LAogICAgIHsgMTUsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKQEAgLTQ3Miw3ICs0Nzgs
NyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IENvbXBhY3RIYXNoSW5kZXggSlNUCiAgICAgeyAtMSwg
LTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCi0gICAgeyA0OSwgLTEgfSwK
KyAgICB7IDUwLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7
IC0xLCAtMSB9LApAQCAtNDgyLDEyICs0ODgsMTIgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBDb21w
YWN0SGFzaEluZGV4IEpTVAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7
IC0xLCAtMSB9LAotICAgIHsgNjgsIC0xIH0sCisgICAgeyA3MCwgLTEgfSwKICAgICB7IC0xLCAt
MSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IDI5LCAtMSB9LAot
ICAgIHsgMzMsIDI2MyB9LAorICAgIHsgMzQsIDI2MyB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAg
eyA1LCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCkBAIC00OTksNyArNTA1LDcgQEAgc3RhdGljIGNv
bnN0IHN0cnVjdCBDb21wYWN0SGFzaEluZGV4IEpTVAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAx
NywgMjU4IH0sCiAgICAgeyAtMSwgLTEgfSwKLSAgICB7IDYzLCAtMSB9LAorICAgIHsgNjUsIC0x
IH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCkBA
IC01MDgsMTEgKzUxNCwxMSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IENvbXBhY3RIYXNoSW5kZXgg
SlNUCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCi0g
ICAgeyAzNSwgMjY4IH0sCisgICAgeyAzNiwgMjY4IH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7
IDE4LCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCi0gICAgeyA2NiwgLTEgfSwKKyAgICB7IDY4LCAt
MSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LApA
QCAtNTI2LDEyICs1MzIsMTIgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBDb21wYWN0SGFzaEluZGV4
IEpTVAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAot
ICAgIHsgNzEsIC0xIH0sCisgICAgeyA3MywgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsg
LTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAotICAgIHsgNDgsIDI2
NCB9LAorICAgIHsgNDksIDI2NCB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwK
ICAgICB7IDMsIC0xIH0sCkBAIC01NDQsNyArNTUwLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBD
b21wYWN0SGFzaEluZGV4IEpTVAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAg
ICB7IC0xLCAtMSB9LAotICAgIHsgLTEsIC0xIH0sCisgICAgeyA2MywgLTEgfSwKICAgICB7IC0x
LCAtMSB9LAogICAgIHsgMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LApAQCAtNTUzLDEwICs1NTks
MTAgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBDb21wYWN0SGFzaEluZGV4IEpTVAogICAgIHsgLTEs
IC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAotICAgIHsgNTAsIDI2MiB9
LAorICAgIHsgNTEsIDI2MiB9LAogICAgIHsgMTEsIDI2MSB9LAogICAgIHsgLTEsIC0xIH0sCi0g
ICAgeyA2NCwgLTEgfSwKKyAgICB7IDY2LCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAt
MSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LApAQCAtNTY4LDMyICs1NzQsMzIgQEAgc3RhdGljIGNv
bnN0IHN0cnVjdCBDb21wYWN0SGFzaEluZGV4IEpTVAogICAgIHsgMjcsIC0xIH0sCiAgICAgeyAt
MSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAotICAgIHsgMzIsIC0xIH0sCisgICAgeyAzMywgLTEg
fSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAg
ICB7IDcsIC0xIH0sCi0gICAgeyA1MiwgLTEgfSwKLSAgICB7IC0xLCAtMSB9LAogICAgIHsgNTMs
IC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKKyAgICB7IDU0LCAtMSB9LAorICAgIHsgLTEsIC0xIH0s
CiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAg
eyAyOCwgMjY2IH0sCiAgICAgeyAzMSwgMjYwIH0sCi0gICAgeyAzNCwgLTEgfSwKLSAgICB7IDQx
LCAtMSB9LAotICAgIHsgNDMsIC0xIH0sCi0gICAgeyA0NSwgLTEgfSwKLSAgICB7IDUxLCAtMSB9
LAotICAgIHsgNTYsIC0xIH0sCisgICAgeyAzNSwgLTEgfSwKKyAgICB7IDQyLCAtMSB9LAorICAg
IHsgNDQsIC0xIH0sCisgICAgeyA0NiwgLTEgfSwKKyAgICB7IDUyLCAtMSB9LAogICAgIHsgNTcs
IC0xIH0sCiAgICAgeyA1OCwgLTEgfSwKLSAgICB7IDYwLCAtMSB9LAotICAgIHsgNjUsIC0xIH0s
Ci0gICAgeyA2OSwgLTEgfSwKLSAgICB7IDcwLCAtMSB9LAorICAgIHsgNTksIC0xIH0sCisgICAg
eyA2MSwgLTEgfSwKKyAgICB7IDY3LCAtMSB9LAorICAgIHsgNzEsIC0xIH0sCisgICAgeyA3Miwg
LTEgfSwKIH07CiAKIApAQCAtNjQzLDYgKzY0OSw3IEBAIHN0YXRpYyBjb25zdCBIYXNoVGFibGVW
YWx1ZSBKU1Rlc3RHbG9iYWwKICAgICB7ICJBdWRpbyIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihK
U0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSksIE5vSW50cmluc2ljLCB7IChpbnRwdHJf
dClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0R2xvYmFsT2Jq
ZWN0QXVkaW9Db25zdHJ1Y3RvciksIChpbnRwdHJfdCkgc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlT
bG90OjpQdXRWYWx1ZUZ1bmM+KHNldEpTVGVzdEdsb2JhbE9iamVjdEF1ZGlvQ29uc3RydWN0b3Ip
IH0gfSwKICAgICB7ICJUZXN0TGVnYWN5T3ZlcnJpZGVCdWlsdElucyIsIHN0YXRpY19jYXN0PHVu
c2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSksIE5vSW50cmluc2ljLCB7
IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0
R2xvYmFsT2JqZWN0VGVzdExlZ2FjeU92ZXJyaWRlQnVpbHRJbnNDb25zdHJ1Y3RvciksIChpbnRw
dHJfdCkgc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmM+KHNldEpTVGVz
dEdsb2JhbE9iamVjdFRlc3RMZWdhY3lPdmVycmlkZUJ1aWx0SW5zQ29uc3RydWN0b3IpIH0gfSwK
ICAgICB7ICJUZXN0TWFwTGlrZSIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5
QXR0cmlidXRlOjpEb250RW51bSksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2Fz
dDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0R2xvYmFsT2JqZWN0VGVzdE1hcExp
a2VDb25zdHJ1Y3RvciksIChpbnRwdHJfdCkgc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90OjpQ
dXRWYWx1ZUZ1bmM+KHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RNYXBMaWtlQ29uc3RydWN0b3Ip
IH0gfSwKKyAgICB7ICJUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucyIsIHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSksIE5vSW50
cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVu
Yz4oanNUZXN0R2xvYmFsT2JqZWN0VGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnND
b25zdHJ1Y3RvciksIChpbnRwdHJfdCkgc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90OjpQdXRW
YWx1ZUZ1bmM+KHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5P
cGVyYXRpb25zQ29uc3RydWN0b3IpIH0gfSwKICAgICB7ICJUZXN0TmFtZWRBbmRJbmRleGVkU2V0
dGVyTm9JZGVudGlmaWVyIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRy
aWJ1dGU6OkRvbnRFbnVtKSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PFBy
b3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRBbmRJ
bmRleGVkU2V0dGVyTm9JZGVudGlmaWVyQ29uc3RydWN0b3IpLCAoaW50cHRyX3QpIHN0YXRpY19j
YXN0PFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jPihzZXRKU1Rlc3RHbG9iYWxPYmplY3RU
ZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyQ29uc3RydWN0b3IpIH0gfSwKICAg
ICB7ICJUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24iLCBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pLCBOb0ludHJp
bnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+
KGpzVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2Vw
dGlvbkNvbnN0cnVjdG9yKSwgKGludHB0cl90KSBzdGF0aWNfY2FzdDxQdXRQcm9wZXJ0eVNsb3Q6
OlB1dFZhbHVlRnVuYz4oc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkQW5kSW5kZXhlZFNl
dHRlclRocm93aW5nRXhjZXB0aW9uQ29uc3RydWN0b3IpIH0gfSwKICAgICB7ICJUZXN0TmFtZWRB
bmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlND
OjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qp
c3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdEdsb2JhbE9iamVj
dFRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllckNvbnN0cnVjdG9yKSwgKGlu
dHB0cl90KSBzdGF0aWNfY2FzdDxQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYz4oc2V0SlNU
ZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyQ29u
c3RydWN0b3IpIH0gfSwKQEAgLTY4MSw2ICs2ODgsNyBAQCBzdGF0aWMgY29uc3QgSGFzaFRhYmxl
VmFsdWUgSlNUZXN0R2xvYmFsCiAgICAgeyAwLCAwLCBOb0ludHJpbnNpYywgeyAwLCAwIH0gfSwK
ICNlbmRpZgogICAgIHsgIlRlc3RTZXRMaWtlIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6
UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0
YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3RHbG9iYWxPYmplY3RU
ZXN0U2V0TGlrZUNvbnN0cnVjdG9yKSwgKGludHB0cl90KSBzdGF0aWNfY2FzdDxQdXRQcm9wZXJ0
eVNsb3Q6OlB1dFZhbHVlRnVuYz4oc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFNldExpa2VDb25z
dHJ1Y3RvcikgfSB9LAorICAgIHsgIlRlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25z
Iiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVt
KSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0
VmFsdWVGdW5jPihqc1Rlc3RHbG9iYWxPYmplY3RUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3Bl
cmF0aW9uc0NvbnN0cnVjdG9yKSwgKGludHB0cl90KSBzdGF0aWNfY2FzdDxQdXRQcm9wZXJ0eVNs
b3Q6OlB1dFZhbHVlRnVuYz4oc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFNldExpa2VXaXRoT3Zl
cnJpZGRlbk9wZXJhdGlvbnNDb25zdHJ1Y3RvcikgfSB9LAogICAgIHsgIlRlc3RTdHJpbmdpZmll
ciIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51
bSksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6Okdl
dFZhbHVlRnVuYz4oanNUZXN0R2xvYmFsT2JqZWN0VGVzdFN0cmluZ2lmaWVyQ29uc3RydWN0b3Ip
LCAoaW50cHRyX3QpIHN0YXRpY19jYXN0PFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jPihz
ZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0U3RyaW5naWZpZXJDb25zdHJ1Y3RvcikgfSB9LAogICAg
IHsgIlRlc3RTdHJpbmdpZmllckFub255bW91c09wZXJhdGlvbiIsIHN0YXRpY19jYXN0PHVuc2ln
bmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSksIE5vSW50cmluc2ljLCB7IChp
bnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0R2xv
YmFsT2JqZWN0VGVzdFN0cmluZ2lmaWVyQW5vbnltb3VzT3BlcmF0aW9uQ29uc3RydWN0b3IpLCAo
aW50cHRyX3QpIHN0YXRpY19jYXN0PFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jPihzZXRK
U1Rlc3RHbG9iYWxPYmplY3RUZXN0U3RyaW5naWZpZXJBbm9ueW1vdXNPcGVyYXRpb25Db25zdHJ1
Y3RvcikgfSB9LAogICAgIHsgIlRlc3RTdHJpbmdpZmllck5hbWVkT3BlcmF0aW9uIiwgc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSwgTm9JbnRy
aW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5j
Pihqc1Rlc3RHbG9iYWxPYmplY3RUZXN0U3RyaW5naWZpZXJOYW1lZE9wZXJhdGlvbkNvbnN0cnVj
dG9yKSwgKGludHB0cl90KSBzdGF0aWNfY2FzdDxQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVu
Yz4oc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFN0cmluZ2lmaWVyTmFtZWRPcGVyYXRpb25Db25z
dHJ1Y3RvcikgfSB9LApAQCAtNjk0LDcgKzcwMiw3IEBAIHN0YXRpYyBjb25zdCBIYXNoVGFibGVW
YWx1ZSBKU1Rlc3RHbG9iYWwKICAgICB7ICJyZWd1bGFyT3BlcmF0aW9uIiwgc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkZ1bmN0aW9uKSwgTm9JbnRyaW5zaWMs
IHsgKGludHB0cl90KXN0YXRpY19jYXN0PFJhd05hdGl2ZUZ1bmN0aW9uPihqc1Rlc3RHbG9iYWxP
YmplY3RJbnN0YW5jZUZ1bmN0aW9uUmVndWxhck9wZXJhdGlvbiksIChpbnRwdHJfdCkgKDEpIH0g
fSwKIH07CiAKLXN0YXRpYyBjb25zdCBIYXNoVGFibGUgSlNUZXN0R2xvYmFsT2JqZWN0VGFibGUg
PSB7IDczLCAyNTUsIHRydWUsIEpTVGVzdEdsb2JhbE9iamVjdDo6aW5mbygpLCBKU1Rlc3RHbG9i
YWxPYmplY3RUYWJsZVZhbHVlcywgSlNUZXN0R2xvYmFsT2JqZWN0VGFibGVJbmRleCB9Oworc3Rh
dGljIGNvbnN0IEhhc2hUYWJsZSBKU1Rlc3RHbG9iYWxPYmplY3RUYWJsZSA9IHsgNzUsIDI1NSwg
dHJ1ZSwgSlNUZXN0R2xvYmFsT2JqZWN0OjppbmZvKCksIEpTVGVzdEdsb2JhbE9iamVjdFRhYmxl
VmFsdWVzLCBKU1Rlc3RHbG9iYWxPYmplY3RUYWJsZUluZGV4IH07CiAvKiBIYXNoIHRhYmxlIGZv
ciBjb25zdHJ1Y3RvciAqLwogCiBzdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0R2xv
YmFsT2JqZWN0Q29uc3RydWN0b3JUYWJsZVZhbHVlc1tdID0KQEAgLTE2ODIsNiArMTY5MCwyOSBA
QCBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RNYXBMaWtlQ29uCiAgICAgcmV0dXJuIElE
TEF0dHJpYnV0ZTxKU1Rlc3RHbG9iYWxPYmplY3Q+OjpzZXQ8c2V0SlNUZXN0R2xvYmFsT2JqZWN0
VGVzdE1hcExpa2VDb25zdHJ1Y3RvclNldHRlcj4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNW
YWx1ZSwgZW5jb2RlZFZhbHVlLCAiVGVzdE1hcExpa2UiKTsKIH0KIAorc3RhdGljIGlubGluZSBK
U1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRp
b25zQ29uc3RydWN0b3JHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3Qs
IEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCkKK3sKKyAgICBVTlVTRURfUEFSQU0obGV4
aWNhbEdsb2JhbE9iamVjdCk7CisgICAgcmV0dXJuIEpTVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRl
bk9wZXJhdGlvbnM6OmdldENvbnN0cnVjdG9yKEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmpl
Y3QpLCB0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpKTsKK30KKworRW5jb2RlZEpTVmFsdWUganNU
ZXN0R2xvYmFsT2JqZWN0VGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnNDb25zdHJ1
Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUg
dGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCit7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rl
c3RHbG9iYWxPYmplY3Q+OjpnZXQ8anNUZXN0R2xvYmFsT2JqZWN0VGVzdE1hcExpa2VXaXRoT3Zl
cnJpZGRlbk9wZXJhdGlvbnNDb25zdHJ1Y3RvckdldHRlcj4oKmxleGljYWxHbG9iYWxPYmplY3Qs
IHRoaXNWYWx1ZSwgIlRlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zIik7Cit9CisK
K3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TWFwTGlrZVdpdGhP
dmVycmlkZGVuT3BlcmF0aW9uc0NvbnN0cnVjdG9yU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUg
dmFsdWUpCit7CisgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0
KTsKKyAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KKyAgICByZXR1cm4g
dGhpc09iamVjdC5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJh
dGlvbnMiKSwgc3RybGVuKCJUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucyIpKSwg
dmFsdWUpOworfQorCitib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RNYXBMaWtlV2l0aE92
ZXJyaWRkZW5PcGVyYXRpb25zQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9i
YWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZFZhbHVlKQoreworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0R2xvYmFsT2JqZWN0Pjo6
c2V0PHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRp
b25zQ29uc3RydWN0b3JTZXR0ZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsIGVu
Y29kZWRWYWx1ZSwgIlRlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zIik7Cit9CisK
IHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRBbmRJbmRl
eGVkU2V0dGVyTm9JZGVudGlmaWVyQ29uc3RydWN0b3JHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxl
eGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCkKIHsKICAg
ICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CkBAIC0yMzg0LDYgKzI0MTUsMjkg
QEAgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0U2V0TGlrZUNvbgogICAgIHJldHVybiBJ
RExBdHRyaWJ1dGU8SlNUZXN0R2xvYmFsT2JqZWN0Pjo6c2V0PHNldEpTVGVzdEdsb2JhbE9iamVj
dFRlc3RTZXRMaWtlQ29uc3RydWN0b3JTZXR0ZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlz
VmFsdWUsIGVuY29kZWRWYWx1ZSwgIlRlc3RTZXRMaWtlIik7CiB9CiAKK3N0YXRpYyBpbmxpbmUg
SlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0
aW9uc0NvbnN0cnVjdG9yR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0
LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QpCit7CisgICAgVU5VU0VEX1BBUkFNKGxl
eGljYWxHbG9iYWxPYmplY3QpOworICAgIHJldHVybiBKU1Rlc3RTZXRMaWtlV2l0aE92ZXJyaWRk
ZW5PcGVyYXRpb25zOjpnZXRDb25zdHJ1Y3RvcihKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2Jq
ZWN0KSwgdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSk7Cit9CisKK0VuY29kZWRKU1ZhbHVlIGpz
VGVzdEdsb2JhbE9iamVjdFRlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zQ29uc3Ry
dWN0b3IoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQoreworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNU
ZXN0R2xvYmFsT2JqZWN0Pjo6Z2V0PGpzVGVzdEdsb2JhbE9iamVjdFRlc3RTZXRMaWtlV2l0aE92
ZXJyaWRkZW5PcGVyYXRpb25zQ29uc3RydWN0b3JHZXR0ZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0
LCB0aGlzVmFsdWUsICJUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucyIpOworfQor
CitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFNldExpa2VXaXRo
T3ZlcnJpZGRlbk9wZXJhdGlvbnNDb25zdHJ1Y3RvclNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4
aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVl
IHZhbHVlKQoreworICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVj
dCk7CisgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IuCisgICAgcmV0dXJu
IHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWlu
dGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVy
YXRpb25zIiksIHN0cmxlbigiVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMiKSks
IHZhbHVlKTsKK30KKworYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0U2V0TGlrZVdpdGhP
dmVycmlkZGVuT3BlcmF0aW9uc0NvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xv
YmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRWYWx1ZSkKK3sKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdEdsb2JhbE9iamVjdD46
OnNldDxzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0
aW9uc0NvbnN0cnVjdG9yU2V0dGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCBl
bmNvZGVkVmFsdWUsICJUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucyIpOworfQor
CiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdFN0cmluZ2lmaWVy
Q29uc3RydWN0b3JHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpT
VGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCkKIHsKICAgICBVTlVTRURfUEFSQU0obGV4aWNh
bEdsb2JhbE9iamVjdCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE1hcExp
a2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRk
ZW5PcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ4NSBAQAorLyoKKyAg
ICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisg
ICAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4g
RE8gTk9UIE1PRElGWSEKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCisqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNUZXN0
TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucy5oIgorCisjaW5jbHVkZSAiQWN0aXZlRE9N
T2JqZWN0LmgiCisjaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiSlNET01B
dHRyaWJ1dGUuaCIKKyNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKKyNpbmNsdWRlICJKU0RPTUNv
bnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZS5oIgorI2luY2x1ZGUgIkpTRE9NQ29udmVydEFueS5o
IgorI2luY2x1ZGUgIkpTRE9NQ29udmVydE51bWJlcnMuaCIKKyNpbmNsdWRlICJKU0RPTUNvbnZl
cnRTdHJpbmdzLmgiCisjaW5jbHVkZSAiSlNET01FeGNlcHRpb25IYW5kbGluZy5oIgorI2luY2x1
ZGUgIkpTRE9NTWFwTGlrZS5oIgorI2luY2x1ZGUgIkpTRE9NT3BlcmF0aW9uLmgiCisjaW5jbHVk
ZSAiSlNET01XcmFwcGVyQ2FjaGUuaCIKKyNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0
LmgiCisjaW5jbHVkZSAiV2ViQ29yZUpTQ2xpZW50RGF0YS5oIgorI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0J1aWx0aW5OYW1lcy5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0Z1bmN0aW9u
UHJvdG90eXBlLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSGVhcEFuYWx5emVyLmg+Cisj
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNDSW5saW5lcy5oPgorI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0pTRGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLmg+CisjaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvU3Vic3BhY2VJbmxpbmVzLmg+CisjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgor
I2luY2x1ZGUgPHd0Zi9Qb2ludGVyUHJlcGFyYXRpb25zLmg+CisjaW5jbHVkZSA8d3RmL1VSTC5o
PgorCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK3VzaW5nIG5hbWVzcGFjZSBKU0M7CisKKy8vIEZ1
bmN0aW9ucworCitKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0TWFwTGlr
ZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9uc1Byb3RvdHlwZUZ1bmN0aW9uQ2xlYXIoSlNDOjpKU0ds
b2JhbE9iamVjdCosIEpTQzo6Q2FsbEZyYW1lKik7CitKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwganNUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9uc1Byb3RvdHlwZUZ1
bmN0aW9uR2V0KEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkNhbGxGcmFtZSopOworSlNDOjpF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9w
ZXJhdGlvbnNQcm90b3R5cGVGdW5jdGlvbkhhcyhKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpD
YWxsRnJhbWUqKTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RNYXBM
aWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zUHJvdG90eXBlRnVuY3Rpb25FbnRyaWVzKEpTQzo6
SlNHbG9iYWxPYmplY3QqLCBKU0M6OkNhbGxGcmFtZSopOworSlNDOjpFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGpzVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnNQcm90b3R5
cGVGdW5jdGlvbktleXMoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6Q2FsbEZyYW1lKik7CitK
U0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0TWFwTGlrZVdpdGhPdmVycmlk
ZGVuT3BlcmF0aW9uc1Byb3RvdHlwZUZ1bmN0aW9uVmFsdWVzKEpTQzo6SlNHbG9iYWxPYmplY3Qq
LCBKU0M6OkNhbGxGcmFtZSopOworSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpz
VGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnNQcm90b3R5cGVGdW5jdGlvbkZvckVh
Y2goSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6Q2FsbEZyYW1lKik7CitKU0M6OkVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9u
c1Byb3RvdHlwZUZ1bmN0aW9uRGVsZXRlKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkNhbGxG
cmFtZSopOworCisvLyBBdHRyaWJ1dGVzCisKK0pTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0TWFw
TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9uc0NvbnN0cnVjdG9yKEpTQzo6SlNHbG9iYWxPYmpl
Y3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpT
VGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnNDb25zdHJ1Y3RvcihKU0M6OkpTR2xv
YmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CitK
U0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnNT
ZXQoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVy
dHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9uc1Nl
dChKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVk
SlNWYWx1ZSk7CitKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRl
bk9wZXJhdGlvbnNTaXplKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVl
LCBKU0M6OlByb3BlcnR5TmFtZSk7CisKK2NsYXNzIEpTVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRl
bk9wZXJhdGlvbnNQcm90b3R5cGUgZmluYWwgOiBwdWJsaWMgSlNDOjpKU05vbkZpbmFsT2JqZWN0
IHsKK3B1YmxpYzoKKyAgICB1c2luZyBCYXNlID0gSlNDOjpKU05vbkZpbmFsT2JqZWN0OworICAg
IHN0YXRpYyBKU1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zUHJvdG90eXBlKiBj
cmVhdGUoSlNDOjpWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6
U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgeworICAgICAgICBKU1Rlc3RNYXBMaWtlV2l0aE92
ZXJyaWRkZW5PcGVyYXRpb25zUHJvdG90eXBlKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxs
b2NhdGVDZWxsPEpTVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnNQcm90b3R5cGU+
KHZtLmhlYXApKSBKU1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zUHJvdG90eXBl
KHZtLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSk7CisgICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRp
b24odm0pOworICAgICAgICByZXR1cm4gcHRyOworICAgIH0KKworICAgIERFQ0xBUkVfSU5GTzsK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgSlNDOjpTdWJzcGFjZUFjY2Vzcz4KKyAg
ICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCisgICAg
eworICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShKU1Rlc3RNYXBM
aWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zUHJvdG90eXBlLCBCYXNlKTsKKyAgICAgICAgcmV0
dXJuICZ2bS5wbGFpbk9iamVjdFNwYWNlOworICAgIH0KKyAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1
cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6
OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworICAg
IH0KKworcHJpdmF0ZToKKyAgICBKU1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25z
UHJvdG90eXBlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSkKKyAgICAgICAgOiBKU0M6OkpTTm9uRmluYWxPYmplY3Qodm0sIHN0cnVj
dHVyZSkKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJik7
Cit9OworU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoSlNUZXN0TWFwTGlrZVdp
dGhPdmVycmlkZGVuT3BlcmF0aW9uc1Byb3RvdHlwZSwgSlNUZXN0TWFwTGlrZVdpdGhPdmVycmlk
ZGVuT3BlcmF0aW9uc1Byb3RvdHlwZTo6QmFzZSk7CisKK3VzaW5nIEpTVGVzdE1hcExpa2VXaXRo
T3ZlcnJpZGRlbk9wZXJhdGlvbnNDb25zdHJ1Y3RvciA9IEpTRE9NQ29uc3RydWN0b3JOb3RDb25z
dHJ1Y3RhYmxlPEpTVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnM+OworCit0ZW1w
bGF0ZTw+IEpTVmFsdWUgSlNUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9uc0NvbnN0
cnVjdG9yOjpwcm90b3R5cGVGb3JTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIGNvbnN0IEpTRE9NR2xv
YmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCit7CisgICAgVU5VU0VEX1BBUkFNKHZtKTsKKyAgICBy
ZXR1cm4gZ2xvYmFsT2JqZWN0LmZ1bmN0aW9uUHJvdG90eXBlKCk7Cit9CisKK3RlbXBsYXRlPD4g
dm9pZCBKU1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zQ29uc3RydWN0b3I6Omlu
aXRpYWxpemVQcm9wZXJ0aWVzKFZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVj
dCkKK3sKKyAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwgSlNU
ZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9uczo6cHJvdG90eXBlKHZtLCBnbG9iYWxP
YmplY3QpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRlIHwgSlNDOjpQcm9wZXJ0
eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7
CisgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZpYWxT
dHJpbmcodm0sICJUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucyJfcyksIEpTQzo6
UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9u
dEVudW0pOworICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051
bWJlcigwKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5
QXR0cmlidXRlOjpEb250RW51bSk7Cit9CisKK3RlbXBsYXRlPD4gY29uc3QgQ2xhc3NJbmZvIEpT
VGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnNDb25zdHJ1Y3Rvcjo6c19pbmZvID0g
eyAiVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMiLCAmQmFzZTo6c19pbmZvLCBu
dWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTVGVzdE1hcExpa2VXaXRoT3Zl
cnJpZGRlbk9wZXJhdGlvbnNDb25zdHJ1Y3RvcikgfTsKKworLyogSGFzaCB0YWJsZSBmb3IgcHJv
dG90eXBlICovCisKK3N0YXRpYyBjb25zdCBIYXNoVGFibGVWYWx1ZSBKU1Rlc3RNYXBMaWtlV2l0
aE92ZXJyaWRkZW5PcGVyYXRpb25zUHJvdG90eXBlVGFibGVWYWx1ZXNbXSA9Cit7CisgICAgeyAi
Y29uc3RydWN0b3IiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0
ZTo6RG9udEVudW0pLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVy
dHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlv
bnNDb25zdHJ1Y3RvciksIChpbnRwdHJfdCkgc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90OjpQ
dXRWYWx1ZUZ1bmM+KHNldEpTVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnNDb25z
dHJ1Y3RvcikgfSB9LAorICAgIHsgInNldCIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlBy
b3BlcnR5QXR0cmlidXRlOjpDdXN0b21BY2Nlc3NvciB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6
OkRPTUF0dHJpYnV0ZSksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9w
ZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0
aW9uc1NldCksIChpbnRwdHJfdCkgc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90OjpQdXRWYWx1
ZUZ1bmM+KHNldEpTVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnNTZXQpIH0gfSwK
KyAgICB7ICJzaXplIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1
dGU6OkRvbnRFbnVtIHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlBy
b3BlcnR5QXR0cmlidXRlOjpDdXN0b21BY2Nlc3NvciksIE5vSW50cmluc2ljLCB7IChpbnRwdHJf
dClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0TWFwTGlrZVdp
dGhPdmVycmlkZGVuT3BlcmF0aW9uc1NpemUpLCAoaW50cHRyX3QpIHN0YXRpY19jYXN0PFB1dFBy
b3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jPigwKSB9IH0sCisgICAgeyAiY2xlYXIiLCBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RnVuY3Rpb24pLCBOb0ludHJp
bnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UmF3TmF0aXZlRnVuY3Rpb24+KGpzVGVzdE1h
cExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnNQcm90b3R5cGVGdW5jdGlvbkNsZWFyKSwgKGlu
dHB0cl90KSAoMCkgfSB9LAorICAgIHsgImdldCIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6
OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkZ1
bmN0aW9uKSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PFJhd05hdGl2ZUZ1
bmN0aW9uPihqc1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zUHJvdG90eXBlRnVu
Y3Rpb25HZXQpLCAoaW50cHRyX3QpICgxKSB9IH0sCisgICAgeyAiaGFzIiwgc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtIHwgSlNDOjpQcm9wZXJ0
eUF0dHJpYnV0ZTo6RnVuY3Rpb24pLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nh
c3Q8UmF3TmF0aXZlRnVuY3Rpb24+KGpzVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlv
bnNQcm90b3R5cGVGdW5jdGlvbkhhcyksIChpbnRwdHJfdCkgKDEpIH0gfSwKKyAgICB7ICJlbnRy
aWVzIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRF
bnVtIHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RnVuY3Rpb24pLCBOb0ludHJpbnNpYywgeyAo
aW50cHRyX3Qpc3RhdGljX2Nhc3Q8UmF3TmF0aXZlRnVuY3Rpb24+KGpzVGVzdE1hcExpa2VXaXRo
T3ZlcnJpZGRlbk9wZXJhdGlvbnNQcm90b3R5cGVGdW5jdGlvbkVudHJpZXMpLCAoaW50cHRyX3Qp
ICgwKSB9IH0sCisgICAgeyAia2V5cyIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3Bl
cnR5QXR0cmlidXRlOjpEb250RW51bSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkZ1bmN0aW9u
KSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PFJhd05hdGl2ZUZ1bmN0aW9u
Pihqc1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zUHJvdG90eXBlRnVuY3Rpb25L
ZXlzKSwgKGludHB0cl90KSAoMCkgfSB9LAorICAgIHsgInZhbHVlcyIsIHN0YXRpY19jYXN0PHVu
c2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSB8IEpTQzo6UHJvcGVydHlB
dHRyaWJ1dGU6OkZ1bmN0aW9uKSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0
PFJhd05hdGl2ZUZ1bmN0aW9uPihqc1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25z
UHJvdG90eXBlRnVuY3Rpb25WYWx1ZXMpLCAoaW50cHRyX3QpICgwKSB9IH0sCisgICAgeyAiZm9y
RWFjaCIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpGdW5j
dGlvbiksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxSYXdOYXRpdmVGdW5j
dGlvbj4oanNUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9uc1Byb3RvdHlwZUZ1bmN0
aW9uRm9yRWFjaCksIChpbnRwdHJfdCkgKDEpIH0gfSwKKyAgICB7ICJkZWxldGUiLCBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0gfCBKU0M6OlBy
b3BlcnR5QXR0cmlidXRlOjpGdW5jdGlvbiksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0
aWNfY2FzdDxSYXdOYXRpdmVGdW5jdGlvbj4oanNUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3Bl
cmF0aW9uc1Byb3RvdHlwZUZ1bmN0aW9uRGVsZXRlKSwgKGludHB0cl90KSAoMSkgfSB9LAorfTsK
KworY29uc3QgQ2xhc3NJbmZvIEpTVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnNQ
cm90b3R5cGU6OnNfaW5mbyA9IHsgIlRlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25z
IiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShK
U1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zUHJvdG90eXBlKSB9OworCit2b2lk
IEpTVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnNQcm90b3R5cGU6OmZpbmlzaENy
ZWF0aW9uKFZNJiB2bSkKK3sKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CisgICAgcmVp
ZnlTdGF0aWNQcm9wZXJ0aWVzKHZtLCBKU1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRp
b25zOjppbmZvKCksIEpTVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnNQcm90b3R5
cGVUYWJsZVZhbHVlcywgKnRoaXMpOworICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1l
cy0+aXRlcmF0b3JTeW1ib2wsIGdldERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+YnVpbHRp
bk5hbWVzKCkuZW50cmllc1B1YmxpY05hbWUoKSksIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6
OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkpOworICAgIEpTQ19UT19TVFJJTkdfVEFHX1dJ
VEhPVVRfVFJBTlNJVElPTigpOworfQorCitjb25zdCBDbGFzc0luZm8gSlNUZXN0TWFwTGlrZVdp
dGhPdmVycmlkZGVuT3BlcmF0aW9uczo6c19pbmZvID0geyAiVGVzdE1hcExpa2VXaXRoT3ZlcnJp
ZGRlbk9wZXJhdGlvbnMiLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVf
TUVUSE9EX1RBQkxFKEpTVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMpIH07CisK
K0pTVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnM6OkpTVGVzdE1hcExpa2VXaXRo
T3ZlcnJpZGRlbk9wZXJhdGlvbnMoU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2Jq
ZWN0JiBnbG9iYWxPYmplY3QsIFJlZjxUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9u
cz4mJiBpbXBsKQorICAgIDogSlNET01XcmFwcGVyPFRlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5P
cGVyYXRpb25zPihzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCwgV1RGTW92ZShpbXBsKSkKK3sKK30K
Kwordm9pZCBKU1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zOjpmaW5pc2hDcmVh
dGlvbihWTSYgdm0pCit7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOworICAgIEFTU0VS
VChpbmhlcml0cyh2bSwgaW5mbygpKSk7CisKKyAgICBzdGF0aWNfYXNzZXJ0KCFzdGQ6OmlzX2Jh
c2Vfb2Y8QWN0aXZlRE9NT2JqZWN0LCBUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9u
cz46OnZhbHVlLCAiSW50ZXJmYWNlIGlzIG5vdCBtYXJrZWQgYXMgW0FjdGl2ZURPTU9iamVjdF0g
ZXZlbiB0aG91Z2ggaW1wbGVtZW50YXRpb24gY2xhc3Mgc3ViY2xhc3NlcyBBY3RpdmVET01PYmpl
Y3QuIik7CisKK30KKworSlNPYmplY3QqIEpTVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJh
dGlvbnM6OmNyZWF0ZVByb3RvdHlwZShWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxP
YmplY3QpCit7CisgICAgcmV0dXJuIEpTVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlv
bnNQcm90b3R5cGU6OmNyZWF0ZSh2bSwgJmdsb2JhbE9iamVjdCwgSlNUZXN0TWFwTGlrZVdpdGhP
dmVycmlkZGVuT3BlcmF0aW9uc1Byb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKHZtLCAmZ2xvYmFs
T2JqZWN0LCBnbG9iYWxPYmplY3Qub2JqZWN0UHJvdG90eXBlKCkpKTsKK30KKworSlNPYmplY3Qq
IEpTVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnM6OnByb3RvdHlwZShWTSYgdm0s
IEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCit7CisgICAgcmV0dXJuIGdldERPTVBy
b3RvdHlwZTxKU1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zPih2bSwgZ2xvYmFs
T2JqZWN0KTsKK30KKworSlNWYWx1ZSBKU1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRp
b25zOjpnZXRDb25zdHJ1Y3RvcihWTSYgdm0sIGNvbnN0IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QpCit7CisgICAgcmV0dXJuIGdldERPTUNvbnN0cnVjdG9yPEpTVGVzdE1hcExpa2VXaXRo
T3ZlcnJpZGRlbk9wZXJhdGlvbnNDb25zdHJ1Y3Rvcj4odm0sICpqc0Nhc3Q8Y29uc3QgSlNET01H
bG9iYWxPYmplY3QqPihnbG9iYWxPYmplY3QpKTsKK30KKwordm9pZCBKU1Rlc3RNYXBMaWtlV2l0
aE92ZXJyaWRkZW5PcGVyYXRpb25zOjpkZXN0cm95KEpTQzo6SlNDZWxsKiBjZWxsKQoreworICAg
IEpTVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMqIHRoaXNPYmplY3QgPSBzdGF0
aWNfY2FzdDxKU1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zKj4oY2VsbCk7Cisg
ICAgdGhpc09iamVjdC0+SlNUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9uczo6fkpT
VGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMoKTsKK30KKwordGVtcGxhdGU8PiBp
bmxpbmUgSlNUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucyogSURMQXR0cmlidXRl
PEpTVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnM+OjpjYXN0KEpTR2xvYmFsT2Jq
ZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUpCit7Cisg
ICAgcmV0dXJuIGpzRHluYW1pY0Nhc3Q8SlNUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0
aW9ucyo+KEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCBKU1ZhbHVlOjpkZWNvZGUo
dGhpc1ZhbHVlKSk7Cit9CisKK3RlbXBsYXRlPD4gaW5saW5lIEpTVGVzdE1hcExpa2VXaXRoT3Zl
cnJpZGRlbk9wZXJhdGlvbnMqIElETE9wZXJhdGlvbjxKU1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRk
ZW5PcGVyYXRpb25zPjo6Y2FzdChKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwg
Q2FsbEZyYW1lJiBjYWxsRnJhbWUpCit7CisgICAgcmV0dXJuIGpzRHluYW1pY0Nhc3Q8SlNUZXN0
TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucyo+KEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9i
YWxPYmplY3QpLCBjYWxsRnJhbWUudGhpc1ZhbHVlKCkpOworfQorCitFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zQ29uc3RydWN0b3IoSlNHbG9iYWxP
YmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJv
cGVydHlOYW1lKQoreworICAgIFZNJiB2bSA9IEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVj
dCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAg
YXV0byogcHJvdG90eXBlID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRk
ZW5PcGVyYXRpb25zUHJvdG90eXBlKj4odm0sIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsK
KyAgICBpZiAoVU5MSUtFTFkoIXByb3RvdHlwZSkpCisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlw
ZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUpOworICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoSlNUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9uczo6Z2V0Q29u
c3RydWN0b3IoSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KSwgcHJvdG90eXBlLT5nbG9i
YWxPYmplY3QoKSkpOworfQorCitib29sIHNldEpTVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9w
ZXJhdGlvbnNDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwg
RW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCit7
CisgICAgVk0mIHZtID0gSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBhdXRv
IHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBhdXRvKiBwcm90b3R5
cGUgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnNQ
cm90b3R5cGUqPih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAgIGlmIChVTkxJ
S0VMWSghcHJvdG90eXBlKSkgeworICAgICAgICB0aHJvd1ZNVHlwZUVycm9yKGxleGljYWxHbG9i
YWxPYmplY3QsIHRocm93U2NvcGUpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAg
IC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yCisgICAgcmV0dXJuIHByb3RvdHlw
ZS0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5jb25zdHJ1Y3RvciwgSlNWYWx1ZTo6
ZGVjb2RlKGVuY29kZWRWYWx1ZSkpOworfQorCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0
TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9uc1NldEdldHRlcihKU0dsb2JhbE9iamVjdCYg
bGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9u
cyYgdGhpc09iamVjdCkKK3sKKyAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9i
YWxPYmplY3QpOworICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKKyAgICBSRUxFQVNFX0FO
RF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMTG9uZz4obGV4aWNhbEdsb2JhbE9iamVjdCwg
dGhyb3dTY29wZSwgaW1wbC5zZXQoKSkpKTsKK30KKworRW5jb2RlZEpTVmFsdWUganNUZXN0TWFw
TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9uc1NldChKU0dsb2JhbE9iamVjdCogbGV4aWNhbEds
b2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCit7Cisg
ICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRp
b25zPjo6Z2V0PGpzVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnNTZXRHZXR0ZXIs
IENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpBc3NlcnQ+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0
aGlzVmFsdWUsICJzZXQiKTsKK30KKworc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE1hcExp
a2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnNTZXRTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGlj
YWxHbG9iYWxPYmplY3QsIEpTVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMmIHRo
aXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZs
ZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CisgICAg
YXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMTG9uZz4obGV4aWNhbEdsb2JhbE9iamVjdCwg
dmFsdWUpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOworICAg
IEF0dHJpYnV0ZVNldHRlcjo6Y2FsbChsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBb
Jl0geworICAgICAgICByZXR1cm4gaW1wbC5zZXRTZXQoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwor
ICAgIH0pOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIHNldEpTVGVzdE1hcExpa2VXaXRo
T3ZlcnJpZGRlbk9wZXJhdGlvbnNTZXQoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmpl
Y3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVl
KQoreworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVu
T3BlcmF0aW9ucz46OnNldDxzZXRKU1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25z
U2V0U2V0dGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUs
ICJzZXQiKTsKK30KKworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE1hcExpa2VXaXRoT3Zl
cnJpZGRlbk9wZXJhdGlvbnNTaXplR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFs
T2JqZWN0LCBKU1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zJiB0aGlzT2JqZWN0
KQoreworICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7Cisg
ICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgUkVMRUFT
RV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETEFueT4obGV4aWNhbEdsb2JhbE9iamVj
dCwgdGhyb3dTY29wZSwgZm9yd2FyZFNpemVUb01hcExpa2UobGV4aWNhbEdsb2JhbE9iamVjdCwg
dGhpc09iamVjdCkpKSk7Cit9CisKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdE1hcExpa2VXaXRoT3Zl
cnJpZGRlbk9wZXJhdGlvbnNTaXplKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0
LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK3sKKyAgICByZXR1cm4g
SURMQXR0cmlidXRlPEpTVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnM+OjpnZXQ8
anNUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9uc1NpemVHZXR0ZXI+KCpsZXhpY2Fs
R2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsICJzaXplIik7Cit9CisKK3N0YXRpYyBpbmxpbmUgSlND
OjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zUHJv
dG90eXBlRnVuY3Rpb25DbGVhckJvZHkoSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2Jh
bE9iamVjdCwgSlNDOjpDYWxsRnJhbWUqIGNhbGxGcmFtZSwgdHlwZW5hbWUgSURMT3BlcmF0aW9u
PEpTVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnM+OjpDbGFzc1BhcmFtZXRlciBj
YXN0ZWRUaGlzKQoreworICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2Jq
ZWN0KTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAg
ICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7
CisgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKKyAgICB0aHJvd1Njb3Bl
LnJlbGVhc2UoKTsKKyAgICBpbXBsLmNsZWFyKCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKK30KKworRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rl
c3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zUHJvdG90eXBlRnVuY3Rpb25DbGVhcihK
U0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUp
Cit7CisgICAgcmV0dXJuIElETE9wZXJhdGlvbjxKU1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5P
cGVyYXRpb25zPjo6Y2FsbDxqc1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zUHJv
dG90eXBlRnVuY3Rpb25DbGVhckJvZHk+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1l
LCAiY2xlYXIiKTsKK30KKworc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVz
dE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnNQcm90b3R5cGVGdW5jdGlvbkdldEJvZHko
SlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpDYWxsRnJhbWUq
IGNhbGxGcmFtZSwgdHlwZW5hbWUgSURMT3BlcmF0aW9uPEpTVGVzdE1hcExpa2VXaXRoT3ZlcnJp
ZGRlbk9wZXJhdGlvbnM+OjpDbGFzc1BhcmFtZXRlciBjYXN0ZWRUaGlzKQoreworICAgIGF1dG8m
IHZtID0gSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBhdXRvIHRocm93U2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29w
ZSk7CisgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFVOTElLRUxZKGNhbGxG
cmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Io
bGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRz
RXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOworICAgIEVuc3VyZVN0aWxsQWxpdmVTY29wZSBh
cmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApOworICAgIGF1dG8ga2V5
ID0gY29udmVydDxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDAu
dmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNW
YWx1ZSgpKTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgSlNWYWx1ZTo6ZW5j
b2RlKHRvSlM8SURMQW55Pihmb3J3YXJkR2V0VG9NYXBMaWtlKCpsZXhpY2FsR2xvYmFsT2JqZWN0
LCAqY2FsbEZyYW1lLCAqY2FzdGVkVGhpcywgV1RGTW92ZShrZXkpKSkpKTsKK30KKworRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRp
b25zUHJvdG90eXBlRnVuY3Rpb25HZXQoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmpl
Y3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQoreworICAgIHJldHVybiBJRExPcGVyYXRpb248SlNU
ZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucz46OmNhbGw8anNUZXN0TWFwTGlrZVdp
dGhPdmVycmlkZGVuT3BlcmF0aW9uc1Byb3RvdHlwZUZ1bmN0aW9uR2V0Qm9keT4oKmxleGljYWxH
bG9iYWxPYmplY3QsICpjYWxsRnJhbWUsICJnZXQiKTsKK30KKworc3RhdGljIGlubGluZSBKU0M6
OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnNQcm90
b3R5cGVGdW5jdGlvbkhhc0JvZHkoSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9i
amVjdCwgSlNDOjpDYWxsRnJhbWUqIGNhbGxGcmFtZSwgdHlwZW5hbWUgSURMT3BlcmF0aW9uPEpT
VGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnM+OjpDbGFzc1BhcmFtZXRlciBjYXN0
ZWRUaGlzKQoreworICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0
KTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBV
TlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7Cisg
ICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCisgICAgICAg
IHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3Jl
YXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOworICAgIEVu
c3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3Vt
ZW50KDApOworICAgIGF1dG8ga2V5ID0gY29udmVydDxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xv
YmFsT2JqZWN0LCBhcmd1bWVudDAudmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0
aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhy
b3dTY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKHRvSlM8SURMQW55Pihmb3J3YXJkSGFzVG9NYXBMaWtl
KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lLCAqY2FzdGVkVGhpcywgV1RGTW92ZShr
ZXkpKSkpKTsKK30KKworRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RNYXBMaWtl
V2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zUHJvdG90eXBlRnVuY3Rpb25IYXMoSlNHbG9iYWxPYmpl
Y3QqIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQoreworICAgIHJl
dHVybiBJRExPcGVyYXRpb248SlNUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucz46
OmNhbGw8anNUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9uc1Byb3RvdHlwZUZ1bmN0
aW9uSGFzQm9keT4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUsICJoYXMiKTsKK30K
Kworc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE1hcExpa2VXaXRoT3Zl
cnJpZGRlbk9wZXJhdGlvbnNQcm90b3R5cGVGdW5jdGlvbkVudHJpZXNCb2R5KEpTQzo6SlNHbG9i
YWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6Q2FsbEZyYW1lKiBjYWxsRnJhbWUs
IHR5cGVuYW1lIElETE9wZXJhdGlvbjxKU1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRp
b25zPjo6Q2xhc3NQYXJhbWV0ZXIgY2FzdGVkVGhpcykKK3sKKyAgICBhdXRvJiB2bSA9IEpTQzo6
Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIFVO
VVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3Bl
LCBKU1ZhbHVlOjplbmNvZGUodG9KUzxJRExBbnk+KGZvcndhcmRFbnRyaWVzVG9NYXBMaWtlKCps
ZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lLCAqY2FzdGVkVGhpcykpKSk7Cit9CisKK0Vu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3Bl
cmF0aW9uc1Byb3RvdHlwZUZ1bmN0aW9uRW50cmllcyhKU0dsb2JhbE9iamVjdCogbGV4aWNhbEds
b2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCit7CisgICAgcmV0dXJuIElETE9wZXJh
dGlvbjxKU1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zPjo6Y2FsbDxqc1Rlc3RN
YXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zUHJvdG90eXBlRnVuY3Rpb25FbnRyaWVzQm9k
eT4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUsICJlbnRyaWVzIik7Cit9CisKK3N0
YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRk
ZW5PcGVyYXRpb25zUHJvdG90eXBlRnVuY3Rpb25LZXlzQm9keShKU0M6OkpTR2xvYmFsT2JqZWN0
KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OkNhbGxGcmFtZSogY2FsbEZyYW1lLCB0eXBlbmFt
ZSBJRExPcGVyYXRpb248SlNUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucz46OkNs
YXNzUGFyYW1ldGVyIGNhc3RlZFRoaXMpCit7CisgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKGxl
eGljYWxHbG9iYWxPYmplY3QpOworICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBVTlVTRURfUEFS
QU0oY2FsbEZyYW1lKTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgSlNWYWx1
ZTo6ZW5jb2RlKHRvSlM8SURMQW55Pihmb3J3YXJkS2V5c1RvTWFwTGlrZSgqbGV4aWNhbEdsb2Jh
bE9iamVjdCwgKmNhbGxGcmFtZSwgKmNhc3RlZFRoaXMpKSkpOworfQorCitFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnNQcm90
b3R5cGVGdW5jdGlvbktleXMoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIENh
bGxGcmFtZSogY2FsbEZyYW1lKQoreworICAgIHJldHVybiBJRExPcGVyYXRpb248SlNUZXN0TWFw
TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucz46OmNhbGw8anNUZXN0TWFwTGlrZVdpdGhPdmVy
cmlkZGVuT3BlcmF0aW9uc1Byb3RvdHlwZUZ1bmN0aW9uS2V5c0JvZHk+KCpsZXhpY2FsR2xvYmFs
T2JqZWN0LCAqY2FsbEZyYW1lLCAia2V5cyIpOworfQorCitzdGF0aWMgaW5saW5lIEpTQzo6RW5j
b2RlZEpTVmFsdWUganNUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9uc1Byb3RvdHlw
ZUZ1bmN0aW9uVmFsdWVzQm9keShKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBKU0M6OkNhbGxGcmFtZSogY2FsbEZyYW1lLCB0eXBlbmFtZSBJRExPcGVyYXRpb248SlNU
ZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucz46OkNsYXNzUGFyYW1ldGVyIGNhc3Rl
ZFRoaXMpCit7CisgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3Qp
OworICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIFVO
VVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAg
ICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKHRvSlM8SURM
QW55Pihmb3J3YXJkVmFsdWVzVG9NYXBMaWtlKCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZy
YW1lLCAqY2FzdGVkVGhpcykpKSk7Cit9CisKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
anNUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9uc1Byb3RvdHlwZUZ1bmN0aW9uVmFs
dWVzKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxG
cmFtZSkKK3sKKyAgICByZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVzdE1hcExpa2VXaXRoT3ZlcnJp
ZGRlbk9wZXJhdGlvbnM+OjpjYWxsPGpzVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlv
bnNQcm90b3R5cGVGdW5jdGlvblZhbHVlc0JvZHk+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2Fs
bEZyYW1lLCAidmFsdWVzIik7Cit9CisKK3N0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zUHJvdG90eXBlRnVuY3Rpb25G
b3JFYWNoQm9keShKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6
OkNhbGxGcmFtZSogY2FsbEZyYW1lLCB0eXBlbmFtZSBJRExPcGVyYXRpb248SlNUZXN0TWFwTGlr
ZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucz46OkNsYXNzUGFyYW1ldGVyIGNhc3RlZFRoaXMpCit7
CisgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGF1
dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIFVOVVNFRF9QQVJB
TSh0aHJvd1Njb3BlKTsKKyAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoVU5M
SUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAxKSkKKyAgICAgICAgcmV0dXJuIHRo
cm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91
Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CisgICAgRW5zdXJlU3RpbGxB
bGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7Cisg
ICAgYXV0byBjYWxsYmFjayA9IGNvbnZlcnQ8SURMQW55PigqbGV4aWNhbEdsb2JhbE9iamVjdCwg
YXJndW1lbnQwLnZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwg
ZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsIEpT
VmFsdWU6OmVuY29kZSh0b0pTPElETEFueT4oZm9yd2FyZEZvckVhY2hUb01hcExpa2UoKmxleGlj
YWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUsICpjYXN0ZWRUaGlzLCBXVEZNb3ZlKGNhbGxiYWNr
KSkpKSk7Cit9CisKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0TWFwTGlrZVdp
dGhPdmVycmlkZGVuT3BlcmF0aW9uc1Byb3RvdHlwZUZ1bmN0aW9uRm9yRWFjaChKU0dsb2JhbE9i
amVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCit7CisgICAg
cmV0dXJuIElETE9wZXJhdGlvbjxKU1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25z
Pjo6Y2FsbDxqc1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zUHJvdG90eXBlRnVu
Y3Rpb25Gb3JFYWNoQm9keT4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUsICJmb3JF
YWNoIik7Cit9CisKK3N0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RNYXBM
aWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zUHJvdG90eXBlRnVuY3Rpb25EZWxldGVCb2R5KEpT
Qzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6Q2FsbEZyYW1lKiBj
YWxsRnJhbWUsIHR5cGVuYW1lIElETE9wZXJhdGlvbjxKU1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRk
ZW5PcGVyYXRpb25zPjo6Q2xhc3NQYXJhbWV0ZXIgY2FzdGVkVGhpcykKK3sKKyAgICBhdXRvJiB2
bSA9IEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgYXV0byB0aHJvd1Njb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUp
OworICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChVTkxJS0VMWShjYWxsRnJh
bWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQorICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxl
eGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vy
cm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKKyAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJn
dW1lbnQwID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKKyAgICBhdXRvIGtleSA9
IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLnZh
bHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFs
dWUoKSk7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsIEpTVmFsdWU6OmVuY29k
ZSh0b0pTPElETEFueT4oZm9yd2FyZERlbGV0ZVRvTWFwTGlrZSgqbGV4aWNhbEdsb2JhbE9iamVj
dCwgKmNhbGxGcmFtZSwgKmNhc3RlZFRoaXMsIFdURk1vdmUoa2V5KSkpKSk7Cit9CisKK0VuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0
aW9uc1Byb3RvdHlwZUZ1bmN0aW9uRGVsZXRlKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFs
T2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKK3sKKyAgICByZXR1cm4gSURMT3BlcmF0aW9u
PEpTVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnM+OjpjYWxsPGpzVGVzdE1hcExp
a2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnNQcm90b3R5cGVGdW5jdGlvbkRlbGV0ZUJvZHk+KCps
ZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lLCAiZGVsZXRlIik7Cit9CisKK0pTQzo6SXNv
U3Vic3BhY2UqIEpTVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnM6OnN1YnNwYWNl
Rm9ySW1wbChKU0M6OlZNJiB2bSkKK3sKKyAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19j
YXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7CisgICAgYXV0byYgc3BhY2VzID0g
Y2xpZW50RGF0YS5zdWJzcGFjZXMoKTsKKyAgICBpZiAoYXV0byogc3BhY2UgPSBzcGFjZXMubV9z
dWJzcGFjZUZvclRlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zLmdldCgpKQorICAg
ICAgICByZXR1cm4gc3BhY2U7CisgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxK
U0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVy
YXRpb25zPiB8fCAhSlNUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9uczo6bmVlZHNE
ZXN0cnVjdGlvbik7CisgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpT
RGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25z
PikKKyAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVu
T3BlcmF0aW9ucyA9IG1ha2VVbmlxdWU8SXNvU3Vic3BhY2U+IElTT19TVUJTUEFDRV9JTklUKHZt
LmhlYXAsIHZtLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZS5nZXQoKSwgSlNUZXN0TWFw
TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucyk7CisgICAgZWxzZQorICAgICAgICBzcGFjZXMu
bV9zdWJzcGFjZUZvclRlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zID0gbWFrZVVu
aXF1ZTxJc29TdWJzcGFjZT4gSVNPX1NVQlNQQUNFX0lOSVQodm0uaGVhcCwgdm0uY2VsbEhlYXBD
ZWxsVHlwZS5nZXQoKSwgSlNUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucyk7Cisg
ICAgYXV0byogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RNYXBMaWtlV2l0aE92ZXJy
aWRkZW5PcGVyYXRpb25zLmdldCgpOworSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJs
ZS1jb2RlIikKK0lHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQor
ICAgIGlmICgmSlNUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9uczo6dmlzaXRPdXRw
dXRDb25zdHJhaW50cyAhPSAmSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHMpCisg
ICAgICAgIGNsaWVudERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7
CitJR05PUkVfV0FSTklOR1NfRU5ECitJR05PUkVfV0FSTklOR1NfRU5ECisgICAgcmV0dXJuIHNw
YWNlOworfQorCit2b2lkIEpTVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnM6OmFu
YWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikKK3sKKyAgICBh
dXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJh
dGlvbnMqPihjZWxsKTsKKyAgICBhbmFseXplci5zZXRXcmFwcGVkT2JqZWN0Rm9yQ2VsbChjZWxs
LCAmdGhpc09iamVjdC0+d3JhcHBlZCgpKTsKKyAgICBpZiAodGhpc09iamVjdC0+c2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCgpKQorICAgICAgICBhbmFseXplci5zZXRMYWJlbEZvckNlbGwoY2VsbCwg
InVybCAiICsgdGhpc09iamVjdC0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT51cmwoKS5zdHJp
bmcoKSk7CisgICAgQmFzZTo6YW5hbHl6ZUhlYXAoY2VsbCwgYW5hbHl6ZXIpOworfQorCitib29s
IEpTVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnNPd25lcjo6aXNSZWFjaGFibGVG
cm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBT
bG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKK3sKKyAgICBVTlVTRURf
UEFSQU0oaGFuZGxlKTsKKyAgICBVTlVTRURfUEFSQU0odmlzaXRvcik7CisgICAgVU5VU0VEX1BB
UkFNKHJlYXNvbik7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIEpTVGVzdE1hcExpa2VX
aXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnNPd25lcjo6ZmluYWxpemUoSlNDOjpIYW5kbGU8SlNDOjpV
bmtub3duPiBoYW5kbGUsIHZvaWQqIGNvbnRleHQpCit7CisgICAgYXV0byoganNUZXN0TWFwTGlr
ZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucyA9IHN0YXRpY19jYXN0PEpTVGVzdE1hcExpa2VXaXRo
T3ZlcnJpZGRlbk9wZXJhdGlvbnMqPihoYW5kbGUuc2xvdCgpLT5hc0NlbGwoKSk7CisgICAgYXV0
byYgd29ybGQgPSAqc3RhdGljX2Nhc3Q8RE9NV3JhcHBlcldvcmxkKj4oY29udGV4dCk7CisgICAg
dW5jYWNoZVdyYXBwZXIod29ybGQsICZqc1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRp
b25zLT53cmFwcGVkKCksIGpzVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMpOwor
fQorCisjaWYgRU5BQkxFKEJJTkRJTkdfSU5URUdSSVRZKQorI2lmIFBMQVRGT1JNKFdJTikKKyNw
cmFnbWEgd2FybmluZyhkaXNhYmxlOiA0NDgzKQorZXh0ZXJuICJDIiB7IGV4dGVybiB2b2lkICgq
Y29uc3QgX19pZGVudGlmaWVyKCI/P183VGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlv
bnNAV2ViQ29yZUBANkJAIilbXSkoKTsgfQorI2Vsc2UKK2V4dGVybiAiQyIgeyBleHRlcm4gdm9p
ZCogX1pUVk43V2ViQ29yZTM1VGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnNFW107
IH0KKyNlbmRpZgorI2VuZGlmCisKK0pTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6
SlNHbG9iYWxPYmplY3QqLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWY8VGVz
dE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnM+JiYgaW1wbCkKK3sKKworI2lmIEVOQUJM
RShCSU5ESU5HX0lOVEVHUklUWSkKKyAgICBjb25zdCB2b2lkKiBhY3R1YWxWVGFibGVQb2ludGVy
ID0gZ2V0VlRhYmxlUG9pbnRlcihpbXBsLnB0cigpKTsKKyNpZiBQTEFURk9STShXSU4pCisgICAg
dm9pZCogZXhwZWN0ZWRWVGFibGVQb2ludGVyID0gX19pZGVudGlmaWVyKCI/P183VGVzdE1hcExp
a2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnNAV2ViQ29yZUBANkJAIik7CisjZWxzZQorICAgIHZv
aWQqIGV4cGVjdGVkVlRhYmxlUG9pbnRlciA9ICZfWlRWTjdXZWJDb3JlMzVUZXN0TWFwTGlrZVdp
dGhPdmVycmlkZGVuT3BlcmF0aW9uc0VbMl07CisjZW5kaWYKKworICAgIC8vIElmIHRoaXMgZmFp
bHMgVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMgZG9lcyBub3QgaGF2ZSBhIHZ0
YWJsZSwgc28geW91IG5lZWQgdG8gYWRkIHRoZQorICAgIC8vIEltcGxlbWVudGF0aW9uTGFja3NW
VGFibGUgYXR0cmlidXRlIHRvIHRoZSBpbnRlcmZhY2UgZGVmaW5pdGlvbgorICAgIHN0YXRpY19h
c3NlcnQoc3RkOjppc19wb2x5bW9ycGhpYzxUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0
aW9ucz46OnZhbHVlLCAiVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMgaXMgbm90
IHBvbHltb3JwaGljIik7CisKKyAgICAvLyBJZiB5b3UgaGl0IHRoaXMgYXNzZXJ0aW9uIHlvdSBl
aXRoZXIgaGF2ZSBhIHVzZSBhZnRlciBmcmVlIGJ1Zywgb3IKKyAgICAvLyBUZXN0TWFwTGlrZVdp
dGhPdmVycmlkZGVuT3BlcmF0aW9ucyBoYXMgc3ViY2xhc3Nlcy4gSWYgVGVzdE1hcExpa2VXaXRo
T3ZlcnJpZGRlbk9wZXJhdGlvbnMgaGFzIHN1YmNsYXNzZXMgdGhhdCBnZXQgcGFzc2VkCisgICAg
Ly8gdG8gdG9KUygpIHdlIGN1cnJlbnRseSByZXF1aXJlIFRlc3RNYXBMaWtlV2l0aE92ZXJyaWRk
ZW5PcGVyYXRpb25zIHlvdSB0byBvcHQgb3V0IG9mIGJpbmRpbmcgaGFyZGVuaW5nCisgICAgLy8g
YnkgYWRkaW5nIHRoZSBTa2lwVlRhYmxlVmFsaWRhdGlvbiBhdHRyaWJ1dGUgdG8gdGhlIGludGVy
ZmFjZSBJREwgZGVmaW5pdGlvbgorICAgIFJFTEVBU0VfQVNTRVJUKGFjdHVhbFZUYWJsZVBvaW50
ZXIgPT0gZXhwZWN0ZWRWVGFibGVQb2ludGVyKTsKKyNlbmRpZgorICAgIHJldHVybiBjcmVhdGVX
cmFwcGVyPFRlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zPihnbG9iYWxPYmplY3Qs
IFdURk1vdmUoaW1wbCkpOworfQorCitKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucyYgaW1wbCkKK3sKKyAgICByZXR1
cm4gd3JhcChsZXhpY2FsR2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QsIGltcGwpOworfQorCitU
ZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucyogSlNUZXN0TWFwTGlrZVdpdGhPdmVy
cmlkZGVuT3BlcmF0aW9uczo6dG9XcmFwcGVkKEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFs
dWUpCit7CisgICAgaWYgKGF1dG8qIHdyYXBwZXIgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE1hcExp
a2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMqPih2bSwgdmFsdWUpKQorICAgICAgICByZXR1cm4g
JndyYXBwZXItPndyYXBwZWQoKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworfQpJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE1hcExpa2VXaXRo
T3ZlcnJpZGRlbk9wZXJhdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9u
cy5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw5MyBAQAorLyoKKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2Vi
S2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgICAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRl
ZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKworICAgIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAg
ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAg
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjcHJhZ21hIG9u
Y2UKKworI2luY2x1ZGUgIkpTRE9NV3JhcHBlci5oIgorI2luY2x1ZGUgIlRlc3RNYXBMaWtlV2l0
aE92ZXJyaWRkZW5PcGVyYXRpb25zLmgiCisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSlNUZXN0TWFwTGlrZVdpdGhPdmVycmlk
ZGVuT3BlcmF0aW9ucyA6IHB1YmxpYyBKU0RPTVdyYXBwZXI8VGVzdE1hcExpa2VXaXRoT3ZlcnJp
ZGRlbk9wZXJhdGlvbnM+IHsKK3B1YmxpYzoKKyAgICB1c2luZyBCYXNlID0gSlNET01XcmFwcGVy
PFRlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zPjsKKyAgICBzdGF0aWMgSlNUZXN0
TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucyogY3JlYXRlKEpTQzo6U3RydWN0dXJlKiBz
dHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZjxUZXN0TWFwTGlr
ZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucz4mJiBpbXBsKQorICAgIHsKKyAgICAgICAgSlNUZXN0
TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucyogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6
OmFsbG9jYXRlQ2VsbDxKU1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zPihnbG9i
YWxPYmplY3QtPnZtKCkuaGVhcCkpIEpTVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlv
bnMoc3RydWN0dXJlLCAqZ2xvYmFsT2JqZWN0LCBXVEZNb3ZlKGltcGwpKTsKKyAgICAgICAgcHRy
LT5maW5pc2hDcmVhdGlvbihnbG9iYWxPYmplY3QtPnZtKCkpOworICAgICAgICByZXR1cm4gcHRy
OworICAgIH0KKworICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBjcmVhdGVQcm90b3R5cGUoSlND
OjpWTSYsIEpTRE9NR2xvYmFsT2JqZWN0Jik7CisgICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIHBy
b3RvdHlwZShKU0M6OlZNJiwgSlNET01HbG9iYWxPYmplY3QmKTsKKyAgICBzdGF0aWMgVGVzdE1h
cExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMqIHRvV3JhcHBlZChKU0M6OlZNJiwgSlNDOjpK
U1ZhbHVlKTsKKyAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQzo6SlNDZWxsKik7CisKKyAgICBE
RUNMQVJFX0lORk87CisKKyAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVy
ZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpT
VmFsdWUgcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpj
cmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2Jq
ZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCksIEpTQzo6Tm9uQXJyYXkpOworICAgIH0K
KworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgZ2V0Q29uc3RydWN0b3IoSlNDOjpWTSYsIGNvbnN0
IEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSwgSlNDOjpTdWJz
cGFjZUFjY2VzcyBtb2RlPiBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlND
OjpWTSYgdm0pCisgICAgeworICAgICAgICBpZiBjb25zdGV4cHIgKG1vZGUgPT0gSlNDOjpTdWJz
cGFjZUFjY2Vzczo6Q29uY3VycmVudGx5KQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgICAgIHJldHVybiBzdWJzcGFjZUZvckltcGwodm0pOworICAgIH0KKyAgICBzdGF0aWMgSlND
OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKTsKKyAgICBzdGF0aWMg
dm9pZCBhbmFseXplSGVhcChKU0NlbGwqLCBKU0M6OkhlYXBBbmFseXplciYpOworcHJvdGVjdGVk
OgorICAgIEpTVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMoSlNDOjpTdHJ1Y3R1
cmUqLCBKU0RPTUdsb2JhbE9iamVjdCYsIFJlZjxUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3Bl
cmF0aW9ucz4mJik7CisKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mKTsKK307CisK
K2NsYXNzIEpTVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnNPd25lciA6IHB1Ymxp
YyBKU0M6OldlYWtIYW5kbGVPd25lciB7CitwdWJsaWM6CisgICAgdmlydHVhbCBib29sIGlzUmVh
Y2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNv
bnRleHQsIEpTQzo6U2xvdFZpc2l0b3ImLCBjb25zdCBjaGFyKiopOworICAgIHZpcnR1YWwgdm9p
ZCBmaW5hbGl6ZShKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0KTsKK307
CisKK2lubGluZSBKU0M6OldlYWtIYW5kbGVPd25lciogd3JhcHBlck93bmVyKERPTVdyYXBwZXJX
b3JsZCYsIFRlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zKikKK3sKKyAgICBzdGF0
aWMgTmV2ZXJEZXN0cm95ZWQ8SlNUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9uc093
bmVyPiBvd25lcjsKKyAgICByZXR1cm4gJm93bmVyLmdldCgpOworfQorCitpbmxpbmUgdm9pZCog
d3JhcHBlcktleShUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucyogd3JhcHBhYmxl
T2JqZWN0KQoreworICAgIHJldHVybiB3cmFwcGFibGVPYmplY3Q7Cit9CisKK0pTQzo6SlNWYWx1
ZSB0b0pTKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0RPTUdsb2JhbE9iamVjdCosIFRlc3RNYXBM
aWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zJik7CitpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMo
SlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNET01HbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMqIGlt
cGwpIHsgcmV0dXJuIGltcGwgPyB0b0pTKGxleGljYWxHbG9iYWxPYmplY3QsIGdsb2JhbE9iamVj
dCwgKmltcGwpIDogSlNDOjpqc051bGwoKTsgfQorSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0
ZWQoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTRE9NR2xvYmFsT2JqZWN0KiwgUmVmPFRlc3RNYXBM
aWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zPiYmKTsKK2lubGluZSBKU0M6OkpTVmFsdWUgdG9K
U05ld2x5Q3JlYXRlZChKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBK
U0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWZQdHI8VGVzdE1hcExpa2VXaXRoT3Zl
cnJpZGRlbk9wZXJhdGlvbnM+JiYgaW1wbCkgeyByZXR1cm4gaW1wbCA/IHRvSlNOZXdseUNyZWF0
ZWQobGV4aWNhbEdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LCBpbXBsLnJlbGVhc2VOb25OdWxs
KCkpIDogSlNDOjpqc051bGwoKTsgfQorCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0RPTVdyYXBwZXJD
b252ZXJ0ZXJUcmFpdHM8VGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnM+IHsKKyAg
ICB1c2luZyBXcmFwcGVyQ2xhc3MgPSBKU1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRp
b25zOworICAgIHVzaW5nIFRvV3JhcHBlZFJldHVyblR5cGUgPSBUZXN0TWFwTGlrZVdpdGhPdmVy
cmlkZGVuT3BlcmF0aW9ucyo7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2V0TGlrZVdpdGhP
dmVycmlkZGVuT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlv
bnMuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDQ2MSBAQAorLyoKKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0
aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgICAgVGhpcyBmaWxlIGhhcyBiZWVuIGdl
bmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKworICAgIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAg
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3Bl
cmF0aW9ucy5oIgorCisjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCisjaW5jbHVkZSAiRE9N
SXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiSlNET01BdHRyaWJ1dGUuaCIKKyNpbmNsdWRlICJK
U0RPTUJpbmRpbmcuaCIKKyNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJs
ZS5oIgorI2luY2x1ZGUgIkpTRE9NQ29udmVydEFueS5oIgorI2luY2x1ZGUgIkpTRE9NQ29udmVy
dE51bWJlcnMuaCIKKyNpbmNsdWRlICJKU0RPTUNvbnZlcnRTdHJpbmdzLmgiCisjaW5jbHVkZSAi
SlNET01FeGNlcHRpb25IYW5kbGluZy5oIgorI2luY2x1ZGUgIkpTRE9NT3BlcmF0aW9uLmgiCisj
aW5jbHVkZSAiSlNET01TZXRMaWtlLmgiCisjaW5jbHVkZSAiSlNET01XcmFwcGVyQ2FjaGUuaCIK
KyNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCisjaW5jbHVkZSAiV2ViQ29yZUpT
Q2xpZW50RGF0YS5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0J1aWx0aW5OYW1lcy5oPgor
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0Z1bmN0aW9uUHJvdG90eXBlLmg+CisjaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvSGVhcEFuYWx5emVyLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
SlNDSW5saW5lcy5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTRGVzdHJ1Y3RpYmxlT2Jq
ZWN0SGVhcENlbGxUeXBlLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvU3Vic3BhY2VJbmxp
bmVzLmg+CisjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgorI2luY2x1ZGUgPHd0Zi9Qb2ludGVyUHJl
cGFyYXRpb25zLmg+CisjaW5jbHVkZSA8d3RmL1VSTC5oPgorCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKK3VzaW5nIG5hbWVzcGFjZSBKU0M7CisKKy8vIEZ1bmN0aW9ucworCitKU0M6OkVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9u
c1Byb3RvdHlwZUZ1bmN0aW9uRGVsZXRlKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkNhbGxG
cmFtZSopOworSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdFNldExpa2VX
aXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnNQcm90b3R5cGVGdW5jdGlvbkhhcyhKU0M6OkpTR2xvYmFs
T2JqZWN0KiwgSlNDOjpDYWxsRnJhbWUqKTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBqc1Rlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zUHJvdG90eXBlRnVuY3Rp
b25FbnRyaWVzKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkNhbGxGcmFtZSopOworSlNDOjpF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9w
ZXJhdGlvbnNQcm90b3R5cGVGdW5jdGlvbktleXMoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6
Q2FsbEZyYW1lKik7CitKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0U2V0
TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9uc1Byb3RvdHlwZUZ1bmN0aW9uVmFsdWVzKEpTQzo6
SlNHbG9iYWxPYmplY3QqLCBKU0M6OkNhbGxGcmFtZSopOworSlNDOjpFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGpzVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnNQcm90b3R5
cGVGdW5jdGlvbkZvckVhY2goSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6Q2FsbEZyYW1lKik7
CitKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0U2V0TGlrZVdpdGhPdmVy
cmlkZGVuT3BlcmF0aW9uc1Byb3RvdHlwZUZ1bmN0aW9uQ2xlYXIoSlNDOjpKU0dsb2JhbE9iamVj
dCosIEpTQzo6Q2FsbEZyYW1lKik7CisKKy8vIEF0dHJpYnV0ZXMKKworSlNDOjpFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zQ29uc3RydWN0b3IoSlND
OjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1l
KTsKK2Jvb2wgc2V0SlNUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9uc0NvbnN0cnVj
dG9yKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29k
ZWRKU1ZhbHVlKTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0U2V0TGlrZVdpdGhPdmVycmlk
ZGVuT3BlcmF0aW9uc0FkZChKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1
ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RTZXRMaWtlV2l0aE92ZXJyaWRk
ZW5PcGVyYXRpb25zQWRkKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVl
LCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0U2V0TGlr
ZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9uc1NpemUoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6
RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKKworY2xhc3MgSlNUZXN0U2V0TGlr
ZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9uc1Byb3RvdHlwZSBmaW5hbCA6IHB1YmxpYyBKU0M6OkpT
Tm9uRmluYWxPYmplY3QgeworcHVibGljOgorICAgIHVzaW5nIEJhc2UgPSBKU0M6OkpTTm9uRmlu
YWxPYmplY3Q7CisgICAgc3RhdGljIEpTVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlv
bnNQcm90b3R5cGUqIGNyZWF0ZShKU0M6OlZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICB7CisgICAgICAgIEpTVGVz
dFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnNQcm90b3R5cGUqIHB0ciA9IG5ldyAoTm90
TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0
aW9uc1Byb3RvdHlwZT4odm0uaGVhcCkpIEpTVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJh
dGlvbnNQcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKTsKKyAgICAgICAgcHRy
LT5maW5pc2hDcmVhdGlvbih2bSk7CisgICAgICAgIHJldHVybiBwdHI7CisgICAgfQorCisgICAg
REVDTEFSRV9JTkZPOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBKU0M6OlN1YnNw
YWNlQWNjZXNzPgorICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6
OlZNJiB2bSkKKyAgICB7CisgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJB
QkxFKEpTVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnNQcm90b3R5cGUsIEJhc2Up
OworICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3BhY2U7CisgICAgfQorICAgIHN0YXRp
YyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCisgICAgewor
ICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBw
cm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyks
IGluZm8oKSk7CisgICAgfQorCitwcml2YXRlOgorICAgIEpTVGVzdFNldExpa2VXaXRoT3ZlcnJp
ZGRlbk9wZXJhdGlvbnNQcm90b3R5cGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3Qq
LCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgICAgICA6IEpTQzo6SlNOb25GaW5hbE9i
amVjdCh2bSwgc3RydWN0dXJlKQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIGZpbmlzaENyZWF0
aW9uKEpTQzo6Vk0mKTsKK307CitTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShK
U1Rlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zUHJvdG90eXBlLCBKU1Rlc3RTZXRM
aWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zUHJvdG90eXBlOjpCYXNlKTsKKwordXNpbmcgSlNU
ZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9uc0NvbnN0cnVjdG9yID0gSlNET01Db25z
dHJ1Y3Rvck5vdENvbnN0cnVjdGFibGU8SlNUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0
aW9ucz47CisKK3RlbXBsYXRlPD4gSlNWYWx1ZSBKU1Rlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5P
cGVyYXRpb25zQ29uc3RydWN0b3I6OnByb3RvdHlwZUZvclN0cnVjdHVyZShKU0M6OlZNJiB2bSwg
Y29uc3QgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKK3sKKyAgICBVTlVTRURfUEFS
QU0odm0pOworICAgIHJldHVybiBnbG9iYWxPYmplY3QuZnVuY3Rpb25Qcm90b3R5cGUoKTsKK30K
KwordGVtcGxhdGU8PiB2b2lkIEpTVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnND
b25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMoVk0mIHZtLCBKU0RPTUdsb2JhbE9iamVj
dCYgZ2xvYmFsT2JqZWN0KQoreworICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+
cHJvdG90eXBlLCBKU1Rlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zOjpwcm90b3R5
cGUodm0sIGdsb2JhbE9iamVjdCksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnREZWxldGUg
fCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1
dGU6OkRvbnRFbnVtKTsKKyAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPm5hbWUs
IGpzTm9udHJpdmlhbFN0cmluZyh2bSwgIlRlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRp
b25zIl9zKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5
QXR0cmlidXRlOjpEb250RW51bSk7CisgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVz
LT5sZW5ndGgsIGpzTnVtYmVyKDApLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8
IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKK30KKwordGVtcGxhdGU8PiBjb25z
dCBDbGFzc0luZm8gSlNUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9uc0NvbnN0cnVj
dG9yOjpzX2luZm8gPSB7ICJUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucyIsICZC
YXNlOjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNUZXN0
U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9uc0NvbnN0cnVjdG9yKSB9OworCisvKiBIYXNo
IHRhYmxlIGZvciBwcm90b3R5cGUgKi8KKworc3RhdGljIGNvbnN0IEhhc2hUYWJsZVZhbHVlIEpT
VGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnNQcm90b3R5cGVUYWJsZVZhbHVlc1td
ID0KK3sKKyAgICB7ICJjb25zdHJ1Y3RvciIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlBy
b3BlcnR5QXR0cmlidXRlOjpEb250RW51bSksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0
aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0U2V0TGlrZVdpdGhPdmVy
cmlkZGVuT3BlcmF0aW9uc0NvbnN0cnVjdG9yKSwgKGludHB0cl90KSBzdGF0aWNfY2FzdDxQdXRQ
cm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYz4oc2V0SlNUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVu
T3BlcmF0aW9uc0NvbnN0cnVjdG9yKSB9IH0sCisgICAgeyAiYWRkIiwgc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkN1c3RvbUFjY2Vzc29yIHwgSlNDOjpQcm9w
ZXJ0eUF0dHJpYnV0ZTo6RE9NQXR0cmlidXRlKSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0
YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3RTZXRMaWtlV2l0aE92
ZXJyaWRkZW5PcGVyYXRpb25zQWRkKSwgKGludHB0cl90KSBzdGF0aWNfY2FzdDxQdXRQcm9wZXJ0
eVNsb3Q6OlB1dFZhbHVlRnVuYz4oc2V0SlNUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0
aW9uc0FkZCkgfSB9LAorICAgIHsgInNpemUiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNDOjpQ
cm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0gfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFk
T25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkN1c3RvbUFjY2Vzc29yKSwgTm9JbnRyaW5z
aWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihq
c1Rlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zU2l6ZSksIChpbnRwdHJfdCkgc3Rh
dGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmM+KDApIH0gfSwKKyAgICB7ICJk
ZWxldGUiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RnVu
Y3Rpb24pLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UmF3TmF0aXZlRnVu
Y3Rpb24+KGpzVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnNQcm90b3R5cGVGdW5j
dGlvbkRlbGV0ZSksIChpbnRwdHJfdCkgKDApIH0gfSwKKyAgICB7ICJoYXMiLCBzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0gfCBKU0M6OlByb3Bl
cnR5QXR0cmlidXRlOjpGdW5jdGlvbiksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNf
Y2FzdDxSYXdOYXRpdmVGdW5jdGlvbj4oanNUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0
aW9uc1Byb3RvdHlwZUZ1bmN0aW9uSGFzKSwgKGludHB0cl90KSAoMSkgfSB9LAorICAgIHsgImVu
dHJpZXMiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9u
dEVudW0gfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpGdW5jdGlvbiksIE5vSW50cmluc2ljLCB7
IChpbnRwdHJfdClzdGF0aWNfY2FzdDxSYXdOYXRpdmVGdW5jdGlvbj4oanNUZXN0U2V0TGlrZVdp
dGhPdmVycmlkZGVuT3BlcmF0aW9uc1Byb3RvdHlwZUZ1bmN0aW9uRW50cmllcyksIChpbnRwdHJf
dCkgKDApIH0gfSwKKyAgICB7ICJrZXlzIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJv
cGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtIHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RnVuY3Rp
b24pLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UmF3TmF0aXZlRnVuY3Rp
b24+KGpzVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnNQcm90b3R5cGVGdW5jdGlv
bktleXMpLCAoaW50cHRyX3QpICgwKSB9IH0sCisgICAgeyAidmFsdWVzIiwgc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtIHwgSlNDOjpQcm9wZXJ0
eUF0dHJpYnV0ZTo6RnVuY3Rpb24pLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nh
c3Q8UmF3TmF0aXZlRnVuY3Rpb24+KGpzVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlv
bnNQcm90b3R5cGVGdW5jdGlvblZhbHVlcyksIChpbnRwdHJfdCkgKDApIH0gfSwKKyAgICB7ICJm
b3JFYWNoIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRv
bnRFbnVtIHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RnVuY3Rpb24pLCBOb0ludHJpbnNpYywg
eyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UmF3TmF0aXZlRnVuY3Rpb24+KGpzVGVzdFNldExpa2VX
aXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnNQcm90b3R5cGVGdW5jdGlvbkZvckVhY2gpLCAoaW50cHRy
X3QpICgxKSB9IH0sCisgICAgeyAiY2xlYXIiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNDOjpQ
cm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0gfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpGdW5j
dGlvbiksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxSYXdOYXRpdmVGdW5j
dGlvbj4oanNUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9uc1Byb3RvdHlwZUZ1bmN0
aW9uQ2xlYXIpLCAoaW50cHRyX3QpICgwKSB9IH0sCit9OworCitjb25zdCBDbGFzc0luZm8gSlNU
ZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9uc1Byb3RvdHlwZTo6c19pbmZvID0geyAi
VGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMiLCAmQmFzZTo6c19pbmZvLCBudWxs
cHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTVGVzdFNldExpa2VXaXRoT3ZlcnJp
ZGRlbk9wZXJhdGlvbnNQcm90b3R5cGUpIH07CisKK3ZvaWQgSlNUZXN0U2V0TGlrZVdpdGhPdmVy
cmlkZGVuT3BlcmF0aW9uc1Byb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQoreworICAg
IEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICByZWlmeVN0YXRpY1Byb3BlcnRpZXModm0s
IEpTVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnM6OmluZm8oKSwgSlNUZXN0U2V0
TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9uc1Byb3RvdHlwZVRhYmxlVmFsdWVzLCAqdGhpcyk7
CisgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5pdGVyYXRvclN5bWJvbCwgZ2V0
RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS5lbnRyaWVzUHVibGlj
TmFtZSgpKSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRv
bnRFbnVtKSk7CisgICAgSlNDX1RPX1NUUklOR19UQUdfV0lUSE9VVF9UUkFOU0lUSU9OKCk7Cit9
CisKK2NvbnN0IENsYXNzSW5mbyBKU1Rlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25z
OjpzX2luZm8gPSB7ICJUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucyIsICZCYXNl
OjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNUZXN0U2V0
TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucykgfTsKKworSlNUZXN0U2V0TGlrZVdpdGhPdmVy
cmlkZGVuT3BlcmF0aW9uczo6SlNUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucyhT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgUmVm
PFRlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zPiYmIGltcGwpCisgICAgOiBKU0RP
TVdyYXBwZXI8VGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnM+KHN0cnVjdHVyZSwg
Z2xvYmFsT2JqZWN0LCBXVEZNb3ZlKGltcGwpKQoreworfQorCit2b2lkIEpTVGVzdFNldExpa2VX
aXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnM6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKK3sKKyAgICBC
YXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CisgICAgQVNTRVJUKGluaGVyaXRzKHZtLCBpbmZvKCkp
KTsKKworICAgIHN0YXRpY19hc3NlcnQoIXN0ZDo6aXNfYmFzZV9vZjxBY3RpdmVET01PYmplY3Qs
IFRlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zPjo6dmFsdWUsICJJbnRlcmZhY2Ug
aXMgbm90IG1hcmtlZCBhcyBbQWN0aXZlRE9NT2JqZWN0XSBldmVuIHRob3VnaCBpbXBsZW1lbnRh
dGlvbiBjbGFzcyBzdWJjbGFzc2VzIEFjdGl2ZURPTU9iamVjdC4iKTsKKworfQorCitKU09iamVj
dCogSlNUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9uczo6Y3JlYXRlUHJvdG90eXBl
KFZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKK3sKKyAgICByZXR1cm4g
SlNUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9uc1Byb3RvdHlwZTo6Y3JlYXRlKHZt
LCAmZ2xvYmFsT2JqZWN0LCBKU1Rlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zUHJv
dG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUodm0sICZnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC5v
YmplY3RQcm90b3R5cGUoKSkpOworfQorCitKU09iamVjdCogSlNUZXN0U2V0TGlrZVdpdGhPdmVy
cmlkZGVuT3BlcmF0aW9uczo6cHJvdG90eXBlKFZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QmIGds
b2JhbE9iamVjdCkKK3sKKyAgICByZXR1cm4gZ2V0RE9NUHJvdG90eXBlPEpTVGVzdFNldExpa2VX
aXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnM+KHZtLCBnbG9iYWxPYmplY3QpOworfQorCitKU1ZhbHVl
IEpTVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnM6OmdldENvbnN0cnVjdG9yKFZN
JiB2bSwgY29uc3QgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKK3sKKyAgICByZXR1cm4g
Z2V0RE9NQ29uc3RydWN0b3I8SlNUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9uc0Nv
bnN0cnVjdG9yPih2bSwgKmpzQ2FzdDxjb25zdCBKU0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9i
amVjdCkpOworfQorCit2b2lkIEpTVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnM6
OmRlc3Ryb3koSlNDOjpKU0NlbGwqIGNlbGwpCit7CisgICAgSlNUZXN0U2V0TGlrZVdpdGhPdmVy
cmlkZGVuT3BlcmF0aW9ucyogdGhpc09iamVjdCA9IHN0YXRpY19jYXN0PEpTVGVzdFNldExpa2VX
aXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMqPihjZWxsKTsKKyAgICB0aGlzT2JqZWN0LT5KU1Rlc3RT
ZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zOjp+SlNUZXN0U2V0TGlrZVdpdGhPdmVycmlk
ZGVuT3BlcmF0aW9ucygpOworfQorCit0ZW1wbGF0ZTw+IGlubGluZSBKU1Rlc3RTZXRMaWtlV2l0
aE92ZXJyaWRkZW5PcGVyYXRpb25zKiBJRExBdHRyaWJ1dGU8SlNUZXN0U2V0TGlrZVdpdGhPdmVy
cmlkZGVuT3BlcmF0aW9ucz46OmNhc3QoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmpl
Y3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSkKK3sKKyAgICByZXR1cm4ganNEeW5hbWljQ2Fz
dDxKU1Rlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zKj4oSlNDOjpnZXRWTSgmbGV4
aWNhbEdsb2JhbE9iamVjdCksIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKK30KKwordGVt
cGxhdGU8PiBpbmxpbmUgSlNUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucyogSURM
T3BlcmF0aW9uPEpTVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnM+OjpjYXN0KEpT
R2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUmIGNhbGxGcmFtZSkK
K3sKKyAgICByZXR1cm4ganNEeW5hbWljQ2FzdDxKU1Rlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5P
cGVyYXRpb25zKj4oSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCksIGNhbGxGcmFtZS50
aGlzVmFsdWUoKSk7Cit9CisKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdFNldExpa2VXaXRoT3ZlcnJp
ZGRlbk9wZXJhdGlvbnNDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9i
amVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCit7CisgICAgVk0m
IHZtID0gSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBhdXRvIHRocm93U2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBhdXRvKiBwcm90b3R5cGUgPSBqc0R5
bmFtaWNDYXN0PEpTVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnNQcm90b3R5cGUq
Pih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAgIGlmIChVTkxJS0VMWSghcHJv
dG90eXBlKSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IobGV4aWNhbEdsb2JhbE9i
amVjdCwgdGhyb3dTY29wZSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Rlc3RTZXRM
aWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zOjpnZXRDb25zdHJ1Y3RvcihKU0M6OmdldFZNKGxl
eGljYWxHbG9iYWxPYmplY3QpLCBwcm90b3R5cGUtPmdsb2JhbE9iamVjdCgpKSk7Cit9CisKK2Jv
b2wgc2V0SlNUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9uc0NvbnN0cnVjdG9yKEpT
R2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFs
dWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK3sKKyAgICBWTSYgdm0gPSBKU0M6Omdl
dFZNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOworICAgIGF1dG8qIHByb3RvdHlwZSA9IGpzRHluYW1pY0Nhc3Q8SlNU
ZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9uc1Byb3RvdHlwZSo+KHZtLCBKU1ZhbHVl
OjpkZWNvZGUodGhpc1ZhbHVlKSk7CisgICAgaWYgKFVOTElLRUxZKCFwcm90b3R5cGUpKSB7Cisg
ICAgICAgIHRocm93Vk1UeXBlRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSk7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQt
aW4gY29uc3RydWN0b3IKKyAgICByZXR1cm4gcHJvdG90eXBlLT5wdXREaXJlY3Qodm0sIHZtLnBy
b3BlcnR5TmFtZXMtPmNvbnN0cnVjdG9yLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSk7
Cit9CisKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5P
cGVyYXRpb25zQWRkR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBK
U1Rlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zJiB0aGlzT2JqZWN0KQoreworICAg
IGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgYXV0byB0
aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgYXV0byYgaW1wbCA9IHRo
aXNPYmplY3Qud3JhcHBlZCgpOworICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAo
dG9KUzxJRExMb25nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLmFkZCgp
KSkpOworfQorCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVy
YXRpb25zQWRkKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNW
YWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK3sKKyAgICByZXR1cm4gSURMQXR0cmlidXRl
PEpTVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnM+OjpnZXQ8anNUZXN0U2V0TGlr
ZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9uc0FkZEdldHRlciwgQ2FzdGVkVGhpc0Vycm9yQmVoYXZp
b3I6OkFzc2VydD4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgImFkZCIpOworfQor
CitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0
aW9uc0FkZFNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0
U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucyYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1
ZSkKK3sKKyAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwor
ICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGF1dG8m
IGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKKyAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29u
dmVydDxJRExMb25nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CisgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CisgICAgQXR0cmlidXRlU2V0dGVyOjpjYWxs
KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIFsmXSB7CisgICAgICAgIHJldHVybiBp
bXBsLnNldEFkZChXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CisgICAgfSk7CisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK2Jvb2wgc2V0SlNUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9uc0Fk
ZChKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhp
c1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCit7CisgICAgcmV0dXJuIElETEF0
dHJpYnV0ZTxKU1Rlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zPjo6c2V0PHNldEpT
VGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnNBZGRTZXR0ZXI+KCpsZXhpY2FsR2xv
YmFsT2JqZWN0LCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgImFkZCIpOworfQorCitzdGF0aWMg
aW5saW5lIEpTVmFsdWUganNUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9uc1NpemVH
ZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdFNldExpa2VX
aXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMmIHRoaXNPYmplY3QpCit7CisgICAgYXV0byYgdm0gPSBK
U0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29w
ZSwgKHRvSlM8SURMQW55PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBmb3J3YXJk
U2l6ZVRvU2V0TGlrZShsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzT2JqZWN0KSkpKTsKK30KKwor
RW5jb2RlZEpTVmFsdWUganNUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9uc1NpemUo
SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNW
YWx1ZSwgUHJvcGVydHlOYW1lKQoreworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0U2V0
TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucz46OmdldDxqc1Rlc3RTZXRMaWtlV2l0aE92ZXJy
aWRkZW5PcGVyYXRpb25zU2l6ZUdldHRlcj4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1
ZSwgInNpemUiKTsKK30KKworc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVz
dFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnNQcm90b3R5cGVGdW5jdGlvbkRlbGV0ZUJv
ZHkoSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpDYWxsRnJh
bWUqIGNhbGxGcmFtZSwgdHlwZW5hbWUgSURMT3BlcmF0aW9uPEpTVGVzdFNldExpa2VXaXRoT3Zl
cnJpZGRlbk9wZXJhdGlvbnM+OjpDbGFzc1BhcmFtZXRlciBjYXN0ZWRUaGlzKQoreworICAgIGF1
dG8mIHZtID0gSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dT
Y29wZSk7CisgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgYXV0byYgaW1wbCA9IGNh
c3RlZFRoaXMtPndyYXBwZWQoKTsKKyAgICB0aHJvd1Njb3BlLnJlbGVhc2UoKTsKKyAgICBpbXBs
LmRlbGV0ZSgpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Cit9
CisKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0U2V0TGlrZVdpdGhPdmVycmlk
ZGVuT3BlcmF0aW9uc1Byb3RvdHlwZUZ1bmN0aW9uRGVsZXRlKEpTR2xvYmFsT2JqZWN0KiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKK3sKKyAgICByZXR1cm4gSURM
T3BlcmF0aW9uPEpTVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnM+OjpjYWxsPGpz
VGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnNQcm90b3R5cGVGdW5jdGlvbkRlbGV0
ZUJvZHk+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lLCAiZGVsZXRlIik7Cit9CisK
K3N0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXRMaWtlV2l0aE92ZXJy
aWRkZW5PcGVyYXRpb25zUHJvdG90eXBlRnVuY3Rpb25IYXNCb2R5KEpTQzo6SlNHbG9iYWxPYmpl
Y3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6Q2FsbEZyYW1lKiBjYWxsRnJhbWUsIHR5cGVu
YW1lIElETE9wZXJhdGlvbjxKU1Rlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zPjo6
Q2xhc3NQYXJhbWV0ZXIgY2FzdGVkVGhpcykKK3sKKyAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0o
bGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIFVOVVNFRF9Q
QVJBTShjYWxsRnJhbWUpOworICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291
bnQoKSA8IDEpKQorICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmpl
Y3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9i
YWxPYmplY3QpKTsKKyAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0gY2FsbEZy
YW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKKyAgICBhdXRvIGtleSA9IGNvbnZlcnQ8SURMRE9N
U3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVlKCkpOworICAgIFJF
VFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVM
RUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsIEpTVmFsdWU6OmVuY29kZSh0b0pTPElETEFueT4o
Zm9yd2FyZEhhc1RvU2V0TGlrZSgqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSwgKmNh
c3RlZFRoaXMsIFdURk1vdmUoa2V5KSkpKSk7Cit9CisKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwganNUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9uc1Byb3RvdHlwZUZ1bmN0
aW9uSGFzKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNh
bGxGcmFtZSkKK3sKKyAgICByZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVzdFNldExpa2VXaXRoT3Zl
cnJpZGRlbk9wZXJhdGlvbnM+OjpjYWxsPGpzVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJh
dGlvbnNQcm90b3R5cGVGdW5jdGlvbkhhc0JvZHk+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2Fs
bEZyYW1lLCAiaGFzIik7Cit9CisKK3N0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zUHJvdG90eXBlRnVuY3Rpb25FbnRy
aWVzQm9keShKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OkNh
bGxGcmFtZSogY2FsbEZyYW1lLCB0eXBlbmFtZSBJRExPcGVyYXRpb248SlNUZXN0U2V0TGlrZVdp
dGhPdmVycmlkZGVuT3BlcmF0aW9ucz46OkNsYXNzUGFyYW1ldGVyIGNhc3RlZFRoaXMpCit7Cisg
ICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGF1dG8g
dGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIFVOVVNFRF9QQVJBTSh0
aHJvd1Njb3BlKTsKKyAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBSRUxFQVNFX0FO
RF9SRVRVUk4odGhyb3dTY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKHRvSlM8SURMQW55Pihmb3J3YXJk
RW50cmllc1RvU2V0TGlrZSgqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSwgKmNhc3Rl
ZFRoaXMpKSkpOworfQorCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdFNldExp
a2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnNQcm90b3R5cGVGdW5jdGlvbkVudHJpZXMoSlNHbG9i
YWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQorewor
ICAgIHJldHVybiBJRExPcGVyYXRpb248SlNUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0
aW9ucz46OmNhbGw8anNUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9uc1Byb3RvdHlw
ZUZ1bmN0aW9uRW50cmllc0JvZHk+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lLCAi
ZW50cmllcyIpOworfQorCitzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0
U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9uc1Byb3RvdHlwZUZ1bmN0aW9uS2V5c0JvZHko
SlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpDYWxsRnJhbWUq
IGNhbGxGcmFtZSwgdHlwZW5hbWUgSURMT3BlcmF0aW9uPEpTVGVzdFNldExpa2VXaXRoT3ZlcnJp
ZGRlbk9wZXJhdGlvbnM+OjpDbGFzc1BhcmFtZXRlciBjYXN0ZWRUaGlzKQoreworICAgIGF1dG8m
IHZtID0gSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBhdXRvIHRocm93U2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29w
ZSk7CisgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJO
KHRocm93U2NvcGUsIEpTVmFsdWU6OmVuY29kZSh0b0pTPElETEFueT4oZm9yd2FyZEtleXNUb1Nl
dExpa2UoKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUsICpjYXN0ZWRUaGlzKSkpKTsK
K30KKworRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RTZXRMaWtlV2l0aE92ZXJy
aWRkZW5PcGVyYXRpb25zUHJvdG90eXBlRnVuY3Rpb25LZXlzKEpTR2xvYmFsT2JqZWN0KiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKK3sKKyAgICByZXR1cm4gSURM
T3BlcmF0aW9uPEpTVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnM+OjpjYWxsPGpz
VGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnNQcm90b3R5cGVGdW5jdGlvbktleXNC
b2R5PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSwgImtleXMiKTsKK30KKworc3Rh
dGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRl
bk9wZXJhdGlvbnNQcm90b3R5cGVGdW5jdGlvblZhbHVlc0JvZHkoSlNDOjpKU0dsb2JhbE9iamVj
dCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpDYWxsRnJhbWUqIGNhbGxGcmFtZSwgdHlwZW5h
bWUgSURMT3BlcmF0aW9uPEpTVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnM+OjpD
bGFzc1BhcmFtZXRlciBjYXN0ZWRUaGlzKQoreworICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTShs
ZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgVU5VU0VEX1BB
UkFNKGNhbGxGcmFtZSk7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsIEpTVmFs
dWU6OmVuY29kZSh0b0pTPElETEFueT4oZm9yd2FyZFZhbHVlc1RvU2V0TGlrZSgqbGV4aWNhbEds
b2JhbE9iamVjdCwgKmNhbGxGcmFtZSwgKmNhc3RlZFRoaXMpKSkpOworfQorCitFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnNQ
cm90b3R5cGVGdW5jdGlvblZhbHVlcyhKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVj
dCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCit7CisgICAgcmV0dXJuIElETE9wZXJhdGlvbjxKU1Rl
c3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zPjo6Y2FsbDxqc1Rlc3RTZXRMaWtlV2l0
aE92ZXJyaWRkZW5PcGVyYXRpb25zUHJvdG90eXBlRnVuY3Rpb25WYWx1ZXNCb2R5PigqbGV4aWNh
bEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSwgInZhbHVlcyIpOworfQorCitzdGF0aWMgaW5saW5l
IEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9u
c1Byb3RvdHlwZUZ1bmN0aW9uRm9yRWFjaEJvZHkoSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNh
bEdsb2JhbE9iamVjdCwgSlNDOjpDYWxsRnJhbWUqIGNhbGxGcmFtZSwgdHlwZW5hbWUgSURMT3Bl
cmF0aW9uPEpTVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnM+OjpDbGFzc1BhcmFt
ZXRlciBjYXN0ZWRUaGlzKQoreworICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTShsZXhpY2FsR2xv
YmFsT2JqZWN0KTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgVU5VU0VEX1BBUkFNKGNhbGxG
cmFtZSk7CisgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMSkp
CisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dT
Y29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkp
OworICAgIEVuc3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hl
Y2tlZEFyZ3VtZW50KDApOworICAgIGF1dG8gY2FsbGJhY2sgPSBjb252ZXJ0PElETEFueT4oKmxl
eGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MC52YWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFTEVBU0VfQU5EX1JF
VFVSTih0aHJvd1Njb3BlLCBKU1ZhbHVlOjplbmNvZGUodG9KUzxJRExBbnk+KGZvcndhcmRGb3JF
YWNoVG9TZXRMaWtlKCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lLCAqY2FzdGVkVGhp
cywgV1RGTW92ZShjYWxsYmFjaykpKSkpOworfQorCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGpzVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnNQcm90b3R5cGVGdW5jdGlv
bkZvckVhY2goSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSog
Y2FsbEZyYW1lKQoreworICAgIHJldHVybiBJRExPcGVyYXRpb248SlNUZXN0U2V0TGlrZVdpdGhP
dmVycmlkZGVuT3BlcmF0aW9ucz46OmNhbGw8anNUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3Bl
cmF0aW9uc1Byb3RvdHlwZUZ1bmN0aW9uRm9yRWFjaEJvZHk+KCpsZXhpY2FsR2xvYmFsT2JqZWN0
LCAqY2FsbEZyYW1lLCAiZm9yRWFjaCIpOworfQorCitzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUganNUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9uc1Byb3RvdHlwZUZ1
bmN0aW9uQ2xlYXJCb2R5KEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3Qs
IEpTQzo6Q2FsbEZyYW1lKiBjYWxsRnJhbWUsIHR5cGVuYW1lIElETE9wZXJhdGlvbjxKU1Rlc3RT
ZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zPjo6Q2xhc3NQYXJhbWV0ZXIgY2FzdGVkVGhp
cykKK3sKKyAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCk7Cisg
ICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgVU5VU0VE
X1BBUkFNKHRocm93U2NvcGUpOworICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIHRo
cm93U2NvcGUucmVsZWFzZSgpOworICAgIGZvcndhcmRDbGVhclRvU2V0TGlrZSgqbGV4aWNhbEds
b2JhbE9iamVjdCwgKmNhbGxGcmFtZSwgKmNhc3RlZFRoaXMpOworICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7Cit9CisKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwganNUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9uc1Byb3RvdHlwZUZ1bmN0aW9u
Q2xlYXIoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2Fs
bEZyYW1lKQoreworICAgIHJldHVybiBJRExPcGVyYXRpb248SlNUZXN0U2V0TGlrZVdpdGhPdmVy
cmlkZGVuT3BlcmF0aW9ucz46OmNhbGw8anNUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0
aW9uc1Byb3RvdHlwZUZ1bmN0aW9uQ2xlYXJCb2R5PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNh
bGxGcmFtZSwgImNsZWFyIik7Cit9CisKK0pTQzo6SXNvU3Vic3BhY2UqIEpTVGVzdFNldExpa2VX
aXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnM6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKK3sK
KyAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0u
Y2xpZW50RGF0YSk7CisgICAgYXV0byYgc3BhY2VzID0gY2xpZW50RGF0YS5zdWJzcGFjZXMoKTsK
KyAgICBpZiAoYXV0byogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RTZXRMaWtlV2l0
aE92ZXJyaWRkZW5PcGVyYXRpb25zLmdldCgpKQorICAgICAgICByZXR1cm4gc3BhY2U7CisgICAg
c3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0
LCBKU1Rlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zPiB8fCAhSlNUZXN0U2V0TGlr
ZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9uczo6bmVlZHNEZXN0cnVjdGlvbik7CisgICAgaWYgY29u
c3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rl
c3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zPikKKyAgICAgICAgc3BhY2VzLm1fc3Vi
c3BhY2VGb3JUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucyA9IG1ha2VVbmlxdWU8
SXNvU3Vic3BhY2U+IElTT19TVUJTUEFDRV9JTklUKHZtLmhlYXAsIHZtLmRlc3RydWN0aWJsZU9i
amVjdEhlYXBDZWxsVHlwZS5nZXQoKSwgSlNUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0
aW9ucyk7CisgICAgZWxzZQorICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RTZXRMaWtl
V2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zID0gbWFrZVVuaXF1ZTxJc29TdWJzcGFjZT4gSVNPX1NV
QlNQQUNFX0lOSVQodm0uaGVhcCwgdm0uY2VsbEhlYXBDZWxsVHlwZS5nZXQoKSwgSlNUZXN0U2V0
TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucyk7CisgICAgYXV0byogc3BhY2UgPSBzcGFjZXMu
bV9zdWJzcGFjZUZvclRlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zLmdldCgpOwor
SUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKK0lHTk9SRV9XQVJOSU5H
U19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQorICAgIGlmICgmSlNUZXN0U2V0TGlrZVdp
dGhPdmVycmlkZGVuT3BlcmF0aW9uczo6dmlzaXRPdXRwdXRDb25zdHJhaW50cyAhPSAmSlNDOjpK
U0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHMpCisgICAgICAgIGNsaWVudERhdGEub3V0cHV0
Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7CitJR05PUkVfV0FSTklOR1NfRU5ECitJ
R05PUkVfV0FSTklOR1NfRU5ECisgICAgcmV0dXJuIHNwYWNlOworfQorCit2b2lkIEpTVGVzdFNl
dExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnM6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwg
SGVhcEFuYWx5emVyJiBhbmFseXplcikKK3sKKyAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0
PEpTVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMqPihjZWxsKTsKKyAgICBhbmFs
eXplci5zZXRXcmFwcGVkT2JqZWN0Rm9yQ2VsbChjZWxsLCAmdGhpc09iamVjdC0+d3JhcHBlZCgp
KTsKKyAgICBpZiAodGhpc09iamVjdC0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKQorICAgICAg
ICBhbmFseXplci5zZXRMYWJlbEZvckNlbGwoY2VsbCwgInVybCAiICsgdGhpc09iamVjdC0+c2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCgpLT51cmwoKS5zdHJpbmcoKSk7CisgICAgQmFzZTo6YW5hbHl6
ZUhlYXAoY2VsbCwgYW5hbHl6ZXIpOworfQorCitib29sIEpTVGVzdFNldExpa2VXaXRoT3ZlcnJp
ZGRlbk9wZXJhdGlvbnNPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5k
bGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBTbG90VmlzaXRvciYgdmlzaXRvciwgY29u
c3QgY2hhcioqIHJlYXNvbikKK3sKKyAgICBVTlVTRURfUEFSQU0oaGFuZGxlKTsKKyAgICBVTlVT
RURfUEFSQU0odmlzaXRvcik7CisgICAgVU5VU0VEX1BBUkFNKHJlYXNvbik7CisgICAgcmV0dXJu
IGZhbHNlOworfQorCit2b2lkIEpTVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnNP
d25lcjo6ZmluYWxpemUoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqIGNv
bnRleHQpCit7CisgICAgYXV0byoganNUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9u
cyA9IHN0YXRpY19jYXN0PEpTVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMqPiho
YW5kbGUuc2xvdCgpLT5hc0NlbGwoKSk7CisgICAgYXV0byYgd29ybGQgPSAqc3RhdGljX2Nhc3Q8
RE9NV3JhcHBlcldvcmxkKj4oY29udGV4dCk7CisgICAgdW5jYWNoZVdyYXBwZXIod29ybGQsICZq
c1Rlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zLT53cmFwcGVkKCksIGpzVGVzdFNl
dExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMpOworfQorCisjaWYgRU5BQkxFKEJJTkRJTkdf
SU5URUdSSVRZKQorI2lmIFBMQVRGT1JNKFdJTikKKyNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0
NDgzKQorZXh0ZXJuICJDIiB7IGV4dGVybiB2b2lkICgqY29uc3QgX19pZGVudGlmaWVyKCI/P183
VGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnNAV2ViQ29yZUBANkJAIilbXSkoKTsg
fQorI2Vsc2UKK2V4dGVybiAiQyIgeyBleHRlcm4gdm9pZCogX1pUVk43V2ViQ29yZTM1VGVzdFNl
dExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnNFW107IH0KKyNlbmRpZgorI2VuZGlmCisKK0pT
Qzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0RPTUds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWY8VGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9w
ZXJhdGlvbnM+JiYgaW1wbCkKK3sKKworI2lmIEVOQUJMRShCSU5ESU5HX0lOVEVHUklUWSkKKyAg
ICBjb25zdCB2b2lkKiBhY3R1YWxWVGFibGVQb2ludGVyID0gZ2V0VlRhYmxlUG9pbnRlcihpbXBs
LnB0cigpKTsKKyNpZiBQTEFURk9STShXSU4pCisgICAgdm9pZCogZXhwZWN0ZWRWVGFibGVQb2lu
dGVyID0gX19pZGVudGlmaWVyKCI/P183VGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlv
bnNAV2ViQ29yZUBANkJAIik7CisjZWxzZQorICAgIHZvaWQqIGV4cGVjdGVkVlRhYmxlUG9pbnRl
ciA9ICZfWlRWTjdXZWJDb3JlMzVUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9uc0Vb
Ml07CisjZW5kaWYKKworICAgIC8vIElmIHRoaXMgZmFpbHMgVGVzdFNldExpa2VXaXRoT3ZlcnJp
ZGRlbk9wZXJhdGlvbnMgZG9lcyBub3QgaGF2ZSBhIHZ0YWJsZSwgc28geW91IG5lZWQgdG8gYWRk
IHRoZQorICAgIC8vIEltcGxlbWVudGF0aW9uTGFja3NWVGFibGUgYXR0cmlidXRlIHRvIHRoZSBp
bnRlcmZhY2UgZGVmaW5pdGlvbgorICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19wb2x5bW9ycGhp
YzxUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucz46OnZhbHVlLCAiVGVzdFNldExp
a2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMgaXMgbm90IHBvbHltb3JwaGljIik7CisKKyAgICAv
LyBJZiB5b3UgaGl0IHRoaXMgYXNzZXJ0aW9uIHlvdSBlaXRoZXIgaGF2ZSBhIHVzZSBhZnRlciBm
cmVlIGJ1Zywgb3IKKyAgICAvLyBUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucyBo
YXMgc3ViY2xhc3Nlcy4gSWYgVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMgaGFz
IHN1YmNsYXNzZXMgdGhhdCBnZXQgcGFzc2VkCisgICAgLy8gdG8gdG9KUygpIHdlIGN1cnJlbnRs
eSByZXF1aXJlIFRlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zIHlvdSB0byBvcHQg
b3V0IG9mIGJpbmRpbmcgaGFyZGVuaW5nCisgICAgLy8gYnkgYWRkaW5nIHRoZSBTa2lwVlRhYmxl
VmFsaWRhdGlvbiBhdHRyaWJ1dGUgdG8gdGhlIGludGVyZmFjZSBJREwgZGVmaW5pdGlvbgorICAg
IFJFTEVBU0VfQVNTRVJUKGFjdHVhbFZUYWJsZVBvaW50ZXIgPT0gZXhwZWN0ZWRWVGFibGVQb2lu
dGVyKTsKKyNlbmRpZgorICAgIHJldHVybiBjcmVhdGVXcmFwcGVyPFRlc3RTZXRMaWtlV2l0aE92
ZXJyaWRkZW5PcGVyYXRpb25zPihnbG9iYWxPYmplY3QsIFdURk1vdmUoaW1wbCkpOworfQorCitK
U0M6OkpTVmFsdWUgdG9KUyhKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0
LCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBUZXN0U2V0TGlrZVdpdGhPdmVycmlk
ZGVuT3BlcmF0aW9ucyYgaW1wbCkKK3sKKyAgICByZXR1cm4gd3JhcChsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBnbG9iYWxPYmplY3QsIGltcGwpOworfQorCitUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVu
T3BlcmF0aW9ucyogSlNUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9uczo6dG9XcmFw
cGVkKEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpCit7CisgICAgaWYgKGF1dG8qIHdy
YXBwZXIgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlv
bnMqPih2bSwgdmFsdWUpKQorICAgICAgICByZXR1cm4gJndyYXBwZXItPndyYXBwZWQoKTsKKyAg
ICByZXR1cm4gbnVsbHB0cjsKK30KKworfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucy5oCShub25leGlzdGVudCkKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXRMaWtlV2l0aE92
ZXJyaWRkZW5PcGVyYXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5MyBAQAorLyoK
KyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3Qu
CisgICAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5w
bC4gRE8gTk9UIE1PRElGWSEKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCisqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkpTRE9NV3Jh
cHBlci5oIgorI2luY2x1ZGUgIlRlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zLmgi
CisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY2xhc3MgSlNUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucyA6IHB1YmxpYyBK
U0RPTVdyYXBwZXI8VGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnM+IHsKK3B1Ymxp
YzoKKyAgICB1c2luZyBCYXNlID0gSlNET01XcmFwcGVyPFRlc3RTZXRMaWtlV2l0aE92ZXJyaWRk
ZW5PcGVyYXRpb25zPjsKKyAgICBzdGF0aWMgSlNUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3Bl
cmF0aW9ucyogY3JlYXRlKEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIFJlZjxUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9u
cz4mJiBpbXBsKQorICAgIHsKKyAgICAgICAgSlNUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3Bl
cmF0aW9ucyogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3RTZXRM
aWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zPihnbG9iYWxPYmplY3QtPnZtKCkuaGVhcCkpIEpT
VGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMoc3RydWN0dXJlLCAqZ2xvYmFsT2Jq
ZWN0LCBXVEZNb3ZlKGltcGwpKTsKKyAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbihnbG9iYWxP
YmplY3QtPnZtKCkpOworICAgICAgICByZXR1cm4gcHRyOworICAgIH0KKworICAgIHN0YXRpYyBK
U0M6OkpTT2JqZWN0KiBjcmVhdGVQcm90b3R5cGUoSlNDOjpWTSYsIEpTRE9NR2xvYmFsT2JqZWN0
Jik7CisgICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIHByb3RvdHlwZShKU0M6OlZNJiwgSlNET01H
bG9iYWxPYmplY3QmKTsKKyAgICBzdGF0aWMgVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJh
dGlvbnMqIHRvV3JhcHBlZChKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKKyAgICBzdGF0aWMgdm9p
ZCBkZXN0cm95KEpTQzo6SlNDZWxsKik7CisKKyAgICBERUNMQVJFX0lORk87CisKKyAgICBzdGF0
aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwg
cHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3Mp
LCBpbmZvKCksIEpTQzo6Tm9uQXJyYXkpOworICAgIH0KKworICAgIHN0YXRpYyBKU0M6OkpTVmFs
dWUgZ2V0Q29uc3RydWN0b3IoSlNDOjpWTSYsIGNvbnN0IEpTQzo6SlNHbG9iYWxPYmplY3QqKTsK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSwgSlNDOjpTdWJzcGFjZUFjY2VzcyBtb2RlPiBzdGF0aWMg
SlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCisgICAgeworICAgICAg
ICBpZiBjb25zdGV4cHIgKG1vZGUgPT0gSlNDOjpTdWJzcGFjZUFjY2Vzczo6Q29uY3VycmVudGx5
KQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBzdWJzcGFjZUZv
ckltcGwodm0pOworICAgIH0KKyAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VG
b3JJbXBsKEpTQzo6Vk0mIHZtKTsKKyAgICBzdGF0aWMgdm9pZCBhbmFseXplSGVhcChKU0NlbGwq
LCBKU0M6OkhlYXBBbmFseXplciYpOworcHJvdGVjdGVkOgorICAgIEpTVGVzdFNldExpa2VXaXRo
T3ZlcnJpZGRlbk9wZXJhdGlvbnMoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCYs
IFJlZjxUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucz4mJik7CisKKyAgICB2b2lk
IGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mKTsKK307CisKK2NsYXNzIEpTVGVzdFNldExpa2VXaXRo
T3ZlcnJpZGRlbk9wZXJhdGlvbnNPd25lciA6IHB1YmxpYyBKU0M6OldlYWtIYW5kbGVPd25lciB7
CitwdWJsaWM6CisgICAgdmlydHVhbCBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpT
Qzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6U2xvdFZpc2l0b3Im
LCBjb25zdCBjaGFyKiopOworICAgIHZpcnR1YWwgdm9pZCBmaW5hbGl6ZShKU0M6OkhhbmRsZTxK
U0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0KTsKK307CisKK2lubGluZSBKU0M6OldlYWtIYW5k
bGVPd25lciogd3JhcHBlck93bmVyKERPTVdyYXBwZXJXb3JsZCYsIFRlc3RTZXRMaWtlV2l0aE92
ZXJyaWRkZW5PcGVyYXRpb25zKikKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SlNUZXN0
U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9uc093bmVyPiBvd25lcjsKKyAgICByZXR1cm4g
Jm93bmVyLmdldCgpOworfQorCitpbmxpbmUgdm9pZCogd3JhcHBlcktleShUZXN0U2V0TGlrZVdp
dGhPdmVycmlkZGVuT3BlcmF0aW9ucyogd3JhcHBhYmxlT2JqZWN0KQoreworICAgIHJldHVybiB3
cmFwcGFibGVPYmplY3Q7Cit9CisKK0pTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6SlNHbG9iYWxPYmpl
Y3QqLCBKU0RPTUdsb2JhbE9iamVjdCosIFRlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRp
b25zJik7CitpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4
aWNhbEdsb2JhbE9iamVjdCwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgVGVzdFNl
dExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMqIGltcGwpIHsgcmV0dXJuIGltcGwgPyB0b0pT
KGxleGljYWxHbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdCwgKmltcGwpIDogSlNDOjpqc051bGwo
KTsgfQorSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpKU0dsb2JhbE9iamVjdCos
IEpTRE9NR2xvYmFsT2JqZWN0KiwgUmVmPFRlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRp
b25zPiYmKTsKK2lubGluZSBKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkpTR2xv
YmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBSZWZQdHI8VGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnM+JiYgaW1w
bCkgeyByZXR1cm4gaW1wbCA/IHRvSlNOZXdseUNyZWF0ZWQobGV4aWNhbEdsb2JhbE9iamVjdCwg
Z2xvYmFsT2JqZWN0LCBpbXBsLnJlbGVhc2VOb25OdWxsKCkpIDogSlNDOjpqc051bGwoKTsgfQor
Cit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8VGVzdFNldExp
a2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnM+IHsKKyAgICB1c2luZyBXcmFwcGVyQ2xhc3MgPSBK
U1Rlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zOworICAgIHVzaW5nIFRvV3JhcHBl
ZFJldHVyblR5cGUgPSBUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucyo7Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>408748</attachid>
            <date>2020-09-14 14:55:31 -0700</date>
            <delta_ts>2020-09-14 16:00:26 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-216468-20200914145530.patch</filename>
            <type>text/plain</type>
            <size>143552</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2NzA0MCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM4IEBACisyMDIwLTA5LTE0ICBTYW0gV2Vp
bmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBbV2ViSURMXSBNb3ZlIHN5bnRoZXRp
YyBvcGVyYXRpb24gY3JlYXRpb24gZnJvbSBJRExQYXJzZXIgdG8gQ29kZUdlbmVyYXRvckpTCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTY0NjgKKwor
ICAgICAgICBSZXZpZXdlZCBieSBDaHJpcyBEdW1lei4KKworICAgICAgICBBZGRyZXNzIEZJWE1F
cyBpbiBJRExQYXJzZXIgYnkgbW92aW5nIHN5bnRoZXRpYyBvcGVyYXRpb24gY3JlYXRpb24gb3V0
IG9mIElETFBhcnNlcgorICAgICAgICBhbmQgaW50byBDb2RlR2VuZXJhdG9ySlMuIFJlcGxhY2Ug
dXNlIG9mIGlzSXRlcmFibGUvaXNNYXBMaWtlL2lzU2V0TGlrZSBwcmVkaWNhdGVzCisgICAgICAg
IG9uIElETE9wZXJhdGlvbiBhbmQgSURMQXR0cmlidXRlIHdpdGggZXh0ZW5kZWQgYXR0cmlidXRl
cywgRnJvbUl0ZXJhYmxlLCAKKyAgICAgICAgRm9yd2FyZFRvTWFwTGlrZSBhbmQgRm9yd2FyZFRv
U2V0TGlrZS4KKworICAgICAgICBXaGlsZSB0aGlzIGNoYW5nZSBjb21wbGV0ZWx5IHJlbW92ZXMg
YWxsIG5vdGlvbiBvZiBvcGVyYXRpb25zL2F0dHJpYnV0ZXMgZnJvbSAKKyAgICAgICAgSURMTWFw
TGlrZSBhbmQgSURMU2V0TGlrZSwgSURMSXRlcmFibGUgcmV0YWlucyBhbiBvcGVyYXRpb25zIGFy
cmF5LCBub3cgb25seQorICAgICAgICB1c2VkIGJ5IENvZGVHZW5lcmF0b3JKUywgdG8gYXZvaWQg
YSBsYXJnZXIgcmVmYWN0b3Jpbmcgb2YgdGhlIGNvZGUgZ2VuZXJhdGlvbi4KKyAgICAgICAgRXZl
bnR1YWxseSwgaXQgd291bGQgYmUgZ29vZCB0byBzdG9wIHVzaW5nIEFTVCBsZXZlbCBvcGVyYXRp
b25zIGFuZCBhdHRyaWJ1dGVzCisgICAgICAgIHRvIG1vZGVsIHRoZXNlIHN5bnRoZXRpYyBvcGVy
YXRpb25zLCBhbmQgaW5zdGVhZCBoYXZlIHRoZSBjb2RlIGdlbmVyYXRpb24KKyAgICAgICAgbWFp
bnRhaW4gYSBtb2RlbCB0aGF0IG1vcmUgY2xvc2VseSByZXNlbWJsZXMgdGhlIEVDTUFTY3JpcHQg
b3V0cHV0IGRpcmVjdGx5LgorCisgICAgICAgIFdoaWxlIGhlcmUsIGFsc28gZml4IHRoZSBpc3N1
ZSB0aGF0IG1hcGxpa2UgYW5kIHNldGxpa2Ugd2VyZSBhbHdheXMgb3ZlcnJpZGluZworICAgICAg
ICBzZXQvY2xlYXIvZGVsZXRlIGFuZCBhZGQvY2xlYXIvZGVsZXRlIChyZXNwZWN0aXZlbHkpIHdo
ZXJlIGFzIFdlYklETCBzYXlzIHRoZXkKKyAgICAgICAgc2hvdWxkIG9ubHkgYWRkIHRob3NlIGlm
IHRoZSBpbnRlcmZhY2UgZG9lc24ndCBhbHJlYWR5IGhhdmUgbWVtYmVycyB3aXRoIHRob3NlCisg
ICAgICAgIG5hbWVzLiBBZGRzIG5ldyB0ZXN0cyBmb3IgdGhpcyBiZWhhdmlvci4KKworICAgICAg
ICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtOgorICAgICAgICAqIGJpbmRp
bmdzL3NjcmlwdHMvSURMUGFyc2VyLnBtOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVz
dC9CaW5kaW5nVGVzdEdsb2JhbENvbnN0cnVjdG9ycy5pZGw6CisgICAgICAgICogYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TWFwTGlr
ZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucy5oOiBBZGRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucy5jcHA6
IEFkZGVkLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXRMaWtl
V2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zLmg6IEFkZGVkLgorICAgICAgICAqIGJpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9TdXBwbGVtZW50YWxEZXBlbmRlbmNpZXMuZGVwOgorICAgICAgICAqIGJpbmRp
bmdzL3NjcmlwdHMvdGVzdC9UZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucy5pZGw6
IEFkZGVkLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0U2V0TGlrZVdpdGhP
dmVycmlkZGVuT3BlcmF0aW9ucy5pZGw6IEFkZGVkLgorCiAyMDIwLTA5LTE0ICBaYWxhbiBCdWp0
YXMgIDx6YWxhbkBhcHBsZS5jb20+CiAKICAgICAgICAgW0xGQ11bRkZDXSBFYWNoIGluLWZsb3cg
Y2hpbGQgb2YgYSBmbGV4IGNvbnRhaW5lciBiZWNvbWVzIGEgZmxleCBpdGVtLgpJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0J
KHJldmlzaW9uIDI2NzA0MCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29k
ZUdlbmVyYXRvckpTLnBtCSh3b3JraW5nIGNvcHkpCkBAIC0xNjMsNiArMTYzLDkgQEAgc3ViIEdl
bmVyYXRlSW50ZXJmYWNlCiAKICAgICAkY29kZUdlbmVyYXRvci0+TGlua092ZXJsb2FkZWRPcGVy
YXRpb25zKCRpbnRlcmZhY2UpOwogCisgICAgQWRkSXRlcmFibGVPcGVyYXRpb25JZk5lZWRlZCgk
aW50ZXJmYWNlKTsKKyAgICBBZGRNYXBMaWtlQXR0cmlidXRlc0FuZE9wZXJhdGlvbklmTmVlZGVk
KCRpbnRlcmZhY2UpOworICAgIEFkZFNldExpa2VBdHRyaWJ1dGVzQW5kT3BlcmF0aW9uSWZOZWVk
ZWQoJGludGVyZmFjZSk7CiAgICAgQWRkU3RyaW5naWZpZXJPcGVyYXRpb25JZk5lZWRlZCgkaW50
ZXJmYWNlKTsKICAgICBBZGRMZWdhY3lDYWxsZXJPcGVyYXRpb25JZk5lZWRlZCgkaW50ZXJmYWNl
KTsKIApAQCAtMTc1LDYgKzE3OCwyNzMgQEAgc3ViIEdlbmVyYXRlSW50ZXJmYWNlCiAgICAgfQog
fQogCitzdWIgQWRkSXRlcmFibGVPcGVyYXRpb25JZk5lZWRlZAoreworICAgIG15ICRpbnRlcmZh
Y2UgPSBzaGlmdDsKKworICAgIHJldHVybiB1bmxlc3MgJGludGVyZmFjZS0+aXRlcmFibGU7CisK
KyAgICAkaW50ZXJmYWNlLT5pdGVyYWJsZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57RnJvbUl0ZXJh
YmxlfSA9IDE7CisKKyAgICBteSAkc3ltYm9sSXRlcmF0b3JPcGVyYXRpb24gPSBJRExPcGVyYXRp
b24tPm5ldygpOworICAgICRzeW1ib2xJdGVyYXRvck9wZXJhdGlvbi0+bmFtZSgiW1N5bWJvbC5J
dGVyYXRvcl0iKTsKKyAgICBJRExQYXJzZXI6OmNvcHlFeHRlbmRlZEF0dHJpYnV0ZXMoJHN5bWJv
bEl0ZXJhdG9yT3BlcmF0aW9uLT5leHRlbmRlZEF0dHJpYnV0ZXMsICRpbnRlcmZhY2UtPml0ZXJh
YmxlLT5leHRlbmRlZEF0dHJpYnV0ZXMpOworICAgIHB1c2goQHskaW50ZXJmYWNlLT5pdGVyYWJs
ZS0+b3BlcmF0aW9uc30sICRzeW1ib2xJdGVyYXRvck9wZXJhdGlvbik7CisgICAgcHVzaChAeyRp
bnRlcmZhY2UtPm9wZXJhdGlvbnN9LCAkc3ltYm9sSXRlcmF0b3JPcGVyYXRpb24pIGlmIElzS2V5
VmFsdWVJdGVyYWJsZUludGVyZmFjZSgkaW50ZXJmYWNlKTsKKworICAgIG15ICRlbnRyaWVzT3Bl
cmF0aW9uID0gSURMT3BlcmF0aW9uLT5uZXcoKTsKKyAgICAkZW50cmllc09wZXJhdGlvbi0+bmFt
ZSgiZW50cmllcyIpOworICAgIElETFBhcnNlcjo6Y29weUV4dGVuZGVkQXR0cmlidXRlcygkZW50
cmllc09wZXJhdGlvbi0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLCAkaW50ZXJmYWNlLT5pdGVyYWJsZS0+
ZXh0ZW5kZWRBdHRyaWJ1dGVzKTsKKyAgICBwdXNoKEB7JGludGVyZmFjZS0+aXRlcmFibGUtPm9w
ZXJhdGlvbnN9LCAkZW50cmllc09wZXJhdGlvbik7CisgICAgcHVzaChAeyRpbnRlcmZhY2UtPm9w
ZXJhdGlvbnN9LCAkZW50cmllc09wZXJhdGlvbikgaWYgSXNLZXlWYWx1ZUl0ZXJhYmxlSW50ZXJm
YWNlKCRpbnRlcmZhY2UpOworCisgICAgbXkgJGtleXNPcGVyYXRpb24gPSBJRExPcGVyYXRpb24t
Pm5ldygpOworICAgICRrZXlzT3BlcmF0aW9uLT5uYW1lKCJrZXlzIik7CisgICAgSURMUGFyc2Vy
Ojpjb3B5RXh0ZW5kZWRBdHRyaWJ1dGVzKCRrZXlzT3BlcmF0aW9uLT5leHRlbmRlZEF0dHJpYnV0
ZXMsICRpbnRlcmZhY2UtPml0ZXJhYmxlLT5leHRlbmRlZEF0dHJpYnV0ZXMpOworICAgIHB1c2go
QHskaW50ZXJmYWNlLT5pdGVyYWJsZS0+b3BlcmF0aW9uc30sICRrZXlzT3BlcmF0aW9uKTsKKyAg
ICBwdXNoKEB7JGludGVyZmFjZS0+b3BlcmF0aW9uc30sICRrZXlzT3BlcmF0aW9uKSBpZiBJc0tl
eVZhbHVlSXRlcmFibGVJbnRlcmZhY2UoJGludGVyZmFjZSk7CisKKyAgICBteSAkdmFsdWVzT3Bl
cmF0aW9uID0gSURMT3BlcmF0aW9uLT5uZXcoKTsKKyAgICAkdmFsdWVzT3BlcmF0aW9uLT5uYW1l
KCJ2YWx1ZXMiKTsKKyAgICBJRExQYXJzZXI6OmNvcHlFeHRlbmRlZEF0dHJpYnV0ZXMoJHZhbHVl
c09wZXJhdGlvbi0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLCAkaW50ZXJmYWNlLT5pdGVyYWJsZS0+ZXh0
ZW5kZWRBdHRyaWJ1dGVzKTsKKyAgICBwdXNoKEB7JGludGVyZmFjZS0+aXRlcmFibGUtPm9wZXJh
dGlvbnN9LCAkdmFsdWVzT3BlcmF0aW9uKTsKKyAgICBwdXNoKEB7JGludGVyZmFjZS0+b3BlcmF0
aW9uc30sICR2YWx1ZXNPcGVyYXRpb24pIGlmIElzS2V5VmFsdWVJdGVyYWJsZUludGVyZmFjZSgk
aW50ZXJmYWNlKTsKKworICAgIG15ICRmb3JFYWNoT3BlcmF0aW9uID0gSURMT3BlcmF0aW9uLT5u
ZXcoKTsKKyAgICAkZm9yRWFjaE9wZXJhdGlvbi0+bmFtZSgiZm9yRWFjaCIpOworICAgIG15ICRm
b3JFYWNoQXJndW1lbnQgPSBJRExBcmd1bWVudC0+bmV3KCk7CisgICAgJGZvckVhY2hBcmd1bWVu
dC0+bmFtZSgiY2FsbGJhY2siKTsKKyAgICAkZm9yRWFjaEFyZ3VtZW50LT50eXBlKElETFBhcnNl
cjo6bWFrZVNpbXBsZVR5cGUoImFueSIpKTsKKyAgICBwdXNoKEB7JGZvckVhY2hPcGVyYXRpb24t
PmFyZ3VtZW50c30sICgkZm9yRWFjaEFyZ3VtZW50KSk7CisgICAgSURMUGFyc2VyOjpjb3B5RXh0
ZW5kZWRBdHRyaWJ1dGVzKCRmb3JFYWNoT3BlcmF0aW9uLT5leHRlbmRlZEF0dHJpYnV0ZXMsICRp
bnRlcmZhY2UtPml0ZXJhYmxlLT5leHRlbmRlZEF0dHJpYnV0ZXMpOworICAgIHB1c2goQHskaW50
ZXJmYWNlLT5pdGVyYWJsZS0+b3BlcmF0aW9uc30sICRmb3JFYWNoT3BlcmF0aW9uKTsKKyAgICBw
dXNoKEB7JGludGVyZmFjZS0+b3BlcmF0aW9uc30sICRmb3JFYWNoT3BlcmF0aW9uKSBpZiBJc0tl
eVZhbHVlSXRlcmFibGVJbnRlcmZhY2UoJGludGVyZmFjZSk7Cit9CisKK3N1YiBBZGRNYXBMaWtl
QXR0cmlidXRlc0FuZE9wZXJhdGlvbklmTmVlZGVkCit7CisgICAgbXkgJGludGVyZmFjZSA9IHNo
aWZ0OworCisgICAgcmV0dXJuIHVubGVzcyAkaW50ZXJmYWNlLT5tYXBMaWtlOworCisgICAgJGlu
dGVyZmFjZS0+bWFwTGlrZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Rm9yd2FyZFRvTWFwTGlrZX0g
PSAxOworCisgICAgIyBodHRwczovL2hleWNhbS5naXRodWIuaW8vd2ViaWRsLyNlcy1tYXAtc2l6
ZQorICAgIG15ICRzaXplQXR0cmlidXRlID0gSURMQXR0cmlidXRlLT5uZXcoKTsKKyAgICAkc2l6
ZUF0dHJpYnV0ZS0+bmFtZSgic2l6ZSIpOworICAgICRzaXplQXR0cmlidXRlLT5pc1JlYWRPbmx5
KDEpOworICAgICRzaXplQXR0cmlidXRlLT50eXBlKElETFBhcnNlcjo6bWFrZVNpbXBsZVR5cGUo
ImFueSIpKTsKKyAgICBJRExQYXJzZXI6OmNvcHlFeHRlbmRlZEF0dHJpYnV0ZXMoJHNpemVBdHRy
aWJ1dGUtPmV4dGVuZGVkQXR0cmlidXRlcywgJGludGVyZmFjZS0+bWFwTGlrZS0+ZXh0ZW5kZWRB
dHRyaWJ1dGVzKTsKKyAgICAkc2l6ZUF0dHJpYnV0ZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Tm90
RW51bWVyYWJsZX0gPSAxOworICAgIHB1c2goQHskaW50ZXJmYWNlLT5hdHRyaWJ1dGVzfSwgJHNp
emVBdHRyaWJ1dGUpOworCisgICAgIyBodHRwczovL2hleWNhbS5naXRodWIuaW8vd2ViaWRsLyNl
cy1tYXAtZ2V0LWhhcworICAgIG15ICRnZXRPcGVyYXRpb24gPSBJRExPcGVyYXRpb24tPm5ldygp
OworICAgICRnZXRPcGVyYXRpb24tPm5hbWUoImdldCIpOworICAgIG15ICRnZXRBcmd1bWVudCA9
IElETEFyZ3VtZW50LT5uZXcoKTsKKyAgICAkZ2V0QXJndW1lbnQtPm5hbWUoImtleSIpOworICAg
ICRnZXRBcmd1bWVudC0+dHlwZShJRExQYXJzZXI6OmNsb25lVHlwZSgkaW50ZXJmYWNlLT5tYXBM
aWtlLT5rZXlUeXBlKSk7CisgICAgcHVzaChAeyRnZXRPcGVyYXRpb24tPmFyZ3VtZW50c30sICgk
Z2V0QXJndW1lbnQpKTsKKyAgICAkZ2V0T3BlcmF0aW9uLT50eXBlKElETFBhcnNlcjo6bWFrZVNp
bXBsZVR5cGUoImFueSIpKTsKKyAgICBJRExQYXJzZXI6OmNvcHlFeHRlbmRlZEF0dHJpYnV0ZXMo
JGdldE9wZXJhdGlvbi0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLCAkaW50ZXJmYWNlLT5tYXBMaWtlLT5l
eHRlbmRlZEF0dHJpYnV0ZXMpOworICAgICRnZXRPcGVyYXRpb24tPmV4dGVuZGVkQXR0cmlidXRl
cy0+e05vdEVudW1lcmFibGV9ID0gMTsKKyAgICBwdXNoKEB7JGludGVyZmFjZS0+b3BlcmF0aW9u
c30sICRnZXRPcGVyYXRpb24pOworCisgICAgbXkgJGhhc09wZXJhdGlvbiA9IElETE9wZXJhdGlv
bi0+bmV3KCk7CisgICAgJGhhc09wZXJhdGlvbi0+bmFtZSgiaGFzIik7CisgICAgbXkgJGhhc0Fy
Z3VtZW50ID0gSURMQXJndW1lbnQtPm5ldygpOworICAgICRoYXNBcmd1bWVudC0+bmFtZSgia2V5
Iik7CisgICAgJGhhc0FyZ3VtZW50LT50eXBlKElETFBhcnNlcjo6Y2xvbmVUeXBlKCRpbnRlcmZh
Y2UtPm1hcExpa2UtPmtleVR5cGUpKTsKKyAgICBwdXNoKEB7JGhhc09wZXJhdGlvbi0+YXJndW1l
bnRzfSwgKCRoYXNBcmd1bWVudCkpOworICAgICRoYXNPcGVyYXRpb24tPnR5cGUoSURMUGFyc2Vy
OjptYWtlU2ltcGxlVHlwZSgiYW55IikpOworICAgIElETFBhcnNlcjo6Y29weUV4dGVuZGVkQXR0
cmlidXRlcygkaGFzT3BlcmF0aW9uLT5leHRlbmRlZEF0dHJpYnV0ZXMsICRpbnRlcmZhY2UtPm1h
cExpa2UtPmV4dGVuZGVkQXR0cmlidXRlcyk7CisgICAgJGhhc09wZXJhdGlvbi0+ZXh0ZW5kZWRB
dHRyaWJ1dGVzLT57Tm90RW51bWVyYWJsZX0gPSAxOworICAgIHB1c2goQHskaW50ZXJmYWNlLT5v
cGVyYXRpb25zfSwgJGhhc09wZXJhdGlvbik7CisKKyAgICAjIGh0dHBzOi8vaGV5Y2FtLmdpdGh1
Yi5pby93ZWJpZGwvI2VzLW1hcC1lbnRyaWVzCisgICAgbXkgJGVudHJpZXNPcGVyYXRpb24gPSBJ
RExPcGVyYXRpb24tPm5ldygpOworICAgICRlbnRyaWVzT3BlcmF0aW9uLT5uYW1lKCJlbnRyaWVz
Iik7CisgICAgJGVudHJpZXNPcGVyYXRpb24tPnR5cGUoSURMUGFyc2VyOjptYWtlU2ltcGxlVHlw
ZSgiYW55IikpOworICAgIElETFBhcnNlcjo6Y29weUV4dGVuZGVkQXR0cmlidXRlcygkZW50cmll
c09wZXJhdGlvbi0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLCAkaW50ZXJmYWNlLT5tYXBMaWtlLT5leHRl
bmRlZEF0dHJpYnV0ZXMpOworICAgICRlbnRyaWVzT3BlcmF0aW9uLT5leHRlbmRlZEF0dHJpYnV0
ZXMtPntOb3RFbnVtZXJhYmxlfSA9IDE7CisgICAgcHVzaChAeyRpbnRlcmZhY2UtPm9wZXJhdGlv
bnN9LCAkZW50cmllc09wZXJhdGlvbik7CisKKyAgICAjIGh0dHBzOi8vaGV5Y2FtLmdpdGh1Yi5p
by93ZWJpZGwvI2VzLW1hcC1rZXlzLXZhbHVlcworICAgIG15ICRrZXlzT3BlcmF0aW9uID0gSURM
T3BlcmF0aW9uLT5uZXcoKTsKKyAgICAka2V5c09wZXJhdGlvbi0+bmFtZSgia2V5cyIpOworICAg
ICRrZXlzT3BlcmF0aW9uLT50eXBlKElETFBhcnNlcjo6bWFrZVNpbXBsZVR5cGUoImFueSIpKTsK
KyAgICBJRExQYXJzZXI6OmNvcHlFeHRlbmRlZEF0dHJpYnV0ZXMoJGtleXNPcGVyYXRpb24tPmV4
dGVuZGVkQXR0cmlidXRlcywgJGludGVyZmFjZS0+bWFwTGlrZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVz
KTsKKyAgICAka2V5c09wZXJhdGlvbi0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Tm90RW51bWVyYWJs
ZX0gPSAxOworICAgIHB1c2goQHskaW50ZXJmYWNlLT5vcGVyYXRpb25zfSwgJGtleXNPcGVyYXRp
b24pOworCisgICAgbXkgJHZhbHVlc09wZXJhdGlvbiA9IElETE9wZXJhdGlvbi0+bmV3KCk7Cisg
ICAgJHZhbHVlc09wZXJhdGlvbi0+bmFtZSgidmFsdWVzIik7CisgICAgJHZhbHVlc09wZXJhdGlv
bi0+dHlwZShJRExQYXJzZXI6Om1ha2VTaW1wbGVUeXBlKCJhbnkiKSk7CisgICAgSURMUGFyc2Vy
Ojpjb3B5RXh0ZW5kZWRBdHRyaWJ1dGVzKCR2YWx1ZXNPcGVyYXRpb24tPmV4dGVuZGVkQXR0cmli
dXRlcywgJGludGVyZmFjZS0+bWFwTGlrZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzKTsKKyAgICAkdmFs
dWVzT3BlcmF0aW9uLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntOb3RFbnVtZXJhYmxlfSA9IDE7Cisg
ICAgcHVzaChAeyRpbnRlcmZhY2UtPm9wZXJhdGlvbnN9LCAkdmFsdWVzT3BlcmF0aW9uKTsKKwor
ICAgICMgaHR0cHM6Ly9oZXljYW0uZ2l0aHViLmlvL3dlYmlkbC8jZXMtZm9yRWFjaAorICAgIG15
ICRmb3JFYWNoT3BlcmF0aW9uID0gSURMT3BlcmF0aW9uLT5uZXcoKTsKKyAgICAkZm9yRWFjaE9w
ZXJhdGlvbi0+bmFtZSgiZm9yRWFjaCIpOworICAgICRmb3JFYWNoT3BlcmF0aW9uLT50eXBlKElE
TFBhcnNlcjo6bWFrZVNpbXBsZVR5cGUoImFueSIpKTsKKyAgICBteSAkZm9yRWFjaEFyZ3VtZW50
ID0gSURMQXJndW1lbnQtPm5ldygpOworICAgICRmb3JFYWNoQXJndW1lbnQtPm5hbWUoImNhbGxi
YWNrIik7CisgICAgJGZvckVhY2hBcmd1bWVudC0+dHlwZShJRExQYXJzZXI6Om1ha2VTaW1wbGVU
eXBlKCJhbnkiKSk7CisgICAgcHVzaChAeyRmb3JFYWNoT3BlcmF0aW9uLT5hcmd1bWVudHN9LCAo
JGZvckVhY2hBcmd1bWVudCkpOworICAgIElETFBhcnNlcjo6Y29weUV4dGVuZGVkQXR0cmlidXRl
cygkZm9yRWFjaE9wZXJhdGlvbi0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLCAkaW50ZXJmYWNlLT5tYXBM
aWtlLT5leHRlbmRlZEF0dHJpYnV0ZXMpOworICAgIHB1c2goQHskaW50ZXJmYWNlLT5vcGVyYXRp
b25zfSwgJGZvckVhY2hPcGVyYXRpb24pOworCisgICAgcmV0dXJuIGlmICRpbnRlcmZhY2UtPm1h
cExpa2UtPmlzUmVhZE9ubHk7CisKKyAgICAjIGh0dHBzOi8vaGV5Y2FtLmdpdGh1Yi5pby93ZWJp
ZGwvI2VzLW1hcC1zZXQKKyAgICB1bmxlc3MgKGdyZXAgeyAkXy0+bmFtZSBlcSAic2V0IiB9IChA
eyRpbnRlcmZhY2UtPmF0dHJpYnV0ZXN9LCBAeyRpbnRlcmZhY2UtPm9wZXJhdGlvbnN9LCBAeyRp
bnRlcmZhY2UtPmNvbnN0YW50c30pKSB7CisgICAgICAgIG15ICRzZXRPcGVyYXRpb24gPSBJRExP
cGVyYXRpb24tPm5ldygpOworICAgICAgICAkc2V0T3BlcmF0aW9uLT5uYW1lKCJzZXQiKTsKKyAg
ICAgICAgbXkgJHNldEtleUFyZ3VtZW50ID0gSURMQXJndW1lbnQtPm5ldygpOworICAgICAgICAk
c2V0S2V5QXJndW1lbnQtPm5hbWUoImtleSIpOworICAgICAgICAkc2V0S2V5QXJndW1lbnQtPnR5
cGUoSURMUGFyc2VyOjpjbG9uZVR5cGUoJGludGVyZmFjZS0+bWFwTGlrZS0+a2V5VHlwZSkpOwor
ICAgICAgICBteSAkc2V0VmFsdWVBcmd1bWVudCA9IElETEFyZ3VtZW50LT5uZXcoKTsKKyAgICAg
ICAgJHNldFZhbHVlQXJndW1lbnQtPm5hbWUoInZhbHVlIik7CisgICAgICAgICRzZXRWYWx1ZUFy
Z3VtZW50LT50eXBlKElETFBhcnNlcjo6Y2xvbmVUeXBlKCRpbnRlcmZhY2UtPm1hcExpa2UtPnZh
bHVlVHlwZSkpOworICAgICAgICBwdXNoKEB7JHNldE9wZXJhdGlvbi0+YXJndW1lbnRzfSwgKCRz
ZXRLZXlBcmd1bWVudCkpOworICAgICAgICBwdXNoKEB7JHNldE9wZXJhdGlvbi0+YXJndW1lbnRz
fSwgKCRzZXRWYWx1ZUFyZ3VtZW50KSk7CisgICAgICAgICRzZXRPcGVyYXRpb24tPnR5cGUoSURM
UGFyc2VyOjptYWtlU2ltcGxlVHlwZSgiYW55IikpOworICAgICAgICBJRExQYXJzZXI6OmNvcHlF
eHRlbmRlZEF0dHJpYnV0ZXMoJHNldE9wZXJhdGlvbi0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLCAkaW50
ZXJmYWNlLT5tYXBMaWtlLT5leHRlbmRlZEF0dHJpYnV0ZXMpOworICAgICAgICAkc2V0T3BlcmF0
aW9uLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntOb3RFbnVtZXJhYmxlfSA9IDE7CisgICAgICAgIHB1
c2goQHskaW50ZXJmYWNlLT5vcGVyYXRpb25zfSwgJHNldE9wZXJhdGlvbik7CisgICAgfQorCisg
ICAgIyBodHRwczovL2hleWNhbS5naXRodWIuaW8vd2ViaWRsLyNlcy1tYXAtY2xlYXIKKyAgICB1
bmxlc3MgKGdyZXAgeyAkXy0+bmFtZSBlcSAiY2xlYXIiIH0gKEB7JGludGVyZmFjZS0+YXR0cmli
dXRlc30sIEB7JGludGVyZmFjZS0+b3BlcmF0aW9uc30sIEB7JGludGVyZmFjZS0+Y29uc3RhbnRz
fSkpIHsKKyAgICAgICAgbXkgJGNsZWFyT3BlcmF0aW9uID0gSURMT3BlcmF0aW9uLT5uZXcoKTsK
KyAgICAgICAgJGNsZWFyT3BlcmF0aW9uLT5uYW1lKCJjbGVhciIpOworICAgICAgICAkY2xlYXJP
cGVyYXRpb24tPnR5cGUoSURMUGFyc2VyOjptYWtlU2ltcGxlVHlwZSgidW5kZWZpbmVkIikpOwor
ICAgICAgICBJRExQYXJzZXI6OmNvcHlFeHRlbmRlZEF0dHJpYnV0ZXMoJGNsZWFyT3BlcmF0aW9u
LT5leHRlbmRlZEF0dHJpYnV0ZXMsICRpbnRlcmZhY2UtPm1hcExpa2UtPmV4dGVuZGVkQXR0cmli
dXRlcyk7CisgICAgICAgICRjbGVhck9wZXJhdGlvbi0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Tm90
RW51bWVyYWJsZX0gPSAxOworICAgICAgICBwdXNoKEB7JGludGVyZmFjZS0+b3BlcmF0aW9uc30s
ICRjbGVhck9wZXJhdGlvbik7CisgICAgfQorCisgICAgIyBodHRwczovL2hleWNhbS5naXRodWIu
aW8vd2ViaWRsLyNlcy1tYXAtZGVsZXRlCisgICAgdW5sZXNzIChncmVwIHsgJF8tPm5hbWUgZXEg
ImRlbGV0ZSIgfSAoQHskaW50ZXJmYWNlLT5hdHRyaWJ1dGVzfSwgQHskaW50ZXJmYWNlLT5vcGVy
YXRpb25zfSwgQHskaW50ZXJmYWNlLT5jb25zdGFudHN9KSkgeworICAgICAgICBteSAkZGVsZXRl
T3BlcmF0aW9uID0gSURMT3BlcmF0aW9uLT5uZXcoKTsKKyAgICAgICAgJGRlbGV0ZU9wZXJhdGlv
bi0+bmFtZSgiZGVsZXRlIik7CisgICAgICAgIG15ICRkZWxldGVBcmd1bWVudCA9IElETEFyZ3Vt
ZW50LT5uZXcoKTsKKyAgICAgICAgJGRlbGV0ZUFyZ3VtZW50LT5uYW1lKCJrZXkiKTsKKyAgICAg
ICAgJGRlbGV0ZUFyZ3VtZW50LT50eXBlKElETFBhcnNlcjo6Y2xvbmVUeXBlKCRpbnRlcmZhY2Ut
Pm1hcExpa2UtPmtleVR5cGUpKTsKKyAgICAgICAgcHVzaChAeyRkZWxldGVPcGVyYXRpb24tPmFy
Z3VtZW50c30sICgkZGVsZXRlQXJndW1lbnQpKTsKKyAgICAgICAgJGRlbGV0ZU9wZXJhdGlvbi0+
dHlwZShJRExQYXJzZXI6Om1ha2VTaW1wbGVUeXBlKCJhbnkiKSk7CisgICAgICAgIElETFBhcnNl
cjo6Y29weUV4dGVuZGVkQXR0cmlidXRlcygkZGVsZXRlT3BlcmF0aW9uLT5leHRlbmRlZEF0dHJp
YnV0ZXMsICRpbnRlcmZhY2UtPm1hcExpa2UtPmV4dGVuZGVkQXR0cmlidXRlcyk7CisgICAgICAg
ICRkZWxldGVPcGVyYXRpb24tPmV4dGVuZGVkQXR0cmlidXRlcy0+e05vdEVudW1lcmFibGV9ID0g
MTsKKyAgICAgICAgcHVzaChAeyRpbnRlcmZhY2UtPm9wZXJhdGlvbnN9LCAkZGVsZXRlT3BlcmF0
aW9uKTsKKyAgICB9Cit9CisKK3N1YiBBZGRTZXRMaWtlQXR0cmlidXRlc0FuZE9wZXJhdGlvbklm
TmVlZGVkCit7CisgICAgbXkgJGludGVyZmFjZSA9IHNoaWZ0OworCisgICAgcmV0dXJuIHVubGVz
cyAkaW50ZXJmYWNlLT5zZXRMaWtlOworCisgICAgJGludGVyZmFjZS0+c2V0TGlrZS0+ZXh0ZW5k
ZWRBdHRyaWJ1dGVzLT57Rm9yd2FyZFRvU2V0TGlrZX0gPSAxOworCisgICAgIyBodHRwczovL2hl
eWNhbS5naXRodWIuaW8vd2ViaWRsLyNlcy1zZXQtc2l6ZQorICAgIG15ICRzaXplQXR0cmlidXRl
ID0gSURMQXR0cmlidXRlLT5uZXcoKTsKKyAgICAkc2l6ZUF0dHJpYnV0ZS0+bmFtZSgic2l6ZSIp
OworICAgICRzaXplQXR0cmlidXRlLT5pc1JlYWRPbmx5KDEpOworICAgICRzaXplQXR0cmlidXRl
LT50eXBlKElETFBhcnNlcjo6bWFrZVNpbXBsZVR5cGUoImFueSIpKTsKKyAgICBJRExQYXJzZXI6
OmNvcHlFeHRlbmRlZEF0dHJpYnV0ZXMoJHNpemVBdHRyaWJ1dGUtPmV4dGVuZGVkQXR0cmlidXRl
cywgJGludGVyZmFjZS0+c2V0TGlrZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzKTsKKyAgICAkc2l6ZUF0
dHJpYnV0ZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Tm90RW51bWVyYWJsZX0gPSAxOworICAgIHB1
c2goQHskaW50ZXJmYWNlLT5hdHRyaWJ1dGVzfSwgJHNpemVBdHRyaWJ1dGUpOworCisgICAgIyBo
dHRwczovL2hleWNhbS5naXRodWIuaW8vd2ViaWRsLyNlcy1zZXQtaGFzCisgICAgbXkgJGhhc09w
ZXJhdGlvbiA9IElETE9wZXJhdGlvbi0+bmV3KCk7CisgICAgJGhhc09wZXJhdGlvbi0+bmFtZSgi
aGFzIik7CisgICAgbXkgJGhhc0FyZ3VtZW50ID0gSURMQXJndW1lbnQtPm5ldygpOworICAgICRo
YXNBcmd1bWVudC0+bmFtZSgia2V5Iik7CisgICAgJGhhc0FyZ3VtZW50LT50eXBlKElETFBhcnNl
cjo6Y2xvbmVUeXBlKCRpbnRlcmZhY2UtPnNldExpa2UtPml0ZW1UeXBlKSk7CisgICAgcHVzaChA
eyRoYXNPcGVyYXRpb24tPmFyZ3VtZW50c30sICgkaGFzQXJndW1lbnQpKTsKKyAgICAkaGFzT3Bl
cmF0aW9uLT50eXBlKElETFBhcnNlcjo6bWFrZVNpbXBsZVR5cGUoImFueSIpKTsKKyAgICBJRExQ
YXJzZXI6OmNvcHlFeHRlbmRlZEF0dHJpYnV0ZXMoJGhhc09wZXJhdGlvbi0+ZXh0ZW5kZWRBdHRy
aWJ1dGVzLCAkaW50ZXJmYWNlLT5zZXRMaWtlLT5leHRlbmRlZEF0dHJpYnV0ZXMpOworICAgICRo
YXNPcGVyYXRpb24tPmV4dGVuZGVkQXR0cmlidXRlcy0+e05vdEVudW1lcmFibGV9ID0gMTsKKyAg
ICBwdXNoKEB7JGludGVyZmFjZS0+b3BlcmF0aW9uc30sICRoYXNPcGVyYXRpb24pOworCisgICAg
IyBodHRwczovL2hleWNhbS5naXRodWIuaW8vd2ViaWRsLyNlcy1zZXQtZW50cmllcy1rZXlzCisg
ICAgbXkgJGVudHJpZXNPcGVyYXRpb24gPSBJRExPcGVyYXRpb24tPm5ldygpOworICAgICRlbnRy
aWVzT3BlcmF0aW9uLT5uYW1lKCJlbnRyaWVzIik7CisgICAgJGVudHJpZXNPcGVyYXRpb24tPnR5
cGUoSURMUGFyc2VyOjptYWtlU2ltcGxlVHlwZSgiYW55IikpOworICAgIElETFBhcnNlcjo6Y29w
eUV4dGVuZGVkQXR0cmlidXRlcygkZW50cmllc09wZXJhdGlvbi0+ZXh0ZW5kZWRBdHRyaWJ1dGVz
LCAkaW50ZXJmYWNlLT5zZXRMaWtlLT5leHRlbmRlZEF0dHJpYnV0ZXMpOworICAgICRlbnRyaWVz
T3BlcmF0aW9uLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntOb3RFbnVtZXJhYmxlfSA9IDE7CisgICAg
cHVzaChAeyRpbnRlcmZhY2UtPm9wZXJhdGlvbnN9LCAkZW50cmllc09wZXJhdGlvbik7CisKKyAg
ICBteSAka2V5c09wZXJhdGlvbiA9IElETE9wZXJhdGlvbi0+bmV3KCk7CisgICAgJGtleXNPcGVy
YXRpb24tPm5hbWUoImtleXMiKTsKKyAgICAka2V5c09wZXJhdGlvbi0+dHlwZShJRExQYXJzZXI6
Om1ha2VTaW1wbGVUeXBlKCJhbnkiKSk7CisgICAgSURMUGFyc2VyOjpjb3B5RXh0ZW5kZWRBdHRy
aWJ1dGVzKCRrZXlzT3BlcmF0aW9uLT5leHRlbmRlZEF0dHJpYnV0ZXMsICRpbnRlcmZhY2UtPnNl
dExpa2UtPmV4dGVuZGVkQXR0cmlidXRlcyk7CisgICAgJGtleXNPcGVyYXRpb24tPmV4dGVuZGVk
QXR0cmlidXRlcy0+e05vdEVudW1lcmFibGV9ID0gMTsKKyAgICBwdXNoKEB7JGludGVyZmFjZS0+
b3BlcmF0aW9uc30sICRrZXlzT3BlcmF0aW9uKTsKKworICAgICMgaHR0cHM6Ly9oZXljYW0uZ2l0
aHViLmlvL3dlYmlkbC8jZXMtc2V0LXZhbHVlcworICAgIG15ICR2YWx1ZXNPcGVyYXRpb24gPSBJ
RExPcGVyYXRpb24tPm5ldygpOworICAgICR2YWx1ZXNPcGVyYXRpb24tPm5hbWUoInZhbHVlcyIp
OworICAgICR2YWx1ZXNPcGVyYXRpb24tPnR5cGUoSURMUGFyc2VyOjptYWtlU2ltcGxlVHlwZSgi
YW55IikpOworICAgIElETFBhcnNlcjo6Y29weUV4dGVuZGVkQXR0cmlidXRlcygkdmFsdWVzT3Bl
cmF0aW9uLT5leHRlbmRlZEF0dHJpYnV0ZXMsICRpbnRlcmZhY2UtPnNldExpa2UtPmV4dGVuZGVk
QXR0cmlidXRlcyk7CisgICAgJHZhbHVlc09wZXJhdGlvbi0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57
Tm90RW51bWVyYWJsZX0gPSAxOworICAgIHB1c2goQHskaW50ZXJmYWNlLT5vcGVyYXRpb25zfSwg
JHZhbHVlc09wZXJhdGlvbik7CisKKyAgICAjIGh0dHBzOi8vaGV5Y2FtLmdpdGh1Yi5pby93ZWJp
ZGwvI2VzLWZvckVhY2gKKyAgICBteSAkZm9yRWFjaE9wZXJhdGlvbiA9IElETE9wZXJhdGlvbi0+
bmV3KCk7CisgICAgJGZvckVhY2hPcGVyYXRpb24tPm5hbWUoImZvckVhY2giKTsKKyAgICBteSAk
Zm9yRWFjaEFyZ3VtZW50ID0gSURMQXJndW1lbnQtPm5ldygpOworICAgICRmb3JFYWNoQXJndW1l
bnQtPm5hbWUoImNhbGxiYWNrIik7CisgICAgJGZvckVhY2hBcmd1bWVudC0+dHlwZShJRExQYXJz
ZXI6Om1ha2VTaW1wbGVUeXBlKCJhbnkiKSk7CisgICAgcHVzaChAeyRmb3JFYWNoT3BlcmF0aW9u
LT5hcmd1bWVudHN9LCAoJGZvckVhY2hBcmd1bWVudCkpOworICAgICRmb3JFYWNoT3BlcmF0aW9u
LT50eXBlKElETFBhcnNlcjo6bWFrZVNpbXBsZVR5cGUoImFueSIpKTsKKyAgICBJRExQYXJzZXI6
OmNvcHlFeHRlbmRlZEF0dHJpYnV0ZXMoJGZvckVhY2hPcGVyYXRpb24tPmV4dGVuZGVkQXR0cmli
dXRlcywgJGludGVyZmFjZS0+c2V0TGlrZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzKTsKKyAgICAjIEZJ
WE1FOiBUaGUgV2ViSURMIHNwZWMgc2F5cyB0aGF0IHRoZSBmb3JFYWNoIG9wZXJhdGlvbiBzaG91
bGQgYmUgZW51bWVyYWJsZS4KKyAgICAkZm9yRWFjaE9wZXJhdGlvbi0+ZXh0ZW5kZWRBdHRyaWJ1
dGVzLT57Tm90RW51bWVyYWJsZX0gPSAxOworICAgIHB1c2goQHskaW50ZXJmYWNlLT5vcGVyYXRp
b25zfSwgJGZvckVhY2hPcGVyYXRpb24pOworCisgICAgcmV0dXJuIGlmICRpbnRlcmZhY2UtPnNl
dExpa2UtPmlzUmVhZE9ubHk7CisKKyAgICAjIGh0dHBzOi8vaGV5Y2FtLmdpdGh1Yi5pby93ZWJp
ZGwvI2VzLWFkZC1kZWxldGUKKyAgICB1bmxlc3MgKGdyZXAgeyAkXy0+bmFtZSBlcSAiYWRkIiB9
IChAeyRpbnRlcmZhY2UtPmF0dHJpYnV0ZXN9LCBAeyRpbnRlcmZhY2UtPm9wZXJhdGlvbnN9LCBA
eyRpbnRlcmZhY2UtPmNvbnN0YW50c30pKSB7CisgICAgICAgIG15ICRhZGRPcGVyYXRpb24gPSBJ
RExPcGVyYXRpb24tPm5ldygpOworICAgICAgICAkYWRkT3BlcmF0aW9uLT5uYW1lKCJhZGQiKTsK
KyAgICAgICAgbXkgJGFkZEFyZ3VtZW50ID0gSURMQXJndW1lbnQtPm5ldygpOworICAgICAgICAk
YWRkQXJndW1lbnQtPm5hbWUoImtleSIpOworICAgICAgICAkYWRkQXJndW1lbnQtPnR5cGUoSURM
UGFyc2VyOjpjbG9uZVR5cGUoJGludGVyZmFjZS0+c2V0TGlrZS0+aXRlbVR5cGUpKTsKKyAgICAg
ICAgcHVzaChAeyRhZGRPcGVyYXRpb24tPmFyZ3VtZW50c30sICgkYWRkQXJndW1lbnQpKTsKKyAg
ICAgICAgJGFkZE9wZXJhdGlvbi0+dHlwZShJRExQYXJzZXI6Om1ha2VTaW1wbGVUeXBlKCJhbnki
KSk7CisgICAgICAgIElETFBhcnNlcjo6Y29weUV4dGVuZGVkQXR0cmlidXRlcygkYWRkT3BlcmF0
aW9uLT5leHRlbmRlZEF0dHJpYnV0ZXMsICRpbnRlcmZhY2UtPnNldExpa2UtPmV4dGVuZGVkQXR0
cmlidXRlcyk7CisgICAgICAgICRhZGRPcGVyYXRpb24tPmV4dGVuZGVkQXR0cmlidXRlcy0+e05v
dEVudW1lcmFibGV9ID0gMTsKKyAgICAgICAgcHVzaChAeyRpbnRlcmZhY2UtPm9wZXJhdGlvbnN9
LCAkYWRkT3BlcmF0aW9uKTsKKyAgICB9CisKKyAgICAjIGh0dHBzOi8vaGV5Y2FtLmdpdGh1Yi5p
by93ZWJpZGwvI2VzLXNldC1jbGVhcgorICAgIHVubGVzcyAoZ3JlcCB7ICRfLT5uYW1lIGVxICJj
bGVhciIgfSAoQHskaW50ZXJmYWNlLT5hdHRyaWJ1dGVzfSwgQHskaW50ZXJmYWNlLT5vcGVyYXRp
b25zfSwgQHskaW50ZXJmYWNlLT5jb25zdGFudHN9KSkgeworICAgICAgICBteSAkY2xlYXJPcGVy
YXRpb24gPSBJRExPcGVyYXRpb24tPm5ldygpOworICAgICAgICAkY2xlYXJPcGVyYXRpb24tPm5h
bWUoImNsZWFyIik7CisgICAgICAgICRjbGVhck9wZXJhdGlvbi0+dHlwZShJRExQYXJzZXI6Om1h
a2VTaW1wbGVUeXBlKCJ1bmRlZmluZWQiKSk7CisgICAgICAgIElETFBhcnNlcjo6Y29weUV4dGVu
ZGVkQXR0cmlidXRlcygkY2xlYXJPcGVyYXRpb24tPmV4dGVuZGVkQXR0cmlidXRlcywgJGludGVy
ZmFjZS0+c2V0TGlrZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzKTsKKyAgICAgICAgJGNsZWFyT3BlcmF0
aW9uLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntOb3RFbnVtZXJhYmxlfSA9IDE7CisgICAgICAgIHB1
c2goQHskaW50ZXJmYWNlLT5vcGVyYXRpb25zfSwgJGNsZWFyT3BlcmF0aW9uKTsKKyAgICB9CisK
KyAgICB1bmxlc3MgKGdyZXAgeyAkXy0+bmFtZSBlcSAiZGVsZXRlIiB9IChAeyRpbnRlcmZhY2Ut
PmF0dHJpYnV0ZXN9LCBAeyRpbnRlcmZhY2UtPm9wZXJhdGlvbnN9LCBAeyRpbnRlcmZhY2UtPmNv
bnN0YW50c30pKSB7CisgICAgICAgIG15ICRkZWxldGVPcGVyYXRpb24gPSBJRExPcGVyYXRpb24t
Pm5ldygpOworICAgICAgICAkZGVsZXRlT3BlcmF0aW9uLT5uYW1lKCJkZWxldGUiKTsKKyAgICAg
ICAgbXkgJGRlbGV0ZUFyZ3VtZW50ID0gSURMQXJndW1lbnQtPm5ldygpOworICAgICAgICAkZGVs
ZXRlQXJndW1lbnQtPm5hbWUoImtleSIpOworICAgICAgICAkZGVsZXRlQXJndW1lbnQtPnR5cGUo
SURMUGFyc2VyOjpjbG9uZVR5cGUoJGludGVyZmFjZS0+c2V0TGlrZS0+aXRlbVR5cGUpKTsKKyAg
ICAgICAgcHVzaChAeyRkZWxldGVPcGVyYXRpb24tPmFyZ3VtZW50c30sICgkZGVsZXRlQXJndW1l
bnQpKTsKKyAgICAgICAgJGRlbGV0ZU9wZXJhdGlvbi0+dHlwZShJRExQYXJzZXI6Om1ha2VTaW1w
bGVUeXBlKCJhbnkiKSk7CisgICAgICAgIElETFBhcnNlcjo6Y29weUV4dGVuZGVkQXR0cmlidXRl
cygkZGVsZXRlT3BlcmF0aW9uLT5leHRlbmRlZEF0dHJpYnV0ZXMsICRpbnRlcmZhY2UtPnNldExp
a2UtPmV4dGVuZGVkQXR0cmlidXRlcyk7CisgICAgICAgICRkZWxldGVPcGVyYXRpb24tPmV4dGVu
ZGVkQXR0cmlidXRlcy0+e05vdEVudW1lcmFibGV9ID0gMTsKKyAgICAgICAgcHVzaChAeyRpbnRl
cmZhY2UtPm9wZXJhdGlvbnN9LCAkZGVsZXRlT3BlcmF0aW9uKTsKKyAgICB9Cit9CisKIHN1YiBB
ZGRTdHJpbmdpZmllck9wZXJhdGlvbklmTmVlZGVkCiB7CiAgICAgbXkgJGludGVyZmFjZSA9IHNo
aWZ0OwpAQCAtMTYwNCwxMSArMTg3NCwxMSBAQCBzdWIgR2V0RnVsbHlRdWFsaWZpZWRJbXBsZW1l
bnRhdGlvbkNhbGxOCiAgICAgICAgIHJldHVybiAkaW50ZXJmYWNlLT50eXBlLT5uYW1lIC4gIjo6
JHtpbXBsZW1lbnRhdGlvbk5hbWV9IjsKICAgICB9CiAgICAgCi0gICAgaWYgKCRwcm9wZXJ0eS0+
aXNNYXBMaWtlKSB7CisgICAgaWYgKCRwcm9wZXJ0eS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Rm9y
d2FyZFRvTWFwTGlrZX0pIHsKICAgICAgICAgcmV0dXJuICJmb3J3YXJkIiAuICRjb2RlR2VuZXJh
dG9yLT5XS191Y2ZpcnN0KCRwcm9wZXJ0eS0+bmFtZSkgLiAiVG9NYXBMaWtlIjsKICAgICB9CiAg
ICAgCi0gICAgaWYgKCRwcm9wZXJ0eS0+aXNTZXRMaWtlKSB7CisgICAgaWYgKCRwcm9wZXJ0eS0+
ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Rm9yd2FyZFRvU2V0TGlrZX0pIHsKICAgICAgICAgcmV0dXJu
ICJmb3J3YXJkIiAuICRjb2RlR2VuZXJhdG9yLT5XS191Y2ZpcnN0KCRwcm9wZXJ0eS0+bmFtZSkg
LiAiVG9TZXRMaWtlIjsKICAgICB9CiAKQEAgLTE2MjMsNyArMTg5Myw3IEBAIHN1YiBBZGRBZGRp
dGlvbmFsQXJndW1lbnRzRm9ySW1wbGVtZW50YXQKICAgICAgICAgdW5zaGlmdChAJGFyZ3VtZW50
cywgJGltcGxFeHByZXNzaW9uKTsKICAgICB9CiAgICAgCi0gICAgaWYgKCRwcm9wZXJ0eS0+aXNN
YXBMaWtlIG9yICRwcm9wZXJ0eS0+aXNTZXRMaWtlKSB7CisgICAgaWYgKCRwcm9wZXJ0eS0+ZXh0
ZW5kZWRBdHRyaWJ1dGVzLT57Rm9yd2FyZFRvTWFwTGlrZX0gb3IgJHByb3BlcnR5LT5leHRlbmRl
ZEF0dHJpYnV0ZXMtPntGb3J3YXJkVG9TZXRMaWtlfSkgewogICAgICAgICBwdXNoKEAkYXJndW1l
bnRzLCAkZ2xvYmFsT2JqZWN0KTsKICAgICAgICAgaWYgKHJlZigkcHJvcGVydHkpIGVxICJJRExP
cGVyYXRpb24iKSB7CiAgICAgICAgICAgICBwdXNoKEAkYXJndW1lbnRzLCAkY2FsbEZyYW1lKTsK
QEAgLTE3NjEsOCArMjAzMSw4IEBAIHN1YiBJc0FjY2VsZXJhdGVkRE9NQXR0cmlidXRlCiAgICAg
cmV0dXJuIDAgaWYgJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Q3VzdG9tUHJveHlU
b0pTT2JqZWN0fTsKIAogICAgIHJldHVybiAwIGlmICRhdHRyaWJ1dGUtPmlzU3RhdGljOwotICAg
IHJldHVybiAwIGlmICRhdHRyaWJ1dGUtPmlzTWFwTGlrZTsKLSAgICByZXR1cm4gMCBpZiAkYXR0
cmlidXRlLT5pc1NldExpa2U7CisgICAgcmV0dXJuIDAgaWYgJGF0dHJpYnV0ZS0+ZXh0ZW5kZWRB
dHRyaWJ1dGVzLT57Rm9yd2FyZFRvTWFwTGlrZX07CisgICAgcmV0dXJuIDAgaWYgJGF0dHJpYnV0
ZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Rm9yd2FyZFRvU2V0TGlrZX07CiAgICAgcmV0dXJuIDAg
aWYgJGNvZGVHZW5lcmF0b3ItPklzQ29uc3RydWN0b3JUeXBlKCRhdHRyaWJ1dGUtPnR5cGUpOwog
ICAgIHJldHVybiAwIGlmIElzSlNCdWlsdGluKCRpbnRlcmZhY2UsICRhdHRyaWJ1dGUpOwogICAg
IHJldHVybiAwIGlmICRhdHRyaWJ1dGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+e0xlZ2FjeUxlbmll
bnRUaGlzfTsKQEAgLTE4NDEsMTAgKzIxMTEsNiBAQCBzdWIgUHJvdG90eXBlT3BlcmF0aW9uQ291
bnQKICAgICAgICAgJGNvdW50KysgaWYgISRvcGVyYXRpb24tPmlzU3RhdGljICYmICFPcGVyYXRp
b25TaG91bGRCZU9uSW5zdGFuY2UoJGludGVyZmFjZSwgJG9wZXJhdGlvbik7CiAgICAgfQogCi0g
ICAgJGNvdW50ICs9IHNjYWxhciBAeyRpbnRlcmZhY2UtPml0ZXJhYmxlLT5vcGVyYXRpb25zfSBp
ZiAkaW50ZXJmYWNlLT5pdGVyYWJsZTsKLSAgICAkY291bnQgKz0gc2NhbGFyIEB7JGludGVyZmFj
ZS0+bWFwTGlrZS0+b3BlcmF0aW9uc30gaWYgJGludGVyZmFjZS0+bWFwTGlrZTsKLSAgICAkY291
bnQgKz0gc2NhbGFyIEB7JGludGVyZmFjZS0+c2V0TGlrZS0+b3BlcmF0aW9uc30gaWYgJGludGVy
ZmFjZS0+c2V0TGlrZTsKLQogICAgIHJldHVybiAkY291bnQ7CiB9CiAKQEAgLTMxMDEsMTEgKzMz
NjcsNyBAQCBzdWIgR2VuZXJhdGVQcm9wZXJ0aWVzSGFzaFRhYmxlCiAKICAgICByZXR1cm4gMCBp
ZiAhJHByb3BlcnR5Q291bnQ7CiAKLSAgICBteSBAYXR0cmlidXRlcyA9IEB7JGludGVyZmFjZS0+
YXR0cmlidXRlc307Ci0gICAgcHVzaChAYXR0cmlidXRlcywgQHskaW50ZXJmYWNlLT5tYXBMaWtl
LT5hdHRyaWJ1dGVzfSkgaWYgJGludGVyZmFjZS0+bWFwTGlrZTsKLSAgICBwdXNoKEBhdHRyaWJ1
dGVzLCBAeyRpbnRlcmZhY2UtPnNldExpa2UtPmF0dHJpYnV0ZXN9KSBpZiAkaW50ZXJmYWNlLT5z
ZXRMaWtlOwotCi0gICAgZm9yZWFjaCBteSAkYXR0cmlidXRlIChAYXR0cmlidXRlcykgeworICAg
IGZvcmVhY2ggbXkgJGF0dHJpYnV0ZSAoQHskaW50ZXJmYWNlLT5hdHRyaWJ1dGVzfSkgewogICAg
ICAgICBuZXh0IGlmICgkYXR0cmlidXRlLT5pc1N0YXRpYyk7CiAgICAgICAgIG5leHQgaWYgQXR0
cmlidXRlU2hvdWxkQmVPbkluc3RhbmNlKCRpbnRlcmZhY2UsICRhdHRyaWJ1dGUpICE9ICRpc0lu
c3RhbmNlOwogICAgICAgICBuZXh0IGlmICgkYXR0cmlidXRlLT5leHRlbmRlZEF0dHJpYnV0ZXMt
PntQcml2YXRlSWRlbnRpZmllcn0gYW5kIG5vdCAkYXR0cmlidXRlLT5leHRlbmRlZEF0dHJpYnV0
ZXMtPntQdWJsaWNJZGVudGlmaWVyfSk7CkBAIC0zMTUzLDExICszNDE1LDcgQEAgc3ViIEdlbmVy
YXRlUHJvcGVydGllc0hhc2hUYWJsZQogICAgICAgICB9CiAgICAgfQogCi0gICAgbXkgQG9wZXJh
dGlvbnMgPSBAeyRpbnRlcmZhY2UtPm9wZXJhdGlvbnN9OwotICAgIHB1c2goQG9wZXJhdGlvbnMs
IEB7JGludGVyZmFjZS0+aXRlcmFibGUtPm9wZXJhdGlvbnN9KSBpZiBJc0tleVZhbHVlSXRlcmFi
bGVJbnRlcmZhY2UoJGludGVyZmFjZSk7Ci0gICAgcHVzaChAb3BlcmF0aW9ucywgQHskaW50ZXJm
YWNlLT5tYXBMaWtlLT5vcGVyYXRpb25zfSkgaWYgJGludGVyZmFjZS0+bWFwTGlrZTsKLSAgICBw
dXNoKEBvcGVyYXRpb25zLCBAeyRpbnRlcmZhY2UtPnNldExpa2UtPm9wZXJhdGlvbnN9KSBpZiAk
aW50ZXJmYWNlLT5zZXRMaWtlOwotICAgIGZvcmVhY2ggbXkgJG9wZXJhdGlvbiAoQG9wZXJhdGlv
bnMpIHsKKyAgICBmb3JlYWNoIG15ICRvcGVyYXRpb24gKEB7JGludGVyZmFjZS0+b3BlcmF0aW9u
c30pIHsKICAgICAgICAgbmV4dCBpZiAoJG9wZXJhdGlvbi0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57
UHJpdmF0ZUlkZW50aWZpZXJ9IGFuZCBub3QgJG9wZXJhdGlvbi0+ZXh0ZW5kZWRBdHRyaWJ1dGVz
LT57UHVibGljSWRlbnRpZmllcn0pOwogICAgICAgICBuZXh0IGlmICgkb3BlcmF0aW9uLT5pc1N0
YXRpYyk7CiAgICAgICAgIG5leHQgaWYgJG9wZXJhdGlvbi0+e292ZXJsb2FkSW5kZXh9ICYmICRv
cGVyYXRpb24tPntvdmVybG9hZEluZGV4fSA+IDE7CkBAIC0zOTYwLDIzICs0MjE4LDE0IEBAIHN1
YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgcHVzaChAaW1wbENvbnRlbnQsIEdlbmVyYXRl
RW51bWVyYXRpb25zSW1wbGVtZW50YXRpb25Db250ZW50KCRpbnRlcmZhY2UsICRlbnVtZXJhdGlv
bnMpKTsKICAgICBwdXNoKEBpbXBsQ29udGVudCwgR2VuZXJhdGVEaWN0aW9uYXJpZXNJbXBsZW1l
bnRhdGlvbkNvbnRlbnQoJGludGVyZmFjZSwgJGRpY3Rpb25hcmllcykpOwogCi0gICAgbXkgQG9w
ZXJhdGlvbnMgPSBAeyRpbnRlcmZhY2UtPm9wZXJhdGlvbnN9OwotICAgIHB1c2goQG9wZXJhdGlv
bnMsIEB7JGludGVyZmFjZS0+aXRlcmFibGUtPm9wZXJhdGlvbnN9KSBpZiBJc0tleVZhbHVlSXRl
cmFibGVJbnRlcmZhY2UoJGludGVyZmFjZSk7Ci0gICAgcHVzaChAb3BlcmF0aW9ucywgQHskaW50
ZXJmYWNlLT5tYXBMaWtlLT5vcGVyYXRpb25zfSkgaWYgJGludGVyZmFjZS0+bWFwTGlrZTsKLSAg
ICBwdXNoKEBvcGVyYXRpb25zLCBAeyRpbnRlcmZhY2UtPnNldExpa2UtPm9wZXJhdGlvbnN9KSBp
ZiAkaW50ZXJmYWNlLT5zZXRMaWtlOwotCi0gICAgbXkgQGF0dHJpYnV0ZXMgPSBAeyRpbnRlcmZh
Y2UtPmF0dHJpYnV0ZXN9OwotICAgIHB1c2goQGF0dHJpYnV0ZXMsIEB7JGludGVyZmFjZS0+bWFw
TGlrZS0+YXR0cmlidXRlc30pIGlmICRpbnRlcmZhY2UtPm1hcExpa2U7Ci0gICAgcHVzaChAYXR0
cmlidXRlcywgQHskaW50ZXJmYWNlLT5zZXRMaWtlLT5hdHRyaWJ1dGVzfSkgaWYgJGludGVyZmFj
ZS0+c2V0TGlrZTsKLQogICAgIG15ICRudW1Db25zdGFudHMgPSBAeyRpbnRlcmZhY2UtPmNvbnN0
YW50c307Ci0gICAgbXkgJG51bU9wZXJhdGlvbnMgPSBAb3BlcmF0aW9uczsKLSAgICBteSAkbnVt
QXR0cmlidXRlcyA9IEBhdHRyaWJ1dGVzOworICAgIG15ICRudW1BdHRyaWJ1dGVzID0gQHskaW50
ZXJmYWNlLT5hdHRyaWJ1dGVzfTsKKyAgICBteSAkbnVtT3BlcmF0aW9ucyA9IEB7JGludGVyZmFj
ZS0+b3BlcmF0aW9uc307CiAKICAgICBpZiAoJG51bU9wZXJhdGlvbnMgPiAwKSB7CiAgICAgICAg
IG15ICRpbkFwcGxlQ29weXJpZ2h0ID0gMDsKICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsIi8v
IEZ1bmN0aW9uc1xuXG4iKTsKLSAgICAgICAgZm9yZWFjaCBteSAkb3BlcmF0aW9uIChAb3BlcmF0
aW9ucykgeworICAgICAgICBmb3JlYWNoIG15ICRvcGVyYXRpb24gKEB7JGludGVyZmFjZS0+b3Bl
cmF0aW9uc30pIHsKICAgICAgICAgICAgIG5leHQgaWYgJG9wZXJhdGlvbi0+e292ZXJsb2FkSW5k
ZXh9ICYmICRvcGVyYXRpb24tPntvdmVybG9hZEluZGV4fSA+IDE7CiAgICAgICAgICAgICBuZXh0
IGlmICRvcGVyYXRpb24tPmV4dGVuZGVkQXR0cmlidXRlcy0+e0ZvcndhcmREZWNsYXJlSW5IZWFk
ZXJ9OwogICAgICAgICAgICAgbmV4dCBpZiBJc0pTQnVpbHRpbigkaW50ZXJmYWNlLCAkb3BlcmF0
aW9uKTsKQEAgLTQwMjUsNyArNDI3NCw3IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAg
ICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgImJvb2wgJHtjb25zdHJ1Y3RvclNldHRlcn0o
SlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpT
VmFsdWUpO1xuIik7CiAgICAgICAgIH0KIAotICAgICAgICBmb3JlYWNoIG15ICRhdHRyaWJ1dGUg
KEBhdHRyaWJ1dGVzKSB7CisgICAgICAgIGZvcmVhY2ggbXkgJGF0dHJpYnV0ZSAoQHskaW50ZXJm
YWNlLT5hdHRyaWJ1dGVzfSkgewogICAgICAgICAgICAgbmV4dCBpZiAkYXR0cmlidXRlLT5leHRl
bmRlZEF0dHJpYnV0ZXMtPntGb3J3YXJkRGVjbGFyZUluSGVhZGVyfTsKICAgICAgICAgICAgIG5l
eHQgaWYgSXNKU0J1aWx0aW4oJGludGVyZmFjZSwgJGF0dHJpYnV0ZSk7CiAKQEAgLTQwNTAsNyAr
NDI5OSw3IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgfQogCiAgICAgaWYgKCRu
dW1PcGVyYXRpb25zID4gMCkgewotICAgICAgICBmb3JlYWNoIG15ICRvcGVyYXRpb24gKEBvcGVy
YXRpb25zKSB7CisgICAgICAgIGZvcmVhY2ggbXkgJG9wZXJhdGlvbiAoQHskaW50ZXJmYWNlLT5v
cGVyYXRpb25zfSkgewogICAgICAgICAgICAgbmV4dCB1bmxlc3MgJG9wZXJhdGlvbi0+ZXh0ZW5k
ZWRBdHRyaWJ1dGVzLT57RE9NSklUfTsKICAgICAgICAgICAgICRpbXBsSW5jbHVkZXN7IkRPTUpJ
VElETFR5cGVGaWx0ZXIuaCJ9ID0gMTsKICAgICAgICAgICAgICRpbXBsSW5jbHVkZXN7IkRPTUpJ
VEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuaCJ9ID0gMTsKQEAgLTQwODIsNyArNDMzMSw3IEBAIHN1
YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgfQogCiAgICAgaWYgKCRudW1BdHRyaWJ1dGVz
ID4gMCB8fCBOZWVkc0NvbnN0cnVjdG9yUHJvcGVydHkoJGludGVyZmFjZSkpIHsKLSAgICAgICAg
Zm9yZWFjaCBteSAkYXR0cmlidXRlIChAYXR0cmlidXRlcykgeworICAgICAgICBmb3JlYWNoIG15
ICRhdHRyaWJ1dGUgKEB7JGludGVyZmFjZS0+YXR0cmlidXRlc30pIHsKICAgICAgICAgICAgIG5l
eHQgdW5sZXNzICRhdHRyaWJ1dGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+e0RPTUpJVH07CiAgICAg
ICAgICAgICBhc3NlcnQoIk9ubHkgRE9NSklUPUdldHRlciBpcyBzdXBwb3J0ZWQgZm9yIGF0dHJp
YnV0ZXMiKSB1bmxlc3MgJGNvZGVHZW5lcmF0b3ItPkV4dGVuZGVkQXR0cmlidXRlQ29udGFpbnMo
JGF0dHJpYnV0ZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57RE9NSklUfSwgIkdldHRlciIpOwogCkBA
IC00NjMyLDEyICs0ODgxLDEyIEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAKICAgICB9
CiAKLSAgICBmb3JlYWNoIG15ICRhdHRyaWJ1dGUgKEBhdHRyaWJ1dGVzKSB7CisgICAgZm9yZWFj
aCBteSAkYXR0cmlidXRlIChAeyRpbnRlcmZhY2UtPmF0dHJpYnV0ZXN9KSB7CiAgICAgICAgIEdl
bmVyYXRlQXR0cmlidXRlR2V0dGVyRGVmaW5pdGlvbihcQGltcGxDb250ZW50LCAkaW50ZXJmYWNl
LCAkY2xhc3NOYW1lLCAkYXR0cmlidXRlKTsKICAgICAgICAgR2VuZXJhdGVBdHRyaWJ1dGVTZXR0
ZXJEZWZpbml0aW9uKFxAaW1wbENvbnRlbnQsICRpbnRlcmZhY2UsICRjbGFzc05hbWUsICRhdHRy
aWJ1dGUpOwogICAgIH0KIAotICAgIGZvcmVhY2ggbXkgJG9wZXJhdGlvbiAoQG9wZXJhdGlvbnMp
IHsKKyAgICBmb3JlYWNoIG15ICRvcGVyYXRpb24gKEB7JGludGVyZmFjZS0+b3BlcmF0aW9uc30p
IHsKICAgICAgICAgR2VuZXJhdGVPcGVyYXRpb25EZWZpbml0aW9uKFxAaW1wbENvbnRlbnQsICRp
bnRlcmZhY2UsICRjbGFzc05hbWUsICRvcGVyYXRpb24pOwogICAgIH0KICAgICAKQEAgLTUwMjIs
NyArNTI3MSw3IEBAIHN1YiBHZW5lcmF0ZUF0dHJpYnV0ZUdldHRlckJvZHlEZWZpbml0aW8KIAog
ICAgICAgICBteSAkZ2xvYmFsT2JqZWN0UmVmZXJlbmNlID0gJGF0dHJpYnV0ZS0+aXNTdGF0aWMg
PyAiKmpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KCZsZXhpY2FsR2xvYmFsT2JqZWN0KSIgOiAi
KnRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCkiOwogICAgICAgICBteSAkdG9KU0V4cHJlc3Npb24g
PSBOYXRpdmVUb0pTVmFsdWVVc2luZ1JlZmVyZW5jZXMoJGF0dHJpYnV0ZSwgJGludGVyZmFjZSwg
IiR7ZnVuY3Rpb25OYW1lfSgiIC4gam9pbigiLCAiLCBAYXJndW1lbnRzKSAuICIpIiwgJGdsb2Jh
bE9iamVjdFJlZmVyZW5jZSk7Ci0gICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBhdXRv
JiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7XG4iKSB1bmxlc3MgJGF0dHJpYnV0ZS0+aXNT
dGF0aWMgb3IgJGF0dHJpYnV0ZS0+aXNNYXBMaWtlIG9yICRhdHRyaWJ1dGUtPmlzU2V0TGlrZTsK
KyAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0
LndyYXBwZWQoKTtcbiIpIHVubGVzcyAkYXR0cmlidXRlLT5pc1N0YXRpYyBvciAkYXR0cmlidXRl
LT5leHRlbmRlZEF0dHJpYnV0ZXMtPntGb3J3YXJkVG9NYXBMaWtlfSBvciAkYXR0cmlidXRlLT5l
eHRlbmRlZEF0dHJpYnV0ZXMtPntGb3J3YXJkVG9TZXRMaWtlfTsKIAogICAgICAgICBpZiAoIUlz
UmVhZG9ubHkoJGF0dHJpYnV0ZSkpIHsKICAgICAgICAgICAgIG15ICRjYWxsVHJhY2luZ0NhbGxi
YWNrID0gJGF0dHJpYnV0ZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Q2FsbFRyYWNpbmdDYWxsYmFj
a30gfHwgJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Q2FsbFRyYWNpbmdDYWxsYmFj
a307CkBAIC01MzY1LDcgKzU2MTQsNyBAQCBzdWIgR2VuZXJhdGVPcGVyYXRpb25Cb2R5RGVmaW5p
dGlvbgogICAgIH0gZWxzaWYgKEhhc0N1c3RvbU1ldGhvZCgkb3BlcmF0aW9uKSkgewogICAgICAg
ICBHZW5lcmF0ZUltcGxlbWVudGF0aW9uQ3VzdG9tRnVuY3Rpb25DYWxsKCRvdXRwdXRBcnJheSwg
JG9wZXJhdGlvbiwgJGludGVyZmFjZSwgJGNsYXNzTmFtZSwgJGZ1bmN0aW9uSW1wbGVtZW50YXRp
b25OYW1lLCAkaW5kZW50KTsKICAgICB9IGVsc2UgewotICAgICAgICBpZiAoISRvcGVyYXRpb24t
PmlzTWFwTGlrZSAmJiAhJG9wZXJhdGlvbi0+aXNTZXRMaWtlICYmICEkb3BlcmF0aW9uLT5pc1N0
YXRpYykgeworICAgICAgICBpZiAoISRvcGVyYXRpb24tPmV4dGVuZGVkQXR0cmlidXRlcy0+e0Zv
cndhcmRUb01hcExpa2V9ICYmICEkb3BlcmF0aW9uLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntGb3J3
YXJkVG9TZXRMaWtlfSAmJiAhJG9wZXJhdGlvbi0+aXNTdGF0aWMpIHsKICAgICAgICAgICAgIHB1
c2goQCRvdXRwdXRBcnJheSwgIiAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgp
O1xuIik7CiAgICAgICAgIH0KIApAQCAtNTM5MCw3ICs1NjM5LDcgQEAgc3ViIEdlbmVyYXRlT3Bl
cmF0aW9uRGVmaW5pdGlvbgogICAgIG15ICgkb3V0cHV0QXJyYXksICRpbnRlcmZhY2UsICRjbGFz
c05hbWUsICRvcGVyYXRpb24pID0gQF87CiAKICAgICByZXR1cm4gaWYgSXNKU0J1aWx0aW4oJGlu
dGVyZmFjZSwgJG9wZXJhdGlvbik7Ci0gICAgcmV0dXJuIGlmICRvcGVyYXRpb24tPmlzSXRlcmFi
bGU7CisgICAgcmV0dXJuIGlmICRvcGVyYXRpb24tPmV4dGVuZGVkQXR0cmlidXRlcy0+e0Zyb21J
dGVyYWJsZX07CiAgICAgCiAgICAgaWYgKCRvcGVyYXRpb24tPmV4dGVuZGVkQXR0cmlidXRlcy0+
e0RlZmF1bHR9KSB7CiAgICAgICAgIHJldHVybiBHZW5lcmF0ZURlZmF1bHRPcGVyYXRpb25EZWZp
bml0aW9uKCRvdXRwdXRBcnJheSwgJGludGVyZmFjZSwgJGNsYXNzTmFtZSwgJG9wZXJhdGlvbik7
CkBAIC03NTQyLDExICs3NzkxLDcgQEAgc3ViIEdldFJ1bnRpbWVFbmFibGVkU3RhdGljUHJvcGVy
dGllcwogCiAgICAgbXkgQHJ1bnRpbWVFbmFibGVkUHJvcGVydGllcyA9ICgpOwogCi0gICAgbXkg
QGF0dHJpYnV0ZXMgPSBAeyRpbnRlcmZhY2UtPmF0dHJpYnV0ZXN9OwotICAgIHB1c2goQGF0dHJp
YnV0ZXMsIEB7JGludGVyZmFjZS0+bWFwTGlrZS0+YXR0cmlidXRlc30pIGlmICRpbnRlcmZhY2Ut
Pm1hcExpa2U7Ci0gICAgcHVzaChAYXR0cmlidXRlcywgQHskaW50ZXJmYWNlLT5zZXRMaWtlLT5h
dHRyaWJ1dGVzfSkgaWYgJGludGVyZmFjZS0+c2V0TGlrZTsKLQotICAgIGZvcmVhY2ggbXkgJGF0
dHJpYnV0ZSAoQGF0dHJpYnV0ZXMpIHsKKyAgICBmb3JlYWNoIG15ICRhdHRyaWJ1dGUgKEB7JGlu
dGVyZmFjZS0+YXR0cmlidXRlc30pIHsKICAgICAgICAgbmV4dCBpZiBBdHRyaWJ1dGVTaG91bGRC
ZU9uSW5zdGFuY2UoJGludGVyZmFjZSwgJGF0dHJpYnV0ZSkgIT0gMDsKICAgICAgICAgbmV4dCBp
ZiBub3QgJGF0dHJpYnV0ZS0+aXNTdGF0aWM7CiAKQEAgLTc1NTUsMTEgKzc4MDAsNyBAQCBzdWIg
R2V0UnVudGltZUVuYWJsZWRTdGF0aWNQcm9wZXJ0aWVzCiAgICAgICAgIH0KICAgICB9CiAKLSAg
ICBteSBAb3BlcmF0aW9ucyA9IEB7JGludGVyZmFjZS0+b3BlcmF0aW9uc307Ci0gICAgcHVzaChA
b3BlcmF0aW9ucywgQHskaW50ZXJmYWNlLT5pdGVyYWJsZS0+b3BlcmF0aW9uc30pIGlmIElzS2V5
VmFsdWVJdGVyYWJsZUludGVyZmFjZSgkaW50ZXJmYWNlKTsKLSAgICBwdXNoKEBvcGVyYXRpb25z
LCBAeyRpbnRlcmZhY2UtPm1hcExpa2UtPm9wZXJhdGlvbnN9KSBpZiAkaW50ZXJmYWNlLT5tYXBM
aWtlOwotICAgIHB1c2goQG9wZXJhdGlvbnMsIEB7JGludGVyZmFjZS0+c2V0TGlrZS0+b3BlcmF0
aW9uc30pIGlmICRpbnRlcmZhY2UtPnNldExpa2U7Ci0gICAgZm9yZWFjaCBteSAkb3BlcmF0aW9u
IChAb3BlcmF0aW9ucykgeworICAgIGZvcmVhY2ggbXkgJG9wZXJhdGlvbiAoQHskaW50ZXJmYWNl
LT5vcGVyYXRpb25zfSkgewogICAgICAgICBuZXh0IGlmICgkb3BlcmF0aW9uLT5leHRlbmRlZEF0
dHJpYnV0ZXMtPntQcml2YXRlSWRlbnRpZmllcn0gYW5kIG5vdCAkb3BlcmF0aW9uLT5leHRlbmRl
ZEF0dHJpYnV0ZXMtPntQdWJsaWNJZGVudGlmaWVyfSk7CiAgICAgICAgIG5leHQgaWYgJG9wZXJh
dGlvbi0+e292ZXJsb2FkSW5kZXh9ICYmICRvcGVyYXRpb24tPntvdmVybG9hZEluZGV4fSA+IDE7
CiAgICAgICAgIG5leHQgaWYgT3BlcmF0aW9uU2hvdWxkQmVPbkluc3RhbmNlKCRpbnRlcmZhY2Us
ICRvcGVyYXRpb24pICE9IDA7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L0lETFBhcnNlci5wbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL0lETFBhcnNlci5wbQkocmV2aXNpb24gMjY3MDQwKQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy9JRExQYXJzZXIucG0JKHdvcmtpbmcgY29weSkKQEAgLTcyLDcgKzcyLDcg
QEAgc3RydWN0KCBJRExJbnRlcmZhY2UgPT4gewogICAgIGFzeW5jSXRlcmFibGUgPT4gJyQnLCAj
IFVzZWQgZm9yIGFzeWNuIGl0ZXJhYmxlIGludGVyZmFjZXMsIG9mIHR5cGUgJ0lETEFzeW5jSXRl
cmFibGUnCiAgICAgbWFwTGlrZSA9PiAnJCcsICMgVXNlZCBmb3IgbWFwTGlrZSBpbnRlcmZhY2Vz
LCBvZiB0eXBlICdJRExNYXBMaWtlJwogICAgIHNldExpa2UgPT4gJyQnLCAjIFVzZWQgZm9yIHNl
dExpa2UgaW50ZXJmYWNlcywgb2YgdHlwZSAnSURMU2V0TGlrZScKLSAgICBleHRlbmRlZEF0dHJp
YnV0ZXMgPT4gJyQnLAorICAgIGV4dGVuZGVkQXR0cmlidXRlcyA9PiAnJScsCiB9KTsKIAogIyBV
c2VkIHRvIHJlcHJlc2VudCBhbiBhcmd1bWVudCB0byBhIElETE9wZXJhdGlvbi4KQEAgLTkyLDI3
ICs5MiwyMSBAQCBzdHJ1Y3QoIElETE9wZXJhdGlvbiA9PiB7CiAgICAgYXJndW1lbnRzID0+ICdA
JywgIyBMaXN0IG9mICdJRExBcmd1bWVudCcKICAgICBpc0NvbnN0cnVjdG9yID0+ICckJywKICAg
ICBpc1N0YXRpYyA9PiAnJCcsCi0gICAgaXNJdGVyYWJsZSA9PiAnJCcsCiAgICAgaXNTdHJpbmdp
ZmllciA9PiAnJCcsCi0gICAgaXNNYXBMaWtlID0+ICckJywKLSAgICBpc1NldExpa2UgPT4gJyQn
LAogICAgIHNwZWNpYWxzID0+ICdAJywKICAgICBleHRlbmRlZEF0dHJpYnV0ZXMgPT4gJyUnLAog
fSk7CiAKLQogIyBodHRwczovL2hleWNhbS5naXRodWIuaW8vd2ViaWRsLyNpZGwtYXR0cmlidXRl
cwogc3RydWN0KCBJRExBdHRyaWJ1dGUgPT4gewogICAgIG5hbWUgPT4gJyQnLAogICAgIHR5cGUg
PT4gJ0lETFR5cGUnLAogICAgIGlzQ29uc3RydWN0b3IgPT4gJyQnLAogICAgIGlzU3RhdGljID0+
ICckJywKLSAgICBpc01hcExpa2UgPT4gJyQnLAotICAgIGlzU2V0TGlrZSA9PiAnJCcsCiAgICAg
aXNTdHJpbmdpZmllciA9PiAnJCcsCiAgICAgaXNSZWFkT25seSA9PiAnJCcsCiAgICAgaXNJbmhl
cml0ID0+ICckJywKLSAgICBleHRlbmRlZEF0dHJpYnV0ZXMgPT4gJyQnLAorICAgIGV4dGVuZGVk
QXR0cmlidXRlcyA9PiAnJScsCiB9KTsKIAogIyBodHRwczovL2hleWNhbS5naXRodWIuaW8vd2Vi
aWRsLyNpZGwtaXRlcmFibGUKQEAgLTEyMCw4ICsxMTQsOCBAQCBzdHJ1Y3QoIElETEl0ZXJhYmxl
ID0+IHsKICAgICBpc0tleVZhbHVlID0+ICckJywKICAgICBrZXlUeXBlID0+ICdJRExUeXBlJywK
ICAgICB2YWx1ZVR5cGUgPT4gJ0lETFR5cGUnLAotICAgIG9wZXJhdGlvbnMgPT4gJ0AnLCAjIEl0
ZXJhYmxlIG9wZXJhdGlvbnMgKGVudHJpZXMsIGtleXMsIHZhbHVlcywgW1N5bWJvbC5JdGVyYXRv
cl0sIGZvckVhY2gpCi0gICAgZXh0ZW5kZWRBdHRyaWJ1dGVzID0+ICckJywKKyAgICBvcGVyYXRp
b25zID0+ICdAJywKKyAgICBleHRlbmRlZEF0dHJpYnV0ZXMgPT4gJyUnLAogfSk7CiAKICMgaHR0
cHM6Ly9oZXljYW0uZ2l0aHViLmlvL3dlYmlkbC8jaWRsLWFzeW5jLWl0ZXJhYmxlCkBAIC0xMzAs
NyArMTI0LDcgQEAgc3RydWN0KCBJRExBc3luY0l0ZXJhYmxlID0+IHsKICAgICBrZXlUeXBlID0+
ICdJRExUeXBlJywKICAgICB2YWx1ZVR5cGUgPT4gJ0lETFR5cGUnLAogICAgIGFyZ3VtZW50cyA9
PiAnQCcsICMgTGlzdCBvZiAnSURMQXJndW1lbnQnCi0gICAgZXh0ZW5kZWRBdHRyaWJ1dGVzID0+
ICckJywKKyAgICBleHRlbmRlZEF0dHJpYnV0ZXMgPT4gJyUnLAogfSk7CiAKICMgaHR0cHM6Ly9o
ZXljYW0uZ2l0aHViLmlvL3dlYmlkbC8jZXMtbWFwbGlrZQpAQCAtMTM4LDE4ICsxMzIsMTQgQEAg
c3RydWN0KCBJRExNYXBMaWtlID0+IHsKICAgICBpc1JlYWRPbmx5ID0+ICckJywKICAgICBrZXlU
eXBlID0+ICdJRExUeXBlJywKICAgICB2YWx1ZVR5cGUgPT4gJ0lETFR5cGUnLAotICAgIGF0dHJp
YnV0ZXMgPT4gJ0AnLCAjIE1hcExpa2UgYXR0cmlidXRlcyAoc2l6ZSkKLSAgICBvcGVyYXRpb25z
ID0+ICdAJywgIyBNYXBMaWtlIG9wZXJhdGlvbnMgKGVudHJpZXMsIGtleXMsIHZhbHVlcywgZm9y
RWFjaCwgZ2V0LCBoYXMgYW5kIGlmIG5vdCByZWFkb25seSwgZGVsZXRlLCBzZXQgYW5kIGNsZWFy
KQotICAgIGV4dGVuZGVkQXR0cmlidXRlcyA9PiAnJCcsCisgICAgZXh0ZW5kZWRBdHRyaWJ1dGVz
ID0+ICclJywKIH0pOwogCiAjIGh0dHBzOi8vaGV5Y2FtLmdpdGh1Yi5pby93ZWJpZGwvI2VzLXNl
dGxpa2UKIHN0cnVjdCggSURMU2V0TGlrZSA9PiB7CiAgICAgaXNSZWFkT25seSA9PiAnJCcsCiAg
ICAgaXRlbVR5cGUgPT4gJ0lETFR5cGUnLAotICAgIGF0dHJpYnV0ZXMgPT4gJ0AnLCAjIFNldExp
a2UgYXR0cmlidXRlcyAoc2l6ZSkKLSAgICBvcGVyYXRpb25zID0+ICdAJywgIyBTZXRMaWtlIG9w
ZXJhdGlvbnMgKGVudHJpZXMsIGtleXMsIHZhbHVlcywgZm9yRWFjaCwgaGFzIGFuZCBpZiBub3Qg
cmVhZG9ubHksIGRlbGV0ZSwgc2V0IGFuZCBjbGVhcikKLSAgICBleHRlbmRlZEF0dHJpYnV0ZXMg
PT4gJyQnLAorICAgIGV4dGVuZGVkQXR0cmlidXRlcyA9PiAnJScsCiB9KTsKIAogIyBodHRwczov
L2hleWNhbS5naXRodWIuaW8vd2ViaWRsLyNpZGwtY29uc3RhbnRzCkBAIC0xNTcsNyArMTQ3LDcg
QEAgc3RydWN0KCBJRExDb25zdGFudCA9PiB7CiAgICAgbmFtZSA9PiAnJCcsCiAgICAgdHlwZSA9
PiAnSURMVHlwZScsCiAgICAgdmFsdWUgPT4gJyQnLAotICAgIGV4dGVuZGVkQXR0cmlidXRlcyA9
PiAnJCcsCisgICAgZXh0ZW5kZWRBdHRyaWJ1dGVzID0+ICclJywKIH0pOwogCiAjIGh0dHBzOi8v
aGV5Y2FtLmdpdGh1Yi5pby93ZWJpZGwvI2lkbC1lbnVtcwpAQCAtMTY1LDcgKzE1NSw3IEBAIHN0
cnVjdCggSURMRW51bSA9PiB7CiAgICAgbmFtZSA9PiAnJCcsCiAgICAgdHlwZSA9PiAnSURMVHlw
ZScsCiAgICAgdmFsdWVzID0+ICdAJywKLSAgICBleHRlbmRlZEF0dHJpYnV0ZXMgPT4gJyQnLAor
ICAgIGV4dGVuZGVkQXR0cmlidXRlcyA9PiAnJScsCiB9KTsKIAogIyBodHRwczovL2hleWNhbS5n
aXRodWIuaW8vd2ViaWRsLyNkZm4tZGljdGlvbmFyeS1tZW1iZXIKQEAgLTE3NCw3ICsxNjQsNyBA
QCBzdHJ1Y3QoIElETERpY3Rpb25hcnlNZW1iZXIgPT4gewogICAgIHR5cGUgPT4gJ0lETFR5cGUn
LAogICAgIGlzUmVxdWlyZWQgPT4gJyQnLAogICAgIGRlZmF1bHQgPT4gJyQnLAotICAgIGV4dGVu
ZGVkQXR0cmlidXRlcyA9PiAnJCcsCisgICAgZXh0ZW5kZWRBdHRyaWJ1dGVzID0+ICclJywKIH0p
OwogCiAjIGh0dHBzOi8vaGV5Y2FtLmdpdGh1Yi5pby93ZWJpZGwvI2lkbC1kaWN0aW9uYXJpZXMK
QEAgLTE4MywxNCArMTczLDE0IEBAIHN0cnVjdCggSURMRGljdGlvbmFyeSA9PiB7CiAgICAgcGFy
ZW50VHlwZSA9PiAnSURMVHlwZScsCiAgICAgbWVtYmVycyA9PiAnQCcsICMgTGlzdCBvZiAnSURM
RGljdGlvbmFyeU1lbWJlcicKICAgICBpc1BhcnRpYWwgPT4gJyQnLCAjIFVzZWQgZm9yIHBhcnRp
YWwgZGljdGlvbmFyaWVzCi0gICAgZXh0ZW5kZWRBdHRyaWJ1dGVzID0+ICckJywKKyAgICBleHRl
bmRlZEF0dHJpYnV0ZXMgPT4gJyUnLAogfSk7CiAKICMgaHR0cHM6Ly9oZXljYW0uZ2l0aHViLmlv
L3dlYmlkbC8jaWRsLWNhbGxiYWNrLWZ1bmN0aW9ucwogc3RydWN0KCBJRExDYWxsYmFja0Z1bmN0
aW9uID0+IHsKICAgICB0eXBlID0+ICckJywKICAgICBvcGVyYXRpb24gPT4gJ0lETE9wZXJhdGlv
bicsCi0gICAgZXh0ZW5kZWRBdHRyaWJ1dGVzID0+ICckJywKKyAgICBleHRlbmRlZEF0dHJpYnV0
ZXMgPT4gJyUnLAogfSk7CiAKICMgaHR0cHM6Ly9oZXljYW0uZ2l0aHViLmlvL3dlYmlkbC8jaWRs
LW5hbWVzcGFjZXMKQEAgLTE5OSwxNCArMTg5LDE0IEBAIHN0cnVjdCggSURMTmFtZXNwYWNlID0+
IHsKICAgICBvcGVyYXRpb25zID0+ICdAJywgIyBMaXN0IG9mICdJRExPcGVyYXRpb24nCiAgICAg
YXR0cmlidXRlcyA9PiAnQCcsICMgTGlzdCBvZiAnSURMQXR0cmlidXRlJwogICAgIGlzUGFydGlh
bCA9PiAnJCcsICMgVXNlZCBmb3IgcGFydGlhbCBuYW1lc3BhY2VzCi0gICAgZXh0ZW5kZWRBdHRy
aWJ1dGVzID0+ICckJywKKyAgICBleHRlbmRlZEF0dHJpYnV0ZXMgPT4gJyUnLAogfSk7CiAKICMg
aHR0cHM6Ly9oZXljYW0uZ2l0aHViLmlvL3dlYmlkbC8jaW5jbHVkZXMtc3RhdGVtZW50CiBzdHJ1
Y3QoIElETEluY2x1ZGVzU3RhdGVtZW50ID0+IHsKICAgICBpbnRlcmZhY2VJZGVudGlmaWVyID0+
ICckJywKICAgICBtaXhpbklkZW50aWZpZXIgPT4gJyQnLAotICAgIGV4dGVuZGVkQXR0cmlidXRl
cyA9PiAnJCcsCisgICAgZXh0ZW5kZWRBdHRyaWJ1dGVzID0+ICclJywKIH0pOwogCiAjIGh0dHBz
Oi8vaGV5Y2FtLmdpdGh1Yi5pby93ZWJpZGwvI2lkbC10eXBlZGVmcwpAQCAtNTg4LDEwICs1Nzgs
NyBAQCBzdWIgY2xvbmVPcGVyYXRpb24KIAogICAgICRjbG9uZWRPcGVyYXRpb24tPmlzQ29uc3Ry
dWN0b3IoJG9wZXJhdGlvbi0+aXNDb25zdHJ1Y3Rvcik7CiAgICAgJGNsb25lZE9wZXJhdGlvbi0+
aXNTdGF0aWMoJG9wZXJhdGlvbi0+aXNTdGF0aWMpOwotICAgICRjbG9uZWRPcGVyYXRpb24tPmlz
SXRlcmFibGUoJG9wZXJhdGlvbi0+aXNJdGVyYWJsZSk7CiAgICAgJGNsb25lZE9wZXJhdGlvbi0+
aXNTdHJpbmdpZmllcigkb3BlcmF0aW9uLT5pc1N0cmluZ2lmaWVyKTsKLSAgICAkY2xvbmVkT3Bl
cmF0aW9uLT5pc01hcExpa2UoJG9wZXJhdGlvbi0+aXNNYXBMaWtlKTsKLSAgICAkY2xvbmVkT3Bl
cmF0aW9uLT5pc1NldExpa2UoJG9wZXJhdGlvbi0+aXNTZXRMaWtlKTsKICAgICAkY2xvbmVkT3Bl
cmF0aW9uLT5zcGVjaWFscygkb3BlcmF0aW9uLT5zcGVjaWFscyk7CiAKICAgICBjb3B5RXh0ZW5k
ZWRBdHRyaWJ1dGVzKCRjbG9uZWRPcGVyYXRpb24tPmV4dGVuZGVkQXR0cmlidXRlcywgJG9wZXJh
dGlvbi0+ZXh0ZW5kZWRBdHRyaWJ1dGVzKTsKQEAgLTcwMyw5ICs2OTAsNiBAQCBzdWIgYXBwbHlU
eXBlZGVmcwogICAgICAgICAgICAgICAgIGlmICgkZGVmaW5pdGlvbi0+aXRlcmFibGUtPnZhbHVl
VHlwZSkgewogICAgICAgICAgICAgICAgICAgICAkZGVmaW5pdGlvbi0+aXRlcmFibGUtPnZhbHVl
VHlwZSgkc2VsZi0+dHlwZUJ5QXBwbHlpbmdUeXBlZGVmcygkZGVmaW5pdGlvbi0+aXRlcmFibGUt
PnZhbHVlVHlwZSkpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBmb3JlYWNo
IG15ICRvcGVyYXRpb24gKEB7JGRlZmluaXRpb24tPml0ZXJhYmxlLT5vcGVyYXRpb25zfSkgewot
ICAgICAgICAgICAgICAgICAgICAkc2VsZi0+YXBwbHlUeXBlZGVmc1RvT3BlcmF0aW9uKCRvcGVy
YXRpb24pOwotICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlm
ICgkZGVmaW5pdGlvbi0+YXN5bmNJdGVyYWJsZSkgewogICAgICAgICAgICAgICAgIGlmICgkZGVm
aW5pdGlvbi0+YXN5bmNJdGVyYWJsZS0+a2V5VHlwZSkgewpAQCAtNzI1LDIzICs3MDksMTEgQEAg
c3ViIGFwcGx5VHlwZWRlZnMKICAgICAgICAgICAgICAgICBpZiAoJGRlZmluaXRpb24tPm1hcExp
a2UtPnZhbHVlVHlwZSkgewogICAgICAgICAgICAgICAgICAgICAkZGVmaW5pdGlvbi0+bWFwTGlr
ZS0+dmFsdWVUeXBlKCRzZWxmLT50eXBlQnlBcHBseWluZ1R5cGVkZWZzKCRkZWZpbml0aW9uLT5t
YXBMaWtlLT52YWx1ZVR5cGUpKTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
Zm9yZWFjaCBteSAkYXR0cmlidXRlIChAeyRkZWZpbml0aW9uLT5tYXBMaWtlLT5hdHRyaWJ1dGVz
fSkgewotICAgICAgICAgICAgICAgICAgICAkYXR0cmlidXRlLT50eXBlKCRzZWxmLT50eXBlQnlB
cHBseWluZ1R5cGVkZWZzKCRhdHRyaWJ1dGUtPnR5cGUpKTsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgZm9yZWFjaCBteSAkb3BlcmF0aW9uIChAeyRkZWZpbml0aW9uLT5tYXBM
aWtlLT5vcGVyYXRpb25zfSkgewotICAgICAgICAgICAgICAgICAgICAkc2VsZi0+YXBwbHlUeXBl
ZGVmc1RvT3BlcmF0aW9uKCRvcGVyYXRpb24pOwotICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIGlmICgkZGVmaW5pdGlvbi0+c2V0TGlrZSkgewogICAgICAgICAg
ICAgICAgIGlmICgkZGVmaW5pdGlvbi0+c2V0TGlrZS0+aXRlbVR5cGUpIHsKICAgICAgICAgICAg
ICAgICAgICAgJGRlZmluaXRpb24tPnNldExpa2UtPml0ZW1UeXBlKCRzZWxmLT50eXBlQnlBcHBs
eWluZ1R5cGVkZWZzKCRkZWZpbml0aW9uLT5zZXRMaWtlLT5pdGVtVHlwZSkpOwogICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICBmb3JlYWNoIG15ICRhdHRyaWJ1dGUgKEB7JGRlZmlu
aXRpb24tPnNldExpa2UtPmF0dHJpYnV0ZXN9KSB7Ci0gICAgICAgICAgICAgICAgICAgICRhdHRy
aWJ1dGUtPnR5cGUoJHNlbGYtPnR5cGVCeUFwcGx5aW5nVHlwZWRlZnMoJGF0dHJpYnV0ZS0+dHlw
ZSkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBmb3JlYWNoIG15ICRvcGVy
YXRpb24gKEB7JGRlZmluaXRpb24tPnNldExpa2UtPm9wZXJhdGlvbnN9KSB7Ci0gICAgICAgICAg
ICAgICAgICAgICRzZWxmLT5hcHBseVR5cGVkZWZzVG9PcGVyYXRpb24oJG9wZXJhdGlvbik7Ci0g
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2lmIChyZWYoJGRl
ZmluaXRpb24pIGVxICJJRExEaWN0aW9uYXJ5IikgewogICAgICAgICAgICAgZm9yZWFjaCBteSAk
bWVtYmVyIChAeyRkZWZpbml0aW9uLT5tZW1iZXJzfSkgewpAQCAtMTMwNSwxMCArMTI3NywxMCBA
QCBzdWIgcGFyc2VQYXJ0aWFsSW50ZXJmYWNlTWVtYmVyCiAgICAgICAgIHJldHVybiAkc2VsZi0+
cGFyc2VBdHRyaWJ1dGVSZXN0KCRleHRlbmRlZEF0dHJpYnV0ZUxpc3QpOwogICAgIH0KICAgICBp
ZiAoJG5leHQtPnZhbHVlKCkgZXEgIm1hcGxpa2UiKSB7Ci0gICAgICAgIHJldHVybiAkc2VsZi0+
cGFyc2VNYXBMaWtlUmVzdCgkZXh0ZW5kZWRBdHRyaWJ1dGVMaXN0LCAwKTsKKyAgICAgICAgcmV0
dXJuICRzZWxmLT5wYXJzZU1hcExpa2VSZXN0KCRleHRlbmRlZEF0dHJpYnV0ZUxpc3QpOwogICAg
IH0KICAgICBpZiAoJG5leHQtPnZhbHVlKCkgZXEgInNldGxpa2UiKSB7Ci0gICAgICAgIHJldHVy
biAkc2VsZi0+cGFyc2VTZXRMaWtlUmVzdCgkZXh0ZW5kZWRBdHRyaWJ1dGVMaXN0LCAwKTsKKyAg
ICAgICAgcmV0dXJuICRzZWxmLT5wYXJzZVNldExpa2VSZXN0KCRleHRlbmRlZEF0dHJpYnV0ZUxp
c3QpOwogICAgIH0KICAgICBpZiAoJG5leHQtPnZhbHVlKCkgZXEgImluaGVyaXQiKSB7CiAgICAg
ICAgIHJldHVybiAkc2VsZi0+cGFyc2VJbmhlcml0QXR0cmlidXRlKCRleHRlbmRlZEF0dHJpYnV0
ZUxpc3QpOwpAQCAtMTc0NSwxMCArMTcxNywxNCBAQCBzdWIgcGFyc2VSZWFkT25seU1lbWJlcgog
ICAgICAgICAgICAgcmV0dXJuICRhdHRyaWJ1dGU7CiAgICAgICAgIH0KICAgICAgICAgaWYgKCRu
ZXh0LT52YWx1ZSgpIGVxICJtYXBsaWtlIikgewotICAgICAgICAgICAgcmV0dXJuICRzZWxmLT5w
YXJzZU1hcExpa2VSZXN0KCRleHRlbmRlZEF0dHJpYnV0ZUxpc3QsIDEpOworICAgICAgICAgICAg
bXkgJG1hcExpa2UgPSAkc2VsZi0+cGFyc2VNYXBMaWtlUmVzdCgkZXh0ZW5kZWRBdHRyaWJ1dGVM
aXN0KTsKKyAgICAgICAgICAgICRtYXBMaWtlLT5pc1JlYWRPbmx5KDEpOworICAgICAgICAgICAg
cmV0dXJuICRtYXBMaWtlOwogICAgICAgICB9CiAgICAgICAgIGlmICgkbmV4dC0+dmFsdWUoKSBl
cSAic2V0bGlrZSIpIHsKLSAgICAgICAgICAgIHJldHVybiAkc2VsZi0+cGFyc2VTZXRMaWtlUmVz
dCgkZXh0ZW5kZWRBdHRyaWJ1dGVMaXN0LCAxKTsKKyAgICAgICAgICAgIG15ICRzZXRMaWtlID0g
JHNlbGYtPnBhcnNlU2V0TGlrZVJlc3QoJGV4dGVuZGVkQXR0cmlidXRlTGlzdCk7CisgICAgICAg
ICAgICAkc2V0TGlrZS0+aXNSZWFkT25seSgxKTsKKyAgICAgICAgICAgIHJldHVybiAkc2V0TGlr
ZTsKICAgICAgICAgfQogICAgIH0KICAgICAkc2VsZi0+YXNzZXJ0VW5leHBlY3RlZFRva2VuKCRu
ZXh0LT52YWx1ZSgpLCBfX0xJTkVfXyk7CkBAIC0yMDgxLDM1NSArMjA1Nyw4NCBAQCBzdWIgcGFy
c2VJdGVyYWJsZVJlc3QKICAgICBteSAkbmV4dCA9ICRzZWxmLT5uZXh0VG9rZW4oKTsKICAgICBp
ZiAoJG5leHQtPnZhbHVlKCkgZXEgIml0ZXJhYmxlIikgewogICAgICAgICAkc2VsZi0+YXNzZXJ0
VG9rZW5WYWx1ZSgkc2VsZi0+Z2V0VG9rZW4oKSwgIml0ZXJhYmxlIiwgX19MSU5FX18pOwotICAg
ICAgICBteSAkaXRlcmFibGVOb2RlID0gJHNlbGYtPnBhcnNlT3B0aW9uYWxJdGVyYWJsZUludGVy
ZmFjZSgkZXh0ZW5kZWRBdHRyaWJ1dGVMaXN0KTsKLSAgICAgICAgJHNlbGYtPmFzc2VydFRva2Vu
VmFsdWUoJHNlbGYtPmdldFRva2VuKCksICI7IiwgX19MSU5FX18pOwotICAgICAgICByZXR1cm4g
JGl0ZXJhYmxlTm9kZTsKLSAgICB9Ci0gICAgJHNlbGYtPmFzc2VydFVuZXhwZWN0ZWRUb2tlbigk
bmV4dC0+dmFsdWUoKSwgX19MSU5FX18pOwotfQogCi1zdWIgcGFyc2VPcHRpb25hbEl0ZXJhYmxl
SW50ZXJmYWNlCi17Ci0gICAgbXkgJHNlbGYgPSBzaGlmdDsKLSAgICBteSAkZXh0ZW5kZWRBdHRy
aWJ1dGVMaXN0ID0gc2hpZnQ7CisgICAgICAgIG15ICRpdGVyYWJsZSA9IElETEl0ZXJhYmxlLT5u
ZXcoKTsKIAotICAgIG15ICRuZXdEYXRhTm9kZSA9IElETEl0ZXJhYmxlLT5uZXcoKTsKKyAgICAg
ICAgJHNlbGYtPmFzc2VydFRva2VuVmFsdWUoJHNlbGYtPmdldFRva2VuKCksICI8IiwgX19MSU5F
X18pOworICAgICAgICBteSAkdHlwZTEgPSAkc2VsZi0+cGFyc2VUeXBlV2l0aEV4dGVuZGVkQXR0
cmlidXRlcygpOwogCi0gICAgJHNlbGYtPmFzc2VydEV4dGVuZGVkQXR0cmlidXRlc1ZhbGlkRm9y
Q29udGV4dCgkZXh0ZW5kZWRBdHRyaWJ1dGVMaXN0LCAiaXRlcmFibGUiKTsKLSAgICAkbmV3RGF0
YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcygkZXh0ZW5kZWRBdHRyaWJ1dGVMaXN0KTsKKyAgICAg
ICAgaWYgKCRzZWxmLT5uZXh0VG9rZW4oKS0+dmFsdWUoKSBlcSAiLCIpIHsKKyAgICAgICAgICAg
ICRzZWxmLT5hc3NlcnRUb2tlblZhbHVlKCRzZWxmLT5nZXRUb2tlbigpLCAiLCIsIF9fTElORV9f
KTsKIAotICAgICRzZWxmLT5hc3NlcnRUb2tlblZhbHVlKCRzZWxmLT5nZXRUb2tlbigpLCAiPCIs
IF9fTElORV9fKTsKLSAgICBteSAkdHlwZTEgPSAkc2VsZi0+cGFyc2VUeXBlV2l0aEV4dGVuZGVk
QXR0cmlidXRlcygpOworICAgICAgICAgICAgbXkgJHR5cGUyID0gJHNlbGYtPnBhcnNlVHlwZVdp
dGhFeHRlbmRlZEF0dHJpYnV0ZXMoKTsKKyAgICAgICAgICAgICRpdGVyYWJsZS0+aXNLZXlWYWx1
ZSgxKTsKKyAgICAgICAgICAgICRpdGVyYWJsZS0+a2V5VHlwZSgkdHlwZTEpOworICAgICAgICAg
ICAgJGl0ZXJhYmxlLT52YWx1ZVR5cGUoJHR5cGUyKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICRpdGVyYWJsZS0+aXNLZXlWYWx1ZSgwKTsKKyAgICAgICAgICAgICRpdGVyYWJsZS0+
dmFsdWVUeXBlKCR0eXBlMSk7CisgICAgICAgIH0KKyAgICAgICAgJHNlbGYtPmFzc2VydFRva2Vu
VmFsdWUoJHNlbGYtPmdldFRva2VuKCksICI+IiwgX19MSU5FX18pOworICAgICAgICAkc2VsZi0+
YXNzZXJ0VG9rZW5WYWx1ZSgkc2VsZi0+Z2V0VG9rZW4oKSwgIjsiLCBfX0xJTkVfXyk7CiAKLSAg
ICBpZiAoJHNlbGYtPm5leHRUb2tlbigpLT52YWx1ZSgpIGVxICIsIikgewotICAgICAgICAkc2Vs
Zi0+YXNzZXJ0VG9rZW5WYWx1ZSgkc2VsZi0+Z2V0VG9rZW4oKSwgIiwiLCBfX0xJTkVfXyk7Cisg
ICAgICAgICRzZWxmLT5hc3NlcnRFeHRlbmRlZEF0dHJpYnV0ZXNWYWxpZEZvckNvbnRleHQoJGV4
dGVuZGVkQXR0cmlidXRlTGlzdCwgIml0ZXJhYmxlIik7CisgICAgICAgICRpdGVyYWJsZS0+ZXh0
ZW5kZWRBdHRyaWJ1dGVzKCRleHRlbmRlZEF0dHJpYnV0ZUxpc3QpOwogCi0gICAgICAgIG15ICR0
eXBlMiA9ICRzZWxmLT5wYXJzZVR5cGVXaXRoRXh0ZW5kZWRBdHRyaWJ1dGVzKCk7Ci0gICAgICAg
ICRuZXdEYXRhTm9kZS0+aXNLZXlWYWx1ZSgxKTsKLSAgICAgICAgJG5ld0RhdGFOb2RlLT5rZXlU
eXBlKCR0eXBlMSk7Ci0gICAgICAgICRuZXdEYXRhTm9kZS0+dmFsdWVUeXBlKCR0eXBlMik7Ci0g
ICAgfSBlbHNlIHsKLSAgICAgICAgJG5ld0RhdGFOb2RlLT5pc0tleVZhbHVlKDApOwotICAgICAg
ICAkbmV3RGF0YU5vZGUtPnZhbHVlVHlwZSgkdHlwZTEpOworICAgICAgICByZXR1cm4gJGl0ZXJh
YmxlOwogICAgIH0KLSAgICAkc2VsZi0+YXNzZXJ0VG9rZW5WYWx1ZSgkc2VsZi0+Z2V0VG9rZW4o
KSwgIj4iLCBfX0xJTkVfXyk7Ci0KLSAgICAjIEZJWE1FOiBTeW50aGV0aWMgb3BlcmF0aW9ucyBz
aG91bGQgbm90IGJlIGFkZGVkIGR1cmluZyBwYXJzaW5nLiBJbnN0ZWFkLCB0aGUgQ29kZUdlbmVy
YXRvcgotICAgICMgc2hvdWxkIGJlIHJlc3BvbnNpYmxlIGZvciB0aGVtLgotCi0gICAgbXkgJHN5
bWJvbEl0ZXJhdG9yT3BlcmF0aW9uID0gSURMT3BlcmF0aW9uLT5uZXcoKTsKLSAgICAkc3ltYm9s
SXRlcmF0b3JPcGVyYXRpb24tPm5hbWUoIltTeW1ib2wuSXRlcmF0b3JdIik7Ci0gICAgJHN5bWJv
bEl0ZXJhdG9yT3BlcmF0aW9uLT5leHRlbmRlZEF0dHJpYnV0ZXMoJGV4dGVuZGVkQXR0cmlidXRl
TGlzdCk7Ci0gICAgJHN5bWJvbEl0ZXJhdG9yT3BlcmF0aW9uLT5pc0l0ZXJhYmxlKDEpOwotCi0g
ICAgbXkgJGVudHJpZXNPcGVyYXRpb24gPSBJRExPcGVyYXRpb24tPm5ldygpOwotICAgICRlbnRy
aWVzT3BlcmF0aW9uLT5uYW1lKCJlbnRyaWVzIik7Ci0gICAgJGVudHJpZXNPcGVyYXRpb24tPmV4
dGVuZGVkQXR0cmlidXRlcygkZXh0ZW5kZWRBdHRyaWJ1dGVMaXN0KTsKLSAgICAkZW50cmllc09w
ZXJhdGlvbi0+aXNJdGVyYWJsZSgxKTsKLQotICAgIG15ICRrZXlzT3BlcmF0aW9uID0gSURMT3Bl
cmF0aW9uLT5uZXcoKTsKLSAgICAka2V5c09wZXJhdGlvbi0+bmFtZSgia2V5cyIpOwotICAgICRr
ZXlzT3BlcmF0aW9uLT5leHRlbmRlZEF0dHJpYnV0ZXMoJGV4dGVuZGVkQXR0cmlidXRlTGlzdCk7
Ci0gICAgJGtleXNPcGVyYXRpb24tPmlzSXRlcmFibGUoMSk7Ci0KLSAgICBteSAkdmFsdWVzT3Bl
cmF0aW9uID0gSURMT3BlcmF0aW9uLT5uZXcoKTsKLSAgICAkdmFsdWVzT3BlcmF0aW9uLT5uYW1l
KCJ2YWx1ZXMiKTsKLSAgICAkdmFsdWVzT3BlcmF0aW9uLT5leHRlbmRlZEF0dHJpYnV0ZXMoJGV4
dGVuZGVkQXR0cmlidXRlTGlzdCk7Ci0gICAgJHZhbHVlc09wZXJhdGlvbi0+aXNJdGVyYWJsZSgx
KTsKLQotICAgIG15ICRmb3JFYWNoT3BlcmF0aW9uID0gSURMT3BlcmF0aW9uLT5uZXcoKTsKLSAg
ICAkZm9yRWFjaE9wZXJhdGlvbi0+bmFtZSgiZm9yRWFjaCIpOwotICAgICRmb3JFYWNoT3BlcmF0
aW9uLT5leHRlbmRlZEF0dHJpYnV0ZXMoJGV4dGVuZGVkQXR0cmlidXRlTGlzdCk7Ci0gICAgJGZv
ckVhY2hPcGVyYXRpb24tPmlzSXRlcmFibGUoMSk7Ci0gICAgbXkgJGZvckVhY2hBcmd1bWVudCA9
IElETEFyZ3VtZW50LT5uZXcoKTsKLSAgICAkZm9yRWFjaEFyZ3VtZW50LT5uYW1lKCJjYWxsYmFj
ayIpOwotICAgICRmb3JFYWNoQXJndW1lbnQtPnR5cGUobWFrZVNpbXBsZVR5cGUoImFueSIpKTsK
LSAgICBwdXNoKEB7JGZvckVhY2hPcGVyYXRpb24tPmFyZ3VtZW50c30sICgkZm9yRWFjaEFyZ3Vt
ZW50KSk7Ci0KLSAgICBwdXNoKEB7JG5ld0RhdGFOb2RlLT5vcGVyYXRpb25zfSwgJHN5bWJvbEl0
ZXJhdG9yT3BlcmF0aW9uKTsKLSAgICBwdXNoKEB7JG5ld0RhdGFOb2RlLT5vcGVyYXRpb25zfSwg
JGVudHJpZXNPcGVyYXRpb24pOwotICAgIHB1c2goQHskbmV3RGF0YU5vZGUtPm9wZXJhdGlvbnN9
LCAka2V5c09wZXJhdGlvbik7Ci0gICAgcHVzaChAeyRuZXdEYXRhTm9kZS0+b3BlcmF0aW9uc30s
ICR2YWx1ZXNPcGVyYXRpb24pOwotICAgIHB1c2goQHskbmV3RGF0YU5vZGUtPm9wZXJhdGlvbnN9
LCAkZm9yRWFjaE9wZXJhdGlvbik7Ci0KLSAgICByZXR1cm4gJG5ld0RhdGFOb2RlOworICAgICRz
ZWxmLT5hc3NlcnRVbmV4cGVjdGVkVG9rZW4oJG5leHQtPnZhbHVlKCksIF9fTElORV9fKTsKIH0K
IAogc3ViIHBhcnNlTWFwTGlrZVJlc3QKIHsKICAgICBteSAkc2VsZiA9IHNoaWZ0OwogICAgIG15
ICRleHRlbmRlZEF0dHJpYnV0ZUxpc3QgPSBzaGlmdDsKLSAgICBteSAkaXNSZWFkT25seSA9IHNo
aWZ0OwogCiAgICAgbXkgJG5leHQgPSAkc2VsZi0+bmV4dFRva2VuKCk7CiAgICAgaWYgKCRuZXh0
LT52YWx1ZSgpIGVxICJtYXBsaWtlIikgewogICAgICAgICAkc2VsZi0+YXNzZXJ0VG9rZW5WYWx1
ZSgkc2VsZi0+Z2V0VG9rZW4oKSwgIm1hcGxpa2UiLCBfX0xJTkVfXyk7Ci0gICAgICAgIG15ICRt
YXBMaWtlTm9kZSA9ICRzZWxmLT5wYXJzZU1hcExpa2VQcm9wZXJ0aWVzKCRleHRlbmRlZEF0dHJp
YnV0ZUxpc3QsICRpc1JlYWRPbmx5KTsKKworICAgICAgICBteSAkbWFwbGlrZSA9IElETE1hcExp
a2UtPm5ldygpOworCisgICAgICAgICRzZWxmLT5hc3NlcnRUb2tlblZhbHVlKCRzZWxmLT5nZXRU
b2tlbigpLCAiPCIsIF9fTElORV9fKTsKKyAgICAgICAgJG1hcGxpa2UtPmtleVR5cGUoJHNlbGYt
PnBhcnNlVHlwZVdpdGhFeHRlbmRlZEF0dHJpYnV0ZXMoKSk7CisgICAgICAgICRzZWxmLT5hc3Nl
cnRUb2tlblZhbHVlKCRzZWxmLT5nZXRUb2tlbigpLCAiLCIsIF9fTElORV9fKTsKKyAgICAgICAg
JG1hcGxpa2UtPnZhbHVlVHlwZSgkc2VsZi0+cGFyc2VUeXBlV2l0aEV4dGVuZGVkQXR0cmlidXRl
cygpKTsKKyAgICAgICAgJHNlbGYtPmFzc2VydFRva2VuVmFsdWUoJHNlbGYtPmdldFRva2VuKCks
ICI+IiwgX19MSU5FX18pOwogICAgICAgICAkc2VsZi0+YXNzZXJ0VG9rZW5WYWx1ZSgkc2VsZi0+
Z2V0VG9rZW4oKSwgIjsiLCBfX0xJTkVfXyk7Ci0gICAgICAgIHJldHVybiAkbWFwTGlrZU5vZGU7
Ci0gICAgfQotICAgICRzZWxmLT5hc3NlcnRVbmV4cGVjdGVkVG9rZW4oJG5leHQtPnZhbHVlKCks
IF9fTElORV9fKTsKLX0KIAotc3ViIHBhcnNlTWFwTGlrZVByb3BlcnRpZXMKLXsKLSAgICBteSAk
c2VsZiA9IHNoaWZ0OwotICAgIG15ICRleHRlbmRlZEF0dHJpYnV0ZUxpc3QgPSBzaGlmdDsKLSAg
ICBteSAkaXNSZWFkT25seSA9IHNoaWZ0OwotCi0gICAgbXkgJG1hcGxpa2UgPSBJRExNYXBMaWtl
LT5uZXcoKTsKLSAgICAkbWFwbGlrZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzKCRleHRlbmRlZEF0dHJp
YnV0ZUxpc3QpOwotICAgICRtYXBsaWtlLT5pc1JlYWRPbmx5KCRpc1JlYWRPbmx5KTsKLQotICAg
ICRzZWxmLT5hc3NlcnRUb2tlblZhbHVlKCRzZWxmLT5nZXRUb2tlbigpLCAiPCIsIF9fTElORV9f
KTsKLSAgICAkbWFwbGlrZS0+a2V5VHlwZSgkc2VsZi0+cGFyc2VUeXBlV2l0aEV4dGVuZGVkQXR0
cmlidXRlcygpKTsKLSAgICAkc2VsZi0+YXNzZXJ0VG9rZW5WYWx1ZSgkc2VsZi0+Z2V0VG9rZW4o
KSwgIiwiLCBfX0xJTkVfXyk7Ci0gICAgJG1hcGxpa2UtPnZhbHVlVHlwZSgkc2VsZi0+cGFyc2VU
eXBlV2l0aEV4dGVuZGVkQXR0cmlidXRlcygpKTsKLSAgICAkc2VsZi0+YXNzZXJ0VG9rZW5WYWx1
ZSgkc2VsZi0+Z2V0VG9rZW4oKSwgIj4iLCBfX0xJTkVfXyk7Ci0KLSAgICAjIEZJWE1FOiBTeW50
aGV0aWMgb3BlcmF0aW9ucyBzaG91bGQgbm90IGJlIGFkZGVkIGR1cmluZyBwYXJzaW5nLiBJbnN0
ZWFkLCB0aGUgQ29kZUdlbmVyYXRvcgotICAgICMgc2hvdWxkIGJlIHJlc3BvbnNpYmxlIGZvciB0
aGVtLgotCi0gICAgbXkgJG5vdEVudW1lcmFibGVFeHRlbmRlZEF0dHJpYnV0ZUxpc3QgPSAkZXh0
ZW5kZWRBdHRyaWJ1dGVMaXN0OwotICAgICRub3RFbnVtZXJhYmxlRXh0ZW5kZWRBdHRyaWJ1dGVM
aXN0LT57Tm90RW51bWVyYWJsZX0gPSAxOwotCi0gICAgbXkgJHNpemVBdHRyaWJ1dGUgPSBJRExB
dHRyaWJ1dGUtPm5ldygpOwotICAgICRzaXplQXR0cmlidXRlLT5uYW1lKCJzaXplIik7Ci0gICAg
JHNpemVBdHRyaWJ1dGUtPmlzTWFwTGlrZSgxKTsKLSAgICAkc2l6ZUF0dHJpYnV0ZS0+ZXh0ZW5k
ZWRBdHRyaWJ1dGVzKCRleHRlbmRlZEF0dHJpYnV0ZUxpc3QpOwotICAgICRzaXplQXR0cmlidXRl
LT5pc1JlYWRPbmx5KDEpOwotICAgICRzaXplQXR0cmlidXRlLT50eXBlKG1ha2VTaW1wbGVUeXBl
KCJhbnkiKSk7Ci0gICAgcHVzaChAeyRtYXBsaWtlLT5hdHRyaWJ1dGVzfSwgJHNpemVBdHRyaWJ1
dGUpOwotCi0gICAgbXkgJGdldE9wZXJhdGlvbiA9IElETE9wZXJhdGlvbi0+bmV3KCk7Ci0gICAg
JGdldE9wZXJhdGlvbi0+bmFtZSgiZ2V0Iik7Ci0gICAgJGdldE9wZXJhdGlvbi0+aXNNYXBMaWtl
KDEpOwotICAgIG15ICRnZXRBcmd1bWVudCA9IElETEFyZ3VtZW50LT5uZXcoKTsKLSAgICAkZ2V0
QXJndW1lbnQtPm5hbWUoImtleSIpOwotICAgICRnZXRBcmd1bWVudC0+dHlwZSgkbWFwbGlrZS0+
a2V5VHlwZSk7Ci0gICAgJGdldEFyZ3VtZW50LT5leHRlbmRlZEF0dHJpYnV0ZXMoJGV4dGVuZGVk
QXR0cmlidXRlTGlzdCk7Ci0gICAgcHVzaChAeyRnZXRPcGVyYXRpb24tPmFyZ3VtZW50c30sICgk
Z2V0QXJndW1lbnQpKTsKLSAgICAkZ2V0T3BlcmF0aW9uLT5leHRlbmRlZEF0dHJpYnV0ZXMoJG5v
dEVudW1lcmFibGVFeHRlbmRlZEF0dHJpYnV0ZUxpc3QpOwotICAgICRnZXRPcGVyYXRpb24tPnR5
cGUobWFrZVNpbXBsZVR5cGUoImFueSIpKTsKLQotICAgIG15ICRoYXNPcGVyYXRpb24gPSBJRExP
cGVyYXRpb24tPm5ldygpOwotICAgICRoYXNPcGVyYXRpb24tPm5hbWUoImhhcyIpOwotICAgICRo
YXNPcGVyYXRpb24tPmlzTWFwTGlrZSgxKTsKLSAgICBteSAkaGFzQXJndW1lbnQgPSBJRExBcmd1
bWVudC0+bmV3KCk7Ci0gICAgJGhhc0FyZ3VtZW50LT5uYW1lKCJrZXkiKTsKLSAgICAkaGFzQXJn
dW1lbnQtPnR5cGUoJG1hcGxpa2UtPmtleVR5cGUpOwotICAgICRoYXNBcmd1bWVudC0+ZXh0ZW5k
ZWRBdHRyaWJ1dGVzKCRleHRlbmRlZEF0dHJpYnV0ZUxpc3QpOwotICAgIHB1c2goQHskaGFzT3Bl
cmF0aW9uLT5hcmd1bWVudHN9LCAoJGhhc0FyZ3VtZW50KSk7Ci0gICAgJGhhc09wZXJhdGlvbi0+
ZXh0ZW5kZWRBdHRyaWJ1dGVzKCRub3RFbnVtZXJhYmxlRXh0ZW5kZWRBdHRyaWJ1dGVMaXN0KTsK
LSAgICAkaGFzT3BlcmF0aW9uLT50eXBlKG1ha2VTaW1wbGVUeXBlKCJhbnkiKSk7Ci0KLSAgICBt
eSAkZW50cmllc09wZXJhdGlvbiA9IElETE9wZXJhdGlvbi0+bmV3KCk7Ci0gICAgJGVudHJpZXNP
cGVyYXRpb24tPm5hbWUoImVudHJpZXMiKTsKLSAgICAkZW50cmllc09wZXJhdGlvbi0+aXNNYXBM
aWtlKDEpOwotICAgICRlbnRyaWVzT3BlcmF0aW9uLT5leHRlbmRlZEF0dHJpYnV0ZXMoJG5vdEVu
dW1lcmFibGVFeHRlbmRlZEF0dHJpYnV0ZUxpc3QpOwotICAgICRlbnRyaWVzT3BlcmF0aW9uLT50
eXBlKG1ha2VTaW1wbGVUeXBlKCJhbnkiKSk7Ci0KLSAgICBteSAka2V5c09wZXJhdGlvbiA9IElE
TE9wZXJhdGlvbi0+bmV3KCk7Ci0gICAgJGtleXNPcGVyYXRpb24tPm5hbWUoImtleXMiKTsKLSAg
ICAka2V5c09wZXJhdGlvbi0+aXNNYXBMaWtlKDEpOwotICAgICRrZXlzT3BlcmF0aW9uLT5leHRl
bmRlZEF0dHJpYnV0ZXMoJG5vdEVudW1lcmFibGVFeHRlbmRlZEF0dHJpYnV0ZUxpc3QpOwotICAg
ICRrZXlzT3BlcmF0aW9uLT50eXBlKG1ha2VTaW1wbGVUeXBlKCJhbnkiKSk7Ci0KLSAgICBteSAk
dmFsdWVzT3BlcmF0aW9uID0gSURMT3BlcmF0aW9uLT5uZXcoKTsKLSAgICAkdmFsdWVzT3BlcmF0
aW9uLT5uYW1lKCJ2YWx1ZXMiKTsKLSAgICAkdmFsdWVzT3BlcmF0aW9uLT5pc01hcExpa2UoMSk7
Ci0gICAgJHZhbHVlc09wZXJhdGlvbi0+ZXh0ZW5kZWRBdHRyaWJ1dGVzKCRleHRlbmRlZEF0dHJp
YnV0ZUxpc3QpOwotICAgICR2YWx1ZXNPcGVyYXRpb24tPmV4dGVuZGVkQXR0cmlidXRlcy0+e05v
dEVudW1lcmFibGV9ID0gMTsKLSAgICAkdmFsdWVzT3BlcmF0aW9uLT50eXBlKG1ha2VTaW1wbGVU
eXBlKCJhbnkiKSk7Ci0KLSAgICBteSAkZm9yRWFjaE9wZXJhdGlvbiA9IElETE9wZXJhdGlvbi0+
bmV3KCk7Ci0gICAgJGZvckVhY2hPcGVyYXRpb24tPm5hbWUoImZvckVhY2giKTsKLSAgICAkZm9y
RWFjaE9wZXJhdGlvbi0+aXNNYXBMaWtlKDEpOwotICAgICRmb3JFYWNoT3BlcmF0aW9uLT5leHRl
bmRlZEF0dHJpYnV0ZXMoe30pOwotICAgICRmb3JFYWNoT3BlcmF0aW9uLT50eXBlKG1ha2VTaW1w
bGVUeXBlKCJhbnkiKSk7Ci0gICAgbXkgJGZvckVhY2hBcmd1bWVudCA9IElETEFyZ3VtZW50LT5u
ZXcoKTsKLSAgICAkZm9yRWFjaEFyZ3VtZW50LT5uYW1lKCJjYWxsYmFjayIpOwotICAgICRmb3JF
YWNoQXJndW1lbnQtPnR5cGUobWFrZVNpbXBsZVR5cGUoImFueSIpKTsKLSAgICAkZm9yRWFjaEFy
Z3VtZW50LT5leHRlbmRlZEF0dHJpYnV0ZXMoJGV4dGVuZGVkQXR0cmlidXRlTGlzdCk7Ci0gICAg
cHVzaChAeyRmb3JFYWNoT3BlcmF0aW9uLT5hcmd1bWVudHN9LCAoJGZvckVhY2hBcmd1bWVudCkp
OwotCi0gICAgcHVzaChAeyRtYXBsaWtlLT5vcGVyYXRpb25zfSwgJGdldE9wZXJhdGlvbik7Ci0g
ICAgcHVzaChAeyRtYXBsaWtlLT5vcGVyYXRpb25zfSwgJGhhc09wZXJhdGlvbik7Ci0gICAgcHVz
aChAeyRtYXBsaWtlLT5vcGVyYXRpb25zfSwgJGVudHJpZXNPcGVyYXRpb24pOwotICAgIHB1c2go
QHskbWFwbGlrZS0+b3BlcmF0aW9uc30sICRrZXlzT3BlcmF0aW9uKTsKLSAgICBwdXNoKEB7JG1h
cGxpa2UtPm9wZXJhdGlvbnN9LCAkdmFsdWVzT3BlcmF0aW9uKTsKLSAgICBwdXNoKEB7JG1hcGxp
a2UtPm9wZXJhdGlvbnN9LCAkZm9yRWFjaE9wZXJhdGlvbik7Ci0KLSAgICByZXR1cm4gJG1hcGxp
a2UgaWYgJGlzUmVhZE9ubHk7Ci0KLSAgICBteSAkc2V0T3BlcmF0aW9uID0gSURMT3BlcmF0aW9u
LT5uZXcoKTsKLSAgICAkc2V0T3BlcmF0aW9uLT5uYW1lKCJzZXQiKTsKLSAgICAkc2V0T3BlcmF0
aW9uLT5pc01hcExpa2UoMSk7Ci0gICAgbXkgJHNldEtleUFyZ3VtZW50ID0gSURMQXJndW1lbnQt
Pm5ldygpOwotICAgICRzZXRLZXlBcmd1bWVudC0+bmFtZSgia2V5Iik7Ci0gICAgJHNldEtleUFy
Z3VtZW50LT50eXBlKCRtYXBsaWtlLT5rZXlUeXBlKTsKLSAgICAkc2V0S2V5QXJndW1lbnQtPmV4
dGVuZGVkQXR0cmlidXRlcygkZXh0ZW5kZWRBdHRyaWJ1dGVMaXN0KTsKLSAgICBteSAkc2V0VmFs
dWVBcmd1bWVudCA9IElETEFyZ3VtZW50LT5uZXcoKTsKLSAgICAkc2V0VmFsdWVBcmd1bWVudC0+
bmFtZSgidmFsdWUiKTsKLSAgICAkc2V0VmFsdWVBcmd1bWVudC0+dHlwZSgkbWFwbGlrZS0+dmFs
dWVUeXBlKTsKLSAgICAkc2V0VmFsdWVBcmd1bWVudC0+ZXh0ZW5kZWRBdHRyaWJ1dGVzKCRleHRl
bmRlZEF0dHJpYnV0ZUxpc3QpOwotICAgIHB1c2goQHskc2V0T3BlcmF0aW9uLT5hcmd1bWVudHN9
LCAoJHNldEtleUFyZ3VtZW50KSk7Ci0gICAgcHVzaChAeyRzZXRPcGVyYXRpb24tPmFyZ3VtZW50
c30sICgkc2V0VmFsdWVBcmd1bWVudCkpOwotICAgICRzZXRPcGVyYXRpb24tPmV4dGVuZGVkQXR0
cmlidXRlcygkbm90RW51bWVyYWJsZUV4dGVuZGVkQXR0cmlidXRlTGlzdCk7Ci0gICAgJHNldE9w
ZXJhdGlvbi0+dHlwZShtYWtlU2ltcGxlVHlwZSgiYW55IikpOwotCi0gICAgbXkgJGNsZWFyT3Bl
cmF0aW9uID0gSURMT3BlcmF0aW9uLT5uZXcoKTsKLSAgICAkY2xlYXJPcGVyYXRpb24tPm5hbWUo
ImNsZWFyIik7Ci0gICAgJGNsZWFyT3BlcmF0aW9uLT5pc01hcExpa2UoMSk7Ci0gICAgJGNsZWFy
T3BlcmF0aW9uLT5leHRlbmRlZEF0dHJpYnV0ZXMoJG5vdEVudW1lcmFibGVFeHRlbmRlZEF0dHJp
YnV0ZUxpc3QpOwotICAgICRjbGVhck9wZXJhdGlvbi0+dHlwZShtYWtlU2ltcGxlVHlwZSgidW5k
ZWZpbmVkIikpOwotCi0gICAgbXkgJGRlbGV0ZU9wZXJhdGlvbiA9IElETE9wZXJhdGlvbi0+bmV3
KCk7Ci0gICAgJGRlbGV0ZU9wZXJhdGlvbi0+bmFtZSgiZGVsZXRlIik7Ci0gICAgJGRlbGV0ZU9w
ZXJhdGlvbi0+aXNNYXBMaWtlKDEpOwotICAgIG15ICRkZWxldGVBcmd1bWVudCA9IElETEFyZ3Vt
ZW50LT5uZXcoKTsKLSAgICAkZGVsZXRlQXJndW1lbnQtPm5hbWUoImtleSIpOwotICAgICRkZWxl
dGVBcmd1bWVudC0+dHlwZSgkbWFwbGlrZS0+a2V5VHlwZSk7Ci0gICAgJGRlbGV0ZUFyZ3VtZW50
LT5leHRlbmRlZEF0dHJpYnV0ZXMoJGV4dGVuZGVkQXR0cmlidXRlTGlzdCk7Ci0gICAgcHVzaChA
eyRkZWxldGVPcGVyYXRpb24tPmFyZ3VtZW50c30sICgkZGVsZXRlQXJndW1lbnQpKTsKLSAgICAk
ZGVsZXRlT3BlcmF0aW9uLT5leHRlbmRlZEF0dHJpYnV0ZXMoJG5vdEVudW1lcmFibGVFeHRlbmRl
ZEF0dHJpYnV0ZUxpc3QpOwotICAgICRkZWxldGVPcGVyYXRpb24tPnR5cGUobWFrZVNpbXBsZVR5
cGUoImFueSIpKTsKLQotICAgIHB1c2goQHskbWFwbGlrZS0+b3BlcmF0aW9uc30sICRzZXRPcGVy
YXRpb24pOwotICAgIHB1c2goQHskbWFwbGlrZS0+b3BlcmF0aW9uc30sICRjbGVhck9wZXJhdGlv
bik7Ci0gICAgcHVzaChAeyRtYXBsaWtlLT5vcGVyYXRpb25zfSwgJGRlbGV0ZU9wZXJhdGlvbik7
CisgICAgICAgICRzZWxmLT5hc3NlcnRFeHRlbmRlZEF0dHJpYnV0ZXNWYWxpZEZvckNvbnRleHQo
JGV4dGVuZGVkQXR0cmlidXRlTGlzdCwgIm1hcC1saWtlIik7CisgICAgICAgICRtYXBsaWtlLT5l
eHRlbmRlZEF0dHJpYnV0ZXMoJGV4dGVuZGVkQXR0cmlidXRlTGlzdCk7CiAKLSAgICByZXR1cm4g
JG1hcGxpa2U7CisgICAgICAgIHJldHVybiAkbWFwbGlrZTsKKyAgICB9CisgICAgJHNlbGYtPmFz
c2VydFVuZXhwZWN0ZWRUb2tlbigkbmV4dC0+dmFsdWUoKSwgX19MSU5FX18pOwogfQogCiBzdWIg
cGFyc2VTZXRMaWtlUmVzdAogewogICAgIG15ICRzZWxmID0gc2hpZnQ7CiAgICAgbXkgJGV4dGVu
ZGVkQXR0cmlidXRlTGlzdCA9IHNoaWZ0OwotICAgIG15ICRpc1JlYWRPbmx5ID0gc2hpZnQ7CiAK
ICAgICBteSAkbmV4dCA9ICRzZWxmLT5uZXh0VG9rZW4oKTsKICAgICBpZiAoJG5leHQtPnZhbHVl
KCkgZXEgInNldGxpa2UiKSB7CiAgICAgICAgICRzZWxmLT5hc3NlcnRUb2tlblZhbHVlKCRzZWxm
LT5nZXRUb2tlbigpLCAic2V0bGlrZSIsIF9fTElORV9fKTsKLSAgICAgICAgbXkgJHNldExpa2VO
b2RlID0gJHNlbGYtPnBhcnNlU2V0TGlrZVByb3BlcnRpZXMoJGV4dGVuZGVkQXR0cmlidXRlTGlz
dCwgJGlzUmVhZE9ubHkpOworICAgICAgICAKKyAgICAgICAgbXkgJHNldGxpa2UgPSBJRExTZXRM
aWtlLT5uZXcoKTsKKworICAgICAgICAkc2VsZi0+YXNzZXJ0VG9rZW5WYWx1ZSgkc2VsZi0+Z2V0
VG9rZW4oKSwgIjwiLCBfX0xJTkVfXyk7CisgICAgICAgICRzZXRsaWtlLT5pdGVtVHlwZSgkc2Vs
Zi0+cGFyc2VUeXBlV2l0aEV4dGVuZGVkQXR0cmlidXRlcygpKTsKKyAgICAgICAgJHNlbGYtPmFz
c2VydFRva2VuVmFsdWUoJHNlbGYtPmdldFRva2VuKCksICI+IiwgX19MSU5FX18pOwogICAgICAg
ICAkc2VsZi0+YXNzZXJ0VG9rZW5WYWx1ZSgkc2VsZi0+Z2V0VG9rZW4oKSwgIjsiLCBfX0xJTkVf
Xyk7Ci0gICAgICAgIHJldHVybiAkc2V0TGlrZU5vZGU7CisKKyAgICAgICAgJHNlbGYtPmFzc2Vy
dEV4dGVuZGVkQXR0cmlidXRlc1ZhbGlkRm9yQ29udGV4dCgkZXh0ZW5kZWRBdHRyaWJ1dGVMaXN0
LCAic2V0LWxpa2UiKTsKKyAgICAgICAgJHNldGxpa2UtPmV4dGVuZGVkQXR0cmlidXRlcygkZXh0
ZW5kZWRBdHRyaWJ1dGVMaXN0KTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiAkc2V0bGlrZTsK
ICAgICB9CiAgICAgJHNlbGYtPmFzc2VydFVuZXhwZWN0ZWRUb2tlbigkbmV4dC0+dmFsdWUoKSwg
X19MSU5FX18pOwogfQogCi1zdWIgcGFyc2VTZXRMaWtlUHJvcGVydGllcwotewotICAgIG15ICRz
ZWxmID0gc2hpZnQ7Ci0gICAgbXkgJGV4dGVuZGVkQXR0cmlidXRlTGlzdCA9IHNoaWZ0OwotICAg
IG15ICRpc1JlYWRPbmx5ID0gc2hpZnQ7Ci0KLSAgICBteSAkc2V0bGlrZSA9IElETFNldExpa2Ut
Pm5ldygpOwotICAgICRzZXRsaWtlLT5leHRlbmRlZEF0dHJpYnV0ZXMoJGV4dGVuZGVkQXR0cmli
dXRlTGlzdCk7Ci0KLSAgICAkc2VsZi0+YXNzZXJ0VG9rZW5WYWx1ZSgkc2VsZi0+Z2V0VG9rZW4o
KSwgIjwiLCBfX0xJTkVfXyk7Ci0gICAgJHNldGxpa2UtPml0ZW1UeXBlKCRzZWxmLT5wYXJzZVR5
cGVXaXRoRXh0ZW5kZWRBdHRyaWJ1dGVzKCkpOwotICAgICRzZWxmLT5hc3NlcnRUb2tlblZhbHVl
KCRzZWxmLT5nZXRUb2tlbigpLCAiPiIsIF9fTElORV9fKTsKLQotICAgICMgRklYTUU6IFN5bnRo
ZXRpYyBvcGVyYXRpb25zIHNob3VsZCBub3QgYmUgYWRkZWQgZHVyaW5nIHBhcnNpbmcuIEluc3Rl
YWQsIHRoZSBDb2RlR2VuZXJhdG9yCi0gICAgIyBzaG91bGQgYmUgcmVzcG9uc2libGUgZm9yIHRo
ZW0uCi0KLSAgICBteSAkbm90RW51bWVyYWJsZUV4dGVuZGVkQXR0cmlidXRlTGlzdCA9ICRleHRl
bmRlZEF0dHJpYnV0ZUxpc3Q7Ci0gICAgJG5vdEVudW1lcmFibGVFeHRlbmRlZEF0dHJpYnV0ZUxp
c3QtPntOb3RFbnVtZXJhYmxlfSA9IDE7Ci0KLSAgICBteSAkc2l6ZUF0dHJpYnV0ZSA9IElETEF0
dHJpYnV0ZS0+bmV3KCk7Ci0gICAgJHNpemVBdHRyaWJ1dGUtPm5hbWUoInNpemUiKTsKLSAgICAk
c2l6ZUF0dHJpYnV0ZS0+aXNTZXRMaWtlKDEpOwotICAgICRzaXplQXR0cmlidXRlLT5leHRlbmRl
ZEF0dHJpYnV0ZXMoJGV4dGVuZGVkQXR0cmlidXRlTGlzdCk7Ci0gICAgJHNpemVBdHRyaWJ1dGUt
PmlzUmVhZE9ubHkoMSk7Ci0gICAgJHNpemVBdHRyaWJ1dGUtPnR5cGUobWFrZVNpbXBsZVR5cGUo
ImFueSIpKTsKLSAgICBwdXNoKEB7JHNldGxpa2UtPmF0dHJpYnV0ZXN9LCAkc2l6ZUF0dHJpYnV0
ZSk7Ci0KLSAgICBteSAkaGFzT3BlcmF0aW9uID0gSURMT3BlcmF0aW9uLT5uZXcoKTsKLSAgICAk
aGFzT3BlcmF0aW9uLT5uYW1lKCJoYXMiKTsKLSAgICAkaGFzT3BlcmF0aW9uLT5pc1NldExpa2Uo
MSk7Ci0gICAgbXkgJGhhc0FyZ3VtZW50ID0gSURMQXJndW1lbnQtPm5ldygpOwotICAgICRoYXNB
cmd1bWVudC0+bmFtZSgia2V5Iik7Ci0gICAgJGhhc0FyZ3VtZW50LT50eXBlKCRzZXRsaWtlLT5p
dGVtVHlwZSk7Ci0gICAgJGhhc0FyZ3VtZW50LT5leHRlbmRlZEF0dHJpYnV0ZXMoJGV4dGVuZGVk
QXR0cmlidXRlTGlzdCk7Ci0gICAgcHVzaChAeyRoYXNPcGVyYXRpb24tPmFyZ3VtZW50c30sICgk
aGFzQXJndW1lbnQpKTsKLSAgICAkaGFzT3BlcmF0aW9uLT5leHRlbmRlZEF0dHJpYnV0ZXMoJG5v
dEVudW1lcmFibGVFeHRlbmRlZEF0dHJpYnV0ZUxpc3QpOwotICAgICRoYXNPcGVyYXRpb24tPnR5
cGUobWFrZVNpbXBsZVR5cGUoImFueSIpKTsKLQotICAgIG15ICRlbnRyaWVzT3BlcmF0aW9uID0g
SURMT3BlcmF0aW9uLT5uZXcoKTsKLSAgICAkZW50cmllc09wZXJhdGlvbi0+bmFtZSgiZW50cmll
cyIpOwotICAgICRlbnRyaWVzT3BlcmF0aW9uLT5pc1NldExpa2UoMSk7Ci0gICAgJGVudHJpZXNP
cGVyYXRpb24tPmV4dGVuZGVkQXR0cmlidXRlcygkbm90RW51bWVyYWJsZUV4dGVuZGVkQXR0cmli
dXRlTGlzdCk7Ci0gICAgJGVudHJpZXNPcGVyYXRpb24tPnR5cGUobWFrZVNpbXBsZVR5cGUoImFu
eSIpKTsKLQotICAgIG15ICRrZXlzT3BlcmF0aW9uID0gSURMT3BlcmF0aW9uLT5uZXcoKTsKLSAg
ICAka2V5c09wZXJhdGlvbi0+bmFtZSgia2V5cyIpOwotICAgICRrZXlzT3BlcmF0aW9uLT5pc1Nl
dExpa2UoMSk7Ci0gICAgJGtleXNPcGVyYXRpb24tPmV4dGVuZGVkQXR0cmlidXRlcygkbm90RW51
bWVyYWJsZUV4dGVuZGVkQXR0cmlidXRlTGlzdCk7Ci0gICAgJGtleXNPcGVyYXRpb24tPnR5cGUo
bWFrZVNpbXBsZVR5cGUoImFueSIpKTsKLQotICAgIG15ICR2YWx1ZXNPcGVyYXRpb24gPSBJRExP
cGVyYXRpb24tPm5ldygpOwotICAgICR2YWx1ZXNPcGVyYXRpb24tPm5hbWUoInZhbHVlcyIpOwot
ICAgICR2YWx1ZXNPcGVyYXRpb24tPmlzU2V0TGlrZSgxKTsKLSAgICAkdmFsdWVzT3BlcmF0aW9u
LT5leHRlbmRlZEF0dHJpYnV0ZXMoJGV4dGVuZGVkQXR0cmlidXRlTGlzdCk7Ci0gICAgJHZhbHVl
c09wZXJhdGlvbi0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Tm90RW51bWVyYWJsZX0gPSAxOwotICAg
ICR2YWx1ZXNPcGVyYXRpb24tPnR5cGUobWFrZVNpbXBsZVR5cGUoImFueSIpKTsKLQotICAgIG15
ICRmb3JFYWNoT3BlcmF0aW9uID0gSURMT3BlcmF0aW9uLT5uZXcoKTsKLSAgICAkZm9yRWFjaE9w
ZXJhdGlvbi0+bmFtZSgiZm9yRWFjaCIpOwotICAgICRmb3JFYWNoT3BlcmF0aW9uLT5pc1NldExp
a2UoMSk7Ci0gICAgbXkgJGZvckVhY2hBcmd1bWVudCA9IElETEFyZ3VtZW50LT5uZXcoKTsKLSAg
ICAkZm9yRWFjaEFyZ3VtZW50LT5uYW1lKCJjYWxsYmFjayIpOwotICAgICRmb3JFYWNoQXJndW1l
bnQtPnR5cGUobWFrZVNpbXBsZVR5cGUoImFueSIpKTsKLSAgICAkZm9yRWFjaEFyZ3VtZW50LT5l
eHRlbmRlZEF0dHJpYnV0ZXMoJGV4dGVuZGVkQXR0cmlidXRlTGlzdCk7Ci0gICAgcHVzaChAeyRm
b3JFYWNoT3BlcmF0aW9uLT5hcmd1bWVudHN9LCAoJGZvckVhY2hBcmd1bWVudCkpOwotICAgICRm
b3JFYWNoT3BlcmF0aW9uLT5leHRlbmRlZEF0dHJpYnV0ZXMoJGV4dGVuZGVkQXR0cmlidXRlTGlz
dCk7Ci0gICAgJGZvckVhY2hPcGVyYXRpb24tPmV4dGVuZGVkQXR0cmlidXRlcy0+e0VudW1lcmFi
bGV9ID0gMTsKLSAgICAkZm9yRWFjaE9wZXJhdGlvbi0+dHlwZShtYWtlU2ltcGxlVHlwZSgiYW55
IikpOwotCi0gICAgcHVzaChAeyRzZXRsaWtlLT5vcGVyYXRpb25zfSwgJGhhc09wZXJhdGlvbik7
Ci0gICAgcHVzaChAeyRzZXRsaWtlLT5vcGVyYXRpb25zfSwgJGVudHJpZXNPcGVyYXRpb24pOwot
ICAgIHB1c2goQHskc2V0bGlrZS0+b3BlcmF0aW9uc30sICRrZXlzT3BlcmF0aW9uKTsKLSAgICBw
dXNoKEB7JHNldGxpa2UtPm9wZXJhdGlvbnN9LCAkdmFsdWVzT3BlcmF0aW9uKTsKLSAgICBwdXNo
KEB7JHNldGxpa2UtPm9wZXJhdGlvbnN9LCAkZm9yRWFjaE9wZXJhdGlvbik7Ci0KLSAgICByZXR1
cm4gJHNldGxpa2UgaWYgJGlzUmVhZE9ubHk7Ci0KLSAgICBteSAkYWRkT3BlcmF0aW9uID0gSURM
T3BlcmF0aW9uLT5uZXcoKTsKLSAgICAkYWRkT3BlcmF0aW9uLT5uYW1lKCJhZGQiKTsKLSAgICAk
YWRkT3BlcmF0aW9uLT5pc1NldExpa2UoMSk7Ci0gICAgbXkgJGFkZEFyZ3VtZW50ID0gSURMQXJn
dW1lbnQtPm5ldygpOwotICAgICRhZGRBcmd1bWVudC0+bmFtZSgia2V5Iik7Ci0gICAgJGFkZEFy
Z3VtZW50LT50eXBlKCRzZXRsaWtlLT5pdGVtVHlwZSk7Ci0gICAgJGFkZEFyZ3VtZW50LT5leHRl
bmRlZEF0dHJpYnV0ZXMoJGV4dGVuZGVkQXR0cmlidXRlTGlzdCk7Ci0gICAgcHVzaChAeyRhZGRP
cGVyYXRpb24tPmFyZ3VtZW50c30sICgkYWRkQXJndW1lbnQpKTsKLSAgICAkYWRkT3BlcmF0aW9u
LT5leHRlbmRlZEF0dHJpYnV0ZXMoJG5vdEVudW1lcmFibGVFeHRlbmRlZEF0dHJpYnV0ZUxpc3Qp
OwotICAgICRhZGRPcGVyYXRpb24tPnR5cGUobWFrZVNpbXBsZVR5cGUoImFueSIpKTsKLQotICAg
IG15ICRjbGVhck9wZXJhdGlvbiA9IElETE9wZXJhdGlvbi0+bmV3KCk7Ci0gICAgJGNsZWFyT3Bl
cmF0aW9uLT5uYW1lKCJjbGVhciIpOwotICAgICRjbGVhck9wZXJhdGlvbi0+aXNTZXRMaWtlKDEp
OwotICAgICRjbGVhck9wZXJhdGlvbi0+ZXh0ZW5kZWRBdHRyaWJ1dGVzKCRub3RFbnVtZXJhYmxl
RXh0ZW5kZWRBdHRyaWJ1dGVMaXN0KTsKLSAgICAkY2xlYXJPcGVyYXRpb24tPnR5cGUobWFrZVNp
bXBsZVR5cGUoInVuZGVmaW5lZCIpKTsKLQotICAgIG15ICRkZWxldGVPcGVyYXRpb24gPSBJRExP
cGVyYXRpb24tPm5ldygpOwotICAgICRkZWxldGVPcGVyYXRpb24tPm5hbWUoImRlbGV0ZSIpOwot
ICAgICRkZWxldGVPcGVyYXRpb24tPmlzU2V0TGlrZSgxKTsKLSAgICBteSAkZGVsZXRlQXJndW1l
bnQgPSBJRExBcmd1bWVudC0+bmV3KCk7Ci0gICAgJGRlbGV0ZUFyZ3VtZW50LT5uYW1lKCJrZXki
KTsKLSAgICAkZGVsZXRlQXJndW1lbnQtPnR5cGUoJHNldGxpa2UtPml0ZW1UeXBlKTsKLSAgICAk
ZGVsZXRlQXJndW1lbnQtPmV4dGVuZGVkQXR0cmlidXRlcygkZXh0ZW5kZWRBdHRyaWJ1dGVMaXN0
KTsKLSAgICBwdXNoKEB7JGRlbGV0ZU9wZXJhdGlvbi0+YXJndW1lbnRzfSwgKCRkZWxldGVBcmd1
bWVudCkpOwotICAgICRkZWxldGVPcGVyYXRpb24tPmV4dGVuZGVkQXR0cmlidXRlcygkbm90RW51
bWVyYWJsZUV4dGVuZGVkQXR0cmlidXRlTGlzdCk7Ci0gICAgJGRlbGV0ZU9wZXJhdGlvbi0+dHlw
ZShtYWtlU2ltcGxlVHlwZSgiYW55IikpOwotCi0gICAgcHVzaChAeyRzZXRsaWtlLT5vcGVyYXRp
b25zfSwgJGFkZE9wZXJhdGlvbik7Ci0gICAgcHVzaChAeyRzZXRsaWtlLT5vcGVyYXRpb25zfSwg
JGNsZWFyT3BlcmF0aW9uKTsKLSAgICBwdXNoKEB7JHNldGxpa2UtPm9wZXJhdGlvbnN9LCAkZGVs
ZXRlT3BlcmF0aW9uKTsKLQotICAgIHJldHVybiAkc2V0bGlrZTsKLX0KLQogc3ViIHBhcnNlT3Bl
cmF0aW9uUmVzdAogewogICAgIG15ICRzZWxmID0gc2hpZnQ7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvQmluZGluZ1Rlc3RHbG9iYWxDb25zdHJ1Y3RvcnMuaWRs
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9CaW5k
aW5nVGVzdEdsb2JhbENvbnN0cnVjdG9ycy5pZGwJKHJldmlzaW9uIDI2NzA0MCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9CaW5kaW5nVGVzdEdsb2JhbENvbnN0cnVj
dG9ycy5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAgcGFydGlhbCBpbnRlcmZh
Y2UgVGVzdEdsb2JhbE9iamVjdCB7CiAgICAgYXR0cmlidXRlIFRlc3RMZWdhY3lGYWN0b3J5RnVu
Y3Rpb25MZWdhY3lGYWN0b3J5RnVuY3Rpb25Db25zdHJ1Y3RvciBBdWRpbzsKICAgICBhdHRyaWJ1
dGUgVGVzdExlZ2FjeU92ZXJyaWRlQnVpbHRJbnNDb25zdHJ1Y3RvciBUZXN0TGVnYWN5T3ZlcnJp
ZGVCdWlsdEluczsKICAgICBhdHRyaWJ1dGUgVGVzdE1hcExpa2VDb25zdHJ1Y3RvciBUZXN0TWFw
TGlrZTsKKyAgICBhdHRyaWJ1dGUgVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnND
b25zdHJ1Y3RvciBUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9uczsKICAgICBhdHRy
aWJ1dGUgVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllckNvbnN0cnVjdG9yIFRl
c3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXI7CiAgICAgYXR0cmlidXRlIFRlc3RO
YW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbkNvbnN0cnVjdG9yIFRlc3ROYW1l
ZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbjsKICAgICBhdHRyaWJ1dGUgVGVzdE5h
bWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyQ29uc3RydWN0b3IgVGVzdE5hbWVkQW5k
SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyOwpAQCAtNTksNiArNjAsNyBAQCBwYXJ0aWFsIGlu
dGVyZmFjZSBUZXN0R2xvYmFsT2JqZWN0IHsKICAgICBhdHRyaWJ1dGUgVGVzdFJlcG9ydEV4dHJh
TWVtb3J5Q29zdENvbnN0cnVjdG9yIFRlc3RSZXBvcnRFeHRyYU1lbW9yeUNvc3Q7CiAgICAgW0Nv
bmRpdGlvbmFsPUNvbmRpdGlvbjF8Q29uZGl0aW9uMl0gYXR0cmlidXRlIFRlc3RTZXJpYWxpemVk
U2NyaXB0VmFsdWVJbnRlcmZhY2VDb25zdHJ1Y3RvciBUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVl
SW50ZXJmYWNlOwogICAgIGF0dHJpYnV0ZSBUZXN0U2V0TGlrZUNvbnN0cnVjdG9yIFRlc3RTZXRM
aWtlOworICAgIGF0dHJpYnV0ZSBUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9uc0Nv
bnN0cnVjdG9yIFRlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zOwogICAgIGF0dHJp
YnV0ZSBUZXN0U3RyaW5naWZpZXJDb25zdHJ1Y3RvciBUZXN0U3RyaW5naWZpZXI7CiAgICAgYXR0
cmlidXRlIFRlc3RTdHJpbmdpZmllckFub255bW91c09wZXJhdGlvbkNvbnN0cnVjdG9yIFRlc3RT
dHJpbmdpZmllckFub255bW91c09wZXJhdGlvbjsKICAgICBhdHRyaWJ1dGUgVGVzdFN0cmluZ2lm
aWVyTmFtZWRPcGVyYXRpb25Db25zdHJ1Y3RvciBUZXN0U3RyaW5naWZpZXJOYW1lZE9wZXJhdGlv
bjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9TdXBwbGVtZW50
YWxEZXBlbmRlbmNpZXMuZGVwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9TdXBwbGVtZW50YWxEZXBlbmRlbmNpZXMuZGVwCShyZXZpc2lvbiAyNjcw
NDApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvU3VwcGxlbWVudGFs
RGVwZW5kZW5jaWVzLmRlcAkod29ya2luZyBjb3B5KQpAQCAtMTQxLDYgKzE0MSw5IEBAIFdlYkRP
TVRlc3RMZWdhY3lPdmVycmlkZUJ1aWx0SW5zLmg6IAogSlNUZXN0TWFwTGlrZS5oOiAKIERPTVRl
c3RNYXBMaWtlLmg6IAogV2ViRE9NVGVzdE1hcExpa2UuaDogCitKU1Rlc3RNYXBMaWtlV2l0aE92
ZXJyaWRkZW5PcGVyYXRpb25zLmg6IAorRE9NVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJh
dGlvbnMuaDogCitXZWJET01UZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucy5oOiAK
IEpTVGVzdE1peGluSW50ZXJmYWNlLmg6IFRlc3RQYXJ0aWFsTWl4aW5JbnRlcmZhY2UuaWRsCiBE
T01UZXN0TWl4aW5JbnRlcmZhY2UuaDogVGVzdFBhcnRpYWxNaXhpbkludGVyZmFjZS5pZGwKIFdl
YkRPTVRlc3RNaXhpbkludGVyZmFjZS5oOiBUZXN0UGFydGlhbE1peGluSW50ZXJmYWNlLmlkbApA
QCAtMjM2LDYgKzIzOSw5IEBAIFdlYkRPTVRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZh
Y2UKIEpTVGVzdFNldExpa2UuaDogCiBET01UZXN0U2V0TGlrZS5oOiAKIFdlYkRPTVRlc3RTZXRM
aWtlLmg6IAorSlNUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucy5oOiAKK0RPTVRl
c3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zLmg6IAorV2ViRE9NVGVzdFNldExpa2VX
aXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMuaDogCiBKU1Rlc3RTdGFuZGFsb25lRGljdGlvbmFyeS5o
OiBUZXN0U3VwcGxlbWVudGFsLmlkbAogRE9NVGVzdFN0YW5kYWxvbmVEaWN0aW9uYXJ5Lmg6IFRl
c3RTdXBwbGVtZW50YWwuaWRsCiBXZWJET01UZXN0U3RhbmRhbG9uZURpY3Rpb25hcnkuaDogVGVz
dFN1cHBsZW1lbnRhbC5pZGwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9UZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucy5pZGwKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RNYXBMaWtlV2l0aE92
ZXJyaWRkZW5PcGVyYXRpb25zLmlkbAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMu
aWRsCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCitpbnRlcmZh
Y2UgVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMgeworICAgIG1hcGxpa2U8RE9N
U3RyaW5nLCBET01TdHJpbmc+OworICAgIAorICAgIGF0dHJpYnV0ZSBsb25nIHNldDsKKyAgICB1
bmRlZmluZWQgY2xlYXIoKTsKK307CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMuaWRsCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0U2V0TGlrZVdp
dGhPdmVycmlkZGVuT3BlcmF0aW9ucy5pZGwJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRp
b25zLmlkbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMxIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworaW50
ZXJmYWNlIFRlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zIHsKKyAgICBzZXRsaWtl
PERPTVN0cmluZz47CisgICAgCisgICAgYXR0cmlidXRlIGxvbmcgYWRkOworICAgIHVuZGVmaW5l
ZCBkZWxldGUoKTsKK307CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0R2xvYmFsT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0R2xvYmFsT2JqZWN0LmNwcAkocmV2aXNp
b24gMjY3MDQwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdEdsb2JhbE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2LDYgKzY2LDcgQEAKICNp
bmNsdWRlICJKU1Rlc3RMZWdhY3lGYWN0b3J5RnVuY3Rpb24uaCIKICNpbmNsdWRlICJKU1Rlc3RM
ZWdhY3lPdmVycmlkZUJ1aWx0SW5zLmgiCiAjaW5jbHVkZSAiSlNUZXN0TWFwTGlrZS5oIgorI2lu
Y2x1ZGUgIkpTVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMuaCIKICNpbmNsdWRl
ICJKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIuaCIKICNpbmNsdWRlICJK
U1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5oIgogI2luY2x1ZGUg
IkpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyLmgiCkBAIC05MCw2ICs5
MSw3IEBACiAjaW5jbHVkZSAiSlNUZXN0UmVhZE9ubHlTZXRMaWtlLmgiCiAjaW5jbHVkZSAiSlNU
ZXN0UmVwb3J0RXh0cmFNZW1vcnlDb3N0LmgiCiAjaW5jbHVkZSAiSlNUZXN0U2V0TGlrZS5oIgor
I2luY2x1ZGUgIkpTVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMuaCIKICNpbmNs
dWRlICJKU1Rlc3RTdHJpbmdpZmllci5oIgogI2luY2x1ZGUgIkpTVGVzdFN0cmluZ2lmaWVyQW5v
bnltb3VzT3BlcmF0aW9uLmgiCiAjaW5jbHVkZSAiSlNUZXN0U3RyaW5naWZpZXJOYW1lZE9wZXJh
dGlvbi5oIgpAQCAtMjQyLDYgKzI0NCw4IEBAIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0R2xv
YmFsT2JqZWN0VGUKIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdExlZ2FjeU92ZXJyaWRl
QnVpbHRJbnNDb25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNW
YWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CiBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEds
b2JhbE9iamVjdFRlc3RNYXBMaWtlQ29uc3RydWN0b3IoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpT
Qzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKIGJvb2wgc2V0SlNUZXN0R2xv
YmFsT2JqZWN0VGVzdE1hcExpa2VDb25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlND
OjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CitKU0M6OkVuY29kZWRKU1Zh
bHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25z
Q29uc3RydWN0b3IoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpT
Qzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE1hcExpa2VX
aXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnNDb25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0Kiwg
SlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CiBKU0M6OkVuY29kZWRK
U1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50
aWZpZXJDb25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1
ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwogYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFt
ZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyQ29uc3RydWN0b3IoSlNDOjpKU0dsb2JhbE9i
amVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwogSlNDOjpF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVy
VGhyb3dpbmdFeGNlcHRpb25Db25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpF
bmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwpAQCAtMjk4LDYgKzMwMiw4IEBAIGJv
b2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFNlcmlhbGl6ZWQKICNlbmRpZgogSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0U2V0TGlrZUNvbnN0cnVjdG9yKEpTQzo6
SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7
CiBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RTZXRMaWtlQ29uc3RydWN0b3IoSlNDOjpK
U0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUp
OworSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0U2V0TGlrZVdpdGhP
dmVycmlkZGVuT3BlcmF0aW9uc0NvbnN0cnVjdG9yKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6
OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdEdsb2Jh
bE9iamVjdFRlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zQ29uc3RydWN0b3IoSlND
OjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFs
dWUpOwogSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0U3RyaW5naWZp
ZXJDb25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwg
SlNDOjpQcm9wZXJ0eU5hbWUpOwogYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0U3RyaW5n
aWZpZXJDb25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1
ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CiBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2Jh
bE9iamVjdFRlc3RTdHJpbmdpZmllckFub255bW91c09wZXJhdGlvbkNvbnN0cnVjdG9yKEpTQzo6
SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7
CkBAIC0zMjUsMTEgKzMzMSwxMSBAQCB1c2luZyBKU1Rlc3RHbG9iYWxPYmplY3RDb25zdHJ1Y3Rv
ciA9IEpTCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgQ29tcGFjdEhhc2hJbmRleCBKU1Rlc3RHbG9i
YWxPYmplY3RUYWJsZUluZGV4WzI2OF0gPSB7CiAgICAgeyAtMSwgLTEgfSwKLSAgICB7IDQ2LCAt
MSB9LAorICAgIHsgNDcsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IDAsIC0xIH0sCiAg
ICAgeyA4LCAtMSB9LAotICAgIHsgNTAsIC0xIH0sCisgICAgeyA1MSwgLTEgfSwKICAgICB7IC0x
LCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKQEAgLTMzNyw3ICszNDMs
NyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IENvbXBhY3RIYXNoSW5kZXggSlNUCiAgICAgeyAtMSwg
LTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCi0gICAgeyA1OSwgLTEgfSwK
KyAgICB7IDYwLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7
IC0xLCAtMSB9LApAQCAtMzQ1LDcgKzM1MSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgQ29tcGFj
dEhhc2hJbmRleCBKU1QKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAt
MSwgLTEgfSwKLSAgICB7IDY3LCAtMSB9LAorICAgIHsgNjksIC0xIH0sCiAgICAgeyAtMSwgLTEg
fSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCkBAIC0zNTksMTMgKzM2NSwxMyBA
QCBzdGF0aWMgY29uc3Qgc3RydWN0IENvbXBhY3RIYXNoSW5kZXggSlNUCiAgICAgeyAtMSwgLTEg
fSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCi0gICAgeyA0MCwgLTEgfSwKKyAg
ICB7IDQxLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0x
LCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKLSAgICB7IDcyLCAtMSB9
LAorICAgIHsgNzQsIC0xIH0sCiAgICAgeyAxOCwgMjYwIH0sCiAgICAgeyAtMSwgLTEgfSwKICAg
ICB7IC0xLCAtMSB9LApAQCAtMzc0LDExICszODAsMTEgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBD
b21wYWN0SGFzaEluZGV4IEpTVAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAg
ICB7IC0xLCAtMSB9LAotICAgIHsgNDQsIC0xIH0sCisgICAgeyA0NSwgLTEgfSwKICAgICB7IDI1
LCAyNTcgfSwKICAgICB7IDEwLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCi0gICAgeyA1MSwgLTEg
fSwKKyAgICB7IDUyLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAg
ICB7IC0xLCAtMSB9LApAQCAtMzg3LDcgKzM5Myw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgQ29t
cGFjdEhhc2hJbmRleCBKU1QKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAg
eyAtMSwgLTEgfSwKLSAgICB7IDQyLCAtMSB9LAorICAgIHsgNDMsIC0xIH0sCiAgICAgeyAtMSwg
LTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCkBAIC00MDgsOCArNDE0LDgg
QEAgc3RhdGljIGNvbnN0IHN0cnVjdCBDb21wYWN0SGFzaEluZGV4IEpTVAogICAgIHsgLTEsIC0x
IH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAotICAgIHsgLTEsIC0xIH0sCi0g
ICAgeyA2MSwgLTEgfSwKKyAgICB7IDM2LCAtMSB9LAorICAgIHsgNjIsIC0xIH0sCiAgICAgeyAt
MSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCkBAIC00MTgsNyArNDI0
LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBDb21wYWN0SGFzaEluZGV4IEpTVAogICAgIHsgLTEs
IC0xIH0sCiAgICAgeyAxNSwgMjU2IH0sCiAgICAgeyAtMSwgLTEgfSwKLSAgICB7IDYyLCAtMSB9
LAorICAgIHsgNjQsIC0xIH0sCiAgICAgeyAyNCwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAg
IHsgLTEsIC0xIH0sCkBAIC00MjgsNyArNDM0LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBDb21w
YWN0SGFzaEluZGV4IEpTVAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7
IC0xLCAtMSB9LAotICAgIHsgNDEsIC0xIH0sCisgICAgeyA0MiwgLTEgfSwKICAgICB7IC0xLCAt
MSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyA0LCAtMSB9LApAQCAtNDM5LDcgKzQ0NSw3IEBA
IHN0YXRpYyBjb25zdCBzdHJ1Y3QgQ29tcGFjdEhhc2hJbmRleCBKU1QKICAgICB7IDMwLCAtMSB9
LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAyLCAyNjcgfSwKLSAgICB7IDQzLCAtMSB9LAorICAg
IHsgNDQsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEs
IC0xIH0sCkBAIC00NTgsMTMgKzQ2NCwxMyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IENvbXBhY3RI
YXNoSW5kZXggSlNUCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IDM0LCAtMSB9LAogICAgIHsgLTEs
IC0xIH0sCi0gICAgeyA0OCwgLTEgfSwKKyAgICB7IDQ5LCAtMSB9LAogICAgIHsgLTEsIC0xIH0s
CiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAg
eyAtMSwgLTEgfSwKLSAgICB7IDU4LCAtMSB9LAorICAgIHsgNTksIC0xIH0sCiAgICAgeyAtMSwg
LTEgfSwKICAgICB7IDE5LCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCkBAIC00NzIsNyArNDc4LDcg
QEAgc3RhdGljIGNvbnN0IHN0cnVjdCBDb21wYWN0SGFzaEluZGV4IEpTVAogICAgIHsgLTEsIC0x
IH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAotICAgIHsgNTMsIC0xIH0sCisg
ICAgeyA1NCwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAx
NiwgLTEgfSwKQEAgLTQ4MiwxMiArNDg4LDEyIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgQ29tcGFj
dEhhc2hJbmRleCBKU1QKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAt
MSwgLTEgfSwKLSAgICB7IDY4LCAtMSB9LAorICAgIHsgNzAsIC0xIH0sCiAgICAgeyAtMSwgLTEg
fSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAzMywgLTEgfSwKLSAg
ICB7IDM3LCAtMSB9LAorICAgIHsgMzgsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IDUs
IC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKQEAgLTQ5OSw3ICs1MDUsNyBAQCBzdGF0aWMgY29uc3Qg
c3RydWN0IENvbXBhY3RIYXNoSW5kZXggSlNUCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IDIxLCAy
NTkgfSwKICAgICB7IC0xLCAtMSB9LAotICAgIHsgNjMsIC0xIH0sCisgICAgeyA2NSwgLTEgfSwK
ICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKQEAgLTUw
OCwxMSArNTE0LDExIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgQ29tcGFjdEhhc2hJbmRleCBKU1QK
ICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKLSAgICB7
IDM5LCAyNjYgfSwKKyAgICB7IDQwLCAyNjYgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgMjIs
IC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKLSAgICB7IDY2LCAtMSB9LAorICAgIHsgNjgsIC0xIH0s
CiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCkBAIC01
MjYsMTIgKzUzMiwxMiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IENvbXBhY3RIYXNoSW5kZXggSlNU
CiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCi0gICAg
eyA3MSwgLTEgfSwKKyAgICB7IDczLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwg
LTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCi0gICAgeyA1MiwgLTEgfSwK
KyAgICB7IDUzLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7
IDMsIC0xIH0sCkBAIC01NDQsNyArNTUwLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBDb21wYWN0
SGFzaEluZGV4IEpTVAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0x
LCAtMSB9LAotICAgIHsgLTEsIC0xIH0sCisgICAgeyA2MywgLTEgfSwKICAgICB7IC0xLCAtMSB9
LAogICAgIHsgMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LApAQCAtNTUzLDEwICs1NTksMTAgQEAg
c3RhdGljIGNvbnN0IHN0cnVjdCBDb21wYWN0SGFzaEluZGV4IEpTVAogICAgIHsgLTEsIC0xIH0s
CiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAotICAgIHsgNTQsIDI2MyB9LAorICAg
IHsgNTUsIDI2MyB9LAogICAgIHsgMTEsIDI2MiB9LAogICAgIHsgLTEsIC0xIH0sCi0gICAgeyA2
NCwgLTEgfSwKKyAgICB7IDY2LCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEg
fSwKICAgICB7IC0xLCAtMSB9LApAQCAtNTY4LDMwICs1NzQsMzAgQEAgc3RhdGljIGNvbnN0IHN0
cnVjdCBDb21wYWN0SGFzaEluZGV4IEpTVAogICAgIHsgMzEsIC0xIH0sCiAgICAgeyAtMSwgLTEg
fSwKICAgICB7IC0xLCAtMSB9LAotICAgIHsgMzYsIC0xIH0sCisgICAgeyAzNywgLTEgfSwKICAg
ICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IDcs
IC0xIH0sCi0gICAgeyA1NiwgLTEgfSwKLSAgICB7IC0xLCAtMSB9LAogICAgIHsgNTcsIC0xIH0s
CiAgICAgeyAtMSwgLTEgfSwKKyAgICB7IDU4LCAtMSB9LAorICAgIHsgLTEsIC0xIH0sCiAgICAg
eyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAyOSwg
MjU4IH0sCiAgICAgeyAzMiwgMjY0IH0sCiAgICAgeyAzNSwgMjYxIH0sCi0gICAgeyAzOCwgLTEg
fSwKLSAgICB7IDQ1LCAtMSB9LAotICAgIHsgNDcsIC0xIH0sCi0gICAgeyA0OSwgLTEgfSwKLSAg
ICB7IDU1LCAtMSB9LAotICAgIHsgNjAsIC0xIH0sCi0gICAgeyA2NSwgLTEgfSwKLSAgICB7IDY5
LCAtMSB9LAotICAgIHsgNzAsIC0xIH0sCisgICAgeyAzOSwgLTEgfSwKKyAgICB7IDQ2LCAtMSB9
LAorICAgIHsgNDgsIC0xIH0sCisgICAgeyA1MCwgLTEgfSwKKyAgICB7IDU2LCAtMSB9LAorICAg
IHsgNjEsIC0xIH0sCisgICAgeyA2NywgLTEgfSwKKyAgICB7IDcxLCAtMSB9LAorICAgIHsgNzIs
IC0xIH0sCiB9OwogCiAKQEAgLTY0NSw2ICs2NTEsNyBAQCBzdGF0aWMgY29uc3QgSGFzaFRhYmxl
VmFsdWUgSlNUZXN0R2xvYmFsCiAgICAgeyAiQXVkaW8iLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
SlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pLCBOb0ludHJpbnNpYywgeyAoaW50cHRy
X3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdEdsb2JhbE9i
amVjdEF1ZGlvQ29uc3RydWN0b3IpLCAoaW50cHRyX3QpIHN0YXRpY19jYXN0PFB1dFByb3BlcnR5
U2xvdDo6UHV0VmFsdWVGdW5jPihzZXRKU1Rlc3RHbG9iYWxPYmplY3RBdWRpb0NvbnN0cnVjdG9y
KSB9IH0sCiAgICAgeyAiVGVzdExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMiLCBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pLCBOb0ludHJpbnNpYywg
eyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVz
dEdsb2JhbE9iamVjdFRlc3RMZWdhY3lPdmVycmlkZUJ1aWx0SW5zQ29uc3RydWN0b3IpLCAoaW50
cHRyX3QpIHN0YXRpY19jYXN0PFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jPihzZXRKU1Rl
c3RHbG9iYWxPYmplY3RUZXN0TGVnYWN5T3ZlcnJpZGVCdWlsdEluc0NvbnN0cnVjdG9yKSB9IH0s
CiAgICAgeyAiVGVzdE1hcExpa2UiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNDOjpQcm9wZXJ0
eUF0dHJpYnV0ZTo6RG9udEVudW0pLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nh
c3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdEdsb2JhbE9iamVjdFRlc3RNYXBM
aWtlQ29uc3RydWN0b3IpLCAoaW50cHRyX3QpIHN0YXRpY19jYXN0PFB1dFByb3BlcnR5U2xvdDo6
UHV0VmFsdWVGdW5jPihzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TWFwTGlrZUNvbnN0cnVjdG9y
KSB9IH0sCisgICAgeyAiVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMiLCBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pLCBOb0lu
dHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1
bmM+KGpzVGVzdEdsb2JhbE9iamVjdFRlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25z
Q29uc3RydWN0b3IpLCAoaW50cHRyX3QpIHN0YXRpY19jYXN0PFB1dFByb3BlcnR5U2xvdDo6UHV0
VmFsdWVGdW5jPihzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVu
T3BlcmF0aW9uc0NvbnN0cnVjdG9yKSB9IH0sCiAgICAgeyAiVGVzdE5hbWVkQW5kSW5kZXhlZFNl
dHRlck5vSWRlbnRpZmllciIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0
cmlidXRlOjpEb250RW51bSksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQ
cm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkQW5k
SW5kZXhlZFNldHRlck5vSWRlbnRpZmllckNvbnN0cnVjdG9yKSwgKGludHB0cl90KSBzdGF0aWNf
Y2FzdDxQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYz4oc2V0SlNUZXN0R2xvYmFsT2JqZWN0
VGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllckNvbnN0cnVjdG9yKSB9IH0sCiAg
ICAgeyAiVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uIiwgc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSwgTm9JbnRy
aW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5j
Pihqc1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNl
cHRpb25Db25zdHJ1Y3RvciksIChpbnRwdHJfdCkgc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90
OjpQdXRWYWx1ZUZ1bmM+KHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZEFuZEluZGV4ZWRT
ZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbkNvbnN0cnVjdG9yKSB9IH0sCiAgICAgeyAiVGVzdE5hbWVk
QW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpT
Qzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90
KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3RHbG9iYWxPYmpl
Y3RUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXJDb25zdHJ1Y3RvciksIChp
bnRwdHJfdCkgc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmM+KHNldEpT
VGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllckNv
bnN0cnVjdG9yKSB9IH0sCkBAIC02NzksNiArNjg2LDcgQEAgc3RhdGljIGNvbnN0IEhhc2hUYWJs
ZVZhbHVlIEpTVGVzdEdsb2JhbAogICAgIHsgMCwgMCwgTm9JbnRyaW5zaWMsIHsgMCwgMCB9IH0s
CiAjZW5kaWYKICAgICB7ICJUZXN0U2V0TGlrZSIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6
OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClz
dGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0R2xvYmFsT2JqZWN0
VGVzdFNldExpa2VDb25zdHJ1Y3RvciksIChpbnRwdHJfdCkgc3RhdGljX2Nhc3Q8UHV0UHJvcGVy
dHlTbG90OjpQdXRWYWx1ZUZ1bmM+KHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RTZXRMaWtlQ29u
c3RydWN0b3IpIH0gfSwKKyAgICB7ICJUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9u
cyIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51
bSksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6Okdl
dFZhbHVlRnVuYz4oanNUZXN0R2xvYmFsT2JqZWN0VGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9w
ZXJhdGlvbnNDb25zdHJ1Y3RvciksIChpbnRwdHJfdCkgc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlT
bG90OjpQdXRWYWx1ZUZ1bmM+KHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RTZXRMaWtlV2l0aE92
ZXJyaWRkZW5PcGVyYXRpb25zQ29uc3RydWN0b3IpIH0gfSwKICAgICB7ICJUZXN0U3RyaW5naWZp
ZXIiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVu
dW0pLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpH
ZXRWYWx1ZUZ1bmM+KGpzVGVzdEdsb2JhbE9iamVjdFRlc3RTdHJpbmdpZmllckNvbnN0cnVjdG9y
KSwgKGludHB0cl90KSBzdGF0aWNfY2FzdDxQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYz4o
c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFN0cmluZ2lmaWVyQ29uc3RydWN0b3IpIH0gfSwKICAg
ICB7ICJUZXN0U3RyaW5naWZpZXJBbm9ueW1vdXNPcGVyYXRpb24iLCBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pLCBOb0ludHJpbnNpYywgeyAo
aW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdEds
b2JhbE9iamVjdFRlc3RTdHJpbmdpZmllckFub255bW91c09wZXJhdGlvbkNvbnN0cnVjdG9yKSwg
KGludHB0cl90KSBzdGF0aWNfY2FzdDxQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYz4oc2V0
SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFN0cmluZ2lmaWVyQW5vbnltb3VzT3BlcmF0aW9uQ29uc3Ry
dWN0b3IpIH0gfSwKICAgICB7ICJUZXN0U3RyaW5naWZpZXJOYW1lZE9wZXJhdGlvbiIsIHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSksIE5vSW50
cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVu
Yz4oanNUZXN0R2xvYmFsT2JqZWN0VGVzdFN0cmluZ2lmaWVyTmFtZWRPcGVyYXRpb25Db25zdHJ1
Y3RvciksIChpbnRwdHJfdCkgc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1
bmM+KHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RTdHJpbmdpZmllck5hbWVkT3BlcmF0aW9uQ29u
c3RydWN0b3IpIH0gfSwKQEAgLTY5Miw3ICs3MDAsNyBAQCBzdGF0aWMgY29uc3QgSGFzaFRhYmxl
VmFsdWUgSlNUZXN0R2xvYmFsCiAgICAgeyAicmVndWxhck9wZXJhdGlvbiIsIHN0YXRpY19jYXN0
PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpGdW5jdGlvbiksIE5vSW50cmluc2lj
LCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxSYXdOYXRpdmVGdW5jdGlvbj4oanNUZXN0R2xvYmFs
T2JqZWN0SW5zdGFuY2VGdW5jdGlvblJlZ3VsYXJPcGVyYXRpb24pLCAoaW50cHRyX3QpICgxKSB9
IH0sCiB9OwogCi1zdGF0aWMgY29uc3QgSGFzaFRhYmxlIEpTVGVzdEdsb2JhbE9iamVjdFRhYmxl
ID0geyA3MywgMjU1LCB0cnVlLCBKU1Rlc3RHbG9iYWxPYmplY3Q6OmluZm8oKSwgSlNUZXN0R2xv
YmFsT2JqZWN0VGFibGVWYWx1ZXMsIEpTVGVzdEdsb2JhbE9iamVjdFRhYmxlSW5kZXggfTsKK3N0
YXRpYyBjb25zdCBIYXNoVGFibGUgSlNUZXN0R2xvYmFsT2JqZWN0VGFibGUgPSB7IDc1LCAyNTUs
IHRydWUsIEpTVGVzdEdsb2JhbE9iamVjdDo6aW5mbygpLCBKU1Rlc3RHbG9iYWxPYmplY3RUYWJs
ZVZhbHVlcywgSlNUZXN0R2xvYmFsT2JqZWN0VGFibGVJbmRleCB9OwogLyogSGFzaCB0YWJsZSBm
b3IgY29uc3RydWN0b3IgKi8KIAogc3RhdGljIGNvbnN0IEhhc2hUYWJsZVZhbHVlIEpTVGVzdEds
b2JhbE9iamVjdENvbnN0cnVjdG9yVGFibGVWYWx1ZXNbXSA9CkBAIC0xNzcyLDYgKzE3ODAsMjkg
QEAgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TWFwTGlrZUNvbgogICAgIHJldHVybiBJ
RExBdHRyaWJ1dGU8SlNUZXN0R2xvYmFsT2JqZWN0Pjo6c2V0PHNldEpTVGVzdEdsb2JhbE9iamVj
dFRlc3RNYXBMaWtlQ29uc3RydWN0b3JTZXR0ZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlz
VmFsdWUsIGVuY29kZWRWYWx1ZSwgIlRlc3RNYXBMaWtlIik7CiB9CiAKK3N0YXRpYyBpbmxpbmUg
SlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0
aW9uc0NvbnN0cnVjdG9yR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0
LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QpCit7CisgICAgVU5VU0VEX1BBUkFNKGxl
eGljYWxHbG9iYWxPYmplY3QpOworICAgIHJldHVybiBKU1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRk
ZW5PcGVyYXRpb25zOjpnZXRDb25zdHJ1Y3RvcihKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2Jq
ZWN0KSwgdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSk7Cit9CisKK0VuY29kZWRKU1ZhbHVlIGpz
VGVzdEdsb2JhbE9iamVjdFRlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zQ29uc3Ry
dWN0b3IoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQoreworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNU
ZXN0R2xvYmFsT2JqZWN0Pjo6Z2V0PGpzVGVzdEdsb2JhbE9iamVjdFRlc3RNYXBMaWtlV2l0aE92
ZXJyaWRkZW5PcGVyYXRpb25zQ29uc3RydWN0b3JHZXR0ZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0
LCB0aGlzVmFsdWUsICJUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucyIpOworfQor
CitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE1hcExpa2VXaXRo
T3ZlcnJpZGRlbk9wZXJhdGlvbnNDb25zdHJ1Y3RvclNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4
aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVl
IHZhbHVlKQoreworICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVj
dCk7CisgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IuCisgICAgcmV0dXJu
IHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWlu
dGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVy
YXRpb25zIiksIHN0cmxlbigiVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMiKSks
IHZhbHVlKTsKK30KKworYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TWFwTGlrZVdpdGhP
dmVycmlkZGVuT3BlcmF0aW9uc0NvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xv
YmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRWYWx1ZSkKK3sKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdEdsb2JhbE9iamVjdD46
OnNldDxzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0
aW9uc0NvbnN0cnVjdG9yU2V0dGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCBl
bmNvZGVkVmFsdWUsICJUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucyIpOworfQor
CiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkQW5kSW5k
ZXhlZFNldHRlck5vSWRlbnRpZmllckNvbnN0cnVjdG9yR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QpCiB7CiAg
ICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOwpAQCAtMjM4Miw2ICsyNDEzLDI5
IEBAIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFNldExpa2VDb24KICAgICByZXR1cm4g
SURMQXR0cmlidXRlPEpTVGVzdEdsb2JhbE9iamVjdD46OnNldDxzZXRKU1Rlc3RHbG9iYWxPYmpl
Y3RUZXN0U2V0TGlrZUNvbnN0cnVjdG9yU2V0dGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhp
c1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJUZXN0U2V0TGlrZSIpOwogfQogCitzdGF0aWMgaW5saW5l
IEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJh
dGlvbnNDb25zdHJ1Y3RvckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVj
dCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0KQoreworICAgIFVOVVNFRF9QQVJBTShs
ZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICByZXR1cm4gSlNUZXN0U2V0TGlrZVdpdGhPdmVycmlk
ZGVuT3BlcmF0aW9uczo6Z2V0Q29uc3RydWN0b3IoSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9i
amVjdCksIHRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCkpOworfQorCitFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RHbG9iYWxPYmplY3RUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9uc0NvbnN0
cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1
ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK3sKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpT
VGVzdEdsb2JhbE9iamVjdD46OmdldDxqc1Rlc3RHbG9iYWxPYmplY3RUZXN0U2V0TGlrZVdpdGhP
dmVycmlkZGVuT3BlcmF0aW9uc0NvbnN0cnVjdG9yR2V0dGVyPigqbGV4aWNhbEdsb2JhbE9iamVj
dCwgdGhpc1ZhbHVlLCAiVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMiKTsKK30K
Kworc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RTZXRMaWtlV2l0
aE92ZXJyaWRkZW5PcGVyYXRpb25zQ29uc3RydWN0b3JTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxl
eGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1
ZSB2YWx1ZSkKK3sKKyAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmpl
Y3QpOworICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgorICAgIHJldHVy
biB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVp
bnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3Bl
cmF0aW9ucyIpLCBzdHJsZW4oIlRlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zIikp
LCB2YWx1ZSk7Cit9CisKK2Jvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFNldExpa2VXaXRo
T3ZlcnJpZGRlbk9wZXJhdGlvbnNDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEds
b2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkVmFsdWUpCit7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RHbG9iYWxPYmplY3Q+
OjpzZXQ8c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJh
dGlvbnNDb25zdHJ1Y3RvclNldHRlcj4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwg
ZW5jb2RlZFZhbHVlLCAiVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMiKTsKK30K
Kwogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RTdHJpbmdpZmll
ckNvbnN0cnVjdG9yR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBK
U1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGxleGlj
YWxHbG9iYWxPYmplY3QpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RNYXBM
aWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TWFwTGlrZVdpdGhPdmVycmlk
ZGVuT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0ODUgQEAKKy8qCisg
ICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0Lgor
ICAgIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwu
IERPIE5PVCBNT0RJRlkhCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgorKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTVGVz
dE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMuaCIKKworI2luY2x1ZGUgIkFjdGl2ZURP
TU9iamVjdC5oIgorI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkpTRE9N
QXR0cmlidXRlLmgiCisjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCisjaW5jbHVkZSAiSlNET01D
b25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGUuaCIKKyNpbmNsdWRlICJKU0RPTUNvbnZlcnRBbnku
aCIKKyNpbmNsdWRlICJKU0RPTUNvbnZlcnROdW1iZXJzLmgiCisjaW5jbHVkZSAiSlNET01Db252
ZXJ0U3RyaW5ncy5oIgorI2luY2x1ZGUgIkpTRE9NRXhjZXB0aW9uSGFuZGxpbmcuaCIKKyNpbmNs
dWRlICJKU0RPTU1hcExpa2UuaCIKKyNpbmNsdWRlICJKU0RPTU9wZXJhdGlvbi5oIgorI2luY2x1
ZGUgIkpTRE9NV3JhcHBlckNhY2hlLmgiCisjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4
dC5oIgorI2luY2x1ZGUgIldlYkNvcmVKU0NsaWVudERhdGEuaCIKKyNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9CdWlsdGluTmFtZXMuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9GdW5jdGlv
blByb3RvdHlwZS5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0hlYXBBbmFseXplci5oPgor
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQ0lubGluZXMuaD4KKyNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9KU0Rlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZS5oPgorI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL1N1YnNwYWNlSW5saW5lcy5oPgorI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4K
KyNpbmNsdWRlIDx3dGYvUG9pbnRlclByZXBhcmF0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9VUkwu
aD4KKworCituYW1lc3BhY2UgV2ViQ29yZSB7Cit1c2luZyBuYW1lc3BhY2UgSlNDOworCisvLyBG
dW5jdGlvbnMKKworSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE1hcExp
a2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnNQcm90b3R5cGVGdW5jdGlvbkNsZWFyKEpTQzo6SlNH
bG9iYWxPYmplY3QqLCBKU0M6OkNhbGxGcmFtZSopOworSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGpzVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnNQcm90b3R5cGVG
dW5jdGlvbkdldChKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpDYWxsRnJhbWUqKTsKK0pTQzo6
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5P
cGVyYXRpb25zUHJvdG90eXBlRnVuY3Rpb25IYXMoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6
Q2FsbEZyYW1lKik7CitKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0TWFw
TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9uc1Byb3RvdHlwZUZ1bmN0aW9uRW50cmllcyhKU0M6
OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpDYWxsRnJhbWUqKTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBqc1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zUHJvdG90
eXBlRnVuY3Rpb25LZXlzKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkNhbGxGcmFtZSopOwor
SlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE1hcExpa2VXaXRoT3ZlcnJp
ZGRlbk9wZXJhdGlvbnNQcm90b3R5cGVGdW5jdGlvblZhbHVlcyhKU0M6OkpTR2xvYmFsT2JqZWN0
KiwgSlNDOjpDYWxsRnJhbWUqKTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBq
c1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zUHJvdG90eXBlRnVuY3Rpb25Gb3JF
YWNoKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkNhbGxGcmFtZSopOworSlNDOjpFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlv
bnNQcm90b3R5cGVGdW5jdGlvbkRlbGV0ZShKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpDYWxs
RnJhbWUqKTsKKworLy8gQXR0cmlidXRlcworCitKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE1h
cExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnNDb25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRK
U1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zQ29uc3RydWN0b3IoSlNDOjpKU0ds
b2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwor
SlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25z
U2V0KEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3Bl
cnR5TmFtZSk7Citib29sIHNldEpTVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnNT
ZXQoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUpOworSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRk
ZW5PcGVyYXRpb25zU2l6ZShKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1
ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworCitjbGFzcyBKU1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRk
ZW5PcGVyYXRpb25zUHJvdG90eXBlIGZpbmFsIDogcHVibGljIEpTQzo6SlNOb25GaW5hbE9iamVj
dCB7CitwdWJsaWM6CisgICAgdXNpbmcgQmFzZSA9IEpTQzo6SlNOb25GaW5hbE9iamVjdDsKKyAg
ICBzdGF0aWMgSlNUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9uc1Byb3RvdHlwZSog
Y3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6
OlN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIHsKKyAgICAgICAgSlNUZXN0TWFwTGlrZVdpdGhP
dmVycmlkZGVuT3BlcmF0aW9uc1Byb3RvdHlwZSogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFs
bG9jYXRlQ2VsbDxKU1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zUHJvdG90eXBl
Pih2bS5oZWFwKSkgSlNUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9uc1Byb3RvdHlw
ZSh2bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpOworICAgICAgICBwdHItPmZpbmlzaENyZWF0
aW9uKHZtKTsKKyAgICAgICAgcmV0dXJuIHB0cjsKKyAgICB9CisKKyAgICBERUNMQVJFX0lORk87
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIEpTQzo6U3Vic3BhY2VBY2Nlc3M+Cisg
ICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQorICAg
IHsKKyAgICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoSlNUZXN0TWFw
TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9uc1Byb3RvdHlwZSwgQmFzZSk7CisgICAgICAgIHJl
dHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZTsKKyAgICB9CisgICAgc3RhdGljIEpTQzo6U3RydWN0
dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVy
biBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlND
OjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKKyAg
ICB9CisKK3ByaXZhdGU6CisgICAgSlNUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9u
c1Byb3RvdHlwZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6U3RydWN0
dXJlKiBzdHJ1Y3R1cmUpCisgICAgICAgIDogSlNDOjpKU05vbkZpbmFsT2JqZWN0KHZtLCBzdHJ1
Y3R1cmUpCisgICAgeworICAgIH0KKworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYp
OworfTsKK1NUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKEpTVGVzdE1hcExpa2VX
aXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnNQcm90b3R5cGUsIEpTVGVzdE1hcExpa2VXaXRoT3ZlcnJp
ZGRlbk9wZXJhdGlvbnNQcm90b3R5cGU6OkJhc2UpOworCit1c2luZyBKU1Rlc3RNYXBMaWtlV2l0
aE92ZXJyaWRkZW5PcGVyYXRpb25zQ29uc3RydWN0b3IgPSBKU0RPTUNvbnN0cnVjdG9yTm90Q29u
c3RydWN0YWJsZTxKU1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zPjsKKwordGVt
cGxhdGU8PiBKU1ZhbHVlIEpTVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnNDb25z
dHJ1Y3Rvcjo6cHJvdG90eXBlRm9yU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBjb25zdCBKU0RPTUds
b2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQoreworICAgIFVOVVNFRF9QQVJBTSh2bSk7CisgICAg
cmV0dXJuIGdsb2JhbE9iamVjdC5mdW5jdGlvblByb3RvdHlwZSgpOworfQorCit0ZW1wbGF0ZTw+
IHZvaWQgSlNUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9uc0NvbnN0cnVjdG9yOjpp
bml0aWFsaXplUHJvcGVydGllcyhWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmpl
Y3QpCit7CisgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpT
VGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnM6OnByb3RvdHlwZSh2bSwgZ2xvYmFs
T2JqZWN0KSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8IEpTQzo6UHJvcGVy
dHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0p
OworICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250cml2aWFs
U3RyaW5nKHZtLCAiVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMiX3MpLCBKU0M6
OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRv
bnRFbnVtKTsKKyAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNO
dW1iZXIoMCksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0
eUF0dHJpYnV0ZTo6RG9udEVudW0pOworfQorCit0ZW1wbGF0ZTw+IGNvbnN0IENsYXNzSW5mbyBK
U1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zQ29uc3RydWN0b3I6OnNfaW5mbyA9
IHsgIlRlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zIiwgJkJhc2U6OnNfaW5mbywg
bnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Rlc3RNYXBMaWtlV2l0aE92
ZXJyaWRkZW5PcGVyYXRpb25zQ29uc3RydWN0b3IpIH07CisKKy8qIEhhc2ggdGFibGUgZm9yIHBy
b3RvdHlwZSAqLworCitzdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0TWFwTGlrZVdp
dGhPdmVycmlkZGVuT3BlcmF0aW9uc1Byb3RvdHlwZVRhYmxlVmFsdWVzW10gPQoreworICAgIHsg
ImNvbnN0cnVjdG9yIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1
dGU6OkRvbnRFbnVtKSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3Bl
cnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRp
b25zQ29uc3RydWN0b3IpLCAoaW50cHRyX3QpIHN0YXRpY19jYXN0PFB1dFByb3BlcnR5U2xvdDo6
UHV0VmFsdWVGdW5jPihzZXRKU1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zQ29u
c3RydWN0b3IpIH0gfSwKKyAgICB7ICJzZXQiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNDOjpQ
cm9wZXJ0eUF0dHJpYnV0ZTo6Q3VzdG9tQWNjZXNzb3IgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRl
OjpET01BdHRyaWJ1dGUpLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJv
cGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJh
dGlvbnNTZXQpLCAoaW50cHRyX3QpIHN0YXRpY19jYXN0PFB1dFByb3BlcnR5U2xvdDo6UHV0VmFs
dWVGdW5jPihzZXRKU1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zU2V0KSB9IH0s
CisgICAgeyAic2l6ZSIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmli
dXRlOjpEb250RW51bSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQ
cm9wZXJ0eUF0dHJpYnV0ZTo6Q3VzdG9tQWNjZXNzb3IpLCBOb0ludHJpbnNpYywgeyAoaW50cHRy
X3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdE1hcExpa2VX
aXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnNTaXplKSwgKGludHB0cl90KSBzdGF0aWNfY2FzdDxQdXRQ
cm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYz4oMCkgfSB9LAorICAgIHsgImNsZWFyIiwgc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkZ1bmN0aW9uKSwgTm9JbnRy
aW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PFJhd05hdGl2ZUZ1bmN0aW9uPihqc1Rlc3RN
YXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zUHJvdG90eXBlRnVuY3Rpb25DbGVhciksIChp
bnRwdHJfdCkgKDApIH0gfSwKKyAgICB7ICJnZXQiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlND
OjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0gfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpG
dW5jdGlvbiksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxSYXdOYXRpdmVG
dW5jdGlvbj4oanNUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9uc1Byb3RvdHlwZUZ1
bmN0aW9uR2V0KSwgKGludHB0cl90KSAoMSkgfSB9LAorICAgIHsgImhhcyIsIHN0YXRpY19jYXN0
PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSB8IEpTQzo6UHJvcGVy
dHlBdHRyaWJ1dGU6OkZ1bmN0aW9uKSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19j
YXN0PFJhd05hdGl2ZUZ1bmN0aW9uPihqc1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRp
b25zUHJvdG90eXBlRnVuY3Rpb25IYXMpLCAoaW50cHRyX3QpICgxKSB9IH0sCisgICAgeyAiZW50
cmllcyIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250
RW51bSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkZ1bmN0aW9uKSwgTm9JbnRyaW5zaWMsIHsg
KGludHB0cl90KXN0YXRpY19jYXN0PFJhd05hdGl2ZUZ1bmN0aW9uPihqc1Rlc3RNYXBMaWtlV2l0
aE92ZXJyaWRkZW5PcGVyYXRpb25zUHJvdG90eXBlRnVuY3Rpb25FbnRyaWVzKSwgKGludHB0cl90
KSAoMCkgfSB9LAorICAgIHsgImtleXMiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNDOjpQcm9w
ZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0gfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpGdW5jdGlv
biksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxSYXdOYXRpdmVGdW5jdGlv
bj4oanNUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9uc1Byb3RvdHlwZUZ1bmN0aW9u
S2V5cyksIChpbnRwdHJfdCkgKDApIH0gfSwKKyAgICB7ICJ2YWx1ZXMiLCBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0gfCBKU0M6OlByb3BlcnR5
QXR0cmlidXRlOjpGdW5jdGlvbiksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2Fz
dDxSYXdOYXRpdmVGdW5jdGlvbj4oanNUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9u
c1Byb3RvdHlwZUZ1bmN0aW9uVmFsdWVzKSwgKGludHB0cl90KSAoMCkgfSB9LAorICAgIHsgImZv
ckVhY2giLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RnVu
Y3Rpb24pLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UmF3TmF0aXZlRnVu
Y3Rpb24+KGpzVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnNQcm90b3R5cGVGdW5j
dGlvbkZvckVhY2gpLCAoaW50cHRyX3QpICgxKSB9IH0sCisgICAgeyAiZGVsZXRlIiwgc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtIHwgSlNDOjpQ
cm9wZXJ0eUF0dHJpYnV0ZTo6RnVuY3Rpb24pLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3Rh
dGljX2Nhc3Q8UmF3TmF0aXZlRnVuY3Rpb24+KGpzVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9w
ZXJhdGlvbnNQcm90b3R5cGVGdW5jdGlvbkRlbGV0ZSksIChpbnRwdHJfdCkgKDEpIH0gfSwKK307
CisKK2NvbnN0IENsYXNzSW5mbyBKU1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25z
UHJvdG90eXBlOjpzX2luZm8gPSB7ICJUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9u
cyIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUo
SlNUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9uc1Byb3RvdHlwZSkgfTsKKwordm9p
ZCBKU1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zUHJvdG90eXBlOjpmaW5pc2hD
cmVhdGlvbihWTSYgdm0pCit7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOworICAgIHJl
aWZ5U3RhdGljUHJvcGVydGllcyh2bSwgSlNUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0
aW9uczo6aW5mbygpLCBKU1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zUHJvdG90
eXBlVGFibGVWYWx1ZXMsICp0aGlzKTsKKyAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFt
ZXMtPml0ZXJhdG9yU3ltYm9sLCBnZXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmJ1aWx0
aW5OYW1lcygpLmVudHJpZXNQdWJsaWNOYW1lKCkpLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlND
OjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pKTsKKyAgICBKU0NfVE9fU1RSSU5HX1RBR19X
SVRIT1VUX1RSQU5TSVRJT04oKTsKK30KKworY29uc3QgQ2xhc3NJbmZvIEpTVGVzdE1hcExpa2VX
aXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnM6OnNfaW5mbyA9IHsgIlRlc3RNYXBMaWtlV2l0aE92ZXJy
aWRkZW5PcGVyYXRpb25zIiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRF
X01FVEhPRF9UQUJMRShKU1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zKSB9Owor
CitKU1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zOjpKU1Rlc3RNYXBMaWtlV2l0
aE92ZXJyaWRkZW5PcGVyYXRpb25zKFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9i
amVjdCYgZ2xvYmFsT2JqZWN0LCBSZWY8VGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlv
bnM+JiYgaW1wbCkKKyAgICA6IEpTRE9NV3JhcHBlcjxUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVu
T3BlcmF0aW9ucz4oc3RydWN0dXJlLCBnbG9iYWxPYmplY3QsIFdURk1vdmUoaW1wbCkpCit7Cit9
CisKK3ZvaWQgSlNUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9uczo6ZmluaXNoQ3Jl
YXRpb24oVk0mIHZtKQoreworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICBBU1NF
UlQoaW5oZXJpdHModm0sIGluZm8oKSkpOworCisgICAgc3RhdGljX2Fzc2VydCghc3RkOjppc19i
YXNlX29mPEFjdGl2ZURPTU9iamVjdCwgVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlv
bnM+Ojp2YWx1ZSwgIkludGVyZmFjZSBpcyBub3QgbWFya2VkIGFzIFtBY3RpdmVET01PYmplY3Rd
IGV2ZW4gdGhvdWdoIGltcGxlbWVudGF0aW9uIGNsYXNzIHN1YmNsYXNzZXMgQWN0aXZlRE9NT2Jq
ZWN0LiIpOworCit9CisKK0pTT2JqZWN0KiBKU1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVy
YXRpb25zOjpjcmVhdGVQcm90b3R5cGUoVk0mIHZtLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFs
T2JqZWN0KQoreworICAgIHJldHVybiBKU1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRp
b25zUHJvdG90eXBlOjpjcmVhdGUodm0sICZnbG9iYWxPYmplY3QsIEpTVGVzdE1hcExpa2VXaXRo
T3ZlcnJpZGRlbk9wZXJhdGlvbnNQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZSh2bSwgJmdsb2Jh
bE9iamVjdCwgZ2xvYmFsT2JqZWN0Lm9iamVjdFByb3RvdHlwZSgpKSk7Cit9CisKK0pTT2JqZWN0
KiBKU1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zOjpwcm90b3R5cGUoVk0mIHZt
LCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQoreworICAgIHJldHVybiBnZXRET01Q
cm90b3R5cGU8SlNUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucz4odm0sIGdsb2Jh
bE9iamVjdCk7Cit9CisKK0pTVmFsdWUgSlNUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0
aW9uczo6Z2V0Q29uc3RydWN0b3IoVk0mIHZtLCBjb25zdCBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0KQoreworICAgIHJldHVybiBnZXRET01Db25zdHJ1Y3RvcjxKU1Rlc3RNYXBMaWtlV2l0
aE92ZXJyaWRkZW5PcGVyYXRpb25zQ29uc3RydWN0b3I+KHZtLCAqanNDYXN0PGNvbnN0IEpTRE9N
R2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KSk7Cit9CisKK3ZvaWQgSlNUZXN0TWFwTGlrZVdp
dGhPdmVycmlkZGVuT3BlcmF0aW9uczo6ZGVzdHJveShKU0M6OkpTQ2VsbCogY2VsbCkKK3sKKyAg
ICBKU1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zKiB0aGlzT2JqZWN0ID0gc3Rh
dGljX2Nhc3Q8SlNUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucyo+KGNlbGwpOwor
ICAgIHRoaXNPYmplY3QtPkpTVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnM6On5K
U1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zKCk7Cit9CisKK3RlbXBsYXRlPD4g
aW5saW5lIEpTVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMqIElETEF0dHJpYnV0
ZTxKU1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zPjo6Y2FzdChKU0dsb2JhbE9i
amVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlKQorewor
ICAgIHJldHVybiBqc0R5bmFtaWNDYXN0PEpTVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJh
dGlvbnMqPihKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KSwgSlNWYWx1ZTo6ZGVjb2Rl
KHRoaXNWYWx1ZSkpOworfQorCit0ZW1wbGF0ZTw+IGlubGluZSBKU1Rlc3RNYXBMaWtlV2l0aE92
ZXJyaWRkZW5PcGVyYXRpb25zKiBJRExPcGVyYXRpb248SlNUZXN0TWFwTGlrZVdpdGhPdmVycmlk
ZGVuT3BlcmF0aW9ucz46OmNhc3QoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3Qs
IENhbGxGcmFtZSYgY2FsbEZyYW1lKQoreworICAgIHJldHVybiBqc0R5bmFtaWNDYXN0PEpTVGVz
dE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMqPihKU0M6OmdldFZNKCZsZXhpY2FsR2xv
YmFsT2JqZWN0KSwgY2FsbEZyYW1lLnRoaXNWYWx1ZSgpKTsKK30KKworRW5jb2RlZEpTVmFsdWUg
anNUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9uc0NvbnN0cnVjdG9yKEpTR2xvYmFs
T2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFBy
b3BlcnR5TmFtZSkKK3sKKyAgICBWTSYgdm0gPSBKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmpl
Y3QpOworICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAg
IGF1dG8qIHByb3RvdHlwZSA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0TWFwTGlrZVdpdGhPdmVycmlk
ZGVuT3BlcmF0aW9uc1Byb3RvdHlwZSo+KHZtLCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7
CisgICAgaWYgKFVOTElLRUxZKCFwcm90b3R5cGUpKQorICAgICAgICByZXR1cm4gdGhyb3dWTVR5
cGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlKTsKKyAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKEpTVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnM6OmdldENv
bnN0cnVjdG9yKEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCksIHByb3RvdHlwZS0+Z2xv
YmFsT2JqZWN0KCkpKTsKK30KKworYm9vbCBzZXRKU1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5P
cGVyYXRpb25zQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3Qs
IEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQor
eworICAgIFZNJiB2bSA9IEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgYXV0
byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgYXV0byogcHJvdG90
eXBlID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25z
UHJvdG90eXBlKj4odm0sIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKKyAgICBpZiAoVU5M
SUtFTFkoIXByb3RvdHlwZSkpIHsKKyAgICAgICAgdGhyb3dWTVR5cGVFcnJvcihsZXhpY2FsR2xv
YmFsT2JqZWN0LCB0aHJvd1Njb3BlKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAg
ICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3RvcgorICAgIHJldHVybiBwcm90b3R5
cGUtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+Y29uc3RydWN0b3IsIEpTVmFsdWU6
OmRlY29kZShlbmNvZGVkVmFsdWUpKTsKK30KKworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVz
dE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnNTZXRHZXR0ZXIoSlNHbG9iYWxPYmplY3Qm
IGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlv
bnMmIHRoaXNPYmplY3QpCit7CisgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xv
YmFsT2JqZWN0KTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CisgICAgUkVMRUFTRV9B
TkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETExvbmc+KGxleGljYWxHbG9iYWxPYmplY3Qs
IHRocm93U2NvcGUsIGltcGwuc2V0KCkpKSk7Cit9CisKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdE1h
cExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnNTZXQoSlNHbG9iYWxPYmplY3QqIGxleGljYWxH
bG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorewor
ICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0
aW9ucz46OmdldDxqc1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zU2V0R2V0dGVy
LCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6QXNzZXJ0PigqbGV4aWNhbEdsb2JhbE9iamVjdCwg
dGhpc1ZhbHVlLCAic2V0Iik7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RNYXBM
aWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zU2V0U2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zJiB0
aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQoreworICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgm
bGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOworICAg
IGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETExvbmc+KGxleGljYWxHbG9iYWxPYmplY3Qs
IHZhbHVlKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKKyAg
ICBBdHRyaWJ1dGVTZXR0ZXI6OmNhbGwobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwg
WyZdIHsKKyAgICAgICAgcmV0dXJuIGltcGwuc2V0U2V0KFdURk1vdmUobmF0aXZlVmFsdWUpKTsK
KyAgICB9KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBzZXRKU1Rlc3RNYXBMaWtlV2l0
aE92ZXJyaWRkZW5PcGVyYXRpb25zU2V0KEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1
ZSkKK3sKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRl
bk9wZXJhdGlvbnM+OjpzZXQ8c2V0SlNUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9u
c1NldFNldHRlcj4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVl
LCAic2V0Iik7Cit9CisKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RNYXBMaWtlV2l0aE92
ZXJyaWRkZW5PcGVyYXRpb25zU2l6ZUdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2Jh
bE9iamVjdCwgSlNUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucyYgdGhpc09iamVj
dCkKK3sKKyAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwor
ICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIFJFTEVB
U0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExBbnk+KGxleGljYWxHbG9iYWxPYmpl
Y3QsIHRocm93U2NvcGUsIGZvcndhcmRTaXplVG9NYXBMaWtlKGxleGljYWxHbG9iYWxPYmplY3Qs
IHRoaXNPYmplY3QpKSkpOworfQorCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RNYXBMaWtlV2l0aE92
ZXJyaWRkZW5PcGVyYXRpb25zU2l6ZShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVj
dCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCit7CisgICAgcmV0dXJu
IElETEF0dHJpYnV0ZTxKU1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zPjo6Z2V0
PGpzVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnNTaXplR2V0dGVyPigqbGV4aWNh
bEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCAic2l6ZSIpOworfQorCitzdGF0aWMgaW5saW5lIEpT
Qzo6RW5jb2RlZEpTVmFsdWUganNUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9uc1By
b3RvdHlwZUZ1bmN0aW9uQ2xlYXJCb2R5KEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9i
YWxPYmplY3QsIEpTQzo6Q2FsbEZyYW1lKiBjYWxsRnJhbWUsIHR5cGVuYW1lIElETE9wZXJhdGlv
bjxKU1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zPjo6Q2xhc3NQYXJhbWV0ZXIg
Y2FzdGVkVGhpcykKK3sKKyAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9i
amVjdCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Cisg
ICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUp
OworICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CisgICAgdGhyb3dTY29w
ZS5yZWxlYXNlKCk7CisgICAgaW1wbC5jbGVhcigpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7Cit9CisKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNU
ZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9uc1Byb3RvdHlwZUZ1bmN0aW9uQ2xlYXIo
SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1l
KQoreworICAgIHJldHVybiBJRExPcGVyYXRpb248SlNUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVu
T3BlcmF0aW9ucz46OmNhbGw8anNUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9uc1By
b3RvdHlwZUZ1bmN0aW9uQ2xlYXJCb2R5PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFt
ZSwgImNsZWFyIik7Cit9CisKK3N0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zUHJvdG90eXBlRnVuY3Rpb25HZXRCb2R5
KEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6Q2FsbEZyYW1l
KiBjYWxsRnJhbWUsIHR5cGVuYW1lIElETE9wZXJhdGlvbjxKU1Rlc3RNYXBMaWtlV2l0aE92ZXJy
aWRkZW5PcGVyYXRpb25zPjo6Q2xhc3NQYXJhbWV0ZXIgY2FzdGVkVGhpcykKK3sKKyAgICBhdXRv
JiB2bSA9IEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgYXV0byB0aHJvd1Nj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2Nv
cGUpOworICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChVTkxJS0VMWShjYWxs
RnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQorICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9y
KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50
c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKKyAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUg
YXJndW1lbnQwID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKKyAgICBhdXRvIGtl
eSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQw
LnZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpT
VmFsdWUoKSk7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsIEpTVmFsdWU6OmVu
Y29kZSh0b0pTPElETEFueT4oZm9yd2FyZEdldFRvTWFwTGlrZSgqbGV4aWNhbEdsb2JhbE9iamVj
dCwgKmNhbGxGcmFtZSwgKmNhc3RlZFRoaXMsIFdURk1vdmUoa2V5KSkpKSk7Cit9CisKK0VuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0
aW9uc1Byb3RvdHlwZUZ1bmN0aW9uR2V0KEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKK3sKKyAgICByZXR1cm4gSURMT3BlcmF0aW9uPEpT
VGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnM+OjpjYWxsPGpzVGVzdE1hcExpa2VX
aXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnNQcm90b3R5cGVGdW5jdGlvbkdldEJvZHk+KCpsZXhpY2Fs
R2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lLCAiZ2V0Iik7Cit9CisKK3N0YXRpYyBpbmxpbmUgSlND
OjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zUHJv
dG90eXBlRnVuY3Rpb25IYXNCb2R5KEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxP
YmplY3QsIEpTQzo6Q2FsbEZyYW1lKiBjYWxsRnJhbWUsIHR5cGVuYW1lIElETE9wZXJhdGlvbjxK
U1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zPjo6Q2xhc3NQYXJhbWV0ZXIgY2Fz
dGVkVGhpcykKK3sKKyAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVj
dCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAg
VU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOwor
ICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQorICAgICAg
ICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNy
ZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKKyAgICBF
bnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1
bWVudCgwKTsKKyAgICBhdXRvIGtleSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqbGV4aWNhbEds
b2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
dGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRo
cm93U2NvcGUsIEpTVmFsdWU6OmVuY29kZSh0b0pTPElETEFueT4oZm9yd2FyZEhhc1RvTWFwTGlr
ZSgqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSwgKmNhc3RlZFRoaXMsIFdURk1vdmUo
a2V5KSkpKSk7Cit9CisKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0TWFwTGlr
ZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9uc1Byb3RvdHlwZUZ1bmN0aW9uSGFzKEpTR2xvYmFsT2Jq
ZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKK3sKKyAgICBy
ZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnM+
OjpjYWxsPGpzVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnNQcm90b3R5cGVGdW5j
dGlvbkhhc0JvZHk+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lLCAiaGFzIik7Cit9
CisKK3N0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RNYXBMaWtlV2l0aE92
ZXJyaWRkZW5PcGVyYXRpb25zUHJvdG90eXBlRnVuY3Rpb25FbnRyaWVzQm9keShKU0M6OkpTR2xv
YmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OkNhbGxGcmFtZSogY2FsbEZyYW1l
LCB0eXBlbmFtZSBJRExPcGVyYXRpb248SlNUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0
aW9ucz46OkNsYXNzUGFyYW1ldGVyIGNhc3RlZFRoaXMpCit7CisgICAgYXV0byYgdm0gPSBKU0M6
OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBV
TlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29w
ZSwgSlNWYWx1ZTo6ZW5jb2RlKHRvSlM8SURMQW55Pihmb3J3YXJkRW50cmllc1RvTWFwTGlrZSgq
bGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSwgKmNhc3RlZFRoaXMpKSkpOworfQorCitF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9w
ZXJhdGlvbnNQcm90b3R5cGVGdW5jdGlvbkVudHJpZXMoSlNHbG9iYWxPYmplY3QqIGxleGljYWxH
bG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQoreworICAgIHJldHVybiBJRExPcGVy
YXRpb248SlNUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucz46OmNhbGw8anNUZXN0
TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9uc1Byb3RvdHlwZUZ1bmN0aW9uRW50cmllc0Jv
ZHk+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lLCAiZW50cmllcyIpOworfQorCitz
dGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0TWFwTGlrZVdpdGhPdmVycmlk
ZGVuT3BlcmF0aW9uc1Byb3RvdHlwZUZ1bmN0aW9uS2V5c0JvZHkoSlNDOjpKU0dsb2JhbE9iamVj
dCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpDYWxsRnJhbWUqIGNhbGxGcmFtZSwgdHlwZW5h
bWUgSURMT3BlcmF0aW9uPEpTVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnM+OjpD
bGFzc1BhcmFtZXRlciBjYXN0ZWRUaGlzKQoreworICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTShs
ZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgVU5VU0VEX1BB
UkFNKGNhbGxGcmFtZSk7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsIEpTVmFs
dWU6OmVuY29kZSh0b0pTPElETEFueT4oZm9yd2FyZEtleXNUb01hcExpa2UoKmxleGljYWxHbG9i
YWxPYmplY3QsICpjYWxsRnJhbWUsICpjYXN0ZWRUaGlzKSkpKTsKK30KKworRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zUHJv
dG90eXBlRnVuY3Rpb25LZXlzKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBD
YWxsRnJhbWUqIGNhbGxGcmFtZSkKK3sKKyAgICByZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVzdE1h
cExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnM+OjpjYWxsPGpzVGVzdE1hcExpa2VXaXRoT3Zl
cnJpZGRlbk9wZXJhdGlvbnNQcm90b3R5cGVGdW5jdGlvbktleXNCb2R5PigqbGV4aWNhbEdsb2Jh
bE9iamVjdCwgKmNhbGxGcmFtZSwgImtleXMiKTsKK30KKworc3RhdGljIGlubGluZSBKU0M6OkVu
Y29kZWRKU1ZhbHVlIGpzVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnNQcm90b3R5
cGVGdW5jdGlvblZhbHVlc0JvZHkoSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9i
amVjdCwgSlNDOjpDYWxsRnJhbWUqIGNhbGxGcmFtZSwgdHlwZW5hbWUgSURMT3BlcmF0aW9uPEpT
VGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnM+OjpDbGFzc1BhcmFtZXRlciBjYXN0
ZWRUaGlzKQoreworICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0
KTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBV
TlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7Cisg
ICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsIEpTVmFsdWU6OmVuY29kZSh0b0pTPElE
TEFueT4oZm9yd2FyZFZhbHVlc1RvTWFwTGlrZSgqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxG
cmFtZSwgKmNhc3RlZFRoaXMpKSkpOworfQorCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGpzVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnNQcm90b3R5cGVGdW5jdGlvblZh
bHVlcyhKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxs
RnJhbWUpCit7CisgICAgcmV0dXJuIElETE9wZXJhdGlvbjxKU1Rlc3RNYXBMaWtlV2l0aE92ZXJy
aWRkZW5PcGVyYXRpb25zPjo6Y2FsbDxqc1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRp
b25zUHJvdG90eXBlRnVuY3Rpb25WYWx1ZXNCb2R5PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNh
bGxGcmFtZSwgInZhbHVlcyIpOworfQorCitzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFs
dWUganNUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9uc1Byb3RvdHlwZUZ1bmN0aW9u
Rm9yRWFjaEJvZHkoSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlND
OjpDYWxsRnJhbWUqIGNhbGxGcmFtZSwgdHlwZW5hbWUgSURMT3BlcmF0aW9uPEpTVGVzdE1hcExp
a2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnM+OjpDbGFzc1BhcmFtZXRlciBjYXN0ZWRUaGlzKQor
eworICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBh
dXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBVTlVTRURfUEFS
QU0odGhyb3dTY29wZSk7CisgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFVO
TElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCisgICAgICAgIHJldHVybiB0
aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5v
dWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOworICAgIEVuc3VyZVN0aWxs
QWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApOwor
ICAgIGF1dG8gY2FsbGJhY2sgPSBjb252ZXJ0PElETEFueT4oKmxleGljYWxHbG9iYWxPYmplY3Qs
IGFyZ3VtZW50MC52YWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUs
IGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCBK
U1ZhbHVlOjplbmNvZGUodG9KUzxJRExBbnk+KGZvcndhcmRGb3JFYWNoVG9NYXBMaWtlKCpsZXhp
Y2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lLCAqY2FzdGVkVGhpcywgV1RGTW92ZShjYWxsYmFj
aykpKSkpOworfQorCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE1hcExpa2VX
aXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnNQcm90b3R5cGVGdW5jdGlvbkZvckVhY2goSlNHbG9iYWxP
YmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQoreworICAg
IHJldHVybiBJRExPcGVyYXRpb248SlNUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9u
cz46OmNhbGw8anNUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9uc1Byb3RvdHlwZUZ1
bmN0aW9uRm9yRWFjaEJvZHk+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lLCAiZm9y
RWFjaCIpOworfQorCitzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0TWFw
TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9uc1Byb3RvdHlwZUZ1bmN0aW9uRGVsZXRlQm9keShK
U0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OkNhbGxGcmFtZSog
Y2FsbEZyYW1lLCB0eXBlbmFtZSBJRExPcGVyYXRpb248SlNUZXN0TWFwTGlrZVdpdGhPdmVycmlk
ZGVuT3BlcmF0aW9ucz46OkNsYXNzUGFyYW1ldGVyIGNhc3RlZFRoaXMpCit7CisgICAgYXV0byYg
dm0gPSBKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGF1dG8gdGhyb3dTY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3Bl
KTsKKyAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoVU5MSUtFTFkoY2FsbEZy
YW1lLT5hcmd1bWVudENvdW50KCkgPCAxKSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihs
ZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNF
cnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CisgICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFy
Z3VtZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7CisgICAgYXV0byBrZXkg
PSBjb252ZXJ0PElETERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MC52
YWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1Zh
bHVlKCkpOworICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCBKU1ZhbHVlOjplbmNv
ZGUodG9KUzxJRExBbnk+KGZvcndhcmREZWxldGVUb01hcExpa2UoKmxleGljYWxHbG9iYWxPYmpl
Y3QsICpjYWxsRnJhbWUsICpjYXN0ZWRUaGlzLCBXVEZNb3ZlKGtleSkpKSkpOworfQorCitFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJh
dGlvbnNQcm90b3R5cGVGdW5jdGlvbkRlbGV0ZShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2Jh
bE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCit7CisgICAgcmV0dXJuIElETE9wZXJhdGlv
bjxKU1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zPjo6Y2FsbDxqc1Rlc3RNYXBM
aWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zUHJvdG90eXBlRnVuY3Rpb25EZWxldGVCb2R5Pigq
bGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSwgImRlbGV0ZSIpOworfQorCitKU0M6Oklz
b1N1YnNwYWNlKiBKU1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zOjpzdWJzcGFj
ZUZvckltcGwoSlNDOjpWTSYgdm0pCit7CisgICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNf
Y2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOworICAgIGF1dG8mIHNwYWNlcyA9
IGNsaWVudERhdGEuc3Vic3BhY2VzKCk7CisgICAgaWYgKGF1dG8qIHNwYWNlID0gc3BhY2VzLm1f
c3Vic3BhY2VGb3JUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucy5nZXQoKSkKKyAg
ICAgICAgcmV0dXJuIHNwYWNlOworICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8
SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3Bl
cmF0aW9ucz4gfHwgIUpTVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnM6Om5lZWRz
RGVzdHJ1Y3Rpb24pOworICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpK
U0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9u
cz4pCisgICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRl
bk9wZXJhdGlvbnMgPSBtYWtlVW5pcXVlPElzb1N1YnNwYWNlPiBJU09fU1VCU1BBQ0VfSU5JVCh2
bS5oZWFwLCB2bS5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUuZ2V0KCksIEpTVGVzdE1h
cExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMpOworICAgIGVsc2UKKyAgICAgICAgc3BhY2Vz
Lm1fc3Vic3BhY2VGb3JUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucyA9IG1ha2VV
bmlxdWU8SXNvU3Vic3BhY2U+IElTT19TVUJTUEFDRV9JTklUKHZtLmhlYXAsIHZtLmNlbGxIZWFw
Q2VsbFR5cGUuZ2V0KCksIEpTVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMpOwor
ICAgIGF1dG8qIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TWFwTGlrZVdpdGhPdmVy
cmlkZGVuT3BlcmF0aW9ucy5nZXQoKTsKK0lHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFi
bGUtY29kZSIpCitJR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikK
KyAgICBpZiAoJkpTVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnM6OnZpc2l0T3V0
cHV0Q29uc3RyYWludHMgIT0gJkpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzKQor
ICAgICAgICBjbGllbnREYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2Up
OworSUdOT1JFX1dBUk5JTkdTX0VORAorSUdOT1JFX1dBUk5JTkdTX0VORAorICAgIHJldHVybiBz
cGFjZTsKK30KKwordm9pZCBKU1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zOjph
bmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCit7CisgICAg
YXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVy
YXRpb25zKj4oY2VsbCk7CisgICAgYW5hbHl6ZXIuc2V0V3JhcHBlZE9iamVjdEZvckNlbGwoY2Vs
bCwgJnRoaXNPYmplY3QtPndyYXBwZWQoKSk7CisgICAgaWYgKHRoaXNPYmplY3QtPnNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKSkKKyAgICAgICAgYW5hbHl6ZXIuc2V0TGFiZWxGb3JDZWxsKGNlbGws
ICJ1cmwgIiArIHRoaXNPYmplY3QtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+dXJsKCkuc3Ry
aW5nKCkpOworICAgIEJhc2U6OmFuYWx5emVIZWFwKGNlbGwsIGFuYWx5emVyKTsKK30KKworYm9v
bCBKU1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zT3duZXI6OmlzUmVhY2hhYmxl
RnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwg
U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCit7CisgICAgVU5VU0VE
X1BBUkFNKGhhbmRsZSk7CisgICAgVU5VU0VEX1BBUkFNKHZpc2l0b3IpOworICAgIFVOVVNFRF9Q
QVJBTShyZWFzb24pOworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBKU1Rlc3RNYXBMaWtl
V2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zT3duZXI6OmZpbmFsaXplKEpTQzo6SGFuZGxlPEpTQzo6
VW5rbm93bj4gaGFuZGxlLCB2b2lkKiBjb250ZXh0KQoreworICAgIGF1dG8qIGpzVGVzdE1hcExp
a2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMgPSBzdGF0aWNfY2FzdDxKU1Rlc3RNYXBMaWtlV2l0
aE92ZXJyaWRkZW5PcGVyYXRpb25zKj4oaGFuZGxlLnNsb3QoKS0+YXNDZWxsKCkpOworICAgIGF1
dG8mIHdvcmxkID0gKnN0YXRpY19jYXN0PERPTVdyYXBwZXJXb3JsZCo+KGNvbnRleHQpOworICAg
IHVuY2FjaGVXcmFwcGVyKHdvcmxkLCAmanNUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0
aW9ucy0+d3JhcHBlZCgpLCBqc1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zKTsK
K30KKworI2lmIEVOQUJMRShCSU5ESU5HX0lOVEVHUklUWSkKKyNpZiBQTEFURk9STShXSU4pCisj
cHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDQ4MykKK2V4dGVybiAiQyIgeyBleHRlcm4gdm9pZCAo
KmNvbnN0IF9faWRlbnRpZmllcigiPz9fN1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRp
b25zQFdlYkNvcmVAQDZCQCIpW10pKCk7IH0KKyNlbHNlCitleHRlcm4gIkMiIHsgZXh0ZXJuIHZv
aWQqIF9aVFZON1dlYkNvcmUzNVRlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zRVtd
OyB9CisjZW5kaWYKKyNlbmRpZgorCitKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6
OkpTR2xvYmFsT2JqZWN0KiwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmPFRl
c3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zPiYmIGltcGwpCit7CisKKyNpZiBFTkFC
TEUoQklORElOR19JTlRFR1JJVFkpCisgICAgY29uc3Qgdm9pZCogYWN0dWFsVlRhYmxlUG9pbnRl
ciA9IGdldFZUYWJsZVBvaW50ZXIoaW1wbC5wdHIoKSk7CisjaWYgUExBVEZPUk0oV0lOKQorICAg
IHZvaWQqIGV4cGVjdGVkVlRhYmxlUG9pbnRlciA9IF9faWRlbnRpZmllcigiPz9fN1Rlc3RNYXBM
aWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zQFdlYkNvcmVAQDZCQCIpOworI2Vsc2UKKyAgICB2
b2lkKiBleHBlY3RlZFZUYWJsZVBvaW50ZXIgPSAmX1pUVk43V2ViQ29yZTM1VGVzdE1hcExpa2VX
aXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnNFWzJdOworI2VuZGlmCisKKyAgICAvLyBJZiB0aGlzIGZh
aWxzIFRlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zIGRvZXMgbm90IGhhdmUgYSB2
dGFibGUsIHNvIHlvdSBuZWVkIHRvIGFkZCB0aGUKKyAgICAvLyBJbXBsZW1lbnRhdGlvbkxhY2tz
VlRhYmxlIGF0dHJpYnV0ZSB0byB0aGUgaW50ZXJmYWNlIGRlZmluaXRpb24KKyAgICBzdGF0aWNf
YXNzZXJ0KHN0ZDo6aXNfcG9seW1vcnBoaWM8VGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJh
dGlvbnM+Ojp2YWx1ZSwgIlRlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zIGlzIG5v
dCBwb2x5bW9ycGhpYyIpOworCisgICAgLy8gSWYgeW91IGhpdCB0aGlzIGFzc2VydGlvbiB5b3Ug
ZWl0aGVyIGhhdmUgYSB1c2UgYWZ0ZXIgZnJlZSBidWcsIG9yCisgICAgLy8gVGVzdE1hcExpa2VX
aXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMgaGFzIHN1YmNsYXNzZXMuIElmIFRlc3RNYXBMaWtlV2l0
aE92ZXJyaWRkZW5PcGVyYXRpb25zIGhhcyBzdWJjbGFzc2VzIHRoYXQgZ2V0IHBhc3NlZAorICAg
IC8vIHRvIHRvSlMoKSB3ZSBjdXJyZW50bHkgcmVxdWlyZSBUZXN0TWFwTGlrZVdpdGhPdmVycmlk
ZGVuT3BlcmF0aW9ucyB5b3UgdG8gb3B0IG91dCBvZiBiaW5kaW5nIGhhcmRlbmluZworICAgIC8v
IGJ5IGFkZGluZyB0aGUgU2tpcFZUYWJsZVZhbGlkYXRpb24gYXR0cmlidXRlIHRvIHRoZSBpbnRl
cmZhY2UgSURMIGRlZmluaXRpb24KKyAgICBSRUxFQVNFX0FTU0VSVChhY3R1YWxWVGFibGVQb2lu
dGVyID09IGV4cGVjdGVkVlRhYmxlUG9pbnRlcik7CisjZW5kaWYKKyAgICByZXR1cm4gY3JlYXRl
V3JhcHBlcjxUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucz4oZ2xvYmFsT2JqZWN0
LCBXVEZNb3ZlKGltcGwpKTsKK30KKworSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpKU0dsb2JhbE9i
amVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMmIGltcGwpCit7CisgICAgcmV0
dXJuIHdyYXAobGV4aWNhbEdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LCBpbXBsKTsKK30KKwor
VGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMqIEpTVGVzdE1hcExpa2VXaXRoT3Zl
cnJpZGRlbk9wZXJhdGlvbnM6OnRvV3JhcHBlZChKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZh
bHVlKQoreworICAgIGlmIChhdXRvKiB3cmFwcGVyID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RNYXBM
aWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zKj4odm0sIHZhbHVlKSkKKyAgICAgICAgcmV0dXJu
ICZ3cmFwcGVyLT53cmFwcGVkKCk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK30KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RNYXBMaWtlV2l0
aE92ZXJyaWRkZW5PcGVyYXRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlv
bnMuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsOTMgQEAKKy8qCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdl
YktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICAgIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0
ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisKKyAgICBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
ICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAg
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI3ByYWdtYSBv
bmNlCisKKyNpbmNsdWRlICJKU0RPTVdyYXBwZXIuaCIKKyNpbmNsdWRlICJUZXN0TWFwTGlrZVdp
dGhPdmVycmlkZGVuT3BlcmF0aW9ucy5oIgorI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5o
PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEpTVGVzdE1hcExpa2VXaXRoT3ZlcnJp
ZGRlbk9wZXJhdGlvbnMgOiBwdWJsaWMgSlNET01XcmFwcGVyPFRlc3RNYXBMaWtlV2l0aE92ZXJy
aWRkZW5PcGVyYXRpb25zPiB7CitwdWJsaWM6CisgICAgdXNpbmcgQmFzZSA9IEpTRE9NV3JhcHBl
cjxUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucz47CisgICAgc3RhdGljIEpTVGVz
dE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMqIGNyZWF0ZShKU0M6OlN0cnVjdHVyZSog
c3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWY8VGVzdE1hcExp
a2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnM+JiYgaW1wbCkKKyAgICB7CisgICAgICAgIEpTVGVz
dE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlND
OjphbGxvY2F0ZUNlbGw8SlNUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucz4oZ2xv
YmFsT2JqZWN0LT52bSgpLmhlYXApKSBKU1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRp
b25zKHN0cnVjdHVyZSwgKmdsb2JhbE9iamVjdCwgV1RGTW92ZShpbXBsKSk7CisgICAgICAgIHB0
ci0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsT2JqZWN0LT52bSgpKTsKKyAgICAgICAgcmV0dXJuIHB0
cjsKKyAgICB9CisKKyAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogY3JlYXRlUHJvdG90eXBlKEpT
Qzo6Vk0mLCBKU0RPTUdsb2JhbE9iamVjdCYpOworICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBw
cm90b3R5cGUoSlNDOjpWTSYsIEpTRE9NR2xvYmFsT2JqZWN0Jik7CisgICAgc3RhdGljIFRlc3RN
YXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zKiB0b1dyYXBwZWQoSlNDOjpWTSYsIEpTQzo6
SlNWYWx1ZSk7CisgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0M6OkpTQ2VsbCopOworCisgICAg
REVDTEFSRV9JTkZPOworCisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1
cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpK
U1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6
Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9i
amVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpLCBKU0M6Ok5vbkFycmF5KTsKKyAgICB9
CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGdldENvbnN0cnVjdG9yKEpTQzo6Vk0mLCBjb25z
dCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUsIEpTQzo6U3Vi
c3BhY2VBY2Nlc3MgbW9kZT4gc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpT
Qzo6Vk0mIHZtKQorICAgIHsKKyAgICAgICAgaWYgY29uc3RleHByIChtb2RlID09IEpTQzo6U3Vi
c3BhY2VBY2Nlc3M6OkNvbmN1cnJlbnRseSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOwor
ICAgICAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsKHZtKTsKKyAgICB9CisgICAgc3RhdGljIEpT
Qzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSk7CisgICAgc3RhdGlj
IHZvaWQgYW5hbHl6ZUhlYXAoSlNDZWxsKiwgSlNDOjpIZWFwQW5hbHl6ZXImKTsKK3Byb3RlY3Rl
ZDoKKyAgICBKU1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zKEpTQzo6U3RydWN0
dXJlKiwgSlNET01HbG9iYWxPYmplY3QmLCBSZWY8VGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9w
ZXJhdGlvbnM+JiYpOworCisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJik7Cit9Owor
CitjbGFzcyBKU1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zT3duZXIgOiBwdWJs
aWMgSlNDOjpXZWFrSGFuZGxlT3duZXIgeworcHVibGljOgorICAgIHZpcnR1YWwgYm9vbCBpc1Jl
YWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBj
b250ZXh0LCBKU0M6OlNsb3RWaXNpdG9yJiwgY29uc3QgY2hhcioqKTsKKyAgICB2aXJ0dWFsIHZv
aWQgZmluYWxpemUoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCk7Cit9
OworCitpbmxpbmUgSlNDOjpXZWFrSGFuZGxlT3duZXIqIHdyYXBwZXJPd25lcihET01XcmFwcGVy
V29ybGQmLCBUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucyopCit7CisgICAgc3Rh
dGljIE5ldmVyRGVzdHJveWVkPEpTVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnNP
d25lcj4gb3duZXI7CisgICAgcmV0dXJuICZvd25lci5nZXQoKTsKK30KKworaW5saW5lIHZvaWQq
IHdyYXBwZXJLZXkoVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMqIHdyYXBwYWJs
ZU9iamVjdCkKK3sKKyAgICByZXR1cm4gd3JhcHBhYmxlT2JqZWN0OworfQorCitKU0M6OkpTVmFs
dWUgdG9KUyhKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNET01HbG9iYWxPYmplY3QqLCBUZXN0TWFw
TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucyYpOworaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pT
KEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTRE9NR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIFRlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zKiBp
bXBsKSB7IHJldHVybiBpbXBsID8gdG9KUyhsZXhpY2FsR2xvYmFsT2JqZWN0LCBnbG9iYWxPYmpl
Y3QsICppbXBsKSA6IEpTQzo6anNOdWxsKCk7IH0KK0pTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVh
dGVkKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0RPTUdsb2JhbE9iamVjdCosIFJlZjxUZXN0TWFw
TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucz4mJik7CitpbmxpbmUgSlNDOjpKU1ZhbHVlIHRv
SlNOZXdseUNyZWF0ZWQoSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwg
SlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmUHRyPFRlc3RNYXBMaWtlV2l0aE92
ZXJyaWRkZW5PcGVyYXRpb25zPiYmIGltcGwpIHsgcmV0dXJuIGltcGwgPyB0b0pTTmV3bHlDcmVh
dGVkKGxleGljYWxHbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdCwgaW1wbC5yZWxlYXNlTm9uTnVs
bCgpKSA6IEpTQzo6anNOdWxsKCk7IH0KKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNET01XcmFwcGVy
Q29udmVydGVyVHJhaXRzPFRlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zPiB7Cisg
ICAgdXNpbmcgV3JhcHBlckNsYXNzID0gSlNUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0
aW9uczsKKyAgICB1c2luZyBUb1dyYXBwZWRSZXR1cm5UeXBlID0gVGVzdE1hcExpa2VXaXRoT3Zl
cnJpZGRlbk9wZXJhdGlvbnMqOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNldExpa2VXaXRo
T3ZlcnJpZGRlbk9wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRp
b25zLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw0NjEgQEAKKy8qCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2Yg
dGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICAgIFRoaXMgZmlsZSBoYXMgYmVlbiBn
ZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisKKyAgICBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAg
ICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9w
ZXJhdGlvbnMuaCIKKworI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgorI2luY2x1ZGUgIkRP
TUlzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkpTRE9NQXR0cmlidXRlLmgiCisjaW5jbHVkZSAi
SlNET01CaW5kaW5nLmgiCisjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFi
bGUuaCIKKyNpbmNsdWRlICJKU0RPTUNvbnZlcnRBbnkuaCIKKyNpbmNsdWRlICJKU0RPTUNvbnZl
cnROdW1iZXJzLmgiCisjaW5jbHVkZSAiSlNET01Db252ZXJ0U3RyaW5ncy5oIgorI2luY2x1ZGUg
IkpTRE9NRXhjZXB0aW9uSGFuZGxpbmcuaCIKKyNpbmNsdWRlICJKU0RPTU9wZXJhdGlvbi5oIgor
I2luY2x1ZGUgIkpTRE9NU2V0TGlrZS5oIgorI2luY2x1ZGUgIkpTRE9NV3JhcHBlckNhY2hlLmgi
CisjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgorI2luY2x1ZGUgIldlYkNvcmVK
U0NsaWVudERhdGEuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9CdWlsdGluTmFtZXMuaD4K
KyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9GdW5jdGlvblByb3RvdHlwZS5oPgorI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0hlYXBBbmFseXplci5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0pTQ0lubGluZXMuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0Rlc3RydWN0aWJsZU9i
amVjdEhlYXBDZWxsVHlwZS5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1N1YnNwYWNlSW5s
aW5lcy5oPgorI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUG9pbnRlclBy
ZXBhcmF0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9VUkwuaD4KKworCituYW1lc3BhY2UgV2ViQ29y
ZSB7Cit1c2luZyBuYW1lc3BhY2UgSlNDOworCisvLyBGdW5jdGlvbnMKKworSlNDOjpFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlv
bnNQcm90b3R5cGVGdW5jdGlvbkRlbGV0ZShKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpDYWxs
RnJhbWUqKTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RTZXRMaWtl
V2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zUHJvdG90eXBlRnVuY3Rpb25IYXMoSlNDOjpKU0dsb2Jh
bE9iamVjdCosIEpTQzo6Q2FsbEZyYW1lKik7CitKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwganNUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9uc1Byb3RvdHlwZUZ1bmN0
aW9uRW50cmllcyhKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpDYWxsRnJhbWUqKTsKK0pTQzo6
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5P
cGVyYXRpb25zUHJvdG90eXBlRnVuY3Rpb25LZXlzKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6
OkNhbGxGcmFtZSopOworSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdFNl
dExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnNQcm90b3R5cGVGdW5jdGlvblZhbHVlcyhKU0M6
OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpDYWxsRnJhbWUqKTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBqc1Rlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zUHJvdG90
eXBlRnVuY3Rpb25Gb3JFYWNoKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkNhbGxGcmFtZSop
OworSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdFNldExpa2VXaXRoT3Zl
cnJpZGRlbk9wZXJhdGlvbnNQcm90b3R5cGVGdW5jdGlvbkNsZWFyKEpTQzo6SlNHbG9iYWxPYmpl
Y3QqLCBKU0M6OkNhbGxGcmFtZSopOworCisvLyBBdHRyaWJ1dGVzCisKK0pTQzo6RW5jb2RlZEpT
VmFsdWUganNUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9uc0NvbnN0cnVjdG9yKEpT
Qzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFt
ZSk7Citib29sIHNldEpTVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnNDb25zdHJ1
Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSk7CitKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFNldExpa2VXaXRoT3ZlcnJp
ZGRlbk9wZXJhdGlvbnNBZGQoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFs
dWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0U2V0TGlrZVdpdGhPdmVycmlk
ZGVuT3BlcmF0aW9uc0FkZChKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1
ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CitKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFNldExp
a2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnNTaXplKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6
OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7CisKK2NsYXNzIEpTVGVzdFNldExp
a2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnNQcm90b3R5cGUgZmluYWwgOiBwdWJsaWMgSlNDOjpK
U05vbkZpbmFsT2JqZWN0IHsKK3B1YmxpYzoKKyAgICB1c2luZyBCYXNlID0gSlNDOjpKU05vbkZp
bmFsT2JqZWN0OworICAgIHN0YXRpYyBKU1Rlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRp
b25zUHJvdG90eXBlKiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgeworICAgICAgICBKU1Rl
c3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zUHJvdG90eXBlKiBwdHIgPSBuZXcgKE5v
dE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJh
dGlvbnNQcm90b3R5cGU+KHZtLmhlYXApKSBKU1Rlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVy
YXRpb25zUHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSk7CisgICAgICAgIHB0
ci0+ZmluaXNoQ3JlYXRpb24odm0pOworICAgICAgICByZXR1cm4gcHRyOworICAgIH0KKworICAg
IERFQ0xBUkVfSU5GTzsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgSlNDOjpTdWJz
cGFjZUFjY2Vzcz4KKyAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlND
OjpWTSYgdm0pCisgICAgeworICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFS
QUJMRShKU1Rlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zUHJvdG90eXBlLCBCYXNl
KTsKKyAgICAgICAgcmV0dXJuICZ2bS5wbGFpbk9iamVjdFNwYWNlOworICAgIH0KKyAgICBzdGF0
aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwg
cHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3Mp
LCBpbmZvKCkpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBKU1Rlc3RTZXRMaWtlV2l0aE92ZXJy
aWRkZW5PcGVyYXRpb25zUHJvdG90eXBlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0
KiwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICAgICAgOiBKU0M6OkpTTm9uRmluYWxP
YmplY3Qodm0sIHN0cnVjdHVyZSkKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBmaW5pc2hDcmVh
dGlvbihKU0M6OlZNJik7Cit9OworU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUo
SlNUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9uc1Byb3RvdHlwZSwgSlNUZXN0U2V0
TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9uc1Byb3RvdHlwZTo6QmFzZSk7CisKK3VzaW5nIEpT
VGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnNDb25zdHJ1Y3RvciA9IEpTRE9NQ29u
c3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxlPEpTVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJh
dGlvbnM+OworCit0ZW1wbGF0ZTw+IEpTVmFsdWUgSlNUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVu
T3BlcmF0aW9uc0NvbnN0cnVjdG9yOjpwcm90b3R5cGVGb3JTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0s
IGNvbnN0IEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCit7CisgICAgVU5VU0VEX1BB
UkFNKHZtKTsKKyAgICByZXR1cm4gZ2xvYmFsT2JqZWN0LmZ1bmN0aW9uUHJvdG90eXBlKCk7Cit9
CisKK3RlbXBsYXRlPD4gdm9pZCBKU1Rlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25z
Q29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKFZNJiB2bSwgSlNET01HbG9iYWxPYmpl
Y3QmIGdsb2JhbE9iamVjdCkKK3sKKyAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMt
PnByb3RvdHlwZSwgSlNUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9uczo6cHJvdG90
eXBlKHZtLCBnbG9iYWxPYmplY3QpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRl
IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmli
dXRlOjpEb250RW51bSk7CisgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1l
LCBqc05vbnRyaXZpYWxTdHJpbmcodm0sICJUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0
aW9ucyJfcyksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0
eUF0dHJpYnV0ZTo6RG9udEVudW0pOworICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1l
cy0+bGVuZ3RoLCBqc051bWJlcigwKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkg
fCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7Cit9CisKK3RlbXBsYXRlPD4gY29u
c3QgQ2xhc3NJbmZvIEpTVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnNDb25zdHJ1
Y3Rvcjo6c19pbmZvID0geyAiVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMiLCAm
QmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTVGVz
dFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnNDb25zdHJ1Y3RvcikgfTsKKworLyogSGFz
aCB0YWJsZSBmb3IgcHJvdG90eXBlICovCisKK3N0YXRpYyBjb25zdCBIYXNoVGFibGVWYWx1ZSBK
U1Rlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zUHJvdG90eXBlVGFibGVWYWx1ZXNb
XSA9Cit7CisgICAgeyAiY29uc3RydWN0b3IiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNDOjpQ
cm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3Rh
dGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdFNldExpa2VXaXRoT3Zl
cnJpZGRlbk9wZXJhdGlvbnNDb25zdHJ1Y3RvciksIChpbnRwdHJfdCkgc3RhdGljX2Nhc3Q8UHV0
UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmM+KHNldEpTVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRl
bk9wZXJhdGlvbnNDb25zdHJ1Y3RvcikgfSB9LAorICAgIHsgImFkZCIsIHN0YXRpY19jYXN0PHVu
c2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpDdXN0b21BY2Nlc3NvciB8IEpTQzo6UHJv
cGVydHlBdHRyaWJ1dGU6OkRPTUF0dHJpYnV0ZSksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClz
dGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0U2V0TGlrZVdpdGhP
dmVycmlkZGVuT3BlcmF0aW9uc0FkZCksIChpbnRwdHJfdCkgc3RhdGljX2Nhc3Q8UHV0UHJvcGVy
dHlTbG90OjpQdXRWYWx1ZUZ1bmM+KHNldEpTVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJh
dGlvbnNBZGQpIH0gfSwKKyAgICB7ICJzaXplIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6
UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtIHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVh
ZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpDdXN0b21BY2Nlc3NvciksIE5vSW50cmlu
c2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4o
anNUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9uc1NpemUpLCAoaW50cHRyX3QpIHN0
YXRpY19jYXN0PFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jPigwKSB9IH0sCisgICAgeyAi
ZGVsZXRlIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkZ1
bmN0aW9uKSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PFJhd05hdGl2ZUZ1
bmN0aW9uPihqc1Rlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zUHJvdG90eXBlRnVu
Y3Rpb25EZWxldGUpLCAoaW50cHRyX3QpICgwKSB9IH0sCisgICAgeyAiaGFzIiwgc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtIHwgSlNDOjpQcm9w
ZXJ0eUF0dHJpYnV0ZTo6RnVuY3Rpb24pLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGlj
X2Nhc3Q8UmF3TmF0aXZlRnVuY3Rpb24+KGpzVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJh
dGlvbnNQcm90b3R5cGVGdW5jdGlvbkhhcyksIChpbnRwdHJfdCkgKDEpIH0gfSwKKyAgICB7ICJl
bnRyaWVzIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRv
bnRFbnVtIHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RnVuY3Rpb24pLCBOb0ludHJpbnNpYywg
eyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UmF3TmF0aXZlRnVuY3Rpb24+KGpzVGVzdFNldExpa2VX
aXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnNQcm90b3R5cGVGdW5jdGlvbkVudHJpZXMpLCAoaW50cHRy
X3QpICgwKSB9IH0sCisgICAgeyAia2V5cyIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlBy
b3BlcnR5QXR0cmlidXRlOjpEb250RW51bSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkZ1bmN0
aW9uKSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PFJhd05hdGl2ZUZ1bmN0
aW9uPihqc1Rlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zUHJvdG90eXBlRnVuY3Rp
b25LZXlzKSwgKGludHB0cl90KSAoMCkgfSB9LAorICAgIHsgInZhbHVlcyIsIHN0YXRpY19jYXN0
PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSB8IEpTQzo6UHJvcGVy
dHlBdHRyaWJ1dGU6OkZ1bmN0aW9uKSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19j
YXN0PFJhd05hdGl2ZUZ1bmN0aW9uPihqc1Rlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRp
b25zUHJvdG90eXBlRnVuY3Rpb25WYWx1ZXMpLCAoaW50cHRyX3QpICgwKSB9IH0sCisgICAgeyAi
Zm9yRWFjaCIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpE
b250RW51bSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkZ1bmN0aW9uKSwgTm9JbnRyaW5zaWMs
IHsgKGludHB0cl90KXN0YXRpY19jYXN0PFJhd05hdGl2ZUZ1bmN0aW9uPihqc1Rlc3RTZXRMaWtl
V2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zUHJvdG90eXBlRnVuY3Rpb25Gb3JFYWNoKSwgKGludHB0
cl90KSAoMSkgfSB9LAorICAgIHsgImNsZWFyIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6
UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtIHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RnVu
Y3Rpb24pLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UmF3TmF0aXZlRnVu
Y3Rpb24+KGpzVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnNQcm90b3R5cGVGdW5j
dGlvbkNsZWFyKSwgKGludHB0cl90KSAoMCkgfSB9LAorfTsKKworY29uc3QgQ2xhc3NJbmZvIEpT
VGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnNQcm90b3R5cGU6OnNfaW5mbyA9IHsg
IlRlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zIiwgJkJhc2U6OnNfaW5mbywgbnVs
bHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Rlc3RTZXRMaWtlV2l0aE92ZXJy
aWRkZW5PcGVyYXRpb25zUHJvdG90eXBlKSB9OworCit2b2lkIEpTVGVzdFNldExpa2VXaXRoT3Zl
cnJpZGRlbk9wZXJhdGlvbnNQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKK3sKKyAg
ICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CisgICAgcmVpZnlTdGF0aWNQcm9wZXJ0aWVzKHZt
LCBKU1Rlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zOjppbmZvKCksIEpTVGVzdFNl
dExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnNQcm90b3R5cGVUYWJsZVZhbHVlcywgKnRoaXMp
OworICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+aXRlcmF0b3JTeW1ib2wsIGdl
dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+YnVpbHRpbk5hbWVzKCkuZW50cmllc1B1Ymxp
Y05hbWUoKSksIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpE
b250RW51bSkpOworICAgIEpTQ19UT19TVFJJTkdfVEFHX1dJVEhPVVRfVFJBTlNJVElPTigpOwor
fQorCitjb25zdCBDbGFzc0luZm8gSlNUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9u
czo6c19pbmZvID0geyAiVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMiLCAmQmFz
ZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTVGVzdFNl
dExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMpIH07CisKK0pTVGVzdFNldExpa2VXaXRoT3Zl
cnJpZGRlbk9wZXJhdGlvbnM6OkpTVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMo
U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFJl
ZjxUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucz4mJiBpbXBsKQorICAgIDogSlNE
T01XcmFwcGVyPFRlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zPihzdHJ1Y3R1cmUs
IGdsb2JhbE9iamVjdCwgV1RGTW92ZShpbXBsKSkKK3sKK30KKwordm9pZCBKU1Rlc3RTZXRMaWtl
V2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCit7CisgICAg
QmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOworICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygp
KSk7CisKKyAgICBzdGF0aWNfYXNzZXJ0KCFzdGQ6OmlzX2Jhc2Vfb2Y8QWN0aXZlRE9NT2JqZWN0
LCBUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucz46OnZhbHVlLCAiSW50ZXJmYWNl
IGlzIG5vdCBtYXJrZWQgYXMgW0FjdGl2ZURPTU9iamVjdF0gZXZlbiB0aG91Z2ggaW1wbGVtZW50
YXRpb24gY2xhc3Mgc3ViY2xhc3NlcyBBY3RpdmVET01PYmplY3QuIik7CisKK30KKworSlNPYmpl
Y3QqIEpTVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnM6OmNyZWF0ZVByb3RvdHlw
ZShWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCit7CisgICAgcmV0dXJu
IEpTVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnNQcm90b3R5cGU6OmNyZWF0ZSh2
bSwgJmdsb2JhbE9iamVjdCwgSlNUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9uc1By
b3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKHZtLCAmZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3Qu
b2JqZWN0UHJvdG90eXBlKCkpKTsKK30KKworSlNPYmplY3QqIEpTVGVzdFNldExpa2VXaXRoT3Zl
cnJpZGRlbk9wZXJhdGlvbnM6OnByb3RvdHlwZShWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBn
bG9iYWxPYmplY3QpCit7CisgICAgcmV0dXJuIGdldERPTVByb3RvdHlwZTxKU1Rlc3RTZXRMaWtl
V2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zPih2bSwgZ2xvYmFsT2JqZWN0KTsKK30KKworSlNWYWx1
ZSBKU1Rlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zOjpnZXRDb25zdHJ1Y3RvcihW
TSYgdm0sIGNvbnN0IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCit7CisgICAgcmV0dXJu
IGdldERPTUNvbnN0cnVjdG9yPEpTVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnND
b25zdHJ1Y3Rvcj4odm0sICpqc0Nhc3Q8Y29uc3QgSlNET01HbG9iYWxPYmplY3QqPihnbG9iYWxP
YmplY3QpKTsKK30KKwordm9pZCBKU1Rlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25z
OjpkZXN0cm95KEpTQzo6SlNDZWxsKiBjZWxsKQoreworICAgIEpTVGVzdFNldExpa2VXaXRoT3Zl
cnJpZGRlbk9wZXJhdGlvbnMqIHRoaXNPYmplY3QgPSBzdGF0aWNfY2FzdDxKU1Rlc3RTZXRMaWtl
V2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zKj4oY2VsbCk7CisgICAgdGhpc09iamVjdC0+SlNUZXN0
U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9uczo6fkpTVGVzdFNldExpa2VXaXRoT3ZlcnJp
ZGRlbk9wZXJhdGlvbnMoKTsKK30KKwordGVtcGxhdGU8PiBpbmxpbmUgSlNUZXN0U2V0TGlrZVdp
dGhPdmVycmlkZGVuT3BlcmF0aW9ucyogSURMQXR0cmlidXRlPEpTVGVzdFNldExpa2VXaXRoT3Zl
cnJpZGRlbk9wZXJhdGlvbnM+OjpjYXN0KEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUpCit7CisgICAgcmV0dXJuIGpzRHluYW1pY0Nh
c3Q8SlNUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucyo+KEpTQzo6Z2V0Vk0oJmxl
eGljYWxHbG9iYWxPYmplY3QpLCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7Cit9CisKK3Rl
bXBsYXRlPD4gaW5saW5lIEpTVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMqIElE
TE9wZXJhdGlvbjxKU1Rlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zPjo6Y2FzdChK
U0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lJiBjYWxsRnJhbWUp
Cit7CisgICAgcmV0dXJuIGpzRHluYW1pY0Nhc3Q8SlNUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVu
T3BlcmF0aW9ucyo+KEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCBjYWxsRnJhbWUu
dGhpc1ZhbHVlKCkpOworfQorCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXRMaWtlV2l0aE92ZXJy
aWRkZW5PcGVyYXRpb25zQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxP
YmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQoreworICAgIFZN
JiB2bSA9IEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgYXV0byB0aHJvd1Nj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgYXV0byogcHJvdG90eXBlID0ganNE
eW5hbWljQ2FzdDxKU1Rlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zUHJvdG90eXBl
Kj4odm0sIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKKyAgICBpZiAoVU5MSUtFTFkoIXBy
b3RvdHlwZSkpCisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGxleGljYWxHbG9iYWxP
YmplY3QsIHRocm93U2NvcGUpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNUZXN0U2V0
TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9uczo6Z2V0Q29uc3RydWN0b3IoSlNDOjpnZXRWTShs
ZXhpY2FsR2xvYmFsT2JqZWN0KSwgcHJvdG90eXBlLT5nbG9iYWxPYmplY3QoKSkpOworfQorCiti
b29sIHNldEpTVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnNDb25zdHJ1Y3RvcihK
U0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1Zh
bHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCit7CisgICAgVk0mIHZtID0gSlNDOjpn
ZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKKyAgICBhdXRvKiBwcm90b3R5cGUgPSBqc0R5bmFtaWNDYXN0PEpT
VGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnNQcm90b3R5cGUqPih2bSwgSlNWYWx1
ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAgIGlmIChVTkxJS0VMWSghcHJvdG90eXBlKSkgewor
ICAgICAgICB0aHJvd1ZNVHlwZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUp
OworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0
LWluIGNvbnN0cnVjdG9yCisgICAgcmV0dXJuIHByb3RvdHlwZS0+cHV0RGlyZWN0KHZtLCB2bS5w
cm9wZXJ0eU5hbWVzLT5jb25zdHJ1Y3RvciwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSkp
OworfQorCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVu
T3BlcmF0aW9uc0FkZEdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwg
SlNUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucyYgdGhpc09iamVjdCkKK3sKKyAg
ICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGF1dG8g
dGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGF1dG8mIGltcGwgPSB0
aGlzT2JqZWN0LndyYXBwZWQoKTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwg
KHRvSlM8SURMTG9uZz4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5hZGQo
KSkpKTsKK30KKworRW5jb2RlZEpTVmFsdWUganNUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3Bl
cmF0aW9uc0FkZChKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpT
VmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCit7CisgICAgcmV0dXJuIElETEF0dHJpYnV0
ZTxKU1Rlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zPjo6Z2V0PGpzVGVzdFNldExp
a2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnNBZGRHZXR0ZXIsIENhc3RlZFRoaXNFcnJvckJlaGF2
aW9yOjpBc3NlcnQ+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsICJhZGQiKTsKK30K
Kworc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJh
dGlvbnNBZGRTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVz
dFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFs
dWUpCit7CisgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsK
KyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBhdXRv
JiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CisgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNv
bnZlcnQ8SURMTG9uZz4obGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOworICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOworICAgIEF0dHJpYnV0ZVNldHRlcjo6Y2Fs
bChsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBbJl0geworICAgICAgICByZXR1cm4g
aW1wbC5zZXRBZGQoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOworICAgIH0pOworICAgIHJldHVybiB0
cnVlOworfQorCitib29sIHNldEpTVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnNB
ZGQoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRo
aXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQoreworICAgIHJldHVybiBJRExB
dHRyaWJ1dGU8SlNUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucz46OnNldDxzZXRK
U1Rlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zQWRkU2V0dGVyPigqbGV4aWNhbEds
b2JhbE9iamVjdCwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJhZGQiKTsKK30KKworc3RhdGlj
IGlubGluZSBKU1ZhbHVlIGpzVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnNTaXpl
R2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RTZXRMaWtl
V2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zJiB0aGlzT2JqZWN0KQoreworICAgIGF1dG8mIHZtID0g
SlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2Nv
cGUsICh0b0pTPElETEFueT4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgZm9yd2Fy
ZFNpemVUb1NldExpa2UobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc09iamVjdCkpKSk7Cit9CisK
K0VuY29kZWRKU1ZhbHVlIGpzVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnNTaXpl
KEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlz
VmFsdWUsIFByb3BlcnR5TmFtZSkKK3sKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdFNl
dExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnM+OjpnZXQ8anNUZXN0U2V0TGlrZVdpdGhPdmVy
cmlkZGVuT3BlcmF0aW9uc1NpemVHZXR0ZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFs
dWUsICJzaXplIik7Cit9CisKK3N0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zUHJvdG90eXBlRnVuY3Rpb25EZWxldGVC
b2R5KEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6Q2FsbEZy
YW1lKiBjYWxsRnJhbWUsIHR5cGVuYW1lIElETE9wZXJhdGlvbjxKU1Rlc3RTZXRMaWtlV2l0aE92
ZXJyaWRkZW5PcGVyYXRpb25zPjo6Q2xhc3NQYXJhbWV0ZXIgY2FzdGVkVGhpcykKK3sKKyAgICBh
dXRvJiB2bSA9IEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgYXV0byB0aHJv
d1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93
U2NvcGUpOworICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGF1dG8mIGltcGwgPSBj
YXN0ZWRUaGlzLT53cmFwcGVkKCk7CisgICAgdGhyb3dTY29wZS5yZWxlYXNlKCk7CisgICAgaW1w
bC5kZWxldGUoKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwor
fQorCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdFNldExpa2VXaXRoT3ZlcnJp
ZGRlbk9wZXJhdGlvbnNQcm90b3R5cGVGdW5jdGlvbkRlbGV0ZShKU0dsb2JhbE9iamVjdCogbGV4
aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCit7CisgICAgcmV0dXJuIElE
TE9wZXJhdGlvbjxKU1Rlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zPjo6Y2FsbDxq
c1Rlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zUHJvdG90eXBlRnVuY3Rpb25EZWxl
dGVCb2R5PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSwgImRlbGV0ZSIpOworfQor
CitzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0U2V0TGlrZVdpdGhPdmVy
cmlkZGVuT3BlcmF0aW9uc1Byb3RvdHlwZUZ1bmN0aW9uSGFzQm9keShKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OkNhbGxGcmFtZSogY2FsbEZyYW1lLCB0eXBl
bmFtZSBJRExPcGVyYXRpb248SlNUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucz46
OkNsYXNzUGFyYW1ldGVyIGNhc3RlZFRoaXMpCit7CisgICAgYXV0byYgdm0gPSBKU0M6OmdldFZN
KGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBVTlVTRURf
UEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENv
dW50KCkgPCAxKSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xv
YmFsT2JqZWN0KSk7CisgICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxG
cmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7CisgICAgYXV0byBrZXkgPSBjb252ZXJ0PElETERP
TVN0cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MC52YWx1ZSgpKTsKKyAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJF
TEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCBKU1ZhbHVlOjplbmNvZGUodG9KUzxJRExBbnk+
KGZvcndhcmRIYXNUb1NldExpa2UoKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUsICpj
YXN0ZWRUaGlzLCBXVEZNb3ZlKGtleSkpKSkpOworfQorCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGpzVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnNQcm90b3R5cGVGdW5j
dGlvbkhhcyhKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBj
YWxsRnJhbWUpCit7CisgICAgcmV0dXJuIElETE9wZXJhdGlvbjxKU1Rlc3RTZXRMaWtlV2l0aE92
ZXJyaWRkZW5PcGVyYXRpb25zPjo6Y2FsbDxqc1Rlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVy
YXRpb25zUHJvdG90eXBlRnVuY3Rpb25IYXNCb2R5PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNh
bGxGcmFtZSwgImhhcyIpOworfQorCitzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUg
anNUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9uc1Byb3RvdHlwZUZ1bmN0aW9uRW50
cmllc0JvZHkoSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpD
YWxsRnJhbWUqIGNhbGxGcmFtZSwgdHlwZW5hbWUgSURMT3BlcmF0aW9uPEpTVGVzdFNldExpa2VX
aXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnM+OjpDbGFzc1BhcmFtZXRlciBjYXN0ZWRUaGlzKQorewor
ICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBhdXRv
IHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBVTlVTRURfUEFSQU0o
dGhyb3dTY29wZSk7CisgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgUkVMRUFTRV9B
TkRfUkVUVVJOKHRocm93U2NvcGUsIEpTVmFsdWU6OmVuY29kZSh0b0pTPElETEFueT4oZm9yd2Fy
ZEVudHJpZXNUb1NldExpa2UoKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUsICpjYXN0
ZWRUaGlzKSkpKTsKK30KKworRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RTZXRM
aWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zUHJvdG90eXBlRnVuY3Rpb25FbnRyaWVzKEpTR2xv
YmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKK3sK
KyAgICByZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJh
dGlvbnM+OjpjYWxsPGpzVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnNQcm90b3R5
cGVGdW5jdGlvbkVudHJpZXNCb2R5PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSwg
ImVudHJpZXMiKTsKK30KKworc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVz
dFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnNQcm90b3R5cGVGdW5jdGlvbktleXNCb2R5
KEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6Q2FsbEZyYW1l
KiBjYWxsRnJhbWUsIHR5cGVuYW1lIElETE9wZXJhdGlvbjxKU1Rlc3RTZXRMaWtlV2l0aE92ZXJy
aWRkZW5PcGVyYXRpb25zPjo6Q2xhc3NQYXJhbWV0ZXIgY2FzdGVkVGhpcykKK3sKKyAgICBhdXRv
JiB2bSA9IEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgYXV0byB0aHJvd1Nj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2Nv
cGUpOworICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIFJFTEVBU0VfQU5EX1JFVFVS
Tih0aHJvd1Njb3BlLCBKU1ZhbHVlOjplbmNvZGUodG9KUzxJRExBbnk+KGZvcndhcmRLZXlzVG9T
ZXRMaWtlKCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lLCAqY2FzdGVkVGhpcykpKSk7
Cit9CisKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0U2V0TGlrZVdpdGhPdmVy
cmlkZGVuT3BlcmF0aW9uc1Byb3RvdHlwZUZ1bmN0aW9uS2V5cyhKU0dsb2JhbE9iamVjdCogbGV4
aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCit7CisgICAgcmV0dXJuIElE
TE9wZXJhdGlvbjxKU1Rlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zPjo6Y2FsbDxq
c1Rlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zUHJvdG90eXBlRnVuY3Rpb25LZXlz
Qm9keT4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUsICJrZXlzIik7Cit9CisKK3N0
YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXRMaWtlV2l0aE92ZXJyaWRk
ZW5PcGVyYXRpb25zUHJvdG90eXBlRnVuY3Rpb25WYWx1ZXNCb2R5KEpTQzo6SlNHbG9iYWxPYmpl
Y3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6Q2FsbEZyYW1lKiBjYWxsRnJhbWUsIHR5cGVu
YW1lIElETE9wZXJhdGlvbjxKU1Rlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zPjo6
Q2xhc3NQYXJhbWV0ZXIgY2FzdGVkVGhpcykKK3sKKyAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0o
bGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIFVOVVNFRF9Q
QVJBTShjYWxsRnJhbWUpOworICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCBKU1Zh
bHVlOjplbmNvZGUodG9KUzxJRExBbnk+KGZvcndhcmRWYWx1ZXNUb1NldExpa2UoKmxleGljYWxH
bG9iYWxPYmplY3QsICpjYWxsRnJhbWUsICpjYXN0ZWRUaGlzKSkpKTsKK30KKworRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25z
UHJvdG90eXBlRnVuY3Rpb25WYWx1ZXMoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmpl
Y3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQoreworICAgIHJldHVybiBJRExPcGVyYXRpb248SlNU
ZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucz46OmNhbGw8anNUZXN0U2V0TGlrZVdp
dGhPdmVycmlkZGVuT3BlcmF0aW9uc1Byb3RvdHlwZUZ1bmN0aW9uVmFsdWVzQm9keT4oKmxleGlj
YWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUsICJ2YWx1ZXMiKTsKK30KKworc3RhdGljIGlubGlu
ZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlv
bnNQcm90b3R5cGVGdW5jdGlvbkZvckVhY2hCb2R5KEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGlj
YWxHbG9iYWxPYmplY3QsIEpTQzo6Q2FsbEZyYW1lKiBjYWxsRnJhbWUsIHR5cGVuYW1lIElETE9w
ZXJhdGlvbjxKU1Rlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zPjo6Q2xhc3NQYXJh
bWV0ZXIgY2FzdGVkVGhpcykKK3sKKyAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0obGV4aWNhbEds
b2JhbE9iamVjdCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIFVOVVNFRF9QQVJBTShjYWxs
RnJhbWUpOworICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEp
KQorICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93
U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3Qp
KTsKKyAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0gY2FsbEZyYW1lLT51bmNo
ZWNrZWRBcmd1bWVudCgwKTsKKyAgICBhdXRvIGNhbGxiYWNrID0gY29udmVydDxJRExBbnk+KCps
ZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDAudmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRUxFQVNFX0FORF9S
RVRVUk4odGhyb3dTY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKHRvSlM8SURMQW55Pihmb3J3YXJkRm9y
RWFjaFRvU2V0TGlrZSgqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSwgKmNhc3RlZFRo
aXMsIFdURk1vdmUoY2FsbGJhY2spKSkpKTsKK30KKworRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBqc1Rlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zUHJvdG90eXBlRnVuY3Rp
b25Gb3JFYWNoKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUq
IGNhbGxGcmFtZSkKK3sKKyAgICByZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVzdFNldExpa2VXaXRo
T3ZlcnJpZGRlbk9wZXJhdGlvbnM+OjpjYWxsPGpzVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9w
ZXJhdGlvbnNQcm90b3R5cGVGdW5jdGlvbkZvckVhY2hCb2R5PigqbGV4aWNhbEdsb2JhbE9iamVj
dCwgKmNhbGxGcmFtZSwgImZvckVhY2giKTsKK30KKworc3RhdGljIGlubGluZSBKU0M6OkVuY29k
ZWRKU1ZhbHVlIGpzVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnNQcm90b3R5cGVG
dW5jdGlvbkNsZWFyQm9keShKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0
LCBKU0M6OkNhbGxGcmFtZSogY2FsbEZyYW1lLCB0eXBlbmFtZSBJRExPcGVyYXRpb248SlNUZXN0
U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucz46OkNsYXNzUGFyYW1ldGVyIGNhc3RlZFRo
aXMpCit7CisgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpOwor
ICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIFVOVVNF
RF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICB0
aHJvd1Njb3BlLnJlbGVhc2UoKTsKKyAgICBmb3J3YXJkQ2xlYXJUb1NldExpa2UoKmxleGljYWxH
bG9iYWxPYmplY3QsICpjYWxsRnJhbWUsICpjYXN0ZWRUaGlzKTsKKyAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworfQorCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGpzVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnNQcm90b3R5cGVGdW5jdGlv
bkNsZWFyKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNh
bGxGcmFtZSkKK3sKKyAgICByZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVzdFNldExpa2VXaXRoT3Zl
cnJpZGRlbk9wZXJhdGlvbnM+OjpjYWxsPGpzVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJh
dGlvbnNQcm90b3R5cGVGdW5jdGlvbkNsZWFyQm9keT4oKmxleGljYWxHbG9iYWxPYmplY3QsICpj
YWxsRnJhbWUsICJjbGVhciIpOworfQorCitKU0M6Oklzb1N1YnNwYWNlKiBKU1Rlc3RTZXRMaWtl
V2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zOjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCit7
CisgICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZt
LmNsaWVudERhdGEpOworICAgIGF1dG8mIHNwYWNlcyA9IGNsaWVudERhdGEuc3Vic3BhY2VzKCk7
CisgICAgaWYgKGF1dG8qIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0U2V0TGlrZVdp
dGhPdmVycmlkZGVuT3BlcmF0aW9ucy5nZXQoKSkKKyAgICAgICAgcmV0dXJuIHNwYWNlOworICAg
IHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVj
dCwgSlNUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucz4gfHwgIUpTVGVzdFNldExp
a2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnM6Om5lZWRzRGVzdHJ1Y3Rpb24pOworICAgIGlmIGNv
bnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNU
ZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucz4pCisgICAgICAgIHNwYWNlcy5tX3N1
YnNwYWNlRm9yVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMgPSBtYWtlVW5pcXVl
PElzb1N1YnNwYWNlPiBJU09fU1VCU1BBQ0VfSU5JVCh2bS5oZWFwLCB2bS5kZXN0cnVjdGlibGVP
YmplY3RIZWFwQ2VsbFR5cGUuZ2V0KCksIEpTVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJh
dGlvbnMpOworICAgIGVsc2UKKyAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0U2V0TGlr
ZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucyA9IG1ha2VVbmlxdWU8SXNvU3Vic3BhY2U+IElTT19T
VUJTUEFDRV9JTklUKHZtLmhlYXAsIHZtLmNlbGxIZWFwQ2VsbFR5cGUuZ2V0KCksIEpTVGVzdFNl
dExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMpOworICAgIGF1dG8qIHNwYWNlID0gc3BhY2Vz
Lm1fc3Vic3BhY2VGb3JUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucy5nZXQoKTsK
K0lHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCitJR05PUkVfV0FSTklO
R1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKKyAgICBpZiAoJkpTVGVzdFNldExpa2VX
aXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnM6OnZpc2l0T3V0cHV0Q29uc3RyYWludHMgIT0gJkpTQzo6
SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzKQorICAgICAgICBjbGllbnREYXRhLm91dHB1
dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOworSUdOT1JFX1dBUk5JTkdTX0VORAor
SUdOT1JFX1dBUk5JTkdTX0VORAorICAgIHJldHVybiBzcGFjZTsKK30KKwordm9pZCBKU1Rlc3RT
ZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zOjphbmFseXplSGVhcChKU0NlbGwqIGNlbGws
IEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCit7CisgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2Fz
dDxKU1Rlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zKj4oY2VsbCk7CisgICAgYW5h
bHl6ZXIuc2V0V3JhcHBlZE9iamVjdEZvckNlbGwoY2VsbCwgJnRoaXNPYmplY3QtPndyYXBwZWQo
KSk7CisgICAgaWYgKHRoaXNPYmplY3QtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkKKyAgICAg
ICAgYW5hbHl6ZXIuc2V0TGFiZWxGb3JDZWxsKGNlbGwsICJ1cmwgIiArIHRoaXNPYmplY3QtPnNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+dXJsKCkuc3RyaW5nKCkpOworICAgIEJhc2U6OmFuYWx5
emVIZWFwKGNlbGwsIGFuYWx5emVyKTsKK30KKworYm9vbCBKU1Rlc3RTZXRMaWtlV2l0aE92ZXJy
aWRkZW5PcGVyYXRpb25zT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFu
ZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgU2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNv
bnN0IGNoYXIqKiByZWFzb24pCit7CisgICAgVU5VU0VEX1BBUkFNKGhhbmRsZSk7CisgICAgVU5V
U0VEX1BBUkFNKHZpc2l0b3IpOworICAgIFVOVVNFRF9QQVJBTShyZWFzb24pOworICAgIHJldHVy
biBmYWxzZTsKK30KKwordm9pZCBKU1Rlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25z
T3duZXI6OmZpbmFsaXplKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiBj
b250ZXh0KQoreworICAgIGF1dG8qIGpzVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlv
bnMgPSBzdGF0aWNfY2FzdDxKU1Rlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zKj4o
aGFuZGxlLnNsb3QoKS0+YXNDZWxsKCkpOworICAgIGF1dG8mIHdvcmxkID0gKnN0YXRpY19jYXN0
PERPTVdyYXBwZXJXb3JsZCo+KGNvbnRleHQpOworICAgIHVuY2FjaGVXcmFwcGVyKHdvcmxkLCAm
anNUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucy0+d3JhcHBlZCgpLCBqc1Rlc3RT
ZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zKTsKK30KKworI2lmIEVOQUJMRShCSU5ESU5H
X0lOVEVHUklUWSkKKyNpZiBQTEFURk9STShXSU4pCisjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTog
NDQ4MykKK2V4dGVybiAiQyIgeyBleHRlcm4gdm9pZCAoKmNvbnN0IF9faWRlbnRpZmllcigiPz9f
N1Rlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zQFdlYkNvcmVAQDZCQCIpW10pKCk7
IH0KKyNlbHNlCitleHRlcm4gIkMiIHsgZXh0ZXJuIHZvaWQqIF9aVFZON1dlYkNvcmUzNVRlc3RT
ZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zRVtdOyB9CisjZW5kaWYKKyNlbmRpZgorCitK
U0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNET01H
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmPFRlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5P
cGVyYXRpb25zPiYmIGltcGwpCit7CisKKyNpZiBFTkFCTEUoQklORElOR19JTlRFR1JJVFkpCisg
ICAgY29uc3Qgdm9pZCogYWN0dWFsVlRhYmxlUG9pbnRlciA9IGdldFZUYWJsZVBvaW50ZXIoaW1w
bC5wdHIoKSk7CisjaWYgUExBVEZPUk0oV0lOKQorICAgIHZvaWQqIGV4cGVjdGVkVlRhYmxlUG9p
bnRlciA9IF9faWRlbnRpZmllcigiPz9fN1Rlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRp
b25zQFdlYkNvcmVAQDZCQCIpOworI2Vsc2UKKyAgICB2b2lkKiBleHBlY3RlZFZUYWJsZVBvaW50
ZXIgPSAmX1pUVk43V2ViQ29yZTM1VGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnNF
WzJdOworI2VuZGlmCisKKyAgICAvLyBJZiB0aGlzIGZhaWxzIFRlc3RTZXRMaWtlV2l0aE92ZXJy
aWRkZW5PcGVyYXRpb25zIGRvZXMgbm90IGhhdmUgYSB2dGFibGUsIHNvIHlvdSBuZWVkIHRvIGFk
ZCB0aGUKKyAgICAvLyBJbXBsZW1lbnRhdGlvbkxhY2tzVlRhYmxlIGF0dHJpYnV0ZSB0byB0aGUg
aW50ZXJmYWNlIGRlZmluaXRpb24KKyAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfcG9seW1vcnBo
aWM8VGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnM+Ojp2YWx1ZSwgIlRlc3RTZXRM
aWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zIGlzIG5vdCBwb2x5bW9ycGhpYyIpOworCisgICAg
Ly8gSWYgeW91IGhpdCB0aGlzIGFzc2VydGlvbiB5b3UgZWl0aGVyIGhhdmUgYSB1c2UgYWZ0ZXIg
ZnJlZSBidWcsIG9yCisgICAgLy8gVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMg
aGFzIHN1YmNsYXNzZXMuIElmIFRlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zIGhh
cyBzdWJjbGFzc2VzIHRoYXQgZ2V0IHBhc3NlZAorICAgIC8vIHRvIHRvSlMoKSB3ZSBjdXJyZW50
bHkgcmVxdWlyZSBUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucyB5b3UgdG8gb3B0
IG91dCBvZiBiaW5kaW5nIGhhcmRlbmluZworICAgIC8vIGJ5IGFkZGluZyB0aGUgU2tpcFZUYWJs
ZVZhbGlkYXRpb24gYXR0cmlidXRlIHRvIHRoZSBpbnRlcmZhY2UgSURMIGRlZmluaXRpb24KKyAg
ICBSRUxFQVNFX0FTU0VSVChhY3R1YWxWVGFibGVQb2ludGVyID09IGV4cGVjdGVkVlRhYmxlUG9p
bnRlcik7CisjZW5kaWYKKyAgICByZXR1cm4gY3JlYXRlV3JhcHBlcjxUZXN0U2V0TGlrZVdpdGhP
dmVycmlkZGVuT3BlcmF0aW9ucz4oZ2xvYmFsT2JqZWN0LCBXVEZNb3ZlKGltcGwpKTsKK30KKwor
SlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVj
dCwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgVGVzdFNldExpa2VXaXRoT3ZlcnJp
ZGRlbk9wZXJhdGlvbnMmIGltcGwpCit7CisgICAgcmV0dXJuIHdyYXAobGV4aWNhbEdsb2JhbE9i
amVjdCwgZ2xvYmFsT2JqZWN0LCBpbXBsKTsKK30KKworVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRl
bk9wZXJhdGlvbnMqIEpTVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnM6OnRvV3Jh
cHBlZChKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQoreworICAgIGlmIChhdXRvKiB3
cmFwcGVyID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRp
b25zKj4odm0sIHZhbHVlKSkKKyAgICAgICAgcmV0dXJuICZ3cmFwcGVyLT53cmFwcGVkKCk7Cisg
ICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMuaAkobm9uZXhpc3RlbnQpCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2V0TGlrZVdpdGhP
dmVycmlkZGVuT3BlcmF0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTMgQEAKKy8q
CisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0
LgorICAgIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3Mu
cGwuIERPIE5PVCBNT0RJRlkhCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgorKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJKU0RPTVdy
YXBwZXIuaCIKKyNpbmNsdWRlICJUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucy5o
IgorI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2NsYXNzIEpTVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMgOiBwdWJsaWMg
SlNET01XcmFwcGVyPFRlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zPiB7CitwdWJs
aWM6CisgICAgdXNpbmcgQmFzZSA9IEpTRE9NV3JhcHBlcjxUZXN0U2V0TGlrZVdpdGhPdmVycmlk
ZGVuT3BlcmF0aW9ucz47CisgICAgc3RhdGljIEpTVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9w
ZXJhdGlvbnMqIGNyZWF0ZShKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBSZWY8VGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlv
bnM+JiYgaW1wbCkKKyAgICB7CisgICAgICAgIEpTVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9w
ZXJhdGlvbnMqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0U2V0
TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucz4oZ2xvYmFsT2JqZWN0LT52bSgpLmhlYXApKSBK
U1Rlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zKHN0cnVjdHVyZSwgKmdsb2JhbE9i
amVjdCwgV1RGTW92ZShpbXBsKSk7CisgICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFs
T2JqZWN0LT52bSgpKTsKKyAgICAgICAgcmV0dXJuIHB0cjsKKyAgICB9CisKKyAgICBzdGF0aWMg
SlNDOjpKU09iamVjdCogY3JlYXRlUHJvdG90eXBlKEpTQzo6Vk0mLCBKU0RPTUdsb2JhbE9iamVj
dCYpOworICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBwcm90b3R5cGUoSlNDOjpWTSYsIEpTRE9N
R2xvYmFsT2JqZWN0Jik7CisgICAgc3RhdGljIFRlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVy
YXRpb25zKiB0b1dyYXBwZWQoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7CisgICAgc3RhdGljIHZv
aWQgZGVzdHJveShKU0M6OkpTQ2VsbCopOworCisgICAgREVDTEFSRV9JTkZPOworCisgICAgc3Rh
dGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7
CisgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3Qs
IHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdz
KSwgaW5mbygpLCBKU0M6Ok5vbkFycmF5KTsKKyAgICB9CisKKyAgICBzdGF0aWMgSlNDOjpKU1Zh
bHVlIGdldENvbnN0cnVjdG9yKEpTQzo6Vk0mLCBjb25zdCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUsIEpTQzo6U3Vic3BhY2VBY2Nlc3MgbW9kZT4gc3RhdGlj
IEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQorICAgIHsKKyAgICAg
ICAgaWYgY29uc3RleHByIChtb2RlID09IEpTQzo6U3Vic3BhY2VBY2Nlc3M6OkNvbmN1cnJlbnRs
eSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4gc3Vic3BhY2VG
b3JJbXBsKHZtKTsKKyAgICB9CisgICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNl
Rm9ySW1wbChKU0M6OlZNJiB2bSk7CisgICAgc3RhdGljIHZvaWQgYW5hbHl6ZUhlYXAoSlNDZWxs
KiwgSlNDOjpIZWFwQW5hbHl6ZXImKTsKK3Byb3RlY3RlZDoKKyAgICBKU1Rlc3RTZXRMaWtlV2l0
aE92ZXJyaWRkZW5PcGVyYXRpb25zKEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3Qm
LCBSZWY8VGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnM+JiYpOworCisgICAgdm9p
ZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJik7Cit9OworCitjbGFzcyBKU1Rlc3RTZXRMaWtlV2l0
aE92ZXJyaWRkZW5PcGVyYXRpb25zT3duZXIgOiBwdWJsaWMgSlNDOjpXZWFrSGFuZGxlT3duZXIg
eworcHVibGljOgorICAgIHZpcnR1YWwgYm9vbCBpc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhK
U0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBKU0M6OlNsb3RWaXNpdG9y
JiwgY29uc3QgY2hhcioqKTsKKyAgICB2aXJ0dWFsIHZvaWQgZmluYWxpemUoSlNDOjpIYW5kbGU8
SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCk7Cit9OworCitpbmxpbmUgSlNDOjpXZWFrSGFu
ZGxlT3duZXIqIHdyYXBwZXJPd25lcihET01XcmFwcGVyV29ybGQmLCBUZXN0U2V0TGlrZVdpdGhP
dmVycmlkZGVuT3BlcmF0aW9ucyopCit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEpTVGVz
dFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnNPd25lcj4gb3duZXI7CisgICAgcmV0dXJu
ICZvd25lci5nZXQoKTsKK30KKworaW5saW5lIHZvaWQqIHdyYXBwZXJLZXkoVGVzdFNldExpa2VX
aXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMqIHdyYXBwYWJsZU9iamVjdCkKK3sKKyAgICByZXR1cm4g
d3JhcHBhYmxlT2JqZWN0OworfQorCitKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiwgSlNET01HbG9iYWxPYmplY3QqLCBUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0
aW9ucyYpOworaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6SlNHbG9iYWxPYmplY3QqIGxl
eGljYWxHbG9iYWxPYmplY3QsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFRlc3RT
ZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zKiBpbXBsKSB7IHJldHVybiBpbXBsID8gdG9K
UyhsZXhpY2FsR2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QsICppbXBsKSA6IEpTQzo6anNOdWxs
KCk7IH0KK0pTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6SlNHbG9iYWxPYmplY3Qq
LCBKU0RPTUdsb2JhbE9iamVjdCosIFJlZjxUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0
aW9ucz4mJik7CitpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpKU0ds
b2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNET01HbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgUmVmUHRyPFRlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zPiYmIGlt
cGwpIHsgcmV0dXJuIGltcGwgPyB0b0pTTmV3bHlDcmVhdGVkKGxleGljYWxHbG9iYWxPYmplY3Qs
IGdsb2JhbE9iamVjdCwgaW1wbC5yZWxlYXNlTm9uTnVsbCgpKSA6IEpTQzo6anNOdWxsKCk7IH0K
KwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPFRlc3RTZXRM
aWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zPiB7CisgICAgdXNpbmcgV3JhcHBlckNsYXNzID0g
SlNUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9uczsKKyAgICB1c2luZyBUb1dyYXBw
ZWRSZXR1cm5UeXBlID0gVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMqOworfTsK
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQo=
</data>
<flag name="commit-queue"
          id="424246"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
      

    </bug>

</bugzilla>