<?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>105653</bug_id>
          
          <creation_ts>2012-12-21 12:49:00 -0800</creation_ts>
          <short_desc>Web Inspector: Update CodeMirror to stable</short_desc>
          <delta_ts>2012-12-21 23:35:58 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Inspector (Deprecated)</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Jan Keromnes">janx</reporter>
          <assigned_to name="Jan Keromnes">janx</assigned_to>
          <cc>apavlov</cc>
    
    <cc>keishi</cc>
    
    <cc>loislo</cc>
    
    <cc>pfeldman</cc>
    
    <cc>pmuellr</cc>
    
    <cc>vsevik</cc>
    
    <cc>web-inspector-bugs</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>yurys</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>796427</commentid>
    <comment_count>0</comment_count>
    <who name="Jan Keromnes">janx</who>
    <bug_when>2012-12-21 12:49:00 -0800</bug_when>
    <thetext>CodeMirror&apos;s v3 branch has matured and is now the master branch. Updating to stable would fix several minor issues, including throw scrolling on mac: https://github.com/marijnh/CodeMirror/issues/728</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>796493</commentid>
    <comment_count>1</comment_count>
      <attachid>180562</attachid>
    <who name="Jan Keromnes">janx</who>
    <bug_when>2012-12-21 15:06:18 -0800</bug_when>
    <thetext>Created attachment 180562
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>796494</commentid>
    <comment_count>2</comment_count>
    <who name="Jan Keromnes">janx</who>
    <bug_when>2012-12-21 15:07:48 -0800</bug_when>
    <thetext>+pfeldman can you have a look at the scrolling behavior? The problems you spotted earlier should be gone now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>796634</commentid>
    <comment_count>3</comment_count>
      <attachid>180562</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2012-12-21 23:10:40 -0800</bug_when>
    <thetext>Comment on attachment 180562
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=180562&amp;action=review

&gt; Source/WebCore/inspector/front-end/cm/codemirror.css:156
&gt; +  /* Hack to make IE7 behave */

Seriously? :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>796639</commentid>
    <comment_count>4</comment_count>
      <attachid>180562</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-12-21 23:35:55 -0800</bug_when>
    <thetext>Comment on attachment 180562
Patch

Clearing flags on attachment: 180562

Committed r138410: &lt;http://trac.webkit.org/changeset/138410&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>796640</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-12-21 23:35:58 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>180562</attachid>
            <date>2012-12-21 15:06:18 -0800</date>
            <delta_ts>2012-12-21 23:35:54 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-105653-20121222070336.patch</filename>
            <type>text/plain</type>
            <size>157382</size>
            <attacher name="Jan Keromnes">janx</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM4Mzk0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWEwNDA0ZjEwNTAwN2Rj
ODA0N2JiZDA3ZjYxZDdlYTYyNjM1ZTAzZi4uMTJhZDhiYzlmMWVmNDRmYmIzMDAyNWY4YjZkODFi
OTdjODU5MWVjNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI4IEBACisyMDEyLTEyLTIxICBKYW4g
S2Vyb21uZXMgIDxqYW54QGxpbnV4LmNvbT4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBVcGRh
dGUgQ29kZU1pcnJvciB0byBzdGFibGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTEwNTY1MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEZpeGVzIHNldmVyYWwgbWlub3IgaXNzdWVzLCBpbmNsdWRpbmcgdGhy
b3cgc2Nyb2xsIG9uIG1hYy4KKworICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvY20vY29k
ZW1pcnJvci5jc3M6CisgICAgICAgICguY20tbmVnYXRpdmUpOgorICAgICAgICAoLmNtLXBvc2l0
aXZlKToKKyAgICAgICAgKC5Db2RlTWlycm9yLWd1dHRlcik6CisgICAgICAgICguY20tc2VhcmNo
aW5nKToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL2NtL2NvZGVtaXJyb3IuanM6Cisg
ICAgICAgICh3aW5kb3cuQ29kZU1pcnJvcik6CisgICAgICAgICh3aW5kb3cuQ29kZU1pcnJvci4p
OgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvY20vY3NzLmpzOgorICAgICAgICAoLik6
CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9jbS9odG1sbWl4ZWQuanM6CisgICAgICAg
ICguKToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL2NtL2phdmFzY3JpcHQuanM6Cisg
ICAgICAgICguKToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL2NtL3htbC5qczoKKwog
MjAxMi0xMi0yMSAgQnJhZHkgRWlkc29uICA8YmVpZHNvbkBhcHBsZS5jb20+CiAKICAgICAgICAg
VXBkYXRlIGxvY2FsaXphYmxlIHN0cmluZ3MgYXMgYSBmb2xsb3d1cCB0byBodHRwOi8vdHJhYy53
ZWJraXQub3JnL2NoYW5nZXNldC8xMzgzODcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9mcm9udC1lbmQvY20vY29kZW1pcnJvci5jc3MgYi9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvZnJvbnQtZW5kL2NtL2NvZGVtaXJyb3IuY3NzCmluZGV4IGVhMGVjZWE1OTIxNzRjZDUz
Nzc4Y2FkOTk1NjI0NGMwOGFlYzRmMDQuLmY5ZmYwNTBkM2RjZTk2MjdhZGY0NGZmNGE4NzUxNzRh
OTJjYzYzMDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQv
Y20vY29kZW1pcnJvci5jc3MKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVu
ZC9jbS9jb2RlbWlycm9yLmNzcwpAQCAtODYsNiArODYsOCBAQAogLmNtLXMtZGVmYXVsdCAuY20t
aHIge2NvbG9yOiAjOTk5O30KIC5jbS1zLWRlZmF1bHQgLmNtLWxpbmsge2NvbG9yOiAjMDBjO30K
IAorLmNtLW5lZ2F0aXZlIHtjb2xvcjogI2Q0NDt9CisuY20tcG9zaXRpdmUge2NvbG9yOiAjMjky
O30KIC5jbS1oZWFkZXIsIC5jbS1zdHJvbmcge2ZvbnQtd2VpZ2h0OiBib2xkO30KIC5jbS1lbSB7
Zm9udC1zdHlsZTogaXRhbGljO30KIC5jbS1lbXN0cm9uZyB7Zm9udC1zdHlsZTogaXRhbGljOyBm
b250LXdlaWdodDogYm9sZDt9CkBAIC0xNTAsNyArMTUyLDEwIEBAIGRpdi5Db2RlTWlycm9yIHNw
YW4uQ29kZU1pcnJvci1ub25tYXRjaGluZ2JyYWNrZXQge2NvbG9yOiAjZjIyO30KIH0KIC5Db2Rl
TWlycm9yLWd1dHRlciB7CiAgIGhlaWdodDogMTAwJTsKLSAgZmxvYXQ6IGxlZnQ7CisgIGRpc3Bs
YXk6IGlubGluZS1ibG9jazsKKyAgLyogSGFjayB0byBtYWtlIElFNyBiZWhhdmUgKi8KKyAgKnpv
b206MTsKKyAgKmRpc3BsYXk6aW5saW5lOwogfQogLkNvZGVNaXJyb3ItZ3V0dGVyLWVsdCB7CiAg
IHBvc2l0aW9uOiBhYnNvbHV0ZTsKQEAgLTIxOCw3ICsyMjMsNyBAQCBkaXYuQ29kZU1pcnJvciBz
cGFuLkNvZGVNaXJyb3Itbm9ubWF0Y2hpbmdicmFja2V0IHtjb2xvcjogI2YyMjt9CiAuQ29kZU1p
cnJvci1zZWxlY3RlZCB7IGJhY2tncm91bmQ6ICNkOWQ5ZDk7IH0KIC5Db2RlTWlycm9yLWZvY3Vz
ZWQgLkNvZGVNaXJyb3Itc2VsZWN0ZWQgeyBiYWNrZ3JvdW5kOiAjZDdkNGYwOyB9CiAKLS5Db2Rl
TWlycm9yLXNlYXJjaGluZyB7CisuY20tc2VhcmNoaW5nIHsKICAgYmFja2dyb3VuZDogI2ZmYTsK
ICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMCwgLjQpOwogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9jbS9jb2RlbWlycm9yLmpzIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9jbS9jb2RlbWlycm9yLmpzCmluZGV4IDViNTg0
YzgzYmQ2MmE5ZDg3YTgyZTlhMmFjNTM1MTk1MDEyNDJmYjkuLmZkMTZjY2VjZTUxNDA5Y2RkYWNk
ZjIyZjc4OGIzYWVjZTkwMDg3NzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9mcm9udC1lbmQvY20vY29kZW1pcnJvci5qcworKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL2NtL2NvZGVtaXJyb3IuanMKQEAgLTYsMTIgKzYsMTIgQEAgd2luZG93LkNv
ZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAKICAgLy8gQ3J1ZGUsIGJ1dCBuZWNlc3NhcnkgdG8g
aGFuZGxlIGEgbnVtYmVyIG9mIGhhcmQtdG8tZmVhdHVyZS1kZXRlY3QKICAgLy8gYnVncyBhbmQg
YmVoYXZpb3IgZGlmZmVyZW5jZXMuCi0gIHZhciBnZWNrbyA9IC9nZWNrb1wvXGR7N30vaS50ZXN0
KG5hdmlnYXRvci51c2VyQWdlbnQpOworICB2YXIgZ2Vja28gPSAvZ2Vja29cL1xkL2kudGVzdChu
YXZpZ2F0b3IudXNlckFnZW50KTsKICAgdmFyIGllID0gL01TSUUgXGQvLnRlc3QobmF2aWdhdG9y
LnVzZXJBZ2VudCk7CiAgIHZhciBpZV9sdDggPSAvTVNJRSBbMS03XVxiLy50ZXN0KG5hdmlnYXRv
ci51c2VyQWdlbnQpOwogICB2YXIgaWVfbHQ5ID0gL01TSUUgWzEtOF1cYi8udGVzdChuYXZpZ2F0
b3IudXNlckFnZW50KTsKLSAgdmFyIGllX2x0MTAgPSAvTVNJRSBbMS05XVxiLy50ZXN0KG5hdmln
YXRvci51c2VyQWdlbnQpOwogICB2YXIgd2Via2l0ID0gL1dlYktpdFwvLy50ZXN0KG5hdmlnYXRv
ci51c2VyQWdlbnQpOworICB2YXIgcXR3ZWJraXQgPSB3ZWJraXQgJiYgL1F0XC9cZCtcLlxkKy8u
dGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTsKICAgdmFyIGNocm9tZSA9IC9DaHJvbWVcLy8udGVz
dChuYXZpZ2F0b3IudXNlckFnZW50KTsKICAgdmFyIG9wZXJhID0gL09wZXJhXC8vLnRlc3QobmF2
aWdhdG9yLnVzZXJBZ2VudCk7CiAgIHZhciBzYWZhcmkgPSAvQXBwbGUgQ29tcHV0ZXIvLnRlc3Qo
bmF2aWdhdG9yLnZlbmRvcik7CkBAIC0yMSw4ICsyMSwxNSBAQCB3aW5kb3cuQ29kZU1pcnJvciA9
IChmdW5jdGlvbigpIHsKICAgdmFyIHBoYW50b20gPSAvUGhhbnRvbUpTLy50ZXN0KG5hdmlnYXRv
ci51c2VyQWdlbnQpOwogCiAgIHZhciBpb3MgPSAvQXBwbGVXZWJLaXQvLnRlc3QobmF2aWdhdG9y
LnVzZXJBZ2VudCkgJiYgL01vYmlsZVwvXHcrLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpOwor
ICAvLyBUaGlzIGlzIHdvZWZ1bGx5IGluY29tcGxldGUuIFN1Z2dlc3Rpb25zIGZvciBhbHRlcm5h
dGl2ZSBtZXRob2RzIHdlbGNvbWUuCisgIHZhciBtb2JpbGUgPSBpb3MgfHwgL0FuZHJvaWR8d2Vi
T1N8QmxhY2tCZXJyeXxPcGVyYSBNaW5pfElFTW9iaWxlL2kudGVzdChuYXZpZ2F0b3IudXNlckFn
ZW50KTsKICAgdmFyIG1hYyA9IGlvcyB8fCAvTWFjLy50ZXN0KG5hdmlnYXRvci5wbGF0Zm9ybSk7
Ci0gIHZhciB3aW4gPSAvV2luLy50ZXN0KG5hdmlnYXRvci5wbGF0Zm9ybSk7CisgIHZhciB3aW5k
b3dzID0gL3dpbmRvd3MvaS50ZXN0KG5hdmlnYXRvci5wbGF0Zm9ybSk7CisKKyAgdmFyIG9wZXJh
X3ZlcnNpb24gPSBvcGVyYSAmJiBuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9WZXJzaW9uXC8o
XGQqXC5cZCopLyk7CisgIGlmIChvcGVyYV92ZXJzaW9uKSBvcGVyYV92ZXJzaW9uID0gTnVtYmVy
KG9wZXJhX3ZlcnNpb25bMV0pOworICAvLyBTb21lIGJyb3dzZXJzIHVzZSB0aGUgd3JvbmcgZXZl
bnQgcHJvcGVydGllcyB0byBzaWduYWwgY21kL2N0cmwgb24gT1MgWAorICB2YXIgZmxpcEN0cmxD
bWQgPSBtYWMgJiYgKHF0d2Via2l0IHx8IG9wZXJhICYmIChvcGVyYV92ZXJzaW9uID09IG51bGwg
fHwgb3BlcmFfdmVyc2lvbiA8IDEyLjExKSk7CiAKICAgLy8gT3B0aW1pemUgc29tZSBjb2RlIHdo
ZW4gdGhlc2UgZmVhdHVyZXMgYXJlIG5vdCB1c2VkCiAgIHZhciBzYXdSZWFkT25seVNwYW5zID0g
ZmFsc2UsIHNhd0NvbGxhcHNlZFNwYW5zID0gZmFsc2U7CkBAIC00MSwzMCArNDgsMTQgQEAgd2lu
ZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgdmFyIGRpc3BsYXkgPSB0aGlzLmRp
c3BsYXkgPSBtYWtlRGlzcGxheShwbGFjZSk7CiAgICAgZGlzcGxheS53cmFwcGVyLkNvZGVNaXJy
b3IgPSB0aGlzOwogICAgIHVwZGF0ZUd1dHRlcnModGhpcyk7Ci0gICAgaWYgKG9wdGlvbnMuYXV0
b2ZvY3VzKSBmb2N1c0lucHV0KHRoaXMpOworICAgIGlmIChvcHRpb25zLmF1dG9mb2N1cyAmJiAh
bW9iaWxlKSBmb2N1c0lucHV0KHRoaXMpOwogCi0gICAgdmFyIGRvYyA9IG5ldyBCcmFuY2hDaHVu
ayhbbmV3IExlYWZDaHVuayhbbWFrZUxpbmUoIiIsIG51bGwsIHRleHRIZWlnaHQoZGlzcGxheSkp
XSldKTsKLSAgICAvLyBUaGUgc2VsZWN0aW9uLiBUaGVzZSBhcmUgYWx3YXlzIG1haW50YWluZWQg
dG8gcG9pbnQgYXQgdmFsaWQKLSAgICAvLyBwb3NpdGlvbnMuIEludmVydGVkIGlzIHVzZWQgdG8g
cmVtZW1iZXIgdGhhdCB0aGUgdXNlciBpcwotICAgIC8vIHNlbGVjdGluZyBib3R0b20tdG8tdG9w
LgotICAgIHRoaXMudmlldyA9IHsKLSAgICAgIGRvYzogZG9jLAotICAgICAgLy8gZnJvbnRpZXIg
aXMgdGhlIHBvaW50IHVwIHRvIHdoaWNoIHRoZSBjb250ZW50IGhhcyBiZWVuIHBhcnNlZCwKLSAg
ICAgIGZyb250aWVyOiAwLCBoaWdobGlnaHQ6IG5ldyBEZWxheWVkKCksCi0gICAgICBzZWw6IHtm
cm9tOiB7bGluZTogMCwgY2g6IDB9LCB0bzoge2xpbmU6IDAsIGNoOiAwfSwgaW52ZXJ0ZWQ6IGZh
bHNlLCBzaGlmdDogZmFsc2V9LAotICAgICAgc2Nyb2xsVG9wOiAwLCBzY3JvbGxMZWZ0OiAwLAot
ICAgICAgb3ZlcndyaXRlOiBmYWxzZSwgZm9jdXNlZDogZmFsc2UsCi0gICAgICAvLyBUcmFja3Mg
dGhlIG1heGltdW0gbGluZSBsZW5ndGggc28gdGhhdAotICAgICAgLy8gdGhlIGhvcml6b250YWwg
c2Nyb2xsYmFyIGNhbiBiZSBrZXB0Ci0gICAgICAvLyBzdGF0aWMgd2hlbiBzY3JvbGxpbmcuCi0g
ICAgICBtYXhMaW5lOiBnZXRMaW5lKGRvYywgMCksCi0gICAgICBtYXhMaW5lTGVuZ3RoOiAwLAot
ICAgICAgbWF4TGluZUNoYW5nZWQ6IGZhbHNlLAotICAgICAgc3VwcHJlc3NFZGl0czogZmFsc2Us
Ci0gICAgICBnb2FsQ29sdW1uOiBudWxsLAotICAgICAgY2FudEVkaXQ6IGZhbHNlCi0gICAgfTsK
KyAgICB0aGlzLnZpZXcgPSBtYWtlVmlldyhuZXcgQnJhbmNoQ2h1bmsoW25ldyBMZWFmQ2h1bmso
W21ha2VMaW5lKCIiLCBudWxsLCB0ZXh0SGVpZ2h0KGRpc3BsYXkpKV0pXSkpOworICAgIHRoaXMu
bmV4dE9wSWQgPSAwOwogICAgIGxvYWRNb2RlKHRoaXMpOworICAgIHRoZW1lQ2hhbmdlZCh0aGlz
KTsKKyAgICBpZiAob3B0aW9ucy5saW5lV3JhcHBpbmcpCisgICAgICB0aGlzLmRpc3BsYXkud3Jh
cHBlci5jbGFzc05hbWUgKz0gIiBDb2RlTWlycm9yLXdyYXAiOwogCiAgICAgLy8gSW5pdGlhbGl6
ZSB0aGUgY29udGVudC4KICAgICB0aGlzLnNldFZhbHVlKG9wdGlvbnMudmFsdWUgfHwgIiIpOwpA
QCAtNzcsNyArNjgsNyBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICAv
LyBJRSB0aHJvd3MgdW5zcGVjaWZpZWQgZXJyb3IgaW4gY2VydGFpbiBjYXNlcywgd2hlbgogICAg
IC8vIHRyeWluZyB0byBhY2Nlc3MgYWN0aXZlRWxlbWVudCBiZWZvcmUgb25sb2FkCiAgICAgdmFy
IGhhc0ZvY3VzOyB0cnkgeyBoYXNGb2N1cyA9IChkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09IGRp
c3BsYXkuaW5wdXQpOyB9IGNhdGNoKGUpIHsgfQotICAgIGlmIChoYXNGb2N1cyB8fCBvcHRpb25z
LmF1dG9mb2N1cykgc2V0VGltZW91dChiaW5kKG9uRm9jdXMsIHRoaXMpLCAyMCk7CisgICAgaWYg
KGhhc0ZvY3VzIHx8IChvcHRpb25zLmF1dG9mb2N1cyAmJiAhbW9iaWxlKSkgc2V0VGltZW91dChi
aW5kKG9uRm9jdXMsIHRoaXMpLCAyMCk7CiAgICAgZWxzZSBvbkJsdXIodGhpcyk7CiAKICAgICBv
cGVyYXRpb24odGhpcywgZnVuY3Rpb24oKSB7CkBAIC05Myw3ICs4NCw4IEBAIHdpbmRvdy5Db2Rl
TWlycm9yID0gKGZ1bmN0aW9uKCkgewogICBmdW5jdGlvbiBtYWtlRGlzcGxheShwbGFjZSkgewog
ICAgIHZhciBkID0ge307CiAgICAgdmFyIGlucHV0ID0gZC5pbnB1dCA9IGVsdCgidGV4dGFyZWEi
LCBudWxsLCBudWxsLCAicG9zaXRpb246IGFic29sdXRlOyBwYWRkaW5nOiAwOyB3aWR0aDogMXB4
OyBoZWlnaHQ6IDFlbTsgb3V0bGluZTogbm9uZTsiKTsKLSAgICBpbnB1dC5zZXRBdHRyaWJ1dGUo
IndyYXAiLCAib2ZmIik7IGlucHV0LnNldEF0dHJpYnV0ZSgiYXV0b2NvcnJlY3QiLCAib2ZmIik7
IGlucHV0LnNldEF0dHJpYnV0ZSgiYXV0b2NhcGl0YWxpemUiLCAib2ZmIik7CisgICAgaWYgKCF3
ZWJraXQpIGlucHV0LnNldEF0dHJpYnV0ZSgid3JhcCIsICJvZmYiKTsKKyAgICBpbnB1dC5zZXRB
dHRyaWJ1dGUoImF1dG9jb3JyZWN0IiwgIm9mZiIpOyBpbnB1dC5zZXRBdHRyaWJ1dGUoImF1dG9j
YXBpdGFsaXplIiwgIm9mZiIpOwogICAgIC8vIFdyYXBzIGFuZCBoaWRlcyBpbnB1dCB0ZXh0YXJl
YQogICAgIGQuaW5wdXREaXYgPSBlbHQoImRpdiIsIFtpbnB1dF0sIG51bGwsICJvdmVyZmxvdzog
aGlkZGVuOyBwb3NpdGlvbjogcmVsYXRpdmU7IHdpZHRoOiAzcHg7IGhlaWdodDogMHB4OyIpOwog
ICAgIC8vIFRoZSBhY3R1YWwgZmFrZSBzY3JvbGxiYXJzLgpAQCAtMTE0LDE3ICsxMDYsMjAgQEAg
d2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgbnVsbCwgInBvc2l0aW9uOiByZWxhdGl2ZTsgb3V0bGluZTogbm9uZSIpOwogICAgIC8vIE1v
dmVkIGFyb3VuZCBpdHMgcGFyZW50IHRvIGNvdmVyIHZpc2libGUgdmlldwogICAgIGQubW92ZXIg
PSBlbHQoImRpdiIsIFtlbHQoImRpdiIsIFtkLmxpbmVTcGFjZV0sICJDb2RlTWlycm9yLWxpbmVz
IildLCBudWxsLCAicG9zaXRpb246IHJlbGF0aXZlIik7Ci0gICAgZC5ndXR0ZXJzID0gZWx0KCJk
aXYiLCBudWxsLCAiQ29kZU1pcnJvci1ndXR0ZXJzIik7Ci0gICAgZC5saW5lR3V0dGVyID0gbnVs
bDsKICAgICAvLyBTZXQgdG8gdGhlIGhlaWdodCBvZiB0aGUgdGV4dCwgY2F1c2VzIHNjcm9sbGlu
ZwogICAgIGQuc2l6ZXIgPSBlbHQoImRpdiIsIFtkLm1vdmVyXSwgIkNvZGVNaXJyb3Itc2l6ZXIi
KTsKICAgICAvLyBEIGlzIG5lZWRlZCBiZWNhdXNlIGJlaGF2aW9yIG9mIGVsdHMgd2l0aCBvdmVy
ZmxvdzogYXV0byBhbmQgcGFkZGluZyBpcyBpbmNvbnNpc3RlbnQgYWNyb3NzIGJyb3dzZXJzCiAg
ICAgZC5oZWlnaHRGb3JjZXIgPSBlbHQoImRpdiIsICJcdTAwYTAiLCBudWxsLCAicG9zaXRpb246
IGFic29sdXRlOyBoZWlnaHQ6ICIgKyBzY3JvbGxlckN1dE9mZiArICJweCIpOworICAgIC8vIFdp
bGwgY29udGFpbiB0aGUgZ3V0dGVycywgaWYgYW55CisgICAgZC5ndXR0ZXJzID0gZWx0KCJkaXYi
LCBudWxsLCAiQ29kZU1pcnJvci1ndXR0ZXJzIik7CisgICAgZC5saW5lR3V0dGVyID0gbnVsbDsK
KyAgICAvLyBIZWxwZXIgZWxlbWVudCB0byBwcm9wZXJseSBzaXplIHRoZSBndXR0ZXIgYmFja2dy
b3VuZHMKKyAgICB2YXIgc2Nyb2xsZXJJbm5lciA9IGVsdCgiZGl2IiwgW2Quc2l6ZXIsIGQuaGVp
Z2h0Rm9yY2VyLCBkLmd1dHRlcnNdLCBudWxsLCAicG9zaXRpb246IHJlbGF0aXZlOyBtaW4taGVp
Z2h0OiAxMDAlIik7CiAgICAgLy8gUHJvdmlkZXMgc2Nyb2xsaW5nCi0gICAgZC5zY3JvbGxlciA9
IGVsdCgiZGl2IiwgW2Quc2l6ZXIsIGQuaGVpZ2h0Rm9yY2VyXSwgIkNvZGVNaXJyb3Itc2Nyb2xs
Iik7CisgICAgZC5zY3JvbGxlciA9IGVsdCgiZGl2IiwgW3Njcm9sbGVySW5uZXJdLCAiQ29kZU1p
cnJvci1zY3JvbGwiKTsKICAgICBkLnNjcm9sbGVyLnNldEF0dHJpYnV0ZSgidGFiSW5kZXgiLCAi
LTEiKTsKICAgICAvLyBUaGUgZWxlbWVudCBpbiB3aGljaCB0aGUgZWRpdG9yIGxpdmVzLgotICAg
IGQud3JhcHBlciA9IGVsdCgiZGl2IiwgW2QuZ3V0dGVycywgZC5pbnB1dERpdiwgZC5zY3JvbGxi
YXJILCBkLnNjcm9sbGJhclYsCisgICAgZC53cmFwcGVyID0gZWx0KCJkaXYiLCBbZC5pbnB1dERp
diwgZC5zY3JvbGxiYXJILCBkLnNjcm9sbGJhclYsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZC5zY3JvbGxiYXJGaWxsZXIsIGQuc2Nyb2xsZXJdLCAiQ29kZU1pcnJvciIpOwogICAgIC8v
IFdvcmsgYXJvdW5kIElFNyB6LWluZGV4IGJ1ZwogICAgIGlmIChpZV9sdDgpIHsgZC5ndXR0ZXJz
LnN0eWxlLnpJbmRleCA9IC0xOyBkLnNjcm9sbGVyLnN0eWxlLnBhZGRpbmdSaWdodCA9IDA7IH0K
QEAgLTE2MCw3ICsxNTUsNyBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKIAog
ICAgIGQuY2FjaGVkQ2hhcldpZHRoID0gZC5jYWNoZWRUZXh0SGVpZ2h0ID0gbnVsbDsKICAgICBk
Lm1lYXN1cmVMaW5lQ2FjaGUgPSBbXTsKLSAgICBkLm1lYXN1cmVMaW5lQ2FjaGUucG9zID0gMDsK
KyAgICBkLm1lYXN1cmVMaW5lQ2FjaGVQb3MgPSAwOwogCiAgICAgLy8gVHJhY2tzIHdoZW4gcmVz
ZXRJbnB1dCBoYXMgcHVudGVkIHRvIGp1c3QgcHV0dGluZyBhIHNob3J0CiAgICAgLy8gc3RyaW5n
IGluc3RlYWQgb2YgdGhlIChsYXJnZSkgc2VsZWN0aW9uLgpAQCAtMTczLDYgKzE2OCwzMiBAQCB3
aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICByZXR1cm4gZDsKICAgfQogCisg
IC8vIFZJRVcgQ09OU1RSVUNUT1IKKworICBmdW5jdGlvbiBtYWtlVmlldyhkb2MpIHsKKyAgICB2
YXIgc2VsUG9zID0ge2xpbmU6IDAsIGNoOiAwfTsKKyAgICByZXR1cm4geworICAgICAgZG9jOiBk
b2MsCisgICAgICAvLyBmcm9udGllciBpcyB0aGUgcG9pbnQgdXAgdG8gd2hpY2ggdGhlIGNvbnRl
bnQgaGFzIGJlZW4gcGFyc2VkLAorICAgICAgZnJvbnRpZXI6IDAsIGhpZ2hsaWdodDogbmV3IERl
bGF5ZWQoKSwKKyAgICAgIHNlbDoge2Zyb206IHNlbFBvcywgdG86IHNlbFBvcywgaGVhZDogc2Vs
UG9zLCBhbmNob3I6IHNlbFBvcywgc2hpZnQ6IGZhbHNlLCBleHRlbmQ6IGZhbHNlfSwKKyAgICAg
IHNjcm9sbFRvcDogMCwgc2Nyb2xsTGVmdDogMCwKKyAgICAgIG92ZXJ3cml0ZTogZmFsc2UsIGZv
Y3VzZWQ6IGZhbHNlLAorICAgICAgLy8gVHJhY2tzIHRoZSBtYXhpbXVtIGxpbmUgbGVuZ3RoIHNv
IHRoYXQKKyAgICAgIC8vIHRoZSBob3Jpem9udGFsIHNjcm9sbGJhciBjYW4gYmUga2VwdAorICAg
ICAgLy8gc3RhdGljIHdoZW4gc2Nyb2xsaW5nLgorICAgICAgbWF4TGluZTogZ2V0TGluZShkb2Ms
IDApLAorICAgICAgbWF4TGluZUxlbmd0aDogMCwKKyAgICAgIG1heExpbmVDaGFuZ2VkOiBmYWxz
ZSwKKyAgICAgIHN1cHByZXNzRWRpdHM6IGZhbHNlLAorICAgICAgZ29hbENvbHVtbjogbnVsbCwK
KyAgICAgIGNhbnRFZGl0OiBmYWxzZSwKKyAgICAgIGtleU1hcHM6IFtdLAorICAgICAgb3Zlcmxh
eXM6IFtdLAorICAgICAgbW9kZUdlbjogMAorICAgIH07CisgIH0KKwogICAvLyBTVEFURSBVUERB
VEVTCiAKICAgLy8gVXNlZCB0byBnZXQgdGhlIGVkaXRvciBpbnRvIGEgY29uc2lzdGVudCBzdGF0
ZSBhZ2FpbiB3aGVuIG9wdGlvbnMgY2hhbmdlLgpAQCAtMTgwLDkgKzIwMSwxMCBAQCB3aW5kb3cu
Q29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgZnVuY3Rpb24gbG9hZE1vZGUoY20pIHsKICAg
ICB2YXIgZG9jID0gY20udmlldy5kb2M7CiAgICAgY20udmlldy5tb2RlID0gQ29kZU1pcnJvci5n
ZXRNb2RlKGNtLm9wdGlvbnMsIGNtLm9wdGlvbnMubW9kZSk7Ci0gICAgZG9jLml0ZXIoMCwgZG9j
LnNpemUsIGZ1bmN0aW9uKGxpbmUpIHsgbGluZS5zdGF0ZUFmdGVyID0gbnVsbDsgfSk7CisgICAg
ZG9jLml0ZXIoMCwgZG9jLnNpemUsIGZ1bmN0aW9uKGxpbmUpIHsgaWYgKGxpbmUuc3RhdGVBZnRl
cikgbGluZS5zdGF0ZUFmdGVyID0gbnVsbDsgfSk7CiAgICAgY20udmlldy5mcm9udGllciA9IDA7
CiAgICAgc3RhcnRXb3JrZXIoY20sIDEwMCk7CisgICAgY20udmlldy5tb2RlR2VuKys7CiAgIH0K
IAogICBmdW5jdGlvbiB3cmFwcGluZ0NoYW5nZWQoY20pIHsKQEAgLTIwNCw2ICsyMjYsOCBAQCB3
aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICAgIH0pOwogICAgIH0KICAgICBy
ZWdDaGFuZ2UoY20sIDAsIGRvYy5zaXplKTsKKyAgICBjbGVhckNhY2hlcyhjbSk7CisgICAgc2V0
VGltZW91dChmdW5jdGlvbigpe3VwZGF0ZVNjcm9sbGJhcnMoY20uZGlzcGxheSwgY20udmlldy5k
b2MuaGVpZ2h0KTt9LCAxMDApOwogICB9CiAKICAgZnVuY3Rpb24ga2V5TWFwQ2hhbmdlZChjbSkg
ewpAQCAtMjE1LDYgKzIzOSw3IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewog
ICBmdW5jdGlvbiB0aGVtZUNoYW5nZWQoY20pIHsKICAgICBjbS5kaXNwbGF5LndyYXBwZXIuY2xh
c3NOYW1lID0gY20uZGlzcGxheS53cmFwcGVyLmNsYXNzTmFtZS5yZXBsYWNlKC9ccypjbS1zLVxT
Ky9nLCAiIikgKwogICAgICAgY20ub3B0aW9ucy50aGVtZS5yZXBsYWNlKC8oXnxccylccyovZywg
IiBjbS1zLSIpOworICAgIGNsZWFyQ2FjaGVzKGNtKTsKICAgfQogCiAgIGZ1bmN0aW9uIGd1dHRl
cnNDaGFuZ2VkKGNtKSB7CkBAIC0yODUsMjkgKzMxMCwxNyBAQCB3aW5kb3cuQ29kZU1pcnJvciA9
IChmdW5jdGlvbigpIHsKIAogICAvLyBSZS1zeW5jaHJvbml6ZSB0aGUgZmFrZSBzY3JvbGxiYXJz
IHdpdGggdGhlIGFjdHVhbCBzaXplIG9mIHRoZQogICAvLyBjb250ZW50LiBPcHRpb25hbGx5IGZv
cmNlIGEgc2Nyb2xsVG9wLgotICBmdW5jdGlvbiB1cGRhdGVTY3JvbGxiYXJzKGQgLyogZGlzcGxh
eSAqLywgZG9jSGVpZ2h0LCBzY3JvbGxUb3ApIHsKLSAgICBkLnNpemVyLnN0eWxlLm1pbkhlaWdo
dCA9IGQuaGVpZ2h0Rm9yY2VyLnN0eWxlLnRvcCA9IChkb2NIZWlnaHQgKyAyICogcGFkZGluZ1Rv
cChkKSkgKyAicHgiOworICBmdW5jdGlvbiB1cGRhdGVTY3JvbGxiYXJzKGQgLyogZGlzcGxheSAq
LywgZG9jSGVpZ2h0KSB7CisgICAgdmFyIHRvdGFsSGVpZ2h0ID0gZG9jSGVpZ2h0ICsgMiAqIHBh
ZGRpbmdUb3AoZCk7CisgICAgZC5zaXplci5zdHlsZS5taW5IZWlnaHQgPSBkLmhlaWdodEZvcmNl
ci5zdHlsZS50b3AgPSB0b3RhbEhlaWdodCArICJweCI7CisgICAgdmFyIHNjcm9sbEhlaWdodCA9
IE1hdGgubWF4KHRvdGFsSGVpZ2h0LCBkLnNjcm9sbGVyLnNjcm9sbEhlaWdodCk7CiAgICAgdmFy
IG5lZWRzSCA9IGQuc2Nyb2xsZXIuc2Nyb2xsV2lkdGggPiBkLnNjcm9sbGVyLmNsaWVudFdpZHRo
OwotICAgIHZhciBuZWVkc1YgPSBkLnNjcm9sbGVyLnNjcm9sbEhlaWdodCA+IGQuc2Nyb2xsZXIu
Y2xpZW50SGVpZ2h0OworICAgIHZhciBuZWVkc1YgPSBzY3JvbGxIZWlnaHQgPiBkLnNjcm9sbGVy
LmNsaWVudEhlaWdodDsKICAgICBpZiAobmVlZHNWKSB7CiAgICAgICBkLnNjcm9sbGJhclYuc3R5
bGUuZGlzcGxheSA9ICJibG9jayI7CiAgICAgICBkLnNjcm9sbGJhclYuc3R5bGUuYm90dG9tID0g
bmVlZHNIID8gc2Nyb2xsYmFyV2lkdGgoZC5tZWFzdXJlKSArICJweCIgOiAiMCI7CiAgICAgICBk
LnNjcm9sbGJhclYuZmlyc3RDaGlsZC5zdHlsZS5oZWlnaHQgPSAKLSAgICAgICAgKGQuc2Nyb2xs
ZXIuc2Nyb2xsSGVpZ2h0IC0gZC5zY3JvbGxlci5jbGllbnRIZWlnaHQgKyBkLnNjcm9sbGJhclYu
Y2xpZW50SGVpZ2h0KSArICJweCI7Ci0gICAgICBpZiAoc2Nyb2xsVG9wICE9IG51bGwpIHsKLSAg
ICAgICAgZC5zY3JvbGxiYXJWLnNjcm9sbFRvcCA9IGQuc2Nyb2xsZXIuc2Nyb2xsVG9wID0gc2Ny
b2xsVG9wOwotICAgICAgICAvLyAnTnVkZ2UnIHRoZSBzY3JvbGxiYXIgdG8gd29yayBhcm91bmQg
YSBXZWJraXQgYnVnIHdoZXJlLAotICAgICAgICAvLyBpbiBzb21lIHNpdHVhdGlvbnMsIHdlJ2Qg
ZW5kIHVwIHdpdGggYSBzY3JvbGxiYXIgdGhhdAotICAgICAgICAvLyByZXBvcnRlZCBpdHMgc2Ny
b2xsVG9wIChhbmQgbG9va2VkKSBhcyBleHBlY3RlZCwgYnV0Ci0gICAgICAgIC8vICpiZWhhdmVk
KiBhcyBpZiBpdCB3YXMgc3RpbGwgaW4gYSBwcmV2aW91cyBzdGF0ZSAoaS5lLgotICAgICAgICAv
LyBjb3VsZG4ndCBzY3JvbGwgdXAsIGV2ZW4gdGhvdWdoIGl0IGFwcGVhcmVkIHRvIGJlIGF0IHRo
ZQotICAgICAgICAvLyBib3R0b20pLgotICAgICAgICBpZiAod2Via2l0KSBzZXRUaW1lb3V0KGZ1
bmN0aW9uKCkgewotICAgICAgICAgIGlmIChkLnNjcm9sbGJhclYuc2Nyb2xsVG9wICE9IHNjcm9s
bFRvcCkgcmV0dXJuOwotICAgICAgICAgIGQuc2Nyb2xsYmFyVi5zY3JvbGxUb3AgPSBzY3JvbGxU
b3AgKyAoc2Nyb2xsVG9wID8gLTEgOiAxKTsKLSAgICAgICAgICBkLnNjcm9sbGJhclYuc2Nyb2xs
VG9wID0gc2Nyb2xsVG9wOwotICAgICAgICB9LCAwKTsKLSAgICAgIH0KKyAgICAgICAgKHNjcm9s
bEhlaWdodCAtIGQuc2Nyb2xsZXIuY2xpZW50SGVpZ2h0ICsgZC5zY3JvbGxiYXJWLmNsaWVudEhl
aWdodCkgKyAicHgiOwogICAgIH0gZWxzZSBkLnNjcm9sbGJhclYuc3R5bGUuZGlzcGxheSA9ICIi
OwogICAgIGlmIChuZWVkc0gpIHsKICAgICAgIGQuc2Nyb2xsYmFySC5zdHlsZS5kaXNwbGF5ID0g
ImJsb2NrIjsKQEAgLTMzNSwxMiArMzQ4LDE1IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0
aW9uKCkgewogCiAgIC8vIExJTkUgTlVNQkVSUwogCi0gIGZ1bmN0aW9uIGFsaWduVmVydGljYWxs
eShkaXNwbGF5KSB7CisgIGZ1bmN0aW9uIGFsaWduSG9yaXpvbnRhbGx5KGNtKSB7CisgICAgdmFy
IGRpc3BsYXkgPSBjbS5kaXNwbGF5OwogICAgIGlmICghZGlzcGxheS5hbGlnbldpZGdldHMgJiYg
IWRpc3BsYXkuZ3V0dGVycy5maXJzdENoaWxkKSByZXR1cm47Ci0gICAgdmFyIGwgPSBjb21wZW5z
YXRlRm9ySFNjcm9sbChkaXNwbGF5KSArICJweCI7CisgICAgdmFyIGNvbXAgPSBjb21wZW5zYXRl
Rm9ySFNjcm9sbChkaXNwbGF5KSAtIGRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xsTGVmdCArIGNtLnZp
ZXcuc2Nyb2xsTGVmdDsKKyAgICB2YXIgZ3V0dGVyVyA9IGRpc3BsYXkuZ3V0dGVycy5vZmZzZXRX
aWR0aCwgbCA9IGNvbXAgKyAicHgiOwogICAgIGZvciAodmFyIG4gPSBkaXNwbGF5LmxpbmVEaXYu
Zmlyc3RDaGlsZDsgbjsgbiA9IG4ubmV4dFNpYmxpbmcpIGlmIChuLmFsaWduYWJsZSkgewogICAg
ICAgZm9yICh2YXIgaSA9IDAsIGEgPSBuLmFsaWduYWJsZTsgaSA8IGEubGVuZ3RoOyArK2kpIGFb
aV0uc3R5bGUubGVmdCA9IGw7CiAgICAgfQorICAgIGRpc3BsYXkuZ3V0dGVycy5zdHlsZS5sZWZ0
ID0gKGNvbXAgKyBndXR0ZXJXKSArICJweCI7CiAgIH0KIAogICBmdW5jdGlvbiBtYXliZVVwZGF0
ZUxpbmVOdW1iZXJXaWR0aChjbSkgewpAQCAtMzc4LDcgKzM5NCw4IEBAIHdpbmRvdy5Db2RlTWly
cm9yID0gKGZ1bmN0aW9uKCkgewogICAgICAgICBzaWduYWxMYXRlcihjbSwgY20sICJ2aWV3cG9y
dENoYW5nZSIsIGNtLCBjbS5kaXNwbGF5LnNob3dpbmdGcm9tLCBjbS5kaXNwbGF5LnNob3dpbmdU
byk7CiAgICAgfQogICAgIHVwZGF0ZVNlbGVjdGlvbihjbSk7Ci0gICAgdXBkYXRlU2Nyb2xsYmFy
cyhjbS5kaXNwbGF5LCBjbS52aWV3LmRvYy5oZWlnaHQsIHR5cGVvZiB2aWV3UG9ydCA9PSAibnVt
YmVyIiA/IHZpZXdQb3J0IDogbnVsbCk7CisgICAgdXBkYXRlU2Nyb2xsYmFycyhjbS5kaXNwbGF5
LCBjbS52aWV3LmRvYy5oZWlnaHQpOworCiAgICAgcmV0dXJuIHVwZGF0ZWQ7CiAgIH0KIApAQCAt
NDI3LDI3ICs0NDQsMzMgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAg
dmFyIHRvID0gTWF0aC5taW4oZG9jLnNpemUsIHZpc2libGUudG8gKyBjbS5vcHRpb25zLnZpZXdw
b3J0TWFyZ2luKTsKICAgICBpZiAoZGlzcGxheS5zaG93aW5nRnJvbSA8IGZyb20gJiYgZnJvbSAt
IGRpc3BsYXkuc2hvd2luZ0Zyb20gPCAyMCkgZnJvbSA9IGRpc3BsYXkuc2hvd2luZ0Zyb207CiAg
ICAgaWYgKGRpc3BsYXkuc2hvd2luZ1RvID4gdG8gJiYgZGlzcGxheS5zaG93aW5nVG8gLSB0byA8
IDIwKSB0byA9IE1hdGgubWluKGRvYy5zaXplLCBkaXNwbGF5LnNob3dpbmdUbyk7CisgICAgaWYg
KHNhd0NvbGxhcHNlZFNwYW5zKSB7CisgICAgICBmcm9tID0gbGluZU5vKHZpc3VhbExpbmUoZG9j
LCBnZXRMaW5lKGRvYywgZnJvbSkpKTsKKyAgICAgIHdoaWxlICh0byA8IGRvYy5zaXplICYmIGxp
bmVJc0hpZGRlbihnZXRMaW5lKGRvYywgdG8pKSkgKyt0bzsKKyAgICB9CiAKICAgICAvLyBDcmVh
dGUgYSByYW5nZSBvZiB0aGVvcmV0aWNhbGx5IGludGFjdCBsaW5lcywgYW5kIHB1bmNoIGhvbGVz
CiAgICAgLy8gaW4gdGhhdCB1c2luZyB0aGUgY2hhbmdlIGluZm8uCiAgICAgdmFyIGludGFjdCA9
IGNoYW5nZXMgPT09IHRydWUgPyBbXSA6Ci0gICAgICBjb21wdXRlSW50YWN0KFt7ZnJvbTogZGlz
cGxheS5zaG93aW5nRnJvbSwgdG86IGRpc3BsYXkuc2hvd2luZ1RvLCBkb21TdGFydDogMH1dLCBj
aGFuZ2VzKTsKKyAgICAgIGNvbXB1dGVJbnRhY3QoW3tmcm9tOiBkaXNwbGF5LnNob3dpbmdGcm9t
LCB0bzogZGlzcGxheS5zaG93aW5nVG99XSwgY2hhbmdlcyk7CiAgICAgLy8gQ2xpcCBvZmYgdGhl
IHBhcnRzIHRoYXQgd29uJ3QgYmUgdmlzaWJsZQogICAgIHZhciBpbnRhY3RMaW5lcyA9IDA7CiAg
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbnRhY3QubGVuZ3RoOyArK2kpIHsKICAgICAgIHZhciBy
YW5nZSA9IGludGFjdFtpXTsKLSAgICAgIGlmIChyYW5nZS5mcm9tIDwgZnJvbSkge3JhbmdlLmRv
bVN0YXJ0ICs9IChmcm9tIC0gcmFuZ2UuZnJvbSk7IHJhbmdlLmZyb20gPSBmcm9tO30KKyAgICAg
IGlmIChyYW5nZS5mcm9tIDwgZnJvbSkgcmFuZ2UuZnJvbSA9IGZyb207CiAgICAgICBpZiAocmFu
Z2UudG8gPiB0bykgcmFuZ2UudG8gPSB0bzsKICAgICAgIGlmIChyYW5nZS5mcm9tID49IHJhbmdl
LnRvKSBpbnRhY3Quc3BsaWNlKGktLSwgMSk7CiAgICAgICBlbHNlIGludGFjdExpbmVzICs9IHJh
bmdlLnRvIC0gcmFuZ2UuZnJvbTsKICAgICB9CiAgICAgaWYgKGludGFjdExpbmVzID09IHRvIC0g
ZnJvbSAmJiBmcm9tID09IGRpc3BsYXkuc2hvd2luZ0Zyb20gJiYgdG8gPT0gZGlzcGxheS5zaG93
aW5nVG8pCiAgICAgICByZXR1cm47Ci0gICAgaW50YWN0LnNvcnQoZnVuY3Rpb24oYSwgYikge3Jl
dHVybiBhLmRvbVN0YXJ0IC0gYi5kb21TdGFydDt9KTsKKyAgICBpbnRhY3Quc29ydChmdW5jdGlv
bihhLCBiKSB7cmV0dXJuIGEuZnJvbSAtIGIuZnJvbTt9KTsKIAorICAgIHZhciBmb2N1c2VkID0g
ZG9jdW1lbnQuYWN0aXZlRWxlbWVudDsKICAgICBpZiAoaW50YWN0TGluZXMgPCAodG8gLSBmcm9t
KSAqIC43KSBkaXNwbGF5LmxpbmVEaXYuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKICAgICBwYXRj
aERpc3BsYXkoY20sIGZyb20sIHRvLCBpbnRhY3QsIHBvc2l0aW9uc0NoYW5nZWRGcm9tKTsKICAg
ICBkaXNwbGF5LmxpbmVEaXYuc3R5bGUuZGlzcGxheSA9ICIiOworICAgIGlmIChkb2N1bWVudC5h
Y3RpdmVFbGVtZW50ICE9IGZvY3VzZWQgJiYgZm9jdXNlZC5vZmZzZXRIZWlnaHQpIGZvY3VzZWQu
Zm9jdXMoKTsKIAogICAgIHZhciBkaWZmZXJlbnQgPSBmcm9tICE9IGRpc3BsYXkuc2hvd2luZ0Zy
b20gfHwgdG8gIT0gZGlzcGxheS5zaG93aW5nVG8gfHwKICAgICAgIGRpc3BsYXkubGFzdFNpemVD
ICE9IGRpc3BsYXkud3JhcHBlci5jbGllbnRIZWlnaHQ7CkBAIC00NTUsMzQgKzQ3OCwyNCBAQCB3
aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICAvLyByZXNpemVkIG9yIHRoZSBm
b250IHNpemUgY2hhbmdlcy4KICAgICBpZiAoZGlmZmVyZW50KSBkaXNwbGF5Lmxhc3RTaXplQyA9
IGRpc3BsYXkud3JhcHBlci5jbGllbnRIZWlnaHQ7CiAgICAgZGlzcGxheS5zaG93aW5nRnJvbSA9
IGZyb207IGRpc3BsYXkuc2hvd2luZ1RvID0gdG87Ci0gICAgZGlzcGxheS52aWV3T2Zmc2V0ID0g
aGVpZ2h0QXRMaW5lKGNtLCBnZXRMaW5lKGRvYywgZnJvbSkpOwogICAgIHN0YXJ0V29ya2VyKGNt
LCAxMDApOwogCi0gICAgLy8gU2luY2UgdGhpcyBpcyBhbGwgcmF0aGVyIGVycm9yIHByb25lLCBp
dCBpcyBob25vdXJlZCB3aXRoIHRoZQotICAgIC8vIG9ubHkgYXNzZXJ0aW9uIGluIHRoZSB3aG9s
ZSBmaWxlLgotICAgIGlmIChkaXNwbGF5LmxpbmVEaXYuY2hpbGROb2Rlcy5sZW5ndGggIT0gZGlz
cGxheS5zaG93aW5nVG8gLSBkaXNwbGF5LnNob3dpbmdGcm9tKQotICAgICAgdGhyb3cgbmV3IEVy
cm9yKCJCQUQgUEFUQ0ghICIgKyBKU09OLnN0cmluZ2lmeShpbnRhY3QpICsgIiBzaXplPSIgKyAo
ZGlzcGxheS5zaG93aW5nVG8gLSBkaXNwbGF5LnNob3dpbmdGcm9tKSArCi0gICAgICAgICAgICAg
ICAgICAgICAgIiBub2Rlcz0iICsgZGlzcGxheS5saW5lRGl2LmNoaWxkTm9kZXMubGVuZ3RoKTsK
LQotICAgIC8vIFVwZGF0ZSBsaW5lIGhlaWdodHMgZm9yIHZpc2libGUgbGluZXMgYmFzZWQgb24g
YWN0dWFsIERPTQotICAgIC8vIHNpemVzCi0gICAgdmFyIGN1ck5vZGUgPSBkaXNwbGF5LmxpbmVE
aXYuZmlyc3RDaGlsZCwgcmVsYXRpdmVUbyA9IGN1ck5vZGUub2Zmc2V0VG9wOwotICAgIGRvYy5p
dGVyKGRpc3BsYXkuc2hvd2luZ0Zyb20sIGRpc3BsYXkuc2hvd2luZ1RvLCBmdW5jdGlvbihsaW5l
KSB7Ci0gICAgICAvLyBXb3JrIGFyb3VuZCBiaXphcnJvIElFNyBidWcgd2hlcmUsIHNvbWV0aW1l
cywgb3VyIGN1ck5vZGUKLSAgICAgIC8vIGlzIG1hZ2ljYWxseSByZXBsYWNlZCB3aXRoIGEgbmV3
IG5vZGUgaW4gdGhlIERPTSwgbGVhdmluZwotICAgICAgLy8gdXMgd2l0aCBhIHJlZmVyZW5jZSB0
byBhbiBvcnBoYW4gKG5leHRTaWJsaW5nLWxlc3MpIG5vZGUuCi0gICAgICBpZiAoIWN1ck5vZGUp
IHJldHVybjsKLSAgICAgIGlmICghbGluZUlzSGlkZGVuKGxpbmUpKSB7Ci0gICAgICAgIHZhciBl
bmQgPSBjdXJOb2RlLm9mZnNldEhlaWdodCArIGN1ck5vZGUub2Zmc2V0VG9wOwotICAgICAgICB2
YXIgaGVpZ2h0ID0gZW5kIC0gcmVsYXRpdmVUbywgZGlmZiA9IGxpbmUuaGVpZ2h0IC0gaGVpZ2h0
OwotICAgICAgICBpZiAoaGVpZ2h0IDwgMikgaGVpZ2h0ID0gdGV4dEhlaWdodChkaXNwbGF5KTsK
LSAgICAgICAgcmVsYXRpdmVUbyA9IGVuZDsKLSAgICAgICAgaWYgKGRpZmYgPiAuMDAxIHx8IGRp
ZmYgPCAtLjAwMSkKLSAgICAgICAgICB1cGRhdGVMaW5lSGVpZ2h0KGxpbmUsIGhlaWdodCk7Cisg
ICAgdmFyIHByZXZCb3R0b20gPSBkaXNwbGF5LmxpbmVEaXYub2Zmc2V0VG9wOworICAgIGZvciAo
dmFyIG5vZGUgPSBkaXNwbGF5LmxpbmVEaXYuZmlyc3RDaGlsZCwgaGVpZ2h0OyBub2RlOyBub2Rl
ID0gbm9kZS5uZXh0U2libGluZykgaWYgKG5vZGUubGluZU9iaikgeworICAgICAgaWYgKGllX2x0
OCkgeworICAgICAgICB2YXIgYm90ID0gbm9kZS5vZmZzZXRUb3AgKyBub2RlLm9mZnNldEhlaWdo
dDsKKyAgICAgICAgaGVpZ2h0ID0gYm90IC0gcHJldkJvdHRvbTsKKyAgICAgICAgcHJldkJvdHRv
bSA9IGJvdDsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHZhciBib3ggPSBub2RlLmdldEJvdW5k
aW5nQ2xpZW50UmVjdCgpOworICAgICAgICBoZWlnaHQgPSBib3guYm90dG9tIC0gYm94LnRvcDsK
ICAgICAgIH0KLSAgICAgIGN1ck5vZGUgPSBjdXJOb2RlLm5leHRTaWJsaW5nOwotICAgIH0pOwot
CisgICAgICB2YXIgZGlmZiA9IG5vZGUubGluZU9iai5oZWlnaHQgLSBoZWlnaHQ7CisgICAgICBp
ZiAoaGVpZ2h0IDwgMikgaGVpZ2h0ID0gdGV4dEhlaWdodChkaXNwbGF5KTsKKyAgICAgIGlmIChk
aWZmID4gLjAwMSB8fCBkaWZmIDwgLS4wMDEpCisgICAgICAgIHVwZGF0ZUxpbmVIZWlnaHQobm9k
ZS5saW5lT2JqLCBoZWlnaHQpOworICAgIH0KKyAgICBkaXNwbGF5LnZpZXdPZmZzZXQgPSBoZWln
aHRBdExpbmUoY20sIGdldExpbmUoZG9jLCBmcm9tKSk7CiAgICAgLy8gUG9zaXRpb24gdGhlIG1v
dmVyIGRpdiB0byBhbGlnbiB3aXRoIHRoZSBjdXJyZW50IHZpcnR1YWwgc2Nyb2xsIHBvc2l0aW9u
CiAgICAgZGlzcGxheS5tb3Zlci5zdHlsZS50b3AgPSBkaXNwbGF5LnZpZXdPZmZzZXQgKyAicHgi
OwogICAgIHJldHVybiB0cnVlOwpAQCAtNDkzLDE3ICs1MDYsMTUgQEAgd2luZG93LkNvZGVNaXJy
b3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgICB2YXIgY2hhbmdlID0gY2hhbmdlc1tpXSwgaW50YWN0
MiA9IFtdLCBkaWZmID0gY2hhbmdlLmRpZmYgfHwgMDsKICAgICAgIGZvciAodmFyIGogPSAwLCBs
MiA9IGludGFjdC5sZW5ndGg7IGogPCBsMjsgKytqKSB7CiAgICAgICAgIHZhciByYW5nZSA9IGlu
dGFjdFtqXTsKLSAgICAgICAgaWYgKGNoYW5nZS50byA8PSByYW5nZS5mcm9tICYmIGNoYW5nZS5k
aWZmKQotICAgICAgICAgIGludGFjdDIucHVzaCh7ZnJvbTogcmFuZ2UuZnJvbSArIGRpZmYsIHRv
OiByYW5nZS50byArIGRpZmYsCi0gICAgICAgICAgICAgICAgICAgICAgICBkb21TdGFydDogcmFu
Z2UuZG9tU3RhcnR9KTsKLSAgICAgICAgZWxzZSBpZiAoY2hhbmdlLnRvIDw9IHJhbmdlLmZyb20g
fHwgY2hhbmdlLmZyb20gPj0gcmFuZ2UudG8pCisgICAgICAgIGlmIChjaGFuZ2UudG8gPD0gcmFu
Z2UuZnJvbSAmJiBjaGFuZ2UuZGlmZikgeworICAgICAgICAgIGludGFjdDIucHVzaCh7ZnJvbTog
cmFuZ2UuZnJvbSArIGRpZmYsIHRvOiByYW5nZS50byArIGRpZmZ9KTsKKyAgICAgICAgfSBlbHNl
IGlmIChjaGFuZ2UudG8gPD0gcmFuZ2UuZnJvbSB8fCBjaGFuZ2UuZnJvbSA+PSByYW5nZS50bykg
ewogICAgICAgICAgIGludGFjdDIucHVzaChyYW5nZSk7Ci0gICAgICAgIGVsc2UgeworICAgICAg
ICB9IGVsc2UgewogICAgICAgICAgIGlmIChjaGFuZ2UuZnJvbSA+IHJhbmdlLmZyb20pCi0gICAg
ICAgICAgICBpbnRhY3QyLnB1c2goe2Zyb206IHJhbmdlLmZyb20sIHRvOiBjaGFuZ2UuZnJvbSwg
ZG9tU3RhcnQ6IHJhbmdlLmRvbVN0YXJ0fSk7CisgICAgICAgICAgICBpbnRhY3QyLnB1c2goe2Zy
b206IHJhbmdlLmZyb20sIHRvOiBjaGFuZ2UuZnJvbX0pOwogICAgICAgICAgIGlmIChjaGFuZ2Uu
dG8gPCByYW5nZS50bykKLSAgICAgICAgICAgIGludGFjdDIucHVzaCh7ZnJvbTogY2hhbmdlLnRv
ICsgZGlmZiwgdG86IHJhbmdlLnRvICsgZGlmZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ZG9tU3RhcnQ6IHJhbmdlLmRvbVN0YXJ0ICsgKGNoYW5nZS50byAtIHJhbmdlLmZyb20pfSk7Cisg
ICAgICAgICAgICBpbnRhY3QyLnB1c2goe2Zyb206IGNoYW5nZS50byArIGRpZmYsIHRvOiByYW5n
ZS50byArIGRpZmZ9KTsKICAgICAgICAgfQogICAgICAgfQogICAgICAgaW50YWN0ID0gaW50YWN0
MjsKQEAgLTUyNSw1MCArNTM2LDUwIEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkg
ewogICB9CiAKICAgZnVuY3Rpb24gcGF0Y2hEaXNwbGF5KGNtLCBmcm9tLCB0bywgaW50YWN0LCB1
cGRhdGVOdW1iZXJzRnJvbSkgewotICAgIGZ1bmN0aW9uIGtpbGxOb2RlKG5vZGUpIHsKLSAgICAg
IHZhciB0bXAgPSBub2RlLm5leHRTaWJsaW5nOwotICAgICAgbm9kZS5wYXJlbnROb2RlLnJlbW92
ZUNoaWxkKG5vZGUpOwotICAgICAgcmV0dXJuIHRtcDsKLSAgICB9CiAgICAgdmFyIGRpbXMgPSBn
ZXREaW1lbnNpb25zKGNtKTsKICAgICB2YXIgZGlzcGxheSA9IGNtLmRpc3BsYXksIGxpbmVOdW1i
ZXJzID0gY20ub3B0aW9ucy5saW5lTnVtYmVyczsKLSAgICAvLyBUaGUgZmlyc3QgcGFzcyByZW1v
dmVzIHRoZSBET00gbm9kZXMgdGhhdCBhcmVuJ3QgaW50YWN0LgotICAgIGlmICghaW50YWN0Lmxl
bmd0aCkgewotICAgICAgLy8gb2xkIElFIGRvZXMgYmFkIHRoaW5ncyB0byBub2RlcyB3aGVuIC5p
bm5lckhUTUwgPSAiIiBpcyB1c2VkIG9uIGEgcGFyZW50Ci0gICAgICAvLyB3ZSBzdGlsbCBuZWVk
IHdpZGdldHMgYW5kIG1hcmtlcnMgaW50YWN0IHRvIGFkZCBiYWNrIHRvIHRoZSBuZXcgY29udGVu
dCBsYXRlcgotICAgICAgaWYgKGllX2x0MTApIGZvciAodmFyIGxkID0gZGlzcGxheS5saW5lRGl2
LCB0bXAgPSBsZC5maXJzdENoaWxkOyB0bXA7IHRtcCA9IGxkLmZpcnN0Q2hpbGQpIGxkLnJlbW92
ZUNoaWxkKHRtcCk7Ci0gICAgICBlbHNlIHJlbW92ZUNoaWxkcmVuKGRpc3BsYXkubGluZURpdik7
Ci0gICAgfSBlbHNlIHsKLSAgICAgIHZhciBkb21Qb3MgPSAwLCBjdXJOb2RlID0gZGlzcGxheS5s
aW5lRGl2LmZpcnN0Q2hpbGQsIG47Ci0gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGludGFjdC5s
ZW5ndGg7ICsraSkgewotICAgICAgICB2YXIgY3VyID0gaW50YWN0W2ldOwotICAgICAgICB3aGls
ZSAoY3VyLmRvbVN0YXJ0ID4gZG9tUG9zKSB7Y3VyTm9kZSA9IGtpbGxOb2RlKGN1ck5vZGUpOyBk
b21Qb3MrKzt9Ci0gICAgICAgIGZvciAodmFyIGogPSBjdXIuZnJvbSwgZSA9IGN1ci50bzsgaiA8
IGU7ICsraikgewotICAgICAgICAgIGlmIChsaW5lTnVtYmVycyAmJiB1cGRhdGVOdW1iZXJzRnJv
bSA8PSBqICYmIGN1ck5vZGUuZmlyc3RDaGlsZCkKLSAgICAgICAgICAgIHNldFRleHRDb250ZW50
KGN1ck5vZGUuZmlyc3RDaGlsZC5maXJzdENoaWxkLCBsaW5lTnVtYmVyRm9yKGNtLm9wdGlvbnMs
IGopKTsKLSAgICAgICAgICBjdXJOb2RlID0gY3VyTm9kZS5uZXh0U2libGluZzsgZG9tUG9zKys7
Ci0gICAgICAgIH0KKyAgICAvLyBJRSBkb2VzIGJhZCB0aGluZ3MgdG8gbm9kZXMgd2hlbiAuaW5u
ZXJIVE1MID0gIiIgaXMgdXNlZCBvbiBhIHBhcmVudAorICAgIC8vIHdlIHN0aWxsIG5lZWQgd2lk
Z2V0cyBhbmQgbWFya2VycyBpbnRhY3QgdG8gYWRkIGJhY2sgdG8gdGhlIG5ldyBjb250ZW50IGxh
dGVyCisgICAgaWYgKCFpbnRhY3QubGVuZ3RoICYmICFpZSAmJiAoIXdlYmtpdCB8fCAhY20uZGlz
cGxheS5jdXJyZW50V2hlZWxUYXJnZXQpKQorICAgICAgcmVtb3ZlQ2hpbGRyZW4oZGlzcGxheS5s
aW5lRGl2KTsKKyAgICB2YXIgY29udGFpbmVyID0gZGlzcGxheS5saW5lRGl2LCBjdXIgPSBjb250
YWluZXIuZmlyc3RDaGlsZDsKKworICAgIGZ1bmN0aW9uIHJtKG5vZGUpIHsKKyAgICAgIHZhciBu
ZXh0ID0gbm9kZS5uZXh0U2libGluZzsKKyAgICAgIGlmICh3ZWJraXQgJiYgbWFjICYmIGNtLmRp
c3BsYXkuY3VycmVudFdoZWVsVGFyZ2V0ID09IG5vZGUpIHsKKyAgICAgICAgbm9kZS5zdHlsZS5k
aXNwbGF5ID0gIm5vbmUiOworICAgICAgICBub2RlLmxpbmVPYmogPSBudWxsOworICAgICAgfSBl
bHNlIHsKKyAgICAgICAgY29udGFpbmVyLnJlbW92ZUNoaWxkKG5vZGUpOwogICAgICAgfQotICAg
ICAgd2hpbGUgKGN1ck5vZGUpIGN1ck5vZGUgPSBraWxsTm9kZShjdXJOb2RlKTsKKyAgICAgIHJl
dHVybiBuZXh0OwogICAgIH0KLSAgICAvLyBUaGlzIHBhc3MgZmlsbHMgaW4gdGhlIGxpbmVzIHRo
YXQgYWN0dWFsbHkgY2hhbmdlZC4KLSAgICB2YXIgbmV4dEludGFjdCA9IGludGFjdC5zaGlmdCgp
LCBjdXJOb2RlID0gZGlzcGxheS5saW5lRGl2LmZpcnN0Q2hpbGQ7Ci0gICAgdmFyIGogPSBmcm9t
OwogCisgICAgdmFyIG5leHRJbnRhY3QgPSBpbnRhY3Quc2hpZnQoKSwgbGluZU5vID0gZnJvbTsK
ICAgICBjbS52aWV3LmRvYy5pdGVyKGZyb20sIHRvLCBmdW5jdGlvbihsaW5lKSB7Ci0gICAgICBp
ZiAobmV4dEludGFjdCAmJiBuZXh0SW50YWN0LnRvID09IGopIG5leHRJbnRhY3QgPSBpbnRhY3Qu
c2hpZnQoKTsKLSAgICAgIGlmICghbmV4dEludGFjdCB8fCBuZXh0SW50YWN0LmZyb20gPiBqKQot
ICAgICAgICBkaXNwbGF5LmxpbmVEaXYuaW5zZXJ0QmVmb3JlKGJ1aWxkTGluZUVsZW1lbnQoY20s
IGxpbmUsIGosIGRpbXMpLCBjdXJOb2RlKTsKLSAgICAgIGVsc2UKLSAgICAgICAgY3VyTm9kZSA9
IGN1ck5vZGUubmV4dFNpYmxpbmc7Ci0gICAgICArK2o7CisgICAgICBpZiAobmV4dEludGFjdCAm
JiBuZXh0SW50YWN0LnRvID09IGxpbmVObykgbmV4dEludGFjdCA9IGludGFjdC5zaGlmdCgpOwor
ICAgICAgaWYgKGxpbmVJc0hpZGRlbihsaW5lKSkgeworICAgICAgICBpZiAobGluZS5oZWlnaHQg
IT0gMCkgdXBkYXRlTGluZUhlaWdodChsaW5lLCAwKTsKKyAgICAgIH0gZWxzZSBpZiAobmV4dElu
dGFjdCAmJiBuZXh0SW50YWN0LmZyb20gPD0gbGluZU5vICYmIG5leHRJbnRhY3QudG8gPiBsaW5l
Tm8pIHsKKyAgICAgICAgLy8gVGhpcyBsaW5lIGlzIGludGFjdC4gU2tpcCB0byB0aGUgYWN0dWFs
IG5vZGUuIFVwZGF0ZSBpdHMKKyAgICAgICAgLy8gbGluZSBudW1iZXIgaWYgbmVlZGVkLgorICAg
ICAgICB3aGlsZSAoY3VyLmxpbmVPYmogIT0gbGluZSkgY3VyID0gcm0oY3VyKTsKKyAgICAgICAg
aWYgKGxpbmVOdW1iZXJzICYmIHVwZGF0ZU51bWJlcnNGcm9tIDw9IGxpbmVObyAmJiBjdXIubGlu
ZU51bWJlcikKKyAgICAgICAgICBzZXRUZXh0Q29udGVudChjdXIubGluZU51bWJlciwgbGluZU51
bWJlckZvcihjbS5vcHRpb25zLCBsaW5lTm8pKTsKKyAgICAgICAgY3VyID0gY3VyLm5leHRTaWJs
aW5nOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gVGhpcyBsaW5lIG5lZWRzIHRvIGJlIGdl
bmVyYXRlZC4KKyAgICAgICAgdmFyIGxpbmVOb2RlID0gYnVpbGRMaW5lRWxlbWVudChjbSwgbGlu
ZSwgbGluZU5vLCBkaW1zKTsKKyAgICAgICAgY29udGFpbmVyLmluc2VydEJlZm9yZShsaW5lTm9k
ZSwgY3VyKTsKKyAgICAgICAgbGluZU5vZGUubGluZU9iaiA9IGxpbmU7CisgICAgICB9CisgICAg
ICArK2xpbmVObzsKICAgICB9KTsKKyAgICB3aGlsZSAoY3VyKSBjdXIgPSBybShjdXIpOwogICB9
CiAKICAgZnVuY3Rpb24gYnVpbGRMaW5lRWxlbWVudChjbSwgbGluZSwgbGluZU5vLCBkaW1zKSB7
Ci0gICAgaWYgKGxpbmUuaGVpZ2h0ID09IDApIHJldHVybiBlbHQoImRpdiIpOwotCi0gICAgdmFy
IGxpbmVFbGVtZW50ID0gbGluZS5oZWlnaHQgPT0gMCA/IGVsdCgiZGl2IikgOiBsaW5lQ29udGVu
dChjbSwgbGluZSk7CisgICAgdmFyIGxpbmVFbGVtZW50ID0gbGluZUNvbnRlbnQoY20sIGxpbmUp
OwogICAgIHZhciBtYXJrZXJzID0gbGluZS5ndXR0ZXJNYXJrZXJzLCBkaXNwbGF5ID0gY20uZGlz
cGxheTsKIAogICAgIGlmICghY20ub3B0aW9ucy5saW5lTnVtYmVycyAmJiAhbWFya2VycyAmJiAh
bGluZS5iZ0NsYXNzICYmICFsaW5lLndyYXBDbGFzcyAmJgpAQCAtNTgzLDE4ICs1OTQsMTggQEAg
d2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgICB2YXIgZ3V0dGVyV3JhcCA9
IHdyYXAuYXBwZW5kQ2hpbGQoZWx0KCJkaXYiLCBudWxsLCBudWxsLCAicG9zaXRpb246IGFic29s
dXRlOyBsZWZ0OiAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZGltcy5maXhlZFBvcyArICJweCIpKTsKICAgICAgIHdyYXAuYWxpZ25hYmxlID0gW2d1dHRl
cldyYXBdOwotICAgICAgaWYgKGNtLm9wdGlvbnMubGluZU51bWJlcnMpCi0gICAgICAgIGd1dHRl
cldyYXAuYXBwZW5kQ2hpbGQoZWx0KCJkaXYiLCBsaW5lTnVtYmVyRm9yKGNtLm9wdGlvbnMsIGxp
bmVObyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDb2RlTWlycm9yLWxp
bmVudW1iZXIgQ29kZU1pcnJvci1ndXR0ZXItZWx0IiwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgImxlZnQ6ICIgKyBkaW1zLmd1dHRlckxlZnRbIkNvZGVNaXJyb3ItbGluZW51
bWJlcnMiXSArICJweDsgd2lkdGg6ICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKyBkaXNwbGF5LmxpbmVOdW1Jbm5lcldpZHRoICsgInB4IikpOworICAgICAgaWYgKGNtLm9w
dGlvbnMubGluZU51bWJlcnMgJiYgKCFtYXJrZXJzIHx8ICFtYXJrZXJzWyJDb2RlTWlycm9yLWxp
bmVudW1iZXJzIl0pKQorICAgICAgICB3cmFwLmxpbmVOdW1iZXIgPSBndXR0ZXJXcmFwLmFwcGVu
ZENoaWxkKAorICAgICAgICAgIGVsdCgiZGl2IiwgbGluZU51bWJlckZvcihjbS5vcHRpb25zLCBs
aW5lTm8pLAorICAgICAgICAgICAgICAiQ29kZU1pcnJvci1saW5lbnVtYmVyIENvZGVNaXJyb3It
Z3V0dGVyLWVsdCIsCisgICAgICAgICAgICAgICJsZWZ0OiAiICsgZGltcy5ndXR0ZXJMZWZ0WyJD
b2RlTWlycm9yLWxpbmVudW1iZXJzIl0gKyAicHg7IHdpZHRoOiAiCisgICAgICAgICAgICAgICsg
ZGlzcGxheS5saW5lTnVtSW5uZXJXaWR0aCArICJweCIpKTsKICAgICAgIGlmIChtYXJrZXJzKQog
ICAgICAgICBmb3IgKHZhciBrID0gMDsgayA8IGNtLm9wdGlvbnMuZ3V0dGVycy5sZW5ndGg7ICsr
aykgewogICAgICAgICAgIHZhciBpZCA9IGNtLm9wdGlvbnMuZ3V0dGVyc1trXSwgZm91bmQgPSBt
YXJrZXJzLmhhc093blByb3BlcnR5KGlkKSAmJiBtYXJrZXJzW2lkXTsKLSAgICAgICAgICBpZiAo
Zm91bmQpIHsKKyAgICAgICAgICBpZiAoZm91bmQpCiAgICAgICAgICAgICBndXR0ZXJXcmFwLmFw
cGVuZENoaWxkKGVsdCgiZGl2IiwgW2ZvdW5kXSwgIkNvZGVNaXJyb3ItZ3V0dGVyLWVsdCIsICJs
ZWZ0OiAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpbXMuZ3V0
dGVyTGVmdFtpZF0gKyAicHg7IHdpZHRoOiAiICsgZGltcy5ndXR0ZXJXaWR0aFtpZF0gKyAicHgi
KSk7Ci0gICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogICAgIC8vIEtsdWRnZSB0byBtYWtl
IHN1cmUgdGhlIHN0eWxlZCBlbGVtZW50IGxpZXMgYmVoaW5kIHRoZSBzZWxlY3Rpb24gKGJ5IHot
aW5kZXgpCkBAIC02MzIsMTYgKzY0MywyMCBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlv
bigpIHsKIAogICAvLyBTRUxFQ1RJT04gLyBDVVJTT1IKIAotICBmdW5jdGlvbiBzZWxIZWFkKHZp
ZXcpIHsKLSAgICByZXR1cm4gdmlldy5zZWwuaW52ZXJ0ZWQgPyB2aWV3LnNlbC5mcm9tIDogdmll
dy5zZWwudG87Ci0gIH0KLQogICBmdW5jdGlvbiB1cGRhdGVTZWxlY3Rpb24oY20pIHsKLSAgICB2
YXIgaGVhZFBvcyA9IHBvc0VxKGNtLnZpZXcuc2VsLmZyb20sIGNtLnZpZXcuc2VsLnRvKSA/Ci0g
ICAgICB1cGRhdGVTZWxlY3Rpb25DdXJzb3IoY20pIDoKLSAgICAgIHVwZGF0ZVNlbGVjdGlvblJh
bmdlKGNtKTsKICAgICB2YXIgZGlzcGxheSA9IGNtLmRpc3BsYXk7CisgICAgdmFyIGNvbGxhcHNl
ZCA9IHBvc0VxKGNtLnZpZXcuc2VsLmZyb20sIGNtLnZpZXcuc2VsLnRvKTsKKyAgICBpZiAoY29s
bGFwc2VkIHx8IGNtLm9wdGlvbnMuc2hvd0N1cnNvcldoZW5TZWxlY3RpbmcpCisgICAgICB1cGRh
dGVTZWxlY3Rpb25DdXJzb3IoY20pOworICAgIGVsc2UKKyAgICAgIGRpc3BsYXkuY3Vyc29yLnN0
eWxlLmRpc3BsYXkgPSBkaXNwbGF5Lm90aGVyQ3Vyc29yLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7
CisgICAgaWYgKCFjb2xsYXBzZWQpCisgICAgICB1cGRhdGVTZWxlY3Rpb25SYW5nZShjbSk7Cisg
ICAgZWxzZQorICAgICAgZGlzcGxheS5zZWxlY3Rpb25EaXYuc3R5bGUuZGlzcGxheSA9ICJub25l
IjsKKwogICAgIC8vIE1vdmUgdGhlIGhpZGRlbiB0ZXh0YXJlYSBuZWFyIHRoZSBjdXJzb3IgdG8g
cHJldmVudCBzY3JvbGxpbmcgYXJ0aWZhY3RzCisgICAgdmFyIGhlYWRQb3MgPSBjdXJzb3JDb29y
ZHMoY20sIGNtLnZpZXcuc2VsLmhlYWQsICJkaXYiKTsKICAgICB2YXIgd3JhcE9mZiA9IGRpc3Bs
YXkud3JhcHBlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSwgbGluZU9mZiA9IGRpc3BsYXkubGlu
ZURpdi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICAgICBkaXNwbGF5LmlucHV0RGl2LnN0eWxl
LnRvcCA9IE1hdGgubWF4KDAsIE1hdGgubWluKGRpc3BsYXkud3JhcHBlci5jbGllbnRIZWlnaHQg
LSAxMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGhlYWRQb3MudG9wICsgbGluZU9mZi50b3AgLSB3cmFwT2ZmLnRvcCkpICsgInB4IjsKQEAg
LTY1MSwxMiArNjY2LDExIEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogCiAg
IC8vIE5vIHNlbGVjdGlvbiwgcGxhaW4gY3Vyc29yCiAgIGZ1bmN0aW9uIHVwZGF0ZVNlbGVjdGlv
bkN1cnNvcihjbSkgewotICAgIHZhciBkaXNwbGF5ID0gY20uZGlzcGxheSwgcG9zID0gY3Vyc29y
Q29vcmRzKGNtLCBjbS52aWV3LnNlbC5mcm9tLCAiZGl2Iik7CisgICAgdmFyIGRpc3BsYXkgPSBj
bS5kaXNwbGF5LCBwb3MgPSBjdXJzb3JDb29yZHMoY20sIGNtLnZpZXcuc2VsLmhlYWQsICJkaXYi
KTsKICAgICBkaXNwbGF5LmN1cnNvci5zdHlsZS5sZWZ0ID0gcG9zLmxlZnQgKyAicHgiOwogICAg
IGRpc3BsYXkuY3Vyc29yLnN0eWxlLnRvcCA9IHBvcy50b3AgKyAicHgiOwogICAgIGRpc3BsYXku
Y3Vyc29yLnN0eWxlLmhlaWdodCA9IE1hdGgubWF4KDAsIHBvcy5ib3R0b20gLSBwb3MudG9wKSAq
IGNtLm9wdGlvbnMuY3Vyc29ySGVpZ2h0ICsgInB4IjsKICAgICBkaXNwbGF5LmN1cnNvci5zdHls
ZS5kaXNwbGF5ID0gIiI7Ci0gICAgZGlzcGxheS5zZWxlY3Rpb25EaXYuc3R5bGUuZGlzcGxheSA9
ICJub25lIjsKIAogICAgIGlmIChwb3Mub3RoZXIpIHsKICAgICAgIGRpc3BsYXkub3RoZXJDdXJz
b3Iuc3R5bGUuZGlzcGxheSA9ICIiOwpAQCAtNjY0LDcgKzY3OCw2IEBAIHdpbmRvdy5Db2RlTWly
cm9yID0gKGZ1bmN0aW9uKCkgewogICAgICAgZGlzcGxheS5vdGhlckN1cnNvci5zdHlsZS50b3Ag
PSBwb3Mub3RoZXIudG9wICsgInB4IjsKICAgICAgIGRpc3BsYXkub3RoZXJDdXJzb3Iuc3R5bGUu
aGVpZ2h0ID0gKHBvcy5vdGhlci5ib3R0b20gLSBwb3Mub3RoZXIudG9wKSAqIC44NSArICJweCI7
CiAgICAgfSBlbHNlIHsgZGlzcGxheS5vdGhlckN1cnNvci5zdHlsZS5kaXNwbGF5ID0gIm5vbmUi
OyB9Ci0gICAgcmV0dXJuIHBvczsKICAgfQogCiAgIC8vIEhpZ2hsaWdodCBzZWxlY3Rpb24KQEAg
LTc0NCw5ICs3NTcsNyBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICB9
CiAKICAgICByZW1vdmVDaGlsZHJlbkFuZEFkZChkaXNwbGF5LnNlbGVjdGlvbkRpdiwgZnJhZ21l
bnQpOwotICAgIGRpc3BsYXkuY3Vyc29yLnN0eWxlLmRpc3BsYXkgPSBkaXNwbGF5Lm90aGVyQ3Vy
c29yLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7CiAgICAgZGlzcGxheS5zZWxlY3Rpb25EaXYuc3R5
bGUuZGlzcGxheSA9ICIiOwotICAgIHJldHVybiBjdXJzb3JDb29yZHMoY20sIHNlbEhlYWQoY20u
dmlldyksICJkaXYiKTsKICAgfQogCiAgIC8vIEN1cnNvci1ibGlua2luZwpAQCAtNzU2LDYgKzc2
Nyw3IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgIHZhciBvbiA9IHRy
dWU7CiAgICAgZGlzcGxheS5jdXJzb3Iuc3R5bGUudmlzaWJpbGl0eSA9IGRpc3BsYXkub3RoZXJD
dXJzb3Iuc3R5bGUudmlzaWJpbGl0eSA9ICIiOwogICAgIGRpc3BsYXkuYmxpbmtlciA9IHNldElu
dGVydmFsKGZ1bmN0aW9uKCkgeworICAgICAgaWYgKCFkaXNwbGF5LmN1cnNvci5vZmZzZXRIZWln
aHQpIHJldHVybjsKICAgICAgIGRpc3BsYXkuY3Vyc29yLnN0eWxlLnZpc2liaWxpdHkgPSBkaXNw
bGF5Lm90aGVyQ3Vyc29yLnN0eWxlLnZpc2liaWxpdHkgPSAob24gPSAhb24pID8gIiIgOiAiaGlk
ZGVuIjsKICAgICB9LCBjbS5vcHRpb25zLmN1cnNvckJsaW5rUmF0ZSk7CiAgIH0KQEAgLTc2Myw3
ICs3NzUsNyBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgLy8gSElHSExJ
R0hUIFdPUktFUgogCiAgIGZ1bmN0aW9uIHN0YXJ0V29ya2VyKGNtLCB0aW1lKSB7Ci0gICAgaWYg
KGNtLnZpZXcuZnJvbnRpZXIgPCBjbS5kaXNwbGF5LnNob3dpbmdUbykKKyAgICBpZiAoY20udmll
dy5tb2RlLnN0YXJ0U3RhdGUgJiYgY20udmlldy5mcm9udGllciA8IGNtLmRpc3BsYXkuc2hvd2lu
Z1RvKQogICAgICAgY20udmlldy5oaWdobGlnaHQuc2V0KHRpbWUsIGJpbmQoaGlnaGxpZ2h0V29y
a2VyLCBjbSkpOwogICB9CiAKQEAgLTc3NSw3ICs3ODcsMTIgQEAgd2luZG93LkNvZGVNaXJyb3Ig
PSAoZnVuY3Rpb24oKSB7CiAgICAgdmFyIGNoYW5nZWQgPSBbXSwgcHJldkNoYW5nZTsKICAgICBk
b2MuaXRlcih2aWV3LmZyb250aWVyLCBNYXRoLm1pbihkb2Muc2l6ZSwgY20uZGlzcGxheS5zaG93
aW5nVG8gKyA1MDApLCBmdW5jdGlvbihsaW5lKSB7CiAgICAgICBpZiAodmlldy5mcm9udGllciA+
PSBjbS5kaXNwbGF5LnNob3dpbmdGcm9tKSB7IC8vIFZpc2libGUKLSAgICAgICAgaWYgKGhpZ2hs
aWdodExpbmUoY20sIGxpbmUsIHN0YXRlKSAmJiB2aWV3LmZyb250aWVyID49IGNtLmRpc3BsYXku
c2hvd2luZ0Zyb20pIHsKKyAgICAgICAgdmFyIG9sZFN0eWxlcyA9IGxpbmUuc3R5bGVzOworICAg
ICAgICBsaW5lLnN0eWxlcyA9IGhpZ2hsaWdodExpbmUoY20sIGxpbmUsIHN0YXRlKTsKKyAgICAg
ICAgdmFyIGlzY2hhbmdlID0gIW9sZFN0eWxlcyB8fCBvbGRTdHlsZXMubGVuZ3RoICE9IGxpbmUu
c3R5bGVzLmxlbmd0aDsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7ICFpc2NoYW5nZSAmJiBpIDwg
b2xkU3R5bGVzLmxlbmd0aDsgKytpKQorICAgICAgICAgIGlzY2hhbmdlID0gb2xkU3R5bGVzW2ld
ICE9IGxpbmUuc3R5bGVzW2ldOworICAgICAgICBpZiAoaXNjaGFuZ2UpIHsKICAgICAgICAgICBp
ZiAocHJldkNoYW5nZSAmJiBwcmV2Q2hhbmdlLmVuZCA9PSB2aWV3LmZyb250aWVyKSBwcmV2Q2hh
bmdlLmVuZCsrOwogICAgICAgICAgIGVsc2UgY2hhbmdlZC5wdXNoKHByZXZDaGFuZ2UgPSB7c3Rh
cnQ6IHZpZXcuZnJvbnRpZXIsIGVuZDogdmlldy5mcm9udGllciArIDF9KTsKICAgICAgICAgfQpA
QCAtODE5LDYgKzgzNiw3IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogCiAg
IGZ1bmN0aW9uIGdldFN0YXRlQmVmb3JlKGNtLCBuKSB7CiAgICAgdmFyIHZpZXcgPSBjbS52aWV3
OworICAgIGlmICghdmlldy5tb2RlLnN0YXJ0U3RhdGUpIHJldHVybiB0cnVlOwogICAgIHZhciBw
b3MgPSBmaW5kU3RhcnRMaW5lKGNtLCBuKSwgc3RhdGUgPSBwb3MgJiYgZ2V0TGluZSh2aWV3LmRv
YywgcG9zLTEpLnN0YXRlQWZ0ZXI7CiAgICAgaWYgKCFzdGF0ZSkgc3RhdGUgPSBzdGFydFN0YXRl
KHZpZXcubW9kZSk7CiAgICAgZWxzZSBzdGF0ZSA9IGNvcHlTdGF0ZSh2aWV3Lm1vZGUsIHN0YXRl
KTsKQEAgLTg0MCw4ICs4NTgsOSBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsK
ICAgfQogCiAgIGZ1bmN0aW9uIG1lYXN1cmVDaGFyKGNtLCBsaW5lLCBjaCwgZGF0YSkgewotICAg
IHZhciBkYXRhID0gZGF0YSB8fCBtZWFzdXJlTGluZShjbSwgbGluZSk7Ci0gICAgdmFyIGRpciA9
IC0xLCBsZW4gPSBsaW5lLnRleHQubGVuZ3RoOworICAgIHZhciBkaXIgPSAtMTsKKyAgICBkYXRh
ID0gZGF0YSB8fCBtZWFzdXJlTGluZShjbSwgbGluZSk7CisgICAgCiAgICAgZm9yICh2YXIgcG9z
ID0gY2g7OyBwb3MgKz0gZGlyKSB7CiAgICAgICB2YXIgciA9IGRhdGFbcG9zXTsKICAgICAgIGlm
IChyKSBicmVhazsKQEAgLTg2Niw3ICs4ODUsNyBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5j
dGlvbigpIHsKICAgICAvLyBTdG9yZSByZXN1bHQgaW4gdGhlIGNhY2hlCiAgICAgdmFyIG1lbW8g
PSB7dGV4dDogbGluZS50ZXh0LCB3aWR0aDogZGlzcGxheS5zY3JvbGxlci5jbGllbnRXaWR0aCwK
ICAgICAgICAgICAgICAgICBtYXJrZWRTcGFuczogbGluZS5tYXJrZWRTcGFucywgbWVhc3VyZTog
bWVhc3VyZX07Ci0gICAgaWYgKGNhY2hlLmxlbmd0aCA9PSAxNikgY2FjaGVbKytjYWNoZS5wb3Mg
JSAxNl0gPSBtZW1vOworICAgIGlmIChjYWNoZS5sZW5ndGggPT0gMTYpIGNhY2hlWysrZGlzcGxh
eS5tZWFzdXJlTGluZUNhY2hlUG9zICUgMTZdID0gbWVtbzsKICAgICBlbHNlIGNhY2hlLnB1c2go
bWVtbyk7CiAgICAgcmV0dXJuIG1lYXN1cmU7CiAgIH0KQEAgLTg3NCwxMiArODkzLDM4IEBAIHdp
bmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICBmdW5jdGlvbiBtZWFzdXJlTGluZUlu
bmVyKGNtLCBsaW5lKSB7CiAgICAgdmFyIGRpc3BsYXkgPSBjbS5kaXNwbGF5LCBtZWFzdXJlID0g
ZW1wdHlBcnJheShsaW5lLnRleHQubGVuZ3RoKTsKICAgICB2YXIgcHJlID0gbGluZUNvbnRlbnQo
Y20sIGxpbmUsIG1lYXN1cmUpOworCisgICAgLy8gSUUgZG9lcyBub3QgY2FjaGUgZWxlbWVudCBw
b3NpdGlvbnMgb2YgaW5saW5lIGVsZW1lbnRzIGJldHdlZW4KKyAgICAvLyBjYWxscyB0byBnZXRC
b3VuZGluZ0NsaWVudFJlY3QuIFRoaXMgbWFrZXMgdGhlIGxvb3AgYmVsb3csCisgICAgLy8gd2hp
Y2ggZ2F0aGVycyB0aGUgcG9zaXRpb25zIG9mIGFsbCB0aGUgY2hhcmFjdGVycyBvbiB0aGUgbGlu
ZSwKKyAgICAvLyBkbyBhbiBhbW91bnQgb2YgbGF5b3V0IHdvcmsgcXVhZHJhdGljIHRvIHRoZSBu
dW1iZXIgb2YKKyAgICAvLyBjaGFyYWN0ZXJzLiBXaGVuIGxpbmUgd3JhcHBpbmcgaXMgb2ZmLCB3
ZSB0cnkgdG8gaW1wcm92ZSB0aGluZ3MKKyAgICAvLyBieSBmaXJzdCBzdWJkaXZpZGluZyB0aGUg
bGluZSBpbnRvIGEgYnVuY2ggb2YgaW5saW5lIGJsb2Nrcywgc28KKyAgICAvLyB0aGF0IElFIGNh
biByZXVzZSBtb3N0IG9mIHRoZSBsYXlvdXQgaW5mb3JtYXRpb24gZnJvbSBjYWNoZXMKKyAgICAv
LyBmb3IgdGhvc2UgYmxvY2tzLiBUaGlzIGRvZXMgaW50ZXJmZXJlIHdpdGggbGluZSB3cmFwcGlu
Zywgc28gaXQKKyAgICAvLyBkb2Vzbid0IHdvcmsgd2hlbiB3cmFwcGluZyBpcyBvbiwgYnV0IGlu
IHRoYXQgY2FzZSB0aGUKKyAgICAvLyBzaXR1YXRpb24gaXMgc2xpZ2h0bHkgYmV0dGVyLCBzaW5j
ZSBJRSBkb2VzIGNhY2hlIGxpbmUtd3JhcHBpbmcKKyAgICAvLyBpbmZvcm1hdGlvbiBhbmQgb25s
eSByZWNvbXB1dGVzIHBlci1saW5lLgorICAgIGlmIChpZSAmJiAhaWVfbHQ4ICYmICFjbS5vcHRp
b25zLmxpbmVXcmFwcGluZyAmJiBwcmUuY2hpbGROb2Rlcy5sZW5ndGggPiAxMDApIHsKKyAgICAg
IHZhciBmcmFnbWVudCA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTsKKyAgICAg
IHZhciBjaHVuayA9IDEwLCBuID0gcHJlLmNoaWxkTm9kZXMubGVuZ3RoOworICAgICAgZm9yICh2
YXIgaSA9IDAsIGNodW5rcyA9IE1hdGguY2VpbChuIC8gY2h1bmspOyBpIDwgY2h1bmtzOyArK2kp
IHsKKyAgICAgICAgdmFyIHdyYXAgPSBlbHQoImRpdiIsIG51bGwsIG51bGwsICJkaXNwbGF5OiBp
bmxpbmUtYmxvY2siKTsKKyAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBjaHVuayAmJiBuOyAr
K2opIHsKKyAgICAgICAgICB3cmFwLmFwcGVuZENoaWxkKHByZS5maXJzdENoaWxkKTsKKyAgICAg
ICAgICAtLW47CisgICAgICAgIH0KKyAgICAgICAgZnJhZ21lbnQuYXBwZW5kQ2hpbGQod3JhcCk7
CisgICAgICB9CisgICAgICBwcmUuYXBwZW5kQ2hpbGQoZnJhZ21lbnQpOworICAgIH0KKwogICAg
IHJlbW92ZUNoaWxkcmVuQW5kQWRkKGRpc3BsYXkubWVhc3VyZSwgcHJlKTsKIAogICAgIHZhciBv
dXRlciA9IGRpc3BsYXkubGluZURpdi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICAgICB2YXIg
dnJhbmdlcyA9IFtdLCBkYXRhID0gZW1wdHlBcnJheShsaW5lLnRleHQubGVuZ3RoKSwgbWF4Qm90
ID0gcHJlLm9mZnNldEhlaWdodDsKLSAgICBmb3IgKHZhciBpID0gMCwgZWx0OyBpIDwgbWVhc3Vy
ZS5sZW5ndGg7ICsraSkgaWYgKGVsdCA9IG1lYXN1cmVbaV0pIHsKLSAgICAgIHZhciBzaXplID0g
bWVhc3VyZVtpXS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKKyAgICBmb3IgKHZhciBpID0gMCwg
Y3VyOyBpIDwgbWVhc3VyZS5sZW5ndGg7ICsraSkgaWYgKGN1ciA9IG1lYXN1cmVbaV0pIHsKKyAg
ICAgIHZhciBzaXplID0gY3VyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgICAgdmFyIHRv
cCA9IE1hdGgubWF4KDAsIHNpemUudG9wIC0gb3V0ZXIudG9wKSwgYm90ID0gTWF0aC5taW4oc2l6
ZS5ib3R0b20gLSBvdXRlci50b3AsIG1heEJvdCk7CiAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8
IHZyYW5nZXMubGVuZ3RoOyBqICs9IDIpIHsKICAgICAgICAgdmFyIHJ0b3AgPSB2cmFuZ2VzW2pd
LCByYm90ID0gdnJhbmdlc1tqKzFdOwpAQCAtODk1LDE1ICs5NDAsMjEgQEAgd2luZG93LkNvZGVN
aXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgICBpZiAoaiA9PSB2cmFuZ2VzLmxlbmd0aCkgdnJh
bmdlcy5wdXNoKHRvcCwgYm90KTsKICAgICAgIGRhdGFbaV0gPSB7bGVmdDogc2l6ZS5sZWZ0IC0g
b3V0ZXIubGVmdCwgcmlnaHQ6IHNpemUucmlnaHQgLSBvdXRlci5sZWZ0LCB0b3A6IGp9OwogICAg
IH0KLSAgICBmb3IgKHZhciBpID0gMCwgZWx0OyBpIDwgZGF0YS5sZW5ndGg7ICsraSkgaWYgKGVs
dCA9IGRhdGFbaV0pIHsKLSAgICAgIHZhciB2ciA9IGVsdC50b3A7Ci0gICAgICBlbHQudG9wID0g
dnJhbmdlc1t2cl07IGVsdC5ib3R0b20gPSB2cmFuZ2VzW3ZyKzFdOworICAgIGZvciAodmFyIGkg
PSAwLCBjdXI7IGkgPCBkYXRhLmxlbmd0aDsgKytpKSBpZiAoY3VyID0gZGF0YVtpXSkgeworICAg
ICAgdmFyIHZyID0gY3VyLnRvcDsKKyAgICAgIGN1ci50b3AgPSB2cmFuZ2VzW3ZyXTsgY3VyLmJv
dHRvbSA9IHZyYW5nZXNbdnIrMV07CiAgICAgfQogICAgIHJldHVybiBkYXRhOwogICB9CiAKKyAg
ZnVuY3Rpb24gY2xlYXJDYWNoZXMoY20pIHsKKyAgICBjbS5kaXNwbGF5Lm1lYXN1cmVMaW5lQ2Fj
aGUubGVuZ3RoID0gY20uZGlzcGxheS5tZWFzdXJlTGluZUNhY2hlUG9zID0gMDsKKyAgICBjbS5k
aXNwbGF5LmNhY2hlZENoYXJXaWR0aCA9IGNtLmRpc3BsYXkuY2FjaGVkVGV4dEhlaWdodCA9IG51
bGw7CisgICAgY20udmlldy5tYXhMaW5lQ2hhbmdlZCA9IHRydWU7CisgIH0KKwogICAvLyBDb250
ZXh0IGlzIG9uZSBvZiAibGluZSIsICJkaXYiIChkaXNwbGF5LmxpbmVEaXYpLCAibG9jYWwiL251
bGwgKGVkaXRvciksIG9yICJwYWdlIgotICBmdW5jdGlvbiBpbnRvQ29vcmRTeXN0ZW0oY20sIGxp
bmVPYmosIHBvcywgcmVjdCwgY29udGV4dCkgeworICBmdW5jdGlvbiBpbnRvQ29vcmRTeXN0ZW0o
Y20sIGxpbmVPYmosIHJlY3QsIGNvbnRleHQpIHsKICAgICBpZiAobGluZU9iai53aWRnZXRzKSBm
b3IgKHZhciBpID0gMDsgaSA8IGxpbmVPYmoud2lkZ2V0cy5sZW5ndGg7ICsraSkgaWYgKGxpbmVP
Ymoud2lkZ2V0c1tpXS5hYm92ZSkgewogICAgICAgdmFyIHNpemUgPSBsaW5lT2JqLndpZGdldHNb
aV0ubm9kZS5vZmZzZXRIZWlnaHQ7CiAgICAgICByZWN0LnRvcCArPSBzaXplOyByZWN0LmJvdHRv
bSArPSBzaXplOwpAQCAtOTI0LDcgKzk3NSw3IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0
aW9uKCkgewogCiAgIGZ1bmN0aW9uIGNoYXJDb29yZHMoY20sIHBvcywgY29udGV4dCwgbGluZU9i
aikgewogICAgIGlmICghbGluZU9iaikgbGluZU9iaiA9IGdldExpbmUoY20udmlldy5kb2MsIHBv
cy5saW5lKTsKLSAgICByZXR1cm4gaW50b0Nvb3JkU3lzdGVtKGNtLCBsaW5lT2JqLCBwb3MsIG1l
YXN1cmVDaGFyKGNtLCBsaW5lT2JqLCBwb3MuY2gpLCBjb250ZXh0KTsKKyAgICByZXR1cm4gaW50
b0Nvb3JkU3lzdGVtKGNtLCBsaW5lT2JqLCBtZWFzdXJlQ2hhcihjbSwgbGluZU9iaiwgcG9zLmNo
KSwgY29udGV4dCk7CiAgIH0KIAogICBmdW5jdGlvbiBjdXJzb3JDb29yZHMoY20sIHBvcywgY29u
dGV4dCwgbGluZU9iaiwgbWVhc3VyZW1lbnQpIHsKQEAgLTkzMyw3ICs5ODQsNyBAQCB3aW5kb3cu
Q29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICBmdW5jdGlvbiBnZXQoY2gsIHJpZ2h0KSB7
CiAgICAgICB2YXIgbSA9IG1lYXN1cmVDaGFyKGNtLCBsaW5lT2JqLCBjaCwgbWVhc3VyZW1lbnQp
OwogICAgICAgaWYgKHJpZ2h0KSBtLmxlZnQgPSBtLnJpZ2h0OyBlbHNlIG0ucmlnaHQgPSBtLmxl
ZnQ7Ci0gICAgICByZXR1cm4gaW50b0Nvb3JkU3lzdGVtKGNtLCBsaW5lT2JqLCBwb3MsIG0sIGNv
bnRleHQpOworICAgICAgcmV0dXJuIGludG9Db29yZFN5c3RlbShjbSwgbGluZU9iaiwgbSwgY29u
dGV4dCk7CiAgICAgfQogICAgIHZhciBvcmRlciA9IGdldE9yZGVyKGxpbmVPYmopLCBjaCA9IHBv
cy5jaDsKICAgICBpZiAoIW9yZGVyKSByZXR1cm4gZ2V0KGNoKTsKQEAgLTk4NSw3ICsxMDM2LDYg
QEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgIH0KIAogICBmdW5jdGlvbiBj
b29yZHNDaGFySW5uZXIoY20sIGxpbmVPYmosIGxpbmVObywgeCwgeSkgewotICAgIHZhciBkb2Mg
PSBjbS52aWV3LmRvYzsKICAgICB2YXIgaW5uZXJPZmYgPSB5IC0gaGVpZ2h0QXRMaW5lKGNtLCBs
aW5lT2JqKTsKICAgICB2YXIgd3JvbmdMaW5lID0gZmFsc2UsIGNXaWR0aCA9IGNtLmRpc3BsYXku
d3JhcHBlci5jbGllbnRXaWR0aDsKICAgICB2YXIgbWVhc3VyZW1lbnQgPSBtZWFzdXJlTGluZShj
bSwgbGluZU9iaik7CkBAIC0xMDAxLDIxICsxMDUxLDkgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAo
ZnVuY3Rpb24oKSB7CiAgICAgfQogCiAgICAgdmFyIGJpZGkgPSBnZXRPcmRlcihsaW5lT2JqKSwg
ZGlzdCA9IGxpbmVPYmoudGV4dC5sZW5ndGg7Ci0gICAgdmFyIGZyb20gPSBsaW5lTGVmdChsaW5l
T2JqKSwgdG8gPSBsaW5lUmlnaHQobGluZU9iaiksIGZyb21YID0gcGFkZGluZ0xlZnQoY20uZGlz
cGxheSksIHRvWDsKLSAgICBpZiAoIWJpZGkpIHsKLSAgICAgIC8vIEd1ZXNzIGEgc3VpdGFibGUg
dXBwZXIgYm91bmQgZm9yIG91ciBzZWFyY2guCi0gICAgICB2YXIgZXN0aW1hdGVkID0gTWF0aC5t
aW4odG8sIE1hdGguY2VpbCgoeCArIE1hdGguZmxvb3IoaW5uZXJPZmYgLyB0ZXh0SGVpZ2h0KGNt
LmRpc3BsYXkpKSAqCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY1dpZHRoICogLjkpIC8gY2hhcldpZHRoKGNtLmRpc3BsYXkpKSk7Ci0gICAgICBmb3IgKDs7
KSB7Ci0gICAgICAgIHZhciBlc3RYID0gZ2V0WChlc3RpbWF0ZWQpOwotICAgICAgICBpZiAoZXN0
WCA8PSB4ICYmIGVzdGltYXRlZCA8IHRvKSBlc3RpbWF0ZWQgPSBNYXRoLm1pbih0bywgTWF0aC5j
ZWlsKGVzdGltYXRlZCAqIDEuMikpOwotICAgICAgICBlbHNlIHt0b1ggPSBlc3RYOyB0byA9IGVz
dGltYXRlZDsgYnJlYWs7fQotICAgICAgfQotICAgICAgLy8gVHJ5IHRvIGd1ZXNzIGEgc3VpdGFi
bGUgbG93ZXIgYm91bmQgYXMgd2VsbC4KLSAgICAgIGVzdGltYXRlZCA9IE1hdGguZmxvb3IodG8g
KiAwLjgpOyBlc3RYID0gZ2V0WChlc3RpbWF0ZWQpOwotICAgICAgaWYgKGVzdFggPCB4KSB7ZnJv
bSA9IGVzdGltYXRlZDsgZnJvbVggPSBlc3RYO30KLSAgICAgIGRpc3QgPSB0byAtIGZyb207Ci0g
ICAgfSBlbHNlIHRvWCA9IGdldFgodG8pOworICAgIHZhciBmcm9tID0gbGluZUxlZnQobGluZU9i
aiksIHRvID0gbGluZVJpZ2h0KGxpbmVPYmopOworICAgIHZhciBmcm9tWCA9IHBhZGRpbmdMZWZ0
KGNtLmRpc3BsYXkpLCB0b1ggPSBnZXRYKHRvKTsKKwogICAgIGlmICh4ID4gdG9YKSByZXR1cm4g
e2xpbmU6IGxpbmVObywgY2g6IHRvLCBvdXRzaWRlOiB3cm9uZ0xpbmV9OwogICAgIC8vIERvIGEg
YmluYXJ5IHNlYXJjaCBiZXR3ZWVuIHRoZXNlIGJvdW5kcy4KICAgICBmb3IgKDs7KSB7CkBAIC0x
MDg2LDcgKzExMjQsOCBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICAg
IHVzZXJTZWxDaGFuZ2U6IG51bGwsCiAgICAgICB0ZXh0Q2hhbmdlZDogbnVsbCwKICAgICAgIHNl
bGVjdGlvbkNoYW5nZWQ6IGZhbHNlLAotICAgICAgdXBkYXRlTWF4TGluZTogZmFsc2UKKyAgICAg
IHVwZGF0ZU1heExpbmU6IGZhbHNlLAorICAgICAgaWQ6ICsrY20ubmV4dE9wSWQKICAgICB9Owog
ICB9CiAKQEAgLTExMDAsMTEgKzExMzksMTQgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rp
b24oKSB7CiAgICAgICB2YXIgd2lkdGggPSBtZWFzdXJlQ2hhcihjbSwgdmlldy5tYXhMaW5lLCB2
aWV3Lm1heExpbmUudGV4dC5sZW5ndGgpLnJpZ2h0OwogICAgICAgZGlzcGxheS5zaXplci5zdHls
ZS5taW5XaWR0aCA9ICh3aWR0aCArIDMgKyBzY3JvbGxlckN1dE9mZikgKyAicHgiOwogICAgICAg
dmlldy5tYXhMaW5lQ2hhbmdlZCA9IGZhbHNlOworICAgICAgdmFyIG1heFNjcm9sbExlZnQgPSBN
YXRoLm1heCgwLCBkaXNwbGF5LnNpemVyLm9mZnNldExlZnQgKyBkaXNwbGF5LnNpemVyLm9mZnNl
dFdpZHRoIC0gZGlzcGxheS5zY3JvbGxlci5jbGllbnRXaWR0aCk7CisgICAgICBpZiAobWF4U2Ny
b2xsTGVmdCA8IHZpZXcuc2Nyb2xsTGVmdCkKKyAgICAgICAgc2V0U2Nyb2xsTGVmdChjbSwgTWF0
aC5taW4oZGlzcGxheS5zY3JvbGxlci5zY3JvbGxMZWZ0LCBtYXhTY3JvbGxMZWZ0KSwgdHJ1ZSk7
CiAgICAgfQogICAgIHZhciBuZXdTY3JvbGxQb3MsIHVwZGF0ZWQ7CiAgICAgaWYgKG9wLnNlbGVj
dGlvbkNoYW5nZWQpIHsKLSAgICAgIHZhciBjb29yZHMgPSBjdXJzb3JDb29yZHMoY20sIHNlbEhl
YWQodmlldykpOwotICAgICAgbmV3U2Nyb2xsUG9zID0gY2FsY3VsYXRlU2Nyb2xsUG9zKGRpc3Bs
YXksIGNvb3Jkcy5sZWZ0LCBjb29yZHMudG9wLCBjb29yZHMubGVmdCwgY29vcmRzLmJvdHRvbSk7
CisgICAgICB2YXIgY29vcmRzID0gY3Vyc29yQ29vcmRzKGNtLCB2aWV3LnNlbC5oZWFkKTsKKyAg
ICAgIG5ld1Njcm9sbFBvcyA9IGNhbGN1bGF0ZVNjcm9sbFBvcyhjbSwgY29vcmRzLmxlZnQsIGNv
b3Jkcy50b3AsIGNvb3Jkcy5sZWZ0LCBjb29yZHMuYm90dG9tKTsKICAgICB9CiAgICAgaWYgKG9w
LmNoYW5nZXMubGVuZ3RoIHx8IG5ld1Njcm9sbFBvcyAmJiBuZXdTY3JvbGxQb3Muc2Nyb2xsVG9w
ICE9IG51bGwpCiAgICAgICB1cGRhdGVkID0gdXBkYXRlRGlzcGxheShjbSwgb3AuY2hhbmdlcywg
bmV3U2Nyb2xsUG9zICYmIG5ld1Njcm9sbFBvcy5zY3JvbGxUb3ApOwpAQCAtMTE2OCwxNyArMTIx
MCwxOSBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICB2YXIgdGV4dCA9
IGlucHV0LnZhbHVlOwogICAgIGlmICh0ZXh0ID09IHByZXZJbnB1dCAmJiBwb3NFcShzZWwuZnJv
bSwgc2VsLnRvKSkgcmV0dXJuIGZhbHNlOwogICAgIHN0YXJ0T3BlcmF0aW9uKGNtKTsKLSAgICB2
aWV3LnNlbC5zaGlmdCA9IG51bGw7CisgICAgdmlldy5zZWwuc2hpZnQgPSBmYWxzZTsKICAgICB2
YXIgc2FtZSA9IDAsIGwgPSBNYXRoLm1pbihwcmV2SW5wdXQubGVuZ3RoLCB0ZXh0Lmxlbmd0aCk7
CiAgICAgd2hpbGUgKHNhbWUgPCBsICYmIHByZXZJbnB1dFtzYW1lXSA9PSB0ZXh0W3NhbWVdKSAr
K3NhbWU7CisgICAgdmFyIGZyb20gPSBzZWwuZnJvbSwgdG8gPSBzZWwudG87CiAgICAgaWYgKHNh
bWUgPCBwcmV2SW5wdXQubGVuZ3RoKQotICAgICAgc2VsLmZyb20gPSB7bGluZTogc2VsLmZyb20u
bGluZSwgY2g6IHNlbC5mcm9tLmNoIC0gKHByZXZJbnB1dC5sZW5ndGggLSBzYW1lKX07Ci0gICAg
ZWxzZSBpZiAodmlldy5vdmVyd3JpdGUgJiYgcG9zRXEoc2VsLmZyb20sIHNlbC50bykgJiYgIWNt
LmRpc3BsYXkucGFzdGVJbmNvbWluZykKLSAgICAgIHNlbC50byA9IHtsaW5lOiBzZWwudG8ubGlu
ZSwgY2g6IE1hdGgubWluKGdldExpbmUoY20udmlldy5kb2MsIHNlbC50by5saW5lKS50ZXh0Lmxl
bmd0aCwgc2VsLnRvLmNoICsgKHRleHQubGVuZ3RoIC0gc2FtZSkpfTsKKyAgICAgIGZyb20gPSB7
bGluZTogZnJvbS5saW5lLCBjaDogZnJvbS5jaCAtIChwcmV2SW5wdXQubGVuZ3RoIC0gc2FtZSl9
OworICAgIGVsc2UgaWYgKHZpZXcub3ZlcndyaXRlICYmIHBvc0VxKGZyb20sIHRvKSAmJiAhY20u
ZGlzcGxheS5wYXN0ZUluY29taW5nKQorICAgICAgdG8gPSB7bGluZTogdG8ubGluZSwgY2g6IE1h
dGgubWluKGdldExpbmUoY20udmlldy5kb2MsIHRvLmxpbmUpLnRleHQubGVuZ3RoLCB0by5jaCAr
ICh0ZXh0Lmxlbmd0aCAtIHNhbWUpKX07CiAgICAgdmFyIHVwZGF0ZUlucHV0ID0gY20uY3VyT3Au
dXBkYXRlSW5wdXQ7Ci0gICAgY20ucmVwbGFjZVNlbGVjdGlvbih0ZXh0LnNsaWNlKHNhbWUpLCAi
ZW5kIik7CisgICAgdXBkYXRlRG9jKGNtLCBmcm9tLCB0bywgc3BsaXRMaW5lcyh0ZXh0LnNsaWNl
KHNhbWUpKSwgImVuZCIsCisgICAgICAgICAgICAgIGNtLmRpc3BsYXkucGFzdGVJbmNvbWluZyA/
ICJwYXN0ZSIgOiAiaW5wdXQiLCB7ZnJvbTogZnJvbSwgdG86IHRvfSk7CiAgICAgY20uY3VyT3Au
dXBkYXRlSW5wdXQgPSB1cGRhdGVJbnB1dDsKLSAgICBpZiAodGV4dC5sZW5ndGggPiAxMDAwKSB7
IGlucHV0LnZhbHVlID0gY20uZGlzcGxheS5wcmV2SW5wdXQgPSAiIjsgfQorICAgIGlmICh0ZXh0
Lmxlbmd0aCA+IDEwMDApIGlucHV0LnZhbHVlID0gY20uZGlzcGxheS5wcmV2SW5wdXQgPSAiIjsK
ICAgICBlbHNlIGNtLmRpc3BsYXkucHJldklucHV0ID0gdGV4dDsKICAgICBlbmRPcGVyYXRpb24o
Y20pOwogICAgIGNtLmRpc3BsYXkucGFzdGVJbmNvbWluZyA9IGZhbHNlOwpAQCAtMTE5OSw3ICsx
MjQzLDggQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgIH0KIAogICBmdW5j
dGlvbiBmb2N1c0lucHV0KGNtKSB7Ci0gICAgaWYgKGNtLm9wdGlvbnMucmVhZE9ubHkgIT0gIm5v
Y3Vyc29yIikgY20uZGlzcGxheS5pbnB1dC5mb2N1cygpOworICAgIGlmIChjbS5vcHRpb25zLnJl
YWRPbmx5ICE9ICJub2N1cnNvciIgJiYgKGllIHx8IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgIT0g
Y20uZGlzcGxheS5pbnB1dCkpCisgICAgICBjbS5kaXNwbGF5LmlucHV0LmZvY3VzKCk7CiAgIH0K
IAogICBmdW5jdGlvbiBpc1JlYWRPbmx5KGNtKSB7CkBAIC0xMjExLDEwICsxMjU2LDkgQEAgd2lu
ZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgIGZ1bmN0aW9uIHJlZ2lzdGVyRXZlbnRI
YW5kbGVycyhjbSkgewogICAgIHZhciBkID0gY20uZGlzcGxheTsKICAgICBvbihkLnNjcm9sbGVy
LCAibW91c2Vkb3duIiwgb3BlcmF0aW9uKGNtLCBvbk1vdXNlRG93bikpOwotICAgIG9uKGQuZ3V0
dGVycywgIm1vdXNlZG93biIsIG9wZXJhdGlvbihjbSwgY2xpY2tJbkd1dHRlcikpOwogICAgIG9u
KGQuc2Nyb2xsZXIsICJkYmxjbGljayIsIG9wZXJhdGlvbihjbSwgZV9wcmV2ZW50RGVmYXVsdCkp
OwogICAgIG9uKGQubGluZVNwYWNlLCAic2VsZWN0c3RhcnQiLCBmdW5jdGlvbihlKSB7Ci0gICAg
ICBpZiAoIW1vdXNlRXZlbnRJbldpZGdldChkLCBlKSkgZV9wcmV2ZW50RGVmYXVsdChlKTsKKyAg
ICAgIGlmICghZXZlbnRJbldpZGdldChkLCBlKSkgZV9wcmV2ZW50RGVmYXVsdChlKTsKICAgICB9
KTsKICAgICAvLyBHZWNrbyBicm93c2VycyBmaXJlIGNvbnRleHRtZW51ICphZnRlciogb3Blbmlu
ZyB0aGUgbWVudSwgYXQKICAgICAvLyB3aGljaCBwb2ludCB3ZSBjYW4ndCBtZXNzIHdpdGggaXQg
YW55bW9yZS4gQ29udGV4dCBtZW51IGlzCkBAIC0xMjIzLDcgKzEyNjcsNyBAQCB3aW5kb3cuQ29k
ZU1pcnJvciA9IChmdW5jdGlvbigpIHsKIAogICAgIG9uKGQuc2Nyb2xsZXIsICJzY3JvbGwiLCBm
dW5jdGlvbigpIHsKICAgICAgIHNldFNjcm9sbFRvcChjbSwgZC5zY3JvbGxlci5zY3JvbGxUb3Ap
OwotICAgICAgc2V0U2Nyb2xsTGVmdChjbSwgZC5zY3JvbGxlci5zY3JvbGxMZWZ0KTsKKyAgICAg
IHNldFNjcm9sbExlZnQoY20sIGQuc2Nyb2xsZXIuc2Nyb2xsTGVmdCwgdHJ1ZSk7CiAgICAgICBz
aWduYWwoY20sICJzY3JvbGwiLCBjbSk7CiAgICAgfSk7CiAgICAgb24oZC5zY3JvbGxiYXJWLCAi
c2Nyb2xsIiwgZnVuY3Rpb24oKSB7CkBAIC0xMjQ0LDE0ICsxMjg4LDE0IEBAIHdpbmRvdy5Db2Rl
TWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgIG9uKHdpbmRvdywgInJlc2l6ZSIsIGZ1bmN0aW9u
IHJlc2l6ZUhhbmRsZXIoKSB7CiAgICAgICAvLyBNaWdodCBiZSBhIHRleHQgc2NhbGluZyBvcGVy
YXRpb24sIGNsZWFyIHNpemUgY2FjaGVzLgogICAgICAgZC5jYWNoZWRDaGFyV2lkdGggPSBkLmNh
Y2hlZFRleHRIZWlnaHQgPSBudWxsOwotICAgICAgZC5tZWFzdXJlTGluZUNhY2hlLmxlbmd0aCA9
IGQubWVhc3VyZUxpbmVDYWNoZS5wb3MgPSAwOworICAgICAgY2xlYXJDYWNoZXMoY20pOwogICAg
ICAgaWYgKGQud3JhcHBlci5wYXJlbnROb2RlKSB1cGRhdGVEaXNwbGF5KGNtLCB0cnVlKTsKICAg
ICAgIGVsc2Ugb2ZmKHdpbmRvdywgInJlc2l6ZSIsIHJlc2l6ZUhhbmRsZXIpOwogICAgIH0pOwog
CiAgICAgb24oZC5pbnB1dCwgImtleXVwIiwgb3BlcmF0aW9uKGNtLCBmdW5jdGlvbihlKSB7CiAg
ICAgICBpZiAoY20ub3B0aW9ucy5vbktleUV2ZW50ICYmIGNtLm9wdGlvbnMub25LZXlFdmVudChj
bSwgYWRkU3RvcChlKSkpIHJldHVybjsKLSAgICAgIGlmIChlX3Byb3AoZSwgImtleUNvZGUiKSA9
PSAxNikgY20udmlldy5zZWwuc2hpZnQgPSBudWxsOworICAgICAgaWYgKGVfcHJvcChlLCAia2V5
Q29kZSIpID09IDE2KSBjbS52aWV3LnNlbC5zaGlmdCA9IGZhbHNlOwogICAgIH0pKTsKICAgICBv
bihkLmlucHV0LCAiaW5wdXQiLCBiaW5kKGZhc3RQb2xsLCBjbSkpOwogICAgIG9uKGQuaW5wdXQs
ICJrZXlkb3duIiwgb3BlcmF0aW9uKGNtLCBvbktleURvd24pKTsKQEAgLTEyNjksNyArMTMxMywx
MSBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICAgIG9uKGQuc2Nyb2xs
ZXIsICJkcmFnb3ZlciIsIGRyYWdfKTsKICAgICAgIG9uKGQuc2Nyb2xsZXIsICJkcm9wIiwgb3Bl
cmF0aW9uKGNtLCBvbkRyb3ApKTsKICAgICB9Ci0gICAgb24oZC5zY3JvbGxlciwgInBhc3RlIiwg
ZnVuY3Rpb24oKXtmb2N1c0lucHV0KGNtKTsgZmFzdFBvbGwoY20pO30pOworICAgIG9uKGQuc2Ny
b2xsZXIsICJwYXN0ZSIsIGZ1bmN0aW9uKCl7CisgICAgICBpZiAoZXZlbnRJbldpZGdldChkLCBl
KSkgcmV0dXJuOworICAgICAgZm9jdXNJbnB1dChjbSk7IAorICAgICAgZmFzdFBvbGwoY20pOwor
ICAgIH0pOwogICAgIG9uKGQuaW5wdXQsICJwYXN0ZSIsIGZ1bmN0aW9uKCkgewogICAgICAgZC5w
YXN0ZUluY29taW5nID0gdHJ1ZTsKICAgICAgIGZhc3RQb2xsKGNtKTsKQEAgLTEyOTMsNyArMTM0
MSw3IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgIH0pOwogICB9CiAK
LSAgZnVuY3Rpb24gbW91c2VFdmVudEluV2lkZ2V0KGRpc3BsYXksIGUpIHsKKyAgZnVuY3Rpb24g
ZXZlbnRJbldpZGdldChkaXNwbGF5LCBlKSB7CiAgICAgZm9yICh2YXIgbiA9IGVfdGFyZ2V0KGUp
OyBuICE9IGRpc3BsYXkud3JhcHBlcjsgbiA9IG4ucGFyZW50Tm9kZSkKICAgICAgIGlmICgvXGJD
b2RlTWlycm9yLSg/OmxpbmUpP3dpZGdldFxiLy50ZXN0KG4uY2xhc3NOYW1lKSB8fAogICAgICAg
ICAgIG4ucGFyZW50Tm9kZSA9PSBkaXNwbGF5LnNpemVyICYmIG4gIT0gZGlzcGxheS5tb3Zlcikg
cmV0dXJuIHRydWU7CkBAIC0xMzE2LDE2ICsxMzY0LDE2IEBAIHdpbmRvdy5Db2RlTWlycm9yID0g
KGZ1bmN0aW9uKCkgewogICB2YXIgbGFzdENsaWNrLCBsYXN0RG91YmxlQ2xpY2s7CiAgIGZ1bmN0
aW9uIG9uTW91c2VEb3duKGUpIHsKICAgICB2YXIgY20gPSB0aGlzLCBkaXNwbGF5ID0gY20uZGlz
cGxheSwgdmlldyA9IGNtLnZpZXcsIHNlbCA9IHZpZXcuc2VsLCBkb2MgPSB2aWV3LmRvYzsKLSAg
ICBzZXRTaGlmdChjbS52aWV3LCBlX3Byb3AoZSwgInNoaWZ0S2V5IikpOworICAgIHNlbC5zaGlm
dCA9IGVfcHJvcChlLCAic2hpZnRLZXkiKTsKIAotICAgIGlmIChtb3VzZUV2ZW50SW5XaWRnZXQo
ZGlzcGxheSwgZSkpIHsKKyAgICBpZiAoZXZlbnRJbldpZGdldChkaXNwbGF5LCBlKSkgewogICAg
ICAgaWYgKCF3ZWJraXQpIHsKICAgICAgICAgZGlzcGxheS5zY3JvbGxlci5kcmFnZ2FibGUgPSBm
YWxzZTsKICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpe2Rpc3BsYXkuc2Nyb2xsZXIuZHJh
Z2dhYmxlID0gdHJ1ZTt9LCAxMDApOwogICAgICAgfQogICAgICAgcmV0dXJuOwogICAgIH0KLSAg
ICBpZiAoY2xpY2tJbkd1dHRlci5jYWxsKGNtLCBlKSkgcmV0dXJuOworICAgIGlmIChjbGlja0lu
R3V0dGVyKGNtLCBlKSkgcmV0dXJuOwogICAgIHZhciBzdGFydCA9IHBvc0Zyb21Nb3VzZShjbSwg
ZSk7CiAKICAgICBzd2l0Y2ggKGVfYnV0dG9uKGUpKSB7CkBAIC0xMzMzLDcgKzEzODEsNyBAQCB3
aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICAgIGlmIChnZWNrbykgb25Db250
ZXh0TWVudS5jYWxsKGNtLCBjbSwgZSk7CiAgICAgICByZXR1cm47CiAgICAgY2FzZSAyOgotICAg
ICAgaWYgKHN0YXJ0KSBzZXRTZWxlY3Rpb25Vc2VyKGNtLCBzdGFydCwgc3RhcnQpOworICAgICAg
aWYgKHN0YXJ0KSBleHRlbmRTZWxlY3Rpb24oY20sIHN0YXJ0KTsKICAgICAgIHNldFRpbWVvdXQo
YmluZChmb2N1c0lucHV0LCBjbSksIDIwKTsKICAgICAgIGVfcHJldmVudERlZmF1bHQoZSk7CiAg
ICAgICByZXR1cm47CkBAIC0xMzU2LDcgKzE0MDQsNyBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChm
dW5jdGlvbigpIHsKICAgICAgIGxhc3REb3VibGVDbGljayA9IHt0aW1lOiBub3csIHBvczogc3Rh
cnR9OwogICAgICAgZV9wcmV2ZW50RGVmYXVsdChlKTsKICAgICAgIHZhciB3b3JkID0gZmluZFdv
cmRBdChnZXRMaW5lKGRvYywgc3RhcnQubGluZSkudGV4dCwgc3RhcnQpOwotICAgICAgc2V0U2Vs
ZWN0aW9uVXNlcihjbSwgd29yZC5mcm9tLCB3b3JkLnRvKTsKKyAgICAgIGV4dGVuZFNlbGVjdGlv
bihjbSwgd29yZC5mcm9tLCB3b3JkLnRvKTsKICAgICB9IGVsc2UgeyBsYXN0Q2xpY2sgPSB7dGlt
ZTogbm93LCBwb3M6IHN0YXJ0fTsgfQogCiAgICAgdmFyIGxhc3QgPSBzdGFydDsKQEAgLTEzNjks
NyArMTQxNyw3IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgICAgICBv
ZmYoZGlzcGxheS5zY3JvbGxlciwgImRyb3AiLCBkcmFnRW5kKTsKICAgICAgICAgaWYgKE1hdGgu
YWJzKGUuY2xpZW50WCAtIGUyLmNsaWVudFgpICsgTWF0aC5hYnMoZS5jbGllbnRZIC0gZTIuY2xp
ZW50WSkgPCAxMCkgewogICAgICAgICAgIGVfcHJldmVudERlZmF1bHQoZTIpOwotICAgICAgICAg
IHNldFNlbGVjdGlvblVzZXIoY20sIHN0YXJ0LCBzdGFydCk7CisgICAgICAgICAgZXh0ZW5kU2Vs
ZWN0aW9uKGNtLCBzdGFydCk7CiAgICAgICAgICAgZm9jdXNJbnB1dChjbSk7CiAgICAgICAgIH0K
ICAgICAgIH0pOwpAQCAtMTM4MywyMCArMTQzMSwyNSBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChm
dW5jdGlvbigpIHsKICAgICAgIHJldHVybjsKICAgICB9CiAgICAgZV9wcmV2ZW50RGVmYXVsdChl
KTsKLSAgICBpZiAodHlwZSA9PSAic2luZ2xlIikgc2V0U2VsZWN0aW9uVXNlcihjbSwgc3RhcnQs
IHN0YXJ0KTsKKyAgICBpZiAodHlwZSA9PSAic2luZ2xlIikgZXh0ZW5kU2VsZWN0aW9uKGNtLCBj
bGlwUG9zKGRvYywgc3RhcnQpKTsKIAogICAgIHZhciBzdGFydHN0YXJ0ID0gc2VsLmZyb20sIHN0
YXJ0ZW5kID0gc2VsLnRvOwogCiAgICAgZnVuY3Rpb24gZG9TZWxlY3QoY3VyKSB7CiAgICAgICBp
ZiAodHlwZSA9PSAic2luZ2xlIikgewotICAgICAgICBzZXRTZWxlY3Rpb25Vc2VyKGNtLCBzdGFy
dCwgY3VyKTsKLSAgICAgIH0gZWxzZSBpZiAodHlwZSA9PSAiZG91YmxlIikgeworICAgICAgICBl
eHRlbmRTZWxlY3Rpb24oY20sIGNsaXBQb3MoZG9jLCBzdGFydCksIGN1cik7CisgICAgICAgIHJl
dHVybjsKKyAgICAgIH0KKworICAgICAgc3RhcnRzdGFydCA9IGNsaXBQb3MoZG9jLCBzdGFydHN0
YXJ0KTsKKyAgICAgIHN0YXJ0ZW5kID0gY2xpcFBvcyhkb2MsIHN0YXJ0ZW5kKTsKKyAgICAgIGlm
ICh0eXBlID09ICJkb3VibGUiKSB7CiAgICAgICAgIHZhciB3b3JkID0gZmluZFdvcmRBdChnZXRM
aW5lKGRvYywgY3VyLmxpbmUpLnRleHQsIGN1cik7Ci0gICAgICAgIGlmIChwb3NMZXNzKGN1ciwg
c3RhcnRzdGFydCkpIHNldFNlbGVjdGlvblVzZXIoY20sIHdvcmQuZnJvbSwgc3RhcnRlbmQpOwot
ICAgICAgICBlbHNlIHNldFNlbGVjdGlvblVzZXIoY20sIHN0YXJ0c3RhcnQsIHdvcmQudG8pOwor
ICAgICAgICBpZiAocG9zTGVzcyhjdXIsIHN0YXJ0c3RhcnQpKSBleHRlbmRTZWxlY3Rpb24oY20s
IHdvcmQuZnJvbSwgc3RhcnRlbmQpOworICAgICAgICBlbHNlIGV4dGVuZFNlbGVjdGlvbihjbSwg
c3RhcnRzdGFydCwgd29yZC50byk7CiAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT0gInRyaXBsZSIp
IHsKLSAgICAgICAgaWYgKHBvc0xlc3MoY3VyLCBzdGFydHN0YXJ0KSkgc2V0U2VsZWN0aW9uVXNl
cihjbSwgc3RhcnRlbmQsIGNsaXBQb3MoZG9jLCB7bGluZTogY3VyLmxpbmUsIGNoOiAwfSkpOwot
ICAgICAgICBlbHNlIHNldFNlbGVjdGlvblVzZXIoY20sIHN0YXJ0c3RhcnQsIGNsaXBQb3MoZG9j
LCB7bGluZTogY3VyLmxpbmUgKyAxLCBjaDogMH0pKTsKKyAgICAgICAgaWYgKHBvc0xlc3MoY3Vy
LCBzdGFydHN0YXJ0KSkgZXh0ZW5kU2VsZWN0aW9uKGNtLCBzdGFydGVuZCwgY2xpcFBvcyhkb2Ms
IHtsaW5lOiBjdXIubGluZSwgY2g6IDB9KSk7CisgICAgICAgIGVsc2UgZXh0ZW5kU2VsZWN0aW9u
KGNtLCBzdGFydHN0YXJ0LCBjbGlwUG9zKGRvYywge2xpbmU6IGN1ci5saW5lICsgMSwgY2g6IDB9
KSk7CiAgICAgICB9CiAgICAgfQogCkBAIC0xNDM5LDcgKzE0OTIsNiBAQCB3aW5kb3cuQ29kZU1p
cnJvciA9IChmdW5jdGlvbigpIHsKICAgICB9CiAKICAgICB2YXIgbW92ZSA9IG9wZXJhdGlvbihj
bSwgZnVuY3Rpb24oZSkgewotICAgICAgZV9wcmV2ZW50RGVmYXVsdChlKTsKICAgICAgIGlmICgh
aWUgJiYgIWVfYnV0dG9uKGUpKSBkb25lKGUpOwogICAgICAgZWxzZSBleHRlbmQoZSk7CiAgICAg
fSk7CkBAIC0xNDUwLDcgKzE1MDIsOCBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigp
IHsKIAogICBmdW5jdGlvbiBvbkRyb3AoZSkgewogICAgIHZhciBjbSA9IHRoaXM7Ci0gICAgaWYg
KGNtLm9wdGlvbnMub25EcmFnRXZlbnQgJiYgY20ub3B0aW9ucy5vbkRyYWdFdmVudChjbSwgYWRk
U3RvcChlKSkpIHJldHVybjsKKyAgICBpZiAoZXZlbnRJbldpZGdldChjbS5kaXNwbGF5LCBlKSB8
fCAoY20ub3B0aW9ucy5vbkRyYWdFdmVudCAmJiBjbS5vcHRpb25zLm9uRHJhZ0V2ZW50KGNtLCBh
ZGRTdG9wKGUpKSkpCisgICAgICByZXR1cm47CiAgICAgZV9wcmV2ZW50RGVmYXVsdChlKTsKICAg
ICB2YXIgcG9zID0gcG9zRnJvbU1vdXNlKGNtLCBlLCB0cnVlKSwgZmlsZXMgPSBlLmRhdGFUcmFu
c2Zlci5maWxlczsKICAgICBpZiAoIXBvcyB8fCBpc1JlYWRPbmx5KGNtKSkgcmV0dXJuOwpAQCAt
MTQ2Myw4ICsxNTE2LDggQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAg
ICAgICAgaWYgKCsrcmVhZCA9PSBuKSB7CiAgICAgICAgICAgICBwb3MgPSBjbGlwUG9zKGNtLnZp
ZXcuZG9jLCBwb3MpOwogICAgICAgICAgICAgb3BlcmF0aW9uKGNtLCBmdW5jdGlvbigpIHsKLSAg
ICAgICAgICAgICAgdmFyIGVuZCA9IHJlcGxhY2VSYW5nZShjbSwgdGV4dC5qb2luKCIiKSwgcG9z
LCBwb3MpOwotICAgICAgICAgICAgICBzZXRTZWxlY3Rpb25Vc2VyKGNtLCBwb3MsIGVuZCk7Cisg
ICAgICAgICAgICAgIHZhciBlbmQgPSByZXBsYWNlUmFuZ2UoY20sIHRleHQuam9pbigiIiksIHBv
cywgcG9zLCAicGFzdGUiKTsKKyAgICAgICAgICAgICAgc2V0U2VsZWN0aW9uKGNtLCBwb3MsIGVu
ZCk7CiAgICAgICAgICAgICB9KSgpOwogICAgICAgICAgIH0KICAgICAgICAgfTsKQEAgLTE0ODEs
MjUgKzE1MzQsMjMgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgICB0
cnkgewogICAgICAgICB2YXIgdGV4dCA9IGUuZGF0YVRyYW5zZmVyLmdldERhdGEoIlRleHQiKTsK
ICAgICAgICAgaWYgKHRleHQpIHsKLSAgICAgICAgICBjb21wb3VuZENoYW5nZShjbSwgZnVuY3Rp
b24oKSB7Ci0gICAgICAgICAgICB2YXIgY3VyRnJvbSA9IGNtLnZpZXcuc2VsLmZyb20sIGN1clRv
ID0gY20udmlldy5zZWwudG87Ci0gICAgICAgICAgICBzZXRTZWxlY3Rpb25Vc2VyKGNtLCBwb3Ms
IHBvcyk7Ci0gICAgICAgICAgICBpZiAoY20udmlldy5kcmFnZ2luZ1RleHQpIHJlcGxhY2VSYW5n
ZShjbSwgIiIsIGN1ckZyb20sIGN1clRvKTsKLSAgICAgICAgICAgIGNtLnJlcGxhY2VTZWxlY3Rp
b24odGV4dCk7Ci0gICAgICAgICAgICBmb2N1c0lucHV0KGNtKTsKLSAgICAgICAgICAgIG9uRm9j
dXMoY20pOwotICAgICAgICAgIH0pOworICAgICAgICAgIHZhciBjdXJGcm9tID0gY20udmlldy5z
ZWwuZnJvbSwgY3VyVG8gPSBjbS52aWV3LnNlbC50bzsKKyAgICAgICAgICBzZXRTZWxlY3Rpb24o
Y20sIHBvcywgcG9zKTsKKyAgICAgICAgICBpZiAoY20udmlldy5kcmFnZ2luZ1RleHQpIHJlcGxh
Y2VSYW5nZShjbSwgIiIsIGN1ckZyb20sIGN1clRvLCAicGFzdGUiKTsKKyAgICAgICAgICBjbS5y
ZXBsYWNlU2VsZWN0aW9uKHRleHQsIG51bGwsICJwYXN0ZSIpOworICAgICAgICAgIGZvY3VzSW5w
dXQoY20pOworICAgICAgICAgIG9uRm9jdXMoY20pOwogICAgICAgICB9CiAgICAgICB9CiAgICAg
ICBjYXRjaChlKXt9CiAgICAgfQogICB9CiAKLSAgZnVuY3Rpb24gY2xpY2tJbkd1dHRlcihlKSB7
Ci0gICAgdmFyIGNtID0gdGhpcywgZGlzcGxheSA9IGNtLmRpc3BsYXk7CisgIGZ1bmN0aW9uIGNs
aWNrSW5HdXR0ZXIoY20sIGUpIHsKKyAgICB2YXIgZGlzcGxheSA9IGNtLmRpc3BsYXk7CiAgICAg
dHJ5IHsgdmFyIG1YID0gZS5jbGllbnRYLCBtWSA9IGUuY2xpZW50WTsgfQogICAgIGNhdGNoKGUp
IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgCisKICAgICBpZiAobVggPj0gTWF0aC5mbG9vcihkaXNw
bGF5Lmd1dHRlcnMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkucmlnaHQpKSByZXR1cm4gZmFsc2U7
CiAgICAgZV9wcmV2ZW50RGVmYXVsdChlKTsKICAgICBpZiAoIWhhc0hhbmRsZXIoY20sICJndXR0
ZXJDbGljayIpKSByZXR1cm4gdHJ1ZTsKQEAgLTE1MjEsMTEgKzE1NzIsMTQgQEAgd2luZG93LkNv
ZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgIH0KIAogICBmdW5jdGlvbiBvbkRyYWdTdGFydChj
bSwgZSkgeworICAgIGlmIChldmVudEluV2lkZ2V0KGNtLmRpc3BsYXksIGUpKSByZXR1cm47Cisg
ICAgCiAgICAgdmFyIHR4dCA9IGNtLmdldFNlbGVjdGlvbigpOwogICAgIGUuZGF0YVRyYW5zZmVy
LnNldERhdGEoIlRleHQiLCB0eHQpOwogCiAgICAgLy8gVXNlIGR1bW15IGltYWdlIGluc3RlYWQg
b2YgZGVmYXVsdCBicm93c2VycyBpbWFnZS4KLSAgICBpZiAoZS5kYXRhVHJhbnNmZXIuc2V0RHJh
Z0ltYWdlKQorICAgIC8vIFJlY2VudCBTYWZhcmkgKH42LjAuMikgaGF2ZSBhIHRlbmRlbmN5IHRv
IHNlZ2ZhdWx0IHdoZW4gdGhpcyBoYXBwZW5zLCBzbyB3ZSBkb24ndCBkbyBpdCB0aGVyZS4KKyAg
ICBpZiAoZS5kYXRhVHJhbnNmZXIuc2V0RHJhZ0ltYWdlICYmICFzYWZhcmkpCiAgICAgICBlLmRh
dGFUcmFuc2Zlci5zZXREcmFnSW1hZ2UoZWx0KCdpbWcnKSwgMCwgMCk7CiAgIH0KIApAQCAtMTUz
NywxMiArMTU5MSwxMyBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICBp
ZiAoY20uZGlzcGxheS5zY3JvbGxiYXJWLnNjcm9sbFRvcCAhPSB2YWwpIGNtLmRpc3BsYXkuc2Ny
b2xsYmFyVi5zY3JvbGxUb3AgPSB2YWw7CiAgICAgaWYgKGdlY2tvKSB1cGRhdGVEaXNwbGF5KGNt
LCBbXSk7CiAgIH0KLSAgZnVuY3Rpb24gc2V0U2Nyb2xsTGVmdChjbSwgdmFsKSB7Ci0gICAgaWYg
KE1hdGguYWJzKGNtLnZpZXcuc2Nyb2xsTGVmdCAtIHZhbCkgPCAyKSByZXR1cm47CisgIGZ1bmN0
aW9uIHNldFNjcm9sbExlZnQoY20sIHZhbCwgaXNTY3JvbGxlcikgeworICAgIGlmIChpc1Njcm9s
bGVyID8gdmFsID09IGNtLnZpZXcuc2Nyb2xsTGVmdCA6IE1hdGguYWJzKGNtLnZpZXcuc2Nyb2xs
TGVmdCAtIHZhbCkgPCAyKSByZXR1cm47CisgICAgdmFsID0gTWF0aC5taW4odmFsLCBjbS5kaXNw
bGF5LnNjcm9sbGVyLnNjcm9sbFdpZHRoIC0gY20uZGlzcGxheS5zY3JvbGxlci5jbGllbnRXaWR0
aCk7CiAgICAgY20udmlldy5zY3JvbGxMZWZ0ID0gdmFsOworICAgIGFsaWduSG9yaXpvbnRhbGx5
KGNtKTsKICAgICBpZiAoY20uZGlzcGxheS5zY3JvbGxlci5zY3JvbGxMZWZ0ICE9IHZhbCkgY20u
ZGlzcGxheS5zY3JvbGxlci5zY3JvbGxMZWZ0ID0gdmFsOwogICAgIGlmIChjbS5kaXNwbGF5LnNj
cm9sbGJhckguc2Nyb2xsTGVmdCAhPSB2YWwpIGNtLmRpc3BsYXkuc2Nyb2xsYmFySC5zY3JvbGxM
ZWZ0ID0gdmFsOwotICAgIGFsaWduVmVydGljYWxseShjbS5kaXNwbGF5KTsKICAgfQogCiAgIC8v
IFNpbmNlIHRoZSBkZWx0YSB2YWx1ZXMgcmVwb3J0ZWQgb24gbW91c2Ugd2hlZWwgZXZlbnRzIGFy
ZQpAQCAtMTU3MiwxOSArMTYyNyw0OSBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigp
IHsKICAgICBpZiAoZHkgPT0gbnVsbCAmJiBlLmRldGFpbCAmJiBlLmF4aXMgPT0gZS5WRVJUSUNB
TF9BWElTKSBkeSA9IGUuZGV0YWlsOwogICAgIGVsc2UgaWYgKGR5ID09IG51bGwpIGR5ID0gZS53
aGVlbERlbHRhOwogCisgICAgLy8gV2Via2l0IGJyb3dzZXJzIG9uIE9TIFggYWJvcnQgbW9tZW50
dW0gc2Nyb2xscyB3aGVuIHRoZSB0YXJnZXQKKyAgICAvLyBvZiB0aGUgc2Nyb2xsIGV2ZW50IGlz
IHJlbW92ZWQgZnJvbSB0aGUgc2Nyb2xsYWJsZSBlbGVtZW50LgorICAgIC8vIFRoaXMgaGFjayAo
c2VlIHJlbGF0ZWQgY29kZSBpbiBwYXRjaERpc3BsYXkpIG1ha2VzIHN1cmUgdGhlCisgICAgLy8g
ZWxlbWVudCBpcyBrZXB0IGFyb3VuZC4KKyAgICBpZiAoZHkgJiYgbWFjICYmIHdlYmtpdCkgewor
ICAgICAgZm9yICh2YXIgY3VyID0gZS50YXJnZXQ7IGN1ciAhPSBzY3JvbGw7IGN1ciA9IGN1ci5w
YXJlbnROb2RlKSB7CisgICAgICAgIGlmIChjdXIubGluZU9iaikgeworICAgICAgICAgIGNtLmRp
c3BsYXkuY3VycmVudFdoZWVsVGFyZ2V0ID0gY3VyOworICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgICB9CisgICAgfQorCiAgICAgdmFyIHNjcm9sbCA9IGNtLmRpc3BsYXkuc2Nyb2xs
ZXI7Ci0gICAgaWYgKHdoZWVsUGl4ZWxzUGVyVW5pdCAhPSBudWxsKSB7CisgICAgLy8gT24gc29t
ZSBicm93c2VycywgaG9yaXpvbnRhbCBzY3JvbGxpbmcgd2lsbCBjYXVzZSByZWRyYXdzIHRvCisg
ICAgLy8gaGFwcGVuIGJlZm9yZSB0aGUgZ3V0dGVyIGhhcyBiZWVuIHJlYWxpZ25lZCwgY2F1c2lu
ZyBpdCB0bworICAgIC8vIHdyaWdnbGUgYXJvdW5kIGluIGEgbW9zdCB1bnNlZW1seSB3YXkuIFdo
ZW4gd2UgaGF2ZSBhbgorICAgIC8vIGVzdGltYXRlZCBwaXhlbHMvZGVsdGEgdmFsdWUsIHdlIGp1
c3QgaGFuZGxlIGhvcml6b250YWwKKyAgICAvLyBzY3JvbGxpbmcgZW50aXJlbHkgaGVyZS4gSXQn
bGwgYmUgc2xpZ2h0bHkgb2ZmIGZyb20gbmF0aXZlLCBidXQKKyAgICAvLyBiZXR0ZXIgdGhhbiBn
bGl0Y2hpbmcgb3V0LgorICAgIGlmIChkeCAmJiAhZ2Vja28gJiYgIW9wZXJhICYmIHdoZWVsUGl4
ZWxzUGVyVW5pdCAhPSBudWxsKSB7CisgICAgICBpZiAoZHkpCisgICAgICAgIHNldFNjcm9sbFRv
cChjbSwgTWF0aC5tYXgoMCwgTWF0aC5taW4oc2Nyb2xsLnNjcm9sbFRvcCArIGR5ICogd2hlZWxQ
aXhlbHNQZXJVbml0LCBzY3JvbGwuc2Nyb2xsSGVpZ2h0IC0gc2Nyb2xsLmNsaWVudEhlaWdodCkp
KTsKKyAgICAgIHNldFNjcm9sbExlZnQoY20sIE1hdGgubWF4KDAsIE1hdGgubWluKHNjcm9sbC5z
Y3JvbGxMZWZ0ICsgZHggKiB3aGVlbFBpeGVsc1BlclVuaXQsIHNjcm9sbC5zY3JvbGxXaWR0aCAt
IHNjcm9sbC5jbGllbnRXaWR0aCkpKTsKKyAgICAgIGVfcHJldmVudERlZmF1bHQoZSk7CisgICAg
ICB3aGVlbFN0YXJ0WCA9IG51bGw7IC8vIEFib3J0IG1lYXN1cmVtZW50LCBpZiBpbiBwcm9ncmVz
cworICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChkeSAmJiB3aGVlbFBpeGVsc1BlclVu
aXQgIT0gbnVsbCkgewogICAgICAgdmFyIHBpeGVscyA9IGR5ICogd2hlZWxQaXhlbHNQZXJVbml0
OwogICAgICAgdmFyIHRvcCA9IGNtLnZpZXcuc2Nyb2xsVG9wLCBib3QgPSB0b3AgKyBjbS5kaXNw
bGF5LndyYXBwZXIuY2xpZW50SGVpZ2h0OwotICAgICAgaWYgKHBpeGVscyA8IDApIHRvcCA9IE1h
dGgubWF4KDAsIHRvcCArIHBpeGVscyk7Ci0gICAgICBlbHNlIGJvdCA9IE1hdGgubWluKGNtLnZp
ZXcuZG9jLmhlaWdodCwgYm90ICsgcGl4ZWxzKTsKKyAgICAgIGlmIChwaXhlbHMgPCAwKSB0b3Ag
PSBNYXRoLm1heCgwLCB0b3AgKyBwaXhlbHMgLSA1MCk7CisgICAgICBlbHNlIGJvdCA9IE1hdGgu
bWluKGNtLnZpZXcuZG9jLmhlaWdodCwgYm90ICsgcGl4ZWxzICsgNTApOwogICAgICAgdXBkYXRl
RGlzcGxheShjbSwgW10sIHt0b3A6IHRvcCwgYm90dG9tOiBib3R9KTsKICAgICB9CisKICAgICBp
ZiAod2hlZWxTYW1wbGVzIDwgMjApIHsKICAgICAgIGlmICh3aGVlbFN0YXJ0WCA9PSBudWxsKSB7
CiAgICAgICAgIHdoZWVsU3RhcnRYID0gc2Nyb2xsLnNjcm9sbExlZnQ7IHdoZWVsU3RhcnRZID0g
c2Nyb2xsLnNjcm9sbFRvcDsKICAgICAgICAgd2hlZWxEWCA9IGR4OyB3aGVlbERZID0gZHk7CiAg
ICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CisgICAgICAgICAgaWYgKHdoZWVsU3RhcnRY
ID09IG51bGwpIHJldHVybjsKICAgICAgICAgICB2YXIgbW92ZWRYID0gc2Nyb2xsLnNjcm9sbExl
ZnQgLSB3aGVlbFN0YXJ0WDsKICAgICAgICAgICB2YXIgbW92ZWRZID0gc2Nyb2xsLnNjcm9sbFRv
cCAtIHdoZWVsU3RhcnRZOwogICAgICAgICAgIHZhciBzYW1wbGUgPSAobW92ZWRZICYmIHdoZWVs
RFkgJiYgbW92ZWRZIC8gd2hlZWxEWSkgfHwKQEAgLTE2MDUsMTAgKzE2OTAsMTMgQEAgd2luZG93
LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgICBib3VuZCA9IGNvbW1hbmRzW2JvdW5k
XTsKICAgICAgIGlmICghYm91bmQpIHJldHVybiBmYWxzZTsKICAgICB9CisgICAgLy8gRW5zdXJl
IHByZXZpb3VzIGlucHV0IGhhcyBiZWVuIHJlYWQsIHNvIHRoYXQgdGhlIGhhbmRsZXIgc2VlcyBh
CisgICAgLy8gY29uc2lzdGVudCB2aWV3IG9mIHRoZSBkb2N1bWVudAorICAgIGlmIChjbS5kaXNw
bGF5LnBvbGxpbmdGYXN0ICYmIHJlYWRJbnB1dChjbSkpIGNtLmRpc3BsYXkucG9sbGluZ0Zhc3Qg
PSBmYWxzZTsKICAgICB2YXIgdmlldyA9IGNtLnZpZXcsIHByZXZTaGlmdCA9IHZpZXcuc2VsLnNo
aWZ0OwogICAgIHRyeSB7CiAgICAgICBpZiAoaXNSZWFkT25seShjbSkpIHZpZXcuc3VwcHJlc3NF
ZGl0cyA9IHRydWU7Ci0gICAgICBpZiAoZHJvcFNoaWZ0KSB2aWV3LnNlbC5zaGlmdCA9IG51bGw7
CisgICAgICBpZiAoZHJvcFNoaWZ0KSB2aWV3LnNlbC5zaGlmdCA9IGZhbHNlOwogICAgICAgYm91
bmQoY20pOwogICAgIH0gY2F0Y2goZSkgewogICAgICAgaWYgKGUgIT0gUGFzcykgdGhyb3cgZTsK
QEAgLTE2MjAsNiArMTcwOCwxMyBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsK
ICAgICByZXR1cm4gdHJ1ZTsKICAgfQogCisgIGZ1bmN0aW9uIGFsbEtleU1hcHMoY20pIHsKKyAg
ICB2YXIgbWFwcyA9IGNtLnZpZXcua2V5TWFwcy5zbGljZSgwKTsKKyAgICBtYXBzLnB1c2goY20u
b3B0aW9ucy5rZXlNYXApOworICAgIGlmIChjbS5vcHRpb25zLmV4dHJhS2V5cykgbWFwcy51bnNo
aWZ0KGNtLm9wdGlvbnMuZXh0cmFLZXlzKTsKKyAgICByZXR1cm4gbWFwczsKKyAgfQorCiAgIHZh
ciBtYXliZVRyYW5zaXRpb247CiAgIGZ1bmN0aW9uIGhhbmRsZUtleUJpbmRpbmcoY20sIGUpIHsK
ICAgICAvLyBIYW5kbGUgYXV0byBrZXltYXAgdHJhbnNpdGlvbnMKQEAgLTE2MzEsNyArMTcyNiw2
IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgIH0sIDUwKTsKIAogICAg
IHZhciBuYW1lID0ga2V5TmFtZXNbZV9wcm9wKGUsICJrZXlDb2RlIildLCBoYW5kbGVkID0gZmFs
c2U7Ci0gICAgdmFyIGZsaXBDdHJsQ21kID0gb3BlcmEgJiYgbWFjOwogICAgIGlmIChuYW1lID09
IG51bGwgfHwgZS5hbHRHcmFwaEtleSkgcmV0dXJuIGZhbHNlOwogICAgIGlmIChlX3Byb3AoZSwg
ImFsdEtleSIpKSBuYW1lID0gIkFsdC0iICsgbmFtZTsKICAgICBpZiAoZV9wcm9wKGUsIGZsaXBD
dHJsQ21kID8gIm1ldGFLZXkiIDogImN0cmxLZXkiKSkgbmFtZSA9ICJDdHJsLSIgKyBuYW1lOwpA
QCAtMTYzOSwxNSArMTczMywxNiBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsK
IAogICAgIHZhciBzdG9wcGVkID0gZmFsc2U7CiAgICAgZnVuY3Rpb24gc3RvcCgpIHsgc3RvcHBl
ZCA9IHRydWU7IH0KKyAgICB2YXIga2V5bWFwcyA9IGFsbEtleU1hcHMoY20pOwogCiAgICAgaWYg
KGVfcHJvcChlLCAic2hpZnRLZXkiKSkgewotICAgICAgaGFuZGxlZCA9IGxvb2t1cEtleSgiU2hp
ZnQtIiArIG5hbWUsIGNtLm9wdGlvbnMuZXh0cmFLZXlzLCBjbS5vcHRpb25zLmtleU1hcCwKKyAg
ICAgIGhhbmRsZWQgPSBsb29rdXBLZXkoIlNoaWZ0LSIgKyBuYW1lLCBrZXltYXBzLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbihiKSB7cmV0dXJuIGRvSGFuZGxlQmluZGluZyhj
bSwgYiwgdHJ1ZSk7fSwgc3RvcCkKLSAgICAgICAgfHwgbG9va3VwS2V5KG5hbWUsIGNtLm9wdGlv
bnMuZXh0cmFLZXlzLCBjbS5vcHRpb25zLmtleU1hcCwgZnVuY3Rpb24oYikgeworICAgICAgICB8
fCBsb29rdXBLZXkobmFtZSwga2V5bWFwcywgZnVuY3Rpb24oYikgewogICAgICAgICAgIGlmICh0
eXBlb2YgYiA9PSAic3RyaW5nIiAmJiAvXmdvW0EtWl0vLnRlc3QoYikpIHJldHVybiBkb0hhbmRs
ZUJpbmRpbmcoY20sIGIpOwogICAgICAgICB9LCBzdG9wKTsKICAgICB9IGVsc2UgewotICAgICAg
aGFuZGxlZCA9IGxvb2t1cEtleShuYW1lLCBjbS5vcHRpb25zLmV4dHJhS2V5cywgY20ub3B0aW9u
cy5rZXlNYXAsCisgICAgICBoYW5kbGVkID0gbG9va3VwS2V5KG5hbWUsIGtleW1hcHMsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uKGIpIHsgcmV0dXJuIGRvSGFuZGxlQmluZGlu
ZyhjbSwgYik7IH0sIHN0b3ApOwogICAgIH0KICAgICBpZiAoc3RvcHBlZCkgaGFuZGxlZCA9IGZh
bHNlOwpAQCAtMTY2MCw3ICsxNzU1LDcgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24o
KSB7CiAgIH0KIAogICBmdW5jdGlvbiBoYW5kbGVDaGFyQmluZGluZyhjbSwgZSwgY2gpIHsKLSAg
ICB2YXIgaGFuZGxlZCA9IGxvb2t1cEtleSgiJyIgKyBjaCArICInIiwgY20ub3B0aW9ucy5leHRy
YUtleXMsIGNtLm9wdGlvbnMua2V5TWFwLAorICAgIHZhciBoYW5kbGVkID0gbG9va3VwS2V5KCIn
IiArIGNoICsgIiciLCBhbGxLZXlNYXBzKGNtKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBmdW5jdGlvbihiKSB7IHJldHVybiBkb0hhbmRsZUJpbmRpbmcoY20sIGIsIHRydWUpOyB9KTsK
ICAgICBpZiAoaGFuZGxlZCkgewogICAgICAgZV9wcmV2ZW50RGVmYXVsdChlKTsKQEAgLTE2NzQs
MjQgKzE3NjksMjIgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgdmFy
IGNtID0gdGhpczsKICAgICBpZiAoIWNtLnZpZXcuZm9jdXNlZCkgb25Gb2N1cyhjbSk7CiAgICAg
aWYgKGllICYmIGUua2V5Q29kZSA9PSAyNykgeyBlLnJldHVyblZhbHVlID0gZmFsc2U7IH0KLSAg
ICBpZiAoY20uZGlzcGxheS5wb2xsaW5nRmFzdCkgeyBpZiAocmVhZElucHV0KGNtKSkgY20uZGlz
cGxheS5wb2xsaW5nRmFzdCA9IGZhbHNlOyB9CiAgICAgaWYgKGNtLm9wdGlvbnMub25LZXlFdmVu
dCAmJiBjbS5vcHRpb25zLm9uS2V5RXZlbnQoY20sIGFkZFN0b3AoZSkpKSByZXR1cm47CiAgICAg
dmFyIGNvZGUgPSBlX3Byb3AoZSwgImtleUNvZGUiKTsKICAgICAvLyBJRSBkb2VzIHN0cmFuZ2Ug
dGhpbmdzIHdpdGggZXNjYXBlLgotICAgIHNldFNoaWZ0KGNtLnZpZXcsIGNvZGUgPT0gMTYgfHwg
ZV9wcm9wKGUsICJzaGlmdEtleSIpKTsKKyAgICBjbS52aWV3LnNlbC5zaGlmdCA9IGNvZGUgPT0g
MTYgfHwgZV9wcm9wKGUsICJzaGlmdEtleSIpOwogICAgIC8vIEZpcnN0IGdpdmUgb25LZXlFdmVu
dCBvcHRpb24gYSBjaGFuY2UgdG8gaGFuZGxlIHRoaXMuCiAgICAgdmFyIGhhbmRsZWQgPSBoYW5k
bGVLZXlCaW5kaW5nKGNtLCBlKTsKICAgICBpZiAob3BlcmEpIHsKICAgICAgIGxhc3RTdG9wcGVk
S2V5ID0gaGFuZGxlZCA/IGNvZGUgOiBudWxsOwogICAgICAgLy8gT3BlcmEgaGFzIG5vIGN1dCBl
dmVudC4uLiB3ZSB0cnkgdG8gYXQgbGVhc3QgY2F0Y2ggdGhlIGtleSBjb21ibwotICAgICAgaWYg
KCFoYW5kbGVkICYmIGNvZGUgPT0gODggJiYgZV9wcm9wKGUsIG1hYyA/ICJtZXRhS2V5IiA6ICJj
dHJsS2V5IikpCisgICAgICBpZiAoIWhhbmRsZWQgJiYgY29kZSA9PSA4OCAmJiAhaGFzQ29weUV2
ZW50ICYmIGVfcHJvcChlLCBtYWMgPyAibWV0YUtleSIgOiAiY3RybEtleSIpKQogICAgICAgICBj
bS5yZXBsYWNlU2VsZWN0aW9uKCIiKTsKICAgICB9CiAgIH0KIAogICBmdW5jdGlvbiBvbktleVBy
ZXNzKGUpIHsKICAgICB2YXIgY20gPSB0aGlzOwotICAgIGlmIChjbS5kaXNwbGF5LnBvbGxpbmdG
YXN0KSByZWFkSW5wdXQoY20pOwogICAgIGlmIChjbS5vcHRpb25zLm9uS2V5RXZlbnQgJiYgY20u
b3B0aW9ucy5vbktleUV2ZW50KGNtLCBhZGRTdG9wKGUpKSkgcmV0dXJuOwogICAgIHZhciBrZXlD
b2RlID0gZV9wcm9wKGUsICJrZXlDb2RlIiksIGNoYXJDb2RlID0gZV9wcm9wKGUsICJjaGFyQ29k
ZSIpOwogICAgIGlmIChvcGVyYSAmJiBrZXlDb2RlID09IGxhc3RTdG9wcGVkS2V5KSB7bGFzdFN0
b3BwZWRLZXkgPSBudWxsOyBlX3ByZXZlbnREZWZhdWx0KGUpOyByZXR1cm47fQpAQCAtMTcyNCwx
MiArMTgxNywxNSBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICAgIGNt
LmRpc3BsYXkuc2Nyb2xsZXIuY2xhc3NOYW1lID0gY20uZGlzcGxheS5zY3JvbGxlci5jbGFzc05h
bWUucmVwbGFjZSgiIENvZGVNaXJyb3ItZm9jdXNlZCIsICIiKTsKICAgICB9CiAgICAgY2xlYXJJ
bnRlcnZhbChjbS5kaXNwbGF5LmJsaW5rZXIpOwotICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7
aWYgKCFjbS52aWV3LmZvY3VzZWQpIGNtLnZpZXcuc2VsLnNoaWZ0ID0gbnVsbDt9LCAxNTApOwor
ICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7aWYgKCFjbS52aWV3LmZvY3VzZWQpIGNtLnZpZXcu
c2VsLnNoaWZ0ID0gZmFsc2U7fSwgMTUwKTsKICAgfQogCiAgIHZhciBkZXRlY3RpbmdTZWxlY3RB
bGw7CiAgIGZ1bmN0aW9uIG9uQ29udGV4dE1lbnUoY20sIGUpIHsKLSAgICB2YXIgZGlzcGxheSA9
IGNtLmRpc3BsYXksIHNlbCA9IGNtLnZpZXcuc2VsOworICAgIHZhciBkaXNwbGF5ID0gY20uZGlz
cGxheTsKKyAgICBpZiAoZXZlbnRJbldpZGdldChkaXNwbGF5LCBlKSkgcmV0dXJuOworICAgIAor
ICAgIHZhciBzZWwgPSBjbS52aWV3LnNlbDsKICAgICB2YXIgcG9zID0gcG9zRnJvbU1vdXNlKGNt
LCBlKSwgc2Nyb2xsUG9zID0gZGlzcGxheS5zY3JvbGxlci5zY3JvbGxUb3A7CiAgICAgaWYgKCFw
b3MgfHwgb3BlcmEpIHJldHVybjsgLy8gT3BlcmEgaXMgZGlmZmljdWx0LgogICAgIGlmIChwb3NF
cShzZWwuZnJvbSwgc2VsLnRvKSB8fCBwb3NMZXNzKHBvcywgc2VsLmZyb20pIHx8ICFwb3NMZXNz
KHBvcywgc2VsLnRvKSkKQEAgLTE3ODEsNjUgKzE4NzcsNjMgQEAgd2luZG93LkNvZGVNaXJyb3Ig
PSAoZnVuY3Rpb24oKSB7CiAKICAgLy8gUmVwbGFjZSB0aGUgcmFuZ2UgZnJvbSBmcm9tIHRvIHRv
IGJ5IHRoZSBzdHJpbmdzIGluIG5ld1RleHQuCiAgIC8vIEFmdGVyd2FyZHMsIHNldCB0aGUgc2Vs
ZWN0aW9uIHRvIHNlbEZyb20sIHNlbFRvLgotICBmdW5jdGlvbiB1cGRhdGVEb2MoY20sIGZyb20s
IHRvLCBuZXdUZXh0LCBzZWxVcGRhdGUpIHsKKyAgZnVuY3Rpb24gdXBkYXRlRG9jKGNtLCBmcm9t
LCB0bywgbmV3VGV4dCwgc2VsVXBkYXRlLCBvcmlnaW4pIHsKICAgICAvLyBQb3NzaWJseSBzcGxp
dCBvciBzdXBwcmVzcyB0aGUgdXBkYXRlIGJhc2VkIG9uIHRoZSBwcmVzZW5jZQogICAgIC8vIG9m
IHJlYWQtb25seSBzcGFucyBpbiBpdHMgcmFuZ2UuCiAgICAgdmFyIHNwbGl0ID0gc2F3UmVhZE9u
bHlTcGFucyAmJgogICAgICAgcmVtb3ZlUmVhZE9ubHlSYW5nZXMoY20udmlldy5kb2MsIGZyb20s
IHRvKTsKICAgICBpZiAoc3BsaXQpIHsKICAgICAgIGZvciAodmFyIGkgPSBzcGxpdC5sZW5ndGgg
LSAxOyBpID49IDE7IC0taSkKLSAgICAgICAgdXBkYXRlRG9jSW5uZXIoY20sIHNwbGl0W2ldLmZy
b20sIHNwbGl0W2ldLnRvLCBbIiJdKTsKKyAgICAgICAgdXBkYXRlRG9jSW5uZXIoY20sIHNwbGl0
W2ldLmZyb20sIHNwbGl0W2ldLnRvLCBbIiJdLCBvcmlnaW4pOwogICAgICAgaWYgKHNwbGl0Lmxl
bmd0aCkKLSAgICAgICAgcmV0dXJuIHVwZGF0ZURvY0lubmVyKGNtLCBzcGxpdFswXS5mcm9tLCBz
cGxpdFswXS50bywgbmV3VGV4dCwgc2VsVXBkYXRlKTsKKyAgICAgICAgcmV0dXJuIHVwZGF0ZURv
Y0lubmVyKGNtLCBzcGxpdFswXS5mcm9tLCBzcGxpdFswXS50bywgbmV3VGV4dCwgc2VsVXBkYXRl
LCBvcmlnaW4pOwogICAgIH0gZWxzZSB7Ci0gICAgICByZXR1cm4gdXBkYXRlRG9jSW5uZXIoY20s
IGZyb20sIHRvLCBuZXdUZXh0LCBzZWxVcGRhdGUpOworICAgICAgcmV0dXJuIHVwZGF0ZURvY0lu
bmVyKGNtLCBmcm9tLCB0bywgbmV3VGV4dCwgc2VsVXBkYXRlLCBvcmlnaW4pOwogICAgIH0KICAg
fQogCi0gIGZ1bmN0aW9uIHVwZGF0ZURvY0lubmVyKGNtLCBmcm9tLCB0bywgbmV3VGV4dCwgc2Vs
VXBkYXRlKSB7CisgIGZ1bmN0aW9uIHVwZGF0ZURvY0lubmVyKGNtLCBmcm9tLCB0bywgbmV3VGV4
dCwgc2VsVXBkYXRlLCBvcmlnaW4pIHsKICAgICBpZiAoY20udmlldy5zdXBwcmVzc0VkaXRzKSBy
ZXR1cm47CiAKICAgICB2YXIgdmlldyA9IGNtLnZpZXcsIGRvYyA9IHZpZXcuZG9jLCBvbGQgPSBb
XTsKICAgICBkb2MuaXRlcihmcm9tLmxpbmUsIHRvLmxpbmUgKyAxLCBmdW5jdGlvbihsaW5lKSB7
CiAgICAgICBvbGQucHVzaChuZXdITChsaW5lLnRleHQsIGxpbmUubWFya2VkU3BhbnMpKTsKICAg
ICB9KTsKLSAgICBpZiAodmlldy5oaXN0b3J5KSB7Ci0gICAgICBhZGRDaGFuZ2Uodmlldy5oaXN0
b3J5LCBmcm9tLmxpbmUsIG5ld1RleHQubGVuZ3RoLCBvbGQpOwotICAgICAgd2hpbGUgKHZpZXcu
aGlzdG9yeS5kb25lLmxlbmd0aCA+IGNtLm9wdGlvbnMudW5kb0RlcHRoKSB2aWV3Lmhpc3Rvcnku
ZG9uZS5zaGlmdCgpOwotICAgIH0KKyAgICB2YXIgc3RhcnRTZWxGcm9tID0gdmlldy5zZWwuZnJv
bSwgc3RhcnRTZWxUbyA9IHZpZXcuc2VsLnRvOwogICAgIHZhciBsaW5lcyA9IHVwZGF0ZU1hcmtl
ZFNwYW5zKGhsU3BhbnMob2xkWzBdKSwgaGxTcGFucyhsc3Qob2xkKSksIGZyb20uY2gsIHRvLmNo
LCBuZXdUZXh0KTsKLSAgICByZXR1cm4gdXBkYXRlRG9jTm9VbmRvKGNtLCBmcm9tLCB0bywgbGlu
ZXMsIHNlbFVwZGF0ZSk7CisgICAgdmFyIHJldHZhbCA9IHVwZGF0ZURvY05vVW5kbyhjbSwgZnJv
bSwgdG8sIGxpbmVzLCBzZWxVcGRhdGUsIG9yaWdpbik7CisgICAgaWYgKHZpZXcuaGlzdG9yeSkg
YWRkQ2hhbmdlKGNtLCBmcm9tLmxpbmUsIG5ld1RleHQubGVuZ3RoLCBvbGQsIG9yaWdpbiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRTZWxGcm9tLCBzdGFydFNlbFRvLCB2
aWV3LnNlbC5mcm9tLCB2aWV3LnNlbC50byk7CisgICAgcmV0dXJuIHJldHZhbDsKICAgfQogCi0g
IGZ1bmN0aW9uIHVucmVkb0hlbHBlcihjbSwgZnJvbSwgdG8sIGRpcikgeworICBmdW5jdGlvbiB1
bnJlZG9IZWxwZXIoY20sIHR5cGUpIHsKICAgICB2YXIgZG9jID0gY20udmlldy5kb2MsIGhpc3Qg
PSBjbS52aWV3Lmhpc3Rvcnk7Ci0gICAgaWYgKCFmcm9tLmxlbmd0aCkgcmV0dXJuOwotICAgIHZh
ciBzZXQgPSBmcm9tLnBvcCgpLCBvdXQgPSBbXTsKLSAgICBmb3IgKHZhciBpID0gc2V0Lmxlbmd0
aCAtIDE7IGkgPj0gMDsgaSAtPSAxKSB7Ci0gICAgICBoaXN0LmRpcnR5Q291bnRlciArPSBkaXI7
Ci0gICAgICB2YXIgY2hhbmdlID0gc2V0W2ldOworICAgIHZhciBzZXQgPSAodHlwZSA9PSAidW5k
byIgPyBoaXN0LmRvbmUgOiBoaXN0LnVuZG9uZSkucG9wKCk7CisgICAgaWYgKCFzZXQpIHJldHVy
bjsKKyAgICB2YXIgYW50aSA9IHtldmVudHM6IFtdLCBmcm9tQmVmb3JlOiBzZXQuZnJvbUFmdGVy
LCB0b0JlZm9yZTogc2V0LnRvQWZ0ZXIsCisgICAgICAgICAgICAgICAgZnJvbUFmdGVyOiBzZXQu
ZnJvbUJlZm9yZSwgdG9BZnRlcjogc2V0LnRvQmVmb3JlfTsKKyAgICBmb3IgKHZhciBpID0gc2V0
LmV2ZW50cy5sZW5ndGggLSAxOyBpID49IDA7IGkgLT0gMSkgeworICAgICAgaGlzdC5kaXJ0eUNv
dW50ZXIgKz0gdHlwZSA9PSAidW5kbyIgPyAtMSA6IDE7CisgICAgICB2YXIgY2hhbmdlID0gc2V0
LmV2ZW50c1tpXTsKICAgICAgIHZhciByZXBsYWNlZCA9IFtdLCBlbmQgPSBjaGFuZ2Uuc3RhcnQg
KyBjaGFuZ2UuYWRkZWQ7CiAgICAgICBkb2MuaXRlcihjaGFuZ2Uuc3RhcnQsIGVuZCwgZnVuY3Rp
b24obGluZSkgeyByZXBsYWNlZC5wdXNoKG5ld0hMKGxpbmUudGV4dCwgbGluZS5tYXJrZWRTcGFu
cykpOyB9KTsKLSAgICAgIG91dC5wdXNoKHtzdGFydDogY2hhbmdlLnN0YXJ0LCBhZGRlZDogY2hh
bmdlLm9sZC5sZW5ndGgsIG9sZDogcmVwbGFjZWR9KTsKLSAgICAgIHZhciBwb3MgPSB7bGluZTog
Y2hhbmdlLnN0YXJ0ICsgY2hhbmdlLm9sZC5sZW5ndGggLSAxLAotICAgICAgICAgICAgICAgICBj
aDogZWRpdEVuZChobFRleHQobHN0KHJlcGxhY2VkKSksIGhsVGV4dChsc3QoY2hhbmdlLm9sZCkp
KX07CisgICAgICBhbnRpLmV2ZW50cy5wdXNoKHtzdGFydDogY2hhbmdlLnN0YXJ0LCBhZGRlZDog
Y2hhbmdlLm9sZC5sZW5ndGgsIG9sZDogcmVwbGFjZWR9KTsKKyAgICAgIHZhciBzZWxQb3MgPSBp
ID8gbnVsbCA6IHtmcm9tOiBzZXQuZnJvbUJlZm9yZSwgdG86IHNldC50b0JlZm9yZX07CiAgICAg
ICB1cGRhdGVEb2NOb1VuZG8oY20sIHtsaW5lOiBjaGFuZ2Uuc3RhcnQsIGNoOiAwfSwge2xpbmU6
IGVuZCAtIDEsIGNoOiBnZXRMaW5lKGRvYywgZW5kLTEpLnRleHQubGVuZ3RofSwKLSAgICAgICAg
ICAgICAgICAgICAgICBjaGFuZ2Uub2xkLCBwb3MpOworICAgICAgICAgICAgICAgICAgICAgIGNo
YW5nZS5vbGQsIHNlbFBvcywgdHlwZSk7CiAgICAgfQotICAgIHRvLnB1c2gob3V0KTsKKyAgICAo
dHlwZSA9PSAidW5kbyIgPyBoaXN0LnVuZG9uZSA6IGhpc3QuZG9uZSkucHVzaChhbnRpKTsKICAg
fQogCi0gIGZ1bmN0aW9uIHVwZGF0ZURvY05vVW5kbyhjbSwgZnJvbSwgdG8sIGxpbmVzLCBzZWxV
cGRhdGUpIHsKKyAgZnVuY3Rpb24gdXBkYXRlRG9jTm9VbmRvKGNtLCBmcm9tLCB0bywgbGluZXMs
IHNlbFVwZGF0ZSwgb3JpZ2luKSB7CiAgICAgdmFyIHZpZXcgPSBjbS52aWV3LCBkb2MgPSB2aWV3
LmRvYywgZGlzcGxheSA9IGNtLmRpc3BsYXk7CiAgICAgaWYgKHZpZXcuc3VwcHJlc3NFZGl0cykg
cmV0dXJuOwogCiAgICAgdmFyIG5saW5lcyA9IHRvLmxpbmUgLSBmcm9tLmxpbmUsIGZpcnN0TGlu
ZSA9IGdldExpbmUoZG9jLCBmcm9tLmxpbmUpLCBsYXN0TGluZSA9IGdldExpbmUoZG9jLCB0by5s
aW5lKTsKICAgICB2YXIgcmVjb21wdXRlTWF4TGVuZ3RoID0gZmFsc2UsIGNoZWNrV2lkdGhTdGFy
dCA9IGZyb20ubGluZTsKICAgICBpZiAoIWNtLm9wdGlvbnMubGluZVdyYXBwaW5nKSB7Ci0gICAg
ICBmb3IgKHZhciBjdXIgPSBmaXJzdExpbmUsIG1lcmdlZDsgbWVyZ2VkID0gY29sbGFwc2VkU3Bh
bkF0U3RhcnQoY3VyKTspIHsKLSAgICAgICAgY2hlY2tXaWR0aFN0YXJ0ID0gbWVyZ2VkLmZpbmQo
KS5mcm9tLmxpbmU7Ci0gICAgICAgIGN1ciA9IGdldExpbmUoZG9jLCBjaGVja1dpZHRoU3RhcnQp
OwotICAgICAgfQorICAgICAgY2hlY2tXaWR0aFN0YXJ0ID0gbGluZU5vKHZpc3VhbExpbmUoZG9j
LCBmaXJzdExpbmUpKTsKICAgICAgIGRvYy5pdGVyKGNoZWNrV2lkdGhTdGFydCwgdG8ubGluZSAr
IDEsIGZ1bmN0aW9uKGxpbmUpIHsKICAgICAgICAgaWYgKGxpbmVMZW5ndGgoZG9jLCBsaW5lKSA9
PSB2aWV3Lm1heExpbmVMZW5ndGgpIHsKICAgICAgICAgICByZWNvbXB1dGVNYXhMZW5ndGggPSB0
cnVlOwpAQCAtMTg1NCw3ICsxOTQ4LDcgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24o
KSB7CiAgICAgaWYgKGZyb20uY2ggPT0gMCAmJiB0by5jaCA9PSAwICYmIGhsVGV4dChsYXN0SEwp
ID09ICIiKSB7CiAgICAgICAvLyBUaGlzIGlzIGEgd2hvbGUtbGluZSByZXBsYWNlLiBUcmVhdGVk
IHNwZWNpYWxseSB0byBtYWtlCiAgICAgICAvLyBzdXJlIGxpbmUgb2JqZWN0cyBtb3ZlIHRoZSB3
YXkgdGhleSBhcmUgc3VwcG9zZWQgdG8uCi0gICAgICB2YXIgYWRkZWQgPSBbXSwgcHJldkxpbmUg
PSBudWxsOworICAgICAgdmFyIGFkZGVkID0gW107CiAgICAgICBmb3IgKHZhciBpID0gMCwgZSA9
IGxpbmVzLmxlbmd0aCAtIDE7IGkgPCBlOyArK2kpCiAgICAgICAgIGFkZGVkLnB1c2gobWFrZUxp
bmUoaGxUZXh0KGxpbmVzW2ldKSwgaGxTcGFucyhsaW5lc1tpXSksIHRoKSk7CiAgICAgICB1cGRh
dGVMaW5lKGNtLCBsYXN0TGluZSwgbGFzdExpbmUudGV4dCwgaGxTcGFucyhsYXN0SEwpKTsKQEAg
LTE5MTcsNyArMjAxMSw3IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAg
ICAgLy8gdGhlIGNoYW5nZSBldmVudCBoYW5kbGVyIGV4cGVjdHMKICAgICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgbGluZXMubGVuZ3RoOyArK2kpCiAgICAgICAgIGlmICh0eXBlb2YgbGluZXNbaV0g
IT0gInN0cmluZyIpIGxpbmVzW2ldID0gbGluZXNbaV0udGV4dDsKLSAgICAgIHZhciBjaGFuZ2VP
YmogPSB7ZnJvbTogZnJvbSwgdG86IHRvLCB0ZXh0OiBsaW5lc307CisgICAgICB2YXIgY2hhbmdl
T2JqID0ge2Zyb206IGZyb20sIHRvOiB0bywgdGV4dDogbGluZXMsIG9yaWdpbjogb3JpZ2lufTsK
ICAgICAgIGlmIChjbS5jdXJPcC50ZXh0Q2hhbmdlZCkgewogICAgICAgICBmb3IgKHZhciBjdXIg
PSBjbS5jdXJPcC50ZXh0Q2hhbmdlZDsgY3VyLm5leHQ7IGN1ciA9IGN1ci5uZXh0KSB7fQogICAg
ICAgICBjdXIubmV4dCA9IGNoYW5nZU9iajsKQEAgLTE5MjcsOCArMjAyMSw5IEBAIHdpbmRvdy5D
b2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgIC8vIFVwZGF0ZSB0aGUgc2VsZWN0aW9uCiAg
ICAgdmFyIG5ld1NlbEZyb20sIG5ld1NlbFRvLCBlbmQgPSB7bGluZTogZnJvbS5saW5lICsgbGlu
ZXMubGVuZ3RoIC0gMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaDog
aGxUZXh0KGxhc3RITCkubGVuZ3RoICArIChsaW5lcy5sZW5ndGggPT0gMSA/IGZyb20uY2ggOiAw
KX07Ci0gICAgaWYgKHR5cGVvZiBzZWxVcGRhdGUgPT0gIm9iamVjdCIgJiYgc2VsVXBkYXRlLmxp
bmUgIT0gbnVsbCkgewotICAgICAgbmV3U2VsRnJvbSA9IG5ld1NlbFRvID0gc2VsVXBkYXRlOwor
ICAgIGlmIChzZWxVcGRhdGUgJiYgdHlwZW9mIHNlbFVwZGF0ZSAhPSAic3RyaW5nIikgeworICAg
ICAgaWYgKHNlbFVwZGF0ZS5mcm9tKSB7IG5ld1NlbEZyb20gPSBzZWxVcGRhdGUuZnJvbTsgbmV3
U2VsVG8gPSBzZWxVcGRhdGUudG87IH0KKyAgICAgIGVsc2UgbmV3U2VsRnJvbSA9IG5ld1NlbFRv
ID0gc2VsVXBkYXRlOwogICAgIH0gZWxzZSBpZiAoc2VsVXBkYXRlID09ICJlbmQiKSB7CiAgICAg
ICBuZXdTZWxGcm9tID0gbmV3U2VsVG8gPSBlbmQ7CiAgICAgfSBlbHNlIGlmIChzZWxVcGRhdGUg
PT0gInN0YXJ0IikgewpAQCAtMTk1MiwyMCArMjA0NywxMCBAQCB3aW5kb3cuQ29kZU1pcnJvciA9
IChmdW5jdGlvbigpIHsKICAgICByZXR1cm4gZW5kOwogICB9CiAKLSAgZnVuY3Rpb24gcmVwbGFj
ZVJhbmdlKGNtLCBjb2RlLCBmcm9tLCB0bykgeworICBmdW5jdGlvbiByZXBsYWNlUmFuZ2UoY20s
IGNvZGUsIGZyb20sIHRvLCBvcmlnaW4pIHsKICAgICBpZiAoIXRvKSB0byA9IGZyb207CiAgICAg
aWYgKHBvc0xlc3ModG8sIGZyb20pKSB7IHZhciB0bXAgPSB0bzsgdG8gPSBmcm9tOyBmcm9tID0g
dG1wOyB9Ci0gICAgY29kZSA9IHNwbGl0TGluZXMoY29kZSk7Ci0gICAgZnVuY3Rpb24gYWRqdXN0
UG9zKHBvcykgewotICAgICAgaWYgKHBvc0xlc3MocG9zLCBmcm9tKSkgcmV0dXJuIHBvczsKLSAg
ICAgIGlmICghcG9zTGVzcyh0bywgcG9zKSkgcmV0dXJuIGVuZDsKLSAgICAgIHZhciBsaW5lID0g
cG9zLmxpbmUgKyBjb2RlLmxlbmd0aCAtICh0by5saW5lIC0gZnJvbS5saW5lKSAtIDE7Ci0gICAg
ICB2YXIgY2ggPSBwb3MuY2g7Ci0gICAgICBpZiAocG9zLmxpbmUgPT0gdG8ubGluZSkKLSAgICAg
ICAgY2ggKz0gbHN0KGNvZGUpLmxlbmd0aCAtICh0by5jaCAtICh0by5saW5lID09IGZyb20ubGlu
ZSA/IGZyb20uY2ggOiAwKSk7Ci0gICAgICByZXR1cm4ge2xpbmU6IGxpbmUsIGNoOiBjaH07Ci0g
ICAgfQotICAgIHJldHVybiB1cGRhdGVEb2MoY20sIGZyb20sIHRvLCBjb2RlKTsKKyAgICByZXR1
cm4gdXBkYXRlRG9jKGNtLCBmcm9tLCB0bywgc3BsaXRMaW5lcyhjb2RlKSwgbnVsbCwgb3JpZ2lu
KTsKICAgfQogCiAgIC8vIFNFTEVDVElPTgpAQCAtMTk4NSw1NiArMjA3MCw0OCBAQCB3aW5kb3cu
Q29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgfQogICBmdW5jdGlvbiBpc0xpbmUoZG9jLCBs
KSB7cmV0dXJuIGwgPj0gMCAmJiBsIDwgZG9jLnNpemU7fQogCi0gIGZ1bmN0aW9uIHNldFNoaWZ0
KHZpZXcsIHZhbCkgewotICAgIGlmICh2YWwpIHZpZXcuc2VsLnNoaWZ0ID0gdmlldy5zZWwuc2hp
ZnQgfHwgc2VsSGVhZCh2aWV3KTsKLSAgICBlbHNlIHZpZXcuc2VsLnNoaWZ0ID0gbnVsbDsKLSAg
fQotICBmdW5jdGlvbiBzZXRTZWxlY3Rpb25Vc2VyKGNtLCBmcm9tLCB0bywgYmlhcykgewotICAg
IHZhciB2aWV3ID0gY20udmlldywgc2ggPSB2aWV3LnNlbC5zaGlmdDsKLSAgICBpZiAoc2gpIHsK
LSAgICAgIHNoID0gY2xpcFBvcyh2aWV3LmRvYywgc2gpOwotICAgICAgaWYgKHBvc0xlc3Moc2gs
IGZyb20pKSBmcm9tID0gc2g7Ci0gICAgICBlbHNlIGlmIChwb3NMZXNzKHRvLCBzaCkpIHRvID0g
c2g7CisgIC8vIElmIHNoaWZ0IGlzIGhlbGQsIHRoaXMgd2lsbCBtb3ZlIHRoZSBzZWxlY3Rpb24g
YW5jaG9yLiBPdGhlcndpc2UsCisgIC8vIGl0J2xsIHNldCB0aGUgd2hvbGUgc2VsZWN0aW9uLgor
ICBmdW5jdGlvbiBleHRlbmRTZWxlY3Rpb24oY20sIHBvcywgb3RoZXIsIGJpYXMpIHsKKyAgICB2
YXIgc2VsID0gY20udmlldy5zZWw7CisgICAgaWYgKHNlbC5zaGlmdCB8fCBzZWwuZXh0ZW5kKSB7
CisgICAgICB2YXIgYW5jaG9yID0gc2VsLmFuY2hvcjsKKyAgICAgIGlmIChvdGhlcikgeworICAg
ICAgICB2YXIgcG9zQmVmb3JlID0gcG9zTGVzcyhwb3MsIGFuY2hvcik7CisgICAgICAgIGlmIChw
b3NCZWZvcmUgIT0gcG9zTGVzcyhvdGhlciwgYW5jaG9yKSkgeworICAgICAgICAgIGFuY2hvciA9
IHBvczsKKyAgICAgICAgICBwb3MgPSBvdGhlcjsKKyAgICAgICAgfSBlbHNlIGlmIChwb3NCZWZv
cmUgIT0gcG9zTGVzcyhwb3MsIG90aGVyKSkgeworICAgICAgICAgIHBvcyA9IG90aGVyOworICAg
ICAgICB9CisgICAgICB9CisgICAgICBzZXRTZWxlY3Rpb24oY20sIGFuY2hvciwgcG9zLCBiaWFz
KTsKKyAgICB9IGVsc2UgeworICAgICAgc2V0U2VsZWN0aW9uKGNtLCBwb3MsIG90aGVyIHx8IHBv
cywgYmlhcyk7CiAgICAgfQotICAgIHNldFNlbGVjdGlvbihjbSwgZnJvbSwgdG8sIGJpYXMpOwog
ICAgIGNtLmN1ck9wLnVzZXJTZWxDaGFuZ2UgPSB0cnVlOwogICB9CiAKICAgLy8gVXBkYXRlIHRo
ZSBzZWxlY3Rpb24uIExhc3QgdHdvIGFyZ3MgYXJlIG9ubHkgdXNlZCBieQogICAvLyB1cGRhdGVE
b2MsIHNpbmNlIHRoZXkgaGF2ZSB0byBiZSBleHByZXNzZWQgaW4gdGhlIGxpbmUKICAgLy8gbnVt
YmVycyBiZWZvcmUgdGhlIHVwZGF0ZS4KLSAgZnVuY3Rpb24gc2V0U2VsZWN0aW9uKGNtLCBmcm9t
LCB0bywgYmlhcywgY2hlY2tBdG9taWMpIHsKLSAgICBjbS5jdXJPcC51cGRhdGVJbnB1dCA9IHRy
dWU7Ci0gICAgdmFyIHNlbCA9IGNtLnZpZXcuc2VsLCBkb2MgPSBjbS52aWV3LmRvYzsKKyAgZnVu
Y3Rpb24gc2V0U2VsZWN0aW9uKGNtLCBhbmNob3IsIGhlYWQsIGJpYXMsIGNoZWNrQXRvbWljKSB7
CiAgICAgY20udmlldy5nb2FsQ29sdW1uID0gbnVsbDsKLSAgICBpZiAoIWNoZWNrQXRvbWljICYm
IHBvc0VxKHNlbC5mcm9tLCBmcm9tKSAmJiBwb3NFcShzZWwudG8sIHRvKSkgcmV0dXJuOwotICAg
IGlmIChwb3NMZXNzKHRvLCBmcm9tKSkge3ZhciB0bXAgPSB0bzsgdG8gPSBmcm9tOyBmcm9tID0g
dG1wO30KLQorICAgIHZhciBzZWwgPSBjbS52aWV3LnNlbDsKICAgICAvLyBTa2lwIG92ZXIgYXRv
bWljIHNwYW5zLgotICAgIGlmIChjaGVja0F0b21pYyB8fCAhcG9zRXEoZnJvbSwgc2VsLmZyb20p
KQotICAgICAgZnJvbSA9IHNraXBBdG9taWMoY20sIGZyb20sIGJpYXMsIGNoZWNrQXRvbWljICE9
ICJwdXNoIik7Ci0gICAgaWYgKGNoZWNrQXRvbWljIHx8ICFwb3NFcSh0bywgc2VsLnRvKSkKLSAg
ICAgIHRvID0gc2tpcEF0b21pYyhjbSwgdG8sIGJpYXMsIGNoZWNrQXRvbWljICE9ICJwdXNoIik7
Ci0KLSAgICBpZiAocG9zRXEoZnJvbSwgdG8pKSBzZWwuaW52ZXJ0ZWQgPSBmYWxzZTsKLSAgICBl
bHNlIGlmIChwb3NFcShmcm9tLCBzZWwudG8pKSBzZWwuaW52ZXJ0ZWQgPSBmYWxzZTsKLSAgICBl
bHNlIGlmIChwb3NFcSh0bywgc2VsLmZyb20pKSBzZWwuaW52ZXJ0ZWQgPSB0cnVlOwotCi0gICAg
aWYgKGNtLm9wdGlvbnMuYXV0b0NsZWFyRW1wdHlMaW5lcyAmJiBwb3NFcShzZWwuZnJvbSwgc2Vs
LnRvKSkgewotICAgICAgdmFyIGhlYWQgPSBzZWxIZWFkKGNtLnZpZXcpOwotICAgICAgaWYgKGhl
YWQubGluZSAhPSBzZWwuZnJvbS5saW5lICYmIHNlbC5mcm9tLmxpbmUgPCBkb2Muc2l6ZSkgewot
ICAgICAgICB2YXIgb2xkTGluZSA9IGdldExpbmUoZG9jLCBzZWwuZnJvbS5saW5lKTsKLSAgICAg
ICAgaWYgKC9eXHMrJC8udGVzdChvbGRMaW5lLnRleHQpKQotICAgICAgICAgIHNldFRpbWVvdXQo
b3BlcmF0aW9uKGNtLCBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgIGlmIChvbGRMaW5lLnBhcmVu
dCAmJiAvXlxzKyQvLnRlc3Qob2xkTGluZS50ZXh0KSkgewotICAgICAgICAgICAgICB2YXIgbm8g
PSBsaW5lTm8ob2xkTGluZSk7Ci0gICAgICAgICAgICAgIHJlcGxhY2VSYW5nZShjbSwgIiIsIHts
aW5lOiBubywgY2g6IDB9LCB7bGluZTogbm8sIGNoOiBvbGRMaW5lLnRleHQubGVuZ3RofSk7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgfSwgMTApKTsKLSAgICAgIH0KLSAgICB9CisgICAgaWYg
KGNoZWNrQXRvbWljIHx8ICFwb3NFcShhbmNob3IsIHNlbC5hbmNob3IpKQorICAgICAgYW5jaG9y
ID0gc2tpcEF0b21pYyhjbSwgYW5jaG9yLCBiaWFzLCBjaGVja0F0b21pYyAhPSAicHVzaCIpOwor
ICAgIGlmIChjaGVja0F0b21pYyB8fCAhcG9zRXEoaGVhZCwgc2VsLmhlYWQpKQorICAgICAgaGVh
ZCA9IHNraXBBdG9taWMoY20sIGhlYWQsIGJpYXMsIGNoZWNrQXRvbWljICE9ICJwdXNoIik7CisK
KyAgICBpZiAocG9zRXEoc2VsLmFuY2hvciwgYW5jaG9yKSAmJiBwb3NFcShzZWwuaGVhZCwgaGVh
ZCkpIHJldHVybjsKIAotICAgIHNlbC5mcm9tID0gZnJvbTsgc2VsLnRvID0gdG87CisgICAgc2Vs
LmFuY2hvciA9IGFuY2hvcjsgc2VsLmhlYWQgPSBoZWFkOworICAgIHZhciBpbnYgPSBwb3NMZXNz
KGhlYWQsIGFuY2hvcik7CisgICAgc2VsLmZyb20gPSBpbnYgPyBoZWFkIDogYW5jaG9yOworICAg
IHNlbC50byA9IGludiA/IGFuY2hvciA6IGhlYWQ7CisKKyAgICBjbS5jdXJPcC51cGRhdGVJbnB1
dCA9IHRydWU7CiAgICAgY20uY3VyT3Auc2VsZWN0aW9uQ2hhbmdlZCA9IHRydWU7CiAgIH0KIApA
QCAtMjA5Miw4ICsyMTY5LDggQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAg
IC8vIFNDUk9MTElORwogCiAgIGZ1bmN0aW9uIHNjcm9sbEN1cnNvckludG9WaWV3KGNtKSB7Ci0g
ICAgdmFyIHZpZXcgPSBjbS52aWV3LCBjb29yZHMgPSBjdXJzb3JDb29yZHMoY20sIHNlbEhlYWQo
dmlldykpOwotICAgIHNjcm9sbEludG9WaWV3KGNtLmRpc3BsYXksIGNvb3Jkcy5sZWZ0LCBjb29y
ZHMudG9wLCBjb29yZHMubGVmdCwgY29vcmRzLmJvdHRvbSk7CisgICAgdmFyIHZpZXcgPSBjbS52
aWV3OworICAgIHZhciBjb29yZHMgPSBzY3JvbGxQb3NJbnRvVmlldyhjbSwgdmlldy5zZWwuaGVh
ZCk7CiAgICAgaWYgKCF2aWV3LmZvY3VzZWQpIHJldHVybjsKICAgICB2YXIgZGlzcGxheSA9IGNt
LmRpc3BsYXksIGJveCA9IGRpc3BsYXkuc2l6ZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksIGRv
U2Nyb2xsID0gbnVsbDsKICAgICBpZiAoY29vcmRzLnRvcCArIGJveC50b3AgPCAwKSBkb1Njcm9s
bCA9IHRydWU7CkBAIC0yMTEwLDIwICsyMTg3LDM3IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1
bmN0aW9uKCkgewogICAgIH0KICAgfQogCi0gIGZ1bmN0aW9uIHNjcm9sbEludG9WaWV3KGRpc3Bs
YXksIHgxLCB5MSwgeDIsIHkyKSB7Ci0gICAgdmFyIHNjcm9sbFBvcyA9IGNhbGN1bGF0ZVNjcm9s
bFBvcyhkaXNwbGF5LCB4MSwgeTEsIHgyLCB5Mik7Ci0gICAgaWYgKHNjcm9sbFBvcy5zY3JvbGxM
ZWZ0ICE9IG51bGwpIHtkaXNwbGF5LnNjcm9sbGJhckguc2Nyb2xsTGVmdCA9IGRpc3BsYXkuc2Ny
b2xsZXIuc2Nyb2xsTGVmdCA9IHNjcm9sbFBvcy5zY3JvbGxMZWZ0O30KLSAgICBpZiAoc2Nyb2xs
UG9zLnNjcm9sbFRvcCAhPSBudWxsKSB7ZGlzcGxheS5zY3JvbGxiYXJWLnNjcm9sbFRvcCA9IGRp
c3BsYXkuc2Nyb2xsZXIuc2Nyb2xsVG9wID0gc2Nyb2xsUG9zLnNjcm9sbFRvcDt9CisgIGZ1bmN0
aW9uIHNjcm9sbFBvc0ludG9WaWV3KGNtLCBwb3MpIHsKKyAgICBmb3IgKDs7KSB7CisgICAgICB2
YXIgY2hhbmdlZCA9IGZhbHNlLCBjb29yZHMgPSBjdXJzb3JDb29yZHMoY20sIHBvcyk7CisgICAg
ICB2YXIgc2Nyb2xsUG9zID0gY2FsY3VsYXRlU2Nyb2xsUG9zKGNtLCBjb29yZHMubGVmdCwgY29v
cmRzLnRvcCwgY29vcmRzLmxlZnQsIGNvb3Jkcy5ib3R0b20pOworICAgICAgdmFyIHN0YXJ0VG9w
ID0gY20udmlldy5zY3JvbGxUb3AsIHN0YXJ0TGVmdCA9IGNtLnZpZXcuc2Nyb2xsTGVmdDsKKyAg
ICAgIGlmIChzY3JvbGxQb3Muc2Nyb2xsVG9wICE9IG51bGwpIHsKKyAgICAgICAgc2V0U2Nyb2xs
VG9wKGNtLCBzY3JvbGxQb3Muc2Nyb2xsVG9wKTsKKyAgICAgICAgaWYgKE1hdGguYWJzKGNtLnZp
ZXcuc2Nyb2xsVG9wIC0gc3RhcnRUb3ApID4gMSkgY2hhbmdlZCA9IHRydWU7CisgICAgICB9Cisg
ICAgICBpZiAoc2Nyb2xsUG9zLnNjcm9sbExlZnQgIT0gbnVsbCkgeworICAgICAgICBzZXRTY3Jv
bGxMZWZ0KGNtLCBzY3JvbGxQb3Muc2Nyb2xsTGVmdCk7CisgICAgICAgIGlmIChNYXRoLmFicyhj
bS52aWV3LnNjcm9sbExlZnQgLSBzdGFydExlZnQpID4gMSkgY2hhbmdlZCA9IHRydWU7CisgICAg
ICB9CisgICAgICBpZiAoIWNoYW5nZWQpIHJldHVybiBjb29yZHM7CisgICAgfQogICB9CiAKLSAg
ZnVuY3Rpb24gY2FsY3VsYXRlU2Nyb2xsUG9zKGRpc3BsYXksIHgxLCB5MSwgeDIsIHkyKSB7Ci0g
ICAgdmFyIHB0ID0gcGFkZGluZ1RvcChkaXNwbGF5KTsKKyAgZnVuY3Rpb24gc2Nyb2xsSW50b1Zp
ZXcoY20sIHgxLCB5MSwgeDIsIHkyKSB7CisgICAgdmFyIHNjcm9sbFBvcyA9IGNhbGN1bGF0ZVNj
cm9sbFBvcyhjbSwgeDEsIHkxLCB4MiwgeTIpOworICAgIGlmIChzY3JvbGxQb3Muc2Nyb2xsVG9w
ICE9IG51bGwpIHNldFNjcm9sbFRvcChjbSwgc2Nyb2xsUG9zLnNjcm9sbFRvcCk7CisgICAgaWYg
KHNjcm9sbFBvcy5zY3JvbGxMZWZ0ICE9IG51bGwpIHNldFNjcm9sbExlZnQoY20sIHNjcm9sbFBv
cy5zY3JvbGxMZWZ0KTsKKyAgfQorCisgIGZ1bmN0aW9uIGNhbGN1bGF0ZVNjcm9sbFBvcyhjbSwg
eDEsIHkxLCB4MiwgeTIpIHsKKyAgICB2YXIgZGlzcGxheSA9IGNtLmRpc3BsYXksIHB0ID0gcGFk
ZGluZ1RvcChkaXNwbGF5KTsKICAgICB5MSArPSBwdDsgeTIgKz0gcHQ7CiAgICAgdmFyIHNjcmVl
biA9IGRpc3BsYXkuc2Nyb2xsZXIuY2xpZW50SGVpZ2h0IC0gc2Nyb2xsZXJDdXRPZmYsIHNjcmVl
bnRvcCA9IGRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xsVG9wLCByZXN1bHQgPSB7fTsKLSAgICB2YXIg
ZG9jQm90dG9tID0gZGlzcGxheS5zY3JvbGxlci5zY3JvbGxIZWlnaHQgLSBzY3JvbGxlckN1dE9m
ZjsKKyAgICB2YXIgZG9jQm90dG9tID0gY20udmlldy5kb2MuaGVpZ2h0ICsgMiAqIHB0OwogICAg
IHZhciBhdFRvcCA9IHkxIDwgcHQgKyAxMCwgYXRCb3R0b20gPSB5MiArIHB0ID4gZG9jQm90dG9t
IC0gMTA7CiAgICAgaWYgKHkxIDwgc2NyZWVudG9wKSByZXN1bHQuc2Nyb2xsVG9wID0gYXRUb3Ag
PyAwIDogTWF0aC5tYXgoMCwgeTEpOwotICAgIGVsc2UgaWYgKHkyID4gc2NyZWVudG9wICsgc2Ny
ZWVuKSByZXN1bHQuc2Nyb2xsVG9wID0gKGF0Qm90dG9tID8gZG9jQm90dG9tIDogeTIgLSBzY3Jl
ZW4pOworICAgIGVsc2UgaWYgKHkyID4gc2NyZWVudG9wICsgc2NyZWVuKSByZXN1bHQuc2Nyb2xs
VG9wID0gKGF0Qm90dG9tID8gZG9jQm90dG9tIDogeTIpIC0gc2NyZWVuOwogCiAgICAgdmFyIHNj
cmVlbncgPSBkaXNwbGF5LnNjcm9sbGVyLmNsaWVudFdpZHRoIC0gc2Nyb2xsZXJDdXRPZmYsIHNj
cmVlbmxlZnQgPSBkaXNwbGF5LnNjcm9sbGVyLnNjcm9sbExlZnQ7CiAgICAgeDEgKz0gZGlzcGxh
eS5ndXR0ZXJzLm9mZnNldFdpZHRoOyB4MiArPSBkaXNwbGF5Lmd1dHRlcnMub2Zmc2V0V2lkdGg7
CkBAIC0yMTQwLDcgKzIyMzQsNyBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsK
IAogICAvLyBBUEkgVVRJTElUSUVTCiAKLSAgZnVuY3Rpb24gaW5kZW50TGluZShjbSwgbiwgaG93
KSB7CisgIGZ1bmN0aW9uIGluZGVudExpbmUoY20sIG4sIGhvdywgYWdncmVzc2l2ZSkgewogICAg
IHZhciBkb2MgPSBjbS52aWV3LmRvYzsKICAgICBpZiAoIWhvdykgaG93ID0gImFkZCI7CiAgICAg
aWYgKGhvdyA9PSAic21hcnQiKSB7CkBAIC0yMTUzLDcgKzIyNDcsMTAgQEAgd2luZG93LkNvZGVN
aXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgdmFyIGN1clNwYWNlU3RyaW5nID0gbGluZS50ZXh0
Lm1hdGNoKC9eXHMqLylbMF0sIGluZGVudGF0aW9uOwogICAgIGlmIChob3cgPT0gInNtYXJ0Iikg
ewogICAgICAgaW5kZW50YXRpb24gPSBjbS52aWV3Lm1vZGUuaW5kZW50KHN0YXRlLCBsaW5lLnRl
eHQuc2xpY2UoY3VyU3BhY2VTdHJpbmcubGVuZ3RoKSwgbGluZS50ZXh0KTsKLSAgICAgIGlmIChp
bmRlbnRhdGlvbiA9PSBQYXNzKSBob3cgPSAicHJldiI7CisgICAgICBpZiAoaW5kZW50YXRpb24g
PT0gUGFzcykgeworICAgICAgICBpZiAoIWFnZ3Jlc3NpdmUpIHJldHVybjsKKyAgICAgICAgaG93
ID0gInByZXYiOworICAgICAgfQogICAgIH0KICAgICBpZiAoaG93ID09ICJwcmV2IikgewogICAg
ICAgaWYgKG4pIGluZGVudGF0aW9uID0gY291bnRDb2x1bW4oZ2V0TGluZShkb2MsIG4tMSkudGV4
dCwgbnVsbCwgdGFiU2l6ZSk7CkBAIC0yMTYyLDcgKzIyNTksNiBAQCB3aW5kb3cuQ29kZU1pcnJv
ciA9IChmdW5jdGlvbigpIHsKICAgICBlbHNlIGlmIChob3cgPT0gImFkZCIpIGluZGVudGF0aW9u
ID0gY3VyU3BhY2UgKyBjbS5vcHRpb25zLmluZGVudFVuaXQ7CiAgICAgZWxzZSBpZiAoaG93ID09
ICJzdWJ0cmFjdCIpIGluZGVudGF0aW9uID0gY3VyU3BhY2UgLSBjbS5vcHRpb25zLmluZGVudFVu
aXQ7CiAgICAgaW5kZW50YXRpb24gPSBNYXRoLm1heCgwLCBpbmRlbnRhdGlvbik7Ci0gICAgdmFy
IGRpZmYgPSBpbmRlbnRhdGlvbiAtIGN1clNwYWNlOwogCiAgICAgdmFyIGluZGVudFN0cmluZyA9
ICIiLCBwb3MgPSAwOwogICAgIGlmIChjbS5vcHRpb25zLmluZGVudFdpdGhUYWJzKQpAQCAtMjE3
MCw3ICsyMjY2LDcgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgaWYg
KHBvcyA8IGluZGVudGF0aW9uKSBpbmRlbnRTdHJpbmcgKz0gc3BhY2VTdHIoaW5kZW50YXRpb24g
LSBwb3MpOwogCiAgICAgaWYgKGluZGVudFN0cmluZyAhPSBjdXJTcGFjZVN0cmluZykKLSAgICAg
IHJlcGxhY2VSYW5nZShjbSwgaW5kZW50U3RyaW5nLCB7bGluZTogbiwgY2g6IDB9LCB7bGluZTog
biwgY2g6IGN1clNwYWNlU3RyaW5nLmxlbmd0aH0pOworICAgICAgcmVwbGFjZVJhbmdlKGNtLCBp
bmRlbnRTdHJpbmcsIHtsaW5lOiBuLCBjaDogMH0sIHtsaW5lOiBuLCBjaDogY3VyU3BhY2VTdHJp
bmcubGVuZ3RofSwgImlucHV0Iik7CiAgICAgbGluZS5zdGF0ZUFmdGVyID0gbnVsbDsKICAgfQog
CkBAIC0yMTg1LDcgKzIyODEsNyBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsK
ICAgfQogCiAgIGZ1bmN0aW9uIGZpbmRQb3NIKGNtLCBkaXIsIHVuaXQsIHZpc3VhbGx5KSB7Ci0g
ICAgdmFyIGRvYyA9IGNtLnZpZXcuZG9jLCBlbmQgPSBzZWxIZWFkKGNtLnZpZXcpLCBsaW5lID0g
ZW5kLmxpbmUsIGNoID0gZW5kLmNoOworICAgIHZhciBkb2MgPSBjbS52aWV3LmRvYywgZW5kID0g
Y20udmlldy5zZWwuaGVhZCwgbGluZSA9IGVuZC5saW5lLCBjaCA9IGVuZC5jaDsKICAgICB2YXIg
bGluZU9iaiA9IGdldExpbmUoZG9jLCBsaW5lKTsKICAgICBmdW5jdGlvbiBmaW5kTmV4dExpbmUo
KSB7CiAgICAgICB2YXIgbCA9IGxpbmUgKyBkaXI7CkBAIC0yMjMyLDcgKzIzMjgsNyBAQCB3aW5k
b3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgfQogCiAgIGZ1bmN0aW9uIHNlbGVjdExp
bmUoY20sIGxpbmUpIHsKLSAgICBzZXRTZWxlY3Rpb25Vc2VyKGNtLCB7bGluZTogbGluZSwgY2g6
IDB9LCBjbGlwUG9zKGNtLnZpZXcuZG9jLCB7bGluZTogbGluZSArIDEsIGNoOiAwfSkpOworICAg
IGV4dGVuZFNlbGVjdGlvbihjbSwge2xpbmU6IGxpbmUsIGNoOiAwfSwgY2xpcFBvcyhjbS52aWV3
LmRvYywge2xpbmU6IGxpbmUgKyAxLCBjaDogMH0pKTsKICAgfQogCiAgIC8vIFBST1RPVFlQRQpA
QCAtMjI0OSwxNCArMjM0NSwxNCBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsK
IAogICAgIHNldFZhbHVlOiBvcGVyYXRpb24obnVsbCwgZnVuY3Rpb24oY29kZSkgewogICAgICAg
dmFyIGRvYyA9IHRoaXMudmlldy5kb2MsIHRvcCA9IHtsaW5lOiAwLCBjaDogMH0sIGxhc3RMZW4g
PSBnZXRMaW5lKGRvYywgZG9jLnNpemUtMSkudGV4dC5sZW5ndGg7Ci0gICAgICB1cGRhdGVEb2NJ
bm5lcih0aGlzLCB0b3AsIHtsaW5lOiBkb2Muc2l6ZSAtIDEsIGNoOiBsYXN0TGVufSwgc3BsaXRM
aW5lcyhjb2RlKSwgdG9wLCB0b3ApOworICAgICAgdXBkYXRlRG9jSW5uZXIodGhpcywgdG9wLCB7
bGluZTogZG9jLnNpemUgLSAxLCBjaDogbGFzdExlbn0sIHNwbGl0TGluZXMoY29kZSksIHRvcCwg
dG9wLCAic2V0VmFsdWUiKTsKICAgICB9KSwKIAogICAgIGdldFNlbGVjdGlvbjogZnVuY3Rpb24o
bGluZVNlcCkgeyByZXR1cm4gdGhpcy5nZXRSYW5nZSh0aGlzLnZpZXcuc2VsLmZyb20sIHRoaXMu
dmlldy5zZWwudG8sIGxpbmVTZXApOyB9LAogCi0gICAgcmVwbGFjZVNlbGVjdGlvbjogb3BlcmF0
aW9uKG51bGwsIGZ1bmN0aW9uKGNvZGUsIGNvbGxhcHNlKSB7CisgICAgcmVwbGFjZVNlbGVjdGlv
bjogb3BlcmF0aW9uKG51bGwsIGZ1bmN0aW9uKGNvZGUsIGNvbGxhcHNlLCBvcmlnaW4pIHsKICAg
ICAgIHZhciBzZWwgPSB0aGlzLnZpZXcuc2VsOwotICAgICAgdXBkYXRlRG9jKHRoaXMsIHNlbC5m
cm9tLCBzZWwudG8sIHNwbGl0TGluZXMoY29kZSksIGNvbGxhcHNlIHx8ICJhcm91bmQiKTsKKyAg
ICAgIHVwZGF0ZURvYyh0aGlzLCBzZWwuZnJvbSwgc2VsLnRvLCBzcGxpdExpbmVzKGNvZGUpLCBj
b2xsYXBzZSB8fCAiYXJvdW5kIiwgb3JpZ2luKTsKICAgICB9KSwKIAogICAgIGZvY3VzOiBmdW5j
dGlvbigpe3dpbmRvdy5mb2N1cygpOyBmb2N1c0lucHV0KHRoaXMpOyBvbkZvY3VzKHRoaXMpOyBm
YXN0UG9sbCh0aGlzKTt9LApAQCAtMjI3MywyMSArMjM2OSw0NyBAQCB3aW5kb3cuQ29kZU1pcnJv
ciA9IChmdW5jdGlvbigpIHsKIAogICAgIGdldE1vZGU6IGZ1bmN0aW9uKCkge3JldHVybiB0aGlz
LnZpZXcubW9kZTt9LAogCi0gICAgdW5kbzogb3BlcmF0aW9uKG51bGwsIGZ1bmN0aW9uKCkgewot
ICAgICAgdmFyIGhpc3QgPSB0aGlzLnZpZXcuaGlzdG9yeTsKLSAgICAgIHVucmVkb0hlbHBlcih0
aGlzLCBoaXN0LmRvbmUsIGhpc3QudW5kb25lLCAtMSk7CisgICAgYWRkS2V5TWFwOiBmdW5jdGlv
bihtYXApIHsKKyAgICAgIHRoaXMudmlldy5rZXlNYXBzLnB1c2gobWFwKTsKKyAgICB9LAorCisg
ICAgcmVtb3ZlS2V5TWFwOiBmdW5jdGlvbihtYXApIHsKKyAgICAgIHZhciBtYXBzID0gdGhpcy52
aWV3LmtleU1hcHM7CisgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1hcHMubGVuZ3RoOyArK2kp
CisgICAgICAgIGlmICgodHlwZW9mIG1hcCA9PSAic3RyaW5nIiA/IG1hcHNbaV0ubmFtZSA6IG1h
cHNbaV0pID09IG1hcCkgeworICAgICAgICAgIG1hcHMuc3BsaWNlKGksIDEpOworICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfSwKKworICAgIGFkZE92ZXJsYXk6IG9wZXJh
dGlvbihudWxsLCBmdW5jdGlvbihzcGVjLCBvcHRpb25zKSB7CisgICAgICB2YXIgbW9kZSA9IHNw
ZWMudG9rZW4gPyBzcGVjIDogQ29kZU1pcnJvci5nZXRNb2RlKHRoaXMub3B0aW9ucywgc3BlYyk7
CisgICAgICBpZiAobW9kZS5zdGFydFN0YXRlKSB0aHJvdyBuZXcgRXJyb3IoIk92ZXJsYXlzIG1h
eSBub3QgYmUgc3RhdGVmdWwuIik7CisgICAgICB0aGlzLnZpZXcub3ZlcmxheXMucHVzaCh7bW9k
ZTogbW9kZSwgbW9kZVNwZWM6IHNwZWMsIG9wYXF1ZTogb3B0aW9ucyAmJiBvcHRpb25zLm9wYXF1
ZX0pOworICAgICAgdGhpcy52aWV3Lm1vZGVHZW4rKzsKKyAgICAgIHJlZ0NoYW5nZSh0aGlzLCAw
LCB0aGlzLnZpZXcuZG9jLnNpemUpOwogICAgIH0pLAotICAgIHJlZG86IG9wZXJhdGlvbihudWxs
LCBmdW5jdGlvbigpIHsKLSAgICAgIHZhciBoaXN0ID0gdGhpcy52aWV3Lmhpc3Rvcnk7Ci0gICAg
ICB1bnJlZG9IZWxwZXIodGhpcywgaGlzdC51bmRvbmUsIGhpc3QuZG9uZSwgMSk7CisgICAgcmVt
b3ZlT3ZlcmxheTogb3BlcmF0aW9uKG51bGwsIGZ1bmN0aW9uKHNwZWMpIHsKKyAgICAgIHZhciBv
dmVybGF5cyA9IHRoaXMudmlldy5vdmVybGF5czsKKyAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
b3ZlcmxheXMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgaWYgKG92ZXJsYXlzW2ldLm1vZGVTcGVj
ID09IHNwZWMpIHsKKyAgICAgICAgICBvdmVybGF5cy5zcGxpY2UoaSwgMSk7CisgICAgICAgICAg
dGhpcy52aWV3Lm1vZGVHZW4rKzsKKyAgICAgICAgICByZWdDaGFuZ2UodGhpcywgMCwgdGhpcy52
aWV3LmRvYy5zaXplKTsKKyAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgIH0KICAg
ICB9KSwKIAotICAgIGluZGVudExpbmU6IG9wZXJhdGlvbihudWxsLCBmdW5jdGlvbihuLCBkaXIp
IHsKKyAgICB1bmRvOiBvcGVyYXRpb24obnVsbCwgZnVuY3Rpb24oKSB7dW5yZWRvSGVscGVyKHRo
aXMsICJ1bmRvIik7fSksCisgICAgcmVkbzogb3BlcmF0aW9uKG51bGwsIGZ1bmN0aW9uKCkge3Vu
cmVkb0hlbHBlcih0aGlzLCAicmVkbyIpO30pLAorCisgICAgaW5kZW50TGluZTogb3BlcmF0aW9u
KG51bGwsIGZ1bmN0aW9uKG4sIGRpciwgYWdncmVzc2l2ZSkgewogICAgICAgaWYgKHR5cGVvZiBk
aXIgIT0gInN0cmluZyIpIHsKICAgICAgICAgaWYgKGRpciA9PSBudWxsKSBkaXIgPSB0aGlzLm9w
dGlvbnMuc21hcnRJbmRlbnQgPyAic21hcnQiIDogInByZXYiOwogICAgICAgICBlbHNlIGRpciA9
IGRpciA/ICJhZGQiIDogInN1YnRyYWN0IjsKICAgICAgIH0KLSAgICAgIGlmIChpc0xpbmUodGhp
cy52aWV3LmRvYywgbikpIGluZGVudExpbmUodGhpcywgbiwgZGlyKTsKKyAgICAgIGlmIChpc0xp
bmUodGhpcy52aWV3LmRvYywgbikpIGluZGVudExpbmUodGhpcywgbiwgZGlyLCBhZ2dyZXNzaXZl
KTsKICAgICB9KSwKIAogICAgIGluZGVudFNlbGVjdGlvbjogb3BlcmF0aW9uKG51bGwsIGZ1bmN0
aW9uKGhvdykgewpAQCAtMjMwNiw3ICsyNDI4LDcgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVu
Y3Rpb24oKSB7CiAKICAgICBtYXJrQ2xlYW46IGZ1bmN0aW9uKCkgewogICAgICAgdGhpcy52aWV3
Lmhpc3RvcnkuZGlydHlDb3VudGVyID0gMDsKLSAgICAgIHRoaXMudmlldy5oaXN0b3J5LmNsb3Nl
ZCA9IHRydWU7CisgICAgICB0aGlzLnZpZXcuaGlzdG9yeS5sYXN0T3AgPSB0aGlzLnZpZXcuaGlz
dG9yeS5sYXN0T3JpZ2luID0gbnVsbDsKICAgICB9LAogCiAgICAgaXNDbGVhbjogZnVuY3Rpb24g
KCkge3JldHVybiB0aGlzLnZpZXcuaGlzdG9yeS5kaXJ0eUNvdW50ZXIgPT0gMDt9LApAQCAtMjMx
NSw4ICsyNDM3LDEwIEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgICAg
dmFyIGhpc3QgPSB0aGlzLnZpZXcuaGlzdG9yeTsKICAgICAgIGZ1bmN0aW9uIGNwKGFycikgewog
ICAgICAgICBmb3IgKHZhciBpID0gMCwgbncgPSBbXSwgbndlbHQ7IGkgPCBhcnIubGVuZ3RoOyAr
K2kpIHsKLSAgICAgICAgICBudy5wdXNoKG53ZWx0ID0gW10pOwotICAgICAgICAgIGZvciAodmFy
IGogPSAwLCBlbHQgPSBhcnJbaV07IGogPCBlbHQubGVuZ3RoOyArK2opIHsKKyAgICAgICAgICB2
YXIgc2V0ID0gYXJyW2ldOworICAgICAgICAgIG53LnB1c2goe2V2ZW50czogbndlbHQgPSBbXSwg
ZnJvbUJlZm9yZTogc2V0LmZyb21CZWZvcmUsIHRvQmVmb3JlOiBzZXQudG9CZWZvcmUsCisgICAg
ICAgICAgICAgICAgICAgZnJvbUFmdGVyOiBzZXQuZnJvbUFmdGVyLCB0b0FmdGVyOiBzZXQudG9B
ZnRlcn0pOworICAgICAgICAgIGZvciAodmFyIGogPSAwLCBlbHQgPSBzZXQuZXZlbnRzOyBqIDwg
ZWx0Lmxlbmd0aDsgKytqKSB7CiAgICAgICAgICAgICB2YXIgb2xkID0gW10sIGN1ciA9IGVsdFtq
XTsKICAgICAgICAgICAgIG53ZWx0LnB1c2goe3N0YXJ0OiBjdXIuc3RhcnQsIGFkZGVkOiBjdXIu
YWRkZWQsIG9sZDogb2xkfSk7CiAgICAgICAgICAgICBmb3IgKHZhciBrID0gMDsgayA8IGN1ci5v
bGQubGVuZ3RoOyArK2spIG9sZC5wdXNoKGhsVGV4dChjdXIub2xkW2tdKSk7CkBAIC0yMzMzLDEw
ICsyNDU3LDI0IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgICAgaGlz
dC51bmRvbmUgPSBoaXN0RGF0YS51bmRvbmU7CiAgICAgfSwKIAorICAgIC8vIEZldGNoIHRoZSBw
YXJzZXIgdG9rZW4gZm9yIGEgZ2l2ZW4gY2hhcmFjdGVyLiBVc2VmdWwgZm9yIGhhY2tzCisgICAg
Ly8gdGhhdCB3YW50IHRvIGluc3BlY3QgdGhlIG1vZGUgc3RhdGUgKHNheSwgZm9yIGNvbXBsZXRp
b24pLgogICAgIGdldFRva2VuQXQ6IGZ1bmN0aW9uKHBvcykgewogICAgICAgdmFyIGRvYyA9IHRo
aXMudmlldy5kb2M7CiAgICAgICBwb3MgPSBjbGlwUG9zKGRvYywgcG9zKTsKLSAgICAgIHJldHVy
biBnZXRUb2tlbkF0KHRoaXMsIGdldExpbmUoZG9jLCBwb3MubGluZSksIGdldFN0YXRlQmVmb3Jl
KHRoaXMsIHBvcy5saW5lKSwgcG9zLmNoKTsKKyAgICAgIHZhciBzdGF0ZSA9IGdldFN0YXRlQmVm
b3JlKHRoaXMsIHBvcy5saW5lKSwgbW9kZSA9IHRoaXMudmlldy5tb2RlOworICAgICAgdmFyIGxp
bmUgPSBnZXRMaW5lKGRvYywgcG9zLmxpbmUpOworICAgICAgdmFyIHN0cmVhbSA9IG5ldyBTdHJp
bmdTdHJlYW0obGluZS50ZXh0LCB0aGlzLm9wdGlvbnMudGFiU2l6ZSk7CisgICAgICB3aGlsZSAo
c3RyZWFtLnBvcyA8IHBvcy5jaCAmJiAhc3RyZWFtLmVvbCgpKSB7CisgICAgICAgIHN0cmVhbS5z
dGFydCA9IHN0cmVhbS5wb3M7CisgICAgICAgIHZhciBzdHlsZSA9IG1vZGUudG9rZW4oc3RyZWFt
LCBzdGF0ZSk7CisgICAgICB9CisgICAgICByZXR1cm4ge3N0YXJ0OiBzdHJlYW0uc3RhcnQsCisg
ICAgICAgICAgICAgIGVuZDogc3RyZWFtLnBvcywKKyAgICAgICAgICAgICAgc3RyaW5nOiBzdHJl
YW0uY3VycmVudCgpLAorICAgICAgICAgICAgICBjbGFzc05hbWU6IHN0eWxlIHx8IG51bGwsIC8v
IERlcHJlY2F0ZWQsIHVzZSAndHlwZScgaW5zdGVhZAorICAgICAgICAgICAgICB0eXBlOiBzdHls
ZSB8fCBudWxsLAorICAgICAgICAgICAgICBzdGF0ZTogc3RhdGV9OwogICAgIH0sCiAKICAgICBn
ZXRTdGF0ZUFmdGVyOiBmdW5jdGlvbihsaW5lKSB7CkBAIC0yMzQ3LDggKzI0ODUsOCBAQCB3aW5k
b3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKIAogICAgIGN1cnNvckNvb3JkczogZnVuY3Rp
b24oc3RhcnQsIG1vZGUpIHsKICAgICAgIHZhciBwb3MsIHNlbCA9IHRoaXMudmlldy5zZWw7Ci0g
ICAgICBpZiAoc3RhcnQgPT0gbnVsbCkgc3RhcnQgPSBzZWwuaW52ZXJ0ZWQ7Ci0gICAgICBpZiAo
dHlwZW9mIHN0YXJ0ID09ICJvYmplY3QiKSBwb3MgPSBjbGlwUG9zKHRoaXMudmlldy5kb2MsIHN0
YXJ0KTsKKyAgICAgIGlmIChzdGFydCA9PSBudWxsKSBwb3MgPSBzZWwuaGVhZDsKKyAgICAgIGVs
c2UgaWYgKHR5cGVvZiBzdGFydCA9PSAib2JqZWN0IikgcG9zID0gY2xpcFBvcyh0aGlzLnZpZXcu
ZG9jLCBzdGFydCk7CiAgICAgICBlbHNlIHBvcyA9IHN0YXJ0ID8gc2VsLmZyb20gOiBzZWwudG87
CiAgICAgICByZXR1cm4gY3Vyc29yQ29vcmRzKHRoaXMsIHBvcywgbW9kZSB8fCAicGFnZSIpOwog
ICAgIH0sCkBAIC0yNDMzLDcgKzI1NzEsNyBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlv
bigpIHsKICAgICAgIH0pOwogICAgIH0pLAogCi0gICAgYWRkTGluZVdpZGdldDogb3BlcmF0aW9u
KG51bGwsIGZ1bmN0aW9uIGFkZExpbmVXaWRnZXQoaGFuZGxlLCBub2RlLCBvcHRpb25zKSB7Cisg
ICAgYWRkTGluZVdpZGdldDogb3BlcmF0aW9uKG51bGwsIGZ1bmN0aW9uKGhhbmRsZSwgbm9kZSwg
b3B0aW9ucykgewogICAgICAgdmFyIHdpZGdldCA9IG9wdGlvbnMgfHwge307CiAgICAgICB3aWRn
ZXQubm9kZSA9IG5vZGU7CiAgICAgICBpZiAod2lkZ2V0Lm5vSFNjcm9sbCkgdGhpcy5kaXNwbGF5
LmFsaWduV2lkZ2V0cyA9IHRydWU7CkBAIC0yNDQ3LDggKzI1ODUsMTAgQEAgd2luZG93LkNvZGVN
aXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAKICAgICByZW1vdmVMaW5lV2lkZ2V0OiBvcGVyYXRpb24o
bnVsbCwgZnVuY3Rpb24od2lkZ2V0KSB7CiAgICAgICB2YXIgd3MgPSB3aWRnZXQubGluZS53aWRn
ZXRzLCBubyA9IGxpbmVObyh3aWRnZXQubGluZSk7Ci0gICAgICBpZiAobm8gPT0gbnVsbCkgcmV0
dXJuOworICAgICAgaWYgKG5vID09IG51bGwgfHwgIXdzKSByZXR1cm47CiAgICAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IHdzLmxlbmd0aDsgKytpKSBpZiAod3NbaV0gPT0gd2lkZ2V0KSB3cy5zcGxp
Y2UoaS0tLCAxKTsKKyAgICAgIHZhciBuZXdIZWlnaHQgPSB3aWRnZXQubm9kZS5vZmZzZXRIZWln
aHQgPyB3aWRnZXQubGluZS5oZWlnaHQgLSB3aWRnZXQubm9kZS5vZmZzZXRIZWlnaHQgOiB0ZXh0
SGVpZ2h0KHRoaXMuZGlzcGxheSk7CisgICAgICB1cGRhdGVMaW5lSGVpZ2h0KHdpZGdldC5saW5l
LCBuZXdIZWlnaHQpOwogICAgICAgcmVnQ2hhbmdlKHRoaXMsIG5vLCBubyArIDEpOwogICAgIH0p
LAogCkBAIC0yNDk1LDcgKzI2MzUsNyBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigp
IHsKICAgICAgICAgbm9kZS5zdHlsZS5sZWZ0ID0gbGVmdCArICJweCI7CiAgICAgICB9CiAgICAg
ICBpZiAoc2Nyb2xsKQotICAgICAgICBzY3JvbGxJbnRvVmlldyhkaXNwbGF5LCBsZWZ0LCB0b3As
IGxlZnQgKyBub2RlLm9mZnNldFdpZHRoLCB0b3AgKyBub2RlLm9mZnNldEhlaWdodCk7CisgICAg
ICAgIHNjcm9sbEludG9WaWV3KHRoaXMsIGxlZnQsIHRvcCwgbGVmdCArIG5vZGUub2Zmc2V0V2lk
dGgsIHRvcCArIG5vZGUub2Zmc2V0SGVpZ2h0KTsKICAgICB9LAogCiAgICAgbGluZUNvdW50OiBm
dW5jdGlvbigpIHtyZXR1cm4gdGhpcy52aWV3LmRvYy5zaXplO30sCkBAIC0yNTAzLDIzICsyNjQz
LDM0IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgIGNsaXBQb3M6IGZ1
bmN0aW9uKHBvcykge3JldHVybiBjbGlwUG9zKHRoaXMudmlldy5kb2MsIHBvcyk7fSwKIAogICAg
IGdldEN1cnNvcjogZnVuY3Rpb24oc3RhcnQpIHsKLSAgICAgIHZhciBzZWwgPSB0aGlzLnZpZXcu
c2VsOwotICAgICAgaWYgKHN0YXJ0ID09IG51bGwpIHN0YXJ0ID0gc2VsLmludmVydGVkOwotICAg
ICAgcmV0dXJuIGNvcHlQb3Moc3RhcnQgPyBzZWwuZnJvbSA6IHNlbC50byk7CisgICAgICB2YXIg
c2VsID0gdGhpcy52aWV3LnNlbCwgcG9zOworICAgICAgaWYgKHN0YXJ0ID09IG51bGwgfHwgc3Rh
cnQgPT0gImhlYWQiKSBwb3MgPSBzZWwuaGVhZDsKKyAgICAgIGVsc2UgaWYgKHN0YXJ0ID09ICJh
bmNob3IiKSBwb3MgPSBzZWwuYW5jaG9yOworICAgICAgZWxzZSBpZiAoc3RhcnQgPT0gImVuZCIg
fHwgc3RhcnQgPT09IGZhbHNlKSBwb3MgPSBzZWwudG87CisgICAgICBlbHNlIHBvcyA9IHNlbC5m
cm9tOworICAgICAgcmV0dXJuIGNvcHlQb3MocG9zKTsKICAgICB9LAogCiAgICAgc29tZXRoaW5n
U2VsZWN0ZWQ6IGZ1bmN0aW9uKCkge3JldHVybiAhcG9zRXEodGhpcy52aWV3LnNlbC5mcm9tLCB0
aGlzLnZpZXcuc2VsLnRvKTt9LAogCi0gICAgc2V0Q3Vyc29yOiBvcGVyYXRpb24obnVsbCwgZnVu
Y3Rpb24obGluZSwgY2gsIHVzZXIpIHsKLSAgICAgIHZhciBwb3MgPSB0eXBlb2YgbGluZSA9PSAi
bnVtYmVyIiA/IHtsaW5lOiBsaW5lLCBjaDogY2ggfHwgMH0gOiBsaW5lOwotICAgICAgKHVzZXIg
PyBzZXRTZWxlY3Rpb25Vc2VyIDogc2V0U2VsZWN0aW9uKSh0aGlzLCBwb3MsIHBvcyk7CisgICAg
c2V0Q3Vyc29yOiBvcGVyYXRpb24obnVsbCwgZnVuY3Rpb24obGluZSwgY2gsIGV4dGVuZCkgewor
ICAgICAgdmFyIHBvcyA9IGNsaXBQb3ModGhpcy52aWV3LmRvYywgdHlwZW9mIGxpbmUgPT0gIm51
bWJlciIgPyB7bGluZTogbGluZSwgY2g6IGNoIHx8IDB9IDogbGluZSk7CisgICAgICBpZiAoZXh0
ZW5kKSBleHRlbmRTZWxlY3Rpb24odGhpcywgcG9zKTsKKyAgICAgIGVsc2Ugc2V0U2VsZWN0aW9u
KHRoaXMsIHBvcywgcG9zKTsKICAgICB9KSwKIAotICAgIHNldFNlbGVjdGlvbjogb3BlcmF0aW9u
KG51bGwsIGZ1bmN0aW9uKGZyb20sIHRvLCB1c2VyKSB7CisgICAgc2V0U2VsZWN0aW9uOiBvcGVy
YXRpb24obnVsbCwgZnVuY3Rpb24oYW5jaG9yLCBoZWFkKSB7CiAgICAgICB2YXIgZG9jID0gdGhp
cy52aWV3LmRvYzsKLSAgICAgICh1c2VyID8gc2V0U2VsZWN0aW9uVXNlciA6IHNldFNlbGVjdGlv
bikodGhpcywgY2xpcFBvcyhkb2MsIGZyb20pLCBjbGlwUG9zKGRvYywgdG8gfHwgZnJvbSkpOwor
ICAgICAgc2V0U2VsZWN0aW9uKHRoaXMsIGNsaXBQb3MoZG9jLCBhbmNob3IpLCBjbGlwUG9zKGRv
YywgaGVhZCB8fCBhbmNob3IpKTsKICAgICB9KSwKIAorICAgIGV4dGVuZFNlbGVjdGlvbjogb3Bl
cmF0aW9uKG51bGwsIGZ1bmN0aW9uKGZyb20sIHRvKSB7CisgICAgICB2YXIgZG9jID0gdGhpcy52
aWV3LmRvYzsKKyAgICAgIGV4dGVuZFNlbGVjdGlvbih0aGlzLCBjbGlwUG9zKGRvYywgZnJvbSks
IHRvICYmIGNsaXBQb3MoZG9jLCB0bykpOworICAgIH0pLAorCisgICAgc2V0RXh0ZW5kaW5nOiBm
dW5jdGlvbih2YWwpIHt0aGlzLnZpZXcuc2VsLmV4dGVuZCA9IHZhbDt9LAorCiAgICAgZ2V0TGlu
ZTogZnVuY3Rpb24obGluZSkge3ZhciBsID0gdGhpcy5nZXRMaW5lSGFuZGxlKGxpbmUpOyByZXR1
cm4gbCAmJiBsLnRleHQ7fSwKIAogICAgIGdldExpbmVIYW5kbGU6IGZ1bmN0aW9uKGxpbmUpIHsK
QEAgLTI1NjQsMjAgKzI3MTUsMjEgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7
CiAgICAgLy8gU3R1ZmYgdXNlZCBieSBjb21tYW5kcywgcHJvYmFibHkgbm90IG11Y2ggdXNlIHRv
IG91dHNpZGUgY29kZS4KICAgICBtb3ZlSDogb3BlcmF0aW9uKG51bGwsIGZ1bmN0aW9uKGRpciwg
dW5pdCkgewogICAgICAgdmFyIHNlbCA9IHRoaXMudmlldy5zZWwsIHBvcyA9IGRpciA8IDAgPyBz
ZWwuZnJvbSA6IHNlbC50bzsKLSAgICAgIGlmIChzZWwuc2hpZnQgfHwgcG9zRXEoc2VsLmZyb20s
IHNlbC50bykpIHBvcyA9IGZpbmRQb3NIKHRoaXMsIGRpciwgdW5pdCwgdHJ1ZSk7Ci0gICAgICBz
ZXRTZWxlY3Rpb25Vc2VyKHRoaXMsIHBvcywgcG9zLCBkaXIpOworICAgICAgaWYgKHNlbC5zaGlm
dCB8fCBzZWwuZXh0ZW5kIHx8IHBvc0VxKHNlbC5mcm9tLCBzZWwudG8pKQorICAgICAgICBwb3Mg
PSBmaW5kUG9zSCh0aGlzLCBkaXIsIHVuaXQsIHRoaXMub3B0aW9ucy5ydGxNb3ZlVmlzdWFsbHkp
OworICAgICAgZXh0ZW5kU2VsZWN0aW9uKHRoaXMsIHBvcywgcG9zLCBkaXIpOwogICAgIH0pLAog
CiAgICAgZGVsZXRlSDogb3BlcmF0aW9uKG51bGwsIGZ1bmN0aW9uKGRpciwgdW5pdCkgewogICAg
ICAgdmFyIHNlbCA9IHRoaXMudmlldy5zZWw7Ci0gICAgICBpZiAoIXBvc0VxKHNlbC5mcm9tLCBz
ZWwudG8pKSByZXBsYWNlUmFuZ2UodGhpcywgIiIsIHNlbC5mcm9tLCBzZWwudG8pOwotICAgICAg
ZWxzZSByZXBsYWNlUmFuZ2UodGhpcywgIiIsIHNlbC5mcm9tLCBmaW5kUG9zSCh0aGlzLCBkaXIs
IHVuaXQsIGZhbHNlKSk7CisgICAgICBpZiAoIXBvc0VxKHNlbC5mcm9tLCBzZWwudG8pKSByZXBs
YWNlUmFuZ2UodGhpcywgIiIsIHNlbC5mcm9tLCBzZWwudG8sICJkZWxldGUiKTsKKyAgICAgIGVs
c2UgcmVwbGFjZVJhbmdlKHRoaXMsICIiLCBzZWwuZnJvbSwgZmluZFBvc0godGhpcywgZGlyLCB1
bml0LCBmYWxzZSksICJkZWxldGUiKTsKICAgICAgIHRoaXMuY3VyT3AudXNlclNlbENoYW5nZSA9
IHRydWU7CiAgICAgfSksCiAKICAgICBtb3ZlVjogb3BlcmF0aW9uKG51bGwsIGZ1bmN0aW9uKGRp
ciwgdW5pdCkgewogICAgICAgdmFyIHZpZXcgPSB0aGlzLnZpZXcsIGRvYyA9IHZpZXcuZG9jLCBk
aXNwbGF5ID0gdGhpcy5kaXNwbGF5OwotICAgICAgdmFyIGRpc3QgPSAwLCBjdXIgPSBzZWxIZWFk
KHZpZXcpLCBwb3MgPSBjdXJzb3JDb29yZHModGhpcywgY3VyLCAiZGl2Iik7CisgICAgICB2YXIg
Y3VyID0gdmlldy5zZWwuaGVhZCwgcG9zID0gY3Vyc29yQ29vcmRzKHRoaXMsIGN1ciwgImRpdiIp
OwogICAgICAgdmFyIHggPSBwb3MubGVmdCwgeTsKICAgICAgIGlmICh2aWV3LmdvYWxDb2x1bW4g
IT0gbnVsbCkgeCA9IHZpZXcuZ29hbENvbHVtbjsKICAgICAgIGlmICh1bml0ID09ICJwYWdlIikg
ewpAQCAtMjU5Miw3ICsyNzQ0LDcgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7
CiAgICAgICB9IHdoaWxlICh0YXJnZXQub3V0c2lkZSAmJiAoZGlyIDwgMCA/IHkgPiAwIDogeSA8
IGRvYy5oZWlnaHQpKTsKIAogICAgICAgaWYgKHVuaXQgPT0gInBhZ2UiKSBkaXNwbGF5LnNjcm9s
bGJhclYuc2Nyb2xsVG9wICs9IGNoYXJDb29yZHModGhpcywgdGFyZ2V0LCAiZGl2IikudG9wIC0g
cG9zLnRvcDsKLSAgICAgIHNldFNlbGVjdGlvblVzZXIodGhpcywgdGFyZ2V0LCB0YXJnZXQsIGRp
cik7CisgICAgICBleHRlbmRTZWxlY3Rpb24odGhpcywgdGFyZ2V0LCB0YXJnZXQsIGRpcik7CiAg
ICAgICB2aWV3LmdvYWxDb2x1bW4gPSB4OwogICAgIH0pLAogCkBAIC0yNjE0LDcgKzI3NjYsNyBA
QCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICAgIHJldHVybiBjbGlwUG9z
KGRvYywge2xpbmU6IGxpbmVObywgY2g6IGNofSk7CiAgICAgfSwKICAgICBpbmRleEZyb21Qb3M6
IGZ1bmN0aW9uIChjb29yZHMpIHsKLSAgICAgIGlmIChjb29yZHMubGluZSA8IDAgfHwgY29vcmRz
LmNoIDwgMCkgcmV0dXJuIDA7CisgICAgICBjb29yZHMgPSBjbGlwUG9zKHRoaXMudmlldy5kb2Ms
IGNvb3Jkcyk7CiAgICAgICB2YXIgaW5kZXggPSBjb29yZHMuY2g7CiAgICAgICB0aGlzLnZpZXcu
ZG9jLml0ZXIoMCwgY29vcmRzLmxpbmUsIGZ1bmN0aW9uIChsaW5lKSB7CiAgICAgICAgIGluZGV4
ICs9IGxpbmUudGV4dC5sZW5ndGggKyAxOwpAQCAtMjYzNSw5ICsyNzg3LDEzIEBAIHdpbmRvdy5D
b2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgIH0sCiAKICAgICBzY3JvbGxJbnRvVmlldzog
ZnVuY3Rpb24ocG9zKSB7Ci0gICAgICBwb3MgPSBwb3MgPyBjbGlwUG9zKHRoaXMudmlldy5kb2Ms
IHBvcykgOiBzZWxIZWFkKHRoaXMudmlldyk7Ci0gICAgICB2YXIgY29vcmRzID0gY3Vyc29yQ29v
cmRzKHRoaXMsIHBvcyk7Ci0gICAgICBzY3JvbGxJbnRvVmlldyh0aGlzLmRpc3BsYXksIGNvb3Jk
cy5sZWZ0LCBjb29yZHMudG9wLCBjb29yZHMubGVmdCwgY29vcmRzLmJvdHRvbSk7CisgICAgICBp
ZiAodHlwZW9mIHBvcyA9PSAibnVtYmVyIikgcG9zID0ge2xpbmU6IHBvcywgY2g6IDB9OworICAg
ICAgaWYgKCFwb3MgfHwgcG9zLmxpbmUgIT0gbnVsbCkgeworICAgICAgICBwb3MgPSBwb3MgPyBj
bGlwUG9zKHRoaXMudmlldy5kb2MsIHBvcykgOiB0aGlzLnZpZXcuc2VsLmhlYWQ7CisgICAgICAg
IHNjcm9sbFBvc0ludG9WaWV3KHRoaXMsIHBvcyk7CisgICAgICB9IGVsc2UgeworICAgICAgICBz
Y3JvbGxJbnRvVmlldyh0aGlzLCBwb3MubGVmdCwgcG9zLnRvcCwgcG9zLnJpZ2h0LCBwb3MuYm90
dG9tKTsKKyAgICAgIH0KICAgICB9LAogCiAgICAgc2V0U2l6ZTogZnVuY3Rpb24od2lkdGgsIGhl
aWdodCkgewpAQCAtMjY1MywxMiArMjgwOSwxMiBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5j
dGlvbigpIHsKICAgICBvZmY6IGZ1bmN0aW9uKHR5cGUsIGYpIHtvZmYodGhpcywgdHlwZSwgZik7
fSwKIAogICAgIG9wZXJhdGlvbjogZnVuY3Rpb24oZil7cmV0dXJuIG9wZXJhdGlvbih0aGlzLCBm
KSgpO30sCi0gICAgY29tcG91bmRDaGFuZ2U6IGZ1bmN0aW9uKGYpe3JldHVybiBjb21wb3VuZENo
YW5nZSh0aGlzLCBmKTt9LAogCi0gICAgcmVmcmVzaDogZnVuY3Rpb24oKXsKLSAgICAgIHVwZGF0
ZURpc3BsYXkodGhpcywgdHJ1ZSwgdGhpcy52aWV3LnNjcm9sbFRvcCk7Ci0gICAgICBpZiAodGhp
cy5kaXNwbGF5LnNjcm9sbGJhclYuc2Nyb2xsSGVpZ2h0ID4gdGhpcy52aWV3LnNjcm9sbFRvcCkK
LSAgICAgICAgdGhpcy5kaXNwbGF5LnNjcm9sbGJhclYuc2Nyb2xsVG9wID0gdGhpcy52aWV3LnNj
cm9sbFRvcDsKKyAgICByZWZyZXNoOiBmdW5jdGlvbigpIHsKKyAgICAgIGNsZWFyQ2FjaGVzKHRo
aXMpOworICAgICAgaWYgKHRoaXMuZGlzcGxheS5zY3JvbGxlci5zY3JvbGxIZWlnaHQgPiB0aGlz
LnZpZXcuc2Nyb2xsVG9wKQorICAgICAgICB0aGlzLmRpc3BsYXkuc2Nyb2xsYmFyVi5zY3JvbGxU
b3AgPSB0aGlzLmRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xsVG9wID0gdGhpcy52aWV3LnNjcm9sbFRv
cDsKKyAgICAgIHVwZGF0ZURpc3BsYXkodGhpcywgdHJ1ZSk7CiAgICAgfSwKIAogICAgIGdldElu
cHV0RmllbGQ6IGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGlzcGxheS5pbnB1dDt9LApAQCAtMjY5
MCwyMSArMjg0NiwyNSBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgb3B0
aW9uKCJpbmRlbnRVbml0IiwgMiwgbG9hZE1vZGUsIHRydWUpOwogICBvcHRpb24oImluZGVudFdp
dGhUYWJzIiwgZmFsc2UpOwogICBvcHRpb24oInNtYXJ0SW5kZW50IiwgdHJ1ZSk7Ci0gIG9wdGlv
bigidGFiU2l6ZSIsIDQsIGZ1bmN0aW9uKGNtKSB7bG9hZE1vZGUoY20pOyB1cGRhdGVEaXNwbGF5
KGNtLCB0cnVlKTt9LCB0cnVlKTsKKyAgb3B0aW9uKCJ0YWJTaXplIiwgNCwgZnVuY3Rpb24oY20p
IHsKKyAgICBsb2FkTW9kZShjbSk7CisgICAgY2xlYXJDYWNoZXMoY20pOworICAgIHVwZGF0ZURp
c3BsYXkoY20sIHRydWUpOworICB9LCB0cnVlKTsKICAgb3B0aW9uKCJlbGVjdHJpY0NoYXJzIiwg
dHJ1ZSk7Ci0gIG9wdGlvbigiYXV0b0NsZWFyRW1wdHlMaW5lcyIsIGZhbHNlKTsKKyAgb3B0aW9u
KCJydGxNb3ZlVmlzdWFsbHkiLCAhd2luZG93cyk7CiAKLSAgb3B0aW9uKCJ0aGVtZSIsICJkZWZh
dWx0IiwgZnVuY3Rpb24oY20sIHZhbCwgb2xkKSB7CisgIG9wdGlvbigidGhlbWUiLCAiZGVmYXVs
dCIsIGZ1bmN0aW9uKGNtKSB7CiAgICAgdGhlbWVDaGFuZ2VkKGNtKTsKLSAgICBpZiAob2xkICE9
IEluaXQpIGd1dHRlcnNDaGFuZ2VkKGNtKTsKLSAgfSk7CisgICAgZ3V0dGVyc0NoYW5nZWQoY20p
OworICB9LCB0cnVlKTsKICAgb3B0aW9uKCJrZXlNYXAiLCAiZGVmYXVsdCIsIGtleU1hcENoYW5n
ZWQpOwogICBvcHRpb24oImV4dHJhS2V5cyIsIG51bGwpOwogCiAgIG9wdGlvbigib25LZXlFdmVu
dCIsIG51bGwpOwogICBvcHRpb24oIm9uRHJhZ0V2ZW50IiwgbnVsbCk7CiAKLSAgb3B0aW9uKCJs
aW5lV3JhcHBpbmciLCBmYWxzZSwgd3JhcHBpbmdDaGFuZ2VkKTsKKyAgb3B0aW9uKCJsaW5lV3Jh
cHBpbmciLCBmYWxzZSwgd3JhcHBpbmdDaGFuZ2VkLCB0cnVlKTsKICAgb3B0aW9uKCJndXR0ZXJz
IiwgW10sIGZ1bmN0aW9uKGNtKSB7CiAgICAgc2V0R3V0dGVyc0ZvckxpbmVOdW1iZXJzKGNtLm9w
dGlvbnMpOwogICAgIGd1dHRlcnNDaGFuZ2VkKGNtKTsKQEAgLTI3MTMsOCArMjg3Myw5IEBAIHdp
bmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgIHNldEd1dHRlcnNGb3JMaW5lTnVt
YmVycyhjbS5vcHRpb25zKTsKICAgICBndXR0ZXJzQ2hhbmdlZChjbSk7CiAgIH0sIHRydWUpOwot
ICBvcHRpb24oImZpcnN0TGluZU51bWJlciIsIDEsIGd1dHRlcnNDaGFuZ2VkLCBmYWxzZSk7Ci0g
IG9wdGlvbigibGluZU51bWJlckZvcm1hdHRlciIsIGZ1bmN0aW9uKGludGVnZXIpIHtyZXR1cm4g
aW50ZWdlcjt9LCBndXR0ZXJzQ2hhbmdlZCwgZmFsc2UpOworICBvcHRpb24oImZpcnN0TGluZU51
bWJlciIsIDEsIGd1dHRlcnNDaGFuZ2VkLCB0cnVlKTsKKyAgb3B0aW9uKCJsaW5lTnVtYmVyRm9y
bWF0dGVyIiwgZnVuY3Rpb24oaW50ZWdlcikge3JldHVybiBpbnRlZ2VyO30sIGd1dHRlcnNDaGFu
Z2VkLCB0cnVlKTsKKyAgb3B0aW9uKCJzaG93Q3Vyc29yV2hlblNlbGVjdGluZyIsIGZhbHNlLCB1
cGRhdGVTZWxlY3Rpb24sIHRydWUpOwogICAKICAgb3B0aW9uKCJyZWFkT25seSIsIGZhbHNlLCBm
dW5jdGlvbihjbSwgdmFsKSB7CiAgICAgaWYgKHZhbCA9PSAibm9jdXJzb3IiKSB7b25CbHVyKGNt
KTsgY20uZGlzcGxheS5pbnB1dC5ibHVyKCk7fQpAQCAtMjc2NCwxMyArMjkyNSwxNyBAQCB3aW5k
b3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgfTsKIAogICBDb2RlTWlycm9yLmdldE1v
ZGUgPSBmdW5jdGlvbihvcHRpb25zLCBzcGVjKSB7Ci0gICAgdmFyIHNwZWMgPSBDb2RlTWlycm9y
LnJlc29sdmVNb2RlKHNwZWMpOworICAgIHNwZWMgPSBDb2RlTWlycm9yLnJlc29sdmVNb2RlKHNw
ZWMpOwogICAgIHZhciBtZmFjdG9yeSA9IG1vZGVzW3NwZWMubmFtZV07CiAgICAgaWYgKCFtZmFj
dG9yeSkgcmV0dXJuIENvZGVNaXJyb3IuZ2V0TW9kZShvcHRpb25zLCAidGV4dC9wbGFpbiIpOwog
ICAgIHZhciBtb2RlT2JqID0gbWZhY3Rvcnkob3B0aW9ucywgc3BlYyk7CiAgICAgaWYgKG1vZGVF
eHRlbnNpb25zLmhhc093blByb3BlcnR5KHNwZWMubmFtZSkpIHsKICAgICAgIHZhciBleHRzID0g
bW9kZUV4dGVuc2lvbnNbc3BlYy5uYW1lXTsKLSAgICAgIGZvciAodmFyIHByb3AgaW4gZXh0cykg
aWYgKGV4dHMuaGFzT3duUHJvcGVydHkocHJvcCkpIG1vZGVPYmpbcHJvcF0gPSBleHRzW3Byb3Bd
OworICAgICAgZm9yICh2YXIgcHJvcCBpbiBleHRzKSB7CisgICAgICAgIGlmICghZXh0cy5oYXNP
d25Qcm9wZXJ0eShwcm9wKSkgY29udGludWU7CisgICAgICAgIGlmIChtb2RlT2JqLmhhc093blBy
b3BlcnR5KHByb3ApKSBtb2RlT2JqWyJfIiArIHByb3BdID0gbW9kZU9ialtwcm9wXTsKKyAgICAg
ICAgbW9kZU9ialtwcm9wXSA9IGV4dHNbcHJvcF07CisgICAgICB9CiAgICAgfQogICAgIG1vZGVP
YmoubmFtZSA9IHNwZWMubmFtZTsKICAgICByZXR1cm4gbW9kZU9iajsKQEAgLTI4MzcsMTYgKzMw
MDIsMTkgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAga2lsbExpbmU6
IGZ1bmN0aW9uKGNtKSB7CiAgICAgICB2YXIgZnJvbSA9IGNtLmdldEN1cnNvcih0cnVlKSwgdG8g
PSBjbS5nZXRDdXJzb3IoZmFsc2UpLCBzZWwgPSAhcG9zRXEoZnJvbSwgdG8pOwogICAgICAgaWYg
KCFzZWwgJiYgY20uZ2V0TGluZShmcm9tLmxpbmUpLmxlbmd0aCA9PSBmcm9tLmNoKQotICAgICAg
ICBjbS5yZXBsYWNlUmFuZ2UoIiIsIGZyb20sIHtsaW5lOiBmcm9tLmxpbmUgKyAxLCBjaDogMH0p
OwotICAgICAgZWxzZSBjbS5yZXBsYWNlUmFuZ2UoIiIsIGZyb20sIHNlbCA/IHRvIDoge2xpbmU6
IGZyb20ubGluZX0pOworICAgICAgICBjbS5yZXBsYWNlUmFuZ2UoIiIsIGZyb20sIHtsaW5lOiBm
cm9tLmxpbmUgKyAxLCBjaDogMH0sICJkZWxldGUiKTsKKyAgICAgIGVsc2UgY20ucmVwbGFjZVJh
bmdlKCIiLCBmcm9tLCBzZWwgPyB0byA6IHtsaW5lOiBmcm9tLmxpbmV9LCAiZGVsZXRlIik7Cisg
ICAgfSwKKyAgICBkZWxldGVMaW5lOiBmdW5jdGlvbihjbSkgeworICAgICAgdmFyIGwgPSBjbS5n
ZXRDdXJzb3IoKS5saW5lOworICAgICAgY20ucmVwbGFjZVJhbmdlKCIiLCB7bGluZTogbCwgY2g6
IDB9LCB7bGluZTogbH0sICJkZWxldGUiKTsKICAgICB9LAotICAgIGRlbGV0ZUxpbmU6IGZ1bmN0
aW9uKGNtKSB7dmFyIGwgPSBjbS5nZXRDdXJzb3IoKS5saW5lOyBjbS5yZXBsYWNlUmFuZ2UoIiIs
IHtsaW5lOiBsLCBjaDogMH0sIHtsaW5lOiBsfSk7fSwKICAgICB1bmRvOiBmdW5jdGlvbihjbSkg
e2NtLnVuZG8oKTt9LAogICAgIHJlZG86IGZ1bmN0aW9uKGNtKSB7Y20ucmVkbygpO30sCi0gICAg
Z29Eb2NTdGFydDogZnVuY3Rpb24oY20pIHtjbS5zZXRDdXJzb3IoMCwgMCwgdHJ1ZSk7fSwKLSAg
ICBnb0RvY0VuZDogZnVuY3Rpb24oY20pIHtjbS5zZXRTZWxlY3Rpb24oe2xpbmU6IGNtLmxpbmVD
b3VudCgpIC0gMX0sIG51bGwsIHRydWUpO30sCisgICAgZ29Eb2NTdGFydDogZnVuY3Rpb24oY20p
IHtjbS5leHRlbmRTZWxlY3Rpb24oe2xpbmU6IDAsIGNoOiAwfSk7fSwKKyAgICBnb0RvY0VuZDog
ZnVuY3Rpb24oY20pIHtjbS5leHRlbmRTZWxlY3Rpb24oe2xpbmU6IGNtLmxpbmVDb3VudCgpIC0g
MX0pO30sCiAgICAgZ29MaW5lU3RhcnQ6IGZ1bmN0aW9uKGNtKSB7Ci0gICAgICBjbS5zZXRDdXJz
b3IobGluZVN0YXJ0KGNtLCBjbS5nZXRDdXJzb3IoKS5saW5lKSwgbnVsbCwgdHJ1ZSk7CisgICAg
ICBjbS5leHRlbmRTZWxlY3Rpb24obGluZVN0YXJ0KGNtLCBjbS5nZXRDdXJzb3IoKS5saW5lKSk7
CiAgICAgfSwKICAgICBnb0xpbmVTdGFydFNtYXJ0OiBmdW5jdGlvbihjbSkgewogICAgICAgdmFy
IGN1ciA9IGNtLmdldEN1cnNvcigpLCBzdGFydCA9IGxpbmVTdGFydChjbSwgY3VyLmxpbmUpOwpA
QCAtMjg1NSwxMSArMzAyMywxMSBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsK
ICAgICAgIGlmICghb3JkZXIgfHwgb3JkZXJbMF0ubGV2ZWwgPT0gMCkgewogICAgICAgICB2YXIg
Zmlyc3ROb25XUyA9IE1hdGgubWF4KDAsIGxpbmUudGV4dC5zZWFyY2goL1xTLykpOwogICAgICAg
ICB2YXIgaW5XUyA9IGN1ci5saW5lID09IHN0YXJ0LmxpbmUgJiYgY3VyLmNoIDw9IGZpcnN0Tm9u
V1MgJiYgY3VyLmNoOwotICAgICAgICBjbS5zZXRDdXJzb3Ioc3RhcnQubGluZSwgaW5XUyA/IDAg
OiBmaXJzdE5vbldTLCB0cnVlKTsKLSAgICAgIH0gZWxzZSBjbS5zZXRDdXJzb3Ioc3RhcnQsIG51
bGwsIHRydWUpOworICAgICAgICBjbS5leHRlbmRTZWxlY3Rpb24oe2xpbmU6IHN0YXJ0LmxpbmUs
IGNoOiBpbldTID8gMCA6IGZpcnN0Tm9uV1N9KTsKKyAgICAgIH0gZWxzZSBjbS5leHRlbmRTZWxl
Y3Rpb24oc3RhcnQpOwogICAgIH0sCiAgICAgZ29MaW5lRW5kOiBmdW5jdGlvbihjbSkgewotICAg
ICAgY20uc2V0Q3Vyc29yKGxpbmVFbmQoY20sIGNtLmdldEN1cnNvcigpLmxpbmUpLCBudWxsLCB0
cnVlKTsKKyAgICAgIGNtLmV4dGVuZFNlbGVjdGlvbihsaW5lRW5kKGNtLCBjbS5nZXRDdXJzb3Io
KS5saW5lKSk7CiAgICAgfSwKICAgICBnb0xpbmVVcDogZnVuY3Rpb24oY20pIHtjbS5tb3ZlVigt
MSwgImxpbmUiKTt9LAogICAgIGdvTGluZURvd246IGZ1bmN0aW9uKGNtKSB7Y20ubW92ZVYoMSwg
ImxpbmUiKTt9LApAQCAtMjg3OCwxMCArMzA0NiwxMCBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChm
dW5jdGlvbigpIHsKICAgICBpbmRlbnRBdXRvOiBmdW5jdGlvbihjbSkge2NtLmluZGVudFNlbGVj
dGlvbigic21hcnQiKTt9LAogICAgIGluZGVudE1vcmU6IGZ1bmN0aW9uKGNtKSB7Y20uaW5kZW50
U2VsZWN0aW9uKCJhZGQiKTt9LAogICAgIGluZGVudExlc3M6IGZ1bmN0aW9uKGNtKSB7Y20uaW5k
ZW50U2VsZWN0aW9uKCJzdWJ0cmFjdCIpO30sCi0gICAgaW5zZXJ0VGFiOiBmdW5jdGlvbihjbSkg
e2NtLnJlcGxhY2VTZWxlY3Rpb24oIlx0IiwgImVuZCIpO30sCisgICAgaW5zZXJ0VGFiOiBmdW5j
dGlvbihjbSkge2NtLnJlcGxhY2VTZWxlY3Rpb24oIlx0IiwgImVuZCIsICJpbnB1dCIpO30sCiAg
ICAgZGVmYXVsdFRhYjogZnVuY3Rpb24oY20pIHsKICAgICAgIGlmIChjbS5zb21ldGhpbmdTZWxl
Y3RlZCgpKSBjbS5pbmRlbnRTZWxlY3Rpb24oImFkZCIpOwotICAgICAgZWxzZSBjbS5yZXBsYWNl
U2VsZWN0aW9uKCJcdCIsICJlbmQiKTsKKyAgICAgIGVsc2UgY20ucmVwbGFjZVNlbGVjdGlvbigi
XHQiLCAiZW5kIiwgImlucHV0Iik7CiAgICAgfSwKICAgICB0cmFuc3Bvc2VDaGFyczogZnVuY3Rp
b24oY20pIHsKICAgICAgIHZhciBjdXIgPSBjbS5nZXRDdXJzb3IoKSwgbGluZSA9IGNtLmdldExp
bmUoY3VyLmxpbmUpOwpAQCAtMjg5MCw4ICszMDU4LDEwIEBAIHdpbmRvdy5Db2RlTWlycm9yID0g
KGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgICAgICAge2xpbmU6IGN1ci5saW5lLCBj
aDogY3VyLmNoIC0gMX0sIHtsaW5lOiBjdXIubGluZSwgY2g6IGN1ci5jaCArIDF9KTsKICAgICB9
LAogICAgIG5ld2xpbmVBbmRJbmRlbnQ6IGZ1bmN0aW9uKGNtKSB7Ci0gICAgICBjbS5yZXBsYWNl
U2VsZWN0aW9uKCJcbiIsICJlbmQiKTsKLSAgICAgIGNtLmluZGVudExpbmUoY20uZ2V0Q3Vyc29y
KCkubGluZSk7CisgICAgICBvcGVyYXRpb24oY20sIGZ1bmN0aW9uKCkgeworICAgICAgICBjbS5y
ZXBsYWNlU2VsZWN0aW9uKCJcbiIsICJlbmQiLCAiaW5wdXQiKTsKKyAgICAgICAgY20uaW5kZW50
TGluZShjbS5nZXRDdXJzb3IoKS5saW5lLCBudWxsLCB0cnVlKTsKKyAgICAgIH0pKCk7CiAgICAg
fSwKICAgICB0b2dnbGVPdmVyd3JpdGU6IGZ1bmN0aW9uKGNtKSB7Y20udG9nZ2xlT3ZlcndyaXRl
KCk7fQogICB9OwpAQCAtMjkyOSw3ICszMDk5LDcgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVu
Y3Rpb24oKSB7CiAgIGtleU1hcC5lbWFjc3kgPSB7CiAgICAgIkN0cmwtRiI6ICJnb0NoYXJSaWdo
dCIsICJDdHJsLUIiOiAiZ29DaGFyTGVmdCIsICJDdHJsLVAiOiAiZ29MaW5lVXAiLCAiQ3RybC1O
IjogImdvTGluZURvd24iLAogICAgICJBbHQtRiI6ICJnb1dvcmRSaWdodCIsICJBbHQtQiI6ICJn
b1dvcmRMZWZ0IiwgIkN0cmwtQSI6ICJnb0xpbmVTdGFydCIsICJDdHJsLUUiOiAiZ29MaW5lRW5k
IiwKLSAgICAiQ3RybC1WIjogImdvUGFnZVVwIiwgIlNoaWZ0LUN0cmwtViI6ICJnb1BhZ2VEb3du
IiwgIkN0cmwtRCI6ICJkZWxDaGFyQWZ0ZXIiLCAiQ3RybC1IIjogImRlbENoYXJCZWZvcmUiLAor
ICAgICJDdHJsLVYiOiAiZ29QYWdlRG93biIsICJTaGlmdC1DdHJsLVYiOiAiZ29QYWdlVXAiLCAi
Q3RybC1EIjogImRlbENoYXJBZnRlciIsICJDdHJsLUgiOiAiZGVsQ2hhckJlZm9yZSIsCiAgICAg
IkFsdC1EIjogImRlbFdvcmRBZnRlciIsICJBbHQtQmFja3NwYWNlIjogImRlbFdvcmRCZWZvcmUi
LCAiQ3RybC1LIjogImtpbGxMaW5lIiwgIkN0cmwtVCI6ICJ0cmFuc3Bvc2VDaGFycyIKICAgfTsK
IApAQCAtMjk0MCw3ICszMTEwLDcgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7
CiAgICAgZWxzZSByZXR1cm4gdmFsOwogICB9CiAKLSAgZnVuY3Rpb24gbG9va3VwS2V5KG5hbWUs
IGV4dHJhTWFwLCBtYXAsIGhhbmRsZSwgc3RvcCkgeworICBmdW5jdGlvbiBsb29rdXBLZXkobmFt
ZSwgbWFwcywgaGFuZGxlLCBzdG9wKSB7CiAgICAgZnVuY3Rpb24gbG9va3VwKG1hcCkgewogICAg
ICAgbWFwID0gZ2V0S2V5TWFwKG1hcCk7CiAgICAgICB2YXIgZm91bmQgPSBtYXBbbmFtZV07CkBA
IC0yOTYyLDggKzMxMzIsOSBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAg
ICAgIH0KICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAgaWYgKGV4dHJhTWFwICYmIGxv
b2t1cChleHRyYU1hcCkpIHJldHVybiB0cnVlOwotICAgIHJldHVybiBsb29rdXAobWFwKTsKKwor
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWFwcy5sZW5ndGg7ICsraSkKKyAgICAgIGlmIChsb29r
dXAobWFwc1tpXSkpIHJldHVybiB0cnVlOwogICB9CiAgIGZ1bmN0aW9uIGlzTW9kaWZpZXJLZXko
ZXZlbnQpIHsKICAgICB2YXIgbmFtZSA9IGtleU5hbWVzW2VfcHJvcChldmVudCwgImtleUNvZGUi
KV07CkBAIC0yOTkyLDE1ICszMTYzLDE1IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9u
KCkgewogICAgIGlmICh0ZXh0YXJlYS5mb3JtKSB7CiAgICAgICAvLyBEZXBsb3JhYmxlIGhhY2sg
dG8gbWFrZSB0aGUgc3VibWl0IG1ldGhvZCBkbyB0aGUgcmlnaHQgdGhpbmcuCiAgICAgICBvbih0
ZXh0YXJlYS5mb3JtLCAic3VibWl0Iiwgc2F2ZSk7Ci0gICAgICBpZiAodHlwZW9mIHRleHRhcmVh
LmZvcm0uc3VibWl0ID09ICJmdW5jdGlvbiIpIHsKLSAgICAgICAgdmFyIHJlYWxTdWJtaXQgPSB0
ZXh0YXJlYS5mb3JtLnN1Ym1pdDsKLSAgICAgICAgdGV4dGFyZWEuZm9ybS5zdWJtaXQgPSBmdW5j
dGlvbiB3cmFwcGVkU3VibWl0KCkgeworICAgICAgdmFyIGZvcm0gPSB0ZXh0YXJlYS5mb3JtLCBy
ZWFsU3VibWl0ID0gZm9ybS5zdWJtaXQ7CisgICAgICB0cnkgeworICAgICAgICBmb3JtLnN1Ym1p
dCA9IGZ1bmN0aW9uIHdyYXBwZWRTdWJtaXQoKSB7CiAgICAgICAgICAgc2F2ZSgpOwotICAgICAg
ICAgIHRleHRhcmVhLmZvcm0uc3VibWl0ID0gcmVhbFN1Ym1pdDsKLSAgICAgICAgICB0ZXh0YXJl
YS5mb3JtLnN1Ym1pdCgpOwotICAgICAgICAgIHRleHRhcmVhLmZvcm0uc3VibWl0ID0gd3JhcHBl
ZFN1Ym1pdDsKKyAgICAgICAgICBmb3JtLnN1Ym1pdCA9IHJlYWxTdWJtaXQ7CisgICAgICAgICAg
Zm9ybS5zdWJtaXQoKTsKKyAgICAgICAgICBmb3JtLnN1Ym1pdCA9IHdyYXBwZWRTdWJtaXQ7CiAg
ICAgICAgIH07Ci0gICAgICB9CisgICAgICB9IGNhdGNoKGUpIHt9CiAgICAgfQogCiAgICAgdGV4
dGFyZWEuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKQEAgLTMzMTcsNiArMzQ4OCwxMyBAQCB3aW5k
b3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgZnVuY3Rpb24gY29sbGFwc2VkU3BhbkF0
U3RhcnQobGluZSkgeyByZXR1cm4gY29sbGFwc2VkU3BhbkF0KGxpbmUsIC0xKTsgfQogICBmdW5j
dGlvbiBjb2xsYXBzZWRTcGFuQXRFbmQobGluZSkgeyByZXR1cm4gY29sbGFwc2VkU3BhbkF0KGxp
bmUsIGxpbmUudGV4dC5sZW5ndGggKyAxKTsgfQogCisgIGZ1bmN0aW9uIHZpc3VhbExpbmUoZG9j
LCBsaW5lKSB7CisgICAgdmFyIG1lcmdlZDsKKyAgICB3aGlsZSAobWVyZ2VkID0gY29sbGFwc2Vk
U3BhbkF0U3RhcnQobGluZSkpCisgICAgICBsaW5lID0gZ2V0TGluZShkb2MsIG1lcmdlZC5maW5k
KCkuZnJvbS5saW5lKTsKKyAgICByZXR1cm4gbGluZTsKKyAgfQorCiAgIGZ1bmN0aW9uIGxpbmVJ
c0hpZGRlbihsaW5lKSB7CiAgICAgdmFyIHNwcyA9IHNhd0NvbGxhcHNlZFNwYW5zICYmIGxpbmUu
bWFya2VkU3BhbnM7CiAgICAgaWYgKHNwcykgZm9yICh2YXIgc3AsIGkgPSAwOyBpIDwgc3BzLmxl
bmd0aDsgKytpKSB7CkBAIC0zMzY3LDcgKzM1NDUsNyBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChm
dW5jdGlvbigpIHsKICAgZnVuY3Rpb24gYXR0YWNoTWFya2VkU3BhbnMobGluZSwgc3BhbnMpIHsK
ICAgICBpZiAoIXNwYW5zKSByZXR1cm47CiAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzcGFucy5s
ZW5ndGg7ICsraSkKLSAgICAgIHZhciBtYXJrZXIgPSBzcGFuc1tpXS5tYXJrZXIubGluZXMucHVz
aChsaW5lKTsKKyAgICAgIHNwYW5zW2ldLm1hcmtlci5saW5lcy5wdXNoKGxpbmUpOwogICAgIGxp
bmUubWFya2VkU3BhbnMgPSBzcGFuczsKICAgfQogCkBAIC0zMzc4LDE4ICszNTU2LDE4IEBAIHdp
bmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICBmdW5jdGlvbiBtYWtlTGluZSh0ZXh0
LCBtYXJrZWRTcGFucywgaGVpZ2h0KSB7CiAgICAgdmFyIGxpbmUgPSB7dGV4dDogdGV4dCwgaGVp
Z2h0OiBoZWlnaHR9OwogICAgIGF0dGFjaE1hcmtlZFNwYW5zKGxpbmUsIG1hcmtlZFNwYW5zKTsK
LSAgICBpZiAobWFya2VkU3BhbnMgJiYgY29sbGFwc2VkU3BhbkF0U3RhcnQobGluZSkpIGxpbmUu
aGVpZ2h0ID0gMDsKKyAgICBpZiAobGluZUlzSGlkZGVuKGxpbmUpKSBsaW5lLmhlaWdodCA9IDA7
CiAgICAgcmV0dXJuIGxpbmU7CiAgIH0KIAogICBmdW5jdGlvbiB1cGRhdGVMaW5lKGNtLCBsaW5l
LCB0ZXh0LCBtYXJrZWRTcGFucykgewogICAgIGxpbmUudGV4dCA9IHRleHQ7Ci0gICAgbGluZS5z
dGF0ZUFmdGVyID0gbGluZS5zdHlsZXMgPSBudWxsOworICAgIGlmIChsaW5lLnN0YXRlQWZ0ZXIp
IGxpbmUuc3RhdGVBZnRlciA9IG51bGw7CisgICAgaWYgKGxpbmUuc3R5bGVzKSBsaW5lLnN0eWxl
cyA9IG51bGw7CiAgICAgaWYgKGxpbmUub3JkZXIgIT0gbnVsbCkgbGluZS5vcmRlciA9IG51bGw7
CiAgICAgZGV0YWNoTWFya2VkU3BhbnMobGluZSk7CiAgICAgYXR0YWNoTWFya2VkU3BhbnMobGlu
ZSwgbWFya2VkU3BhbnMpOwotICAgIHZhciBoaWRkZW4gPSBjb2xsYXBzZWRTcGFuQXRTdGFydChs
aW5lKTsKLSAgICBpZiAoaGlkZGVuKSBsaW5lLmhlaWdodCA9IDA7CisgICAgaWYgKGxpbmVJc0hp
ZGRlbihsaW5lKSkgbGluZS5oZWlnaHQgPSAwOwogICAgIGVsc2UgaWYgKCFsaW5lLmhlaWdodCkg
bGluZS5oZWlnaHQgPSB0ZXh0SGVpZ2h0KGNtLmRpc3BsYXkpOwogICAgIHNpZ25hbExhdGVyKGNt
LCBsaW5lLCAiY2hhbmdlIik7CiAgIH0KQEAgLTM0MDIsMzEgKzM1ODAsNzEgQEAgd2luZG93LkNv
ZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgIC8vIFJ1biB0aGUgZ2l2ZW4gbW9kZSdzIHBhcnNl
ciBvdmVyIGEgbGluZSwgdXBkYXRlIHRoZSBzdHlsZXMKICAgLy8gYXJyYXksIHdoaWNoIGNvbnRh
aW5zIGFsdGVybmF0aW5nIGZyYWdtZW50cyBvZiB0ZXh0IGFuZCBDU1MKICAgLy8gY2xhc3Nlcy4K
LSAgZnVuY3Rpb24gaGlnaGxpZ2h0TGluZShjbSwgbGluZSwgc3RhdGUpIHsKLSAgICB2YXIgbW9k
ZSA9IGNtLnZpZXcubW9kZSwgZmxhdHRlblNwYW5zID0gY20ub3B0aW9ucy5mbGF0dGVuU3BhbnM7
Ci0gICAgdmFyIGNoYW5nZWQgPSAhbGluZS5zdHlsZXMsIHBvcyA9IDAsIGN1clRleHQgPSAiIiwg
Y3VyU3R5bGUgPSBudWxsOwotICAgIHZhciBzdHJlYW0gPSBuZXcgU3RyaW5nU3RyZWFtKGxpbmUu
dGV4dCwgY20ub3B0aW9ucy50YWJTaXplKSwgc3QgPSBsaW5lLnN0eWxlcyB8fCAobGluZS5zdHls
ZXMgPSBbXSk7Ci0gICAgaWYgKGxpbmUudGV4dCA9PSAiIiAmJiBtb2RlLmJsYW5rTGluZSkgbW9k
ZS5ibGFua0xpbmUoc3RhdGUpOworICBmdW5jdGlvbiBydW5Nb2RlKGNtLCB0ZXh0LCBtb2RlLCBz
dGF0ZSwgZikgeworICAgIHZhciBmbGF0dGVuU3BhbnMgPSBjbS5vcHRpb25zLmZsYXR0ZW5TcGFu
czsKKyAgICB2YXIgY3VyVGV4dCA9ICIiLCBjdXJTdHlsZSA9IG51bGw7CisgICAgdmFyIHN0cmVh
bSA9IG5ldyBTdHJpbmdTdHJlYW0odGV4dCwgY20ub3B0aW9ucy50YWJTaXplKTsKKyAgICBpZiAo
dGV4dCA9PSAiIiAmJiBtb2RlLmJsYW5rTGluZSkgbW9kZS5ibGFua0xpbmUoc3RhdGUpOwogICAg
IHdoaWxlICghc3RyZWFtLmVvbCgpKSB7Ci0gICAgICB2YXIgc3R5bGUgPSBtb2RlLnRva2VuKHN0
cmVhbSwgc3RhdGUpLCBzdWJzdHIgPSBzdHJlYW0uY3VycmVudCgpOworICAgICAgdmFyIHN0eWxl
ID0gbW9kZS50b2tlbihzdHJlYW0sIHN0YXRlKTsKKyAgICAgIGlmIChzdHJlYW0ucG9zID4gNTAw
MCkgeworICAgICAgICAvLyBXZWJraXQgc2VlbXMgdG8gcmVmdXNlIHRvIHJlbmRlciB0ZXh0IG5v
ZGVzIGxvbmdlciB0aGFuIDU3NDQ0IGNoYXJhY3RlcnMKKyAgICAgICAgc3RyZWFtLnBvcyA9IE1h
dGgubWluKHRleHQubGVuZ3RoLCBzdHJlYW0ucG9zICsgNTAwMDApOworICAgICAgICBzdHlsZSA9
IG51bGw7CisgICAgICB9CisgICAgICB2YXIgc3Vic3RyID0gc3RyZWFtLmN1cnJlbnQoKTsKICAg
ICAgIHN0cmVhbS5zdGFydCA9IHN0cmVhbS5wb3M7CiAgICAgICBpZiAoIWZsYXR0ZW5TcGFucyB8
fCBjdXJTdHlsZSAhPSBzdHlsZSkgewotICAgICAgICBpZiAoY3VyVGV4dCkgewotICAgICAgICAg
IGNoYW5nZWQgPSBjaGFuZ2VkIHx8IHBvcyA+PSBzdC5sZW5ndGggfHwgY3VyVGV4dCAhPSBzdFtw
b3NdIHx8IGN1clN0eWxlICE9IHN0W3BvcysxXTsKLSAgICAgICAgICBzdFtwb3MrK10gPSBjdXJU
ZXh0OyBzdFtwb3MrK10gPSBjdXJTdHlsZTsKLSAgICAgICAgfQorICAgICAgICBpZiAoY3VyVGV4
dCkgZihjdXJUZXh0LCBjdXJTdHlsZSk7CiAgICAgICAgIGN1clRleHQgPSBzdWJzdHI7IGN1clN0
eWxlID0gc3R5bGU7CiAgICAgICB9IGVsc2UgY3VyVGV4dCA9IGN1clRleHQgKyBzdWJzdHI7Ci0g
ICAgICAvLyBHaXZlIHVwIHdoZW4gbGluZSBpcyByaWRpY3Vsb3VzbHkgbG9uZwotICAgICAgaWYg
KHN0cmVhbS5wb3MgPiA1MDAwKSBicmVhazsKICAgICB9Ci0gICAgaWYgKGN1clRleHQpIHsKLSAg
ICAgIGNoYW5nZWQgPSBjaGFuZ2VkIHx8IHBvcyA+PSBzdC5sZW5ndGggfHwgY3VyVGV4dCAhPSBz
dFtwb3NdIHx8IGN1clN0eWxlICE9IHN0W3BvcysxXTsKLSAgICAgIHN0W3BvcysrXSA9IGN1clRl
eHQ7IHN0W3BvcysrXSA9IGN1clN0eWxlOworICAgIGlmIChjdXJUZXh0KSBmKGN1clRleHQsIGN1
clN0eWxlKTsKKyAgfQorCisgIGZ1bmN0aW9uIGhpZ2hsaWdodExpbmUoY20sIGxpbmUsIHN0YXRl
KSB7CisgICAgLy8gQSBzdHlsZXMgYXJyYXkgYWx3YXlzIHN0YXJ0cyB3aXRoIGEgbnVtYmVyIGlk
ZW50aWZ5aW5nIHRoZQorICAgIC8vIG1vZGUvb3ZlcmxheXMgdGhhdCBpdCBpcyBiYXNlZCBvbiAo
Zm9yIGVhc3kgaW52YWxpZGF0aW9uKS4KKyAgICB2YXIgc3QgPSBbY20udmlldy5tb2RlR2VuXTsK
KyAgICAvLyBDb21wdXRlIHRoZSBiYXNlIGFycmF5IG9mIHN0eWxlcworICAgIHJ1bk1vZGUoY20s
IGxpbmUudGV4dCwgY20udmlldy5tb2RlLCBzdGF0ZSwgZnVuY3Rpb24odHh0LCBzdHlsZSkge3N0
LnB1c2godHh0LCBzdHlsZSk7fSk7CisKKyAgICAvLyBSdW4gb3ZlcmxheXMsIGFkanVzdCBzdHls
ZSBhcnJheS4KKyAgICBmb3IgKHZhciBvID0gMDsgbyA8IGNtLnZpZXcub3ZlcmxheXMubGVuZ3Ro
OyArK28pIHsKKyAgICAgIHZhciBvdmVybGF5ID0gY20udmlldy5vdmVybGF5c1tvXSwgaSA9IDE7
CisgICAgICBydW5Nb2RlKGNtLCBsaW5lLnRleHQsIG92ZXJsYXkubW9kZSwgdHJ1ZSwgZnVuY3Rp
b24odHh0LCBzdHlsZSkgeworICAgICAgICB2YXIgc3RhcnQgPSBpLCBsZW4gPSB0eHQubGVuZ3Ro
OworICAgICAgICAvLyBFbnN1cmUgdGhlcmUncyBhIHRva2VuIGVuZCBhdCB0aGUgY3VycmVudCBw
b3NpdGlvbiwgYW5kIHRoYXQgaSBwb2ludHMgYXQgaXQKKyAgICAgICAgd2hpbGUgKGxlbikgewor
ICAgICAgICAgIHZhciBjdXIgPSBzdFtpXSwgbGVuXyA9IGN1ci5sZW5ndGg7CisgICAgICAgICAg
aWYgKGxlbl8gPD0gbGVuKSB7CisgICAgICAgICAgICBsZW4gLT0gbGVuXzsKKyAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgc3Quc3BsaWNlKGksIDEsIGN1ci5zbGljZSgwLCBsZW4pLCBz
dFtpKzFdLCBjdXIuc2xpY2UobGVuKSk7CisgICAgICAgICAgICBsZW4gPSAwOworICAgICAgICAg
IH0KKyAgICAgICAgICBpICs9IDI7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFzdHlsZSkgcmV0
dXJuOworICAgICAgICBpZiAob3ZlcmxheS5vcGFxdWUpIHsKKyAgICAgICAgICBzdC5zcGxpY2Uo
c3RhcnQsIGkgLSBzdGFydCwgdHh0LCBzdHlsZSk7CisgICAgICAgICAgaSA9IHN0YXJ0ICsgMjsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBmb3IgKDsgc3RhcnQgPCBpOyBzdGFydCArPSAy
KSB7CisgICAgICAgICAgICB2YXIgY3VyID0gc3Rbc3RhcnQrMV07CisgICAgICAgICAgICBzdFtz
dGFydCsxXSA9IGN1ciA/IGN1ciArICIgIiArIHN0eWxlIDogc3R5bGU7CisgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgICB9KTsKICAgICB9Ci0gICAgaWYgKHN0cmVhbS5wb3MgPiA1MDAwKSB7
IHN0W3BvcysrXSA9IGxpbmUudGV4dC5zbGljZShzdHJlYW0ucG9zKTsgc3RbcG9zKytdID0gbnVs
bDsgfQotICAgIGlmIChwb3MgIT0gc3QubGVuZ3RoKSB7IHN0Lmxlbmd0aCA9IHBvczsgY2hhbmdl
ZCA9IHRydWU7IH0KLSAgICByZXR1cm4gY2hhbmdlZDsKKworICAgIHJldHVybiBzdDsKKyAgfQor
CisgIGZ1bmN0aW9uIGdldExpbmVTdHlsZXMoY20sIGxpbmUpIHsKKyAgICBpZiAoIWxpbmUuc3R5
bGVzIHx8IGxpbmUuc3R5bGVzWzBdICE9IGNtLnZpZXcubW9kZUdlbikKKyAgICAgIGxpbmUuc3R5
bGVzID0gaGlnaGxpZ2h0TGluZShjbSwgbGluZSwgbGluZS5zdGF0ZUFmdGVyID0gZ2V0U3RhdGVC
ZWZvcmUoY20sIGxpbmVObyhsaW5lKSkpOworICAgIHJldHVybiBsaW5lLnN0eWxlczsKICAgfQog
CiAgIC8vIExpZ2h0d2VpZ2h0IGZvcm0gb2YgaGlnaGxpZ2h0IC0tIHByb2NlZWQgb3ZlciB0aGlz
IGxpbmUgYW5kCkBAIC0zNDQxLDIyICszNjU5LDYgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVu
Y3Rpb24oKSB7CiAgICAgfQogICB9CiAKLSAgLy8gRmV0Y2ggdGhlIHBhcnNlciB0b2tlbiBmb3Ig
YSBnaXZlbiBjaGFyYWN0ZXIuIFVzZWZ1bCBmb3IgaGFja3MKLSAgLy8gdGhhdCB3YW50IHRvIGlu
c3BlY3QgdGhlIG1vZGUgc3RhdGUgKHNheSwgZm9yIGNvbXBsZXRpb24pLgotICBmdW5jdGlvbiBn
ZXRUb2tlbkF0KGNtLCBsaW5lLCBzdGF0ZSwgY2gpIHsKLSAgICB2YXIgbW9kZSA9IGNtLnZpZXcu
bW9kZTsKLSAgICB2YXIgdHh0ID0gbGluZS50ZXh0LCBzdHJlYW0gPSBuZXcgU3RyaW5nU3RyZWFt
KHR4dCwgY20ub3B0aW9ucy50YWJTaXplKTsKLSAgICB3aGlsZSAoc3RyZWFtLnBvcyA8IGNoICYm
ICFzdHJlYW0uZW9sKCkpIHsKLSAgICAgIHN0cmVhbS5zdGFydCA9IHN0cmVhbS5wb3M7Ci0gICAg
ICB2YXIgc3R5bGUgPSBtb2RlLnRva2VuKHN0cmVhbSwgc3RhdGUpOwotICAgIH0KLSAgICByZXR1
cm4ge3N0YXJ0OiBzdHJlYW0uc3RhcnQsCi0gICAgICAgICAgICBlbmQ6IHN0cmVhbS5wb3MsCi0g
ICAgICAgICAgICBzdHJpbmc6IHN0cmVhbS5jdXJyZW50KCksCi0gICAgICAgICAgICBjbGFzc05h
bWU6IHN0eWxlIHx8IG51bGwsCi0gICAgICAgICAgICBzdGF0ZTogc3RhdGV9OwotICB9Ci0KICAg
dmFyIHN0eWxlVG9DbGFzc0NhY2hlID0ge307CiAgIGZ1bmN0aW9uIHN0eWxlVG9DbGFzcyhzdHls
ZSkgewogICAgIGlmICghc3R5bGUpIHJldHVybiBudWxsOwpAQCAtMzQ2NSw4ICszNjY3LDkgQEAg
d2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgIH0KIAogICBmdW5jdGlvbiBsaW5l
Q29udGVudChjbSwgcmVhbExpbmUsIG1lYXN1cmUpIHsKLSAgICB2YXIgbWVyZ2VkLCBsaW5lID0g
cmVhbExpbmUsIGxpbmVCZWZvcmUsIHNhd0JlZm9yZTsKKyAgICB2YXIgbWVyZ2VkLCBsaW5lID0g
cmVhbExpbmUsIGxpbmVCZWZvcmUsIHNhd0JlZm9yZSwgc2ltcGxlID0gdHJ1ZTsKICAgICB3aGls
ZSAobWVyZ2VkID0gY29sbGFwc2VkU3BhbkF0U3RhcnQobGluZSkpIHsKKyAgICAgIHNpbXBsZSA9
IGZhbHNlOwogICAgICAgbGluZSA9IGdldExpbmUoY20udmlldy5kb2MsIG1lcmdlZC5maW5kKCku
ZnJvbS5saW5lKTsKICAgICAgIGlmICghbGluZUJlZm9yZSkgbGluZUJlZm9yZSA9IGxpbmU7CiAg
ICAgfQpAQCAtMzQ3NiwyMiArMzY3OSwyMyBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlv
bigpIHsKICAgICBpZiAobGluZS50ZXh0Q2xhc3MpIGJ1aWxkZXIucHJlLmNsYXNzTmFtZSA9IGxp
bmUudGV4dENsYXNzOwogCiAgICAgZG8gewotICAgICAgaWYgKCFsaW5lLnN0eWxlcykKLSAgICAg
ICAgaGlnaGxpZ2h0TGluZShjbSwgbGluZSwgbGluZS5zdGF0ZUFmdGVyID0gZ2V0U3RhdGVCZWZv
cmUoY20sIGxpbmVObyhsaW5lKSkpOwogICAgICAgYnVpbGRlci5tZWFzdXJlID0gbGluZSA9PSBy
ZWFsTGluZSAmJiBtZWFzdXJlOwogICAgICAgYnVpbGRlci5wb3MgPSAwOwogICAgICAgYnVpbGRl
ci5hZGRUb2tlbiA9IGJ1aWxkZXIubWVhc3VyZSA/IGJ1aWxkVG9rZW5NZWFzdXJlIDogYnVpbGRU
b2tlbjsKICAgICAgIGlmIChtZWFzdXJlICYmIHNhd0JlZm9yZSAmJiBsaW5lICE9IHJlYWxMaW5l
ICYmICFidWlsZGVyLmFkZGVkT25lKSB7Ci0gICAgICAgIG1lYXN1cmVbMF0gPSBidWlsZGVyLnBy
ZS5hcHBlbmRDaGlsZChlbHQoInNwYW4iLCAiXHUyMDBiIikpOworICAgICAgICBtZWFzdXJlWzBd
ID0gYnVpbGRlci5wcmUuYXBwZW5kQ2hpbGQoemVyb1dpZHRoRWxlbWVudChjbS5kaXNwbGF5Lm1l
YXN1cmUpKTsKICAgICAgICAgYnVpbGRlci5hZGRlZE9uZSA9IHRydWU7CiAgICAgICB9Ci0gICAg
ICB2YXIgbmV4dCA9IGluc2VydExpbmVDb250ZW50KGxpbmUsIGJ1aWxkZXIpOworICAgICAgdmFy
IG5leHQgPSBpbnNlcnRMaW5lQ29udGVudChsaW5lLCBidWlsZGVyLCBnZXRMaW5lU3R5bGVzKGNt
LCBsaW5lKSk7CiAgICAgICBzYXdCZWZvcmUgPSBsaW5lID09IGxpbmVCZWZvcmU7Ci0gICAgICBp
ZiAobmV4dCkgbGluZSA9IGdldExpbmUoY20udmlldy5kb2MsIG5leHQudG8ubGluZSk7CisgICAg
ICBpZiAobmV4dCkgeworICAgICAgICBsaW5lID0gZ2V0TGluZShjbS52aWV3LmRvYywgbmV4dC50
by5saW5lKTsKKyAgICAgICAgc2ltcGxlID0gZmFsc2U7CisgICAgICB9CiAgICAgfSB3aGlsZSAo
bmV4dCk7CiAKICAgICBpZiAobWVhc3VyZSAmJiAhYnVpbGRlci5hZGRlZE9uZSkKLSAgICAgIG1l
YXN1cmVbMF0gPSBidWlsZGVyLnByZS5hcHBlbmRDaGlsZChlbHQoInNwYW4iLCAiXHUyMDBiIikp
OworICAgICAgbWVhc3VyZVswXSA9IGJ1aWxkZXIucHJlLmFwcGVuZENoaWxkKHNpbXBsZSA/IGVs
dCgic3BhbiIsICJcdTAwYTAiKSA6IHplcm9XaWR0aEVsZW1lbnQoY20uZGlzcGxheS5tZWFzdXJl
KSk7CiAgICAgaWYgKCFidWlsZGVyLnByZS5maXJzdENoaWxkICYmICFsaW5lSXNIaWRkZW4ocmVh
bExpbmUpKQogICAgICAgYnVpbGRlci5wcmUuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4
dE5vZGUoIlx1MDBhMCIpKTsKIApAQCAtMzU2NCwxNiArMzc2OCwxNiBAQCB3aW5kb3cuQ29kZU1p
cnJvciA9IChmdW5jdGlvbigpIHsKIAogICAvLyBPdXRwdXRzIGEgbnVtYmVyIG9mIHNwYW5zIHRv
IG1ha2UgdXAgYSBsaW5lLCB0YWtpbmcgaGlnaGxpZ2h0aW5nCiAgIC8vIGFuZCBtYXJrZWQgdGV4
dCBpbnRvIGFjY291bnQuCi0gIGZ1bmN0aW9uIGluc2VydExpbmVDb250ZW50KGxpbmUsIGJ1aWxk
ZXIpIHsKLSAgICB2YXIgc3QgPSBsaW5lLnN0eWxlcywgc3BhbnMgPSBsaW5lLm1hcmtlZFNwYW5z
OworICBmdW5jdGlvbiBpbnNlcnRMaW5lQ29udGVudChsaW5lLCBidWlsZGVyLCBzdHlsZXMpIHsK
KyAgICB2YXIgc3BhbnMgPSBsaW5lLm1hcmtlZFNwYW5zOwogICAgIGlmICghc3BhbnMpIHsKLSAg
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3QubGVuZ3RoOyBpKz0yKQotICAgICAgICBidWlsZGVy
LmFkZFRva2VuKGJ1aWxkZXIsIHN0W2ldLCBzdHlsZVRvQ2xhc3Moc3RbaSsxXSkpOworICAgICAg
Zm9yICh2YXIgaSA9IDE7IGkgPCBzdHlsZXMubGVuZ3RoOyBpKz0yKQorICAgICAgICBidWlsZGVy
LmFkZFRva2VuKGJ1aWxkZXIsIHN0eWxlc1tpXSwgc3R5bGVUb0NsYXNzKHN0eWxlc1tpKzFdKSk7
CiAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgdmFyIGFsbFRleHQgPSBsaW5lLnRleHQsIGxl
biA9IGFsbFRleHQubGVuZ3RoOwotICAgIHZhciBwb3MgPSAwLCBpID0gMCwgdGV4dCA9ICIiLCBz
dHlsZTsKKyAgICB2YXIgcG9zID0gMCwgaSA9IDEsIHRleHQgPSAiIiwgc3R5bGU7CiAgICAgdmFy
IG5leHRDaGFuZ2UgPSAwLCBzcGFuU3R5bGUsIHNwYW5FbmRTdHlsZSwgc3BhblN0YXJ0U3R5bGUs
IGNvbGxhcHNlZDsKICAgICBmb3IgKDs7KSB7CiAgICAgICBpZiAobmV4dENoYW5nZSA9PSBwb3Mp
IHsgLy8gVXBkYXRlIGN1cnJlbnQgbWFya2VyIHNldApAQCAtMzYxNyw3ICszODIxLDcgQEAgd2lu
ZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgcG9zID0gZW5kOwogICAg
ICAgICAgIHNwYW5TdGFydFN0eWxlID0gIiI7CiAgICAgICAgIH0KLSAgICAgICAgdGV4dCA9IHN0
W2krK107IHN0eWxlID0gc3R5bGVUb0NsYXNzKHN0W2krK10pOworICAgICAgICB0ZXh0ID0gc3R5
bGVzW2krK107IHN0eWxlID0gc3R5bGVUb0NsYXNzKHN0eWxlc1tpKytdKTsKICAgICAgIH0KICAg
ICB9CiAgIH0KQEAgLTM3NjEsMTEgKzM5NjUsNiBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5j
dGlvbigpIHsKIAogICAvLyBMSU5FIFVUSUxJVElFUwogCi0gIGZ1bmN0aW9uIGxpbmVEb2MobGlu
ZSkgewotICAgIGZvciAodmFyIGQgPSBsaW5lLnBhcmVudDsgZCAmJiBkLnBhcmVudDsgZCA9IGQu
cGFyZW50KSB7fQotICAgIHJldHVybiBkOwotICB9Ci0KICAgZnVuY3Rpb24gZ2V0TGluZShjaHVu
aywgbikgewogICAgIHdoaWxlICghY2h1bmsubGluZXMpIHsKICAgICAgIGZvciAodmFyIGkgPSAw
OzsgKytpKSB7CkBAIC0zNzg2LDcgKzM5ODUsNyBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5j
dGlvbigpIHsKICAgICBpZiAobGluZS5wYXJlbnQgPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgICAg
dmFyIGN1ciA9IGxpbmUucGFyZW50LCBubyA9IGluZGV4T2YoY3VyLmxpbmVzLCBsaW5lKTsKICAg
ICBmb3IgKHZhciBjaHVuayA9IGN1ci5wYXJlbnQ7IGNodW5rOyBjdXIgPSBjaHVuaywgY2h1bmsg
PSBjaHVuay5wYXJlbnQpIHsKLSAgICAgIGZvciAodmFyIGkgPSAwLCBlID0gY2h1bmsuY2hpbGRy
ZW4ubGVuZ3RoOyA7ICsraSkgeworICAgICAgZm9yICh2YXIgaSA9IDA7OyArK2kpIHsKICAgICAg
ICAgaWYgKGNodW5rLmNoaWxkcmVuW2ldID09IGN1cikgYnJlYWs7CiAgICAgICAgIG5vICs9IGNo
dW5rLmNoaWxkcmVuW2ldLmNodW5rU2l6ZSgpOwogICAgICAgfQpAQCAtMzgxNCw5ICs0MDEzLDcg
QEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgIH0KIAogICBmdW5jdGlvbiBo
ZWlnaHRBdExpbmUoY20sIGxpbmVPYmopIHsKLSAgICB2YXIgbWVyZ2VkOwotICAgIHdoaWxlICht
ZXJnZWQgPSBjb2xsYXBzZWRTcGFuQXRTdGFydChsaW5lT2JqKSkKLSAgICAgIGxpbmVPYmogPSBn
ZXRMaW5lKGNtLnZpZXcuZG9jLCBtZXJnZWQuZmluZCgpLmZyb20ubGluZSk7CisgICAgbGluZU9i
aiA9IHZpc3VhbExpbmUoY20udmlldy5kb2MsIGxpbmVPYmopOwogCiAgICAgdmFyIGggPSAwLCBj
aHVuayA9IGxpbmVPYmoucGFyZW50OwogICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2h1bmsubGlu
ZXMubGVuZ3RoOyArK2kpIHsKQEAgLTM4NDIsNTEgKzQwMzksNjEgQEAgd2luZG93LkNvZGVNaXJy
b3IgPSAoZnVuY3Rpb24oKSB7CiAKICAgLy8gSElTVE9SWQogCi0gIC8vIFRoZSBoaXN0b3J5IG9i
amVjdCAnY2h1bmtzJyBjaGFuZ2VzIHRoYXQgYXJlIG1hZGUgY2xvc2UgdG9nZXRoZXIKLSAgLy8g
YW5kIGF0IGFsbW9zdCB0aGUgc2FtZSB0aW1lIGludG8gYmlnZ2VyIHVuZG9hYmxlIHVuaXRzLgog
ICBmdW5jdGlvbiBtYWtlSGlzdG9yeSgpIHsKLSAgICByZXR1cm4ge3RpbWU6IDAsIGRvbmU6IFtd
LCB1bmRvbmU6IFtdLAotICAgICAgICAgICAgY29tcG91bmQ6IDAsIGNsb3NlZDogZmFsc2UsIGRp
cnR5Q291bnRlcjogMH07CisgICAgcmV0dXJuIHsKKyAgICAgIC8vIEFycmF5cyBvZiBoaXN0b3J5
IGV2ZW50cy4gRG9pbmcgc29tZXRoaW5nIGFkZHMgYW4gZXZlbnQgdG8KKyAgICAgIC8vIGRvbmUg
YW5kIGNsZWFycyB1bmRvLiBVbmRvaW5nIG1vdmVzIGV2ZW50cyBmcm9tIGRvbmUgdG8KKyAgICAg
IC8vIHVuZG9uZSwgcmVkb2luZyBtb3ZlcyB0aGVtIGluIHRoZSBvdGhlciBkaXJlY3Rpb24uCisg
ICAgICBkb25lOiBbXSwgdW5kb25lOiBbXSwKKyAgICAgIC8vIFVzZWQgdG8gdHJhY2sgd2hlbiBj
aGFuZ2VzIGNhbiBiZSBtZXJnZWQgaW50byBhIHNpbmdsZSB1bmRvCisgICAgICAvLyBldmVudAor
ICAgICAgbGFzdFRpbWU6IDAsIGxhc3RPcDogbnVsbCwgbGFzdE9yaWdpbjogbnVsbCwKKyAgICAg
IC8vIFVzZWQgYnkgdGhlIGlzQ2xlYW4oKSBtZXRob2QKKyAgICAgIGRpcnR5Q291bnRlcjogMAor
ICAgIH07CiAgIH0KIAotICBmdW5jdGlvbiBhZGRDaGFuZ2UoaGlzdG9yeSwgc3RhcnQsIGFkZGVk
LCBvbGQpIHsKKyAgZnVuY3Rpb24gYWRkQ2hhbmdlKGNtLCBzdGFydCwgYWRkZWQsIG9sZCwgb3Jp
Z2luLCBmcm9tQmVmb3JlLCB0b0JlZm9yZSwgZnJvbUFmdGVyLCB0b0FmdGVyKSB7CisgICAgdmFy
IGhpc3RvcnkgPSBjbS52aWV3Lmhpc3Rvcnk7CiAgICAgaGlzdG9yeS51bmRvbmUubGVuZ3RoID0g
MDsKLSAgICB2YXIgdGltZSA9ICtuZXcgRGF0ZSwgY3VyID0gbHN0KGhpc3RvcnkuZG9uZSksIGxh
c3QgPSBjdXIgJiYgbHN0KGN1cik7Ci0gICAgdmFyIGR0aW1lID0gdGltZSAtIGhpc3RvcnkudGlt
ZTsKKyAgICB2YXIgdGltZSA9ICtuZXcgRGF0ZSwgY3VyID0gbHN0KGhpc3RvcnkuZG9uZSk7CiAg
ICAgCi0gICAgZnVuY3Rpb24gdXBkYXRlRGlydHkoKSB7Ci0gICAgICBpZiAoaGlzdG9yeS5kaXJ0
eUNvdW50ZXIgPCAwKSB7CisgICAgaWYgKGN1ciAmJgorICAgICAgICAoaGlzdG9yeS5sYXN0T3Ag
PT0gY20uY3VyT3AuaWQgfHwKKyAgICAgICAgIGhpc3RvcnkubGFzdE9yaWdpbiA9PSBvcmlnaW4g
JiYgKG9yaWdpbiA9PSAiaW5wdXQiIHx8IG9yaWdpbiA9PSAiZGVsZXRlIikgJiYKKyAgICAgICAg
IGhpc3RvcnkubGFzdFRpbWUgPiB0aW1lIC0gNjAwKSkgeworICAgICAgLy8gTWVyZ2UgdGhpcyBj
aGFuZ2UgaW50byB0aGUgbGFzdCBldmVudAorICAgICAgdmFyIGxhc3QgPSBsc3QoY3VyLmV2ZW50
cyk7CisgICAgICBpZiAobGFzdC5zdGFydCA+IHN0YXJ0ICsgb2xkLmxlbmd0aCB8fCBsYXN0LnN0
YXJ0ICsgbGFzdC5hZGRlZCA8IHN0YXJ0KSB7CisgICAgICAgIC8vIERvZXNuJ3QgaW50ZXJzZWN0
IHdpdGggbGFzdCBzdWItZXZlbnQsIGFkZCBuZXcgc3ViLWV2ZW50CisgICAgICAgIGN1ci5ldmVu
dHMucHVzaCh7c3RhcnQ6IHN0YXJ0LCBhZGRlZDogYWRkZWQsIG9sZDogb2xkfSk7CisgICAgICB9
IGVsc2UgeworICAgICAgICAvLyBQYXRjaCB1cCB0aGUgbGFzdCBzdWItZXZlbnQKKyAgICAgICAg
dmFyIHN0YXJ0QmVmb3JlID0gTWF0aC5tYXgoMCwgbGFzdC5zdGFydCAtIHN0YXJ0KSwKKyAgICAg
ICAgZW5kQWZ0ZXIgPSBNYXRoLm1heCgwLCAoc3RhcnQgKyBvbGQubGVuZ3RoKSAtIChsYXN0LnN0
YXJ0ICsgbGFzdC5hZGRlZCkpOworICAgICAgICBmb3IgKHZhciBpID0gc3RhcnRCZWZvcmU7IGkg
PiAwOyAtLWkpIGxhc3Qub2xkLnVuc2hpZnQob2xkW2kgLSAxXSk7CisgICAgICAgIGZvciAodmFy
IGkgPSBlbmRBZnRlcjsgaSA+IDA7IC0taSkgbGFzdC5vbGQucHVzaChvbGRbb2xkLmxlbmd0aCAt
IGldKTsKKyAgICAgICAgaWYgKHN0YXJ0QmVmb3JlKSBsYXN0LnN0YXJ0ID0gc3RhcnQ7CisgICAg
ICAgIGxhc3QuYWRkZWQgKz0gYWRkZWQgLSAob2xkLmxlbmd0aCAtIHN0YXJ0QmVmb3JlIC0gZW5k
QWZ0ZXIpOworICAgICAgfQorICAgICAgY3VyLmZyb21BZnRlciA9IGZyb21BZnRlcjsgY3VyLnRv
QWZ0ZXIgPSB0b0FmdGVyOworICAgIH0gZWxzZSB7CisgICAgICAvLyBDYW4gbm90IGJlIG1lcmdl
ZCwgc3RhcnQgYSBuZXcgZXZlbnQuCisgICAgICBjdXIgPSB7ZXZlbnRzOiBbe3N0YXJ0OiBzdGFy
dCwgYWRkZWQ6IGFkZGVkLCBvbGQ6IG9sZH1dLAorICAgICAgICAgICAgIGZyb21CZWZvcmU6IGZy
b21CZWZvcmUsIHRvQmVmb3JlOiB0b0JlZm9yZSwgZnJvbUFmdGVyOiBmcm9tQWZ0ZXIsIHRvQWZ0
ZXI6IHRvQWZ0ZXJ9OworICAgICAgaGlzdG9yeS5kb25lLnB1c2goY3VyKTsKKyAgICAgIHdoaWxl
IChoaXN0b3J5LmRvbmUubGVuZ3RoID4gY20ub3B0aW9ucy51bmRvRGVwdGgpCisgICAgICAgIGhp
c3RvcnkuZG9uZS5zaGlmdCgpOworICAgICAgaWYgKGhpc3RvcnkuZGlydHlDb3VudGVyIDwgMCkK
ICAgICAgICAgICAvLyBUaGUgdXNlciBoYXMgbWFkZSBhIGNoYW5nZSBhZnRlciB1bmRvaW5nIHBh
c3QgdGhlIGxhc3QgY2xlYW4gc3RhdGUuIAogICAgICAgICAgIC8vIFdlIGNhbiBuZXZlciBnZXQg
YmFjayB0byBhIGNsZWFuIHN0YXRlIG5vdyB1bnRpbCBtYXJrQ2xlYW4oKSBpcyBjYWxsZWQuCiAg
ICAgICAgICAgaGlzdG9yeS5kaXJ0eUNvdW50ZXIgPSBOYU47Ci0gICAgICB9Ci0gICAgICBoaXN0
b3J5LmRpcnR5Q291bnRlcisrOwotICAgIH0KLQotICAgIGlmIChjdXIgJiYgIWhpc3RvcnkuY2xv
c2VkICYmIGhpc3RvcnkuY29tcG91bmQpIHsKLSAgICAgIHVwZGF0ZURpcnR5KCk7Ci0gICAgICBj
dXIucHVzaCh7c3RhcnQ6IHN0YXJ0LCBhZGRlZDogYWRkZWQsIG9sZDogb2xkfSk7Ci0gICAgfSBl
bHNlIGlmIChkdGltZSA+IDQwMCB8fCAhbGFzdCB8fCBoaXN0b3J5LmNsb3NlZCB8fAotICAgICAg
ICAgICAgICAgbGFzdC5zdGFydCA+IHN0YXJ0ICsgb2xkLmxlbmd0aCB8fCBsYXN0LnN0YXJ0ICsg
bGFzdC5hZGRlZCA8IHN0YXJ0KSB7Ci0gICAgICB1cGRhdGVEaXJ0eSgpOwotICAgICAgaGlzdG9y
eS5kb25lLnB1c2goW3tzdGFydDogc3RhcnQsIGFkZGVkOiBhZGRlZCwgb2xkOiBvbGR9XSk7Ci0g
ICAgICBoaXN0b3J5LmNsb3NlZCA9IGZhbHNlOwotICAgIH0gZWxzZSB7Ci0gICAgICB2YXIgc3Rh
cnRCZWZvcmUgPSBNYXRoLm1heCgwLCBsYXN0LnN0YXJ0IC0gc3RhcnQpLAotICAgICAgZW5kQWZ0
ZXIgPSBNYXRoLm1heCgwLCAoc3RhcnQgKyBvbGQubGVuZ3RoKSAtIChsYXN0LnN0YXJ0ICsgbGFz
dC5hZGRlZCkpOwotICAgICAgZm9yICh2YXIgaSA9IHN0YXJ0QmVmb3JlOyBpID4gMDsgLS1pKSBs
YXN0Lm9sZC51bnNoaWZ0KG9sZFtpIC0gMV0pOwotICAgICAgZm9yICh2YXIgaSA9IGVuZEFmdGVy
OyBpID4gMDsgLS1pKSBsYXN0Lm9sZC5wdXNoKG9sZFtvbGQubGVuZ3RoIC0gaV0pOwotICAgICAg
aWYgKHN0YXJ0QmVmb3JlKSBsYXN0LnN0YXJ0ID0gc3RhcnQ7Ci0gICAgICBsYXN0LmFkZGVkICs9
IGFkZGVkIC0gKG9sZC5sZW5ndGggLSBzdGFydEJlZm9yZSAtIGVuZEFmdGVyKTsKKyAgICAgIGVs
c2UKKyAgICAgICAgaGlzdG9yeS5kaXJ0eUNvdW50ZXIrKzsKICAgICB9Ci0gICAgaGlzdG9yeS50
aW1lID0gdGltZTsKLSAgfQotCi0gIGZ1bmN0aW9uIGNvbXBvdW5kQ2hhbmdlKGNtLCBmKSB7Ci0g
ICAgdmFyIGhpc3QgPSBjbS52aWV3Lmhpc3Rvcnk7Ci0gICAgaWYgKCFoaXN0LmNvbXBvdW5kKysp
IGhpc3QuY2xvc2VkID0gdHJ1ZTsKLSAgICB0cnkgeyByZXR1cm4gZigpOyB9Ci0gICAgZmluYWxs
eSB7IGlmICghLS1oaXN0LmNvbXBvdW5kKSBoaXN0LmNsb3NlZCA9IHRydWU7IH0KKyAgICBoaXN0
b3J5Lmxhc3RUaW1lID0gdGltZTsKKyAgICBoaXN0b3J5Lmxhc3RPcCA9IGNtLmN1ck9wLmlkOwor
ICAgIGhpc3RvcnkubGFzdE9yaWdpbiA9IG9yaWdpbjsKICAgfQogCiAgIC8vIEVWRU5UIE9QRVJB
VE9SUwpAQCAtNDAyNCwxNiArNDIzMSw2IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9u
KCkgewogICAgIH0gZWxzZSBub2RlLnNlbGVjdCgpOwogICB9CiAKLSAgLy8gVXNlZCB0byBwb3Np
dGlvbiB0aGUgY3Vyc29yIGFmdGVyIGFuIHVuZG8vcmVkbyBieSBmaW5kaW5nIHRoZQotICAvLyBs
YXN0IGVkaXRlZCBjaGFyYWN0ZXIuCi0gIGZ1bmN0aW9uIGVkaXRFbmQoZnJvbSwgdG8pIHsKLSAg
ICBpZiAoIXRvKSByZXR1cm4gMDsKLSAgICBpZiAoIWZyb20pIHJldHVybiB0by5sZW5ndGg7Ci0g
ICAgZm9yICh2YXIgaSA9IGZyb20ubGVuZ3RoLCBqID0gdG8ubGVuZ3RoOyBpID49IDAgJiYgaiA+
PSAwOyAtLWksIC0taikKLSAgICAgIGlmIChmcm9tLmNoYXJBdChpKSAhPSB0by5jaGFyQXQoaikp
IGJyZWFrOwotICAgIHJldHVybiBqICsgMTsKLSAgfQotCiAgIGZ1bmN0aW9uIGluZGV4T2YoY29s
bGVjdGlvbiwgZWx0KSB7CiAgICAgaWYgKGNvbGxlY3Rpb24uaW5kZXhPZikgcmV0dXJuIGNvbGxl
Y3Rpb24uaW5kZXhPZihlbHQpOwogICAgIGZvciAodmFyIGkgPSAwLCBlID0gY29sbGVjdGlvbi5s
ZW5ndGg7IGkgPCBlOyArK2kpCkBAIC00MTAzLDE0ICs0MzAwLDYgQEAgd2luZG93LkNvZGVNaXJy
b3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgcmV0dXJuICJkcmFnZ2FibGUiIGluIGRpdiB8fCAiZHJh
Z0Ryb3AiIGluIGRpdjsKICAgfSgpOwogCi0gIC8vIEZlYXR1cmUtZGV0ZWN0IHdoZXRoZXIgbmV3
bGluZXMgaW4gdGV4dGFyZWFzIGFyZSBjb252ZXJ0ZWQgdG8gXHJcbgotICB2YXIgbGluZVNlcCA9
IGZ1bmN0aW9uICgpIHsKLSAgICB2YXIgdGUgPSBlbHQoInRleHRhcmVhIik7Ci0gICAgdGUudmFs
dWUgPSAiZm9vXG5iYXIiOwotICAgIGlmICh0ZS52YWx1ZS5pbmRleE9mKCJcciIpID4gLTEpIHJl
dHVybiAiXHJcbiI7Ci0gICAgcmV0dXJuICJcbiI7Ci0gIH0oKTsKLQogICAvLyBGb3IgYSByZWFz
b24gSSBoYXZlIHlldCB0byBmaWd1cmUgb3V0LCBzb21lIGJyb3dzZXJzIGRpc2FsbG93CiAgIC8v
IHdvcmQgd3JhcHBpbmcgYmV0d2VlbiBjZXJ0YWluIGNoYXJhY3RlcnMgKm9ubHkqIGlmIGEgbmV3
IGlubGluZQogICAvLyBlbGVtZW50IGlzIHN0YXJ0ZWQgYmV0d2VlbiB0aGVtLiBUaGlzIG1ha2Vz
IGl0IGhhcmQgdG8gcmVsaWFibHkKQEAgLTQxMzMsNiArNDMyMiwxOCBAQCB3aW5kb3cuQ29kZU1p
cnJvciA9IChmdW5jdGlvbigpIHsKICAgICByZXR1cm4ga25vd25TY3JvbGxiYXJXaWR0aCB8fCAw
OwogICB9CiAKKyAgdmFyIHp3c3BTdXBwb3J0ZWQ7CisgIGZ1bmN0aW9uIHplcm9XaWR0aEVsZW1l
bnQobWVhc3VyZSkgeworICAgIGlmICh6d3NwU3VwcG9ydGVkID09IG51bGwpIHsKKyAgICAgIHZh
ciB0ZXN0ID0gZWx0KCJzcGFuIiwgIlx1MjAwYiIpOworICAgICAgcmVtb3ZlQ2hpbGRyZW5BbmRB
ZGQobWVhc3VyZSwgZWx0KCJzcGFuIiwgW3Rlc3QsIGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCJ4
IildKSk7CisgICAgICBpZiAobWVhc3VyZS5maXJzdENoaWxkLm9mZnNldEhlaWdodCAhPSAwKQor
ICAgICAgICB6d3NwU3VwcG9ydGVkID0gdGVzdC5vZmZzZXRXaWR0aCA8PSAxICYmIHRlc3Qub2Zm
c2V0SGVpZ2h0ID4gMiAmJiAhaWVfbHQ4OworICAgIH0KKyAgICBpZiAoendzcFN1cHBvcnRlZCkg
cmV0dXJuIGVsdCgic3BhbiIsICJcdTIwMGIiKTsKKyAgICBlbHNlIHJldHVybiBlbHQoInNwYW4i
LCAiXHUwMGEwIiwgbnVsbCwgImRpc3BsYXk6IGlubGluZS1ibG9jazsgd2lkdGg6IDFweDsgbWFy
Z2luLXJpZ2h0OiAtMXB4Iik7CisgIH0KKwogICAvLyBTZWUgaWYgIiIuc3BsaXQgaXMgdGhlIGJy
b2tlbiBJRSB2ZXJzaW9uLCBpZiBzbywgcHJvdmlkZSBhbgogICAvLyBhbHRlcm5hdGl2ZSB3YXkg
dG8gc3BsaXQgbGluZXMuCiAgIHZhciBzcGxpdExpbmVzID0gIlxuXG5iIi5zcGxpdCgvXG4vKS5s
ZW5ndGggIT0gMyA/IGZ1bmN0aW9uKHN0cmluZykgewpAQCAtNDE5Niw3ICs0Mzk3LDcgQEAgd2lu
ZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgaWYgKCFvcmRlcikgcmV0dXJuIGYo
ZnJvbSwgdG8sICJsdHIiKTsKICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9yZGVyLmxlbmd0aDsg
KytpKSB7CiAgICAgICB2YXIgcGFydCA9IG9yZGVyW2ldOwotICAgICAgaWYgKHBhcnQuZnJvbSA8
IHRvICYmIHBhcnQudG8gPiBmcm9tKQorICAgICAgaWYgKHBhcnQuZnJvbSA8IHRvICYmIHBhcnQu
dG8gPiBmcm9tIHx8IGZyb20gPT0gdG8gJiYgcGFydC50byA9PSBmcm9tKQogICAgICAgICBmKE1h
dGgubWF4KHBhcnQuZnJvbSwgZnJvbSksIE1hdGgubWluKHBhcnQudG8sIHRvKSwgcGFydC5sZXZl
bCA9PSAxID8gInJ0bCIgOiAibHRyIik7CiAgICAgfQogICB9CkBAIC00MjExLDEzICs0NDEyLDEz
IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgIHJldHVybiBiaWRpUmln
aHQobHN0KG9yZGVyKSk7CiAgIH0KIAotICBmdW5jdGlvbiBsaW5lU3RhcnQoY20sIGxpbmVObykg
ewotICAgIHZhciBtZXJnZWQsIGxpbmU7Ci0gICAgd2hpbGUgKG1lcmdlZCA9IGNvbGxhcHNlZFNw
YW5BdFN0YXJ0KGxpbmUgPSBnZXRMaW5lKGNtLnZpZXcuZG9jLCBsaW5lTm8pKSkKLSAgICAgIGxp
bmVObyA9IG1lcmdlZC5maW5kKCkuZnJvbS5saW5lOwotICAgIHZhciBvcmRlciA9IGdldE9yZGVy
KGxpbmUpOwotICAgIHZhciBjaCA9ICFvcmRlciA/IDAgOiBvcmRlclswXS5sZXZlbCAlIDIgPyBs
aW5lUmlnaHQobGluZSkgOiBsaW5lTGVmdChsaW5lKTsKLSAgICByZXR1cm4ge2xpbmU6IGxpbmVO
bywgY2g6IGNofTsKKyAgZnVuY3Rpb24gbGluZVN0YXJ0KGNtLCBsaW5lTikgeworICAgIHZhciBs
aW5lID0gZ2V0TGluZShjbS52aWV3LmRvYywgbGluZU4pOworICAgIHZhciB2aXN1YWwgPSB2aXN1
YWxMaW5lKGNtLnZpZXcuZG9jLCBsaW5lKTsKKyAgICBpZiAodmlzdWFsICE9IGxpbmUpIGxpbmVO
ID0gbGluZU5vKHZpc3VhbCk7CisgICAgdmFyIG9yZGVyID0gZ2V0T3JkZXIodmlzdWFsKTsKKyAg
ICB2YXIgY2ggPSAhb3JkZXIgPyAwIDogb3JkZXJbMF0ubGV2ZWwgJSAyID8gbGluZVJpZ2h0KHZp
c3VhbCkgOiBsaW5lTGVmdCh2aXN1YWwpOworICAgIHJldHVybiB7bGluZTogbGluZU4sIGNoOiBj
aH07CiAgIH0KICAgZnVuY3Rpb24gbGluZUVuZChjbSwgbGluZU5vKSB7CiAgICAgdmFyIG1lcmdl
ZCwgbGluZTsKQEAgLTQzMDUsNyArNDUwNiw2IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0
aW9uKCkgewogICAgIC8vIENoYXJhY3RlciB0eXBlcyBmb3IgY29kZXBvaW50cyAweDYwMCB0byAw
eDZmZgogICAgIHZhciBhcmFiaWNUeXBlcyA9ICJycnJycnJycnJycnIsck5ObW1tbW1tcnJycnJy
cnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJtbW1tbW1tbW1t
bW1tbXJycnJycnJubm5ubm5ubm5uJW5ucnJybXJycnJycnJycnJycnJycnJycnJycnJycnJycnJy
cnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJy
cnJycnJycnJycnJycnJybW1tbW1tbW1tbW1tbW1tbW1tbU5tbW1tcnJycnJycnJycnJycnJycnJy
IjsKICAgICBmdW5jdGlvbiBjaGFyVHlwZShjb2RlKSB7Ci0gICAgICB2YXIgdHlwZSA9ICJMIjsK
ICAgICAgIGlmIChjb2RlIDw9IDB4ZmYpIHJldHVybiBsb3dUeXBlcy5jaGFyQXQoY29kZSk7CiAg
ICAgICBlbHNlIGlmICgweDU5MCA8PSBjb2RlICYmIGNvZGUgPD0gMHg1ZjQpIHJldHVybiAiUiI7
CiAgICAgICBlbHNlIGlmICgweDYwMCA8PSBjb2RlICYmIGNvZGUgPD0gMHg2ZmYpIHJldHVybiBh
cmFiaWNUeXBlcy5jaGFyQXQoY29kZSAtIDB4NjAwKTsKQEAgLTQzMTUsMjQgKzQ1MTUsMjAgQEAg
d2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAKICAgICB2YXIgYmlkaVJFID0gL1tc
dTA1OTAtXHUwNWY0XHUwNjAwLVx1MDZmZlx1MDcwMC1cdTA4YWNdLzsKICAgICB2YXIgaXNOZXV0
cmFsID0gL1tzdHdOXS8sIGlzU3Ryb25nID0gL1tMUnJdLywgY291bnRzQXNMZWZ0ID0gL1tMYjFu
XS8sIGNvdW50c0FzTnVtID0gL1sxbl0vOworICAgIC8vIEJyb3dzZXJzIHNlZW0gdG8gYWx3YXlz
IHRyZWF0IHRoZSBib3VuZGFyaWVzIG9mIGJsb2NrIGVsZW1lbnRzIGFzIGJlaW5nIEwuCisgICAg
dmFyIG91dGVyVHlwZSA9ICJMIjsKIAogICAgIHJldHVybiBmdW5jdGlvbiBjaGFyT3JkZXJpbmco
c3RyKSB7CiAgICAgICBpZiAoIWJpZGlSRS50ZXN0KHN0cikpIHJldHVybiBmYWxzZTsKLSAgICAg
IHZhciBsZW4gPSBzdHIubGVuZ3RoLCB0eXBlcyA9IFtdLCBzdGFydFR5cGUgPSBudWxsOwotICAg
ICAgZm9yICh2YXIgaSA9IDAsIHR5cGU7IGkgPCBsZW47ICsraSkgeworICAgICAgdmFyIGxlbiA9
IHN0ci5sZW5ndGgsIHR5cGVzID0gW107CisgICAgICBmb3IgKHZhciBpID0gMCwgdHlwZTsgaSA8
IGxlbjsgKytpKQogICAgICAgICB0eXBlcy5wdXNoKHR5cGUgPSBjaGFyVHlwZShzdHIuY2hhckNv
ZGVBdChpKSkpOwotICAgICAgICBpZiAoc3RhcnRUeXBlID09IG51bGwpIHsKLSAgICAgICAgICBp
ZiAodHlwZSA9PSAiTCIpIHN0YXJ0VHlwZSA9ICJMIjsKLSAgICAgICAgICBlbHNlIGlmICh0eXBl
ID09ICJSIiB8fCB0eXBlID09ICJyIikgc3RhcnRUeXBlID0gIlIiOwotICAgICAgICB9Ci0gICAg
ICB9Ci0gICAgICBpZiAoc3RhcnRUeXBlID09IG51bGwpIHN0YXJ0VHlwZSA9ICJMIjsKIAogICAg
ICAgLy8gVzEuIEV4YW1pbmUgZWFjaCBub24tc3BhY2luZyBtYXJrIChOU00pIGluIHRoZSBsZXZl
bCBydW4sIGFuZAogICAgICAgLy8gY2hhbmdlIHRoZSB0eXBlIG9mIHRoZSBOU00gdG8gdGhlIHR5
cGUgb2YgdGhlIHByZXZpb3VzCiAgICAgICAvLyBjaGFyYWN0ZXIuIElmIHRoZSBOU00gaXMgYXQg
dGhlIHN0YXJ0IG9mIHRoZSBsZXZlbCBydW4sIGl0IHdpbGwKICAgICAgIC8vIGdldCB0aGUgdHlw
ZSBvZiBzb3IuCi0gICAgICBmb3IgKHZhciBpID0gMCwgcHJldiA9IHN0YXJ0VHlwZTsgaSA8IGxl
bjsgKytpKSB7CisgICAgICBmb3IgKHZhciBpID0gMCwgcHJldiA9IG91dGVyVHlwZTsgaSA8IGxl
bjsgKytpKSB7CiAgICAgICAgIHZhciB0eXBlID0gdHlwZXNbaV07CiAgICAgICAgIGlmICh0eXBl
ID09ICJtIikgdHlwZXNbaV0gPSBwcmV2OwogICAgICAgICBlbHNlIHByZXYgPSB0eXBlOwpAQCAt
NDM0Myw3ICs0NTM5LDcgQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAg
ICAvLyBBTCBpcyBmb3VuZCwgY2hhbmdlIHRoZSB0eXBlIG9mIHRoZSBFdXJvcGVhbiBudW1iZXIg
dG8gQXJhYmljCiAgICAgICAvLyBudW1iZXIuCiAgICAgICAvLyBXMy4gQ2hhbmdlIGFsbCBBTHMg
dG8gUi4KLSAgICAgIGZvciAodmFyIGkgPSAwLCBjdXIgPSBzdGFydFR5cGU7IGkgPCBsZW47ICsr
aSkgeworICAgICAgZm9yICh2YXIgaSA9IDAsIGN1ciA9IG91dGVyVHlwZTsgaSA8IGxlbjsgKytp
KSB7CiAgICAgICAgIHZhciB0eXBlID0gdHlwZXNbaV07CiAgICAgICAgIGlmICh0eXBlID09ICIx
IiAmJiBjdXIgPT0gInIiKSB0eXBlc1tpXSA9ICJuIjsKICAgICAgICAgZWxzZSBpZiAoaXNTdHJv
bmcudGVzdCh0eXBlKSkgeyBjdXIgPSB0eXBlOyBpZiAodHlwZSA9PSAiciIpIHR5cGVzW2ldID0g
IlIiOyB9CkBAIC00Mzc4LDcgKzQ1NzQsNyBAQCB3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlv
bigpIHsKICAgICAgIC8vIFc3LiBTZWFyY2ggYmFja3dhcmRzIGZyb20gZWFjaCBpbnN0YW5jZSBv
ZiBhIEV1cm9wZWFuIG51bWJlcgogICAgICAgLy8gdW50aWwgdGhlIGZpcnN0IHN0cm9uZyB0eXBl
IChSLCBMLCBvciBzb3IpIGlzIGZvdW5kLiBJZiBhbiBMIGlzCiAgICAgICAvLyBmb3VuZCwgdGhl
biBjaGFuZ2UgdGhlIHR5cGUgb2YgdGhlIEV1cm9wZWFuIG51bWJlciB0byBMLgotICAgICAgZm9y
ICh2YXIgaSA9IDAsIGN1ciA9IHN0YXJ0VHlwZTsgaSA8IGxlbjsgKytpKSB7CisgICAgICBmb3Ig
KHZhciBpID0gMCwgY3VyID0gb3V0ZXJUeXBlOyBpIDwgbGVuOyArK2kpIHsKICAgICAgICAgdmFy
IHR5cGUgPSB0eXBlc1tpXTsKICAgICAgICAgaWYgKGN1ciA9PSAiTCIgJiYgdHlwZSA9PSAiMSIp
IHR5cGVzW2ldID0gIkwiOwogICAgICAgICBlbHNlIGlmIChpc1N0cm9uZy50ZXN0KHR5cGUpKSBj
dXIgPSB0eXBlOwpAQCAtNDM5Myw4ICs0NTg5LDggQEAgd2luZG93LkNvZGVNaXJyb3IgPSAoZnVu
Y3Rpb24oKSB7CiAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgKytpKSB7CiAgICAgICAg
IGlmIChpc05ldXRyYWwudGVzdCh0eXBlc1tpXSkpIHsKICAgICAgICAgICBmb3IgKHZhciBlbmQg
PSBpICsgMTsgZW5kIDwgbGVuICYmIGlzTmV1dHJhbC50ZXN0KHR5cGVzW2VuZF0pOyArK2VuZCkg
e30KLSAgICAgICAgICB2YXIgYmVmb3JlID0gKGkgPyB0eXBlc1tpLTFdIDogc3RhcnRUeXBlKSA9
PSAiTCI7Ci0gICAgICAgICAgdmFyIGFmdGVyID0gKGVuZCA8IGxlbiAtIDEgPyB0eXBlc1tlbmRd
IDogc3RhcnRUeXBlKSA9PSAiTCI7CisgICAgICAgICAgdmFyIGJlZm9yZSA9IChpID8gdHlwZXNb
aS0xXSA6IG91dGVyVHlwZSkgPT0gIkwiOworICAgICAgICAgIHZhciBhZnRlciA9IChlbmQgPCBs
ZW4gLSAxID8gdHlwZXNbZW5kXSA6IG91dGVyVHlwZSkgPT0gIkwiOwogICAgICAgICAgIHZhciBy
ZXBsYWNlID0gYmVmb3JlIHx8IGFmdGVyID8gIkwiIDogIlIiOwogICAgICAgICAgIGZvciAodmFy
IGogPSBpOyBqIDwgZW5kOyArK2opIHR5cGVzW2pdID0gcmVwbGFjZTsKICAgICAgICAgICBpID0g
ZW5kIC0gMTsKQEAgLTQ0NDQsNyArNDY0MCw3IEBAIHdpbmRvdy5Db2RlTWlycm9yID0gKGZ1bmN0
aW9uKCkgewogCiAgIC8vIFRIRSBFTkQKIAotICBDb2RlTWlycm9yLnZlcnNpb24gPSAiMy4wIEIy
IjsKKyAgQ29kZU1pcnJvci52ZXJzaW9uID0gIjMuMCArIjsKIAogICByZXR1cm4gQ29kZU1pcnJv
cjsKIH0pKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L2NtL2Nzcy5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvY20vY3NzLmpz
CmluZGV4IDZiYjNiY2QxOTZkZjc2YzQyNjcyYmExODdkNTFiNWZkNmE4YmJmYjIuLjM3ZWY3NmM5
NDFlZWNjZDkwNTRjODFlNDJlOWY0YTU2YjAzYWRkY2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvY20vY3NzLmpzCisrKyBiL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9mcm9udC1lbmQvY20vY3NzLmpzCkBAIC0xLDYwICsxLDE5NiBAQAogQ29kZU1pcnJv
ci5kZWZpbmVNb2RlKCJjc3MiLCBmdW5jdGlvbihjb25maWcpIHsKICAgdmFyIGluZGVudFVuaXQg
PSBjb25maWcuaW5kZW50VW5pdCwgdHlwZTsKKyAgCisgIHZhciBhdE1lZGlhVHlwZXMgPSBrZXlT
ZXQoWworICAgICJhbGwiLCAiYXVyYWwiLCAiYnJhaWxsZSIsICJoYW5kaGVsZCIsICJwcmludCIs
ICJwcm9qZWN0aW9uIiwgInNjcmVlbiIsCisgICAgInR0eSIsICJ0diIsICJlbWJvc3NlZCIKKyAg
XSk7CisgIAorICB2YXIgYXRNZWRpYUZlYXR1cmVzID0ga2V5U2V0KFsKKyAgICAid2lkdGgiLCAi
bWluLXdpZHRoIiwgIm1heC13aWR0aCIsICJoZWlnaHQiLCAibWluLWhlaWdodCIsICJtYXgtaGVp
Z2h0IiwKKyAgICAiZGV2aWNlLXdpZHRoIiwgIm1pbi1kZXZpY2Utd2lkdGgiLCAibWF4LWRldmlj
ZS13aWR0aCIsICJkZXZpY2UtaGVpZ2h0IiwKKyAgICAibWluLWRldmljZS1oZWlnaHQiLCAibWF4
LWRldmljZS1oZWlnaHQiLCAiYXNwZWN0LXJhdGlvIiwKKyAgICAibWluLWFzcGVjdC1yYXRpbyIs
ICJtYXgtYXNwZWN0LXJhdGlvIiwgImRldmljZS1hc3BlY3QtcmF0aW8iLAorICAgICJtaW4tZGV2
aWNlLWFzcGVjdC1yYXRpbyIsICJtYXgtZGV2aWNlLWFzcGVjdC1yYXRpbyIsICJjb2xvciIsICJt
aW4tY29sb3IiLAorICAgICJtYXgtY29sb3IiLCAiY29sb3ItaW5kZXgiLCAibWluLWNvbG9yLWlu
ZGV4IiwgIm1heC1jb2xvci1pbmRleCIsCisgICAgIm1vbm9jaHJvbWUiLCAibWluLW1vbm9jaHJv
bWUiLCAibWF4LW1vbm9jaHJvbWUiLCAicmVzb2x1dGlvbiIsCisgICAgIm1pbi1yZXNvbHV0aW9u
IiwgIm1heC1yZXNvbHV0aW9uIiwgInNjYW4iLCAiZ3JpZCIKKyAgXSk7CiAKLSAgdmFyIGtleXdv
cmRzID0ga2V5U2V0KFsiYWJvdmUiLCAiYWJzb2x1dGUiLCAiYWN0aXZlYm9yZGVyIiwgImFjdGl2
ZWNhcHRpb24iLCAiYWZhciIsICJhZnRlci13aGl0ZS1zcGFjZSIsICJhaGVhZCIsICJhbGlhcyIs
ICJhbGwiLCAiYWxsLXNjcm9sbCIsCi0gICAgImFsdGVybmF0ZSIsICJhbHdheXMiLCAiYW1oYXJp
YyIsICJhbWhhcmljLWFiZWdlZGUiLCAiYW50aWFsaWFzZWQiLCAiYXBwd29ya3NwYWNlIiwgImFy
YWJpYy1pbmRpYyIsICJhcm1lbmlhbiIsICJhc3Rlcmlza3MiLAotICAgICJhdXRvIiwgImF2b2lk
IiwgImJhY2tncm91bmQiLCAiYmFja3dhcmRzIiwgImJhc2VsaW5lIiwgImJlbG93IiwgImJpZGkt
b3ZlcnJpZGUiLCAiYmluYXJ5IiwgImJlbmdhbGkiLCAiYmxpbmsiLAotICAgICJibG9jayIsICJi
bG9jay1heGlzIiwgImJvbGQiLCAiYm9sZGVyIiwgImJvcmRlciIsICJib3JkZXItYm94IiwgImJv
dGgiLCAiYm90dG9tIiwgImJyZWFrLWFsbCIsICJicmVhay13b3JkIiwgImJ1dHRvbiIsCi0gICAg
ImJ1dHRvbi1iZXZlbCIsICJidXR0b25mYWNlIiwgImJ1dHRvbmhpZ2hsaWdodCIsICJidXR0b25z
aGFkb3ciLCAiYnV0dG9udGV4dCIsICJjYW1ib2RpYW4iLCAiY2FwaXRhbGl6ZSIsICJjYXBzLWxv
Y2staW5kaWNhdG9yIiwKLSAgICAiY2FwdGlvbiIsICJjYXB0aW9udGV4dCIsICJjYXJldCIsICJj
ZWxsIiwgImNlbnRlciIsICJjaGVja2JveCIsICJjaXJjbGUiLCAiY2prLWVhcnRobHktYnJhbmNo
IiwgImNqay1oZWF2ZW5seS1zdGVtIiwgImNqay1pZGVvZ3JhcGhpYyIsCi0gICAgImNsZWFyIiwg
ImNsaXAiLCAiY2xvc2UtcXVvdGUiLCAiY29sLXJlc2l6ZSIsICJjb2xsYXBzZSIsICJjb21wYWN0
IiwgImNvbmRlbnNlZCIsICJjb250YWluIiwgImNvbnRlbnQiLCAiY29udGVudC1ib3giLCAiY29u
dGV4dC1tZW51IiwKLSAgICAiY29udGludW91cyIsICJjb3B5IiwgImNvdmVyIiwgImNyb3AiLCAi
Y3Jvc3MiLCAiY3Jvc3NoYWlyIiwgImN1cnJlbnRjb2xvciIsICJjdXJzaXZlIiwgImRhc2hlZCIs
ICJkZWNpbWFsIiwgImRlY2ltYWwtbGVhZGluZy16ZXJvIiwgImRlZmF1bHQiLAotICAgICJkZWZh
dWx0LWJ1dHRvbiIsICJkZXN0aW5hdGlvbi1hdG9wIiwgImRlc3RpbmF0aW9uLWluIiwgImRlc3Rp
bmF0aW9uLW91dCIsICJkZXN0aW5hdGlvbi1vdmVyIiwgImRldmFuYWdhcmkiLCAiZGlzYyIsICJk
aXNjYXJkIiwgImRvY3VtZW50IiwKLSAgICAiZG90LWRhc2giLCAiZG90LWRvdC1kYXNoIiwgImRv
dHRlZCIsICJkb3VibGUiLCAiZG93biIsICJlLXJlc2l6ZSIsICJlYXNlIiwgImVhc2UtaW4iLCAi
ZWFzZS1pbi1vdXQiLCAiZWFzZS1vdXQiLCAiZWxlbWVudCIsCi0gICAgImVsbGlwc2lzIiwgImVt
YmVkIiwgImVuZCIsICJldGhpb3BpYyIsICJldGhpb3BpYy1hYmVnZWRlIiwgImV0aGlvcGljLWFi
ZWdlZGUtYW0tZXQiLCAiZXRoaW9waWMtYWJlZ2VkZS1nZXoiLAotICAgICJldGhpb3BpYy1hYmVn
ZWRlLXRpLWVyIiwgImV0aGlvcGljLWFiZWdlZGUtdGktZXQiLCAiZXRoaW9waWMtaGFsZWhhbWUt
YWEtZXIiLCAiZXRoaW9waWMtaGFsZWhhbWUtYWEtZXQiLAotICAgICJldGhpb3BpYy1oYWxlaGFt
ZS1hbS1ldCIsICJldGhpb3BpYy1oYWxlaGFtZS1nZXoiLCAiZXRoaW9waWMtaGFsZWhhbWUtb20t
ZXQiLCAiZXRoaW9waWMtaGFsZWhhbWUtc2lkLWV0IiwKLSAgICAiZXRoaW9waWMtaGFsZWhhbWUt
c28tZXQiLCAiZXRoaW9waWMtaGFsZWhhbWUtdGktZXIiLCAiZXRoaW9waWMtaGFsZWhhbWUtdGkt
ZXQiLCAiZXRoaW9waWMtaGFsZWhhbWUtdGlnIiwgImV3LXJlc2l6ZSIsICJleHBhbmRlZCIsCi0g
ICAgImV4dHJhLWNvbmRlbnNlZCIsICJleHRyYS1leHBhbmRlZCIsICJmYW50YXN5IiwgImZhc3Qi
LCAiZmlsbCIsICJmaXhlZCIsICJmbGF0IiwgImZvb3Rub3RlcyIsICJmb3J3YXJkcyIsICJmcm9t
IiwgImdlb21ldHJpY1ByZWNpc2lvbiIsCi0gICAgImdlb3JnaWFuIiwgImdyYXl0ZXh0IiwgImdy
b292ZSIsICJndWphcmF0aSIsICJndXJtdWtoaSIsICJoYW5kIiwgImhhbmd1bCIsICJoYW5ndWwt
Y29uc29uYW50IiwgImhlYnJldyIsICJoZWxwIiwKLSAgICAiaGlkZGVuIiwgImhpZGUiLCAiaGln
aGVyIiwgImhpZ2hsaWdodCIsICJoaWdobGlnaHR0ZXh0IiwgImhpcmFnYW5hIiwgImhpcmFnYW5h
LWlyb2hhIiwgImhvcml6b250YWwiLCAiaHNsIiwgImhzbGEiLCAiaWNvbiIsICJpZ25vcmUiLAot
ICAgICJpbmFjdGl2ZWJvcmRlciIsICJpbmFjdGl2ZWNhcHRpb24iLCAiaW5hY3RpdmVjYXB0aW9u
dGV4dCIsICJpbmZpbml0ZSIsICJpbmZvYmFja2dyb3VuZCIsICJpbmZvdGV4dCIsICJpbmhlcml0
IiwgImluaXRpYWwiLCAiaW5saW5lIiwKLSAgICAiaW5saW5lLWF4aXMiLCAiaW5saW5lLWJsb2Nr
IiwgImlubGluZS10YWJsZSIsICJpbnNldCIsICJpbnNpZGUiLCAiaW50cmluc2ljIiwgImludmVy
dCIsICJpdGFsaWMiLCAianVzdGlmeSIsICJrYW5uYWRhIiwgImthdGFrYW5hIiwKLSAgICAia2F0
YWthbmEtaXJvaGEiLCAia2htZXIiLCAibGFuZHNjYXBlIiwgImxhbyIsICJsYXJnZSIsICJsYXJn
ZXIiLCAibGVmdCIsICJsZXZlbCIsICJsaWdodGVyIiwgImxpbmUtdGhyb3VnaCIsICJsaW5lYXIi
LCAibGluZXMiLAotICAgICJsaXN0LWl0ZW0iLCAibGlzdGJveCIsICJsaXN0aXRlbSIsICJsb2Nh
bCIsICJsb2dpY2FsIiwgImxvdWQiLCAibG93ZXIiLCAibG93ZXItYWxwaGEiLCAibG93ZXItYXJt
ZW5pYW4iLCAibG93ZXItZ3JlZWsiLAotICAgICJsb3dlci1oZXhhZGVjaW1hbCIsICJsb3dlci1s
YXRpbiIsICJsb3dlci1ub3J3ZWdpYW4iLCAibG93ZXItcm9tYW4iLCAibG93ZXJjYXNlIiwgImx0
ciIsICJtYWxheWFsYW0iLCAibWF0Y2giLCAibWVkaWEtY29udHJvbHMtYmFja2dyb3VuZCIsCi0g
ICAgIm1lZGlhLWN1cnJlbnQtdGltZS1kaXNwbGF5IiwgIm1lZGlhLWZ1bGxzY3JlZW4tYnV0dG9u
IiwgIm1lZGlhLW11dGUtYnV0dG9uIiwgIm1lZGlhLXBsYXktYnV0dG9uIiwgIm1lZGlhLXJldHVy
bi10by1yZWFsdGltZS1idXR0b24iLAotICAgICJtZWRpYS1yZXdpbmQtYnV0dG9uIiwgIm1lZGlh
LXNlZWstYmFjay1idXR0b24iLCAibWVkaWEtc2Vlay1mb3J3YXJkLWJ1dHRvbiIsICJtZWRpYS1z
bGlkZXIiLCAibWVkaWEtc2xpZGVydGh1bWIiLCAibWVkaWEtdGltZS1yZW1haW5pbmctZGlzcGxh
eSIsCi0gICAgIm1lZGlhLXZvbHVtZS1zbGlkZXIiLCAibWVkaWEtdm9sdW1lLXNsaWRlci1jb250
YWluZXIiLCAibWVkaWEtdm9sdW1lLXNsaWRlcnRodW1iIiwgIm1lZGl1bSIsICJtZW51IiwgIm1l
bnVsaXN0IiwgIm1lbnVsaXN0LWJ1dHRvbiIsCi0gICAgIm1lbnVsaXN0LXRleHQiLCAibWVudWxp
c3QtdGV4dGZpZWxkIiwgIm1lbnV0ZXh0IiwgIm1lc3NhZ2UtYm94IiwgIm1pZGRsZSIsICJtaW4t
aW50cmluc2ljIiwgIm1peCIsICJtb25nb2xpYW4iLCAibW9ub3NwYWNlIiwgIm1vdmUiLCAibXVs
dGlwbGUiLAotICAgICJteWFubWFyIiwgIm4tcmVzaXplIiwgIm5hcnJvd2VyIiwgIm5hdnkiLCAi
bmUtcmVzaXplIiwgIm5lc3ctcmVzaXplIiwgIm5vLWNsb3NlLXF1b3RlIiwgIm5vLWRyb3AiLCAi
bm8tb3Blbi1xdW90ZSIsICJuby1yZXBlYXQiLCAibm9uZSIsCi0gICAgIm5vcm1hbCIsICJub3Qt
YWxsb3dlZCIsICJub3dyYXAiLCAibnMtcmVzaXplIiwgIm53LXJlc2l6ZSIsICJud3NlLXJlc2l6
ZSIsICJvYmxpcXVlIiwgIm9jdGFsIiwgIm9wZW4tcXVvdGUiLCAib3B0aW1pemVMZWdpYmlsaXR5
IiwKLSAgICAib3B0aW1pemVTcGVlZCIsICJvcml5YSIsICJvcm9tbyIsICJvdXRzZXQiLCAib3V0
c2lkZSIsICJvdmVybGF5IiwgIm92ZXJsaW5lIiwgInBhZGRpbmciLCAicGFkZGluZy1ib3giLCAi
cGFpbnRlZCIsICJwYXVzZWQiLAotICAgICJwZXJzaWFuIiwgInBsdXMtZGFya2VyIiwgInBsdXMt
bGlnaHRlciIsICJwb2ludGVyIiwgInBvcnRyYWl0IiwgInByZSIsICJwcmUtbGluZSIsICJwcmUt
d3JhcCIsICJwcmVzZXJ2ZS0zZCIsICJwcm9ncmVzcyIsCi0gICAgInB1c2gtYnV0dG9uIiwgInJh
ZGlvIiwgInJlYWQtb25seSIsICJyZWFkLXdyaXRlIiwgInJlYWQtd3JpdGUtcGxhaW50ZXh0LW9u
bHkiLCAicmVsYXRpdmUiLCAicmVwZWF0IiwgInJlcGVhdC14IiwKLSAgICAicmVwZWF0LXkiLCAi
cmVzZXQiLCAicmV2ZXJzZSIsICJyZ2IiLCAicmdiYSIsICJyaWRnZSIsICJyaWdodCIsICJyb3Vu
ZCIsICJyb3ctcmVzaXplIiwgInJ0bCIsICJydW4taW4iLCAicnVubmluZyIsICJzLXJlc2l6ZSIs
ICJzYW5zLXNlcmlmIiwKLSAgICAic2Nyb2xsIiwgInNjcm9sbGJhciIsICJzZS1yZXNpemUiLCAi
c2VhcmNoZmllbGQiLCAic2VhcmNoZmllbGQtY2FuY2VsLWJ1dHRvbiIsICJzZWFyY2hmaWVsZC1k
ZWNvcmF0aW9uIiwgInNlYXJjaGZpZWxkLXJlc3VsdHMtYnV0dG9uIiwKLSAgICAic2VhcmNoZmll
bGQtcmVzdWx0cy1kZWNvcmF0aW9uIiwgInNlbWktY29uZGVuc2VkIiwgInNlbWktZXhwYW5kZWQi
LCAic2VwYXJhdGUiLCAic2VyaWYiLCAic2hvdyIsICJzaWRhbWEiLCAic2luZ2xlIiwKLSAgICAi
c2tpcC13aGl0ZS1zcGFjZSIsICJzbGlkZSIsICJzbGlkZXItaG9yaXpvbnRhbCIsICJzbGlkZXIt
dmVydGljYWwiLCAic2xpZGVydGh1bWItaG9yaXpvbnRhbCIsICJzbGlkZXJ0aHVtYi12ZXJ0aWNh
bCIsICJzbG93IiwKLSAgICAic21hbGwiLCAic21hbGwtY2FwcyIsICJzbWFsbC1jYXB0aW9uIiwg
InNtYWxsZXIiLCAic29saWQiLCAic29tYWxpIiwgInNvdXJjZS1hdG9wIiwgInNvdXJjZS1pbiIs
ICJzb3VyY2Utb3V0IiwgInNvdXJjZS1vdmVyIiwKLSAgICAic3BhY2UiLCAic3F1YXJlIiwgInNx
dWFyZS1idXR0b24iLCAic3RhcnQiLCAic3RhdGljIiwgInN0YXR1cy1iYXIiLCAic3RyZXRjaCIs
ICJzdHJva2UiLCAic3ViIiwgInN1YnBpeGVsLWFudGlhbGlhc2VkIiwgInN1cGVyIiwKLSAgICAi
c3ctcmVzaXplIiwgInRhYmxlIiwgInRhYmxlLWNhcHRpb24iLCAidGFibGUtY2VsbCIsICJ0YWJs
ZS1jb2x1bW4iLCAidGFibGUtY29sdW1uLWdyb3VwIiwgInRhYmxlLWZvb3Rlci1ncm91cCIsICJ0
YWJsZS1oZWFkZXItZ3JvdXAiLAotICAgICJ0YWJsZS1yb3ciLCAidGFibGUtcm93LWdyb3VwIiwg
InRlbHVndSIsICJ0ZXh0IiwgInRleHQtYm90dG9tIiwgInRleHQtdG9wIiwgInRleHRhcmVhIiwg
InRleHRmaWVsZCIsICJ0aGFpIiwgInRoaWNrIiwgInRoaW4iLAotICAgICJ0aHJlZWRkYXJrc2hh
ZG93IiwgInRocmVlZGZhY2UiLCAidGhyZWVkaGlnaGxpZ2h0IiwgInRocmVlZGxpZ2h0c2hhZG93
IiwgInRocmVlZHNoYWRvdyIsICJ0aWJldGFuIiwgInRpZ3JlIiwgInRpZ3JpbnlhLWVyIiwgInRp
Z3JpbnlhLWVyLWFiZWdlZGUiLAotICAgICJ0aWdyaW55YS1ldCIsICJ0aWdyaW55YS1ldC1hYmVn
ZWRlIiwgInRvIiwgInRvcCIsICJ0cmFuc3BhcmVudCIsICJ1bHRyYS1jb25kZW5zZWQiLCAidWx0
cmEtZXhwYW5kZWQiLCAidW5kZXJsaW5lIiwgInVwIiwgInVwcGVyLWFscGhhIiwgInVwcGVyLWFy
bWVuaWFuIiwKLSAgICAidXBwZXItZ3JlZWsiLCAidXBwZXItaGV4YWRlY2ltYWwiLCAidXBwZXIt
bGF0aW4iLCAidXBwZXItbm9yd2VnaWFuIiwgInVwcGVyLXJvbWFuIiwgInVwcGVyY2FzZSIsICJ1
cmR1IiwgInVybCIsICJ2ZXJ0aWNhbCIsICJ2ZXJ0aWNhbC10ZXh0IiwgInZpc2libGUiLAotICAg
ICJ2aXNpYmxlRmlsbCIsICJ2aXNpYmxlUGFpbnRlZCIsICJ2aXNpYmxlU3Ryb2tlIiwgInZpc3Vh
bCIsICJ3LXJlc2l6ZSIsICJ3YWl0IiwgIndhdmUiLCAid2hpdGUiLCAid2lkZXIiLCAid2luZG93
IiwgIndpbmRvd2ZyYW1lIiwgIndpbmRvd3RleHQiLAotICAgICJ4LWxhcmdlIiwgIngtc21hbGwi
LCAieG9yIiwgInh4LWxhcmdlIiwgInh4LXNtYWxsIiwgInllbGxvdyIsICItd2FwLW1hcnF1ZWUi
LCAiLXdlYmtpdC1hY3RpdmVsaW5rIiwgIi13ZWJraXQtYXV0byIsICItd2Via2l0LWJhc2VsaW5l
LW1pZGRsZSIsCi0gICAgIi13ZWJraXQtYm9keSIsICItd2Via2l0LWJveCIsICItd2Via2l0LWNl
bnRlciIsICItd2Via2l0LWNvbnRyb2wiLCAiLXdlYmtpdC1mb2N1cy1yaW5nLWNvbG9yIiwgIi13
ZWJraXQtZ3JhYiIsICItd2Via2l0LWdyYWJiaW5nIiwKLSAgICAiLXdlYmtpdC1ncmFkaWVudCIs
ICItd2Via2l0LWlubGluZS1ib3giLCAiLXdlYmtpdC1sZWZ0IiwgIi13ZWJraXQtbGluayIsICIt
d2Via2l0LW1hcnF1ZWUiLCAiLXdlYmtpdC1taW5pLWNvbnRyb2wiLCAiLXdlYmtpdC1ub3dyYXAi
LCAiLXdlYmtpdC1waWN0b2dyYXBoIiwKLSAgICAiLXdlYmtpdC1yaWdodCIsICItd2Via2l0LXNt
YWxsLWNvbnRyb2wiLCAiLXdlYmtpdC10ZXh0IiwgIi13ZWJraXQteHh4LWxhcmdlIiwgIi13ZWJr
aXQtem9vbS1pbiIsICItd2Via2l0LXpvb20tb3V0Il0pOworICB2YXIgcHJvcGVydHlLZXl3b3Jk
cyA9IGtleVNldChbCisgICAgImFsaWduLWNvbnRlbnQiLCAiYWxpZ24taXRlbXMiLCAiYWxpZ24t
c2VsZiIsICJhbGlnbm1lbnQtYWRqdXN0IiwKKyAgICAiYWxpZ25tZW50LWJhc2VsaW5lIiwgImFu
Y2hvci1wb2ludCIsICJhbmltYXRpb24iLCAiYW5pbWF0aW9uLWRlbGF5IiwKKyAgICAiYW5pbWF0
aW9uLWRpcmVjdGlvbiIsICJhbmltYXRpb24tZHVyYXRpb24iLCAiYW5pbWF0aW9uLWl0ZXJhdGlv
bi1jb3VudCIsCisgICAgImFuaW1hdGlvbi1uYW1lIiwgImFuaW1hdGlvbi1wbGF5LXN0YXRlIiwg
ImFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb24iLAorICAgICJhcHBlYXJhbmNlIiwgImF6aW11dGgi
LCAiYmFja2ZhY2UtdmlzaWJpbGl0eSIsICJiYWNrZ3JvdW5kIiwKKyAgICAiYmFja2dyb3VuZC1h
dHRhY2htZW50IiwgImJhY2tncm91bmQtY2xpcCIsICJiYWNrZ3JvdW5kLWNvbG9yIiwKKyAgICAi
YmFja2dyb3VuZC1pbWFnZSIsICJiYWNrZ3JvdW5kLW9yaWdpbiIsICJiYWNrZ3JvdW5kLXBvc2l0
aW9uIiwKKyAgICAiYmFja2dyb3VuZC1yZXBlYXQiLCAiYmFja2dyb3VuZC1zaXplIiwgImJhc2Vs
aW5lLXNoaWZ0IiwgImJpbmRpbmciLAorICAgICJibGVlZCIsICJib29rbWFyay1sYWJlbCIsICJi
b29rbWFyay1sZXZlbCIsICJib29rbWFyay1zdGF0ZSIsCisgICAgImJvb2ttYXJrLXRhcmdldCIs
ICJib3JkZXIiLCAiYm9yZGVyLWJvdHRvbSIsICJib3JkZXItYm90dG9tLWNvbG9yIiwKKyAgICAi
Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1cyIsICJib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1cyIs
CisgICAgImJvcmRlci1ib3R0b20tc3R5bGUiLCAiYm9yZGVyLWJvdHRvbS13aWR0aCIsICJib3Jk
ZXItY29sbGFwc2UiLAorICAgICJib3JkZXItY29sb3IiLCAiYm9yZGVyLWltYWdlIiwgImJvcmRl
ci1pbWFnZS1vdXRzZXQiLAorICAgICJib3JkZXItaW1hZ2UtcmVwZWF0IiwgImJvcmRlci1pbWFn
ZS1zbGljZSIsICJib3JkZXItaW1hZ2Utc291cmNlIiwKKyAgICAiYm9yZGVyLWltYWdlLXdpZHRo
IiwgImJvcmRlci1sZWZ0IiwgImJvcmRlci1sZWZ0LWNvbG9yIiwKKyAgICAiYm9yZGVyLWxlZnQt
c3R5bGUiLCAiYm9yZGVyLWxlZnQtd2lkdGgiLCAiYm9yZGVyLXJhZGl1cyIsICJib3JkZXItcmln
aHQiLAorICAgICJib3JkZXItcmlnaHQtY29sb3IiLCAiYm9yZGVyLXJpZ2h0LXN0eWxlIiwgImJv
cmRlci1yaWdodC13aWR0aCIsCisgICAgImJvcmRlci1zcGFjaW5nIiwgImJvcmRlci1zdHlsZSIs
ICJib3JkZXItdG9wIiwgImJvcmRlci10b3AtY29sb3IiLAorICAgICJib3JkZXItdG9wLWxlZnQt
cmFkaXVzIiwgImJvcmRlci10b3AtcmlnaHQtcmFkaXVzIiwgImJvcmRlci10b3Atc3R5bGUiLAor
ICAgICJib3JkZXItdG9wLXdpZHRoIiwgImJvcmRlci13aWR0aCIsICJib3R0b20iLCAiYm94LWRl
Y29yYXRpb24tYnJlYWsiLAorICAgICJib3gtc2hhZG93IiwgImJveC1zaXppbmciLCAiYnJlYWst
YWZ0ZXIiLCAiYnJlYWstYmVmb3JlIiwgImJyZWFrLWluc2lkZSIsCisgICAgImNhcHRpb24tc2lk
ZSIsICJjbGVhciIsICJjbGlwIiwgImNvbG9yIiwgImNvbG9yLXByb2ZpbGUiLCAiY29sdW1uLWNv
dW50IiwKKyAgICAiY29sdW1uLWZpbGwiLCAiY29sdW1uLWdhcCIsICJjb2x1bW4tcnVsZSIsICJj
b2x1bW4tcnVsZS1jb2xvciIsCisgICAgImNvbHVtbi1ydWxlLXN0eWxlIiwgImNvbHVtbi1ydWxl
LXdpZHRoIiwgImNvbHVtbi1zcGFuIiwgImNvbHVtbi13aWR0aCIsCisgICAgImNvbHVtbnMiLCAi
Y29udGVudCIsICJjb3VudGVyLWluY3JlbWVudCIsICJjb3VudGVyLXJlc2V0IiwgImNyb3AiLCAi
Y3VlIiwKKyAgICAiY3VlLWFmdGVyIiwgImN1ZS1iZWZvcmUiLCAiY3Vyc29yIiwgImRpcmVjdGlv
biIsICJkaXNwbGF5IiwKKyAgICAiZG9taW5hbnQtYmFzZWxpbmUiLCAiZHJvcC1pbml0aWFsLWFm
dGVyLWFkanVzdCIsCisgICAgImRyb3AtaW5pdGlhbC1hZnRlci1hbGlnbiIsICJkcm9wLWluaXRp
YWwtYmVmb3JlLWFkanVzdCIsCisgICAgImRyb3AtaW5pdGlhbC1iZWZvcmUtYWxpZ24iLCAiZHJv
cC1pbml0aWFsLXNpemUiLCAiZHJvcC1pbml0aWFsLXZhbHVlIiwKKyAgICAiZWxldmF0aW9uIiwg
ImVtcHR5LWNlbGxzIiwgImZpdCIsICJmaXQtcG9zaXRpb24iLCAiZmxleCIsICJmbGV4LWJhc2lz
IiwKKyAgICAiZmxleC1kaXJlY3Rpb24iLCAiZmxleC1mbG93IiwgImZsZXgtZ3JvdyIsICJmbGV4
LXNocmluayIsICJmbGV4LXdyYXAiLAorICAgICJmbG9hdCIsICJmbG9hdC1vZmZzZXQiLCAiZm9u
dCIsICJmb250LWZlYXR1cmUtc2V0dGluZ3MiLCAiZm9udC1mYW1pbHkiLAorICAgICJmb250LWtl
cm5pbmciLCAiZm9udC1sYW5ndWFnZS1vdmVycmlkZSIsICJmb250LXNpemUiLCAiZm9udC1zaXpl
LWFkanVzdCIsCisgICAgImZvbnQtc3RyZXRjaCIsICJmb250LXN0eWxlIiwgImZvbnQtc3ludGhl
c2lzIiwgImZvbnQtdmFyaWFudCIsCisgICAgImZvbnQtdmFyaWFudC1hbHRlcm5hdGVzIiwgImZv
bnQtdmFyaWFudC1jYXBzIiwgImZvbnQtdmFyaWFudC1lYXN0LWFzaWFuIiwKKyAgICAiZm9udC12
YXJpYW50LWxpZ2F0dXJlcyIsICJmb250LXZhcmlhbnQtbnVtZXJpYyIsICJmb250LXZhcmlhbnQt
cG9zaXRpb24iLAorICAgICJmb250LXdlaWdodCIsICJncmlkLWNlbGwiLCAiZ3JpZC1jb2x1bW4i
LCAiZ3JpZC1jb2x1bW4tYWxpZ24iLAorICAgICJncmlkLWNvbHVtbi1zaXppbmciLCAiZ3JpZC1j
b2x1bW4tc3BhbiIsICJncmlkLWNvbHVtbnMiLCAiZ3JpZC1mbG93IiwKKyAgICAiZ3JpZC1yb3ci
LCAiZ3JpZC1yb3ctYWxpZ24iLCAiZ3JpZC1yb3ctc2l6aW5nIiwgImdyaWQtcm93LXNwYW4iLAor
ICAgICJncmlkLXJvd3MiLCAiZ3JpZC10ZW1wbGF0ZSIsICJoYW5naW5nLXB1bmN0dWF0aW9uIiwg
ImhlaWdodCIsICJoeXBoZW5zIiwKKyAgICAiaWNvbiIsICJpbWFnZS1vcmllbnRhdGlvbiIsICJp
bWFnZS1yZW5kZXJpbmciLCAiaW1hZ2UtcmVzb2x1dGlvbiIsCisgICAgImlubGluZS1ib3gtYWxp
Z24iLCAianVzdGlmeS1jb250ZW50IiwgImxlZnQiLCAibGV0dGVyLXNwYWNpbmciLAorICAgICJs
aW5lLWJyZWFrIiwgImxpbmUtaGVpZ2h0IiwgImxpbmUtc3RhY2tpbmciLCAibGluZS1zdGFja2lu
Zy1ydWJ5IiwKKyAgICAibGluZS1zdGFja2luZy1zaGlmdCIsICJsaW5lLXN0YWNraW5nLXN0cmF0
ZWd5IiwgImxpc3Qtc3R5bGUiLAorICAgICJsaXN0LXN0eWxlLWltYWdlIiwgImxpc3Qtc3R5bGUt
cG9zaXRpb24iLCAibGlzdC1zdHlsZS10eXBlIiwgIm1hcmdpbiIsCisgICAgIm1hcmdpbi1ib3R0
b20iLCAibWFyZ2luLWxlZnQiLCAibWFyZ2luLXJpZ2h0IiwgIm1hcmdpbi10b3AiLAorICAgICJt
YXJrZXItb2Zmc2V0IiwgIm1hcmtzIiwgIm1hcnF1ZWUtZGlyZWN0aW9uIiwgIm1hcnF1ZWUtbG9v
cCIsCisgICAgIm1hcnF1ZWUtcGxheS1jb3VudCIsICJtYXJxdWVlLXNwZWVkIiwgIm1hcnF1ZWUt
c3R5bGUiLCAibWF4LWhlaWdodCIsCisgICAgIm1heC13aWR0aCIsICJtaW4taGVpZ2h0IiwgIm1p
bi13aWR0aCIsICJtb3ZlLXRvIiwgIm5hdi1kb3duIiwgIm5hdi1pbmRleCIsCisgICAgIm5hdi1s
ZWZ0IiwgIm5hdi1yaWdodCIsICJuYXYtdXAiLCAib3BhY2l0eSIsICJvcmRlciIsICJvcnBoYW5z
IiwgIm91dGxpbmUiLAorICAgICJvdXRsaW5lLWNvbG9yIiwgIm91dGxpbmUtb2Zmc2V0IiwgIm91
dGxpbmUtc3R5bGUiLCAib3V0bGluZS13aWR0aCIsCisgICAgIm92ZXJmbG93IiwgIm92ZXJmbG93
LXN0eWxlIiwgIm92ZXJmbG93LXdyYXAiLCAib3ZlcmZsb3cteCIsICJvdmVyZmxvdy15IiwKKyAg
ICAicGFkZGluZyIsICJwYWRkaW5nLWJvdHRvbSIsICJwYWRkaW5nLWxlZnQiLCAicGFkZGluZy1y
aWdodCIsICJwYWRkaW5nLXRvcCIsCisgICAgInBhZ2UiLCAicGFnZS1icmVhay1hZnRlciIsICJw
YWdlLWJyZWFrLWJlZm9yZSIsICJwYWdlLWJyZWFrLWluc2lkZSIsCisgICAgInBhZ2UtcG9saWN5
IiwgInBhdXNlIiwgInBhdXNlLWFmdGVyIiwgInBhdXNlLWJlZm9yZSIsICJwZXJzcGVjdGl2ZSIs
CisgICAgInBlcnNwZWN0aXZlLW9yaWdpbiIsICJwaXRjaCIsICJwaXRjaC1yYW5nZSIsICJwbGF5
LWR1cmluZyIsICJwb3NpdGlvbiIsCisgICAgInByZXNlbnRhdGlvbi1sZXZlbCIsICJwdW5jdHVh
dGlvbi10cmltIiwgInF1b3RlcyIsICJyZW5kZXJpbmctaW50ZW50IiwKKyAgICAicmVzaXplIiwg
InJlc3QiLCAicmVzdC1hZnRlciIsICJyZXN0LWJlZm9yZSIsICJyaWNobmVzcyIsICJyaWdodCIs
CisgICAgInJvdGF0aW9uIiwgInJvdGF0aW9uLXBvaW50IiwgInJ1YnktYWxpZ24iLCAicnVieS1v
dmVyaGFuZyIsCisgICAgInJ1YnktcG9zaXRpb24iLCAicnVieS1zcGFuIiwgInNpemUiLCAic3Bl
YWsiLCAic3BlYWstYXMiLCAic3BlYWstaGVhZGVyIiwKKyAgICAic3BlYWstbnVtZXJhbCIsICJz
cGVhay1wdW5jdHVhdGlvbiIsICJzcGVlY2gtcmF0ZSIsICJzdHJlc3MiLCAic3RyaW5nLXNldCIs
CisgICAgInRhYi1zaXplIiwgInRhYmxlLWxheW91dCIsICJ0YXJnZXQiLCAidGFyZ2V0LW5hbWUi
LCAidGFyZ2V0LW5ldyIsCisgICAgInRhcmdldC1wb3NpdGlvbiIsICJ0ZXh0LWFsaWduIiwgInRl
eHQtYWxpZ24tbGFzdCIsICJ0ZXh0LWRlY29yYXRpb24iLAorICAgICJ0ZXh0LWRlY29yYXRpb24t
Y29sb3IiLCAidGV4dC1kZWNvcmF0aW9uLWxpbmUiLCAidGV4dC1kZWNvcmF0aW9uLXNraXAiLAor
ICAgICJ0ZXh0LWRlY29yYXRpb24tc3R5bGUiLCAidGV4dC1lbXBoYXNpcyIsICJ0ZXh0LWVtcGhh
c2lzLWNvbG9yIiwKKyAgICAidGV4dC1lbXBoYXNpcy1wb3NpdGlvbiIsICJ0ZXh0LWVtcGhhc2lz
LXN0eWxlIiwgInRleHQtaGVpZ2h0IiwKKyAgICAidGV4dC1pbmRlbnQiLCAidGV4dC1qdXN0aWZ5
IiwgInRleHQtb3V0bGluZSIsICJ0ZXh0LXNoYWRvdyIsCisgICAgInRleHQtc3BhY2UtY29sbGFw
c2UiLCAidGV4dC10cmFuc2Zvcm0iLCAidGV4dC11bmRlcmxpbmUtcG9zaXRpb24iLAorICAgICJ0
ZXh0LXdyYXAiLCAidG9wIiwgInRyYW5zZm9ybSIsICJ0cmFuc2Zvcm0tb3JpZ2luIiwgInRyYW5z
Zm9ybS1zdHlsZSIsCisgICAgInRyYW5zaXRpb24iLCAidHJhbnNpdGlvbi1kZWxheSIsICJ0cmFu
c2l0aW9uLWR1cmF0aW9uIiwKKyAgICAidHJhbnNpdGlvbi1wcm9wZXJ0eSIsICJ0cmFuc2l0aW9u
LXRpbWluZy1mdW5jdGlvbiIsICJ1bmljb2RlLWJpZGkiLAorICAgICJ2ZXJ0aWNhbC1hbGlnbiIs
ICJ2aXNpYmlsaXR5IiwgInZvaWNlLWJhbGFuY2UiLCAidm9pY2UtZHVyYXRpb24iLAorICAgICJ2
b2ljZS1mYW1pbHkiLCAidm9pY2UtcGl0Y2giLCAidm9pY2UtcmFuZ2UiLCAidm9pY2UtcmF0ZSIs
ICJ2b2ljZS1zdHJlc3MiLAorICAgICJ2b2ljZS12b2x1bWUiLCAidm9sdW1lIiwgIndoaXRlLXNw
YWNlIiwgIndpZG93cyIsICJ3aWR0aCIsICJ3b3JkLWJyZWFrIiwKKyAgICAid29yZC1zcGFjaW5n
IiwgIndvcmQtd3JhcCIsICJ6LWluZGV4IgorICBdKTsKKworICB2YXIgY29sb3JLZXl3b3JkcyA9
IGtleVNldChbCisgICAgImJsYWNrIiwgInNpbHZlciIsICJncmF5IiwgIndoaXRlIiwgIm1hcm9v
biIsICJyZWQiLCAicHVycGxlIiwgImZ1Y2hzaWEiLAorICAgICJncmVlbiIsICJsaW1lIiwgIm9s
aXZlIiwgInllbGxvdyIsICJuYXZ5IiwgImJsdWUiLCAidGVhbCIsICJhcXVhIgorICBdKTsKKyAg
CisgIHZhciB2YWx1ZUtleXdvcmRzID0ga2V5U2V0KFsKKyAgICAiYWJvdmUiLCAiYWJzb2x1dGUi
LCAiYWN0aXZlYm9yZGVyIiwgImFjdGl2ZWNhcHRpb24iLCAiYWZhciIsCisgICAgImFmdGVyLXdo
aXRlLXNwYWNlIiwgImFoZWFkIiwgImFsaWFzIiwgImFsbCIsICJhbGwtc2Nyb2xsIiwgImFsdGVy
bmF0ZSIsCisgICAgImFsd2F5cyIsICJhbWhhcmljIiwgImFtaGFyaWMtYWJlZ2VkZSIsICJhbnRp
YWxpYXNlZCIsICJhcHB3b3Jrc3BhY2UiLAorICAgICJhcmFiaWMtaW5kaWMiLCAiYXJtZW5pYW4i
LCAiYXN0ZXJpc2tzIiwgImF1dG8iLCAiYXZvaWQiLCAiYmFja2dyb3VuZCIsCisgICAgImJhY2t3
YXJkcyIsICJiYXNlbGluZSIsICJiZWxvdyIsICJiaWRpLW92ZXJyaWRlIiwgImJpbmFyeSIsICJi
ZW5nYWxpIiwKKyAgICAiYmxpbmsiLCAiYmxvY2siLCAiYmxvY2stYXhpcyIsICJib2xkIiwgImJv
bGRlciIsICJib3JkZXIiLCAiYm9yZGVyLWJveCIsCisgICAgImJvdGgiLCAiYm90dG9tIiwgImJy
ZWFrLWFsbCIsICJicmVhay13b3JkIiwgImJ1dHRvbiIsICJidXR0b24tYmV2ZWwiLAorICAgICJi
dXR0b25mYWNlIiwgImJ1dHRvbmhpZ2hsaWdodCIsICJidXR0b25zaGFkb3ciLCAiYnV0dG9udGV4
dCIsICJjYW1ib2RpYW4iLAorICAgICJjYXBpdGFsaXplIiwgImNhcHMtbG9jay1pbmRpY2F0b3Ii
LCAiY2FwdGlvbiIsICJjYXB0aW9udGV4dCIsICJjYXJldCIsCisgICAgImNlbGwiLCAiY2VudGVy
IiwgImNoZWNrYm94IiwgImNpcmNsZSIsICJjamstZWFydGhseS1icmFuY2giLAorICAgICJjamst
aGVhdmVubHktc3RlbSIsICJjamstaWRlb2dyYXBoaWMiLCAiY2xlYXIiLCAiY2xpcCIsICJjbG9z
ZS1xdW90ZSIsCisgICAgImNvbC1yZXNpemUiLCAiY29sbGFwc2UiLCAiY29tcGFjdCIsICJjb25k
ZW5zZWQiLCAiY29udGFpbiIsICJjb250ZW50IiwKKyAgICAiY29udGVudC1ib3giLCAiY29udGV4
dC1tZW51IiwgImNvbnRpbnVvdXMiLCAiY29weSIsICJjb3ZlciIsICJjcm9wIiwKKyAgICAiY3Jv
c3MiLCAiY3Jvc3NoYWlyIiwgImN1cnJlbnRjb2xvciIsICJjdXJzaXZlIiwgImRhc2hlZCIsICJk
ZWNpbWFsIiwKKyAgICAiZGVjaW1hbC1sZWFkaW5nLXplcm8iLCAiZGVmYXVsdCIsICJkZWZhdWx0
LWJ1dHRvbiIsICJkZXN0aW5hdGlvbi1hdG9wIiwKKyAgICAiZGVzdGluYXRpb24taW4iLCAiZGVz
dGluYXRpb24tb3V0IiwgImRlc3RpbmF0aW9uLW92ZXIiLCAiZGV2YW5hZ2FyaSIsCisgICAgImRp
c2MiLCAiZGlzY2FyZCIsICJkb2N1bWVudCIsICJkb3QtZGFzaCIsICJkb3QtZG90LWRhc2giLCAi
ZG90dGVkIiwKKyAgICAiZG91YmxlIiwgImRvd24iLCAiZS1yZXNpemUiLCAiZWFzZSIsICJlYXNl
LWluIiwgImVhc2UtaW4tb3V0IiwgImVhc2Utb3V0IiwKKyAgICAiZWxlbWVudCIsICJlbGxpcHNp
cyIsICJlbWJlZCIsICJlbmQiLCAiZXRoaW9waWMiLCAiZXRoaW9waWMtYWJlZ2VkZSIsCisgICAg
ImV0aGlvcGljLWFiZWdlZGUtYW0tZXQiLCAiZXRoaW9waWMtYWJlZ2VkZS1nZXoiLCAiZXRoaW9w
aWMtYWJlZ2VkZS10aS1lciIsCisgICAgImV0aGlvcGljLWFiZWdlZGUtdGktZXQiLCAiZXRoaW9w
aWMtaGFsZWhhbWUtYWEtZXIiLAorICAgICJldGhpb3BpYy1oYWxlaGFtZS1hYS1ldCIsICJldGhp
b3BpYy1oYWxlaGFtZS1hbS1ldCIsCisgICAgImV0aGlvcGljLWhhbGVoYW1lLWdleiIsICJldGhp
b3BpYy1oYWxlaGFtZS1vbS1ldCIsCisgICAgImV0aGlvcGljLWhhbGVoYW1lLXNpZC1ldCIsICJl
dGhpb3BpYy1oYWxlaGFtZS1zby1ldCIsCisgICAgImV0aGlvcGljLWhhbGVoYW1lLXRpLWVyIiwg
ImV0aGlvcGljLWhhbGVoYW1lLXRpLWV0IiwKKyAgICAiZXRoaW9waWMtaGFsZWhhbWUtdGlnIiwg
ImV3LXJlc2l6ZSIsICJleHBhbmRlZCIsICJleHRyYS1jb25kZW5zZWQiLAorICAgICJleHRyYS1l
eHBhbmRlZCIsICJmYW50YXN5IiwgImZhc3QiLCAiZmlsbCIsICJmaXhlZCIsICJmbGF0IiwgImZv
b3Rub3RlcyIsCisgICAgImZvcndhcmRzIiwgImZyb20iLCAiZ2VvbWV0cmljUHJlY2lzaW9uIiwg
Imdlb3JnaWFuIiwgImdyYXl0ZXh0IiwgImdyb292ZSIsCisgICAgImd1amFyYXRpIiwgImd1cm11
a2hpIiwgImhhbmQiLCAiaGFuZ3VsIiwgImhhbmd1bC1jb25zb25hbnQiLCAiaGVicmV3IiwKKyAg
ICAiaGVscCIsICJoaWRkZW4iLCAiaGlkZSIsICJoaWdoZXIiLCAiaGlnaGxpZ2h0IiwgImhpZ2hs
aWdodHRleHQiLAorICAgICJoaXJhZ2FuYSIsICJoaXJhZ2FuYS1pcm9oYSIsICJob3Jpem9udGFs
IiwgImhzbCIsICJoc2xhIiwgImljb24iLCAiaWdub3JlIiwKKyAgICAiaW5hY3RpdmVib3JkZXIi
LCAiaW5hY3RpdmVjYXB0aW9uIiwgImluYWN0aXZlY2FwdGlvbnRleHQiLCAiaW5maW5pdGUiLAor
ICAgICJpbmZvYmFja2dyb3VuZCIsICJpbmZvdGV4dCIsICJpbmhlcml0IiwgImluaXRpYWwiLCAi
aW5saW5lIiwgImlubGluZS1heGlzIiwKKyAgICAiaW5saW5lLWJsb2NrIiwgImlubGluZS10YWJs
ZSIsICJpbnNldCIsICJpbnNpZGUiLCAiaW50cmluc2ljIiwgImludmVydCIsCisgICAgIml0YWxp
YyIsICJqdXN0aWZ5IiwgImthbm5hZGEiLCAia2F0YWthbmEiLCAia2F0YWthbmEtaXJvaGEiLCAi
a2htZXIiLAorICAgICJsYW5kc2NhcGUiLCAibGFvIiwgImxhcmdlIiwgImxhcmdlciIsICJsZWZ0
IiwgImxldmVsIiwgImxpZ2h0ZXIiLAorICAgICJsaW5lLXRocm91Z2giLCAibGluZWFyIiwgImxp
bmVzIiwgImxpc3QtaXRlbSIsICJsaXN0Ym94IiwgImxpc3RpdGVtIiwKKyAgICAibG9jYWwiLCAi
bG9naWNhbCIsICJsb3VkIiwgImxvd2VyIiwgImxvd2VyLWFscGhhIiwgImxvd2VyLWFybWVuaWFu
IiwKKyAgICAibG93ZXItZ3JlZWsiLCAibG93ZXItaGV4YWRlY2ltYWwiLCAibG93ZXItbGF0aW4i
LCAibG93ZXItbm9yd2VnaWFuIiwKKyAgICAibG93ZXItcm9tYW4iLCAibG93ZXJjYXNlIiwgImx0
ciIsICJtYWxheWFsYW0iLCAibWF0Y2giLAorICAgICJtZWRpYS1jb250cm9scy1iYWNrZ3JvdW5k
IiwgIm1lZGlhLWN1cnJlbnQtdGltZS1kaXNwbGF5IiwKKyAgICAibWVkaWEtZnVsbHNjcmVlbi1i
dXR0b24iLCAibWVkaWEtbXV0ZS1idXR0b24iLCAibWVkaWEtcGxheS1idXR0b24iLAorICAgICJt
ZWRpYS1yZXR1cm4tdG8tcmVhbHRpbWUtYnV0dG9uIiwgIm1lZGlhLXJld2luZC1idXR0b24iLAor
ICAgICJtZWRpYS1zZWVrLWJhY2stYnV0dG9uIiwgIm1lZGlhLXNlZWstZm9yd2FyZC1idXR0b24i
LCAibWVkaWEtc2xpZGVyIiwKKyAgICAibWVkaWEtc2xpZGVydGh1bWIiLCAibWVkaWEtdGltZS1y
ZW1haW5pbmctZGlzcGxheSIsICJtZWRpYS12b2x1bWUtc2xpZGVyIiwKKyAgICAibWVkaWEtdm9s
dW1lLXNsaWRlci1jb250YWluZXIiLCAibWVkaWEtdm9sdW1lLXNsaWRlcnRodW1iIiwgIm1lZGl1
bSIsCisgICAgIm1lbnUiLCAibWVudWxpc3QiLCAibWVudWxpc3QtYnV0dG9uIiwgIm1lbnVsaXN0
LXRleHQiLAorICAgICJtZW51bGlzdC10ZXh0ZmllbGQiLCAibWVudXRleHQiLCAibWVzc2FnZS1i
b3giLCAibWlkZGxlIiwgIm1pbi1pbnRyaW5zaWMiLAorICAgICJtaXgiLCAibW9uZ29saWFuIiwg
Im1vbm9zcGFjZSIsICJtb3ZlIiwgIm11bHRpcGxlIiwgIm15YW5tYXIiLCAibi1yZXNpemUiLAor
ICAgICJuYXJyb3dlciIsICJuYXZ5IiwgIm5lLXJlc2l6ZSIsICJuZXN3LXJlc2l6ZSIsICJuby1j
bG9zZS1xdW90ZSIsICJuby1kcm9wIiwKKyAgICAibm8tb3Blbi1xdW90ZSIsICJuby1yZXBlYXQi
LCAibm9uZSIsICJub3JtYWwiLCAibm90LWFsbG93ZWQiLCAibm93cmFwIiwKKyAgICAibnMtcmVz
aXplIiwgIm53LXJlc2l6ZSIsICJud3NlLXJlc2l6ZSIsICJvYmxpcXVlIiwgIm9jdGFsIiwgIm9w
ZW4tcXVvdGUiLAorICAgICJvcHRpbWl6ZUxlZ2liaWxpdHkiLCAib3B0aW1pemVTcGVlZCIsICJv
cml5YSIsICJvcm9tbyIsICJvdXRzZXQiLAorICAgICJvdXRzaWRlIiwgIm92ZXJsYXkiLCAib3Zl
cmxpbmUiLCAicGFkZGluZyIsICJwYWRkaW5nLWJveCIsICJwYWludGVkIiwKKyAgICAicGF1c2Vk
IiwgInBlcnNpYW4iLCAicGx1cy1kYXJrZXIiLCAicGx1cy1saWdodGVyIiwgInBvaW50ZXIiLCAi
cG9ydHJhaXQiLAorICAgICJwcmUiLCAicHJlLWxpbmUiLCAicHJlLXdyYXAiLCAicHJlc2VydmUt
M2QiLCAicHJvZ3Jlc3MiLCAicHVzaC1idXR0b24iLAorICAgICJyYWRpbyIsICJyZWFkLW9ubHki
LCAicmVhZC13cml0ZSIsICJyZWFkLXdyaXRlLXBsYWludGV4dC1vbmx5IiwgInJlbGF0aXZlIiwK
KyAgICAicmVwZWF0IiwgInJlcGVhdC14IiwgInJlcGVhdC15IiwgInJlc2V0IiwgInJldmVyc2Ui
LCAicmdiIiwgInJnYmEiLAorICAgICJyaWRnZSIsICJyaWdodCIsICJyb3VuZCIsICJyb3ctcmVz
aXplIiwgInJ0bCIsICJydW4taW4iLCAicnVubmluZyIsCisgICAgInMtcmVzaXplIiwgInNhbnMt
c2VyaWYiLCAic2Nyb2xsIiwgInNjcm9sbGJhciIsICJzZS1yZXNpemUiLCAic2VhcmNoZmllbGQi
LAorICAgICJzZWFyY2hmaWVsZC1jYW5jZWwtYnV0dG9uIiwgInNlYXJjaGZpZWxkLWRlY29yYXRp
b24iLAorICAgICJzZWFyY2hmaWVsZC1yZXN1bHRzLWJ1dHRvbiIsICJzZWFyY2hmaWVsZC1yZXN1
bHRzLWRlY29yYXRpb24iLAorICAgICJzZW1pLWNvbmRlbnNlZCIsICJzZW1pLWV4cGFuZGVkIiwg
InNlcGFyYXRlIiwgInNlcmlmIiwgInNob3ciLCAic2lkYW1hIiwKKyAgICAic2luZ2xlIiwgInNr
aXAtd2hpdGUtc3BhY2UiLCAic2xpZGUiLCAic2xpZGVyLWhvcml6b250YWwiLAorICAgICJzbGlk
ZXItdmVydGljYWwiLCAic2xpZGVydGh1bWItaG9yaXpvbnRhbCIsICJzbGlkZXJ0aHVtYi12ZXJ0
aWNhbCIsICJzbG93IiwKKyAgICAic21hbGwiLCAic21hbGwtY2FwcyIsICJzbWFsbC1jYXB0aW9u
IiwgInNtYWxsZXIiLCAic29saWQiLCAic29tYWxpIiwKKyAgICAic291cmNlLWF0b3AiLCAic291
cmNlLWluIiwgInNvdXJjZS1vdXQiLCAic291cmNlLW92ZXIiLCAic3BhY2UiLCAic3F1YXJlIiwK
KyAgICAic3F1YXJlLWJ1dHRvbiIsICJzdGFydCIsICJzdGF0aWMiLCAic3RhdHVzLWJhciIsICJz
dHJldGNoIiwgInN0cm9rZSIsCisgICAgInN1YiIsICJzdWJwaXhlbC1hbnRpYWxpYXNlZCIsICJz
dXBlciIsICJzdy1yZXNpemUiLCAidGFibGUiLAorICAgICJ0YWJsZS1jYXB0aW9uIiwgInRhYmxl
LWNlbGwiLCAidGFibGUtY29sdW1uIiwgInRhYmxlLWNvbHVtbi1ncm91cCIsCisgICAgInRhYmxl
LWZvb3Rlci1ncm91cCIsICJ0YWJsZS1oZWFkZXItZ3JvdXAiLCAidGFibGUtcm93IiwgInRhYmxl
LXJvdy1ncm91cCIsCisgICAgInRlbHVndSIsICJ0ZXh0IiwgInRleHQtYm90dG9tIiwgInRleHQt
dG9wIiwgInRleHRhcmVhIiwgInRleHRmaWVsZCIsICJ0aGFpIiwKKyAgICAidGhpY2siLCAidGhp
biIsICJ0aHJlZWRkYXJrc2hhZG93IiwgInRocmVlZGZhY2UiLCAidGhyZWVkaGlnaGxpZ2h0IiwK
KyAgICAidGhyZWVkbGlnaHRzaGFkb3ciLCAidGhyZWVkc2hhZG93IiwgInRpYmV0YW4iLCAidGln
cmUiLCAidGlncmlueWEtZXIiLAorICAgICJ0aWdyaW55YS1lci1hYmVnZWRlIiwgInRpZ3Jpbnlh
LWV0IiwgInRpZ3JpbnlhLWV0LWFiZWdlZGUiLCAidG8iLCAidG9wIiwKKyAgICAidHJhbnNwYXJl
bnQiLCAidWx0cmEtY29uZGVuc2VkIiwgInVsdHJhLWV4cGFuZGVkIiwgInVuZGVybGluZSIsICJ1
cCIsCisgICAgInVwcGVyLWFscGhhIiwgInVwcGVyLWFybWVuaWFuIiwgInVwcGVyLWdyZWVrIiwg
InVwcGVyLWhleGFkZWNpbWFsIiwKKyAgICAidXBwZXItbGF0aW4iLCAidXBwZXItbm9yd2VnaWFu
IiwgInVwcGVyLXJvbWFuIiwgInVwcGVyY2FzZSIsICJ1cmR1IiwgInVybCIsCisgICAgInZlcnRp
Y2FsIiwgInZlcnRpY2FsLXRleHQiLCAidmlzaWJsZSIsICJ2aXNpYmxlRmlsbCIsICJ2aXNpYmxl
UGFpbnRlZCIsCisgICAgInZpc2libGVTdHJva2UiLCAidmlzdWFsIiwgInctcmVzaXplIiwgIndh
aXQiLCAid2F2ZSIsICJ3aGl0ZSIsICJ3aWRlciIsCisgICAgIndpbmRvdyIsICJ3aW5kb3dmcmFt
ZSIsICJ3aW5kb3d0ZXh0IiwgIngtbGFyZ2UiLCAieC1zbWFsbCIsICJ4b3IiLAorICAgICJ4eC1s
YXJnZSIsICJ4eC1zbWFsbCIsICJ5ZWxsb3ciCisgIF0pOwogCiAgIGZ1bmN0aW9uIGtleVNldChh
cnJheSkgeyB2YXIga2V5cyA9IHt9OyBmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsg
KytpKSBrZXlzW2FycmF5W2ldXSA9IHRydWU7IHJldHVybiBrZXlzOyB9CiAgIGZ1bmN0aW9uIHJl
dChzdHlsZSwgdHApIHt0eXBlID0gdHA7IHJldHVybiBzdHlsZTt9CiAKICAgZnVuY3Rpb24gdG9r
ZW5CYXNlKHN0cmVhbSwgc3RhdGUpIHsKICAgICB2YXIgY2ggPSBzdHJlYW0ubmV4dCgpOwotICAg
IGlmIChjaCA9PSAiQCIpIHtzdHJlYW0uZWF0V2hpbGUoL1tcd1xcXC1dLyk7IHJldHVybiByZXQo
Im1ldGEiLCBzdHJlYW0uY3VycmVudCgpKTt9CisgICAgaWYgKGNoID09ICJAIikge3N0cmVhbS5l
YXRXaGlsZSgvW1x3XFxcLV0vKTsgcmV0dXJuIHJldCgiZGVmIiwgc3RyZWFtLmN1cnJlbnQoKSk7
fQogICAgIGVsc2UgaWYgKGNoID09ICIvIiAmJiBzdHJlYW0uZWF0KCIqIikpIHsKICAgICAgIHN0
YXRlLnRva2VuaXplID0gdG9rZW5DQ29tbWVudDsKICAgICAgIHJldHVybiB0b2tlbkNDb21tZW50
KHN0cmVhbSwgc3RhdGUpOwpAQCAtODEsMTUgKzIxNywzNCBAQCBDb2RlTWlycm9yLmRlZmluZU1v
ZGUoImNzcyIsIGZ1bmN0aW9uKGNvbmZpZykgewogICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bXHcu
JV0vKTsKICAgICAgIHJldHVybiByZXQoIm51bWJlciIsICJ1bml0Iik7CiAgICAgfQotICAgIGVs
c2UgaWYgKC9bLC4rPipcL10vLnRlc3QoY2gpKSB7CisgICAgZWxzZSBpZiAoY2ggPT09ICItIikg
eworICAgICAgaWYgKC9cZC8udGVzdChzdHJlYW0ucGVlaygpKSkgeworICAgICAgICBzdHJlYW0u
ZWF0V2hpbGUoL1tcdy4lXS8pOworICAgICAgICByZXR1cm4gcmV0KCJudW1iZXIiLCAidW5pdCIp
OworICAgICAgfSBlbHNlIGlmIChzdHJlYW0ubWF0Y2goL15bXi1dKy0vKSkgeworICAgICAgICBy
ZXR1cm4gcmV0KCJtZXRhIiwgIm1ldGEiKTsKKyAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAo
L1ssKz4qXC9dLy50ZXN0KGNoKSkgewogICAgICAgcmV0dXJuIHJldChudWxsLCAic2VsZWN0LW9w
Iik7CiAgICAgfQotICAgIGVsc2UgaWYgKC9bO3t9OlxbXF1dLy50ZXN0KGNoKSkgeworICAgIGVs
c2UgaWYgKGNoID09ICIuIiAmJiBzdHJlYW0ubWF0Y2goL14tP1tfYS16XVtfYS16MC05LV0qL2kp
KSB7CisgICAgICByZXR1cm4gcmV0KCJxdWFsaWZpZXIiLCAicXVhbGlmaWVyIik7CisgICAgfQor
ICAgIGVsc2UgaWYgKGNoID09ICI6IikgeworICAgICAgcmV0dXJuIHJldCgib3BlcmF0b3IiLCBj
aCk7CisgICAgfQorICAgIGVsc2UgaWYgKC9bO3t9XFtcXVwoXCldLy50ZXN0KGNoKSkgewogICAg
ICAgcmV0dXJuIHJldChudWxsLCBjaCk7CiAgICAgfQorICAgIGVsc2UgaWYgKGNoID09ICJ1IiAm
JiBzdHJlYW0ubWF0Y2goInJsKCIpKSB7CisgICAgICBzdHJlYW0uYmFja1VwKDEpOworICAgICAg
c3RhdGUudG9rZW5pemUgPSB0b2tlblBhcmVudGhlc2l6ZWQ7CisgICAgICByZXR1cm4gcmV0KCJw
cm9wZXJ0eSIsICJ2YXJpYWJsZSIpOworICAgIH0KICAgICBlbHNlIHsKICAgICAgIHN0cmVhbS5l
YXRXaGlsZSgvW1x3XFxcLV0vKTsKLSAgICAgIHJldHVybiByZXQoInZhcmlhYmxlIiwgInZhcmlh
YmxlIik7CisgICAgICByZXR1cm4gcmV0KCJwcm9wZXJ0eSIsICJ2YXJpYWJsZSIpOwogICAgIH0K
ICAgfQogCkBAIC0xMTcsNyArMjcyLDcgQEAgQ29kZU1pcnJvci5kZWZpbmVNb2RlKCJjc3MiLCBm
dW5jdGlvbihjb25maWcpIHsKICAgICByZXR1cm4gcmV0KCJjb21tZW50IiwgImNvbW1lbnQiKTsK
ICAgfQogCi0gIGZ1bmN0aW9uIHRva2VuU3RyaW5nKHF1b3RlKSB7CisgIGZ1bmN0aW9uIHRva2Vu
U3RyaW5nKHF1b3RlLCBub25JbmNsdXNpdmUpIHsKICAgICByZXR1cm4gZnVuY3Rpb24oc3RyZWFt
LCBzdGF0ZSkgewogICAgICAgdmFyIGVzY2FwZWQgPSBmYWxzZSwgY2g7CiAgICAgICB3aGlsZSAo
KGNoID0gc3RyZWFtLm5leHQoKSkgIT0gbnVsbCkgewpAQCAtMTI1LDExICsyODAsMjMgQEAgQ29k
ZU1pcnJvci5kZWZpbmVNb2RlKCJjc3MiLCBmdW5jdGlvbihjb25maWcpIHsKICAgICAgICAgICBi
cmVhazsKICAgICAgICAgZXNjYXBlZCA9ICFlc2NhcGVkICYmIGNoID09ICJcXCI7CiAgICAgICB9
Ci0gICAgICBpZiAoIWVzY2FwZWQpIHN0YXRlLnRva2VuaXplID0gdG9rZW5CYXNlOworICAgICAg
aWYgKCFlc2NhcGVkKSB7CisgICAgICAgIGlmIChub25JbmNsdXNpdmUpIHN0cmVhbS5iYWNrVXAo
MSk7CisgICAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5CYXNlOworICAgICAgfQogICAgICAg
cmV0dXJuIHJldCgic3RyaW5nIiwgInN0cmluZyIpOwogICAgIH07CiAgIH0KIAorICBmdW5jdGlv
biB0b2tlblBhcmVudGhlc2l6ZWQoc3RyZWFtLCBzdGF0ZSkgeworICAgIHN0cmVhbS5uZXh0KCk7
IC8vIE11c3QgYmUgJygnCisgICAgaWYgKCFzdHJlYW0ubWF0Y2goL1xzKltcIlwnXS8sIGZhbHNl
KSkKKyAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5TdHJpbmcoIikiLCB0cnVlKTsKKyAgICBl
bHNlCisgICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuQmFzZTsKKyAgICByZXR1cm4gcmV0KG51
bGwsICIoIik7CisgIH0KKwogICByZXR1cm4gewogICAgIHN0YXJ0U3RhdGU6IGZ1bmN0aW9uKGJh
c2UpIHsKICAgICAgIHJldHVybiB7dG9rZW5pemU6IHRva2VuQmFzZSwKQEAgLTEzOCwzMiArMzA1
LDE1NiBAQCBDb2RlTWlycm9yLmRlZmluZU1vZGUoImNzcyIsIGZ1bmN0aW9uKGNvbmZpZykgewog
ICAgIH0sCiAKICAgICB0b2tlbjogZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkgewotICAgICAgaWYg
KHN0cmVhbS5lYXRTcGFjZSgpKSByZXR1cm4gbnVsbDsKKyAgICAgIAorICAgICAgLy8gVXNlIHRo
ZXNlIHRlcm1zIHdoZW4gYXBwbGljYWJsZSAoc2VlIGh0dHA6Ly93d3cueGFudGhpci5jb20vYmxv
Zy9iNEU1MCkKKyAgICAgIC8vIAorICAgICAgLy8gcnVsZSoqIG9yICoqcnVsZXNldDoKKyAgICAg
IC8vIEEgc2VsZWN0b3IgKyBicmFjZXMgY29tYm8sIG9yIGFuIGF0LXJ1bGUuCisgICAgICAvLyAK
KyAgICAgIC8vIGRlY2xhcmF0aW9uIGJsb2NrOgorICAgICAgLy8gQSBzZXF1ZW5jZSBvZiBkZWNs
YXJhdGlvbnMuCisgICAgICAvLyAKKyAgICAgIC8vIGRlY2xhcmF0aW9uOgorICAgICAgLy8gQSBw
cm9wZXJ0eSArIGNvbG9uICsgdmFsdWUgY29tYm8uCisgICAgICAvLyAKKyAgICAgIC8vIHByb3Bl
cnR5IHZhbHVlOgorICAgICAgLy8gVGhlIGVudGlyZSB2YWx1ZSBvZiBhIHByb3BlcnR5LgorICAg
ICAgLy8gCisgICAgICAvLyBjb21wb25lbnQgdmFsdWU6CisgICAgICAvLyBBIHNpbmdsZSBwaWVj
ZSBvZiBhIHByb3BlcnR5IHZhbHVlLiBMaWtlIHRoZSA1cHggaW4KKyAgICAgIC8vIHRleHQtc2hh
ZG93OiAwIDAgNXB4IGJsdWU7LiBDYW4gYWxzbyByZWZlciB0byB0aGluZ3MgdGhhdCBhcmUKKyAg
ICAgIC8vIG11bHRpcGxlIHRlcm1zLCBsaWtlIHRoZSAxLTQgdGVybXMgdGhhdCBtYWtlIHVwIHRo
ZSBiYWNrZ3JvdW5kLXNpemUKKyAgICAgIC8vIHBvcnRpb24gb2YgdGhlIGJhY2tncm91bmQgc2hv
cnRoYW5kLgorICAgICAgLy8gCisgICAgICAvLyB0ZXJtOgorICAgICAgLy8gVGhlIGJhc2ljIHVu
aXQgb2YgYXV0aG9yLWZhY2luZyBDU1MsIGxpa2UgYSBzaW5nbGUgbnVtYmVyICg1KSwKKyAgICAg
IC8vIGRpbWVuc2lvbiAoNXB4KSwgc3RyaW5nICgiZm9vIiksIG9yIGZ1bmN0aW9uLiBPZmZpY2lh
bGx5IGRlZmluZWQKKyAgICAgIC8vICBieSB0aGUgQ1NTIDIuMSBncmFtbWFyIChsb29rIGZvciB0
aGUgJ3Rlcm0nIHByb2R1Y3Rpb24pCisgICAgICAvLyAKKyAgICAgIC8vIAorICAgICAgLy8gc2lt
cGxlIHNlbGVjdG9yOgorICAgICAgLy8gQSBzaW5nbGUgYXRvbWljIHNlbGVjdG9yLCBsaWtlIGEg
dHlwZSBzZWxlY3RvciwgYW4gYXR0ciBzZWxlY3RvciwgYQorICAgICAgLy8gY2xhc3Mgc2VsZWN0
b3IsIGV0Yy4KKyAgICAgIC8vIAorICAgICAgLy8gY29tcG91bmQgc2VsZWN0b3I6CisgICAgICAv
LyBPbmUgb3IgbW9yZSBzaW1wbGUgc2VsZWN0b3JzIHdpdGhvdXQgYSBjb21iaW5hdG9yLiBkaXYu
ZXhhbXBsZSBpcworICAgICAgLy8gY29tcG91bmQsIGRpdiA+IC5leGFtcGxlIGlzIG5vdC4KKyAg
ICAgIC8vIAorICAgICAgLy8gY29tcGxleCBzZWxlY3RvcjoKKyAgICAgIC8vIE9uZSBvciBtb3Jl
IGNvbXBvdW5kIHNlbGVjdG9ycyBjaGFpbmVkIHdpdGggY29tYmluYXRvcnMuCisgICAgICAvLyAK
KyAgICAgIC8vIGNvbWJpbmF0b3I6CisgICAgICAvLyBUaGUgcGFydHMgb2Ygc2VsZWN0b3JzIHRo
YXQgZXhwcmVzcyByZWxhdGlvbnNoaXBzLiBUaGVyZSBhcmUgZm91cgorICAgICAgLy8gY3VycmVu
dGx5IC0gdGhlIHNwYWNlIChkZXNjZW5kYW50IGNvbWJpbmF0b3IpLCB0aGUgZ3JlYXRlci10aGFu
CisgICAgICAvLyBicmFja2V0IChjaGlsZCBjb21iaW5hdG9yKSwgdGhlIHBsdXMgc2lnbiAobmV4
dCBzaWJsaW5nIGNvbWJpbmF0b3IpLAorICAgICAgLy8gYW5kIHRoZSB0aWxkYSAoZm9sbG93aW5n
IHNpYmxpbmcgY29tYmluYXRvcikuCisgICAgICAvLyAKKyAgICAgIC8vIHNlcXVlbmNlIG9mIHNl
bGVjdG9yczoKKyAgICAgIC8vIE9uZSBvciBtb3JlIG9mIHRoZSBuYW1lZCB0eXBlIG9mIHNlbGVj
dG9yIGNoYWluZWQgd2l0aCBjb21tYXMuCisKKyAgICAgIGlmIChzdGF0ZS50b2tlbml6ZSA9PSB0
b2tlbkJhc2UgJiYgc3RyZWFtLmVhdFNwYWNlKCkpIHJldHVybiBudWxsOwogICAgICAgdmFyIHN0
eWxlID0gc3RhdGUudG9rZW5pemUoc3RyZWFtLCBzdGF0ZSk7CiAKKyAgICAgIC8vIENoYW5naW5n
IHN0eWxlIHJldHVybmVkIGJhc2VkIG9uIGNvbnRleHQKICAgICAgIHZhciBjb250ZXh0ID0gc3Rh
dGUuc3RhY2tbc3RhdGUuc3RhY2subGVuZ3RoLTFdOwotICAgICAgaWYgKHR5cGUgPT0gImhhc2gi
ICYmIGNvbnRleHQgIT0gInJ1bGUiKSBzdHlsZSA9ICJzdHJpbmctMiI7Ci0gICAgICBlbHNlIGlm
IChzdHlsZSA9PSAidmFyaWFibGUiKSB7Ci0gICAgICAgIGlmIChjb250ZXh0ID09ICJydWxlIikg
c3R5bGUgPSBrZXl3b3Jkc1tzdHJlYW0uY3VycmVudCgpXSA/ICJrZXl3b3JkIiA6ICJudW1iZXIi
OwotICAgICAgICBlbHNlIGlmICghY29udGV4dCB8fCBjb250ZXh0ID09ICJAbWVkaWF7Iikgc3R5
bGUgPSAidGFnIjsKKyAgICAgIGlmIChzdHlsZSA9PSAicHJvcGVydHkiKSB7CisgICAgICAgIGlm
IChjb250ZXh0ID09ICJwcm9wZXJ0eVZhbHVlIil7CisgICAgICAgICAgaWYgKHZhbHVlS2V5d29y
ZHNbc3RyZWFtLmN1cnJlbnQoKV0pIHsKKyAgICAgICAgICAgIHN0eWxlID0gInN0cmluZy0yIjsK
KyAgICAgICAgICB9IGVsc2UgaWYgKGNvbG9yS2V5d29yZHNbc3RyZWFtLmN1cnJlbnQoKV0pIHsK
KyAgICAgICAgICAgIHN0eWxlID0gImtleXdvcmQiOworICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICBzdHlsZSA9ICJ2YXJpYWJsZS0yIjsKKyAgICAgICAgICB9CisgICAgICAgIH0gZWxz
ZSBpZiAoY29udGV4dCA9PSAicnVsZSIpIHsKKyAgICAgICAgICBpZiAoIXByb3BlcnR5S2V5d29y
ZHNbc3RyZWFtLmN1cnJlbnQoKV0pIHsKKyAgICAgICAgICAgIHN0eWxlICs9ICIgZXJyb3IiOwor
ICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmICghY29udGV4dCB8fCBjb250ZXh0ID09ICJA
bWVkaWF7IikgeworICAgICAgICAgIHN0eWxlID0gInRhZyI7CisgICAgICAgIH0gZWxzZSBpZiAo
Y29udGV4dCA9PSAiQG1lZGlhIikgeworICAgICAgICAgIGlmIChhdE1lZGlhVHlwZXNbc3RyZWFt
LmN1cnJlbnQoKV0pIHsKKyAgICAgICAgICAgIHN0eWxlID0gImF0dHJpYnV0ZSI7IC8vIEtub3du
IGF0dHJpYnV0ZQorICAgICAgICAgIH0gZWxzZSBpZiAoL14ob25seXxub3QpJC9pLnRlc3Qoc3Ry
ZWFtLmN1cnJlbnQoKSkpIHsKKyAgICAgICAgICAgIHN0eWxlID0gImtleXdvcmQiOworICAgICAg
ICAgIH0gZWxzZSBpZiAoc3RyZWFtLmN1cnJlbnQoKS50b0xvd2VyQ2FzZSgpID09ICJhbmQiKSB7
CisgICAgICAgICAgICBzdHlsZSA9ICJlcnJvciI7IC8vICJhbmQiIGlzIG9ubHkgYWxsb3dlZCBp
biBAbWVkaWFUeXBlCisgICAgICAgICAgfSBlbHNlIGlmIChhdE1lZGlhRmVhdHVyZXNbc3RyZWFt
LmN1cnJlbnQoKV0pIHsKKyAgICAgICAgICAgIHN0eWxlID0gImVycm9yIjsgLy8gS25vd24gcHJv
cGVydHksIHNob3VsZCBiZSBpbiBAbWVkaWFUeXBlKAorICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAvLyBVbmtub3duLCBleHBlY3Rpbmcga2V5d29yZCBvciBhdHRyaWJ1dGUsIGFzc3Vt
aW5nIGF0dHJpYnV0ZQorICAgICAgICAgICAgc3R5bGUgPSAiYXR0cmlidXRlIGVycm9yIjsKKyAg
ICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoY29udGV4dCA9PSAiQG1lZGlhVHlwZSIpIHsK
KyAgICAgICAgICBpZiAoYXRNZWRpYVR5cGVzW3N0cmVhbS5jdXJyZW50KCldKSB7CisgICAgICAg
ICAgICBzdHlsZSA9ICJhdHRyaWJ1dGUiOworICAgICAgICAgIH0gZWxzZSBpZiAoc3RyZWFtLmN1
cnJlbnQoKS50b0xvd2VyQ2FzZSgpID09ICJhbmQiKSB7CisgICAgICAgICAgICBzdHlsZSA9ICJv
cGVyYXRvciI7CisgICAgICAgICAgfSBlbHNlIGlmICgvXihvbmx5fG5vdCkkL2kudGVzdChzdHJl
YW0uY3VycmVudCgpKSkgeworICAgICAgICAgICAgc3R5bGUgPSAiZXJyb3IiOyAvLyBPbmx5IGFs
bG93ZWQgaW4gQG1lZGlhCisgICAgICAgICAgfSBlbHNlIGlmIChhdE1lZGlhRmVhdHVyZXNbc3Ry
ZWFtLmN1cnJlbnQoKV0pIHsKKyAgICAgICAgICAgIHN0eWxlID0gImVycm9yIjsgLy8gS25vd24g
cHJvcGVydHksIHNob3VsZCBiZSBpbiBwYXJlbnRoZXNlcworICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAvLyBVbmtub3duIGF0dHJpYnV0ZSBvciBwcm9wZXJ0eSwgYnV0IGV4cGVjdGlu
ZyBwcm9wZXJ0eSAocHJlY2VkZWQKKyAgICAgICAgICAgIC8vIGJ5ICJhbmQiKS4gU2hvdWxkIGJl
IGluIHBhcmVudGhlc2VzCisgICAgICAgICAgICBzdHlsZSA9ICJlcnJvciI7CisgICAgICAgICAg
fQorICAgICAgICB9IGVsc2UgaWYgKGNvbnRleHQgPT0gIkBtZWRpYVR5cGUoIikgeworICAgICAg
ICAgIGlmIChwcm9wZXJ0eUtleXdvcmRzW3N0cmVhbS5jdXJyZW50KCldKSB7CisgICAgICAgICAg
ICAvLyBkbyBub3RoaW5nLCByZW1haW5zICJwcm9wZXJ0eSIKKyAgICAgICAgICB9IGVsc2UgaWYg
KGF0TWVkaWFUeXBlc1tzdHJlYW0uY3VycmVudCgpXSkgeworICAgICAgICAgICAgc3R5bGUgPSAi
ZXJyb3IiOyAvLyBLbm93biBwcm9wZXJ0eSwgc2hvdWxkIGJlIGluIHBhcmVudGhlc2VzCisgICAg
ICAgICAgfSBlbHNlIGlmIChzdHJlYW0uY3VycmVudCgpLnRvTG93ZXJDYXNlKCkgPT0gImFuZCIp
IHsKKyAgICAgICAgICAgIHN0eWxlID0gIm9wZXJhdG9yIjsKKyAgICAgICAgICB9IGVsc2UgaWYg
KC9eKG9ubHl8bm90KSQvaS50ZXN0KHN0cmVhbS5jdXJyZW50KCkpKSB7CisgICAgICAgICAgICBz
dHlsZSA9ICJlcnJvciI7IC8vIE9ubHkgYWxsb3dlZCBpbiBAbWVkaWEKKyAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgc3R5bGUgKz0gIiBlcnJvciI7CisgICAgICAgICAgfQorICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgIHN0eWxlID0gImVycm9yIjsKKyAgICAgICAgfQorICAgICAg
fSBlbHNlIGlmIChzdHlsZSA9PSAiYXRvbSIpIHsKKyAgICAgICAgaWYoIWNvbnRleHQgfHwgY29u
dGV4dCA9PSAiQG1lZGlheyIpIHsKKyAgICAgICAgICBzdHlsZSA9ICJidWlsdGluIjsKKyAgICAg
ICAgfSBlbHNlIGlmIChjb250ZXh0ID09ICJwcm9wZXJ0eVZhbHVlIikgeworICAgICAgICAgIGlm
ICghL14jKFswLTlhLWZBLWZdezN9fFswLTlhLWZBLWZdezZ9KSQvLnRlc3Qoc3RyZWFtLmN1cnJl
bnQoKSkpIHsKKyAgICAgICAgICAgIHN0eWxlICs9ICIgZXJyb3IiOworICAgICAgICAgIH0KKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBzdHlsZSA9ICJlcnJvciI7CisgICAgICAgIH0KKyAg
ICAgIH0gZWxzZSBpZiAoY29udGV4dCA9PSAiQG1lZGlhIiAmJiB0eXBlID09ICJ7IikgeworICAg
ICAgICBzdHlsZSA9ICJlcnJvciI7CiAgICAgICB9CiAKLSAgICAgIGlmIChjb250ZXh0ID09ICJy
dWxlIiAmJiAvXltce1x9O10kLy50ZXN0KHR5cGUpKQotICAgICAgICBzdGF0ZS5zdGFjay5wb3Ao
KTsKKyAgICAgIC8vIFB1c2gvcG9wIGNvbnRleHQgc3RhY2sKICAgICAgIGlmICh0eXBlID09ICJ7
IikgewotICAgICAgICBpZiAoY29udGV4dCA9PSAiQG1lZGlhIikgc3RhdGUuc3RhY2tbc3RhdGUu
c3RhY2subGVuZ3RoLTFdID0gIkBtZWRpYXsiOwotICAgICAgICBlbHNlIHN0YXRlLnN0YWNrLnB1
c2goInsiKTsKKyAgICAgICAgaWYgKGNvbnRleHQgPT0gIkBtZWRpYSIgfHwgY29udGV4dCA9PSAi
QG1lZGlhVHlwZSIpIHsKKyAgICAgICAgICBzdGF0ZS5zdGFjay5wb3AoKTsKKyAgICAgICAgICBz
dGF0ZS5zdGFja1tzdGF0ZS5zdGFjay5sZW5ndGgtMV0gPSAiQG1lZGlheyI7CisgICAgICAgIH0K
KyAgICAgICAgZWxzZSBzdGF0ZS5zdGFjay5wdXNoKCJydWxlIik7CisgICAgICB9CisgICAgICBl
bHNlIGlmICh0eXBlID09ICJ9IikgeworICAgICAgICBzdGF0ZS5zdGFjay5wb3AoKTsKKyAgICAg
ICAgaWYgKGNvbnRleHQgPT0gInByb3BlcnR5VmFsdWUiKSBzdGF0ZS5zdGFjay5wb3AoKTsKICAg
ICAgIH0KLSAgICAgIGVsc2UgaWYgKHR5cGUgPT0gIn0iKSBzdGF0ZS5zdGFjay5wb3AoKTsKICAg
ICAgIGVsc2UgaWYgKHR5cGUgPT0gIkBtZWRpYSIpIHN0YXRlLnN0YWNrLnB1c2goIkBtZWRpYSIp
OwotICAgICAgZWxzZSBpZiAoY29udGV4dCA9PSAieyIgJiYgdHlwZSAhPSAiY29tbWVudCIpIHN0
YXRlLnN0YWNrLnB1c2goInJ1bGUiKTsKKyAgICAgIGVsc2UgaWYgKGNvbnRleHQgPT0gIkBtZWRp
YSIgJiYgL1xiKGtleXdvcmR8YXR0cmlidXRlKVxiLy50ZXN0KHN0eWxlKSkKKyAgICAgICAgc3Rh
dGUuc3RhY2sucHVzaCgiQG1lZGlhVHlwZSIpOworICAgICAgZWxzZSBpZiAoY29udGV4dCA9PSAi
QG1lZGlhVHlwZSIgJiYgc3RyZWFtLmN1cnJlbnQoKSA9PSAiLCIpIHN0YXRlLnN0YWNrLnBvcCgp
OworICAgICAgZWxzZSBpZiAoY29udGV4dCA9PSAiQG1lZGlhVHlwZSIgJiYgdHlwZSA9PSAiKCIp
IHN0YXRlLnN0YWNrLnB1c2goIkBtZWRpYVR5cGUoIik7CisgICAgICBlbHNlIGlmIChjb250ZXh0
ID09ICJAbWVkaWFUeXBlKCIgJiYgdHlwZSA9PSAiKSIpIHN0YXRlLnN0YWNrLnBvcCgpOworICAg
ICAgZWxzZSBpZiAoY29udGV4dCA9PSAicnVsZSIgJiYgdHlwZSA9PSAiOiIpIHN0YXRlLnN0YWNr
LnB1c2goInByb3BlcnR5VmFsdWUiKTsKKyAgICAgIGVsc2UgaWYgKGNvbnRleHQgPT0gInByb3Bl
cnR5VmFsdWUiICYmIHR5cGUgPT0gIjsiKSBzdGF0ZS5zdGFjay5wb3AoKTsKICAgICAgIHJldHVy
biBzdHlsZTsKICAgICB9LAogCiAgICAgaW5kZW50OiBmdW5jdGlvbihzdGF0ZSwgdGV4dEFmdGVy
KSB7CiAgICAgICB2YXIgbiA9IHN0YXRlLnN0YWNrLmxlbmd0aDsKICAgICAgIGlmICgvXlx9Ly50
ZXN0KHRleHRBZnRlcikpCi0gICAgICAgIG4gLT0gc3RhdGUuc3RhY2tbc3RhdGUuc3RhY2subGVu
Z3RoLTFdID09ICJydWxlIiA/IDIgOiAxOworICAgICAgICBuIC09IHN0YXRlLnN0YWNrW3N0YXRl
LnN0YWNrLmxlbmd0aC0xXSA9PSAicHJvcGVydHlWYWx1ZSIgPyAyIDogMTsKICAgICAgIHJldHVy
biBzdGF0ZS5iYXNlSW5kZW50ICsgbiAqIGluZGVudFVuaXQ7CiAgICAgfSwKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9jbS9odG1sbWl4ZWQuanMgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2NtL2h0bWxtaXhlZC5qcwppbmRleCBj
NDdjYWE3MTczZWVlYTRmOGRlMTc1NDdiMDVhYTcxNTQxZjFlODBkLi5mMmRkMDFkZDkxNGRjZTE5
ZDhlNWQ4YzE2ZDdkMTRhYzljYTQ3NGNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvZnJvbnQtZW5kL2NtL2h0bWxtaXhlZC5qcworKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvZnJvbnQtZW5kL2NtL2h0bWxtaXhlZC5qcwpAQCAtMSwzNSArMSwzNiBAQAotQ29kZU1p
cnJvci5kZWZpbmVNb2RlKCJodG1sbWl4ZWQiLCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNvbmZp
ZykgeworQ29kZU1pcnJvci5kZWZpbmVNb2RlKCJodG1sbWl4ZWQiLCBmdW5jdGlvbihjb25maWcp
IHsKICAgdmFyIGh0bWxNb2RlID0gQ29kZU1pcnJvci5nZXRNb2RlKGNvbmZpZywge25hbWU6ICJ4
bWwiLCBodG1sTW9kZTogdHJ1ZX0pOwogICB2YXIganNNb2RlID0gQ29kZU1pcnJvci5nZXRNb2Rl
KGNvbmZpZywgImphdmFzY3JpcHQiKTsKICAgdmFyIGNzc01vZGUgPSBDb2RlTWlycm9yLmdldE1v
ZGUoY29uZmlnLCAiY3NzIik7CiAKICAgZnVuY3Rpb24gaHRtbChzdHJlYW0sIHN0YXRlKSB7CiAg
ICAgdmFyIHN0eWxlID0gaHRtbE1vZGUudG9rZW4oc3RyZWFtLCBzdGF0ZS5odG1sU3RhdGUpOwot
ICAgIGlmIChzdHlsZSA9PSAidGFnIiAmJiBzdHJlYW0uY3VycmVudCgpID09ICI+IiAmJiBzdGF0
ZS5odG1sU3RhdGUuY29udGV4dCkgeworICAgIGlmICgvKD86Xnxccyl0YWcoPzpcc3wkKS8udGVz
dChzdHlsZSkgJiYgc3RyZWFtLmN1cnJlbnQoKSA9PSAiPiIgJiYgc3RhdGUuaHRtbFN0YXRlLmNv
bnRleHQpIHsKICAgICAgIGlmICgvXnNjcmlwdCQvaS50ZXN0KHN0YXRlLmh0bWxTdGF0ZS5jb250
ZXh0LnRhZ05hbWUpKSB7CiAgICAgICAgIHN0YXRlLnRva2VuID0gamF2YXNjcmlwdDsKICAgICAg
ICAgc3RhdGUubG9jYWxTdGF0ZSA9IGpzTW9kZS5zdGFydFN0YXRlKGh0bWxNb2RlLmluZGVudChz
dGF0ZS5odG1sU3RhdGUsICIiKSk7Ci0gICAgICAgIHN0YXRlLm1vZGUgPSAiamF2YXNjcmlwdCI7
CiAgICAgICB9CiAgICAgICBlbHNlIGlmICgvXnN0eWxlJC9pLnRlc3Qoc3RhdGUuaHRtbFN0YXRl
LmNvbnRleHQudGFnTmFtZSkpIHsKICAgICAgICAgc3RhdGUudG9rZW4gPSBjc3M7CiAgICAgICAg
IHN0YXRlLmxvY2FsU3RhdGUgPSBjc3NNb2RlLnN0YXJ0U3RhdGUoaHRtbE1vZGUuaW5kZW50KHN0
YXRlLmh0bWxTdGF0ZSwgIiIpKTsKLSAgICAgICAgc3RhdGUubW9kZSA9ICJjc3MiOwogICAgICAg
fQogICAgIH0KICAgICByZXR1cm4gc3R5bGU7CiAgIH0KICAgZnVuY3Rpb24gbWF5YmVCYWNrdXAo
c3RyZWFtLCBwYXQsIHN0eWxlKSB7CiAgICAgdmFyIGN1ciA9IHN0cmVhbS5jdXJyZW50KCk7Ci0g
ICAgdmFyIGNsb3NlID0gY3VyLnNlYXJjaChwYXQpOworICAgIHZhciBjbG9zZSA9IGN1ci5zZWFy
Y2gocGF0KSwgbTsKICAgICBpZiAoY2xvc2UgPiAtMSkgc3RyZWFtLmJhY2tVcChjdXIubGVuZ3Ro
IC0gY2xvc2UpOworICAgIGVsc2UgaWYgKG0gPSBjdXIubWF0Y2goLzxcLz8kLykpIHsKKyAgICAg
IHN0cmVhbS5iYWNrVXAoY3VyLmxlbmd0aCk7CisgICAgICBpZiAoIXN0cmVhbS5tYXRjaChwYXQs
IGZhbHNlKSkgc3RyZWFtLm1hdGNoKGN1clswXSk7CisgICAgfQogICAgIHJldHVybiBzdHlsZTsK
ICAgfQogICBmdW5jdGlvbiBqYXZhc2NyaXB0KHN0cmVhbSwgc3RhdGUpIHsKICAgICBpZiAoc3Ry
ZWFtLm1hdGNoKC9ePFwvXHMqc2NyaXB0XHMqPi9pLCBmYWxzZSkpIHsKICAgICAgIHN0YXRlLnRv
a2VuID0gaHRtbDsKICAgICAgIHN0YXRlLmxvY2FsU3RhdGUgPSBudWxsOwotICAgICAgc3RhdGUu
bW9kZSA9ICJodG1sIjsKICAgICAgIHJldHVybiBodG1sKHN0cmVhbSwgc3RhdGUpOwogICAgIH0K
ICAgICByZXR1cm4gbWF5YmVCYWNrdXAoc3RyZWFtLCAvPFwvXHMqc2NyaXB0XHMqPi8sCkBAIC0z
OSw3ICs0MCw2IEBAIENvZGVNaXJyb3IuZGVmaW5lTW9kZSgiaHRtbG1peGVkIiwgZnVuY3Rpb24o
Y29uZmlnLCBwYXJzZXJDb25maWcpIHsKICAgICBpZiAoc3RyZWFtLm1hdGNoKC9ePFwvXHMqc3R5
bGVccyo+L2ksIGZhbHNlKSkgewogICAgICAgc3RhdGUudG9rZW4gPSBodG1sOwogICAgICAgc3Rh
dGUubG9jYWxTdGF0ZSA9IG51bGw7Ci0gICAgICBzdGF0ZS5tb2RlID0gImh0bWwiOwogICAgICAg
cmV0dXJuIGh0bWwoc3RyZWFtLCBzdGF0ZSk7CiAgICAgfQogICAgIHJldHVybiBtYXliZUJhY2t1
cChzdHJlYW0sIC88XC9ccypzdHlsZVxzKj4vLApAQCAtNzIsMTMgKzcyLDEyIEBAIENvZGVNaXJy
b3IuZGVmaW5lTW9kZSgiaHRtbG1peGVkIiwgZnVuY3Rpb24oY29uZmlnLCBwYXJzZXJDb25maWcp
IHsKICAgICAgICAgcmV0dXJuIGNzc01vZGUuaW5kZW50KHN0YXRlLmxvY2FsU3RhdGUsIHRleHRB
ZnRlcik7CiAgICAgfSwKIAotICAgIGNvbXBhcmVTdGF0ZXM6IGZ1bmN0aW9uKGEsIGIpIHsKLSAg
ICAgIGlmIChhLm1vZGUgIT0gYi5tb2RlKSByZXR1cm4gZmFsc2U7Ci0gICAgICBpZiAoYS5sb2Nh
bFN0YXRlKSByZXR1cm4gQ29kZU1pcnJvci5QYXNzOwotICAgICAgcmV0dXJuIGh0bWxNb2RlLmNv
bXBhcmVTdGF0ZXMoYS5odG1sU3RhdGUsIGIuaHRtbFN0YXRlKTsKLSAgICB9LAorICAgIGVsZWN0
cmljQ2hhcnM6ICIve306IiwKIAotICAgIGVsZWN0cmljQ2hhcnM6ICIve306IgorICAgIGlubmVy
TW9kZTogZnVuY3Rpb24oc3RhdGUpIHsKKyAgICAgIHZhciBtb2RlID0gc3RhdGUudG9rZW4gPT0g
aHRtbCA/IGh0bWxNb2RlIDogc3RhdGUudG9rZW4gPT0gamF2YXNjcmlwdCA/IGpzTW9kZSA6IGNz
c01vZGU7CisgICAgICByZXR1cm4ge3N0YXRlOiBzdGF0ZS5sb2NhbFN0YXRlIHx8IHN0YXRlLmh0
bWxTdGF0ZSwgbW9kZTogbW9kZX07CisgICAgfQogICB9OwogfSwgInhtbCIsICJqYXZhc2NyaXB0
IiwgImNzcyIpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQt
ZW5kL2NtL2phdmFzY3JpcHQuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L2NtL2phdmFzY3JpcHQuanMKaW5kZXggNmVjZTFiZWZjOWE1MmU3ZDUyNTAwYzExNTJhZWI4MDg3
M2NlNjRkZi4uYjY2ZDIyMzYxN2UxODVjNGExZGY3ZDRjYmFiYWY3MWJiMWZlYzA5YyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9jbS9qYXZhc2NyaXB0Lmpz
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvY20vamF2YXNjcmlwdC5q
cwpAQCAtMSw2ICsxLDkgQEAKKy8vIFRPRE8gYWN0dWFsbHkgcmVjb2duaXplIHN5bnRheCBvZiBU
eXBlU2NyaXB0IGNvbnN0cnVjdHMKKwogQ29kZU1pcnJvci5kZWZpbmVNb2RlKCJqYXZhc2NyaXB0
IiwgZnVuY3Rpb24oY29uZmlnLCBwYXJzZXJDb25maWcpIHsKICAgdmFyIGluZGVudFVuaXQgPSBj
b25maWcuaW5kZW50VW5pdDsKICAgdmFyIGpzb25Nb2RlID0gcGFyc2VyQ29uZmlnLmpzb247Cisg
IHZhciBpc1RTID0gcGFyc2VyQ29uZmlnLnR5cGVzY3JpcHQ7CiAKICAgLy8gVG9rZW5pemVyCiAK
QEAgLTgsNyArMTEsOCBAQCBDb2RlTWlycm9yLmRlZmluZU1vZGUoImphdmFzY3JpcHQiLCBmdW5j
dGlvbihjb25maWcsIHBhcnNlckNvbmZpZykgewogICAgIGZ1bmN0aW9uIGt3KHR5cGUpIHtyZXR1
cm4ge3R5cGU6IHR5cGUsIHN0eWxlOiAia2V5d29yZCJ9O30KICAgICB2YXIgQSA9IGt3KCJrZXl3
b3JkIGEiKSwgQiA9IGt3KCJrZXl3b3JkIGIiKSwgQyA9IGt3KCJrZXl3b3JkIGMiKTsKICAgICB2
YXIgb3BlcmF0b3IgPSBrdygib3BlcmF0b3IiKSwgYXRvbSA9IHt0eXBlOiAiYXRvbSIsIHN0eWxl
OiAiYXRvbSJ9OwotICAgIHJldHVybiB7CisgICAgCisgICAgdmFyIGpzS2V5d29yZHMgPSB7CiAg
ICAgICAiaWYiOiBBLCAid2hpbGUiOiBBLCAid2l0aCI6IEEsICJlbHNlIjogQiwgImRvIjogQiwg
InRyeSI6IEIsICJmaW5hbGx5IjogQiwKICAgICAgICJyZXR1cm4iOiBDLCAiYnJlYWsiOiBDLCAi
Y29udGludWUiOiBDLCAibmV3IjogQywgImRlbGV0ZSI6IEMsICJ0aHJvdyI6IEMsCiAgICAgICAi
dmFyIjoga3coInZhciIpLCAiY29uc3QiOiBrdygidmFyIiksICJsZXQiOiBrdygidmFyIiksCkBA
IC0xNyw2ICsyMSwzNSBAQCBDb2RlTWlycm9yLmRlZmluZU1vZGUoImphdmFzY3JpcHQiLCBmdW5j
dGlvbihjb25maWcsIHBhcnNlckNvbmZpZykgewogICAgICAgImluIjogb3BlcmF0b3IsICJ0eXBl
b2YiOiBvcGVyYXRvciwgImluc3RhbmNlb2YiOiBvcGVyYXRvciwKICAgICAgICJ0cnVlIjogYXRv
bSwgImZhbHNlIjogYXRvbSwgIm51bGwiOiBhdG9tLCAidW5kZWZpbmVkIjogYXRvbSwgIk5hTiI6
IGF0b20sICJJbmZpbml0eSI6IGF0b20KICAgICB9OworCisgICAgLy8gRXh0ZW5kIHRoZSAnbm9y
bWFsJyBrZXl3b3JkcyB3aXRoIHRoZSBUeXBlU2NyaXB0IGxhbmd1YWdlIGV4dGVuc2lvbnMKKyAg
ICBpZiAoaXNUUykgeworICAgICAgdmFyIHR5cGUgPSB7dHlwZTogInZhcmlhYmxlIiwgc3R5bGU6
ICJ2YXJpYWJsZS0zIn07CisgICAgICB2YXIgdHNLZXl3b3JkcyA9IHsKKyAgICAgICAgLy8gb2Jq
ZWN0LWxpa2UgdGhpbmdzCisgICAgICAgICJpbnRlcmZhY2UiOiBrdygiaW50ZXJmYWNlIiksCisg
ICAgICAgICJjbGFzcyI6IGt3KCJjbGFzcyIpLAorICAgICAgICAiZXh0ZW5kcyI6IGt3KCJleHRl
bmRzIiksCisgICAgICAgICJjb25zdHJ1Y3RvciI6IGt3KCJjb25zdHJ1Y3RvciIpLAorCisgICAg
ICAgIC8vIHNjb3BlIG1vZGlmaWVycworICAgICAgICAicHVibGljIjoga3coInB1YmxpYyIpLAor
ICAgICAgICAicHJpdmF0ZSI6IGt3KCJwcml2YXRlIiksCisgICAgICAgICJwcm90ZWN0ZWQiOiBr
dygicHJvdGVjdGVkIiksCisgICAgICAgICJzdGF0aWMiOiBrdygic3RhdGljIiksCisKKyAgICAg
ICAgInN1cGVyIjoga3coInN1cGVyIiksCisKKyAgICAgICAgLy8gdHlwZXMKKyAgICAgICAgInN0
cmluZyI6IHR5cGUsICJudW1iZXIiOiB0eXBlLCAiYm9vbCI6IHR5cGUsICJhbnkiOiB0eXBlCisg
ICAgICB9OworCisgICAgICBmb3IgKHZhciBhdHRyIGluIHRzS2V5d29yZHMpIHsKKyAgICAgICAg
anNLZXl3b3Jkc1thdHRyXSA9IHRzS2V5d29yZHNbYXR0cl07CisgICAgICB9CisgICAgfQorCisg
ICAgcmV0dXJuIGpzS2V5d29yZHM7CiAgIH0oKTsKIAogICB2YXIgaXNPcGVyYXRvckNoYXIgPSAv
WytcLSomJT08PiE/fF0vOwpAQCAtNjYsNyArOTksOCBAQCBDb2RlTWlycm9yLmRlZmluZU1vZGUo
ImphdmFzY3JpcHQiLCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNvbmZpZykgewogICAgICAgICBz
dHJlYW0uc2tpcFRvRW5kKCk7CiAgICAgICAgIHJldHVybiByZXQoImNvbW1lbnQiLCAiY29tbWVu
dCIpOwogICAgICAgfQotICAgICAgZWxzZSBpZiAoc3RhdGUucmVBbGxvd2VkKSB7CisgICAgICBl
bHNlIGlmIChzdGF0ZS5sYXN0VHlwZSA9PSAib3BlcmF0b3IiIHx8IHN0YXRlLmxhc3RUeXBlID09
ICJrZXl3b3JkIGMiIHx8CisgICAgICAgICAgICAgICAvXltcW3t9XCgsOzpdJC8udGVzdChzdGF0
ZS5sYXN0VHlwZSkpIHsKICAgICAgICAgbmV4dFVudGlsVW5lc2NhcGVkKHN0cmVhbSwgIi8iKTsK
ICAgICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bZ2lteV0vKTsgLy8gJ3knIGlzICJzdGlja3kiIG9w
dGlvbiBpbiBNb3ppbGxhCiAgICAgICAgIHJldHVybiByZXQoInJlZ2V4cCIsICJzdHJpbmctMiIp
OwpAQCAtODcsNyArMTIxLDcgQEAgQ29kZU1pcnJvci5kZWZpbmVNb2RlKCJqYXZhc2NyaXB0Iiwg
ZnVuY3Rpb24oY29uZmlnLCBwYXJzZXJDb25maWcpIHsKICAgICBlbHNlIHsKICAgICAgIHN0cmVh
bS5lYXRXaGlsZSgvW1x3XCRfXS8pOwogICAgICAgdmFyIHdvcmQgPSBzdHJlYW0uY3VycmVudCgp
LCBrbm93biA9IGtleXdvcmRzLnByb3BlcnR5SXNFbnVtZXJhYmxlKHdvcmQpICYmIGtleXdvcmRz
W3dvcmRdOwotICAgICAgcmV0dXJuIChrbm93biAmJiBzdGF0ZS5rd0FsbG93ZWQpID8gcmV0KGtu
b3duLnR5cGUsIGtub3duLnN0eWxlLCB3b3JkKSA6CisgICAgICByZXR1cm4gKGtub3duICYmIHN0
YXRlLmxhc3RUeXBlICE9ICIuIikgPyByZXQoa25vd24udHlwZSwga25vd24uc3R5bGUsIHdvcmQp
IDoKICAgICAgICAgICAgICAgICAgICAgIHJldCgidmFyaWFibGUiLCAidmFyaWFibGUiLCB3b3Jk
KTsKICAgICB9CiAgIH0KQEAgLTE2MiwxMiArMTk2LDE5IEBAIENvZGVNaXJyb3IuZGVmaW5lTW9k
ZSgiamF2YXNjcmlwdCIsIGZ1bmN0aW9uKGNvbmZpZywgcGFyc2VyQ29uZmlnKSB7CiAgICAgcmV0
dXJuIHRydWU7CiAgIH0KICAgZnVuY3Rpb24gcmVnaXN0ZXIodmFybmFtZSkgeworICAgIGZ1bmN0
aW9uIGluTGlzdChsaXN0KSB7CisgICAgICBmb3IgKHZhciB2ID0gbGlzdDsgdjsgdiA9IHYubmV4
dCkKKyAgICAgICAgaWYgKHYubmFtZSA9PSB2YXJuYW1lKSByZXR1cm4gdHJ1ZTsKKyAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CiAgICAgdmFyIHN0YXRlID0gY3guc3RhdGU7CiAgICAgaWYgKHN0
YXRlLmNvbnRleHQpIHsKICAgICAgIGN4Lm1hcmtlZCA9ICJkZWYiOwotICAgICAgZm9yICh2YXIg
diA9IHN0YXRlLmxvY2FsVmFyczsgdjsgdiA9IHYubmV4dCkKLSAgICAgICAgaWYgKHYubmFtZSA9
PSB2YXJuYW1lKSByZXR1cm47CisgICAgICBpZiAoaW5MaXN0KHN0YXRlLmxvY2FsVmFycykpIHJl
dHVybjsKICAgICAgIHN0YXRlLmxvY2FsVmFycyA9IHtuYW1lOiB2YXJuYW1lLCBuZXh0OiBzdGF0
ZS5sb2NhbFZhcnN9OworICAgIH0gZWxzZSB7CisgICAgICBpZiAoaW5MaXN0KHN0YXRlLmdsb2Jh
bFZhcnMpKSByZXR1cm47CisgICAgICBzdGF0ZS5nbG9iYWxWYXJzID0ge25hbWU6IHZhcm5hbWUs
IG5leHQ6IHN0YXRlLmdsb2JhbFZhcnN9OwogICAgIH0KICAgfQogCkBAIC0xNzUsOCArMjE2LDgg
QEAgQ29kZU1pcnJvci5kZWZpbmVNb2RlKCJqYXZhc2NyaXB0IiwgZnVuY3Rpb24oY29uZmlnLCBw
YXJzZXJDb25maWcpIHsKIAogICB2YXIgZGVmYXVsdFZhcnMgPSB7bmFtZTogInRoaXMiLCBuZXh0
OiB7bmFtZTogImFyZ3VtZW50cyJ9fTsKICAgZnVuY3Rpb24gcHVzaGNvbnRleHQoKSB7Ci0gICAg
aWYgKCFjeC5zdGF0ZS5jb250ZXh0KSBjeC5zdGF0ZS5sb2NhbFZhcnMgPSBkZWZhdWx0VmFyczsK
ICAgICBjeC5zdGF0ZS5jb250ZXh0ID0ge3ByZXY6IGN4LnN0YXRlLmNvbnRleHQsIHZhcnM6IGN4
LnN0YXRlLmxvY2FsVmFyc307CisgICAgY3guc3RhdGUubG9jYWxWYXJzID0gZGVmYXVsdFZhcnM7
CiAgIH0KICAgZnVuY3Rpb24gcG9wY29udGV4dCgpIHsKICAgICBjeC5zdGF0ZS5sb2NhbFZhcnMg
PSBjeC5zdGF0ZS5jb250ZXh0LnZhcnM7CkBAIC0yNzUsMjEgKzMxNiwzMiBAQCBDb2RlTWlycm9y
LmRlZmluZU1vZGUoImphdmFzY3JpcHQiLCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNvbmZpZykg
ewogICAgIGlmICh0eXBlID09ICJ9IikgcmV0dXJuIGNvbnQoKTsKICAgICByZXR1cm4gcGFzcyhz
dGF0ZW1lbnQsIGJsb2NrKTsKICAgfQorICBmdW5jdGlvbiBtYXliZXR5cGUodHlwZSkgeworICAg
IGlmICh0eXBlID09ICI6IikgcmV0dXJuIGNvbnQodHlwZWRlZik7CisgICAgcmV0dXJuIHBhc3Mo
KTsKKyAgfQorICBmdW5jdGlvbiB0eXBlZGVmKHR5cGUpIHsKKyAgICBpZiAodHlwZSA9PSAidmFy
aWFibGUiKXtjeC5tYXJrZWQgPSAidmFyaWFibGUtMyI7IHJldHVybiBjb250KCk7fQorICAgIHJl
dHVybiBwYXNzKCk7CisgIH0KICAgZnVuY3Rpb24gdmFyZGVmMSh0eXBlLCB2YWx1ZSkgewotICAg
IGlmICh0eXBlID09ICJ2YXJpYWJsZSIpe3JlZ2lzdGVyKHZhbHVlKTsgcmV0dXJuIGNvbnQodmFy
ZGVmMik7fQotICAgIHJldHVybiBjb250KCk7CisgICAgaWYgKHR5cGUgPT0gInZhcmlhYmxlIikg
eworICAgICAgcmVnaXN0ZXIodmFsdWUpOworICAgICAgcmV0dXJuIGlzVFMgPyBjb250KG1heWJl
dHlwZSwgdmFyZGVmMikgOiBjb250KHZhcmRlZjIpOworICAgIH0KKyAgICByZXR1cm4gcGFzcygp
OwogICB9CiAgIGZ1bmN0aW9uIHZhcmRlZjIodHlwZSwgdmFsdWUpIHsKICAgICBpZiAodmFsdWUg
PT0gIj0iKSByZXR1cm4gY29udChleHByZXNzaW9uLCB2YXJkZWYyKTsKICAgICBpZiAodHlwZSA9
PSAiLCIpIHJldHVybiBjb250KHZhcmRlZjEpOwogICB9CiAgIGZ1bmN0aW9uIGZvcnNwZWMxKHR5
cGUpIHsKLSAgICBpZiAodHlwZSA9PSAidmFyIikgcmV0dXJuIGNvbnQodmFyZGVmMSwgZm9yc3Bl
YzIpOwotICAgIGlmICh0eXBlID09ICI7IikgcmV0dXJuIHBhc3MoZm9yc3BlYzIpOworICAgIGlm
ICh0eXBlID09ICJ2YXIiKSByZXR1cm4gY29udCh2YXJkZWYxLCBleHBlY3QoIjsiKSwgZm9yc3Bl
YzIpOworICAgIGlmICh0eXBlID09ICI7IikgcmV0dXJuIGNvbnQoZm9yc3BlYzIpOwogICAgIGlm
ICh0eXBlID09ICJ2YXJpYWJsZSIpIHJldHVybiBjb250KGZvcm1heWJlaW4pOwotICAgIHJldHVy
biBwYXNzKGZvcnNwZWMyKTsKKyAgICByZXR1cm4gY29udChmb3JzcGVjMik7CiAgIH0KLSAgZnVu
Y3Rpb24gZm9ybWF5YmVpbih0eXBlLCB2YWx1ZSkgeworICBmdW5jdGlvbiBmb3JtYXliZWluKF90
eXBlLCB2YWx1ZSkgewogICAgIGlmICh2YWx1ZSA9PSAiaW4iKSByZXR1cm4gY29udChleHByZXNz
aW9uKTsKICAgICByZXR1cm4gY29udChtYXliZW9wZXJhdG9yLCBmb3JzcGVjMik7CiAgIH0KQEAg
LTMwNiw3ICszNTgsNyBAQCBDb2RlTWlycm9yLmRlZmluZU1vZGUoImphdmFzY3JpcHQiLCBmdW5j
dGlvbihjb25maWcsIHBhcnNlckNvbmZpZykgewogICAgIGlmICh0eXBlID09ICIoIikgcmV0dXJu
IGNvbnQocHVzaGxleCgiKSIpLCBwdXNoY29udGV4dCwgY29tbWFzZXAoZnVuYXJnLCAiKSIpLCBw
b3BsZXgsIHN0YXRlbWVudCwgcG9wY29udGV4dCk7CiAgIH0KICAgZnVuY3Rpb24gZnVuYXJnKHR5
cGUsIHZhbHVlKSB7Ci0gICAgaWYgKHR5cGUgPT0gInZhcmlhYmxlIikge3JlZ2lzdGVyKHZhbHVl
KTsgcmV0dXJuIGNvbnQoKTt9CisgICAgaWYgKHR5cGUgPT0gInZhcmlhYmxlIikge3JlZ2lzdGVy
KHZhbHVlKTsgcmV0dXJuIGlzVFMgPyBjb250KG1heWJldHlwZSkgOiBjb250KCk7fQogICB9CiAK
ICAgLy8gSW50ZXJmYWNlCkBAIC0zMTUsMTEgKzM2NywxMSBAQCBDb2RlTWlycm9yLmRlZmluZU1v
ZGUoImphdmFzY3JpcHQiLCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNvbmZpZykgewogICAgIHN0
YXJ0U3RhdGU6IGZ1bmN0aW9uKGJhc2Vjb2x1bW4pIHsKICAgICAgIHJldHVybiB7CiAgICAgICAg
IHRva2VuaXplOiBqc1Rva2VuQmFzZSwKLSAgICAgICAgcmVBbGxvd2VkOiB0cnVlLAotICAgICAg
ICBrd0FsbG93ZWQ6IHRydWUsCisgICAgICAgIGxhc3RUeXBlOiBudWxsLAogICAgICAgICBjYzog
W10sCiAgICAgICAgIGxleGljYWw6IG5ldyBKU0xleGljYWwoKGJhc2Vjb2x1bW4gfHwgMCkgLSBp
bmRlbnRVbml0LCAwLCAiYmxvY2siLCBmYWxzZSksCiAgICAgICAgIGxvY2FsVmFyczogcGFyc2Vy
Q29uZmlnLmxvY2FsVmFycywKKyAgICAgICAgZ2xvYmFsVmFyczogcGFyc2VyQ29uZmlnLmdsb2Jh
bFZhcnMsCiAgICAgICAgIGNvbnRleHQ6IHBhcnNlckNvbmZpZy5sb2NhbFZhcnMgJiYge3ZhcnM6
IHBhcnNlckNvbmZpZy5sb2NhbFZhcnN9LAogICAgICAgICBpbmRlbnRlZDogMAogICAgICAgfTsK
QEAgLTMzNCwyOCArMzg2LDM0IEBAIENvZGVNaXJyb3IuZGVmaW5lTW9kZSgiamF2YXNjcmlwdCIs
IGZ1bmN0aW9uKGNvbmZpZywgcGFyc2VyQ29uZmlnKSB7CiAgICAgICBpZiAoc3RyZWFtLmVhdFNw
YWNlKCkpIHJldHVybiBudWxsOwogICAgICAgdmFyIHN0eWxlID0gc3RhdGUudG9rZW5pemUoc3Ry
ZWFtLCBzdGF0ZSk7CiAgICAgICBpZiAodHlwZSA9PSAiY29tbWVudCIpIHJldHVybiBzdHlsZTsK
LSAgICAgIHN0YXRlLnJlQWxsb3dlZCA9ICEhKHR5cGUgPT0gIm9wZXJhdG9yIiB8fCB0eXBlID09
ICJrZXl3b3JkIGMiIHx8IHR5cGUubWF0Y2goL15bXFt7fVwoLDs6XSQvKSk7Ci0gICAgICBzdGF0
ZS5rd0FsbG93ZWQgPSB0eXBlICE9ICcuJzsKKyAgICAgIHN0YXRlLmxhc3RUeXBlID0gdHlwZTsK
ICAgICAgIHJldHVybiBwYXJzZUpTKHN0YXRlLCBzdHlsZSwgdHlwZSwgY29udGVudCwgc3RyZWFt
KTsKICAgICB9LAogCiAgICAgaW5kZW50OiBmdW5jdGlvbihzdGF0ZSwgdGV4dEFmdGVyKSB7Cisg
ICAgICBpZiAoc3RhdGUudG9rZW5pemUgPT0ganNUb2tlbkNvbW1lbnQpIHJldHVybiBDb2RlTWly
cm9yLlBhc3M7CiAgICAgICBpZiAoc3RhdGUudG9rZW5pemUgIT0ganNUb2tlbkJhc2UpIHJldHVy
biAwOwogICAgICAgdmFyIGZpcnN0Q2hhciA9IHRleHRBZnRlciAmJiB0ZXh0QWZ0ZXIuY2hhckF0
KDApLCBsZXhpY2FsID0gc3RhdGUubGV4aWNhbDsKICAgICAgIGlmIChsZXhpY2FsLnR5cGUgPT0g
InN0YXQiICYmIGZpcnN0Q2hhciA9PSAifSIpIGxleGljYWwgPSBsZXhpY2FsLnByZXY7CiAgICAg
ICB2YXIgdHlwZSA9IGxleGljYWwudHlwZSwgY2xvc2luZyA9IGZpcnN0Q2hhciA9PSB0eXBlOwot
ICAgICAgaWYgKHR5cGUgPT0gInZhcmRlZiIpIHJldHVybiBsZXhpY2FsLmluZGVudGVkICsgNDsK
KyAgICAgIGlmICh0eXBlID09ICJ2YXJkZWYiKSByZXR1cm4gbGV4aWNhbC5pbmRlbnRlZCArIChz
dGF0ZS5sYXN0VHlwZSA9PSAib3BlcmF0b3IiIHx8IHN0YXRlLmxhc3RUeXBlID09ICIsIiA/IDQg
OiAwKTsKICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gImZvcm0iICYmIGZpcnN0Q2hhciA9PSAieyIp
IHJldHVybiBsZXhpY2FsLmluZGVudGVkOwotICAgICAgZWxzZSBpZiAodHlwZSA9PSAic3RhdCIg
fHwgdHlwZSA9PSAiZm9ybSIpIHJldHVybiBsZXhpY2FsLmluZGVudGVkICsgaW5kZW50VW5pdDsK
KyAgICAgIGVsc2UgaWYgKHR5cGUgPT0gImZvcm0iKSByZXR1cm4gbGV4aWNhbC5pbmRlbnRlZCAr
IGluZGVudFVuaXQ7CisgICAgICBlbHNlIGlmICh0eXBlID09ICJzdGF0IikKKyAgICAgICAgcmV0
dXJuIGxleGljYWwuaW5kZW50ZWQgKyAoc3RhdGUubGFzdFR5cGUgPT0gIm9wZXJhdG9yIiB8fCBz
dGF0ZS5sYXN0VHlwZSA9PSAiLCIgPyBpbmRlbnRVbml0IDogMCk7CiAgICAgICBlbHNlIGlmIChs
ZXhpY2FsLmluZm8gPT0gInN3aXRjaCIgJiYgIWNsb3NpbmcpCiAgICAgICAgIHJldHVybiBsZXhp
Y2FsLmluZGVudGVkICsgKC9eKD86Y2FzZXxkZWZhdWx0KVxiLy50ZXN0KHRleHRBZnRlcikgPyBp
bmRlbnRVbml0IDogMiAqIGluZGVudFVuaXQpOwogICAgICAgZWxzZSBpZiAobGV4aWNhbC5hbGln
bikgcmV0dXJuIGxleGljYWwuY29sdW1uICsgKGNsb3NpbmcgPyAwIDogMSk7CiAgICAgICBlbHNl
IHJldHVybiBsZXhpY2FsLmluZGVudGVkICsgKGNsb3NpbmcgPyAwIDogaW5kZW50VW5pdCk7CiAg
ICAgfSwKIAotICAgIGVsZWN0cmljQ2hhcnM6ICI6e30iCisgICAgZWxlY3RyaWNDaGFyczogIjp7
fSIsCisKKyAgICBqc29uTW9kZToganNvbk1vZGUKICAgfTsKIH0pOwogCiBDb2RlTWlycm9yLmRl
ZmluZU1JTUUoInRleHQvamF2YXNjcmlwdCIsICJqYXZhc2NyaXB0Iik7CiBDb2RlTWlycm9yLmRl
ZmluZU1JTUUoImFwcGxpY2F0aW9uL2pzb24iLCB7bmFtZTogImphdmFzY3JpcHQiLCBqc29uOiB0
cnVlfSk7CitDb2RlTWlycm9yLmRlZmluZU1JTUUoInRleHQvdHlwZXNjcmlwdCIsIHsgbmFtZTog
ImphdmFzY3JpcHQiLCB0eXBlc2NyaXB0OiB0cnVlIH0pOworQ29kZU1pcnJvci5kZWZpbmVNSU1F
KCJhcHBsaWNhdGlvbi90eXBlc2NyaXB0IiwgeyBuYW1lOiAiamF2YXNjcmlwdCIsIHR5cGVzY3Jp
cHQ6IHRydWUgfSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQt
ZW5kL2NtL3htbC5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvY20veG1s
LmpzCmluZGV4IGNkNjlmNjJmZDViMzRkMDhlYjJmYWRiNDRhNTU3ZTg3ZDY3YmYzOWUuLjdiMTFm
ZDY3NDZjZWY3ZTZiNmQ4MDMwMDE0M2E2OTczMzU3ZGQ0YzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvY20veG1sLmpzCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvY20veG1sLmpzCkBAIC03MCwxMSArNzAsMTIgQEAgQ29kZU1p
cnJvci5kZWZpbmVNb2RlKCJ4bWwiLCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNvbmZpZykgewog
ICAgICAgICByZXR1cm4gIm1ldGEiOwogICAgICAgfQogICAgICAgZWxzZSB7Ci0gICAgICAgIHR5
cGUgPSBzdHJlYW0uZWF0KCIvIikgPyAiY2xvc2VUYWciIDogIm9wZW5UYWciOwotICAgICAgICBz
dHJlYW0uZWF0U3BhY2UoKTsKKyAgICAgICAgdmFyIGlzQ2xvc2UgPSBzdHJlYW0uZWF0KCIvIik7
CiAgICAgICAgIHRhZ05hbWUgPSAiIjsKICAgICAgICAgdmFyIGM7CiAgICAgICAgIHdoaWxlICgo
YyA9IHN0cmVhbS5lYXQoL1teXHNcdTAwYTA9PD5cIlwnXC8/XS8pKSkgdGFnTmFtZSArPSBjOwor
ICAgICAgICBpZiAoIXRhZ05hbWUpIHJldHVybiAiZXJyb3IiOworICAgICAgICB0eXBlID0gaXND
bG9zZSA/ICJjbG9zZVRhZyIgOiAib3BlblRhZyI7CiAgICAgICAgIHN0YXRlLnRva2VuaXplID0g
aW5UYWc7CiAgICAgICAgIHJldHVybiAidGFnIjsKICAgICAgIH0KQEAgLTExNCw3ICsxMTUsNyBA
QCBDb2RlTWlycm9yLmRlZmluZU1vZGUoInhtbCIsIGZ1bmN0aW9uKGNvbmZpZywgcGFyc2VyQ29u
ZmlnKSB7CiAgICAgICByZXR1cm4gc3RhdGUudG9rZW5pemUoc3RyZWFtLCBzdGF0ZSk7CiAgICAg
fQogICAgIGVsc2UgewotICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bXlxzXHUwMGEwPTw+XCJcJ1wv
P10vKTsKKyAgICAgIHN0cmVhbS5lYXRXaGlsZSgvW15cc1x1MDBhMD08PlwiXCddLyk7CiAgICAg
ICByZXR1cm4gIndvcmQiOwogICAgIH0KICAgfQpAQCAtMjEwLDE0ICsyMTEsMTYgQEAgQ29kZU1p
cnJvci5kZWZpbmVNb2RlKCJ4bWwiLCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNvbmZpZykgewog
ICB9CiAgIGZ1bmN0aW9uIGVuZHRhZyhzdGFydE9mTGluZSkgewogICAgIHJldHVybiBmdW5jdGlv
bih0eXBlKSB7CisgICAgICB2YXIgdGFnTmFtZSA9IGN1clN0YXRlLnRhZ05hbWU7CisgICAgICBj
dXJTdGF0ZS50YWdOYW1lID0gbnVsbDsKICAgICAgIGlmICh0eXBlID09ICJzZWxmY2xvc2VUYWci
IHx8Ci0gICAgICAgICAgKHR5cGUgPT0gImVuZFRhZyIgJiYgS2x1ZGdlcy5hdXRvU2VsZkNsb3Nl
cnMuaGFzT3duUHJvcGVydHkoY3VyU3RhdGUudGFnTmFtZS50b0xvd2VyQ2FzZSgpKSkpIHsKLSAg
ICAgICAgbWF5YmVQb3BDb250ZXh0KGN1clN0YXRlLnRhZ05hbWUudG9Mb3dlckNhc2UoKSk7Cisg
ICAgICAgICAgKHR5cGUgPT0gImVuZFRhZyIgJiYgS2x1ZGdlcy5hdXRvU2VsZkNsb3NlcnMuaGFz
T3duUHJvcGVydHkodGFnTmFtZS50b0xvd2VyQ2FzZSgpKSkpIHsKKyAgICAgICAgbWF5YmVQb3BD
b250ZXh0KHRhZ05hbWUudG9Mb3dlckNhc2UoKSk7CiAgICAgICAgIHJldHVybiBjb250KCk7CiAg
ICAgICB9CiAgICAgICBpZiAodHlwZSA9PSAiZW5kVGFnIikgewotICAgICAgICBtYXliZVBvcENv
bnRleHQoY3VyU3RhdGUudGFnTmFtZS50b0xvd2VyQ2FzZSgpKTsKLSAgICAgICAgcHVzaENvbnRl
eHQoY3VyU3RhdGUudGFnTmFtZSwgc3RhcnRPZkxpbmUpOworICAgICAgICBtYXliZVBvcENvbnRl
eHQodGFnTmFtZS50b0xvd2VyQ2FzZSgpKTsKKyAgICAgICAgcHVzaENvbnRleHQodGFnTmFtZSwg
c3RhcnRPZkxpbmUpOwogICAgICAgICByZXR1cm4gY29udCgpOwogICAgICAgfQogICAgICAgcmV0
dXJuIGNvbnQoKTsKQEAgLTI1NSw2ICsyNTgsNyBAQCBDb2RlTWlycm9yLmRlZmluZU1vZGUoInht
bCIsIGZ1bmN0aW9uKGNvbmZpZywgcGFyc2VyQ29uZmlnKSB7CiAgIGZ1bmN0aW9uIGF0dHJpYnV0
ZSh0eXBlKSB7CiAgICAgaWYgKHR5cGUgPT0gImVxdWFscyIpIHJldHVybiBjb250KGF0dHZhbHVl
LCBhdHRyaWJ1dGVzKTsKICAgICBpZiAoIUtsdWRnZXMuYWxsb3dNaXNzaW5nKSBzZXRTdHlsZSA9
ICJlcnJvciI7CisgICAgZWxzZSBpZiAodHlwZSA9PSAid29yZCIpIHNldFN0eWxlID0gImF0dHJp
YnV0ZSI7CiAgICAgcmV0dXJuICh0eXBlID09ICJlbmRUYWciIHx8IHR5cGUgPT0gInNlbGZjbG9z
ZVRhZyIpID8gcGFzcygpIDogY29udCgpOwogICB9CiAgIGZ1bmN0aW9uIGF0dHZhbHVlKHR5cGUp
IHsKQEAgLTMwOCwxNSArMzEyLDkgQEAgQ29kZU1pcnJvci5kZWZpbmVNb2RlKCJ4bWwiLCBmdW5j
dGlvbihjb25maWcsIHBhcnNlckNvbmZpZykgewogICAgICAgZWxzZSByZXR1cm4gMDsKICAgICB9
LAogCi0gICAgY29tcGFyZVN0YXRlczogZnVuY3Rpb24oYSwgYikgewotICAgICAgaWYgKGEuaW5k
ZW50ZWQgIT0gYi5pbmRlbnRlZCB8fCBhLnRva2VuaXplICE9IGIudG9rZW5pemUpIHJldHVybiBm
YWxzZTsKLSAgICAgIGZvciAodmFyIGNhID0gYS5jb250ZXh0LCBjYiA9IGIuY29udGV4dDsgOyBj
YSA9IGNhLnByZXYsIGNiID0gY2IucHJldikgewotICAgICAgICBpZiAoIWNhIHx8ICFjYikgcmV0
dXJuIGNhID09IGNiOwotICAgICAgICBpZiAoY2EudGFnTmFtZSAhPSBjYi50YWdOYW1lIHx8IGNh
LmluZGVudCAhPSBjYi5pbmRlbnQpIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLSAgICB9LAorICAg
IGVsZWN0cmljQ2hhcnM6ICIvIiwKIAotICAgIGVsZWN0cmljQ2hhcnM6ICIvIgorICAgIGNvbmZp
Z3VyYXRpb246IHBhcnNlckNvbmZpZy5odG1sTW9kZSA/ICJodG1sIiA6ICJ4bWwiCiAgIH07CiB9
KTsKIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>