<?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>43836</bug_id>
          
          <creation_ts>2010-08-11 01:16:37 -0700</creation_ts>
          <short_desc>Delete LegacyHTMLDocumentParser and LegacyPreloadScanner</short_desc>
          <delta_ts>2010-08-11 11:49:50 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Adam Barth">abarth</reporter>
          <assigned_to name="Adam Barth">abarth</assigned_to>
          <cc>abarth</cc>
    
    <cc>ap</cc>
    
    <cc>darin</cc>
    
    <cc>eric</cc>
    
    <cc>mjs</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>263106</commentid>
    <comment_count>0</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-08-11 01:16:37 -0700</bug_when>
    <thetext>Delete LegacyHTMLDocumentParser and LegacyPreloadScanner</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>263109</commentid>
    <comment_count>1</comment_count>
      <attachid>64086</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-08-11 01:20:18 -0700</bug_when>
    <thetext>Created attachment 64086
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>263120</commentid>
    <comment_count>2</comment_count>
      <attachid>64087</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-08-11 01:40:26 -0700</bug_when>
    <thetext>Created attachment 64087
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>263282</commentid>
    <comment_count>3</comment_count>
      <attachid>64087</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-08-11 09:27:44 -0700</bug_when>
    <thetext>Comment on attachment 64087
Patch

WebCore/dom/DocumentParser.h:62
 +      // used to implements it.
used to implement

My name is Eric Seidel, and I support this message.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>263285</commentid>
    <comment_count>4</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-08-11 09:30:30 -0700</bug_when>
    <thetext>At Apple we’re starting to get multiple bug reports about Mac OS X applications and websites that don’t work any more due to differences between the old and new parser.

One example is AOL’s AIM client, which malfunctions in a spectacular way. But I’m sure more of these reports are coming as people have more time to test.

Once you delete the old parser, we will presumably have to add hacks to the new one to make that old content work. Is that your preferred approach?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>263307</commentid>
    <comment_count>5</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-08-11 09:50:26 -0700</bug_when>
    <thetext>&gt; One example is AOL’s AIM client, which malfunctions in a spectacular way. But I’m sure more of these reports are coming as people have more time to test.

Yes.  Some of these reports have filtered into bugs.webkit.org as bugs blocking Bug 41115.  If you&apos;re able to share the reports (or sanitized versions of the reports), filing them as blocking Bug 41115 will make sure they don&apos;t get lost.

&gt; Once you delete the old parser, we will presumably have to add hacks to the new one to make that old content work. Is that your preferred approach?

We talked this over with Alexey at some point.  We think that&apos;s a better approach because maintaining branches in the new parser seems easier then maintaining an entirely separate parser.

As an example, Chrome decided to ship the old parser in the upcoming M6 beta because we&apos;re not quite done with the new parser yet.  When they turned it on, they found that it had already bit rotted to the point of a use-after-free on every document parse due to this change:

http://trac.webkit.org/changeset/62302/trunk/WebCore/html/LegacyHTMLDocumentParser.cpp

Notice the comment at the top of the diff that says &quot;this actually causes us to be deleted.&quot;  I don&apos;t mean to blame anyone by pointing out this patch.  It just illustrates the general principle that &quot;if it&apos;s not tested, it&apos;s wrong.&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>263353</commentid>
    <comment_count>6</comment_count>
      <attachid>64087</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-08-11 11:31:22 -0700</bug_when>
    <thetext>Comment on attachment 64087
Patch

Clearing flags on attachment: 64087

Committed r65167: &lt;http://trac.webkit.org/changeset/65167&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>263356</commentid>
    <comment_count>7</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-08-11 11:31:28 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>263367</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-08-11 11:49:50 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/65167 might have broken Chromium Win Release
The following changes are on the blame list:
http://trac.webkit.org/changeset/65166
http://trac.webkit.org/changeset/65167</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>64086</attachid>
            <date>2010-08-11 01:20:18 -0700</date>
            <delta_ts>2010-08-11 01:40:22 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-43836-20100811012017.patch</filename>
            <type>text/plain</type>
            <size>177460</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQW5kcm9pZC5tayBiL1dlYkNvcmUvQW5kcm9pZC5tawppbmRl
eCBhYzg5NGYxMTM0ZjU5ZjFiZDU0ODdlOTlhNzEzOTNkN2Q1ZWMwYmJiLi4zMTZlZDJhY2E3ZTE4
Nzc3MzZjYzY0OTE3MGY5YmE4NWYyZGMzNGQyIDEwMDY0NAotLS0gYS9XZWJDb3JlL0FuZHJvaWQu
bWsKKysrIGIvV2ViQ29yZS9BbmRyb2lkLm1rCkBAIC0yODMsMTIgKzI4MywxMCBAQCBMT0NBTF9T
UkNfRklMRVMgOj0gJChMT0NBTF9TUkNfRklMRVMpIFwKIAlodG1sL0hUTUxQYXJzZXJFcnJvckNv
ZGVzLmNwcCBcCiAJaHRtbC9IVE1MUGFyc2VyU2NoZWR1bGVyLmNwcCBcCiAJaHRtbC9IVE1MVGFi
bGVSb3dzQ29sbGVjdGlvbi5jcHAgXAotCWh0bWwvTGVnYWN5SFRNTERvY3VtZW50UGFyc2VyLmNw
cCBcCiAJaHRtbC9IVE1MVmlld1NvdXJjZURvY3VtZW50LmNwcCBcCiAJaHRtbC9IVE1MVmlld1Nv
dXJjZVBhcnNlci5jcHAgXAogCWh0bWwvSW1hZ2VEYXRhLmNwcCBcCiAJaHRtbC9JbWFnZVJlc2l6
ZXJUaHJlYWQuY3BwIFwKLQlodG1sL0xlZ2FjeVByZWxvYWRTY2FubmVyLmNwcCBcCiAJaHRtbC9U
aW1lUmFuZ2VzLmNwcCBcCiAJaHRtbC9WYWxpZGl0eVN0YXRlLmNwcCBcCiAJXApkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dCBiL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXgg
NzU0NDVjMjAyMDg5YmYzMGI1NDZjZjU2NjI0NTIxMjgyOTk3YmE3Mi4uNTMzMmI0ZWM1ZmVhYzUx
ZDg2MDA1NjdlNGE0NzcwNDI2YjMxYzJiNyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DTWFrZUxpc3Rz
LnR4dAorKysgYi9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC0xMDMzLDE0ICsxMDMzLDEyIEBA
IFNFVChXZWJDb3JlX1NPVVJDRVMKICAgICBodG1sL0hUTUxUYWJsZVNlY3Rpb25FbGVtZW50LmNw
cAogICAgIGh0bWwvSFRNTFRleHRBcmVhRWxlbWVudC5jcHAKICAgICBodG1sL0hUTUxUaXRsZUVs
ZW1lbnQuY3BwCi0gICAgaHRtbC9MZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXIuY3BwCiAgICAgaHRt
bC9IVE1MVUxpc3RFbGVtZW50LmNwcAogICAgIGh0bWwvSFRNTFZpZXdTb3VyY2VEb2N1bWVudC5j
cHAKICAgICBodG1sL0hUTUxWaWV3U291cmNlUGFyc2VyLmNwcAogICAgIGh0bWwvSW1hZ2VEYXRh
LmNwcAogICAgIGh0bWwvSW1hZ2VSZXNpemVyVGhyZWFkLmNwcAogICAgIGh0bWwvTGFiZWxzTm9k
ZUxpc3QuY3BwCi0gICAgaHRtbC9MZWdhY3lQcmVsb2FkU2Nhbm5lci5jcHAKICAgICBodG1sL1N0
ZXBSYW5nZS5jcHAKICAgICBodG1sL1ZhbGlkaXR5U3RhdGUuY3BwCiAgICAgaHRtbC9jYW52YXMv
Q2FudmFzR3JhZGllbnQuY3BwCkBAIC0xODU4LDcgKzE4NTYsNiBAQCBBRERfU09VUkNFX0RFUklW
RURfREVQRU5ERU5DSUVTKCR7V0VCQ09SRV9ESVJ9L2Nzcy9DU1NQcmltaXRpdmVWYWx1ZU1hcHBp
bmdzLmggQwogQUREX1NPVVJDRV9ERVJJVkVEX0RFUEVOREVOQ0lFUygke1dFQkNPUkVfRElSfS9o
dG1sL0hUTUxEb2N1bWVudC5jcHAgRG9jVHlwZVN0cmluZ3MuY3BwKQogQUREX1NPVVJDRV9ERVJJ
VkVEX0RFUEVOREVOQ0lFUygke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5j
cHAgQ29sb3JEYXRhLmNwcCkKIEFERF9TT1VSQ0VfREVSSVZFRF9ERVBFTkRFTkNJRVMoJHtXRUJD
T1JFX0RJUn0vY3NzL0NTU1BhcnNlci5jcHAgdG9rZW5pemVyLmNwcCkKLUFERF9TT1VSQ0VfREVS
SVZFRF9ERVBFTkRFTkNJRVMoJHtXRUJDT1JFX0RJUn0vaHRtbC9MZWdhY3lQcmVsb2FkU2Nhbm5l
ci5jcHAgSFRNTEVudGl0eU5hbWVzLmNwcCkKIEFERF9TT1VSQ0VfREVSSVZFRF9ERVBFTkRFTkNJ
RVMoJHtXRUJDT1JFX0RJUn0vaHRtbC9IVE1MRW50aXR5UGFyc2VyLmNwcCBIVE1MRW50aXR5TmFt
ZXMuY3BwKQogQUREX1NPVVJDRV9ERVJJVkVEX0RFUEVOREVOQ0lFUygke1dFQkNPUkVfRElSfS9o
dG1sL0hUTUxUcmVlQnVpbGRlci5jcHAgTWF0aE1MTmFtZXMuY3BwKQogQUREX1NPVVJDRV9ERVJJ
VkVEX0RFUEVOREVOQ0lFUygke1dFQkNPUkVfRElSfS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAg
VXNlckFnZW50U3R5bGVTaGVldHNEYXRhLmNwcCBVc2VyQWdlbnRTdHlsZVNoZWV0cy5oKQpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAwNTg1
YjVlNDdlMjY4MGRhZGM0ZThkYTY5OGU3ZDM4YWNjNjljMmM0Li5iMmJjYTExY2E3NmMwN2JhMWY2
MmFkNWQ2N2FkMGY5YjY4NzU0MjdkIDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysg
Yi9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYzIEBACisyMDEwLTA4LTExICBBZGFtIEJh
cnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUnViYmVyLXN0YW1wZWQgYnkgRXJp
YyBTZWlkZWwuCisKKyAgICAgICAgRGVsZXRlIExlZ2FjeUhUTUxEb2N1bWVudFBhcnNlciBhbmQg
TGVnYWN5UHJlbG9hZFNjYW5uZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTQzODM2CisKKyAgICAgICAgVGhlc2UgY2xhc3NlcyBhcmUgYml0LXJvdHRp
bmcgZGlzdHVyYmluZ2x5IHF1aWNrbHkuICBXZSByZW1vdmVkIHRoZQorICAgICAgICBsYXN0IGRl
cGVuZGVuY2llcyBvbiB0aGVzZSBjbGFzc2VzIGFuZCBzbyB3ZSBjYW4gcmVtb3ZlIHRoZW0uCisK
KyAgICAgICAgV2UgbWlnaHQgbmVlZCB0byBwcmVzZXJ2ZSBzb21lIG9mIHRoZWlyIHBhcnRpY3Vs
YXIgcXVpcmtzIHRvIGhhbmRsZQorICAgICAgICBzb21lIGxlZ2FjeSBhcHBsaWNhdGlvbnMsIGJ1
dCBvdXIgY3VycmVudCB0aGlua2luZyBpcyB0byBkbyB0aGF0IHdpdGgKKyAgICAgICAgaW5kaXZp
ZHVhbCBzZXR0aW5ncyB0aGF0IGFmZmVjdCB0aGUgbmV3IHBhcnNlci4KKworICAgICAgICAqIEFu
ZHJvaWQubWs6CisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogR05VbWFrZWZp
bGUuYW06CisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIFdlYkNvcmUucHJvOgor
ICAgICAgICAqIFdlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qOgorICAgICAgICAqIFdlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3Bw
OgorICAgICAgICAqIGRvbS9Eb2N1bWVudEZyYWdtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkRvY3VtZW50RnJhZ21lbnQ6OnBhcnNlSFRNTCk6CisgICAgICAgICogZG9tL0RvY3VtZW50UGFy
c2VyLmg6CisgICAgICAgICogZG9tL1hNTERvY3VtZW50UGFyc2VyTGlieG1sMi5jcHA6CisgICAg
ICAgICogZG9tL1hNTERvY3VtZW50UGFyc2VyUXQuY3BwOgorICAgICAgICAqIGh0bWwvSFRNTENv
bnN0cnVjdGlvblNpdGUuY3BwOgorICAgICAgICAqIGh0bWwvSFRNTERvY3VtZW50LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxEb2N1bWVudDo6Y3JlYXRlUGFyc2VyKToKKyAgICAgICAgKiBo
dG1sL0hUTUxFbnRpdHlQYXJzZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZGVjb2RlTmFtZWRF
bnRpdHkpOgorICAgICAgICAqIGh0bWwvSFRNTEVudGl0eVBhcnNlci5oOgorICAgICAgICAqIGh0
bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5jcHA6CisgICAgICAgICogaHRtbC9IVE1MVHJlZUJ1
aWxkZXIuY3BwOgorICAgICAgICAqIGh0bWwvSFRNTFZpZXdTb3VyY2VEb2N1bWVudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MVmlld1NvdXJjZURvY3VtZW50OjpjcmVhdGVQYXJzZXIpOgor
ICAgICAgICAqIGh0bWwvTGVnYWN5SFRNTERvY3VtZW50UGFyc2VyLmNwcDogUmVtb3ZlZC4KKyAg
ICAgICAgKiBodG1sL0xlZ2FjeUhUTUxEb2N1bWVudFBhcnNlci5oOiBSZW1vdmVkLgorICAgICAg
ICAqIGh0bWwvTGVnYWN5SFRNTFRyZWVCdWlsZGVyLmNwcDoKKyAgICAgICAgKiBodG1sL0xlZ2Fj
eVByZWxvYWRTY2FubmVyLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBodG1sL0xlZ2FjeVByZWxv
YWRTY2FubmVyLmg6IFJlbW92ZWQuCisgICAgICAgICogbG9hZGVyL0ZUUERpcmVjdG9yeURvY3Vt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZUUERpcmVjdG9yeURvY3VtZW50UGFyc2VyOjpG
VFBEaXJlY3RvcnlEb2N1bWVudFBhcnNlcik6CisgICAgICAgIChXZWJDb3JlOjpGVFBEaXJlY3Rv
cnlEb2N1bWVudFBhcnNlcjo6YXBwZW5kRW50cnkpOgorICAgICAgICAoV2ViQ29yZTo6RlRQRGly
ZWN0b3J5RG9jdW1lbnRQYXJzZXI6OmNyZWF0ZVRERm9yRmlsZW5hbWUpOgorICAgICAgICAoV2Vi
Q29yZTo6cHJvY2Vzc0ZpbGVzaXplU3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6Ondhc0xhc3RE
YXlPZk1vbnRoKToKKyAgICAgICAgKFdlYkNvcmU6OnByb2Nlc3NGaWxlRGF0ZVN0cmluZyk6Cisg
ICAgICAgIChXZWJDb3JlOjpGVFBEaXJlY3RvcnlEb2N1bWVudFBhcnNlcjo6cGFyc2VBbmRBcHBl
bmRPbmVMaW5lKToKKyAgICAgICAgKFdlYkNvcmU6OkZUUERpcmVjdG9yeURvY3VtZW50UGFyc2Vy
Ojpsb2FkRG9jdW1lbnRUZW1wbGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGVFBEaXJlY3RvcnlE
b2N1bWVudFBhcnNlcjo6Y3JlYXRlQmFzaWNEb2N1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpG
VFBEaXJlY3RvcnlEb2N1bWVudFBhcnNlcjo6YXBwZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkZU
UERpcmVjdG9yeURvY3VtZW50UGFyc2VyOjpmaW5pc2gpOgorICAgICAgICAqIHBhZ2UvWFNTQXVk
aXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpYU1NBdWRpdG9yOjpkZWNvZGVIVE1MRW50aXRp
ZXMpOgorICAgICAgICAqIHBhZ2UvWFNTQXVkaXRvci5oOgorICAgICAgICAqIHBsYXRmb3JtL3Rl
eHQvU2VnbWVudGVkU3RyaW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNlZ21lbnRlZFN0cmlu
Zzo6cHJlcGVuZCk6CisKIDIwMTAtMDgtMTAgIEVyaWMgU2VpZGVsICA8ZXJpY0B3ZWJraXQub3Jn
PgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFkYW0gQmFydGguCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L0dOVW1ha2VmaWxlLmFtIGIvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQppbmRleCAxYTYxNDc1ODMx
Nzg3OTFlYjVhNjg3N2EwOWY3YmU3MGJkMzYxYzBlLi40YmU5ZDk3YThlNDNkNWMxYjFkNmVmZGFm
ZWQyOTcwYzc0MDUzYjdkIDEwMDY0NAotLS0gYS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCisrKyBi
L1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KQEAgLTE1NDksOCArMTU0OSw2IEBAIHdlYmNvcmVfc291
cmNlcyArPSBcCiAJV2ViQ29yZS9odG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuaCBcCiAJV2ViQ29y
ZS9odG1sL0hUTUxUaXRsZUVsZW1lbnQuY3BwIFwKIAlXZWJDb3JlL2h0bWwvSFRNTFRpdGxlRWxl
bWVudC5oIFwKLQlXZWJDb3JlL2h0bWwvTGVnYWN5SFRNTERvY3VtZW50UGFyc2VyLmNwcCBcCi0J
V2ViQ29yZS9odG1sL0xlZ2FjeUhUTUxEb2N1bWVudFBhcnNlci5oIFwKIAlXZWJDb3JlL2h0bWwv
SFRNTFVMaXN0RWxlbWVudC5jcHAgXAogCVdlYkNvcmUvaHRtbC9IVE1MVUxpc3RFbGVtZW50Lmgg
XAogCVdlYkNvcmUvaHRtbC9IVE1MVmlld1NvdXJjZURvY3VtZW50LmNwcCBcCkBAIC0xNTY0LDgg
KzE1NjIsNiBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVdlYkNvcmUvaHRtbC9MYWJlbHNOb2Rl
TGlzdC5jcHAgXAogCVdlYkNvcmUvaHRtbC9MYWJlbHNOb2RlTGlzdC5oIFwKIAlXZWJDb3JlL2h0
bWwvTWVkaWFFcnJvci5oIFwKLQlXZWJDb3JlL2h0bWwvTGVnYWN5UHJlbG9hZFNjYW5uZXIuY3Bw
IFwKLQlXZWJDb3JlL2h0bWwvTGVnYWN5UHJlbG9hZFNjYW5uZXIuaCBcCiAJV2ViQ29yZS9odG1s
L1N0ZXBSYW5nZS5jcHAgXAogCVdlYkNvcmUvaHRtbC9TdGVwUmFuZ2UuaCBcCiAJV2ViQ29yZS9o
dG1sL1RleHRNZXRyaWNzLmggXApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9X
ZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCBhMGMyZDE0MGFjNmJiZmQ3M2Y3NTVjMzc5MDAzYzA3
MjE5ZTUwYjAzLi5hMmZhZjUzMTc5OWY2ODlmYTk4NjFmMmZlYjQ1OTNjMDJhMzJlNzIyIDEwMDY0
NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpA
QCAtMTcxMyw4ICsxNzEzLDYgQEAKICAgICAgICAgICAgICdodG1sL0hUTUxUZXh0QXJlYUVsZW1l
bnQuaCcsCiAgICAgICAgICAgICAnaHRtbC9IVE1MVGl0bGVFbGVtZW50LmNwcCcsCiAgICAgICAg
ICAgICAnaHRtbC9IVE1MVGl0bGVFbGVtZW50LmgnLAotICAgICAgICAgICAgJ2h0bWwvTGVnYWN5
SFRNTERvY3VtZW50UGFyc2VyLmNwcCcsCi0gICAgICAgICAgICAnaHRtbC9MZWdhY3lIVE1MRG9j
dW1lbnRQYXJzZXIuaCcsCiAgICAgICAgICAgICAnaHRtbC9IVE1MVUxpc3RFbGVtZW50LmNwcCcs
CiAgICAgICAgICAgICAnaHRtbC9IVE1MVUxpc3RFbGVtZW50LmgnLAogICAgICAgICAgICAgJ2h0
bWwvSFRNTFZpZGVvRWxlbWVudC5jcHAnLApAQCAtMTczMCw4ICsxNzI4LDYgQEAKICAgICAgICAg
ICAgICdodG1sL0xhYmVsc05vZGVMaXN0LmNwcCcsCiAgICAgICAgICAgICAnaHRtbC9MYWJlbHNO
b2RlTGlzdC5oJywKICAgICAgICAgICAgICdodG1sL01lZGlhRXJyb3IuaCcsCi0gICAgICAgICAg
ICAnaHRtbC9MZWdhY3lQcmVsb2FkU2Nhbm5lci5jcHAnLAotICAgICAgICAgICAgJ2h0bWwvTGVn
YWN5UHJlbG9hZFNjYW5uZXIuaCcsCiAgICAgICAgICAgICAnaHRtbC9TdGVwUmFuZ2UuY3BwJywK
ICAgICAgICAgICAgICdodG1sL1N0ZXBSYW5nZS5oJywKICAgICAgICAgICAgICdodG1sL1RleHRN
ZXRyaWNzLmgnLApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLnBybyBiL1dlYkNvcmUvV2Vi
Q29yZS5wcm8KaW5kZXggMGU2M2FmOGExNjcxODAwYTdjNDQ5ZTJhODc5MDUyNDRjNjJjZmY3Mi4u
YmM4N2UyNWIxNGFhNTg2ZGIwM2RhNWFhYzYxM2U1ZmZkNThlNzMxMSAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9XZWJDb3JlLnBybworKysgYi9XZWJDb3JlL1dlYkNvcmUucHJvCkBAIC03MzcsMTQgKzcz
NywxMiBAQCBTT1VSQ0VTICs9IFwKICAgICBodG1sL0hUTUxUYWJsZVNlY3Rpb25FbGVtZW50LmNw
cCBcCiAgICAgaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmNwcCBcCiAgICAgaHRtbC9IVE1MVGl0
bGVFbGVtZW50LmNwcCBcCi0gICAgaHRtbC9MZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXIuY3BwIFwK
ICAgICBodG1sL0hUTUxVTGlzdEVsZW1lbnQuY3BwIFwKICAgICBodG1sL0hUTUxWaWV3U291cmNl
RG9jdW1lbnQuY3BwIFwKICAgICBodG1sL0hUTUxWaWV3U291cmNlUGFyc2VyLmNwcCBcCiAgICAg
aHRtbC9JbWFnZURhdGEuY3BwIFwKICAgICBodG1sL0ltYWdlUmVzaXplclRocmVhZC5jcHAgXAog
ICAgIGh0bWwvTGFiZWxzTm9kZUxpc3QuY3BwIFwKLSAgICBodG1sL0xlZ2FjeVByZWxvYWRTY2Fu
bmVyLmNwcCBcCiAgICAgaHRtbC9TdGVwUmFuZ2UuY3BwIFwKICAgICBodG1sL1ZhbGlkaXR5U3Rh
dGUuY3BwIFwKICAgICBpbnNwZWN0b3IvQ29uc29sZU1lc3NhZ2UuY3BwIFwKQEAgLTE1MDEsNyAr
MTQ5OSw2IEBAIEhFQURFUlMgKz0gXAogICAgIGh0bWwvSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQu
aCBcCiAgICAgaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmggXAogICAgIGh0bWwvSFRNTFRpdGxl
RWxlbWVudC5oIFwKLSAgICBodG1sL0xlZ2FjeUhUTUxEb2N1bWVudFBhcnNlci5oIFwKICAgICBo
dG1sL0hUTUxVTGlzdEVsZW1lbnQuaCBcCiAgICAgaHRtbC9IVE1MVmlkZW9FbGVtZW50LmggXAog
ICAgIGh0bWwvSFRNTFZpZXdTb3VyY2VEb2N1bWVudC5oIFwKQEAgLTE1MDksNyArMTUwNiw2IEBA
IEhFQURFUlMgKz0gXAogICAgIGh0bWwvSW1hZ2VEYXRhLmggXAogICAgIGh0bWwvSW1hZ2VSZXNp
emVyVGhyZWFkLmggXAogICAgIGh0bWwvTGFiZWxzTm9kZUxpc3QuaCBcCi0gICAgaHRtbC9MZWdh
Y3lQcmVsb2FkU2Nhbm5lci5oIFwKICAgICBodG1sL1N0ZXBSYW5nZS5oIFwKICAgICBodG1sL1Rp
bWVSYW5nZXMuaCBcCiAgICAgaHRtbC9WYWxpZGl0eVN0YXRlLmggXApkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvaiBiL1dlYkNvcmUvV2ViQ29yZS52Y3By
b2ovV2ViQ29yZS52Y3Byb2oKaW5kZXggY2YwOTg4YWI1OThmOTcxMDE1ODI2MWYzOGMxM2U0MWI3
ZWFhYTgyMy4uNDYzZjVkOWU5ZDIwNmJmYTcwNThmM2UxYTdkZmMyNDNkZjNmMzcyZiAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagorKysgYi9XZWJDb3Jl
L1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCkBAIC00MDkyOSwxNCArNDA5MjksNiBAQAog
CQkJCT4NCiAJCQk8L0ZpbGU+DQogCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxodG1s
XExlZ2FjeUhUTUxEb2N1bWVudFBhcnNlci5jcHAiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJ
PEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxodG1sXExlZ2FjeUhUTUxEb2N1bWVudFBhcnNl
ci5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQogCQkJCVJlbGF0aXZlUGF0aD0i
Li5caHRtbFxMZWdhY3lIVE1MVHJlZUJ1aWxkZXIuY3BwIg0KIAkJCQk+DQogCQkJPC9GaWxlPg0K
QEAgLTQwOTQ1LDE0ICs0MDkzNyw2IEBACiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0K
LQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGh0bWxcTGVnYWN5UHJlbG9hZFNjYW5uZXIuY3BwIg0KLQkJ
CQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5caHRtbFxM
ZWdhY3lQcmVsb2FkU2Nhbm5lci5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQog
CQkJCVJlbGF0aXZlUGF0aD0iLi5caHRtbFxNZWRpYUVycm9yLmgiDQogCQkJCT4NCiAJCQk8L0Zp
bGU+DQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2ogYi9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA4MWZh
NzNmNmZjYTNkMWY0ZTYxYTlhNzNmN2IzNjRlNjc0ZDgzZWM5Li45MGU1M2FiM2QxY2I4NmFjMTAz
MjNmMzY1ZTAzYWM4NTM1YjZkNzY1IDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagpAQCAtMjU5OSw3ICsyNTk5LDYgQEAKIAkJOTNGMTk4RTUwODI0NUU1OTAwMUU5
QUJDIC8qIEhUTUxEb2N1bWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRjUyM0QyM0MwMkRFNDM5NjAxODYzNUNBIC8qIEhUTUxEb2N1bWVudC5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTkzRjE5OEU2
MDgyNDVFNTkwMDFFOUFCQyAvKiBIVE1MRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjUyM0QyM0YwMkRFNDM5NjAxODYzNUNBIC8qIEhUTUxF
bGVtZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJOTNGMTk4RUYwODI0NUU1OTAwMUU5QUJDIC8qIExlZ2FjeUhUTUxUcmVlQnVpbGRlci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjUyM0QyNTEwMkRF
NDM5NjAxODYzNUNBIC8qIExlZ2FjeUhUTUxUcmVlQnVpbGRlci5oICovOyB9OwotCQk5M0YxOThG
MDA4MjQ1RTU5MDAxRTlBQkMgLyogTGVnYWN5SFRNTERvY3VtZW50UGFyc2VyLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNTIzRDI1MzAyREU0Mzk2MDE4
NjM1Q0EgLyogTGVnYWN5SFRNTERvY3VtZW50UGFyc2VyLmggKi87IH07CiAJCTkzRjE5OEY2MDgy
NDVFNTkwMDFFOUFCQyAvKiBUZXh0UmVzb3VyY2VEZWNvZGVyLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNTIzRDI3OTAyREU0M0Q3MDE4NjM1Q0EgLyog
VGV4dFJlc291cmNlRGVjb2Rlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTkzRjE5OTE4MDgyNDVFNTkwMDFFOUFCQyAvKiBSYW5nZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjUyM0QzMDQwMkRFNDQ3
NjAxODYzNUNBIC8qIFJhbmdlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJOTNGMTk5MjEwODI0NUU1OTAwMUU5QUJDIC8qIFhNTERvY3VtZW50UGFy
c2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNTIz
RDMwQTAyREU0NDc2MDE4NjM1Q0EgLyogWE1MRG9jdW1lbnRQYXJzZXIuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMjYyOSw3ICsyNjI4LDYgQEAK
IAkJOTNGMTlBOTEwODI0NUU1OTAwMUU5QUJDIC8qIEhUTUxEb2N1bWVudC5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNTIzRDIzQjAyREU0Mzk2MDE4
NjM1Q0EgLyogSFRNTERvY3VtZW50LmNwcCAqLzsgfTsKIAkJOTNGMTlBOTIwODI0NUU1OTAwMUU5
QUJDIC8qIEhUTUxFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEY1MjNEMjNFMDJERTQzOTYwMTg2MzVDQSAvKiBIVE1MRWxlbWVudC5jcHAg
Ki87IH07CiAJCTkzRjE5QTlCMDgyNDVFNTkwMDFFOUFCQyAvKiBMZWdhY3lIVE1MVHJlZUJ1aWxk
ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjUy
M0QyNTAwMkRFNDM5NjAxODYzNUNBIC8qIExlZ2FjeUhUTUxUcmVlQnVpbGRlci5jcHAgKi87IH07
Ci0JCTkzRjE5QTlDMDgyNDVFNTkwMDFFOUFCQyAvKiBMZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXIu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjUyM0Qy
NTIwMkRFNDM5NjAxODYzNUNBIC8qIExlZ2FjeUhUTUxEb2N1bWVudFBhcnNlci5jcHAgKi87IH07
CiAJCTkzRjE5QTlEMDgyNDVFNTkwMDFFOUFCQyAvKiBUZXh0UmVzb3VyY2VEZWNvZGVyLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1MjNEMjc4MDJE
RTQzRDcwMTg2MzVDQSAvKiBUZXh0UmVzb3VyY2VEZWNvZGVyLmNwcCAqLzsgfTsKIAkJOTNGMTlB
QjkwODI0NUU1OTAwMUU5QUJDIC8qIFJhbmdlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1MjNEMzAzMDJERTQ0NzYwMTg2MzVDQSAvKiBSYW5nZS5j
cHAgKi87IH07CiAJCTkzRjE5QUJDMDgyNDVFNTkwMDFFOUFCQyAvKiBYTUxEb2N1bWVudFBhcnNl
ci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNTIz
RDMwOTAyREU0NDc2MDE4NjM1Q0EgLyogWE1MRG9jdW1lbnRQYXJzZXIuY3BwICovOyB9OwpAQCAt
NTIwOSw4ICs1MjA3LDYgQEAKIAkJRTQ3NzhCODAxMTVBNTgxQTAwQjVEMzcyIC8qIEpTQ3VzdG9t
RXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0
Nzc4QjdFMTE1QTU4MUEwMEI1RDM3MiAvKiBKU0N1c3RvbUV2ZW50LmggKi87IH07CiAJCUU0N0I0
QkU4MEU3MTI0MTYwMDAzODg1NCAvKiBDYWNoZWRSZXNvdXJjZUhhbmRsZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ3QjRCRTYwRTcxMjQxNjAwMDM4
ODU0IC8qIENhY2hlZFJlc291cmNlSGFuZGxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTQ3QjRCRTkwRTcxMjQxNjAwMDM4ODU0IC8qIENhY2hl
ZFJlc291cmNlSGFuZGxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEU0N0I0QkU3MEU3MTI0MTYwMDAzODg1NCAvKiBDYWNoZWRSZXNvdXJjZUhhbmRs
ZS5jcHAgKi87IH07Ci0JCUU0OTYyNkMyMEQ4MEQ5NDgwMEUzNDA1QyAvKiBMZWdhY3lQcmVsb2Fk
U2Nhbm5lci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBFNEQ0QUJFMDBENzU0MkYwMDBGOTY4NjkgLyogTGVnYWN5UHJlbG9hZFNjYW5uZXIuY3BwICov
OyB9OwotCQlFNDk2MjZDMzBEODBEOTQ5MDBFMzQwNUMgLyogTGVnYWN5UHJlbG9hZFNjYW5uZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0RDRBQkUx
MEQ3NTQyRjEwMEY5Njg2OSAvKiBMZWdhY3lQcmVsb2FkU2Nhbm5lci5oICovOyB9OwogCQlFNEFG
Q0ZBNTBEQUYyOUEzMDBGNUY1NUMgLyogVW5pdEJlemllci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTRBRkNGQTQwREFGMjlBMzAwRjVGNTVDIC8qIFVu
aXRCZXppZXIuaCAqLzsgfTsKIAkJRTRBRkQwMEIwREFGMzM1NDAwRjVGNTVDIC8qIFNNSUxUaW1l
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0QUZE
MDA1MERBRjMzNTQwMEY1RjU1QyAvKiBTTUlMVGltZS5jcHAgKi87IH07CiAJCUU0QUZEMDBDMERB
RjMzNTQwMEY1RjU1QyAvKiBTTUlMVGltZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRTRBRkQwMDYwREFGMzM1NDAwRjVGNTVDIC8qIFNNSUxUaW1lLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTExMDA0
LDggKzExMDAwLDYgQEAKIAkJRTRDMTc4OTYwRUU2OTAzODAwODI0RDY5IC8qIENTU1NlbGVjdG9y
TGlzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDU1NTZWxlY3Rvckxpc3Qu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTRDMjc5NTYwQ0Y5NzQxOTAwRTk3Qjk4
IC8qIFJlbmRlck1lZGlhLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFJlbmRlck1lZGlhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTRDMjc5NTcw
Q0Y5NzQxOTAwRTk3Qjk4IC8qIFJlbmRlck1lZGlhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFJlbmRlck1lZGlhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUU0
RDRBQkUwMEQ3NTQyRjAwMEY5Njg2OSAvKiBMZWdhY3lQcmVsb2FkU2Nhbm5lci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMZWdhY3lQcmVsb2FkU2Nhbm5lci5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUU0RDRBQkUxMEQ3NTQyRjEwMEY5Njg2OSAv
KiBMZWdhY3lQcmVsb2FkU2Nhbm5lci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBMZWdhY3lQcmVsb2FkU2Nhbm5lci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlF
NEQ2ODc3NjBFRDdBRTNEMDA2RUE5NzggLyogUHVyZ2VhYmxlQnVmZmVyTWFjLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFB1cmdlYWJsZUJ1ZmZlck1hYy5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0RDY4Nzc4MEVEN0FFNEYwMDZFQTk3OCAvKiBQ
dXJnZWFibGVCdWZmZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHVyZ2Vh
YmxlQnVmZmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0RUVGRkM2MEQzNDU1
MEMwMDQ2OUE1OCAvKiBKU0F1ZGlvQ29uc3RydWN0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gSlNBdWRpb0NvbnN0cnVjdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTExMDM0LDggKzExMDI4LDYgQEAKIAkJRjUyM0QyM0YwMkRFNDM5NjAx
ODYzNUNBIC8qIEhUTUxFbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEhUTUxFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQlGNTIzRDI1MDAyREU0Mzk2MDE4NjM1
Q0EgLyogTGVnYWN5SFRNTFRyZWVCdWlsZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExlZ2FjeUhUTUxUcmVlQnVpbGRlci5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9Owog
CQlGNTIzRDI1MTAyREU0Mzk2MDE4NjM1Q0EgLyogTGVnYWN5SFRNTFRyZWVCdWlsZGVyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRo
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExlZ2FjeUhU
TUxUcmVlQnVpbGRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVz
ZXNUYWJzID0gMDsgfTsKLQkJRjUyM0QyNTIwMkRFNDM5NjAxODYzNUNBIC8qIExlZ2FjeUhUTUxE
b2N1bWVudFBhcnNlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBMZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXIuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKLQkJRjUyM0QyNTMw
MkRFNDM5NjAxODYzNUNBIC8qIExlZ2FjeUhUTUxEb2N1bWVudFBhcnNlci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMZWdhY3lIVE1MRG9jdW1l
bnRQYXJzZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFi
cyA9IDA7IH07CiAJCUY1MjNEMjc4MDJERTQzRDcwMTg2MzVDQSAvKiBUZXh0UmVzb3VyY2VEZWNv
ZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsg
aW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFRleHRSZXNvdXJjZURlY29kZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0
YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJRjUyM0QyNzkwMkRFNDNENzAxODYzNUNB
IC8qIFRleHRSZXNvdXJjZURlY29kZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gVGV4dFJlc291cmNlRGVjb2Rlci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJRjUyM0QzMDMwMkRF
NDQ3NjAxODYzNUNBIC8qIFJhbmdlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJhbmdlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CkBAIC0xNDE4NCwxMiArMTQxNzYsOCBA
QAogCQkJCUIwMTQ5RTdDMTFBNEIyMTUwMDE5NkE3QiAvKiBJbWFnZVJlc2l6ZXJUaHJlYWQuaCAq
LywKIAkJCQlBNDU2RkEyNDExQUQ0QTgzMDAyMEI0MjAgLyogTGFiZWxzTm9kZUxpc3QuY3BwICov
LAogCQkJCUE0NTZGQTI1MTFBRDRBODMwMDIwQjQyMCAvKiBMYWJlbHNOb2RlTGlzdC5oICovLAot
CQkJCUY1MjNEMjUyMDJERTQzOTYwMTg2MzVDQSAvKiBMZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXIu
Y3BwICovLAotCQkJCUY1MjNEMjUzMDJERTQzOTYwMTg2MzVDQSAvKiBMZWdhY3lIVE1MRG9jdW1l
bnRQYXJzZXIuaCAqLywKIAkJCQlGNTIzRDI1MDAyREU0Mzk2MDE4NjM1Q0EgLyogTGVnYWN5SFRN
TFRyZWVCdWlsZGVyLmNwcCAqLywKIAkJCQlGNTIzRDI1MTAyREU0Mzk2MDE4NjM1Q0EgLyogTGVn
YWN5SFRNTFRyZWVCdWlsZGVyLmggKi8sCi0JCQkJRTRENEFCRTAwRDc1NDJGMDAwRjk2ODY5IC8q
IExlZ2FjeVByZWxvYWRTY2FubmVyLmNwcCAqLywKLQkJCQlFNEQ0QUJFMTBENzU0MkYxMDBGOTY4
NjkgLyogTGVnYWN5UHJlbG9hZFNjYW5uZXIuaCAqLywKIAkJCQlFNDQ2MTM5QjBDRDYzMzEwMDBG
QURBNzUgLyogTWVkaWFFcnJvci5oICovLAogCQkJCUU0NDYxMzlDMENENjMzMTAwMEZBREE3NSAv
KiBNZWRpYUVycm9yLmlkbCAqLywKIAkJCQlBNUFGQjM0RDExNTE1MUE3MDBCMDQ1Q0IgLyogU3Rl
cFJhbmdlLmNwcCAqLywKQEAgLTE5Mjc0LDkgKzE5MjYyLDcgQEAKIAkJCQlBNDU2RkEyNzExQUQ0
QTgzMDAyMEI0MjAgLyogTGFiZWxzTm9kZUxpc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTg1RUM5
QUZCMEE3MUEyQzYwMEVFRUFFRCAvKiBMYW5ndWFnZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkQ5
MDY2MDcwQkUxNDFENDAwOTU2OTk4IC8qIExheW91dFN0YXRlLmggaW4gSGVhZGVycyAqLywKLQkJ
CQk5M0YxOThGMDA4MjQ1RTU5MDAxRTlBQkMgLyogTGVnYWN5SFRNTERvY3VtZW50UGFyc2VyLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk5M0YxOThFRjA4MjQ1RTU5MDAxRTlBQkMgLyogTGVnYWN5SFRN
TFRyZWVCdWlsZGVyLmggaW4gSGVhZGVycyAqLywKLQkJCQlFNDk2MjZDMzBEODBEOTQ5MDBFMzQw
NUMgLyogTGVnYWN5UHJlbG9hZFNjYW5uZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxMkREOEY1
MEQ5MUU2QUYwMDBGODlFRSAvKiBMZWdhY3lXZWJBcmNoaXZlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlCQ0U2NUJFQjBFQUNERjE2MDA3RTQ1MzMgLyogTGVuZ3RoLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlCQ0ZGNjQ5MTBFQUQxNUMyMDBDMUQ2RjcgLyogTGVuZ3RoQm94LmggaW4gSGVhZGVycyAqLywK
QEAgLTIwMjE1LDcgKzIwMjAxLDYgQEAKIAkJCWlzYSA9IFBCWFByb2plY3Q7CiAJCQlidWlsZENv
bmZpZ3VyYXRpb25MaXN0ID0gMTQ5QzI4NDMwODkwMkIxMTAwOEE5RUZDIC8qIEJ1aWxkIGNvbmZp
Z3VyYXRpb24gbGlzdCBmb3IgUEJYUHJvamVjdCAiV2ViQ29yZSIgKi87CiAJCQljb21wYXRpYmls
aXR5VmVyc2lvbiA9ICJYY29kZSAyLjQiOwotCQkJZGV2ZWxvcG1lbnRSZWdpb24gPSBFbmdsaXNo
OwogCQkJaGFzU2Nhbm5lZEZvckVuY29kaW5ncyA9IDE7CiAJCQlrbm93blJlZ2lvbnMgPSAoCiAJ
CQkJRW5nbGlzaCwKQEAgLTIxODE0LDkgKzIxNzk5LDcgQEAKIAkJCQlBNDU2RkEyNjExQUQ0QTgz
MDAyMEI0MjAgLyogTGFiZWxzTm9kZUxpc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTM1MjA4
NDUwOUJENDNCOTAwRjIwMzhEIC8qIExhbmd1YWdlLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMkQ5
MDY2MDYwQkUxNDFENDAwOTU2OTk4IC8qIExheW91dFN0YXRlLmNwcCBpbiBTb3VyY2VzICovLAot
CQkJCTkzRjE5QTlDMDgyNDVFNTkwMDFFOUFCQyAvKiBMZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXIu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTNGMTlBOUIwODI0NUU1OTAwMUU5QUJDIC8qIExlZ2Fj
eUhUTUxUcmVlQnVpbGRlci5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlFNDk2MjZDMjBEODBEOTQ4
MDBFMzQwNUMgLyogTGVnYWN5UHJlbG9hZFNjYW5uZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
NTEyREQ4RjQwRDkxRTZBRjAwMEY4OUVFIC8qIExlZ2FjeVdlYkFyY2hpdmUuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJNTFCMjQxN0IwRDkzMUYzRjAwRTgzRjVDIC8qIExlZ2FjeVdlYkFyY2hpdmVN
YWMubW0gaW4gU291cmNlcyAqLywKIAkJCQlCQ0U2NUJFQTBFQUNERjE2MDA3RTQ1MzMgLyogTGVu
Z3RoLmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vRG9jdW1lbnQu
Y3BwIGIvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCmluZGV4IDBkMzk4NTRmOGNlOTgwMWY2MjEz
ZmM5OGEzMGRkMjg3NTg1OTk3MWQuLmVmOTE0MWI0NzkyMDQzM2RmZDMwYTMzMTZiMGRiZmM4Y2Ji
MmQ5ZDUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAorKysgYi9XZWJDb3Jl
L2RvbS9Eb2N1bWVudC5jcHAKQEAgLTg5LDcgKzg5LDYgQEAKICNpbmNsdWRlICJJbnNwZWN0b3JD
b250cm9sbGVyLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5oIgogI2luY2x1
ZGUgIktleWJvYXJkRXZlbnQuaCIKLSNpbmNsdWRlICJMZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXIu
aCIKICNpbmNsdWRlICJMZWdhY3lIVE1MVHJlZUJ1aWxkZXIuaCIKICNpbmNsdWRlICJMb2dnaW5n
LmgiCiAjaW5jbHVkZSAiTWVzc2FnZUV2ZW50LmgiCmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9E
b2N1bWVudEZyYWdtZW50LmNwcCBiL1dlYkNvcmUvZG9tL0RvY3VtZW50RnJhZ21lbnQuY3BwCmlu
ZGV4IDQ3NDg1YjdmNjY0MDJkOGQ3MmI5N2Q0MGU5ZmJiOGE3N2NkMzMxYWQuLjcwZTU3YjkwYmE5
NzUyYTU2OTZlMjU4ZjQ5ZmNkODA3ZmFiM2FmMTAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZG9tL0Rv
Y3VtZW50RnJhZ21lbnQuY3BwCisrKyBiL1dlYkNvcmUvZG9tL0RvY3VtZW50RnJhZ21lbnQuY3Bw
CkBAIC0yNSw3ICsyNSw2IEBACiAKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkhU
TUxEb2N1bWVudFBhcnNlci5oIgotI2luY2x1ZGUgIkxlZ2FjeUhUTUxEb2N1bWVudFBhcnNlci5o
IgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgogI2luY2x1ZGUgIlhN
TERvY3VtZW50UGFyc2VyLmgiCkBAIC04NCw4ICs4Myw2IEBAIGJvb2wgRG9jdW1lbnRGcmFnbWVu
dDo6c2hvdWxkVXNlTGVnYWN5SFRNTFBhcnNlcigpIGNvbnN0CiAKIHZvaWQgRG9jdW1lbnRGcmFn
bWVudDo6cGFyc2VIVE1MKGNvbnN0IFN0cmluZyYgc291cmNlLCBFbGVtZW50KiBjb250ZXh0RWxl
bWVudCwgRnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uIHNjcmlwdGluZ1Blcm1pc3Npb24pCiB7
Ci0gICAgaWYgKHNob3VsZFVzZUxlZ2FjeUhUTUxQYXJzZXIoKSkKLSAgICAgICAgcmV0dXJuIExl
Z2FjeUhUTUxEb2N1bWVudFBhcnNlcjo6cGFyc2VEb2N1bWVudEZyYWdtZW50KHNvdXJjZSwgdGhp
cywgc2NyaXB0aW5nUGVybWlzc2lvbik7CiAgICAgSFRNTERvY3VtZW50UGFyc2VyOjpwYXJzZURv
Y3VtZW50RnJhZ21lbnQoc291cmNlLCB0aGlzLCBjb250ZXh0RWxlbWVudCwgc2NyaXB0aW5nUGVy
bWlzc2lvbik7CiB9CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL0RvY3VtZW50UGFyc2VyLmgg
Yi9XZWJDb3JlL2RvbS9Eb2N1bWVudFBhcnNlci5oCmluZGV4IGEzNTQ1YjZlZjgxYjExMzcxMzVk
N2FmNzg0ZGE3ZDYyMzYyZTJmNDQuLmU5NDJkMWYyMGY0ZDNhNzdjMjI2Y2M1MjM3OWIyMTY0MmMw
NGY4OWUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZG9tL0RvY3VtZW50UGFyc2VyLmgKKysrIGIvV2Vi
Q29yZS9kb20vRG9jdW1lbnRQYXJzZXIuaApAQCAtNTgsOCArNTgsOCBAQCBwdWJsaWM6CiAKICAg
ICB2aXJ0dWFsIHZvaWQgc3RvcFBhcnNpbmcoKSB7IG1fcGFyc2VyU3RvcHBlZCA9IHRydWU7IH0K
ICAgICAvLyBGSVhNRTogcHJvY2Vzc2luZ0RhdGEoKSBpcyBvbmx5IHVzZWQgYnkgRG9jdW1lbnRM
b2FkZXI6OmlzTG9hZGluZ0luQVBJU2Vuc2UKLSAgICAvLyBhbmQgaXMgdmVyeSB1bmNsZWFyIGFz
IHRvIHdoYXQgaXQgYWN0dWFsbHkgbWVhbnMuICBPbmx5IExlZ2FjeUhUTUxEb2N1bWVudFBhcnNl
cgotICAgIC8vIGFjdHVhbGx5IGltcGxlbWVudHMgaXQuCisgICAgLy8gYW5kIGlzIHZlcnkgdW5j
bGVhciBhcyB0byB3aGF0IGl0IGFjdHVhbGx5IG1lYW5zLiAgVGhlIExlZ2FjeUhUTUxEb2N1bWVu
dFBhcnNlcgorICAgIC8vIHVzZWQgdG8gaW1wbGVtZW50cyBpdC4KICAgICB2aXJ0dWFsIGJvb2wg
cHJvY2Vzc2luZ0RhdGEoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogCiAgICAgLy8gRklYTUU6
IEV4cG9zZWQgZm9yIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnJlbW92ZWRGcm9tVHJlZS4gIEhU
TUwgRE9NCmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9YTUxEb2N1bWVudFBhcnNlckxpYnhtbDIu
Y3BwIGIvV2ViQ29yZS9kb20vWE1MRG9jdW1lbnRQYXJzZXJMaWJ4bWwyLmNwcAppbmRleCBhNmU5
Y2QwN2I4ODA5MzUxMmMzNWVlYmM4MTUyODdhOTEwMGJiMGRiLi4xMzA5ODI3ZDc1M2I4NjViOWFl
MmJhMTc4N2QxODk0ZDk1ZTRkZjY5IDEwMDY0NAotLS0gYS9XZWJDb3JlL2RvbS9YTUxEb2N1bWVu
dFBhcnNlckxpYnhtbDIuY3BwCisrKyBiL1dlYkNvcmUvZG9tL1hNTERvY3VtZW50UGFyc2VyTGli
eG1sMi5jcHAKQEAgLTM2LDkgKzM2LDkgQEAKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUg
IkZyYW1lTG9hZGVyLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCisjaW5jbHVkZSAiSFRNTEVu
dGl0eVBhcnNlci5oIgogI2luY2x1ZGUgIkhUTUxMaW5rRWxlbWVudC5oIgogI2luY2x1ZGUgIkhU
TUxTdHlsZUVsZW1lbnQuaCIKLSNpbmNsdWRlICJMZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXIuaCIg
Ly8gZm9yIGRlY29kZU5hbWVkRW50aXR5CiAjaW5jbHVkZSAiUHJvY2Vzc2luZ0luc3RydWN0aW9u
LmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VFcnJvci5oIgogI2luY2x1ZGUgIlJlc291cmNlSGFuZGxl
LmgiCmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9YTUxEb2N1bWVudFBhcnNlclF0LmNwcCBiL1dl
YkNvcmUvZG9tL1hNTERvY3VtZW50UGFyc2VyUXQuY3BwCmluZGV4IDY3OGQxNDE5OGE0NDMyYmQz
MGI0NzM0YmQ2ZWJlMTI2ZjBlNTU4ZTkuLjcxNTg1NmM4Y2ZjNmY4YzFjZjYyYjZmMjJlNGMwNGUy
Y2Q1MTI1ODEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZG9tL1hNTERvY3VtZW50UGFyc2VyUXQuY3Bw
CisrKyBiL1dlYkNvcmUvZG9tL1hNTERvY3VtZW50UGFyc2VyUXQuY3BwCkBAIC0zNiw5ICszNiw5
IEBACiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgogI2luY2x1
ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1ZGUgIkhUTUxFbnRpdHlQYXJzZXIuaCIKICNpbmNsdWRl
ICJIVE1MTGlua0VsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MU3R5bGVFbGVtZW50LmgiCi0jaW5j
bHVkZSAiTGVnYWN5SFRNTERvY3VtZW50UGFyc2VyLmgiCiAjaW5jbHVkZSAiUHJvY2Vzc2luZ0lu
c3RydWN0aW9uLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VFcnJvci5oIgogI2luY2x1ZGUgIlJlc291
cmNlSGFuZGxlLmgiCmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvSFRNTENvbnN0cnVjdGlvblNp
dGUuY3BwIGIvV2ViQ29yZS9odG1sL0hUTUxDb25zdHJ1Y3Rpb25TaXRlLmNwcAppbmRleCA5ZjUw
MmUzMWU0YjU4NmIxNjkxNjI0NGM5MTUxNzk3MzUxMmNlYjI3Li4yYjI4ZGE0MTQ4ZTY0NDE2Njc1
NTVlNTcxNzBjMDYxMDRmYTNmMDczIDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvSFRNTENvbnN0
cnVjdGlvblNpdGUuY3BwCisrKyBiL1dlYkNvcmUvaHRtbC9IVE1MQ29uc3RydWN0aW9uU2l0ZS5j
cHAKQEAgLTM5LDcgKzM5LDYgQEAKICNpbmNsdWRlICJIVE1MU2NyaXB0RWxlbWVudC5oIgogI2lu
Y2x1ZGUgIkhUTUxUb2tlbi5oIgogI2luY2x1ZGUgIkhUTUxUb2tlbml6ZXIuaCIKLSNpbmNsdWRl
ICJMZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXIuaCIKICNpbmNsdWRlICJMZWdhY3lIVE1MVHJlZUJ1
aWxkZXIuaCIKICNpbmNsdWRlICJMb2NhbGl6ZWRTdHJpbmdzLmgiCiAjaWYgRU5BQkxFKE1BVEhN
TCkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9IVE1MRG9jdW1lbnQuY3BwIGIvV2ViQ29yZS9o
dG1sL0hUTUxEb2N1bWVudC5jcHAKaW5kZXggZmYwYzJkZTY0MjA4NWE4Y2VjYjk4YzhmNTM4NDg1
MDQ4MDViOWZhNC4uNTU5YzFlMDQyMDFhYjljZjJhZGVlMjkxOWYwOTRiYTUyOWFlZTRkNyAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9odG1sL0hUTUxEb2N1bWVudC5jcHAKKysrIGIvV2ViQ29yZS9odG1s
L0hUTUxEb2N1bWVudC5jcHAKQEAgLTY4LDcgKzY4LDYgQEAKICNpbmNsdWRlICJIVE1MQm9keUVs
ZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MRWxlbWVudEZhY3RvcnkuaCIKICNpbmNsdWRlICJIVE1M
TmFtZXMuaCIKLSNpbmNsdWRlICJMZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXIuaCIKICNpbmNsdWRl
ICJJbnNwZWN0b3JDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiS1VSTC5oIgogI2luY2x1ZGUgIlBh
Z2UuaCIKQEAgLTI5MCwxMSArMjg5LDcgQEAgRG9jdW1lbnRQYXJzZXIqIEhUTUxEb2N1bWVudDo6
Y3JlYXRlUGFyc2VyKCkKICAgICBpZiAoUGFnZSogcGFnZSA9IHRoaXMtPnBhZ2UoKSkKICAgICAg
ICAgcmVwb3J0RXJyb3JzID0gcGFnZS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLT53aW5kb3dWaXNp
YmxlKCk7CiAjZW5kaWYKLQotICAgIGlmIChzZXR0aW5ncygpICYmIHNldHRpbmdzKCktPmh0bWw1
UGFyc2VyRW5hYmxlZCgpKQotICAgICAgICByZXR1cm4gbmV3IEhUTUxEb2N1bWVudFBhcnNlcih0
aGlzLCByZXBvcnRFcnJvcnMpOwotCi0gICAgcmV0dXJuIG5ldyBMZWdhY3lIVE1MRG9jdW1lbnRQ
YXJzZXIodGhpcywgcmVwb3J0RXJyb3JzKTsKKyAgICByZXR1cm4gbmV3IEhUTUxEb2N1bWVudFBh
cnNlcih0aGlzLCByZXBvcnRFcnJvcnMpOwogfQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9odG1sL0hUTUxFbnRpdHlQYXJzZXIuY3BwIGIvV2ViQ29yZS9odG1s
L0hUTUxFbnRpdHlQYXJzZXIuY3BwCmluZGV4IDg0YjIwMDY3NDRmZjY3OGI4YzJmNmQ4YTIyOTE3
YTU3Y2MzZjQxM2MuLmI5YzRkZWUzZTU4MzFiNmMxZTJlYmM5MDY2ZTg0ZjIzOGEzNDgwNWMgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9IVE1MRW50aXR5UGFyc2VyLmNwcAorKysgYi9XZWJDb3Jl
L2h0bWwvSFRNTEVudGl0eVBhcnNlci5jcHAKQEAgLTI0Nyw0ICsyNDcsMTAgQEAgdW5zaWduZWQg
Y29uc3VtZUhUTUxFbnRpdHkoU2VnbWVudGVkU3RyaW5nJiBzb3VyY2UsIGJvb2wmIG5vdEVub3Vn
aENoYXJhY3RlcnMsIFUKICAgICByZXR1cm4gMDsKIH0KIAorVUNoYXIgZGVjb2RlTmFtZWRFbnRp
dHkoY29uc3QgY2hhciogbmFtZSkKK3sKKyAgICBjb25zdCBFbnRpdHkqIGUgPSBmaW5kRW50aXR5
KG5hbWUsIHN0cmxlbihuYW1lKSk7CisgICAgcmV0dXJuIGUgPyBlLT5jb2RlIDogMDsKK30KKwog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0hUTUxFbnRp
dHlQYXJzZXIuaCBiL1dlYkNvcmUvaHRtbC9IVE1MRW50aXR5UGFyc2VyLmgKaW5kZXggZDM3YjBj
MzNlNmUwOTliMDBlYzVjMzE3Y2Y2NDUyZWVkZmVjNjAzNy4uMTA1OWIyNDk1YTgwZTgwMDY4NzZj
ZTYxMzk1YWY4NzU2NzhkYjA5MyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0hUTUxFbnRpdHlQ
YXJzZXIuaAorKysgYi9XZWJDb3JlL2h0bWwvSFRNTEVudGl0eVBhcnNlci5oCkBAIC0zMyw2ICsz
Myw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdW5zaWduZWQgY29uc3VtZUhUTUxFbnRpdHko
U2VnbWVudGVkU3RyaW5nJiwgYm9vbCYgbm90RW5vdWdoQ2hhcmFjdGVycywgVUNoYXIgYWRkaXRp
b25hbEFsbG93ZWRDaGFyYWN0ZXIgPSAnXDAnKTsKIAorLy8gVXNlZCBieSB0aGUgWE1MIHBhcnNl
ci4gIE5vdCBzdWl0YWJsZSBmb3IgdXNlIGluIEhUTUwgcGFyc2luZy4gIFVzZSBjb25zdW1lSFRN
TEVudGl0eSBpbnN0ZWFkLgorVUNoYXIgZGVjb2RlTmFtZWRFbnRpdHkoY29uc3QgY2hhciopOwor
CiB9CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJvbEVs
ZW1lbnQuY3BwIGIvV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuY3BwCmluZGV4
IDUxMDNiZmE3Y2FkMGJhOWNhMjIyMDM2ZjE4ZjVmZTNkYTkxMTY3NDAuLjBlNjAwMWUyNTZkNWFl
NjNkMjUyMDgzY2Y5ODhlZDJkNDhhMjVhMDYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9IVE1M
Rm9ybUNvbnRyb2xFbGVtZW50LmNwcAorKysgYi9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9s
RWxlbWVudC5jcHAKQEAgLTM5LDcgKzM5LDYgQEAKICNpbmNsdWRlICJIVE1MSW5wdXRFbGVtZW50
LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiTGVnYWN5SFRNTFRyZWVCdWls
ZGVyLmgiCi0jaW5jbHVkZSAiTGVnYWN5SFRNTERvY3VtZW50UGFyc2VyLmgiCiAjaW5jbHVkZSAi
TGFiZWxzTm9kZUxpc3QuaCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUmVuZGVyQm94
LmgiCmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvSFRNTFRyZWVCdWlsZGVyLmNwcCBiL1dlYkNv
cmUvaHRtbC9IVE1MVHJlZUJ1aWxkZXIuY3BwCmluZGV4IGZjMGI5ZDAxNmViNjE0NzgxMTYzNzNl
MWJlNmFlOGU2YzM2N2M4NWUuLmFiN2U2YmZmZGU1NzI2NTBiYmU0MmQ4YmJiZWQzNzk3OGZjNDZj
MDkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9IVE1MVHJlZUJ1aWxkZXIuY3BwCisrKyBiL1dl
YkNvcmUvaHRtbC9IVE1MVHJlZUJ1aWxkZXIuY3BwCkBAIC0zOSw3ICszOSw2IEBACiAjaW5jbHVk
ZSAiSFRNTFNjcmlwdEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MVG9rZW4uaCIKICNpbmNsdWRl
ICJIVE1MVG9rZW5pemVyLmgiCi0jaW5jbHVkZSAiTGVnYWN5SFRNTERvY3VtZW50UGFyc2VyLmgi
CiAjaW5jbHVkZSAiTGVnYWN5SFRNTFRyZWVCdWlsZGVyLmgiCiAjaW5jbHVkZSAiTG9jYWxpemVk
U3RyaW5ncy5oIgogI2luY2x1ZGUgIk1hdGhNTE5hbWVzLmgiCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L2h0bWwvSFRNTFZpZXdTb3VyY2VEb2N1bWVudC5jcHAgYi9XZWJDb3JlL2h0bWwvSFRNTFZpZXdT
b3VyY2VEb2N1bWVudC5jcHAKaW5kZXggYzMzMGM0ZDY5ZWFlY2NkZDEzZDgyODZlNTVmMTM2ZGVk
ZWVhY2RhZC4uZTBlNzFlZWExYWZlYWNiN2FlNjllMGU3NTA2MTY5NjUyNDRhNTFmZCAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9odG1sL0hUTUxWaWV3U291cmNlRG9jdW1lbnQuY3BwCisrKyBiL1dlYkNv
cmUvaHRtbC9IVE1MVmlld1NvdXJjZURvY3VtZW50LmNwcApAQCAtNTUsNyArNTUsNyBAQCBIVE1M
Vmlld1NvdXJjZURvY3VtZW50OjpIVE1MVmlld1NvdXJjZURvY3VtZW50KEZyYW1lKiBmcmFtZSwg
Y29uc3QgS1VSTCYgdXJsLCBjbwogCiBEb2N1bWVudFBhcnNlciogSFRNTFZpZXdTb3VyY2VEb2N1
bWVudDo6Y3JlYXRlUGFyc2VyKCkKIHsKLSAgICAvLyBVc2UgTGVnYWN5SFRNTERvY3VtZW50UGFy
c2VyIGlmIGFwcGxpY2FibGUsIG90aGVyd2lzZSB1c2UgVGV4dERvY3VtZW50UGFyc2VyLgorICAg
IC8vIFVzZSBIVE1MRG9jdW1lbnRQYXJzZXIgaWYgYXBwbGljYWJsZSwgb3RoZXJ3aXNlIHVzZSBU
ZXh0RG9jdW1lbnRQYXJzZXIuCiAgICAgaWYgKG1fdHlwZSA9PSAidGV4dC9odG1sIiB8fCBtX3R5
cGUgPT0gImFwcGxpY2F0aW9uL3hodG1sK3htbCIgfHwgbV90eXBlID09ICJpbWFnZS9zdmcreG1s
IiB8fCBET01JbXBsZW1lbnRhdGlvbjo6aXNYTUxNSU1FVHlwZShtX3R5cGUpCiAjaWYgRU5BQkxF
KFhIVE1MTVApCiAgICAgICAgIHx8IG1fdHlwZSA9PSAiYXBwbGljYXRpb24vdm5kLndhcC54aHRt
bCt4bWwiCmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvTGVnYWN5SFRNTERvY3VtZW50UGFyc2Vy
LmNwcCBiL1dlYkNvcmUvaHRtbC9MZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXIuY3BwCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZDRkNjE1N2YwNDhiNzFlNjdhOGI1ODEyNzNlMTBjMmU1
YjQ5YzY0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1dl
YkNvcmUvaHRtbC9MZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXIuY3BwCisrKyAvZGV2L251bGwKQEAg
LTEsMjEyMCArMCwwIEBACi0vKgotICAgIENvcHlyaWdodCAoQykgMTk5NyBNYXJ0aW4gSm9uZXMg
KG1qb25lc0BrZGUub3JnKQotICAgICAgICAgICAgICAoQykgMTk5NyBUb3JiZW4gV2VpcyAod2Vp
c0BrZGUub3JnKQotICAgICAgICAgICAgICAoQykgMTk5OCBXYWxkbyBCYXN0aWFuIChiYXN0aWFu
QGtkZS5vcmcpCi0gICAgICAgICAgICAgIChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5v
cmcpCi0gICAgICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUu
b3JnKQotICAgICAgICAgICAgICAoQykgMjAwMSBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9y
ZykKLSAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICAgIENvcHlyaWdodCAoQykgMjAwNSwg
MjAwNiBBbGV4ZXkgUHJvc2t1cnlha292IChhcEBueXBvcC5jb20pCi0gICAgQ29weXJpZ2h0IChD
KSAyMDA5IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIChodHRwOi8vd3d3
LnRvcmNobW9iaWxlLmNvbS8pCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAgICBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAgICB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKLSAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gICAgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCi0gICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICAgIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgotKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkxl
Z2FjeUhUTUxEb2N1bWVudFBhcnNlci5oIgotCi0jaW5jbHVkZSAiQXR0cmlidXRlLmgiCi0jaW5j
bHVkZSAiQ1NTSGVscGVyLmgiCi0jaW5jbHVkZSAiQ2FjaGUuaCIKLSNpbmNsdWRlICJDYWNoZWRT
Y3JpcHQuaCIKLSNpbmNsdWRlICJEb2NMb2FkZXIuaCIKLSNpbmNsdWRlICJEb2N1bWVudEZyYWdt
ZW50LmgiCi0jaW5jbHVkZSAiRXZlbnQuaCIKLSNpbmNsdWRlICJFdmVudE5hbWVzLmgiCi0jaW5j
bHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgotI2luY2x1ZGUgIkZyYW1l
Vmlldy5oIgotI2luY2x1ZGUgIkhUTUxFbGVtZW50LmgiCi0jaW5jbHVkZSAiSFRNTE5hbWVzLmgi
Ci0jaW5jbHVkZSAiTGVnYWN5SFRNTFRyZWVCdWlsZGVyLmgiCi0jaW5jbHVkZSAiSFRNTFNjcmlw
dEVsZW1lbnQuaCIKLSNpbmNsdWRlICJIVE1MVmlld1NvdXJjZURvY3VtZW50LmgiCi0jaW5jbHVk
ZSAiSW1hZ2VMb2FkZXIuaCIKLSNpbmNsdWRlICJJbnNwZWN0b3JUaW1lbGluZUFnZW50LmgiCi0j
aW5jbHVkZSAiUGFnZS5oIgotI2luY2x1ZGUgIkxlZ2FjeVByZWxvYWRTY2FubmVyLmgiCi0jaW5j
bHVkZSAiU2NyaXB0U291cmNlQ29kZS5oIgotI2luY2x1ZGUgIlNjcmlwdFZhbHVlLmgiCi0jaW5j
bHVkZSAiWFNTQXVkaXRvci5oIgotI2luY2x1ZGUgPHd0Zi9BU0NJSUNUeXBlLmg+Ci0jaW5jbHVk
ZSA8d3RmL0N1cnJlbnRUaW1lLmg+Ci0KLSNpbmNsdWRlICJIVE1MRW50aXR5TmFtZXMuY3BwIgot
Ci0jZGVmaW5lIFBSRUxPQURfU0NBTk5FUl9FTkFCTEVEIDEKLQotdXNpbmcgbmFtZXNwYWNlIFdU
RjsKLXVzaW5nIG5hbWVzcGFjZSBzdGQ7Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdXNpbmcg
bmFtZXNwYWNlIEhUTUxOYW1lczsKLQotLy8gVGhpcyB2YWx1ZSBpcyB1c2VkIHRvIGRlZmluZSBo
b3cgbWFueSBsb29wcyAoYXBwcm94aW1hdGVseSB0b2tlbnMpCi0vLyB0aGUgcGFyc2VyIHdpbGwg
bWFrZSBiZWZvcmUgY2hlY2tpbmcgaWYgaXQgc2hvdWxkIHlpZWxkLgotLy8gVG8gaW5jcmVhc2Ug
cmVzcG9uc2l2ZW5lc3MgcmVkdWNlIGJvdGggQ2h1bmtTaXplIGFuZCBUaW1lRGVsYXkgY29udGFu
dHMuCi1zdGF0aWMgY29uc3QgaW50IGRlZmF1bHRUb2tlbml6ZXJDaHVua1NpemUgPSA0MDk2Owot
Ci0vLyBGSVhNRTogV2Ugd291bGQgbGlrZSB0aGlzIGNvbnN0YW50IHRvIGJlIDIwMG1zLgotLy8g
WWllbGRpbmcgbW9yZSBhZ2dyZXNzaXZlbHkgcmVzdWx0cyBpbiBpbmNyZWFzZWQgcmVzcG9uc2l2
ZW5lc3MgYW5kIGJldHRlciBpbmNyZW1lbnRhbCByZW5kZXJpbmcuCi0vLyBJdCBzbG93cyBkb3du
IG92ZXJhbGwgcGFnZS1sb2FkIG9uIHNsb3dlciBtYWNoaW5lcywgdGhvdWdoLCBzbyBmb3Igbm93
IHdlIHNldCBhIHZhbHVlIG9mIDUwMC4KLS8vIFRpbWVEZWxheSBjb250cm9scyB0aGUgbWF4aW11
bSB0aW1lIHRoZSBwYXJzZXIgd2lsbCBydW4gYmVmb3JlIHlpZWxkaW5nLgotLy8gSW5saW5lIHNj
cmlwdCBleGVjdXRpb24gY2FuIGNhdXNlIHRoZSBwYXJzZXIgdG8gZXhjZWRlIHRoaXMgbGltaXQu
Ci1zdGF0aWMgY29uc3QgZG91YmxlIGRlZmF1bHRUb2tlbml6ZXJUaW1lRGVsYXkgPSAwLjUwMDsK
LQotc3RhdGljIGNvbnN0IGNoYXIgY29tbWVudFN0YXJ0IFtdID0gIjwhLS0iOwotc3RhdGljIGNv
bnN0IGNoYXIgZG9jdHlwZVN0YXJ0IFtdID0gIjwhZG9jdHlwZSI7Ci1zdGF0aWMgY29uc3QgY2hh
ciBwdWJsaWNTdGFydCBbXSA9ICJwdWJsaWMiOwotc3RhdGljIGNvbnN0IGNoYXIgc3lzdGVtU3Rh
cnQgW10gPSAic3lzdGVtIjsKLXN0YXRpYyBjb25zdCBjaGFyIHNjcmlwdEVuZCBbXSA9ICI8L3Nj
cmlwdCI7Ci1zdGF0aWMgY29uc3QgY2hhciB4bXBFbmQgW10gPSAiPC94bXAiOwotc3RhdGljIGNv
bnN0IGNoYXIgc3R5bGVFbmQgW10gPSAgIjwvc3R5bGUiOwotc3RhdGljIGNvbnN0IGNoYXIgdGV4
dGFyZWFFbmQgW10gPSAiPC90ZXh0YXJlYSI7Ci1zdGF0aWMgY29uc3QgY2hhciB0aXRsZUVuZCBb
XSA9ICI8L3RpdGxlIjsKLXN0YXRpYyBjb25zdCBjaGFyIGlmcmFtZUVuZCBbXSA9ICI8L2lmcmFt
ZSI7Ci0KLS8vIEZ1bGwgc3VwcG9ydCBmb3IgTVMgV2luZG93cyBleHRlbnNpb25zIHRvIExhdGlu
LTEuCi0vLyBUZWNobmljYWxseSB0aGVzZSBleHRlbnNpb25zIHNob3VsZCBvbmx5IGJlIGFjdGl2
YXRlZCBmb3IgcGFnZXMKLS8vIG1hcmtlZCAid2luZG93cy0xMjUyIiBvciAiY3AxMjUyIiwgYnV0
Ci0vLyBpbiB0aGUgc3RhbmRhcmQgTWljcm9zb2Z0IHdheSwgdGhlc2UgZXh0ZW5zaW9ucyBpbmZl
Y3QgaHVuZHJlZHMgb2YgdGhvdXNhbmRzCi0vLyBvZiB3ZWIgcGFnZXMuICBOb3RlIHRoYXQgcGVv
cGxlIHdpdGggbm9uLWxhdGluLTEgTWljcm9zb2Z0IGV4dGVuc2lvbnMKLS8vIGFyZSBTT0wuCi0v
LwotLy8gU2VlOiBodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vZ2xvYmFsZGV2L3JlZmVyZW5jZS9X
aW5DUC5hc3AKLS8vICAgICAgaHR0cDovL3d3dy5iYnNpbmMuY29tL2lzbzg4NTkuaHRtbAotLy8g
ICAgICBodHRwOi8vd3d3Lm9idmlvdXNseS5jb20vCi0vLwotLy8gVGhlcmUgbWF5IGJlIGJldHRl
ciBlcXVpdmFsZW50cwotCi0vLyBXZSBvbmx5IG5lZWQgdGhpcyBmb3IgZW50aXRpZXMuIEZvciBu
b24tZW50aXR5IHRleHQsIHdlIGhhbmRsZSB0aGlzIGluIHRoZSB0ZXh0IGVuY29kaW5nLgotCi1z
dGF0aWMgY29uc3QgVUNoYXIgd2luZG93c0xhdGluMUV4dGVuc2lvbkFycmF5WzMyXSA9IHsKLSAg
ICAweDIwQUMsIDB4MDA4MSwgMHgyMDFBLCAweDAxOTIsIDB4MjAxRSwgMHgyMDI2LCAweDIwMjAs
IDB4MjAyMSwgLy8gODAtODcKLSAgICAweDAyQzYsIDB4MjAzMCwgMHgwMTYwLCAweDIwMzksIDB4
MDE1MiwgMHgwMDhELCAweDAxN0QsIDB4MDA4RiwgLy8gODgtOEYKLSAgICAweDAwOTAsIDB4MjAx
OCwgMHgyMDE5LCAweDIwMUMsIDB4MjAxRCwgMHgyMDIyLCAweDIwMTMsIDB4MjAxNCwgLy8gOTAt
OTcKLSAgICAweDAyREMsIDB4MjEyMiwgMHgwMTYxLCAweDIwM0EsIDB4MDE1MywgMHgwMDlELCAw
eDAxN0UsIDB4MDE3OCAgLy8gOTgtOUYKLX07Ci0KLXN0YXRpYyBpbmxpbmUgVUNoYXIgZml4VXBD
aGFyKFVDaGFyIGMpCi17Ci0gICAgaWYgKChjICYgfjB4MUYpICE9IDB4MDA4MCkKLSAgICAgICAg
cmV0dXJuIGM7Ci0gICAgcmV0dXJuIHdpbmRvd3NMYXRpbjFFeHRlbnNpb25BcnJheVtjIC0gMHg4
MF07Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCB0YWdNYXRjaChjb25zdCBjaGFyKiBzMSwgY29u
c3QgVUNoYXIqIHMyLCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSAhPSBsZW5ndGg7ICsraSkgewotICAgICAgICB1bnNpZ25lZCBjaGFyIGMxID0gczFbaV07
Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIgdWMxID0gdG9BU0NJSVVwcGVyKHN0YXRpY19jYXN0PGNo
YXI+KGMxKSk7Ci0gICAgICAgIFVDaGFyIGMyID0gczJbaV07Ci0gICAgICAgIGlmIChjMSAhPSBj
MiAmJiB1YzEgIT0gYzIpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJl
dHVybiB0cnVlOwotfQotCi1pbmxpbmUgdm9pZCBUb2tlbjo6YWRkQXR0cmlidXRlKEF0b21pY1N0
cmluZyYgYXR0ck5hbWUsIGNvbnN0IEF0b21pY1N0cmluZyYgYXR0cmlidXRlVmFsdWUsIGJvb2wg
dmlld1NvdXJjZU1vZGUpCi17Ci0gICAgaWYgKCFhdHRyTmFtZS5pc0VtcHR5KCkpIHsKLSAgICAg
ICAgQVNTRVJUKCFhdHRyTmFtZS5jb250YWlucygnLycpKTsKLSAgICAgICAgUmVmUHRyPEF0dHJp
YnV0ZT4gYSA9IEF0dHJpYnV0ZTo6Y3JlYXRlTWFwcGVkKGF0dHJOYW1lLCBhdHRyaWJ1dGVWYWx1
ZSk7Ci0gICAgICAgIGlmICghYXR0cnMpIHsKLSAgICAgICAgICAgIGF0dHJzID0gTmFtZWROb2Rl
TWFwOjpjcmVhdGUoKTsKLSAgICAgICAgICAgIGF0dHJzLT5yZXNlcnZlSW5pdGlhbENhcGFjaXR5
KDEwKTsKLSAgICAgICAgfQotICAgICAgICBhdHRycy0+aW5zZXJ0QXR0cmlidXRlKGEucmVsZWFz
ZSgpLCB2aWV3U291cmNlTW9kZSk7Ci0gICAgfQotCi0gICAgYXR0ck5hbWUgPSBlbXB0eUF0b207
Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotTGVnYWN5SFRNTERvY3VtZW50UGFyc2Vy
OjpMZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXIoSFRNTERvY3VtZW50KiBkb2N1bWVudCwgYm9vbCBy
ZXBvcnRFcnJvcnMpCi0gICAgOiBTY3JpcHRhYmxlRG9jdW1lbnRQYXJzZXIoZG9jdW1lbnQpCi0g
ICAgLCBtX2J1ZmZlcigwKQotICAgICwgbV9zY3JpcHRDb2RlKDApCi0gICAgLCBtX3NjcmlwdENv
ZGVTaXplKDApCi0gICAgLCBtX3NjcmlwdENvZGVDYXBhY2l0eSgwKQotICAgICwgbV9zY3JpcHRD
b2RlUmVzeW5jKDApCi0gICAgLCBtX2V4ZWN1dGluZ1NjcmlwdCgwKQotICAgICwgbV9yZXF1ZXN0
aW5nU2NyaXB0KGZhbHNlKQotICAgICwgbV9oYXNTY3JpcHRzV2FpdGluZ0ZvclN0eWxlc2hlZXRz
KGZhbHNlKQotICAgICwgbV90aW1lcih0aGlzLCAmTGVnYWN5SFRNTERvY3VtZW50UGFyc2VyOjp0
aW1lckZpcmVkKQotICAgICwgbV9leHRlcm5hbFNjcmlwdHNUaW1lcih0aGlzLCAmTGVnYWN5SFRN
TERvY3VtZW50UGFyc2VyOjpleGVjdXRlRXh0ZXJuYWxTY3JpcHRzVGltZXJGaXJlZCkKLSAgICAs
IG1fdHJlZUJ1aWxkZXIobmV3IExlZ2FjeUhUTUxUcmVlQnVpbGRlcihkb2N1bWVudCwgcmVwb3J0
RXJyb3JzKSkKLSAgICAsIG1faW5Xcml0ZShmYWxzZSkKLSAgICAsIG1fZnJhZ21lbnQoZmFsc2Up
Ci0gICAgLCBtX3NjcmlwdGluZ1Blcm1pc3Npb24oRnJhZ21lbnRTY3JpcHRpbmdBbGxvd2VkKQot
ewotICAgIGJlZ2luKCk7Ci19Ci0KLUxlZ2FjeUhUTUxEb2N1bWVudFBhcnNlcjo6TGVnYWN5SFRN
TERvY3VtZW50UGFyc2VyKEhUTUxWaWV3U291cmNlRG9jdW1lbnQqIGRvY3VtZW50KQotICAgIDog
U2NyaXB0YWJsZURvY3VtZW50UGFyc2VyKGRvY3VtZW50LCB0cnVlKQotICAgICwgbV9idWZmZXIo
MCkKLSAgICAsIG1fc2NyaXB0Q29kZSgwKQotICAgICwgbV9zY3JpcHRDb2RlU2l6ZSgwKQotICAg
ICwgbV9zY3JpcHRDb2RlQ2FwYWNpdHkoMCkKLSAgICAsIG1fc2NyaXB0Q29kZVJlc3luYygwKQot
ICAgICwgbV9leGVjdXRpbmdTY3JpcHQoMCkKLSAgICAsIG1fcmVxdWVzdGluZ1NjcmlwdChmYWxz
ZSkKLSAgICAsIG1faGFzU2NyaXB0c1dhaXRpbmdGb3JTdHlsZXNoZWV0cyhmYWxzZSkKLSAgICAs
IG1fdGltZXIodGhpcywgJkxlZ2FjeUhUTUxEb2N1bWVudFBhcnNlcjo6dGltZXJGaXJlZCkKLSAg
ICAsIG1fZXh0ZXJuYWxTY3JpcHRzVGltZXIodGhpcywgJkxlZ2FjeUhUTUxEb2N1bWVudFBhcnNl
cjo6ZXhlY3V0ZUV4dGVybmFsU2NyaXB0c1RpbWVyRmlyZWQpCi0gICAgLCBtX2luV3JpdGUoZmFs
c2UpCi0gICAgLCBtX2ZyYWdtZW50KGZhbHNlKQotICAgICwgbV9zY3JpcHRpbmdQZXJtaXNzaW9u
KEZyYWdtZW50U2NyaXB0aW5nQWxsb3dlZCkKLXsKLSAgICBiZWdpbigpOwotfQotCi1MZWdhY3lI
VE1MRG9jdW1lbnRQYXJzZXI6OkxlZ2FjeUhUTUxEb2N1bWVudFBhcnNlcihEb2N1bWVudEZyYWdt
ZW50KiBmcmFnLCBGcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24gc2NyaXB0aW5nUGVybWlzc2lv
bikKLSAgICA6IFNjcmlwdGFibGVEb2N1bWVudFBhcnNlcihmcmFnLT5kb2N1bWVudCgpKQotICAg
ICwgbV9idWZmZXIoMCkKLSAgICAsIG1fc2NyaXB0Q29kZSgwKQotICAgICwgbV9zY3JpcHRDb2Rl
U2l6ZSgwKQotICAgICwgbV9zY3JpcHRDb2RlQ2FwYWNpdHkoMCkKLSAgICAsIG1fc2NyaXB0Q29k
ZVJlc3luYygwKQotICAgICwgbV9leGVjdXRpbmdTY3JpcHQoMCkKLSAgICAsIG1fcmVxdWVzdGlu
Z1NjcmlwdChmYWxzZSkKLSAgICAsIG1faGFzU2NyaXB0c1dhaXRpbmdGb3JTdHlsZXNoZWV0cyhm
YWxzZSkKLSAgICAsIG1fdGltZXIodGhpcywgJkxlZ2FjeUhUTUxEb2N1bWVudFBhcnNlcjo6dGlt
ZXJGaXJlZCkKLSAgICAsIG1fZXh0ZXJuYWxTY3JpcHRzVGltZXIodGhpcywgJkxlZ2FjeUhUTUxE
b2N1bWVudFBhcnNlcjo6ZXhlY3V0ZUV4dGVybmFsU2NyaXB0c1RpbWVyRmlyZWQpCi0gICAgLCBt
X3RyZWVCdWlsZGVyKG5ldyBMZWdhY3lIVE1MVHJlZUJ1aWxkZXIoZnJhZywgc2NyaXB0aW5nUGVy
bWlzc2lvbikpCi0gICAgLCBtX2luV3JpdGUoZmFsc2UpCi0gICAgLCBtX2ZyYWdtZW50KHRydWUp
Ci0gICAgLCBtX3NjcmlwdGluZ1Blcm1pc3Npb24oc2NyaXB0aW5nUGVybWlzc2lvbikKLXsKLSAg
ICBiZWdpbigpOwotfQotCi12b2lkIExlZ2FjeUhUTUxEb2N1bWVudFBhcnNlcjo6cmVzZXQoKQot
ewotICAgIEFTU0VSVChtX2V4ZWN1dGluZ1NjcmlwdCA9PSAwKTsKLQotICAgIHdoaWxlICghbV9w
ZW5kaW5nU2NyaXB0cy5pc0VtcHR5KCkpIHsKLSAgICAgICAgQ2FjaGVkUmVzb3VyY2VIYW5kbGU8
Q2FjaGVkU2NyaXB0PiBjcyA9IG1fcGVuZGluZ1NjcmlwdHMudGFrZUZpcnN0KCk7Ci0gICAgICAg
IEFTU0VSVChjYWNoZSgpLT5kaXNhYmxlZCgpIHx8IGNzLT5hY2Nlc3NDb3VudCgpID4gMCk7Ci0g
ICAgICAgIGNzLT5yZW1vdmVDbGllbnQodGhpcyk7Ci0gICAgfQotCi0gICAgZmFzdEZyZWUobV9i
dWZmZXIpOwotICAgIG1fYnVmZmVyID0gbV9kZXN0ID0gMDsKLSAgICBtX2J1ZmZlclNpemUgPSAw
OwotCi0gICAgZmFzdEZyZWUobV9zY3JpcHRDb2RlKTsKLSAgICBtX3NjcmlwdENvZGUgPSAwOwot
ICAgIG1fc2NyaXB0Q29kZVNpemUgPSBtX3NjcmlwdENvZGVDYXBhY2l0eSA9IG1fc2NyaXB0Q29k
ZVJlc3luYyA9IDA7Ci0KLSAgICBtX3RpbWVyLnN0b3AoKTsKLSAgICBtX2V4dGVybmFsU2NyaXB0
c1RpbWVyLnN0b3AoKTsKLQotICAgIG1fc3RhdGUuc2V0QWxsb3dZaWVsZChmYWxzZSk7Ci0gICAg
bV9zdGF0ZS5zZXRGb3JjZVN5bmNocm9ub3VzKGZhbHNlKTsKLQotICAgIG1fY3VycmVudFRva2Vu
LnJlc2V0KCk7Ci0gICAgbV9kb2N0eXBlVG9rZW4ucmVzZXQoKTsKLSAgICBtX2RvY3R5cGVTZWFy
Y2hDb3VudCA9IDA7Ci0gICAgbV9kb2N0eXBlU2Vjb25kYXJ5U2VhcmNoQ291bnQgPSAwOwotICAg
IG1faGFzU2NyaXB0c1dhaXRpbmdGb3JTdHlsZXNoZWV0cyA9IGZhbHNlOwotfQotCi12b2lkIExl
Z2FjeUhUTUxEb2N1bWVudFBhcnNlcjo6YmVnaW4oKQotewotICAgIG1fZXhlY3V0aW5nU2NyaXB0
ID0gMDsKLSAgICBtX3JlcXVlc3RpbmdTY3JpcHQgPSBmYWxzZTsKLSAgICBtX2hhc1NjcmlwdHNX
YWl0aW5nRm9yU3R5bGVzaGVldHMgPSBmYWxzZTsKLSAgICBtX3N0YXRlLnNldExvYWRpbmdFeHRT
Y3JpcHQoZmFsc2UpOwotICAgIHJlc2V0KCk7Ci0gICAgbV9idWZmZXJTaXplID0gMjU0OwotICAg
IG1fYnVmZmVyID0gc3RhdGljX2Nhc3Q8VUNoYXIqPihmYXN0TWFsbG9jKHNpemVvZihVQ2hhcikg
KiAyNTQpKTsKLSAgICBtX2Rlc3QgPSBtX2J1ZmZlcjsKLSAgICB0cXVvdGUgPSBOb1F1b3RlOwot
ICAgIHNlYXJjaENvdW50ID0gMDsKLSAgICBtX3N0YXRlLnNldEVudGl0eVN0YXRlKE5vRW50aXR5
KTsKLSAgICBtX3NjcmlwdFRhZ1NyY0F0dHJWYWx1ZSA9IFN0cmluZygpOwotICAgIG1fcGVuZGlu
Z1NyYy5jbGVhcigpOwotICAgIG1fY3VycmVudFByZXBlbmRpbmdTcmMgPSAwOwotICAgIG1fbm9N
b3JlRGF0YSA9IGZhbHNlOwotICAgIG1fYnJva2VuQ29tbWVudHMgPSBmYWxzZTsKLSAgICBtX2Jy
b2tlblNlcnZlciA9IGZhbHNlOwotICAgIG1fbGluZU51bWJlciA9IDA7Ci0gICAgbV9jdXJyZW50
U2NyaXB0VGFnU3RhcnRMaW5lTnVtYmVyID0gMDsKLSAgICBtX2N1cnJlbnRUYWdTdGFydExpbmVO
dW1iZXIgPSAwOwotICAgIG1fc3RhdGUuc2V0Rm9yY2VTeW5jaHJvbm91cyhmYWxzZSk7Ci0KLSAg
ICBQYWdlKiBwYWdlID0gZG9jdW1lbnQoKS0+cGFnZSgpOwotICAgIGlmIChwYWdlICYmIHBhZ2Ut
Pmhhc0N1c3RvbUhUTUxUb2tlbml6ZXJUaW1lRGVsYXkoKSkKLSAgICAgICAgbV90b2tlbml6ZXJU
aW1lRGVsYXkgPSBwYWdlLT5jdXN0b21IVE1MVG9rZW5pemVyVGltZURlbGF5KCk7Ci0gICAgZWxz
ZQotICAgICAgICBtX3Rva2VuaXplclRpbWVEZWxheSA9IGRlZmF1bHRUb2tlbml6ZXJUaW1lRGVs
YXk7Ci0KLSAgICBpZiAocGFnZSAmJiBwYWdlLT5oYXNDdXN0b21IVE1MVG9rZW5pemVyQ2h1bmtT
aXplKCkpCi0gICAgICAgIG1fdG9rZW5pemVyQ2h1bmtTaXplID0gcGFnZS0+Y3VzdG9tSFRNTFRv
a2VuaXplckNodW5rU2l6ZSgpOwotICAgIGVsc2UKLSAgICAgICAgbV90b2tlbml6ZXJDaHVua1Np
emUgPSBkZWZhdWx0VG9rZW5pemVyQ2h1bmtTaXplOwotfQotCi12b2lkIExlZ2FjeUhUTUxEb2N1
bWVudFBhcnNlcjo6c2V0Rm9yY2VTeW5jaHJvbm91cyhib29sIGZvcmNlKQotewotICAgIG1fc3Rh
dGUuc2V0Rm9yY2VTeW5jaHJvbm91cyhmb3JjZSk7Ci19Ci0KLUxlZ2FjeUhUTUxEb2N1bWVudFBh
cnNlcjo6U3RhdGUgTGVnYWN5SFRNTERvY3VtZW50UGFyc2VyOjpwcm9jZXNzTGlzdGluZyhTZWdt
ZW50ZWRTdHJpbmcgbGlzdCwgU3RhdGUgc3RhdGUpCi17Ci0gICAgLy8gVGhpcyBmdW5jdGlvbiBh
ZGRzIHRoZSBsaXN0aW5nICdsaXN0JyBhcwotICAgIC8vIHByZWZvcm1hdHRlZCB0ZXh0LXRva2Vu
cyB0byB0aGUgdG9rZW4tY29sbGVjdGlvbgotICAgIHdoaWxlICghbGlzdC5pc0VtcHR5KCkpIHsK
LSAgICAgICAgaWYgKHN0YXRlLnNraXBMRigpKSB7Ci0gICAgICAgICAgICBzdGF0ZS5zZXRTa2lw
TEYoZmFsc2UpOwotICAgICAgICAgICAgaWYgKCpsaXN0ID09ICdcbicpIHsKLSAgICAgICAgICAg
ICAgICBsaXN0LmFkdmFuY2UoKTsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGNoZWNrQnVmZmVyKCk7Ci0KLSAgICAgICAgaWYg
KCpsaXN0ID09ICdcbicgfHwgKmxpc3QgPT0gJ1xyJykgewotICAgICAgICAgICAgaWYgKHN0YXRl
LmRpc2NhcmRMRigpKQotICAgICAgICAgICAgICAgIC8vIElnbm9yZSB0aGlzIExGCi0gICAgICAg
ICAgICAgICAgc3RhdGUuc2V0RGlzY2FyZExGKGZhbHNlKTsgLy8gV2UgaGF2ZSBkaXNjYXJkZWQg
MSBMRgotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICptX2Rlc3QrKyA9ICdcbic7
Ci0KLSAgICAgICAgICAgIC8qIENoZWNrIGZvciBNUy1ET1MgQ1JMRiBzZXF1ZW5jZSAqLwotICAg
ICAgICAgICAgaWYgKCpsaXN0ID09ICdccicpCi0gICAgICAgICAgICAgICAgc3RhdGUuc2V0U2tp
cExGKHRydWUpOwotCi0gICAgICAgICAgICBsaXN0LmFkdmFuY2UoKTsKLSAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgIHN0YXRlLnNldERpc2NhcmRMRihmYWxzZSk7Ci0gICAgICAgICAgICAq
bV9kZXN0KysgPSAqbGlzdDsKLSAgICAgICAgICAgIGxpc3QuYWR2YW5jZSgpOwotICAgICAgICB9
Ci0gICAgfQotCi0gICAgcmV0dXJuIHN0YXRlOwotfQotCi1MZWdhY3lIVE1MRG9jdW1lbnRQYXJz
ZXI6OlN0YXRlIExlZ2FjeUhUTUxEb2N1bWVudFBhcnNlcjo6cGFyc2VOb25IVE1MVGV4dChTZWdt
ZW50ZWRTdHJpbmcmIHNyYywgU3RhdGUgc3RhdGUpCi17Ci0gICAgQVNTRVJUKHN0YXRlLmluVGV4
dEFyZWEoKSB8fCBzdGF0ZS5pblRpdGxlKCkgfHwgc3RhdGUuaW5JRnJhbWUoKSB8fCAhc3RhdGUu
aGFzRW50aXR5U3RhdGUoKSk7Ci0gICAgQVNTRVJUKCFzdGF0ZS5oYXNUYWdTdGF0ZSgpKTsKLSAg
ICBBU1NFUlQoc3RhdGUuaW5YbXAoKSArIHN0YXRlLmluVGV4dEFyZWEoKSArIHN0YXRlLmluVGl0
bGUoKSArIHN0YXRlLmluU3R5bGUoKSArIHN0YXRlLmluU2NyaXB0KCkgKyBzdGF0ZS5pbklGcmFt
ZSgpID09IDEpOwotICAgIGlmIChzdGF0ZS5pblNjcmlwdCgpICYmICFtX2N1cnJlbnRTY3JpcHRU
YWdTdGFydExpbmVOdW1iZXIpCi0gICAgICAgIG1fY3VycmVudFNjcmlwdFRhZ1N0YXJ0TGluZU51
bWJlciA9IG1fbGluZU51bWJlcjsKLQotICAgIGlmIChzdGF0ZS5pbkNvbW1lbnQoKSkKLSAgICAg
ICAgc3RhdGUgPSBwYXJzZUNvbW1lbnQoc3JjLCBzdGF0ZSk7Ci0KLSAgICBpbnQgbGFzdERlY29k
ZWRFbnRpdHlQb3NpdGlvbiA9IC0xOwotICAgIHdoaWxlICghc3JjLmlzRW1wdHkoKSkgewotICAg
ICAgICBjaGVja1NjcmlwdEJ1ZmZlcigpOwotICAgICAgICBVQ2hhciBjaCA9ICpzcmM7Ci0KLSAg
ICAgICAgaWYgKCFtX3NjcmlwdENvZGVSZXN5bmMgJiYgIW1fYnJva2VuQ29tbWVudHMgJiYKLSAg
ICAgICAgICAgICFzdGF0ZS5pblhtcCgpICYmIGNoID09ICctJyAmJiBtX3NjcmlwdENvZGVTaXpl
ID49IDMgJiYgIXNyYy5lc2NhcGVkKCkgJiYKLSAgICAgICAgICAgIG1fc2NyaXB0Q29kZVttX3Nj
cmlwdENvZGVTaXplIC0gM10gPT0gJzwnICYmIG1fc2NyaXB0Q29kZVttX3NjcmlwdENvZGVTaXpl
IC0gMl0gPT0gJyEnICYmIG1fc2NyaXB0Q29kZVttX3NjcmlwdENvZGVTaXplIC0gMV0gPT0gJy0n
ICYmCi0gICAgICAgICAgICAobGFzdERlY29kZWRFbnRpdHlQb3NpdGlvbiA8IG1fc2NyaXB0Q29k
ZVNpemUgLSAzKSkgewotICAgICAgICAgICAgc3RhdGUuc2V0SW5Db21tZW50KHRydWUpOwotICAg
ICAgICAgICAgc3RhdGUgPSBwYXJzZUNvbW1lbnQoc3JjLCBzdGF0ZSk7Ci0gICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgfQotICAgICAgICBpZiAobV9zY3JpcHRDb2RlUmVzeW5jICYmICF0
cXVvdGUgJiYgY2ggPT0gJz4nKSB7Ci0gICAgICAgICAgICBzcmMuYWR2YW5jZVBhc3ROb25OZXds
aW5lKCk7Ci0gICAgICAgICAgICBtX3NjcmlwdENvZGVTaXplID0gbV9zY3JpcHRDb2RlUmVzeW5j
IC0gMTsKLSAgICAgICAgICAgIG1fc2NyaXB0Q29kZVJlc3luYyA9IDA7Ci0gICAgICAgICAgICBt
X3NjcmlwdENvZGVbbV9zY3JpcHRDb2RlU2l6ZV0gPSBtX3NjcmlwdENvZGVbbV9zY3JpcHRDb2Rl
U2l6ZSArIDFdID0gMDsKLSAgICAgICAgICAgIGlmIChzdGF0ZS5pblNjcmlwdCgpKQotICAgICAg
ICAgICAgICAgIHN0YXRlID0gc2NyaXB0SGFuZGxlcihzdGF0ZSk7Ci0gICAgICAgICAgICBlbHNl
IHsKLSAgICAgICAgICAgICAgICBzdGF0ZSA9IHByb2Nlc3NMaXN0aW5nKFNlZ21lbnRlZFN0cmlu
ZyhTdHJpbmcobV9zY3JpcHRDb2RlLCBtX3NjcmlwdENvZGVTaXplKSksIHN0YXRlKTsKLSAgICAg
ICAgICAgICAgICBwcm9jZXNzVG9rZW4oKTsKLSAgICAgICAgICAgICAgICBpZiAoc3RhdGUuaW5T
dHlsZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1fY3VycmVudFRva2VuLnRhZ05hbWUgPSBz
dHlsZVRhZy5sb2NhbE5hbWUoKTsKLSAgICAgICAgICAgICAgICAgICAgbV9jdXJyZW50VG9rZW4u
YmVnaW5UYWcgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN0YXRlLmluVGV4
dEFyZWEoKSkgewotICAgICAgICAgICAgICAgICAgICBtX2N1cnJlbnRUb2tlbi50YWdOYW1lID0g
dGV4dGFyZWFUYWcubG9jYWxOYW1lKCk7Ci0gICAgICAgICAgICAgICAgICAgIG1fY3VycmVudFRv
a2VuLmJlZ2luVGFnID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdGF0ZS5p
blRpdGxlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgbV9jdXJyZW50VG9rZW4udGFnTmFtZSA9
IHRpdGxlVGFnLmxvY2FsTmFtZSgpOwotICAgICAgICAgICAgICAgICAgICBtX2N1cnJlbnRUb2tl
bi5iZWdpblRhZyA9IGZhbHNlOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RhdGUuaW5Y
bXAoKSkgewotICAgICAgICAgICAgICAgICAgICBtX2N1cnJlbnRUb2tlbi50YWdOYW1lID0geG1w
VGFnLmxvY2FsTmFtZSgpOwotICAgICAgICAgICAgICAgICAgICBtX2N1cnJlbnRUb2tlbi5iZWdp
blRhZyA9IGZhbHNlOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RhdGUuaW5JRnJhbWUo
KSkgewotICAgICAgICAgICAgICAgICAgICBtX2N1cnJlbnRUb2tlbi50YWdOYW1lID0gaWZyYW1l
VGFnLmxvY2FsTmFtZSgpOwotICAgICAgICAgICAgICAgICAgICBtX2N1cnJlbnRUb2tlbi5iZWdp
blRhZyA9IGZhbHNlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBwcm9jZXNz
VG9rZW4oKTsKLSAgICAgICAgICAgICAgICBzdGF0ZS5zZXRJblN0eWxlKGZhbHNlKTsKLSAgICAg
ICAgICAgICAgICBzdGF0ZS5zZXRJblNjcmlwdChmYWxzZSk7Ci0gICAgICAgICAgICAgICAgc3Rh
dGUuc2V0SW5UZXh0QXJlYShmYWxzZSk7Ci0gICAgICAgICAgICAgICAgc3RhdGUuc2V0SW5UaXRs
ZShmYWxzZSk7Ci0gICAgICAgICAgICAgICAgc3RhdGUuc2V0SW5YbXAoZmFsc2UpOwotICAgICAg
ICAgICAgICAgIHN0YXRlLnNldEluSUZyYW1lKGZhbHNlKTsKLSAgICAgICAgICAgICAgICB0cXVv
dGUgPSBOb1F1b3RlOwotICAgICAgICAgICAgICAgIG1fc2NyaXB0Q29kZVNpemUgPSBtX3Njcmlw
dENvZGVSZXN5bmMgPSAwOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIHN0YXRl
OwotICAgICAgICB9Ci0gICAgICAgIC8vIHBvc3NpYmxlIGVuZCBvZiB0YWduYW1lLCBsZXRzIGNo
ZWNrLgotICAgICAgICBpZiAoIW1fc2NyaXB0Q29kZVJlc3luYyAmJiAhc3RhdGUuZXNjYXBlZCgp
ICYmICFzcmMuZXNjYXBlZCgpICYmIChjaCA9PSAnPicgfHwgY2ggPT0gJy8nIHx8IGlzQVNDSUlT
cGFjZShjaCkpICYmCi0gICAgICAgICAgICAgbV9zY3JpcHRDb2RlU2l6ZSA+PSBtX3NlYXJjaFN0
b3BwZXJMZW5ndGggJiYKLSAgICAgICAgICAgICB0YWdNYXRjaChtX3NlYXJjaFN0b3BwZXIsIG1f
c2NyaXB0Q29kZSArIG1fc2NyaXB0Q29kZVNpemUgLSBtX3NlYXJjaFN0b3BwZXJMZW5ndGgsIG1f
c2VhcmNoU3RvcHBlckxlbmd0aCkgJiYKLSAgICAgICAgICAgICAobGFzdERlY29kZWRFbnRpdHlQ
b3NpdGlvbiA8IG1fc2NyaXB0Q29kZVNpemUgLSBtX3NlYXJjaFN0b3BwZXJMZW5ndGgpKSB7Ci0g
ICAgICAgICAgICBtX3NjcmlwdENvZGVSZXN5bmMgPSBtX3NjcmlwdENvZGVTaXplLW1fc2VhcmNo
U3RvcHBlckxlbmd0aCsxOwotICAgICAgICAgICAgdHF1b3RlID0gTm9RdW90ZTsKLSAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIGlmIChtX3NjcmlwdENvZGVSZXN5bmMg
JiYgIXN0YXRlLmVzY2FwZWQoKSkgewotICAgICAgICAgICAgaWYgKGNoID09ICdcIicpCi0gICAg
ICAgICAgICAgICAgdHF1b3RlID0gKHRxdW90ZSA9PSBOb1F1b3RlKSA/IERvdWJsZVF1b3RlIDog
KCh0cXVvdGUgPT0gU2luZ2xlUXVvdGUpID8gU2luZ2xlUXVvdGUgOiBOb1F1b3RlKTsKLSAgICAg
ICAgICAgIGVsc2UgaWYgKGNoID09ICdcJycpCi0gICAgICAgICAgICAgICAgdHF1b3RlID0gKHRx
dW90ZSA9PSBOb1F1b3RlKSA/IFNpbmdsZVF1b3RlIDogKHRxdW90ZSA9PSBEb3VibGVRdW90ZSkg
PyBEb3VibGVRdW90ZSA6IE5vUXVvdGU7Ci0gICAgICAgICAgICBlbHNlIGlmICh0cXVvdGUgIT0g
Tm9RdW90ZSAmJiAoY2ggPT0gJ1xyJyB8fCBjaCA9PSAnXG4nKSkKLSAgICAgICAgICAgICAgICB0
cXVvdGUgPSBOb1F1b3RlOwotICAgICAgICB9Ci0gICAgICAgIHN0YXRlLnNldEVzY2FwZWQoIXN0
YXRlLmVzY2FwZWQoKSAmJiBjaCA9PSAnXFwnKTsKLSAgICAgICAgaWYgKCFtX3NjcmlwdENvZGVS
ZXN5bmMgJiYgKHN0YXRlLmluVGV4dEFyZWEoKSB8fCBzdGF0ZS5pblRpdGxlKCkgfHwgc3RhdGUu
aW5JRnJhbWUoKSkgJiYgIXNyYy5lc2NhcGVkKCkgJiYgY2ggPT0gJyYnKSB7Ci0gICAgICAgICAg
ICBVQ2hhciogc2NyaXB0Q29kZURlc3QgPSBtX3NjcmlwdENvZGUgKyBtX3NjcmlwdENvZGVTaXpl
OwotICAgICAgICAgICAgc3JjLmFkdmFuY2VQYXN0Tm9uTmV3bGluZSgpOwotICAgICAgICAgICAg
c3RhdGUgPSBwYXJzZUVudGl0eShzcmMsIHNjcmlwdENvZGVEZXN0LCBzdGF0ZSwgbV9jQnVmZmVy
UG9zLCB0cnVlLCBmYWxzZSk7Ci0gICAgICAgICAgICBpZiAoc2NyaXB0Q29kZURlc3QgPT0gbV9z
Y3JpcHRDb2RlICsgbV9zY3JpcHRDb2RlU2l6ZSkKLSAgICAgICAgICAgICAgICBsYXN0RGVjb2Rl
ZEVudGl0eVBvc2l0aW9uID0gbV9zY3JpcHRDb2RlU2l6ZTsKLSAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgICAgICBtX3NjcmlwdENvZGVTaXplID0gc2NyaXB0Q29kZURlc3QgLSBtX3Njcmlw
dENvZGU7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBtX3NjcmlwdENvZGVbbV9zY3Jp
cHRDb2RlU2l6ZSsrXSA9IGNoOwotICAgICAgICAgICAgc3JjLmFkdmFuY2UobV9saW5lTnVtYmVy
KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBzdGF0ZTsKLX0KLQotTGVnYWN5SFRN
TERvY3VtZW50UGFyc2VyOjpTdGF0ZSBMZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXI6OnNjcmlwdEhh
bmRsZXIoU3RhdGUgc3RhdGUpCi17Ci0gICAgLy8gV2UgYXJlIGluc2lkZSBhIDxzY3JpcHQ+Ci0g
ICAgYm9vbCBkb1NjcmlwdEV4ZWMgPSBmYWxzZTsKLSAgICBpbnQgc3RhcnRMaW5lID0gbV9jdXJy
ZW50U2NyaXB0VGFnU3RhcnRMaW5lTnVtYmVyICsgMTsgLy8gU2NyaXB0IGxpbmUgbnVtYmVycyBh
cmUgMSBiYXNlZCwgSFRNTFRva2VuemllciBsaW5lIG51bWJlcnMgYXJlIDAgYmFzZWQKLQotICAg
IC8vIFJlc2V0IG1fY3VycmVudFNjcmlwdFRhZ1N0YXJ0TGluZU51bWJlciB0byBpbmRpY2F0ZSB0
aGF0IHdlJ3ZlIGZpbmlzaGVkIHBhcnNpbmcgdGhlIGN1cnJlbnQgc2NyaXB0IGVsZW1lbnQKLSAg
ICBtX2N1cnJlbnRTY3JpcHRUYWdTdGFydExpbmVOdW1iZXIgPSAwOwotCi0gICAgLy8gKEJ1Z3pp
bGxhIDM4MzcpIFNjcmlwdHMgZm9sbG93aW5nIGEgZnJhbWVzZXQgZWxlbWVudCBzaG91bGQgbm90
IGV4ZWN1dGUgb3IsCi0gICAgLy8gaW4gdGhlIGNhc2Ugb2YgZXh0ZXJuIHNjcmlwdHMsIGV2ZW4g
bG9hZC4KLSAgICBib29sIGZvbGxvd2luZ0ZyYW1lc2V0ID0gKGRvY3VtZW50KCktPmJvZHkoKSAm
JiBkb2N1bWVudCgpLT5ib2R5KCktPmhhc1RhZ05hbWUoZnJhbWVzZXRUYWcpKTsKLQotICAgIENh
Y2hlZFNjcmlwdCogY3MgPSAwOwotICAgIC8vIGRvbid0IGxvYWQgZXh0ZXJuYWwgc2NyaXB0cyBm
b3Igc3RhbmRhbG9uZSBkb2N1bWVudHMgKGZvciBub3cpCi0gICAgaWYgKCFpblZpZXdTb3VyY2VN
b2RlKCkpIHsKLSAgICAgICAgaWYgKCFtX3NjcmlwdFRhZ1NyY0F0dHJWYWx1ZS5pc0VtcHR5KCkg
JiYgZG9jdW1lbnQoKS0+ZnJhbWUoKSkgewotICAgICAgICAgICAgLy8gZm9yZ2V0IHdoYXQgd2Ug
anVzdCBnb3Q7IGxvYWQgZnJvbSBzcmMgdXJsIGluc3RlYWQKLSAgICAgICAgICAgIGlmICghbV90
cmVlQnVpbGRlci0+c2tpcE1vZGUoKSAmJiAhZm9sbG93aW5nRnJhbWVzZXQpIHsKLSAgICAgICAg
ICAgICAgICAvLyBUaGUgcGFyc2VyIG1pZ2h0IGhhdmUgYmVlbiBzdG9wcGVkIGJ5IGZvciBleGFt
cGxlIGEgd2luZG93LmNsb3NlIGNhbGwgaW4gYW4gZWFybGllciBzY3JpcHQuCi0gICAgICAgICAg
ICAgICAgLy8gSWYgc28sIHdlIGRvbid0IHdhbnQgdG8gbG9hZCBzY3JpcHRzLgotICAgICAgICAg
ICAgICAgIGlmICghbV9wYXJzZXJTdG9wcGVkICYmIG1fc2NyaXB0Tm9kZS0+ZGlzcGF0Y2hCZWZv
cmVMb2FkRXZlbnQobV9zY3JpcHRUYWdTcmNBdHRyVmFsdWUpICYmCi0gICAgICAgICAgICAgICAg
ICAgIChjcyA9IGRvY3VtZW50KCktPmRvY0xvYWRlcigpLT5yZXF1ZXN0U2NyaXB0KG1fc2NyaXB0
VGFnU3JjQXR0clZhbHVlLCBtX3NjcmlwdFRhZ0NoYXJzZXRBdHRyVmFsdWUpKSkKLSAgICAgICAg
ICAgICAgICAgICAgbV9wZW5kaW5nU2NyaXB0cy5hcHBlbmQoY3MpOwotICAgICAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgbV9zY3JpcHROb2RlID0gMDsKLSAgICAgICAgICAg
IH0gZWxzZQotICAgICAgICAgICAgICAgIG1fc2NyaXB0Tm9kZSA9IDA7Ci0gICAgICAgICAgICBt
X3NjcmlwdFRhZ1NyY0F0dHJWYWx1ZSA9IFN0cmluZygpOwotICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgLy8gUGFyc2UgbV9zY3JpcHRDb2RlIGNvbnRhaW5pbmcgPHNjcmlwdD4gaW5mbwot
ICAgICAgICAgICAgZG9TY3JpcHRFeGVjID0gbV9zY3JpcHROb2RlLT5zaG91bGRFeGVjdXRlQXNK
YXZhU2NyaXB0KCk7Ci0jaWYgRU5BQkxFKFhIVE1MTVApCi0gICAgICAgICAgICBpZiAoIWRvU2Ny
aXB0RXhlYykKLSAgICAgICAgICAgICAgICBkb2N1bWVudCgpLT5zZXRTaG91bGRQcm9jZXNzTm9z
Y3JpcHRFbGVtZW50KHRydWUpOwotI2VuZGlmCi0gICAgICAgICAgICBtX3NjcmlwdE5vZGUgPSAw
OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgc3RhdGUgPSBwcm9jZXNzTGlzdGluZyhTZWdtZW50
ZWRTdHJpbmcoU3RyaW5nKG1fc2NyaXB0Q29kZSwgbV9zY3JpcHRDb2RlU2l6ZSkpLCBzdGF0ZSk7
Ci0gICAgUmVmUHRyPE5vZGU+IG5vZGUgPSBwcm9jZXNzVG9rZW4oKTsKLQotICAgIGlmIChub2Rl
ICYmIG1fc2NyaXB0aW5nUGVybWlzc2lvbiA9PSBGcmFnbWVudFNjcmlwdGluZ05vdEFsbG93ZWQp
IHsKLSAgICAgICAgRXhjZXB0aW9uQ29kZSBlYzsKLSAgICAgICAgbm9kZS0+cmVtb3ZlKGVjKTsK
LSAgICAgICAgbm9kZSA9IDA7Ci0gICAgfQotCi0gICAgU3RyaW5nIHNjcmlwdFN0cmluZyA9IG5v
ZGUgPyBub2RlLT50ZXh0Q29udGVudCgpIDogIiI7Ci0gICAgbV9jdXJyZW50VG9rZW4udGFnTmFt
ZSA9IHNjcmlwdFRhZy5sb2NhbE5hbWUoKTsKLSAgICBtX2N1cnJlbnRUb2tlbi5iZWdpblRhZyA9
IGZhbHNlOwotICAgIHByb2Nlc3NUb2tlbigpOwotCi0gICAgc3RhdGUuc2V0SW5TY3JpcHQoZmFs
c2UpOwotICAgIG1fc2NyaXB0Q29kZVNpemUgPSBtX3NjcmlwdENvZGVSZXN5bmMgPSAwOwotCi0g
ICAgLy8gRklYTUU6IFRoZSBzY3JpcHQgc2hvdWxkIGJlIHN5bnRheCBoaWdobGlnaHRlZC4KLSAg
ICBpZiAoaW5WaWV3U291cmNlTW9kZSgpKQotICAgICAgICByZXR1cm4gc3RhdGU7Ci0KLSAgICBT
ZWdtZW50ZWRTdHJpbmcqIHNhdmVkUHJlcGVuZGluZ1NyYyA9IG1fY3VycmVudFByZXBlbmRpbmdT
cmM7Ci0gICAgU2VnbWVudGVkU3RyaW5nIHByZXBlbmRpbmdTcmM7Ci0gICAgbV9jdXJyZW50UHJl
cGVuZGluZ1NyYyA9ICZwcmVwZW5kaW5nU3JjOwotCi0gICAgaWYgKCFtX3RyZWVCdWlsZGVyLT5z
a2lwTW9kZSgpICYmICFmb2xsb3dpbmdGcmFtZXNldCkgewotICAgICAgICBpZiAoY3MpIHsKLSAg
ICAgICAgICAgIGlmIChzYXZlZFByZXBlbmRpbmdTcmMpCi0gICAgICAgICAgICAgICAgc2F2ZWRQ
cmVwZW5kaW5nU3JjLT5hcHBlbmQobV9zcmMpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgICAgIG1fcGVuZGluZ1NyYy5wcmVwZW5kKG1fc3JjKTsKLSAgICAgICAgICAgIHNldFNyYyhT
ZWdtZW50ZWRTdHJpbmcoKSk7Ci0KLSAgICAgICAgICAgIC8vIHRoZSByZWYoKSBjYWxsIGJlbG93
IG1heSBjYWxsIG5vdGlmeUZpbmlzaGVkIGlmIHRoZSBzY3JpcHQgaXMgYWxyZWFkeSBpbiBjYWNo
ZSwKLSAgICAgICAgICAgIC8vIGFuZCB0aGF0IG11Y2tzIHdpdGggdGhlIHN0YXRlIGRpcmVjdGx5
LCBzbyB3ZSBtdXN0IHdyaXRlIGl0IGJhY2sgdG8gdGhlIG9iamVjdC4KLSAgICAgICAgICAgIG1f
c3RhdGUgPSBzdGF0ZTsKLSAgICAgICAgICAgIGJvb2wgc2F2ZWRSZXF1ZXN0aW5nU2NyaXB0ID0g
bV9yZXF1ZXN0aW5nU2NyaXB0OwotICAgICAgICAgICAgbV9yZXF1ZXN0aW5nU2NyaXB0ID0gdHJ1
ZTsKLSAgICAgICAgICAgIGNzLT5hZGRDbGllbnQodGhpcyk7Ci0gICAgICAgICAgICBtX3JlcXVl
c3RpbmdTY3JpcHQgPSBzYXZlZFJlcXVlc3RpbmdTY3JpcHQ7Ci0gICAgICAgICAgICBzdGF0ZSA9
IG1fc3RhdGU7Ci0gICAgICAgICAgICAvLyB3aWxsIGJlIDAgaWYgc2NyaXB0IHdhcyBhbHJlYWR5
IGxvYWRlZCBhbmQgcmVmKCkgZXhlY3V0ZWQgaXQKLSAgICAgICAgICAgIGlmICghbV9wZW5kaW5n
U2NyaXB0cy5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgc3RhdGUuc2V0TG9hZGluZ0V4dFNj
cmlwdCh0cnVlKTsKLSAgICAgICAgfSBlbHNlIGlmICghbV9mcmFnbWVudCAmJiBkb1NjcmlwdEV4
ZWMpIHsKLSAgICAgICAgICAgIGlmICghbV9leGVjdXRpbmdTY3JpcHQpCi0gICAgICAgICAgICAg
ICAgbV9wZW5kaW5nU3JjLnByZXBlbmQobV9zcmMpOwotICAgICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgICAgIHByZXBlbmRpbmdTcmMgPSBtX3NyYzsKLSAgICAgICAgICAgIHNldFNyYyhTZWdt
ZW50ZWRTdHJpbmcoKSk7Ci0gICAgICAgICAgICBzdGF0ZSA9IHNjcmlwdEV4ZWN1dGlvbihTY3Jp
cHRTb3VyY2VDb2RlKHNjcmlwdFN0cmluZywgZG9jdW1lbnQoKS0+ZnJhbWUoKSA/IGRvY3VtZW50
KCktPmZyYW1lKCktPmRvY3VtZW50KCktPnVybCgpIDogS1VSTCgpLCBzdGFydExpbmUpLCBzdGF0
ZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoIW1fZXhlY3V0aW5nU2NyaXB0ICYmICFz
dGF0ZS5sb2FkaW5nRXh0U2NyaXB0KCkpIHsKLSAgICAgICAgbV9zcmMuYXBwZW5kKG1fcGVuZGlu
Z1NyYyk7Ci0gICAgICAgIG1fcGVuZGluZ1NyYy5jbGVhcigpOwotICAgIH0gZWxzZSBpZiAoIXBy
ZXBlbmRpbmdTcmMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIC8vIHJlc3RvcmUgZmlyc3Qgc28gdGhh
dCB0aGUgd3JpdGUgYXBwZW5kcyBpbiB0aGUgcmlnaHQgcGxhY2UKLSAgICAgICAgLy8gKGRvZXMg
bm90IGh1cnQgdG8gZG8gaXQgYWdhaW4gYmVsb3cpCi0gICAgICAgIG1fY3VycmVudFByZXBlbmRp
bmdTcmMgPSBzYXZlZFByZXBlbmRpbmdTcmM7Ci0KLSAgICAgICAgLy8gd2UgbmVlZCB0byBkbyB0
aGlzIHNsaWdodGx5IG1vZGlmaWVkIGJpdCBvZiBvbmUgb2YgdGhlIHdyaXRlKCkgY2FzZXMKLSAg
ICAgICAgLy8gYmVjYXVzZSB3ZSB3YW50IHRvIHByZXBlbmQgdG8gbV9wZW5kaW5nU3JjIHJhdGhl
ciB0aGFuIGFwcGVuZGluZwotICAgICAgICAvLyBpZiB0aGVyZSdzIG5vIHByZXZpb3VzIHByZXBl
bmRpbmdTcmMKLSAgICAgICAgaWYgKCFtX3BlbmRpbmdTY3JpcHRzLmlzRW1wdHkoKSkgewotICAg
ICAgICAgICAgaWYgKG1fY3VycmVudFByZXBlbmRpbmdTcmMpCi0gICAgICAgICAgICAgICAgbV9j
dXJyZW50UHJlcGVuZGluZ1NyYy0+YXBwZW5kKHByZXBlbmRpbmdTcmMpOwotICAgICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgICAgIG1fcGVuZGluZ1NyYy5wcmVwZW5kKHByZXBlbmRpbmdTcmMp
OwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbV9zdGF0ZSA9IHN0YXRlOwotICAgICAg
ICAgICAgd3JpdGUocHJlcGVuZGluZ1NyYywgZmFsc2UpOwotICAgICAgICAgICAgc3RhdGUgPSBt
X3N0YXRlOwotICAgICAgICB9Ci0gICAgfQotCi0jaWYgUFJFTE9BRF9TQ0FOTkVSX0VOQUJMRUQK
LSAgICBpZiAoIW1fcGVuZGluZ1NjcmlwdHMuaXNFbXB0eSgpICYmICFtX2V4ZWN1dGluZ1Njcmlw
dCkgewotICAgICAgICBpZiAoIW1fcHJlbG9hZFNjYW5uZXIpCi0gICAgICAgICAgICBtX3ByZWxv
YWRTY2FubmVyLnNldChuZXcgTGVnYWN5UHJlbG9hZFNjYW5uZXIoZG9jdW1lbnQoKSkpOwotICAg
ICAgICBpZiAoIW1fcHJlbG9hZFNjYW5uZXItPmluUHJvZ3Jlc3MoKSkgewotICAgICAgICAgICAg
bV9wcmVsb2FkU2Nhbm5lci0+YmVnaW4oKTsKLSAgICAgICAgICAgIG1fcHJlbG9hZFNjYW5uZXIt
PndyaXRlKG1fcGVuZGluZ1NyYyk7Ci0gICAgICAgIH0KLSAgICB9Ci0jZW5kaWYKLSAgICBtX2N1
cnJlbnRQcmVwZW5kaW5nU3JjID0gc2F2ZWRQcmVwZW5kaW5nU3JjOwotCi0gICAgcmV0dXJuIHN0
YXRlOwotfQotCi1MZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXI6OlN0YXRlIExlZ2FjeUhUTUxEb2N1
bWVudFBhcnNlcjo6c2NyaXB0RXhlY3V0aW9uKGNvbnN0IFNjcmlwdFNvdXJjZUNvZGUmIHNvdXJj
ZUNvZGUsIFN0YXRlIHN0YXRlKQotewotICAgIGlmIChtX2ZyYWdtZW50IHx8ICFkb2N1bWVudCgp
LT5mcmFtZSgpKQotICAgICAgICByZXR1cm4gc3RhdGU7Ci0gICAgbV9leGVjdXRpbmdTY3JpcHQr
KzsKLQotICAgIFNlZ21lbnRlZFN0cmluZyogc2F2ZWRQcmVwZW5kaW5nU3JjID0gbV9jdXJyZW50
UHJlcGVuZGluZ1NyYzsKLSAgICBTZWdtZW50ZWRTdHJpbmcgcHJlcGVuZGluZ1NyYzsKLSAgICBt
X2N1cnJlbnRQcmVwZW5kaW5nU3JjID0gJnByZXBlbmRpbmdTcmM7Ci0KLSAgICBtX3N0YXRlID0g
c3RhdGU7Ci0gICAgZG9jdW1lbnQoKS0+ZnJhbWUoKS0+c2NyaXB0KCktPmV4ZWN1dGVTY3JpcHQo
c291cmNlQ29kZSk7Ci0gICAgc3RhdGUgPSBtX3N0YXRlOwotCi0gICAgc3RhdGUuc2V0QWxsb3dZ
aWVsZCh0cnVlKTsKLQotICAgIG1fZXhlY3V0aW5nU2NyaXB0LS07Ci0KLSAgICBpZiAoIW1fZXhl
Y3V0aW5nU2NyaXB0ICYmICFzdGF0ZS5sb2FkaW5nRXh0U2NyaXB0KCkpIHsKLSAgICAgICAgbV9w
ZW5kaW5nU3JjLnByZXBlbmQocHJlcGVuZGluZ1NyYyk7Ci0gICAgICAgIG1fc3JjLmFwcGVuZCht
X3BlbmRpbmdTcmMpOwotICAgICAgICBtX3BlbmRpbmdTcmMuY2xlYXIoKTsKLSAgICB9IGVsc2Ug
aWYgKCFwcmVwZW5kaW5nU3JjLmlzRW1wdHkoKSkgewotICAgICAgICAvLyByZXN0b3JlIGZpcnN0
IHNvIHRoYXQgdGhlIHdyaXRlIGFwcGVuZHMgaW4gdGhlIHJpZ2h0IHBsYWNlCi0gICAgICAgIC8v
IChkb2VzIG5vdCBodXJ0IHRvIGRvIGl0IGFnYWluIGJlbG93KQotICAgICAgICBtX2N1cnJlbnRQ
cmVwZW5kaW5nU3JjID0gc2F2ZWRQcmVwZW5kaW5nU3JjOwotCi0gICAgICAgIC8vIHdlIG5lZWQg
dG8gZG8gdGhpcyBzbGlnaHRseSBtb2RpZmllZCBiaXQgb2Ygb25lIG9mIHRoZSB3cml0ZSgpIGNh
c2VzCi0gICAgICAgIC8vIGJlY2F1c2Ugd2Ugd2FudCB0byBwcmVwZW5kIHRvIG1fcGVuZGluZ1Ny
YyByYXRoZXIgdGhhbiBhcHBlbmRpbmcKLSAgICAgICAgLy8gaWYgdGhlcmUncyBubyBwcmV2aW91
cyBwcmVwZW5kaW5nU3JjCi0gICAgICAgIGlmICghbV9wZW5kaW5nU2NyaXB0cy5pc0VtcHR5KCkp
IHsKLSAgICAgICAgICAgIGlmIChtX2N1cnJlbnRQcmVwZW5kaW5nU3JjKQotICAgICAgICAgICAg
ICAgIG1fY3VycmVudFByZXBlbmRpbmdTcmMtPmFwcGVuZChwcmVwZW5kaW5nU3JjKTsKLSAgICAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBtX3BlbmRpbmdTcmMucHJlcGVuZChwcmVwZW5k
aW5nU3JjKTsKLQotI2lmIFBSRUxPQURfU0NBTk5FUl9FTkFCTEVECi0gICAgICAgICAgICAvLyBX
ZSBhcmUgc3R1Y2sgd2FpdGluZyBmb3IgYW5vdGhlciBzY3JpcHQuIExldHMgY2hlY2sgdGhlIHNv
dXJjZSB0aGF0Ci0gICAgICAgICAgICAvLyB3YXMganVzdCBkb2N1bWVudC53cml0ZSgpbiBmb3Ig
YW55dGhpbmcgdG8gbG9hZC4KLSAgICAgICAgICAgIExlZ2FjeVByZWxvYWRTY2FubmVyIGRvY3Vt
ZW50V3JpdGVQcmVsb2FkU2Nhbm5lcihkb2N1bWVudCgpKTsKLSAgICAgICAgICAgIGRvY3VtZW50
V3JpdGVQcmVsb2FkU2Nhbm5lci5iZWdpbigpOwotICAgICAgICAgICAgZG9jdW1lbnRXcml0ZVBy
ZWxvYWRTY2FubmVyLndyaXRlKHByZXBlbmRpbmdTcmMpOwotICAgICAgICAgICAgZG9jdW1lbnRX
cml0ZVByZWxvYWRTY2FubmVyLmVuZCgpOwotI2VuZGlmCi0gICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICBtX3N0YXRlID0gc3RhdGU7Ci0gICAgICAgICAgICB3cml0ZShwcmVwZW5kaW5nU3Jj
LCBmYWxzZSk7Ci0gICAgICAgICAgICBzdGF0ZSA9IG1fc3RhdGU7Ci0gICAgICAgIH0KLSAgICB9
Ci0KLSAgICBtX2N1cnJlbnRQcmVwZW5kaW5nU3JjID0gc2F2ZWRQcmVwZW5kaW5nU3JjOwotCi0g
ICAgcmV0dXJuIHN0YXRlOwotfQotCi1MZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXI6OlN0YXRlIExl
Z2FjeUhUTUxEb2N1bWVudFBhcnNlcjo6cGFyc2VDb21tZW50KFNlZ21lbnRlZFN0cmluZyYgc3Jj
LCBTdGF0ZSBzdGF0ZSkKLXsKLSAgICAvLyBGSVhNRTogV2h5IGRvZXMgdGhpcyBjb2RlIGV2ZW4g
cnVuIGZvciBjb21tZW50cyBpbnNpZGUgPHNjcmlwdD4gYW5kIDxzdHlsZT4/IFRoaXMgc2VlbXMg
Ym9ndXMuCi0gICAgY2hlY2tTY3JpcHRCdWZmZXIoc3JjLmxlbmd0aCgpKTsKLSAgICB3aGlsZSAo
IXNyYy5pc0VtcHR5KCkpIHsKLSAgICAgICAgVUNoYXIgY2ggPSAqc3JjOwotICAgICAgICBtX3Nj
cmlwdENvZGVbbV9zY3JpcHRDb2RlU2l6ZSsrXSA9IGNoOwotICAgICAgICBpZiAoY2ggPT0gJz4n
KSB7Ci0gICAgICAgICAgICBib29sIGhhbmRsZUJyb2tlbkNvbW1lbnRzID0gbV9icm9rZW5Db21t
ZW50cyAmJiAhKHN0YXRlLmluU2NyaXB0KCkgfHwgc3RhdGUuaW5TdHlsZSgpKTsKLSAgICAgICAg
ICAgIGludCBlbmRDaGFyc0NvdW50ID0gMTsgLy8gc3RhcnQgb2ZmIHdpdGggb25lIGZvciB0aGUg
Jz4nIGNoYXJhY3RlcgotICAgICAgICAgICAgaWYgKG1fc2NyaXB0Q29kZVNpemUgPiAyICYmIG1f
c2NyaXB0Q29kZVttX3NjcmlwdENvZGVTaXplLTNdID09ICctJyAmJiBtX3NjcmlwdENvZGVbbV9z
Y3JpcHRDb2RlU2l6ZS0yXSA9PSAnLScpIHsKLSAgICAgICAgICAgICAgICBlbmRDaGFyc0NvdW50
ID0gMzsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAobV9zY3JpcHRDb2RlU2l6ZSA+IDMgJiYgbV9z
Y3JpcHRDb2RlW21fc2NyaXB0Q29kZVNpemUtNF0gPT0gJy0nICYmIG1fc2NyaXB0Q29kZVttX3Nj
cmlwdENvZGVTaXplLTNdID09ICctJyAmJgotICAgICAgICAgICAgICAgIG1fc2NyaXB0Q29kZVtt
X3NjcmlwdENvZGVTaXplLTJdID09ICchJykgewotICAgICAgICAgICAgICAgIC8vIE90aGVyIGJy
b3dzZXJzIHdpbGwgYWNjZXB0IC0tIT4gYXMgYSBjbG9zZSBjb21tZW50LCBldmVuIHRob3VnaCBp
dCdzCi0gICAgICAgICAgICAgICAgLy8gbm90IHRlY2huaWNhbGx5IHZhbGlkLgotICAgICAgICAg
ICAgICAgIGVuZENoYXJzQ291bnQgPSA0OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYg
KGhhbmRsZUJyb2tlbkNvbW1lbnRzIHx8IGVuZENoYXJzQ291bnQgPiAxKSB7Ci0gICAgICAgICAg
ICAgICAgc3JjLmFkdmFuY2VQYXN0Tm9uTmV3bGluZSgpOwotICAgICAgICAgICAgICAgIGlmICgh
KHN0YXRlLmluVGl0bGUoKSB8fCBzdGF0ZS5pblNjcmlwdCgpIHx8IHN0YXRlLmluWG1wKCkgfHwg
c3RhdGUuaW5UZXh0QXJlYSgpIHx8IHN0YXRlLmluU3R5bGUoKSB8fCBzdGF0ZS5pbklGcmFtZSgp
KSkgewotICAgICAgICAgICAgICAgICAgICBjaGVja1NjcmlwdEJ1ZmZlcigpOwotICAgICAgICAg
ICAgICAgICAgICBtX3NjcmlwdENvZGVbbV9zY3JpcHRDb2RlU2l6ZV0gPSAwOwotICAgICAgICAg
ICAgICAgICAgICBtX3NjcmlwdENvZGVbbV9zY3JpcHRDb2RlU2l6ZSArIDFdID0gMDsKLSAgICAg
ICAgICAgICAgICAgICAgbV9jdXJyZW50VG9rZW4udGFnTmFtZSA9IGNvbW1lbnRBdG9tOwotICAg
ICAgICAgICAgICAgICAgICBtX2N1cnJlbnRUb2tlbi5iZWdpblRhZyA9IHRydWU7Ci0gICAgICAg
ICAgICAgICAgICAgIHN0YXRlID0gcHJvY2Vzc0xpc3RpbmcoU2VnbWVudGVkU3RyaW5nKFN0cmlu
ZyhtX3NjcmlwdENvZGUsIG1fc2NyaXB0Q29kZVNpemUgLSBlbmRDaGFyc0NvdW50KSksIHN0YXRl
KTsKLSAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc1Rva2VuKCk7Ci0gICAgICAgICAgICAgICAg
ICAgIG1fY3VycmVudFRva2VuLnRhZ05hbWUgPSBjb21tZW50QXRvbTsKLSAgICAgICAgICAgICAg
ICAgICAgbV9jdXJyZW50VG9rZW4uYmVnaW5UYWcgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAg
ICAgcHJvY2Vzc1Rva2VuKCk7Ci0gICAgICAgICAgICAgICAgICAgIG1fc2NyaXB0Q29kZVNpemUg
PSAwOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBzdGF0ZS5zZXRJbkNvbW1l
bnQoZmFsc2UpOwotICAgICAgICAgICAgICAgIHJldHVybiBzdGF0ZTsgLy8gRmluaXNoZWQgcGFy
c2luZyBjb21tZW50Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgc3JjLmFkdmFu
Y2UobV9saW5lTnVtYmVyKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gc3RhdGU7Ci19Ci0KLUxlZ2Fj
eUhUTUxEb2N1bWVudFBhcnNlcjo6U3RhdGUgTGVnYWN5SFRNTERvY3VtZW50UGFyc2VyOjpwYXJz
ZVNlcnZlcihTZWdtZW50ZWRTdHJpbmcmIHNyYywgU3RhdGUgc3RhdGUpCi17Ci0gICAgY2hlY2tT
Y3JpcHRCdWZmZXIoc3JjLmxlbmd0aCgpKTsKLSAgICB3aGlsZSAoIXNyYy5pc0VtcHR5KCkpIHsK
LSAgICAgICAgVUNoYXIgY2ggPSAqc3JjOwotICAgICAgICBtX3NjcmlwdENvZGVbbV9zY3JpcHRD
b2RlU2l6ZSsrXSA9IGNoOwotICAgICAgICBpZiAoY2ggPT0gJz4nICYmIG1fc2NyaXB0Q29kZVNp
emUgPiAxICYmIG1fc2NyaXB0Q29kZVttX3NjcmlwdENvZGVTaXplIC0gMl0gPT0gJyUnKSB7Ci0g
ICAgICAgICAgICBzcmMuYWR2YW5jZVBhc3ROb25OZXdsaW5lKCk7Ci0gICAgICAgICAgICBzdGF0
ZS5zZXRJblNlcnZlcihmYWxzZSk7Ci0gICAgICAgICAgICBtX3NjcmlwdENvZGVTaXplID0gMDsK
LSAgICAgICAgICAgIHJldHVybiBzdGF0ZTsgLy8gRmluaXNoZWQgcGFyc2luZyBzZXJ2ZXIgaW5j
bHVkZQotICAgICAgICB9Ci0gICAgICAgIHNyYy5hZHZhbmNlKG1fbGluZU51bWJlcik7Ci0gICAg
fQotICAgIHJldHVybiBzdGF0ZTsKLX0KLQotTGVnYWN5SFRNTERvY3VtZW50UGFyc2VyOjpTdGF0
ZSBMZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXI6OnBhcnNlUHJvY2Vzc2luZ0luc3RydWN0aW9uKFNl
Z21lbnRlZFN0cmluZyYgc3JjLCBTdGF0ZSBzdGF0ZSkKLXsKLSAgICBVQ2hhciBvbGRjaGFyID0g
MDsKLSAgICB3aGlsZSAoIXNyYy5pc0VtcHR5KCkpIHsKLSAgICAgICAgVUNoYXIgY2hiZWdpbiA9
ICpzcmM7Ci0gICAgICAgIGlmIChjaGJlZ2luID09ICdcJycpCi0gICAgICAgICAgICB0cXVvdGUg
PSB0cXVvdGUgPT0gU2luZ2xlUXVvdGUgPyBOb1F1b3RlIDogU2luZ2xlUXVvdGU7Ci0gICAgICAg
IGVsc2UgaWYgKGNoYmVnaW4gPT0gJ1wiJykKLSAgICAgICAgICAgIHRxdW90ZSA9IHRxdW90ZSA9
PSBEb3VibGVRdW90ZSA/IE5vUXVvdGUgOiBEb3VibGVRdW90ZTsKLSAgICAgICAgLy8gTG9vayBm
b3IgJz8+JwotICAgICAgICAvLyBTb21lIGNyYXBweSBzaXRlcyBvbWl0IHRoZSAiPyIgYmVmb3Jl
IGl0LCBzbwotICAgICAgICAvLyB3ZSBsb29rIGZvciBhbiB1bnF1b3RlZCAnPicgaW5zdGVhZC4g
KElFIGNvbXBhdGlibGUpCi0gICAgICAgIGVsc2UgaWYgKGNoYmVnaW4gPT0gJz4nICYmICghdHF1
b3RlIHx8IG9sZGNoYXIgPT0gJz8nKSkgewotICAgICAgICAgICAgLy8gV2UgZ290IGEgJz8+JyBz
ZXF1ZW5jZQotICAgICAgICAgICAgc3RhdGUuc2V0SW5Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24oZmFs
c2UpOwotICAgICAgICAgICAgc3JjLmFkdmFuY2VQYXN0Tm9uTmV3bGluZSgpOwotICAgICAgICAg
ICAgc3RhdGUuc2V0RGlzY2FyZExGKHRydWUpOwotICAgICAgICAgICAgcmV0dXJuIHN0YXRlOyAv
LyBGaW5pc2hlZCBwYXJzaW5nIGNvbW1lbnQhCi0gICAgICAgIH0KLSAgICAgICAgc3JjLmFkdmFu
Y2UobV9saW5lTnVtYmVyKTsKLSAgICAgICAgb2xkY2hhciA9IGNoYmVnaW47Ci0gICAgfQotCi0g
ICAgcmV0dXJuIHN0YXRlOwotfQotCi1MZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXI6OlN0YXRlIExl
Z2FjeUhUTUxEb2N1bWVudFBhcnNlcjo6cGFyc2VUZXh0KFNlZ21lbnRlZFN0cmluZyYgc3JjLCBT
dGF0ZSBzdGF0ZSkKLXsKLSAgICB3aGlsZSAoIXNyYy5pc0VtcHR5KCkpIHsKLSAgICAgICAgVUNo
YXIgY2MgPSAqc3JjOwotCi0gICAgICAgIGlmIChzdGF0ZS5za2lwTEYoKSkgewotICAgICAgICAg
ICAgc3RhdGUuc2V0U2tpcExGKGZhbHNlKTsKLSAgICAgICAgICAgIGlmIChjYyA9PSAnXG4nKSB7
Ci0gICAgICAgICAgICAgICAgc3JjLmFkdmFuY2VQYXN0TmV3bGluZShtX2xpbmVOdW1iZXIpOwot
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAg
ICAgICAgLy8gZG8gd2UgbmVlZCB0byBlbmxhcmdlIHRoZSBidWZmZXI/Ci0gICAgICAgIGNoZWNr
QnVmZmVyKCk7Ci0KLSAgICAgICAgaWYgKGNjID09ICdccicpIHsKLSAgICAgICAgICAgIHN0YXRl
LnNldFNraXBMRih0cnVlKTsKLSAgICAgICAgICAgICptX2Rlc3QrKyA9ICdcbic7Ci0gICAgICAg
IH0gZWxzZQotICAgICAgICAgICAgKm1fZGVzdCsrID0gY2M7Ci0gICAgICAgIHNyYy5hZHZhbmNl
KG1fbGluZU51bWJlcik7Ci0gICAgfQotCi0gICAgcmV0dXJuIHN0YXRlOwotfQotCi0KLUxlZ2Fj
eUhUTUxEb2N1bWVudFBhcnNlcjo6U3RhdGUgTGVnYWN5SFRNTERvY3VtZW50UGFyc2VyOjpwYXJz
ZUVudGl0eShTZWdtZW50ZWRTdHJpbmcmIHNyYywgVUNoYXIqJiBkZXN0LCBTdGF0ZSBzdGF0ZSwg
dW5zaWduZWQmIGNCdWZmZXJQb3MsIGJvb2wgc3RhcnQsIGJvb2wgcGFyc2luZ1RhZykKLXsKLSAg
ICBpZiAoc3RhcnQpIHsKLSAgICAgICAgY0J1ZmZlclBvcyA9IDA7Ci0gICAgICAgIHN0YXRlLnNl
dEVudGl0eVN0YXRlKFNlYXJjaEVudGl0eSk7Ci0gICAgICAgIEVudGl0eVVuaWNvZGVWYWx1ZSA9
IDA7Ci0gICAgfQotCi0gICAgd2hpbGUgKCFzcmMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIFVDaGFy
IGNjID0gKnNyYzsKLSAgICAgICAgc3dpdGNoIChzdGF0ZS5lbnRpdHlTdGF0ZSgpKSB7Ci0gICAg
ICAgIGNhc2UgTm9FbnRpdHk6Ci0gICAgICAgICAgICBBU1NFUlQoc3RhdGUuZW50aXR5U3RhdGUo
KSAhPSBOb0VudGl0eSk7Ci0gICAgICAgICAgICByZXR1cm4gc3RhdGU7Ci0KLSAgICAgICAgY2Fz
ZSBTZWFyY2hFbnRpdHk6Ci0gICAgICAgICAgICBpZiAoY2MgPT0gJyMnKSB7Ci0gICAgICAgICAg
ICAgICAgbV9jQnVmZmVyW2NCdWZmZXJQb3MrK10gPSBjYzsKLSAgICAgICAgICAgICAgICBzcmMu
YWR2YW5jZVBhc3ROb25OZXdsaW5lKCk7Ci0gICAgICAgICAgICAgICAgc3RhdGUuc2V0RW50aXR5
U3RhdGUoTnVtZXJpY1NlYXJjaCk7Ci0gICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAg
ICBzdGF0ZS5zZXRFbnRpdHlTdGF0ZShFbnRpdHlOYW1lKTsKLSAgICAgICAgICAgIGJyZWFrOwot
Ci0gICAgICAgIGNhc2UgTnVtZXJpY1NlYXJjaDoKLSAgICAgICAgICAgIGlmIChjYyA9PSAneCcg
fHwgY2MgPT0gJ1gnKSB7Ci0gICAgICAgICAgICAgICAgbV9jQnVmZmVyW2NCdWZmZXJQb3MrK10g
PSBjYzsKLSAgICAgICAgICAgICAgICBzcmMuYWR2YW5jZVBhc3ROb25OZXdsaW5lKCk7Ci0gICAg
ICAgICAgICAgICAgc3RhdGUuc2V0RW50aXR5U3RhdGUoSGV4YWRlY2ltYWwpOwotICAgICAgICAg
ICAgfSBlbHNlIGlmIChjYyA+PSAnMCcgJiYgY2MgPD0gJzknKQotICAgICAgICAgICAgICAgIHN0
YXRlLnNldEVudGl0eVN0YXRlKERlY2ltYWwpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgICAgIHN0YXRlLnNldEVudGl0eVN0YXRlKFNlYXJjaFNlbWljb2xvbik7Ci0gICAgICAgICAg
ICBicmVhazsKLQotICAgICAgICBjYXNlIEhleGFkZWNpbWFsOiB7Ci0gICAgICAgICAgICBpbnQg
bGwgPSBtaW4oc3JjLmxlbmd0aCgpLCAxMCAtIGNCdWZmZXJQb3MpOwotICAgICAgICAgICAgd2hp
bGUgKGxsLS0pIHsKLSAgICAgICAgICAgICAgICBjYyA9ICpzcmM7Ci0gICAgICAgICAgICAgICAg
aWYgKCEoKGNjID49ICcwJyAmJiBjYyA8PSAnOScpIHx8IChjYyA+PSAnYScgJiYgY2MgPD0gJ2Yn
KSB8fCAoY2MgPj0gJ0EnICYmIGNjIDw9ICdGJykpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHN0
YXRlLnNldEVudGl0eVN0YXRlKFNlYXJjaFNlbWljb2xvbik7Ci0gICAgICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpbnQgZGlnaXQ7Ci0g
ICAgICAgICAgICAgICAgaWYgKGNjIDwgJ0EnKQotICAgICAgICAgICAgICAgICAgICBkaWdpdCA9
IGNjIC0gJzAnOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgZGln
aXQgPSAoY2MgLSAnQScgKyAxMCkgJiAweEY7IC8vIGhhbmRsZSBib3RoIHVwcGVyIGFuZCBsb3dl
ciBjYXNlIHdpdGhvdXQgYSBicmFuY2gKLSAgICAgICAgICAgICAgICBFbnRpdHlVbmljb2RlVmFs
dWUgPSBFbnRpdHlVbmljb2RlVmFsdWUgKiAxNiArIGRpZ2l0OwotICAgICAgICAgICAgICAgIG1f
Y0J1ZmZlcltjQnVmZmVyUG9zKytdID0gY2M7Ci0gICAgICAgICAgICAgICAgc3JjLmFkdmFuY2VQ
YXN0Tm9uTmV3bGluZSgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGNCdWZmZXJQ
b3MgPT0gMTApCi0gICAgICAgICAgICAgICAgc3RhdGUuc2V0RW50aXR5U3RhdGUoU2VhcmNoU2Vt
aWNvbG9uKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgRGVj
aW1hbDoKLSAgICAgICAgewotICAgICAgICAgICAgaW50IGxsID0gbWluKHNyYy5sZW5ndGgoKSwg
OS1jQnVmZmVyUG9zKTsKLSAgICAgICAgICAgIHdoaWxlIChsbC0tKSB7Ci0gICAgICAgICAgICAg
ICAgY2MgPSAqc3JjOwotCi0gICAgICAgICAgICAgICAgaWYgKCEoY2MgPj0gJzAnICYmIGNjIDw9
ICc5JykpIHsKLSAgICAgICAgICAgICAgICAgICAgc3RhdGUuc2V0RW50aXR5U3RhdGUoU2VhcmNo
U2VtaWNvbG9uKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICAgICAgRW50aXR5VW5pY29kZVZhbHVlID0gRW50aXR5VW5pY29kZVZh
bHVlICogMTAgKyAoY2MgLSAnMCcpOwotICAgICAgICAgICAgICAgIG1fY0J1ZmZlcltjQnVmZmVy
UG9zKytdID0gY2M7Ci0gICAgICAgICAgICAgICAgc3JjLmFkdmFuY2VQYXN0Tm9uTmV3bGluZSgp
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGNCdWZmZXJQb3MgPT0gOSkKLSAgICAg
ICAgICAgICAgICBzdGF0ZS5zZXRFbnRpdHlTdGF0ZShTZWFyY2hTZW1pY29sb24pOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBFbnRpdHlOYW1lOgotICAgICAg
ICB7Ci0gICAgICAgICAgICBpbnQgbGwgPSBtaW4oc3JjLmxlbmd0aCgpLCA5LWNCdWZmZXJQb3Mp
OwotICAgICAgICAgICAgd2hpbGUgKGxsLS0pIHsKLSAgICAgICAgICAgICAgICBjYyA9ICpzcmM7
Ci0KLSAgICAgICAgICAgICAgICBpZiAoISgoY2MgPj0gJ2EnICYmIGNjIDw9ICd6JykgfHwgKGNj
ID49ICcwJyAmJiBjYyA8PSAnOScpIHx8IChjYyA+PSAnQScgJiYgY2MgPD0gJ1onKSkpIHsKLSAg
ICAgICAgICAgICAgICAgICAgc3RhdGUuc2V0RW50aXR5U3RhdGUoU2VhcmNoU2VtaWNvbG9uKTsK
LSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICAgICAgbV9jQnVmZmVyW2NCdWZmZXJQb3MrK10gPSBjYzsKLSAgICAgICAgICAgICAgICBz
cmMuYWR2YW5jZVBhc3ROb25OZXdsaW5lKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBp
ZiAoY0J1ZmZlclBvcyA9PSA5KQotICAgICAgICAgICAgICAgIHN0YXRlLnNldEVudGl0eVN0YXRl
KFNlYXJjaFNlbWljb2xvbik7Ci0gICAgICAgICAgICBpZiAoc3RhdGUuZW50aXR5U3RhdGUoKSA9
PSBTZWFyY2hTZW1pY29sb24pIHsKLSAgICAgICAgICAgICAgICBpZiAoY0J1ZmZlclBvcyA+IDEp
IHsKLSAgICAgICAgICAgICAgICAgICAgLy8gU2luY2UgdGhlIG1heGltdW0gbGVuZ3RoIG9mIGVu
dGl0eSBuYW1lIGlzIDksCi0gICAgICAgICAgICAgICAgICAgIC8vIHNvIGEgc2luZ2xlIGNoYXIg
YXJyYXkgd2hpY2ggaXMgYWxsb2NhdGVkIG9uCi0gICAgICAgICAgICAgICAgICAgIC8vIHRoZSBz
dGFjaywgaXRzIGxlbmd0aCBpcyAxMCwgc2hvdWxkIGJlIE9LLgotICAgICAgICAgICAgICAgICAg
ICAvLyBBbHNvIGlmIHdlIGhhdmUgYW4gaWxsZWdhbCBjaGFyYWN0ZXIsIHdlIHRyZWF0IGl0Ci0g
ICAgICAgICAgICAgICAgICAgIC8vIGFzIGlsbGVnYWwgZW50aXR5IG5hbWUuCi0gICAgICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIHRlc3RlZEVudGl0eU5hbWVMZW4gPSAwOwotICAgICAgICAgICAg
ICAgICAgICBjaGFyIHRtcEVudGl0eU5hbWVCdWZmZXJbMTBdOwotCi0gICAgICAgICAgICAgICAg
ICAgIEFTU0VSVChjQnVmZmVyUG9zIDwgMTApOwotICAgICAgICAgICAgICAgICAgICBmb3IgKDsg
dGVzdGVkRW50aXR5TmFtZUxlbiA8IGNCdWZmZXJQb3M7ICsrdGVzdGVkRW50aXR5TmFtZUxlbikg
ewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1fY0J1ZmZlclt0ZXN0ZWRFbnRpdHlOYW1l
TGVuXSA+IDB4N2UpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICB0bXBFbnRpdHlOYW1lQnVmZmVyW3Rlc3RlZEVudGl0eU5hbWVMZW5d
ID0gbV9jQnVmZmVyW3Rlc3RlZEVudGl0eU5hbWVMZW5dOwotICAgICAgICAgICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgICAgICAgICAgY29uc3QgRW50aXR5ICplOwotCi0gICAgICAgICAgICAg
ICAgICAgIGlmICh0ZXN0ZWRFbnRpdHlOYW1lTGVuID09IGNCdWZmZXJQb3MpCi0gICAgICAgICAg
ICAgICAgICAgICAgICBlID0gZmluZEVudGl0eSh0bXBFbnRpdHlOYW1lQnVmZmVyLCBjQnVmZmVy
UG9zKTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAg
ZSA9IDA7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKGUpCi0gICAgICAgICAgICAgICAgICAg
ICAgICBFbnRpdHlVbmljb2RlVmFsdWUgPSBlLT5jb2RlOwotCi0gICAgICAgICAgICAgICAgICAg
IC8vIGJlIElFIGNvbXBhdGlibGUKLSAgICAgICAgICAgICAgICAgICAgaWYgKHBhcnNpbmdUYWcg
JiYgRW50aXR5VW5pY29kZVZhbHVlID4gMjU1ICYmICpzcmMgIT0gJzsnKQotICAgICAgICAgICAg
ICAgICAgICAgICAgRW50aXR5VW5pY29kZVZhbHVlID0gMDsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIH0KLSAgICAgICAgY2FzZSBTZWFyY2hTZW1pY29sb246Ci0gICAgICAgICAgICAvLyBE
b24ndCBhbGxvdyB2YWx1ZXMgdGhhdCBhcmUgbW9yZSB0aGFuIDIxIGJpdHMuCi0gICAgICAgICAg
ICBpZiAoRW50aXR5VW5pY29kZVZhbHVlID4gMCAmJiBFbnRpdHlVbmljb2RlVmFsdWUgPD0gMHgx
MEZGRkYpIHsKLSAgICAgICAgICAgICAgICBpZiAoIWluVmlld1NvdXJjZU1vZGUoKSkgewotICAg
ICAgICAgICAgICAgICAgICBpZiAoKnNyYyA9PSAnOycpCi0gICAgICAgICAgICAgICAgICAgICAg
ICBzcmMuYWR2YW5jZVBhc3ROb25OZXdsaW5lKCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChF
bnRpdHlVbmljb2RlVmFsdWUgPD0gMHhGRkZGKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBj
aGVja0J1ZmZlcigpOwotICAgICAgICAgICAgICAgICAgICAgICAgc3JjLnB1c2goZml4VXBDaGFy
KEVudGl0eVVuaWNvZGVWYWx1ZSkpOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gQ29udmVydCB0byBVVEYtMTYsIHVzaW5nIHN1cnJvZ2F0
ZSBjb2RlIHBvaW50cy4KLSAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrQnVmZmVyKDIpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgc3JjLnB1c2goVTE2X0xFQUQoRW50aXR5VW5pY29kZVZh
bHVlKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzcmMucHVzaChVMTZfVFJBSUwoRW50aXR5
VW5pY29kZVZhbHVlKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGV2ZW50dWFs
bHkgY29sb3JpemUgZW50aXRpZXMgYnkgc2VuZGluZyB0aGVtIGFzIGEgc3BlY2lhbCB0b2tlbi4K
LSAgICAgICAgICAgICAgICAgICAgLy8gMTIgYnl0ZXMgcmVxdWlyZWQ6IHVwIHRvIDEwIGJ5dGVz
IGluIG1fY0J1ZmZlciBwbHVzIHRoZQotICAgICAgICAgICAgICAgICAgICAvLyBsZWFkaW5nICcm
JyBhbmQgdHJhaWxpbmcgJzsnCi0gICAgICAgICAgICAgICAgICAgIGNoZWNrQnVmZmVyKDEyKTsK
LSAgICAgICAgICAgICAgICAgICAgKmRlc3QrKyA9ICcmJzsKLSAgICAgICAgICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNCdWZmZXJQb3M7IGkrKykKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGRlc3RbaV0gPSBtX2NCdWZmZXJbaV07Ci0gICAgICAgICAgICAgICAgICAgIGRl
c3QgKz0gY0J1ZmZlclBvczsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCpzcmMgPT0gJzsnKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAqZGVzdCsrID0gJzsnOwotICAgICAgICAgICAgICAg
ICAgICAgICAgc3JjLmFkdmFuY2VQYXN0Tm9uTmV3bGluZSgpOwotICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
ICAgICAvLyAxMSBieXRlcyByZXF1aXJlZDogdXAgdG8gMTAgYnl0ZXMgaW4gbV9jQnVmZmVyIHBs
dXMgdGhlCi0gICAgICAgICAgICAgICAgLy8gbGVhZGluZyAnJicKLSAgICAgICAgICAgICAgICBj
aGVja0J1ZmZlcigxMSk7Ci0gICAgICAgICAgICAgICAgLy8gaWdub3JlIHRoZSBzZXF1ZW5jZSwg
YWRkIGl0IHRvIHRoZSBidWZmZXIgYXMgcGxhaW50ZXh0Ci0gICAgICAgICAgICAgICAgKmRlc3Qr
KyA9ICcmJzsKLSAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY0J1ZmZl
clBvczsgaSsrKQotICAgICAgICAgICAgICAgICAgICBkZXN0W2ldID0gbV9jQnVmZmVyW2ldOwot
ICAgICAgICAgICAgICAgIGRlc3QgKz0gY0J1ZmZlclBvczsKLSAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgc3RhdGUuc2V0RW50aXR5U3RhdGUoTm9FbnRpdHkpOwotICAgICAgICAgICAgcmV0
dXJuIHN0YXRlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHN0YXRlOwotfQotCi1M
ZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXI6OlN0YXRlIExlZ2FjeUhUTUxEb2N1bWVudFBhcnNlcjo6
cGFyc2VEb2N0eXBlKFNlZ21lbnRlZFN0cmluZyYgc3JjLCBTdGF0ZSBzdGF0ZSkKLXsKLSAgICBB
U1NFUlQoc3RhdGUuaW5Eb2N0eXBlKCkpOwotICAgIHdoaWxlICghc3JjLmlzRW1wdHkoKSAmJiBz
dGF0ZS5pbkRvY3R5cGUoKSkgewotICAgICAgICBVQ2hhciBjID0gKnNyYzsKLSAgICAgICAgYm9v
bCBpc1doaXRlc3BhY2UgPSBjID09ICdccicgfHwgYyA9PSAnXG4nIHx8IGMgPT0gJ1x0JyB8fCBj
ID09ICcgJzsKLSAgICAgICAgc3dpdGNoIChtX2RvY3R5cGVUb2tlbi5zdGF0ZSgpKSB7Ci0gICAg
ICAgICAgICBjYXNlIERvY3R5cGVCZWdpbjogewotICAgICAgICAgICAgICAgIG1fZG9jdHlwZVRv
a2VuLnNldFN0YXRlKERvY3R5cGVCZWZvcmVOYW1lKTsKLSAgICAgICAgICAgICAgICBpZiAoaXNX
aGl0ZXNwYWNlKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNyYy5hZHZhbmNlKG1fbGluZU51bWJl
cik7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpblZpZXdTb3VyY2VNb2RlKCkpCi0gICAgICAg
ICAgICAgICAgICAgICAgICBtX2RvY3R5cGVUb2tlbi5tX3NvdXJjZS5hcHBlbmQoYyk7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgY2FzZSBEb2N0eXBlQmVmb3JlTmFtZTogewotICAgICAgICAgICAgICAgIGlmIChj
ID09ICc+JykgewotICAgICAgICAgICAgICAgICAgICAvLyBNYWxmb3JtZWQuICBKdXN0IGV4aXQu
Ci0gICAgICAgICAgICAgICAgICAgIHNyYy5hZHZhbmNlUGFzdE5vbk5ld2xpbmUoKTsKLSAgICAg
ICAgICAgICAgICAgICAgc3RhdGUuc2V0SW5Eb2N0eXBlKGZhbHNlKTsKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKGluVmlld1NvdXJjZU1vZGUoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHBy
b2Nlc3NEb2N0eXBlVG9rZW4oKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGlzV2hpdGVz
cGFjZSkgewotICAgICAgICAgICAgICAgICAgICBzcmMuYWR2YW5jZShtX2xpbmVOdW1iZXIpOwot
ICAgICAgICAgICAgICAgICAgICBpZiAoaW5WaWV3U291cmNlTW9kZSgpKQotICAgICAgICAgICAg
ICAgICAgICAgICAgbV9kb2N0eXBlVG9rZW4ubV9zb3VyY2UuYXBwZW5kKGMpOwotICAgICAgICAg
ICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICBtX2RvY3R5cGVUb2tlbi5zZXRTdGF0
ZShEb2N0eXBlTmFtZSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBjYXNlIERvY3R5cGVOYW1lOiB7Ci0gICAgICAgICAgICAgICAgaWYgKGMgPT0g
Jz4nKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIFZhbGlkIGRvY3R5cGUuIEVtaXQgaXQuCi0g
ICAgICAgICAgICAgICAgICAgIHNyYy5hZHZhbmNlUGFzdE5vbk5ld2xpbmUoKTsKLSAgICAgICAg
ICAgICAgICAgICAgc3RhdGUuc2V0SW5Eb2N0eXBlKGZhbHNlKTsKLSAgICAgICAgICAgICAgICAg
ICAgcHJvY2Vzc0RvY3R5cGVUb2tlbigpOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNX
aGl0ZXNwYWNlKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1fZG9jdHlwZVNlYXJjaENvdW50ID0g
MDsgLy8gVXNlZCBub3cgdG8gc2NhbiBmb3IgUFVCTElDCi0gICAgICAgICAgICAgICAgICAgIG1f
ZG9jdHlwZVNlY29uZGFyeVNlYXJjaENvdW50ID0gMDsgLy8gVXNlZCBub3cgdG8gc2NhbiBmb3Ig
U1lTVEVNCi0gICAgICAgICAgICAgICAgICAgIG1fZG9jdHlwZVRva2VuLnNldFN0YXRlKERvY3R5
cGVBZnRlck5hbWUpOwotICAgICAgICAgICAgICAgICAgICBzcmMuYWR2YW5jZShtX2xpbmVOdW1i
ZXIpOwotICAgICAgICAgICAgICAgICAgICBpZiAoaW5WaWV3U291cmNlTW9kZSgpKQotICAgICAg
ICAgICAgICAgICAgICAgICAgbV9kb2N0eXBlVG9rZW4ubV9zb3VyY2UuYXBwZW5kKGMpOwotICAg
ICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHNyYy5hZHZhbmNlUGFz
dE5vbk5ld2xpbmUoKTsKLSAgICAgICAgICAgICAgICAgICAgbV9kb2N0eXBlVG9rZW4ubV9uYW1l
LmFwcGVuZChjKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGluVmlld1NvdXJjZU1vZGUoKSkK
LSAgICAgICAgICAgICAgICAgICAgICAgIG1fZG9jdHlwZVRva2VuLm1fc291cmNlLmFwcGVuZChj
KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBjYXNlIERvY3R5cGVBZnRlck5hbWU6IHsKLSAgICAgICAgICAgICAg
ICBpZiAoYyA9PSAnPicpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gVmFsaWQgZG9jdHlwZS4g
RW1pdCBpdC4KLSAgICAgICAgICAgICAgICAgICAgc3JjLmFkdmFuY2VQYXN0Tm9uTmV3bGluZSgp
OwotICAgICAgICAgICAgICAgICAgICBzdGF0ZS5zZXRJbkRvY3R5cGUoZmFsc2UpOwotICAgICAg
ICAgICAgICAgICAgICBwcm9jZXNzRG9jdHlwZVRva2VuKCk7Ci0gICAgICAgICAgICAgICAgfSBl
bHNlIGlmICghaXNXaGl0ZXNwYWNlKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNyYy5hZHZhbmNl
UGFzdE5vbk5ld2xpbmUoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHRvQVNDSUlMb3dlcihj
KSA9PSBwdWJsaWNTdGFydFttX2RvY3R5cGVTZWFyY2hDb3VudF0pIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIG1fZG9jdHlwZVNlYXJjaENvdW50Kys7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBpZiAobV9kb2N0eXBlU2VhcmNoQ291bnQgPT0gNikKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBGb3VuZCAnUFVCTElDJyBzZXF1ZW5jZQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG1fZG9jdHlwZVRva2VuLnNldFN0YXRlKERvY3R5cGVCZWZvcmVQdWJsaWNJRCk7Ci0gICAg
ICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobV9kb2N0eXBlU2VhcmNoQ291bnQgPiAwKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBtX2RvY3R5cGVTZWFyY2hDb3VudCA9IDA7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBtX2RvY3R5cGVUb2tlbi5zZXRTdGF0ZShEb2N0eXBlQm9ndXMpOwot
ICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRvQVNDSUlMb3dlcihjKSA9PSBzeXN0ZW1T
dGFydFttX2RvY3R5cGVTZWNvbmRhcnlTZWFyY2hDb3VudF0pIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIG1fZG9jdHlwZVNlY29uZGFyeVNlYXJjaENvdW50Kys7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBpZiAobV9kb2N0eXBlU2Vjb25kYXJ5U2VhcmNoQ291bnQgPT0gNikKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBGb3VuZCAnU1lTVEVNJyBzZXF1ZW5jZQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG1fZG9jdHlwZVRva2VuLnNldFN0YXRlKERvY3R5cGVCZWZvcmVT
eXN0ZW1JRCk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBtX2RvY3R5cGVTZWNvbmRhcnlTZWFyY2hDb3VudCA9IDA7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBtX2RvY3R5cGVUb2tlbi5zZXRTdGF0ZShEb2N0eXBlQm9ndXMpOwotICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpblZpZXdTb3VyY2VNb2Rl
KCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBtX2RvY3R5cGVUb2tlbi5tX3NvdXJjZS5hcHBl
bmQoYyk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgc3Jj
LmFkdmFuY2UobV9saW5lTnVtYmVyKTsgLy8gV2hpdGVzcGFjZSBrZWVwcyB1cyBpbiB0aGUgYWZ0
ZXIgbmFtZSBzdGF0ZS4KLSAgICAgICAgICAgICAgICAgICAgaWYgKGluVmlld1NvdXJjZU1vZGUo
KSkKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fZG9jdHlwZVRva2VuLm1fc291cmNlLmFwcGVu
ZChjKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBjYXNlIERvY3R5cGVCZWZvcmVQdWJsaWNJRDogewotICAgICAg
ICAgICAgICAgIGlmIChjID09ICdcIicgfHwgYyA9PSAnXCcnKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIHRxdW90ZSA9IGMgPT0gJ1wiJyA/IERvdWJsZVF1b3RlIDogU2luZ2xlUXVvdGU7Ci0gICAg
ICAgICAgICAgICAgICAgIG1fZG9jdHlwZVRva2VuLnNldFN0YXRlKERvY3R5cGVQdWJsaWNJRCk7
Ci0gICAgICAgICAgICAgICAgICAgIHNyYy5hZHZhbmNlUGFzdE5vbk5ld2xpbmUoKTsKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKGluVmlld1NvdXJjZU1vZGUoKSkKLSAgICAgICAgICAgICAgICAg
ICAgICAgIG1fZG9jdHlwZVRva2VuLm1fc291cmNlLmFwcGVuZChjKTsKLSAgICAgICAgICAgICAg
ICB9IGVsc2UgaWYgKGMgPT0gJz4nKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIENvbnNpZGVy
ZWQgYm9ndXMuICBEb24ndCBwcm9jZXNzIHRoZSBkb2N0eXBlLgotICAgICAgICAgICAgICAgICAg
ICBzcmMuYWR2YW5jZVBhc3ROb25OZXdsaW5lKCk7Ci0gICAgICAgICAgICAgICAgICAgIHN0YXRl
LnNldEluRG9jdHlwZShmYWxzZSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpblZpZXdTb3Vy
Y2VNb2RlKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzRG9jdHlwZVRva2VuKCk7
Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpc1doaXRlc3BhY2UpIHsKLSAgICAgICAgICAg
ICAgICAgICAgc3JjLmFkdmFuY2UobV9saW5lTnVtYmVyKTsKLSAgICAgICAgICAgICAgICAgICAg
aWYgKGluVmlld1NvdXJjZU1vZGUoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fZG9jdHlw
ZVRva2VuLm1fc291cmNlLmFwcGVuZChjKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAg
ICAgICAgICAgICAgICAgbV9kb2N0eXBlVG9rZW4uc2V0U3RhdGUoRG9jdHlwZUJvZ3VzKTsKLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhc2UgRG9j
dHlwZVB1YmxpY0lEOiB7Ci0gICAgICAgICAgICAgICAgaWYgKChjID09ICdcIicgJiYgdHF1b3Rl
ID09IERvdWJsZVF1b3RlKSB8fCAoYyA9PSAnXCcnICYmIHRxdW90ZSA9PSBTaW5nbGVRdW90ZSkp
IHsKLSAgICAgICAgICAgICAgICAgICAgc3JjLmFkdmFuY2VQYXN0Tm9uTmV3bGluZSgpOwotICAg
ICAgICAgICAgICAgICAgICBtX2RvY3R5cGVUb2tlbi5zZXRTdGF0ZShEb2N0eXBlQWZ0ZXJQdWJs
aWNJRCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpblZpZXdTb3VyY2VNb2RlKCkpCi0gICAg
ICAgICAgICAgICAgICAgICAgICBtX2RvY3R5cGVUb2tlbi5tX3NvdXJjZS5hcHBlbmQoYyk7Ci0g
ICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjID09ICc+JykgewotICAgICAgICAgICAgICAgICAg
ICAgLy8gQ29uc2lkZXJlZCBib2d1cy4gIERvbid0IHByb2Nlc3MgdGhlIGRvY3R5cGUuCi0gICAg
ICAgICAgICAgICAgICAgIHNyYy5hZHZhbmNlUGFzdE5vbk5ld2xpbmUoKTsKLSAgICAgICAgICAg
ICAgICAgICAgc3RhdGUuc2V0SW5Eb2N0eXBlKGZhbHNlKTsKLSAgICAgICAgICAgICAgICAgICAg
aWYgKGluVmlld1NvdXJjZU1vZGUoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NE
b2N0eXBlVG9rZW4oKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAg
ICAgICBtX2RvY3R5cGVUb2tlbi5tX3B1YmxpY0lELmFwcGVuZChjKTsKLSAgICAgICAgICAgICAg
ICAgICAgc3JjLmFkdmFuY2UobV9saW5lTnVtYmVyKTsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KGluVmlld1NvdXJjZU1vZGUoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fZG9jdHlwZVRv
a2VuLm1fc291cmNlLmFwcGVuZChjKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXNlIERvY3R5cGVBZnRlclB1
YmxpY0lEOgotICAgICAgICAgICAgICAgIGlmIChjID09ICdcIicgfHwgYyA9PSAnXCcnKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIHRxdW90ZSA9IGMgPT0gJ1wiJyA/IERvdWJsZVF1b3RlIDogU2lu
Z2xlUXVvdGU7Ci0gICAgICAgICAgICAgICAgICAgIG1fZG9jdHlwZVRva2VuLnNldFN0YXRlKERv
Y3R5cGVTeXN0ZW1JRCk7Ci0gICAgICAgICAgICAgICAgICAgIHNyYy5hZHZhbmNlUGFzdE5vbk5l
d2xpbmUoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGluVmlld1NvdXJjZU1vZGUoKSkKLSAg
ICAgICAgICAgICAgICAgICAgICAgIG1fZG9jdHlwZVRva2VuLm1fc291cmNlLmFwcGVuZChjKTsK
LSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGMgPT0gJz4nKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIC8vIFZhbGlkIGRvY3R5cGUuIEVtaXQgaXQgbm93LgotICAgICAgICAgICAgICAgICAgICBz
cmMuYWR2YW5jZVBhc3ROb25OZXdsaW5lKCk7Ci0gICAgICAgICAgICAgICAgICAgIHN0YXRlLnNl
dEluRG9jdHlwZShmYWxzZSk7Ci0gICAgICAgICAgICAgICAgICAgIHByb2Nlc3NEb2N0eXBlVG9r
ZW4oKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGlzV2hpdGVzcGFjZSkgewotICAgICAg
ICAgICAgICAgICAgICBzcmMuYWR2YW5jZShtX2xpbmVOdW1iZXIpOwotICAgICAgICAgICAgICAg
ICAgICBpZiAoaW5WaWV3U291cmNlTW9kZSgpKQotICAgICAgICAgICAgICAgICAgICAgICAgbV9k
b2N0eXBlVG9rZW4ubV9zb3VyY2UuYXBwZW5kKGMpOwotICAgICAgICAgICAgICAgIH0gZWxzZQot
ICAgICAgICAgICAgICAgICAgICBtX2RvY3R5cGVUb2tlbi5zZXRTdGF0ZShEb2N0eXBlQm9ndXMp
OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBEb2N0eXBlQmVmb3Jl
U3lzdGVtSUQ6Ci0gICAgICAgICAgICAgICAgaWYgKGMgPT0gJ1wiJyB8fCBjID09ICdcJycpIHsK
LSAgICAgICAgICAgICAgICAgICAgdHF1b3RlID0gYyA9PSAnXCInID8gRG91YmxlUXVvdGUgOiBT
aW5nbGVRdW90ZTsKLSAgICAgICAgICAgICAgICAgICAgbV9kb2N0eXBlVG9rZW4uc2V0U3RhdGUo
RG9jdHlwZVN5c3RlbUlEKTsKLSAgICAgICAgICAgICAgICAgICAgc3JjLmFkdmFuY2VQYXN0Tm9u
TmV3bGluZSgpOwotICAgICAgICAgICAgICAgICAgICBpZiAoaW5WaWV3U291cmNlTW9kZSgpKQot
ICAgICAgICAgICAgICAgICAgICAgICAgbV9kb2N0eXBlVG9rZW4ubV9zb3VyY2UuYXBwZW5kKGMp
OwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYyA9PSAnPicpIHsKLSAgICAgICAgICAgICAg
ICAgICAgLy8gQ29uc2lkZXJlZCBib2d1cy4gIERvbid0IHByb2Nlc3MgdGhlIGRvY3R5cGUuCi0g
ICAgICAgICAgICAgICAgICAgIHNyYy5hZHZhbmNlUGFzdE5vbk5ld2xpbmUoKTsKLSAgICAgICAg
ICAgICAgICAgICAgc3RhdGUuc2V0SW5Eb2N0eXBlKGZhbHNlKTsKLSAgICAgICAgICAgICAgICB9
IGVsc2UgaWYgKGlzV2hpdGVzcGFjZSkgewotICAgICAgICAgICAgICAgICAgICBzcmMuYWR2YW5j
ZShtX2xpbmVOdW1iZXIpOwotICAgICAgICAgICAgICAgICAgICBpZiAoaW5WaWV3U291cmNlTW9k
ZSgpKQotICAgICAgICAgICAgICAgICAgICAgICAgbV9kb2N0eXBlVG9rZW4ubV9zb3VyY2UuYXBw
ZW5kKGMpOwotICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICBtX2Rv
Y3R5cGVUb2tlbi5zZXRTdGF0ZShEb2N0eXBlQm9ndXMpOwotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgY2FzZSBEb2N0eXBlU3lzdGVtSUQ6Ci0gICAgICAgICAgICAgICAgaWYg
KChjID09ICdcIicgJiYgdHF1b3RlID09IERvdWJsZVF1b3RlKSB8fCAoYyA9PSAnXCcnICYmIHRx
dW90ZSA9PSBTaW5nbGVRdW90ZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgc3JjLmFkdmFuY2VQ
YXN0Tm9uTmV3bGluZSgpOwotICAgICAgICAgICAgICAgICAgICBtX2RvY3R5cGVUb2tlbi5zZXRT
dGF0ZShEb2N0eXBlQWZ0ZXJTeXN0ZW1JRCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpblZp
ZXdTb3VyY2VNb2RlKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBtX2RvY3R5cGVUb2tlbi5t
X3NvdXJjZS5hcHBlbmQoYyk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjID09ICc+Jykg
ewotICAgICAgICAgICAgICAgICAgICAgLy8gQ29uc2lkZXJlZCBib2d1cy4gIERvbid0IHByb2Nl
c3MgdGhlIGRvY3R5cGUuCi0gICAgICAgICAgICAgICAgICAgIHNyYy5hZHZhbmNlUGFzdE5vbk5l
d2xpbmUoKTsKLSAgICAgICAgICAgICAgICAgICAgc3RhdGUuc2V0SW5Eb2N0eXBlKGZhbHNlKTsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKGluVmlld1NvdXJjZU1vZGUoKSkKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHByb2Nlc3NEb2N0eXBlVG9rZW4oKTsKLSAgICAgICAgICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgICAgICAgICBtX2RvY3R5cGVUb2tlbi5tX3N5c3RlbUlELmFwcGVu
ZChjKTsKLSAgICAgICAgICAgICAgICAgICAgc3JjLmFkdmFuY2UobV9saW5lTnVtYmVyKTsKLSAg
ICAgICAgICAgICAgICAgICAgaWYgKGluVmlld1NvdXJjZU1vZGUoKSkKLSAgICAgICAgICAgICAg
ICAgICAgICAgIG1fZG9jdHlwZVRva2VuLm1fc291cmNlLmFwcGVuZChjKTsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIERvY3R5cGVB
ZnRlclN5c3RlbUlEOgotICAgICAgICAgICAgICAgIGlmIChjID09ICc+JykgewotICAgICAgICAg
ICAgICAgICAgICAvLyBWYWxpZCBkb2N0eXBlLiBFbWl0IGl0IG5vdy4KLSAgICAgICAgICAgICAg
ICAgICAgc3JjLmFkdmFuY2VQYXN0Tm9uTmV3bGluZSgpOwotICAgICAgICAgICAgICAgICAgICBz
dGF0ZS5zZXRJbkRvY3R5cGUoZmFsc2UpOwotICAgICAgICAgICAgICAgICAgICBwcm9jZXNzRG9j
dHlwZVRva2VuKCk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpc1doaXRlc3BhY2UpIHsK
LSAgICAgICAgICAgICAgICAgICAgc3JjLmFkdmFuY2UobV9saW5lTnVtYmVyKTsKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKGluVmlld1NvdXJjZU1vZGUoKSkKLSAgICAgICAgICAgICAgICAgICAg
ICAgIG1fZG9jdHlwZVRva2VuLm1fc291cmNlLmFwcGVuZChjKTsKLSAgICAgICAgICAgICAgICB9
IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgbV9kb2N0eXBlVG9rZW4uc2V0U3RhdGUoRG9jdHlw
ZUJvZ3VzKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgRG9jdHlw
ZUJvZ3VzOgotICAgICAgICAgICAgICAgIGlmIChjID09ICc+JykgewotICAgICAgICAgICAgICAg
ICAgICAvLyBEb25lIHdpdGggdGhlIGJvZ3VzIGRvY3R5cGUuCi0gICAgICAgICAgICAgICAgICAg
IHNyYy5hZHZhbmNlUGFzdE5vbk5ld2xpbmUoKTsKLSAgICAgICAgICAgICAgICAgICAgc3RhdGUu
c2V0SW5Eb2N0eXBlKGZhbHNlKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGluVmlld1NvdXJj
ZU1vZGUoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc0RvY3R5cGVUb2tlbigpOwot
ICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHNyYy5hZHZhbmNl
KG1fbGluZU51bWJlcik7IC8vIEp1c3Qga2VlcCBzY2FubmluZyBmb3IgJz4nCi0gICAgICAgICAg
ICAgICAgICAgIGlmIChpblZpZXdTb3VyY2VNb2RlKCkpCi0gICAgICAgICAgICAgICAgICAgICAg
ICBtX2RvY3R5cGVUb2tlbi5tX3NvdXJjZS5hcHBlbmQoYyk7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gc3RhdGU7Ci19Ci0KLUxl
Z2FjeUhUTUxEb2N1bWVudFBhcnNlcjo6U3RhdGUgTGVnYWN5SFRNTERvY3VtZW50UGFyc2VyOjpw
YXJzZVRhZyhTZWdtZW50ZWRTdHJpbmcmIHNyYywgU3RhdGUgc3RhdGUpCi17Ci0gICAgQVNTRVJU
KCFzdGF0ZS5oYXNFbnRpdHlTdGF0ZSgpKTsKLQotICAgIHVuc2lnbmVkIGNCdWZmZXJQb3MgPSBt
X2NCdWZmZXJQb3M7Ci0KLSAgICBib29sIGxhc3RJc1NsYXNoID0gZmFsc2U7Ci0KLSAgICB3aGls
ZSAoIXNyYy5pc0VtcHR5KCkpIHsKLSAgICAgICAgY2hlY2tCdWZmZXIoKTsKLSAgICAgICAgc3dp
dGNoIChzdGF0ZS50YWdTdGF0ZSgpKSB7Ci0gICAgICAgIGNhc2UgTm9UYWc6Ci0gICAgICAgIHsK
LSAgICAgICAgICAgIG1fY0J1ZmZlclBvcyA9IGNCdWZmZXJQb3M7Ci0gICAgICAgICAgICByZXR1
cm4gc3RhdGU7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBUYWdOYW1lOgotICAgICAgICB7Ci0g
ICAgICAgICAgICBpZiAoc2VhcmNoQ291bnQgPiAwKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCpz
cmMgPT0gY29tbWVudFN0YXJ0W3NlYXJjaENvdW50XSkgewotICAgICAgICAgICAgICAgICAgICBz
ZWFyY2hDb3VudCsrOwotICAgICAgICAgICAgICAgICAgICBpZiAoc2VhcmNoQ291bnQgPT0gMikK
LSAgICAgICAgICAgICAgICAgICAgICAgIG1fZG9jdHlwZVNlYXJjaENvdW50Kys7IC8vIEEgJyEn
IGlzIGFsc28gcGFydCBvZiBhIGRvY3R5cGUsIHNvIHdlIGFyZSBtb3ZpbmcgdGhyb3VnaCB0aGF0
IHN0aWxsIGFzIHdlbGwuCi0gICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAg
ICAgICAgICAgIG1fZG9jdHlwZVNlYXJjaENvdW50ID0gMDsKLSAgICAgICAgICAgICAgICAgICAg
aWYgKHNlYXJjaENvdW50ID09IDQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZvdW5k
ICc8IS0tJyBzZXF1ZW5jZQotICAgICAgICAgICAgICAgICAgICAgICAgc3JjLmFkdmFuY2VQYXN0
Tm9uTmV3bGluZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgbV9kZXN0ID0gbV9idWZmZXI7
IC8vIGlnbm9yZSB0aGUgcHJldmlvdXMgcGFydCBvZiB0aGlzIHRhZwotICAgICAgICAgICAgICAg
ICAgICAgICAgc3RhdGUuc2V0SW5Db21tZW50KHRydWUpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgc3RhdGUuc2V0VGFnU3RhdGUoTm9UYWcpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAv
LyBGaXggYnVnIDM0MzAyIGF0IGtkZS5idWdzLm9yZy4gIEdvIGFoZWFkIGFuZCB0cmVhdAotICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gPCEtLT4gYXMgYSB2YWxpZCBjb21tZW50LCBzaW5jZSBi
b3RoIG1vemlsbGEgYW5kIElFIG9uIHdpbmRvd3MKLSAgICAgICAgICAgICAgICAgICAgICAgIC8v
IGNhbiBoYW5kbGUgdGhpcyBjYXNlLiAgT25seSBkbyB0aGlzIGluIHF1aXJrcyBtb2RlLiAtZHdo
Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXNyYy5pc0VtcHR5KCkgJiYgKnNyYyA9PSAn
PicgJiYgZG9jdW1lbnQoKS0+aW5Db21wYXRNb2RlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzdGF0ZS5zZXRJbkNvbW1lbnQoZmFsc2UpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNyYy5hZHZhbmNlUGFzdE5vbk5ld2xpbmUoKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoIXNyYy5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG1fY0J1ZmZlcltjQnVmZmVyUG9zKytdID0gKnNyYzsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IHBhcnNlQ29tbWVu
dChzcmMsIHN0YXRlKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgbV9jQnVmZmVyUG9zID0g
Y0J1ZmZlclBvczsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGF0ZTsgLy8gRmlu
aXNoZWQgcGFyc2luZyB0YWchCi0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICAgICAgbV9jQnVmZmVyW2NCdWZmZXJQb3MrK10gPSAqc3JjOwotICAgICAgICAgICAgICAgICAg
ICBzcmMuYWR2YW5jZVBhc3ROb25OZXdsaW5lKCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICBzZWFyY2hDb3Vu
dCA9IDA7IC8vIFN0b3AgbG9va2luZyBmb3IgJzwhLS0nIHNlcXVlbmNlCi0gICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgIGlmIChtX2RvY3R5cGVTZWFyY2hDb3VudCA+IDApIHsKLSAgICAgICAg
ICAgICAgICBpZiAodG9BU0NJSUxvd2VyKCpzcmMpID09IGRvY3R5cGVTdGFydFttX2RvY3R5cGVT
ZWFyY2hDb3VudF0pIHsKLSAgICAgICAgICAgICAgICAgICAgbV9kb2N0eXBlU2VhcmNoQ291bnQr
KzsKLSAgICAgICAgICAgICAgICAgICAgbV9jQnVmZmVyW2NCdWZmZXJQb3MrK10gPSAqc3JjOwot
ICAgICAgICAgICAgICAgICAgICBzcmMuYWR2YW5jZVBhc3ROb25OZXdsaW5lKCk7Ci0gICAgICAg
ICAgICAgICAgICAgIGlmIChtX2RvY3R5cGVTZWFyY2hDb3VudCA9PSA5KSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAvLyBGb3VuZCAnPCFET0NUWVBFJyBzZXF1ZW5jZQotICAgICAgICAgICAg
ICAgICAgICAgICAgc3RhdGUuc2V0SW5Eb2N0eXBlKHRydWUpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgc3RhdGUuc2V0VGFnU3RhdGUoTm9UYWcpOwotICAgICAgICAgICAgICAgICAgICAgICAg
bV9kb2N0eXBlVG9rZW4ucmVzZXQoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpblZp
ZXdTb3VyY2VNb2RlKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9kb2N0eXBlVG9r
ZW4ubV9zb3VyY2UuYXBwZW5kKG1fY0J1ZmZlciwgY0J1ZmZlclBvcyk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBzdGF0ZSA9IHBhcnNlRG9jdHlwZShzcmMsIHN0YXRlKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIG1fY0J1ZmZlclBvcyA9IGNCdWZmZXJQb3M7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gc3RhdGU7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAg
ICAgIG1fZG9jdHlwZVNlYXJjaENvdW50ID0gMDsgLy8gU3RvcCBsb29raW5nIGZvciAnPCFET0NU
WVBFJyBzZXF1ZW5jZQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBib29sIGZpbmlzaCA9
IGZhbHNlOwotICAgICAgICAgICAgdW5zaWduZWQgaW50IGxsID0gbWluKHNyYy5sZW5ndGgoKSwg
Q0JVRkxFTiAtIGNCdWZmZXJQb3MpOwotICAgICAgICAgICAgd2hpbGUgKGxsLS0pIHsKLSAgICAg
ICAgICAgICAgICBVQ2hhciBjdXJjaGFyID0gKnNyYzsKLSAgICAgICAgICAgICAgICBpZiAoaXNB
U0NJSVNwYWNlKGN1cmNoYXIpIHx8IGN1cmNoYXIgPT0gJz4nIHx8IGN1cmNoYXIgPT0gJzwnKSB7
Ci0gICAgICAgICAgICAgICAgICAgIGZpbmlzaCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIHRvbG93ZXIo
KSBzaG93cyB1cCBvbiBwcm9maWxlcy4gVGhpcyBpcyBmYXN0ZXIhCi0gICAgICAgICAgICAgICAg
aWYgKGN1cmNoYXIgPj0gJ0EnICYmIGN1cmNoYXIgPD0gJ1onICYmICFpblZpZXdTb3VyY2VNb2Rl
KCkpCi0gICAgICAgICAgICAgICAgICAgIG1fY0J1ZmZlcltjQnVmZmVyUG9zKytdID0gY3VyY2hh
ciArICgnYScgLSAnQScpOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAg
ICAgbV9jQnVmZmVyW2NCdWZmZXJQb3MrK10gPSBjdXJjaGFyOwotICAgICAgICAgICAgICAgIHNy
Yy5hZHZhbmNlUGFzdE5vbk5ld2xpbmUoKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
Ly8gRGlzYWR2YW50YWdlOiB3ZSBhZGQgdGhlIHBvc3NpYmxlIHJlc3Qgb2YgdGhlIHRhZwotICAg
ICAgICAgICAgLy8gYXMgYXR0cmlidXRlIG5hbWVzLiAjIyMganVkZ2UgaWYgdGhpcyBjYXVzZXMg
cHJvYmxlbXMKLSAgICAgICAgICAgIGlmIChmaW5pc2ggfHwgQ0JVRkxFTiA9PSBjQnVmZmVyUG9z
KSB7Ci0gICAgICAgICAgICAgICAgYm9vbCBiZWdpblRhZzsKLSAgICAgICAgICAgICAgICBVQ2hh
ciogcHRyID0gbV9jQnVmZmVyOwotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBsZW4gPSBj
QnVmZmVyUG9zOwotICAgICAgICAgICAgICAgIG1fY0J1ZmZlcltjQnVmZmVyUG9zXSA9ICdcMCc7
Ci0gICAgICAgICAgICAgICAgaWYgKChjQnVmZmVyUG9zID4gMCkgJiYgKCpwdHIgPT0gJy8nKSkg
ewotICAgICAgICAgICAgICAgICAgICAvLyBFbmQgVGFnCi0gICAgICAgICAgICAgICAgICAgIGJl
Z2luVGFnID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIHB0cisrOwotICAgICAgICAgICAg
ICAgICAgICBsZW4tLTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgICAgICAgICAvLyBTdGFydCBUYWcKLSAgICAgICAgICAgICAgICAgICAgYmVn
aW5UYWcgPSB0cnVlOwotCi0gICAgICAgICAgICAgICAgLy8gSWdub3JlIHRoZSAvIGluIGZha2Ug
eG1sIHRhZ3MgbGlrZSA8YnIvPi4gIFdlIHRyaW0gb2ZmIHRoZSAiLyIgc28gdGhhdCB3ZSdsbCBn
ZXQgImJyIiBhcyB0aGUgdGFnIG5hbWUgYW5kIG5vdCAiYnIvIi4KLSAgICAgICAgICAgICAgICBp
ZiAobGVuID4gMSAmJiBwdHJbbGVuLTFdID09ICcvJyAmJiAhaW5WaWV3U291cmNlTW9kZSgpKQot
ICAgICAgICAgICAgICAgICAgICBwdHJbLS1sZW5dID0gJ1wwJzsKLQotICAgICAgICAgICAgICAg
IC8vIE5vdyB0aGF0IHdlJ3ZlIHNoYXZlZCBvZmYgYW55IGludmFsaWQgLyB0aGF0IG1pZ2h0IGhh
dmUgZm9sbG93ZWQgdGhlIG5hbWUpLCBtYWtlIHRoZSB0YWcuCi0gICAgICAgICAgICAgICAgLy8g
RklYTUU6IEZpcmVGb3ggYW5kIFdpbklFIHR1cm4gIWZvbyBub2RlcyBpbnRvIGNvbW1lbnRzLCB3
ZSBpZ25vcmUgY29tbWVudHMuIChmYXN0L3BhcnNlci90YWctd2l0aC1leGNsYW1hdGlvbi1wb2lu
dC5odG1sKQotICAgICAgICAgICAgICAgIGlmIChwdHJbMF0gIT0gJyEnIHx8IGluVmlld1NvdXJj
ZU1vZGUoKSkgewotICAgICAgICAgICAgICAgICAgICBtX2N1cnJlbnRUb2tlbi50YWdOYW1lID0g
QXRvbWljU3RyaW5nKHB0cik7Ci0gICAgICAgICAgICAgICAgICAgIG1fY3VycmVudFRva2VuLmJl
Z2luVGFnID0gYmVnaW5UYWc7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG1f
ZGVzdCA9IG1fYnVmZmVyOwotICAgICAgICAgICAgICAgIHN0YXRlLnNldFRhZ1N0YXRlKFNlYXJj
aEF0dHJpYnV0ZSk7Ci0gICAgICAgICAgICAgICAgY0J1ZmZlclBvcyA9IDA7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIFNlYXJjaEF0
dHJpYnV0ZToKLSAgICAgICAgICAgIHdoaWxlICghc3JjLmlzRW1wdHkoKSkgewotICAgICAgICAg
ICAgICAgIFVDaGFyIGN1cmNoYXIgPSAqc3JjOwotICAgICAgICAgICAgICAgIC8vIEluIHRoaXMg
bW9kZSBqdXN0IGlnbm9yZSBhbnkgcXVvdGVzIHdlIGVuY291bnRlciBhbmQgdHJlYXQgdGhlbSBs
aWtlIHNwYWNlcy4KLSAgICAgICAgICAgICAgICBpZiAoIWlzQVNDSUlTcGFjZShjdXJjaGFyKSAm
JiBjdXJjaGFyICE9ICdcJycgJiYgY3VyY2hhciAhPSAnIicpIHsKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKGN1cmNoYXIgPT0gJzwnIHx8IGN1cmNoYXIgPT0gJz4nKQotICAgICAgICAgICAgICAg
ICAgICAgICAgc3RhdGUuc2V0VGFnU3RhdGUoU2VhcmNoRW5kKTsKLSAgICAgICAgICAgICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUuc2V0VGFnU3RhdGUoQXR0cmli
dXRlTmFtZSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgY0J1ZmZlclBvcyA9IDA7Ci0gICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBp
ZiAoaW5WaWV3U291cmNlTW9kZSgpKQotICAgICAgICAgICAgICAgICAgICBtX2N1cnJlbnRUb2tl
bi5hZGRWaWV3U291cmNlQ2hhcihjdXJjaGFyKTsKLSAgICAgICAgICAgICAgICBzcmMuYWR2YW5j
ZShtX2xpbmVOdW1iZXIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgQXR0cmlidXRlTmFtZToKLSAgICAgICAgewotICAgICAgICAgICAgbV9yYXdBdHRy
aWJ1dGVCZWZvcmVWYWx1ZS5jbGVhcigpOwotICAgICAgICAgICAgaW50IGxsID0gbWluKHNyYy5s
ZW5ndGgoKSwgQ0JVRkxFTiAtIGNCdWZmZXJQb3MpOwotICAgICAgICAgICAgd2hpbGUgKGxsLS0p
IHsKLSAgICAgICAgICAgICAgICBVQ2hhciBjdXJjaGFyID0gKnNyYzsKLSAgICAgICAgICAgICAg
ICAvLyBJZiB3ZSBlbmNvdW50ZXIgYSAiLyIgd2hlbiBzY2FubmluZyBhbiBhdHRyaWJ1dGUgbmFt
ZSwgdHJlYXQgaXQgYXMgYSBkZWxpbWl0ZXIuICBUaGlzIGFsbG93cyB0aGUKLSAgICAgICAgICAg
ICAgICAvLyBjYXNlcyBsaWtlIDxpbnB1dCB0eXBlPWNoZWNrYm94IGNoZWNrZWQvPiB0byB3b3Jr
IChhbmQgYWNjb21tb2RhdGVzIFhNTC1zdHlsZSBzeW50YXggYXMgcGVyIEhUTUw1KS4KLSAgICAg
ICAgICAgICAgICBpZiAoY3VyY2hhciA8PSAnPicgJiYgKGN1cmNoYXIgPj0gJzwnIHx8IGlzQVND
SUlTcGFjZShjdXJjaGFyKSB8fCBjdXJjaGFyID09ICcvJykpIHsKLSAgICAgICAgICAgICAgICAg
ICAgbV9jQnVmZmVyW2NCdWZmZXJQb3NdID0gJ1wwJzsKLSAgICAgICAgICAgICAgICAgICAgbV9h
dHRyTmFtZSA9IEF0b21pY1N0cmluZyhtX2NCdWZmZXIpOwotICAgICAgICAgICAgICAgICAgICBt
X2Rlc3QgPSBtX2J1ZmZlcjsKLSAgICAgICAgICAgICAgICAgICAgKm1fZGVzdCsrID0gMDsKLSAg
ICAgICAgICAgICAgICAgICAgc3RhdGUuc2V0VGFnU3RhdGUoU2VhcmNoRXF1YWwpOwotICAgICAg
ICAgICAgICAgICAgICBpZiAoaW5WaWV3U291cmNlTW9kZSgpKQotICAgICAgICAgICAgICAgICAg
ICAgICAgbV9jdXJyZW50VG9rZW4uYWRkVmlld1NvdXJjZUNoYXIoJ2EnKTsKLSAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy8g
dG9sb3dlcigpIHNob3dzIHVwIG9uIHByb2ZpbGVzLiBUaGlzIGlzIGZhc3RlciEKLSAgICAgICAg
ICAgICAgICBpZiAoY3VyY2hhciA+PSAnQScgJiYgY3VyY2hhciA8PSAnWicgJiYgIWluVmlld1Nv
dXJjZU1vZGUoKSkKLSAgICAgICAgICAgICAgICAgICAgbV9jQnVmZmVyW2NCdWZmZXJQb3MrK10g
PSBjdXJjaGFyICsgKCdhJyAtICdBJyk7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgICAgICAgICBtX2NCdWZmZXJbY0J1ZmZlclBvcysrXSA9IGN1cmNoYXI7Ci0KLSAgICAgICAg
ICAgICAgICBtX3Jhd0F0dHJpYnV0ZUJlZm9yZVZhbHVlLmFwcGVuZChjdXJjaGFyKTsKLSAgICAg
ICAgICAgICAgICBzcmMuYWR2YW5jZShtX2xpbmVOdW1iZXIpOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgaWYgKGNCdWZmZXJQb3MgPT0gQ0JVRkxFTikgewotICAgICAgICAgICAgICAgIG1f
Y0J1ZmZlcltjQnVmZmVyUG9zXSA9ICdcMCc7Ci0gICAgICAgICAgICAgICAgbV9hdHRyTmFtZSA9
IEF0b21pY1N0cmluZyhtX2NCdWZmZXIpOwotICAgICAgICAgICAgICAgIG1fZGVzdCA9IG1fYnVm
ZmVyOwotICAgICAgICAgICAgICAgICptX2Rlc3QrKyA9IDA7Ci0gICAgICAgICAgICAgICAgc3Rh
dGUuc2V0VGFnU3RhdGUoU2VhcmNoRXF1YWwpOwotICAgICAgICAgICAgICAgIGlmIChpblZpZXdT
b3VyY2VNb2RlKCkpCi0gICAgICAgICAgICAgICAgICAgIG1fY3VycmVudFRva2VuLmFkZFZpZXdT
b3VyY2VDaGFyKCdhJyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgfQotICAgICAgICBjYXNlIFNlYXJjaEVxdWFsOgotICAgICAgICAgICAgd2hpbGUgKCFzcmMu
aXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAgVUNoYXIgY3VyY2hhciA9ICpzcmM7Ci0KLSAg
ICAgICAgICAgICAgICBpZiAobGFzdElzU2xhc2ggJiYgY3VyY2hhciA9PSAnPicpIHsKLSAgICAg
ICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBhIHF1aXJrICh3aXRoIGEgbG9uZyBzYWQgaGlzdG9y
eSkuICBXZSBoYXZlIHRvIGRvIHRoaXMKLSAgICAgICAgICAgICAgICAgICAgLy8gc2luY2Ugd2lk
Z2V0cyBkbyA8c2NyaXB0IHNyYz0iZm9vLmpzIi8+IGFuZCBleHBlY3QgdGhlIHRhZyB0byBjbG9z
ZS4KLSAgICAgICAgICAgICAgICAgICAgaWYgKG1fY3VycmVudFRva2VuLnRhZ05hbWUgPT0gc2Ny
aXB0VGFnKQotICAgICAgICAgICAgICAgICAgICAgICAgbV9jdXJyZW50VG9rZW4uc2VsZkNsb3Np
bmdUYWcgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBtX2N1cnJlbnRUb2tlbi5icm9rZW5Y
TUxTdHlsZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy8g
SW4gdGhpcyBtb2RlIGp1c3QgaWdub3JlIGFueSBxdW90ZXMgb3Igc2xhc2hlcyB3ZSBlbmNvdW50
ZXIgYW5kIHRyZWF0IHRoZW0gbGlrZSBzcGFjZXMuCi0gICAgICAgICAgICAgICAgaWYgKCFpc0FT
Q0lJU3BhY2UoY3VyY2hhcikgJiYgY3VyY2hhciAhPSAnXCcnICYmIGN1cmNoYXIgIT0gJyInICYm
IGN1cmNoYXIgIT0gJy8nKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChjdXJjaGFyID09ICc9
JykgewotICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUuc2V0VGFnU3RhdGUoU2VhcmNoVmFs
dWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluVmlld1NvdXJjZU1vZGUoKSkKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtX2N1cnJlbnRUb2tlbi5hZGRWaWV3U291cmNlQ2hh
cihjdXJjaGFyKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fcmF3QXR0cmlidXRlQmVmb3Jl
VmFsdWUuYXBwZW5kKGN1cmNoYXIpOwotICAgICAgICAgICAgICAgICAgICAgICAgc3JjLmFkdmFu
Y2VQYXN0Tm9uTmV3bGluZSgpOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgICAgICAgICAgICAgbV9jdXJyZW50VG9rZW4uYWRkQXR0cmlidXRlKG1fYXR0ck5hbWUs
IGVtcHR5QXRvbSwgaW5WaWV3U291cmNlTW9kZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IG1fZGVzdCA9IG1fYnVmZmVyOwotICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUuc2V0VGFn
U3RhdGUoU2VhcmNoQXR0cmlidXRlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RJc1Ns
YXNoID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgbGFzdElzU2xhc2gg
PSBjdXJjaGFyID09ICcvJzsKLQotICAgICAgICAgICAgICAgIGlmIChpblZpZXdTb3VyY2VNb2Rl
KCkpCi0gICAgICAgICAgICAgICAgICAgIG1fY3VycmVudFRva2VuLmFkZFZpZXdTb3VyY2VDaGFy
KGN1cmNoYXIpOwotICAgICAgICAgICAgICAgIG1fcmF3QXR0cmlidXRlQmVmb3JlVmFsdWUuYXBw
ZW5kKGN1cmNoYXIpOwotICAgICAgICAgICAgICAgIHNyYy5hZHZhbmNlKG1fbGluZU51bWJlcik7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBTZWFyY2hW
YWx1ZToKLSAgICAgICAgICAgIHdoaWxlICghc3JjLmlzRW1wdHkoKSkgewotICAgICAgICAgICAg
ICAgIFVDaGFyIGN1cmNoYXIgPSAqc3JjOwotICAgICAgICAgICAgICAgIGlmICghaXNBU0NJSVNw
YWNlKGN1cmNoYXIpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChjdXJjaGFyID09ICdcJycg
fHwgY3VyY2hhciA9PSAnXCInKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0cXVvdGUgPSBj
dXJjaGFyID09ICdcIicgPyBEb3VibGVRdW90ZSA6IFNpbmdsZVF1b3RlOwotICAgICAgICAgICAg
ICAgICAgICAgICAgc3RhdGUuc2V0VGFnU3RhdGUoUXVvdGVkVmFsdWUpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKGluVmlld1NvdXJjZU1vZGUoKSkKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBtX2N1cnJlbnRUb2tlbi5hZGRWaWV3U291cmNlQ2hhcihjdXJjaGFyKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIG1fcmF3QXR0cmlidXRlQmVmb3JlVmFsdWUuYXBwZW5kKGN1cmNo
YXIpOwotICAgICAgICAgICAgICAgICAgICAgICAgc3JjLmFkdmFuY2VQYXN0Tm9uTmV3bGluZSgp
OwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0
YXRlLnNldFRhZ1N0YXRlKFZhbHVlKTsKLQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKGluVmlld1NvdXJjZU1vZGUoKSkK
LSAgICAgICAgICAgICAgICAgICAgbV9jdXJyZW50VG9rZW4uYWRkVmlld1NvdXJjZUNoYXIoY3Vy
Y2hhcik7Ci0gICAgICAgICAgICAgICAgbV9yYXdBdHRyaWJ1dGVCZWZvcmVWYWx1ZS5hcHBlbmQo
Y3VyY2hhcik7Ci0gICAgICAgICAgICAgICAgc3JjLmFkdmFuY2UobV9saW5lTnVtYmVyKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFF1b3RlZFZhbHVl
OgotICAgICAgICAgICAgd2hpbGUgKCFzcmMuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAg
Y2hlY2tCdWZmZXIoKTsKLQotICAgICAgICAgICAgICAgIFVDaGFyIGN1cmNoYXIgPSAqc3JjOwot
ICAgICAgICAgICAgICAgIGlmIChjdXJjaGFyIDw9ICc+JyAmJiAhc3JjLmVzY2FwZWQoKSkgewot
ICAgICAgICAgICAgICAgICAgICBpZiAoY3VyY2hhciA9PSAnPicgJiYgbV9hdHRyTmFtZS5pc0Vt
cHR5KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIEhhbmRsZSBhIGNhc2UgbGlrZSA8
aW1nICc+LiAgSnVzdCBnbyBhaGVhZCBhbmQgYmUgd2lsbGluZwotICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gdG8gY2xvc2UgdGhlIHdob2xlIHRhZy4gIERvbid0IGNvbnN1bWUgdGhlIGNoYXJh
Y3RlciBhbmQKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGp1c3QgZ28gYmFjayBpbnRvIFNl
YXJjaEVuZCB3aGlsZSBpZ25vcmluZyB0aGUgd2hvbGUKLSAgICAgICAgICAgICAgICAgICAgICAg
IC8vIHZhbHVlLgotICAgICAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IE5vdGUgdGhhdCB0
aGlzIGlzIGFjdHVhbGx5IG5vdCBhIHZlcnkgZ29vZCBzb2x1dGlvbi4KLSAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIEl0IGRvZXNuJ3QgaGFuZGxlIHRoZSBnZW5lcmFsIGNhc2Ugb2YKLSAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIHVubWF0Y2hlZCBxdW90ZXMgYW1vbmcgYXR0cmlidXRlcyB0
aGF0IGhhdmUgbmFtZXMuIC1kd2gKLSAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChtX2Rl
c3QgPiBtX2J1ZmZlciArIDEgJiYgKG1fZGVzdFstMV0gPT0gJ1xuJyB8fCBtX2Rlc3RbLTFdID09
ICdccicpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZGVzdC0tOyAvLyByZW1vdmUg
dHJhaWxpbmcgbmV3bGluZXMKLSAgICAgICAgICAgICAgICAgICAgICAgIEF0b21pY1N0cmluZyBh
dHRyaWJ1dGVWYWx1ZShtX2J1ZmZlciArIDEsIG1fZGVzdCAtIG1fYnVmZmVyIC0gMSk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoIWF0dHJpYnV0ZVZhbHVlLmNvbnRhaW5zKCcvJykpCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9hdHRyTmFtZSA9IGF0dHJpYnV0ZVZhbHVlOyAv
LyBKdXN0IG1ha2UgdGhlIG5hbWUvdmFsdWUgbWF0Y2guIChGSVhNRTogSXMgdGhpcyBzb21lIFdp
bklFIHF1aXJrPykKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fY3VycmVudFRva2VuLmFkZEF0
dHJpYnV0ZShtX2F0dHJOYW1lLCBhdHRyaWJ1dGVWYWx1ZSwgaW5WaWV3U291cmNlTW9kZSgpKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpblZpZXdTb3VyY2VNb2RlKCkpCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbV9jdXJyZW50VG9rZW4uYWRkVmlld1NvdXJjZUNoYXIoJ3gn
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLnNldFRhZ1N0YXRlKFNlYXJjaEF0dHJp
YnV0ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX2Rlc3QgPSBtX2J1ZmZlcjsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHRxdW90ZSA9IE5vUXVvdGU7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAg
IGlmIChjdXJjaGFyID09ICcmJykgewotICAgICAgICAgICAgICAgICAgICAgICAgc3JjLmFkdmFu
Y2VQYXN0Tm9uTmV3bGluZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSBwYXJz
ZUVudGl0eShzcmMsIG1fZGVzdCwgc3RhdGUsIGNCdWZmZXJQb3MsIHRydWUsIHRydWUpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgICAgICAgICBpZiAoKHRxdW90ZSA9PSBTaW5nbGVRdW90ZSAmJiBjdXJjaGFyID09
ICdcJycpIHx8ICh0cXVvdGUgPT0gRG91YmxlUXVvdGUgJiYgY3VyY2hhciA9PSAnXCInKSkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gc29tZSA8aW5wdXQgdHlwZT1oaWRkZW4+IHJlbHkg
b24gdHJhaWxpbmcgc3BhY2VzLiBhcmdoCi0gICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAo
bV9kZXN0ID4gbV9idWZmZXIgKyAxICYmIChtX2Rlc3RbLTFdID09ICdcbicgfHwgbV9kZXN0Wy0x
XSA9PSAnXHInKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2Rlc3QtLTsgLy8gcmVt
b3ZlIHRyYWlsaW5nIG5ld2xpbmVzCi0gICAgICAgICAgICAgICAgICAgICAgICBBdG9taWNTdHJp
bmcgYXR0cmlidXRlVmFsdWUobV9idWZmZXIgKyAxLCBtX2Rlc3QgLSBtX2J1ZmZlciAtIDEpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1fYXR0ck5hbWUuaXNFbXB0eSgpICYmICFhdHRy
aWJ1dGVWYWx1ZS5jb250YWlucygnLycpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
bV9hdHRyTmFtZSA9IGF0dHJpYnV0ZVZhbHVlOyAvLyBNYWtlIHRoZSBuYW1lIG1hdGNoIHRoZSB2
YWx1ZS4gKEZJWE1FOiBJcyB0aGlzIGEgV2luSUUgcXVpcms/KQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChpblZpZXdTb3VyY2VNb2RlKCkpCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1fY3VycmVudFRva2VuLmFkZFZpZXdTb3VyY2VDaGFyKCd4Jyk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGluVmlld1NvdXJjZU1vZGUoKSkKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBtX2N1cnJlbnRUb2tlbi5hZGRWaWV3U291cmNlQ2hhcigndicp
OwotCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobV9jdXJyZW50VG9rZW4uYmVnaW5UYWcg
JiYgbV9jdXJyZW50VG9rZW4udGFnTmFtZSA9PSBzY3JpcHRUYWcgJiYgIWluVmlld1NvdXJjZU1v
ZGUoKSAmJiAhbV90cmVlQnVpbGRlci0+c2tpcE1vZGUoKSAmJiBtX2F0dHJOYW1lID09IHNyY0F0
dHIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgY29udGV4dChtX3Jhd0F0
dHJpYnV0ZUJlZm9yZVZhbHVlLmRhdGEoKSwgbV9yYXdBdHRyaWJ1dGVCZWZvcmVWYWx1ZS5zaXpl
KCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh4c3NBdWRpdG9yKCkgJiYgIXhz
c0F1ZGl0b3IoKS0+Y2FuTG9hZEV4dGVybmFsU2NyaXB0RnJvbVNyYyhhdHRyaWJ1dGVWYWx1ZSkp
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZVZhbHVlID0gYmxhbmtV
UkwoKS5zdHJpbmcoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
ICAgICAgICAgICAgbV9jdXJyZW50VG9rZW4uYWRkQXR0cmlidXRlKG1fYXR0ck5hbWUsIGF0dHJp
YnV0ZVZhbHVlLCBpblZpZXdTb3VyY2VNb2RlKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAg
bV9kZXN0ID0gbV9idWZmZXI7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5zZXRUYWdT
dGF0ZShTZWFyY2hBdHRyaWJ1dGUpOwotICAgICAgICAgICAgICAgICAgICAgICAgdHF1b3RlID0g
Tm9RdW90ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpblZpZXdTb3VyY2VNb2RlKCkp
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9jdXJyZW50VG9rZW4uYWRkVmlld1NvdXJj
ZUNoYXIoY3VyY2hhcik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzcmMuYWR2YW5jZVBhc3RO
b25OZXdsaW5lKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICptX2Rlc3Qr
KyA9IGN1cmNoYXI7Ci0gICAgICAgICAgICAgICAgc3JjLmFkdmFuY2UobV9saW5lTnVtYmVyKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFZhbHVlOgot
ICAgICAgICAgICAgd2hpbGUgKCFzcmMuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAgY2hl
Y2tCdWZmZXIoKTsKLSAgICAgICAgICAgICAgICBVQ2hhciBjdXJjaGFyID0gKnNyYzsKLSAgICAg
ICAgICAgICAgICBpZiAoY3VyY2hhciA8PSAnPicgJiYgIXNyYy5lc2NhcGVkKCkpIHsKLSAgICAg
ICAgICAgICAgICAgICAgLy8gcGFyc2UgRW50aXRpZXMKLSAgICAgICAgICAgICAgICAgICAgaWYg
KGN1cmNoYXIgPT0gJyYnKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzcmMuYWR2YW5jZVBh
c3ROb25OZXdsaW5lKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IHBhcnNlRW50
aXR5KHNyYywgbV9kZXN0LCBzdGF0ZSwgY0J1ZmZlclBvcywgdHJ1ZSwgdHJ1ZSk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgICAgICAvLyBubyBxdW90ZXMuIEV2ZXJ5IHNwYWNlIG1lYW5zIGVuZCBvZiB2YWx1ZQot
ICAgICAgICAgICAgICAgICAgICAvLyAnLycgZG9lcyBub3QgZGVsaW1pdCBpbiBJRSEKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKGlzQVNDSUlTcGFjZShjdXJjaGFyKSB8fCBjdXJjaGFyID09ICc+
JykgewotICAgICAgICAgICAgICAgICAgICAgICAgQXRvbWljU3RyaW5nIGF0dHJpYnV0ZVZhbHVl
KG1fYnVmZmVyICsgMSwgbV9kZXN0IC0gbV9idWZmZXIgLSAxKTsKLQotICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKG1fY3VycmVudFRva2VuLmJlZ2luVGFnICYmIG1fY3VycmVudFRva2VuLnRh
Z05hbWUgPT0gc2NyaXB0VGFnICYmICFpblZpZXdTb3VyY2VNb2RlKCkgJiYgIW1fdHJlZUJ1aWxk
ZXItPnNraXBNb2RlKCkgJiYgbV9hdHRyTmFtZSA9PSBzcmNBdHRyKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgU3RyaW5nIGNvbnRleHQobV9yYXdBdHRyaWJ1dGVCZWZvcmVWYWx1ZS5k
YXRhKCksIG1fcmF3QXR0cmlidXRlQmVmb3JlVmFsdWUuc2l6ZSgpKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoeHNzQXVkaXRvcigpICYmICF4c3NBdWRpdG9yKCktPmNhbkxvYWRF
eHRlcm5hbFNjcmlwdEZyb21TcmMoYXR0cmlidXRlVmFsdWUpKQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBhdHRyaWJ1dGVWYWx1ZSA9IGJsYW5rVVJMKCkuc3RyaW5nKCk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIG1fY3VycmVu
dFRva2VuLmFkZEF0dHJpYnV0ZShtX2F0dHJOYW1lLCBhdHRyaWJ1dGVWYWx1ZSwgaW5WaWV3U291
cmNlTW9kZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpblZpZXdTb3VyY2VNb2Rl
KCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9jdXJyZW50VG9rZW4uYWRkVmlld1Nv
dXJjZUNoYXIoJ3YnKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fZGVzdCA9IG1fYnVmZmVy
OwotICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUuc2V0VGFnU3RhdGUoU2VhcmNoQXR0cmli
dXRlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgKm1fZGVzdCsrID0gY3Vy
Y2hhcjsKLSAgICAgICAgICAgICAgICBzcmMuYWR2YW5jZShtX2xpbmVOdW1iZXIpOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgU2VhcmNoRW5kOgotICAg
ICAgICB7Ci0gICAgICAgICAgICB3aGlsZSAoIXNyYy5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAg
ICAgICBVQ2hhciBjaCA9ICpzcmM7Ci0gICAgICAgICAgICAgICAgaWYgKGNoID09ICc+JyB8fCBj
aCA9PSAnPCcpCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGlm
IChjaCA9PSAnLycpCi0gICAgICAgICAgICAgICAgICAgIG1fY3VycmVudFRva2VuLnNlbGZDbG9z
aW5nVGFnID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBpZiAoaW5WaWV3U291cmNlTW9kZSgpKQot
ICAgICAgICAgICAgICAgICAgICBtX2N1cnJlbnRUb2tlbi5hZGRWaWV3U291cmNlQ2hhcihjaCk7
Ci0gICAgICAgICAgICAgICAgc3JjLmFkdmFuY2UobV9saW5lTnVtYmVyKTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGlmIChzcmMuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIGJyZWFr
OwotCi0gICAgICAgICAgICBzZWFyY2hDb3VudCA9IDA7IC8vIFN0b3AgbG9va2luZyBmb3IgJzwh
LS0nIHNlcXVlbmNlCi0gICAgICAgICAgICBzdGF0ZS5zZXRUYWdTdGF0ZShOb1RhZyk7Ci0gICAg
ICAgICAgICB0cXVvdGUgPSBOb1F1b3RlOwotCi0gICAgICAgICAgICBpZiAoKnNyYyAhPSAnPCcp
Ci0gICAgICAgICAgICAgICAgc3JjLmFkdmFuY2UobV9saW5lTnVtYmVyKTsKLQotICAgICAgICAg
ICAgaWYgKG1fY3VycmVudFRva2VuLnRhZ05hbWUgPT0gbnVsbEF0b20pIHsgLy9zdG9wIGlmIHRh
ZyBpcyB1bmtub3duCi0gICAgICAgICAgICAgICAgbV9jQnVmZmVyUG9zID0gY0J1ZmZlclBvczsK
LSAgICAgICAgICAgICAgICByZXR1cm4gc3RhdGU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIEF0b21pY1N0cmluZyB0YWdOYW1lID0gbV9jdXJyZW50VG9rZW4udGFnTmFtZTsKLQotICAg
ICAgICAgICAgLy8gSGFuZGxlIDxzY3JpcHQgc3JjPSJmb28iLz4gbGlrZSBNb3ppbGxhL09wZXJh
LiBXZSBoYXZlIHRvIGRvIHRoaXMgbm93IGZvciBEYXNoYm9hcmQKLSAgICAgICAgICAgIC8vIGNv
bXBhdGliaWxpdHkuCi0gICAgICAgICAgICBib29sIGlzU2VsZkNsb3NpbmdTY3JpcHQgPSBtX2N1
cnJlbnRUb2tlbi5zZWxmQ2xvc2luZ1RhZyAmJiBtX2N1cnJlbnRUb2tlbi5iZWdpblRhZyAmJiBt
X2N1cnJlbnRUb2tlbi50YWdOYW1lID09IHNjcmlwdFRhZzsKLSAgICAgICAgICAgIGJvb2wgYmVn
aW5UYWcgPSAhbV9jdXJyZW50VG9rZW4uc2VsZkNsb3NpbmdUYWcgJiYgbV9jdXJyZW50VG9rZW4u
YmVnaW5UYWc7Ci0gICAgICAgICAgICBpZiAobV9jdXJyZW50VG9rZW4uYmVnaW5UYWcgJiYgbV9j
dXJyZW50VG9rZW4udGFnTmFtZSA9PSBzY3JpcHRUYWcgJiYgIWluVmlld1NvdXJjZU1vZGUoKSAm
JiAhbV90cmVlQnVpbGRlci0+c2tpcE1vZGUoKSkgewotICAgICAgICAgICAgICAgIEF0dHJpYnV0
ZSogYSA9IDA7Ci0gICAgICAgICAgICAgICAgbV9zY3JpcHRUYWdTcmNBdHRyVmFsdWUgPSBTdHJp
bmcoKTsKLSAgICAgICAgICAgICAgICBtX3NjcmlwdFRhZ0NoYXJzZXRBdHRyVmFsdWUgPSBTdHJp
bmcoKTsKLSAgICAgICAgICAgICAgICBpZiAobV9jdXJyZW50VG9rZW4uYXR0cnMgJiYgIW1fZnJh
Z21lbnQpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGRvY3VtZW50KCktPmZyYW1lKCkgJiYg
ZG9jdW1lbnQoKS0+ZnJhbWUoKS0+c2NyaXB0KCktPmNhbkV4ZWN1dGVTY3JpcHRzKE5vdEFib3V0
VG9FeGVjdXRlU2NyaXB0KSkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChhID0gbV9j
dXJyZW50VG9rZW4uYXR0cnMtPmdldEF0dHJpYnV0ZUl0ZW0oc3JjQXR0cikpKQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG1fc2NyaXB0VGFnU3JjQXR0clZhbHVlID0gZG9jdW1lbnQoKS0+
Y29tcGxldGVVUkwoZGVwcmVjYXRlZFBhcnNlVVJMKGEtPnZhbHVlKCkpKS5zdHJpbmcoKTsKLSAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgUmVmUHRyPE5vZGU+IG4gPSBwcm9jZXNzVG9rZW4oKTsKLSAgICAgICAgICAg
IG1fY0J1ZmZlclBvcyA9IGNCdWZmZXJQb3M7Ci0gICAgICAgICAgICBpZiAobiB8fCBpblZpZXdT
b3VyY2VNb2RlKCkpIHsKLSAgICAgICAgICAgICAgICBTdGF0ZSBzYXZlZFN0YXRlID0gc3RhdGU7
Ci0gICAgICAgICAgICAgICAgU2VnbWVudGVkU3RyaW5nIHNhdmVkU3JjID0gc3JjOwotICAgICAg
ICAgICAgICAgIGxvbmcgc2F2ZWRMaW5lbm8gPSBtX2xpbmVOdW1iZXI7Ci0gICAgICAgICAgICAg
ICAgaWYgKCh0YWdOYW1lID09IHByZVRhZyB8fCB0YWdOYW1lID09IGxpc3RpbmdUYWcpICYmICFp
blZpZXdTb3VyY2VNb2RlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGJlZ2luVGFnKQot
ICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUuc2V0RGlzY2FyZExGKHRydWUpOyAvLyBEaXNj
YXJkIHRoZSBmaXJzdCBMRiBhZnRlciB3ZSBvcGVuIGEgcHJlLgotICAgICAgICAgICAgICAgIH0g
ZWxzZSBpZiAodGFnTmFtZSA9PSBzY3JpcHRUYWcpIHsKLSAgICAgICAgICAgICAgICAgICAgQVNT
RVJUKCFtX3NjcmlwdE5vZGUpOwotICAgICAgICAgICAgICAgICAgICBtX3NjcmlwdE5vZGUgPSBz
dGF0aWNfcG9pbnRlcl9jYXN0PEhUTUxTY3JpcHRFbGVtZW50PihuKTsKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKG1fc2NyaXB0Tm9kZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fc2NyaXB0
VGFnQ2hhcnNldEF0dHJWYWx1ZSA9IG1fc2NyaXB0Tm9kZS0+c2NyaXB0Q2hhcnNldCgpOwotICAg
ICAgICAgICAgICAgICAgICBpZiAoYmVnaW5UYWcpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IG1fc2VhcmNoU3RvcHBlciA9IHNjcmlwdEVuZDsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1f
c2VhcmNoU3RvcHBlckxlbmd0aCA9IDg7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5z
ZXRJblNjcmlwdCh0cnVlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gcGFyc2VO
b25IVE1MVGV4dChzcmMsIHN0YXRlKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChp
c1NlbGZDbG9zaW5nU2NyaXB0KSB7IC8vIEhhbmRsZSA8c2NyaXB0IHNyYz0iZm9vIi8+Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBzdGF0ZS5zZXRJblNjcmlwdCh0cnVlKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHN0YXRlID0gc2NyaXB0SGFuZGxlcihzdGF0ZSk7Ci0gICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRhZ05hbWUgPT0gc3R5bGVUYWcp
IHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGJlZ2luVGFnKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBtX3NlYXJjaFN0b3BwZXIgPSBzdHlsZUVuZDsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIG1fc2VhcmNoU3RvcHBlckxlbmd0aCA9IDc7Ci0gICAgICAgICAgICAgICAgICAgICAgICBz
dGF0ZS5zZXRJblN0eWxlKHRydWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSBw
YXJzZU5vbkhUTUxUZXh0KHNyYywgc3RhdGUpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgfSBlbHNlIGlmICh0YWdOYW1lID09IHRleHRhcmVhVGFnKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGlmIChiZWdpblRhZykgewotICAgICAgICAgICAgICAgICAgICAgICAgbV9z
ZWFyY2hTdG9wcGVyID0gdGV4dGFyZWFFbmQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX3Nl
YXJjaFN0b3BwZXJMZW5ndGggPSAxMDsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLnNl
dEluVGV4dEFyZWEodHJ1ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IHBhcnNl
Tm9uSFRNTFRleHQoc3JjLCBzdGF0ZSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICB9IGVsc2UgaWYgKHRhZ05hbWUgPT0gdGl0bGVUYWcpIHsKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKGJlZ2luVGFnKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX3NlYXJjaFN0
b3BwZXIgPSB0aXRsZUVuZDsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fc2VhcmNoU3RvcHBl
ckxlbmd0aCA9IDc7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5zZXRJblRpdGxlKHRy
dWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSBwYXJzZU5vbkhUTUxUZXh0KHNy
Yywgc3RhdGUpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSBlbHNl
IGlmICh0YWdOYW1lID09IHhtcFRhZykgewotICAgICAgICAgICAgICAgICAgICBpZiAoYmVnaW5U
YWcpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fc2VhcmNoU3RvcHBlciA9IHhtcEVuZDsK
LSAgICAgICAgICAgICAgICAgICAgICAgIG1fc2VhcmNoU3RvcHBlckxlbmd0aCA9IDU7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBzdGF0ZS5zZXRJblhtcCh0cnVlKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHN0YXRlID0gcGFyc2VOb25IVE1MVGV4dChzcmMsIHN0YXRlKTsKLSAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGFnTmFtZSA9PSBpZnJh
bWVUYWcpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGJlZ2luVGFnKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBtX3NlYXJjaFN0b3BwZXIgPSBpZnJhbWVFbmQ7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBtX3NlYXJjaFN0b3BwZXJMZW5ndGggPSA4OwotICAgICAgICAgICAgICAgICAg
ICAgICAgc3RhdGUuc2V0SW5JRnJhbWUodHJ1ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBz
dGF0ZSA9IHBhcnNlTm9uSFRNTFRleHQoc3JjLCBzdGF0ZSk7Ci0gICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKHNyYy5pc0VtcHR5KCkg
JiYgKHN0YXRlLmluVGl0bGUoKSB8fCBpblZpZXdTb3VyY2VNb2RlKCkpICYmICFzdGF0ZS5pbkNv
bW1lbnQoKSAmJiAhKHN0YXRlLmluU2NyaXB0KCkgJiYgbV9jdXJyZW50U2NyaXB0VGFnU3RhcnRM
aW5lTnVtYmVyKSkgewotICAgICAgICAgICAgICAgICAgICAvLyBXZSBqdXN0IGF0ZSB0aGUgcmVz
dCBvZiB0aGUgZG9jdW1lbnQgYXMgdGhlICN0ZXh0IG5vZGUgdW5kZXIgdGhlIHNwZWNpYWwgdGFn
IQotICAgICAgICAgICAgICAgICAgICAvLyBSZXNldCB0aGUgc3RhdGUgdGhlbiByZXRva2VuaXpl
IHdpdGhvdXQgc3BlY2lhbCBoYW5kbGluZy4KLSAgICAgICAgICAgICAgICAgICAgLy8gTGV0IHRo
ZSBwYXJzZXIgY2xlYW4gdXAgdGhlIG1pc3NpbmcgY2xvc2UgdGFnLgotICAgICAgICAgICAgICAg
ICAgICAvLyBGSVhNRTogVGhpcyBpcyBpbmNvcnJlY3QsIGJlY2F1c2Ugc3JjLmlzRW1wdHkoKSBk
b2Vzbid0IG1lYW4gd2UncmUKLSAgICAgICAgICAgICAgICAgICAgLy8gYXQgdGhlIGVuZCBvZiB0
aGUgZG9jdW1lbnQgdW5sZXNzIG1fbm9Nb3JlRGF0YSBpcyBhbHNvIHRydWUuIFdlIG5lZWQKLSAg
ICAgICAgICAgICAgICAgICAgLy8gdG8gZGV0ZWN0IHRoaXMgY2FzZSBlbHNld2hlcmUsIGFuZCBz
YXZlIHRoZSBzdGF0ZSBzb21ld2hlcmUgb3RoZXIKLSAgICAgICAgICAgICAgICAgICAgLy8gdGhh
biBhIGxvY2FsIHZhcmlhYmxlLgotICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IHNhdmVkU3Rh
dGU7Ci0gICAgICAgICAgICAgICAgICAgIHNyYyA9IHNhdmVkU3JjOwotICAgICAgICAgICAgICAg
ICAgICBtX2xpbmVOdW1iZXIgPSBzYXZlZExpbmVubzsKLSAgICAgICAgICAgICAgICAgICAgbV9z
Y3JpcHRDb2RlU2l6ZSA9IDA7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgaWYgKHRhZ05hbWUgPT0gcGxhaW50ZXh0VGFnKQotICAgICAgICAgICAgICAgIHN0
YXRlLnNldEluUGxhaW5UZXh0KGJlZ2luVGFnKTsKLSAgICAgICAgICAgIHJldHVybiBzdGF0ZTsg
Ly8gRmluaXNoZWQgcGFyc2luZyB0YWchCi0gICAgICAgIH0KLSAgICAgICAgfSAvLyBlbmQgc3dp
dGNoCi0gICAgfQotICAgIG1fY0J1ZmZlclBvcyA9IGNCdWZmZXJQb3M7Ci0gICAgcmV0dXJuIHN0
YXRlOwotfQotCi1pbmxpbmUgYm9vbCBMZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXI6OmNvbnRpbnVl
UHJvY2Vzc2luZyhpbnQmIHByb2Nlc3NlZENvdW50LCBkb3VibGUgc3RhcnRUaW1lLCBTdGF0ZSAm
c3RhdGUpCi17Ci0gICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBiZSBjaGVja2luZyBlbGFwc2VkIHRp
bWUgd2l0aCBldmVyeSBjaGFyYWN0ZXIsIHNvIHdlIG9ubHkgY2hlY2sgYWZ0ZXIgd2UndmUKLSAg
ICAvLyBwcm9jZXNzZWQgYSBjZXJ0YWluIG51bWJlciBvZiBjaGFyYWN0ZXJzLgotICAgIGJvb2wg
YWxsb3dlZFlpZWxkID0gc3RhdGUuYWxsb3dZaWVsZCgpOwotICAgIHN0YXRlLnNldEFsbG93WWll
bGQoZmFsc2UpOwotICAgIGlmICghc3RhdGUubG9hZGluZ0V4dFNjcmlwdCgpICYmICFzdGF0ZS5m
b3JjZVN5bmNocm9ub3VzKCkgJiYgIW1fZXhlY3V0aW5nU2NyaXB0ICYmIChwcm9jZXNzZWRDb3Vu
dCA+IG1fdG9rZW5pemVyQ2h1bmtTaXplIHx8IGFsbG93ZWRZaWVsZCkpIHsKLSAgICAgICAgcHJv
Y2Vzc2VkQ291bnQgPSAwOwotICAgICAgICBpZiAoY3VycmVudFRpbWUoKSAtIHN0YXJ0VGltZSA+
IG1fdG9rZW5pemVyVGltZURlbGF5KSB7Ci0gICAgICAgICAgICAvKiBGSVhNRTogV2UnZCBsaWtl
IHRvIHlpZWxkIGFnZ3Jlc3NpdmVseSB0byBnaXZlIHN0eWxlc2hlZXRzIHRoZSBvcHBvcnR1bml0
eSB0bwotICAgICAgICAgICAgICAgbG9hZCwgYnV0IHRoaXMgaHVydHMgb3ZlcmFsbCBwZXJmb3Jt
YW5jZSBvbiBzbG93ZXIgbWFjaGluZXMuICBGb3Igbm93IHR1cm4gdGhpcwotICAgICAgICAgICAg
ICAgb2ZmLgotICAgICAgICAgICAgfHwgKCFkb2N1bWVudCgpLT5oYXZlU3R5bGVzaGVldHNMb2Fk
ZWQoKSAmJgotICAgICAgICAgICAgICAgIChkb2N1bWVudCgpLT5kb2N1bWVudEVsZW1lbnQoKS0+
aWQoKSAhPSBJRF9IVE1MIHx8IGRvY3VtZW50KCktPmJvZHkoKSkpKSB7Ki8KLSAgICAgICAgICAg
IC8vIFNjaGVkdWxlIHRoZSB0aW1lciB0byBrZWVwIHByb2Nlc3NpbmcgYXMgc29vbiBhcyBwb3Nz
aWJsZS4KLSAgICAgICAgICAgIG1fdGltZXIuc3RhcnRPbmVTaG90KDApOwotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHJvY2Vzc2VkQ291bnQrKzsK
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotLy8gVHVybnMgdGhlIHN0YXRlbWFjaGluZSBvbmUgY3Jh
bmsgdXNpbmcgdGhlIHBhc3NlZCBpbiBTdGF0ZSBvYmplY3QuCi0vLyBUaGlzIGRvZXMgbm90IG1v
ZGlmeSBtX3N0YXRlIGRpcmVjdGx5IGluIG9yZGVyIHRvIGJlIHJlZW50cmFudC4KLUFMV0FZU19J
TkxJTkUgdm9pZCBMZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXI6OmFkdmFuY2UoU3RhdGUmIHN0YXRl
KQotewotICAgIC8vIGRvIHdlIG5lZWQgdG8gZW5sYXJnZSB0aGUgYnVmZmVyPwotICAgIGNoZWNr
QnVmZmVyKCk7Ci0KLSAgICBVQ2hhciBjYyA9ICptX3NyYzsKLQotICAgIGJvb2wgd2FzU2tpcExG
ID0gc3RhdGUuc2tpcExGKCk7Ci0gICAgaWYgKHdhc1NraXBMRikKLSAgICAgICAgc3RhdGUuc2V0
U2tpcExGKGZhbHNlKTsKLQotICAgIGlmICh3YXNTa2lwTEYgJiYgKGNjID09ICdcbicpKQotICAg
ICAgICBtX3NyYy5hZHZhbmNlKCk7Ci0gICAgZWxzZSBpZiAoc3RhdGUubmVlZHNTcGVjaWFsV3Jp
dGVIYW5kbGluZygpKSB7Ci0gICAgICAgIC8vIGl0J3MgaW1wb3J0YW50IHRvIGtlZXAgbmVlZHNT
cGVjaWFsV3JpdGVIYW5kbGluZyB3aXRoIHRoZSBmbGFncyB0aGlzIGJsb2NrIHRlc3RzCi0gICAg
ICAgIGlmIChzdGF0ZS5oYXNFbnRpdHlTdGF0ZSgpKQotICAgICAgICAgICAgc3RhdGUgPSBwYXJz
ZUVudGl0eShtX3NyYywgbV9kZXN0LCBzdGF0ZSwgbV9jQnVmZmVyUG9zLCBmYWxzZSwgc3RhdGUu
aGFzVGFnU3RhdGUoKSk7Ci0gICAgICAgIGVsc2UgaWYgKHN0YXRlLmluUGxhaW5UZXh0KCkpCi0g
ICAgICAgICAgICBzdGF0ZSA9IHBhcnNlVGV4dChtX3NyYywgc3RhdGUpOwotICAgICAgICBlbHNl
IGlmIChzdGF0ZS5pbkFueU5vbkhUTUxUZXh0KCkpCi0gICAgICAgICAgICBzdGF0ZSA9IHBhcnNl
Tm9uSFRNTFRleHQobV9zcmMsIHN0YXRlKTsKLSAgICAgICAgZWxzZSBpZiAoc3RhdGUuaW5Db21t
ZW50KCkpCi0gICAgICAgICAgICBzdGF0ZSA9IHBhcnNlQ29tbWVudChtX3NyYywgc3RhdGUpOwot
ICAgICAgICBlbHNlIGlmIChzdGF0ZS5pbkRvY3R5cGUoKSkKLSAgICAgICAgICAgIHN0YXRlID0g
cGFyc2VEb2N0eXBlKG1fc3JjLCBzdGF0ZSk7Ci0gICAgICAgIGVsc2UgaWYgKHN0YXRlLmluU2Vy
dmVyKCkpCi0gICAgICAgICAgICBzdGF0ZSA9IHBhcnNlU2VydmVyKG1fc3JjLCBzdGF0ZSk7Ci0g
ICAgICAgIGVsc2UgaWYgKHN0YXRlLmluUHJvY2Vzc2luZ0luc3RydWN0aW9uKCkpCi0gICAgICAg
ICAgICBzdGF0ZSA9IHBhcnNlUHJvY2Vzc2luZ0luc3RydWN0aW9uKG1fc3JjLCBzdGF0ZSk7Ci0g
ICAgICAgIGVsc2UgaWYgKHN0YXRlLmhhc1RhZ1N0YXRlKCkpCi0gICAgICAgICAgICBzdGF0ZSA9
IHBhcnNlVGFnKG1fc3JjLCBzdGF0ZSk7Ci0gICAgICAgIGVsc2UgaWYgKHN0YXRlLnN0YXJ0VGFn
KCkpIHsKLSAgICAgICAgICAgIHN0YXRlLnNldFN0YXJ0VGFnKGZhbHNlKTsKLQotICAgICAgICAg
ICAgc3dpdGNoIChjYykgewotICAgICAgICAgICAgY2FzZSAnLyc6Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICBjYXNlICchJzogewotICAgICAgICAgICAgICAgIC8vIDwhLS0g
Y29tbWVudCAtLT4gb3IgPCFET0NUWVBFIC4uLj4KLSAgICAgICAgICAgICAgICBzZWFyY2hDb3Vu
dCA9IDE7IC8vIExvb2sgZm9yICc8IS0tJyBzZXF1ZW5jZSB0byBzdGFydCBjb21tZW50IG9yICc8
IURPQ1RZUEUnIHNlcXVlbmNlIHRvIHN0YXJ0IGRvY3R5cGUKLSAgICAgICAgICAgICAgICBtX2Rv
Y3R5cGVTZWFyY2hDb3VudCA9IDE7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBjYXNlICc/JzogewotICAgICAgICAgICAgICAgIC8vIHhtbCBwcm9j
ZXNzaW5nIGluc3RydWN0aW9uCi0gICAgICAgICAgICAgICAgc3RhdGUuc2V0SW5Qcm9jZXNzaW5n
SW5zdHJ1Y3Rpb24odHJ1ZSk7Ci0gICAgICAgICAgICAgICAgdHF1b3RlID0gTm9RdW90ZTsKLSAg
ICAgICAgICAgICAgICBzdGF0ZSA9IHBhcnNlUHJvY2Vzc2luZ0luc3RydWN0aW9uKG1fc3JjLCBz
dGF0ZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgY2FzZSAnJSc6Ci0gICAgICAgICAgICAgICAgaWYgKCFtX2Jyb2tlblNlcnZlcikgewotICAg
ICAgICAgICAgICAgICAgICAvLyA8JSBzZXJ2ZXIgc3R1ZmYsIGhhbmRsZSBhcyBjb21tZW50ICU+
Ci0gICAgICAgICAgICAgICAgICAgIHN0YXRlLnNldEluU2VydmVyKHRydWUpOwotICAgICAgICAg
ICAgICAgICAgICB0cXVvdGUgPSBOb1F1b3RlOwotICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9
IHBhcnNlU2VydmVyKG1fc3JjLCBzdGF0ZSk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgLy8gZWxzZSBmYWxsIHRocm91Z2gK
LSAgICAgICAgICAgIGRlZmF1bHQ6IHsKLSAgICAgICAgICAgICAgICBpZiAoKChjYyA+PSAnYScp
ICYmIChjYyA8PSAneicpKSB8fCAoKGNjID49ICdBJykgJiYgKGNjIDw9ICdaJykpKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIC8vIFN0YXJ0IG9mIGEgU3RhcnQtVGFnCi0gICAgICAgICAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gSW52YWxpZCB0YWcKLSAgICAgICAgICAg
ICAgICAgICAgLy8gQWRkIGFzIGlzCi0gICAgICAgICAgICAgICAgICAgICptX2Rlc3QgPSAnPCc7
Ci0gICAgICAgICAgICAgICAgICAgIG1fZGVzdCsrOwotICAgICAgICAgICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgfTsgLy8g
ZW5kIGNhc2UKLQotICAgICAgICAgICAgcHJvY2Vzc1Rva2VuKCk7Ci0KLSAgICAgICAgICAgIG1f
Y0J1ZmZlclBvcyA9IDA7Ci0gICAgICAgICAgICBzdGF0ZS5zZXRUYWdTdGF0ZShUYWdOYW1lKTsK
LSAgICAgICAgICAgIHN0YXRlID0gcGFyc2VUYWcobV9zcmMsIHN0YXRlKTsKLSAgICAgICAgfQot
ICAgIH0gZWxzZSBpZiAoY2MgPT0gJyYnICYmICFtX3NyYy5lc2NhcGVkKCkpIHsKLSAgICAgICAg
bV9zcmMuYWR2YW5jZVBhc3ROb25OZXdsaW5lKCk7Ci0gICAgICAgIHN0YXRlID0gcGFyc2VFbnRp
dHkobV9zcmMsIG1fZGVzdCwgc3RhdGUsIG1fY0J1ZmZlclBvcywgdHJ1ZSwgc3RhdGUuaGFzVGFn
U3RhdGUoKSk7Ci0gICAgfSBlbHNlIGlmIChjYyA9PSAnPCcgJiYgIW1fc3JjLmVzY2FwZWQoKSkg
ewotICAgICAgICBtX2N1cnJlbnRUYWdTdGFydExpbmVOdW1iZXIgPSBtX2xpbmVOdW1iZXI7Ci0g
ICAgICAgIG1fc3JjLmFkdmFuY2VQYXN0Tm9uTmV3bGluZSgpOwotICAgICAgICBzdGF0ZS5zZXRT
dGFydFRhZyh0cnVlKTsKLSAgICAgICAgc3RhdGUuc2V0RGlzY2FyZExGKGZhbHNlKTsKLSAgICB9
IGVsc2UgaWYgKGNjID09ICdcbicgfHwgY2MgPT0gJ1xyJykgewotICAgICAgICBpZiAoc3RhdGUu
ZGlzY2FyZExGKCkpCi0gICAgICAgICAgICAvLyBJZ25vcmUgdGhpcyBMRgotICAgICAgICAgICAg
c3RhdGUuc2V0RGlzY2FyZExGKGZhbHNlKTsgLy8gV2UgaGF2ZSBkaXNjYXJkZWQgMSBMRgotICAg
ICAgICBlbHNlIHsKLSAgICAgICAgICAgIC8vIFByb2Nlc3MgdGhpcyBMRgotICAgICAgICAgICAg
Km1fZGVzdCsrID0gJ1xuJzsKLSAgICAgICAgICAgIGlmIChjYyA9PSAnXHInICYmICFtX3NyYy5l
eGNsdWRlTGluZU51bWJlcnMoKSkKLSAgICAgICAgICAgICAgICBtX2xpbmVOdW1iZXIrKzsKLSAg
ICAgICAgfQotCi0gICAgICAgIC8qIENoZWNrIGZvciBNUy1ET1MgQ1JMRiBzZXF1ZW5jZSAqLwot
ICAgICAgICBpZiAoY2MgPT0gJ1xyJykKLSAgICAgICAgICAgIHN0YXRlLnNldFNraXBMRih0cnVl
KTsKLSAgICAgICAgbV9zcmMuYWR2YW5jZShtX2xpbmVOdW1iZXIpOwotICAgIH0gZWxzZSB7Ci0g
ICAgICAgIHN0YXRlLnNldERpc2NhcmRMRihmYWxzZSk7Ci0gICAgICAgICptX2Rlc3QrKyA9IGNj
OwotICAgICAgICBtX3NyYy5hZHZhbmNlUGFzdE5vbk5ld2xpbmUoKTsKLSAgICB9Ci19Ci0KLXZv
aWQgTGVnYWN5SFRNTERvY3VtZW50UGFyc2VyOjp3aWxsV3JpdGVIVE1MKGNvbnN0IFNlZ21lbnRl
ZFN0cmluZyYgc291cmNlKQotewotICAgICNpZiBFTkFCTEUoSU5TUEVDVE9SKQotICAgICAgICBp
ZiAoSW5zcGVjdG9yVGltZWxpbmVBZ2VudCogdGltZWxpbmVBZ2VudCA9IGRvY3VtZW50KCktPmlu
c3BlY3RvclRpbWVsaW5lQWdlbnQoKSkKLSAgICAgICAgICAgIHRpbWVsaW5lQWdlbnQtPndpbGxX
cml0ZUhUTUwoc291cmNlLmxlbmd0aCgpLCBtX2xpbmVOdW1iZXIpOwotICAgICNlbmRpZgotfQot
Ci12b2lkIExlZ2FjeUhUTUxEb2N1bWVudFBhcnNlcjo6ZGlkV3JpdGVIVE1MKCkKLXsKLSAgICAj
aWYgRU5BQkxFKElOU1BFQ1RPUikKLSAgICAgICAgaWYgKEluc3BlY3RvclRpbWVsaW5lQWdlbnQq
IHRpbWVsaW5lQWdlbnQgPSBkb2N1bWVudCgpLT5pbnNwZWN0b3JUaW1lbGluZUFnZW50KCkpCi0g
ICAgICAgICAgICB0aW1lbGluZUFnZW50LT5kaWRXcml0ZUhUTUwobV9saW5lTnVtYmVyKTsKLSAg
ICAjZW5kaWYKLX0KLQotdm9pZCBMZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXI6OndyaXRlKGNvbnN0
IFNlZ21lbnRlZFN0cmluZyYgc3RyLCBib29sIGFwcGVuZERhdGEpCi17Ci0gICAgaWYgKCFtX2J1
ZmZlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1fcGFyc2VyU3RvcHBlZCkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgU2VnbWVudGVkU3RyaW5nIHNvdXJjZShzdHIpOwotICAgIGlmICht
X2V4ZWN1dGluZ1NjcmlwdCkKLSAgICAgICAgc291cmNlLnNldEV4Y2x1ZGVMaW5lTnVtYmVycygp
OwotCi0gICAgaWYgKChtX2V4ZWN1dGluZ1NjcmlwdCAmJiBhcHBlbmREYXRhKSB8fCAhbV9wZW5k
aW5nU2NyaXB0cy5pc0VtcHR5KCkpIHsKLSAgICAgICAgLy8gZG9uJ3QgcGFyc2U7IHdlIHdpbGwg
ZG8gdGhpcyBsYXRlcgotICAgICAgICBpZiAobV9jdXJyZW50UHJlcGVuZGluZ1NyYykKLSAgICAg
ICAgICAgIG1fY3VycmVudFByZXBlbmRpbmdTcmMtPmFwcGVuZChzb3VyY2UpOwotICAgICAgICBl
bHNlIHsKLSAgICAgICAgICAgIG1fcGVuZGluZ1NyYy5hcHBlbmQoc291cmNlKTsKLSNpZiBQUkVM
T0FEX1NDQU5ORVJfRU5BQkxFRAotICAgICAgICAgICAgaWYgKG1fcHJlbG9hZFNjYW5uZXIgJiYg
bV9wcmVsb2FkU2Nhbm5lci0+aW5Qcm9ncmVzcygpICYmIGFwcGVuZERhdGEpCi0gICAgICAgICAg
ICAgICAgbV9wcmVsb2FkU2Nhbm5lci0+d3JpdGUoc291cmNlKTsKLSNlbmRpZgotICAgICAgICB9
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSNpZiBQUkVMT0FEX1NDQU5ORVJfRU5BQkxFRAot
ICAgIGlmIChtX3ByZWxvYWRTY2FubmVyICYmIG1fcHJlbG9hZFNjYW5uZXItPmluUHJvZ3Jlc3Mo
KSAmJiBhcHBlbmREYXRhKQotICAgICAgICBtX3ByZWxvYWRTY2FubmVyLT5lbmQoKTsKLSNlbmRp
ZgotCi0gICAgaWYgKCFtX3NyYy5pc0VtcHR5KCkpCi0gICAgICAgIG1fc3JjLmFwcGVuZChzb3Vy
Y2UpOwotICAgIGVsc2UKLSAgICAgICAgc2V0U3JjKHNvdXJjZSk7Ci0KLSAgICAvLyBPbmNlIGEg
dGltZXIgaXMgc2V0LCBpdCBoYXMgY29udHJvbCBvZiB3aGVuIHRoZSBwYXJzZXIgY29udGludWVz
LgotICAgIGlmIChtX3RpbWVyLmlzQWN0aXZlKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGJv
b2wgd2FzSW5Xcml0ZSA9IG1faW5Xcml0ZTsKLSAgICBtX2luV3JpdGUgPSB0cnVlOwotCi0gICAg
d2lsbFdyaXRlSFRNTChzb3VyY2UpOwotCi0gICAgRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQoKS0+
ZnJhbWUoKTsKLSAgICBTdGF0ZSBzdGF0ZSA9IG1fc3RhdGU7Ci0gICAgaW50IHByb2Nlc3NlZENv
dW50ID0gMDsKLSAgICBkb3VibGUgc3RhcnRUaW1lID0gY3VycmVudFRpbWUoKTsKLQotICAgIHdo
aWxlICghbV9zcmMuaXNFbXB0eSgpICYmICghZnJhbWUgfHwgIWZyYW1lLT5yZWRpcmVjdFNjaGVk
dWxlcigpLT5sb2NhdGlvbkNoYW5nZVBlbmRpbmcoKSkpIHsKLSAgICAgICAgaWYgKCFjb250aW51
ZVByb2Nlc3NpbmcocHJvY2Vzc2VkQ291bnQsIHN0YXJ0VGltZSwgc3RhdGUpKQotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGFkdmFuY2Uoc3RhdGUpOwotICAgIH0KLQotICAgIGRpZFdyaXRl
SFRNTCgpOwotCi0gICAgbV9pbldyaXRlID0gd2FzSW5Xcml0ZTsKLSAgICBtX3N0YXRlID0gc3Rh
dGU7Ci0KLSAgICBpZiAobV9ub01vcmVEYXRhICYmICFtX2luV3JpdGUgJiYgIXN0YXRlLmxvYWRp
bmdFeHRTY3JpcHQoKSAmJiAhbV9leGVjdXRpbmdTY3JpcHQgJiYgIW1fdGltZXIuaXNBY3RpdmUo
KSkKLSAgICAgICAgZW5kKCk7IC8vIHRoaXMgYWN0dWFsbHkgY2F1c2VzIHVzIHRvIGJlIGRlbGV0
ZWQKLQotICAgIC8vIEFmdGVyIHBhcnNpbmcsIGdvIGFoZWFkIGFuZCBkaXNwYXRjaCBpbWFnZSBi
ZWZvcmVsb2FkIGV2ZW50cywgYnV0IG9ubHkgaWYgd2UncmUgZG9pbmcKLSAgICAvLyBkb2N1bWVu
dCBwYXJzaW5nLiAgRm9yIGRvY3VtZW50IGZyYWdtZW50cyB3ZSB3YWl0LCBzaW5jZSB0aGV5J2xs
IGxpa2VseSBlbmQgdXAgaW4gdGhlIGRvY3VtZW50IGJ5IHRoZSB0aW1lCi0gICAgLy8gdGhlIGJl
Zm9yZWxvYWQgZXZlbnRzIGZpcmUuCi0gICAgaWYgKCFtX2ZyYWdtZW50KQotICAgICAgICBJbWFn
ZUxvYWRlcjo6ZGlzcGF0Y2hQZW5kaW5nQmVmb3JlTG9hZEV2ZW50cygpOwotfQotCi12b2lkIExl
Z2FjeUhUTUxEb2N1bWVudFBhcnNlcjo6aW5zZXJ0KGNvbnN0IFNlZ21lbnRlZFN0cmluZyYgc291
cmNlKQotewotICAgIC8vIEZJWE1FOiBmb3JjZVN5bmNocm9ub3VzIHNob3VsZCBhbHdheXMgYmUg
dGhlIHNhbWUgYXMgdGhlIGJvb2wgcGFzc2VkIHRvCi0gICAgLy8gd3JpdGUoKS4gIEhvd2V2ZXIg
TGVnYWN5SFRNTERvY3VtZW50UGFyc2VyIHVzZXMgd3JpdGUoIiIsIGZhbHNlKSB0byBwdW1wCi0g
ICAgLy8gdGhlIHBhcnNlciAoYWZ0ZXIgcnVubmluZyBleHRlcm5hbCBzY3JpcHRzLCBldGMuKSB0
aHVzIG5lY2Vzc2l0YXRpbmcgYQotICAgIC8vIHNlcGFyYXRlIHN0YXRlIGZvciBmb3JjZVN5bmNo
cm9ub3VzLgotICAgIGJvb2wgd2FzRm9yY2VkU3luY2hyb25vdXMgPSBmb3JjZVN5bmNocm9ub3Vz
KCk7Ci0gICAgc2V0Rm9yY2VTeW5jaHJvbm91cyh0cnVlKTsKLSAgICB3cml0ZShzb3VyY2UsIGZh
bHNlKTsKLSAgICBzZXRGb3JjZVN5bmNocm9ub3VzKHdhc0ZvcmNlZFN5bmNocm9ub3VzKTsKLX0K
LQotdm9pZCBMZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXI6OmFwcGVuZChjb25zdCBTZWdtZW50ZWRT
dHJpbmcmIHNvdXJjZSkKLXsKLSAgICB3cml0ZShzb3VyY2UsIHRydWUpOwotfQotCi12b2lkIExl
Z2FjeUhUTUxEb2N1bWVudFBhcnNlcjo6c3RvcFBhcnNpbmcoKQotewotICAgIERvY3VtZW50UGFy
c2VyOjpzdG9wUGFyc2luZygpOwotICAgIG1fdGltZXIuc3RvcCgpOwotCi0gICAgLy8gRklYTUU6
IFdoeSBpcyBMZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXIgdGhlIG9ubHkgRG9jdW1lbnRQYXJzZXIg
d2hpY2ggY2FsbHMgY2hlY2tDb21wbGV0ZWQ/Ci0gICAgLy8gVGhlIEZyYW1lTG9hZGVyIG5lZWRz
IHRvIGtub3cgdGhhdCB0aGUgcGFyc2VyIGhhcyBmaW5pc2hlZCB3aXRoIGl0cyBkYXRhLAotICAg
IC8vIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBoYXBwZW5lZCBuYXR1cmFsbHkgb3IgZHVlIHRv
IG1hbnVhbCBpbnRlcnZlbnRpb24uCi0gICAgaWYgKCFtX2ZyYWdtZW50ICYmIGRvY3VtZW50KCkt
PmZyYW1lKCkpCi0gICAgICAgIGRvY3VtZW50KCktPmZyYW1lKCktPmxvYWRlcigpLT5jaGVja0Nv
bXBsZXRlZCgpOwotfQotCi1ib29sIExlZ2FjeUhUTUxEb2N1bWVudFBhcnNlcjo6cHJvY2Vzc2lu
Z0RhdGEoKSBjb25zdAotewotICAgIHJldHVybiBtX3RpbWVyLmlzQWN0aXZlKCkgfHwgbV9pbldy
aXRlOwotfQotCi12b2lkIExlZ2FjeUhUTUxEb2N1bWVudFBhcnNlcjo6dGltZXJGaXJlZChUaW1l
cjxMZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXI+KikKLXsKLSAgICBpZiAoZG9jdW1lbnQoKS0+dmll
dygpICYmIGRvY3VtZW50KCktPnZpZXcoKS0+bGF5b3V0UGVuZGluZygpICYmICFkb2N1bWVudCgp
LT5taW5pbXVtTGF5b3V0RGVsYXkoKSkgewotICAgICAgICAvLyBSZXN0YXJ0IHRoZSB0aW1lciBh
bmQgbGV0IGxheW91dCB3aW4uICBUaGlzIGlzIGJhc2ljYWxseSBhIHdheSBvZiBlbnN1cmluZyB0
aGF0IHRoZSBsYXlvdXQKLSAgICAgICAgLy8gdGltZXIgaGFzIGhpZ2hlciBwcmlvcml0eSB0aGFu
IG91ciB0aW1lci4KLSAgICAgICAgbV90aW1lci5zdGFydE9uZVNob3QoMCk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICAvLyBJbnZva2Ugd3JpdGUoKSBhcyB0aG91Z2ggbW9yZSBkYXRh
IGNhbWUgaW4uIFRoaXMgbWlnaHQgY2F1c2UgdXMgdG8gZ2V0IGRlbGV0ZWQuCi0gICAgd3JpdGUo
U2VnbWVudGVkU3RyaW5nKCksIHRydWUpOwotfQotCi12b2lkIExlZ2FjeUhUTUxEb2N1bWVudFBh
cnNlcjo6ZW5kKCkKLXsKLSAgICBBU1NFUlQoIW1fdGltZXIuaXNBY3RpdmUoKSk7Ci0gICAgbV90
aW1lci5zdG9wKCk7IC8vIE9ubHkgaGVscHMgaWYgYXNzZXJ0aW9uIGFib3ZlIGZpcmVzLCBidXQg
ZG8gaXQgYW55d2F5LgotCi0gICAgaWYgKG1fYnVmZmVyKSB7Ci0gICAgICAgIC8vIHBhcnNlVGFn
IGlzIHVzaW5nIHRoZSBidWZmZXIgZm9yIGRpZmZlcmVudCBtYXR0ZXJzCi0gICAgICAgIGlmICgh
bV9zdGF0ZS5oYXNUYWdTdGF0ZSgpKQotICAgICAgICAgICAgcHJvY2Vzc1Rva2VuKCk7Ci0KLSAg
ICAgICAgZmFzdEZyZWUobV9zY3JpcHRDb2RlKTsKLSAgICAgICAgbV9zY3JpcHRDb2RlID0gMDsK
LSAgICAgICAgbV9zY3JpcHRDb2RlU2l6ZSA9IG1fc2NyaXB0Q29kZUNhcGFjaXR5ID0gbV9zY3Jp
cHRDb2RlUmVzeW5jID0gMDsKLQotICAgICAgICBmYXN0RnJlZShtX2J1ZmZlcik7Ci0gICAgICAg
IG1fYnVmZmVyID0gMDsKLSAgICB9Ci0KLSAgICBpZiAoIWluVmlld1NvdXJjZU1vZGUoKSkKLSAg
ICAgICAgbV90cmVlQnVpbGRlci0+ZmluaXNoZWQoKTsKLSAgICBlbHNlCi0gICAgICAgIGRvY3Vt
ZW50KCktPmZpbmlzaGVkUGFyc2luZygpOwotfQotCi12b2lkIExlZ2FjeUhUTUxEb2N1bWVudFBh
cnNlcjo6ZmluaXNoKCkKLXsKLSAgICAvLyBkbyB0aGlzIGFzIGxvbmcgYXMgd2UgZG9uJ3QgZmlu
ZCBtYXRjaGluZyBjb21tZW50IGVuZHMKLSAgICB3aGlsZSAoKG1fc3RhdGUuaW5Db21tZW50KCkg
fHwgbV9zdGF0ZS5pblNlcnZlcigpKSAmJiBtX3NjcmlwdENvZGUgJiYgbV9zY3JpcHRDb2RlU2l6
ZSkgewotICAgICAgICAvLyB3ZSd2ZSBmb3VuZCBhbiB1bm1hdGNoZWQgY29tbWVudCBzdGFydAot
ICAgICAgICBpZiAobV9zdGF0ZS5pbkNvbW1lbnQoKSkKLSAgICAgICAgICAgIG1fYnJva2VuQ29t
bWVudHMgPSB0cnVlOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX2Jyb2tlblNlcnZlciA9
IHRydWU7Ci0gICAgICAgIGNoZWNrU2NyaXB0QnVmZmVyKCk7Ci0gICAgICAgIG1fc2NyaXB0Q29k
ZVttX3NjcmlwdENvZGVTaXplXSA9IDA7Ci0gICAgICAgIG1fc2NyaXB0Q29kZVttX3NjcmlwdENv
ZGVTaXplICsgMV0gPSAwOwotICAgICAgICBpbnQgcG9zOwotICAgICAgICBTdHJpbmcgZm9vZDsK
LSAgICAgICAgaWYgKG1fc3RhdGUuaW5TY3JpcHQoKSB8fCBtX3N0YXRlLmluU3R5bGUoKSB8fCBt
X3N0YXRlLmluVGV4dEFyZWEoKSkKLSAgICAgICAgICAgIGZvb2QgPSBTdHJpbmcobV9zY3JpcHRD
b2RlLCBtX3NjcmlwdENvZGVTaXplKTsKLSAgICAgICAgZWxzZSBpZiAobV9zdGF0ZS5pblNlcnZl
cigpKSB7Ci0gICAgICAgICAgICBmb29kID0gIjwiOwotICAgICAgICAgICAgZm9vZC5hcHBlbmQo
bV9zY3JpcHRDb2RlLCBtX3NjcmlwdENvZGVTaXplKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgIHBvcyA9IGZpbmQobV9zY3JpcHRDb2RlLCBtX3NjcmlwdENvZGVTaXplLCAnPicpOwot
ICAgICAgICAgICAgZm9vZCA9IFN0cmluZyhtX3NjcmlwdENvZGUgKyBwb3MgKyAxLCBtX3Njcmlw
dENvZGVTaXplIC0gcG9zIC0gMSk7Ci0gICAgICAgIH0KLSAgICAgICAgZmFzdEZyZWUobV9zY3Jp
cHRDb2RlKTsKLSAgICAgICAgbV9zY3JpcHRDb2RlID0gMDsKLSAgICAgICAgbV9zY3JpcHRDb2Rl
U2l6ZSA9IG1fc2NyaXB0Q29kZUNhcGFjaXR5ID0gbV9zY3JpcHRDb2RlUmVzeW5jID0gMDsKLSAg
ICAgICAgbV9zdGF0ZS5zZXRJbkNvbW1lbnQoZmFsc2UpOwotICAgICAgICBtX3N0YXRlLnNldElu
U2VydmVyKGZhbHNlKTsKLSAgICAgICAgaWYgKCFmb29kLmlzRW1wdHkoKSkKLSAgICAgICAgICAg
IHdyaXRlKGZvb2QsIHRydWUpOwotICAgIH0KLSAgICAvLyB0aGlzIGluZGljYXRlcyB3ZSB3aWxs
IG5vdCByZWNlaXZlIGFueSBtb3JlIGRhdGEuLi4gYnV0IGlmIHdlIGFyZSB3YWl0aW5nIG9uCi0g
ICAgLy8gYW4gZXh0ZXJuYWwgc2NyaXB0IHRvIGxvYWQsIHdlIGNhbid0IGZpbmlzaCBwYXJzaW5n
IHVudGlsIHRoYXQgaXMgZG9uZQotICAgIG1fbm9Nb3JlRGF0YSA9IHRydWU7Ci0gICAgaWYgKCFt
X2luV3JpdGUgJiYgIW1fc3RhdGUubG9hZGluZ0V4dFNjcmlwdCgpICYmICFtX2V4ZWN1dGluZ1Nj
cmlwdCAmJiAhbV90aW1lci5pc0FjdGl2ZSgpKQotICAgICAgICBlbmQoKTsgLy8gdGhpcyBhY3R1
YWxseSBjYXVzZXMgdXMgdG8gYmUgZGVsZXRlZAotfQotCi1ib29sIExlZ2FjeUhUTUxEb2N1bWVu
dFBhcnNlcjo6ZmluaXNoV2FzQ2FsbGVkKCkKLXsKLSAgICByZXR1cm4gbV9ub01vcmVEYXRhOwot
fQotCi1QYXNzUmVmUHRyPE5vZGU+IExlZ2FjeUhUTUxEb2N1bWVudFBhcnNlcjo6cHJvY2Vzc1Rv
a2VuKCkKLXsKLSAgICBpZiAobV9kZXN0ID4gbV9idWZmZXIpIHsKLSAgICAgICAgbV9jdXJyZW50
VG9rZW4udGV4dCA9IFN0cmluZ0ltcGw6OmNyZWF0ZVN0cmlwcGluZ051bGxDaGFyYWN0ZXJzKG1f
YnVmZmVyLCBtX2Rlc3QgLSBtX2J1ZmZlcik7Ci0gICAgICAgIGlmIChtX2N1cnJlbnRUb2tlbi50
YWdOYW1lICE9IGNvbW1lbnRBdG9tKQotICAgICAgICAgICAgbV9jdXJyZW50VG9rZW4udGFnTmFt
ZSA9IHRleHRBdG9tOwotICAgIH0gZWxzZSBpZiAobV9jdXJyZW50VG9rZW4udGFnTmFtZSA9PSBu
dWxsQXRvbSkgewotICAgICAgICBtX2N1cnJlbnRUb2tlbi5yZXNldCgpOwotICAgICAgICByZXR1
cm4gMDsKLSAgICB9Ci0KLSAgICBtX2Rlc3QgPSBtX2J1ZmZlcjsKLQotICAgIFJlZlB0cjxOb2Rl
PiBuOwotCi0gICAgaWYgKCFtX3BhcnNlclN0b3BwZWQpIHsKLSAgICAgICAgaWYgKE5hbWVkTm9k
ZU1hcCogbWFwID0gbV9jdXJyZW50VG9rZW4uYXR0cnMuZ2V0KCkpCi0gICAgICAgICAgICBtYXAt
PnNocmlua1RvTGVuZ3RoKCk7Ci0gICAgICAgIC8vIHBhc3MgdGhlIHRva2VuIG92ZXIgdG8gdGhl
IHBhcnNlciwgdGhlIHBhcnNlciBET0VTIE5PVCBkZWxldGUgdGhlIHRva2VuCi0gICAgICAgIG4g
PSBtX3RyZWVCdWlsZGVyLT5wYXJzZVRva2VuKCZtX2N1cnJlbnRUb2tlbik7Ci0gICAgfQotICAg
IG1fY3VycmVudFRva2VuLnJlc2V0KCk7Ci0KLSAgICByZXR1cm4gbi5yZWxlYXNlKCk7Ci19Ci0K
LXZvaWQgTGVnYWN5SFRNTERvY3VtZW50UGFyc2VyOjpwcm9jZXNzRG9jdHlwZVRva2VuKCkKLXsK
LSAgICBtX3RyZWVCdWlsZGVyLT5wYXJzZURvY3R5cGVUb2tlbigmbV9kb2N0eXBlVG9rZW4pOwot
fQotCi1MZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXI6On5MZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXIo
KQotewotICAgIEFTU0VSVCghbV9pbldyaXRlKTsKLSAgICByZXNldCgpOwotfQotCi0KLXZvaWQg
TGVnYWN5SFRNTERvY3VtZW50UGFyc2VyOjplbmxhcmdlQnVmZmVyKGludCBsZW4pCi17Ci0gICAg
Ly8gUmVzaXplIHBvbGljeTogQWx3YXlzIGF0IGxlYXN0IGRvdWJsZSB0aGUgc2l6ZSBvZiB0aGUg
YnVmZmVyIGVhY2ggdGltZS4KLSAgICBpbnQgZGVsdGEgPSBtYXgobGVuLCBtX2J1ZmZlclNpemUp
OwotCi0gICAgLy8gQ2hlY2sgZm9yIG92ZXJmbG93LgotICAgIC8vIEZvciBub3csIGhhbmRsZSBv
dmVyZmxvdyB0aGUgc2FtZSB3YXkgd2UgaGFuZGxlIGZhc3RSZWFsbG9jIGZhaWx1cmUsIHdpdGgg
Q1JBU0guCi0gICAgc3RhdGljIGNvbnN0IGludCBtYXhTaXplID0gSU5UX01BWCAvIHNpemVvZihV
Q2hhcik7Ci0gICAgaWYgKGRlbHRhID4gbWF4U2l6ZSAtIG1fYnVmZmVyU2l6ZSkKLSAgICAgICAg
Q1JBU0goKTsKLQotICAgIGludCBuZXdTaXplID0gbV9idWZmZXJTaXplICsgZGVsdGE7Ci0gICAg
aW50IG9sZE9mZnNldCA9IG1fZGVzdCAtIG1fYnVmZmVyOwotICAgIG1fYnVmZmVyID0gc3RhdGlj
X2Nhc3Q8VUNoYXIqPihmYXN0UmVhbGxvYyhtX2J1ZmZlciwgbmV3U2l6ZSAqIHNpemVvZihVQ2hh
cikpKTsKLSAgICBtX2Rlc3QgPSBtX2J1ZmZlciArIG9sZE9mZnNldDsKLSAgICBtX2J1ZmZlclNp
emUgPSBuZXdTaXplOwotfQotCi12b2lkIExlZ2FjeUhUTUxEb2N1bWVudFBhcnNlcjo6ZW5sYXJn
ZVNjcmlwdEJ1ZmZlcihpbnQgbGVuKQotewotICAgIC8vIFJlc2l6ZSBwb2xpY3k6IEFsd2F5cyBh
dCBsZWFzdCBkb3VibGUgdGhlIHNpemUgb2YgdGhlIGJ1ZmZlciBlYWNoIHRpbWUuCi0gICAgaW50
IGRlbHRhID0gbWF4KGxlbiwgbV9zY3JpcHRDb2RlQ2FwYWNpdHkpOwotCi0gICAgLy8gQ2hlY2sg
Zm9yIG92ZXJmbG93LgotICAgIC8vIEZvciBub3csIGhhbmRsZSBvdmVyZmxvdyB0aGUgc2FtZSB3
YXkgd2UgaGFuZGxlIGZhc3RSZWFsbG9jIGZhaWx1cmUsIHdpdGggQ1JBU0guCi0gICAgc3RhdGlj
IGNvbnN0IGludCBtYXhTaXplID0gSU5UX01BWCAvIHNpemVvZihVQ2hhcik7Ci0gICAgaWYgKGRl
bHRhID4gbWF4U2l6ZSAtIG1fc2NyaXB0Q29kZUNhcGFjaXR5KQotICAgICAgICBDUkFTSCgpOwot
Ci0gICAgaW50IG5ld1NpemUgPSBtX3NjcmlwdENvZGVDYXBhY2l0eSArIGRlbHRhOwotICAgIC8v
IElmIHdlIGFsbG93IGZhc3RSZWFsbG9jKHB0ciwgMCksIGl0IHdpbGwgY2FsbCBDUkFTSCgpLiBX
ZSBydW4gaW50byB0aGlzCi0gICAgLy8gY2FzZSBpZiB0aGUgSFRNTCBiZWluZyBwYXJzZWQgYmVn
aW5zIHdpdGggIjwhLS0iIGFuZCB0aGVyZSdzIG1vcmUgZGF0YQotICAgIC8vIGNvbWluZy4KLSAg
ICBpZiAoIW5ld1NpemUpIHsKLSAgICAgICAgQVNTRVJUKCFtX3NjcmlwdENvZGUpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgbV9zY3JpcHRDb2RlID0gc3RhdGljX2Nhc3Q8VUNoYXIq
PihmYXN0UmVhbGxvYyhtX3NjcmlwdENvZGUsIG5ld1NpemUgKiBzaXplb2YoVUNoYXIpKSk7Ci0g
ICAgbV9zY3JpcHRDb2RlQ2FwYWNpdHkgPSBuZXdTaXplOwotfQotCi12b2lkIExlZ2FjeUhUTUxE
b2N1bWVudFBhcnNlcjo6ZXhlY3V0ZVNjcmlwdHNXYWl0aW5nRm9yU3R5bGVzaGVldHMoKQotewot
ICAgIEFTU0VSVChkb2N1bWVudCgpLT5oYXZlU3R5bGVzaGVldHNMb2FkZWQoKSk7Ci0KLSAgICBp
ZiAobV9oYXNTY3JpcHRzV2FpdGluZ0ZvclN0eWxlc2hlZXRzKQotICAgICAgICBub3RpZnlGaW5p
c2hlZCgwKTsKLX0KLQotdm9pZCBMZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXI6Om5vdGlmeUZpbmlz
aGVkKENhY2hlZFJlc291cmNlKikKLXsKLSAgICBleGVjdXRlRXh0ZXJuYWxTY3JpcHRzSWZSZWFk
eSgpOwotfQotCi12b2lkIExlZ2FjeUhUTUxEb2N1bWVudFBhcnNlcjo6ZXhlY3V0ZUV4dGVybmFs
U2NyaXB0c0lmUmVhZHkoKQotewotICAgIEFTU0VSVCghbV9wZW5kaW5nU2NyaXB0cy5pc0VtcHR5
KCkpOwotCi0gICAgLy8gTWFrZSBleHRlcm5hbCBzY3JpcHRzIHdhaXQgZm9yIGV4dGVybmFsIHN0
eWxlc2hlZXRzLgotICAgIC8vIEZJWE1FOiBUaGlzIG5lZWRzIHRvIGJlIGRvbmUgZm9yIGlubGlu
ZSBzY3JpcHRzIHRvby4KLSAgICBtX2hhc1NjcmlwdHNXYWl0aW5nRm9yU3R5bGVzaGVldHMgPSAh
ZG9jdW1lbnQoKS0+aGF2ZVN0eWxlc2hlZXRzTG9hZGVkKCk7Ci0gICAgaWYgKG1faGFzU2NyaXB0
c1dhaXRpbmdGb3JTdHlsZXNoZWV0cykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYm9vbCBmaW5p
c2hlZCA9IGZhbHNlOwotCi0gICAgZG91YmxlIHN0YXJ0VGltZSA9IGN1cnJlbnRUaW1lKCk7Ci0g
ICAgd2hpbGUgKCFmaW5pc2hlZCAmJiBtX3BlbmRpbmdTY3JpcHRzLmZpcnN0KCktPmlzTG9hZGVk
KCkpIHsKLSAgICAgICAgaWYgKCFjb250aW51ZUV4ZWN1dGluZ0V4dGVybmFsU2NyaXB0cyhzdGFy
dFRpbWUpKQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgQ2FjaGVkUmVzb3VyY2VIYW5k
bGU8Q2FjaGVkU2NyaXB0PiBjcyA9IG1fcGVuZGluZ1NjcmlwdHMudGFrZUZpcnN0KCk7Ci0gICAg
ICAgIEFTU0VSVChjYWNoZSgpLT5kaXNhYmxlZCgpIHx8IGNzLT5hY2Nlc3NDb3VudCgpID4gMCk7
Ci0KLSAgICAgICAgc2V0U3JjKFNlZ21lbnRlZFN0cmluZygpKTsKLQotICAgICAgICAvLyBtYWtl
IHN1cmUgd2UgZm9yZ2V0IGFib3V0IHRoZSBzY3JpcHQgYmVmb3JlIHdlIGV4ZWN1dGUgdGhlIG5l
dyBvbmUKLSAgICAgICAgLy8gaW5maW5pdGUgcmVjdXJzaW9uIG1pZ2h0IGhhcHBlbiBvdGhlcndp
c2UKLSAgICAgICAgU2NyaXB0U291cmNlQ29kZSBzb3VyY2VDb2RlKGNzLmdldCgpKTsKLSAgICAg
ICAgYm9vbCBlcnJvck9jY3VycmVkID0gY3MtPmVycm9yT2NjdXJyZWQoKTsKLSAgICAgICAgY3Mt
PnJlbW92ZUNsaWVudCh0aGlzKTsKLQotICAgICAgICBSZWZQdHI8Tm9kZT4gbiA9IG1fc2NyaXB0
Tm9kZS5yZWxlYXNlKCk7Ci0KLSAgICAgICAgaWYgKGVycm9yT2NjdXJyZWQpCi0gICAgICAgICAg
ICBuLT5kaXNwYXRjaEV2ZW50KEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmVycm9yRXZlbnQs
IHRydWUsIGZhbHNlKSk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgaWYgKHN0YXRpY19j
YXN0PEhUTUxTY3JpcHRFbGVtZW50Kj4obi5nZXQoKSktPnNob3VsZEV4ZWN1dGVBc0phdmFTY3Jp
cHQoKSkKLSAgICAgICAgICAgICAgICBtX3N0YXRlID0gc2NyaXB0RXhlY3V0aW9uKHNvdXJjZUNv
ZGUsIG1fc3RhdGUpOwotI2lmIEVOQUJMRShYSFRNTE1QKQotICAgICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgICAgIGRvY3VtZW50KCktPnNldFNob3VsZFByb2Nlc3NOb3NjcmlwdEVsZW1lbnQo
dHJ1ZSk7Ci0jZW5kaWYKLSAgICAgICAgICAgIG4tPmRpc3BhdGNoRXZlbnQoRXZlbnQ6OmNyZWF0
ZShldmVudE5hbWVzKCkubG9hZEV2ZW50LCBmYWxzZSwgZmFsc2UpKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIC8vIFRoZSBzdGF0ZSBvZiBtX3BlbmRpbmdTY3JpcHRzLmlzRW1wdHkoKSBjYW4gY2hh
bmdlIGluc2lkZSB0aGUgc2NyaXB0RXhlY3V0aW9uKCkKLSAgICAgICAgLy8gY2FsbCBhYm92ZSwg
c28gdGVzdCBhZnRlcndhcmRzLgotICAgICAgICBmaW5pc2hlZCA9IG1fcGVuZGluZ1NjcmlwdHMu
aXNFbXB0eSgpOwotICAgICAgICBpZiAoZmluaXNoZWQpIHsKLSAgICAgICAgICAgIEFTU0VSVCgh
bV9oYXNTY3JpcHRzV2FpdGluZ0ZvclN0eWxlc2hlZXRzKTsKLSAgICAgICAgICAgIG1fc3RhdGUu
c2V0TG9hZGluZ0V4dFNjcmlwdChmYWxzZSk7Ci0gICAgICAgIH0gZWxzZSBpZiAobV9oYXNTY3Jp
cHRzV2FpdGluZ0ZvclN0eWxlc2hlZXRzKSB7Ci0gICAgICAgICAgICAvLyBtX2hhc1NjcmlwdHNX
YWl0aW5nRm9yU3R5bGVzaGVldHMgZmxhZyBtaWdodCBoYXZlIGNoYW5nZWQgZHVyaW5nIHRoZSBz
Y3JpcHQgZXhlY3V0aW9uLgotICAgICAgICAgICAgLy8gSWYgaXQgZGlkIHdlIGFyZSBub3cgYmxv
Y2tlZCB3YWl0aW5nIGZvciBzdHlsZXNoZWV0cyBhbmQgc2hvdWxkIG5vdCBleGVjdXRlIG1vcmUg
c2NyaXB0cyB1bnRpbCB0aGV5IGFycml2ZS4KLSAgICAgICAgICAgIGZpbmlzaGVkID0gdHJ1ZTsK
LSAgICAgICAgfQotCi0gICAgICAgIC8vICdtX3JlcXVlc3RpbmdTY3JpcHQnIGlzIHRydWUgd2hl
biB3ZSBhcmUgY2FsbGVkIHN5bmNocm9ub3VzbHkgZnJvbQotICAgICAgICAvLyBzY3JpcHRIYW5k
bGVyKCkuIEluIHRoYXQgY2FzZSBzY3JpcHRIYW5kbGVyKCkgd2lsbCB0YWtlIGNhcmUKLSAgICAg
ICAgLy8gb2YgbV9wZW5kaW5nU3JjLgotICAgICAgICBpZiAoIW1fcmVxdWVzdGluZ1NjcmlwdCkg
ewotICAgICAgICAgICAgU2VnbWVudGVkU3RyaW5nIHJlc3QgPSBtX3BlbmRpbmdTcmM7Ci0gICAg
ICAgICAgICBtX3BlbmRpbmdTcmMuY2xlYXIoKTsKLSAgICAgICAgICAgIHdyaXRlKHJlc3QsIGZh
bHNlKTsKLSAgICAgICAgICAgIC8vIHdlIG1pZ2h0IGJlIGRlbGV0ZWQgYXQgdGhpcyBwb2ludCwg
ZG8gbm90IGFjY2VzcyBhbnkgbWVtYmVycy4KLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBM
ZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXI6OmV4ZWN1dGVFeHRlcm5hbFNjcmlwdHNUaW1lckZpcmVk
KFRpbWVyPExlZ2FjeUhUTUxEb2N1bWVudFBhcnNlcj4qKQotewotICAgIGlmIChkb2N1bWVudCgp
LT52aWV3KCkgJiYgZG9jdW1lbnQoKS0+dmlldygpLT5sYXlvdXRQZW5kaW5nKCkgJiYgIWRvY3Vt
ZW50KCktPm1pbmltdW1MYXlvdXREZWxheSgpKSB7Ci0gICAgICAgIC8vIFJlc3RhcnQgdGhlIHRp
bWVyIGFuZCBkbyBsYXlvdXQgZmlyc3QuCi0gICAgICAgIG1fZXh0ZXJuYWxTY3JpcHRzVGltZXIu
c3RhcnRPbmVTaG90KDApOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gQ29udGlu
dWUgZXhlY3V0aW5nIGV4dGVybmFsIHNjcmlwdHMuCi0gICAgZXhlY3V0ZUV4dGVybmFsU2NyaXB0
c0lmUmVhZHkoKTsKLX0KLQotYm9vbCBMZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXI6OmNvbnRpbnVl
RXhlY3V0aW5nRXh0ZXJuYWxTY3JpcHRzKGRvdWJsZSBzdGFydFRpbWUpCi17Ci0gICAgaWYgKG1f
ZXh0ZXJuYWxTY3JpcHRzVGltZXIuaXNBY3RpdmUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgaWYgKGN1cnJlbnRUaW1lKCkgLSBzdGFydFRpbWUgPiBtX3Rva2VuaXplclRpbWVEZWxh
eSkgewotICAgICAgICAvLyBTY2hlZHVsZSB0aGUgdGltZXIgdG8ga2VlcCBwcm9jZXNzaW5nIGFz
IHNvb24gYXMgcG9zc2libGUuCi0gICAgICAgIG1fZXh0ZXJuYWxTY3JpcHRzVGltZXIuc3RhcnRP
bmVTaG90KDApOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVl
OwotfQotCi1ib29sIExlZ2FjeUhUTUxEb2N1bWVudFBhcnNlcjo6aXNXYWl0aW5nRm9yU2NyaXB0
cygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fc3RhdGUubG9hZGluZ0V4dFNjcmlwdCgpOwotfQot
Ci12b2lkIExlZ2FjeUhUTUxEb2N1bWVudFBhcnNlcjo6c2V0U3JjKGNvbnN0IFNlZ21lbnRlZFN0
cmluZyYgc291cmNlKQotewotICAgIG1fc3JjID0gc291cmNlOwotfQotCi12b2lkIExlZ2FjeUhU
TUxEb2N1bWVudFBhcnNlcjo6cGFyc2VEb2N1bWVudEZyYWdtZW50KGNvbnN0IFN0cmluZyYgc291
cmNlLCBEb2N1bWVudEZyYWdtZW50KiBmcmFnbWVudCwgRnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNz
aW9uIHNjcmlwdGluZ1Blcm1pc3Npb24pCi17Ci0gICAgTGVnYWN5SFRNTERvY3VtZW50UGFyc2Vy
IHBhcnNlcihmcmFnbWVudCwgc2NyaXB0aW5nUGVybWlzc2lvbik7Ci0gICAgcGFyc2VyLnNldEZv
cmNlU3luY2hyb25vdXModHJ1ZSk7Ci0gICAgcGFyc2VyLndyaXRlKHNvdXJjZSwgdHJ1ZSk7Ci0g
ICAgcGFyc2VyLmZpbmlzaCgpOwotICAgIEFTU0VSVCghcGFyc2VyLnByb2Nlc3NpbmdEYXRhKCkp
OyAvLyBtYWtlIHN1cmUgd2UncmUgZG9uZSAoc2VlIDM5NjMxNTEpCi19Ci0KLVVDaGFyIGRlY29k
ZU5hbWVkRW50aXR5KGNvbnN0IGNoYXIqIG5hbWUpCi17Ci0gICAgY29uc3QgRW50aXR5KiBlID0g
ZmluZEVudGl0eShuYW1lLCBzdHJsZW4obmFtZSkpOwotICAgIHJldHVybiBlID8gZS0+Y29kZSA6
IDA7Ci19Ci0KLX0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9MZWdhY3lIVE1MRG9jdW1lbnRQ
YXJzZXIuaCBiL1dlYkNvcmUvaHRtbC9MZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXIuaApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDllNjk3NjAzMTE4MWQzYmZhYWEyZjJhNDE0ODlhN2Jh
ZTJmODE5ZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9X
ZWJDb3JlL2h0bWwvTGVnYWN5SFRNTERvY3VtZW50UGFyc2VyLmgKKysrIC9kZXYvbnVsbApAQCAt
MSw0NTIgKzAsMCBAQAotLyoKLSAgICBDb3B5cmlnaHQgKEMpIDE5OTcgTWFydGluIEpvbmVzICht
am9uZXNAa2RlLm9yZykKLSAgICAgICAgICAgICAgKEMpIDE5OTcgVG9yYmVuIFdlaXMgKHdlaXNA
a2RlLm9yZykKLSAgICAgICAgICAgICAgKEMpIDE5OTggV2FsZG8gQmFzdGlhbiAoYmFzdGlhbkBr
ZGUub3JnKQotICAgICAgICAgICAgICAoQykgMjAwMSBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2Rl
Lm9yZykKLSAgICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIw
MDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotCi0gICAgVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICAg
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCi0gICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCi0gICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICAgYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgICBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQotICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgotCi0gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gICAgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKLSAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSovCi0KLSNpZm5kZWYgTGVn
YWN5SFRNTERvY3VtZW50UGFyc2VyX2gKLSNkZWZpbmUgTGVnYWN5SFRNTERvY3VtZW50UGFyc2Vy
X2gKLQotI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlQ2xpZW50LmgiCi0jaW5jbHVkZSAiQ2FjaGVk
UmVzb3VyY2VIYW5kbGUuaCIKLSNpbmNsdWRlICJGcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24u
aCIKLSNpbmNsdWRlICJOYW1lZE5vZGVNYXAuaCIKLSNpbmNsdWRlICJTY3JpcHRhYmxlRG9jdW1l
bnRQYXJzZXIuaCIKLSNpbmNsdWRlICJTZWdtZW50ZWRTdHJpbmcuaCIKLSNpbmNsdWRlICJUaW1l
ci5oIgotI2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgotI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KLSNp
bmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgQ2Fj
aGVkU2NyaXB0OwotY2xhc3MgRG9jdW1lbnRGcmFnbWVudDsKLWNsYXNzIERvY3VtZW50OwotY2xh
c3MgSFRNTERvY3VtZW50OwotY2xhc3MgSFRNTFNjcmlwdEVsZW1lbnQ7Ci1jbGFzcyBIVE1MVmll
d1NvdXJjZURvY3VtZW50OwotY2xhc3MgRnJhbWVWaWV3OwotY2xhc3MgTGVnYWN5SFRNTFRyZWVC
dWlsZGVyOwotY2xhc3MgTm9kZTsKLWNsYXNzIExlZ2FjeVByZWxvYWRTY2FubmVyOwotY2xhc3Mg
U2NyaXB0U291cmNlQ29kZTsKLQotLyoqCi0gKiBAaW50ZXJuYWwKLSAqIHJlcHJlc2VudHMgb25l
IEhUTUwgdGFnLiBDb25zaXN0cyBvZiBhIG51bWVyaWNhbCBpZCwgYW5kIHRoZSBsaXN0Ci0gKiBv
ZiBhdHRyaWJ1dGVzLiBDYW4gYWxzbyByZXByZXNlbnQgdGV4dC4gSW4gdGhpcyBjYXNlIHRoZSBp
ZCA9IDAgYW5kCi0gKiB0ZXh0IGNvbnRhaW5zIHRoZSB0ZXh0LgotICovCi1zdHJ1Y3QgVG9rZW4g
ewotICAgIFRva2VuKCkKLSAgICAgICAgOiBiZWdpblRhZyh0cnVlKQotICAgICAgICAsIHNlbGZD
bG9zaW5nVGFnKGZhbHNlKQotICAgICAgICAsIGJyb2tlblhNTFN0eWxlKGZhbHNlKQotICAgICAg
ICAsIG1fc291cmNlSW5mbygwKQotICAgIHsgfQotICAgIH5Ub2tlbigpIHsgfQotCi0gICAgdm9p
ZCBhZGRBdHRyaWJ1dGUoQXRvbWljU3RyaW5nJiBhdHRyTmFtZSwgY29uc3QgQXRvbWljU3RyaW5n
JiB2LCBib29sIHZpZXdTb3VyY2VNb2RlKTsKLQotICAgIGJvb2wgaXNPcGVuVGFnKGNvbnN0IFF1
YWxpZmllZE5hbWUmIGZ1bGxOYW1lKSBjb25zdCB7IHJldHVybiBiZWdpblRhZyAmJiBmdWxsTmFt
ZS5sb2NhbE5hbWUoKSA9PSB0YWdOYW1lOyB9Ci0gICAgYm9vbCBpc0Nsb3NlVGFnKGNvbnN0IFF1
YWxpZmllZE5hbWUmIGZ1bGxOYW1lKSBjb25zdCB7IHJldHVybiAhYmVnaW5UYWcgJiYgZnVsbE5h
bWUubG9jYWxOYW1lKCkgPT0gdGFnTmFtZTsgfQotCi0gICAgdm9pZCByZXNldCgpCi0gICAgewot
ICAgICAgICBhdHRycyA9IDA7Ci0gICAgICAgIHRleHQgPSAwOwotICAgICAgICB0YWdOYW1lID0g
bnVsbEF0b207Ci0gICAgICAgIGJlZ2luVGFnID0gdHJ1ZTsKLSAgICAgICAgc2VsZkNsb3NpbmdU
YWcgPSBmYWxzZTsKLSAgICAgICAgYnJva2VuWE1MU3R5bGUgPSBmYWxzZTsKLSAgICAgICAgaWYg
KG1fc291cmNlSW5mbykKLSAgICAgICAgICAgIG1fc291cmNlSW5mby0+Y2xlYXIoKTsKLSAgICB9
Ci0KLSAgICB2b2lkIGFkZFZpZXdTb3VyY2VDaGFyKFVDaGFyIGMpIHsgaWYgKCFtX3NvdXJjZUlu
Zm8uZ2V0KCkpIG1fc291cmNlSW5mby5zZXQobmV3IFZlY3RvcjxVQ2hhcj4pOyBtX3NvdXJjZUlu
Zm8tPmFwcGVuZChjKTsgfQotCi0gICAgUmVmUHRyPE5hbWVkTm9kZU1hcD4gYXR0cnM7Ci0gICAg
UmVmUHRyPFN0cmluZ0ltcGw+IHRleHQ7Ci0gICAgQXRvbWljU3RyaW5nIHRhZ05hbWU7Ci0gICAg
Ym9vbCBiZWdpblRhZzsKLSAgICBib29sIHNlbGZDbG9zaW5nVGFnOwotICAgIGJvb2wgYnJva2Vu
WE1MU3R5bGU7Ci0gICAgT3duUHRyPFZlY3RvcjxVQ2hhcj4gPiBtX3NvdXJjZUluZm87Ci19Owot
Ci1lbnVtIERvY3R5cGVTdGF0ZSB7Ci0gICAgRG9jdHlwZUJlZ2luLAotICAgIERvY3R5cGVCZWZv
cmVOYW1lLAotICAgIERvY3R5cGVOYW1lLAotICAgIERvY3R5cGVBZnRlck5hbWUsCi0gICAgRG9j
dHlwZUJlZm9yZVB1YmxpY0lELAotICAgIERvY3R5cGVQdWJsaWNJRCwKLSAgICBEb2N0eXBlQWZ0
ZXJQdWJsaWNJRCwKLSAgICBEb2N0eXBlQmVmb3JlU3lzdGVtSUQsCi0gICAgRG9jdHlwZVN5c3Rl
bUlELAotICAgIERvY3R5cGVBZnRlclN5c3RlbUlELAotICAgIERvY3R5cGVCb2d1cwotfTsKLQot
Y2xhc3MgRG9jdHlwZVRva2VuIHsKLXB1YmxpYzoKLSAgICBEb2N0eXBlVG9rZW4oKSB7fQotCi0g
ICAgdm9pZCByZXNldCgpCi0gICAgewotICAgICAgICBtX25hbWUuY2xlYXIoKTsKLSAgICAgICAg
bV9wdWJsaWNJRC5jbGVhcigpOwotICAgICAgICBtX3N5c3RlbUlELmNsZWFyKCk7Ci0gICAgICAg
IG1fc3RhdGUgPSBEb2N0eXBlQmVnaW47Ci0gICAgICAgIG1fc291cmNlLmNsZWFyKCk7Ci0gICAg
ICAgIG1fZm9yY2VRdWlya3MgPSBmYWxzZTsKLSAgICB9Ci0KLSAgICBEb2N0eXBlU3RhdGUgc3Rh
dGUoKSB7IHJldHVybiBtX3N0YXRlOyB9Ci0gICAgdm9pZCBzZXRTdGF0ZShEb2N0eXBlU3RhdGUg
cykgeyBtX3N0YXRlID0gczsgfQotCi0gICAgVmVjdG9yPFVDaGFyPiBtX25hbWU7Ci0gICAgVmVj
dG9yPFVDaGFyPiBtX3B1YmxpY0lEOwotICAgIFZlY3RvcjxVQ2hhcj4gbV9zeXN0ZW1JRDsKLSAg
ICBEb2N0eXBlU3RhdGUgbV9zdGF0ZTsKLQotICAgIFZlY3RvcjxVQ2hhcj4gbV9zb3VyY2U7Ci0K
LSAgICBib29sIG1fZm9yY2VRdWlya3M7IC8vIFVzZWQgYnkgdGhlIEhUTUw1IHBhcnNlci4KLX07
Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy8gRklYTUU6IFRoaXMgY2xhc3MgZG9lcyB0
b28gbXVjaC4gIFJpZ2h0IG5vdyBpdCBpcyBib3RoIGFuIEhUTUwgdG9rZW5pemVyIGFzIHdlbGwK
LS8vIGFzIGhhbmRsaW5nIGFsbCBvZiB0aGUgbm9uLXRva2VuaXplci1zcGVjaWZpYyBqdW5rIHJl
bGF0ZWQgdG8gdG9rZW5pemluZyBIVE1MCi0vLyAobGlrZSBkZWFsaW5nIHdpdGggPHNjcmlwdD4g
dGFncykuICBUaGUgSFRNTCB0b2tlbml6ZXIgYml0cyBzaG91bGQgYmUgcHVzaGVkCi0vLyBkb3du
IGludG8gYSBzZXBhcmF0ZSBIVE1MIHRva2VuaXplciBjbGFzcy4KLQotY2xhc3MgTGVnYWN5SFRN
TERvY3VtZW50UGFyc2VyIDogcHVibGljIFNjcmlwdGFibGVEb2N1bWVudFBhcnNlciwgcHVibGlj
IENhY2hlZFJlc291cmNlQ2xpZW50IHsKLXB1YmxpYzoKLSAgICBMZWdhY3lIVE1MRG9jdW1lbnRQ
YXJzZXIoSFRNTERvY3VtZW50KiwgYm9vbCByZXBvcnRFcnJvcnMpOwotICAgIExlZ2FjeUhUTUxE
b2N1bWVudFBhcnNlcihIVE1MVmlld1NvdXJjZURvY3VtZW50Kik7Ci0gICAgTGVnYWN5SFRNTERv
Y3VtZW50UGFyc2VyKERvY3VtZW50RnJhZ21lbnQqLCBGcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Np
b24gPSBGcmFnbWVudFNjcmlwdGluZ0FsbG93ZWQpOwotICAgIHZpcnR1YWwgfkxlZ2FjeUhUTUxE
b2N1bWVudFBhcnNlcigpOwotCi0gICAgYm9vbCBmb3JjZVN5bmNocm9ub3VzKCkgY29uc3QgeyBy
ZXR1cm4gbV9zdGF0ZS5mb3JjZVN5bmNocm9ub3VzKCk7IH0KLSAgICB2b2lkIHNldEZvcmNlU3lu
Y2hyb25vdXMoYm9vbCBmb3JjZSk7Ci0KLSAgICBzdGF0aWMgdm9pZCBwYXJzZURvY3VtZW50RnJh
Z21lbnQoY29uc3QgU3RyaW5nJiwgRG9jdW1lbnRGcmFnbWVudCosIEZyYWdtZW50U2NyaXB0aW5n
UGVybWlzc2lvbiA9IEZyYWdtZW50U2NyaXB0aW5nQWxsb3dlZCk7Ci0KLXByb3RlY3RlZDoKLSAg
ICAvLyBFeHBvc2VkIGZvciBGVFBEaXJlY3RvcnlEb2N1bWVudFBhcnNlcgotICAgIHZpcnR1YWwg
dm9pZCBpbnNlcnQoY29uc3QgU2VnbWVudGVkU3RyaW5nJik7Ci0gICAgdmlydHVhbCB2b2lkIGZp
bmlzaCgpOwotCi1wcml2YXRlOgotICAgIC8vIFNjcmlwdGFibGVEb2N1bWVudFBhcnNlcgotICAg
IHZpcnR1YWwgdm9pZCBhcHBlbmQoY29uc3QgU2VnbWVudGVkU3RyaW5nJik7Ci0gICAgdmlydHVh
bCBib29sIGZpbmlzaFdhc0NhbGxlZCgpOwotICAgIHZpcnR1YWwgYm9vbCBpc1dhaXRpbmdGb3JT
Y3JpcHRzKCkgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIHN0b3BQYXJzaW5nKCk7Ci0gICAgdmly
dHVhbCBib29sIHByb2Nlc3NpbmdEYXRhKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGlzRXhl
Y3V0aW5nU2NyaXB0KCkgY29uc3QgeyByZXR1cm4gISFtX2V4ZWN1dGluZ1NjcmlwdDsgfQotCi0g
ICAgdmlydHVhbCBpbnQgbGluZU51bWJlcigpIGNvbnN0IHsgcmV0dXJuIG1fbGluZU51bWJlcjsg
fQotICAgIHZpcnR1YWwgaW50IGNvbHVtbk51bWJlcigpIGNvbnN0IHsgcmV0dXJuIDE7IH0KLQot
ICAgIHZpcnR1YWwgYm9vbCBwcm9jZXNzaW5nQ29udGVudFdyaXR0ZW5CeVNjcmlwdCgpIGNvbnN0
IHsgcmV0dXJuIG1fc3JjLmV4Y2x1ZGVMaW5lTnVtYmVycygpOyB9Ci0KLSAgICB2aXJ0dWFsIHZv
aWQgZXhlY3V0ZVNjcmlwdHNXYWl0aW5nRm9yU3R5bGVzaGVldHMoKTsKLQotICAgIHZpcnR1YWwg
TGVnYWN5SFRNTFRyZWVCdWlsZGVyKiBodG1sVHJlZUJ1aWxkZXIoKSBjb25zdCB7IHJldHVybiBt
X3RyZWVCdWlsZGVyLmdldCgpOyB9Ci0KLSAgICBjbGFzcyBTdGF0ZTsKLQotICAgIHZvaWQgYmVn
aW4oKTsKLSAgICB2b2lkIGVuZCgpOwotICAgIHZvaWQgcmVzZXQoKTsKLQotICAgIHZvaWQgd2ls
bFdyaXRlSFRNTChjb25zdCBTZWdtZW50ZWRTdHJpbmcmKTsKLSAgICB2b2lkIHdyaXRlKGNvbnN0
IFNlZ21lbnRlZFN0cmluZyYsIGJvb2wgYXBwZW5kRGF0YSk7Ci0gICAgQUxXQVlTX0lOTElORSB2
b2lkIGFkdmFuY2UoU3RhdGUmKTsKLSAgICB2b2lkIGRpZFdyaXRlSFRNTCgpOwotCi0gICAgUGFz
c1JlZlB0cjxOb2RlPiBwcm9jZXNzVG9rZW4oKTsKLSAgICB2b2lkIHByb2Nlc3NEb2N0eXBlVG9r
ZW4oKTsKLQotICAgIFN0YXRlIHByb2Nlc3NMaXN0aW5nKFNlZ21lbnRlZFN0cmluZywgU3RhdGUp
OwotICAgIFN0YXRlIHBhcnNlQ29tbWVudChTZWdtZW50ZWRTdHJpbmcmLCBTdGF0ZSk7Ci0gICAg
U3RhdGUgcGFyc2VEb2N0eXBlKFNlZ21lbnRlZFN0cmluZyYsIFN0YXRlKTsKLSAgICBTdGF0ZSBw
YXJzZVNlcnZlcihTZWdtZW50ZWRTdHJpbmcmLCBTdGF0ZSk7Ci0gICAgU3RhdGUgcGFyc2VUZXh0
KFNlZ21lbnRlZFN0cmluZyYsIFN0YXRlKTsKLSAgICBTdGF0ZSBwYXJzZU5vbkhUTUxUZXh0KFNl
Z21lbnRlZFN0cmluZyYsIFN0YXRlKTsKLSAgICBTdGF0ZSBwYXJzZVRhZyhTZWdtZW50ZWRTdHJp
bmcmLCBTdGF0ZSk7Ci0gICAgU3RhdGUgcGFyc2VFbnRpdHkoU2VnbWVudGVkU3RyaW5nJiwgVUNo
YXIqJiBkZXN0LCBTdGF0ZSwgdW5zaWduZWQmIGNCdWZmZXJQb3MsIGJvb2wgc3RhcnQsIGJvb2wg
cGFyc2luZ1RhZyk7Ci0gICAgU3RhdGUgcGFyc2VQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24oU2VnbWVu
dGVkU3RyaW5nJiwgU3RhdGUpOwotICAgIFN0YXRlIHNjcmlwdEhhbmRsZXIoU3RhdGUpOwotICAg
IFN0YXRlIHNjcmlwdEV4ZWN1dGlvbihjb25zdCBTY3JpcHRTb3VyY2VDb2RlJiwgU3RhdGUpOwot
ICAgIHZvaWQgc2V0U3JjKGNvbnN0IFNlZ21lbnRlZFN0cmluZyYpOwotCi0gICAgLy8gY2hlY2sg
aWYgd2UgaGF2ZSBlbm91Z2ggc3BhY2UgaW4gdGhlIGJ1ZmZlci4KLSAgICAvLyBpZiBub3QgZW5s
YXJnZSBpdAotICAgIGlubGluZSB2b2lkIGNoZWNrQnVmZmVyKGludCBsZW4gPSAxMCkKLSAgICB7
Ci0gICAgICAgIGlmICgobV9kZXN0IC0gbV9idWZmZXIpID4gbV9idWZmZXJTaXplIC0gbGVuKQot
ICAgICAgICAgICAgZW5sYXJnZUJ1ZmZlcihsZW4pOwotICAgIH0KLQotICAgIGlubGluZSB2b2lk
IGNoZWNrU2NyaXB0QnVmZmVyKGludCBsZW4gPSAxMCkKLSAgICB7Ci0gICAgICAgIGlmIChtX3Nj
cmlwdENvZGVTaXplICsgbGVuID49IG1fc2NyaXB0Q29kZUNhcGFjaXR5KQotICAgICAgICAgICAg
ZW5sYXJnZVNjcmlwdEJ1ZmZlcihsZW4pOwotICAgIH0KLQotICAgIHZvaWQgZW5sYXJnZUJ1ZmZl
cihpbnQgbGVuKTsKLSAgICB2b2lkIGVubGFyZ2VTY3JpcHRCdWZmZXIoaW50IGxlbik7Ci0KLSAg
ICBib29sIGNvbnRpbnVlUHJvY2Vzc2luZyhpbnQmIHByb2Nlc3NlZENvdW50LCBkb3VibGUgc3Rh
cnRUaW1lLCBTdGF0ZSYpOwotICAgIHZvaWQgdGltZXJGaXJlZChUaW1lcjxMZWdhY3lIVE1MRG9j
dW1lbnRQYXJzZXI+Kik7Ci0gICAgdm9pZCBhbGxEYXRhUHJvY2Vzc2VkKCk7Ci0KLSAgICAvLyBm
cm9tIENhY2hlZFJlc291cmNlQ2xpZW50Ci0gICAgdm9pZCBub3RpZnlGaW5pc2hlZChDYWNoZWRS
ZXNvdXJjZSopOwotCi0gICAgdm9pZCBleGVjdXRlRXh0ZXJuYWxTY3JpcHRzSWZSZWFkeSgpOwot
ICAgIHZvaWQgZXhlY3V0ZUV4dGVybmFsU2NyaXB0c1RpbWVyRmlyZWQoVGltZXI8TGVnYWN5SFRN
TERvY3VtZW50UGFyc2VyPiopOwotICAgIGJvb2wgY29udGludWVFeGVjdXRpbmdFeHRlcm5hbFNj
cmlwdHMoZG91YmxlIHN0YXJ0VGltZSk7Ci0KLSAgICAvLyBJbnRlcm5hbCBidWZmZXJzCi0gICAg
Ly8vLy8vLy8vLy8vLy8vLy8vLwotICAgIFVDaGFyKiBtX2J1ZmZlcjsKLSAgICBpbnQgbV9idWZm
ZXJTaXplOwotICAgIFVDaGFyKiBtX2Rlc3Q7Ci0KLSAgICBUb2tlbiBtX2N1cnJlbnRUb2tlbjsK
LQotICAgIC8vIFRoaXMgYnVmZmVyIGhvbGRzIHRoZSByYXcgY2hhcmFjdGVycyB3ZSd2ZSBzZWVu
IGJldHdlZW4gdGhlIGJlZ2lubmluZyBvZgotICAgIC8vIHRoZSBhdHRyaWJ1dGUgbmFtZSBhbmQg
dGhlIGZpcnN0IGNoYXJhY3RlciBvZiB0aGUgYXR0cmlidXRlIHZhbHVlLgotICAgIFZlY3RvcjxV
Q2hhciwgMzI+IG1fcmF3QXR0cmlidXRlQmVmb3JlVmFsdWU7Ci0KLSAgICAvLyBEb2N1bWVudFBh
cnNlciBmbGFncwotICAgIC8vLy8vLy8vLy8vLy8vLy8vLwotICAgIC8vIGFyZSB3ZSBpbiBxdW90
ZXMgd2l0aGluIGEgaHRtbCB0YWcKLSAgICBlbnVtIHsgTm9RdW90ZSwgU2luZ2xlUXVvdGUsIERv
dWJsZVF1b3RlIH0gdHF1b3RlOwotCi0gICAgLy8gQXJlIHdlIGluIGEgJi4uLiBjaGFyYWN0ZXIg
ZW50aXR5IGRlc2NyaXB0aW9uPwotICAgIGVudW0gRW50aXR5U3RhdGUgewotICAgICAgICBOb0Vu
dGl0eSA9IDAsCi0gICAgICAgIFNlYXJjaEVudGl0eSA9IDEsCi0gICAgICAgIE51bWVyaWNTZWFy
Y2ggPSAyLAotICAgICAgICBIZXhhZGVjaW1hbCA9IDMsCi0gICAgICAgIERlY2ltYWwgPSA0LAot
ICAgICAgICBFbnRpdHlOYW1lID0gNSwKLSAgICAgICAgU2VhcmNoU2VtaWNvbG9uID0gNgotICAg
IH07Ci0gICAgdW5zaWduZWQgRW50aXR5VW5pY29kZVZhbHVlOwotCi0gICAgZW51bSBUYWdTdGF0
ZSB7Ci0gICAgICAgIE5vVGFnID0gMCwKLSAgICAgICAgVGFnTmFtZSA9IDEsCi0gICAgICAgIFNl
YXJjaEF0dHJpYnV0ZSA9IDIsCi0gICAgICAgIEF0dHJpYnV0ZU5hbWUgPSAzLAotICAgICAgICBT
ZWFyY2hFcXVhbCA9IDQsCi0gICAgICAgIFNlYXJjaFZhbHVlID0gNSwKLSAgICAgICAgUXVvdGVk
VmFsdWUgPSA2LAotICAgICAgICBWYWx1ZSA9IDcsCi0gICAgICAgIFNlYXJjaEVuZCA9IDgKLSAg
ICB9OwotCi0gICAgY2xhc3MgU3RhdGUgewotICAgIHB1YmxpYzoKLSAgICAgICAgU3RhdGUoKSA6
IG1fYml0cygwKSB7IH0KLQotICAgICAgICBUYWdTdGF0ZSB0YWdTdGF0ZSgpIGNvbnN0IHsgcmV0
dXJuIHN0YXRpY19jYXN0PFRhZ1N0YXRlPihtX2JpdHMgJiBUYWdNYXNrKTsgfQotICAgICAgICB2
b2lkIHNldFRhZ1N0YXRlKFRhZ1N0YXRlIHQpIHsgbV9iaXRzID0gKG1fYml0cyAmIH5UYWdNYXNr
KSB8IHQ7IH0KLSAgICAgICAgRW50aXR5U3RhdGUgZW50aXR5U3RhdGUoKSBjb25zdCB7IHJldHVy
biBzdGF0aWNfY2FzdDxFbnRpdHlTdGF0ZT4oKG1fYml0cyAmIEVudGl0eU1hc2spID4+IEVudGl0
eVNoaWZ0KTsgfQotICAgICAgICB2b2lkIHNldEVudGl0eVN0YXRlKEVudGl0eVN0YXRlIGUpIHsg
bV9iaXRzID0gKG1fYml0cyAmIH5FbnRpdHlNYXNrKSB8IChlIDw8IEVudGl0eVNoaWZ0KTsgfQot
Ci0gICAgICAgIGJvb2wgaW5TY3JpcHQoKSBjb25zdCB7IHJldHVybiB0ZXN0Qml0KEluU2NyaXB0
KTsgfQotICAgICAgICB2b2lkIHNldEluU2NyaXB0KGJvb2wgdikgeyBzZXRCaXQoSW5TY3JpcHQs
IHYpOyB9Ci0gICAgICAgIGJvb2wgaW5TdHlsZSgpIGNvbnN0IHsgcmV0dXJuIHRlc3RCaXQoSW5T
dHlsZSk7IH0KLSAgICAgICAgdm9pZCBzZXRJblN0eWxlKGJvb2wgdikgeyBzZXRCaXQoSW5TdHls
ZSwgdik7IH0KLSAgICAgICAgYm9vbCBpblhtcCgpIGNvbnN0IHsgcmV0dXJuIHRlc3RCaXQoSW5Y
bXApOyB9Ci0gICAgICAgIHZvaWQgc2V0SW5YbXAoYm9vbCB2KSB7IHNldEJpdChJblhtcCwgdik7
IH0KLSAgICAgICAgYm9vbCBpblRpdGxlKCkgY29uc3QgeyByZXR1cm4gdGVzdEJpdChJblRpdGxl
KTsgfQotICAgICAgICB2b2lkIHNldEluVGl0bGUoYm9vbCB2KSB7IHNldEJpdChJblRpdGxlLCB2
KTsgfQotICAgICAgICBib29sIGluSUZyYW1lKCkgY29uc3QgeyByZXR1cm4gdGVzdEJpdChJbklG
cmFtZSk7IH0KLSAgICAgICAgdm9pZCBzZXRJbklGcmFtZShib29sIHYpIHsgc2V0Qml0KEluSUZy
YW1lLCB2KTsgfQotICAgICAgICBib29sIGluUGxhaW5UZXh0KCkgY29uc3QgeyByZXR1cm4gdGVz
dEJpdChJblBsYWluVGV4dCk7IH0KLSAgICAgICAgdm9pZCBzZXRJblBsYWluVGV4dChib29sIHYp
IHsgc2V0Qml0KEluUGxhaW5UZXh0LCB2KTsgfQotICAgICAgICBib29sIGluUHJvY2Vzc2luZ0lu
c3RydWN0aW9uKCkgY29uc3QgeyByZXR1cm4gdGVzdEJpdChJblByb2Nlc3NpbmdJbnN0cnVjdGlv
bik7IH0KLSAgICAgICAgdm9pZCBzZXRJblByb2Nlc3NpbmdJbnN0cnVjdGlvbihib29sIHYpIHsg
cmV0dXJuIHNldEJpdChJblByb2Nlc3NpbmdJbnN0cnVjdGlvbiwgdik7IH0KLSAgICAgICAgYm9v
bCBpbkNvbW1lbnQoKSBjb25zdCB7IHJldHVybiB0ZXN0Qml0KEluQ29tbWVudCk7IH0KLSAgICAg
ICAgdm9pZCBzZXRJbkNvbW1lbnQoYm9vbCB2KSB7IHNldEJpdChJbkNvbW1lbnQsIHYpOyB9Ci0g
ICAgICAgIGJvb2wgaW5Eb2N0eXBlKCkgY29uc3QgeyByZXR1cm4gdGVzdEJpdChJbkRvY3R5cGUp
OyB9Ci0gICAgICAgIHZvaWQgc2V0SW5Eb2N0eXBlKGJvb2wgdikgeyBzZXRCaXQoSW5Eb2N0eXBl
LCB2KTsgfQotICAgICAgICBib29sIGluVGV4dEFyZWEoKSBjb25zdCB7IHJldHVybiB0ZXN0Qml0
KEluVGV4dEFyZWEpOyB9Ci0gICAgICAgIHZvaWQgc2V0SW5UZXh0QXJlYShib29sIHYpIHsgc2V0
Qml0KEluVGV4dEFyZWEsIHYpOyB9Ci0gICAgICAgIGJvb2wgZXNjYXBlZCgpIGNvbnN0IHsgcmV0
dXJuIHRlc3RCaXQoRXNjYXBlZCk7IH0KLSAgICAgICAgdm9pZCBzZXRFc2NhcGVkKGJvb2wgdikg
eyBzZXRCaXQoRXNjYXBlZCwgdik7IH0KLSAgICAgICAgYm9vbCBpblNlcnZlcigpIGNvbnN0IHsg
cmV0dXJuIHRlc3RCaXQoSW5TZXJ2ZXIpOyB9Ci0gICAgICAgIHZvaWQgc2V0SW5TZXJ2ZXIoYm9v
bCB2KSB7IHNldEJpdChJblNlcnZlciwgdik7IH0KLSAgICAgICAgYm9vbCBza2lwTEYoKSBjb25z
dCB7IHJldHVybiB0ZXN0Qml0KFNraXBMRik7IH0KLSAgICAgICAgdm9pZCBzZXRTa2lwTEYoYm9v
bCB2KSB7IHNldEJpdChTa2lwTEYsIHYpOyB9Ci0gICAgICAgIGJvb2wgc3RhcnRUYWcoKSBjb25z
dCB7IHJldHVybiB0ZXN0Qml0KFN0YXJ0VGFnKTsgfQotICAgICAgICB2b2lkIHNldFN0YXJ0VGFn
KGJvb2wgdikgeyBzZXRCaXQoU3RhcnRUYWcsIHYpOyB9Ci0gICAgICAgIGJvb2wgZGlzY2FyZExG
KCkgY29uc3QgeyByZXR1cm4gdGVzdEJpdChEaXNjYXJkTEYpOyB9Ci0gICAgICAgIHZvaWQgc2V0
RGlzY2FyZExGKGJvb2wgdikgeyBzZXRCaXQoRGlzY2FyZExGLCB2KTsgfQotICAgICAgICBib29s
IGFsbG93WWllbGQoKSBjb25zdCB7IHJldHVybiB0ZXN0Qml0KEFsbG93WWllbGQpOyB9Ci0gICAg
ICAgIHZvaWQgc2V0QWxsb3dZaWVsZChib29sIHYpIHsgc2V0Qml0KEFsbG93WWllbGQsIHYpOyB9
Ci0gICAgICAgIGJvb2wgbG9hZGluZ0V4dFNjcmlwdCgpIGNvbnN0IHsgcmV0dXJuIHRlc3RCaXQo
TG9hZGluZ0V4dFNjcmlwdCk7IH0KLSAgICAgICAgdm9pZCBzZXRMb2FkaW5nRXh0U2NyaXB0KGJv
b2wgdikgeyBzZXRCaXQoTG9hZGluZ0V4dFNjcmlwdCwgdik7IH0KLSAgICAgICAgYm9vbCBmb3Jj
ZVN5bmNocm9ub3VzKCkgY29uc3QgeyByZXR1cm4gdGVzdEJpdChGb3JjZVN5bmNocm9ub3VzKTsg
fQotICAgICAgICB2b2lkIHNldEZvcmNlU3luY2hyb25vdXMoYm9vbCB2KSB7IHNldEJpdChGb3Jj
ZVN5bmNocm9ub3VzLCB2KTsgfQotCi0gICAgICAgIGJvb2wgaW5BbnlOb25IVE1MVGV4dCgpIGNv
bnN0IHsgcmV0dXJuIG1fYml0cyAmIChJblNjcmlwdCB8IEluU3R5bGUgfCBJblhtcCB8IEluVGV4
dEFyZWEgfCBJblRpdGxlIHwgSW5JRnJhbWUpOyB9Ci0gICAgICAgIGJvb2wgaGFzVGFnU3RhdGUo
KSBjb25zdCB7IHJldHVybiBtX2JpdHMgJiBUYWdNYXNrOyB9Ci0gICAgICAgIGJvb2wgaGFzRW50
aXR5U3RhdGUoKSBjb25zdCB7IHJldHVybiBtX2JpdHMgJiBFbnRpdHlNYXNrOyB9Ci0KLSAgICAg
ICAgYm9vbCBuZWVkc1NwZWNpYWxXcml0ZUhhbmRsaW5nKCkgY29uc3QgeyByZXR1cm4gbV9iaXRz
ICYgKEluU2NyaXB0IHwgSW5TdHlsZSB8IEluWG1wIHwgSW5UZXh0QXJlYSB8IEluVGl0bGUgfCBJ
bklGcmFtZSB8IFRhZ01hc2sgfCBFbnRpdHlNYXNrIHwgSW5QbGFpblRleHQgfCBJbkNvbW1lbnQg
fCBJbkRvY3R5cGUgfCBJblNlcnZlciB8IEluUHJvY2Vzc2luZ0luc3RydWN0aW9uIHwgU3RhcnRU
YWcpOyB9Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBzdGF0aWMgY29uc3QgaW50IEVudGl0eVNo
aWZ0ID0gNDsKLSAgICAgICAgZW51bSBTdGF0ZUJpdHMgewotICAgICAgICAgICAgVGFnTWFzayA9
ICgxIDw8IDQpIC0gMSwKLSAgICAgICAgICAgIEVudGl0eU1hc2sgPSAoMSA8PCA3KSAtICgxIDw8
IDQpLAotICAgICAgICAgICAgSW5TY3JpcHQgPSAxIDw8IDcsCi0gICAgICAgICAgICBJblN0eWxl
ID0gMSA8PCA4LAotICAgICAgICAgICAgLy8gQml0IDkgdW51c2VkCi0gICAgICAgICAgICBJblht
cCA9IDEgPDwgMTAsCi0gICAgICAgICAgICBJblRpdGxlID0gMSA8PCAxMSwKLSAgICAgICAgICAg
IEluUGxhaW5UZXh0ID0gMSA8PCAxMiwKLSAgICAgICAgICAgIEluUHJvY2Vzc2luZ0luc3RydWN0
aW9uID0gMSA8PCAxMywKLSAgICAgICAgICAgIEluQ29tbWVudCA9IDEgPDwgMTQsCi0gICAgICAg
ICAgICBJblRleHRBcmVhID0gMSA8PCAxNSwKLSAgICAgICAgICAgIEVzY2FwZWQgPSAxIDw8IDE2
LAotICAgICAgICAgICAgSW5TZXJ2ZXIgPSAxIDw8IDE3LAotICAgICAgICAgICAgU2tpcExGID0g
MSA8PCAxOCwKLSAgICAgICAgICAgIFN0YXJ0VGFnID0gMSA8PCAxOSwKLSAgICAgICAgICAgIERp
c2NhcmRMRiA9IDEgPDwgMjAsIC8vIEZJWE1FOiBzaG91bGQgY2xhcmlmeSBkaWZmZXJlbmNlIGJl
dHdlZW4gc2tpcCBhbmQgZGlzY2FyZAotICAgICAgICAgICAgQWxsb3dZaWVsZCA9IDEgPDwgMjEs
Ci0gICAgICAgICAgICBMb2FkaW5nRXh0U2NyaXB0ID0gMSA8PCAyMiwKLSAgICAgICAgICAgIEZv
cmNlU3luY2hyb25vdXMgPSAxIDw8IDIzLAotICAgICAgICAgICAgSW5JRnJhbWUgPSAxIDw8IDI0
LAotICAgICAgICAgICAgSW5Eb2N0eXBlID0gMSA8PCAyNQotICAgICAgICB9OwotCi0gICAgICAg
IHZvaWQgc2V0Qml0KFN0YXRlQml0cyBiaXQsIGJvb2wgdmFsdWUpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIGlmICh2YWx1ZSkKLSAgICAgICAgICAgICAgICBtX2JpdHMgfD0gYml0OwotICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgICAgIG1fYml0cyAmPSB+Yml0OwotICAgICAgICB9Ci0g
ICAgICAgIGJvb2wgdGVzdEJpdChTdGF0ZUJpdHMgYml0KSBjb25zdCB7IHJldHVybiBtX2JpdHMg
JiBiaXQ7IH0KLQotICAgICAgICB1bnNpZ25lZCBtX2JpdHM7Ci0gICAgfTsKLQotICAgIFN0YXRl
IG1fc3RhdGU7Ci0KLSAgICBEb2N0eXBlVG9rZW4gbV9kb2N0eXBlVG9rZW47Ci0gICAgaW50IG1f
ZG9jdHlwZVNlYXJjaENvdW50OwotICAgIGludCBtX2RvY3R5cGVTZWNvbmRhcnlTZWFyY2hDb3Vu
dDsKLQotICAgIGJvb2wgbV9icm9rZW5TZXJ2ZXI7Ci0KLSAgICAvLyBOYW1lIG9mIGFuIGF0dHJp
YnV0ZSB0aGF0IHdlIGp1c3Qgc2Nhbm5lZC4KLSAgICBBdG9taWNTdHJpbmcgbV9hdHRyTmFtZTsK
LQotICAgIC8vIFVzZWQgdG8gc3RvcmUgdGhlIGNvZGUgb2YgYSBzY3JpcHRpbmcgc2VxdWVuY2UK
LSAgICBVQ2hhciogbV9zY3JpcHRDb2RlOwotICAgIC8vIFNpemUgb2YgdGhlIHNjcmlwdCBzZXF1
ZW56ZSBzdG9yZWQgaW4gQHJlZiAjc2NyaXB0Q29kZQotICAgIGludCBtX3NjcmlwdENvZGVTaXpl
OwotICAgIC8vIE1heGltYWwgc2l6ZSB0aGF0IGNhbiBiZSBzdG9yZWQgaW4gQHJlZiAjc2NyaXB0
Q29kZQotICAgIGludCBtX3NjcmlwdENvZGVDYXBhY2l0eTsKLSAgICAvLyByZXN5bmMgcG9pbnQg
b2Ygc2NyaXB0IGNvZGUgc2l6ZQotICAgIGludCBtX3NjcmlwdENvZGVSZXN5bmM7Ci0KLSAgICAv
LyBTdG9yZXMgY2hhcmFjdGVycyBpZiB3ZSBhcmUgc2Nhbm5pbmcgZm9yIGEgc3RyaW5nIGxpa2Ug
Ijwvc2NyaXB0PiIKLSAgICBVQ2hhciBzZWFyY2hCdWZmZXJbMTBdOwotCi0gICAgLy8gQ291bnRz
IHdoZXJlIHdlIGFyZSBpbiB0aGUgc3RyaW5nIHdlIGFyZSBzY2FubmluZyBmb3IKLSAgICBpbnQg
c2VhcmNoQ291bnQ7Ci0gICAgLy8gdGhlIHN0b3BwZXIgc3RyaW5nCi0gICAgY29uc3QgY2hhciog
bV9zZWFyY2hTdG9wcGVyOwotICAgIGludCBtX3NlYXJjaFN0b3BwZXJMZW5ndGg7Ci0KLSAgICAv
LyBpZiBubyBtb3JlIGRhdGEgaXMgY29taW5nLCBqdXN0IHBhcnNlIHdoYXQgd2UgaGF2ZSAoaW5j
bHVkaW5nIGV4dCBzY3JpcHRzIHRoYXQKLSAgICAvLyBtYXkgYmUgc3RpbGwgZG93bmxvYWRpbmcp
IGFuZCBmaW5pc2gKLSAgICBib29sIG1fbm9Nb3JlRGF0YTsKLSAgICAvLyBVUkwgdG8gZ2V0IHNv
dXJjZSBjb2RlIG9mIHNjcmlwdCBmcm9tCi0gICAgU3RyaW5nIG1fc2NyaXB0VGFnU3JjQXR0clZh
bHVlOwotICAgIFN0cmluZyBtX3NjcmlwdFRhZ0NoYXJzZXRBdHRyVmFsdWU7Ci0gICAgLy8gdGhl
IEhUTUwgY29kZSB3ZSB3aWxsIHBhcnNlIGFmdGVyIHRoZSBleHRlcm5hbCBzY3JpcHQgd2UgYXJl
IHdhaXRpbmcgZm9yIGhhcyBsb2FkZWQKLSAgICBTZWdtZW50ZWRTdHJpbmcgbV9wZW5kaW5nU3Jj
OwotCi0gICAgLy8gdGhlIEhUTUwgY29kZSB3ZSB3aWxsIHBhcnNlIGFmdGVyIHRoaXMgcGFydGlj
dWxhciBzY3JpcHQgaGFzCi0gICAgLy8gbG9hZGVkLCBidXQgYmVmb3JlIGFsbCBwZW5kaW5nIEhU
TUwKLSAgICBTZWdtZW50ZWRTdHJpbmcqIG1fY3VycmVudFByZXBlbmRpbmdTcmM7Ci0KLSAgICAv
LyB0cnVlIGlmIHdlIGFyZSBleGVjdXRpbmcgYSBzY3JpcHQgd2hpbGUgcGFyc2luZyBhIGRvY3Vt
ZW50LiBUaGlzIGNhdXNlcyB0aGUgcGFyc2luZyBvZgotICAgIC8vIHRoZSBvdXRwdXQgb2YgdGhl
IHNjcmlwdCB0byBiZSBwb3N0cG9uZWQgdW50aWwgYWZ0ZXIgdGhlIHNjcmlwdCBoYXMgZmluaXNo
ZWQgZXhlY3V0aW5nCi0gICAgaW50IG1fZXhlY3V0aW5nU2NyaXB0OwotICAgIERlcXVlPENhY2hl
ZFJlc291cmNlSGFuZGxlPENhY2hlZFNjcmlwdD4gPiBtX3BlbmRpbmdTY3JpcHRzOwotICAgIFJl
ZlB0cjxIVE1MU2NyaXB0RWxlbWVudD4gbV9zY3JpcHROb2RlOwotCi0gICAgYm9vbCBtX3JlcXVl
c3RpbmdTY3JpcHQ7Ci0gICAgYm9vbCBtX2hhc1NjcmlwdHNXYWl0aW5nRm9yU3R5bGVzaGVldHM7
Ci0KLSAgICAvLyBpZiB3ZSBmb3VuZCBvbmUgYnJva2VuIGNvbW1lbnQsIHRoZXJlIGFyZSBtb3N0
IGxpa2VseSBvdGhlcnMgYXMgd2VsbAotICAgIC8vIHN0b3JlIGEgZmxhZyB0byBnZXQgcmlkIG9m
IHRoZSBPKG5eMikgYmVoYXZpb3VyIGluIHN1Y2ggYSBjYXNlLgotICAgIGJvb2wgbV9icm9rZW5D
b21tZW50czsKLSAgICAvLyBjdXJyZW50IGxpbmUgbnVtYmVyCi0gICAgaW50IG1fbGluZU51bWJl
cjsKLSAgICBpbnQgbV9jdXJyZW50U2NyaXB0VGFnU3RhcnRMaW5lTnVtYmVyOwotICAgIGludCBt
X2N1cnJlbnRUYWdTdGFydExpbmVOdW1iZXI7Ci0KLSAgICBkb3VibGUgbV90b2tlbml6ZXJUaW1l
RGVsYXk7Ci0gICAgaW50IG1fdG9rZW5pemVyQ2h1bmtTaXplOwotCi0gICAgLy8gVGhlIHRpbWVy
IGZvciBjb250aW51ZWQgcHJvY2Vzc2luZy4KLSAgICBUaW1lcjxMZWdhY3lIVE1MRG9jdW1lbnRQ
YXJzZXI+IG1fdGltZXI7Ci0KLSAgICAvLyBUaGUgdGltZXIgZm9yIGNvbnRpbnVlZCBleGVjdXRp
bmcgZXh0ZXJuYWwgc2NyaXB0cy4KLSAgICBUaW1lcjxMZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXI+
IG1fZXh0ZXJuYWxTY3JpcHRzVGltZXI7Ci0KLS8vIFRoaXMgYnVmZmVyIGNhbiBob2xkIGFyYml0
cmFyaWx5IGxvbmcgdXNlci1kZWZpbmVkIGF0dHJpYnV0ZSBuYW1lcywgc3VjaCBhcyBpbiBFTUJF
RCB0YWdzLgotLy8gU28gYW55IGZpeGVkIG51bWJlciBtaWdodCBiZSB0b28gc21hbGwsIGJ1dCBy
YXRoZXIgdGhhbiByZXdyaXRpbmcgYWxsIHVzYWdlIG9mIHRoaXMgYnVmZmVyCi0vLyB3ZSdsbCBq
dXN0IG1ha2UgaXQgbGFyZ2UgZW5vdWdoIHRvIGhhbmRsZSBhbGwgaW1hZ2luYWJsZSBjYXNlcy4K
LSNkZWZpbmUgQ0JVRkxFTiAxMDI0Ci0gICAgVUNoYXIgbV9jQnVmZmVyW0NCVUZMRU4gKyAyXTsK
LSAgICB1bnNpZ25lZCBpbnQgbV9jQnVmZmVyUG9zOwotCi0gICAgU2VnbWVudGVkU3RyaW5nIG1f
c3JjOwotICAgIE93blB0cjxMZWdhY3lIVE1MVHJlZUJ1aWxkZXI+IG1fdHJlZUJ1aWxkZXI7Ci0g
ICAgYm9vbCBtX2luV3JpdGU7Ci0gICAgYm9vbCBtX2ZyYWdtZW50OwotICAgIEZyYWdtZW50U2Ny
aXB0aW5nUGVybWlzc2lvbiBtX3NjcmlwdGluZ1Blcm1pc3Npb247Ci0KLSAgICBPd25QdHI8TGVn
YWN5UHJlbG9hZFNjYW5uZXI+IG1fcHJlbG9hZFNjYW5uZXI7Ci19OwotCi1VQ2hhciBkZWNvZGVO
YW1lZEVudGl0eShjb25zdCBjaGFyKik7Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2Vu
ZGlmIC8vIExlZ2FjeUhUTUxEb2N1bWVudFBhcnNlcl9oCmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0
bWwvTGVnYWN5SFRNTFRyZWVCdWlsZGVyLmNwcCBiL1dlYkNvcmUvaHRtbC9MZWdhY3lIVE1MVHJl
ZUJ1aWxkZXIuY3BwCmluZGV4IGVlMGJjZmNiZjllOGUzZWQxOWQwODNiMDIwZDIyZjJiYWRhZGQ2
Y2UuLmMzMjZmM2JhOWRlOGMwMzE5MTkxYmU4ODk4NjJlYzQ5YTMzMjJiMmEgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvaHRtbC9MZWdhY3lIVE1MVHJlZUJ1aWxkZXIuY3BwCisrKyBiL1dlYkNvcmUvaHRt
bC9MZWdhY3lIVE1MVHJlZUJ1aWxkZXIuY3BwCkBAIC01Miw3ICs1Miw2IEBACiAjaW5jbHVkZSAi
SFRNTFRhYmxlQ2VsbEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MVGFibGVSb3dFbGVtZW50Lmgi
CiAjaW5jbHVkZSAiSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQuaCIKLSNpbmNsdWRlICJMZWdhY3lI
VE1MRG9jdW1lbnRQYXJzZXIuaCIKICNpbmNsdWRlICJMb2NhbGl6ZWRTdHJpbmdzLmgiCiAjaW5j
bHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L2h0bWwvTGVnYWN5UHJlbG9hZFNjYW5uZXIuY3BwIGIvV2ViQ29yZS9odG1sL0xlZ2FjeVByZWxv
YWRTY2FubmVyLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjEzZWI0NTI3MWUw
ODI1ZjVlODZmZDEyMTgyZjljZGY0YThkZTI4MC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9XZWJDb3JlL2h0bWwvTGVnYWN5UHJlbG9hZFNjYW5uZXIuY3Bw
CisrKyAvZGV2L251bGwKQEAgLTEsODU2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA5
IFRvcmNoIE1vYmlsZSwgSW5jLiBodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
LSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIK
LSNpbmNsdWRlICJMZWdhY3lQcmVsb2FkU2Nhbm5lci5oIgotCi0jaW5jbHVkZSAiQ2FjaGVkQ1NT
U3R5bGVTaGVldC5oIgotI2luY2x1ZGUgIkNhY2hlZEltYWdlLmgiCi0jaW5jbHVkZSAiQ2FjaGVk
UmVzb3VyY2UuaCIKLSNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUNsaWVudC5oIgotI2luY2x1ZGUg
IkNhY2hlZFNjcmlwdC5oIgotI2luY2x1ZGUgIkNTU0hlbHBlci5oIgotI2luY2x1ZGUgIkRvY0xv
YWRlci5oIgotI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNs
dWRlICJGcmFtZUxvYWRlci5oIgotI2luY2x1ZGUgIkhUTUxMaW5rRWxlbWVudC5oIgotI2luY2x1
ZGUgIkhUTUxOYW1lcy5oIgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLSNpbmNsdWRl
IDx3dGYvQ3VycmVudFRpbWUuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9BdG9taWNTdHJpbmcuaD4K
LSNpbmNsdWRlIDx3dGYvdW5pY29kZS9Vbmljb2RlLmg+Ci0KLS8vIFVzZSBfX0dOVUNfXyBpbnN0
ZWFkIG9mIFBMQVRGT1JNKEdDQykgdG8gc3RheSBjb25zaXN0ZW50IHdpdGggdGhlIGdwZXJmIGdl
bmVyYXRlZCBjIGZpbGUKLSNpZmRlZiBfX0dOVUNfXwotLy8gVGhlIG1haW4gdG9rZW5pemVyIGlu
Y2x1ZGVzIHRoaXMgdG9vIHNvIHdlIGFyZSBnZXR0aW5nIHR3byBjb3BpZXMgb2YgdGhlIGRhdGEu
IEhvd2V2ZXIsIHRoaXMgd2F5IHRoZSBjb2RlIGdldHMgaW5saW5lZC4KLSNpbmNsdWRlICJIVE1M
RW50aXR5TmFtZXMuY3BwIgotI2Vsc2UKLS8vIE5vdCBpbmxpbmVkIGZvciBub24tR0NDIGNvbXBp
bGVycwotc3RydWN0IEVudGl0eSB7Ci0gICAgY29uc3QgY2hhciogbmFtZTsKLSAgICBpbnQgY29k
ZTsKLX07Ci1jb25zdCBzdHJ1Y3QgRW50aXR5KiBmaW5kRW50aXR5KHJlZ2lzdGVyIGNvbnN0IGNo
YXIqIHN0ciwgcmVnaXN0ZXIgdW5zaWduZWQgaW50IGxlbik7Ci0jZW5kaWYKLQotI2RlZmluZSBQ
UkVMT0FEX0RFQlVHIDAKLQotdXNpbmcgbmFtZXNwYWNlIFdURjsKLQotbmFtZXNwYWNlIFdlYkNv
cmUgewotICAgIAotdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKLSAgICAKLUxlZ2FjeVByZWxv
YWRTY2FubmVyOjpMZWdhY3lQcmVsb2FkU2Nhbm5lcihEb2N1bWVudCogZG9jKQotICAgIDogbV9p
blByb2dyZXNzKGZhbHNlKQotICAgICwgbV90aW1lVXNlZCgwKQotICAgICwgbV9ib2R5U2Vlbihm
YWxzZSkKLSAgICAsIG1fZG9jdW1lbnQoZG9jKQotewotI2lmIFBSRUxPQURfREVCVUcKLSAgICBw
cmludGYoIkNSRUFUSU5HIFBSRUxPQUQgU0NBTk5FUiBGT1IgJXNcbiIsIG1fZG9jdW1lbnQtPnVy
bCgpLnN0cmluZygpLmxhdGluMSgpLmRhdGEoKSk7Ci0jZW5kaWYKLX0KLSAgICAKLUxlZ2FjeVBy
ZWxvYWRTY2FubmVyOjp+TGVnYWN5UHJlbG9hZFNjYW5uZXIoKQotewotI2lmIFBSRUxPQURfREVC
VUcKLSAgICBwcmludGYoIkRFTEVUSU5HIFBSRUxPQUQgU0NBTk5FUiBGT1IgJXNcbiIsIG1fZG9j
dW1lbnQtPnVybCgpLnN0cmluZygpLmxhdGluMSgpLmRhdGEoKSk7Ci0gICAgcHJpbnRmKCJUT1RB
TCBUSU1FIFVTRUQgJS40ZnNcbiIsIG1fdGltZVVzZWQpOwotI2VuZGlmCi19Ci0gICAgCi12b2lk
IExlZ2FjeVByZWxvYWRTY2FubmVyOjpiZWdpbigpIAoteyAKLSAgICBBU1NFUlQoIW1faW5Qcm9n
cmVzcyk7IAotICAgIHJlc2V0KCk7IAotICAgIG1faW5Qcm9ncmVzcyA9IHRydWU7IAotfQotICAg
IAotdm9pZCBMZWdhY3lQcmVsb2FkU2Nhbm5lcjo6ZW5kKCkgCi17IAotICAgIEFTU0VSVChtX2lu
UHJvZ3Jlc3MpOyAKLSAgICBtX2luUHJvZ3Jlc3MgPSBmYWxzZTsgCi19Ci0KLXZvaWQgTGVnYWN5
UHJlbG9hZFNjYW5uZXI6OnJlc2V0KCkKLXsKLSAgICBtX3NvdXJjZS5jbGVhcigpOwotICAgIAot
ICAgIG1fc3RhdGUgPSBEYXRhOwotICAgIG1fZXNjYXBlID0gZmFsc2U7Ci0gICAgbV9jb250ZW50
TW9kZWwgPSBQQ0RBVEE7Ci0gICAgbV9jb21tZW50UG9zID0gMDsKLQotICAgIG1fY2xvc2VUYWcg
PSBmYWxzZTsKLSAgICBtX3RhZ05hbWUuY2xlYXIoKTsKLSAgICBtX2F0dHJpYnV0ZU5hbWUuY2xl
YXIoKTsKLSAgICBtX2F0dHJpYnV0ZVZhbHVlLmNsZWFyKCk7Ci0gICAgbV9sYXN0U3RhcnRUYWcg
PSBBdG9taWNTdHJpbmcoKTsKLSAgICAKLSAgICBtX3VybFRvTG9hZCA9IFN0cmluZygpOwotICAg
IG1fY2hhcnNldCA9IFN0cmluZygpOwotICAgIG1fbGlua0lzU3R5bGVTaGVldCA9IGZhbHNlOwot
ICAgIG1fbGFzdENoYXJhY3RlckluZGV4ID0gMDsKLSAgICBjbGVhckxhc3RDaGFyYWN0ZXJzKCk7
Ci0gICAgCi0gICAgbV9jc3NTdGF0ZSA9IENTU0luaXRpYWw7Ci0gICAgbV9jc3NSdWxlLmNsZWFy
KCk7Ci0gICAgbV9jc3NSdWxlVmFsdWUuY2xlYXIoKTsKLX0KLSAgICAKLWJvb2wgTGVnYWN5UHJl
bG9hZFNjYW5uZXI6OnNjYW5uaW5nQm9keSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fZG9jdW1l
bnQtPmJvZHkoKSB8fCBtX2JvZHlTZWVuOwotfQotICAgIAotdm9pZCBMZWdhY3lQcmVsb2FkU2Nh
bm5lcjo6d3JpdGUoY29uc3QgU2VnbWVudGVkU3RyaW5nJiBzb3VyY2UpCi17Ci0jaWYgUFJFTE9B
RF9ERUJVRwotICAgIGRvdWJsZSBzdGFydFRpbWUgPSBjdXJyZW50VGltZSgpOwotI2VuZGlmCi0g
ICAgdG9rZW5pemUoc291cmNlKTsKLSNpZiBQUkVMT0FEX0RFQlVHCi0gICAgbV90aW1lVXNlZCAr
PSBjdXJyZW50VGltZSgpIC0gc3RhcnRUaW1lOwotI2VuZGlmCi19Ci0gICAgCi1zdGF0aWMgaW5s
aW5lIGJvb2wgaXNXaGl0ZXNwYWNlKFVDaGFyIGMpCi17Ci0gICAgcmV0dXJuIGMgPT0gJyAnIHx8
IGMgPT0gJ1xuJyB8fCBjID09ICdccicgfHwgYyA9PSAnXHQnOwotfQotICAgIAotaW5saW5lIHZv
aWQgTGVnYWN5UHJlbG9hZFNjYW5uZXI6OmNsZWFyTGFzdENoYXJhY3RlcnMoKQotewotICAgIG1l
bXNldChtX2xhc3RDaGFyYWN0ZXJzLCAwLCBsYXN0Q2hhcmFjdGVyc0J1ZmZlclNpemUgKiBzaXpl
b2YoVUNoYXIpKTsKLX0KLSAgICAKLWlubGluZSB2b2lkIExlZ2FjeVByZWxvYWRTY2FubmVyOjpy
ZW1lbWJlckNoYXJhY3RlcihVQ2hhciBjKQotewotICAgIG1fbGFzdENoYXJhY3RlckluZGV4ID0g
KG1fbGFzdENoYXJhY3RlckluZGV4ICsgMSkgJSBsYXN0Q2hhcmFjdGVyc0J1ZmZlclNpemU7Ci0g
ICAgbV9sYXN0Q2hhcmFjdGVyc1ttX2xhc3RDaGFyYWN0ZXJJbmRleF0gPSBjOwotfQotICAgIAot
aW5saW5lIGJvb2wgTGVnYWN5UHJlbG9hZFNjYW5uZXI6Omxhc3RDaGFyYWN0ZXJzTWF0Y2goY29u
c3QgY2hhciogY2hhcnMsIHVuc2lnbmVkIGNvdW50KSBjb25zdAotewotICAgIHVuc2lnbmVkIHBv
cyA9IG1fbGFzdENoYXJhY3RlckluZGV4OwotICAgIHdoaWxlIChjb3VudCkgewotICAgICAgICBp
ZiAoY2hhcnNbY291bnQgLSAxXSAhPSBtX2xhc3RDaGFyYWN0ZXJzW3Bvc10pCi0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIC0tY291bnQ7Ci0gICAgICAgIGlmICghcG9zKQotICAg
ICAgICAgICAgcG9zID0gbGFzdENoYXJhY3RlcnNCdWZmZXJTaXplOwotICAgICAgICAtLXBvczsK
LSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0gICAgCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVk
IGxlZ2FsRW50aXR5Rm9yKHVuc2lnbmVkIHZhbHVlKQotewotICAgIC8vIEZJWE1FIFRoZXJlIGlz
IGEgdGFibGUgZm9yIG1vcmUgZXhjZXB0aW9ucyBpbiB0aGUgSFRNTDUgc3BlY2lmaWNhdGlvbi4K
LSAgICBpZiAodmFsdWUgPT0gMCB8fCB2YWx1ZSA+IDB4MTBGRkZGIHx8ICh2YWx1ZSA+PSAweEQ4
MDAgJiYgdmFsdWUgPD0gMHhERkZGKSkKLSAgICAgICAgcmV0dXJuIDB4RkZGRDsKLSAgICByZXR1
cm4gdmFsdWU7Ci19Ci0gICAgCi11bnNpZ25lZCBMZWdhY3lQcmVsb2FkU2Nhbm5lcjo6Y29uc3Vt
ZUVudGl0eShTZWdtZW50ZWRTdHJpbmcmIHNvdXJjZSwgYm9vbCYgbm90RW5vdWdoQ2hhcmFjdGVy
cykKLXsKLSAgICBlbnVtIEVudGl0eVN0YXRlIHsKLSAgICAgICAgSW5pdGlhbCwKLSAgICAgICAg
TnVtYmVyVHlwZSwKLSAgICAgICAgTWF5YmVIZXgsCi0gICAgICAgIEhleCwKLSAgICAgICAgRGVj
aW1hbCwKLSAgICAgICAgTmFtZWQKLSAgICB9OwotICAgIEVudGl0eVN0YXRlIGVudGl0eVN0YXRl
ID0gSW5pdGlhbDsKLSAgICB1bnNpZ25lZCByZXN1bHQgPSAwOwotICAgIFZlY3RvcjxVQ2hhciwg
MTA+IHNlZW5DaGFyczsKLSAgICBWZWN0b3I8Y2hhciwgMTA+IGVudGl0eU5hbWU7Ci0gICAgCi0g
ICAgd2hpbGUgKCFzb3VyY2UuaXNFbXB0eSgpKSB7Ci0gICAgICAgIFVDaGFyIGNjID0gKnNvdXJj
ZTsKLSAgICAgICAgc2VlbkNoYXJzLmFwcGVuZChjYyk7Ci0gICAgICAgIHN3aXRjaCAoZW50aXR5
U3RhdGUpIHsKLSAgICAgICAgY2FzZSBJbml0aWFsOgotICAgICAgICAgICAgaWYgKGlzV2hpdGVz
cGFjZShjYykgfHwgY2MgPT0gJzwnIHx8IGNjID09ICcmJykKLSAgICAgICAgICAgICAgICByZXR1
cm4gMDsKLSAgICAgICAgICAgIGVsc2UgaWYgKGNjID09ICcjJykgCi0gICAgICAgICAgICAgICAg
ZW50aXR5U3RhdGUgPSBOdW1iZXJUeXBlOwotICAgICAgICAgICAgZWxzZSBpZiAoKGNjID49ICdh
JyAmJiBjYyA8PSAneicpIHx8IChjYyA+PSAnQScgJiYgY2MgPD0gJ1onKSkgewotICAgICAgICAg
ICAgICAgIGVudGl0eU5hbWUuYXBwZW5kKGNjKTsKLSAgICAgICAgICAgICAgICBlbnRpdHlTdGF0
ZSA9IE5hbWVkOwotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgcmV0dXJuIDA7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBOdW1iZXJUeXBlOgotICAgICAgICAg
ICAgaWYgKGNjID09ICd4JyB8fCBjYyA9PSAnWCcpCi0gICAgICAgICAgICAgICAgZW50aXR5U3Rh
dGUgPSBNYXliZUhleDsKLSAgICAgICAgICAgIGVsc2UgaWYgKGNjID49ICcwJyAmJiBjYyA8PSAn
OScpIHsKLSAgICAgICAgICAgICAgICBlbnRpdHlTdGF0ZSA9IERlY2ltYWw7Ci0gICAgICAgICAg
ICAgICAgcmVzdWx0ID0gY2MgLSAnMCc7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgICAgIHNvdXJjZS5wdXNoKCcjJyk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBNYXliZUhleDoKLSAg
ICAgICAgICAgIGlmIChjYyA+PSAnMCcgJiYgY2MgPD0gJzknKQotICAgICAgICAgICAgICAgIHJl
c3VsdCA9IGNjIC0gJzAnOwotICAgICAgICAgICAgZWxzZSBpZiAoY2MgPj0gJ2EnICYmIGNjIDw9
ICdmJykKLSAgICAgICAgICAgICAgICByZXN1bHQgPSAxMCArIGNjIC0gJ2EnOwotICAgICAgICAg
ICAgZWxzZSBpZiAoY2MgPj0gJ0EnICYmIGNjIDw9ICdGJykKLSAgICAgICAgICAgICAgICByZXN1
bHQgPSAxMCArIGNjIC0gJ0EnOwotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAg
c291cmNlLnB1c2goJyMnKTsKLSAgICAgICAgICAgICAgICBzb3VyY2UucHVzaChzZWVuQ2hhcnNb
MV0pOwotICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgZW50aXR5U3RhdGUgPSBIZXg7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBI
ZXg6Ci0gICAgICAgICAgICBpZiAoY2MgPj0gJzAnICYmIGNjIDw9ICc5JykKLSAgICAgICAgICAg
ICAgICByZXN1bHQgPSByZXN1bHQgKiAxNiArIGNjIC0gJzAnOwotICAgICAgICAgICAgZWxzZSBp
ZiAoY2MgPj0gJ2EnICYmIGNjIDw9ICdmJykKLSAgICAgICAgICAgICAgICByZXN1bHQgPSByZXN1
bHQgKiAxNiArIDEwICsgY2MgLSAnYSc7Ci0gICAgICAgICAgICBlbHNlIGlmIChjYyA+PSAnQScg
JiYgY2MgPD0gJ0YnKQotICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCAqIDE2ICsgMTAg
KyBjYyAtICdBJzsKLSAgICAgICAgICAgIGVsc2UgaWYgKGNjID09ICc7JykgewotICAgICAgICAg
ICAgICAgIHNvdXJjZS5hZHZhbmNlKCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGxlZ2FsRW50
aXR5Rm9yKHJlc3VsdCk7Ci0gICAgICAgICAgICB9IGVsc2UgCi0gICAgICAgICAgICAgICAgcmV0
dXJuIGxlZ2FsRW50aXR5Rm9yKHJlc3VsdCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSBEZWNpbWFsOgotICAgICAgICAgICAgaWYgKGNjID49ICcwJyAmJiBjYyA8PSAnOScpCi0g
ICAgICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICogMTAgKyBjYyAtICcwJzsKLSAgICAgICAg
ICAgIGVsc2UgaWYgKGNjID09ICc7JykgewotICAgICAgICAgICAgICAgIHNvdXJjZS5hZHZhbmNl
KCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGxlZ2FsRW50aXR5Rm9yKHJlc3VsdCk7Ci0gICAg
ICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICByZXR1cm4gbGVnYWxFbnRpdHlGb3IocmVz
dWx0KTsKLSAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgIAotICAgICAgICBjYXNlIE5h
bWVkOgotICAgICAgICAgICAgLy8gVGhpcyBpcyB0aGUgYXR0cmlidXRlIG9ubHkgdmVyc2lvbiwg
Z2VuZXJpYyB2ZXJzaW9uIG1hdGNoZXMgc29tZXdoYXQgZGlmZmVyZW50bHkKLSAgICAgICAgICAg
IHdoaWxlIChlbnRpdHlOYW1lLnNpemUoKSA8PSA4KSB7Ci0gICAgICAgICAgICAgICAgaWYgKGNj
ID09ICc7JykgewotICAgICAgICAgICAgICAgICAgICBjb25zdCBFbnRpdHkqIGVudGl0eSA9IGZp
bmRFbnRpdHkoZW50aXR5TmFtZS5kYXRhKCksIGVudGl0eU5hbWUuc2l6ZSgpKTsKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKGVudGl0eSkgewotICAgICAgICAgICAgICAgICAgICAgICAgc291cmNl
LmFkdmFuY2UoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlbnRpdHktPmNvZGU7
Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmICghKGNjID49ICdhJyAmJiBjYyA8PSAn
eicpICYmICEoY2MgPj0gJ0EnICYmIGNjIDw9ICdaJykgJiYgIShjYyA+PSAnMCcgJiYgY2MgPD0g
JzknKSkgewotICAgICAgICAgICAgICAgICAgICBjb25zdCBFbnRpdHkqIGVudGl0eSA9IGZpbmRF
bnRpdHkoZW50aXR5TmFtZS5kYXRhKCksIGVudGl0eU5hbWUuc2l6ZSgpKTsKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKGVudGl0eSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlbnRp
dHktPmNvZGU7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICBlbnRpdHlOYW1lLmFwcGVuZChjYyk7Ci0gICAgICAgICAgICAgICAg
c291cmNlLmFkdmFuY2UoKTsKLSAgICAgICAgICAgICAgICBpZiAoc291cmNlLmlzRW1wdHkoKSkK
LSAgICAgICAgICAgICAgICAgICAgZ290byBvdXRPZkNoYXJhY3RlcnM7Ci0gICAgICAgICAgICAg
ICAgY2MgPSAqc291cmNlOwotICAgICAgICAgICAgICAgIHNlZW5DaGFycy5hcHBlbmQoY2MpOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHNlZW5DaGFycy5zaXplKCkgPT0gMikKLSAg
ICAgICAgICAgICAgICBzb3VyY2UucHVzaChzZWVuQ2hhcnNbMF0pOwotICAgICAgICAgICAgZWxz
ZSBpZiAoc2VlbkNoYXJzLnNpemUoKSA9PSAzKSB7Ci0gICAgICAgICAgICAgICAgc291cmNlLnB1
c2goc2VlbkNoYXJzWzBdKTsKLSAgICAgICAgICAgICAgICBzb3VyY2UucHVzaChzZWVuQ2hhcnNb
MV0pOwotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgc291cmNlLnByZXBlbmQo
U2VnbWVudGVkU3RyaW5nKFN0cmluZyhzZWVuQ2hhcnMuZGF0YSgpLCBzZWVuQ2hhcnMuc2l6ZSgp
IC0gMSkpKTsKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9Ci0gICAgICAgIHNvdXJj
ZS5hZHZhbmNlKCk7Ci0gICAgfQotb3V0T2ZDaGFyYWN0ZXJzOgotICAgIG5vdEVub3VnaENoYXJh
Y3RlcnMgPSB0cnVlOwotICAgIHNvdXJjZS5wcmVwZW5kKFNlZ21lbnRlZFN0cmluZyhTdHJpbmco
c2VlbkNoYXJzLmRhdGEoKSwgc2VlbkNoYXJzLnNpemUoKSkpKTsKLSAgICByZXR1cm4gMDsKLX0K
LQotdm9pZCBMZWdhY3lQcmVsb2FkU2Nhbm5lcjo6dG9rZW5pemUoY29uc3QgU2VnbWVudGVkU3Ry
aW5nJiBzb3VyY2UpCi17Ci0gICAgQVNTRVJUKG1faW5Qcm9ncmVzcyk7Ci0gICAgCi0gICAgbV9z
b3VyY2UuYXBwZW5kKHNvdXJjZSk7Ci0KLSAgICAvLyBUaGlzIGlzIGEgc2ltcGxpZmllZCBIVE1M
NSBUb2tlbml6ZXIKLSAgICAvLyBodHRwOi8vd3d3LndoYXR3Zy5vcmcvc3BlY3Mvd2ViLWFwcHMv
Y3VycmVudC13b3JrLyN0b2tlbmlzYXRpb24wCi0gICAgd2hpbGUgKCFtX3NvdXJjZS5pc0VtcHR5
KCkpIHsKLSAgICAgICAgVUNoYXIgY2MgPSAqbV9zb3VyY2U7Ci0gICAgICAgIHN3aXRjaCAobV9z
dGF0ZSkgewotICAgICAgICBjYXNlIERhdGE6Ci0gICAgICAgICAgICB3aGlsZSAoMSkgewotICAg
ICAgICAgICAgICAgIHJlbWVtYmVyQ2hhcmFjdGVyKGNjKTsKLSAgICAgICAgICAgICAgICBpZiAo
Y2MgPT0gJyYnKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtX2NvbnRlbnRNb2RlbCA9PSBQ
Q0RBVEEgfHwgbV9jb250ZW50TW9kZWwgPT0gUkNEQVRBKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBtX3N0YXRlID0gRW50aXR5RGF0YTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjYyA9
PSAnLScpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKChtX2NvbnRlbnRNb2RlbCA9PSBSQ0RB
VEEgfHwgbV9jb250ZW50TW9kZWwgPT0gQ0RBVEEpICYmICFtX2VzY2FwZSkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKGxhc3RDaGFyYWN0ZXJzTWF0Y2goIjwhLS0iLCA0KSkKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtX2VzY2FwZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNjID09ICc8JykgewotICAgICAgICAg
ICAgICAgICAgICBpZiAobV9jb250ZW50TW9kZWwgPT0gUENEQVRBIHx8ICgobV9jb250ZW50TW9k
ZWwgPT0gUkNEQVRBIHx8IG1fY29udGVudE1vZGVsID09IENEQVRBKSAmJiAhbV9lc2NhcGUpKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX3N0YXRlID0gVGFnT3BlbjsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgfSBlbHNlIGlmIChjYyA9PSAnPicpIHsKLSAgICAgICAgICAgICAgICAgICAgIGlmICgobV9j
b250ZW50TW9kZWwgPT0gUkNEQVRBIHx8IG1fY29udGVudE1vZGVsID09IENEQVRBKSAmJiBtX2Vz
Y2FwZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsYXN0Q2hhcmFjdGVyc01hdGNo
KCItLT4iLCAzKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9lc2NhcGUgPSBmYWxz
ZTsKLSAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgZW1pdENoYXJhY3RlcihjYyk7Ci0gICAgICAgICAgICAgICAgbV9zb3VyY2UuYWR2YW5j
ZSgpOwotICAgICAgICAgICAgICAgIGlmIChtX3NvdXJjZS5pc0VtcHR5KCkpCi0gICAgICAgICAg
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgY2MgPSAqbV9zb3VyY2U7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFbnRpdHlEYXRhOgot
ICAgICAgICAgICAgLy8gc2hvdWxkIHRyeSB0byBjb25zdW1lIHRoZSBlbnRpdHkgYnV0IHdlIG9u
bHkgY2FyZSBhYm91dCBlbnRpdGllcyBpbiBhdHRyaWJ1dGVzCi0gICAgICAgICAgICBtX3N0YXRl
ID0gRGF0YTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFRhZ09wZW46Ci0gICAg
ICAgICAgICBpZiAobV9jb250ZW50TW9kZWwgPT0gUkNEQVRBIHx8IG1fY29udGVudE1vZGVsID09
IENEQVRBKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGNjID09ICcvJykKLSAgICAgICAgICAgICAg
ICAgICAgbV9zdGF0ZSA9IENsb3NlVGFnT3BlbjsKLSAgICAgICAgICAgICAgICBlbHNlIHsKLSAg
ICAgICAgICAgICAgICAgICAgbV9zdGF0ZSA9IERhdGE7Ci0gICAgICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSBpZiAobV9jb250
ZW50TW9kZWwgPT0gUENEQVRBKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGNjID09ICchJykKLSAg
ICAgICAgICAgICAgICAgICAgbV9zdGF0ZSA9IE1hcmt1cERlY2xhcmF0aW9uT3BlbjsKLSAgICAg
ICAgICAgICAgICBlbHNlIGlmIChjYyA9PSAnLycpCi0gICAgICAgICAgICAgICAgICAgIG1fc3Rh
dGUgPSBDbG9zZVRhZ09wZW47Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoY2MgPj0gJ0EnICYm
IGNjIDw9ICdaJykgewotICAgICAgICAgICAgICAgICAgICBtX3RhZ05hbWUuY2xlYXIoKTsKLSAg
ICAgICAgICAgICAgICAgICAgbV9jaGFyc2V0ID0gU3RyaW5nKCk7Ci0gICAgICAgICAgICAgICAg
ICAgIG1fdGFnTmFtZS5hcHBlbmQoY2MgKyAweDIwKTsKLSAgICAgICAgICAgICAgICAgICAgbV9j
bG9zZVRhZyA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICBtX3N0YXRlID0gVGFnTmFtZTsK
LSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNjID49ICdhJyAmJiBjYyA8PSAneicpIHsKLSAg
ICAgICAgICAgICAgICAgICAgbV90YWdOYW1lLmNsZWFyKCk7Ci0gICAgICAgICAgICAgICAgICAg
IG1fY2hhcnNldCA9IFN0cmluZygpOwotICAgICAgICAgICAgICAgICAgICBtX3RhZ05hbWUuYXBw
ZW5kKGNjKTsKLSAgICAgICAgICAgICAgICAgICAgbV9jbG9zZVRhZyA9IGZhbHNlOwotICAgICAg
ICAgICAgICAgICAgICBtX3N0YXRlID0gVGFnTmFtZTsKLSAgICAgICAgICAgICAgICB9IGVsc2Ug
aWYgKGNjID09ICc+JykgewotICAgICAgICAgICAgICAgICAgICBtX3N0YXRlID0gRGF0YTsKLSAg
ICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNjID09ICc/JykgewotICAgICAgICAgICAgICAgICAg
ICBtX3N0YXRlID0gQm9ndXNDb21tZW50OwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgICAgIG1fc3RhdGUgPSBEYXRhOwotICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSBDbG9zZVRhZ09wZW46Ci0gICAgICAgICAgICBpZiAobV9jb250ZW50
TW9kZWwgPT0gUkNEQVRBIHx8IG1fY29udGVudE1vZGVsID09IENEQVRBKSB7Ci0gICAgICAgICAg
ICAgICAgaWYgKCFtX2xhc3RTdGFydFRhZy5sZW5ndGgoKSkgewotICAgICAgICAgICAgICAgICAg
ICBtX3N0YXRlID0gRGF0YTsKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChtX3NvdXJjZS5sZW5ndGgoKSA8IG1fbGFz
dFN0YXJ0VGFnLmxlbmd0aCgpICsgMSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICAgICAgICAgIFZlY3RvcjxVQ2hhcj4gdG1wU3RyaW5nOwotICAgICAgICAgICAgICAgIFVD
aGFyIHRtcENoYXIgPSAwOwotICAgICAgICAgICAgICAgIGJvb2wgbWF0Y2ggPSB0cnVlOwotICAg
ICAgICAgICAgICAgIGZvciAodW5zaWduZWQgbiA9IDA7IG4gPCBtX2xhc3RTdGFydFRhZy5sZW5n
dGgoKSArIDE7IG4rKykgewotICAgICAgICAgICAgICAgICAgICB0bXBDaGFyID0gVW5pY29kZTo6
dG9Mb3dlcigqbV9zb3VyY2UpOwotICAgICAgICAgICAgICAgICAgICBpZiAobiA8IG1fbGFzdFN0
YXJ0VGFnLmxlbmd0aCgpICYmIHRtcENoYXIgIT0gbV9sYXN0U3RhcnRUYWdbbl0pCi0gICAgICAg
ICAgICAgICAgICAgICAgICBtYXRjaCA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICB0bXBT
dHJpbmcuYXBwZW5kKHRtcENoYXIpOwotICAgICAgICAgICAgICAgICAgICBtX3NvdXJjZS5hZHZh
bmNlKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG1fc291cmNlLnByZXBl
bmQoU2VnbWVudGVkU3RyaW5nKFN0cmluZyh0bXBTdHJpbmcuZGF0YSgpLCB0bXBTdHJpbmcuc2l6
ZSgpKSkpOwotICAgICAgICAgICAgICAgIGlmICghbWF0Y2ggfHwgKCFpc1doaXRlc3BhY2UodG1w
Q2hhcikgJiYgdG1wQ2hhciAhPSAnPicgJiYgdG1wQ2hhciAhPSAnLycpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIG1fc3RhdGUgPSBEYXRhOwotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoY2MgPj0g
J0EnICYmIGNjIDw9ICdaJykgewotICAgICAgICAgICAgICAgIG1fdGFnTmFtZS5jbGVhcigpOwot
ICAgICAgICAgICAgICAgIG1fY2hhcnNldCA9IFN0cmluZygpOwotICAgICAgICAgICAgICAgIG1f
dGFnTmFtZS5hcHBlbmQoY2MgKyAweDIwKTsKLSAgICAgICAgICAgICAgICBtX2Nsb3NlVGFnID0g
dHJ1ZTsKLSAgICAgICAgICAgICAgICBtX3N0YXRlID0gVGFnTmFtZTsKLSAgICAgICAgICAgIH0g
ZWxzZSBpZiAoY2MgPj0gJ2EnICYmIGNjIDw9ICd6JykgewotICAgICAgICAgICAgICAgIG1fdGFn
TmFtZS5jbGVhcigpOwotICAgICAgICAgICAgICAgIG1fY2hhcnNldCA9IFN0cmluZygpOwotICAg
ICAgICAgICAgICAgIG1fdGFnTmFtZS5hcHBlbmQoY2MpOwotICAgICAgICAgICAgICAgIG1fY2xv
c2VUYWcgPSB0cnVlOwotICAgICAgICAgICAgICAgIG1fc3RhdGUgPSBUYWdOYW1lOwotICAgICAg
ICAgICAgfSBlbHNlIGlmIChjYyA9PSAnPicpIHsKLSAgICAgICAgICAgICAgICBtX3N0YXRlID0g
RGF0YTsKLSAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIG1fc3RhdGUgPSBCb2d1
c0NvbW1lbnQ7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBUYWdOYW1lOgotICAg
ICAgICAgICAgd2hpbGUgKDEpIHsKLSAgICAgICAgICAgICAgICBpZiAoaXNXaGl0ZXNwYWNlKGNj
KSkgewotICAgICAgICAgICAgICAgICAgICBtX3N0YXRlID0gQmVmb3JlQXR0cmlidXRlTmFtZTsK
LSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIGlmIChjYyA9PSAnPicpIHsKLSAgICAgICAgICAgICAgICAgICAgZW1pdFRhZygpOwot
ICAgICAgICAgICAgICAgICAgICBtX3N0YXRlID0gRGF0YTsKLSAgICAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChjYyA9PSAnLycp
IHsKLSAgICAgICAgICAgICAgICAgICAgbV9zdGF0ZSA9IEJlZm9yZUF0dHJpYnV0ZU5hbWU7Ci0g
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICBpZiAoY2MgPj0gJ0EnICYmIGNjIDw9ICdaJykKLSAgICAgICAgICAgICAgICAgICAgbV90
YWdOYW1lLmFwcGVuZChjYyArIDB4MjApOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICAgICAgbV90YWdOYW1lLmFwcGVuZChjYyk7Ci0gICAgICAgICAgICAgICAgbV9zb3Vy
Y2UuYWR2YW5jZSgpOwotICAgICAgICAgICAgICAgIGlmIChtX3NvdXJjZS5pc0VtcHR5KCkpCi0g
ICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICBjYyA9ICptX3NvdXJj
ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEJlZm9y
ZUF0dHJpYnV0ZU5hbWU6Ci0gICAgICAgICAgICBpZiAoaXNXaGl0ZXNwYWNlKGNjKSkKLSAgICAg
ICAgICAgICAgICA7Ci0gICAgICAgICAgICBlbHNlIGlmIChjYyA9PSAnPicpIHsKLSAgICAgICAg
ICAgICAgICBlbWl0VGFnKCk7Ci0gICAgICAgICAgICAgICAgbV9zdGF0ZSA9IERhdGE7Ci0gICAg
ICAgICAgICB9IGVsc2UgaWYgKGNjID49ICdBJyAmJiBjYyA8PSAnWicpIHsKLSAgICAgICAgICAg
ICAgICBtX2F0dHJpYnV0ZU5hbWUuY2xlYXIoKTsKLSAgICAgICAgICAgICAgICBtX2F0dHJpYnV0
ZVZhbHVlLmNsZWFyKCk7Ci0gICAgICAgICAgICAgICAgbV9hdHRyaWJ1dGVOYW1lLmFwcGVuZChj
YyArIDB4MjApOwotICAgICAgICAgICAgICAgIG1fc3RhdGUgPSBBdHRyaWJ1dGVOYW1lOwotICAg
ICAgICAgICAgfSBlbHNlIGlmIChjYyA9PSAnLycpCi0gICAgICAgICAgICAgICAgOwotICAgICAg
ICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgbV9hdHRyaWJ1dGVOYW1lLmNsZWFyKCk7Ci0g
ICAgICAgICAgICAgICAgbV9hdHRyaWJ1dGVWYWx1ZS5jbGVhcigpOwotICAgICAgICAgICAgICAg
IG1fYXR0cmlidXRlTmFtZS5hcHBlbmQoY2MpOwotICAgICAgICAgICAgICAgIG1fc3RhdGUgPSBB
dHRyaWJ1dGVOYW1lOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGNhc2UgQXR0cmlidXRlTmFtZToKLSAgICAgICAgICAgIHdoaWxlICgxKSB7Ci0gICAgICAgICAg
ICAgICAgaWYgKGlzV2hpdGVzcGFjZShjYykpIHsKLSAgICAgICAgICAgICAgICAgICAgbV9zdGF0
ZSA9IEFmdGVyQXR0cmlidXRlTmFtZTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChjYyA9PSAnPScpIHsKLSAgICAgICAg
ICAgICAgICAgICAgbV9zdGF0ZSA9IEJlZm9yZUF0dHJpYnV0ZVZhbHVlOwotICAgICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKGNj
ID09ICc+JykgewotICAgICAgICAgICAgICAgICAgICBlbWl0VGFnKCk7Ci0gICAgICAgICAgICAg
ICAgICAgIG1fc3RhdGUgPSBEYXRhOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgICB9IAotICAgICAgICAgICAgICAgIGlmIChjYyA9PSAnLycpIHsKLSAgICAgICAg
ICAgICAgICAgICAgbV9zdGF0ZSA9IEJlZm9yZUF0dHJpYnV0ZU5hbWU7Ci0gICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoY2Mg
Pj0gJ0EnICYmIGNjIDw9ICdaJykKLSAgICAgICAgICAgICAgICAgICAgbV9hdHRyaWJ1dGVOYW1l
LmFwcGVuZChjYyArIDB4MjApOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAg
ICAgICAgbV9hdHRyaWJ1dGVOYW1lLmFwcGVuZChjYyk7Ci0gICAgICAgICAgICAgICAgbV9zb3Vy
Y2UuYWR2YW5jZSgpOwotICAgICAgICAgICAgICAgIGlmIChtX3NvdXJjZS5pc0VtcHR5KCkpCi0g
ICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICBjYyA9ICptX3NvdXJj
ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFmdGVy
QXR0cmlidXRlTmFtZToKLSAgICAgICAgICAgIGlmIChpc1doaXRlc3BhY2UoY2MpKQotICAgICAg
ICAgICAgICAgIDsKLSAgICAgICAgICAgIGVsc2UgaWYgKGNjID09ICc9JykKLSAgICAgICAgICAg
ICAgICBtX3N0YXRlID0gQmVmb3JlQXR0cmlidXRlVmFsdWU7IAotICAgICAgICAgICAgZWxzZSBp
ZiAoY2MgPT0gJz4nKSB7Ci0gICAgICAgICAgICAgICAgZW1pdFRhZygpOwotICAgICAgICAgICAg
ICAgIG1fc3RhdGUgPSBEYXRhOwotICAgICAgICAgICAgfSBlbHNlIGlmIChjYyA+PSAnQScgJiYg
Y2MgPD0gJ1onKSB7Ci0gICAgICAgICAgICAgICAgbV9hdHRyaWJ1dGVOYW1lLmNsZWFyKCk7Ci0g
ICAgICAgICAgICAgICAgbV9hdHRyaWJ1dGVWYWx1ZS5jbGVhcigpOwotICAgICAgICAgICAgICAg
IG1fYXR0cmlidXRlTmFtZS5hcHBlbmQoY2MgKyAweDIwKTsKLSAgICAgICAgICAgICAgICBtX3N0
YXRlID0gQXR0cmlidXRlTmFtZTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoY2MgPT0gJy8nKQot
ICAgICAgICAgICAgICAgIG1fc3RhdGUgPSBCZWZvcmVBdHRyaWJ1dGVOYW1lOwotICAgICAgICAg
ICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgbV9hdHRyaWJ1dGVOYW1lLmNsZWFyKCk7Ci0gICAg
ICAgICAgICAgICAgbV9hdHRyaWJ1dGVWYWx1ZS5jbGVhcigpOwotICAgICAgICAgICAgICAgIG1f
YXR0cmlidXRlTmFtZS5hcHBlbmQoY2MpOwotICAgICAgICAgICAgICAgIG1fc3RhdGUgPSBBdHRy
aWJ1dGVOYW1lOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgQmVmb3JlQXR0cmlidXRlVmFsdWU6Ci0gICAgICAgICAgICBpZiAoaXNXaGl0ZXNwYWNlKGNj
KSkKLSAgICAgICAgICAgICAgICA7Ci0gICAgICAgICAgICBlbHNlIGlmIChjYyA9PSAnIicpCi0g
ICAgICAgICAgICAgICAgbV9zdGF0ZSA9IEF0dHJpYnV0ZVZhbHVlRG91YmxlUXVvdGVkOwotICAg
ICAgICAgICAgZWxzZSBpZiAoY2MgPT0gJyYnKSB7Ci0gICAgICAgICAgICAgICAgbV9zdGF0ZSA9
IEF0dHJpYnV0ZVZhbHVlVW5xdW90ZWQ7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgICAgICB9IGVsc2UgaWYgKGNjID09ICdcJycpCi0gICAgICAgICAgICAgICAgbV9zdGF0ZSA9
IEF0dHJpYnV0ZVZhbHVlU2luZ2xlUXVvdGVkOwotICAgICAgICAgICAgZWxzZSBpZiAoY2MgPT0g
Jz4nKSB7Ci0gICAgICAgICAgICAgICAgZW1pdFRhZygpOwotICAgICAgICAgICAgICAgIG1fc3Rh
dGUgPSBEYXRhOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBtX2F0dHJp
YnV0ZVZhbHVlLmFwcGVuZChjYyk7Ci0gICAgICAgICAgICAgICAgbV9zdGF0ZSA9IEF0dHJpYnV0
ZVZhbHVlVW5xdW90ZWQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBBdHRyaWJ1dGVWYWx1ZURvdWJsZVF1b3RlZDoKLSAgICAgICAgICAgIHdoaWxlICgx
KSB7Ci0gICAgICAgICAgICAgICAgaWYgKGNjID09ICciJykgewotICAgICAgICAgICAgICAgICAg
ICBwcm9jZXNzQXR0cmlidXRlKCk7Ci0gICAgICAgICAgICAgICAgICAgIG1fc3RhdGUgPSBCZWZv
cmVBdHRyaWJ1dGVOYW1lOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKGNjID09ICcmJykgewotICAgICAgICAgICAgICAg
ICAgICBtX3N0YXRlQmVmb3JlRW50aXR5SW5BdHRyaWJ1dGVWYWx1ZSA9IG1fc3RhdGU7Ci0gICAg
ICAgICAgICAgICAgICAgIG1fc3RhdGUgPSBFbnRpdHlJbkF0dHJpYnV0ZVZhbHVlOwotICAgICAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9IAotICAgICAgICAgICAgICAg
IG1fYXR0cmlidXRlVmFsdWUuYXBwZW5kKGNjKTsKLSAgICAgICAgICAgICAgICBtX3NvdXJjZS5h
ZHZhbmNlKCk7Ci0gICAgICAgICAgICAgICAgaWYgKG1fc291cmNlLmlzRW1wdHkoKSkKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIGNjID0gKm1fc291cmNlOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXR0cmlidXRl
VmFsdWVTaW5nbGVRdW90ZWQ6Ci0gICAgICAgICAgICB3aGlsZSAoMSkgewotICAgICAgICAgICAg
ICAgIGlmIChjYyA9PSAnXCcnKSB7Ci0gICAgICAgICAgICAgICAgICAgIHByb2Nlc3NBdHRyaWJ1
dGUoKTsKLSAgICAgICAgICAgICAgICAgICAgbV9zdGF0ZSA9IEJlZm9yZUF0dHJpYnV0ZU5hbWU7
Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICBpZiAoY2MgPT0gJyYnKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1fc3RhdGVCZWZv
cmVFbnRpdHlJbkF0dHJpYnV0ZVZhbHVlID0gbV9zdGF0ZTsKLSAgICAgICAgICAgICAgICAgICAg
bV9zdGF0ZSA9IEVudGl0eUluQXR0cmlidXRlVmFsdWU7Ci0gICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICAgIH0gCi0gICAgICAgICAgICAgICAgbV9hdHRyaWJ1dGVWYWx1
ZS5hcHBlbmQoY2MpOwotICAgICAgICAgICAgICAgIG1fc291cmNlLmFkdmFuY2UoKTsKLSAgICAg
ICAgICAgICAgICBpZiAobV9zb3VyY2UuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgICAgICAgICAgY2MgPSAqbV9zb3VyY2U7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBdHRyaWJ1dGVWYWx1ZVVucXVvdGVkOgot
ICAgICAgICAgICAgd2hpbGUgKDEpIHsKLSAgICAgICAgICAgICAgICBpZiAoaXNXaGl0ZXNwYWNl
KGNjKSkgewotICAgICAgICAgICAgICAgICAgICBwcm9jZXNzQXR0cmlidXRlKCk7Ci0gICAgICAg
ICAgICAgICAgICAgIG1fc3RhdGUgPSBCZWZvcmVBdHRyaWJ1dGVOYW1lOwotICAgICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKGNj
ID09ICcmJykgewotICAgICAgICAgICAgICAgICAgICBtX3N0YXRlQmVmb3JlRW50aXR5SW5BdHRy
aWJ1dGVWYWx1ZSA9IG1fc3RhdGU7Ci0gICAgICAgICAgICAgICAgICAgIG1fc3RhdGUgPSBFbnRp
dHlJbkF0dHJpYnV0ZVZhbHVlOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKGNjID09ICc+JykgewotICAgICAgICAgICAg
ICAgICAgICBwcm9jZXNzQXR0cmlidXRlKCk7Ci0gICAgICAgICAgICAgICAgICAgIGVtaXRUYWco
KTsKLSAgICAgICAgICAgICAgICAgICAgbV9zdGF0ZSA9IERhdGE7Ci0gICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBtX2F0dHJpYnV0
ZVZhbHVlLmFwcGVuZChjYyk7Ci0gICAgICAgICAgICAgICAgbV9zb3VyY2UuYWR2YW5jZSgpOwot
ICAgICAgICAgICAgICAgIGlmIChtX3NvdXJjZS5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICBjYyA9ICptX3NvdXJjZTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEVudGl0eUluQXR0cmlidXRlVmFs
dWU6IAotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGJvb2wgbm90RW5vdWdoQ2hhcmFj
dGVycyA9IGZhbHNlOyAKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBlbnRpdHkgPSBjb25zdW1l
RW50aXR5KG1fc291cmNlLCBub3RFbm91Z2hDaGFyYWN0ZXJzKTsKLSAgICAgICAgICAgICAgICBp
ZiAobm90RW5vdWdoQ2hhcmFjdGVycykKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICAgICAgICAgIGlmIChlbnRpdHkgPiAweEZGRkYpIHsKLSAgICAgICAgICAgICAgICAgICAg
bV9hdHRyaWJ1dGVWYWx1ZS5hcHBlbmQoVTE2X0xFQUQoZW50aXR5KSk7Ci0gICAgICAgICAgICAg
ICAgICAgIG1fYXR0cmlidXRlVmFsdWUuYXBwZW5kKFUxNl9UUkFJTChlbnRpdHkpKTsKLSAgICAg
ICAgICAgICAgICB9IGVsc2UgaWYgKGVudGl0eSkKLSAgICAgICAgICAgICAgICAgICAgbV9hdHRy
aWJ1dGVWYWx1ZS5hcHBlbmQoZW50aXR5KTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICAgICAgICAgIG1fYXR0cmlidXRlVmFsdWUuYXBwZW5kKCcmJyk7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBtX3N0YXRlID0gbV9zdGF0ZUJlZm9yZUVudGl0eUluQXR0cmlidXRlVmFs
dWU7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgY2FzZSBCb2d1c0NvbW1lbnQ6Ci0g
ICAgICAgICAgICB3aGlsZSAoMSkgewotICAgICAgICAgICAgICAgIGlmIChjYyA9PSAnPicpIHsK
LSAgICAgICAgICAgICAgICAgICAgbV9zdGF0ZSA9IERhdGE7Ci0gICAgICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBtX3NvdXJjZS5hZHZh
bmNlKCk7Ci0gICAgICAgICAgICAgICAgaWYgKG1fc291cmNlLmlzRW1wdHkoKSkKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIGNjID0gKm1fc291cmNlOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgTWFya3VwRGVjbGFy
YXRpb25PcGVuOiB7Ci0gICAgICAgICAgICBpZiAoY2MgPT0gJy0nKSB7Ci0gICAgICAgICAgICAg
ICAgaWYgKG1fc291cmNlLmxlbmd0aCgpIDwgMikKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICAgICAgICAgIG1fc291cmNlLmFkdmFuY2UoKTsKLSAgICAgICAgICAgICAgICBj
YyA9ICptX3NvdXJjZTsKLSAgICAgICAgICAgICAgICBpZiAoY2MgPT0gJy0nKQotICAgICAgICAg
ICAgICAgICAgICBtX3N0YXRlID0gQ29tbWVudFN0YXJ0OwotICAgICAgICAgICAgICAgIGVsc2Ug
ewotICAgICAgICAgICAgICAgICAgICBtX3N0YXRlID0gQm9ndXNDb21tZW50OwotICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAvLyBJ
ZiB3ZSBjYXJlZCBhYm91dCB0aGUgRE9DVFlQRSB3ZSB3b3VsZCB0ZXN0IHRvIGVudGVyIHRob3Nl
IHN0YXRlcyBoZXJlCi0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIG1fc3Rh
dGUgPSBCb2d1c0NvbW1lbnQ7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIENvbW1lbnRT
dGFydDoKLSAgICAgICAgICAgIGlmIChjYyA9PSAnLScpCi0gICAgICAgICAgICAgICAgbV9zdGF0
ZSA9IENvbW1lbnRTdGFydERhc2g7Ci0gICAgICAgICAgICBlbHNlIGlmIChjYyA9PSAnPicpCi0g
ICAgICAgICAgICAgICAgbV9zdGF0ZSA9IERhdGE7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICAgICAgbV9zdGF0ZSA9IENvbW1lbnQ7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSBDb21tZW50U3RhcnREYXNoOgotICAgICAgICAgICAgaWYgKGNjID09ICctJykKLSAgICAg
ICAgICAgICAgICBtX3N0YXRlID0gQ29tbWVudEVuZDsKLSAgICAgICAgICAgIGVsc2UgaWYgKGNj
ID09ICc+JykKLSAgICAgICAgICAgICAgICBtX3N0YXRlID0gRGF0YTsKLSAgICAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgICAgICBtX3N0YXRlID0gQ29tbWVudDsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBjYXNlIENvbW1lbnQ6Ci0gICAgICAgICAgICB3aGlsZSAoMSkgewotICAgICAg
ICAgICAgICAgIGlmIChjYyA9PSAnLScpIHsKLSAgICAgICAgICAgICAgICAgICAgbV9zdGF0ZSA9
IENvbW1lbnRFbmREYXNoOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgbV9zb3VyY2UuYWR2YW5jZSgpOwotICAgICAgICAgICAg
ICAgIGlmIChtX3NvdXJjZS5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgICAgICAgICBjYyA9ICptX3NvdXJjZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIENvbW1lbnRFbmREYXNoOgotICAgICAgICAgICAgaWYg
KGNjID09ICctJykKLSAgICAgICAgICAgICAgICBtX3N0YXRlID0gQ29tbWVudEVuZDsKLSAgICAg
ICAgICAgIGVsc2UgCi0gICAgICAgICAgICAgICAgbV9zdGF0ZSA9IENvbW1lbnQ7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDb21tZW50RW5kOgotICAgICAgICAgICAgaWYgKGNj
ID09ICc+JykKLSAgICAgICAgICAgICAgICBtX3N0YXRlID0gRGF0YTsKLSAgICAgICAgICAgIGVs
c2UgaWYgKGNjID09ICctJykKLSAgICAgICAgICAgICAgICA7Ci0gICAgICAgICAgICBlbHNlIAot
ICAgICAgICAgICAgICAgIG1fc3RhdGUgPSBDb21tZW50OwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIH0KLSAgICAgICAgbV9zb3VyY2UuYWR2YW5jZSgpOwotICAgIH0KLX0KLSAgICAKLXZv
aWQgTGVnYWN5UHJlbG9hZFNjYW5uZXI6OnByb2Nlc3NBdHRyaWJ1dGUoKQotewotICAgIEF0b21p
Y1N0cmluZyB0YWcgPSBBdG9taWNTdHJpbmcobV90YWdOYW1lLmRhdGEoKSwgbV90YWdOYW1lLnNp
emUoKSk7Ci0gICAgQXRvbWljU3RyaW5nIGF0dHJpYnV0ZSA9IEF0b21pY1N0cmluZyhtX2F0dHJp
YnV0ZU5hbWUuZGF0YSgpLCBtX2F0dHJpYnV0ZU5hbWUuc2l6ZSgpKTsKLSAgICAKLSAgICBTdHJp
bmcgdmFsdWUobV9hdHRyaWJ1dGVWYWx1ZS5kYXRhKCksIG1fYXR0cmlidXRlVmFsdWUuc2l6ZSgp
KTsKLSAgICBpZiAodGFnID09IHNjcmlwdFRhZyB8fCB0YWcgPT0gaW1nVGFnKSB7Ci0gICAgICAg
IGlmIChhdHRyaWJ1dGUgPT0gc3JjQXR0ciAmJiBtX3VybFRvTG9hZC5pc0VtcHR5KCkpCi0gICAg
ICAgICAgICBtX3VybFRvTG9hZCA9IGRlcHJlY2F0ZWRQYXJzZVVSTCh2YWx1ZSk7Ci0gICAgICAg
IGVsc2UgaWYgKGF0dHJpYnV0ZSA9PSBjaGFyc2V0QXR0cikKLSAgICAgICAgICAgIG1fY2hhcnNl
dCA9IHZhbHVlOwotICAgIH0gZWxzZSBpZiAodGFnID09IGxpbmtUYWcpIHsKLSAgICAgICAgaWYg
KGF0dHJpYnV0ZSA9PSBocmVmQXR0ciAmJiBtX3VybFRvTG9hZC5pc0VtcHR5KCkpCi0gICAgICAg
ICAgICBtX3VybFRvTG9hZCA9IGRlcHJlY2F0ZWRQYXJzZVVSTCh2YWx1ZSk7Ci0gICAgICAgIGVs
c2UgaWYgKGF0dHJpYnV0ZSA9PSByZWxBdHRyKSB7Ci0gICAgICAgICAgICBIVE1MTGlua0VsZW1l
bnQ6OlJlbEF0dHJpYnV0ZSByZWw7Ci0gICAgICAgICAgICBIVE1MTGlua0VsZW1lbnQ6OnRva2Vu
aXplUmVsQXR0cmlidXRlKHZhbHVlLCByZWwpOwotICAgICAgICAgICAgbV9saW5rSXNTdHlsZVNo
ZWV0ID0gcmVsLm1faXNTdHlsZVNoZWV0ICYmICFyZWwubV9pc0FsdGVybmF0ZSAmJiAhcmVsLm1f
aXNJY29uICYmICFyZWwubV9pc0ROU1ByZWZldGNoOwotICAgICAgICB9IGVsc2UgaWYgKGF0dHJp
YnV0ZSA9PSBjaGFyc2V0QXR0cikKLSAgICAgICAgICAgIG1fY2hhcnNldCA9IHZhbHVlOwotICAg
IH0KLX0KLSAgICAKLWlubGluZSB2b2lkIExlZ2FjeVByZWxvYWRTY2FubmVyOjplbWl0Q2hhcmFj
dGVyKFVDaGFyIGMpCi17Ci0gICAgaWYgKG1fY29udGVudE1vZGVsID09IENEQVRBICYmIG1fbGFz
dFN0YXJ0VGFnID09IHN0eWxlVGFnKSAKLSAgICAgICAgdG9rZW5pemVDU1MoYyk7Ci19Ci0gICAg
Ci1pbmxpbmUgdm9pZCBMZWdhY3lQcmVsb2FkU2Nhbm5lcjo6dG9rZW5pemVDU1MoVUNoYXIgYykK
LXsgICAgCi0gICAgLy8gV2UgYXJlIGp1c3QgaW50ZXJlc3RlZCBpbiBAaW1wb3J0IHJ1bGVzLCBu
byBuZWVkIGZvciByZWFsIHRva2VuaXphdGlvbiBoZXJlCi0gICAgLy8gU2VhcmNoaW5nIGZvciBv
dGhlciB0eXBlcyBvZiByZXNvdXJjZXMgaXMgcHJvYmFibHkgbG93IHBheW9mZgotICAgIHN3aXRj
aCAobV9jc3NTdGF0ZSkgewotICAgIGNhc2UgQ1NTSW5pdGlhbDoKLSAgICAgICAgaWYgKGMgPT0g
J0AnKQotICAgICAgICAgICAgbV9jc3NTdGF0ZSA9IENTU1J1bGVTdGFydDsKLSAgICAgICAgZWxz
ZSBpZiAoYyA9PSAnLycpCi0gICAgICAgICAgICBtX2Nzc1N0YXRlID0gQ1NTTWF5YmVDb21tZW50
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENTU01heWJlQ29tbWVudDoKLSAgICAgICAgaWYg
KGMgPT0gJyonKQotICAgICAgICAgICAgbV9jc3NTdGF0ZSA9IENTU0NvbW1lbnQ7Ci0gICAgICAg
IGVsc2UKLSAgICAgICAgICAgIG1fY3NzU3RhdGUgPSBDU1NJbml0aWFsOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIENTU0NvbW1lbnQ6Ci0gICAgICAgIGlmIChjID09ICcqJykKLSAgICAgICAg
ICAgIG1fY3NzU3RhdGUgPSBDU1NNYXliZUNvbW1lbnRFbmQ7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgQ1NTTWF5YmVDb21tZW50RW5kOgotICAgICAgICBpZiAoYyA9PSAnLycpCi0gICAgICAg
ICAgICBtX2Nzc1N0YXRlID0gQ1NTSW5pdGlhbDsKLSAgICAgICAgZWxzZSBpZiAoYyA9PSAnKicp
Ci0gICAgICAgICAgICA7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1fY3NzU3RhdGUgPSBD
U1NDb21tZW50OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENTU1J1bGVTdGFydDoKLSAgICAg
ICAgaWYgKChjID49ICdBJyAmJiBjIDw9ICdaJykgfHwgKGMgPj0gJ2EnICYmIGMgPD0gJ3onKSkg
ewotICAgICAgICAgICAgbV9jc3NSdWxlLmNsZWFyKCk7Ci0gICAgICAgICAgICBtX2Nzc1J1bGVW
YWx1ZS5jbGVhcigpOwotICAgICAgICAgICAgbV9jc3NSdWxlLmFwcGVuZChjKTsKLSAgICAgICAg
ICAgIG1fY3NzU3RhdGUgPSBDU1NSdWxlOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIG1f
Y3NzU3RhdGUgPSBDU1NJbml0aWFsOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENTU1J1bGU6
Ci0gICAgICAgIGlmIChpc1doaXRlc3BhY2UoYykpCi0gICAgICAgICAgICBtX2Nzc1N0YXRlID0g
Q1NTQWZ0ZXJSdWxlOwotICAgICAgICBlbHNlIGlmIChjID09ICc7JykKLSAgICAgICAgICAgIG1f
Y3NzU3RhdGUgPSBDU1NJbml0aWFsOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX2Nzc1J1
bGUuYXBwZW5kKGMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENTU0FmdGVyUnVsZToKLSAg
ICAgICAgaWYgKGlzV2hpdGVzcGFjZShjKSkKLSAgICAgICAgICAgIDsKLSAgICAgICAgZWxzZSBp
ZiAoYyA9PSAnOycpCi0gICAgICAgICAgICBtX2Nzc1N0YXRlID0gQ1NTSW5pdGlhbDsKLSAgICAg
ICAgZWxzZSB7Ci0gICAgICAgICAgICBtX2Nzc1N0YXRlID0gQ1NTUnVsZVZhbHVlOwotICAgICAg
ICAgICAgbV9jc3NSdWxlVmFsdWUuYXBwZW5kKGMpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgQ1NTUnVsZVZhbHVlOgotICAgICAgICBpZiAoaXNXaGl0ZXNwYWNlKGMpKQot
ICAgICAgICAgICAgbV9jc3NTdGF0ZSA9IENTU0FmdGVyUnVsZVZhbHVlOwotICAgICAgICBlbHNl
IGlmIChjID09ICc7JykgewotICAgICAgICAgICAgZW1pdENTU1J1bGUoKTsKLSAgICAgICAgICAg
IG1fY3NzU3RhdGUgPSBDU1NJbml0aWFsOwotICAgICAgICB9IGVsc2UgCi0gICAgICAgICAgICBt
X2Nzc1J1bGVWYWx1ZS5hcHBlbmQoYyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTQWZ0
ZXJSdWxlVmFsdWU6Ci0gICAgICAgIGlmIChpc1doaXRlc3BhY2UoYykpCi0gICAgICAgICAgICA7
Ci0gICAgICAgIGVsc2UgaWYgKGMgPT0gJzsnKSB7Ci0gICAgICAgICAgICBlbWl0Q1NTUnVsZSgp
OwotICAgICAgICAgICAgbV9jc3NTdGF0ZSA9IENTU0luaXRpYWw7Ci0gICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICAvLyBGSVhNRSBtZWRpYSBydWxlcwotICAgICAgICAgICAgIG1fY3NzU3Rh
dGUgPSBDU1NJbml0aWFsOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLX0KLSAg
ICAKLXZvaWQgTGVnYWN5UHJlbG9hZFNjYW5uZXI6OmVtaXRUYWcoKQotewotICAgIGlmIChtX2Ns
b3NlVGFnKSB7Ci0gICAgICAgIG1fY29udGVudE1vZGVsID0gUENEQVRBOwotICAgICAgICBtX2Nz
c1N0YXRlID0gQ1NTSW5pdGlhbDsKLSAgICAgICAgY2xlYXJMYXN0Q2hhcmFjdGVycygpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIEF0b21pY1N0cmluZyB0YWcobV90YWdOYW1l
LmRhdGEoKSwgbV90YWdOYW1lLnNpemUoKSk7Ci0gICAgbV9sYXN0U3RhcnRUYWcgPSB0YWc7Ci0g
ICAgCi0gICAgaWYgKHRhZyA9PSB0ZXh0YXJlYVRhZyB8fCB0YWcgPT0gdGl0bGVUYWcpCi0gICAg
ICAgIG1fY29udGVudE1vZGVsID0gUkNEQVRBOwotICAgIGVsc2UgaWYgKHRhZyA9PSBzdHlsZVRh
ZyB8fCB0YWcgPT0geG1wVGFnIHx8IHRhZyA9PSBzY3JpcHRUYWcgfHwgdGFnID09IGlmcmFtZVRh
ZyB8fCB0YWcgPT0gbm9lbWJlZFRhZyB8fCB0YWcgPT0gbm9mcmFtZXNUYWcpCi0gICAgICAgIG1f
Y29udGVudE1vZGVsID0gQ0RBVEE7Ci0gICAgZWxzZSBpZiAodGFnID09IG5vc2NyaXB0VGFnKQot
ICAgICAgICAvLyB3ZSB3b3VsZG4ndCBiZSBoZXJlIGlmIHNjcmlwdHMgd2VyZSBkaXNhYmxlZAot
ICAgICAgICBtX2NvbnRlbnRNb2RlbCA9IENEQVRBOwotICAgIGVsc2UgaWYgKHRhZyA9PSBwbGFp
bnRleHRUYWcpCi0gICAgICAgIG1fY29udGVudE1vZGVsID0gUExBSU5URVhUOwotICAgIGVsc2UK
LSAgICAgICAgbV9jb250ZW50TW9kZWwgPSBQQ0RBVEE7Ci0gICAgCi0gICAgaWYgKHRhZyA9PSBi
b2R5VGFnKQotICAgICAgICBtX2JvZHlTZWVuID0gdHJ1ZTsKLSAgICAKLSAgICBpZiAobV91cmxU
b0xvYWQuaXNFbXB0eSgpKSB7Ci0gICAgICAgIG1fbGlua0lzU3R5bGVTaGVldCA9IGZhbHNlOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIGlmICh0YWcgPT0gc2NyaXB0VGFnKQot
ICAgICAgICBtX2RvY3VtZW50LT5kb2NMb2FkZXIoKS0+cHJlbG9hZChDYWNoZWRSZXNvdXJjZTo6
U2NyaXB0LCBtX3VybFRvTG9hZCwgbV9jaGFyc2V0LCBzY2FubmluZ0JvZHkoKSk7Ci0gICAgZWxz
ZSBpZiAodGFnID09IGltZ1RhZykgCi0gICAgICAgIG1fZG9jdW1lbnQtPmRvY0xvYWRlcigpLT5w
cmVsb2FkKENhY2hlZFJlc291cmNlOjpJbWFnZVJlc291cmNlLCBtX3VybFRvTG9hZCwgU3RyaW5n
KCksIHNjYW5uaW5nQm9keSgpKTsKLSAgICBlbHNlIGlmICh0YWcgPT0gbGlua1RhZyAmJiBtX2xp
bmtJc1N0eWxlU2hlZXQpIAotICAgICAgICBtX2RvY3VtZW50LT5kb2NMb2FkZXIoKS0+cHJlbG9h
ZChDYWNoZWRSZXNvdXJjZTo6Q1NTU3R5bGVTaGVldCwgbV91cmxUb0xvYWQsIG1fY2hhcnNldCwg
c2Nhbm5pbmdCb2R5KCkpOwotCi0gICAgbV91cmxUb0xvYWQgPSBTdHJpbmcoKTsKLSAgICBtX2No
YXJzZXQgPSBTdHJpbmcoKTsKLSAgICBtX2xpbmtJc1N0eWxlU2hlZXQgPSBmYWxzZTsKLX0KLSAg
ICAKLXZvaWQgTGVnYWN5UHJlbG9hZFNjYW5uZXI6OmVtaXRDU1NSdWxlKCkKLXsKLSAgICBTdHJp
bmcgcnVsZShtX2Nzc1J1bGUuZGF0YSgpLCBtX2Nzc1J1bGUuc2l6ZSgpKTsKLSAgICBpZiAoZXF1
YWxJZ25vcmluZ0Nhc2UocnVsZSwgImltcG9ydCIpICYmICFtX2Nzc1J1bGVWYWx1ZS5pc0VtcHR5
KCkpIHsKLSAgICAgICAgU3RyaW5nIHZhbHVlKG1fY3NzUnVsZVZhbHVlLmRhdGEoKSwgbV9jc3NS
dWxlVmFsdWUuc2l6ZSgpKTsKLSAgICAgICAgU3RyaW5nIHVybCA9IGRlcHJlY2F0ZWRQYXJzZVVS
TCh2YWx1ZSk7Ci0gICAgICAgIGlmICghdXJsLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIG1fZG9j
dW1lbnQtPmRvY0xvYWRlcigpLT5wcmVsb2FkKENhY2hlZFJlc291cmNlOjpDU1NTdHlsZVNoZWV0
LCB1cmwsIFN0cmluZygpLCBzY2FubmluZ0JvZHkoKSk7Ci0gICAgfQotICAgIG1fY3NzUnVsZS5j
bGVhcigpOwotICAgIG1fY3NzUnVsZVZhbHVlLmNsZWFyKCk7Ci19Ci0gICAgICAgICAgICAgICAg
Ci19CmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvTGVnYWN5UHJlbG9hZFNjYW5uZXIuaCBiL1dl
YkNvcmUvaHRtbC9MZWdhY3lQcmVsb2FkU2Nhbm5lci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAzMzMzNjZkNmViMzBhMDFjZDI1MzdhMzA5ZGE0MWI1M2VhN2YyZTg0Li4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1dlYkNvcmUvaHRtbC9MZWdh
Y3lQcmVsb2FkU2Nhbm5lci5oCisrKyAvZGV2L251bGwKQEAgLTEsMTQ0ICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBMZWdhY3lQ
cmVsb2FkU2Nhbm5lcl9oCi0jZGVmaW5lIExlZ2FjeVByZWxvYWRTY2FubmVyX2gKLQotI2luY2x1
ZGUgIlNlZ21lbnRlZFN0cmluZy5oIgotI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgotI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9BdG9taWNTdHJpbmcuaD4K
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotICAgIAotICAgIGNsYXNzIENhY2hlZFJlc291cmNlOwot
ICAgIGNsYXNzIENhY2hlZFJlc291cmNlQ2xpZW50OwotICAgIGNsYXNzIERvY3VtZW50OwotICAg
IAotICAgIGNsYXNzIExlZ2FjeVByZWxvYWRTY2FubmVyIDogcHVibGljIE5vbmNvcHlhYmxlIHsK
LSAgICBwdWJsaWM6Ci0gICAgICAgIExlZ2FjeVByZWxvYWRTY2FubmVyKERvY3VtZW50Kik7Ci0g
ICAgICAgIH5MZWdhY3lQcmVsb2FkU2Nhbm5lcigpOwotICAgICAgICB2b2lkIGJlZ2luKCk7Ci0g
ICAgICAgIHZvaWQgd3JpdGUoY29uc3QgU2VnbWVudGVkU3RyaW5nJik7Ci0gICAgICAgIHZvaWQg
ZW5kKCk7Ci0gICAgICAgIGJvb2wgaW5Qcm9ncmVzcygpIGNvbnN0IHsgcmV0dXJuIG1faW5Qcm9n
cmVzczsgfQotICAgICAgICAKLSAgICAgICAgYm9vbCBzY2FubmluZ0JvZHkoKSBjb25zdDsKLSAg
ICAgICAgCi0gICAgICAgIHN0YXRpYyB1bnNpZ25lZCBjb25zdW1lRW50aXR5KFNlZ21lbnRlZFN0
cmluZyYsIGJvb2wmIG5vdEVub3VnaENoYXJhY3RlcnMpOwotICAgICAgICAKLSAgICBwcml2YXRl
OgotICAgICAgICB2b2lkIHRva2VuaXplKGNvbnN0IFNlZ21lbnRlZFN0cmluZyYpOwotICAgICAg
ICB2b2lkIHJlc2V0KCk7Ci0gICAgICAgIAotICAgICAgICB2b2lkIGVtaXRUYWcoKTsKLSAgICAg
ICAgdm9pZCBlbWl0Q2hhcmFjdGVyKFVDaGFyKTsKLSAgICAgICAgCi0gICAgICAgIHZvaWQgdG9r
ZW5pemVDU1MoVUNoYXIpOwotICAgICAgICB2b2lkIGVtaXRDU1NSdWxlKCk7Ci0gICAgICAgIAot
ICAgICAgICB2b2lkIHByb2Nlc3NBdHRyaWJ1dGUoKTsKLQotICAgICAgICAKLSAgICAgICAgdm9p
ZCBjbGVhckxhc3RDaGFyYWN0ZXJzKCk7Ci0gICAgICAgIHZvaWQgcmVtZW1iZXJDaGFyYWN0ZXIo
VUNoYXIpOwotICAgICAgICBib29sIGxhc3RDaGFyYWN0ZXJzTWF0Y2goY29uc3QgY2hhciosIHVu
c2lnbmVkIGNvdW50KSBjb25zdDsKLSAgICAgICAgCi0gICAgICAgIGJvb2wgbV9pblByb2dyZXNz
OwotICAgICAgICBTZWdtZW50ZWRTdHJpbmcgbV9zb3VyY2U7Ci0gICAgICAgIAotICAgICAgICBl
bnVtIFN0YXRlIHsKLSAgICAgICAgICAgIERhdGEsCi0gICAgICAgICAgICBFbnRpdHlEYXRhLAot
ICAgICAgICAgICAgVGFnT3BlbiwKLSAgICAgICAgICAgIENsb3NlVGFnT3BlbiwKLSAgICAgICAg
ICAgIFRhZ05hbWUsCi0gICAgICAgICAgICBCZWZvcmVBdHRyaWJ1dGVOYW1lLAotICAgICAgICAg
ICAgQXR0cmlidXRlTmFtZSwKLSAgICAgICAgICAgIEFmdGVyQXR0cmlidXRlTmFtZSwKLSAgICAg
ICAgICAgIEJlZm9yZUF0dHJpYnV0ZVZhbHVlLAotICAgICAgICAgICAgQXR0cmlidXRlVmFsdWVE
b3VibGVRdW90ZWQsCi0gICAgICAgICAgICBBdHRyaWJ1dGVWYWx1ZVNpbmdsZVF1b3RlZCwKLSAg
ICAgICAgICAgIEF0dHJpYnV0ZVZhbHVlVW5xdW90ZWQsCi0gICAgICAgICAgICBFbnRpdHlJbkF0
dHJpYnV0ZVZhbHVlLAotICAgICAgICAgICAgQm9ndXNDb21tZW50LAotICAgICAgICAgICAgTWFy
a3VwRGVjbGFyYXRpb25PcGVuLAotICAgICAgICAgICAgQ29tbWVudFN0YXJ0LAotICAgICAgICAg
ICAgQ29tbWVudFN0YXJ0RGFzaCwKLSAgICAgICAgICAgIENvbW1lbnQsCi0gICAgICAgICAgICBD
b21tZW50RW5kRGFzaCwKLSAgICAgICAgICAgIENvbW1lbnRFbmQKLSAgICAgICAgfTsKLSAgICAg
ICAgU3RhdGUgbV9zdGF0ZTsKLSAgICAgICAgYm9vbCBtX2VzY2FwZTsKLSAgICAgICAgZW51bSBD
b250ZW50TW9kZWwgewotICAgICAgICAgICAgUENEQVRBLAotICAgICAgICAgICAgUkNEQVRBLAot
ICAgICAgICAgICAgQ0RBVEEsCi0gICAgICAgICAgICBQTEFJTlRFWFQKLSAgICAgICAgfTsKLSAg
ICAgICAgQ29udGVudE1vZGVsIG1fY29udGVudE1vZGVsOwotICAgICAgICB1bnNpZ25lZCBtX2Nv
bW1lbnRQb3M7Ci0gICAgICAgIFN0YXRlIG1fc3RhdGVCZWZvcmVFbnRpdHlJbkF0dHJpYnV0ZVZh
bHVlOwotICAgICAgICAKLSAgICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGxhc3RDaGFyYWN0
ZXJzQnVmZmVyU2l6ZSA9IDg7Ci0gICAgICAgIFVDaGFyIG1fbGFzdENoYXJhY3RlcnNbbGFzdENo
YXJhY3RlcnNCdWZmZXJTaXplXTsKLSAgICAgICAgdW5zaWduZWQgbV9sYXN0Q2hhcmFjdGVySW5k
ZXg7Ci0gICAgICAgIAotICAgICAgICBib29sIG1fY2xvc2VUYWc7Ci0gICAgICAgIFZlY3RvcjxV
Q2hhciwgMzI+IG1fdGFnTmFtZTsKLSAgICAgICAgVmVjdG9yPFVDaGFyLCAzMj4gbV9hdHRyaWJ1
dGVOYW1lOwotICAgICAgICBWZWN0b3I8VUNoYXI+IG1fYXR0cmlidXRlVmFsdWU7Ci0gICAgICAg
IEF0b21pY1N0cmluZyBtX2xhc3RTdGFydFRhZzsKLSAgICAgICAgCi0gICAgICAgIFN0cmluZyBt
X3VybFRvTG9hZDsKLSAgICAgICAgU3RyaW5nIG1fY2hhcnNldDsKLSAgICAgICAgYm9vbCBtX2xp
bmtJc1N0eWxlU2hlZXQ7Ci0gICAgICAgIAotICAgICAgICBlbnVtIENTU1N0YXRlIHsKLSAgICAg
ICAgICAgIENTU0luaXRpYWwsCi0gICAgICAgICAgICBDU1NNYXliZUNvbW1lbnQsCi0gICAgICAg
ICAgICBDU1NDb21tZW50LAotICAgICAgICAgICAgQ1NTTWF5YmVDb21tZW50RW5kLAotICAgICAg
ICAgICAgQ1NTUnVsZVN0YXJ0LAotICAgICAgICAgICAgQ1NTUnVsZSwKLSAgICAgICAgICAgIENT
U0FmdGVyUnVsZSwKLSAgICAgICAgICAgIENTU1J1bGVWYWx1ZSwKLSAgICAgICAgICAgIENTU0Fm
dGVyUnVsZVZhbHVlCi0gICAgICAgIH07Ci0gICAgICAgIENTU1N0YXRlIG1fY3NzU3RhdGU7Ci0g
ICAgICAgIFZlY3RvcjxVQ2hhciwgMTY+IG1fY3NzUnVsZTsKLSAgICAgICAgVmVjdG9yPFVDaGFy
PiBtX2Nzc1J1bGVWYWx1ZTsKLSAgICAgICAgCi0gICAgICAgIGRvdWJsZSBtX3RpbWVVc2VkOwot
ICAgICAgICAKLSAgICAgICAgYm9vbCBtX2JvZHlTZWVuOwotICAgICAgICBEb2N1bWVudCogbV9k
b2N1bWVudDsKLSAgICB9OwotCi19Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9sb2Fk
ZXIvRlRQRGlyZWN0b3J5RG9jdW1lbnQuY3BwIGIvV2ViQ29yZS9sb2FkZXIvRlRQRGlyZWN0b3J5
RG9jdW1lbnQuY3BwCmluZGV4IDkzMTVlNDUwMWNhZDNmMzgzNjRiZjE0MDU3MTdjM2NkYmU3YzE2
ODYuLjVjNzEwMmM2OGQ2MGUwZWQ3ZjhmY2U0ZWUyMTUzOGZmNGI5MTEwMTMgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvbG9hZGVyL0ZUUERpcmVjdG9yeURvY3VtZW50LmNwcAorKysgYi9XZWJDb3JlL2xv
YWRlci9GVFBEaXJlY3RvcnlEb2N1bWVudC5jcHAKQEAgLTI3LDkgKzI3LDkgQEAKICNpbmNsdWRl
ICJGVFBEaXJlY3RvcnlEb2N1bWVudC5oIgogCiAjaW5jbHVkZSAiQ2hhcmFjdGVyTmFtZXMuaCIK
KyNpbmNsdWRlICJIVE1MRG9jdW1lbnRQYXJzZXIuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIK
ICNpbmNsdWRlICJIVE1MVGFibGVFbGVtZW50LmgiCi0jaW5jbHVkZSAiTGVnYWN5SFRNTERvY3Vt
ZW50UGFyc2VyLmgiCiAjaW5jbHVkZSAiTG9jYWxpemVkU3RyaW5ncy5oIgogI2luY2x1ZGUgIkxv
Z2dpbmcuaCIKICNpbmNsdWRlICJGVFBEaXJlY3RvcnlQYXJzZXIuaCIKQEAgLTQ4LDEzICs0OCwx
MyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAg
ICAgCi1jbGFzcyBGVFBEaXJlY3RvcnlEb2N1bWVudFBhcnNlciA6IHB1YmxpYyBMZWdhY3lIVE1M
RG9jdW1lbnRQYXJzZXIgeworY2xhc3MgRlRQRGlyZWN0b3J5RG9jdW1lbnRQYXJzZXIgOiBwdWJs
aWMgSFRNTERvY3VtZW50UGFyc2VyIHsKIHB1YmxpYzoKICAgICBGVFBEaXJlY3RvcnlEb2N1bWVu
dFBhcnNlcihIVE1MRG9jdW1lbnQqKTsKIAogICAgIHZpcnR1YWwgdm9pZCBhcHBlbmQoY29uc3Qg
U2VnbWVudGVkU3RyaW5nJik7CiAgICAgdmlydHVhbCB2b2lkIGZpbmlzaCgpOwotICAgIAorCiAg
ICAgdmlydHVhbCBib29sIGlzV2FpdGluZ0ZvclNjcmlwdHMoKSBjb25zdCB7IHJldHVybiBmYWxz
ZTsgfQogCiAgICAgaW5saW5lIHZvaWQgY2hlY2tCdWZmZXIoaW50IGxlbiA9IDEwKQpAQCAtNzks
NyArNzksNyBAQCBwcml2YXRlOgogICAgIHZvaWQgcGFyc2VBbmRBcHBlbmRPbmVMaW5lKGNvbnN0
IFN0cmluZyYpOwogICAgIHZvaWQgYXBwZW5kRW50cnkoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25z
dCBTdHJpbmcmIHNpemUsIGNvbnN0IFN0cmluZyYgZGF0ZSwgYm9vbCBpc0RpcmVjdG9yeSk7ICAg
IAogICAgIFBhc3NSZWZQdHI8RWxlbWVudD4gY3JlYXRlVERGb3JGaWxlbmFtZShjb25zdCBTdHJp
bmcmKTsKLSAgICAKKwogICAgIFJlZlB0cjxIVE1MVGFibGVFbGVtZW50PiBtX3RhYmxlRWxlbWVu
dDsKIAogICAgIGJvb2wgbV9za2lwTEY7CkBAIC05NCwxNCArOTQsMTQgQEAgcHJpdmF0ZToKIH07
CiAKIEZUUERpcmVjdG9yeURvY3VtZW50UGFyc2VyOjpGVFBEaXJlY3RvcnlEb2N1bWVudFBhcnNl
cihIVE1MRG9jdW1lbnQqIGRvY3VtZW50KQotICAgIDogTGVnYWN5SFRNTERvY3VtZW50UGFyc2Vy
KGRvY3VtZW50LCBmYWxzZSkKKyAgICA6IEhUTUxEb2N1bWVudFBhcnNlcihkb2N1bWVudCwgZmFs
c2UpCiAgICAgLCBtX3NraXBMRihmYWxzZSkKICAgICAsIG1fcGFyc2VkVGVtcGxhdGUoZmFsc2Up
CiAgICAgLCBtX3NpemUoMjU0KQogICAgICwgbV9idWZmZXIoc3RhdGljX2Nhc3Q8VUNoYXIqPihm
YXN0TWFsbG9jKHNpemVvZihVQ2hhcikgKiBtX3NpemUpKSkKICAgICAsIG1fZGVzdChtX2J1ZmZl
cikKIHsKLX0gICAgCit9CiAKIHZvaWQgRlRQRGlyZWN0b3J5RG9jdW1lbnRQYXJzZXI6OmFwcGVu
ZEVudHJ5KGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIGNvbnN0IFN0cmluZyYgc2l6ZSwgY29uc3Qg
U3RyaW5nJiBkYXRlLCBib29sIGlzRGlyZWN0b3J5KQogewpAQCAtMTA5LDcgKzEwOSw3IEBAIHZv
aWQgRlRQRGlyZWN0b3J5RG9jdW1lbnRQYXJzZXI6OmFwcGVuZEVudHJ5KGNvbnN0IFN0cmluZyYg
ZmlsZW5hbWUsIGNvbnN0IFN0cmluCiAKICAgICBSZWZQdHI8RWxlbWVudD4gcm93RWxlbWVudCA9
IG1fdGFibGVFbGVtZW50LT5pbnNlcnRSb3coLTEsIGVjKTsKICAgICByb3dFbGVtZW50LT5zZXRB
dHRyaWJ1dGUoImNsYXNzIiwgImZ0cERpcmVjdG9yeUVudHJ5Um93IiwgZWMpOwotICAgCisKICAg
ICBSZWZQdHI8RWxlbWVudD4gZWxlbWVudCA9IGRvY3VtZW50KCktPmNyZWF0ZUVsZW1lbnQodGRU
YWcsIGZhbHNlKTsKICAgICBlbGVtZW50LT5hcHBlbmRDaGlsZChUZXh0OjpjcmVhdGUoZG9jdW1l
bnQoKSwgU3RyaW5nKCZub0JyZWFrU3BhY2UsIDEpKSwgZWMpOwogICAgIGlmIChpc0RpcmVjdG9y
eSkKQEAgLTExNywxNiArMTE3LDE2IEBAIHZvaWQgRlRQRGlyZWN0b3J5RG9jdW1lbnRQYXJzZXI6
OmFwcGVuZEVudHJ5KGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIGNvbnN0IFN0cmluCiAgICAgZWxz
ZQogICAgICAgICBlbGVtZW50LT5zZXRBdHRyaWJ1dGUoImNsYXNzIiwgImZ0cERpcmVjdG9yeUlj
b24gZnRwRGlyZWN0b3J5VHlwZUZpbGUiLCBlYyk7CiAgICAgcm93RWxlbWVudC0+YXBwZW5kQ2hp
bGQoZWxlbWVudCwgZWMpOwotICAgIAorCiAgICAgZWxlbWVudCA9IGNyZWF0ZVRERm9yRmlsZW5h
bWUoZmlsZW5hbWUpOwogICAgIGVsZW1lbnQtPnNldEF0dHJpYnV0ZSgiY2xhc3MiLCAiZnRwRGly
ZWN0b3J5RmlsZU5hbWUiLCBlYyk7CiAgICAgcm93RWxlbWVudC0+YXBwZW5kQ2hpbGQoZWxlbWVu
dCwgZWMpOwotICAgIAorCiAgICAgZWxlbWVudCA9IGRvY3VtZW50KCktPmNyZWF0ZUVsZW1lbnQo
dGRUYWcsIGZhbHNlKTsKICAgICBlbGVtZW50LT5hcHBlbmRDaGlsZChUZXh0OjpjcmVhdGUoZG9j
dW1lbnQoKSwgZGF0ZSksIGVjKTsKICAgICBlbGVtZW50LT5zZXRBdHRyaWJ1dGUoImNsYXNzIiwg
ImZ0cERpcmVjdG9yeUZpbGVEYXRlIiwgZWMpOwogICAgIHJvd0VsZW1lbnQtPmFwcGVuZENoaWxk
KGVsZW1lbnQsIGVjKTsKLSAgICAKKwogICAgIGVsZW1lbnQgPSBkb2N1bWVudCgpLT5jcmVhdGVF
bGVtZW50KHRkVGFnLCBmYWxzZSk7CiAgICAgZWxlbWVudC0+YXBwZW5kQ2hpbGQoVGV4dDo6Y3Jl
YXRlKGRvY3VtZW50KCksIHNpemUpLCBlYyk7CiAgICAgZWxlbWVudC0+c2V0QXR0cmlidXRlKCJj
bGFzcyIsICJmdHBEaXJlY3RvcnlGaWxlU2l6ZSIsIGVjKTsKQEAgLTEzNiw3ICsxMzYsNyBAQCB2
b2lkIEZUUERpcmVjdG9yeURvY3VtZW50UGFyc2VyOjphcHBlbmRFbnRyeShjb25zdCBTdHJpbmcm
IGZpbGVuYW1lLCBjb25zdCBTdHJpbgogUGFzc1JlZlB0cjxFbGVtZW50PiBGVFBEaXJlY3RvcnlE
b2N1bWVudFBhcnNlcjo6Y3JlYXRlVERGb3JGaWxlbmFtZShjb25zdCBTdHJpbmcmIGZpbGVuYW1l
KQogewogICAgIEV4Y2VwdGlvbkNvZGUgZWM7Ci0gICAgCisKICAgICBTdHJpbmcgZnVsbFVSTCA9
IGRvY3VtZW50KCktPmJhc2VVUkwoKS5zdHJpbmcoKTsKICAgICBpZiAoZnVsbFVSTFtmdWxsVVJM
Lmxlbmd0aCgpIC0gMV0gPT0gJy8nKQogICAgICAgICBmdWxsVVJMLmFwcGVuZChmaWxlbmFtZSk7
CkBAIC0xNDYsMTAgKzE0NiwxMCBAQCBQYXNzUmVmUHRyPEVsZW1lbnQ+IEZUUERpcmVjdG9yeURv
Y3VtZW50UGFyc2VyOjpjcmVhdGVUREZvckZpbGVuYW1lKGNvbnN0IFN0cmluZwogICAgIFJlZlB0
cjxFbGVtZW50PiBhbmNob3JFbGVtZW50ID0gZG9jdW1lbnQoKS0+Y3JlYXRlRWxlbWVudChhVGFn
LCBmYWxzZSk7CiAgICAgYW5jaG9yRWxlbWVudC0+c2V0QXR0cmlidXRlKCJocmVmIiwgZnVsbFVS
TCwgZWMpOwogICAgIGFuY2hvckVsZW1lbnQtPmFwcGVuZENoaWxkKFRleHQ6OmNyZWF0ZShkb2N1
bWVudCgpLCBmaWxlbmFtZSksIGVjKTsKLSAgICAKKwogICAgIFJlZlB0cjxFbGVtZW50PiB0ZEVs
ZW1lbnQgPSBkb2N1bWVudCgpLT5jcmVhdGVFbGVtZW50KHRkVGFnLCBmYWxzZSk7CiAgICAgdGRF
bGVtZW50LT5hcHBlbmRDaGlsZChhbmNob3JFbGVtZW50LCBlYyk7Ci0gICAgCisKICAgICByZXR1
cm4gdGRFbGVtZW50LnJlbGVhc2UoKTsKIH0KIApAQCAtMTU3LDE4ICsxNTcsMTggQEAgc3RhdGlj
IFN0cmluZyBwcm9jZXNzRmlsZXNpemVTdHJpbmcoY29uc3QgU3RyaW5nJiBzaXplLCBib29sIGlz
RGlyZWN0b3J5KQogewogICAgIGlmIChpc0RpcmVjdG9yeSkKICAgICAgICAgcmV0dXJuICItLSI7
Ci0gICAgCisKICAgICBib29sIHZhbGlkOwogICAgIGludDY0X3QgYnl0ZXMgPSBzaXplLnRvVUlu
dDY0KCZ2YWxpZCk7CiAgICAgaWYgKCF2YWxpZCkKICAgICAgICAgcmV0dXJuIHVua25vd25GaWxl
U2l6ZVRleHQoKTsKLSAgICAgCisKICAgICBpZiAoYnl0ZXMgPCAxMDAwMDAwKQogICAgICAgICBy
ZXR1cm4gU3RyaW5nOjpmb3JtYXQoIiUuMmYgS0IiLCBzdGF0aWNfY2FzdDxmbG9hdD4oYnl0ZXMp
LzEwMDApOwogCiAgICAgaWYgKGJ5dGVzIDwgMTAwMDAwMDAwMCkKICAgICAgICAgcmV0dXJuIFN0
cmluZzo6Zm9ybWF0KCIlLjJmIE1CIiwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGJ5dGVzKS8xMDAwMDAw
KTsKLSAgICAgICAgCisKICAgICByZXR1cm4gU3RyaW5nOjpmb3JtYXQoIiUuMmYgR0IiLCBzdGF0
aWNfY2FzdDxmbG9hdD4oYnl0ZXMpLzEwMDAwMDAwMDApOwogfQogCkBAIC0xNzcsMTkgKzE3Nywx
OSBAQCBzdGF0aWMgYm9vbCB3YXNMYXN0RGF5T2ZNb250aChpbnQgeWVhciwgaW50IG1vbnRoLCBp
bnQgZGF5KQogICAgIHN0YXRpYyBpbnQgbGFzdERheXNbXSA9IHsgMzEsIDAsIDMxLCAzMCwgMzEs
IDMwLCAzMSwgMzEsIDMwLCAzMSwgMzAsIDMxIH07CiAgICAgaWYgKG1vbnRoIDwgMCB8fCBtb250
aCA+IDExKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIAorCiAgICAgaWYgKG1vbnRo
ID09IDIpIHsKICAgICAgICAgaWYgKHllYXIgJSA0ID09IDAgJiYgKHllYXIgJSAxMDAgfHwgeWVh
ciAlIDQwMCA9PSAwKSkgewogICAgICAgICAgICAgaWYgKGRheSA9PSAyOSkKICAgICAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQot
ICAgICAgICAgCisKICAgICAgICAgaWYgKGRheSA9PSAyOCkKICAgICAgICAgICAgIHJldHVybiB0
cnVlOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotICAgIAorCiAgICAgcmV0dXJuIGxh
c3REYXlzW21vbnRoXSA9PSBkYXk7CiB9CiAKQEAgLTE5OCwxMSArMTk4LDExIEBAIHN0YXRpYyBT
dHJpbmcgcHJvY2Vzc0ZpbGVEYXRlU3RyaW5nKGNvbnN0IEZUUFRpbWUmIGZpbGVUaW1lKQogICAg
IC8vIEZJWE1FOiBOZWVkIHRvIGxvY2FsaXplIHRoaXMgc3RyaW5nPwogCiAgICAgU3RyaW5nIHRp
bWVPZkRheTsKLSAgICAKKwogICAgIGlmICghKGZpbGVUaW1lLnRtX2hvdXIgPT0gMCAmJiBmaWxl
VGltZS50bV9taW4gPT0gMCAmJiBmaWxlVGltZS50bV9zZWMgPT0gMCkpIHsKICAgICAgICAgaW50
IGhvdXIgPSBmaWxlVGltZS50bV9ob3VyOwogICAgICAgICBBU1NFUlQoaG91ciA+PSAwICYmIGhv
dXIgPCAyNCk7Ci0gICAgICAgIAorCiAgICAgICAgIGlmIChob3VyIDwgMTIpIHsKICAgICAgICAg
ICAgIGlmIChob3VyID09IDApCiAgICAgICAgICAgICAgICAgaG91ciA9IDEyOwpAQCAtMjE0LDE1
ICsyMTQsMTUgQEAgc3RhdGljIFN0cmluZyBwcm9jZXNzRmlsZURhdGVTdHJpbmcoY29uc3QgRlRQ
VGltZSYgZmlsZVRpbWUpCiAgICAgICAgICAgICB0aW1lT2ZEYXkgPSBTdHJpbmc6OmZvcm1hdCgi
LCAlaTolMDJpIFBNIiwgaG91ciwgZmlsZVRpbWUudG1fbWluKTsKICAgICAgICAgfQogICAgIH0K
LSAgICAKKwogICAgIC8vIElmIGl0IHdhcyB0b2RheSBvciB5ZXN0ZXJkYXksIGxldHMganVzdCBk
byB0aGF0IC0gYnV0IHdlIGhhdmUgdG8gY29tcGFyZSB0byB0aGUgY3VycmVudCB0aW1lCiAgICAg
c3RydWN0IHRtIG5vdzsKICAgICB0aW1lX3Qgbm93X3QgPSB0aW1lKE5VTEwpOwogICAgIGdldExv
Y2FsVGltZSgmbm93X3QsICZub3cpOwotICAgIAorCiAgICAgLy8gbG9jYWx0aW1lIGRvZXMgInll
YXIgPSBjdXJyZW50IHllYXIgLSAxOTAwIiwgY29tcGVuc2F0ZSBmb3IgdGhhdCBmb3IgcmVhZGFi
aWxpdHkgYW5kIGNvbXBhcmlzb24gcHVycG9zZXMKICAgICBub3cudG1feWVhciArPSAxOTAwOwot
ICAgICAgICAKKwogICAgIGlmIChmaWxlVGltZS50bV95ZWFyID09IG5vdy50bV95ZWFyKSB7CiAg
ICAgICAgIGlmIChmaWxlVGltZS50bV9tb24gPT0gbm93LnRtX21vbikgewogICAgICAgICAgICAg
aWYgKGZpbGVUaW1lLnRtX21kYXkgPT0gbm93LnRtX21kYXkpCkBAIC0yMzUsMjMgKzIzNSwyMyBA
QCBzdGF0aWMgU3RyaW5nIHByb2Nlc3NGaWxlRGF0ZVN0cmluZyhjb25zdCBGVFBUaW1lJiBmaWxl
VGltZSkKICAgICAgICAgICAgIHdhc0xhc3REYXlPZk1vbnRoKGZpbGVUaW1lLnRtX3llYXIsIGZp
bGVUaW1lLnRtX21vbiwgZmlsZVRpbWUudG1fbWRheSkpCiAgICAgICAgICAgICAgICAgcmV0dXJu
ICJZZXN0ZXJkYXkiICsgdGltZU9mRGF5OwogICAgIH0KLSAgICAKKwogICAgIGlmIChmaWxlVGlt
ZS50bV95ZWFyID09IG5vdy50bV95ZWFyIC0gMSAmJiBmaWxlVGltZS50bV9tb24gPT0gMTIgJiYg
ZmlsZVRpbWUudG1fbWRheSA9PSAzMSAmJiBub3cudG1fbW9uID09IDEgJiYgbm93LnRtX21kYXkg
PT0gMSkKICAgICAgICAgcmV0dXJuICJZZXN0ZXJkYXkiICsgdGltZU9mRGF5OwogCiAgICAgc3Rh
dGljIGNvbnN0IGNoYXIqIG1vbnRoc1tdID0geyAiSmFuIiwgIkZlYiIsICJNYXIiLCAiQXByIiwg
Ik1heSIsICJKdW4iLCAiSnVsIiwgIkF1ZyIsICJTZXAiLCAiT2N0IiwgIk5vdiIsICJEZWMiLCAi
Pz8/IiB9OwotICAgIAorCiAgICAgaW50IG1vbnRoID0gZmlsZVRpbWUudG1fbW9uOwogICAgIGlm
IChtb250aCA8IDAgfHwgbW9udGggPiAxMSkKICAgICAgICAgbW9udGggPSAxMjsKLSAgICAKKwog
ICAgIFN0cmluZyBkYXRlU3RyaW5nOwotICAgIAorCiAgICAgaWYgKGZpbGVUaW1lLnRtX3llYXIg
PiAtMSkKICAgICAgICAgZGF0ZVN0cmluZyA9IFN0cmluZzo6Zm9ybWF0KCIlcyAlaSwgJWkiLCBt
b250aHNbbW9udGhdLCBmaWxlVGltZS50bV9tZGF5LCBmaWxlVGltZS50bV95ZWFyKTsKICAgICBl
bHNlCiAgICAgICAgIGRhdGVTdHJpbmcgPSBTdHJpbmc6OmZvcm1hdCgiJXMgJWksICVpIiwgbW9u
dGhzW21vbnRoXSwgZmlsZVRpbWUudG1fbWRheSwgbm93LnRtX3llYXIpOwotICAgIAorCiAgICAg
cmV0dXJuIGRhdGVTdHJpbmcgKyB0aW1lT2ZEYXk7CiB9CiAKQEAgLTI2MSwyMiArMjYxLDIyIEBA
IHZvaWQgRlRQRGlyZWN0b3J5RG9jdW1lbnRQYXJzZXI6OnBhcnNlQW5kQXBwZW5kT25lTGluZShj
b25zdCBTdHJpbmcmIGlucHV0TGluZSkKICAgICBDU3RyaW5nIGxhdGluMUlucHV0ID0gaW5wdXRM
aW5lLmxhdGluMSgpOwogCiAgICAgRlRQRW50cnlUeXBlIHR5cGVSZXN1bHQgPSBwYXJzZU9uZUZU
UExpbmUobGF0aW4xSW5wdXQuZGF0YSgpLCBtX2xpc3RTdGF0ZSwgcmVzdWx0KTsKLSAgICAKKwog
ICAgIC8vIEZUUE1pc2NFbnRyeSBpcyBhIGNvbW1lbnQgb3IgdXNhZ2Ugc3RhdGlzdGljIHdoaWNo
IHdlIGRvbid0IGNhcmUgYWJvdXQsIGFuZCBqdW5rIGlzIGludmFsaWQgZGF0YSAtIGJhaWwgaW4g
dGhlc2UgMiBjYXNlcwogICAgIGlmICh0eXBlUmVzdWx0ID09IEZUUE1pc2NFbnRyeSB8fCB0eXBl
UmVzdWx0ID09IEZUUEp1bmtFbnRyeSkKICAgICAgICAgcmV0dXJuOwotICAgICAgICAKKwogICAg
IFN0cmluZyBmaWxlbmFtZShyZXN1bHQuZmlsZW5hbWUsIHJlc3VsdC5maWxlbmFtZUxlbmd0aCk7
CiAgICAgaWYgKHJlc3VsdC50eXBlID09IEZUUERpcmVjdG9yeUVudHJ5KSB7CiAgICAgICAgIGZp
bGVuYW1lLmFwcGVuZCgiLyIpOwotICAgICAgICAKKwogICAgICAgICAvLyBXZSBoYXZlIG5vIGlu
dGVyZXN0IGluIGxpbmtpbmcgdG8gImN1cnJlbnQgZGlyZWN0b3J5IgogICAgICAgICBpZiAoZmls
ZW5hbWUgPT0gIi4vIikKICAgICAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBMT0coRlRQ
LCAiQXBwZW5kaW5nIGVudHJ5IC0gJXMsICVzIiwgZmlsZW5hbWUuYXNjaWkoKS5kYXRhKCksIHJl
c3VsdC5maWxlU2l6ZS5hc2NpaSgpLmRhdGEoKSk7Ci0gICAgICAgIAorCiAgICAgYXBwZW5kRW50
cnkoZmlsZW5hbWUsIHByb2Nlc3NGaWxlc2l6ZVN0cmluZyhyZXN1bHQuZmlsZVNpemUsIHJlc3Vs
dC50eXBlID09IEZUUERpcmVjdG9yeUVudHJ5KSwgcHJvY2Vzc0ZpbGVEYXRlU3RyaW5nKHJlc3Vs
dC5tb2RpZmllZFRpbWUpLCByZXN1bHQudHlwZSA9PSBGVFBEaXJlY3RvcnlFbnRyeSk7CiB9CiAK
QEAgLTMwMiw4ICszMDIsOCBAQCBib29sIEZUUERpcmVjdG9yeURvY3VtZW50UGFyc2VyOjpsb2Fk
RG9jdW1lbnRUZW1wbGF0ZSgpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBM
ZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXI6Omluc2VydChTdHJpbmcodGVtcGxhdGVEb2N1bWVudERh
dGEtPmRhdGEoKSwgdGVtcGxhdGVEb2N1bWVudERhdGEtPnNpemUoKSkpOwotICAgIAorICAgIEhU
TUxEb2N1bWVudFBhcnNlcjo6aW5zZXJ0KFN0cmluZyh0ZW1wbGF0ZURvY3VtZW50RGF0YS0+ZGF0
YSgpLCB0ZW1wbGF0ZURvY3VtZW50RGF0YS0+c2l6ZSgpKSk7CisKICAgICBSZWZQdHI8RWxlbWVu
dD4gdGFibGVFbGVtZW50ID0gZG9jdW1lbnQoKS0+Z2V0RWxlbWVudEJ5SWQoImZ0cERpcmVjdG9y
eVRhYmxlIik7CiAgICAgaWYgKCF0YWJsZUVsZW1lbnQpCiAgICAgICAgIExPR19FUlJPUigiVW5h
YmxlIHRvIGZpbmQgZWxlbWVudCBieSBpZCBcImZ0cERpcmVjdG9yeVRhYmxlXCIgaW4gdGhlIHRl
bXBsYXRlIGRvY3VtZW50LiIpOwpAQCAtMzI5LDcgKzMyOSw3IEBAIGJvb2wgRlRQRGlyZWN0b3J5
RG9jdW1lbnRQYXJzZXI6OmxvYWREb2N1bWVudFRlbXBsYXRlKCkKICAgICAgICAgYm9keS0+YXBw
ZW5kQ2hpbGQobV90YWJsZUVsZW1lbnQsIGVjKTsKICAgICBlbHNlCiAgICAgICAgIGRvY3VtZW50
KCktPmFwcGVuZENoaWxkKG1fdGFibGVFbGVtZW50LCBlYyk7Ci0gICAgICAgIAorCiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKQEAgLTM0MCwxMCArMzQwLDEwIEBAIHZvaWQgRlRQRGlyZWN0b3J5RG9j
dW1lbnRQYXJzZXI6OmNyZWF0ZUJhc2ljRG9jdW1lbnQoKQogICAgIC8vIEZJWE1FOiBNYWtlIHRo
aXMgImJhc2ljIGRvY3VtZW50IiBtb3JlIGFjY2VwdGFibGUKIAogICAgIFJlZlB0cjxFbGVtZW50
PiBib2R5RWxlbWVudCA9IGRvY3VtZW50KCktPmNyZWF0ZUVsZW1lbnQoYm9keVRhZywgZmFsc2Up
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgRXhjZXB0aW9uQ29kZSBlYzsK
ICAgICBkb2N1bWVudCgpLT5hcHBlbmRDaGlsZChib2R5RWxlbWVudCwgZWMpOwotICAgIAorCiAg
ICAgUmVmUHRyPEVsZW1lbnQ+IHRhYmxlRWxlbWVudCA9IGRvY3VtZW50KCktPmNyZWF0ZUVsZW1l
bnQodGFibGVUYWcsIGZhbHNlKTsKICAgICBtX3RhYmxlRWxlbWVudCA9IHN0YXRpY19jYXN0PEhU
TUxUYWJsZUVsZW1lbnQqPih0YWJsZUVsZW1lbnQuZ2V0KCkpOwogICAgIG1fdGFibGVFbGVtZW50
LT5zZXRBdHRyaWJ1dGUoImlkIiwgImZ0cERpcmVjdG9yeVRhYmxlIiwgZWMpOwpAQCAtMzYwLDE0
ICszNjAsMTQgQEAgdm9pZCBGVFBEaXJlY3RvcnlEb2N1bWVudFBhcnNlcjo6YXBwZW5kKGNvbnN0
IFNlZ21lbnRlZFN0cmluZyYgc291cmNlKQogICAgICAgICAgICAgY3JlYXRlQmFzaWNEb2N1bWVu
dCgpOwogICAgICAgICBBU1NFUlQobV90YWJsZUVsZW1lbnQpOwogICAgIH0KLSAgICAgICAgCisK
ICAgICBib29sIGZvdW5kTmV3TGluZSA9IGZhbHNlOwotICAgIAorCiAgICAgbV9kZXN0ID0gbV9i
dWZmZXI7CiAgICAgU2VnbWVudGVkU3RyaW5nIHN0ciA9IHNvdXJjZTsKICAgICB3aGlsZSAoIXN0
ci5pc0VtcHR5KCkpIHsKICAgICAgICAgVUNoYXIgYyA9ICpzdHI7Ci0gICAgICAgIAorCiAgICAg
ICAgIGlmIChjID09ICdccicpIHsKICAgICAgICAgICAgICptX2Rlc3QrKyA9ICdcbic7CiAgICAg
ICAgICAgICBmb3VuZE5ld0xpbmUgPSB0cnVlOwpAQCAtMzgyLDEzICszODIsMTMgQEAgdm9pZCBG
VFBEaXJlY3RvcnlEb2N1bWVudFBhcnNlcjo6YXBwZW5kKGNvbnN0IFNlZ21lbnRlZFN0cmluZyYg
c291cmNlKQogICAgICAgICAgICAgKm1fZGVzdCsrID0gYzsKICAgICAgICAgICAgIG1fc2tpcExG
ID0gZmFsc2U7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgc3RyLmFkdmFuY2UoKTsK
LSAgICAgICAgCisKICAgICAgICAgLy8gTWF5YmUgZW5sYXJnZSB0aGUgYnVmZmVyCiAgICAgICAg
IGNoZWNrQnVmZmVyKCk7CiAgICAgfQotICAgIAorCiAgICAgaWYgKCFmb3VuZE5ld0xpbmUpIHsK
ICAgICAgICAgbV9kZXN0ID0gbV9idWZmZXI7CiAgICAgICAgIHJldHVybjsKQEAgLTM5Niw3ICsz
OTYsNyBAQCB2b2lkIEZUUERpcmVjdG9yeURvY3VtZW50UGFyc2VyOjphcHBlbmQoY29uc3QgU2Vn
bWVudGVkU3RyaW5nJiBzb3VyY2UpCiAKICAgICBVQ2hhciogc3RhcnQgPSBtX2J1ZmZlcjsKICAg
ICBVQ2hhciogY3Vyc29yID0gc3RhcnQ7Ci0gICAgCisKICAgICB3aGlsZSAoY3Vyc29yIDwgbV9k
ZXN0KSB7CiAgICAgICAgIGlmICgqY3Vyc29yID09ICdcbicpIHsKICAgICAgICAgICAgIG1fY2Fy
cnlPdmVyLmFwcGVuZChTdHJpbmcoc3RhcnQsIGN1cnNvciAtIHN0YXJ0KSk7CkBAIC00MDgsNyAr
NDA4LDcgQEAgdm9pZCBGVFBEaXJlY3RvcnlEb2N1bWVudFBhcnNlcjo6YXBwZW5kKGNvbnN0IFNl
Z21lbnRlZFN0cmluZyYgc291cmNlKQogICAgICAgICB9IGVsc2UgCiAgICAgICAgICAgICBjdXJz
b3IrKzsKICAgICB9Ci0gICAgCisKICAgICAvLyBDb3B5IHRoZSBwYXJ0aWFsIGxpbmUgd2UgaGF2
ZSBsZWZ0IHRvIHRoZSBjYXJyeW92ZXIgYnVmZmVyCiAgICAgaWYgKGN1cnNvciAtIHN0YXJ0ID4g
MSkKICAgICAgICAgbV9jYXJyeU92ZXIuYXBwZW5kKFN0cmluZyhzdGFydCwgY3Vyc29yIC0gc3Rh
cnQgLSAxKSk7CkBAIC00MjEsMTEgKzQyMSwxMSBAQCB2b2lkIEZUUERpcmVjdG9yeURvY3VtZW50
UGFyc2VyOjpmaW5pc2goKQogICAgICAgICBwYXJzZUFuZEFwcGVuZE9uZUxpbmUobV9jYXJyeU92
ZXIpOwogICAgICAgICBtX2NhcnJ5T3ZlciA9IFN0cmluZygpOwogICAgIH0KLSAgICAKKwogICAg
IG1fdGFibGVFbGVtZW50ID0gMDsKICAgICBmYXN0RnJlZShtX2J1ZmZlcik7Ci0gICAgICAgIAot
ICAgIExlZ2FjeUhUTUxEb2N1bWVudFBhcnNlcjo6ZmluaXNoKCk7CisKKyAgICBIVE1MRG9jdW1l
bnRQYXJzZXI6OmZpbmlzaCgpOwogfQogCiBGVFBEaXJlY3RvcnlEb2N1bWVudDo6RlRQRGlyZWN0
b3J5RG9jdW1lbnQoRnJhbWUqIGZyYW1lLCBjb25zdCBLVVJMJiB1cmwpCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL3BhZ2UvWFNTQXVkaXRvci5jcHAgYi9XZWJDb3JlL3BhZ2UvWFNTQXVkaXRvci5jcHAK
aW5kZXggMjI1MDZiMmE4MzY1OTk5YzRmODUzMmI0MjMyNWUzODM1YmU4ZmU5NS4uYjI3NjRmOTRm
NWVhNDVhOWJkNWQ1OGIxOWMwZjY5N2Q2MjRjNjhlMSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wYWdl
L1hTU0F1ZGl0b3IuY3BwCisrKyBiL1dlYkNvcmUvcGFnZS9YU1NBdWRpdG9yLmNwcApAQCAtMzQs
OCArMzQsOCBAQAogI2luY2x1ZGUgIkRvY3VtZW50TG9hZGVyLmgiCiAjaW5jbHVkZSAiRE9NV2lu
ZG93LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJIVE1MRW50aXR5UGFyc2VyLmgi
CiAjaW5jbHVkZSAiS1VSTC5oIgotI2luY2x1ZGUgIkxlZ2FjeVByZWxvYWRTY2FubmVyLmgiCiAj
aW5jbHVkZSAiUmVzb3VyY2VSZXNwb25zZUJhc2UuaCIKICNpbmNsdWRlICJTY3JpcHRTb3VyY2VD
b2RlLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKQEAgLTI3Nyw3ICsyNzcsNyBAQCBTdHJpbmcg
WFNTQXVkaXRvcjo6ZGVjb2RlSFRNTEVudGl0aWVzKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBib29s
IGxlYXZlVW5kZWNvZGFibAogICAgICAgICBpZiAobGVhdmVVbmRlY29kYWJsZUVudGl0aWVzVW50
b3VjaGVkKQogICAgICAgICAgICAgc291cmNlU2hhZG93ID0gc291cmNlOwogICAgICAgICBib29s
IG5vdEVub3VnaENoYXJhY3RlcnMgPSBmYWxzZTsKLSAgICAgICAgdW5zaWduZWQgZW50aXR5ID0g
TGVnYWN5UHJlbG9hZFNjYW5uZXI6OmNvbnN1bWVFbnRpdHkoc291cmNlLCBub3RFbm91Z2hDaGFy
YWN0ZXJzKTsKKyAgICAgICAgdW5zaWduZWQgZW50aXR5ID0gY29uc3VtZUhUTUxFbnRpdHkoc291
cmNlLCBub3RFbm91Z2hDaGFyYWN0ZXJzKTsKICAgICAgICAgLy8gV2UgaWdub3JlIG5vdEVub3Vn
aENoYXJhY3RlcnMgYmVjYXVzZSB3ZSBtaWdodCBhcyB3ZWxsIHVzZSB0aGlzIGxvb3AKICAgICAg
ICAgLy8gdG8gY29weSB0aGUgcmVtYWluaW5nIGNoYXJhY3RlcnMgaW50byB8cmVzdWx0fC4KIApk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9wYWdlL1hTU0F1ZGl0b3IuaCBiL1dlYkNvcmUvcGFnZS9YU1NB
dWRpdG9yLmgKaW5kZXggMjBlMGE1MzIzMDIyOWM1MzhkNTE1ODI2MzNmMDI3N2QzNGY4YWQzNy4u
MmI3ODFmMTJiMTI5YzU1ZmFlMzRhOGUwMTQwZThlZjZhNmY4NDMzMCAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9wYWdlL1hTU0F1ZGl0b3IuaAorKysgYi9XZWJDb3JlL3BhZ2UvWFNTQXVkaXRvci5oCkBA
IC02Niw3ICs2Niw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAvLyAqIFNjcmlwdENvbnRy
b2xsZXI6OmV4ZWN1dGVJZkphdmFTY3JpcHRVUkwgLSB1c2VkIHRvIGV2YWx1YXRlIEphdmFTY3Jp
cHQgVVJMcy4KICAgICAvLyAqIFNjcmlwdEV2ZW50TGlzdGVuZXI6OmNyZWF0ZUF0dHJpYnV0ZUV2
ZW50TGlzdGVuZXIgLSB1c2VkIHRvIGNyZWF0ZSBKYXZhU2NyaXB0IGV2ZW50IGhhbmRsZXJzLgog
ICAgIC8vICogSFRNTEJhc2VFbGVtZW50Ojpwcm9jZXNzIC0gdXNlZCB0byBzZXQgdGhlIGRvY3Vt
ZW50IGJhc2UgVVJMLgotICAgIC8vICogTGVnYWN5SFRNTERvY3VtZW50UGFyc2VyOjpwYXJzZVRh
ZyAtIHVzZWQgdG8gbG9hZCBleHRlcm5hbCBKYXZhU2NyaXB0IHNjcmlwdHMuCisgICAgLy8gKiBI
VE1MRG9jdW1lbnRQYXJzZXI6OnNob3VsZExvYWRFeHRlcm5hbFNjcmlwdEZyb21TcmMgLSB1c2Vk
IHRvIGxvYWQgZXh0ZXJuYWwgSmF2YVNjcmlwdCBzY3JpcHRzLgogICAgIC8vICogU3ViZnJhbWVM
b2FkZXI6OnJlcXVlc3RPYmplY3QgLSB1c2VkIHRvIGxvYWQgPG9iamVjdD4vPGVtYmVkPiBlbGVt
ZW50cy4KICAgICAvLwogICAgIGNsYXNzIFhTU0F1ZGl0b3IgOiBwdWJsaWMgTm9uY29weWFibGUg
ewpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1NlZ21lbnRlZFN0cmluZy5jcHAg
Yi9XZWJDb3JlL3BsYXRmb3JtL3RleHQvU2VnbWVudGVkU3RyaW5nLmNwcAppbmRleCBkYzNmNDI0
YTI4Yzk4M2VkMDZiYWUzOTViYmFmNjRhNmQ4ZDQ4OTdkLi5iOWZmNTAzN2E5ODJhZmQ2NGQ5ODIx
NWE3ODZiMDVlMDYyNWQxNTk4IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvU2Vn
bWVudGVkU3RyaW5nLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL3RleHQvU2VnbWVudGVkU3Ry
aW5nLmNwcApAQCAtMTEyLDggKzExMiw3IEBAIHZvaWQgU2VnbWVudGVkU3RyaW5nOjphcHBlbmQo
Y29uc3QgU2VnbWVudGVkU3Vic3RyaW5nICZzKQogdm9pZCBTZWdtZW50ZWRTdHJpbmc6OnByZXBl
bmQoY29uc3QgU2VnbWVudGVkU3Vic3RyaW5nICZzKQogewogICAgIEFTU0VSVCghZXNjYXBlZCgp
KTsKLSAgICAvLyBGSVhNRTogQWRkIHRoaXMgQVNTRVJUIG9uY2Ugd2UndmUgZGVsZXRlZCB0aGUg
TGVnYWN5SFRNTERvY3VtZW50UGFyc2VyLgotICAgIC8vIEFTU0VSVCghcy5udW1iZXJPZkNoYXJh
Y3RlcnNDb25zdW1lZCgpKTsKKyAgICBBU1NFUlQoIXMubnVtYmVyT2ZDaGFyYWN0ZXJzQ29uc3Vt
ZWQoKSk7CiAgICAgaWYgKHMubV9sZW5ndGgpIHsKICAgICAgICAgLy8gRklYTUU6IFdlJ3JlIGFz
c3VtaW5nIHRoYXQgdGhlIHByZXBlbmQgd2VyZSBvcmlnaW5hbGx5IGNvbnN1bWVkIGJ5CiAgICAg
ICAgIC8vICAgICAgICB0aGlzIFNlZ21lbnRlZFN0cmluZy4gIFdlJ3JlIGFsc28gQVNTRVJUaW5n
IHRoYXQgcyBpcyBhIGZyZXNoCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>64087</attachid>
            <date>2010-08-11 01:40:26 -0700</date>
            <delta_ts>2010-08-11 11:31:21 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-43836-20100811014024.patch</filename>
            <type>text/plain</type>
            <size>181537</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQW5kcm9pZC5tayBiL1dlYkNvcmUvQW5kcm9pZC5tawppbmRl
eCBhYzg5NGYxMTM0ZjU5ZjFiZDU0ODdlOTlhNzEzOTNkN2Q1ZWMwYmJiLi4zMTZlZDJhY2E3ZTE4
Nzc3MzZjYzY0OTE3MGY5YmE4NWYyZGMzNGQyIDEwMDY0NAotLS0gYS9XZWJDb3JlL0FuZHJvaWQu
bWsKKysrIGIvV2ViQ29yZS9BbmRyb2lkLm1rCkBAIC0yODMsMTIgKzI4MywxMCBAQCBMT0NBTF9T
UkNfRklMRVMgOj0gJChMT0NBTF9TUkNfRklMRVMpIFwKIAlodG1sL0hUTUxQYXJzZXJFcnJvckNv
ZGVzLmNwcCBcCiAJaHRtbC9IVE1MUGFyc2VyU2NoZWR1bGVyLmNwcCBcCiAJaHRtbC9IVE1MVGFi
bGVSb3dzQ29sbGVjdGlvbi5jcHAgXAotCWh0bWwvTGVnYWN5SFRNTERvY3VtZW50UGFyc2VyLmNw
cCBcCiAJaHRtbC9IVE1MVmlld1NvdXJjZURvY3VtZW50LmNwcCBcCiAJaHRtbC9IVE1MVmlld1Nv
dXJjZVBhcnNlci5jcHAgXAogCWh0bWwvSW1hZ2VEYXRhLmNwcCBcCiAJaHRtbC9JbWFnZVJlc2l6
ZXJUaHJlYWQuY3BwIFwKLQlodG1sL0xlZ2FjeVByZWxvYWRTY2FubmVyLmNwcCBcCiAJaHRtbC9U
aW1lUmFuZ2VzLmNwcCBcCiAJaHRtbC9WYWxpZGl0eVN0YXRlLmNwcCBcCiAJXApkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dCBiL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXgg
NzU0NDVjMjAyMDg5YmYzMGI1NDZjZjU2NjI0NTIxMjgyOTk3YmE3Mi4uNTMzMmI0ZWM1ZmVhYzUx
ZDg2MDA1NjdlNGE0NzcwNDI2YjMxYzJiNyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DTWFrZUxpc3Rz
LnR4dAorKysgYi9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC0xMDMzLDE0ICsxMDMzLDEyIEBA
IFNFVChXZWJDb3JlX1NPVVJDRVMKICAgICBodG1sL0hUTUxUYWJsZVNlY3Rpb25FbGVtZW50LmNw
cAogICAgIGh0bWwvSFRNTFRleHRBcmVhRWxlbWVudC5jcHAKICAgICBodG1sL0hUTUxUaXRsZUVs
ZW1lbnQuY3BwCi0gICAgaHRtbC9MZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXIuY3BwCiAgICAgaHRt
bC9IVE1MVUxpc3RFbGVtZW50LmNwcAogICAgIGh0bWwvSFRNTFZpZXdTb3VyY2VEb2N1bWVudC5j
cHAKICAgICBodG1sL0hUTUxWaWV3U291cmNlUGFyc2VyLmNwcAogICAgIGh0bWwvSW1hZ2VEYXRh
LmNwcAogICAgIGh0bWwvSW1hZ2VSZXNpemVyVGhyZWFkLmNwcAogICAgIGh0bWwvTGFiZWxzTm9k
ZUxpc3QuY3BwCi0gICAgaHRtbC9MZWdhY3lQcmVsb2FkU2Nhbm5lci5jcHAKICAgICBodG1sL1N0
ZXBSYW5nZS5jcHAKICAgICBodG1sL1ZhbGlkaXR5U3RhdGUuY3BwCiAgICAgaHRtbC9jYW52YXMv
Q2FudmFzR3JhZGllbnQuY3BwCkBAIC0xODU4LDcgKzE4NTYsNiBAQCBBRERfU09VUkNFX0RFUklW
RURfREVQRU5ERU5DSUVTKCR7V0VCQ09SRV9ESVJ9L2Nzcy9DU1NQcmltaXRpdmVWYWx1ZU1hcHBp
bmdzLmggQwogQUREX1NPVVJDRV9ERVJJVkVEX0RFUEVOREVOQ0lFUygke1dFQkNPUkVfRElSfS9o
dG1sL0hUTUxEb2N1bWVudC5jcHAgRG9jVHlwZVN0cmluZ3MuY3BwKQogQUREX1NPVVJDRV9ERVJJ
VkVEX0RFUEVOREVOQ0lFUygke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5j
cHAgQ29sb3JEYXRhLmNwcCkKIEFERF9TT1VSQ0VfREVSSVZFRF9ERVBFTkRFTkNJRVMoJHtXRUJD
T1JFX0RJUn0vY3NzL0NTU1BhcnNlci5jcHAgdG9rZW5pemVyLmNwcCkKLUFERF9TT1VSQ0VfREVS
SVZFRF9ERVBFTkRFTkNJRVMoJHtXRUJDT1JFX0RJUn0vaHRtbC9MZWdhY3lQcmVsb2FkU2Nhbm5l
ci5jcHAgSFRNTEVudGl0eU5hbWVzLmNwcCkKIEFERF9TT1VSQ0VfREVSSVZFRF9ERVBFTkRFTkNJ
RVMoJHtXRUJDT1JFX0RJUn0vaHRtbC9IVE1MRW50aXR5UGFyc2VyLmNwcCBIVE1MRW50aXR5TmFt
ZXMuY3BwKQogQUREX1NPVVJDRV9ERVJJVkVEX0RFUEVOREVOQ0lFUygke1dFQkNPUkVfRElSfS9o
dG1sL0hUTUxUcmVlQnVpbGRlci5jcHAgTWF0aE1MTmFtZXMuY3BwKQogQUREX1NPVVJDRV9ERVJJ
VkVEX0RFUEVOREVOQ0lFUygke1dFQkNPUkVfRElSfS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAg
VXNlckFnZW50U3R5bGVTaGVldHNEYXRhLmNwcCBVc2VyQWdlbnRTdHlsZVNoZWV0cy5oKQpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAwNTg1
YjVlNDdlMjY4MGRhZGM0ZThkYTY5OGU3ZDM4YWNjNjljMmM0Li5iMmJjYTExY2E3NmMwN2JhMWY2
MmFkNWQ2N2FkMGY5YjY4NzU0MjdkIDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysg
Yi9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYzIEBACisyMDEwLTA4LTExICBBZGFtIEJh
cnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUnViYmVyLXN0YW1wZWQgYnkgRXJp
YyBTZWlkZWwuCisKKyAgICAgICAgRGVsZXRlIExlZ2FjeUhUTUxEb2N1bWVudFBhcnNlciBhbmQg
TGVnYWN5UHJlbG9hZFNjYW5uZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTQzODM2CisKKyAgICAgICAgVGhlc2UgY2xhc3NlcyBhcmUgYml0LXJvdHRp
bmcgZGlzdHVyYmluZ2x5IHF1aWNrbHkuICBXZSByZW1vdmVkIHRoZQorICAgICAgICBsYXN0IGRl
cGVuZGVuY2llcyBvbiB0aGVzZSBjbGFzc2VzIGFuZCBzbyB3ZSBjYW4gcmVtb3ZlIHRoZW0uCisK
KyAgICAgICAgV2UgbWlnaHQgbmVlZCB0byBwcmVzZXJ2ZSBzb21lIG9mIHRoZWlyIHBhcnRpY3Vs
YXIgcXVpcmtzIHRvIGhhbmRsZQorICAgICAgICBzb21lIGxlZ2FjeSBhcHBsaWNhdGlvbnMsIGJ1
dCBvdXIgY3VycmVudCB0aGlua2luZyBpcyB0byBkbyB0aGF0IHdpdGgKKyAgICAgICAgaW5kaXZp
ZHVhbCBzZXR0aW5ncyB0aGF0IGFmZmVjdCB0aGUgbmV3IHBhcnNlci4KKworICAgICAgICAqIEFu
ZHJvaWQubWs6CisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogR05VbWFrZWZp
bGUuYW06CisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIFdlYkNvcmUucHJvOgor
ICAgICAgICAqIFdlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qOgorICAgICAgICAqIFdlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3Bw
OgorICAgICAgICAqIGRvbS9Eb2N1bWVudEZyYWdtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkRvY3VtZW50RnJhZ21lbnQ6OnBhcnNlSFRNTCk6CisgICAgICAgICogZG9tL0RvY3VtZW50UGFy
c2VyLmg6CisgICAgICAgICogZG9tL1hNTERvY3VtZW50UGFyc2VyTGlieG1sMi5jcHA6CisgICAg
ICAgICogZG9tL1hNTERvY3VtZW50UGFyc2VyUXQuY3BwOgorICAgICAgICAqIGh0bWwvSFRNTENv
bnN0cnVjdGlvblNpdGUuY3BwOgorICAgICAgICAqIGh0bWwvSFRNTERvY3VtZW50LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxEb2N1bWVudDo6Y3JlYXRlUGFyc2VyKToKKyAgICAgICAgKiBo
dG1sL0hUTUxFbnRpdHlQYXJzZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZGVjb2RlTmFtZWRF
bnRpdHkpOgorICAgICAgICAqIGh0bWwvSFRNTEVudGl0eVBhcnNlci5oOgorICAgICAgICAqIGh0
bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5jcHA6CisgICAgICAgICogaHRtbC9IVE1MVHJlZUJ1
aWxkZXIuY3BwOgorICAgICAgICAqIGh0bWwvSFRNTFZpZXdTb3VyY2VEb2N1bWVudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MVmlld1NvdXJjZURvY3VtZW50OjpjcmVhdGVQYXJzZXIpOgor
ICAgICAgICAqIGh0bWwvTGVnYWN5SFRNTERvY3VtZW50UGFyc2VyLmNwcDogUmVtb3ZlZC4KKyAg
ICAgICAgKiBodG1sL0xlZ2FjeUhUTUxEb2N1bWVudFBhcnNlci5oOiBSZW1vdmVkLgorICAgICAg
ICAqIGh0bWwvTGVnYWN5SFRNTFRyZWVCdWlsZGVyLmNwcDoKKyAgICAgICAgKiBodG1sL0xlZ2Fj
eVByZWxvYWRTY2FubmVyLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBodG1sL0xlZ2FjeVByZWxv
YWRTY2FubmVyLmg6IFJlbW92ZWQuCisgICAgICAgICogbG9hZGVyL0ZUUERpcmVjdG9yeURvY3Vt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZUUERpcmVjdG9yeURvY3VtZW50UGFyc2VyOjpG
VFBEaXJlY3RvcnlEb2N1bWVudFBhcnNlcik6CisgICAgICAgIChXZWJDb3JlOjpGVFBEaXJlY3Rv
cnlEb2N1bWVudFBhcnNlcjo6YXBwZW5kRW50cnkpOgorICAgICAgICAoV2ViQ29yZTo6RlRQRGly
ZWN0b3J5RG9jdW1lbnRQYXJzZXI6OmNyZWF0ZVRERm9yRmlsZW5hbWUpOgorICAgICAgICAoV2Vi
Q29yZTo6cHJvY2Vzc0ZpbGVzaXplU3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6Ondhc0xhc3RE
YXlPZk1vbnRoKToKKyAgICAgICAgKFdlYkNvcmU6OnByb2Nlc3NGaWxlRGF0ZVN0cmluZyk6Cisg
ICAgICAgIChXZWJDb3JlOjpGVFBEaXJlY3RvcnlEb2N1bWVudFBhcnNlcjo6cGFyc2VBbmRBcHBl
bmRPbmVMaW5lKToKKyAgICAgICAgKFdlYkNvcmU6OkZUUERpcmVjdG9yeURvY3VtZW50UGFyc2Vy
Ojpsb2FkRG9jdW1lbnRUZW1wbGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGVFBEaXJlY3RvcnlE
b2N1bWVudFBhcnNlcjo6Y3JlYXRlQmFzaWNEb2N1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpG
VFBEaXJlY3RvcnlEb2N1bWVudFBhcnNlcjo6YXBwZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkZU
UERpcmVjdG9yeURvY3VtZW50UGFyc2VyOjpmaW5pc2gpOgorICAgICAgICAqIHBhZ2UvWFNTQXVk
aXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpYU1NBdWRpdG9yOjpkZWNvZGVIVE1MRW50aXRp
ZXMpOgorICAgICAgICAqIHBhZ2UvWFNTQXVkaXRvci5oOgorICAgICAgICAqIHBsYXRmb3JtL3Rl
eHQvU2VnbWVudGVkU3RyaW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNlZ21lbnRlZFN0cmlu
Zzo6cHJlcGVuZCk6CisKIDIwMTAtMDgtMTAgIEVyaWMgU2VpZGVsICA8ZXJpY0B3ZWJraXQub3Jn
PgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFkYW0gQmFydGguCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L0dOVW1ha2VmaWxlLmFtIGIvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQppbmRleCAxYTYxNDc1ODMx
Nzg3OTFlYjVhNjg3N2EwOWY3YmU3MGJkMzYxYzBlLi40YmU5ZDk3YThlNDNkNWMxYjFkNmVmZGFm
ZWQyOTcwYzc0MDUzYjdkIDEwMDY0NAotLS0gYS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCisrKyBi
L1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KQEAgLTE1NDksOCArMTU0OSw2IEBAIHdlYmNvcmVfc291
cmNlcyArPSBcCiAJV2ViQ29yZS9odG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuaCBcCiAJV2ViQ29y
ZS9odG1sL0hUTUxUaXRsZUVsZW1lbnQuY3BwIFwKIAlXZWJDb3JlL2h0bWwvSFRNTFRpdGxlRWxl
bWVudC5oIFwKLQlXZWJDb3JlL2h0bWwvTGVnYWN5SFRNTERvY3VtZW50UGFyc2VyLmNwcCBcCi0J
V2ViQ29yZS9odG1sL0xlZ2FjeUhUTUxEb2N1bWVudFBhcnNlci5oIFwKIAlXZWJDb3JlL2h0bWwv
SFRNTFVMaXN0RWxlbWVudC5jcHAgXAogCVdlYkNvcmUvaHRtbC9IVE1MVUxpc3RFbGVtZW50Lmgg
XAogCVdlYkNvcmUvaHRtbC9IVE1MVmlld1NvdXJjZURvY3VtZW50LmNwcCBcCkBAIC0xNTY0LDgg
KzE1NjIsNiBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVdlYkNvcmUvaHRtbC9MYWJlbHNOb2Rl
TGlzdC5jcHAgXAogCVdlYkNvcmUvaHRtbC9MYWJlbHNOb2RlTGlzdC5oIFwKIAlXZWJDb3JlL2h0
bWwvTWVkaWFFcnJvci5oIFwKLQlXZWJDb3JlL2h0bWwvTGVnYWN5UHJlbG9hZFNjYW5uZXIuY3Bw
IFwKLQlXZWJDb3JlL2h0bWwvTGVnYWN5UHJlbG9hZFNjYW5uZXIuaCBcCiAJV2ViQ29yZS9odG1s
L1N0ZXBSYW5nZS5jcHAgXAogCVdlYkNvcmUvaHRtbC9TdGVwUmFuZ2UuaCBcCiAJV2ViQ29yZS9o
dG1sL1RleHRNZXRyaWNzLmggXApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9X
ZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCBhMGMyZDE0MGFjNmJiZmQ3M2Y3NTVjMzc5MDAzYzA3
MjE5ZTUwYjAzLi5hMmZhZjUzMTc5OWY2ODlmYTk4NjFmMmZlYjQ1OTNjMDJhMzJlNzIyIDEwMDY0
NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpA
QCAtMTcxMyw4ICsxNzEzLDYgQEAKICAgICAgICAgICAgICdodG1sL0hUTUxUZXh0QXJlYUVsZW1l
bnQuaCcsCiAgICAgICAgICAgICAnaHRtbC9IVE1MVGl0bGVFbGVtZW50LmNwcCcsCiAgICAgICAg
ICAgICAnaHRtbC9IVE1MVGl0bGVFbGVtZW50LmgnLAotICAgICAgICAgICAgJ2h0bWwvTGVnYWN5
SFRNTERvY3VtZW50UGFyc2VyLmNwcCcsCi0gICAgICAgICAgICAnaHRtbC9MZWdhY3lIVE1MRG9j
dW1lbnRQYXJzZXIuaCcsCiAgICAgICAgICAgICAnaHRtbC9IVE1MVUxpc3RFbGVtZW50LmNwcCcs
CiAgICAgICAgICAgICAnaHRtbC9IVE1MVUxpc3RFbGVtZW50LmgnLAogICAgICAgICAgICAgJ2h0
bWwvSFRNTFZpZGVvRWxlbWVudC5jcHAnLApAQCAtMTczMCw4ICsxNzI4LDYgQEAKICAgICAgICAg
ICAgICdodG1sL0xhYmVsc05vZGVMaXN0LmNwcCcsCiAgICAgICAgICAgICAnaHRtbC9MYWJlbHNO
b2RlTGlzdC5oJywKICAgICAgICAgICAgICdodG1sL01lZGlhRXJyb3IuaCcsCi0gICAgICAgICAg
ICAnaHRtbC9MZWdhY3lQcmVsb2FkU2Nhbm5lci5jcHAnLAotICAgICAgICAgICAgJ2h0bWwvTGVn
YWN5UHJlbG9hZFNjYW5uZXIuaCcsCiAgICAgICAgICAgICAnaHRtbC9TdGVwUmFuZ2UuY3BwJywK
ICAgICAgICAgICAgICdodG1sL1N0ZXBSYW5nZS5oJywKICAgICAgICAgICAgICdodG1sL1RleHRN
ZXRyaWNzLmgnLApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLnBybyBiL1dlYkNvcmUvV2Vi
Q29yZS5wcm8KaW5kZXggMGU2M2FmOGExNjcxODAwYTdjNDQ5ZTJhODc5MDUyNDRjNjJjZmY3Mi4u
YmM4N2UyNWIxNGFhNTg2ZGIwM2RhNWFhYzYxM2U1ZmZkNThlNzMxMSAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9XZWJDb3JlLnBybworKysgYi9XZWJDb3JlL1dlYkNvcmUucHJvCkBAIC03MzcsMTQgKzcz
NywxMiBAQCBTT1VSQ0VTICs9IFwKICAgICBodG1sL0hUTUxUYWJsZVNlY3Rpb25FbGVtZW50LmNw
cCBcCiAgICAgaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmNwcCBcCiAgICAgaHRtbC9IVE1MVGl0
bGVFbGVtZW50LmNwcCBcCi0gICAgaHRtbC9MZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXIuY3BwIFwK
ICAgICBodG1sL0hUTUxVTGlzdEVsZW1lbnQuY3BwIFwKICAgICBodG1sL0hUTUxWaWV3U291cmNl
RG9jdW1lbnQuY3BwIFwKICAgICBodG1sL0hUTUxWaWV3U291cmNlUGFyc2VyLmNwcCBcCiAgICAg
aHRtbC9JbWFnZURhdGEuY3BwIFwKICAgICBodG1sL0ltYWdlUmVzaXplclRocmVhZC5jcHAgXAog
ICAgIGh0bWwvTGFiZWxzTm9kZUxpc3QuY3BwIFwKLSAgICBodG1sL0xlZ2FjeVByZWxvYWRTY2Fu
bmVyLmNwcCBcCiAgICAgaHRtbC9TdGVwUmFuZ2UuY3BwIFwKICAgICBodG1sL1ZhbGlkaXR5U3Rh
dGUuY3BwIFwKICAgICBpbnNwZWN0b3IvQ29uc29sZU1lc3NhZ2UuY3BwIFwKQEAgLTE1MDEsNyAr
MTQ5OSw2IEBAIEhFQURFUlMgKz0gXAogICAgIGh0bWwvSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQu
aCBcCiAgICAgaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmggXAogICAgIGh0bWwvSFRNTFRpdGxl
RWxlbWVudC5oIFwKLSAgICBodG1sL0xlZ2FjeUhUTUxEb2N1bWVudFBhcnNlci5oIFwKICAgICBo
dG1sL0hUTUxVTGlzdEVsZW1lbnQuaCBcCiAgICAgaHRtbC9IVE1MVmlkZW9FbGVtZW50LmggXAog
ICAgIGh0bWwvSFRNTFZpZXdTb3VyY2VEb2N1bWVudC5oIFwKQEAgLTE1MDksNyArMTUwNiw2IEBA
IEhFQURFUlMgKz0gXAogICAgIGh0bWwvSW1hZ2VEYXRhLmggXAogICAgIGh0bWwvSW1hZ2VSZXNp
emVyVGhyZWFkLmggXAogICAgIGh0bWwvTGFiZWxzTm9kZUxpc3QuaCBcCi0gICAgaHRtbC9MZWdh
Y3lQcmVsb2FkU2Nhbm5lci5oIFwKICAgICBodG1sL1N0ZXBSYW5nZS5oIFwKICAgICBodG1sL1Rp
bWVSYW5nZXMuaCBcCiAgICAgaHRtbC9WYWxpZGl0eVN0YXRlLmggXApkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvaiBiL1dlYkNvcmUvV2ViQ29yZS52Y3By
b2ovV2ViQ29yZS52Y3Byb2oKaW5kZXggY2YwOTg4YWI1OThmOTcxMDE1ODI2MWYzOGMxM2U0MWI3
ZWFhYTgyMy4uNDYzZjVkOWU5ZDIwNmJmYTcwNThmM2UxYTdkZmMyNDNkZjNmMzcyZiAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagorKysgYi9XZWJDb3Jl
L1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCkBAIC00MDkyOSwxNCArNDA5MjksNiBAQAog
CQkJCT4NCiAJCQk8L0ZpbGU+DQogCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxodG1s
XExlZ2FjeUhUTUxEb2N1bWVudFBhcnNlci5jcHAiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJ
PEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxodG1sXExlZ2FjeUhUTUxEb2N1bWVudFBhcnNl
ci5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQogCQkJCVJlbGF0aXZlUGF0aD0i
Li5caHRtbFxMZWdhY3lIVE1MVHJlZUJ1aWxkZXIuY3BwIg0KIAkJCQk+DQogCQkJPC9GaWxlPg0K
QEAgLTQwOTQ1LDE0ICs0MDkzNyw2IEBACiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0K
LQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGh0bWxcTGVnYWN5UHJlbG9hZFNjYW5uZXIuY3BwIg0KLQkJ
CQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5caHRtbFxM
ZWdhY3lQcmVsb2FkU2Nhbm5lci5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQog
CQkJCVJlbGF0aXZlUGF0aD0iLi5caHRtbFxNZWRpYUVycm9yLmgiDQogCQkJCT4NCiAJCQk8L0Zp
bGU+DQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2ogYi9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA4MWZh
NzNmNmZjYTNkMWY0ZTYxYTlhNzNmN2IzNjRlNjc0ZDgzZWM5Li45MGU1M2FiM2QxY2I4NmFjMTAz
MjNmMzY1ZTAzYWM4NTM1YjZkNzY1IDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagpAQCAtMjU5OSw3ICsyNTk5LDYgQEAKIAkJOTNGMTk4RTUwODI0NUU1OTAwMUU5
QUJDIC8qIEhUTUxEb2N1bWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRjUyM0QyM0MwMkRFNDM5NjAxODYzNUNBIC8qIEhUTUxEb2N1bWVudC5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTkzRjE5OEU2
MDgyNDVFNTkwMDFFOUFCQyAvKiBIVE1MRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjUyM0QyM0YwMkRFNDM5NjAxODYzNUNBIC8qIEhUTUxF
bGVtZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJOTNGMTk4RUYwODI0NUU1OTAwMUU5QUJDIC8qIExlZ2FjeUhUTUxUcmVlQnVpbGRlci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjUyM0QyNTEwMkRF
NDM5NjAxODYzNUNBIC8qIExlZ2FjeUhUTUxUcmVlQnVpbGRlci5oICovOyB9OwotCQk5M0YxOThG
MDA4MjQ1RTU5MDAxRTlBQkMgLyogTGVnYWN5SFRNTERvY3VtZW50UGFyc2VyLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNTIzRDI1MzAyREU0Mzk2MDE4
NjM1Q0EgLyogTGVnYWN5SFRNTERvY3VtZW50UGFyc2VyLmggKi87IH07CiAJCTkzRjE5OEY2MDgy
NDVFNTkwMDFFOUFCQyAvKiBUZXh0UmVzb3VyY2VEZWNvZGVyLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNTIzRDI3OTAyREU0M0Q3MDE4NjM1Q0EgLyog
VGV4dFJlc291cmNlRGVjb2Rlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTkzRjE5OTE4MDgyNDVFNTkwMDFFOUFCQyAvKiBSYW5nZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjUyM0QzMDQwMkRFNDQ3
NjAxODYzNUNBIC8qIFJhbmdlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJOTNGMTk5MjEwODI0NUU1OTAwMUU5QUJDIC8qIFhNTERvY3VtZW50UGFy
c2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNTIz
RDMwQTAyREU0NDc2MDE4NjM1Q0EgLyogWE1MRG9jdW1lbnRQYXJzZXIuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMjYyOSw3ICsyNjI4LDYgQEAK
IAkJOTNGMTlBOTEwODI0NUU1OTAwMUU5QUJDIC8qIEhUTUxEb2N1bWVudC5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNTIzRDIzQjAyREU0Mzk2MDE4
NjM1Q0EgLyogSFRNTERvY3VtZW50LmNwcCAqLzsgfTsKIAkJOTNGMTlBOTIwODI0NUU1OTAwMUU5
QUJDIC8qIEhUTUxFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEY1MjNEMjNFMDJERTQzOTYwMTg2MzVDQSAvKiBIVE1MRWxlbWVudC5jcHAg
Ki87IH07CiAJCTkzRjE5QTlCMDgyNDVFNTkwMDFFOUFCQyAvKiBMZWdhY3lIVE1MVHJlZUJ1aWxk
ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjUy
M0QyNTAwMkRFNDM5NjAxODYzNUNBIC8qIExlZ2FjeUhUTUxUcmVlQnVpbGRlci5jcHAgKi87IH07
Ci0JCTkzRjE5QTlDMDgyNDVFNTkwMDFFOUFCQyAvKiBMZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXIu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjUyM0Qy
NTIwMkRFNDM5NjAxODYzNUNBIC8qIExlZ2FjeUhUTUxEb2N1bWVudFBhcnNlci5jcHAgKi87IH07
CiAJCTkzRjE5QTlEMDgyNDVFNTkwMDFFOUFCQyAvKiBUZXh0UmVzb3VyY2VEZWNvZGVyLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1MjNEMjc4MDJE
RTQzRDcwMTg2MzVDQSAvKiBUZXh0UmVzb3VyY2VEZWNvZGVyLmNwcCAqLzsgfTsKIAkJOTNGMTlB
QjkwODI0NUU1OTAwMUU5QUJDIC8qIFJhbmdlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1MjNEMzAzMDJERTQ0NzYwMTg2MzVDQSAvKiBSYW5nZS5j
cHAgKi87IH07CiAJCTkzRjE5QUJDMDgyNDVFNTkwMDFFOUFCQyAvKiBYTUxEb2N1bWVudFBhcnNl
ci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNTIz
RDMwOTAyREU0NDc2MDE4NjM1Q0EgLyogWE1MRG9jdW1lbnRQYXJzZXIuY3BwICovOyB9OwpAQCAt
NTIwOSw4ICs1MjA3LDYgQEAKIAkJRTQ3NzhCODAxMTVBNTgxQTAwQjVEMzcyIC8qIEpTQ3VzdG9t
RXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0
Nzc4QjdFMTE1QTU4MUEwMEI1RDM3MiAvKiBKU0N1c3RvbUV2ZW50LmggKi87IH07CiAJCUU0N0I0
QkU4MEU3MTI0MTYwMDAzODg1NCAvKiBDYWNoZWRSZXNvdXJjZUhhbmRsZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ3QjRCRTYwRTcxMjQxNjAwMDM4
ODU0IC8qIENhY2hlZFJlc291cmNlSGFuZGxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTQ3QjRCRTkwRTcxMjQxNjAwMDM4ODU0IC8qIENhY2hl
ZFJlc291cmNlSGFuZGxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEU0N0I0QkU3MEU3MTI0MTYwMDAzODg1NCAvKiBDYWNoZWRSZXNvdXJjZUhhbmRs
ZS5jcHAgKi87IH07Ci0JCUU0OTYyNkMyMEQ4MEQ5NDgwMEUzNDA1QyAvKiBMZWdhY3lQcmVsb2Fk
U2Nhbm5lci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBFNEQ0QUJFMDBENzU0MkYwMDBGOTY4NjkgLyogTGVnYWN5UHJlbG9hZFNjYW5uZXIuY3BwICov
OyB9OwotCQlFNDk2MjZDMzBEODBEOTQ5MDBFMzQwNUMgLyogTGVnYWN5UHJlbG9hZFNjYW5uZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0RDRBQkUx
MEQ3NTQyRjEwMEY5Njg2OSAvKiBMZWdhY3lQcmVsb2FkU2Nhbm5lci5oICovOyB9OwogCQlFNEFG
Q0ZBNTBEQUYyOUEzMDBGNUY1NUMgLyogVW5pdEJlemllci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTRBRkNGQTQwREFGMjlBMzAwRjVGNTVDIC8qIFVu
aXRCZXppZXIuaCAqLzsgfTsKIAkJRTRBRkQwMEIwREFGMzM1NDAwRjVGNTVDIC8qIFNNSUxUaW1l
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0QUZE
MDA1MERBRjMzNTQwMEY1RjU1QyAvKiBTTUlMVGltZS5jcHAgKi87IH07CiAJCUU0QUZEMDBDMERB
RjMzNTQwMEY1RjU1QyAvKiBTTUlMVGltZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRTRBRkQwMDYwREFGMzM1NDAwRjVGNTVDIC8qIFNNSUxUaW1lLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTExMDA0
LDggKzExMDAwLDYgQEAKIAkJRTRDMTc4OTYwRUU2OTAzODAwODI0RDY5IC8qIENTU1NlbGVjdG9y
TGlzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDU1NTZWxlY3Rvckxpc3Qu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTRDMjc5NTYwQ0Y5NzQxOTAwRTk3Qjk4
IC8qIFJlbmRlck1lZGlhLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFJlbmRlck1lZGlhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTRDMjc5NTcw
Q0Y5NzQxOTAwRTk3Qjk4IC8qIFJlbmRlck1lZGlhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFJlbmRlck1lZGlhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUU0
RDRBQkUwMEQ3NTQyRjAwMEY5Njg2OSAvKiBMZWdhY3lQcmVsb2FkU2Nhbm5lci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMZWdhY3lQcmVsb2FkU2Nhbm5lci5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUU0RDRBQkUxMEQ3NTQyRjEwMEY5Njg2OSAv
KiBMZWdhY3lQcmVsb2FkU2Nhbm5lci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBMZWdhY3lQcmVsb2FkU2Nhbm5lci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlF
NEQ2ODc3NjBFRDdBRTNEMDA2RUE5NzggLyogUHVyZ2VhYmxlQnVmZmVyTWFjLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFB1cmdlYWJsZUJ1ZmZlck1hYy5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0RDY4Nzc4MEVEN0FFNEYwMDZFQTk3OCAvKiBQ
dXJnZWFibGVCdWZmZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHVyZ2Vh
YmxlQnVmZmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0RUVGRkM2MEQzNDU1
MEMwMDQ2OUE1OCAvKiBKU0F1ZGlvQ29uc3RydWN0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gSlNBdWRpb0NvbnN0cnVjdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTExMDM0LDggKzExMDI4LDYgQEAKIAkJRjUyM0QyM0YwMkRFNDM5NjAx
ODYzNUNBIC8qIEhUTUxFbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEhUTUxFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQlGNTIzRDI1MDAyREU0Mzk2MDE4NjM1
Q0EgLyogTGVnYWN5SFRNTFRyZWVCdWlsZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExlZ2FjeUhUTUxUcmVlQnVpbGRlci5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9Owog
CQlGNTIzRDI1MTAyREU0Mzk2MDE4NjM1Q0EgLyogTGVnYWN5SFRNTFRyZWVCdWlsZGVyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRo
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExlZ2FjeUhU
TUxUcmVlQnVpbGRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVz
ZXNUYWJzID0gMDsgfTsKLQkJRjUyM0QyNTIwMkRFNDM5NjAxODYzNUNBIC8qIExlZ2FjeUhUTUxE
b2N1bWVudFBhcnNlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBMZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXIuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKLQkJRjUyM0QyNTMw
MkRFNDM5NjAxODYzNUNBIC8qIExlZ2FjeUhUTUxEb2N1bWVudFBhcnNlci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMZWdhY3lIVE1MRG9jdW1l
bnRQYXJzZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFi
cyA9IDA7IH07CiAJCUY1MjNEMjc4MDJERTQzRDcwMTg2MzVDQSAvKiBUZXh0UmVzb3VyY2VEZWNv
ZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsg
aW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFRleHRSZXNvdXJjZURlY29kZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0
YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJRjUyM0QyNzkwMkRFNDNENzAxODYzNUNB
IC8qIFRleHRSZXNvdXJjZURlY29kZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gVGV4dFJlc291cmNlRGVjb2Rlci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJRjUyM0QzMDMwMkRF
NDQ3NjAxODYzNUNBIC8qIFJhbmdlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJhbmdlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CkBAIC0xNDE4NCwxMiArMTQxNzYsOCBA
QAogCQkJCUIwMTQ5RTdDMTFBNEIyMTUwMDE5NkE3QiAvKiBJbWFnZVJlc2l6ZXJUaHJlYWQuaCAq
LywKIAkJCQlBNDU2RkEyNDExQUQ0QTgzMDAyMEI0MjAgLyogTGFiZWxzTm9kZUxpc3QuY3BwICov
LAogCQkJCUE0NTZGQTI1MTFBRDRBODMwMDIwQjQyMCAvKiBMYWJlbHNOb2RlTGlzdC5oICovLAot
CQkJCUY1MjNEMjUyMDJERTQzOTYwMTg2MzVDQSAvKiBMZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXIu
Y3BwICovLAotCQkJCUY1MjNEMjUzMDJERTQzOTYwMTg2MzVDQSAvKiBMZWdhY3lIVE1MRG9jdW1l
bnRQYXJzZXIuaCAqLywKIAkJCQlGNTIzRDI1MDAyREU0Mzk2MDE4NjM1Q0EgLyogTGVnYWN5SFRN
TFRyZWVCdWlsZGVyLmNwcCAqLywKIAkJCQlGNTIzRDI1MTAyREU0Mzk2MDE4NjM1Q0EgLyogTGVn
YWN5SFRNTFRyZWVCdWlsZGVyLmggKi8sCi0JCQkJRTRENEFCRTAwRDc1NDJGMDAwRjk2ODY5IC8q
IExlZ2FjeVByZWxvYWRTY2FubmVyLmNwcCAqLywKLQkJCQlFNEQ0QUJFMTBENzU0MkYxMDBGOTY4
NjkgLyogTGVnYWN5UHJlbG9hZFNjYW5uZXIuaCAqLywKIAkJCQlFNDQ2MTM5QjBDRDYzMzEwMDBG
QURBNzUgLyogTWVkaWFFcnJvci5oICovLAogCQkJCUU0NDYxMzlDMENENjMzMTAwMEZBREE3NSAv
KiBNZWRpYUVycm9yLmlkbCAqLywKIAkJCQlBNUFGQjM0RDExNTE1MUE3MDBCMDQ1Q0IgLyogU3Rl
cFJhbmdlLmNwcCAqLywKQEAgLTE5Mjc0LDkgKzE5MjYyLDcgQEAKIAkJCQlBNDU2RkEyNzExQUQ0
QTgzMDAyMEI0MjAgLyogTGFiZWxzTm9kZUxpc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTg1RUM5
QUZCMEE3MUEyQzYwMEVFRUFFRCAvKiBMYW5ndWFnZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkQ5
MDY2MDcwQkUxNDFENDAwOTU2OTk4IC8qIExheW91dFN0YXRlLmggaW4gSGVhZGVycyAqLywKLQkJ
CQk5M0YxOThGMDA4MjQ1RTU5MDAxRTlBQkMgLyogTGVnYWN5SFRNTERvY3VtZW50UGFyc2VyLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk5M0YxOThFRjA4MjQ1RTU5MDAxRTlBQkMgLyogTGVnYWN5SFRN
TFRyZWVCdWlsZGVyLmggaW4gSGVhZGVycyAqLywKLQkJCQlFNDk2MjZDMzBEODBEOTQ5MDBFMzQw
NUMgLyogTGVnYWN5UHJlbG9hZFNjYW5uZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxMkREOEY1
MEQ5MUU2QUYwMDBGODlFRSAvKiBMZWdhY3lXZWJBcmNoaXZlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlCQ0U2NUJFQjBFQUNERjE2MDA3RTQ1MzMgLyogTGVuZ3RoLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlCQ0ZGNjQ5MTBFQUQxNUMyMDBDMUQ2RjcgLyogTGVuZ3RoQm94LmggaW4gSGVhZGVycyAqLywK
QEAgLTIwMjE1LDcgKzIwMjAxLDYgQEAKIAkJCWlzYSA9IFBCWFByb2plY3Q7CiAJCQlidWlsZENv
bmZpZ3VyYXRpb25MaXN0ID0gMTQ5QzI4NDMwODkwMkIxMTAwOEE5RUZDIC8qIEJ1aWxkIGNvbmZp
Z3VyYXRpb24gbGlzdCBmb3IgUEJYUHJvamVjdCAiV2ViQ29yZSIgKi87CiAJCQljb21wYXRpYmls
aXR5VmVyc2lvbiA9ICJYY29kZSAyLjQiOwotCQkJZGV2ZWxvcG1lbnRSZWdpb24gPSBFbmdsaXNo
OwogCQkJaGFzU2Nhbm5lZEZvckVuY29kaW5ncyA9IDE7CiAJCQlrbm93blJlZ2lvbnMgPSAoCiAJ
CQkJRW5nbGlzaCwKQEAgLTIxODE0LDkgKzIxNzk5LDcgQEAKIAkJCQlBNDU2RkEyNjExQUQ0QTgz
MDAyMEI0MjAgLyogTGFiZWxzTm9kZUxpc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTM1MjA4
NDUwOUJENDNCOTAwRjIwMzhEIC8qIExhbmd1YWdlLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMkQ5
MDY2MDYwQkUxNDFENDAwOTU2OTk4IC8qIExheW91dFN0YXRlLmNwcCBpbiBTb3VyY2VzICovLAot
CQkJCTkzRjE5QTlDMDgyNDVFNTkwMDFFOUFCQyAvKiBMZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXIu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTNGMTlBOUIwODI0NUU1OTAwMUU5QUJDIC8qIExlZ2Fj
eUhUTUxUcmVlQnVpbGRlci5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlFNDk2MjZDMjBEODBEOTQ4
MDBFMzQwNUMgLyogTGVnYWN5UHJlbG9hZFNjYW5uZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
NTEyREQ4RjQwRDkxRTZBRjAwMEY4OUVFIC8qIExlZ2FjeVdlYkFyY2hpdmUuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJNTFCMjQxN0IwRDkzMUYzRjAwRTgzRjVDIC8qIExlZ2FjeVdlYkFyY2hpdmVN
YWMubW0gaW4gU291cmNlcyAqLywKIAkJCQlCQ0U2NUJFQTBFQUNERjE2MDA3RTQ1MzMgLyogTGVu
Z3RoLmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vRG9jdW1lbnQu
Y3BwIGIvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCmluZGV4IDBkMzk4NTRmOGNlOTgwMWY2MjEz
ZmM5OGEzMGRkMjg3NTg1OTk3MWQuLmVmOTE0MWI0NzkyMDQzM2RmZDMwYTMzMTZiMGRiZmM4Y2Ji
MmQ5ZDUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAorKysgYi9XZWJDb3Jl
L2RvbS9Eb2N1bWVudC5jcHAKQEAgLTg5LDcgKzg5LDYgQEAKICNpbmNsdWRlICJJbnNwZWN0b3JD
b250cm9sbGVyLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5oIgogI2luY2x1
ZGUgIktleWJvYXJkRXZlbnQuaCIKLSNpbmNsdWRlICJMZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXIu
aCIKICNpbmNsdWRlICJMZWdhY3lIVE1MVHJlZUJ1aWxkZXIuaCIKICNpbmNsdWRlICJMb2dnaW5n
LmgiCiAjaW5jbHVkZSAiTWVzc2FnZUV2ZW50LmgiCmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9E
b2N1bWVudEZyYWdtZW50LmNwcCBiL1dlYkNvcmUvZG9tL0RvY3VtZW50RnJhZ21lbnQuY3BwCmlu
ZGV4IDQ3NDg1YjdmNjY0MDJkOGQ3MmI5N2Q0MGU5ZmJiOGE3N2NkMzMxYWQuLjcwZTU3YjkwYmE5
NzUyYTU2OTZlMjU4ZjQ5ZmNkODA3ZmFiM2FmMTAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZG9tL0Rv
Y3VtZW50RnJhZ21lbnQuY3BwCisrKyBiL1dlYkNvcmUvZG9tL0RvY3VtZW50RnJhZ21lbnQuY3Bw
CkBAIC0yNSw3ICsyNSw2IEBACiAKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkhU
TUxEb2N1bWVudFBhcnNlci5oIgotI2luY2x1ZGUgIkxlZ2FjeUhUTUxEb2N1bWVudFBhcnNlci5o
IgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgogI2luY2x1ZGUgIlhN
TERvY3VtZW50UGFyc2VyLmgiCkBAIC04NCw4ICs4Myw2IEBAIGJvb2wgRG9jdW1lbnRGcmFnbWVu
dDo6c2hvdWxkVXNlTGVnYWN5SFRNTFBhcnNlcigpIGNvbnN0CiAKIHZvaWQgRG9jdW1lbnRGcmFn
bWVudDo6cGFyc2VIVE1MKGNvbnN0IFN0cmluZyYgc291cmNlLCBFbGVtZW50KiBjb250ZXh0RWxl
bWVudCwgRnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uIHNjcmlwdGluZ1Blcm1pc3Npb24pCiB7
Ci0gICAgaWYgKHNob3VsZFVzZUxlZ2FjeUhUTUxQYXJzZXIoKSkKLSAgICAgICAgcmV0dXJuIExl
Z2FjeUhUTUxEb2N1bWVudFBhcnNlcjo6cGFyc2VEb2N1bWVudEZyYWdtZW50KHNvdXJjZSwgdGhp
cywgc2NyaXB0aW5nUGVybWlzc2lvbik7CiAgICAgSFRNTERvY3VtZW50UGFyc2VyOjpwYXJzZURv
Y3VtZW50RnJhZ21lbnQoc291cmNlLCB0aGlzLCBjb250ZXh0RWxlbWVudCwgc2NyaXB0aW5nUGVy
bWlzc2lvbik7CiB9CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL0RvY3VtZW50UGFyc2VyLmgg
Yi9XZWJDb3JlL2RvbS9Eb2N1bWVudFBhcnNlci5oCmluZGV4IGEzNTQ1YjZlZjgxYjExMzcxMzVk
N2FmNzg0ZGE3ZDYyMzYyZTJmNDQuLmU5NDJkMWYyMGY0ZDNhNzdjMjI2Y2M1MjM3OWIyMTY0MmMw
NGY4OWUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZG9tL0RvY3VtZW50UGFyc2VyLmgKKysrIGIvV2Vi
Q29yZS9kb20vRG9jdW1lbnRQYXJzZXIuaApAQCAtNTgsOCArNTgsOCBAQCBwdWJsaWM6CiAKICAg
ICB2aXJ0dWFsIHZvaWQgc3RvcFBhcnNpbmcoKSB7IG1fcGFyc2VyU3RvcHBlZCA9IHRydWU7IH0K
ICAgICAvLyBGSVhNRTogcHJvY2Vzc2luZ0RhdGEoKSBpcyBvbmx5IHVzZWQgYnkgRG9jdW1lbnRM
b2FkZXI6OmlzTG9hZGluZ0luQVBJU2Vuc2UKLSAgICAvLyBhbmQgaXMgdmVyeSB1bmNsZWFyIGFz
IHRvIHdoYXQgaXQgYWN0dWFsbHkgbWVhbnMuICBPbmx5IExlZ2FjeUhUTUxEb2N1bWVudFBhcnNl
cgotICAgIC8vIGFjdHVhbGx5IGltcGxlbWVudHMgaXQuCisgICAgLy8gYW5kIGlzIHZlcnkgdW5j
bGVhciBhcyB0byB3aGF0IGl0IGFjdHVhbGx5IG1lYW5zLiAgVGhlIExlZ2FjeUhUTUxEb2N1bWVu
dFBhcnNlcgorICAgIC8vIHVzZWQgdG8gaW1wbGVtZW50cyBpdC4KICAgICB2aXJ0dWFsIGJvb2wg
cHJvY2Vzc2luZ0RhdGEoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogCiAgICAgLy8gRklYTUU6
IEV4cG9zZWQgZm9yIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnJlbW92ZWRGcm9tVHJlZS4gIEhU
TUwgRE9NCmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9YTUxEb2N1bWVudFBhcnNlckxpYnhtbDIu
Y3BwIGIvV2ViQ29yZS9kb20vWE1MRG9jdW1lbnRQYXJzZXJMaWJ4bWwyLmNwcAppbmRleCBhNmU5
Y2QwN2I4ODA5MzUxMmMzNWVlYmM4MTUyODdhOTEwMGJiMGRiLi4xMzA5ODI3ZDc1M2I4NjViOWFl
MmJhMTc4N2QxODk0ZDk1ZTRkZjY5IDEwMDY0NAotLS0gYS9XZWJDb3JlL2RvbS9YTUxEb2N1bWVu
dFBhcnNlckxpYnhtbDIuY3BwCisrKyBiL1dlYkNvcmUvZG9tL1hNTERvY3VtZW50UGFyc2VyTGli
eG1sMi5jcHAKQEAgLTM2LDkgKzM2LDkgQEAKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUg
IkZyYW1lTG9hZGVyLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCisjaW5jbHVkZSAiSFRNTEVu
dGl0eVBhcnNlci5oIgogI2luY2x1ZGUgIkhUTUxMaW5rRWxlbWVudC5oIgogI2luY2x1ZGUgIkhU
TUxTdHlsZUVsZW1lbnQuaCIKLSNpbmNsdWRlICJMZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXIuaCIg
Ly8gZm9yIGRlY29kZU5hbWVkRW50aXR5CiAjaW5jbHVkZSAiUHJvY2Vzc2luZ0luc3RydWN0aW9u
LmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VFcnJvci5oIgogI2luY2x1ZGUgIlJlc291cmNlSGFuZGxl
LmgiCmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9YTUxEb2N1bWVudFBhcnNlclF0LmNwcCBiL1dl
YkNvcmUvZG9tL1hNTERvY3VtZW50UGFyc2VyUXQuY3BwCmluZGV4IDY3OGQxNDE5OGE0NDMyYmQz
MGI0NzM0YmQ2ZWJlMTI2ZjBlNTU4ZTkuLjcxNTg1NmM4Y2ZjNmY4YzFjZjYyYjZmMjJlNGMwNGUy
Y2Q1MTI1ODEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZG9tL1hNTERvY3VtZW50UGFyc2VyUXQuY3Bw
CisrKyBiL1dlYkNvcmUvZG9tL1hNTERvY3VtZW50UGFyc2VyUXQuY3BwCkBAIC0zNiw5ICszNiw5
IEBACiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgogI2luY2x1
ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1ZGUgIkhUTUxFbnRpdHlQYXJzZXIuaCIKICNpbmNsdWRl
ICJIVE1MTGlua0VsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MU3R5bGVFbGVtZW50LmgiCi0jaW5j
bHVkZSAiTGVnYWN5SFRNTERvY3VtZW50UGFyc2VyLmgiCiAjaW5jbHVkZSAiUHJvY2Vzc2luZ0lu
c3RydWN0aW9uLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VFcnJvci5oIgogI2luY2x1ZGUgIlJlc291
cmNlSGFuZGxlLmgiCmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvSFRNTENvbnN0cnVjdGlvblNp
dGUuY3BwIGIvV2ViQ29yZS9odG1sL0hUTUxDb25zdHJ1Y3Rpb25TaXRlLmNwcAppbmRleCA5ZjUw
MmUzMWU0YjU4NmIxNjkxNjI0NGM5MTUxNzk3MzUxMmNlYjI3Li4yYjI4ZGE0MTQ4ZTY0NDE2Njc1
NTVlNTcxNzBjMDYxMDRmYTNmMDczIDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvSFRNTENvbnN0
cnVjdGlvblNpdGUuY3BwCisrKyBiL1dlYkNvcmUvaHRtbC9IVE1MQ29uc3RydWN0aW9uU2l0ZS5j
cHAKQEAgLTM5LDcgKzM5LDYgQEAKICNpbmNsdWRlICJIVE1MU2NyaXB0RWxlbWVudC5oIgogI2lu
Y2x1ZGUgIkhUTUxUb2tlbi5oIgogI2luY2x1ZGUgIkhUTUxUb2tlbml6ZXIuaCIKLSNpbmNsdWRl
ICJMZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXIuaCIKICNpbmNsdWRlICJMZWdhY3lIVE1MVHJlZUJ1
aWxkZXIuaCIKICNpbmNsdWRlICJMb2NhbGl6ZWRTdHJpbmdzLmgiCiAjaWYgRU5BQkxFKE1BVEhN
TCkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9IVE1MRG9jdW1lbnQuY3BwIGIvV2ViQ29yZS9o
dG1sL0hUTUxEb2N1bWVudC5jcHAKaW5kZXggZmYwYzJkZTY0MjA4NWE4Y2VjYjk4YzhmNTM4NDg1
MDQ4MDViOWZhNC4uNTU5YzFlMDQyMDFhYjljZjJhZGVlMjkxOWYwOTRiYTUyOWFlZTRkNyAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9odG1sL0hUTUxEb2N1bWVudC5jcHAKKysrIGIvV2ViQ29yZS9odG1s
L0hUTUxEb2N1bWVudC5jcHAKQEAgLTY4LDcgKzY4LDYgQEAKICNpbmNsdWRlICJIVE1MQm9keUVs
ZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MRWxlbWVudEZhY3RvcnkuaCIKICNpbmNsdWRlICJIVE1M
TmFtZXMuaCIKLSNpbmNsdWRlICJMZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXIuaCIKICNpbmNsdWRl
ICJJbnNwZWN0b3JDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiS1VSTC5oIgogI2luY2x1ZGUgIlBh
Z2UuaCIKQEAgLTI5MCwxMSArMjg5LDcgQEAgRG9jdW1lbnRQYXJzZXIqIEhUTUxEb2N1bWVudDo6
Y3JlYXRlUGFyc2VyKCkKICAgICBpZiAoUGFnZSogcGFnZSA9IHRoaXMtPnBhZ2UoKSkKICAgICAg
ICAgcmVwb3J0RXJyb3JzID0gcGFnZS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLT53aW5kb3dWaXNp
YmxlKCk7CiAjZW5kaWYKLQotICAgIGlmIChzZXR0aW5ncygpICYmIHNldHRpbmdzKCktPmh0bWw1
UGFyc2VyRW5hYmxlZCgpKQotICAgICAgICByZXR1cm4gbmV3IEhUTUxEb2N1bWVudFBhcnNlcih0
aGlzLCByZXBvcnRFcnJvcnMpOwotCi0gICAgcmV0dXJuIG5ldyBMZWdhY3lIVE1MRG9jdW1lbnRQ
YXJzZXIodGhpcywgcmVwb3J0RXJyb3JzKTsKKyAgICByZXR1cm4gbmV3IEhUTUxEb2N1bWVudFBh
cnNlcih0aGlzLCByZXBvcnRFcnJvcnMpOwogfQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9odG1sL0hUTUxEb2N1bWVudFBhcnNlci5oIGIvV2ViQ29yZS9odG1s
L0hUTUxEb2N1bWVudFBhcnNlci5oCmluZGV4IGQwNTU4NjE0ZjA1YWFiMTkyYzg3YWJmN2Y4N2My
ZWE4MzQxYmRhODcuLmQzNWNmYWZjYmY1Y2EwODdkZjY1OGRlNDEzZTAyY2U4NjRlNWUwZDAgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9IVE1MRG9jdW1lbnRQYXJzZXIuaAorKysgYi9XZWJDb3Jl
L2h0bWwvSFRNTERvY3VtZW50UGFyc2VyLmgKQEAgLTYyLDEyICs2MiwxNCBAQCBwdWJsaWM6CiAK
ICAgICBzdGF0aWMgdm9pZCBwYXJzZURvY3VtZW50RnJhZ21lbnQoY29uc3QgU3RyaW5nJiwgRG9j
dW1lbnRGcmFnbWVudCosIEVsZW1lbnQqIGNvbnRleHRFbGVtZW50LCBGcmFnbWVudFNjcmlwdGlu
Z1Blcm1pc3Npb24gPSBGcmFnbWVudFNjcmlwdGluZ0FsbG93ZWQpOwogCitwcm90ZWN0ZWQ6Cisg
ICAgdmlydHVhbCB2b2lkIGluc2VydChjb25zdCBTZWdtZW50ZWRTdHJpbmcmKTsKKyAgICB2aXJ0
dWFsIHZvaWQgZmluaXNoKCk7CisKIHByaXZhdGU6CiAgICAgLy8gRG9jdW1lbnRQYXJzZXIKICAg
ICB2aXJ0dWFsIGJvb2wgaGFzSW5zZXJ0aW9uUG9pbnQoKTsKLSAgICB2aXJ0dWFsIHZvaWQgaW5z
ZXJ0KGNvbnN0IFNlZ21lbnRlZFN0cmluZyYpOwogICAgIHZpcnR1YWwgdm9pZCBhcHBlbmQoY29u
c3QgU2VnbWVudGVkU3RyaW5nJik7Ci0gICAgdmlydHVhbCB2b2lkIGZpbmlzaCgpOwogICAgIHZp
cnR1YWwgYm9vbCBmaW5pc2hXYXNDYWxsZWQoKTsKICAgICB2aXJ0dWFsIGJvb2wgcHJvY2Vzc2lu
Z0RhdGEoKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgc3RvcFBhcnNpbmcoKTsKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvaHRtbC9IVE1MRW50aXR5UGFyc2VyLmNwcCBiL1dlYkNvcmUvaHRtbC9IVE1M
RW50aXR5UGFyc2VyLmNwcAppbmRleCA4NGIyMDA2NzQ0ZmY2NzhiOGMyZjZkOGEyMjkxN2E1N2Nj
M2Y0MTNjLi5iOWM0ZGVlM2U1ODMxYjZjMWUyZWJjOTA2NmU4NGYyMzhhMzQ4MDVjIDEwMDY0NAot
LS0gYS9XZWJDb3JlL2h0bWwvSFRNTEVudGl0eVBhcnNlci5jcHAKKysrIGIvV2ViQ29yZS9odG1s
L0hUTUxFbnRpdHlQYXJzZXIuY3BwCkBAIC0yNDcsNCArMjQ3LDEwIEBAIHVuc2lnbmVkIGNvbnN1
bWVIVE1MRW50aXR5KFNlZ21lbnRlZFN0cmluZyYgc291cmNlLCBib29sJiBub3RFbm91Z2hDaGFy
YWN0ZXJzLCBVCiAgICAgcmV0dXJuIDA7CiB9CiAKK1VDaGFyIGRlY29kZU5hbWVkRW50aXR5KGNv
bnN0IGNoYXIqIG5hbWUpCit7CisgICAgY29uc3QgRW50aXR5KiBlID0gZmluZEVudGl0eShuYW1l
LCBzdHJsZW4obmFtZSkpOworICAgIHJldHVybiBlID8gZS0+Y29kZSA6IDA7Cit9CisKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9IVE1MRW50aXR5UGFy
c2VyLmggYi9XZWJDb3JlL2h0bWwvSFRNTEVudGl0eVBhcnNlci5oCmluZGV4IGQzN2IwYzMzZTZl
MDk5YjAwZWM1YzMxN2NmNjQ1MmVlZGZlYzYwMzcuLjEwNTliMjQ5NWE4MGU4MDA2ODc2Y2U2MTM5
NWFmODc1Njc4ZGIwOTMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9IVE1MRW50aXR5UGFyc2Vy
LmgKKysrIGIvV2ViQ29yZS9odG1sL0hUTUxFbnRpdHlQYXJzZXIuaApAQCAtMzMsNiArMzMsOSBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVuc2lnbmVkIGNvbnN1bWVIVE1MRW50aXR5KFNlZ21l
bnRlZFN0cmluZyYsIGJvb2wmIG5vdEVub3VnaENoYXJhY3RlcnMsIFVDaGFyIGFkZGl0aW9uYWxB
bGxvd2VkQ2hhcmFjdGVyID0gJ1wwJyk7CiAKKy8vIFVzZWQgYnkgdGhlIFhNTCBwYXJzZXIuICBO
b3Qgc3VpdGFibGUgZm9yIHVzZSBpbiBIVE1MIHBhcnNpbmcuICBVc2UgY29uc3VtZUhUTUxFbnRp
dHkgaW5zdGVhZC4KK1VDaGFyIGRlY29kZU5hbWVkRW50aXR5KGNvbnN0IGNoYXIqKTsKKwogfQog
CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50
LmNwcCBiL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50LmNwcAppbmRleCA1MTAz
YmZhN2NhZDBiYTljYTIyMjAzNmYxOGY1ZmUzZGE5MTE2NzQwLi43ZDRjYjAwNWYxYjdiNzVkODhh
YzdmOTMyYTgyN2MwYmIxNTY1N2ZiIDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1D
b250cm9sRWxlbWVudC5jcHAKKysrIGIvV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJvbEVsZW1l
bnQuY3BwCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiQ2hyb21lLmgiCiAjaW5jbHVkZSAi
Q2hyb21lQ2xpZW50LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJEb2N1bWVu
dFBhcnNlci5oIgogI2luY2x1ZGUgIkVsZW1lbnRSYXJlRGF0YS5oIgogI2luY2x1ZGUgIkV2ZW50
LmgiCiAjaW5jbHVkZSAiRXZlbnRIYW5kbGVyLmgiCkBAIC0zOSw3ICs0MCw2IEBACiAjaW5jbHVk
ZSAiSFRNTElucHV0RWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUg
IkxlZ2FjeUhUTUxUcmVlQnVpbGRlci5oIgotI2luY2x1ZGUgIkxlZ2FjeUhUTUxEb2N1bWVudFBh
cnNlci5oIgogI2luY2x1ZGUgIkxhYmVsc05vZGVMaXN0LmgiCiAjaW5jbHVkZSAiUGFnZS5oIgog
I2luY2x1ZGUgIlJlbmRlckJveC5oIgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0hUTUxUcmVl
QnVpbGRlci5jcHAgYi9XZWJDb3JlL2h0bWwvSFRNTFRyZWVCdWlsZGVyLmNwcAppbmRleCBmYzBi
OWQwMTZlYjYxNDc4MTE2MzczZTFiZTZhZThlNmMzNjdjODVlLi5hYjdlNmJmZmRlNTcyNjUwYmJl
NDJkOGJiYmVkMzc5NzhmYzQ2YzA5IDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvSFRNTFRyZWVC
dWlsZGVyLmNwcAorKysgYi9XZWJDb3JlL2h0bWwvSFRNTFRyZWVCdWlsZGVyLmNwcApAQCAtMzks
NyArMzksNiBAQAogI2luY2x1ZGUgIkhUTUxTY3JpcHRFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRN
TFRva2VuLmgiCiAjaW5jbHVkZSAiSFRNTFRva2VuaXplci5oIgotI2luY2x1ZGUgIkxlZ2FjeUhU
TUxEb2N1bWVudFBhcnNlci5oIgogI2luY2x1ZGUgIkxlZ2FjeUhUTUxUcmVlQnVpbGRlci5oIgog
I2luY2x1ZGUgIkxvY2FsaXplZFN0cmluZ3MuaCIKICNpbmNsdWRlICJNYXRoTUxOYW1lcy5oIgpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0hUTUxWaWV3U291cmNlRG9jdW1lbnQuY3BwIGIvV2Vi
Q29yZS9odG1sL0hUTUxWaWV3U291cmNlRG9jdW1lbnQuY3BwCmluZGV4IGMzMzBjNGQ2OWVhZWNj
ZGQxM2Q4Mjg2ZTU1ZjEzNmRlZGVlYWNkYWQuLmUwZTcxZWVhMWFmZWFjYjdhZTY5ZTBlNzUwNjE2
OTY1MjQ0YTUxZmQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9IVE1MVmlld1NvdXJjZURvY3Vt
ZW50LmNwcAorKysgYi9XZWJDb3JlL2h0bWwvSFRNTFZpZXdTb3VyY2VEb2N1bWVudC5jcHAKQEAg
LTU1LDcgKzU1LDcgQEAgSFRNTFZpZXdTb3VyY2VEb2N1bWVudDo6SFRNTFZpZXdTb3VyY2VEb2N1
bWVudChGcmFtZSogZnJhbWUsIGNvbnN0IEtVUkwmIHVybCwgY28KIAogRG9jdW1lbnRQYXJzZXIq
IEhUTUxWaWV3U291cmNlRG9jdW1lbnQ6OmNyZWF0ZVBhcnNlcigpCiB7Ci0gICAgLy8gVXNlIExl
Z2FjeUhUTUxEb2N1bWVudFBhcnNlciBpZiBhcHBsaWNhYmxlLCBvdGhlcndpc2UgdXNlIFRleHRE
b2N1bWVudFBhcnNlci4KKyAgICAvLyBVc2UgSFRNTERvY3VtZW50UGFyc2VyIGlmIGFwcGxpY2Fi
bGUsIG90aGVyd2lzZSB1c2UgVGV4dERvY3VtZW50UGFyc2VyLgogICAgIGlmIChtX3R5cGUgPT0g
InRleHQvaHRtbCIgfHwgbV90eXBlID09ICJhcHBsaWNhdGlvbi94aHRtbCt4bWwiIHx8IG1fdHlw
ZSA9PSAiaW1hZ2Uvc3ZnK3htbCIgfHwgRE9NSW1wbGVtZW50YXRpb246OmlzWE1MTUlNRVR5cGUo
bV90eXBlKQogI2lmIEVOQUJMRShYSFRNTE1QKQogICAgICAgICB8fCBtX3R5cGUgPT0gImFwcGxp
Y2F0aW9uL3ZuZC53YXAueGh0bWwreG1sIgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0xlZ2Fj
eUhUTUxEb2N1bWVudFBhcnNlci5jcHAgYi9XZWJDb3JlL2h0bWwvTGVnYWN5SFRNTERvY3VtZW50
UGFyc2VyLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGQ0ZDYxNTdmMDQ4Yjcx
ZTY3YThiNTgxMjczZTEwYzJlNWI0OWM2NC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9XZWJDb3JlL2h0bWwvTGVnYWN5SFRNTERvY3VtZW50UGFyc2VyLmNw
cAorKysgL2Rldi9udWxsCkBAIC0xLDIxMjAgKzAsMCBAQAotLyoKLSAgICBDb3B5cmlnaHQgKEMp
IDE5OTcgTWFydGluIEpvbmVzIChtam9uZXNAa2RlLm9yZykKLSAgICAgICAgICAgICAgKEMpIDE5
OTcgVG9yYmVuIFdlaXMgKHdlaXNAa2RlLm9yZykKLSAgICAgICAgICAgICAgKEMpIDE5OTggV2Fs
ZG8gQmFzdGlhbiAoYmFzdGlhbkBrZGUub3JnKQotICAgICAgICAgICAgICAoQykgMTk5OSBMYXJz
IEtub2xsIChrbm9sbEBrZGUub3JnKQotICAgICAgICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2
aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKLSAgICAgICAgICAgICAgKEMpIDIwMDEgRGlyayBNdWVs
bGVyIChtdWVsbGVyQGtkZS5vcmcpCi0gICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2
LCAyMDA3LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAgICBD
b3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYgQWxleGV5IFByb3NrdXJ5YWtvdiAoYXBAbnlwb3AuY29t
KQotICAgIENvcHlyaWdodCAoQykgMjAwOSBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLiAoaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vKQotCi0gICAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICAgIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
Ci0gICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCi0gICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICAgYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgICBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQotICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgotCi0gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gICAgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKLSAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSovCi0KLSNpbmNsdWRlICJjb25m
aWcuaCIKLSNpbmNsdWRlICJMZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXIuaCIKLQotI2luY2x1ZGUg
IkF0dHJpYnV0ZS5oIgotI2luY2x1ZGUgIkNTU0hlbHBlci5oIgotI2luY2x1ZGUgIkNhY2hlLmgi
Ci0jaW5jbHVkZSAiQ2FjaGVkU2NyaXB0LmgiCi0jaW5jbHVkZSAiRG9jTG9hZGVyLmgiCi0jaW5j
bHVkZSAiRG9jdW1lbnRGcmFnbWVudC5oIgotI2luY2x1ZGUgIkV2ZW50LmgiCi0jaW5jbHVkZSAi
RXZlbnROYW1lcy5oIgotI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAiRnJhbWVMb2FkZXIu
aCIKLSNpbmNsdWRlICJGcmFtZVZpZXcuaCIKLSNpbmNsdWRlICJIVE1MRWxlbWVudC5oIgotI2lu
Y2x1ZGUgIkhUTUxOYW1lcy5oIgotI2luY2x1ZGUgIkxlZ2FjeUhUTUxUcmVlQnVpbGRlci5oIgot
I2luY2x1ZGUgIkhUTUxTY3JpcHRFbGVtZW50LmgiCi0jaW5jbHVkZSAiSFRNTFZpZXdTb3VyY2VE
b2N1bWVudC5oIgotI2luY2x1ZGUgIkltYWdlTG9hZGVyLmgiCi0jaW5jbHVkZSAiSW5zcGVjdG9y
VGltZWxpbmVBZ2VudC5oIgotI2luY2x1ZGUgIlBhZ2UuaCIKLSNpbmNsdWRlICJMZWdhY3lQcmVs
b2FkU2Nhbm5lci5oIgotI2luY2x1ZGUgIlNjcmlwdFNvdXJjZUNvZGUuaCIKLSNpbmNsdWRlICJT
Y3JpcHRWYWx1ZS5oIgotI2luY2x1ZGUgIlhTU0F1ZGl0b3IuaCIKLSNpbmNsdWRlIDx3dGYvQVND
SUlDVHlwZS5oPgotI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgotCi0jaW5jbHVkZSAiSFRN
TEVudGl0eU5hbWVzLmNwcCIKLQotI2RlZmluZSBQUkVMT0FEX1NDQU5ORVJfRU5BQkxFRCAxCi0K
LXVzaW5nIG5hbWVzcGFjZSBXVEY7Ci11c2luZyBuYW1lc3BhY2Ugc3RkOwotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0KLXVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7Ci0KLS8vIFRoaXMgdmFsdWUg
aXMgdXNlZCB0byBkZWZpbmUgaG93IG1hbnkgbG9vcHMgKGFwcHJveGltYXRlbHkgdG9rZW5zKQot
Ly8gdGhlIHBhcnNlciB3aWxsIG1ha2UgYmVmb3JlIGNoZWNraW5nIGlmIGl0IHNob3VsZCB5aWVs
ZC4KLS8vIFRvIGluY3JlYXNlIHJlc3BvbnNpdmVuZXNzIHJlZHVjZSBib3RoIENodW5rU2l6ZSBh
bmQgVGltZURlbGF5IGNvbnRhbnRzLgotc3RhdGljIGNvbnN0IGludCBkZWZhdWx0VG9rZW5pemVy
Q2h1bmtTaXplID0gNDA5NjsKLQotLy8gRklYTUU6IFdlIHdvdWxkIGxpa2UgdGhpcyBjb25zdGFu
dCB0byBiZSAyMDBtcy4KLS8vIFlpZWxkaW5nIG1vcmUgYWdncmVzc2l2ZWx5IHJlc3VsdHMgaW4g
aW5jcmVhc2VkIHJlc3BvbnNpdmVuZXNzIGFuZCBiZXR0ZXIgaW5jcmVtZW50YWwgcmVuZGVyaW5n
LgotLy8gSXQgc2xvd3MgZG93biBvdmVyYWxsIHBhZ2UtbG9hZCBvbiBzbG93ZXIgbWFjaGluZXMs
IHRob3VnaCwgc28gZm9yIG5vdyB3ZSBzZXQgYSB2YWx1ZSBvZiA1MDAuCi0vLyBUaW1lRGVsYXkg
Y29udHJvbHMgdGhlIG1heGltdW0gdGltZSB0aGUgcGFyc2VyIHdpbGwgcnVuIGJlZm9yZSB5aWVs
ZGluZy4KLS8vIElubGluZSBzY3JpcHQgZXhlY3V0aW9uIGNhbiBjYXVzZSB0aGUgcGFyc2VyIHRv
IGV4Y2VkZSB0aGlzIGxpbWl0Lgotc3RhdGljIGNvbnN0IGRvdWJsZSBkZWZhdWx0VG9rZW5pemVy
VGltZURlbGF5ID0gMC41MDA7Ci0KLXN0YXRpYyBjb25zdCBjaGFyIGNvbW1lbnRTdGFydCBbXSA9
ICI8IS0tIjsKLXN0YXRpYyBjb25zdCBjaGFyIGRvY3R5cGVTdGFydCBbXSA9ICI8IWRvY3R5cGUi
Owotc3RhdGljIGNvbnN0IGNoYXIgcHVibGljU3RhcnQgW10gPSAicHVibGljIjsKLXN0YXRpYyBj
b25zdCBjaGFyIHN5c3RlbVN0YXJ0IFtdID0gInN5c3RlbSI7Ci1zdGF0aWMgY29uc3QgY2hhciBz
Y3JpcHRFbmQgW10gPSAiPC9zY3JpcHQiOwotc3RhdGljIGNvbnN0IGNoYXIgeG1wRW5kIFtdID0g
IjwveG1wIjsKLXN0YXRpYyBjb25zdCBjaGFyIHN0eWxlRW5kIFtdID0gICI8L3N0eWxlIjsKLXN0
YXRpYyBjb25zdCBjaGFyIHRleHRhcmVhRW5kIFtdID0gIjwvdGV4dGFyZWEiOwotc3RhdGljIGNv
bnN0IGNoYXIgdGl0bGVFbmQgW10gPSAiPC90aXRsZSI7Ci1zdGF0aWMgY29uc3QgY2hhciBpZnJh
bWVFbmQgW10gPSAiPC9pZnJhbWUiOwotCi0vLyBGdWxsIHN1cHBvcnQgZm9yIE1TIFdpbmRvd3Mg
ZXh0ZW5zaW9ucyB0byBMYXRpbi0xLgotLy8gVGVjaG5pY2FsbHkgdGhlc2UgZXh0ZW5zaW9ucyBz
aG91bGQgb25seSBiZSBhY3RpdmF0ZWQgZm9yIHBhZ2VzCi0vLyBtYXJrZWQgIndpbmRvd3MtMTI1
MiIgb3IgImNwMTI1MiIsIGJ1dAotLy8gaW4gdGhlIHN0YW5kYXJkIE1pY3Jvc29mdCB3YXksIHRo
ZXNlIGV4dGVuc2lvbnMgaW5mZWN0IGh1bmRyZWRzIG9mIHRob3VzYW5kcwotLy8gb2Ygd2ViIHBh
Z2VzLiAgTm90ZSB0aGF0IHBlb3BsZSB3aXRoIG5vbi1sYXRpbi0xIE1pY3Jvc29mdCBleHRlbnNp
b25zCi0vLyBhcmUgU09MLgotLy8KLS8vIFNlZTogaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL2ds
b2JhbGRldi9yZWZlcmVuY2UvV2luQ1AuYXNwCi0vLyAgICAgIGh0dHA6Ly93d3cuYmJzaW5jLmNv
bS9pc284ODU5Lmh0bWwKLS8vICAgICAgaHR0cDovL3d3dy5vYnZpb3VzbHkuY29tLwotLy8KLS8v
IFRoZXJlIG1heSBiZSBiZXR0ZXIgZXF1aXZhbGVudHMKLQotLy8gV2Ugb25seSBuZWVkIHRoaXMg
Zm9yIGVudGl0aWVzLiBGb3Igbm9uLWVudGl0eSB0ZXh0LCB3ZSBoYW5kbGUgdGhpcyBpbiB0aGUg
dGV4dCBlbmNvZGluZy4KLQotc3RhdGljIGNvbnN0IFVDaGFyIHdpbmRvd3NMYXRpbjFFeHRlbnNp
b25BcnJheVszMl0gPSB7Ci0gICAgMHgyMEFDLCAweDAwODEsIDB4MjAxQSwgMHgwMTkyLCAweDIw
MUUsIDB4MjAyNiwgMHgyMDIwLCAweDIwMjEsIC8vIDgwLTg3Ci0gICAgMHgwMkM2LCAweDIwMzAs
IDB4MDE2MCwgMHgyMDM5LCAweDAxNTIsIDB4MDA4RCwgMHgwMTdELCAweDAwOEYsIC8vIDg4LThG
Ci0gICAgMHgwMDkwLCAweDIwMTgsIDB4MjAxOSwgMHgyMDFDLCAweDIwMUQsIDB4MjAyMiwgMHgy
MDEzLCAweDIwMTQsIC8vIDkwLTk3Ci0gICAgMHgwMkRDLCAweDIxMjIsIDB4MDE2MSwgMHgyMDNB
LCAweDAxNTMsIDB4MDA5RCwgMHgwMTdFLCAweDAxNzggIC8vIDk4LTlGCi19OwotCi1zdGF0aWMg
aW5saW5lIFVDaGFyIGZpeFVwQ2hhcihVQ2hhciBjKQotewotICAgIGlmICgoYyAmIH4weDFGKSAh
PSAweDAwODApCi0gICAgICAgIHJldHVybiBjOwotICAgIHJldHVybiB3aW5kb3dzTGF0aW4xRXh0
ZW5zaW9uQXJyYXlbYyAtIDB4ODBdOwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wgdGFnTWF0Y2go
Y29uc3QgY2hhciogczEsIGNvbnN0IFVDaGFyKiBzMiwgdW5zaWduZWQgbGVuZ3RoKQotewotICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgIT0gbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgdW5zaWdu
ZWQgY2hhciBjMSA9IHMxW2ldOwotICAgICAgICB1bnNpZ25lZCBjaGFyIHVjMSA9IHRvQVNDSUlV
cHBlcihzdGF0aWNfY2FzdDxjaGFyPihjMSkpOwotICAgICAgICBVQ2hhciBjMiA9IHMyW2ldOwot
ICAgICAgICBpZiAoYzEgIT0gYzIgJiYgdWMxICE9IGMyKQotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotaW5saW5lIHZvaWQgVG9rZW46OmFk
ZEF0dHJpYnV0ZShBdG9taWNTdHJpbmcmIGF0dHJOYW1lLCBjb25zdCBBdG9taWNTdHJpbmcmIGF0
dHJpYnV0ZVZhbHVlLCBib29sIHZpZXdTb3VyY2VNb2RlKQotewotICAgIGlmICghYXR0ck5hbWUu
aXNFbXB0eSgpKSB7Ci0gICAgICAgIEFTU0VSVCghYXR0ck5hbWUuY29udGFpbnMoJy8nKSk7Ci0g
ICAgICAgIFJlZlB0cjxBdHRyaWJ1dGU+IGEgPSBBdHRyaWJ1dGU6OmNyZWF0ZU1hcHBlZChhdHRy
TmFtZSwgYXR0cmlidXRlVmFsdWUpOwotICAgICAgICBpZiAoIWF0dHJzKSB7Ci0gICAgICAgICAg
ICBhdHRycyA9IE5hbWVkTm9kZU1hcDo6Y3JlYXRlKCk7Ci0gICAgICAgICAgICBhdHRycy0+cmVz
ZXJ2ZUluaXRpYWxDYXBhY2l0eSgxMCk7Ci0gICAgICAgIH0KLSAgICAgICAgYXR0cnMtPmluc2Vy
dEF0dHJpYnV0ZShhLnJlbGVhc2UoKSwgdmlld1NvdXJjZU1vZGUpOwotICAgIH0KLQotICAgIGF0
dHJOYW1lID0gZW1wdHlBdG9tOwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUxlZ2Fj
eUhUTUxEb2N1bWVudFBhcnNlcjo6TGVnYWN5SFRNTERvY3VtZW50UGFyc2VyKEhUTUxEb2N1bWVu
dCogZG9jdW1lbnQsIGJvb2wgcmVwb3J0RXJyb3JzKQotICAgIDogU2NyaXB0YWJsZURvY3VtZW50
UGFyc2VyKGRvY3VtZW50KQotICAgICwgbV9idWZmZXIoMCkKLSAgICAsIG1fc2NyaXB0Q29kZSgw
KQotICAgICwgbV9zY3JpcHRDb2RlU2l6ZSgwKQotICAgICwgbV9zY3JpcHRDb2RlQ2FwYWNpdHko
MCkKLSAgICAsIG1fc2NyaXB0Q29kZVJlc3luYygwKQotICAgICwgbV9leGVjdXRpbmdTY3JpcHQo
MCkKLSAgICAsIG1fcmVxdWVzdGluZ1NjcmlwdChmYWxzZSkKLSAgICAsIG1faGFzU2NyaXB0c1dh
aXRpbmdGb3JTdHlsZXNoZWV0cyhmYWxzZSkKLSAgICAsIG1fdGltZXIodGhpcywgJkxlZ2FjeUhU
TUxEb2N1bWVudFBhcnNlcjo6dGltZXJGaXJlZCkKLSAgICAsIG1fZXh0ZXJuYWxTY3JpcHRzVGlt
ZXIodGhpcywgJkxlZ2FjeUhUTUxEb2N1bWVudFBhcnNlcjo6ZXhlY3V0ZUV4dGVybmFsU2NyaXB0
c1RpbWVyRmlyZWQpCi0gICAgLCBtX3RyZWVCdWlsZGVyKG5ldyBMZWdhY3lIVE1MVHJlZUJ1aWxk
ZXIoZG9jdW1lbnQsIHJlcG9ydEVycm9ycykpCi0gICAgLCBtX2luV3JpdGUoZmFsc2UpCi0gICAg
LCBtX2ZyYWdtZW50KGZhbHNlKQotICAgICwgbV9zY3JpcHRpbmdQZXJtaXNzaW9uKEZyYWdtZW50
U2NyaXB0aW5nQWxsb3dlZCkKLXsKLSAgICBiZWdpbigpOwotfQotCi1MZWdhY3lIVE1MRG9jdW1l
bnRQYXJzZXI6OkxlZ2FjeUhUTUxEb2N1bWVudFBhcnNlcihIVE1MVmlld1NvdXJjZURvY3VtZW50
KiBkb2N1bWVudCkKLSAgICA6IFNjcmlwdGFibGVEb2N1bWVudFBhcnNlcihkb2N1bWVudCwgdHJ1
ZSkKLSAgICAsIG1fYnVmZmVyKDApCi0gICAgLCBtX3NjcmlwdENvZGUoMCkKLSAgICAsIG1fc2Ny
aXB0Q29kZVNpemUoMCkKLSAgICAsIG1fc2NyaXB0Q29kZUNhcGFjaXR5KDApCi0gICAgLCBtX3Nj
cmlwdENvZGVSZXN5bmMoMCkKLSAgICAsIG1fZXhlY3V0aW5nU2NyaXB0KDApCi0gICAgLCBtX3Jl
cXVlc3RpbmdTY3JpcHQoZmFsc2UpCi0gICAgLCBtX2hhc1NjcmlwdHNXYWl0aW5nRm9yU3R5bGVz
aGVldHMoZmFsc2UpCi0gICAgLCBtX3RpbWVyKHRoaXMsICZMZWdhY3lIVE1MRG9jdW1lbnRQYXJz
ZXI6OnRpbWVyRmlyZWQpCi0gICAgLCBtX2V4dGVybmFsU2NyaXB0c1RpbWVyKHRoaXMsICZMZWdh
Y3lIVE1MRG9jdW1lbnRQYXJzZXI6OmV4ZWN1dGVFeHRlcm5hbFNjcmlwdHNUaW1lckZpcmVkKQot
ICAgICwgbV9pbldyaXRlKGZhbHNlKQotICAgICwgbV9mcmFnbWVudChmYWxzZSkKLSAgICAsIG1f
c2NyaXB0aW5nUGVybWlzc2lvbihGcmFnbWVudFNjcmlwdGluZ0FsbG93ZWQpCi17Ci0gICAgYmVn
aW4oKTsKLX0KLQotTGVnYWN5SFRNTERvY3VtZW50UGFyc2VyOjpMZWdhY3lIVE1MRG9jdW1lbnRQ
YXJzZXIoRG9jdW1lbnRGcmFnbWVudCogZnJhZywgRnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9u
IHNjcmlwdGluZ1Blcm1pc3Npb24pCi0gICAgOiBTY3JpcHRhYmxlRG9jdW1lbnRQYXJzZXIoZnJh
Zy0+ZG9jdW1lbnQoKSkKLSAgICAsIG1fYnVmZmVyKDApCi0gICAgLCBtX3NjcmlwdENvZGUoMCkK
LSAgICAsIG1fc2NyaXB0Q29kZVNpemUoMCkKLSAgICAsIG1fc2NyaXB0Q29kZUNhcGFjaXR5KDAp
Ci0gICAgLCBtX3NjcmlwdENvZGVSZXN5bmMoMCkKLSAgICAsIG1fZXhlY3V0aW5nU2NyaXB0KDAp
Ci0gICAgLCBtX3JlcXVlc3RpbmdTY3JpcHQoZmFsc2UpCi0gICAgLCBtX2hhc1NjcmlwdHNXYWl0
aW5nRm9yU3R5bGVzaGVldHMoZmFsc2UpCi0gICAgLCBtX3RpbWVyKHRoaXMsICZMZWdhY3lIVE1M
RG9jdW1lbnRQYXJzZXI6OnRpbWVyRmlyZWQpCi0gICAgLCBtX2V4dGVybmFsU2NyaXB0c1RpbWVy
KHRoaXMsICZMZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXI6OmV4ZWN1dGVFeHRlcm5hbFNjcmlwdHNU
aW1lckZpcmVkKQotICAgICwgbV90cmVlQnVpbGRlcihuZXcgTGVnYWN5SFRNTFRyZWVCdWlsZGVy
KGZyYWcsIHNjcmlwdGluZ1Blcm1pc3Npb24pKQotICAgICwgbV9pbldyaXRlKGZhbHNlKQotICAg
ICwgbV9mcmFnbWVudCh0cnVlKQotICAgICwgbV9zY3JpcHRpbmdQZXJtaXNzaW9uKHNjcmlwdGlu
Z1Blcm1pc3Npb24pCi17Ci0gICAgYmVnaW4oKTsKLX0KLQotdm9pZCBMZWdhY3lIVE1MRG9jdW1l
bnRQYXJzZXI6OnJlc2V0KCkKLXsKLSAgICBBU1NFUlQobV9leGVjdXRpbmdTY3JpcHQgPT0gMCk7
Ci0KLSAgICB3aGlsZSAoIW1fcGVuZGluZ1NjcmlwdHMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIENh
Y2hlZFJlc291cmNlSGFuZGxlPENhY2hlZFNjcmlwdD4gY3MgPSBtX3BlbmRpbmdTY3JpcHRzLnRh
a2VGaXJzdCgpOwotICAgICAgICBBU1NFUlQoY2FjaGUoKS0+ZGlzYWJsZWQoKSB8fCBjcy0+YWNj
ZXNzQ291bnQoKSA+IDApOwotICAgICAgICBjcy0+cmVtb3ZlQ2xpZW50KHRoaXMpOwotICAgIH0K
LQotICAgIGZhc3RGcmVlKG1fYnVmZmVyKTsKLSAgICBtX2J1ZmZlciA9IG1fZGVzdCA9IDA7Ci0g
ICAgbV9idWZmZXJTaXplID0gMDsKLQotICAgIGZhc3RGcmVlKG1fc2NyaXB0Q29kZSk7Ci0gICAg
bV9zY3JpcHRDb2RlID0gMDsKLSAgICBtX3NjcmlwdENvZGVTaXplID0gbV9zY3JpcHRDb2RlQ2Fw
YWNpdHkgPSBtX3NjcmlwdENvZGVSZXN5bmMgPSAwOwotCi0gICAgbV90aW1lci5zdG9wKCk7Ci0g
ICAgbV9leHRlcm5hbFNjcmlwdHNUaW1lci5zdG9wKCk7Ci0KLSAgICBtX3N0YXRlLnNldEFsbG93
WWllbGQoZmFsc2UpOwotICAgIG1fc3RhdGUuc2V0Rm9yY2VTeW5jaHJvbm91cyhmYWxzZSk7Ci0K
LSAgICBtX2N1cnJlbnRUb2tlbi5yZXNldCgpOwotICAgIG1fZG9jdHlwZVRva2VuLnJlc2V0KCk7
Ci0gICAgbV9kb2N0eXBlU2VhcmNoQ291bnQgPSAwOwotICAgIG1fZG9jdHlwZVNlY29uZGFyeVNl
YXJjaENvdW50ID0gMDsKLSAgICBtX2hhc1NjcmlwdHNXYWl0aW5nRm9yU3R5bGVzaGVldHMgPSBm
YWxzZTsKLX0KLQotdm9pZCBMZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXI6OmJlZ2luKCkKLXsKLSAg
ICBtX2V4ZWN1dGluZ1NjcmlwdCA9IDA7Ci0gICAgbV9yZXF1ZXN0aW5nU2NyaXB0ID0gZmFsc2U7
Ci0gICAgbV9oYXNTY3JpcHRzV2FpdGluZ0ZvclN0eWxlc2hlZXRzID0gZmFsc2U7Ci0gICAgbV9z
dGF0ZS5zZXRMb2FkaW5nRXh0U2NyaXB0KGZhbHNlKTsKLSAgICByZXNldCgpOwotICAgIG1fYnVm
ZmVyU2l6ZSA9IDI1NDsKLSAgICBtX2J1ZmZlciA9IHN0YXRpY19jYXN0PFVDaGFyKj4oZmFzdE1h
bGxvYyhzaXplb2YoVUNoYXIpICogMjU0KSk7Ci0gICAgbV9kZXN0ID0gbV9idWZmZXI7Ci0gICAg
dHF1b3RlID0gTm9RdW90ZTsKLSAgICBzZWFyY2hDb3VudCA9IDA7Ci0gICAgbV9zdGF0ZS5zZXRF
bnRpdHlTdGF0ZShOb0VudGl0eSk7Ci0gICAgbV9zY3JpcHRUYWdTcmNBdHRyVmFsdWUgPSBTdHJp
bmcoKTsKLSAgICBtX3BlbmRpbmdTcmMuY2xlYXIoKTsKLSAgICBtX2N1cnJlbnRQcmVwZW5kaW5n
U3JjID0gMDsKLSAgICBtX25vTW9yZURhdGEgPSBmYWxzZTsKLSAgICBtX2Jyb2tlbkNvbW1lbnRz
ID0gZmFsc2U7Ci0gICAgbV9icm9rZW5TZXJ2ZXIgPSBmYWxzZTsKLSAgICBtX2xpbmVOdW1iZXIg
PSAwOwotICAgIG1fY3VycmVudFNjcmlwdFRhZ1N0YXJ0TGluZU51bWJlciA9IDA7Ci0gICAgbV9j
dXJyZW50VGFnU3RhcnRMaW5lTnVtYmVyID0gMDsKLSAgICBtX3N0YXRlLnNldEZvcmNlU3luY2hy
b25vdXMoZmFsc2UpOwotCi0gICAgUGFnZSogcGFnZSA9IGRvY3VtZW50KCktPnBhZ2UoKTsKLSAg
ICBpZiAocGFnZSAmJiBwYWdlLT5oYXNDdXN0b21IVE1MVG9rZW5pemVyVGltZURlbGF5KCkpCi0g
ICAgICAgIG1fdG9rZW5pemVyVGltZURlbGF5ID0gcGFnZS0+Y3VzdG9tSFRNTFRva2VuaXplclRp
bWVEZWxheSgpOwotICAgIGVsc2UKLSAgICAgICAgbV90b2tlbml6ZXJUaW1lRGVsYXkgPSBkZWZh
dWx0VG9rZW5pemVyVGltZURlbGF5OwotCi0gICAgaWYgKHBhZ2UgJiYgcGFnZS0+aGFzQ3VzdG9t
SFRNTFRva2VuaXplckNodW5rU2l6ZSgpKQotICAgICAgICBtX3Rva2VuaXplckNodW5rU2l6ZSA9
IHBhZ2UtPmN1c3RvbUhUTUxUb2tlbml6ZXJDaHVua1NpemUoKTsKLSAgICBlbHNlCi0gICAgICAg
IG1fdG9rZW5pemVyQ2h1bmtTaXplID0gZGVmYXVsdFRva2VuaXplckNodW5rU2l6ZTsKLX0KLQot
dm9pZCBMZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXI6OnNldEZvcmNlU3luY2hyb25vdXMoYm9vbCBm
b3JjZSkKLXsKLSAgICBtX3N0YXRlLnNldEZvcmNlU3luY2hyb25vdXMoZm9yY2UpOwotfQotCi1M
ZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXI6OlN0YXRlIExlZ2FjeUhUTUxEb2N1bWVudFBhcnNlcjo6
cHJvY2Vzc0xpc3RpbmcoU2VnbWVudGVkU3RyaW5nIGxpc3QsIFN0YXRlIHN0YXRlKQotewotICAg
IC8vIFRoaXMgZnVuY3Rpb24gYWRkcyB0aGUgbGlzdGluZyAnbGlzdCcgYXMKLSAgICAvLyBwcmVm
b3JtYXR0ZWQgdGV4dC10b2tlbnMgdG8gdGhlIHRva2VuLWNvbGxlY3Rpb24KLSAgICB3aGlsZSAo
IWxpc3QuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGlmIChzdGF0ZS5za2lwTEYoKSkgewotICAgICAg
ICAgICAgc3RhdGUuc2V0U2tpcExGKGZhbHNlKTsKLSAgICAgICAgICAgIGlmICgqbGlzdCA9PSAn
XG4nKSB7Ci0gICAgICAgICAgICAgICAgbGlzdC5hZHZhbmNlKCk7Ci0gICAgICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBjaGVja0J1ZmZl
cigpOwotCi0gICAgICAgIGlmICgqbGlzdCA9PSAnXG4nIHx8ICpsaXN0ID09ICdccicpIHsKLSAg
ICAgICAgICAgIGlmIChzdGF0ZS5kaXNjYXJkTEYoKSkKLSAgICAgICAgICAgICAgICAvLyBJZ25v
cmUgdGhpcyBMRgotICAgICAgICAgICAgICAgIHN0YXRlLnNldERpc2NhcmRMRihmYWxzZSk7IC8v
IFdlIGhhdmUgZGlzY2FyZGVkIDEgTEYKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAg
ICAqbV9kZXN0KysgPSAnXG4nOwotCi0gICAgICAgICAgICAvKiBDaGVjayBmb3IgTVMtRE9TIENS
TEYgc2VxdWVuY2UgKi8KLSAgICAgICAgICAgIGlmICgqbGlzdCA9PSAnXHInKQotICAgICAgICAg
ICAgICAgIHN0YXRlLnNldFNraXBMRih0cnVlKTsKLQotICAgICAgICAgICAgbGlzdC5hZHZhbmNl
KCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBzdGF0ZS5zZXREaXNjYXJkTEYoZmFs
c2UpOwotICAgICAgICAgICAgKm1fZGVzdCsrID0gKmxpc3Q7Ci0gICAgICAgICAgICBsaXN0LmFk
dmFuY2UoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBzdGF0ZTsKLX0KLQotTGVn
YWN5SFRNTERvY3VtZW50UGFyc2VyOjpTdGF0ZSBMZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXI6OnBh
cnNlTm9uSFRNTFRleHQoU2VnbWVudGVkU3RyaW5nJiBzcmMsIFN0YXRlIHN0YXRlKQotewotICAg
IEFTU0VSVChzdGF0ZS5pblRleHRBcmVhKCkgfHwgc3RhdGUuaW5UaXRsZSgpIHx8IHN0YXRlLmlu
SUZyYW1lKCkgfHwgIXN0YXRlLmhhc0VudGl0eVN0YXRlKCkpOwotICAgIEFTU0VSVCghc3RhdGUu
aGFzVGFnU3RhdGUoKSk7Ci0gICAgQVNTRVJUKHN0YXRlLmluWG1wKCkgKyBzdGF0ZS5pblRleHRB
cmVhKCkgKyBzdGF0ZS5pblRpdGxlKCkgKyBzdGF0ZS5pblN0eWxlKCkgKyBzdGF0ZS5pblNjcmlw
dCgpICsgc3RhdGUuaW5JRnJhbWUoKSA9PSAxKTsKLSAgICBpZiAoc3RhdGUuaW5TY3JpcHQoKSAm
JiAhbV9jdXJyZW50U2NyaXB0VGFnU3RhcnRMaW5lTnVtYmVyKQotICAgICAgICBtX2N1cnJlbnRT
Y3JpcHRUYWdTdGFydExpbmVOdW1iZXIgPSBtX2xpbmVOdW1iZXI7Ci0KLSAgICBpZiAoc3RhdGUu
aW5Db21tZW50KCkpCi0gICAgICAgIHN0YXRlID0gcGFyc2VDb21tZW50KHNyYywgc3RhdGUpOwot
Ci0gICAgaW50IGxhc3REZWNvZGVkRW50aXR5UG9zaXRpb24gPSAtMTsKLSAgICB3aGlsZSAoIXNy
Yy5pc0VtcHR5KCkpIHsKLSAgICAgICAgY2hlY2tTY3JpcHRCdWZmZXIoKTsKLSAgICAgICAgVUNo
YXIgY2ggPSAqc3JjOwotCi0gICAgICAgIGlmICghbV9zY3JpcHRDb2RlUmVzeW5jICYmICFtX2Jy
b2tlbkNvbW1lbnRzICYmCi0gICAgICAgICAgICAhc3RhdGUuaW5YbXAoKSAmJiBjaCA9PSAnLScg
JiYgbV9zY3JpcHRDb2RlU2l6ZSA+PSAzICYmICFzcmMuZXNjYXBlZCgpICYmCi0gICAgICAgICAg
ICBtX3NjcmlwdENvZGVbbV9zY3JpcHRDb2RlU2l6ZSAtIDNdID09ICc8JyAmJiBtX3NjcmlwdENv
ZGVbbV9zY3JpcHRDb2RlU2l6ZSAtIDJdID09ICchJyAmJiBtX3NjcmlwdENvZGVbbV9zY3JpcHRD
b2RlU2l6ZSAtIDFdID09ICctJyAmJgotICAgICAgICAgICAgKGxhc3REZWNvZGVkRW50aXR5UG9z
aXRpb24gPCBtX3NjcmlwdENvZGVTaXplIC0gMykpIHsKLSAgICAgICAgICAgIHN0YXRlLnNldElu
Q29tbWVudCh0cnVlKTsKLSAgICAgICAgICAgIHN0YXRlID0gcGFyc2VDb21tZW50KHNyYywgc3Rh
dGUpOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG1fc2Ny
aXB0Q29kZVJlc3luYyAmJiAhdHF1b3RlICYmIGNoID09ICc+JykgewotICAgICAgICAgICAgc3Jj
LmFkdmFuY2VQYXN0Tm9uTmV3bGluZSgpOwotICAgICAgICAgICAgbV9zY3JpcHRDb2RlU2l6ZSA9
IG1fc2NyaXB0Q29kZVJlc3luYyAtIDE7Ci0gICAgICAgICAgICBtX3NjcmlwdENvZGVSZXN5bmMg
PSAwOwotICAgICAgICAgICAgbV9zY3JpcHRDb2RlW21fc2NyaXB0Q29kZVNpemVdID0gbV9zY3Jp
cHRDb2RlW21fc2NyaXB0Q29kZVNpemUgKyAxXSA9IDA7Ci0gICAgICAgICAgICBpZiAoc3RhdGUu
aW5TY3JpcHQoKSkKLSAgICAgICAgICAgICAgICBzdGF0ZSA9IHNjcmlwdEhhbmRsZXIoc3RhdGUp
OwotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgc3RhdGUgPSBwcm9jZXNzTGlz
dGluZyhTZWdtZW50ZWRTdHJpbmcoU3RyaW5nKG1fc2NyaXB0Q29kZSwgbV9zY3JpcHRDb2RlU2l6
ZSkpLCBzdGF0ZSk7Ci0gICAgICAgICAgICAgICAgcHJvY2Vzc1Rva2VuKCk7Ci0gICAgICAgICAg
ICAgICAgaWYgKHN0YXRlLmluU3R5bGUoKSkgewotICAgICAgICAgICAgICAgICAgICBtX2N1cnJl
bnRUb2tlbi50YWdOYW1lID0gc3R5bGVUYWcubG9jYWxOYW1lKCk7Ci0gICAgICAgICAgICAgICAg
ICAgIG1fY3VycmVudFRva2VuLmJlZ2luVGFnID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgfSBl
bHNlIGlmIChzdGF0ZS5pblRleHRBcmVhKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgbV9jdXJy
ZW50VG9rZW4udGFnTmFtZSA9IHRleHRhcmVhVGFnLmxvY2FsTmFtZSgpOwotICAgICAgICAgICAg
ICAgICAgICBtX2N1cnJlbnRUb2tlbi5iZWdpblRhZyA9IGZhbHNlOwotICAgICAgICAgICAgICAg
IH0gZWxzZSBpZiAoc3RhdGUuaW5UaXRsZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1fY3Vy
cmVudFRva2VuLnRhZ05hbWUgPSB0aXRsZVRhZy5sb2NhbE5hbWUoKTsKLSAgICAgICAgICAgICAg
ICAgICAgbV9jdXJyZW50VG9rZW4uYmVnaW5UYWcgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICB9
IGVsc2UgaWYgKHN0YXRlLmluWG1wKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgbV9jdXJyZW50
VG9rZW4udGFnTmFtZSA9IHhtcFRhZy5sb2NhbE5hbWUoKTsKLSAgICAgICAgICAgICAgICAgICAg
bV9jdXJyZW50VG9rZW4uYmVnaW5UYWcgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICB9IGVsc2Ug
aWYgKHN0YXRlLmluSUZyYW1lKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgbV9jdXJyZW50VG9r
ZW4udGFnTmFtZSA9IGlmcmFtZVRhZy5sb2NhbE5hbWUoKTsKLSAgICAgICAgICAgICAgICAgICAg
bV9jdXJyZW50VG9rZW4uYmVnaW5UYWcgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgcHJvY2Vzc1Rva2VuKCk7Ci0gICAgICAgICAgICAgICAgc3RhdGUuc2V0SW5T
dHlsZShmYWxzZSk7Ci0gICAgICAgICAgICAgICAgc3RhdGUuc2V0SW5TY3JpcHQoZmFsc2UpOwot
ICAgICAgICAgICAgICAgIHN0YXRlLnNldEluVGV4dEFyZWEoZmFsc2UpOwotICAgICAgICAgICAg
ICAgIHN0YXRlLnNldEluVGl0bGUoZmFsc2UpOwotICAgICAgICAgICAgICAgIHN0YXRlLnNldElu
WG1wKGZhbHNlKTsKLSAgICAgICAgICAgICAgICBzdGF0ZS5zZXRJbklGcmFtZShmYWxzZSk7Ci0g
ICAgICAgICAgICAgICAgdHF1b3RlID0gTm9RdW90ZTsKLSAgICAgICAgICAgICAgICBtX3Njcmlw
dENvZGVTaXplID0gbV9zY3JpcHRDb2RlUmVzeW5jID0gMDsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIHJldHVybiBzdGF0ZTsKLSAgICAgICAgfQotICAgICAgICAvLyBwb3NzaWJsZSBlbmQg
b2YgdGFnbmFtZSwgbGV0cyBjaGVjay4KLSAgICAgICAgaWYgKCFtX3NjcmlwdENvZGVSZXN5bmMg
JiYgIXN0YXRlLmVzY2FwZWQoKSAmJiAhc3JjLmVzY2FwZWQoKSAmJiAoY2ggPT0gJz4nIHx8IGNo
ID09ICcvJyB8fCBpc0FTQ0lJU3BhY2UoY2gpKSAmJgotICAgICAgICAgICAgIG1fc2NyaXB0Q29k
ZVNpemUgPj0gbV9zZWFyY2hTdG9wcGVyTGVuZ3RoICYmCi0gICAgICAgICAgICAgdGFnTWF0Y2go
bV9zZWFyY2hTdG9wcGVyLCBtX3NjcmlwdENvZGUgKyBtX3NjcmlwdENvZGVTaXplIC0gbV9zZWFy
Y2hTdG9wcGVyTGVuZ3RoLCBtX3NlYXJjaFN0b3BwZXJMZW5ndGgpICYmCi0gICAgICAgICAgICAg
KGxhc3REZWNvZGVkRW50aXR5UG9zaXRpb24gPCBtX3NjcmlwdENvZGVTaXplIC0gbV9zZWFyY2hT
dG9wcGVyTGVuZ3RoKSkgewotICAgICAgICAgICAgbV9zY3JpcHRDb2RlUmVzeW5jID0gbV9zY3Jp
cHRDb2RlU2l6ZS1tX3NlYXJjaFN0b3BwZXJMZW5ndGgrMTsKLSAgICAgICAgICAgIHRxdW90ZSA9
IE5vUXVvdGU7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAgICAgICBpZiAo
bV9zY3JpcHRDb2RlUmVzeW5jICYmICFzdGF0ZS5lc2NhcGVkKCkpIHsKLSAgICAgICAgICAgIGlm
IChjaCA9PSAnXCInKQotICAgICAgICAgICAgICAgIHRxdW90ZSA9ICh0cXVvdGUgPT0gTm9RdW90
ZSkgPyBEb3VibGVRdW90ZSA6ICgodHF1b3RlID09IFNpbmdsZVF1b3RlKSA/IFNpbmdsZVF1b3Rl
IDogTm9RdW90ZSk7Ci0gICAgICAgICAgICBlbHNlIGlmIChjaCA9PSAnXCcnKQotICAgICAgICAg
ICAgICAgIHRxdW90ZSA9ICh0cXVvdGUgPT0gTm9RdW90ZSkgPyBTaW5nbGVRdW90ZSA6ICh0cXVv
dGUgPT0gRG91YmxlUXVvdGUpID8gRG91YmxlUXVvdGUgOiBOb1F1b3RlOwotICAgICAgICAgICAg
ZWxzZSBpZiAodHF1b3RlICE9IE5vUXVvdGUgJiYgKGNoID09ICdccicgfHwgY2ggPT0gJ1xuJykp
Ci0gICAgICAgICAgICAgICAgdHF1b3RlID0gTm9RdW90ZTsKLSAgICAgICAgfQotICAgICAgICBz
dGF0ZS5zZXRFc2NhcGVkKCFzdGF0ZS5lc2NhcGVkKCkgJiYgY2ggPT0gJ1xcJyk7Ci0gICAgICAg
IGlmICghbV9zY3JpcHRDb2RlUmVzeW5jICYmIChzdGF0ZS5pblRleHRBcmVhKCkgfHwgc3RhdGUu
aW5UaXRsZSgpIHx8IHN0YXRlLmluSUZyYW1lKCkpICYmICFzcmMuZXNjYXBlZCgpICYmIGNoID09
ICcmJykgewotICAgICAgICAgICAgVUNoYXIqIHNjcmlwdENvZGVEZXN0ID0gbV9zY3JpcHRDb2Rl
ICsgbV9zY3JpcHRDb2RlU2l6ZTsKLSAgICAgICAgICAgIHNyYy5hZHZhbmNlUGFzdE5vbk5ld2xp
bmUoKTsKLSAgICAgICAgICAgIHN0YXRlID0gcGFyc2VFbnRpdHkoc3JjLCBzY3JpcHRDb2RlRGVz
dCwgc3RhdGUsIG1fY0J1ZmZlclBvcywgdHJ1ZSwgZmFsc2UpOwotICAgICAgICAgICAgaWYgKHNj
cmlwdENvZGVEZXN0ID09IG1fc2NyaXB0Q29kZSArIG1fc2NyaXB0Q29kZVNpemUpCi0gICAgICAg
ICAgICAgICAgbGFzdERlY29kZWRFbnRpdHlQb3NpdGlvbiA9IG1fc2NyaXB0Q29kZVNpemU7Ci0g
ICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbV9zY3JpcHRDb2RlU2l6ZSA9IHNjcmlw
dENvZGVEZXN0IC0gbV9zY3JpcHRDb2RlOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
bV9zY3JpcHRDb2RlW21fc2NyaXB0Q29kZVNpemUrK10gPSBjaDsKLSAgICAgICAgICAgIHNyYy5h
ZHZhbmNlKG1fbGluZU51bWJlcik7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gc3Rh
dGU7Ci19Ci0KLUxlZ2FjeUhUTUxEb2N1bWVudFBhcnNlcjo6U3RhdGUgTGVnYWN5SFRNTERvY3Vt
ZW50UGFyc2VyOjpzY3JpcHRIYW5kbGVyKFN0YXRlIHN0YXRlKQotewotICAgIC8vIFdlIGFyZSBp
bnNpZGUgYSA8c2NyaXB0PgotICAgIGJvb2wgZG9TY3JpcHRFeGVjID0gZmFsc2U7Ci0gICAgaW50
IHN0YXJ0TGluZSA9IG1fY3VycmVudFNjcmlwdFRhZ1N0YXJ0TGluZU51bWJlciArIDE7IC8vIFNj
cmlwdCBsaW5lIG51bWJlcnMgYXJlIDEgYmFzZWQsIEhUTUxUb2tlbnppZXIgbGluZSBudW1iZXJz
IGFyZSAwIGJhc2VkCi0KLSAgICAvLyBSZXNldCBtX2N1cnJlbnRTY3JpcHRUYWdTdGFydExpbmVO
dW1iZXIgdG8gaW5kaWNhdGUgdGhhdCB3ZSd2ZSBmaW5pc2hlZCBwYXJzaW5nIHRoZSBjdXJyZW50
IHNjcmlwdCBlbGVtZW50Ci0gICAgbV9jdXJyZW50U2NyaXB0VGFnU3RhcnRMaW5lTnVtYmVyID0g
MDsKLQotICAgIC8vIChCdWd6aWxsYSAzODM3KSBTY3JpcHRzIGZvbGxvd2luZyBhIGZyYW1lc2V0
IGVsZW1lbnQgc2hvdWxkIG5vdCBleGVjdXRlIG9yLAotICAgIC8vIGluIHRoZSBjYXNlIG9mIGV4
dGVybiBzY3JpcHRzLCBldmVuIGxvYWQuCi0gICAgYm9vbCBmb2xsb3dpbmdGcmFtZXNldCA9IChk
b2N1bWVudCgpLT5ib2R5KCkgJiYgZG9jdW1lbnQoKS0+Ym9keSgpLT5oYXNUYWdOYW1lKGZyYW1l
c2V0VGFnKSk7Ci0KLSAgICBDYWNoZWRTY3JpcHQqIGNzID0gMDsKLSAgICAvLyBkb24ndCBsb2Fk
IGV4dGVybmFsIHNjcmlwdHMgZm9yIHN0YW5kYWxvbmUgZG9jdW1lbnRzIChmb3Igbm93KQotICAg
IGlmICghaW5WaWV3U291cmNlTW9kZSgpKSB7Ci0gICAgICAgIGlmICghbV9zY3JpcHRUYWdTcmNB
dHRyVmFsdWUuaXNFbXB0eSgpICYmIGRvY3VtZW50KCktPmZyYW1lKCkpIHsKLSAgICAgICAgICAg
IC8vIGZvcmdldCB3aGF0IHdlIGp1c3QgZ290OyBsb2FkIGZyb20gc3JjIHVybCBpbnN0ZWFkCi0g
ICAgICAgICAgICBpZiAoIW1fdHJlZUJ1aWxkZXItPnNraXBNb2RlKCkgJiYgIWZvbGxvd2luZ0Zy
YW1lc2V0KSB7Ci0gICAgICAgICAgICAgICAgLy8gVGhlIHBhcnNlciBtaWdodCBoYXZlIGJlZW4g
c3RvcHBlZCBieSBmb3IgZXhhbXBsZSBhIHdpbmRvdy5jbG9zZSBjYWxsIGluIGFuIGVhcmxpZXIg
c2NyaXB0LgotICAgICAgICAgICAgICAgIC8vIElmIHNvLCB3ZSBkb24ndCB3YW50IHRvIGxvYWQg
c2NyaXB0cy4KLSAgICAgICAgICAgICAgICBpZiAoIW1fcGFyc2VyU3RvcHBlZCAmJiBtX3Njcmlw
dE5vZGUtPmRpc3BhdGNoQmVmb3JlTG9hZEV2ZW50KG1fc2NyaXB0VGFnU3JjQXR0clZhbHVlKSAm
JgotICAgICAgICAgICAgICAgICAgICAoY3MgPSBkb2N1bWVudCgpLT5kb2NMb2FkZXIoKS0+cmVx
dWVzdFNjcmlwdChtX3NjcmlwdFRhZ1NyY0F0dHJWYWx1ZSwgbV9zY3JpcHRUYWdDaGFyc2V0QXR0
clZhbHVlKSkpCi0gICAgICAgICAgICAgICAgICAgIG1fcGVuZGluZ1NjcmlwdHMuYXBwZW5kKGNz
KTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIG1fc2NyaXB0Tm9k
ZSA9IDA7Ci0gICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICBtX3NjcmlwdE5vZGUg
PSAwOwotICAgICAgICAgICAgbV9zY3JpcHRUYWdTcmNBdHRyVmFsdWUgPSBTdHJpbmcoKTsKLSAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIFBhcnNlIG1fc2NyaXB0Q29kZSBjb250YWlu
aW5nIDxzY3JpcHQ+IGluZm8KLSAgICAgICAgICAgIGRvU2NyaXB0RXhlYyA9IG1fc2NyaXB0Tm9k
ZS0+c2hvdWxkRXhlY3V0ZUFzSmF2YVNjcmlwdCgpOwotI2lmIEVOQUJMRShYSFRNTE1QKQotICAg
ICAgICAgICAgaWYgKCFkb1NjcmlwdEV4ZWMpCi0gICAgICAgICAgICAgICAgZG9jdW1lbnQoKS0+
c2V0U2hvdWxkUHJvY2Vzc05vc2NyaXB0RWxlbWVudCh0cnVlKTsKLSNlbmRpZgotICAgICAgICAg
ICAgbV9zY3JpcHROb2RlID0gMDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHN0YXRlID0gcHJv
Y2Vzc0xpc3RpbmcoU2VnbWVudGVkU3RyaW5nKFN0cmluZyhtX3NjcmlwdENvZGUsIG1fc2NyaXB0
Q29kZVNpemUpKSwgc3RhdGUpOwotICAgIFJlZlB0cjxOb2RlPiBub2RlID0gcHJvY2Vzc1Rva2Vu
KCk7Ci0KLSAgICBpZiAobm9kZSAmJiBtX3NjcmlwdGluZ1Blcm1pc3Npb24gPT0gRnJhZ21lbnRT
Y3JpcHRpbmdOb3RBbGxvd2VkKSB7Ci0gICAgICAgIEV4Y2VwdGlvbkNvZGUgZWM7Ci0gICAgICAg
IG5vZGUtPnJlbW92ZShlYyk7Ci0gICAgICAgIG5vZGUgPSAwOwotICAgIH0KLQotICAgIFN0cmlu
ZyBzY3JpcHRTdHJpbmcgPSBub2RlID8gbm9kZS0+dGV4dENvbnRlbnQoKSA6ICIiOwotICAgIG1f
Y3VycmVudFRva2VuLnRhZ05hbWUgPSBzY3JpcHRUYWcubG9jYWxOYW1lKCk7Ci0gICAgbV9jdXJy
ZW50VG9rZW4uYmVnaW5UYWcgPSBmYWxzZTsKLSAgICBwcm9jZXNzVG9rZW4oKTsKLQotICAgIHN0
YXRlLnNldEluU2NyaXB0KGZhbHNlKTsKLSAgICBtX3NjcmlwdENvZGVTaXplID0gbV9zY3JpcHRD
b2RlUmVzeW5jID0gMDsKLQotICAgIC8vIEZJWE1FOiBUaGUgc2NyaXB0IHNob3VsZCBiZSBzeW50
YXggaGlnaGxpZ2h0ZWQuCi0gICAgaWYgKGluVmlld1NvdXJjZU1vZGUoKSkKLSAgICAgICAgcmV0
dXJuIHN0YXRlOwotCi0gICAgU2VnbWVudGVkU3RyaW5nKiBzYXZlZFByZXBlbmRpbmdTcmMgPSBt
X2N1cnJlbnRQcmVwZW5kaW5nU3JjOwotICAgIFNlZ21lbnRlZFN0cmluZyBwcmVwZW5kaW5nU3Jj
OwotICAgIG1fY3VycmVudFByZXBlbmRpbmdTcmMgPSAmcHJlcGVuZGluZ1NyYzsKLQotICAgIGlm
ICghbV90cmVlQnVpbGRlci0+c2tpcE1vZGUoKSAmJiAhZm9sbG93aW5nRnJhbWVzZXQpIHsKLSAg
ICAgICAgaWYgKGNzKSB7Ci0gICAgICAgICAgICBpZiAoc2F2ZWRQcmVwZW5kaW5nU3JjKQotICAg
ICAgICAgICAgICAgIHNhdmVkUHJlcGVuZGluZ1NyYy0+YXBwZW5kKG1fc3JjKTsKLSAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICBtX3BlbmRpbmdTcmMucHJlcGVuZChtX3NyYyk7Ci0g
ICAgICAgICAgICBzZXRTcmMoU2VnbWVudGVkU3RyaW5nKCkpOwotCi0gICAgICAgICAgICAvLyB0
aGUgcmVmKCkgY2FsbCBiZWxvdyBtYXkgY2FsbCBub3RpZnlGaW5pc2hlZCBpZiB0aGUgc2NyaXB0
IGlzIGFscmVhZHkgaW4gY2FjaGUsCi0gICAgICAgICAgICAvLyBhbmQgdGhhdCBtdWNrcyB3aXRo
IHRoZSBzdGF0ZSBkaXJlY3RseSwgc28gd2UgbXVzdCB3cml0ZSBpdCBiYWNrIHRvIHRoZSBvYmpl
Y3QuCi0gICAgICAgICAgICBtX3N0YXRlID0gc3RhdGU7Ci0gICAgICAgICAgICBib29sIHNhdmVk
UmVxdWVzdGluZ1NjcmlwdCA9IG1fcmVxdWVzdGluZ1NjcmlwdDsKLSAgICAgICAgICAgIG1fcmVx
dWVzdGluZ1NjcmlwdCA9IHRydWU7Ci0gICAgICAgICAgICBjcy0+YWRkQ2xpZW50KHRoaXMpOwot
ICAgICAgICAgICAgbV9yZXF1ZXN0aW5nU2NyaXB0ID0gc2F2ZWRSZXF1ZXN0aW5nU2NyaXB0Owot
ICAgICAgICAgICAgc3RhdGUgPSBtX3N0YXRlOwotICAgICAgICAgICAgLy8gd2lsbCBiZSAwIGlm
IHNjcmlwdCB3YXMgYWxyZWFkeSBsb2FkZWQgYW5kIHJlZigpIGV4ZWN1dGVkIGl0Ci0gICAgICAg
ICAgICBpZiAoIW1fcGVuZGluZ1NjcmlwdHMuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIHN0
YXRlLnNldExvYWRpbmdFeHRTY3JpcHQodHJ1ZSk7Ci0gICAgICAgIH0gZWxzZSBpZiAoIW1fZnJh
Z21lbnQgJiYgZG9TY3JpcHRFeGVjKSB7Ci0gICAgICAgICAgICBpZiAoIW1fZXhlY3V0aW5nU2Ny
aXB0KQotICAgICAgICAgICAgICAgIG1fcGVuZGluZ1NyYy5wcmVwZW5kKG1fc3JjKTsKLSAgICAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBwcmVwZW5kaW5nU3JjID0gbV9zcmM7Ci0gICAg
ICAgICAgICBzZXRTcmMoU2VnbWVudGVkU3RyaW5nKCkpOwotICAgICAgICAgICAgc3RhdGUgPSBz
Y3JpcHRFeGVjdXRpb24oU2NyaXB0U291cmNlQ29kZShzY3JpcHRTdHJpbmcsIGRvY3VtZW50KCkt
PmZyYW1lKCkgPyBkb2N1bWVudCgpLT5mcmFtZSgpLT5kb2N1bWVudCgpLT51cmwoKSA6IEtVUkwo
KSwgc3RhcnRMaW5lKSwgc3RhdGUpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKCFtX2V4
ZWN1dGluZ1NjcmlwdCAmJiAhc3RhdGUubG9hZGluZ0V4dFNjcmlwdCgpKSB7Ci0gICAgICAgIG1f
c3JjLmFwcGVuZChtX3BlbmRpbmdTcmMpOwotICAgICAgICBtX3BlbmRpbmdTcmMuY2xlYXIoKTsK
LSAgICB9IGVsc2UgaWYgKCFwcmVwZW5kaW5nU3JjLmlzRW1wdHkoKSkgewotICAgICAgICAvLyBy
ZXN0b3JlIGZpcnN0IHNvIHRoYXQgdGhlIHdyaXRlIGFwcGVuZHMgaW4gdGhlIHJpZ2h0IHBsYWNl
Ci0gICAgICAgIC8vIChkb2VzIG5vdCBodXJ0IHRvIGRvIGl0IGFnYWluIGJlbG93KQotICAgICAg
ICBtX2N1cnJlbnRQcmVwZW5kaW5nU3JjID0gc2F2ZWRQcmVwZW5kaW5nU3JjOwotCi0gICAgICAg
IC8vIHdlIG5lZWQgdG8gZG8gdGhpcyBzbGlnaHRseSBtb2RpZmllZCBiaXQgb2Ygb25lIG9mIHRo
ZSB3cml0ZSgpIGNhc2VzCi0gICAgICAgIC8vIGJlY2F1c2Ugd2Ugd2FudCB0byBwcmVwZW5kIHRv
IG1fcGVuZGluZ1NyYyByYXRoZXIgdGhhbiBhcHBlbmRpbmcKLSAgICAgICAgLy8gaWYgdGhlcmUn
cyBubyBwcmV2aW91cyBwcmVwZW5kaW5nU3JjCi0gICAgICAgIGlmICghbV9wZW5kaW5nU2NyaXB0
cy5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIGlmIChtX2N1cnJlbnRQcmVwZW5kaW5nU3JjKQot
ICAgICAgICAgICAgICAgIG1fY3VycmVudFByZXBlbmRpbmdTcmMtPmFwcGVuZChwcmVwZW5kaW5n
U3JjKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBtX3BlbmRpbmdTcmMucHJl
cGVuZChwcmVwZW5kaW5nU3JjKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG1fc3Rh
dGUgPSBzdGF0ZTsKLSAgICAgICAgICAgIHdyaXRlKHByZXBlbmRpbmdTcmMsIGZhbHNlKTsKLSAg
ICAgICAgICAgIHN0YXRlID0gbV9zdGF0ZTsKLSAgICAgICAgfQotICAgIH0KLQotI2lmIFBSRUxP
QURfU0NBTk5FUl9FTkFCTEVECi0gICAgaWYgKCFtX3BlbmRpbmdTY3JpcHRzLmlzRW1wdHkoKSAm
JiAhbV9leGVjdXRpbmdTY3JpcHQpIHsKLSAgICAgICAgaWYgKCFtX3ByZWxvYWRTY2FubmVyKQot
ICAgICAgICAgICAgbV9wcmVsb2FkU2Nhbm5lci5zZXQobmV3IExlZ2FjeVByZWxvYWRTY2FubmVy
KGRvY3VtZW50KCkpKTsKLSAgICAgICAgaWYgKCFtX3ByZWxvYWRTY2FubmVyLT5pblByb2dyZXNz
KCkpIHsKLSAgICAgICAgICAgIG1fcHJlbG9hZFNjYW5uZXItPmJlZ2luKCk7Ci0gICAgICAgICAg
ICBtX3ByZWxvYWRTY2FubmVyLT53cml0ZShtX3BlbmRpbmdTcmMpOwotICAgICAgICB9Ci0gICAg
fQotI2VuZGlmCi0gICAgbV9jdXJyZW50UHJlcGVuZGluZ1NyYyA9IHNhdmVkUHJlcGVuZGluZ1Ny
YzsKLQotICAgIHJldHVybiBzdGF0ZTsKLX0KLQotTGVnYWN5SFRNTERvY3VtZW50UGFyc2VyOjpT
dGF0ZSBMZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXI6OnNjcmlwdEV4ZWN1dGlvbihjb25zdCBTY3Jp
cHRTb3VyY2VDb2RlJiBzb3VyY2VDb2RlLCBTdGF0ZSBzdGF0ZSkKLXsKLSAgICBpZiAobV9mcmFn
bWVudCB8fCAhZG9jdW1lbnQoKS0+ZnJhbWUoKSkKLSAgICAgICAgcmV0dXJuIHN0YXRlOwotICAg
IG1fZXhlY3V0aW5nU2NyaXB0Kys7Ci0KLSAgICBTZWdtZW50ZWRTdHJpbmcqIHNhdmVkUHJlcGVu
ZGluZ1NyYyA9IG1fY3VycmVudFByZXBlbmRpbmdTcmM7Ci0gICAgU2VnbWVudGVkU3RyaW5nIHBy
ZXBlbmRpbmdTcmM7Ci0gICAgbV9jdXJyZW50UHJlcGVuZGluZ1NyYyA9ICZwcmVwZW5kaW5nU3Jj
OwotCi0gICAgbV9zdGF0ZSA9IHN0YXRlOwotICAgIGRvY3VtZW50KCktPmZyYW1lKCktPnNjcmlw
dCgpLT5leGVjdXRlU2NyaXB0KHNvdXJjZUNvZGUpOwotICAgIHN0YXRlID0gbV9zdGF0ZTsKLQot
ICAgIHN0YXRlLnNldEFsbG93WWllbGQodHJ1ZSk7Ci0KLSAgICBtX2V4ZWN1dGluZ1NjcmlwdC0t
OwotCi0gICAgaWYgKCFtX2V4ZWN1dGluZ1NjcmlwdCAmJiAhc3RhdGUubG9hZGluZ0V4dFNjcmlw
dCgpKSB7Ci0gICAgICAgIG1fcGVuZGluZ1NyYy5wcmVwZW5kKHByZXBlbmRpbmdTcmMpOwotICAg
ICAgICBtX3NyYy5hcHBlbmQobV9wZW5kaW5nU3JjKTsKLSAgICAgICAgbV9wZW5kaW5nU3JjLmNs
ZWFyKCk7Ci0gICAgfSBlbHNlIGlmICghcHJlcGVuZGluZ1NyYy5pc0VtcHR5KCkpIHsKLSAgICAg
ICAgLy8gcmVzdG9yZSBmaXJzdCBzbyB0aGF0IHRoZSB3cml0ZSBhcHBlbmRzIGluIHRoZSByaWdo
dCBwbGFjZQotICAgICAgICAvLyAoZG9lcyBub3QgaHVydCB0byBkbyBpdCBhZ2FpbiBiZWxvdykK
LSAgICAgICAgbV9jdXJyZW50UHJlcGVuZGluZ1NyYyA9IHNhdmVkUHJlcGVuZGluZ1NyYzsKLQot
ICAgICAgICAvLyB3ZSBuZWVkIHRvIGRvIHRoaXMgc2xpZ2h0bHkgbW9kaWZpZWQgYml0IG9mIG9u
ZSBvZiB0aGUgd3JpdGUoKSBjYXNlcwotICAgICAgICAvLyBiZWNhdXNlIHdlIHdhbnQgdG8gcHJl
cGVuZCB0byBtX3BlbmRpbmdTcmMgcmF0aGVyIHRoYW4gYXBwZW5kaW5nCi0gICAgICAgIC8vIGlm
IHRoZXJlJ3Mgbm8gcHJldmlvdXMgcHJlcGVuZGluZ1NyYwotICAgICAgICBpZiAoIW1fcGVuZGlu
Z1NjcmlwdHMuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBpZiAobV9jdXJyZW50UHJlcGVuZGlu
Z1NyYykKLSAgICAgICAgICAgICAgICBtX2N1cnJlbnRQcmVwZW5kaW5nU3JjLT5hcHBlbmQocHJl
cGVuZGluZ1NyYyk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbV9wZW5kaW5n
U3JjLnByZXBlbmQocHJlcGVuZGluZ1NyYyk7Ci0KLSNpZiBQUkVMT0FEX1NDQU5ORVJfRU5BQkxF
RAotICAgICAgICAgICAgLy8gV2UgYXJlIHN0dWNrIHdhaXRpbmcgZm9yIGFub3RoZXIgc2NyaXB0
LiBMZXRzIGNoZWNrIHRoZSBzb3VyY2UgdGhhdAotICAgICAgICAgICAgLy8gd2FzIGp1c3QgZG9j
dW1lbnQud3JpdGUoKW4gZm9yIGFueXRoaW5nIHRvIGxvYWQuCi0gICAgICAgICAgICBMZWdhY3lQ
cmVsb2FkU2Nhbm5lciBkb2N1bWVudFdyaXRlUHJlbG9hZFNjYW5uZXIoZG9jdW1lbnQoKSk7Ci0g
ICAgICAgICAgICBkb2N1bWVudFdyaXRlUHJlbG9hZFNjYW5uZXIuYmVnaW4oKTsKLSAgICAgICAg
ICAgIGRvY3VtZW50V3JpdGVQcmVsb2FkU2Nhbm5lci53cml0ZShwcmVwZW5kaW5nU3JjKTsKLSAg
ICAgICAgICAgIGRvY3VtZW50V3JpdGVQcmVsb2FkU2Nhbm5lci5lbmQoKTsKLSNlbmRpZgotICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgbV9zdGF0ZSA9IHN0YXRlOwotICAgICAgICAgICAg
d3JpdGUocHJlcGVuZGluZ1NyYywgZmFsc2UpOwotICAgICAgICAgICAgc3RhdGUgPSBtX3N0YXRl
OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgbV9jdXJyZW50UHJlcGVuZGluZ1NyYyA9IHNhdmVk
UHJlcGVuZGluZ1NyYzsKLQotICAgIHJldHVybiBzdGF0ZTsKLX0KLQotTGVnYWN5SFRNTERvY3Vt
ZW50UGFyc2VyOjpTdGF0ZSBMZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXI6OnBhcnNlQ29tbWVudChT
ZWdtZW50ZWRTdHJpbmcmIHNyYywgU3RhdGUgc3RhdGUpCi17Ci0gICAgLy8gRklYTUU6IFdoeSBk
b2VzIHRoaXMgY29kZSBldmVuIHJ1biBmb3IgY29tbWVudHMgaW5zaWRlIDxzY3JpcHQ+IGFuZCA8
c3R5bGU+PyBUaGlzIHNlZW1zIGJvZ3VzLgotICAgIGNoZWNrU2NyaXB0QnVmZmVyKHNyYy5sZW5n
dGgoKSk7Ci0gICAgd2hpbGUgKCFzcmMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIFVDaGFyIGNoID0g
KnNyYzsKLSAgICAgICAgbV9zY3JpcHRDb2RlW21fc2NyaXB0Q29kZVNpemUrK10gPSBjaDsKLSAg
ICAgICAgaWYgKGNoID09ICc+JykgewotICAgICAgICAgICAgYm9vbCBoYW5kbGVCcm9rZW5Db21t
ZW50cyA9IG1fYnJva2VuQ29tbWVudHMgJiYgIShzdGF0ZS5pblNjcmlwdCgpIHx8IHN0YXRlLmlu
U3R5bGUoKSk7Ci0gICAgICAgICAgICBpbnQgZW5kQ2hhcnNDb3VudCA9IDE7IC8vIHN0YXJ0IG9m
ZiB3aXRoIG9uZSBmb3IgdGhlICc+JyBjaGFyYWN0ZXIKLSAgICAgICAgICAgIGlmIChtX3Njcmlw
dENvZGVTaXplID4gMiAmJiBtX3NjcmlwdENvZGVbbV9zY3JpcHRDb2RlU2l6ZS0zXSA9PSAnLScg
JiYgbV9zY3JpcHRDb2RlW21fc2NyaXB0Q29kZVNpemUtMl0gPT0gJy0nKSB7Ci0gICAgICAgICAg
ICAgICAgZW5kQ2hhcnNDb3VudCA9IDM7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKG1fc2NyaXB0
Q29kZVNpemUgPiAzICYmIG1fc2NyaXB0Q29kZVttX3NjcmlwdENvZGVTaXplLTRdID09ICctJyAm
JiBtX3NjcmlwdENvZGVbbV9zY3JpcHRDb2RlU2l6ZS0zXSA9PSAnLScgJiYKLSAgICAgICAgICAg
ICAgICBtX3NjcmlwdENvZGVbbV9zY3JpcHRDb2RlU2l6ZS0yXSA9PSAnIScpIHsKLSAgICAgICAg
ICAgICAgICAvLyBPdGhlciBicm93c2VycyB3aWxsIGFjY2VwdCAtLSE+IGFzIGEgY2xvc2UgY29t
bWVudCwgZXZlbiB0aG91Z2ggaXQncwotICAgICAgICAgICAgICAgIC8vIG5vdCB0ZWNobmljYWxs
eSB2YWxpZC4KLSAgICAgICAgICAgICAgICBlbmRDaGFyc0NvdW50ID0gNDsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGlmIChoYW5kbGVCcm9rZW5Db21tZW50cyB8fCBlbmRDaGFyc0NvdW50
ID4gMSkgewotICAgICAgICAgICAgICAgIHNyYy5hZHZhbmNlUGFzdE5vbk5ld2xpbmUoKTsKLSAg
ICAgICAgICAgICAgICBpZiAoIShzdGF0ZS5pblRpdGxlKCkgfHwgc3RhdGUuaW5TY3JpcHQoKSB8
fCBzdGF0ZS5pblhtcCgpIHx8IHN0YXRlLmluVGV4dEFyZWEoKSB8fCBzdGF0ZS5pblN0eWxlKCkg
fHwgc3RhdGUuaW5JRnJhbWUoKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgY2hlY2tTY3JpcHRC
dWZmZXIoKTsKLSAgICAgICAgICAgICAgICAgICAgbV9zY3JpcHRDb2RlW21fc2NyaXB0Q29kZVNp
emVdID0gMDsKLSAgICAgICAgICAgICAgICAgICAgbV9zY3JpcHRDb2RlW21fc2NyaXB0Q29kZVNp
emUgKyAxXSA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIG1fY3VycmVudFRva2VuLnRhZ05hbWUg
PSBjb21tZW50QXRvbTsKLSAgICAgICAgICAgICAgICAgICAgbV9jdXJyZW50VG9rZW4uYmVnaW5U
YWcgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IHByb2Nlc3NMaXN0aW5nKFNl
Z21lbnRlZFN0cmluZyhTdHJpbmcobV9zY3JpcHRDb2RlLCBtX3NjcmlwdENvZGVTaXplIC0gZW5k
Q2hhcnNDb3VudCkpLCBzdGF0ZSk7Ci0gICAgICAgICAgICAgICAgICAgIHByb2Nlc3NUb2tlbigp
OwotICAgICAgICAgICAgICAgICAgICBtX2N1cnJlbnRUb2tlbi50YWdOYW1lID0gY29tbWVudEF0
b207Ci0gICAgICAgICAgICAgICAgICAgIG1fY3VycmVudFRva2VuLmJlZ2luVGFnID0gZmFsc2U7
Ci0gICAgICAgICAgICAgICAgICAgIHByb2Nlc3NUb2tlbigpOwotICAgICAgICAgICAgICAgICAg
ICBtX3NjcmlwdENvZGVTaXplID0gMDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgc3RhdGUuc2V0SW5Db21tZW50KGZhbHNlKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gc3Rh
dGU7IC8vIEZpbmlzaGVkIHBhcnNpbmcgY29tbWVudAotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0gICAgICAgIHNyYy5hZHZhbmNlKG1fbGluZU51bWJlcik7Ci0gICAgfQotCi0gICAgcmV0dXJu
IHN0YXRlOwotfQotCi1MZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXI6OlN0YXRlIExlZ2FjeUhUTUxE
b2N1bWVudFBhcnNlcjo6cGFyc2VTZXJ2ZXIoU2VnbWVudGVkU3RyaW5nJiBzcmMsIFN0YXRlIHN0
YXRlKQotewotICAgIGNoZWNrU2NyaXB0QnVmZmVyKHNyYy5sZW5ndGgoKSk7Ci0gICAgd2hpbGUg
KCFzcmMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIFVDaGFyIGNoID0gKnNyYzsKLSAgICAgICAgbV9z
Y3JpcHRDb2RlW21fc2NyaXB0Q29kZVNpemUrK10gPSBjaDsKLSAgICAgICAgaWYgKGNoID09ICc+
JyAmJiBtX3NjcmlwdENvZGVTaXplID4gMSAmJiBtX3NjcmlwdENvZGVbbV9zY3JpcHRDb2RlU2l6
ZSAtIDJdID09ICclJykgewotICAgICAgICAgICAgc3JjLmFkdmFuY2VQYXN0Tm9uTmV3bGluZSgp
OwotICAgICAgICAgICAgc3RhdGUuc2V0SW5TZXJ2ZXIoZmFsc2UpOwotICAgICAgICAgICAgbV9z
Y3JpcHRDb2RlU2l6ZSA9IDA7Ci0gICAgICAgICAgICByZXR1cm4gc3RhdGU7IC8vIEZpbmlzaGVk
IHBhcnNpbmcgc2VydmVyIGluY2x1ZGUKLSAgICAgICAgfQotICAgICAgICBzcmMuYWR2YW5jZSht
X2xpbmVOdW1iZXIpOwotICAgIH0KLSAgICByZXR1cm4gc3RhdGU7Ci19Ci0KLUxlZ2FjeUhUTUxE
b2N1bWVudFBhcnNlcjo6U3RhdGUgTGVnYWN5SFRNTERvY3VtZW50UGFyc2VyOjpwYXJzZVByb2Nl
c3NpbmdJbnN0cnVjdGlvbihTZWdtZW50ZWRTdHJpbmcmIHNyYywgU3RhdGUgc3RhdGUpCi17Ci0g
ICAgVUNoYXIgb2xkY2hhciA9IDA7Ci0gICAgd2hpbGUgKCFzcmMuaXNFbXB0eSgpKSB7Ci0gICAg
ICAgIFVDaGFyIGNoYmVnaW4gPSAqc3JjOwotICAgICAgICBpZiAoY2hiZWdpbiA9PSAnXCcnKQot
ICAgICAgICAgICAgdHF1b3RlID0gdHF1b3RlID09IFNpbmdsZVF1b3RlID8gTm9RdW90ZSA6IFNp
bmdsZVF1b3RlOwotICAgICAgICBlbHNlIGlmIChjaGJlZ2luID09ICdcIicpCi0gICAgICAgICAg
ICB0cXVvdGUgPSB0cXVvdGUgPT0gRG91YmxlUXVvdGUgPyBOb1F1b3RlIDogRG91YmxlUXVvdGU7
Ci0gICAgICAgIC8vIExvb2sgZm9yICc/PicKLSAgICAgICAgLy8gU29tZSBjcmFwcHkgc2l0ZXMg
b21pdCB0aGUgIj8iIGJlZm9yZSBpdCwgc28KLSAgICAgICAgLy8gd2UgbG9vayBmb3IgYW4gdW5x
dW90ZWQgJz4nIGluc3RlYWQuIChJRSBjb21wYXRpYmxlKQotICAgICAgICBlbHNlIGlmIChjaGJl
Z2luID09ICc+JyAmJiAoIXRxdW90ZSB8fCBvbGRjaGFyID09ICc/JykpIHsKLSAgICAgICAgICAg
IC8vIFdlIGdvdCBhICc/Picgc2VxdWVuY2UKLSAgICAgICAgICAgIHN0YXRlLnNldEluUHJvY2Vz
c2luZ0luc3RydWN0aW9uKGZhbHNlKTsKLSAgICAgICAgICAgIHNyYy5hZHZhbmNlUGFzdE5vbk5l
d2xpbmUoKTsKLSAgICAgICAgICAgIHN0YXRlLnNldERpc2NhcmRMRih0cnVlKTsKLSAgICAgICAg
ICAgIHJldHVybiBzdGF0ZTsgLy8gRmluaXNoZWQgcGFyc2luZyBjb21tZW50IQotICAgICAgICB9
Ci0gICAgICAgIHNyYy5hZHZhbmNlKG1fbGluZU51bWJlcik7Ci0gICAgICAgIG9sZGNoYXIgPSBj
aGJlZ2luOwotICAgIH0KLQotICAgIHJldHVybiBzdGF0ZTsKLX0KLQotTGVnYWN5SFRNTERvY3Vt
ZW50UGFyc2VyOjpTdGF0ZSBMZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXI6OnBhcnNlVGV4dChTZWdt
ZW50ZWRTdHJpbmcmIHNyYywgU3RhdGUgc3RhdGUpCi17Ci0gICAgd2hpbGUgKCFzcmMuaXNFbXB0
eSgpKSB7Ci0gICAgICAgIFVDaGFyIGNjID0gKnNyYzsKLQotICAgICAgICBpZiAoc3RhdGUuc2tp
cExGKCkpIHsKLSAgICAgICAgICAgIHN0YXRlLnNldFNraXBMRihmYWxzZSk7Ci0gICAgICAgICAg
ICBpZiAoY2MgPT0gJ1xuJykgewotICAgICAgICAgICAgICAgIHNyYy5hZHZhbmNlUGFzdE5ld2xp
bmUobV9saW5lTnVtYmVyKTsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIGRvIHdlIG5lZWQgdG8gZW5sYXJnZSB0aGUgYnVm
ZmVyPwotICAgICAgICBjaGVja0J1ZmZlcigpOwotCi0gICAgICAgIGlmIChjYyA9PSAnXHInKSB7
Ci0gICAgICAgICAgICBzdGF0ZS5zZXRTa2lwTEYodHJ1ZSk7Ci0gICAgICAgICAgICAqbV9kZXN0
KysgPSAnXG4nOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICptX2Rlc3QrKyA9IGNjOwot
ICAgICAgICBzcmMuYWR2YW5jZShtX2xpbmVOdW1iZXIpOwotICAgIH0KLQotICAgIHJldHVybiBz
dGF0ZTsKLX0KLQotCi1MZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXI6OlN0YXRlIExlZ2FjeUhUTUxE
b2N1bWVudFBhcnNlcjo6cGFyc2VFbnRpdHkoU2VnbWVudGVkU3RyaW5nJiBzcmMsIFVDaGFyKiYg
ZGVzdCwgU3RhdGUgc3RhdGUsIHVuc2lnbmVkJiBjQnVmZmVyUG9zLCBib29sIHN0YXJ0LCBib29s
IHBhcnNpbmdUYWcpCi17Ci0gICAgaWYgKHN0YXJ0KSB7Ci0gICAgICAgIGNCdWZmZXJQb3MgPSAw
OwotICAgICAgICBzdGF0ZS5zZXRFbnRpdHlTdGF0ZShTZWFyY2hFbnRpdHkpOwotICAgICAgICBF
bnRpdHlVbmljb2RlVmFsdWUgPSAwOwotICAgIH0KLQotICAgIHdoaWxlICghc3JjLmlzRW1wdHko
KSkgewotICAgICAgICBVQ2hhciBjYyA9ICpzcmM7Ci0gICAgICAgIHN3aXRjaCAoc3RhdGUuZW50
aXR5U3RhdGUoKSkgewotICAgICAgICBjYXNlIE5vRW50aXR5OgotICAgICAgICAgICAgQVNTRVJU
KHN0YXRlLmVudGl0eVN0YXRlKCkgIT0gTm9FbnRpdHkpOwotICAgICAgICAgICAgcmV0dXJuIHN0
YXRlOwotCi0gICAgICAgIGNhc2UgU2VhcmNoRW50aXR5OgotICAgICAgICAgICAgaWYgKGNjID09
ICcjJykgewotICAgICAgICAgICAgICAgIG1fY0J1ZmZlcltjQnVmZmVyUG9zKytdID0gY2M7Ci0g
ICAgICAgICAgICAgICAgc3JjLmFkdmFuY2VQYXN0Tm9uTmV3bGluZSgpOwotICAgICAgICAgICAg
ICAgIHN0YXRlLnNldEVudGl0eVN0YXRlKE51bWVyaWNTZWFyY2gpOwotICAgICAgICAgICAgfSBl
bHNlCi0gICAgICAgICAgICAgICAgc3RhdGUuc2V0RW50aXR5U3RhdGUoRW50aXR5TmFtZSk7Ci0g
ICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIE51bWVyaWNTZWFyY2g6Ci0gICAgICAg
ICAgICBpZiAoY2MgPT0gJ3gnIHx8IGNjID09ICdYJykgewotICAgICAgICAgICAgICAgIG1fY0J1
ZmZlcltjQnVmZmVyUG9zKytdID0gY2M7Ci0gICAgICAgICAgICAgICAgc3JjLmFkdmFuY2VQYXN0
Tm9uTmV3bGluZSgpOwotICAgICAgICAgICAgICAgIHN0YXRlLnNldEVudGl0eVN0YXRlKEhleGFk
ZWNpbWFsKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoY2MgPj0gJzAnICYmIGNjIDw9ICc5JykK
LSAgICAgICAgICAgICAgICBzdGF0ZS5zZXRFbnRpdHlTdGF0ZShEZWNpbWFsKTsKLSAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICBzdGF0ZS5zZXRFbnRpdHlTdGF0ZShTZWFyY2hTZW1p
Y29sb24pOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBIZXhhZGVjaW1hbDog
ewotICAgICAgICAgICAgaW50IGxsID0gbWluKHNyYy5sZW5ndGgoKSwgMTAgLSBjQnVmZmVyUG9z
KTsKLSAgICAgICAgICAgIHdoaWxlIChsbC0tKSB7Ci0gICAgICAgICAgICAgICAgY2MgPSAqc3Jj
OwotICAgICAgICAgICAgICAgIGlmICghKChjYyA+PSAnMCcgJiYgY2MgPD0gJzknKSB8fCAoY2Mg
Pj0gJ2EnICYmIGNjIDw9ICdmJykgfHwgKGNjID49ICdBJyAmJiBjYyA8PSAnRicpKSkgewotICAg
ICAgICAgICAgICAgICAgICBzdGF0ZS5zZXRFbnRpdHlTdGF0ZShTZWFyY2hTZW1pY29sb24pOwot
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgaW50IGRpZ2l0OwotICAgICAgICAgICAgICAgIGlmIChjYyA8ICdBJykKLSAgICAgICAg
ICAgICAgICAgICAgZGlnaXQgPSBjYyAtICcwJzsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAg
ICAgICAgICAgICAgICAgIGRpZ2l0ID0gKGNjIC0gJ0EnICsgMTApICYgMHhGOyAvLyBoYW5kbGUg
Ym90aCB1cHBlciBhbmQgbG93ZXIgY2FzZSB3aXRob3V0IGEgYnJhbmNoCi0gICAgICAgICAgICAg
ICAgRW50aXR5VW5pY29kZVZhbHVlID0gRW50aXR5VW5pY29kZVZhbHVlICogMTYgKyBkaWdpdDsK
LSAgICAgICAgICAgICAgICBtX2NCdWZmZXJbY0J1ZmZlclBvcysrXSA9IGNjOwotICAgICAgICAg
ICAgICAgIHNyYy5hZHZhbmNlUGFzdE5vbk5ld2xpbmUoKTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGlmIChjQnVmZmVyUG9zID09IDEwKQotICAgICAgICAgICAgICAgIHN0YXRlLnNldEVu
dGl0eVN0YXRlKFNlYXJjaFNlbWljb2xvbik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQotICAgICAgICBjYXNlIERlY2ltYWw6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGludCBsbCA9
IG1pbihzcmMubGVuZ3RoKCksIDktY0J1ZmZlclBvcyk7Ci0gICAgICAgICAgICB3aGlsZSAobGwt
LSkgewotICAgICAgICAgICAgICAgIGNjID0gKnNyYzsKLQotICAgICAgICAgICAgICAgIGlmICgh
KGNjID49ICcwJyAmJiBjYyA8PSAnOScpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHN0YXRlLnNl
dEVudGl0eVN0YXRlKFNlYXJjaFNlbWljb2xvbik7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIEVudGl0eVVuaWNvZGVWYWx1
ZSA9IEVudGl0eVVuaWNvZGVWYWx1ZSAqIDEwICsgKGNjIC0gJzAnKTsKLSAgICAgICAgICAgICAg
ICBtX2NCdWZmZXJbY0J1ZmZlclBvcysrXSA9IGNjOwotICAgICAgICAgICAgICAgIHNyYy5hZHZh
bmNlUGFzdE5vbk5ld2xpbmUoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChjQnVm
ZmVyUG9zID09IDkpCi0gICAgICAgICAgICAgICAgc3RhdGUuc2V0RW50aXR5U3RhdGUoU2VhcmNo
U2VtaWNvbG9uKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ug
RW50aXR5TmFtZToKLSAgICAgICAgewotICAgICAgICAgICAgaW50IGxsID0gbWluKHNyYy5sZW5n
dGgoKSwgOS1jQnVmZmVyUG9zKTsKLSAgICAgICAgICAgIHdoaWxlIChsbC0tKSB7Ci0gICAgICAg
ICAgICAgICAgY2MgPSAqc3JjOwotCi0gICAgICAgICAgICAgICAgaWYgKCEoKGNjID49ICdhJyAm
JiBjYyA8PSAneicpIHx8IChjYyA+PSAnMCcgJiYgY2MgPD0gJzknKSB8fCAoY2MgPj0gJ0EnICYm
IGNjIDw9ICdaJykpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHN0YXRlLnNldEVudGl0eVN0YXRl
KFNlYXJjaFNlbWljb2xvbik7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgICAgIG1fY0J1ZmZlcltjQnVmZmVyUG9zKytdID0gY2M7
Ci0gICAgICAgICAgICAgICAgc3JjLmFkdmFuY2VQYXN0Tm9uTmV3bGluZSgpOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgaWYgKGNCdWZmZXJQb3MgPT0gOSkKLSAgICAgICAgICAgICAgICBz
dGF0ZS5zZXRFbnRpdHlTdGF0ZShTZWFyY2hTZW1pY29sb24pOwotICAgICAgICAgICAgaWYgKHN0
YXRlLmVudGl0eVN0YXRlKCkgPT0gU2VhcmNoU2VtaWNvbG9uKSB7Ci0gICAgICAgICAgICAgICAg
aWYgKGNCdWZmZXJQb3MgPiAxKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIFNpbmNlIHRoZSBt
YXhpbXVtIGxlbmd0aCBvZiBlbnRpdHkgbmFtZSBpcyA5LAotICAgICAgICAgICAgICAgICAgICAv
LyBzbyBhIHNpbmdsZSBjaGFyIGFycmF5IHdoaWNoIGlzIGFsbG9jYXRlZCBvbgotICAgICAgICAg
ICAgICAgICAgICAvLyB0aGUgc3RhY2ssIGl0cyBsZW5ndGggaXMgMTAsIHNob3VsZCBiZSBPSy4K
LSAgICAgICAgICAgICAgICAgICAgLy8gQWxzbyBpZiB3ZSBoYXZlIGFuIGlsbGVnYWwgY2hhcmFj
dGVyLCB3ZSB0cmVhdCBpdAotICAgICAgICAgICAgICAgICAgICAvLyBhcyBpbGxlZ2FsIGVudGl0
eSBuYW1lLgotICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCB0ZXN0ZWRFbnRpdHlOYW1lTGVu
ID0gMDsKLSAgICAgICAgICAgICAgICAgICAgY2hhciB0bXBFbnRpdHlOYW1lQnVmZmVyWzEwXTsK
LQotICAgICAgICAgICAgICAgICAgICBBU1NFUlQoY0J1ZmZlclBvcyA8IDEwKTsKLSAgICAgICAg
ICAgICAgICAgICAgZm9yICg7IHRlc3RlZEVudGl0eU5hbWVMZW4gPCBjQnVmZmVyUG9zOyArK3Rl
c3RlZEVudGl0eU5hbWVMZW4pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtX2NCdWZm
ZXJbdGVzdGVkRW50aXR5TmFtZUxlbl0gPiAweDdlKQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgdG1wRW50aXR5TmFtZUJ1ZmZlclt0
ZXN0ZWRFbnRpdHlOYW1lTGVuXSA9IG1fY0J1ZmZlclt0ZXN0ZWRFbnRpdHlOYW1lTGVuXTsKLSAg
ICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGNvbnN0IEVudGl0eSAq
ZTsKLQotICAgICAgICAgICAgICAgICAgICBpZiAodGVzdGVkRW50aXR5TmFtZUxlbiA9PSBjQnVm
ZmVyUG9zKQotICAgICAgICAgICAgICAgICAgICAgICAgZSA9IGZpbmRFbnRpdHkodG1wRW50aXR5
TmFtZUJ1ZmZlciwgY0J1ZmZlclBvcyk7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGUgPSAwOwotCi0gICAgICAgICAgICAgICAgICAgIGlmIChlKQot
ICAgICAgICAgICAgICAgICAgICAgICAgRW50aXR5VW5pY29kZVZhbHVlID0gZS0+Y29kZTsKLQot
ICAgICAgICAgICAgICAgICAgICAvLyBiZSBJRSBjb21wYXRpYmxlCi0gICAgICAgICAgICAgICAg
ICAgIGlmIChwYXJzaW5nVGFnICYmIEVudGl0eVVuaWNvZGVWYWx1ZSA+IDI1NSAmJiAqc3JjICE9
ICc7JykKLSAgICAgICAgICAgICAgICAgICAgICAgIEVudGl0eVVuaWNvZGVWYWx1ZSA9IDA7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgU2VhcmNoU2VtaWNvbG9u
OgotICAgICAgICAgICAgLy8gRG9uJ3QgYWxsb3cgdmFsdWVzIHRoYXQgYXJlIG1vcmUgdGhhbiAy
MSBiaXRzLgotICAgICAgICAgICAgaWYgKEVudGl0eVVuaWNvZGVWYWx1ZSA+IDAgJiYgRW50aXR5
VW5pY29kZVZhbHVlIDw9IDB4MTBGRkZGKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFpblZpZXdT
b3VyY2VNb2RlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCpzcmMgPT0gJzsnKQotICAg
ICAgICAgICAgICAgICAgICAgICAgc3JjLmFkdmFuY2VQYXN0Tm9uTmV3bGluZSgpOwotICAgICAg
ICAgICAgICAgICAgICBpZiAoRW50aXR5VW5pY29kZVZhbHVlIDw9IDB4RkZGRikgewotICAgICAg
ICAgICAgICAgICAgICAgICAgY2hlY2tCdWZmZXIoKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IHNyYy5wdXNoKGZpeFVwQ2hhcihFbnRpdHlVbmljb2RlVmFsdWUpKTsKLSAgICAgICAgICAgICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIENvbnZlcnQgdG8gVVRG
LTE2LCB1c2luZyBzdXJyb2dhdGUgY29kZSBwb2ludHMuCi0gICAgICAgICAgICAgICAgICAgICAg
ICBjaGVja0J1ZmZlcigyKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNyYy5wdXNoKFUxNl9M
RUFEKEVudGl0eVVuaWNvZGVWYWx1ZSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgc3JjLnB1
c2goVTE2X1RSQUlMKEVudGl0eVVuaWNvZGVWYWx1ZSkpOwotICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6
IFdlIHNob3VsZCBldmVudHVhbGx5IGNvbG9yaXplIGVudGl0aWVzIGJ5IHNlbmRpbmcgdGhlbSBh
cyBhIHNwZWNpYWwgdG9rZW4uCi0gICAgICAgICAgICAgICAgICAgIC8vIDEyIGJ5dGVzIHJlcXVp
cmVkOiB1cCB0byAxMCBieXRlcyBpbiBtX2NCdWZmZXIgcGx1cyB0aGUKLSAgICAgICAgICAgICAg
ICAgICAgLy8gbGVhZGluZyAnJicgYW5kIHRyYWlsaW5nICc7JwotICAgICAgICAgICAgICAgICAg
ICBjaGVja0J1ZmZlcigxMik7Ci0gICAgICAgICAgICAgICAgICAgICpkZXN0KysgPSAnJic7Ci0g
ICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjQnVmZmVyUG9zOyBp
KyspCi0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0W2ldID0gbV9jQnVmZmVyW2ldOwotICAg
ICAgICAgICAgICAgICAgICBkZXN0ICs9IGNCdWZmZXJQb3M7Ci0gICAgICAgICAgICAgICAgICAg
IGlmICgqc3JjID09ICc7JykgewotICAgICAgICAgICAgICAgICAgICAgICAgKmRlc3QrKyA9ICc7
JzsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNyYy5hZHZhbmNlUGFzdE5vbk5ld2xpbmUoKTsK
LSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgLy8gMTEgYnl0ZXMgcmVxdWlyZWQ6IHVwIHRvIDEwIGJ5
dGVzIGluIG1fY0J1ZmZlciBwbHVzIHRoZQotICAgICAgICAgICAgICAgIC8vIGxlYWRpbmcgJyYn
Ci0gICAgICAgICAgICAgICAgY2hlY2tCdWZmZXIoMTEpOwotICAgICAgICAgICAgICAgIC8vIGln
bm9yZSB0aGUgc2VxdWVuY2UsIGFkZCBpdCB0byB0aGUgYnVmZmVyIGFzIHBsYWludGV4dAotICAg
ICAgICAgICAgICAgICpkZXN0KysgPSAnJic7Ci0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGNCdWZmZXJQb3M7IGkrKykKLSAgICAgICAgICAgICAgICAgICAgZGVzdFtp
XSA9IG1fY0J1ZmZlcltpXTsKLSAgICAgICAgICAgICAgICBkZXN0ICs9IGNCdWZmZXJQb3M7Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHN0YXRlLnNldEVudGl0eVN0YXRlKE5vRW50aXR5
KTsKLSAgICAgICAgICAgIHJldHVybiBzdGF0ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJl
dHVybiBzdGF0ZTsKLX0KLQotTGVnYWN5SFRNTERvY3VtZW50UGFyc2VyOjpTdGF0ZSBMZWdhY3lI
VE1MRG9jdW1lbnRQYXJzZXI6OnBhcnNlRG9jdHlwZShTZWdtZW50ZWRTdHJpbmcmIHNyYywgU3Rh
dGUgc3RhdGUpCi17Ci0gICAgQVNTRVJUKHN0YXRlLmluRG9jdHlwZSgpKTsKLSAgICB3aGlsZSAo
IXNyYy5pc0VtcHR5KCkgJiYgc3RhdGUuaW5Eb2N0eXBlKCkpIHsKLSAgICAgICAgVUNoYXIgYyA9
ICpzcmM7Ci0gICAgICAgIGJvb2wgaXNXaGl0ZXNwYWNlID0gYyA9PSAnXHInIHx8IGMgPT0gJ1xu
JyB8fCBjID09ICdcdCcgfHwgYyA9PSAnICc7Ci0gICAgICAgIHN3aXRjaCAobV9kb2N0eXBlVG9r
ZW4uc3RhdGUoKSkgewotICAgICAgICAgICAgY2FzZSBEb2N0eXBlQmVnaW46IHsKLSAgICAgICAg
ICAgICAgICBtX2RvY3R5cGVUb2tlbi5zZXRTdGF0ZShEb2N0eXBlQmVmb3JlTmFtZSk7Ci0gICAg
ICAgICAgICAgICAgaWYgKGlzV2hpdGVzcGFjZSkgewotICAgICAgICAgICAgICAgICAgICBzcmMu
YWR2YW5jZShtX2xpbmVOdW1iZXIpOwotICAgICAgICAgICAgICAgICAgICBpZiAoaW5WaWV3U291
cmNlTW9kZSgpKQotICAgICAgICAgICAgICAgICAgICAgICAgbV9kb2N0eXBlVG9rZW4ubV9zb3Vy
Y2UuYXBwZW5kKGMpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhc2UgRG9jdHlwZUJlZm9yZU5hbWU6IHsKLSAg
ICAgICAgICAgICAgICBpZiAoYyA9PSAnPicpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gTWFs
Zm9ybWVkLiAgSnVzdCBleGl0LgotICAgICAgICAgICAgICAgICAgICBzcmMuYWR2YW5jZVBhc3RO
b25OZXdsaW5lKCk7Ci0gICAgICAgICAgICAgICAgICAgIHN0YXRlLnNldEluRG9jdHlwZShmYWxz
ZSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpblZpZXdTb3VyY2VNb2RlKCkpCi0gICAgICAg
ICAgICAgICAgICAgICAgICBwcm9jZXNzRG9jdHlwZVRva2VuKCk7Ci0gICAgICAgICAgICAgICAg
fSBlbHNlIGlmIChpc1doaXRlc3BhY2UpIHsKLSAgICAgICAgICAgICAgICAgICAgc3JjLmFkdmFu
Y2UobV9saW5lTnVtYmVyKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGluVmlld1NvdXJjZU1v
ZGUoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fZG9jdHlwZVRva2VuLm1fc291cmNlLmFw
cGVuZChjKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgbV9k
b2N0eXBlVG9rZW4uc2V0U3RhdGUoRG9jdHlwZU5hbWUpOwotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2FzZSBEb2N0eXBlTmFtZTogewotICAgICAg
ICAgICAgICAgIGlmIChjID09ICc+JykgewotICAgICAgICAgICAgICAgICAgICAvLyBWYWxpZCBk
b2N0eXBlLiBFbWl0IGl0LgotICAgICAgICAgICAgICAgICAgICBzcmMuYWR2YW5jZVBhc3ROb25O
ZXdsaW5lKCk7Ci0gICAgICAgICAgICAgICAgICAgIHN0YXRlLnNldEluRG9jdHlwZShmYWxzZSk7
Ci0gICAgICAgICAgICAgICAgICAgIHByb2Nlc3NEb2N0eXBlVG9rZW4oKTsKLSAgICAgICAgICAg
ICAgICB9IGVsc2UgaWYgKGlzV2hpdGVzcGFjZSkgewotICAgICAgICAgICAgICAgICAgICBtX2Rv
Y3R5cGVTZWFyY2hDb3VudCA9IDA7IC8vIFVzZWQgbm93IHRvIHNjYW4gZm9yIFBVQkxJQwotICAg
ICAgICAgICAgICAgICAgICBtX2RvY3R5cGVTZWNvbmRhcnlTZWFyY2hDb3VudCA9IDA7IC8vIFVz
ZWQgbm93IHRvIHNjYW4gZm9yIFNZU1RFTQotICAgICAgICAgICAgICAgICAgICBtX2RvY3R5cGVU
b2tlbi5zZXRTdGF0ZShEb2N0eXBlQWZ0ZXJOYW1lKTsKLSAgICAgICAgICAgICAgICAgICAgc3Jj
LmFkdmFuY2UobV9saW5lTnVtYmVyKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGluVmlld1Nv
dXJjZU1vZGUoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fZG9jdHlwZVRva2VuLm1fc291
cmNlLmFwcGVuZChjKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAg
ICAgICBzcmMuYWR2YW5jZVBhc3ROb25OZXdsaW5lKCk7Ci0gICAgICAgICAgICAgICAgICAgIG1f
ZG9jdHlwZVRva2VuLm1fbmFtZS5hcHBlbmQoYyk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChp
blZpZXdTb3VyY2VNb2RlKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBtX2RvY3R5cGVUb2tl
bi5tX3NvdXJjZS5hcHBlbmQoYyk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2FzZSBEb2N0eXBlQWZ0ZXJOYW1l
OiB7Ci0gICAgICAgICAgICAgICAgaWYgKGMgPT0gJz4nKSB7Ci0gICAgICAgICAgICAgICAgICAg
IC8vIFZhbGlkIGRvY3R5cGUuIEVtaXQgaXQuCi0gICAgICAgICAgICAgICAgICAgIHNyYy5hZHZh
bmNlUGFzdE5vbk5ld2xpbmUoKTsKLSAgICAgICAgICAgICAgICAgICAgc3RhdGUuc2V0SW5Eb2N0
eXBlKGZhbHNlKTsKLSAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc0RvY3R5cGVUb2tlbigpOwot
ICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIWlzV2hpdGVzcGFjZSkgewotICAgICAgICAgICAg
ICAgICAgICBzcmMuYWR2YW5jZVBhc3ROb25OZXdsaW5lKCk7Ci0gICAgICAgICAgICAgICAgICAg
IGlmICh0b0FTQ0lJTG93ZXIoYykgPT0gcHVibGljU3RhcnRbbV9kb2N0eXBlU2VhcmNoQ291bnRd
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX2RvY3R5cGVTZWFyY2hDb3VudCsrOwotICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKG1fZG9jdHlwZVNlYXJjaENvdW50ID09IDYpCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gRm91bmQgJ1BVQkxJQycgc2VxdWVuY2UKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtX2RvY3R5cGVUb2tlbi5zZXRTdGF0ZShEb2N0eXBlQmVm
b3JlUHVibGljSUQpOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1fZG9jdHlwZVNl
YXJjaENvdW50ID4gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgbV9kb2N0eXBlU2VhcmNo
Q291bnQgPSAwOwotICAgICAgICAgICAgICAgICAgICAgICAgbV9kb2N0eXBlVG9rZW4uc2V0U3Rh
dGUoRG9jdHlwZUJvZ3VzKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0b0FTQ0lJ
TG93ZXIoYykgPT0gc3lzdGVtU3RhcnRbbV9kb2N0eXBlU2Vjb25kYXJ5U2VhcmNoQ291bnRdKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX2RvY3R5cGVTZWNvbmRhcnlTZWFyY2hDb3VudCsr
OwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1fZG9jdHlwZVNlY29uZGFyeVNlYXJjaENv
dW50ID09IDYpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRm91bmQgJ1NZU1RFTScg
c2VxdWVuY2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2RvY3R5cGVUb2tlbi5zZXRT
dGF0ZShEb2N0eXBlQmVmb3JlU3lzdGVtSUQpOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgICAgICAgICAgICAgbV9kb2N0eXBlU2Vjb25kYXJ5U2VhcmNoQ291bnQg
PSAwOwotICAgICAgICAgICAgICAgICAgICAgICAgbV9kb2N0eXBlVG9rZW4uc2V0U3RhdGUoRG9j
dHlwZUJvZ3VzKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBp
ZiAoaW5WaWV3U291cmNlTW9kZSgpKQotICAgICAgICAgICAgICAgICAgICAgICAgbV9kb2N0eXBl
VG9rZW4ubV9zb3VyY2UuYXBwZW5kKGMpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgICAgIHNyYy5hZHZhbmNlKG1fbGluZU51bWJlcik7IC8vIFdoaXRlc3BhY2Ug
a2VlcHMgdXMgaW4gdGhlIGFmdGVyIG5hbWUgc3RhdGUuCi0gICAgICAgICAgICAgICAgICAgIGlm
IChpblZpZXdTb3VyY2VNb2RlKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBtX2RvY3R5cGVU
b2tlbi5tX3NvdXJjZS5hcHBlbmQoYyk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2FzZSBEb2N0eXBlQmVmb3Jl
UHVibGljSUQ6IHsKLSAgICAgICAgICAgICAgICBpZiAoYyA9PSAnXCInIHx8IGMgPT0gJ1wnJykg
ewotICAgICAgICAgICAgICAgICAgICB0cXVvdGUgPSBjID09ICdcIicgPyBEb3VibGVRdW90ZSA6
IFNpbmdsZVF1b3RlOwotICAgICAgICAgICAgICAgICAgICBtX2RvY3R5cGVUb2tlbi5zZXRTdGF0
ZShEb2N0eXBlUHVibGljSUQpOwotICAgICAgICAgICAgICAgICAgICBzcmMuYWR2YW5jZVBhc3RO
b25OZXdsaW5lKCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpblZpZXdTb3VyY2VNb2RlKCkp
Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX2RvY3R5cGVUb2tlbi5tX3NvdXJjZS5hcHBlbmQo
Yyk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjID09ICc+JykgewotICAgICAgICAgICAg
ICAgICAgICAvLyBDb25zaWRlcmVkIGJvZ3VzLiAgRG9uJ3QgcHJvY2VzcyB0aGUgZG9jdHlwZS4K
LSAgICAgICAgICAgICAgICAgICAgc3JjLmFkdmFuY2VQYXN0Tm9uTmV3bGluZSgpOwotICAgICAg
ICAgICAgICAgICAgICBzdGF0ZS5zZXRJbkRvY3R5cGUoZmFsc2UpOwotICAgICAgICAgICAgICAg
ICAgICBpZiAoaW5WaWV3U291cmNlTW9kZSgpKQotICAgICAgICAgICAgICAgICAgICAgICAgcHJv
Y2Vzc0RvY3R5cGVUb2tlbigpOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNXaGl0ZXNw
YWNlKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNyYy5hZHZhbmNlKG1fbGluZU51bWJlcik7Ci0g
ICAgICAgICAgICAgICAgICAgIGlmIChpblZpZXdTb3VyY2VNb2RlKCkpCi0gICAgICAgICAgICAg
ICAgICAgICAgICBtX2RvY3R5cGVUb2tlbi5tX3NvdXJjZS5hcHBlbmQoYyk7Ci0gICAgICAgICAg
ICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgIG1fZG9jdHlwZVRva2VuLnNldFN0YXRl
KERvY3R5cGVCb2d1cyk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBjYXNlIERvY3R5cGVQdWJsaWNJRDogewotICAgICAgICAgICAgICAgIGlmICgo
YyA9PSAnXCInICYmIHRxdW90ZSA9PSBEb3VibGVRdW90ZSkgfHwgKGMgPT0gJ1wnJyAmJiB0cXVv
dGUgPT0gU2luZ2xlUXVvdGUpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNyYy5hZHZhbmNlUGFz
dE5vbk5ld2xpbmUoKTsKLSAgICAgICAgICAgICAgICAgICAgbV9kb2N0eXBlVG9rZW4uc2V0U3Rh
dGUoRG9jdHlwZUFmdGVyUHVibGljSUQpOwotICAgICAgICAgICAgICAgICAgICBpZiAoaW5WaWV3
U291cmNlTW9kZSgpKQotICAgICAgICAgICAgICAgICAgICAgICAgbV9kb2N0eXBlVG9rZW4ubV9z
b3VyY2UuYXBwZW5kKGMpOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYyA9PSAnPicpIHsK
LSAgICAgICAgICAgICAgICAgICAgIC8vIENvbnNpZGVyZWQgYm9ndXMuICBEb24ndCBwcm9jZXNz
IHRoZSBkb2N0eXBlLgotICAgICAgICAgICAgICAgICAgICBzcmMuYWR2YW5jZVBhc3ROb25OZXds
aW5lKCk7Ci0gICAgICAgICAgICAgICAgICAgIHN0YXRlLnNldEluRG9jdHlwZShmYWxzZSk7Ci0g
ICAgICAgICAgICAgICAgICAgIGlmIChpblZpZXdTb3VyY2VNb2RlKCkpCi0gICAgICAgICAgICAg
ICAgICAgICAgICBwcm9jZXNzRG9jdHlwZVRva2VuKCk7Ci0gICAgICAgICAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgICAgICAgICAgbV9kb2N0eXBlVG9rZW4ubV9wdWJsaWNJRC5hcHBlbmQo
Yyk7Ci0gICAgICAgICAgICAgICAgICAgIHNyYy5hZHZhbmNlKG1fbGluZU51bWJlcik7Ci0gICAg
ICAgICAgICAgICAgICAgIGlmIChpblZpZXdTb3VyY2VNb2RlKCkpCi0gICAgICAgICAgICAgICAg
ICAgICAgICBtX2RvY3R5cGVUb2tlbi5tX3NvdXJjZS5hcHBlbmQoYyk7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
Y2FzZSBEb2N0eXBlQWZ0ZXJQdWJsaWNJRDoKLSAgICAgICAgICAgICAgICBpZiAoYyA9PSAnXCIn
IHx8IGMgPT0gJ1wnJykgewotICAgICAgICAgICAgICAgICAgICB0cXVvdGUgPSBjID09ICdcIicg
PyBEb3VibGVRdW90ZSA6IFNpbmdsZVF1b3RlOwotICAgICAgICAgICAgICAgICAgICBtX2RvY3R5
cGVUb2tlbi5zZXRTdGF0ZShEb2N0eXBlU3lzdGVtSUQpOwotICAgICAgICAgICAgICAgICAgICBz
cmMuYWR2YW5jZVBhc3ROb25OZXdsaW5lKCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpblZp
ZXdTb3VyY2VNb2RlKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBtX2RvY3R5cGVUb2tlbi5t
X3NvdXJjZS5hcHBlbmQoYyk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjID09ICc+Jykg
ewotICAgICAgICAgICAgICAgICAgICAvLyBWYWxpZCBkb2N0eXBlLiBFbWl0IGl0IG5vdy4KLSAg
ICAgICAgICAgICAgICAgICAgc3JjLmFkdmFuY2VQYXN0Tm9uTmV3bGluZSgpOwotICAgICAgICAg
ICAgICAgICAgICBzdGF0ZS5zZXRJbkRvY3R5cGUoZmFsc2UpOwotICAgICAgICAgICAgICAgICAg
ICBwcm9jZXNzRG9jdHlwZVRva2VuKCk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpc1do
aXRlc3BhY2UpIHsKLSAgICAgICAgICAgICAgICAgICAgc3JjLmFkdmFuY2UobV9saW5lTnVtYmVy
KTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGluVmlld1NvdXJjZU1vZGUoKSkKLSAgICAgICAg
ICAgICAgICAgICAgICAgIG1fZG9jdHlwZVRva2VuLm1fc291cmNlLmFwcGVuZChjKTsKLSAgICAg
ICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgbV9kb2N0eXBlVG9rZW4uc2V0
U3RhdGUoRG9jdHlwZUJvZ3VzKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
IGNhc2UgRG9jdHlwZUJlZm9yZVN5c3RlbUlEOgotICAgICAgICAgICAgICAgIGlmIChjID09ICdc
IicgfHwgYyA9PSAnXCcnKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRxdW90ZSA9IGMgPT0gJ1wi
JyA/IERvdWJsZVF1b3RlIDogU2luZ2xlUXVvdGU7Ci0gICAgICAgICAgICAgICAgICAgIG1fZG9j
dHlwZVRva2VuLnNldFN0YXRlKERvY3R5cGVTeXN0ZW1JRCk7Ci0gICAgICAgICAgICAgICAgICAg
IHNyYy5hZHZhbmNlUGFzdE5vbk5ld2xpbmUoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGlu
Vmlld1NvdXJjZU1vZGUoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fZG9jdHlwZVRva2Vu
Lm1fc291cmNlLmFwcGVuZChjKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGMgPT0gJz4n
KSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIENvbnNpZGVyZWQgYm9ndXMuICBEb24ndCBwcm9j
ZXNzIHRoZSBkb2N0eXBlLgotICAgICAgICAgICAgICAgICAgICBzcmMuYWR2YW5jZVBhc3ROb25O
ZXdsaW5lKCk7Ci0gICAgICAgICAgICAgICAgICAgIHN0YXRlLnNldEluRG9jdHlwZShmYWxzZSk7
Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpc1doaXRlc3BhY2UpIHsKLSAgICAgICAgICAg
ICAgICAgICAgc3JjLmFkdmFuY2UobV9saW5lTnVtYmVyKTsKLSAgICAgICAgICAgICAgICAgICAg
aWYgKGluVmlld1NvdXJjZU1vZGUoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fZG9jdHlw
ZVRva2VuLm1fc291cmNlLmFwcGVuZChjKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAg
ICAgICAgICAgICAgICAgbV9kb2N0eXBlVG9rZW4uc2V0U3RhdGUoRG9jdHlwZUJvZ3VzKTsKLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgRG9jdHlwZVN5c3RlbUlEOgot
ICAgICAgICAgICAgICAgIGlmICgoYyA9PSAnXCInICYmIHRxdW90ZSA9PSBEb3VibGVRdW90ZSkg
fHwgKGMgPT0gJ1wnJyAmJiB0cXVvdGUgPT0gU2luZ2xlUXVvdGUpKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIHNyYy5hZHZhbmNlUGFzdE5vbk5ld2xpbmUoKTsKLSAgICAgICAgICAgICAgICAgICAg
bV9kb2N0eXBlVG9rZW4uc2V0U3RhdGUoRG9jdHlwZUFmdGVyU3lzdGVtSUQpOwotICAgICAgICAg
ICAgICAgICAgICBpZiAoaW5WaWV3U291cmNlTW9kZSgpKQotICAgICAgICAgICAgICAgICAgICAg
ICAgbV9kb2N0eXBlVG9rZW4ubV9zb3VyY2UuYXBwZW5kKGMpOwotICAgICAgICAgICAgICAgIH0g
ZWxzZSBpZiAoYyA9PSAnPicpIHsKLSAgICAgICAgICAgICAgICAgICAgIC8vIENvbnNpZGVyZWQg
Ym9ndXMuICBEb24ndCBwcm9jZXNzIHRoZSBkb2N0eXBlLgotICAgICAgICAgICAgICAgICAgICBz
cmMuYWR2YW5jZVBhc3ROb25OZXdsaW5lKCk7Ci0gICAgICAgICAgICAgICAgICAgIHN0YXRlLnNl
dEluRG9jdHlwZShmYWxzZSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpblZpZXdTb3VyY2VN
b2RlKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzRG9jdHlwZVRva2VuKCk7Ci0g
ICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgbV9kb2N0eXBlVG9r
ZW4ubV9zeXN0ZW1JRC5hcHBlbmQoYyk7Ci0gICAgICAgICAgICAgICAgICAgIHNyYy5hZHZhbmNl
KG1fbGluZU51bWJlcik7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpblZpZXdTb3VyY2VNb2Rl
KCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBtX2RvY3R5cGVUb2tlbi5tX3NvdXJjZS5hcHBl
bmQoYyk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgY2FzZSBEb2N0eXBlQWZ0ZXJTeXN0ZW1JRDoKLSAgICAgICAgICAgICAgICBpZiAoYyA9
PSAnPicpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gVmFsaWQgZG9jdHlwZS4gRW1pdCBpdCBu
b3cuCi0gICAgICAgICAgICAgICAgICAgIHNyYy5hZHZhbmNlUGFzdE5vbk5ld2xpbmUoKTsKLSAg
ICAgICAgICAgICAgICAgICAgc3RhdGUuc2V0SW5Eb2N0eXBlKGZhbHNlKTsKLSAgICAgICAgICAg
ICAgICAgICAgcHJvY2Vzc0RvY3R5cGVUb2tlbigpOwotICAgICAgICAgICAgICAgIH0gZWxzZSBp
ZiAoaXNXaGl0ZXNwYWNlKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNyYy5hZHZhbmNlKG1fbGlu
ZU51bWJlcik7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpblZpZXdTb3VyY2VNb2RlKCkpCi0g
ICAgICAgICAgICAgICAgICAgICAgICBtX2RvY3R5cGVUb2tlbi5tX3NvdXJjZS5hcHBlbmQoYyk7
Ci0gICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgIG1fZG9jdHlwZVRv
a2VuLnNldFN0YXRlKERvY3R5cGVCb2d1cyk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICBjYXNlIERvY3R5cGVCb2d1czoKLSAgICAgICAgICAgICAgICBpZiAoYyA9PSAnPicp
IHsKLSAgICAgICAgICAgICAgICAgICAgLy8gRG9uZSB3aXRoIHRoZSBib2d1cyBkb2N0eXBlLgot
ICAgICAgICAgICAgICAgICAgICBzcmMuYWR2YW5jZVBhc3ROb25OZXdsaW5lKCk7Ci0gICAgICAg
ICAgICAgICAgICAgIHN0YXRlLnNldEluRG9jdHlwZShmYWxzZSk7Ci0gICAgICAgICAgICAgICAg
ICAgIGlmIChpblZpZXdTb3VyY2VNb2RlKCkpCi0gICAgICAgICAgICAgICAgICAgICAgIHByb2Nl
c3NEb2N0eXBlVG9rZW4oKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
ICAgICAgICBzcmMuYWR2YW5jZShtX2xpbmVOdW1iZXIpOyAvLyBKdXN0IGtlZXAgc2Nhbm5pbmcg
Zm9yICc+JwotICAgICAgICAgICAgICAgICAgICBpZiAoaW5WaWV3U291cmNlTW9kZSgpKQotICAg
ICAgICAgICAgICAgICAgICAgICAgbV9kb2N0eXBlVG9rZW4ubV9zb3VyY2UuYXBwZW5kKGMpOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0
dXJuIHN0YXRlOwotfQotCi1MZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXI6OlN0YXRlIExlZ2FjeUhU
TUxEb2N1bWVudFBhcnNlcjo6cGFyc2VUYWcoU2VnbWVudGVkU3RyaW5nJiBzcmMsIFN0YXRlIHN0
YXRlKQotewotICAgIEFTU0VSVCghc3RhdGUuaGFzRW50aXR5U3RhdGUoKSk7Ci0KLSAgICB1bnNp
Z25lZCBjQnVmZmVyUG9zID0gbV9jQnVmZmVyUG9zOwotCi0gICAgYm9vbCBsYXN0SXNTbGFzaCA9
IGZhbHNlOwotCi0gICAgd2hpbGUgKCFzcmMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGNoZWNrQnVm
ZmVyKCk7Ci0gICAgICAgIHN3aXRjaCAoc3RhdGUudGFnU3RhdGUoKSkgewotICAgICAgICBjYXNl
IE5vVGFnOgotICAgICAgICB7Ci0gICAgICAgICAgICBtX2NCdWZmZXJQb3MgPSBjQnVmZmVyUG9z
OwotICAgICAgICAgICAgcmV0dXJuIHN0YXRlOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgVGFn
TmFtZToKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKHNlYXJjaENvdW50ID4gMCkgewotICAg
ICAgICAgICAgICAgIGlmICgqc3JjID09IGNvbW1lbnRTdGFydFtzZWFyY2hDb3VudF0pIHsKLSAg
ICAgICAgICAgICAgICAgICAgc2VhcmNoQ291bnQrKzsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KHNlYXJjaENvdW50ID09IDIpCi0gICAgICAgICAgICAgICAgICAgICAgICBtX2RvY3R5cGVTZWFy
Y2hDb3VudCsrOyAvLyBBICchJyBpcyBhbHNvIHBhcnQgb2YgYSBkb2N0eXBlLCBzbyB3ZSBhcmUg
bW92aW5nIHRocm91Z2ggdGhhdCBzdGlsbCBhcyB3ZWxsLgotICAgICAgICAgICAgICAgICAgICBl
bHNlCi0gICAgICAgICAgICAgICAgICAgICAgICBtX2RvY3R5cGVTZWFyY2hDb3VudCA9IDA7Ci0g
ICAgICAgICAgICAgICAgICAgIGlmIChzZWFyY2hDb3VudCA9PSA0KSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAvLyBGb3VuZCAnPCEtLScgc2VxdWVuY2UKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHNyYy5hZHZhbmNlUGFzdE5vbk5ld2xpbmUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IG1fZGVzdCA9IG1fYnVmZmVyOyAvLyBpZ25vcmUgdGhlIHByZXZpb3VzIHBhcnQgb2YgdGhpcyB0
YWcKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLnNldEluQ29tbWVudCh0cnVlKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLnNldFRhZ1N0YXRlKE5vVGFnKTsKLQotICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gRml4IGJ1ZyAzNDMwMiBhdCBrZGUuYnVncy5vcmcuICBHbyBh
aGVhZCBhbmQgdHJlYXQKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIDwhLS0+IGFzIGEgdmFs
aWQgY29tbWVudCwgc2luY2UgYm90aCBtb3ppbGxhIGFuZCBJRSBvbiB3aW5kb3dzCi0gICAgICAg
ICAgICAgICAgICAgICAgICAvLyBjYW4gaGFuZGxlIHRoaXMgY2FzZS4gIE9ubHkgZG8gdGhpcyBp
biBxdWlya3MgbW9kZS4gLWR3aAotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzcmMuaXNF
bXB0eSgpICYmICpzcmMgPT0gJz4nICYmIGRvY3VtZW50KCktPmluQ29tcGF0TW9kZSgpKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUuc2V0SW5Db21tZW50KGZhbHNlKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzcmMuYWR2YW5jZVBhc3ROb25OZXdsaW5lKCk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzcmMuaXNFbXB0eSgpKQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtX2NCdWZmZXJbY0J1ZmZlclBvcysrXSA9ICpzcmM7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
c3RhdGUgPSBwYXJzZUNvbW1lbnQoc3JjLCBzdGF0ZSk7Ci0KLSAgICAgICAgICAgICAgICAgICAg
ICAgIG1fY0J1ZmZlclBvcyA9IGNCdWZmZXJQb3M7Ci0gICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gc3RhdGU7IC8vIEZpbmlzaGVkIHBhcnNpbmcgdGFnIQotICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgICAgIG1fY0J1ZmZlcltjQnVmZmVyUG9zKytdID0gKnNyYzsK
LSAgICAgICAgICAgICAgICAgICAgc3JjLmFkdmFuY2VQYXN0Tm9uTmV3bGluZSgpOwotICAgICAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAg
ICAgICAgICAgc2VhcmNoQ291bnQgPSAwOyAvLyBTdG9wIGxvb2tpbmcgZm9yICc8IS0tJyBzZXF1
ZW5jZQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAobV9kb2N0eXBlU2VhcmNoQ291
bnQgPiAwKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHRvQVNDSUlMb3dlcigqc3JjKSA9PSBkb2N0
eXBlU3RhcnRbbV9kb2N0eXBlU2VhcmNoQ291bnRdKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1f
ZG9jdHlwZVNlYXJjaENvdW50Kys7Ci0gICAgICAgICAgICAgICAgICAgIG1fY0J1ZmZlcltjQnVm
ZmVyUG9zKytdID0gKnNyYzsKLSAgICAgICAgICAgICAgICAgICAgc3JjLmFkdmFuY2VQYXN0Tm9u
TmV3bGluZSgpOwotICAgICAgICAgICAgICAgICAgICBpZiAobV9kb2N0eXBlU2VhcmNoQ291bnQg
PT0gOSkgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gRm91bmQgJzwhRE9DVFlQRScgc2Vx
dWVuY2UKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLnNldEluRG9jdHlwZSh0cnVlKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLnNldFRhZ1N0YXRlKE5vVGFnKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIG1fZG9jdHlwZVRva2VuLnJlc2V0KCk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoaW5WaWV3U291cmNlTW9kZSgpKQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1fZG9jdHlwZVRva2VuLm1fc291cmNlLmFwcGVuZChtX2NCdWZmZXIsIGNCdWZmZXJQ
b3MpOwotICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSBwYXJzZURvY3R5cGUoc3JjLCBz
dGF0ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX2NCdWZmZXJQb3MgPSBjQnVmZmVyUG9z
OwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0YXRlOwotICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0gZWxz
ZQotICAgICAgICAgICAgICAgICAgICBtX2RvY3R5cGVTZWFyY2hDb3VudCA9IDA7IC8vIFN0b3Ag
bG9va2luZyBmb3IgJzwhRE9DVFlQRScgc2VxdWVuY2UKLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgYm9vbCBmaW5pc2ggPSBmYWxzZTsKLSAgICAgICAgICAgIHVuc2lnbmVkIGludCBsbCA9
IG1pbihzcmMubGVuZ3RoKCksIENCVUZMRU4gLSBjQnVmZmVyUG9zKTsKLSAgICAgICAgICAgIHdo
aWxlIChsbC0tKSB7Ci0gICAgICAgICAgICAgICAgVUNoYXIgY3VyY2hhciA9ICpzcmM7Ci0gICAg
ICAgICAgICAgICAgaWYgKGlzQVNDSUlTcGFjZShjdXJjaGFyKSB8fCBjdXJjaGFyID09ICc+JyB8
fCBjdXJjaGFyID09ICc8JykgewotICAgICAgICAgICAgICAgICAgICBmaW5pc2ggPSB0cnVlOwot
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgICAgICAvLyB0b2xvd2VyKCkgc2hvd3MgdXAgb24gcHJvZmlsZXMuIFRoaXMgaXMgZmFzdGVy
IQotICAgICAgICAgICAgICAgIGlmIChjdXJjaGFyID49ICdBJyAmJiBjdXJjaGFyIDw9ICdaJyAm
JiAhaW5WaWV3U291cmNlTW9kZSgpKQotICAgICAgICAgICAgICAgICAgICBtX2NCdWZmZXJbY0J1
ZmZlclBvcysrXSA9IGN1cmNoYXIgKyAoJ2EnIC0gJ0EnKTsKLSAgICAgICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICAgICAgICAgIG1fY0J1ZmZlcltjQnVmZmVyUG9zKytdID0gY3VyY2hhcjsK
LSAgICAgICAgICAgICAgICBzcmMuYWR2YW5jZVBhc3ROb25OZXdsaW5lKCk7Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIC8vIERpc2FkdmFudGFnZTogd2UgYWRkIHRoZSBwb3NzaWJsZSBy
ZXN0IG9mIHRoZSB0YWcKLSAgICAgICAgICAgIC8vIGFzIGF0dHJpYnV0ZSBuYW1lcy4gIyMjIGp1
ZGdlIGlmIHRoaXMgY2F1c2VzIHByb2JsZW1zCi0gICAgICAgICAgICBpZiAoZmluaXNoIHx8IENC
VUZMRU4gPT0gY0J1ZmZlclBvcykgewotICAgICAgICAgICAgICAgIGJvb2wgYmVnaW5UYWc7Ci0g
ICAgICAgICAgICAgICAgVUNoYXIqIHB0ciA9IG1fY0J1ZmZlcjsKLSAgICAgICAgICAgICAgICB1
bnNpZ25lZCBpbnQgbGVuID0gY0J1ZmZlclBvczsKLSAgICAgICAgICAgICAgICBtX2NCdWZmZXJb
Y0J1ZmZlclBvc10gPSAnXDAnOwotICAgICAgICAgICAgICAgIGlmICgoY0J1ZmZlclBvcyA+IDAp
ICYmICgqcHRyID09ICcvJykpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gRW5kIFRhZwotICAg
ICAgICAgICAgICAgICAgICBiZWdpblRhZyA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICBw
dHIrKzsKLSAgICAgICAgICAgICAgICAgICAgbGVuLS07Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgLy8gU3RhcnQgVGFnCi0gICAg
ICAgICAgICAgICAgICAgIGJlZ2luVGFnID0gdHJ1ZTsKLQotICAgICAgICAgICAgICAgIC8vIEln
bm9yZSB0aGUgLyBpbiBmYWtlIHhtbCB0YWdzIGxpa2UgPGJyLz4uICBXZSB0cmltIG9mZiB0aGUg
Ii8iIHNvIHRoYXQgd2UnbGwgZ2V0ICJiciIgYXMgdGhlIHRhZyBuYW1lIGFuZCBub3QgImJyLyIu
Ci0gICAgICAgICAgICAgICAgaWYgKGxlbiA+IDEgJiYgcHRyW2xlbi0xXSA9PSAnLycgJiYgIWlu
Vmlld1NvdXJjZU1vZGUoKSkKLSAgICAgICAgICAgICAgICAgICAgcHRyWy0tbGVuXSA9ICdcMCc7
Ci0KLSAgICAgICAgICAgICAgICAvLyBOb3cgdGhhdCB3ZSd2ZSBzaGF2ZWQgb2ZmIGFueSBpbnZh
bGlkIC8gdGhhdCBtaWdodCBoYXZlIGZvbGxvd2VkIHRoZSBuYW1lKSwgbWFrZSB0aGUgdGFnLgot
ICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBGaXJlRm94IGFuZCBXaW5JRSB0dXJuICFmb28gbm9k
ZXMgaW50byBjb21tZW50cywgd2UgaWdub3JlIGNvbW1lbnRzLiAoZmFzdC9wYXJzZXIvdGFnLXdp
dGgtZXhjbGFtYXRpb24tcG9pbnQuaHRtbCkKLSAgICAgICAgICAgICAgICBpZiAocHRyWzBdICE9
ICchJyB8fCBpblZpZXdTb3VyY2VNb2RlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgbV9jdXJy
ZW50VG9rZW4udGFnTmFtZSA9IEF0b21pY1N0cmluZyhwdHIpOwotICAgICAgICAgICAgICAgICAg
ICBtX2N1cnJlbnRUb2tlbi5iZWdpblRhZyA9IGJlZ2luVGFnOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICBtX2Rlc3QgPSBtX2J1ZmZlcjsKLSAgICAgICAgICAgICAgICBzdGF0
ZS5zZXRUYWdTdGF0ZShTZWFyY2hBdHRyaWJ1dGUpOwotICAgICAgICAgICAgICAgIGNCdWZmZXJQ
b3MgPSAwOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAg
ICAgICAgY2FzZSBTZWFyY2hBdHRyaWJ1dGU6Ci0gICAgICAgICAgICB3aGlsZSAoIXNyYy5pc0Vt
cHR5KCkpIHsKLSAgICAgICAgICAgICAgICBVQ2hhciBjdXJjaGFyID0gKnNyYzsKLSAgICAgICAg
ICAgICAgICAvLyBJbiB0aGlzIG1vZGUganVzdCBpZ25vcmUgYW55IHF1b3RlcyB3ZSBlbmNvdW50
ZXIgYW5kIHRyZWF0IHRoZW0gbGlrZSBzcGFjZXMuCi0gICAgICAgICAgICAgICAgaWYgKCFpc0FT
Q0lJU3BhY2UoY3VyY2hhcikgJiYgY3VyY2hhciAhPSAnXCcnICYmIGN1cmNoYXIgIT0gJyInKSB7
Ci0gICAgICAgICAgICAgICAgICAgIGlmIChjdXJjaGFyID09ICc8JyB8fCBjdXJjaGFyID09ICc+
JykKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLnNldFRhZ1N0YXRlKFNlYXJjaEVuZCk7
Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRl
LnNldFRhZ1N0YXRlKEF0dHJpYnV0ZU5hbWUpOwotCi0gICAgICAgICAgICAgICAgICAgIGNCdWZm
ZXJQb3MgPSAwOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgaWYgKGluVmlld1NvdXJjZU1vZGUoKSkKLSAgICAgICAgICAgICAg
ICAgICAgbV9jdXJyZW50VG9rZW4uYWRkVmlld1NvdXJjZUNoYXIoY3VyY2hhcik7Ci0gICAgICAg
ICAgICAgICAgc3JjLmFkdmFuY2UobV9saW5lTnVtYmVyKTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEF0dHJpYnV0ZU5hbWU6Ci0gICAgICAgIHsKLSAg
ICAgICAgICAgIG1fcmF3QXR0cmlidXRlQmVmb3JlVmFsdWUuY2xlYXIoKTsKLSAgICAgICAgICAg
IGludCBsbCA9IG1pbihzcmMubGVuZ3RoKCksIENCVUZMRU4gLSBjQnVmZmVyUG9zKTsKLSAgICAg
ICAgICAgIHdoaWxlIChsbC0tKSB7Ci0gICAgICAgICAgICAgICAgVUNoYXIgY3VyY2hhciA9ICpz
cmM7Ci0gICAgICAgICAgICAgICAgLy8gSWYgd2UgZW5jb3VudGVyIGEgIi8iIHdoZW4gc2Nhbm5p
bmcgYW4gYXR0cmlidXRlIG5hbWUsIHRyZWF0IGl0IGFzIGEgZGVsaW1pdGVyLiAgVGhpcyBhbGxv
d3MgdGhlCi0gICAgICAgICAgICAgICAgLy8gY2FzZXMgbGlrZSA8aW5wdXQgdHlwZT1jaGVja2Jv
eCBjaGVja2VkLz4gdG8gd29yayAoYW5kIGFjY29tbW9kYXRlcyBYTUwtc3R5bGUgc3ludGF4IGFz
IHBlciBIVE1MNSkuCi0gICAgICAgICAgICAgICAgaWYgKGN1cmNoYXIgPD0gJz4nICYmIChjdXJj
aGFyID49ICc8JyB8fCBpc0FTQ0lJU3BhY2UoY3VyY2hhcikgfHwgY3VyY2hhciA9PSAnLycpKSB7
Ci0gICAgICAgICAgICAgICAgICAgIG1fY0J1ZmZlcltjQnVmZmVyUG9zXSA9ICdcMCc7Ci0gICAg
ICAgICAgICAgICAgICAgIG1fYXR0ck5hbWUgPSBBdG9taWNTdHJpbmcobV9jQnVmZmVyKTsKLSAg
ICAgICAgICAgICAgICAgICAgbV9kZXN0ID0gbV9idWZmZXI7Ci0gICAgICAgICAgICAgICAgICAg
ICptX2Rlc3QrKyA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIHN0YXRlLnNldFRhZ1N0YXRlKFNl
YXJjaEVxdWFsKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGluVmlld1NvdXJjZU1vZGUoKSkK
LSAgICAgICAgICAgICAgICAgICAgICAgIG1fY3VycmVudFRva2VuLmFkZFZpZXdTb3VyY2VDaGFy
KCdhJyk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgICAgIC8vIHRvbG93ZXIoKSBzaG93cyB1cCBvbiBwcm9maWxlcy4gVGhpcyBp
cyBmYXN0ZXIhCi0gICAgICAgICAgICAgICAgaWYgKGN1cmNoYXIgPj0gJ0EnICYmIGN1cmNoYXIg
PD0gJ1onICYmICFpblZpZXdTb3VyY2VNb2RlKCkpCi0gICAgICAgICAgICAgICAgICAgIG1fY0J1
ZmZlcltjQnVmZmVyUG9zKytdID0gY3VyY2hhciArICgnYScgLSAnQScpOwotICAgICAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgbV9jQnVmZmVyW2NCdWZmZXJQb3MrK10gPSBj
dXJjaGFyOwotCi0gICAgICAgICAgICAgICAgbV9yYXdBdHRyaWJ1dGVCZWZvcmVWYWx1ZS5hcHBl
bmQoY3VyY2hhcik7Ci0gICAgICAgICAgICAgICAgc3JjLmFkdmFuY2UobV9saW5lTnVtYmVyKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChjQnVmZmVyUG9zID09IENCVUZMRU4pIHsK
LSAgICAgICAgICAgICAgICBtX2NCdWZmZXJbY0J1ZmZlclBvc10gPSAnXDAnOwotICAgICAgICAg
ICAgICAgIG1fYXR0ck5hbWUgPSBBdG9taWNTdHJpbmcobV9jQnVmZmVyKTsKLSAgICAgICAgICAg
ICAgICBtX2Rlc3QgPSBtX2J1ZmZlcjsKLSAgICAgICAgICAgICAgICAqbV9kZXN0KysgPSAwOwot
ICAgICAgICAgICAgICAgIHN0YXRlLnNldFRhZ1N0YXRlKFNlYXJjaEVxdWFsKTsKLSAgICAgICAg
ICAgICAgICBpZiAoaW5WaWV3U291cmNlTW9kZSgpKQotICAgICAgICAgICAgICAgICAgICBtX2N1
cnJlbnRUb2tlbi5hZGRWaWV3U291cmNlQ2hhcignYScpOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBTZWFyY2hFcXVhbDoKLSAgICAg
ICAgICAgIHdoaWxlICghc3JjLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgICAgIFVDaGFyIGN1
cmNoYXIgPSAqc3JjOwotCi0gICAgICAgICAgICAgICAgaWYgKGxhc3RJc1NsYXNoICYmIGN1cmNo
YXIgPT0gJz4nKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgYSBxdWlyayAod2l0
aCBhIGxvbmcgc2FkIGhpc3RvcnkpLiAgV2UgaGF2ZSB0byBkbyB0aGlzCi0gICAgICAgICAgICAg
ICAgICAgIC8vIHNpbmNlIHdpZGdldHMgZG8gPHNjcmlwdCBzcmM9ImZvby5qcyIvPiBhbmQgZXhw
ZWN0IHRoZSB0YWcgdG8gY2xvc2UuCi0gICAgICAgICAgICAgICAgICAgIGlmIChtX2N1cnJlbnRU
b2tlbi50YWdOYW1lID09IHNjcmlwdFRhZykKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fY3Vy
cmVudFRva2VuLnNlbGZDbG9zaW5nVGFnID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgbV9j
dXJyZW50VG9rZW4uYnJva2VuWE1MU3R5bGUgPSB0cnVlOwotICAgICAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgICAgIC8vIEluIHRoaXMgbW9kZSBqdXN0IGlnbm9yZSBhbnkgcXVvdGVzIG9y
IHNsYXNoZXMgd2UgZW5jb3VudGVyIGFuZCB0cmVhdCB0aGVtIGxpa2Ugc3BhY2VzLgotICAgICAg
ICAgICAgICAgIGlmICghaXNBU0NJSVNwYWNlKGN1cmNoYXIpICYmIGN1cmNoYXIgIT0gJ1wnJyAm
JiBjdXJjaGFyICE9ICciJyAmJiBjdXJjaGFyICE9ICcvJykgewotICAgICAgICAgICAgICAgICAg
ICBpZiAoY3VyY2hhciA9PSAnPScpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLnNl
dFRhZ1N0YXRlKFNlYXJjaFZhbHVlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpblZp
ZXdTb3VyY2VNb2RlKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9jdXJyZW50VG9r
ZW4uYWRkVmlld1NvdXJjZUNoYXIoY3VyY2hhcik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBt
X3Jhd0F0dHJpYnV0ZUJlZm9yZVZhbHVlLmFwcGVuZChjdXJjaGFyKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHNyYy5hZHZhbmNlUGFzdE5vbk5ld2xpbmUoKTsKLSAgICAgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fY3VycmVudFRva2VuLmFkZEF0
dHJpYnV0ZShtX2F0dHJOYW1lLCBlbXB0eUF0b20sIGluVmlld1NvdXJjZU1vZGUoKSk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBtX2Rlc3QgPSBtX2J1ZmZlcjsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHN0YXRlLnNldFRhZ1N0YXRlKFNlYXJjaEF0dHJpYnV0ZSk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBsYXN0SXNTbGFzaCA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgICAgIGxhc3RJc1NsYXNoID0gY3VyY2hhciA9PSAnLyc7Ci0KLSAgICAgICAgICAgICAgICBp
ZiAoaW5WaWV3U291cmNlTW9kZSgpKQotICAgICAgICAgICAgICAgICAgICBtX2N1cnJlbnRUb2tl
bi5hZGRWaWV3U291cmNlQ2hhcihjdXJjaGFyKTsKLSAgICAgICAgICAgICAgICBtX3Jhd0F0dHJp
YnV0ZUJlZm9yZVZhbHVlLmFwcGVuZChjdXJjaGFyKTsKLSAgICAgICAgICAgICAgICBzcmMuYWR2
YW5jZShtX2xpbmVOdW1iZXIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgU2VhcmNoVmFsdWU6Ci0gICAgICAgICAgICB3aGlsZSAoIXNyYy5pc0VtcHR5
KCkpIHsKLSAgICAgICAgICAgICAgICBVQ2hhciBjdXJjaGFyID0gKnNyYzsKLSAgICAgICAgICAg
ICAgICBpZiAoIWlzQVNDSUlTcGFjZShjdXJjaGFyKSkgewotICAgICAgICAgICAgICAgICAgICBp
ZiAoY3VyY2hhciA9PSAnXCcnIHx8IGN1cmNoYXIgPT0gJ1wiJykgewotICAgICAgICAgICAgICAg
ICAgICAgICAgdHF1b3RlID0gY3VyY2hhciA9PSAnXCInID8gRG91YmxlUXVvdGUgOiBTaW5nbGVR
dW90ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLnNldFRhZ1N0YXRlKFF1b3RlZFZh
bHVlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpblZpZXdTb3VyY2VNb2RlKCkpCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9jdXJyZW50VG9rZW4uYWRkVmlld1NvdXJjZUNo
YXIoY3VyY2hhcik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX3Jhd0F0dHJpYnV0ZUJlZm9y
ZVZhbHVlLmFwcGVuZChjdXJjaGFyKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNyYy5hZHZh
bmNlUGFzdE5vbk5ld2xpbmUoKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAg
ICAgICAgICAgICAgICAgICBzdGF0ZS5zZXRUYWdTdGF0ZShWYWx1ZSk7Ci0KLSAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChp
blZpZXdTb3VyY2VNb2RlKCkpCi0gICAgICAgICAgICAgICAgICAgIG1fY3VycmVudFRva2VuLmFk
ZFZpZXdTb3VyY2VDaGFyKGN1cmNoYXIpOwotICAgICAgICAgICAgICAgIG1fcmF3QXR0cmlidXRl
QmVmb3JlVmFsdWUuYXBwZW5kKGN1cmNoYXIpOwotICAgICAgICAgICAgICAgIHNyYy5hZHZhbmNl
KG1fbGluZU51bWJlcik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBRdW90ZWRWYWx1ZToKLSAgICAgICAgICAgIHdoaWxlICghc3JjLmlzRW1wdHkoKSkg
ewotICAgICAgICAgICAgICAgIGNoZWNrQnVmZmVyKCk7Ci0KLSAgICAgICAgICAgICAgICBVQ2hh
ciBjdXJjaGFyID0gKnNyYzsKLSAgICAgICAgICAgICAgICBpZiAoY3VyY2hhciA8PSAnPicgJiYg
IXNyYy5lc2NhcGVkKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGN1cmNoYXIgPT0gJz4n
ICYmIG1fYXR0ck5hbWUuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBI
YW5kbGUgYSBjYXNlIGxpa2UgPGltZyAnPi4gIEp1c3QgZ28gYWhlYWQgYW5kIGJlIHdpbGxpbmcK
LSAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRvIGNsb3NlIHRoZSB3aG9sZSB0YWcuICBEb24n
dCBjb25zdW1lIHRoZSBjaGFyYWN0ZXIgYW5kCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBq
dXN0IGdvIGJhY2sgaW50byBTZWFyY2hFbmQgd2hpbGUgaWdub3JpbmcgdGhlIHdob2xlCi0gICAg
ICAgICAgICAgICAgICAgICAgICAvLyB2YWx1ZS4KLSAgICAgICAgICAgICAgICAgICAgICAgIC8v
IEZJWE1FOiBOb3RlIHRoYXQgdGhpcyBpcyBhY3R1YWxseSBub3QgYSB2ZXJ5IGdvb2Qgc29sdXRp
b24uCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBJdCBkb2Vzbid0IGhhbmRsZSB0aGUgZ2Vu
ZXJhbCBjYXNlIG9mCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyB1bm1hdGNoZWQgcXVvdGVz
IGFtb25nIGF0dHJpYnV0ZXMgdGhhdCBoYXZlIG5hbWVzLiAtZHdoCi0gICAgICAgICAgICAgICAg
ICAgICAgICB3aGlsZSAobV9kZXN0ID4gbV9idWZmZXIgKyAxICYmIChtX2Rlc3RbLTFdID09ICdc
bicgfHwgbV9kZXN0Wy0xXSA9PSAnXHInKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBt
X2Rlc3QtLTsgLy8gcmVtb3ZlIHRyYWlsaW5nIG5ld2xpbmVzCi0gICAgICAgICAgICAgICAgICAg
ICAgICBBdG9taWNTdHJpbmcgYXR0cmlidXRlVmFsdWUobV9idWZmZXIgKyAxLCBtX2Rlc3QgLSBt
X2J1ZmZlciAtIDEpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFhdHRyaWJ1dGVWYWx1
ZS5jb250YWlucygnLycpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fYXR0ck5hbWUg
PSBhdHRyaWJ1dGVWYWx1ZTsgLy8gSnVzdCBtYWtlIHRoZSBuYW1lL3ZhbHVlIG1hdGNoLiAoRklY
TUU6IElzIHRoaXMgc29tZSBXaW5JRSBxdWlyaz8pCi0gICAgICAgICAgICAgICAgICAgICAgICBt
X2N1cnJlbnRUb2tlbi5hZGRBdHRyaWJ1dGUobV9hdHRyTmFtZSwgYXR0cmlidXRlVmFsdWUsIGlu
Vmlld1NvdXJjZU1vZGUoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5WaWV3U291
cmNlTW9kZSgpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fY3VycmVudFRva2VuLmFk
ZFZpZXdTb3VyY2VDaGFyKCd4Jyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5zZXRU
YWdTdGF0ZShTZWFyY2hBdHRyaWJ1dGUpOwotICAgICAgICAgICAgICAgICAgICAgICAgbV9kZXN0
ID0gbV9idWZmZXI7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0cXVvdGUgPSBOb1F1b3RlOwot
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgICAgICAgICBpZiAoY3VyY2hhciA9PSAnJicpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHNyYy5hZHZhbmNlUGFzdE5vbk5ld2xpbmUoKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHN0YXRlID0gcGFyc2VFbnRpdHkoc3JjLCBtX2Rlc3QsIHN0YXRlLCBjQnVmZmVyUG9z
LCB0cnVlLCB0cnVlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKCh0cXVvdGUgPT0gU2luZ2xl
UXVvdGUgJiYgY3VyY2hhciA9PSAnXCcnKSB8fCAodHF1b3RlID09IERvdWJsZVF1b3RlICYmIGN1
cmNoYXIgPT0gJ1wiJykpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNvbWUgPGlucHV0
IHR5cGU9aGlkZGVuPiByZWx5IG9uIHRyYWlsaW5nIHNwYWNlcy4gYXJnaAotICAgICAgICAgICAg
ICAgICAgICAgICAgd2hpbGUgKG1fZGVzdCA+IG1fYnVmZmVyICsgMSAmJiAobV9kZXN0Wy0xXSA9
PSAnXG4nIHx8IG1fZGVzdFstMV0gPT0gJ1xyJykpCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbV9kZXN0LS07IC8vIHJlbW92ZSB0cmFpbGluZyBuZXdsaW5lcwotICAgICAgICAgICAgICAg
ICAgICAgICAgQXRvbWljU3RyaW5nIGF0dHJpYnV0ZVZhbHVlKG1fYnVmZmVyICsgMSwgbV9kZXN0
IC0gbV9idWZmZXIgLSAxKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtX2F0dHJOYW1l
LmlzRW1wdHkoKSAmJiAhYXR0cmlidXRlVmFsdWUuY29udGFpbnMoJy8nKSkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG1fYXR0ck5hbWUgPSBhdHRyaWJ1dGVWYWx1ZTsgLy8gTWFrZSB0
aGUgbmFtZSBtYXRjaCB0aGUgdmFsdWUuIChGSVhNRTogSXMgdGhpcyBhIFdpbklFIHF1aXJrPykK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5WaWV3U291cmNlTW9kZSgpKQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2N1cnJlbnRUb2tlbi5hZGRWaWV3U291cmNl
Q2hhcigneCcpOwotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpblZpZXdTb3Vy
Y2VNb2RlKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9jdXJyZW50VG9rZW4uYWRk
Vmlld1NvdXJjZUNoYXIoJ3YnKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1fY3Vy
cmVudFRva2VuLmJlZ2luVGFnICYmIG1fY3VycmVudFRva2VuLnRhZ05hbWUgPT0gc2NyaXB0VGFn
ICYmICFpblZpZXdTb3VyY2VNb2RlKCkgJiYgIW1fdHJlZUJ1aWxkZXItPnNraXBNb2RlKCkgJiYg
bV9hdHRyTmFtZSA9PSBzcmNBdHRyKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgU3Ry
aW5nIGNvbnRleHQobV9yYXdBdHRyaWJ1dGVCZWZvcmVWYWx1ZS5kYXRhKCksIG1fcmF3QXR0cmli
dXRlQmVmb3JlVmFsdWUuc2l6ZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
eHNzQXVkaXRvcigpICYmICF4c3NBdWRpdG9yKCktPmNhbkxvYWRFeHRlcm5hbFNjcmlwdEZyb21T
cmMoYXR0cmlidXRlVmFsdWUpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRy
aWJ1dGVWYWx1ZSA9IGJsYW5rVVJMKCkuc3RyaW5nKCk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIG1fY3VycmVudFRva2VuLmFkZEF0dHJpYnV0
ZShtX2F0dHJOYW1lLCBhdHRyaWJ1dGVWYWx1ZSwgaW5WaWV3U291cmNlTW9kZSgpKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIG1fZGVzdCA9IG1fYnVmZmVyOwotICAgICAgICAgICAgICAgICAg
ICAgICAgc3RhdGUuc2V0VGFnU3RhdGUoU2VhcmNoQXR0cmlidXRlKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHRxdW90ZSA9IE5vUXVvdGU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAo
aW5WaWV3U291cmNlTW9kZSgpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fY3VycmVu
dFRva2VuLmFkZFZpZXdTb3VyY2VDaGFyKGN1cmNoYXIpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgc3JjLmFkdmFuY2VQYXN0Tm9uTmV3bGluZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgICAgICAqbV9kZXN0KysgPSBjdXJjaGFyOwotICAgICAgICAgICAgICAgIHNyYy5hZHZh
bmNlKG1fbGluZU51bWJlcik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSBWYWx1ZToKLSAgICAgICAgICAgIHdoaWxlICghc3JjLmlzRW1wdHkoKSkgewot
ICAgICAgICAgICAgICAgIGNoZWNrQnVmZmVyKCk7Ci0gICAgICAgICAgICAgICAgVUNoYXIgY3Vy
Y2hhciA9ICpzcmM7Ci0gICAgICAgICAgICAgICAgaWYgKGN1cmNoYXIgPD0gJz4nICYmICFzcmMu
ZXNjYXBlZCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIHBhcnNlIEVudGl0aWVzCi0gICAg
ICAgICAgICAgICAgICAgIGlmIChjdXJjaGFyID09ICcmJykgewotICAgICAgICAgICAgICAgICAg
ICAgICAgc3JjLmFkdmFuY2VQYXN0Tm9uTmV3bGluZSgpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgc3RhdGUgPSBwYXJzZUVudGl0eShzcmMsIG1fZGVzdCwgc3RhdGUsIGNCdWZmZXJQb3MsIHRy
dWUsIHRydWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgLy8gbm8gcXVvdGVzLiBFdmVyeSBzcGFjZSBt
ZWFucyBlbmQgb2YgdmFsdWUKLSAgICAgICAgICAgICAgICAgICAgLy8gJy8nIGRvZXMgbm90IGRl
bGltaXQgaW4gSUUhCi0gICAgICAgICAgICAgICAgICAgIGlmIChpc0FTQ0lJU3BhY2UoY3VyY2hh
cikgfHwgY3VyY2hhciA9PSAnPicpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIEF0b21pY1N0
cmluZyBhdHRyaWJ1dGVWYWx1ZShtX2J1ZmZlciArIDEsIG1fZGVzdCAtIG1fYnVmZmVyIC0gMSk7
Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtX2N1cnJlbnRUb2tlbi5iZWdpblRhZyAm
JiBtX2N1cnJlbnRUb2tlbi50YWdOYW1lID09IHNjcmlwdFRhZyAmJiAhaW5WaWV3U291cmNlTW9k
ZSgpICYmICFtX3RyZWVCdWlsZGVyLT5za2lwTW9kZSgpICYmIG1fYXR0ck5hbWUgPT0gc3JjQXR0
cikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBjb250ZXh0KG1fcmF3QXR0
cmlidXRlQmVmb3JlVmFsdWUuZGF0YSgpLCBtX3Jhd0F0dHJpYnV0ZUJlZm9yZVZhbHVlLnNpemUo
KSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHhzc0F1ZGl0b3IoKSAmJiAheHNz
QXVkaXRvcigpLT5jYW5Mb2FkRXh0ZXJuYWxTY3JpcHRGcm9tU3JjKGF0dHJpYnV0ZVZhbHVlKSkK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlVmFsdWUgPSBibGFua1VS
TCgpLnN0cmluZygpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAg
ICAgICAgICAgICBtX2N1cnJlbnRUb2tlbi5hZGRBdHRyaWJ1dGUobV9hdHRyTmFtZSwgYXR0cmli
dXRlVmFsdWUsIGluVmlld1NvdXJjZU1vZGUoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoaW5WaWV3U291cmNlTW9kZSgpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fY3Vy
cmVudFRva2VuLmFkZFZpZXdTb3VyY2VDaGFyKCd2Jyk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBtX2Rlc3QgPSBtX2J1ZmZlcjsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLnNldFRh
Z1N0YXRlKFNlYXJjaEF0dHJpYnV0ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
ICAgICptX2Rlc3QrKyA9IGN1cmNoYXI7Ci0gICAgICAgICAgICAgICAgc3JjLmFkdmFuY2UobV9s
aW5lTnVtYmVyKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIFNlYXJjaEVuZDoKLSAgICAgICAgewotICAgICAgICAgICAgd2hpbGUgKCFzcmMuaXNFbXB0
eSgpKSB7Ci0gICAgICAgICAgICAgICAgVUNoYXIgY2ggPSAqc3JjOwotICAgICAgICAgICAgICAg
IGlmIChjaCA9PSAnPicgfHwgY2ggPT0gJzwnKQotICAgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgICBpZiAoY2ggPT0gJy8nKQotICAgICAgICAgICAgICAgICAgICBtX2N1
cnJlbnRUb2tlbi5zZWxmQ2xvc2luZ1RhZyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgaWYgKGlu
Vmlld1NvdXJjZU1vZGUoKSkKLSAgICAgICAgICAgICAgICAgICAgbV9jdXJyZW50VG9rZW4uYWRk
Vmlld1NvdXJjZUNoYXIoY2gpOwotICAgICAgICAgICAgICAgIHNyYy5hZHZhbmNlKG1fbGluZU51
bWJlcik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoc3JjLmlzRW1wdHkoKSkKLSAg
ICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgc2VhcmNoQ291bnQgPSAwOyAvLyBT
dG9wIGxvb2tpbmcgZm9yICc8IS0tJyBzZXF1ZW5jZQotICAgICAgICAgICAgc3RhdGUuc2V0VGFn
U3RhdGUoTm9UYWcpOwotICAgICAgICAgICAgdHF1b3RlID0gTm9RdW90ZTsKLQotICAgICAgICAg
ICAgaWYgKCpzcmMgIT0gJzwnKQotICAgICAgICAgICAgICAgIHNyYy5hZHZhbmNlKG1fbGluZU51
bWJlcik7Ci0KLSAgICAgICAgICAgIGlmIChtX2N1cnJlbnRUb2tlbi50YWdOYW1lID09IG51bGxB
dG9tKSB7IC8vc3RvcCBpZiB0YWcgaXMgdW5rbm93bgotICAgICAgICAgICAgICAgIG1fY0J1ZmZl
clBvcyA9IGNCdWZmZXJQb3M7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHN0YXRlOwotICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICBBdG9taWNTdHJpbmcgdGFnTmFtZSA9IG1fY3VycmVudFRv
a2VuLnRhZ05hbWU7Ci0KLSAgICAgICAgICAgIC8vIEhhbmRsZSA8c2NyaXB0IHNyYz0iZm9vIi8+
IGxpa2UgTW96aWxsYS9PcGVyYS4gV2UgaGF2ZSB0byBkbyB0aGlzIG5vdyBmb3IgRGFzaGJvYXJk
Ci0gICAgICAgICAgICAvLyBjb21wYXRpYmlsaXR5LgotICAgICAgICAgICAgYm9vbCBpc1NlbGZD
bG9zaW5nU2NyaXB0ID0gbV9jdXJyZW50VG9rZW4uc2VsZkNsb3NpbmdUYWcgJiYgbV9jdXJyZW50
VG9rZW4uYmVnaW5UYWcgJiYgbV9jdXJyZW50VG9rZW4udGFnTmFtZSA9PSBzY3JpcHRUYWc7Ci0g
ICAgICAgICAgICBib29sIGJlZ2luVGFnID0gIW1fY3VycmVudFRva2VuLnNlbGZDbG9zaW5nVGFn
ICYmIG1fY3VycmVudFRva2VuLmJlZ2luVGFnOwotICAgICAgICAgICAgaWYgKG1fY3VycmVudFRv
a2VuLmJlZ2luVGFnICYmIG1fY3VycmVudFRva2VuLnRhZ05hbWUgPT0gc2NyaXB0VGFnICYmICFp
blZpZXdTb3VyY2VNb2RlKCkgJiYgIW1fdHJlZUJ1aWxkZXItPnNraXBNb2RlKCkpIHsKLSAgICAg
ICAgICAgICAgICBBdHRyaWJ1dGUqIGEgPSAwOwotICAgICAgICAgICAgICAgIG1fc2NyaXB0VGFn
U3JjQXR0clZhbHVlID0gU3RyaW5nKCk7Ci0gICAgICAgICAgICAgICAgbV9zY3JpcHRUYWdDaGFy
c2V0QXR0clZhbHVlID0gU3RyaW5nKCk7Ci0gICAgICAgICAgICAgICAgaWYgKG1fY3VycmVudFRv
a2VuLmF0dHJzICYmICFtX2ZyYWdtZW50KSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChkb2N1
bWVudCgpLT5mcmFtZSgpICYmIGRvY3VtZW50KCktPmZyYW1lKCktPnNjcmlwdCgpLT5jYW5FeGVj
dXRlU2NyaXB0cyhOb3RBYm91dFRvRXhlY3V0ZVNjcmlwdCkpIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICgoYSA9IG1fY3VycmVudFRva2VuLmF0dHJzLT5nZXRBdHRyaWJ1dGVJdGVtKHNy
Y0F0dHIpKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3NjcmlwdFRhZ1NyY0F0dHJW
YWx1ZSA9IGRvY3VtZW50KCktPmNvbXBsZXRlVVJMKGRlcHJlY2F0ZWRQYXJzZVVSTChhLT52YWx1
ZSgpKSkuc3RyaW5nKCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIFJlZlB0cjxOb2RlPiBuID0gcHJvY2Vzc1Rv
a2VuKCk7Ci0gICAgICAgICAgICBtX2NCdWZmZXJQb3MgPSBjQnVmZmVyUG9zOwotICAgICAgICAg
ICAgaWYgKG4gfHwgaW5WaWV3U291cmNlTW9kZSgpKSB7Ci0gICAgICAgICAgICAgICAgU3RhdGUg
c2F2ZWRTdGF0ZSA9IHN0YXRlOwotICAgICAgICAgICAgICAgIFNlZ21lbnRlZFN0cmluZyBzYXZl
ZFNyYyA9IHNyYzsKLSAgICAgICAgICAgICAgICBsb25nIHNhdmVkTGluZW5vID0gbV9saW5lTnVt
YmVyOwotICAgICAgICAgICAgICAgIGlmICgodGFnTmFtZSA9PSBwcmVUYWcgfHwgdGFnTmFtZSA9
PSBsaXN0aW5nVGFnKSAmJiAhaW5WaWV3U291cmNlTW9kZSgpKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGlmIChiZWdpblRhZykKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLnNldERpc2Nh
cmRMRih0cnVlKTsgLy8gRGlzY2FyZCB0aGUgZmlyc3QgTEYgYWZ0ZXIgd2Ugb3BlbiBhIHByZS4K
LSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRhZ05hbWUgPT0gc2NyaXB0VGFnKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIEFTU0VSVCghbV9zY3JpcHROb2RlKTsKLSAgICAgICAgICAgICAgICAg
ICAgbV9zY3JpcHROb2RlID0gc3RhdGljX3BvaW50ZXJfY2FzdDxIVE1MU2NyaXB0RWxlbWVudD4o
bik7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtX3NjcmlwdE5vZGUpCi0gICAgICAgICAgICAg
ICAgICAgICAgICBtX3NjcmlwdFRhZ0NoYXJzZXRBdHRyVmFsdWUgPSBtX3NjcmlwdE5vZGUtPnNj
cmlwdENoYXJzZXQoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGJlZ2luVGFnKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBtX3NlYXJjaFN0b3BwZXIgPSBzY3JpcHRFbmQ7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBtX3NlYXJjaFN0b3BwZXJMZW5ndGggPSA4OwotICAgICAgICAgICAg
ICAgICAgICAgICAgc3RhdGUuc2V0SW5TY3JpcHQodHJ1ZSk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBzdGF0ZSA9IHBhcnNlTm9uSFRNTFRleHQoc3JjLCBzdGF0ZSk7Ci0gICAgICAgICAgICAg
ICAgICAgIH0gZWxzZSBpZiAoaXNTZWxmQ2xvc2luZ1NjcmlwdCkgeyAvLyBIYW5kbGUgPHNjcmlw
dCBzcmM9ImZvbyIvPgotICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUuc2V0SW5TY3JpcHQo
dHJ1ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IHNjcmlwdEhhbmRsZXIoc3Rh
dGUpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0
YWdOYW1lID09IHN0eWxlVGFnKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChiZWdpblRhZykg
ewotICAgICAgICAgICAgICAgICAgICAgICAgbV9zZWFyY2hTdG9wcGVyID0gc3R5bGVFbmQ7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBtX3NlYXJjaFN0b3BwZXJMZW5ndGggPSA3OwotICAgICAg
ICAgICAgICAgICAgICAgICAgc3RhdGUuc2V0SW5TdHlsZSh0cnVlKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHN0YXRlID0gcGFyc2VOb25IVE1MVGV4dChzcmMsIHN0YXRlKTsKLSAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGFnTmFtZSA9PSB0ZXh0
YXJlYVRhZykgewotICAgICAgICAgICAgICAgICAgICBpZiAoYmVnaW5UYWcpIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIG1fc2VhcmNoU3RvcHBlciA9IHRleHRhcmVhRW5kOwotICAgICAgICAg
ICAgICAgICAgICAgICAgbV9zZWFyY2hTdG9wcGVyTGVuZ3RoID0gMTA7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBzdGF0ZS5zZXRJblRleHRBcmVhKHRydWUpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgc3RhdGUgPSBwYXJzZU5vbkhUTUxUZXh0KHNyYywgc3RhdGUpOwotICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0YWdOYW1lID09IHRpdGxlVGFn
KSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChiZWdpblRhZykgewotICAgICAgICAgICAgICAg
ICAgICAgICAgbV9zZWFyY2hTdG9wcGVyID0gdGl0bGVFbmQ7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBtX3NlYXJjaFN0b3BwZXJMZW5ndGggPSA3OwotICAgICAgICAgICAgICAgICAgICAgICAg
c3RhdGUuc2V0SW5UaXRsZSh0cnVlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0g
cGFyc2VOb25IVE1MVGV4dChzcmMsIHN0YXRlKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIH0gZWxzZSBpZiAodGFnTmFtZSA9PSB4bXBUYWcpIHsKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKGJlZ2luVGFnKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX3NlYXJj
aFN0b3BwZXIgPSB4bXBFbmQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX3NlYXJjaFN0b3Bw
ZXJMZW5ndGggPSA1OwotICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUuc2V0SW5YbXAodHJ1
ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IHBhcnNlTm9uSFRNTFRleHQoc3Jj
LCBzdGF0ZSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGVsc2Ug
aWYgKHRhZ05hbWUgPT0gaWZyYW1lVGFnKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChiZWdp
blRhZykgewotICAgICAgICAgICAgICAgICAgICAgICAgbV9zZWFyY2hTdG9wcGVyID0gaWZyYW1l
RW5kOwotICAgICAgICAgICAgICAgICAgICAgICAgbV9zZWFyY2hTdG9wcGVyTGVuZ3RoID0gODsK
LSAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLnNldEluSUZyYW1lKHRydWUpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgc3RhdGUgPSBwYXJzZU5vbkhUTUxUZXh0KHNyYywgc3RhdGUpOwot
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IGlmIChzcmMuaXNFbXB0eSgpICYmIChzdGF0ZS5pblRpdGxlKCkgfHwgaW5WaWV3U291cmNlTW9k
ZSgpKSAmJiAhc3RhdGUuaW5Db21tZW50KCkgJiYgIShzdGF0ZS5pblNjcmlwdCgpICYmIG1fY3Vy
cmVudFNjcmlwdFRhZ1N0YXJ0TGluZU51bWJlcikpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8g
V2UganVzdCBhdGUgdGhlIHJlc3Qgb2YgdGhlIGRvY3VtZW50IGFzIHRoZSAjdGV4dCBub2RlIHVu
ZGVyIHRoZSBzcGVjaWFsIHRhZyEKLSAgICAgICAgICAgICAgICAgICAgLy8gUmVzZXQgdGhlIHN0
YXRlIHRoZW4gcmV0b2tlbml6ZSB3aXRob3V0IHNwZWNpYWwgaGFuZGxpbmcuCi0gICAgICAgICAg
ICAgICAgICAgIC8vIExldCB0aGUgcGFyc2VyIGNsZWFuIHVwIHRoZSBtaXNzaW5nIGNsb3NlIHRh
Zy4KLSAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgaXMgaW5jb3JyZWN0LCBiZWNh
dXNlIHNyYy5pc0VtcHR5KCkgZG9lc24ndCBtZWFuIHdlJ3JlCi0gICAgICAgICAgICAgICAgICAg
IC8vIGF0IHRoZSBlbmQgb2YgdGhlIGRvY3VtZW50IHVubGVzcyBtX25vTW9yZURhdGEgaXMgYWxz
byB0cnVlLiBXZSBuZWVkCi0gICAgICAgICAgICAgICAgICAgIC8vIHRvIGRldGVjdCB0aGlzIGNh
c2UgZWxzZXdoZXJlLCBhbmQgc2F2ZSB0aGUgc3RhdGUgc29tZXdoZXJlIG90aGVyCi0gICAgICAg
ICAgICAgICAgICAgIC8vIHRoYW4gYSBsb2NhbCB2YXJpYWJsZS4KLSAgICAgICAgICAgICAgICAg
ICAgc3RhdGUgPSBzYXZlZFN0YXRlOwotICAgICAgICAgICAgICAgICAgICBzcmMgPSBzYXZlZFNy
YzsKLSAgICAgICAgICAgICAgICAgICAgbV9saW5lTnVtYmVyID0gc2F2ZWRMaW5lbm87Ci0gICAg
ICAgICAgICAgICAgICAgIG1fc2NyaXB0Q29kZVNpemUgPSAwOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICh0YWdOYW1lID09IHBsYWludGV4dFRhZykK
LSAgICAgICAgICAgICAgICBzdGF0ZS5zZXRJblBsYWluVGV4dChiZWdpblRhZyk7Ci0gICAgICAg
ICAgICByZXR1cm4gc3RhdGU7IC8vIEZpbmlzaGVkIHBhcnNpbmcgdGFnIQotICAgICAgICB9Ci0g
ICAgICAgIH0gLy8gZW5kIHN3aXRjaAotICAgIH0KLSAgICBtX2NCdWZmZXJQb3MgPSBjQnVmZmVy
UG9zOwotICAgIHJldHVybiBzdGF0ZTsKLX0KLQotaW5saW5lIGJvb2wgTGVnYWN5SFRNTERvY3Vt
ZW50UGFyc2VyOjpjb250aW51ZVByb2Nlc3NpbmcoaW50JiBwcm9jZXNzZWRDb3VudCwgZG91Ymxl
IHN0YXJ0VGltZSwgU3RhdGUgJnN0YXRlKQotewotICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gYmUg
Y2hlY2tpbmcgZWxhcHNlZCB0aW1lIHdpdGggZXZlcnkgY2hhcmFjdGVyLCBzbyB3ZSBvbmx5IGNo
ZWNrIGFmdGVyIHdlJ3ZlCi0gICAgLy8gcHJvY2Vzc2VkIGEgY2VydGFpbiBudW1iZXIgb2YgY2hh
cmFjdGVycy4KLSAgICBib29sIGFsbG93ZWRZaWVsZCA9IHN0YXRlLmFsbG93WWllbGQoKTsKLSAg
ICBzdGF0ZS5zZXRBbGxvd1lpZWxkKGZhbHNlKTsKLSAgICBpZiAoIXN0YXRlLmxvYWRpbmdFeHRT
Y3JpcHQoKSAmJiAhc3RhdGUuZm9yY2VTeW5jaHJvbm91cygpICYmICFtX2V4ZWN1dGluZ1Njcmlw
dCAmJiAocHJvY2Vzc2VkQ291bnQgPiBtX3Rva2VuaXplckNodW5rU2l6ZSB8fCBhbGxvd2VkWWll
bGQpKSB7Ci0gICAgICAgIHByb2Nlc3NlZENvdW50ID0gMDsKLSAgICAgICAgaWYgKGN1cnJlbnRU
aW1lKCkgLSBzdGFydFRpbWUgPiBtX3Rva2VuaXplclRpbWVEZWxheSkgewotICAgICAgICAgICAg
LyogRklYTUU6IFdlJ2QgbGlrZSB0byB5aWVsZCBhZ2dyZXNzaXZlbHkgdG8gZ2l2ZSBzdHlsZXNo
ZWV0cyB0aGUgb3Bwb3J0dW5pdHkgdG8KLSAgICAgICAgICAgICAgIGxvYWQsIGJ1dCB0aGlzIGh1
cnRzIG92ZXJhbGwgcGVyZm9ybWFuY2Ugb24gc2xvd2VyIG1hY2hpbmVzLiAgRm9yIG5vdyB0dXJu
IHRoaXMKLSAgICAgICAgICAgICAgIG9mZi4KLSAgICAgICAgICAgIHx8ICghZG9jdW1lbnQoKS0+
aGF2ZVN0eWxlc2hlZXRzTG9hZGVkKCkgJiYKLSAgICAgICAgICAgICAgICAoZG9jdW1lbnQoKS0+
ZG9jdW1lbnRFbGVtZW50KCktPmlkKCkgIT0gSURfSFRNTCB8fCBkb2N1bWVudCgpLT5ib2R5KCkp
KSkgeyovCi0gICAgICAgICAgICAvLyBTY2hlZHVsZSB0aGUgdGltZXIgdG8ga2VlcCBwcm9jZXNz
aW5nIGFzIHNvb24gYXMgcG9zc2libGUuCi0gICAgICAgICAgICBtX3RpbWVyLnN0YXJ0T25lU2hv
dCgwKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAg
IHByb2Nlc3NlZENvdW50Kys7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLS8vIFR1cm5zIHRoZSBz
dGF0ZW1hY2hpbmUgb25lIGNyYW5rIHVzaW5nIHRoZSBwYXNzZWQgaW4gU3RhdGUgb2JqZWN0Lgot
Ly8gVGhpcyBkb2VzIG5vdCBtb2RpZnkgbV9zdGF0ZSBkaXJlY3RseSBpbiBvcmRlciB0byBiZSBy
ZWVudHJhbnQuCi1BTFdBWVNfSU5MSU5FIHZvaWQgTGVnYWN5SFRNTERvY3VtZW50UGFyc2VyOjph
ZHZhbmNlKFN0YXRlJiBzdGF0ZSkKLXsKLSAgICAvLyBkbyB3ZSBuZWVkIHRvIGVubGFyZ2UgdGhl
IGJ1ZmZlcj8KLSAgICBjaGVja0J1ZmZlcigpOwotCi0gICAgVUNoYXIgY2MgPSAqbV9zcmM7Ci0K
LSAgICBib29sIHdhc1NraXBMRiA9IHN0YXRlLnNraXBMRigpOwotICAgIGlmICh3YXNTa2lwTEYp
Ci0gICAgICAgIHN0YXRlLnNldFNraXBMRihmYWxzZSk7Ci0KLSAgICBpZiAod2FzU2tpcExGICYm
IChjYyA9PSAnXG4nKSkKLSAgICAgICAgbV9zcmMuYWR2YW5jZSgpOwotICAgIGVsc2UgaWYgKHN0
YXRlLm5lZWRzU3BlY2lhbFdyaXRlSGFuZGxpbmcoKSkgewotICAgICAgICAvLyBpdCdzIGltcG9y
dGFudCB0byBrZWVwIG5lZWRzU3BlY2lhbFdyaXRlSGFuZGxpbmcgd2l0aCB0aGUgZmxhZ3MgdGhp
cyBibG9jayB0ZXN0cwotICAgICAgICBpZiAoc3RhdGUuaGFzRW50aXR5U3RhdGUoKSkKLSAgICAg
ICAgICAgIHN0YXRlID0gcGFyc2VFbnRpdHkobV9zcmMsIG1fZGVzdCwgc3RhdGUsIG1fY0J1ZmZl
clBvcywgZmFsc2UsIHN0YXRlLmhhc1RhZ1N0YXRlKCkpOwotICAgICAgICBlbHNlIGlmIChzdGF0
ZS5pblBsYWluVGV4dCgpKQotICAgICAgICAgICAgc3RhdGUgPSBwYXJzZVRleHQobV9zcmMsIHN0
YXRlKTsKLSAgICAgICAgZWxzZSBpZiAoc3RhdGUuaW5BbnlOb25IVE1MVGV4dCgpKQotICAgICAg
ICAgICAgc3RhdGUgPSBwYXJzZU5vbkhUTUxUZXh0KG1fc3JjLCBzdGF0ZSk7Ci0gICAgICAgIGVs
c2UgaWYgKHN0YXRlLmluQ29tbWVudCgpKQotICAgICAgICAgICAgc3RhdGUgPSBwYXJzZUNvbW1l
bnQobV9zcmMsIHN0YXRlKTsKLSAgICAgICAgZWxzZSBpZiAoc3RhdGUuaW5Eb2N0eXBlKCkpCi0g
ICAgICAgICAgICBzdGF0ZSA9IHBhcnNlRG9jdHlwZShtX3NyYywgc3RhdGUpOwotICAgICAgICBl
bHNlIGlmIChzdGF0ZS5pblNlcnZlcigpKQotICAgICAgICAgICAgc3RhdGUgPSBwYXJzZVNlcnZl
cihtX3NyYywgc3RhdGUpOwotICAgICAgICBlbHNlIGlmIChzdGF0ZS5pblByb2Nlc3NpbmdJbnN0
cnVjdGlvbigpKQotICAgICAgICAgICAgc3RhdGUgPSBwYXJzZVByb2Nlc3NpbmdJbnN0cnVjdGlv
bihtX3NyYywgc3RhdGUpOwotICAgICAgICBlbHNlIGlmIChzdGF0ZS5oYXNUYWdTdGF0ZSgpKQot
ICAgICAgICAgICAgc3RhdGUgPSBwYXJzZVRhZyhtX3NyYywgc3RhdGUpOwotICAgICAgICBlbHNl
IGlmIChzdGF0ZS5zdGFydFRhZygpKSB7Ci0gICAgICAgICAgICBzdGF0ZS5zZXRTdGFydFRhZyhm
YWxzZSk7Ci0KLSAgICAgICAgICAgIHN3aXRjaCAoY2MpIHsKLSAgICAgICAgICAgIGNhc2UgJy8n
OgotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAnISc6IHsKLSAgICAg
ICAgICAgICAgICAvLyA8IS0tIGNvbW1lbnQgLS0+IG9yIDwhRE9DVFlQRSAuLi4+Ci0gICAgICAg
ICAgICAgICAgc2VhcmNoQ291bnQgPSAxOyAvLyBMb29rIGZvciAnPCEtLScgc2VxdWVuY2UgdG8g
c3RhcnQgY29tbWVudCBvciAnPCFET0NUWVBFJyBzZXF1ZW5jZSB0byBzdGFydCBkb2N0eXBlCi0g
ICAgICAgICAgICAgICAgbV9kb2N0eXBlU2VhcmNoQ291bnQgPSAxOwotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2FzZSAnPyc6IHsKLSAgICAgICAg
ICAgICAgICAvLyB4bWwgcHJvY2Vzc2luZyBpbnN0cnVjdGlvbgotICAgICAgICAgICAgICAgIHN0
YXRlLnNldEluUHJvY2Vzc2luZ0luc3RydWN0aW9uKHRydWUpOwotICAgICAgICAgICAgICAgIHRx
dW90ZSA9IE5vUXVvdGU7Ci0gICAgICAgICAgICAgICAgc3RhdGUgPSBwYXJzZVByb2Nlc3NpbmdJ
bnN0cnVjdGlvbihtX3NyYywgc3RhdGUpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIGNhc2UgJyUnOgotICAgICAgICAgICAgICAgIGlmICghbV9i
cm9rZW5TZXJ2ZXIpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gPCUgc2VydmVyIHN0dWZmLCBo
YW5kbGUgYXMgY29tbWVudCAlPgotICAgICAgICAgICAgICAgICAgICBzdGF0ZS5zZXRJblNlcnZl
cih0cnVlKTsKLSAgICAgICAgICAgICAgICAgICAgdHF1b3RlID0gTm9RdW90ZTsKLSAgICAgICAg
ICAgICAgICAgICAgc3RhdGUgPSBwYXJzZVNlcnZlcihtX3NyYywgc3RhdGUpOwotICAgICAgICAg
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIC8v
IGVsc2UgZmFsbCB0aHJvdWdoCi0gICAgICAgICAgICBkZWZhdWx0OiB7Ci0gICAgICAgICAgICAg
ICAgaWYgKCgoY2MgPj0gJ2EnKSAmJiAoY2MgPD0gJ3onKSkgfHwgKChjYyA+PSAnQScpICYmIChj
YyA8PSAnWicpKSkgewotICAgICAgICAgICAgICAgICAgICAvLyBTdGFydCBvZiBhIFN0YXJ0LVRh
ZwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIEludmFs
aWQgdGFnCi0gICAgICAgICAgICAgICAgICAgIC8vIEFkZCBhcyBpcwotICAgICAgICAgICAgICAg
ICAgICAqbV9kZXN0ID0gJzwnOwotICAgICAgICAgICAgICAgICAgICBtX2Rlc3QrKzsKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIH07IC8vIGVuZCBjYXNlCi0KLSAgICAgICAgICAgIHByb2Nlc3NUb2tlbigp
OwotCi0gICAgICAgICAgICBtX2NCdWZmZXJQb3MgPSAwOwotICAgICAgICAgICAgc3RhdGUuc2V0
VGFnU3RhdGUoVGFnTmFtZSk7Ci0gICAgICAgICAgICBzdGF0ZSA9IHBhcnNlVGFnKG1fc3JjLCBz
dGF0ZSk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKGNjID09ICcmJyAmJiAhbV9zcmMuZXNj
YXBlZCgpKSB7Ci0gICAgICAgIG1fc3JjLmFkdmFuY2VQYXN0Tm9uTmV3bGluZSgpOwotICAgICAg
ICBzdGF0ZSA9IHBhcnNlRW50aXR5KG1fc3JjLCBtX2Rlc3QsIHN0YXRlLCBtX2NCdWZmZXJQb3Ms
IHRydWUsIHN0YXRlLmhhc1RhZ1N0YXRlKCkpOwotICAgIH0gZWxzZSBpZiAoY2MgPT0gJzwnICYm
ICFtX3NyYy5lc2NhcGVkKCkpIHsKLSAgICAgICAgbV9jdXJyZW50VGFnU3RhcnRMaW5lTnVtYmVy
ID0gbV9saW5lTnVtYmVyOwotICAgICAgICBtX3NyYy5hZHZhbmNlUGFzdE5vbk5ld2xpbmUoKTsK
LSAgICAgICAgc3RhdGUuc2V0U3RhcnRUYWcodHJ1ZSk7Ci0gICAgICAgIHN0YXRlLnNldERpc2Nh
cmRMRihmYWxzZSk7Ci0gICAgfSBlbHNlIGlmIChjYyA9PSAnXG4nIHx8IGNjID09ICdccicpIHsK
LSAgICAgICAgaWYgKHN0YXRlLmRpc2NhcmRMRigpKQotICAgICAgICAgICAgLy8gSWdub3JlIHRo
aXMgTEYKLSAgICAgICAgICAgIHN0YXRlLnNldERpc2NhcmRMRihmYWxzZSk7IC8vIFdlIGhhdmUg
ZGlzY2FyZGVkIDEgTEYKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAvLyBQcm9jZXNzIHRo
aXMgTEYKLSAgICAgICAgICAgICptX2Rlc3QrKyA9ICdcbic7Ci0gICAgICAgICAgICBpZiAoY2Mg
PT0gJ1xyJyAmJiAhbV9zcmMuZXhjbHVkZUxpbmVOdW1iZXJzKCkpCi0gICAgICAgICAgICAgICAg
bV9saW5lTnVtYmVyKys7Ci0gICAgICAgIH0KLQotICAgICAgICAvKiBDaGVjayBmb3IgTVMtRE9T
IENSTEYgc2VxdWVuY2UgKi8KLSAgICAgICAgaWYgKGNjID09ICdccicpCi0gICAgICAgICAgICBz
dGF0ZS5zZXRTa2lwTEYodHJ1ZSk7Ci0gICAgICAgIG1fc3JjLmFkdmFuY2UobV9saW5lTnVtYmVy
KTsKLSAgICB9IGVsc2UgewotICAgICAgICBzdGF0ZS5zZXREaXNjYXJkTEYoZmFsc2UpOwotICAg
ICAgICAqbV9kZXN0KysgPSBjYzsKLSAgICAgICAgbV9zcmMuYWR2YW5jZVBhc3ROb25OZXdsaW5l
KCk7Ci0gICAgfQotfQotCi12b2lkIExlZ2FjeUhUTUxEb2N1bWVudFBhcnNlcjo6d2lsbFdyaXRl
SFRNTChjb25zdCBTZWdtZW50ZWRTdHJpbmcmIHNvdXJjZSkKLXsKLSAgICAjaWYgRU5BQkxFKElO
U1BFQ1RPUikKLSAgICAgICAgaWYgKEluc3BlY3RvclRpbWVsaW5lQWdlbnQqIHRpbWVsaW5lQWdl
bnQgPSBkb2N1bWVudCgpLT5pbnNwZWN0b3JUaW1lbGluZUFnZW50KCkpCi0gICAgICAgICAgICB0
aW1lbGluZUFnZW50LT53aWxsV3JpdGVIVE1MKHNvdXJjZS5sZW5ndGgoKSwgbV9saW5lTnVtYmVy
KTsKLSAgICAjZW5kaWYKLX0KLQotdm9pZCBMZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXI6OmRpZFdy
aXRlSFRNTCgpCi17Ci0gICAgI2lmIEVOQUJMRShJTlNQRUNUT1IpCi0gICAgICAgIGlmIChJbnNw
ZWN0b3JUaW1lbGluZUFnZW50KiB0aW1lbGluZUFnZW50ID0gZG9jdW1lbnQoKS0+aW5zcGVjdG9y
VGltZWxpbmVBZ2VudCgpKQotICAgICAgICAgICAgdGltZWxpbmVBZ2VudC0+ZGlkV3JpdGVIVE1M
KG1fbGluZU51bWJlcik7Ci0gICAgI2VuZGlmCi19Ci0KLXZvaWQgTGVnYWN5SFRNTERvY3VtZW50
UGFyc2VyOjp3cml0ZShjb25zdCBTZWdtZW50ZWRTdHJpbmcmIHN0ciwgYm9vbCBhcHBlbmREYXRh
KQotewotICAgIGlmICghbV9idWZmZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX3Bh
cnNlclN0b3BwZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIFNlZ21lbnRlZFN0cmluZyBzb3Vy
Y2Uoc3RyKTsKLSAgICBpZiAobV9leGVjdXRpbmdTY3JpcHQpCi0gICAgICAgIHNvdXJjZS5zZXRF
eGNsdWRlTGluZU51bWJlcnMoKTsKLQotICAgIGlmICgobV9leGVjdXRpbmdTY3JpcHQgJiYgYXBw
ZW5kRGF0YSkgfHwgIW1fcGVuZGluZ1NjcmlwdHMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIC8vIGRv
bid0IHBhcnNlOyB3ZSB3aWxsIGRvIHRoaXMgbGF0ZXIKLSAgICAgICAgaWYgKG1fY3VycmVudFBy
ZXBlbmRpbmdTcmMpCi0gICAgICAgICAgICBtX2N1cnJlbnRQcmVwZW5kaW5nU3JjLT5hcHBlbmQo
c291cmNlKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBtX3BlbmRpbmdTcmMuYXBwZW5k
KHNvdXJjZSk7Ci0jaWYgUFJFTE9BRF9TQ0FOTkVSX0VOQUJMRUQKLSAgICAgICAgICAgIGlmICht
X3ByZWxvYWRTY2FubmVyICYmIG1fcHJlbG9hZFNjYW5uZXItPmluUHJvZ3Jlc3MoKSAmJiBhcHBl
bmREYXRhKQotICAgICAgICAgICAgICAgIG1fcHJlbG9hZFNjYW5uZXItPndyaXRlKHNvdXJjZSk7
Ci0jZW5kaWYKLSAgICAgICAgfQotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0jaWYgUFJFTE9B
RF9TQ0FOTkVSX0VOQUJMRUQKLSAgICBpZiAobV9wcmVsb2FkU2Nhbm5lciAmJiBtX3ByZWxvYWRT
Y2FubmVyLT5pblByb2dyZXNzKCkgJiYgYXBwZW5kRGF0YSkKLSAgICAgICAgbV9wcmVsb2FkU2Nh
bm5lci0+ZW5kKCk7Ci0jZW5kaWYKLQotICAgIGlmICghbV9zcmMuaXNFbXB0eSgpKQotICAgICAg
ICBtX3NyYy5hcHBlbmQoc291cmNlKTsKLSAgICBlbHNlCi0gICAgICAgIHNldFNyYyhzb3VyY2Up
OwotCi0gICAgLy8gT25jZSBhIHRpbWVyIGlzIHNldCwgaXQgaGFzIGNvbnRyb2wgb2Ygd2hlbiB0
aGUgcGFyc2VyIGNvbnRpbnVlcy4KLSAgICBpZiAobV90aW1lci5pc0FjdGl2ZSgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBib29sIHdhc0luV3JpdGUgPSBtX2luV3JpdGU7Ci0gICAgbV9pbldy
aXRlID0gdHJ1ZTsKLQotICAgIHdpbGxXcml0ZUhUTUwoc291cmNlKTsKLQotICAgIEZyYW1lKiBm
cmFtZSA9IGRvY3VtZW50KCktPmZyYW1lKCk7Ci0gICAgU3RhdGUgc3RhdGUgPSBtX3N0YXRlOwot
ICAgIGludCBwcm9jZXNzZWRDb3VudCA9IDA7Ci0gICAgZG91YmxlIHN0YXJ0VGltZSA9IGN1cnJl
bnRUaW1lKCk7Ci0KLSAgICB3aGlsZSAoIW1fc3JjLmlzRW1wdHkoKSAmJiAoIWZyYW1lIHx8ICFm
cmFtZS0+cmVkaXJlY3RTY2hlZHVsZXIoKS0+bG9jYXRpb25DaGFuZ2VQZW5kaW5nKCkpKSB7Ci0g
ICAgICAgIGlmICghY29udGludWVQcm9jZXNzaW5nKHByb2Nlc3NlZENvdW50LCBzdGFydFRpbWUs
IHN0YXRlKSkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBhZHZhbmNlKHN0YXRlKTsKLSAg
ICB9Ci0KLSAgICBkaWRXcml0ZUhUTUwoKTsKLQotICAgIG1faW5Xcml0ZSA9IHdhc0luV3JpdGU7
Ci0gICAgbV9zdGF0ZSA9IHN0YXRlOwotCi0gICAgaWYgKG1fbm9Nb3JlRGF0YSAmJiAhbV9pbldy
aXRlICYmICFzdGF0ZS5sb2FkaW5nRXh0U2NyaXB0KCkgJiYgIW1fZXhlY3V0aW5nU2NyaXB0ICYm
ICFtX3RpbWVyLmlzQWN0aXZlKCkpCi0gICAgICAgIGVuZCgpOyAvLyB0aGlzIGFjdHVhbGx5IGNh
dXNlcyB1cyB0byBiZSBkZWxldGVkCi0KLSAgICAvLyBBZnRlciBwYXJzaW5nLCBnbyBhaGVhZCBh
bmQgZGlzcGF0Y2ggaW1hZ2UgYmVmb3JlbG9hZCBldmVudHMsIGJ1dCBvbmx5IGlmIHdlJ3JlIGRv
aW5nCi0gICAgLy8gZG9jdW1lbnQgcGFyc2luZy4gIEZvciBkb2N1bWVudCBmcmFnbWVudHMgd2Ug
d2FpdCwgc2luY2UgdGhleSdsbCBsaWtlbHkgZW5kIHVwIGluIHRoZSBkb2N1bWVudCBieSB0aGUg
dGltZQotICAgIC8vIHRoZSBiZWZvcmVsb2FkIGV2ZW50cyBmaXJlLgotICAgIGlmICghbV9mcmFn
bWVudCkKLSAgICAgICAgSW1hZ2VMb2FkZXI6OmRpc3BhdGNoUGVuZGluZ0JlZm9yZUxvYWRFdmVu
dHMoKTsKLX0KLQotdm9pZCBMZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXI6Omluc2VydChjb25zdCBT
ZWdtZW50ZWRTdHJpbmcmIHNvdXJjZSkKLXsKLSAgICAvLyBGSVhNRTogZm9yY2VTeW5jaHJvbm91
cyBzaG91bGQgYWx3YXlzIGJlIHRoZSBzYW1lIGFzIHRoZSBib29sIHBhc3NlZCB0bwotICAgIC8v
IHdyaXRlKCkuICBIb3dldmVyIExlZ2FjeUhUTUxEb2N1bWVudFBhcnNlciB1c2VzIHdyaXRlKCIi
LCBmYWxzZSkgdG8gcHVtcAotICAgIC8vIHRoZSBwYXJzZXIgKGFmdGVyIHJ1bm5pbmcgZXh0ZXJu
YWwgc2NyaXB0cywgZXRjLikgdGh1cyBuZWNlc3NpdGF0aW5nIGEKLSAgICAvLyBzZXBhcmF0ZSBz
dGF0ZSBmb3IgZm9yY2VTeW5jaHJvbm91cy4KLSAgICBib29sIHdhc0ZvcmNlZFN5bmNocm9ub3Vz
ID0gZm9yY2VTeW5jaHJvbm91cygpOwotICAgIHNldEZvcmNlU3luY2hyb25vdXModHJ1ZSk7Ci0g
ICAgd3JpdGUoc291cmNlLCBmYWxzZSk7Ci0gICAgc2V0Rm9yY2VTeW5jaHJvbm91cyh3YXNGb3Jj
ZWRTeW5jaHJvbm91cyk7Ci19Ci0KLXZvaWQgTGVnYWN5SFRNTERvY3VtZW50UGFyc2VyOjphcHBl
bmQoY29uc3QgU2VnbWVudGVkU3RyaW5nJiBzb3VyY2UpCi17Ci0gICAgd3JpdGUoc291cmNlLCB0
cnVlKTsKLX0KLQotdm9pZCBMZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXI6OnN0b3BQYXJzaW5nKCkK
LXsKLSAgICBEb2N1bWVudFBhcnNlcjo6c3RvcFBhcnNpbmcoKTsKLSAgICBtX3RpbWVyLnN0b3Ao
KTsKLQotICAgIC8vIEZJWE1FOiBXaHkgaXMgTGVnYWN5SFRNTERvY3VtZW50UGFyc2VyIHRoZSBv
bmx5IERvY3VtZW50UGFyc2VyIHdoaWNoIGNhbGxzIGNoZWNrQ29tcGxldGVkPwotICAgIC8vIFRo
ZSBGcmFtZUxvYWRlciBuZWVkcyB0byBrbm93IHRoYXQgdGhlIHBhcnNlciBoYXMgZmluaXNoZWQg
d2l0aCBpdHMgZGF0YSwKLSAgICAvLyByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgaGFwcGVuZWQg
bmF0dXJhbGx5IG9yIGR1ZSB0byBtYW51YWwgaW50ZXJ2ZW50aW9uLgotICAgIGlmICghbV9mcmFn
bWVudCAmJiBkb2N1bWVudCgpLT5mcmFtZSgpKQotICAgICAgICBkb2N1bWVudCgpLT5mcmFtZSgp
LT5sb2FkZXIoKS0+Y2hlY2tDb21wbGV0ZWQoKTsKLX0KLQotYm9vbCBMZWdhY3lIVE1MRG9jdW1l
bnRQYXJzZXI6OnByb2Nlc3NpbmdEYXRhKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV90aW1lci5p
c0FjdGl2ZSgpIHx8IG1faW5Xcml0ZTsKLX0KLQotdm9pZCBMZWdhY3lIVE1MRG9jdW1lbnRQYXJz
ZXI6OnRpbWVyRmlyZWQoVGltZXI8TGVnYWN5SFRNTERvY3VtZW50UGFyc2VyPiopCi17Ci0gICAg
aWYgKGRvY3VtZW50KCktPnZpZXcoKSAmJiBkb2N1bWVudCgpLT52aWV3KCktPmxheW91dFBlbmRp
bmcoKSAmJiAhZG9jdW1lbnQoKS0+bWluaW11bUxheW91dERlbGF5KCkpIHsKLSAgICAgICAgLy8g
UmVzdGFydCB0aGUgdGltZXIgYW5kIGxldCBsYXlvdXQgd2luLiAgVGhpcyBpcyBiYXNpY2FsbHkg
YSB3YXkgb2YgZW5zdXJpbmcgdGhhdCB0aGUgbGF5b3V0Ci0gICAgICAgIC8vIHRpbWVyIGhhcyBo
aWdoZXIgcHJpb3JpdHkgdGhhbiBvdXIgdGltZXIuCi0gICAgICAgIG1fdGltZXIuc3RhcnRPbmVT
aG90KDApOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gSW52b2tlIHdyaXRlKCkg
YXMgdGhvdWdoIG1vcmUgZGF0YSBjYW1lIGluLiBUaGlzIG1pZ2h0IGNhdXNlIHVzIHRvIGdldCBk
ZWxldGVkLgotICAgIHdyaXRlKFNlZ21lbnRlZFN0cmluZygpLCB0cnVlKTsKLX0KLQotdm9pZCBM
ZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXI6OmVuZCgpCi17Ci0gICAgQVNTRVJUKCFtX3RpbWVyLmlz
QWN0aXZlKCkpOwotICAgIG1fdGltZXIuc3RvcCgpOyAvLyBPbmx5IGhlbHBzIGlmIGFzc2VydGlv
biBhYm92ZSBmaXJlcywgYnV0IGRvIGl0IGFueXdheS4KLQotICAgIGlmIChtX2J1ZmZlcikgewot
ICAgICAgICAvLyBwYXJzZVRhZyBpcyB1c2luZyB0aGUgYnVmZmVyIGZvciBkaWZmZXJlbnQgbWF0
dGVycwotICAgICAgICBpZiAoIW1fc3RhdGUuaGFzVGFnU3RhdGUoKSkKLSAgICAgICAgICAgIHBy
b2Nlc3NUb2tlbigpOwotCi0gICAgICAgIGZhc3RGcmVlKG1fc2NyaXB0Q29kZSk7Ci0gICAgICAg
IG1fc2NyaXB0Q29kZSA9IDA7Ci0gICAgICAgIG1fc2NyaXB0Q29kZVNpemUgPSBtX3NjcmlwdENv
ZGVDYXBhY2l0eSA9IG1fc2NyaXB0Q29kZVJlc3luYyA9IDA7Ci0KLSAgICAgICAgZmFzdEZyZWUo
bV9idWZmZXIpOwotICAgICAgICBtX2J1ZmZlciA9IDA7Ci0gICAgfQotCi0gICAgaWYgKCFpblZp
ZXdTb3VyY2VNb2RlKCkpCi0gICAgICAgIG1fdHJlZUJ1aWxkZXItPmZpbmlzaGVkKCk7Ci0gICAg
ZWxzZQotICAgICAgICBkb2N1bWVudCgpLT5maW5pc2hlZFBhcnNpbmcoKTsKLX0KLQotdm9pZCBM
ZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXI6OmZpbmlzaCgpCi17Ci0gICAgLy8gZG8gdGhpcyBhcyBs
b25nIGFzIHdlIGRvbid0IGZpbmQgbWF0Y2hpbmcgY29tbWVudCBlbmRzCi0gICAgd2hpbGUgKCht
X3N0YXRlLmluQ29tbWVudCgpIHx8IG1fc3RhdGUuaW5TZXJ2ZXIoKSkgJiYgbV9zY3JpcHRDb2Rl
ICYmIG1fc2NyaXB0Q29kZVNpemUpIHsKLSAgICAgICAgLy8gd2UndmUgZm91bmQgYW4gdW5tYXRj
aGVkIGNvbW1lbnQgc3RhcnQKLSAgICAgICAgaWYgKG1fc3RhdGUuaW5Db21tZW50KCkpCi0gICAg
ICAgICAgICBtX2Jyb2tlbkNvbW1lbnRzID0gdHJ1ZTsKLSAgICAgICAgZWxzZQotICAgICAgICAg
ICAgbV9icm9rZW5TZXJ2ZXIgPSB0cnVlOwotICAgICAgICBjaGVja1NjcmlwdEJ1ZmZlcigpOwot
ICAgICAgICBtX3NjcmlwdENvZGVbbV9zY3JpcHRDb2RlU2l6ZV0gPSAwOwotICAgICAgICBtX3Nj
cmlwdENvZGVbbV9zY3JpcHRDb2RlU2l6ZSArIDFdID0gMDsKLSAgICAgICAgaW50IHBvczsKLSAg
ICAgICAgU3RyaW5nIGZvb2Q7Ci0gICAgICAgIGlmIChtX3N0YXRlLmluU2NyaXB0KCkgfHwgbV9z
dGF0ZS5pblN0eWxlKCkgfHwgbV9zdGF0ZS5pblRleHRBcmVhKCkpCi0gICAgICAgICAgICBmb29k
ID0gU3RyaW5nKG1fc2NyaXB0Q29kZSwgbV9zY3JpcHRDb2RlU2l6ZSk7Ci0gICAgICAgIGVsc2Ug
aWYgKG1fc3RhdGUuaW5TZXJ2ZXIoKSkgewotICAgICAgICAgICAgZm9vZCA9ICI8IjsKLSAgICAg
ICAgICAgIGZvb2QuYXBwZW5kKG1fc2NyaXB0Q29kZSwgbV9zY3JpcHRDb2RlU2l6ZSk7Ci0gICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBwb3MgPSBmaW5kKG1fc2NyaXB0Q29kZSwgbV9zY3Jp
cHRDb2RlU2l6ZSwgJz4nKTsKLSAgICAgICAgICAgIGZvb2QgPSBTdHJpbmcobV9zY3JpcHRDb2Rl
ICsgcG9zICsgMSwgbV9zY3JpcHRDb2RlU2l6ZSAtIHBvcyAtIDEpOwotICAgICAgICB9Ci0gICAg
ICAgIGZhc3RGcmVlKG1fc2NyaXB0Q29kZSk7Ci0gICAgICAgIG1fc2NyaXB0Q29kZSA9IDA7Ci0g
ICAgICAgIG1fc2NyaXB0Q29kZVNpemUgPSBtX3NjcmlwdENvZGVDYXBhY2l0eSA9IG1fc2NyaXB0
Q29kZVJlc3luYyA9IDA7Ci0gICAgICAgIG1fc3RhdGUuc2V0SW5Db21tZW50KGZhbHNlKTsKLSAg
ICAgICAgbV9zdGF0ZS5zZXRJblNlcnZlcihmYWxzZSk7Ci0gICAgICAgIGlmICghZm9vZC5pc0Vt
cHR5KCkpCi0gICAgICAgICAgICB3cml0ZShmb29kLCB0cnVlKTsKLSAgICB9Ci0gICAgLy8gdGhp
cyBpbmRpY2F0ZXMgd2Ugd2lsbCBub3QgcmVjZWl2ZSBhbnkgbW9yZSBkYXRhLi4uIGJ1dCBpZiB3
ZSBhcmUgd2FpdGluZyBvbgotICAgIC8vIGFuIGV4dGVybmFsIHNjcmlwdCB0byBsb2FkLCB3ZSBj
YW4ndCBmaW5pc2ggcGFyc2luZyB1bnRpbCB0aGF0IGlzIGRvbmUKLSAgICBtX25vTW9yZURhdGEg
PSB0cnVlOwotICAgIGlmICghbV9pbldyaXRlICYmICFtX3N0YXRlLmxvYWRpbmdFeHRTY3JpcHQo
KSAmJiAhbV9leGVjdXRpbmdTY3JpcHQgJiYgIW1fdGltZXIuaXNBY3RpdmUoKSkKLSAgICAgICAg
ZW5kKCk7IC8vIHRoaXMgYWN0dWFsbHkgY2F1c2VzIHVzIHRvIGJlIGRlbGV0ZWQKLX0KLQotYm9v
bCBMZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXI6OmZpbmlzaFdhc0NhbGxlZCgpCi17Ci0gICAgcmV0
dXJuIG1fbm9Nb3JlRGF0YTsKLX0KLQotUGFzc1JlZlB0cjxOb2RlPiBMZWdhY3lIVE1MRG9jdW1l
bnRQYXJzZXI6OnByb2Nlc3NUb2tlbigpCi17Ci0gICAgaWYgKG1fZGVzdCA+IG1fYnVmZmVyKSB7
Ci0gICAgICAgIG1fY3VycmVudFRva2VuLnRleHQgPSBTdHJpbmdJbXBsOjpjcmVhdGVTdHJpcHBp
bmdOdWxsQ2hhcmFjdGVycyhtX2J1ZmZlciwgbV9kZXN0IC0gbV9idWZmZXIpOwotICAgICAgICBp
ZiAobV9jdXJyZW50VG9rZW4udGFnTmFtZSAhPSBjb21tZW50QXRvbSkKLSAgICAgICAgICAgIG1f
Y3VycmVudFRva2VuLnRhZ05hbWUgPSB0ZXh0QXRvbTsKLSAgICB9IGVsc2UgaWYgKG1fY3VycmVu
dFRva2VuLnRhZ05hbWUgPT0gbnVsbEF0b20pIHsKLSAgICAgICAgbV9jdXJyZW50VG9rZW4ucmVz
ZXQoKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgbV9kZXN0ID0gbV9idWZmZXI7
Ci0KLSAgICBSZWZQdHI8Tm9kZT4gbjsKLQotICAgIGlmICghbV9wYXJzZXJTdG9wcGVkKSB7Ci0g
ICAgICAgIGlmIChOYW1lZE5vZGVNYXAqIG1hcCA9IG1fY3VycmVudFRva2VuLmF0dHJzLmdldCgp
KQotICAgICAgICAgICAgbWFwLT5zaHJpbmtUb0xlbmd0aCgpOwotICAgICAgICAvLyBwYXNzIHRo
ZSB0b2tlbiBvdmVyIHRvIHRoZSBwYXJzZXIsIHRoZSBwYXJzZXIgRE9FUyBOT1QgZGVsZXRlIHRo
ZSB0b2tlbgotICAgICAgICBuID0gbV90cmVlQnVpbGRlci0+cGFyc2VUb2tlbigmbV9jdXJyZW50
VG9rZW4pOwotICAgIH0KLSAgICBtX2N1cnJlbnRUb2tlbi5yZXNldCgpOwotCi0gICAgcmV0dXJu
IG4ucmVsZWFzZSgpOwotfQotCi12b2lkIExlZ2FjeUhUTUxEb2N1bWVudFBhcnNlcjo6cHJvY2Vz
c0RvY3R5cGVUb2tlbigpCi17Ci0gICAgbV90cmVlQnVpbGRlci0+cGFyc2VEb2N0eXBlVG9rZW4o
Jm1fZG9jdHlwZVRva2VuKTsKLX0KLQotTGVnYWN5SFRNTERvY3VtZW50UGFyc2VyOjp+TGVnYWN5
SFRNTERvY3VtZW50UGFyc2VyKCkKLXsKLSAgICBBU1NFUlQoIW1faW5Xcml0ZSk7Ci0gICAgcmVz
ZXQoKTsKLX0KLQotCi12b2lkIExlZ2FjeUhUTUxEb2N1bWVudFBhcnNlcjo6ZW5sYXJnZUJ1ZmZl
cihpbnQgbGVuKQotewotICAgIC8vIFJlc2l6ZSBwb2xpY3k6IEFsd2F5cyBhdCBsZWFzdCBkb3Vi
bGUgdGhlIHNpemUgb2YgdGhlIGJ1ZmZlciBlYWNoIHRpbWUuCi0gICAgaW50IGRlbHRhID0gbWF4
KGxlbiwgbV9idWZmZXJTaXplKTsKLQotICAgIC8vIENoZWNrIGZvciBvdmVyZmxvdy4KLSAgICAv
LyBGb3Igbm93LCBoYW5kbGUgb3ZlcmZsb3cgdGhlIHNhbWUgd2F5IHdlIGhhbmRsZSBmYXN0UmVh
bGxvYyBmYWlsdXJlLCB3aXRoIENSQVNILgotICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4U2l6ZSA9
IElOVF9NQVggLyBzaXplb2YoVUNoYXIpOwotICAgIGlmIChkZWx0YSA+IG1heFNpemUgLSBtX2J1
ZmZlclNpemUpCi0gICAgICAgIENSQVNIKCk7Ci0KLSAgICBpbnQgbmV3U2l6ZSA9IG1fYnVmZmVy
U2l6ZSArIGRlbHRhOwotICAgIGludCBvbGRPZmZzZXQgPSBtX2Rlc3QgLSBtX2J1ZmZlcjsKLSAg
ICBtX2J1ZmZlciA9IHN0YXRpY19jYXN0PFVDaGFyKj4oZmFzdFJlYWxsb2MobV9idWZmZXIsIG5l
d1NpemUgKiBzaXplb2YoVUNoYXIpKSk7Ci0gICAgbV9kZXN0ID0gbV9idWZmZXIgKyBvbGRPZmZz
ZXQ7Ci0gICAgbV9idWZmZXJTaXplID0gbmV3U2l6ZTsKLX0KLQotdm9pZCBMZWdhY3lIVE1MRG9j
dW1lbnRQYXJzZXI6OmVubGFyZ2VTY3JpcHRCdWZmZXIoaW50IGxlbikKLXsKLSAgICAvLyBSZXNp
emUgcG9saWN5OiBBbHdheXMgYXQgbGVhc3QgZG91YmxlIHRoZSBzaXplIG9mIHRoZSBidWZmZXIg
ZWFjaCB0aW1lLgotICAgIGludCBkZWx0YSA9IG1heChsZW4sIG1fc2NyaXB0Q29kZUNhcGFjaXR5
KTsKLQotICAgIC8vIENoZWNrIGZvciBvdmVyZmxvdy4KLSAgICAvLyBGb3Igbm93LCBoYW5kbGUg
b3ZlcmZsb3cgdGhlIHNhbWUgd2F5IHdlIGhhbmRsZSBmYXN0UmVhbGxvYyBmYWlsdXJlLCB3aXRo
IENSQVNILgotICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4U2l6ZSA9IElOVF9NQVggLyBzaXplb2Yo
VUNoYXIpOwotICAgIGlmIChkZWx0YSA+IG1heFNpemUgLSBtX3NjcmlwdENvZGVDYXBhY2l0eSkK
LSAgICAgICAgQ1JBU0goKTsKLQotICAgIGludCBuZXdTaXplID0gbV9zY3JpcHRDb2RlQ2FwYWNp
dHkgKyBkZWx0YTsKLSAgICAvLyBJZiB3ZSBhbGxvdyBmYXN0UmVhbGxvYyhwdHIsIDApLCBpdCB3
aWxsIGNhbGwgQ1JBU0goKS4gV2UgcnVuIGludG8gdGhpcwotICAgIC8vIGNhc2UgaWYgdGhlIEhU
TUwgYmVpbmcgcGFyc2VkIGJlZ2lucyB3aXRoICI8IS0tIiBhbmQgdGhlcmUncyBtb3JlIGRhdGEK
LSAgICAvLyBjb21pbmcuCi0gICAgaWYgKCFuZXdTaXplKSB7Ci0gICAgICAgIEFTU0VSVCghbV9z
Y3JpcHRDb2RlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1fc2NyaXB0Q29kZSA9
IHN0YXRpY19jYXN0PFVDaGFyKj4oZmFzdFJlYWxsb2MobV9zY3JpcHRDb2RlLCBuZXdTaXplICog
c2l6ZW9mKFVDaGFyKSkpOwotICAgIG1fc2NyaXB0Q29kZUNhcGFjaXR5ID0gbmV3U2l6ZTsKLX0K
LQotdm9pZCBMZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXI6OmV4ZWN1dGVTY3JpcHRzV2FpdGluZ0Zv
clN0eWxlc2hlZXRzKCkKLXsKLSAgICBBU1NFUlQoZG9jdW1lbnQoKS0+aGF2ZVN0eWxlc2hlZXRz
TG9hZGVkKCkpOwotCi0gICAgaWYgKG1faGFzU2NyaXB0c1dhaXRpbmdGb3JTdHlsZXNoZWV0cykK
LSAgICAgICAgbm90aWZ5RmluaXNoZWQoMCk7Ci19Ci0KLXZvaWQgTGVnYWN5SFRNTERvY3VtZW50
UGFyc2VyOjpub3RpZnlGaW5pc2hlZChDYWNoZWRSZXNvdXJjZSopCi17Ci0gICAgZXhlY3V0ZUV4
dGVybmFsU2NyaXB0c0lmUmVhZHkoKTsKLX0KLQotdm9pZCBMZWdhY3lIVE1MRG9jdW1lbnRQYXJz
ZXI6OmV4ZWN1dGVFeHRlcm5hbFNjcmlwdHNJZlJlYWR5KCkKLXsKLSAgICBBU1NFUlQoIW1fcGVu
ZGluZ1NjcmlwdHMuaXNFbXB0eSgpKTsKLQotICAgIC8vIE1ha2UgZXh0ZXJuYWwgc2NyaXB0cyB3
YWl0IGZvciBleHRlcm5hbCBzdHlsZXNoZWV0cy4KLSAgICAvLyBGSVhNRTogVGhpcyBuZWVkcyB0
byBiZSBkb25lIGZvciBpbmxpbmUgc2NyaXB0cyB0b28uCi0gICAgbV9oYXNTY3JpcHRzV2FpdGlu
Z0ZvclN0eWxlc2hlZXRzID0gIWRvY3VtZW50KCktPmhhdmVTdHlsZXNoZWV0c0xvYWRlZCgpOwot
ICAgIGlmIChtX2hhc1NjcmlwdHNXYWl0aW5nRm9yU3R5bGVzaGVldHMpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGJvb2wgZmluaXNoZWQgPSBmYWxzZTsKLQotICAgIGRvdWJsZSBzdGFydFRpbWUg
PSBjdXJyZW50VGltZSgpOwotICAgIHdoaWxlICghZmluaXNoZWQgJiYgbV9wZW5kaW5nU2NyaXB0
cy5maXJzdCgpLT5pc0xvYWRlZCgpKSB7Ci0gICAgICAgIGlmICghY29udGludWVFeGVjdXRpbmdF
eHRlcm5hbFNjcmlwdHMoc3RhcnRUaW1lKSkKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAg
IENhY2hlZFJlc291cmNlSGFuZGxlPENhY2hlZFNjcmlwdD4gY3MgPSBtX3BlbmRpbmdTY3JpcHRz
LnRha2VGaXJzdCgpOwotICAgICAgICBBU1NFUlQoY2FjaGUoKS0+ZGlzYWJsZWQoKSB8fCBjcy0+
YWNjZXNzQ291bnQoKSA+IDApOwotCi0gICAgICAgIHNldFNyYyhTZWdtZW50ZWRTdHJpbmcoKSk7
Ci0KLSAgICAgICAgLy8gbWFrZSBzdXJlIHdlIGZvcmdldCBhYm91dCB0aGUgc2NyaXB0IGJlZm9y
ZSB3ZSBleGVjdXRlIHRoZSBuZXcgb25lCi0gICAgICAgIC8vIGluZmluaXRlIHJlY3Vyc2lvbiBt
aWdodCBoYXBwZW4gb3RoZXJ3aXNlCi0gICAgICAgIFNjcmlwdFNvdXJjZUNvZGUgc291cmNlQ29k
ZShjcy5nZXQoKSk7Ci0gICAgICAgIGJvb2wgZXJyb3JPY2N1cnJlZCA9IGNzLT5lcnJvck9jY3Vy
cmVkKCk7Ci0gICAgICAgIGNzLT5yZW1vdmVDbGllbnQodGhpcyk7Ci0KLSAgICAgICAgUmVmUHRy
PE5vZGU+IG4gPSBtX3NjcmlwdE5vZGUucmVsZWFzZSgpOwotCi0gICAgICAgIGlmIChlcnJvck9j
Y3VycmVkKQotICAgICAgICAgICAgbi0+ZGlzcGF0Y2hFdmVudChFdmVudDo6Y3JlYXRlKGV2ZW50
TmFtZXMoKS5lcnJvckV2ZW50LCB0cnVlLCBmYWxzZSkpOwotICAgICAgICBlbHNlIHsKLSAgICAg
ICAgICAgIGlmIChzdGF0aWNfY2FzdDxIVE1MU2NyaXB0RWxlbWVudCo+KG4uZ2V0KCkpLT5zaG91
bGRFeGVjdXRlQXNKYXZhU2NyaXB0KCkpCi0gICAgICAgICAgICAgICAgbV9zdGF0ZSA9IHNjcmlw
dEV4ZWN1dGlvbihzb3VyY2VDb2RlLCBtX3N0YXRlKTsKLSNpZiBFTkFCTEUoWEhUTUxNUCkKLSAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBkb2N1bWVudCgpLT5zZXRTaG91bGRQcm9j
ZXNzTm9zY3JpcHRFbGVtZW50KHRydWUpOwotI2VuZGlmCi0gICAgICAgICAgICBuLT5kaXNwYXRj
aEV2ZW50KEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmxvYWRFdmVudCwgZmFsc2UsIGZhbHNl
KSk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBUaGUgc3RhdGUgb2YgbV9wZW5kaW5nU2NyaXB0
cy5pc0VtcHR5KCkgY2FuIGNoYW5nZSBpbnNpZGUgdGhlIHNjcmlwdEV4ZWN1dGlvbigpCi0gICAg
ICAgIC8vIGNhbGwgYWJvdmUsIHNvIHRlc3QgYWZ0ZXJ3YXJkcy4KLSAgICAgICAgZmluaXNoZWQg
PSBtX3BlbmRpbmdTY3JpcHRzLmlzRW1wdHkoKTsKLSAgICAgICAgaWYgKGZpbmlzaGVkKSB7Ci0g
ICAgICAgICAgICBBU1NFUlQoIW1faGFzU2NyaXB0c1dhaXRpbmdGb3JTdHlsZXNoZWV0cyk7Ci0g
ICAgICAgICAgICBtX3N0YXRlLnNldExvYWRpbmdFeHRTY3JpcHQoZmFsc2UpOwotICAgICAgICB9
IGVsc2UgaWYgKG1faGFzU2NyaXB0c1dhaXRpbmdGb3JTdHlsZXNoZWV0cykgewotICAgICAgICAg
ICAgLy8gbV9oYXNTY3JpcHRzV2FpdGluZ0ZvclN0eWxlc2hlZXRzIGZsYWcgbWlnaHQgaGF2ZSBj
aGFuZ2VkIGR1cmluZyB0aGUgc2NyaXB0IGV4ZWN1dGlvbi4KLSAgICAgICAgICAgIC8vIElmIGl0
IGRpZCB3ZSBhcmUgbm93IGJsb2NrZWQgd2FpdGluZyBmb3Igc3R5bGVzaGVldHMgYW5kIHNob3Vs
ZCBub3QgZXhlY3V0ZSBtb3JlIHNjcmlwdHMgdW50aWwgdGhleSBhcnJpdmUuCi0gICAgICAgICAg
ICBmaW5pc2hlZCA9IHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyAnbV9yZXF1ZXN0aW5n
U2NyaXB0JyBpcyB0cnVlIHdoZW4gd2UgYXJlIGNhbGxlZCBzeW5jaHJvbm91c2x5IGZyb20KLSAg
ICAgICAgLy8gc2NyaXB0SGFuZGxlcigpLiBJbiB0aGF0IGNhc2Ugc2NyaXB0SGFuZGxlcigpIHdp
bGwgdGFrZSBjYXJlCi0gICAgICAgIC8vIG9mIG1fcGVuZGluZ1NyYy4KLSAgICAgICAgaWYgKCFt
X3JlcXVlc3RpbmdTY3JpcHQpIHsKLSAgICAgICAgICAgIFNlZ21lbnRlZFN0cmluZyByZXN0ID0g
bV9wZW5kaW5nU3JjOwotICAgICAgICAgICAgbV9wZW5kaW5nU3JjLmNsZWFyKCk7Ci0gICAgICAg
ICAgICB3cml0ZShyZXN0LCBmYWxzZSk7Ci0gICAgICAgICAgICAvLyB3ZSBtaWdodCBiZSBkZWxl
dGVkIGF0IHRoaXMgcG9pbnQsIGRvIG5vdCBhY2Nlc3MgYW55IG1lbWJlcnMuCi0gICAgICAgIH0K
LSAgICB9Ci19Ci0KLXZvaWQgTGVnYWN5SFRNTERvY3VtZW50UGFyc2VyOjpleGVjdXRlRXh0ZXJu
YWxTY3JpcHRzVGltZXJGaXJlZChUaW1lcjxMZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXI+KikKLXsK
LSAgICBpZiAoZG9jdW1lbnQoKS0+dmlldygpICYmIGRvY3VtZW50KCktPnZpZXcoKS0+bGF5b3V0
UGVuZGluZygpICYmICFkb2N1bWVudCgpLT5taW5pbXVtTGF5b3V0RGVsYXkoKSkgewotICAgICAg
ICAvLyBSZXN0YXJ0IHRoZSB0aW1lciBhbmQgZG8gbGF5b3V0IGZpcnN0LgotICAgICAgICBtX2V4
dGVybmFsU2NyaXB0c1RpbWVyLnN0YXJ0T25lU2hvdCgwKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIC8vIENvbnRpbnVlIGV4ZWN1dGluZyBleHRlcm5hbCBzY3JpcHRzLgotICAgIGV4
ZWN1dGVFeHRlcm5hbFNjcmlwdHNJZlJlYWR5KCk7Ci19Ci0KLWJvb2wgTGVnYWN5SFRNTERvY3Vt
ZW50UGFyc2VyOjpjb250aW51ZUV4ZWN1dGluZ0V4dGVybmFsU2NyaXB0cyhkb3VibGUgc3RhcnRU
aW1lKQotewotICAgIGlmIChtX2V4dGVybmFsU2NyaXB0c1RpbWVyLmlzQWN0aXZlKCkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChjdXJyZW50VGltZSgpIC0gc3RhcnRUaW1lID4g
bV90b2tlbml6ZXJUaW1lRGVsYXkpIHsKLSAgICAgICAgLy8gU2NoZWR1bGUgdGhlIHRpbWVyIHRv
IGtlZXAgcHJvY2Vzc2luZyBhcyBzb29uIGFzIHBvc3NpYmxlLgotICAgICAgICBtX2V4dGVybmFs
U2NyaXB0c1RpbWVyLnN0YXJ0T25lU2hvdCgwKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBMZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXI6
OmlzV2FpdGluZ0ZvclNjcmlwdHMoKSBjb25zdAotewotICAgIHJldHVybiBtX3N0YXRlLmxvYWRp
bmdFeHRTY3JpcHQoKTsKLX0KLQotdm9pZCBMZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXI6OnNldFNy
Yyhjb25zdCBTZWdtZW50ZWRTdHJpbmcmIHNvdXJjZSkKLXsKLSAgICBtX3NyYyA9IHNvdXJjZTsK
LX0KLQotdm9pZCBMZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXI6OnBhcnNlRG9jdW1lbnRGcmFnbWVu
dChjb25zdCBTdHJpbmcmIHNvdXJjZSwgRG9jdW1lbnRGcmFnbWVudCogZnJhZ21lbnQsIEZyYWdt
ZW50U2NyaXB0aW5nUGVybWlzc2lvbiBzY3JpcHRpbmdQZXJtaXNzaW9uKQotewotICAgIExlZ2Fj
eUhUTUxEb2N1bWVudFBhcnNlciBwYXJzZXIoZnJhZ21lbnQsIHNjcmlwdGluZ1Blcm1pc3Npb24p
OwotICAgIHBhcnNlci5zZXRGb3JjZVN5bmNocm9ub3VzKHRydWUpOwotICAgIHBhcnNlci53cml0
ZShzb3VyY2UsIHRydWUpOwotICAgIHBhcnNlci5maW5pc2goKTsKLSAgICBBU1NFUlQoIXBhcnNl
ci5wcm9jZXNzaW5nRGF0YSgpKTsgLy8gbWFrZSBzdXJlIHdlJ3JlIGRvbmUgKHNlZSAzOTYzMTUx
KQotfQotCi1VQ2hhciBkZWNvZGVOYW1lZEVudGl0eShjb25zdCBjaGFyKiBuYW1lKQotewotICAg
IGNvbnN0IEVudGl0eSogZSA9IGZpbmRFbnRpdHkobmFtZSwgc3RybGVuKG5hbWUpKTsKLSAgICBy
ZXR1cm4gZSA/IGUtPmNvZGUgOiAwOwotfQotCi19CmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwv
TGVnYWN5SFRNTERvY3VtZW50UGFyc2VyLmggYi9XZWJDb3JlL2h0bWwvTGVnYWN5SFRNTERvY3Vt
ZW50UGFyc2VyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ5ZTY5NzYwMzExODFk
M2JmYWFhMmYyYTQxNDg5YTdiYWUyZjgxOWQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvV2ViQ29yZS9odG1sL0xlZ2FjeUhUTUxEb2N1bWVudFBhcnNlci5o
CisrKyAvZGV2L251bGwKQEAgLTEsNDUyICswLDAgQEAKLS8qCi0gICAgQ29weXJpZ2h0IChDKSAx
OTk3IE1hcnRpbiBKb25lcyAobWpvbmVzQGtkZS5vcmcpCi0gICAgICAgICAgICAgIChDKSAxOTk3
IFRvcmJlbiBXZWlzICh3ZWlzQGtkZS5vcmcpCi0gICAgICAgICAgICAgIChDKSAxOTk4IFdhbGRv
IEJhc3RpYW4gKGJhc3RpYW5Aa2RlLm9yZykKLSAgICAgICAgICAgICAgKEMpIDIwMDEgRGlyayBN
dWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCi0gICAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAy
MDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKLSAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICAgIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAotICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCi0gICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgICBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bwotICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
Ci0qLwotCi0jaWZuZGVmIExlZ2FjeUhUTUxEb2N1bWVudFBhcnNlcl9oCi0jZGVmaW5lIExlZ2Fj
eUhUTUxEb2N1bWVudFBhcnNlcl9oCi0KLSNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUNsaWVudC5o
IgotI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlSGFuZGxlLmgiCi0jaW5jbHVkZSAiRnJhZ21lbnRT
Y3JpcHRpbmdQZXJtaXNzaW9uLmgiCi0jaW5jbHVkZSAiTmFtZWROb2RlTWFwLmgiCi0jaW5jbHVk
ZSAiU2NyaXB0YWJsZURvY3VtZW50UGFyc2VyLmgiCi0jaW5jbHVkZSAiU2VnbWVudGVkU3RyaW5n
LmgiCi0jaW5jbHVkZSAiVGltZXIuaCIKLSNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KLSNpbmNsdWRl
IDx3dGYvT3duUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi1uYW1lc3BhY2UgV2Vi
Q29yZSB7Ci0KLWNsYXNzIENhY2hlZFNjcmlwdDsKLWNsYXNzIERvY3VtZW50RnJhZ21lbnQ7Ci1j
bGFzcyBEb2N1bWVudDsKLWNsYXNzIEhUTUxEb2N1bWVudDsKLWNsYXNzIEhUTUxTY3JpcHRFbGVt
ZW50OwotY2xhc3MgSFRNTFZpZXdTb3VyY2VEb2N1bWVudDsKLWNsYXNzIEZyYW1lVmlldzsKLWNs
YXNzIExlZ2FjeUhUTUxUcmVlQnVpbGRlcjsKLWNsYXNzIE5vZGU7Ci1jbGFzcyBMZWdhY3lQcmVs
b2FkU2Nhbm5lcjsKLWNsYXNzIFNjcmlwdFNvdXJjZUNvZGU7Ci0KLS8qKgotICogQGludGVybmFs
Ci0gKiByZXByZXNlbnRzIG9uZSBIVE1MIHRhZy4gQ29uc2lzdHMgb2YgYSBudW1lcmljYWwgaWQs
IGFuZCB0aGUgbGlzdAotICogb2YgYXR0cmlidXRlcy4gQ2FuIGFsc28gcmVwcmVzZW50IHRleHQu
IEluIHRoaXMgY2FzZSB0aGUgaWQgPSAwIGFuZAotICogdGV4dCBjb250YWlucyB0aGUgdGV4dC4K
LSAqLwotc3RydWN0IFRva2VuIHsKLSAgICBUb2tlbigpCi0gICAgICAgIDogYmVnaW5UYWcodHJ1
ZSkKLSAgICAgICAgLCBzZWxmQ2xvc2luZ1RhZyhmYWxzZSkKLSAgICAgICAgLCBicm9rZW5YTUxT
dHlsZShmYWxzZSkKLSAgICAgICAgLCBtX3NvdXJjZUluZm8oMCkKLSAgICB7IH0KLSAgICB+VG9r
ZW4oKSB7IH0KLQotICAgIHZvaWQgYWRkQXR0cmlidXRlKEF0b21pY1N0cmluZyYgYXR0ck5hbWUs
IGNvbnN0IEF0b21pY1N0cmluZyYgdiwgYm9vbCB2aWV3U291cmNlTW9kZSk7Ci0KLSAgICBib29s
IGlzT3BlblRhZyhjb25zdCBRdWFsaWZpZWROYW1lJiBmdWxsTmFtZSkgY29uc3QgeyByZXR1cm4g
YmVnaW5UYWcgJiYgZnVsbE5hbWUubG9jYWxOYW1lKCkgPT0gdGFnTmFtZTsgfQotICAgIGJvb2wg
aXNDbG9zZVRhZyhjb25zdCBRdWFsaWZpZWROYW1lJiBmdWxsTmFtZSkgY29uc3QgeyByZXR1cm4g
IWJlZ2luVGFnICYmIGZ1bGxOYW1lLmxvY2FsTmFtZSgpID09IHRhZ05hbWU7IH0KLQotICAgIHZv
aWQgcmVzZXQoKQotICAgIHsKLSAgICAgICAgYXR0cnMgPSAwOwotICAgICAgICB0ZXh0ID0gMDsK
LSAgICAgICAgdGFnTmFtZSA9IG51bGxBdG9tOwotICAgICAgICBiZWdpblRhZyA9IHRydWU7Ci0g
ICAgICAgIHNlbGZDbG9zaW5nVGFnID0gZmFsc2U7Ci0gICAgICAgIGJyb2tlblhNTFN0eWxlID0g
ZmFsc2U7Ci0gICAgICAgIGlmIChtX3NvdXJjZUluZm8pCi0gICAgICAgICAgICBtX3NvdXJjZUlu
Zm8tPmNsZWFyKCk7Ci0gICAgfQotCi0gICAgdm9pZCBhZGRWaWV3U291cmNlQ2hhcihVQ2hhciBj
KSB7IGlmICghbV9zb3VyY2VJbmZvLmdldCgpKSBtX3NvdXJjZUluZm8uc2V0KG5ldyBWZWN0b3I8
VUNoYXI+KTsgbV9zb3VyY2VJbmZvLT5hcHBlbmQoYyk7IH0KLQotICAgIFJlZlB0cjxOYW1lZE5v
ZGVNYXA+IGF0dHJzOwotICAgIFJlZlB0cjxTdHJpbmdJbXBsPiB0ZXh0OwotICAgIEF0b21pY1N0
cmluZyB0YWdOYW1lOwotICAgIGJvb2wgYmVnaW5UYWc7Ci0gICAgYm9vbCBzZWxmQ2xvc2luZ1Rh
ZzsKLSAgICBib29sIGJyb2tlblhNTFN0eWxlOwotICAgIE93blB0cjxWZWN0b3I8VUNoYXI+ID4g
bV9zb3VyY2VJbmZvOwotfTsKLQotZW51bSBEb2N0eXBlU3RhdGUgewotICAgIERvY3R5cGVCZWdp
biwKLSAgICBEb2N0eXBlQmVmb3JlTmFtZSwKLSAgICBEb2N0eXBlTmFtZSwKLSAgICBEb2N0eXBl
QWZ0ZXJOYW1lLAotICAgIERvY3R5cGVCZWZvcmVQdWJsaWNJRCwKLSAgICBEb2N0eXBlUHVibGlj
SUQsCi0gICAgRG9jdHlwZUFmdGVyUHVibGljSUQsCi0gICAgRG9jdHlwZUJlZm9yZVN5c3RlbUlE
LAotICAgIERvY3R5cGVTeXN0ZW1JRCwKLSAgICBEb2N0eXBlQWZ0ZXJTeXN0ZW1JRCwKLSAgICBE
b2N0eXBlQm9ndXMKLX07Ci0KLWNsYXNzIERvY3R5cGVUb2tlbiB7Ci1wdWJsaWM6Ci0gICAgRG9j
dHlwZVRva2VuKCkge30KLQotICAgIHZvaWQgcmVzZXQoKQotICAgIHsKLSAgICAgICAgbV9uYW1l
LmNsZWFyKCk7Ci0gICAgICAgIG1fcHVibGljSUQuY2xlYXIoKTsKLSAgICAgICAgbV9zeXN0ZW1J
RC5jbGVhcigpOwotICAgICAgICBtX3N0YXRlID0gRG9jdHlwZUJlZ2luOwotICAgICAgICBtX3Nv
dXJjZS5jbGVhcigpOwotICAgICAgICBtX2ZvcmNlUXVpcmtzID0gZmFsc2U7Ci0gICAgfQotCi0g
ICAgRG9jdHlwZVN0YXRlIHN0YXRlKCkgeyByZXR1cm4gbV9zdGF0ZTsgfQotICAgIHZvaWQgc2V0
U3RhdGUoRG9jdHlwZVN0YXRlIHMpIHsgbV9zdGF0ZSA9IHM7IH0KLQotICAgIFZlY3RvcjxVQ2hh
cj4gbV9uYW1lOwotICAgIFZlY3RvcjxVQ2hhcj4gbV9wdWJsaWNJRDsKLSAgICBWZWN0b3I8VUNo
YXI+IG1fc3lzdGVtSUQ7Ci0gICAgRG9jdHlwZVN0YXRlIG1fc3RhdGU7Ci0KLSAgICBWZWN0b3I8
VUNoYXI+IG1fc291cmNlOwotCi0gICAgYm9vbCBtX2ZvcmNlUXVpcmtzOyAvLyBVc2VkIGJ5IHRo
ZSBIVE1MNSBwYXJzZXIuCi19OwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vIEZJWE1F
OiBUaGlzIGNsYXNzIGRvZXMgdG9vIG11Y2guICBSaWdodCBub3cgaXQgaXMgYm90aCBhbiBIVE1M
IHRva2VuaXplciBhcyB3ZWxsCi0vLyBhcyBoYW5kbGluZyBhbGwgb2YgdGhlIG5vbi10b2tlbml6
ZXItc3BlY2lmaWMganVuayByZWxhdGVkIHRvIHRva2VuaXppbmcgSFRNTAotLy8gKGxpa2UgZGVh
bGluZyB3aXRoIDxzY3JpcHQ+IHRhZ3MpLiAgVGhlIEhUTUwgdG9rZW5pemVyIGJpdHMgc2hvdWxk
IGJlIHB1c2hlZAotLy8gZG93biBpbnRvIGEgc2VwYXJhdGUgSFRNTCB0b2tlbml6ZXIgY2xhc3Mu
Ci0KLWNsYXNzIExlZ2FjeUhUTUxEb2N1bWVudFBhcnNlciA6IHB1YmxpYyBTY3JpcHRhYmxlRG9j
dW1lbnRQYXJzZXIsIHB1YmxpYyBDYWNoZWRSZXNvdXJjZUNsaWVudCB7Ci1wdWJsaWM6Ci0gICAg
TGVnYWN5SFRNTERvY3VtZW50UGFyc2VyKEhUTUxEb2N1bWVudCosIGJvb2wgcmVwb3J0RXJyb3Jz
KTsKLSAgICBMZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXIoSFRNTFZpZXdTb3VyY2VEb2N1bWVudCop
OwotICAgIExlZ2FjeUhUTUxEb2N1bWVudFBhcnNlcihEb2N1bWVudEZyYWdtZW50KiwgRnJhZ21l
bnRTY3JpcHRpbmdQZXJtaXNzaW9uID0gRnJhZ21lbnRTY3JpcHRpbmdBbGxvd2VkKTsKLSAgICB2
aXJ0dWFsIH5MZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXIoKTsKLQotICAgIGJvb2wgZm9yY2VTeW5j
aHJvbm91cygpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuZm9yY2VTeW5jaHJvbm91cygpOyB9Ci0g
ICAgdm9pZCBzZXRGb3JjZVN5bmNocm9ub3VzKGJvb2wgZm9yY2UpOwotCi0gICAgc3RhdGljIHZv
aWQgcGFyc2VEb2N1bWVudEZyYWdtZW50KGNvbnN0IFN0cmluZyYsIERvY3VtZW50RnJhZ21lbnQq
LCBGcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24gPSBGcmFnbWVudFNjcmlwdGluZ0FsbG93ZWQp
OwotCi1wcm90ZWN0ZWQ6Ci0gICAgLy8gRXhwb3NlZCBmb3IgRlRQRGlyZWN0b3J5RG9jdW1lbnRQ
YXJzZXIKLSAgICB2aXJ0dWFsIHZvaWQgaW5zZXJ0KGNvbnN0IFNlZ21lbnRlZFN0cmluZyYpOwot
ICAgIHZpcnR1YWwgdm9pZCBmaW5pc2goKTsKLQotcHJpdmF0ZToKLSAgICAvLyBTY3JpcHRhYmxl
RG9jdW1lbnRQYXJzZXIKLSAgICB2aXJ0dWFsIHZvaWQgYXBwZW5kKGNvbnN0IFNlZ21lbnRlZFN0
cmluZyYpOwotICAgIHZpcnR1YWwgYm9vbCBmaW5pc2hXYXNDYWxsZWQoKTsKLSAgICB2aXJ0dWFs
IGJvb2wgaXNXYWl0aW5nRm9yU2NyaXB0cygpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBzdG9w
UGFyc2luZygpOwotICAgIHZpcnR1YWwgYm9vbCBwcm9jZXNzaW5nRGF0YSgpIGNvbnN0OwotICAg
IHZpcnR1YWwgYm9vbCBpc0V4ZWN1dGluZ1NjcmlwdCgpIGNvbnN0IHsgcmV0dXJuICEhbV9leGVj
dXRpbmdTY3JpcHQ7IH0KLQotICAgIHZpcnR1YWwgaW50IGxpbmVOdW1iZXIoKSBjb25zdCB7IHJl
dHVybiBtX2xpbmVOdW1iZXI7IH0KLSAgICB2aXJ0dWFsIGludCBjb2x1bW5OdW1iZXIoKSBjb25z
dCB7IHJldHVybiAxOyB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgcHJvY2Vzc2luZ0NvbnRlbnRXcml0
dGVuQnlTY3JpcHQoKSBjb25zdCB7IHJldHVybiBtX3NyYy5leGNsdWRlTGluZU51bWJlcnMoKTsg
fQotCi0gICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVTY3JpcHRzV2FpdGluZ0ZvclN0eWxlc2hlZXRz
KCk7Ci0KLSAgICB2aXJ0dWFsIExlZ2FjeUhUTUxUcmVlQnVpbGRlciogaHRtbFRyZWVCdWlsZGVy
KCkgY29uc3QgeyByZXR1cm4gbV90cmVlQnVpbGRlci5nZXQoKTsgfQotCi0gICAgY2xhc3MgU3Rh
dGU7Ci0KLSAgICB2b2lkIGJlZ2luKCk7Ci0gICAgdm9pZCBlbmQoKTsKLSAgICB2b2lkIHJlc2V0
KCk7Ci0KLSAgICB2b2lkIHdpbGxXcml0ZUhUTUwoY29uc3QgU2VnbWVudGVkU3RyaW5nJik7Ci0g
ICAgdm9pZCB3cml0ZShjb25zdCBTZWdtZW50ZWRTdHJpbmcmLCBib29sIGFwcGVuZERhdGEpOwot
ICAgIEFMV0FZU19JTkxJTkUgdm9pZCBhZHZhbmNlKFN0YXRlJik7Ci0gICAgdm9pZCBkaWRXcml0
ZUhUTUwoKTsKLQotICAgIFBhc3NSZWZQdHI8Tm9kZT4gcHJvY2Vzc1Rva2VuKCk7Ci0gICAgdm9p
ZCBwcm9jZXNzRG9jdHlwZVRva2VuKCk7Ci0KLSAgICBTdGF0ZSBwcm9jZXNzTGlzdGluZyhTZWdt
ZW50ZWRTdHJpbmcsIFN0YXRlKTsKLSAgICBTdGF0ZSBwYXJzZUNvbW1lbnQoU2VnbWVudGVkU3Ry
aW5nJiwgU3RhdGUpOwotICAgIFN0YXRlIHBhcnNlRG9jdHlwZShTZWdtZW50ZWRTdHJpbmcmLCBT
dGF0ZSk7Ci0gICAgU3RhdGUgcGFyc2VTZXJ2ZXIoU2VnbWVudGVkU3RyaW5nJiwgU3RhdGUpOwot
ICAgIFN0YXRlIHBhcnNlVGV4dChTZWdtZW50ZWRTdHJpbmcmLCBTdGF0ZSk7Ci0gICAgU3RhdGUg
cGFyc2VOb25IVE1MVGV4dChTZWdtZW50ZWRTdHJpbmcmLCBTdGF0ZSk7Ci0gICAgU3RhdGUgcGFy
c2VUYWcoU2VnbWVudGVkU3RyaW5nJiwgU3RhdGUpOwotICAgIFN0YXRlIHBhcnNlRW50aXR5KFNl
Z21lbnRlZFN0cmluZyYsIFVDaGFyKiYgZGVzdCwgU3RhdGUsIHVuc2lnbmVkJiBjQnVmZmVyUG9z
LCBib29sIHN0YXJ0LCBib29sIHBhcnNpbmdUYWcpOwotICAgIFN0YXRlIHBhcnNlUHJvY2Vzc2lu
Z0luc3RydWN0aW9uKFNlZ21lbnRlZFN0cmluZyYsIFN0YXRlKTsKLSAgICBTdGF0ZSBzY3JpcHRI
YW5kbGVyKFN0YXRlKTsKLSAgICBTdGF0ZSBzY3JpcHRFeGVjdXRpb24oY29uc3QgU2NyaXB0U291
cmNlQ29kZSYsIFN0YXRlKTsKLSAgICB2b2lkIHNldFNyYyhjb25zdCBTZWdtZW50ZWRTdHJpbmcm
KTsKLQotICAgIC8vIGNoZWNrIGlmIHdlIGhhdmUgZW5vdWdoIHNwYWNlIGluIHRoZSBidWZmZXIu
Ci0gICAgLy8gaWYgbm90IGVubGFyZ2UgaXQKLSAgICBpbmxpbmUgdm9pZCBjaGVja0J1ZmZlcihp
bnQgbGVuID0gMTApCi0gICAgewotICAgICAgICBpZiAoKG1fZGVzdCAtIG1fYnVmZmVyKSA+IG1f
YnVmZmVyU2l6ZSAtIGxlbikKLSAgICAgICAgICAgIGVubGFyZ2VCdWZmZXIobGVuKTsKLSAgICB9
Ci0KLSAgICBpbmxpbmUgdm9pZCBjaGVja1NjcmlwdEJ1ZmZlcihpbnQgbGVuID0gMTApCi0gICAg
ewotICAgICAgICBpZiAobV9zY3JpcHRDb2RlU2l6ZSArIGxlbiA+PSBtX3NjcmlwdENvZGVDYXBh
Y2l0eSkKLSAgICAgICAgICAgIGVubGFyZ2VTY3JpcHRCdWZmZXIobGVuKTsKLSAgICB9Ci0KLSAg
ICB2b2lkIGVubGFyZ2VCdWZmZXIoaW50IGxlbik7Ci0gICAgdm9pZCBlbmxhcmdlU2NyaXB0QnVm
ZmVyKGludCBsZW4pOwotCi0gICAgYm9vbCBjb250aW51ZVByb2Nlc3NpbmcoaW50JiBwcm9jZXNz
ZWRDb3VudCwgZG91YmxlIHN0YXJ0VGltZSwgU3RhdGUmKTsKLSAgICB2b2lkIHRpbWVyRmlyZWQo
VGltZXI8TGVnYWN5SFRNTERvY3VtZW50UGFyc2VyPiopOwotICAgIHZvaWQgYWxsRGF0YVByb2Nl
c3NlZCgpOwotCi0gICAgLy8gZnJvbSBDYWNoZWRSZXNvdXJjZUNsaWVudAotICAgIHZvaWQgbm90
aWZ5RmluaXNoZWQoQ2FjaGVkUmVzb3VyY2UqKTsKLQotICAgIHZvaWQgZXhlY3V0ZUV4dGVybmFs
U2NyaXB0c0lmUmVhZHkoKTsKLSAgICB2b2lkIGV4ZWN1dGVFeHRlcm5hbFNjcmlwdHNUaW1lckZp
cmVkKFRpbWVyPExlZ2FjeUhUTUxEb2N1bWVudFBhcnNlcj4qKTsKLSAgICBib29sIGNvbnRpbnVl
RXhlY3V0aW5nRXh0ZXJuYWxTY3JpcHRzKGRvdWJsZSBzdGFydFRpbWUpOwotCi0gICAgLy8gSW50
ZXJuYWwgYnVmZmVycwotICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8KLSAgICBVQ2hhciogbV9idWZm
ZXI7Ci0gICAgaW50IG1fYnVmZmVyU2l6ZTsKLSAgICBVQ2hhciogbV9kZXN0OwotCi0gICAgVG9r
ZW4gbV9jdXJyZW50VG9rZW47Ci0KLSAgICAvLyBUaGlzIGJ1ZmZlciBob2xkcyB0aGUgcmF3IGNo
YXJhY3RlcnMgd2UndmUgc2VlbiBiZXR3ZWVuIHRoZSBiZWdpbm5pbmcgb2YKLSAgICAvLyB0aGUg
YXR0cmlidXRlIG5hbWUgYW5kIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgdGhlIGF0dHJpYnV0ZSB2
YWx1ZS4KLSAgICBWZWN0b3I8VUNoYXIsIDMyPiBtX3Jhd0F0dHJpYnV0ZUJlZm9yZVZhbHVlOwot
Ci0gICAgLy8gRG9jdW1lbnRQYXJzZXIgZmxhZ3MKLSAgICAvLy8vLy8vLy8vLy8vLy8vLy8KLSAg
ICAvLyBhcmUgd2UgaW4gcXVvdGVzIHdpdGhpbiBhIGh0bWwgdGFnCi0gICAgZW51bSB7IE5vUXVv
dGUsIFNpbmdsZVF1b3RlLCBEb3VibGVRdW90ZSB9IHRxdW90ZTsKLQotICAgIC8vIEFyZSB3ZSBp
biBhICYuLi4gY2hhcmFjdGVyIGVudGl0eSBkZXNjcmlwdGlvbj8KLSAgICBlbnVtIEVudGl0eVN0
YXRlIHsKLSAgICAgICAgTm9FbnRpdHkgPSAwLAotICAgICAgICBTZWFyY2hFbnRpdHkgPSAxLAot
ICAgICAgICBOdW1lcmljU2VhcmNoID0gMiwKLSAgICAgICAgSGV4YWRlY2ltYWwgPSAzLAotICAg
ICAgICBEZWNpbWFsID0gNCwKLSAgICAgICAgRW50aXR5TmFtZSA9IDUsCi0gICAgICAgIFNlYXJj
aFNlbWljb2xvbiA9IDYKLSAgICB9OwotICAgIHVuc2lnbmVkIEVudGl0eVVuaWNvZGVWYWx1ZTsK
LQotICAgIGVudW0gVGFnU3RhdGUgewotICAgICAgICBOb1RhZyA9IDAsCi0gICAgICAgIFRhZ05h
bWUgPSAxLAotICAgICAgICBTZWFyY2hBdHRyaWJ1dGUgPSAyLAotICAgICAgICBBdHRyaWJ1dGVO
YW1lID0gMywKLSAgICAgICAgU2VhcmNoRXF1YWwgPSA0LAotICAgICAgICBTZWFyY2hWYWx1ZSA9
IDUsCi0gICAgICAgIFF1b3RlZFZhbHVlID0gNiwKLSAgICAgICAgVmFsdWUgPSA3LAotICAgICAg
ICBTZWFyY2hFbmQgPSA4Ci0gICAgfTsKLQotICAgIGNsYXNzIFN0YXRlIHsKLSAgICBwdWJsaWM6
Ci0gICAgICAgIFN0YXRlKCkgOiBtX2JpdHMoMCkgeyB9Ci0KLSAgICAgICAgVGFnU3RhdGUgdGFn
U3RhdGUoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxUYWdTdGF0ZT4obV9iaXRzICYgVGFn
TWFzayk7IH0KLSAgICAgICAgdm9pZCBzZXRUYWdTdGF0ZShUYWdTdGF0ZSB0KSB7IG1fYml0cyA9
IChtX2JpdHMgJiB+VGFnTWFzaykgfCB0OyB9Ci0gICAgICAgIEVudGl0eVN0YXRlIGVudGl0eVN0
YXRlKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8RW50aXR5U3RhdGU+KChtX2JpdHMgJiBF
bnRpdHlNYXNrKSA+PiBFbnRpdHlTaGlmdCk7IH0KLSAgICAgICAgdm9pZCBzZXRFbnRpdHlTdGF0
ZShFbnRpdHlTdGF0ZSBlKSB7IG1fYml0cyA9IChtX2JpdHMgJiB+RW50aXR5TWFzaykgfCAoZSA8
PCBFbnRpdHlTaGlmdCk7IH0KLQotICAgICAgICBib29sIGluU2NyaXB0KCkgY29uc3QgeyByZXR1
cm4gdGVzdEJpdChJblNjcmlwdCk7IH0KLSAgICAgICAgdm9pZCBzZXRJblNjcmlwdChib29sIHYp
IHsgc2V0Qml0KEluU2NyaXB0LCB2KTsgfQotICAgICAgICBib29sIGluU3R5bGUoKSBjb25zdCB7
IHJldHVybiB0ZXN0Qml0KEluU3R5bGUpOyB9Ci0gICAgICAgIHZvaWQgc2V0SW5TdHlsZShib29s
IHYpIHsgc2V0Qml0KEluU3R5bGUsIHYpOyB9Ci0gICAgICAgIGJvb2wgaW5YbXAoKSBjb25zdCB7
IHJldHVybiB0ZXN0Qml0KEluWG1wKTsgfQotICAgICAgICB2b2lkIHNldEluWG1wKGJvb2wgdikg
eyBzZXRCaXQoSW5YbXAsIHYpOyB9Ci0gICAgICAgIGJvb2wgaW5UaXRsZSgpIGNvbnN0IHsgcmV0
dXJuIHRlc3RCaXQoSW5UaXRsZSk7IH0KLSAgICAgICAgdm9pZCBzZXRJblRpdGxlKGJvb2wgdikg
eyBzZXRCaXQoSW5UaXRsZSwgdik7IH0KLSAgICAgICAgYm9vbCBpbklGcmFtZSgpIGNvbnN0IHsg
cmV0dXJuIHRlc3RCaXQoSW5JRnJhbWUpOyB9Ci0gICAgICAgIHZvaWQgc2V0SW5JRnJhbWUoYm9v
bCB2KSB7IHNldEJpdChJbklGcmFtZSwgdik7IH0KLSAgICAgICAgYm9vbCBpblBsYWluVGV4dCgp
IGNvbnN0IHsgcmV0dXJuIHRlc3RCaXQoSW5QbGFpblRleHQpOyB9Ci0gICAgICAgIHZvaWQgc2V0
SW5QbGFpblRleHQoYm9vbCB2KSB7IHNldEJpdChJblBsYWluVGV4dCwgdik7IH0KLSAgICAgICAg
Ym9vbCBpblByb2Nlc3NpbmdJbnN0cnVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIHRlc3RCaXQoSW5Q
cm9jZXNzaW5nSW5zdHJ1Y3Rpb24pOyB9Ci0gICAgICAgIHZvaWQgc2V0SW5Qcm9jZXNzaW5nSW5z
dHJ1Y3Rpb24oYm9vbCB2KSB7IHJldHVybiBzZXRCaXQoSW5Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24s
IHYpOyB9Ci0gICAgICAgIGJvb2wgaW5Db21tZW50KCkgY29uc3QgeyByZXR1cm4gdGVzdEJpdChJ
bkNvbW1lbnQpOyB9Ci0gICAgICAgIHZvaWQgc2V0SW5Db21tZW50KGJvb2wgdikgeyBzZXRCaXQo
SW5Db21tZW50LCB2KTsgfQotICAgICAgICBib29sIGluRG9jdHlwZSgpIGNvbnN0IHsgcmV0dXJu
IHRlc3RCaXQoSW5Eb2N0eXBlKTsgfQotICAgICAgICB2b2lkIHNldEluRG9jdHlwZShib29sIHYp
IHsgc2V0Qml0KEluRG9jdHlwZSwgdik7IH0KLSAgICAgICAgYm9vbCBpblRleHRBcmVhKCkgY29u
c3QgeyByZXR1cm4gdGVzdEJpdChJblRleHRBcmVhKTsgfQotICAgICAgICB2b2lkIHNldEluVGV4
dEFyZWEoYm9vbCB2KSB7IHNldEJpdChJblRleHRBcmVhLCB2KTsgfQotICAgICAgICBib29sIGVz
Y2FwZWQoKSBjb25zdCB7IHJldHVybiB0ZXN0Qml0KEVzY2FwZWQpOyB9Ci0gICAgICAgIHZvaWQg
c2V0RXNjYXBlZChib29sIHYpIHsgc2V0Qml0KEVzY2FwZWQsIHYpOyB9Ci0gICAgICAgIGJvb2wg
aW5TZXJ2ZXIoKSBjb25zdCB7IHJldHVybiB0ZXN0Qml0KEluU2VydmVyKTsgfQotICAgICAgICB2
b2lkIHNldEluU2VydmVyKGJvb2wgdikgeyBzZXRCaXQoSW5TZXJ2ZXIsIHYpOyB9Ci0gICAgICAg
IGJvb2wgc2tpcExGKCkgY29uc3QgeyByZXR1cm4gdGVzdEJpdChTa2lwTEYpOyB9Ci0gICAgICAg
IHZvaWQgc2V0U2tpcExGKGJvb2wgdikgeyBzZXRCaXQoU2tpcExGLCB2KTsgfQotICAgICAgICBi
b29sIHN0YXJ0VGFnKCkgY29uc3QgeyByZXR1cm4gdGVzdEJpdChTdGFydFRhZyk7IH0KLSAgICAg
ICAgdm9pZCBzZXRTdGFydFRhZyhib29sIHYpIHsgc2V0Qml0KFN0YXJ0VGFnLCB2KTsgfQotICAg
ICAgICBib29sIGRpc2NhcmRMRigpIGNvbnN0IHsgcmV0dXJuIHRlc3RCaXQoRGlzY2FyZExGKTsg
fQotICAgICAgICB2b2lkIHNldERpc2NhcmRMRihib29sIHYpIHsgc2V0Qml0KERpc2NhcmRMRiwg
dik7IH0KLSAgICAgICAgYm9vbCBhbGxvd1lpZWxkKCkgY29uc3QgeyByZXR1cm4gdGVzdEJpdChB
bGxvd1lpZWxkKTsgfQotICAgICAgICB2b2lkIHNldEFsbG93WWllbGQoYm9vbCB2KSB7IHNldEJp
dChBbGxvd1lpZWxkLCB2KTsgfQotICAgICAgICBib29sIGxvYWRpbmdFeHRTY3JpcHQoKSBjb25z
dCB7IHJldHVybiB0ZXN0Qml0KExvYWRpbmdFeHRTY3JpcHQpOyB9Ci0gICAgICAgIHZvaWQgc2V0
TG9hZGluZ0V4dFNjcmlwdChib29sIHYpIHsgc2V0Qml0KExvYWRpbmdFeHRTY3JpcHQsIHYpOyB9
Ci0gICAgICAgIGJvb2wgZm9yY2VTeW5jaHJvbm91cygpIGNvbnN0IHsgcmV0dXJuIHRlc3RCaXQo
Rm9yY2VTeW5jaHJvbm91cyk7IH0KLSAgICAgICAgdm9pZCBzZXRGb3JjZVN5bmNocm9ub3VzKGJv
b2wgdikgeyBzZXRCaXQoRm9yY2VTeW5jaHJvbm91cywgdik7IH0KLQotICAgICAgICBib29sIGlu
QW55Tm9uSFRNTFRleHQoKSBjb25zdCB7IHJldHVybiBtX2JpdHMgJiAoSW5TY3JpcHQgfCBJblN0
eWxlIHwgSW5YbXAgfCBJblRleHRBcmVhIHwgSW5UaXRsZSB8IEluSUZyYW1lKTsgfQotICAgICAg
ICBib29sIGhhc1RhZ1N0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9iaXRzICYgVGFnTWFzazsgfQot
ICAgICAgICBib29sIGhhc0VudGl0eVN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9iaXRzICYgRW50
aXR5TWFzazsgfQotCi0gICAgICAgIGJvb2wgbmVlZHNTcGVjaWFsV3JpdGVIYW5kbGluZygpIGNv
bnN0IHsgcmV0dXJuIG1fYml0cyAmIChJblNjcmlwdCB8IEluU3R5bGUgfCBJblhtcCB8IEluVGV4
dEFyZWEgfCBJblRpdGxlIHwgSW5JRnJhbWUgfCBUYWdNYXNrIHwgRW50aXR5TWFzayB8IEluUGxh
aW5UZXh0IHwgSW5Db21tZW50IHwgSW5Eb2N0eXBlIHwgSW5TZXJ2ZXIgfCBJblByb2Nlc3NpbmdJ
bnN0cnVjdGlvbiB8IFN0YXJ0VGFnKTsgfQotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgc3RhdGlj
IGNvbnN0IGludCBFbnRpdHlTaGlmdCA9IDQ7Ci0gICAgICAgIGVudW0gU3RhdGVCaXRzIHsKLSAg
ICAgICAgICAgIFRhZ01hc2sgPSAoMSA8PCA0KSAtIDEsCi0gICAgICAgICAgICBFbnRpdHlNYXNr
ID0gKDEgPDwgNykgLSAoMSA8PCA0KSwKLSAgICAgICAgICAgIEluU2NyaXB0ID0gMSA8PCA3LAot
ICAgICAgICAgICAgSW5TdHlsZSA9IDEgPDwgOCwKLSAgICAgICAgICAgIC8vIEJpdCA5IHVudXNl
ZAotICAgICAgICAgICAgSW5YbXAgPSAxIDw8IDEwLAotICAgICAgICAgICAgSW5UaXRsZSA9IDEg
PDwgMTEsCi0gICAgICAgICAgICBJblBsYWluVGV4dCA9IDEgPDwgMTIsCi0gICAgICAgICAgICBJ
blByb2Nlc3NpbmdJbnN0cnVjdGlvbiA9IDEgPDwgMTMsCi0gICAgICAgICAgICBJbkNvbW1lbnQg
PSAxIDw8IDE0LAotICAgICAgICAgICAgSW5UZXh0QXJlYSA9IDEgPDwgMTUsCi0gICAgICAgICAg
ICBFc2NhcGVkID0gMSA8PCAxNiwKLSAgICAgICAgICAgIEluU2VydmVyID0gMSA8PCAxNywKLSAg
ICAgICAgICAgIFNraXBMRiA9IDEgPDwgMTgsCi0gICAgICAgICAgICBTdGFydFRhZyA9IDEgPDwg
MTksCi0gICAgICAgICAgICBEaXNjYXJkTEYgPSAxIDw8IDIwLCAvLyBGSVhNRTogc2hvdWxkIGNs
YXJpZnkgZGlmZmVyZW5jZSBiZXR3ZWVuIHNraXAgYW5kIGRpc2NhcmQKLSAgICAgICAgICAgIEFs
bG93WWllbGQgPSAxIDw8IDIxLAotICAgICAgICAgICAgTG9hZGluZ0V4dFNjcmlwdCA9IDEgPDwg
MjIsCi0gICAgICAgICAgICBGb3JjZVN5bmNocm9ub3VzID0gMSA8PCAyMywKLSAgICAgICAgICAg
IEluSUZyYW1lID0gMSA8PCAyNCwKLSAgICAgICAgICAgIEluRG9jdHlwZSA9IDEgPDwgMjUKLSAg
ICAgICAgfTsKLQotICAgICAgICB2b2lkIHNldEJpdChTdGF0ZUJpdHMgYml0LCBib29sIHZhbHVl
KQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAodmFsdWUpCi0gICAgICAgICAgICAgICAgbV9i
aXRzIHw9IGJpdDsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBtX2JpdHMgJj0g
fmJpdDsKLSAgICAgICAgfQotICAgICAgICBib29sIHRlc3RCaXQoU3RhdGVCaXRzIGJpdCkgY29u
c3QgeyByZXR1cm4gbV9iaXRzICYgYml0OyB9Ci0KLSAgICAgICAgdW5zaWduZWQgbV9iaXRzOwot
ICAgIH07Ci0KLSAgICBTdGF0ZSBtX3N0YXRlOwotCi0gICAgRG9jdHlwZVRva2VuIG1fZG9jdHlw
ZVRva2VuOwotICAgIGludCBtX2RvY3R5cGVTZWFyY2hDb3VudDsKLSAgICBpbnQgbV9kb2N0eXBl
U2Vjb25kYXJ5U2VhcmNoQ291bnQ7Ci0KLSAgICBib29sIG1fYnJva2VuU2VydmVyOwotCi0gICAg
Ly8gTmFtZSBvZiBhbiBhdHRyaWJ1dGUgdGhhdCB3ZSBqdXN0IHNjYW5uZWQuCi0gICAgQXRvbWlj
U3RyaW5nIG1fYXR0ck5hbWU7Ci0KLSAgICAvLyBVc2VkIHRvIHN0b3JlIHRoZSBjb2RlIG9mIGEg
c2NyaXB0aW5nIHNlcXVlbmNlCi0gICAgVUNoYXIqIG1fc2NyaXB0Q29kZTsKLSAgICAvLyBTaXpl
IG9mIHRoZSBzY3JpcHQgc2VxdWVuemUgc3RvcmVkIGluIEByZWYgI3NjcmlwdENvZGUKLSAgICBp
bnQgbV9zY3JpcHRDb2RlU2l6ZTsKLSAgICAvLyBNYXhpbWFsIHNpemUgdGhhdCBjYW4gYmUgc3Rv
cmVkIGluIEByZWYgI3NjcmlwdENvZGUKLSAgICBpbnQgbV9zY3JpcHRDb2RlQ2FwYWNpdHk7Ci0g
ICAgLy8gcmVzeW5jIHBvaW50IG9mIHNjcmlwdCBjb2RlIHNpemUKLSAgICBpbnQgbV9zY3JpcHRD
b2RlUmVzeW5jOwotCi0gICAgLy8gU3RvcmVzIGNoYXJhY3RlcnMgaWYgd2UgYXJlIHNjYW5uaW5n
IGZvciBhIHN0cmluZyBsaWtlICI8L3NjcmlwdD4iCi0gICAgVUNoYXIgc2VhcmNoQnVmZmVyWzEw
XTsKLQotICAgIC8vIENvdW50cyB3aGVyZSB3ZSBhcmUgaW4gdGhlIHN0cmluZyB3ZSBhcmUgc2Nh
bm5pbmcgZm9yCi0gICAgaW50IHNlYXJjaENvdW50OwotICAgIC8vIHRoZSBzdG9wcGVyIHN0cmlu
ZwotICAgIGNvbnN0IGNoYXIqIG1fc2VhcmNoU3RvcHBlcjsKLSAgICBpbnQgbV9zZWFyY2hTdG9w
cGVyTGVuZ3RoOwotCi0gICAgLy8gaWYgbm8gbW9yZSBkYXRhIGlzIGNvbWluZywganVzdCBwYXJz
ZSB3aGF0IHdlIGhhdmUgKGluY2x1ZGluZyBleHQgc2NyaXB0cyB0aGF0Ci0gICAgLy8gbWF5IGJl
IHN0aWxsIGRvd25sb2FkaW5nKSBhbmQgZmluaXNoCi0gICAgYm9vbCBtX25vTW9yZURhdGE7Ci0g
ICAgLy8gVVJMIHRvIGdldCBzb3VyY2UgY29kZSBvZiBzY3JpcHQgZnJvbQotICAgIFN0cmluZyBt
X3NjcmlwdFRhZ1NyY0F0dHJWYWx1ZTsKLSAgICBTdHJpbmcgbV9zY3JpcHRUYWdDaGFyc2V0QXR0
clZhbHVlOwotICAgIC8vIHRoZSBIVE1MIGNvZGUgd2Ugd2lsbCBwYXJzZSBhZnRlciB0aGUgZXh0
ZXJuYWwgc2NyaXB0IHdlIGFyZSB3YWl0aW5nIGZvciBoYXMgbG9hZGVkCi0gICAgU2VnbWVudGVk
U3RyaW5nIG1fcGVuZGluZ1NyYzsKLQotICAgIC8vIHRoZSBIVE1MIGNvZGUgd2Ugd2lsbCBwYXJz
ZSBhZnRlciB0aGlzIHBhcnRpY3VsYXIgc2NyaXB0IGhhcwotICAgIC8vIGxvYWRlZCwgYnV0IGJl
Zm9yZSBhbGwgcGVuZGluZyBIVE1MCi0gICAgU2VnbWVudGVkU3RyaW5nKiBtX2N1cnJlbnRQcmVw
ZW5kaW5nU3JjOwotCi0gICAgLy8gdHJ1ZSBpZiB3ZSBhcmUgZXhlY3V0aW5nIGEgc2NyaXB0IHdo
aWxlIHBhcnNpbmcgYSBkb2N1bWVudC4gVGhpcyBjYXVzZXMgdGhlIHBhcnNpbmcgb2YKLSAgICAv
LyB0aGUgb3V0cHV0IG9mIHRoZSBzY3JpcHQgdG8gYmUgcG9zdHBvbmVkIHVudGlsIGFmdGVyIHRo
ZSBzY3JpcHQgaGFzIGZpbmlzaGVkIGV4ZWN1dGluZwotICAgIGludCBtX2V4ZWN1dGluZ1Njcmlw
dDsKLSAgICBEZXF1ZTxDYWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRTY3JpcHQ+ID4gbV9wZW5k
aW5nU2NyaXB0czsKLSAgICBSZWZQdHI8SFRNTFNjcmlwdEVsZW1lbnQ+IG1fc2NyaXB0Tm9kZTsK
LQotICAgIGJvb2wgbV9yZXF1ZXN0aW5nU2NyaXB0OwotICAgIGJvb2wgbV9oYXNTY3JpcHRzV2Fp
dGluZ0ZvclN0eWxlc2hlZXRzOwotCi0gICAgLy8gaWYgd2UgZm91bmQgb25lIGJyb2tlbiBjb21t
ZW50LCB0aGVyZSBhcmUgbW9zdCBsaWtlbHkgb3RoZXJzIGFzIHdlbGwKLSAgICAvLyBzdG9yZSBh
IGZsYWcgdG8gZ2V0IHJpZCBvZiB0aGUgTyhuXjIpIGJlaGF2aW91ciBpbiBzdWNoIGEgY2FzZS4K
LSAgICBib29sIG1fYnJva2VuQ29tbWVudHM7Ci0gICAgLy8gY3VycmVudCBsaW5lIG51bWJlcgot
ICAgIGludCBtX2xpbmVOdW1iZXI7Ci0gICAgaW50IG1fY3VycmVudFNjcmlwdFRhZ1N0YXJ0TGlu
ZU51bWJlcjsKLSAgICBpbnQgbV9jdXJyZW50VGFnU3RhcnRMaW5lTnVtYmVyOwotCi0gICAgZG91
YmxlIG1fdG9rZW5pemVyVGltZURlbGF5OwotICAgIGludCBtX3Rva2VuaXplckNodW5rU2l6ZTsK
LQotICAgIC8vIFRoZSB0aW1lciBmb3IgY29udGludWVkIHByb2Nlc3NpbmcuCi0gICAgVGltZXI8
TGVnYWN5SFRNTERvY3VtZW50UGFyc2VyPiBtX3RpbWVyOwotCi0gICAgLy8gVGhlIHRpbWVyIGZv
ciBjb250aW51ZWQgZXhlY3V0aW5nIGV4dGVybmFsIHNjcmlwdHMuCi0gICAgVGltZXI8TGVnYWN5
SFRNTERvY3VtZW50UGFyc2VyPiBtX2V4dGVybmFsU2NyaXB0c1RpbWVyOwotCi0vLyBUaGlzIGJ1
ZmZlciBjYW4gaG9sZCBhcmJpdHJhcmlseSBsb25nIHVzZXItZGVmaW5lZCBhdHRyaWJ1dGUgbmFt
ZXMsIHN1Y2ggYXMgaW4gRU1CRUQgdGFncy4KLS8vIFNvIGFueSBmaXhlZCBudW1iZXIgbWlnaHQg
YmUgdG9vIHNtYWxsLCBidXQgcmF0aGVyIHRoYW4gcmV3cml0aW5nIGFsbCB1c2FnZSBvZiB0aGlz
IGJ1ZmZlcgotLy8gd2UnbGwganVzdCBtYWtlIGl0IGxhcmdlIGVub3VnaCB0byBoYW5kbGUgYWxs
IGltYWdpbmFibGUgY2FzZXMuCi0jZGVmaW5lIENCVUZMRU4gMTAyNAotICAgIFVDaGFyIG1fY0J1
ZmZlcltDQlVGTEVOICsgMl07Ci0gICAgdW5zaWduZWQgaW50IG1fY0J1ZmZlclBvczsKLQotICAg
IFNlZ21lbnRlZFN0cmluZyBtX3NyYzsKLSAgICBPd25QdHI8TGVnYWN5SFRNTFRyZWVCdWlsZGVy
PiBtX3RyZWVCdWlsZGVyOwotICAgIGJvb2wgbV9pbldyaXRlOwotICAgIGJvb2wgbV9mcmFnbWVu
dDsKLSAgICBGcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24gbV9zY3JpcHRpbmdQZXJtaXNzaW9u
OwotCi0gICAgT3duUHRyPExlZ2FjeVByZWxvYWRTY2FubmVyPiBtX3ByZWxvYWRTY2FubmVyOwot
fTsKLQotVUNoYXIgZGVjb2RlTmFtZWRFbnRpdHkoY29uc3QgY2hhciopOwotCi19IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBMZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXJfaApkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9odG1sL0xlZ2FjeUhUTUxUcmVlQnVpbGRlci5jcHAgYi9XZWJDb3Jl
L2h0bWwvTGVnYWN5SFRNTFRyZWVCdWlsZGVyLmNwcAppbmRleCBlZTBiY2ZjYmY5ZThlM2VkMTlk
MDgzYjAyMGQyMmYyYmFkYWRkNmNlLi5mMzk1NzljOWYwZjc0ZDliMTY1MzU4M2JjZjczOGI4YmEw
OThiMmE5IDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvTGVnYWN5SFRNTFRyZWVCdWlsZGVyLmNw
cAorKysgYi9XZWJDb3JlL2h0bWwvTGVnYWN5SFRNTFRyZWVCdWlsZGVyLmNwcApAQCAtNTIsOSAr
NTIsOSBAQAogI2luY2x1ZGUgIkhUTUxUYWJsZUNlbGxFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRN
TFRhYmxlUm93RWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxUYWJsZVNlY3Rpb25FbGVtZW50Lmgi
Ci0jaW5jbHVkZSAiTGVnYWN5SFRNTERvY3VtZW50UGFyc2VyLmgiCiAjaW5jbHVkZSAiTG9jYWxp
emVkU3RyaW5ncy5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJTY3JpcHRhYmxlRG9j
dW1lbnRQYXJzZXIuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgogI2luY2x1ZGUgIlRleHQuaCIK
ICNpbmNsdWRlICJUcmVlRGVwdGhMaW1pdC5oIgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0xl
Z2FjeUhUTUxUcmVlQnVpbGRlci5oIGIvV2ViQ29yZS9odG1sL0xlZ2FjeUhUTUxUcmVlQnVpbGRl
ci5oCmluZGV4IDRhYzg0MTM0Y2E5NGQxNDg3NWRkM2YzODhmYzNjMDZhOTlkNTlhNTUuLmVkMmI4
NTczM2U4MDYzN2Q5MTdiYmZiZmVmYTI4YTYzMTgzZThjYjYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
aHRtbC9MZWdhY3lIVE1MVHJlZUJ1aWxkZXIuaAorKysgYi9XZWJDb3JlL2h0bWwvTGVnYWN5SFRN
TFRyZWVCdWlsZGVyLmgKQEAgLTI2LDYgKzI2LDcgQEAKIAogI2luY2x1ZGUgIkZyYWdtZW50U2Ny
aXB0aW5nUGVybWlzc2lvbi5oIgogI2luY2x1ZGUgIkhUTUxQYXJzZXJFcnJvckNvZGVzLmgiCisj
aW5jbHVkZSAiTmFtZWROb2RlTWFwLmgiCiAjaW5jbHVkZSAiUXVhbGlmaWVkTmFtZS5oIgogI2lu
Y2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgpAQCAtNDQsNyAr
NDUsOTcgQEAgY2xhc3MgSFRNTFBhcnNlclF1aXJrczsKIGNsYXNzIE5vZGU7CiAKIHN0cnVjdCBI
VE1MU3RhY2tFbGVtOwotc3RydWN0IFRva2VuOworCisvKioKKyAqIEBpbnRlcm5hbAorICogcmVw
cmVzZW50cyBvbmUgSFRNTCB0YWcuIENvbnNpc3RzIG9mIGEgbnVtZXJpY2FsIGlkLCBhbmQgdGhl
IGxpc3QKKyAqIG9mIGF0dHJpYnV0ZXMuIENhbiBhbHNvIHJlcHJlc2VudCB0ZXh0LiBJbiB0aGlz
IGNhc2UgdGhlIGlkID0gMCBhbmQKKyAqIHRleHQgY29udGFpbnMgdGhlIHRleHQuCisgKi8KK3N0
cnVjdCBUb2tlbiB7CisgICAgVG9rZW4oKQorICAgICAgICA6IGJlZ2luVGFnKHRydWUpCisgICAg
ICAgICwgc2VsZkNsb3NpbmdUYWcoZmFsc2UpCisgICAgICAgICwgYnJva2VuWE1MU3R5bGUoZmFs
c2UpCisgICAgICAgICwgbV9zb3VyY2VJbmZvKDApCisgICAgeyB9CisgICAgflRva2VuKCkgeyB9
CisKKyAgICB2b2lkIGFkZEF0dHJpYnV0ZShBdG9taWNTdHJpbmcmIGF0dHJOYW1lLCBjb25zdCBB
dG9taWNTdHJpbmcmIHYsIGJvb2wgdmlld1NvdXJjZU1vZGUpOworCisgICAgYm9vbCBpc09wZW5U
YWcoY29uc3QgUXVhbGlmaWVkTmFtZSYgZnVsbE5hbWUpIGNvbnN0IHsgcmV0dXJuIGJlZ2luVGFn
ICYmIGZ1bGxOYW1lLmxvY2FsTmFtZSgpID09IHRhZ05hbWU7IH0KKyAgICBib29sIGlzQ2xvc2VU
YWcoY29uc3QgUXVhbGlmaWVkTmFtZSYgZnVsbE5hbWUpIGNvbnN0IHsgcmV0dXJuICFiZWdpblRh
ZyAmJiBmdWxsTmFtZS5sb2NhbE5hbWUoKSA9PSB0YWdOYW1lOyB9CisKKyAgICB2b2lkIHJlc2V0
KCkKKyAgICB7CisgICAgICAgIGF0dHJzID0gMDsKKyAgICAgICAgdGV4dCA9IDA7CisgICAgICAg
IHRhZ05hbWUgPSBudWxsQXRvbTsKKyAgICAgICAgYmVnaW5UYWcgPSB0cnVlOworICAgICAgICBz
ZWxmQ2xvc2luZ1RhZyA9IGZhbHNlOworICAgICAgICBicm9rZW5YTUxTdHlsZSA9IGZhbHNlOwor
ICAgICAgICBpZiAobV9zb3VyY2VJbmZvKQorICAgICAgICAgICAgbV9zb3VyY2VJbmZvLT5jbGVh
cigpOworICAgIH0KKworICAgIHZvaWQgYWRkVmlld1NvdXJjZUNoYXIoVUNoYXIgYykKKyAgICB7
CisgICAgICAgIGlmICghbV9zb3VyY2VJbmZvLmdldCgpKQorICAgICAgICAgICAgbV9zb3VyY2VJ
bmZvLnNldChuZXcgVmVjdG9yPFVDaGFyPik7CisgICAgICAgIG1fc291cmNlSW5mby0+YXBwZW5k
KGMpOworICAgIH0KKworICAgIFJlZlB0cjxOYW1lZE5vZGVNYXA+IGF0dHJzOworICAgIFJlZlB0
cjxTdHJpbmdJbXBsPiB0ZXh0OworICAgIEF0b21pY1N0cmluZyB0YWdOYW1lOworICAgIGJvb2wg
YmVnaW5UYWc7CisgICAgYm9vbCBzZWxmQ2xvc2luZ1RhZzsKKyAgICBib29sIGJyb2tlblhNTFN0
eWxlOworICAgIE93blB0cjxWZWN0b3I8VUNoYXI+ID4gbV9zb3VyY2VJbmZvOworfTsKKworZW51
bSBEb2N0eXBlU3RhdGUgeworICAgIERvY3R5cGVCZWdpbiwKKyAgICBEb2N0eXBlQmVmb3JlTmFt
ZSwKKyAgICBEb2N0eXBlTmFtZSwKKyAgICBEb2N0eXBlQWZ0ZXJOYW1lLAorICAgIERvY3R5cGVC
ZWZvcmVQdWJsaWNJRCwKKyAgICBEb2N0eXBlUHVibGljSUQsCisgICAgRG9jdHlwZUFmdGVyUHVi
bGljSUQsCisgICAgRG9jdHlwZUJlZm9yZVN5c3RlbUlELAorICAgIERvY3R5cGVTeXN0ZW1JRCwK
KyAgICBEb2N0eXBlQWZ0ZXJTeXN0ZW1JRCwKKyAgICBEb2N0eXBlQm9ndXMKK307CisKK2NsYXNz
IERvY3R5cGVUb2tlbiB7CitwdWJsaWM6CisgICAgRG9jdHlwZVRva2VuKCkge30KKworICAgIHZv
aWQgcmVzZXQoKQorICAgIHsKKyAgICAgICAgbV9uYW1lLmNsZWFyKCk7CisgICAgICAgIG1fcHVi
bGljSUQuY2xlYXIoKTsKKyAgICAgICAgbV9zeXN0ZW1JRC5jbGVhcigpOworICAgICAgICBtX3N0
YXRlID0gRG9jdHlwZUJlZ2luOworICAgICAgICBtX3NvdXJjZS5jbGVhcigpOworICAgICAgICBt
X2ZvcmNlUXVpcmtzID0gZmFsc2U7CisgICAgfQorCisgICAgRG9jdHlwZVN0YXRlIHN0YXRlKCkg
eyByZXR1cm4gbV9zdGF0ZTsgfQorICAgIHZvaWQgc2V0U3RhdGUoRG9jdHlwZVN0YXRlIHMpIHsg
bV9zdGF0ZSA9IHM7IH0KKworICAgIFZlY3RvcjxVQ2hhcj4gbV9uYW1lOworICAgIFZlY3RvcjxV
Q2hhcj4gbV9wdWJsaWNJRDsKKyAgICBWZWN0b3I8VUNoYXI+IG1fc3lzdGVtSUQ7CisgICAgRG9j
dHlwZVN0YXRlIG1fc3RhdGU7CisKKyAgICBWZWN0b3I8VUNoYXI+IG1fc291cmNlOworCisgICAg
Ym9vbCBtX2ZvcmNlUXVpcmtzOyAvLyBVc2VkIGJ5IHRoZSBIVE1MNSBwYXJzZXIuCit9OworCisv
Ly0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIC8qKgogICogVGhlIHBhcnNlciBmb3IgSFRNTC4gSXQg
cmVjZWl2ZXMgYSBzdHJlYW0gb2YgdG9rZW5zIGZyb20gdGhlIExlZ2FjeUhUTUxEb2N1bWVudFBh
cnNlciwgYW5kCmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvTGVnYWN5UHJlbG9hZFNjYW5uZXIu
Y3BwIGIvV2ViQ29yZS9odG1sL0xlZ2FjeVByZWxvYWRTY2FubmVyLmNwcApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggNjEzZWI0NTI3MWUwODI1ZjVlODZmZDEyMTgyZjljZGY0YThkZTI4
MC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9XZWJDb3Jl
L2h0bWwvTGVnYWN5UHJlbG9hZFNjYW5uZXIuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsODU2ICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA5IFRvcmNoIE1vYmlsZSwgSW5jLiBodHRwOi8v
d3d3LnRvcmNobW9iaWxlLmNvbS8KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJMZWdhY3lQcmVsb2FkU2Nh
bm5lci5oIgotCi0jaW5jbHVkZSAiQ2FjaGVkQ1NTU3R5bGVTaGVldC5oIgotI2luY2x1ZGUgIkNh
Y2hlZEltYWdlLmgiCi0jaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2UuaCIKLSNpbmNsdWRlICJDYWNo
ZWRSZXNvdXJjZUNsaWVudC5oIgotI2luY2x1ZGUgIkNhY2hlZFNjcmlwdC5oIgotI2luY2x1ZGUg
IkNTU0hlbHBlci5oIgotI2luY2x1ZGUgIkRvY0xvYWRlci5oIgotI2luY2x1ZGUgIkRvY3VtZW50
LmgiCi0jaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgotI2luY2x1
ZGUgIkhUTUxMaW5rRWxlbWVudC5oIgotI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgotI2luY2x1ZGUg
PHd0Zi90ZXh0L0NTdHJpbmcuaD4KLSNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KLSNpbmNs
dWRlIDx3dGYvdGV4dC9BdG9taWNTdHJpbmcuaD4KLSNpbmNsdWRlIDx3dGYvdW5pY29kZS9Vbmlj
b2RlLmg+Ci0KLS8vIFVzZSBfX0dOVUNfXyBpbnN0ZWFkIG9mIFBMQVRGT1JNKEdDQykgdG8gc3Rh
eSBjb25zaXN0ZW50IHdpdGggdGhlIGdwZXJmIGdlbmVyYXRlZCBjIGZpbGUKLSNpZmRlZiBfX0dO
VUNfXwotLy8gVGhlIG1haW4gdG9rZW5pemVyIGluY2x1ZGVzIHRoaXMgdG9vIHNvIHdlIGFyZSBn
ZXR0aW5nIHR3byBjb3BpZXMgb2YgdGhlIGRhdGEuIEhvd2V2ZXIsIHRoaXMgd2F5IHRoZSBjb2Rl
IGdldHMgaW5saW5lZC4KLSNpbmNsdWRlICJIVE1MRW50aXR5TmFtZXMuY3BwIgotI2Vsc2UKLS8v
IE5vdCBpbmxpbmVkIGZvciBub24tR0NDIGNvbXBpbGVycwotc3RydWN0IEVudGl0eSB7Ci0gICAg
Y29uc3QgY2hhciogbmFtZTsKLSAgICBpbnQgY29kZTsKLX07Ci1jb25zdCBzdHJ1Y3QgRW50aXR5
KiBmaW5kRW50aXR5KHJlZ2lzdGVyIGNvbnN0IGNoYXIqIHN0ciwgcmVnaXN0ZXIgdW5zaWduZWQg
aW50IGxlbik7Ci0jZW5kaWYKLQotI2RlZmluZSBQUkVMT0FEX0RFQlVHIDAKLQotdXNpbmcgbmFt
ZXNwYWNlIFdURjsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotICAgIAotdXNpbmcgbmFtZXNwYWNl
IEhUTUxOYW1lczsKLSAgICAKLUxlZ2FjeVByZWxvYWRTY2FubmVyOjpMZWdhY3lQcmVsb2FkU2Nh
bm5lcihEb2N1bWVudCogZG9jKQotICAgIDogbV9pblByb2dyZXNzKGZhbHNlKQotICAgICwgbV90
aW1lVXNlZCgwKQotICAgICwgbV9ib2R5U2VlbihmYWxzZSkKLSAgICAsIG1fZG9jdW1lbnQoZG9j
KQotewotI2lmIFBSRUxPQURfREVCVUcKLSAgICBwcmludGYoIkNSRUFUSU5HIFBSRUxPQUQgU0NB
Tk5FUiBGT1IgJXNcbiIsIG1fZG9jdW1lbnQtPnVybCgpLnN0cmluZygpLmxhdGluMSgpLmRhdGEo
KSk7Ci0jZW5kaWYKLX0KLSAgICAKLUxlZ2FjeVByZWxvYWRTY2FubmVyOjp+TGVnYWN5UHJlbG9h
ZFNjYW5uZXIoKQotewotI2lmIFBSRUxPQURfREVCVUcKLSAgICBwcmludGYoIkRFTEVUSU5HIFBS
RUxPQUQgU0NBTk5FUiBGT1IgJXNcbiIsIG1fZG9jdW1lbnQtPnVybCgpLnN0cmluZygpLmxhdGlu
MSgpLmRhdGEoKSk7Ci0gICAgcHJpbnRmKCJUT1RBTCBUSU1FIFVTRUQgJS40ZnNcbiIsIG1fdGlt
ZVVzZWQpOwotI2VuZGlmCi19Ci0gICAgCi12b2lkIExlZ2FjeVByZWxvYWRTY2FubmVyOjpiZWdp
bigpIAoteyAKLSAgICBBU1NFUlQoIW1faW5Qcm9ncmVzcyk7IAotICAgIHJlc2V0KCk7IAotICAg
IG1faW5Qcm9ncmVzcyA9IHRydWU7IAotfQotICAgIAotdm9pZCBMZWdhY3lQcmVsb2FkU2Nhbm5l
cjo6ZW5kKCkgCi17IAotICAgIEFTU0VSVChtX2luUHJvZ3Jlc3MpOyAKLSAgICBtX2luUHJvZ3Jl
c3MgPSBmYWxzZTsgCi19Ci0KLXZvaWQgTGVnYWN5UHJlbG9hZFNjYW5uZXI6OnJlc2V0KCkKLXsK
LSAgICBtX3NvdXJjZS5jbGVhcigpOwotICAgIAotICAgIG1fc3RhdGUgPSBEYXRhOwotICAgIG1f
ZXNjYXBlID0gZmFsc2U7Ci0gICAgbV9jb250ZW50TW9kZWwgPSBQQ0RBVEE7Ci0gICAgbV9jb21t
ZW50UG9zID0gMDsKLQotICAgIG1fY2xvc2VUYWcgPSBmYWxzZTsKLSAgICBtX3RhZ05hbWUuY2xl
YXIoKTsKLSAgICBtX2F0dHJpYnV0ZU5hbWUuY2xlYXIoKTsKLSAgICBtX2F0dHJpYnV0ZVZhbHVl
LmNsZWFyKCk7Ci0gICAgbV9sYXN0U3RhcnRUYWcgPSBBdG9taWNTdHJpbmcoKTsKLSAgICAKLSAg
ICBtX3VybFRvTG9hZCA9IFN0cmluZygpOwotICAgIG1fY2hhcnNldCA9IFN0cmluZygpOwotICAg
IG1fbGlua0lzU3R5bGVTaGVldCA9IGZhbHNlOwotICAgIG1fbGFzdENoYXJhY3RlckluZGV4ID0g
MDsKLSAgICBjbGVhckxhc3RDaGFyYWN0ZXJzKCk7Ci0gICAgCi0gICAgbV9jc3NTdGF0ZSA9IENT
U0luaXRpYWw7Ci0gICAgbV9jc3NSdWxlLmNsZWFyKCk7Ci0gICAgbV9jc3NSdWxlVmFsdWUuY2xl
YXIoKTsKLX0KLSAgICAKLWJvb2wgTGVnYWN5UHJlbG9hZFNjYW5uZXI6OnNjYW5uaW5nQm9keSgp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fZG9jdW1lbnQtPmJvZHkoKSB8fCBtX2JvZHlTZWVuOwot
fQotICAgIAotdm9pZCBMZWdhY3lQcmVsb2FkU2Nhbm5lcjo6d3JpdGUoY29uc3QgU2VnbWVudGVk
U3RyaW5nJiBzb3VyY2UpCi17Ci0jaWYgUFJFTE9BRF9ERUJVRwotICAgIGRvdWJsZSBzdGFydFRp
bWUgPSBjdXJyZW50VGltZSgpOwotI2VuZGlmCi0gICAgdG9rZW5pemUoc291cmNlKTsKLSNpZiBQ
UkVMT0FEX0RFQlVHCi0gICAgbV90aW1lVXNlZCArPSBjdXJyZW50VGltZSgpIC0gc3RhcnRUaW1l
OwotI2VuZGlmCi19Ci0gICAgCi1zdGF0aWMgaW5saW5lIGJvb2wgaXNXaGl0ZXNwYWNlKFVDaGFy
IGMpCi17Ci0gICAgcmV0dXJuIGMgPT0gJyAnIHx8IGMgPT0gJ1xuJyB8fCBjID09ICdccicgfHwg
YyA9PSAnXHQnOwotfQotICAgIAotaW5saW5lIHZvaWQgTGVnYWN5UHJlbG9hZFNjYW5uZXI6OmNs
ZWFyTGFzdENoYXJhY3RlcnMoKQotewotICAgIG1lbXNldChtX2xhc3RDaGFyYWN0ZXJzLCAwLCBs
YXN0Q2hhcmFjdGVyc0J1ZmZlclNpemUgKiBzaXplb2YoVUNoYXIpKTsKLX0KLSAgICAKLWlubGlu
ZSB2b2lkIExlZ2FjeVByZWxvYWRTY2FubmVyOjpyZW1lbWJlckNoYXJhY3RlcihVQ2hhciBjKQot
ewotICAgIG1fbGFzdENoYXJhY3RlckluZGV4ID0gKG1fbGFzdENoYXJhY3RlckluZGV4ICsgMSkg
JSBsYXN0Q2hhcmFjdGVyc0J1ZmZlclNpemU7Ci0gICAgbV9sYXN0Q2hhcmFjdGVyc1ttX2xhc3RD
aGFyYWN0ZXJJbmRleF0gPSBjOwotfQotICAgIAotaW5saW5lIGJvb2wgTGVnYWN5UHJlbG9hZFNj
YW5uZXI6Omxhc3RDaGFyYWN0ZXJzTWF0Y2goY29uc3QgY2hhciogY2hhcnMsIHVuc2lnbmVkIGNv
dW50KSBjb25zdAotewotICAgIHVuc2lnbmVkIHBvcyA9IG1fbGFzdENoYXJhY3RlckluZGV4Owot
ICAgIHdoaWxlIChjb3VudCkgewotICAgICAgICBpZiAoY2hhcnNbY291bnQgLSAxXSAhPSBtX2xh
c3RDaGFyYWN0ZXJzW3Bvc10pCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIC0t
Y291bnQ7Ci0gICAgICAgIGlmICghcG9zKQotICAgICAgICAgICAgcG9zID0gbGFzdENoYXJhY3Rl
cnNCdWZmZXJTaXplOwotICAgICAgICAtLXBvczsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19
Ci0gICAgCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxlZ2FsRW50aXR5Rm9yKHVuc2lnbmVkIHZh
bHVlKQotewotICAgIC8vIEZJWE1FIFRoZXJlIGlzIGEgdGFibGUgZm9yIG1vcmUgZXhjZXB0aW9u
cyBpbiB0aGUgSFRNTDUgc3BlY2lmaWNhdGlvbi4KLSAgICBpZiAodmFsdWUgPT0gMCB8fCB2YWx1
ZSA+IDB4MTBGRkZGIHx8ICh2YWx1ZSA+PSAweEQ4MDAgJiYgdmFsdWUgPD0gMHhERkZGKSkKLSAg
ICAgICAgcmV0dXJuIDB4RkZGRDsKLSAgICByZXR1cm4gdmFsdWU7Ci19Ci0gICAgCi11bnNpZ25l
ZCBMZWdhY3lQcmVsb2FkU2Nhbm5lcjo6Y29uc3VtZUVudGl0eShTZWdtZW50ZWRTdHJpbmcmIHNv
dXJjZSwgYm9vbCYgbm90RW5vdWdoQ2hhcmFjdGVycykKLXsKLSAgICBlbnVtIEVudGl0eVN0YXRl
IHsKLSAgICAgICAgSW5pdGlhbCwKLSAgICAgICAgTnVtYmVyVHlwZSwKLSAgICAgICAgTWF5YmVI
ZXgsCi0gICAgICAgIEhleCwKLSAgICAgICAgRGVjaW1hbCwKLSAgICAgICAgTmFtZWQKLSAgICB9
OwotICAgIEVudGl0eVN0YXRlIGVudGl0eVN0YXRlID0gSW5pdGlhbDsKLSAgICB1bnNpZ25lZCBy
ZXN1bHQgPSAwOwotICAgIFZlY3RvcjxVQ2hhciwgMTA+IHNlZW5DaGFyczsKLSAgICBWZWN0b3I8
Y2hhciwgMTA+IGVudGl0eU5hbWU7Ci0gICAgCi0gICAgd2hpbGUgKCFzb3VyY2UuaXNFbXB0eSgp
KSB7Ci0gICAgICAgIFVDaGFyIGNjID0gKnNvdXJjZTsKLSAgICAgICAgc2VlbkNoYXJzLmFwcGVu
ZChjYyk7Ci0gICAgICAgIHN3aXRjaCAoZW50aXR5U3RhdGUpIHsKLSAgICAgICAgY2FzZSBJbml0
aWFsOgotICAgICAgICAgICAgaWYgKGlzV2hpdGVzcGFjZShjYykgfHwgY2MgPT0gJzwnIHx8IGNj
ID09ICcmJykKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgIGVsc2UgaWYg
KGNjID09ICcjJykgCi0gICAgICAgICAgICAgICAgZW50aXR5U3RhdGUgPSBOdW1iZXJUeXBlOwot
ICAgICAgICAgICAgZWxzZSBpZiAoKGNjID49ICdhJyAmJiBjYyA8PSAneicpIHx8IChjYyA+PSAn
QScgJiYgY2MgPD0gJ1onKSkgewotICAgICAgICAgICAgICAgIGVudGl0eU5hbWUuYXBwZW5kKGNj
KTsKLSAgICAgICAgICAgICAgICBlbnRpdHlTdGF0ZSA9IE5hbWVkOwotICAgICAgICAgICAgfSBl
bHNlCi0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBOdW1iZXJUeXBlOgotICAgICAgICAgICAgaWYgKGNjID09ICd4JyB8fCBjYyA9PSAn
WCcpCi0gICAgICAgICAgICAgICAgZW50aXR5U3RhdGUgPSBNYXliZUhleDsKLSAgICAgICAgICAg
IGVsc2UgaWYgKGNjID49ICcwJyAmJiBjYyA8PSAnOScpIHsKLSAgICAgICAgICAgICAgICBlbnRp
dHlTdGF0ZSA9IERlY2ltYWw7Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gY2MgLSAnMCc7Ci0g
ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHNvdXJjZS5wdXNoKCcjJyk7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSBNYXliZUhleDoKLSAgICAgICAgICAgIGlmIChjYyA+PSAnMCcgJiYg
Y2MgPD0gJzknKQotICAgICAgICAgICAgICAgIHJlc3VsdCA9IGNjIC0gJzAnOwotICAgICAgICAg
ICAgZWxzZSBpZiAoY2MgPj0gJ2EnICYmIGNjIDw9ICdmJykKLSAgICAgICAgICAgICAgICByZXN1
bHQgPSAxMCArIGNjIC0gJ2EnOwotICAgICAgICAgICAgZWxzZSBpZiAoY2MgPj0gJ0EnICYmIGNj
IDw9ICdGJykKLSAgICAgICAgICAgICAgICByZXN1bHQgPSAxMCArIGNjIC0gJ0EnOwotICAgICAg
ICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgc291cmNlLnB1c2goJyMnKTsKLSAgICAgICAg
ICAgICAgICBzb3VyY2UucHVzaChzZWVuQ2hhcnNbMV0pOwotICAgICAgICAgICAgICAgIHJldHVy
biAwOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZW50aXR5U3RhdGUgPSBIZXg7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBIZXg6Ci0gICAgICAgICAgICBpZiAoY2MgPj0g
JzAnICYmIGNjIDw9ICc5JykKLSAgICAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHQgKiAxNiAr
IGNjIC0gJzAnOwotICAgICAgICAgICAgZWxzZSBpZiAoY2MgPj0gJ2EnICYmIGNjIDw9ICdmJykK
LSAgICAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHQgKiAxNiArIDEwICsgY2MgLSAnYSc7Ci0g
ICAgICAgICAgICBlbHNlIGlmIChjYyA+PSAnQScgJiYgY2MgPD0gJ0YnKQotICAgICAgICAgICAg
ICAgIHJlc3VsdCA9IHJlc3VsdCAqIDE2ICsgMTAgKyBjYyAtICdBJzsKLSAgICAgICAgICAgIGVs
c2UgaWYgKGNjID09ICc7JykgewotICAgICAgICAgICAgICAgIHNvdXJjZS5hZHZhbmNlKCk7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIGxlZ2FsRW50aXR5Rm9yKHJlc3VsdCk7Ci0gICAgICAgICAg
ICB9IGVsc2UgCi0gICAgICAgICAgICAgICAgcmV0dXJuIGxlZ2FsRW50aXR5Rm9yKHJlc3VsdCk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBEZWNpbWFsOgotICAgICAgICAgICAg
aWYgKGNjID49ICcwJyAmJiBjYyA8PSAnOScpCi0gICAgICAgICAgICAgICAgcmVzdWx0ID0gcmVz
dWx0ICogMTAgKyBjYyAtICcwJzsKLSAgICAgICAgICAgIGVsc2UgaWYgKGNjID09ICc7Jykgewot
ICAgICAgICAgICAgICAgIHNvdXJjZS5hZHZhbmNlKCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IGxlZ2FsRW50aXR5Rm9yKHJlc3VsdCk7Ci0gICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAg
ICAgICByZXR1cm4gbGVnYWxFbnRpdHlGb3IocmVzdWx0KTsKLSAgICAgICAgICAgIGJyZWFrOyAg
ICAgICAgICAgICAgIAotICAgICAgICBjYXNlIE5hbWVkOgotICAgICAgICAgICAgLy8gVGhpcyBp
cyB0aGUgYXR0cmlidXRlIG9ubHkgdmVyc2lvbiwgZ2VuZXJpYyB2ZXJzaW9uIG1hdGNoZXMgc29t
ZXdoYXQgZGlmZmVyZW50bHkKLSAgICAgICAgICAgIHdoaWxlIChlbnRpdHlOYW1lLnNpemUoKSA8
PSA4KSB7Ci0gICAgICAgICAgICAgICAgaWYgKGNjID09ICc7JykgewotICAgICAgICAgICAgICAg
ICAgICBjb25zdCBFbnRpdHkqIGVudGl0eSA9IGZpbmRFbnRpdHkoZW50aXR5TmFtZS5kYXRhKCks
IGVudGl0eU5hbWUuc2l6ZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGVudGl0eSkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlLmFkdmFuY2UoKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBlbnRpdHktPmNvZGU7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIGlmICghKGNjID49ICdhJyAmJiBjYyA8PSAneicpICYmICEoY2MgPj0gJ0EnICYmIGNjIDw9
ICdaJykgJiYgIShjYyA+PSAnMCcgJiYgY2MgPD0gJzknKSkgewotICAgICAgICAgICAgICAgICAg
ICBjb25zdCBFbnRpdHkqIGVudGl0eSA9IGZpbmRFbnRpdHkoZW50aXR5TmFtZS5kYXRhKCksIGVu
dGl0eU5hbWUuc2l6ZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGVudGl0eSkKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBlbnRpdHktPmNvZGU7Ci0gICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbnRpdHlOYW1l
LmFwcGVuZChjYyk7Ci0gICAgICAgICAgICAgICAgc291cmNlLmFkdmFuY2UoKTsKLSAgICAgICAg
ICAgICAgICBpZiAoc291cmNlLmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICAgICAgZ290byBv
dXRPZkNoYXJhY3RlcnM7Ci0gICAgICAgICAgICAgICAgY2MgPSAqc291cmNlOwotICAgICAgICAg
ICAgICAgIHNlZW5DaGFycy5hcHBlbmQoY2MpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
aWYgKHNlZW5DaGFycy5zaXplKCkgPT0gMikKLSAgICAgICAgICAgICAgICBzb3VyY2UucHVzaChz
ZWVuQ2hhcnNbMF0pOwotICAgICAgICAgICAgZWxzZSBpZiAoc2VlbkNoYXJzLnNpemUoKSA9PSAz
KSB7Ci0gICAgICAgICAgICAgICAgc291cmNlLnB1c2goc2VlbkNoYXJzWzBdKTsKLSAgICAgICAg
ICAgICAgICBzb3VyY2UucHVzaChzZWVuQ2hhcnNbMV0pOwotICAgICAgICAgICAgfSBlbHNlCi0g
ICAgICAgICAgICAgICAgc291cmNlLnByZXBlbmQoU2VnbWVudGVkU3RyaW5nKFN0cmluZyhzZWVu
Q2hhcnMuZGF0YSgpLCBzZWVuQ2hhcnMuc2l6ZSgpIC0gMSkpKTsKLSAgICAgICAgICAgIHJldHVy
biAwOwotICAgICAgICB9Ci0gICAgICAgIHNvdXJjZS5hZHZhbmNlKCk7Ci0gICAgfQotb3V0T2ZD
aGFyYWN0ZXJzOgotICAgIG5vdEVub3VnaENoYXJhY3RlcnMgPSB0cnVlOwotICAgIHNvdXJjZS5w
cmVwZW5kKFNlZ21lbnRlZFN0cmluZyhTdHJpbmcoc2VlbkNoYXJzLmRhdGEoKSwgc2VlbkNoYXJz
LnNpemUoKSkpKTsKLSAgICByZXR1cm4gMDsKLX0KLQotdm9pZCBMZWdhY3lQcmVsb2FkU2Nhbm5l
cjo6dG9rZW5pemUoY29uc3QgU2VnbWVudGVkU3RyaW5nJiBzb3VyY2UpCi17Ci0gICAgQVNTRVJU
KG1faW5Qcm9ncmVzcyk7Ci0gICAgCi0gICAgbV9zb3VyY2UuYXBwZW5kKHNvdXJjZSk7Ci0KLSAg
ICAvLyBUaGlzIGlzIGEgc2ltcGxpZmllZCBIVE1MNSBUb2tlbml6ZXIKLSAgICAvLyBodHRwOi8v
d3d3LndoYXR3Zy5vcmcvc3BlY3Mvd2ViLWFwcHMvY3VycmVudC13b3JrLyN0b2tlbmlzYXRpb24w
Ci0gICAgd2hpbGUgKCFtX3NvdXJjZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgVUNoYXIgY2MgPSAq
bV9zb3VyY2U7Ci0gICAgICAgIHN3aXRjaCAobV9zdGF0ZSkgewotICAgICAgICBjYXNlIERhdGE6
Ci0gICAgICAgICAgICB3aGlsZSAoMSkgewotICAgICAgICAgICAgICAgIHJlbWVtYmVyQ2hhcmFj
dGVyKGNjKTsKLSAgICAgICAgICAgICAgICBpZiAoY2MgPT0gJyYnKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGlmIChtX2NvbnRlbnRNb2RlbCA9PSBQQ0RBVEEgfHwgbV9jb250ZW50TW9kZWwgPT0g
UkNEQVRBKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX3N0YXRlID0gRW50aXR5RGF0YTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjYyA9PSAnLScpIHsKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKChtX2NvbnRlbnRNb2RlbCA9PSBSQ0RBVEEgfHwgbV9jb250ZW50TW9kZWwgPT0gQ0RB
VEEpICYmICFtX2VzY2FwZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxhc3RDaGFy
YWN0ZXJzTWF0Y2goIjwhLS0iLCA0KSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2Vz
Y2FwZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGVs
c2UgaWYgKGNjID09ICc8JykgewotICAgICAgICAgICAgICAgICAgICBpZiAobV9jb250ZW50TW9k
ZWwgPT0gUENEQVRBIHx8ICgobV9jb250ZW50TW9kZWwgPT0gUkNEQVRBIHx8IG1fY29udGVudE1v
ZGVsID09IENEQVRBKSAmJiAhbV9lc2NhcGUpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBt
X3N0YXRlID0gVGFnT3BlbjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjYyA9PSAnPicpIHsK
LSAgICAgICAgICAgICAgICAgICAgIGlmICgobV9jb250ZW50TW9kZWwgPT0gUkNEQVRBIHx8IG1f
Y29udGVudE1vZGVsID09IENEQVRBKSAmJiBtX2VzY2FwZSkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChsYXN0Q2hhcmFjdGVyc01hdGNoKCItLT4iLCAzKSkKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbV9lc2NhcGUgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZW1pdENoYXJhY3RlcihjYyk7Ci0g
ICAgICAgICAgICAgICAgbV9zb3VyY2UuYWR2YW5jZSgpOwotICAgICAgICAgICAgICAgIGlmICht
X3NvdXJjZS5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
ICAgICAgICAgY2MgPSAqbV9zb3VyY2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSBFbnRpdHlEYXRhOgotICAgICAgICAgICAgLy8gc2hvdWxkIHRyeSB0
byBjb25zdW1lIHRoZSBlbnRpdHkgYnV0IHdlIG9ubHkgY2FyZSBhYm91dCBlbnRpdGllcyBpbiBh
dHRyaWJ1dGVzCi0gICAgICAgICAgICBtX3N0YXRlID0gRGF0YTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBjYXNlIFRhZ09wZW46Ci0gICAgICAgICAgICBpZiAobV9jb250ZW50TW9kZWwg
PT0gUkNEQVRBIHx8IG1fY29udGVudE1vZGVsID09IENEQVRBKSB7Ci0gICAgICAgICAgICAgICAg
aWYgKGNjID09ICcvJykKLSAgICAgICAgICAgICAgICAgICAgbV9zdGF0ZSA9IENsb3NlVGFnT3Bl
bjsKLSAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgbV9zdGF0ZSA9
IERhdGE7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIH0gZWxzZSBpZiAobV9jb250ZW50TW9kZWwgPT0gUENEQVRBKSB7Ci0gICAg
ICAgICAgICAgICAgaWYgKGNjID09ICchJykKLSAgICAgICAgICAgICAgICAgICAgbV9zdGF0ZSA9
IE1hcmt1cERlY2xhcmF0aW9uT3BlbjsKLSAgICAgICAgICAgICAgICBlbHNlIGlmIChjYyA9PSAn
LycpCi0gICAgICAgICAgICAgICAgICAgIG1fc3RhdGUgPSBDbG9zZVRhZ09wZW47Ci0gICAgICAg
ICAgICAgICAgZWxzZSBpZiAoY2MgPj0gJ0EnICYmIGNjIDw9ICdaJykgewotICAgICAgICAgICAg
ICAgICAgICBtX3RhZ05hbWUuY2xlYXIoKTsKLSAgICAgICAgICAgICAgICAgICAgbV9jaGFyc2V0
ID0gU3RyaW5nKCk7Ci0gICAgICAgICAgICAgICAgICAgIG1fdGFnTmFtZS5hcHBlbmQoY2MgKyAw
eDIwKTsKLSAgICAgICAgICAgICAgICAgICAgbV9jbG9zZVRhZyA9IGZhbHNlOwotICAgICAgICAg
ICAgICAgICAgICBtX3N0YXRlID0gVGFnTmFtZTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYg
KGNjID49ICdhJyAmJiBjYyA8PSAneicpIHsKLSAgICAgICAgICAgICAgICAgICAgbV90YWdOYW1l
LmNsZWFyKCk7Ci0gICAgICAgICAgICAgICAgICAgIG1fY2hhcnNldCA9IFN0cmluZygpOwotICAg
ICAgICAgICAgICAgICAgICBtX3RhZ05hbWUuYXBwZW5kKGNjKTsKLSAgICAgICAgICAgICAgICAg
ICAgbV9jbG9zZVRhZyA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICBtX3N0YXRlID0gVGFn
TmFtZTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNjID09ICc+JykgewotICAgICAgICAg
ICAgICAgICAgICBtX3N0YXRlID0gRGF0YTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNj
ID09ICc/JykgewotICAgICAgICAgICAgICAgICAgICBtX3N0YXRlID0gQm9ndXNDb21tZW50Owot
ICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIG1fc3RhdGUgPSBE
YXRhOwotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDbG9zZVRhZ09w
ZW46Ci0gICAgICAgICAgICBpZiAobV9jb250ZW50TW9kZWwgPT0gUkNEQVRBIHx8IG1fY29udGVu
dE1vZGVsID09IENEQVRBKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFtX2xhc3RTdGFydFRhZy5s
ZW5ndGgoKSkgewotICAgICAgICAgICAgICAgICAgICBtX3N0YXRlID0gRGF0YTsKLSAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IGlmIChtX3NvdXJjZS5sZW5ndGgoKSA8IG1fbGFzdFN0YXJ0VGFnLmxlbmd0aCgpICsgMSkKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIFZlY3RvcjxVQ2hhcj4g
dG1wU3RyaW5nOwotICAgICAgICAgICAgICAgIFVDaGFyIHRtcENoYXIgPSAwOwotICAgICAgICAg
ICAgICAgIGJvb2wgbWF0Y2ggPSB0cnVlOwotICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQg
biA9IDA7IG4gPCBtX2xhc3RTdGFydFRhZy5sZW5ndGgoKSArIDE7IG4rKykgewotICAgICAgICAg
ICAgICAgICAgICB0bXBDaGFyID0gVW5pY29kZTo6dG9Mb3dlcigqbV9zb3VyY2UpOwotICAgICAg
ICAgICAgICAgICAgICBpZiAobiA8IG1fbGFzdFN0YXJ0VGFnLmxlbmd0aCgpICYmIHRtcENoYXIg
IT0gbV9sYXN0U3RhcnRUYWdbbl0pCi0gICAgICAgICAgICAgICAgICAgICAgICBtYXRjaCA9IGZh
bHNlOwotICAgICAgICAgICAgICAgICAgICB0bXBTdHJpbmcuYXBwZW5kKHRtcENoYXIpOwotICAg
ICAgICAgICAgICAgICAgICBtX3NvdXJjZS5hZHZhbmNlKCk7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIG1fc291cmNlLnByZXBlbmQoU2VnbWVudGVkU3RyaW5nKFN0cmluZyh0
bXBTdHJpbmcuZGF0YSgpLCB0bXBTdHJpbmcuc2l6ZSgpKSkpOwotICAgICAgICAgICAgICAgIGlm
ICghbWF0Y2ggfHwgKCFpc1doaXRlc3BhY2UodG1wQ2hhcikgJiYgdG1wQ2hhciAhPSAnPicgJiYg
dG1wQ2hhciAhPSAnLycpKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1fc3RhdGUgPSBEYXRhOwot
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBpZiAoY2MgPj0gJ0EnICYmIGNjIDw9ICdaJykgewotICAgICAg
ICAgICAgICAgIG1fdGFnTmFtZS5jbGVhcigpOwotICAgICAgICAgICAgICAgIG1fY2hhcnNldCA9
IFN0cmluZygpOwotICAgICAgICAgICAgICAgIG1fdGFnTmFtZS5hcHBlbmQoY2MgKyAweDIwKTsK
LSAgICAgICAgICAgICAgICBtX2Nsb3NlVGFnID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBtX3N0
YXRlID0gVGFnTmFtZTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoY2MgPj0gJ2EnICYmIGNjIDw9
ICd6JykgewotICAgICAgICAgICAgICAgIG1fdGFnTmFtZS5jbGVhcigpOwotICAgICAgICAgICAg
ICAgIG1fY2hhcnNldCA9IFN0cmluZygpOwotICAgICAgICAgICAgICAgIG1fdGFnTmFtZS5hcHBl
bmQoY2MpOwotICAgICAgICAgICAgICAgIG1fY2xvc2VUYWcgPSB0cnVlOwotICAgICAgICAgICAg
ICAgIG1fc3RhdGUgPSBUYWdOYW1lOwotICAgICAgICAgICAgfSBlbHNlIGlmIChjYyA9PSAnPicp
IHsKLSAgICAgICAgICAgICAgICBtX3N0YXRlID0gRGF0YTsKLSAgICAgICAgICAgIH0gZWxzZQot
ICAgICAgICAgICAgICAgIG1fc3RhdGUgPSBCb2d1c0NvbW1lbnQ7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSBUYWdOYW1lOgotICAgICAgICAgICAgd2hpbGUgKDEpIHsKLSAgICAg
ICAgICAgICAgICBpZiAoaXNXaGl0ZXNwYWNlKGNjKSkgewotICAgICAgICAgICAgICAgICAgICBt
X3N0YXRlID0gQmVmb3JlQXR0cmlidXRlTmFtZTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChjYyA9PSAnPicpIHsKLSAg
ICAgICAgICAgICAgICAgICAgZW1pdFRhZygpOwotICAgICAgICAgICAgICAgICAgICBtX3N0YXRl
ID0gRGF0YTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIGlmIChjYyA9PSAnLycpIHsKLSAgICAgICAgICAgICAgICAgICAgbV9z
dGF0ZSA9IEJlZm9yZUF0dHJpYnV0ZU5hbWU7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoY2MgPj0gJ0EnICYmIGNjIDw9
ICdaJykKLSAgICAgICAgICAgICAgICAgICAgbV90YWdOYW1lLmFwcGVuZChjYyArIDB4MjApOwot
ICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgbV90YWdOYW1lLmFwcGVu
ZChjYyk7Ci0gICAgICAgICAgICAgICAgbV9zb3VyY2UuYWR2YW5jZSgpOwotICAgICAgICAgICAg
ICAgIGlmIChtX3NvdXJjZS5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgICAgICAgICBjYyA9ICptX3NvdXJjZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIEJlZm9yZUF0dHJpYnV0ZU5hbWU6Ci0gICAgICAgICAg
ICBpZiAoaXNXaGl0ZXNwYWNlKGNjKSkKLSAgICAgICAgICAgICAgICA7Ci0gICAgICAgICAgICBl
bHNlIGlmIChjYyA9PSAnPicpIHsKLSAgICAgICAgICAgICAgICBlbWl0VGFnKCk7Ci0gICAgICAg
ICAgICAgICAgbV9zdGF0ZSA9IERhdGE7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGNjID49ICdB
JyAmJiBjYyA8PSAnWicpIHsKLSAgICAgICAgICAgICAgICBtX2F0dHJpYnV0ZU5hbWUuY2xlYXIo
KTsKLSAgICAgICAgICAgICAgICBtX2F0dHJpYnV0ZVZhbHVlLmNsZWFyKCk7Ci0gICAgICAgICAg
ICAgICAgbV9hdHRyaWJ1dGVOYW1lLmFwcGVuZChjYyArIDB4MjApOwotICAgICAgICAgICAgICAg
IG1fc3RhdGUgPSBBdHRyaWJ1dGVOYW1lOwotICAgICAgICAgICAgfSBlbHNlIGlmIChjYyA9PSAn
LycpCi0gICAgICAgICAgICAgICAgOwotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgbV9hdHRyaWJ1dGVOYW1lLmNsZWFyKCk7Ci0gICAgICAgICAgICAgICAgbV9hdHRyaWJ1dGVW
YWx1ZS5jbGVhcigpOwotICAgICAgICAgICAgICAgIG1fYXR0cmlidXRlTmFtZS5hcHBlbmQoY2Mp
OwotICAgICAgICAgICAgICAgIG1fc3RhdGUgPSBBdHRyaWJ1dGVOYW1lOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXR0cmlidXRlTmFtZToKLSAgICAg
ICAgICAgIHdoaWxlICgxKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGlzV2hpdGVzcGFjZShjYykp
IHsKLSAgICAgICAgICAgICAgICAgICAgbV9zdGF0ZSA9IEFmdGVyQXR0cmlidXRlTmFtZTsKLSAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIGlmIChjYyA9PSAnPScpIHsKLSAgICAgICAgICAgICAgICAgICAgbV9zdGF0ZSA9IEJlZm9y
ZUF0dHJpYnV0ZVZhbHVlOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKGNjID09ICc+JykgewotICAgICAgICAgICAgICAg
ICAgICBlbWl0VGFnKCk7Ci0gICAgICAgICAgICAgICAgICAgIG1fc3RhdGUgPSBEYXRhOwotICAg
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9IAotICAgICAgICAgICAg
ICAgIGlmIChjYyA9PSAnLycpIHsKLSAgICAgICAgICAgICAgICAgICAgbV9zdGF0ZSA9IEJlZm9y
ZUF0dHJpYnV0ZU5hbWU7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoY2MgPj0gJ0EnICYmIGNjIDw9ICdaJykKLSAgICAg
ICAgICAgICAgICAgICAgbV9hdHRyaWJ1dGVOYW1lLmFwcGVuZChjYyArIDB4MjApOwotICAgICAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgbV9hdHRyaWJ1dGVOYW1lLmFwcGVu
ZChjYyk7Ci0gICAgICAgICAgICAgICAgbV9zb3VyY2UuYWR2YW5jZSgpOwotICAgICAgICAgICAg
ICAgIGlmIChtX3NvdXJjZS5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgICAgICAgICBjYyA9ICptX3NvdXJjZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFmdGVyQXR0cmlidXRlTmFtZToKLSAgICAgICAgICAg
IGlmIChpc1doaXRlc3BhY2UoY2MpKQotICAgICAgICAgICAgICAgIDsKLSAgICAgICAgICAgIGVs
c2UgaWYgKGNjID09ICc9JykKLSAgICAgICAgICAgICAgICBtX3N0YXRlID0gQmVmb3JlQXR0cmli
dXRlVmFsdWU7IAotICAgICAgICAgICAgZWxzZSBpZiAoY2MgPT0gJz4nKSB7Ci0gICAgICAgICAg
ICAgICAgZW1pdFRhZygpOwotICAgICAgICAgICAgICAgIG1fc3RhdGUgPSBEYXRhOwotICAgICAg
ICAgICAgfSBlbHNlIGlmIChjYyA+PSAnQScgJiYgY2MgPD0gJ1onKSB7Ci0gICAgICAgICAgICAg
ICAgbV9hdHRyaWJ1dGVOYW1lLmNsZWFyKCk7Ci0gICAgICAgICAgICAgICAgbV9hdHRyaWJ1dGVW
YWx1ZS5jbGVhcigpOwotICAgICAgICAgICAgICAgIG1fYXR0cmlidXRlTmFtZS5hcHBlbmQoY2Mg
KyAweDIwKTsKLSAgICAgICAgICAgICAgICBtX3N0YXRlID0gQXR0cmlidXRlTmFtZTsKLSAgICAg
ICAgICAgIH0gZWxzZSBpZiAoY2MgPT0gJy8nKQotICAgICAgICAgICAgICAgIG1fc3RhdGUgPSBC
ZWZvcmVBdHRyaWJ1dGVOYW1lOwotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAg
bV9hdHRyaWJ1dGVOYW1lLmNsZWFyKCk7Ci0gICAgICAgICAgICAgICAgbV9hdHRyaWJ1dGVWYWx1
ZS5jbGVhcigpOwotICAgICAgICAgICAgICAgIG1fYXR0cmlidXRlTmFtZS5hcHBlbmQoY2MpOwot
ICAgICAgICAgICAgICAgIG1fc3RhdGUgPSBBdHRyaWJ1dGVOYW1lOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQmVmb3JlQXR0cmlidXRlVmFsdWU6Ci0g
ICAgICAgICAgICBpZiAoaXNXaGl0ZXNwYWNlKGNjKSkKLSAgICAgICAgICAgICAgICA7Ci0gICAg
ICAgICAgICBlbHNlIGlmIChjYyA9PSAnIicpCi0gICAgICAgICAgICAgICAgbV9zdGF0ZSA9IEF0
dHJpYnV0ZVZhbHVlRG91YmxlUXVvdGVkOwotICAgICAgICAgICAgZWxzZSBpZiAoY2MgPT0gJyYn
KSB7Ci0gICAgICAgICAgICAgICAgbV9zdGF0ZSA9IEF0dHJpYnV0ZVZhbHVlVW5xdW90ZWQ7Ci0g
ICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGNjID09ICdc
JycpCi0gICAgICAgICAgICAgICAgbV9zdGF0ZSA9IEF0dHJpYnV0ZVZhbHVlU2luZ2xlUXVvdGVk
OwotICAgICAgICAgICAgZWxzZSBpZiAoY2MgPT0gJz4nKSB7Ci0gICAgICAgICAgICAgICAgZW1p
dFRhZygpOwotICAgICAgICAgICAgICAgIG1fc3RhdGUgPSBEYXRhOwotICAgICAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgICAgICBtX2F0dHJpYnV0ZVZhbHVlLmFwcGVuZChjYyk7Ci0gICAg
ICAgICAgICAgICAgbV9zdGF0ZSA9IEF0dHJpYnV0ZVZhbHVlVW5xdW90ZWQ7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBdHRyaWJ1dGVWYWx1ZURvdWJs
ZVF1b3RlZDoKLSAgICAgICAgICAgIHdoaWxlICgxKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGNj
ID09ICciJykgewotICAgICAgICAgICAgICAgICAgICBwcm9jZXNzQXR0cmlidXRlKCk7Ci0gICAg
ICAgICAgICAgICAgICAgIG1fc3RhdGUgPSBCZWZvcmVBdHRyaWJ1dGVOYW1lOwotICAgICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYg
KGNjID09ICcmJykgewotICAgICAgICAgICAgICAgICAgICBtX3N0YXRlQmVmb3JlRW50aXR5SW5B
dHRyaWJ1dGVWYWx1ZSA9IG1fc3RhdGU7Ci0gICAgICAgICAgICAgICAgICAgIG1fc3RhdGUgPSBF
bnRpdHlJbkF0dHJpYnV0ZVZhbHVlOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgICB9IAotICAgICAgICAgICAgICAgIG1fYXR0cmlidXRlVmFsdWUuYXBwZW5kKGNj
KTsKLSAgICAgICAgICAgICAgICBtX3NvdXJjZS5hZHZhbmNlKCk7Ci0gICAgICAgICAgICAgICAg
aWYgKG1fc291cmNlLmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICAgICAgICAgIGNjID0gKm1fc291cmNlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgQXR0cmlidXRlVmFsdWVTaW5nbGVRdW90ZWQ6Ci0gICAgICAg
ICAgICB3aGlsZSAoMSkgewotICAgICAgICAgICAgICAgIGlmIChjYyA9PSAnXCcnKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIHByb2Nlc3NBdHRyaWJ1dGUoKTsKLSAgICAgICAgICAgICAgICAgICAg
bV9zdGF0ZSA9IEJlZm9yZUF0dHJpYnV0ZU5hbWU7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoY2MgPT0gJyYnKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIG1fc3RhdGVCZWZvcmVFbnRpdHlJbkF0dHJpYnV0ZVZhbHVlID0g
bV9zdGF0ZTsKLSAgICAgICAgICAgICAgICAgICAgbV9zdGF0ZSA9IEVudGl0eUluQXR0cmlidXRl
VmFsdWU7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0gCi0g
ICAgICAgICAgICAgICAgbV9hdHRyaWJ1dGVWYWx1ZS5hcHBlbmQoY2MpOwotICAgICAgICAgICAg
ICAgIG1fc291cmNlLmFkdmFuY2UoKTsKLSAgICAgICAgICAgICAgICBpZiAobV9zb3VyY2UuaXNF
bXB0eSgpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgY2Mg
PSAqbV9zb3VyY2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSBBdHRyaWJ1dGVWYWx1ZVVucXVvdGVkOgotICAgICAgICAgICAgd2hpbGUgKDEpIHsKLSAg
ICAgICAgICAgICAgICBpZiAoaXNXaGl0ZXNwYWNlKGNjKSkgewotICAgICAgICAgICAgICAgICAg
ICBwcm9jZXNzQXR0cmlidXRlKCk7Ci0gICAgICAgICAgICAgICAgICAgIG1fc3RhdGUgPSBCZWZv
cmVBdHRyaWJ1dGVOYW1lOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKGNjID09ICcmJykgewotICAgICAgICAgICAgICAg
ICAgICBtX3N0YXRlQmVmb3JlRW50aXR5SW5BdHRyaWJ1dGVWYWx1ZSA9IG1fc3RhdGU7Ci0gICAg
ICAgICAgICAgICAgICAgIG1fc3RhdGUgPSBFbnRpdHlJbkF0dHJpYnV0ZVZhbHVlOwotICAgICAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
aWYgKGNjID09ICc+JykgewotICAgICAgICAgICAgICAgICAgICBwcm9jZXNzQXR0cmlidXRlKCk7
Ci0gICAgICAgICAgICAgICAgICAgIGVtaXRUYWcoKTsKLSAgICAgICAgICAgICAgICAgICAgbV9z
dGF0ZSA9IERhdGE7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICBtX2F0dHJpYnV0ZVZhbHVlLmFwcGVuZChjYyk7Ci0gICAgICAg
ICAgICAgICAgbV9zb3VyY2UuYWR2YW5jZSgpOwotICAgICAgICAgICAgICAgIGlmIChtX3NvdXJj
ZS5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAg
ICBjYyA9ICptX3NvdXJjZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIEVudGl0eUluQXR0cmlidXRlVmFsdWU6IAotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIGJvb2wgbm90RW5vdWdoQ2hhcmFjdGVycyA9IGZhbHNlOyAKLSAgICAgICAgICAg
ICAgICB1bnNpZ25lZCBlbnRpdHkgPSBjb25zdW1lRW50aXR5KG1fc291cmNlLCBub3RFbm91Z2hD
aGFyYWN0ZXJzKTsKLSAgICAgICAgICAgICAgICBpZiAobm90RW5vdWdoQ2hhcmFjdGVycykKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIGlmIChlbnRpdHkgPiAw
eEZGRkYpIHsKLSAgICAgICAgICAgICAgICAgICAgbV9hdHRyaWJ1dGVWYWx1ZS5hcHBlbmQoVTE2
X0xFQUQoZW50aXR5KSk7Ci0gICAgICAgICAgICAgICAgICAgIG1fYXR0cmlidXRlVmFsdWUuYXBw
ZW5kKFUxNl9UUkFJTChlbnRpdHkpKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGVudGl0
eSkKLSAgICAgICAgICAgICAgICAgICAgbV9hdHRyaWJ1dGVWYWx1ZS5hcHBlbmQoZW50aXR5KTsK
LSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIG1fYXR0cmlidXRlVmFs
dWUuYXBwZW5kKCcmJyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBtX3N0YXRlID0gbV9z
dGF0ZUJlZm9yZUVudGl0eUluQXR0cmlidXRlVmFsdWU7Ci0gICAgICAgICAgICBjb250aW51ZTsK
LSAgICAgICAgY2FzZSBCb2d1c0NvbW1lbnQ6Ci0gICAgICAgICAgICB3aGlsZSAoMSkgewotICAg
ICAgICAgICAgICAgIGlmIChjYyA9PSAnPicpIHsKLSAgICAgICAgICAgICAgICAgICAgbV9zdGF0
ZSA9IERhdGE7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICBtX3NvdXJjZS5hZHZhbmNlKCk7Ci0gICAgICAgICAgICAgICAgaWYg
KG1fc291cmNlLmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICAgICAgICAgIGNjID0gKm1fc291cmNlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgTWFya3VwRGVjbGFyYXRpb25PcGVuOiB7Ci0gICAgICAgICAgICBp
ZiAoY2MgPT0gJy0nKSB7Ci0gICAgICAgICAgICAgICAgaWYgKG1fc291cmNlLmxlbmd0aCgpIDwg
MikKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIG1fc291cmNl
LmFkdmFuY2UoKTsKLSAgICAgICAgICAgICAgICBjYyA9ICptX3NvdXJjZTsKLSAgICAgICAgICAg
ICAgICBpZiAoY2MgPT0gJy0nKQotICAgICAgICAgICAgICAgICAgICBtX3N0YXRlID0gQ29tbWVu
dFN0YXJ0OwotICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICBtX3N0
YXRlID0gQm9ndXNDb21tZW50OwotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAvLyBJZiB3ZSBjYXJlZCBhYm91dCB0aGUgRE9DVFlQ
RSB3ZSB3b3VsZCB0ZXN0IHRvIGVudGVyIHRob3NlIHN0YXRlcyBoZXJlCi0gICAgICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgICAgIG1fc3RhdGUgPSBCb2d1c0NvbW1lbnQ7Ci0gICAgICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotICAgICAgICBjYXNlIENvbW1lbnRTdGFydDoKLSAgICAgICAgICAgIGlmIChjYyA9
PSAnLScpCi0gICAgICAgICAgICAgICAgbV9zdGF0ZSA9IENvbW1lbnRTdGFydERhc2g7Ci0gICAg
ICAgICAgICBlbHNlIGlmIChjYyA9PSAnPicpCi0gICAgICAgICAgICAgICAgbV9zdGF0ZSA9IERh
dGE7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbV9zdGF0ZSA9IENvbW1lbnQ7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDb21tZW50U3RhcnREYXNoOgotICAg
ICAgICAgICAgaWYgKGNjID09ICctJykKLSAgICAgICAgICAgICAgICBtX3N0YXRlID0gQ29tbWVu
dEVuZDsKLSAgICAgICAgICAgIGVsc2UgaWYgKGNjID09ICc+JykKLSAgICAgICAgICAgICAgICBt
X3N0YXRlID0gRGF0YTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBtX3N0YXRl
ID0gQ29tbWVudDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENvbW1lbnQ6Ci0g
ICAgICAgICAgICB3aGlsZSAoMSkgewotICAgICAgICAgICAgICAgIGlmIChjYyA9PSAnLScpIHsK
LSAgICAgICAgICAgICAgICAgICAgbV9zdGF0ZSA9IENvbW1lbnRFbmREYXNoOwotICAgICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgbV9z
b3VyY2UuYWR2YW5jZSgpOwotICAgICAgICAgICAgICAgIGlmIChtX3NvdXJjZS5pc0VtcHR5KCkp
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICBjYyA9ICptX3Nv
dXJjZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENv
bW1lbnRFbmREYXNoOgotICAgICAgICAgICAgaWYgKGNjID09ICctJykKLSAgICAgICAgICAgICAg
ICBtX3N0YXRlID0gQ29tbWVudEVuZDsKLSAgICAgICAgICAgIGVsc2UgCi0gICAgICAgICAgICAg
ICAgbV9zdGF0ZSA9IENvbW1lbnQ7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBD
b21tZW50RW5kOgotICAgICAgICAgICAgaWYgKGNjID09ICc+JykKLSAgICAgICAgICAgICAgICBt
X3N0YXRlID0gRGF0YTsKLSAgICAgICAgICAgIGVsc2UgaWYgKGNjID09ICctJykKLSAgICAgICAg
ICAgICAgICA7Ci0gICAgICAgICAgICBlbHNlIAotICAgICAgICAgICAgICAgIG1fc3RhdGUgPSBD
b21tZW50OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgbV9zb3VyY2Uu
YWR2YW5jZSgpOwotICAgIH0KLX0KLSAgICAKLXZvaWQgTGVnYWN5UHJlbG9hZFNjYW5uZXI6OnBy
b2Nlc3NBdHRyaWJ1dGUoKQotewotICAgIEF0b21pY1N0cmluZyB0YWcgPSBBdG9taWNTdHJpbmco
bV90YWdOYW1lLmRhdGEoKSwgbV90YWdOYW1lLnNpemUoKSk7Ci0gICAgQXRvbWljU3RyaW5nIGF0
dHJpYnV0ZSA9IEF0b21pY1N0cmluZyhtX2F0dHJpYnV0ZU5hbWUuZGF0YSgpLCBtX2F0dHJpYnV0
ZU5hbWUuc2l6ZSgpKTsKLSAgICAKLSAgICBTdHJpbmcgdmFsdWUobV9hdHRyaWJ1dGVWYWx1ZS5k
YXRhKCksIG1fYXR0cmlidXRlVmFsdWUuc2l6ZSgpKTsKLSAgICBpZiAodGFnID09IHNjcmlwdFRh
ZyB8fCB0YWcgPT0gaW1nVGFnKSB7Ci0gICAgICAgIGlmIChhdHRyaWJ1dGUgPT0gc3JjQXR0ciAm
JiBtX3VybFRvTG9hZC5pc0VtcHR5KCkpCi0gICAgICAgICAgICBtX3VybFRvTG9hZCA9IGRlcHJl
Y2F0ZWRQYXJzZVVSTCh2YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGF0dHJpYnV0ZSA9PSBjaGFy
c2V0QXR0cikKLSAgICAgICAgICAgIG1fY2hhcnNldCA9IHZhbHVlOwotICAgIH0gZWxzZSBpZiAo
dGFnID09IGxpbmtUYWcpIHsKLSAgICAgICAgaWYgKGF0dHJpYnV0ZSA9PSBocmVmQXR0ciAmJiBt
X3VybFRvTG9hZC5pc0VtcHR5KCkpCi0gICAgICAgICAgICBtX3VybFRvTG9hZCA9IGRlcHJlY2F0
ZWRQYXJzZVVSTCh2YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGF0dHJpYnV0ZSA9PSByZWxBdHRy
KSB7Ci0gICAgICAgICAgICBIVE1MTGlua0VsZW1lbnQ6OlJlbEF0dHJpYnV0ZSByZWw7Ci0gICAg
ICAgICAgICBIVE1MTGlua0VsZW1lbnQ6OnRva2VuaXplUmVsQXR0cmlidXRlKHZhbHVlLCByZWwp
OwotICAgICAgICAgICAgbV9saW5rSXNTdHlsZVNoZWV0ID0gcmVsLm1faXNTdHlsZVNoZWV0ICYm
ICFyZWwubV9pc0FsdGVybmF0ZSAmJiAhcmVsLm1faXNJY29uICYmICFyZWwubV9pc0ROU1ByZWZl
dGNoOwotICAgICAgICB9IGVsc2UgaWYgKGF0dHJpYnV0ZSA9PSBjaGFyc2V0QXR0cikKLSAgICAg
ICAgICAgIG1fY2hhcnNldCA9IHZhbHVlOwotICAgIH0KLX0KLSAgICAKLWlubGluZSB2b2lkIExl
Z2FjeVByZWxvYWRTY2FubmVyOjplbWl0Q2hhcmFjdGVyKFVDaGFyIGMpCi17Ci0gICAgaWYgKG1f
Y29udGVudE1vZGVsID09IENEQVRBICYmIG1fbGFzdFN0YXJ0VGFnID09IHN0eWxlVGFnKSAKLSAg
ICAgICAgdG9rZW5pemVDU1MoYyk7Ci19Ci0gICAgCi1pbmxpbmUgdm9pZCBMZWdhY3lQcmVsb2Fk
U2Nhbm5lcjo6dG9rZW5pemVDU1MoVUNoYXIgYykKLXsgICAgCi0gICAgLy8gV2UgYXJlIGp1c3Qg
aW50ZXJlc3RlZCBpbiBAaW1wb3J0IHJ1bGVzLCBubyBuZWVkIGZvciByZWFsIHRva2VuaXphdGlv
biBoZXJlCi0gICAgLy8gU2VhcmNoaW5nIGZvciBvdGhlciB0eXBlcyBvZiByZXNvdXJjZXMgaXMg
cHJvYmFibHkgbG93IHBheW9mZgotICAgIHN3aXRjaCAobV9jc3NTdGF0ZSkgewotICAgIGNhc2Ug
Q1NTSW5pdGlhbDoKLSAgICAgICAgaWYgKGMgPT0gJ0AnKQotICAgICAgICAgICAgbV9jc3NTdGF0
ZSA9IENTU1J1bGVTdGFydDsKLSAgICAgICAgZWxzZSBpZiAoYyA9PSAnLycpCi0gICAgICAgICAg
ICBtX2Nzc1N0YXRlID0gQ1NTTWF5YmVDb21tZW50OwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IENTU01heWJlQ29tbWVudDoKLSAgICAgICAgaWYgKGMgPT0gJyonKQotICAgICAgICAgICAgbV9j
c3NTdGF0ZSA9IENTU0NvbW1lbnQ7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1fY3NzU3Rh
dGUgPSBDU1NJbml0aWFsOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENTU0NvbW1lbnQ6Ci0g
ICAgICAgIGlmIChjID09ICcqJykKLSAgICAgICAgICAgIG1fY3NzU3RhdGUgPSBDU1NNYXliZUNv
bW1lbnRFbmQ7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTTWF5YmVDb21tZW50RW5kOgot
ICAgICAgICBpZiAoYyA9PSAnLycpCi0gICAgICAgICAgICBtX2Nzc1N0YXRlID0gQ1NTSW5pdGlh
bDsKLSAgICAgICAgZWxzZSBpZiAoYyA9PSAnKicpCi0gICAgICAgICAgICA7Ci0gICAgICAgIGVs
c2UKLSAgICAgICAgICAgIG1fY3NzU3RhdGUgPSBDU1NDb21tZW50OwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIENTU1J1bGVTdGFydDoKLSAgICAgICAgaWYgKChjID49ICdBJyAmJiBjIDw9ICda
JykgfHwgKGMgPj0gJ2EnICYmIGMgPD0gJ3onKSkgewotICAgICAgICAgICAgbV9jc3NSdWxlLmNs
ZWFyKCk7Ci0gICAgICAgICAgICBtX2Nzc1J1bGVWYWx1ZS5jbGVhcigpOwotICAgICAgICAgICAg
bV9jc3NSdWxlLmFwcGVuZChjKTsKLSAgICAgICAgICAgIG1fY3NzU3RhdGUgPSBDU1NSdWxlOwot
ICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIG1fY3NzU3RhdGUgPSBDU1NJbml0aWFsOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIENTU1J1bGU6Ci0gICAgICAgIGlmIChpc1doaXRlc3BhY2Uo
YykpCi0gICAgICAgICAgICBtX2Nzc1N0YXRlID0gQ1NTQWZ0ZXJSdWxlOwotICAgICAgICBlbHNl
IGlmIChjID09ICc7JykKLSAgICAgICAgICAgIG1fY3NzU3RhdGUgPSBDU1NJbml0aWFsOwotICAg
ICAgICBlbHNlCi0gICAgICAgICAgICBtX2Nzc1J1bGUuYXBwZW5kKGMpOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIENTU0FmdGVyUnVsZToKLSAgICAgICAgaWYgKGlzV2hpdGVzcGFjZShjKSkK
LSAgICAgICAgICAgIDsKLSAgICAgICAgZWxzZSBpZiAoYyA9PSAnOycpCi0gICAgICAgICAgICBt
X2Nzc1N0YXRlID0gQ1NTSW5pdGlhbDsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBtX2Nz
c1N0YXRlID0gQ1NTUnVsZVZhbHVlOwotICAgICAgICAgICAgbV9jc3NSdWxlVmFsdWUuYXBwZW5k
KGMpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTUnVsZVZhbHVlOgot
ICAgICAgICBpZiAoaXNXaGl0ZXNwYWNlKGMpKQotICAgICAgICAgICAgbV9jc3NTdGF0ZSA9IENT
U0FmdGVyUnVsZVZhbHVlOwotICAgICAgICBlbHNlIGlmIChjID09ICc7JykgewotICAgICAgICAg
ICAgZW1pdENTU1J1bGUoKTsKLSAgICAgICAgICAgIG1fY3NzU3RhdGUgPSBDU1NJbml0aWFsOwot
ICAgICAgICB9IGVsc2UgCi0gICAgICAgICAgICBtX2Nzc1J1bGVWYWx1ZS5hcHBlbmQoYyk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTQWZ0ZXJSdWxlVmFsdWU6Ci0gICAgICAgIGlmIChp
c1doaXRlc3BhY2UoYykpCi0gICAgICAgICAgICA7Ci0gICAgICAgIGVsc2UgaWYgKGMgPT0gJzsn
KSB7Ci0gICAgICAgICAgICBlbWl0Q1NTUnVsZSgpOwotICAgICAgICAgICAgbV9jc3NTdGF0ZSA9
IENTU0luaXRpYWw7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBGSVhNRSBtZWRp
YSBydWxlcwotICAgICAgICAgICAgIG1fY3NzU3RhdGUgPSBDU1NJbml0aWFsOwotICAgICAgICB9
Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLX0KLSAgICAKLXZvaWQgTGVnYWN5UHJlbG9hZFNjYW5u
ZXI6OmVtaXRUYWcoKQotewotICAgIGlmIChtX2Nsb3NlVGFnKSB7Ci0gICAgICAgIG1fY29udGVu
dE1vZGVsID0gUENEQVRBOwotICAgICAgICBtX2Nzc1N0YXRlID0gQ1NTSW5pdGlhbDsKLSAgICAg
ICAgY2xlYXJMYXN0Q2hhcmFjdGVycygpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAot
ICAgIEF0b21pY1N0cmluZyB0YWcobV90YWdOYW1lLmRhdGEoKSwgbV90YWdOYW1lLnNpemUoKSk7
Ci0gICAgbV9sYXN0U3RhcnRUYWcgPSB0YWc7Ci0gICAgCi0gICAgaWYgKHRhZyA9PSB0ZXh0YXJl
YVRhZyB8fCB0YWcgPT0gdGl0bGVUYWcpCi0gICAgICAgIG1fY29udGVudE1vZGVsID0gUkNEQVRB
OwotICAgIGVsc2UgaWYgKHRhZyA9PSBzdHlsZVRhZyB8fCB0YWcgPT0geG1wVGFnIHx8IHRhZyA9
PSBzY3JpcHRUYWcgfHwgdGFnID09IGlmcmFtZVRhZyB8fCB0YWcgPT0gbm9lbWJlZFRhZyB8fCB0
YWcgPT0gbm9mcmFtZXNUYWcpCi0gICAgICAgIG1fY29udGVudE1vZGVsID0gQ0RBVEE7Ci0gICAg
ZWxzZSBpZiAodGFnID09IG5vc2NyaXB0VGFnKQotICAgICAgICAvLyB3ZSB3b3VsZG4ndCBiZSBo
ZXJlIGlmIHNjcmlwdHMgd2VyZSBkaXNhYmxlZAotICAgICAgICBtX2NvbnRlbnRNb2RlbCA9IENE
QVRBOwotICAgIGVsc2UgaWYgKHRhZyA9PSBwbGFpbnRleHRUYWcpCi0gICAgICAgIG1fY29udGVu
dE1vZGVsID0gUExBSU5URVhUOwotICAgIGVsc2UKLSAgICAgICAgbV9jb250ZW50TW9kZWwgPSBQ
Q0RBVEE7Ci0gICAgCi0gICAgaWYgKHRhZyA9PSBib2R5VGFnKQotICAgICAgICBtX2JvZHlTZWVu
ID0gdHJ1ZTsKLSAgICAKLSAgICBpZiAobV91cmxUb0xvYWQuaXNFbXB0eSgpKSB7Ci0gICAgICAg
IG1fbGlua0lzU3R5bGVTaGVldCA9IGZhbHNlOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAg
IAotICAgIGlmICh0YWcgPT0gc2NyaXB0VGFnKQotICAgICAgICBtX2RvY3VtZW50LT5kb2NMb2Fk
ZXIoKS0+cHJlbG9hZChDYWNoZWRSZXNvdXJjZTo6U2NyaXB0LCBtX3VybFRvTG9hZCwgbV9jaGFy
c2V0LCBzY2FubmluZ0JvZHkoKSk7Ci0gICAgZWxzZSBpZiAodGFnID09IGltZ1RhZykgCi0gICAg
ICAgIG1fZG9jdW1lbnQtPmRvY0xvYWRlcigpLT5wcmVsb2FkKENhY2hlZFJlc291cmNlOjpJbWFn
ZVJlc291cmNlLCBtX3VybFRvTG9hZCwgU3RyaW5nKCksIHNjYW5uaW5nQm9keSgpKTsKLSAgICBl
bHNlIGlmICh0YWcgPT0gbGlua1RhZyAmJiBtX2xpbmtJc1N0eWxlU2hlZXQpIAotICAgICAgICBt
X2RvY3VtZW50LT5kb2NMb2FkZXIoKS0+cHJlbG9hZChDYWNoZWRSZXNvdXJjZTo6Q1NTU3R5bGVT
aGVldCwgbV91cmxUb0xvYWQsIG1fY2hhcnNldCwgc2Nhbm5pbmdCb2R5KCkpOwotCi0gICAgbV91
cmxUb0xvYWQgPSBTdHJpbmcoKTsKLSAgICBtX2NoYXJzZXQgPSBTdHJpbmcoKTsKLSAgICBtX2xp
bmtJc1N0eWxlU2hlZXQgPSBmYWxzZTsKLX0KLSAgICAKLXZvaWQgTGVnYWN5UHJlbG9hZFNjYW5u
ZXI6OmVtaXRDU1NSdWxlKCkKLXsKLSAgICBTdHJpbmcgcnVsZShtX2Nzc1J1bGUuZGF0YSgpLCBt
X2Nzc1J1bGUuc2l6ZSgpKTsKLSAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UocnVsZSwgImltcG9y
dCIpICYmICFtX2Nzc1J1bGVWYWx1ZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgU3RyaW5nIHZhbHVl
KG1fY3NzUnVsZVZhbHVlLmRhdGEoKSwgbV9jc3NSdWxlVmFsdWUuc2l6ZSgpKTsKLSAgICAgICAg
U3RyaW5nIHVybCA9IGRlcHJlY2F0ZWRQYXJzZVVSTCh2YWx1ZSk7Ci0gICAgICAgIGlmICghdXJs
LmlzRW1wdHkoKSkKLSAgICAgICAgICAgIG1fZG9jdW1lbnQtPmRvY0xvYWRlcigpLT5wcmVsb2Fk
KENhY2hlZFJlc291cmNlOjpDU1NTdHlsZVNoZWV0LCB1cmwsIFN0cmluZygpLCBzY2FubmluZ0Jv
ZHkoKSk7Ci0gICAgfQotICAgIG1fY3NzUnVsZS5jbGVhcigpOwotICAgIG1fY3NzUnVsZVZhbHVl
LmNsZWFyKCk7Ci19Ci0gICAgICAgICAgICAgICAgCi19CmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0
bWwvTGVnYWN5UHJlbG9hZFNjYW5uZXIuaCBiL1dlYkNvcmUvaHRtbC9MZWdhY3lQcmVsb2FkU2Nh
bm5lci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMzMzNjZkNmViMzBhMDFjZDI1
MzdhMzA5ZGE0MWI1M2VhN2YyZTg0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1dlYkNvcmUvaHRtbC9MZWdhY3lQcmVsb2FkU2Nhbm5lci5oCisrKyAvZGV2
L251bGwKQEAgLTEsMTQ0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUg
SW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
LSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCi0gKi8KLQotI2lmbmRlZiBMZWdhY3lQcmVsb2FkU2Nhbm5lcl9oCi0jZGVmaW5lIExl
Z2FjeVByZWxvYWRTY2FubmVyX2gKLQotI2luY2x1ZGUgIlNlZ21lbnRlZFN0cmluZy5oIgotI2lu
Y2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLSNpbmNs
dWRlIDx3dGYvdGV4dC9BdG9taWNTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotICAg
IAotICAgIGNsYXNzIENhY2hlZFJlc291cmNlOwotICAgIGNsYXNzIENhY2hlZFJlc291cmNlQ2xp
ZW50OwotICAgIGNsYXNzIERvY3VtZW50OwotICAgIAotICAgIGNsYXNzIExlZ2FjeVByZWxvYWRT
Y2FubmVyIDogcHVibGljIE5vbmNvcHlhYmxlIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIExlZ2Fj
eVByZWxvYWRTY2FubmVyKERvY3VtZW50Kik7Ci0gICAgICAgIH5MZWdhY3lQcmVsb2FkU2Nhbm5l
cigpOwotICAgICAgICB2b2lkIGJlZ2luKCk7Ci0gICAgICAgIHZvaWQgd3JpdGUoY29uc3QgU2Vn
bWVudGVkU3RyaW5nJik7Ci0gICAgICAgIHZvaWQgZW5kKCk7Ci0gICAgICAgIGJvb2wgaW5Qcm9n
cmVzcygpIGNvbnN0IHsgcmV0dXJuIG1faW5Qcm9ncmVzczsgfQotICAgICAgICAKLSAgICAgICAg
Ym9vbCBzY2FubmluZ0JvZHkoKSBjb25zdDsKLSAgICAgICAgCi0gICAgICAgIHN0YXRpYyB1bnNp
Z25lZCBjb25zdW1lRW50aXR5KFNlZ21lbnRlZFN0cmluZyYsIGJvb2wmIG5vdEVub3VnaENoYXJh
Y3RlcnMpOwotICAgICAgICAKLSAgICBwcml2YXRlOgotICAgICAgICB2b2lkIHRva2VuaXplKGNv
bnN0IFNlZ21lbnRlZFN0cmluZyYpOwotICAgICAgICB2b2lkIHJlc2V0KCk7Ci0gICAgICAgIAot
ICAgICAgICB2b2lkIGVtaXRUYWcoKTsKLSAgICAgICAgdm9pZCBlbWl0Q2hhcmFjdGVyKFVDaGFy
KTsKLSAgICAgICAgCi0gICAgICAgIHZvaWQgdG9rZW5pemVDU1MoVUNoYXIpOwotICAgICAgICB2
b2lkIGVtaXRDU1NSdWxlKCk7Ci0gICAgICAgIAotICAgICAgICB2b2lkIHByb2Nlc3NBdHRyaWJ1
dGUoKTsKLQotICAgICAgICAKLSAgICAgICAgdm9pZCBjbGVhckxhc3RDaGFyYWN0ZXJzKCk7Ci0g
ICAgICAgIHZvaWQgcmVtZW1iZXJDaGFyYWN0ZXIoVUNoYXIpOwotICAgICAgICBib29sIGxhc3RD
aGFyYWN0ZXJzTWF0Y2goY29uc3QgY2hhciosIHVuc2lnbmVkIGNvdW50KSBjb25zdDsKLSAgICAg
ICAgCi0gICAgICAgIGJvb2wgbV9pblByb2dyZXNzOwotICAgICAgICBTZWdtZW50ZWRTdHJpbmcg
bV9zb3VyY2U7Ci0gICAgICAgIAotICAgICAgICBlbnVtIFN0YXRlIHsKLSAgICAgICAgICAgIERh
dGEsCi0gICAgICAgICAgICBFbnRpdHlEYXRhLAotICAgICAgICAgICAgVGFnT3BlbiwKLSAgICAg
ICAgICAgIENsb3NlVGFnT3BlbiwKLSAgICAgICAgICAgIFRhZ05hbWUsCi0gICAgICAgICAgICBC
ZWZvcmVBdHRyaWJ1dGVOYW1lLAotICAgICAgICAgICAgQXR0cmlidXRlTmFtZSwKLSAgICAgICAg
ICAgIEFmdGVyQXR0cmlidXRlTmFtZSwKLSAgICAgICAgICAgIEJlZm9yZUF0dHJpYnV0ZVZhbHVl
LAotICAgICAgICAgICAgQXR0cmlidXRlVmFsdWVEb3VibGVRdW90ZWQsCi0gICAgICAgICAgICBB
dHRyaWJ1dGVWYWx1ZVNpbmdsZVF1b3RlZCwKLSAgICAgICAgICAgIEF0dHJpYnV0ZVZhbHVlVW5x
dW90ZWQsCi0gICAgICAgICAgICBFbnRpdHlJbkF0dHJpYnV0ZVZhbHVlLAotICAgICAgICAgICAg
Qm9ndXNDb21tZW50LAotICAgICAgICAgICAgTWFya3VwRGVjbGFyYXRpb25PcGVuLAotICAgICAg
ICAgICAgQ29tbWVudFN0YXJ0LAotICAgICAgICAgICAgQ29tbWVudFN0YXJ0RGFzaCwKLSAgICAg
ICAgICAgIENvbW1lbnQsCi0gICAgICAgICAgICBDb21tZW50RW5kRGFzaCwKLSAgICAgICAgICAg
IENvbW1lbnRFbmQKLSAgICAgICAgfTsKLSAgICAgICAgU3RhdGUgbV9zdGF0ZTsKLSAgICAgICAg
Ym9vbCBtX2VzY2FwZTsKLSAgICAgICAgZW51bSBDb250ZW50TW9kZWwgewotICAgICAgICAgICAg
UENEQVRBLAotICAgICAgICAgICAgUkNEQVRBLAotICAgICAgICAgICAgQ0RBVEEsCi0gICAgICAg
ICAgICBQTEFJTlRFWFQKLSAgICAgICAgfTsKLSAgICAgICAgQ29udGVudE1vZGVsIG1fY29udGVu
dE1vZGVsOwotICAgICAgICB1bnNpZ25lZCBtX2NvbW1lbnRQb3M7Ci0gICAgICAgIFN0YXRlIG1f
c3RhdGVCZWZvcmVFbnRpdHlJbkF0dHJpYnV0ZVZhbHVlOwotICAgICAgICAKLSAgICAgICAgc3Rh
dGljIGNvbnN0IHVuc2lnbmVkIGxhc3RDaGFyYWN0ZXJzQnVmZmVyU2l6ZSA9IDg7Ci0gICAgICAg
IFVDaGFyIG1fbGFzdENoYXJhY3RlcnNbbGFzdENoYXJhY3RlcnNCdWZmZXJTaXplXTsKLSAgICAg
ICAgdW5zaWduZWQgbV9sYXN0Q2hhcmFjdGVySW5kZXg7Ci0gICAgICAgIAotICAgICAgICBib29s
IG1fY2xvc2VUYWc7Ci0gICAgICAgIFZlY3RvcjxVQ2hhciwgMzI+IG1fdGFnTmFtZTsKLSAgICAg
ICAgVmVjdG9yPFVDaGFyLCAzMj4gbV9hdHRyaWJ1dGVOYW1lOwotICAgICAgICBWZWN0b3I8VUNo
YXI+IG1fYXR0cmlidXRlVmFsdWU7Ci0gICAgICAgIEF0b21pY1N0cmluZyBtX2xhc3RTdGFydFRh
ZzsKLSAgICAgICAgCi0gICAgICAgIFN0cmluZyBtX3VybFRvTG9hZDsKLSAgICAgICAgU3RyaW5n
IG1fY2hhcnNldDsKLSAgICAgICAgYm9vbCBtX2xpbmtJc1N0eWxlU2hlZXQ7Ci0gICAgICAgIAot
ICAgICAgICBlbnVtIENTU1N0YXRlIHsKLSAgICAgICAgICAgIENTU0luaXRpYWwsCi0gICAgICAg
ICAgICBDU1NNYXliZUNvbW1lbnQsCi0gICAgICAgICAgICBDU1NDb21tZW50LAotICAgICAgICAg
ICAgQ1NTTWF5YmVDb21tZW50RW5kLAotICAgICAgICAgICAgQ1NTUnVsZVN0YXJ0LAotICAgICAg
ICAgICAgQ1NTUnVsZSwKLSAgICAgICAgICAgIENTU0FmdGVyUnVsZSwKLSAgICAgICAgICAgIENT
U1J1bGVWYWx1ZSwKLSAgICAgICAgICAgIENTU0FmdGVyUnVsZVZhbHVlCi0gICAgICAgIH07Ci0g
ICAgICAgIENTU1N0YXRlIG1fY3NzU3RhdGU7Ci0gICAgICAgIFZlY3RvcjxVQ2hhciwgMTY+IG1f
Y3NzUnVsZTsKLSAgICAgICAgVmVjdG9yPFVDaGFyPiBtX2Nzc1J1bGVWYWx1ZTsKLSAgICAgICAg
Ci0gICAgICAgIGRvdWJsZSBtX3RpbWVVc2VkOwotICAgICAgICAKLSAgICAgICAgYm9vbCBtX2Jv
ZHlTZWVuOwotICAgICAgICBEb2N1bWVudCogbV9kb2N1bWVudDsKLSAgICB9OwotCi19Ci0KLSNl
bmRpZgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9sb2FkZXIvRlRQRGlyZWN0b3J5RG9jdW1lbnQuY3Bw
IGIvV2ViQ29yZS9sb2FkZXIvRlRQRGlyZWN0b3J5RG9jdW1lbnQuY3BwCmluZGV4IDkzMTVlNDUw
MWNhZDNmMzgzNjRiZjE0MDU3MTdjM2NkYmU3YzE2ODYuLjVjNzEwMmM2OGQ2MGUwZWQ3ZjhmY2U0
ZWUyMTUzOGZmNGI5MTEwMTMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvbG9hZGVyL0ZUUERpcmVjdG9y
eURvY3VtZW50LmNwcAorKysgYi9XZWJDb3JlL2xvYWRlci9GVFBEaXJlY3RvcnlEb2N1bWVudC5j
cHAKQEAgLTI3LDkgKzI3LDkgQEAKICNpbmNsdWRlICJGVFBEaXJlY3RvcnlEb2N1bWVudC5oIgog
CiAjaW5jbHVkZSAiQ2hhcmFjdGVyTmFtZXMuaCIKKyNpbmNsdWRlICJIVE1MRG9jdW1lbnRQYXJz
ZXIuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJIVE1MVGFibGVFbGVtZW50
LmgiCi0jaW5jbHVkZSAiTGVnYWN5SFRNTERvY3VtZW50UGFyc2VyLmgiCiAjaW5jbHVkZSAiTG9j
YWxpemVkU3RyaW5ncy5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJGVFBEaXJl
Y3RvcnlQYXJzZXIuaCIKQEAgLTQ4LDEzICs0OCwxMyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAgICAgCi1jbGFzcyBGVFBEaXJlY3RvcnlEb2N1
bWVudFBhcnNlciA6IHB1YmxpYyBMZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXIgeworY2xhc3MgRlRQ
RGlyZWN0b3J5RG9jdW1lbnRQYXJzZXIgOiBwdWJsaWMgSFRNTERvY3VtZW50UGFyc2VyIHsKIHB1
YmxpYzoKICAgICBGVFBEaXJlY3RvcnlEb2N1bWVudFBhcnNlcihIVE1MRG9jdW1lbnQqKTsKIAog
ICAgIHZpcnR1YWwgdm9pZCBhcHBlbmQoY29uc3QgU2VnbWVudGVkU3RyaW5nJik7CiAgICAgdmly
dHVhbCB2b2lkIGZpbmlzaCgpOwotICAgIAorCiAgICAgdmlydHVhbCBib29sIGlzV2FpdGluZ0Zv
clNjcmlwdHMoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogCiAgICAgaW5saW5lIHZvaWQgY2hl
Y2tCdWZmZXIoaW50IGxlbiA9IDEwKQpAQCAtNzksNyArNzksNyBAQCBwcml2YXRlOgogICAgIHZv
aWQgcGFyc2VBbmRBcHBlbmRPbmVMaW5lKGNvbnN0IFN0cmluZyYpOwogICAgIHZvaWQgYXBwZW5k
RW50cnkoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHNpemUsIGNvbnN0IFN0cmlu
ZyYgZGF0ZSwgYm9vbCBpc0RpcmVjdG9yeSk7ICAgIAogICAgIFBhc3NSZWZQdHI8RWxlbWVudD4g
Y3JlYXRlVERGb3JGaWxlbmFtZShjb25zdCBTdHJpbmcmKTsKLSAgICAKKwogICAgIFJlZlB0cjxI
VE1MVGFibGVFbGVtZW50PiBtX3RhYmxlRWxlbWVudDsKIAogICAgIGJvb2wgbV9za2lwTEY7CkBA
IC05NCwxNCArOTQsMTQgQEAgcHJpdmF0ZToKIH07CiAKIEZUUERpcmVjdG9yeURvY3VtZW50UGFy
c2VyOjpGVFBEaXJlY3RvcnlEb2N1bWVudFBhcnNlcihIVE1MRG9jdW1lbnQqIGRvY3VtZW50KQot
ICAgIDogTGVnYWN5SFRNTERvY3VtZW50UGFyc2VyKGRvY3VtZW50LCBmYWxzZSkKKyAgICA6IEhU
TUxEb2N1bWVudFBhcnNlcihkb2N1bWVudCwgZmFsc2UpCiAgICAgLCBtX3NraXBMRihmYWxzZSkK
ICAgICAsIG1fcGFyc2VkVGVtcGxhdGUoZmFsc2UpCiAgICAgLCBtX3NpemUoMjU0KQogICAgICwg
bV9idWZmZXIoc3RhdGljX2Nhc3Q8VUNoYXIqPihmYXN0TWFsbG9jKHNpemVvZihVQ2hhcikgKiBt
X3NpemUpKSkKICAgICAsIG1fZGVzdChtX2J1ZmZlcikKIHsKLX0gICAgCit9CiAKIHZvaWQgRlRQ
RGlyZWN0b3J5RG9jdW1lbnRQYXJzZXI6OmFwcGVuZEVudHJ5KGNvbnN0IFN0cmluZyYgZmlsZW5h
bWUsIGNvbnN0IFN0cmluZyYgc2l6ZSwgY29uc3QgU3RyaW5nJiBkYXRlLCBib29sIGlzRGlyZWN0
b3J5KQogewpAQCAtMTA5LDcgKzEwOSw3IEBAIHZvaWQgRlRQRGlyZWN0b3J5RG9jdW1lbnRQYXJz
ZXI6OmFwcGVuZEVudHJ5KGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIGNvbnN0IFN0cmluCiAKICAg
ICBSZWZQdHI8RWxlbWVudD4gcm93RWxlbWVudCA9IG1fdGFibGVFbGVtZW50LT5pbnNlcnRSb3co
LTEsIGVjKTsKICAgICByb3dFbGVtZW50LT5zZXRBdHRyaWJ1dGUoImNsYXNzIiwgImZ0cERpcmVj
dG9yeUVudHJ5Um93IiwgZWMpOwotICAgCisKICAgICBSZWZQdHI8RWxlbWVudD4gZWxlbWVudCA9
IGRvY3VtZW50KCktPmNyZWF0ZUVsZW1lbnQodGRUYWcsIGZhbHNlKTsKICAgICBlbGVtZW50LT5h
cHBlbmRDaGlsZChUZXh0OjpjcmVhdGUoZG9jdW1lbnQoKSwgU3RyaW5nKCZub0JyZWFrU3BhY2Us
IDEpKSwgZWMpOwogICAgIGlmIChpc0RpcmVjdG9yeSkKQEAgLTExNywxNiArMTE3LDE2IEBAIHZv
aWQgRlRQRGlyZWN0b3J5RG9jdW1lbnRQYXJzZXI6OmFwcGVuZEVudHJ5KGNvbnN0IFN0cmluZyYg
ZmlsZW5hbWUsIGNvbnN0IFN0cmluCiAgICAgZWxzZQogICAgICAgICBlbGVtZW50LT5zZXRBdHRy
aWJ1dGUoImNsYXNzIiwgImZ0cERpcmVjdG9yeUljb24gZnRwRGlyZWN0b3J5VHlwZUZpbGUiLCBl
Yyk7CiAgICAgcm93RWxlbWVudC0+YXBwZW5kQ2hpbGQoZWxlbWVudCwgZWMpOwotICAgIAorCiAg
ICAgZWxlbWVudCA9IGNyZWF0ZVRERm9yRmlsZW5hbWUoZmlsZW5hbWUpOwogICAgIGVsZW1lbnQt
PnNldEF0dHJpYnV0ZSgiY2xhc3MiLCAiZnRwRGlyZWN0b3J5RmlsZU5hbWUiLCBlYyk7CiAgICAg
cm93RWxlbWVudC0+YXBwZW5kQ2hpbGQoZWxlbWVudCwgZWMpOwotICAgIAorCiAgICAgZWxlbWVu
dCA9IGRvY3VtZW50KCktPmNyZWF0ZUVsZW1lbnQodGRUYWcsIGZhbHNlKTsKICAgICBlbGVtZW50
LT5hcHBlbmRDaGlsZChUZXh0OjpjcmVhdGUoZG9jdW1lbnQoKSwgZGF0ZSksIGVjKTsKICAgICBl
bGVtZW50LT5zZXRBdHRyaWJ1dGUoImNsYXNzIiwgImZ0cERpcmVjdG9yeUZpbGVEYXRlIiwgZWMp
OwogICAgIHJvd0VsZW1lbnQtPmFwcGVuZENoaWxkKGVsZW1lbnQsIGVjKTsKLSAgICAKKwogICAg
IGVsZW1lbnQgPSBkb2N1bWVudCgpLT5jcmVhdGVFbGVtZW50KHRkVGFnLCBmYWxzZSk7CiAgICAg
ZWxlbWVudC0+YXBwZW5kQ2hpbGQoVGV4dDo6Y3JlYXRlKGRvY3VtZW50KCksIHNpemUpLCBlYyk7
CiAgICAgZWxlbWVudC0+c2V0QXR0cmlidXRlKCJjbGFzcyIsICJmdHBEaXJlY3RvcnlGaWxlU2l6
ZSIsIGVjKTsKQEAgLTEzNiw3ICsxMzYsNyBAQCB2b2lkIEZUUERpcmVjdG9yeURvY3VtZW50UGFy
c2VyOjphcHBlbmRFbnRyeShjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBjb25zdCBTdHJpbgogUGFz
c1JlZlB0cjxFbGVtZW50PiBGVFBEaXJlY3RvcnlEb2N1bWVudFBhcnNlcjo6Y3JlYXRlVERGb3JG
aWxlbmFtZShjb25zdCBTdHJpbmcmIGZpbGVuYW1lKQogewogICAgIEV4Y2VwdGlvbkNvZGUgZWM7
Ci0gICAgCisKICAgICBTdHJpbmcgZnVsbFVSTCA9IGRvY3VtZW50KCktPmJhc2VVUkwoKS5zdHJp
bmcoKTsKICAgICBpZiAoZnVsbFVSTFtmdWxsVVJMLmxlbmd0aCgpIC0gMV0gPT0gJy8nKQogICAg
ICAgICBmdWxsVVJMLmFwcGVuZChmaWxlbmFtZSk7CkBAIC0xNDYsMTAgKzE0NiwxMCBAQCBQYXNz
UmVmUHRyPEVsZW1lbnQ+IEZUUERpcmVjdG9yeURvY3VtZW50UGFyc2VyOjpjcmVhdGVUREZvckZp
bGVuYW1lKGNvbnN0IFN0cmluZwogICAgIFJlZlB0cjxFbGVtZW50PiBhbmNob3JFbGVtZW50ID0g
ZG9jdW1lbnQoKS0+Y3JlYXRlRWxlbWVudChhVGFnLCBmYWxzZSk7CiAgICAgYW5jaG9yRWxlbWVu
dC0+c2V0QXR0cmlidXRlKCJocmVmIiwgZnVsbFVSTCwgZWMpOwogICAgIGFuY2hvckVsZW1lbnQt
PmFwcGVuZENoaWxkKFRleHQ6OmNyZWF0ZShkb2N1bWVudCgpLCBmaWxlbmFtZSksIGVjKTsKLSAg
ICAKKwogICAgIFJlZlB0cjxFbGVtZW50PiB0ZEVsZW1lbnQgPSBkb2N1bWVudCgpLT5jcmVhdGVF
bGVtZW50KHRkVGFnLCBmYWxzZSk7CiAgICAgdGRFbGVtZW50LT5hcHBlbmRDaGlsZChhbmNob3JF
bGVtZW50LCBlYyk7Ci0gICAgCisKICAgICByZXR1cm4gdGRFbGVtZW50LnJlbGVhc2UoKTsKIH0K
IApAQCAtMTU3LDE4ICsxNTcsMTggQEAgc3RhdGljIFN0cmluZyBwcm9jZXNzRmlsZXNpemVTdHJp
bmcoY29uc3QgU3RyaW5nJiBzaXplLCBib29sIGlzRGlyZWN0b3J5KQogewogICAgIGlmIChpc0Rp
cmVjdG9yeSkKICAgICAgICAgcmV0dXJuICItLSI7Ci0gICAgCisKICAgICBib29sIHZhbGlkOwog
ICAgIGludDY0X3QgYnl0ZXMgPSBzaXplLnRvVUludDY0KCZ2YWxpZCk7CiAgICAgaWYgKCF2YWxp
ZCkKICAgICAgICAgcmV0dXJuIHVua25vd25GaWxlU2l6ZVRleHQoKTsKLSAgICAgCisKICAgICBp
ZiAoYnl0ZXMgPCAxMDAwMDAwKQogICAgICAgICByZXR1cm4gU3RyaW5nOjpmb3JtYXQoIiUuMmYg
S0IiLCBzdGF0aWNfY2FzdDxmbG9hdD4oYnl0ZXMpLzEwMDApOwogCiAgICAgaWYgKGJ5dGVzIDwg
MTAwMDAwMDAwMCkKICAgICAgICAgcmV0dXJuIFN0cmluZzo6Zm9ybWF0KCIlLjJmIE1CIiwgc3Rh
dGljX2Nhc3Q8ZmxvYXQ+KGJ5dGVzKS8xMDAwMDAwKTsKLSAgICAgICAgCisKICAgICByZXR1cm4g
U3RyaW5nOjpmb3JtYXQoIiUuMmYgR0IiLCBzdGF0aWNfY2FzdDxmbG9hdD4oYnl0ZXMpLzEwMDAw
MDAwMDApOwogfQogCkBAIC0xNzcsMTkgKzE3NywxOSBAQCBzdGF0aWMgYm9vbCB3YXNMYXN0RGF5
T2ZNb250aChpbnQgeWVhciwgaW50IG1vbnRoLCBpbnQgZGF5KQogICAgIHN0YXRpYyBpbnQgbGFz
dERheXNbXSA9IHsgMzEsIDAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzEsIDMwLCAzMSwgMzAsIDMx
IH07CiAgICAgaWYgKG1vbnRoIDwgMCB8fCBtb250aCA+IDExKQogICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgIAorCiAgICAgaWYgKG1vbnRoID09IDIpIHsKICAgICAgICAgaWYgKHllYXIg
JSA0ID09IDAgJiYgKHllYXIgJSAxMDAgfHwgeWVhciAlIDQwMCA9PSAwKSkgewogICAgICAgICAg
ICAgaWYgKGRheSA9PSAyOSkKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQotICAgICAgICAgCisKICAgICAgICAgaWYgKGRh
eSA9PSAyOCkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgfQotICAgIAorCiAgICAgcmV0dXJuIGxhc3REYXlzW21vbnRoXSA9PSBkYXk7CiB9CiAK
QEAgLTE5OCwxMSArMTk4LDExIEBAIHN0YXRpYyBTdHJpbmcgcHJvY2Vzc0ZpbGVEYXRlU3RyaW5n
KGNvbnN0IEZUUFRpbWUmIGZpbGVUaW1lKQogICAgIC8vIEZJWE1FOiBOZWVkIHRvIGxvY2FsaXpl
IHRoaXMgc3RyaW5nPwogCiAgICAgU3RyaW5nIHRpbWVPZkRheTsKLSAgICAKKwogICAgIGlmICgh
KGZpbGVUaW1lLnRtX2hvdXIgPT0gMCAmJiBmaWxlVGltZS50bV9taW4gPT0gMCAmJiBmaWxlVGlt
ZS50bV9zZWMgPT0gMCkpIHsKICAgICAgICAgaW50IGhvdXIgPSBmaWxlVGltZS50bV9ob3VyOwog
ICAgICAgICBBU1NFUlQoaG91ciA+PSAwICYmIGhvdXIgPCAyNCk7Ci0gICAgICAgIAorCiAgICAg
ICAgIGlmIChob3VyIDwgMTIpIHsKICAgICAgICAgICAgIGlmIChob3VyID09IDApCiAgICAgICAg
ICAgICAgICAgaG91ciA9IDEyOwpAQCAtMjE0LDE1ICsyMTQsMTUgQEAgc3RhdGljIFN0cmluZyBw
cm9jZXNzRmlsZURhdGVTdHJpbmcoY29uc3QgRlRQVGltZSYgZmlsZVRpbWUpCiAgICAgICAgICAg
ICB0aW1lT2ZEYXkgPSBTdHJpbmc6OmZvcm1hdCgiLCAlaTolMDJpIFBNIiwgaG91ciwgZmlsZVRp
bWUudG1fbWluKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8vIElmIGl0IHdhcyB0
b2RheSBvciB5ZXN0ZXJkYXksIGxldHMganVzdCBkbyB0aGF0IC0gYnV0IHdlIGhhdmUgdG8gY29t
cGFyZSB0byB0aGUgY3VycmVudCB0aW1lCiAgICAgc3RydWN0IHRtIG5vdzsKICAgICB0aW1lX3Qg
bm93X3QgPSB0aW1lKE5VTEwpOwogICAgIGdldExvY2FsVGltZSgmbm93X3QsICZub3cpOwotICAg
IAorCiAgICAgLy8gbG9jYWx0aW1lIGRvZXMgInllYXIgPSBjdXJyZW50IHllYXIgLSAxOTAwIiwg
Y29tcGVuc2F0ZSBmb3IgdGhhdCBmb3IgcmVhZGFiaWxpdHkgYW5kIGNvbXBhcmlzb24gcHVycG9z
ZXMKICAgICBub3cudG1feWVhciArPSAxOTAwOwotICAgICAgICAKKwogICAgIGlmIChmaWxlVGlt
ZS50bV95ZWFyID09IG5vdy50bV95ZWFyKSB7CiAgICAgICAgIGlmIChmaWxlVGltZS50bV9tb24g
PT0gbm93LnRtX21vbikgewogICAgICAgICAgICAgaWYgKGZpbGVUaW1lLnRtX21kYXkgPT0gbm93
LnRtX21kYXkpCkBAIC0yMzUsMjMgKzIzNSwyMyBAQCBzdGF0aWMgU3RyaW5nIHByb2Nlc3NGaWxl
RGF0ZVN0cmluZyhjb25zdCBGVFBUaW1lJiBmaWxlVGltZSkKICAgICAgICAgICAgIHdhc0xhc3RE
YXlPZk1vbnRoKGZpbGVUaW1lLnRtX3llYXIsIGZpbGVUaW1lLnRtX21vbiwgZmlsZVRpbWUudG1f
bWRheSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuICJZZXN0ZXJkYXkiICsgdGltZU9mRGF5Owog
ICAgIH0KLSAgICAKKwogICAgIGlmIChmaWxlVGltZS50bV95ZWFyID09IG5vdy50bV95ZWFyIC0g
MSAmJiBmaWxlVGltZS50bV9tb24gPT0gMTIgJiYgZmlsZVRpbWUudG1fbWRheSA9PSAzMSAmJiBu
b3cudG1fbW9uID09IDEgJiYgbm93LnRtX21kYXkgPT0gMSkKICAgICAgICAgcmV0dXJuICJZZXN0
ZXJkYXkiICsgdGltZU9mRGF5OwogCiAgICAgc3RhdGljIGNvbnN0IGNoYXIqIG1vbnRoc1tdID0g
eyAiSmFuIiwgIkZlYiIsICJNYXIiLCAiQXByIiwgIk1heSIsICJKdW4iLCAiSnVsIiwgIkF1ZyIs
ICJTZXAiLCAiT2N0IiwgIk5vdiIsICJEZWMiLCAiPz8/IiB9OwotICAgIAorCiAgICAgaW50IG1v
bnRoID0gZmlsZVRpbWUudG1fbW9uOwogICAgIGlmIChtb250aCA8IDAgfHwgbW9udGggPiAxMSkK
ICAgICAgICAgbW9udGggPSAxMjsKLSAgICAKKwogICAgIFN0cmluZyBkYXRlU3RyaW5nOwotICAg
IAorCiAgICAgaWYgKGZpbGVUaW1lLnRtX3llYXIgPiAtMSkKICAgICAgICAgZGF0ZVN0cmluZyA9
IFN0cmluZzo6Zm9ybWF0KCIlcyAlaSwgJWkiLCBtb250aHNbbW9udGhdLCBmaWxlVGltZS50bV9t
ZGF5LCBmaWxlVGltZS50bV95ZWFyKTsKICAgICBlbHNlCiAgICAgICAgIGRhdGVTdHJpbmcgPSBT
dHJpbmc6OmZvcm1hdCgiJXMgJWksICVpIiwgbW9udGhzW21vbnRoXSwgZmlsZVRpbWUudG1fbWRh
eSwgbm93LnRtX3llYXIpOwotICAgIAorCiAgICAgcmV0dXJuIGRhdGVTdHJpbmcgKyB0aW1lT2ZE
YXk7CiB9CiAKQEAgLTI2MSwyMiArMjYxLDIyIEBAIHZvaWQgRlRQRGlyZWN0b3J5RG9jdW1lbnRQ
YXJzZXI6OnBhcnNlQW5kQXBwZW5kT25lTGluZShjb25zdCBTdHJpbmcmIGlucHV0TGluZSkKICAg
ICBDU3RyaW5nIGxhdGluMUlucHV0ID0gaW5wdXRMaW5lLmxhdGluMSgpOwogCiAgICAgRlRQRW50
cnlUeXBlIHR5cGVSZXN1bHQgPSBwYXJzZU9uZUZUUExpbmUobGF0aW4xSW5wdXQuZGF0YSgpLCBt
X2xpc3RTdGF0ZSwgcmVzdWx0KTsKLSAgICAKKwogICAgIC8vIEZUUE1pc2NFbnRyeSBpcyBhIGNv
bW1lbnQgb3IgdXNhZ2Ugc3RhdGlzdGljIHdoaWNoIHdlIGRvbid0IGNhcmUgYWJvdXQsIGFuZCBq
dW5rIGlzIGludmFsaWQgZGF0YSAtIGJhaWwgaW4gdGhlc2UgMiBjYXNlcwogICAgIGlmICh0eXBl
UmVzdWx0ID09IEZUUE1pc2NFbnRyeSB8fCB0eXBlUmVzdWx0ID09IEZUUEp1bmtFbnRyeSkKICAg
ICAgICAgcmV0dXJuOwotICAgICAgICAKKwogICAgIFN0cmluZyBmaWxlbmFtZShyZXN1bHQuZmls
ZW5hbWUsIHJlc3VsdC5maWxlbmFtZUxlbmd0aCk7CiAgICAgaWYgKHJlc3VsdC50eXBlID09IEZU
UERpcmVjdG9yeUVudHJ5KSB7CiAgICAgICAgIGZpbGVuYW1lLmFwcGVuZCgiLyIpOwotICAgICAg
ICAKKwogICAgICAgICAvLyBXZSBoYXZlIG5vIGludGVyZXN0IGluIGxpbmtpbmcgdG8gImN1cnJl
bnQgZGlyZWN0b3J5IgogICAgICAgICBpZiAoZmlsZW5hbWUgPT0gIi4vIikKICAgICAgICAgICAg
IHJldHVybjsKICAgICB9CiAKICAgICBMT0coRlRQLCAiQXBwZW5kaW5nIGVudHJ5IC0gJXMsICVz
IiwgZmlsZW5hbWUuYXNjaWkoKS5kYXRhKCksIHJlc3VsdC5maWxlU2l6ZS5hc2NpaSgpLmRhdGEo
KSk7Ci0gICAgICAgIAorCiAgICAgYXBwZW5kRW50cnkoZmlsZW5hbWUsIHByb2Nlc3NGaWxlc2l6
ZVN0cmluZyhyZXN1bHQuZmlsZVNpemUsIHJlc3VsdC50eXBlID09IEZUUERpcmVjdG9yeUVudHJ5
KSwgcHJvY2Vzc0ZpbGVEYXRlU3RyaW5nKHJlc3VsdC5tb2RpZmllZFRpbWUpLCByZXN1bHQudHlw
ZSA9PSBGVFBEaXJlY3RvcnlFbnRyeSk7CiB9CiAKQEAgLTMwMiw4ICszMDIsOCBAQCBib29sIEZU
UERpcmVjdG9yeURvY3VtZW50UGFyc2VyOjpsb2FkRG9jdW1lbnRUZW1wbGF0ZSgpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBMZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXI6Omlu
c2VydChTdHJpbmcodGVtcGxhdGVEb2N1bWVudERhdGEtPmRhdGEoKSwgdGVtcGxhdGVEb2N1bWVu
dERhdGEtPnNpemUoKSkpOwotICAgIAorICAgIEhUTUxEb2N1bWVudFBhcnNlcjo6aW5zZXJ0KFN0
cmluZyh0ZW1wbGF0ZURvY3VtZW50RGF0YS0+ZGF0YSgpLCB0ZW1wbGF0ZURvY3VtZW50RGF0YS0+
c2l6ZSgpKSk7CisKICAgICBSZWZQdHI8RWxlbWVudD4gdGFibGVFbGVtZW50ID0gZG9jdW1lbnQo
KS0+Z2V0RWxlbWVudEJ5SWQoImZ0cERpcmVjdG9yeVRhYmxlIik7CiAgICAgaWYgKCF0YWJsZUVs
ZW1lbnQpCiAgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIGZpbmQgZWxlbWVudCBieSBpZCBc
ImZ0cERpcmVjdG9yeVRhYmxlXCIgaW4gdGhlIHRlbXBsYXRlIGRvY3VtZW50LiIpOwpAQCAtMzI5
LDcgKzMyOSw3IEBAIGJvb2wgRlRQRGlyZWN0b3J5RG9jdW1lbnRQYXJzZXI6OmxvYWREb2N1bWVu
dFRlbXBsYXRlKCkKICAgICAgICAgYm9keS0+YXBwZW5kQ2hpbGQobV90YWJsZUVsZW1lbnQsIGVj
KTsKICAgICBlbHNlCiAgICAgICAgIGRvY3VtZW50KCktPmFwcGVuZENoaWxkKG1fdGFibGVFbGVt
ZW50LCBlYyk7Ci0gICAgICAgIAorCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTM0MCwxMCAr
MzQwLDEwIEBAIHZvaWQgRlRQRGlyZWN0b3J5RG9jdW1lbnRQYXJzZXI6OmNyZWF0ZUJhc2ljRG9j
dW1lbnQoKQogICAgIC8vIEZJWE1FOiBNYWtlIHRoaXMgImJhc2ljIGRvY3VtZW50IiBtb3JlIGFj
Y2VwdGFibGUKIAogICAgIFJlZlB0cjxFbGVtZW50PiBib2R5RWxlbWVudCA9IGRvY3VtZW50KCkt
PmNyZWF0ZUVsZW1lbnQoYm9keVRhZywgZmFsc2UpOwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIAorCiAgICAgRXhjZXB0aW9uQ29kZSBlYzsKICAgICBkb2N1bWVudCgpLT5hcHBlbmRDaGls
ZChib2R5RWxlbWVudCwgZWMpOwotICAgIAorCiAgICAgUmVmUHRyPEVsZW1lbnQ+IHRhYmxlRWxl
bWVudCA9IGRvY3VtZW50KCktPmNyZWF0ZUVsZW1lbnQodGFibGVUYWcsIGZhbHNlKTsKICAgICBt
X3RhYmxlRWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxUYWJsZUVsZW1lbnQqPih0YWJsZUVsZW1l
bnQuZ2V0KCkpOwogICAgIG1fdGFibGVFbGVtZW50LT5zZXRBdHRyaWJ1dGUoImlkIiwgImZ0cERp
cmVjdG9yeVRhYmxlIiwgZWMpOwpAQCAtMzYwLDE0ICszNjAsMTQgQEAgdm9pZCBGVFBEaXJlY3Rv
cnlEb2N1bWVudFBhcnNlcjo6YXBwZW5kKGNvbnN0IFNlZ21lbnRlZFN0cmluZyYgc291cmNlKQog
ICAgICAgICAgICAgY3JlYXRlQmFzaWNEb2N1bWVudCgpOwogICAgICAgICBBU1NFUlQobV90YWJs
ZUVsZW1lbnQpOwogICAgIH0KLSAgICAgICAgCisKICAgICBib29sIGZvdW5kTmV3TGluZSA9IGZh
bHNlOwotICAgIAorCiAgICAgbV9kZXN0ID0gbV9idWZmZXI7CiAgICAgU2VnbWVudGVkU3RyaW5n
IHN0ciA9IHNvdXJjZTsKICAgICB3aGlsZSAoIXN0ci5pc0VtcHR5KCkpIHsKICAgICAgICAgVUNo
YXIgYyA9ICpzdHI7Ci0gICAgICAgIAorCiAgICAgICAgIGlmIChjID09ICdccicpIHsKICAgICAg
ICAgICAgICptX2Rlc3QrKyA9ICdcbic7CiAgICAgICAgICAgICBmb3VuZE5ld0xpbmUgPSB0cnVl
OwpAQCAtMzgyLDEzICszODIsMTMgQEAgdm9pZCBGVFBEaXJlY3RvcnlEb2N1bWVudFBhcnNlcjo6
YXBwZW5kKGNvbnN0IFNlZ21lbnRlZFN0cmluZyYgc291cmNlKQogICAgICAgICAgICAgKm1fZGVz
dCsrID0gYzsKICAgICAgICAgICAgIG1fc2tpcExGID0gZmFsc2U7CiAgICAgICAgIH0KLSAgICAg
ICAgCisKICAgICAgICAgc3RyLmFkdmFuY2UoKTsKLSAgICAgICAgCisKICAgICAgICAgLy8gTWF5
YmUgZW5sYXJnZSB0aGUgYnVmZmVyCiAgICAgICAgIGNoZWNrQnVmZmVyKCk7CiAgICAgfQotICAg
IAorCiAgICAgaWYgKCFmb3VuZE5ld0xpbmUpIHsKICAgICAgICAgbV9kZXN0ID0gbV9idWZmZXI7
CiAgICAgICAgIHJldHVybjsKQEAgLTM5Niw3ICszOTYsNyBAQCB2b2lkIEZUUERpcmVjdG9yeURv
Y3VtZW50UGFyc2VyOjphcHBlbmQoY29uc3QgU2VnbWVudGVkU3RyaW5nJiBzb3VyY2UpCiAKICAg
ICBVQ2hhciogc3RhcnQgPSBtX2J1ZmZlcjsKICAgICBVQ2hhciogY3Vyc29yID0gc3RhcnQ7Ci0g
ICAgCisKICAgICB3aGlsZSAoY3Vyc29yIDwgbV9kZXN0KSB7CiAgICAgICAgIGlmICgqY3Vyc29y
ID09ICdcbicpIHsKICAgICAgICAgICAgIG1fY2FycnlPdmVyLmFwcGVuZChTdHJpbmcoc3RhcnQs
IGN1cnNvciAtIHN0YXJ0KSk7CkBAIC00MDgsNyArNDA4LDcgQEAgdm9pZCBGVFBEaXJlY3RvcnlE
b2N1bWVudFBhcnNlcjo6YXBwZW5kKGNvbnN0IFNlZ21lbnRlZFN0cmluZyYgc291cmNlKQogICAg
ICAgICB9IGVsc2UgCiAgICAgICAgICAgICBjdXJzb3IrKzsKICAgICB9Ci0gICAgCisKICAgICAv
LyBDb3B5IHRoZSBwYXJ0aWFsIGxpbmUgd2UgaGF2ZSBsZWZ0IHRvIHRoZSBjYXJyeW92ZXIgYnVm
ZmVyCiAgICAgaWYgKGN1cnNvciAtIHN0YXJ0ID4gMSkKICAgICAgICAgbV9jYXJyeU92ZXIuYXBw
ZW5kKFN0cmluZyhzdGFydCwgY3Vyc29yIC0gc3RhcnQgLSAxKSk7CkBAIC00MjEsMTEgKzQyMSwx
MSBAQCB2b2lkIEZUUERpcmVjdG9yeURvY3VtZW50UGFyc2VyOjpmaW5pc2goKQogICAgICAgICBw
YXJzZUFuZEFwcGVuZE9uZUxpbmUobV9jYXJyeU92ZXIpOwogICAgICAgICBtX2NhcnJ5T3ZlciA9
IFN0cmluZygpOwogICAgIH0KLSAgICAKKwogICAgIG1fdGFibGVFbGVtZW50ID0gMDsKICAgICBm
YXN0RnJlZShtX2J1ZmZlcik7Ci0gICAgICAgIAotICAgIExlZ2FjeUhUTUxEb2N1bWVudFBhcnNl
cjo6ZmluaXNoKCk7CisKKyAgICBIVE1MRG9jdW1lbnRQYXJzZXI6OmZpbmlzaCgpOwogfQogCiBG
VFBEaXJlY3RvcnlEb2N1bWVudDo6RlRQRGlyZWN0b3J5RG9jdW1lbnQoRnJhbWUqIGZyYW1lLCBj
b25zdCBLVVJMJiB1cmwpCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BhZ2UvWFNTQXVkaXRvci5jcHAg
Yi9XZWJDb3JlL3BhZ2UvWFNTQXVkaXRvci5jcHAKaW5kZXggMjI1MDZiMmE4MzY1OTk5YzRmODUz
MmI0MjMyNWUzODM1YmU4ZmU5NS4uYjI3NjRmOTRmNWVhNDVhOWJkNWQ1OGIxOWMwZjY5N2Q2MjRj
NjhlMSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wYWdlL1hTU0F1ZGl0b3IuY3BwCisrKyBiL1dlYkNv
cmUvcGFnZS9YU1NBdWRpdG9yLmNwcApAQCAtMzQsOCArMzQsOCBAQAogI2luY2x1ZGUgIkRvY3Vt
ZW50TG9hZGVyLmgiCiAjaW5jbHVkZSAiRE9NV2luZG93LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIK
KyNpbmNsdWRlICJIVE1MRW50aXR5UGFyc2VyLmgiCiAjaW5jbHVkZSAiS1VSTC5oIgotI2luY2x1
ZGUgIkxlZ2FjeVByZWxvYWRTY2FubmVyLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VSZXNwb25zZUJh
c2UuaCIKICNpbmNsdWRlICJTY3JpcHRTb3VyY2VDb2RlLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3Mu
aCIKQEAgLTI3Nyw3ICsyNzcsNyBAQCBTdHJpbmcgWFNTQXVkaXRvcjo6ZGVjb2RlSFRNTEVudGl0
aWVzKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBib29sIGxlYXZlVW5kZWNvZGFibAogICAgICAgICBp
ZiAobGVhdmVVbmRlY29kYWJsZUVudGl0aWVzVW50b3VjaGVkKQogICAgICAgICAgICAgc291cmNl
U2hhZG93ID0gc291cmNlOwogICAgICAgICBib29sIG5vdEVub3VnaENoYXJhY3RlcnMgPSBmYWxz
ZTsKLSAgICAgICAgdW5zaWduZWQgZW50aXR5ID0gTGVnYWN5UHJlbG9hZFNjYW5uZXI6OmNvbnN1
bWVFbnRpdHkoc291cmNlLCBub3RFbm91Z2hDaGFyYWN0ZXJzKTsKKyAgICAgICAgdW5zaWduZWQg
ZW50aXR5ID0gY29uc3VtZUhUTUxFbnRpdHkoc291cmNlLCBub3RFbm91Z2hDaGFyYWN0ZXJzKTsK
ICAgICAgICAgLy8gV2UgaWdub3JlIG5vdEVub3VnaENoYXJhY3RlcnMgYmVjYXVzZSB3ZSBtaWdo
dCBhcyB3ZWxsIHVzZSB0aGlzIGxvb3AKICAgICAgICAgLy8gdG8gY29weSB0aGUgcmVtYWluaW5n
IGNoYXJhY3RlcnMgaW50byB8cmVzdWx0fC4KIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wYWdlL1hT
U0F1ZGl0b3IuaCBiL1dlYkNvcmUvcGFnZS9YU1NBdWRpdG9yLmgKaW5kZXggMjBlMGE1MzIzMDIy
OWM1MzhkNTE1ODI2MzNmMDI3N2QzNGY4YWQzNy4uMmI3ODFmMTJiMTI5YzU1ZmFlMzRhOGUwMTQw
ZThlZjZhNmY4NDMzMCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wYWdlL1hTU0F1ZGl0b3IuaAorKysg
Yi9XZWJDb3JlL3BhZ2UvWFNTQXVkaXRvci5oCkBAIC02Niw3ICs2Niw3IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICAgICAvLyAqIFNjcmlwdENvbnRyb2xsZXI6OmV4ZWN1dGVJZkphdmFTY3JpcHRV
UkwgLSB1c2VkIHRvIGV2YWx1YXRlIEphdmFTY3JpcHQgVVJMcy4KICAgICAvLyAqIFNjcmlwdEV2
ZW50TGlzdGVuZXI6OmNyZWF0ZUF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIgLSB1c2VkIHRvIGNyZWF0
ZSBKYXZhU2NyaXB0IGV2ZW50IGhhbmRsZXJzLgogICAgIC8vICogSFRNTEJhc2VFbGVtZW50Ojpw
cm9jZXNzIC0gdXNlZCB0byBzZXQgdGhlIGRvY3VtZW50IGJhc2UgVVJMLgotICAgIC8vICogTGVn
YWN5SFRNTERvY3VtZW50UGFyc2VyOjpwYXJzZVRhZyAtIHVzZWQgdG8gbG9hZCBleHRlcm5hbCBK
YXZhU2NyaXB0IHNjcmlwdHMuCisgICAgLy8gKiBIVE1MRG9jdW1lbnRQYXJzZXI6OnNob3VsZExv
YWRFeHRlcm5hbFNjcmlwdEZyb21TcmMgLSB1c2VkIHRvIGxvYWQgZXh0ZXJuYWwgSmF2YVNjcmlw
dCBzY3JpcHRzLgogICAgIC8vICogU3ViZnJhbWVMb2FkZXI6OnJlcXVlc3RPYmplY3QgLSB1c2Vk
IHRvIGxvYWQgPG9iamVjdD4vPGVtYmVkPiBlbGVtZW50cy4KICAgICAvLwogICAgIGNsYXNzIFhT
U0F1ZGl0b3IgOiBwdWJsaWMgTm9uY29weWFibGUgewpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0
Zm9ybS90ZXh0L1NlZ21lbnRlZFN0cmluZy5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL3RleHQvU2Vn
bWVudGVkU3RyaW5nLmNwcAppbmRleCBkYzNmNDI0YTI4Yzk4M2VkMDZiYWUzOTViYmFmNjRhNmQ4
ZDQ4OTdkLi5iOWZmNTAzN2E5ODJhZmQ2NGQ5ODIxNWE3ODZiMDVlMDYyNWQxNTk4IDEwMDY0NAot
LS0gYS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvU2VnbWVudGVkU3RyaW5nLmNwcAorKysgYi9XZWJD
b3JlL3BsYXRmb3JtL3RleHQvU2VnbWVudGVkU3RyaW5nLmNwcApAQCAtMTEyLDggKzExMiw3IEBA
IHZvaWQgU2VnbWVudGVkU3RyaW5nOjphcHBlbmQoY29uc3QgU2VnbWVudGVkU3Vic3RyaW5nICZz
KQogdm9pZCBTZWdtZW50ZWRTdHJpbmc6OnByZXBlbmQoY29uc3QgU2VnbWVudGVkU3Vic3RyaW5n
ICZzKQogewogICAgIEFTU0VSVCghZXNjYXBlZCgpKTsKLSAgICAvLyBGSVhNRTogQWRkIHRoaXMg
QVNTRVJUIG9uY2Ugd2UndmUgZGVsZXRlZCB0aGUgTGVnYWN5SFRNTERvY3VtZW50UGFyc2VyLgot
ICAgIC8vIEFTU0VSVCghcy5udW1iZXJPZkNoYXJhY3RlcnNDb25zdW1lZCgpKTsKKyAgICBBU1NF
UlQoIXMubnVtYmVyT2ZDaGFyYWN0ZXJzQ29uc3VtZWQoKSk7CiAgICAgaWYgKHMubV9sZW5ndGgp
IHsKICAgICAgICAgLy8gRklYTUU6IFdlJ3JlIGFzc3VtaW5nIHRoYXQgdGhlIHByZXBlbmQgd2Vy
ZSBvcmlnaW5hbGx5IGNvbnN1bWVkIGJ5CiAgICAgICAgIC8vICAgICAgICB0aGlzIFNlZ21lbnRl
ZFN0cmluZy4gIFdlJ3JlIGFsc28gQVNTRVJUaW5nIHRoYXQgcyBpcyBhIGZyZXNoCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>