<?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>234590</bug_id>
          
          <creation_ts>2021-12-21 18:49:02 -0800</creation_ts>
          <short_desc>We should be able to OSR enter from BBQOSREntry code to OMGOSREntry code</short_desc>
          <delta_ts>2021-12-28 18:49:19 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>NEW</bug_status>
          <resolution></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="Saam Barati">saam</reporter>
          <assigned_to name="Saam Barati">saam</assigned_to>
          <cc>justin_michaud</cc>
    
    <cc>keith_miller</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1826194</commentid>
    <comment_count>0</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-12-21 18:49:02 -0800</bug_when>
    <thetext>We don&apos;t want to get stuck in BBQ forever in a long running loop.

I think architecturally it&apos;d just be best if we compiled a single BBQ Air Callee. That Callee can support OSR entering
at certain loop boundaries. Perhaps we can implement it via entry switch. If we do that, this problem solves itself.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1826461</commentid>
    <comment_count>1</comment_count>
      <attachid>447847</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-12-22 17:23:51 -0800</bug_when>
    <thetext>Created attachment 447847
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1826467</commentid>
    <comment_count>2</comment_count>
      <attachid>447849</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-12-22 17:54:46 -0800</bug_when>
    <thetext>Created attachment 447849
WIP

It&apos;s revealing a regalloc bug in O0</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1827145</commentid>
    <comment_count>3</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-12-28 18:49:19 -0800</bug_when>
    <thetext>&lt;rdar://problem/86968861&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>447847</attachid>
            <date>2021-12-22 17:23:51 -0800</date>
            <delta_ts>2021-12-22 17:54:46 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>99623</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyODczNjEpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDEyIEBACisyMDIxLTEyLTIyICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUu
Y29tPgorCisgICAgICAgIExMSW50IHNob3VsZCBsb29wIE9TUiBpbnRvIEJCUSBhbmQgQkJRIHNo
b3VsZCBsb29wIE9TUiBpbnRvIE9NRworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjM0NTQyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiB3YXNtL3dhc3QtdGVzdHMvaGFybmVzcy5qczoKKwogMjAyMS0xMi0x
OSAgUm9zcyBLaXJzbGluZyAgPHJvc3Mua2lyc2xpbmdAc29ueS5jb20+CiAKICAgICAgICAgW0pT
Q10gT3BQb3cgc2hvdWxkIGhhdmUgYSAic21hbGwgaW50IGV4cG9uZW50IiBmYXN0IHBhdGggYXQg
bG93ZXIgdGllcnMKSW5kZXg6IEpTVGVzdHMvd2FzbS93YXN0LXRlc3RzL2hhcm5lc3MuanMKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gSlNUZXN0cy93YXNtL3dhc3QtdGVzdHMvaGFybmVzcy5qcwkocmV2aXNpb24g
Mjg3MzM5KQorKysgSlNUZXN0cy93YXNtL3dhc3QtdGVzdHMvaGFybmVzcy5qcwkod29ya2luZyBj
b3B5KQpAQCAtNCw2ICs0LDcgQEAgbGV0IGNvbnRleHQgPSB7CiB9OwogCiBnbG9iYWxUaGlzLl9f
bGluZWFyX21lbW9yeSA9IG5ldyBXZWJBc3NlbWJseS5NZW1vcnkoeyBpbml0aWFsOiAxIH0pOwor
Z2xvYmFsVGhpcy5jYWxsZXJJc09NR0NvbXBpbGVkID0gY2FsbGVySXNCQlFPck9NR0NvbXBpbGVk
OyAvLyBDYW4ndCBjaGFuZ2UgdGhlIC53YXN0IGVhc2lseS4uLgogCiBhc3luYyBmdW5jdGlvbiBy
dW5XYXNtRmlsZShmaWxlUGF0aCkgewogICAgIGxldCBibG9iID0gcmVhZEZpbGUoZmlsZVBhdGgs
ICJiaW5hcnkiKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjg3MzM5
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAt
MSwzICsxLDUyIEBACisyMDIxLTEyLTIyICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29t
PgorCisgICAgICAgIExMSW50IHNob3VsZCBsb29wIE9TUiBpbnRvIEJCUSBhbmQgQkJRIHNob3Vs
ZCBsb29wIE9TUiBpbnRvIE9NRworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjM0NTQyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgSXQncyBhIHN0YXJ0dXAgcGVyZiBpbXByb3ZlbWVudCBvbiBzb21lIFdhc20g
YmVuY2htYXJrcyBJJ20gcnVubmluZyB0byBoYXZlCisgICAgICAgIFdhc20gTExJbnQgZG8gbG9v
cCBPU1IgZW50cnkgaW50byBCQlEgaW5zdGVhZCBvZiBPTUcuIFRoaXMgaW1wcm92ZXMgdGhpcwor
ICAgICAgICBiZW5jaG1hcmsgYnkgNSUuIFRoZXJlIGlzIHByb2JhYmx5IG1vcmUgcGVyZiB0byBi
ZSBoYWQgaGVyZS4gQ3VycmVudGx5LAorICAgICAgICB3ZSdyZSBqdXN0IE9TUiBlbnRlcmluZyBp
bnRvIEIzIEJCUSBPMS4gSG93ZXZlciwgaW4gdGhlIGZ1dHVyZSwgd2Ugc2hvdWxkCisgICAgICAg
IGp1c3QgY29tcGlsZSBhIHNpbmdsZSBBaXIgQkJRIENhbGxlZSB0aGF0IGFsbG93cyBmb3IgT1NS
IGVudHJ5IGF0IGxvb3AKKyAgICAgICAgYm91bmRhcmllcy4gTWF5YmUgd2UgY2FuIG1vZGVsIHRo
aXMgdXNpbmcgRW50cnlTd2l0Y2ggd2l0aG91dCBhbnkgcmVhbAorICAgICAgICBoYXJtIHRvIHRo
cm91Z2hwdXQuCisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qOgorICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIGFzc2VtYmxlci9NYWNy
b0Fzc2VtYmxlckNvZGVSZWYuY3BwOgorICAgICAgICAoSlNDOjpzaG91bGREdW1wRGlzYXNzZW1i
bHlGb3IpOgorICAgICAgICAqIGpzYy5jcHA6CisgICAgICAgIChKU0NfREVGSU5FX0hPU1RfRlVO
Q1RJT04pOgorICAgICAgICAqIHdhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwOgorICAgICAgICAo
SlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpCM0lSR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6
V2FzbTo6cGFyc2VBbmRDb21waWxlKToKKyAgICAgICAgKiB3YXNtL1dhc21DYWxsZWUuaDoKKyAg
ICAgICAgKEpTQzo6V2FzbTo6Q2FsbGVlOjpzZXRPU1JFbnRyeUNhbGxlZSk6IERlbGV0ZWQuCisg
ICAgICAgICogd2FzbS9XYXNtQ2FsbGVlR3JvdXAuaDoKKyAgICAgICAgKiB3YXNtL1dhc21Db21w
aWxhdGlvbk1vZGUuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjptYWtlU3RyaW5nKToKKyAgICAg
ICAgKiB3YXNtL1dhc21Db21waWxhdGlvbk1vZGUuaDoKKyAgICAgICAgKEpTQzo6V2FzbTo6aXNP
U1JFbnRyeSk6CisgICAgICAgIChKU0M6Oldhc206OmlzQW55QkJRKToKKyAgICAgICAgKEpTQzo6
V2FzbTo6aXNBbnlPTUcpOgorICAgICAgICAqIHdhc20vV2FzbU9NR0Zvck9TUkVudHJ5UGxhbi5j
cHA6IFJlbW92ZWQuCisgICAgICAgICogd2FzbS9XYXNtT01HRm9yT1NSRW50cnlQbGFuLmg6IFJl
bW92ZWQuCisgICAgICAgICogd2FzbS9XYXNtT1NSRW50cnlQbGFuLmNwcDogQ29waWVkIGZyb20g
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9NR0Zvck9TUkVudHJ5UGxhbi5jcHAuCisg
ICAgICAgIChKU0M6Oldhc206Ok9TUkVudHJ5UGxhbjo6T1NSRW50cnlQbGFuKToKKyAgICAgICAg
KEpTQzo6V2FzbTo6T1NSRW50cnlQbGFuOjp3b3JrKToKKyAgICAgICAgKEpTQzo6V2FzbTo6T01H
Rm9yT1NSRW50cnlQbGFuOjpPTUdGb3JPU1JFbnRyeVBsYW4pOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpXYXNtOjpPTUdGb3JPU1JFbnRyeVBsYW46OndvcmspOiBEZWxldGVkLgorICAgICAgICAq
IHdhc20vV2FzbU9TUkVudHJ5UGxhbi5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtT01HRm9yT1NSRW50cnlQbGFuLmguCisgICAgICAgICogd2FzbS9XYXNtT3Bl
cmF0aW9ucy5jcHA6CisgICAgICAgIChKU0M6Oldhc206OmRvT1NSRW50cnkpOgorICAgICAgICAo
SlNDOjpXYXNtOjpKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04pOgorICAgICAgICAqIHdhc20vV2Fz
bVBsYW4uY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpQbGFuOjp1cGRhdGVDYWxsU2l0ZXNUb0Nh
bGxVcyk6CisgICAgICAgICogd2FzbS9XYXNtU2xvd1BhdGhzLmNwcDoKKyAgICAgICAgKEpTQzo6
TExJbnQ6OldBU01fU0xPV19QQVRIX0RFQ0wpOgorCiAyMDIxLTEyLTIxICBaYW4gRG9iZXJzZWsg
IDx6ZG9iZXJzZWtAaWdhbGlhLmNvbT4KIAogICAgICAgICBbUklTQ1Y2NF0gQWRkIG9yIGVuYWJs
ZSBtaXNzaW5nIENQVShSSVNDVjY0KSBjb2RlcGF0aHMgaW4gYmFzZWxpbmUgSklUCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CShyZXZpc2lvbiAyODczMzkpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvU291cmNlcy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEwOTgsOCArMTA5OCw4
IEBAIHdhc20vV2FzbU1lbW9yeU1vZGUuY3BwCiB3YXNtL1dhc21Nb2R1bGUuY3BwCiB3YXNtL1dh
c21Nb2R1bGVJbmZvcm1hdGlvbi5jcHAKIHdhc20vV2FzbU5hbWVTZWN0aW9uUGFyc2VyLmNwcAot
d2FzbS9XYXNtT01HRm9yT1NSRW50cnlQbGFuLmNwcAogd2FzbS9XYXNtT01HUGxhbi5jcHAKK3dh
c20vV2FzbU9TUkVudHJ5UGxhbi5jcHAKIHdhc20vV2FzbU9wY29kZU9yaWdpbi5jcHAKIHdhc20v
V2FzbU9wZXJhdGlvbnMuY3BwCiB3YXNtL1dhc21QYWdlQ291bnQuY3BwCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvanNjLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvanNjLmNwcAkocmV2aXNpb24gMjg3MzM5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pz
Yy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwOSw3ICszMDksNyBAQCBzdGF0aWMgSlNDX0RFQ0xB
UkVfSE9TVF9GVU5DVElPTihmdW5jdGlvCiBzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElP
TihmdW5jdGlvbk5vT1NSRXhpdEZ1enppbmcpOwogc3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVO
Q1RJT04oZnVuY3Rpb25PcHRpbWl6ZU5leHRJbnZvY2F0aW9uKTsKIHN0YXRpYyBKU0NfREVDTEFS
RV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9uTnVtYmVyT2ZERkdDb21waWxlcyk7Ci1zdGF0aWMgSlND
X0RFQ0xBUkVfSE9TVF9GVU5DVElPTihmdW5jdGlvbkNhbGxlcklzT01HQ29tcGlsZWQpOworc3Rh
dGljIEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04oZnVuY3Rpb25DYWxsZXJJc0JCUU9yT01HQ29t
cGlsZWQpOwogc3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04oZnVuY3Rpb25KU0NPcHRp
b25zKTsKIHN0YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9uUmVvcHRpbWl6
YXRpb25SZXRyeUNvdW50KTsKIHN0YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKGZ1bmN0
aW9uVHJhbnNmZXJBcnJheUJ1ZmZlcik7CkBAIC01NTksNyArNTU5LDcgQEAgcHJpdmF0ZToKICAg
ICAgICAgYWRkRnVuY3Rpb24odm0sICJub0ZUTCIsIGZ1bmN0aW9uTm9GVEwsIDEpOwogICAgICAg
ICBhZGRGdW5jdGlvbih2bSwgIm5vT1NSRXhpdEZ1enppbmciLCBmdW5jdGlvbk5vT1NSRXhpdEZ1
enppbmcsIDEpOwogICAgICAgICBhZGRGdW5jdGlvbih2bSwgIm51bWJlck9mREZHQ29tcGlsZXMi
LCBmdW5jdGlvbk51bWJlck9mREZHQ29tcGlsZXMsIDEpOwotICAgICAgICBhZGRGdW5jdGlvbih2
bSwgImNhbGxlcklzT01HQ29tcGlsZWQiLCBmdW5jdGlvbkNhbGxlcklzT01HQ29tcGlsZWQsIDAp
OworICAgICAgICBhZGRGdW5jdGlvbih2bSwgImNhbGxlcklzQkJRT3JPTUdDb21waWxlZCIsIGZ1
bmN0aW9uQ2FsbGVySXNCQlFPck9NR0NvbXBpbGVkLCAwKTsKICAgICAgICAgYWRkRnVuY3Rpb24o
dm0sICJqc2NPcHRpb25zIiwgZnVuY3Rpb25KU0NPcHRpb25zLCAwKTsKICAgICAgICAgYWRkRnVu
Y3Rpb24odm0sICJvcHRpbWl6ZU5leHRJbnZvY2F0aW9uIiwgZnVuY3Rpb25PcHRpbWl6ZU5leHRJ
bnZvY2F0aW9uLCAxKTsKICAgICAgICAgYWRkRnVuY3Rpb24odm0sICJyZW9wdGltaXphdGlvblJl
dHJ5Q291bnQiLCBmdW5jdGlvblJlb3B0aW1pemF0aW9uUmV0cnlDb3VudCwgMSk7CkBAIC0xODg2
LDcgKzE4ODYsNyBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oZnVuY3Rpb25OdW1iZXJPCiAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShudW1iZXJPZkRGR0NvbXBpbGVzKGdsb2JhbE9iamVj
dCwgY2FsbEZyYW1lKSk7CiB9CiAKLUpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihmdW5jdGlvbkNh
bGxlcklzT01HQ29tcGlsZWQsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJh
bWUqIGNhbGxGcmFtZSkpCitKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oZnVuY3Rpb25DYWxsZXJJ
c0JCUU9yT01HQ29tcGlsZWQsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJh
bWUqIGNhbGxGcmFtZSkpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTE5MDYsNyArMTkwNiw3
IEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihmdW5jdGlvbkNhbGxlckkKICAgICBBU1NFUlQo
d2FzbUZyYW1lLmNhbGxlckZyYW1lKCktPmNhbGxlZSgpLmlzV2FzbSgpKTsKICNpZiBFTkFCTEUo
V0VCQVNTRU1CTFkpCiAgICAgYXV0byBtb2RlID0gd2FzbUZyYW1lLmNhbGxlckZyYW1lKCktPmNh
bGxlZSgpLmFzV2FzbUNhbGxlZSgpLT5jb21waWxhdGlvbk1vZGUoKTsKLSAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihtb2RlID09IFdhc206OkNvbXBpbGF0aW9uTW9kZTo6T01H
TW9kZSB8fCBtb2RlID09IFdhc206OkNvbXBpbGF0aW9uTW9kZTo6T01HRm9yT1NSRW50cnlNb2Rl
KSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oaXNBbnlCQlEobW9kZSkg
fHwgaXNBbnlPTUcobW9kZSkpKTsKICNlbmRpZgogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjg3
MzM5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTg5NSw2ICs4OTUsNyBAQAogCQk1MjY3
Q0Y4MjI0OTMxNkIxMDAyMkJGNkQgLyogRmFzdEpJVFBlcm1pc3Npb25zLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MjY3Q0Y4MTI0OTMxNkFEMDAyMkJG
NkQgLyogRmFzdEpJVFBlcm1pc3Npb25zLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTI2QUM0QjcxRTk3N0M1RDAwMzUwMEUxIC8qIFdhc21DYWxs
ZWVHcm91cC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTI2QUM0QjUxRTk3N0M1RDAwMzUwMEUxIC8qIFdhc21DYWxsZWVHcm91cC5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUyN0NFMzU0MjI1NTVGRTUw
MEM2RjM4MiAvKiBKU1RvV2FzbUlDQ2FsbGVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1MjdDRTM1MzIyNTU1RkREMDBDNkYzODIgLyogSlNUb1dhc21J
Q0NhbGxlZS5oICovOyB9OworCQk1MjdFNkNFQzI3NzJCOUNCMDA1RTA3ODIgLyogV2FzbU9TUkVu
dHJ5UGxhbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTI3RTZDRUIyNzcyQjlDNTAwNUUwNzgyIC8qIFdhc21PU1JFbnRyeVBsYW4uaCAqLzsgfTsKIAkJ
NTI4NDdBREMyMUZGQjg2OTAwNjFBOURCIC8qIFdhc21BaXJJUkdlbmVyYXRvci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTI4NDdBREEyMUZGQjg2MzAw
NjFBOURCIC8qIFdhc21BaXJJUkdlbmVyYXRvci5oICovOyB9OwogCQk1MkIzMTBGQjE5NzRBRTYx
MDA4MDg1N0MgLyogRnVuY3Rpb25IYXNFeGVjdXRlZENhY2hlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkIzMTBGQTE5NzRBRTYxMDA4MDg1N0MgLyog
RnVuY3Rpb25IYXNFeGVjdXRlZENhY2hlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTJCMzExMDExOTc1QjQ2NzAwODA4NTdDIC8qIFR5cGVMb2Nh
dGlvbkNhY2hlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1MkIzMTEwMDE5NzVCNDY3MDA4MDg1N0MgLyogVHlwZUxvY2F0aW9uQ2FjaGUuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTkxMyw3ICsxOTE0
LDYgQEAKIAkJRTM2NUYzM0EyNEFBNjIzOTAwQzk5MUIyIC8qIEludGxEaXNwbGF5TmFtZXNDb25z
dHJ1Y3Rvci5sdXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEUzNjVGMzM5MjRBQTYyMTIwMEM5OTFCMiAvKiBJbnRsRGlzcGxheU5hbWVzQ29uc3RydWN0
b3IubHV0LmggKi87IH07CiAJCUUzNjVGMzNCMjRBQTYyM0IwMEM5OTFCMiAvKiBJbnRsRGlzcGxh
eU5hbWVzUHJvdG90eXBlLmx1dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRTM2NUYzMzgyNEFBNjIxMTAwQzk5MUIyIC8qIEludGxEaXNwbGF5TmFtZXNQ
cm90b3R5cGUubHV0LmggKi87IH07CiAJCUUzNjY0NDFFMjU0NDA5QjMwMDAxODc2RiAvKiBJbnRs
TGlzdEZvcm1hdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBFMzE4Q0E2OTI1NDQwNkI1MDA0REMxMjkgLyogSW50bExpc3RGb3JtYXQuY3BwICovOyB9
OwotCQlFMzZCNzY3MDIyRjhENjE5MDBEMDk4MTggLyogV2FzbU9NR0Zvck9TUkVudHJ5UGxhbi5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTM2Qjc2NkYy
MkY4RDYxMTAwRDA5ODE4IC8qIFdhc21PTUdGb3JPU1JFbnRyeVBsYW4uaCAqLzsgfTsKIAkJRTM2
Q0M5NDcyMDg2MzE0RjAwNTFGRkQ2IC8qIFdhc21DcmVhdGlvbk1vZGUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzNkNDOTQ2MjA4NjMxNEYwMDUxRkZE
NiAvKiBXYXNtQ3JlYXRpb25Nb2RlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJRTM2RURDRTUyNEYwOTc1NzAwRTYwREEyIC8qIENvbmN1cnJlbmN5
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMzZFRENF
NDI0RjA5NzU3MDBFNjBEQTIgLyogQ29uY3VycmVuY3kuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlFMzcxMTk5MjI1M0ZBODdGMDBCQTY5QTAgLyog
R2F0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTM3
MTE5OTEyNTNGQTg3RTAwQkE2OUEwIC8qIEdhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMzcwMCw2ICszNzAwLDggQEAKIAkJNTI3NzczREQx
QUFGODNBQzAwQkRFN0U4IC8qIFJ1bnRpbWVUeXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFJ1bnRpbWVUeXBlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNTI3Q0UzNTIyMjU1NUZERDAwQzZGMzgyIC8qIEpTVG9XYXNtSUNDYWxsZWUuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBuYW1lID0gSlNUb1dhc21JQ0NhbGxlZS5jcHA7IHBhdGggPSBqcy9KU1RvV2Fz
bUlDQ2FsbGVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTI3Q0UzNTMyMjU1
NUZERDAwQzZGMzgyIC8qIEpTVG9XYXNtSUNDYWxsZWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSlNUb1dh
c21JQ0NhbGxlZS5oOyBwYXRoID0ganMvSlNUb1dhc21JQ0NhbGxlZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk1MjdFNkNFQTI3NzJCOUM1MDA1RTA3ODIgLyogV2FzbU9TUkVudHJ5
UGxhbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXYXNtT1NSRW50cnlQbGFuLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTI3RTZDRUIyNzcyQjlDNTAwNUUwNzgyIC8qIFdhc21P
U1JFbnRyeVBsYW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2FzbU9TUkVudHJ5UGxhbi5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk1Mjg0N0FEOTIxRkZCODYzMDA2MUE5REIgLyogV2FzbUFp
cklSR2VuZXJhdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdhc21BaXJJUkdlbmVyYXRvci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyODQ3QURBMjFGRkI4NjMwMDYxQTlE
QiAvKiBXYXNtQWlySVJHZW5lcmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2FzbUFpcklSR2VuZXJh
dG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyQjMxMEZBMTk3NEFFNjEwMDgw
ODU3QyAvKiBGdW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRnVuY3Rp
b25IYXNFeGVjdXRlZENhY2hlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01MjQw
LDggKzUyNDIsNiBAQAogCQlFMzY1RjMzODI0QUE2MjExMDBDOTkxQjIgLyogSW50bERpc3BsYXlO
YW1lc1Byb3RvdHlwZS5sdXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW50
bERpc3BsYXlOYW1lc1Byb3RvdHlwZS5sdXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJRTM2NUYzMzkyNEFBNjIxMjAwQzk5MUIyIC8qIEludGxEaXNwbGF5TmFtZXNDb25zdHJ1Y3Rv
ci5sdXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW50bERpc3BsYXlOYW1l
c0NvbnN0cnVjdG9yLmx1dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMzZCNDgw
MTIzRTk1NzM4MDBFNEE2NkUgLyogVW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3IuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gVW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3IuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQlFMzZCNzY2RTIyRjhENjExMDBEMDk4MTggLyogV2FzbU9NR0Zv
ck9TUkVudHJ5UGxhbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXYXNtT01HRm9yT1NSRW50cnlQ
bGFuLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRTM2Qjc2NkYyMkY4RDYxMTAw
RDA5ODE4IC8qIFdhc21PTUdGb3JPU1JFbnRyeVBsYW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2FzbU9N
R0Zvck9TUkVudHJ5UGxhbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMzZDQzk0
NjIwODYzMTRGMDA1MUZGRDYgLyogV2FzbUNyZWF0aW9uTW9kZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBXYXNtQ3JlYXRpb25Nb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUUzNkVEQ0U0MjRGMDk3NTcwMEU2MERBMiAvKiBDb25jdXJyZW5jeS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb25jdXJyZW5jeS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlFMzcxMTk5MTI1M0ZBODdFMDBCQTY5QTAgLyogR2F0ZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHYXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC02NjA5LDggKzY2MDksNiBAQAogCQkJCUUzQkYxQkFEMjM4QUFFRDEwMDNBMUMy
QiAvKiBJc29IZWFwQ2VsbFR5cGUuaCAqLywKIAkJCQlFM0M4RUQ0MjIzQTFEQkM1MDAxMzE5NTgg
LyogSXNvSW5saW5lZEhlYXBDZWxsVHlwZS5oICovLAogCQkJCUZFNjVCMTUwMjc0ODYwMUYwMERC
NUIxNiAvKiBJc29JbmxpbmVkSGVhcENlbGxUeXBlSW5saW5lcy5oICovLAotCQkJCTUzN0ZFRUNE
Mjc0MkJERTAwMEM5RUZFRSAvKiBJc29NZW1vcnlBbGxvY2F0b3JCYXNlLmggKi8sCi0JCQkJNTM3
RkVFQ0EyNzQyQkRFMDAwQzlFRkVFIC8qIElzb01lbW9yeUFsbG9jYXRvckJhc2VJbmxpbmVzLmgg
Ki8sCiAJCQkJMEZEQ0UxMkMxRkFGQjRERTAwNkYzOTAxIC8qIElzb1N1YnNwYWNlLmNwcCAqLywK
IAkJCQkwRkRDRTEyQjFGQUZCNERFMDA2RjM5MDEgLyogSXNvU3Vic3BhY2UuaCAqLywKIAkJCQkw
RkQyRkQ5MjIwQjUyQkRDMDBGMDk0NDEgLyogSXNvU3Vic3BhY2VJbmxpbmVzLmggKi8sCkBAIC03
MjU1LDEwICs3MjUzLDEwIEBACiAJCQkJQUQ3QjRCMkQxRkEzRTI4NjAwQzlERjc5IC8qIFdhc21O
YW1lU2VjdGlvbi5oICovLAogCQkJCUFERDhGQTQ0MUVCMzA3NzEwMERGNTQyRiAvKiBXYXNtTmFt
ZVNlY3Rpb25QYXJzZXIuY3BwICovLAogCQkJCUFERDhGQTQzMUVCMzA3NzEwMERGNTQyRiAvKiBX
YXNtTmFtZVNlY3Rpb25QYXJzZXIuaCAqLywKLQkJCQlFMzZCNzY2RTIyRjhENjExMDBEMDk4MTgg
LyogV2FzbU9NR0Zvck9TUkVudHJ5UGxhbi5jcHAgKi8sCi0JCQkJRTM2Qjc2NkYyMkY4RDYxMTAw
RDA5ODE4IC8qIFdhc21PTUdGb3JPU1JFbnRyeVBsYW4uaCAqLywKIAkJCQk1MzExQkQ0ODFFQTU4
MUU1MDA1MjUyODEgLyogV2FzbU9NR1BsYW4uY3BwICovLAogCQkJCTUzMTFCRDQ5MUVBNTgxRTUw
MDUyNTI4MSAvKiBXYXNtT01HUGxhbi5oICovLAorCQkJCTUyN0U2Q0VBMjc3MkI5QzUwMDVFMDc4
MiAvKiBXYXNtT1NSRW50cnlQbGFuLmNwcCAqLywKKwkJCQk1MjdFNkNFQjI3NzJCOUM1MDA1RTA3
ODIgLyogV2FzbU9TUkVudHJ5UGxhbi5oICovLAogCQkJCTUzQzZGRUYwMUU4QUZFMEMwMEIxODQy
NSAvKiBXYXNtT3Bjb2RlT3JpZ2luLmNwcCAqLywKIAkJCQk1M0M2RkVFRTFFOEFERkE5MDBCMTg0
MjUgLyogV2FzbU9wY29kZU9yaWdpbi5oICovLAogCQkJCUUzOUQ4QjJDMjMwMjFFMUUwMDI2NTg1
MiAvKiBXYXNtT3BlcmF0aW9ucy5jcHAgKi8sCkBAIC05NzE3LDYgKzk3MTUsNyBAQAogCQkJCUE3
RTVBM0E4MTc5NzQzMkQwMEU4OTNDMCAvKiBDb21waWxhdGlvblJlc3VsdC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEY0RjExRTgyMDlCQ0RBQjAwNzA5NjU0IC8qIENvbXBpbGVyVGltaW5nU2NvcGUu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGRENFMTJBMUZBRkE4NUYwMDZGMzkwMSAvKiBDb21wbGV0
ZVN1YnNwYWNlLmggaW4gSGVhZGVycyAqLywKKwkJCQk1MjdFNkNFQzI3NzJCOUNCMDA1RTA3ODIg
LyogV2FzbU9TUkVudHJ5UGxhbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEMkZEOTQyMEI1MkJE
RTAwRjA5NDQxIC8qIENvbXBsZXRlU3Vic3BhY2VJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlCQzE4QzNGNDBFMTZGNUNEMDBCMzQ0NjAgLyogQ29tcGxldGlvbi5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEY2RkM3NTExOTYxMTBBODAwRTFEMDJEIC8qIENvbXBsZXhHZXRTdGF0dXMuaCBpbiBI
ZWFkZXJzICovLApAQCAtMTA5NzUsNyArMTA5NzQsNiBAQAogCQkJCUFENUI0MTZGMUVCQUZCNzcw
MDhFRkE0MyAvKiBXYXNtTmFtZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQUQ3QjRCMkUxRkEzRTI5
ODAwQzlERjc5IC8qIFdhc21OYW1lU2VjdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQUREOEZB
NDYxRUIzMDc5NzAwREY1NDJGIC8qIFdhc21OYW1lU2VjdGlvblBhcnNlci5oIGluIEhlYWRlcnMg
Ki8sCi0JCQkJRTM2Qjc2NzAyMkY4RDYxOTAwRDA5ODE4IC8qIFdhc21PTUdGb3JPU1JFbnRyeVBs
YW4uaCBpbiBIZWFkZXJzICovLAogCQkJCTUzMTFCRDRCMUVBNTgxRTUwMDUyNTI4MSAvKiBXYXNt
T01HUGxhbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTNDNkZFRUYxRThBREZBOTAwQjE4NDI1IC8q
IFdhc21PcGNvZGVPcmlnaW4uaCBpbiBIZWFkZXJzICovLAogCQkJCUUzOUQ4QjJFMjMwMjFFMjYw
MDI2NTg1MiAvKiBXYXNtT3BlcmF0aW9ucy5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQ29kZVJlZi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNv
ZGVSZWYuY3BwCShyZXZpc2lvbiAyODczMzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNz
ZW1ibGVyL01hY3JvQXNzZW1ibGVyQ29kZVJlZi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc3LDE1
ICs3NywxMCBAQCBib29sIHNob3VsZER1bXBEaXNhc3NlbWJseUZvcihXYXNtOjpDb21wCiB7CiAg
ICAgaWYgKE9wdGlvbnM6OmFzeW5jRGlzYXNzZW1ibHkoKSB8fCBPcHRpb25zOjpkdW1wRGlzYXNz
ZW1ibHkoKSB8fCBPcHRpb25zOjpkdW1wV2FzbURpc2Fzc2VtYmx5KCkpCiAgICAgICAgIHJldHVy
biB0cnVlOwotICAgIHN3aXRjaCAobW9kZSkgewotICAgIGNhc2UgV2FzbTo6Q29tcGlsYXRpb25N
b2RlOjpCQlFNb2RlOgorICAgIGlmIChXYXNtOjppc0FueUJCUShtb2RlKSkKICAgICAgICAgcmV0
dXJuIE9wdGlvbnM6OmR1bXBCQlFEaXNhc3NlbWJseSgpOwotICAgIGNhc2UgV2FzbTo6Q29tcGls
YXRpb25Nb2RlOjpPTUdNb2RlOgotICAgIGNhc2UgV2FzbTo6Q29tcGlsYXRpb25Nb2RlOjpPTUdG
b3JPU1JFbnRyeU1vZGU6CisgICAgaWYgKFdhc206OmlzQW55T01HKG1vZGUpKQogICAgICAgICBy
ZXR1cm4gT3B0aW9uczo6ZHVtcE9NR0Rpc2Fzc2VtYmx5KCk7Ci0gICAgZGVmYXVsdDoKLSAgICAg
ICAgYnJlYWs7Ci0gICAgfQogICAgIHJldHVybiBmYWxzZTsKIH0KIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUFpcklSR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQWlySVJHZW5lcmF0b3IuY3BwCShyZXZpc2lv
biAyODczMzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQWlySVJHZW5lcmF0
b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTgsNyArMjU4LDggQEAgcHVibGljOgogICAgICAg
ICAgICAgcmV0dXJuIGZhaWwoX19WQV9BUkdTX18pOyAgICAgICAgICAgICBcCiAgICAgfSB3aGls
ZSAoMCkKIAotICAgIEFpcklSR2VuZXJhdG9yKGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiwgQjM6
OlByb2NlZHVyZSYsIEludGVybmFsRnVuY3Rpb24qLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNt
Q2FsbD4mLCBNZW1vcnlNb2RlLCB1bnNpZ25lZCBmdW5jdGlvbkluZGV4LCBUaWVyVXBDb3VudCos
IGNvbnN0IFNpZ25hdHVyZSYpOworICAgIEFpcklSR2VuZXJhdG9yKGNvbnN0IE1vZHVsZUluZm9y
bWF0aW9uJiwgQjM6OlByb2NlZHVyZSYsIEludGVybmFsRnVuY3Rpb24qLCBWZWN0b3I8VW5saW5r
ZWRXYXNtVG9XYXNtQ2FsbD4mLCBNZW1vcnlNb2RlLCB1bnNpZ25lZCBmdW5jdGlvbkluZGV4LCBU
aWVyVXBDb3VudCosIGNvbnN0IFNpZ25hdHVyZSYsIHVuc2lnbmVkJiBvc3JFbnRyeVNjcmF0Y2hC
dWZmZXJTaXplKTsKKyAgICB2b2lkIGZpbmFsaXplRW50cnlwb2ludHMoKTsKIAogICAgIFBhcnRp
YWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEFyZ3VtZW50cyhjb25zdCBTaWduYXR1cmUm
KTsKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRMb2NhbChUeXBlLCB1
aW50MzJfdCk7CkBAIC03NDgsNiArNzQ5LDcgQEAgcHJpdmF0ZToKICAgICBWZWN0b3I8dWludDMy
X3Q+IG1fb3V0ZXJMb29wczsKICAgICBCYXNpY0Jsb2NrKiBtX2N1cnJlbnRCbG9jayB7IG51bGxw
dHIgfTsKICAgICBCYXNpY0Jsb2NrKiBtX3Jvb3RCbG9jayB7IG51bGxwdHIgfTsKKyAgICBCYXNp
Y0Jsb2NrKiBtX21haW5FbnRyeXBvaW50U3RhcnQgeyBudWxscHRyIH07CiAgICAgVmVjdG9yPFR5
cGVkVG1wPiBtX2xvY2FsczsKICAgICBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mIG1f
dW5saW5rZWRXYXNtVG9XYXNtQ2FsbHM7IC8vIExpc3QgZWFjaCBjYWxsIHNpdGUgYW5kIHRoZSBm
dW5jdGlvbiBpbmRleCB3aG9zZSBhZGRyZXNzIGl0IHNob3VsZCBiZSBwYXRjaGVkIHdpdGguCiAg
ICAgR1BSUmVnIG1fbWVtb3J5QmFzZUdQUiB7IEludmFsaWRHUFJSZWcgfTsKQEAgLTc3NCw2ICs3
NzYsMTAgQEAgcHJpdmF0ZToKICAgICB1bnNpZ25lZCBtX251bUltcG9ydEZ1bmN0aW9uczsKIAog
ICAgIEIzOjpQYXRjaHBvaW50U3BlY2lhbCogbV9wYXRjaHBvaW50U3BlY2lhbCB7IG51bGxwdHIg
fTsKKworICAgIFZlY3RvcjxzdGQ6OnBhaXI8QmFzaWNCbG9jayosIFZlY3RvcjxUeXBlZFRtcD4+
PiBtX2xvb3BFbnRyeVZhcmlhYmxlRGF0YTsKKyAgICBSZWZQdHI8QjM6OkFpcjo6UHJvbG9ndWVH
ZW5lcmF0b3I+IG1fcHJvbG9ndWVHZW5lcmF0b3I7CisgICAgdW5zaWduZWQmIG1fb3NyRW50cnlT
Y3JhdGNoQnVmZmVyU2l6ZTsKIH07CiAKIC8vIE1lbW9yeSBhY2Nlc3NlcyBpbiBXZWJBc3NlbWJs
eSBoYXZlIHVuc2lnbmVkIDMyLWJpdCBvZmZzZXRzLCB3aGVyZWFzIHRoZXkgaGF2ZSBzaWduZWQg
MzItYml0IG9mZnNldHMgaW4gQjMuCkBAIC04MTksNyArODI1LDcgQEAgdm9pZCBBaXJJUkdlbmVy
YXRvcjo6cmVzdG9yZVdhc21Db250ZXh0SQogICAgIGVtaXRQYXRjaHBvaW50KGJsb2NrLCBwYXRj
aHBvaW50LCBUbXAoKSwgaW5zdGFuY2UpOwogfQogCi1BaXJJUkdlbmVyYXRvcjo6QWlySVJHZW5l
cmF0b3IoY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIEIzOjpQcm9jZWR1cmUmIHByb2Nl
ZHVyZSwgSW50ZXJuYWxGdW5jdGlvbiogY29tcGlsYXRpb24sIFZlY3RvcjxVbmxpbmtlZFdhc21U
b1dhc21DYWxsPiYgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIE1lbW9yeU1vZGUgbW9kZSwgdW5z
aWduZWQgZnVuY3Rpb25JbmRleCwgVGllclVwQ291bnQqIHRpZXJVcCwgY29uc3QgU2lnbmF0dXJl
JiBzaWduYXR1cmUpCitBaXJJUkdlbmVyYXRvcjo6QWlySVJHZW5lcmF0b3IoY29uc3QgTW9kdWxl
SW5mb3JtYXRpb24mIGluZm8sIEIzOjpQcm9jZWR1cmUmIHByb2NlZHVyZSwgSW50ZXJuYWxGdW5j
dGlvbiogY29tcGlsYXRpb24sIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYgdW5saW5r
ZWRXYXNtVG9XYXNtQ2FsbHMsIE1lbW9yeU1vZGUgbW9kZSwgdW5zaWduZWQgZnVuY3Rpb25JbmRl
eCwgVGllclVwQ291bnQqIHRpZXJVcCwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsIHVuc2ln
bmVkJiBvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplKQogICAgIDogbV9pbmZvKGluZm8pCiAgICAg
LCBtX21vZGUobW9kZSkKICAgICAsIG1fZnVuY3Rpb25JbmRleChmdW5jdGlvbkluZGV4KQpAQCAt
ODI4LDYgKzgzNCw3IEBAIEFpcklSR2VuZXJhdG9yOjpBaXJJUkdlbmVyYXRvcihjb25zdCBNb2QK
ICAgICAsIG1fY29kZShtX3Byb2MuY29kZSgpKQogICAgICwgbV91bmxpbmtlZFdhc21Ub1dhc21D
YWxscyh1bmxpbmtlZFdhc21Ub1dhc21DYWxscykKICAgICAsIG1fbnVtSW1wb3J0RnVuY3Rpb25z
KGluZm8uaW1wb3J0RnVuY3Rpb25Db3VudCgpKQorICAgICwgbV9vc3JFbnRyeVNjcmF0Y2hCdWZm
ZXJTaXplKG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUpCiB7CiAgICAgbV9jdXJyZW50QmxvY2sg
PSBtX2NvZGUuYWRkQmxvY2soKTsKICAgICBtX3Jvb3RCbG9jayA9IG1fY3VycmVudEJsb2NrOwpA
QCAtODQ3LDExICs4NTQsOSBAQCBBaXJJUkdlbmVyYXRvcjo6QWlySVJHZW5lcmF0b3IoY29uc3Qg
TW9kCiAgICAgICAgIG1fY29kZS5waW5SZWdpc3RlcihtX2JvdW5kc0NoZWNraW5nU2l6ZUdQUik7
CiAgICAgfQogCi0gICAgbV9jb2RlLnNldE51bUVudHJ5cG9pbnRzKDEpOwotCiAgICAgR1BSUmVn
IGNvbnRleHRJbnN0YW5jZSA9IENvbnRleHQ6OnVzZUZhc3RUTFMoKSA/IHdhc21DYWxsaW5nQ29u
dmVudGlvbigpLnByb2xvZ3VlU2NyYXRjaEdQUnNbMV0gOiBtX3dhc21Db250ZXh0SW5zdGFuY2VH
UFI7CiAKLSAgICBSZWY8QjM6OkFpcjo6UHJvbG9ndWVHZW5lcmF0b3I+IHByb2xvZ3VlR2VuZXJh
dG9yID0gY3JlYXRlU2hhcmVkVGFzazxCMzo6QWlyOjpQcm9sb2d1ZUdlbmVyYXRvckZ1bmN0aW9u
PihbPV0gKENDYWxsSGVscGVycyYgaml0LCBCMzo6QWlyOjpDb2RlJiBjb2RlKSB7CisgICAgbV9w
cm9sb2d1ZUdlbmVyYXRvciA9IGNyZWF0ZVNoYXJlZFRhc2s8QjM6OkFpcjo6UHJvbG9ndWVHZW5l
cmF0b3JGdW5jdGlvbj4oWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgQjM6OkFpcjo6Q29kZSYgY29k
ZSkgewogICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNo
KGppdCk7CiAgICAgICAgIGNvZGUuZW1pdERlZmF1bHRQcm9sb2d1ZShqaXQpOwogCkBAIC04NTks
NyArODY0LDcgQEAgQWlySVJHZW5lcmF0b3I6OkFpcklSR2VuZXJhdG9yKGNvbnN0IE1vZAogICAg
ICAgICAgICAgR1BSUmVnIGNhbGxlZUdQUiA9IHdhc21DYWxsaW5nQ29udmVudGlvbigpLnByb2xv
Z3VlU2NyYXRjaEdQUnNbMF07CiAgICAgICAgICAgICBhdXRvIG1vdmVMb2NhdGlvbiA9IGppdC5t
b3ZlV2l0aFBhdGNoKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG51bGxwdHIpLCBjYWxs
ZWVHUFIpOwogICAgICAgICAgICAgaml0LmFkZExpbmtUYXNrKFtjb21waWxhdGlvbiwgbW92ZUxv
Y2F0aW9uXSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICAgICAgICAgIGNvbXBp
bGF0aW9uLT5jYWxsZWVNb3ZlTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8V2FzbUVu
dHJ5UHRyVGFnPihtb3ZlTG9jYXRpb24pOworICAgICAgICAgICAgICAgIGNvbXBpbGF0aW9uLT5j
YWxsZWVNb3ZlTG9jYXRpb25zLmFwcGVuZChsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8V2FzbUVudHJ5
UHRyVGFnPihtb3ZlTG9jYXRpb24pKTsKICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgaml0
LmVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcihjYWxsZWVHUFIsIENhbGxGcmFtZVNsb3Q6OmNhbGxl
ZSk7CiAgICAgICAgICAgICBqaXQuZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKG51bGxwdHIsIENh
bGxGcmFtZVNsb3Q6OmNvZGVCbG9jayk7CkBAIC05MDgsOCArOTEzLDYgQEAgQWlySVJHZW5lcmF0
b3I6OkFpcklSR2VuZXJhdG9yKGNvbnN0IE1vZAogICAgICAgICB9CiAgICAgfSk7CiAKLSAgICBt
X2NvZGUuc2V0UHJvbG9ndWVGb3JFbnRyeXBvaW50KDAsIFdURk1vdmUocHJvbG9ndWVHZW5lcmF0
b3IpKTsKLQogICAgIGlmIChDb250ZXh0Ojp1c2VGYXN0VExTKCkpIHsKICAgICAgICAgbV9pbnN0
YW5jZVZhbHVlID0gZzY0KCk7CiAgICAgICAgIC8vIEZJWE1FOiBXb3VsZCBiZSBuaWNlIHRvIG9u
bHkgZG8gdGhpcyBpZiB3ZSB1c2UgaW5zdGFuY2UgdmFsdWUuCkBAIC05MjQsNiArOTI3LDEwIEBA
IEFpcklSR2VuZXJhdG9yOjpBaXJJUkdlbmVyYXRvcihjb25zdCBNb2QKICAgICAgICAgbV9sb2Nh
bHNbaV0gPSB0bXBGb3JUeXBlKHR5cGUpOwogICAgIH0KIAorICAgIGFwcGVuZChFbnRyeVN3aXRj
aCk7CisgICAgbV9tYWluRW50cnlwb2ludFN0YXJ0ID0gbV9jb2RlLmFkZEJsb2NrKCk7CisgICAg
bV9jdXJyZW50QmxvY2sgPSBtX21haW5FbnRyeXBvaW50U3RhcnQ7CisKICAgICBDYWxsSW5mb3Jt
YXRpb24gd2FzbUNhbGxJbmZvID0gd2FzbUNhbGxpbmdDb252ZW50aW9uKCkuY2FsbEluZm9ybWF0
aW9uRm9yKHNpZ25hdHVyZSwgQ2FsbFJvbGU6OkNhbGxlZSk7CiAKICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgd2FzbUNhbGxJbmZvLnBhcmFtcy5zaXplKCk7ICsraSkgewpAQCAtOTU0LDYg
Kzk2MSw4OCBAQCBBaXJJUkdlbmVyYXRvcjo6QWlySVJHZW5lcmF0b3IoY29uc3QgTW9kCiAgICAg
ZW1pdEVudHJ5VGllclVwQ2hlY2soKTsKIH0KIAordm9pZCBBaXJJUkdlbmVyYXRvcjo6ZmluYWxp
emVFbnRyeXBvaW50cygpCit7CisgICAgdW5zaWduZWQgbnVtRW50cnlwb2ludHMgPSAxICsgbV9s
b29wRW50cnlWYXJpYWJsZURhdGEuc2l6ZSgpOworICAgIG1fcHJvYy5zZXROdW1FbnRyeXBvaW50
cyhudW1FbnRyeXBvaW50cyk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bUVudHJ5
cG9pbnRzOyArK2kpCisgICAgICAgIG1fY29kZS5zZXRQcm9sb2d1ZUZvckVudHJ5cG9pbnQoaSwg
UmVmPEIzOjpBaXI6OlByb2xvZ3VlR2VuZXJhdG9yPigqbV9wcm9sb2d1ZUdlbmVyYXRvcikpOwor
CisgICAgVG1wIGltbVRtcDsKKyAgICBUbXAgbmV3UHRyOworCisgICAgQmFzaWNCbG9jazo6U3Vj
Y2Vzc29yTGlzdCBzdWNjZXNzb3JzOworICAgIHN1Y2Nlc3NvcnMuYXBwZW5kKG1fbWFpbkVudHJ5
cG9pbnRTdGFydCk7CisKKyAgICBtX29zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUgPSAwOworCisg
ICAgZm9yIChhdXRvJiBwYWlyIDogbV9sb29wRW50cnlWYXJpYWJsZURhdGEpIHsKKyAgICAgICAg
QmFzaWNCbG9jayogbG9vcEJvZHkgPSBwYWlyLmZpcnN0OworICAgICAgICBUbXAgYmFzZVB0ciA9
IFRtcChHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgICAgICBCYXNpY0Jsb2NrKiBlbnRyeSA9
IG1fY29kZS5hZGRCbG9jaygpOworICAgICAgICBtX2N1cnJlbnRCbG9jayA9IGVudHJ5OworICAg
ICAgICBhdXRvJiB0ZW1wcyA9IHBhaXIuc2Vjb25kOworCisgICAgICAgIHN1Y2Nlc3NvcnMuYXBw
ZW5kKGVudHJ5KTsKKworICAgICAgICBtX29zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUgPSBzdGQ6
Om1heChtX29zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUsIHN0YXRpY19jYXN0PHVuc2lnbmVkPih0
ZW1wcy5zaXplKCkpKTsKKworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdGVtcHMu
c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIEIzOjpBaXI6Ok9wY29kZSBsb2FkT3A7CisgICAg
ICAgICAgICB1bnNpZ25lZCBieXRlczsKKyAgICAgICAgICAgIHN3aXRjaCAodGVtcHNbaV0udHlw
ZSgpLmtpbmQpIHsKKyAgICAgICAgICAgIGNhc2UgVHlwZUtpbmQ6OkkzMjoKKyAgICAgICAgICAg
ICAgICBsb2FkT3AgPSBNb3ZlMzI7CisgICAgICAgICAgICAgICAgYnl0ZXMgPSA0OworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBUeXBlS2luZDo6STY0OgorICAgICAg
ICAgICAgY2FzZSBUeXBlS2luZDo6RnVuY3JlZjoKKyAgICAgICAgICAgIGNhc2UgVHlwZUtpbmQ6
OlJlZjoKKyAgICAgICAgICAgIGNhc2UgVHlwZUtpbmQ6OlJlZk51bGw6CisgICAgICAgICAgICBj
YXNlIFR5cGVLaW5kOjpFeHRlcm5yZWY6CisgICAgICAgICAgICAgICAgbG9hZE9wID0gTW92ZTsK
KyAgICAgICAgICAgICAgICBieXRlcyA9IDg7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICBjYXNlIFR5cGVLaW5kOjpGMzI6CisgICAgICAgICAgICAgICAgbG9hZE9wID0gTW92
ZUZsb2F0OworICAgICAgICAgICAgICAgIGJ5dGVzID0gNDsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIGNhc2UgVHlwZUtpbmQ6OkY2NDoKKyAgICAgICAgICAgICAgICBsb2Fk
T3AgPSBNb3ZlRG91YmxlOworICAgICAgICAgICAgICAgIGJ5dGVzID0gODsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgVHlwZUtpbmQ6OlZvaWQ6CisgICAgICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgdWludDY0X3Qgb2Zmc2V0ID0gc3RhdGljX2Nhc3Q8dWludDY0
X3Q+KGkpICogc2l6ZW9mKHVpbnQ2NF90KTsKKworICAgICAgICAgICAgQXJnIGFkZHJBcmc7Cisg
ICAgICAgICAgICBpZiAoQXJnOjppc1ZhbGlkQWRkckZvcm0ob2Zmc2V0LCBCMzo6d2lkdGhGb3JC
eXRlcyhieXRlcykpKQorICAgICAgICAgICAgICAgIGFkZHJBcmcgPSBBcmc6OmFkZHIoYmFzZVB0
ciwgb2Zmc2V0KTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGlmICghaW1t
VG1wKSB7CisgICAgICAgICAgICAgICAgICAgIGltbVRtcCA9IGc2NCgpOworICAgICAgICAgICAg
ICAgICAgICBuZXdQdHIgPSBnNjQoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgYXBwZW5kKE1vdmUsIEFyZzo6YmlnSW1tKG9mZnNldCksIGltbVRtcCk7CisgICAgICAgICAg
ICAgICAgYXBwZW5kKEFkZDY0LCBpbW1UbXAsIGJhc2VQdHIsIG5ld1B0cik7CisgICAgICAgICAg
ICAgICAgYWRkckFyZyA9IEFyZzo6YWRkcihuZXdQdHIpOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBhcHBlbmQobG9hZE9wLCBhZGRyQXJnLCB0ZW1wc1tpXS50bXAoKSk7CisgICAgICAg
IH0KKworICAgICAgICBhcHBlbmQoSnVtcCk7CisgICAgICAgIGVudHJ5LT5zZXRTdWNjZXNzb3Jz
KGxvb3BCb2R5KTsKKyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVChudW1FbnRyeXBvaW50cyA9
PSBzdWNjZXNzb3JzLnNpemUoKSk7CisgICAgbV9yb290QmxvY2stPnN1Y2Nlc3NvcnMoKSA9IHN1
Y2Nlc3NvcnM7Cit9CisKIEIzOjpUeXBlIEFpcklSR2VuZXJhdG9yOjp0b0IzUmVzdWx0VHlwZShC
bG9ja1NpZ25hdHVyZSByZXR1cm5UeXBlKQogewogICAgIGlmIChyZXR1cm5UeXBlLT5yZXR1cm5z
Vm9pZCgpKQpAQCAtMjk1NCwxMCArMzA0MywzMCBAQCBBaXJJUkdlbmVyYXRvcjo6Q29udHJvbERh
dGEgQWlySVJHZW5lcmF0CiAKIGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZExvb3AoQmxvY2tTaWdu
YXR1cmUgc2lnbmF0dXJlLCBTdGFjayYgZW5jbG9zaW5nU3RhY2ssIENvbnRyb2xUeXBlJiBibG9j
aywgU3RhY2smIG5ld1N0YWNrLCB1aW50MzJfdCBsb29wSW5kZXgpIC0+IFBhcnRpYWxSZXN1bHQK
IHsKKyAgICBSRUxFQVNFX0FTU0VSVChsb29wSW5kZXggPT0gbV9sb29wRW50cnlWYXJpYWJsZURh
dGEuc2l6ZSgpKTsKKwogICAgIEJhc2ljQmxvY2sqIGJvZHkgPSBtX2NvZGUuYWRkQmxvY2soKTsK
ICAgICBCYXNpY0Jsb2NrKiBjb250aW51YXRpb24gPSBtX2NvZGUuYWRkQmxvY2soKTsKIAogICAg
IHNwbGl0U3RhY2soc2lnbmF0dXJlLCBlbmNsb3NpbmdTdGFjaywgbmV3U3RhY2spOworCisgICAg
eworICAgICAgICBWZWN0b3I8VHlwZWRUbXA+IHZhcmlhYmxlczsKKyAgICAgICAgZm9yIChhdXRv
IGxvY2FsIDogbV9sb2NhbHMpCisgICAgICAgICAgICB2YXJpYWJsZXMuYXBwZW5kKGxvY2FsKTsK
KworICAgICAgICBmb3IgKHVuc2lnbmVkIGNvbnRyb2xJbmRleCA9IDA7IGNvbnRyb2xJbmRleCA8
IG1fcGFyc2VyLT5jb250cm9sU3RhY2soKS5zaXplKCk7ICsrY29udHJvbEluZGV4KSB7CisgICAg
ICAgICAgICBmb3IgKGF1dG8gdmFyaWFibGUgOiBtX3BhcnNlci0+Y29udHJvbFN0YWNrKClbY29u
dHJvbEluZGV4XS5lbmNsb3NlZEV4cHJlc3Npb25TdGFjaykKKyAgICAgICAgICAgICAgICB2YXJp
YWJsZXMuYXBwZW5kKHZhcmlhYmxlKTsKKyAgICAgICAgfQorICAgICAgICBmb3IgKGF1dG8gdmFy
aWFibGUgOiBlbmNsb3NpbmdTdGFjaykKKyAgICAgICAgICAgIHZhcmlhYmxlcy5hcHBlbmQodmFy
aWFibGUpOworICAgICAgICBmb3IgKGF1dG8gdmFyaWFibGUgOiBuZXdTdGFjaykKKyAgICAgICAg
ICAgIHZhcmlhYmxlcy5hcHBlbmQodmFyaWFibGUpOworCisgICAgICAgIG1fbG9vcEVudHJ5VmFy
aWFibGVEYXRhLmFwcGVuZChzdGQ6OnBhaXI8QmFzaWNCbG9jayosIFZlY3RvcjxUeXBlZFRtcD4+
KGJvZHksIFdURk1vdmUodmFyaWFibGVzKSkpOworICAgIH0KKwogICAgIFJlc3VsdExpc3QgcmVz
dWx0czsKICAgICByZXN1bHRzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobmV3U3RhY2suc2l6ZSgp
KTsKICAgICBmb3IgKGF1dG8gaXRlbSA6IG5ld1N0YWNrKQpAQCAtMzU5NCw4ICszNzAzLDkgQEAg
RXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3RpbwogCiAgICAgY29tcGlsYXRp
b25Db250ZXh0LmVtYmVkZGVyRW50cnlwb2ludEpJVCA9IG1ha2VVbmlxdWU8Q0NhbGxIZWxwZXJz
PigpOwogICAgIGNvbXBpbGF0aW9uQ29udGV4dC53YXNtRW50cnlwb2ludEpJVCA9IG1ha2VVbmlx
dWU8Q0NhbGxIZWxwZXJzPigpOworICAgIGNvbXBpbGF0aW9uQ29udGV4dC5wcm9jZWR1cmUgPSBt
YWtlVW5pcXVlPEIzOjpQcm9jZWR1cmU+KCk7CiAKLSAgICBCMzo6UHJvY2VkdXJlIHByb2NlZHVy
ZTsKKyAgICBhdXRvJiBwcm9jZWR1cmUgPSAqY29tcGlsYXRpb25Db250ZXh0LnByb2NlZHVyZTsK
ICAgICBDb2RlJiBjb2RlID0gcHJvY2VkdXJlLmNvZGUoKTsKIAogICAgIHByb2NlZHVyZS5zZXRP
cmlnaW5QcmludGVyKFtdIChQcmludFN0cmVhbSYgb3V0LCBCMzo6T3JpZ2luIG9yaWdpbikgewpA
QCAtMzYxMSwxMCArMzcyMSwxMCBAQCBFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxG
dW5jdGlvCiAgICAgCiAgICAgcHJvY2VkdXJlLnNldE9wdExldmVsKE9wdGlvbnM6OndlYkFzc2Vt
Ymx5QkJRQWlyT3B0aW1pemF0aW9uTGV2ZWwoKSk7CiAKLSAgICBBaXJJUkdlbmVyYXRvciBpckdl
bmVyYXRvcihpbmZvLCBwcm9jZWR1cmUsIHJlc3VsdC5nZXQoKSwgdW5saW5rZWRXYXNtVG9XYXNt
Q2FsbHMsIG1vZGUsIGZ1bmN0aW9uSW5kZXgsIHRpZXJVcCwgc2lnbmF0dXJlKTsKKyAgICBBaXJJ
UkdlbmVyYXRvciBpckdlbmVyYXRvcihpbmZvLCBwcm9jZWR1cmUsIHJlc3VsdC5nZXQoKSwgdW5s
aW5rZWRXYXNtVG9XYXNtQ2FsbHMsIG1vZGUsIGZ1bmN0aW9uSW5kZXgsIHRpZXJVcCwgc2lnbmF0
dXJlLCByZXN1bHQtPm9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUpOwogICAgIEZ1bmN0aW9uUGFy
c2VyPEFpcklSR2VuZXJhdG9yPiBwYXJzZXIoaXJHZW5lcmF0b3IsIGZ1bmN0aW9uLmRhdGEuZGF0
YSgpLCBmdW5jdGlvbi5kYXRhLnNpemUoKSwgc2lnbmF0dXJlLCBpbmZvKTsKICAgICBXQVNNX0ZB
SUxfSUZfSEVMUEVSX0ZBSUxTKHBhcnNlci5wYXJzZSgpKTsKLQorICAgIGlyR2VuZXJhdG9yLmZp
bmFsaXplRW50cnlwb2ludHMoKTsKIAogICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBjb2Rl
KSB7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYmxvY2stPm51bVN1Y2Nlc3NvcnMo
KTsgKytpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0
b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lS
R2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMjg3MzM5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MzUsNyArNTM1
LDcgQEAgcHJpdmF0ZToKICAgICBGdW5jdGlvblBhcnNlcjxCM0lSR2VuZXJhdG9yPiogbV9wYXJz
ZXIgeyBudWxscHRyIH07CiAgICAgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIG1faW5mbzsKICAg
ICBjb25zdCBNZW1vcnlNb2RlIG1fbW9kZSB7IE1lbW9yeU1vZGU6OkJvdW5kc0NoZWNraW5nIH07
Ci0gICAgY29uc3QgQ29tcGlsYXRpb25Nb2RlIG1fY29tcGlsYXRpb25Nb2RlIHsgQ29tcGlsYXRp
b25Nb2RlOjpCQlFNb2RlIH07CisgICAgY29uc3QgQ29tcGlsYXRpb25Nb2RlIG1fY29tcGlsYXRp
b25Nb2RlOwogICAgIGNvbnN0IHVuc2lnbmVkIG1fZnVuY3Rpb25JbmRleCB7IFVJTlRfTUFYIH07
CiAgICAgY29uc3QgdW5zaWduZWQgbV9sb29wSW5kZXhGb3JPU1JFbnRyeSB7IFVJTlRfTUFYIH07
CiAgICAgVGllclVwQ291bnQqIG1fdGllclVwIHsgbnVsbHB0ciB9OwpAQCAtNzAxLDcgKzcwMSw3
IEBAIEIzSVJHZW5lcmF0b3I6OkIzSVJHZW5lcmF0b3IoY29uc3QgTW9kdWwKICAgICB9CiAKICAg
ICB7Ci0gICAgICAgIGF1dG8qIGNhbGxlZU1vdmVMb2NhdGlvbiA9ICZjb21waWxhdGlvbi0+Y2Fs
bGVlTW92ZUxvY2F0aW9uOworICAgICAgICBhdXRvKiBjYWxsZWVNb3ZlTG9jYXRpb25zID0gJmNv
bXBpbGF0aW9uLT5jYWxsZWVNb3ZlTG9jYXRpb25zOwogICAgICAgICBzdGF0aWNfYXNzZXJ0KENh
bGxGcmFtZVNsb3Q6OmNvZGVCbG9jayAqIHNpemVvZihSZWdpc3RlcikgPCBXYXNtQ2FsbGluZ0Nv
bnZlbnRpb246OmhlYWRlclNpemVJbkJ5dGVzLCAiV2UgcmVseSBvbiB0aGlzIGhlcmUgZm9yIG5v
dy4iKTsKICAgICAgICAgc3RhdGljX2Fzc2VydChDYWxsRnJhbWVTbG90OjpjYWxsZWUgKiBzaXpl
b2YoUmVnaXN0ZXIpIDwgV2FzbUNhbGxpbmdDb252ZW50aW9uOjpoZWFkZXJTaXplSW5CeXRlcywg
IldlIHJlbHkgb24gdGhpcyBoZXJlIGZvciBub3cuIik7CiAgICAgICAgIEIzOjpQYXRjaHBvaW50
VmFsdWUqIGdldENhbGxlZVBhdGNocG9pbnQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PEIz
OjpQYXRjaHBvaW50VmFsdWU+KG1fcHJvYywgQjM6OkludDY0LCBPcmlnaW4oKSk7CkBAIC03MTEs
OCArNzExLDggQEAgQjNJUkdlbmVyYXRvcjo6QjNJUkdlbmVyYXRvcihjb25zdCBNb2R1bAogICAg
ICAgICAgICAgWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJh
dGlvblBhcmFtcyYgcGFyYW1zKSB7CiAgICAgICAgICAgICAgICAgR1BSUmVnIHJlc3VsdCA9IHBh
cmFtc1swXS5ncHIoKTsKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RGF0YUxhYmVs
UHRyIG1vdmVMb2NhdGlvbiA9IGppdC5tb3ZlV2l0aFBhdGNoKE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tUHRyKG51bGxwdHIpLCByZXN1bHQpOwotICAgICAgICAgICAgICAgIGppdC5hZGRMaW5r
VGFzayhbY2FsbGVlTW92ZUxvY2F0aW9uLCBtb3ZlTG9jYXRpb25dIChMaW5rQnVmZmVyJiBsaW5r
QnVmZmVyKSB7Ci0gICAgICAgICAgICAgICAgICAgICpjYWxsZWVNb3ZlTG9jYXRpb24gPSBsaW5r
QnVmZmVyLmxvY2F0aW9uT2Y8V2FzbUVudHJ5UHRyVGFnPihtb3ZlTG9jYXRpb24pOworICAgICAg
ICAgICAgICAgIGppdC5hZGRMaW5rVGFzayhbY2FsbGVlTW92ZUxvY2F0aW9ucywgbW92ZUxvY2F0
aW9uXSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgeworICAgICAgICAgICAgICAgICAgICBjYWxs
ZWVNb3ZlTG9jYXRpb25zLT5hcHBlbmQobGlua0J1ZmZlci5sb2NhdGlvbk9mPFdhc21FbnRyeVB0
clRhZz4obW92ZUxvY2F0aW9uKSk7CiAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICB9
KTsKIApAQCAtNzgyLDcgKzc4Miw3IEBAIEIzSVJHZW5lcmF0b3I6OkIzSVJHZW5lcmF0b3IoY29u
c3QgTW9kdWwKIAogICAgIGVtaXRFbnRyeVRpZXJVcENoZWNrKCk7CiAKLSAgICBpZiAobV9jb21w
aWxhdGlvbk1vZGUgPT0gQ29tcGlsYXRpb25Nb2RlOjpPTUdGb3JPU1JFbnRyeU1vZGUpCisgICAg
aWYgKGlzT1NSRW50cnkobV9jb21waWxhdGlvbk1vZGUpKQogICAgICAgICBtX2N1cnJlbnRCbG9j
ayA9IG1fcHJvYy5hZGRCbG9jaygpOwogfQogCkBAIC0zMjQ3LDcgKzMyNDcsNyBAQCBzdGF0aWMg
Ym9vbCBzaG91bGREdW1wSVJGb3IodWludDMyX3QgZnVuCiAgICAgcmV0dXJuIGR1bXBBbGxvd2xp
c3QtPnNob3VsZER1bXBXYXNtRnVuY3Rpb24oZnVuY3Rpb25JbmRleCk7CiB9CiAKLUV4cGVjdGVk
PHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPiwgU3RyaW5nPiBwYXJzZUFuZENvbXBp
bGUoQ29tcGlsYXRpb25Db250ZXh0JiBjb21waWxhdGlvbkNvbnRleHQsIGNvbnN0IEZ1bmN0aW9u
RGF0YSYgZnVuY3Rpb24sIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBWZWN0b3I8VW5saW5r
ZWRXYXNtVG9XYXNtQ2FsbD4mIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLCB1bnNpZ25lZCYgb3Ny
RW50cnlTY3JhdGNoQnVmZmVyU2l6ZSwgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIE1l
bW9yeU1vZGUgbW9kZSwgQ29tcGlsYXRpb25Nb2RlIGNvbXBpbGF0aW9uTW9kZSwgdWludDMyX3Qg
ZnVuY3Rpb25JbmRleCwgdWludDMyX3QgbG9vcEluZGV4Rm9yT1NSRW50cnksIFRpZXJVcENvdW50
KiB0aWVyVXApCitFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4sIFN0
cmluZz4gcGFyc2VBbmRDb21waWxlKENvbXBpbGF0aW9uQ29udGV4dCYgY29tcGlsYXRpb25Db250
ZXh0LCBjb25zdCBGdW5jdGlvbkRhdGEmIGZ1bmN0aW9uLCBjb25zdCBTaWduYXR1cmUmIHNpZ25h
dHVyZSwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiB1bmxpbmtlZFdhc21Ub1dhc21D
YWxscywgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIE1lbW9yeU1vZGUgbW9kZSwgQ29t
cGlsYXRpb25Nb2RlIGNvbXBpbGF0aW9uTW9kZSwgdWludDMyX3QgZnVuY3Rpb25JbmRleCwgdWlu
dDMyX3QgbG9vcEluZGV4Rm9yT1NSRW50cnksIFRpZXJVcENvdW50KiB0aWVyVXApCiB7CiAgICAg
YXV0byByZXN1bHQgPSBtYWtlVW5pcXVlPEludGVybmFsRnVuY3Rpb24+KCk7CiAKQEAgLTMyODAs
MTEgKzMyODAsMTEgQEAgRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpbwog
ICAgIC8vIG9wdExldmVsPTEuCiAgICAgcHJvY2VkdXJlLnNldE5lZWRzVXNlZFJlZ2lzdGVycyhm
YWxzZSk7CiAgICAgCi0gICAgcHJvY2VkdXJlLnNldE9wdExldmVsKGNvbXBpbGF0aW9uTW9kZSA9
PSBDb21waWxhdGlvbk1vZGU6OkJCUU1vZGUKKyAgICBwcm9jZWR1cmUuc2V0T3B0TGV2ZWwoaXNB
bnlCQlEoY29tcGlsYXRpb25Nb2RlKQogICAgICAgICA/IE9wdGlvbnM6OndlYkFzc2VtYmx5QkJR
QjNPcHRpbWl6YXRpb25MZXZlbCgpCiAgICAgICAgIDogT3B0aW9uczo6d2ViQXNzZW1ibHlPTUdP
cHRpbWl6YXRpb25MZXZlbCgpKTsKIAotICAgIEIzSVJHZW5lcmF0b3IgaXJHZW5lcmF0b3IoaW5m
bywgcHJvY2VkdXJlLCByZXN1bHQuZ2V0KCksIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBvc3JF
bnRyeVNjcmF0Y2hCdWZmZXJTaXplLCBtb2RlLCBjb21waWxhdGlvbk1vZGUsIGZ1bmN0aW9uSW5k
ZXgsIGxvb3BJbmRleEZvck9TUkVudHJ5LCB0aWVyVXApOworICAgIEIzSVJHZW5lcmF0b3IgaXJH
ZW5lcmF0b3IoaW5mbywgcHJvY2VkdXJlLCByZXN1bHQuZ2V0KCksIHVubGlua2VkV2FzbVRvV2Fz
bUNhbGxzLCByZXN1bHQtPm9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUsIG1vZGUsIGNvbXBpbGF0
aW9uTW9kZSwgZnVuY3Rpb25JbmRleCwgbG9vcEluZGV4Rm9yT1NSRW50cnksIHRpZXJVcCk7CiAg
ICAgRnVuY3Rpb25QYXJzZXI8QjNJUkdlbmVyYXRvcj4gcGFyc2VyKGlyR2VuZXJhdG9yLCBmdW5j
dGlvbi5kYXRhLmRhdGEoKSwgZnVuY3Rpb24uZGF0YS5zaXplKCksIHNpZ25hdHVyZSwgaW5mbyk7
CiAgICAgV0FTTV9GQUlMX0lGX0hFTFBFUl9GQUlMUyhwYXJzZXIucGFyc2UoKSk7CiAKQEAgLTMz
MjksNiArMzMyOSw5IEBAIHZvaWQgY29tcHV0ZUV4Y2VwdGlvbkhhbmRsZXJMb2NhdGlvbnMoVmUK
ICAgICBpZiAoIWNvbnRleHQucHJvY2VkdXJlKQogICAgICAgICByZXR1cm47CiAKKyAgICBpZiAo
ZnVuY3Rpb24tPmV4Y2VwdGlvbkhhbmRsZXJzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOwor
CiAgICAgdW5zaWduZWQgZW50cnlwb2ludEluZGV4ID0gMDsKICAgICB1bnNpZ25lZCBudW1FbnRy
eXBvaW50cyA9IGNvbnRleHQucHJvY2VkdXJlLT5udW1FbnRyeXBvaW50cygpOwogICAgIGZvciAo
Y29uc3QgVW5saW5rZWRIYW5kbGVySW5mbyYgaGFuZGxlckluZm8gOiBmdW5jdGlvbi0+ZXhjZXB0
aW9uSGFuZGxlcnMpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lS
R2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUIzSVJHZW5lcmF0b3IuaAkocmV2aXNpb24gMjg3MzM5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNTcsNyArNTcs
NyBAQCBzdHJ1Y3QgQ29tcGlsYXRpb25Db250ZXh0IHsKICAgICBCb3g8UENUb0NvZGVPcmlnaW5N
YXA+IHBjVG9Db2RlT3JpZ2luTWFwOwogfTsKIAotRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPElu
dGVybmFsRnVuY3Rpb24+LCBTdHJpbmc+IHBhcnNlQW5kQ29tcGlsZShDb21waWxhdGlvbkNvbnRl
eHQmLCBjb25zdCBGdW5jdGlvbkRhdGEmLCBjb25zdCBTaWduYXR1cmUmLCBWZWN0b3I8VW5saW5r
ZWRXYXNtVG9XYXNtQ2FsbD4mLCB1bnNpZ25lZCYgb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSwg
Y29uc3QgTW9kdWxlSW5mb3JtYXRpb24mLCBNZW1vcnlNb2RlLCBDb21waWxhdGlvbk1vZGUsIHVp
bnQzMl90IGZ1bmN0aW9uSW5kZXgsIHVpbnQzMl90IGxvb3BJbmRleEZvck9TUkVudHJ5LCBUaWVy
VXBDb3VudCogPSBudWxscHRyKTsKK0V4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1
bmN0aW9uPiwgU3RyaW5nPiBwYXJzZUFuZENvbXBpbGUoQ29tcGlsYXRpb25Db250ZXh0JiwgY29u
c3QgRnVuY3Rpb25EYXRhJiwgY29uc3QgU2lnbmF0dXJlJiwgVmVjdG9yPFVubGlua2VkV2FzbVRv
V2FzbUNhbGw+JiwgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mLCBNZW1vcnlNb2RlLCBDb21waWxh
dGlvbk1vZGUsIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIHVpbnQzMl90IGxvb3BJbmRleEZvck9T
UkVudHJ5LCBUaWVyVXBDb3VudCogPSBudWxscHRyKTsKIAogdm9pZCBjb21wdXRlRXhjZXB0aW9u
SGFuZGxlckxvY2F0aW9ucyhWZWN0b3I8Q29kZUxvY2F0aW9uTGFiZWw8RXhjZXB0aW9uSGFuZGxl
clB0clRhZz4+JiBoYW5kbGVycywgY29uc3QgSW50ZXJuYWxGdW5jdGlvbiosIGNvbnN0IENvbXBp
bGF0aW9uQ29udGV4dCYsIExpbmtCdWZmZXImKTsKIHZvaWQgY29tcHV0ZVBDVG9Db2RlT3JpZ2lu
TWFwKENvbXBpbGF0aW9uQ29udGV4dCYsIExpbmtCdWZmZXImKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJRUGxhbi5jcHAJKHJldmlzaW9uIDI4NzMzOSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNjMsMTcgKzYzLDI2IEBAIGJvb2wgQkJRUGxhbjo6cHJlcGFyZUltcGwoKQogICAgIGNvbnN0
IGF1dG8mIGZ1bmN0aW9ucyA9IG1fbW9kdWxlSW5mb3JtYXRpb24tPmZ1bmN0aW9uczsKICAgICBp
ZiAoIXRyeVJlc2VydmVDYXBhY2l0eShtX3dhc21JbnRlcm5hbEZ1bmN0aW9ucywgZnVuY3Rpb25z
LnNpemUoKSwgIiBXZWJBc3NlbWJseSBmdW5jdGlvbnMiKQogICAgICAgICB8fCAhdHJ5UmVzZXJ2
ZUNhcGFjaXR5KG1fY29tcGlsYXRpb25Db250ZXh0cywgZnVuY3Rpb25zLnNpemUoKSwgIiBjb21w
aWxhdGlvbiBjb250ZXh0cyIpCi0gICAgICAgIHx8ICF0cnlSZXNlcnZlQ2FwYWNpdHkobV90aWVy
VXBDb3VudHMsIGZ1bmN0aW9ucy5zaXplKCksICIgdGllci11cCBjb3VudHMiKSkKKyAgICAgICAg
fHwgIXRyeVJlc2VydmVDYXBhY2l0eShtX3RpZXJVcENvdW50cywgZnVuY3Rpb25zLnNpemUoKSwg
IiB0aWVyLXVwIGNvdW50cyIpCisgICAgICAgIHx8ICF0cnlSZXNlcnZlQ2FwYWNpdHkobV9hbGxM
b29wRW50cnlwb2ludHMsIGZ1bmN0aW9ucy5zaXplKCksICIgbG9vcCBlbnRyeXBvaW50cyIpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBtX3dhc21JbnRlcm5hbEZ1bmN0aW9ucy5yZXNp
emUoZnVuY3Rpb25zLnNpemUoKSk7CiAgICAgbV9leGNlcHRpb25IYW5kbGVyTG9jYXRpb25zLnJl
c2l6ZShmdW5jdGlvbnMuc2l6ZSgpKTsKICAgICBtX2NvbXBpbGF0aW9uQ29udGV4dHMucmVzaXpl
KGZ1bmN0aW9ucy5zaXplKCkpOwogICAgIG1fdGllclVwQ291bnRzLnJlc2l6ZShmdW5jdGlvbnMu
c2l6ZSgpKTsKKyAgICBtX2FsbExvb3BFbnRyeXBvaW50cy5yZXNpemUoZnVuY3Rpb25zLnNpemUo
KSk7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorc3RhdGljIHZvaWQgc2V0TG9vcEVudHJ5cG9p
bnRzKExpbmtCdWZmZXImIGxpbmtCdWZmZXIsIEIzOjpQcm9jZWR1cmUmIHByb2NlZHVyZSwgVmVj
dG9yPENvZGVMb2NhdGlvbkxhYmVsPFdhc21FbnRyeVB0clRhZz4+JiBsb2NhdGlvbnMpCit7Cisg
ICAgLy8gT09QUzogVGhpcyBkb2Vzbid0IHdvcmsgd2l0aCBleGNlcHRpb25zLgorICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBwcm9jZWR1cmUubnVtRW50cnlwb2ludHMoKSAtIDE7ICsraSkK
KyAgICAgICAgbG9jYXRpb25zLmFwcGVuZChsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8V2FzbUVudHJ5
UHRyVGFnPihwcm9jZWR1cmUuY29kZSgpLmVudHJ5cG9pbnRMYWJlbChpICsgMSkpKTsKK30KKwog
dm9pZCBCQlFQbGFuOjp3b3JrKENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKIHsKICAgICBpZiAo
IW1fY2FsbGVlR3JvdXApIHsKQEAgLTEyNSwxMyArMTM0LDE3IEBAIHZvaWQgQkJRUGxhbjo6d29y
ayhDb21waWxhdGlvbkVmZm9ydCBlZmYKIAogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxXYXNt
RW50cnlQdHJUYWc+IGVudHJ5cG9pbnQ7CiAgICAgewotICAgICAgICBSZWY8QkJRQ2FsbGVlPiBj
YWxsZWUgPSBCQlFDYWxsZWU6OmNyZWF0ZShXVEZNb3ZlKGZ1bmN0aW9uLT5lbnRyeXBvaW50KSwg
ZnVuY3Rpb25JbmRleFNwYWNlLCBtX21vZHVsZUluZm9ybWF0aW9uLT5uYW1lU2VjdGlvbi0+Z2V0
KGZ1bmN0aW9uSW5kZXhTcGFjZSksIFdURk1vdmUodGllclVwKSwgV1RGTW92ZSh1bmxpbmtlZFdh
c21Ub1dhc21DYWxscyksIFdURk1vdmUoZnVuY3Rpb24tPnN0YWNrbWFwcyksIFdURk1vdmUoZnVu
Y3Rpb24tPmV4Y2VwdGlvbkhhbmRsZXJzKSwgV1RGTW92ZShleGNlcHRpb25IYW5kbGVyTG9jYXRp
b25zKSk7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoUG9pbnRlcihmdW5jdGlvbi0+
Y2FsbGVlTW92ZUxvY2F0aW9uLCBDYWxsZWVCaXRzOjpib3hXYXNtKGNhbGxlZS5wdHIoKSkpOwor
ICAgICAgICBSZWY8QkJRQ2FsbGVlPiBjYWxsZWUgPSBCQlFDYWxsZWU6OmNyZWF0ZShXVEZNb3Zl
KGZ1bmN0aW9uLT5lbnRyeXBvaW50KSwgZnVuY3Rpb25JbmRleFNwYWNlLCBtX21vZHVsZUluZm9y
bWF0aW9uLT5uYW1lU2VjdGlvbi0+Z2V0KGZ1bmN0aW9uSW5kZXhTcGFjZSksIFdURk1vdmUodGll
clVwKSwgV1RGTW92ZSh1bmxpbmtlZFdhc21Ub1dhc21DYWxscyksIFdURk1vdmUoZnVuY3Rpb24t
PnN0YWNrbWFwcyksIFdURk1vdmUoZnVuY3Rpb24tPmV4Y2VwdGlvbkhhbmRsZXJzKSwgV1RGTW92
ZShleGNlcHRpb25IYW5kbGVyTG9jYXRpb25zKSwgZnVuY3Rpb24tPm9zckVudHJ5U2NyYXRjaEJ1
ZmZlclNpemUpOworICAgICAgICBmb3IgKGF1dG8mIG1vdmVMb2NhdGlvbiA6IGZ1bmN0aW9uLT5j
YWxsZWVNb3ZlTG9jYXRpb25zKQorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hQ
b2ludGVyKG1vdmVMb2NhdGlvbiwgQ2FsbGVlQml0czo6Ym94V2FzbShjYWxsZWUucHRyKCkpKTsK
ICAgICAgICAgZW50cnlwb2ludCA9IGNhbGxlZS0+ZW50cnlwb2ludCgpOwogCiAgICAgICAgIGlm
IChjb250ZXh0LnBjVG9Db2RlT3JpZ2luTWFwKQogICAgICAgICAgICAgQ2FsbGVlUmVnaXN0cnk6
OnNpbmdsZXRvbigpLmFkZFBDVG9Db2RlT3JpZ2luTWFwKGNhbGxlZS5wdHIoKSwgV1RGTW92ZShj
b250ZXh0LnBjVG9Db2RlT3JpZ2luTWFwKSk7CiAKKyAgICAgICAgaWYgKGNvbnRleHQucHJvY2Vk
dXJlKQorICAgICAgICAgICAgc2V0TG9vcEVudHJ5cG9pbnRzKGxpbmtCdWZmZXIsICpjb250ZXh0
LnByb2NlZHVyZSwgY2FsbGVlLT5sb29wRW50cnlwb2ludHMoKSk7CisKICAgICAgICAgLy8gV2Ug
d2FudCB0byBtYWtlIHN1cmUgd2UgcHVibGlzaCBvdXIgY2FsbGVlIGF0IHRoZSBzYW1lIHRpbWUg
YXMgd2UgbGluayBvdXIgY2FsbHNpdGVzLiBUaGlzIGVuYWJsZXMgdXMgdG8gZW5zdXJlIHdlCiAg
ICAgICAgIC8vIGFsd2F5cyBjYWxsIHRoZSBmYXN0ZXN0IGNvZGUuIEFueSBmdW5jdGlvbiBsaW5r
ZWQgYWZ0ZXIgdXMgd2lsbCBzZWUgb3VyIG5ldyBjb2RlIGFuZCB0aGUgbmV3IGNhbGxzaXRlcywg
d2hpY2ggdGhleQogICAgICAgICAvLyB3aWxsIHVwZGF0ZS4gSXQncyBhbHNvIG9rIGlmIHRoZXkg
cHVibGlzaCB0aGVpciBjb2RlIGJlZm9yZSB3ZSByZXNldCB0aGUgaW5zdHJ1Y3Rpb24gY2FjaGVz
IGJlY2F1c2UgYWZ0ZXIgd2UgcmVsZWFzZQpAQCAtMTk1LDIxICsyMDgsMjMgQEAgc3RkOjp1bmlx
dWVfcHRyPEludGVybmFsRnVuY3Rpb24+IEJCUVBsYQogICAgIHVuc2lnbmVkIGZ1bmN0aW9uSW5k
ZXhTcGFjZSA9IG1fbW9kdWxlSW5mb3JtYXRpb24tPmltcG9ydEZ1bmN0aW9uQ291bnQoKSArIGZ1
bmN0aW9uSW5kZXg7CiAgICAgQVNTRVJUX1VOVVNFRChmdW5jdGlvbkluZGV4U3BhY2UsIG1fbW9k
dWxlSW5mb3JtYXRpb24tPnNpZ25hdHVyZUluZGV4RnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShmdW5j
dGlvbkluZGV4U3BhY2UpID09IHNpZ25hdHVyZUluZGV4KTsKICAgICBFeHBlY3RlZDxzdGQ6OnVu
aXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4sIFN0cmluZz4gcGFyc2VBbmRDb21waWxlUmVzdWx0
OwotICAgIHVuc2lnbmVkIG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUgPSAwOwotCiAgICAgLy8g
RklYTUU6IFNvbWUgd2VicGFnZXMgdXNlIHZlcnkgbGFyZ2UgV2FzbSBtb2R1bGUsIGFuZCBpdCBl
eGhhdXN0cyBhbGwgZXhlY3V0YWJsZSBtZW1vcnkgaW4gQVJNNjQgZGV2aWNlcyBzaW5jZSB0aGUg
c2l6ZSBvZiBleGVjdXRhYmxlIG1lbW9yeSByZWdpb24gaXMgb25seSBsaW1pdGVkIHRvIDEyOE1C
LgogICAgIC8vIFRoZSBsb25nIHRlcm0gc29sdXRpb24gc2hvdWxkIGJlIHRvIGludHJvZHVjZSBh
IFdhc20gaW50ZXJwcmV0ZXIuIEJ1dCBhcyBhIHNob3J0IHRlcm0gc29sdXRpb24sIHdlIGludHJv
ZHVjZSBoZXVyaXN0aWNzIHRvIHN3aXRjaCBiYWNrIHRvIEJCUSBCMyBhdCB0aGUgc2FjcmlmaWNl
IG9mIHN0YXJ0LXVwIHRpbWUsCiAgICAgLy8gYXMgQkJRIEFpciBibG9hdHMgc3VjaCBsZW5ndGh5
IFdhc20gY29kZSBhbmQgd2lsbCBjb25zdW1lIGEgbGFyZ2UgYW1vdW50IG9mIGV4ZWN1dGFibGUg
bWVtb3J5LgorCisgICAgLy8gT09QUwogICAgIGJvb2wgZm9yY2VVc2luZ0IzID0gZmFsc2U7Cisg
ICAgLyoKICAgICBpZiAoT3B0aW9uczo6d2ViQXNzZW1ibHlCQlFBaXJNb2RlVGhyZXNob2xkKCkg
JiYgbV9tb2R1bGVJbmZvcm1hdGlvbi0+Y29kZVNlY3Rpb25TaXplID49IE9wdGlvbnM6OndlYkFz
c2VtYmx5QkJRQWlyTW9kZVRocmVzaG9sZCgpKQogICAgICAgICBmb3JjZVVzaW5nQjMgPSB0cnVl
OwogICAgIGVsc2UgaWYgKCFtX21vZHVsZUluZm9ybWF0aW9uLT5tX2Z1bmN0aW9uRG9lc05vdFVz
ZUV4Y2VwdGlvbnMucXVpY2tHZXQoZnVuY3Rpb25JbmRleCkpCiAgICAgICAgIGZvcmNlVXNpbmdC
MyA9IHRydWU7CiAgICAgZWxzZSBpZiAoIU9wdGlvbnM6Ondhc21CQlFVc2VzQWlyKCkpCiAgICAg
ICAgIGZvcmNlVXNpbmdCMyA9IHRydWU7CisgICAgKi8KIAogICAgIGlmIChmb3JjZVVzaW5nQjMp
Ci0gICAgICAgIHBhcnNlQW5kQ29tcGlsZVJlc3VsdCA9IHBhcnNlQW5kQ29tcGlsZShjb250ZXh0
LCBmdW5jdGlvbiwgc2lnbmF0dXJlLCB1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgb3NyRW50cnlT
Y3JhdGNoQnVmZmVyU2l6ZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi5nZXQoKSwgbV9tb2RlLCBDb21w
aWxhdGlvbk1vZGU6OkJCUU1vZGUsIGZ1bmN0aW9uSW5kZXgsIFVJTlQzMl9NQVgsIHRpZXJVcCk7
CisgICAgICAgIHBhcnNlQW5kQ29tcGlsZVJlc3VsdCA9IHBhcnNlQW5kQ29tcGlsZShjb250ZXh0
LCBmdW5jdGlvbiwgc2lnbmF0dXJlLCB1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgbV9tb2R1bGVJ
bmZvcm1hdGlvbi5nZXQoKSwgbV9tb2RlLCBDb21waWxhdGlvbk1vZGU6OkJCUU1vZGUsIGZ1bmN0
aW9uSW5kZXgsIFVJTlQzMl9NQVgsIHRpZXJVcCk7CiAgICAgZWxzZQogICAgICAgICBwYXJzZUFu
ZENvbXBpbGVSZXN1bHQgPSBwYXJzZUFuZENvbXBpbGVBaXIoY29udGV4dCwgZnVuY3Rpb24sIHNp
Z25hdHVyZSwgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIG1fbW9kdWxlSW5mb3JtYXRpb24uZ2V0
KCksIG1fbW9kZSwgZnVuY3Rpb25JbmRleCwgdGllclVwKTsKIApAQCAtMjQ2LDYgKzI2MSw5IEBA
IHZvaWQgQkJRUGxhbjo6ZGlkQ29tcGxldGVDb21waWxhdGlvbigpCiAKICAgICAgICAgICAgIGNv
bXB1dGVQQ1RvQ29kZU9yaWdpbk1hcChjb250ZXh0LCBsaW5rQnVmZmVyKTsKIAorICAgICAgICAg
ICAgaWYgKGNvbnRleHQucHJvY2VkdXJlKQorICAgICAgICAgICAgICAgIHNldExvb3BFbnRyeXBv
aW50cyhsaW5rQnVmZmVyLCAqY29udGV4dC5wcm9jZWR1cmUsIG1fYWxsTG9vcEVudHJ5cG9pbnRz
W2Z1bmN0aW9uSW5kZXhdKTsKKwogICAgICAgICAgICAgZnVuY3Rpb24tPmVudHJ5cG9pbnQuY29t
cGlsYXRpb24gPSBtYWtlVW5pcXVlPENvbXBpbGF0aW9uPigKICAgICAgICAgICAgICAgICBGSU5B
TElaRV9DT0RFKGxpbmtCdWZmZXIsIEpJVENvbXBpbGF0aW9uUHRyVGFnLCAiV2ViQXNzZW1ibHkg
QkJRIGZ1bmN0aW9uWyVpXSAlcyBuYW1lICVzIiwgZnVuY3Rpb25JbmRleCwgc2lnbmF0dXJlLnRv
U3RyaW5nKCkuYXNjaWkoKS5kYXRhKCksIG1ha2VTdHJpbmcoSW5kZXhPck5hbWUoZnVuY3Rpb25J
bmRleFNwYWNlLCBtX21vZHVsZUluZm9ybWF0aW9uLT5uYW1lU2VjdGlvbi0+Z2V0KGZ1bmN0aW9u
SW5kZXhTcGFjZSkpKS5hc2NpaSgpLmRhdGEoKSksCiAgICAgICAgICAgICAgICAgV1RGTW92ZShj
b250ZXh0Lndhc21FbnRyeXBvaW50Qnlwcm9kdWN0cykpOwpAQCAtMjg1LDEzICszMDMsMTggQEAg
dm9pZCBCQlFQbGFuOjppbml0aWFsaXplQ2FsbGVlcyhjb25zdCBDYQogICAgICAgICBSZWZQdHI8
RW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlPiBlbWJlZGRlckVudHJ5cG9pbnRDYWxsZWU7CiAgICAg
ICAgIGlmIChhdXRvIGVtYmVkZGVyVG9XYXNtRnVuY3Rpb24gPSBtX2VtYmVkZGVyVG9XYXNtSW50
ZXJuYWxGdW5jdGlvbnMuZ2V0KGludGVybmFsRnVuY3Rpb25JbmRleCkpIHsKICAgICAgICAgICAg
IGVtYmVkZGVyRW50cnlwb2ludENhbGxlZSA9IEVtYmVkZGVyRW50cnlwb2ludENhbGxlZTo6Y3Jl
YXRlKFdURk1vdmUoZW1iZWRkZXJUb1dhc21GdW5jdGlvbi0+ZW50cnlwb2ludCkpOwotICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hQb2ludGVyKGVtYmVkZGVyVG9XYXNtRnVuY3Rp
b24tPmNhbGxlZU1vdmVMb2NhdGlvbiwgQ2FsbGVlQml0czo6Ym94V2FzbShlbWJlZGRlckVudHJ5
cG9pbnRDYWxsZWUuZ2V0KCkpKTsKKyAgICAgICAgICAgIGZvciAoYXV0byYgbW92ZUxvY2F0aW9u
IDogZW1iZWRkZXJUb1dhc21GdW5jdGlvbi0+Y2FsbGVlTW92ZUxvY2F0aW9ucykKKyAgICAgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaFBvaW50ZXIobW92ZUxvY2F0aW9uLCBDYWxs
ZWVCaXRzOjpib3hXYXNtKGVtYmVkZGVyRW50cnlwb2ludENhbGxlZS5nZXQoKSkpOwogICAgICAg
ICB9CiAKICAgICAgICAgSW50ZXJuYWxGdW5jdGlvbiogZnVuY3Rpb24gPSBtX3dhc21JbnRlcm5h
bEZ1bmN0aW9uc1tpbnRlcm5hbEZ1bmN0aW9uSW5kZXhdLmdldCgpOwogICAgICAgICBzaXplX3Qg
ZnVuY3Rpb25JbmRleFNwYWNlID0gaW50ZXJuYWxGdW5jdGlvbkluZGV4ICsgbV9tb2R1bGVJbmZv
cm1hdGlvbi0+aW1wb3J0RnVuY3Rpb25Db3VudCgpOwotICAgICAgICBSZWY8QkJRQ2FsbGVlPiB3
YXNtRW50cnlwb2ludENhbGxlZSA9IEJCUUNhbGxlZTo6Y3JlYXRlKFdURk1vdmUoZnVuY3Rpb24t
PmVudHJ5cG9pbnQpLCBmdW5jdGlvbkluZGV4U3BhY2UsIG1fbW9kdWxlSW5mb3JtYXRpb24tPm5h
bWVTZWN0aW9uLT5nZXQoZnVuY3Rpb25JbmRleFNwYWNlKSwgV1RGTW92ZShtX3RpZXJVcENvdW50
c1tpbnRlcm5hbEZ1bmN0aW9uSW5kZXhdKSwgV1RGTW92ZShtX3VubGlua2VkV2FzbVRvV2FzbUNh
bGxzW2ludGVybmFsRnVuY3Rpb25JbmRleF0pLCBXVEZNb3ZlKGZ1bmN0aW9uLT5zdGFja21hcHMp
LCBXVEZNb3ZlKGZ1bmN0aW9uLT5leGNlcHRpb25IYW5kbGVycyksIFdURk1vdmUobV9leGNlcHRp
b25IYW5kbGVyTG9jYXRpb25zW2ludGVybmFsRnVuY3Rpb25JbmRleF0pKTsKLSAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OnJlcGF0Y2hQb2ludGVyKGZ1bmN0aW9uLT5jYWxsZWVNb3ZlTG9jYXRpb24s
IENhbGxlZUJpdHM6OmJveFdhc20od2FzbUVudHJ5cG9pbnRDYWxsZWUucHRyKCkpKTsKKyAgICAg
ICAgUmVmPEJCUUNhbGxlZT4gd2FzbUVudHJ5cG9pbnRDYWxsZWUgPSBCQlFDYWxsZWU6OmNyZWF0
ZShXVEZNb3ZlKGZ1bmN0aW9uLT5lbnRyeXBvaW50KSwgZnVuY3Rpb25JbmRleFNwYWNlLCBtX21v
ZHVsZUluZm9ybWF0aW9uLT5uYW1lU2VjdGlvbi0+Z2V0KGZ1bmN0aW9uSW5kZXhTcGFjZSksIFdU
Rk1vdmUobV90aWVyVXBDb3VudHNbaW50ZXJuYWxGdW5jdGlvbkluZGV4XSksIFdURk1vdmUobV91
bmxpbmtlZFdhc21Ub1dhc21DYWxsc1tpbnRlcm5hbEZ1bmN0aW9uSW5kZXhdKSwgV1RGTW92ZShm
dW5jdGlvbi0+c3RhY2ttYXBzKSwgV1RGTW92ZShmdW5jdGlvbi0+ZXhjZXB0aW9uSGFuZGxlcnMp
LCBXVEZNb3ZlKG1fZXhjZXB0aW9uSGFuZGxlckxvY2F0aW9uc1tpbnRlcm5hbEZ1bmN0aW9uSW5k
ZXhdKSwgZnVuY3Rpb24tPm9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUpOworCisgICAgICAgIHdh
c21FbnRyeXBvaW50Q2FsbGVlLT5sb29wRW50cnlwb2ludHMoKSA9IFdURk1vdmUobV9hbGxMb29w
RW50cnlwb2ludHNbaW50ZXJuYWxGdW5jdGlvbkluZGV4XSk7CisKKyAgICAgICAgZm9yIChhdXRv
JiBtb3ZlTG9jYXRpb24gOiBmdW5jdGlvbi0+Y2FsbGVlTW92ZUxvY2F0aW9ucykKKyAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoUG9pbnRlcihtb3ZlTG9jYXRpb24sIENhbGxlZUJp
dHM6OmJveFdhc20od2FzbUVudHJ5cG9pbnRDYWxsZWUucHRyKCkpKTsKIAogICAgICAgICBpZiAo
bV9jb21waWxhdGlvbkNvbnRleHRzW2ludGVybmFsRnVuY3Rpb25JbmRleF0ucGNUb0NvZGVPcmln
aW5NYXApCiAgICAgICAgICAgICBDYWxsZWVSZWdpc3RyeTo6c2luZ2xldG9uKCkuYWRkUENUb0Nv
ZGVPcmlnaW5NYXAod2FzbUVudHJ5cG9pbnRDYWxsZWUucHRyKCksIFdURk1vdmUobV9jb21waWxh
dGlvbkNvbnRleHRzW2ludGVybmFsRnVuY3Rpb25JbmRleF0ucGNUb0NvZGVPcmlnaW5NYXApKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uaAkocmV2aXNpb24g
Mjg3MzM5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uaAkod29y
a2luZyBjb3B5KQpAQCAtODcsNiArODcsNyBAQCBwcml2YXRlOgogICAgIEhhc2hNYXA8dWludDMy
X3QsIHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPiwgRGVmYXVsdEhhc2g8dWludDMy
X3Q+LCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPHVpbnQzMl90Pj4gbV9lbWJl
ZGRlclRvV2FzbUludGVybmFsRnVuY3Rpb25zOwogICAgIFZlY3RvcjxDb21waWxhdGlvbkNvbnRl
eHQ+IG1fY29tcGlsYXRpb25Db250ZXh0czsKICAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPFRp
ZXJVcENvdW50Pj4gbV90aWVyVXBDb3VudHM7CisgICAgVmVjdG9yPFZlY3RvcjxDb2RlTG9jYXRp
b25MYWJlbDxXYXNtRW50cnlQdHJUYWc+Pj4gbV9hbGxMb29wRW50cnlwb2ludHM7CiAKICAgICBS
ZWZQdHI8Q2FsbGVlR3JvdXA+IG1fY2FsbGVlR3JvdXAgeyBudWxscHRyIH07CiAgICAgdWludDMy
X3QgbV9mdW5jdGlvbkluZGV4OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUNhbGxlZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21D
YWxsZWUuaAkocmV2aXNpb24gMjg3MzM5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUNhbGxlZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00NiwxMCArNDYsNiBAQCBjbGFzcyBMTElu
dE9mZnNldHNFeHRyYWN0b3I7CiAKIG5hbWVzcGFjZSBXYXNtIHsKIAotI2lmIEVOQUJMRShXRUJB
U1NFTUJMWV9CM0pJVCkKLWNsYXNzIE9NR0Zvck9TUkVudHJ5Q2FsbGVlOwotI2VuZGlmCi0KIGNs
YXNzIENhbGxlZSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxDYWxsZWU+IHsKICAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIApAQCAtNjcsMTMgKzYzLDYgQEAgcHVibGljOgogCiAg
ICAgYm9vbCBoYXNFeGNlcHRpb25IYW5kbGVycygpIGNvbnN0IHsgcmV0dXJuICFtX2V4Y2VwdGlv
bkhhbmRsZXJzLmlzRW1wdHkoKTsgfQogCi0jaWYgRU5BQkxFKFdFQkFTU0VNQkxZX0IzSklUKQot
ICAgIHZpcnR1YWwgdm9pZCBzZXRPU1JFbnRyeUNhbGxlZShSZWY8T01HRm9yT1NSRW50cnlDYWxs
ZWU+JiYsIE1lbW9yeU1vZGUpCi0gICAgewotICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotICAgIH0KLSNlbmRpZgotCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29u
c3Q7CiAKICAgICB2aXJ0dWFsIEZ1bmN0aW9uQ29kZUJsb2NrKiBsbGludEZ1bmN0aW9uQ29kZUJs
b2NrKCkgY29uc3QgeyByZXR1cm4gbnVsbHB0cjsgfQpAQCAtMTYxLDE5ICsxNTAsMTkgQEAgcHJp
dmF0ZToKICAgICB9CiB9OwogCi1jbGFzcyBPTUdGb3JPU1JFbnRyeUNhbGxlZSBmaW5hbCA6IHB1
YmxpYyBPcHRpbWl6aW5nSklUQ2FsbGVlIHsKK2NsYXNzIE9TUkVudHJ5Q2FsbGVlIGZpbmFsIDog
cHVibGljIE9wdGltaXppbmdKSVRDYWxsZWUgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8T01H
Rm9yT1NSRW50cnlDYWxsZWU+IGNyZWF0ZShXYXNtOjpFbnRyeXBvaW50JiYgZW50cnlwb2ludCwg
c2l6ZV90IGluZGV4LCBzdGQ6OnBhaXI8Y29uc3QgTmFtZSosIFJlZlB0cjxOYW1lU2VjdGlvbj4+
JiYgbmFtZSwgdW5zaWduZWQgb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSwgdWludDMyX3QgbG9v
cEluZGV4LCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mJiB1bmxpbmtlZENhbGxzLCBT
dGFja01hcHMmJiBzdGFja21hcHMsIFZlY3RvcjxVbmxpbmtlZEhhbmRsZXJJbmZvPiYmIGV4Y2Vw
dGlvbkhhbmRsZXJzLCBWZWN0b3I8Q29kZUxvY2F0aW9uTGFiZWw8RXhjZXB0aW9uSGFuZGxlclB0
clRhZz4+JiYgZXhjZXB0aW9uSGFuZGxlckxvY2F0aW9ucykKKyAgICBzdGF0aWMgUmVmPE9TUkVu
dHJ5Q2FsbGVlPiBjcmVhdGUoQ29tcGlsYXRpb25Nb2RlIGNvbXBpbGF0aW9uTW9kZSwgV2FzbTo6
RW50cnlwb2ludCYmIGVudHJ5cG9pbnQsIHNpemVfdCBpbmRleCwgc3RkOjpwYWlyPGNvbnN0IE5h
bWUqLCBSZWZQdHI8TmFtZVNlY3Rpb24+PiYmIG5hbWUsIHVuc2lnbmVkIG9zckVudHJ5U2NyYXRj
aEJ1ZmZlclNpemUsIHVpbnQzMl90IGxvb3BJbmRleCwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2Fz
bUNhbGw+JiYgdW5saW5rZWRDYWxscywgU3RhY2tNYXBzJiYgc3RhY2ttYXBzLCBWZWN0b3I8VW5s
aW5rZWRIYW5kbGVySW5mbz4mJiBleGNlcHRpb25IYW5kbGVycywgVmVjdG9yPENvZGVMb2NhdGlv
bkxhYmVsPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+PiYmIGV4Y2VwdGlvbkhhbmRsZXJMb2NhdGlv
bnMpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBPTUdGb3JPU1JFbnRyeUNh
bGxlZShXVEZNb3ZlKGVudHJ5cG9pbnQpLCBpbmRleCwgV1RGTW92ZShuYW1lKSwgb3NyRW50cnlT
Y3JhdGNoQnVmZmVyU2l6ZSwgbG9vcEluZGV4LCBXVEZNb3ZlKHVubGlua2VkQ2FsbHMpLCBXVEZN
b3ZlKHN0YWNrbWFwcyksIFdURk1vdmUoZXhjZXB0aW9uSGFuZGxlcnMpLCBXVEZNb3ZlKGV4Y2Vw
dGlvbkhhbmRsZXJMb2NhdGlvbnMpKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IE9T
UkVudHJ5Q2FsbGVlKGNvbXBpbGF0aW9uTW9kZSwgV1RGTW92ZShlbnRyeXBvaW50KSwgaW5kZXgs
IFdURk1vdmUobmFtZSksIG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUsIGxvb3BJbmRleCwgV1RG
TW92ZSh1bmxpbmtlZENhbGxzKSwgV1RGTW92ZShzdGFja21hcHMpLCBXVEZNb3ZlKGV4Y2VwdGlv
bkhhbmRsZXJzKSwgV1RGTW92ZShleGNlcHRpb25IYW5kbGVyTG9jYXRpb25zKSkpOwogICAgIH0K
IAogICAgIHVuc2lnbmVkIG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUoKSBjb25zdCB7IHJldHVy
biBtX29zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemU7IH0KICAgICB1aW50MzJfdCBsb29wSW5kZXgo
KSBjb25zdCB7IHJldHVybiBtX2xvb3BJbmRleDsgfQogCiBwcml2YXRlOgotICAgIE9NR0Zvck9T
UkVudHJ5Q2FsbGVlKFdhc206OkVudHJ5cG9pbnQmJiBlbnRyeXBvaW50LCBzaXplX3QgaW5kZXgs
IHN0ZDo6cGFpcjxjb25zdCBOYW1lKiwgUmVmUHRyPE5hbWVTZWN0aW9uPj4mJiBuYW1lLCB1bnNp
Z25lZCBvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplLCB1aW50MzJfdCBsb29wSW5kZXgsIFZlY3Rv
cjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYmIHVubGlua2VkQ2FsbHMsIFN0YWNrTWFwcyYmIHN0
YWNrbWFwcywgVmVjdG9yPFVubGlua2VkSGFuZGxlckluZm8+JiYgZXhjZXB0aW9uSGFuZGxlcnMs
IFZlY3RvcjxDb2RlTG9jYXRpb25MYWJlbDxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPj4mJiBleGNl
cHRpb25IYW5kbGVyTG9jYXRpb25zKQotICAgICAgICA6IE9wdGltaXppbmdKSVRDYWxsZWUoV2Fz
bTo6Q29tcGlsYXRpb25Nb2RlOjpPTUdGb3JPU1JFbnRyeU1vZGUsIFdURk1vdmUoZW50cnlwb2lu
dCksIGluZGV4LCBXVEZNb3ZlKG5hbWUpLCBXVEZNb3ZlKHVubGlua2VkQ2FsbHMpLCBXVEZNb3Zl
KHN0YWNrbWFwcyksIFdURk1vdmUoZXhjZXB0aW9uSGFuZGxlcnMpLCBXVEZNb3ZlKGV4Y2VwdGlv
bkhhbmRsZXJMb2NhdGlvbnMpKQorICAgIE9TUkVudHJ5Q2FsbGVlKENvbXBpbGF0aW9uTW9kZSBj
b21waWxhdGlvbk1vZGUsIFdhc206OkVudHJ5cG9pbnQmJiBlbnRyeXBvaW50LCBzaXplX3QgaW5k
ZXgsIHN0ZDo6cGFpcjxjb25zdCBOYW1lKiwgUmVmUHRyPE5hbWVTZWN0aW9uPj4mJiBuYW1lLCB1
bnNpZ25lZCBvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplLCB1aW50MzJfdCBsb29wSW5kZXgsIFZl
Y3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYmIHVubGlua2VkQ2FsbHMsIFN0YWNrTWFwcyYm
IHN0YWNrbWFwcywgVmVjdG9yPFVubGlua2VkSGFuZGxlckluZm8+JiYgZXhjZXB0aW9uSGFuZGxl
cnMsIFZlY3RvcjxDb2RlTG9jYXRpb25MYWJlbDxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPj4mJiBl
eGNlcHRpb25IYW5kbGVyTG9jYXRpb25zKQorICAgICAgICA6IE9wdGltaXppbmdKSVRDYWxsZWUo
Y29tcGlsYXRpb25Nb2RlLCBXVEZNb3ZlKGVudHJ5cG9pbnQpLCBpbmRleCwgV1RGTW92ZShuYW1l
KSwgV1RGTW92ZSh1bmxpbmtlZENhbGxzKSwgV1RGTW92ZShzdGFja21hcHMpLCBXVEZNb3ZlKGV4
Y2VwdGlvbkhhbmRsZXJzKSwgV1RGTW92ZShleGNlcHRpb25IYW5kbGVyTG9jYXRpb25zKSkKICAg
ICAgICAgLCBtX29zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUob3NyRW50cnlTY3JhdGNoQnVmZmVy
U2l6ZSkKICAgICAgICAgLCBtX2xvb3BJbmRleChsb29wSW5kZXgpCiAgICAgewpAQCAtMTg1LDEz
ICsxNzQsMTMgQEAgcHJpdmF0ZToKIAogY2xhc3MgQkJRQ2FsbGVlIGZpbmFsIDogcHVibGljIE9w
dGltaXppbmdKSVRDYWxsZWUgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8QkJRQ2FsbGVlPiBj
cmVhdGUoV2FzbTo6RW50cnlwb2ludCYmIGVudHJ5cG9pbnQsIHNpemVfdCBpbmRleCwgc3RkOjpw
YWlyPGNvbnN0IE5hbWUqLCBSZWZQdHI8TmFtZVNlY3Rpb24+PiYmIG5hbWUsIHN0ZDo6dW5pcXVl
X3B0cjxUaWVyVXBDb3VudD4mJiB0aWVyVXBDb3VudCwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2Fz
bUNhbGw+JiYgdW5saW5rZWRDYWxscywgU3RhY2tNYXBzJiYgc3RhY2ttYXBzLCBWZWN0b3I8VW5s
aW5rZWRIYW5kbGVySW5mbz4mJiBleGNlcHRpb25IYW5kbGVycywgVmVjdG9yPENvZGVMb2NhdGlv
bkxhYmVsPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+PiYmIGV4Y2VwdGlvbkhhbmRsZXJMb2NhdGlv
bnMpCisgICAgc3RhdGljIFJlZjxCQlFDYWxsZWU+IGNyZWF0ZShXYXNtOjpFbnRyeXBvaW50JiYg
ZW50cnlwb2ludCwgc2l6ZV90IGluZGV4LCBzdGQ6OnBhaXI8Y29uc3QgTmFtZSosIFJlZlB0cjxO
YW1lU2VjdGlvbj4+JiYgbmFtZSwgc3RkOjp1bmlxdWVfcHRyPFRpZXJVcENvdW50PiYmIHRpZXJV
cENvdW50LCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mJiB1bmxpbmtlZENhbGxzLCBT
dGFja01hcHMmJiBzdGFja21hcHMsIFZlY3RvcjxVbmxpbmtlZEhhbmRsZXJJbmZvPiYmIGV4Y2Vw
dGlvbkhhbmRsZXJzLCBWZWN0b3I8Q29kZUxvY2F0aW9uTGFiZWw8RXhjZXB0aW9uSGFuZGxlclB0
clRhZz4+JiYgZXhjZXB0aW9uSGFuZGxlckxvY2F0aW9ucywgdW5zaWduZWQgb3NyRW50cnlTY3Jh
dGNoQnVmZmVyU2l6ZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEJCUUNh
bGxlZShXVEZNb3ZlKGVudHJ5cG9pbnQpLCBpbmRleCwgV1RGTW92ZShuYW1lKSwgV1RGTW92ZSh0
aWVyVXBDb3VudCksIFdURk1vdmUodW5saW5rZWRDYWxscyksIFdURk1vdmUoc3RhY2ttYXBzKSwg
V1RGTW92ZShleGNlcHRpb25IYW5kbGVycyksIFdURk1vdmUoZXhjZXB0aW9uSGFuZGxlckxvY2F0
aW9ucykpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQkJRQ2FsbGVlKFdURk1vdmUo
ZW50cnlwb2ludCksIGluZGV4LCBXVEZNb3ZlKG5hbWUpLCBXVEZNb3ZlKHRpZXJVcENvdW50KSwg
V1RGTW92ZSh1bmxpbmtlZENhbGxzKSwgV1RGTW92ZShzdGFja21hcHMpLCBXVEZNb3ZlKGV4Y2Vw
dGlvbkhhbmRsZXJzKSwgV1RGTW92ZShleGNlcHRpb25IYW5kbGVyTG9jYXRpb25zKSwgb3NyRW50
cnlTY3JhdGNoQnVmZmVyU2l6ZSkpOwogICAgIH0KIAotICAgIE9NR0Zvck9TUkVudHJ5Q2FsbGVl
KiBvc3JFbnRyeUNhbGxlZSgpIHsgcmV0dXJuIG1fb3NyRW50cnlDYWxsZWUuZ2V0KCk7IH0KLSAg
ICB2b2lkIHNldE9TUkVudHJ5Q2FsbGVlKFJlZjxPTUdGb3JPU1JFbnRyeUNhbGxlZT4mJiBvc3JF
bnRyeUNhbGxlZSwgTWVtb3J5TW9kZSkgZmluYWwKKyAgICBPU1JFbnRyeUNhbGxlZSogb3NyRW50
cnlDYWxsZWUoKSB7IHJldHVybiBtX29zckVudHJ5Q2FsbGVlLmdldCgpOyB9CisgICAgdm9pZCBz
ZXRPU1JFbnRyeUNhbGxlZShSZWY8T1NSRW50cnlDYWxsZWU+JiYgb3NyRW50cnlDYWxsZWUsIE1l
bW9yeU1vZGUpCiAgICAgewogICAgICAgICBtX29zckVudHJ5Q2FsbGVlID0gV1RGTW92ZShvc3JF
bnRyeUNhbGxlZSk7CiAgICAgfQpAQCAtMjA3LDE3ICsxOTYsMjQgQEAgcHVibGljOgogCiAgICAg
VGllclVwQ291bnQqIHRpZXJVcENvdW50KCkgeyByZXR1cm4gbV90aWVyVXBDb3VudC5nZXQoKTsg
fQogCisgICAgVmVjdG9yPENvZGVMb2NhdGlvbkxhYmVsPFdhc21FbnRyeVB0clRhZz4+JiBsb29w
RW50cnlwb2ludHMoKSB7IHJldHVybiBtX2xvb3BFbnRyeXBvaW50czsgfQorCisgICAgdW5zaWdu
ZWQgb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fb3NyRW50cnlT
Y3JhdGNoQnVmZmVyU2l6ZTsgfQorCiBwcml2YXRlOgotICAgIEJCUUNhbGxlZShXYXNtOjpFbnRy
eXBvaW50JiYgZW50cnlwb2ludCwgc2l6ZV90IGluZGV4LCBzdGQ6OnBhaXI8Y29uc3QgTmFtZSos
IFJlZlB0cjxOYW1lU2VjdGlvbj4+JiYgbmFtZSwgc3RkOjp1bmlxdWVfcHRyPFRpZXJVcENvdW50
PiYmIHRpZXJVcENvdW50LCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mJiB1bmxpbmtl
ZENhbGxzLCBTdGFja01hcHMmJiBzdGFja21hcHMsIFZlY3RvcjxVbmxpbmtlZEhhbmRsZXJJbmZv
PiYmIGV4Y2VwdGlvbkhhbmRsZXJzLCBWZWN0b3I8Q29kZUxvY2F0aW9uTGFiZWw8RXhjZXB0aW9u
SGFuZGxlclB0clRhZz4+JiYgZXhjZXB0aW9uSGFuZGxlckxvY2F0aW9ucykKKyAgICBCQlFDYWxs
ZWUoV2FzbTo6RW50cnlwb2ludCYmIGVudHJ5cG9pbnQsIHNpemVfdCBpbmRleCwgc3RkOjpwYWly
PGNvbnN0IE5hbWUqLCBSZWZQdHI8TmFtZVNlY3Rpb24+PiYmIG5hbWUsIHN0ZDo6dW5pcXVlX3B0
cjxUaWVyVXBDb3VudD4mJiB0aWVyVXBDb3VudCwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNh
bGw+JiYgdW5saW5rZWRDYWxscywgU3RhY2tNYXBzJiYgc3RhY2ttYXBzLCBWZWN0b3I8VW5saW5r
ZWRIYW5kbGVySW5mbz4mJiBleGNlcHRpb25IYW5kbGVycywgVmVjdG9yPENvZGVMb2NhdGlvbkxh
YmVsPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+PiYmIGV4Y2VwdGlvbkhhbmRsZXJMb2NhdGlvbnMs
IHVuc2lnbmVkIG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUpCiAgICAgICAgIDogT3B0aW1pemlu
Z0pJVENhbGxlZShXYXNtOjpDb21waWxhdGlvbk1vZGU6OkJCUU1vZGUsIFdURk1vdmUoZW50cnlw
b2ludCksIGluZGV4LCBXVEZNb3ZlKG5hbWUpLCBXVEZNb3ZlKHVubGlua2VkQ2FsbHMpLCBXVEZN
b3ZlKHN0YWNrbWFwcyksIFdURk1vdmUoZXhjZXB0aW9uSGFuZGxlcnMpLCBXVEZNb3ZlKGV4Y2Vw
dGlvbkhhbmRsZXJMb2NhdGlvbnMpKQogICAgICAgICAsIG1fdGllclVwQ291bnQoV1RGTW92ZSh0
aWVyVXBDb3VudCkpCisgICAgICAgICwgbV9vc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplKG9zckVu
dHJ5U2NyYXRjaEJ1ZmZlclNpemUpCiAgICAgewogICAgIH0KIAotICAgIFJlZlB0cjxPTUdGb3JP
U1JFbnRyeUNhbGxlZT4gbV9vc3JFbnRyeUNhbGxlZTsKKyAgICBSZWZQdHI8T1NSRW50cnlDYWxs
ZWU+IG1fb3NyRW50cnlDYWxsZWU7CiAgICAgUmVmUHRyPE9NR0NhbGxlZT4gbV9yZXBsYWNlbWVu
dDsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8VGllclVwQ291bnQ+IG1fdGllclVwQ291bnQ7CisgICAg
VmVjdG9yPENvZGVMb2NhdGlvbkxhYmVsPFdhc21FbnRyeVB0clRhZz4+IG1fbG9vcEVudHJ5cG9p
bnRzOwogICAgIGJvb2wgbV9kaWRTdGFydENvbXBpbGluZ09TUkVudHJ5Q2FsbGVlIHsgZmFsc2Ug
fTsKKyAgICB1bnNpZ25lZCBtX29zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUgeyAwIH07CiB9Owog
I2VuZGlmCiAKQEAgLTIzNywxMyArMjMzLDEzIEBAIHB1YmxpYzoKIAogI2lmIEVOQUJMRShXRUJB
U1NFTUJMWV9CM0pJVCkKICAgICBKSVRDYWxsZWUqIHJlcGxhY2VtZW50KE1lbW9yeU1vZGUgbW9k
ZSkgeyByZXR1cm4gbV9yZXBsYWNlbWVudHNbc3RhdGljX2Nhc3Q8dWludDhfdD4obW9kZSldLmdl
dCgpOyB9Ci0gICAgdm9pZCBzZXRSZXBsYWNlbWVudChSZWY8SklUQ2FsbGVlPiYmIHJlcGxhY2Vt
ZW50LCBNZW1vcnlNb2RlIG1vZGUpCisgICAgdm9pZCBzZXRSZXBsYWNlbWVudChSZWY8T3B0aW1p
emluZ0pJVENhbGxlZT4mJiByZXBsYWNlbWVudCwgTWVtb3J5TW9kZSBtb2RlKQogICAgIHsKICAg
ICAgICAgbV9yZXBsYWNlbWVudHNbc3RhdGljX2Nhc3Q8dWludDhfdD4obW9kZSldID0gV1RGTW92
ZShyZXBsYWNlbWVudCk7CiAgICAgfQogCi0gICAgT01HRm9yT1NSRW50cnlDYWxsZWUqIG9zckVu
dHJ5Q2FsbGVlKE1lbW9yeU1vZGUgbW9kZSkgeyByZXR1cm4gbV9vc3JFbnRyeUNhbGxlZXNbc3Rh
dGljX2Nhc3Q8dWludDhfdD4obW9kZSldLmdldCgpOyB9Ci0gICAgdm9pZCBzZXRPU1JFbnRyeUNh
bGxlZShSZWY8T01HRm9yT1NSRW50cnlDYWxsZWU+JiYgb3NyRW50cnlDYWxsZWUsIE1lbW9yeU1v
ZGUgbW9kZSkgZmluYWwKKyAgICBPU1JFbnRyeUNhbGxlZSogb3NyRW50cnlDYWxsZWUoTWVtb3J5
TW9kZSBtb2RlKSB7IHJldHVybiBtX29zckVudHJ5Q2FsbGVlc1tzdGF0aWNfY2FzdDx1aW50OF90
Pihtb2RlKV0uZ2V0KCk7IH0KKyAgICB2b2lkIHNldE9TUkVudHJ5Q2FsbGVlKFJlZjxPU1JFbnRy
eUNhbGxlZT4mJiBvc3JFbnRyeUNhbGxlZSwgTWVtb3J5TW9kZSBtb2RlKQogICAgIHsKICAgICAg
ICAgbV9vc3JFbnRyeUNhbGxlZXNbc3RhdGljX2Nhc3Q8dWludDhfdD4obW9kZSldID0gV1RGTW92
ZShvc3JFbnRyeUNhbGxlZSk7CiAgICAgfQpAQCAtMjU4LDggKzI1NCw4IEBAIHByaXZhdGU6CiAg
ICAgdm9pZCBsaW5rRXhjZXB0aW9uSGFuZGxlcnMoKTsKIAogI2lmIEVOQUJMRShXRUJBU1NFTUJM
WV9CM0pJVCkKLSAgICBSZWZQdHI8SklUQ2FsbGVlPiBtX3JlcGxhY2VtZW50c1tXYXNtOjpOdW1i
ZXJPZk1lbW9yeU1vZGVzXTsKLSAgICBSZWZQdHI8T01HRm9yT1NSRW50cnlDYWxsZWU+IG1fb3Ny
RW50cnlDYWxsZWVzW1dhc206Ok51bWJlck9mTWVtb3J5TW9kZXNdOworICAgIFJlZlB0cjxPcHRp
bWl6aW5nSklUQ2FsbGVlPiBtX3JlcGxhY2VtZW50c1tXYXNtOjpOdW1iZXJPZk1lbW9yeU1vZGVz
XTsKKyAgICBSZWZQdHI8T1NSRW50cnlDYWxsZWU+IG1fb3NyRW50cnlDYWxsZWVzW1dhc206Ok51
bWJlck9mTWVtb3J5TW9kZXNdOwogI2VuZGlmCiAgICAgc3RkOjp1bmlxdWVfcHRyPEZ1bmN0aW9u
Q29kZUJsb2NrPiBtX2NvZGVCbG9jazsKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8V2FzbUVu
dHJ5UHRyVGFnPiBtX2VudHJ5cG9pbnQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtQ2FsbGVlR3JvdXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtQ2FsbGVlR3JvdXAuaAkocmV2aXNpb24gMjg3MzM5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbUNhbGxlZUdyb3VwLmgJKHdvcmtpbmcgY29weSkKQEAgLTE2Myw3
ICsxNjMsNyBAQCBwcml2YXRlOgogI2lmIEVOQUJMRShXRUJBU1NFTUJMWV9CM0pJVCkKICAgICBm
cmllbmQgY2xhc3MgQkJRUGxhbjsKICAgICBmcmllbmQgY2xhc3MgT01HUGxhbjsKLSAgICBmcmll
bmQgY2xhc3MgT01HRm9yT1NSRW50cnlQbGFuOworICAgIGZyaWVuZCBjbGFzcyBPU1JFbnRyeVBs
YW47CiAjZW5kaWYKIAogICAgIENhbGxlZUdyb3VwKENvbnRleHQqLCBNZW1vcnlNb2RlLCBNb2R1
bGVJbmZvcm1hdGlvbiYsIFJlZlB0cjxMTEludENhbGxlZXM+KTsKQEAgLTE4Myw2ICsxODMsNyBA
QCBwcml2YXRlOgogICAgIFJlZlB0cjxFbnRyeVBsYW4+IG1fcGxhbjsKICAgICBzdGQ6OmF0b21p
Yzxib29sPiBtX2NvbXBpbGF0aW9uRmluaXNoZWQgeyBmYWxzZSB9OwogICAgIFN0cmluZyBtX2Vy
cm9yTWVzc2FnZTsKK3B1YmxpYzoKICAgICBMb2NrIG1fbG9jazsKIH07CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Db21waWxhdGlvbk1vZGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Db21waWxhdGlvbk1vZGUuY3BwCShy
ZXZpc2lvbiAyODczMzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ29tcGls
YXRpb25Nb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsNiArMzgsOCBAQCBjb25zdCBjaGFy
KiBtYWtlU3RyaW5nKENvbXBpbGF0aW9uTW9kZSBtCiAgICAgICAgIHJldHVybiAiTExJbnQiOwog
ICAgIGNhc2UgQ29tcGlsYXRpb25Nb2RlOjpCQlFNb2RlOgogICAgICAgICByZXR1cm4gIkJCUSI7
CisgICAgY2FzZSBDb21waWxhdGlvbk1vZGU6OkJCUUZvck9TUkVudHJ5TW9kZToKKyAgICAgICAg
cmV0dXJuICJCQlFGb3JPU1JFbnRyeSI7CiAgICAgY2FzZSBDb21waWxhdGlvbk1vZGU6Ok9NR01v
ZGU6CiAgICAgICAgIHJldHVybiAiT01HIjsKICAgICBjYXNlIENvbXBpbGF0aW9uTW9kZTo6T01H
Rm9yT1NSRW50cnlNb2RlOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNv
bXBpbGF0aW9uTW9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21Db21waWxhdGlvbk1vZGUuaAkocmV2aXNpb24gMjg3MzM5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbUNvbXBpbGF0aW9uTW9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
MCw2ICszMCw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CiBlbnVtIGNsYXNz
IENvbXBpbGF0aW9uTW9kZSA6IHVpbnQ4X3QgewogICAgIExMSW50TW9kZSwKICAgICBCQlFNb2Rl
LAorICAgIEJCUUZvck9TUkVudHJ5TW9kZSwKICAgICBPTUdNb2RlLAogICAgIE9NR0Zvck9TUkVu
dHJ5TW9kZSwKICAgICBFbWJlZGRlckVudHJ5cG9pbnRNb2RlLApAQCAtMzcsNCArMzgsNDYgQEAg
ZW51bSBjbGFzcyBDb21waWxhdGlvbk1vZGUgOiB1aW50OF90IHsKIAogY29uc3QgY2hhciogbWFr
ZVN0cmluZyhDb21waWxhdGlvbk1vZGUpOwogCitjb25zdGV4cHIgaW5saW5lIGJvb2wgaXNPU1JF
bnRyeShDb21waWxhdGlvbk1vZGUgY29tcGlsYXRpb25Nb2RlKQoreworICAgIHN3aXRjaCAoY29t
cGlsYXRpb25Nb2RlKSB7CisgICAgY2FzZSBDb21waWxhdGlvbk1vZGU6OkxMSW50TW9kZToKKyAg
ICBjYXNlIENvbXBpbGF0aW9uTW9kZTo6QkJRTW9kZToKKyAgICBjYXNlIENvbXBpbGF0aW9uTW9k
ZTo6T01HTW9kZToKKyAgICBjYXNlIENvbXBpbGF0aW9uTW9kZTo6RW1iZWRkZXJFbnRyeXBvaW50
TW9kZToKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGNhc2UgQ29tcGlsYXRpb25Nb2RlOjpC
QlFGb3JPU1JFbnRyeU1vZGU6CisgICAgY2FzZSBDb21waWxhdGlvbk1vZGU6Ok9NR0Zvck9TUkVu
dHJ5TW9kZToKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorfQorCitjb25zdGV4cHIgaW5s
aW5lIGJvb2wgaXNBbnlCQlEoQ29tcGlsYXRpb25Nb2RlIGNvbXBpbGF0aW9uTW9kZSkKK3sKKyAg
ICBzd2l0Y2ggKGNvbXBpbGF0aW9uTW9kZSkgeworICAgIGNhc2UgQ29tcGlsYXRpb25Nb2RlOjpC
QlFNb2RlOgorICAgIGNhc2UgQ29tcGlsYXRpb25Nb2RlOjpCQlFGb3JPU1JFbnRyeU1vZGU6Cisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIGNhc2UgQ29tcGlsYXRpb25Nb2RlOjpPTUdGb3JPU1JF
bnRyeU1vZGU6CisgICAgY2FzZSBDb21waWxhdGlvbk1vZGU6OkxMSW50TW9kZToKKyAgICBjYXNl
IENvbXBpbGF0aW9uTW9kZTo6T01HTW9kZToKKyAgICBjYXNlIENvbXBpbGF0aW9uTW9kZTo6RW1i
ZWRkZXJFbnRyeXBvaW50TW9kZToKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKwor
Y29uc3RleHByIGlubGluZSBib29sIGlzQW55T01HKENvbXBpbGF0aW9uTW9kZSBjb21waWxhdGlv
bk1vZGUpCit7CisgICAgc3dpdGNoIChjb21waWxhdGlvbk1vZGUpIHsKKyAgICBjYXNlIENvbXBp
bGF0aW9uTW9kZTo6T01HTW9kZToKKyAgICBjYXNlIENvbXBpbGF0aW9uTW9kZTo6T01HRm9yT1NS
RW50cnlNb2RlOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBjYXNlIENvbXBpbGF0aW9uTW9k
ZTo6QkJRTW9kZToKKyAgICBjYXNlIENvbXBpbGF0aW9uTW9kZTo6QkJRRm9yT1NSRW50cnlNb2Rl
OgorICAgIGNhc2UgQ29tcGlsYXRpb25Nb2RlOjpMTEludE1vZGU6CisgICAgY2FzZSBDb21waWxh
dGlvbk1vZGU6OkVtYmVkZGVyRW50cnlwb2ludE1vZGU6CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9Cit9CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtRm9ybWF0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbUZvcm1hdC5oCShyZXZpc2lvbiAyODczMzkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRm9ybWF0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0Mywx
MCArNDQzLDExIEBAIHN0cnVjdCBFbnRyeXBvaW50IHsKIAogc3RydWN0IEludGVybmFsRnVuY3Rp
b24gewogICAgIFdURl9NQUtFX1NUUlVDVF9GQVNUX0FMTE9DQVRFRDsKLSAgICBDb2RlTG9jYXRp
b25EYXRhTGFiZWxQdHI8V2FzbUVudHJ5UHRyVGFnPiBjYWxsZWVNb3ZlTG9jYXRpb247CisgICAg
VmVjdG9yPENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0cjxXYXNtRW50cnlQdHJUYWc+PiBjYWxsZWVN
b3ZlTG9jYXRpb25zOwogICAgIFN0YWNrTWFwcyBzdGFja21hcHM7CiAgICAgVmVjdG9yPFVubGlu
a2VkSGFuZGxlckluZm8+IGV4Y2VwdGlvbkhhbmRsZXJzOwogICAgIEVudHJ5cG9pbnQgZW50cnlw
b2ludDsKKyAgICB1bnNpZ25lZCBvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplIHsgMCB9OwogfTsK
IAogLy8gV2ViQXNzZW1ibHkgZGlyZWN0IGNhbGxzIGFuZCBjYWxsX2luZGlyZWN0IHVzZSBpbmRp
Y2VzIGludG8gImZ1bmN0aW9uIGluZGV4IHNwYWNlIi4gVGhpcyBzcGFjZSBzdGFydHMKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21MTEludFBsYW4uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21MTEludFBsYW4uY3BwCShyZXZpc2lv
biAyODczMzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJbnRQbGFuLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTY4LDggKzE2OCw4IEBAIHZvaWQgTExJbnRQbGFuOjpkaWRD
b21wbGV0ZUNvbXBpbGF0aW9uKCkKICAgICAgICAgICAgIFJlZjxFbWJlZGRlckVudHJ5cG9pbnRD
YWxsZWU+IGNhbGxlZSA9IEVtYmVkZGVyRW50cnlwb2ludENhbGxlZTo6Y3JlYXRlKFdURk1vdmUo
ZnVuY3Rpb24tPmVudHJ5cG9pbnQpKTsKICAgICAgICAgICAgIC8vIEZJWE1FOiByZW1vdmUgdGhp
cyByZXBhdGNoUG9pbnRlciAtIGp1c3QgcGFzcyBpbiB0aGUgY2FsbGVlIGRpcmVjdGx5CiAgICAg
ICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY2NDYy
Ci0gICAgICAgICAgICBpZiAoZnVuY3Rpb24tPmNhbGxlZU1vdmVMb2NhdGlvbikKLSAgICAgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaFBvaW50ZXIoZnVuY3Rpb24tPmNhbGxlZU1v
dmVMb2NhdGlvbiwgQ2FsbGVlQml0czo6Ym94V2FzbShjYWxsZWUucHRyKCkpKTsKKyAgICAgICAg
ICAgIGZvciAoYXV0byYgbW92ZUxvY2F0aW9uIDogZnVuY3Rpb24tPmNhbGxlZU1vdmVMb2NhdGlv
bnMpCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hQb2ludGVyKG1vdmVM
b2NhdGlvbiwgQ2FsbGVlQml0czo6Ym94V2FzbShjYWxsZWUucHRyKCkpKTsKIAogICAgICAgICAg
ICAgYXV0byByZXN1bHQgPSBtX2VtYmVkZGVyQ2FsbGVlcy5hZGQoZnVuY3Rpb25JbmRleCwgV1RG
TW92ZShjYWxsZWUpKTsKICAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQocmVzdWx0LCByZXN1bHQu
aXNOZXdFbnRyeSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT01HRm9y
T1NSRW50cnlQbGFuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtT01HRm9yT1NSRW50cnlQbGFuLmNwcAkocmV2aXNpb24gMjg3MzM5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9NR0Zvck9TUkVudHJ5UGxhbi5jcHAJKG5vbmV4aXN0
ZW50KQpAQCAtMSwxNTIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOS0yMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIldhc21PTUdG
b3JPU1JFbnRyeVBsYW4uaCIKLQotI2lmIEVOQUJMRShXRUJBU1NFTUJMWV9CM0pJVCkKLQotI2lu
Y2x1ZGUgIkpJVENvbXBpbGF0aW9uLmgiCi0jaW5jbHVkZSAiTGlua0J1ZmZlci5oIgotI2luY2x1
ZGUgIldhc21CM0lSR2VuZXJhdG9yLmgiCi0jaW5jbHVkZSAiV2FzbUNhbGxlZS5oIgotI2luY2x1
ZGUgIldhc21NYWNoaW5lVGhyZWFkcy5oIgotI2luY2x1ZGUgIldhc21OYW1lU2VjdGlvbi5oIgot
I2luY2x1ZGUgIldhc21TaWduYXR1cmVJbmxpbmVzLmgiCi0jaW5jbHVkZSA8d3RmL0RhdGFMb2cu
aD4KLSNpbmNsdWRlIDx3dGYvTG9ja2VyLmg+Ci0jaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5o
PgotCi1uYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewotCi1uYW1lc3BhY2UgV2FzbU9N
R0Zvck9TUkVudHJ5UGxhbkludGVybmFsIHsKLXN0YXRpYyBjb25zdGV4cHIgYm9vbCB2ZXJib3Nl
ID0gZmFsc2U7Ci19Ci0KLU9NR0Zvck9TUkVudHJ5UGxhbjo6T01HRm9yT1NSRW50cnlQbGFuKENv
bnRleHQqIGNvbnRleHQsIFJlZjxNb2R1bGU+JiYgbW9kdWxlLCBSZWY8Q2FsbGVlPiYmIGNhbGxl
ZSwgdWludDMyX3QgZnVuY3Rpb25JbmRleCwgdWludDMyX3QgbG9vcEluZGV4LCBNZW1vcnlNb2Rl
IG1vZGUsIENvbXBsZXRpb25UYXNrJiYgdGFzaykKLSAgICA6IEJhc2UoY29udGV4dCwgY29uc3Rf
Y2FzdDxNb2R1bGVJbmZvcm1hdGlvbiY+KG1vZHVsZS0+bW9kdWxlSW5mb3JtYXRpb24oKSksIFdU
Rk1vdmUodGFzaykpCi0gICAgLCBtX21vZHVsZShXVEZNb3ZlKG1vZHVsZSkpCi0gICAgLCBtX2Nh
bGxlZUdyb3VwKCptX21vZHVsZS0+Y2FsbGVlR3JvdXBGb3IobW9kZSkpCi0gICAgLCBtX2NhbGxl
ZShXVEZNb3ZlKGNhbGxlZSkpCi0gICAgLCBtX2Z1bmN0aW9uSW5kZXgoZnVuY3Rpb25JbmRleCkK
LSAgICAsIG1fbG9vcEluZGV4KGxvb3BJbmRleCkKLXsKLSAgICBBU1NFUlQoT3B0aW9uczo6dXNl
T01HSklUKCkpOwotICAgIHNldE1vZGUobW9kZSk7Ci0gICAgQVNTRVJUKG1fY2FsbGVlR3JvdXAt
PnJ1bm5hYmxlKCkpOwotICAgIEFTU0VSVChtX2NhbGxlZUdyb3VwLnB0cigpID09IG1fbW9kdWxl
LT5jYWxsZWVHcm91cEZvcihtX21vZGUpKTsKLSAgICBkYXRhTG9nTG5JZihXYXNtT01HRm9yT1NS
RW50cnlQbGFuSW50ZXJuYWw6OnZlcmJvc2UsICJTdGFydGluZyBPTUdGb3JPU1JFbnRyeSBwbGFu
IGZvciAiLCBmdW5jdGlvbkluZGV4LCAiIG9mIG1vZHVsZTogIiwgUmF3UG9pbnRlcigmbV9tb2R1
bGUuZ2V0KCkpKTsKLX0KLQotdm9pZCBPTUdGb3JPU1JFbnRyeVBsYW46OndvcmsoQ29tcGlsYXRp
b25FZmZvcnQpCi17Ci0gICAgQVNTRVJUKG1fY2FsbGVlR3JvdXAtPnJ1bm5hYmxlKCkpOwotICAg
IEFTU0VSVChtX2NhbGxlZUdyb3VwLnB0cigpID09IG1fbW9kdWxlLT5jYWxsZWVHcm91cEZvciht
b2RlKCkpKTsKLSAgICBjb25zdCBGdW5jdGlvbkRhdGEmIGZ1bmN0aW9uID0gbV9tb2R1bGVJbmZv
cm1hdGlvbi0+ZnVuY3Rpb25zW21fZnVuY3Rpb25JbmRleF07Ci0KLSAgICBjb25zdCB1aW50MzJf
dCBmdW5jdGlvbkluZGV4U3BhY2UgPSBtX2Z1bmN0aW9uSW5kZXggKyBtX21vZHVsZS0+bW9kdWxl
SW5mb3JtYXRpb24oKS5pbXBvcnRGdW5jdGlvbkNvdW50KCk7Ci0gICAgQVNTRVJUKGZ1bmN0aW9u
SW5kZXhTcGFjZSA8IG1fbW9kdWxlLT5tb2R1bGVJbmZvcm1hdGlvbigpLmZ1bmN0aW9uSW5kZXhT
cGFjZVNpemUoKSk7Ci0KLSAgICBTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCA9IG1fbW9k
dWxlSW5mb3JtYXRpb24tPmludGVybmFsRnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzW21fZnVuY3Rp
b25JbmRleF07Ci0gICAgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUgPSBTaWduYXR1cmVJbmZv
cm1hdGlvbjo6Z2V0KHNpZ25hdHVyZUluZGV4KTsKLQotICAgIFZlY3RvcjxVbmxpbmtlZFdhc21U
b1dhc21DYWxsPiB1bmxpbmtlZENhbGxzOwotICAgIENvbXBpbGF0aW9uQ29udGV4dCBjb250ZXh0
OwotICAgIHVuc2lnbmVkIG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUgPSAwOwotICAgIGF1dG8g
cGFyc2VBbmRDb21waWxlUmVzdWx0ID0gcGFyc2VBbmRDb21waWxlKGNvbnRleHQsIGZ1bmN0aW9u
LCBzaWduYXR1cmUsIHVubGlua2VkQ2FsbHMsIG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUsIG1f
bW9kdWxlSW5mb3JtYXRpb24uZ2V0KCksIG1fbW9kZSwgQ29tcGlsYXRpb25Nb2RlOjpPTUdGb3JP
U1JFbnRyeU1vZGUsIG1fZnVuY3Rpb25JbmRleCwgbV9sb29wSW5kZXgpOwotCi0gICAgaWYgKFVO
TElLRUxZKCFwYXJzZUFuZENvbXBpbGVSZXN1bHQpKSB7Ci0gICAgICAgIExvY2tlciBsb2NrZXIg
eyBtX2xvY2sgfTsKLSAgICAgICAgZmFpbChtYWtlU3RyaW5nKHBhcnNlQW5kQ29tcGlsZVJlc3Vs
dC5lcnJvcigpLCAid2hlbiB0cnlpbmcgdG8gdGllciB1cCAiLCBTdHJpbmc6Om51bWJlcihtX2Z1
bmN0aW9uSW5kZXgpKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBFbnRyeXBvaW50
IG9tZ0VudHJ5cG9pbnQ7Ci0gICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKCpjb250ZXh0Lndhc21F
bnRyeXBvaW50SklULCBudWxscHRyLCBMaW5rQnVmZmVyOjpQcm9maWxlOjpXYXNtLCBKSVRDb21w
aWxhdGlvbkNhbkZhaWwpOwotICAgIGlmIChVTkxJS0VMWShsaW5rQnVmZmVyLmRpZEZhaWxUb0Fs
bG9jYXRlKCkpKSB7Ci0gICAgICAgIExvY2tlciBsb2NrZXIgeyBtX2xvY2sgfTsKLSAgICAgICAg
QmFzZTo6ZmFpbChtYWtlU3RyaW5nKCJPdXQgb2YgZXhlY3V0YWJsZSBtZW1vcnkgd2hpbGUgdGll
cmluZyB1cCBmdW5jdGlvbiBhdCBpbmRleCAiLCBTdHJpbmc6Om51bWJlcihtX2Z1bmN0aW9uSW5k
ZXgpKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBJbnRlcm5hbEZ1bmN0aW9uKiBp
bnRlcm5hbEZ1bmN0aW9uID0gcGFyc2VBbmRDb21waWxlUmVzdWx0LT5nZXQoKTsKLSAgICBWZWN0
b3I8Q29kZUxvY2F0aW9uTGFiZWw8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4+IGV4Y2VwdGlvbkhh
bmRsZXJMb2NhdGlvbnM7Ci0gICAgY29tcHV0ZUV4Y2VwdGlvbkhhbmRsZXJMb2NhdGlvbnMoZXhj
ZXB0aW9uSGFuZGxlckxvY2F0aW9ucywgaW50ZXJuYWxGdW5jdGlvbiwgY29udGV4dCwgbGlua0J1
ZmZlcik7Ci0KLSAgICBvbWdFbnRyeXBvaW50LmNvbXBpbGF0aW9uID0gbWFrZVVuaXF1ZTxDb21w
aWxhdGlvbj4oCi0gICAgICAgIEZJTkFMSVpFX0NPREVfSUYoY29udGV4dC5wcm9jZWR1cmUtPnNo
b3VsZER1bXBJUigpIHx8IHNob3VsZER1bXBEaXNhc3NlbWJseUZvcihDb21waWxhdGlvbk1vZGU6
Ok9NR0Zvck9TUkVudHJ5TW9kZSksIGxpbmtCdWZmZXIsIEpJVENvbXBpbGF0aW9uUHRyVGFnLCAi
V2ViQXNzZW1ibHkgT01HRm9yT1NSRW50cnkgZnVuY3Rpb25bJWldICVzIG5hbWUgJXMiLCBtX2Z1
bmN0aW9uSW5kZXgsIHNpZ25hdHVyZS50b1N0cmluZygpLmFzY2lpKCkuZGF0YSgpLCBtYWtlU3Ry
aW5nKEluZGV4T3JOYW1lKGZ1bmN0aW9uSW5kZXhTcGFjZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi0+
bmFtZVNlY3Rpb24tPmdldChmdW5jdGlvbkluZGV4U3BhY2UpKSkuYXNjaWkoKS5kYXRhKCkpLAot
ICAgICAgICBXVEZNb3ZlKGNvbnRleHQud2FzbUVudHJ5cG9pbnRCeXByb2R1Y3RzKSk7Ci0KLSAg
ICBvbWdFbnRyeXBvaW50LmNhbGxlZVNhdmVSZWdpc3RlcnMgPSBXVEZNb3ZlKGludGVybmFsRnVu
Y3Rpb24tPmVudHJ5cG9pbnQuY2FsbGVlU2F2ZVJlZ2lzdGVycyk7Ci0KLSAgICBBU1NFUlQobV9j
YWxsZWVHcm91cC5wdHIoKSA9PSBtX21vZHVsZS0+Y2FsbGVlR3JvdXBGb3IobW9kZSgpKSk7Ci0g
ICAgUmVmPE9NR0Zvck9TUkVudHJ5Q2FsbGVlPiBjYWxsZWUgPSBPTUdGb3JPU1JFbnRyeUNhbGxl
ZTo6Y3JlYXRlKFdURk1vdmUob21nRW50cnlwb2ludCksIGZ1bmN0aW9uSW5kZXhTcGFjZSwgbV9t
b2R1bGVJbmZvcm1hdGlvbi0+bmFtZVNlY3Rpb24tPmdldChmdW5jdGlvbkluZGV4U3BhY2UpLCBv
c3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplLCBtX2xvb3BJbmRleCwgV1RGTW92ZSh1bmxpbmtlZENh
bGxzKSwgV1RGTW92ZShpbnRlcm5hbEZ1bmN0aW9uLT5zdGFja21hcHMpLCBXVEZNb3ZlKGludGVy
bmFsRnVuY3Rpb24tPmV4Y2VwdGlvbkhhbmRsZXJzKSwgV1RGTW92ZShleGNlcHRpb25IYW5kbGVy
TG9jYXRpb25zKSk7Ci0gICAgewotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaFBvaW50
ZXIoaW50ZXJuYWxGdW5jdGlvbi0+Y2FsbGVlTW92ZUxvY2F0aW9uLCBDYWxsZWVCaXRzOjpib3hX
YXNtKGNhbGxlZS5wdHIoKSkpOwotCi0gICAgICAgIExvY2tlciBsb2NrZXIgeyBtX2NhbGxlZUdy
b3VwLT5tX2xvY2sgfTsKLSAgICAgICAgZm9yIChhdXRvJiBjYWxsIDogY2FsbGVlLT53YXNtVG9X
YXNtQ2FsbHNpdGVzKCkpIHsKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxXYXNt
RW50cnlQdHJUYWc+IGVudHJ5cG9pbnQ7Ci0gICAgICAgICAgICBpZiAoY2FsbC5mdW5jdGlvbklu
ZGV4U3BhY2UgPCBtX21vZHVsZS0+bW9kdWxlSW5mb3JtYXRpb24oKS5pbXBvcnRGdW5jdGlvbkNv
dW50KCkpCi0gICAgICAgICAgICAgICAgZW50cnlwb2ludCA9IG1fY2FsbGVlR3JvdXAtPm1fd2Fz
bVRvV2FzbUV4aXRTdHVic1tjYWxsLmZ1bmN0aW9uSW5kZXhTcGFjZV0uY29kZSgpOwotICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGVudHJ5cG9pbnQgPSBtX2NhbGxlZUdyb3VwLT53
YXNtRW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2UobG9ja2VyLCBjYWxsLmZ1
bmN0aW9uSW5kZXhTcGFjZSkuZW50cnlwb2ludCgpLnJldGFnZ2VkPFdhc21FbnRyeVB0clRhZz4o
KTsKLQotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hOZWFyQ2FsbChjYWxsLmNh
bGxMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWw8V2FzbUVudHJ5UHRyVGFnPihlbnRyeXBvaW50
KSk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXNldEluc3RydWN0aW9uQ2FjaGVPbkFsbFRocmVh
ZHMoKTsKLSAgICAgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKLQotICAgICAgICB7Ci0gICAg
ICAgICAgICBzd2l0Y2ggKG1fY2FsbGVlLT5jb21waWxhdGlvbk1vZGUoKSkgewotICAgICAgICAg
ICAgY2FzZSBDb21waWxhdGlvbk1vZGU6OkxMSW50TW9kZTogewotICAgICAgICAgICAgICAgIExM
SW50Q2FsbGVlKiBsbGludENhbGxlZSA9IHN0YXRpY19jYXN0PExMSW50Q2FsbGVlKj4obV9jYWxs
ZWUucHRyKCkpOwotICAgICAgICAgICAgICAgIExvY2tlciBsb2NrZXIgeyBsbGludENhbGxlZS0+
dGllclVwQ291bnRlcigpLm1fbG9jayB9OwotICAgICAgICAgICAgICAgIGxsaW50Q2FsbGVlLT5z
ZXRPU1JFbnRyeUNhbGxlZShjYWxsZWUuY29weVJlZigpLCBtb2RlKCkpOwotICAgICAgICAgICAg
ICAgIGxsaW50Q2FsbGVlLT50aWVyVXBDb3VudGVyKCkubV9sb29wQ29tcGlsYXRpb25TdGF0dXMg
PSBMTEludFRpZXJVcENvdW50ZXI6OkNvbXBpbGF0aW9uU3RhdHVzOjpDb21waWxlZDsKLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhc2UgQ29tcGls
YXRpb25Nb2RlOjpCQlFNb2RlOiB7Ci0gICAgICAgICAgICAgICAgQkJRQ2FsbGVlKiBiYnFDYWxs
ZWUgPSBzdGF0aWNfY2FzdDxCQlFDYWxsZWUqPihtX2NhbGxlZS5wdHIoKSk7Ci0gICAgICAgICAg
ICAgICAgTG9ja2VyIGxvY2tlciB7IGJicUNhbGxlZS0+dGllclVwQ291bnQoKS0+Z2V0TG9jaygp
IH07Ci0gICAgICAgICAgICAgICAgYmJxQ2FsbGVlLT5zZXRPU1JFbnRyeUNhbGxlZShjYWxsZWUu
Y29weVJlZigpLCBtb2RlKCkpOwotICAgICAgICAgICAgICAgIGJicUNhbGxlZS0+dGllclVwQ291
bnQoKS0+b3NyRW50cnlUcmlnZ2VycygpW21fbG9vcEluZGV4XSA9IFRpZXJVcENvdW50OjpUcmln
Z2VyUmVhc29uOjpDb21waWxhdGlvbkRvbmU7Ci0gICAgICAgICAgICAgICAgYmJxQ2FsbGVlLT50
aWVyVXBDb3VudCgpLT5tX2NvbXBpbGF0aW9uU3RhdHVzRm9yT01HRm9yT1NSRW50cnkgPSBUaWVy
VXBDb3VudDo6Q29tcGlsYXRpb25TdGF0dXM6OkNvbXBpbGVkOwotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0gICAgfQotICAgIGRhdGFMb2dMbklmKFdhc21PTUdGb3JPU1JFbnRyeVBsYW5JbnRlcm5hbDo6
dmVyYm9zZSwgIkZpbmlzaGVkIE9NR0Zvck9TUkVudHJ5ICIsIG1fZnVuY3Rpb25JbmRleCk7Ci0g
ICAgTG9ja2VyIGxvY2tlciB7IG1fbG9jayB9OwotICAgIGNvbXBsZXRlKCk7Ci19Ci0KLX0gfSAv
LyBuYW1lc3BhY2UgSlNDOjpXYXNtCi0KLSNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFlfQjNK
SVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT01HRm9yT1NSRW50cnlQ
bGFuLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9NR0Zv
ck9TUkVudHJ5UGxhbi5oCShyZXZpc2lvbiAyODczMzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtT01HRm9yT1NSRW50cnlQbGFuLmgJKG5vbmV4aXN0ZW50KQpAQCAtMSw3NCAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
Ci0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3By
YWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoV0VCQVNTRU1CTFlfQjNKSVQpCi0KLSNpbmNsdWRlICJX
YXNtQ2FsbGVlLmgiCi0jaW5jbHVkZSAiV2FzbUNvbnRleHQuaCIKLSNpbmNsdWRlICJXYXNtTW9k
dWxlLmgiCi0jaW5jbHVkZSAiV2FzbU9wZXJhdGlvbnMuaCIKLSNpbmNsdWRlICJXYXNtUGxhbi5o
IgotCi1uYW1lc3BhY2UgSlNDIHsKLQotY2xhc3MgQ2FsbExpbmtJbmZvOwotCi1uYW1lc3BhY2Ug
V2FzbSB7Ci0KLWNsYXNzIE9NR0Zvck9TUkVudHJ5UGxhbiBmaW5hbCA6IHB1YmxpYyBQbGFuIHsK
LXB1YmxpYzoKLSAgICB1c2luZyBCYXNlID0gUGxhbjsKLQotICAgIGJvb2wgaGFzV29yaygpIGNv
bnN0IGZpbmFsIHsgcmV0dXJuICFtX2NvbXBsZXRlZDsgfQotICAgIHZvaWQgd29yayhDb21waWxh
dGlvbkVmZm9ydCkgZmluYWw7Ci0gICAgYm9vbCBtdWx0aVRocmVhZGVkKCkgY29uc3QgZmluYWwg
eyByZXR1cm4gZmFsc2U7IH0KLQotICAgIC8vIE5vdGU6IENvbXBsZXRpb25UYXNrIHNob3VsZCBu
b3QgaG9sZCBhIHJlZmVyZW5jZSB0byB0aGUgUGxhbiBvdGhlcndpc2UgdGhlcmUgd2lsbCBiZSBh
IHJlZmVyZW5jZSBjeWNsZS4KLSAgICBPTUdGb3JPU1JFbnRyeVBsYW4oQ29udGV4dCosIFJlZjxN
b2R1bGU+JiYsIFJlZjxDYWxsZWU+JiYsIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIHVpbnQzMl90
IGxvb3BJbmRleCwgTWVtb3J5TW9kZSwgQ29tcGxldGlvblRhc2smJik7Ci0KLXByaXZhdGU6Ci0g
ICAgLy8gRm9yIHNvbWUgcmVhc29uIGZyaWVuZHNoaXAgZG9lc24ndCBleHRlbmQgdG8gcGFyZW50
IGNsYXNzZXMuLi4KLSAgICB1c2luZyBCYXNlOjptX2xvY2s7Ci0KLSAgICBib29sIGlzQ29tcGxl
dGUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2NvbXBsZXRlZDsgfQotICAgIHZvaWQgY29tcGxl
dGUoKSBXVEZfUkVRVUlSRVNfTE9DSyhtX2xvY2spIGZpbmFsCi0gICAgewotICAgICAgICBtX2Nv
bXBsZXRlZCA9IHRydWU7Ci0gICAgICAgIHJ1bkNvbXBsZXRpb25UYXNrcygpOwotICAgIH0KLQot
ICAgIFJlZjxNb2R1bGU+IG1fbW9kdWxlOwotICAgIFJlZjxDYWxsZWVHcm91cD4gbV9jYWxsZWVH
cm91cDsKLSAgICBSZWY8Q2FsbGVlPiBtX2NhbGxlZTsKLSAgICBib29sIG1fY29tcGxldGVkIHsg
ZmFsc2UgfTsKLSAgICB1aW50MzJfdCBtX2Z1bmN0aW9uSW5kZXg7Ci0gICAgdWludDMyX3QgbV9s
b29wSW5kZXg7Ci19OwotCi19IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQotCi0jZW5kaWYgLy8g
RU5BQkxFKFdFQkFTU0VNQkxZX0IzSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbU9NR1BsYW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21PTUdQbGFuLmNwcAkocmV2aXNpb24gMjg3MzM5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbU9NR1BsYW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MSw5ICs3MSw4
IEBAIHZvaWQgT01HUGxhbjo6d29yayhDb21waWxhdGlvbkVmZm9ydCkKICAgICBjb25zdCBTaWdu
YXR1cmUmIHNpZ25hdHVyZSA9IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoc2lnbmF0dXJlSW5k
ZXgpOwogCiAgICAgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+IHVubGlua2VkQ2FsbHM7
Ci0gICAgdW5zaWduZWQgb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZTsKICAgICBDb21waWxhdGlv
bkNvbnRleHQgY29udGV4dDsKLSAgICBhdXRvIHBhcnNlQW5kQ29tcGlsZVJlc3VsdCA9IHBhcnNl
QW5kQ29tcGlsZShjb250ZXh0LCBmdW5jdGlvbiwgc2lnbmF0dXJlLCB1bmxpbmtlZENhbGxzLCBv
c3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplLCBtX21vZHVsZUluZm9ybWF0aW9uLmdldCgpLCBtX21v
ZGUsIENvbXBpbGF0aW9uTW9kZTo6T01HTW9kZSwgbV9mdW5jdGlvbkluZGV4LCBVSU5UMzJfTUFY
KTsKKyAgICBhdXRvIHBhcnNlQW5kQ29tcGlsZVJlc3VsdCA9IHBhcnNlQW5kQ29tcGlsZShjb250
ZXh0LCBmdW5jdGlvbiwgc2lnbmF0dXJlLCB1bmxpbmtlZENhbGxzLCBtX21vZHVsZUluZm9ybWF0
aW9uLmdldCgpLCBtX21vZGUsIENvbXBpbGF0aW9uTW9kZTo6T01HTW9kZSwgbV9mdW5jdGlvbklu
ZGV4LCBVSU5UMzJfTUFYKTsKIAogICAgIGlmIChVTkxJS0VMWSghcGFyc2VBbmRDb21waWxlUmVz
dWx0KSkgewogICAgICAgICBMb2NrZXIgbG9ja2VyIHsgbV9sb2NrIH07CkBAIC0xMDUsNyArMTA0
LDggQEAgdm9pZCBPTUdQbGFuOjp3b3JrKENvbXBpbGF0aW9uRWZmb3J0KQogICAgIHsKICAgICAg
ICAgQVNTRVJUKG1fY2FsbGVlR3JvdXAucHRyKCkgPT0gbV9tb2R1bGUtPmNhbGxlZUdyb3VwRm9y
KG1vZGUoKSkpOwogICAgICAgICBSZWY8T01HQ2FsbGVlPiBjYWxsZWUgPSBPTUdDYWxsZWU6OmNy
ZWF0ZShXVEZNb3ZlKG9tZ0VudHJ5cG9pbnQpLCBmdW5jdGlvbkluZGV4U3BhY2UsIG1fbW9kdWxl
SW5mb3JtYXRpb24tPm5hbWVTZWN0aW9uLT5nZXQoZnVuY3Rpb25JbmRleFNwYWNlKSwgV1RGTW92
ZSh1bmxpbmtlZENhbGxzKSwgV1RGTW92ZShpbnRlcm5hbEZ1bmN0aW9uLT5zdGFja21hcHMpLCBX
VEZNb3ZlKGludGVybmFsRnVuY3Rpb24tPmV4Y2VwdGlvbkhhbmRsZXJzKSwgV1RGTW92ZShleGNl
cHRpb25IYW5kbGVyTG9jYXRpb25zKSk7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNo
UG9pbnRlcihpbnRlcm5hbEZ1bmN0aW9uLT5jYWxsZWVNb3ZlTG9jYXRpb24sIENhbGxlZUJpdHM6
OmJveFdhc20oY2FsbGVlLnB0cigpKSk7CisgICAgICAgIGZvciAoYXV0byYgbW92ZUxvY2F0aW9u
IDogaW50ZXJuYWxGdW5jdGlvbi0+Y2FsbGVlTW92ZUxvY2F0aW9ucykKKyAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpyZXBhdGNoUG9pbnRlcihtb3ZlTG9jYXRpb24sIENhbGxlZUJpdHM6OmJv
eFdhc20oY2FsbGVlLnB0cigpKSk7CiAgICAgICAgIGVudHJ5cG9pbnQgPSBjYWxsZWUtPmVudHJ5
cG9pbnQoKTsKIAogICAgICAgICBpZiAoY29udGV4dC5wY1RvQ29kZU9yaWdpbk1hcCkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PU1JFbnRyeVBsYW4uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PU1JFbnRyeVBsYW4uY3BwCShy
ZXZpc2lvbiAyODczMzkpCShmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PTUdG
b3JPU1JFbnRyeVBsYW4uY3BwOjI4NzMzOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21PU1JFbnRyeVBsYW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTUyIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE5LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2FzbU9NR0Zvck9TUkVudHJ5UGxhbi5oIgorCisjaWYg
RU5BQkxFKFdFQkFTU0VNQkxZX0IzSklUKQorCisjaW5jbHVkZSAiSklUQ29tcGlsYXRpb24uaCIK
KyNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCisjaW5jbHVkZSAiV2FzbUIzSVJHZW5lcmF0b3IuaCIK
KyNpbmNsdWRlICJXYXNtQ2FsbGVlLmgiCisjaW5jbHVkZSAiV2FzbU1hY2hpbmVUaHJlYWRzLmgi
CisjaW5jbHVkZSAiV2FzbU5hbWVTZWN0aW9uLmgiCisjaW5jbHVkZSAiV2FzbVNpZ25hdHVyZUlu
bGluZXMuaCIKKyNpbmNsdWRlIDx3dGYvRGF0YUxvZy5oPgorI2luY2x1ZGUgPHd0Zi9Mb2NrZXIu
aD4KKyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgV2FzbSB7CisKK25hbWVzcGFjZSBXYXNtT01HRm9yT1NSRW50cnlQbGFuSW50ZXJuYWwg
eworc3RhdGljIGNvbnN0ZXhwciBib29sIHZlcmJvc2UgPSBmYWxzZTsKK30KKworT01HRm9yT1NS
RW50cnlQbGFuOjpPTUdGb3JPU1JFbnRyeVBsYW4oQ29udGV4dCogY29udGV4dCwgUmVmPE1vZHVs
ZT4mJiBtb2R1bGUsIFJlZjxDYWxsZWU+JiYgY2FsbGVlLCB1aW50MzJfdCBmdW5jdGlvbkluZGV4
LCB1aW50MzJfdCBsb29wSW5kZXgsIE1lbW9yeU1vZGUgbW9kZSwgQ29tcGxldGlvblRhc2smJiB0
YXNrKQorICAgIDogQmFzZShjb250ZXh0LCBjb25zdF9jYXN0PE1vZHVsZUluZm9ybWF0aW9uJj4o
bW9kdWxlLT5tb2R1bGVJbmZvcm1hdGlvbigpKSwgV1RGTW92ZSh0YXNrKSkKKyAgICAsIG1fbW9k
dWxlKFdURk1vdmUobW9kdWxlKSkKKyAgICAsIG1fY2FsbGVlR3JvdXAoKm1fbW9kdWxlLT5jYWxs
ZWVHcm91cEZvcihtb2RlKSkKKyAgICAsIG1fY2FsbGVlKFdURk1vdmUoY2FsbGVlKSkKKyAgICAs
IG1fZnVuY3Rpb25JbmRleChmdW5jdGlvbkluZGV4KQorICAgICwgbV9sb29wSW5kZXgobG9vcElu
ZGV4KQoreworICAgIEFTU0VSVChPcHRpb25zOjp1c2VPTUdKSVQoKSk7CisgICAgc2V0TW9kZSht
b2RlKTsKKyAgICBBU1NFUlQobV9jYWxsZWVHcm91cC0+cnVubmFibGUoKSk7CisgICAgQVNTRVJU
KG1fY2FsbGVlR3JvdXAucHRyKCkgPT0gbV9tb2R1bGUtPmNhbGxlZUdyb3VwRm9yKG1fbW9kZSkp
OworICAgIGRhdGFMb2dMbklmKFdhc21PTUdGb3JPU1JFbnRyeVBsYW5JbnRlcm5hbDo6dmVyYm9z
ZSwgIlN0YXJ0aW5nIE9NR0Zvck9TUkVudHJ5IHBsYW4gZm9yICIsIGZ1bmN0aW9uSW5kZXgsICIg
b2YgbW9kdWxlOiAiLCBSYXdQb2ludGVyKCZtX21vZHVsZS5nZXQoKSkpOworfQorCit2b2lkIE9N
R0Zvck9TUkVudHJ5UGxhbjo6d29yayhDb21waWxhdGlvbkVmZm9ydCkKK3sKKyAgICBBU1NFUlQo
bV9jYWxsZWVHcm91cC0+cnVubmFibGUoKSk7CisgICAgQVNTRVJUKG1fY2FsbGVlR3JvdXAucHRy
KCkgPT0gbV9tb2R1bGUtPmNhbGxlZUdyb3VwRm9yKG1vZGUoKSkpOworICAgIGNvbnN0IEZ1bmN0
aW9uRGF0YSYgZnVuY3Rpb24gPSBtX21vZHVsZUluZm9ybWF0aW9uLT5mdW5jdGlvbnNbbV9mdW5j
dGlvbkluZGV4XTsKKworICAgIGNvbnN0IHVpbnQzMl90IGZ1bmN0aW9uSW5kZXhTcGFjZSA9IG1f
ZnVuY3Rpb25JbmRleCArIG1fbW9kdWxlLT5tb2R1bGVJbmZvcm1hdGlvbigpLmltcG9ydEZ1bmN0
aW9uQ291bnQoKTsKKyAgICBBU1NFUlQoZnVuY3Rpb25JbmRleFNwYWNlIDwgbV9tb2R1bGUtPm1v
ZHVsZUluZm9ybWF0aW9uKCkuZnVuY3Rpb25JbmRleFNwYWNlU2l6ZSgpKTsKKworICAgIFNpZ25h
dHVyZUluZGV4IHNpZ25hdHVyZUluZGV4ID0gbV9tb2R1bGVJbmZvcm1hdGlvbi0+aW50ZXJuYWxG
dW5jdGlvblNpZ25hdHVyZUluZGljZXNbbV9mdW5jdGlvbkluZGV4XTsKKyAgICBjb25zdCBTaWdu
YXR1cmUmIHNpZ25hdHVyZSA9IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoc2lnbmF0dXJlSW5k
ZXgpOworCisgICAgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+IHVubGlua2VkQ2FsbHM7
CisgICAgQ29tcGlsYXRpb25Db250ZXh0IGNvbnRleHQ7CisgICAgdW5zaWduZWQgb3NyRW50cnlT
Y3JhdGNoQnVmZmVyU2l6ZSA9IDA7CisgICAgYXV0byBwYXJzZUFuZENvbXBpbGVSZXN1bHQgPSBw
YXJzZUFuZENvbXBpbGUoY29udGV4dCwgZnVuY3Rpb24sIHNpZ25hdHVyZSwgdW5saW5rZWRDYWxs
cywgb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi5nZXQoKSwg
bV9tb2RlLCBDb21waWxhdGlvbk1vZGU6Ok9NR0Zvck9TUkVudHJ5TW9kZSwgbV9mdW5jdGlvbklu
ZGV4LCBtX2xvb3BJbmRleCk7CisKKyAgICBpZiAoVU5MSUtFTFkoIXBhcnNlQW5kQ29tcGlsZVJl
c3VsdCkpIHsKKyAgICAgICAgTG9ja2VyIGxvY2tlciB7IG1fbG9jayB9OworICAgICAgICBmYWls
KG1ha2VTdHJpbmcocGFyc2VBbmRDb21waWxlUmVzdWx0LmVycm9yKCksICJ3aGVuIHRyeWluZyB0
byB0aWVyIHVwICIsIFN0cmluZzo6bnVtYmVyKG1fZnVuY3Rpb25JbmRleCkpKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIEVudHJ5cG9pbnQgb21nRW50cnlwb2ludDsKKyAgICBMaW5r
QnVmZmVyIGxpbmtCdWZmZXIoKmNvbnRleHQud2FzbUVudHJ5cG9pbnRKSVQsIG51bGxwdHIsIExp
bmtCdWZmZXI6OlByb2ZpbGU6Oldhc20sIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7CisgICAgaWYg
KFVOTElLRUxZKGxpbmtCdWZmZXIuZGlkRmFpbFRvQWxsb2NhdGUoKSkpIHsKKyAgICAgICAgTG9j
a2VyIGxvY2tlciB7IG1fbG9jayB9OworICAgICAgICBCYXNlOjpmYWlsKG1ha2VTdHJpbmcoIk91
dCBvZiBleGVjdXRhYmxlIG1lbW9yeSB3aGlsZSB0aWVyaW5nIHVwIGZ1bmN0aW9uIGF0IGluZGV4
ICIsIFN0cmluZzo6bnVtYmVyKG1fZnVuY3Rpb25JbmRleCkpKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIEludGVybmFsRnVuY3Rpb24qIGludGVybmFsRnVuY3Rpb24gPSBwYXJzZUFu
ZENvbXBpbGVSZXN1bHQtPmdldCgpOworICAgIFZlY3RvcjxDb2RlTG9jYXRpb25MYWJlbDxFeGNl
cHRpb25IYW5kbGVyUHRyVGFnPj4gZXhjZXB0aW9uSGFuZGxlckxvY2F0aW9uczsKKyAgICBjb21w
dXRlRXhjZXB0aW9uSGFuZGxlckxvY2F0aW9ucyhleGNlcHRpb25IYW5kbGVyTG9jYXRpb25zLCBp
bnRlcm5hbEZ1bmN0aW9uLCBjb250ZXh0LCBsaW5rQnVmZmVyKTsKKworICAgIG9tZ0VudHJ5cG9p
bnQuY29tcGlsYXRpb24gPSBtYWtlVW5pcXVlPENvbXBpbGF0aW9uPigKKyAgICAgICAgRklOQUxJ
WkVfQ09ERV9JRihjb250ZXh0LnByb2NlZHVyZS0+c2hvdWxkRHVtcElSKCkgfHwgc2hvdWxkRHVt
cERpc2Fzc2VtYmx5Rm9yKENvbXBpbGF0aW9uTW9kZTo6T01HRm9yT1NSRW50cnlNb2RlKSwgbGlu
a0J1ZmZlciwgSklUQ29tcGlsYXRpb25QdHJUYWcsICJXZWJBc3NlbWJseSBPTUdGb3JPU1JFbnRy
eSBmdW5jdGlvblslaV0gJXMgbmFtZSAlcyIsIG1fZnVuY3Rpb25JbmRleCwgc2lnbmF0dXJlLnRv
U3RyaW5nKCkuYXNjaWkoKS5kYXRhKCksIG1ha2VTdHJpbmcoSW5kZXhPck5hbWUoZnVuY3Rpb25J
bmRleFNwYWNlLCBtX21vZHVsZUluZm9ybWF0aW9uLT5uYW1lU2VjdGlvbi0+Z2V0KGZ1bmN0aW9u
SW5kZXhTcGFjZSkpKS5hc2NpaSgpLmRhdGEoKSksCisgICAgICAgIFdURk1vdmUoY29udGV4dC53
YXNtRW50cnlwb2ludEJ5cHJvZHVjdHMpKTsKKworICAgIG9tZ0VudHJ5cG9pbnQuY2FsbGVlU2F2
ZVJlZ2lzdGVycyA9IFdURk1vdmUoaW50ZXJuYWxGdW5jdGlvbi0+ZW50cnlwb2ludC5jYWxsZWVT
YXZlUmVnaXN0ZXJzKTsKKworICAgIEFTU0VSVChtX2NhbGxlZUdyb3VwLnB0cigpID09IG1fbW9k
dWxlLT5jYWxsZWVHcm91cEZvcihtb2RlKCkpKTsKKyAgICBSZWY8T01HRm9yT1NSRW50cnlDYWxs
ZWU+IGNhbGxlZSA9IE9NR0Zvck9TUkVudHJ5Q2FsbGVlOjpjcmVhdGUoV1RGTW92ZShvbWdFbnRy
eXBvaW50KSwgZnVuY3Rpb25JbmRleFNwYWNlLCBtX21vZHVsZUluZm9ybWF0aW9uLT5uYW1lU2Vj
dGlvbi0+Z2V0KGZ1bmN0aW9uSW5kZXhTcGFjZSksIG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUs
IG1fbG9vcEluZGV4LCBXVEZNb3ZlKHVubGlua2VkQ2FsbHMpLCBXVEZNb3ZlKGludGVybmFsRnVu
Y3Rpb24tPnN0YWNrbWFwcyksIFdURk1vdmUoaW50ZXJuYWxGdW5jdGlvbi0+ZXhjZXB0aW9uSGFu
ZGxlcnMpLCBXVEZNb3ZlKGV4Y2VwdGlvbkhhbmRsZXJMb2NhdGlvbnMpKTsKKyAgICB7CisgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoUG9pbnRlcihpbnRlcm5hbEZ1bmN0aW9uLT5jYWxs
ZWVNb3ZlTG9jYXRpb24sIENhbGxlZUJpdHM6OmJveFdhc20oY2FsbGVlLnB0cigpKSk7CisKKyAg
ICAgICAgTG9ja2VyIGxvY2tlciB7IG1fY2FsbGVlR3JvdXAtPm1fbG9jayB9OworICAgICAgICBm
b3IgKGF1dG8mIGNhbGwgOiBjYWxsZWUtPndhc21Ub1dhc21DYWxsc2l0ZXMoKSkgeworICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPFdhc21FbnRyeVB0clRhZz4gZW50cnlwb2ludDsK
KyAgICAgICAgICAgIGlmIChjYWxsLmZ1bmN0aW9uSW5kZXhTcGFjZSA8IG1fbW9kdWxlLT5tb2R1
bGVJbmZvcm1hdGlvbigpLmltcG9ydEZ1bmN0aW9uQ291bnQoKSkKKyAgICAgICAgICAgICAgICBl
bnRyeXBvaW50ID0gbV9jYWxsZWVHcm91cC0+bV93YXNtVG9XYXNtRXhpdFN0dWJzW2NhbGwuZnVu
Y3Rpb25JbmRleFNwYWNlXS5jb2RlKCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgZW50cnlwb2ludCA9IG1fY2FsbGVlR3JvdXAtPndhc21FbnRyeXBvaW50Q2FsbGVlRnJvbUZ1
bmN0aW9uSW5kZXhTcGFjZShsb2NrZXIsIGNhbGwuZnVuY3Rpb25JbmRleFNwYWNlKS5lbnRyeXBv
aW50KCkucmV0YWdnZWQ8V2FzbUVudHJ5UHRyVGFnPigpOworCisgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6cmVwYXRjaE5lYXJDYWxsKGNhbGwuY2FsbExvY2F0aW9uLCBDb2RlTG9jYXRpb25M
YWJlbDxXYXNtRW50cnlQdHJUYWc+KGVudHJ5cG9pbnQpKTsKKyAgICAgICAgfQorCisgICAgICAg
IHJlc2V0SW5zdHJ1Y3Rpb25DYWNoZU9uQWxsVGhyZWFkcygpOworICAgICAgICBXVEY6OnN0b3Jl
U3RvcmVGZW5jZSgpOworCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAobV9jYWxsZWUt
PmNvbXBpbGF0aW9uTW9kZSgpKSB7CisgICAgICAgICAgICBjYXNlIENvbXBpbGF0aW9uTW9kZTo6
TExJbnRNb2RlOiB7CisgICAgICAgICAgICAgICAgTExJbnRDYWxsZWUqIGxsaW50Q2FsbGVlID0g
c3RhdGljX2Nhc3Q8TExJbnRDYWxsZWUqPihtX2NhbGxlZS5wdHIoKSk7CisgICAgICAgICAgICAg
ICAgTG9ja2VyIGxvY2tlciB7IGxsaW50Q2FsbGVlLT50aWVyVXBDb3VudGVyKCkubV9sb2NrIH07
CisgICAgICAgICAgICAgICAgbGxpbnRDYWxsZWUtPnNldE9TUkVudHJ5Q2FsbGVlKGNhbGxlZS5j
b3B5UmVmKCksIG1vZGUoKSk7CisgICAgICAgICAgICAgICAgbGxpbnRDYWxsZWUtPnRpZXJVcENv
dW50ZXIoKS5tX2xvb3BDb21waWxhdGlvblN0YXR1cyA9IExMSW50VGllclVwQ291bnRlcjo6Q29t
cGlsYXRpb25TdGF0dXM6OkNvbXBpbGVkOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgY2FzZSBDb21waWxhdGlvbk1vZGU6OkJCUU1vZGU6IHsKKyAg
ICAgICAgICAgICAgICBCQlFDYWxsZWUqIGJicUNhbGxlZSA9IHN0YXRpY19jYXN0PEJCUUNhbGxl
ZSo+KG1fY2FsbGVlLnB0cigpKTsKKyAgICAgICAgICAgICAgICBMb2NrZXIgbG9ja2VyIHsgYmJx
Q2FsbGVlLT50aWVyVXBDb3VudCgpLT5nZXRMb2NrKCkgfTsKKyAgICAgICAgICAgICAgICBiYnFD
YWxsZWUtPnNldE9TUkVudHJ5Q2FsbGVlKGNhbGxlZS5jb3B5UmVmKCksIG1vZGUoKSk7CisgICAg
ICAgICAgICAgICAgYmJxQ2FsbGVlLT50aWVyVXBDb3VudCgpLT5vc3JFbnRyeVRyaWdnZXJzKClb
bV9sb29wSW5kZXhdID0gVGllclVwQ291bnQ6OlRyaWdnZXJSZWFzb246OkNvbXBpbGF0aW9uRG9u
ZTsKKyAgICAgICAgICAgICAgICBiYnFDYWxsZWUtPnRpZXJVcENvdW50KCktPm1fY29tcGlsYXRp
b25TdGF0dXNGb3JPTUdGb3JPU1JFbnRyeSA9IFRpZXJVcENvdW50OjpDb21waWxhdGlvblN0YXR1
czo6Q29tcGlsZWQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgZGF0YUxvZ0xuSWYo
V2FzbU9NR0Zvck9TUkVudHJ5UGxhbkludGVybmFsOjp2ZXJib3NlLCAiRmluaXNoZWQgT01HRm9y
T1NSRW50cnkgIiwgbV9mdW5jdGlvbkluZGV4KTsKKyAgICBMb2NrZXIgbG9ja2VyIHsgbV9sb2Nr
IH07CisgICAgY29tcGxldGUoKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KKwor
I2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWV9CM0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21PU1JFbnRyeVBsYW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21PU1JFbnRyeVBsYW4uY3BwCShyZXZpc2lvbiAyODczMzkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT1NSRW50cnlQbGFuLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjQsNyArMjQsNyBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIK
LSNpbmNsdWRlICJXYXNtT01HRm9yT1NSRW50cnlQbGFuLmgiCisjaW5jbHVkZSAiV2FzbU9TUkVu
dHJ5UGxhbi5oIgogCiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZX0IzSklUKQogCkBAIC00MSwxMSAr
NDEsMTEgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKIAotbmFtZXNwYWNl
IFdhc21PTUdGb3JPU1JFbnRyeVBsYW5JbnRlcm5hbCB7CituYW1lc3BhY2UgV2FzbU9TUkVudHJ5
UGxhbkludGVybmFsIHsKIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB2ZXJib3NlID0gZmFsc2U7CiB9
CiAKLU9NR0Zvck9TUkVudHJ5UGxhbjo6T01HRm9yT1NSRW50cnlQbGFuKENvbnRleHQqIGNvbnRl
eHQsIFJlZjxNb2R1bGU+JiYgbW9kdWxlLCBSZWY8Q2FsbGVlPiYmIGNhbGxlZSwgdWludDMyX3Qg
ZnVuY3Rpb25JbmRleCwgdWludDMyX3QgbG9vcEluZGV4LCBNZW1vcnlNb2RlIG1vZGUsIENvbXBs
ZXRpb25UYXNrJiYgdGFzaykKK09TUkVudHJ5UGxhbjo6T1NSRW50cnlQbGFuKENvbnRleHQqIGNv
bnRleHQsIFJlZjxNb2R1bGU+JiYgbW9kdWxlLCBSZWY8Q2FsbGVlPiYmIGNhbGxlZSwgdWludDMy
X3QgZnVuY3Rpb25JbmRleCwgdWludDMyX3QgbG9vcEluZGV4LCBNZW1vcnlNb2RlIG1vZGUsIENv
bXBsZXRpb25UYXNrJiYgdGFzaykKICAgICA6IEJhc2UoY29udGV4dCwgY29uc3RfY2FzdDxNb2R1
bGVJbmZvcm1hdGlvbiY+KG1vZHVsZS0+bW9kdWxlSW5mb3JtYXRpb24oKSksIFdURk1vdmUodGFz
aykpCiAgICAgLCBtX21vZHVsZShXVEZNb3ZlKG1vZHVsZSkpCiAgICAgLCBtX2NhbGxlZUdyb3Vw
KCptX21vZHVsZS0+Y2FsbGVlR3JvdXBGb3IobW9kZSkpCkBAIC01NywxMCArNTcsMTAgQEAgT01H
Rm9yT1NSRW50cnlQbGFuOjpPTUdGb3JPU1JFbnRyeVBsYW4oQwogICAgIHNldE1vZGUobW9kZSk7
CiAgICAgQVNTRVJUKG1fY2FsbGVlR3JvdXAtPnJ1bm5hYmxlKCkpOwogICAgIEFTU0VSVChtX2Nh
bGxlZUdyb3VwLnB0cigpID09IG1fbW9kdWxlLT5jYWxsZWVHcm91cEZvcihtX21vZGUpKTsKLSAg
ICBkYXRhTG9nTG5JZihXYXNtT01HRm9yT1NSRW50cnlQbGFuSW50ZXJuYWw6OnZlcmJvc2UsICJT
dGFydGluZyBPTUdGb3JPU1JFbnRyeSBwbGFuIGZvciAiLCBmdW5jdGlvbkluZGV4LCAiIG9mIG1v
ZHVsZTogIiwgUmF3UG9pbnRlcigmbV9tb2R1bGUuZ2V0KCkpKTsKKyAgICBkYXRhTG9nTG5JZihX
YXNtT1NSRW50cnlQbGFuSW50ZXJuYWw6OnZlcmJvc2UsICJTdGFydGluZyBPTUdGb3JPU1JFbnRy
eSBwbGFuIGZvciAiLCBmdW5jdGlvbkluZGV4LCAiIG9mIG1vZHVsZTogIiwgUmF3UG9pbnRlcigm
bV9tb2R1bGUuZ2V0KCkpKTsKIH0KIAotdm9pZCBPTUdGb3JPU1JFbnRyeVBsYW46OndvcmsoQ29t
cGlsYXRpb25FZmZvcnQpCit2b2lkIE9TUkVudHJ5UGxhbjo6d29yayhDb21waWxhdGlvbkVmZm9y
dCkKIHsKICAgICBBU1NFUlQobV9jYWxsZWVHcm91cC0+cnVubmFibGUoKSk7CiAgICAgQVNTRVJU
KG1fY2FsbGVlR3JvdXAucHRyKCkgPT0gbV9tb2R1bGUtPmNhbGxlZUdyb3VwRm9yKG1vZGUoKSkp
OwpAQCAtNzIsMTAgKzcyLDEyIEBAIHZvaWQgT01HRm9yT1NSRW50cnlQbGFuOjp3b3JrKENvbXBp
bGF0aW8KICAgICBTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCA9IG1fbW9kdWxlSW5mb3Jt
YXRpb24tPmludGVybmFsRnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzW21fZnVuY3Rpb25JbmRleF07
CiAgICAgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUgPSBTaWduYXR1cmVJbmZvcm1hdGlvbjo6
Z2V0KHNpZ25hdHVyZUluZGV4KTsKIAorICAgIC8vQ29tcGlsYXRpb25Nb2RlIHRhcmdldENvbXBp
bGF0aW9uTW9kZSA9IG1fY2FsbGVlLT5jb21waWxhdGlvbk1vZGUoKSA9PSBDb21waWxhdGlvbk1v
ZGU6OkxMSW50TW9kZSA/IENvbXBpbGF0aW9uTW9kZTo6QkJRRm9yT1NSRW50cnlNb2RlIDogQ29t
cGlsYXRpb25Nb2RlOjpPTUdGb3JPU1JFbnRyeU1vZGU7CisgICAgQ29tcGlsYXRpb25Nb2RlIHRh
cmdldENvbXBpbGF0aW9uTW9kZSA9ICBDb21waWxhdGlvbk1vZGU6Ok9NR0Zvck9TUkVudHJ5TW9k
ZTsKKwogICAgIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiB1bmxpbmtlZENhbGxzOwog
ICAgIENvbXBpbGF0aW9uQ29udGV4dCBjb250ZXh0OwotICAgIHVuc2lnbmVkIG9zckVudHJ5U2Ny
YXRjaEJ1ZmZlclNpemUgPSAwOwotICAgIGF1dG8gcGFyc2VBbmRDb21waWxlUmVzdWx0ID0gcGFy
c2VBbmRDb21waWxlKGNvbnRleHQsIGZ1bmN0aW9uLCBzaWduYXR1cmUsIHVubGlua2VkQ2FsbHMs
IG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUsIG1fbW9kdWxlSW5mb3JtYXRpb24uZ2V0KCksIG1f
bW9kZSwgQ29tcGlsYXRpb25Nb2RlOjpPTUdGb3JPU1JFbnRyeU1vZGUsIG1fZnVuY3Rpb25JbmRl
eCwgbV9sb29wSW5kZXgpOworICAgIGF1dG8gcGFyc2VBbmRDb21waWxlUmVzdWx0ID0gcGFyc2VB
bmRDb21waWxlKGNvbnRleHQsIGZ1bmN0aW9uLCBzaWduYXR1cmUsIHVubGlua2VkQ2FsbHMsIG1f
bW9kdWxlSW5mb3JtYXRpb24uZ2V0KCksIG1fbW9kZSwgdGFyZ2V0Q29tcGlsYXRpb25Nb2RlLCBt
X2Z1bmN0aW9uSW5kZXgsIG1fbG9vcEluZGV4KTsKIAogICAgIGlmIChVTkxJS0VMWSghcGFyc2VB
bmRDb21waWxlUmVzdWx0KSkgewogICAgICAgICBMb2NrZXIgbG9ja2VyIHsgbV9sb2NrIH07CkBA
IC05NiwxNSArOTgsMTYgQEAgdm9pZCBPTUdGb3JPU1JFbnRyeVBsYW46OndvcmsoQ29tcGlsYXRp
bwogICAgIGNvbXB1dGVFeGNlcHRpb25IYW5kbGVyTG9jYXRpb25zKGV4Y2VwdGlvbkhhbmRsZXJM
b2NhdGlvbnMsIGludGVybmFsRnVuY3Rpb24sIGNvbnRleHQsIGxpbmtCdWZmZXIpOwogCiAgICAg
b21nRW50cnlwb2ludC5jb21waWxhdGlvbiA9IG1ha2VVbmlxdWU8Q29tcGlsYXRpb24+KAotICAg
ICAgICBGSU5BTElaRV9DT0RFX0lGKGNvbnRleHQucHJvY2VkdXJlLT5zaG91bGREdW1wSVIoKSB8
fCBzaG91bGREdW1wRGlzYXNzZW1ibHlGb3IoQ29tcGlsYXRpb25Nb2RlOjpPTUdGb3JPU1JFbnRy
eU1vZGUpLCBsaW5rQnVmZmVyLCBKSVRDb21waWxhdGlvblB0clRhZywgIldlYkFzc2VtYmx5IE9N
R0Zvck9TUkVudHJ5IGZ1bmN0aW9uWyVpXSAlcyBuYW1lICVzIiwgbV9mdW5jdGlvbkluZGV4LCBz
aWduYXR1cmUudG9TdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSwgbWFrZVN0cmluZyhJbmRleE9yTmFt
ZShmdW5jdGlvbkluZGV4U3BhY2UsIG1fbW9kdWxlSW5mb3JtYXRpb24tPm5hbWVTZWN0aW9uLT5n
ZXQoZnVuY3Rpb25JbmRleFNwYWNlKSkpLmFzY2lpKCkuZGF0YSgpKSwKKyAgICAgICAgRklOQUxJ
WkVfQ09ERV9JRihjb250ZXh0LnByb2NlZHVyZS0+c2hvdWxkRHVtcElSKCkgfHwgc2hvdWxkRHVt
cERpc2Fzc2VtYmx5Rm9yKHRhcmdldENvbXBpbGF0aW9uTW9kZSksIGxpbmtCdWZmZXIsIEpJVENv
bXBpbGF0aW9uUHRyVGFnLCAiV2ViQXNzZW1ibHkgT01HRm9yT1NSRW50cnkgZnVuY3Rpb25bJWld
ICVzIG5hbWUgJXMiLCBtX2Z1bmN0aW9uSW5kZXgsIHNpZ25hdHVyZS50b1N0cmluZygpLmFzY2lp
KCkuZGF0YSgpLCBtYWtlU3RyaW5nKEluZGV4T3JOYW1lKGZ1bmN0aW9uSW5kZXhTcGFjZSwgbV9t
b2R1bGVJbmZvcm1hdGlvbi0+bmFtZVNlY3Rpb24tPmdldChmdW5jdGlvbkluZGV4U3BhY2UpKSku
YXNjaWkoKS5kYXRhKCkpLAogICAgICAgICBXVEZNb3ZlKGNvbnRleHQud2FzbUVudHJ5cG9pbnRC
eXByb2R1Y3RzKSk7CiAKICAgICBvbWdFbnRyeXBvaW50LmNhbGxlZVNhdmVSZWdpc3RlcnMgPSBX
VEZNb3ZlKGludGVybmFsRnVuY3Rpb24tPmVudHJ5cG9pbnQuY2FsbGVlU2F2ZVJlZ2lzdGVycyk7
CiAKICAgICBBU1NFUlQobV9jYWxsZWVHcm91cC5wdHIoKSA9PSBtX21vZHVsZS0+Y2FsbGVlR3Jv
dXBGb3IobW9kZSgpKSk7Ci0gICAgUmVmPE9NR0Zvck9TUkVudHJ5Q2FsbGVlPiBjYWxsZWUgPSBP
TUdGb3JPU1JFbnRyeUNhbGxlZTo6Y3JlYXRlKFdURk1vdmUob21nRW50cnlwb2ludCksIGZ1bmN0
aW9uSW5kZXhTcGFjZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi0+bmFtZVNlY3Rpb24tPmdldChmdW5j
dGlvbkluZGV4U3BhY2UpLCBvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplLCBtX2xvb3BJbmRleCwg
V1RGTW92ZSh1bmxpbmtlZENhbGxzKSwgV1RGTW92ZShpbnRlcm5hbEZ1bmN0aW9uLT5zdGFja21h
cHMpLCBXVEZNb3ZlKGludGVybmFsRnVuY3Rpb24tPmV4Y2VwdGlvbkhhbmRsZXJzKSwgV1RGTW92
ZShleGNlcHRpb25IYW5kbGVyTG9jYXRpb25zKSk7CisgICAgUmVmPE9TUkVudHJ5Q2FsbGVlPiBj
YWxsZWUgPSBPU1JFbnRyeUNhbGxlZTo6Y3JlYXRlKHRhcmdldENvbXBpbGF0aW9uTW9kZSwgV1RG
TW92ZShvbWdFbnRyeXBvaW50KSwgZnVuY3Rpb25JbmRleFNwYWNlLCBtX21vZHVsZUluZm9ybWF0
aW9uLT5uYW1lU2VjdGlvbi0+Z2V0KGZ1bmN0aW9uSW5kZXhTcGFjZSksIGludGVybmFsRnVuY3Rp
b24tPm9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUsIG1fbG9vcEluZGV4LCBXVEZNb3ZlKHVubGlu
a2VkQ2FsbHMpLCBXVEZNb3ZlKGludGVybmFsRnVuY3Rpb24tPnN0YWNrbWFwcyksIFdURk1vdmUo
aW50ZXJuYWxGdW5jdGlvbi0+ZXhjZXB0aW9uSGFuZGxlcnMpLCBXVEZNb3ZlKGV4Y2VwdGlvbkhh
bmRsZXJMb2NhdGlvbnMpKTsKICAgICB7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNo
UG9pbnRlcihpbnRlcm5hbEZ1bmN0aW9uLT5jYWxsZWVNb3ZlTG9jYXRpb24sIENhbGxlZUJpdHM6
OmJveFdhc20oY2FsbGVlLnB0cigpKSk7CisgICAgICAgIGZvciAoYXV0byYgbW92ZUxvY2F0aW9u
IDogaW50ZXJuYWxGdW5jdGlvbi0+Y2FsbGVlTW92ZUxvY2F0aW9ucykKKyAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpyZXBhdGNoUG9pbnRlcihtb3ZlTG9jYXRpb24sIENhbGxlZUJpdHM6OmJv
eFdhc20oY2FsbGVlLnB0cigpKSk7CiAKICAgICAgICAgTG9ja2VyIGxvY2tlciB7IG1fY2FsbGVl
R3JvdXAtPm1fbG9jayB9OwogICAgICAgICBmb3IgKGF1dG8mIGNhbGwgOiBjYWxsZWUtPndhc21U
b1dhc21DYWxsc2l0ZXMoKSkgewpAQCAtMTQyLDcgKzE0NSw3IEBAIHZvaWQgT01HRm9yT1NSRW50
cnlQbGFuOjp3b3JrKENvbXBpbGF0aW8KICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0K
LSAgICBkYXRhTG9nTG5JZihXYXNtT01HRm9yT1NSRW50cnlQbGFuSW50ZXJuYWw6OnZlcmJvc2Us
ICJGaW5pc2hlZCBPTUdGb3JPU1JFbnRyeSAiLCBtX2Z1bmN0aW9uSW5kZXgpOworICAgIGRhdGFM
b2dMbklmKFdhc21PU1JFbnRyeVBsYW5JbnRlcm5hbDo6dmVyYm9zZSwgIkZpbmlzaGVkIE9NR0Zv
ck9TUkVudHJ5ICIsIG1fZnVuY3Rpb25JbmRleCk7CiAgICAgTG9ja2VyIGxvY2tlciB7IG1fbG9j
ayB9OwogICAgIGNvbXBsZXRlKCk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtT1NSRW50cnlQbGFuLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbU9TUkVudHJ5UGxhbi5oCShyZXZpc2lvbiAyODczMzkpCShmcm9tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21PTUdGb3JPU1JFbnRyeVBsYW4uaDoyODczMzkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT1NSRW50cnlQbGFuLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw3NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZX0IzSklUKQor
CisjaW5jbHVkZSAiV2FzbUNhbGxlZS5oIgorI2luY2x1ZGUgIldhc21Db250ZXh0LmgiCisjaW5j
bHVkZSAiV2FzbU1vZHVsZS5oIgorI2luY2x1ZGUgIldhc21PcGVyYXRpb25zLmgiCisjaW5jbHVk
ZSAiV2FzbVBsYW4uaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIENhbGxMaW5rSW5mbzsK
KworbmFtZXNwYWNlIFdhc20geworCitjbGFzcyBPTUdGb3JPU1JFbnRyeVBsYW4gZmluYWwgOiBw
dWJsaWMgUGxhbiB7CitwdWJsaWM6CisgICAgdXNpbmcgQmFzZSA9IFBsYW47CisKKyAgICBib29s
IGhhc1dvcmsoKSBjb25zdCBmaW5hbCB7IHJldHVybiAhbV9jb21wbGV0ZWQ7IH0KKyAgICB2b2lk
IHdvcmsoQ29tcGlsYXRpb25FZmZvcnQpIGZpbmFsOworICAgIGJvb2wgbXVsdGlUaHJlYWRlZCgp
IGNvbnN0IGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9CisKKyAgICAvLyBOb3RlOiBDb21wbGV0aW9u
VGFzayBzaG91bGQgbm90IGhvbGQgYSByZWZlcmVuY2UgdG8gdGhlIFBsYW4gb3RoZXJ3aXNlIHRo
ZXJlIHdpbGwgYmUgYSByZWZlcmVuY2UgY3ljbGUuCisgICAgT01HRm9yT1NSRW50cnlQbGFuKENv
bnRleHQqLCBSZWY8TW9kdWxlPiYmLCBSZWY8Q2FsbGVlPiYmLCB1aW50MzJfdCBmdW5jdGlvbklu
ZGV4LCB1aW50MzJfdCBsb29wSW5kZXgsIE1lbW9yeU1vZGUsIENvbXBsZXRpb25UYXNrJiYpOwor
Citwcml2YXRlOgorICAgIC8vIEZvciBzb21lIHJlYXNvbiBmcmllbmRzaGlwIGRvZXNuJ3QgZXh0
ZW5kIHRvIHBhcmVudCBjbGFzc2VzLi4uCisgICAgdXNpbmcgQmFzZTo6bV9sb2NrOworCisgICAg
Ym9vbCBpc0NvbXBsZXRlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9jb21wbGV0ZWQ7IH0KKyAg
ICB2b2lkIGNvbXBsZXRlKCkgV1RGX1JFUVVJUkVTX0xPQ0sobV9sb2NrKSBmaW5hbAorICAgIHsK
KyAgICAgICAgbV9jb21wbGV0ZWQgPSB0cnVlOworICAgICAgICBydW5Db21wbGV0aW9uVGFza3Mo
KTsKKyAgICB9CisKKyAgICBSZWY8TW9kdWxlPiBtX21vZHVsZTsKKyAgICBSZWY8Q2FsbGVlR3Jv
dXA+IG1fY2FsbGVlR3JvdXA7CisgICAgUmVmPENhbGxlZT4gbV9jYWxsZWU7CisgICAgYm9vbCBt
X2NvbXBsZXRlZCB7IGZhbHNlIH07CisgICAgdWludDMyX3QgbV9mdW5jdGlvbkluZGV4OworICAg
IHVpbnQzMl90IG1fbG9vcEluZGV4OworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20K
KworI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWV9CM0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21PU1JFbnRyeVBsYW4uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT1NSRW50cnlQbGFuLmgJKHJldmlzaW9uIDI4NzMzOSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PU1JFbnRyeVBsYW4uaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzksNyArMzksNyBAQCBjbGFzcyBDYWxsTGlua0luZm87CiAKIG5hbWVzcGFj
ZSBXYXNtIHsKIAotY2xhc3MgT01HRm9yT1NSRW50cnlQbGFuIGZpbmFsIDogcHVibGljIFBsYW4g
eworY2xhc3MgT1NSRW50cnlQbGFuIGZpbmFsIDogcHVibGljIFBsYW4gewogcHVibGljOgogICAg
IHVzaW5nIEJhc2UgPSBQbGFuOwogCkBAIC00OCw3ICs0OCw3IEBAIHB1YmxpYzoKICAgICBib29s
IG11bHRpVGhyZWFkZWQoKSBjb25zdCBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQogCiAgICAgLy8g
Tm90ZTogQ29tcGxldGlvblRhc2sgc2hvdWxkIG5vdCBob2xkIGEgcmVmZXJlbmNlIHRvIHRoZSBQ
bGFuIG90aGVyd2lzZSB0aGVyZSB3aWxsIGJlIGEgcmVmZXJlbmNlIGN5Y2xlLgotICAgIE9NR0Zv
ck9TUkVudHJ5UGxhbihDb250ZXh0KiwgUmVmPE1vZHVsZT4mJiwgUmVmPENhbGxlZT4mJiwgdWlu
dDMyX3QgZnVuY3Rpb25JbmRleCwgdWludDMyX3QgbG9vcEluZGV4LCBNZW1vcnlNb2RlLCBDb21w
bGV0aW9uVGFzayYmKTsKKyAgICBPU1JFbnRyeVBsYW4oQ29udGV4dCosIFJlZjxNb2R1bGU+JiYs
IFJlZjxDYWxsZWU+JiYsIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIHVpbnQzMl90IGxvb3BJbmRl
eCwgTWVtb3J5TW9kZSwgQ29tcGxldGlvblRhc2smJik7CiAKIHByaXZhdGU6CiAgICAgLy8gRm9y
IHNvbWUgcmVhc29uIGZyaWVuZHNoaXAgZG9lc24ndCBleHRlbmQgdG8gcGFyZW50IGNsYXNzZXMu
Li4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PcGVyYXRpb25zLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT3BlcmF0aW9ucy5j
cHAJKHJldmlzaW9uIDI4NzMzOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21P
cGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcsOSArNDcsOSBAQAogI2luY2x1ZGUg
Ildhc21JbnN0YW5jZS5oIgogI2luY2x1ZGUgIldhc21NZW1vcnkuaCIKICNpbmNsdWRlICJXYXNt
TW9kdWxlSW5mb3JtYXRpb24uaCIKLSNpbmNsdWRlICJXYXNtT01HRm9yT1NSRW50cnlQbGFuLmgi
CiAjaW5jbHVkZSAiV2FzbU9NR1BsYW4uaCIKICNpbmNsdWRlICJXYXNtT1NSRW50cnlEYXRhLmgi
CisjaW5jbHVkZSAiV2FzbU9TUkVudHJ5UGxhbi5oIgogI2luY2x1ZGUgIldhc21Xb3JrbGlzdC5o
IgogI2luY2x1ZGUgPHd0Zi9DaGVja2VkQXJpdGhtZXRpYy5oPgogI2luY2x1ZGUgPHd0Zi9EYXRh
TG9nLmg+CkBAIC0xNTcsNyArMTU3LDcgQEAgdm9pZCBsb2FkVmFsdWVzSW50b0J1ZmZlcihQcm9i
ZTo6Q29udGV4dAogfQogCiBTVVBQUkVTU19BU0FOCi1zdGF0aWMgdm9pZCBkb09TUkVudHJ5KElu
c3RhbmNlKiBpbnN0YW5jZSwgUHJvYmU6OkNvbnRleHQmIGNvbnRleHQsIEJCUUNhbGxlZSYgY2Fs
bGVlLCBPTUdGb3JPU1JFbnRyeUNhbGxlZSYgb3NyRW50cnlDYWxsZWUsIE9TUkVudHJ5RGF0YSYg
b3NyRW50cnlEYXRhKQorc3RhdGljIHZvaWQgZG9PU1JFbnRyeShJbnN0YW5jZSogaW5zdGFuY2Us
IFByb2JlOjpDb250ZXh0JiBjb250ZXh0LCBCQlFDYWxsZWUmIGNhbGxlZSwgT1NSRW50cnlDYWxs
ZWUmIG9zckVudHJ5Q2FsbGVlLCBPU1JFbnRyeURhdGEmIG9zckVudHJ5RGF0YSkKIHsKICAgICBh
dXRvIHJldHVybldpdGhvdXRPU1JFbnRyeSA9IFsmXSB7CiAgICAgICAgIGNvbnRleHQuZ3ByKEdQ
UkluZm86OmFyZ3VtZW50R1BSMCkgPSAwOwpAQCAtMjQ3LDcgKzI0Nyw3IEBAIEpTQ19ERUZJTkVf
SklUX09QRVJBVElPTihvcGVyYXRpb25XYXNtVHIKICAgICAgICAgcmV0dXJuIHJldHVybldpdGhv
dXRPU1JFbnRyeSgpOwogICAgIH0KIAotICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OnZlcmJvc2VP
U1IoKSwgIkNvbnNpZGVyIE9NR0Zvck9TUkVudHJ5UGxhbiBmb3IgWyIsIGZ1bmN0aW9uSW5kZXgs
ICJdIGxvb3BJbmRleCMiLCBsb29wSW5kZXgsICIgd2l0aCBleGVjdXRlQ291bnRlciA9ICIsIHRp
ZXJVcCwgIiAiLCBSYXdQb2ludGVyKGNhbGxlZS5yZXBsYWNlbWVudCgpKSk7CisgICAgZGF0YUxv
Z0xuSWYoT3B0aW9uczo6dmVyYm9zZU9TUigpLCAiQ29uc2lkZXIgT1NSRW50cnlQbGFuIGZvciBb
IiwgZnVuY3Rpb25JbmRleCwgIl0gbG9vcEluZGV4IyIsIGxvb3BJbmRleCwgIiB3aXRoIGV4ZWN1
dGVDb3VudGVyID0gIiwgdGllclVwLCAiICIsIFJhd1BvaW50ZXIoY2FsbGVlLnJlcGxhY2VtZW50
KCkpKTsKIAogICAgIGlmICghT3B0aW9uczo6dXNlV2ViQXNzZW1ibHlPU1IoKSkgewogICAgICAg
ICBpZiAoc2hvdWxkVHJpZ2dlck9NR0NvbXBpbGUodGllclVwLCBjYWxsZWUucmVwbGFjZW1lbnQo
KSwgZnVuY3Rpb25JbmRleCkpCkBAIC0zMDcsNyArMzA3LDcgQEAgSlNDX0RFRklORV9KSVRfT1BF
UkFUSU9OKG9wZXJhdGlvbldhc21UcgogICAgICAgICByZXR1cm4gcmV0dXJuV2l0aG91dE9TUkVu
dHJ5KCk7CiAgICAgfQogCi0gICAgaWYgKE9NR0Zvck9TUkVudHJ5Q2FsbGVlKiBvc3JFbnRyeUNh
bGxlZSA9IGNhbGxlZS5vc3JFbnRyeUNhbGxlZSgpKSB7CisgICAgaWYgKE9TUkVudHJ5Q2FsbGVl
KiBvc3JFbnRyeUNhbGxlZSA9IGNhbGxlZS5vc3JFbnRyeUNhbGxlZSgpKSB7CiAgICAgICAgIGlm
IChvc3JFbnRyeUNhbGxlZS0+bG9vcEluZGV4KCkgPT0gbG9vcEluZGV4KQogICAgICAgICAgICAg
cmV0dXJuIGRvT1NSRW50cnkoaW5zdGFuY2UsIGNvbnRleHQsIGNhbGxlZSwgKm9zckVudHJ5Q2Fs
bGVlLCBvc3JFbnRyeURhdGEpOwogICAgIH0KQEAgLTMyMiw3ICszMjIsNyBAQCBKU0NfREVGSU5F
X0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uV2FzbVRyCiAgICAgICAgICAgICByZXR1cm4gcmV0dXJu
V2l0aG91dE9TUkVudHJ5KCk7CiAgICAgfQogCi0gICAgaWYgKE9NR0Zvck9TUkVudHJ5Q2FsbGVl
KiBvc3JFbnRyeUNhbGxlZSA9IGNhbGxlZS5vc3JFbnRyeUNhbGxlZSgpKSB7CisgICAgaWYgKE9T
UkVudHJ5Q2FsbGVlKiBvc3JFbnRyeUNhbGxlZSA9IGNhbGxlZS5vc3JFbnRyeUNhbGxlZSgpKSB7
CiAgICAgICAgIGlmIChvc3JFbnRyeUNhbGxlZS0+bG9vcEluZGV4KCkgPT0gbG9vcEluZGV4KQog
ICAgICAgICAgICAgcmV0dXJuIGRvT1NSRW50cnkoaW5zdGFuY2UsIGNvbnRleHQsIGNhbGxlZSwg
Km9zckVudHJ5Q2FsbGVlLCBvc3JFbnRyeURhdGEpOwogICAgICAgICB0aWVyVXAuZG9udE9wdGlt
aXplQW55dGltZVNvb24oZnVuY3Rpb25JbmRleCk7CkBAIC0zNDcsNyArMzQ3LDcgQEAgSlNDX0RF
RklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbldhc21UcgogICAgICAgICAgICAgdWludDMyX3Qg
Y3VycmVudExvb3BJbmRleCA9IHRpZXJVcC5vdXRlckxvb3BzKClbbG9vcEluZGV4XTsKICAgICAg
ICAgICAgIExvY2tlciBsb2NrZXIgeyB0aWVyVXAuZ2V0TG9jaygpIH07CiAKLSAgICAgICAgICAg
IC8vIFdlIGFscmVhZHkgc3RhcnRlZCBPTUdGb3JPU1JFbnRyeVBsYW4uCisgICAgICAgICAgICAv
LyBXZSBhbHJlYWR5IHN0YXJ0ZWQgT1NSRW50cnlQbGFuLgogICAgICAgICAgICAgaWYgKGNhbGxl
ZS5kaWRTdGFydENvbXBpbGluZ09TUkVudHJ5Q2FsbGVlKCkpCiAgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCkBAIC0zOTAsNyArMzkwLDcgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9O
KG9wZXJhdGlvbldhc21UcgogCiAgICAgaWYgKHN0YXJ0T1NSRW50cnlDb21waWxhdGlvbikgewog
ICAgICAgICBkYXRhTG9nTG5JZihPcHRpb25zOjp2ZXJib3NlT1NSKCksICJ0cmlnZ2VyT01HT1NS
IGZvciAiLCBmdW5jdGlvbkluZGV4KTsKLSAgICAgICAgUmVmPFBsYW4+IHBsYW4gPSBhZG9wdFJl
ZigqbmV3IE9NR0Zvck9TUkVudHJ5UGxhbihpbnN0YW5jZS0+Y29udGV4dCgpLCBSZWY8V2FzbTo6
TW9kdWxlPihpbnN0YW5jZS0+bW9kdWxlKCkpLCBSZWY8V2FzbTo6QkJRQ2FsbGVlPihjYWxsZWUp
LCBmdW5jdGlvbkluZGV4LCBsb29wSW5kZXgsIGNhbGxlZUdyb3VwLm1vZGUoKSwgUGxhbjo6ZG9u
dEZpbmFsaXplKCkpKTsKKyAgICAgICAgUmVmPFBsYW4+IHBsYW4gPSBhZG9wdFJlZigqbmV3IE9T
UkVudHJ5UGxhbihpbnN0YW5jZS0+Y29udGV4dCgpLCBSZWY8V2FzbTo6TW9kdWxlPihpbnN0YW5j
ZS0+bW9kdWxlKCkpLCBSZWY8V2FzbTo6QkJRQ2FsbGVlPihjYWxsZWUpLCBmdW5jdGlvbkluZGV4
LCBsb29wSW5kZXgsIGNhbGxlZUdyb3VwLm1vZGUoKSwgUGxhbjo6ZG9udEZpbmFsaXplKCkpKTsK
ICAgICAgICAgZW5zdXJlV29ya2xpc3QoKS5lbnF1ZXVlKHBsYW4uY29weVJlZigpKTsKICAgICAg
ICAgaWYgKFVOTElLRUxZKCFPcHRpb25zOjp1c2VDb25jdXJyZW50SklUKCkpKQogICAgICAgICAg
ICAgcGxhbi0+d2FpdEZvckNvbXBsZXRpb24oKTsKQEAgLTM5OCw3ICszOTgsNyBAQCBKU0NfREVG
SU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uV2FzbVRyCiAgICAgICAgICAgICB0aWVyVXAuc2V0
T3B0aW1pemF0aW9uVGhyZXNob2xkQmFzZWRPbkNvbXBpbGF0aW9uUmVzdWx0KGZ1bmN0aW9uSW5k
ZXgsIENvbXBpbGF0aW9uRGVmZXJyZWQpOwogICAgIH0KIAotICAgIE9NR0Zvck9TUkVudHJ5Q2Fs
bGVlKiBvc3JFbnRyeUNhbGxlZSA9IGNhbGxlZS5vc3JFbnRyeUNhbGxlZSgpOworICAgIE9TUkVu
dHJ5Q2FsbGVlKiBvc3JFbnRyeUNhbGxlZSA9IGNhbGxlZS5vc3JFbnRyeUNhbGxlZSgpOwogICAg
IGlmICghb3NyRW50cnlDYWxsZWUpIHsKICAgICAgICAgdGllclVwLnNldE9wdGltaXphdGlvblRo
cmVzaG9sZEJhc2VkT25Db21waWxhdGlvblJlc3VsdChmdW5jdGlvbkluZGV4LCBDb21waWxhdGlv
bkRlZmVycmVkKTsKICAgICAgICAgcmV0dXJuIHJldHVybldpdGhvdXRPU1JFbnRyeSgpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmNwcAkocmV2aXNpb24gMjg3MzM5
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xNDEsMTMgKzE0MSwxMyBAQCB2b2lkIFBsYW46OnVwZGF0ZUNhbGxTaXRlc1RvQ2Fs
bFVzKGNvbnN0CiAgICAgICAgICAgICBMTEludENhbGxlZSYgbGxpbnRDYWxsZWUgPSBjYWxsZWVH
cm91cC5tX2xsaW50Q2FsbGVlcy0+YXQoaSkuZ2V0KCk7CiAgICAgICAgICAgICBpZiAoSklUQ2Fs
bGVlKiByZXBsYWNlbWVudENhbGxlZSA9IGxsaW50Q2FsbGVlLnJlcGxhY2VtZW50KGNhbGxlZUdy
b3VwLm1vZGUoKSkpCiAgICAgICAgICAgICAgICAgc3RhZ2VSZXBhdGNoKHJlcGxhY2VtZW50Q2Fs
bGVlLT53YXNtVG9XYXNtQ2FsbHNpdGVzKCkpOwotICAgICAgICAgICAgaWYgKE9NR0Zvck9TUkVu
dHJ5Q2FsbGVlKiBvc3JFbnRyeUNhbGxlZSA9IGxsaW50Q2FsbGVlLm9zckVudHJ5Q2FsbGVlKGNh
bGxlZUdyb3VwLm1vZGUoKSkpCisgICAgICAgICAgICBpZiAoT1NSRW50cnlDYWxsZWUqIG9zckVu
dHJ5Q2FsbGVlID0gbGxpbnRDYWxsZWUub3NyRW50cnlDYWxsZWUoY2FsbGVlR3JvdXAubW9kZSgp
KSkKICAgICAgICAgICAgICAgICBzdGFnZVJlcGF0Y2gob3NyRW50cnlDYWxsZWUtPndhc21Ub1dh
c21DYWxsc2l0ZXMoKSk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKEJCUUNhbGxlZSogYmJxQ2Fs
bGVlID0gY2FsbGVlR3JvdXAuYmJxQ2FsbGVlKGNhbGxlZUdyb3VwTG9ja2VyLCBpKSkgewogICAg
ICAgICAgICAgaWYgKE9NR0NhbGxlZSogcmVwbGFjZW1lbnRDYWxsZWUgPSBiYnFDYWxsZWUtPnJl
cGxhY2VtZW50KCkpCiAgICAgICAgICAgICAgICAgc3RhZ2VSZXBhdGNoKHJlcGxhY2VtZW50Q2Fs
bGVlLT53YXNtVG9XYXNtQ2FsbHNpdGVzKCkpOwotICAgICAgICAgICAgaWYgKE9NR0Zvck9TUkVu
dHJ5Q2FsbGVlKiBvc3JFbnRyeUNhbGxlZSA9IGJicUNhbGxlZS0+b3NyRW50cnlDYWxsZWUoKSkK
KyAgICAgICAgICAgIGlmIChPU1JFbnRyeUNhbGxlZSogb3NyRW50cnlDYWxsZWUgPSBiYnFDYWxs
ZWUtPm9zckVudHJ5Q2FsbGVlKCkpCiAgICAgICAgICAgICAgICAgc3RhZ2VSZXBhdGNoKG9zckVu
dHJ5Q2FsbGVlLT53YXNtVG9XYXNtQ2FsbHNpdGVzKCkpOwogICAgICAgICB9CiAgICAgfQpAQCAt
MTc2LDEzICsxNzYsMTMgQEAgdm9pZCBQbGFuOjp1cGRhdGVDYWxsU2l0ZXNUb0NhbGxVcyhjb25z
dAogICAgICAgICAgICAgTExJbnRDYWxsZWUmIGxsaW50Q2FsbGVlID0gY2FsbGVlR3JvdXAubV9s
bGludENhbGxlZXMtPmF0KGkpLmdldCgpOwogICAgICAgICAgICAgaWYgKEpJVENhbGxlZSogcmVw
bGFjZW1lbnRDYWxsZWUgPSBsbGludENhbGxlZS5yZXBsYWNlbWVudChjYWxsZWVHcm91cC5tb2Rl
KCkpKQogICAgICAgICAgICAgICAgIHJlcGF0Y2hDYWxscyhyZXBsYWNlbWVudENhbGxlZS0+d2Fz
bVRvV2FzbUNhbGxzaXRlcygpKTsKLSAgICAgICAgICAgIGlmIChPTUdGb3JPU1JFbnRyeUNhbGxl
ZSogb3NyRW50cnlDYWxsZWUgPSBsbGludENhbGxlZS5vc3JFbnRyeUNhbGxlZShjYWxsZWVHcm91
cC5tb2RlKCkpKQorICAgICAgICAgICAgaWYgKE9TUkVudHJ5Q2FsbGVlKiBvc3JFbnRyeUNhbGxl
ZSA9IGxsaW50Q2FsbGVlLm9zckVudHJ5Q2FsbGVlKGNhbGxlZUdyb3VwLm1vZGUoKSkpCiAgICAg
ICAgICAgICAgICAgcmVwYXRjaENhbGxzKG9zckVudHJ5Q2FsbGVlLT53YXNtVG9XYXNtQ2FsbHNp
dGVzKCkpOwogICAgICAgICB9CiAgICAgICAgIGlmIChCQlFDYWxsZWUqIGJicUNhbGxlZSA9IGNh
bGxlZUdyb3VwLmJicUNhbGxlZShjYWxsZWVHcm91cExvY2tlciwgaSkpIHsKICAgICAgICAgICAg
IGlmIChPTUdDYWxsZWUqIHJlcGxhY2VtZW50Q2FsbGVlID0gYmJxQ2FsbGVlLT5yZXBsYWNlbWVu
dCgpKQogICAgICAgICAgICAgICAgIHJlcGF0Y2hDYWxscyhyZXBsYWNlbWVudENhbGxlZS0+d2Fz
bVRvV2FzbUNhbGxzaXRlcygpKTsKLSAgICAgICAgICAgIGlmIChPTUdGb3JPU1JFbnRyeUNhbGxl
ZSogb3NyRW50cnlDYWxsZWUgPSBiYnFDYWxsZWUtPm9zckVudHJ5Q2FsbGVlKCkpCisgICAgICAg
ICAgICBpZiAoT1NSRW50cnlDYWxsZWUqIG9zckVudHJ5Q2FsbGVlID0gYmJxQ2FsbGVlLT5vc3JF
bnRyeUNhbGxlZSgpKQogICAgICAgICAgICAgICAgIHJlcGF0Y2hDYWxscyhvc3JFbnRyeUNhbGxl
ZS0+d2FzbVRvV2FzbUNhbGxzaXRlcygpKTsKICAgICAgICAgfQogICAgIH0KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TbG93UGF0aHMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TbG93UGF0aHMuY3BwCShyZXZpc2lvbiAyODcz
MzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2xvd1BhdGhzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzgsOCArMzgsOCBAQAogI2luY2x1ZGUgIldhc21GdW5jdGlvbkNvZGVC
bG9jay5oIgogI2luY2x1ZGUgIldhc21JbnN0YW5jZS5oIgogI2luY2x1ZGUgIldhc21Nb2R1bGVJ
bmZvcm1hdGlvbi5oIgotI2luY2x1ZGUgIldhc21PTUdGb3JPU1JFbnRyeVBsYW4uaCIKICNpbmNs
dWRlICJXYXNtT01HUGxhbi5oIgorI2luY2x1ZGUgIldhc21PU1JFbnRyeVBsYW4uaCIKICNpbmNs
dWRlICJXYXNtT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIldhc21TaWduYXR1cmVJbmxpbmVzLmgi
CiAjaW5jbHVkZSAiV2FzbVdvcmtsaXN0LmgiCkBAIC0xODUsNjAgKzE4NSw4OCBAQCBXQVNNX1NM
T1dfUEFUSF9ERUNMKGxvb3Bfb3NyKQogICAgIHVuc2lnbmVkIGxvb3BPU1JFbnRyeUJ5dGVjb2Rl
T2Zmc2V0ID0gY29kZUJsb2NrLT5ieXRlY29kZU9mZnNldChwYyk7CiAgICAgY29uc3QgYXV0byYg
b3NyRW50cnlEYXRhID0gdGllclVwQ291bnRlci5vc3JFbnRyeURhdGFGb3JMb29wKGxvb3BPU1JF
bnRyeUJ5dGVjb2RlT2Zmc2V0KTsKIAotICAgIGlmICghdGllclVwQ291bnRlci5jaGVja0lmT3B0
aW1pemF0aW9uVGhyZXNob2xkUmVhY2hlZCgpKSB7Ci0gICAgICAgIGRhdGFMb2dMbklmKE9wdGlv
bnM6OnZlcmJvc2VPU1IoKSwgIiAgICBKSVQgdGhyZXNob2xkIHNob3VsZCBiZSBsaWZ0ZWQuIik7
Ci0gICAgICAgIFdBU01fUkVUVVJOX1RXTyhudWxscHRyLCBudWxscHRyKTsKLSAgICB9Ci0KLSAg
ICBjb25zdCBhdXRvIGRvT1NSRW50cnkgPSBbJl0oV2FzbTo6T01HRm9yT1NSRW50cnlDYWxsZWUq
IG9zckVudHJ5Q2FsbGVlKSB7Ci0gICAgICAgIGlmIChvc3JFbnRyeUNhbGxlZS0+bG9vcEluZGV4
KCkgIT0gb3NyRW50cnlEYXRhLmxvb3BJbmRleCkKKyAgICBpZiAoT3B0aW9uczo6d2FzbUxMSW50
VGllcnNVcFRvQkJRKCkgJiYgaW5zdGFuY2UtPm1vZHVsZSgpLm1vZHVsZUluZm9ybWF0aW9uKCku
bV9mdW5jdGlvbkRvZXNOb3RVc2VFeGNlcHRpb25zLnF1aWNrR2V0KGNvZGVCbG9jay0+ZnVuY3Rp
b25JbmRleCgpKSkgeworICAgICAgICBpZiAoIWppdENvbXBpbGVBbmRTZXRIZXVyaXN0aWNzKGNh
bGxlZSwgY29kZUJsb2NrLCBpbnN0YW5jZSkpCiAgICAgICAgICAgICBXQVNNX1JFVFVSTl9UV08o
bnVsbHB0ciwgbnVsbHB0cik7CiAKLSAgICAgICAgc2l6ZV90IG9zckVudHJ5U2NyYXRjaEJ1ZmZl
clNpemUgPSBvc3JFbnRyeUNhbGxlZS0+b3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSgpOwotICAg
ICAgICBSRUxFQVNFX0FTU0VSVChvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplID09IG9zckVudHJ5
RGF0YS52YWx1ZXMuc2l6ZSgpKTsKKyAgICAgICAgV2FzbTo6QkJRQ2FsbGVlKiBjYWxsZWU7Cisg
ICAgICAgIHsKKyAgICAgICAgICAgIExvY2tlciBsb2NrZXIgeyBpbnN0YW5jZS0+Y2FsbGVlR3Jv
dXAoKS0+bV9sb2NrIH07CisgICAgICAgICAgICBjYWxsZWUgPSBpbnN0YW5jZS0+Y2FsbGVlR3Jv
dXAoKS0+YmJxQ2FsbGVlKGxvY2tlciwgY29kZUJsb2NrLT5mdW5jdGlvbkluZGV4KCkpOworICAg
ICAgICB9CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxlZSk7CisKKyAgICAgICAgc2l6ZV90
IG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUgPSBjYWxsZWUtPm9zckVudHJ5U2NyYXRjaEJ1ZmZl
clNpemUoKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQob3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6
ZSA+PSBvc3JFbnRyeURhdGEudmFsdWVzLnNpemUoKSk7CiAgICAgICAgIHVpbnQ2NF90KiBidWZm
ZXIgPSBpbnN0YW5jZS0+Y29udGV4dCgpLT5zY3JhdGNoQnVmZmVyRm9yU2l6ZShvc3JFbnRyeVNj
cmF0Y2hCdWZmZXJTaXplKTsKICAgICAgICAgaWYgKCFidWZmZXIpCiAgICAgICAgICAgICBXQVNN
X1JFVFVSTl9UV08obnVsbHB0ciwgbnVsbHB0cik7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKG9z
ckVudHJ5RGF0YS5sb29wSW5kZXggPCBjYWxsZWUtPmxvb3BFbnRyeXBvaW50cygpLnNpemUoKSk7
CiAKICAgICAgICAgdWludDMyX3QgaW5kZXggPSAwOwogICAgICAgICBmb3IgKFZpcnR1YWxSZWdp
c3RlciByZWcgOiBvc3JFbnRyeURhdGEudmFsdWVzKQogICAgICAgICAgICAgYnVmZmVyW2luZGV4
KytdID0gUkVBRChyZWcpLmVuY29kZWRKU1ZhbHVlKCk7CiAKLSAgICAgICAgV0FTTV9SRVRVUk5f
VFdPKGJ1ZmZlciwgb3NyRW50cnlDYWxsZWUtPmVudHJ5cG9pbnQoKS5leGVjdXRhYmxlQWRkcmVz
cygpKTsKLSAgICB9OworICAgICAgICBkYXRhTG9nTG4oIk9TUiBlbnRlcmluZyBpbnRvIEJCUSBB
aXIhIik7CisgICAgICAgIFdBU01fUkVUVVJOX1RXTyhidWZmZXIsIGNhbGxlZS0+bG9vcEVudHJ5
cG9pbnRzKClbb3NyRW50cnlEYXRhLmxvb3BJbmRleF0uZXhlY3V0YWJsZUFkZHJlc3MoKSk7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKCF0aWVyVXBDb3VudGVyLmNoZWNrSWZPcHRpbWl6YXRp
b25UaHJlc2hvbGRSZWFjaGVkKCkpIHsKKyAgICAgICAgICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6
OnZlcmJvc2VPU1IoKSwgIiAgICBKSVQgdGhyZXNob2xkIHNob3VsZCBiZSBsaWZ0ZWQuIik7Cisg
ICAgICAgICAgICBXQVNNX1JFVFVSTl9UV08obnVsbHB0ciwgbnVsbHB0cik7CisgICAgICAgIH0K
IAotICAgIGlmIChhdXRvKiBvc3JFbnRyeUNhbGxlZSA9IGNhbGxlZS0+b3NyRW50cnlDYWxsZWUo
aW5zdGFuY2UtPm1lbW9yeSgpLT5tb2RlKCkpKQotICAgICAgICByZXR1cm4gZG9PU1JFbnRyeShv
c3JFbnRyeUNhbGxlZSk7CisgICAgICAgIGNvbnN0IGF1dG8gZG9PU1JFbnRyeSA9IFsmXShXYXNt
OjpPU1JFbnRyeUNhbGxlZSogb3NyRW50cnlDYWxsZWUpIHsKKyAgICAgICAgICAgIGlmIChvc3JF
bnRyeUNhbGxlZS0+bG9vcEluZGV4KCkgIT0gb3NyRW50cnlEYXRhLmxvb3BJbmRleCkKKyAgICAg
ICAgICAgICAgICBXQVNNX1JFVFVSTl9UV08obnVsbHB0ciwgbnVsbHB0cik7CisKKyAgICAgICAg
ICAgIHNpemVfdCBvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplID0gb3NyRW50cnlDYWxsZWUtPm9z
ckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUoKTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG9z
ckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUgPT0gb3NyRW50cnlEYXRhLnZhbHVlcy5zaXplKCkpOwor
ICAgICAgICAgICAgdWludDY0X3QqIGJ1ZmZlciA9IGluc3RhbmNlLT5jb250ZXh0KCktPnNjcmF0
Y2hCdWZmZXJGb3JTaXplKG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUpOworICAgICAgICAgICAg
aWYgKCFidWZmZXIpCisgICAgICAgICAgICAgICAgV0FTTV9SRVRVUk5fVFdPKG51bGxwdHIsIG51
bGxwdHIpOworCisgICAgICAgICAgICB1aW50MzJfdCBpbmRleCA9IDA7CisgICAgICAgICAgICBm
b3IgKFZpcnR1YWxSZWdpc3RlciByZWcgOiBvc3JFbnRyeURhdGEudmFsdWVzKQorICAgICAgICAg
ICAgICAgIGJ1ZmZlcltpbmRleCsrXSA9IFJFQUQocmVnKS5lbmNvZGVkSlNWYWx1ZSgpOworCisg
ICAgICAgICAgICBXQVNNX1JFVFVSTl9UV08oYnVmZmVyLCBvc3JFbnRyeUNhbGxlZS0+ZW50cnlw
b2ludCgpLmV4ZWN1dGFibGVBZGRyZXNzKCkpOworICAgICAgICB9OworCisgICAgICAgIGlmIChh
dXRvKiBvc3JFbnRyeUNhbGxlZSA9IGNhbGxlZS0+b3NyRW50cnlDYWxsZWUoaW5zdGFuY2UtPm1l
bW9yeSgpLT5tb2RlKCkpKQorICAgICAgICAgICAgcmV0dXJuIGRvT1NSRW50cnkob3NyRW50cnlD
YWxsZWUpOworCisgICAgICAgIGJvb2wgY29tcGlsZSA9IGZhbHNlOworICAgICAgICB7CisgICAg
ICAgICAgICBMb2NrZXIgbG9ja2VyIHsgdGllclVwQ291bnRlci5tX2xvY2sgfTsKKyAgICAgICAg
ICAgIHN3aXRjaCAodGllclVwQ291bnRlci5tX2xvb3BDb21waWxhdGlvblN0YXR1cykgeworICAg
ICAgICAgICAgY2FzZSBXYXNtOjpMTEludFRpZXJVcENvdW50ZXI6OkNvbXBpbGF0aW9uU3RhdHVz
OjpOb3RDb21waWxlZDoKKyAgICAgICAgICAgICAgICBjb21waWxlID0gdHJ1ZTsKKyAgICAgICAg
ICAgICAgICB0aWVyVXBDb3VudGVyLm1fbG9vcENvbXBpbGF0aW9uU3RhdHVzID0gV2FzbTo6TExJ
bnRUaWVyVXBDb3VudGVyOjpDb21waWxhdGlvblN0YXR1czo6Q29tcGlsaW5nOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBXYXNtOjpMTEludFRpZXJVcENvdW50ZXI6
OkNvbXBpbGF0aW9uU3RhdHVzOjpDb21waWxpbmc6CisgICAgICAgICAgICAgICAgdGllclVwQ291
bnRlci5vcHRpbWl6ZUFmdGVyV2FybVVwKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICBjYXNlIFdhc206OkxMSW50VGllclVwQ291bnRlcjo6Q29tcGlsYXRpb25TdGF0dXM6
OkNvbXBpbGVkOgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAg
ICB9CiAKLSAgICBib29sIGNvbXBpbGUgPSBmYWxzZTsKLSAgICB7Ci0gICAgICAgIExvY2tlciBs
b2NrZXIgeyB0aWVyVXBDb3VudGVyLm1fbG9jayB9OwotICAgICAgICBzd2l0Y2ggKHRpZXJVcENv
dW50ZXIubV9sb29wQ29tcGlsYXRpb25TdGF0dXMpIHsKLSAgICAgICAgY2FzZSBXYXNtOjpMTElu
dFRpZXJVcENvdW50ZXI6OkNvbXBpbGF0aW9uU3RhdHVzOjpOb3RDb21waWxlZDoKLSAgICAgICAg
ICAgIGNvbXBpbGUgPSB0cnVlOwotICAgICAgICAgICAgdGllclVwQ291bnRlci5tX2xvb3BDb21w
aWxhdGlvblN0YXR1cyA9IFdhc206OkxMSW50VGllclVwQ291bnRlcjo6Q29tcGlsYXRpb25TdGF0
dXM6OkNvbXBpbGluZzsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFdhc206OkxM
SW50VGllclVwQ291bnRlcjo6Q29tcGlsYXRpb25TdGF0dXM6OkNvbXBpbGluZzoKLSAgICAgICAg
ICAgIHRpZXJVcENvdW50ZXIub3B0aW1pemVBZnRlcldhcm1VcCgpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgV2FzbTo6TExJbnRUaWVyVXBDb3VudGVyOjpDb21waWxhdGlvblN0
YXR1czo6Q29tcGlsZWQ6Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgaWYgKGNvbXBpbGUp
IHsKKyAgICAgICAgICAgIFJlZjxXYXNtOjpQbGFuPiBwbGFuID0gYWRvcHRSZWYoKnN0YXRpY19j
YXN0PFdhc206OlBsYW4qPihuZXcgV2FzbTo6T1NSRW50cnlQbGFuKGluc3RhbmNlLT5jb250ZXh0
KCksIFJlZjxXYXNtOjpNb2R1bGU+KGluc3RhbmNlLT5tb2R1bGUoKSksIFJlZjxXYXNtOjpDYWxs
ZWU+KCpjYWxsZWUpLCBjb2RlQmxvY2stPmZ1bmN0aW9uSW5kZXgoKSwgb3NyRW50cnlEYXRhLmxv
b3BJbmRleCwgaW5zdGFuY2UtPm1lbW9yeSgpLT5tb2RlKCksIFdhc206OlBsYW46OmRvbnRGaW5h
bGl6ZSgpKSkpOworICAgICAgICAgICAgV2FzbTo6ZW5zdXJlV29ya2xpc3QoKS5lbnF1ZXVlKHBs
YW4uY29weVJlZigpKTsKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWSghT3B0aW9uczo6dXNlQ29u
Y3VycmVudEpJVCgpKSkKKyAgICAgICAgICAgICAgICBwbGFuLT53YWl0Rm9yQ29tcGxldGlvbigp
OworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHRpZXJVcENvdW50ZXIub3B0aW1p
emVBZnRlcldhcm1VcCgpOwogICAgICAgICB9Ci0gICAgfQogCi0gICAgaWYgKGNvbXBpbGUpIHsK
LSAgICAgICAgUmVmPFdhc206OlBsYW4+IHBsYW4gPSBhZG9wdFJlZigqc3RhdGljX2Nhc3Q8V2Fz
bTo6UGxhbio+KG5ldyBXYXNtOjpPTUdGb3JPU1JFbnRyeVBsYW4oaW5zdGFuY2UtPmNvbnRleHQo
KSwgUmVmPFdhc206Ok1vZHVsZT4oaW5zdGFuY2UtPm1vZHVsZSgpKSwgUmVmPFdhc206OkNhbGxl
ZT4oKmNhbGxlZSksIGNvZGVCbG9jay0+ZnVuY3Rpb25JbmRleCgpLCBvc3JFbnRyeURhdGEubG9v
cEluZGV4LCBpbnN0YW5jZS0+bWVtb3J5KCktPm1vZGUoKSwgV2FzbTo6UGxhbjo6ZG9udEZpbmFs
aXplKCkpKSk7Ci0gICAgICAgIFdhc206OmVuc3VyZVdvcmtsaXN0KCkuZW5xdWV1ZShwbGFuLmNv
cHlSZWYoKSk7Ci0gICAgICAgIGlmIChVTkxJS0VMWSghT3B0aW9uczo6dXNlQ29uY3VycmVudEpJ
VCgpKSkKLSAgICAgICAgICAgIHBsYW4tPndhaXRGb3JDb21wbGV0aW9uKCk7Ci0gICAgICAgIGVs
c2UKLSAgICAgICAgICAgIHRpZXJVcENvdW50ZXIub3B0aW1pemVBZnRlcldhcm1VcCgpOworICAg
ICAgICBpZiAoYXV0byogb3NyRW50cnlDYWxsZWUgPSBjYWxsZWUtPm9zckVudHJ5Q2FsbGVlKGlu
c3RhbmNlLT5tZW1vcnkoKS0+bW9kZSgpKSkKKyAgICAgICAgICAgIHJldHVybiBkb09TUkVudHJ5
KG9zckVudHJ5Q2FsbGVlKTsKKworICAgICAgICBXQVNNX1JFVFVSTl9UV08obnVsbHB0ciwgbnVs
bHB0cik7CiAgICAgfQogCi0gICAgaWYgKGF1dG8qIG9zckVudHJ5Q2FsbGVlID0gY2FsbGVlLT5v
c3JFbnRyeUNhbGxlZShpbnN0YW5jZS0+bWVtb3J5KCktPm1vZGUoKSkpCi0gICAgICAgIHJldHVy
biBkb09TUkVudHJ5KG9zckVudHJ5Q2FsbGVlKTsKIAotICAgIFdBU01fUkVUVVJOX1RXTyhudWxs
cHRyLCBudWxscHRyKTsKIH0KIAogV0FTTV9TTE9XX1BBVEhfREVDTChlcGlsb2d1ZV9vc3IpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1RvV2FzbS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNUb1dhc20uY3BwCShyZXZpc2lv
biAyODczMzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1RvV2FzbS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE3OCw5ICsxNzgsOSBAQCBzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJu
YWxGdW5jdGlvbj4gY3JlYXRlCiAgICAgaml0LmVtaXRaZXJvVG9DYWxsRnJhbWVIZWFkZXIoQ2Fs
bEZyYW1lU2xvdDo6Y29kZUJsb2NrKTsKICAgICBNYWNyb0Fzc2VtYmxlcjo6RGF0YUxhYmVsUHRy
IGNhbGxlZU1vdmVMb2NhdGlvbiA9IGppdC5tb3ZlV2l0aFBhdGNoKE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tUHRyKG51bGxwdHIpLCBHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25SZXR1cm5HUFIp
OwogICAgIGppdC5lbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIoR1BSSW5mbzo6bm9uUHJlc2VydmVk
Tm9uUmV0dXJuR1BSLCBDYWxsRnJhbWVTbG90OjpjYWxsZWUpOwotICAgIENvZGVMb2NhdGlvbkRh
dGFMYWJlbFB0cjxXYXNtRW50cnlQdHJUYWc+KiBsaW5rZWRDYWxsZWVNb3ZlID0gJnJlc3VsdC0+
Y2FsbGVlTW92ZUxvY2F0aW9uOworICAgIFZlY3RvcjxDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHI8
V2FzbUVudHJ5UHRyVGFnPj4qIGxpbmtlZENhbGxlZU1vdmUgPSAmcmVzdWx0LT5jYWxsZWVNb3Zl
TG9jYXRpb25zOwogICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZm
ZXIpIHsKLSAgICAgICAgKmxpbmtlZENhbGxlZU1vdmUgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8
V2FzbUVudHJ5UHRyVGFnPihjYWxsZWVNb3ZlTG9jYXRpb24pOworICAgICAgICBsaW5rZWRDYWxs
ZWVNb3ZlLT5hcHBlbmQobGlua0J1ZmZlci5sb2NhdGlvbk9mPFdhc21FbnRyeVB0clRhZz4oY2Fs
bGVlTW92ZUxvY2F0aW9uKSk7CiAgICAgfSk7CiAKICAgICBjb25zdCBQaW5uZWRSZWdpc3Rlcklu
Zm8mIHBpbm5lZFJlZ3MgPSBQaW5uZWRSZWdpc3RlckluZm86OmdldCgpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>447849</attachid>
            <date>2021-12-22 17:54:46 -0800</date>
            <delta_ts>2021-12-22 17:54:46 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>99623</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyODczNjEpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDEyIEBACisyMDIxLTEyLTIyICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUu
Y29tPgorCisgICAgICAgIExMSW50IHNob3VsZCBsb29wIE9TUiBpbnRvIEJCUSBhbmQgQkJRIHNo
b3VsZCBsb29wIE9TUiBpbnRvIE9NRworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjM0NTQyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiB3YXNtL3dhc3QtdGVzdHMvaGFybmVzcy5qczoKKwogMjAyMS0xMi0x
OSAgUm9zcyBLaXJzbGluZyAgPHJvc3Mua2lyc2xpbmdAc29ueS5jb20+CiAKICAgICAgICAgW0pT
Q10gT3BQb3cgc2hvdWxkIGhhdmUgYSAic21hbGwgaW50IGV4cG9uZW50IiBmYXN0IHBhdGggYXQg
bG93ZXIgdGllcnMKSW5kZXg6IEpTVGVzdHMvd2FzbS93YXN0LXRlc3RzL2hhcm5lc3MuanMKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gSlNUZXN0cy93YXNtL3dhc3QtdGVzdHMvaGFybmVzcy5qcwkocmV2aXNpb24g
Mjg3MzM5KQorKysgSlNUZXN0cy93YXNtL3dhc3QtdGVzdHMvaGFybmVzcy5qcwkod29ya2luZyBj
b3B5KQpAQCAtNCw2ICs0LDcgQEAgbGV0IGNvbnRleHQgPSB7CiB9OwogCiBnbG9iYWxUaGlzLl9f
bGluZWFyX21lbW9yeSA9IG5ldyBXZWJBc3NlbWJseS5NZW1vcnkoeyBpbml0aWFsOiAxIH0pOwor
Z2xvYmFsVGhpcy5jYWxsZXJJc09NR0NvbXBpbGVkID0gY2FsbGVySXNCQlFPck9NR0NvbXBpbGVk
OyAvLyBDYW4ndCBjaGFuZ2UgdGhlIC53YXN0IGVhc2lseS4uLgogCiBhc3luYyBmdW5jdGlvbiBy
dW5XYXNtRmlsZShmaWxlUGF0aCkgewogICAgIGxldCBibG9iID0gcmVhZEZpbGUoZmlsZVBhdGgs
ICJiaW5hcnkiKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjg3MzM5
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAt
MSwzICsxLDUyIEBACisyMDIxLTEyLTIyICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29t
PgorCisgICAgICAgIExMSW50IHNob3VsZCBsb29wIE9TUiBpbnRvIEJCUSBhbmQgQkJRIHNob3Vs
ZCBsb29wIE9TUiBpbnRvIE9NRworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjM0NTQyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgSXQncyBhIHN0YXJ0dXAgcGVyZiBpbXByb3ZlbWVudCBvbiBzb21lIFdhc20g
YmVuY2htYXJrcyBJJ20gcnVubmluZyB0byBoYXZlCisgICAgICAgIFdhc20gTExJbnQgZG8gbG9v
cCBPU1IgZW50cnkgaW50byBCQlEgaW5zdGVhZCBvZiBPTUcuIFRoaXMgaW1wcm92ZXMgdGhpcwor
ICAgICAgICBiZW5jaG1hcmsgYnkgNSUuIFRoZXJlIGlzIHByb2JhYmx5IG1vcmUgcGVyZiB0byBi
ZSBoYWQgaGVyZS4gQ3VycmVudGx5LAorICAgICAgICB3ZSdyZSBqdXN0IE9TUiBlbnRlcmluZyBp
bnRvIEIzIEJCUSBPMS4gSG93ZXZlciwgaW4gdGhlIGZ1dHVyZSwgd2Ugc2hvdWxkCisgICAgICAg
IGp1c3QgY29tcGlsZSBhIHNpbmdsZSBBaXIgQkJRIENhbGxlZSB0aGF0IGFsbG93cyBmb3IgT1NS
IGVudHJ5IGF0IGxvb3AKKyAgICAgICAgYm91bmRhcmllcy4gTWF5YmUgd2UgY2FuIG1vZGVsIHRo
aXMgdXNpbmcgRW50cnlTd2l0Y2ggd2l0aG91dCBhbnkgcmVhbAorICAgICAgICBoYXJtIHRvIHRo
cm91Z2hwdXQuCisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qOgorICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIGFzc2VtYmxlci9NYWNy
b0Fzc2VtYmxlckNvZGVSZWYuY3BwOgorICAgICAgICAoSlNDOjpzaG91bGREdW1wRGlzYXNzZW1i
bHlGb3IpOgorICAgICAgICAqIGpzYy5jcHA6CisgICAgICAgIChKU0NfREVGSU5FX0hPU1RfRlVO
Q1RJT04pOgorICAgICAgICAqIHdhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwOgorICAgICAgICAo
SlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpCM0lSR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6
V2FzbTo6cGFyc2VBbmRDb21waWxlKToKKyAgICAgICAgKiB3YXNtL1dhc21DYWxsZWUuaDoKKyAg
ICAgICAgKEpTQzo6V2FzbTo6Q2FsbGVlOjpzZXRPU1JFbnRyeUNhbGxlZSk6IERlbGV0ZWQuCisg
ICAgICAgICogd2FzbS9XYXNtQ2FsbGVlR3JvdXAuaDoKKyAgICAgICAgKiB3YXNtL1dhc21Db21w
aWxhdGlvbk1vZGUuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjptYWtlU3RyaW5nKToKKyAgICAg
ICAgKiB3YXNtL1dhc21Db21waWxhdGlvbk1vZGUuaDoKKyAgICAgICAgKEpTQzo6V2FzbTo6aXNP
U1JFbnRyeSk6CisgICAgICAgIChKU0M6Oldhc206OmlzQW55QkJRKToKKyAgICAgICAgKEpTQzo6
V2FzbTo6aXNBbnlPTUcpOgorICAgICAgICAqIHdhc20vV2FzbU9NR0Zvck9TUkVudHJ5UGxhbi5j
cHA6IFJlbW92ZWQuCisgICAgICAgICogd2FzbS9XYXNtT01HRm9yT1NSRW50cnlQbGFuLmg6IFJl
bW92ZWQuCisgICAgICAgICogd2FzbS9XYXNtT1NSRW50cnlQbGFuLmNwcDogQ29waWVkIGZyb20g
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9NR0Zvck9TUkVudHJ5UGxhbi5jcHAuCisg
ICAgICAgIChKU0M6Oldhc206Ok9TUkVudHJ5UGxhbjo6T1NSRW50cnlQbGFuKToKKyAgICAgICAg
KEpTQzo6V2FzbTo6T1NSRW50cnlQbGFuOjp3b3JrKToKKyAgICAgICAgKEpTQzo6V2FzbTo6T01H
Rm9yT1NSRW50cnlQbGFuOjpPTUdGb3JPU1JFbnRyeVBsYW4pOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpXYXNtOjpPTUdGb3JPU1JFbnRyeVBsYW46OndvcmspOiBEZWxldGVkLgorICAgICAgICAq
IHdhc20vV2FzbU9TUkVudHJ5UGxhbi5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtT01HRm9yT1NSRW50cnlQbGFuLmguCisgICAgICAgICogd2FzbS9XYXNtT3Bl
cmF0aW9ucy5jcHA6CisgICAgICAgIChKU0M6Oldhc206OmRvT1NSRW50cnkpOgorICAgICAgICAo
SlNDOjpXYXNtOjpKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04pOgorICAgICAgICAqIHdhc20vV2Fz
bVBsYW4uY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpQbGFuOjp1cGRhdGVDYWxsU2l0ZXNUb0Nh
bGxVcyk6CisgICAgICAgICogd2FzbS9XYXNtU2xvd1BhdGhzLmNwcDoKKyAgICAgICAgKEpTQzo6
TExJbnQ6OldBU01fU0xPV19QQVRIX0RFQ0wpOgorCiAyMDIxLTEyLTIxICBaYW4gRG9iZXJzZWsg
IDx6ZG9iZXJzZWtAaWdhbGlhLmNvbT4KIAogICAgICAgICBbUklTQ1Y2NF0gQWRkIG9yIGVuYWJs
ZSBtaXNzaW5nIENQVShSSVNDVjY0KSBjb2RlcGF0aHMgaW4gYmFzZWxpbmUgSklUCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CShyZXZpc2lvbiAyODczMzkpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvU291cmNlcy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEwOTgsOCArMTA5OCw4
IEBAIHdhc20vV2FzbU1lbW9yeU1vZGUuY3BwCiB3YXNtL1dhc21Nb2R1bGUuY3BwCiB3YXNtL1dh
c21Nb2R1bGVJbmZvcm1hdGlvbi5jcHAKIHdhc20vV2FzbU5hbWVTZWN0aW9uUGFyc2VyLmNwcAot
d2FzbS9XYXNtT01HRm9yT1NSRW50cnlQbGFuLmNwcAogd2FzbS9XYXNtT01HUGxhbi5jcHAKK3dh
c20vV2FzbU9TUkVudHJ5UGxhbi5jcHAKIHdhc20vV2FzbU9wY29kZU9yaWdpbi5jcHAKIHdhc20v
V2FzbU9wZXJhdGlvbnMuY3BwCiB3YXNtL1dhc21QYWdlQ291bnQuY3BwCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvanNjLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvanNjLmNwcAkocmV2aXNpb24gMjg3MzM5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pz
Yy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwOSw3ICszMDksNyBAQCBzdGF0aWMgSlNDX0RFQ0xB
UkVfSE9TVF9GVU5DVElPTihmdW5jdGlvCiBzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElP
TihmdW5jdGlvbk5vT1NSRXhpdEZ1enppbmcpOwogc3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVO
Q1RJT04oZnVuY3Rpb25PcHRpbWl6ZU5leHRJbnZvY2F0aW9uKTsKIHN0YXRpYyBKU0NfREVDTEFS
RV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9uTnVtYmVyT2ZERkdDb21waWxlcyk7Ci1zdGF0aWMgSlND
X0RFQ0xBUkVfSE9TVF9GVU5DVElPTihmdW5jdGlvbkNhbGxlcklzT01HQ29tcGlsZWQpOworc3Rh
dGljIEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04oZnVuY3Rpb25DYWxsZXJJc0JCUU9yT01HQ29t
cGlsZWQpOwogc3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04oZnVuY3Rpb25KU0NPcHRp
b25zKTsKIHN0YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9uUmVvcHRpbWl6
YXRpb25SZXRyeUNvdW50KTsKIHN0YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKGZ1bmN0
aW9uVHJhbnNmZXJBcnJheUJ1ZmZlcik7CkBAIC01NTksNyArNTU5LDcgQEAgcHJpdmF0ZToKICAg
ICAgICAgYWRkRnVuY3Rpb24odm0sICJub0ZUTCIsIGZ1bmN0aW9uTm9GVEwsIDEpOwogICAgICAg
ICBhZGRGdW5jdGlvbih2bSwgIm5vT1NSRXhpdEZ1enppbmciLCBmdW5jdGlvbk5vT1NSRXhpdEZ1
enppbmcsIDEpOwogICAgICAgICBhZGRGdW5jdGlvbih2bSwgIm51bWJlck9mREZHQ29tcGlsZXMi
LCBmdW5jdGlvbk51bWJlck9mREZHQ29tcGlsZXMsIDEpOwotICAgICAgICBhZGRGdW5jdGlvbih2
bSwgImNhbGxlcklzT01HQ29tcGlsZWQiLCBmdW5jdGlvbkNhbGxlcklzT01HQ29tcGlsZWQsIDAp
OworICAgICAgICBhZGRGdW5jdGlvbih2bSwgImNhbGxlcklzQkJRT3JPTUdDb21waWxlZCIsIGZ1
bmN0aW9uQ2FsbGVySXNCQlFPck9NR0NvbXBpbGVkLCAwKTsKICAgICAgICAgYWRkRnVuY3Rpb24o
dm0sICJqc2NPcHRpb25zIiwgZnVuY3Rpb25KU0NPcHRpb25zLCAwKTsKICAgICAgICAgYWRkRnVu
Y3Rpb24odm0sICJvcHRpbWl6ZU5leHRJbnZvY2F0aW9uIiwgZnVuY3Rpb25PcHRpbWl6ZU5leHRJ
bnZvY2F0aW9uLCAxKTsKICAgICAgICAgYWRkRnVuY3Rpb24odm0sICJyZW9wdGltaXphdGlvblJl
dHJ5Q291bnQiLCBmdW5jdGlvblJlb3B0aW1pemF0aW9uUmV0cnlDb3VudCwgMSk7CkBAIC0xODg2
LDcgKzE4ODYsNyBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oZnVuY3Rpb25OdW1iZXJPCiAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShudW1iZXJPZkRGR0NvbXBpbGVzKGdsb2JhbE9iamVj
dCwgY2FsbEZyYW1lKSk7CiB9CiAKLUpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihmdW5jdGlvbkNh
bGxlcklzT01HQ29tcGlsZWQsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJh
bWUqIGNhbGxGcmFtZSkpCitKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oZnVuY3Rpb25DYWxsZXJJ
c0JCUU9yT01HQ29tcGlsZWQsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJh
bWUqIGNhbGxGcmFtZSkpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTE5MDYsNyArMTkwNiw3
IEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihmdW5jdGlvbkNhbGxlckkKICAgICBBU1NFUlQo
d2FzbUZyYW1lLmNhbGxlckZyYW1lKCktPmNhbGxlZSgpLmlzV2FzbSgpKTsKICNpZiBFTkFCTEUo
V0VCQVNTRU1CTFkpCiAgICAgYXV0byBtb2RlID0gd2FzbUZyYW1lLmNhbGxlckZyYW1lKCktPmNh
bGxlZSgpLmFzV2FzbUNhbGxlZSgpLT5jb21waWxhdGlvbk1vZGUoKTsKLSAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihtb2RlID09IFdhc206OkNvbXBpbGF0aW9uTW9kZTo6T01H
TW9kZSB8fCBtb2RlID09IFdhc206OkNvbXBpbGF0aW9uTW9kZTo6T01HRm9yT1NSRW50cnlNb2Rl
KSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oaXNBbnlCQlEobW9kZSkg
fHwgaXNBbnlPTUcobW9kZSkpKTsKICNlbmRpZgogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjg3
MzM5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTg5NSw2ICs4OTUsNyBAQAogCQk1MjY3
Q0Y4MjI0OTMxNkIxMDAyMkJGNkQgLyogRmFzdEpJVFBlcm1pc3Npb25zLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MjY3Q0Y4MTI0OTMxNkFEMDAyMkJG
NkQgLyogRmFzdEpJVFBlcm1pc3Npb25zLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTI2QUM0QjcxRTk3N0M1RDAwMzUwMEUxIC8qIFdhc21DYWxs
ZWVHcm91cC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTI2QUM0QjUxRTk3N0M1RDAwMzUwMEUxIC8qIFdhc21DYWxsZWVHcm91cC5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUyN0NFMzU0MjI1NTVGRTUw
MEM2RjM4MiAvKiBKU1RvV2FzbUlDQ2FsbGVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1MjdDRTM1MzIyNTU1RkREMDBDNkYzODIgLyogSlNUb1dhc21J
Q0NhbGxlZS5oICovOyB9OworCQk1MjdFNkNFQzI3NzJCOUNCMDA1RTA3ODIgLyogV2FzbU9TUkVu
dHJ5UGxhbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTI3RTZDRUIyNzcyQjlDNTAwNUUwNzgyIC8qIFdhc21PU1JFbnRyeVBsYW4uaCAqLzsgfTsKIAkJ
NTI4NDdBREMyMUZGQjg2OTAwNjFBOURCIC8qIFdhc21BaXJJUkdlbmVyYXRvci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTI4NDdBREEyMUZGQjg2MzAw
NjFBOURCIC8qIFdhc21BaXJJUkdlbmVyYXRvci5oICovOyB9OwogCQk1MkIzMTBGQjE5NzRBRTYx
MDA4MDg1N0MgLyogRnVuY3Rpb25IYXNFeGVjdXRlZENhY2hlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkIzMTBGQTE5NzRBRTYxMDA4MDg1N0MgLyog
RnVuY3Rpb25IYXNFeGVjdXRlZENhY2hlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTJCMzExMDExOTc1QjQ2NzAwODA4NTdDIC8qIFR5cGVMb2Nh
dGlvbkNhY2hlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1MkIzMTEwMDE5NzVCNDY3MDA4MDg1N0MgLyogVHlwZUxvY2F0aW9uQ2FjaGUuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTkxMyw3ICsxOTE0
LDYgQEAKIAkJRTM2NUYzM0EyNEFBNjIzOTAwQzk5MUIyIC8qIEludGxEaXNwbGF5TmFtZXNDb25z
dHJ1Y3Rvci5sdXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEUzNjVGMzM5MjRBQTYyMTIwMEM5OTFCMiAvKiBJbnRsRGlzcGxheU5hbWVzQ29uc3RydWN0
b3IubHV0LmggKi87IH07CiAJCUUzNjVGMzNCMjRBQTYyM0IwMEM5OTFCMiAvKiBJbnRsRGlzcGxh
eU5hbWVzUHJvdG90eXBlLmx1dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRTM2NUYzMzgyNEFBNjIxMTAwQzk5MUIyIC8qIEludGxEaXNwbGF5TmFtZXNQ
cm90b3R5cGUubHV0LmggKi87IH07CiAJCUUzNjY0NDFFMjU0NDA5QjMwMDAxODc2RiAvKiBJbnRs
TGlzdEZvcm1hdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBFMzE4Q0E2OTI1NDQwNkI1MDA0REMxMjkgLyogSW50bExpc3RGb3JtYXQuY3BwICovOyB9
OwotCQlFMzZCNzY3MDIyRjhENjE5MDBEMDk4MTggLyogV2FzbU9NR0Zvck9TUkVudHJ5UGxhbi5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTM2Qjc2NkYy
MkY4RDYxMTAwRDA5ODE4IC8qIFdhc21PTUdGb3JPU1JFbnRyeVBsYW4uaCAqLzsgfTsKIAkJRTM2
Q0M5NDcyMDg2MzE0RjAwNTFGRkQ2IC8qIFdhc21DcmVhdGlvbk1vZGUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzNkNDOTQ2MjA4NjMxNEYwMDUxRkZE
NiAvKiBXYXNtQ3JlYXRpb25Nb2RlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJRTM2RURDRTUyNEYwOTc1NzAwRTYwREEyIC8qIENvbmN1cnJlbmN5
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMzZFRENF
NDI0RjA5NzU3MDBFNjBEQTIgLyogQ29uY3VycmVuY3kuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlFMzcxMTk5MjI1M0ZBODdGMDBCQTY5QTAgLyog
R2F0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTM3
MTE5OTEyNTNGQTg3RTAwQkE2OUEwIC8qIEdhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMzcwMCw2ICszNzAwLDggQEAKIAkJNTI3NzczREQx
QUFGODNBQzAwQkRFN0U4IC8qIFJ1bnRpbWVUeXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFJ1bnRpbWVUeXBlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNTI3Q0UzNTIyMjU1NUZERDAwQzZGMzgyIC8qIEpTVG9XYXNtSUNDYWxsZWUuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBuYW1lID0gSlNUb1dhc21JQ0NhbGxlZS5jcHA7IHBhdGggPSBqcy9KU1RvV2Fz
bUlDQ2FsbGVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTI3Q0UzNTMyMjU1
NUZERDAwQzZGMzgyIC8qIEpTVG9XYXNtSUNDYWxsZWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSlNUb1dh
c21JQ0NhbGxlZS5oOyBwYXRoID0ganMvSlNUb1dhc21JQ0NhbGxlZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk1MjdFNkNFQTI3NzJCOUM1MDA1RTA3ODIgLyogV2FzbU9TUkVudHJ5
UGxhbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXYXNtT1NSRW50cnlQbGFuLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTI3RTZDRUIyNzcyQjlDNTAwNUUwNzgyIC8qIFdhc21P
U1JFbnRyeVBsYW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2FzbU9TUkVudHJ5UGxhbi5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk1Mjg0N0FEOTIxRkZCODYzMDA2MUE5REIgLyogV2FzbUFp
cklSR2VuZXJhdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdhc21BaXJJUkdlbmVyYXRvci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyODQ3QURBMjFGRkI4NjMwMDYxQTlE
QiAvKiBXYXNtQWlySVJHZW5lcmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2FzbUFpcklSR2VuZXJh
dG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyQjMxMEZBMTk3NEFFNjEwMDgw
ODU3QyAvKiBGdW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRnVuY3Rp
b25IYXNFeGVjdXRlZENhY2hlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01MjQw
LDggKzUyNDIsNiBAQAogCQlFMzY1RjMzODI0QUE2MjExMDBDOTkxQjIgLyogSW50bERpc3BsYXlO
YW1lc1Byb3RvdHlwZS5sdXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW50
bERpc3BsYXlOYW1lc1Byb3RvdHlwZS5sdXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJRTM2NUYzMzkyNEFBNjIxMjAwQzk5MUIyIC8qIEludGxEaXNwbGF5TmFtZXNDb25zdHJ1Y3Rv
ci5sdXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW50bERpc3BsYXlOYW1l
c0NvbnN0cnVjdG9yLmx1dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMzZCNDgw
MTIzRTk1NzM4MDBFNEE2NkUgLyogVW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3IuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gVW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3IuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQlFMzZCNzY2RTIyRjhENjExMDBEMDk4MTggLyogV2FzbU9NR0Zv
ck9TUkVudHJ5UGxhbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXYXNtT01HRm9yT1NSRW50cnlQ
bGFuLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRTM2Qjc2NkYyMkY4RDYxMTAw
RDA5ODE4IC8qIFdhc21PTUdGb3JPU1JFbnRyeVBsYW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2FzbU9N
R0Zvck9TUkVudHJ5UGxhbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMzZDQzk0
NjIwODYzMTRGMDA1MUZGRDYgLyogV2FzbUNyZWF0aW9uTW9kZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBXYXNtQ3JlYXRpb25Nb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUUzNkVEQ0U0MjRGMDk3NTcwMEU2MERBMiAvKiBDb25jdXJyZW5jeS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb25jdXJyZW5jeS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlFMzcxMTk5MTI1M0ZBODdFMDBCQTY5QTAgLyogR2F0ZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHYXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC02NjA5LDggKzY2MDksNiBAQAogCQkJCUUzQkYxQkFEMjM4QUFFRDEwMDNBMUMy
QiAvKiBJc29IZWFwQ2VsbFR5cGUuaCAqLywKIAkJCQlFM0M4RUQ0MjIzQTFEQkM1MDAxMzE5NTgg
LyogSXNvSW5saW5lZEhlYXBDZWxsVHlwZS5oICovLAogCQkJCUZFNjVCMTUwMjc0ODYwMUYwMERC
NUIxNiAvKiBJc29JbmxpbmVkSGVhcENlbGxUeXBlSW5saW5lcy5oICovLAotCQkJCTUzN0ZFRUNE
Mjc0MkJERTAwMEM5RUZFRSAvKiBJc29NZW1vcnlBbGxvY2F0b3JCYXNlLmggKi8sCi0JCQkJNTM3
RkVFQ0EyNzQyQkRFMDAwQzlFRkVFIC8qIElzb01lbW9yeUFsbG9jYXRvckJhc2VJbmxpbmVzLmgg
Ki8sCiAJCQkJMEZEQ0UxMkMxRkFGQjRERTAwNkYzOTAxIC8qIElzb1N1YnNwYWNlLmNwcCAqLywK
IAkJCQkwRkRDRTEyQjFGQUZCNERFMDA2RjM5MDEgLyogSXNvU3Vic3BhY2UuaCAqLywKIAkJCQkw
RkQyRkQ5MjIwQjUyQkRDMDBGMDk0NDEgLyogSXNvU3Vic3BhY2VJbmxpbmVzLmggKi8sCkBAIC03
MjU1LDEwICs3MjUzLDEwIEBACiAJCQkJQUQ3QjRCMkQxRkEzRTI4NjAwQzlERjc5IC8qIFdhc21O
YW1lU2VjdGlvbi5oICovLAogCQkJCUFERDhGQTQ0MUVCMzA3NzEwMERGNTQyRiAvKiBXYXNtTmFt
ZVNlY3Rpb25QYXJzZXIuY3BwICovLAogCQkJCUFERDhGQTQzMUVCMzA3NzEwMERGNTQyRiAvKiBX
YXNtTmFtZVNlY3Rpb25QYXJzZXIuaCAqLywKLQkJCQlFMzZCNzY2RTIyRjhENjExMDBEMDk4MTgg
LyogV2FzbU9NR0Zvck9TUkVudHJ5UGxhbi5jcHAgKi8sCi0JCQkJRTM2Qjc2NkYyMkY4RDYxMTAw
RDA5ODE4IC8qIFdhc21PTUdGb3JPU1JFbnRyeVBsYW4uaCAqLywKIAkJCQk1MzExQkQ0ODFFQTU4
MUU1MDA1MjUyODEgLyogV2FzbU9NR1BsYW4uY3BwICovLAogCQkJCTUzMTFCRDQ5MUVBNTgxRTUw
MDUyNTI4MSAvKiBXYXNtT01HUGxhbi5oICovLAorCQkJCTUyN0U2Q0VBMjc3MkI5QzUwMDVFMDc4
MiAvKiBXYXNtT1NSRW50cnlQbGFuLmNwcCAqLywKKwkJCQk1MjdFNkNFQjI3NzJCOUM1MDA1RTA3
ODIgLyogV2FzbU9TUkVudHJ5UGxhbi5oICovLAogCQkJCTUzQzZGRUYwMUU4QUZFMEMwMEIxODQy
NSAvKiBXYXNtT3Bjb2RlT3JpZ2luLmNwcCAqLywKIAkJCQk1M0M2RkVFRTFFOEFERkE5MDBCMTg0
MjUgLyogV2FzbU9wY29kZU9yaWdpbi5oICovLAogCQkJCUUzOUQ4QjJDMjMwMjFFMUUwMDI2NTg1
MiAvKiBXYXNtT3BlcmF0aW9ucy5jcHAgKi8sCkBAIC05NzE3LDYgKzk3MTUsNyBAQAogCQkJCUE3
RTVBM0E4MTc5NzQzMkQwMEU4OTNDMCAvKiBDb21waWxhdGlvblJlc3VsdC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEY0RjExRTgyMDlCQ0RBQjAwNzA5NjU0IC8qIENvbXBpbGVyVGltaW5nU2NvcGUu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGRENFMTJBMUZBRkE4NUYwMDZGMzkwMSAvKiBDb21wbGV0
ZVN1YnNwYWNlLmggaW4gSGVhZGVycyAqLywKKwkJCQk1MjdFNkNFQzI3NzJCOUNCMDA1RTA3ODIg
LyogV2FzbU9TUkVudHJ5UGxhbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEMkZEOTQyMEI1MkJE
RTAwRjA5NDQxIC8qIENvbXBsZXRlU3Vic3BhY2VJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlCQzE4QzNGNDBFMTZGNUNEMDBCMzQ0NjAgLyogQ29tcGxldGlvbi5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEY2RkM3NTExOTYxMTBBODAwRTFEMDJEIC8qIENvbXBsZXhHZXRTdGF0dXMuaCBpbiBI
ZWFkZXJzICovLApAQCAtMTA5NzUsNyArMTA5NzQsNiBAQAogCQkJCUFENUI0MTZGMUVCQUZCNzcw
MDhFRkE0MyAvKiBXYXNtTmFtZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQUQ3QjRCMkUxRkEzRTI5
ODAwQzlERjc5IC8qIFdhc21OYW1lU2VjdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQUREOEZB
NDYxRUIzMDc5NzAwREY1NDJGIC8qIFdhc21OYW1lU2VjdGlvblBhcnNlci5oIGluIEhlYWRlcnMg
Ki8sCi0JCQkJRTM2Qjc2NzAyMkY4RDYxOTAwRDA5ODE4IC8qIFdhc21PTUdGb3JPU1JFbnRyeVBs
YW4uaCBpbiBIZWFkZXJzICovLAogCQkJCTUzMTFCRDRCMUVBNTgxRTUwMDUyNTI4MSAvKiBXYXNt
T01HUGxhbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTNDNkZFRUYxRThBREZBOTAwQjE4NDI1IC8q
IFdhc21PcGNvZGVPcmlnaW4uaCBpbiBIZWFkZXJzICovLAogCQkJCUUzOUQ4QjJFMjMwMjFFMjYw
MDI2NTg1MiAvKiBXYXNtT3BlcmF0aW9ucy5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQ29kZVJlZi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNv
ZGVSZWYuY3BwCShyZXZpc2lvbiAyODczMzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNz
ZW1ibGVyL01hY3JvQXNzZW1ibGVyQ29kZVJlZi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc3LDE1
ICs3NywxMCBAQCBib29sIHNob3VsZER1bXBEaXNhc3NlbWJseUZvcihXYXNtOjpDb21wCiB7CiAg
ICAgaWYgKE9wdGlvbnM6OmFzeW5jRGlzYXNzZW1ibHkoKSB8fCBPcHRpb25zOjpkdW1wRGlzYXNz
ZW1ibHkoKSB8fCBPcHRpb25zOjpkdW1wV2FzbURpc2Fzc2VtYmx5KCkpCiAgICAgICAgIHJldHVy
biB0cnVlOwotICAgIHN3aXRjaCAobW9kZSkgewotICAgIGNhc2UgV2FzbTo6Q29tcGlsYXRpb25N
b2RlOjpCQlFNb2RlOgorICAgIGlmIChXYXNtOjppc0FueUJCUShtb2RlKSkKICAgICAgICAgcmV0
dXJuIE9wdGlvbnM6OmR1bXBCQlFEaXNhc3NlbWJseSgpOwotICAgIGNhc2UgV2FzbTo6Q29tcGls
YXRpb25Nb2RlOjpPTUdNb2RlOgotICAgIGNhc2UgV2FzbTo6Q29tcGlsYXRpb25Nb2RlOjpPTUdG
b3JPU1JFbnRyeU1vZGU6CisgICAgaWYgKFdhc206OmlzQW55T01HKG1vZGUpKQogICAgICAgICBy
ZXR1cm4gT3B0aW9uczo6ZHVtcE9NR0Rpc2Fzc2VtYmx5KCk7Ci0gICAgZGVmYXVsdDoKLSAgICAg
ICAgYnJlYWs7Ci0gICAgfQogICAgIHJldHVybiBmYWxzZTsKIH0KIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUFpcklSR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQWlySVJHZW5lcmF0b3IuY3BwCShyZXZpc2lv
biAyODczMzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQWlySVJHZW5lcmF0
b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTgsNyArMjU4LDggQEAgcHVibGljOgogICAgICAg
ICAgICAgcmV0dXJuIGZhaWwoX19WQV9BUkdTX18pOyAgICAgICAgICAgICBcCiAgICAgfSB3aGls
ZSAoMCkKIAotICAgIEFpcklSR2VuZXJhdG9yKGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiwgQjM6
OlByb2NlZHVyZSYsIEludGVybmFsRnVuY3Rpb24qLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNt
Q2FsbD4mLCBNZW1vcnlNb2RlLCB1bnNpZ25lZCBmdW5jdGlvbkluZGV4LCBUaWVyVXBDb3VudCos
IGNvbnN0IFNpZ25hdHVyZSYpOworICAgIEFpcklSR2VuZXJhdG9yKGNvbnN0IE1vZHVsZUluZm9y
bWF0aW9uJiwgQjM6OlByb2NlZHVyZSYsIEludGVybmFsRnVuY3Rpb24qLCBWZWN0b3I8VW5saW5r
ZWRXYXNtVG9XYXNtQ2FsbD4mLCBNZW1vcnlNb2RlLCB1bnNpZ25lZCBmdW5jdGlvbkluZGV4LCBU
aWVyVXBDb3VudCosIGNvbnN0IFNpZ25hdHVyZSYsIHVuc2lnbmVkJiBvc3JFbnRyeVNjcmF0Y2hC
dWZmZXJTaXplKTsKKyAgICB2b2lkIGZpbmFsaXplRW50cnlwb2ludHMoKTsKIAogICAgIFBhcnRp
YWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEFyZ3VtZW50cyhjb25zdCBTaWduYXR1cmUm
KTsKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRMb2NhbChUeXBlLCB1
aW50MzJfdCk7CkBAIC03NDgsNiArNzQ5LDcgQEAgcHJpdmF0ZToKICAgICBWZWN0b3I8dWludDMy
X3Q+IG1fb3V0ZXJMb29wczsKICAgICBCYXNpY0Jsb2NrKiBtX2N1cnJlbnRCbG9jayB7IG51bGxw
dHIgfTsKICAgICBCYXNpY0Jsb2NrKiBtX3Jvb3RCbG9jayB7IG51bGxwdHIgfTsKKyAgICBCYXNp
Y0Jsb2NrKiBtX21haW5FbnRyeXBvaW50U3RhcnQgeyBudWxscHRyIH07CiAgICAgVmVjdG9yPFR5
cGVkVG1wPiBtX2xvY2FsczsKICAgICBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mIG1f
dW5saW5rZWRXYXNtVG9XYXNtQ2FsbHM7IC8vIExpc3QgZWFjaCBjYWxsIHNpdGUgYW5kIHRoZSBm
dW5jdGlvbiBpbmRleCB3aG9zZSBhZGRyZXNzIGl0IHNob3VsZCBiZSBwYXRjaGVkIHdpdGguCiAg
ICAgR1BSUmVnIG1fbWVtb3J5QmFzZUdQUiB7IEludmFsaWRHUFJSZWcgfTsKQEAgLTc3NCw2ICs3
NzYsMTAgQEAgcHJpdmF0ZToKICAgICB1bnNpZ25lZCBtX251bUltcG9ydEZ1bmN0aW9uczsKIAog
ICAgIEIzOjpQYXRjaHBvaW50U3BlY2lhbCogbV9wYXRjaHBvaW50U3BlY2lhbCB7IG51bGxwdHIg
fTsKKworICAgIFZlY3RvcjxzdGQ6OnBhaXI8QmFzaWNCbG9jayosIFZlY3RvcjxUeXBlZFRtcD4+
PiBtX2xvb3BFbnRyeVZhcmlhYmxlRGF0YTsKKyAgICBSZWZQdHI8QjM6OkFpcjo6UHJvbG9ndWVH
ZW5lcmF0b3I+IG1fcHJvbG9ndWVHZW5lcmF0b3I7CisgICAgdW5zaWduZWQmIG1fb3NyRW50cnlT
Y3JhdGNoQnVmZmVyU2l6ZTsKIH07CiAKIC8vIE1lbW9yeSBhY2Nlc3NlcyBpbiBXZWJBc3NlbWJs
eSBoYXZlIHVuc2lnbmVkIDMyLWJpdCBvZmZzZXRzLCB3aGVyZWFzIHRoZXkgaGF2ZSBzaWduZWQg
MzItYml0IG9mZnNldHMgaW4gQjMuCkBAIC04MTksNyArODI1LDcgQEAgdm9pZCBBaXJJUkdlbmVy
YXRvcjo6cmVzdG9yZVdhc21Db250ZXh0SQogICAgIGVtaXRQYXRjaHBvaW50KGJsb2NrLCBwYXRj
aHBvaW50LCBUbXAoKSwgaW5zdGFuY2UpOwogfQogCi1BaXJJUkdlbmVyYXRvcjo6QWlySVJHZW5l
cmF0b3IoY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIEIzOjpQcm9jZWR1cmUmIHByb2Nl
ZHVyZSwgSW50ZXJuYWxGdW5jdGlvbiogY29tcGlsYXRpb24sIFZlY3RvcjxVbmxpbmtlZFdhc21U
b1dhc21DYWxsPiYgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIE1lbW9yeU1vZGUgbW9kZSwgdW5z
aWduZWQgZnVuY3Rpb25JbmRleCwgVGllclVwQ291bnQqIHRpZXJVcCwgY29uc3QgU2lnbmF0dXJl
JiBzaWduYXR1cmUpCitBaXJJUkdlbmVyYXRvcjo6QWlySVJHZW5lcmF0b3IoY29uc3QgTW9kdWxl
SW5mb3JtYXRpb24mIGluZm8sIEIzOjpQcm9jZWR1cmUmIHByb2NlZHVyZSwgSW50ZXJuYWxGdW5j
dGlvbiogY29tcGlsYXRpb24sIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYgdW5saW5r
ZWRXYXNtVG9XYXNtQ2FsbHMsIE1lbW9yeU1vZGUgbW9kZSwgdW5zaWduZWQgZnVuY3Rpb25JbmRl
eCwgVGllclVwQ291bnQqIHRpZXJVcCwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsIHVuc2ln
bmVkJiBvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplKQogICAgIDogbV9pbmZvKGluZm8pCiAgICAg
LCBtX21vZGUobW9kZSkKICAgICAsIG1fZnVuY3Rpb25JbmRleChmdW5jdGlvbkluZGV4KQpAQCAt
ODI4LDYgKzgzNCw3IEBAIEFpcklSR2VuZXJhdG9yOjpBaXJJUkdlbmVyYXRvcihjb25zdCBNb2QK
ICAgICAsIG1fY29kZShtX3Byb2MuY29kZSgpKQogICAgICwgbV91bmxpbmtlZFdhc21Ub1dhc21D
YWxscyh1bmxpbmtlZFdhc21Ub1dhc21DYWxscykKICAgICAsIG1fbnVtSW1wb3J0RnVuY3Rpb25z
KGluZm8uaW1wb3J0RnVuY3Rpb25Db3VudCgpKQorICAgICwgbV9vc3JFbnRyeVNjcmF0Y2hCdWZm
ZXJTaXplKG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUpCiB7CiAgICAgbV9jdXJyZW50QmxvY2sg
PSBtX2NvZGUuYWRkQmxvY2soKTsKICAgICBtX3Jvb3RCbG9jayA9IG1fY3VycmVudEJsb2NrOwpA
QCAtODQ3LDExICs4NTQsOSBAQCBBaXJJUkdlbmVyYXRvcjo6QWlySVJHZW5lcmF0b3IoY29uc3Qg
TW9kCiAgICAgICAgIG1fY29kZS5waW5SZWdpc3RlcihtX2JvdW5kc0NoZWNraW5nU2l6ZUdQUik7
CiAgICAgfQogCi0gICAgbV9jb2RlLnNldE51bUVudHJ5cG9pbnRzKDEpOwotCiAgICAgR1BSUmVn
IGNvbnRleHRJbnN0YW5jZSA9IENvbnRleHQ6OnVzZUZhc3RUTFMoKSA/IHdhc21DYWxsaW5nQ29u
dmVudGlvbigpLnByb2xvZ3VlU2NyYXRjaEdQUnNbMV0gOiBtX3dhc21Db250ZXh0SW5zdGFuY2VH
UFI7CiAKLSAgICBSZWY8QjM6OkFpcjo6UHJvbG9ndWVHZW5lcmF0b3I+IHByb2xvZ3VlR2VuZXJh
dG9yID0gY3JlYXRlU2hhcmVkVGFzazxCMzo6QWlyOjpQcm9sb2d1ZUdlbmVyYXRvckZ1bmN0aW9u
PihbPV0gKENDYWxsSGVscGVycyYgaml0LCBCMzo6QWlyOjpDb2RlJiBjb2RlKSB7CisgICAgbV9w
cm9sb2d1ZUdlbmVyYXRvciA9IGNyZWF0ZVNoYXJlZFRhc2s8QjM6OkFpcjo6UHJvbG9ndWVHZW5l
cmF0b3JGdW5jdGlvbj4oWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgQjM6OkFpcjo6Q29kZSYgY29k
ZSkgewogICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNo
KGppdCk7CiAgICAgICAgIGNvZGUuZW1pdERlZmF1bHRQcm9sb2d1ZShqaXQpOwogCkBAIC04NTks
NyArODY0LDcgQEAgQWlySVJHZW5lcmF0b3I6OkFpcklSR2VuZXJhdG9yKGNvbnN0IE1vZAogICAg
ICAgICAgICAgR1BSUmVnIGNhbGxlZUdQUiA9IHdhc21DYWxsaW5nQ29udmVudGlvbigpLnByb2xv
Z3VlU2NyYXRjaEdQUnNbMF07CiAgICAgICAgICAgICBhdXRvIG1vdmVMb2NhdGlvbiA9IGppdC5t
b3ZlV2l0aFBhdGNoKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG51bGxwdHIpLCBjYWxs
ZWVHUFIpOwogICAgICAgICAgICAgaml0LmFkZExpbmtUYXNrKFtjb21waWxhdGlvbiwgbW92ZUxv
Y2F0aW9uXSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICAgICAgICAgIGNvbXBp
bGF0aW9uLT5jYWxsZWVNb3ZlTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8V2FzbUVu
dHJ5UHRyVGFnPihtb3ZlTG9jYXRpb24pOworICAgICAgICAgICAgICAgIGNvbXBpbGF0aW9uLT5j
YWxsZWVNb3ZlTG9jYXRpb25zLmFwcGVuZChsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8V2FzbUVudHJ5
UHRyVGFnPihtb3ZlTG9jYXRpb24pKTsKICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgaml0
LmVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcihjYWxsZWVHUFIsIENhbGxGcmFtZVNsb3Q6OmNhbGxl
ZSk7CiAgICAgICAgICAgICBqaXQuZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKG51bGxwdHIsIENh
bGxGcmFtZVNsb3Q6OmNvZGVCbG9jayk7CkBAIC05MDgsOCArOTEzLDYgQEAgQWlySVJHZW5lcmF0
b3I6OkFpcklSR2VuZXJhdG9yKGNvbnN0IE1vZAogICAgICAgICB9CiAgICAgfSk7CiAKLSAgICBt
X2NvZGUuc2V0UHJvbG9ndWVGb3JFbnRyeXBvaW50KDAsIFdURk1vdmUocHJvbG9ndWVHZW5lcmF0
b3IpKTsKLQogICAgIGlmIChDb250ZXh0Ojp1c2VGYXN0VExTKCkpIHsKICAgICAgICAgbV9pbnN0
YW5jZVZhbHVlID0gZzY0KCk7CiAgICAgICAgIC8vIEZJWE1FOiBXb3VsZCBiZSBuaWNlIHRvIG9u
bHkgZG8gdGhpcyBpZiB3ZSB1c2UgaW5zdGFuY2UgdmFsdWUuCkBAIC05MjQsNiArOTI3LDEwIEBA
IEFpcklSR2VuZXJhdG9yOjpBaXJJUkdlbmVyYXRvcihjb25zdCBNb2QKICAgICAgICAgbV9sb2Nh
bHNbaV0gPSB0bXBGb3JUeXBlKHR5cGUpOwogICAgIH0KIAorICAgIGFwcGVuZChFbnRyeVN3aXRj
aCk7CisgICAgbV9tYWluRW50cnlwb2ludFN0YXJ0ID0gbV9jb2RlLmFkZEJsb2NrKCk7CisgICAg
bV9jdXJyZW50QmxvY2sgPSBtX21haW5FbnRyeXBvaW50U3RhcnQ7CisKICAgICBDYWxsSW5mb3Jt
YXRpb24gd2FzbUNhbGxJbmZvID0gd2FzbUNhbGxpbmdDb252ZW50aW9uKCkuY2FsbEluZm9ybWF0
aW9uRm9yKHNpZ25hdHVyZSwgQ2FsbFJvbGU6OkNhbGxlZSk7CiAKICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgd2FzbUNhbGxJbmZvLnBhcmFtcy5zaXplKCk7ICsraSkgewpAQCAtOTU0LDYg
Kzk2MSw4OCBAQCBBaXJJUkdlbmVyYXRvcjo6QWlySVJHZW5lcmF0b3IoY29uc3QgTW9kCiAgICAg
ZW1pdEVudHJ5VGllclVwQ2hlY2soKTsKIH0KIAordm9pZCBBaXJJUkdlbmVyYXRvcjo6ZmluYWxp
emVFbnRyeXBvaW50cygpCit7CisgICAgdW5zaWduZWQgbnVtRW50cnlwb2ludHMgPSAxICsgbV9s
b29wRW50cnlWYXJpYWJsZURhdGEuc2l6ZSgpOworICAgIG1fcHJvYy5zZXROdW1FbnRyeXBvaW50
cyhudW1FbnRyeXBvaW50cyk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bUVudHJ5
cG9pbnRzOyArK2kpCisgICAgICAgIG1fY29kZS5zZXRQcm9sb2d1ZUZvckVudHJ5cG9pbnQoaSwg
UmVmPEIzOjpBaXI6OlByb2xvZ3VlR2VuZXJhdG9yPigqbV9wcm9sb2d1ZUdlbmVyYXRvcikpOwor
CisgICAgVG1wIGltbVRtcDsKKyAgICBUbXAgbmV3UHRyOworCisgICAgQmFzaWNCbG9jazo6U3Vj
Y2Vzc29yTGlzdCBzdWNjZXNzb3JzOworICAgIHN1Y2Nlc3NvcnMuYXBwZW5kKG1fbWFpbkVudHJ5
cG9pbnRTdGFydCk7CisKKyAgICBtX29zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUgPSAwOworCisg
ICAgZm9yIChhdXRvJiBwYWlyIDogbV9sb29wRW50cnlWYXJpYWJsZURhdGEpIHsKKyAgICAgICAg
QmFzaWNCbG9jayogbG9vcEJvZHkgPSBwYWlyLmZpcnN0OworICAgICAgICBUbXAgYmFzZVB0ciA9
IFRtcChHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgICAgICBCYXNpY0Jsb2NrKiBlbnRyeSA9
IG1fY29kZS5hZGRCbG9jaygpOworICAgICAgICBtX2N1cnJlbnRCbG9jayA9IGVudHJ5OworICAg
ICAgICBhdXRvJiB0ZW1wcyA9IHBhaXIuc2Vjb25kOworCisgICAgICAgIHN1Y2Nlc3NvcnMuYXBw
ZW5kKGVudHJ5KTsKKworICAgICAgICBtX29zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUgPSBzdGQ6
Om1heChtX29zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUsIHN0YXRpY19jYXN0PHVuc2lnbmVkPih0
ZW1wcy5zaXplKCkpKTsKKworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdGVtcHMu
c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIEIzOjpBaXI6Ok9wY29kZSBsb2FkT3A7CisgICAg
ICAgICAgICB1bnNpZ25lZCBieXRlczsKKyAgICAgICAgICAgIHN3aXRjaCAodGVtcHNbaV0udHlw
ZSgpLmtpbmQpIHsKKyAgICAgICAgICAgIGNhc2UgVHlwZUtpbmQ6OkkzMjoKKyAgICAgICAgICAg
ICAgICBsb2FkT3AgPSBNb3ZlMzI7CisgICAgICAgICAgICAgICAgYnl0ZXMgPSA0OworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBUeXBlS2luZDo6STY0OgorICAgICAg
ICAgICAgY2FzZSBUeXBlS2luZDo6RnVuY3JlZjoKKyAgICAgICAgICAgIGNhc2UgVHlwZUtpbmQ6
OlJlZjoKKyAgICAgICAgICAgIGNhc2UgVHlwZUtpbmQ6OlJlZk51bGw6CisgICAgICAgICAgICBj
YXNlIFR5cGVLaW5kOjpFeHRlcm5yZWY6CisgICAgICAgICAgICAgICAgbG9hZE9wID0gTW92ZTsK
KyAgICAgICAgICAgICAgICBieXRlcyA9IDg7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICBjYXNlIFR5cGVLaW5kOjpGMzI6CisgICAgICAgICAgICAgICAgbG9hZE9wID0gTW92
ZUZsb2F0OworICAgICAgICAgICAgICAgIGJ5dGVzID0gNDsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIGNhc2UgVHlwZUtpbmQ6OkY2NDoKKyAgICAgICAgICAgICAgICBsb2Fk
T3AgPSBNb3ZlRG91YmxlOworICAgICAgICAgICAgICAgIGJ5dGVzID0gODsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgVHlwZUtpbmQ6OlZvaWQ6CisgICAgICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgdWludDY0X3Qgb2Zmc2V0ID0gc3RhdGljX2Nhc3Q8dWludDY0
X3Q+KGkpICogc2l6ZW9mKHVpbnQ2NF90KTsKKworICAgICAgICAgICAgQXJnIGFkZHJBcmc7Cisg
ICAgICAgICAgICBpZiAoQXJnOjppc1ZhbGlkQWRkckZvcm0ob2Zmc2V0LCBCMzo6d2lkdGhGb3JC
eXRlcyhieXRlcykpKQorICAgICAgICAgICAgICAgIGFkZHJBcmcgPSBBcmc6OmFkZHIoYmFzZVB0
ciwgb2Zmc2V0KTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGlmICghaW1t
VG1wKSB7CisgICAgICAgICAgICAgICAgICAgIGltbVRtcCA9IGc2NCgpOworICAgICAgICAgICAg
ICAgICAgICBuZXdQdHIgPSBnNjQoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgYXBwZW5kKE1vdmUsIEFyZzo6YmlnSW1tKG9mZnNldCksIGltbVRtcCk7CisgICAgICAgICAg
ICAgICAgYXBwZW5kKEFkZDY0LCBpbW1UbXAsIGJhc2VQdHIsIG5ld1B0cik7CisgICAgICAgICAg
ICAgICAgYWRkckFyZyA9IEFyZzo6YWRkcihuZXdQdHIpOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBhcHBlbmQobG9hZE9wLCBhZGRyQXJnLCB0ZW1wc1tpXS50bXAoKSk7CisgICAgICAg
IH0KKworICAgICAgICBhcHBlbmQoSnVtcCk7CisgICAgICAgIGVudHJ5LT5zZXRTdWNjZXNzb3Jz
KGxvb3BCb2R5KTsKKyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVChudW1FbnRyeXBvaW50cyA9
PSBzdWNjZXNzb3JzLnNpemUoKSk7CisgICAgbV9yb290QmxvY2stPnN1Y2Nlc3NvcnMoKSA9IHN1
Y2Nlc3NvcnM7Cit9CisKIEIzOjpUeXBlIEFpcklSR2VuZXJhdG9yOjp0b0IzUmVzdWx0VHlwZShC
bG9ja1NpZ25hdHVyZSByZXR1cm5UeXBlKQogewogICAgIGlmIChyZXR1cm5UeXBlLT5yZXR1cm5z
Vm9pZCgpKQpAQCAtMjk1NCwxMCArMzA0MywzMCBAQCBBaXJJUkdlbmVyYXRvcjo6Q29udHJvbERh
dGEgQWlySVJHZW5lcmF0CiAKIGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZExvb3AoQmxvY2tTaWdu
YXR1cmUgc2lnbmF0dXJlLCBTdGFjayYgZW5jbG9zaW5nU3RhY2ssIENvbnRyb2xUeXBlJiBibG9j
aywgU3RhY2smIG5ld1N0YWNrLCB1aW50MzJfdCBsb29wSW5kZXgpIC0+IFBhcnRpYWxSZXN1bHQK
IHsKKyAgICBSRUxFQVNFX0FTU0VSVChsb29wSW5kZXggPT0gbV9sb29wRW50cnlWYXJpYWJsZURh
dGEuc2l6ZSgpKTsKKwogICAgIEJhc2ljQmxvY2sqIGJvZHkgPSBtX2NvZGUuYWRkQmxvY2soKTsK
ICAgICBCYXNpY0Jsb2NrKiBjb250aW51YXRpb24gPSBtX2NvZGUuYWRkQmxvY2soKTsKIAogICAg
IHNwbGl0U3RhY2soc2lnbmF0dXJlLCBlbmNsb3NpbmdTdGFjaywgbmV3U3RhY2spOworCisgICAg
eworICAgICAgICBWZWN0b3I8VHlwZWRUbXA+IHZhcmlhYmxlczsKKyAgICAgICAgZm9yIChhdXRv
IGxvY2FsIDogbV9sb2NhbHMpCisgICAgICAgICAgICB2YXJpYWJsZXMuYXBwZW5kKGxvY2FsKTsK
KworICAgICAgICBmb3IgKHVuc2lnbmVkIGNvbnRyb2xJbmRleCA9IDA7IGNvbnRyb2xJbmRleCA8
IG1fcGFyc2VyLT5jb250cm9sU3RhY2soKS5zaXplKCk7ICsrY29udHJvbEluZGV4KSB7CisgICAg
ICAgICAgICBmb3IgKGF1dG8gdmFyaWFibGUgOiBtX3BhcnNlci0+Y29udHJvbFN0YWNrKClbY29u
dHJvbEluZGV4XS5lbmNsb3NlZEV4cHJlc3Npb25TdGFjaykKKyAgICAgICAgICAgICAgICB2YXJp
YWJsZXMuYXBwZW5kKHZhcmlhYmxlKTsKKyAgICAgICAgfQorICAgICAgICBmb3IgKGF1dG8gdmFy
aWFibGUgOiBlbmNsb3NpbmdTdGFjaykKKyAgICAgICAgICAgIHZhcmlhYmxlcy5hcHBlbmQodmFy
aWFibGUpOworICAgICAgICBmb3IgKGF1dG8gdmFyaWFibGUgOiBuZXdTdGFjaykKKyAgICAgICAg
ICAgIHZhcmlhYmxlcy5hcHBlbmQodmFyaWFibGUpOworCisgICAgICAgIG1fbG9vcEVudHJ5VmFy
aWFibGVEYXRhLmFwcGVuZChzdGQ6OnBhaXI8QmFzaWNCbG9jayosIFZlY3RvcjxUeXBlZFRtcD4+
KGJvZHksIFdURk1vdmUodmFyaWFibGVzKSkpOworICAgIH0KKwogICAgIFJlc3VsdExpc3QgcmVz
dWx0czsKICAgICByZXN1bHRzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobmV3U3RhY2suc2l6ZSgp
KTsKICAgICBmb3IgKGF1dG8gaXRlbSA6IG5ld1N0YWNrKQpAQCAtMzU5NCw4ICszNzAzLDkgQEAg
RXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3RpbwogCiAgICAgY29tcGlsYXRp
b25Db250ZXh0LmVtYmVkZGVyRW50cnlwb2ludEpJVCA9IG1ha2VVbmlxdWU8Q0NhbGxIZWxwZXJz
PigpOwogICAgIGNvbXBpbGF0aW9uQ29udGV4dC53YXNtRW50cnlwb2ludEpJVCA9IG1ha2VVbmlx
dWU8Q0NhbGxIZWxwZXJzPigpOworICAgIGNvbXBpbGF0aW9uQ29udGV4dC5wcm9jZWR1cmUgPSBt
YWtlVW5pcXVlPEIzOjpQcm9jZWR1cmU+KCk7CiAKLSAgICBCMzo6UHJvY2VkdXJlIHByb2NlZHVy
ZTsKKyAgICBhdXRvJiBwcm9jZWR1cmUgPSAqY29tcGlsYXRpb25Db250ZXh0LnByb2NlZHVyZTsK
ICAgICBDb2RlJiBjb2RlID0gcHJvY2VkdXJlLmNvZGUoKTsKIAogICAgIHByb2NlZHVyZS5zZXRP
cmlnaW5QcmludGVyKFtdIChQcmludFN0cmVhbSYgb3V0LCBCMzo6T3JpZ2luIG9yaWdpbikgewpA
QCAtMzYxMSwxMCArMzcyMSwxMCBAQCBFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxG
dW5jdGlvCiAgICAgCiAgICAgcHJvY2VkdXJlLnNldE9wdExldmVsKE9wdGlvbnM6OndlYkFzc2Vt
Ymx5QkJRQWlyT3B0aW1pemF0aW9uTGV2ZWwoKSk7CiAKLSAgICBBaXJJUkdlbmVyYXRvciBpckdl
bmVyYXRvcihpbmZvLCBwcm9jZWR1cmUsIHJlc3VsdC5nZXQoKSwgdW5saW5rZWRXYXNtVG9XYXNt
Q2FsbHMsIG1vZGUsIGZ1bmN0aW9uSW5kZXgsIHRpZXJVcCwgc2lnbmF0dXJlKTsKKyAgICBBaXJJ
UkdlbmVyYXRvciBpckdlbmVyYXRvcihpbmZvLCBwcm9jZWR1cmUsIHJlc3VsdC5nZXQoKSwgdW5s
aW5rZWRXYXNtVG9XYXNtQ2FsbHMsIG1vZGUsIGZ1bmN0aW9uSW5kZXgsIHRpZXJVcCwgc2lnbmF0
dXJlLCByZXN1bHQtPm9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUpOwogICAgIEZ1bmN0aW9uUGFy
c2VyPEFpcklSR2VuZXJhdG9yPiBwYXJzZXIoaXJHZW5lcmF0b3IsIGZ1bmN0aW9uLmRhdGEuZGF0
YSgpLCBmdW5jdGlvbi5kYXRhLnNpemUoKSwgc2lnbmF0dXJlLCBpbmZvKTsKICAgICBXQVNNX0ZB
SUxfSUZfSEVMUEVSX0ZBSUxTKHBhcnNlci5wYXJzZSgpKTsKLQorICAgIGlyR2VuZXJhdG9yLmZp
bmFsaXplRW50cnlwb2ludHMoKTsKIAogICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBjb2Rl
KSB7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYmxvY2stPm51bVN1Y2Nlc3NvcnMo
KTsgKytpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0
b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lS
R2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMjg3MzM5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MzUsNyArNTM1
LDcgQEAgcHJpdmF0ZToKICAgICBGdW5jdGlvblBhcnNlcjxCM0lSR2VuZXJhdG9yPiogbV9wYXJz
ZXIgeyBudWxscHRyIH07CiAgICAgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIG1faW5mbzsKICAg
ICBjb25zdCBNZW1vcnlNb2RlIG1fbW9kZSB7IE1lbW9yeU1vZGU6OkJvdW5kc0NoZWNraW5nIH07
Ci0gICAgY29uc3QgQ29tcGlsYXRpb25Nb2RlIG1fY29tcGlsYXRpb25Nb2RlIHsgQ29tcGlsYXRp
b25Nb2RlOjpCQlFNb2RlIH07CisgICAgY29uc3QgQ29tcGlsYXRpb25Nb2RlIG1fY29tcGlsYXRp
b25Nb2RlOwogICAgIGNvbnN0IHVuc2lnbmVkIG1fZnVuY3Rpb25JbmRleCB7IFVJTlRfTUFYIH07
CiAgICAgY29uc3QgdW5zaWduZWQgbV9sb29wSW5kZXhGb3JPU1JFbnRyeSB7IFVJTlRfTUFYIH07
CiAgICAgVGllclVwQ291bnQqIG1fdGllclVwIHsgbnVsbHB0ciB9OwpAQCAtNzAxLDcgKzcwMSw3
IEBAIEIzSVJHZW5lcmF0b3I6OkIzSVJHZW5lcmF0b3IoY29uc3QgTW9kdWwKICAgICB9CiAKICAg
ICB7Ci0gICAgICAgIGF1dG8qIGNhbGxlZU1vdmVMb2NhdGlvbiA9ICZjb21waWxhdGlvbi0+Y2Fs
bGVlTW92ZUxvY2F0aW9uOworICAgICAgICBhdXRvKiBjYWxsZWVNb3ZlTG9jYXRpb25zID0gJmNv
bXBpbGF0aW9uLT5jYWxsZWVNb3ZlTG9jYXRpb25zOwogICAgICAgICBzdGF0aWNfYXNzZXJ0KENh
bGxGcmFtZVNsb3Q6OmNvZGVCbG9jayAqIHNpemVvZihSZWdpc3RlcikgPCBXYXNtQ2FsbGluZ0Nv
bnZlbnRpb246OmhlYWRlclNpemVJbkJ5dGVzLCAiV2UgcmVseSBvbiB0aGlzIGhlcmUgZm9yIG5v
dy4iKTsKICAgICAgICAgc3RhdGljX2Fzc2VydChDYWxsRnJhbWVTbG90OjpjYWxsZWUgKiBzaXpl
b2YoUmVnaXN0ZXIpIDwgV2FzbUNhbGxpbmdDb252ZW50aW9uOjpoZWFkZXJTaXplSW5CeXRlcywg
IldlIHJlbHkgb24gdGhpcyBoZXJlIGZvciBub3cuIik7CiAgICAgICAgIEIzOjpQYXRjaHBvaW50
VmFsdWUqIGdldENhbGxlZVBhdGNocG9pbnQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PEIz
OjpQYXRjaHBvaW50VmFsdWU+KG1fcHJvYywgQjM6OkludDY0LCBPcmlnaW4oKSk7CkBAIC03MTEs
OCArNzExLDggQEAgQjNJUkdlbmVyYXRvcjo6QjNJUkdlbmVyYXRvcihjb25zdCBNb2R1bAogICAg
ICAgICAgICAgWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJh
dGlvblBhcmFtcyYgcGFyYW1zKSB7CiAgICAgICAgICAgICAgICAgR1BSUmVnIHJlc3VsdCA9IHBh
cmFtc1swXS5ncHIoKTsKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RGF0YUxhYmVs
UHRyIG1vdmVMb2NhdGlvbiA9IGppdC5tb3ZlV2l0aFBhdGNoKE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tUHRyKG51bGxwdHIpLCByZXN1bHQpOwotICAgICAgICAgICAgICAgIGppdC5hZGRMaW5r
VGFzayhbY2FsbGVlTW92ZUxvY2F0aW9uLCBtb3ZlTG9jYXRpb25dIChMaW5rQnVmZmVyJiBsaW5r
QnVmZmVyKSB7Ci0gICAgICAgICAgICAgICAgICAgICpjYWxsZWVNb3ZlTG9jYXRpb24gPSBsaW5r
QnVmZmVyLmxvY2F0aW9uT2Y8V2FzbUVudHJ5UHRyVGFnPihtb3ZlTG9jYXRpb24pOworICAgICAg
ICAgICAgICAgIGppdC5hZGRMaW5rVGFzayhbY2FsbGVlTW92ZUxvY2F0aW9ucywgbW92ZUxvY2F0
aW9uXSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgeworICAgICAgICAgICAgICAgICAgICBjYWxs
ZWVNb3ZlTG9jYXRpb25zLT5hcHBlbmQobGlua0J1ZmZlci5sb2NhdGlvbk9mPFdhc21FbnRyeVB0
clRhZz4obW92ZUxvY2F0aW9uKSk7CiAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICB9
KTsKIApAQCAtNzgyLDcgKzc4Miw3IEBAIEIzSVJHZW5lcmF0b3I6OkIzSVJHZW5lcmF0b3IoY29u
c3QgTW9kdWwKIAogICAgIGVtaXRFbnRyeVRpZXJVcENoZWNrKCk7CiAKLSAgICBpZiAobV9jb21w
aWxhdGlvbk1vZGUgPT0gQ29tcGlsYXRpb25Nb2RlOjpPTUdGb3JPU1JFbnRyeU1vZGUpCisgICAg
aWYgKGlzT1NSRW50cnkobV9jb21waWxhdGlvbk1vZGUpKQogICAgICAgICBtX2N1cnJlbnRCbG9j
ayA9IG1fcHJvYy5hZGRCbG9jaygpOwogfQogCkBAIC0zMjQ3LDcgKzMyNDcsNyBAQCBzdGF0aWMg
Ym9vbCBzaG91bGREdW1wSVJGb3IodWludDMyX3QgZnVuCiAgICAgcmV0dXJuIGR1bXBBbGxvd2xp
c3QtPnNob3VsZER1bXBXYXNtRnVuY3Rpb24oZnVuY3Rpb25JbmRleCk7CiB9CiAKLUV4cGVjdGVk
PHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPiwgU3RyaW5nPiBwYXJzZUFuZENvbXBp
bGUoQ29tcGlsYXRpb25Db250ZXh0JiBjb21waWxhdGlvbkNvbnRleHQsIGNvbnN0IEZ1bmN0aW9u
RGF0YSYgZnVuY3Rpb24sIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBWZWN0b3I8VW5saW5r
ZWRXYXNtVG9XYXNtQ2FsbD4mIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLCB1bnNpZ25lZCYgb3Ny
RW50cnlTY3JhdGNoQnVmZmVyU2l6ZSwgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIE1l
bW9yeU1vZGUgbW9kZSwgQ29tcGlsYXRpb25Nb2RlIGNvbXBpbGF0aW9uTW9kZSwgdWludDMyX3Qg
ZnVuY3Rpb25JbmRleCwgdWludDMyX3QgbG9vcEluZGV4Rm9yT1NSRW50cnksIFRpZXJVcENvdW50
KiB0aWVyVXApCitFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4sIFN0
cmluZz4gcGFyc2VBbmRDb21waWxlKENvbXBpbGF0aW9uQ29udGV4dCYgY29tcGlsYXRpb25Db250
ZXh0LCBjb25zdCBGdW5jdGlvbkRhdGEmIGZ1bmN0aW9uLCBjb25zdCBTaWduYXR1cmUmIHNpZ25h
dHVyZSwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiB1bmxpbmtlZFdhc21Ub1dhc21D
YWxscywgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIE1lbW9yeU1vZGUgbW9kZSwgQ29t
cGlsYXRpb25Nb2RlIGNvbXBpbGF0aW9uTW9kZSwgdWludDMyX3QgZnVuY3Rpb25JbmRleCwgdWlu
dDMyX3QgbG9vcEluZGV4Rm9yT1NSRW50cnksIFRpZXJVcENvdW50KiB0aWVyVXApCiB7CiAgICAg
YXV0byByZXN1bHQgPSBtYWtlVW5pcXVlPEludGVybmFsRnVuY3Rpb24+KCk7CiAKQEAgLTMyODAs
MTEgKzMyODAsMTEgQEAgRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpbwog
ICAgIC8vIG9wdExldmVsPTEuCiAgICAgcHJvY2VkdXJlLnNldE5lZWRzVXNlZFJlZ2lzdGVycyhm
YWxzZSk7CiAgICAgCi0gICAgcHJvY2VkdXJlLnNldE9wdExldmVsKGNvbXBpbGF0aW9uTW9kZSA9
PSBDb21waWxhdGlvbk1vZGU6OkJCUU1vZGUKKyAgICBwcm9jZWR1cmUuc2V0T3B0TGV2ZWwoaXNB
bnlCQlEoY29tcGlsYXRpb25Nb2RlKQogICAgICAgICA/IE9wdGlvbnM6OndlYkFzc2VtYmx5QkJR
QjNPcHRpbWl6YXRpb25MZXZlbCgpCiAgICAgICAgIDogT3B0aW9uczo6d2ViQXNzZW1ibHlPTUdP
cHRpbWl6YXRpb25MZXZlbCgpKTsKIAotICAgIEIzSVJHZW5lcmF0b3IgaXJHZW5lcmF0b3IoaW5m
bywgcHJvY2VkdXJlLCByZXN1bHQuZ2V0KCksIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBvc3JF
bnRyeVNjcmF0Y2hCdWZmZXJTaXplLCBtb2RlLCBjb21waWxhdGlvbk1vZGUsIGZ1bmN0aW9uSW5k
ZXgsIGxvb3BJbmRleEZvck9TUkVudHJ5LCB0aWVyVXApOworICAgIEIzSVJHZW5lcmF0b3IgaXJH
ZW5lcmF0b3IoaW5mbywgcHJvY2VkdXJlLCByZXN1bHQuZ2V0KCksIHVubGlua2VkV2FzbVRvV2Fz
bUNhbGxzLCByZXN1bHQtPm9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUsIG1vZGUsIGNvbXBpbGF0
aW9uTW9kZSwgZnVuY3Rpb25JbmRleCwgbG9vcEluZGV4Rm9yT1NSRW50cnksIHRpZXJVcCk7CiAg
ICAgRnVuY3Rpb25QYXJzZXI8QjNJUkdlbmVyYXRvcj4gcGFyc2VyKGlyR2VuZXJhdG9yLCBmdW5j
dGlvbi5kYXRhLmRhdGEoKSwgZnVuY3Rpb24uZGF0YS5zaXplKCksIHNpZ25hdHVyZSwgaW5mbyk7
CiAgICAgV0FTTV9GQUlMX0lGX0hFTFBFUl9GQUlMUyhwYXJzZXIucGFyc2UoKSk7CiAKQEAgLTMz
MjksNiArMzMyOSw5IEBAIHZvaWQgY29tcHV0ZUV4Y2VwdGlvbkhhbmRsZXJMb2NhdGlvbnMoVmUK
ICAgICBpZiAoIWNvbnRleHQucHJvY2VkdXJlKQogICAgICAgICByZXR1cm47CiAKKyAgICBpZiAo
ZnVuY3Rpb24tPmV4Y2VwdGlvbkhhbmRsZXJzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOwor
CiAgICAgdW5zaWduZWQgZW50cnlwb2ludEluZGV4ID0gMDsKICAgICB1bnNpZ25lZCBudW1FbnRy
eXBvaW50cyA9IGNvbnRleHQucHJvY2VkdXJlLT5udW1FbnRyeXBvaW50cygpOwogICAgIGZvciAo
Y29uc3QgVW5saW5rZWRIYW5kbGVySW5mbyYgaGFuZGxlckluZm8gOiBmdW5jdGlvbi0+ZXhjZXB0
aW9uSGFuZGxlcnMpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lS
R2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUIzSVJHZW5lcmF0b3IuaAkocmV2aXNpb24gMjg3MzM5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNTcsNyArNTcs
NyBAQCBzdHJ1Y3QgQ29tcGlsYXRpb25Db250ZXh0IHsKICAgICBCb3g8UENUb0NvZGVPcmlnaW5N
YXA+IHBjVG9Db2RlT3JpZ2luTWFwOwogfTsKIAotRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPElu
dGVybmFsRnVuY3Rpb24+LCBTdHJpbmc+IHBhcnNlQW5kQ29tcGlsZShDb21waWxhdGlvbkNvbnRl
eHQmLCBjb25zdCBGdW5jdGlvbkRhdGEmLCBjb25zdCBTaWduYXR1cmUmLCBWZWN0b3I8VW5saW5r
ZWRXYXNtVG9XYXNtQ2FsbD4mLCB1bnNpZ25lZCYgb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSwg
Y29uc3QgTW9kdWxlSW5mb3JtYXRpb24mLCBNZW1vcnlNb2RlLCBDb21waWxhdGlvbk1vZGUsIHVp
bnQzMl90IGZ1bmN0aW9uSW5kZXgsIHVpbnQzMl90IGxvb3BJbmRleEZvck9TUkVudHJ5LCBUaWVy
VXBDb3VudCogPSBudWxscHRyKTsKK0V4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1
bmN0aW9uPiwgU3RyaW5nPiBwYXJzZUFuZENvbXBpbGUoQ29tcGlsYXRpb25Db250ZXh0JiwgY29u
c3QgRnVuY3Rpb25EYXRhJiwgY29uc3QgU2lnbmF0dXJlJiwgVmVjdG9yPFVubGlua2VkV2FzbVRv
V2FzbUNhbGw+JiwgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mLCBNZW1vcnlNb2RlLCBDb21waWxh
dGlvbk1vZGUsIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIHVpbnQzMl90IGxvb3BJbmRleEZvck9T
UkVudHJ5LCBUaWVyVXBDb3VudCogPSBudWxscHRyKTsKIAogdm9pZCBjb21wdXRlRXhjZXB0aW9u
SGFuZGxlckxvY2F0aW9ucyhWZWN0b3I8Q29kZUxvY2F0aW9uTGFiZWw8RXhjZXB0aW9uSGFuZGxl
clB0clRhZz4+JiBoYW5kbGVycywgY29uc3QgSW50ZXJuYWxGdW5jdGlvbiosIGNvbnN0IENvbXBp
bGF0aW9uQ29udGV4dCYsIExpbmtCdWZmZXImKTsKIHZvaWQgY29tcHV0ZVBDVG9Db2RlT3JpZ2lu
TWFwKENvbXBpbGF0aW9uQ29udGV4dCYsIExpbmtCdWZmZXImKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJRUGxhbi5jcHAJKHJldmlzaW9uIDI4NzMzOSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNjMsMTcgKzYzLDI2IEBAIGJvb2wgQkJRUGxhbjo6cHJlcGFyZUltcGwoKQogICAgIGNvbnN0
IGF1dG8mIGZ1bmN0aW9ucyA9IG1fbW9kdWxlSW5mb3JtYXRpb24tPmZ1bmN0aW9uczsKICAgICBp
ZiAoIXRyeVJlc2VydmVDYXBhY2l0eShtX3dhc21JbnRlcm5hbEZ1bmN0aW9ucywgZnVuY3Rpb25z
LnNpemUoKSwgIiBXZWJBc3NlbWJseSBmdW5jdGlvbnMiKQogICAgICAgICB8fCAhdHJ5UmVzZXJ2
ZUNhcGFjaXR5KG1fY29tcGlsYXRpb25Db250ZXh0cywgZnVuY3Rpb25zLnNpemUoKSwgIiBjb21w
aWxhdGlvbiBjb250ZXh0cyIpCi0gICAgICAgIHx8ICF0cnlSZXNlcnZlQ2FwYWNpdHkobV90aWVy
VXBDb3VudHMsIGZ1bmN0aW9ucy5zaXplKCksICIgdGllci11cCBjb3VudHMiKSkKKyAgICAgICAg
fHwgIXRyeVJlc2VydmVDYXBhY2l0eShtX3RpZXJVcENvdW50cywgZnVuY3Rpb25zLnNpemUoKSwg
IiB0aWVyLXVwIGNvdW50cyIpCisgICAgICAgIHx8ICF0cnlSZXNlcnZlQ2FwYWNpdHkobV9hbGxM
b29wRW50cnlwb2ludHMsIGZ1bmN0aW9ucy5zaXplKCksICIgbG9vcCBlbnRyeXBvaW50cyIpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBtX3dhc21JbnRlcm5hbEZ1bmN0aW9ucy5yZXNp
emUoZnVuY3Rpb25zLnNpemUoKSk7CiAgICAgbV9leGNlcHRpb25IYW5kbGVyTG9jYXRpb25zLnJl
c2l6ZShmdW5jdGlvbnMuc2l6ZSgpKTsKICAgICBtX2NvbXBpbGF0aW9uQ29udGV4dHMucmVzaXpl
KGZ1bmN0aW9ucy5zaXplKCkpOwogICAgIG1fdGllclVwQ291bnRzLnJlc2l6ZShmdW5jdGlvbnMu
c2l6ZSgpKTsKKyAgICBtX2FsbExvb3BFbnRyeXBvaW50cy5yZXNpemUoZnVuY3Rpb25zLnNpemUo
KSk7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorc3RhdGljIHZvaWQgc2V0TG9vcEVudHJ5cG9p
bnRzKExpbmtCdWZmZXImIGxpbmtCdWZmZXIsIEIzOjpQcm9jZWR1cmUmIHByb2NlZHVyZSwgVmVj
dG9yPENvZGVMb2NhdGlvbkxhYmVsPFdhc21FbnRyeVB0clRhZz4+JiBsb2NhdGlvbnMpCit7Cisg
ICAgLy8gT09QUzogVGhpcyBkb2Vzbid0IHdvcmsgd2l0aCBleGNlcHRpb25zLgorICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBwcm9jZWR1cmUubnVtRW50cnlwb2ludHMoKSAtIDE7ICsraSkK
KyAgICAgICAgbG9jYXRpb25zLmFwcGVuZChsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8V2FzbUVudHJ5
UHRyVGFnPihwcm9jZWR1cmUuY29kZSgpLmVudHJ5cG9pbnRMYWJlbChpICsgMSkpKTsKK30KKwog
dm9pZCBCQlFQbGFuOjp3b3JrKENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKIHsKICAgICBpZiAo
IW1fY2FsbGVlR3JvdXApIHsKQEAgLTEyNSwxMyArMTM0LDE3IEBAIHZvaWQgQkJRUGxhbjo6d29y
ayhDb21waWxhdGlvbkVmZm9ydCBlZmYKIAogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxXYXNt
RW50cnlQdHJUYWc+IGVudHJ5cG9pbnQ7CiAgICAgewotICAgICAgICBSZWY8QkJRQ2FsbGVlPiBj
YWxsZWUgPSBCQlFDYWxsZWU6OmNyZWF0ZShXVEZNb3ZlKGZ1bmN0aW9uLT5lbnRyeXBvaW50KSwg
ZnVuY3Rpb25JbmRleFNwYWNlLCBtX21vZHVsZUluZm9ybWF0aW9uLT5uYW1lU2VjdGlvbi0+Z2V0
KGZ1bmN0aW9uSW5kZXhTcGFjZSksIFdURk1vdmUodGllclVwKSwgV1RGTW92ZSh1bmxpbmtlZFdh
c21Ub1dhc21DYWxscyksIFdURk1vdmUoZnVuY3Rpb24tPnN0YWNrbWFwcyksIFdURk1vdmUoZnVu
Y3Rpb24tPmV4Y2VwdGlvbkhhbmRsZXJzKSwgV1RGTW92ZShleGNlcHRpb25IYW5kbGVyTG9jYXRp
b25zKSk7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoUG9pbnRlcihmdW5jdGlvbi0+
Y2FsbGVlTW92ZUxvY2F0aW9uLCBDYWxsZWVCaXRzOjpib3hXYXNtKGNhbGxlZS5wdHIoKSkpOwor
ICAgICAgICBSZWY8QkJRQ2FsbGVlPiBjYWxsZWUgPSBCQlFDYWxsZWU6OmNyZWF0ZShXVEZNb3Zl
KGZ1bmN0aW9uLT5lbnRyeXBvaW50KSwgZnVuY3Rpb25JbmRleFNwYWNlLCBtX21vZHVsZUluZm9y
bWF0aW9uLT5uYW1lU2VjdGlvbi0+Z2V0KGZ1bmN0aW9uSW5kZXhTcGFjZSksIFdURk1vdmUodGll
clVwKSwgV1RGTW92ZSh1bmxpbmtlZFdhc21Ub1dhc21DYWxscyksIFdURk1vdmUoZnVuY3Rpb24t
PnN0YWNrbWFwcyksIFdURk1vdmUoZnVuY3Rpb24tPmV4Y2VwdGlvbkhhbmRsZXJzKSwgV1RGTW92
ZShleGNlcHRpb25IYW5kbGVyTG9jYXRpb25zKSwgZnVuY3Rpb24tPm9zckVudHJ5U2NyYXRjaEJ1
ZmZlclNpemUpOworICAgICAgICBmb3IgKGF1dG8mIG1vdmVMb2NhdGlvbiA6IGZ1bmN0aW9uLT5j
YWxsZWVNb3ZlTG9jYXRpb25zKQorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hQ
b2ludGVyKG1vdmVMb2NhdGlvbiwgQ2FsbGVlQml0czo6Ym94V2FzbShjYWxsZWUucHRyKCkpKTsK
ICAgICAgICAgZW50cnlwb2ludCA9IGNhbGxlZS0+ZW50cnlwb2ludCgpOwogCiAgICAgICAgIGlm
IChjb250ZXh0LnBjVG9Db2RlT3JpZ2luTWFwKQogICAgICAgICAgICAgQ2FsbGVlUmVnaXN0cnk6
OnNpbmdsZXRvbigpLmFkZFBDVG9Db2RlT3JpZ2luTWFwKGNhbGxlZS5wdHIoKSwgV1RGTW92ZShj
b250ZXh0LnBjVG9Db2RlT3JpZ2luTWFwKSk7CiAKKyAgICAgICAgaWYgKGNvbnRleHQucHJvY2Vk
dXJlKQorICAgICAgICAgICAgc2V0TG9vcEVudHJ5cG9pbnRzKGxpbmtCdWZmZXIsICpjb250ZXh0
LnByb2NlZHVyZSwgY2FsbGVlLT5sb29wRW50cnlwb2ludHMoKSk7CisKICAgICAgICAgLy8gV2Ug
d2FudCB0byBtYWtlIHN1cmUgd2UgcHVibGlzaCBvdXIgY2FsbGVlIGF0IHRoZSBzYW1lIHRpbWUg
YXMgd2UgbGluayBvdXIgY2FsbHNpdGVzLiBUaGlzIGVuYWJsZXMgdXMgdG8gZW5zdXJlIHdlCiAg
ICAgICAgIC8vIGFsd2F5cyBjYWxsIHRoZSBmYXN0ZXN0IGNvZGUuIEFueSBmdW5jdGlvbiBsaW5r
ZWQgYWZ0ZXIgdXMgd2lsbCBzZWUgb3VyIG5ldyBjb2RlIGFuZCB0aGUgbmV3IGNhbGxzaXRlcywg
d2hpY2ggdGhleQogICAgICAgICAvLyB3aWxsIHVwZGF0ZS4gSXQncyBhbHNvIG9rIGlmIHRoZXkg
cHVibGlzaCB0aGVpciBjb2RlIGJlZm9yZSB3ZSByZXNldCB0aGUgaW5zdHJ1Y3Rpb24gY2FjaGVz
IGJlY2F1c2UgYWZ0ZXIgd2UgcmVsZWFzZQpAQCAtMTk1LDIxICsyMDgsMjMgQEAgc3RkOjp1bmlx
dWVfcHRyPEludGVybmFsRnVuY3Rpb24+IEJCUVBsYQogICAgIHVuc2lnbmVkIGZ1bmN0aW9uSW5k
ZXhTcGFjZSA9IG1fbW9kdWxlSW5mb3JtYXRpb24tPmltcG9ydEZ1bmN0aW9uQ291bnQoKSArIGZ1
bmN0aW9uSW5kZXg7CiAgICAgQVNTRVJUX1VOVVNFRChmdW5jdGlvbkluZGV4U3BhY2UsIG1fbW9k
dWxlSW5mb3JtYXRpb24tPnNpZ25hdHVyZUluZGV4RnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShmdW5j
dGlvbkluZGV4U3BhY2UpID09IHNpZ25hdHVyZUluZGV4KTsKICAgICBFeHBlY3RlZDxzdGQ6OnVu
aXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4sIFN0cmluZz4gcGFyc2VBbmRDb21waWxlUmVzdWx0
OwotICAgIHVuc2lnbmVkIG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUgPSAwOwotCiAgICAgLy8g
RklYTUU6IFNvbWUgd2VicGFnZXMgdXNlIHZlcnkgbGFyZ2UgV2FzbSBtb2R1bGUsIGFuZCBpdCBl
eGhhdXN0cyBhbGwgZXhlY3V0YWJsZSBtZW1vcnkgaW4gQVJNNjQgZGV2aWNlcyBzaW5jZSB0aGUg
c2l6ZSBvZiBleGVjdXRhYmxlIG1lbW9yeSByZWdpb24gaXMgb25seSBsaW1pdGVkIHRvIDEyOE1C
LgogICAgIC8vIFRoZSBsb25nIHRlcm0gc29sdXRpb24gc2hvdWxkIGJlIHRvIGludHJvZHVjZSBh
IFdhc20gaW50ZXJwcmV0ZXIuIEJ1dCBhcyBhIHNob3J0IHRlcm0gc29sdXRpb24sIHdlIGludHJv
ZHVjZSBoZXVyaXN0aWNzIHRvIHN3aXRjaCBiYWNrIHRvIEJCUSBCMyBhdCB0aGUgc2FjcmlmaWNl
IG9mIHN0YXJ0LXVwIHRpbWUsCiAgICAgLy8gYXMgQkJRIEFpciBibG9hdHMgc3VjaCBsZW5ndGh5
IFdhc20gY29kZSBhbmQgd2lsbCBjb25zdW1lIGEgbGFyZ2UgYW1vdW50IG9mIGV4ZWN1dGFibGUg
bWVtb3J5LgorCisgICAgLy8gT09QUwogICAgIGJvb2wgZm9yY2VVc2luZ0IzID0gZmFsc2U7Cisg
ICAgLyoKICAgICBpZiAoT3B0aW9uczo6d2ViQXNzZW1ibHlCQlFBaXJNb2RlVGhyZXNob2xkKCkg
JiYgbV9tb2R1bGVJbmZvcm1hdGlvbi0+Y29kZVNlY3Rpb25TaXplID49IE9wdGlvbnM6OndlYkFz
c2VtYmx5QkJRQWlyTW9kZVRocmVzaG9sZCgpKQogICAgICAgICBmb3JjZVVzaW5nQjMgPSB0cnVl
OwogICAgIGVsc2UgaWYgKCFtX21vZHVsZUluZm9ybWF0aW9uLT5tX2Z1bmN0aW9uRG9lc05vdFVz
ZUV4Y2VwdGlvbnMucXVpY2tHZXQoZnVuY3Rpb25JbmRleCkpCiAgICAgICAgIGZvcmNlVXNpbmdC
MyA9IHRydWU7CiAgICAgZWxzZSBpZiAoIU9wdGlvbnM6Ondhc21CQlFVc2VzQWlyKCkpCiAgICAg
ICAgIGZvcmNlVXNpbmdCMyA9IHRydWU7CisgICAgKi8KIAogICAgIGlmIChmb3JjZVVzaW5nQjMp
Ci0gICAgICAgIHBhcnNlQW5kQ29tcGlsZVJlc3VsdCA9IHBhcnNlQW5kQ29tcGlsZShjb250ZXh0
LCBmdW5jdGlvbiwgc2lnbmF0dXJlLCB1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgb3NyRW50cnlT
Y3JhdGNoQnVmZmVyU2l6ZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi5nZXQoKSwgbV9tb2RlLCBDb21w
aWxhdGlvbk1vZGU6OkJCUU1vZGUsIGZ1bmN0aW9uSW5kZXgsIFVJTlQzMl9NQVgsIHRpZXJVcCk7
CisgICAgICAgIHBhcnNlQW5kQ29tcGlsZVJlc3VsdCA9IHBhcnNlQW5kQ29tcGlsZShjb250ZXh0
LCBmdW5jdGlvbiwgc2lnbmF0dXJlLCB1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgbV9tb2R1bGVJ
bmZvcm1hdGlvbi5nZXQoKSwgbV9tb2RlLCBDb21waWxhdGlvbk1vZGU6OkJCUU1vZGUsIGZ1bmN0
aW9uSW5kZXgsIFVJTlQzMl9NQVgsIHRpZXJVcCk7CiAgICAgZWxzZQogICAgICAgICBwYXJzZUFu
ZENvbXBpbGVSZXN1bHQgPSBwYXJzZUFuZENvbXBpbGVBaXIoY29udGV4dCwgZnVuY3Rpb24sIHNp
Z25hdHVyZSwgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIG1fbW9kdWxlSW5mb3JtYXRpb24uZ2V0
KCksIG1fbW9kZSwgZnVuY3Rpb25JbmRleCwgdGllclVwKTsKIApAQCAtMjQ2LDYgKzI2MSw5IEBA
IHZvaWQgQkJRUGxhbjo6ZGlkQ29tcGxldGVDb21waWxhdGlvbigpCiAKICAgICAgICAgICAgIGNv
bXB1dGVQQ1RvQ29kZU9yaWdpbk1hcChjb250ZXh0LCBsaW5rQnVmZmVyKTsKIAorICAgICAgICAg
ICAgaWYgKGNvbnRleHQucHJvY2VkdXJlKQorICAgICAgICAgICAgICAgIHNldExvb3BFbnRyeXBv
aW50cyhsaW5rQnVmZmVyLCAqY29udGV4dC5wcm9jZWR1cmUsIG1fYWxsTG9vcEVudHJ5cG9pbnRz
W2Z1bmN0aW9uSW5kZXhdKTsKKwogICAgICAgICAgICAgZnVuY3Rpb24tPmVudHJ5cG9pbnQuY29t
cGlsYXRpb24gPSBtYWtlVW5pcXVlPENvbXBpbGF0aW9uPigKICAgICAgICAgICAgICAgICBGSU5B
TElaRV9DT0RFKGxpbmtCdWZmZXIsIEpJVENvbXBpbGF0aW9uUHRyVGFnLCAiV2ViQXNzZW1ibHkg
QkJRIGZ1bmN0aW9uWyVpXSAlcyBuYW1lICVzIiwgZnVuY3Rpb25JbmRleCwgc2lnbmF0dXJlLnRv
U3RyaW5nKCkuYXNjaWkoKS5kYXRhKCksIG1ha2VTdHJpbmcoSW5kZXhPck5hbWUoZnVuY3Rpb25J
bmRleFNwYWNlLCBtX21vZHVsZUluZm9ybWF0aW9uLT5uYW1lU2VjdGlvbi0+Z2V0KGZ1bmN0aW9u
SW5kZXhTcGFjZSkpKS5hc2NpaSgpLmRhdGEoKSksCiAgICAgICAgICAgICAgICAgV1RGTW92ZShj
b250ZXh0Lndhc21FbnRyeXBvaW50Qnlwcm9kdWN0cykpOwpAQCAtMjg1LDEzICszMDMsMTggQEAg
dm9pZCBCQlFQbGFuOjppbml0aWFsaXplQ2FsbGVlcyhjb25zdCBDYQogICAgICAgICBSZWZQdHI8
RW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlPiBlbWJlZGRlckVudHJ5cG9pbnRDYWxsZWU7CiAgICAg
ICAgIGlmIChhdXRvIGVtYmVkZGVyVG9XYXNtRnVuY3Rpb24gPSBtX2VtYmVkZGVyVG9XYXNtSW50
ZXJuYWxGdW5jdGlvbnMuZ2V0KGludGVybmFsRnVuY3Rpb25JbmRleCkpIHsKICAgICAgICAgICAg
IGVtYmVkZGVyRW50cnlwb2ludENhbGxlZSA9IEVtYmVkZGVyRW50cnlwb2ludENhbGxlZTo6Y3Jl
YXRlKFdURk1vdmUoZW1iZWRkZXJUb1dhc21GdW5jdGlvbi0+ZW50cnlwb2ludCkpOwotICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hQb2ludGVyKGVtYmVkZGVyVG9XYXNtRnVuY3Rp
b24tPmNhbGxlZU1vdmVMb2NhdGlvbiwgQ2FsbGVlQml0czo6Ym94V2FzbShlbWJlZGRlckVudHJ5
cG9pbnRDYWxsZWUuZ2V0KCkpKTsKKyAgICAgICAgICAgIGZvciAoYXV0byYgbW92ZUxvY2F0aW9u
IDogZW1iZWRkZXJUb1dhc21GdW5jdGlvbi0+Y2FsbGVlTW92ZUxvY2F0aW9ucykKKyAgICAgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaFBvaW50ZXIobW92ZUxvY2F0aW9uLCBDYWxs
ZWVCaXRzOjpib3hXYXNtKGVtYmVkZGVyRW50cnlwb2ludENhbGxlZS5nZXQoKSkpOwogICAgICAg
ICB9CiAKICAgICAgICAgSW50ZXJuYWxGdW5jdGlvbiogZnVuY3Rpb24gPSBtX3dhc21JbnRlcm5h
bEZ1bmN0aW9uc1tpbnRlcm5hbEZ1bmN0aW9uSW5kZXhdLmdldCgpOwogICAgICAgICBzaXplX3Qg
ZnVuY3Rpb25JbmRleFNwYWNlID0gaW50ZXJuYWxGdW5jdGlvbkluZGV4ICsgbV9tb2R1bGVJbmZv
cm1hdGlvbi0+aW1wb3J0RnVuY3Rpb25Db3VudCgpOwotICAgICAgICBSZWY8QkJRQ2FsbGVlPiB3
YXNtRW50cnlwb2ludENhbGxlZSA9IEJCUUNhbGxlZTo6Y3JlYXRlKFdURk1vdmUoZnVuY3Rpb24t
PmVudHJ5cG9pbnQpLCBmdW5jdGlvbkluZGV4U3BhY2UsIG1fbW9kdWxlSW5mb3JtYXRpb24tPm5h
bWVTZWN0aW9uLT5nZXQoZnVuY3Rpb25JbmRleFNwYWNlKSwgV1RGTW92ZShtX3RpZXJVcENvdW50
c1tpbnRlcm5hbEZ1bmN0aW9uSW5kZXhdKSwgV1RGTW92ZShtX3VubGlua2VkV2FzbVRvV2FzbUNh
bGxzW2ludGVybmFsRnVuY3Rpb25JbmRleF0pLCBXVEZNb3ZlKGZ1bmN0aW9uLT5zdGFja21hcHMp
LCBXVEZNb3ZlKGZ1bmN0aW9uLT5leGNlcHRpb25IYW5kbGVycyksIFdURk1vdmUobV9leGNlcHRp
b25IYW5kbGVyTG9jYXRpb25zW2ludGVybmFsRnVuY3Rpb25JbmRleF0pKTsKLSAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OnJlcGF0Y2hQb2ludGVyKGZ1bmN0aW9uLT5jYWxsZWVNb3ZlTG9jYXRpb24s
IENhbGxlZUJpdHM6OmJveFdhc20od2FzbUVudHJ5cG9pbnRDYWxsZWUucHRyKCkpKTsKKyAgICAg
ICAgUmVmPEJCUUNhbGxlZT4gd2FzbUVudHJ5cG9pbnRDYWxsZWUgPSBCQlFDYWxsZWU6OmNyZWF0
ZShXVEZNb3ZlKGZ1bmN0aW9uLT5lbnRyeXBvaW50KSwgZnVuY3Rpb25JbmRleFNwYWNlLCBtX21v
ZHVsZUluZm9ybWF0aW9uLT5uYW1lU2VjdGlvbi0+Z2V0KGZ1bmN0aW9uSW5kZXhTcGFjZSksIFdU
Rk1vdmUobV90aWVyVXBDb3VudHNbaW50ZXJuYWxGdW5jdGlvbkluZGV4XSksIFdURk1vdmUobV91
bmxpbmtlZFdhc21Ub1dhc21DYWxsc1tpbnRlcm5hbEZ1bmN0aW9uSW5kZXhdKSwgV1RGTW92ZShm
dW5jdGlvbi0+c3RhY2ttYXBzKSwgV1RGTW92ZShmdW5jdGlvbi0+ZXhjZXB0aW9uSGFuZGxlcnMp
LCBXVEZNb3ZlKG1fZXhjZXB0aW9uSGFuZGxlckxvY2F0aW9uc1tpbnRlcm5hbEZ1bmN0aW9uSW5k
ZXhdKSwgZnVuY3Rpb24tPm9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUpOworCisgICAgICAgIHdh
c21FbnRyeXBvaW50Q2FsbGVlLT5sb29wRW50cnlwb2ludHMoKSA9IFdURk1vdmUobV9hbGxMb29w
RW50cnlwb2ludHNbaW50ZXJuYWxGdW5jdGlvbkluZGV4XSk7CisKKyAgICAgICAgZm9yIChhdXRv
JiBtb3ZlTG9jYXRpb24gOiBmdW5jdGlvbi0+Y2FsbGVlTW92ZUxvY2F0aW9ucykKKyAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoUG9pbnRlcihtb3ZlTG9jYXRpb24sIENhbGxlZUJp
dHM6OmJveFdhc20od2FzbUVudHJ5cG9pbnRDYWxsZWUucHRyKCkpKTsKIAogICAgICAgICBpZiAo
bV9jb21waWxhdGlvbkNvbnRleHRzW2ludGVybmFsRnVuY3Rpb25JbmRleF0ucGNUb0NvZGVPcmln
aW5NYXApCiAgICAgICAgICAgICBDYWxsZWVSZWdpc3RyeTo6c2luZ2xldG9uKCkuYWRkUENUb0Nv
ZGVPcmlnaW5NYXAod2FzbUVudHJ5cG9pbnRDYWxsZWUucHRyKCksIFdURk1vdmUobV9jb21waWxh
dGlvbkNvbnRleHRzW2ludGVybmFsRnVuY3Rpb25JbmRleF0ucGNUb0NvZGVPcmlnaW5NYXApKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uaAkocmV2aXNpb24g
Mjg3MzM5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uaAkod29y
a2luZyBjb3B5KQpAQCAtODcsNiArODcsNyBAQCBwcml2YXRlOgogICAgIEhhc2hNYXA8dWludDMy
X3QsIHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPiwgRGVmYXVsdEhhc2g8dWludDMy
X3Q+LCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPHVpbnQzMl90Pj4gbV9lbWJl
ZGRlclRvV2FzbUludGVybmFsRnVuY3Rpb25zOwogICAgIFZlY3RvcjxDb21waWxhdGlvbkNvbnRl
eHQ+IG1fY29tcGlsYXRpb25Db250ZXh0czsKICAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPFRp
ZXJVcENvdW50Pj4gbV90aWVyVXBDb3VudHM7CisgICAgVmVjdG9yPFZlY3RvcjxDb2RlTG9jYXRp
b25MYWJlbDxXYXNtRW50cnlQdHJUYWc+Pj4gbV9hbGxMb29wRW50cnlwb2ludHM7CiAKICAgICBS
ZWZQdHI8Q2FsbGVlR3JvdXA+IG1fY2FsbGVlR3JvdXAgeyBudWxscHRyIH07CiAgICAgdWludDMy
X3QgbV9mdW5jdGlvbkluZGV4OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUNhbGxlZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21D
YWxsZWUuaAkocmV2aXNpb24gMjg3MzM5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUNhbGxlZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00NiwxMCArNDYsNiBAQCBjbGFzcyBMTElu
dE9mZnNldHNFeHRyYWN0b3I7CiAKIG5hbWVzcGFjZSBXYXNtIHsKIAotI2lmIEVOQUJMRShXRUJB
U1NFTUJMWV9CM0pJVCkKLWNsYXNzIE9NR0Zvck9TUkVudHJ5Q2FsbGVlOwotI2VuZGlmCi0KIGNs
YXNzIENhbGxlZSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxDYWxsZWU+IHsKICAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIApAQCAtNjcsMTMgKzYzLDYgQEAgcHVibGljOgogCiAg
ICAgYm9vbCBoYXNFeGNlcHRpb25IYW5kbGVycygpIGNvbnN0IHsgcmV0dXJuICFtX2V4Y2VwdGlv
bkhhbmRsZXJzLmlzRW1wdHkoKTsgfQogCi0jaWYgRU5BQkxFKFdFQkFTU0VNQkxZX0IzSklUKQot
ICAgIHZpcnR1YWwgdm9pZCBzZXRPU1JFbnRyeUNhbGxlZShSZWY8T01HRm9yT1NSRW50cnlDYWxs
ZWU+JiYsIE1lbW9yeU1vZGUpCi0gICAgewotICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotICAgIH0KLSNlbmRpZgotCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29u
c3Q7CiAKICAgICB2aXJ0dWFsIEZ1bmN0aW9uQ29kZUJsb2NrKiBsbGludEZ1bmN0aW9uQ29kZUJs
b2NrKCkgY29uc3QgeyByZXR1cm4gbnVsbHB0cjsgfQpAQCAtMTYxLDE5ICsxNTAsMTkgQEAgcHJp
dmF0ZToKICAgICB9CiB9OwogCi1jbGFzcyBPTUdGb3JPU1JFbnRyeUNhbGxlZSBmaW5hbCA6IHB1
YmxpYyBPcHRpbWl6aW5nSklUQ2FsbGVlIHsKK2NsYXNzIE9TUkVudHJ5Q2FsbGVlIGZpbmFsIDog
cHVibGljIE9wdGltaXppbmdKSVRDYWxsZWUgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8T01H
Rm9yT1NSRW50cnlDYWxsZWU+IGNyZWF0ZShXYXNtOjpFbnRyeXBvaW50JiYgZW50cnlwb2ludCwg
c2l6ZV90IGluZGV4LCBzdGQ6OnBhaXI8Y29uc3QgTmFtZSosIFJlZlB0cjxOYW1lU2VjdGlvbj4+
JiYgbmFtZSwgdW5zaWduZWQgb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSwgdWludDMyX3QgbG9v
cEluZGV4LCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mJiB1bmxpbmtlZENhbGxzLCBT
dGFja01hcHMmJiBzdGFja21hcHMsIFZlY3RvcjxVbmxpbmtlZEhhbmRsZXJJbmZvPiYmIGV4Y2Vw
dGlvbkhhbmRsZXJzLCBWZWN0b3I8Q29kZUxvY2F0aW9uTGFiZWw8RXhjZXB0aW9uSGFuZGxlclB0
clRhZz4+JiYgZXhjZXB0aW9uSGFuZGxlckxvY2F0aW9ucykKKyAgICBzdGF0aWMgUmVmPE9TUkVu
dHJ5Q2FsbGVlPiBjcmVhdGUoQ29tcGlsYXRpb25Nb2RlIGNvbXBpbGF0aW9uTW9kZSwgV2FzbTo6
RW50cnlwb2ludCYmIGVudHJ5cG9pbnQsIHNpemVfdCBpbmRleCwgc3RkOjpwYWlyPGNvbnN0IE5h
bWUqLCBSZWZQdHI8TmFtZVNlY3Rpb24+PiYmIG5hbWUsIHVuc2lnbmVkIG9zckVudHJ5U2NyYXRj
aEJ1ZmZlclNpemUsIHVpbnQzMl90IGxvb3BJbmRleCwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2Fz
bUNhbGw+JiYgdW5saW5rZWRDYWxscywgU3RhY2tNYXBzJiYgc3RhY2ttYXBzLCBWZWN0b3I8VW5s
aW5rZWRIYW5kbGVySW5mbz4mJiBleGNlcHRpb25IYW5kbGVycywgVmVjdG9yPENvZGVMb2NhdGlv
bkxhYmVsPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+PiYmIGV4Y2VwdGlvbkhhbmRsZXJMb2NhdGlv
bnMpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBPTUdGb3JPU1JFbnRyeUNh
bGxlZShXVEZNb3ZlKGVudHJ5cG9pbnQpLCBpbmRleCwgV1RGTW92ZShuYW1lKSwgb3NyRW50cnlT
Y3JhdGNoQnVmZmVyU2l6ZSwgbG9vcEluZGV4LCBXVEZNb3ZlKHVubGlua2VkQ2FsbHMpLCBXVEZN
b3ZlKHN0YWNrbWFwcyksIFdURk1vdmUoZXhjZXB0aW9uSGFuZGxlcnMpLCBXVEZNb3ZlKGV4Y2Vw
dGlvbkhhbmRsZXJMb2NhdGlvbnMpKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IE9T
UkVudHJ5Q2FsbGVlKGNvbXBpbGF0aW9uTW9kZSwgV1RGTW92ZShlbnRyeXBvaW50KSwgaW5kZXgs
IFdURk1vdmUobmFtZSksIG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUsIGxvb3BJbmRleCwgV1RG
TW92ZSh1bmxpbmtlZENhbGxzKSwgV1RGTW92ZShzdGFja21hcHMpLCBXVEZNb3ZlKGV4Y2VwdGlv
bkhhbmRsZXJzKSwgV1RGTW92ZShleGNlcHRpb25IYW5kbGVyTG9jYXRpb25zKSkpOwogICAgIH0K
IAogICAgIHVuc2lnbmVkIG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUoKSBjb25zdCB7IHJldHVy
biBtX29zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemU7IH0KICAgICB1aW50MzJfdCBsb29wSW5kZXgo
KSBjb25zdCB7IHJldHVybiBtX2xvb3BJbmRleDsgfQogCiBwcml2YXRlOgotICAgIE9NR0Zvck9T
UkVudHJ5Q2FsbGVlKFdhc206OkVudHJ5cG9pbnQmJiBlbnRyeXBvaW50LCBzaXplX3QgaW5kZXgs
IHN0ZDo6cGFpcjxjb25zdCBOYW1lKiwgUmVmUHRyPE5hbWVTZWN0aW9uPj4mJiBuYW1lLCB1bnNp
Z25lZCBvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplLCB1aW50MzJfdCBsb29wSW5kZXgsIFZlY3Rv
cjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYmIHVubGlua2VkQ2FsbHMsIFN0YWNrTWFwcyYmIHN0
YWNrbWFwcywgVmVjdG9yPFVubGlua2VkSGFuZGxlckluZm8+JiYgZXhjZXB0aW9uSGFuZGxlcnMs
IFZlY3RvcjxDb2RlTG9jYXRpb25MYWJlbDxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPj4mJiBleGNl
cHRpb25IYW5kbGVyTG9jYXRpb25zKQotICAgICAgICA6IE9wdGltaXppbmdKSVRDYWxsZWUoV2Fz
bTo6Q29tcGlsYXRpb25Nb2RlOjpPTUdGb3JPU1JFbnRyeU1vZGUsIFdURk1vdmUoZW50cnlwb2lu
dCksIGluZGV4LCBXVEZNb3ZlKG5hbWUpLCBXVEZNb3ZlKHVubGlua2VkQ2FsbHMpLCBXVEZNb3Zl
KHN0YWNrbWFwcyksIFdURk1vdmUoZXhjZXB0aW9uSGFuZGxlcnMpLCBXVEZNb3ZlKGV4Y2VwdGlv
bkhhbmRsZXJMb2NhdGlvbnMpKQorICAgIE9TUkVudHJ5Q2FsbGVlKENvbXBpbGF0aW9uTW9kZSBj
b21waWxhdGlvbk1vZGUsIFdhc206OkVudHJ5cG9pbnQmJiBlbnRyeXBvaW50LCBzaXplX3QgaW5k
ZXgsIHN0ZDo6cGFpcjxjb25zdCBOYW1lKiwgUmVmUHRyPE5hbWVTZWN0aW9uPj4mJiBuYW1lLCB1
bnNpZ25lZCBvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplLCB1aW50MzJfdCBsb29wSW5kZXgsIFZl
Y3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYmIHVubGlua2VkQ2FsbHMsIFN0YWNrTWFwcyYm
IHN0YWNrbWFwcywgVmVjdG9yPFVubGlua2VkSGFuZGxlckluZm8+JiYgZXhjZXB0aW9uSGFuZGxl
cnMsIFZlY3RvcjxDb2RlTG9jYXRpb25MYWJlbDxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPj4mJiBl
eGNlcHRpb25IYW5kbGVyTG9jYXRpb25zKQorICAgICAgICA6IE9wdGltaXppbmdKSVRDYWxsZWUo
Y29tcGlsYXRpb25Nb2RlLCBXVEZNb3ZlKGVudHJ5cG9pbnQpLCBpbmRleCwgV1RGTW92ZShuYW1l
KSwgV1RGTW92ZSh1bmxpbmtlZENhbGxzKSwgV1RGTW92ZShzdGFja21hcHMpLCBXVEZNb3ZlKGV4
Y2VwdGlvbkhhbmRsZXJzKSwgV1RGTW92ZShleGNlcHRpb25IYW5kbGVyTG9jYXRpb25zKSkKICAg
ICAgICAgLCBtX29zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUob3NyRW50cnlTY3JhdGNoQnVmZmVy
U2l6ZSkKICAgICAgICAgLCBtX2xvb3BJbmRleChsb29wSW5kZXgpCiAgICAgewpAQCAtMTg1LDEz
ICsxNzQsMTMgQEAgcHJpdmF0ZToKIAogY2xhc3MgQkJRQ2FsbGVlIGZpbmFsIDogcHVibGljIE9w
dGltaXppbmdKSVRDYWxsZWUgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8QkJRQ2FsbGVlPiBj
cmVhdGUoV2FzbTo6RW50cnlwb2ludCYmIGVudHJ5cG9pbnQsIHNpemVfdCBpbmRleCwgc3RkOjpw
YWlyPGNvbnN0IE5hbWUqLCBSZWZQdHI8TmFtZVNlY3Rpb24+PiYmIG5hbWUsIHN0ZDo6dW5pcXVl
X3B0cjxUaWVyVXBDb3VudD4mJiB0aWVyVXBDb3VudCwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2Fz
bUNhbGw+JiYgdW5saW5rZWRDYWxscywgU3RhY2tNYXBzJiYgc3RhY2ttYXBzLCBWZWN0b3I8VW5s
aW5rZWRIYW5kbGVySW5mbz4mJiBleGNlcHRpb25IYW5kbGVycywgVmVjdG9yPENvZGVMb2NhdGlv
bkxhYmVsPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+PiYmIGV4Y2VwdGlvbkhhbmRsZXJMb2NhdGlv
bnMpCisgICAgc3RhdGljIFJlZjxCQlFDYWxsZWU+IGNyZWF0ZShXYXNtOjpFbnRyeXBvaW50JiYg
ZW50cnlwb2ludCwgc2l6ZV90IGluZGV4LCBzdGQ6OnBhaXI8Y29uc3QgTmFtZSosIFJlZlB0cjxO
YW1lU2VjdGlvbj4+JiYgbmFtZSwgc3RkOjp1bmlxdWVfcHRyPFRpZXJVcENvdW50PiYmIHRpZXJV
cENvdW50LCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mJiB1bmxpbmtlZENhbGxzLCBT
dGFja01hcHMmJiBzdGFja21hcHMsIFZlY3RvcjxVbmxpbmtlZEhhbmRsZXJJbmZvPiYmIGV4Y2Vw
dGlvbkhhbmRsZXJzLCBWZWN0b3I8Q29kZUxvY2F0aW9uTGFiZWw8RXhjZXB0aW9uSGFuZGxlclB0
clRhZz4+JiYgZXhjZXB0aW9uSGFuZGxlckxvY2F0aW9ucywgdW5zaWduZWQgb3NyRW50cnlTY3Jh
dGNoQnVmZmVyU2l6ZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEJCUUNh
bGxlZShXVEZNb3ZlKGVudHJ5cG9pbnQpLCBpbmRleCwgV1RGTW92ZShuYW1lKSwgV1RGTW92ZSh0
aWVyVXBDb3VudCksIFdURk1vdmUodW5saW5rZWRDYWxscyksIFdURk1vdmUoc3RhY2ttYXBzKSwg
V1RGTW92ZShleGNlcHRpb25IYW5kbGVycyksIFdURk1vdmUoZXhjZXB0aW9uSGFuZGxlckxvY2F0
aW9ucykpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQkJRQ2FsbGVlKFdURk1vdmUo
ZW50cnlwb2ludCksIGluZGV4LCBXVEZNb3ZlKG5hbWUpLCBXVEZNb3ZlKHRpZXJVcENvdW50KSwg
V1RGTW92ZSh1bmxpbmtlZENhbGxzKSwgV1RGTW92ZShzdGFja21hcHMpLCBXVEZNb3ZlKGV4Y2Vw
dGlvbkhhbmRsZXJzKSwgV1RGTW92ZShleGNlcHRpb25IYW5kbGVyTG9jYXRpb25zKSwgb3NyRW50
cnlTY3JhdGNoQnVmZmVyU2l6ZSkpOwogICAgIH0KIAotICAgIE9NR0Zvck9TUkVudHJ5Q2FsbGVl
KiBvc3JFbnRyeUNhbGxlZSgpIHsgcmV0dXJuIG1fb3NyRW50cnlDYWxsZWUuZ2V0KCk7IH0KLSAg
ICB2b2lkIHNldE9TUkVudHJ5Q2FsbGVlKFJlZjxPTUdGb3JPU1JFbnRyeUNhbGxlZT4mJiBvc3JF
bnRyeUNhbGxlZSwgTWVtb3J5TW9kZSkgZmluYWwKKyAgICBPU1JFbnRyeUNhbGxlZSogb3NyRW50
cnlDYWxsZWUoKSB7IHJldHVybiBtX29zckVudHJ5Q2FsbGVlLmdldCgpOyB9CisgICAgdm9pZCBz
ZXRPU1JFbnRyeUNhbGxlZShSZWY8T1NSRW50cnlDYWxsZWU+JiYgb3NyRW50cnlDYWxsZWUsIE1l
bW9yeU1vZGUpCiAgICAgewogICAgICAgICBtX29zckVudHJ5Q2FsbGVlID0gV1RGTW92ZShvc3JF
bnRyeUNhbGxlZSk7CiAgICAgfQpAQCAtMjA3LDE3ICsxOTYsMjQgQEAgcHVibGljOgogCiAgICAg
VGllclVwQ291bnQqIHRpZXJVcENvdW50KCkgeyByZXR1cm4gbV90aWVyVXBDb3VudC5nZXQoKTsg
fQogCisgICAgVmVjdG9yPENvZGVMb2NhdGlvbkxhYmVsPFdhc21FbnRyeVB0clRhZz4+JiBsb29w
RW50cnlwb2ludHMoKSB7IHJldHVybiBtX2xvb3BFbnRyeXBvaW50czsgfQorCisgICAgdW5zaWdu
ZWQgb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fb3NyRW50cnlT
Y3JhdGNoQnVmZmVyU2l6ZTsgfQorCiBwcml2YXRlOgotICAgIEJCUUNhbGxlZShXYXNtOjpFbnRy
eXBvaW50JiYgZW50cnlwb2ludCwgc2l6ZV90IGluZGV4LCBzdGQ6OnBhaXI8Y29uc3QgTmFtZSos
IFJlZlB0cjxOYW1lU2VjdGlvbj4+JiYgbmFtZSwgc3RkOjp1bmlxdWVfcHRyPFRpZXJVcENvdW50
PiYmIHRpZXJVcENvdW50LCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mJiB1bmxpbmtl
ZENhbGxzLCBTdGFja01hcHMmJiBzdGFja21hcHMsIFZlY3RvcjxVbmxpbmtlZEhhbmRsZXJJbmZv
PiYmIGV4Y2VwdGlvbkhhbmRsZXJzLCBWZWN0b3I8Q29kZUxvY2F0aW9uTGFiZWw8RXhjZXB0aW9u
SGFuZGxlclB0clRhZz4+JiYgZXhjZXB0aW9uSGFuZGxlckxvY2F0aW9ucykKKyAgICBCQlFDYWxs
ZWUoV2FzbTo6RW50cnlwb2ludCYmIGVudHJ5cG9pbnQsIHNpemVfdCBpbmRleCwgc3RkOjpwYWly
PGNvbnN0IE5hbWUqLCBSZWZQdHI8TmFtZVNlY3Rpb24+PiYmIG5hbWUsIHN0ZDo6dW5pcXVlX3B0
cjxUaWVyVXBDb3VudD4mJiB0aWVyVXBDb3VudCwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNh
bGw+JiYgdW5saW5rZWRDYWxscywgU3RhY2tNYXBzJiYgc3RhY2ttYXBzLCBWZWN0b3I8VW5saW5r
ZWRIYW5kbGVySW5mbz4mJiBleGNlcHRpb25IYW5kbGVycywgVmVjdG9yPENvZGVMb2NhdGlvbkxh
YmVsPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+PiYmIGV4Y2VwdGlvbkhhbmRsZXJMb2NhdGlvbnMs
IHVuc2lnbmVkIG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUpCiAgICAgICAgIDogT3B0aW1pemlu
Z0pJVENhbGxlZShXYXNtOjpDb21waWxhdGlvbk1vZGU6OkJCUU1vZGUsIFdURk1vdmUoZW50cnlw
b2ludCksIGluZGV4LCBXVEZNb3ZlKG5hbWUpLCBXVEZNb3ZlKHVubGlua2VkQ2FsbHMpLCBXVEZN
b3ZlKHN0YWNrbWFwcyksIFdURk1vdmUoZXhjZXB0aW9uSGFuZGxlcnMpLCBXVEZNb3ZlKGV4Y2Vw
dGlvbkhhbmRsZXJMb2NhdGlvbnMpKQogICAgICAgICAsIG1fdGllclVwQ291bnQoV1RGTW92ZSh0
aWVyVXBDb3VudCkpCisgICAgICAgICwgbV9vc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplKG9zckVu
dHJ5U2NyYXRjaEJ1ZmZlclNpemUpCiAgICAgewogICAgIH0KIAotICAgIFJlZlB0cjxPTUdGb3JP
U1JFbnRyeUNhbGxlZT4gbV9vc3JFbnRyeUNhbGxlZTsKKyAgICBSZWZQdHI8T1NSRW50cnlDYWxs
ZWU+IG1fb3NyRW50cnlDYWxsZWU7CiAgICAgUmVmUHRyPE9NR0NhbGxlZT4gbV9yZXBsYWNlbWVu
dDsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8VGllclVwQ291bnQ+IG1fdGllclVwQ291bnQ7CisgICAg
VmVjdG9yPENvZGVMb2NhdGlvbkxhYmVsPFdhc21FbnRyeVB0clRhZz4+IG1fbG9vcEVudHJ5cG9p
bnRzOwogICAgIGJvb2wgbV9kaWRTdGFydENvbXBpbGluZ09TUkVudHJ5Q2FsbGVlIHsgZmFsc2Ug
fTsKKyAgICB1bnNpZ25lZCBtX29zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUgeyAwIH07CiB9Owog
I2VuZGlmCiAKQEAgLTIzNywxMyArMjMzLDEzIEBAIHB1YmxpYzoKIAogI2lmIEVOQUJMRShXRUJB
U1NFTUJMWV9CM0pJVCkKICAgICBKSVRDYWxsZWUqIHJlcGxhY2VtZW50KE1lbW9yeU1vZGUgbW9k
ZSkgeyByZXR1cm4gbV9yZXBsYWNlbWVudHNbc3RhdGljX2Nhc3Q8dWludDhfdD4obW9kZSldLmdl
dCgpOyB9Ci0gICAgdm9pZCBzZXRSZXBsYWNlbWVudChSZWY8SklUQ2FsbGVlPiYmIHJlcGxhY2Vt
ZW50LCBNZW1vcnlNb2RlIG1vZGUpCisgICAgdm9pZCBzZXRSZXBsYWNlbWVudChSZWY8T3B0aW1p
emluZ0pJVENhbGxlZT4mJiByZXBsYWNlbWVudCwgTWVtb3J5TW9kZSBtb2RlKQogICAgIHsKICAg
ICAgICAgbV9yZXBsYWNlbWVudHNbc3RhdGljX2Nhc3Q8dWludDhfdD4obW9kZSldID0gV1RGTW92
ZShyZXBsYWNlbWVudCk7CiAgICAgfQogCi0gICAgT01HRm9yT1NSRW50cnlDYWxsZWUqIG9zckVu
dHJ5Q2FsbGVlKE1lbW9yeU1vZGUgbW9kZSkgeyByZXR1cm4gbV9vc3JFbnRyeUNhbGxlZXNbc3Rh
dGljX2Nhc3Q8dWludDhfdD4obW9kZSldLmdldCgpOyB9Ci0gICAgdm9pZCBzZXRPU1JFbnRyeUNh
bGxlZShSZWY8T01HRm9yT1NSRW50cnlDYWxsZWU+JiYgb3NyRW50cnlDYWxsZWUsIE1lbW9yeU1v
ZGUgbW9kZSkgZmluYWwKKyAgICBPU1JFbnRyeUNhbGxlZSogb3NyRW50cnlDYWxsZWUoTWVtb3J5
TW9kZSBtb2RlKSB7IHJldHVybiBtX29zckVudHJ5Q2FsbGVlc1tzdGF0aWNfY2FzdDx1aW50OF90
Pihtb2RlKV0uZ2V0KCk7IH0KKyAgICB2b2lkIHNldE9TUkVudHJ5Q2FsbGVlKFJlZjxPU1JFbnRy
eUNhbGxlZT4mJiBvc3JFbnRyeUNhbGxlZSwgTWVtb3J5TW9kZSBtb2RlKQogICAgIHsKICAgICAg
ICAgbV9vc3JFbnRyeUNhbGxlZXNbc3RhdGljX2Nhc3Q8dWludDhfdD4obW9kZSldID0gV1RGTW92
ZShvc3JFbnRyeUNhbGxlZSk7CiAgICAgfQpAQCAtMjU4LDggKzI1NCw4IEBAIHByaXZhdGU6CiAg
ICAgdm9pZCBsaW5rRXhjZXB0aW9uSGFuZGxlcnMoKTsKIAogI2lmIEVOQUJMRShXRUJBU1NFTUJM
WV9CM0pJVCkKLSAgICBSZWZQdHI8SklUQ2FsbGVlPiBtX3JlcGxhY2VtZW50c1tXYXNtOjpOdW1i
ZXJPZk1lbW9yeU1vZGVzXTsKLSAgICBSZWZQdHI8T01HRm9yT1NSRW50cnlDYWxsZWU+IG1fb3Ny
RW50cnlDYWxsZWVzW1dhc206Ok51bWJlck9mTWVtb3J5TW9kZXNdOworICAgIFJlZlB0cjxPcHRp
bWl6aW5nSklUQ2FsbGVlPiBtX3JlcGxhY2VtZW50c1tXYXNtOjpOdW1iZXJPZk1lbW9yeU1vZGVz
XTsKKyAgICBSZWZQdHI8T1NSRW50cnlDYWxsZWU+IG1fb3NyRW50cnlDYWxsZWVzW1dhc206Ok51
bWJlck9mTWVtb3J5TW9kZXNdOwogI2VuZGlmCiAgICAgc3RkOjp1bmlxdWVfcHRyPEZ1bmN0aW9u
Q29kZUJsb2NrPiBtX2NvZGVCbG9jazsKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8V2FzbUVu
dHJ5UHRyVGFnPiBtX2VudHJ5cG9pbnQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtQ2FsbGVlR3JvdXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtQ2FsbGVlR3JvdXAuaAkocmV2aXNpb24gMjg3MzM5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbUNhbGxlZUdyb3VwLmgJKHdvcmtpbmcgY29weSkKQEAgLTE2Myw3
ICsxNjMsNyBAQCBwcml2YXRlOgogI2lmIEVOQUJMRShXRUJBU1NFTUJMWV9CM0pJVCkKICAgICBm
cmllbmQgY2xhc3MgQkJRUGxhbjsKICAgICBmcmllbmQgY2xhc3MgT01HUGxhbjsKLSAgICBmcmll
bmQgY2xhc3MgT01HRm9yT1NSRW50cnlQbGFuOworICAgIGZyaWVuZCBjbGFzcyBPU1JFbnRyeVBs
YW47CiAjZW5kaWYKIAogICAgIENhbGxlZUdyb3VwKENvbnRleHQqLCBNZW1vcnlNb2RlLCBNb2R1
bGVJbmZvcm1hdGlvbiYsIFJlZlB0cjxMTEludENhbGxlZXM+KTsKQEAgLTE4Myw2ICsxODMsNyBA
QCBwcml2YXRlOgogICAgIFJlZlB0cjxFbnRyeVBsYW4+IG1fcGxhbjsKICAgICBzdGQ6OmF0b21p
Yzxib29sPiBtX2NvbXBpbGF0aW9uRmluaXNoZWQgeyBmYWxzZSB9OwogICAgIFN0cmluZyBtX2Vy
cm9yTWVzc2FnZTsKK3B1YmxpYzoKICAgICBMb2NrIG1fbG9jazsKIH07CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Db21waWxhdGlvbk1vZGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Db21waWxhdGlvbk1vZGUuY3BwCShy
ZXZpc2lvbiAyODczMzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ29tcGls
YXRpb25Nb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsNiArMzgsOCBAQCBjb25zdCBjaGFy
KiBtYWtlU3RyaW5nKENvbXBpbGF0aW9uTW9kZSBtCiAgICAgICAgIHJldHVybiAiTExJbnQiOwog
ICAgIGNhc2UgQ29tcGlsYXRpb25Nb2RlOjpCQlFNb2RlOgogICAgICAgICByZXR1cm4gIkJCUSI7
CisgICAgY2FzZSBDb21waWxhdGlvbk1vZGU6OkJCUUZvck9TUkVudHJ5TW9kZToKKyAgICAgICAg
cmV0dXJuICJCQlFGb3JPU1JFbnRyeSI7CiAgICAgY2FzZSBDb21waWxhdGlvbk1vZGU6Ok9NR01v
ZGU6CiAgICAgICAgIHJldHVybiAiT01HIjsKICAgICBjYXNlIENvbXBpbGF0aW9uTW9kZTo6T01H
Rm9yT1NSRW50cnlNb2RlOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNv
bXBpbGF0aW9uTW9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21Db21waWxhdGlvbk1vZGUuaAkocmV2aXNpb24gMjg3MzM5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbUNvbXBpbGF0aW9uTW9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
MCw2ICszMCw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CiBlbnVtIGNsYXNz
IENvbXBpbGF0aW9uTW9kZSA6IHVpbnQ4X3QgewogICAgIExMSW50TW9kZSwKICAgICBCQlFNb2Rl
LAorICAgIEJCUUZvck9TUkVudHJ5TW9kZSwKICAgICBPTUdNb2RlLAogICAgIE9NR0Zvck9TUkVu
dHJ5TW9kZSwKICAgICBFbWJlZGRlckVudHJ5cG9pbnRNb2RlLApAQCAtMzcsNCArMzgsNDYgQEAg
ZW51bSBjbGFzcyBDb21waWxhdGlvbk1vZGUgOiB1aW50OF90IHsKIAogY29uc3QgY2hhciogbWFr
ZVN0cmluZyhDb21waWxhdGlvbk1vZGUpOwogCitjb25zdGV4cHIgaW5saW5lIGJvb2wgaXNPU1JF
bnRyeShDb21waWxhdGlvbk1vZGUgY29tcGlsYXRpb25Nb2RlKQoreworICAgIHN3aXRjaCAoY29t
cGlsYXRpb25Nb2RlKSB7CisgICAgY2FzZSBDb21waWxhdGlvbk1vZGU6OkxMSW50TW9kZToKKyAg
ICBjYXNlIENvbXBpbGF0aW9uTW9kZTo6QkJRTW9kZToKKyAgICBjYXNlIENvbXBpbGF0aW9uTW9k
ZTo6T01HTW9kZToKKyAgICBjYXNlIENvbXBpbGF0aW9uTW9kZTo6RW1iZWRkZXJFbnRyeXBvaW50
TW9kZToKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGNhc2UgQ29tcGlsYXRpb25Nb2RlOjpC
QlFGb3JPU1JFbnRyeU1vZGU6CisgICAgY2FzZSBDb21waWxhdGlvbk1vZGU6Ok9NR0Zvck9TUkVu
dHJ5TW9kZToKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorfQorCitjb25zdGV4cHIgaW5s
aW5lIGJvb2wgaXNBbnlCQlEoQ29tcGlsYXRpb25Nb2RlIGNvbXBpbGF0aW9uTW9kZSkKK3sKKyAg
ICBzd2l0Y2ggKGNvbXBpbGF0aW9uTW9kZSkgeworICAgIGNhc2UgQ29tcGlsYXRpb25Nb2RlOjpC
QlFNb2RlOgorICAgIGNhc2UgQ29tcGlsYXRpb25Nb2RlOjpCQlFGb3JPU1JFbnRyeU1vZGU6Cisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIGNhc2UgQ29tcGlsYXRpb25Nb2RlOjpPTUdGb3JPU1JF
bnRyeU1vZGU6CisgICAgY2FzZSBDb21waWxhdGlvbk1vZGU6OkxMSW50TW9kZToKKyAgICBjYXNl
IENvbXBpbGF0aW9uTW9kZTo6T01HTW9kZToKKyAgICBjYXNlIENvbXBpbGF0aW9uTW9kZTo6RW1i
ZWRkZXJFbnRyeXBvaW50TW9kZToKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKwor
Y29uc3RleHByIGlubGluZSBib29sIGlzQW55T01HKENvbXBpbGF0aW9uTW9kZSBjb21waWxhdGlv
bk1vZGUpCit7CisgICAgc3dpdGNoIChjb21waWxhdGlvbk1vZGUpIHsKKyAgICBjYXNlIENvbXBp
bGF0aW9uTW9kZTo6T01HTW9kZToKKyAgICBjYXNlIENvbXBpbGF0aW9uTW9kZTo6T01HRm9yT1NS
RW50cnlNb2RlOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBjYXNlIENvbXBpbGF0aW9uTW9k
ZTo6QkJRTW9kZToKKyAgICBjYXNlIENvbXBpbGF0aW9uTW9kZTo6QkJRRm9yT1NSRW50cnlNb2Rl
OgorICAgIGNhc2UgQ29tcGlsYXRpb25Nb2RlOjpMTEludE1vZGU6CisgICAgY2FzZSBDb21waWxh
dGlvbk1vZGU6OkVtYmVkZGVyRW50cnlwb2ludE1vZGU6CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9Cit9CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtRm9ybWF0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbUZvcm1hdC5oCShyZXZpc2lvbiAyODczMzkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRm9ybWF0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0Mywx
MCArNDQzLDExIEBAIHN0cnVjdCBFbnRyeXBvaW50IHsKIAogc3RydWN0IEludGVybmFsRnVuY3Rp
b24gewogICAgIFdURl9NQUtFX1NUUlVDVF9GQVNUX0FMTE9DQVRFRDsKLSAgICBDb2RlTG9jYXRp
b25EYXRhTGFiZWxQdHI8V2FzbUVudHJ5UHRyVGFnPiBjYWxsZWVNb3ZlTG9jYXRpb247CisgICAg
VmVjdG9yPENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0cjxXYXNtRW50cnlQdHJUYWc+PiBjYWxsZWVN
b3ZlTG9jYXRpb25zOwogICAgIFN0YWNrTWFwcyBzdGFja21hcHM7CiAgICAgVmVjdG9yPFVubGlu
a2VkSGFuZGxlckluZm8+IGV4Y2VwdGlvbkhhbmRsZXJzOwogICAgIEVudHJ5cG9pbnQgZW50cnlw
b2ludDsKKyAgICB1bnNpZ25lZCBvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplIHsgMCB9OwogfTsK
IAogLy8gV2ViQXNzZW1ibHkgZGlyZWN0IGNhbGxzIGFuZCBjYWxsX2luZGlyZWN0IHVzZSBpbmRp
Y2VzIGludG8gImZ1bmN0aW9uIGluZGV4IHNwYWNlIi4gVGhpcyBzcGFjZSBzdGFydHMKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21MTEludFBsYW4uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21MTEludFBsYW4uY3BwCShyZXZpc2lv
biAyODczMzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJbnRQbGFuLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTY4LDggKzE2OCw4IEBAIHZvaWQgTExJbnRQbGFuOjpkaWRD
b21wbGV0ZUNvbXBpbGF0aW9uKCkKICAgICAgICAgICAgIFJlZjxFbWJlZGRlckVudHJ5cG9pbnRD
YWxsZWU+IGNhbGxlZSA9IEVtYmVkZGVyRW50cnlwb2ludENhbGxlZTo6Y3JlYXRlKFdURk1vdmUo
ZnVuY3Rpb24tPmVudHJ5cG9pbnQpKTsKICAgICAgICAgICAgIC8vIEZJWE1FOiByZW1vdmUgdGhp
cyByZXBhdGNoUG9pbnRlciAtIGp1c3QgcGFzcyBpbiB0aGUgY2FsbGVlIGRpcmVjdGx5CiAgICAg
ICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY2NDYy
Ci0gICAgICAgICAgICBpZiAoZnVuY3Rpb24tPmNhbGxlZU1vdmVMb2NhdGlvbikKLSAgICAgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaFBvaW50ZXIoZnVuY3Rpb24tPmNhbGxlZU1v
dmVMb2NhdGlvbiwgQ2FsbGVlQml0czo6Ym94V2FzbShjYWxsZWUucHRyKCkpKTsKKyAgICAgICAg
ICAgIGZvciAoYXV0byYgbW92ZUxvY2F0aW9uIDogZnVuY3Rpb24tPmNhbGxlZU1vdmVMb2NhdGlv
bnMpCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hQb2ludGVyKG1vdmVM
b2NhdGlvbiwgQ2FsbGVlQml0czo6Ym94V2FzbShjYWxsZWUucHRyKCkpKTsKIAogICAgICAgICAg
ICAgYXV0byByZXN1bHQgPSBtX2VtYmVkZGVyQ2FsbGVlcy5hZGQoZnVuY3Rpb25JbmRleCwgV1RG
TW92ZShjYWxsZWUpKTsKICAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQocmVzdWx0LCByZXN1bHQu
aXNOZXdFbnRyeSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT01HRm9y
T1NSRW50cnlQbGFuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtT01HRm9yT1NSRW50cnlQbGFuLmNwcAkocmV2aXNpb24gMjg3MzM5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9NR0Zvck9TUkVudHJ5UGxhbi5jcHAJKG5vbmV4aXN0
ZW50KQpAQCAtMSwxNTIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOS0yMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIldhc21PTUdG
b3JPU1JFbnRyeVBsYW4uaCIKLQotI2lmIEVOQUJMRShXRUJBU1NFTUJMWV9CM0pJVCkKLQotI2lu
Y2x1ZGUgIkpJVENvbXBpbGF0aW9uLmgiCi0jaW5jbHVkZSAiTGlua0J1ZmZlci5oIgotI2luY2x1
ZGUgIldhc21CM0lSR2VuZXJhdG9yLmgiCi0jaW5jbHVkZSAiV2FzbUNhbGxlZS5oIgotI2luY2x1
ZGUgIldhc21NYWNoaW5lVGhyZWFkcy5oIgotI2luY2x1ZGUgIldhc21OYW1lU2VjdGlvbi5oIgot
I2luY2x1ZGUgIldhc21TaWduYXR1cmVJbmxpbmVzLmgiCi0jaW5jbHVkZSA8d3RmL0RhdGFMb2cu
aD4KLSNpbmNsdWRlIDx3dGYvTG9ja2VyLmg+Ci0jaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5o
PgotCi1uYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewotCi1uYW1lc3BhY2UgV2FzbU9N
R0Zvck9TUkVudHJ5UGxhbkludGVybmFsIHsKLXN0YXRpYyBjb25zdGV4cHIgYm9vbCB2ZXJib3Nl
ID0gZmFsc2U7Ci19Ci0KLU9NR0Zvck9TUkVudHJ5UGxhbjo6T01HRm9yT1NSRW50cnlQbGFuKENv
bnRleHQqIGNvbnRleHQsIFJlZjxNb2R1bGU+JiYgbW9kdWxlLCBSZWY8Q2FsbGVlPiYmIGNhbGxl
ZSwgdWludDMyX3QgZnVuY3Rpb25JbmRleCwgdWludDMyX3QgbG9vcEluZGV4LCBNZW1vcnlNb2Rl
IG1vZGUsIENvbXBsZXRpb25UYXNrJiYgdGFzaykKLSAgICA6IEJhc2UoY29udGV4dCwgY29uc3Rf
Y2FzdDxNb2R1bGVJbmZvcm1hdGlvbiY+KG1vZHVsZS0+bW9kdWxlSW5mb3JtYXRpb24oKSksIFdU
Rk1vdmUodGFzaykpCi0gICAgLCBtX21vZHVsZShXVEZNb3ZlKG1vZHVsZSkpCi0gICAgLCBtX2Nh
bGxlZUdyb3VwKCptX21vZHVsZS0+Y2FsbGVlR3JvdXBGb3IobW9kZSkpCi0gICAgLCBtX2NhbGxl
ZShXVEZNb3ZlKGNhbGxlZSkpCi0gICAgLCBtX2Z1bmN0aW9uSW5kZXgoZnVuY3Rpb25JbmRleCkK
LSAgICAsIG1fbG9vcEluZGV4KGxvb3BJbmRleCkKLXsKLSAgICBBU1NFUlQoT3B0aW9uczo6dXNl
T01HSklUKCkpOwotICAgIHNldE1vZGUobW9kZSk7Ci0gICAgQVNTRVJUKG1fY2FsbGVlR3JvdXAt
PnJ1bm5hYmxlKCkpOwotICAgIEFTU0VSVChtX2NhbGxlZUdyb3VwLnB0cigpID09IG1fbW9kdWxl
LT5jYWxsZWVHcm91cEZvcihtX21vZGUpKTsKLSAgICBkYXRhTG9nTG5JZihXYXNtT01HRm9yT1NS
RW50cnlQbGFuSW50ZXJuYWw6OnZlcmJvc2UsICJTdGFydGluZyBPTUdGb3JPU1JFbnRyeSBwbGFu
IGZvciAiLCBmdW5jdGlvbkluZGV4LCAiIG9mIG1vZHVsZTogIiwgUmF3UG9pbnRlcigmbV9tb2R1
bGUuZ2V0KCkpKTsKLX0KLQotdm9pZCBPTUdGb3JPU1JFbnRyeVBsYW46OndvcmsoQ29tcGlsYXRp
b25FZmZvcnQpCi17Ci0gICAgQVNTRVJUKG1fY2FsbGVlR3JvdXAtPnJ1bm5hYmxlKCkpOwotICAg
IEFTU0VSVChtX2NhbGxlZUdyb3VwLnB0cigpID09IG1fbW9kdWxlLT5jYWxsZWVHcm91cEZvciht
b2RlKCkpKTsKLSAgICBjb25zdCBGdW5jdGlvbkRhdGEmIGZ1bmN0aW9uID0gbV9tb2R1bGVJbmZv
cm1hdGlvbi0+ZnVuY3Rpb25zW21fZnVuY3Rpb25JbmRleF07Ci0KLSAgICBjb25zdCB1aW50MzJf
dCBmdW5jdGlvbkluZGV4U3BhY2UgPSBtX2Z1bmN0aW9uSW5kZXggKyBtX21vZHVsZS0+bW9kdWxl
SW5mb3JtYXRpb24oKS5pbXBvcnRGdW5jdGlvbkNvdW50KCk7Ci0gICAgQVNTRVJUKGZ1bmN0aW9u
SW5kZXhTcGFjZSA8IG1fbW9kdWxlLT5tb2R1bGVJbmZvcm1hdGlvbigpLmZ1bmN0aW9uSW5kZXhT
cGFjZVNpemUoKSk7Ci0KLSAgICBTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCA9IG1fbW9k
dWxlSW5mb3JtYXRpb24tPmludGVybmFsRnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzW21fZnVuY3Rp
b25JbmRleF07Ci0gICAgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUgPSBTaWduYXR1cmVJbmZv
cm1hdGlvbjo6Z2V0KHNpZ25hdHVyZUluZGV4KTsKLQotICAgIFZlY3RvcjxVbmxpbmtlZFdhc21U
b1dhc21DYWxsPiB1bmxpbmtlZENhbGxzOwotICAgIENvbXBpbGF0aW9uQ29udGV4dCBjb250ZXh0
OwotICAgIHVuc2lnbmVkIG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUgPSAwOwotICAgIGF1dG8g
cGFyc2VBbmRDb21waWxlUmVzdWx0ID0gcGFyc2VBbmRDb21waWxlKGNvbnRleHQsIGZ1bmN0aW9u
LCBzaWduYXR1cmUsIHVubGlua2VkQ2FsbHMsIG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUsIG1f
bW9kdWxlSW5mb3JtYXRpb24uZ2V0KCksIG1fbW9kZSwgQ29tcGlsYXRpb25Nb2RlOjpPTUdGb3JP
U1JFbnRyeU1vZGUsIG1fZnVuY3Rpb25JbmRleCwgbV9sb29wSW5kZXgpOwotCi0gICAgaWYgKFVO
TElLRUxZKCFwYXJzZUFuZENvbXBpbGVSZXN1bHQpKSB7Ci0gICAgICAgIExvY2tlciBsb2NrZXIg
eyBtX2xvY2sgfTsKLSAgICAgICAgZmFpbChtYWtlU3RyaW5nKHBhcnNlQW5kQ29tcGlsZVJlc3Vs
dC5lcnJvcigpLCAid2hlbiB0cnlpbmcgdG8gdGllciB1cCAiLCBTdHJpbmc6Om51bWJlcihtX2Z1
bmN0aW9uSW5kZXgpKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBFbnRyeXBvaW50
IG9tZ0VudHJ5cG9pbnQ7Ci0gICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKCpjb250ZXh0Lndhc21F
bnRyeXBvaW50SklULCBudWxscHRyLCBMaW5rQnVmZmVyOjpQcm9maWxlOjpXYXNtLCBKSVRDb21w
aWxhdGlvbkNhbkZhaWwpOwotICAgIGlmIChVTkxJS0VMWShsaW5rQnVmZmVyLmRpZEZhaWxUb0Fs
bG9jYXRlKCkpKSB7Ci0gICAgICAgIExvY2tlciBsb2NrZXIgeyBtX2xvY2sgfTsKLSAgICAgICAg
QmFzZTo6ZmFpbChtYWtlU3RyaW5nKCJPdXQgb2YgZXhlY3V0YWJsZSBtZW1vcnkgd2hpbGUgdGll
cmluZyB1cCBmdW5jdGlvbiBhdCBpbmRleCAiLCBTdHJpbmc6Om51bWJlcihtX2Z1bmN0aW9uSW5k
ZXgpKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBJbnRlcm5hbEZ1bmN0aW9uKiBp
bnRlcm5hbEZ1bmN0aW9uID0gcGFyc2VBbmRDb21waWxlUmVzdWx0LT5nZXQoKTsKLSAgICBWZWN0
b3I8Q29kZUxvY2F0aW9uTGFiZWw8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4+IGV4Y2VwdGlvbkhh
bmRsZXJMb2NhdGlvbnM7Ci0gICAgY29tcHV0ZUV4Y2VwdGlvbkhhbmRsZXJMb2NhdGlvbnMoZXhj
ZXB0aW9uSGFuZGxlckxvY2F0aW9ucywgaW50ZXJuYWxGdW5jdGlvbiwgY29udGV4dCwgbGlua0J1
ZmZlcik7Ci0KLSAgICBvbWdFbnRyeXBvaW50LmNvbXBpbGF0aW9uID0gbWFrZVVuaXF1ZTxDb21w
aWxhdGlvbj4oCi0gICAgICAgIEZJTkFMSVpFX0NPREVfSUYoY29udGV4dC5wcm9jZWR1cmUtPnNo
b3VsZER1bXBJUigpIHx8IHNob3VsZER1bXBEaXNhc3NlbWJseUZvcihDb21waWxhdGlvbk1vZGU6
Ok9NR0Zvck9TUkVudHJ5TW9kZSksIGxpbmtCdWZmZXIsIEpJVENvbXBpbGF0aW9uUHRyVGFnLCAi
V2ViQXNzZW1ibHkgT01HRm9yT1NSRW50cnkgZnVuY3Rpb25bJWldICVzIG5hbWUgJXMiLCBtX2Z1
bmN0aW9uSW5kZXgsIHNpZ25hdHVyZS50b1N0cmluZygpLmFzY2lpKCkuZGF0YSgpLCBtYWtlU3Ry
aW5nKEluZGV4T3JOYW1lKGZ1bmN0aW9uSW5kZXhTcGFjZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi0+
bmFtZVNlY3Rpb24tPmdldChmdW5jdGlvbkluZGV4U3BhY2UpKSkuYXNjaWkoKS5kYXRhKCkpLAot
ICAgICAgICBXVEZNb3ZlKGNvbnRleHQud2FzbUVudHJ5cG9pbnRCeXByb2R1Y3RzKSk7Ci0KLSAg
ICBvbWdFbnRyeXBvaW50LmNhbGxlZVNhdmVSZWdpc3RlcnMgPSBXVEZNb3ZlKGludGVybmFsRnVu
Y3Rpb24tPmVudHJ5cG9pbnQuY2FsbGVlU2F2ZVJlZ2lzdGVycyk7Ci0KLSAgICBBU1NFUlQobV9j
YWxsZWVHcm91cC5wdHIoKSA9PSBtX21vZHVsZS0+Y2FsbGVlR3JvdXBGb3IobW9kZSgpKSk7Ci0g
ICAgUmVmPE9NR0Zvck9TUkVudHJ5Q2FsbGVlPiBjYWxsZWUgPSBPTUdGb3JPU1JFbnRyeUNhbGxl
ZTo6Y3JlYXRlKFdURk1vdmUob21nRW50cnlwb2ludCksIGZ1bmN0aW9uSW5kZXhTcGFjZSwgbV9t
b2R1bGVJbmZvcm1hdGlvbi0+bmFtZVNlY3Rpb24tPmdldChmdW5jdGlvbkluZGV4U3BhY2UpLCBv
c3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplLCBtX2xvb3BJbmRleCwgV1RGTW92ZSh1bmxpbmtlZENh
bGxzKSwgV1RGTW92ZShpbnRlcm5hbEZ1bmN0aW9uLT5zdGFja21hcHMpLCBXVEZNb3ZlKGludGVy
bmFsRnVuY3Rpb24tPmV4Y2VwdGlvbkhhbmRsZXJzKSwgV1RGTW92ZShleGNlcHRpb25IYW5kbGVy
TG9jYXRpb25zKSk7Ci0gICAgewotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaFBvaW50
ZXIoaW50ZXJuYWxGdW5jdGlvbi0+Y2FsbGVlTW92ZUxvY2F0aW9uLCBDYWxsZWVCaXRzOjpib3hX
YXNtKGNhbGxlZS5wdHIoKSkpOwotCi0gICAgICAgIExvY2tlciBsb2NrZXIgeyBtX2NhbGxlZUdy
b3VwLT5tX2xvY2sgfTsKLSAgICAgICAgZm9yIChhdXRvJiBjYWxsIDogY2FsbGVlLT53YXNtVG9X
YXNtQ2FsbHNpdGVzKCkpIHsKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxXYXNt
RW50cnlQdHJUYWc+IGVudHJ5cG9pbnQ7Ci0gICAgICAgICAgICBpZiAoY2FsbC5mdW5jdGlvbklu
ZGV4U3BhY2UgPCBtX21vZHVsZS0+bW9kdWxlSW5mb3JtYXRpb24oKS5pbXBvcnRGdW5jdGlvbkNv
dW50KCkpCi0gICAgICAgICAgICAgICAgZW50cnlwb2ludCA9IG1fY2FsbGVlR3JvdXAtPm1fd2Fz
bVRvV2FzbUV4aXRTdHVic1tjYWxsLmZ1bmN0aW9uSW5kZXhTcGFjZV0uY29kZSgpOwotICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGVudHJ5cG9pbnQgPSBtX2NhbGxlZUdyb3VwLT53
YXNtRW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2UobG9ja2VyLCBjYWxsLmZ1
bmN0aW9uSW5kZXhTcGFjZSkuZW50cnlwb2ludCgpLnJldGFnZ2VkPFdhc21FbnRyeVB0clRhZz4o
KTsKLQotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hOZWFyQ2FsbChjYWxsLmNh
bGxMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWw8V2FzbUVudHJ5UHRyVGFnPihlbnRyeXBvaW50
KSk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXNldEluc3RydWN0aW9uQ2FjaGVPbkFsbFRocmVh
ZHMoKTsKLSAgICAgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKLQotICAgICAgICB7Ci0gICAg
ICAgICAgICBzd2l0Y2ggKG1fY2FsbGVlLT5jb21waWxhdGlvbk1vZGUoKSkgewotICAgICAgICAg
ICAgY2FzZSBDb21waWxhdGlvbk1vZGU6OkxMSW50TW9kZTogewotICAgICAgICAgICAgICAgIExM
SW50Q2FsbGVlKiBsbGludENhbGxlZSA9IHN0YXRpY19jYXN0PExMSW50Q2FsbGVlKj4obV9jYWxs
ZWUucHRyKCkpOwotICAgICAgICAgICAgICAgIExvY2tlciBsb2NrZXIgeyBsbGludENhbGxlZS0+
dGllclVwQ291bnRlcigpLm1fbG9jayB9OwotICAgICAgICAgICAgICAgIGxsaW50Q2FsbGVlLT5z
ZXRPU1JFbnRyeUNhbGxlZShjYWxsZWUuY29weVJlZigpLCBtb2RlKCkpOwotICAgICAgICAgICAg
ICAgIGxsaW50Q2FsbGVlLT50aWVyVXBDb3VudGVyKCkubV9sb29wQ29tcGlsYXRpb25TdGF0dXMg
PSBMTEludFRpZXJVcENvdW50ZXI6OkNvbXBpbGF0aW9uU3RhdHVzOjpDb21waWxlZDsKLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhc2UgQ29tcGls
YXRpb25Nb2RlOjpCQlFNb2RlOiB7Ci0gICAgICAgICAgICAgICAgQkJRQ2FsbGVlKiBiYnFDYWxs
ZWUgPSBzdGF0aWNfY2FzdDxCQlFDYWxsZWUqPihtX2NhbGxlZS5wdHIoKSk7Ci0gICAgICAgICAg
ICAgICAgTG9ja2VyIGxvY2tlciB7IGJicUNhbGxlZS0+dGllclVwQ291bnQoKS0+Z2V0TG9jaygp
IH07Ci0gICAgICAgICAgICAgICAgYmJxQ2FsbGVlLT5zZXRPU1JFbnRyeUNhbGxlZShjYWxsZWUu
Y29weVJlZigpLCBtb2RlKCkpOwotICAgICAgICAgICAgICAgIGJicUNhbGxlZS0+dGllclVwQ291
bnQoKS0+b3NyRW50cnlUcmlnZ2VycygpW21fbG9vcEluZGV4XSA9IFRpZXJVcENvdW50OjpUcmln
Z2VyUmVhc29uOjpDb21waWxhdGlvbkRvbmU7Ci0gICAgICAgICAgICAgICAgYmJxQ2FsbGVlLT50
aWVyVXBDb3VudCgpLT5tX2NvbXBpbGF0aW9uU3RhdHVzRm9yT01HRm9yT1NSRW50cnkgPSBUaWVy
VXBDb3VudDo6Q29tcGlsYXRpb25TdGF0dXM6OkNvbXBpbGVkOwotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0gICAgfQotICAgIGRhdGFMb2dMbklmKFdhc21PTUdGb3JPU1JFbnRyeVBsYW5JbnRlcm5hbDo6
dmVyYm9zZSwgIkZpbmlzaGVkIE9NR0Zvck9TUkVudHJ5ICIsIG1fZnVuY3Rpb25JbmRleCk7Ci0g
ICAgTG9ja2VyIGxvY2tlciB7IG1fbG9jayB9OwotICAgIGNvbXBsZXRlKCk7Ci19Ci0KLX0gfSAv
LyBuYW1lc3BhY2UgSlNDOjpXYXNtCi0KLSNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFlfQjNK
SVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT01HRm9yT1NSRW50cnlQ
bGFuLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9NR0Zv
ck9TUkVudHJ5UGxhbi5oCShyZXZpc2lvbiAyODczMzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtT01HRm9yT1NSRW50cnlQbGFuLmgJKG5vbmV4aXN0ZW50KQpAQCAtMSw3NCAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
Ci0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3By
YWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoV0VCQVNTRU1CTFlfQjNKSVQpCi0KLSNpbmNsdWRlICJX
YXNtQ2FsbGVlLmgiCi0jaW5jbHVkZSAiV2FzbUNvbnRleHQuaCIKLSNpbmNsdWRlICJXYXNtTW9k
dWxlLmgiCi0jaW5jbHVkZSAiV2FzbU9wZXJhdGlvbnMuaCIKLSNpbmNsdWRlICJXYXNtUGxhbi5o
IgotCi1uYW1lc3BhY2UgSlNDIHsKLQotY2xhc3MgQ2FsbExpbmtJbmZvOwotCi1uYW1lc3BhY2Ug
V2FzbSB7Ci0KLWNsYXNzIE9NR0Zvck9TUkVudHJ5UGxhbiBmaW5hbCA6IHB1YmxpYyBQbGFuIHsK
LXB1YmxpYzoKLSAgICB1c2luZyBCYXNlID0gUGxhbjsKLQotICAgIGJvb2wgaGFzV29yaygpIGNv
bnN0IGZpbmFsIHsgcmV0dXJuICFtX2NvbXBsZXRlZDsgfQotICAgIHZvaWQgd29yayhDb21waWxh
dGlvbkVmZm9ydCkgZmluYWw7Ci0gICAgYm9vbCBtdWx0aVRocmVhZGVkKCkgY29uc3QgZmluYWwg
eyByZXR1cm4gZmFsc2U7IH0KLQotICAgIC8vIE5vdGU6IENvbXBsZXRpb25UYXNrIHNob3VsZCBu
b3QgaG9sZCBhIHJlZmVyZW5jZSB0byB0aGUgUGxhbiBvdGhlcndpc2UgdGhlcmUgd2lsbCBiZSBh
IHJlZmVyZW5jZSBjeWNsZS4KLSAgICBPTUdGb3JPU1JFbnRyeVBsYW4oQ29udGV4dCosIFJlZjxN
b2R1bGU+JiYsIFJlZjxDYWxsZWU+JiYsIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIHVpbnQzMl90
IGxvb3BJbmRleCwgTWVtb3J5TW9kZSwgQ29tcGxldGlvblRhc2smJik7Ci0KLXByaXZhdGU6Ci0g
ICAgLy8gRm9yIHNvbWUgcmVhc29uIGZyaWVuZHNoaXAgZG9lc24ndCBleHRlbmQgdG8gcGFyZW50
IGNsYXNzZXMuLi4KLSAgICB1c2luZyBCYXNlOjptX2xvY2s7Ci0KLSAgICBib29sIGlzQ29tcGxl
dGUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2NvbXBsZXRlZDsgfQotICAgIHZvaWQgY29tcGxl
dGUoKSBXVEZfUkVRVUlSRVNfTE9DSyhtX2xvY2spIGZpbmFsCi0gICAgewotICAgICAgICBtX2Nv
bXBsZXRlZCA9IHRydWU7Ci0gICAgICAgIHJ1bkNvbXBsZXRpb25UYXNrcygpOwotICAgIH0KLQot
ICAgIFJlZjxNb2R1bGU+IG1fbW9kdWxlOwotICAgIFJlZjxDYWxsZWVHcm91cD4gbV9jYWxsZWVH
cm91cDsKLSAgICBSZWY8Q2FsbGVlPiBtX2NhbGxlZTsKLSAgICBib29sIG1fY29tcGxldGVkIHsg
ZmFsc2UgfTsKLSAgICB1aW50MzJfdCBtX2Z1bmN0aW9uSW5kZXg7Ci0gICAgdWludDMyX3QgbV9s
b29wSW5kZXg7Ci19OwotCi19IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQotCi0jZW5kaWYgLy8g
RU5BQkxFKFdFQkFTU0VNQkxZX0IzSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbU9NR1BsYW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21PTUdQbGFuLmNwcAkocmV2aXNpb24gMjg3MzM5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbU9NR1BsYW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MSw5ICs3MSw4
IEBAIHZvaWQgT01HUGxhbjo6d29yayhDb21waWxhdGlvbkVmZm9ydCkKICAgICBjb25zdCBTaWdu
YXR1cmUmIHNpZ25hdHVyZSA9IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoc2lnbmF0dXJlSW5k
ZXgpOwogCiAgICAgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+IHVubGlua2VkQ2FsbHM7
Ci0gICAgdW5zaWduZWQgb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZTsKICAgICBDb21waWxhdGlv
bkNvbnRleHQgY29udGV4dDsKLSAgICBhdXRvIHBhcnNlQW5kQ29tcGlsZVJlc3VsdCA9IHBhcnNl
QW5kQ29tcGlsZShjb250ZXh0LCBmdW5jdGlvbiwgc2lnbmF0dXJlLCB1bmxpbmtlZENhbGxzLCBv
c3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplLCBtX21vZHVsZUluZm9ybWF0aW9uLmdldCgpLCBtX21v
ZGUsIENvbXBpbGF0aW9uTW9kZTo6T01HTW9kZSwgbV9mdW5jdGlvbkluZGV4LCBVSU5UMzJfTUFY
KTsKKyAgICBhdXRvIHBhcnNlQW5kQ29tcGlsZVJlc3VsdCA9IHBhcnNlQW5kQ29tcGlsZShjb250
ZXh0LCBmdW5jdGlvbiwgc2lnbmF0dXJlLCB1bmxpbmtlZENhbGxzLCBtX21vZHVsZUluZm9ybWF0
aW9uLmdldCgpLCBtX21vZGUsIENvbXBpbGF0aW9uTW9kZTo6T01HTW9kZSwgbV9mdW5jdGlvbklu
ZGV4LCBVSU5UMzJfTUFYKTsKIAogICAgIGlmIChVTkxJS0VMWSghcGFyc2VBbmRDb21waWxlUmVz
dWx0KSkgewogICAgICAgICBMb2NrZXIgbG9ja2VyIHsgbV9sb2NrIH07CkBAIC0xMDUsNyArMTA0
LDggQEAgdm9pZCBPTUdQbGFuOjp3b3JrKENvbXBpbGF0aW9uRWZmb3J0KQogICAgIHsKICAgICAg
ICAgQVNTRVJUKG1fY2FsbGVlR3JvdXAucHRyKCkgPT0gbV9tb2R1bGUtPmNhbGxlZUdyb3VwRm9y
KG1vZGUoKSkpOwogICAgICAgICBSZWY8T01HQ2FsbGVlPiBjYWxsZWUgPSBPTUdDYWxsZWU6OmNy
ZWF0ZShXVEZNb3ZlKG9tZ0VudHJ5cG9pbnQpLCBmdW5jdGlvbkluZGV4U3BhY2UsIG1fbW9kdWxl
SW5mb3JtYXRpb24tPm5hbWVTZWN0aW9uLT5nZXQoZnVuY3Rpb25JbmRleFNwYWNlKSwgV1RGTW92
ZSh1bmxpbmtlZENhbGxzKSwgV1RGTW92ZShpbnRlcm5hbEZ1bmN0aW9uLT5zdGFja21hcHMpLCBX
VEZNb3ZlKGludGVybmFsRnVuY3Rpb24tPmV4Y2VwdGlvbkhhbmRsZXJzKSwgV1RGTW92ZShleGNl
cHRpb25IYW5kbGVyTG9jYXRpb25zKSk7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNo
UG9pbnRlcihpbnRlcm5hbEZ1bmN0aW9uLT5jYWxsZWVNb3ZlTG9jYXRpb24sIENhbGxlZUJpdHM6
OmJveFdhc20oY2FsbGVlLnB0cigpKSk7CisgICAgICAgIGZvciAoYXV0byYgbW92ZUxvY2F0aW9u
IDogaW50ZXJuYWxGdW5jdGlvbi0+Y2FsbGVlTW92ZUxvY2F0aW9ucykKKyAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpyZXBhdGNoUG9pbnRlcihtb3ZlTG9jYXRpb24sIENhbGxlZUJpdHM6OmJv
eFdhc20oY2FsbGVlLnB0cigpKSk7CiAgICAgICAgIGVudHJ5cG9pbnQgPSBjYWxsZWUtPmVudHJ5
cG9pbnQoKTsKIAogICAgICAgICBpZiAoY29udGV4dC5wY1RvQ29kZU9yaWdpbk1hcCkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PU1JFbnRyeVBsYW4uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PU1JFbnRyeVBsYW4uY3BwCShy
ZXZpc2lvbiAyODczMzkpCShmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PTUdG
b3JPU1JFbnRyeVBsYW4uY3BwOjI4NzMzOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21PU1JFbnRyeVBsYW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTUyIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE5LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2FzbU9NR0Zvck9TUkVudHJ5UGxhbi5oIgorCisjaWYg
RU5BQkxFKFdFQkFTU0VNQkxZX0IzSklUKQorCisjaW5jbHVkZSAiSklUQ29tcGlsYXRpb24uaCIK
KyNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCisjaW5jbHVkZSAiV2FzbUIzSVJHZW5lcmF0b3IuaCIK
KyNpbmNsdWRlICJXYXNtQ2FsbGVlLmgiCisjaW5jbHVkZSAiV2FzbU1hY2hpbmVUaHJlYWRzLmgi
CisjaW5jbHVkZSAiV2FzbU5hbWVTZWN0aW9uLmgiCisjaW5jbHVkZSAiV2FzbVNpZ25hdHVyZUlu
bGluZXMuaCIKKyNpbmNsdWRlIDx3dGYvRGF0YUxvZy5oPgorI2luY2x1ZGUgPHd0Zi9Mb2NrZXIu
aD4KKyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgV2FzbSB7CisKK25hbWVzcGFjZSBXYXNtT01HRm9yT1NSRW50cnlQbGFuSW50ZXJuYWwg
eworc3RhdGljIGNvbnN0ZXhwciBib29sIHZlcmJvc2UgPSBmYWxzZTsKK30KKworT01HRm9yT1NS
RW50cnlQbGFuOjpPTUdGb3JPU1JFbnRyeVBsYW4oQ29udGV4dCogY29udGV4dCwgUmVmPE1vZHVs
ZT4mJiBtb2R1bGUsIFJlZjxDYWxsZWU+JiYgY2FsbGVlLCB1aW50MzJfdCBmdW5jdGlvbkluZGV4
LCB1aW50MzJfdCBsb29wSW5kZXgsIE1lbW9yeU1vZGUgbW9kZSwgQ29tcGxldGlvblRhc2smJiB0
YXNrKQorICAgIDogQmFzZShjb250ZXh0LCBjb25zdF9jYXN0PE1vZHVsZUluZm9ybWF0aW9uJj4o
bW9kdWxlLT5tb2R1bGVJbmZvcm1hdGlvbigpKSwgV1RGTW92ZSh0YXNrKSkKKyAgICAsIG1fbW9k
dWxlKFdURk1vdmUobW9kdWxlKSkKKyAgICAsIG1fY2FsbGVlR3JvdXAoKm1fbW9kdWxlLT5jYWxs
ZWVHcm91cEZvcihtb2RlKSkKKyAgICAsIG1fY2FsbGVlKFdURk1vdmUoY2FsbGVlKSkKKyAgICAs
IG1fZnVuY3Rpb25JbmRleChmdW5jdGlvbkluZGV4KQorICAgICwgbV9sb29wSW5kZXgobG9vcElu
ZGV4KQoreworICAgIEFTU0VSVChPcHRpb25zOjp1c2VPTUdKSVQoKSk7CisgICAgc2V0TW9kZSht
b2RlKTsKKyAgICBBU1NFUlQobV9jYWxsZWVHcm91cC0+cnVubmFibGUoKSk7CisgICAgQVNTRVJU
KG1fY2FsbGVlR3JvdXAucHRyKCkgPT0gbV9tb2R1bGUtPmNhbGxlZUdyb3VwRm9yKG1fbW9kZSkp
OworICAgIGRhdGFMb2dMbklmKFdhc21PTUdGb3JPU1JFbnRyeVBsYW5JbnRlcm5hbDo6dmVyYm9z
ZSwgIlN0YXJ0aW5nIE9NR0Zvck9TUkVudHJ5IHBsYW4gZm9yICIsIGZ1bmN0aW9uSW5kZXgsICIg
b2YgbW9kdWxlOiAiLCBSYXdQb2ludGVyKCZtX21vZHVsZS5nZXQoKSkpOworfQorCit2b2lkIE9N
R0Zvck9TUkVudHJ5UGxhbjo6d29yayhDb21waWxhdGlvbkVmZm9ydCkKK3sKKyAgICBBU1NFUlQo
bV9jYWxsZWVHcm91cC0+cnVubmFibGUoKSk7CisgICAgQVNTRVJUKG1fY2FsbGVlR3JvdXAucHRy
KCkgPT0gbV9tb2R1bGUtPmNhbGxlZUdyb3VwRm9yKG1vZGUoKSkpOworICAgIGNvbnN0IEZ1bmN0
aW9uRGF0YSYgZnVuY3Rpb24gPSBtX21vZHVsZUluZm9ybWF0aW9uLT5mdW5jdGlvbnNbbV9mdW5j
dGlvbkluZGV4XTsKKworICAgIGNvbnN0IHVpbnQzMl90IGZ1bmN0aW9uSW5kZXhTcGFjZSA9IG1f
ZnVuY3Rpb25JbmRleCArIG1fbW9kdWxlLT5tb2R1bGVJbmZvcm1hdGlvbigpLmltcG9ydEZ1bmN0
aW9uQ291bnQoKTsKKyAgICBBU1NFUlQoZnVuY3Rpb25JbmRleFNwYWNlIDwgbV9tb2R1bGUtPm1v
ZHVsZUluZm9ybWF0aW9uKCkuZnVuY3Rpb25JbmRleFNwYWNlU2l6ZSgpKTsKKworICAgIFNpZ25h
dHVyZUluZGV4IHNpZ25hdHVyZUluZGV4ID0gbV9tb2R1bGVJbmZvcm1hdGlvbi0+aW50ZXJuYWxG
dW5jdGlvblNpZ25hdHVyZUluZGljZXNbbV9mdW5jdGlvbkluZGV4XTsKKyAgICBjb25zdCBTaWdu
YXR1cmUmIHNpZ25hdHVyZSA9IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoc2lnbmF0dXJlSW5k
ZXgpOworCisgICAgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+IHVubGlua2VkQ2FsbHM7
CisgICAgQ29tcGlsYXRpb25Db250ZXh0IGNvbnRleHQ7CisgICAgdW5zaWduZWQgb3NyRW50cnlT
Y3JhdGNoQnVmZmVyU2l6ZSA9IDA7CisgICAgYXV0byBwYXJzZUFuZENvbXBpbGVSZXN1bHQgPSBw
YXJzZUFuZENvbXBpbGUoY29udGV4dCwgZnVuY3Rpb24sIHNpZ25hdHVyZSwgdW5saW5rZWRDYWxs
cywgb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi5nZXQoKSwg
bV9tb2RlLCBDb21waWxhdGlvbk1vZGU6Ok9NR0Zvck9TUkVudHJ5TW9kZSwgbV9mdW5jdGlvbklu
ZGV4LCBtX2xvb3BJbmRleCk7CisKKyAgICBpZiAoVU5MSUtFTFkoIXBhcnNlQW5kQ29tcGlsZVJl
c3VsdCkpIHsKKyAgICAgICAgTG9ja2VyIGxvY2tlciB7IG1fbG9jayB9OworICAgICAgICBmYWls
KG1ha2VTdHJpbmcocGFyc2VBbmRDb21waWxlUmVzdWx0LmVycm9yKCksICJ3aGVuIHRyeWluZyB0
byB0aWVyIHVwICIsIFN0cmluZzo6bnVtYmVyKG1fZnVuY3Rpb25JbmRleCkpKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIEVudHJ5cG9pbnQgb21nRW50cnlwb2ludDsKKyAgICBMaW5r
QnVmZmVyIGxpbmtCdWZmZXIoKmNvbnRleHQud2FzbUVudHJ5cG9pbnRKSVQsIG51bGxwdHIsIExp
bmtCdWZmZXI6OlByb2ZpbGU6Oldhc20sIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7CisgICAgaWYg
KFVOTElLRUxZKGxpbmtCdWZmZXIuZGlkRmFpbFRvQWxsb2NhdGUoKSkpIHsKKyAgICAgICAgTG9j
a2VyIGxvY2tlciB7IG1fbG9jayB9OworICAgICAgICBCYXNlOjpmYWlsKG1ha2VTdHJpbmcoIk91
dCBvZiBleGVjdXRhYmxlIG1lbW9yeSB3aGlsZSB0aWVyaW5nIHVwIGZ1bmN0aW9uIGF0IGluZGV4
ICIsIFN0cmluZzo6bnVtYmVyKG1fZnVuY3Rpb25JbmRleCkpKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIEludGVybmFsRnVuY3Rpb24qIGludGVybmFsRnVuY3Rpb24gPSBwYXJzZUFu
ZENvbXBpbGVSZXN1bHQtPmdldCgpOworICAgIFZlY3RvcjxDb2RlTG9jYXRpb25MYWJlbDxFeGNl
cHRpb25IYW5kbGVyUHRyVGFnPj4gZXhjZXB0aW9uSGFuZGxlckxvY2F0aW9uczsKKyAgICBjb21w
dXRlRXhjZXB0aW9uSGFuZGxlckxvY2F0aW9ucyhleGNlcHRpb25IYW5kbGVyTG9jYXRpb25zLCBp
bnRlcm5hbEZ1bmN0aW9uLCBjb250ZXh0LCBsaW5rQnVmZmVyKTsKKworICAgIG9tZ0VudHJ5cG9p
bnQuY29tcGlsYXRpb24gPSBtYWtlVW5pcXVlPENvbXBpbGF0aW9uPigKKyAgICAgICAgRklOQUxJ
WkVfQ09ERV9JRihjb250ZXh0LnByb2NlZHVyZS0+c2hvdWxkRHVtcElSKCkgfHwgc2hvdWxkRHVt
cERpc2Fzc2VtYmx5Rm9yKENvbXBpbGF0aW9uTW9kZTo6T01HRm9yT1NSRW50cnlNb2RlKSwgbGlu
a0J1ZmZlciwgSklUQ29tcGlsYXRpb25QdHJUYWcsICJXZWJBc3NlbWJseSBPTUdGb3JPU1JFbnRy
eSBmdW5jdGlvblslaV0gJXMgbmFtZSAlcyIsIG1fZnVuY3Rpb25JbmRleCwgc2lnbmF0dXJlLnRv
U3RyaW5nKCkuYXNjaWkoKS5kYXRhKCksIG1ha2VTdHJpbmcoSW5kZXhPck5hbWUoZnVuY3Rpb25J
bmRleFNwYWNlLCBtX21vZHVsZUluZm9ybWF0aW9uLT5uYW1lU2VjdGlvbi0+Z2V0KGZ1bmN0aW9u
SW5kZXhTcGFjZSkpKS5hc2NpaSgpLmRhdGEoKSksCisgICAgICAgIFdURk1vdmUoY29udGV4dC53
YXNtRW50cnlwb2ludEJ5cHJvZHVjdHMpKTsKKworICAgIG9tZ0VudHJ5cG9pbnQuY2FsbGVlU2F2
ZVJlZ2lzdGVycyA9IFdURk1vdmUoaW50ZXJuYWxGdW5jdGlvbi0+ZW50cnlwb2ludC5jYWxsZWVT
YXZlUmVnaXN0ZXJzKTsKKworICAgIEFTU0VSVChtX2NhbGxlZUdyb3VwLnB0cigpID09IG1fbW9k
dWxlLT5jYWxsZWVHcm91cEZvcihtb2RlKCkpKTsKKyAgICBSZWY8T01HRm9yT1NSRW50cnlDYWxs
ZWU+IGNhbGxlZSA9IE9NR0Zvck9TUkVudHJ5Q2FsbGVlOjpjcmVhdGUoV1RGTW92ZShvbWdFbnRy
eXBvaW50KSwgZnVuY3Rpb25JbmRleFNwYWNlLCBtX21vZHVsZUluZm9ybWF0aW9uLT5uYW1lU2Vj
dGlvbi0+Z2V0KGZ1bmN0aW9uSW5kZXhTcGFjZSksIG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUs
IG1fbG9vcEluZGV4LCBXVEZNb3ZlKHVubGlua2VkQ2FsbHMpLCBXVEZNb3ZlKGludGVybmFsRnVu
Y3Rpb24tPnN0YWNrbWFwcyksIFdURk1vdmUoaW50ZXJuYWxGdW5jdGlvbi0+ZXhjZXB0aW9uSGFu
ZGxlcnMpLCBXVEZNb3ZlKGV4Y2VwdGlvbkhhbmRsZXJMb2NhdGlvbnMpKTsKKyAgICB7CisgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoUG9pbnRlcihpbnRlcm5hbEZ1bmN0aW9uLT5jYWxs
ZWVNb3ZlTG9jYXRpb24sIENhbGxlZUJpdHM6OmJveFdhc20oY2FsbGVlLnB0cigpKSk7CisKKyAg
ICAgICAgTG9ja2VyIGxvY2tlciB7IG1fY2FsbGVlR3JvdXAtPm1fbG9jayB9OworICAgICAgICBm
b3IgKGF1dG8mIGNhbGwgOiBjYWxsZWUtPndhc21Ub1dhc21DYWxsc2l0ZXMoKSkgeworICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPFdhc21FbnRyeVB0clRhZz4gZW50cnlwb2ludDsK
KyAgICAgICAgICAgIGlmIChjYWxsLmZ1bmN0aW9uSW5kZXhTcGFjZSA8IG1fbW9kdWxlLT5tb2R1
bGVJbmZvcm1hdGlvbigpLmltcG9ydEZ1bmN0aW9uQ291bnQoKSkKKyAgICAgICAgICAgICAgICBl
bnRyeXBvaW50ID0gbV9jYWxsZWVHcm91cC0+bV93YXNtVG9XYXNtRXhpdFN0dWJzW2NhbGwuZnVu
Y3Rpb25JbmRleFNwYWNlXS5jb2RlKCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgZW50cnlwb2ludCA9IG1fY2FsbGVlR3JvdXAtPndhc21FbnRyeXBvaW50Q2FsbGVlRnJvbUZ1
bmN0aW9uSW5kZXhTcGFjZShsb2NrZXIsIGNhbGwuZnVuY3Rpb25JbmRleFNwYWNlKS5lbnRyeXBv
aW50KCkucmV0YWdnZWQ8V2FzbUVudHJ5UHRyVGFnPigpOworCisgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6cmVwYXRjaE5lYXJDYWxsKGNhbGwuY2FsbExvY2F0aW9uLCBDb2RlTG9jYXRpb25M
YWJlbDxXYXNtRW50cnlQdHJUYWc+KGVudHJ5cG9pbnQpKTsKKyAgICAgICAgfQorCisgICAgICAg
IHJlc2V0SW5zdHJ1Y3Rpb25DYWNoZU9uQWxsVGhyZWFkcygpOworICAgICAgICBXVEY6OnN0b3Jl
U3RvcmVGZW5jZSgpOworCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAobV9jYWxsZWUt
PmNvbXBpbGF0aW9uTW9kZSgpKSB7CisgICAgICAgICAgICBjYXNlIENvbXBpbGF0aW9uTW9kZTo6
TExJbnRNb2RlOiB7CisgICAgICAgICAgICAgICAgTExJbnRDYWxsZWUqIGxsaW50Q2FsbGVlID0g
c3RhdGljX2Nhc3Q8TExJbnRDYWxsZWUqPihtX2NhbGxlZS5wdHIoKSk7CisgICAgICAgICAgICAg
ICAgTG9ja2VyIGxvY2tlciB7IGxsaW50Q2FsbGVlLT50aWVyVXBDb3VudGVyKCkubV9sb2NrIH07
CisgICAgICAgICAgICAgICAgbGxpbnRDYWxsZWUtPnNldE9TUkVudHJ5Q2FsbGVlKGNhbGxlZS5j
b3B5UmVmKCksIG1vZGUoKSk7CisgICAgICAgICAgICAgICAgbGxpbnRDYWxsZWUtPnRpZXJVcENv
dW50ZXIoKS5tX2xvb3BDb21waWxhdGlvblN0YXR1cyA9IExMSW50VGllclVwQ291bnRlcjo6Q29t
cGlsYXRpb25TdGF0dXM6OkNvbXBpbGVkOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgY2FzZSBDb21waWxhdGlvbk1vZGU6OkJCUU1vZGU6IHsKKyAg
ICAgICAgICAgICAgICBCQlFDYWxsZWUqIGJicUNhbGxlZSA9IHN0YXRpY19jYXN0PEJCUUNhbGxl
ZSo+KG1fY2FsbGVlLnB0cigpKTsKKyAgICAgICAgICAgICAgICBMb2NrZXIgbG9ja2VyIHsgYmJx
Q2FsbGVlLT50aWVyVXBDb3VudCgpLT5nZXRMb2NrKCkgfTsKKyAgICAgICAgICAgICAgICBiYnFD
YWxsZWUtPnNldE9TUkVudHJ5Q2FsbGVlKGNhbGxlZS5jb3B5UmVmKCksIG1vZGUoKSk7CisgICAg
ICAgICAgICAgICAgYmJxQ2FsbGVlLT50aWVyVXBDb3VudCgpLT5vc3JFbnRyeVRyaWdnZXJzKClb
bV9sb29wSW5kZXhdID0gVGllclVwQ291bnQ6OlRyaWdnZXJSZWFzb246OkNvbXBpbGF0aW9uRG9u
ZTsKKyAgICAgICAgICAgICAgICBiYnFDYWxsZWUtPnRpZXJVcENvdW50KCktPm1fY29tcGlsYXRp
b25TdGF0dXNGb3JPTUdGb3JPU1JFbnRyeSA9IFRpZXJVcENvdW50OjpDb21waWxhdGlvblN0YXR1
czo6Q29tcGlsZWQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgZGF0YUxvZ0xuSWYo
V2FzbU9NR0Zvck9TUkVudHJ5UGxhbkludGVybmFsOjp2ZXJib3NlLCAiRmluaXNoZWQgT01HRm9y
T1NSRW50cnkgIiwgbV9mdW5jdGlvbkluZGV4KTsKKyAgICBMb2NrZXIgbG9ja2VyIHsgbV9sb2Nr
IH07CisgICAgY29tcGxldGUoKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KKwor
I2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWV9CM0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21PU1JFbnRyeVBsYW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21PU1JFbnRyeVBsYW4uY3BwCShyZXZpc2lvbiAyODczMzkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT1NSRW50cnlQbGFuLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjQsNyArMjQsNyBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIK
LSNpbmNsdWRlICJXYXNtT01HRm9yT1NSRW50cnlQbGFuLmgiCisjaW5jbHVkZSAiV2FzbU9TUkVu
dHJ5UGxhbi5oIgogCiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZX0IzSklUKQogCkBAIC00MSwxMSAr
NDEsMTEgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKIAotbmFtZXNwYWNl
IFdhc21PTUdGb3JPU1JFbnRyeVBsYW5JbnRlcm5hbCB7CituYW1lc3BhY2UgV2FzbU9TUkVudHJ5
UGxhbkludGVybmFsIHsKIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB2ZXJib3NlID0gZmFsc2U7CiB9
CiAKLU9NR0Zvck9TUkVudHJ5UGxhbjo6T01HRm9yT1NSRW50cnlQbGFuKENvbnRleHQqIGNvbnRl
eHQsIFJlZjxNb2R1bGU+JiYgbW9kdWxlLCBSZWY8Q2FsbGVlPiYmIGNhbGxlZSwgdWludDMyX3Qg
ZnVuY3Rpb25JbmRleCwgdWludDMyX3QgbG9vcEluZGV4LCBNZW1vcnlNb2RlIG1vZGUsIENvbXBs
ZXRpb25UYXNrJiYgdGFzaykKK09TUkVudHJ5UGxhbjo6T1NSRW50cnlQbGFuKENvbnRleHQqIGNv
bnRleHQsIFJlZjxNb2R1bGU+JiYgbW9kdWxlLCBSZWY8Q2FsbGVlPiYmIGNhbGxlZSwgdWludDMy
X3QgZnVuY3Rpb25JbmRleCwgdWludDMyX3QgbG9vcEluZGV4LCBNZW1vcnlNb2RlIG1vZGUsIENv
bXBsZXRpb25UYXNrJiYgdGFzaykKICAgICA6IEJhc2UoY29udGV4dCwgY29uc3RfY2FzdDxNb2R1
bGVJbmZvcm1hdGlvbiY+KG1vZHVsZS0+bW9kdWxlSW5mb3JtYXRpb24oKSksIFdURk1vdmUodGFz
aykpCiAgICAgLCBtX21vZHVsZShXVEZNb3ZlKG1vZHVsZSkpCiAgICAgLCBtX2NhbGxlZUdyb3Vw
KCptX21vZHVsZS0+Y2FsbGVlR3JvdXBGb3IobW9kZSkpCkBAIC01NywxMCArNTcsMTAgQEAgT01H
Rm9yT1NSRW50cnlQbGFuOjpPTUdGb3JPU1JFbnRyeVBsYW4oQwogICAgIHNldE1vZGUobW9kZSk7
CiAgICAgQVNTRVJUKG1fY2FsbGVlR3JvdXAtPnJ1bm5hYmxlKCkpOwogICAgIEFTU0VSVChtX2Nh
bGxlZUdyb3VwLnB0cigpID09IG1fbW9kdWxlLT5jYWxsZWVHcm91cEZvcihtX21vZGUpKTsKLSAg
ICBkYXRhTG9nTG5JZihXYXNtT01HRm9yT1NSRW50cnlQbGFuSW50ZXJuYWw6OnZlcmJvc2UsICJT
dGFydGluZyBPTUdGb3JPU1JFbnRyeSBwbGFuIGZvciAiLCBmdW5jdGlvbkluZGV4LCAiIG9mIG1v
ZHVsZTogIiwgUmF3UG9pbnRlcigmbV9tb2R1bGUuZ2V0KCkpKTsKKyAgICBkYXRhTG9nTG5JZihX
YXNtT1NSRW50cnlQbGFuSW50ZXJuYWw6OnZlcmJvc2UsICJTdGFydGluZyBPTUdGb3JPU1JFbnRy
eSBwbGFuIGZvciAiLCBmdW5jdGlvbkluZGV4LCAiIG9mIG1vZHVsZTogIiwgUmF3UG9pbnRlcigm
bV9tb2R1bGUuZ2V0KCkpKTsKIH0KIAotdm9pZCBPTUdGb3JPU1JFbnRyeVBsYW46OndvcmsoQ29t
cGlsYXRpb25FZmZvcnQpCit2b2lkIE9TUkVudHJ5UGxhbjo6d29yayhDb21waWxhdGlvbkVmZm9y
dCkKIHsKICAgICBBU1NFUlQobV9jYWxsZWVHcm91cC0+cnVubmFibGUoKSk7CiAgICAgQVNTRVJU
KG1fY2FsbGVlR3JvdXAucHRyKCkgPT0gbV9tb2R1bGUtPmNhbGxlZUdyb3VwRm9yKG1vZGUoKSkp
OwpAQCAtNzIsMTAgKzcyLDEyIEBAIHZvaWQgT01HRm9yT1NSRW50cnlQbGFuOjp3b3JrKENvbXBp
bGF0aW8KICAgICBTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCA9IG1fbW9kdWxlSW5mb3Jt
YXRpb24tPmludGVybmFsRnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzW21fZnVuY3Rpb25JbmRleF07
CiAgICAgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUgPSBTaWduYXR1cmVJbmZvcm1hdGlvbjo6
Z2V0KHNpZ25hdHVyZUluZGV4KTsKIAorICAgIC8vQ29tcGlsYXRpb25Nb2RlIHRhcmdldENvbXBp
bGF0aW9uTW9kZSA9IG1fY2FsbGVlLT5jb21waWxhdGlvbk1vZGUoKSA9PSBDb21waWxhdGlvbk1v
ZGU6OkxMSW50TW9kZSA/IENvbXBpbGF0aW9uTW9kZTo6QkJRRm9yT1NSRW50cnlNb2RlIDogQ29t
cGlsYXRpb25Nb2RlOjpPTUdGb3JPU1JFbnRyeU1vZGU7CisgICAgQ29tcGlsYXRpb25Nb2RlIHRh
cmdldENvbXBpbGF0aW9uTW9kZSA9ICBDb21waWxhdGlvbk1vZGU6Ok9NR0Zvck9TUkVudHJ5TW9k
ZTsKKwogICAgIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiB1bmxpbmtlZENhbGxzOwog
ICAgIENvbXBpbGF0aW9uQ29udGV4dCBjb250ZXh0OwotICAgIHVuc2lnbmVkIG9zckVudHJ5U2Ny
YXRjaEJ1ZmZlclNpemUgPSAwOwotICAgIGF1dG8gcGFyc2VBbmRDb21waWxlUmVzdWx0ID0gcGFy
c2VBbmRDb21waWxlKGNvbnRleHQsIGZ1bmN0aW9uLCBzaWduYXR1cmUsIHVubGlua2VkQ2FsbHMs
IG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUsIG1fbW9kdWxlSW5mb3JtYXRpb24uZ2V0KCksIG1f
bW9kZSwgQ29tcGlsYXRpb25Nb2RlOjpPTUdGb3JPU1JFbnRyeU1vZGUsIG1fZnVuY3Rpb25JbmRl
eCwgbV9sb29wSW5kZXgpOworICAgIGF1dG8gcGFyc2VBbmRDb21waWxlUmVzdWx0ID0gcGFyc2VB
bmRDb21waWxlKGNvbnRleHQsIGZ1bmN0aW9uLCBzaWduYXR1cmUsIHVubGlua2VkQ2FsbHMsIG1f
bW9kdWxlSW5mb3JtYXRpb24uZ2V0KCksIG1fbW9kZSwgdGFyZ2V0Q29tcGlsYXRpb25Nb2RlLCBt
X2Z1bmN0aW9uSW5kZXgsIG1fbG9vcEluZGV4KTsKIAogICAgIGlmIChVTkxJS0VMWSghcGFyc2VB
bmRDb21waWxlUmVzdWx0KSkgewogICAgICAgICBMb2NrZXIgbG9ja2VyIHsgbV9sb2NrIH07CkBA
IC05NiwxNSArOTgsMTYgQEAgdm9pZCBPTUdGb3JPU1JFbnRyeVBsYW46OndvcmsoQ29tcGlsYXRp
bwogICAgIGNvbXB1dGVFeGNlcHRpb25IYW5kbGVyTG9jYXRpb25zKGV4Y2VwdGlvbkhhbmRsZXJM
b2NhdGlvbnMsIGludGVybmFsRnVuY3Rpb24sIGNvbnRleHQsIGxpbmtCdWZmZXIpOwogCiAgICAg
b21nRW50cnlwb2ludC5jb21waWxhdGlvbiA9IG1ha2VVbmlxdWU8Q29tcGlsYXRpb24+KAotICAg
ICAgICBGSU5BTElaRV9DT0RFX0lGKGNvbnRleHQucHJvY2VkdXJlLT5zaG91bGREdW1wSVIoKSB8
fCBzaG91bGREdW1wRGlzYXNzZW1ibHlGb3IoQ29tcGlsYXRpb25Nb2RlOjpPTUdGb3JPU1JFbnRy
eU1vZGUpLCBsaW5rQnVmZmVyLCBKSVRDb21waWxhdGlvblB0clRhZywgIldlYkFzc2VtYmx5IE9N
R0Zvck9TUkVudHJ5IGZ1bmN0aW9uWyVpXSAlcyBuYW1lICVzIiwgbV9mdW5jdGlvbkluZGV4LCBz
aWduYXR1cmUudG9TdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSwgbWFrZVN0cmluZyhJbmRleE9yTmFt
ZShmdW5jdGlvbkluZGV4U3BhY2UsIG1fbW9kdWxlSW5mb3JtYXRpb24tPm5hbWVTZWN0aW9uLT5n
ZXQoZnVuY3Rpb25JbmRleFNwYWNlKSkpLmFzY2lpKCkuZGF0YSgpKSwKKyAgICAgICAgRklOQUxJ
WkVfQ09ERV9JRihjb250ZXh0LnByb2NlZHVyZS0+c2hvdWxkRHVtcElSKCkgfHwgc2hvdWxkRHVt
cERpc2Fzc2VtYmx5Rm9yKHRhcmdldENvbXBpbGF0aW9uTW9kZSksIGxpbmtCdWZmZXIsIEpJVENv
bXBpbGF0aW9uUHRyVGFnLCAiV2ViQXNzZW1ibHkgT01HRm9yT1NSRW50cnkgZnVuY3Rpb25bJWld
ICVzIG5hbWUgJXMiLCBtX2Z1bmN0aW9uSW5kZXgsIHNpZ25hdHVyZS50b1N0cmluZygpLmFzY2lp
KCkuZGF0YSgpLCBtYWtlU3RyaW5nKEluZGV4T3JOYW1lKGZ1bmN0aW9uSW5kZXhTcGFjZSwgbV9t
b2R1bGVJbmZvcm1hdGlvbi0+bmFtZVNlY3Rpb24tPmdldChmdW5jdGlvbkluZGV4U3BhY2UpKSku
YXNjaWkoKS5kYXRhKCkpLAogICAgICAgICBXVEZNb3ZlKGNvbnRleHQud2FzbUVudHJ5cG9pbnRC
eXByb2R1Y3RzKSk7CiAKICAgICBvbWdFbnRyeXBvaW50LmNhbGxlZVNhdmVSZWdpc3RlcnMgPSBX
VEZNb3ZlKGludGVybmFsRnVuY3Rpb24tPmVudHJ5cG9pbnQuY2FsbGVlU2F2ZVJlZ2lzdGVycyk7
CiAKICAgICBBU1NFUlQobV9jYWxsZWVHcm91cC5wdHIoKSA9PSBtX21vZHVsZS0+Y2FsbGVlR3Jv
dXBGb3IobW9kZSgpKSk7Ci0gICAgUmVmPE9NR0Zvck9TUkVudHJ5Q2FsbGVlPiBjYWxsZWUgPSBP
TUdGb3JPU1JFbnRyeUNhbGxlZTo6Y3JlYXRlKFdURk1vdmUob21nRW50cnlwb2ludCksIGZ1bmN0
aW9uSW5kZXhTcGFjZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi0+bmFtZVNlY3Rpb24tPmdldChmdW5j
dGlvbkluZGV4U3BhY2UpLCBvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplLCBtX2xvb3BJbmRleCwg
V1RGTW92ZSh1bmxpbmtlZENhbGxzKSwgV1RGTW92ZShpbnRlcm5hbEZ1bmN0aW9uLT5zdGFja21h
cHMpLCBXVEZNb3ZlKGludGVybmFsRnVuY3Rpb24tPmV4Y2VwdGlvbkhhbmRsZXJzKSwgV1RGTW92
ZShleGNlcHRpb25IYW5kbGVyTG9jYXRpb25zKSk7CisgICAgUmVmPE9TUkVudHJ5Q2FsbGVlPiBj
YWxsZWUgPSBPU1JFbnRyeUNhbGxlZTo6Y3JlYXRlKHRhcmdldENvbXBpbGF0aW9uTW9kZSwgV1RG
TW92ZShvbWdFbnRyeXBvaW50KSwgZnVuY3Rpb25JbmRleFNwYWNlLCBtX21vZHVsZUluZm9ybWF0
aW9uLT5uYW1lU2VjdGlvbi0+Z2V0KGZ1bmN0aW9uSW5kZXhTcGFjZSksIGludGVybmFsRnVuY3Rp
b24tPm9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUsIG1fbG9vcEluZGV4LCBXVEZNb3ZlKHVubGlu
a2VkQ2FsbHMpLCBXVEZNb3ZlKGludGVybmFsRnVuY3Rpb24tPnN0YWNrbWFwcyksIFdURk1vdmUo
aW50ZXJuYWxGdW5jdGlvbi0+ZXhjZXB0aW9uSGFuZGxlcnMpLCBXVEZNb3ZlKGV4Y2VwdGlvbkhh
bmRsZXJMb2NhdGlvbnMpKTsKICAgICB7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNo
UG9pbnRlcihpbnRlcm5hbEZ1bmN0aW9uLT5jYWxsZWVNb3ZlTG9jYXRpb24sIENhbGxlZUJpdHM6
OmJveFdhc20oY2FsbGVlLnB0cigpKSk7CisgICAgICAgIGZvciAoYXV0byYgbW92ZUxvY2F0aW9u
IDogaW50ZXJuYWxGdW5jdGlvbi0+Y2FsbGVlTW92ZUxvY2F0aW9ucykKKyAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpyZXBhdGNoUG9pbnRlcihtb3ZlTG9jYXRpb24sIENhbGxlZUJpdHM6OmJv
eFdhc20oY2FsbGVlLnB0cigpKSk7CiAKICAgICAgICAgTG9ja2VyIGxvY2tlciB7IG1fY2FsbGVl
R3JvdXAtPm1fbG9jayB9OwogICAgICAgICBmb3IgKGF1dG8mIGNhbGwgOiBjYWxsZWUtPndhc21U
b1dhc21DYWxsc2l0ZXMoKSkgewpAQCAtMTQyLDcgKzE0NSw3IEBAIHZvaWQgT01HRm9yT1NSRW50
cnlQbGFuOjp3b3JrKENvbXBpbGF0aW8KICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0K
LSAgICBkYXRhTG9nTG5JZihXYXNtT01HRm9yT1NSRW50cnlQbGFuSW50ZXJuYWw6OnZlcmJvc2Us
ICJGaW5pc2hlZCBPTUdGb3JPU1JFbnRyeSAiLCBtX2Z1bmN0aW9uSW5kZXgpOworICAgIGRhdGFM
b2dMbklmKFdhc21PU1JFbnRyeVBsYW5JbnRlcm5hbDo6dmVyYm9zZSwgIkZpbmlzaGVkIE9NR0Zv
ck9TUkVudHJ5ICIsIG1fZnVuY3Rpb25JbmRleCk7CiAgICAgTG9ja2VyIGxvY2tlciB7IG1fbG9j
ayB9OwogICAgIGNvbXBsZXRlKCk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtT1NSRW50cnlQbGFuLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbU9TUkVudHJ5UGxhbi5oCShyZXZpc2lvbiAyODczMzkpCShmcm9tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21PTUdGb3JPU1JFbnRyeVBsYW4uaDoyODczMzkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT1NSRW50cnlQbGFuLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw3NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZX0IzSklUKQor
CisjaW5jbHVkZSAiV2FzbUNhbGxlZS5oIgorI2luY2x1ZGUgIldhc21Db250ZXh0LmgiCisjaW5j
bHVkZSAiV2FzbU1vZHVsZS5oIgorI2luY2x1ZGUgIldhc21PcGVyYXRpb25zLmgiCisjaW5jbHVk
ZSAiV2FzbVBsYW4uaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIENhbGxMaW5rSW5mbzsK
KworbmFtZXNwYWNlIFdhc20geworCitjbGFzcyBPTUdGb3JPU1JFbnRyeVBsYW4gZmluYWwgOiBw
dWJsaWMgUGxhbiB7CitwdWJsaWM6CisgICAgdXNpbmcgQmFzZSA9IFBsYW47CisKKyAgICBib29s
IGhhc1dvcmsoKSBjb25zdCBmaW5hbCB7IHJldHVybiAhbV9jb21wbGV0ZWQ7IH0KKyAgICB2b2lk
IHdvcmsoQ29tcGlsYXRpb25FZmZvcnQpIGZpbmFsOworICAgIGJvb2wgbXVsdGlUaHJlYWRlZCgp
IGNvbnN0IGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9CisKKyAgICAvLyBOb3RlOiBDb21wbGV0aW9u
VGFzayBzaG91bGQgbm90IGhvbGQgYSByZWZlcmVuY2UgdG8gdGhlIFBsYW4gb3RoZXJ3aXNlIHRo
ZXJlIHdpbGwgYmUgYSByZWZlcmVuY2UgY3ljbGUuCisgICAgT01HRm9yT1NSRW50cnlQbGFuKENv
bnRleHQqLCBSZWY8TW9kdWxlPiYmLCBSZWY8Q2FsbGVlPiYmLCB1aW50MzJfdCBmdW5jdGlvbklu
ZGV4LCB1aW50MzJfdCBsb29wSW5kZXgsIE1lbW9yeU1vZGUsIENvbXBsZXRpb25UYXNrJiYpOwor
Citwcml2YXRlOgorICAgIC8vIEZvciBzb21lIHJlYXNvbiBmcmllbmRzaGlwIGRvZXNuJ3QgZXh0
ZW5kIHRvIHBhcmVudCBjbGFzc2VzLi4uCisgICAgdXNpbmcgQmFzZTo6bV9sb2NrOworCisgICAg
Ym9vbCBpc0NvbXBsZXRlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9jb21wbGV0ZWQ7IH0KKyAg
ICB2b2lkIGNvbXBsZXRlKCkgV1RGX1JFUVVJUkVTX0xPQ0sobV9sb2NrKSBmaW5hbAorICAgIHsK
KyAgICAgICAgbV9jb21wbGV0ZWQgPSB0cnVlOworICAgICAgICBydW5Db21wbGV0aW9uVGFza3Mo
KTsKKyAgICB9CisKKyAgICBSZWY8TW9kdWxlPiBtX21vZHVsZTsKKyAgICBSZWY8Q2FsbGVlR3Jv
dXA+IG1fY2FsbGVlR3JvdXA7CisgICAgUmVmPENhbGxlZT4gbV9jYWxsZWU7CisgICAgYm9vbCBt
X2NvbXBsZXRlZCB7IGZhbHNlIH07CisgICAgdWludDMyX3QgbV9mdW5jdGlvbkluZGV4OworICAg
IHVpbnQzMl90IG1fbG9vcEluZGV4OworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20K
KworI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWV9CM0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21PU1JFbnRyeVBsYW4uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT1NSRW50cnlQbGFuLmgJKHJldmlzaW9uIDI4NzMzOSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PU1JFbnRyeVBsYW4uaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzksNyArMzksNyBAQCBjbGFzcyBDYWxsTGlua0luZm87CiAKIG5hbWVzcGFj
ZSBXYXNtIHsKIAotY2xhc3MgT01HRm9yT1NSRW50cnlQbGFuIGZpbmFsIDogcHVibGljIFBsYW4g
eworY2xhc3MgT1NSRW50cnlQbGFuIGZpbmFsIDogcHVibGljIFBsYW4gewogcHVibGljOgogICAg
IHVzaW5nIEJhc2UgPSBQbGFuOwogCkBAIC00OCw3ICs0OCw3IEBAIHB1YmxpYzoKICAgICBib29s
IG11bHRpVGhyZWFkZWQoKSBjb25zdCBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQogCiAgICAgLy8g
Tm90ZTogQ29tcGxldGlvblRhc2sgc2hvdWxkIG5vdCBob2xkIGEgcmVmZXJlbmNlIHRvIHRoZSBQ
bGFuIG90aGVyd2lzZSB0aGVyZSB3aWxsIGJlIGEgcmVmZXJlbmNlIGN5Y2xlLgotICAgIE9NR0Zv
ck9TUkVudHJ5UGxhbihDb250ZXh0KiwgUmVmPE1vZHVsZT4mJiwgUmVmPENhbGxlZT4mJiwgdWlu
dDMyX3QgZnVuY3Rpb25JbmRleCwgdWludDMyX3QgbG9vcEluZGV4LCBNZW1vcnlNb2RlLCBDb21w
bGV0aW9uVGFzayYmKTsKKyAgICBPU1JFbnRyeVBsYW4oQ29udGV4dCosIFJlZjxNb2R1bGU+JiYs
IFJlZjxDYWxsZWU+JiYsIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIHVpbnQzMl90IGxvb3BJbmRl
eCwgTWVtb3J5TW9kZSwgQ29tcGxldGlvblRhc2smJik7CiAKIHByaXZhdGU6CiAgICAgLy8gRm9y
IHNvbWUgcmVhc29uIGZyaWVuZHNoaXAgZG9lc24ndCBleHRlbmQgdG8gcGFyZW50IGNsYXNzZXMu
Li4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PcGVyYXRpb25zLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT3BlcmF0aW9ucy5j
cHAJKHJldmlzaW9uIDI4NzMzOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21P
cGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcsOSArNDcsOSBAQAogI2luY2x1ZGUg
Ildhc21JbnN0YW5jZS5oIgogI2luY2x1ZGUgIldhc21NZW1vcnkuaCIKICNpbmNsdWRlICJXYXNt
TW9kdWxlSW5mb3JtYXRpb24uaCIKLSNpbmNsdWRlICJXYXNtT01HRm9yT1NSRW50cnlQbGFuLmgi
CiAjaW5jbHVkZSAiV2FzbU9NR1BsYW4uaCIKICNpbmNsdWRlICJXYXNtT1NSRW50cnlEYXRhLmgi
CisjaW5jbHVkZSAiV2FzbU9TUkVudHJ5UGxhbi5oIgogI2luY2x1ZGUgIldhc21Xb3JrbGlzdC5o
IgogI2luY2x1ZGUgPHd0Zi9DaGVja2VkQXJpdGhtZXRpYy5oPgogI2luY2x1ZGUgPHd0Zi9EYXRh
TG9nLmg+CkBAIC0xNTcsNyArMTU3LDcgQEAgdm9pZCBsb2FkVmFsdWVzSW50b0J1ZmZlcihQcm9i
ZTo6Q29udGV4dAogfQogCiBTVVBQUkVTU19BU0FOCi1zdGF0aWMgdm9pZCBkb09TUkVudHJ5KElu
c3RhbmNlKiBpbnN0YW5jZSwgUHJvYmU6OkNvbnRleHQmIGNvbnRleHQsIEJCUUNhbGxlZSYgY2Fs
bGVlLCBPTUdGb3JPU1JFbnRyeUNhbGxlZSYgb3NyRW50cnlDYWxsZWUsIE9TUkVudHJ5RGF0YSYg
b3NyRW50cnlEYXRhKQorc3RhdGljIHZvaWQgZG9PU1JFbnRyeShJbnN0YW5jZSogaW5zdGFuY2Us
IFByb2JlOjpDb250ZXh0JiBjb250ZXh0LCBCQlFDYWxsZWUmIGNhbGxlZSwgT1NSRW50cnlDYWxs
ZWUmIG9zckVudHJ5Q2FsbGVlLCBPU1JFbnRyeURhdGEmIG9zckVudHJ5RGF0YSkKIHsKICAgICBh
dXRvIHJldHVybldpdGhvdXRPU1JFbnRyeSA9IFsmXSB7CiAgICAgICAgIGNvbnRleHQuZ3ByKEdQ
UkluZm86OmFyZ3VtZW50R1BSMCkgPSAwOwpAQCAtMjQ3LDcgKzI0Nyw3IEBAIEpTQ19ERUZJTkVf
SklUX09QRVJBVElPTihvcGVyYXRpb25XYXNtVHIKICAgICAgICAgcmV0dXJuIHJldHVybldpdGhv
dXRPU1JFbnRyeSgpOwogICAgIH0KIAotICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OnZlcmJvc2VP
U1IoKSwgIkNvbnNpZGVyIE9NR0Zvck9TUkVudHJ5UGxhbiBmb3IgWyIsIGZ1bmN0aW9uSW5kZXgs
ICJdIGxvb3BJbmRleCMiLCBsb29wSW5kZXgsICIgd2l0aCBleGVjdXRlQ291bnRlciA9ICIsIHRp
ZXJVcCwgIiAiLCBSYXdQb2ludGVyKGNhbGxlZS5yZXBsYWNlbWVudCgpKSk7CisgICAgZGF0YUxv
Z0xuSWYoT3B0aW9uczo6dmVyYm9zZU9TUigpLCAiQ29uc2lkZXIgT1NSRW50cnlQbGFuIGZvciBb
IiwgZnVuY3Rpb25JbmRleCwgIl0gbG9vcEluZGV4IyIsIGxvb3BJbmRleCwgIiB3aXRoIGV4ZWN1
dGVDb3VudGVyID0gIiwgdGllclVwLCAiICIsIFJhd1BvaW50ZXIoY2FsbGVlLnJlcGxhY2VtZW50
KCkpKTsKIAogICAgIGlmICghT3B0aW9uczo6dXNlV2ViQXNzZW1ibHlPU1IoKSkgewogICAgICAg
ICBpZiAoc2hvdWxkVHJpZ2dlck9NR0NvbXBpbGUodGllclVwLCBjYWxsZWUucmVwbGFjZW1lbnQo
KSwgZnVuY3Rpb25JbmRleCkpCkBAIC0zMDcsNyArMzA3LDcgQEAgSlNDX0RFRklORV9KSVRfT1BF
UkFUSU9OKG9wZXJhdGlvbldhc21UcgogICAgICAgICByZXR1cm4gcmV0dXJuV2l0aG91dE9TUkVu
dHJ5KCk7CiAgICAgfQogCi0gICAgaWYgKE9NR0Zvck9TUkVudHJ5Q2FsbGVlKiBvc3JFbnRyeUNh
bGxlZSA9IGNhbGxlZS5vc3JFbnRyeUNhbGxlZSgpKSB7CisgICAgaWYgKE9TUkVudHJ5Q2FsbGVl
KiBvc3JFbnRyeUNhbGxlZSA9IGNhbGxlZS5vc3JFbnRyeUNhbGxlZSgpKSB7CiAgICAgICAgIGlm
IChvc3JFbnRyeUNhbGxlZS0+bG9vcEluZGV4KCkgPT0gbG9vcEluZGV4KQogICAgICAgICAgICAg
cmV0dXJuIGRvT1NSRW50cnkoaW5zdGFuY2UsIGNvbnRleHQsIGNhbGxlZSwgKm9zckVudHJ5Q2Fs
bGVlLCBvc3JFbnRyeURhdGEpOwogICAgIH0KQEAgLTMyMiw3ICszMjIsNyBAQCBKU0NfREVGSU5F
X0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uV2FzbVRyCiAgICAgICAgICAgICByZXR1cm4gcmV0dXJu
V2l0aG91dE9TUkVudHJ5KCk7CiAgICAgfQogCi0gICAgaWYgKE9NR0Zvck9TUkVudHJ5Q2FsbGVl
KiBvc3JFbnRyeUNhbGxlZSA9IGNhbGxlZS5vc3JFbnRyeUNhbGxlZSgpKSB7CisgICAgaWYgKE9T
UkVudHJ5Q2FsbGVlKiBvc3JFbnRyeUNhbGxlZSA9IGNhbGxlZS5vc3JFbnRyeUNhbGxlZSgpKSB7
CiAgICAgICAgIGlmIChvc3JFbnRyeUNhbGxlZS0+bG9vcEluZGV4KCkgPT0gbG9vcEluZGV4KQog
ICAgICAgICAgICAgcmV0dXJuIGRvT1NSRW50cnkoaW5zdGFuY2UsIGNvbnRleHQsIGNhbGxlZSwg
Km9zckVudHJ5Q2FsbGVlLCBvc3JFbnRyeURhdGEpOwogICAgICAgICB0aWVyVXAuZG9udE9wdGlt
aXplQW55dGltZVNvb24oZnVuY3Rpb25JbmRleCk7CkBAIC0zNDcsNyArMzQ3LDcgQEAgSlNDX0RF
RklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbldhc21UcgogICAgICAgICAgICAgdWludDMyX3Qg
Y3VycmVudExvb3BJbmRleCA9IHRpZXJVcC5vdXRlckxvb3BzKClbbG9vcEluZGV4XTsKICAgICAg
ICAgICAgIExvY2tlciBsb2NrZXIgeyB0aWVyVXAuZ2V0TG9jaygpIH07CiAKLSAgICAgICAgICAg
IC8vIFdlIGFscmVhZHkgc3RhcnRlZCBPTUdGb3JPU1JFbnRyeVBsYW4uCisgICAgICAgICAgICAv
LyBXZSBhbHJlYWR5IHN0YXJ0ZWQgT1NSRW50cnlQbGFuLgogICAgICAgICAgICAgaWYgKGNhbGxl
ZS5kaWRTdGFydENvbXBpbGluZ09TUkVudHJ5Q2FsbGVlKCkpCiAgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCkBAIC0zOTAsNyArMzkwLDcgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9O
KG9wZXJhdGlvbldhc21UcgogCiAgICAgaWYgKHN0YXJ0T1NSRW50cnlDb21waWxhdGlvbikgewog
ICAgICAgICBkYXRhTG9nTG5JZihPcHRpb25zOjp2ZXJib3NlT1NSKCksICJ0cmlnZ2VyT01HT1NS
IGZvciAiLCBmdW5jdGlvbkluZGV4KTsKLSAgICAgICAgUmVmPFBsYW4+IHBsYW4gPSBhZG9wdFJl
ZigqbmV3IE9NR0Zvck9TUkVudHJ5UGxhbihpbnN0YW5jZS0+Y29udGV4dCgpLCBSZWY8V2FzbTo6
TW9kdWxlPihpbnN0YW5jZS0+bW9kdWxlKCkpLCBSZWY8V2FzbTo6QkJRQ2FsbGVlPihjYWxsZWUp
LCBmdW5jdGlvbkluZGV4LCBsb29wSW5kZXgsIGNhbGxlZUdyb3VwLm1vZGUoKSwgUGxhbjo6ZG9u
dEZpbmFsaXplKCkpKTsKKyAgICAgICAgUmVmPFBsYW4+IHBsYW4gPSBhZG9wdFJlZigqbmV3IE9T
UkVudHJ5UGxhbihpbnN0YW5jZS0+Y29udGV4dCgpLCBSZWY8V2FzbTo6TW9kdWxlPihpbnN0YW5j
ZS0+bW9kdWxlKCkpLCBSZWY8V2FzbTo6QkJRQ2FsbGVlPihjYWxsZWUpLCBmdW5jdGlvbkluZGV4
LCBsb29wSW5kZXgsIGNhbGxlZUdyb3VwLm1vZGUoKSwgUGxhbjo6ZG9udEZpbmFsaXplKCkpKTsK
ICAgICAgICAgZW5zdXJlV29ya2xpc3QoKS5lbnF1ZXVlKHBsYW4uY29weVJlZigpKTsKICAgICAg
ICAgaWYgKFVOTElLRUxZKCFPcHRpb25zOjp1c2VDb25jdXJyZW50SklUKCkpKQogICAgICAgICAg
ICAgcGxhbi0+d2FpdEZvckNvbXBsZXRpb24oKTsKQEAgLTM5OCw3ICszOTgsNyBAQCBKU0NfREVG
SU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uV2FzbVRyCiAgICAgICAgICAgICB0aWVyVXAuc2V0
T3B0aW1pemF0aW9uVGhyZXNob2xkQmFzZWRPbkNvbXBpbGF0aW9uUmVzdWx0KGZ1bmN0aW9uSW5k
ZXgsIENvbXBpbGF0aW9uRGVmZXJyZWQpOwogICAgIH0KIAotICAgIE9NR0Zvck9TUkVudHJ5Q2Fs
bGVlKiBvc3JFbnRyeUNhbGxlZSA9IGNhbGxlZS5vc3JFbnRyeUNhbGxlZSgpOworICAgIE9TUkVu
dHJ5Q2FsbGVlKiBvc3JFbnRyeUNhbGxlZSA9IGNhbGxlZS5vc3JFbnRyeUNhbGxlZSgpOwogICAg
IGlmICghb3NyRW50cnlDYWxsZWUpIHsKICAgICAgICAgdGllclVwLnNldE9wdGltaXphdGlvblRo
cmVzaG9sZEJhc2VkT25Db21waWxhdGlvblJlc3VsdChmdW5jdGlvbkluZGV4LCBDb21waWxhdGlv
bkRlZmVycmVkKTsKICAgICAgICAgcmV0dXJuIHJldHVybldpdGhvdXRPU1JFbnRyeSgpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmNwcAkocmV2aXNpb24gMjg3MzM5
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xNDEsMTMgKzE0MSwxMyBAQCB2b2lkIFBsYW46OnVwZGF0ZUNhbGxTaXRlc1RvQ2Fs
bFVzKGNvbnN0CiAgICAgICAgICAgICBMTEludENhbGxlZSYgbGxpbnRDYWxsZWUgPSBjYWxsZWVH
cm91cC5tX2xsaW50Q2FsbGVlcy0+YXQoaSkuZ2V0KCk7CiAgICAgICAgICAgICBpZiAoSklUQ2Fs
bGVlKiByZXBsYWNlbWVudENhbGxlZSA9IGxsaW50Q2FsbGVlLnJlcGxhY2VtZW50KGNhbGxlZUdy
b3VwLm1vZGUoKSkpCiAgICAgICAgICAgICAgICAgc3RhZ2VSZXBhdGNoKHJlcGxhY2VtZW50Q2Fs
bGVlLT53YXNtVG9XYXNtQ2FsbHNpdGVzKCkpOwotICAgICAgICAgICAgaWYgKE9NR0Zvck9TUkVu
dHJ5Q2FsbGVlKiBvc3JFbnRyeUNhbGxlZSA9IGxsaW50Q2FsbGVlLm9zckVudHJ5Q2FsbGVlKGNh
bGxlZUdyb3VwLm1vZGUoKSkpCisgICAgICAgICAgICBpZiAoT1NSRW50cnlDYWxsZWUqIG9zckVu
dHJ5Q2FsbGVlID0gbGxpbnRDYWxsZWUub3NyRW50cnlDYWxsZWUoY2FsbGVlR3JvdXAubW9kZSgp
KSkKICAgICAgICAgICAgICAgICBzdGFnZVJlcGF0Y2gob3NyRW50cnlDYWxsZWUtPndhc21Ub1dh
c21DYWxsc2l0ZXMoKSk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKEJCUUNhbGxlZSogYmJxQ2Fs
bGVlID0gY2FsbGVlR3JvdXAuYmJxQ2FsbGVlKGNhbGxlZUdyb3VwTG9ja2VyLCBpKSkgewogICAg
ICAgICAgICAgaWYgKE9NR0NhbGxlZSogcmVwbGFjZW1lbnRDYWxsZWUgPSBiYnFDYWxsZWUtPnJl
cGxhY2VtZW50KCkpCiAgICAgICAgICAgICAgICAgc3RhZ2VSZXBhdGNoKHJlcGxhY2VtZW50Q2Fs
bGVlLT53YXNtVG9XYXNtQ2FsbHNpdGVzKCkpOwotICAgICAgICAgICAgaWYgKE9NR0Zvck9TUkVu
dHJ5Q2FsbGVlKiBvc3JFbnRyeUNhbGxlZSA9IGJicUNhbGxlZS0+b3NyRW50cnlDYWxsZWUoKSkK
KyAgICAgICAgICAgIGlmIChPU1JFbnRyeUNhbGxlZSogb3NyRW50cnlDYWxsZWUgPSBiYnFDYWxs
ZWUtPm9zckVudHJ5Q2FsbGVlKCkpCiAgICAgICAgICAgICAgICAgc3RhZ2VSZXBhdGNoKG9zckVu
dHJ5Q2FsbGVlLT53YXNtVG9XYXNtQ2FsbHNpdGVzKCkpOwogICAgICAgICB9CiAgICAgfQpAQCAt
MTc2LDEzICsxNzYsMTMgQEAgdm9pZCBQbGFuOjp1cGRhdGVDYWxsU2l0ZXNUb0NhbGxVcyhjb25z
dAogICAgICAgICAgICAgTExJbnRDYWxsZWUmIGxsaW50Q2FsbGVlID0gY2FsbGVlR3JvdXAubV9s
bGludENhbGxlZXMtPmF0KGkpLmdldCgpOwogICAgICAgICAgICAgaWYgKEpJVENhbGxlZSogcmVw
bGFjZW1lbnRDYWxsZWUgPSBsbGludENhbGxlZS5yZXBsYWNlbWVudChjYWxsZWVHcm91cC5tb2Rl
KCkpKQogICAgICAgICAgICAgICAgIHJlcGF0Y2hDYWxscyhyZXBsYWNlbWVudENhbGxlZS0+d2Fz
bVRvV2FzbUNhbGxzaXRlcygpKTsKLSAgICAgICAgICAgIGlmIChPTUdGb3JPU1JFbnRyeUNhbGxl
ZSogb3NyRW50cnlDYWxsZWUgPSBsbGludENhbGxlZS5vc3JFbnRyeUNhbGxlZShjYWxsZWVHcm91
cC5tb2RlKCkpKQorICAgICAgICAgICAgaWYgKE9TUkVudHJ5Q2FsbGVlKiBvc3JFbnRyeUNhbGxl
ZSA9IGxsaW50Q2FsbGVlLm9zckVudHJ5Q2FsbGVlKGNhbGxlZUdyb3VwLm1vZGUoKSkpCiAgICAg
ICAgICAgICAgICAgcmVwYXRjaENhbGxzKG9zckVudHJ5Q2FsbGVlLT53YXNtVG9XYXNtQ2FsbHNp
dGVzKCkpOwogICAgICAgICB9CiAgICAgICAgIGlmIChCQlFDYWxsZWUqIGJicUNhbGxlZSA9IGNh
bGxlZUdyb3VwLmJicUNhbGxlZShjYWxsZWVHcm91cExvY2tlciwgaSkpIHsKICAgICAgICAgICAg
IGlmIChPTUdDYWxsZWUqIHJlcGxhY2VtZW50Q2FsbGVlID0gYmJxQ2FsbGVlLT5yZXBsYWNlbWVu
dCgpKQogICAgICAgICAgICAgICAgIHJlcGF0Y2hDYWxscyhyZXBsYWNlbWVudENhbGxlZS0+d2Fz
bVRvV2FzbUNhbGxzaXRlcygpKTsKLSAgICAgICAgICAgIGlmIChPTUdGb3JPU1JFbnRyeUNhbGxl
ZSogb3NyRW50cnlDYWxsZWUgPSBiYnFDYWxsZWUtPm9zckVudHJ5Q2FsbGVlKCkpCisgICAgICAg
ICAgICBpZiAoT1NSRW50cnlDYWxsZWUqIG9zckVudHJ5Q2FsbGVlID0gYmJxQ2FsbGVlLT5vc3JF
bnRyeUNhbGxlZSgpKQogICAgICAgICAgICAgICAgIHJlcGF0Y2hDYWxscyhvc3JFbnRyeUNhbGxl
ZS0+d2FzbVRvV2FzbUNhbGxzaXRlcygpKTsKICAgICAgICAgfQogICAgIH0KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TbG93UGF0aHMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TbG93UGF0aHMuY3BwCShyZXZpc2lvbiAyODcz
MzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2xvd1BhdGhzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzgsOCArMzgsOCBAQAogI2luY2x1ZGUgIldhc21GdW5jdGlvbkNvZGVC
bG9jay5oIgogI2luY2x1ZGUgIldhc21JbnN0YW5jZS5oIgogI2luY2x1ZGUgIldhc21Nb2R1bGVJ
bmZvcm1hdGlvbi5oIgotI2luY2x1ZGUgIldhc21PTUdGb3JPU1JFbnRyeVBsYW4uaCIKICNpbmNs
dWRlICJXYXNtT01HUGxhbi5oIgorI2luY2x1ZGUgIldhc21PU1JFbnRyeVBsYW4uaCIKICNpbmNs
dWRlICJXYXNtT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIldhc21TaWduYXR1cmVJbmxpbmVzLmgi
CiAjaW5jbHVkZSAiV2FzbVdvcmtsaXN0LmgiCkBAIC0xODUsNjAgKzE4NSw4OCBAQCBXQVNNX1NM
T1dfUEFUSF9ERUNMKGxvb3Bfb3NyKQogICAgIHVuc2lnbmVkIGxvb3BPU1JFbnRyeUJ5dGVjb2Rl
T2Zmc2V0ID0gY29kZUJsb2NrLT5ieXRlY29kZU9mZnNldChwYyk7CiAgICAgY29uc3QgYXV0byYg
b3NyRW50cnlEYXRhID0gdGllclVwQ291bnRlci5vc3JFbnRyeURhdGFGb3JMb29wKGxvb3BPU1JF
bnRyeUJ5dGVjb2RlT2Zmc2V0KTsKIAotICAgIGlmICghdGllclVwQ291bnRlci5jaGVja0lmT3B0
aW1pemF0aW9uVGhyZXNob2xkUmVhY2hlZCgpKSB7Ci0gICAgICAgIGRhdGFMb2dMbklmKE9wdGlv
bnM6OnZlcmJvc2VPU1IoKSwgIiAgICBKSVQgdGhyZXNob2xkIHNob3VsZCBiZSBsaWZ0ZWQuIik7
Ci0gICAgICAgIFdBU01fUkVUVVJOX1RXTyhudWxscHRyLCBudWxscHRyKTsKLSAgICB9Ci0KLSAg
ICBjb25zdCBhdXRvIGRvT1NSRW50cnkgPSBbJl0oV2FzbTo6T01HRm9yT1NSRW50cnlDYWxsZWUq
IG9zckVudHJ5Q2FsbGVlKSB7Ci0gICAgICAgIGlmIChvc3JFbnRyeUNhbGxlZS0+bG9vcEluZGV4
KCkgIT0gb3NyRW50cnlEYXRhLmxvb3BJbmRleCkKKyAgICBpZiAoT3B0aW9uczo6d2FzbUxMSW50
VGllcnNVcFRvQkJRKCkgJiYgaW5zdGFuY2UtPm1vZHVsZSgpLm1vZHVsZUluZm9ybWF0aW9uKCku
bV9mdW5jdGlvbkRvZXNOb3RVc2VFeGNlcHRpb25zLnF1aWNrR2V0KGNvZGVCbG9jay0+ZnVuY3Rp
b25JbmRleCgpKSkgeworICAgICAgICBpZiAoIWppdENvbXBpbGVBbmRTZXRIZXVyaXN0aWNzKGNh
bGxlZSwgY29kZUJsb2NrLCBpbnN0YW5jZSkpCiAgICAgICAgICAgICBXQVNNX1JFVFVSTl9UV08o
bnVsbHB0ciwgbnVsbHB0cik7CiAKLSAgICAgICAgc2l6ZV90IG9zckVudHJ5U2NyYXRjaEJ1ZmZl
clNpemUgPSBvc3JFbnRyeUNhbGxlZS0+b3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSgpOwotICAg
ICAgICBSRUxFQVNFX0FTU0VSVChvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplID09IG9zckVudHJ5
RGF0YS52YWx1ZXMuc2l6ZSgpKTsKKyAgICAgICAgV2FzbTo6QkJRQ2FsbGVlKiBjYWxsZWU7Cisg
ICAgICAgIHsKKyAgICAgICAgICAgIExvY2tlciBsb2NrZXIgeyBpbnN0YW5jZS0+Y2FsbGVlR3Jv
dXAoKS0+bV9sb2NrIH07CisgICAgICAgICAgICBjYWxsZWUgPSBpbnN0YW5jZS0+Y2FsbGVlR3Jv
dXAoKS0+YmJxQ2FsbGVlKGxvY2tlciwgY29kZUJsb2NrLT5mdW5jdGlvbkluZGV4KCkpOworICAg
ICAgICB9CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxlZSk7CisKKyAgICAgICAgc2l6ZV90
IG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUgPSBjYWxsZWUtPm9zckVudHJ5U2NyYXRjaEJ1ZmZl
clNpemUoKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQob3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6
ZSA+PSBvc3JFbnRyeURhdGEudmFsdWVzLnNpemUoKSk7CiAgICAgICAgIHVpbnQ2NF90KiBidWZm
ZXIgPSBpbnN0YW5jZS0+Y29udGV4dCgpLT5zY3JhdGNoQnVmZmVyRm9yU2l6ZShvc3JFbnRyeVNj
cmF0Y2hCdWZmZXJTaXplKTsKICAgICAgICAgaWYgKCFidWZmZXIpCiAgICAgICAgICAgICBXQVNN
X1JFVFVSTl9UV08obnVsbHB0ciwgbnVsbHB0cik7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKG9z
ckVudHJ5RGF0YS5sb29wSW5kZXggPCBjYWxsZWUtPmxvb3BFbnRyeXBvaW50cygpLnNpemUoKSk7
CiAKICAgICAgICAgdWludDMyX3QgaW5kZXggPSAwOwogICAgICAgICBmb3IgKFZpcnR1YWxSZWdp
c3RlciByZWcgOiBvc3JFbnRyeURhdGEudmFsdWVzKQogICAgICAgICAgICAgYnVmZmVyW2luZGV4
KytdID0gUkVBRChyZWcpLmVuY29kZWRKU1ZhbHVlKCk7CiAKLSAgICAgICAgV0FTTV9SRVRVUk5f
VFdPKGJ1ZmZlciwgb3NyRW50cnlDYWxsZWUtPmVudHJ5cG9pbnQoKS5leGVjdXRhYmxlQWRkcmVz
cygpKTsKLSAgICB9OworICAgICAgICBkYXRhTG9nTG4oIk9TUiBlbnRlcmluZyBpbnRvIEJCUSBB
aXIhIik7CisgICAgICAgIFdBU01fUkVUVVJOX1RXTyhidWZmZXIsIGNhbGxlZS0+bG9vcEVudHJ5
cG9pbnRzKClbb3NyRW50cnlEYXRhLmxvb3BJbmRleF0uZXhlY3V0YWJsZUFkZHJlc3MoKSk7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKCF0aWVyVXBDb3VudGVyLmNoZWNrSWZPcHRpbWl6YXRp
b25UaHJlc2hvbGRSZWFjaGVkKCkpIHsKKyAgICAgICAgICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6
OnZlcmJvc2VPU1IoKSwgIiAgICBKSVQgdGhyZXNob2xkIHNob3VsZCBiZSBsaWZ0ZWQuIik7Cisg
ICAgICAgICAgICBXQVNNX1JFVFVSTl9UV08obnVsbHB0ciwgbnVsbHB0cik7CisgICAgICAgIH0K
IAotICAgIGlmIChhdXRvKiBvc3JFbnRyeUNhbGxlZSA9IGNhbGxlZS0+b3NyRW50cnlDYWxsZWUo
aW5zdGFuY2UtPm1lbW9yeSgpLT5tb2RlKCkpKQotICAgICAgICByZXR1cm4gZG9PU1JFbnRyeShv
c3JFbnRyeUNhbGxlZSk7CisgICAgICAgIGNvbnN0IGF1dG8gZG9PU1JFbnRyeSA9IFsmXShXYXNt
OjpPU1JFbnRyeUNhbGxlZSogb3NyRW50cnlDYWxsZWUpIHsKKyAgICAgICAgICAgIGlmIChvc3JF
bnRyeUNhbGxlZS0+bG9vcEluZGV4KCkgIT0gb3NyRW50cnlEYXRhLmxvb3BJbmRleCkKKyAgICAg
ICAgICAgICAgICBXQVNNX1JFVFVSTl9UV08obnVsbHB0ciwgbnVsbHB0cik7CisKKyAgICAgICAg
ICAgIHNpemVfdCBvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplID0gb3NyRW50cnlDYWxsZWUtPm9z
ckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUoKTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG9z
ckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUgPT0gb3NyRW50cnlEYXRhLnZhbHVlcy5zaXplKCkpOwor
ICAgICAgICAgICAgdWludDY0X3QqIGJ1ZmZlciA9IGluc3RhbmNlLT5jb250ZXh0KCktPnNjcmF0
Y2hCdWZmZXJGb3JTaXplKG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUpOworICAgICAgICAgICAg
aWYgKCFidWZmZXIpCisgICAgICAgICAgICAgICAgV0FTTV9SRVRVUk5fVFdPKG51bGxwdHIsIG51
bGxwdHIpOworCisgICAgICAgICAgICB1aW50MzJfdCBpbmRleCA9IDA7CisgICAgICAgICAgICBm
b3IgKFZpcnR1YWxSZWdpc3RlciByZWcgOiBvc3JFbnRyeURhdGEudmFsdWVzKQorICAgICAgICAg
ICAgICAgIGJ1ZmZlcltpbmRleCsrXSA9IFJFQUQocmVnKS5lbmNvZGVkSlNWYWx1ZSgpOworCisg
ICAgICAgICAgICBXQVNNX1JFVFVSTl9UV08oYnVmZmVyLCBvc3JFbnRyeUNhbGxlZS0+ZW50cnlw
b2ludCgpLmV4ZWN1dGFibGVBZGRyZXNzKCkpOworICAgICAgICB9OworCisgICAgICAgIGlmIChh
dXRvKiBvc3JFbnRyeUNhbGxlZSA9IGNhbGxlZS0+b3NyRW50cnlDYWxsZWUoaW5zdGFuY2UtPm1l
bW9yeSgpLT5tb2RlKCkpKQorICAgICAgICAgICAgcmV0dXJuIGRvT1NSRW50cnkob3NyRW50cnlD
YWxsZWUpOworCisgICAgICAgIGJvb2wgY29tcGlsZSA9IGZhbHNlOworICAgICAgICB7CisgICAg
ICAgICAgICBMb2NrZXIgbG9ja2VyIHsgdGllclVwQ291bnRlci5tX2xvY2sgfTsKKyAgICAgICAg
ICAgIHN3aXRjaCAodGllclVwQ291bnRlci5tX2xvb3BDb21waWxhdGlvblN0YXR1cykgeworICAg
ICAgICAgICAgY2FzZSBXYXNtOjpMTEludFRpZXJVcENvdW50ZXI6OkNvbXBpbGF0aW9uU3RhdHVz
OjpOb3RDb21waWxlZDoKKyAgICAgICAgICAgICAgICBjb21waWxlID0gdHJ1ZTsKKyAgICAgICAg
ICAgICAgICB0aWVyVXBDb3VudGVyLm1fbG9vcENvbXBpbGF0aW9uU3RhdHVzID0gV2FzbTo6TExJ
bnRUaWVyVXBDb3VudGVyOjpDb21waWxhdGlvblN0YXR1czo6Q29tcGlsaW5nOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBXYXNtOjpMTEludFRpZXJVcENvdW50ZXI6
OkNvbXBpbGF0aW9uU3RhdHVzOjpDb21waWxpbmc6CisgICAgICAgICAgICAgICAgdGllclVwQ291
bnRlci5vcHRpbWl6ZUFmdGVyV2FybVVwKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICBjYXNlIFdhc206OkxMSW50VGllclVwQ291bnRlcjo6Q29tcGlsYXRpb25TdGF0dXM6
OkNvbXBpbGVkOgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAg
ICB9CiAKLSAgICBib29sIGNvbXBpbGUgPSBmYWxzZTsKLSAgICB7Ci0gICAgICAgIExvY2tlciBs
b2NrZXIgeyB0aWVyVXBDb3VudGVyLm1fbG9jayB9OwotICAgICAgICBzd2l0Y2ggKHRpZXJVcENv
dW50ZXIubV9sb29wQ29tcGlsYXRpb25TdGF0dXMpIHsKLSAgICAgICAgY2FzZSBXYXNtOjpMTElu
dFRpZXJVcENvdW50ZXI6OkNvbXBpbGF0aW9uU3RhdHVzOjpOb3RDb21waWxlZDoKLSAgICAgICAg
ICAgIGNvbXBpbGUgPSB0cnVlOwotICAgICAgICAgICAgdGllclVwQ291bnRlci5tX2xvb3BDb21w
aWxhdGlvblN0YXR1cyA9IFdhc206OkxMSW50VGllclVwQ291bnRlcjo6Q29tcGlsYXRpb25TdGF0
dXM6OkNvbXBpbGluZzsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFdhc206OkxM
SW50VGllclVwQ291bnRlcjo6Q29tcGlsYXRpb25TdGF0dXM6OkNvbXBpbGluZzoKLSAgICAgICAg
ICAgIHRpZXJVcENvdW50ZXIub3B0aW1pemVBZnRlcldhcm1VcCgpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgV2FzbTo6TExJbnRUaWVyVXBDb3VudGVyOjpDb21waWxhdGlvblN0
YXR1czo6Q29tcGlsZWQ6Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgaWYgKGNvbXBpbGUp
IHsKKyAgICAgICAgICAgIFJlZjxXYXNtOjpQbGFuPiBwbGFuID0gYWRvcHRSZWYoKnN0YXRpY19j
YXN0PFdhc206OlBsYW4qPihuZXcgV2FzbTo6T1NSRW50cnlQbGFuKGluc3RhbmNlLT5jb250ZXh0
KCksIFJlZjxXYXNtOjpNb2R1bGU+KGluc3RhbmNlLT5tb2R1bGUoKSksIFJlZjxXYXNtOjpDYWxs
ZWU+KCpjYWxsZWUpLCBjb2RlQmxvY2stPmZ1bmN0aW9uSW5kZXgoKSwgb3NyRW50cnlEYXRhLmxv
b3BJbmRleCwgaW5zdGFuY2UtPm1lbW9yeSgpLT5tb2RlKCksIFdhc206OlBsYW46OmRvbnRGaW5h
bGl6ZSgpKSkpOworICAgICAgICAgICAgV2FzbTo6ZW5zdXJlV29ya2xpc3QoKS5lbnF1ZXVlKHBs
YW4uY29weVJlZigpKTsKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWSghT3B0aW9uczo6dXNlQ29u
Y3VycmVudEpJVCgpKSkKKyAgICAgICAgICAgICAgICBwbGFuLT53YWl0Rm9yQ29tcGxldGlvbigp
OworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHRpZXJVcENvdW50ZXIub3B0aW1p
emVBZnRlcldhcm1VcCgpOwogICAgICAgICB9Ci0gICAgfQogCi0gICAgaWYgKGNvbXBpbGUpIHsK
LSAgICAgICAgUmVmPFdhc206OlBsYW4+IHBsYW4gPSBhZG9wdFJlZigqc3RhdGljX2Nhc3Q8V2Fz
bTo6UGxhbio+KG5ldyBXYXNtOjpPTUdGb3JPU1JFbnRyeVBsYW4oaW5zdGFuY2UtPmNvbnRleHQo
KSwgUmVmPFdhc206Ok1vZHVsZT4oaW5zdGFuY2UtPm1vZHVsZSgpKSwgUmVmPFdhc206OkNhbGxl
ZT4oKmNhbGxlZSksIGNvZGVCbG9jay0+ZnVuY3Rpb25JbmRleCgpLCBvc3JFbnRyeURhdGEubG9v
cEluZGV4LCBpbnN0YW5jZS0+bWVtb3J5KCktPm1vZGUoKSwgV2FzbTo6UGxhbjo6ZG9udEZpbmFs
aXplKCkpKSk7Ci0gICAgICAgIFdhc206OmVuc3VyZVdvcmtsaXN0KCkuZW5xdWV1ZShwbGFuLmNv
cHlSZWYoKSk7Ci0gICAgICAgIGlmIChVTkxJS0VMWSghT3B0aW9uczo6dXNlQ29uY3VycmVudEpJ
VCgpKSkKLSAgICAgICAgICAgIHBsYW4tPndhaXRGb3JDb21wbGV0aW9uKCk7Ci0gICAgICAgIGVs
c2UKLSAgICAgICAgICAgIHRpZXJVcENvdW50ZXIub3B0aW1pemVBZnRlcldhcm1VcCgpOworICAg
ICAgICBpZiAoYXV0byogb3NyRW50cnlDYWxsZWUgPSBjYWxsZWUtPm9zckVudHJ5Q2FsbGVlKGlu
c3RhbmNlLT5tZW1vcnkoKS0+bW9kZSgpKSkKKyAgICAgICAgICAgIHJldHVybiBkb09TUkVudHJ5
KG9zckVudHJ5Q2FsbGVlKTsKKworICAgICAgICBXQVNNX1JFVFVSTl9UV08obnVsbHB0ciwgbnVs
bHB0cik7CiAgICAgfQogCi0gICAgaWYgKGF1dG8qIG9zckVudHJ5Q2FsbGVlID0gY2FsbGVlLT5v
c3JFbnRyeUNhbGxlZShpbnN0YW5jZS0+bWVtb3J5KCktPm1vZGUoKSkpCi0gICAgICAgIHJldHVy
biBkb09TUkVudHJ5KG9zckVudHJ5Q2FsbGVlKTsKIAotICAgIFdBU01fUkVUVVJOX1RXTyhudWxs
cHRyLCBudWxscHRyKTsKIH0KIAogV0FTTV9TTE9XX1BBVEhfREVDTChlcGlsb2d1ZV9vc3IpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1RvV2FzbS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNUb1dhc20uY3BwCShyZXZpc2lv
biAyODczMzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1RvV2FzbS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE3OCw5ICsxNzgsOSBAQCBzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJu
YWxGdW5jdGlvbj4gY3JlYXRlCiAgICAgaml0LmVtaXRaZXJvVG9DYWxsRnJhbWVIZWFkZXIoQ2Fs
bEZyYW1lU2xvdDo6Y29kZUJsb2NrKTsKICAgICBNYWNyb0Fzc2VtYmxlcjo6RGF0YUxhYmVsUHRy
IGNhbGxlZU1vdmVMb2NhdGlvbiA9IGppdC5tb3ZlV2l0aFBhdGNoKE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tUHRyKG51bGxwdHIpLCBHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25SZXR1cm5HUFIp
OwogICAgIGppdC5lbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIoR1BSSW5mbzo6bm9uUHJlc2VydmVk
Tm9uUmV0dXJuR1BSLCBDYWxsRnJhbWVTbG90OjpjYWxsZWUpOwotICAgIENvZGVMb2NhdGlvbkRh
dGFMYWJlbFB0cjxXYXNtRW50cnlQdHJUYWc+KiBsaW5rZWRDYWxsZWVNb3ZlID0gJnJlc3VsdC0+
Y2FsbGVlTW92ZUxvY2F0aW9uOworICAgIFZlY3RvcjxDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHI8
V2FzbUVudHJ5UHRyVGFnPj4qIGxpbmtlZENhbGxlZU1vdmUgPSAmcmVzdWx0LT5jYWxsZWVNb3Zl
TG9jYXRpb25zOwogICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZm
ZXIpIHsKLSAgICAgICAgKmxpbmtlZENhbGxlZU1vdmUgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8
V2FzbUVudHJ5UHRyVGFnPihjYWxsZWVNb3ZlTG9jYXRpb24pOworICAgICAgICBsaW5rZWRDYWxs
ZWVNb3ZlLT5hcHBlbmQobGlua0J1ZmZlci5sb2NhdGlvbk9mPFdhc21FbnRyeVB0clRhZz4oY2Fs
bGVlTW92ZUxvY2F0aW9uKSk7CiAgICAgfSk7CiAKICAgICBjb25zdCBQaW5uZWRSZWdpc3Rlcklu
Zm8mIHBpbm5lZFJlZ3MgPSBQaW5uZWRSZWdpc3RlckluZm86OmdldCgpOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>