<?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>135098</bug_id>
          <alias>esprima</alias>
          <creation_ts>2014-07-19 15:10:17 -0700</creation_ts>
          <short_desc>Web Inspector: Add esprima to the WebInspector.</short_desc>
          <delta_ts>2014-07-21 19:36:59 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Inspector</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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Saam Barati">saam</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>fpizlo</cc>
    
    <cc>graouts</cc>
    
    <cc>joepeck</cc>
    
    <cc>timothy</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1023485</commentid>
    <comment_count>0</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2014-07-19 15:10:17 -0700</bug_when>
    <thetext>Add the AST library Esprima to the WebInspector so that we can parse JavaScript into an AST.
(More information on Esprima at: http://esprima.org)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1023486</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2014-07-19 15:10:39 -0700</bug_when>
    <thetext>&lt;rdar://problem/17739150&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1023487</commentid>
    <comment_count>2</comment_count>
      <attachid>235176</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2014-07-19 15:19:34 -0700</bug_when>
    <thetext>Created attachment 235176
patch

This patch includes Esprima into the WebInspector and attaches its exported function onto the WebInspector namespace object.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1023716</commentid>
    <comment_count>3</comment_count>
      <attachid>235176</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2014-07-21 10:58:42 -0700</bug_when>
    <thetext>Comment on attachment 235176
patch

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

&gt; Source/WebInspectorUI/ChangeLog:11
&gt; +        * UserInterface/External/esprima.js: Added.

Lets make a subfolder for this, like other External libraries.

    UserInterface/External/Esprima/esprima.js

&gt; Source/WebInspectorUI/UserInterface/External/esprima.js:1
&gt; +/*

We will want to minify this script in production builds. See how this script handles CodeMirror:

    Source/WebInspectorUI/Scripts/copy-user-interface-resources.pl

This could be done in a follow-up.

&gt; Source/WebInspectorUI/UserInterface/External/esprima.js:34
&gt; +WebInspector._esprima = {};

You should mention the edits you&apos;ve made in a comment in this file. I suspect this, and its use below, are the only changes you made.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1023752</commentid>
    <comment_count>4</comment_count>
      <attachid>235238</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2014-07-21 12:22:39 -0700</bug_when>
    <thetext>Created attachment 235238
patch

This patch includes Esprima into the WebInspector and attaches its exported function onto the WebInspector namespace object.

(Will modify the minifying pearl script in another patch).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1023774</commentid>
    <comment_count>5</comment_count>
      <attachid>235238</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2014-07-21 13:37:07 -0700</bug_when>
    <thetext>Comment on attachment 235238
patch

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

&gt; Source/WebInspectorUI/UserInterface/External/Esprima/esprima.js:35
&gt; +// I delted the code that determines the context esprima is loaded in (node.js, the browser, etc.) and replaced it with WebInspector._esprima.

We should not have &quot;I&quot; in a comment. Someone reading this will not know who that refers too, and any one individual does not necessary own a file. This is more of a &quot;we&quot; meaning the project / contributors as a whole.

Something like this would be sufficient:

  // WebKit Modifications:
  //   - replaced code that automatically determines Esprima execution context (node, browser, etc.) with WebInspector._esprima

The idea here is to make it easier for the next person who updates Esprima by documenting the changes we&apos;ve made.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1023800</commentid>
    <comment_count>6</comment_count>
      <attachid>235252</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2014-07-21 16:28:35 -0700</bug_when>
    <thetext>Created attachment 235252
patch

This patch includes Esprima into the WebInspector and attaches its exported function onto the WebInspector namespace object.

(Comment modifications taken into account).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1023856</commentid>
    <comment_count>7</comment_count>
      <attachid>235252</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2014-07-21 19:04:42 -0700</bug_when>
    <thetext>Comment on attachment 235252
patch

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

&gt; Source/WebInspectorUI/ChangeLog:13
&gt; +        (.):

Nit: prepare-ChangeLog left a turd. In the future you can remove these.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1023864</commentid>
    <comment_count>8</comment_count>
      <attachid>235252</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-07-21 19:36:55 -0700</bug_when>
    <thetext>Comment on attachment 235252
patch

Clearing flags on attachment: 235252

Committed r171334: &lt;http://trac.webkit.org/changeset/171334&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1023865</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-07-21 19:36:59 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>235176</attachid>
            <date>2014-07-19 15:19:34 -0700</date>
            <delta_ts>2014-07-21 12:22:39 -0700</delta_ts>
            <desc>patch</desc>
            <filename>inspector-patch.diff</filename>
            <type>text/plain</type>
            <size>126682</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkluc3BlY3RvclVJL0NoYW5nZUxvZwkocmV2aXNpb24gMTcxMjY1KQorKysgU291cmNl
L1dlYkluc3BlY3RvclVJL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3IEBA
CisyMDE0LTA3LTE5ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IFdlYiBJbnNwZWN0b3I6IEFkZCBlc3ByaW1hIHRvIHRoZSBXZWJJbnNwZWN0b3IuCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzUwOTgKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIGluY2x1
ZGVzIEVzcHJpbWEgaW50byB0aGUgV2ViSW5zcGVjdG9yIGFuZCBhdHRhY2hlcyBpdHMKKyAgICAg
ICAgZXhwb3J0ZWQgZnVuY3Rpb24gb250byB0aGUgV2ViSW5zcGVjdG9yIG5hbWVzcGFjZSBvYmpl
Y3QuIAorCisgICAgICAgICogVXNlckludGVyZmFjZS9FeHRlcm5hbC9lc3ByaW1hLmpzOiBBZGRl
ZC4KKyAgICAgICAgKC4pOgorICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5odG1sOgorCiAy
MDE0LTA1LTA4ICBKb25vIFdlbGxzICA8am9ub3dlbGxzQGFwcGxlLmNvbT4KIAogICAgICAgICBX
ZWIgSW5zcGVjdG9yOiBDb25zb2xlIGVycm9yIHdoZW4gbGF1bmNoaW5nIFdlYiBJbnNwZWN0b3Ig
Ik1vZGUgaHRtbG1peGVkIGZhaWxlZCB0byBhZHZhbmNlIHN0cmVhbSIKSW5kZXg6IFNvdXJjZS9X
ZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01haW4uaHRtbAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9NYWluLmh0bWwJKHJldmlzaW9uIDE3MTI1
OSkKKysrIFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01haW4uaHRtbAkod29y
a2luZyBjb3B5KQpAQCAtMTcxLDYgKzE3MSw4IEBACiAgICAgPHNjcmlwdCBzcmM9IkJhc2UvVVJM
VXRpbGl0aWVzLmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHNyYz0iQmFzZS9VdGlsaXRpZXMu
anMiPjwvc2NyaXB0PgogCisgICAgPHNjcmlwdCBzcmM9IkV4dGVybmFsL2VzcHJpbWEuanMiPjwv
c2NyaXB0PgorCiAgICAgPHNjcmlwdCBzcmM9IlByb3RvY29sL0FwcGxpY2F0aW9uQ2FjaGVPYnNl
cnZlci5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCBzcmM9IlByb3RvY29sL0NTU09ic2VydmVy
LmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHNyYz0iUHJvdG9jb2wvQ29uc29sZU9ic2VydmVy
LmpzIj48L3NjcmlwdD4KSW5kZXg6IFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNl
L0V4dGVybmFsL2VzcHJpbWEuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkluc3BlY3RvclVJ
L1VzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvZXNwcmltYS5qcwkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0V4dGVybmFsL2VzcHJpbWEuanMJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwzNzMxIEBACisvKgorICBDb3B5cmlnaHQgKEMpIDIwMTMgQXJp
eWEgSGlkYXlhdCA8YXJpeWEuaGlkYXlhdEBnbWFpbC5jb20+CisgIENvcHlyaWdodCAoQykgMjAx
MyBUaGFkZGVlIFR5bCA8dGhhZGRlZS50eWxAZ21haWwuY29tPgorICBDb3B5cmlnaHQgKEMpIDIw
MTMgTWF0aGlhcyBCeW5lbnMgPG1hdGhpYXNAcWl3aS5iZT4KKyAgQ29weXJpZ2h0IChDKSAyMDEy
IEFyaXlhIEhpZGF5YXQgPGFyaXlhLmhpZGF5YXRAZ21haWwuY29tPgorICBDb3B5cmlnaHQgKEMp
IDIwMTIgTWF0aGlhcyBCeW5lbnMgPG1hdGhpYXNAcWl3aS5iZT4KKyAgQ29weXJpZ2h0IChDKSAy
MDEyIEpvb3N0LVdpbSBCb2VrZXN0ZWlqbiA8am9vc3Qtd2ltQGJvZWtlc3RlaWpuLm5sPgorICBD
b3B5cmlnaHQgKEMpIDIwMTIgS3JpcyBLb3dhbCA8a3Jpcy5rb3dhbEBjaXhhci5jb20+CisgIENv
cHlyaWdodCAoQykgMjAxMiBZdXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+Cisg
IENvcHlyaWdodCAoQykgMjAxMiBBcnBhZCBCb3Jzb3MgPGFycGFkLmJvcnNvc0Bnb29nbGVtYWls
LmNvbT4KKyAgQ29weXJpZ2h0IChDKSAyMDExIEFyaXlhIEhpZGF5YXQgPGFyaXlhLmhpZGF5YXRA
Z21haWwuY29tPgorCisgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKworICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorCisgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFCisgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCA8Q09QWVJJR0hUIEhPTERFUj4gQkUgTElBQkxFIEZPUiBBTlkKKyAgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMKKyAgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqLworCitXZWJJbnNw
ZWN0b3IuX2VzcHJpbWEgPSB7fTsKKyhmdW5jdGlvbiAoZXhwb3J0cykgeworICAgICd1c2Ugc3Ry
aWN0JzsKKworICAgIHZhciBUb2tlbiwKKyAgICAgICAgVG9rZW5OYW1lLAorICAgICAgICBGbkV4
cHJUb2tlbnMsCisgICAgICAgIFN5bnRheCwKKyAgICAgICAgUHJvcGVydHlLaW5kLAorICAgICAg
ICBNZXNzYWdlcywKKyAgICAgICAgUmVnZXgsCisgICAgICAgIFN5bnRheFRyZWVEZWxlZ2F0ZSwK
KyAgICAgICAgc291cmNlLAorICAgICAgICBzdHJpY3QsCisgICAgICAgIGluZGV4LAorICAgICAg
ICBsaW5lTnVtYmVyLAorICAgICAgICBsaW5lU3RhcnQsCisgICAgICAgIGxlbmd0aCwKKyAgICAg
ICAgZGVsZWdhdGUsCisgICAgICAgIGxvb2thaGVhZCwKKyAgICAgICAgc3RhdGUsCisgICAgICAg
IGV4dHJhOworCisgICAgVG9rZW4gPSB7CisgICAgICAgIEJvb2xlYW5MaXRlcmFsOiAxLAorICAg
ICAgICBFT0Y6IDIsCisgICAgICAgIElkZW50aWZpZXI6IDMsCisgICAgICAgIEtleXdvcmQ6IDQs
CisgICAgICAgIE51bGxMaXRlcmFsOiA1LAorICAgICAgICBOdW1lcmljTGl0ZXJhbDogNiwKKyAg
ICAgICAgUHVuY3R1YXRvcjogNywKKyAgICAgICAgU3RyaW5nTGl0ZXJhbDogOCwKKyAgICAgICAg
UmVndWxhckV4cHJlc3Npb246IDkKKyAgICB9OworCisgICAgVG9rZW5OYW1lID0ge307CisgICAg
VG9rZW5OYW1lW1Rva2VuLkJvb2xlYW5MaXRlcmFsXSA9ICdCb29sZWFuJzsKKyAgICBUb2tlbk5h
bWVbVG9rZW4uRU9GXSA9ICc8ZW5kPic7CisgICAgVG9rZW5OYW1lW1Rva2VuLklkZW50aWZpZXJd
ID0gJ0lkZW50aWZpZXInOworICAgIFRva2VuTmFtZVtUb2tlbi5LZXl3b3JkXSA9ICdLZXl3b3Jk
JzsKKyAgICBUb2tlbk5hbWVbVG9rZW4uTnVsbExpdGVyYWxdID0gJ051bGwnOworICAgIFRva2Vu
TmFtZVtUb2tlbi5OdW1lcmljTGl0ZXJhbF0gPSAnTnVtZXJpYyc7CisgICAgVG9rZW5OYW1lW1Rv
a2VuLlB1bmN0dWF0b3JdID0gJ1B1bmN0dWF0b3InOworICAgIFRva2VuTmFtZVtUb2tlbi5TdHJp
bmdMaXRlcmFsXSA9ICdTdHJpbmcnOworICAgIFRva2VuTmFtZVtUb2tlbi5SZWd1bGFyRXhwcmVz
c2lvbl0gPSAnUmVndWxhckV4cHJlc3Npb24nOworCisgICAgLy8gQSBmdW5jdGlvbiBmb2xsb3dp
bmcgb25lIG9mIHRob3NlIHRva2VucyBpcyBhbiBleHByZXNzaW9uLgorICAgIEZuRXhwclRva2Vu
cyA9IFsnKCcsICd7JywgJ1snLCAnaW4nLCAndHlwZW9mJywgJ2luc3RhbmNlb2YnLCAnbmV3JywK
KyAgICAgICAgICAgICAgICAgICAgJ3JldHVybicsICdjYXNlJywgJ2RlbGV0ZScsICd0aHJvdycs
ICd2b2lkJywKKyAgICAgICAgICAgICAgICAgICAgLy8gYXNzaWdubWVudCBvcGVyYXRvcnMKKyAg
ICAgICAgICAgICAgICAgICAgJz0nLCAnKz0nLCAnLT0nLCAnKj0nLCAnLz0nLCAnJT0nLCAnPDw9
JywgJz4+PScsICc+Pj49JywKKyAgICAgICAgICAgICAgICAgICAgJyY9JywgJ3w9JywgJ149Jywg
JywnLAorICAgICAgICAgICAgICAgICAgICAvLyBiaW5hcnkvdW5hcnkgb3BlcmF0b3JzCisgICAg
ICAgICAgICAgICAgICAgICcrJywgJy0nLCAnKicsICcvJywgJyUnLCAnKysnLCAnLS0nLCAnPDwn
LCAnPj4nLCAnPj4+JywgJyYnLAorICAgICAgICAgICAgICAgICAgICAnfCcsICdeJywgJyEnLCAn
ficsICcmJicsICd8fCcsICc/JywgJzonLCAnPT09JywgJz09JywgJz49JywKKyAgICAgICAgICAg
ICAgICAgICAgJzw9JywgJzwnLCAnPicsICchPScsICchPT0nXTsKKworICAgIFN5bnRheCA9IHsK
KyAgICAgICAgQXNzaWdubWVudEV4cHJlc3Npb246ICdBc3NpZ25tZW50RXhwcmVzc2lvbicsCisg
ICAgICAgIEFycmF5RXhwcmVzc2lvbjogJ0FycmF5RXhwcmVzc2lvbicsCisgICAgICAgIEJsb2Nr
U3RhdGVtZW50OiAnQmxvY2tTdGF0ZW1lbnQnLAorICAgICAgICBCaW5hcnlFeHByZXNzaW9uOiAn
QmluYXJ5RXhwcmVzc2lvbicsCisgICAgICAgIEJyZWFrU3RhdGVtZW50OiAnQnJlYWtTdGF0ZW1l
bnQnLAorICAgICAgICBDYWxsRXhwcmVzc2lvbjogJ0NhbGxFeHByZXNzaW9uJywKKyAgICAgICAg
Q2F0Y2hDbGF1c2U6ICdDYXRjaENsYXVzZScsCisgICAgICAgIENvbmRpdGlvbmFsRXhwcmVzc2lv
bjogJ0NvbmRpdGlvbmFsRXhwcmVzc2lvbicsCisgICAgICAgIENvbnRpbnVlU3RhdGVtZW50OiAn
Q29udGludWVTdGF0ZW1lbnQnLAorICAgICAgICBEb1doaWxlU3RhdGVtZW50OiAnRG9XaGlsZVN0
YXRlbWVudCcsCisgICAgICAgIERlYnVnZ2VyU3RhdGVtZW50OiAnRGVidWdnZXJTdGF0ZW1lbnQn
LAorICAgICAgICBFbXB0eVN0YXRlbWVudDogJ0VtcHR5U3RhdGVtZW50JywKKyAgICAgICAgRXhw
cmVzc2lvblN0YXRlbWVudDogJ0V4cHJlc3Npb25TdGF0ZW1lbnQnLAorICAgICAgICBGb3JTdGF0
ZW1lbnQ6ICdGb3JTdGF0ZW1lbnQnLAorICAgICAgICBGb3JJblN0YXRlbWVudDogJ0ZvckluU3Rh
dGVtZW50JywKKyAgICAgICAgRnVuY3Rpb25EZWNsYXJhdGlvbjogJ0Z1bmN0aW9uRGVjbGFyYXRp
b24nLAorICAgICAgICBGdW5jdGlvbkV4cHJlc3Npb246ICdGdW5jdGlvbkV4cHJlc3Npb24nLAor
ICAgICAgICBJZGVudGlmaWVyOiAnSWRlbnRpZmllcicsCisgICAgICAgIElmU3RhdGVtZW50OiAn
SWZTdGF0ZW1lbnQnLAorICAgICAgICBMaXRlcmFsOiAnTGl0ZXJhbCcsCisgICAgICAgIExhYmVs
ZWRTdGF0ZW1lbnQ6ICdMYWJlbGVkU3RhdGVtZW50JywKKyAgICAgICAgTG9naWNhbEV4cHJlc3Np
b246ICdMb2dpY2FsRXhwcmVzc2lvbicsCisgICAgICAgIE1lbWJlckV4cHJlc3Npb246ICdNZW1i
ZXJFeHByZXNzaW9uJywKKyAgICAgICAgTmV3RXhwcmVzc2lvbjogJ05ld0V4cHJlc3Npb24nLAor
ICAgICAgICBPYmplY3RFeHByZXNzaW9uOiAnT2JqZWN0RXhwcmVzc2lvbicsCisgICAgICAgIFBy
b2dyYW06ICdQcm9ncmFtJywKKyAgICAgICAgUHJvcGVydHk6ICdQcm9wZXJ0eScsCisgICAgICAg
IFJldHVyblN0YXRlbWVudDogJ1JldHVyblN0YXRlbWVudCcsCisgICAgICAgIFNlcXVlbmNlRXhw
cmVzc2lvbjogJ1NlcXVlbmNlRXhwcmVzc2lvbicsCisgICAgICAgIFN3aXRjaFN0YXRlbWVudDog
J1N3aXRjaFN0YXRlbWVudCcsCisgICAgICAgIFN3aXRjaENhc2U6ICdTd2l0Y2hDYXNlJywKKyAg
ICAgICAgVGhpc0V4cHJlc3Npb246ICdUaGlzRXhwcmVzc2lvbicsCisgICAgICAgIFRocm93U3Rh
dGVtZW50OiAnVGhyb3dTdGF0ZW1lbnQnLAorICAgICAgICBUcnlTdGF0ZW1lbnQ6ICdUcnlTdGF0
ZW1lbnQnLAorICAgICAgICBVbmFyeUV4cHJlc3Npb246ICdVbmFyeUV4cHJlc3Npb24nLAorICAg
ICAgICBVcGRhdGVFeHByZXNzaW9uOiAnVXBkYXRlRXhwcmVzc2lvbicsCisgICAgICAgIFZhcmlh
YmxlRGVjbGFyYXRpb246ICdWYXJpYWJsZURlY2xhcmF0aW9uJywKKyAgICAgICAgVmFyaWFibGVE
ZWNsYXJhdG9yOiAnVmFyaWFibGVEZWNsYXJhdG9yJywKKyAgICAgICAgV2hpbGVTdGF0ZW1lbnQ6
ICdXaGlsZVN0YXRlbWVudCcsCisgICAgICAgIFdpdGhTdGF0ZW1lbnQ6ICdXaXRoU3RhdGVtZW50
JworICAgIH07CisKKyAgICBQcm9wZXJ0eUtpbmQgPSB7CisgICAgICAgIERhdGE6IDEsCisgICAg
ICAgIEdldDogMiwKKyAgICAgICAgU2V0OiA0CisgICAgfTsKKworICAgIC8vIEVycm9yIG1lc3Nh
Z2VzIHNob3VsZCBiZSBpZGVudGljYWwgdG8gVjguCisgICAgTWVzc2FnZXMgPSB7CisgICAgICAg
IFVuZXhwZWN0ZWRUb2tlbjogICdVbmV4cGVjdGVkIHRva2VuICUwJywKKyAgICAgICAgVW5leHBl
Y3RlZE51bWJlcjogICdVbmV4cGVjdGVkIG51bWJlcicsCisgICAgICAgIFVuZXhwZWN0ZWRTdHJp
bmc6ICAnVW5leHBlY3RlZCBzdHJpbmcnLAorICAgICAgICBVbmV4cGVjdGVkSWRlbnRpZmllcjog
ICdVbmV4cGVjdGVkIGlkZW50aWZpZXInLAorICAgICAgICBVbmV4cGVjdGVkUmVzZXJ2ZWQ6ICAn
VW5leHBlY3RlZCByZXNlcnZlZCB3b3JkJywKKyAgICAgICAgVW5leHBlY3RlZEVPUzogICdVbmV4
cGVjdGVkIGVuZCBvZiBpbnB1dCcsCisgICAgICAgIE5ld2xpbmVBZnRlclRocm93OiAgJ0lsbGVn
YWwgbmV3bGluZSBhZnRlciB0aHJvdycsCisgICAgICAgIEludmFsaWRSZWdFeHA6ICdJbnZhbGlk
IHJlZ3VsYXIgZXhwcmVzc2lvbicsCisgICAgICAgIFVudGVybWluYXRlZFJlZ0V4cDogICdJbnZh
bGlkIHJlZ3VsYXIgZXhwcmVzc2lvbjogbWlzc2luZyAvJywKKyAgICAgICAgSW52YWxpZExIU0lu
QXNzaWdubWVudDogICdJbnZhbGlkIGxlZnQtaGFuZCBzaWRlIGluIGFzc2lnbm1lbnQnLAorICAg
ICAgICBJbnZhbGlkTEhTSW5Gb3JJbjogICdJbnZhbGlkIGxlZnQtaGFuZCBzaWRlIGluIGZvci1p
bicsCisgICAgICAgIE11bHRpcGxlRGVmYXVsdHNJblN3aXRjaDogJ01vcmUgdGhhbiBvbmUgZGVm
YXVsdCBjbGF1c2UgaW4gc3dpdGNoIHN0YXRlbWVudCcsCisgICAgICAgIE5vQ2F0Y2hPckZpbmFs
bHk6ICAnTWlzc2luZyBjYXRjaCBvciBmaW5hbGx5IGFmdGVyIHRyeScsCisgICAgICAgIFVua25v
d25MYWJlbDogJ1VuZGVmaW5lZCBsYWJlbCBcJyUwXCcnLAorICAgICAgICBSZWRlY2xhcmF0aW9u
OiAnJTAgXCclMVwnIGhhcyBhbHJlYWR5IGJlZW4gZGVjbGFyZWQnLAorICAgICAgICBJbGxlZ2Fs
Q29udGludWU6ICdJbGxlZ2FsIGNvbnRpbnVlIHN0YXRlbWVudCcsCisgICAgICAgIElsbGVnYWxC
cmVhazogJ0lsbGVnYWwgYnJlYWsgc3RhdGVtZW50JywKKyAgICAgICAgSWxsZWdhbFJldHVybjog
J0lsbGVnYWwgcmV0dXJuIHN0YXRlbWVudCcsCisgICAgICAgIFN0cmljdE1vZGVXaXRoOiAgJ1N0
cmljdCBtb2RlIGNvZGUgbWF5IG5vdCBpbmNsdWRlIGEgd2l0aCBzdGF0ZW1lbnQnLAorICAgICAg
ICBTdHJpY3RDYXRjaFZhcmlhYmxlOiAgJ0NhdGNoIHZhcmlhYmxlIG1heSBub3QgYmUgZXZhbCBv
ciBhcmd1bWVudHMgaW4gc3RyaWN0IG1vZGUnLAorICAgICAgICBTdHJpY3RWYXJOYW1lOiAgJ1Zh
cmlhYmxlIG5hbWUgbWF5IG5vdCBiZSBldmFsIG9yIGFyZ3VtZW50cyBpbiBzdHJpY3QgbW9kZScs
CisgICAgICAgIFN0cmljdFBhcmFtTmFtZTogICdQYXJhbWV0ZXIgbmFtZSBldmFsIG9yIGFyZ3Vt
ZW50cyBpcyBub3QgYWxsb3dlZCBpbiBzdHJpY3QgbW9kZScsCisgICAgICAgIFN0cmljdFBhcmFt
RHVwZTogJ1N0cmljdCBtb2RlIGZ1bmN0aW9uIG1heSBub3QgaGF2ZSBkdXBsaWNhdGUgcGFyYW1l
dGVyIG5hbWVzJywKKyAgICAgICAgU3RyaWN0RnVuY3Rpb25OYW1lOiAgJ0Z1bmN0aW9uIG5hbWUg
bWF5IG5vdCBiZSBldmFsIG9yIGFyZ3VtZW50cyBpbiBzdHJpY3QgbW9kZScsCisgICAgICAgIFN0
cmljdE9jdGFsTGl0ZXJhbDogICdPY3RhbCBsaXRlcmFscyBhcmUgbm90IGFsbG93ZWQgaW4gc3Ry
aWN0IG1vZGUuJywKKyAgICAgICAgU3RyaWN0RGVsZXRlOiAgJ0RlbGV0ZSBvZiBhbiB1bnF1YWxp
ZmllZCBpZGVudGlmaWVyIGluIHN0cmljdCBtb2RlLicsCisgICAgICAgIFN0cmljdER1cGxpY2F0
ZVByb3BlcnR5OiAgJ0R1cGxpY2F0ZSBkYXRhIHByb3BlcnR5IGluIG9iamVjdCBsaXRlcmFsIG5v
dCBhbGxvd2VkIGluIHN0cmljdCBtb2RlJywKKyAgICAgICAgQWNjZXNzb3JEYXRhUHJvcGVydHk6
ICAnT2JqZWN0IGxpdGVyYWwgbWF5IG5vdCBoYXZlIGRhdGEgYW5kIGFjY2Vzc29yIHByb3BlcnR5
IHdpdGggdGhlIHNhbWUgbmFtZScsCisgICAgICAgIEFjY2Vzc29yR2V0U2V0OiAgJ09iamVjdCBs
aXRlcmFsIG1heSBub3QgaGF2ZSBtdWx0aXBsZSBnZXQvc2V0IGFjY2Vzc29ycyB3aXRoIHRoZSBz
YW1lIG5hbWUnLAorICAgICAgICBTdHJpY3RMSFNBc3NpZ25tZW50OiAgJ0Fzc2lnbm1lbnQgdG8g
ZXZhbCBvciBhcmd1bWVudHMgaXMgbm90IGFsbG93ZWQgaW4gc3RyaWN0IG1vZGUnLAorICAgICAg
ICBTdHJpY3RMSFNQb3N0Zml4OiAgJ1Bvc3RmaXggaW5jcmVtZW50L2RlY3JlbWVudCBtYXkgbm90
IGhhdmUgZXZhbCBvciBhcmd1bWVudHMgb3BlcmFuZCBpbiBzdHJpY3QgbW9kZScsCisgICAgICAg
IFN0cmljdExIU1ByZWZpeDogICdQcmVmaXggaW5jcmVtZW50L2RlY3JlbWVudCBtYXkgbm90IGhh
dmUgZXZhbCBvciBhcmd1bWVudHMgb3BlcmFuZCBpbiBzdHJpY3QgbW9kZScsCisgICAgICAgIFN0
cmljdFJlc2VydmVkV29yZDogICdVc2Ugb2YgZnV0dXJlIHJlc2VydmVkIHdvcmQgaW4gc3RyaWN0
IG1vZGUnCisgICAgfTsKKworICAgIC8vIFNlZSBhbHNvIHRvb2xzL2dlbmVyYXRlLXVuaWNvZGUt
cmVnZXgucHkuCisgICAgUmVnZXggPSB7CisgICAgICAgIE5vbkFzY2lpSWRlbnRpZmllclN0YXJ0
OiBuZXcgUmVnRXhwKCdbXHhBQVx4QjVceEJBXHhDMC1ceEQ2XHhEOC1ceEY2XHhGOC1cdTAyQzFc
dTAyQzYtXHUwMkQxXHUwMkUwLVx1MDJFNFx1MDJFQ1x1MDJFRVx1MDM3MC1cdTAzNzRcdTAzNzZc
dTAzNzdcdTAzN0EtXHUwMzdEXHUwMzg2XHUwMzg4LVx1MDM4QVx1MDM4Q1x1MDM4RS1cdTAzQTFc
dTAzQTMtXHUwM0Y1XHUwM0Y3LVx1MDQ4MVx1MDQ4QS1cdTA1MjdcdTA1MzEtXHUwNTU2XHUwNTU5
XHUwNTYxLVx1MDU4N1x1MDVEMC1cdTA1RUFcdTA1RjAtXHUwNUYyXHUwNjIwLVx1MDY0QVx1MDY2
RVx1MDY2Rlx1MDY3MS1cdTA2RDNcdTA2RDVcdTA2RTVcdTA2RTZcdTA2RUVcdTA2RUZcdTA2RkEt
XHUwNkZDXHUwNkZGXHUwNzEwXHUwNzEyLVx1MDcyRlx1MDc0RC1cdTA3QTVcdTA3QjFcdTA3Q0Et
XHUwN0VBXHUwN0Y0XHUwN0Y1XHUwN0ZBXHUwODAwLVx1MDgxNVx1MDgxQVx1MDgyNFx1MDgyOFx1
MDg0MC1cdTA4NThcdTA4QTBcdTA4QTItXHUwOEFDXHUwOTA0LVx1MDkzOVx1MDkzRFx1MDk1MFx1
MDk1OC1cdTA5NjFcdTA5NzEtXHUwOTc3XHUwOTc5LVx1MDk3Rlx1MDk4NS1cdTA5OENcdTA5OEZc
dTA5OTBcdTA5OTMtXHUwOUE4XHUwOUFBLVx1MDlCMFx1MDlCMlx1MDlCNi1cdTA5QjlcdTA5QkRc
dTA5Q0VcdTA5RENcdTA5RERcdTA5REYtXHUwOUUxXHUwOUYwXHUwOUYxXHUwQTA1LVx1MEEwQVx1
MEEwRlx1MEExMFx1MEExMy1cdTBBMjhcdTBBMkEtXHUwQTMwXHUwQTMyXHUwQTMzXHUwQTM1XHUw
QTM2XHUwQTM4XHUwQTM5XHUwQTU5LVx1MEE1Q1x1MEE1RVx1MEE3Mi1cdTBBNzRcdTBBODUtXHUw
QThEXHUwQThGLVx1MEE5MVx1MEE5My1cdTBBQThcdTBBQUEtXHUwQUIwXHUwQUIyXHUwQUIzXHUw
QUI1LVx1MEFCOVx1MEFCRFx1MEFEMFx1MEFFMFx1MEFFMVx1MEIwNS1cdTBCMENcdTBCMEZcdTBC
MTBcdTBCMTMtXHUwQjI4XHUwQjJBLVx1MEIzMFx1MEIzMlx1MEIzM1x1MEIzNS1cdTBCMzlcdTBC
M0RcdTBCNUNcdTBCNURcdTBCNUYtXHUwQjYxXHUwQjcxXHUwQjgzXHUwQjg1LVx1MEI4QVx1MEI4
RS1cdTBCOTBcdTBCOTItXHUwQjk1XHUwQjk5XHUwQjlBXHUwQjlDXHUwQjlFXHUwQjlGXHUwQkEz
XHUwQkE0XHUwQkE4LVx1MEJBQVx1MEJBRS1cdTBCQjlcdTBCRDBcdTBDMDUtXHUwQzBDXHUwQzBF
LVx1MEMxMFx1MEMxMi1cdTBDMjhcdTBDMkEtXHUwQzMzXHUwQzM1LVx1MEMzOVx1MEMzRFx1MEM1
OFx1MEM1OVx1MEM2MFx1MEM2MVx1MEM4NS1cdTBDOENcdTBDOEUtXHUwQzkwXHUwQzkyLVx1MENB
OFx1MENBQS1cdTBDQjNcdTBDQjUtXHUwQ0I5XHUwQ0JEXHUwQ0RFXHUwQ0UwXHUwQ0UxXHUwQ0Yx
XHUwQ0YyXHUwRDA1LVx1MEQwQ1x1MEQwRS1cdTBEMTBcdTBEMTItXHUwRDNBXHUwRDNEXHUwRDRF
XHUwRDYwXHUwRDYxXHUwRDdBLVx1MEQ3Rlx1MEQ4NS1cdTBEOTZcdTBEOUEtXHUwREIxXHUwREIz
LVx1MERCQlx1MERCRFx1MERDMC1cdTBEQzZcdTBFMDEtXHUwRTMwXHUwRTMyXHUwRTMzXHUwRTQw
LVx1MEU0Nlx1MEU4MVx1MEU4Mlx1MEU4NFx1MEU4N1x1MEU4OFx1MEU4QVx1MEU4RFx1MEU5NC1c
dTBFOTdcdTBFOTktXHUwRTlGXHUwRUExLVx1MEVBM1x1MEVBNVx1MEVBN1x1MEVBQVx1MEVBQlx1
MEVBRC1cdTBFQjBcdTBFQjJcdTBFQjNcdTBFQkRcdTBFQzAtXHUwRUM0XHUwRUM2XHUwRURDLVx1
MEVERlx1MEYwMFx1MEY0MC1cdTBGNDdcdTBGNDktXHUwRjZDXHUwRjg4LVx1MEY4Q1x1MTAwMC1c
dTEwMkFcdTEwM0ZcdTEwNTAtXHUxMDU1XHUxMDVBLVx1MTA1RFx1MTA2MVx1MTA2NVx1MTA2Nlx1
MTA2RS1cdTEwNzBcdTEwNzUtXHUxMDgxXHUxMDhFXHUxMEEwLVx1MTBDNVx1MTBDN1x1MTBDRFx1
MTBEMC1cdTEwRkFcdTEwRkMtXHUxMjQ4XHUxMjRBLVx1MTI0RFx1MTI1MC1cdTEyNTZcdTEyNThc
dTEyNUEtXHUxMjVEXHUxMjYwLVx1MTI4OFx1MTI4QS1cdTEyOERcdTEyOTAtXHUxMkIwXHUxMkIy
LVx1MTJCNVx1MTJCOC1cdTEyQkVcdTEyQzBcdTEyQzItXHUxMkM1XHUxMkM4LVx1MTJENlx1MTJE
OC1cdTEzMTBcdTEzMTItXHUxMzE1XHUxMzE4LVx1MTM1QVx1MTM4MC1cdTEzOEZcdTEzQTAtXHUx
M0Y0XHUxNDAxLVx1MTY2Q1x1MTY2Ri1cdTE2N0ZcdTE2ODEtXHUxNjlBXHUxNkEwLVx1MTZFQVx1
MTZFRS1cdTE2RjBcdTE3MDAtXHUxNzBDXHUxNzBFLVx1MTcxMVx1MTcyMC1cdTE3MzFcdTE3NDAt
XHUxNzUxXHUxNzYwLVx1MTc2Q1x1MTc2RS1cdTE3NzBcdTE3ODAtXHUxN0IzXHUxN0Q3XHUxN0RD
XHUxODIwLVx1MTg3N1x1MTg4MC1cdTE4QThcdTE4QUFcdTE4QjAtXHUxOEY1XHUxOTAwLVx1MTkx
Q1x1MTk1MC1cdTE5NkRcdTE5NzAtXHUxOTc0XHUxOTgwLVx1MTlBQlx1MTlDMS1cdTE5QzdcdTFB
MDAtXHUxQTE2XHUxQTIwLVx1MUE1NFx1MUFBN1x1MUIwNS1cdTFCMzNcdTFCNDUtXHUxQjRCXHUx
QjgzLVx1MUJBMFx1MUJBRVx1MUJBRlx1MUJCQS1cdTFCRTVcdTFDMDAtXHUxQzIzXHUxQzRELVx1
MUM0Rlx1MUM1QS1cdTFDN0RcdTFDRTktXHUxQ0VDXHUxQ0VFLVx1MUNGMVx1MUNGNVx1MUNGNlx1
MUQwMC1cdTFEQkZcdTFFMDAtXHUxRjE1XHUxRjE4LVx1MUYxRFx1MUYyMC1cdTFGNDVcdTFGNDgt
XHUxRjREXHUxRjUwLVx1MUY1N1x1MUY1OVx1MUY1Qlx1MUY1RFx1MUY1Ri1cdTFGN0RcdTFGODAt
XHUxRkI0XHUxRkI2LVx1MUZCQ1x1MUZCRVx1MUZDMi1cdTFGQzRcdTFGQzYtXHUxRkNDXHUxRkQw
LVx1MUZEM1x1MUZENi1cdTFGREJcdTFGRTAtXHUxRkVDXHUxRkYyLVx1MUZGNFx1MUZGNi1cdTFG
RkNcdTIwNzFcdTIwN0ZcdTIwOTAtXHUyMDlDXHUyMTAyXHUyMTA3XHUyMTBBLVx1MjExM1x1MjEx
NVx1MjExOS1cdTIxMURcdTIxMjRcdTIxMjZcdTIxMjhcdTIxMkEtXHUyMTJEXHUyMTJGLVx1MjEz
OVx1MjEzQy1cdTIxM0ZcdTIxNDUtXHUyMTQ5XHUyMTRFXHUyMTYwLVx1MjE4OFx1MkMwMC1cdTJD
MkVcdTJDMzAtXHUyQzVFXHUyQzYwLVx1MkNFNFx1MkNFQi1cdTJDRUVcdTJDRjJcdTJDRjNcdTJE
MDAtXHUyRDI1XHUyRDI3XHUyRDJEXHUyRDMwLVx1MkQ2N1x1MkQ2Rlx1MkQ4MC1cdTJEOTZcdTJE
QTAtXHUyREE2XHUyREE4LVx1MkRBRVx1MkRCMC1cdTJEQjZcdTJEQjgtXHUyREJFXHUyREMwLVx1
MkRDNlx1MkRDOC1cdTJEQ0VcdTJERDAtXHUyREQ2XHUyREQ4LVx1MkRERVx1MkUyRlx1MzAwNS1c
dTMwMDdcdTMwMjEtXHUzMDI5XHUzMDMxLVx1MzAzNVx1MzAzOC1cdTMwM0NcdTMwNDEtXHUzMDk2
XHUzMDlELVx1MzA5Rlx1MzBBMS1cdTMwRkFcdTMwRkMtXHUzMEZGXHUzMTA1LVx1MzEyRFx1MzEz
MS1cdTMxOEVcdTMxQTAtXHUzMUJBXHUzMUYwLVx1MzFGRlx1MzQwMC1cdTREQjVcdTRFMDAtXHU5
RkNDXHVBMDAwLVx1QTQ4Q1x1QTREMC1cdUE0RkRcdUE1MDAtXHVBNjBDXHVBNjEwLVx1QTYxRlx1
QTYyQVx1QTYyQlx1QTY0MC1cdUE2NkVcdUE2N0YtXHVBNjk3XHVBNkEwLVx1QTZFRlx1QTcxNy1c
dUE3MUZcdUE3MjItXHVBNzg4XHVBNzhCLVx1QTc4RVx1QTc5MC1cdUE3OTNcdUE3QTAtXHVBN0FB
XHVBN0Y4LVx1QTgwMVx1QTgwMy1cdUE4MDVcdUE4MDctXHVBODBBXHVBODBDLVx1QTgyMlx1QTg0
MC1cdUE4NzNcdUE4ODItXHVBOEIzXHVBOEYyLVx1QThGN1x1QThGQlx1QTkwQS1cdUE5MjVcdUE5
MzAtXHVBOTQ2XHVBOTYwLVx1QTk3Q1x1QTk4NC1cdUE5QjJcdUE5Q0ZcdUFBMDAtXHVBQTI4XHVB
QTQwLVx1QUE0Mlx1QUE0NC1cdUFBNEJcdUFBNjAtXHVBQTc2XHVBQTdBXHVBQTgwLVx1QUFBRlx1
QUFCMVx1QUFCNVx1QUFCNlx1QUFCOS1cdUFBQkRcdUFBQzBcdUFBQzJcdUFBREItXHVBQUREXHVB
QUUwLVx1QUFFQVx1QUFGMi1cdUFBRjRcdUFCMDEtXHVBQjA2XHVBQjA5LVx1QUIwRVx1QUIxMS1c
dUFCMTZcdUFCMjAtXHVBQjI2XHVBQjI4LVx1QUIyRVx1QUJDMC1cdUFCRTJcdUFDMDAtXHVEN0Ez
XHVEN0IwLVx1RDdDNlx1RDdDQi1cdUQ3RkJcdUY5MDAtXHVGQTZEXHVGQTcwLVx1RkFEOVx1RkIw
MC1cdUZCMDZcdUZCMTMtXHVGQjE3XHVGQjFEXHVGQjFGLVx1RkIyOFx1RkIyQS1cdUZCMzZcdUZC
MzgtXHVGQjNDXHVGQjNFXHVGQjQwXHVGQjQxXHVGQjQzXHVGQjQ0XHVGQjQ2LVx1RkJCMVx1RkJE
My1cdUZEM0RcdUZENTAtXHVGRDhGXHVGRDkyLVx1RkRDN1x1RkRGMC1cdUZERkJcdUZFNzAtXHVG
RTc0XHVGRTc2LVx1RkVGQ1x1RkYyMS1cdUZGM0FcdUZGNDEtXHVGRjVBXHVGRjY2LVx1RkZCRVx1
RkZDMi1cdUZGQzdcdUZGQ0EtXHVGRkNGXHVGRkQyLVx1RkZEN1x1RkZEQS1cdUZGRENdJyksCisg
ICAgICAgIE5vbkFzY2lpSWRlbnRpZmllclBhcnQ6IG5ldyBSZWdFeHAoJ1tceEFBXHhCNVx4QkFc
eEMwLVx4RDZceEQ4LVx4RjZceEY4LVx1MDJDMVx1MDJDNi1cdTAyRDFcdTAyRTAtXHUwMkU0XHUw
MkVDXHUwMkVFXHUwMzAwLVx1MDM3NFx1MDM3Nlx1MDM3N1x1MDM3QS1cdTAzN0RcdTAzODZcdTAz
ODgtXHUwMzhBXHUwMzhDXHUwMzhFLVx1MDNBMVx1MDNBMy1cdTAzRjVcdTAzRjctXHUwNDgxXHUw
NDgzLVx1MDQ4N1x1MDQ4QS1cdTA1MjdcdTA1MzEtXHUwNTU2XHUwNTU5XHUwNTYxLVx1MDU4N1x1
MDU5MS1cdTA1QkRcdTA1QkZcdTA1QzFcdTA1QzJcdTA1QzRcdTA1QzVcdTA1QzdcdTA1RDAtXHUw
NUVBXHUwNUYwLVx1MDVGMlx1MDYxMC1cdTA2MUFcdTA2MjAtXHUwNjY5XHUwNjZFLVx1MDZEM1x1
MDZENS1cdTA2RENcdTA2REYtXHUwNkU4XHUwNkVBLVx1MDZGQ1x1MDZGRlx1MDcxMC1cdTA3NEFc
dTA3NEQtXHUwN0IxXHUwN0MwLVx1MDdGNVx1MDdGQVx1MDgwMC1cdTA4MkRcdTA4NDAtXHUwODVC
XHUwOEEwXHUwOEEyLVx1MDhBQ1x1MDhFNC1cdTA4RkVcdTA5MDAtXHUwOTYzXHUwOTY2LVx1MDk2
Rlx1MDk3MS1cdTA5NzdcdTA5NzktXHUwOTdGXHUwOTgxLVx1MDk4M1x1MDk4NS1cdTA5OENcdTA5
OEZcdTA5OTBcdTA5OTMtXHUwOUE4XHUwOUFBLVx1MDlCMFx1MDlCMlx1MDlCNi1cdTA5QjlcdTA5
QkMtXHUwOUM0XHUwOUM3XHUwOUM4XHUwOUNCLVx1MDlDRVx1MDlEN1x1MDlEQ1x1MDlERFx1MDlE
Ri1cdTA5RTNcdTA5RTYtXHUwOUYxXHUwQTAxLVx1MEEwM1x1MEEwNS1cdTBBMEFcdTBBMEZcdTBB
MTBcdTBBMTMtXHUwQTI4XHUwQTJBLVx1MEEzMFx1MEEzMlx1MEEzM1x1MEEzNVx1MEEzNlx1MEEz
OFx1MEEzOVx1MEEzQ1x1MEEzRS1cdTBBNDJcdTBBNDdcdTBBNDhcdTBBNEItXHUwQTREXHUwQTUx
XHUwQTU5LVx1MEE1Q1x1MEE1RVx1MEE2Ni1cdTBBNzVcdTBBODEtXHUwQTgzXHUwQTg1LVx1MEE4
RFx1MEE4Ri1cdTBBOTFcdTBBOTMtXHUwQUE4XHUwQUFBLVx1MEFCMFx1MEFCMlx1MEFCM1x1MEFC
NS1cdTBBQjlcdTBBQkMtXHUwQUM1XHUwQUM3LVx1MEFDOVx1MEFDQi1cdTBBQ0RcdTBBRDBcdTBB
RTAtXHUwQUUzXHUwQUU2LVx1MEFFRlx1MEIwMS1cdTBCMDNcdTBCMDUtXHUwQjBDXHUwQjBGXHUw
QjEwXHUwQjEzLVx1MEIyOFx1MEIyQS1cdTBCMzBcdTBCMzJcdTBCMzNcdTBCMzUtXHUwQjM5XHUw
QjNDLVx1MEI0NFx1MEI0N1x1MEI0OFx1MEI0Qi1cdTBCNERcdTBCNTZcdTBCNTdcdTBCNUNcdTBC
NURcdTBCNUYtXHUwQjYzXHUwQjY2LVx1MEI2Rlx1MEI3MVx1MEI4Mlx1MEI4M1x1MEI4NS1cdTBC
OEFcdTBCOEUtXHUwQjkwXHUwQjkyLVx1MEI5NVx1MEI5OVx1MEI5QVx1MEI5Q1x1MEI5RVx1MEI5
Rlx1MEJBM1x1MEJBNFx1MEJBOC1cdTBCQUFcdTBCQUUtXHUwQkI5XHUwQkJFLVx1MEJDMlx1MEJD
Ni1cdTBCQzhcdTBCQ0EtXHUwQkNEXHUwQkQwXHUwQkQ3XHUwQkU2LVx1MEJFRlx1MEMwMS1cdTBD
MDNcdTBDMDUtXHUwQzBDXHUwQzBFLVx1MEMxMFx1MEMxMi1cdTBDMjhcdTBDMkEtXHUwQzMzXHUw
QzM1LVx1MEMzOVx1MEMzRC1cdTBDNDRcdTBDNDYtXHUwQzQ4XHUwQzRBLVx1MEM0RFx1MEM1NVx1
MEM1Nlx1MEM1OFx1MEM1OVx1MEM2MC1cdTBDNjNcdTBDNjYtXHUwQzZGXHUwQzgyXHUwQzgzXHUw
Qzg1LVx1MEM4Q1x1MEM4RS1cdTBDOTBcdTBDOTItXHUwQ0E4XHUwQ0FBLVx1MENCM1x1MENCNS1c
dTBDQjlcdTBDQkMtXHUwQ0M0XHUwQ0M2LVx1MENDOFx1MENDQS1cdTBDQ0RcdTBDRDVcdTBDRDZc
dTBDREVcdTBDRTAtXHUwQ0UzXHUwQ0U2LVx1MENFRlx1MENGMVx1MENGMlx1MEQwMlx1MEQwM1x1
MEQwNS1cdTBEMENcdTBEMEUtXHUwRDEwXHUwRDEyLVx1MEQzQVx1MEQzRC1cdTBENDRcdTBENDYt
XHUwRDQ4XHUwRDRBLVx1MEQ0RVx1MEQ1N1x1MEQ2MC1cdTBENjNcdTBENjYtXHUwRDZGXHUwRDdB
LVx1MEQ3Rlx1MEQ4Mlx1MEQ4M1x1MEQ4NS1cdTBEOTZcdTBEOUEtXHUwREIxXHUwREIzLVx1MERC
Qlx1MERCRFx1MERDMC1cdTBEQzZcdTBEQ0FcdTBEQ0YtXHUwREQ0XHUwREQ2XHUwREQ4LVx1MERE
Rlx1MERGMlx1MERGM1x1MEUwMS1cdTBFM0FcdTBFNDAtXHUwRTRFXHUwRTUwLVx1MEU1OVx1MEU4
MVx1MEU4Mlx1MEU4NFx1MEU4N1x1MEU4OFx1MEU4QVx1MEU4RFx1MEU5NC1cdTBFOTdcdTBFOTkt
XHUwRTlGXHUwRUExLVx1MEVBM1x1MEVBNVx1MEVBN1x1MEVBQVx1MEVBQlx1MEVBRC1cdTBFQjlc
dTBFQkItXHUwRUJEXHUwRUMwLVx1MEVDNFx1MEVDNlx1MEVDOC1cdTBFQ0RcdTBFRDAtXHUwRUQ5
XHUwRURDLVx1MEVERlx1MEYwMFx1MEYxOFx1MEYxOVx1MEYyMC1cdTBGMjlcdTBGMzVcdTBGMzdc
dTBGMzlcdTBGM0UtXHUwRjQ3XHUwRjQ5LVx1MEY2Q1x1MEY3MS1cdTBGODRcdTBGODYtXHUwRjk3
XHUwRjk5LVx1MEZCQ1x1MEZDNlx1MTAwMC1cdTEwNDlcdTEwNTAtXHUxMDlEXHUxMEEwLVx1MTBD
NVx1MTBDN1x1MTBDRFx1MTBEMC1cdTEwRkFcdTEwRkMtXHUxMjQ4XHUxMjRBLVx1MTI0RFx1MTI1
MC1cdTEyNTZcdTEyNThcdTEyNUEtXHUxMjVEXHUxMjYwLVx1MTI4OFx1MTI4QS1cdTEyOERcdTEy
OTAtXHUxMkIwXHUxMkIyLVx1MTJCNVx1MTJCOC1cdTEyQkVcdTEyQzBcdTEyQzItXHUxMkM1XHUx
MkM4LVx1MTJENlx1MTJEOC1cdTEzMTBcdTEzMTItXHUxMzE1XHUxMzE4LVx1MTM1QVx1MTM1RC1c
dTEzNUZcdTEzODAtXHUxMzhGXHUxM0EwLVx1MTNGNFx1MTQwMS1cdTE2NkNcdTE2NkYtXHUxNjdG
XHUxNjgxLVx1MTY5QVx1MTZBMC1cdTE2RUFcdTE2RUUtXHUxNkYwXHUxNzAwLVx1MTcwQ1x1MTcw
RS1cdTE3MTRcdTE3MjAtXHUxNzM0XHUxNzQwLVx1MTc1M1x1MTc2MC1cdTE3NkNcdTE3NkUtXHUx
NzcwXHUxNzcyXHUxNzczXHUxNzgwLVx1MTdEM1x1MTdEN1x1MTdEQ1x1MTdERFx1MTdFMC1cdTE3
RTlcdTE4MEItXHUxODBEXHUxODEwLVx1MTgxOVx1MTgyMC1cdTE4NzdcdTE4ODAtXHUxOEFBXHUx
OEIwLVx1MThGNVx1MTkwMC1cdTE5MUNcdTE5MjAtXHUxOTJCXHUxOTMwLVx1MTkzQlx1MTk0Ni1c
dTE5NkRcdTE5NzAtXHUxOTc0XHUxOTgwLVx1MTlBQlx1MTlCMC1cdTE5QzlcdTE5RDAtXHUxOUQ5
XHUxQTAwLVx1MUExQlx1MUEyMC1cdTFBNUVcdTFBNjAtXHUxQTdDXHUxQTdGLVx1MUE4OVx1MUE5
MC1cdTFBOTlcdTFBQTdcdTFCMDAtXHUxQjRCXHUxQjUwLVx1MUI1OVx1MUI2Qi1cdTFCNzNcdTFC
ODAtXHUxQkYzXHUxQzAwLVx1MUMzN1x1MUM0MC1cdTFDNDlcdTFDNEQtXHUxQzdEXHUxQ0QwLVx1
MUNEMlx1MUNENC1cdTFDRjZcdTFEMDAtXHUxREU2XHUxREZDLVx1MUYxNVx1MUYxOC1cdTFGMURc
dTFGMjAtXHUxRjQ1XHUxRjQ4LVx1MUY0RFx1MUY1MC1cdTFGNTdcdTFGNTlcdTFGNUJcdTFGNURc
dTFGNUYtXHUxRjdEXHUxRjgwLVx1MUZCNFx1MUZCNi1cdTFGQkNcdTFGQkVcdTFGQzItXHUxRkM0
XHUxRkM2LVx1MUZDQ1x1MUZEMC1cdTFGRDNcdTFGRDYtXHUxRkRCXHUxRkUwLVx1MUZFQ1x1MUZG
Mi1cdTFGRjRcdTFGRjYtXHUxRkZDXHUyMDBDXHUyMDBEXHUyMDNGXHUyMDQwXHUyMDU0XHUyMDcx
XHUyMDdGXHUyMDkwLVx1MjA5Q1x1MjBEMC1cdTIwRENcdTIwRTFcdTIwRTUtXHUyMEYwXHUyMTAy
XHUyMTA3XHUyMTBBLVx1MjExM1x1MjExNVx1MjExOS1cdTIxMURcdTIxMjRcdTIxMjZcdTIxMjhc
dTIxMkEtXHUyMTJEXHUyMTJGLVx1MjEzOVx1MjEzQy1cdTIxM0ZcdTIxNDUtXHUyMTQ5XHUyMTRF
XHUyMTYwLVx1MjE4OFx1MkMwMC1cdTJDMkVcdTJDMzAtXHUyQzVFXHUyQzYwLVx1MkNFNFx1MkNF
Qi1cdTJDRjNcdTJEMDAtXHUyRDI1XHUyRDI3XHUyRDJEXHUyRDMwLVx1MkQ2N1x1MkQ2Rlx1MkQ3
Ri1cdTJEOTZcdTJEQTAtXHUyREE2XHUyREE4LVx1MkRBRVx1MkRCMC1cdTJEQjZcdTJEQjgtXHUy
REJFXHUyREMwLVx1MkRDNlx1MkRDOC1cdTJEQ0VcdTJERDAtXHUyREQ2XHUyREQ4LVx1MkRERVx1
MkRFMC1cdTJERkZcdTJFMkZcdTMwMDUtXHUzMDA3XHUzMDIxLVx1MzAyRlx1MzAzMS1cdTMwMzVc
dTMwMzgtXHUzMDNDXHUzMDQxLVx1MzA5Nlx1MzA5OVx1MzA5QVx1MzA5RC1cdTMwOUZcdTMwQTEt
XHUzMEZBXHUzMEZDLVx1MzBGRlx1MzEwNS1cdTMxMkRcdTMxMzEtXHUzMThFXHUzMUEwLVx1MzFC
QVx1MzFGMC1cdTMxRkZcdTM0MDAtXHU0REI1XHU0RTAwLVx1OUZDQ1x1QTAwMC1cdUE0OENcdUE0
RDAtXHVBNEZEXHVBNTAwLVx1QTYwQ1x1QTYxMC1cdUE2MkJcdUE2NDAtXHVBNjZGXHVBNjc0LVx1
QTY3RFx1QTY3Ri1cdUE2OTdcdUE2OUYtXHVBNkYxXHVBNzE3LVx1QTcxRlx1QTcyMi1cdUE3ODhc
dUE3OEItXHVBNzhFXHVBNzkwLVx1QTc5M1x1QTdBMC1cdUE3QUFcdUE3RjgtXHVBODI3XHVBODQw
LVx1QTg3M1x1QTg4MC1cdUE4QzRcdUE4RDAtXHVBOEQ5XHVBOEUwLVx1QThGN1x1QThGQlx1QTkw
MC1cdUE5MkRcdUE5MzAtXHVBOTUzXHVBOTYwLVx1QTk3Q1x1QTk4MC1cdUE5QzBcdUE5Q0YtXHVB
OUQ5XHVBQTAwLVx1QUEzNlx1QUE0MC1cdUFBNERcdUFBNTAtXHVBQTU5XHVBQTYwLVx1QUE3Nlx1
QUE3QVx1QUE3Qlx1QUE4MC1cdUFBQzJcdUFBREItXHVBQUREXHVBQUUwLVx1QUFFRlx1QUFGMi1c
dUFBRjZcdUFCMDEtXHVBQjA2XHVBQjA5LVx1QUIwRVx1QUIxMS1cdUFCMTZcdUFCMjAtXHVBQjI2
XHVBQjI4LVx1QUIyRVx1QUJDMC1cdUFCRUFcdUFCRUNcdUFCRURcdUFCRjAtXHVBQkY5XHVBQzAw
LVx1RDdBM1x1RDdCMC1cdUQ3QzZcdUQ3Q0ItXHVEN0ZCXHVGOTAwLVx1RkE2RFx1RkE3MC1cdUZB
RDlcdUZCMDAtXHVGQjA2XHVGQjEzLVx1RkIxN1x1RkIxRC1cdUZCMjhcdUZCMkEtXHVGQjM2XHVG
QjM4LVx1RkIzQ1x1RkIzRVx1RkI0MFx1RkI0MVx1RkI0M1x1RkI0NFx1RkI0Ni1cdUZCQjFcdUZC
RDMtXHVGRDNEXHVGRDUwLVx1RkQ4Rlx1RkQ5Mi1cdUZEQzdcdUZERjAtXHVGREZCXHVGRTAwLVx1
RkUwRlx1RkUyMC1cdUZFMjZcdUZFMzNcdUZFMzRcdUZFNEQtXHVGRTRGXHVGRTcwLVx1RkU3NFx1
RkU3Ni1cdUZFRkNcdUZGMTAtXHVGRjE5XHVGRjIxLVx1RkYzQVx1RkYzRlx1RkY0MS1cdUZGNUFc
dUZGNjYtXHVGRkJFXHVGRkMyLVx1RkZDN1x1RkZDQS1cdUZGQ0ZcdUZGRDItXHVGRkQ3XHVGRkRB
LVx1RkZEQ10nKQorICAgIH07CisKKyAgICAvLyBFbnN1cmUgdGhlIGNvbmRpdGlvbiBpcyB0cnVl
LCBvdGhlcndpc2UgdGhyb3cgYW4gZXJyb3IuCisgICAgLy8gVGhpcyBpcyBvbmx5IHRvIGhhdmUg
YSBiZXR0ZXIgY29udHJhY3Qgc2VtYW50aWMsIGkuZS4gYW5vdGhlciBzYWZldHkgbmV0CisgICAg
Ly8gdG8gY2F0Y2ggYSBsb2dpYyBlcnJvci4gVGhlIGNvbmRpdGlvbiBzaGFsbCBiZSBmdWxmaWxs
ZWQgaW4gbm9ybWFsIGNhc2UuCisgICAgLy8gRG8gTk9UIHVzZSB0aGlzIHRvIGVuZm9yY2UgYSBj
ZXJ0YWluIGNvbmRpdGlvbiBvbiBhbnkgdXNlciBpbnB1dC4KKworICAgIGZ1bmN0aW9uIGFzc2Vy
dChjb25kaXRpb24sIG1lc3NhZ2UpIHsKKyAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICov
CisgICAgICAgIGlmICghY29uZGl0aW9uKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3Io
J0FTU0VSVDogJyArIG1lc3NhZ2UpOworICAgICAgICB9CisgICAgfQorCisgICAgZnVuY3Rpb24g
aXNEZWNpbWFsRGlnaXQoY2gpIHsKKyAgICAgICAgcmV0dXJuIChjaCA+PSA0OCAmJiBjaCA8PSA1
Nyk7ICAgLy8gMC4uOQorICAgIH0KKworICAgIGZ1bmN0aW9uIGlzSGV4RGlnaXQoY2gpIHsKKyAg
ICAgICAgcmV0dXJuICcwMTIzNDU2Nzg5YWJjZGVmQUJDREVGJy5pbmRleE9mKGNoKSA+PSAwOwor
ICAgIH0KKworICAgIGZ1bmN0aW9uIGlzT2N0YWxEaWdpdChjaCkgeworICAgICAgICByZXR1cm4g
JzAxMjM0NTY3Jy5pbmRleE9mKGNoKSA+PSAwOworICAgIH0KKworCisgICAgLy8gNy4yIFdoaXRl
IFNwYWNlCisKKyAgICBmdW5jdGlvbiBpc1doaXRlU3BhY2UoY2gpIHsKKyAgICAgICAgcmV0dXJu
IChjaCA9PT0gMHgyMCkgfHwgKGNoID09PSAweDA5KSB8fCAoY2ggPT09IDB4MEIpIHx8IChjaCA9
PT0gMHgwQykgfHwgKGNoID09PSAweEEwKSB8fAorICAgICAgICAgICAgKGNoID49IDB4MTY4MCAm
JiBbMHgxNjgwLCAweDE4MEUsIDB4MjAwMCwgMHgyMDAxLCAweDIwMDIsIDB4MjAwMywgMHgyMDA0
LCAweDIwMDUsIDB4MjAwNiwgMHgyMDA3LCAweDIwMDgsIDB4MjAwOSwgMHgyMDBBLCAweDIwMkYs
IDB4MjA1RiwgMHgzMDAwLCAweEZFRkZdLmluZGV4T2YoY2gpID49IDApOworICAgIH0KKworICAg
IC8vIDcuMyBMaW5lIFRlcm1pbmF0b3JzCisKKyAgICBmdW5jdGlvbiBpc0xpbmVUZXJtaW5hdG9y
KGNoKSB7CisgICAgICAgIHJldHVybiAoY2ggPT09IDB4MEEpIHx8IChjaCA9PT0gMHgwRCkgfHwg
KGNoID09PSAweDIwMjgpIHx8IChjaCA9PT0gMHgyMDI5KTsKKyAgICB9CisKKyAgICAvLyA3LjYg
SWRlbnRpZmllciBOYW1lcyBhbmQgSWRlbnRpZmllcnMKKworICAgIGZ1bmN0aW9uIGlzSWRlbnRp
ZmllclN0YXJ0KGNoKSB7CisgICAgICAgIHJldHVybiAoY2ggPT09IDB4MjQpIHx8IChjaCA9PT0g
MHg1RikgfHwgIC8vICQgKGRvbGxhcikgYW5kIF8gKHVuZGVyc2NvcmUpCisgICAgICAgICAgICAo
Y2ggPj0gMHg0MSAmJiBjaCA8PSAweDVBKSB8fCAgICAgICAgIC8vIEEuLloKKyAgICAgICAgICAg
IChjaCA+PSAweDYxICYmIGNoIDw9IDB4N0EpIHx8ICAgICAgICAgLy8gYS4uegorICAgICAgICAg
ICAgKGNoID09PSAweDVDKSB8fCAgICAgICAgICAgICAgICAgICAgICAvLyBcIChiYWNrc2xhc2gp
CisgICAgICAgICAgICAoKGNoID49IDB4ODApICYmIFJlZ2V4Lk5vbkFzY2lpSWRlbnRpZmllclN0
YXJ0LnRlc3QoU3RyaW5nLmZyb21DaGFyQ29kZShjaCkpKTsKKyAgICB9CisKKyAgICBmdW5jdGlv
biBpc0lkZW50aWZpZXJQYXJ0KGNoKSB7CisgICAgICAgIHJldHVybiAoY2ggPT09IDB4MjQpIHx8
IChjaCA9PT0gMHg1RikgfHwgIC8vICQgKGRvbGxhcikgYW5kIF8gKHVuZGVyc2NvcmUpCisgICAg
ICAgICAgICAoY2ggPj0gMHg0MSAmJiBjaCA8PSAweDVBKSB8fCAgICAgICAgIC8vIEEuLloKKyAg
ICAgICAgICAgIChjaCA+PSAweDYxICYmIGNoIDw9IDB4N0EpIHx8ICAgICAgICAgLy8gYS4uegor
ICAgICAgICAgICAgKGNoID49IDB4MzAgJiYgY2ggPD0gMHgzOSkgfHwgICAgICAgICAvLyAwLi45
CisgICAgICAgICAgICAoY2ggPT09IDB4NUMpIHx8ICAgICAgICAgICAgICAgICAgICAgIC8vIFwg
KGJhY2tzbGFzaCkKKyAgICAgICAgICAgICgoY2ggPj0gMHg4MCkgJiYgUmVnZXguTm9uQXNjaWlJ
ZGVudGlmaWVyUGFydC50ZXN0KFN0cmluZy5mcm9tQ2hhckNvZGUoY2gpKSk7CisgICAgfQorCisg
ICAgLy8gNy42LjEuMiBGdXR1cmUgUmVzZXJ2ZWQgV29yZHMKKworICAgIGZ1bmN0aW9uIGlzRnV0
dXJlUmVzZXJ2ZWRXb3JkKGlkKSB7CisgICAgICAgIHN3aXRjaCAoaWQpIHsKKyAgICAgICAgY2Fz
ZSAnY2xhc3MnOgorICAgICAgICBjYXNlICdlbnVtJzoKKyAgICAgICAgY2FzZSAnZXhwb3J0JzoK
KyAgICAgICAgY2FzZSAnZXh0ZW5kcyc6CisgICAgICAgIGNhc2UgJ2ltcG9ydCc6CisgICAgICAg
IGNhc2UgJ3N1cGVyJzoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgZnVu
Y3Rpb24gaXNTdHJpY3RNb2RlUmVzZXJ2ZWRXb3JkKGlkKSB7CisgICAgICAgIHN3aXRjaCAoaWQp
IHsKKyAgICAgICAgY2FzZSAnaW1wbGVtZW50cyc6CisgICAgICAgIGNhc2UgJ2ludGVyZmFjZSc6
CisgICAgICAgIGNhc2UgJ3BhY2thZ2UnOgorICAgICAgICBjYXNlICdwcml2YXRlJzoKKyAgICAg
ICAgY2FzZSAncHJvdGVjdGVkJzoKKyAgICAgICAgY2FzZSAncHVibGljJzoKKyAgICAgICAgY2Fz
ZSAnc3RhdGljJzoKKyAgICAgICAgY2FzZSAneWllbGQnOgorICAgICAgICBjYXNlICdsZXQnOgor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmdW5jdGlvbiBpc1Jlc3RyaWN0
ZWRXb3JkKGlkKSB7CisgICAgICAgIHJldHVybiBpZCA9PT0gJ2V2YWwnIHx8IGlkID09PSAnYXJn
dW1lbnRzJzsKKyAgICB9CisKKyAgICAvLyA3LjYuMS4xIEtleXdvcmRzCisKKyAgICBmdW5jdGlv
biBpc0tleXdvcmQoaWQpIHsKKyAgICAgICAgaWYgKHN0cmljdCAmJiBpc1N0cmljdE1vZGVSZXNl
cnZlZFdvcmQoaWQpKSB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisg
ICAgICAgIC8vICdjb25zdCcgaXMgc3BlY2lhbGl6ZWQgYXMgS2V5d29yZCBpbiBWOC4KKyAgICAg
ICAgLy8gJ3lpZWxkJyBhbmQgJ2xldCcgYXJlIGZvciBjb21wYXRpYmxpdHkgd2l0aCBTcGlkZXJN
b25rZXkgYW5kIEVTLm5leHQuCisgICAgICAgIC8vIFNvbWUgb3RoZXJzIGFyZSBmcm9tIGZ1dHVy
ZSByZXNlcnZlZCB3b3Jkcy4KKworICAgICAgICBzd2l0Y2ggKGlkLmxlbmd0aCkgeworICAgICAg
ICBjYXNlIDI6CisgICAgICAgICAgICByZXR1cm4gKGlkID09PSAnaWYnKSB8fCAoaWQgPT09ICdp
bicpIHx8IChpZCA9PT0gJ2RvJyk7CisgICAgICAgIGNhc2UgMzoKKyAgICAgICAgICAgIHJldHVy
biAoaWQgPT09ICd2YXInKSB8fCAoaWQgPT09ICdmb3InKSB8fCAoaWQgPT09ICduZXcnKSB8fAor
ICAgICAgICAgICAgICAgIChpZCA9PT0gJ3RyeScpIHx8IChpZCA9PT0gJ2xldCcpOworICAgICAg
ICBjYXNlIDQ6CisgICAgICAgICAgICByZXR1cm4gKGlkID09PSAndGhpcycpIHx8IChpZCA9PT0g
J2Vsc2UnKSB8fCAoaWQgPT09ICdjYXNlJykgfHwKKyAgICAgICAgICAgICAgICAoaWQgPT09ICd2
b2lkJykgfHwgKGlkID09PSAnd2l0aCcpIHx8IChpZCA9PT0gJ2VudW0nKTsKKyAgICAgICAgY2Fz
ZSA1OgorICAgICAgICAgICAgcmV0dXJuIChpZCA9PT0gJ3doaWxlJykgfHwgKGlkID09PSAnYnJl
YWsnKSB8fCAoaWQgPT09ICdjYXRjaCcpIHx8CisgICAgICAgICAgICAgICAgKGlkID09PSAndGhy
b3cnKSB8fCAoaWQgPT09ICdjb25zdCcpIHx8IChpZCA9PT0gJ3lpZWxkJykgfHwKKyAgICAgICAg
ICAgICAgICAoaWQgPT09ICdjbGFzcycpIHx8IChpZCA9PT0gJ3N1cGVyJyk7CisgICAgICAgIGNh
c2UgNjoKKyAgICAgICAgICAgIHJldHVybiAoaWQgPT09ICdyZXR1cm4nKSB8fCAoaWQgPT09ICd0
eXBlb2YnKSB8fCAoaWQgPT09ICdkZWxldGUnKSB8fAorICAgICAgICAgICAgICAgIChpZCA9PT0g
J3N3aXRjaCcpIHx8IChpZCA9PT0gJ2V4cG9ydCcpIHx8IChpZCA9PT0gJ2ltcG9ydCcpOworICAg
ICAgICBjYXNlIDc6CisgICAgICAgICAgICByZXR1cm4gKGlkID09PSAnZGVmYXVsdCcpIHx8IChp
ZCA9PT0gJ2ZpbmFsbHknKSB8fCAoaWQgPT09ICdleHRlbmRzJyk7CisgICAgICAgIGNhc2UgODoK
KyAgICAgICAgICAgIHJldHVybiAoaWQgPT09ICdmdW5jdGlvbicpIHx8IChpZCA9PT0gJ2NvbnRp
bnVlJykgfHwgKGlkID09PSAnZGVidWdnZXInKTsKKyAgICAgICAgY2FzZSAxMDoKKyAgICAgICAg
ICAgIHJldHVybiAoaWQgPT09ICdpbnN0YW5jZW9mJyk7CisgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyA3LjQgQ29t
bWVudHMKKworICAgIGZ1bmN0aW9uIGFkZENvbW1lbnQodHlwZSwgdmFsdWUsIHN0YXJ0LCBlbmQs
IGxvYykgeworICAgICAgICB2YXIgY29tbWVudCwgYXR0YWNoZXI7CisKKyAgICAgICAgYXNzZXJ0
KHR5cGVvZiBzdGFydCA9PT0gJ251bWJlcicsICdDb21tZW50IG11c3QgaGF2ZSB2YWxpZCBwb3Np
dGlvbicpOworCisgICAgICAgIC8vIEJlY2F1c2UgdGhlIHdheSB0aGUgYWN0dWFsIHRva2VuIGlz
IHNjYW5uZWQsIG9mdGVuIHRoZSBjb21tZW50cworICAgICAgICAvLyAoaWYgYW55KSBhcmUgc2tp
cHBlZCB0d2ljZSBkdXJpbmcgdGhlIGxleGljYWwgYW5hbHlzaXMuCisgICAgICAgIC8vIFRodXMs
IHdlIG5lZWQgdG8gc2tpcCBhZGRpbmcgYSBjb21tZW50IGlmIHRoZSBjb21tZW50IGFycmF5IGFs
cmVhZHkKKyAgICAgICAgLy8gaGFuZGxlZCBpdC4KKyAgICAgICAgaWYgKHN0YXRlLmxhc3RDb21t
ZW50U3RhcnQgPj0gc3RhcnQpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAg
ICAgICBzdGF0ZS5sYXN0Q29tbWVudFN0YXJ0ID0gc3RhcnQ7CisKKyAgICAgICAgY29tbWVudCA9
IHsKKyAgICAgICAgICAgIHR5cGU6IHR5cGUsCisgICAgICAgICAgICB2YWx1ZTogdmFsdWUKKyAg
ICAgICAgfTsKKyAgICAgICAgaWYgKGV4dHJhLnJhbmdlKSB7CisgICAgICAgICAgICBjb21tZW50
LnJhbmdlID0gW3N0YXJ0LCBlbmRdOworICAgICAgICB9CisgICAgICAgIGlmIChleHRyYS5sb2Mp
IHsKKyAgICAgICAgICAgIGNvbW1lbnQubG9jID0gbG9jOworICAgICAgICB9CisgICAgICAgIGV4
dHJhLmNvbW1lbnRzLnB1c2goY29tbWVudCk7CisgICAgICAgIGlmIChleHRyYS5hdHRhY2hDb21t
ZW50KSB7CisgICAgICAgICAgICBleHRyYS5sZWFkaW5nQ29tbWVudHMucHVzaChjb21tZW50KTsK
KyAgICAgICAgICAgIGV4dHJhLnRyYWlsaW5nQ29tbWVudHMucHVzaChjb21tZW50KTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIGZ1bmN0aW9uIHNraXBTaW5nbGVMaW5lQ29tbWVudChvZmZzZXQp
IHsKKyAgICAgICAgdmFyIHN0YXJ0LCBsb2MsIGNoLCBjb21tZW50OworCisgICAgICAgIHN0YXJ0
ID0gaW5kZXggLSBvZmZzZXQ7CisgICAgICAgIGxvYyA9IHsKKyAgICAgICAgICAgIHN0YXJ0OiB7
CisgICAgICAgICAgICAgICAgbGluZTogbGluZU51bWJlciwKKyAgICAgICAgICAgICAgICBjb2x1
bW46IGluZGV4IC0gbGluZVN0YXJ0IC0gb2Zmc2V0CisgICAgICAgICAgICB9CisgICAgICAgIH07
CisKKyAgICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7CisgICAgICAgICAgICBjaCA9IHNv
dXJjZS5jaGFyQ29kZUF0KGluZGV4KTsKKyAgICAgICAgICAgICsraW5kZXg7CisgICAgICAgICAg
ICBpZiAoaXNMaW5lVGVybWluYXRvcihjaCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoZXh0cmEu
Y29tbWVudHMpIHsKKyAgICAgICAgICAgICAgICAgICAgY29tbWVudCA9IHNvdXJjZS5zbGljZShz
dGFydCArIG9mZnNldCwgaW5kZXggLSAxKTsKKyAgICAgICAgICAgICAgICAgICAgbG9jLmVuZCA9
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmU6IGxpbmVOdW1iZXIsCisgICAgICAgICAg
ICAgICAgICAgICAgICBjb2x1bW46IGluZGV4IC0gbGluZVN0YXJ0IC0gMQorICAgICAgICAgICAg
ICAgICAgICB9OworICAgICAgICAgICAgICAgICAgICBhZGRDb21tZW50KCdMaW5lJywgY29tbWVu
dCwgc3RhcnQsIGluZGV4IC0gMSwgbG9jKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgaWYgKGNoID09PSAxMyAmJiBzb3VyY2UuY2hhckNvZGVBdChpbmRleCkgPT09IDEwKSB7
CisgICAgICAgICAgICAgICAgICAgICsraW5kZXg7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICsrbGluZU51bWJlcjsKKyAgICAgICAgICAgICAgICBsaW5lU3RhcnQgPSBpbmRl
eDsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKwor
ICAgICAgICBpZiAoZXh0cmEuY29tbWVudHMpIHsKKyAgICAgICAgICAgIGNvbW1lbnQgPSBzb3Vy
Y2Uuc2xpY2Uoc3RhcnQgKyBvZmZzZXQsIGluZGV4KTsKKyAgICAgICAgICAgIGxvYy5lbmQgPSB7
CisgICAgICAgICAgICAgICAgbGluZTogbGluZU51bWJlciwKKyAgICAgICAgICAgICAgICBjb2x1
bW46IGluZGV4IC0gbGluZVN0YXJ0CisgICAgICAgICAgICB9OworICAgICAgICAgICAgYWRkQ29t
bWVudCgnTGluZScsIGNvbW1lbnQsIHN0YXJ0LCBpbmRleCwgbG9jKTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIGZ1bmN0aW9uIHNraXBNdWx0aUxpbmVDb21tZW50KCkgeworICAgICAgICB2YXIg
c3RhcnQsIGxvYywgY2gsIGNvbW1lbnQ7CisKKyAgICAgICAgaWYgKGV4dHJhLmNvbW1lbnRzKSB7
CisgICAgICAgICAgICBzdGFydCA9IGluZGV4IC0gMjsKKyAgICAgICAgICAgIGxvYyA9IHsKKyAg
ICAgICAgICAgICAgICBzdGFydDogeworICAgICAgICAgICAgICAgICAgICBsaW5lOiBsaW5lTnVt
YmVyLAorICAgICAgICAgICAgICAgICAgICBjb2x1bW46IGluZGV4IC0gbGluZVN0YXJ0IC0gMgor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH07CisgICAgICAgIH0KKworICAgICAgICB3
aGlsZSAoaW5kZXggPCBsZW5ndGgpIHsKKyAgICAgICAgICAgIGNoID0gc291cmNlLmNoYXJDb2Rl
QXQoaW5kZXgpOworICAgICAgICAgICAgaWYgKGlzTGluZVRlcm1pbmF0b3IoY2gpKSB7CisgICAg
ICAgICAgICAgICAgaWYgKGNoID09PSAweDBEICYmIHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4ICsg
MSkgPT09IDB4MEEpIHsKKyAgICAgICAgICAgICAgICAgICAgKytpbmRleDsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgKytsaW5lTnVtYmVyOworICAgICAgICAgICAgICAgICsr
aW5kZXg7CisgICAgICAgICAgICAgICAgbGluZVN0YXJ0ID0gaW5kZXg7CisgICAgICAgICAgICAg
ICAgaWYgKGluZGV4ID49IGxlbmd0aCkgeworICAgICAgICAgICAgICAgICAgICB0aHJvd0Vycm9y
KHt9LCBNZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW4sICdJTExFR0FMJyk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfSBlbHNlIGlmIChjaCA9PT0gMHgyQSkgeworICAgICAgICAgICAg
ICAgIC8vIEJsb2NrIGNvbW1lbnQgZW5kcyB3aXRoICcqLycuCisgICAgICAgICAgICAgICAgaWYg
KHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4ICsgMSkgPT09IDB4MkYpIHsKKyAgICAgICAgICAgICAg
ICAgICAgKytpbmRleDsKKyAgICAgICAgICAgICAgICAgICAgKytpbmRleDsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKGV4dHJhLmNvbW1lbnRzKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBj
b21tZW50ID0gc291cmNlLnNsaWNlKHN0YXJ0ICsgMiwgaW5kZXggLSAyKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGxvYy5lbmQgPSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlu
ZTogbGluZU51bWJlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW46IGluZGV4
IC0gbGluZVN0YXJ0CisgICAgICAgICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAg
ICAgICAgICAgYWRkQ29tbWVudCgnQmxvY2snLCBjb21tZW50LCBzdGFydCwgaW5kZXgsIGxvYyk7
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICArK2luZGV4OworICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICArK2luZGV4OworICAgICAgICAgICAgfQorICAgICAgICB9
CisKKyAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuLCAnSUxM
RUdBTCcpOworICAgIH0KKworICAgIGZ1bmN0aW9uIHNraXBDb21tZW50KCkgeworICAgICAgICB2
YXIgY2gsIHN0YXJ0OworCisgICAgICAgIHN0YXJ0ID0gKGluZGV4ID09PSAwKTsKKyAgICAgICAg
d2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7CisgICAgICAgICAgICBjaCA9IHNvdXJjZS5jaGFyQ29k
ZUF0KGluZGV4KTsKKworICAgICAgICAgICAgaWYgKGlzV2hpdGVTcGFjZShjaCkpIHsKKyAgICAg
ICAgICAgICAgICArK2luZGV4OworICAgICAgICAgICAgfSBlbHNlIGlmIChpc0xpbmVUZXJtaW5h
dG9yKGNoKSkgeworICAgICAgICAgICAgICAgICsraW5kZXg7CisgICAgICAgICAgICAgICAgaWYg
KGNoID09PSAweDBEICYmIHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KSA9PT0gMHgwQSkgeworICAg
ICAgICAgICAgICAgICAgICArK2luZGV4OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICArK2xpbmVOdW1iZXI7CisgICAgICAgICAgICAgICAgbGluZVN0YXJ0ID0gaW5kZXg7Cisg
ICAgICAgICAgICAgICAgc3RhcnQgPSB0cnVlOworICAgICAgICAgICAgfSBlbHNlIGlmIChjaCA9
PT0gMHgyRikgeyAvLyBVKzAwMkYgaXMgJy8nCisgICAgICAgICAgICAgICAgY2ggPSBzb3VyY2Uu
Y2hhckNvZGVBdChpbmRleCArIDEpOworICAgICAgICAgICAgICAgIGlmIChjaCA9PT0gMHgyRikg
eworICAgICAgICAgICAgICAgICAgICArK2luZGV4OworICAgICAgICAgICAgICAgICAgICArK2lu
ZGV4OworICAgICAgICAgICAgICAgICAgICBza2lwU2luZ2xlTGluZUNvbW1lbnQoMik7CisgICAg
ICAgICAgICAgICAgICAgIHN0YXJ0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYg
KGNoID09PSAweDJBKSB7ICAvLyBVKzAwMkEgaXMgJyonCisgICAgICAgICAgICAgICAgICAgICsr
aW5kZXg7CisgICAgICAgICAgICAgICAgICAgICsraW5kZXg7CisgICAgICAgICAgICAgICAgICAg
IHNraXBNdWx0aUxpbmVDb21tZW50KCk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBl
bHNlIGlmIChzdGFydCAmJiBjaCA9PT0gMHgyRCkgeyAvLyBVKzAwMkQgaXMgJy0nCisgICAgICAg
ICAgICAgICAgLy8gVSswMDNFIGlzICc+JworICAgICAgICAgICAgICAgIGlmICgoc291cmNlLmNo
YXJDb2RlQXQoaW5kZXggKyAxKSA9PT0gMHgyRCkgJiYgKHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4
ICsgMikgPT09IDB4M0UpKSB7CisgICAgICAgICAgICAgICAgICAgIC8vICctLT4nIGlzIGEgc2lu
Z2xlLWxpbmUgY29tbWVudAorICAgICAgICAgICAgICAgICAgICBpbmRleCArPSAzOworICAgICAg
ICAgICAgICAgICAgICBza2lwU2luZ2xlTGluZUNvbW1lbnQoMyk7CisgICAgICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfSBlbHNlIGlmIChjaCA9PT0gMHgzQykgeyAvLyBVKzAwM0MgaXMgJzwnCisg
ICAgICAgICAgICAgICAgaWYgKHNvdXJjZS5zbGljZShpbmRleCArIDEsIGluZGV4ICsgNCkgPT09
ICchLS0nKSB7CisgICAgICAgICAgICAgICAgICAgICsraW5kZXg7IC8vIGA8YAorICAgICAgICAg
ICAgICAgICAgICArK2luZGV4OyAvLyBgIWAKKyAgICAgICAgICAgICAgICAgICAgKytpbmRleDsg
Ly8gYC1gCisgICAgICAgICAgICAgICAgICAgICsraW5kZXg7IC8vIGAtYAorICAgICAgICAgICAg
ICAgICAgICBza2lwU2luZ2xlTGluZUNvbW1lbnQoNCk7CisgICAgICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIH0KKworICAgIGZ1bmN0aW9uIHNjYW5IZXhFc2NhcGUocHJlZml4KSB7Cisg
ICAgICAgIHZhciBpLCBsZW4sIGNoLCBjb2RlID0gMDsKKworICAgICAgICBsZW4gPSAocHJlZml4
ID09PSAndScpID8gNCA6IDI7CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47ICsraSkgewor
ICAgICAgICAgICAgaWYgKGluZGV4IDwgbGVuZ3RoICYmIGlzSGV4RGlnaXQoc291cmNlW2luZGV4
XSkpIHsKKyAgICAgICAgICAgICAgICBjaCA9IHNvdXJjZVtpbmRleCsrXTsKKyAgICAgICAgICAg
ICAgICBjb2RlID0gY29kZSAqIDE2ICsgJzAxMjM0NTY3ODlhYmNkZWYnLmluZGV4T2YoY2gudG9M
b3dlckNhc2UoKSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHJldHVy
biAnJzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gU3RyaW5nLmZy
b21DaGFyQ29kZShjb2RlKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBnZXRFc2NhcGVkSWRlbnRp
ZmllcigpIHsKKyAgICAgICAgdmFyIGNoLCBpZDsKKworICAgICAgICBjaCA9IHNvdXJjZS5jaGFy
Q29kZUF0KGluZGV4KyspOworICAgICAgICBpZCA9IFN0cmluZy5mcm9tQ2hhckNvZGUoY2gpOwor
CisgICAgICAgIC8vICdcdScgKFUrMDA1QywgVSswMDc1KSBkZW5vdGVzIGFuIGVzY2FwZWQgY2hh
cmFjdGVyLgorICAgICAgICBpZiAoY2ggPT09IDB4NUMpIHsKKyAgICAgICAgICAgIGlmIChzb3Vy
Y2UuY2hhckNvZGVBdChpbmRleCkgIT09IDB4NzUpIHsKKyAgICAgICAgICAgICAgICB0aHJvd0Vy
cm9yKHt9LCBNZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW4sICdJTExFR0FMJyk7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICArK2luZGV4OworICAgICAgICAgICAgY2ggPSBzY2FuSGV4RXNjYXBl
KCd1Jyk7CisgICAgICAgICAgICBpZiAoIWNoIHx8IGNoID09PSAnXFwnIHx8ICFpc0lkZW50aWZp
ZXJTdGFydChjaC5jaGFyQ29kZUF0KDApKSkgeworICAgICAgICAgICAgICAgIHRocm93RXJyb3Io
e30sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgJ0lMTEVHQUwnKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGlkID0gY2g7CisgICAgICAgIH0KKworICAgICAgICB3aGlsZSAoaW5kZXgg
PCBsZW5ndGgpIHsKKyAgICAgICAgICAgIGNoID0gc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpOwor
ICAgICAgICAgICAgaWYgKCFpc0lkZW50aWZpZXJQYXJ0KGNoKSkgeworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgKytpbmRleDsKKyAgICAgICAgICAg
IGlkICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoY2gpOworCisgICAgICAgICAgICAvLyAnXHUnIChV
KzAwNUMsIFUrMDA3NSkgZGVub3RlcyBhbiBlc2NhcGVkIGNoYXJhY3Rlci4KKyAgICAgICAgICAg
IGlmIChjaCA9PT0gMHg1QykgeworICAgICAgICAgICAgICAgIGlkID0gaWQuc3Vic3RyKDAsIGlk
Lmxlbmd0aCAtIDEpOworICAgICAgICAgICAgICAgIGlmIChzb3VyY2UuY2hhckNvZGVBdChpbmRl
eCkgIT09IDB4NzUpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2Fn
ZXMuVW5leHBlY3RlZFRva2VuLCAnSUxMRUdBTCcpOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICArK2luZGV4OworICAgICAgICAgICAgICAgIGNoID0gc2NhbkhleEVzY2FwZSgn
dScpOworICAgICAgICAgICAgICAgIGlmICghY2ggfHwgY2ggPT09ICdcXCcgfHwgIWlzSWRlbnRp
ZmllclBhcnQoY2guY2hhckNvZGVBdCgwKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhyb3dF
cnJvcih7fSwgTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuLCAnSUxMRUdBTCcpOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZCArPSBjaDsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorCisgICAgICAgIHJldHVybiBpZDsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBnZXRJZGVu
dGlmaWVyKCkgeworICAgICAgICB2YXIgc3RhcnQsIGNoOworCisgICAgICAgIHN0YXJ0ID0gaW5k
ZXgrKzsKKyAgICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7CisgICAgICAgICAgICBjaCA9
IHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KTsKKyAgICAgICAgICAgIGlmIChjaCA9PT0gMHg1Qykg
eworICAgICAgICAgICAgICAgIC8vIEJsYWNrc2xhc2ggKFUrMDA1QykgbWFya3MgVW5pY29kZSBl
c2NhcGUgc2VxdWVuY2UuCisgICAgICAgICAgICAgICAgaW5kZXggPSBzdGFydDsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZ2V0RXNjYXBlZElkZW50aWZpZXIoKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGlmIChpc0lkZW50aWZpZXJQYXJ0KGNoKSkgeworICAgICAgICAgICAgICAgICsr
aW5kZXg7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHNvdXJjZS5zbGljZShzdGFy
dCwgaW5kZXgpOworICAgIH0KKworICAgIGZ1bmN0aW9uIHNjYW5JZGVudGlmaWVyKCkgeworICAg
ICAgICB2YXIgc3RhcnQsIGlkLCB0eXBlOworCisgICAgICAgIHN0YXJ0ID0gaW5kZXg7CisKKyAg
ICAgICAgLy8gQmFja3NsYXNoIChVKzAwNUMpIHN0YXJ0cyBhbiBlc2NhcGVkIGNoYXJhY3Rlci4K
KyAgICAgICAgaWQgPSAoc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpID09PSAweDVDKSA/IGdldEVz
Y2FwZWRJZGVudGlmaWVyKCkgOiBnZXRJZGVudGlmaWVyKCk7CisKKyAgICAgICAgLy8gVGhlcmUg
aXMgbm8ga2V5d29yZCBvciBsaXRlcmFsIHdpdGggb25seSBvbmUgY2hhcmFjdGVyLgorICAgICAg
ICAvLyBUaHVzLCBpdCBtdXN0IGJlIGFuIGlkZW50aWZpZXIuCisgICAgICAgIGlmIChpZC5sZW5n
dGggPT09IDEpIHsKKyAgICAgICAgICAgIHR5cGUgPSBUb2tlbi5JZGVudGlmaWVyOworICAgICAg
ICB9IGVsc2UgaWYgKGlzS2V5d29yZChpZCkpIHsKKyAgICAgICAgICAgIHR5cGUgPSBUb2tlbi5L
ZXl3b3JkOworICAgICAgICB9IGVsc2UgaWYgKGlkID09PSAnbnVsbCcpIHsKKyAgICAgICAgICAg
IHR5cGUgPSBUb2tlbi5OdWxsTGl0ZXJhbDsKKyAgICAgICAgfSBlbHNlIGlmIChpZCA9PT0gJ3Ry
dWUnIHx8IGlkID09PSAnZmFsc2UnKSB7CisgICAgICAgICAgICB0eXBlID0gVG9rZW4uQm9vbGVh
bkxpdGVyYWw7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB0eXBlID0gVG9rZW4uSWRl
bnRpZmllcjsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICB0eXBl
OiB0eXBlLAorICAgICAgICAgICAgdmFsdWU6IGlkLAorICAgICAgICAgICAgbGluZU51bWJlcjog
bGluZU51bWJlciwKKyAgICAgICAgICAgIGxpbmVTdGFydDogbGluZVN0YXJ0LAorICAgICAgICAg
ICAgc3RhcnQ6IHN0YXJ0LAorICAgICAgICAgICAgZW5kOiBpbmRleAorICAgICAgICB9OworICAg
IH0KKworCisgICAgLy8gNy43IFB1bmN0dWF0b3JzCisKKyAgICBmdW5jdGlvbiBzY2FuUHVuY3R1
YXRvcigpIHsKKyAgICAgICAgdmFyIHN0YXJ0ID0gaW5kZXgsCisgICAgICAgICAgICBjb2RlID0g
c291cmNlLmNoYXJDb2RlQXQoaW5kZXgpLAorICAgICAgICAgICAgY29kZTIsCisgICAgICAgICAg
ICBjaDEgPSBzb3VyY2VbaW5kZXhdLAorICAgICAgICAgICAgY2gyLAorICAgICAgICAgICAgY2gz
LAorICAgICAgICAgICAgY2g0OworCisgICAgICAgIHN3aXRjaCAoY29kZSkgeworCisgICAgICAg
IC8vIENoZWNrIGZvciBtb3N0IGNvbW1vbiBzaW5nbGUtY2hhcmFjdGVyIHB1bmN0dWF0b3JzLgor
ICAgICAgICBjYXNlIDB4MkU6ICAvLyAuIGRvdAorICAgICAgICBjYXNlIDB4Mjg6ICAvLyAoIG9w
ZW4gYnJhY2tldAorICAgICAgICBjYXNlIDB4Mjk6ICAvLyApIGNsb3NlIGJyYWNrZXQKKyAgICAg
ICAgY2FzZSAweDNCOiAgLy8gOyBzZW1pY29sb24KKyAgICAgICAgY2FzZSAweDJDOiAgLy8gLCBj
b21tYQorICAgICAgICBjYXNlIDB4N0I6ICAvLyB7IG9wZW4gY3VybHkgYnJhY2UKKyAgICAgICAg
Y2FzZSAweDdEOiAgLy8gfSBjbG9zZSBjdXJseSBicmFjZQorICAgICAgICBjYXNlIDB4NUI6ICAv
LyBbCisgICAgICAgIGNhc2UgMHg1RDogIC8vIF0KKyAgICAgICAgY2FzZSAweDNBOiAgLy8gOgor
ICAgICAgICBjYXNlIDB4M0Y6ICAvLyA/CisgICAgICAgIGNhc2UgMHg3RTogIC8vIH4KKyAgICAg
ICAgICAgICsraW5kZXg7CisgICAgICAgICAgICBpZiAoZXh0cmEudG9rZW5pemUpIHsKKyAgICAg
ICAgICAgICAgICBpZiAoY29kZSA9PT0gMHgyOCkgeworICAgICAgICAgICAgICAgICAgICBleHRy
YS5vcGVuUGFyZW5Ub2tlbiA9IGV4dHJhLnRva2Vucy5sZW5ndGg7CisgICAgICAgICAgICAgICAg
fSBlbHNlIGlmIChjb2RlID09PSAweDdCKSB7CisgICAgICAgICAgICAgICAgICAgIGV4dHJhLm9w
ZW5DdXJseVRva2VuID0gZXh0cmEudG9rZW5zLmxlbmd0aDsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIHR5cGU6
IFRva2VuLlB1bmN0dWF0b3IsCisgICAgICAgICAgICAgICAgdmFsdWU6IFN0cmluZy5mcm9tQ2hh
ckNvZGUoY29kZSksCisgICAgICAgICAgICAgICAgbGluZU51bWJlcjogbGluZU51bWJlciwKKyAg
ICAgICAgICAgICAgICBsaW5lU3RhcnQ6IGxpbmVTdGFydCwKKyAgICAgICAgICAgICAgICBzdGFy
dDogc3RhcnQsCisgICAgICAgICAgICAgICAgZW5kOiBpbmRleAorICAgICAgICAgICAgfTsKKwor
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgY29kZTIgPSBzb3VyY2UuY2hhckNvZGVBdChp
bmRleCArIDEpOworCisgICAgICAgICAgICAvLyAnPScgKFUrMDAzRCkgbWFya3MgYW4gYXNzaWdu
bWVudCBvciBjb21wYXJpc29uIG9wZXJhdG9yLgorICAgICAgICAgICAgaWYgKGNvZGUyID09PSAw
eDNEKSB7CisgICAgICAgICAgICAgICAgc3dpdGNoIChjb2RlKSB7CisgICAgICAgICAgICAgICAg
Y2FzZSAweDJCOiAgLy8gKworICAgICAgICAgICAgICAgIGNhc2UgMHgyRDogIC8vIC0KKyAgICAg
ICAgICAgICAgICBjYXNlIDB4MkY6ICAvLyAvCisgICAgICAgICAgICAgICAgY2FzZSAweDNDOiAg
Ly8gPAorICAgICAgICAgICAgICAgIGNhc2UgMHgzRTogIC8vID4KKyAgICAgICAgICAgICAgICBj
YXNlIDB4NUU6ICAvLyBeCisgICAgICAgICAgICAgICAgY2FzZSAweDdDOiAgLy8gfAorICAgICAg
ICAgICAgICAgIGNhc2UgMHgyNTogIC8vICUKKyAgICAgICAgICAgICAgICBjYXNlIDB4MjY6ICAv
LyAmCisgICAgICAgICAgICAgICAgY2FzZSAweDJBOiAgLy8gKgorICAgICAgICAgICAgICAgICAg
ICBpbmRleCArPSAyOworICAgICAgICAgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAg
ICAgICAgICAgICAgdHlwZTogVG9rZW4uUHVuY3R1YXRvciwKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHZhbHVlOiBTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGUpICsgU3RyaW5nLmZyb21DaGFyQ29k
ZShjb2RlMiksCisgICAgICAgICAgICAgICAgICAgICAgICBsaW5lTnVtYmVyOiBsaW5lTnVtYmVy
LAorICAgICAgICAgICAgICAgICAgICAgICAgbGluZVN0YXJ0OiBsaW5lU3RhcnQsCisgICAgICAg
ICAgICAgICAgICAgICAgICBzdGFydDogc3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICBl
bmQ6IGluZGV4CisgICAgICAgICAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgICAgICBjYXNl
IDB4MjE6IC8vICEKKyAgICAgICAgICAgICAgICBjYXNlIDB4M0Q6IC8vID0KKyAgICAgICAgICAg
ICAgICAgICAgaW5kZXggKz0gMjsKKworICAgICAgICAgICAgICAgICAgICAvLyAhPT0gYW5kID09
PQorICAgICAgICAgICAgICAgICAgICBpZiAoc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpID09PSAw
eDNEKSB7CisgICAgICAgICAgICAgICAgICAgICAgICArK2luZGV4OworICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgICAg
ICAgICB0eXBlOiBUb2tlbi5QdW5jdHVhdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgdmFs
dWU6IHNvdXJjZS5zbGljZShzdGFydCwgaW5kZXgpLAorICAgICAgICAgICAgICAgICAgICAgICAg
bGluZU51bWJlcjogbGluZU51bWJlciwKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVTdGFy
dDogbGluZVN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQ6IHN0YXJ0LAorICAg
ICAgICAgICAgICAgICAgICAgICAgZW5kOiBpbmRleAorICAgICAgICAgICAgICAgICAgICB9Owor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8v
IDQtY2hhcmFjdGVyIHB1bmN0dWF0b3I6ID4+Pj0KKworICAgICAgICBjaDQgPSBzb3VyY2Uuc3Vi
c3RyKGluZGV4LCA0KTsKKworICAgICAgICBpZiAoY2g0ID09PSAnPj4+PScpIHsKKyAgICAgICAg
ICAgIGluZGV4ICs9IDQ7CisgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIHR5
cGU6IFRva2VuLlB1bmN0dWF0b3IsCisgICAgICAgICAgICAgICAgdmFsdWU6IGNoNCwKKyAgICAg
ICAgICAgICAgICBsaW5lTnVtYmVyOiBsaW5lTnVtYmVyLAorICAgICAgICAgICAgICAgIGxpbmVT
dGFydDogbGluZVN0YXJ0LAorICAgICAgICAgICAgICAgIHN0YXJ0OiBzdGFydCwKKyAgICAgICAg
ICAgICAgICBlbmQ6IGluZGV4CisgICAgICAgICAgICB9OworICAgICAgICB9CisKKyAgICAgICAg
Ly8gMy1jaGFyYWN0ZXIgcHVuY3R1YXRvcnM6ID09PSAhPT0gPj4+IDw8PSA+Pj0KKworICAgICAg
ICBjaDMgPSBjaDQuc3Vic3RyKDAsIDMpOworCisgICAgICAgIGlmIChjaDMgPT09ICc+Pj4nIHx8
IGNoMyA9PT0gJzw8PScgfHwgY2gzID09PSAnPj49JykgeworICAgICAgICAgICAgaW5kZXggKz0g
MzsKKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgdHlwZTogVG9rZW4uUHVu
Y3R1YXRvciwKKyAgICAgICAgICAgICAgICB2YWx1ZTogY2gzLAorICAgICAgICAgICAgICAgIGxp
bmVOdW1iZXI6IGxpbmVOdW1iZXIsCisgICAgICAgICAgICAgICAgbGluZVN0YXJ0OiBsaW5lU3Rh
cnQsCisgICAgICAgICAgICAgICAgc3RhcnQ6IHN0YXJ0LAorICAgICAgICAgICAgICAgIGVuZDog
aW5kZXgKKyAgICAgICAgICAgIH07CisgICAgICAgIH0KKworICAgICAgICAvLyBPdGhlciAyLWNo
YXJhY3RlciBwdW5jdHVhdG9yczogKysgLS0gPDwgPj4gJiYgfHwKKyAgICAgICAgY2gyID0gY2gz
LnN1YnN0cigwLCAyKTsKKworICAgICAgICBpZiAoKGNoMSA9PT0gY2gyWzFdICYmICgnKy08PiZ8
Jy5pbmRleE9mKGNoMSkgPj0gMCkpIHx8IGNoMiA9PT0gJz0+JykgeworICAgICAgICAgICAgaW5k
ZXggKz0gMjsKKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgdHlwZTogVG9r
ZW4uUHVuY3R1YXRvciwKKyAgICAgICAgICAgICAgICB2YWx1ZTogY2gyLAorICAgICAgICAgICAg
ICAgIGxpbmVOdW1iZXI6IGxpbmVOdW1iZXIsCisgICAgICAgICAgICAgICAgbGluZVN0YXJ0OiBs
aW5lU3RhcnQsCisgICAgICAgICAgICAgICAgc3RhcnQ6IHN0YXJ0LAorICAgICAgICAgICAgICAg
IGVuZDogaW5kZXgKKyAgICAgICAgICAgIH07CisgICAgICAgIH0KKworICAgICAgICAvLyAxLWNo
YXJhY3RlciBwdW5jdHVhdG9yczogPCA+ID0gISArIC0gKiAlICYgfCBeIC8KKyAgICAgICAgaWYg
KCc8Pj0hKy0qJSZ8Xi8nLmluZGV4T2YoY2gxKSA+PSAwKSB7CisgICAgICAgICAgICArK2luZGV4
OworICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICB0eXBlOiBUb2tlbi5QdW5j
dHVhdG9yLAorICAgICAgICAgICAgICAgIHZhbHVlOiBjaDEsCisgICAgICAgICAgICAgICAgbGlu
ZU51bWJlcjogbGluZU51bWJlciwKKyAgICAgICAgICAgICAgICBsaW5lU3RhcnQ6IGxpbmVTdGFy
dCwKKyAgICAgICAgICAgICAgICBzdGFydDogc3RhcnQsCisgICAgICAgICAgICAgICAgZW5kOiBp
bmRleAorICAgICAgICAgICAgfTsKKyAgICAgICAgfQorCisgICAgICAgIHRocm93RXJyb3Ioe30s
IE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgJ0lMTEVHQUwnKTsKKyAgICB9CisKKyAgICAvLyA3
LjguMyBOdW1lcmljIExpdGVyYWxzCisKKyAgICBmdW5jdGlvbiBzY2FuSGV4TGl0ZXJhbChzdGFy
dCkgeworICAgICAgICB2YXIgbnVtYmVyID0gJyc7CisKKyAgICAgICAgd2hpbGUgKGluZGV4IDwg
bGVuZ3RoKSB7CisgICAgICAgICAgICBpZiAoIWlzSGV4RGlnaXQoc291cmNlW2luZGV4XSkpIHsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG51bWJl
ciArPSBzb3VyY2VbaW5kZXgrK107CisgICAgICAgIH0KKworICAgICAgICBpZiAobnVtYmVyLmxl
bmd0aCA9PT0gMCkgeworICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuVW5leHBl
Y3RlZFRva2VuLCAnSUxMRUdBTCcpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGlzSWRlbnRp
ZmllclN0YXJ0KHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KSkpIHsKKyAgICAgICAgICAgIHRocm93
RXJyb3Ioe30sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgJ0lMTEVHQUwnKTsKKyAgICAgICAg
fQorCisgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICB0eXBlOiBUb2tlbi5OdW1lcmljTGl0
ZXJhbCwKKyAgICAgICAgICAgIHZhbHVlOiBwYXJzZUludCgnMHgnICsgbnVtYmVyLCAxNiksCisg
ICAgICAgICAgICBsaW5lTnVtYmVyOiBsaW5lTnVtYmVyLAorICAgICAgICAgICAgbGluZVN0YXJ0
OiBsaW5lU3RhcnQsCisgICAgICAgICAgICBzdGFydDogc3RhcnQsCisgICAgICAgICAgICBlbmQ6
IGluZGV4CisgICAgICAgIH07CisgICAgfQorCisgICAgZnVuY3Rpb24gc2Nhbk9jdGFsTGl0ZXJh
bChzdGFydCkgeworICAgICAgICB2YXIgbnVtYmVyID0gJzAnICsgc291cmNlW2luZGV4KytdOwor
ICAgICAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHsKKyAgICAgICAgICAgIGlmICghaXNPY3Rh
bERpZ2l0KHNvdXJjZVtpbmRleF0pKSB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBudW1iZXIgKz0gc291cmNlW2luZGV4KytdOworICAgICAgICB9
CisKKyAgICAgICAgaWYgKGlzSWRlbnRpZmllclN0YXJ0KHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4
KSkgfHwgaXNEZWNpbWFsRGlnaXQoc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpKSkgeworICAgICAg
ICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuLCAnSUxMRUdBTCcp
OworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgIHR5cGU6IFRva2Vu
Lk51bWVyaWNMaXRlcmFsLAorICAgICAgICAgICAgdmFsdWU6IHBhcnNlSW50KG51bWJlciwgOCks
CisgICAgICAgICAgICBvY3RhbDogdHJ1ZSwKKyAgICAgICAgICAgIGxpbmVOdW1iZXI6IGxpbmVO
dW1iZXIsCisgICAgICAgICAgICBsaW5lU3RhcnQ6IGxpbmVTdGFydCwKKyAgICAgICAgICAgIHN0
YXJ0OiBzdGFydCwKKyAgICAgICAgICAgIGVuZDogaW5kZXgKKyAgICAgICAgfTsKKyAgICB9CisK
KyAgICBmdW5jdGlvbiBzY2FuTnVtZXJpY0xpdGVyYWwoKSB7CisgICAgICAgIHZhciBudW1iZXIs
IHN0YXJ0LCBjaDsKKworICAgICAgICBjaCA9IHNvdXJjZVtpbmRleF07CisgICAgICAgIGFzc2Vy
dChpc0RlY2ltYWxEaWdpdChjaC5jaGFyQ29kZUF0KDApKSB8fCAoY2ggPT09ICcuJyksCisgICAg
ICAgICAgICAnTnVtZXJpYyBsaXRlcmFsIG11c3Qgc3RhcnQgd2l0aCBhIGRlY2ltYWwgZGlnaXQg
b3IgYSBkZWNpbWFsIHBvaW50Jyk7CisKKyAgICAgICAgc3RhcnQgPSBpbmRleDsKKyAgICAgICAg
bnVtYmVyID0gJyc7CisgICAgICAgIGlmIChjaCAhPT0gJy4nKSB7CisgICAgICAgICAgICBudW1i
ZXIgPSBzb3VyY2VbaW5kZXgrK107CisgICAgICAgICAgICBjaCA9IHNvdXJjZVtpbmRleF07CisK
KyAgICAgICAgICAgIC8vIEhleCBudW1iZXIgc3RhcnRzIHdpdGggJzB4Jy4KKyAgICAgICAgICAg
IC8vIE9jdGFsIG51bWJlciBzdGFydHMgd2l0aCAnMCcuCisgICAgICAgICAgICBpZiAobnVtYmVy
ID09PSAnMCcpIHsKKyAgICAgICAgICAgICAgICBpZiAoY2ggPT09ICd4JyB8fCBjaCA9PT0gJ1gn
KSB7CisgICAgICAgICAgICAgICAgICAgICsraW5kZXg7CisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBzY2FuSGV4TGl0ZXJhbChzdGFydCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIGlmIChpc09jdGFsRGlnaXQoY2gpKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVy
biBzY2FuT2N0YWxMaXRlcmFsKHN0YXJ0KTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgICAgICAvLyBkZWNpbWFsIG51bWJlciBzdGFydHMgd2l0aCAnMCcgc3VjaCBhcyAnMDknIGlz
IGlsbGVnYWwuCisgICAgICAgICAgICAgICAgaWYgKGNoICYmIGlzRGVjaW1hbERpZ2l0KGNoLmNo
YXJDb2RlQXQoMCkpKSB7CisgICAgICAgICAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3Nh
Z2VzLlVuZXhwZWN0ZWRUb2tlbiwgJ0lMTEVHQUwnKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIHdoaWxlIChpc0RlY2ltYWxEaWdpdChzb3VyY2UuY2hh
ckNvZGVBdChpbmRleCkpKSB7CisgICAgICAgICAgICAgICAgbnVtYmVyICs9IHNvdXJjZVtpbmRl
eCsrXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNoID0gc291cmNlW2luZGV4XTsKKyAg
ICAgICAgfQorCisgICAgICAgIGlmIChjaCA9PT0gJy4nKSB7CisgICAgICAgICAgICBudW1iZXIg
Kz0gc291cmNlW2luZGV4KytdOworICAgICAgICAgICAgd2hpbGUgKGlzRGVjaW1hbERpZ2l0KHNv
dXJjZS5jaGFyQ29kZUF0KGluZGV4KSkpIHsKKyAgICAgICAgICAgICAgICBudW1iZXIgKz0gc291
cmNlW2luZGV4KytdOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2ggPSBzb3VyY2VbaW5k
ZXhdOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGNoID09PSAnZScgfHwgY2ggPT09ICdFJykg
eworICAgICAgICAgICAgbnVtYmVyICs9IHNvdXJjZVtpbmRleCsrXTsKKworICAgICAgICAgICAg
Y2ggPSBzb3VyY2VbaW5kZXhdOworICAgICAgICAgICAgaWYgKGNoID09PSAnKycgfHwgY2ggPT09
ICctJykgeworICAgICAgICAgICAgICAgIG51bWJlciArPSBzb3VyY2VbaW5kZXgrK107CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBpZiAoaXNEZWNpbWFsRGlnaXQoc291cmNlLmNoYXJDb2Rl
QXQoaW5kZXgpKSkgeworICAgICAgICAgICAgICAgIHdoaWxlIChpc0RlY2ltYWxEaWdpdChzb3Vy
Y2UuY2hhckNvZGVBdChpbmRleCkpKSB7CisgICAgICAgICAgICAgICAgICAgIG51bWJlciArPSBz
b3VyY2VbaW5kZXgrK107CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW4s
ICdJTExFR0FMJyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNJ
ZGVudGlmaWVyU3RhcnQoc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpKSkgeworICAgICAgICAgICAg
dGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuLCAnSUxMRUdBTCcpOworICAg
ICAgICB9CisKKyAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgIHR5cGU6IFRva2VuLk51bWVy
aWNMaXRlcmFsLAorICAgICAgICAgICAgdmFsdWU6IHBhcnNlRmxvYXQobnVtYmVyKSwKKyAgICAg
ICAgICAgIGxpbmVOdW1iZXI6IGxpbmVOdW1iZXIsCisgICAgICAgICAgICBsaW5lU3RhcnQ6IGxp
bmVTdGFydCwKKyAgICAgICAgICAgIHN0YXJ0OiBzdGFydCwKKyAgICAgICAgICAgIGVuZDogaW5k
ZXgKKyAgICAgICAgfTsKKyAgICB9CisKKyAgICAvLyA3LjguNCBTdHJpbmcgTGl0ZXJhbHMKKwor
ICAgIGZ1bmN0aW9uIHNjYW5TdHJpbmdMaXRlcmFsKCkgeworICAgICAgICB2YXIgc3RyID0gJycs
IHF1b3RlLCBzdGFydCwgY2gsIGNvZGUsIHVuZXNjYXBlZCwgcmVzdG9yZSwgb2N0YWwgPSBmYWxz
ZSwgc3RhcnRMaW5lTnVtYmVyLCBzdGFydExpbmVTdGFydDsKKyAgICAgICAgc3RhcnRMaW5lTnVt
YmVyID0gbGluZU51bWJlcjsKKyAgICAgICAgc3RhcnRMaW5lU3RhcnQgPSBsaW5lU3RhcnQ7CisK
KyAgICAgICAgcXVvdGUgPSBzb3VyY2VbaW5kZXhdOworICAgICAgICBhc3NlcnQoKHF1b3RlID09
PSAnXCcnIHx8IHF1b3RlID09PSAnIicpLAorICAgICAgICAgICAgJ1N0cmluZyBsaXRlcmFsIG11
c3Qgc3RhcnRzIHdpdGggYSBxdW90ZScpOworCisgICAgICAgIHN0YXJ0ID0gaW5kZXg7CisgICAg
ICAgICsraW5kZXg7CisKKyAgICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7CisgICAgICAg
ICAgICBjaCA9IHNvdXJjZVtpbmRleCsrXTsKKworICAgICAgICAgICAgaWYgKGNoID09PSBxdW90
ZSkgeworICAgICAgICAgICAgICAgIHF1b3RlID0gJyc7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICB9IGVsc2UgaWYgKGNoID09PSAnXFwnKSB7CisgICAgICAgICAgICAgICAg
Y2ggPSBzb3VyY2VbaW5kZXgrK107CisgICAgICAgICAgICAgICAgaWYgKCFjaCB8fCAhaXNMaW5l
VGVybWluYXRvcihjaC5jaGFyQ29kZUF0KDApKSkgeworICAgICAgICAgICAgICAgICAgICBzd2l0
Y2ggKGNoKSB7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3UnOgorICAgICAgICAgICAgICAg
ICAgICBjYXNlICd4JzoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3RvcmUgPSBpbmRleDsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHVuZXNjYXBlZCA9IHNjYW5IZXhFc2NhcGUoY2gpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVuZXNjYXBlZCkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHN0ciArPSB1bmVzY2FwZWQ7CisgICAgICAgICAgICAgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4ID0gcmVzdG9yZTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIgKz0gY2g7CisgICAgICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAg
ICAgY2FzZSAnbic6CisgICAgICAgICAgICAgICAgICAgICAgICBzdHIgKz0gJ1xuJzsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlICdyJzoK
KyAgICAgICAgICAgICAgICAgICAgICAgIHN0ciArPSAnXHInOworICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3QnOgorICAgICAgICAgICAg
ICAgICAgICAgICAgc3RyICs9ICdcdCc7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICAgICAgY2FzZSAnYic6CisgICAgICAgICAgICAgICAgICAgICAgICBz
dHIgKz0gJ1xiJzsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgICAgICBjYXNlICdmJzoKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0ciArPSAnXGYnOwor
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2Ug
J3YnOgorICAgICAgICAgICAgICAgICAgICAgICAgc3RyICs9ICdceDBCJzsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoaXNPY3RhbERpZ2l0KGNoKSkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvZGUgPSAnMDEyMzQ1NjcnLmluZGV4T2YoY2gpOworCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gXDAgaXMgbm90IG9jdGFsIGVzY2FwZSBzZXF1ZW5jZQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb2RlICE9PSAwKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG9jdGFsID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPCBsZW5n
dGggJiYgaXNPY3RhbERpZ2l0KHNvdXJjZVtpbmRleF0pKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG9jdGFsID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29kZSA9IGNvZGUgKiA4ICsgJzAxMjM0NTY3Jy5pbmRleE9mKHNvdXJjZVtpbmRleCsrXSk7
CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMyBkaWdpdHMgYXJlIG9ubHkg
YWxsb3dlZCB3aGVuIHN0cmluZyBzdGFydHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gd2l0aCAwLCAxLCAyLCAzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICgnMDEyMycuaW5kZXhPZihjaCkgPj0gMCAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGluZGV4IDwgbGVuZ3RoICYmCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaXNPY3RhbERpZ2l0KHNvdXJjZVtpbmRleF0pKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlID0gY29kZSAqIDggKyAnMDEyMzQ1NjcnLmlu
ZGV4T2Yoc291cmNlW2luZGV4KytdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzdHIgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShjb2RlKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyICs9IGNoOwor
ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgICAgICArK2xpbmVOdW1iZXI7CisgICAgICAgICAgICAgICAgICAgIGlmIChjaCA9
PT0gICdccicgJiYgc291cmNlW2luZGV4XSA9PT0gJ1xuJykgeworICAgICAgICAgICAgICAgICAg
ICAgICAgKytpbmRleDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICBsaW5lU3RhcnQgPSBpbmRleDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVs
c2UgaWYgKGlzTGluZVRlcm1pbmF0b3IoY2guY2hhckNvZGVBdCgwKSkpIHsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc3RyICs9
IGNoOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKHF1b3RlICE9PSAn
JykgeworICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuVW5leHBlY3RlZFRva2Vu
LCAnSUxMRUdBTCcpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAg
IHR5cGU6IFRva2VuLlN0cmluZ0xpdGVyYWwsCisgICAgICAgICAgICB2YWx1ZTogc3RyLAorICAg
ICAgICAgICAgb2N0YWw6IG9jdGFsLAorICAgICAgICAgICAgc3RhcnRMaW5lTnVtYmVyOiBzdGFy
dExpbmVOdW1iZXIsCisgICAgICAgICAgICBzdGFydExpbmVTdGFydDogc3RhcnRMaW5lU3RhcnQs
CisgICAgICAgICAgICBsaW5lTnVtYmVyOiBsaW5lTnVtYmVyLAorICAgICAgICAgICAgbGluZVN0
YXJ0OiBsaW5lU3RhcnQsCisgICAgICAgICAgICBzdGFydDogc3RhcnQsCisgICAgICAgICAgICBl
bmQ6IGluZGV4CisgICAgICAgIH07CisgICAgfQorCisgICAgZnVuY3Rpb24gdGVzdFJlZ0V4cChw
YXR0ZXJuLCBmbGFncykgeworICAgICAgICB2YXIgdmFsdWU7CisgICAgICAgIHRyeSB7CisgICAg
ICAgICAgICB2YWx1ZSA9IG5ldyBSZWdFeHAocGF0dGVybiwgZmxhZ3MpOworICAgICAgICB9IGNh
dGNoIChlKSB7CisgICAgICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5JbnZhbGlkUmVn
RXhwKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdmFsdWU7CisgICAgfQorCisgICAgZnVu
Y3Rpb24gc2NhblJlZ0V4cEJvZHkoKSB7CisgICAgICAgIHZhciBjaCwgc3RyLCBjbGFzc01hcmtl
ciwgdGVybWluYXRlZCwgYm9keTsKKworICAgICAgICBjaCA9IHNvdXJjZVtpbmRleF07CisgICAg
ICAgIGFzc2VydChjaCA9PT0gJy8nLCAnUmVndWxhciBleHByZXNzaW9uIGxpdGVyYWwgbXVzdCBz
dGFydCB3aXRoIGEgc2xhc2gnKTsKKyAgICAgICAgc3RyID0gc291cmNlW2luZGV4KytdOworCisg
ICAgICAgIGNsYXNzTWFya2VyID0gZmFsc2U7CisgICAgICAgIHRlcm1pbmF0ZWQgPSBmYWxzZTsK
KyAgICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7CisgICAgICAgICAgICBjaCA9IHNvdXJj
ZVtpbmRleCsrXTsKKyAgICAgICAgICAgIHN0ciArPSBjaDsKKyAgICAgICAgICAgIGlmIChjaCA9
PT0gJ1xcJykgeworICAgICAgICAgICAgICAgIGNoID0gc291cmNlW2luZGV4KytdOworICAgICAg
ICAgICAgICAgIC8vIEVDTUEtMjYyIDcuOC41CisgICAgICAgICAgICAgICAgaWYgKGlzTGluZVRl
cm1pbmF0b3IoY2guY2hhckNvZGVBdCgwKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhyb3dF
cnJvcih7fSwgTWVzc2FnZXMuVW50ZXJtaW5hdGVkUmVnRXhwKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgc3RyICs9IGNoOworICAgICAgICAgICAgfSBlbHNlIGlmIChpc0xp
bmVUZXJtaW5hdG9yKGNoLmNoYXJDb2RlQXQoMCkpKSB7CisgICAgICAgICAgICAgICAgdGhyb3dF
cnJvcih7fSwgTWVzc2FnZXMuVW50ZXJtaW5hdGVkUmVnRXhwKTsKKyAgICAgICAgICAgIH0gZWxz
ZSBpZiAoY2xhc3NNYXJrZXIpIHsKKyAgICAgICAgICAgICAgICBpZiAoY2ggPT09ICddJykgewor
ICAgICAgICAgICAgICAgICAgICBjbGFzc01hcmtlciA9IGZhbHNlOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKGNoID09PSAnLycp
IHsKKyAgICAgICAgICAgICAgICAgICAgdGVybWluYXRlZCA9IHRydWU7CisgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2ggPT09ICdbJykgewor
ICAgICAgICAgICAgICAgICAgICBjbGFzc01hcmtlciA9IHRydWU7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKCF0ZXJtaW5hdGVkKSB7
CisgICAgICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5VbnRlcm1pbmF0ZWRSZWdFeHAp
OworICAgICAgICB9CisKKyAgICAgICAgLy8gRXhjbHVkZSBsZWFkaW5nIGFuZCB0cmFpbGluZyBz
bGFzaC4KKyAgICAgICAgYm9keSA9IHN0ci5zdWJzdHIoMSwgc3RyLmxlbmd0aCAtIDIpOworICAg
ICAgICByZXR1cm4geworICAgICAgICAgICAgdmFsdWU6IGJvZHksCisgICAgICAgICAgICBsaXRl
cmFsOiBzdHIKKyAgICAgICAgfTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBzY2FuUmVnRXhwRmxh
Z3MoKSB7CisgICAgICAgIHZhciBjaCwgc3RyLCBmbGFncywgcmVzdG9yZTsKKworICAgICAgICBz
dHIgPSAnJzsKKyAgICAgICAgZmxhZ3MgPSAnJzsKKyAgICAgICAgd2hpbGUgKGluZGV4IDwgbGVu
Z3RoKSB7CisgICAgICAgICAgICBjaCA9IHNvdXJjZVtpbmRleF07CisgICAgICAgICAgICBpZiAo
IWlzSWRlbnRpZmllclBhcnQoY2guY2hhckNvZGVBdCgwKSkpIHsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgKytpbmRleDsKKyAgICAgICAgICAg
IGlmIChjaCA9PT0gJ1xcJyAmJiBpbmRleCA8IGxlbmd0aCkgeworICAgICAgICAgICAgICAgIGNo
ID0gc291cmNlW2luZGV4XTsKKyAgICAgICAgICAgICAgICBpZiAoY2ggPT09ICd1JykgeworICAg
ICAgICAgICAgICAgICAgICArK2luZGV4OworICAgICAgICAgICAgICAgICAgICByZXN0b3JlID0g
aW5kZXg7CisgICAgICAgICAgICAgICAgICAgIGNoID0gc2NhbkhleEVzY2FwZSgndScpOworICAg
ICAgICAgICAgICAgICAgICBpZiAoY2gpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdz
ICs9IGNoOworICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChzdHIgKz0gJ1xcdSc7IHJlc3Rv
cmUgPCBpbmRleDsgKytyZXN0b3JlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ry
ICs9IHNvdXJjZVtyZXN0b3JlXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4ID0gcmVz
dG9yZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzICs9ICd1JzsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHN0ciArPSAnXFx1JzsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQoe30sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRU
b2tlbiwgJ0lMTEVHQUwnKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICAgICAgICBzdHIgKz0gJ1xcJzsKKyAgICAgICAgICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVy
YW50KHt9LCBNZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW4sICdJTExFR0FMJyk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBmbGFncyArPSBj
aDsKKyAgICAgICAgICAgICAgICBzdHIgKz0gY2g7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KworICAgICAgICByZXR1cm4geworICAgICAgICAgICAgdmFsdWU6IGZsYWdzLAorICAgICAgICAg
ICAgbGl0ZXJhbDogc3RyCisgICAgICAgIH07CisgICAgfQorCisgICAgZnVuY3Rpb24gc2NhblJl
Z0V4cCgpIHsKKyAgICAgICAgdmFyIHN0YXJ0LCBib2R5LCBmbGFncywgcGF0dGVybiwgdmFsdWU7
CisKKyAgICAgICAgbG9va2FoZWFkID0gbnVsbDsKKyAgICAgICAgc2tpcENvbW1lbnQoKTsKKyAg
ICAgICAgc3RhcnQgPSBpbmRleDsKKworICAgICAgICBib2R5ID0gc2NhblJlZ0V4cEJvZHkoKTsK
KyAgICAgICAgZmxhZ3MgPSBzY2FuUmVnRXhwRmxhZ3MoKTsKKyAgICAgICAgdmFsdWUgPSB0ZXN0
UmVnRXhwKGJvZHkudmFsdWUsIGZsYWdzLnZhbHVlKTsKKworICAgICAgICBpZiAoZXh0cmEudG9r
ZW5pemUpIHsKKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgdHlwZTogVG9r
ZW4uUmVndWxhckV4cHJlc3Npb24sCisgICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLAorICAg
ICAgICAgICAgICAgIGxpbmVOdW1iZXI6IGxpbmVOdW1iZXIsCisgICAgICAgICAgICAgICAgbGlu
ZVN0YXJ0OiBsaW5lU3RhcnQsCisgICAgICAgICAgICAgICAgc3RhcnQ6IHN0YXJ0LAorICAgICAg
ICAgICAgICAgIGVuZDogaW5kZXgKKyAgICAgICAgICAgIH07CisgICAgICAgIH0KKworICAgICAg
ICByZXR1cm4geworICAgICAgICAgICAgbGl0ZXJhbDogYm9keS5saXRlcmFsICsgZmxhZ3MubGl0
ZXJhbCwKKyAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSwKKyAgICAgICAgICAgIHN0YXJ0OiBzdGFy
dCwKKyAgICAgICAgICAgIGVuZDogaW5kZXgKKyAgICAgICAgfTsKKyAgICB9CisKKyAgICBmdW5j
dGlvbiBjb2xsZWN0UmVnZXgoKSB7CisgICAgICAgIHZhciBwb3MsIGxvYywgcmVnZXgsIHRva2Vu
OworCisgICAgICAgIHNraXBDb21tZW50KCk7CisKKyAgICAgICAgcG9zID0gaW5kZXg7CisgICAg
ICAgIGxvYyA9IHsKKyAgICAgICAgICAgIHN0YXJ0OiB7CisgICAgICAgICAgICAgICAgbGluZTog
bGluZU51bWJlciwKKyAgICAgICAgICAgICAgICBjb2x1bW46IGluZGV4IC0gbGluZVN0YXJ0Cisg
ICAgICAgICAgICB9CisgICAgICAgIH07CisKKyAgICAgICAgcmVnZXggPSBzY2FuUmVnRXhwKCk7
CisgICAgICAgIGxvYy5lbmQgPSB7CisgICAgICAgICAgICBsaW5lOiBsaW5lTnVtYmVyLAorICAg
ICAgICAgICAgY29sdW1uOiBpbmRleCAtIGxpbmVTdGFydAorICAgICAgICB9OworCisgICAgICAg
IC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovCisgICAgICAgIGlmICghZXh0cmEudG9rZW5pemUp
IHsKKyAgICAgICAgICAgIC8vIFBvcCB0aGUgcHJldmlvdXMgdG9rZW4sIHdoaWNoIGlzIGxpa2Vs
eSAnLycgb3IgJy89JworICAgICAgICAgICAgaWYgKGV4dHJhLnRva2Vucy5sZW5ndGggPiAwKSB7
CisgICAgICAgICAgICAgICAgdG9rZW4gPSBleHRyYS50b2tlbnNbZXh0cmEudG9rZW5zLmxlbmd0
aCAtIDFdOworICAgICAgICAgICAgICAgIGlmICh0b2tlbi5yYW5nZVswXSA9PT0gcG9zICYmIHRv
a2VuLnR5cGUgPT09ICdQdW5jdHVhdG9yJykgeworICAgICAgICAgICAgICAgICAgICBpZiAodG9r
ZW4udmFsdWUgPT09ICcvJyB8fCB0b2tlbi52YWx1ZSA9PT0gJy89JykgeworICAgICAgICAgICAg
ICAgICAgICAgICAgZXh0cmEudG9rZW5zLnBvcCgpOworICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBleHRyYS50b2tl
bnMucHVzaCh7CisgICAgICAgICAgICAgICAgdHlwZTogJ1JlZ3VsYXJFeHByZXNzaW9uJywKKyAg
ICAgICAgICAgICAgICB2YWx1ZTogcmVnZXgubGl0ZXJhbCwKKyAgICAgICAgICAgICAgICByYW5n
ZTogW3BvcywgaW5kZXhdLAorICAgICAgICAgICAgICAgIGxvYzogbG9jCisgICAgICAgICAgICB9
KTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiByZWdleDsKKyAgICB9CisKKyAgICBmdW5j
dGlvbiBpc0lkZW50aWZpZXJOYW1lKHRva2VuKSB7CisgICAgICAgIHJldHVybiB0b2tlbi50eXBl
ID09PSBUb2tlbi5JZGVudGlmaWVyIHx8CisgICAgICAgICAgICB0b2tlbi50eXBlID09PSBUb2tl
bi5LZXl3b3JkIHx8CisgICAgICAgICAgICB0b2tlbi50eXBlID09PSBUb2tlbi5Cb29sZWFuTGl0
ZXJhbCB8fAorICAgICAgICAgICAgdG9rZW4udHlwZSA9PT0gVG9rZW4uTnVsbExpdGVyYWw7Cisg
ICAgfQorCisgICAgZnVuY3Rpb24gYWR2YW5jZVNsYXNoKCkgeworICAgICAgICB2YXIgcHJldlRv
a2VuLAorICAgICAgICAgICAgY2hlY2tUb2tlbjsKKyAgICAgICAgLy8gVXNpbmcgdGhlIGZvbGxv
d2luZyBhbGdvcml0aG06CisgICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tb3ppbGxhL3N3
ZWV0LmpzL3dpa2kvZGVzaWduCisgICAgICAgIHByZXZUb2tlbiA9IGV4dHJhLnRva2Vuc1tleHRy
YS50b2tlbnMubGVuZ3RoIC0gMV07CisgICAgICAgIGlmICghcHJldlRva2VuKSB7CisgICAgICAg
ICAgICAvLyBOb3RoaW5nIGJlZm9yZSB0aGF0OiBpdCBjYW5ub3QgYmUgYSBkaXZpc2lvbi4KKyAg
ICAgICAgICAgIHJldHVybiBjb2xsZWN0UmVnZXgoKTsKKyAgICAgICAgfQorICAgICAgICBpZiAo
cHJldlRva2VuLnR5cGUgPT09ICdQdW5jdHVhdG9yJykgeworICAgICAgICAgICAgaWYgKHByZXZU
b2tlbi52YWx1ZSA9PT0gJ10nKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHNjYW5QdW5jdHVh
dG9yKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAocHJldlRva2VuLnZhbHVlID09
PSAnKScpIHsKKyAgICAgICAgICAgICAgICBjaGVja1Rva2VuID0gZXh0cmEudG9rZW5zW2V4dHJh
Lm9wZW5QYXJlblRva2VuIC0gMV07CisgICAgICAgICAgICAgICAgaWYgKGNoZWNrVG9rZW4gJiYK
KyAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrVG9rZW4udHlwZSA9PT0gJ0tleXdvcmQnICYm
CisgICAgICAgICAgICAgICAgICAgICAgICAoY2hlY2tUb2tlbi52YWx1ZSA9PT0gJ2lmJyB8fAor
ICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrVG9rZW4udmFsdWUgPT09ICd3aGlsZScgfHwK
KyAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja1Rva2VuLnZhbHVlID09PSAnZm9yJyB8fAor
ICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrVG9rZW4udmFsdWUgPT09ICd3aXRoJykpIHsK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbGxlY3RSZWdleCgpOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gc2NhblB1bmN0dWF0b3IoKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGlmIChwcmV2VG9rZW4udmFsdWUgPT09ICd9JykgeworICAgICAg
ICAgICAgICAgIC8vIERpdmlkaW5nIGEgZnVuY3Rpb24gYnkgYW55dGhpbmcgbWFrZXMgbGl0dGxl
IHNlbnNlLAorICAgICAgICAgICAgICAgIC8vIGJ1dCB3ZSBoYXZlIHRvIGNoZWNrIGZvciB0aGF0
LgorICAgICAgICAgICAgICAgIGlmIChleHRyYS50b2tlbnNbZXh0cmEub3BlbkN1cmx5VG9rZW4g
LSAzXSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmEudG9rZW5zW2V4dHJhLm9wZW5D
dXJseVRva2VuIC0gM10udHlwZSA9PT0gJ0tleXdvcmQnKSB7CisgICAgICAgICAgICAgICAgICAg
IC8vIEFub255bW91cyBmdW5jdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgY2hlY2tUb2tlbiA9
IGV4dHJhLnRva2Vuc1tleHRyYS5vcGVuQ3VybHlUb2tlbiAtIDRdOworICAgICAgICAgICAgICAg
ICAgICBpZiAoIWNoZWNrVG9rZW4pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBz
Y2FuUHVuY3R1YXRvcigpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
fSBlbHNlIGlmIChleHRyYS50b2tlbnNbZXh0cmEub3BlbkN1cmx5VG9rZW4gLSA0XSAmJgorICAg
ICAgICAgICAgICAgICAgICAgICAgZXh0cmEudG9rZW5zW2V4dHJhLm9wZW5DdXJseVRva2VuIC0g
NF0udHlwZSA9PT0gJ0tleXdvcmQnKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIE5hbWVkIGZ1
bmN0aW9uLgorICAgICAgICAgICAgICAgICAgICBjaGVja1Rva2VuID0gZXh0cmEudG9rZW5zW2V4
dHJhLm9wZW5DdXJseVRva2VuIC0gNV07CisgICAgICAgICAgICAgICAgICAgIGlmICghY2hlY2tU
b2tlbikgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbGxlY3RSZWdleCgpOwor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHNjYW5QdW5jdHVhdG9yKCk7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIC8vIGNoZWNrVG9rZW4gZGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBmdW5j
dGlvbiBpcworICAgICAgICAgICAgICAgIC8vIGEgZGVjbGFyYXRpb24gb3IgYW4gZXhwcmVzc2lv
bi4KKyAgICAgICAgICAgICAgICBpZiAoRm5FeHByVG9rZW5zLmluZGV4T2YoY2hlY2tUb2tlbi52
YWx1ZSkgPj0gMCkgeworICAgICAgICAgICAgICAgICAgICAvLyBJdCBpcyBhbiBleHByZXNzaW9u
LgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2NhblB1bmN0dWF0b3IoKTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgLy8gSXQgaXMgYSBkZWNsYXJhdGlvbi4KKyAgICAg
ICAgICAgICAgICByZXR1cm4gY29sbGVjdFJlZ2V4KCk7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICByZXR1cm4gY29sbGVjdFJlZ2V4KCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHByZXZU
b2tlbi50eXBlID09PSAnS2V5d29yZCcpIHsKKyAgICAgICAgICAgIHJldHVybiBjb2xsZWN0UmVn
ZXgoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gc2NhblB1bmN0dWF0b3IoKTsKKyAgICB9
CisKKyAgICBmdW5jdGlvbiBhZHZhbmNlKCkgeworICAgICAgICB2YXIgY2g7CisKKyAgICAgICAg
c2tpcENvbW1lbnQoKTsKKworICAgICAgICBpZiAoaW5kZXggPj0gbGVuZ3RoKSB7CisgICAgICAg
ICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIHR5cGU6IFRva2VuLkVPRiwKKyAgICAgICAg
ICAgICAgICBsaW5lTnVtYmVyOiBsaW5lTnVtYmVyLAorICAgICAgICAgICAgICAgIGxpbmVTdGFy
dDogbGluZVN0YXJ0LAorICAgICAgICAgICAgICAgIHN0YXJ0OiBpbmRleCwKKyAgICAgICAgICAg
ICAgICBlbmQ6IGluZGV4CisgICAgICAgICAgICB9OworICAgICAgICB9CisKKyAgICAgICAgY2gg
PSBzb3VyY2UuY2hhckNvZGVBdChpbmRleCk7CisKKyAgICAgICAgaWYgKGlzSWRlbnRpZmllclN0
YXJ0KGNoKSkgeworICAgICAgICAgICAgcmV0dXJuIHNjYW5JZGVudGlmaWVyKCk7CisgICAgICAg
IH0KKworICAgICAgICAvLyBWZXJ5IGNvbW1vbjogKCBhbmQgKSBhbmQgOworICAgICAgICBpZiAo
Y2ggPT09IDB4MjggfHwgY2ggPT09IDB4MjkgfHwgY2ggPT09IDB4M0IpIHsKKyAgICAgICAgICAg
IHJldHVybiBzY2FuUHVuY3R1YXRvcigpOworICAgICAgICB9CisKKyAgICAgICAgLy8gU3RyaW5n
IGxpdGVyYWwgc3RhcnRzIHdpdGggc2luZ2xlIHF1b3RlIChVKzAwMjcpIG9yIGRvdWJsZSBxdW90
ZSAoVSswMDIyKS4KKyAgICAgICAgaWYgKGNoID09PSAweDI3IHx8IGNoID09PSAweDIyKSB7Cisg
ICAgICAgICAgICByZXR1cm4gc2NhblN0cmluZ0xpdGVyYWwoKTsKKyAgICAgICAgfQorCisKKyAg
ICAgICAgLy8gRG90ICguKSBVKzAwMkUgY2FuIGFsc28gc3RhcnQgYSBmbG9hdGluZy1wb2ludCBu
dW1iZXIsIGhlbmNlIHRoZSBuZWVkCisgICAgICAgIC8vIHRvIGNoZWNrIHRoZSBuZXh0IGNoYXJh
Y3Rlci4KKyAgICAgICAgaWYgKGNoID09PSAweDJFKSB7CisgICAgICAgICAgICBpZiAoaXNEZWNp
bWFsRGlnaXQoc291cmNlLmNoYXJDb2RlQXQoaW5kZXggKyAxKSkpIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gc2Nhbk51bWVyaWNMaXRlcmFsKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICByZXR1cm4gc2NhblB1bmN0dWF0b3IoKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpc0Rl
Y2ltYWxEaWdpdChjaCkpIHsKKyAgICAgICAgICAgIHJldHVybiBzY2FuTnVtZXJpY0xpdGVyYWwo
KTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFNsYXNoICgvKSBVKzAwMkYgY2FuIGFsc28gc3Rh
cnQgYSByZWdleC4KKyAgICAgICAgaWYgKGV4dHJhLnRva2VuaXplICYmIGNoID09PSAweDJGKSB7
CisgICAgICAgICAgICByZXR1cm4gYWR2YW5jZVNsYXNoKCk7CisgICAgICAgIH0KKworICAgICAg
ICByZXR1cm4gc2NhblB1bmN0dWF0b3IoKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBjb2xsZWN0
VG9rZW4oKSB7CisgICAgICAgIHZhciBsb2MsIHRva2VuLCByYW5nZSwgdmFsdWU7CisKKyAgICAg
ICAgc2tpcENvbW1lbnQoKTsKKyAgICAgICAgbG9jID0geworICAgICAgICAgICAgc3RhcnQ6IHsK
KyAgICAgICAgICAgICAgICBsaW5lOiBsaW5lTnVtYmVyLAorICAgICAgICAgICAgICAgIGNvbHVt
bjogaW5kZXggLSBsaW5lU3RhcnQKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKworICAgICAg
ICB0b2tlbiA9IGFkdmFuY2UoKTsKKyAgICAgICAgbG9jLmVuZCA9IHsKKyAgICAgICAgICAgIGxp
bmU6IGxpbmVOdW1iZXIsCisgICAgICAgICAgICBjb2x1bW46IGluZGV4IC0gbGluZVN0YXJ0Cisg
ICAgICAgIH07CisKKyAgICAgICAgaWYgKHRva2VuLnR5cGUgIT09IFRva2VuLkVPRikgeworICAg
ICAgICAgICAgdmFsdWUgPSBzb3VyY2Uuc2xpY2UodG9rZW4uc3RhcnQsIHRva2VuLmVuZCk7Cisg
ICAgICAgICAgICBleHRyYS50b2tlbnMucHVzaCh7CisgICAgICAgICAgICAgICAgdHlwZTogVG9r
ZW5OYW1lW3Rva2VuLnR5cGVdLAorICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSwKKyAgICAg
ICAgICAgICAgICByYW5nZTogW3Rva2VuLnN0YXJ0LCB0b2tlbi5lbmRdLAorICAgICAgICAgICAg
ICAgIGxvYzogbG9jCisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVy
biB0b2tlbjsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBsZXgoKSB7CisgICAgICAgIHZhciB0b2tl
bjsKKworICAgICAgICB0b2tlbiA9IGxvb2thaGVhZDsKKyAgICAgICAgaW5kZXggPSB0b2tlbi5l
bmQ7CisgICAgICAgIGxpbmVOdW1iZXIgPSB0b2tlbi5saW5lTnVtYmVyOworICAgICAgICBsaW5l
U3RhcnQgPSB0b2tlbi5saW5lU3RhcnQ7CisKKyAgICAgICAgbG9va2FoZWFkID0gKHR5cGVvZiBl
eHRyYS50b2tlbnMgIT09ICd1bmRlZmluZWQnKSA/IGNvbGxlY3RUb2tlbigpIDogYWR2YW5jZSgp
OworCisgICAgICAgIGluZGV4ID0gdG9rZW4uZW5kOworICAgICAgICBsaW5lTnVtYmVyID0gdG9r
ZW4ubGluZU51bWJlcjsKKyAgICAgICAgbGluZVN0YXJ0ID0gdG9rZW4ubGluZVN0YXJ0OworCisg
ICAgICAgIHJldHVybiB0b2tlbjsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBwZWVrKCkgeworICAg
ICAgICB2YXIgcG9zLCBsaW5lLCBzdGFydDsKKworICAgICAgICBwb3MgPSBpbmRleDsKKyAgICAg
ICAgbGluZSA9IGxpbmVOdW1iZXI7CisgICAgICAgIHN0YXJ0ID0gbGluZVN0YXJ0OworICAgICAg
ICBsb29rYWhlYWQgPSAodHlwZW9mIGV4dHJhLnRva2VucyAhPT0gJ3VuZGVmaW5lZCcpID8gY29s
bGVjdFRva2VuKCkgOiBhZHZhbmNlKCk7CisgICAgICAgIGluZGV4ID0gcG9zOworICAgICAgICBs
aW5lTnVtYmVyID0gbGluZTsKKyAgICAgICAgbGluZVN0YXJ0ID0gc3RhcnQ7CisgICAgfQorCisg
ICAgZnVuY3Rpb24gUG9zaXRpb24obGluZSwgY29sdW1uKSB7CisgICAgICAgIHRoaXMubGluZSA9
IGxpbmU7CisgICAgICAgIHRoaXMuY29sdW1uID0gY29sdW1uOworICAgIH0KKworICAgIGZ1bmN0
aW9uIFNvdXJjZUxvY2F0aW9uKHN0YXJ0TGluZSwgc3RhcnRDb2x1bW4sIGxpbmUsIGNvbHVtbikg
eworICAgICAgICB0aGlzLnN0YXJ0ID0gbmV3IFBvc2l0aW9uKHN0YXJ0TGluZSwgc3RhcnRDb2x1
bW4pOworICAgICAgICB0aGlzLmVuZCA9IG5ldyBQb3NpdGlvbihsaW5lLCBjb2x1bW4pOworICAg
IH0KKworICAgIFN5bnRheFRyZWVEZWxlZ2F0ZSA9IHsKKworICAgICAgICBuYW1lOiAnU3ludGF4
VHJlZScsCisKKyAgICAgICAgcHJvY2Vzc0NvbW1lbnQ6IGZ1bmN0aW9uIChub2RlKSB7CisgICAg
ICAgICAgICB2YXIgbGFzdENoaWxkLCB0cmFpbGluZ0NvbW1lbnRzOworCisgICAgICAgICAgICBp
ZiAobm9kZS50eXBlID09PSBTeW50YXguUHJvZ3JhbSkgeworICAgICAgICAgICAgICAgIGlmIChu
b2RlLmJvZHkubGVuZ3RoID4gMCkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoZXh0cmEudHJh
aWxpbmdDb21tZW50cy5sZW5ndGggPiAwKSB7CisgICAgICAgICAgICAgICAgaWYgKGV4dHJhLnRy
YWlsaW5nQ29tbWVudHNbMF0ucmFuZ2VbMF0gPj0gbm9kZS5yYW5nZVsxXSkgeworICAgICAgICAg
ICAgICAgICAgICB0cmFpbGluZ0NvbW1lbnRzID0gZXh0cmEudHJhaWxpbmdDb21tZW50czsKKyAg
ICAgICAgICAgICAgICAgICAgZXh0cmEudHJhaWxpbmdDb21tZW50cyA9IFtdOworICAgICAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGV4dHJhLnRyYWlsaW5nQ29tbWVu
dHMubGVuZ3RoID0gMDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgICAgIGlmIChleHRyYS5ib3R0b21SaWdodFN0YWNrLmxlbmd0aCA+IDAgJiYK
KyAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhLmJvdHRvbVJpZ2h0U3RhY2tbZXh0cmEuYm90
dG9tUmlnaHRTdGFjay5sZW5ndGggLSAxXS50cmFpbGluZ0NvbW1lbnRzICYmCisgICAgICAgICAg
ICAgICAgICAgICAgICBleHRyYS5ib3R0b21SaWdodFN0YWNrW2V4dHJhLmJvdHRvbVJpZ2h0U3Rh
Y2subGVuZ3RoIC0gMV0udHJhaWxpbmdDb21tZW50c1swXS5yYW5nZVswXSA+PSBub2RlLnJhbmdl
WzFdKSB7CisgICAgICAgICAgICAgICAgICAgIHRyYWlsaW5nQ29tbWVudHMgPSBleHRyYS5ib3R0
b21SaWdodFN0YWNrW2V4dHJhLmJvdHRvbVJpZ2h0U3RhY2subGVuZ3RoIC0gMV0udHJhaWxpbmdD
b21tZW50czsKKyAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGV4dHJhLmJvdHRvbVJpZ2h0U3Rh
Y2tbZXh0cmEuYm90dG9tUmlnaHRTdGFjay5sZW5ndGggLSAxXS50cmFpbGluZ0NvbW1lbnRzOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gRWF0aW5n
IHRoZSBzdGFjay4KKyAgICAgICAgICAgIHdoaWxlIChleHRyYS5ib3R0b21SaWdodFN0YWNrLmxl
bmd0aCA+IDAgJiYgZXh0cmEuYm90dG9tUmlnaHRTdGFja1tleHRyYS5ib3R0b21SaWdodFN0YWNr
Lmxlbmd0aCAtIDFdLnJhbmdlWzBdID49IG5vZGUucmFuZ2VbMF0pIHsKKyAgICAgICAgICAgICAg
ICBsYXN0Q2hpbGQgPSBleHRyYS5ib3R0b21SaWdodFN0YWNrLnBvcCgpOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBpZiAobGFzdENoaWxkKSB7CisgICAgICAgICAgICAgICAgaWYgKGxh
c3RDaGlsZC5sZWFkaW5nQ29tbWVudHMgJiYgbGFzdENoaWxkLmxlYWRpbmdDb21tZW50c1tsYXN0
Q2hpbGQubGVhZGluZ0NvbW1lbnRzLmxlbmd0aCAtIDFdLnJhbmdlWzFdIDw9IG5vZGUucmFuZ2Vb
MF0pIHsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS5sZWFkaW5nQ29tbWVudHMgPSBsYXN0Q2hp
bGQubGVhZGluZ0NvbW1lbnRzOworICAgICAgICAgICAgICAgICAgICBkZWxldGUgbGFzdENoaWxk
LmxlYWRpbmdDb21tZW50czsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2Ug
aWYgKGV4dHJhLmxlYWRpbmdDb21tZW50cy5sZW5ndGggPiAwICYmIGV4dHJhLmxlYWRpbmdDb21t
ZW50c1tleHRyYS5sZWFkaW5nQ29tbWVudHMubGVuZ3RoIC0gMV0ucmFuZ2VbMV0gPD0gbm9kZS5y
YW5nZVswXSkgeworICAgICAgICAgICAgICAgIG5vZGUubGVhZGluZ0NvbW1lbnRzID0gZXh0cmEu
bGVhZGluZ0NvbW1lbnRzOworICAgICAgICAgICAgICAgIGV4dHJhLmxlYWRpbmdDb21tZW50cyA9
IFtdOworICAgICAgICAgICAgfQorCisKKyAgICAgICAgICAgIGlmICh0cmFpbGluZ0NvbW1lbnRz
KSB7CisgICAgICAgICAgICAgICAgbm9kZS50cmFpbGluZ0NvbW1lbnRzID0gdHJhaWxpbmdDb21t
ZW50czsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZXh0cmEuYm90dG9tUmlnaHRTdGFj
ay5wdXNoKG5vZGUpOworICAgICAgICB9LAorCisgICAgICAgIG1hcmtFbmQ6IGZ1bmN0aW9uIChu
b2RlLCBzdGFydFRva2VuKSB7CisgICAgICAgICAgICBpZiAoZXh0cmEucmFuZ2UpIHsKKyAgICAg
ICAgICAgICAgICBub2RlLnJhbmdlID0gW3N0YXJ0VG9rZW4uc3RhcnQsIGluZGV4XTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGlmIChleHRyYS5sb2MpIHsKKyAgICAgICAgICAgICAgICBu
b2RlLmxvYyA9IG5ldyBTb3VyY2VMb2NhdGlvbigKKyAgICAgICAgICAgICAgICAgICAgc3RhcnRU
b2tlbi5zdGFydExpbmVOdW1iZXIgPT09IHVuZGVmaW5lZCA/ICBzdGFydFRva2VuLmxpbmVOdW1i
ZXIgOiBzdGFydFRva2VuLnN0YXJ0TGluZU51bWJlciwKKyAgICAgICAgICAgICAgICAgICAgc3Rh
cnRUb2tlbi5zdGFydCAtIChzdGFydFRva2VuLnN0YXJ0TGluZVN0YXJ0ID09PSB1bmRlZmluZWQg
PyAgc3RhcnRUb2tlbi5saW5lU3RhcnQgOiBzdGFydFRva2VuLnN0YXJ0TGluZVN0YXJ0KSwKKyAg
ICAgICAgICAgICAgICAgICAgbGluZU51bWJlciwKKyAgICAgICAgICAgICAgICAgICAgaW5kZXgg
LSBsaW5lU3RhcnQKKyAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgICAgIHRoaXMucG9z
dFByb2Nlc3Mobm9kZSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChleHRyYS5h
dHRhY2hDb21tZW50KSB7CisgICAgICAgICAgICAgICAgdGhpcy5wcm9jZXNzQ29tbWVudChub2Rl
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBub2RlOworICAgICAgICB9LAor
CisgICAgICAgIHBvc3RQcm9jZXNzOiBmdW5jdGlvbiAobm9kZSkgeworICAgICAgICAgICAgaWYg
KGV4dHJhLnNvdXJjZSkgeworICAgICAgICAgICAgICAgIG5vZGUubG9jLnNvdXJjZSA9IGV4dHJh
LnNvdXJjZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBub2RlOworICAgICAg
ICB9LAorCisgICAgICAgIGNyZWF0ZUFycmF5RXhwcmVzc2lvbjogZnVuY3Rpb24gKGVsZW1lbnRz
KSB7CisgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5B
cnJheUV4cHJlc3Npb24sCisgICAgICAgICAgICAgICAgZWxlbWVudHM6IGVsZW1lbnRzCisgICAg
ICAgICAgICB9OworICAgICAgICB9LAorCisgICAgICAgIGNyZWF0ZUFzc2lnbm1lbnRFeHByZXNz
aW9uOiBmdW5jdGlvbiAob3BlcmF0b3IsIGxlZnQsIHJpZ2h0KSB7CisgICAgICAgICAgICByZXR1
cm4geworICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5Bc3NpZ25tZW50RXhwcmVzc2lvbiwK
KyAgICAgICAgICAgICAgICBvcGVyYXRvcjogb3BlcmF0b3IsCisgICAgICAgICAgICAgICAgbGVm
dDogbGVmdCwKKyAgICAgICAgICAgICAgICByaWdodDogcmlnaHQKKyAgICAgICAgICAgIH07Cisg
ICAgICAgIH0sCisKKyAgICAgICAgY3JlYXRlQmluYXJ5RXhwcmVzc2lvbjogZnVuY3Rpb24gKG9w
ZXJhdG9yLCBsZWZ0LCByaWdodCkgeworICAgICAgICAgICAgdmFyIHR5cGUgPSAob3BlcmF0b3Ig
PT09ICd8fCcgfHwgb3BlcmF0b3IgPT09ICcmJicpID8gU3ludGF4LkxvZ2ljYWxFeHByZXNzaW9u
IDoKKyAgICAgICAgICAgICAgICAgICAgICAgIFN5bnRheC5CaW5hcnlFeHByZXNzaW9uOworICAg
ICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICB0eXBlOiB0eXBlLAorICAgICAgICAg
ICAgICAgIG9wZXJhdG9yOiBvcGVyYXRvciwKKyAgICAgICAgICAgICAgICBsZWZ0OiBsZWZ0LAor
ICAgICAgICAgICAgICAgIHJpZ2h0OiByaWdodAorICAgICAgICAgICAgfTsKKyAgICAgICAgfSwK
KworICAgICAgICBjcmVhdGVCbG9ja1N0YXRlbWVudDogZnVuY3Rpb24gKGJvZHkpIHsKKyAgICAg
ICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgdHlwZTogU3ludGF4LkJsb2NrU3RhdGVt
ZW50LAorICAgICAgICAgICAgICAgIGJvZHk6IGJvZHkKKyAgICAgICAgICAgIH07CisgICAgICAg
IH0sCisKKyAgICAgICAgY3JlYXRlQnJlYWtTdGF0ZW1lbnQ6IGZ1bmN0aW9uIChsYWJlbCkgewor
ICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguQnJlYWtT
dGF0ZW1lbnQsCisgICAgICAgICAgICAgICAgbGFiZWw6IGxhYmVsCisgICAgICAgICAgICB9Owor
ICAgICAgICB9LAorCisgICAgICAgIGNyZWF0ZUNhbGxFeHByZXNzaW9uOiBmdW5jdGlvbiAoY2Fs
bGVlLCBhcmdzKSB7CisgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIHR5cGU6
IFN5bnRheC5DYWxsRXhwcmVzc2lvbiwKKyAgICAgICAgICAgICAgICBjYWxsZWU6IGNhbGxlZSwK
KyAgICAgICAgICAgICAgICAnYXJndW1lbnRzJzogYXJncworICAgICAgICAgICAgfTsKKyAgICAg
ICAgfSwKKworICAgICAgICBjcmVhdGVDYXRjaENsYXVzZTogZnVuY3Rpb24gKHBhcmFtLCBib2R5
KSB7CisgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5D
YXRjaENsYXVzZSwKKyAgICAgICAgICAgICAgICBwYXJhbTogcGFyYW0sCisgICAgICAgICAgICAg
ICAgYm9keTogYm9keQorICAgICAgICAgICAgfTsKKyAgICAgICAgfSwKKworICAgICAgICBjcmVh
dGVDb25kaXRpb25hbEV4cHJlc3Npb246IGZ1bmN0aW9uICh0ZXN0LCBjb25zZXF1ZW50LCBhbHRl
cm5hdGUpIHsKKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgdHlwZTogU3lu
dGF4LkNvbmRpdGlvbmFsRXhwcmVzc2lvbiwKKyAgICAgICAgICAgICAgICB0ZXN0OiB0ZXN0LAor
ICAgICAgICAgICAgICAgIGNvbnNlcXVlbnQ6IGNvbnNlcXVlbnQsCisgICAgICAgICAgICAgICAg
YWx0ZXJuYXRlOiBhbHRlcm5hdGUKKyAgICAgICAgICAgIH07CisgICAgICAgIH0sCisKKyAgICAg
ICAgY3JlYXRlQ29udGludWVTdGF0ZW1lbnQ6IGZ1bmN0aW9uIChsYWJlbCkgeworICAgICAgICAg
ICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguQ29udGludWVTdGF0ZW1l
bnQsCisgICAgICAgICAgICAgICAgbGFiZWw6IGxhYmVsCisgICAgICAgICAgICB9OworICAgICAg
ICB9LAorCisgICAgICAgIGNyZWF0ZURlYnVnZ2VyU3RhdGVtZW50OiBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5EZWJ1Z2dl
clN0YXRlbWVudAorICAgICAgICAgICAgfTsKKyAgICAgICAgfSwKKworICAgICAgICBjcmVhdGVE
b1doaWxlU3RhdGVtZW50OiBmdW5jdGlvbiAoYm9keSwgdGVzdCkgeworICAgICAgICAgICAgcmV0
dXJuIHsKKyAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguRG9XaGlsZVN0YXRlbWVudCwKKyAg
ICAgICAgICAgICAgICBib2R5OiBib2R5LAorICAgICAgICAgICAgICAgIHRlc3Q6IHRlc3QKKyAg
ICAgICAgICAgIH07CisgICAgICAgIH0sCisKKyAgICAgICAgY3JlYXRlRW1wdHlTdGF0ZW1lbnQ6
IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgdHlw
ZTogU3ludGF4LkVtcHR5U3RhdGVtZW50CisgICAgICAgICAgICB9OworICAgICAgICB9LAorCisg
ICAgICAgIGNyZWF0ZUV4cHJlc3Npb25TdGF0ZW1lbnQ6IGZ1bmN0aW9uIChleHByZXNzaW9uKSB7
CisgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5FeHBy
ZXNzaW9uU3RhdGVtZW50LAorICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IGV4cHJlc3Npb24K
KyAgICAgICAgICAgIH07CisgICAgICAgIH0sCisKKyAgICAgICAgY3JlYXRlRm9yU3RhdGVtZW50
OiBmdW5jdGlvbiAoaW5pdCwgdGVzdCwgdXBkYXRlLCBib2R5KSB7CisgICAgICAgICAgICByZXR1
cm4geworICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5Gb3JTdGF0ZW1lbnQsCisgICAgICAg
ICAgICAgICAgaW5pdDogaW5pdCwKKyAgICAgICAgICAgICAgICB0ZXN0OiB0ZXN0LAorICAgICAg
ICAgICAgICAgIHVwZGF0ZTogdXBkYXRlLAorICAgICAgICAgICAgICAgIGJvZHk6IGJvZHkKKyAg
ICAgICAgICAgIH07CisgICAgICAgIH0sCisKKyAgICAgICAgY3JlYXRlRm9ySW5TdGF0ZW1lbnQ6
IGZ1bmN0aW9uIChsZWZ0LCByaWdodCwgYm9keSkgeworICAgICAgICAgICAgcmV0dXJuIHsKKyAg
ICAgICAgICAgICAgICB0eXBlOiBTeW50YXguRm9ySW5TdGF0ZW1lbnQsCisgICAgICAgICAgICAg
ICAgbGVmdDogbGVmdCwKKyAgICAgICAgICAgICAgICByaWdodDogcmlnaHQsCisgICAgICAgICAg
ICAgICAgYm9keTogYm9keSwKKyAgICAgICAgICAgICAgICBlYWNoOiBmYWxzZQorICAgICAgICAg
ICAgfTsKKyAgICAgICAgfSwKKworICAgICAgICBjcmVhdGVGdW5jdGlvbkRlY2xhcmF0aW9uOiBm
dW5jdGlvbiAoaWQsIHBhcmFtcywgZGVmYXVsdHMsIGJvZHkpIHsKKyAgICAgICAgICAgIHJldHVy
biB7CisgICAgICAgICAgICAgICAgdHlwZTogU3ludGF4LkZ1bmN0aW9uRGVjbGFyYXRpb24sCisg
ICAgICAgICAgICAgICAgaWQ6IGlkLAorICAgICAgICAgICAgICAgIHBhcmFtczogcGFyYW1zLAor
ICAgICAgICAgICAgICAgIGRlZmF1bHRzOiBkZWZhdWx0cywKKyAgICAgICAgICAgICAgICBib2R5
OiBib2R5LAorICAgICAgICAgICAgICAgIHJlc3Q6IG51bGwsCisgICAgICAgICAgICAgICAgZ2Vu
ZXJhdG9yOiBmYWxzZSwKKyAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBmYWxzZQorICAgICAg
ICAgICAgfTsKKyAgICAgICAgfSwKKworICAgICAgICBjcmVhdGVGdW5jdGlvbkV4cHJlc3Npb246
IGZ1bmN0aW9uIChpZCwgcGFyYW1zLCBkZWZhdWx0cywgYm9keSkgeworICAgICAgICAgICAgcmV0
dXJuIHsKKyAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguRnVuY3Rpb25FeHByZXNzaW9uLAor
ICAgICAgICAgICAgICAgIGlkOiBpZCwKKyAgICAgICAgICAgICAgICBwYXJhbXM6IHBhcmFtcywK
KyAgICAgICAgICAgICAgICBkZWZhdWx0czogZGVmYXVsdHMsCisgICAgICAgICAgICAgICAgYm9k
eTogYm9keSwKKyAgICAgICAgICAgICAgICByZXN0OiBudWxsLAorICAgICAgICAgICAgICAgIGdl
bmVyYXRvcjogZmFsc2UsCisgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogZmFsc2UKKyAgICAg
ICAgICAgIH07CisgICAgICAgIH0sCisKKyAgICAgICAgY3JlYXRlSWRlbnRpZmllcjogZnVuY3Rp
b24gKG5hbWUpIHsKKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgdHlwZTog
U3ludGF4LklkZW50aWZpZXIsCisgICAgICAgICAgICAgICAgbmFtZTogbmFtZQorICAgICAgICAg
ICAgfTsKKyAgICAgICAgfSwKKworICAgICAgICBjcmVhdGVJZlN0YXRlbWVudDogZnVuY3Rpb24g
KHRlc3QsIGNvbnNlcXVlbnQsIGFsdGVybmF0ZSkgeworICAgICAgICAgICAgcmV0dXJuIHsKKyAg
ICAgICAgICAgICAgICB0eXBlOiBTeW50YXguSWZTdGF0ZW1lbnQsCisgICAgICAgICAgICAgICAg
dGVzdDogdGVzdCwKKyAgICAgICAgICAgICAgICBjb25zZXF1ZW50OiBjb25zZXF1ZW50LAorICAg
ICAgICAgICAgICAgIGFsdGVybmF0ZTogYWx0ZXJuYXRlCisgICAgICAgICAgICB9OworICAgICAg
ICB9LAorCisgICAgICAgIGNyZWF0ZUxhYmVsZWRTdGF0ZW1lbnQ6IGZ1bmN0aW9uIChsYWJlbCwg
Ym9keSkgeworICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICB0eXBlOiBTeW50
YXguTGFiZWxlZFN0YXRlbWVudCwKKyAgICAgICAgICAgICAgICBsYWJlbDogbGFiZWwsCisgICAg
ICAgICAgICAgICAgYm9keTogYm9keQorICAgICAgICAgICAgfTsKKyAgICAgICAgfSwKKworICAg
ICAgICBjcmVhdGVMaXRlcmFsOiBmdW5jdGlvbiAodG9rZW4pIHsKKyAgICAgICAgICAgIHJldHVy
biB7CisgICAgICAgICAgICAgICAgdHlwZTogU3ludGF4LkxpdGVyYWwsCisgICAgICAgICAgICAg
ICAgdmFsdWU6IHRva2VuLnZhbHVlLAorICAgICAgICAgICAgICAgIHJhdzogc291cmNlLnNsaWNl
KHRva2VuLnN0YXJ0LCB0b2tlbi5lbmQpCisgICAgICAgICAgICB9OworICAgICAgICB9LAorCisg
ICAgICAgIGNyZWF0ZU1lbWJlckV4cHJlc3Npb246IGZ1bmN0aW9uIChhY2Nlc3Nvciwgb2JqZWN0
LCBwcm9wZXJ0eSkgeworICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICB0eXBl
OiBTeW50YXguTWVtYmVyRXhwcmVzc2lvbiwKKyAgICAgICAgICAgICAgICBjb21wdXRlZDogYWNj
ZXNzb3IgPT09ICdbJywKKyAgICAgICAgICAgICAgICBvYmplY3Q6IG9iamVjdCwKKyAgICAgICAg
ICAgICAgICBwcm9wZXJ0eTogcHJvcGVydHkKKyAgICAgICAgICAgIH07CisgICAgICAgIH0sCisK
KyAgICAgICAgY3JlYXRlTmV3RXhwcmVzc2lvbjogZnVuY3Rpb24gKGNhbGxlZSwgYXJncykgewor
ICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguTmV3RXhw
cmVzc2lvbiwKKyAgICAgICAgICAgICAgICBjYWxsZWU6IGNhbGxlZSwKKyAgICAgICAgICAgICAg
ICAnYXJndW1lbnRzJzogYXJncworICAgICAgICAgICAgfTsKKyAgICAgICAgfSwKKworICAgICAg
ICBjcmVhdGVPYmplY3RFeHByZXNzaW9uOiBmdW5jdGlvbiAocHJvcGVydGllcykgeworICAgICAg
ICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguT2JqZWN0RXhwcmVz
c2lvbiwKKyAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzOiBwcm9wZXJ0aWVzCisgICAgICAgICAg
ICB9OworICAgICAgICB9LAorCisgICAgICAgIGNyZWF0ZVBvc3RmaXhFeHByZXNzaW9uOiBmdW5j
dGlvbiAob3BlcmF0b3IsIGFyZ3VtZW50KSB7CisgICAgICAgICAgICByZXR1cm4geworICAgICAg
ICAgICAgICAgIHR5cGU6IFN5bnRheC5VcGRhdGVFeHByZXNzaW9uLAorICAgICAgICAgICAgICAg
IG9wZXJhdG9yOiBvcGVyYXRvciwKKyAgICAgICAgICAgICAgICBhcmd1bWVudDogYXJndW1lbnQs
CisgICAgICAgICAgICAgICAgcHJlZml4OiBmYWxzZQorICAgICAgICAgICAgfTsKKyAgICAgICAg
fSwKKworICAgICAgICBjcmVhdGVQcm9ncmFtOiBmdW5jdGlvbiAoYm9keSkgeworICAgICAgICAg
ICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguUHJvZ3JhbSwKKyAgICAg
ICAgICAgICAgICBib2R5OiBib2R5CisgICAgICAgICAgICB9OworICAgICAgICB9LAorCisgICAg
ICAgIGNyZWF0ZVByb3BlcnR5OiBmdW5jdGlvbiAoa2luZCwga2V5LCB2YWx1ZSkgeworICAgICAg
ICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguUHJvcGVydHksCisg
ICAgICAgICAgICAgICAga2V5OiBrZXksCisgICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLAor
ICAgICAgICAgICAgICAgIGtpbmQ6IGtpbmQKKyAgICAgICAgICAgIH07CisgICAgICAgIH0sCisK
KyAgICAgICAgY3JlYXRlUmV0dXJuU3RhdGVtZW50OiBmdW5jdGlvbiAoYXJndW1lbnQpIHsKKyAg
ICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgdHlwZTogU3ludGF4LlJldHVyblN0
YXRlbWVudCwKKyAgICAgICAgICAgICAgICBhcmd1bWVudDogYXJndW1lbnQKKyAgICAgICAgICAg
IH07CisgICAgICAgIH0sCisKKyAgICAgICAgY3JlYXRlU2VxdWVuY2VFeHByZXNzaW9uOiBmdW5j
dGlvbiAoZXhwcmVzc2lvbnMpIHsKKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAg
ICAgdHlwZTogU3ludGF4LlNlcXVlbmNlRXhwcmVzc2lvbiwKKyAgICAgICAgICAgICAgICBleHBy
ZXNzaW9uczogZXhwcmVzc2lvbnMKKyAgICAgICAgICAgIH07CisgICAgICAgIH0sCisKKyAgICAg
ICAgY3JlYXRlU3dpdGNoQ2FzZTogZnVuY3Rpb24gKHRlc3QsIGNvbnNlcXVlbnQpIHsKKyAgICAg
ICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgdHlwZTogU3ludGF4LlN3aXRjaENhc2Us
CisgICAgICAgICAgICAgICAgdGVzdDogdGVzdCwKKyAgICAgICAgICAgICAgICBjb25zZXF1ZW50
OiBjb25zZXF1ZW50CisgICAgICAgICAgICB9OworICAgICAgICB9LAorCisgICAgICAgIGNyZWF0
ZVN3aXRjaFN0YXRlbWVudDogZnVuY3Rpb24gKGRpc2NyaW1pbmFudCwgY2FzZXMpIHsKKyAgICAg
ICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgdHlwZTogU3ludGF4LlN3aXRjaFN0YXRl
bWVudCwKKyAgICAgICAgICAgICAgICBkaXNjcmltaW5hbnQ6IGRpc2NyaW1pbmFudCwKKyAgICAg
ICAgICAgICAgICBjYXNlczogY2FzZXMKKyAgICAgICAgICAgIH07CisgICAgICAgIH0sCisKKyAg
ICAgICAgY3JlYXRlVGhpc0V4cHJlc3Npb246IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJl
dHVybiB7CisgICAgICAgICAgICAgICAgdHlwZTogU3ludGF4LlRoaXNFeHByZXNzaW9uCisgICAg
ICAgICAgICB9OworICAgICAgICB9LAorCisgICAgICAgIGNyZWF0ZVRocm93U3RhdGVtZW50OiBm
dW5jdGlvbiAoYXJndW1lbnQpIHsKKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAg
ICAgdHlwZTogU3ludGF4LlRocm93U3RhdGVtZW50LAorICAgICAgICAgICAgICAgIGFyZ3VtZW50
OiBhcmd1bWVudAorICAgICAgICAgICAgfTsKKyAgICAgICAgfSwKKworICAgICAgICBjcmVhdGVU
cnlTdGF0ZW1lbnQ6IGZ1bmN0aW9uIChibG9jaywgZ3VhcmRlZEhhbmRsZXJzLCBoYW5kbGVycywg
ZmluYWxpemVyKSB7CisgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIHR5cGU6
IFN5bnRheC5UcnlTdGF0ZW1lbnQsCisgICAgICAgICAgICAgICAgYmxvY2s6IGJsb2NrLAorICAg
ICAgICAgICAgICAgIGd1YXJkZWRIYW5kbGVyczogZ3VhcmRlZEhhbmRsZXJzLAorICAgICAgICAg
ICAgICAgIGhhbmRsZXJzOiBoYW5kbGVycywKKyAgICAgICAgICAgICAgICBmaW5hbGl6ZXI6IGZp
bmFsaXplcgorICAgICAgICAgICAgfTsKKyAgICAgICAgfSwKKworICAgICAgICBjcmVhdGVVbmFy
eUV4cHJlc3Npb246IGZ1bmN0aW9uIChvcGVyYXRvciwgYXJndW1lbnQpIHsKKyAgICAgICAgICAg
IGlmIChvcGVyYXRvciA9PT0gJysrJyB8fCBvcGVyYXRvciA9PT0gJy0tJykgeworICAgICAgICAg
ICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5VcGRhdGVF
eHByZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICBvcGVyYXRvcjogb3BlcmF0b3IsCisgICAg
ICAgICAgICAgICAgICAgIGFyZ3VtZW50OiBhcmd1bWVudCwKKyAgICAgICAgICAgICAgICAgICAg
cHJlZml4OiB0cnVlCisgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgdHlwZTogU3ludGF4LlVuYXJ5RXhwcmVzc2lv
biwKKyAgICAgICAgICAgICAgICBvcGVyYXRvcjogb3BlcmF0b3IsCisgICAgICAgICAgICAgICAg
YXJndW1lbnQ6IGFyZ3VtZW50LAorICAgICAgICAgICAgICAgIHByZWZpeDogdHJ1ZQorICAgICAg
ICAgICAgfTsKKyAgICAgICAgfSwKKworICAgICAgICBjcmVhdGVWYXJpYWJsZURlY2xhcmF0aW9u
OiBmdW5jdGlvbiAoZGVjbGFyYXRpb25zLCBraW5kKSB7CisgICAgICAgICAgICByZXR1cm4gewor
ICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5WYXJpYWJsZURlY2xhcmF0aW9uLAorICAgICAg
ICAgICAgICAgIGRlY2xhcmF0aW9uczogZGVjbGFyYXRpb25zLAorICAgICAgICAgICAgICAgIGtp
bmQ6IGtpbmQKKyAgICAgICAgICAgIH07CisgICAgICAgIH0sCisKKyAgICAgICAgY3JlYXRlVmFy
aWFibGVEZWNsYXJhdG9yOiBmdW5jdGlvbiAoaWQsIGluaXQpIHsKKyAgICAgICAgICAgIHJldHVy
biB7CisgICAgICAgICAgICAgICAgdHlwZTogU3ludGF4LlZhcmlhYmxlRGVjbGFyYXRvciwKKyAg
ICAgICAgICAgICAgICBpZDogaWQsCisgICAgICAgICAgICAgICAgaW5pdDogaW5pdAorICAgICAg
ICAgICAgfTsKKyAgICAgICAgfSwKKworICAgICAgICBjcmVhdGVXaGlsZVN0YXRlbWVudDogZnVu
Y3Rpb24gKHRlc3QsIGJvZHkpIHsKKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAg
ICAgdHlwZTogU3ludGF4LldoaWxlU3RhdGVtZW50LAorICAgICAgICAgICAgICAgIHRlc3Q6IHRl
c3QsCisgICAgICAgICAgICAgICAgYm9keTogYm9keQorICAgICAgICAgICAgfTsKKyAgICAgICAg
fSwKKworICAgICAgICBjcmVhdGVXaXRoU3RhdGVtZW50OiBmdW5jdGlvbiAob2JqZWN0LCBib2R5
KSB7CisgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5X
aXRoU3RhdGVtZW50LAorICAgICAgICAgICAgICAgIG9iamVjdDogb2JqZWN0LAorICAgICAgICAg
ICAgICAgIGJvZHk6IGJvZHkKKyAgICAgICAgICAgIH07CisgICAgICAgIH0KKyAgICB9OworCisg
ICAgLy8gUmV0dXJuIHRydWUgaWYgdGhlcmUgaXMgYSBsaW5lIHRlcm1pbmF0b3IgYmVmb3JlIHRo
ZSBuZXh0IHRva2VuLgorCisgICAgZnVuY3Rpb24gcGVla0xpbmVUZXJtaW5hdG9yKCkgeworICAg
ICAgICB2YXIgcG9zLCBsaW5lLCBzdGFydCwgZm91bmQ7CisKKyAgICAgICAgcG9zID0gaW5kZXg7
CisgICAgICAgIGxpbmUgPSBsaW5lTnVtYmVyOworICAgICAgICBzdGFydCA9IGxpbmVTdGFydDsK
KyAgICAgICAgc2tpcENvbW1lbnQoKTsKKyAgICAgICAgZm91bmQgPSBsaW5lTnVtYmVyICE9PSBs
aW5lOworICAgICAgICBpbmRleCA9IHBvczsKKyAgICAgICAgbGluZU51bWJlciA9IGxpbmU7Cisg
ICAgICAgIGxpbmVTdGFydCA9IHN0YXJ0OworCisgICAgICAgIHJldHVybiBmb3VuZDsKKyAgICB9
CisKKyAgICAvLyBUaHJvdyBhbiBleGNlcHRpb24KKworICAgIGZ1bmN0aW9uIHRocm93RXJyb3Io
dG9rZW4sIG1lc3NhZ2VGb3JtYXQpIHsKKyAgICAgICAgdmFyIGVycm9yLAorICAgICAgICAgICAg
YXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMiksCisgICAgICAg
ICAgICBtc2cgPSBtZXNzYWdlRm9ybWF0LnJlcGxhY2UoCisgICAgICAgICAgICAgICAgLyUoXGQp
L2csCisgICAgICAgICAgICAgICAgZnVuY3Rpb24gKHdob2xlLCBpbmRleCkgeworICAgICAgICAg
ICAgICAgICAgICBhc3NlcnQoaW5kZXggPCBhcmdzLmxlbmd0aCwgJ01lc3NhZ2UgcmVmZXJlbmNl
IG11c3QgYmUgaW4gcmFuZ2UnKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFyZ3NbaW5k
ZXhdOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICk7CisKKyAgICAgICAgaWYgKHR5
cGVvZiB0b2tlbi5saW5lTnVtYmVyID09PSAnbnVtYmVyJykgeworICAgICAgICAgICAgZXJyb3Ig
PSBuZXcgRXJyb3IoJ0xpbmUgJyArIHRva2VuLmxpbmVOdW1iZXIgKyAnOiAnICsgbXNnKTsKKyAg
ICAgICAgICAgIGVycm9yLmluZGV4ID0gdG9rZW4uc3RhcnQ7CisgICAgICAgICAgICBlcnJvci5s
aW5lTnVtYmVyID0gdG9rZW4ubGluZU51bWJlcjsKKyAgICAgICAgICAgIGVycm9yLmNvbHVtbiA9
IHRva2VuLnN0YXJ0IC0gbGluZVN0YXJ0ICsgMTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIGVycm9yID0gbmV3IEVycm9yKCdMaW5lICcgKyBsaW5lTnVtYmVyICsgJzogJyArIG1zZyk7
CisgICAgICAgICAgICBlcnJvci5pbmRleCA9IGluZGV4OworICAgICAgICAgICAgZXJyb3IubGlu
ZU51bWJlciA9IGxpbmVOdW1iZXI7CisgICAgICAgICAgICBlcnJvci5jb2x1bW4gPSBpbmRleCAt
IGxpbmVTdGFydCArIDE7CisgICAgICAgIH0KKworICAgICAgICBlcnJvci5kZXNjcmlwdGlvbiA9
IG1zZzsKKyAgICAgICAgdGhyb3cgZXJyb3I7CisgICAgfQorCisgICAgZnVuY3Rpb24gdGhyb3dF
cnJvclRvbGVyYW50KCkgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgdGhyb3dFcnJvci5h
cHBseShudWxsLCBhcmd1bWVudHMpOworICAgICAgICB9IGNhdGNoIChlKSB7CisgICAgICAgICAg
ICBpZiAoZXh0cmEuZXJyb3JzKSB7CisgICAgICAgICAgICAgICAgZXh0cmEuZXJyb3JzLnB1c2go
ZSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHRocm93IGU7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKworICAgIC8vIFRocm93IGFuIGV4Y2VwdGlv
biBiZWNhdXNlIG9mIHRoZSB0b2tlbi4KKworICAgIGZ1bmN0aW9uIHRocm93VW5leHBlY3RlZCh0
b2tlbikgeworICAgICAgICBpZiAodG9rZW4udHlwZSA9PT0gVG9rZW4uRU9GKSB7CisgICAgICAg
ICAgICB0aHJvd0Vycm9yKHRva2VuLCBNZXNzYWdlcy5VbmV4cGVjdGVkRU9TKTsKKyAgICAgICAg
fQorCisgICAgICAgIGlmICh0b2tlbi50eXBlID09PSBUb2tlbi5OdW1lcmljTGl0ZXJhbCkgewor
ICAgICAgICAgICAgdGhyb3dFcnJvcih0b2tlbiwgTWVzc2FnZXMuVW5leHBlY3RlZE51bWJlcik7
CisgICAgICAgIH0KKworICAgICAgICBpZiAodG9rZW4udHlwZSA9PT0gVG9rZW4uU3RyaW5nTGl0
ZXJhbCkgeworICAgICAgICAgICAgdGhyb3dFcnJvcih0b2tlbiwgTWVzc2FnZXMuVW5leHBlY3Rl
ZFN0cmluZyk7CisgICAgICAgIH0KKworICAgICAgICBpZiAodG9rZW4udHlwZSA9PT0gVG9rZW4u
SWRlbnRpZmllcikgeworICAgICAgICAgICAgdGhyb3dFcnJvcih0b2tlbiwgTWVzc2FnZXMuVW5l
eHBlY3RlZElkZW50aWZpZXIpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHRva2VuLnR5cGUg
PT09IFRva2VuLktleXdvcmQpIHsKKyAgICAgICAgICAgIGlmIChpc0Z1dHVyZVJlc2VydmVkV29y
ZCh0b2tlbi52YWx1ZSkpIHsKKyAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKHRva2VuLCBNZXNz
YWdlcy5VbmV4cGVjdGVkUmVzZXJ2ZWQpOworICAgICAgICAgICAgfSBlbHNlIGlmIChzdHJpY3Qg
JiYgaXNTdHJpY3RNb2RlUmVzZXJ2ZWRXb3JkKHRva2VuLnZhbHVlKSkgeworICAgICAgICAgICAg
ICAgIHRocm93RXJyb3JUb2xlcmFudCh0b2tlbiwgTWVzc2FnZXMuU3RyaWN0UmVzZXJ2ZWRXb3Jk
KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0
aHJvd0Vycm9yKHRva2VuLCBNZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW4sIHRva2VuLnZhbHVlKTsK
KyAgICAgICAgfQorCisgICAgICAgIC8vIEJvb2xlYW5MaXRlcmFsLCBOdWxsTGl0ZXJhbCwgb3Ig
UHVuY3R1YXRvci4KKyAgICAgICAgdGhyb3dFcnJvcih0b2tlbiwgTWVzc2FnZXMuVW5leHBlY3Rl
ZFRva2VuLCB0b2tlbi52YWx1ZSk7CisgICAgfQorCisgICAgLy8gRXhwZWN0IHRoZSBuZXh0IHRv
a2VuIHRvIG1hdGNoIHRoZSBzcGVjaWZpZWQgcHVuY3R1YXRvci4KKyAgICAvLyBJZiBub3QsIGFu
IGV4Y2VwdGlvbiB3aWxsIGJlIHRocm93bi4KKworICAgIGZ1bmN0aW9uIGV4cGVjdCh2YWx1ZSkg
eworICAgICAgICB2YXIgdG9rZW4gPSBsZXgoKTsKKyAgICAgICAgaWYgKHRva2VuLnR5cGUgIT09
IFRva2VuLlB1bmN0dWF0b3IgfHwgdG9rZW4udmFsdWUgIT09IHZhbHVlKSB7CisgICAgICAgICAg
ICB0aHJvd1VuZXhwZWN0ZWQodG9rZW4pOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gRXhw
ZWN0IHRoZSBuZXh0IHRva2VuIHRvIG1hdGNoIHRoZSBzcGVjaWZpZWQga2V5d29yZC4KKyAgICAv
LyBJZiBub3QsIGFuIGV4Y2VwdGlvbiB3aWxsIGJlIHRocm93bi4KKworICAgIGZ1bmN0aW9uIGV4
cGVjdEtleXdvcmQoa2V5d29yZCkgeworICAgICAgICB2YXIgdG9rZW4gPSBsZXgoKTsKKyAgICAg
ICAgaWYgKHRva2VuLnR5cGUgIT09IFRva2VuLktleXdvcmQgfHwgdG9rZW4udmFsdWUgIT09IGtl
eXdvcmQpIHsKKyAgICAgICAgICAgIHRocm93VW5leHBlY3RlZCh0b2tlbik7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICAvLyBSZXR1cm4gdHJ1ZSBpZiB0aGUgbmV4dCB0b2tlbiBtYXRjaGVzIHRo
ZSBzcGVjaWZpZWQgcHVuY3R1YXRvci4KKworICAgIGZ1bmN0aW9uIG1hdGNoKHZhbHVlKSB7Cisg
ICAgICAgIHJldHVybiBsb29rYWhlYWQudHlwZSA9PT0gVG9rZW4uUHVuY3R1YXRvciAmJiBsb29r
YWhlYWQudmFsdWUgPT09IHZhbHVlOworICAgIH0KKworICAgIC8vIFJldHVybiB0cnVlIGlmIHRo
ZSBuZXh0IHRva2VuIG1hdGNoZXMgdGhlIHNwZWNpZmllZCBrZXl3b3JkCisKKyAgICBmdW5jdGlv
biBtYXRjaEtleXdvcmQoa2V5d29yZCkgeworICAgICAgICByZXR1cm4gbG9va2FoZWFkLnR5cGUg
PT09IFRva2VuLktleXdvcmQgJiYgbG9va2FoZWFkLnZhbHVlID09PSBrZXl3b3JkOworICAgIH0K
KworICAgIC8vIFJldHVybiB0cnVlIGlmIHRoZSBuZXh0IHRva2VuIGlzIGFuIGFzc2lnbm1lbnQg
b3BlcmF0b3IKKworICAgIGZ1bmN0aW9uIG1hdGNoQXNzaWduKCkgeworICAgICAgICB2YXIgb3A7
CisKKyAgICAgICAgaWYgKGxvb2thaGVhZC50eXBlICE9PSBUb2tlbi5QdW5jdHVhdG9yKSB7Cisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgb3AgPSBsb29rYWhl
YWQudmFsdWU7CisgICAgICAgIHJldHVybiBvcCA9PT0gJz0nIHx8CisgICAgICAgICAgICBvcCA9
PT0gJyo9JyB8fAorICAgICAgICAgICAgb3AgPT09ICcvPScgfHwKKyAgICAgICAgICAgIG9wID09
PSAnJT0nIHx8CisgICAgICAgICAgICBvcCA9PT0gJys9JyB8fAorICAgICAgICAgICAgb3AgPT09
ICctPScgfHwKKyAgICAgICAgICAgIG9wID09PSAnPDw9JyB8fAorICAgICAgICAgICAgb3AgPT09
ICc+Pj0nIHx8CisgICAgICAgICAgICBvcCA9PT0gJz4+Pj0nIHx8CisgICAgICAgICAgICBvcCA9
PT0gJyY9JyB8fAorICAgICAgICAgICAgb3AgPT09ICdePScgfHwKKyAgICAgICAgICAgIG9wID09
PSAnfD0nOworICAgIH0KKworICAgIGZ1bmN0aW9uIGNvbnN1bWVTZW1pY29sb24oKSB7CisgICAg
ICAgIHZhciBsaW5lOworCisgICAgICAgIC8vIENhdGNoIHRoZSB2ZXJ5IGNvbW1vbiBjYXNlIGZp
cnN0OiBpbW1lZGlhdGVseSBhIHNlbWljb2xvbiAoVSswMDNCKS4KKyAgICAgICAgaWYgKHNvdXJj
ZS5jaGFyQ29kZUF0KGluZGV4KSA9PT0gMHgzQiB8fCBtYXRjaCgnOycpKSB7CisgICAgICAgICAg
ICBsZXgoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGxpbmUg
PSBsaW5lTnVtYmVyOworICAgICAgICBza2lwQ29tbWVudCgpOworICAgICAgICBpZiAobGluZU51
bWJlciAhPT0gbGluZSkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAg
ICAgaWYgKGxvb2thaGVhZC50eXBlICE9PSBUb2tlbi5FT0YgJiYgIW1hdGNoKCd9JykpIHsKKyAg
ICAgICAgICAgIHRocm93VW5leHBlY3RlZChsb29rYWhlYWQpOworICAgICAgICB9CisgICAgfQor
CisgICAgLy8gUmV0dXJuIHRydWUgaWYgcHJvdmlkZWQgZXhwcmVzc2lvbiBpcyBMZWZ0SGFuZFNp
ZGVFeHByZXNzaW9uCisKKyAgICBmdW5jdGlvbiBpc0xlZnRIYW5kU2lkZShleHByKSB7CisgICAg
ICAgIHJldHVybiBleHByLnR5cGUgPT09IFN5bnRheC5JZGVudGlmaWVyIHx8IGV4cHIudHlwZSA9
PT0gU3ludGF4Lk1lbWJlckV4cHJlc3Npb247CisgICAgfQorCisgICAgLy8gMTEuMS40IEFycmF5
IEluaXRpYWxpc2VyCisKKyAgICBmdW5jdGlvbiBwYXJzZUFycmF5SW5pdGlhbGlzZXIoKSB7Cisg
ICAgICAgIHZhciBlbGVtZW50cyA9IFtdLCBzdGFydFRva2VuOworCisgICAgICAgIHN0YXJ0VG9r
ZW4gPSBsb29rYWhlYWQ7CisgICAgICAgIGV4cGVjdCgnWycpOworCisgICAgICAgIHdoaWxlICgh
bWF0Y2goJ10nKSkgeworICAgICAgICAgICAgaWYgKG1hdGNoKCcsJykpIHsKKyAgICAgICAgICAg
ICAgICBsZXgoKTsKKyAgICAgICAgICAgICAgICBlbGVtZW50cy5wdXNoKG51bGwpOworICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBlbGVtZW50cy5wdXNoKHBhcnNlQXNzaWdu
bWVudEV4cHJlc3Npb24oKSk7CisKKyAgICAgICAgICAgICAgICBpZiAoIW1hdGNoKCddJykpIHsK
KyAgICAgICAgICAgICAgICAgICAgZXhwZWN0KCcsJyk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgbGV4KCk7CisKKyAgICAgICAgcmV0dXJu
IGRlbGVnYXRlLm1hcmtFbmQoZGVsZWdhdGUuY3JlYXRlQXJyYXlFeHByZXNzaW9uKGVsZW1lbnRz
KSwgc3RhcnRUb2tlbik7CisgICAgfQorCisgICAgLy8gMTEuMS41IE9iamVjdCBJbml0aWFsaXNl
cgorCisgICAgZnVuY3Rpb24gcGFyc2VQcm9wZXJ0eUZ1bmN0aW9uKHBhcmFtLCBmaXJzdCkgewor
ICAgICAgICB2YXIgcHJldmlvdXNTdHJpY3QsIGJvZHksIHN0YXJ0VG9rZW47CisKKyAgICAgICAg
cHJldmlvdXNTdHJpY3QgPSBzdHJpY3Q7CisgICAgICAgIHN0YXJ0VG9rZW4gPSBsb29rYWhlYWQ7
CisgICAgICAgIGJvZHkgPSBwYXJzZUZ1bmN0aW9uU291cmNlRWxlbWVudHMoKTsKKyAgICAgICAg
aWYgKGZpcnN0ICYmIHN0cmljdCAmJiBpc1Jlc3RyaWN0ZWRXb3JkKHBhcmFtWzBdLm5hbWUpKSB7
CisgICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQoZmlyc3QsIE1lc3NhZ2VzLlN0cmljdFBh
cmFtTmFtZSk7CisgICAgICAgIH0KKyAgICAgICAgc3RyaWN0ID0gcHJldmlvdXNTdHJpY3Q7Cisg
ICAgICAgIHJldHVybiBkZWxlZ2F0ZS5tYXJrRW5kKGRlbGVnYXRlLmNyZWF0ZUZ1bmN0aW9uRXhw
cmVzc2lvbihudWxsLCBwYXJhbSwgW10sIGJvZHkpLCBzdGFydFRva2VuKTsKKyAgICB9CisKKyAg
ICBmdW5jdGlvbiBwYXJzZU9iamVjdFByb3BlcnR5S2V5KCkgeworICAgICAgICB2YXIgdG9rZW4s
IHN0YXJ0VG9rZW47CisKKyAgICAgICAgc3RhcnRUb2tlbiA9IGxvb2thaGVhZDsKKyAgICAgICAg
dG9rZW4gPSBsZXgoKTsKKworICAgICAgICAvLyBOb3RlOiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxl
ZCBvbmx5IGZyb20gcGFyc2VPYmplY3RQcm9wZXJ0eSgpLCB3aGVyZQorICAgICAgICAvLyBFT0Yg
YW5kIFB1bmN0dWF0b3IgdG9rZW5zIGFyZSBhbHJlYWR5IGZpbHRlcmVkIG91dC4KKworICAgICAg
ICBpZiAodG9rZW4udHlwZSA9PT0gVG9rZW4uU3RyaW5nTGl0ZXJhbCB8fCB0b2tlbi50eXBlID09
PSBUb2tlbi5OdW1lcmljTGl0ZXJhbCkgeworICAgICAgICAgICAgaWYgKHN0cmljdCAmJiB0b2tl
bi5vY3RhbCkgeworICAgICAgICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudCh0b2tlbiwgTWVz
c2FnZXMuU3RyaWN0T2N0YWxMaXRlcmFsKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJl
dHVybiBkZWxlZ2F0ZS5tYXJrRW5kKGRlbGVnYXRlLmNyZWF0ZUxpdGVyYWwodG9rZW4pLCBzdGFy
dFRva2VuKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5tYXJrRW5kKGRl
bGVnYXRlLmNyZWF0ZUlkZW50aWZpZXIodG9rZW4udmFsdWUpLCBzdGFydFRva2VuKTsKKyAgICB9
CisKKyAgICBmdW5jdGlvbiBwYXJzZU9iamVjdFByb3BlcnR5KCkgeworICAgICAgICB2YXIgdG9r
ZW4sIGtleSwgaWQsIHZhbHVlLCBwYXJhbSwgc3RhcnRUb2tlbjsKKworICAgICAgICB0b2tlbiA9
IGxvb2thaGVhZDsKKyAgICAgICAgc3RhcnRUb2tlbiA9IGxvb2thaGVhZDsKKworICAgICAgICBp
ZiAodG9rZW4udHlwZSA9PT0gVG9rZW4uSWRlbnRpZmllcikgeworCisgICAgICAgICAgICBpZCA9
IHBhcnNlT2JqZWN0UHJvcGVydHlLZXkoKTsKKworICAgICAgICAgICAgLy8gUHJvcGVydHkgQXNz
aWdubWVudDogR2V0dGVyIGFuZCBTZXR0ZXIuCisKKyAgICAgICAgICAgIGlmICh0b2tlbi52YWx1
ZSA9PT0gJ2dldCcgJiYgIW1hdGNoKCc6JykpIHsKKyAgICAgICAgICAgICAgICBrZXkgPSBwYXJz
ZU9iamVjdFByb3BlcnR5S2V5KCk7CisgICAgICAgICAgICAgICAgZXhwZWN0KCcoJyk7CisgICAg
ICAgICAgICAgICAgZXhwZWN0KCcpJyk7CisgICAgICAgICAgICAgICAgdmFsdWUgPSBwYXJzZVBy
b3BlcnR5RnVuY3Rpb24oW10pOworICAgICAgICAgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5tYXJr
RW5kKGRlbGVnYXRlLmNyZWF0ZVByb3BlcnR5KCdnZXQnLCBrZXksIHZhbHVlKSwgc3RhcnRUb2tl
bik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAodG9rZW4udmFsdWUgPT09ICdzZXQn
ICYmICFtYXRjaCgnOicpKSB7CisgICAgICAgICAgICAgICAga2V5ID0gcGFyc2VPYmplY3RQcm9w
ZXJ0eUtleSgpOworICAgICAgICAgICAgICAgIGV4cGVjdCgnKCcpOworICAgICAgICAgICAgICAg
IHRva2VuID0gbG9va2FoZWFkOworICAgICAgICAgICAgICAgIGlmICh0b2tlbi50eXBlICE9PSBU
b2tlbi5JZGVudGlmaWVyKSB7CisgICAgICAgICAgICAgICAgICAgIGV4cGVjdCgnKScpOworICAg
ICAgICAgICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQodG9rZW4sIE1lc3NhZ2VzLlVuZXhw
ZWN0ZWRUb2tlbiwgdG9rZW4udmFsdWUpOworICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHBh
cnNlUHJvcGVydHlGdW5jdGlvbihbXSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICAgICAgcGFyYW0gPSBbIHBhcnNlVmFyaWFibGVJZGVudGlmaWVyKCkgXTsKKyAg
ICAgICAgICAgICAgICAgICAgZXhwZWN0KCcpJyk7CisgICAgICAgICAgICAgICAgICAgIHZhbHVl
ID0gcGFyc2VQcm9wZXJ0eUZ1bmN0aW9uKHBhcmFtLCB0b2tlbik7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5tYXJrRW5kKGRlbGVnYXRlLmNyZWF0
ZVByb3BlcnR5KCdzZXQnLCBrZXksIHZhbHVlKSwgc3RhcnRUb2tlbik7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBleHBlY3QoJzonKTsKKyAgICAgICAgICAgIHZhbHVlID0gcGFyc2VBc3Np
Z25tZW50RXhwcmVzc2lvbigpOworICAgICAgICAgICAgcmV0dXJuIGRlbGVnYXRlLm1hcmtFbmQo
ZGVsZWdhdGUuY3JlYXRlUHJvcGVydHkoJ2luaXQnLCBpZCwgdmFsdWUpLCBzdGFydFRva2VuKTsK
KyAgICAgICAgfQorICAgICAgICBpZiAodG9rZW4udHlwZSA9PT0gVG9rZW4uRU9GIHx8IHRva2Vu
LnR5cGUgPT09IFRva2VuLlB1bmN0dWF0b3IpIHsKKyAgICAgICAgICAgIHRocm93VW5leHBlY3Rl
ZCh0b2tlbik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBrZXkgPSBwYXJzZU9iamVj
dFByb3BlcnR5S2V5KCk7CisgICAgICAgICAgICBleHBlY3QoJzonKTsKKyAgICAgICAgICAgIHZh
bHVlID0gcGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbigpOworICAgICAgICAgICAgcmV0dXJuIGRl
bGVnYXRlLm1hcmtFbmQoZGVsZWdhdGUuY3JlYXRlUHJvcGVydHkoJ2luaXQnLCBrZXksIHZhbHVl
KSwgc3RhcnRUb2tlbik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmdW5jdGlvbiBwYXJzZU9i
amVjdEluaXRpYWxpc2VyKCkgeworICAgICAgICB2YXIgcHJvcGVydGllcyA9IFtdLCBwcm9wZXJ0
eSwgbmFtZSwga2V5LCBraW5kLCBtYXAgPSB7fSwgdG9TdHJpbmcgPSBTdHJpbmcsIHN0YXJ0VG9r
ZW47CisKKyAgICAgICAgc3RhcnRUb2tlbiA9IGxvb2thaGVhZDsKKworICAgICAgICBleHBlY3Qo
J3snKTsKKworICAgICAgICB3aGlsZSAoIW1hdGNoKCd9JykpIHsKKyAgICAgICAgICAgIHByb3Bl
cnR5ID0gcGFyc2VPYmplY3RQcm9wZXJ0eSgpOworCisgICAgICAgICAgICBpZiAocHJvcGVydHku
a2V5LnR5cGUgPT09IFN5bnRheC5JZGVudGlmaWVyKSB7CisgICAgICAgICAgICAgICAgbmFtZSA9
IHByb3BlcnR5LmtleS5uYW1lOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg
ICBuYW1lID0gdG9TdHJpbmcocHJvcGVydHkua2V5LnZhbHVlKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGtpbmQgPSAocHJvcGVydHkua2luZCA9PT0gJ2luaXQnKSA/IFByb3BlcnR5S2lu
ZC5EYXRhIDogKHByb3BlcnR5LmtpbmQgPT09ICdnZXQnKSA/IFByb3BlcnR5S2luZC5HZXQgOiBQ
cm9wZXJ0eUtpbmQuU2V0OworCisgICAgICAgICAgICBrZXkgPSAnJCcgKyBuYW1lOworICAgICAg
ICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChtYXAsIGtleSkp
IHsKKyAgICAgICAgICAgICAgICBpZiAobWFwW2tleV0gPT09IFByb3BlcnR5S2luZC5EYXRhKSB7
CisgICAgICAgICAgICAgICAgICAgIGlmIChzdHJpY3QgJiYga2luZCA9PT0gUHJvcGVydHlLaW5k
LkRhdGEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudCh7fSwg
TWVzc2FnZXMuU3RyaWN0RHVwbGljYXRlUHJvcGVydHkpOworICAgICAgICAgICAgICAgICAgICB9
IGVsc2UgaWYgKGtpbmQgIT09IFByb3BlcnR5S2luZC5EYXRhKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQoe30sIE1lc3NhZ2VzLkFjY2Vzc29yRGF0YVByb3Bl
cnR5KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgICAgIGlmIChraW5kID09PSBQcm9wZXJ0eUtpbmQuRGF0YSkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KHt9LCBNZXNzYWdlcy5BY2Nl
c3NvckRhdGFQcm9wZXJ0eSk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobWFwW2tl
eV0gJiBraW5kKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQo
e30sIE1lc3NhZ2VzLkFjY2Vzc29yR2V0U2V0KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBtYXBba2V5XSB8PSBraW5kOworICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBtYXBba2V5XSA9IGtpbmQ7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIHByb3BlcnRpZXMucHVzaChwcm9wZXJ0eSk7CisKKyAgICAg
ICAgICAgIGlmICghbWF0Y2goJ30nKSkgeworICAgICAgICAgICAgICAgIGV4cGVjdCgnLCcpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgZXhwZWN0KCd9Jyk7CisKKyAgICAg
ICAgcmV0dXJuIGRlbGVnYXRlLm1hcmtFbmQoZGVsZWdhdGUuY3JlYXRlT2JqZWN0RXhwcmVzc2lv
bihwcm9wZXJ0aWVzKSwgc3RhcnRUb2tlbik7CisgICAgfQorCisgICAgLy8gMTEuMS42IFRoZSBH
cm91cGluZyBPcGVyYXRvcgorCisgICAgZnVuY3Rpb24gcGFyc2VHcm91cEV4cHJlc3Npb24oKSB7
CisgICAgICAgIHZhciBleHByOworCisgICAgICAgIGV4cGVjdCgnKCcpOworCisgICAgICAgIGV4
cHIgPSBwYXJzZUV4cHJlc3Npb24oKTsKKworICAgICAgICBleHBlY3QoJyknKTsKKworICAgICAg
ICByZXR1cm4gZXhwcjsKKyAgICB9CisKKworICAgIC8vIDExLjEgUHJpbWFyeSBFeHByZXNzaW9u
cworCisgICAgZnVuY3Rpb24gcGFyc2VQcmltYXJ5RXhwcmVzc2lvbigpIHsKKyAgICAgICAgdmFy
IHR5cGUsIHRva2VuLCBleHByLCBzdGFydFRva2VuOworCisgICAgICAgIGlmIChtYXRjaCgnKCcp
KSB7CisgICAgICAgICAgICByZXR1cm4gcGFyc2VHcm91cEV4cHJlc3Npb24oKTsKKyAgICAgICAg
fQorCisgICAgICAgIGlmIChtYXRjaCgnWycpKSB7CisgICAgICAgICAgICByZXR1cm4gcGFyc2VB
cnJheUluaXRpYWxpc2VyKCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAobWF0Y2goJ3snKSkg
eworICAgICAgICAgICAgcmV0dXJuIHBhcnNlT2JqZWN0SW5pdGlhbGlzZXIoKTsKKyAgICAgICAg
fQorCisgICAgICAgIHR5cGUgPSBsb29rYWhlYWQudHlwZTsKKyAgICAgICAgc3RhcnRUb2tlbiA9
IGxvb2thaGVhZDsKKworICAgICAgICBpZiAodHlwZSA9PT0gVG9rZW4uSWRlbnRpZmllcikgewor
ICAgICAgICAgICAgZXhwciA9ICBkZWxlZ2F0ZS5jcmVhdGVJZGVudGlmaWVyKGxleCgpLnZhbHVl
KTsKKyAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSBUb2tlbi5TdHJpbmdMaXRlcmFsIHx8IHR5
cGUgPT09IFRva2VuLk51bWVyaWNMaXRlcmFsKSB7CisgICAgICAgICAgICBpZiAoc3RyaWN0ICYm
IGxvb2thaGVhZC5vY3RhbCkgeworICAgICAgICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudChs
b29rYWhlYWQsIE1lc3NhZ2VzLlN0cmljdE9jdGFsTGl0ZXJhbCk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBleHByID0gZGVsZWdhdGUuY3JlYXRlTGl0ZXJhbChsZXgoKSk7CisgICAgICAg
IH0gZWxzZSBpZiAodHlwZSA9PT0gVG9rZW4uS2V5d29yZCkgeworICAgICAgICAgICAgaWYgKG1h
dGNoS2V5d29yZCgnZnVuY3Rpb24nKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZUZ1
bmN0aW9uRXhwcmVzc2lvbigpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG1hdGNo
S2V5d29yZCgndGhpcycpKSB7CisgICAgICAgICAgICAgICAgbGV4KCk7CisgICAgICAgICAgICAg
ICAgZXhwciA9IGRlbGVnYXRlLmNyZWF0ZVRoaXNFeHByZXNzaW9uKCk7CisgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICAgIHRocm93VW5leHBlY3RlZChsZXgoKSk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gVG9rZW4uQm9vbGVhbkxpdGVyYWwp
IHsKKyAgICAgICAgICAgIHRva2VuID0gbGV4KCk7CisgICAgICAgICAgICB0b2tlbi52YWx1ZSA9
ICh0b2tlbi52YWx1ZSA9PT0gJ3RydWUnKTsKKyAgICAgICAgICAgIGV4cHIgPSBkZWxlZ2F0ZS5j
cmVhdGVMaXRlcmFsKHRva2VuKTsKKyAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSBUb2tlbi5O
dWxsTGl0ZXJhbCkgeworICAgICAgICAgICAgdG9rZW4gPSBsZXgoKTsKKyAgICAgICAgICAgIHRv
a2VuLnZhbHVlID0gbnVsbDsKKyAgICAgICAgICAgIGV4cHIgPSBkZWxlZ2F0ZS5jcmVhdGVMaXRl
cmFsKHRva2VuKTsKKyAgICAgICAgfSBlbHNlIGlmIChtYXRjaCgnLycpIHx8IG1hdGNoKCcvPScp
KSB7CisgICAgICAgICAgICBpZiAodHlwZW9mIGV4dHJhLnRva2VucyAhPT0gJ3VuZGVmaW5lZCcp
IHsKKyAgICAgICAgICAgICAgICBleHByID0gZGVsZWdhdGUuY3JlYXRlTGl0ZXJhbChjb2xsZWN0
UmVnZXgoKSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGV4cHIgPSBk
ZWxlZ2F0ZS5jcmVhdGVMaXRlcmFsKHNjYW5SZWdFeHAoKSk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBwZWVrKCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB0aHJvd1VuZXhw
ZWN0ZWQobGV4KCkpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGRlbGVnYXRlLm1hcmtF
bmQoZXhwciwgc3RhcnRUb2tlbik7CisgICAgfQorCisgICAgLy8gMTEuMiBMZWZ0LUhhbmQtU2lk
ZSBFeHByZXNzaW9ucworCisgICAgZnVuY3Rpb24gcGFyc2VBcmd1bWVudHMoKSB7CisgICAgICAg
IHZhciBhcmdzID0gW107CisKKyAgICAgICAgZXhwZWN0KCcoJyk7CisKKyAgICAgICAgaWYgKCFt
YXRjaCgnKScpKSB7CisgICAgICAgICAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHsKKyAgICAg
ICAgICAgICAgICBhcmdzLnB1c2gocGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbigpKTsKKyAgICAg
ICAgICAgICAgICBpZiAobWF0Y2goJyknKSkgeworICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZXhwZWN0KCcsJyk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKworICAgICAgICBleHBlY3QoJyknKTsKKworICAgICAgICByZXR1
cm4gYXJnczsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBwYXJzZU5vbkNvbXB1dGVkUHJvcGVydHko
KSB7CisgICAgICAgIHZhciB0b2tlbiwgc3RhcnRUb2tlbjsKKworICAgICAgICBzdGFydFRva2Vu
ID0gbG9va2FoZWFkOworICAgICAgICB0b2tlbiA9IGxleCgpOworCisgICAgICAgIGlmICghaXNJ
ZGVudGlmaWVyTmFtZSh0b2tlbikpIHsKKyAgICAgICAgICAgIHRocm93VW5leHBlY3RlZCh0b2tl
bik7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gZGVsZWdhdGUubWFya0VuZChkZWxlZ2F0
ZS5jcmVhdGVJZGVudGlmaWVyKHRva2VuLnZhbHVlKSwgc3RhcnRUb2tlbik7CisgICAgfQorCisg
ICAgZnVuY3Rpb24gcGFyc2VOb25Db21wdXRlZE1lbWJlcigpIHsKKyAgICAgICAgZXhwZWN0KCcu
Jyk7CisKKyAgICAgICAgcmV0dXJuIHBhcnNlTm9uQ29tcHV0ZWRQcm9wZXJ0eSgpOworICAgIH0K
KworICAgIGZ1bmN0aW9uIHBhcnNlQ29tcHV0ZWRNZW1iZXIoKSB7CisgICAgICAgIHZhciBleHBy
OworCisgICAgICAgIGV4cGVjdCgnWycpOworCisgICAgICAgIGV4cHIgPSBwYXJzZUV4cHJlc3Np
b24oKTsKKworICAgICAgICBleHBlY3QoJ10nKTsKKworICAgICAgICByZXR1cm4gZXhwcjsKKyAg
ICB9CisKKyAgICBmdW5jdGlvbiBwYXJzZU5ld0V4cHJlc3Npb24oKSB7CisgICAgICAgIHZhciBj
YWxsZWUsIGFyZ3MsIHN0YXJ0VG9rZW47CisKKyAgICAgICAgc3RhcnRUb2tlbiA9IGxvb2thaGVh
ZDsKKyAgICAgICAgZXhwZWN0S2V5d29yZCgnbmV3Jyk7CisgICAgICAgIGNhbGxlZSA9IHBhcnNl
TGVmdEhhbmRTaWRlRXhwcmVzc2lvbigpOworICAgICAgICBhcmdzID0gbWF0Y2goJygnKSA/IHBh
cnNlQXJndW1lbnRzKCkgOiBbXTsKKworICAgICAgICByZXR1cm4gZGVsZWdhdGUubWFya0VuZChk
ZWxlZ2F0ZS5jcmVhdGVOZXdFeHByZXNzaW9uKGNhbGxlZSwgYXJncyksIHN0YXJ0VG9rZW4pOwor
ICAgIH0KKworICAgIGZ1bmN0aW9uIHBhcnNlTGVmdEhhbmRTaWRlRXhwcmVzc2lvbkFsbG93Q2Fs
bCgpIHsKKyAgICAgICAgdmFyIHByZXZpb3VzQWxsb3dJbiwgZXhwciwgYXJncywgcHJvcGVydHks
IHN0YXJ0VG9rZW47CisKKyAgICAgICAgc3RhcnRUb2tlbiA9IGxvb2thaGVhZDsKKworICAgICAg
ICBwcmV2aW91c0FsbG93SW4gPSBzdGF0ZS5hbGxvd0luOworICAgICAgICBzdGF0ZS5hbGxvd0lu
ID0gdHJ1ZTsKKyAgICAgICAgZXhwciA9IG1hdGNoS2V5d29yZCgnbmV3JykgPyBwYXJzZU5ld0V4
cHJlc3Npb24oKSA6IHBhcnNlUHJpbWFyeUV4cHJlc3Npb24oKTsKKyAgICAgICAgc3RhdGUuYWxs
b3dJbiA9IHByZXZpb3VzQWxsb3dJbjsKKworICAgICAgICBmb3IgKDs7KSB7CisgICAgICAgICAg
ICBpZiAobWF0Y2goJy4nKSkgeworICAgICAgICAgICAgICAgIHByb3BlcnR5ID0gcGFyc2VOb25D
b21wdXRlZE1lbWJlcigpOworICAgICAgICAgICAgICAgIGV4cHIgPSBkZWxlZ2F0ZS5jcmVhdGVN
ZW1iZXJFeHByZXNzaW9uKCcuJywgZXhwciwgcHJvcGVydHkpOworICAgICAgICAgICAgfSBlbHNl
IGlmIChtYXRjaCgnKCcpKSB7CisgICAgICAgICAgICAgICAgYXJncyA9IHBhcnNlQXJndW1lbnRz
KCk7CisgICAgICAgICAgICAgICAgZXhwciA9IGRlbGVnYXRlLmNyZWF0ZUNhbGxFeHByZXNzaW9u
KGV4cHIsIGFyZ3MpOworICAgICAgICAgICAgfSBlbHNlIGlmIChtYXRjaCgnWycpKSB7CisgICAg
ICAgICAgICAgICAgcHJvcGVydHkgPSBwYXJzZUNvbXB1dGVkTWVtYmVyKCk7CisgICAgICAgICAg
ICAgICAgZXhwciA9IGRlbGVnYXRlLmNyZWF0ZU1lbWJlckV4cHJlc3Npb24oJ1snLCBleHByLCBw
cm9wZXJ0eSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgZGVsZWdhdGUubWFya0VuZChleHByLCBzdGFydFRv
a2VuKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBleHByOworICAgIH0KKworICAgIGZ1
bmN0aW9uIHBhcnNlTGVmdEhhbmRTaWRlRXhwcmVzc2lvbigpIHsKKyAgICAgICAgdmFyIHByZXZp
b3VzQWxsb3dJbiwgZXhwciwgcHJvcGVydHksIHN0YXJ0VG9rZW47CisKKyAgICAgICAgc3RhcnRU
b2tlbiA9IGxvb2thaGVhZDsKKworICAgICAgICBwcmV2aW91c0FsbG93SW4gPSBzdGF0ZS5hbGxv
d0luOworICAgICAgICBleHByID0gbWF0Y2hLZXl3b3JkKCduZXcnKSA/IHBhcnNlTmV3RXhwcmVz
c2lvbigpIDogcGFyc2VQcmltYXJ5RXhwcmVzc2lvbigpOworICAgICAgICBzdGF0ZS5hbGxvd0lu
ID0gcHJldmlvdXNBbGxvd0luOworCisgICAgICAgIHdoaWxlIChtYXRjaCgnLicpIHx8IG1hdGNo
KCdbJykpIHsKKyAgICAgICAgICAgIGlmIChtYXRjaCgnWycpKSB7CisgICAgICAgICAgICAgICAg
cHJvcGVydHkgPSBwYXJzZUNvbXB1dGVkTWVtYmVyKCk7CisgICAgICAgICAgICAgICAgZXhwciA9
IGRlbGVnYXRlLmNyZWF0ZU1lbWJlckV4cHJlc3Npb24oJ1snLCBleHByLCBwcm9wZXJ0eSk7Cisg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHByb3BlcnR5ID0gcGFyc2VOb25D
b21wdXRlZE1lbWJlcigpOworICAgICAgICAgICAgICAgIGV4cHIgPSBkZWxlZ2F0ZS5jcmVhdGVN
ZW1iZXJFeHByZXNzaW9uKCcuJywgZXhwciwgcHJvcGVydHkpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgZGVsZWdhdGUubWFya0VuZChleHByLCBzdGFydFRva2VuKTsKKyAgICAgICAgfQor
CisgICAgICAgIHJldHVybiBleHByOworICAgIH0KKworICAgIC8vIDExLjMgUG9zdGZpeCBFeHBy
ZXNzaW9ucworCisgICAgZnVuY3Rpb24gcGFyc2VQb3N0Zml4RXhwcmVzc2lvbigpIHsKKyAgICAg
ICAgdmFyIGV4cHIsIHRva2VuLCBzdGFydFRva2VuID0gbG9va2FoZWFkOworCisgICAgICAgIGV4
cHIgPSBwYXJzZUxlZnRIYW5kU2lkZUV4cHJlc3Npb25BbGxvd0NhbGwoKTsKKworICAgICAgICBp
ZiAobG9va2FoZWFkLnR5cGUgPT09IFRva2VuLlB1bmN0dWF0b3IpIHsKKyAgICAgICAgICAgIGlm
ICgobWF0Y2goJysrJykgfHwgbWF0Y2goJy0tJykpICYmICFwZWVrTGluZVRlcm1pbmF0b3IoKSkg
eworICAgICAgICAgICAgICAgIC8vIDExLjMuMSwgMTEuMy4yCisgICAgICAgICAgICAgICAgaWYg
KHN0cmljdCAmJiBleHByLnR5cGUgPT09IFN5bnRheC5JZGVudGlmaWVyICYmIGlzUmVzdHJpY3Rl
ZFdvcmQoZXhwci5uYW1lKSkgeworICAgICAgICAgICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJh
bnQoe30sIE1lc3NhZ2VzLlN0cmljdExIU1Bvc3RmaXgpOworICAgICAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgICAgIGlmICghaXNMZWZ0SGFuZFNpZGUoZXhwcikpIHsKKyAgICAgICAgICAg
ICAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KHt9LCBNZXNzYWdlcy5JbnZhbGlkTEhTSW5Bc3Np
Z25tZW50KTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICB0b2tlbiA9IGxl
eCgpOworICAgICAgICAgICAgICAgIGV4cHIgPSBkZWxlZ2F0ZS5tYXJrRW5kKGRlbGVnYXRlLmNy
ZWF0ZVBvc3RmaXhFeHByZXNzaW9uKHRva2VuLnZhbHVlLCBleHByKSwgc3RhcnRUb2tlbik7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gZXhwcjsKKyAgICB9CisK
KyAgICAvLyAxMS40IFVuYXJ5IE9wZXJhdG9ycworCisgICAgZnVuY3Rpb24gcGFyc2VVbmFyeUV4
cHJlc3Npb24oKSB7CisgICAgICAgIHZhciB0b2tlbiwgZXhwciwgc3RhcnRUb2tlbjsKKworICAg
ICAgICBpZiAobG9va2FoZWFkLnR5cGUgIT09IFRva2VuLlB1bmN0dWF0b3IgJiYgbG9va2FoZWFk
LnR5cGUgIT09IFRva2VuLktleXdvcmQpIHsKKyAgICAgICAgICAgIGV4cHIgPSBwYXJzZVBvc3Rm
aXhFeHByZXNzaW9uKCk7CisgICAgICAgIH0gZWxzZSBpZiAobWF0Y2goJysrJykgfHwgbWF0Y2go
Jy0tJykpIHsKKyAgICAgICAgICAgIHN0YXJ0VG9rZW4gPSBsb29rYWhlYWQ7CisgICAgICAgICAg
ICB0b2tlbiA9IGxleCgpOworICAgICAgICAgICAgZXhwciA9IHBhcnNlVW5hcnlFeHByZXNzaW9u
KCk7CisgICAgICAgICAgICAvLyAxMS40LjQsIDExLjQuNQorICAgICAgICAgICAgaWYgKHN0cmlj
dCAmJiBleHByLnR5cGUgPT09IFN5bnRheC5JZGVudGlmaWVyICYmIGlzUmVzdHJpY3RlZFdvcmQo
ZXhwci5uYW1lKSkgeworICAgICAgICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudCh7fSwgTWVz
c2FnZXMuU3RyaWN0TEhTUHJlZml4KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYg
KCFpc0xlZnRIYW5kU2lkZShleHByKSkgeworICAgICAgICAgICAgICAgIHRocm93RXJyb3JUb2xl
cmFudCh7fSwgTWVzc2FnZXMuSW52YWxpZExIU0luQXNzaWdubWVudCk7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGV4cHIgPSBkZWxlZ2F0ZS5jcmVhdGVVbmFyeUV4cHJlc3Npb24odG9r
ZW4udmFsdWUsIGV4cHIpOworICAgICAgICAgICAgZXhwciA9IGRlbGVnYXRlLm1hcmtFbmQoZXhw
ciwgc3RhcnRUb2tlbik7CisgICAgICAgIH0gZWxzZSBpZiAobWF0Y2goJysnKSB8fCBtYXRjaCgn
LScpIHx8IG1hdGNoKCd+JykgfHwgbWF0Y2goJyEnKSkgeworICAgICAgICAgICAgc3RhcnRUb2tl
biA9IGxvb2thaGVhZDsKKyAgICAgICAgICAgIHRva2VuID0gbGV4KCk7CisgICAgICAgICAgICBl
eHByID0gcGFyc2VVbmFyeUV4cHJlc3Npb24oKTsKKyAgICAgICAgICAgIGV4cHIgPSBkZWxlZ2F0
ZS5jcmVhdGVVbmFyeUV4cHJlc3Npb24odG9rZW4udmFsdWUsIGV4cHIpOworICAgICAgICAgICAg
ZXhwciA9IGRlbGVnYXRlLm1hcmtFbmQoZXhwciwgc3RhcnRUb2tlbik7CisgICAgICAgIH0gZWxz
ZSBpZiAobWF0Y2hLZXl3b3JkKCdkZWxldGUnKSB8fCBtYXRjaEtleXdvcmQoJ3ZvaWQnKSB8fCBt
YXRjaEtleXdvcmQoJ3R5cGVvZicpKSB7CisgICAgICAgICAgICBzdGFydFRva2VuID0gbG9va2Fo
ZWFkOworICAgICAgICAgICAgdG9rZW4gPSBsZXgoKTsKKyAgICAgICAgICAgIGV4cHIgPSBwYXJz
ZVVuYXJ5RXhwcmVzc2lvbigpOworICAgICAgICAgICAgZXhwciA9IGRlbGVnYXRlLmNyZWF0ZVVu
YXJ5RXhwcmVzc2lvbih0b2tlbi52YWx1ZSwgZXhwcik7CisgICAgICAgICAgICBleHByID0gZGVs
ZWdhdGUubWFya0VuZChleHByLCBzdGFydFRva2VuKTsKKyAgICAgICAgICAgIGlmIChzdHJpY3Qg
JiYgZXhwci5vcGVyYXRvciA9PT0gJ2RlbGV0ZScgJiYgZXhwci5hcmd1bWVudC50eXBlID09PSBT
eW50YXguSWRlbnRpZmllcikgeworICAgICAgICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudCh7
fSwgTWVzc2FnZXMuU3RyaWN0RGVsZXRlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIGV4cHIgPSBwYXJzZVBvc3RmaXhFeHByZXNzaW9uKCk7CisgICAgICAg
IH0KKworICAgICAgICByZXR1cm4gZXhwcjsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBiaW5hcnlQ
cmVjZWRlbmNlKHRva2VuLCBhbGxvd0luKSB7CisgICAgICAgIHZhciBwcmVjID0gMDsKKworICAg
ICAgICBpZiAodG9rZW4udHlwZSAhPT0gVG9rZW4uUHVuY3R1YXRvciAmJiB0b2tlbi50eXBlICE9
PSBUb2tlbi5LZXl3b3JkKSB7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorCisg
ICAgICAgIHN3aXRjaCAodG9rZW4udmFsdWUpIHsKKyAgICAgICAgY2FzZSAnfHwnOgorICAgICAg
ICAgICAgcHJlYyA9IDE7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlICcmJic6
CisgICAgICAgICAgICBwcmVjID0gMjsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNh
c2UgJ3wnOgorICAgICAgICAgICAgcHJlYyA9IDM7CisgICAgICAgICAgICBicmVhazsKKworICAg
ICAgICBjYXNlICdeJzoKKyAgICAgICAgICAgIHByZWMgPSA0OworICAgICAgICAgICAgYnJlYWs7
CisKKyAgICAgICAgY2FzZSAnJic6CisgICAgICAgICAgICBwcmVjID0gNTsKKyAgICAgICAgICAg
IGJyZWFrOworCisgICAgICAgIGNhc2UgJz09JzoKKyAgICAgICAgY2FzZSAnIT0nOgorICAgICAg
ICBjYXNlICc9PT0nOgorICAgICAgICBjYXNlICchPT0nOgorICAgICAgICAgICAgcHJlYyA9IDY7
CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlICc8JzoKKyAgICAgICAgY2FzZSAn
Pic6CisgICAgICAgIGNhc2UgJzw9JzoKKyAgICAgICAgY2FzZSAnPj0nOgorICAgICAgICBjYXNl
ICdpbnN0YW5jZW9mJzoKKyAgICAgICAgICAgIHByZWMgPSA3OworICAgICAgICAgICAgYnJlYWs7
CisKKyAgICAgICAgY2FzZSAnaW4nOgorICAgICAgICAgICAgcHJlYyA9IGFsbG93SW4gPyA3IDog
MDsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgJzw8JzoKKyAgICAgICAgY2Fz
ZSAnPj4nOgorICAgICAgICBjYXNlICc+Pj4nOgorICAgICAgICAgICAgcHJlYyA9IDg7CisgICAg
ICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlICcrJzoKKyAgICAgICAgY2FzZSAnLSc6Cisg
ICAgICAgICAgICBwcmVjID0gOTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2Ug
JyonOgorICAgICAgICBjYXNlICcvJzoKKyAgICAgICAgY2FzZSAnJSc6CisgICAgICAgICAgICBw
cmVjID0gMTE7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gcHJlYzsKKyAgICB9CisK
KyAgICAvLyAxMS41IE11bHRpcGxpY2F0aXZlIE9wZXJhdG9ycworICAgIC8vIDExLjYgQWRkaXRp
dmUgT3BlcmF0b3JzCisgICAgLy8gMTEuNyBCaXR3aXNlIFNoaWZ0IE9wZXJhdG9ycworICAgIC8v
IDExLjggUmVsYXRpb25hbCBPcGVyYXRvcnMKKyAgICAvLyAxMS45IEVxdWFsaXR5IE9wZXJhdG9y
cworICAgIC8vIDExLjEwIEJpbmFyeSBCaXR3aXNlIE9wZXJhdG9ycworICAgIC8vIDExLjExIEJp
bmFyeSBMb2dpY2FsIE9wZXJhdG9ycworCisgICAgZnVuY3Rpb24gcGFyc2VCaW5hcnlFeHByZXNz
aW9uKCkgeworICAgICAgICB2YXIgbWFya2VyLCBtYXJrZXJzLCBleHByLCB0b2tlbiwgcHJlYywg
c3RhY2ssIHJpZ2h0LCBvcGVyYXRvciwgbGVmdCwgaTsKKworICAgICAgICBtYXJrZXIgPSBsb29r
YWhlYWQ7CisgICAgICAgIGxlZnQgPSBwYXJzZVVuYXJ5RXhwcmVzc2lvbigpOworCisgICAgICAg
IHRva2VuID0gbG9va2FoZWFkOworICAgICAgICBwcmVjID0gYmluYXJ5UHJlY2VkZW5jZSh0b2tl
biwgc3RhdGUuYWxsb3dJbik7CisgICAgICAgIGlmIChwcmVjID09PSAwKSB7CisgICAgICAgICAg
ICByZXR1cm4gbGVmdDsKKyAgICAgICAgfQorICAgICAgICB0b2tlbi5wcmVjID0gcHJlYzsKKyAg
ICAgICAgbGV4KCk7CisKKyAgICAgICAgbWFya2VycyA9IFttYXJrZXIsIGxvb2thaGVhZF07Cisg
ICAgICAgIHJpZ2h0ID0gcGFyc2VVbmFyeUV4cHJlc3Npb24oKTsKKworICAgICAgICBzdGFjayA9
IFtsZWZ0LCB0b2tlbiwgcmlnaHRdOworCisgICAgICAgIHdoaWxlICgocHJlYyA9IGJpbmFyeVBy
ZWNlZGVuY2UobG9va2FoZWFkLCBzdGF0ZS5hbGxvd0luKSkgPiAwKSB7CisKKyAgICAgICAgICAg
IC8vIFJlZHVjZTogbWFrZSBhIGJpbmFyeSBleHByZXNzaW9uIGZyb20gdGhlIHRocmVlIHRvcG1v
c3QgZW50cmllcy4KKyAgICAgICAgICAgIHdoaWxlICgoc3RhY2subGVuZ3RoID4gMikgJiYgKHBy
ZWMgPD0gc3RhY2tbc3RhY2subGVuZ3RoIC0gMl0ucHJlYykpIHsKKyAgICAgICAgICAgICAgICBy
aWdodCA9IHN0YWNrLnBvcCgpOworICAgICAgICAgICAgICAgIG9wZXJhdG9yID0gc3RhY2sucG9w
KCkudmFsdWU7CisgICAgICAgICAgICAgICAgbGVmdCA9IHN0YWNrLnBvcCgpOworICAgICAgICAg
ICAgICAgIGV4cHIgPSBkZWxlZ2F0ZS5jcmVhdGVCaW5hcnlFeHByZXNzaW9uKG9wZXJhdG9yLCBs
ZWZ0LCByaWdodCk7CisgICAgICAgICAgICAgICAgbWFya2Vycy5wb3AoKTsKKyAgICAgICAgICAg
ICAgICBtYXJrZXIgPSBtYXJrZXJzW21hcmtlcnMubGVuZ3RoIC0gMV07CisgICAgICAgICAgICAg
ICAgZGVsZWdhdGUubWFya0VuZChleHByLCBtYXJrZXIpOworICAgICAgICAgICAgICAgIHN0YWNr
LnB1c2goZXhwcik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFNoaWZ0LgorICAg
ICAgICAgICAgdG9rZW4gPSBsZXgoKTsKKyAgICAgICAgICAgIHRva2VuLnByZWMgPSBwcmVjOwor
ICAgICAgICAgICAgc3RhY2sucHVzaCh0b2tlbik7CisgICAgICAgICAgICBtYXJrZXJzLnB1c2go
bG9va2FoZWFkKTsKKyAgICAgICAgICAgIGV4cHIgPSBwYXJzZVVuYXJ5RXhwcmVzc2lvbigpOwor
ICAgICAgICAgICAgc3RhY2sucHVzaChleHByKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEZp
bmFsIHJlZHVjZSB0byBjbGVhbi11cCB0aGUgc3RhY2suCisgICAgICAgIGkgPSBzdGFjay5sZW5n
dGggLSAxOworICAgICAgICBleHByID0gc3RhY2tbaV07CisgICAgICAgIG1hcmtlcnMucG9wKCk7
CisgICAgICAgIHdoaWxlIChpID4gMSkgeworICAgICAgICAgICAgZXhwciA9IGRlbGVnYXRlLmNy
ZWF0ZUJpbmFyeUV4cHJlc3Npb24oc3RhY2tbaSAtIDFdLnZhbHVlLCBzdGFja1tpIC0gMl0sIGV4
cHIpOworICAgICAgICAgICAgaSAtPSAyOworICAgICAgICAgICAgbWFya2VyID0gbWFya2Vycy5w
b3AoKTsKKyAgICAgICAgICAgIGRlbGVnYXRlLm1hcmtFbmQoZXhwciwgbWFya2VyKTsKKyAgICAg
ICAgfQorCisgICAgICAgIHJldHVybiBleHByOworICAgIH0KKworCisgICAgLy8gMTEuMTIgQ29u
ZGl0aW9uYWwgT3BlcmF0b3IKKworICAgIGZ1bmN0aW9uIHBhcnNlQ29uZGl0aW9uYWxFeHByZXNz
aW9uKCkgeworICAgICAgICB2YXIgZXhwciwgcHJldmlvdXNBbGxvd0luLCBjb25zZXF1ZW50LCBh
bHRlcm5hdGUsIHN0YXJ0VG9rZW47CisKKyAgICAgICAgc3RhcnRUb2tlbiA9IGxvb2thaGVhZDsK
KworICAgICAgICBleHByID0gcGFyc2VCaW5hcnlFeHByZXNzaW9uKCk7CisKKyAgICAgICAgaWYg
KG1hdGNoKCc/JykpIHsKKyAgICAgICAgICAgIGxleCgpOworICAgICAgICAgICAgcHJldmlvdXNB
bGxvd0luID0gc3RhdGUuYWxsb3dJbjsKKyAgICAgICAgICAgIHN0YXRlLmFsbG93SW4gPSB0cnVl
OworICAgICAgICAgICAgY29uc2VxdWVudCA9IHBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24oKTsK
KyAgICAgICAgICAgIHN0YXRlLmFsbG93SW4gPSBwcmV2aW91c0FsbG93SW47CisgICAgICAgICAg
ICBleHBlY3QoJzonKTsKKyAgICAgICAgICAgIGFsdGVybmF0ZSA9IHBhcnNlQXNzaWdubWVudEV4
cHJlc3Npb24oKTsKKworICAgICAgICAgICAgZXhwciA9IGRlbGVnYXRlLmNyZWF0ZUNvbmRpdGlv
bmFsRXhwcmVzc2lvbihleHByLCBjb25zZXF1ZW50LCBhbHRlcm5hdGUpOworICAgICAgICAgICAg
ZGVsZWdhdGUubWFya0VuZChleHByLCBzdGFydFRva2VuKTsKKyAgICAgICAgfQorCisgICAgICAg
IHJldHVybiBleHByOworICAgIH0KKworICAgIC8vIDExLjEzIEFzc2lnbm1lbnQgT3BlcmF0b3Jz
CisKKyAgICBmdW5jdGlvbiBwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKCkgeworICAgICAgICB2
YXIgdG9rZW4sIGxlZnQsIHJpZ2h0LCBub2RlLCBzdGFydFRva2VuOworCisgICAgICAgIHRva2Vu
ID0gbG9va2FoZWFkOworICAgICAgICBzdGFydFRva2VuID0gbG9va2FoZWFkOworCisgICAgICAg
IG5vZGUgPSBsZWZ0ID0gcGFyc2VDb25kaXRpb25hbEV4cHJlc3Npb24oKTsKKworICAgICAgICBp
ZiAobWF0Y2hBc3NpZ24oKSkgeworICAgICAgICAgICAgLy8gTGVmdEhhbmRTaWRlRXhwcmVzc2lv
bgorICAgICAgICAgICAgaWYgKCFpc0xlZnRIYW5kU2lkZShsZWZ0KSkgeworICAgICAgICAgICAg
ICAgIHRocm93RXJyb3JUb2xlcmFudCh7fSwgTWVzc2FnZXMuSW52YWxpZExIU0luQXNzaWdubWVu
dCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIDExLjEzLjEKKyAgICAgICAgICAg
IGlmIChzdHJpY3QgJiYgbGVmdC50eXBlID09PSBTeW50YXguSWRlbnRpZmllciAmJiBpc1Jlc3Ry
aWN0ZWRXb3JkKGxlZnQubmFtZSkpIHsKKyAgICAgICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJh
bnQodG9rZW4sIE1lc3NhZ2VzLlN0cmljdExIU0Fzc2lnbm1lbnQpOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICB0b2tlbiA9IGxleCgpOworICAgICAgICAgICAgcmlnaHQgPSBwYXJzZUFz
c2lnbm1lbnRFeHByZXNzaW9uKCk7CisgICAgICAgICAgICBub2RlID0gZGVsZWdhdGUubWFya0Vu
ZChkZWxlZ2F0ZS5jcmVhdGVBc3NpZ25tZW50RXhwcmVzc2lvbih0b2tlbi52YWx1ZSwgbGVmdCwg
cmlnaHQpLCBzdGFydFRva2VuKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBub2RlOwor
ICAgIH0KKworICAgIC8vIDExLjE0IENvbW1hIE9wZXJhdG9yCisKKyAgICBmdW5jdGlvbiBwYXJz
ZUV4cHJlc3Npb24oKSB7CisgICAgICAgIHZhciBleHByLCBzdGFydFRva2VuID0gbG9va2FoZWFk
OworCisgICAgICAgIGV4cHIgPSBwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKCk7CisKKyAgICAg
ICAgaWYgKG1hdGNoKCcsJykpIHsKKyAgICAgICAgICAgIGV4cHIgPSBkZWxlZ2F0ZS5jcmVhdGVT
ZXF1ZW5jZUV4cHJlc3Npb24oWyBleHByIF0pOworCisgICAgICAgICAgICB3aGlsZSAoaW5kZXgg
PCBsZW5ndGgpIHsKKyAgICAgICAgICAgICAgICBpZiAoIW1hdGNoKCcsJykpIHsKKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGxl
eCgpOworICAgICAgICAgICAgICAgIGV4cHIuZXhwcmVzc2lvbnMucHVzaChwYXJzZUFzc2lnbm1l
bnRFeHByZXNzaW9uKCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBkZWxlZ2F0ZS5t
YXJrRW5kKGV4cHIsIHN0YXJ0VG9rZW4pOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGV4
cHI7CisgICAgfQorCisgICAgLy8gMTIuMSBCbG9jaworCisgICAgZnVuY3Rpb24gcGFyc2VTdGF0
ZW1lbnRMaXN0KCkgeworICAgICAgICB2YXIgbGlzdCA9IFtdLAorICAgICAgICAgICAgc3RhdGVt
ZW50OworCisgICAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkgeworICAgICAgICAgICAgaWYg
KG1hdGNoKCd9JykpIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHN0YXRlbWVudCA9IHBhcnNlU291cmNlRWxlbWVudCgpOworICAgICAgICAgICAg
aWYgKHR5cGVvZiBzdGF0ZW1lbnQgPT09ICd1bmRlZmluZWQnKSB7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBsaXN0LnB1c2goc3RhdGVtZW50KTsK
KyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBsaXN0OworICAgIH0KKworICAgIGZ1bmN0aW9u
IHBhcnNlQmxvY2soKSB7CisgICAgICAgIHZhciBibG9jaywgc3RhcnRUb2tlbjsKKworICAgICAg
ICBzdGFydFRva2VuID0gbG9va2FoZWFkOworICAgICAgICBleHBlY3QoJ3snKTsKKworICAgICAg
ICBibG9jayA9IHBhcnNlU3RhdGVtZW50TGlzdCgpOworCisgICAgICAgIGV4cGVjdCgnfScpOwor
CisgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5tYXJrRW5kKGRlbGVnYXRlLmNyZWF0ZUJsb2NrU3Rh
dGVtZW50KGJsb2NrKSwgc3RhcnRUb2tlbik7CisgICAgfQorCisgICAgLy8gMTIuMiBWYXJpYWJs
ZSBTdGF0ZW1lbnQKKworICAgIGZ1bmN0aW9uIHBhcnNlVmFyaWFibGVJZGVudGlmaWVyKCkgewor
ICAgICAgICB2YXIgdG9rZW4sIHN0YXJ0VG9rZW47CisKKyAgICAgICAgc3RhcnRUb2tlbiA9IGxv
b2thaGVhZDsKKyAgICAgICAgdG9rZW4gPSBsZXgoKTsKKworICAgICAgICBpZiAodG9rZW4udHlw
ZSAhPT0gVG9rZW4uSWRlbnRpZmllcikgeworICAgICAgICAgICAgdGhyb3dVbmV4cGVjdGVkKHRv
a2VuKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5tYXJrRW5kKGRlbGVn
YXRlLmNyZWF0ZUlkZW50aWZpZXIodG9rZW4udmFsdWUpLCBzdGFydFRva2VuKTsKKyAgICB9CisK
KyAgICBmdW5jdGlvbiBwYXJzZVZhcmlhYmxlRGVjbGFyYXRpb24oa2luZCkgeworICAgICAgICB2
YXIgaW5pdCA9IG51bGwsIGlkLCBzdGFydFRva2VuOworCisgICAgICAgIHN0YXJ0VG9rZW4gPSBs
b29rYWhlYWQ7CisgICAgICAgIGlkID0gcGFyc2VWYXJpYWJsZUlkZW50aWZpZXIoKTsKKworICAg
ICAgICAvLyAxMi4yLjEKKyAgICAgICAgaWYgKHN0cmljdCAmJiBpc1Jlc3RyaWN0ZWRXb3JkKGlk
Lm5hbWUpKSB7CisgICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQoe30sIE1lc3NhZ2VzLlN0
cmljdFZhck5hbWUpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGtpbmQgPT09ICdjb25zdCcp
IHsKKyAgICAgICAgICAgIGV4cGVjdCgnPScpOworICAgICAgICAgICAgaW5pdCA9IHBhcnNlQXNz
aWdubWVudEV4cHJlc3Npb24oKTsKKyAgICAgICAgfSBlbHNlIGlmIChtYXRjaCgnPScpKSB7Cisg
ICAgICAgICAgICBsZXgoKTsKKyAgICAgICAgICAgIGluaXQgPSBwYXJzZUFzc2lnbm1lbnRFeHBy
ZXNzaW9uKCk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gZGVsZWdhdGUubWFya0VuZChk
ZWxlZ2F0ZS5jcmVhdGVWYXJpYWJsZURlY2xhcmF0b3IoaWQsIGluaXQpLCBzdGFydFRva2VuKTsK
KyAgICB9CisKKyAgICBmdW5jdGlvbiBwYXJzZVZhcmlhYmxlRGVjbGFyYXRpb25MaXN0KGtpbmQp
IHsKKyAgICAgICAgdmFyIGxpc3QgPSBbXTsKKworICAgICAgICBkbyB7CisgICAgICAgICAgICBs
aXN0LnB1c2gocGFyc2VWYXJpYWJsZURlY2xhcmF0aW9uKGtpbmQpKTsKKyAgICAgICAgICAgIGlm
ICghbWF0Y2goJywnKSkgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgbGV4KCk7CisgICAgICAgIH0gd2hpbGUgKGluZGV4IDwgbGVuZ3RoKTsKKwor
ICAgICAgICByZXR1cm4gbGlzdDsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBwYXJzZVZhcmlhYmxl
U3RhdGVtZW50KCkgeworICAgICAgICB2YXIgZGVjbGFyYXRpb25zOworCisgICAgICAgIGV4cGVj
dEtleXdvcmQoJ3ZhcicpOworCisgICAgICAgIGRlY2xhcmF0aW9ucyA9IHBhcnNlVmFyaWFibGVE
ZWNsYXJhdGlvbkxpc3QoKTsKKworICAgICAgICBjb25zdW1lU2VtaWNvbG9uKCk7CisKKyAgICAg
ICAgcmV0dXJuIGRlbGVnYXRlLmNyZWF0ZVZhcmlhYmxlRGVjbGFyYXRpb24oZGVjbGFyYXRpb25z
LCAndmFyJyk7CisgICAgfQorCisgICAgLy8ga2luZCBtYXkgYmUgYGNvbnN0YCBvciBgbGV0YAor
ICAgIC8vIEJvdGggYXJlIGV4cGVyaW1lbnRhbCBhbmQgbm90IGluIHRoZSBzcGVjaWZpY2F0aW9u
IHlldC4KKyAgICAvLyBzZWUgaHR0cDovL3dpa2kuZWNtYXNjcmlwdC5vcmcvZG9rdS5waHA/aWQ9
aGFybW9ueTpjb25zdAorICAgIC8vIGFuZCBodHRwOi8vd2lraS5lY21hc2NyaXB0Lm9yZy9kb2t1
LnBocD9pZD1oYXJtb255OmxldAorICAgIGZ1bmN0aW9uIHBhcnNlQ29uc3RMZXREZWNsYXJhdGlv
bihraW5kKSB7CisgICAgICAgIHZhciBkZWNsYXJhdGlvbnMsIHN0YXJ0VG9rZW47CisKKyAgICAg
ICAgc3RhcnRUb2tlbiA9IGxvb2thaGVhZDsKKworICAgICAgICBleHBlY3RLZXl3b3JkKGtpbmQp
OworCisgICAgICAgIGRlY2xhcmF0aW9ucyA9IHBhcnNlVmFyaWFibGVEZWNsYXJhdGlvbkxpc3Qo
a2luZCk7CisKKyAgICAgICAgY29uc3VtZVNlbWljb2xvbigpOworCisgICAgICAgIHJldHVybiBk
ZWxlZ2F0ZS5tYXJrRW5kKGRlbGVnYXRlLmNyZWF0ZVZhcmlhYmxlRGVjbGFyYXRpb24oZGVjbGFy
YXRpb25zLCBraW5kKSwgc3RhcnRUb2tlbik7CisgICAgfQorCisgICAgLy8gMTIuMyBFbXB0eSBT
dGF0ZW1lbnQKKworICAgIGZ1bmN0aW9uIHBhcnNlRW1wdHlTdGF0ZW1lbnQoKSB7CisgICAgICAg
IGV4cGVjdCgnOycpOworICAgICAgICByZXR1cm4gZGVsZWdhdGUuY3JlYXRlRW1wdHlTdGF0ZW1l
bnQoKTsKKyAgICB9CisKKyAgICAvLyAxMi40IEV4cHJlc3Npb24gU3RhdGVtZW50CisKKyAgICBm
dW5jdGlvbiBwYXJzZUV4cHJlc3Npb25TdGF0ZW1lbnQoKSB7CisgICAgICAgIHZhciBleHByID0g
cGFyc2VFeHByZXNzaW9uKCk7CisgICAgICAgIGNvbnN1bWVTZW1pY29sb24oKTsKKyAgICAgICAg
cmV0dXJuIGRlbGVnYXRlLmNyZWF0ZUV4cHJlc3Npb25TdGF0ZW1lbnQoZXhwcik7CisgICAgfQor
CisgICAgLy8gMTIuNSBJZiBzdGF0ZW1lbnQKKworICAgIGZ1bmN0aW9uIHBhcnNlSWZTdGF0ZW1l
bnQoKSB7CisgICAgICAgIHZhciB0ZXN0LCBjb25zZXF1ZW50LCBhbHRlcm5hdGU7CisKKyAgICAg
ICAgZXhwZWN0S2V5d29yZCgnaWYnKTsKKworICAgICAgICBleHBlY3QoJygnKTsKKworICAgICAg
ICB0ZXN0ID0gcGFyc2VFeHByZXNzaW9uKCk7CisKKyAgICAgICAgZXhwZWN0KCcpJyk7CisKKyAg
ICAgICAgY29uc2VxdWVudCA9IHBhcnNlU3RhdGVtZW50KCk7CisKKyAgICAgICAgaWYgKG1hdGNo
S2V5d29yZCgnZWxzZScpKSB7CisgICAgICAgICAgICBsZXgoKTsKKyAgICAgICAgICAgIGFsdGVy
bmF0ZSA9IHBhcnNlU3RhdGVtZW50KCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBh
bHRlcm5hdGUgPSBudWxsOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGRlbGVnYXRlLmNy
ZWF0ZUlmU3RhdGVtZW50KHRlc3QsIGNvbnNlcXVlbnQsIGFsdGVybmF0ZSk7CisgICAgfQorCisg
ICAgLy8gMTIuNiBJdGVyYXRpb24gU3RhdGVtZW50cworCisgICAgZnVuY3Rpb24gcGFyc2VEb1do
aWxlU3RhdGVtZW50KCkgeworICAgICAgICB2YXIgYm9keSwgdGVzdCwgb2xkSW5JdGVyYXRpb247
CisKKyAgICAgICAgZXhwZWN0S2V5d29yZCgnZG8nKTsKKworICAgICAgICBvbGRJbkl0ZXJhdGlv
biA9IHN0YXRlLmluSXRlcmF0aW9uOworICAgICAgICBzdGF0ZS5pbkl0ZXJhdGlvbiA9IHRydWU7
CisKKyAgICAgICAgYm9keSA9IHBhcnNlU3RhdGVtZW50KCk7CisKKyAgICAgICAgc3RhdGUuaW5J
dGVyYXRpb24gPSBvbGRJbkl0ZXJhdGlvbjsKKworICAgICAgICBleHBlY3RLZXl3b3JkKCd3aGls
ZScpOworCisgICAgICAgIGV4cGVjdCgnKCcpOworCisgICAgICAgIHRlc3QgPSBwYXJzZUV4cHJl
c3Npb24oKTsKKworICAgICAgICBleHBlY3QoJyknKTsKKworICAgICAgICBpZiAobWF0Y2goJzsn
KSkgeworICAgICAgICAgICAgbGV4KCk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gZGVs
ZWdhdGUuY3JlYXRlRG9XaGlsZVN0YXRlbWVudChib2R5LCB0ZXN0KTsKKyAgICB9CisKKyAgICBm
dW5jdGlvbiBwYXJzZVdoaWxlU3RhdGVtZW50KCkgeworICAgICAgICB2YXIgdGVzdCwgYm9keSwg
b2xkSW5JdGVyYXRpb247CisKKyAgICAgICAgZXhwZWN0S2V5d29yZCgnd2hpbGUnKTsKKworICAg
ICAgICBleHBlY3QoJygnKTsKKworICAgICAgICB0ZXN0ID0gcGFyc2VFeHByZXNzaW9uKCk7CisK
KyAgICAgICAgZXhwZWN0KCcpJyk7CisKKyAgICAgICAgb2xkSW5JdGVyYXRpb24gPSBzdGF0ZS5p
bkl0ZXJhdGlvbjsKKyAgICAgICAgc3RhdGUuaW5JdGVyYXRpb24gPSB0cnVlOworCisgICAgICAg
IGJvZHkgPSBwYXJzZVN0YXRlbWVudCgpOworCisgICAgICAgIHN0YXRlLmluSXRlcmF0aW9uID0g
b2xkSW5JdGVyYXRpb247CisKKyAgICAgICAgcmV0dXJuIGRlbGVnYXRlLmNyZWF0ZVdoaWxlU3Rh
dGVtZW50KHRlc3QsIGJvZHkpOworICAgIH0KKworICAgIGZ1bmN0aW9uIHBhcnNlRm9yVmFyaWFi
bGVEZWNsYXJhdGlvbigpIHsKKyAgICAgICAgdmFyIHRva2VuLCBkZWNsYXJhdGlvbnMsIHN0YXJ0
VG9rZW47CisKKyAgICAgICAgc3RhcnRUb2tlbiA9IGxvb2thaGVhZDsKKyAgICAgICAgdG9rZW4g
PSBsZXgoKTsKKyAgICAgICAgZGVjbGFyYXRpb25zID0gcGFyc2VWYXJpYWJsZURlY2xhcmF0aW9u
TGlzdCgpOworCisgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5tYXJrRW5kKGRlbGVnYXRlLmNyZWF0
ZVZhcmlhYmxlRGVjbGFyYXRpb24oZGVjbGFyYXRpb25zLCB0b2tlbi52YWx1ZSksIHN0YXJ0VG9r
ZW4pOworICAgIH0KKworICAgIGZ1bmN0aW9uIHBhcnNlRm9yU3RhdGVtZW50KCkgeworICAgICAg
ICB2YXIgaW5pdCwgdGVzdCwgdXBkYXRlLCBsZWZ0LCByaWdodCwgYm9keSwgb2xkSW5JdGVyYXRp
b247CisKKyAgICAgICAgaW5pdCA9IHRlc3QgPSB1cGRhdGUgPSBudWxsOworCisgICAgICAgIGV4
cGVjdEtleXdvcmQoJ2ZvcicpOworCisgICAgICAgIGV4cGVjdCgnKCcpOworCisgICAgICAgIGlm
IChtYXRjaCgnOycpKSB7CisgICAgICAgICAgICBsZXgoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIGlmIChtYXRjaEtleXdvcmQoJ3ZhcicpIHx8IG1hdGNoS2V5d29yZCgnbGV0Jykp
IHsKKyAgICAgICAgICAgICAgICBzdGF0ZS5hbGxvd0luID0gZmFsc2U7CisgICAgICAgICAgICAg
ICAgaW5pdCA9IHBhcnNlRm9yVmFyaWFibGVEZWNsYXJhdGlvbigpOworICAgICAgICAgICAgICAg
IHN0YXRlLmFsbG93SW4gPSB0cnVlOworCisgICAgICAgICAgICAgICAgaWYgKGluaXQuZGVjbGFy
YXRpb25zLmxlbmd0aCA9PT0gMSAmJiBtYXRjaEtleXdvcmQoJ2luJykpIHsKKyAgICAgICAgICAg
ICAgICAgICAgbGV4KCk7CisgICAgICAgICAgICAgICAgICAgIGxlZnQgPSBpbml0OworICAgICAg
ICAgICAgICAgICAgICByaWdodCA9IHBhcnNlRXhwcmVzc2lvbigpOworICAgICAgICAgICAgICAg
ICAgICBpbml0ID0gbnVsbDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgIHN0YXRlLmFsbG93SW4gPSBmYWxzZTsKKyAgICAgICAgICAgICAg
ICBpbml0ID0gcGFyc2VFeHByZXNzaW9uKCk7CisgICAgICAgICAgICAgICAgc3RhdGUuYWxsb3dJ
biA9IHRydWU7CisKKyAgICAgICAgICAgICAgICBpZiAobWF0Y2hLZXl3b3JkKCdpbicpKSB7Cisg
ICAgICAgICAgICAgICAgICAgIC8vIExlZnRIYW5kU2lkZUV4cHJlc3Npb24KKyAgICAgICAgICAg
ICAgICAgICAgaWYgKCFpc0xlZnRIYW5kU2lkZShpbml0KSkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgdGhyb3dFcnJvclRvbGVyYW50KHt9LCBNZXNzYWdlcy5JbnZhbGlkTEhTSW5Gb3JJbik7
CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBsZXgoKTsKKyAg
ICAgICAgICAgICAgICAgICAgbGVmdCA9IGluaXQ7CisgICAgICAgICAgICAgICAgICAgIHJpZ2h0
ID0gcGFyc2VFeHByZXNzaW9uKCk7CisgICAgICAgICAgICAgICAgICAgIGluaXQgPSBudWxsOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHR5cGVv
ZiBsZWZ0ID09PSAndW5kZWZpbmVkJykgeworICAgICAgICAgICAgICAgIGV4cGVjdCgnOycpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKHR5cGVvZiBsZWZ0ID09PSAn
dW5kZWZpbmVkJykgeworCisgICAgICAgICAgICBpZiAoIW1hdGNoKCc7JykpIHsKKyAgICAgICAg
ICAgICAgICB0ZXN0ID0gcGFyc2VFeHByZXNzaW9uKCk7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBleHBlY3QoJzsnKTsKKworICAgICAgICAgICAgaWYgKCFtYXRjaCgnKScpKSB7CisgICAg
ICAgICAgICAgICAgdXBkYXRlID0gcGFyc2VFeHByZXNzaW9uKCk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKworICAgICAgICBleHBlY3QoJyknKTsKKworICAgICAgICBvbGRJbkl0ZXJhdGlv
biA9IHN0YXRlLmluSXRlcmF0aW9uOworICAgICAgICBzdGF0ZS5pbkl0ZXJhdGlvbiA9IHRydWU7
CisKKyAgICAgICAgYm9keSA9IHBhcnNlU3RhdGVtZW50KCk7CisKKyAgICAgICAgc3RhdGUuaW5J
dGVyYXRpb24gPSBvbGRJbkl0ZXJhdGlvbjsKKworICAgICAgICByZXR1cm4gKHR5cGVvZiBsZWZ0
ID09PSAndW5kZWZpbmVkJykgPworICAgICAgICAgICAgICAgIGRlbGVnYXRlLmNyZWF0ZUZvclN0
YXRlbWVudChpbml0LCB0ZXN0LCB1cGRhdGUsIGJvZHkpIDoKKyAgICAgICAgICAgICAgICBkZWxl
Z2F0ZS5jcmVhdGVGb3JJblN0YXRlbWVudChsZWZ0LCByaWdodCwgYm9keSk7CisgICAgfQorCisg
ICAgLy8gMTIuNyBUaGUgY29udGludWUgc3RhdGVtZW50CisKKyAgICBmdW5jdGlvbiBwYXJzZUNv
bnRpbnVlU3RhdGVtZW50KCkgeworICAgICAgICB2YXIgbGFiZWwgPSBudWxsLCBrZXk7CisKKyAg
ICAgICAgZXhwZWN0S2V5d29yZCgnY29udGludWUnKTsKKworICAgICAgICAvLyBPcHRpbWl6ZSB0
aGUgbW9zdCBjb21tb24gZm9ybTogJ2NvbnRpbnVlOycuCisgICAgICAgIGlmIChzb3VyY2UuY2hh
ckNvZGVBdChpbmRleCkgPT09IDB4M0IpIHsKKyAgICAgICAgICAgIGxleCgpOworCisgICAgICAg
ICAgICBpZiAoIXN0YXRlLmluSXRlcmF0aW9uKSB7CisgICAgICAgICAgICAgICAgdGhyb3dFcnJv
cih7fSwgTWVzc2FnZXMuSWxsZWdhbENvbnRpbnVlKTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgcmV0dXJuIGRlbGVnYXRlLmNyZWF0ZUNvbnRpbnVlU3RhdGVtZW50KG51bGwpOworICAg
ICAgICB9CisKKyAgICAgICAgaWYgKHBlZWtMaW5lVGVybWluYXRvcigpKSB7CisgICAgICAgICAg
ICBpZiAoIXN0YXRlLmluSXRlcmF0aW9uKSB7CisgICAgICAgICAgICAgICAgdGhyb3dFcnJvcih7
fSwgTWVzc2FnZXMuSWxsZWdhbENvbnRpbnVlKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgcmV0dXJuIGRlbGVnYXRlLmNyZWF0ZUNvbnRpbnVlU3RhdGVtZW50KG51bGwpOworICAgICAg
ICB9CisKKyAgICAgICAgaWYgKGxvb2thaGVhZC50eXBlID09PSBUb2tlbi5JZGVudGlmaWVyKSB7
CisgICAgICAgICAgICBsYWJlbCA9IHBhcnNlVmFyaWFibGVJZGVudGlmaWVyKCk7CisKKyAgICAg
ICAgICAgIGtleSA9ICckJyArIGxhYmVsLm5hbWU7CisgICAgICAgICAgICBpZiAoIU9iamVjdC5w
cm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzdGF0ZS5sYWJlbFNldCwga2V5KSkgeworICAg
ICAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLlVua25vd25MYWJlbCwgbGFiZWwu
bmFtZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBjb25zdW1lU2VtaWNv
bG9uKCk7CisKKyAgICAgICAgaWYgKGxhYmVsID09PSBudWxsICYmICFzdGF0ZS5pbkl0ZXJhdGlv
bikgeworICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuSWxsZWdhbENvbnRpbnVl
KTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5jcmVhdGVDb250aW51ZVN0
YXRlbWVudChsYWJlbCk7CisgICAgfQorCisgICAgLy8gMTIuOCBUaGUgYnJlYWsgc3RhdGVtZW50
CisKKyAgICBmdW5jdGlvbiBwYXJzZUJyZWFrU3RhdGVtZW50KCkgeworICAgICAgICB2YXIgbGFi
ZWwgPSBudWxsLCBrZXk7CisKKyAgICAgICAgZXhwZWN0S2V5d29yZCgnYnJlYWsnKTsKKworICAg
ICAgICAvLyBDYXRjaCB0aGUgdmVyeSBjb21tb24gY2FzZSBmaXJzdDogaW1tZWRpYXRlbHkgYSBz
ZW1pY29sb24gKFUrMDAzQikuCisgICAgICAgIGlmIChzb3VyY2UuY2hhckNvZGVBdChpbmRleCkg
PT09IDB4M0IpIHsKKyAgICAgICAgICAgIGxleCgpOworCisgICAgICAgICAgICBpZiAoIShzdGF0
ZS5pbkl0ZXJhdGlvbiB8fCBzdGF0ZS5pblN3aXRjaCkpIHsKKyAgICAgICAgICAgICAgICB0aHJv
d0Vycm9yKHt9LCBNZXNzYWdlcy5JbGxlZ2FsQnJlYWspOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICByZXR1cm4gZGVsZWdhdGUuY3JlYXRlQnJlYWtTdGF0ZW1lbnQobnVsbCk7CisgICAg
ICAgIH0KKworICAgICAgICBpZiAocGVla0xpbmVUZXJtaW5hdG9yKCkpIHsKKyAgICAgICAgICAg
IGlmICghKHN0YXRlLmluSXRlcmF0aW9uIHx8IHN0YXRlLmluU3dpdGNoKSkgeworICAgICAgICAg
ICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLklsbGVnYWxCcmVhayk7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5jcmVhdGVCcmVha1N0YXRlbWVudChu
dWxsKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChsb29rYWhlYWQudHlwZSA9PT0gVG9rZW4u
SWRlbnRpZmllcikgeworICAgICAgICAgICAgbGFiZWwgPSBwYXJzZVZhcmlhYmxlSWRlbnRpZmll
cigpOworCisgICAgICAgICAgICBrZXkgPSAnJCcgKyBsYWJlbC5uYW1lOworICAgICAgICAgICAg
aWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc3RhdGUubGFiZWxTZXQs
IGtleSkpIHsKKyAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5Vbmtub3du
TGFiZWwsIGxhYmVsLm5hbWUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAg
Y29uc3VtZVNlbWljb2xvbigpOworCisgICAgICAgIGlmIChsYWJlbCA9PT0gbnVsbCAmJiAhKHN0
YXRlLmluSXRlcmF0aW9uIHx8IHN0YXRlLmluU3dpdGNoKSkgeworICAgICAgICAgICAgdGhyb3dF
cnJvcih7fSwgTWVzc2FnZXMuSWxsZWdhbEJyZWFrKTsKKyAgICAgICAgfQorCisgICAgICAgIHJl
dHVybiBkZWxlZ2F0ZS5jcmVhdGVCcmVha1N0YXRlbWVudChsYWJlbCk7CisgICAgfQorCisgICAg
Ly8gMTIuOSBUaGUgcmV0dXJuIHN0YXRlbWVudAorCisgICAgZnVuY3Rpb24gcGFyc2VSZXR1cm5T
dGF0ZW1lbnQoKSB7CisgICAgICAgIHZhciBhcmd1bWVudCA9IG51bGw7CisKKyAgICAgICAgZXhw
ZWN0S2V5d29yZCgncmV0dXJuJyk7CisKKyAgICAgICAgaWYgKCFzdGF0ZS5pbkZ1bmN0aW9uQm9k
eSkgeworICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KHt9LCBNZXNzYWdlcy5JbGxlZ2Fs
UmV0dXJuKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vICdyZXR1cm4nIGZvbGxvd2VkIGJ5IGEg
c3BhY2UgYW5kIGFuIGlkZW50aWZpZXIgaXMgdmVyeSBjb21tb24uCisgICAgICAgIGlmIChzb3Vy
Y2UuY2hhckNvZGVBdChpbmRleCkgPT09IDB4MjApIHsKKyAgICAgICAgICAgIGlmIChpc0lkZW50
aWZpZXJTdGFydChzb3VyY2UuY2hhckNvZGVBdChpbmRleCArIDEpKSkgeworICAgICAgICAgICAg
ICAgIGFyZ3VtZW50ID0gcGFyc2VFeHByZXNzaW9uKCk7CisgICAgICAgICAgICAgICAgY29uc3Vt
ZVNlbWljb2xvbigpOworICAgICAgICAgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5jcmVhdGVSZXR1
cm5TdGF0ZW1lbnQoYXJndW1lbnQpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAg
ICAgaWYgKHBlZWtMaW5lVGVybWluYXRvcigpKSB7CisgICAgICAgICAgICByZXR1cm4gZGVsZWdh
dGUuY3JlYXRlUmV0dXJuU3RhdGVtZW50KG51bGwpOworICAgICAgICB9CisKKyAgICAgICAgaWYg
KCFtYXRjaCgnOycpKSB7CisgICAgICAgICAgICBpZiAoIW1hdGNoKCd9JykgJiYgbG9va2FoZWFk
LnR5cGUgIT09IFRva2VuLkVPRikgeworICAgICAgICAgICAgICAgIGFyZ3VtZW50ID0gcGFyc2VF
eHByZXNzaW9uKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBjb25zdW1l
U2VtaWNvbG9uKCk7CisKKyAgICAgICAgcmV0dXJuIGRlbGVnYXRlLmNyZWF0ZVJldHVyblN0YXRl
bWVudChhcmd1bWVudCk7CisgICAgfQorCisgICAgLy8gMTIuMTAgVGhlIHdpdGggc3RhdGVtZW50
CisKKyAgICBmdW5jdGlvbiBwYXJzZVdpdGhTdGF0ZW1lbnQoKSB7CisgICAgICAgIHZhciBvYmpl
Y3QsIGJvZHk7CisKKyAgICAgICAgaWYgKHN0cmljdCkgeworICAgICAgICAgICAgLy8gVE9ETyhp
a2FyaWVuYXRvcik6IFNob3VsZCB3ZSB1cGRhdGUgdGhlIHRlc3QgY2FzZXMgaW5zdGVhZD8KKyAg
ICAgICAgICAgIHNraXBDb21tZW50KCk7CisgICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQo
e30sIE1lc3NhZ2VzLlN0cmljdE1vZGVXaXRoKTsKKyAgICAgICAgfQorCisgICAgICAgIGV4cGVj
dEtleXdvcmQoJ3dpdGgnKTsKKworICAgICAgICBleHBlY3QoJygnKTsKKworICAgICAgICBvYmpl
Y3QgPSBwYXJzZUV4cHJlc3Npb24oKTsKKworICAgICAgICBleHBlY3QoJyknKTsKKworICAgICAg
ICBib2R5ID0gcGFyc2VTdGF0ZW1lbnQoKTsKKworICAgICAgICByZXR1cm4gZGVsZWdhdGUuY3Jl
YXRlV2l0aFN0YXRlbWVudChvYmplY3QsIGJvZHkpOworICAgIH0KKworICAgIC8vIDEyLjEwIFRo
ZSBzd2l0aCBzdGF0ZW1lbnQKKworICAgIGZ1bmN0aW9uIHBhcnNlU3dpdGNoQ2FzZSgpIHsKKyAg
ICAgICAgdmFyIHRlc3QsIGNvbnNlcXVlbnQgPSBbXSwgc3RhdGVtZW50LCBzdGFydFRva2VuOwor
CisgICAgICAgIHN0YXJ0VG9rZW4gPSBsb29rYWhlYWQ7CisgICAgICAgIGlmIChtYXRjaEtleXdv
cmQoJ2RlZmF1bHQnKSkgeworICAgICAgICAgICAgbGV4KCk7CisgICAgICAgICAgICB0ZXN0ID0g
bnVsbDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGV4cGVjdEtleXdvcmQoJ2Nhc2Un
KTsKKyAgICAgICAgICAgIHRlc3QgPSBwYXJzZUV4cHJlc3Npb24oKTsKKyAgICAgICAgfQorICAg
ICAgICBleHBlY3QoJzonKTsKKworICAgICAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHsKKyAg
ICAgICAgICAgIGlmIChtYXRjaCgnfScpIHx8IG1hdGNoS2V5d29yZCgnZGVmYXVsdCcpIHx8IG1h
dGNoS2V5d29yZCgnY2FzZScpKSB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBzdGF0ZW1lbnQgPSBwYXJzZVN0YXRlbWVudCgpOworICAgICAgICAg
ICAgY29uc2VxdWVudC5wdXNoKHN0YXRlbWVudCk7CisgICAgICAgIH0KKworICAgICAgICByZXR1
cm4gZGVsZWdhdGUubWFya0VuZChkZWxlZ2F0ZS5jcmVhdGVTd2l0Y2hDYXNlKHRlc3QsIGNvbnNl
cXVlbnQpLCBzdGFydFRva2VuKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBwYXJzZVN3aXRjaFN0
YXRlbWVudCgpIHsKKyAgICAgICAgdmFyIGRpc2NyaW1pbmFudCwgY2FzZXMsIGNsYXVzZSwgb2xk
SW5Td2l0Y2gsIGRlZmF1bHRGb3VuZDsKKworICAgICAgICBleHBlY3RLZXl3b3JkKCdzd2l0Y2gn
KTsKKworICAgICAgICBleHBlY3QoJygnKTsKKworICAgICAgICBkaXNjcmltaW5hbnQgPSBwYXJz
ZUV4cHJlc3Npb24oKTsKKworICAgICAgICBleHBlY3QoJyknKTsKKworICAgICAgICBleHBlY3Qo
J3snKTsKKworICAgICAgICBjYXNlcyA9IFtdOworCisgICAgICAgIGlmIChtYXRjaCgnfScpKSB7
CisgICAgICAgICAgICBsZXgoKTsKKyAgICAgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5jcmVhdGVT
d2l0Y2hTdGF0ZW1lbnQoZGlzY3JpbWluYW50LCBjYXNlcyk7CisgICAgICAgIH0KKworICAgICAg
ICBvbGRJblN3aXRjaCA9IHN0YXRlLmluU3dpdGNoOworICAgICAgICBzdGF0ZS5pblN3aXRjaCA9
IHRydWU7CisgICAgICAgIGRlZmF1bHRGb3VuZCA9IGZhbHNlOworCisgICAgICAgIHdoaWxlIChp
bmRleCA8IGxlbmd0aCkgeworICAgICAgICAgICAgaWYgKG1hdGNoKCd9JykpIHsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNsYXVzZSA9IHBhcnNl
U3dpdGNoQ2FzZSgpOworICAgICAgICAgICAgaWYgKGNsYXVzZS50ZXN0ID09PSBudWxsKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKGRlZmF1bHRGb3VuZCkgeworICAgICAgICAgICAgICAgICAgICB0
aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5NdWx0aXBsZURlZmF1bHRzSW5Td2l0Y2gpOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBkZWZhdWx0Rm91bmQgPSB0cnVlOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgY2FzZXMucHVzaChjbGF1c2UpOworICAgICAgICB9CisKKyAg
ICAgICAgc3RhdGUuaW5Td2l0Y2ggPSBvbGRJblN3aXRjaDsKKworICAgICAgICBleHBlY3QoJ30n
KTsKKworICAgICAgICByZXR1cm4gZGVsZWdhdGUuY3JlYXRlU3dpdGNoU3RhdGVtZW50KGRpc2Ny
aW1pbmFudCwgY2FzZXMpOworICAgIH0KKworICAgIC8vIDEyLjEzIFRoZSB0aHJvdyBzdGF0ZW1l
bnQKKworICAgIGZ1bmN0aW9uIHBhcnNlVGhyb3dTdGF0ZW1lbnQoKSB7CisgICAgICAgIHZhciBh
cmd1bWVudDsKKworICAgICAgICBleHBlY3RLZXl3b3JkKCd0aHJvdycpOworCisgICAgICAgIGlm
IChwZWVrTGluZVRlcm1pbmF0b3IoKSkgeworICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVz
c2FnZXMuTmV3bGluZUFmdGVyVGhyb3cpOworICAgICAgICB9CisKKyAgICAgICAgYXJndW1lbnQg
PSBwYXJzZUV4cHJlc3Npb24oKTsKKworICAgICAgICBjb25zdW1lU2VtaWNvbG9uKCk7CisKKyAg
ICAgICAgcmV0dXJuIGRlbGVnYXRlLmNyZWF0ZVRocm93U3RhdGVtZW50KGFyZ3VtZW50KTsKKyAg
ICB9CisKKyAgICAvLyAxMi4xNCBUaGUgdHJ5IHN0YXRlbWVudAorCisgICAgZnVuY3Rpb24gcGFy
c2VDYXRjaENsYXVzZSgpIHsKKyAgICAgICAgdmFyIHBhcmFtLCBib2R5LCBzdGFydFRva2VuOwor
CisgICAgICAgIHN0YXJ0VG9rZW4gPSBsb29rYWhlYWQ7CisgICAgICAgIGV4cGVjdEtleXdvcmQo
J2NhdGNoJyk7CisKKyAgICAgICAgZXhwZWN0KCcoJyk7CisgICAgICAgIGlmIChtYXRjaCgnKScp
KSB7CisgICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWQobG9va2FoZWFkKTsKKyAgICAgICAgfQor
CisgICAgICAgIHBhcmFtID0gcGFyc2VWYXJpYWJsZUlkZW50aWZpZXIoKTsKKyAgICAgICAgLy8g
MTIuMTQuMQorICAgICAgICBpZiAoc3RyaWN0ICYmIGlzUmVzdHJpY3RlZFdvcmQocGFyYW0ubmFt
ZSkpIHsKKyAgICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudCh7fSwgTWVzc2FnZXMuU3RyaWN0
Q2F0Y2hWYXJpYWJsZSk7CisgICAgICAgIH0KKworICAgICAgICBleHBlY3QoJyknKTsKKyAgICAg
ICAgYm9keSA9IHBhcnNlQmxvY2soKTsKKyAgICAgICAgcmV0dXJuIGRlbGVnYXRlLm1hcmtFbmQo
ZGVsZWdhdGUuY3JlYXRlQ2F0Y2hDbGF1c2UocGFyYW0sIGJvZHkpLCBzdGFydFRva2VuKTsKKyAg
ICB9CisKKyAgICBmdW5jdGlvbiBwYXJzZVRyeVN0YXRlbWVudCgpIHsKKyAgICAgICAgdmFyIGJs
b2NrLCBoYW5kbGVycyA9IFtdLCBmaW5hbGl6ZXIgPSBudWxsOworCisgICAgICAgIGV4cGVjdEtl
eXdvcmQoJ3RyeScpOworCisgICAgICAgIGJsb2NrID0gcGFyc2VCbG9jaygpOworCisgICAgICAg
IGlmIChtYXRjaEtleXdvcmQoJ2NhdGNoJykpIHsKKyAgICAgICAgICAgIGhhbmRsZXJzLnB1c2go
cGFyc2VDYXRjaENsYXVzZSgpKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtYXRjaEtleXdv
cmQoJ2ZpbmFsbHknKSkgeworICAgICAgICAgICAgbGV4KCk7CisgICAgICAgICAgICBmaW5hbGl6
ZXIgPSBwYXJzZUJsb2NrKCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaGFuZGxlcnMubGVu
Z3RoID09PSAwICYmICFmaW5hbGl6ZXIpIHsKKyAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1l
c3NhZ2VzLk5vQ2F0Y2hPckZpbmFsbHkpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGRl
bGVnYXRlLmNyZWF0ZVRyeVN0YXRlbWVudChibG9jaywgW10sIGhhbmRsZXJzLCBmaW5hbGl6ZXIp
OworICAgIH0KKworICAgIC8vIDEyLjE1IFRoZSBkZWJ1Z2dlciBzdGF0ZW1lbnQKKworICAgIGZ1
bmN0aW9uIHBhcnNlRGVidWdnZXJTdGF0ZW1lbnQoKSB7CisgICAgICAgIGV4cGVjdEtleXdvcmQo
J2RlYnVnZ2VyJyk7CisKKyAgICAgICAgY29uc3VtZVNlbWljb2xvbigpOworCisgICAgICAgIHJl
dHVybiBkZWxlZ2F0ZS5jcmVhdGVEZWJ1Z2dlclN0YXRlbWVudCgpOworICAgIH0KKworICAgIC8v
IDEyIFN0YXRlbWVudHMKKworICAgIGZ1bmN0aW9uIHBhcnNlU3RhdGVtZW50KCkgeworICAgICAg
ICB2YXIgdHlwZSA9IGxvb2thaGVhZC50eXBlLAorICAgICAgICAgICAgZXhwciwKKyAgICAgICAg
ICAgIGxhYmVsZWRCb2R5LAorICAgICAgICAgICAga2V5LAorICAgICAgICAgICAgc3RhcnRUb2tl
bjsKKworICAgICAgICBpZiAodHlwZSA9PT0gVG9rZW4uRU9GKSB7CisgICAgICAgICAgICB0aHJv
d1VuZXhwZWN0ZWQobG9va2FoZWFkKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh0eXBlID09
PSBUb2tlbi5QdW5jdHVhdG9yICYmIGxvb2thaGVhZC52YWx1ZSA9PT0gJ3snKSB7CisgICAgICAg
ICAgICByZXR1cm4gcGFyc2VCbG9jaygpOworICAgICAgICB9CisKKyAgICAgICAgc3RhcnRUb2tl
biA9IGxvb2thaGVhZDsKKworICAgICAgICBpZiAodHlwZSA9PT0gVG9rZW4uUHVuY3R1YXRvcikg
eworICAgICAgICAgICAgc3dpdGNoIChsb29rYWhlYWQudmFsdWUpIHsKKyAgICAgICAgICAgIGNh
c2UgJzsnOgorICAgICAgICAgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5tYXJrRW5kKHBhcnNlRW1w
dHlTdGF0ZW1lbnQoKSwgc3RhcnRUb2tlbik7CisgICAgICAgICAgICBjYXNlICcoJzoKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZGVsZWdhdGUubWFya0VuZChwYXJzZUV4cHJlc3Npb25TdGF0ZW1l
bnQoKSwgc3RhcnRUb2tlbik7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKHR5cGUgPT09
IFRva2VuLktleXdvcmQpIHsKKyAgICAgICAgICAgIHN3aXRjaCAobG9va2FoZWFkLnZhbHVlKSB7
CisgICAgICAgICAgICBjYXNlICdicmVhayc6CisgICAgICAgICAgICAgICAgcmV0dXJuIGRlbGVn
YXRlLm1hcmtFbmQocGFyc2VCcmVha1N0YXRlbWVudCgpLCBzdGFydFRva2VuKTsKKyAgICAgICAg
ICAgIGNhc2UgJ2NvbnRpbnVlJzoKKyAgICAgICAgICAgICAgICByZXR1cm4gZGVsZWdhdGUubWFy
a0VuZChwYXJzZUNvbnRpbnVlU3RhdGVtZW50KCksIHN0YXJ0VG9rZW4pOworICAgICAgICAgICAg
Y2FzZSAnZGVidWdnZXInOgorICAgICAgICAgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5tYXJrRW5k
KHBhcnNlRGVidWdnZXJTdGF0ZW1lbnQoKSwgc3RhcnRUb2tlbik7CisgICAgICAgICAgICBjYXNl
ICdkbyc6CisgICAgICAgICAgICAgICAgcmV0dXJuIGRlbGVnYXRlLm1hcmtFbmQocGFyc2VEb1do
aWxlU3RhdGVtZW50KCksIHN0YXJ0VG9rZW4pOworICAgICAgICAgICAgY2FzZSAnZm9yJzoKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZGVsZWdhdGUubWFya0VuZChwYXJzZUZvclN0YXRlbWVudCgp
LCBzdGFydFRva2VuKTsKKyAgICAgICAgICAgIGNhc2UgJ2Z1bmN0aW9uJzoKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZGVsZWdhdGUubWFya0VuZChwYXJzZUZ1bmN0aW9uRGVjbGFyYXRpb24oKSwg
c3RhcnRUb2tlbik7CisgICAgICAgICAgICBjYXNlICdpZic6CisgICAgICAgICAgICAgICAgcmV0
dXJuIGRlbGVnYXRlLm1hcmtFbmQocGFyc2VJZlN0YXRlbWVudCgpLCBzdGFydFRva2VuKTsKKyAg
ICAgICAgICAgIGNhc2UgJ3JldHVybic6CisgICAgICAgICAgICAgICAgcmV0dXJuIGRlbGVnYXRl
Lm1hcmtFbmQocGFyc2VSZXR1cm5TdGF0ZW1lbnQoKSwgc3RhcnRUb2tlbik7CisgICAgICAgICAg
ICBjYXNlICdzd2l0Y2gnOgorICAgICAgICAgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5tYXJrRW5k
KHBhcnNlU3dpdGNoU3RhdGVtZW50KCksIHN0YXJ0VG9rZW4pOworICAgICAgICAgICAgY2FzZSAn
dGhyb3cnOgorICAgICAgICAgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5tYXJrRW5kKHBhcnNlVGhy
b3dTdGF0ZW1lbnQoKSwgc3RhcnRUb2tlbik7CisgICAgICAgICAgICBjYXNlICd0cnknOgorICAg
ICAgICAgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5tYXJrRW5kKHBhcnNlVHJ5U3RhdGVtZW50KCks
IHN0YXJ0VG9rZW4pOworICAgICAgICAgICAgY2FzZSAndmFyJzoKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZGVsZWdhdGUubWFya0VuZChwYXJzZVZhcmlhYmxlU3RhdGVtZW50KCksIHN0YXJ0VG9r
ZW4pOworICAgICAgICAgICAgY2FzZSAnd2hpbGUnOgorICAgICAgICAgICAgICAgIHJldHVybiBk
ZWxlZ2F0ZS5tYXJrRW5kKHBhcnNlV2hpbGVTdGF0ZW1lbnQoKSwgc3RhcnRUb2tlbik7CisgICAg
ICAgICAgICBjYXNlICd3aXRoJzoKKyAgICAgICAgICAgICAgICByZXR1cm4gZGVsZWdhdGUubWFy
a0VuZChwYXJzZVdpdGhTdGF0ZW1lbnQoKSwgc3RhcnRUb2tlbik7CisgICAgICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisK
KyAgICAgICAgZXhwciA9IHBhcnNlRXhwcmVzc2lvbigpOworCisgICAgICAgIC8vIDEyLjEyIExh
YmVsbGVkIFN0YXRlbWVudHMKKyAgICAgICAgaWYgKChleHByLnR5cGUgPT09IFN5bnRheC5JZGVu
dGlmaWVyKSAmJiBtYXRjaCgnOicpKSB7CisgICAgICAgICAgICBsZXgoKTsKKworICAgICAgICAg
ICAga2V5ID0gJyQnICsgZXhwci5uYW1lOworICAgICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5
cGUuaGFzT3duUHJvcGVydHkuY2FsbChzdGF0ZS5sYWJlbFNldCwga2V5KSkgeworICAgICAgICAg
ICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLlJlZGVjbGFyYXRpb24sICdMYWJlbCcsIGV4
cHIubmFtZSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHN0YXRlLmxhYmVsU2V0W2tl
eV0gPSB0cnVlOworICAgICAgICAgICAgbGFiZWxlZEJvZHkgPSBwYXJzZVN0YXRlbWVudCgpOwor
ICAgICAgICAgICAgZGVsZXRlIHN0YXRlLmxhYmVsU2V0W2tleV07CisgICAgICAgICAgICByZXR1
cm4gZGVsZWdhdGUubWFya0VuZChkZWxlZ2F0ZS5jcmVhdGVMYWJlbGVkU3RhdGVtZW50KGV4cHIs
IGxhYmVsZWRCb2R5KSwgc3RhcnRUb2tlbik7CisgICAgICAgIH0KKworICAgICAgICBjb25zdW1l
U2VtaWNvbG9uKCk7CisKKyAgICAgICAgcmV0dXJuIGRlbGVnYXRlLm1hcmtFbmQoZGVsZWdhdGUu
Y3JlYXRlRXhwcmVzc2lvblN0YXRlbWVudChleHByKSwgc3RhcnRUb2tlbik7CisgICAgfQorCisg
ICAgLy8gMTMgRnVuY3Rpb24gRGVmaW5pdGlvbgorCisgICAgZnVuY3Rpb24gcGFyc2VGdW5jdGlv
blNvdXJjZUVsZW1lbnRzKCkgeworICAgICAgICB2YXIgc291cmNlRWxlbWVudCwgc291cmNlRWxl
bWVudHMgPSBbXSwgdG9rZW4sIGRpcmVjdGl2ZSwgZmlyc3RSZXN0cmljdGVkLAorICAgICAgICAg
ICAgb2xkTGFiZWxTZXQsIG9sZEluSXRlcmF0aW9uLCBvbGRJblN3aXRjaCwgb2xkSW5GdW5jdGlv
bkJvZHksIHN0YXJ0VG9rZW47CisKKyAgICAgICAgc3RhcnRUb2tlbiA9IGxvb2thaGVhZDsKKyAg
ICAgICAgZXhwZWN0KCd7Jyk7CisKKyAgICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7Cisg
ICAgICAgICAgICBpZiAobG9va2FoZWFkLnR5cGUgIT09IFRva2VuLlN0cmluZ0xpdGVyYWwpIHsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRva2Vu
ID0gbG9va2FoZWFkOworCisgICAgICAgICAgICBzb3VyY2VFbGVtZW50ID0gcGFyc2VTb3VyY2VF
bGVtZW50KCk7CisgICAgICAgICAgICBzb3VyY2VFbGVtZW50cy5wdXNoKHNvdXJjZUVsZW1lbnQp
OworICAgICAgICAgICAgaWYgKHNvdXJjZUVsZW1lbnQuZXhwcmVzc2lvbi50eXBlICE9PSBTeW50
YXguTGl0ZXJhbCkgeworICAgICAgICAgICAgICAgIC8vIHRoaXMgaXMgbm90IGRpcmVjdGl2ZQor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZGlyZWN0
aXZlID0gc291cmNlLnNsaWNlKHRva2VuLnN0YXJ0ICsgMSwgdG9rZW4uZW5kIC0gMSk7CisgICAg
ICAgICAgICBpZiAoZGlyZWN0aXZlID09PSAndXNlIHN0cmljdCcpIHsKKyAgICAgICAgICAgICAg
ICBzdHJpY3QgPSB0cnVlOworICAgICAgICAgICAgICAgIGlmIChmaXJzdFJlc3RyaWN0ZWQpIHsK
KyAgICAgICAgICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KGZpcnN0UmVzdHJpY3RlZCwg
TWVzc2FnZXMuU3RyaWN0T2N0YWxMaXRlcmFsKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlmICghZmlyc3RSZXN0cmljdGVkICYmIHRv
a2VuLm9jdGFsKSB7CisgICAgICAgICAgICAgICAgICAgIGZpcnN0UmVzdHJpY3RlZCA9IHRva2Vu
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAg
IG9sZExhYmVsU2V0ID0gc3RhdGUubGFiZWxTZXQ7CisgICAgICAgIG9sZEluSXRlcmF0aW9uID0g
c3RhdGUuaW5JdGVyYXRpb247CisgICAgICAgIG9sZEluU3dpdGNoID0gc3RhdGUuaW5Td2l0Y2g7
CisgICAgICAgIG9sZEluRnVuY3Rpb25Cb2R5ID0gc3RhdGUuaW5GdW5jdGlvbkJvZHk7CisKKyAg
ICAgICAgc3RhdGUubGFiZWxTZXQgPSB7fTsKKyAgICAgICAgc3RhdGUuaW5JdGVyYXRpb24gPSBm
YWxzZTsKKyAgICAgICAgc3RhdGUuaW5Td2l0Y2ggPSBmYWxzZTsKKyAgICAgICAgc3RhdGUuaW5G
dW5jdGlvbkJvZHkgPSB0cnVlOworCisgICAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkgewor
ICAgICAgICAgICAgaWYgKG1hdGNoKCd9JykpIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIHNvdXJjZUVsZW1lbnQgPSBwYXJzZVNvdXJjZUVsZW1l
bnQoKTsKKyAgICAgICAgICAgIGlmICh0eXBlb2Ygc291cmNlRWxlbWVudCA9PT0gJ3VuZGVmaW5l
ZCcpIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IHNvdXJjZUVsZW1lbnRzLnB1c2goc291cmNlRWxlbWVudCk7CisgICAgICAgIH0KKworICAgICAg
ICBleHBlY3QoJ30nKTsKKworICAgICAgICBzdGF0ZS5sYWJlbFNldCA9IG9sZExhYmVsU2V0Owor
ICAgICAgICBzdGF0ZS5pbkl0ZXJhdGlvbiA9IG9sZEluSXRlcmF0aW9uOworICAgICAgICBzdGF0
ZS5pblN3aXRjaCA9IG9sZEluU3dpdGNoOworICAgICAgICBzdGF0ZS5pbkZ1bmN0aW9uQm9keSA9
IG9sZEluRnVuY3Rpb25Cb2R5OworCisgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5tYXJrRW5kKGRl
bGVnYXRlLmNyZWF0ZUJsb2NrU3RhdGVtZW50KHNvdXJjZUVsZW1lbnRzKSwgc3RhcnRUb2tlbik7
CisgICAgfQorCisgICAgZnVuY3Rpb24gcGFyc2VQYXJhbXMoZmlyc3RSZXN0cmljdGVkKSB7Cisg
ICAgICAgIHZhciBwYXJhbSwgcGFyYW1zID0gW10sIHRva2VuLCBzdHJpY3RlZCwgcGFyYW1TZXQs
IGtleSwgbWVzc2FnZTsKKyAgICAgICAgZXhwZWN0KCcoJyk7CisKKyAgICAgICAgaWYgKCFtYXRj
aCgnKScpKSB7CisgICAgICAgICAgICBwYXJhbVNldCA9IHt9OworICAgICAgICAgICAgd2hpbGUg
KGluZGV4IDwgbGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgdG9rZW4gPSBsb29rYWhlYWQ7Cisg
ICAgICAgICAgICAgICAgcGFyYW0gPSBwYXJzZVZhcmlhYmxlSWRlbnRpZmllcigpOworICAgICAg
ICAgICAgICAgIGtleSA9ICckJyArIHRva2VuLnZhbHVlOworICAgICAgICAgICAgICAgIGlmIChz
dHJpY3QpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlzUmVzdHJpY3RlZFdvcmQodG9rZW4u
dmFsdWUpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzdHJpY3RlZCA9IHRva2VuOworICAg
ICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSA9IE1lc3NhZ2VzLlN0cmljdFBhcmFtTmFtZTsK
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAoT2JqZWN0LnBy
b3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHBhcmFtU2V0LCBrZXkpKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBzdHJpY3RlZCA9IHRva2VuOworICAgICAgICAgICAgICAgICAgICAgICAg
bWVzc2FnZSA9IE1lc3NhZ2VzLlN0cmljdFBhcmFtRHVwZTsKKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIWZpcnN0UmVzdHJpY3RlZCkgeworICAgICAg
ICAgICAgICAgICAgICBpZiAoaXNSZXN0cmljdGVkV29yZCh0b2tlbi52YWx1ZSkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGZpcnN0UmVzdHJpY3RlZCA9IHRva2VuOworICAgICAgICAgICAg
ICAgICAgICAgICAgbWVzc2FnZSA9IE1lc3NhZ2VzLlN0cmljdFBhcmFtTmFtZTsKKyAgICAgICAg
ICAgICAgICAgICAgfSBlbHNlIGlmIChpc1N0cmljdE1vZGVSZXNlcnZlZFdvcmQodG9rZW4udmFs
dWUpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdFJlc3RyaWN0ZWQgPSB0b2tlbjsK
KyAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBNZXNzYWdlcy5TdHJpY3RSZXNlcnZl
ZFdvcmQ7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoT2JqZWN0LnByb3RvdHlwZS5o
YXNPd25Qcm9wZXJ0eS5jYWxsKHBhcmFtU2V0LCBrZXkpKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBmaXJzdFJlc3RyaWN0ZWQgPSB0b2tlbjsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1l
c3NhZ2UgPSBNZXNzYWdlcy5TdHJpY3RQYXJhbUR1cGU7CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcGFyYW1zLnB1c2gocGFyYW0pOwor
ICAgICAgICAgICAgICAgIHBhcmFtU2V0W2tleV0gPSB0cnVlOworICAgICAgICAgICAgICAgIGlm
IChtYXRjaCgnKScpKSB7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBleHBlY3QoJywnKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorCisgICAgICAgIGV4cGVjdCgnKScpOworCisgICAgICAgIHJldHVybiB7CisgICAgICAg
ICAgICBwYXJhbXM6IHBhcmFtcywKKyAgICAgICAgICAgIHN0cmljdGVkOiBzdHJpY3RlZCwKKyAg
ICAgICAgICAgIGZpcnN0UmVzdHJpY3RlZDogZmlyc3RSZXN0cmljdGVkLAorICAgICAgICAgICAg
bWVzc2FnZTogbWVzc2FnZQorICAgICAgICB9OworICAgIH0KKworICAgIGZ1bmN0aW9uIHBhcnNl
RnVuY3Rpb25EZWNsYXJhdGlvbigpIHsKKyAgICAgICAgdmFyIGlkLCBwYXJhbXMgPSBbXSwgYm9k
eSwgdG9rZW4sIHN0cmljdGVkLCB0bXAsIGZpcnN0UmVzdHJpY3RlZCwgbWVzc2FnZSwgcHJldmlv
dXNTdHJpY3QsIHN0YXJ0VG9rZW47CisKKyAgICAgICAgc3RhcnRUb2tlbiA9IGxvb2thaGVhZDsK
KworICAgICAgICBleHBlY3RLZXl3b3JkKCdmdW5jdGlvbicpOworICAgICAgICB0b2tlbiA9IGxv
b2thaGVhZDsKKyAgICAgICAgaWQgPSBwYXJzZVZhcmlhYmxlSWRlbnRpZmllcigpOworICAgICAg
ICBpZiAoc3RyaWN0KSB7CisgICAgICAgICAgICBpZiAoaXNSZXN0cmljdGVkV29yZCh0b2tlbi52
YWx1ZSkpIHsKKyAgICAgICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQodG9rZW4sIE1lc3Nh
Z2VzLlN0cmljdEZ1bmN0aW9uTmFtZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICBpZiAoaXNSZXN0cmljdGVkV29yZCh0b2tlbi52YWx1ZSkpIHsKKyAgICAg
ICAgICAgICAgICBmaXJzdFJlc3RyaWN0ZWQgPSB0b2tlbjsKKyAgICAgICAgICAgICAgICBtZXNz
YWdlID0gTWVzc2FnZXMuU3RyaWN0RnVuY3Rpb25OYW1lOworICAgICAgICAgICAgfSBlbHNlIGlm
IChpc1N0cmljdE1vZGVSZXNlcnZlZFdvcmQodG9rZW4udmFsdWUpKSB7CisgICAgICAgICAgICAg
ICAgZmlyc3RSZXN0cmljdGVkID0gdG9rZW47CisgICAgICAgICAgICAgICAgbWVzc2FnZSA9IE1l
c3NhZ2VzLlN0cmljdFJlc2VydmVkV29yZDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisg
ICAgICAgIHRtcCA9IHBhcnNlUGFyYW1zKGZpcnN0UmVzdHJpY3RlZCk7CisgICAgICAgIHBhcmFt
cyA9IHRtcC5wYXJhbXM7CisgICAgICAgIHN0cmljdGVkID0gdG1wLnN0cmljdGVkOworICAgICAg
ICBmaXJzdFJlc3RyaWN0ZWQgPSB0bXAuZmlyc3RSZXN0cmljdGVkOworICAgICAgICBpZiAodG1w
Lm1lc3NhZ2UpIHsKKyAgICAgICAgICAgIG1lc3NhZ2UgPSB0bXAubWVzc2FnZTsKKyAgICAgICAg
fQorCisgICAgICAgIHByZXZpb3VzU3RyaWN0ID0gc3RyaWN0OworICAgICAgICBib2R5ID0gcGFy
c2VGdW5jdGlvblNvdXJjZUVsZW1lbnRzKCk7CisgICAgICAgIGlmIChzdHJpY3QgJiYgZmlyc3RS
ZXN0cmljdGVkKSB7CisgICAgICAgICAgICB0aHJvd0Vycm9yKGZpcnN0UmVzdHJpY3RlZCwgbWVz
c2FnZSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHN0cmljdCAmJiBzdHJpY3RlZCkgeworICAg
ICAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KHN0cmljdGVkLCBtZXNzYWdlKTsKKyAgICAgICAg
fQorICAgICAgICBzdHJpY3QgPSBwcmV2aW91c1N0cmljdDsKKworICAgICAgICByZXR1cm4gZGVs
ZWdhdGUubWFya0VuZChkZWxlZ2F0ZS5jcmVhdGVGdW5jdGlvbkRlY2xhcmF0aW9uKGlkLCBwYXJh
bXMsIFtdLCBib2R5KSwgc3RhcnRUb2tlbik7CisgICAgfQorCisgICAgZnVuY3Rpb24gcGFyc2VG
dW5jdGlvbkV4cHJlc3Npb24oKSB7CisgICAgICAgIHZhciB0b2tlbiwgaWQgPSBudWxsLCBzdHJp
Y3RlZCwgZmlyc3RSZXN0cmljdGVkLCBtZXNzYWdlLCB0bXAsIHBhcmFtcyA9IFtdLCBib2R5LCBw
cmV2aW91c1N0cmljdCwgc3RhcnRUb2tlbjsKKworICAgICAgICBzdGFydFRva2VuID0gbG9va2Fo
ZWFkOworICAgICAgICBleHBlY3RLZXl3b3JkKCdmdW5jdGlvbicpOworCisgICAgICAgIGlmICgh
bWF0Y2goJygnKSkgeworICAgICAgICAgICAgdG9rZW4gPSBsb29rYWhlYWQ7CisgICAgICAgICAg
ICBpZCA9IHBhcnNlVmFyaWFibGVJZGVudGlmaWVyKCk7CisgICAgICAgICAgICBpZiAoc3RyaWN0
KSB7CisgICAgICAgICAgICAgICAgaWYgKGlzUmVzdHJpY3RlZFdvcmQodG9rZW4udmFsdWUpKSB7
CisgICAgICAgICAgICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudCh0b2tlbiwgTWVzc2FnZXMu
U3RyaWN0RnVuY3Rpb25OYW1lKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgIGlmIChpc1Jlc3RyaWN0ZWRXb3JkKHRva2VuLnZhbHVlKSkg
eworICAgICAgICAgICAgICAgICAgICBmaXJzdFJlc3RyaWN0ZWQgPSB0b2tlbjsKKyAgICAgICAg
ICAgICAgICAgICAgbWVzc2FnZSA9IE1lc3NhZ2VzLlN0cmljdEZ1bmN0aW9uTmFtZTsKKyAgICAg
ICAgICAgICAgICB9IGVsc2UgaWYgKGlzU3RyaWN0TW9kZVJlc2VydmVkV29yZCh0b2tlbi52YWx1
ZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgZmlyc3RSZXN0cmljdGVkID0gdG9rZW47CisgICAg
ICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBNZXNzYWdlcy5TdHJpY3RSZXNlcnZlZFdvcmQ7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgdG1w
ID0gcGFyc2VQYXJhbXMoZmlyc3RSZXN0cmljdGVkKTsKKyAgICAgICAgcGFyYW1zID0gdG1wLnBh
cmFtczsKKyAgICAgICAgc3RyaWN0ZWQgPSB0bXAuc3RyaWN0ZWQ7CisgICAgICAgIGZpcnN0UmVz
dHJpY3RlZCA9IHRtcC5maXJzdFJlc3RyaWN0ZWQ7CisgICAgICAgIGlmICh0bXAubWVzc2FnZSkg
eworICAgICAgICAgICAgbWVzc2FnZSA9IHRtcC5tZXNzYWdlOworICAgICAgICB9CisKKyAgICAg
ICAgcHJldmlvdXNTdHJpY3QgPSBzdHJpY3Q7CisgICAgICAgIGJvZHkgPSBwYXJzZUZ1bmN0aW9u
U291cmNlRWxlbWVudHMoKTsKKyAgICAgICAgaWYgKHN0cmljdCAmJiBmaXJzdFJlc3RyaWN0ZWQp
IHsKKyAgICAgICAgICAgIHRocm93RXJyb3IoZmlyc3RSZXN0cmljdGVkLCBtZXNzYWdlKTsKKyAg
ICAgICAgfQorICAgICAgICBpZiAoc3RyaWN0ICYmIHN0cmljdGVkKSB7CisgICAgICAgICAgICB0
aHJvd0Vycm9yVG9sZXJhbnQoc3RyaWN0ZWQsIG1lc3NhZ2UpOworICAgICAgICB9CisgICAgICAg
IHN0cmljdCA9IHByZXZpb3VzU3RyaWN0OworCisgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5tYXJr
RW5kKGRlbGVnYXRlLmNyZWF0ZUZ1bmN0aW9uRXhwcmVzc2lvbihpZCwgcGFyYW1zLCBbXSwgYm9k
eSksIHN0YXJ0VG9rZW4pOworICAgIH0KKworICAgIC8vIDE0IFByb2dyYW0KKworICAgIGZ1bmN0
aW9uIHBhcnNlU291cmNlRWxlbWVudCgpIHsKKyAgICAgICAgaWYgKGxvb2thaGVhZC50eXBlID09
PSBUb2tlbi5LZXl3b3JkKSB7CisgICAgICAgICAgICBzd2l0Y2ggKGxvb2thaGVhZC52YWx1ZSkg
eworICAgICAgICAgICAgY2FzZSAnY29uc3QnOgorICAgICAgICAgICAgY2FzZSAnbGV0JzoKKyAg
ICAgICAgICAgICAgICByZXR1cm4gcGFyc2VDb25zdExldERlY2xhcmF0aW9uKGxvb2thaGVhZC52
YWx1ZSk7CisgICAgICAgICAgICBjYXNlICdmdW5jdGlvbic6CisgICAgICAgICAgICAgICAgcmV0
dXJuIHBhcnNlRnVuY3Rpb25EZWNsYXJhdGlvbigpOworICAgICAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgICAgICByZXR1cm4gcGFyc2VTdGF0ZW1lbnQoKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorCisgICAgICAgIGlmIChsb29rYWhlYWQudHlwZSAhPT0gVG9rZW4uRU9GKSB7Cisg
ICAgICAgICAgICByZXR1cm4gcGFyc2VTdGF0ZW1lbnQoKTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIGZ1bmN0aW9uIHBhcnNlU291cmNlRWxlbWVudHMoKSB7CisgICAgICAgIHZhciBzb3VyY2VF
bGVtZW50LCBzb3VyY2VFbGVtZW50cyA9IFtdLCB0b2tlbiwgZGlyZWN0aXZlLCBmaXJzdFJlc3Ry
aWN0ZWQ7CisKKyAgICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7CisgICAgICAgICAgICB0
b2tlbiA9IGxvb2thaGVhZDsKKyAgICAgICAgICAgIGlmICh0b2tlbi50eXBlICE9PSBUb2tlbi5T
dHJpbmdMaXRlcmFsKSB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIHNvdXJjZUVsZW1lbnQgPSBwYXJzZVNvdXJjZUVsZW1lbnQoKTsKKyAgICAg
ICAgICAgIHNvdXJjZUVsZW1lbnRzLnB1c2goc291cmNlRWxlbWVudCk7CisgICAgICAgICAgICBp
ZiAoc291cmNlRWxlbWVudC5leHByZXNzaW9uLnR5cGUgIT09IFN5bnRheC5MaXRlcmFsKSB7Cisg
ICAgICAgICAgICAgICAgLy8gdGhpcyBpcyBub3QgZGlyZWN0aXZlCisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkaXJlY3RpdmUgPSBzb3VyY2Uuc2xp
Y2UodG9rZW4uc3RhcnQgKyAxLCB0b2tlbi5lbmQgLSAxKTsKKyAgICAgICAgICAgIGlmIChkaXJl
Y3RpdmUgPT09ICd1c2Ugc3RyaWN0JykgeworICAgICAgICAgICAgICAgIHN0cmljdCA9IHRydWU7
CisgICAgICAgICAgICAgICAgaWYgKGZpcnN0UmVzdHJpY3RlZCkgeworICAgICAgICAgICAgICAg
ICAgICB0aHJvd0Vycm9yVG9sZXJhbnQoZmlyc3RSZXN0cmljdGVkLCBNZXNzYWdlcy5TdHJpY3RP
Y3RhbExpdGVyYWwpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgaWYgKCFmaXJzdFJlc3RyaWN0ZWQgJiYgdG9rZW4ub2N0YWwpIHsKKyAg
ICAgICAgICAgICAgICAgICAgZmlyc3RSZXN0cmljdGVkID0gdG9rZW47CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgd2hpbGUgKGluZGV4IDwg
bGVuZ3RoKSB7CisgICAgICAgICAgICBzb3VyY2VFbGVtZW50ID0gcGFyc2VTb3VyY2VFbGVtZW50
KCk7CisgICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi8KKyAgICAgICAgICAgIGlm
ICh0eXBlb2Ygc291cmNlRWxlbWVudCA9PT0gJ3VuZGVmaW5lZCcpIHsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHNvdXJjZUVsZW1lbnRzLnB1c2go
c291cmNlRWxlbWVudCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHNvdXJjZUVsZW1lbnRz
OworICAgIH0KKworICAgIGZ1bmN0aW9uIHBhcnNlUHJvZ3JhbSgpIHsKKyAgICAgICAgdmFyIGJv
ZHksIHN0YXJ0VG9rZW47CisKKyAgICAgICAgc2tpcENvbW1lbnQoKTsKKyAgICAgICAgcGVlaygp
OworICAgICAgICBzdGFydFRva2VuID0gbG9va2FoZWFkOworICAgICAgICBzdHJpY3QgPSBmYWxz
ZTsKKworICAgICAgICBib2R5ID0gcGFyc2VTb3VyY2VFbGVtZW50cygpOworICAgICAgICByZXR1
cm4gZGVsZWdhdGUubWFya0VuZChkZWxlZ2F0ZS5jcmVhdGVQcm9ncmFtKGJvZHkpLCBzdGFydFRv
a2VuKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBmaWx0ZXJUb2tlbkxvY2F0aW9uKCkgeworICAg
ICAgICB2YXIgaSwgZW50cnksIHRva2VuLCB0b2tlbnMgPSBbXTsKKworICAgICAgICBmb3IgKGkg
PSAwOyBpIDwgZXh0cmEudG9rZW5zLmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICBlbnRyeSA9
IGV4dHJhLnRva2Vuc1tpXTsKKyAgICAgICAgICAgIHRva2VuID0geworICAgICAgICAgICAgICAg
IHR5cGU6IGVudHJ5LnR5cGUsCisgICAgICAgICAgICAgICAgdmFsdWU6IGVudHJ5LnZhbHVlCisg
ICAgICAgICAgICB9OworICAgICAgICAgICAgaWYgKGV4dHJhLnJhbmdlKSB7CisgICAgICAgICAg
ICAgICAgdG9rZW4ucmFuZ2UgPSBlbnRyeS5yYW5nZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGlmIChleHRyYS5sb2MpIHsKKyAgICAgICAgICAgICAgICB0b2tlbi5sb2MgPSBlbnRyeS5s
b2M7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0b2tlbnMucHVzaCh0b2tlbik7CisgICAg
ICAgIH0KKworICAgICAgICBleHRyYS50b2tlbnMgPSB0b2tlbnM7CisgICAgfQorCisgICAgZnVu
Y3Rpb24gdG9rZW5pemUoY29kZSwgb3B0aW9ucykgeworICAgICAgICB2YXIgdG9TdHJpbmcsCisg
ICAgICAgICAgICB0b2tlbiwKKyAgICAgICAgICAgIHRva2VuczsKKworICAgICAgICB0b1N0cmlu
ZyA9IFN0cmluZzsKKyAgICAgICAgaWYgKHR5cGVvZiBjb2RlICE9PSAnc3RyaW5nJyAmJiAhKGNv
ZGUgaW5zdGFuY2VvZiBTdHJpbmcpKSB7CisgICAgICAgICAgICBjb2RlID0gdG9TdHJpbmcoY29k
ZSk7CisgICAgICAgIH0KKworICAgICAgICBkZWxlZ2F0ZSA9IFN5bnRheFRyZWVEZWxlZ2F0ZTsK
KyAgICAgICAgc291cmNlID0gY29kZTsKKyAgICAgICAgaW5kZXggPSAwOworICAgICAgICBsaW5l
TnVtYmVyID0gKHNvdXJjZS5sZW5ndGggPiAwKSA/IDEgOiAwOworICAgICAgICBsaW5lU3RhcnQg
PSAwOworICAgICAgICBsZW5ndGggPSBzb3VyY2UubGVuZ3RoOworICAgICAgICBsb29rYWhlYWQg
PSBudWxsOworICAgICAgICBzdGF0ZSA9IHsKKyAgICAgICAgICAgIGFsbG93SW46IHRydWUsCisg
ICAgICAgICAgICBsYWJlbFNldDoge30sCisgICAgICAgICAgICBpbkZ1bmN0aW9uQm9keTogZmFs
c2UsCisgICAgICAgICAgICBpbkl0ZXJhdGlvbjogZmFsc2UsCisgICAgICAgICAgICBpblN3aXRj
aDogZmFsc2UsCisgICAgICAgICAgICBsYXN0Q29tbWVudFN0YXJ0OiAtMQorICAgICAgICB9Owor
CisgICAgICAgIGV4dHJhID0ge307CisKKyAgICAgICAgLy8gT3B0aW9ucyBtYXRjaGluZy4KKyAg
ICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307CisKKyAgICAgICAgLy8gT2YgY291cnNlIHdl
IGNvbGxlY3QgdG9rZW5zIGhlcmUuCisgICAgICAgIG9wdGlvbnMudG9rZW5zID0gdHJ1ZTsKKyAg
ICAgICAgZXh0cmEudG9rZW5zID0gW107CisgICAgICAgIGV4dHJhLnRva2VuaXplID0gdHJ1ZTsK
KyAgICAgICAgLy8gVGhlIGZvbGxvd2luZyB0d28gZmllbGRzIGFyZSBuZWNlc3NhcnkgdG8gY29t
cHV0ZSB0aGUgUmVnZXggdG9rZW5zLgorICAgICAgICBleHRyYS5vcGVuUGFyZW5Ub2tlbiA9IC0x
OworICAgICAgICBleHRyYS5vcGVuQ3VybHlUb2tlbiA9IC0xOworCisgICAgICAgIGV4dHJhLnJh
bmdlID0gKHR5cGVvZiBvcHRpb25zLnJhbmdlID09PSAnYm9vbGVhbicpICYmIG9wdGlvbnMucmFu
Z2U7CisgICAgICAgIGV4dHJhLmxvYyA9ICh0eXBlb2Ygb3B0aW9ucy5sb2MgPT09ICdib29sZWFu
JykgJiYgb3B0aW9ucy5sb2M7CisKKyAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLmNvbW1lbnQg
PT09ICdib29sZWFuJyAmJiBvcHRpb25zLmNvbW1lbnQpIHsKKyAgICAgICAgICAgIGV4dHJhLmNv
bW1lbnRzID0gW107CisgICAgICAgIH0KKyAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLnRvbGVy
YW50ID09PSAnYm9vbGVhbicgJiYgb3B0aW9ucy50b2xlcmFudCkgeworICAgICAgICAgICAgZXh0
cmEuZXJyb3JzID0gW107CisgICAgICAgIH0KKworICAgICAgICB0cnkgeworICAgICAgICAgICAg
cGVlaygpOworICAgICAgICAgICAgaWYgKGxvb2thaGVhZC50eXBlID09PSBUb2tlbi5FT0YpIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gZXh0cmEudG9rZW5zOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICB0b2tlbiA9IGxleCgpOworICAgICAgICAgICAgd2hpbGUgKGxvb2thaGVhZC50
eXBlICE9PSBUb2tlbi5FT0YpIHsKKyAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAg
ICAgICAgICB0b2tlbiA9IGxleCgpOworICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGxleEVycm9y
KSB7CisgICAgICAgICAgICAgICAgICAgIHRva2VuID0gbG9va2FoZWFkOworICAgICAgICAgICAg
ICAgICAgICBpZiAoZXh0cmEuZXJyb3JzKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBleHRy
YS5lcnJvcnMucHVzaChsZXhFcnJvcik7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSBo
YXZlIHRvIGJyZWFrIG9uIHRoZSBmaXJzdCBlcnJvcgorICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gdG8gYXZvaWQgaW5maW5pdGUgbG9vcHMuCisgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHRocm93IGxleEVycm9yOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmaWx0ZXJUb2tlbkxvY2F0aW9uKCk7Cisg
ICAgICAgICAgICB0b2tlbnMgPSBleHRyYS50b2tlbnM7CisgICAgICAgICAgICBpZiAodHlwZW9m
IGV4dHJhLmNvbW1lbnRzICE9PSAndW5kZWZpbmVkJykgeworICAgICAgICAgICAgICAgIHRva2Vu
cy5jb21tZW50cyA9IGV4dHJhLmNvbW1lbnRzOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
aWYgKHR5cGVvZiBleHRyYS5lcnJvcnMgIT09ICd1bmRlZmluZWQnKSB7CisgICAgICAgICAgICAg
ICAgdG9rZW5zLmVycm9ycyA9IGV4dHJhLmVycm9yczsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fSBjYXRjaCAoZSkgeworICAgICAgICAgICAgdGhyb3cgZTsKKyAgICAgICAgfSBmaW5hbGx5IHsK
KyAgICAgICAgICAgIGV4dHJhID0ge307CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRva2Vu
czsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBwYXJzZShjb2RlLCBvcHRpb25zKSB7CisgICAgICAg
IHZhciBwcm9ncmFtLCB0b1N0cmluZzsKKworICAgICAgICB0b1N0cmluZyA9IFN0cmluZzsKKyAg
ICAgICAgaWYgKHR5cGVvZiBjb2RlICE9PSAnc3RyaW5nJyAmJiAhKGNvZGUgaW5zdGFuY2VvZiBT
dHJpbmcpKSB7CisgICAgICAgICAgICBjb2RlID0gdG9TdHJpbmcoY29kZSk7CisgICAgICAgIH0K
KworICAgICAgICBkZWxlZ2F0ZSA9IFN5bnRheFRyZWVEZWxlZ2F0ZTsKKyAgICAgICAgc291cmNl
ID0gY29kZTsKKyAgICAgICAgaW5kZXggPSAwOworICAgICAgICBsaW5lTnVtYmVyID0gKHNvdXJj
ZS5sZW5ndGggPiAwKSA/IDEgOiAwOworICAgICAgICBsaW5lU3RhcnQgPSAwOworICAgICAgICBs
ZW5ndGggPSBzb3VyY2UubGVuZ3RoOworICAgICAgICBsb29rYWhlYWQgPSBudWxsOworICAgICAg
ICBzdGF0ZSA9IHsKKyAgICAgICAgICAgIGFsbG93SW46IHRydWUsCisgICAgICAgICAgICBsYWJl
bFNldDoge30sCisgICAgICAgICAgICBpbkZ1bmN0aW9uQm9keTogZmFsc2UsCisgICAgICAgICAg
ICBpbkl0ZXJhdGlvbjogZmFsc2UsCisgICAgICAgICAgICBpblN3aXRjaDogZmFsc2UsCisgICAg
ICAgICAgICBsYXN0Q29tbWVudFN0YXJ0OiAtMQorICAgICAgICB9OworCisgICAgICAgIGV4dHJh
ID0ge307CisgICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucyAhPT0gJ3VuZGVmaW5lZCcpIHsKKyAg
ICAgICAgICAgIGV4dHJhLnJhbmdlID0gKHR5cGVvZiBvcHRpb25zLnJhbmdlID09PSAnYm9vbGVh
bicpICYmIG9wdGlvbnMucmFuZ2U7CisgICAgICAgICAgICBleHRyYS5sb2MgPSAodHlwZW9mIG9w
dGlvbnMubG9jID09PSAnYm9vbGVhbicpICYmIG9wdGlvbnMubG9jOworICAgICAgICAgICAgZXh0
cmEuYXR0YWNoQ29tbWVudCA9ICh0eXBlb2Ygb3B0aW9ucy5hdHRhY2hDb21tZW50ID09PSAnYm9v
bGVhbicpICYmIG9wdGlvbnMuYXR0YWNoQ29tbWVudDsKKworICAgICAgICAgICAgaWYgKGV4dHJh
LmxvYyAmJiBvcHRpb25zLnNvdXJjZSAhPT0gbnVsbCAmJiBvcHRpb25zLnNvdXJjZSAhPT0gdW5k
ZWZpbmVkKSB7CisgICAgICAgICAgICAgICAgZXh0cmEuc291cmNlID0gdG9TdHJpbmcob3B0aW9u
cy5zb3VyY2UpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAodHlwZW9mIG9wdGlv
bnMudG9rZW5zID09PSAnYm9vbGVhbicgJiYgb3B0aW9ucy50b2tlbnMpIHsKKyAgICAgICAgICAg
ICAgICBleHRyYS50b2tlbnMgPSBbXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh0
eXBlb2Ygb3B0aW9ucy5jb21tZW50ID09PSAnYm9vbGVhbicgJiYgb3B0aW9ucy5jb21tZW50KSB7
CisgICAgICAgICAgICAgICAgZXh0cmEuY29tbWVudHMgPSBbXTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy50b2xlcmFudCA9PT0gJ2Jvb2xlYW4nICYmIG9w
dGlvbnMudG9sZXJhbnQpIHsKKyAgICAgICAgICAgICAgICBleHRyYS5lcnJvcnMgPSBbXTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChleHRyYS5hdHRhY2hDb21tZW50KSB7CisgICAg
ICAgICAgICAgICAgZXh0cmEucmFuZ2UgPSB0cnVlOworICAgICAgICAgICAgICAgIGV4dHJhLmNv
bW1lbnRzID0gW107CisgICAgICAgICAgICAgICAgZXh0cmEuYm90dG9tUmlnaHRTdGFjayA9IFtd
OworICAgICAgICAgICAgICAgIGV4dHJhLnRyYWlsaW5nQ29tbWVudHMgPSBbXTsKKyAgICAgICAg
ICAgICAgICBleHRyYS5sZWFkaW5nQ29tbWVudHMgPSBbXTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorCisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBwcm9ncmFtID0gcGFyc2VQcm9ncmFt
KCk7CisgICAgICAgICAgICBpZiAodHlwZW9mIGV4dHJhLmNvbW1lbnRzICE9PSAndW5kZWZpbmVk
JykgeworICAgICAgICAgICAgICAgIHByb2dyYW0uY29tbWVudHMgPSBleHRyYS5jb21tZW50czsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh0eXBlb2YgZXh0cmEudG9rZW5zICE9PSAn
dW5kZWZpbmVkJykgeworICAgICAgICAgICAgICAgIGZpbHRlclRva2VuTG9jYXRpb24oKTsKKyAg
ICAgICAgICAgICAgICBwcm9ncmFtLnRva2VucyA9IGV4dHJhLnRva2VuczsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGlmICh0eXBlb2YgZXh0cmEuZXJyb3JzICE9PSAndW5kZWZpbmVkJykg
eworICAgICAgICAgICAgICAgIHByb2dyYW0uZXJyb3JzID0gZXh0cmEuZXJyb3JzOworICAgICAg
ICAgICAgfQorICAgICAgICB9IGNhdGNoIChlKSB7CisgICAgICAgICAgICB0aHJvdyBlOworICAg
ICAgICB9IGZpbmFsbHkgeworICAgICAgICAgICAgZXh0cmEgPSB7fTsKKyAgICAgICAgfQorCisg
ICAgICAgIHJldHVybiBwcm9ncmFtOworICAgIH0KKworICAgIC8vIFN5bmMgd2l0aCAqLmpzb24g
bWFuaWZlc3RzLgorICAgIGV4cG9ydHMudmVyc2lvbiA9ICcxLjIuMic7CisKKyAgICBleHBvcnRz
LnRva2VuaXplID0gdG9rZW5pemU7CisKKyAgICBleHBvcnRzLnBhcnNlID0gcGFyc2U7CisKKyAg
ICAvLyBEZWVwIGNvcHkuCisgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqLworICAgIGV4cG9y
dHMuU3ludGF4ID0gKGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIG5hbWUsIHR5cGVzID0ge307
CisKKyAgICAgICAgaWYgKHR5cGVvZiBPYmplY3QuY3JlYXRlID09PSAnZnVuY3Rpb24nKSB7Cisg
ICAgICAgICAgICB0eXBlcyA9IE9iamVjdC5jcmVhdGUobnVsbCk7CisgICAgICAgIH0KKworICAg
ICAgICBmb3IgKG5hbWUgaW4gU3ludGF4KSB7CisgICAgICAgICAgICBpZiAoU3ludGF4Lmhhc093
blByb3BlcnR5KG5hbWUpKSB7CisgICAgICAgICAgICAgICAgdHlwZXNbbmFtZV0gPSBTeW50YXhb
bmFtZV07CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAodHlwZW9mIE9i
amVjdC5mcmVlemUgPT09ICdmdW5jdGlvbicpIHsKKyAgICAgICAgICAgIE9iamVjdC5mcmVlemUo
dHlwZXMpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHR5cGVzOworICAgIH0oKSk7CisK
K30pKFdlYkluc3BlY3Rvci5fZXNwcmltYSk7Cg==
</data>
<flag name="review"
          id="259731"
          type_id="1"
          status="+"
          setter="joepeck"
    />
    <flag name="commit-queue"
          id="259732"
          type_id="3"
          status="-"
          setter="joepeck"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>235238</attachid>
            <date>2014-07-21 12:22:39 -0700</date>
            <delta_ts>2014-07-21 16:28:35 -0700</delta_ts>
            <desc>patch</desc>
            <filename>inspector-patch.diff</filename>
            <type>text/plain</type>
            <size>127191</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkluc3BlY3RvclVJL0NoYW5nZUxvZwkocmV2aXNpb24gMTcxMzEyKQorKysgU291cmNl
L1dlYkluc3BlY3RvclVJL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE4IEBA
CisyMDE0LTA3LTIxICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IFdlYiBJbnNwZWN0b3I6IEFkZCBlc3ByaW1hIHRvIHRoZSBXZWJJbnNwZWN0b3IuCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzUwOTgKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIGluY2x1
ZGVzIEVzcHJpbWEgaW50byB0aGUgV2ViSW5zcGVjdG9yIGFuZCBhdHRhY2hlcyBpdHMKKyAgICAg
ICAgZXhwb3J0ZWQgZnVuY3Rpb24gb250byB0aGUgV2ViSW5zcGVjdG9yIG5hbWVzcGFjZSBvYmpl
Y3QuIAorCisgICAgICAgICogVXNlckludGVyZmFjZS9FeHRlcm5hbC9Fc3ByaW1hOiBBZGRlZC4K
KyAgICAgICAgKiBVc2VySW50ZXJmYWNlL0V4dGVybmFsL0VzcHJpbWEvZXNwcmltYS5qczogQWRk
ZWQuCisgICAgICAgICguKToKKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uaHRtbDoKKwog
MjAxNC0wNS0wOCAgSm9ubyBXZWxscyAgPGpvbm93ZWxsc0BhcHBsZS5jb20+CiAKICAgICAgICAg
V2ViIEluc3BlY3RvcjogQ29uc29sZSBlcnJvciB3aGVuIGxhdW5jaGluZyBXZWIgSW5zcGVjdG9y
ICJNb2RlIGh0bWxtaXhlZCBmYWlsZWQgdG8gYWR2YW5jZSBzdHJlYW0iCkluZGV4OiBTb3VyY2Uv
V2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9NYWluLmh0bWwKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTWFpbi5odG1sCShyZXZpc2lvbiAxNzEz
MTEpCisrKyBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9NYWluLmh0bWwJKHdv
cmtpbmcgY29weSkKQEAgLTE3MSw2ICsxNzEsOCBAQAogICAgIDxzY3JpcHQgc3JjPSJCYXNlL1VS
TFV0aWxpdGllcy5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCBzcmM9IkJhc2UvVXRpbGl0aWVz
LmpzIj48L3NjcmlwdD4KIAorICAgIDxzY3JpcHQgc3JjPSJFeHRlcm5hbC9Fc3ByaW1hL2VzcHJp
bWEuanMiPjwvc2NyaXB0PgorCiAgICAgPHNjcmlwdCBzcmM9IlByb3RvY29sL0FwcGxpY2F0aW9u
Q2FjaGVPYnNlcnZlci5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCBzcmM9IlByb3RvY29sL0NT
U09ic2VydmVyLmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHNyYz0iUHJvdG9jb2wvQ29uc29s
ZU9ic2VydmVyLmpzIj48L3NjcmlwdD4KSW5kZXg6IFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2Vy
SW50ZXJmYWNlL0V4dGVybmFsL0VzcHJpbWEvZXNwcmltYS5qcwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9FeHRlcm5hbC9Fc3ByaW1hL2VzcHJpbWEu
anMJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9F
eHRlcm5hbC9Fc3ByaW1hL2VzcHJpbWEuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzNzM1
IEBACisvKgorICBDb3B5cmlnaHQgKEMpIDIwMTMgQXJpeWEgSGlkYXlhdCA8YXJpeWEuaGlkYXlh
dEBnbWFpbC5jb20+CisgIENvcHlyaWdodCAoQykgMjAxMyBUaGFkZGVlIFR5bCA8dGhhZGRlZS50
eWxAZ21haWwuY29tPgorICBDb3B5cmlnaHQgKEMpIDIwMTMgTWF0aGlhcyBCeW5lbnMgPG1hdGhp
YXNAcWl3aS5iZT4KKyAgQ29weXJpZ2h0IChDKSAyMDEyIEFyaXlhIEhpZGF5YXQgPGFyaXlhLmhp
ZGF5YXRAZ21haWwuY29tPgorICBDb3B5cmlnaHQgKEMpIDIwMTIgTWF0aGlhcyBCeW5lbnMgPG1h
dGhpYXNAcWl3aS5iZT4KKyAgQ29weXJpZ2h0IChDKSAyMDEyIEpvb3N0LVdpbSBCb2VrZXN0ZWlq
biA8am9vc3Qtd2ltQGJvZWtlc3RlaWpuLm5sPgorICBDb3B5cmlnaHQgKEMpIDIwMTIgS3JpcyBL
b3dhbCA8a3Jpcy5rb3dhbEBjaXhhci5jb20+CisgIENvcHlyaWdodCAoQykgMjAxMiBZdXN1a2Ug
U3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+CisgIENvcHlyaWdodCAoQykgMjAxMiBBcnBh
ZCBCb3Jzb3MgPGFycGFkLmJvcnNvc0Bnb29nbGVtYWlsLmNvbT4KKyAgQ29weXJpZ2h0IChDKSAy
MDExIEFyaXlhIEhpZGF5YXQgPGFyaXlhLmhpZGF5YXRAZ21haWwuY29tPgorCisgIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKworICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAgICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorCisgIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMgIkFTIElTIgorICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisg
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCA8Q09QWVJJR0hUIEhPTERFUj4gQkUg
TElBQkxFIEZPUiBBTlkKKyAgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OworICBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GCisgIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisqLworCisvLyBUaGUgb25seSBlZGl0cyB0aGF0IGhhdmUgYmVl
biBtYWRlIHRvIHRoaXMgZmlsZSBpcyB0byB1c2UgV2ViSW5zcGVjdG9yLl9lc3ByaW1hIGFzIHRo
ZSAnZXhwb3J0cycgb2JqZWN0IGZvciBlc3ByaW1hLiAKKy8vIEkgZGVsdGVkIHRoZSBjb2RlIHRo
YXQgZGV0ZXJtaW5lcyB0aGUgY29udGV4dCBlc3ByaW1hIGlzIGxvYWRlZCBpbiAobm9kZS5qcywg
dGhlIGJyb3dzZXIsIGV0Yy4pIGFuZCByZXBsYWNlZCBpdCB3aXRoIFdlYkluc3BlY3Rvci5fZXNw
cmltYS4KKy8vIEFsbCB0aGlzIGRvZXMgaXMgcGFzcyBpbiB0aGUgV2ViSW5zcGVjdG9yLl9lc3By
aW1hIG9iamVjdCBhcyB0aGUgJ2V4cG9ydHMnIG9iamVjdCBpbnRvIHRoZSBlbmNsb3NpbmcgY2xv
c3VyZSB0aGF0IGNvbnRhaW5zIGFsbCBvZiBlc3ByaW1hJ3MgbG9naWMuCitXZWJJbnNwZWN0b3Iu
X2VzcHJpbWEgPSB7fTsKKworKGZ1bmN0aW9uIChleHBvcnRzKSB7CisgICAgJ3VzZSBzdHJpY3Qn
OworCisgICAgdmFyIFRva2VuLAorICAgICAgICBUb2tlbk5hbWUsCisgICAgICAgIEZuRXhwclRv
a2VucywKKyAgICAgICAgU3ludGF4LAorICAgICAgICBQcm9wZXJ0eUtpbmQsCisgICAgICAgIE1l
c3NhZ2VzLAorICAgICAgICBSZWdleCwKKyAgICAgICAgU3ludGF4VHJlZURlbGVnYXRlLAorICAg
ICAgICBzb3VyY2UsCisgICAgICAgIHN0cmljdCwKKyAgICAgICAgaW5kZXgsCisgICAgICAgIGxp
bmVOdW1iZXIsCisgICAgICAgIGxpbmVTdGFydCwKKyAgICAgICAgbGVuZ3RoLAorICAgICAgICBk
ZWxlZ2F0ZSwKKyAgICAgICAgbG9va2FoZWFkLAorICAgICAgICBzdGF0ZSwKKyAgICAgICAgZXh0
cmE7CisKKyAgICBUb2tlbiA9IHsKKyAgICAgICAgQm9vbGVhbkxpdGVyYWw6IDEsCisgICAgICAg
IEVPRjogMiwKKyAgICAgICAgSWRlbnRpZmllcjogMywKKyAgICAgICAgS2V5d29yZDogNCwKKyAg
ICAgICAgTnVsbExpdGVyYWw6IDUsCisgICAgICAgIE51bWVyaWNMaXRlcmFsOiA2LAorICAgICAg
ICBQdW5jdHVhdG9yOiA3LAorICAgICAgICBTdHJpbmdMaXRlcmFsOiA4LAorICAgICAgICBSZWd1
bGFyRXhwcmVzc2lvbjogOQorICAgIH07CisKKyAgICBUb2tlbk5hbWUgPSB7fTsKKyAgICBUb2tl
bk5hbWVbVG9rZW4uQm9vbGVhbkxpdGVyYWxdID0gJ0Jvb2xlYW4nOworICAgIFRva2VuTmFtZVtU
b2tlbi5FT0ZdID0gJzxlbmQ+JzsKKyAgICBUb2tlbk5hbWVbVG9rZW4uSWRlbnRpZmllcl0gPSAn
SWRlbnRpZmllcic7CisgICAgVG9rZW5OYW1lW1Rva2VuLktleXdvcmRdID0gJ0tleXdvcmQnOwor
ICAgIFRva2VuTmFtZVtUb2tlbi5OdWxsTGl0ZXJhbF0gPSAnTnVsbCc7CisgICAgVG9rZW5OYW1l
W1Rva2VuLk51bWVyaWNMaXRlcmFsXSA9ICdOdW1lcmljJzsKKyAgICBUb2tlbk5hbWVbVG9rZW4u
UHVuY3R1YXRvcl0gPSAnUHVuY3R1YXRvcic7CisgICAgVG9rZW5OYW1lW1Rva2VuLlN0cmluZ0xp
dGVyYWxdID0gJ1N0cmluZyc7CisgICAgVG9rZW5OYW1lW1Rva2VuLlJlZ3VsYXJFeHByZXNzaW9u
XSA9ICdSZWd1bGFyRXhwcmVzc2lvbic7CisKKyAgICAvLyBBIGZ1bmN0aW9uIGZvbGxvd2luZyBv
bmUgb2YgdGhvc2UgdG9rZW5zIGlzIGFuIGV4cHJlc3Npb24uCisgICAgRm5FeHByVG9rZW5zID0g
WycoJywgJ3snLCAnWycsICdpbicsICd0eXBlb2YnLCAnaW5zdGFuY2VvZicsICduZXcnLAorICAg
ICAgICAgICAgICAgICAgICAncmV0dXJuJywgJ2Nhc2UnLCAnZGVsZXRlJywgJ3Rocm93JywgJ3Zv
aWQnLAorICAgICAgICAgICAgICAgICAgICAvLyBhc3NpZ25tZW50IG9wZXJhdG9ycworICAgICAg
ICAgICAgICAgICAgICAnPScsICcrPScsICctPScsICcqPScsICcvPScsICclPScsICc8PD0nLCAn
Pj49JywgJz4+Pj0nLAorICAgICAgICAgICAgICAgICAgICAnJj0nLCAnfD0nLCAnXj0nLCAnLCcs
CisgICAgICAgICAgICAgICAgICAgIC8vIGJpbmFyeS91bmFyeSBvcGVyYXRvcnMKKyAgICAgICAg
ICAgICAgICAgICAgJysnLCAnLScsICcqJywgJy8nLCAnJScsICcrKycsICctLScsICc8PCcsICc+
PicsICc+Pj4nLCAnJicsCisgICAgICAgICAgICAgICAgICAgICd8JywgJ14nLCAnIScsICd+Jywg
JyYmJywgJ3x8JywgJz8nLCAnOicsICc9PT0nLCAnPT0nLCAnPj0nLAorICAgICAgICAgICAgICAg
ICAgICAnPD0nLCAnPCcsICc+JywgJyE9JywgJyE9PSddOworCisgICAgU3ludGF4ID0geworICAg
ICAgICBBc3NpZ25tZW50RXhwcmVzc2lvbjogJ0Fzc2lnbm1lbnRFeHByZXNzaW9uJywKKyAgICAg
ICAgQXJyYXlFeHByZXNzaW9uOiAnQXJyYXlFeHByZXNzaW9uJywKKyAgICAgICAgQmxvY2tTdGF0
ZW1lbnQ6ICdCbG9ja1N0YXRlbWVudCcsCisgICAgICAgIEJpbmFyeUV4cHJlc3Npb246ICdCaW5h
cnlFeHByZXNzaW9uJywKKyAgICAgICAgQnJlYWtTdGF0ZW1lbnQ6ICdCcmVha1N0YXRlbWVudCcs
CisgICAgICAgIENhbGxFeHByZXNzaW9uOiAnQ2FsbEV4cHJlc3Npb24nLAorICAgICAgICBDYXRj
aENsYXVzZTogJ0NhdGNoQ2xhdXNlJywKKyAgICAgICAgQ29uZGl0aW9uYWxFeHByZXNzaW9uOiAn
Q29uZGl0aW9uYWxFeHByZXNzaW9uJywKKyAgICAgICAgQ29udGludWVTdGF0ZW1lbnQ6ICdDb250
aW51ZVN0YXRlbWVudCcsCisgICAgICAgIERvV2hpbGVTdGF0ZW1lbnQ6ICdEb1doaWxlU3RhdGVt
ZW50JywKKyAgICAgICAgRGVidWdnZXJTdGF0ZW1lbnQ6ICdEZWJ1Z2dlclN0YXRlbWVudCcsCisg
ICAgICAgIEVtcHR5U3RhdGVtZW50OiAnRW1wdHlTdGF0ZW1lbnQnLAorICAgICAgICBFeHByZXNz
aW9uU3RhdGVtZW50OiAnRXhwcmVzc2lvblN0YXRlbWVudCcsCisgICAgICAgIEZvclN0YXRlbWVu
dDogJ0ZvclN0YXRlbWVudCcsCisgICAgICAgIEZvckluU3RhdGVtZW50OiAnRm9ySW5TdGF0ZW1l
bnQnLAorICAgICAgICBGdW5jdGlvbkRlY2xhcmF0aW9uOiAnRnVuY3Rpb25EZWNsYXJhdGlvbics
CisgICAgICAgIEZ1bmN0aW9uRXhwcmVzc2lvbjogJ0Z1bmN0aW9uRXhwcmVzc2lvbicsCisgICAg
ICAgIElkZW50aWZpZXI6ICdJZGVudGlmaWVyJywKKyAgICAgICAgSWZTdGF0ZW1lbnQ6ICdJZlN0
YXRlbWVudCcsCisgICAgICAgIExpdGVyYWw6ICdMaXRlcmFsJywKKyAgICAgICAgTGFiZWxlZFN0
YXRlbWVudDogJ0xhYmVsZWRTdGF0ZW1lbnQnLAorICAgICAgICBMb2dpY2FsRXhwcmVzc2lvbjog
J0xvZ2ljYWxFeHByZXNzaW9uJywKKyAgICAgICAgTWVtYmVyRXhwcmVzc2lvbjogJ01lbWJlckV4
cHJlc3Npb24nLAorICAgICAgICBOZXdFeHByZXNzaW9uOiAnTmV3RXhwcmVzc2lvbicsCisgICAg
ICAgIE9iamVjdEV4cHJlc3Npb246ICdPYmplY3RFeHByZXNzaW9uJywKKyAgICAgICAgUHJvZ3Jh
bTogJ1Byb2dyYW0nLAorICAgICAgICBQcm9wZXJ0eTogJ1Byb3BlcnR5JywKKyAgICAgICAgUmV0
dXJuU3RhdGVtZW50OiAnUmV0dXJuU3RhdGVtZW50JywKKyAgICAgICAgU2VxdWVuY2VFeHByZXNz
aW9uOiAnU2VxdWVuY2VFeHByZXNzaW9uJywKKyAgICAgICAgU3dpdGNoU3RhdGVtZW50OiAnU3dp
dGNoU3RhdGVtZW50JywKKyAgICAgICAgU3dpdGNoQ2FzZTogJ1N3aXRjaENhc2UnLAorICAgICAg
ICBUaGlzRXhwcmVzc2lvbjogJ1RoaXNFeHByZXNzaW9uJywKKyAgICAgICAgVGhyb3dTdGF0ZW1l
bnQ6ICdUaHJvd1N0YXRlbWVudCcsCisgICAgICAgIFRyeVN0YXRlbWVudDogJ1RyeVN0YXRlbWVu
dCcsCisgICAgICAgIFVuYXJ5RXhwcmVzc2lvbjogJ1VuYXJ5RXhwcmVzc2lvbicsCisgICAgICAg
IFVwZGF0ZUV4cHJlc3Npb246ICdVcGRhdGVFeHByZXNzaW9uJywKKyAgICAgICAgVmFyaWFibGVE
ZWNsYXJhdGlvbjogJ1ZhcmlhYmxlRGVjbGFyYXRpb24nLAorICAgICAgICBWYXJpYWJsZURlY2xh
cmF0b3I6ICdWYXJpYWJsZURlY2xhcmF0b3InLAorICAgICAgICBXaGlsZVN0YXRlbWVudDogJ1do
aWxlU3RhdGVtZW50JywKKyAgICAgICAgV2l0aFN0YXRlbWVudDogJ1dpdGhTdGF0ZW1lbnQnCisg
ICAgfTsKKworICAgIFByb3BlcnR5S2luZCA9IHsKKyAgICAgICAgRGF0YTogMSwKKyAgICAgICAg
R2V0OiAyLAorICAgICAgICBTZXQ6IDQKKyAgICB9OworCisgICAgLy8gRXJyb3IgbWVzc2FnZXMg
c2hvdWxkIGJlIGlkZW50aWNhbCB0byBWOC4KKyAgICBNZXNzYWdlcyA9IHsKKyAgICAgICAgVW5l
eHBlY3RlZFRva2VuOiAgJ1VuZXhwZWN0ZWQgdG9rZW4gJTAnLAorICAgICAgICBVbmV4cGVjdGVk
TnVtYmVyOiAgJ1VuZXhwZWN0ZWQgbnVtYmVyJywKKyAgICAgICAgVW5leHBlY3RlZFN0cmluZzog
ICdVbmV4cGVjdGVkIHN0cmluZycsCisgICAgICAgIFVuZXhwZWN0ZWRJZGVudGlmaWVyOiAgJ1Vu
ZXhwZWN0ZWQgaWRlbnRpZmllcicsCisgICAgICAgIFVuZXhwZWN0ZWRSZXNlcnZlZDogICdVbmV4
cGVjdGVkIHJlc2VydmVkIHdvcmQnLAorICAgICAgICBVbmV4cGVjdGVkRU9TOiAgJ1VuZXhwZWN0
ZWQgZW5kIG9mIGlucHV0JywKKyAgICAgICAgTmV3bGluZUFmdGVyVGhyb3c6ICAnSWxsZWdhbCBu
ZXdsaW5lIGFmdGVyIHRocm93JywKKyAgICAgICAgSW52YWxpZFJlZ0V4cDogJ0ludmFsaWQgcmVn
dWxhciBleHByZXNzaW9uJywKKyAgICAgICAgVW50ZXJtaW5hdGVkUmVnRXhwOiAgJ0ludmFsaWQg
cmVndWxhciBleHByZXNzaW9uOiBtaXNzaW5nIC8nLAorICAgICAgICBJbnZhbGlkTEhTSW5Bc3Np
Z25tZW50OiAgJ0ludmFsaWQgbGVmdC1oYW5kIHNpZGUgaW4gYXNzaWdubWVudCcsCisgICAgICAg
IEludmFsaWRMSFNJbkZvckluOiAgJ0ludmFsaWQgbGVmdC1oYW5kIHNpZGUgaW4gZm9yLWluJywK
KyAgICAgICAgTXVsdGlwbGVEZWZhdWx0c0luU3dpdGNoOiAnTW9yZSB0aGFuIG9uZSBkZWZhdWx0
IGNsYXVzZSBpbiBzd2l0Y2ggc3RhdGVtZW50JywKKyAgICAgICAgTm9DYXRjaE9yRmluYWxseTog
ICdNaXNzaW5nIGNhdGNoIG9yIGZpbmFsbHkgYWZ0ZXIgdHJ5JywKKyAgICAgICAgVW5rbm93bkxh
YmVsOiAnVW5kZWZpbmVkIGxhYmVsIFwnJTBcJycsCisgICAgICAgIFJlZGVjbGFyYXRpb246ICcl
MCBcJyUxXCcgaGFzIGFscmVhZHkgYmVlbiBkZWNsYXJlZCcsCisgICAgICAgIElsbGVnYWxDb250
aW51ZTogJ0lsbGVnYWwgY29udGludWUgc3RhdGVtZW50JywKKyAgICAgICAgSWxsZWdhbEJyZWFr
OiAnSWxsZWdhbCBicmVhayBzdGF0ZW1lbnQnLAorICAgICAgICBJbGxlZ2FsUmV0dXJuOiAnSWxs
ZWdhbCByZXR1cm4gc3RhdGVtZW50JywKKyAgICAgICAgU3RyaWN0TW9kZVdpdGg6ICAnU3RyaWN0
IG1vZGUgY29kZSBtYXkgbm90IGluY2x1ZGUgYSB3aXRoIHN0YXRlbWVudCcsCisgICAgICAgIFN0
cmljdENhdGNoVmFyaWFibGU6ICAnQ2F0Y2ggdmFyaWFibGUgbWF5IG5vdCBiZSBldmFsIG9yIGFy
Z3VtZW50cyBpbiBzdHJpY3QgbW9kZScsCisgICAgICAgIFN0cmljdFZhck5hbWU6ICAnVmFyaWFi
bGUgbmFtZSBtYXkgbm90IGJlIGV2YWwgb3IgYXJndW1lbnRzIGluIHN0cmljdCBtb2RlJywKKyAg
ICAgICAgU3RyaWN0UGFyYW1OYW1lOiAgJ1BhcmFtZXRlciBuYW1lIGV2YWwgb3IgYXJndW1lbnRz
IGlzIG5vdCBhbGxvd2VkIGluIHN0cmljdCBtb2RlJywKKyAgICAgICAgU3RyaWN0UGFyYW1EdXBl
OiAnU3RyaWN0IG1vZGUgZnVuY3Rpb24gbWF5IG5vdCBoYXZlIGR1cGxpY2F0ZSBwYXJhbWV0ZXIg
bmFtZXMnLAorICAgICAgICBTdHJpY3RGdW5jdGlvbk5hbWU6ICAnRnVuY3Rpb24gbmFtZSBtYXkg
bm90IGJlIGV2YWwgb3IgYXJndW1lbnRzIGluIHN0cmljdCBtb2RlJywKKyAgICAgICAgU3RyaWN0
T2N0YWxMaXRlcmFsOiAgJ09jdGFsIGxpdGVyYWxzIGFyZSBub3QgYWxsb3dlZCBpbiBzdHJpY3Qg
bW9kZS4nLAorICAgICAgICBTdHJpY3REZWxldGU6ICAnRGVsZXRlIG9mIGFuIHVucXVhbGlmaWVk
IGlkZW50aWZpZXIgaW4gc3RyaWN0IG1vZGUuJywKKyAgICAgICAgU3RyaWN0RHVwbGljYXRlUHJv
cGVydHk6ICAnRHVwbGljYXRlIGRhdGEgcHJvcGVydHkgaW4gb2JqZWN0IGxpdGVyYWwgbm90IGFs
bG93ZWQgaW4gc3RyaWN0IG1vZGUnLAorICAgICAgICBBY2Nlc3NvckRhdGFQcm9wZXJ0eTogICdP
YmplY3QgbGl0ZXJhbCBtYXkgbm90IGhhdmUgZGF0YSBhbmQgYWNjZXNzb3IgcHJvcGVydHkgd2l0
aCB0aGUgc2FtZSBuYW1lJywKKyAgICAgICAgQWNjZXNzb3JHZXRTZXQ6ICAnT2JqZWN0IGxpdGVy
YWwgbWF5IG5vdCBoYXZlIG11bHRpcGxlIGdldC9zZXQgYWNjZXNzb3JzIHdpdGggdGhlIHNhbWUg
bmFtZScsCisgICAgICAgIFN0cmljdExIU0Fzc2lnbm1lbnQ6ICAnQXNzaWdubWVudCB0byBldmFs
IG9yIGFyZ3VtZW50cyBpcyBub3QgYWxsb3dlZCBpbiBzdHJpY3QgbW9kZScsCisgICAgICAgIFN0
cmljdExIU1Bvc3RmaXg6ICAnUG9zdGZpeCBpbmNyZW1lbnQvZGVjcmVtZW50IG1heSBub3QgaGF2
ZSBldmFsIG9yIGFyZ3VtZW50cyBvcGVyYW5kIGluIHN0cmljdCBtb2RlJywKKyAgICAgICAgU3Ry
aWN0TEhTUHJlZml4OiAgJ1ByZWZpeCBpbmNyZW1lbnQvZGVjcmVtZW50IG1heSBub3QgaGF2ZSBl
dmFsIG9yIGFyZ3VtZW50cyBvcGVyYW5kIGluIHN0cmljdCBtb2RlJywKKyAgICAgICAgU3RyaWN0
UmVzZXJ2ZWRXb3JkOiAgJ1VzZSBvZiBmdXR1cmUgcmVzZXJ2ZWQgd29yZCBpbiBzdHJpY3QgbW9k
ZScKKyAgICB9OworCisgICAgLy8gU2VlIGFsc28gdG9vbHMvZ2VuZXJhdGUtdW5pY29kZS1yZWdl
eC5weS4KKyAgICBSZWdleCA9IHsKKyAgICAgICAgTm9uQXNjaWlJZGVudGlmaWVyU3RhcnQ6IG5l
dyBSZWdFeHAoJ1tceEFBXHhCNVx4QkFceEMwLVx4RDZceEQ4LVx4RjZceEY4LVx1MDJDMVx1MDJD
Ni1cdTAyRDFcdTAyRTAtXHUwMkU0XHUwMkVDXHUwMkVFXHUwMzcwLVx1MDM3NFx1MDM3Nlx1MDM3
N1x1MDM3QS1cdTAzN0RcdTAzODZcdTAzODgtXHUwMzhBXHUwMzhDXHUwMzhFLVx1MDNBMVx1MDNB
My1cdTAzRjVcdTAzRjctXHUwNDgxXHUwNDhBLVx1MDUyN1x1MDUzMS1cdTA1NTZcdTA1NTlcdTA1
NjEtXHUwNTg3XHUwNUQwLVx1MDVFQVx1MDVGMC1cdTA1RjJcdTA2MjAtXHUwNjRBXHUwNjZFXHUw
NjZGXHUwNjcxLVx1MDZEM1x1MDZENVx1MDZFNVx1MDZFNlx1MDZFRVx1MDZFRlx1MDZGQS1cdTA2
RkNcdTA2RkZcdTA3MTBcdTA3MTItXHUwNzJGXHUwNzRELVx1MDdBNVx1MDdCMVx1MDdDQS1cdTA3
RUFcdTA3RjRcdTA3RjVcdTA3RkFcdTA4MDAtXHUwODE1XHUwODFBXHUwODI0XHUwODI4XHUwODQw
LVx1MDg1OFx1MDhBMFx1MDhBMi1cdTA4QUNcdTA5MDQtXHUwOTM5XHUwOTNEXHUwOTUwXHUwOTU4
LVx1MDk2MVx1MDk3MS1cdTA5NzdcdTA5NzktXHUwOTdGXHUwOTg1LVx1MDk4Q1x1MDk4Rlx1MDk5
MFx1MDk5My1cdTA5QThcdTA5QUEtXHUwOUIwXHUwOUIyXHUwOUI2LVx1MDlCOVx1MDlCRFx1MDlD
RVx1MDlEQ1x1MDlERFx1MDlERi1cdTA5RTFcdTA5RjBcdTA5RjFcdTBBMDUtXHUwQTBBXHUwQTBG
XHUwQTEwXHUwQTEzLVx1MEEyOFx1MEEyQS1cdTBBMzBcdTBBMzJcdTBBMzNcdTBBMzVcdTBBMzZc
dTBBMzhcdTBBMzlcdTBBNTktXHUwQTVDXHUwQTVFXHUwQTcyLVx1MEE3NFx1MEE4NS1cdTBBOERc
dTBBOEYtXHUwQTkxXHUwQTkzLVx1MEFBOFx1MEFBQS1cdTBBQjBcdTBBQjJcdTBBQjNcdTBBQjUt
XHUwQUI5XHUwQUJEXHUwQUQwXHUwQUUwXHUwQUUxXHUwQjA1LVx1MEIwQ1x1MEIwRlx1MEIxMFx1
MEIxMy1cdTBCMjhcdTBCMkEtXHUwQjMwXHUwQjMyXHUwQjMzXHUwQjM1LVx1MEIzOVx1MEIzRFx1
MEI1Q1x1MEI1RFx1MEI1Ri1cdTBCNjFcdTBCNzFcdTBCODNcdTBCODUtXHUwQjhBXHUwQjhFLVx1
MEI5MFx1MEI5Mi1cdTBCOTVcdTBCOTlcdTBCOUFcdTBCOUNcdTBCOUVcdTBCOUZcdTBCQTNcdTBC
QTRcdTBCQTgtXHUwQkFBXHUwQkFFLVx1MEJCOVx1MEJEMFx1MEMwNS1cdTBDMENcdTBDMEUtXHUw
QzEwXHUwQzEyLVx1MEMyOFx1MEMyQS1cdTBDMzNcdTBDMzUtXHUwQzM5XHUwQzNEXHUwQzU4XHUw
QzU5XHUwQzYwXHUwQzYxXHUwQzg1LVx1MEM4Q1x1MEM4RS1cdTBDOTBcdTBDOTItXHUwQ0E4XHUw
Q0FBLVx1MENCM1x1MENCNS1cdTBDQjlcdTBDQkRcdTBDREVcdTBDRTBcdTBDRTFcdTBDRjFcdTBD
RjJcdTBEMDUtXHUwRDBDXHUwRDBFLVx1MEQxMFx1MEQxMi1cdTBEM0FcdTBEM0RcdTBENEVcdTBE
NjBcdTBENjFcdTBEN0EtXHUwRDdGXHUwRDg1LVx1MEQ5Nlx1MEQ5QS1cdTBEQjFcdTBEQjMtXHUw
REJCXHUwREJEXHUwREMwLVx1MERDNlx1MEUwMS1cdTBFMzBcdTBFMzJcdTBFMzNcdTBFNDAtXHUw
RTQ2XHUwRTgxXHUwRTgyXHUwRTg0XHUwRTg3XHUwRTg4XHUwRThBXHUwRThEXHUwRTk0LVx1MEU5
N1x1MEU5OS1cdTBFOUZcdTBFQTEtXHUwRUEzXHUwRUE1XHUwRUE3XHUwRUFBXHUwRUFCXHUwRUFE
LVx1MEVCMFx1MEVCMlx1MEVCM1x1MEVCRFx1MEVDMC1cdTBFQzRcdTBFQzZcdTBFREMtXHUwRURG
XHUwRjAwXHUwRjQwLVx1MEY0N1x1MEY0OS1cdTBGNkNcdTBGODgtXHUwRjhDXHUxMDAwLVx1MTAy
QVx1MTAzRlx1MTA1MC1cdTEwNTVcdTEwNUEtXHUxMDVEXHUxMDYxXHUxMDY1XHUxMDY2XHUxMDZF
LVx1MTA3MFx1MTA3NS1cdTEwODFcdTEwOEVcdTEwQTAtXHUxMEM1XHUxMEM3XHUxMENEXHUxMEQw
LVx1MTBGQVx1MTBGQy1cdTEyNDhcdTEyNEEtXHUxMjREXHUxMjUwLVx1MTI1Nlx1MTI1OFx1MTI1
QS1cdTEyNURcdTEyNjAtXHUxMjg4XHUxMjhBLVx1MTI4RFx1MTI5MC1cdTEyQjBcdTEyQjItXHUx
MkI1XHUxMkI4LVx1MTJCRVx1MTJDMFx1MTJDMi1cdTEyQzVcdTEyQzgtXHUxMkQ2XHUxMkQ4LVx1
MTMxMFx1MTMxMi1cdTEzMTVcdTEzMTgtXHUxMzVBXHUxMzgwLVx1MTM4Rlx1MTNBMC1cdTEzRjRc
dTE0MDEtXHUxNjZDXHUxNjZGLVx1MTY3Rlx1MTY4MS1cdTE2OUFcdTE2QTAtXHUxNkVBXHUxNkVF
LVx1MTZGMFx1MTcwMC1cdTE3MENcdTE3MEUtXHUxNzExXHUxNzIwLVx1MTczMVx1MTc0MC1cdTE3
NTFcdTE3NjAtXHUxNzZDXHUxNzZFLVx1MTc3MFx1MTc4MC1cdTE3QjNcdTE3RDdcdTE3RENcdTE4
MjAtXHUxODc3XHUxODgwLVx1MThBOFx1MThBQVx1MThCMC1cdTE4RjVcdTE5MDAtXHUxOTFDXHUx
OTUwLVx1MTk2RFx1MTk3MC1cdTE5NzRcdTE5ODAtXHUxOUFCXHUxOUMxLVx1MTlDN1x1MUEwMC1c
dTFBMTZcdTFBMjAtXHUxQTU0XHUxQUE3XHUxQjA1LVx1MUIzM1x1MUI0NS1cdTFCNEJcdTFCODMt
XHUxQkEwXHUxQkFFXHUxQkFGXHUxQkJBLVx1MUJFNVx1MUMwMC1cdTFDMjNcdTFDNEQtXHUxQzRG
XHUxQzVBLVx1MUM3RFx1MUNFOS1cdTFDRUNcdTFDRUUtXHUxQ0YxXHUxQ0Y1XHUxQ0Y2XHUxRDAw
LVx1MURCRlx1MUUwMC1cdTFGMTVcdTFGMTgtXHUxRjFEXHUxRjIwLVx1MUY0NVx1MUY0OC1cdTFG
NERcdTFGNTAtXHUxRjU3XHUxRjU5XHUxRjVCXHUxRjVEXHUxRjVGLVx1MUY3RFx1MUY4MC1cdTFG
QjRcdTFGQjYtXHUxRkJDXHUxRkJFXHUxRkMyLVx1MUZDNFx1MUZDNi1cdTFGQ0NcdTFGRDAtXHUx
RkQzXHUxRkQ2LVx1MUZEQlx1MUZFMC1cdTFGRUNcdTFGRjItXHUxRkY0XHUxRkY2LVx1MUZGQ1x1
MjA3MVx1MjA3Rlx1MjA5MC1cdTIwOUNcdTIxMDJcdTIxMDdcdTIxMEEtXHUyMTEzXHUyMTE1XHUy
MTE5LVx1MjExRFx1MjEyNFx1MjEyNlx1MjEyOFx1MjEyQS1cdTIxMkRcdTIxMkYtXHUyMTM5XHUy
MTNDLVx1MjEzRlx1MjE0NS1cdTIxNDlcdTIxNEVcdTIxNjAtXHUyMTg4XHUyQzAwLVx1MkMyRVx1
MkMzMC1cdTJDNUVcdTJDNjAtXHUyQ0U0XHUyQ0VCLVx1MkNFRVx1MkNGMlx1MkNGM1x1MkQwMC1c
dTJEMjVcdTJEMjdcdTJEMkRcdTJEMzAtXHUyRDY3XHUyRDZGXHUyRDgwLVx1MkQ5Nlx1MkRBMC1c
dTJEQTZcdTJEQTgtXHUyREFFXHUyREIwLVx1MkRCNlx1MkRCOC1cdTJEQkVcdTJEQzAtXHUyREM2
XHUyREM4LVx1MkRDRVx1MkREMC1cdTJERDZcdTJERDgtXHUyRERFXHUyRTJGXHUzMDA1LVx1MzAw
N1x1MzAyMS1cdTMwMjlcdTMwMzEtXHUzMDM1XHUzMDM4LVx1MzAzQ1x1MzA0MS1cdTMwOTZcdTMw
OUQtXHUzMDlGXHUzMEExLVx1MzBGQVx1MzBGQy1cdTMwRkZcdTMxMDUtXHUzMTJEXHUzMTMxLVx1
MzE4RVx1MzFBMC1cdTMxQkFcdTMxRjAtXHUzMUZGXHUzNDAwLVx1NERCNVx1NEUwMC1cdTlGQ0Nc
dUEwMDAtXHVBNDhDXHVBNEQwLVx1QTRGRFx1QTUwMC1cdUE2MENcdUE2MTAtXHVBNjFGXHVBNjJB
XHVBNjJCXHVBNjQwLVx1QTY2RVx1QTY3Ri1cdUE2OTdcdUE2QTAtXHVBNkVGXHVBNzE3LVx1QTcx
Rlx1QTcyMi1cdUE3ODhcdUE3OEItXHVBNzhFXHVBNzkwLVx1QTc5M1x1QTdBMC1cdUE3QUFcdUE3
RjgtXHVBODAxXHVBODAzLVx1QTgwNVx1QTgwNy1cdUE4MEFcdUE4MEMtXHVBODIyXHVBODQwLVx1
QTg3M1x1QTg4Mi1cdUE4QjNcdUE4RjItXHVBOEY3XHVBOEZCXHVBOTBBLVx1QTkyNVx1QTkzMC1c
dUE5NDZcdUE5NjAtXHVBOTdDXHVBOTg0LVx1QTlCMlx1QTlDRlx1QUEwMC1cdUFBMjhcdUFBNDAt
XHVBQTQyXHVBQTQ0LVx1QUE0Qlx1QUE2MC1cdUFBNzZcdUFBN0FcdUFBODAtXHVBQUFGXHVBQUIx
XHVBQUI1XHVBQUI2XHVBQUI5LVx1QUFCRFx1QUFDMFx1QUFDMlx1QUFEQi1cdUFBRERcdUFBRTAt
XHVBQUVBXHVBQUYyLVx1QUFGNFx1QUIwMS1cdUFCMDZcdUFCMDktXHVBQjBFXHVBQjExLVx1QUIx
Nlx1QUIyMC1cdUFCMjZcdUFCMjgtXHVBQjJFXHVBQkMwLVx1QUJFMlx1QUMwMC1cdUQ3QTNcdUQ3
QjAtXHVEN0M2XHVEN0NCLVx1RDdGQlx1RjkwMC1cdUZBNkRcdUZBNzAtXHVGQUQ5XHVGQjAwLVx1
RkIwNlx1RkIxMy1cdUZCMTdcdUZCMURcdUZCMUYtXHVGQjI4XHVGQjJBLVx1RkIzNlx1RkIzOC1c
dUZCM0NcdUZCM0VcdUZCNDBcdUZCNDFcdUZCNDNcdUZCNDRcdUZCNDYtXHVGQkIxXHVGQkQzLVx1
RkQzRFx1RkQ1MC1cdUZEOEZcdUZEOTItXHVGREM3XHVGREYwLVx1RkRGQlx1RkU3MC1cdUZFNzRc
dUZFNzYtXHVGRUZDXHVGRjIxLVx1RkYzQVx1RkY0MS1cdUZGNUFcdUZGNjYtXHVGRkJFXHVGRkMy
LVx1RkZDN1x1RkZDQS1cdUZGQ0ZcdUZGRDItXHVGRkQ3XHVGRkRBLVx1RkZEQ10nKSwKKyAgICAg
ICAgTm9uQXNjaWlJZGVudGlmaWVyUGFydDogbmV3IFJlZ0V4cCgnW1x4QUFceEI1XHhCQVx4QzAt
XHhENlx4RDgtXHhGNlx4RjgtXHUwMkMxXHUwMkM2LVx1MDJEMVx1MDJFMC1cdTAyRTRcdTAyRUNc
dTAyRUVcdTAzMDAtXHUwMzc0XHUwMzc2XHUwMzc3XHUwMzdBLVx1MDM3RFx1MDM4Nlx1MDM4OC1c
dTAzOEFcdTAzOENcdTAzOEUtXHUwM0ExXHUwM0EzLVx1MDNGNVx1MDNGNy1cdTA0ODFcdTA0ODMt
XHUwNDg3XHUwNDhBLVx1MDUyN1x1MDUzMS1cdTA1NTZcdTA1NTlcdTA1NjEtXHUwNTg3XHUwNTkx
LVx1MDVCRFx1MDVCRlx1MDVDMVx1MDVDMlx1MDVDNFx1MDVDNVx1MDVDN1x1MDVEMC1cdTA1RUFc
dTA1RjAtXHUwNUYyXHUwNjEwLVx1MDYxQVx1MDYyMC1cdTA2NjlcdTA2NkUtXHUwNkQzXHUwNkQ1
LVx1MDZEQ1x1MDZERi1cdTA2RThcdTA2RUEtXHUwNkZDXHUwNkZGXHUwNzEwLVx1MDc0QVx1MDc0
RC1cdTA3QjFcdTA3QzAtXHUwN0Y1XHUwN0ZBXHUwODAwLVx1MDgyRFx1MDg0MC1cdTA4NUJcdTA4
QTBcdTA4QTItXHUwOEFDXHUwOEU0LVx1MDhGRVx1MDkwMC1cdTA5NjNcdTA5NjYtXHUwOTZGXHUw
OTcxLVx1MDk3N1x1MDk3OS1cdTA5N0ZcdTA5ODEtXHUwOTgzXHUwOTg1LVx1MDk4Q1x1MDk4Rlx1
MDk5MFx1MDk5My1cdTA5QThcdTA5QUEtXHUwOUIwXHUwOUIyXHUwOUI2LVx1MDlCOVx1MDlCQy1c
dTA5QzRcdTA5QzdcdTA5QzhcdTA5Q0ItXHUwOUNFXHUwOUQ3XHUwOURDXHUwOUREXHUwOURGLVx1
MDlFM1x1MDlFNi1cdTA5RjFcdTBBMDEtXHUwQTAzXHUwQTA1LVx1MEEwQVx1MEEwRlx1MEExMFx1
MEExMy1cdTBBMjhcdTBBMkEtXHUwQTMwXHUwQTMyXHUwQTMzXHUwQTM1XHUwQTM2XHUwQTM4XHUw
QTM5XHUwQTNDXHUwQTNFLVx1MEE0Mlx1MEE0N1x1MEE0OFx1MEE0Qi1cdTBBNERcdTBBNTFcdTBB
NTktXHUwQTVDXHUwQTVFXHUwQTY2LVx1MEE3NVx1MEE4MS1cdTBBODNcdTBBODUtXHUwQThEXHUw
QThGLVx1MEE5MVx1MEE5My1cdTBBQThcdTBBQUEtXHUwQUIwXHUwQUIyXHUwQUIzXHUwQUI1LVx1
MEFCOVx1MEFCQy1cdTBBQzVcdTBBQzctXHUwQUM5XHUwQUNCLVx1MEFDRFx1MEFEMFx1MEFFMC1c
dTBBRTNcdTBBRTYtXHUwQUVGXHUwQjAxLVx1MEIwM1x1MEIwNS1cdTBCMENcdTBCMEZcdTBCMTBc
dTBCMTMtXHUwQjI4XHUwQjJBLVx1MEIzMFx1MEIzMlx1MEIzM1x1MEIzNS1cdTBCMzlcdTBCM0Mt
XHUwQjQ0XHUwQjQ3XHUwQjQ4XHUwQjRCLVx1MEI0RFx1MEI1Nlx1MEI1N1x1MEI1Q1x1MEI1RFx1
MEI1Ri1cdTBCNjNcdTBCNjYtXHUwQjZGXHUwQjcxXHUwQjgyXHUwQjgzXHUwQjg1LVx1MEI4QVx1
MEI4RS1cdTBCOTBcdTBCOTItXHUwQjk1XHUwQjk5XHUwQjlBXHUwQjlDXHUwQjlFXHUwQjlGXHUw
QkEzXHUwQkE0XHUwQkE4LVx1MEJBQVx1MEJBRS1cdTBCQjlcdTBCQkUtXHUwQkMyXHUwQkM2LVx1
MEJDOFx1MEJDQS1cdTBCQ0RcdTBCRDBcdTBCRDdcdTBCRTYtXHUwQkVGXHUwQzAxLVx1MEMwM1x1
MEMwNS1cdTBDMENcdTBDMEUtXHUwQzEwXHUwQzEyLVx1MEMyOFx1MEMyQS1cdTBDMzNcdTBDMzUt
XHUwQzM5XHUwQzNELVx1MEM0NFx1MEM0Ni1cdTBDNDhcdTBDNEEtXHUwQzREXHUwQzU1XHUwQzU2
XHUwQzU4XHUwQzU5XHUwQzYwLVx1MEM2M1x1MEM2Ni1cdTBDNkZcdTBDODJcdTBDODNcdTBDODUt
XHUwQzhDXHUwQzhFLVx1MEM5MFx1MEM5Mi1cdTBDQThcdTBDQUEtXHUwQ0IzXHUwQ0I1LVx1MENC
OVx1MENCQy1cdTBDQzRcdTBDQzYtXHUwQ0M4XHUwQ0NBLVx1MENDRFx1MENENVx1MENENlx1MENE
RVx1MENFMC1cdTBDRTNcdTBDRTYtXHUwQ0VGXHUwQ0YxXHUwQ0YyXHUwRDAyXHUwRDAzXHUwRDA1
LVx1MEQwQ1x1MEQwRS1cdTBEMTBcdTBEMTItXHUwRDNBXHUwRDNELVx1MEQ0NFx1MEQ0Ni1cdTBE
NDhcdTBENEEtXHUwRDRFXHUwRDU3XHUwRDYwLVx1MEQ2M1x1MEQ2Ni1cdTBENkZcdTBEN0EtXHUw
RDdGXHUwRDgyXHUwRDgzXHUwRDg1LVx1MEQ5Nlx1MEQ5QS1cdTBEQjFcdTBEQjMtXHUwREJCXHUw
REJEXHUwREMwLVx1MERDNlx1MERDQVx1MERDRi1cdTBERDRcdTBERDZcdTBERDgtXHUwRERGXHUw
REYyXHUwREYzXHUwRTAxLVx1MEUzQVx1MEU0MC1cdTBFNEVcdTBFNTAtXHUwRTU5XHUwRTgxXHUw
RTgyXHUwRTg0XHUwRTg3XHUwRTg4XHUwRThBXHUwRThEXHUwRTk0LVx1MEU5N1x1MEU5OS1cdTBF
OUZcdTBFQTEtXHUwRUEzXHUwRUE1XHUwRUE3XHUwRUFBXHUwRUFCXHUwRUFELVx1MEVCOVx1MEVC
Qi1cdTBFQkRcdTBFQzAtXHUwRUM0XHUwRUM2XHUwRUM4LVx1MEVDRFx1MEVEMC1cdTBFRDlcdTBF
REMtXHUwRURGXHUwRjAwXHUwRjE4XHUwRjE5XHUwRjIwLVx1MEYyOVx1MEYzNVx1MEYzN1x1MEYz
OVx1MEYzRS1cdTBGNDdcdTBGNDktXHUwRjZDXHUwRjcxLVx1MEY4NFx1MEY4Ni1cdTBGOTdcdTBG
OTktXHUwRkJDXHUwRkM2XHUxMDAwLVx1MTA0OVx1MTA1MC1cdTEwOURcdTEwQTAtXHUxMEM1XHUx
MEM3XHUxMENEXHUxMEQwLVx1MTBGQVx1MTBGQy1cdTEyNDhcdTEyNEEtXHUxMjREXHUxMjUwLVx1
MTI1Nlx1MTI1OFx1MTI1QS1cdTEyNURcdTEyNjAtXHUxMjg4XHUxMjhBLVx1MTI4RFx1MTI5MC1c
dTEyQjBcdTEyQjItXHUxMkI1XHUxMkI4LVx1MTJCRVx1MTJDMFx1MTJDMi1cdTEyQzVcdTEyQzgt
XHUxMkQ2XHUxMkQ4LVx1MTMxMFx1MTMxMi1cdTEzMTVcdTEzMTgtXHUxMzVBXHUxMzVELVx1MTM1
Rlx1MTM4MC1cdTEzOEZcdTEzQTAtXHUxM0Y0XHUxNDAxLVx1MTY2Q1x1MTY2Ri1cdTE2N0ZcdTE2
ODEtXHUxNjlBXHUxNkEwLVx1MTZFQVx1MTZFRS1cdTE2RjBcdTE3MDAtXHUxNzBDXHUxNzBFLVx1
MTcxNFx1MTcyMC1cdTE3MzRcdTE3NDAtXHUxNzUzXHUxNzYwLVx1MTc2Q1x1MTc2RS1cdTE3NzBc
dTE3NzJcdTE3NzNcdTE3ODAtXHUxN0QzXHUxN0Q3XHUxN0RDXHUxN0REXHUxN0UwLVx1MTdFOVx1
MTgwQi1cdTE4MERcdTE4MTAtXHUxODE5XHUxODIwLVx1MTg3N1x1MTg4MC1cdTE4QUFcdTE4QjAt
XHUxOEY1XHUxOTAwLVx1MTkxQ1x1MTkyMC1cdTE5MkJcdTE5MzAtXHUxOTNCXHUxOTQ2LVx1MTk2
RFx1MTk3MC1cdTE5NzRcdTE5ODAtXHUxOUFCXHUxOUIwLVx1MTlDOVx1MTlEMC1cdTE5RDlcdTFB
MDAtXHUxQTFCXHUxQTIwLVx1MUE1RVx1MUE2MC1cdTFBN0NcdTFBN0YtXHUxQTg5XHUxQTkwLVx1
MUE5OVx1MUFBN1x1MUIwMC1cdTFCNEJcdTFCNTAtXHUxQjU5XHUxQjZCLVx1MUI3M1x1MUI4MC1c
dTFCRjNcdTFDMDAtXHUxQzM3XHUxQzQwLVx1MUM0OVx1MUM0RC1cdTFDN0RcdTFDRDAtXHUxQ0Qy
XHUxQ0Q0LVx1MUNGNlx1MUQwMC1cdTFERTZcdTFERkMtXHUxRjE1XHUxRjE4LVx1MUYxRFx1MUYy
MC1cdTFGNDVcdTFGNDgtXHUxRjREXHUxRjUwLVx1MUY1N1x1MUY1OVx1MUY1Qlx1MUY1RFx1MUY1
Ri1cdTFGN0RcdTFGODAtXHUxRkI0XHUxRkI2LVx1MUZCQ1x1MUZCRVx1MUZDMi1cdTFGQzRcdTFG
QzYtXHUxRkNDXHUxRkQwLVx1MUZEM1x1MUZENi1cdTFGREJcdTFGRTAtXHUxRkVDXHUxRkYyLVx1
MUZGNFx1MUZGNi1cdTFGRkNcdTIwMENcdTIwMERcdTIwM0ZcdTIwNDBcdTIwNTRcdTIwNzFcdTIw
N0ZcdTIwOTAtXHUyMDlDXHUyMEQwLVx1MjBEQ1x1MjBFMVx1MjBFNS1cdTIwRjBcdTIxMDJcdTIx
MDdcdTIxMEEtXHUyMTEzXHUyMTE1XHUyMTE5LVx1MjExRFx1MjEyNFx1MjEyNlx1MjEyOFx1MjEy
QS1cdTIxMkRcdTIxMkYtXHUyMTM5XHUyMTNDLVx1MjEzRlx1MjE0NS1cdTIxNDlcdTIxNEVcdTIx
NjAtXHUyMTg4XHUyQzAwLVx1MkMyRVx1MkMzMC1cdTJDNUVcdTJDNjAtXHUyQ0U0XHUyQ0VCLVx1
MkNGM1x1MkQwMC1cdTJEMjVcdTJEMjdcdTJEMkRcdTJEMzAtXHUyRDY3XHUyRDZGXHUyRDdGLVx1
MkQ5Nlx1MkRBMC1cdTJEQTZcdTJEQTgtXHUyREFFXHUyREIwLVx1MkRCNlx1MkRCOC1cdTJEQkVc
dTJEQzAtXHUyREM2XHUyREM4LVx1MkRDRVx1MkREMC1cdTJERDZcdTJERDgtXHUyRERFXHUyREUw
LVx1MkRGRlx1MkUyRlx1MzAwNS1cdTMwMDdcdTMwMjEtXHUzMDJGXHUzMDMxLVx1MzAzNVx1MzAz
OC1cdTMwM0NcdTMwNDEtXHUzMDk2XHUzMDk5XHUzMDlBXHUzMDlELVx1MzA5Rlx1MzBBMS1cdTMw
RkFcdTMwRkMtXHUzMEZGXHUzMTA1LVx1MzEyRFx1MzEzMS1cdTMxOEVcdTMxQTAtXHUzMUJBXHUz
MUYwLVx1MzFGRlx1MzQwMC1cdTREQjVcdTRFMDAtXHU5RkNDXHVBMDAwLVx1QTQ4Q1x1QTREMC1c
dUE0RkRcdUE1MDAtXHVBNjBDXHVBNjEwLVx1QTYyQlx1QTY0MC1cdUE2NkZcdUE2NzQtXHVBNjdE
XHVBNjdGLVx1QTY5N1x1QTY5Ri1cdUE2RjFcdUE3MTctXHVBNzFGXHVBNzIyLVx1QTc4OFx1QTc4
Qi1cdUE3OEVcdUE3OTAtXHVBNzkzXHVBN0EwLVx1QTdBQVx1QTdGOC1cdUE4MjdcdUE4NDAtXHVB
ODczXHVBODgwLVx1QThDNFx1QThEMC1cdUE4RDlcdUE4RTAtXHVBOEY3XHVBOEZCXHVBOTAwLVx1
QTkyRFx1QTkzMC1cdUE5NTNcdUE5NjAtXHVBOTdDXHVBOTgwLVx1QTlDMFx1QTlDRi1cdUE5RDlc
dUFBMDAtXHVBQTM2XHVBQTQwLVx1QUE0RFx1QUE1MC1cdUFBNTlcdUFBNjAtXHVBQTc2XHVBQTdB
XHVBQTdCXHVBQTgwLVx1QUFDMlx1QUFEQi1cdUFBRERcdUFBRTAtXHVBQUVGXHVBQUYyLVx1QUFG
Nlx1QUIwMS1cdUFCMDZcdUFCMDktXHVBQjBFXHVBQjExLVx1QUIxNlx1QUIyMC1cdUFCMjZcdUFC
MjgtXHVBQjJFXHVBQkMwLVx1QUJFQVx1QUJFQ1x1QUJFRFx1QUJGMC1cdUFCRjlcdUFDMDAtXHVE
N0EzXHVEN0IwLVx1RDdDNlx1RDdDQi1cdUQ3RkJcdUY5MDAtXHVGQTZEXHVGQTcwLVx1RkFEOVx1
RkIwMC1cdUZCMDZcdUZCMTMtXHVGQjE3XHVGQjFELVx1RkIyOFx1RkIyQS1cdUZCMzZcdUZCMzgt
XHVGQjNDXHVGQjNFXHVGQjQwXHVGQjQxXHVGQjQzXHVGQjQ0XHVGQjQ2LVx1RkJCMVx1RkJEMy1c
dUZEM0RcdUZENTAtXHVGRDhGXHVGRDkyLVx1RkRDN1x1RkRGMC1cdUZERkJcdUZFMDAtXHVGRTBG
XHVGRTIwLVx1RkUyNlx1RkUzM1x1RkUzNFx1RkU0RC1cdUZFNEZcdUZFNzAtXHVGRTc0XHVGRTc2
LVx1RkVGQ1x1RkYxMC1cdUZGMTlcdUZGMjEtXHVGRjNBXHVGRjNGXHVGRjQxLVx1RkY1QVx1RkY2
Ni1cdUZGQkVcdUZGQzItXHVGRkM3XHVGRkNBLVx1RkZDRlx1RkZEMi1cdUZGRDdcdUZGREEtXHVG
RkRDXScpCisgICAgfTsKKworICAgIC8vIEVuc3VyZSB0aGUgY29uZGl0aW9uIGlzIHRydWUsIG90
aGVyd2lzZSB0aHJvdyBhbiBlcnJvci4KKyAgICAvLyBUaGlzIGlzIG9ubHkgdG8gaGF2ZSBhIGJl
dHRlciBjb250cmFjdCBzZW1hbnRpYywgaS5lLiBhbm90aGVyIHNhZmV0eSBuZXQKKyAgICAvLyB0
byBjYXRjaCBhIGxvZ2ljIGVycm9yLiBUaGUgY29uZGl0aW9uIHNoYWxsIGJlIGZ1bGZpbGxlZCBp
biBub3JtYWwgY2FzZS4KKyAgICAvLyBEbyBOT1QgdXNlIHRoaXMgdG8gZW5mb3JjZSBhIGNlcnRh
aW4gY29uZGl0aW9uIG9uIGFueSB1c2VyIGlucHV0LgorCisgICAgZnVuY3Rpb24gYXNzZXJ0KGNv
bmRpdGlvbiwgbWVzc2FnZSkgeworICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi8KKyAg
ICAgICAgaWYgKCFjb25kaXRpb24pIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQVNT
RVJUOiAnICsgbWVzc2FnZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmdW5jdGlvbiBpc0Rl
Y2ltYWxEaWdpdChjaCkgeworICAgICAgICByZXR1cm4gKGNoID49IDQ4ICYmIGNoIDw9IDU3KTsg
ICAvLyAwLi45CisgICAgfQorCisgICAgZnVuY3Rpb24gaXNIZXhEaWdpdChjaCkgeworICAgICAg
ICByZXR1cm4gJzAxMjM0NTY3ODlhYmNkZWZBQkNERUYnLmluZGV4T2YoY2gpID49IDA7CisgICAg
fQorCisgICAgZnVuY3Rpb24gaXNPY3RhbERpZ2l0KGNoKSB7CisgICAgICAgIHJldHVybiAnMDEy
MzQ1NjcnLmluZGV4T2YoY2gpID49IDA7CisgICAgfQorCisKKyAgICAvLyA3LjIgV2hpdGUgU3Bh
Y2UKKworICAgIGZ1bmN0aW9uIGlzV2hpdGVTcGFjZShjaCkgeworICAgICAgICByZXR1cm4gKGNo
ID09PSAweDIwKSB8fCAoY2ggPT09IDB4MDkpIHx8IChjaCA9PT0gMHgwQikgfHwgKGNoID09PSAw
eDBDKSB8fCAoY2ggPT09IDB4QTApIHx8CisgICAgICAgICAgICAoY2ggPj0gMHgxNjgwICYmIFsw
eDE2ODAsIDB4MTgwRSwgMHgyMDAwLCAweDIwMDEsIDB4MjAwMiwgMHgyMDAzLCAweDIwMDQsIDB4
MjAwNSwgMHgyMDA2LCAweDIwMDcsIDB4MjAwOCwgMHgyMDA5LCAweDIwMEEsIDB4MjAyRiwgMHgy
MDVGLCAweDMwMDAsIDB4RkVGRl0uaW5kZXhPZihjaCkgPj0gMCk7CisgICAgfQorCisgICAgLy8g
Ny4zIExpbmUgVGVybWluYXRvcnMKKworICAgIGZ1bmN0aW9uIGlzTGluZVRlcm1pbmF0b3IoY2gp
IHsKKyAgICAgICAgcmV0dXJuIChjaCA9PT0gMHgwQSkgfHwgKGNoID09PSAweDBEKSB8fCAoY2gg
PT09IDB4MjAyOCkgfHwgKGNoID09PSAweDIwMjkpOworICAgIH0KKworICAgIC8vIDcuNiBJZGVu
dGlmaWVyIE5hbWVzIGFuZCBJZGVudGlmaWVycworCisgICAgZnVuY3Rpb24gaXNJZGVudGlmaWVy
U3RhcnQoY2gpIHsKKyAgICAgICAgcmV0dXJuIChjaCA9PT0gMHgyNCkgfHwgKGNoID09PSAweDVG
KSB8fCAgLy8gJCAoZG9sbGFyKSBhbmQgXyAodW5kZXJzY29yZSkKKyAgICAgICAgICAgIChjaCA+
PSAweDQxICYmIGNoIDw9IDB4NUEpIHx8ICAgICAgICAgLy8gQS4uWgorICAgICAgICAgICAgKGNo
ID49IDB4NjEgJiYgY2ggPD0gMHg3QSkgfHwgICAgICAgICAvLyBhLi56CisgICAgICAgICAgICAo
Y2ggPT09IDB4NUMpIHx8ICAgICAgICAgICAgICAgICAgICAgIC8vIFwgKGJhY2tzbGFzaCkKKyAg
ICAgICAgICAgICgoY2ggPj0gMHg4MCkgJiYgUmVnZXguTm9uQXNjaWlJZGVudGlmaWVyU3RhcnQu
dGVzdChTdHJpbmcuZnJvbUNoYXJDb2RlKGNoKSkpOworICAgIH0KKworICAgIGZ1bmN0aW9uIGlz
SWRlbnRpZmllclBhcnQoY2gpIHsKKyAgICAgICAgcmV0dXJuIChjaCA9PT0gMHgyNCkgfHwgKGNo
ID09PSAweDVGKSB8fCAgLy8gJCAoZG9sbGFyKSBhbmQgXyAodW5kZXJzY29yZSkKKyAgICAgICAg
ICAgIChjaCA+PSAweDQxICYmIGNoIDw9IDB4NUEpIHx8ICAgICAgICAgLy8gQS4uWgorICAgICAg
ICAgICAgKGNoID49IDB4NjEgJiYgY2ggPD0gMHg3QSkgfHwgICAgICAgICAvLyBhLi56CisgICAg
ICAgICAgICAoY2ggPj0gMHgzMCAmJiBjaCA8PSAweDM5KSB8fCAgICAgICAgIC8vIDAuLjkKKyAg
ICAgICAgICAgIChjaCA9PT0gMHg1QykgfHwgICAgICAgICAgICAgICAgICAgICAgLy8gXCAoYmFj
a3NsYXNoKQorICAgICAgICAgICAgKChjaCA+PSAweDgwKSAmJiBSZWdleC5Ob25Bc2NpaUlkZW50
aWZpZXJQYXJ0LnRlc3QoU3RyaW5nLmZyb21DaGFyQ29kZShjaCkpKTsKKyAgICB9CisKKyAgICAv
LyA3LjYuMS4yIEZ1dHVyZSBSZXNlcnZlZCBXb3JkcworCisgICAgZnVuY3Rpb24gaXNGdXR1cmVS
ZXNlcnZlZFdvcmQoaWQpIHsKKyAgICAgICAgc3dpdGNoIChpZCkgeworICAgICAgICBjYXNlICdj
bGFzcyc6CisgICAgICAgIGNhc2UgJ2VudW0nOgorICAgICAgICBjYXNlICdleHBvcnQnOgorICAg
ICAgICBjYXNlICdleHRlbmRzJzoKKyAgICAgICAgY2FzZSAnaW1wb3J0JzoKKyAgICAgICAgY2Fz
ZSAnc3VwZXInOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmdW5jdGlv
biBpc1N0cmljdE1vZGVSZXNlcnZlZFdvcmQoaWQpIHsKKyAgICAgICAgc3dpdGNoIChpZCkgewor
ICAgICAgICBjYXNlICdpbXBsZW1lbnRzJzoKKyAgICAgICAgY2FzZSAnaW50ZXJmYWNlJzoKKyAg
ICAgICAgY2FzZSAncGFja2FnZSc6CisgICAgICAgIGNhc2UgJ3ByaXZhdGUnOgorICAgICAgICBj
YXNlICdwcm90ZWN0ZWQnOgorICAgICAgICBjYXNlICdwdWJsaWMnOgorICAgICAgICBjYXNlICdz
dGF0aWMnOgorICAgICAgICBjYXNlICd5aWVsZCc6CisgICAgICAgIGNhc2UgJ2xldCc6CisgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZ1bmN0aW9uIGlzUmVzdHJpY3RlZFdv
cmQoaWQpIHsKKyAgICAgICAgcmV0dXJuIGlkID09PSAnZXZhbCcgfHwgaWQgPT09ICdhcmd1bWVu
dHMnOworICAgIH0KKworICAgIC8vIDcuNi4xLjEgS2V5d29yZHMKKworICAgIGZ1bmN0aW9uIGlz
S2V5d29yZChpZCkgeworICAgICAgICBpZiAoc3RyaWN0ICYmIGlzU3RyaWN0TW9kZVJlc2VydmVk
V29yZChpZCkpIHsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisKKyAgICAg
ICAgLy8gJ2NvbnN0JyBpcyBzcGVjaWFsaXplZCBhcyBLZXl3b3JkIGluIFY4LgorICAgICAgICAv
LyAneWllbGQnIGFuZCAnbGV0JyBhcmUgZm9yIGNvbXBhdGlibGl0eSB3aXRoIFNwaWRlck1vbmtl
eSBhbmQgRVMubmV4dC4KKyAgICAgICAgLy8gU29tZSBvdGhlcnMgYXJlIGZyb20gZnV0dXJlIHJl
c2VydmVkIHdvcmRzLgorCisgICAgICAgIHN3aXRjaCAoaWQubGVuZ3RoKSB7CisgICAgICAgIGNh
c2UgMjoKKyAgICAgICAgICAgIHJldHVybiAoaWQgPT09ICdpZicpIHx8IChpZCA9PT0gJ2luJykg
fHwgKGlkID09PSAnZG8nKTsKKyAgICAgICAgY2FzZSAzOgorICAgICAgICAgICAgcmV0dXJuIChp
ZCA9PT0gJ3ZhcicpIHx8IChpZCA9PT0gJ2ZvcicpIHx8IChpZCA9PT0gJ25ldycpIHx8CisgICAg
ICAgICAgICAgICAgKGlkID09PSAndHJ5JykgfHwgKGlkID09PSAnbGV0Jyk7CisgICAgICAgIGNh
c2UgNDoKKyAgICAgICAgICAgIHJldHVybiAoaWQgPT09ICd0aGlzJykgfHwgKGlkID09PSAnZWxz
ZScpIHx8IChpZCA9PT0gJ2Nhc2UnKSB8fAorICAgICAgICAgICAgICAgIChpZCA9PT0gJ3ZvaWQn
KSB8fCAoaWQgPT09ICd3aXRoJykgfHwgKGlkID09PSAnZW51bScpOworICAgICAgICBjYXNlIDU6
CisgICAgICAgICAgICByZXR1cm4gKGlkID09PSAnd2hpbGUnKSB8fCAoaWQgPT09ICdicmVhaycp
IHx8IChpZCA9PT0gJ2NhdGNoJykgfHwKKyAgICAgICAgICAgICAgICAoaWQgPT09ICd0aHJvdycp
IHx8IChpZCA9PT0gJ2NvbnN0JykgfHwgKGlkID09PSAneWllbGQnKSB8fAorICAgICAgICAgICAg
ICAgIChpZCA9PT0gJ2NsYXNzJykgfHwgKGlkID09PSAnc3VwZXInKTsKKyAgICAgICAgY2FzZSA2
OgorICAgICAgICAgICAgcmV0dXJuIChpZCA9PT0gJ3JldHVybicpIHx8IChpZCA9PT0gJ3R5cGVv
ZicpIHx8IChpZCA9PT0gJ2RlbGV0ZScpIHx8CisgICAgICAgICAgICAgICAgKGlkID09PSAnc3dp
dGNoJykgfHwgKGlkID09PSAnZXhwb3J0JykgfHwgKGlkID09PSAnaW1wb3J0Jyk7CisgICAgICAg
IGNhc2UgNzoKKyAgICAgICAgICAgIHJldHVybiAoaWQgPT09ICdkZWZhdWx0JykgfHwgKGlkID09
PSAnZmluYWxseScpIHx8IChpZCA9PT0gJ2V4dGVuZHMnKTsKKyAgICAgICAgY2FzZSA4OgorICAg
ICAgICAgICAgcmV0dXJuIChpZCA9PT0gJ2Z1bmN0aW9uJykgfHwgKGlkID09PSAnY29udGludWUn
KSB8fCAoaWQgPT09ICdkZWJ1Z2dlcicpOworICAgICAgICBjYXNlIDEwOgorICAgICAgICAgICAg
cmV0dXJuIChpZCA9PT0gJ2luc3RhbmNlb2YnKTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIDcuNCBDb21tZW50
cworCisgICAgZnVuY3Rpb24gYWRkQ29tbWVudCh0eXBlLCB2YWx1ZSwgc3RhcnQsIGVuZCwgbG9j
KSB7CisgICAgICAgIHZhciBjb21tZW50LCBhdHRhY2hlcjsKKworICAgICAgICBhc3NlcnQodHlw
ZW9mIHN0YXJ0ID09PSAnbnVtYmVyJywgJ0NvbW1lbnQgbXVzdCBoYXZlIHZhbGlkIHBvc2l0aW9u
Jyk7CisKKyAgICAgICAgLy8gQmVjYXVzZSB0aGUgd2F5IHRoZSBhY3R1YWwgdG9rZW4gaXMgc2Nh
bm5lZCwgb2Z0ZW4gdGhlIGNvbW1lbnRzCisgICAgICAgIC8vIChpZiBhbnkpIGFyZSBza2lwcGVk
IHR3aWNlIGR1cmluZyB0aGUgbGV4aWNhbCBhbmFseXNpcy4KKyAgICAgICAgLy8gVGh1cywgd2Ug
bmVlZCB0byBza2lwIGFkZGluZyBhIGNvbW1lbnQgaWYgdGhlIGNvbW1lbnQgYXJyYXkgYWxyZWFk
eQorICAgICAgICAvLyBoYW5kbGVkIGl0LgorICAgICAgICBpZiAoc3RhdGUubGFzdENvbW1lbnRT
dGFydCA+PSBzdGFydCkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAg
IHN0YXRlLmxhc3RDb21tZW50U3RhcnQgPSBzdGFydDsKKworICAgICAgICBjb21tZW50ID0gewor
ICAgICAgICAgICAgdHlwZTogdHlwZSwKKyAgICAgICAgICAgIHZhbHVlOiB2YWx1ZQorICAgICAg
ICB9OworICAgICAgICBpZiAoZXh0cmEucmFuZ2UpIHsKKyAgICAgICAgICAgIGNvbW1lbnQucmFu
Z2UgPSBbc3RhcnQsIGVuZF07CisgICAgICAgIH0KKyAgICAgICAgaWYgKGV4dHJhLmxvYykgewor
ICAgICAgICAgICAgY29tbWVudC5sb2MgPSBsb2M7CisgICAgICAgIH0KKyAgICAgICAgZXh0cmEu
Y29tbWVudHMucHVzaChjb21tZW50KTsKKyAgICAgICAgaWYgKGV4dHJhLmF0dGFjaENvbW1lbnQp
IHsKKyAgICAgICAgICAgIGV4dHJhLmxlYWRpbmdDb21tZW50cy5wdXNoKGNvbW1lbnQpOworICAg
ICAgICAgICAgZXh0cmEudHJhaWxpbmdDb21tZW50cy5wdXNoKGNvbW1lbnQpOworICAgICAgICB9
CisgICAgfQorCisgICAgZnVuY3Rpb24gc2tpcFNpbmdsZUxpbmVDb21tZW50KG9mZnNldCkgewor
ICAgICAgICB2YXIgc3RhcnQsIGxvYywgY2gsIGNvbW1lbnQ7CisKKyAgICAgICAgc3RhcnQgPSBp
bmRleCAtIG9mZnNldDsKKyAgICAgICAgbG9jID0geworICAgICAgICAgICAgc3RhcnQ6IHsKKyAg
ICAgICAgICAgICAgICBsaW5lOiBsaW5lTnVtYmVyLAorICAgICAgICAgICAgICAgIGNvbHVtbjog
aW5kZXggLSBsaW5lU3RhcnQgLSBvZmZzZXQKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKwor
ICAgICAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHsKKyAgICAgICAgICAgIGNoID0gc291cmNl
LmNoYXJDb2RlQXQoaW5kZXgpOworICAgICAgICAgICAgKytpbmRleDsKKyAgICAgICAgICAgIGlm
IChpc0xpbmVUZXJtaW5hdG9yKGNoKSkgeworICAgICAgICAgICAgICAgIGlmIChleHRyYS5jb21t
ZW50cykgeworICAgICAgICAgICAgICAgICAgICBjb21tZW50ID0gc291cmNlLnNsaWNlKHN0YXJ0
ICsgb2Zmc2V0LCBpbmRleCAtIDEpOworICAgICAgICAgICAgICAgICAgICBsb2MuZW5kID0gewor
ICAgICAgICAgICAgICAgICAgICAgICAgbGluZTogbGluZU51bWJlciwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbHVtbjogaW5kZXggLSBsaW5lU3RhcnQgLSAxCisgICAgICAgICAgICAgICAg
ICAgIH07CisgICAgICAgICAgICAgICAgICAgIGFkZENvbW1lbnQoJ0xpbmUnLCBjb21tZW50LCBz
dGFydCwgaW5kZXggLSAxLCBsb2MpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBpZiAoY2ggPT09IDEzICYmIHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KSA9PT0gMTApIHsKKyAg
ICAgICAgICAgICAgICAgICAgKytpbmRleDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgKytsaW5lTnVtYmVyOworICAgICAgICAgICAgICAgIGxpbmVTdGFydCA9IGluZGV4Owor
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAg
ICAgIGlmIChleHRyYS5jb21tZW50cykgeworICAgICAgICAgICAgY29tbWVudCA9IHNvdXJjZS5z
bGljZShzdGFydCArIG9mZnNldCwgaW5kZXgpOworICAgICAgICAgICAgbG9jLmVuZCA9IHsKKyAg
ICAgICAgICAgICAgICBsaW5lOiBsaW5lTnVtYmVyLAorICAgICAgICAgICAgICAgIGNvbHVtbjog
aW5kZXggLSBsaW5lU3RhcnQKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBhZGRDb21tZW50
KCdMaW5lJywgY29tbWVudCwgc3RhcnQsIGluZGV4LCBsb2MpOworICAgICAgICB9CisgICAgfQor
CisgICAgZnVuY3Rpb24gc2tpcE11bHRpTGluZUNvbW1lbnQoKSB7CisgICAgICAgIHZhciBzdGFy
dCwgbG9jLCBjaCwgY29tbWVudDsKKworICAgICAgICBpZiAoZXh0cmEuY29tbWVudHMpIHsKKyAg
ICAgICAgICAgIHN0YXJ0ID0gaW5kZXggLSAyOworICAgICAgICAgICAgbG9jID0geworICAgICAg
ICAgICAgICAgIHN0YXJ0OiB7CisgICAgICAgICAgICAgICAgICAgIGxpbmU6IGxpbmVOdW1iZXIs
CisgICAgICAgICAgICAgICAgICAgIGNvbHVtbjogaW5kZXggLSBsaW5lU3RhcnQgLSAyCisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfTsKKyAgICAgICAgfQorCisgICAgICAgIHdoaWxl
IChpbmRleCA8IGxlbmd0aCkgeworICAgICAgICAgICAgY2ggPSBzb3VyY2UuY2hhckNvZGVBdChp
bmRleCk7CisgICAgICAgICAgICBpZiAoaXNMaW5lVGVybWluYXRvcihjaCkpIHsKKyAgICAgICAg
ICAgICAgICBpZiAoY2ggPT09IDB4MEQgJiYgc291cmNlLmNoYXJDb2RlQXQoaW5kZXggKyAxKSA9
PT0gMHgwQSkgeworICAgICAgICAgICAgICAgICAgICArK2luZGV4OworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICArK2xpbmVOdW1iZXI7CisgICAgICAgICAgICAgICAgKytpbmRl
eDsKKyAgICAgICAgICAgICAgICBsaW5lU3RhcnQgPSBpbmRleDsKKyAgICAgICAgICAgICAgICBp
ZiAoaW5kZXggPj0gbGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgICAgIHRocm93RXJyb3Ioe30s
IE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgJ0lMTEVHQUwnKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9IGVsc2UgaWYgKGNoID09PSAweDJBKSB7CisgICAgICAgICAgICAgICAg
Ly8gQmxvY2sgY29tbWVudCBlbmRzIHdpdGggJyovJy4KKyAgICAgICAgICAgICAgICBpZiAoc291
cmNlLmNoYXJDb2RlQXQoaW5kZXggKyAxKSA9PT0gMHgyRikgeworICAgICAgICAgICAgICAgICAg
ICArK2luZGV4OworICAgICAgICAgICAgICAgICAgICArK2luZGV4OworICAgICAgICAgICAgICAg
ICAgICBpZiAoZXh0cmEuY29tbWVudHMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1l
bnQgPSBzb3VyY2Uuc2xpY2Uoc3RhcnQgKyAyLCBpbmRleCAtIDIpOworICAgICAgICAgICAgICAg
ICAgICAgICAgbG9jLmVuZCA9IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lOiBs
aW5lTnVtYmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbjogaW5kZXggLSBs
aW5lU3RhcnQKKyAgICAgICAgICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgICAg
ICAgICBhZGRDb21tZW50KCdCbG9jaycsIGNvbW1lbnQsIHN0YXJ0LCBpbmRleCwgbG9jKTsKKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICsraW5kZXg7CisgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgICsraW5kZXg7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKwor
ICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW4sICdJTExFR0FM
Jyk7CisgICAgfQorCisgICAgZnVuY3Rpb24gc2tpcENvbW1lbnQoKSB7CisgICAgICAgIHZhciBj
aCwgc3RhcnQ7CisKKyAgICAgICAgc3RhcnQgPSAoaW5kZXggPT09IDApOworICAgICAgICB3aGls
ZSAoaW5kZXggPCBsZW5ndGgpIHsKKyAgICAgICAgICAgIGNoID0gc291cmNlLmNoYXJDb2RlQXQo
aW5kZXgpOworCisgICAgICAgICAgICBpZiAoaXNXaGl0ZVNwYWNlKGNoKSkgeworICAgICAgICAg
ICAgICAgICsraW5kZXg7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGlzTGluZVRlcm1pbmF0b3Io
Y2gpKSB7CisgICAgICAgICAgICAgICAgKytpbmRleDsKKyAgICAgICAgICAgICAgICBpZiAoY2gg
PT09IDB4MEQgJiYgc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpID09PSAweDBBKSB7CisgICAgICAg
ICAgICAgICAgICAgICsraW5kZXg7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICsrbGluZU51bWJlcjsKKyAgICAgICAgICAgICAgICBsaW5lU3RhcnQgPSBpbmRleDsKKyAgICAg
ICAgICAgICAgICBzdGFydCA9IHRydWU7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGNoID09PSAw
eDJGKSB7IC8vIFUrMDAyRiBpcyAnLycKKyAgICAgICAgICAgICAgICBjaCA9IHNvdXJjZS5jaGFy
Q29kZUF0KGluZGV4ICsgMSk7CisgICAgICAgICAgICAgICAgaWYgKGNoID09PSAweDJGKSB7Cisg
ICAgICAgICAgICAgICAgICAgICsraW5kZXg7CisgICAgICAgICAgICAgICAgICAgICsraW5kZXg7
CisgICAgICAgICAgICAgICAgICAgIHNraXBTaW5nbGVMaW5lQ29tbWVudCgyKTsKKyAgICAgICAg
ICAgICAgICAgICAgc3RhcnQgPSB0cnVlOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2gg
PT09IDB4MkEpIHsgIC8vIFUrMDAyQSBpcyAnKicKKyAgICAgICAgICAgICAgICAgICAgKytpbmRl
eDsKKyAgICAgICAgICAgICAgICAgICAgKytpbmRleDsKKyAgICAgICAgICAgICAgICAgICAgc2tp
cE11bHRpTGluZUNvbW1lbnQoKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2Ug
aWYgKHN0YXJ0ICYmIGNoID09PSAweDJEKSB7IC8vIFUrMDAyRCBpcyAnLScKKyAgICAgICAgICAg
ICAgICAvLyBVKzAwM0UgaXMgJz4nCisgICAgICAgICAgICAgICAgaWYgKChzb3VyY2UuY2hhckNv
ZGVBdChpbmRleCArIDEpID09PSAweDJEKSAmJiAoc291cmNlLmNoYXJDb2RlQXQoaW5kZXggKyAy
KSA9PT0gMHgzRSkpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gJy0tPicgaXMgYSBzaW5nbGUt
bGluZSBjb21tZW50CisgICAgICAgICAgICAgICAgICAgIGluZGV4ICs9IDM7CisgICAgICAgICAg
ICAgICAgICAgIHNraXBTaW5nbGVMaW5lQ29tbWVudCgzKTsKKyAgICAgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9IGVsc2UgaWYgKGNoID09PSAweDNDKSB7IC8vIFUrMDAzQyBpcyAnPCcKKyAgICAg
ICAgICAgICAgICBpZiAoc291cmNlLnNsaWNlKGluZGV4ICsgMSwgaW5kZXggKyA0KSA9PT0gJyEt
LScpIHsKKyAgICAgICAgICAgICAgICAgICAgKytpbmRleDsgLy8gYDxgCisgICAgICAgICAgICAg
ICAgICAgICsraW5kZXg7IC8vIGAhYAorICAgICAgICAgICAgICAgICAgICArK2luZGV4OyAvLyBg
LWAKKyAgICAgICAgICAgICAgICAgICAgKytpbmRleDsgLy8gYC1gCisgICAgICAgICAgICAgICAg
ICAgIHNraXBTaW5nbGVMaW5lQ29tbWVudCg0KTsKKyAgICAgICAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfQorCisgICAgZnVuY3Rpb24gc2NhbkhleEVzY2FwZShwcmVmaXgpIHsKKyAgICAg
ICAgdmFyIGksIGxlbiwgY2gsIGNvZGUgPSAwOworCisgICAgICAgIGxlbiA9IChwcmVmaXggPT09
ICd1JykgPyA0IDogMjsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgKytpKSB7CisgICAg
ICAgICAgICBpZiAoaW5kZXggPCBsZW5ndGggJiYgaXNIZXhEaWdpdChzb3VyY2VbaW5kZXhdKSkg
eworICAgICAgICAgICAgICAgIGNoID0gc291cmNlW2luZGV4KytdOworICAgICAgICAgICAgICAg
IGNvZGUgPSBjb2RlICogMTYgKyAnMDEyMzQ1Njc4OWFiY2RlZicuaW5kZXhPZihjaC50b0xvd2Vy
Q2FzZSgpKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcmV0dXJuICcn
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBTdHJpbmcuZnJvbUNo
YXJDb2RlKGNvZGUpOworICAgIH0KKworICAgIGZ1bmN0aW9uIGdldEVzY2FwZWRJZGVudGlmaWVy
KCkgeworICAgICAgICB2YXIgY2gsIGlkOworCisgICAgICAgIGNoID0gc291cmNlLmNoYXJDb2Rl
QXQoaW5kZXgrKyk7CisgICAgICAgIGlkID0gU3RyaW5nLmZyb21DaGFyQ29kZShjaCk7CisKKyAg
ICAgICAgLy8gJ1x1JyAoVSswMDVDLCBVKzAwNzUpIGRlbm90ZXMgYW4gZXNjYXBlZCBjaGFyYWN0
ZXIuCisgICAgICAgIGlmIChjaCA9PT0gMHg1QykgeworICAgICAgICAgICAgaWYgKHNvdXJjZS5j
aGFyQ29kZUF0KGluZGV4KSAhPT0gMHg3NSkgeworICAgICAgICAgICAgICAgIHRocm93RXJyb3Io
e30sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgJ0lMTEVHQUwnKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICsraW5kZXg7CisgICAgICAgICAgICBjaCA9IHNjYW5IZXhFc2NhcGUoJ3Un
KTsKKyAgICAgICAgICAgIGlmICghY2ggfHwgY2ggPT09ICdcXCcgfHwgIWlzSWRlbnRpZmllclN0
YXJ0KGNoLmNoYXJDb2RlQXQoMCkpKSB7CisgICAgICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwg
TWVzc2FnZXMuVW5leHBlY3RlZFRva2VuLCAnSUxMRUdBTCcpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgaWQgPSBjaDsKKyAgICAgICAgfQorCisgICAgICAgIHdoaWxlIChpbmRleCA8IGxl
bmd0aCkgeworICAgICAgICAgICAgY2ggPSBzb3VyY2UuY2hhckNvZGVBdChpbmRleCk7CisgICAg
ICAgICAgICBpZiAoIWlzSWRlbnRpZmllclBhcnQoY2gpKSB7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICArK2luZGV4OworICAgICAgICAgICAgaWQg
Kz0gU3RyaW5nLmZyb21DaGFyQ29kZShjaCk7CisKKyAgICAgICAgICAgIC8vICdcdScgKFUrMDA1
QywgVSswMDc1KSBkZW5vdGVzIGFuIGVzY2FwZWQgY2hhcmFjdGVyLgorICAgICAgICAgICAgaWYg
KGNoID09PSAweDVDKSB7CisgICAgICAgICAgICAgICAgaWQgPSBpZC5zdWJzdHIoMCwgaWQubGVu
Z3RoIC0gMSk7CisgICAgICAgICAgICAgICAgaWYgKHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KSAh
PT0gMHg3NSkgeworICAgICAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5V
bmV4cGVjdGVkVG9rZW4sICdJTExFR0FMJyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICsraW5kZXg7CisgICAgICAgICAgICAgICAgY2ggPSBzY2FuSGV4RXNjYXBlKCd1Jyk7
CisgICAgICAgICAgICAgICAgaWYgKCFjaCB8fCBjaCA9PT0gJ1xcJyB8fCAhaXNJZGVudGlmaWVy
UGFydChjaC5jaGFyQ29kZUF0KDApKSkgeworICAgICAgICAgICAgICAgICAgICB0aHJvd0Vycm9y
KHt9LCBNZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW4sICdJTExFR0FMJyk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIGlkICs9IGNoOworICAgICAgICAgICAgfQorICAgICAgICB9
CisKKyAgICAgICAgcmV0dXJuIGlkOworICAgIH0KKworICAgIGZ1bmN0aW9uIGdldElkZW50aWZp
ZXIoKSB7CisgICAgICAgIHZhciBzdGFydCwgY2g7CisKKyAgICAgICAgc3RhcnQgPSBpbmRleCsr
OworICAgICAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHsKKyAgICAgICAgICAgIGNoID0gc291
cmNlLmNoYXJDb2RlQXQoaW5kZXgpOworICAgICAgICAgICAgaWYgKGNoID09PSAweDVDKSB7Cisg
ICAgICAgICAgICAgICAgLy8gQmxhY2tzbGFzaCAoVSswMDVDKSBtYXJrcyBVbmljb2RlIGVzY2Fw
ZSBzZXF1ZW5jZS4KKyAgICAgICAgICAgICAgICBpbmRleCA9IHN0YXJ0OworICAgICAgICAgICAg
ICAgIHJldHVybiBnZXRFc2NhcGVkSWRlbnRpZmllcigpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgaWYgKGlzSWRlbnRpZmllclBhcnQoY2gpKSB7CisgICAgICAgICAgICAgICAgKytpbmRl
eDsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gc291cmNlLnNsaWNlKHN0YXJ0LCBp
bmRleCk7CisgICAgfQorCisgICAgZnVuY3Rpb24gc2NhbklkZW50aWZpZXIoKSB7CisgICAgICAg
IHZhciBzdGFydCwgaWQsIHR5cGU7CisKKyAgICAgICAgc3RhcnQgPSBpbmRleDsKKworICAgICAg
ICAvLyBCYWNrc2xhc2ggKFUrMDA1Qykgc3RhcnRzIGFuIGVzY2FwZWQgY2hhcmFjdGVyLgorICAg
ICAgICBpZCA9IChzb3VyY2UuY2hhckNvZGVBdChpbmRleCkgPT09IDB4NUMpID8gZ2V0RXNjYXBl
ZElkZW50aWZpZXIoKSA6IGdldElkZW50aWZpZXIoKTsKKworICAgICAgICAvLyBUaGVyZSBpcyBu
byBrZXl3b3JkIG9yIGxpdGVyYWwgd2l0aCBvbmx5IG9uZSBjaGFyYWN0ZXIuCisgICAgICAgIC8v
IFRodXMsIGl0IG11c3QgYmUgYW4gaWRlbnRpZmllci4KKyAgICAgICAgaWYgKGlkLmxlbmd0aCA9
PT0gMSkgeworICAgICAgICAgICAgdHlwZSA9IFRva2VuLklkZW50aWZpZXI7CisgICAgICAgIH0g
ZWxzZSBpZiAoaXNLZXl3b3JkKGlkKSkgeworICAgICAgICAgICAgdHlwZSA9IFRva2VuLktleXdv
cmQ7CisgICAgICAgIH0gZWxzZSBpZiAoaWQgPT09ICdudWxsJykgeworICAgICAgICAgICAgdHlw
ZSA9IFRva2VuLk51bGxMaXRlcmFsOworICAgICAgICB9IGVsc2UgaWYgKGlkID09PSAndHJ1ZScg
fHwgaWQgPT09ICdmYWxzZScpIHsKKyAgICAgICAgICAgIHR5cGUgPSBUb2tlbi5Cb29sZWFuTGl0
ZXJhbDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHR5cGUgPSBUb2tlbi5JZGVudGlm
aWVyOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgIHR5cGU6IHR5
cGUsCisgICAgICAgICAgICB2YWx1ZTogaWQsCisgICAgICAgICAgICBsaW5lTnVtYmVyOiBsaW5l
TnVtYmVyLAorICAgICAgICAgICAgbGluZVN0YXJ0OiBsaW5lU3RhcnQsCisgICAgICAgICAgICBz
dGFydDogc3RhcnQsCisgICAgICAgICAgICBlbmQ6IGluZGV4CisgICAgICAgIH07CisgICAgfQor
CisKKyAgICAvLyA3LjcgUHVuY3R1YXRvcnMKKworICAgIGZ1bmN0aW9uIHNjYW5QdW5jdHVhdG9y
KCkgeworICAgICAgICB2YXIgc3RhcnQgPSBpbmRleCwKKyAgICAgICAgICAgIGNvZGUgPSBzb3Vy
Y2UuY2hhckNvZGVBdChpbmRleCksCisgICAgICAgICAgICBjb2RlMiwKKyAgICAgICAgICAgIGNo
MSA9IHNvdXJjZVtpbmRleF0sCisgICAgICAgICAgICBjaDIsCisgICAgICAgICAgICBjaDMsCisg
ICAgICAgICAgICBjaDQ7CisKKyAgICAgICAgc3dpdGNoIChjb2RlKSB7CisKKyAgICAgICAgLy8g
Q2hlY2sgZm9yIG1vc3QgY29tbW9uIHNpbmdsZS1jaGFyYWN0ZXIgcHVuY3R1YXRvcnMuCisgICAg
ICAgIGNhc2UgMHgyRTogIC8vIC4gZG90CisgICAgICAgIGNhc2UgMHgyODogIC8vICggb3BlbiBi
cmFja2V0CisgICAgICAgIGNhc2UgMHgyOTogIC8vICkgY2xvc2UgYnJhY2tldAorICAgICAgICBj
YXNlIDB4M0I6ICAvLyA7IHNlbWljb2xvbgorICAgICAgICBjYXNlIDB4MkM6ICAvLyAsIGNvbW1h
CisgICAgICAgIGNhc2UgMHg3QjogIC8vIHsgb3BlbiBjdXJseSBicmFjZQorICAgICAgICBjYXNl
IDB4N0Q6ICAvLyB9IGNsb3NlIGN1cmx5IGJyYWNlCisgICAgICAgIGNhc2UgMHg1QjogIC8vIFsK
KyAgICAgICAgY2FzZSAweDVEOiAgLy8gXQorICAgICAgICBjYXNlIDB4M0E6ICAvLyA6CisgICAg
ICAgIGNhc2UgMHgzRjogIC8vID8KKyAgICAgICAgY2FzZSAweDdFOiAgLy8gfgorICAgICAgICAg
ICAgKytpbmRleDsKKyAgICAgICAgICAgIGlmIChleHRyYS50b2tlbml6ZSkgeworICAgICAgICAg
ICAgICAgIGlmIChjb2RlID09PSAweDI4KSB7CisgICAgICAgICAgICAgICAgICAgIGV4dHJhLm9w
ZW5QYXJlblRva2VuID0gZXh0cmEudG9rZW5zLmxlbmd0aDsKKyAgICAgICAgICAgICAgICB9IGVs
c2UgaWYgKGNvZGUgPT09IDB4N0IpIHsKKyAgICAgICAgICAgICAgICAgICAgZXh0cmEub3BlbkN1
cmx5VG9rZW4gPSBleHRyYS50b2tlbnMubGVuZ3RoOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgdHlwZTogVG9r
ZW4uUHVuY3R1YXRvciwKKyAgICAgICAgICAgICAgICB2YWx1ZTogU3RyaW5nLmZyb21DaGFyQ29k
ZShjb2RlKSwKKyAgICAgICAgICAgICAgICBsaW5lTnVtYmVyOiBsaW5lTnVtYmVyLAorICAgICAg
ICAgICAgICAgIGxpbmVTdGFydDogbGluZVN0YXJ0LAorICAgICAgICAgICAgICAgIHN0YXJ0OiBz
dGFydCwKKyAgICAgICAgICAgICAgICBlbmQ6IGluZGV4CisgICAgICAgICAgICB9OworCisgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBjb2RlMiA9IHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4
ICsgMSk7CisKKyAgICAgICAgICAgIC8vICc9JyAoVSswMDNEKSBtYXJrcyBhbiBhc3NpZ25tZW50
IG9yIGNvbXBhcmlzb24gb3BlcmF0b3IuCisgICAgICAgICAgICBpZiAoY29kZTIgPT09IDB4M0Qp
IHsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKGNvZGUpIHsKKyAgICAgICAgICAgICAgICBjYXNl
IDB4MkI6ICAvLyArCisgICAgICAgICAgICAgICAgY2FzZSAweDJEOiAgLy8gLQorICAgICAgICAg
ICAgICAgIGNhc2UgMHgyRjogIC8vIC8KKyAgICAgICAgICAgICAgICBjYXNlIDB4M0M6ICAvLyA8
CisgICAgICAgICAgICAgICAgY2FzZSAweDNFOiAgLy8gPgorICAgICAgICAgICAgICAgIGNhc2Ug
MHg1RTogIC8vIF4KKyAgICAgICAgICAgICAgICBjYXNlIDB4N0M6ICAvLyB8CisgICAgICAgICAg
ICAgICAgY2FzZSAweDI1OiAgLy8gJQorICAgICAgICAgICAgICAgIGNhc2UgMHgyNjogIC8vICYK
KyAgICAgICAgICAgICAgICBjYXNlIDB4MkE6ICAvLyAqCisgICAgICAgICAgICAgICAgICAgIGlu
ZGV4ICs9IDI7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAg
ICAgICAgICB0eXBlOiBUb2tlbi5QdW5jdHVhdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAg
dmFsdWU6IFN0cmluZy5mcm9tQ2hhckNvZGUoY29kZSkgKyBTdHJpbmcuZnJvbUNoYXJDb2RlKGNv
ZGUyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVOdW1iZXI6IGxpbmVOdW1iZXIsCisg
ICAgICAgICAgICAgICAgICAgICAgICBsaW5lU3RhcnQ6IGxpbmVTdGFydCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHN0YXJ0OiBzdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZDog
aW5kZXgKKyAgICAgICAgICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgICAgIGNhc2UgMHgy
MTogLy8gIQorICAgICAgICAgICAgICAgIGNhc2UgMHgzRDogLy8gPQorICAgICAgICAgICAgICAg
ICAgICBpbmRleCArPSAyOworCisgICAgICAgICAgICAgICAgICAgIC8vICE9PSBhbmQgPT09Cisg
ICAgICAgICAgICAgICAgICAgIGlmIChzb3VyY2UuY2hhckNvZGVBdChpbmRleCkgPT09IDB4M0Qp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICsraW5kZXg7CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHR5cGU6IFRva2VuLlB1bmN0dWF0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTog
c291cmNlLnNsaWNlKHN0YXJ0LCBpbmRleCksCisgICAgICAgICAgICAgICAgICAgICAgICBsaW5l
TnVtYmVyOiBsaW5lTnVtYmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgbGluZVN0YXJ0OiBs
aW5lU3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICBzdGFydDogc3RhcnQsCisgICAgICAg
ICAgICAgICAgICAgICAgICBlbmQ6IGluZGV4CisgICAgICAgICAgICAgICAgICAgIH07CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gNC1j
aGFyYWN0ZXIgcHVuY3R1YXRvcjogPj4+PQorCisgICAgICAgIGNoNCA9IHNvdXJjZS5zdWJzdHIo
aW5kZXgsIDQpOworCisgICAgICAgIGlmIChjaDQgPT09ICc+Pj49JykgeworICAgICAgICAgICAg
aW5kZXggKz0gNDsKKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgdHlwZTog
VG9rZW4uUHVuY3R1YXRvciwKKyAgICAgICAgICAgICAgICB2YWx1ZTogY2g0LAorICAgICAgICAg
ICAgICAgIGxpbmVOdW1iZXI6IGxpbmVOdW1iZXIsCisgICAgICAgICAgICAgICAgbGluZVN0YXJ0
OiBsaW5lU3RhcnQsCisgICAgICAgICAgICAgICAgc3RhcnQ6IHN0YXJ0LAorICAgICAgICAgICAg
ICAgIGVuZDogaW5kZXgKKyAgICAgICAgICAgIH07CisgICAgICAgIH0KKworICAgICAgICAvLyAz
LWNoYXJhY3RlciBwdW5jdHVhdG9yczogPT09ICE9PSA+Pj4gPDw9ID4+PQorCisgICAgICAgIGNo
MyA9IGNoNC5zdWJzdHIoMCwgMyk7CisKKyAgICAgICAgaWYgKGNoMyA9PT0gJz4+PicgfHwgY2gz
ID09PSAnPDw9JyB8fCBjaDMgPT09ICc+Pj0nKSB7CisgICAgICAgICAgICBpbmRleCArPSAzOwor
ICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICB0eXBlOiBUb2tlbi5QdW5jdHVh
dG9yLAorICAgICAgICAgICAgICAgIHZhbHVlOiBjaDMsCisgICAgICAgICAgICAgICAgbGluZU51
bWJlcjogbGluZU51bWJlciwKKyAgICAgICAgICAgICAgICBsaW5lU3RhcnQ6IGxpbmVTdGFydCwK
KyAgICAgICAgICAgICAgICBzdGFydDogc3RhcnQsCisgICAgICAgICAgICAgICAgZW5kOiBpbmRl
eAorICAgICAgICAgICAgfTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIE90aGVyIDItY2hhcmFj
dGVyIHB1bmN0dWF0b3JzOiArKyAtLSA8PCA+PiAmJiB8fAorICAgICAgICBjaDIgPSBjaDMuc3Vi
c3RyKDAsIDIpOworCisgICAgICAgIGlmICgoY2gxID09PSBjaDJbMV0gJiYgKCcrLTw+JnwnLmlu
ZGV4T2YoY2gxKSA+PSAwKSkgfHwgY2gyID09PSAnPT4nKSB7CisgICAgICAgICAgICBpbmRleCAr
PSAyOworICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICB0eXBlOiBUb2tlbi5Q
dW5jdHVhdG9yLAorICAgICAgICAgICAgICAgIHZhbHVlOiBjaDIsCisgICAgICAgICAgICAgICAg
bGluZU51bWJlcjogbGluZU51bWJlciwKKyAgICAgICAgICAgICAgICBsaW5lU3RhcnQ6IGxpbmVT
dGFydCwKKyAgICAgICAgICAgICAgICBzdGFydDogc3RhcnQsCisgICAgICAgICAgICAgICAgZW5k
OiBpbmRleAorICAgICAgICAgICAgfTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIDEtY2hhcmFj
dGVyIHB1bmN0dWF0b3JzOiA8ID4gPSAhICsgLSAqICUgJiB8IF4gLworICAgICAgICBpZiAoJzw+
PSErLSolJnxeLycuaW5kZXhPZihjaDEpID49IDApIHsKKyAgICAgICAgICAgICsraW5kZXg7Cisg
ICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIHR5cGU6IFRva2VuLlB1bmN0dWF0
b3IsCisgICAgICAgICAgICAgICAgdmFsdWU6IGNoMSwKKyAgICAgICAgICAgICAgICBsaW5lTnVt
YmVyOiBsaW5lTnVtYmVyLAorICAgICAgICAgICAgICAgIGxpbmVTdGFydDogbGluZVN0YXJ0LAor
ICAgICAgICAgICAgICAgIHN0YXJ0OiBzdGFydCwKKyAgICAgICAgICAgICAgICBlbmQ6IGluZGV4
CisgICAgICAgICAgICB9OworICAgICAgICB9CisKKyAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVz
c2FnZXMuVW5leHBlY3RlZFRva2VuLCAnSUxMRUdBTCcpOworICAgIH0KKworICAgIC8vIDcuOC4z
IE51bWVyaWMgTGl0ZXJhbHMKKworICAgIGZ1bmN0aW9uIHNjYW5IZXhMaXRlcmFsKHN0YXJ0KSB7
CisgICAgICAgIHZhciBudW1iZXIgPSAnJzsKKworICAgICAgICB3aGlsZSAoaW5kZXggPCBsZW5n
dGgpIHsKKyAgICAgICAgICAgIGlmICghaXNIZXhEaWdpdChzb3VyY2VbaW5kZXhdKSkgeworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbnVtYmVyICs9
IHNvdXJjZVtpbmRleCsrXTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChudW1iZXIubGVuZ3Ro
ID09PSAwKSB7CisgICAgICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5VbmV4cGVjdGVk
VG9rZW4sICdJTExFR0FMJyk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNJZGVudGlmaWVy
U3RhcnQoc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpKSkgeworICAgICAgICAgICAgdGhyb3dFcnJv
cih7fSwgTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuLCAnSUxMRUdBTCcpOworICAgICAgICB9CisK
KyAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgIHR5cGU6IFRva2VuLk51bWVyaWNMaXRlcmFs
LAorICAgICAgICAgICAgdmFsdWU6IHBhcnNlSW50KCcweCcgKyBudW1iZXIsIDE2KSwKKyAgICAg
ICAgICAgIGxpbmVOdW1iZXI6IGxpbmVOdW1iZXIsCisgICAgICAgICAgICBsaW5lU3RhcnQ6IGxp
bmVTdGFydCwKKyAgICAgICAgICAgIHN0YXJ0OiBzdGFydCwKKyAgICAgICAgICAgIGVuZDogaW5k
ZXgKKyAgICAgICAgfTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBzY2FuT2N0YWxMaXRlcmFsKHN0
YXJ0KSB7CisgICAgICAgIHZhciBudW1iZXIgPSAnMCcgKyBzb3VyY2VbaW5kZXgrK107CisgICAg
ICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkgeworICAgICAgICAgICAgaWYgKCFpc09jdGFsRGln
aXQoc291cmNlW2luZGV4XSkpIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIG51bWJlciArPSBzb3VyY2VbaW5kZXgrK107CisgICAgICAgIH0KKwor
ICAgICAgICBpZiAoaXNJZGVudGlmaWVyU3RhcnQoc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpKSB8
fCBpc0RlY2ltYWxEaWdpdChzb3VyY2UuY2hhckNvZGVBdChpbmRleCkpKSB7CisgICAgICAgICAg
ICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW4sICdJTExFR0FMJyk7Cisg
ICAgICAgIH0KKworICAgICAgICByZXR1cm4geworICAgICAgICAgICAgdHlwZTogVG9rZW4uTnVt
ZXJpY0xpdGVyYWwsCisgICAgICAgICAgICB2YWx1ZTogcGFyc2VJbnQobnVtYmVyLCA4KSwKKyAg
ICAgICAgICAgIG9jdGFsOiB0cnVlLAorICAgICAgICAgICAgbGluZU51bWJlcjogbGluZU51bWJl
ciwKKyAgICAgICAgICAgIGxpbmVTdGFydDogbGluZVN0YXJ0LAorICAgICAgICAgICAgc3RhcnQ6
IHN0YXJ0LAorICAgICAgICAgICAgZW5kOiBpbmRleAorICAgICAgICB9OworICAgIH0KKworICAg
IGZ1bmN0aW9uIHNjYW5OdW1lcmljTGl0ZXJhbCgpIHsKKyAgICAgICAgdmFyIG51bWJlciwgc3Rh
cnQsIGNoOworCisgICAgICAgIGNoID0gc291cmNlW2luZGV4XTsKKyAgICAgICAgYXNzZXJ0KGlz
RGVjaW1hbERpZ2l0KGNoLmNoYXJDb2RlQXQoMCkpIHx8IChjaCA9PT0gJy4nKSwKKyAgICAgICAg
ICAgICdOdW1lcmljIGxpdGVyYWwgbXVzdCBzdGFydCB3aXRoIGEgZGVjaW1hbCBkaWdpdCBvciBh
IGRlY2ltYWwgcG9pbnQnKTsKKworICAgICAgICBzdGFydCA9IGluZGV4OworICAgICAgICBudW1i
ZXIgPSAnJzsKKyAgICAgICAgaWYgKGNoICE9PSAnLicpIHsKKyAgICAgICAgICAgIG51bWJlciA9
IHNvdXJjZVtpbmRleCsrXTsKKyAgICAgICAgICAgIGNoID0gc291cmNlW2luZGV4XTsKKworICAg
ICAgICAgICAgLy8gSGV4IG51bWJlciBzdGFydHMgd2l0aCAnMHgnLgorICAgICAgICAgICAgLy8g
T2N0YWwgbnVtYmVyIHN0YXJ0cyB3aXRoICcwJy4KKyAgICAgICAgICAgIGlmIChudW1iZXIgPT09
ICcwJykgeworICAgICAgICAgICAgICAgIGlmIChjaCA9PT0gJ3gnIHx8IGNoID09PSAnWCcpIHsK
KyAgICAgICAgICAgICAgICAgICAgKytpbmRleDsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHNjYW5IZXhMaXRlcmFsKHN0YXJ0KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgaWYgKGlzT2N0YWxEaWdpdChjaCkpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNj
YW5PY3RhbExpdGVyYWwoc3RhcnQpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
ICAgIC8vIGRlY2ltYWwgbnVtYmVyIHN0YXJ0cyB3aXRoICcwJyBzdWNoIGFzICcwOScgaXMgaWxs
ZWdhbC4KKyAgICAgICAgICAgICAgICBpZiAoY2ggJiYgaXNEZWNpbWFsRGlnaXQoY2guY2hhckNv
ZGVBdCgwKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMu
VW5leHBlY3RlZFRva2VuLCAnSUxMRUdBTCcpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgd2hpbGUgKGlzRGVjaW1hbERpZ2l0KHNvdXJjZS5jaGFyQ29k
ZUF0KGluZGV4KSkpIHsKKyAgICAgICAgICAgICAgICBudW1iZXIgKz0gc291cmNlW2luZGV4Kytd
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2ggPSBzb3VyY2VbaW5kZXhdOworICAgICAg
ICB9CisKKyAgICAgICAgaWYgKGNoID09PSAnLicpIHsKKyAgICAgICAgICAgIG51bWJlciArPSBz
b3VyY2VbaW5kZXgrK107CisgICAgICAgICAgICB3aGlsZSAoaXNEZWNpbWFsRGlnaXQoc291cmNl
LmNoYXJDb2RlQXQoaW5kZXgpKSkgeworICAgICAgICAgICAgICAgIG51bWJlciArPSBzb3VyY2Vb
aW5kZXgrK107CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjaCA9IHNvdXJjZVtpbmRleF07
CisgICAgICAgIH0KKworICAgICAgICBpZiAoY2ggPT09ICdlJyB8fCBjaCA9PT0gJ0UnKSB7Cisg
ICAgICAgICAgICBudW1iZXIgKz0gc291cmNlW2luZGV4KytdOworCisgICAgICAgICAgICBjaCA9
IHNvdXJjZVtpbmRleF07CisgICAgICAgICAgICBpZiAoY2ggPT09ICcrJyB8fCBjaCA9PT0gJy0n
KSB7CisgICAgICAgICAgICAgICAgbnVtYmVyICs9IHNvdXJjZVtpbmRleCsrXTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGlmIChpc0RlY2ltYWxEaWdpdChzb3VyY2UuY2hhckNvZGVBdChp
bmRleCkpKSB7CisgICAgICAgICAgICAgICAgd2hpbGUgKGlzRGVjaW1hbERpZ2l0KHNvdXJjZS5j
aGFyQ29kZUF0KGluZGV4KSkpIHsKKyAgICAgICAgICAgICAgICAgICAgbnVtYmVyICs9IHNvdXJj
ZVtpbmRleCsrXTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgJ0lM
TEVHQUwnKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChpc0lkZW50
aWZpZXJTdGFydChzb3VyY2UuY2hhckNvZGVBdChpbmRleCkpKSB7CisgICAgICAgICAgICB0aHJv
d0Vycm9yKHt9LCBNZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW4sICdJTExFR0FMJyk7CisgICAgICAg
IH0KKworICAgICAgICByZXR1cm4geworICAgICAgICAgICAgdHlwZTogVG9rZW4uTnVtZXJpY0xp
dGVyYWwsCisgICAgICAgICAgICB2YWx1ZTogcGFyc2VGbG9hdChudW1iZXIpLAorICAgICAgICAg
ICAgbGluZU51bWJlcjogbGluZU51bWJlciwKKyAgICAgICAgICAgIGxpbmVTdGFydDogbGluZVN0
YXJ0LAorICAgICAgICAgICAgc3RhcnQ6IHN0YXJ0LAorICAgICAgICAgICAgZW5kOiBpbmRleAor
ICAgICAgICB9OworICAgIH0KKworICAgIC8vIDcuOC40IFN0cmluZyBMaXRlcmFscworCisgICAg
ZnVuY3Rpb24gc2NhblN0cmluZ0xpdGVyYWwoKSB7CisgICAgICAgIHZhciBzdHIgPSAnJywgcXVv
dGUsIHN0YXJ0LCBjaCwgY29kZSwgdW5lc2NhcGVkLCByZXN0b3JlLCBvY3RhbCA9IGZhbHNlLCBz
dGFydExpbmVOdW1iZXIsIHN0YXJ0TGluZVN0YXJ0OworICAgICAgICBzdGFydExpbmVOdW1iZXIg
PSBsaW5lTnVtYmVyOworICAgICAgICBzdGFydExpbmVTdGFydCA9IGxpbmVTdGFydDsKKworICAg
ICAgICBxdW90ZSA9IHNvdXJjZVtpbmRleF07CisgICAgICAgIGFzc2VydCgocXVvdGUgPT09ICdc
JycgfHwgcXVvdGUgPT09ICciJyksCisgICAgICAgICAgICAnU3RyaW5nIGxpdGVyYWwgbXVzdCBz
dGFydHMgd2l0aCBhIHF1b3RlJyk7CisKKyAgICAgICAgc3RhcnQgPSBpbmRleDsKKyAgICAgICAg
KytpbmRleDsKKworICAgICAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHsKKyAgICAgICAgICAg
IGNoID0gc291cmNlW2luZGV4KytdOworCisgICAgICAgICAgICBpZiAoY2ggPT09IHF1b3RlKSB7
CisgICAgICAgICAgICAgICAgcXVvdGUgPSAnJzsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIH0gZWxzZSBpZiAoY2ggPT09ICdcXCcpIHsKKyAgICAgICAgICAgICAgICBjaCA9
IHNvdXJjZVtpbmRleCsrXTsKKyAgICAgICAgICAgICAgICBpZiAoIWNoIHx8ICFpc0xpbmVUZXJt
aW5hdG9yKGNoLmNoYXJDb2RlQXQoMCkpKSB7CisgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAo
Y2gpIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAndSc6CisgICAgICAgICAgICAgICAgICAg
IGNhc2UgJ3gnOgorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdG9yZSA9IGluZGV4OworICAg
ICAgICAgICAgICAgICAgICAgICAgdW5lc2NhcGVkID0gc2NhbkhleEVzY2FwZShjaCk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAodW5lc2NhcGVkKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc3RyICs9IHVuZXNjYXBlZDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXggPSByZXN0b3JlOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHN0ciArPSBjaDsKKyAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBj
YXNlICduJzoKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0ciArPSAnXG4nOworICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3InOgorICAg
ICAgICAgICAgICAgICAgICAgICAgc3RyICs9ICdccic7CisgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAndCc6CisgICAgICAgICAgICAgICAg
ICAgICAgICBzdHIgKz0gJ1x0JzsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgICAgICBjYXNlICdiJzoKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0ciAr
PSAnXGInOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
ICAgIGNhc2UgJ2YnOgorICAgICAgICAgICAgICAgICAgICAgICAgc3RyICs9ICdcZic7CisgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAndic6
CisgICAgICAgICAgICAgICAgICAgICAgICBzdHIgKz0gJ1x4MEInOworICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChpc09jdGFsRGlnaXQoY2gpKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29kZSA9ICcwMTIzNDU2NycuaW5kZXhPZihjaCk7CisKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBcMCBpcyBub3Qgb2N0YWwgZXNjYXBlIHNlcXVlbmNlCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvZGUgIT09IDApIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgb2N0YWwgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA8IGxlbmd0aCAm
JiBpc09jdGFsRGlnaXQoc291cmNlW2luZGV4XSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgb2N0YWwgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b2RlID0gY29kZSAqIDggKyAnMDEyMzQ1NjcnLmluZGV4T2Yoc291cmNlW2luZGV4KytdKTsKKwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAzIGRpZ2l0cyBhcmUgb25seSBhbGxv
d2VkIHdoZW4gc3RyaW5nIHN0YXJ0cworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
LyB3aXRoIDAsIDEsIDIsIDMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCcw
MTIzJy5pbmRleE9mKGNoKSA+PSAwICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW5kZXggPCBsZW5ndGggJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpc09jdGFsRGlnaXQoc291cmNlW2luZGV4XSkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvZGUgPSBjb2RlICogOCArICcwMTIzNDU2NycuaW5kZXhP
Zihzb3VyY2VbaW5kZXgrK10pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN0ciArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGUpOworICAgICAgICAgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIgKz0gY2g7CisgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgICAgICsrbGluZU51bWJlcjsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNoID09PSAg
J1xyJyAmJiBzb3VyY2VbaW5kZXhdID09PSAnXG4nKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICArK2luZGV4OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGxp
bmVTdGFydCA9IGluZGV4OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSBp
ZiAoaXNMaW5lVGVybWluYXRvcihjaC5jaGFyQ29kZUF0KDApKSkgeworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzdHIgKz0gY2g7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAocXVvdGUgIT09ICcnKSB7
CisgICAgICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW4sICdJ
TExFR0FMJyk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4geworICAgICAgICAgICAgdHlw
ZTogVG9rZW4uU3RyaW5nTGl0ZXJhbCwKKyAgICAgICAgICAgIHZhbHVlOiBzdHIsCisgICAgICAg
ICAgICBvY3RhbDogb2N0YWwsCisgICAgICAgICAgICBzdGFydExpbmVOdW1iZXI6IHN0YXJ0TGlu
ZU51bWJlciwKKyAgICAgICAgICAgIHN0YXJ0TGluZVN0YXJ0OiBzdGFydExpbmVTdGFydCwKKyAg
ICAgICAgICAgIGxpbmVOdW1iZXI6IGxpbmVOdW1iZXIsCisgICAgICAgICAgICBsaW5lU3RhcnQ6
IGxpbmVTdGFydCwKKyAgICAgICAgICAgIHN0YXJ0OiBzdGFydCwKKyAgICAgICAgICAgIGVuZDog
aW5kZXgKKyAgICAgICAgfTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiB0ZXN0UmVnRXhwKHBhdHRl
cm4sIGZsYWdzKSB7CisgICAgICAgIHZhciB2YWx1ZTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAg
ICAgIHZhbHVlID0gbmV3IFJlZ0V4cChwYXR0ZXJuLCBmbGFncyk7CisgICAgICAgIH0gY2F0Y2gg
KGUpIHsKKyAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLkludmFsaWRSZWdFeHAp
OworICAgICAgICB9CisgICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICB9CisKKyAgICBmdW5jdGlv
biBzY2FuUmVnRXhwQm9keSgpIHsKKyAgICAgICAgdmFyIGNoLCBzdHIsIGNsYXNzTWFya2VyLCB0
ZXJtaW5hdGVkLCBib2R5OworCisgICAgICAgIGNoID0gc291cmNlW2luZGV4XTsKKyAgICAgICAg
YXNzZXJ0KGNoID09PSAnLycsICdSZWd1bGFyIGV4cHJlc3Npb24gbGl0ZXJhbCBtdXN0IHN0YXJ0
IHdpdGggYSBzbGFzaCcpOworICAgICAgICBzdHIgPSBzb3VyY2VbaW5kZXgrK107CisKKyAgICAg
ICAgY2xhc3NNYXJrZXIgPSBmYWxzZTsKKyAgICAgICAgdGVybWluYXRlZCA9IGZhbHNlOworICAg
ICAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHsKKyAgICAgICAgICAgIGNoID0gc291cmNlW2lu
ZGV4KytdOworICAgICAgICAgICAgc3RyICs9IGNoOworICAgICAgICAgICAgaWYgKGNoID09PSAn
XFwnKSB7CisgICAgICAgICAgICAgICAgY2ggPSBzb3VyY2VbaW5kZXgrK107CisgICAgICAgICAg
ICAgICAgLy8gRUNNQS0yNjIgNy44LjUKKyAgICAgICAgICAgICAgICBpZiAoaXNMaW5lVGVybWlu
YXRvcihjaC5jaGFyQ29kZUF0KDApKSkgeworICAgICAgICAgICAgICAgICAgICB0aHJvd0Vycm9y
KHt9LCBNZXNzYWdlcy5VbnRlcm1pbmF0ZWRSZWdFeHApOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBzdHIgKz0gY2g7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGlzTGluZVRl
cm1pbmF0b3IoY2guY2hhckNvZGVBdCgwKSkpIHsKKyAgICAgICAgICAgICAgICB0aHJvd0Vycm9y
KHt9LCBNZXNzYWdlcy5VbnRlcm1pbmF0ZWRSZWdFeHApOworICAgICAgICAgICAgfSBlbHNlIGlm
IChjbGFzc01hcmtlcikgeworICAgICAgICAgICAgICAgIGlmIChjaCA9PT0gJ10nKSB7CisgICAg
ICAgICAgICAgICAgICAgIGNsYXNzTWFya2VyID0gZmFsc2U7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAoY2ggPT09ICcvJykgewor
ICAgICAgICAgICAgICAgICAgICB0ZXJtaW5hdGVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaCA9PT0gJ1snKSB7CisgICAg
ICAgICAgICAgICAgICAgIGNsYXNzTWFya2VyID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoIXRlcm1pbmF0ZWQpIHsKKyAg
ICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLlVudGVybWluYXRlZFJlZ0V4cCk7Cisg
ICAgICAgIH0KKworICAgICAgICAvLyBFeGNsdWRlIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHNsYXNo
LgorICAgICAgICBib2R5ID0gc3RyLnN1YnN0cigxLCBzdHIubGVuZ3RoIC0gMik7CisgICAgICAg
IHJldHVybiB7CisgICAgICAgICAgICB2YWx1ZTogYm9keSwKKyAgICAgICAgICAgIGxpdGVyYWw6
IHN0cgorICAgICAgICB9OworICAgIH0KKworICAgIGZ1bmN0aW9uIHNjYW5SZWdFeHBGbGFncygp
IHsKKyAgICAgICAgdmFyIGNoLCBzdHIsIGZsYWdzLCByZXN0b3JlOworCisgICAgICAgIHN0ciA9
ICcnOworICAgICAgICBmbGFncyA9ICcnOworICAgICAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgp
IHsKKyAgICAgICAgICAgIGNoID0gc291cmNlW2luZGV4XTsKKyAgICAgICAgICAgIGlmICghaXNJ
ZGVudGlmaWVyUGFydChjaC5jaGFyQ29kZUF0KDApKSkgeworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICArK2luZGV4OworICAgICAgICAgICAgaWYg
KGNoID09PSAnXFwnICYmIGluZGV4IDwgbGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgY2ggPSBz
b3VyY2VbaW5kZXhdOworICAgICAgICAgICAgICAgIGlmIChjaCA9PT0gJ3UnKSB7CisgICAgICAg
ICAgICAgICAgICAgICsraW5kZXg7CisgICAgICAgICAgICAgICAgICAgIHJlc3RvcmUgPSBpbmRl
eDsKKyAgICAgICAgICAgICAgICAgICAgY2ggPSBzY2FuSGV4RXNjYXBlKCd1Jyk7CisgICAgICAg
ICAgICAgICAgICAgIGlmIChjaCkgeworICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MgKz0g
Y2g7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHN0ciArPSAnXFx1JzsgcmVzdG9yZSA8
IGluZGV4OyArK3Jlc3RvcmUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIgKz0g
c291cmNlW3Jlc3RvcmVdOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXggPSByZXN0b3Jl
OworICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MgKz0gJ3UnOworICAgICAgICAgICAgICAg
ICAgICAgICAgc3RyICs9ICdcXHUnOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudCh7fSwgTWVzc2FnZXMuVW5leHBlY3RlZFRva2Vu
LCAnSUxMRUdBTCcpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg
ICAgIHN0ciArPSAnXFwnOworICAgICAgICAgICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQo
e30sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgJ0lMTEVHQUwnKTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGZsYWdzICs9IGNoOwor
ICAgICAgICAgICAgICAgIHN0ciArPSBjaDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisg
ICAgICAgIHJldHVybiB7CisgICAgICAgICAgICB2YWx1ZTogZmxhZ3MsCisgICAgICAgICAgICBs
aXRlcmFsOiBzdHIKKyAgICAgICAgfTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBzY2FuUmVnRXhw
KCkgeworICAgICAgICB2YXIgc3RhcnQsIGJvZHksIGZsYWdzLCBwYXR0ZXJuLCB2YWx1ZTsKKwor
ICAgICAgICBsb29rYWhlYWQgPSBudWxsOworICAgICAgICBza2lwQ29tbWVudCgpOworICAgICAg
ICBzdGFydCA9IGluZGV4OworCisgICAgICAgIGJvZHkgPSBzY2FuUmVnRXhwQm9keSgpOworICAg
ICAgICBmbGFncyA9IHNjYW5SZWdFeHBGbGFncygpOworICAgICAgICB2YWx1ZSA9IHRlc3RSZWdF
eHAoYm9keS52YWx1ZSwgZmxhZ3MudmFsdWUpOworCisgICAgICAgIGlmIChleHRyYS50b2tlbml6
ZSkgeworICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICB0eXBlOiBUb2tlbi5S
ZWd1bGFyRXhwcmVzc2lvbiwKKyAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUsCisgICAgICAg
ICAgICAgICAgbGluZU51bWJlcjogbGluZU51bWJlciwKKyAgICAgICAgICAgICAgICBsaW5lU3Rh
cnQ6IGxpbmVTdGFydCwKKyAgICAgICAgICAgICAgICBzdGFydDogc3RhcnQsCisgICAgICAgICAg
ICAgICAgZW5kOiBpbmRleAorICAgICAgICAgICAgfTsKKyAgICAgICAgfQorCisgICAgICAgIHJl
dHVybiB7CisgICAgICAgICAgICBsaXRlcmFsOiBib2R5LmxpdGVyYWwgKyBmbGFncy5saXRlcmFs
LAorICAgICAgICAgICAgdmFsdWU6IHZhbHVlLAorICAgICAgICAgICAgc3RhcnQ6IHN0YXJ0LAor
ICAgICAgICAgICAgZW5kOiBpbmRleAorICAgICAgICB9OworICAgIH0KKworICAgIGZ1bmN0aW9u
IGNvbGxlY3RSZWdleCgpIHsKKyAgICAgICAgdmFyIHBvcywgbG9jLCByZWdleCwgdG9rZW47CisK
KyAgICAgICAgc2tpcENvbW1lbnQoKTsKKworICAgICAgICBwb3MgPSBpbmRleDsKKyAgICAgICAg
bG9jID0geworICAgICAgICAgICAgc3RhcnQ6IHsKKyAgICAgICAgICAgICAgICBsaW5lOiBsaW5l
TnVtYmVyLAorICAgICAgICAgICAgICAgIGNvbHVtbjogaW5kZXggLSBsaW5lU3RhcnQKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfTsKKworICAgICAgICByZWdleCA9IHNjYW5SZWdFeHAoKTsKKyAg
ICAgICAgbG9jLmVuZCA9IHsKKyAgICAgICAgICAgIGxpbmU6IGxpbmVOdW1iZXIsCisgICAgICAg
ICAgICBjb2x1bW46IGluZGV4IC0gbGluZVN0YXJ0CisgICAgICAgIH07CisKKyAgICAgICAgLyog
aXN0YW5idWwgaWdub3JlIG5leHQgKi8KKyAgICAgICAgaWYgKCFleHRyYS50b2tlbml6ZSkgewor
ICAgICAgICAgICAgLy8gUG9wIHRoZSBwcmV2aW91cyB0b2tlbiwgd2hpY2ggaXMgbGlrZWx5ICcv
JyBvciAnLz0nCisgICAgICAgICAgICBpZiAoZXh0cmEudG9rZW5zLmxlbmd0aCA+IDApIHsKKyAg
ICAgICAgICAgICAgICB0b2tlbiA9IGV4dHJhLnRva2Vuc1tleHRyYS50b2tlbnMubGVuZ3RoIC0g
MV07CisgICAgICAgICAgICAgICAgaWYgKHRva2VuLnJhbmdlWzBdID09PSBwb3MgJiYgdG9rZW4u
dHlwZSA9PT0gJ1B1bmN0dWF0b3InKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICh0b2tlbi52
YWx1ZSA9PT0gJy8nIHx8IHRva2VuLnZhbHVlID09PSAnLz0nKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBleHRyYS50b2tlbnMucG9wKCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGV4dHJhLnRva2Vucy5w
dXNoKHsKKyAgICAgICAgICAgICAgICB0eXBlOiAnUmVndWxhckV4cHJlc3Npb24nLAorICAgICAg
ICAgICAgICAgIHZhbHVlOiByZWdleC5saXRlcmFsLAorICAgICAgICAgICAgICAgIHJhbmdlOiBb
cG9zLCBpbmRleF0sCisgICAgICAgICAgICAgICAgbG9jOiBsb2MKKyAgICAgICAgICAgIH0pOwor
ICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHJlZ2V4OworICAgIH0KKworICAgIGZ1bmN0aW9u
IGlzSWRlbnRpZmllck5hbWUodG9rZW4pIHsKKyAgICAgICAgcmV0dXJuIHRva2VuLnR5cGUgPT09
IFRva2VuLklkZW50aWZpZXIgfHwKKyAgICAgICAgICAgIHRva2VuLnR5cGUgPT09IFRva2VuLktl
eXdvcmQgfHwKKyAgICAgICAgICAgIHRva2VuLnR5cGUgPT09IFRva2VuLkJvb2xlYW5MaXRlcmFs
IHx8CisgICAgICAgICAgICB0b2tlbi50eXBlID09PSBUb2tlbi5OdWxsTGl0ZXJhbDsKKyAgICB9
CisKKyAgICBmdW5jdGlvbiBhZHZhbmNlU2xhc2goKSB7CisgICAgICAgIHZhciBwcmV2VG9rZW4s
CisgICAgICAgICAgICBjaGVja1Rva2VuOworICAgICAgICAvLyBVc2luZyB0aGUgZm9sbG93aW5n
IGFsZ29yaXRobToKKyAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL21vemlsbGEvc3dlZXQu
anMvd2lraS9kZXNpZ24KKyAgICAgICAgcHJldlRva2VuID0gZXh0cmEudG9rZW5zW2V4dHJhLnRv
a2Vucy5sZW5ndGggLSAxXTsKKyAgICAgICAgaWYgKCFwcmV2VG9rZW4pIHsKKyAgICAgICAgICAg
IC8vIE5vdGhpbmcgYmVmb3JlIHRoYXQ6IGl0IGNhbm5vdCBiZSBhIGRpdmlzaW9uLgorICAgICAg
ICAgICAgcmV0dXJuIGNvbGxlY3RSZWdleCgpOworICAgICAgICB9CisgICAgICAgIGlmIChwcmV2
VG9rZW4udHlwZSA9PT0gJ1B1bmN0dWF0b3InKSB7CisgICAgICAgICAgICBpZiAocHJldlRva2Vu
LnZhbHVlID09PSAnXScpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gc2NhblB1bmN0dWF0b3Io
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChwcmV2VG9rZW4udmFsdWUgPT09ICcp
JykgeworICAgICAgICAgICAgICAgIGNoZWNrVG9rZW4gPSBleHRyYS50b2tlbnNbZXh0cmEub3Bl
blBhcmVuVG9rZW4gLSAxXTsKKyAgICAgICAgICAgICAgICBpZiAoY2hlY2tUb2tlbiAmJgorICAg
ICAgICAgICAgICAgICAgICAgICAgY2hlY2tUb2tlbi50eXBlID09PSAnS2V5d29yZCcgJiYKKyAg
ICAgICAgICAgICAgICAgICAgICAgIChjaGVja1Rva2VuLnZhbHVlID09PSAnaWYnIHx8CisgICAg
ICAgICAgICAgICAgICAgICAgICAgY2hlY2tUb2tlbi52YWx1ZSA9PT0gJ3doaWxlJyB8fAorICAg
ICAgICAgICAgICAgICAgICAgICAgIGNoZWNrVG9rZW4udmFsdWUgPT09ICdmb3InIHx8CisgICAg
ICAgICAgICAgICAgICAgICAgICAgY2hlY2tUb2tlbi52YWx1ZSA9PT0gJ3dpdGgnKSkgeworICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gY29sbGVjdFJlZ2V4KCk7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIHJldHVybiBzY2FuUHVuY3R1YXRvcigpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgaWYgKHByZXZUb2tlbi52YWx1ZSA9PT0gJ30nKSB7CisgICAgICAgICAg
ICAgICAgLy8gRGl2aWRpbmcgYSBmdW5jdGlvbiBieSBhbnl0aGluZyBtYWtlcyBsaXR0bGUgc2Vu
c2UsCisgICAgICAgICAgICAgICAgLy8gYnV0IHdlIGhhdmUgdG8gY2hlY2sgZm9yIHRoYXQuCisg
ICAgICAgICAgICAgICAgaWYgKGV4dHJhLnRva2Vuc1tleHRyYS5vcGVuQ3VybHlUb2tlbiAtIDNd
ICYmCisgICAgICAgICAgICAgICAgICAgICAgICBleHRyYS50b2tlbnNbZXh0cmEub3BlbkN1cmx5
VG9rZW4gLSAzXS50eXBlID09PSAnS2V5d29yZCcpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8g
QW5vbnltb3VzIGZ1bmN0aW9uLgorICAgICAgICAgICAgICAgICAgICBjaGVja1Rva2VuID0gZXh0
cmEudG9rZW5zW2V4dHJhLm9wZW5DdXJseVRva2VuIC0gNF07CisgICAgICAgICAgICAgICAgICAg
IGlmICghY2hlY2tUb2tlbikgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNjYW5Q
dW5jdHVhdG9yKCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVs
c2UgaWYgKGV4dHJhLnRva2Vuc1tleHRyYS5vcGVuQ3VybHlUb2tlbiAtIDRdICYmCisgICAgICAg
ICAgICAgICAgICAgICAgICBleHRyYS50b2tlbnNbZXh0cmEub3BlbkN1cmx5VG9rZW4gLSA0XS50
eXBlID09PSAnS2V5d29yZCcpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gTmFtZWQgZnVuY3Rp
b24uCisgICAgICAgICAgICAgICAgICAgIGNoZWNrVG9rZW4gPSBleHRyYS50b2tlbnNbZXh0cmEu
b3BlbkN1cmx5VG9rZW4gLSA1XTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFjaGVja1Rva2Vu
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29sbGVjdFJlZ2V4KCk7CisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gc2NhblB1bmN0dWF0b3IoKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgLy8gY2hlY2tUb2tlbiBkZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGZ1bmN0aW9u
IGlzCisgICAgICAgICAgICAgICAgLy8gYSBkZWNsYXJhdGlvbiBvciBhbiBleHByZXNzaW9uLgor
ICAgICAgICAgICAgICAgIGlmIChGbkV4cHJUb2tlbnMuaW5kZXhPZihjaGVja1Rva2VuLnZhbHVl
KSA+PSAwKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIEl0IGlzIGFuIGV4cHJlc3Npb24uCisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBzY2FuUHVuY3R1YXRvcigpOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAvLyBJdCBpcyBhIGRlY2xhcmF0aW9uLgorICAgICAgICAg
ICAgICAgIHJldHVybiBjb2xsZWN0UmVnZXgoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IHJldHVybiBjb2xsZWN0UmVnZXgoKTsKKyAgICAgICAgfQorICAgICAgICBpZiAocHJldlRva2Vu
LnR5cGUgPT09ICdLZXl3b3JkJykgeworICAgICAgICAgICAgcmV0dXJuIGNvbGxlY3RSZWdleCgp
OworICAgICAgICB9CisgICAgICAgIHJldHVybiBzY2FuUHVuY3R1YXRvcigpOworICAgIH0KKwor
ICAgIGZ1bmN0aW9uIGFkdmFuY2UoKSB7CisgICAgICAgIHZhciBjaDsKKworICAgICAgICBza2lw
Q29tbWVudCgpOworCisgICAgICAgIGlmIChpbmRleCA+PSBsZW5ndGgpIHsKKyAgICAgICAgICAg
IHJldHVybiB7CisgICAgICAgICAgICAgICAgdHlwZTogVG9rZW4uRU9GLAorICAgICAgICAgICAg
ICAgIGxpbmVOdW1iZXI6IGxpbmVOdW1iZXIsCisgICAgICAgICAgICAgICAgbGluZVN0YXJ0OiBs
aW5lU3RhcnQsCisgICAgICAgICAgICAgICAgc3RhcnQ6IGluZGV4LAorICAgICAgICAgICAgICAg
IGVuZDogaW5kZXgKKyAgICAgICAgICAgIH07CisgICAgICAgIH0KKworICAgICAgICBjaCA9IHNv
dXJjZS5jaGFyQ29kZUF0KGluZGV4KTsKKworICAgICAgICBpZiAoaXNJZGVudGlmaWVyU3RhcnQo
Y2gpKSB7CisgICAgICAgICAgICByZXR1cm4gc2NhbklkZW50aWZpZXIoKTsKKyAgICAgICAgfQor
CisgICAgICAgIC8vIFZlcnkgY29tbW9uOiAoIGFuZCApIGFuZCA7CisgICAgICAgIGlmIChjaCA9
PT0gMHgyOCB8fCBjaCA9PT0gMHgyOSB8fCBjaCA9PT0gMHgzQikgeworICAgICAgICAgICAgcmV0
dXJuIHNjYW5QdW5jdHVhdG9yKCk7CisgICAgICAgIH0KKworICAgICAgICAvLyBTdHJpbmcgbGl0
ZXJhbCBzdGFydHMgd2l0aCBzaW5nbGUgcXVvdGUgKFUrMDAyNykgb3IgZG91YmxlIHF1b3RlIChV
KzAwMjIpLgorICAgICAgICBpZiAoY2ggPT09IDB4MjcgfHwgY2ggPT09IDB4MjIpIHsKKyAgICAg
ICAgICAgIHJldHVybiBzY2FuU3RyaW5nTGl0ZXJhbCgpOworICAgICAgICB9CisKKworICAgICAg
ICAvLyBEb3QgKC4pIFUrMDAyRSBjYW4gYWxzbyBzdGFydCBhIGZsb2F0aW5nLXBvaW50IG51bWJl
ciwgaGVuY2UgdGhlIG5lZWQKKyAgICAgICAgLy8gdG8gY2hlY2sgdGhlIG5leHQgY2hhcmFjdGVy
LgorICAgICAgICBpZiAoY2ggPT09IDB4MkUpIHsKKyAgICAgICAgICAgIGlmIChpc0RlY2ltYWxE
aWdpdChzb3VyY2UuY2hhckNvZGVBdChpbmRleCArIDEpKSkgeworICAgICAgICAgICAgICAgIHJl
dHVybiBzY2FuTnVtZXJpY0xpdGVyYWwoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJl
dHVybiBzY2FuUHVuY3R1YXRvcigpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGlzRGVjaW1h
bERpZ2l0KGNoKSkgeworICAgICAgICAgICAgcmV0dXJuIHNjYW5OdW1lcmljTGl0ZXJhbCgpOwor
ICAgICAgICB9CisKKyAgICAgICAgLy8gU2xhc2ggKC8pIFUrMDAyRiBjYW4gYWxzbyBzdGFydCBh
IHJlZ2V4LgorICAgICAgICBpZiAoZXh0cmEudG9rZW5pemUgJiYgY2ggPT09IDB4MkYpIHsKKyAg
ICAgICAgICAgIHJldHVybiBhZHZhbmNlU2xhc2goKTsKKyAgICAgICAgfQorCisgICAgICAgIHJl
dHVybiBzY2FuUHVuY3R1YXRvcigpOworICAgIH0KKworICAgIGZ1bmN0aW9uIGNvbGxlY3RUb2tl
bigpIHsKKyAgICAgICAgdmFyIGxvYywgdG9rZW4sIHJhbmdlLCB2YWx1ZTsKKworICAgICAgICBz
a2lwQ29tbWVudCgpOworICAgICAgICBsb2MgPSB7CisgICAgICAgICAgICBzdGFydDogeworICAg
ICAgICAgICAgICAgIGxpbmU6IGxpbmVOdW1iZXIsCisgICAgICAgICAgICAgICAgY29sdW1uOiBp
bmRleCAtIGxpbmVTdGFydAorICAgICAgICAgICAgfQorICAgICAgICB9OworCisgICAgICAgIHRv
a2VuID0gYWR2YW5jZSgpOworICAgICAgICBsb2MuZW5kID0geworICAgICAgICAgICAgbGluZTog
bGluZU51bWJlciwKKyAgICAgICAgICAgIGNvbHVtbjogaW5kZXggLSBsaW5lU3RhcnQKKyAgICAg
ICAgfTsKKworICAgICAgICBpZiAodG9rZW4udHlwZSAhPT0gVG9rZW4uRU9GKSB7CisgICAgICAg
ICAgICB2YWx1ZSA9IHNvdXJjZS5zbGljZSh0b2tlbi5zdGFydCwgdG9rZW4uZW5kKTsKKyAgICAg
ICAgICAgIGV4dHJhLnRva2Vucy5wdXNoKHsKKyAgICAgICAgICAgICAgICB0eXBlOiBUb2tlbk5h
bWVbdG9rZW4udHlwZV0sCisgICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLAorICAgICAgICAg
ICAgICAgIHJhbmdlOiBbdG9rZW4uc3RhcnQsIHRva2VuLmVuZF0sCisgICAgICAgICAgICAgICAg
bG9jOiBsb2MKKyAgICAgICAgICAgIH0pOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHRv
a2VuOworICAgIH0KKworICAgIGZ1bmN0aW9uIGxleCgpIHsKKyAgICAgICAgdmFyIHRva2VuOwor
CisgICAgICAgIHRva2VuID0gbG9va2FoZWFkOworICAgICAgICBpbmRleCA9IHRva2VuLmVuZDsK
KyAgICAgICAgbGluZU51bWJlciA9IHRva2VuLmxpbmVOdW1iZXI7CisgICAgICAgIGxpbmVTdGFy
dCA9IHRva2VuLmxpbmVTdGFydDsKKworICAgICAgICBsb29rYWhlYWQgPSAodHlwZW9mIGV4dHJh
LnRva2VucyAhPT0gJ3VuZGVmaW5lZCcpID8gY29sbGVjdFRva2VuKCkgOiBhZHZhbmNlKCk7CisK
KyAgICAgICAgaW5kZXggPSB0b2tlbi5lbmQ7CisgICAgICAgIGxpbmVOdW1iZXIgPSB0b2tlbi5s
aW5lTnVtYmVyOworICAgICAgICBsaW5lU3RhcnQgPSB0b2tlbi5saW5lU3RhcnQ7CisKKyAgICAg
ICAgcmV0dXJuIHRva2VuOworICAgIH0KKworICAgIGZ1bmN0aW9uIHBlZWsoKSB7CisgICAgICAg
IHZhciBwb3MsIGxpbmUsIHN0YXJ0OworCisgICAgICAgIHBvcyA9IGluZGV4OworICAgICAgICBs
aW5lID0gbGluZU51bWJlcjsKKyAgICAgICAgc3RhcnQgPSBsaW5lU3RhcnQ7CisgICAgICAgIGxv
b2thaGVhZCA9ICh0eXBlb2YgZXh0cmEudG9rZW5zICE9PSAndW5kZWZpbmVkJykgPyBjb2xsZWN0
VG9rZW4oKSA6IGFkdmFuY2UoKTsKKyAgICAgICAgaW5kZXggPSBwb3M7CisgICAgICAgIGxpbmVO
dW1iZXIgPSBsaW5lOworICAgICAgICBsaW5lU3RhcnQgPSBzdGFydDsKKyAgICB9CisKKyAgICBm
dW5jdGlvbiBQb3NpdGlvbihsaW5lLCBjb2x1bW4pIHsKKyAgICAgICAgdGhpcy5saW5lID0gbGlu
ZTsKKyAgICAgICAgdGhpcy5jb2x1bW4gPSBjb2x1bW47CisgICAgfQorCisgICAgZnVuY3Rpb24g
U291cmNlTG9jYXRpb24oc3RhcnRMaW5lLCBzdGFydENvbHVtbiwgbGluZSwgY29sdW1uKSB7Cisg
ICAgICAgIHRoaXMuc3RhcnQgPSBuZXcgUG9zaXRpb24oc3RhcnRMaW5lLCBzdGFydENvbHVtbik7
CisgICAgICAgIHRoaXMuZW5kID0gbmV3IFBvc2l0aW9uKGxpbmUsIGNvbHVtbik7CisgICAgfQor
CisgICAgU3ludGF4VHJlZURlbGVnYXRlID0geworCisgICAgICAgIG5hbWU6ICdTeW50YXhUcmVl
JywKKworICAgICAgICBwcm9jZXNzQ29tbWVudDogZnVuY3Rpb24gKG5vZGUpIHsKKyAgICAgICAg
ICAgIHZhciBsYXN0Q2hpbGQsIHRyYWlsaW5nQ29tbWVudHM7CisKKyAgICAgICAgICAgIGlmIChu
b2RlLnR5cGUgPT09IFN5bnRheC5Qcm9ncmFtKSB7CisgICAgICAgICAgICAgICAgaWYgKG5vZGUu
Ym9keS5sZW5ndGggPiAwKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChleHRyYS50cmFpbGlu
Z0NvbW1lbnRzLmxlbmd0aCA+IDApIHsKKyAgICAgICAgICAgICAgICBpZiAoZXh0cmEudHJhaWxp
bmdDb21tZW50c1swXS5yYW5nZVswXSA+PSBub2RlLnJhbmdlWzFdKSB7CisgICAgICAgICAgICAg
ICAgICAgIHRyYWlsaW5nQ29tbWVudHMgPSBleHRyYS50cmFpbGluZ0NvbW1lbnRzOworICAgICAg
ICAgICAgICAgICAgICBleHRyYS50cmFpbGluZ0NvbW1lbnRzID0gW107CisgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgZXh0cmEudHJhaWxpbmdDb21tZW50cy5s
ZW5ndGggPSAwOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgaWYgKGV4dHJhLmJvdHRvbVJpZ2h0U3RhY2subGVuZ3RoID4gMCAmJgorICAg
ICAgICAgICAgICAgICAgICAgICAgZXh0cmEuYm90dG9tUmlnaHRTdGFja1tleHRyYS5ib3R0b21S
aWdodFN0YWNrLmxlbmd0aCAtIDFdLnRyYWlsaW5nQ29tbWVudHMgJiYKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGV4dHJhLmJvdHRvbVJpZ2h0U3RhY2tbZXh0cmEuYm90dG9tUmlnaHRTdGFjay5s
ZW5ndGggLSAxXS50cmFpbGluZ0NvbW1lbnRzWzBdLnJhbmdlWzBdID49IG5vZGUucmFuZ2VbMV0p
IHsKKyAgICAgICAgICAgICAgICAgICAgdHJhaWxpbmdDb21tZW50cyA9IGV4dHJhLmJvdHRvbVJp
Z2h0U3RhY2tbZXh0cmEuYm90dG9tUmlnaHRTdGFjay5sZW5ndGggLSAxXS50cmFpbGluZ0NvbW1l
bnRzOworICAgICAgICAgICAgICAgICAgICBkZWxldGUgZXh0cmEuYm90dG9tUmlnaHRTdGFja1tl
eHRyYS5ib3R0b21SaWdodFN0YWNrLmxlbmd0aCAtIDFdLnRyYWlsaW5nQ29tbWVudHM7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBFYXRpbmcgdGhl
IHN0YWNrLgorICAgICAgICAgICAgd2hpbGUgKGV4dHJhLmJvdHRvbVJpZ2h0U3RhY2subGVuZ3Ro
ID4gMCAmJiBleHRyYS5ib3R0b21SaWdodFN0YWNrW2V4dHJhLmJvdHRvbVJpZ2h0U3RhY2subGVu
Z3RoIC0gMV0ucmFuZ2VbMF0gPj0gbm9kZS5yYW5nZVswXSkgeworICAgICAgICAgICAgICAgIGxh
c3RDaGlsZCA9IGV4dHJhLmJvdHRvbVJpZ2h0U3RhY2sucG9wKCk7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGlmIChsYXN0Q2hpbGQpIHsKKyAgICAgICAgICAgICAgICBpZiAobGFzdENo
aWxkLmxlYWRpbmdDb21tZW50cyAmJiBsYXN0Q2hpbGQubGVhZGluZ0NvbW1lbnRzW2xhc3RDaGls
ZC5sZWFkaW5nQ29tbWVudHMubGVuZ3RoIC0gMV0ucmFuZ2VbMV0gPD0gbm9kZS5yYW5nZVswXSkg
eworICAgICAgICAgICAgICAgICAgICBub2RlLmxlYWRpbmdDb21tZW50cyA9IGxhc3RDaGlsZC5s
ZWFkaW5nQ29tbWVudHM7CisgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBsYXN0Q2hpbGQubGVh
ZGluZ0NvbW1lbnRzOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSBpZiAo
ZXh0cmEubGVhZGluZ0NvbW1lbnRzLmxlbmd0aCA+IDAgJiYgZXh0cmEubGVhZGluZ0NvbW1lbnRz
W2V4dHJhLmxlYWRpbmdDb21tZW50cy5sZW5ndGggLSAxXS5yYW5nZVsxXSA8PSBub2RlLnJhbmdl
WzBdKSB7CisgICAgICAgICAgICAgICAgbm9kZS5sZWFkaW5nQ29tbWVudHMgPSBleHRyYS5sZWFk
aW5nQ29tbWVudHM7CisgICAgICAgICAgICAgICAgZXh0cmEubGVhZGluZ0NvbW1lbnRzID0gW107
CisgICAgICAgICAgICB9CisKKworICAgICAgICAgICAgaWYgKHRyYWlsaW5nQ29tbWVudHMpIHsK
KyAgICAgICAgICAgICAgICBub2RlLnRyYWlsaW5nQ29tbWVudHMgPSB0cmFpbGluZ0NvbW1lbnRz
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBleHRyYS5ib3R0b21SaWdodFN0YWNrLnB1
c2gobm9kZSk7CisgICAgICAgIH0sCisKKyAgICAgICAgbWFya0VuZDogZnVuY3Rpb24gKG5vZGUs
IHN0YXJ0VG9rZW4pIHsKKyAgICAgICAgICAgIGlmIChleHRyYS5yYW5nZSkgeworICAgICAgICAg
ICAgICAgIG5vZGUucmFuZ2UgPSBbc3RhcnRUb2tlbi5zdGFydCwgaW5kZXhdOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgaWYgKGV4dHJhLmxvYykgeworICAgICAgICAgICAgICAgIG5vZGUu
bG9jID0gbmV3IFNvdXJjZUxvY2F0aW9uKAorICAgICAgICAgICAgICAgICAgICBzdGFydFRva2Vu
LnN0YXJ0TGluZU51bWJlciA9PT0gdW5kZWZpbmVkID8gIHN0YXJ0VG9rZW4ubGluZU51bWJlciA6
IHN0YXJ0VG9rZW4uc3RhcnRMaW5lTnVtYmVyLAorICAgICAgICAgICAgICAgICAgICBzdGFydFRv
a2VuLnN0YXJ0IC0gKHN0YXJ0VG9rZW4uc3RhcnRMaW5lU3RhcnQgPT09IHVuZGVmaW5lZCA/ICBz
dGFydFRva2VuLmxpbmVTdGFydCA6IHN0YXJ0VG9rZW4uc3RhcnRMaW5lU3RhcnQpLAorICAgICAg
ICAgICAgICAgICAgICBsaW5lTnVtYmVyLAorICAgICAgICAgICAgICAgICAgICBpbmRleCAtIGxp
bmVTdGFydAorICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICAgICAgdGhpcy5wb3N0UHJv
Y2Vzcyhub2RlKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGV4dHJhLmF0dGFj
aENvbW1lbnQpIHsKKyAgICAgICAgICAgICAgICB0aGlzLnByb2Nlc3NDb21tZW50KG5vZGUpOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIG5vZGU7CisgICAgICAgIH0sCisKKyAg
ICAgICAgcG9zdFByb2Nlc3M6IGZ1bmN0aW9uIChub2RlKSB7CisgICAgICAgICAgICBpZiAoZXh0
cmEuc291cmNlKSB7CisgICAgICAgICAgICAgICAgbm9kZS5sb2Muc291cmNlID0gZXh0cmEuc291
cmNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIG5vZGU7CisgICAgICAgIH0s
CisKKyAgICAgICAgY3JlYXRlQXJyYXlFeHByZXNzaW9uOiBmdW5jdGlvbiAoZWxlbWVudHMpIHsK
KyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgdHlwZTogU3ludGF4LkFycmF5
RXhwcmVzc2lvbiwKKyAgICAgICAgICAgICAgICBlbGVtZW50czogZWxlbWVudHMKKyAgICAgICAg
ICAgIH07CisgICAgICAgIH0sCisKKyAgICAgICAgY3JlYXRlQXNzaWdubWVudEV4cHJlc3Npb246
IGZ1bmN0aW9uIChvcGVyYXRvciwgbGVmdCwgcmlnaHQpIHsKKyAgICAgICAgICAgIHJldHVybiB7
CisgICAgICAgICAgICAgICAgdHlwZTogU3ludGF4LkFzc2lnbm1lbnRFeHByZXNzaW9uLAorICAg
ICAgICAgICAgICAgIG9wZXJhdG9yOiBvcGVyYXRvciwKKyAgICAgICAgICAgICAgICBsZWZ0OiBs
ZWZ0LAorICAgICAgICAgICAgICAgIHJpZ2h0OiByaWdodAorICAgICAgICAgICAgfTsKKyAgICAg
ICAgfSwKKworICAgICAgICBjcmVhdGVCaW5hcnlFeHByZXNzaW9uOiBmdW5jdGlvbiAob3BlcmF0
b3IsIGxlZnQsIHJpZ2h0KSB7CisgICAgICAgICAgICB2YXIgdHlwZSA9IChvcGVyYXRvciA9PT0g
J3x8JyB8fCBvcGVyYXRvciA9PT0gJyYmJykgPyBTeW50YXguTG9naWNhbEV4cHJlc3Npb24gOgor
ICAgICAgICAgICAgICAgICAgICAgICAgU3ludGF4LkJpbmFyeUV4cHJlc3Npb247CisgICAgICAg
ICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIHR5cGU6IHR5cGUsCisgICAgICAgICAgICAg
ICAgb3BlcmF0b3I6IG9wZXJhdG9yLAorICAgICAgICAgICAgICAgIGxlZnQ6IGxlZnQsCisgICAg
ICAgICAgICAgICAgcmlnaHQ6IHJpZ2h0CisgICAgICAgICAgICB9OworICAgICAgICB9LAorCisg
ICAgICAgIGNyZWF0ZUJsb2NrU3RhdGVtZW50OiBmdW5jdGlvbiAoYm9keSkgeworICAgICAgICAg
ICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguQmxvY2tTdGF0ZW1lbnQs
CisgICAgICAgICAgICAgICAgYm9keTogYm9keQorICAgICAgICAgICAgfTsKKyAgICAgICAgfSwK
KworICAgICAgICBjcmVhdGVCcmVha1N0YXRlbWVudDogZnVuY3Rpb24gKGxhYmVsKSB7CisgICAg
ICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5CcmVha1N0YXRl
bWVudCwKKyAgICAgICAgICAgICAgICBsYWJlbDogbGFiZWwKKyAgICAgICAgICAgIH07CisgICAg
ICAgIH0sCisKKyAgICAgICAgY3JlYXRlQ2FsbEV4cHJlc3Npb246IGZ1bmN0aW9uIChjYWxsZWUs
IGFyZ3MpIHsKKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgdHlwZTogU3lu
dGF4LkNhbGxFeHByZXNzaW9uLAorICAgICAgICAgICAgICAgIGNhbGxlZTogY2FsbGVlLAorICAg
ICAgICAgICAgICAgICdhcmd1bWVudHMnOiBhcmdzCisgICAgICAgICAgICB9OworICAgICAgICB9
LAorCisgICAgICAgIGNyZWF0ZUNhdGNoQ2xhdXNlOiBmdW5jdGlvbiAocGFyYW0sIGJvZHkpIHsK
KyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgdHlwZTogU3ludGF4LkNhdGNo
Q2xhdXNlLAorICAgICAgICAgICAgICAgIHBhcmFtOiBwYXJhbSwKKyAgICAgICAgICAgICAgICBi
b2R5OiBib2R5CisgICAgICAgICAgICB9OworICAgICAgICB9LAorCisgICAgICAgIGNyZWF0ZUNv
bmRpdGlvbmFsRXhwcmVzc2lvbjogZnVuY3Rpb24gKHRlc3QsIGNvbnNlcXVlbnQsIGFsdGVybmF0
ZSkgeworICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXgu
Q29uZGl0aW9uYWxFeHByZXNzaW9uLAorICAgICAgICAgICAgICAgIHRlc3Q6IHRlc3QsCisgICAg
ICAgICAgICAgICAgY29uc2VxdWVudDogY29uc2VxdWVudCwKKyAgICAgICAgICAgICAgICBhbHRl
cm5hdGU6IGFsdGVybmF0ZQorICAgICAgICAgICAgfTsKKyAgICAgICAgfSwKKworICAgICAgICBj
cmVhdGVDb250aW51ZVN0YXRlbWVudDogZnVuY3Rpb24gKGxhYmVsKSB7CisgICAgICAgICAgICBy
ZXR1cm4geworICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5Db250aW51ZVN0YXRlbWVudCwK
KyAgICAgICAgICAgICAgICBsYWJlbDogbGFiZWwKKyAgICAgICAgICAgIH07CisgICAgICAgIH0s
CisKKyAgICAgICAgY3JlYXRlRGVidWdnZXJTdGF0ZW1lbnQ6IGZ1bmN0aW9uICgpIHsKKyAgICAg
ICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgdHlwZTogU3ludGF4LkRlYnVnZ2VyU3Rh
dGVtZW50CisgICAgICAgICAgICB9OworICAgICAgICB9LAorCisgICAgICAgIGNyZWF0ZURvV2hp
bGVTdGF0ZW1lbnQ6IGZ1bmN0aW9uIChib2R5LCB0ZXN0KSB7CisgICAgICAgICAgICByZXR1cm4g
eworICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5Eb1doaWxlU3RhdGVtZW50LAorICAgICAg
ICAgICAgICAgIGJvZHk6IGJvZHksCisgICAgICAgICAgICAgICAgdGVzdDogdGVzdAorICAgICAg
ICAgICAgfTsKKyAgICAgICAgfSwKKworICAgICAgICBjcmVhdGVFbXB0eVN0YXRlbWVudDogZnVu
Y3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICB0eXBlOiBT
eW50YXguRW1wdHlTdGF0ZW1lbnQKKyAgICAgICAgICAgIH07CisgICAgICAgIH0sCisKKyAgICAg
ICAgY3JlYXRlRXhwcmVzc2lvblN0YXRlbWVudDogZnVuY3Rpb24gKGV4cHJlc3Npb24pIHsKKyAg
ICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgdHlwZTogU3ludGF4LkV4cHJlc3Np
b25TdGF0ZW1lbnQsCisgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogZXhwcmVzc2lvbgorICAg
ICAgICAgICAgfTsKKyAgICAgICAgfSwKKworICAgICAgICBjcmVhdGVGb3JTdGF0ZW1lbnQ6IGZ1
bmN0aW9uIChpbml0LCB0ZXN0LCB1cGRhdGUsIGJvZHkpIHsKKyAgICAgICAgICAgIHJldHVybiB7
CisgICAgICAgICAgICAgICAgdHlwZTogU3ludGF4LkZvclN0YXRlbWVudCwKKyAgICAgICAgICAg
ICAgICBpbml0OiBpbml0LAorICAgICAgICAgICAgICAgIHRlc3Q6IHRlc3QsCisgICAgICAgICAg
ICAgICAgdXBkYXRlOiB1cGRhdGUsCisgICAgICAgICAgICAgICAgYm9keTogYm9keQorICAgICAg
ICAgICAgfTsKKyAgICAgICAgfSwKKworICAgICAgICBjcmVhdGVGb3JJblN0YXRlbWVudDogZnVu
Y3Rpb24gKGxlZnQsIHJpZ2h0LCBib2R5KSB7CisgICAgICAgICAgICByZXR1cm4geworICAgICAg
ICAgICAgICAgIHR5cGU6IFN5bnRheC5Gb3JJblN0YXRlbWVudCwKKyAgICAgICAgICAgICAgICBs
ZWZ0OiBsZWZ0LAorICAgICAgICAgICAgICAgIHJpZ2h0OiByaWdodCwKKyAgICAgICAgICAgICAg
ICBib2R5OiBib2R5LAorICAgICAgICAgICAgICAgIGVhY2g6IGZhbHNlCisgICAgICAgICAgICB9
OworICAgICAgICB9LAorCisgICAgICAgIGNyZWF0ZUZ1bmN0aW9uRGVjbGFyYXRpb246IGZ1bmN0
aW9uIChpZCwgcGFyYW1zLCBkZWZhdWx0cywgYm9keSkgeworICAgICAgICAgICAgcmV0dXJuIHsK
KyAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguRnVuY3Rpb25EZWNsYXJhdGlvbiwKKyAgICAg
ICAgICAgICAgICBpZDogaWQsCisgICAgICAgICAgICAgICAgcGFyYW1zOiBwYXJhbXMsCisgICAg
ICAgICAgICAgICAgZGVmYXVsdHM6IGRlZmF1bHRzLAorICAgICAgICAgICAgICAgIGJvZHk6IGJv
ZHksCisgICAgICAgICAgICAgICAgcmVzdDogbnVsbCwKKyAgICAgICAgICAgICAgICBnZW5lcmF0
b3I6IGZhbHNlLAorICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IGZhbHNlCisgICAgICAgICAg
ICB9OworICAgICAgICB9LAorCisgICAgICAgIGNyZWF0ZUZ1bmN0aW9uRXhwcmVzc2lvbjogZnVu
Y3Rpb24gKGlkLCBwYXJhbXMsIGRlZmF1bHRzLCBib2R5KSB7CisgICAgICAgICAgICByZXR1cm4g
eworICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5GdW5jdGlvbkV4cHJlc3Npb24sCisgICAg
ICAgICAgICAgICAgaWQ6IGlkLAorICAgICAgICAgICAgICAgIHBhcmFtczogcGFyYW1zLAorICAg
ICAgICAgICAgICAgIGRlZmF1bHRzOiBkZWZhdWx0cywKKyAgICAgICAgICAgICAgICBib2R5OiBi
b2R5LAorICAgICAgICAgICAgICAgIHJlc3Q6IG51bGwsCisgICAgICAgICAgICAgICAgZ2VuZXJh
dG9yOiBmYWxzZSwKKyAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBmYWxzZQorICAgICAgICAg
ICAgfTsKKyAgICAgICAgfSwKKworICAgICAgICBjcmVhdGVJZGVudGlmaWVyOiBmdW5jdGlvbiAo
bmFtZSkgeworICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICB0eXBlOiBTeW50
YXguSWRlbnRpZmllciwKKyAgICAgICAgICAgICAgICBuYW1lOiBuYW1lCisgICAgICAgICAgICB9
OworICAgICAgICB9LAorCisgICAgICAgIGNyZWF0ZUlmU3RhdGVtZW50OiBmdW5jdGlvbiAodGVz
dCwgY29uc2VxdWVudCwgYWx0ZXJuYXRlKSB7CisgICAgICAgICAgICByZXR1cm4geworICAgICAg
ICAgICAgICAgIHR5cGU6IFN5bnRheC5JZlN0YXRlbWVudCwKKyAgICAgICAgICAgICAgICB0ZXN0
OiB0ZXN0LAorICAgICAgICAgICAgICAgIGNvbnNlcXVlbnQ6IGNvbnNlcXVlbnQsCisgICAgICAg
ICAgICAgICAgYWx0ZXJuYXRlOiBhbHRlcm5hdGUKKyAgICAgICAgICAgIH07CisgICAgICAgIH0s
CisKKyAgICAgICAgY3JlYXRlTGFiZWxlZFN0YXRlbWVudDogZnVuY3Rpb24gKGxhYmVsLCBib2R5
KSB7CisgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5M
YWJlbGVkU3RhdGVtZW50LAorICAgICAgICAgICAgICAgIGxhYmVsOiBsYWJlbCwKKyAgICAgICAg
ICAgICAgICBib2R5OiBib2R5CisgICAgICAgICAgICB9OworICAgICAgICB9LAorCisgICAgICAg
IGNyZWF0ZUxpdGVyYWw6IGZ1bmN0aW9uICh0b2tlbikgeworICAgICAgICAgICAgcmV0dXJuIHsK
KyAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguTGl0ZXJhbCwKKyAgICAgICAgICAgICAgICB2
YWx1ZTogdG9rZW4udmFsdWUsCisgICAgICAgICAgICAgICAgcmF3OiBzb3VyY2Uuc2xpY2UodG9r
ZW4uc3RhcnQsIHRva2VuLmVuZCkKKyAgICAgICAgICAgIH07CisgICAgICAgIH0sCisKKyAgICAg
ICAgY3JlYXRlTWVtYmVyRXhwcmVzc2lvbjogZnVuY3Rpb24gKGFjY2Vzc29yLCBvYmplY3QsIHBy
b3BlcnR5KSB7CisgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIHR5cGU6IFN5
bnRheC5NZW1iZXJFeHByZXNzaW9uLAorICAgICAgICAgICAgICAgIGNvbXB1dGVkOiBhY2Nlc3Nv
ciA9PT0gJ1snLAorICAgICAgICAgICAgICAgIG9iamVjdDogb2JqZWN0LAorICAgICAgICAgICAg
ICAgIHByb3BlcnR5OiBwcm9wZXJ0eQorICAgICAgICAgICAgfTsKKyAgICAgICAgfSwKKworICAg
ICAgICBjcmVhdGVOZXdFeHByZXNzaW9uOiBmdW5jdGlvbiAoY2FsbGVlLCBhcmdzKSB7CisgICAg
ICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5OZXdFeHByZXNz
aW9uLAorICAgICAgICAgICAgICAgIGNhbGxlZTogY2FsbGVlLAorICAgICAgICAgICAgICAgICdh
cmd1bWVudHMnOiBhcmdzCisgICAgICAgICAgICB9OworICAgICAgICB9LAorCisgICAgICAgIGNy
ZWF0ZU9iamVjdEV4cHJlc3Npb246IGZ1bmN0aW9uIChwcm9wZXJ0aWVzKSB7CisgICAgICAgICAg
ICByZXR1cm4geworICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5PYmplY3RFeHByZXNzaW9u
LAorICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6IHByb3BlcnRpZXMKKyAgICAgICAgICAgIH07
CisgICAgICAgIH0sCisKKyAgICAgICAgY3JlYXRlUG9zdGZpeEV4cHJlc3Npb246IGZ1bmN0aW9u
IChvcGVyYXRvciwgYXJndW1lbnQpIHsKKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAg
ICAgICAgdHlwZTogU3ludGF4LlVwZGF0ZUV4cHJlc3Npb24sCisgICAgICAgICAgICAgICAgb3Bl
cmF0b3I6IG9wZXJhdG9yLAorICAgICAgICAgICAgICAgIGFyZ3VtZW50OiBhcmd1bWVudCwKKyAg
ICAgICAgICAgICAgICBwcmVmaXg6IGZhbHNlCisgICAgICAgICAgICB9OworICAgICAgICB9LAor
CisgICAgICAgIGNyZWF0ZVByb2dyYW06IGZ1bmN0aW9uIChib2R5KSB7CisgICAgICAgICAgICBy
ZXR1cm4geworICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5Qcm9ncmFtLAorICAgICAgICAg
ICAgICAgIGJvZHk6IGJvZHkKKyAgICAgICAgICAgIH07CisgICAgICAgIH0sCisKKyAgICAgICAg
Y3JlYXRlUHJvcGVydHk6IGZ1bmN0aW9uIChraW5kLCBrZXksIHZhbHVlKSB7CisgICAgICAgICAg
ICByZXR1cm4geworICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5Qcm9wZXJ0eSwKKyAgICAg
ICAgICAgICAgICBrZXk6IGtleSwKKyAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUsCisgICAg
ICAgICAgICAgICAga2luZDoga2luZAorICAgICAgICAgICAgfTsKKyAgICAgICAgfSwKKworICAg
ICAgICBjcmVhdGVSZXR1cm5TdGF0ZW1lbnQ6IGZ1bmN0aW9uIChhcmd1bWVudCkgeworICAgICAg
ICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguUmV0dXJuU3RhdGVt
ZW50LAorICAgICAgICAgICAgICAgIGFyZ3VtZW50OiBhcmd1bWVudAorICAgICAgICAgICAgfTsK
KyAgICAgICAgfSwKKworICAgICAgICBjcmVhdGVTZXF1ZW5jZUV4cHJlc3Npb246IGZ1bmN0aW9u
IChleHByZXNzaW9ucykgeworICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICB0
eXBlOiBTeW50YXguU2VxdWVuY2VFeHByZXNzaW9uLAorICAgICAgICAgICAgICAgIGV4cHJlc3Np
b25zOiBleHByZXNzaW9ucworICAgICAgICAgICAgfTsKKyAgICAgICAgfSwKKworICAgICAgICBj
cmVhdGVTd2l0Y2hDYXNlOiBmdW5jdGlvbiAodGVzdCwgY29uc2VxdWVudCkgeworICAgICAgICAg
ICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguU3dpdGNoQ2FzZSwKKyAg
ICAgICAgICAgICAgICB0ZXN0OiB0ZXN0LAorICAgICAgICAgICAgICAgIGNvbnNlcXVlbnQ6IGNv
bnNlcXVlbnQKKyAgICAgICAgICAgIH07CisgICAgICAgIH0sCisKKyAgICAgICAgY3JlYXRlU3dp
dGNoU3RhdGVtZW50OiBmdW5jdGlvbiAoZGlzY3JpbWluYW50LCBjYXNlcykgeworICAgICAgICAg
ICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguU3dpdGNoU3RhdGVtZW50
LAorICAgICAgICAgICAgICAgIGRpc2NyaW1pbmFudDogZGlzY3JpbWluYW50LAorICAgICAgICAg
ICAgICAgIGNhc2VzOiBjYXNlcworICAgICAgICAgICAgfTsKKyAgICAgICAgfSwKKworICAgICAg
ICBjcmVhdGVUaGlzRXhwcmVzc2lvbjogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJu
IHsKKyAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguVGhpc0V4cHJlc3Npb24KKyAgICAgICAg
ICAgIH07CisgICAgICAgIH0sCisKKyAgICAgICAgY3JlYXRlVGhyb3dTdGF0ZW1lbnQ6IGZ1bmN0
aW9uIChhcmd1bWVudCkgeworICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICB0
eXBlOiBTeW50YXguVGhyb3dTdGF0ZW1lbnQsCisgICAgICAgICAgICAgICAgYXJndW1lbnQ6IGFy
Z3VtZW50CisgICAgICAgICAgICB9OworICAgICAgICB9LAorCisgICAgICAgIGNyZWF0ZVRyeVN0
YXRlbWVudDogZnVuY3Rpb24gKGJsb2NrLCBndWFyZGVkSGFuZGxlcnMsIGhhbmRsZXJzLCBmaW5h
bGl6ZXIpIHsKKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgdHlwZTogU3lu
dGF4LlRyeVN0YXRlbWVudCwKKyAgICAgICAgICAgICAgICBibG9jazogYmxvY2ssCisgICAgICAg
ICAgICAgICAgZ3VhcmRlZEhhbmRsZXJzOiBndWFyZGVkSGFuZGxlcnMsCisgICAgICAgICAgICAg
ICAgaGFuZGxlcnM6IGhhbmRsZXJzLAorICAgICAgICAgICAgICAgIGZpbmFsaXplcjogZmluYWxp
emVyCisgICAgICAgICAgICB9OworICAgICAgICB9LAorCisgICAgICAgIGNyZWF0ZVVuYXJ5RXhw
cmVzc2lvbjogZnVuY3Rpb24gKG9wZXJhdG9yLCBhcmd1bWVudCkgeworICAgICAgICAgICAgaWYg
KG9wZXJhdG9yID09PSAnKysnIHx8IG9wZXJhdG9yID09PSAnLS0nKSB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICAgICAgdHlwZTogU3ludGF4LlVwZGF0ZUV4cHJl
c3Npb24sCisgICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yOiBvcGVyYXRvciwKKyAgICAgICAg
ICAgICAgICAgICAgYXJndW1lbnQ6IGFyZ3VtZW50LAorICAgICAgICAgICAgICAgICAgICBwcmVm
aXg6IHRydWUKKyAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgfQorICAgICAgICAgICAg
cmV0dXJuIHsKKyAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguVW5hcnlFeHByZXNzaW9uLAor
ICAgICAgICAgICAgICAgIG9wZXJhdG9yOiBvcGVyYXRvciwKKyAgICAgICAgICAgICAgICBhcmd1
bWVudDogYXJndW1lbnQsCisgICAgICAgICAgICAgICAgcHJlZml4OiB0cnVlCisgICAgICAgICAg
ICB9OworICAgICAgICB9LAorCisgICAgICAgIGNyZWF0ZVZhcmlhYmxlRGVjbGFyYXRpb246IGZ1
bmN0aW9uIChkZWNsYXJhdGlvbnMsIGtpbmQpIHsKKyAgICAgICAgICAgIHJldHVybiB7CisgICAg
ICAgICAgICAgICAgdHlwZTogU3ludGF4LlZhcmlhYmxlRGVjbGFyYXRpb24sCisgICAgICAgICAg
ICAgICAgZGVjbGFyYXRpb25zOiBkZWNsYXJhdGlvbnMsCisgICAgICAgICAgICAgICAga2luZDog
a2luZAorICAgICAgICAgICAgfTsKKyAgICAgICAgfSwKKworICAgICAgICBjcmVhdGVWYXJpYWJs
ZURlY2xhcmF0b3I6IGZ1bmN0aW9uIChpZCwgaW5pdCkgeworICAgICAgICAgICAgcmV0dXJuIHsK
KyAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguVmFyaWFibGVEZWNsYXJhdG9yLAorICAgICAg
ICAgICAgICAgIGlkOiBpZCwKKyAgICAgICAgICAgICAgICBpbml0OiBpbml0CisgICAgICAgICAg
ICB9OworICAgICAgICB9LAorCisgICAgICAgIGNyZWF0ZVdoaWxlU3RhdGVtZW50OiBmdW5jdGlv
biAodGVzdCwgYm9keSkgeworICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICB0
eXBlOiBTeW50YXguV2hpbGVTdGF0ZW1lbnQsCisgICAgICAgICAgICAgICAgdGVzdDogdGVzdCwK
KyAgICAgICAgICAgICAgICBib2R5OiBib2R5CisgICAgICAgICAgICB9OworICAgICAgICB9LAor
CisgICAgICAgIGNyZWF0ZVdpdGhTdGF0ZW1lbnQ6IGZ1bmN0aW9uIChvYmplY3QsIGJvZHkpIHsK
KyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgdHlwZTogU3ludGF4LldpdGhT
dGF0ZW1lbnQsCisgICAgICAgICAgICAgICAgb2JqZWN0OiBvYmplY3QsCisgICAgICAgICAgICAg
ICAgYm9keTogYm9keQorICAgICAgICAgICAgfTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICAv
LyBSZXR1cm4gdHJ1ZSBpZiB0aGVyZSBpcyBhIGxpbmUgdGVybWluYXRvciBiZWZvcmUgdGhlIG5l
eHQgdG9rZW4uCisKKyAgICBmdW5jdGlvbiBwZWVrTGluZVRlcm1pbmF0b3IoKSB7CisgICAgICAg
IHZhciBwb3MsIGxpbmUsIHN0YXJ0LCBmb3VuZDsKKworICAgICAgICBwb3MgPSBpbmRleDsKKyAg
ICAgICAgbGluZSA9IGxpbmVOdW1iZXI7CisgICAgICAgIHN0YXJ0ID0gbGluZVN0YXJ0OworICAg
ICAgICBza2lwQ29tbWVudCgpOworICAgICAgICBmb3VuZCA9IGxpbmVOdW1iZXIgIT09IGxpbmU7
CisgICAgICAgIGluZGV4ID0gcG9zOworICAgICAgICBsaW5lTnVtYmVyID0gbGluZTsKKyAgICAg
ICAgbGluZVN0YXJ0ID0gc3RhcnQ7CisKKyAgICAgICAgcmV0dXJuIGZvdW5kOworICAgIH0KKwor
ICAgIC8vIFRocm93IGFuIGV4Y2VwdGlvbgorCisgICAgZnVuY3Rpb24gdGhyb3dFcnJvcih0b2tl
biwgbWVzc2FnZUZvcm1hdCkgeworICAgICAgICB2YXIgZXJyb3IsCisgICAgICAgICAgICBhcmdz
ID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAyKSwKKyAgICAgICAgICAg
IG1zZyA9IG1lc3NhZ2VGb3JtYXQucmVwbGFjZSgKKyAgICAgICAgICAgICAgICAvJShcZCkvZywK
KyAgICAgICAgICAgICAgICBmdW5jdGlvbiAod2hvbGUsIGluZGV4KSB7CisgICAgICAgICAgICAg
ICAgICAgIGFzc2VydChpbmRleCA8IGFyZ3MubGVuZ3RoLCAnTWVzc2FnZSByZWZlcmVuY2UgbXVz
dCBiZSBpbiByYW5nZScpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXJnc1tpbmRleF07
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgKTsKKworICAgICAgICBpZiAodHlwZW9m
IHRva2VuLmxpbmVOdW1iZXIgPT09ICdudW1iZXInKSB7CisgICAgICAgICAgICBlcnJvciA9IG5l
dyBFcnJvcignTGluZSAnICsgdG9rZW4ubGluZU51bWJlciArICc6ICcgKyBtc2cpOworICAgICAg
ICAgICAgZXJyb3IuaW5kZXggPSB0b2tlbi5zdGFydDsKKyAgICAgICAgICAgIGVycm9yLmxpbmVO
dW1iZXIgPSB0b2tlbi5saW5lTnVtYmVyOworICAgICAgICAgICAgZXJyb3IuY29sdW1uID0gdG9r
ZW4uc3RhcnQgLSBsaW5lU3RhcnQgKyAxOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ZXJyb3IgPSBuZXcgRXJyb3IoJ0xpbmUgJyArIGxpbmVOdW1iZXIgKyAnOiAnICsgbXNnKTsKKyAg
ICAgICAgICAgIGVycm9yLmluZGV4ID0gaW5kZXg7CisgICAgICAgICAgICBlcnJvci5saW5lTnVt
YmVyID0gbGluZU51bWJlcjsKKyAgICAgICAgICAgIGVycm9yLmNvbHVtbiA9IGluZGV4IC0gbGlu
ZVN0YXJ0ICsgMTsKKyAgICAgICAgfQorCisgICAgICAgIGVycm9yLmRlc2NyaXB0aW9uID0gbXNn
OworICAgICAgICB0aHJvdyBlcnJvcjsKKyAgICB9CisKKyAgICBmdW5jdGlvbiB0aHJvd0Vycm9y
VG9sZXJhbnQoKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICB0aHJvd0Vycm9yLmFwcGx5
KG51bGwsIGFyZ3VtZW50cyk7CisgICAgICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgICAgIGlm
IChleHRyYS5lcnJvcnMpIHsKKyAgICAgICAgICAgICAgICBleHRyYS5lcnJvcnMucHVzaChlKTsK
KyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdGhyb3cgZTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH0KKworCisgICAgLy8gVGhyb3cgYW4gZXhjZXB0aW9uIGJl
Y2F1c2Ugb2YgdGhlIHRva2VuLgorCisgICAgZnVuY3Rpb24gdGhyb3dVbmV4cGVjdGVkKHRva2Vu
KSB7CisgICAgICAgIGlmICh0b2tlbi50eXBlID09PSBUb2tlbi5FT0YpIHsKKyAgICAgICAgICAg
IHRocm93RXJyb3IodG9rZW4sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRFT1MpOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKHRva2VuLnR5cGUgPT09IFRva2VuLk51bWVyaWNMaXRlcmFsKSB7CisgICAg
ICAgICAgICB0aHJvd0Vycm9yKHRva2VuLCBNZXNzYWdlcy5VbmV4cGVjdGVkTnVtYmVyKTsKKyAg
ICAgICAgfQorCisgICAgICAgIGlmICh0b2tlbi50eXBlID09PSBUb2tlbi5TdHJpbmdMaXRlcmFs
KSB7CisgICAgICAgICAgICB0aHJvd0Vycm9yKHRva2VuLCBNZXNzYWdlcy5VbmV4cGVjdGVkU3Ry
aW5nKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh0b2tlbi50eXBlID09PSBUb2tlbi5JZGVu
dGlmaWVyKSB7CisgICAgICAgICAgICB0aHJvd0Vycm9yKHRva2VuLCBNZXNzYWdlcy5VbmV4cGVj
dGVkSWRlbnRpZmllcik7CisgICAgICAgIH0KKworICAgICAgICBpZiAodG9rZW4udHlwZSA9PT0g
VG9rZW4uS2V5d29yZCkgeworICAgICAgICAgICAgaWYgKGlzRnV0dXJlUmVzZXJ2ZWRXb3JkKHRv
a2VuLnZhbHVlKSkgeworICAgICAgICAgICAgICAgIHRocm93RXJyb3IodG9rZW4sIE1lc3NhZ2Vz
LlVuZXhwZWN0ZWRSZXNlcnZlZCk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKHN0cmljdCAmJiBp
c1N0cmljdE1vZGVSZXNlcnZlZFdvcmQodG9rZW4udmFsdWUpKSB7CisgICAgICAgICAgICAgICAg
dGhyb3dFcnJvclRvbGVyYW50KHRva2VuLCBNZXNzYWdlcy5TdHJpY3RSZXNlcnZlZFdvcmQpOwor
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRocm93
RXJyb3IodG9rZW4sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgdG9rZW4udmFsdWUpOworICAg
ICAgICB9CisKKyAgICAgICAgLy8gQm9vbGVhbkxpdGVyYWwsIE51bGxMaXRlcmFsLCBvciBQdW5j
dHVhdG9yLgorICAgICAgICB0aHJvd0Vycm9yKHRva2VuLCBNZXNzYWdlcy5VbmV4cGVjdGVkVG9r
ZW4sIHRva2VuLnZhbHVlKTsKKyAgICB9CisKKyAgICAvLyBFeHBlY3QgdGhlIG5leHQgdG9rZW4g
dG8gbWF0Y2ggdGhlIHNwZWNpZmllZCBwdW5jdHVhdG9yLgorICAgIC8vIElmIG5vdCwgYW4gZXhj
ZXB0aW9uIHdpbGwgYmUgdGhyb3duLgorCisgICAgZnVuY3Rpb24gZXhwZWN0KHZhbHVlKSB7Cisg
ICAgICAgIHZhciB0b2tlbiA9IGxleCgpOworICAgICAgICBpZiAodG9rZW4udHlwZSAhPT0gVG9r
ZW4uUHVuY3R1YXRvciB8fCB0b2tlbi52YWx1ZSAhPT0gdmFsdWUpIHsKKyAgICAgICAgICAgIHRo
cm93VW5leHBlY3RlZCh0b2tlbik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBFeHBlY3Qg
dGhlIG5leHQgdG9rZW4gdG8gbWF0Y2ggdGhlIHNwZWNpZmllZCBrZXl3b3JkLgorICAgIC8vIElm
IG5vdCwgYW4gZXhjZXB0aW9uIHdpbGwgYmUgdGhyb3duLgorCisgICAgZnVuY3Rpb24gZXhwZWN0
S2V5d29yZChrZXl3b3JkKSB7CisgICAgICAgIHZhciB0b2tlbiA9IGxleCgpOworICAgICAgICBp
ZiAodG9rZW4udHlwZSAhPT0gVG9rZW4uS2V5d29yZCB8fCB0b2tlbi52YWx1ZSAhPT0ga2V5d29y
ZCkgeworICAgICAgICAgICAgdGhyb3dVbmV4cGVjdGVkKHRva2VuKTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIC8vIFJldHVybiB0cnVlIGlmIHRoZSBuZXh0IHRva2VuIG1hdGNoZXMgdGhlIHNw
ZWNpZmllZCBwdW5jdHVhdG9yLgorCisgICAgZnVuY3Rpb24gbWF0Y2godmFsdWUpIHsKKyAgICAg
ICAgcmV0dXJuIGxvb2thaGVhZC50eXBlID09PSBUb2tlbi5QdW5jdHVhdG9yICYmIGxvb2thaGVh
ZC52YWx1ZSA9PT0gdmFsdWU7CisgICAgfQorCisgICAgLy8gUmV0dXJuIHRydWUgaWYgdGhlIG5l
eHQgdG9rZW4gbWF0Y2hlcyB0aGUgc3BlY2lmaWVkIGtleXdvcmQKKworICAgIGZ1bmN0aW9uIG1h
dGNoS2V5d29yZChrZXl3b3JkKSB7CisgICAgICAgIHJldHVybiBsb29rYWhlYWQudHlwZSA9PT0g
VG9rZW4uS2V5d29yZCAmJiBsb29rYWhlYWQudmFsdWUgPT09IGtleXdvcmQ7CisgICAgfQorCisg
ICAgLy8gUmV0dXJuIHRydWUgaWYgdGhlIG5leHQgdG9rZW4gaXMgYW4gYXNzaWdubWVudCBvcGVy
YXRvcgorCisgICAgZnVuY3Rpb24gbWF0Y2hBc3NpZ24oKSB7CisgICAgICAgIHZhciBvcDsKKwor
ICAgICAgICBpZiAobG9va2FoZWFkLnR5cGUgIT09IFRva2VuLlB1bmN0dWF0b3IpIHsKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBvcCA9IGxvb2thaGVhZC52
YWx1ZTsKKyAgICAgICAgcmV0dXJuIG9wID09PSAnPScgfHwKKyAgICAgICAgICAgIG9wID09PSAn
Kj0nIHx8CisgICAgICAgICAgICBvcCA9PT0gJy89JyB8fAorICAgICAgICAgICAgb3AgPT09ICcl
PScgfHwKKyAgICAgICAgICAgIG9wID09PSAnKz0nIHx8CisgICAgICAgICAgICBvcCA9PT0gJy09
JyB8fAorICAgICAgICAgICAgb3AgPT09ICc8PD0nIHx8CisgICAgICAgICAgICBvcCA9PT0gJz4+
PScgfHwKKyAgICAgICAgICAgIG9wID09PSAnPj4+PScgfHwKKyAgICAgICAgICAgIG9wID09PSAn
Jj0nIHx8CisgICAgICAgICAgICBvcCA9PT0gJ149JyB8fAorICAgICAgICAgICAgb3AgPT09ICd8
PSc7CisgICAgfQorCisgICAgZnVuY3Rpb24gY29uc3VtZVNlbWljb2xvbigpIHsKKyAgICAgICAg
dmFyIGxpbmU7CisKKyAgICAgICAgLy8gQ2F0Y2ggdGhlIHZlcnkgY29tbW9uIGNhc2UgZmlyc3Q6
IGltbWVkaWF0ZWx5IGEgc2VtaWNvbG9uIChVKzAwM0IpLgorICAgICAgICBpZiAoc291cmNlLmNo
YXJDb2RlQXQoaW5kZXgpID09PSAweDNCIHx8IG1hdGNoKCc7JykpIHsKKyAgICAgICAgICAgIGxl
eCgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgbGluZSA9IGxp
bmVOdW1iZXI7CisgICAgICAgIHNraXBDb21tZW50KCk7CisgICAgICAgIGlmIChsaW5lTnVtYmVy
ICE9PSBsaW5lKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBp
ZiAobG9va2FoZWFkLnR5cGUgIT09IFRva2VuLkVPRiAmJiAhbWF0Y2goJ30nKSkgeworICAgICAg
ICAgICAgdGhyb3dVbmV4cGVjdGVkKGxvb2thaGVhZCk7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICAvLyBSZXR1cm4gdHJ1ZSBpZiBwcm92aWRlZCBleHByZXNzaW9uIGlzIExlZnRIYW5kU2lkZUV4
cHJlc3Npb24KKworICAgIGZ1bmN0aW9uIGlzTGVmdEhhbmRTaWRlKGV4cHIpIHsKKyAgICAgICAg
cmV0dXJuIGV4cHIudHlwZSA9PT0gU3ludGF4LklkZW50aWZpZXIgfHwgZXhwci50eXBlID09PSBT
eW50YXguTWVtYmVyRXhwcmVzc2lvbjsKKyAgICB9CisKKyAgICAvLyAxMS4xLjQgQXJyYXkgSW5p
dGlhbGlzZXIKKworICAgIGZ1bmN0aW9uIHBhcnNlQXJyYXlJbml0aWFsaXNlcigpIHsKKyAgICAg
ICAgdmFyIGVsZW1lbnRzID0gW10sIHN0YXJ0VG9rZW47CisKKyAgICAgICAgc3RhcnRUb2tlbiA9
IGxvb2thaGVhZDsKKyAgICAgICAgZXhwZWN0KCdbJyk7CisKKyAgICAgICAgd2hpbGUgKCFtYXRj
aCgnXScpKSB7CisgICAgICAgICAgICBpZiAobWF0Y2goJywnKSkgeworICAgICAgICAgICAgICAg
IGxleCgpOworICAgICAgICAgICAgICAgIGVsZW1lbnRzLnB1c2gobnVsbCk7CisgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGVsZW1lbnRzLnB1c2gocGFyc2VBc3NpZ25tZW50
RXhwcmVzc2lvbigpKTsKKworICAgICAgICAgICAgICAgIGlmICghbWF0Y2goJ10nKSkgeworICAg
ICAgICAgICAgICAgICAgICBleHBlY3QoJywnKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKworICAgICAgICBsZXgoKTsKKworICAgICAgICByZXR1cm4gZGVs
ZWdhdGUubWFya0VuZChkZWxlZ2F0ZS5jcmVhdGVBcnJheUV4cHJlc3Npb24oZWxlbWVudHMpLCBz
dGFydFRva2VuKTsKKyAgICB9CisKKyAgICAvLyAxMS4xLjUgT2JqZWN0IEluaXRpYWxpc2VyCisK
KyAgICBmdW5jdGlvbiBwYXJzZVByb3BlcnR5RnVuY3Rpb24ocGFyYW0sIGZpcnN0KSB7CisgICAg
ICAgIHZhciBwcmV2aW91c1N0cmljdCwgYm9keSwgc3RhcnRUb2tlbjsKKworICAgICAgICBwcmV2
aW91c1N0cmljdCA9IHN0cmljdDsKKyAgICAgICAgc3RhcnRUb2tlbiA9IGxvb2thaGVhZDsKKyAg
ICAgICAgYm9keSA9IHBhcnNlRnVuY3Rpb25Tb3VyY2VFbGVtZW50cygpOworICAgICAgICBpZiAo
Zmlyc3QgJiYgc3RyaWN0ICYmIGlzUmVzdHJpY3RlZFdvcmQocGFyYW1bMF0ubmFtZSkpIHsKKyAg
ICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudChmaXJzdCwgTWVzc2FnZXMuU3RyaWN0UGFyYW1O
YW1lKTsKKyAgICAgICAgfQorICAgICAgICBzdHJpY3QgPSBwcmV2aW91c1N0cmljdDsKKyAgICAg
ICAgcmV0dXJuIGRlbGVnYXRlLm1hcmtFbmQoZGVsZWdhdGUuY3JlYXRlRnVuY3Rpb25FeHByZXNz
aW9uKG51bGwsIHBhcmFtLCBbXSwgYm9keSksIHN0YXJ0VG9rZW4pOworICAgIH0KKworICAgIGZ1
bmN0aW9uIHBhcnNlT2JqZWN0UHJvcGVydHlLZXkoKSB7CisgICAgICAgIHZhciB0b2tlbiwgc3Rh
cnRUb2tlbjsKKworICAgICAgICBzdGFydFRva2VuID0gbG9va2FoZWFkOworICAgICAgICB0b2tl
biA9IGxleCgpOworCisgICAgICAgIC8vIE5vdGU6IFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIG9u
bHkgZnJvbSBwYXJzZU9iamVjdFByb3BlcnR5KCksIHdoZXJlCisgICAgICAgIC8vIEVPRiBhbmQg
UHVuY3R1YXRvciB0b2tlbnMgYXJlIGFscmVhZHkgZmlsdGVyZWQgb3V0LgorCisgICAgICAgIGlm
ICh0b2tlbi50eXBlID09PSBUb2tlbi5TdHJpbmdMaXRlcmFsIHx8IHRva2VuLnR5cGUgPT09IFRv
a2VuLk51bWVyaWNMaXRlcmFsKSB7CisgICAgICAgICAgICBpZiAoc3RyaWN0ICYmIHRva2VuLm9j
dGFsKSB7CisgICAgICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KHRva2VuLCBNZXNzYWdl
cy5TdHJpY3RPY3RhbExpdGVyYWwpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJu
IGRlbGVnYXRlLm1hcmtFbmQoZGVsZWdhdGUuY3JlYXRlTGl0ZXJhbCh0b2tlbiksIHN0YXJ0VG9r
ZW4pOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGRlbGVnYXRlLm1hcmtFbmQoZGVsZWdh
dGUuY3JlYXRlSWRlbnRpZmllcih0b2tlbi52YWx1ZSksIHN0YXJ0VG9rZW4pOworICAgIH0KKwor
ICAgIGZ1bmN0aW9uIHBhcnNlT2JqZWN0UHJvcGVydHkoKSB7CisgICAgICAgIHZhciB0b2tlbiwg
a2V5LCBpZCwgdmFsdWUsIHBhcmFtLCBzdGFydFRva2VuOworCisgICAgICAgIHRva2VuID0gbG9v
a2FoZWFkOworICAgICAgICBzdGFydFRva2VuID0gbG9va2FoZWFkOworCisgICAgICAgIGlmICh0
b2tlbi50eXBlID09PSBUb2tlbi5JZGVudGlmaWVyKSB7CisKKyAgICAgICAgICAgIGlkID0gcGFy
c2VPYmplY3RQcm9wZXJ0eUtleSgpOworCisgICAgICAgICAgICAvLyBQcm9wZXJ0eSBBc3NpZ25t
ZW50OiBHZXR0ZXIgYW5kIFNldHRlci4KKworICAgICAgICAgICAgaWYgKHRva2VuLnZhbHVlID09
PSAnZ2V0JyAmJiAhbWF0Y2goJzonKSkgeworICAgICAgICAgICAgICAgIGtleSA9IHBhcnNlT2Jq
ZWN0UHJvcGVydHlLZXkoKTsKKyAgICAgICAgICAgICAgICBleHBlY3QoJygnKTsKKyAgICAgICAg
ICAgICAgICBleHBlY3QoJyknKTsKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IHBhcnNlUHJvcGVy
dHlGdW5jdGlvbihbXSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGRlbGVnYXRlLm1hcmtFbmQo
ZGVsZWdhdGUuY3JlYXRlUHJvcGVydHkoJ2dldCcsIGtleSwgdmFsdWUpLCBzdGFydFRva2VuKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh0b2tlbi52YWx1ZSA9PT0gJ3NldCcgJiYg
IW1hdGNoKCc6JykpIHsKKyAgICAgICAgICAgICAgICBrZXkgPSBwYXJzZU9iamVjdFByb3BlcnR5
S2V5KCk7CisgICAgICAgICAgICAgICAgZXhwZWN0KCcoJyk7CisgICAgICAgICAgICAgICAgdG9r
ZW4gPSBsb29rYWhlYWQ7CisgICAgICAgICAgICAgICAgaWYgKHRva2VuLnR5cGUgIT09IFRva2Vu
LklkZW50aWZpZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgZXhwZWN0KCcpJyk7CisgICAgICAg
ICAgICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudCh0b2tlbiwgTWVzc2FnZXMuVW5leHBlY3Rl
ZFRva2VuLCB0b2tlbi52YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gcGFyc2VQ
cm9wZXJ0eUZ1bmN0aW9uKFtdKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgICAgICBwYXJhbSA9IFsgcGFyc2VWYXJpYWJsZUlkZW50aWZpZXIoKSBdOworICAgICAg
ICAgICAgICAgICAgICBleHBlY3QoJyknKTsKKyAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBw
YXJzZVByb3BlcnR5RnVuY3Rpb24ocGFyYW0sIHRva2VuKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGRlbGVnYXRlLm1hcmtFbmQoZGVsZWdhdGUuY3JlYXRlUHJv
cGVydHkoJ3NldCcsIGtleSwgdmFsdWUpLCBzdGFydFRva2VuKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGV4cGVjdCgnOicpOworICAgICAgICAgICAgdmFsdWUgPSBwYXJzZUFzc2lnbm1l
bnRFeHByZXNzaW9uKCk7CisgICAgICAgICAgICByZXR1cm4gZGVsZWdhdGUubWFya0VuZChkZWxl
Z2F0ZS5jcmVhdGVQcm9wZXJ0eSgnaW5pdCcsIGlkLCB2YWx1ZSksIHN0YXJ0VG9rZW4pOworICAg
ICAgICB9CisgICAgICAgIGlmICh0b2tlbi50eXBlID09PSBUb2tlbi5FT0YgfHwgdG9rZW4udHlw
ZSA9PT0gVG9rZW4uUHVuY3R1YXRvcikgeworICAgICAgICAgICAgdGhyb3dVbmV4cGVjdGVkKHRv
a2VuKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGtleSA9IHBhcnNlT2JqZWN0UHJv
cGVydHlLZXkoKTsKKyAgICAgICAgICAgIGV4cGVjdCgnOicpOworICAgICAgICAgICAgdmFsdWUg
PSBwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKCk7CisgICAgICAgICAgICByZXR1cm4gZGVsZWdh
dGUubWFya0VuZChkZWxlZ2F0ZS5jcmVhdGVQcm9wZXJ0eSgnaW5pdCcsIGtleSwgdmFsdWUpLCBz
dGFydFRva2VuKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZ1bmN0aW9uIHBhcnNlT2JqZWN0
SW5pdGlhbGlzZXIoKSB7CisgICAgICAgIHZhciBwcm9wZXJ0aWVzID0gW10sIHByb3BlcnR5LCBu
YW1lLCBrZXksIGtpbmQsIG1hcCA9IHt9LCB0b1N0cmluZyA9IFN0cmluZywgc3RhcnRUb2tlbjsK
KworICAgICAgICBzdGFydFRva2VuID0gbG9va2FoZWFkOworCisgICAgICAgIGV4cGVjdCgneycp
OworCisgICAgICAgIHdoaWxlICghbWF0Y2goJ30nKSkgeworICAgICAgICAgICAgcHJvcGVydHkg
PSBwYXJzZU9iamVjdFByb3BlcnR5KCk7CisKKyAgICAgICAgICAgIGlmIChwcm9wZXJ0eS5rZXku
dHlwZSA9PT0gU3ludGF4LklkZW50aWZpZXIpIHsKKyAgICAgICAgICAgICAgICBuYW1lID0gcHJv
cGVydHkua2V5Lm5hbWU7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIG5h
bWUgPSB0b1N0cmluZyhwcm9wZXJ0eS5rZXkudmFsdWUpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAga2luZCA9IChwcm9wZXJ0eS5raW5kID09PSAnaW5pdCcpID8gUHJvcGVydHlLaW5kLkRh
dGEgOiAocHJvcGVydHkua2luZCA9PT0gJ2dldCcpID8gUHJvcGVydHlLaW5kLkdldCA6IFByb3Bl
cnR5S2luZC5TZXQ7CisKKyAgICAgICAgICAgIGtleSA9ICckJyArIG5hbWU7CisgICAgICAgICAg
ICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1hcCwga2V5KSkgewor
ICAgICAgICAgICAgICAgIGlmIChtYXBba2V5XSA9PT0gUHJvcGVydHlLaW5kLkRhdGEpIHsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKHN0cmljdCAmJiBraW5kID09PSBQcm9wZXJ0eUtpbmQuRGF0
YSkgeworICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KHt9LCBNZXNz
YWdlcy5TdHJpY3REdXBsaWNhdGVQcm9wZXJ0eSk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxz
ZSBpZiAoa2luZCAhPT0gUHJvcGVydHlLaW5kLkRhdGEpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHRocm93RXJyb3JUb2xlcmFudCh7fSwgTWVzc2FnZXMuQWNjZXNzb3JEYXRhUHJvcGVydHkp
OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKGtpbmQgPT09IFByb3BlcnR5S2luZC5EYXRhKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQoe30sIE1lc3NhZ2VzLkFjY2Vzc29y
RGF0YVByb3BlcnR5KTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtYXBba2V5XSAm
IGtpbmQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudCh7fSwg
TWVzc2FnZXMuQWNjZXNzb3JHZXRTZXQpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIG1hcFtrZXldIHw9IGtpbmQ7CisgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgIG1hcFtrZXldID0ga2luZDsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgcHJvcGVydGllcy5wdXNoKHByb3BlcnR5KTsKKworICAgICAgICAg
ICAgaWYgKCFtYXRjaCgnfScpKSB7CisgICAgICAgICAgICAgICAgZXhwZWN0KCcsJyk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBleHBlY3QoJ30nKTsKKworICAgICAgICBy
ZXR1cm4gZGVsZWdhdGUubWFya0VuZChkZWxlZ2F0ZS5jcmVhdGVPYmplY3RFeHByZXNzaW9uKHBy
b3BlcnRpZXMpLCBzdGFydFRva2VuKTsKKyAgICB9CisKKyAgICAvLyAxMS4xLjYgVGhlIEdyb3Vw
aW5nIE9wZXJhdG9yCisKKyAgICBmdW5jdGlvbiBwYXJzZUdyb3VwRXhwcmVzc2lvbigpIHsKKyAg
ICAgICAgdmFyIGV4cHI7CisKKyAgICAgICAgZXhwZWN0KCcoJyk7CisKKyAgICAgICAgZXhwciA9
IHBhcnNlRXhwcmVzc2lvbigpOworCisgICAgICAgIGV4cGVjdCgnKScpOworCisgICAgICAgIHJl
dHVybiBleHByOworICAgIH0KKworCisgICAgLy8gMTEuMSBQcmltYXJ5IEV4cHJlc3Npb25zCisK
KyAgICBmdW5jdGlvbiBwYXJzZVByaW1hcnlFeHByZXNzaW9uKCkgeworICAgICAgICB2YXIgdHlw
ZSwgdG9rZW4sIGV4cHIsIHN0YXJ0VG9rZW47CisKKyAgICAgICAgaWYgKG1hdGNoKCcoJykpIHsK
KyAgICAgICAgICAgIHJldHVybiBwYXJzZUdyb3VwRXhwcmVzc2lvbigpOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKG1hdGNoKCdbJykpIHsKKyAgICAgICAgICAgIHJldHVybiBwYXJzZUFycmF5
SW5pdGlhbGlzZXIoKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtYXRjaCgneycpKSB7Cisg
ICAgICAgICAgICByZXR1cm4gcGFyc2VPYmplY3RJbml0aWFsaXNlcigpOworICAgICAgICB9CisK
KyAgICAgICAgdHlwZSA9IGxvb2thaGVhZC50eXBlOworICAgICAgICBzdGFydFRva2VuID0gbG9v
a2FoZWFkOworCisgICAgICAgIGlmICh0eXBlID09PSBUb2tlbi5JZGVudGlmaWVyKSB7CisgICAg
ICAgICAgICBleHByID0gIGRlbGVnYXRlLmNyZWF0ZUlkZW50aWZpZXIobGV4KCkudmFsdWUpOwor
ICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09IFRva2VuLlN0cmluZ0xpdGVyYWwgfHwgdHlwZSA9
PT0gVG9rZW4uTnVtZXJpY0xpdGVyYWwpIHsKKyAgICAgICAgICAgIGlmIChzdHJpY3QgJiYgbG9v
a2FoZWFkLm9jdGFsKSB7CisgICAgICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KGxvb2th
aGVhZCwgTWVzc2FnZXMuU3RyaWN0T2N0YWxMaXRlcmFsKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGV4cHIgPSBkZWxlZ2F0ZS5jcmVhdGVMaXRlcmFsKGxleCgpKTsKKyAgICAgICAgfSBl
bHNlIGlmICh0eXBlID09PSBUb2tlbi5LZXl3b3JkKSB7CisgICAgICAgICAgICBpZiAobWF0Y2hL
ZXl3b3JkKCdmdW5jdGlvbicpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlRnVuY3Rp
b25FeHByZXNzaW9uKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobWF0Y2hLZXl3
b3JkKCd0aGlzJykpIHsKKyAgICAgICAgICAgICAgICBsZXgoKTsKKyAgICAgICAgICAgICAgICBl
eHByID0gZGVsZWdhdGUuY3JlYXRlVGhpc0V4cHJlc3Npb24oKTsKKyAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgdGhyb3dVbmV4cGVjdGVkKGxleCgpKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSBUb2tlbi5Cb29sZWFuTGl0ZXJhbCkgewor
ICAgICAgICAgICAgdG9rZW4gPSBsZXgoKTsKKyAgICAgICAgICAgIHRva2VuLnZhbHVlID0gKHRv
a2VuLnZhbHVlID09PSAndHJ1ZScpOworICAgICAgICAgICAgZXhwciA9IGRlbGVnYXRlLmNyZWF0
ZUxpdGVyYWwodG9rZW4pOworICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09IFRva2VuLk51bGxM
aXRlcmFsKSB7CisgICAgICAgICAgICB0b2tlbiA9IGxleCgpOworICAgICAgICAgICAgdG9rZW4u
dmFsdWUgPSBudWxsOworICAgICAgICAgICAgZXhwciA9IGRlbGVnYXRlLmNyZWF0ZUxpdGVyYWwo
dG9rZW4pOworICAgICAgICB9IGVsc2UgaWYgKG1hdGNoKCcvJykgfHwgbWF0Y2goJy89JykpIHsK
KyAgICAgICAgICAgIGlmICh0eXBlb2YgZXh0cmEudG9rZW5zICE9PSAndW5kZWZpbmVkJykgewor
ICAgICAgICAgICAgICAgIGV4cHIgPSBkZWxlZ2F0ZS5jcmVhdGVMaXRlcmFsKGNvbGxlY3RSZWdl
eCgpKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZXhwciA9IGRlbGVn
YXRlLmNyZWF0ZUxpdGVyYWwoc2NhblJlZ0V4cCgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIHBlZWsoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHRocm93VW5leHBlY3Rl
ZChsZXgoKSk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gZGVsZWdhdGUubWFya0VuZChl
eHByLCBzdGFydFRva2VuKTsKKyAgICB9CisKKyAgICAvLyAxMS4yIExlZnQtSGFuZC1TaWRlIEV4
cHJlc3Npb25zCisKKyAgICBmdW5jdGlvbiBwYXJzZUFyZ3VtZW50cygpIHsKKyAgICAgICAgdmFy
IGFyZ3MgPSBbXTsKKworICAgICAgICBleHBlY3QoJygnKTsKKworICAgICAgICBpZiAoIW1hdGNo
KCcpJykpIHsKKyAgICAgICAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkgeworICAgICAgICAg
ICAgICAgIGFyZ3MucHVzaChwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKCkpOworICAgICAgICAg
ICAgICAgIGlmIChtYXRjaCgnKScpKSB7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBleHBlY3QoJywnKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorCisgICAgICAgIGV4cGVjdCgnKScpOworCisgICAgICAgIHJldHVybiBh
cmdzOworICAgIH0KKworICAgIGZ1bmN0aW9uIHBhcnNlTm9uQ29tcHV0ZWRQcm9wZXJ0eSgpIHsK
KyAgICAgICAgdmFyIHRva2VuLCBzdGFydFRva2VuOworCisgICAgICAgIHN0YXJ0VG9rZW4gPSBs
b29rYWhlYWQ7CisgICAgICAgIHRva2VuID0gbGV4KCk7CisKKyAgICAgICAgaWYgKCFpc0lkZW50
aWZpZXJOYW1lKHRva2VuKSkgeworICAgICAgICAgICAgdGhyb3dVbmV4cGVjdGVkKHRva2VuKTsK
KyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5tYXJrRW5kKGRlbGVnYXRlLmNy
ZWF0ZUlkZW50aWZpZXIodG9rZW4udmFsdWUpLCBzdGFydFRva2VuKTsKKyAgICB9CisKKyAgICBm
dW5jdGlvbiBwYXJzZU5vbkNvbXB1dGVkTWVtYmVyKCkgeworICAgICAgICBleHBlY3QoJy4nKTsK
KworICAgICAgICByZXR1cm4gcGFyc2VOb25Db21wdXRlZFByb3BlcnR5KCk7CisgICAgfQorCisg
ICAgZnVuY3Rpb24gcGFyc2VDb21wdXRlZE1lbWJlcigpIHsKKyAgICAgICAgdmFyIGV4cHI7CisK
KyAgICAgICAgZXhwZWN0KCdbJyk7CisKKyAgICAgICAgZXhwciA9IHBhcnNlRXhwcmVzc2lvbigp
OworCisgICAgICAgIGV4cGVjdCgnXScpOworCisgICAgICAgIHJldHVybiBleHByOworICAgIH0K
KworICAgIGZ1bmN0aW9uIHBhcnNlTmV3RXhwcmVzc2lvbigpIHsKKyAgICAgICAgdmFyIGNhbGxl
ZSwgYXJncywgc3RhcnRUb2tlbjsKKworICAgICAgICBzdGFydFRva2VuID0gbG9va2FoZWFkOwor
ICAgICAgICBleHBlY3RLZXl3b3JkKCduZXcnKTsKKyAgICAgICAgY2FsbGVlID0gcGFyc2VMZWZ0
SGFuZFNpZGVFeHByZXNzaW9uKCk7CisgICAgICAgIGFyZ3MgPSBtYXRjaCgnKCcpID8gcGFyc2VB
cmd1bWVudHMoKSA6IFtdOworCisgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5tYXJrRW5kKGRlbGVn
YXRlLmNyZWF0ZU5ld0V4cHJlc3Npb24oY2FsbGVlLCBhcmdzKSwgc3RhcnRUb2tlbik7CisgICAg
fQorCisgICAgZnVuY3Rpb24gcGFyc2VMZWZ0SGFuZFNpZGVFeHByZXNzaW9uQWxsb3dDYWxsKCkg
eworICAgICAgICB2YXIgcHJldmlvdXNBbGxvd0luLCBleHByLCBhcmdzLCBwcm9wZXJ0eSwgc3Rh
cnRUb2tlbjsKKworICAgICAgICBzdGFydFRva2VuID0gbG9va2FoZWFkOworCisgICAgICAgIHBy
ZXZpb3VzQWxsb3dJbiA9IHN0YXRlLmFsbG93SW47CisgICAgICAgIHN0YXRlLmFsbG93SW4gPSB0
cnVlOworICAgICAgICBleHByID0gbWF0Y2hLZXl3b3JkKCduZXcnKSA/IHBhcnNlTmV3RXhwcmVz
c2lvbigpIDogcGFyc2VQcmltYXJ5RXhwcmVzc2lvbigpOworICAgICAgICBzdGF0ZS5hbGxvd0lu
ID0gcHJldmlvdXNBbGxvd0luOworCisgICAgICAgIGZvciAoOzspIHsKKyAgICAgICAgICAgIGlm
IChtYXRjaCgnLicpKSB7CisgICAgICAgICAgICAgICAgcHJvcGVydHkgPSBwYXJzZU5vbkNvbXB1
dGVkTWVtYmVyKCk7CisgICAgICAgICAgICAgICAgZXhwciA9IGRlbGVnYXRlLmNyZWF0ZU1lbWJl
ckV4cHJlc3Npb24oJy4nLCBleHByLCBwcm9wZXJ0eSk7CisgICAgICAgICAgICB9IGVsc2UgaWYg
KG1hdGNoKCcoJykpIHsKKyAgICAgICAgICAgICAgICBhcmdzID0gcGFyc2VBcmd1bWVudHMoKTsK
KyAgICAgICAgICAgICAgICBleHByID0gZGVsZWdhdGUuY3JlYXRlQ2FsbEV4cHJlc3Npb24oZXhw
ciwgYXJncyk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKG1hdGNoKCdbJykpIHsKKyAgICAgICAg
ICAgICAgICBwcm9wZXJ0eSA9IHBhcnNlQ29tcHV0ZWRNZW1iZXIoKTsKKyAgICAgICAgICAgICAg
ICBleHByID0gZGVsZWdhdGUuY3JlYXRlTWVtYmVyRXhwcmVzc2lvbignWycsIGV4cHIsIHByb3Bl
cnR5KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBkZWxlZ2F0ZS5tYXJrRW5kKGV4cHIsIHN0YXJ0VG9rZW4p
OworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGV4cHI7CisgICAgfQorCisgICAgZnVuY3Rp
b24gcGFyc2VMZWZ0SGFuZFNpZGVFeHByZXNzaW9uKCkgeworICAgICAgICB2YXIgcHJldmlvdXNB
bGxvd0luLCBleHByLCBwcm9wZXJ0eSwgc3RhcnRUb2tlbjsKKworICAgICAgICBzdGFydFRva2Vu
ID0gbG9va2FoZWFkOworCisgICAgICAgIHByZXZpb3VzQWxsb3dJbiA9IHN0YXRlLmFsbG93SW47
CisgICAgICAgIGV4cHIgPSBtYXRjaEtleXdvcmQoJ25ldycpID8gcGFyc2VOZXdFeHByZXNzaW9u
KCkgOiBwYXJzZVByaW1hcnlFeHByZXNzaW9uKCk7CisgICAgICAgIHN0YXRlLmFsbG93SW4gPSBw
cmV2aW91c0FsbG93SW47CisKKyAgICAgICAgd2hpbGUgKG1hdGNoKCcuJykgfHwgbWF0Y2goJ1sn
KSkgeworICAgICAgICAgICAgaWYgKG1hdGNoKCdbJykpIHsKKyAgICAgICAgICAgICAgICBwcm9w
ZXJ0eSA9IHBhcnNlQ29tcHV0ZWRNZW1iZXIoKTsKKyAgICAgICAgICAgICAgICBleHByID0gZGVs
ZWdhdGUuY3JlYXRlTWVtYmVyRXhwcmVzc2lvbignWycsIGV4cHIsIHByb3BlcnR5KTsKKyAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcHJvcGVydHkgPSBwYXJzZU5vbkNvbXB1
dGVkTWVtYmVyKCk7CisgICAgICAgICAgICAgICAgZXhwciA9IGRlbGVnYXRlLmNyZWF0ZU1lbWJl
ckV4cHJlc3Npb24oJy4nLCBleHByLCBwcm9wZXJ0eSk7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBkZWxlZ2F0ZS5tYXJrRW5kKGV4cHIsIHN0YXJ0VG9rZW4pOworICAgICAgICB9CisKKyAg
ICAgICAgcmV0dXJuIGV4cHI7CisgICAgfQorCisgICAgLy8gMTEuMyBQb3N0Zml4IEV4cHJlc3Np
b25zCisKKyAgICBmdW5jdGlvbiBwYXJzZVBvc3RmaXhFeHByZXNzaW9uKCkgeworICAgICAgICB2
YXIgZXhwciwgdG9rZW4sIHN0YXJ0VG9rZW4gPSBsb29rYWhlYWQ7CisKKyAgICAgICAgZXhwciA9
IHBhcnNlTGVmdEhhbmRTaWRlRXhwcmVzc2lvbkFsbG93Q2FsbCgpOworCisgICAgICAgIGlmIChs
b29rYWhlYWQudHlwZSA9PT0gVG9rZW4uUHVuY3R1YXRvcikgeworICAgICAgICAgICAgaWYgKCht
YXRjaCgnKysnKSB8fCBtYXRjaCgnLS0nKSkgJiYgIXBlZWtMaW5lVGVybWluYXRvcigpKSB7Cisg
ICAgICAgICAgICAgICAgLy8gMTEuMy4xLCAxMS4zLjIKKyAgICAgICAgICAgICAgICBpZiAoc3Ry
aWN0ICYmIGV4cHIudHlwZSA9PT0gU3ludGF4LklkZW50aWZpZXIgJiYgaXNSZXN0cmljdGVkV29y
ZChleHByLm5hbWUpKSB7CisgICAgICAgICAgICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudCh7
fSwgTWVzc2FnZXMuU3RyaWN0TEhTUG9zdGZpeCk7CisgICAgICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAgICAgaWYgKCFpc0xlZnRIYW5kU2lkZShleHByKSkgeworICAgICAgICAgICAgICAg
ICAgICB0aHJvd0Vycm9yVG9sZXJhbnQoe30sIE1lc3NhZ2VzLkludmFsaWRMSFNJbkFzc2lnbm1l
bnQpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHRva2VuID0gbGV4KCk7
CisgICAgICAgICAgICAgICAgZXhwciA9IGRlbGVnYXRlLm1hcmtFbmQoZGVsZWdhdGUuY3JlYXRl
UG9zdGZpeEV4cHJlc3Npb24odG9rZW4udmFsdWUsIGV4cHIpLCBzdGFydFRva2VuKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBleHByOworICAgIH0KKworICAg
IC8vIDExLjQgVW5hcnkgT3BlcmF0b3JzCisKKyAgICBmdW5jdGlvbiBwYXJzZVVuYXJ5RXhwcmVz
c2lvbigpIHsKKyAgICAgICAgdmFyIHRva2VuLCBleHByLCBzdGFydFRva2VuOworCisgICAgICAg
IGlmIChsb29rYWhlYWQudHlwZSAhPT0gVG9rZW4uUHVuY3R1YXRvciAmJiBsb29rYWhlYWQudHlw
ZSAhPT0gVG9rZW4uS2V5d29yZCkgeworICAgICAgICAgICAgZXhwciA9IHBhcnNlUG9zdGZpeEV4
cHJlc3Npb24oKTsKKyAgICAgICAgfSBlbHNlIGlmIChtYXRjaCgnKysnKSB8fCBtYXRjaCgnLS0n
KSkgeworICAgICAgICAgICAgc3RhcnRUb2tlbiA9IGxvb2thaGVhZDsKKyAgICAgICAgICAgIHRv
a2VuID0gbGV4KCk7CisgICAgICAgICAgICBleHByID0gcGFyc2VVbmFyeUV4cHJlc3Npb24oKTsK
KyAgICAgICAgICAgIC8vIDExLjQuNCwgMTEuNC41CisgICAgICAgICAgICBpZiAoc3RyaWN0ICYm
IGV4cHIudHlwZSA9PT0gU3ludGF4LklkZW50aWZpZXIgJiYgaXNSZXN0cmljdGVkV29yZChleHBy
Lm5hbWUpKSB7CisgICAgICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KHt9LCBNZXNzYWdl
cy5TdHJpY3RMSFNQcmVmaXgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIWlz
TGVmdEhhbmRTaWRlKGV4cHIpKSB7CisgICAgICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50
KHt9LCBNZXNzYWdlcy5JbnZhbGlkTEhTSW5Bc3NpZ25tZW50KTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgZXhwciA9IGRlbGVnYXRlLmNyZWF0ZVVuYXJ5RXhwcmVzc2lvbih0b2tlbi52
YWx1ZSwgZXhwcik7CisgICAgICAgICAgICBleHByID0gZGVsZWdhdGUubWFya0VuZChleHByLCBz
dGFydFRva2VuKTsKKyAgICAgICAgfSBlbHNlIGlmIChtYXRjaCgnKycpIHx8IG1hdGNoKCctJykg
fHwgbWF0Y2goJ34nKSB8fCBtYXRjaCgnIScpKSB7CisgICAgICAgICAgICBzdGFydFRva2VuID0g
bG9va2FoZWFkOworICAgICAgICAgICAgdG9rZW4gPSBsZXgoKTsKKyAgICAgICAgICAgIGV4cHIg
PSBwYXJzZVVuYXJ5RXhwcmVzc2lvbigpOworICAgICAgICAgICAgZXhwciA9IGRlbGVnYXRlLmNy
ZWF0ZVVuYXJ5RXhwcmVzc2lvbih0b2tlbi52YWx1ZSwgZXhwcik7CisgICAgICAgICAgICBleHBy
ID0gZGVsZWdhdGUubWFya0VuZChleHByLCBzdGFydFRva2VuKTsKKyAgICAgICAgfSBlbHNlIGlm
IChtYXRjaEtleXdvcmQoJ2RlbGV0ZScpIHx8IG1hdGNoS2V5d29yZCgndm9pZCcpIHx8IG1hdGNo
S2V5d29yZCgndHlwZW9mJykpIHsKKyAgICAgICAgICAgIHN0YXJ0VG9rZW4gPSBsb29rYWhlYWQ7
CisgICAgICAgICAgICB0b2tlbiA9IGxleCgpOworICAgICAgICAgICAgZXhwciA9IHBhcnNlVW5h
cnlFeHByZXNzaW9uKCk7CisgICAgICAgICAgICBleHByID0gZGVsZWdhdGUuY3JlYXRlVW5hcnlF
eHByZXNzaW9uKHRva2VuLnZhbHVlLCBleHByKTsKKyAgICAgICAgICAgIGV4cHIgPSBkZWxlZ2F0
ZS5tYXJrRW5kKGV4cHIsIHN0YXJ0VG9rZW4pOworICAgICAgICAgICAgaWYgKHN0cmljdCAmJiBl
eHByLm9wZXJhdG9yID09PSAnZGVsZXRlJyAmJiBleHByLmFyZ3VtZW50LnR5cGUgPT09IFN5bnRh
eC5JZGVudGlmaWVyKSB7CisgICAgICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KHt9LCBN
ZXNzYWdlcy5TdHJpY3REZWxldGUpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgZXhwciA9IHBhcnNlUG9zdGZpeEV4cHJlc3Npb24oKTsKKyAgICAgICAgfQor
CisgICAgICAgIHJldHVybiBleHByOworICAgIH0KKworICAgIGZ1bmN0aW9uIGJpbmFyeVByZWNl
ZGVuY2UodG9rZW4sIGFsbG93SW4pIHsKKyAgICAgICAgdmFyIHByZWMgPSAwOworCisgICAgICAg
IGlmICh0b2tlbi50eXBlICE9PSBUb2tlbi5QdW5jdHVhdG9yICYmIHRva2VuLnR5cGUgIT09IFRv
a2VuLktleXdvcmQpIHsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisKKyAgICAg
ICAgc3dpdGNoICh0b2tlbi52YWx1ZSkgeworICAgICAgICBjYXNlICd8fCc6CisgICAgICAgICAg
ICBwcmVjID0gMTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgJyYmJzoKKyAg
ICAgICAgICAgIHByZWMgPSAyOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSAn
fCc6CisgICAgICAgICAgICBwcmVjID0gMzsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAg
IGNhc2UgJ14nOgorICAgICAgICAgICAgcHJlYyA9IDQ7CisgICAgICAgICAgICBicmVhazsKKwor
ICAgICAgICBjYXNlICcmJzoKKyAgICAgICAgICAgIHByZWMgPSA1OworICAgICAgICAgICAgYnJl
YWs7CisKKyAgICAgICAgY2FzZSAnPT0nOgorICAgICAgICBjYXNlICchPSc6CisgICAgICAgIGNh
c2UgJz09PSc6CisgICAgICAgIGNhc2UgJyE9PSc6CisgICAgICAgICAgICBwcmVjID0gNjsKKyAg
ICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgJzwnOgorICAgICAgICBjYXNlICc+JzoK
KyAgICAgICAgY2FzZSAnPD0nOgorICAgICAgICBjYXNlICc+PSc6CisgICAgICAgIGNhc2UgJ2lu
c3RhbmNlb2YnOgorICAgICAgICAgICAgcHJlYyA9IDc7CisgICAgICAgICAgICBicmVhazsKKwor
ICAgICAgICBjYXNlICdpbic6CisgICAgICAgICAgICBwcmVjID0gYWxsb3dJbiA/IDcgOiAwOwor
ICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSAnPDwnOgorICAgICAgICBjYXNlICc+
Pic6CisgICAgICAgIGNhc2UgJz4+Pic6CisgICAgICAgICAgICBwcmVjID0gODsKKyAgICAgICAg
ICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgJysnOgorICAgICAgICBjYXNlICctJzoKKyAgICAg
ICAgICAgIHByZWMgPSA5OworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSAnKic6
CisgICAgICAgIGNhc2UgJy8nOgorICAgICAgICBjYXNlICclJzoKKyAgICAgICAgICAgIHByZWMg
PSAxMTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBwcmVjOworICAgIH0KKworICAg
IC8vIDExLjUgTXVsdGlwbGljYXRpdmUgT3BlcmF0b3JzCisgICAgLy8gMTEuNiBBZGRpdGl2ZSBP
cGVyYXRvcnMKKyAgICAvLyAxMS43IEJpdHdpc2UgU2hpZnQgT3BlcmF0b3JzCisgICAgLy8gMTEu
OCBSZWxhdGlvbmFsIE9wZXJhdG9ycworICAgIC8vIDExLjkgRXF1YWxpdHkgT3BlcmF0b3JzCisg
ICAgLy8gMTEuMTAgQmluYXJ5IEJpdHdpc2UgT3BlcmF0b3JzCisgICAgLy8gMTEuMTEgQmluYXJ5
IExvZ2ljYWwgT3BlcmF0b3JzCisKKyAgICBmdW5jdGlvbiBwYXJzZUJpbmFyeUV4cHJlc3Npb24o
KSB7CisgICAgICAgIHZhciBtYXJrZXIsIG1hcmtlcnMsIGV4cHIsIHRva2VuLCBwcmVjLCBzdGFj
aywgcmlnaHQsIG9wZXJhdG9yLCBsZWZ0LCBpOworCisgICAgICAgIG1hcmtlciA9IGxvb2thaGVh
ZDsKKyAgICAgICAgbGVmdCA9IHBhcnNlVW5hcnlFeHByZXNzaW9uKCk7CisKKyAgICAgICAgdG9r
ZW4gPSBsb29rYWhlYWQ7CisgICAgICAgIHByZWMgPSBiaW5hcnlQcmVjZWRlbmNlKHRva2VuLCBz
dGF0ZS5hbGxvd0luKTsKKyAgICAgICAgaWYgKHByZWMgPT09IDApIHsKKyAgICAgICAgICAgIHJl
dHVybiBsZWZ0OworICAgICAgICB9CisgICAgICAgIHRva2VuLnByZWMgPSBwcmVjOworICAgICAg
ICBsZXgoKTsKKworICAgICAgICBtYXJrZXJzID0gW21hcmtlciwgbG9va2FoZWFkXTsKKyAgICAg
ICAgcmlnaHQgPSBwYXJzZVVuYXJ5RXhwcmVzc2lvbigpOworCisgICAgICAgIHN0YWNrID0gW2xl
ZnQsIHRva2VuLCByaWdodF07CisKKyAgICAgICAgd2hpbGUgKChwcmVjID0gYmluYXJ5UHJlY2Vk
ZW5jZShsb29rYWhlYWQsIHN0YXRlLmFsbG93SW4pKSA+IDApIHsKKworICAgICAgICAgICAgLy8g
UmVkdWNlOiBtYWtlIGEgYmluYXJ5IGV4cHJlc3Npb24gZnJvbSB0aGUgdGhyZWUgdG9wbW9zdCBl
bnRyaWVzLgorICAgICAgICAgICAgd2hpbGUgKChzdGFjay5sZW5ndGggPiAyKSAmJiAocHJlYyA8
PSBzdGFja1tzdGFjay5sZW5ndGggLSAyXS5wcmVjKSkgeworICAgICAgICAgICAgICAgIHJpZ2h0
ID0gc3RhY2sucG9wKCk7CisgICAgICAgICAgICAgICAgb3BlcmF0b3IgPSBzdGFjay5wb3AoKS52
YWx1ZTsKKyAgICAgICAgICAgICAgICBsZWZ0ID0gc3RhY2sucG9wKCk7CisgICAgICAgICAgICAg
ICAgZXhwciA9IGRlbGVnYXRlLmNyZWF0ZUJpbmFyeUV4cHJlc3Npb24ob3BlcmF0b3IsIGxlZnQs
IHJpZ2h0KTsKKyAgICAgICAgICAgICAgICBtYXJrZXJzLnBvcCgpOworICAgICAgICAgICAgICAg
IG1hcmtlciA9IG1hcmtlcnNbbWFya2Vycy5sZW5ndGggLSAxXTsKKyAgICAgICAgICAgICAgICBk
ZWxlZ2F0ZS5tYXJrRW5kKGV4cHIsIG1hcmtlcik7CisgICAgICAgICAgICAgICAgc3RhY2sucHVz
aChleHByKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gU2hpZnQuCisgICAgICAg
ICAgICB0b2tlbiA9IGxleCgpOworICAgICAgICAgICAgdG9rZW4ucHJlYyA9IHByZWM7CisgICAg
ICAgICAgICBzdGFjay5wdXNoKHRva2VuKTsKKyAgICAgICAgICAgIG1hcmtlcnMucHVzaChsb29r
YWhlYWQpOworICAgICAgICAgICAgZXhwciA9IHBhcnNlVW5hcnlFeHByZXNzaW9uKCk7CisgICAg
ICAgICAgICBzdGFjay5wdXNoKGV4cHIpOworICAgICAgICB9CisKKyAgICAgICAgLy8gRmluYWwg
cmVkdWNlIHRvIGNsZWFuLXVwIHRoZSBzdGFjay4KKyAgICAgICAgaSA9IHN0YWNrLmxlbmd0aCAt
IDE7CisgICAgICAgIGV4cHIgPSBzdGFja1tpXTsKKyAgICAgICAgbWFya2Vycy5wb3AoKTsKKyAg
ICAgICAgd2hpbGUgKGkgPiAxKSB7CisgICAgICAgICAgICBleHByID0gZGVsZWdhdGUuY3JlYXRl
QmluYXJ5RXhwcmVzc2lvbihzdGFja1tpIC0gMV0udmFsdWUsIHN0YWNrW2kgLSAyXSwgZXhwcik7
CisgICAgICAgICAgICBpIC09IDI7CisgICAgICAgICAgICBtYXJrZXIgPSBtYXJrZXJzLnBvcCgp
OworICAgICAgICAgICAgZGVsZWdhdGUubWFya0VuZChleHByLCBtYXJrZXIpOworICAgICAgICB9
CisKKyAgICAgICAgcmV0dXJuIGV4cHI7CisgICAgfQorCisKKyAgICAvLyAxMS4xMiBDb25kaXRp
b25hbCBPcGVyYXRvcgorCisgICAgZnVuY3Rpb24gcGFyc2VDb25kaXRpb25hbEV4cHJlc3Npb24o
KSB7CisgICAgICAgIHZhciBleHByLCBwcmV2aW91c0FsbG93SW4sIGNvbnNlcXVlbnQsIGFsdGVy
bmF0ZSwgc3RhcnRUb2tlbjsKKworICAgICAgICBzdGFydFRva2VuID0gbG9va2FoZWFkOworCisg
ICAgICAgIGV4cHIgPSBwYXJzZUJpbmFyeUV4cHJlc3Npb24oKTsKKworICAgICAgICBpZiAobWF0
Y2goJz8nKSkgeworICAgICAgICAgICAgbGV4KCk7CisgICAgICAgICAgICBwcmV2aW91c0FsbG93
SW4gPSBzdGF0ZS5hbGxvd0luOworICAgICAgICAgICAgc3RhdGUuYWxsb3dJbiA9IHRydWU7Cisg
ICAgICAgICAgICBjb25zZXF1ZW50ID0gcGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbigpOworICAg
ICAgICAgICAgc3RhdGUuYWxsb3dJbiA9IHByZXZpb3VzQWxsb3dJbjsKKyAgICAgICAgICAgIGV4
cGVjdCgnOicpOworICAgICAgICAgICAgYWx0ZXJuYXRlID0gcGFyc2VBc3NpZ25tZW50RXhwcmVz
c2lvbigpOworCisgICAgICAgICAgICBleHByID0gZGVsZWdhdGUuY3JlYXRlQ29uZGl0aW9uYWxF
eHByZXNzaW9uKGV4cHIsIGNvbnNlcXVlbnQsIGFsdGVybmF0ZSk7CisgICAgICAgICAgICBkZWxl
Z2F0ZS5tYXJrRW5kKGV4cHIsIHN0YXJ0VG9rZW4pOworICAgICAgICB9CisKKyAgICAgICAgcmV0
dXJuIGV4cHI7CisgICAgfQorCisgICAgLy8gMTEuMTMgQXNzaWdubWVudCBPcGVyYXRvcnMKKwor
ICAgIGZ1bmN0aW9uIHBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24oKSB7CisgICAgICAgIHZhciB0
b2tlbiwgbGVmdCwgcmlnaHQsIG5vZGUsIHN0YXJ0VG9rZW47CisKKyAgICAgICAgdG9rZW4gPSBs
b29rYWhlYWQ7CisgICAgICAgIHN0YXJ0VG9rZW4gPSBsb29rYWhlYWQ7CisKKyAgICAgICAgbm9k
ZSA9IGxlZnQgPSBwYXJzZUNvbmRpdGlvbmFsRXhwcmVzc2lvbigpOworCisgICAgICAgIGlmICht
YXRjaEFzc2lnbigpKSB7CisgICAgICAgICAgICAvLyBMZWZ0SGFuZFNpZGVFeHByZXNzaW9uCisg
ICAgICAgICAgICBpZiAoIWlzTGVmdEhhbmRTaWRlKGxlZnQpKSB7CisgICAgICAgICAgICAgICAg
dGhyb3dFcnJvclRvbGVyYW50KHt9LCBNZXNzYWdlcy5JbnZhbGlkTEhTSW5Bc3NpZ25tZW50KTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gMTEuMTMuMQorICAgICAgICAgICAgaWYg
KHN0cmljdCAmJiBsZWZ0LnR5cGUgPT09IFN5bnRheC5JZGVudGlmaWVyICYmIGlzUmVzdHJpY3Rl
ZFdvcmQobGVmdC5uYW1lKSkgeworICAgICAgICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudCh0
b2tlbiwgTWVzc2FnZXMuU3RyaWN0TEhTQXNzaWdubWVudCk7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIHRva2VuID0gbGV4KCk7CisgICAgICAgICAgICByaWdodCA9IHBhcnNlQXNzaWdu
bWVudEV4cHJlc3Npb24oKTsKKyAgICAgICAgICAgIG5vZGUgPSBkZWxlZ2F0ZS5tYXJrRW5kKGRl
bGVnYXRlLmNyZWF0ZUFzc2lnbm1lbnRFeHByZXNzaW9uKHRva2VuLnZhbHVlLCBsZWZ0LCByaWdo
dCksIHN0YXJ0VG9rZW4pOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIG5vZGU7CisgICAg
fQorCisgICAgLy8gMTEuMTQgQ29tbWEgT3BlcmF0b3IKKworICAgIGZ1bmN0aW9uIHBhcnNlRXhw
cmVzc2lvbigpIHsKKyAgICAgICAgdmFyIGV4cHIsIHN0YXJ0VG9rZW4gPSBsb29rYWhlYWQ7CisK
KyAgICAgICAgZXhwciA9IHBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24oKTsKKworICAgICAgICBp
ZiAobWF0Y2goJywnKSkgeworICAgICAgICAgICAgZXhwciA9IGRlbGVnYXRlLmNyZWF0ZVNlcXVl
bmNlRXhwcmVzc2lvbihbIGV4cHIgXSk7CisKKyAgICAgICAgICAgIHdoaWxlIChpbmRleCA8IGxl
bmd0aCkgeworICAgICAgICAgICAgICAgIGlmICghbWF0Y2goJywnKSkgeworICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbGV4KCk7
CisgICAgICAgICAgICAgICAgZXhwci5leHByZXNzaW9ucy5wdXNoKHBhcnNlQXNzaWdubWVudEV4
cHJlc3Npb24oKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGRlbGVnYXRlLm1hcmtF
bmQoZXhwciwgc3RhcnRUb2tlbik7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gZXhwcjsK
KyAgICB9CisKKyAgICAvLyAxMi4xIEJsb2NrCisKKyAgICBmdW5jdGlvbiBwYXJzZVN0YXRlbWVu
dExpc3QoKSB7CisgICAgICAgIHZhciBsaXN0ID0gW10sCisgICAgICAgICAgICBzdGF0ZW1lbnQ7
CisKKyAgICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7CisgICAgICAgICAgICBpZiAobWF0
Y2goJ30nKSkgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgc3RhdGVtZW50ID0gcGFyc2VTb3VyY2VFbGVtZW50KCk7CisgICAgICAgICAgICBpZiAo
dHlwZW9mIHN0YXRlbWVudCA9PT0gJ3VuZGVmaW5lZCcpIHsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGxpc3QucHVzaChzdGF0ZW1lbnQpOworICAg
ICAgICB9CisKKyAgICAgICAgcmV0dXJuIGxpc3Q7CisgICAgfQorCisgICAgZnVuY3Rpb24gcGFy
c2VCbG9jaygpIHsKKyAgICAgICAgdmFyIGJsb2NrLCBzdGFydFRva2VuOworCisgICAgICAgIHN0
YXJ0VG9rZW4gPSBsb29rYWhlYWQ7CisgICAgICAgIGV4cGVjdCgneycpOworCisgICAgICAgIGJs
b2NrID0gcGFyc2VTdGF0ZW1lbnRMaXN0KCk7CisKKyAgICAgICAgZXhwZWN0KCd9Jyk7CisKKyAg
ICAgICAgcmV0dXJuIGRlbGVnYXRlLm1hcmtFbmQoZGVsZWdhdGUuY3JlYXRlQmxvY2tTdGF0ZW1l
bnQoYmxvY2spLCBzdGFydFRva2VuKTsKKyAgICB9CisKKyAgICAvLyAxMi4yIFZhcmlhYmxlIFN0
YXRlbWVudAorCisgICAgZnVuY3Rpb24gcGFyc2VWYXJpYWJsZUlkZW50aWZpZXIoKSB7CisgICAg
ICAgIHZhciB0b2tlbiwgc3RhcnRUb2tlbjsKKworICAgICAgICBzdGFydFRva2VuID0gbG9va2Fo
ZWFkOworICAgICAgICB0b2tlbiA9IGxleCgpOworCisgICAgICAgIGlmICh0b2tlbi50eXBlICE9
PSBUb2tlbi5JZGVudGlmaWVyKSB7CisgICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWQodG9rZW4p
OworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGRlbGVnYXRlLm1hcmtFbmQoZGVsZWdhdGUu
Y3JlYXRlSWRlbnRpZmllcih0b2tlbi52YWx1ZSksIHN0YXJ0VG9rZW4pOworICAgIH0KKworICAg
IGZ1bmN0aW9uIHBhcnNlVmFyaWFibGVEZWNsYXJhdGlvbihraW5kKSB7CisgICAgICAgIHZhciBp
bml0ID0gbnVsbCwgaWQsIHN0YXJ0VG9rZW47CisKKyAgICAgICAgc3RhcnRUb2tlbiA9IGxvb2th
aGVhZDsKKyAgICAgICAgaWQgPSBwYXJzZVZhcmlhYmxlSWRlbnRpZmllcigpOworCisgICAgICAg
IC8vIDEyLjIuMQorICAgICAgICBpZiAoc3RyaWN0ICYmIGlzUmVzdHJpY3RlZFdvcmQoaWQubmFt
ZSkpIHsKKyAgICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudCh7fSwgTWVzc2FnZXMuU3RyaWN0
VmFyTmFtZSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoa2luZCA9PT0gJ2NvbnN0Jykgewor
ICAgICAgICAgICAgZXhwZWN0KCc9Jyk7CisgICAgICAgICAgICBpbml0ID0gcGFyc2VBc3NpZ25t
ZW50RXhwcmVzc2lvbigpOworICAgICAgICB9IGVsc2UgaWYgKG1hdGNoKCc9JykpIHsKKyAgICAg
ICAgICAgIGxleCgpOworICAgICAgICAgICAgaW5pdCA9IHBhcnNlQXNzaWdubWVudEV4cHJlc3Np
b24oKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5tYXJrRW5kKGRlbGVn
YXRlLmNyZWF0ZVZhcmlhYmxlRGVjbGFyYXRvcihpZCwgaW5pdCksIHN0YXJ0VG9rZW4pOworICAg
IH0KKworICAgIGZ1bmN0aW9uIHBhcnNlVmFyaWFibGVEZWNsYXJhdGlvbkxpc3Qoa2luZCkgewor
ICAgICAgICB2YXIgbGlzdCA9IFtdOworCisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIGxpc3Qu
cHVzaChwYXJzZVZhcmlhYmxlRGVjbGFyYXRpb24oa2luZCkpOworICAgICAgICAgICAgaWYgKCFt
YXRjaCgnLCcpKSB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBsZXgoKTsKKyAgICAgICAgfSB3aGlsZSAoaW5kZXggPCBsZW5ndGgpOworCisgICAg
ICAgIHJldHVybiBsaXN0OworICAgIH0KKworICAgIGZ1bmN0aW9uIHBhcnNlVmFyaWFibGVTdGF0
ZW1lbnQoKSB7CisgICAgICAgIHZhciBkZWNsYXJhdGlvbnM7CisKKyAgICAgICAgZXhwZWN0S2V5
d29yZCgndmFyJyk7CisKKyAgICAgICAgZGVjbGFyYXRpb25zID0gcGFyc2VWYXJpYWJsZURlY2xh
cmF0aW9uTGlzdCgpOworCisgICAgICAgIGNvbnN1bWVTZW1pY29sb24oKTsKKworICAgICAgICBy
ZXR1cm4gZGVsZWdhdGUuY3JlYXRlVmFyaWFibGVEZWNsYXJhdGlvbihkZWNsYXJhdGlvbnMsICd2
YXInKTsKKyAgICB9CisKKyAgICAvLyBraW5kIG1heSBiZSBgY29uc3RgIG9yIGBsZXRgCisgICAg
Ly8gQm90aCBhcmUgZXhwZXJpbWVudGFsIGFuZCBub3QgaW4gdGhlIHNwZWNpZmljYXRpb24geWV0
LgorICAgIC8vIHNlZSBodHRwOi8vd2lraS5lY21hc2NyaXB0Lm9yZy9kb2t1LnBocD9pZD1oYXJt
b255OmNvbnN0CisgICAgLy8gYW5kIGh0dHA6Ly93aWtpLmVjbWFzY3JpcHQub3JnL2Rva3UucGhw
P2lkPWhhcm1vbnk6bGV0CisgICAgZnVuY3Rpb24gcGFyc2VDb25zdExldERlY2xhcmF0aW9uKGtp
bmQpIHsKKyAgICAgICAgdmFyIGRlY2xhcmF0aW9ucywgc3RhcnRUb2tlbjsKKworICAgICAgICBz
dGFydFRva2VuID0gbG9va2FoZWFkOworCisgICAgICAgIGV4cGVjdEtleXdvcmQoa2luZCk7CisK
KyAgICAgICAgZGVjbGFyYXRpb25zID0gcGFyc2VWYXJpYWJsZURlY2xhcmF0aW9uTGlzdChraW5k
KTsKKworICAgICAgICBjb25zdW1lU2VtaWNvbG9uKCk7CisKKyAgICAgICAgcmV0dXJuIGRlbGVn
YXRlLm1hcmtFbmQoZGVsZWdhdGUuY3JlYXRlVmFyaWFibGVEZWNsYXJhdGlvbihkZWNsYXJhdGlv
bnMsIGtpbmQpLCBzdGFydFRva2VuKTsKKyAgICB9CisKKyAgICAvLyAxMi4zIEVtcHR5IFN0YXRl
bWVudAorCisgICAgZnVuY3Rpb24gcGFyc2VFbXB0eVN0YXRlbWVudCgpIHsKKyAgICAgICAgZXhw
ZWN0KCc7Jyk7CisgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5jcmVhdGVFbXB0eVN0YXRlbWVudCgp
OworICAgIH0KKworICAgIC8vIDEyLjQgRXhwcmVzc2lvbiBTdGF0ZW1lbnQKKworICAgIGZ1bmN0
aW9uIHBhcnNlRXhwcmVzc2lvblN0YXRlbWVudCgpIHsKKyAgICAgICAgdmFyIGV4cHIgPSBwYXJz
ZUV4cHJlc3Npb24oKTsKKyAgICAgICAgY29uc3VtZVNlbWljb2xvbigpOworICAgICAgICByZXR1
cm4gZGVsZWdhdGUuY3JlYXRlRXhwcmVzc2lvblN0YXRlbWVudChleHByKTsKKyAgICB9CisKKyAg
ICAvLyAxMi41IElmIHN0YXRlbWVudAorCisgICAgZnVuY3Rpb24gcGFyc2VJZlN0YXRlbWVudCgp
IHsKKyAgICAgICAgdmFyIHRlc3QsIGNvbnNlcXVlbnQsIGFsdGVybmF0ZTsKKworICAgICAgICBl
eHBlY3RLZXl3b3JkKCdpZicpOworCisgICAgICAgIGV4cGVjdCgnKCcpOworCisgICAgICAgIHRl
c3QgPSBwYXJzZUV4cHJlc3Npb24oKTsKKworICAgICAgICBleHBlY3QoJyknKTsKKworICAgICAg
ICBjb25zZXF1ZW50ID0gcGFyc2VTdGF0ZW1lbnQoKTsKKworICAgICAgICBpZiAobWF0Y2hLZXl3
b3JkKCdlbHNlJykpIHsKKyAgICAgICAgICAgIGxleCgpOworICAgICAgICAgICAgYWx0ZXJuYXRl
ID0gcGFyc2VTdGF0ZW1lbnQoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGFsdGVy
bmF0ZSA9IG51bGw7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gZGVsZWdhdGUuY3JlYXRl
SWZTdGF0ZW1lbnQodGVzdCwgY29uc2VxdWVudCwgYWx0ZXJuYXRlKTsKKyAgICB9CisKKyAgICAv
LyAxMi42IEl0ZXJhdGlvbiBTdGF0ZW1lbnRzCisKKyAgICBmdW5jdGlvbiBwYXJzZURvV2hpbGVT
dGF0ZW1lbnQoKSB7CisgICAgICAgIHZhciBib2R5LCB0ZXN0LCBvbGRJbkl0ZXJhdGlvbjsKKwor
ICAgICAgICBleHBlY3RLZXl3b3JkKCdkbycpOworCisgICAgICAgIG9sZEluSXRlcmF0aW9uID0g
c3RhdGUuaW5JdGVyYXRpb247CisgICAgICAgIHN0YXRlLmluSXRlcmF0aW9uID0gdHJ1ZTsKKwor
ICAgICAgICBib2R5ID0gcGFyc2VTdGF0ZW1lbnQoKTsKKworICAgICAgICBzdGF0ZS5pbkl0ZXJh
dGlvbiA9IG9sZEluSXRlcmF0aW9uOworCisgICAgICAgIGV4cGVjdEtleXdvcmQoJ3doaWxlJyk7
CisKKyAgICAgICAgZXhwZWN0KCcoJyk7CisKKyAgICAgICAgdGVzdCA9IHBhcnNlRXhwcmVzc2lv
bigpOworCisgICAgICAgIGV4cGVjdCgnKScpOworCisgICAgICAgIGlmIChtYXRjaCgnOycpKSB7
CisgICAgICAgICAgICBsZXgoKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBkZWxlZ2F0
ZS5jcmVhdGVEb1doaWxlU3RhdGVtZW50KGJvZHksIHRlc3QpOworICAgIH0KKworICAgIGZ1bmN0
aW9uIHBhcnNlV2hpbGVTdGF0ZW1lbnQoKSB7CisgICAgICAgIHZhciB0ZXN0LCBib2R5LCBvbGRJ
bkl0ZXJhdGlvbjsKKworICAgICAgICBleHBlY3RLZXl3b3JkKCd3aGlsZScpOworCisgICAgICAg
IGV4cGVjdCgnKCcpOworCisgICAgICAgIHRlc3QgPSBwYXJzZUV4cHJlc3Npb24oKTsKKworICAg
ICAgICBleHBlY3QoJyknKTsKKworICAgICAgICBvbGRJbkl0ZXJhdGlvbiA9IHN0YXRlLmluSXRl
cmF0aW9uOworICAgICAgICBzdGF0ZS5pbkl0ZXJhdGlvbiA9IHRydWU7CisKKyAgICAgICAgYm9k
eSA9IHBhcnNlU3RhdGVtZW50KCk7CisKKyAgICAgICAgc3RhdGUuaW5JdGVyYXRpb24gPSBvbGRJ
bkl0ZXJhdGlvbjsKKworICAgICAgICByZXR1cm4gZGVsZWdhdGUuY3JlYXRlV2hpbGVTdGF0ZW1l
bnQodGVzdCwgYm9keSk7CisgICAgfQorCisgICAgZnVuY3Rpb24gcGFyc2VGb3JWYXJpYWJsZURl
Y2xhcmF0aW9uKCkgeworICAgICAgICB2YXIgdG9rZW4sIGRlY2xhcmF0aW9ucywgc3RhcnRUb2tl
bjsKKworICAgICAgICBzdGFydFRva2VuID0gbG9va2FoZWFkOworICAgICAgICB0b2tlbiA9IGxl
eCgpOworICAgICAgICBkZWNsYXJhdGlvbnMgPSBwYXJzZVZhcmlhYmxlRGVjbGFyYXRpb25MaXN0
KCk7CisKKyAgICAgICAgcmV0dXJuIGRlbGVnYXRlLm1hcmtFbmQoZGVsZWdhdGUuY3JlYXRlVmFy
aWFibGVEZWNsYXJhdGlvbihkZWNsYXJhdGlvbnMsIHRva2VuLnZhbHVlKSwgc3RhcnRUb2tlbik7
CisgICAgfQorCisgICAgZnVuY3Rpb24gcGFyc2VGb3JTdGF0ZW1lbnQoKSB7CisgICAgICAgIHZh
ciBpbml0LCB0ZXN0LCB1cGRhdGUsIGxlZnQsIHJpZ2h0LCBib2R5LCBvbGRJbkl0ZXJhdGlvbjsK
KworICAgICAgICBpbml0ID0gdGVzdCA9IHVwZGF0ZSA9IG51bGw7CisKKyAgICAgICAgZXhwZWN0
S2V5d29yZCgnZm9yJyk7CisKKyAgICAgICAgZXhwZWN0KCcoJyk7CisKKyAgICAgICAgaWYgKG1h
dGNoKCc7JykpIHsKKyAgICAgICAgICAgIGxleCgpOworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgaWYgKG1hdGNoS2V5d29yZCgndmFyJykgfHwgbWF0Y2hLZXl3b3JkKCdsZXQnKSkgewor
ICAgICAgICAgICAgICAgIHN0YXRlLmFsbG93SW4gPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBp
bml0ID0gcGFyc2VGb3JWYXJpYWJsZURlY2xhcmF0aW9uKCk7CisgICAgICAgICAgICAgICAgc3Rh
dGUuYWxsb3dJbiA9IHRydWU7CisKKyAgICAgICAgICAgICAgICBpZiAoaW5pdC5kZWNsYXJhdGlv
bnMubGVuZ3RoID09PSAxICYmIG1hdGNoS2V5d29yZCgnaW4nKSkgeworICAgICAgICAgICAgICAg
ICAgICBsZXgoKTsKKyAgICAgICAgICAgICAgICAgICAgbGVmdCA9IGluaXQ7CisgICAgICAgICAg
ICAgICAgICAgIHJpZ2h0ID0gcGFyc2VFeHByZXNzaW9uKCk7CisgICAgICAgICAgICAgICAgICAg
IGluaXQgPSBudWxsOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgc3RhdGUuYWxsb3dJbiA9IGZhbHNlOworICAgICAgICAgICAgICAgIGlu
aXQgPSBwYXJzZUV4cHJlc3Npb24oKTsKKyAgICAgICAgICAgICAgICBzdGF0ZS5hbGxvd0luID0g
dHJ1ZTsKKworICAgICAgICAgICAgICAgIGlmIChtYXRjaEtleXdvcmQoJ2luJykpIHsKKyAgICAg
ICAgICAgICAgICAgICAgLy8gTGVmdEhhbmRTaWRlRXhwcmVzc2lvbgorICAgICAgICAgICAgICAg
ICAgICBpZiAoIWlzTGVmdEhhbmRTaWRlKGluaXQpKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICB0aHJvd0Vycm9yVG9sZXJhbnQoe30sIE1lc3NhZ2VzLkludmFsaWRMSFNJbkZvckluKTsKKyAg
ICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGxleCgpOworICAgICAg
ICAgICAgICAgICAgICBsZWZ0ID0gaW5pdDsKKyAgICAgICAgICAgICAgICAgICAgcmlnaHQgPSBw
YXJzZUV4cHJlc3Npb24oKTsKKyAgICAgICAgICAgICAgICAgICAgaW5pdCA9IG51bGw7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAodHlwZW9mIGxl
ZnQgPT09ICd1bmRlZmluZWQnKSB7CisgICAgICAgICAgICAgICAgZXhwZWN0KCc7Jyk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAodHlwZW9mIGxlZnQgPT09ICd1bmRl
ZmluZWQnKSB7CisKKyAgICAgICAgICAgIGlmICghbWF0Y2goJzsnKSkgeworICAgICAgICAgICAg
ICAgIHRlc3QgPSBwYXJzZUV4cHJlc3Npb24oKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGV4cGVjdCgnOycpOworCisgICAgICAgICAgICBpZiAoIW1hdGNoKCcpJykpIHsKKyAgICAgICAg
ICAgICAgICB1cGRhdGUgPSBwYXJzZUV4cHJlc3Npb24oKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorCisgICAgICAgIGV4cGVjdCgnKScpOworCisgICAgICAgIG9sZEluSXRlcmF0aW9uID0g
c3RhdGUuaW5JdGVyYXRpb247CisgICAgICAgIHN0YXRlLmluSXRlcmF0aW9uID0gdHJ1ZTsKKwor
ICAgICAgICBib2R5ID0gcGFyc2VTdGF0ZW1lbnQoKTsKKworICAgICAgICBzdGF0ZS5pbkl0ZXJh
dGlvbiA9IG9sZEluSXRlcmF0aW9uOworCisgICAgICAgIHJldHVybiAodHlwZW9mIGxlZnQgPT09
ICd1bmRlZmluZWQnKSA/CisgICAgICAgICAgICAgICAgZGVsZWdhdGUuY3JlYXRlRm9yU3RhdGVt
ZW50KGluaXQsIHRlc3QsIHVwZGF0ZSwgYm9keSkgOgorICAgICAgICAgICAgICAgIGRlbGVnYXRl
LmNyZWF0ZUZvckluU3RhdGVtZW50KGxlZnQsIHJpZ2h0LCBib2R5KTsKKyAgICB9CisKKyAgICAv
LyAxMi43IFRoZSBjb250aW51ZSBzdGF0ZW1lbnQKKworICAgIGZ1bmN0aW9uIHBhcnNlQ29udGlu
dWVTdGF0ZW1lbnQoKSB7CisgICAgICAgIHZhciBsYWJlbCA9IG51bGwsIGtleTsKKworICAgICAg
ICBleHBlY3RLZXl3b3JkKCdjb250aW51ZScpOworCisgICAgICAgIC8vIE9wdGltaXplIHRoZSBt
b3N0IGNvbW1vbiBmb3JtOiAnY29udGludWU7Jy4KKyAgICAgICAgaWYgKHNvdXJjZS5jaGFyQ29k
ZUF0KGluZGV4KSA9PT0gMHgzQikgeworICAgICAgICAgICAgbGV4KCk7CisKKyAgICAgICAgICAg
IGlmICghc3RhdGUuaW5JdGVyYXRpb24pIHsKKyAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKHt9
LCBNZXNzYWdlcy5JbGxlZ2FsQ29udGludWUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICByZXR1cm4gZGVsZWdhdGUuY3JlYXRlQ29udGludWVTdGF0ZW1lbnQobnVsbCk7CisgICAgICAg
IH0KKworICAgICAgICBpZiAocGVla0xpbmVUZXJtaW5hdG9yKCkpIHsKKyAgICAgICAgICAgIGlm
ICghc3RhdGUuaW5JdGVyYXRpb24pIHsKKyAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKHt9LCBN
ZXNzYWdlcy5JbGxlZ2FsQ29udGludWUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBy
ZXR1cm4gZGVsZWdhdGUuY3JlYXRlQ29udGludWVTdGF0ZW1lbnQobnVsbCk7CisgICAgICAgIH0K
KworICAgICAgICBpZiAobG9va2FoZWFkLnR5cGUgPT09IFRva2VuLklkZW50aWZpZXIpIHsKKyAg
ICAgICAgICAgIGxhYmVsID0gcGFyc2VWYXJpYWJsZUlkZW50aWZpZXIoKTsKKworICAgICAgICAg
ICAga2V5ID0gJyQnICsgbGFiZWwubmFtZTsKKyAgICAgICAgICAgIGlmICghT2JqZWN0LnByb3Rv
dHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHN0YXRlLmxhYmVsU2V0LCBrZXkpKSB7CisgICAgICAg
ICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuVW5rbm93bkxhYmVsLCBsYWJlbC5uYW1l
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGNvbnN1bWVTZW1pY29sb24o
KTsKKworICAgICAgICBpZiAobGFiZWwgPT09IG51bGwgJiYgIXN0YXRlLmluSXRlcmF0aW9uKSB7
CisgICAgICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5JbGxlZ2FsQ29udGludWUpOwor
ICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGRlbGVnYXRlLmNyZWF0ZUNvbnRpbnVlU3RhdGVt
ZW50KGxhYmVsKTsKKyAgICB9CisKKyAgICAvLyAxMi44IFRoZSBicmVhayBzdGF0ZW1lbnQKKwor
ICAgIGZ1bmN0aW9uIHBhcnNlQnJlYWtTdGF0ZW1lbnQoKSB7CisgICAgICAgIHZhciBsYWJlbCA9
IG51bGwsIGtleTsKKworICAgICAgICBleHBlY3RLZXl3b3JkKCdicmVhaycpOworCisgICAgICAg
IC8vIENhdGNoIHRoZSB2ZXJ5IGNvbW1vbiBjYXNlIGZpcnN0OiBpbW1lZGlhdGVseSBhIHNlbWlj
b2xvbiAoVSswMDNCKS4KKyAgICAgICAgaWYgKHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KSA9PT0g
MHgzQikgeworICAgICAgICAgICAgbGV4KCk7CisKKyAgICAgICAgICAgIGlmICghKHN0YXRlLmlu
SXRlcmF0aW9uIHx8IHN0YXRlLmluU3dpdGNoKSkgeworICAgICAgICAgICAgICAgIHRocm93RXJy
b3Ioe30sIE1lc3NhZ2VzLklsbGVnYWxCcmVhayk7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIHJldHVybiBkZWxlZ2F0ZS5jcmVhdGVCcmVha1N0YXRlbWVudChudWxsKTsKKyAgICAgICAg
fQorCisgICAgICAgIGlmIChwZWVrTGluZVRlcm1pbmF0b3IoKSkgeworICAgICAgICAgICAgaWYg
KCEoc3RhdGUuaW5JdGVyYXRpb24gfHwgc3RhdGUuaW5Td2l0Y2gpKSB7CisgICAgICAgICAgICAg
ICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuSWxsZWdhbEJyZWFrKTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgcmV0dXJuIGRlbGVnYXRlLmNyZWF0ZUJyZWFrU3RhdGVtZW50KG51bGwp
OworICAgICAgICB9CisKKyAgICAgICAgaWYgKGxvb2thaGVhZC50eXBlID09PSBUb2tlbi5JZGVu
dGlmaWVyKSB7CisgICAgICAgICAgICBsYWJlbCA9IHBhcnNlVmFyaWFibGVJZGVudGlmaWVyKCk7
CisKKyAgICAgICAgICAgIGtleSA9ICckJyArIGxhYmVsLm5hbWU7CisgICAgICAgICAgICBpZiAo
IU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzdGF0ZS5sYWJlbFNldCwga2V5
KSkgeworICAgICAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLlVua25vd25MYWJl
bCwgbGFiZWwubmFtZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBjb25z
dW1lU2VtaWNvbG9uKCk7CisKKyAgICAgICAgaWYgKGxhYmVsID09PSBudWxsICYmICEoc3RhdGUu
aW5JdGVyYXRpb24gfHwgc3RhdGUuaW5Td2l0Y2gpKSB7CisgICAgICAgICAgICB0aHJvd0Vycm9y
KHt9LCBNZXNzYWdlcy5JbGxlZ2FsQnJlYWspOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJu
IGRlbGVnYXRlLmNyZWF0ZUJyZWFrU3RhdGVtZW50KGxhYmVsKTsKKyAgICB9CisKKyAgICAvLyAx
Mi45IFRoZSByZXR1cm4gc3RhdGVtZW50CisKKyAgICBmdW5jdGlvbiBwYXJzZVJldHVyblN0YXRl
bWVudCgpIHsKKyAgICAgICAgdmFyIGFyZ3VtZW50ID0gbnVsbDsKKworICAgICAgICBleHBlY3RL
ZXl3b3JkKCdyZXR1cm4nKTsKKworICAgICAgICBpZiAoIXN0YXRlLmluRnVuY3Rpb25Cb2R5KSB7
CisgICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQoe30sIE1lc3NhZ2VzLklsbGVnYWxSZXR1
cm4pOworICAgICAgICB9CisKKyAgICAgICAgLy8gJ3JldHVybicgZm9sbG93ZWQgYnkgYSBzcGFj
ZSBhbmQgYW4gaWRlbnRpZmllciBpcyB2ZXJ5IGNvbW1vbi4KKyAgICAgICAgaWYgKHNvdXJjZS5j
aGFyQ29kZUF0KGluZGV4KSA9PT0gMHgyMCkgeworICAgICAgICAgICAgaWYgKGlzSWRlbnRpZmll
clN0YXJ0KHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4ICsgMSkpKSB7CisgICAgICAgICAgICAgICAg
YXJndW1lbnQgPSBwYXJzZUV4cHJlc3Npb24oKTsKKyAgICAgICAgICAgICAgICBjb25zdW1lU2Vt
aWNvbG9uKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGRlbGVnYXRlLmNyZWF0ZVJldHVyblN0
YXRlbWVudChhcmd1bWVudCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBp
ZiAocGVla0xpbmVUZXJtaW5hdG9yKCkpIHsKKyAgICAgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5j
cmVhdGVSZXR1cm5TdGF0ZW1lbnQobnVsbCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIW1h
dGNoKCc7JykpIHsKKyAgICAgICAgICAgIGlmICghbWF0Y2goJ30nKSAmJiBsb29rYWhlYWQudHlw
ZSAhPT0gVG9rZW4uRU9GKSB7CisgICAgICAgICAgICAgICAgYXJndW1lbnQgPSBwYXJzZUV4cHJl
c3Npb24oKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGNvbnN1bWVTZW1p
Y29sb24oKTsKKworICAgICAgICByZXR1cm4gZGVsZWdhdGUuY3JlYXRlUmV0dXJuU3RhdGVtZW50
KGFyZ3VtZW50KTsKKyAgICB9CisKKyAgICAvLyAxMi4xMCBUaGUgd2l0aCBzdGF0ZW1lbnQKKwor
ICAgIGZ1bmN0aW9uIHBhcnNlV2l0aFN0YXRlbWVudCgpIHsKKyAgICAgICAgdmFyIG9iamVjdCwg
Ym9keTsKKworICAgICAgICBpZiAoc3RyaWN0KSB7CisgICAgICAgICAgICAvLyBUT0RPKGlrYXJp
ZW5hdG9yKTogU2hvdWxkIHdlIHVwZGF0ZSB0aGUgdGVzdCBjYXNlcyBpbnN0ZWFkPworICAgICAg
ICAgICAgc2tpcENvbW1lbnQoKTsKKyAgICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudCh7fSwg
TWVzc2FnZXMuU3RyaWN0TW9kZVdpdGgpOworICAgICAgICB9CisKKyAgICAgICAgZXhwZWN0S2V5
d29yZCgnd2l0aCcpOworCisgICAgICAgIGV4cGVjdCgnKCcpOworCisgICAgICAgIG9iamVjdCA9
IHBhcnNlRXhwcmVzc2lvbigpOworCisgICAgICAgIGV4cGVjdCgnKScpOworCisgICAgICAgIGJv
ZHkgPSBwYXJzZVN0YXRlbWVudCgpOworCisgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5jcmVhdGVX
aXRoU3RhdGVtZW50KG9iamVjdCwgYm9keSk7CisgICAgfQorCisgICAgLy8gMTIuMTAgVGhlIHN3
aXRoIHN0YXRlbWVudAorCisgICAgZnVuY3Rpb24gcGFyc2VTd2l0Y2hDYXNlKCkgeworICAgICAg
ICB2YXIgdGVzdCwgY29uc2VxdWVudCA9IFtdLCBzdGF0ZW1lbnQsIHN0YXJ0VG9rZW47CisKKyAg
ICAgICAgc3RhcnRUb2tlbiA9IGxvb2thaGVhZDsKKyAgICAgICAgaWYgKG1hdGNoS2V5d29yZCgn
ZGVmYXVsdCcpKSB7CisgICAgICAgICAgICBsZXgoKTsKKyAgICAgICAgICAgIHRlc3QgPSBudWxs
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZXhwZWN0S2V5d29yZCgnY2FzZScpOwor
ICAgICAgICAgICAgdGVzdCA9IHBhcnNlRXhwcmVzc2lvbigpOworICAgICAgICB9CisgICAgICAg
IGV4cGVjdCgnOicpOworCisgICAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkgeworICAgICAg
ICAgICAgaWYgKG1hdGNoKCd9JykgfHwgbWF0Y2hLZXl3b3JkKCdkZWZhdWx0JykgfHwgbWF0Y2hL
ZXl3b3JkKCdjYXNlJykpIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIHN0YXRlbWVudCA9IHBhcnNlU3RhdGVtZW50KCk7CisgICAgICAgICAgICBj
b25zZXF1ZW50LnB1c2goc3RhdGVtZW50KTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBk
ZWxlZ2F0ZS5tYXJrRW5kKGRlbGVnYXRlLmNyZWF0ZVN3aXRjaENhc2UodGVzdCwgY29uc2VxdWVu
dCksIHN0YXJ0VG9rZW4pOworICAgIH0KKworICAgIGZ1bmN0aW9uIHBhcnNlU3dpdGNoU3RhdGVt
ZW50KCkgeworICAgICAgICB2YXIgZGlzY3JpbWluYW50LCBjYXNlcywgY2xhdXNlLCBvbGRJblN3
aXRjaCwgZGVmYXVsdEZvdW5kOworCisgICAgICAgIGV4cGVjdEtleXdvcmQoJ3N3aXRjaCcpOwor
CisgICAgICAgIGV4cGVjdCgnKCcpOworCisgICAgICAgIGRpc2NyaW1pbmFudCA9IHBhcnNlRXhw
cmVzc2lvbigpOworCisgICAgICAgIGV4cGVjdCgnKScpOworCisgICAgICAgIGV4cGVjdCgneycp
OworCisgICAgICAgIGNhc2VzID0gW107CisKKyAgICAgICAgaWYgKG1hdGNoKCd9JykpIHsKKyAg
ICAgICAgICAgIGxleCgpOworICAgICAgICAgICAgcmV0dXJuIGRlbGVnYXRlLmNyZWF0ZVN3aXRj
aFN0YXRlbWVudChkaXNjcmltaW5hbnQsIGNhc2VzKTsKKyAgICAgICAgfQorCisgICAgICAgIG9s
ZEluU3dpdGNoID0gc3RhdGUuaW5Td2l0Y2g7CisgICAgICAgIHN0YXRlLmluU3dpdGNoID0gdHJ1
ZTsKKyAgICAgICAgZGVmYXVsdEZvdW5kID0gZmFsc2U7CisKKyAgICAgICAgd2hpbGUgKGluZGV4
IDwgbGVuZ3RoKSB7CisgICAgICAgICAgICBpZiAobWF0Y2goJ30nKSkgeworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2xhdXNlID0gcGFyc2VTd2l0
Y2hDYXNlKCk7CisgICAgICAgICAgICBpZiAoY2xhdXNlLnRlc3QgPT09IG51bGwpIHsKKyAgICAg
ICAgICAgICAgICBpZiAoZGVmYXVsdEZvdW5kKSB7CisgICAgICAgICAgICAgICAgICAgIHRocm93
RXJyb3Ioe30sIE1lc3NhZ2VzLk11bHRpcGxlRGVmYXVsdHNJblN3aXRjaCk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIGRlZmF1bHRGb3VuZCA9IHRydWU7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBjYXNlcy5wdXNoKGNsYXVzZSk7CisgICAgICAgIH0KKworICAgICAg
ICBzdGF0ZS5pblN3aXRjaCA9IG9sZEluU3dpdGNoOworCisgICAgICAgIGV4cGVjdCgnfScpOwor
CisgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5jcmVhdGVTd2l0Y2hTdGF0ZW1lbnQoZGlzY3JpbWlu
YW50LCBjYXNlcyk7CisgICAgfQorCisgICAgLy8gMTIuMTMgVGhlIHRocm93IHN0YXRlbWVudAor
CisgICAgZnVuY3Rpb24gcGFyc2VUaHJvd1N0YXRlbWVudCgpIHsKKyAgICAgICAgdmFyIGFyZ3Vt
ZW50OworCisgICAgICAgIGV4cGVjdEtleXdvcmQoJ3Rocm93Jyk7CisKKyAgICAgICAgaWYgKHBl
ZWtMaW5lVGVybWluYXRvcigpKSB7CisgICAgICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdl
cy5OZXdsaW5lQWZ0ZXJUaHJvdyk7CisgICAgICAgIH0KKworICAgICAgICBhcmd1bWVudCA9IHBh
cnNlRXhwcmVzc2lvbigpOworCisgICAgICAgIGNvbnN1bWVTZW1pY29sb24oKTsKKworICAgICAg
ICByZXR1cm4gZGVsZWdhdGUuY3JlYXRlVGhyb3dTdGF0ZW1lbnQoYXJndW1lbnQpOworICAgIH0K
KworICAgIC8vIDEyLjE0IFRoZSB0cnkgc3RhdGVtZW50CisKKyAgICBmdW5jdGlvbiBwYXJzZUNh
dGNoQ2xhdXNlKCkgeworICAgICAgICB2YXIgcGFyYW0sIGJvZHksIHN0YXJ0VG9rZW47CisKKyAg
ICAgICAgc3RhcnRUb2tlbiA9IGxvb2thaGVhZDsKKyAgICAgICAgZXhwZWN0S2V5d29yZCgnY2F0
Y2gnKTsKKworICAgICAgICBleHBlY3QoJygnKTsKKyAgICAgICAgaWYgKG1hdGNoKCcpJykpIHsK
KyAgICAgICAgICAgIHRocm93VW5leHBlY3RlZChsb29rYWhlYWQpOworICAgICAgICB9CisKKyAg
ICAgICAgcGFyYW0gPSBwYXJzZVZhcmlhYmxlSWRlbnRpZmllcigpOworICAgICAgICAvLyAxMi4x
NC4xCisgICAgICAgIGlmIChzdHJpY3QgJiYgaXNSZXN0cmljdGVkV29yZChwYXJhbS5uYW1lKSkg
eworICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KHt9LCBNZXNzYWdlcy5TdHJpY3RDYXRj
aFZhcmlhYmxlKTsKKyAgICAgICAgfQorCisgICAgICAgIGV4cGVjdCgnKScpOworICAgICAgICBi
b2R5ID0gcGFyc2VCbG9jaygpOworICAgICAgICByZXR1cm4gZGVsZWdhdGUubWFya0VuZChkZWxl
Z2F0ZS5jcmVhdGVDYXRjaENsYXVzZShwYXJhbSwgYm9keSksIHN0YXJ0VG9rZW4pOworICAgIH0K
KworICAgIGZ1bmN0aW9uIHBhcnNlVHJ5U3RhdGVtZW50KCkgeworICAgICAgICB2YXIgYmxvY2ss
IGhhbmRsZXJzID0gW10sIGZpbmFsaXplciA9IG51bGw7CisKKyAgICAgICAgZXhwZWN0S2V5d29y
ZCgndHJ5Jyk7CisKKyAgICAgICAgYmxvY2sgPSBwYXJzZUJsb2NrKCk7CisKKyAgICAgICAgaWYg
KG1hdGNoS2V5d29yZCgnY2F0Y2gnKSkgeworICAgICAgICAgICAgaGFuZGxlcnMucHVzaChwYXJz
ZUNhdGNoQ2xhdXNlKCkpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1hdGNoS2V5d29yZCgn
ZmluYWxseScpKSB7CisgICAgICAgICAgICBsZXgoKTsKKyAgICAgICAgICAgIGZpbmFsaXplciA9
IHBhcnNlQmxvY2soKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChoYW5kbGVycy5sZW5ndGgg
PT09IDAgJiYgIWZpbmFsaXplcikgeworICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2Fn
ZXMuTm9DYXRjaE9yRmluYWxseSk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gZGVsZWdh
dGUuY3JlYXRlVHJ5U3RhdGVtZW50KGJsb2NrLCBbXSwgaGFuZGxlcnMsIGZpbmFsaXplcik7Cisg
ICAgfQorCisgICAgLy8gMTIuMTUgVGhlIGRlYnVnZ2VyIHN0YXRlbWVudAorCisgICAgZnVuY3Rp
b24gcGFyc2VEZWJ1Z2dlclN0YXRlbWVudCgpIHsKKyAgICAgICAgZXhwZWN0S2V5d29yZCgnZGVi
dWdnZXInKTsKKworICAgICAgICBjb25zdW1lU2VtaWNvbG9uKCk7CisKKyAgICAgICAgcmV0dXJu
IGRlbGVnYXRlLmNyZWF0ZURlYnVnZ2VyU3RhdGVtZW50KCk7CisgICAgfQorCisgICAgLy8gMTIg
U3RhdGVtZW50cworCisgICAgZnVuY3Rpb24gcGFyc2VTdGF0ZW1lbnQoKSB7CisgICAgICAgIHZh
ciB0eXBlID0gbG9va2FoZWFkLnR5cGUsCisgICAgICAgICAgICBleHByLAorICAgICAgICAgICAg
bGFiZWxlZEJvZHksCisgICAgICAgICAgICBrZXksCisgICAgICAgICAgICBzdGFydFRva2VuOwor
CisgICAgICAgIGlmICh0eXBlID09PSBUb2tlbi5FT0YpIHsKKyAgICAgICAgICAgIHRocm93VW5l
eHBlY3RlZChsb29rYWhlYWQpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHR5cGUgPT09IFRv
a2VuLlB1bmN0dWF0b3IgJiYgbG9va2FoZWFkLnZhbHVlID09PSAneycpIHsKKyAgICAgICAgICAg
IHJldHVybiBwYXJzZUJsb2NrKCk7CisgICAgICAgIH0KKworICAgICAgICBzdGFydFRva2VuID0g
bG9va2FoZWFkOworCisgICAgICAgIGlmICh0eXBlID09PSBUb2tlbi5QdW5jdHVhdG9yKSB7Cisg
ICAgICAgICAgICBzd2l0Y2ggKGxvb2thaGVhZC52YWx1ZSkgeworICAgICAgICAgICAgY2FzZSAn
Oyc6CisgICAgICAgICAgICAgICAgcmV0dXJuIGRlbGVnYXRlLm1hcmtFbmQocGFyc2VFbXB0eVN0
YXRlbWVudCgpLCBzdGFydFRva2VuKTsKKyAgICAgICAgICAgIGNhc2UgJygnOgorICAgICAgICAg
ICAgICAgIHJldHVybiBkZWxlZ2F0ZS5tYXJrRW5kKHBhcnNlRXhwcmVzc2lvblN0YXRlbWVudCgp
LCBzdGFydFRva2VuKTsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAodHlwZSA9PT0gVG9r
ZW4uS2V5d29yZCkgeworICAgICAgICAgICAgc3dpdGNoIChsb29rYWhlYWQudmFsdWUpIHsKKyAg
ICAgICAgICAgIGNhc2UgJ2JyZWFrJzoKKyAgICAgICAgICAgICAgICByZXR1cm4gZGVsZWdhdGUu
bWFya0VuZChwYXJzZUJyZWFrU3RhdGVtZW50KCksIHN0YXJ0VG9rZW4pOworICAgICAgICAgICAg
Y2FzZSAnY29udGludWUnOgorICAgICAgICAgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5tYXJrRW5k
KHBhcnNlQ29udGludWVTdGF0ZW1lbnQoKSwgc3RhcnRUb2tlbik7CisgICAgICAgICAgICBjYXNl
ICdkZWJ1Z2dlcic6CisgICAgICAgICAgICAgICAgcmV0dXJuIGRlbGVnYXRlLm1hcmtFbmQocGFy
c2VEZWJ1Z2dlclN0YXRlbWVudCgpLCBzdGFydFRva2VuKTsKKyAgICAgICAgICAgIGNhc2UgJ2Rv
JzoKKyAgICAgICAgICAgICAgICByZXR1cm4gZGVsZWdhdGUubWFya0VuZChwYXJzZURvV2hpbGVT
dGF0ZW1lbnQoKSwgc3RhcnRUb2tlbik7CisgICAgICAgICAgICBjYXNlICdmb3InOgorICAgICAg
ICAgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5tYXJrRW5kKHBhcnNlRm9yU3RhdGVtZW50KCksIHN0
YXJ0VG9rZW4pOworICAgICAgICAgICAgY2FzZSAnZnVuY3Rpb24nOgorICAgICAgICAgICAgICAg
IHJldHVybiBkZWxlZ2F0ZS5tYXJrRW5kKHBhcnNlRnVuY3Rpb25EZWNsYXJhdGlvbigpLCBzdGFy
dFRva2VuKTsKKyAgICAgICAgICAgIGNhc2UgJ2lmJzoKKyAgICAgICAgICAgICAgICByZXR1cm4g
ZGVsZWdhdGUubWFya0VuZChwYXJzZUlmU3RhdGVtZW50KCksIHN0YXJ0VG9rZW4pOworICAgICAg
ICAgICAgY2FzZSAncmV0dXJuJzoKKyAgICAgICAgICAgICAgICByZXR1cm4gZGVsZWdhdGUubWFy
a0VuZChwYXJzZVJldHVyblN0YXRlbWVudCgpLCBzdGFydFRva2VuKTsKKyAgICAgICAgICAgIGNh
c2UgJ3N3aXRjaCc6CisgICAgICAgICAgICAgICAgcmV0dXJuIGRlbGVnYXRlLm1hcmtFbmQocGFy
c2VTd2l0Y2hTdGF0ZW1lbnQoKSwgc3RhcnRUb2tlbik7CisgICAgICAgICAgICBjYXNlICd0aHJv
dyc6CisgICAgICAgICAgICAgICAgcmV0dXJuIGRlbGVnYXRlLm1hcmtFbmQocGFyc2VUaHJvd1N0
YXRlbWVudCgpLCBzdGFydFRva2VuKTsKKyAgICAgICAgICAgIGNhc2UgJ3RyeSc6CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGRlbGVnYXRlLm1hcmtFbmQocGFyc2VUcnlTdGF0ZW1lbnQoKSwgc3Rh
cnRUb2tlbik7CisgICAgICAgICAgICBjYXNlICd2YXInOgorICAgICAgICAgICAgICAgIHJldHVy
biBkZWxlZ2F0ZS5tYXJrRW5kKHBhcnNlVmFyaWFibGVTdGF0ZW1lbnQoKSwgc3RhcnRUb2tlbik7
CisgICAgICAgICAgICBjYXNlICd3aGlsZSc6CisgICAgICAgICAgICAgICAgcmV0dXJuIGRlbGVn
YXRlLm1hcmtFbmQocGFyc2VXaGlsZVN0YXRlbWVudCgpLCBzdGFydFRva2VuKTsKKyAgICAgICAg
ICAgIGNhc2UgJ3dpdGgnOgorICAgICAgICAgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5tYXJrRW5k
KHBhcnNlV2l0aFN0YXRlbWVudCgpLCBzdGFydFRva2VuKTsKKyAgICAgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAg
ICAgICBleHByID0gcGFyc2VFeHByZXNzaW9uKCk7CisKKyAgICAgICAgLy8gMTIuMTIgTGFiZWxs
ZWQgU3RhdGVtZW50cworICAgICAgICBpZiAoKGV4cHIudHlwZSA9PT0gU3ludGF4LklkZW50aWZp
ZXIpICYmIG1hdGNoKCc6JykpIHsKKyAgICAgICAgICAgIGxleCgpOworCisgICAgICAgICAgICBr
ZXkgPSAnJCcgKyBleHByLm5hbWU7CisgICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5o
YXNPd25Qcm9wZXJ0eS5jYWxsKHN0YXRlLmxhYmVsU2V0LCBrZXkpKSB7CisgICAgICAgICAgICAg
ICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuUmVkZWNsYXJhdGlvbiwgJ0xhYmVsJywgZXhwci5u
YW1lKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc3RhdGUubGFiZWxTZXRba2V5XSA9
IHRydWU7CisgICAgICAgICAgICBsYWJlbGVkQm9keSA9IHBhcnNlU3RhdGVtZW50KCk7CisgICAg
ICAgICAgICBkZWxldGUgc3RhdGUubGFiZWxTZXRba2V5XTsKKyAgICAgICAgICAgIHJldHVybiBk
ZWxlZ2F0ZS5tYXJrRW5kKGRlbGVnYXRlLmNyZWF0ZUxhYmVsZWRTdGF0ZW1lbnQoZXhwciwgbGFi
ZWxlZEJvZHkpLCBzdGFydFRva2VuKTsKKyAgICAgICAgfQorCisgICAgICAgIGNvbnN1bWVTZW1p
Y29sb24oKTsKKworICAgICAgICByZXR1cm4gZGVsZWdhdGUubWFya0VuZChkZWxlZ2F0ZS5jcmVh
dGVFeHByZXNzaW9uU3RhdGVtZW50KGV4cHIpLCBzdGFydFRva2VuKTsKKyAgICB9CisKKyAgICAv
LyAxMyBGdW5jdGlvbiBEZWZpbml0aW9uCisKKyAgICBmdW5jdGlvbiBwYXJzZUZ1bmN0aW9uU291
cmNlRWxlbWVudHMoKSB7CisgICAgICAgIHZhciBzb3VyY2VFbGVtZW50LCBzb3VyY2VFbGVtZW50
cyA9IFtdLCB0b2tlbiwgZGlyZWN0aXZlLCBmaXJzdFJlc3RyaWN0ZWQsCisgICAgICAgICAgICBv
bGRMYWJlbFNldCwgb2xkSW5JdGVyYXRpb24sIG9sZEluU3dpdGNoLCBvbGRJbkZ1bmN0aW9uQm9k
eSwgc3RhcnRUb2tlbjsKKworICAgICAgICBzdGFydFRva2VuID0gbG9va2FoZWFkOworICAgICAg
ICBleHBlY3QoJ3snKTsKKworICAgICAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHsKKyAgICAg
ICAgICAgIGlmIChsb29rYWhlYWQudHlwZSAhPT0gVG9rZW4uU3RyaW5nTGl0ZXJhbCkgeworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdG9rZW4gPSBs
b29rYWhlYWQ7CisKKyAgICAgICAgICAgIHNvdXJjZUVsZW1lbnQgPSBwYXJzZVNvdXJjZUVsZW1l
bnQoKTsKKyAgICAgICAgICAgIHNvdXJjZUVsZW1lbnRzLnB1c2goc291cmNlRWxlbWVudCk7Cisg
ICAgICAgICAgICBpZiAoc291cmNlRWxlbWVudC5leHByZXNzaW9uLnR5cGUgIT09IFN5bnRheC5M
aXRlcmFsKSB7CisgICAgICAgICAgICAgICAgLy8gdGhpcyBpcyBub3QgZGlyZWN0aXZlCisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkaXJlY3RpdmUg
PSBzb3VyY2Uuc2xpY2UodG9rZW4uc3RhcnQgKyAxLCB0b2tlbi5lbmQgLSAxKTsKKyAgICAgICAg
ICAgIGlmIChkaXJlY3RpdmUgPT09ICd1c2Ugc3RyaWN0JykgeworICAgICAgICAgICAgICAgIHN0
cmljdCA9IHRydWU7CisgICAgICAgICAgICAgICAgaWYgKGZpcnN0UmVzdHJpY3RlZCkgeworICAg
ICAgICAgICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQoZmlyc3RSZXN0cmljdGVkLCBNZXNz
YWdlcy5TdHJpY3RPY3RhbExpdGVyYWwpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKCFmaXJzdFJlc3RyaWN0ZWQgJiYgdG9rZW4u
b2N0YWwpIHsKKyAgICAgICAgICAgICAgICAgICAgZmlyc3RSZXN0cmljdGVkID0gdG9rZW47Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgb2xk
TGFiZWxTZXQgPSBzdGF0ZS5sYWJlbFNldDsKKyAgICAgICAgb2xkSW5JdGVyYXRpb24gPSBzdGF0
ZS5pbkl0ZXJhdGlvbjsKKyAgICAgICAgb2xkSW5Td2l0Y2ggPSBzdGF0ZS5pblN3aXRjaDsKKyAg
ICAgICAgb2xkSW5GdW5jdGlvbkJvZHkgPSBzdGF0ZS5pbkZ1bmN0aW9uQm9keTsKKworICAgICAg
ICBzdGF0ZS5sYWJlbFNldCA9IHt9OworICAgICAgICBzdGF0ZS5pbkl0ZXJhdGlvbiA9IGZhbHNl
OworICAgICAgICBzdGF0ZS5pblN3aXRjaCA9IGZhbHNlOworICAgICAgICBzdGF0ZS5pbkZ1bmN0
aW9uQm9keSA9IHRydWU7CisKKyAgICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7CisgICAg
ICAgICAgICBpZiAobWF0Y2goJ30nKSkgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgc291cmNlRWxlbWVudCA9IHBhcnNlU291cmNlRWxlbWVudCgp
OworICAgICAgICAgICAgaWYgKHR5cGVvZiBzb3VyY2VFbGVtZW50ID09PSAndW5kZWZpbmVkJykg
eworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgc291
cmNlRWxlbWVudHMucHVzaChzb3VyY2VFbGVtZW50KTsKKyAgICAgICAgfQorCisgICAgICAgIGV4
cGVjdCgnfScpOworCisgICAgICAgIHN0YXRlLmxhYmVsU2V0ID0gb2xkTGFiZWxTZXQ7CisgICAg
ICAgIHN0YXRlLmluSXRlcmF0aW9uID0gb2xkSW5JdGVyYXRpb247CisgICAgICAgIHN0YXRlLmlu
U3dpdGNoID0gb2xkSW5Td2l0Y2g7CisgICAgICAgIHN0YXRlLmluRnVuY3Rpb25Cb2R5ID0gb2xk
SW5GdW5jdGlvbkJvZHk7CisKKyAgICAgICAgcmV0dXJuIGRlbGVnYXRlLm1hcmtFbmQoZGVsZWdh
dGUuY3JlYXRlQmxvY2tTdGF0ZW1lbnQoc291cmNlRWxlbWVudHMpLCBzdGFydFRva2VuKTsKKyAg
ICB9CisKKyAgICBmdW5jdGlvbiBwYXJzZVBhcmFtcyhmaXJzdFJlc3RyaWN0ZWQpIHsKKyAgICAg
ICAgdmFyIHBhcmFtLCBwYXJhbXMgPSBbXSwgdG9rZW4sIHN0cmljdGVkLCBwYXJhbVNldCwga2V5
LCBtZXNzYWdlOworICAgICAgICBleHBlY3QoJygnKTsKKworICAgICAgICBpZiAoIW1hdGNoKCcp
JykpIHsKKyAgICAgICAgICAgIHBhcmFtU2V0ID0ge307CisgICAgICAgICAgICB3aGlsZSAoaW5k
ZXggPCBsZW5ndGgpIHsKKyAgICAgICAgICAgICAgICB0b2tlbiA9IGxvb2thaGVhZDsKKyAgICAg
ICAgICAgICAgICBwYXJhbSA9IHBhcnNlVmFyaWFibGVJZGVudGlmaWVyKCk7CisgICAgICAgICAg
ICAgICAga2V5ID0gJyQnICsgdG9rZW4udmFsdWU7CisgICAgICAgICAgICAgICAgaWYgKHN0cmlj
dCkgeworICAgICAgICAgICAgICAgICAgICBpZiAoaXNSZXN0cmljdGVkV29yZCh0b2tlbi52YWx1
ZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cmljdGVkID0gdG9rZW47CisgICAgICAg
ICAgICAgICAgICAgICAgICBtZXNzYWdlID0gTWVzc2FnZXMuU3RyaWN0UGFyYW1OYW1lOworICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmIChPYmplY3QucHJvdG90
eXBlLmhhc093blByb3BlcnR5LmNhbGwocGFyYW1TZXQsIGtleSkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHN0cmljdGVkID0gdG9rZW47CisgICAgICAgICAgICAgICAgICAgICAgICBtZXNz
YWdlID0gTWVzc2FnZXMuU3RyaWN0UGFyYW1EdXBlOworICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgfSBlbHNlIGlmICghZmlyc3RSZXN0cmljdGVkKSB7CisgICAgICAgICAg
ICAgICAgICAgIGlmIChpc1Jlc3RyaWN0ZWRXb3JkKHRva2VuLnZhbHVlKSkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgZmlyc3RSZXN0cmljdGVkID0gdG9rZW47CisgICAgICAgICAgICAgICAg
ICAgICAgICBtZXNzYWdlID0gTWVzc2FnZXMuU3RyaWN0UGFyYW1OYW1lOworICAgICAgICAgICAg
ICAgICAgICB9IGVsc2UgaWYgKGlzU3RyaWN0TW9kZVJlc2VydmVkV29yZCh0b2tlbi52YWx1ZSkp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0UmVzdHJpY3RlZCA9IHRva2VuOworICAg
ICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSA9IE1lc3NhZ2VzLlN0cmljdFJlc2VydmVkV29y
ZDsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093
blByb3BlcnR5LmNhbGwocGFyYW1TZXQsIGtleSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGZpcnN0UmVzdHJpY3RlZCA9IHRva2VuOworICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2Fn
ZSA9IE1lc3NhZ2VzLlN0cmljdFBhcmFtRHVwZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBwYXJhbXMucHVzaChwYXJhbSk7CisgICAg
ICAgICAgICAgICAgcGFyYW1TZXRba2V5XSA9IHRydWU7CisgICAgICAgICAgICAgICAgaWYgKG1h
dGNoKCcpJykpIHsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGV4cGVjdCgnLCcpOworICAgICAgICAgICAgfQorICAgICAgICB9
CisKKyAgICAgICAgZXhwZWN0KCcpJyk7CisKKyAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAg
IHBhcmFtczogcGFyYW1zLAorICAgICAgICAgICAgc3RyaWN0ZWQ6IHN0cmljdGVkLAorICAgICAg
ICAgICAgZmlyc3RSZXN0cmljdGVkOiBmaXJzdFJlc3RyaWN0ZWQsCisgICAgICAgICAgICBtZXNz
YWdlOiBtZXNzYWdlCisgICAgICAgIH07CisgICAgfQorCisgICAgZnVuY3Rpb24gcGFyc2VGdW5j
dGlvbkRlY2xhcmF0aW9uKCkgeworICAgICAgICB2YXIgaWQsIHBhcmFtcyA9IFtdLCBib2R5LCB0
b2tlbiwgc3RyaWN0ZWQsIHRtcCwgZmlyc3RSZXN0cmljdGVkLCBtZXNzYWdlLCBwcmV2aW91c1N0
cmljdCwgc3RhcnRUb2tlbjsKKworICAgICAgICBzdGFydFRva2VuID0gbG9va2FoZWFkOworCisg
ICAgICAgIGV4cGVjdEtleXdvcmQoJ2Z1bmN0aW9uJyk7CisgICAgICAgIHRva2VuID0gbG9va2Fo
ZWFkOworICAgICAgICBpZCA9IHBhcnNlVmFyaWFibGVJZGVudGlmaWVyKCk7CisgICAgICAgIGlm
IChzdHJpY3QpIHsKKyAgICAgICAgICAgIGlmIChpc1Jlc3RyaWN0ZWRXb3JkKHRva2VuLnZhbHVl
KSkgeworICAgICAgICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudCh0b2tlbiwgTWVzc2FnZXMu
U3RyaWN0RnVuY3Rpb25OYW1lKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIGlmIChpc1Jlc3RyaWN0ZWRXb3JkKHRva2VuLnZhbHVlKSkgeworICAgICAgICAg
ICAgICAgIGZpcnN0UmVzdHJpY3RlZCA9IHRva2VuOworICAgICAgICAgICAgICAgIG1lc3NhZ2Ug
PSBNZXNzYWdlcy5TdHJpY3RGdW5jdGlvbk5hbWU7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGlz
U3RyaWN0TW9kZVJlc2VydmVkV29yZCh0b2tlbi52YWx1ZSkpIHsKKyAgICAgICAgICAgICAgICBm
aXJzdFJlc3RyaWN0ZWQgPSB0b2tlbjsKKyAgICAgICAgICAgICAgICBtZXNzYWdlID0gTWVzc2Fn
ZXMuU3RyaWN0UmVzZXJ2ZWRXb3JkOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAg
ICAgdG1wID0gcGFyc2VQYXJhbXMoZmlyc3RSZXN0cmljdGVkKTsKKyAgICAgICAgcGFyYW1zID0g
dG1wLnBhcmFtczsKKyAgICAgICAgc3RyaWN0ZWQgPSB0bXAuc3RyaWN0ZWQ7CisgICAgICAgIGZp
cnN0UmVzdHJpY3RlZCA9IHRtcC5maXJzdFJlc3RyaWN0ZWQ7CisgICAgICAgIGlmICh0bXAubWVz
c2FnZSkgeworICAgICAgICAgICAgbWVzc2FnZSA9IHRtcC5tZXNzYWdlOworICAgICAgICB9CisK
KyAgICAgICAgcHJldmlvdXNTdHJpY3QgPSBzdHJpY3Q7CisgICAgICAgIGJvZHkgPSBwYXJzZUZ1
bmN0aW9uU291cmNlRWxlbWVudHMoKTsKKyAgICAgICAgaWYgKHN0cmljdCAmJiBmaXJzdFJlc3Ry
aWN0ZWQpIHsKKyAgICAgICAgICAgIHRocm93RXJyb3IoZmlyc3RSZXN0cmljdGVkLCBtZXNzYWdl
KTsKKyAgICAgICAgfQorICAgICAgICBpZiAoc3RyaWN0ICYmIHN0cmljdGVkKSB7CisgICAgICAg
ICAgICB0aHJvd0Vycm9yVG9sZXJhbnQoc3RyaWN0ZWQsIG1lc3NhZ2UpOworICAgICAgICB9Cisg
ICAgICAgIHN0cmljdCA9IHByZXZpb3VzU3RyaWN0OworCisgICAgICAgIHJldHVybiBkZWxlZ2F0
ZS5tYXJrRW5kKGRlbGVnYXRlLmNyZWF0ZUZ1bmN0aW9uRGVjbGFyYXRpb24oaWQsIHBhcmFtcywg
W10sIGJvZHkpLCBzdGFydFRva2VuKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBwYXJzZUZ1bmN0
aW9uRXhwcmVzc2lvbigpIHsKKyAgICAgICAgdmFyIHRva2VuLCBpZCA9IG51bGwsIHN0cmljdGVk
LCBmaXJzdFJlc3RyaWN0ZWQsIG1lc3NhZ2UsIHRtcCwgcGFyYW1zID0gW10sIGJvZHksIHByZXZp
b3VzU3RyaWN0LCBzdGFydFRva2VuOworCisgICAgICAgIHN0YXJ0VG9rZW4gPSBsb29rYWhlYWQ7
CisgICAgICAgIGV4cGVjdEtleXdvcmQoJ2Z1bmN0aW9uJyk7CisKKyAgICAgICAgaWYgKCFtYXRj
aCgnKCcpKSB7CisgICAgICAgICAgICB0b2tlbiA9IGxvb2thaGVhZDsKKyAgICAgICAgICAgIGlk
ID0gcGFyc2VWYXJpYWJsZUlkZW50aWZpZXIoKTsKKyAgICAgICAgICAgIGlmIChzdHJpY3QpIHsK
KyAgICAgICAgICAgICAgICBpZiAoaXNSZXN0cmljdGVkV29yZCh0b2tlbi52YWx1ZSkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KHRva2VuLCBNZXNzYWdlcy5TdHJp
Y3RGdW5jdGlvbk5hbWUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgaWYgKGlzUmVzdHJpY3RlZFdvcmQodG9rZW4udmFsdWUpKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGZpcnN0UmVzdHJpY3RlZCA9IHRva2VuOworICAgICAgICAgICAg
ICAgICAgICBtZXNzYWdlID0gTWVzc2FnZXMuU3RyaWN0RnVuY3Rpb25OYW1lOworICAgICAgICAg
ICAgICAgIH0gZWxzZSBpZiAoaXNTdHJpY3RNb2RlUmVzZXJ2ZWRXb3JkKHRva2VuLnZhbHVlKSkg
eworICAgICAgICAgICAgICAgICAgICBmaXJzdFJlc3RyaWN0ZWQgPSB0b2tlbjsKKyAgICAgICAg
ICAgICAgICAgICAgbWVzc2FnZSA9IE1lc3NhZ2VzLlN0cmljdFJlc2VydmVkV29yZDsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICB0bXAgPSBw
YXJzZVBhcmFtcyhmaXJzdFJlc3RyaWN0ZWQpOworICAgICAgICBwYXJhbXMgPSB0bXAucGFyYW1z
OworICAgICAgICBzdHJpY3RlZCA9IHRtcC5zdHJpY3RlZDsKKyAgICAgICAgZmlyc3RSZXN0cmlj
dGVkID0gdG1wLmZpcnN0UmVzdHJpY3RlZDsKKyAgICAgICAgaWYgKHRtcC5tZXNzYWdlKSB7Cisg
ICAgICAgICAgICBtZXNzYWdlID0gdG1wLm1lc3NhZ2U7CisgICAgICAgIH0KKworICAgICAgICBw
cmV2aW91c1N0cmljdCA9IHN0cmljdDsKKyAgICAgICAgYm9keSA9IHBhcnNlRnVuY3Rpb25Tb3Vy
Y2VFbGVtZW50cygpOworICAgICAgICBpZiAoc3RyaWN0ICYmIGZpcnN0UmVzdHJpY3RlZCkgewor
ICAgICAgICAgICAgdGhyb3dFcnJvcihmaXJzdFJlc3RyaWN0ZWQsIG1lc3NhZ2UpOworICAgICAg
ICB9CisgICAgICAgIGlmIChzdHJpY3QgJiYgc3RyaWN0ZWQpIHsKKyAgICAgICAgICAgIHRocm93
RXJyb3JUb2xlcmFudChzdHJpY3RlZCwgbWVzc2FnZSk7CisgICAgICAgIH0KKyAgICAgICAgc3Ry
aWN0ID0gcHJldmlvdXNTdHJpY3Q7CisKKyAgICAgICAgcmV0dXJuIGRlbGVnYXRlLm1hcmtFbmQo
ZGVsZWdhdGUuY3JlYXRlRnVuY3Rpb25FeHByZXNzaW9uKGlkLCBwYXJhbXMsIFtdLCBib2R5KSwg
c3RhcnRUb2tlbik7CisgICAgfQorCisgICAgLy8gMTQgUHJvZ3JhbQorCisgICAgZnVuY3Rpb24g
cGFyc2VTb3VyY2VFbGVtZW50KCkgeworICAgICAgICBpZiAobG9va2FoZWFkLnR5cGUgPT09IFRv
a2VuLktleXdvcmQpIHsKKyAgICAgICAgICAgIHN3aXRjaCAobG9va2FoZWFkLnZhbHVlKSB7Cisg
ICAgICAgICAgICBjYXNlICdjb25zdCc6CisgICAgICAgICAgICBjYXNlICdsZXQnOgorICAgICAg
ICAgICAgICAgIHJldHVybiBwYXJzZUNvbnN0TGV0RGVjbGFyYXRpb24obG9va2FoZWFkLnZhbHVl
KTsKKyAgICAgICAgICAgIGNhc2UgJ2Z1bmN0aW9uJzoKKyAgICAgICAgICAgICAgICByZXR1cm4g
cGFyc2VGdW5jdGlvbkRlY2xhcmF0aW9uKCk7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgICAgIHJldHVybiBwYXJzZVN0YXRlbWVudCgpOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisKKyAgICAgICAgaWYgKGxvb2thaGVhZC50eXBlICE9PSBUb2tlbi5FT0YpIHsKKyAgICAg
ICAgICAgIHJldHVybiBwYXJzZVN0YXRlbWVudCgpOworICAgICAgICB9CisgICAgfQorCisgICAg
ZnVuY3Rpb24gcGFyc2VTb3VyY2VFbGVtZW50cygpIHsKKyAgICAgICAgdmFyIHNvdXJjZUVsZW1l
bnQsIHNvdXJjZUVsZW1lbnRzID0gW10sIHRva2VuLCBkaXJlY3RpdmUsIGZpcnN0UmVzdHJpY3Rl
ZDsKKworICAgICAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHsKKyAgICAgICAgICAgIHRva2Vu
ID0gbG9va2FoZWFkOworICAgICAgICAgICAgaWYgKHRva2VuLnR5cGUgIT09IFRva2VuLlN0cmlu
Z0xpdGVyYWwpIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgc291cmNlRWxlbWVudCA9IHBhcnNlU291cmNlRWxlbWVudCgpOworICAgICAgICAg
ICAgc291cmNlRWxlbWVudHMucHVzaChzb3VyY2VFbGVtZW50KTsKKyAgICAgICAgICAgIGlmIChz
b3VyY2VFbGVtZW50LmV4cHJlc3Npb24udHlwZSAhPT0gU3ludGF4LkxpdGVyYWwpIHsKKyAgICAg
ICAgICAgICAgICAvLyB0aGlzIGlzIG5vdCBkaXJlY3RpdmUKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRpcmVjdGl2ZSA9IHNvdXJjZS5zbGljZSh0
b2tlbi5zdGFydCArIDEsIHRva2VuLmVuZCAtIDEpOworICAgICAgICAgICAgaWYgKGRpcmVjdGl2
ZSA9PT0gJ3VzZSBzdHJpY3QnKSB7CisgICAgICAgICAgICAgICAgc3RyaWN0ID0gdHJ1ZTsKKyAg
ICAgICAgICAgICAgICBpZiAoZmlyc3RSZXN0cmljdGVkKSB7CisgICAgICAgICAgICAgICAgICAg
IHRocm93RXJyb3JUb2xlcmFudChmaXJzdFJlc3RyaWN0ZWQsIE1lc3NhZ2VzLlN0cmljdE9jdGFs
TGl0ZXJhbCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICBpZiAoIWZpcnN0UmVzdHJpY3RlZCAmJiB0b2tlbi5vY3RhbCkgeworICAgICAg
ICAgICAgICAgICAgICBmaXJzdFJlc3RyaWN0ZWQgPSB0b2tlbjsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICB3aGlsZSAoaW5kZXggPCBsZW5n
dGgpIHsKKyAgICAgICAgICAgIHNvdXJjZUVsZW1lbnQgPSBwYXJzZVNvdXJjZUVsZW1lbnQoKTsK
KyAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqLworICAgICAgICAgICAgaWYgKHR5
cGVvZiBzb3VyY2VFbGVtZW50ID09PSAndW5kZWZpbmVkJykgeworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgc291cmNlRWxlbWVudHMucHVzaChzb3Vy
Y2VFbGVtZW50KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gc291cmNlRWxlbWVudHM7Cisg
ICAgfQorCisgICAgZnVuY3Rpb24gcGFyc2VQcm9ncmFtKCkgeworICAgICAgICB2YXIgYm9keSwg
c3RhcnRUb2tlbjsKKworICAgICAgICBza2lwQ29tbWVudCgpOworICAgICAgICBwZWVrKCk7Cisg
ICAgICAgIHN0YXJ0VG9rZW4gPSBsb29rYWhlYWQ7CisgICAgICAgIHN0cmljdCA9IGZhbHNlOwor
CisgICAgICAgIGJvZHkgPSBwYXJzZVNvdXJjZUVsZW1lbnRzKCk7CisgICAgICAgIHJldHVybiBk
ZWxlZ2F0ZS5tYXJrRW5kKGRlbGVnYXRlLmNyZWF0ZVByb2dyYW0oYm9keSksIHN0YXJ0VG9rZW4p
OworICAgIH0KKworICAgIGZ1bmN0aW9uIGZpbHRlclRva2VuTG9jYXRpb24oKSB7CisgICAgICAg
IHZhciBpLCBlbnRyeSwgdG9rZW4sIHRva2VucyA9IFtdOworCisgICAgICAgIGZvciAoaSA9IDA7
IGkgPCBleHRyYS50b2tlbnMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIGVudHJ5ID0gZXh0
cmEudG9rZW5zW2ldOworICAgICAgICAgICAgdG9rZW4gPSB7CisgICAgICAgICAgICAgICAgdHlw
ZTogZW50cnkudHlwZSwKKyAgICAgICAgICAgICAgICB2YWx1ZTogZW50cnkudmFsdWUKKyAgICAg
ICAgICAgIH07CisgICAgICAgICAgICBpZiAoZXh0cmEucmFuZ2UpIHsKKyAgICAgICAgICAgICAg
ICB0b2tlbi5yYW5nZSA9IGVudHJ5LnJhbmdlOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
aWYgKGV4dHJhLmxvYykgeworICAgICAgICAgICAgICAgIHRva2VuLmxvYyA9IGVudHJ5LmxvYzsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRva2Vucy5wdXNoKHRva2VuKTsKKyAgICAgICAg
fQorCisgICAgICAgIGV4dHJhLnRva2VucyA9IHRva2VuczsKKyAgICB9CisKKyAgICBmdW5jdGlv
biB0b2tlbml6ZShjb2RlLCBvcHRpb25zKSB7CisgICAgICAgIHZhciB0b1N0cmluZywKKyAgICAg
ICAgICAgIHRva2VuLAorICAgICAgICAgICAgdG9rZW5zOworCisgICAgICAgIHRvU3RyaW5nID0g
U3RyaW5nOworICAgICAgICBpZiAodHlwZW9mIGNvZGUgIT09ICdzdHJpbmcnICYmICEoY29kZSBp
bnN0YW5jZW9mIFN0cmluZykpIHsKKyAgICAgICAgICAgIGNvZGUgPSB0b1N0cmluZyhjb2RlKTsK
KyAgICAgICAgfQorCisgICAgICAgIGRlbGVnYXRlID0gU3ludGF4VHJlZURlbGVnYXRlOworICAg
ICAgICBzb3VyY2UgPSBjb2RlOworICAgICAgICBpbmRleCA9IDA7CisgICAgICAgIGxpbmVOdW1i
ZXIgPSAoc291cmNlLmxlbmd0aCA+IDApID8gMSA6IDA7CisgICAgICAgIGxpbmVTdGFydCA9IDA7
CisgICAgICAgIGxlbmd0aCA9IHNvdXJjZS5sZW5ndGg7CisgICAgICAgIGxvb2thaGVhZCA9IG51
bGw7CisgICAgICAgIHN0YXRlID0geworICAgICAgICAgICAgYWxsb3dJbjogdHJ1ZSwKKyAgICAg
ICAgICAgIGxhYmVsU2V0OiB7fSwKKyAgICAgICAgICAgIGluRnVuY3Rpb25Cb2R5OiBmYWxzZSwK
KyAgICAgICAgICAgIGluSXRlcmF0aW9uOiBmYWxzZSwKKyAgICAgICAgICAgIGluU3dpdGNoOiBm
YWxzZSwKKyAgICAgICAgICAgIGxhc3RDb21tZW50U3RhcnQ6IC0xCisgICAgICAgIH07CisKKyAg
ICAgICAgZXh0cmEgPSB7fTsKKworICAgICAgICAvLyBPcHRpb25zIG1hdGNoaW5nLgorICAgICAg
ICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTsKKworICAgICAgICAvLyBPZiBjb3Vyc2Ugd2UgY29s
bGVjdCB0b2tlbnMgaGVyZS4KKyAgICAgICAgb3B0aW9ucy50b2tlbnMgPSB0cnVlOworICAgICAg
ICBleHRyYS50b2tlbnMgPSBbXTsKKyAgICAgICAgZXh0cmEudG9rZW5pemUgPSB0cnVlOworICAg
ICAgICAvLyBUaGUgZm9sbG93aW5nIHR3byBmaWVsZHMgYXJlIG5lY2Vzc2FyeSB0byBjb21wdXRl
IHRoZSBSZWdleCB0b2tlbnMuCisgICAgICAgIGV4dHJhLm9wZW5QYXJlblRva2VuID0gLTE7Cisg
ICAgICAgIGV4dHJhLm9wZW5DdXJseVRva2VuID0gLTE7CisKKyAgICAgICAgZXh0cmEucmFuZ2Ug
PSAodHlwZW9mIG9wdGlvbnMucmFuZ2UgPT09ICdib29sZWFuJykgJiYgb3B0aW9ucy5yYW5nZTsK
KyAgICAgICAgZXh0cmEubG9jID0gKHR5cGVvZiBvcHRpb25zLmxvYyA9PT0gJ2Jvb2xlYW4nKSAm
JiBvcHRpb25zLmxvYzsKKworICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMuY29tbWVudCA9PT0g
J2Jvb2xlYW4nICYmIG9wdGlvbnMuY29tbWVudCkgeworICAgICAgICAgICAgZXh0cmEuY29tbWVu
dHMgPSBbXTsKKyAgICAgICAgfQorICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMudG9sZXJhbnQg
PT09ICdib29sZWFuJyAmJiBvcHRpb25zLnRvbGVyYW50KSB7CisgICAgICAgICAgICBleHRyYS5l
cnJvcnMgPSBbXTsKKyAgICAgICAgfQorCisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBwZWVr
KCk7CisgICAgICAgICAgICBpZiAobG9va2FoZWFkLnR5cGUgPT09IFRva2VuLkVPRikgeworICAg
ICAgICAgICAgICAgIHJldHVybiBleHRyYS50b2tlbnM7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIHRva2VuID0gbGV4KCk7CisgICAgICAgICAgICB3aGlsZSAobG9va2FoZWFkLnR5cGUg
IT09IFRva2VuLkVPRikgeworICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAg
ICAgIHRva2VuID0gbGV4KCk7CisgICAgICAgICAgICAgICAgfSBjYXRjaCAobGV4RXJyb3IpIHsK
KyAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSBsb29rYWhlYWQ7CisgICAgICAgICAgICAgICAg
ICAgIGlmIChleHRyYS5lcnJvcnMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhLmVy
cm9ycy5wdXNoKGxleEVycm9yKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlIGhhdmUg
dG8gYnJlYWsgb24gdGhlIGZpcnN0IGVycm9yCisgICAgICAgICAgICAgICAgICAgICAgICAvLyB0
byBhdm9pZCBpbmZpbml0ZSBsb29wcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgdGhy
b3cgbGV4RXJyb3I7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZpbHRlclRva2VuTG9jYXRpb24oKTsKKyAgICAg
ICAgICAgIHRva2VucyA9IGV4dHJhLnRva2VuczsKKyAgICAgICAgICAgIGlmICh0eXBlb2YgZXh0
cmEuY29tbWVudHMgIT09ICd1bmRlZmluZWQnKSB7CisgICAgICAgICAgICAgICAgdG9rZW5zLmNv
bW1lbnRzID0gZXh0cmEuY29tbWVudHM7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAo
dHlwZW9mIGV4dHJhLmVycm9ycyAhPT0gJ3VuZGVmaW5lZCcpIHsKKyAgICAgICAgICAgICAgICB0
b2tlbnMuZXJyb3JzID0gZXh0cmEuZXJyb3JzOworICAgICAgICAgICAgfQorICAgICAgICB9IGNh
dGNoIChlKSB7CisgICAgICAgICAgICB0aHJvdyBlOworICAgICAgICB9IGZpbmFsbHkgeworICAg
ICAgICAgICAgZXh0cmEgPSB7fTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdG9rZW5zOwor
ICAgIH0KKworICAgIGZ1bmN0aW9uIHBhcnNlKGNvZGUsIG9wdGlvbnMpIHsKKyAgICAgICAgdmFy
IHByb2dyYW0sIHRvU3RyaW5nOworCisgICAgICAgIHRvU3RyaW5nID0gU3RyaW5nOworICAgICAg
ICBpZiAodHlwZW9mIGNvZGUgIT09ICdzdHJpbmcnICYmICEoY29kZSBpbnN0YW5jZW9mIFN0cmlu
ZykpIHsKKyAgICAgICAgICAgIGNvZGUgPSB0b1N0cmluZyhjb2RlKTsKKyAgICAgICAgfQorCisg
ICAgICAgIGRlbGVnYXRlID0gU3ludGF4VHJlZURlbGVnYXRlOworICAgICAgICBzb3VyY2UgPSBj
b2RlOworICAgICAgICBpbmRleCA9IDA7CisgICAgICAgIGxpbmVOdW1iZXIgPSAoc291cmNlLmxl
bmd0aCA+IDApID8gMSA6IDA7CisgICAgICAgIGxpbmVTdGFydCA9IDA7CisgICAgICAgIGxlbmd0
aCA9IHNvdXJjZS5sZW5ndGg7CisgICAgICAgIGxvb2thaGVhZCA9IG51bGw7CisgICAgICAgIHN0
YXRlID0geworICAgICAgICAgICAgYWxsb3dJbjogdHJ1ZSwKKyAgICAgICAgICAgIGxhYmVsU2V0
OiB7fSwKKyAgICAgICAgICAgIGluRnVuY3Rpb25Cb2R5OiBmYWxzZSwKKyAgICAgICAgICAgIGlu
SXRlcmF0aW9uOiBmYWxzZSwKKyAgICAgICAgICAgIGluU3dpdGNoOiBmYWxzZSwKKyAgICAgICAg
ICAgIGxhc3RDb21tZW50U3RhcnQ6IC0xCisgICAgICAgIH07CisKKyAgICAgICAgZXh0cmEgPSB7
fTsKKyAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zICE9PSAndW5kZWZpbmVkJykgeworICAgICAg
ICAgICAgZXh0cmEucmFuZ2UgPSAodHlwZW9mIG9wdGlvbnMucmFuZ2UgPT09ICdib29sZWFuJykg
JiYgb3B0aW9ucy5yYW5nZTsKKyAgICAgICAgICAgIGV4dHJhLmxvYyA9ICh0eXBlb2Ygb3B0aW9u
cy5sb2MgPT09ICdib29sZWFuJykgJiYgb3B0aW9ucy5sb2M7CisgICAgICAgICAgICBleHRyYS5h
dHRhY2hDb21tZW50ID0gKHR5cGVvZiBvcHRpb25zLmF0dGFjaENvbW1lbnQgPT09ICdib29sZWFu
JykgJiYgb3B0aW9ucy5hdHRhY2hDb21tZW50OworCisgICAgICAgICAgICBpZiAoZXh0cmEubG9j
ICYmIG9wdGlvbnMuc291cmNlICE9PSBudWxsICYmIG9wdGlvbnMuc291cmNlICE9PSB1bmRlZmlu
ZWQpIHsKKyAgICAgICAgICAgICAgICBleHRyYS5zb3VyY2UgPSB0b1N0cmluZyhvcHRpb25zLnNv
dXJjZSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy50
b2tlbnMgPT09ICdib29sZWFuJyAmJiBvcHRpb25zLnRva2VucykgeworICAgICAgICAgICAgICAg
IGV4dHJhLnRva2VucyA9IFtdOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHR5cGVv
ZiBvcHRpb25zLmNvbW1lbnQgPT09ICdib29sZWFuJyAmJiBvcHRpb25zLmNvbW1lbnQpIHsKKyAg
ICAgICAgICAgICAgICBleHRyYS5jb21tZW50cyA9IFtdOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLnRvbGVyYW50ID09PSAnYm9vbGVhbicgJiYgb3B0aW9u
cy50b2xlcmFudCkgeworICAgICAgICAgICAgICAgIGV4dHJhLmVycm9ycyA9IFtdOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgaWYgKGV4dHJhLmF0dGFjaENvbW1lbnQpIHsKKyAgICAgICAg
ICAgICAgICBleHRyYS5yYW5nZSA9IHRydWU7CisgICAgICAgICAgICAgICAgZXh0cmEuY29tbWVu
dHMgPSBbXTsKKyAgICAgICAgICAgICAgICBleHRyYS5ib3R0b21SaWdodFN0YWNrID0gW107Cisg
ICAgICAgICAgICAgICAgZXh0cmEudHJhaWxpbmdDb21tZW50cyA9IFtdOworICAgICAgICAgICAg
ICAgIGV4dHJhLmxlYWRpbmdDb21tZW50cyA9IFtdOworICAgICAgICAgICAgfQorICAgICAgICB9
CisKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHByb2dyYW0gPSBwYXJzZVByb2dyYW0oKTsK
KyAgICAgICAgICAgIGlmICh0eXBlb2YgZXh0cmEuY29tbWVudHMgIT09ICd1bmRlZmluZWQnKSB7
CisgICAgICAgICAgICAgICAgcHJvZ3JhbS5jb21tZW50cyA9IGV4dHJhLmNvbW1lbnRzOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHR5cGVvZiBleHRyYS50b2tlbnMgIT09ICd1bmRl
ZmluZWQnKSB7CisgICAgICAgICAgICAgICAgZmlsdGVyVG9rZW5Mb2NhdGlvbigpOworICAgICAg
ICAgICAgICAgIHByb2dyYW0udG9rZW5zID0gZXh0cmEudG9rZW5zOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgaWYgKHR5cGVvZiBleHRyYS5lcnJvcnMgIT09ICd1bmRlZmluZWQnKSB7Cisg
ICAgICAgICAgICAgICAgcHJvZ3JhbS5lcnJvcnMgPSBleHRyYS5lcnJvcnM7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgICAgIHRocm93IGU7CisgICAgICAg
IH0gZmluYWxseSB7CisgICAgICAgICAgICBleHRyYSA9IHt9OworICAgICAgICB9CisKKyAgICAg
ICAgcmV0dXJuIHByb2dyYW07CisgICAgfQorCisgICAgLy8gU3luYyB3aXRoICouanNvbiBtYW5p
ZmVzdHMuCisgICAgZXhwb3J0cy52ZXJzaW9uID0gJzEuMi4yJzsKKworICAgIGV4cG9ydHMudG9r
ZW5pemUgPSB0b2tlbml6ZTsKKworICAgIGV4cG9ydHMucGFyc2UgPSBwYXJzZTsKKworICAgIC8v
IERlZXAgY29weS4KKyAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovCisgICAgZXhwb3J0cy5T
eW50YXggPSAoZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIgbmFtZSwgdHlwZXMgPSB7fTsKKwor
ICAgICAgICBpZiAodHlwZW9mIE9iamVjdC5jcmVhdGUgPT09ICdmdW5jdGlvbicpIHsKKyAgICAg
ICAgICAgIHR5cGVzID0gT2JqZWN0LmNyZWF0ZShudWxsKTsKKyAgICAgICAgfQorCisgICAgICAg
IGZvciAobmFtZSBpbiBTeW50YXgpIHsKKyAgICAgICAgICAgIGlmIChTeW50YXguaGFzT3duUHJv
cGVydHkobmFtZSkpIHsKKyAgICAgICAgICAgICAgICB0eXBlc1tuYW1lXSA9IFN5bnRheFtuYW1l
XTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmICh0eXBlb2YgT2JqZWN0
LmZyZWV6ZSA9PT0gJ2Z1bmN0aW9uJykgeworICAgICAgICAgICAgT2JqZWN0LmZyZWV6ZSh0eXBl
cyk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gdHlwZXM7CisgICAgfSgpKTsKKworfSko
V2ViSW5zcGVjdG9yLl9lc3ByaW1hKTsK
</data>
<flag name="review"
          id="259794"
          type_id="1"
          status="+"
          setter="joepeck"
    />
    <flag name="commit-queue"
          id="259795"
          type_id="3"
          status="-"
          setter="joepeck"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>235252</attachid>
            <date>2014-07-21 16:28:35 -0700</date>
            <delta_ts>2014-07-21 19:36:55 -0700</delta_ts>
            <desc>patch</desc>
            <filename>inspector-patch.diff</filename>
            <type>text/plain</type>
            <size>127067</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkluc3BlY3RvclVJL0NoYW5nZUxvZwkocmV2aXNpb24gMTcxMzEyKQorKysgU291cmNl
L1dlYkluc3BlY3RvclVJL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE4IEBA
CisyMDE0LTA3LTIxICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IFdlYiBJbnNwZWN0b3I6IEFkZCBlc3ByaW1hIHRvIHRoZSBXZWJJbnNwZWN0b3IuCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzUwOTgKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIGluY2x1
ZGVzIEVzcHJpbWEgaW50byB0aGUgV2ViSW5zcGVjdG9yIGFuZCBhdHRhY2hlcyBpdHMKKyAgICAg
ICAgZXhwb3J0ZWQgZnVuY3Rpb24gb250byB0aGUgV2ViSW5zcGVjdG9yIG5hbWVzcGFjZSBvYmpl
Y3QuIAorCisgICAgICAgICogVXNlckludGVyZmFjZS9FeHRlcm5hbC9Fc3ByaW1hOiBBZGRlZC4K
KyAgICAgICAgKiBVc2VySW50ZXJmYWNlL0V4dGVybmFsL0VzcHJpbWEvZXNwcmltYS5qczogQWRk
ZWQuCisgICAgICAgICguKToKKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uaHRtbDoKKwog
MjAxNC0wNS0wOCAgSm9ubyBXZWxscyAgPGpvbm93ZWxsc0BhcHBsZS5jb20+CiAKICAgICAgICAg
V2ViIEluc3BlY3RvcjogQ29uc29sZSBlcnJvciB3aGVuIGxhdW5jaGluZyBXZWIgSW5zcGVjdG9y
ICJNb2RlIGh0bWxtaXhlZCBmYWlsZWQgdG8gYWR2YW5jZSBzdHJlYW0iCkluZGV4OiBTb3VyY2Uv
V2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9NYWluLmh0bWwKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTWFpbi5odG1sCShyZXZpc2lvbiAxNzEz
MTEpCisrKyBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9NYWluLmh0bWwJKHdv
cmtpbmcgY29weSkKQEAgLTE3MSw2ICsxNzEsOCBAQAogICAgIDxzY3JpcHQgc3JjPSJCYXNlL1VS
TFV0aWxpdGllcy5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCBzcmM9IkJhc2UvVXRpbGl0aWVz
LmpzIj48L3NjcmlwdD4KIAorICAgIDxzY3JpcHQgc3JjPSJFeHRlcm5hbC9Fc3ByaW1hL2VzcHJp
bWEuanMiPjwvc2NyaXB0PgorCiAgICAgPHNjcmlwdCBzcmM9IlByb3RvY29sL0FwcGxpY2F0aW9u
Q2FjaGVPYnNlcnZlci5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCBzcmM9IlByb3RvY29sL0NT
U09ic2VydmVyLmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHNyYz0iUHJvdG9jb2wvQ29uc29s
ZU9ic2VydmVyLmpzIj48L3NjcmlwdD4KSW5kZXg6IFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2Vy
SW50ZXJmYWNlL0V4dGVybmFsL0VzcHJpbWEvZXNwcmltYS5qcwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9FeHRlcm5hbC9Fc3ByaW1hL2VzcHJpbWEu
anMJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9F
eHRlcm5hbC9Fc3ByaW1hL2VzcHJpbWEuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzNzM1
IEBACisvKgorICBDb3B5cmlnaHQgKEMpIDIwMTMgQXJpeWEgSGlkYXlhdCA8YXJpeWEuaGlkYXlh
dEBnbWFpbC5jb20+CisgIENvcHlyaWdodCAoQykgMjAxMyBUaGFkZGVlIFR5bCA8dGhhZGRlZS50
eWxAZ21haWwuY29tPgorICBDb3B5cmlnaHQgKEMpIDIwMTMgTWF0aGlhcyBCeW5lbnMgPG1hdGhp
YXNAcWl3aS5iZT4KKyAgQ29weXJpZ2h0IChDKSAyMDEyIEFyaXlhIEhpZGF5YXQgPGFyaXlhLmhp
ZGF5YXRAZ21haWwuY29tPgorICBDb3B5cmlnaHQgKEMpIDIwMTIgTWF0aGlhcyBCeW5lbnMgPG1h
dGhpYXNAcWl3aS5iZT4KKyAgQ29weXJpZ2h0IChDKSAyMDEyIEpvb3N0LVdpbSBCb2VrZXN0ZWlq
biA8am9vc3Qtd2ltQGJvZWtlc3RlaWpuLm5sPgorICBDb3B5cmlnaHQgKEMpIDIwMTIgS3JpcyBL
b3dhbCA8a3Jpcy5rb3dhbEBjaXhhci5jb20+CisgIENvcHlyaWdodCAoQykgMjAxMiBZdXN1a2Ug
U3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+CisgIENvcHlyaWdodCAoQykgMjAxMiBBcnBh
ZCBCb3Jzb3MgPGFycGFkLmJvcnNvc0Bnb29nbGVtYWlsLmNvbT4KKyAgQ29weXJpZ2h0IChDKSAy
MDExIEFyaXlhIEhpZGF5YXQgPGFyaXlhLmhpZGF5YXRAZ21haWwuY29tPgorCisgIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKworICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAgICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorCisgIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMgIkFTIElTIgorICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisg
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCA8Q09QWVJJR0hUIEhPTERFUj4gQkUg
TElBQkxFIEZPUiBBTlkKKyAgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OworICBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GCisgIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisqLworCisvLyBXZWJLaXQgTW9kaWZpY2F0aW9uczoKKy8vIC0g
VGhlIG9ubHkgZWRpdCBtYWRlIHRvIHRoaXMgZmlsZSBpcyB0aGUgdXNlICdXZWJJbnNwZWN0b3Iu
X2VzcHJpbWEnIGFzIHRoZSAnZXhwb3J0cycgb2JqZWN0IGZvciBlc3ByaW1hLiAKKy8vICAgVGhl
IGNvZGUgdGhhdCBkZXRlcm1pbmVzIHRoZSBjb250ZXh0IGVzcHJpbWEgaXMgbG9hZGVkIGluIChu
b2RlLmpzLCB0aGUgYnJvd3NlciwgZXRjLikgaGFzIGJlZW4gcmVwbGFjZWQgd2l0aCBhIHJlZmVy
ZW5jZSB0byAnV2ViSW5zcGVjdG9yLl9lc3ByaW1hJy4KK1dlYkluc3BlY3Rvci5fZXNwcmltYSA9
IHt9OworCisoZnVuY3Rpb24gKGV4cG9ydHMpIHsKKyAgICAndXNlIHN0cmljdCc7CisKKyAgICB2
YXIgVG9rZW4sCisgICAgICAgIFRva2VuTmFtZSwKKyAgICAgICAgRm5FeHByVG9rZW5zLAorICAg
ICAgICBTeW50YXgsCisgICAgICAgIFByb3BlcnR5S2luZCwKKyAgICAgICAgTWVzc2FnZXMsCisg
ICAgICAgIFJlZ2V4LAorICAgICAgICBTeW50YXhUcmVlRGVsZWdhdGUsCisgICAgICAgIHNvdXJj
ZSwKKyAgICAgICAgc3RyaWN0LAorICAgICAgICBpbmRleCwKKyAgICAgICAgbGluZU51bWJlciwK
KyAgICAgICAgbGluZVN0YXJ0LAorICAgICAgICBsZW5ndGgsCisgICAgICAgIGRlbGVnYXRlLAor
ICAgICAgICBsb29rYWhlYWQsCisgICAgICAgIHN0YXRlLAorICAgICAgICBleHRyYTsKKworICAg
IFRva2VuID0geworICAgICAgICBCb29sZWFuTGl0ZXJhbDogMSwKKyAgICAgICAgRU9GOiAyLAor
ICAgICAgICBJZGVudGlmaWVyOiAzLAorICAgICAgICBLZXl3b3JkOiA0LAorICAgICAgICBOdWxs
TGl0ZXJhbDogNSwKKyAgICAgICAgTnVtZXJpY0xpdGVyYWw6IDYsCisgICAgICAgIFB1bmN0dWF0
b3I6IDcsCisgICAgICAgIFN0cmluZ0xpdGVyYWw6IDgsCisgICAgICAgIFJlZ3VsYXJFeHByZXNz
aW9uOiA5CisgICAgfTsKKworICAgIFRva2VuTmFtZSA9IHt9OworICAgIFRva2VuTmFtZVtUb2tl
bi5Cb29sZWFuTGl0ZXJhbF0gPSAnQm9vbGVhbic7CisgICAgVG9rZW5OYW1lW1Rva2VuLkVPRl0g
PSAnPGVuZD4nOworICAgIFRva2VuTmFtZVtUb2tlbi5JZGVudGlmaWVyXSA9ICdJZGVudGlmaWVy
JzsKKyAgICBUb2tlbk5hbWVbVG9rZW4uS2V5d29yZF0gPSAnS2V5d29yZCc7CisgICAgVG9rZW5O
YW1lW1Rva2VuLk51bGxMaXRlcmFsXSA9ICdOdWxsJzsKKyAgICBUb2tlbk5hbWVbVG9rZW4uTnVt
ZXJpY0xpdGVyYWxdID0gJ051bWVyaWMnOworICAgIFRva2VuTmFtZVtUb2tlbi5QdW5jdHVhdG9y
XSA9ICdQdW5jdHVhdG9yJzsKKyAgICBUb2tlbk5hbWVbVG9rZW4uU3RyaW5nTGl0ZXJhbF0gPSAn
U3RyaW5nJzsKKyAgICBUb2tlbk5hbWVbVG9rZW4uUmVndWxhckV4cHJlc3Npb25dID0gJ1JlZ3Vs
YXJFeHByZXNzaW9uJzsKKworICAgIC8vIEEgZnVuY3Rpb24gZm9sbG93aW5nIG9uZSBvZiB0aG9z
ZSB0b2tlbnMgaXMgYW4gZXhwcmVzc2lvbi4KKyAgICBGbkV4cHJUb2tlbnMgPSBbJygnLCAneycs
ICdbJywgJ2luJywgJ3R5cGVvZicsICdpbnN0YW5jZW9mJywgJ25ldycsCisgICAgICAgICAgICAg
ICAgICAgICdyZXR1cm4nLCAnY2FzZScsICdkZWxldGUnLCAndGhyb3cnLCAndm9pZCcsCisgICAg
ICAgICAgICAgICAgICAgIC8vIGFzc2lnbm1lbnQgb3BlcmF0b3JzCisgICAgICAgICAgICAgICAg
ICAgICc9JywgJys9JywgJy09JywgJyo9JywgJy89JywgJyU9JywgJzw8PScsICc+Pj0nLCAnPj4+
PScsCisgICAgICAgICAgICAgICAgICAgICcmPScsICd8PScsICdePScsICcsJywKKyAgICAgICAg
ICAgICAgICAgICAgLy8gYmluYXJ5L3VuYXJ5IG9wZXJhdG9ycworICAgICAgICAgICAgICAgICAg
ICAnKycsICctJywgJyonLCAnLycsICclJywgJysrJywgJy0tJywgJzw8JywgJz4+JywgJz4+Pics
ICcmJywKKyAgICAgICAgICAgICAgICAgICAgJ3wnLCAnXicsICchJywgJ34nLCAnJiYnLCAnfHwn
LCAnPycsICc6JywgJz09PScsICc9PScsICc+PScsCisgICAgICAgICAgICAgICAgICAgICc8PScs
ICc8JywgJz4nLCAnIT0nLCAnIT09J107CisKKyAgICBTeW50YXggPSB7CisgICAgICAgIEFzc2ln
bm1lbnRFeHByZXNzaW9uOiAnQXNzaWdubWVudEV4cHJlc3Npb24nLAorICAgICAgICBBcnJheUV4
cHJlc3Npb246ICdBcnJheUV4cHJlc3Npb24nLAorICAgICAgICBCbG9ja1N0YXRlbWVudDogJ0Js
b2NrU3RhdGVtZW50JywKKyAgICAgICAgQmluYXJ5RXhwcmVzc2lvbjogJ0JpbmFyeUV4cHJlc3Np
b24nLAorICAgICAgICBCcmVha1N0YXRlbWVudDogJ0JyZWFrU3RhdGVtZW50JywKKyAgICAgICAg
Q2FsbEV4cHJlc3Npb246ICdDYWxsRXhwcmVzc2lvbicsCisgICAgICAgIENhdGNoQ2xhdXNlOiAn
Q2F0Y2hDbGF1c2UnLAorICAgICAgICBDb25kaXRpb25hbEV4cHJlc3Npb246ICdDb25kaXRpb25h
bEV4cHJlc3Npb24nLAorICAgICAgICBDb250aW51ZVN0YXRlbWVudDogJ0NvbnRpbnVlU3RhdGVt
ZW50JywKKyAgICAgICAgRG9XaGlsZVN0YXRlbWVudDogJ0RvV2hpbGVTdGF0ZW1lbnQnLAorICAg
ICAgICBEZWJ1Z2dlclN0YXRlbWVudDogJ0RlYnVnZ2VyU3RhdGVtZW50JywKKyAgICAgICAgRW1w
dHlTdGF0ZW1lbnQ6ICdFbXB0eVN0YXRlbWVudCcsCisgICAgICAgIEV4cHJlc3Npb25TdGF0ZW1l
bnQ6ICdFeHByZXNzaW9uU3RhdGVtZW50JywKKyAgICAgICAgRm9yU3RhdGVtZW50OiAnRm9yU3Rh
dGVtZW50JywKKyAgICAgICAgRm9ySW5TdGF0ZW1lbnQ6ICdGb3JJblN0YXRlbWVudCcsCisgICAg
ICAgIEZ1bmN0aW9uRGVjbGFyYXRpb246ICdGdW5jdGlvbkRlY2xhcmF0aW9uJywKKyAgICAgICAg
RnVuY3Rpb25FeHByZXNzaW9uOiAnRnVuY3Rpb25FeHByZXNzaW9uJywKKyAgICAgICAgSWRlbnRp
ZmllcjogJ0lkZW50aWZpZXInLAorICAgICAgICBJZlN0YXRlbWVudDogJ0lmU3RhdGVtZW50JywK
KyAgICAgICAgTGl0ZXJhbDogJ0xpdGVyYWwnLAorICAgICAgICBMYWJlbGVkU3RhdGVtZW50OiAn
TGFiZWxlZFN0YXRlbWVudCcsCisgICAgICAgIExvZ2ljYWxFeHByZXNzaW9uOiAnTG9naWNhbEV4
cHJlc3Npb24nLAorICAgICAgICBNZW1iZXJFeHByZXNzaW9uOiAnTWVtYmVyRXhwcmVzc2lvbics
CisgICAgICAgIE5ld0V4cHJlc3Npb246ICdOZXdFeHByZXNzaW9uJywKKyAgICAgICAgT2JqZWN0
RXhwcmVzc2lvbjogJ09iamVjdEV4cHJlc3Npb24nLAorICAgICAgICBQcm9ncmFtOiAnUHJvZ3Jh
bScsCisgICAgICAgIFByb3BlcnR5OiAnUHJvcGVydHknLAorICAgICAgICBSZXR1cm5TdGF0ZW1l
bnQ6ICdSZXR1cm5TdGF0ZW1lbnQnLAorICAgICAgICBTZXF1ZW5jZUV4cHJlc3Npb246ICdTZXF1
ZW5jZUV4cHJlc3Npb24nLAorICAgICAgICBTd2l0Y2hTdGF0ZW1lbnQ6ICdTd2l0Y2hTdGF0ZW1l
bnQnLAorICAgICAgICBTd2l0Y2hDYXNlOiAnU3dpdGNoQ2FzZScsCisgICAgICAgIFRoaXNFeHBy
ZXNzaW9uOiAnVGhpc0V4cHJlc3Npb24nLAorICAgICAgICBUaHJvd1N0YXRlbWVudDogJ1Rocm93
U3RhdGVtZW50JywKKyAgICAgICAgVHJ5U3RhdGVtZW50OiAnVHJ5U3RhdGVtZW50JywKKyAgICAg
ICAgVW5hcnlFeHByZXNzaW9uOiAnVW5hcnlFeHByZXNzaW9uJywKKyAgICAgICAgVXBkYXRlRXhw
cmVzc2lvbjogJ1VwZGF0ZUV4cHJlc3Npb24nLAorICAgICAgICBWYXJpYWJsZURlY2xhcmF0aW9u
OiAnVmFyaWFibGVEZWNsYXJhdGlvbicsCisgICAgICAgIFZhcmlhYmxlRGVjbGFyYXRvcjogJ1Zh
cmlhYmxlRGVjbGFyYXRvcicsCisgICAgICAgIFdoaWxlU3RhdGVtZW50OiAnV2hpbGVTdGF0ZW1l
bnQnLAorICAgICAgICBXaXRoU3RhdGVtZW50OiAnV2l0aFN0YXRlbWVudCcKKyAgICB9OworCisg
ICAgUHJvcGVydHlLaW5kID0geworICAgICAgICBEYXRhOiAxLAorICAgICAgICBHZXQ6IDIsCisg
ICAgICAgIFNldDogNAorICAgIH07CisKKyAgICAvLyBFcnJvciBtZXNzYWdlcyBzaG91bGQgYmUg
aWRlbnRpY2FsIHRvIFY4LgorICAgIE1lc3NhZ2VzID0geworICAgICAgICBVbmV4cGVjdGVkVG9r
ZW46ICAnVW5leHBlY3RlZCB0b2tlbiAlMCcsCisgICAgICAgIFVuZXhwZWN0ZWROdW1iZXI6ICAn
VW5leHBlY3RlZCBudW1iZXInLAorICAgICAgICBVbmV4cGVjdGVkU3RyaW5nOiAgJ1VuZXhwZWN0
ZWQgc3RyaW5nJywKKyAgICAgICAgVW5leHBlY3RlZElkZW50aWZpZXI6ICAnVW5leHBlY3RlZCBp
ZGVudGlmaWVyJywKKyAgICAgICAgVW5leHBlY3RlZFJlc2VydmVkOiAgJ1VuZXhwZWN0ZWQgcmVz
ZXJ2ZWQgd29yZCcsCisgICAgICAgIFVuZXhwZWN0ZWRFT1M6ICAnVW5leHBlY3RlZCBlbmQgb2Yg
aW5wdXQnLAorICAgICAgICBOZXdsaW5lQWZ0ZXJUaHJvdzogICdJbGxlZ2FsIG5ld2xpbmUgYWZ0
ZXIgdGhyb3cnLAorICAgICAgICBJbnZhbGlkUmVnRXhwOiAnSW52YWxpZCByZWd1bGFyIGV4cHJl
c3Npb24nLAorICAgICAgICBVbnRlcm1pbmF0ZWRSZWdFeHA6ICAnSW52YWxpZCByZWd1bGFyIGV4
cHJlc3Npb246IG1pc3NpbmcgLycsCisgICAgICAgIEludmFsaWRMSFNJbkFzc2lnbm1lbnQ6ICAn
SW52YWxpZCBsZWZ0LWhhbmQgc2lkZSBpbiBhc3NpZ25tZW50JywKKyAgICAgICAgSW52YWxpZExI
U0luRm9ySW46ICAnSW52YWxpZCBsZWZ0LWhhbmQgc2lkZSBpbiBmb3ItaW4nLAorICAgICAgICBN
dWx0aXBsZURlZmF1bHRzSW5Td2l0Y2g6ICdNb3JlIHRoYW4gb25lIGRlZmF1bHQgY2xhdXNlIGlu
IHN3aXRjaCBzdGF0ZW1lbnQnLAorICAgICAgICBOb0NhdGNoT3JGaW5hbGx5OiAgJ01pc3Npbmcg
Y2F0Y2ggb3IgZmluYWxseSBhZnRlciB0cnknLAorICAgICAgICBVbmtub3duTGFiZWw6ICdVbmRl
ZmluZWQgbGFiZWwgXCclMFwnJywKKyAgICAgICAgUmVkZWNsYXJhdGlvbjogJyUwIFwnJTFcJyBo
YXMgYWxyZWFkeSBiZWVuIGRlY2xhcmVkJywKKyAgICAgICAgSWxsZWdhbENvbnRpbnVlOiAnSWxs
ZWdhbCBjb250aW51ZSBzdGF0ZW1lbnQnLAorICAgICAgICBJbGxlZ2FsQnJlYWs6ICdJbGxlZ2Fs
IGJyZWFrIHN0YXRlbWVudCcsCisgICAgICAgIElsbGVnYWxSZXR1cm46ICdJbGxlZ2FsIHJldHVy
biBzdGF0ZW1lbnQnLAorICAgICAgICBTdHJpY3RNb2RlV2l0aDogICdTdHJpY3QgbW9kZSBjb2Rl
IG1heSBub3QgaW5jbHVkZSBhIHdpdGggc3RhdGVtZW50JywKKyAgICAgICAgU3RyaWN0Q2F0Y2hW
YXJpYWJsZTogICdDYXRjaCB2YXJpYWJsZSBtYXkgbm90IGJlIGV2YWwgb3IgYXJndW1lbnRzIGlu
IHN0cmljdCBtb2RlJywKKyAgICAgICAgU3RyaWN0VmFyTmFtZTogICdWYXJpYWJsZSBuYW1lIG1h
eSBub3QgYmUgZXZhbCBvciBhcmd1bWVudHMgaW4gc3RyaWN0IG1vZGUnLAorICAgICAgICBTdHJp
Y3RQYXJhbU5hbWU6ICAnUGFyYW1ldGVyIG5hbWUgZXZhbCBvciBhcmd1bWVudHMgaXMgbm90IGFs
bG93ZWQgaW4gc3RyaWN0IG1vZGUnLAorICAgICAgICBTdHJpY3RQYXJhbUR1cGU6ICdTdHJpY3Qg
bW9kZSBmdW5jdGlvbiBtYXkgbm90IGhhdmUgZHVwbGljYXRlIHBhcmFtZXRlciBuYW1lcycsCisg
ICAgICAgIFN0cmljdEZ1bmN0aW9uTmFtZTogICdGdW5jdGlvbiBuYW1lIG1heSBub3QgYmUgZXZh
bCBvciBhcmd1bWVudHMgaW4gc3RyaWN0IG1vZGUnLAorICAgICAgICBTdHJpY3RPY3RhbExpdGVy
YWw6ICAnT2N0YWwgbGl0ZXJhbHMgYXJlIG5vdCBhbGxvd2VkIGluIHN0cmljdCBtb2RlLicsCisg
ICAgICAgIFN0cmljdERlbGV0ZTogICdEZWxldGUgb2YgYW4gdW5xdWFsaWZpZWQgaWRlbnRpZmll
ciBpbiBzdHJpY3QgbW9kZS4nLAorICAgICAgICBTdHJpY3REdXBsaWNhdGVQcm9wZXJ0eTogICdE
dXBsaWNhdGUgZGF0YSBwcm9wZXJ0eSBpbiBvYmplY3QgbGl0ZXJhbCBub3QgYWxsb3dlZCBpbiBz
dHJpY3QgbW9kZScsCisgICAgICAgIEFjY2Vzc29yRGF0YVByb3BlcnR5OiAgJ09iamVjdCBsaXRl
cmFsIG1heSBub3QgaGF2ZSBkYXRhIGFuZCBhY2Nlc3NvciBwcm9wZXJ0eSB3aXRoIHRoZSBzYW1l
IG5hbWUnLAorICAgICAgICBBY2Nlc3NvckdldFNldDogICdPYmplY3QgbGl0ZXJhbCBtYXkgbm90
IGhhdmUgbXVsdGlwbGUgZ2V0L3NldCBhY2Nlc3NvcnMgd2l0aCB0aGUgc2FtZSBuYW1lJywKKyAg
ICAgICAgU3RyaWN0TEhTQXNzaWdubWVudDogICdBc3NpZ25tZW50IHRvIGV2YWwgb3IgYXJndW1l
bnRzIGlzIG5vdCBhbGxvd2VkIGluIHN0cmljdCBtb2RlJywKKyAgICAgICAgU3RyaWN0TEhTUG9z
dGZpeDogICdQb3N0Zml4IGluY3JlbWVudC9kZWNyZW1lbnQgbWF5IG5vdCBoYXZlIGV2YWwgb3Ig
YXJndW1lbnRzIG9wZXJhbmQgaW4gc3RyaWN0IG1vZGUnLAorICAgICAgICBTdHJpY3RMSFNQcmVm
aXg6ICAnUHJlZml4IGluY3JlbWVudC9kZWNyZW1lbnQgbWF5IG5vdCBoYXZlIGV2YWwgb3IgYXJn
dW1lbnRzIG9wZXJhbmQgaW4gc3RyaWN0IG1vZGUnLAorICAgICAgICBTdHJpY3RSZXNlcnZlZFdv
cmQ6ICAnVXNlIG9mIGZ1dHVyZSByZXNlcnZlZCB3b3JkIGluIHN0cmljdCBtb2RlJworICAgIH07
CisKKyAgICAvLyBTZWUgYWxzbyB0b29scy9nZW5lcmF0ZS11bmljb2RlLXJlZ2V4LnB5LgorICAg
IFJlZ2V4ID0geworICAgICAgICBOb25Bc2NpaUlkZW50aWZpZXJTdGFydDogbmV3IFJlZ0V4cCgn
W1x4QUFceEI1XHhCQVx4QzAtXHhENlx4RDgtXHhGNlx4RjgtXHUwMkMxXHUwMkM2LVx1MDJEMVx1
MDJFMC1cdTAyRTRcdTAyRUNcdTAyRUVcdTAzNzAtXHUwMzc0XHUwMzc2XHUwMzc3XHUwMzdBLVx1
MDM3RFx1MDM4Nlx1MDM4OC1cdTAzOEFcdTAzOENcdTAzOEUtXHUwM0ExXHUwM0EzLVx1MDNGNVx1
MDNGNy1cdTA0ODFcdTA0OEEtXHUwNTI3XHUwNTMxLVx1MDU1Nlx1MDU1OVx1MDU2MS1cdTA1ODdc
dTA1RDAtXHUwNUVBXHUwNUYwLVx1MDVGMlx1MDYyMC1cdTA2NEFcdTA2NkVcdTA2NkZcdTA2NzEt
XHUwNkQzXHUwNkQ1XHUwNkU1XHUwNkU2XHUwNkVFXHUwNkVGXHUwNkZBLVx1MDZGQ1x1MDZGRlx1
MDcxMFx1MDcxMi1cdTA3MkZcdTA3NEQtXHUwN0E1XHUwN0IxXHUwN0NBLVx1MDdFQVx1MDdGNFx1
MDdGNVx1MDdGQVx1MDgwMC1cdTA4MTVcdTA4MUFcdTA4MjRcdTA4MjhcdTA4NDAtXHUwODU4XHUw
OEEwXHUwOEEyLVx1MDhBQ1x1MDkwNC1cdTA5MzlcdTA5M0RcdTA5NTBcdTA5NTgtXHUwOTYxXHUw
OTcxLVx1MDk3N1x1MDk3OS1cdTA5N0ZcdTA5ODUtXHUwOThDXHUwOThGXHUwOTkwXHUwOTkzLVx1
MDlBOFx1MDlBQS1cdTA5QjBcdTA5QjJcdTA5QjYtXHUwOUI5XHUwOUJEXHUwOUNFXHUwOURDXHUw
OUREXHUwOURGLVx1MDlFMVx1MDlGMFx1MDlGMVx1MEEwNS1cdTBBMEFcdTBBMEZcdTBBMTBcdTBB
MTMtXHUwQTI4XHUwQTJBLVx1MEEzMFx1MEEzMlx1MEEzM1x1MEEzNVx1MEEzNlx1MEEzOFx1MEEz
OVx1MEE1OS1cdTBBNUNcdTBBNUVcdTBBNzItXHUwQTc0XHUwQTg1LVx1MEE4RFx1MEE4Ri1cdTBB
OTFcdTBBOTMtXHUwQUE4XHUwQUFBLVx1MEFCMFx1MEFCMlx1MEFCM1x1MEFCNS1cdTBBQjlcdTBB
QkRcdTBBRDBcdTBBRTBcdTBBRTFcdTBCMDUtXHUwQjBDXHUwQjBGXHUwQjEwXHUwQjEzLVx1MEIy
OFx1MEIyQS1cdTBCMzBcdTBCMzJcdTBCMzNcdTBCMzUtXHUwQjM5XHUwQjNEXHUwQjVDXHUwQjVE
XHUwQjVGLVx1MEI2MVx1MEI3MVx1MEI4M1x1MEI4NS1cdTBCOEFcdTBCOEUtXHUwQjkwXHUwQjky
LVx1MEI5NVx1MEI5OVx1MEI5QVx1MEI5Q1x1MEI5RVx1MEI5Rlx1MEJBM1x1MEJBNFx1MEJBOC1c
dTBCQUFcdTBCQUUtXHUwQkI5XHUwQkQwXHUwQzA1LVx1MEMwQ1x1MEMwRS1cdTBDMTBcdTBDMTIt
XHUwQzI4XHUwQzJBLVx1MEMzM1x1MEMzNS1cdTBDMzlcdTBDM0RcdTBDNThcdTBDNTlcdTBDNjBc
dTBDNjFcdTBDODUtXHUwQzhDXHUwQzhFLVx1MEM5MFx1MEM5Mi1cdTBDQThcdTBDQUEtXHUwQ0Iz
XHUwQ0I1LVx1MENCOVx1MENCRFx1MENERVx1MENFMFx1MENFMVx1MENGMVx1MENGMlx1MEQwNS1c
dTBEMENcdTBEMEUtXHUwRDEwXHUwRDEyLVx1MEQzQVx1MEQzRFx1MEQ0RVx1MEQ2MFx1MEQ2MVx1
MEQ3QS1cdTBEN0ZcdTBEODUtXHUwRDk2XHUwRDlBLVx1MERCMVx1MERCMy1cdTBEQkJcdTBEQkRc
dTBEQzAtXHUwREM2XHUwRTAxLVx1MEUzMFx1MEUzMlx1MEUzM1x1MEU0MC1cdTBFNDZcdTBFODFc
dTBFODJcdTBFODRcdTBFODdcdTBFODhcdTBFOEFcdTBFOERcdTBFOTQtXHUwRTk3XHUwRTk5LVx1
MEU5Rlx1MEVBMS1cdTBFQTNcdTBFQTVcdTBFQTdcdTBFQUFcdTBFQUJcdTBFQUQtXHUwRUIwXHUw
RUIyXHUwRUIzXHUwRUJEXHUwRUMwLVx1MEVDNFx1MEVDNlx1MEVEQy1cdTBFREZcdTBGMDBcdTBG
NDAtXHUwRjQ3XHUwRjQ5LVx1MEY2Q1x1MEY4OC1cdTBGOENcdTEwMDAtXHUxMDJBXHUxMDNGXHUx
MDUwLVx1MTA1NVx1MTA1QS1cdTEwNURcdTEwNjFcdTEwNjVcdTEwNjZcdTEwNkUtXHUxMDcwXHUx
MDc1LVx1MTA4MVx1MTA4RVx1MTBBMC1cdTEwQzVcdTEwQzdcdTEwQ0RcdTEwRDAtXHUxMEZBXHUx
MEZDLVx1MTI0OFx1MTI0QS1cdTEyNERcdTEyNTAtXHUxMjU2XHUxMjU4XHUxMjVBLVx1MTI1RFx1
MTI2MC1cdTEyODhcdTEyOEEtXHUxMjhEXHUxMjkwLVx1MTJCMFx1MTJCMi1cdTEyQjVcdTEyQjgt
XHUxMkJFXHUxMkMwXHUxMkMyLVx1MTJDNVx1MTJDOC1cdTEyRDZcdTEyRDgtXHUxMzEwXHUxMzEy
LVx1MTMxNVx1MTMxOC1cdTEzNUFcdTEzODAtXHUxMzhGXHUxM0EwLVx1MTNGNFx1MTQwMS1cdTE2
NkNcdTE2NkYtXHUxNjdGXHUxNjgxLVx1MTY5QVx1MTZBMC1cdTE2RUFcdTE2RUUtXHUxNkYwXHUx
NzAwLVx1MTcwQ1x1MTcwRS1cdTE3MTFcdTE3MjAtXHUxNzMxXHUxNzQwLVx1MTc1MVx1MTc2MC1c
dTE3NkNcdTE3NkUtXHUxNzcwXHUxNzgwLVx1MTdCM1x1MTdEN1x1MTdEQ1x1MTgyMC1cdTE4Nzdc
dTE4ODAtXHUxOEE4XHUxOEFBXHUxOEIwLVx1MThGNVx1MTkwMC1cdTE5MUNcdTE5NTAtXHUxOTZE
XHUxOTcwLVx1MTk3NFx1MTk4MC1cdTE5QUJcdTE5QzEtXHUxOUM3XHUxQTAwLVx1MUExNlx1MUEy
MC1cdTFBNTRcdTFBQTdcdTFCMDUtXHUxQjMzXHUxQjQ1LVx1MUI0Qlx1MUI4My1cdTFCQTBcdTFC
QUVcdTFCQUZcdTFCQkEtXHUxQkU1XHUxQzAwLVx1MUMyM1x1MUM0RC1cdTFDNEZcdTFDNUEtXHUx
QzdEXHUxQ0U5LVx1MUNFQ1x1MUNFRS1cdTFDRjFcdTFDRjVcdTFDRjZcdTFEMDAtXHUxREJGXHUx
RTAwLVx1MUYxNVx1MUYxOC1cdTFGMURcdTFGMjAtXHUxRjQ1XHUxRjQ4LVx1MUY0RFx1MUY1MC1c
dTFGNTdcdTFGNTlcdTFGNUJcdTFGNURcdTFGNUYtXHUxRjdEXHUxRjgwLVx1MUZCNFx1MUZCNi1c
dTFGQkNcdTFGQkVcdTFGQzItXHUxRkM0XHUxRkM2LVx1MUZDQ1x1MUZEMC1cdTFGRDNcdTFGRDYt
XHUxRkRCXHUxRkUwLVx1MUZFQ1x1MUZGMi1cdTFGRjRcdTFGRjYtXHUxRkZDXHUyMDcxXHUyMDdG
XHUyMDkwLVx1MjA5Q1x1MjEwMlx1MjEwN1x1MjEwQS1cdTIxMTNcdTIxMTVcdTIxMTktXHUyMTFE
XHUyMTI0XHUyMTI2XHUyMTI4XHUyMTJBLVx1MjEyRFx1MjEyRi1cdTIxMzlcdTIxM0MtXHUyMTNG
XHUyMTQ1LVx1MjE0OVx1MjE0RVx1MjE2MC1cdTIxODhcdTJDMDAtXHUyQzJFXHUyQzMwLVx1MkM1
RVx1MkM2MC1cdTJDRTRcdTJDRUItXHUyQ0VFXHUyQ0YyXHUyQ0YzXHUyRDAwLVx1MkQyNVx1MkQy
N1x1MkQyRFx1MkQzMC1cdTJENjdcdTJENkZcdTJEODAtXHUyRDk2XHUyREEwLVx1MkRBNlx1MkRB
OC1cdTJEQUVcdTJEQjAtXHUyREI2XHUyREI4LVx1MkRCRVx1MkRDMC1cdTJEQzZcdTJEQzgtXHUy
RENFXHUyREQwLVx1MkRENlx1MkREOC1cdTJEREVcdTJFMkZcdTMwMDUtXHUzMDA3XHUzMDIxLVx1
MzAyOVx1MzAzMS1cdTMwMzVcdTMwMzgtXHUzMDNDXHUzMDQxLVx1MzA5Nlx1MzA5RC1cdTMwOUZc
dTMwQTEtXHUzMEZBXHUzMEZDLVx1MzBGRlx1MzEwNS1cdTMxMkRcdTMxMzEtXHUzMThFXHUzMUEw
LVx1MzFCQVx1MzFGMC1cdTMxRkZcdTM0MDAtXHU0REI1XHU0RTAwLVx1OUZDQ1x1QTAwMC1cdUE0
OENcdUE0RDAtXHVBNEZEXHVBNTAwLVx1QTYwQ1x1QTYxMC1cdUE2MUZcdUE2MkFcdUE2MkJcdUE2
NDAtXHVBNjZFXHVBNjdGLVx1QTY5N1x1QTZBMC1cdUE2RUZcdUE3MTctXHVBNzFGXHVBNzIyLVx1
QTc4OFx1QTc4Qi1cdUE3OEVcdUE3OTAtXHVBNzkzXHVBN0EwLVx1QTdBQVx1QTdGOC1cdUE4MDFc
dUE4MDMtXHVBODA1XHVBODA3LVx1QTgwQVx1QTgwQy1cdUE4MjJcdUE4NDAtXHVBODczXHVBODgy
LVx1QThCM1x1QThGMi1cdUE4RjdcdUE4RkJcdUE5MEEtXHVBOTI1XHVBOTMwLVx1QTk0Nlx1QTk2
MC1cdUE5N0NcdUE5ODQtXHVBOUIyXHVBOUNGXHVBQTAwLVx1QUEyOFx1QUE0MC1cdUFBNDJcdUFB
NDQtXHVBQTRCXHVBQTYwLVx1QUE3Nlx1QUE3QVx1QUE4MC1cdUFBQUZcdUFBQjFcdUFBQjVcdUFB
QjZcdUFBQjktXHVBQUJEXHVBQUMwXHVBQUMyXHVBQURCLVx1QUFERFx1QUFFMC1cdUFBRUFcdUFB
RjItXHVBQUY0XHVBQjAxLVx1QUIwNlx1QUIwOS1cdUFCMEVcdUFCMTEtXHVBQjE2XHVBQjIwLVx1
QUIyNlx1QUIyOC1cdUFCMkVcdUFCQzAtXHVBQkUyXHVBQzAwLVx1RDdBM1x1RDdCMC1cdUQ3QzZc
dUQ3Q0ItXHVEN0ZCXHVGOTAwLVx1RkE2RFx1RkE3MC1cdUZBRDlcdUZCMDAtXHVGQjA2XHVGQjEz
LVx1RkIxN1x1RkIxRFx1RkIxRi1cdUZCMjhcdUZCMkEtXHVGQjM2XHVGQjM4LVx1RkIzQ1x1RkIz
RVx1RkI0MFx1RkI0MVx1RkI0M1x1RkI0NFx1RkI0Ni1cdUZCQjFcdUZCRDMtXHVGRDNEXHVGRDUw
LVx1RkQ4Rlx1RkQ5Mi1cdUZEQzdcdUZERjAtXHVGREZCXHVGRTcwLVx1RkU3NFx1RkU3Ni1cdUZF
RkNcdUZGMjEtXHVGRjNBXHVGRjQxLVx1RkY1QVx1RkY2Ni1cdUZGQkVcdUZGQzItXHVGRkM3XHVG
RkNBLVx1RkZDRlx1RkZEMi1cdUZGRDdcdUZGREEtXHVGRkRDXScpLAorICAgICAgICBOb25Bc2Np
aUlkZW50aWZpZXJQYXJ0OiBuZXcgUmVnRXhwKCdbXHhBQVx4QjVceEJBXHhDMC1ceEQ2XHhEOC1c
eEY2XHhGOC1cdTAyQzFcdTAyQzYtXHUwMkQxXHUwMkUwLVx1MDJFNFx1MDJFQ1x1MDJFRVx1MDMw
MC1cdTAzNzRcdTAzNzZcdTAzNzdcdTAzN0EtXHUwMzdEXHUwMzg2XHUwMzg4LVx1MDM4QVx1MDM4
Q1x1MDM4RS1cdTAzQTFcdTAzQTMtXHUwM0Y1XHUwM0Y3LVx1MDQ4MVx1MDQ4My1cdTA0ODdcdTA0
OEEtXHUwNTI3XHUwNTMxLVx1MDU1Nlx1MDU1OVx1MDU2MS1cdTA1ODdcdTA1OTEtXHUwNUJEXHUw
NUJGXHUwNUMxXHUwNUMyXHUwNUM0XHUwNUM1XHUwNUM3XHUwNUQwLVx1MDVFQVx1MDVGMC1cdTA1
RjJcdTA2MTAtXHUwNjFBXHUwNjIwLVx1MDY2OVx1MDY2RS1cdTA2RDNcdTA2RDUtXHUwNkRDXHUw
NkRGLVx1MDZFOFx1MDZFQS1cdTA2RkNcdTA2RkZcdTA3MTAtXHUwNzRBXHUwNzRELVx1MDdCMVx1
MDdDMC1cdTA3RjVcdTA3RkFcdTA4MDAtXHUwODJEXHUwODQwLVx1MDg1Qlx1MDhBMFx1MDhBMi1c
dTA4QUNcdTA4RTQtXHUwOEZFXHUwOTAwLVx1MDk2M1x1MDk2Ni1cdTA5NkZcdTA5NzEtXHUwOTc3
XHUwOTc5LVx1MDk3Rlx1MDk4MS1cdTA5ODNcdTA5ODUtXHUwOThDXHUwOThGXHUwOTkwXHUwOTkz
LVx1MDlBOFx1MDlBQS1cdTA5QjBcdTA5QjJcdTA5QjYtXHUwOUI5XHUwOUJDLVx1MDlDNFx1MDlD
N1x1MDlDOFx1MDlDQi1cdTA5Q0VcdTA5RDdcdTA5RENcdTA5RERcdTA5REYtXHUwOUUzXHUwOUU2
LVx1MDlGMVx1MEEwMS1cdTBBMDNcdTBBMDUtXHUwQTBBXHUwQTBGXHUwQTEwXHUwQTEzLVx1MEEy
OFx1MEEyQS1cdTBBMzBcdTBBMzJcdTBBMzNcdTBBMzVcdTBBMzZcdTBBMzhcdTBBMzlcdTBBM0Nc
dTBBM0UtXHUwQTQyXHUwQTQ3XHUwQTQ4XHUwQTRCLVx1MEE0RFx1MEE1MVx1MEE1OS1cdTBBNUNc
dTBBNUVcdTBBNjYtXHUwQTc1XHUwQTgxLVx1MEE4M1x1MEE4NS1cdTBBOERcdTBBOEYtXHUwQTkx
XHUwQTkzLVx1MEFBOFx1MEFBQS1cdTBBQjBcdTBBQjJcdTBBQjNcdTBBQjUtXHUwQUI5XHUwQUJD
LVx1MEFDNVx1MEFDNy1cdTBBQzlcdTBBQ0ItXHUwQUNEXHUwQUQwXHUwQUUwLVx1MEFFM1x1MEFF
Ni1cdTBBRUZcdTBCMDEtXHUwQjAzXHUwQjA1LVx1MEIwQ1x1MEIwRlx1MEIxMFx1MEIxMy1cdTBC
MjhcdTBCMkEtXHUwQjMwXHUwQjMyXHUwQjMzXHUwQjM1LVx1MEIzOVx1MEIzQy1cdTBCNDRcdTBC
NDdcdTBCNDhcdTBCNEItXHUwQjREXHUwQjU2XHUwQjU3XHUwQjVDXHUwQjVEXHUwQjVGLVx1MEI2
M1x1MEI2Ni1cdTBCNkZcdTBCNzFcdTBCODJcdTBCODNcdTBCODUtXHUwQjhBXHUwQjhFLVx1MEI5
MFx1MEI5Mi1cdTBCOTVcdTBCOTlcdTBCOUFcdTBCOUNcdTBCOUVcdTBCOUZcdTBCQTNcdTBCQTRc
dTBCQTgtXHUwQkFBXHUwQkFFLVx1MEJCOVx1MEJCRS1cdTBCQzJcdTBCQzYtXHUwQkM4XHUwQkNB
LVx1MEJDRFx1MEJEMFx1MEJEN1x1MEJFNi1cdTBCRUZcdTBDMDEtXHUwQzAzXHUwQzA1LVx1MEMw
Q1x1MEMwRS1cdTBDMTBcdTBDMTItXHUwQzI4XHUwQzJBLVx1MEMzM1x1MEMzNS1cdTBDMzlcdTBD
M0QtXHUwQzQ0XHUwQzQ2LVx1MEM0OFx1MEM0QS1cdTBDNERcdTBDNTVcdTBDNTZcdTBDNThcdTBD
NTlcdTBDNjAtXHUwQzYzXHUwQzY2LVx1MEM2Rlx1MEM4Mlx1MEM4M1x1MEM4NS1cdTBDOENcdTBD
OEUtXHUwQzkwXHUwQzkyLVx1MENBOFx1MENBQS1cdTBDQjNcdTBDQjUtXHUwQ0I5XHUwQ0JDLVx1
MENDNFx1MENDNi1cdTBDQzhcdTBDQ0EtXHUwQ0NEXHUwQ0Q1XHUwQ0Q2XHUwQ0RFXHUwQ0UwLVx1
MENFM1x1MENFNi1cdTBDRUZcdTBDRjFcdTBDRjJcdTBEMDJcdTBEMDNcdTBEMDUtXHUwRDBDXHUw
RDBFLVx1MEQxMFx1MEQxMi1cdTBEM0FcdTBEM0QtXHUwRDQ0XHUwRDQ2LVx1MEQ0OFx1MEQ0QS1c
dTBENEVcdTBENTdcdTBENjAtXHUwRDYzXHUwRDY2LVx1MEQ2Rlx1MEQ3QS1cdTBEN0ZcdTBEODJc
dTBEODNcdTBEODUtXHUwRDk2XHUwRDlBLVx1MERCMVx1MERCMy1cdTBEQkJcdTBEQkRcdTBEQzAt
XHUwREM2XHUwRENBXHUwRENGLVx1MERENFx1MERENlx1MEREOC1cdTBEREZcdTBERjJcdTBERjNc
dTBFMDEtXHUwRTNBXHUwRTQwLVx1MEU0RVx1MEU1MC1cdTBFNTlcdTBFODFcdTBFODJcdTBFODRc
dTBFODdcdTBFODhcdTBFOEFcdTBFOERcdTBFOTQtXHUwRTk3XHUwRTk5LVx1MEU5Rlx1MEVBMS1c
dTBFQTNcdTBFQTVcdTBFQTdcdTBFQUFcdTBFQUJcdTBFQUQtXHUwRUI5XHUwRUJCLVx1MEVCRFx1
MEVDMC1cdTBFQzRcdTBFQzZcdTBFQzgtXHUwRUNEXHUwRUQwLVx1MEVEOVx1MEVEQy1cdTBFREZc
dTBGMDBcdTBGMThcdTBGMTlcdTBGMjAtXHUwRjI5XHUwRjM1XHUwRjM3XHUwRjM5XHUwRjNFLVx1
MEY0N1x1MEY0OS1cdTBGNkNcdTBGNzEtXHUwRjg0XHUwRjg2LVx1MEY5N1x1MEY5OS1cdTBGQkNc
dTBGQzZcdTEwMDAtXHUxMDQ5XHUxMDUwLVx1MTA5RFx1MTBBMC1cdTEwQzVcdTEwQzdcdTEwQ0Rc
dTEwRDAtXHUxMEZBXHUxMEZDLVx1MTI0OFx1MTI0QS1cdTEyNERcdTEyNTAtXHUxMjU2XHUxMjU4
XHUxMjVBLVx1MTI1RFx1MTI2MC1cdTEyODhcdTEyOEEtXHUxMjhEXHUxMjkwLVx1MTJCMFx1MTJC
Mi1cdTEyQjVcdTEyQjgtXHUxMkJFXHUxMkMwXHUxMkMyLVx1MTJDNVx1MTJDOC1cdTEyRDZcdTEy
RDgtXHUxMzEwXHUxMzEyLVx1MTMxNVx1MTMxOC1cdTEzNUFcdTEzNUQtXHUxMzVGXHUxMzgwLVx1
MTM4Rlx1MTNBMC1cdTEzRjRcdTE0MDEtXHUxNjZDXHUxNjZGLVx1MTY3Rlx1MTY4MS1cdTE2OUFc
dTE2QTAtXHUxNkVBXHUxNkVFLVx1MTZGMFx1MTcwMC1cdTE3MENcdTE3MEUtXHUxNzE0XHUxNzIw
LVx1MTczNFx1MTc0MC1cdTE3NTNcdTE3NjAtXHUxNzZDXHUxNzZFLVx1MTc3MFx1MTc3Mlx1MTc3
M1x1MTc4MC1cdTE3RDNcdTE3RDdcdTE3RENcdTE3RERcdTE3RTAtXHUxN0U5XHUxODBCLVx1MTgw
RFx1MTgxMC1cdTE4MTlcdTE4MjAtXHUxODc3XHUxODgwLVx1MThBQVx1MThCMC1cdTE4RjVcdTE5
MDAtXHUxOTFDXHUxOTIwLVx1MTkyQlx1MTkzMC1cdTE5M0JcdTE5NDYtXHUxOTZEXHUxOTcwLVx1
MTk3NFx1MTk4MC1cdTE5QUJcdTE5QjAtXHUxOUM5XHUxOUQwLVx1MTlEOVx1MUEwMC1cdTFBMUJc
dTFBMjAtXHUxQTVFXHUxQTYwLVx1MUE3Q1x1MUE3Ri1cdTFBODlcdTFBOTAtXHUxQTk5XHUxQUE3
XHUxQjAwLVx1MUI0Qlx1MUI1MC1cdTFCNTlcdTFCNkItXHUxQjczXHUxQjgwLVx1MUJGM1x1MUMw
MC1cdTFDMzdcdTFDNDAtXHUxQzQ5XHUxQzRELVx1MUM3RFx1MUNEMC1cdTFDRDJcdTFDRDQtXHUx
Q0Y2XHUxRDAwLVx1MURFNlx1MURGQy1cdTFGMTVcdTFGMTgtXHUxRjFEXHUxRjIwLVx1MUY0NVx1
MUY0OC1cdTFGNERcdTFGNTAtXHUxRjU3XHUxRjU5XHUxRjVCXHUxRjVEXHUxRjVGLVx1MUY3RFx1
MUY4MC1cdTFGQjRcdTFGQjYtXHUxRkJDXHUxRkJFXHUxRkMyLVx1MUZDNFx1MUZDNi1cdTFGQ0Nc
dTFGRDAtXHUxRkQzXHUxRkQ2LVx1MUZEQlx1MUZFMC1cdTFGRUNcdTFGRjItXHUxRkY0XHUxRkY2
LVx1MUZGQ1x1MjAwQ1x1MjAwRFx1MjAzRlx1MjA0MFx1MjA1NFx1MjA3MVx1MjA3Rlx1MjA5MC1c
dTIwOUNcdTIwRDAtXHUyMERDXHUyMEUxXHUyMEU1LVx1MjBGMFx1MjEwMlx1MjEwN1x1MjEwQS1c
dTIxMTNcdTIxMTVcdTIxMTktXHUyMTFEXHUyMTI0XHUyMTI2XHUyMTI4XHUyMTJBLVx1MjEyRFx1
MjEyRi1cdTIxMzlcdTIxM0MtXHUyMTNGXHUyMTQ1LVx1MjE0OVx1MjE0RVx1MjE2MC1cdTIxODhc
dTJDMDAtXHUyQzJFXHUyQzMwLVx1MkM1RVx1MkM2MC1cdTJDRTRcdTJDRUItXHUyQ0YzXHUyRDAw
LVx1MkQyNVx1MkQyN1x1MkQyRFx1MkQzMC1cdTJENjdcdTJENkZcdTJEN0YtXHUyRDk2XHUyREEw
LVx1MkRBNlx1MkRBOC1cdTJEQUVcdTJEQjAtXHUyREI2XHUyREI4LVx1MkRCRVx1MkRDMC1cdTJE
QzZcdTJEQzgtXHUyRENFXHUyREQwLVx1MkRENlx1MkREOC1cdTJEREVcdTJERTAtXHUyREZGXHUy
RTJGXHUzMDA1LVx1MzAwN1x1MzAyMS1cdTMwMkZcdTMwMzEtXHUzMDM1XHUzMDM4LVx1MzAzQ1x1
MzA0MS1cdTMwOTZcdTMwOTlcdTMwOUFcdTMwOUQtXHUzMDlGXHUzMEExLVx1MzBGQVx1MzBGQy1c
dTMwRkZcdTMxMDUtXHUzMTJEXHUzMTMxLVx1MzE4RVx1MzFBMC1cdTMxQkFcdTMxRjAtXHUzMUZG
XHUzNDAwLVx1NERCNVx1NEUwMC1cdTlGQ0NcdUEwMDAtXHVBNDhDXHVBNEQwLVx1QTRGRFx1QTUw
MC1cdUE2MENcdUE2MTAtXHVBNjJCXHVBNjQwLVx1QTY2Rlx1QTY3NC1cdUE2N0RcdUE2N0YtXHVB
Njk3XHVBNjlGLVx1QTZGMVx1QTcxNy1cdUE3MUZcdUE3MjItXHVBNzg4XHVBNzhCLVx1QTc4RVx1
QTc5MC1cdUE3OTNcdUE3QTAtXHVBN0FBXHVBN0Y4LVx1QTgyN1x1QTg0MC1cdUE4NzNcdUE4ODAt
XHVBOEM0XHVBOEQwLVx1QThEOVx1QThFMC1cdUE4RjdcdUE4RkJcdUE5MDAtXHVBOTJEXHVBOTMw
LVx1QTk1M1x1QTk2MC1cdUE5N0NcdUE5ODAtXHVBOUMwXHVBOUNGLVx1QTlEOVx1QUEwMC1cdUFB
MzZcdUFBNDAtXHVBQTREXHVBQTUwLVx1QUE1OVx1QUE2MC1cdUFBNzZcdUFBN0FcdUFBN0JcdUFB
ODAtXHVBQUMyXHVBQURCLVx1QUFERFx1QUFFMC1cdUFBRUZcdUFBRjItXHVBQUY2XHVBQjAxLVx1
QUIwNlx1QUIwOS1cdUFCMEVcdUFCMTEtXHVBQjE2XHVBQjIwLVx1QUIyNlx1QUIyOC1cdUFCMkVc
dUFCQzAtXHVBQkVBXHVBQkVDXHVBQkVEXHVBQkYwLVx1QUJGOVx1QUMwMC1cdUQ3QTNcdUQ3QjAt
XHVEN0M2XHVEN0NCLVx1RDdGQlx1RjkwMC1cdUZBNkRcdUZBNzAtXHVGQUQ5XHVGQjAwLVx1RkIw
Nlx1RkIxMy1cdUZCMTdcdUZCMUQtXHVGQjI4XHVGQjJBLVx1RkIzNlx1RkIzOC1cdUZCM0NcdUZC
M0VcdUZCNDBcdUZCNDFcdUZCNDNcdUZCNDRcdUZCNDYtXHVGQkIxXHVGQkQzLVx1RkQzRFx1RkQ1
MC1cdUZEOEZcdUZEOTItXHVGREM3XHVGREYwLVx1RkRGQlx1RkUwMC1cdUZFMEZcdUZFMjAtXHVG
RTI2XHVGRTMzXHVGRTM0XHVGRTRELVx1RkU0Rlx1RkU3MC1cdUZFNzRcdUZFNzYtXHVGRUZDXHVG
RjEwLVx1RkYxOVx1RkYyMS1cdUZGM0FcdUZGM0ZcdUZGNDEtXHVGRjVBXHVGRjY2LVx1RkZCRVx1
RkZDMi1cdUZGQzdcdUZGQ0EtXHVGRkNGXHVGRkQyLVx1RkZEN1x1RkZEQS1cdUZGRENdJykKKyAg
ICB9OworCisgICAgLy8gRW5zdXJlIHRoZSBjb25kaXRpb24gaXMgdHJ1ZSwgb3RoZXJ3aXNlIHRo
cm93IGFuIGVycm9yLgorICAgIC8vIFRoaXMgaXMgb25seSB0byBoYXZlIGEgYmV0dGVyIGNvbnRy
YWN0IHNlbWFudGljLCBpLmUuIGFub3RoZXIgc2FmZXR5IG5ldAorICAgIC8vIHRvIGNhdGNoIGEg
bG9naWMgZXJyb3IuIFRoZSBjb25kaXRpb24gc2hhbGwgYmUgZnVsZmlsbGVkIGluIG5vcm1hbCBj
YXNlLgorICAgIC8vIERvIE5PVCB1c2UgdGhpcyB0byBlbmZvcmNlIGEgY2VydGFpbiBjb25kaXRp
b24gb24gYW55IHVzZXIgaW5wdXQuCisKKyAgICBmdW5jdGlvbiBhc3NlcnQoY29uZGl0aW9uLCBt
ZXNzYWdlKSB7CisgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqLworICAgICAgICBpZiAo
IWNvbmRpdGlvbikgeworICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdBU1NFUlQ6ICcgKyBt
ZXNzYWdlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZ1bmN0aW9uIGlzRGVjaW1hbERpZ2l0
KGNoKSB7CisgICAgICAgIHJldHVybiAoY2ggPj0gNDggJiYgY2ggPD0gNTcpOyAgIC8vIDAuLjkK
KyAgICB9CisKKyAgICBmdW5jdGlvbiBpc0hleERpZ2l0KGNoKSB7CisgICAgICAgIHJldHVybiAn
MDEyMzQ1Njc4OWFiY2RlZkFCQ0RFRicuaW5kZXhPZihjaCkgPj0gMDsKKyAgICB9CisKKyAgICBm
dW5jdGlvbiBpc09jdGFsRGlnaXQoY2gpIHsKKyAgICAgICAgcmV0dXJuICcwMTIzNDU2NycuaW5k
ZXhPZihjaCkgPj0gMDsKKyAgICB9CisKKworICAgIC8vIDcuMiBXaGl0ZSBTcGFjZQorCisgICAg
ZnVuY3Rpb24gaXNXaGl0ZVNwYWNlKGNoKSB7CisgICAgICAgIHJldHVybiAoY2ggPT09IDB4MjAp
IHx8IChjaCA9PT0gMHgwOSkgfHwgKGNoID09PSAweDBCKSB8fCAoY2ggPT09IDB4MEMpIHx8IChj
aCA9PT0gMHhBMCkgfHwKKyAgICAgICAgICAgIChjaCA+PSAweDE2ODAgJiYgWzB4MTY4MCwgMHgx
ODBFLCAweDIwMDAsIDB4MjAwMSwgMHgyMDAyLCAweDIwMDMsIDB4MjAwNCwgMHgyMDA1LCAweDIw
MDYsIDB4MjAwNywgMHgyMDA4LCAweDIwMDksIDB4MjAwQSwgMHgyMDJGLCAweDIwNUYsIDB4MzAw
MCwgMHhGRUZGXS5pbmRleE9mKGNoKSA+PSAwKTsKKyAgICB9CisKKyAgICAvLyA3LjMgTGluZSBU
ZXJtaW5hdG9ycworCisgICAgZnVuY3Rpb24gaXNMaW5lVGVybWluYXRvcihjaCkgeworICAgICAg
ICByZXR1cm4gKGNoID09PSAweDBBKSB8fCAoY2ggPT09IDB4MEQpIHx8IChjaCA9PT0gMHgyMDI4
KSB8fCAoY2ggPT09IDB4MjAyOSk7CisgICAgfQorCisgICAgLy8gNy42IElkZW50aWZpZXIgTmFt
ZXMgYW5kIElkZW50aWZpZXJzCisKKyAgICBmdW5jdGlvbiBpc0lkZW50aWZpZXJTdGFydChjaCkg
eworICAgICAgICByZXR1cm4gKGNoID09PSAweDI0KSB8fCAoY2ggPT09IDB4NUYpIHx8ICAvLyAk
IChkb2xsYXIpIGFuZCBfICh1bmRlcnNjb3JlKQorICAgICAgICAgICAgKGNoID49IDB4NDEgJiYg
Y2ggPD0gMHg1QSkgfHwgICAgICAgICAvLyBBLi5aCisgICAgICAgICAgICAoY2ggPj0gMHg2MSAm
JiBjaCA8PSAweDdBKSB8fCAgICAgICAgIC8vIGEuLnoKKyAgICAgICAgICAgIChjaCA9PT0gMHg1
QykgfHwgICAgICAgICAgICAgICAgICAgICAgLy8gXCAoYmFja3NsYXNoKQorICAgICAgICAgICAg
KChjaCA+PSAweDgwKSAmJiBSZWdleC5Ob25Bc2NpaUlkZW50aWZpZXJTdGFydC50ZXN0KFN0cmlu
Zy5mcm9tQ2hhckNvZGUoY2gpKSk7CisgICAgfQorCisgICAgZnVuY3Rpb24gaXNJZGVudGlmaWVy
UGFydChjaCkgeworICAgICAgICByZXR1cm4gKGNoID09PSAweDI0KSB8fCAoY2ggPT09IDB4NUYp
IHx8ICAvLyAkIChkb2xsYXIpIGFuZCBfICh1bmRlcnNjb3JlKQorICAgICAgICAgICAgKGNoID49
IDB4NDEgJiYgY2ggPD0gMHg1QSkgfHwgICAgICAgICAvLyBBLi5aCisgICAgICAgICAgICAoY2gg
Pj0gMHg2MSAmJiBjaCA8PSAweDdBKSB8fCAgICAgICAgIC8vIGEuLnoKKyAgICAgICAgICAgIChj
aCA+PSAweDMwICYmIGNoIDw9IDB4MzkpIHx8ICAgICAgICAgLy8gMC4uOQorICAgICAgICAgICAg
KGNoID09PSAweDVDKSB8fCAgICAgICAgICAgICAgICAgICAgICAvLyBcIChiYWNrc2xhc2gpCisg
ICAgICAgICAgICAoKGNoID49IDB4ODApICYmIFJlZ2V4Lk5vbkFzY2lpSWRlbnRpZmllclBhcnQu
dGVzdChTdHJpbmcuZnJvbUNoYXJDb2RlKGNoKSkpOworICAgIH0KKworICAgIC8vIDcuNi4xLjIg
RnV0dXJlIFJlc2VydmVkIFdvcmRzCisKKyAgICBmdW5jdGlvbiBpc0Z1dHVyZVJlc2VydmVkV29y
ZChpZCkgeworICAgICAgICBzd2l0Y2ggKGlkKSB7CisgICAgICAgIGNhc2UgJ2NsYXNzJzoKKyAg
ICAgICAgY2FzZSAnZW51bSc6CisgICAgICAgIGNhc2UgJ2V4cG9ydCc6CisgICAgICAgIGNhc2Ug
J2V4dGVuZHMnOgorICAgICAgICBjYXNlICdpbXBvcnQnOgorICAgICAgICBjYXNlICdzdXBlcic6
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZ1bmN0aW9uIGlzU3RyaWN0
TW9kZVJlc2VydmVkV29yZChpZCkgeworICAgICAgICBzd2l0Y2ggKGlkKSB7CisgICAgICAgIGNh
c2UgJ2ltcGxlbWVudHMnOgorICAgICAgICBjYXNlICdpbnRlcmZhY2UnOgorICAgICAgICBjYXNl
ICdwYWNrYWdlJzoKKyAgICAgICAgY2FzZSAncHJpdmF0ZSc6CisgICAgICAgIGNhc2UgJ3Byb3Rl
Y3RlZCc6CisgICAgICAgIGNhc2UgJ3B1YmxpYyc6CisgICAgICAgIGNhc2UgJ3N0YXRpYyc6Cisg
ICAgICAgIGNhc2UgJ3lpZWxkJzoKKyAgICAgICAgY2FzZSAnbGV0JzoKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICB9CisgICAgfQorCisgICAgZnVuY3Rpb24gaXNSZXN0cmljdGVkV29yZChpZCkgewor
ICAgICAgICByZXR1cm4gaWQgPT09ICdldmFsJyB8fCBpZCA9PT0gJ2FyZ3VtZW50cyc7CisgICAg
fQorCisgICAgLy8gNy42LjEuMSBLZXl3b3JkcworCisgICAgZnVuY3Rpb24gaXNLZXl3b3JkKGlk
KSB7CisgICAgICAgIGlmIChzdHJpY3QgJiYgaXNTdHJpY3RNb2RlUmVzZXJ2ZWRXb3JkKGlkKSkg
eworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKworICAgICAgICAvLyAnY29u
c3QnIGlzIHNwZWNpYWxpemVkIGFzIEtleXdvcmQgaW4gVjguCisgICAgICAgIC8vICd5aWVsZCcg
YW5kICdsZXQnIGFyZSBmb3IgY29tcGF0aWJsaXR5IHdpdGggU3BpZGVyTW9ua2V5IGFuZCBFUy5u
ZXh0LgorICAgICAgICAvLyBTb21lIG90aGVycyBhcmUgZnJvbSBmdXR1cmUgcmVzZXJ2ZWQgd29y
ZHMuCisKKyAgICAgICAgc3dpdGNoIChpZC5sZW5ndGgpIHsKKyAgICAgICAgY2FzZSAyOgorICAg
ICAgICAgICAgcmV0dXJuIChpZCA9PT0gJ2lmJykgfHwgKGlkID09PSAnaW4nKSB8fCAoaWQgPT09
ICdkbycpOworICAgICAgICBjYXNlIDM6CisgICAgICAgICAgICByZXR1cm4gKGlkID09PSAndmFy
JykgfHwgKGlkID09PSAnZm9yJykgfHwgKGlkID09PSAnbmV3JykgfHwKKyAgICAgICAgICAgICAg
ICAoaWQgPT09ICd0cnknKSB8fCAoaWQgPT09ICdsZXQnKTsKKyAgICAgICAgY2FzZSA0OgorICAg
ICAgICAgICAgcmV0dXJuIChpZCA9PT0gJ3RoaXMnKSB8fCAoaWQgPT09ICdlbHNlJykgfHwgKGlk
ID09PSAnY2FzZScpIHx8CisgICAgICAgICAgICAgICAgKGlkID09PSAndm9pZCcpIHx8IChpZCA9
PT0gJ3dpdGgnKSB8fCAoaWQgPT09ICdlbnVtJyk7CisgICAgICAgIGNhc2UgNToKKyAgICAgICAg
ICAgIHJldHVybiAoaWQgPT09ICd3aGlsZScpIHx8IChpZCA9PT0gJ2JyZWFrJykgfHwgKGlkID09
PSAnY2F0Y2gnKSB8fAorICAgICAgICAgICAgICAgIChpZCA9PT0gJ3Rocm93JykgfHwgKGlkID09
PSAnY29uc3QnKSB8fCAoaWQgPT09ICd5aWVsZCcpIHx8CisgICAgICAgICAgICAgICAgKGlkID09
PSAnY2xhc3MnKSB8fCAoaWQgPT09ICdzdXBlcicpOworICAgICAgICBjYXNlIDY6CisgICAgICAg
ICAgICByZXR1cm4gKGlkID09PSAncmV0dXJuJykgfHwgKGlkID09PSAndHlwZW9mJykgfHwgKGlk
ID09PSAnZGVsZXRlJykgfHwKKyAgICAgICAgICAgICAgICAoaWQgPT09ICdzd2l0Y2gnKSB8fCAo
aWQgPT09ICdleHBvcnQnKSB8fCAoaWQgPT09ICdpbXBvcnQnKTsKKyAgICAgICAgY2FzZSA3Ogor
ICAgICAgICAgICAgcmV0dXJuIChpZCA9PT0gJ2RlZmF1bHQnKSB8fCAoaWQgPT09ICdmaW5hbGx5
JykgfHwgKGlkID09PSAnZXh0ZW5kcycpOworICAgICAgICBjYXNlIDg6CisgICAgICAgICAgICBy
ZXR1cm4gKGlkID09PSAnZnVuY3Rpb24nKSB8fCAoaWQgPT09ICdjb250aW51ZScpIHx8IChpZCA9
PT0gJ2RlYnVnZ2VyJyk7CisgICAgICAgIGNhc2UgMTA6CisgICAgICAgICAgICByZXR1cm4gKGlk
ID09PSAnaW5zdGFuY2VvZicpOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gNy40IENvbW1lbnRzCisKKyAgICBm
dW5jdGlvbiBhZGRDb21tZW50KHR5cGUsIHZhbHVlLCBzdGFydCwgZW5kLCBsb2MpIHsKKyAgICAg
ICAgdmFyIGNvbW1lbnQsIGF0dGFjaGVyOworCisgICAgICAgIGFzc2VydCh0eXBlb2Ygc3RhcnQg
PT09ICdudW1iZXInLCAnQ29tbWVudCBtdXN0IGhhdmUgdmFsaWQgcG9zaXRpb24nKTsKKworICAg
ICAgICAvLyBCZWNhdXNlIHRoZSB3YXkgdGhlIGFjdHVhbCB0b2tlbiBpcyBzY2FubmVkLCBvZnRl
biB0aGUgY29tbWVudHMKKyAgICAgICAgLy8gKGlmIGFueSkgYXJlIHNraXBwZWQgdHdpY2UgZHVy
aW5nIHRoZSBsZXhpY2FsIGFuYWx5c2lzLgorICAgICAgICAvLyBUaHVzLCB3ZSBuZWVkIHRvIHNr
aXAgYWRkaW5nIGEgY29tbWVudCBpZiB0aGUgY29tbWVudCBhcnJheSBhbHJlYWR5CisgICAgICAg
IC8vIGhhbmRsZWQgaXQuCisgICAgICAgIGlmIChzdGF0ZS5sYXN0Q29tbWVudFN0YXJ0ID49IHN0
YXJ0KSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgc3RhdGUubGFz
dENvbW1lbnRTdGFydCA9IHN0YXJ0OworCisgICAgICAgIGNvbW1lbnQgPSB7CisgICAgICAgICAg
ICB0eXBlOiB0eXBlLAorICAgICAgICAgICAgdmFsdWU6IHZhbHVlCisgICAgICAgIH07CisgICAg
ICAgIGlmIChleHRyYS5yYW5nZSkgeworICAgICAgICAgICAgY29tbWVudC5yYW5nZSA9IFtzdGFy
dCwgZW5kXTsKKyAgICAgICAgfQorICAgICAgICBpZiAoZXh0cmEubG9jKSB7CisgICAgICAgICAg
ICBjb21tZW50LmxvYyA9IGxvYzsKKyAgICAgICAgfQorICAgICAgICBleHRyYS5jb21tZW50cy5w
dXNoKGNvbW1lbnQpOworICAgICAgICBpZiAoZXh0cmEuYXR0YWNoQ29tbWVudCkgeworICAgICAg
ICAgICAgZXh0cmEubGVhZGluZ0NvbW1lbnRzLnB1c2goY29tbWVudCk7CisgICAgICAgICAgICBl
eHRyYS50cmFpbGluZ0NvbW1lbnRzLnB1c2goY29tbWVudCk7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBmdW5jdGlvbiBza2lwU2luZ2xlTGluZUNvbW1lbnQob2Zmc2V0KSB7CisgICAgICAgIHZh
ciBzdGFydCwgbG9jLCBjaCwgY29tbWVudDsKKworICAgICAgICBzdGFydCA9IGluZGV4IC0gb2Zm
c2V0OworICAgICAgICBsb2MgPSB7CisgICAgICAgICAgICBzdGFydDogeworICAgICAgICAgICAg
ICAgIGxpbmU6IGxpbmVOdW1iZXIsCisgICAgICAgICAgICAgICAgY29sdW1uOiBpbmRleCAtIGxp
bmVTdGFydCAtIG9mZnNldAorICAgICAgICAgICAgfQorICAgICAgICB9OworCisgICAgICAgIHdo
aWxlIChpbmRleCA8IGxlbmd0aCkgeworICAgICAgICAgICAgY2ggPSBzb3VyY2UuY2hhckNvZGVB
dChpbmRleCk7CisgICAgICAgICAgICArK2luZGV4OworICAgICAgICAgICAgaWYgKGlzTGluZVRl
cm1pbmF0b3IoY2gpKSB7CisgICAgICAgICAgICAgICAgaWYgKGV4dHJhLmNvbW1lbnRzKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGNvbW1lbnQgPSBzb3VyY2Uuc2xpY2Uoc3RhcnQgKyBvZmZzZXQs
IGluZGV4IC0gMSk7CisgICAgICAgICAgICAgICAgICAgIGxvYy5lbmQgPSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBsaW5lOiBsaW5lTnVtYmVyLAorICAgICAgICAgICAgICAgICAgICAgICAg
Y29sdW1uOiBpbmRleCAtIGxpbmVTdGFydCAtIDEKKyAgICAgICAgICAgICAgICAgICAgfTsKKyAg
ICAgICAgICAgICAgICAgICAgYWRkQ29tbWVudCgnTGluZScsIGNvbW1lbnQsIHN0YXJ0LCBpbmRl
eCAtIDEsIGxvYyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChjaCA9
PT0gMTMgJiYgc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpID09PSAxMCkgeworICAgICAgICAgICAg
ICAgICAgICArK2luZGV4OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICArK2xp
bmVOdW1iZXI7CisgICAgICAgICAgICAgICAgbGluZVN0YXJ0ID0gaW5kZXg7CisgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKGV4
dHJhLmNvbW1lbnRzKSB7CisgICAgICAgICAgICBjb21tZW50ID0gc291cmNlLnNsaWNlKHN0YXJ0
ICsgb2Zmc2V0LCBpbmRleCk7CisgICAgICAgICAgICBsb2MuZW5kID0geworICAgICAgICAgICAg
ICAgIGxpbmU6IGxpbmVOdW1iZXIsCisgICAgICAgICAgICAgICAgY29sdW1uOiBpbmRleCAtIGxp
bmVTdGFydAorICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIGFkZENvbW1lbnQoJ0xpbmUnLCBj
b21tZW50LCBzdGFydCwgaW5kZXgsIGxvYyk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmdW5j
dGlvbiBza2lwTXVsdGlMaW5lQ29tbWVudCgpIHsKKyAgICAgICAgdmFyIHN0YXJ0LCBsb2MsIGNo
LCBjb21tZW50OworCisgICAgICAgIGlmIChleHRyYS5jb21tZW50cykgeworICAgICAgICAgICAg
c3RhcnQgPSBpbmRleCAtIDI7CisgICAgICAgICAgICBsb2MgPSB7CisgICAgICAgICAgICAgICAg
c3RhcnQ6IHsKKyAgICAgICAgICAgICAgICAgICAgbGluZTogbGluZU51bWJlciwKKyAgICAgICAg
ICAgICAgICAgICAgY29sdW1uOiBpbmRleCAtIGxpbmVTdGFydCAtIDIKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9OworICAgICAgICB9CisKKyAgICAgICAgd2hpbGUgKGluZGV4IDwg
bGVuZ3RoKSB7CisgICAgICAgICAgICBjaCA9IHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KTsKKyAg
ICAgICAgICAgIGlmIChpc0xpbmVUZXJtaW5hdG9yKGNoKSkgeworICAgICAgICAgICAgICAgIGlm
IChjaCA9PT0gMHgwRCAmJiBzb3VyY2UuY2hhckNvZGVBdChpbmRleCArIDEpID09PSAweDBBKSB7
CisgICAgICAgICAgICAgICAgICAgICsraW5kZXg7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICsrbGluZU51bWJlcjsKKyAgICAgICAgICAgICAgICArK2luZGV4OworICAgICAg
ICAgICAgICAgIGxpbmVTdGFydCA9IGluZGV4OworICAgICAgICAgICAgICAgIGlmIChpbmRleCA+
PSBsZW5ndGgpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMu
VW5leHBlY3RlZFRva2VuLCAnSUxMRUdBTCcpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0gZWxzZSBpZiAoY2ggPT09IDB4MkEpIHsKKyAgICAgICAgICAgICAgICAvLyBCbG9jayBj
b21tZW50IGVuZHMgd2l0aCAnKi8nLgorICAgICAgICAgICAgICAgIGlmIChzb3VyY2UuY2hhckNv
ZGVBdChpbmRleCArIDEpID09PSAweDJGKSB7CisgICAgICAgICAgICAgICAgICAgICsraW5kZXg7
CisgICAgICAgICAgICAgICAgICAgICsraW5kZXg7CisgICAgICAgICAgICAgICAgICAgIGlmIChl
eHRyYS5jb21tZW50cykgeworICAgICAgICAgICAgICAgICAgICAgICAgY29tbWVudCA9IHNvdXJj
ZS5zbGljZShzdGFydCArIDIsIGluZGV4IC0gMik7CisgICAgICAgICAgICAgICAgICAgICAgICBs
b2MuZW5kID0geworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmU6IGxpbmVOdW1iZXIs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uOiBpbmRleCAtIGxpbmVTdGFydAor
ICAgICAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZENv
bW1lbnQoJ0Jsb2NrJywgY29tbWVudCwgc3RhcnQsIGluZGV4LCBsb2MpOworICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgKytpbmRleDsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgKytpbmRleDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHRo
cm93RXJyb3Ioe30sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgJ0lMTEVHQUwnKTsKKyAgICB9
CisKKyAgICBmdW5jdGlvbiBza2lwQ29tbWVudCgpIHsKKyAgICAgICAgdmFyIGNoLCBzdGFydDsK
KworICAgICAgICBzdGFydCA9IChpbmRleCA9PT0gMCk7CisgICAgICAgIHdoaWxlIChpbmRleCA8
IGxlbmd0aCkgeworICAgICAgICAgICAgY2ggPSBzb3VyY2UuY2hhckNvZGVBdChpbmRleCk7CisK
KyAgICAgICAgICAgIGlmIChpc1doaXRlU3BhY2UoY2gpKSB7CisgICAgICAgICAgICAgICAgKytp
bmRleDsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNMaW5lVGVybWluYXRvcihjaCkpIHsKKyAg
ICAgICAgICAgICAgICArK2luZGV4OworICAgICAgICAgICAgICAgIGlmIChjaCA9PT0gMHgwRCAm
JiBzb3VyY2UuY2hhckNvZGVBdChpbmRleCkgPT09IDB4MEEpIHsKKyAgICAgICAgICAgICAgICAg
ICAgKytpbmRleDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgKytsaW5lTnVt
YmVyOworICAgICAgICAgICAgICAgIGxpbmVTdGFydCA9IGluZGV4OworICAgICAgICAgICAgICAg
IHN0YXJ0ID0gdHJ1ZTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoY2ggPT09IDB4MkYpIHsgLy8g
VSswMDJGIGlzICcvJworICAgICAgICAgICAgICAgIGNoID0gc291cmNlLmNoYXJDb2RlQXQoaW5k
ZXggKyAxKTsKKyAgICAgICAgICAgICAgICBpZiAoY2ggPT09IDB4MkYpIHsKKyAgICAgICAgICAg
ICAgICAgICAgKytpbmRleDsKKyAgICAgICAgICAgICAgICAgICAgKytpbmRleDsKKyAgICAgICAg
ICAgICAgICAgICAgc2tpcFNpbmdsZUxpbmVDb21tZW50KDIpOworICAgICAgICAgICAgICAgICAg
ICBzdGFydCA9IHRydWU7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaCA9PT0gMHgyQSkg
eyAgLy8gVSswMDJBIGlzICcqJworICAgICAgICAgICAgICAgICAgICArK2luZGV4OworICAgICAg
ICAgICAgICAgICAgICArK2luZGV4OworICAgICAgICAgICAgICAgICAgICBza2lwTXVsdGlMaW5l
Q29tbWVudCgpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RhcnQg
JiYgY2ggPT09IDB4MkQpIHsgLy8gVSswMDJEIGlzICctJworICAgICAgICAgICAgICAgIC8vIFUr
MDAzRSBpcyAnPicKKyAgICAgICAgICAgICAgICBpZiAoKHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4
ICsgMSkgPT09IDB4MkQpICYmIChzb3VyY2UuY2hhckNvZGVBdChpbmRleCArIDIpID09PSAweDNF
KSkgeworICAgICAgICAgICAgICAgICAgICAvLyAnLS0+JyBpcyBhIHNpbmdsZS1saW5lIGNvbW1l
bnQKKyAgICAgICAgICAgICAgICAgICAgaW5kZXggKz0gMzsKKyAgICAgICAgICAgICAgICAgICAg
c2tpcFNpbmdsZUxpbmVDb21tZW50KDMpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0g
ZWxzZSBpZiAoY2ggPT09IDB4M0MpIHsgLy8gVSswMDNDIGlzICc8JworICAgICAgICAgICAgICAg
IGlmIChzb3VyY2Uuc2xpY2UoaW5kZXggKyAxLCBpbmRleCArIDQpID09PSAnIS0tJykgeworICAg
ICAgICAgICAgICAgICAgICArK2luZGV4OyAvLyBgPGAKKyAgICAgICAgICAgICAgICAgICAgKytp
bmRleDsgLy8gYCFgCisgICAgICAgICAgICAgICAgICAgICsraW5kZXg7IC8vIGAtYAorICAgICAg
ICAgICAgICAgICAgICArK2luZGV4OyAvLyBgLWAKKyAgICAgICAgICAgICAgICAgICAgc2tpcFNp
bmdsZUxpbmVDb21tZW50KDQpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBmdW5jdGlvbiBzY2FuSGV4RXNjYXBlKHByZWZpeCkgeworICAgICAgICB2YXIgaSwg
bGVuLCBjaCwgY29kZSA9IDA7CisKKyAgICAgICAgbGVuID0gKHByZWZpeCA9PT0gJ3UnKSA/IDQg
OiAyOworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyArK2kpIHsKKyAgICAgICAgICAgIGlm
IChpbmRleCA8IGxlbmd0aCAmJiBpc0hleERpZ2l0KHNvdXJjZVtpbmRleF0pKSB7CisgICAgICAg
ICAgICAgICAgY2ggPSBzb3VyY2VbaW5kZXgrK107CisgICAgICAgICAgICAgICAgY29kZSA9IGNv
ZGUgKiAxNiArICcwMTIzNDU2Nzg5YWJjZGVmJy5pbmRleE9mKGNoLnRvTG93ZXJDYXNlKCkpOwor
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gJyc7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoY29k
ZSk7CisgICAgfQorCisgICAgZnVuY3Rpb24gZ2V0RXNjYXBlZElkZW50aWZpZXIoKSB7CisgICAg
ICAgIHZhciBjaCwgaWQ7CisKKyAgICAgICAgY2ggPSBzb3VyY2UuY2hhckNvZGVBdChpbmRleCsr
KTsKKyAgICAgICAgaWQgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNoKTsKKworICAgICAgICAvLyAn
XHUnIChVKzAwNUMsIFUrMDA3NSkgZGVub3RlcyBhbiBlc2NhcGVkIGNoYXJhY3Rlci4KKyAgICAg
ICAgaWYgKGNoID09PSAweDVDKSB7CisgICAgICAgICAgICBpZiAoc291cmNlLmNoYXJDb2RlQXQo
aW5kZXgpICE9PSAweDc1KSB7CisgICAgICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2Fn
ZXMuVW5leHBlY3RlZFRva2VuLCAnSUxMRUdBTCcpOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgKytpbmRleDsKKyAgICAgICAgICAgIGNoID0gc2NhbkhleEVzY2FwZSgndScpOworICAgICAg
ICAgICAgaWYgKCFjaCB8fCBjaCA9PT0gJ1xcJyB8fCAhaXNJZGVudGlmaWVyU3RhcnQoY2guY2hh
ckNvZGVBdCgwKSkpIHsKKyAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5V
bmV4cGVjdGVkVG9rZW4sICdJTExFR0FMJyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBp
ZCA9IGNoOworICAgICAgICB9CisKKyAgICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7Cisg
ICAgICAgICAgICBjaCA9IHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KTsKKyAgICAgICAgICAgIGlm
ICghaXNJZGVudGlmaWVyUGFydChjaCkpIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICsraW5kZXg7CisgICAgICAgICAgICBpZCArPSBTdHJpbmcu
ZnJvbUNoYXJDb2RlKGNoKTsKKworICAgICAgICAgICAgLy8gJ1x1JyAoVSswMDVDLCBVKzAwNzUp
IGRlbm90ZXMgYW4gZXNjYXBlZCBjaGFyYWN0ZXIuCisgICAgICAgICAgICBpZiAoY2ggPT09IDB4
NUMpIHsKKyAgICAgICAgICAgICAgICBpZCA9IGlkLnN1YnN0cigwLCBpZC5sZW5ndGggLSAxKTsK
KyAgICAgICAgICAgICAgICBpZiAoc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpICE9PSAweDc1KSB7
CisgICAgICAgICAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRU
b2tlbiwgJ0lMTEVHQUwnKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgKytp
bmRleDsKKyAgICAgICAgICAgICAgICBjaCA9IHNjYW5IZXhFc2NhcGUoJ3UnKTsKKyAgICAgICAg
ICAgICAgICBpZiAoIWNoIHx8IGNoID09PSAnXFwnIHx8ICFpc0lkZW50aWZpZXJQYXJ0KGNoLmNo
YXJDb2RlQXQoMCkpKSB7CisgICAgICAgICAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3Nh
Z2VzLlVuZXhwZWN0ZWRUb2tlbiwgJ0lMTEVHQUwnKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgaWQgKz0gY2g7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAg
ICByZXR1cm4gaWQ7CisgICAgfQorCisgICAgZnVuY3Rpb24gZ2V0SWRlbnRpZmllcigpIHsKKyAg
ICAgICAgdmFyIHN0YXJ0LCBjaDsKKworICAgICAgICBzdGFydCA9IGluZGV4Kys7CisgICAgICAg
IHdoaWxlIChpbmRleCA8IGxlbmd0aCkgeworICAgICAgICAgICAgY2ggPSBzb3VyY2UuY2hhckNv
ZGVBdChpbmRleCk7CisgICAgICAgICAgICBpZiAoY2ggPT09IDB4NUMpIHsKKyAgICAgICAgICAg
ICAgICAvLyBCbGFja3NsYXNoIChVKzAwNUMpIG1hcmtzIFVuaWNvZGUgZXNjYXBlIHNlcXVlbmNl
LgorICAgICAgICAgICAgICAgIGluZGV4ID0gc3RhcnQ7CisgICAgICAgICAgICAgICAgcmV0dXJu
IGdldEVzY2FwZWRJZGVudGlmaWVyKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAo
aXNJZGVudGlmaWVyUGFydChjaCkpIHsKKyAgICAgICAgICAgICAgICArK2luZGV4OworICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorCisgICAgICAgIHJldHVybiBzb3VyY2Uuc2xpY2Uoc3RhcnQsIGluZGV4KTsKKyAg
ICB9CisKKyAgICBmdW5jdGlvbiBzY2FuSWRlbnRpZmllcigpIHsKKyAgICAgICAgdmFyIHN0YXJ0
LCBpZCwgdHlwZTsKKworICAgICAgICBzdGFydCA9IGluZGV4OworCisgICAgICAgIC8vIEJhY2tz
bGFzaCAoVSswMDVDKSBzdGFydHMgYW4gZXNjYXBlZCBjaGFyYWN0ZXIuCisgICAgICAgIGlkID0g
KHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KSA9PT0gMHg1QykgPyBnZXRFc2NhcGVkSWRlbnRpZmll
cigpIDogZ2V0SWRlbnRpZmllcigpOworCisgICAgICAgIC8vIFRoZXJlIGlzIG5vIGtleXdvcmQg
b3IgbGl0ZXJhbCB3aXRoIG9ubHkgb25lIGNoYXJhY3Rlci4KKyAgICAgICAgLy8gVGh1cywgaXQg
bXVzdCBiZSBhbiBpZGVudGlmaWVyLgorICAgICAgICBpZiAoaWQubGVuZ3RoID09PSAxKSB7Cisg
ICAgICAgICAgICB0eXBlID0gVG9rZW4uSWRlbnRpZmllcjsKKyAgICAgICAgfSBlbHNlIGlmIChp
c0tleXdvcmQoaWQpKSB7CisgICAgICAgICAgICB0eXBlID0gVG9rZW4uS2V5d29yZDsKKyAgICAg
ICAgfSBlbHNlIGlmIChpZCA9PT0gJ251bGwnKSB7CisgICAgICAgICAgICB0eXBlID0gVG9rZW4u
TnVsbExpdGVyYWw7CisgICAgICAgIH0gZWxzZSBpZiAoaWQgPT09ICd0cnVlJyB8fCBpZCA9PT0g
J2ZhbHNlJykgeworICAgICAgICAgICAgdHlwZSA9IFRva2VuLkJvb2xlYW5MaXRlcmFsOworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgdHlwZSA9IFRva2VuLklkZW50aWZpZXI7CisgICAg
ICAgIH0KKworICAgICAgICByZXR1cm4geworICAgICAgICAgICAgdHlwZTogdHlwZSwKKyAgICAg
ICAgICAgIHZhbHVlOiBpZCwKKyAgICAgICAgICAgIGxpbmVOdW1iZXI6IGxpbmVOdW1iZXIsCisg
ICAgICAgICAgICBsaW5lU3RhcnQ6IGxpbmVTdGFydCwKKyAgICAgICAgICAgIHN0YXJ0OiBzdGFy
dCwKKyAgICAgICAgICAgIGVuZDogaW5kZXgKKyAgICAgICAgfTsKKyAgICB9CisKKworICAgIC8v
IDcuNyBQdW5jdHVhdG9ycworCisgICAgZnVuY3Rpb24gc2NhblB1bmN0dWF0b3IoKSB7CisgICAg
ICAgIHZhciBzdGFydCA9IGluZGV4LAorICAgICAgICAgICAgY29kZSA9IHNvdXJjZS5jaGFyQ29k
ZUF0KGluZGV4KSwKKyAgICAgICAgICAgIGNvZGUyLAorICAgICAgICAgICAgY2gxID0gc291cmNl
W2luZGV4XSwKKyAgICAgICAgICAgIGNoMiwKKyAgICAgICAgICAgIGNoMywKKyAgICAgICAgICAg
IGNoNDsKKworICAgICAgICBzd2l0Y2ggKGNvZGUpIHsKKworICAgICAgICAvLyBDaGVjayBmb3Ig
bW9zdCBjb21tb24gc2luZ2xlLWNoYXJhY3RlciBwdW5jdHVhdG9ycy4KKyAgICAgICAgY2FzZSAw
eDJFOiAgLy8gLiBkb3QKKyAgICAgICAgY2FzZSAweDI4OiAgLy8gKCBvcGVuIGJyYWNrZXQKKyAg
ICAgICAgY2FzZSAweDI5OiAgLy8gKSBjbG9zZSBicmFja2V0CisgICAgICAgIGNhc2UgMHgzQjog
IC8vIDsgc2VtaWNvbG9uCisgICAgICAgIGNhc2UgMHgyQzogIC8vICwgY29tbWEKKyAgICAgICAg
Y2FzZSAweDdCOiAgLy8geyBvcGVuIGN1cmx5IGJyYWNlCisgICAgICAgIGNhc2UgMHg3RDogIC8v
IH0gY2xvc2UgY3VybHkgYnJhY2UKKyAgICAgICAgY2FzZSAweDVCOiAgLy8gWworICAgICAgICBj
YXNlIDB4NUQ6ICAvLyBdCisgICAgICAgIGNhc2UgMHgzQTogIC8vIDoKKyAgICAgICAgY2FzZSAw
eDNGOiAgLy8gPworICAgICAgICBjYXNlIDB4N0U6ICAvLyB+CisgICAgICAgICAgICArK2luZGV4
OworICAgICAgICAgICAgaWYgKGV4dHJhLnRva2VuaXplKSB7CisgICAgICAgICAgICAgICAgaWYg
KGNvZGUgPT09IDB4MjgpIHsKKyAgICAgICAgICAgICAgICAgICAgZXh0cmEub3BlblBhcmVuVG9r
ZW4gPSBleHRyYS50b2tlbnMubGVuZ3RoOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY29k
ZSA9PT0gMHg3QikgeworICAgICAgICAgICAgICAgICAgICBleHRyYS5vcGVuQ3VybHlUb2tlbiA9
IGV4dHJhLnRva2Vucy5sZW5ndGg7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
ICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICB0eXBlOiBUb2tlbi5QdW5jdHVh
dG9yLAorICAgICAgICAgICAgICAgIHZhbHVlOiBTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGUpLAor
ICAgICAgICAgICAgICAgIGxpbmVOdW1iZXI6IGxpbmVOdW1iZXIsCisgICAgICAgICAgICAgICAg
bGluZVN0YXJ0OiBsaW5lU3RhcnQsCisgICAgICAgICAgICAgICAgc3RhcnQ6IHN0YXJ0LAorICAg
ICAgICAgICAgICAgIGVuZDogaW5kZXgKKyAgICAgICAgICAgIH07CisKKyAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgIGNvZGUyID0gc291cmNlLmNoYXJDb2RlQXQoaW5kZXggKyAxKTsKKwor
ICAgICAgICAgICAgLy8gJz0nIChVKzAwM0QpIG1hcmtzIGFuIGFzc2lnbm1lbnQgb3IgY29tcGFy
aXNvbiBvcGVyYXRvci4KKyAgICAgICAgICAgIGlmIChjb2RlMiA9PT0gMHgzRCkgeworICAgICAg
ICAgICAgICAgIHN3aXRjaCAoY29kZSkgeworICAgICAgICAgICAgICAgIGNhc2UgMHgyQjogIC8v
ICsKKyAgICAgICAgICAgICAgICBjYXNlIDB4MkQ6ICAvLyAtCisgICAgICAgICAgICAgICAgY2Fz
ZSAweDJGOiAgLy8gLworICAgICAgICAgICAgICAgIGNhc2UgMHgzQzogIC8vIDwKKyAgICAgICAg
ICAgICAgICBjYXNlIDB4M0U6ICAvLyA+CisgICAgICAgICAgICAgICAgY2FzZSAweDVFOiAgLy8g
XgorICAgICAgICAgICAgICAgIGNhc2UgMHg3QzogIC8vIHwKKyAgICAgICAgICAgICAgICBjYXNl
IDB4MjU6ICAvLyAlCisgICAgICAgICAgICAgICAgY2FzZSAweDI2OiAgLy8gJgorICAgICAgICAg
ICAgICAgIGNhc2UgMHgyQTogIC8vICoKKyAgICAgICAgICAgICAgICAgICAgaW5kZXggKz0gMjsK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHR5
cGU6IFRva2VuLlB1bmN0dWF0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogU3Ry
aW5nLmZyb21DaGFyQ29kZShjb2RlKSArIFN0cmluZy5mcm9tQ2hhckNvZGUoY29kZTIpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgbGluZU51bWJlcjogbGluZU51bWJlciwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGxpbmVTdGFydDogbGluZVN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAg
ICAgc3RhcnQ6IHN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgZW5kOiBpbmRleAorICAg
ICAgICAgICAgICAgICAgICB9OworCisgICAgICAgICAgICAgICAgY2FzZSAweDIxOiAvLyAhCisg
ICAgICAgICAgICAgICAgY2FzZSAweDNEOiAvLyA9CisgICAgICAgICAgICAgICAgICAgIGluZGV4
ICs9IDI7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gIT09IGFuZCA9PT0KKyAgICAgICAgICAg
ICAgICAgICAgaWYgKHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KSA9PT0gMHgzRCkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgKytpbmRleDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogVG9r
ZW4uUHVuY3R1YXRvciwKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBzb3VyY2Uuc2xp
Y2Uoc3RhcnQsIGluZGV4KSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVOdW1iZXI6IGxp
bmVOdW1iZXIsCisgICAgICAgICAgICAgICAgICAgICAgICBsaW5lU3RhcnQ6IGxpbmVTdGFydCwK
KyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0OiBzdGFydCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGVuZDogaW5kZXgKKyAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyA0LWNoYXJhY3RlciBw
dW5jdHVhdG9yOiA+Pj49CisKKyAgICAgICAgY2g0ID0gc291cmNlLnN1YnN0cihpbmRleCwgNCk7
CisKKyAgICAgICAgaWYgKGNoNCA9PT0gJz4+Pj0nKSB7CisgICAgICAgICAgICBpbmRleCArPSA0
OworICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICB0eXBlOiBUb2tlbi5QdW5j
dHVhdG9yLAorICAgICAgICAgICAgICAgIHZhbHVlOiBjaDQsCisgICAgICAgICAgICAgICAgbGlu
ZU51bWJlcjogbGluZU51bWJlciwKKyAgICAgICAgICAgICAgICBsaW5lU3RhcnQ6IGxpbmVTdGFy
dCwKKyAgICAgICAgICAgICAgICBzdGFydDogc3RhcnQsCisgICAgICAgICAgICAgICAgZW5kOiBp
bmRleAorICAgICAgICAgICAgfTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIDMtY2hhcmFjdGVy
IHB1bmN0dWF0b3JzOiA9PT0gIT09ID4+PiA8PD0gPj49CisKKyAgICAgICAgY2gzID0gY2g0LnN1
YnN0cigwLCAzKTsKKworICAgICAgICBpZiAoY2gzID09PSAnPj4+JyB8fCBjaDMgPT09ICc8PD0n
IHx8IGNoMyA9PT0gJz4+PScpIHsKKyAgICAgICAgICAgIGluZGV4ICs9IDM7CisgICAgICAgICAg
ICByZXR1cm4geworICAgICAgICAgICAgICAgIHR5cGU6IFRva2VuLlB1bmN0dWF0b3IsCisgICAg
ICAgICAgICAgICAgdmFsdWU6IGNoMywKKyAgICAgICAgICAgICAgICBsaW5lTnVtYmVyOiBsaW5l
TnVtYmVyLAorICAgICAgICAgICAgICAgIGxpbmVTdGFydDogbGluZVN0YXJ0LAorICAgICAgICAg
ICAgICAgIHN0YXJ0OiBzdGFydCwKKyAgICAgICAgICAgICAgICBlbmQ6IGluZGV4CisgICAgICAg
ICAgICB9OworICAgICAgICB9CisKKyAgICAgICAgLy8gT3RoZXIgMi1jaGFyYWN0ZXIgcHVuY3R1
YXRvcnM6ICsrIC0tIDw8ID4+ICYmIHx8CisgICAgICAgIGNoMiA9IGNoMy5zdWJzdHIoMCwgMik7
CisKKyAgICAgICAgaWYgKChjaDEgPT09IGNoMlsxXSAmJiAoJystPD4mfCcuaW5kZXhPZihjaDEp
ID49IDApKSB8fCBjaDIgPT09ICc9PicpIHsKKyAgICAgICAgICAgIGluZGV4ICs9IDI7CisgICAg
ICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIHR5cGU6IFRva2VuLlB1bmN0dWF0b3Is
CisgICAgICAgICAgICAgICAgdmFsdWU6IGNoMiwKKyAgICAgICAgICAgICAgICBsaW5lTnVtYmVy
OiBsaW5lTnVtYmVyLAorICAgICAgICAgICAgICAgIGxpbmVTdGFydDogbGluZVN0YXJ0LAorICAg
ICAgICAgICAgICAgIHN0YXJ0OiBzdGFydCwKKyAgICAgICAgICAgICAgICBlbmQ6IGluZGV4Cisg
ICAgICAgICAgICB9OworICAgICAgICB9CisKKyAgICAgICAgLy8gMS1jaGFyYWN0ZXIgcHVuY3R1
YXRvcnM6IDwgPiA9ICEgKyAtICogJSAmIHwgXiAvCisgICAgICAgIGlmICgnPD49ISstKiUmfF4v
Jy5pbmRleE9mKGNoMSkgPj0gMCkgeworICAgICAgICAgICAgKytpbmRleDsKKyAgICAgICAgICAg
IHJldHVybiB7CisgICAgICAgICAgICAgICAgdHlwZTogVG9rZW4uUHVuY3R1YXRvciwKKyAgICAg
ICAgICAgICAgICB2YWx1ZTogY2gxLAorICAgICAgICAgICAgICAgIGxpbmVOdW1iZXI6IGxpbmVO
dW1iZXIsCisgICAgICAgICAgICAgICAgbGluZVN0YXJ0OiBsaW5lU3RhcnQsCisgICAgICAgICAg
ICAgICAgc3RhcnQ6IHN0YXJ0LAorICAgICAgICAgICAgICAgIGVuZDogaW5kZXgKKyAgICAgICAg
ICAgIH07CisgICAgICAgIH0KKworICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5VbmV4
cGVjdGVkVG9rZW4sICdJTExFR0FMJyk7CisgICAgfQorCisgICAgLy8gNy44LjMgTnVtZXJpYyBM
aXRlcmFscworCisgICAgZnVuY3Rpb24gc2NhbkhleExpdGVyYWwoc3RhcnQpIHsKKyAgICAgICAg
dmFyIG51bWJlciA9ICcnOworCisgICAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkgeworICAg
ICAgICAgICAgaWYgKCFpc0hleERpZ2l0KHNvdXJjZVtpbmRleF0pKSB7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBudW1iZXIgKz0gc291cmNlW2lu
ZGV4KytdOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG51bWJlci5sZW5ndGggPT09IDApIHsK
KyAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgJ0lM
TEVHQUwnKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpc0lkZW50aWZpZXJTdGFydChzb3Vy
Y2UuY2hhckNvZGVBdChpbmRleCkpKSB7CisgICAgICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNz
YWdlcy5VbmV4cGVjdGVkVG9rZW4sICdJTExFR0FMJyk7CisgICAgICAgIH0KKworICAgICAgICBy
ZXR1cm4geworICAgICAgICAgICAgdHlwZTogVG9rZW4uTnVtZXJpY0xpdGVyYWwsCisgICAgICAg
ICAgICB2YWx1ZTogcGFyc2VJbnQoJzB4JyArIG51bWJlciwgMTYpLAorICAgICAgICAgICAgbGlu
ZU51bWJlcjogbGluZU51bWJlciwKKyAgICAgICAgICAgIGxpbmVTdGFydDogbGluZVN0YXJ0LAor
ICAgICAgICAgICAgc3RhcnQ6IHN0YXJ0LAorICAgICAgICAgICAgZW5kOiBpbmRleAorICAgICAg
ICB9OworICAgIH0KKworICAgIGZ1bmN0aW9uIHNjYW5PY3RhbExpdGVyYWwoc3RhcnQpIHsKKyAg
ICAgICAgdmFyIG51bWJlciA9ICcwJyArIHNvdXJjZVtpbmRleCsrXTsKKyAgICAgICAgd2hpbGUg
KGluZGV4IDwgbGVuZ3RoKSB7CisgICAgICAgICAgICBpZiAoIWlzT2N0YWxEaWdpdChzb3VyY2Vb
aW5kZXhdKSkgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgbnVtYmVyICs9IHNvdXJjZVtpbmRleCsrXTsKKyAgICAgICAgfQorCisgICAgICAgIGlm
IChpc0lkZW50aWZpZXJTdGFydChzb3VyY2UuY2hhckNvZGVBdChpbmRleCkpIHx8IGlzRGVjaW1h
bERpZ2l0KHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KSkpIHsKKyAgICAgICAgICAgIHRocm93RXJy
b3Ioe30sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgJ0lMTEVHQUwnKTsKKyAgICAgICAgfQor
CisgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICB0eXBlOiBUb2tlbi5OdW1lcmljTGl0ZXJh
bCwKKyAgICAgICAgICAgIHZhbHVlOiBwYXJzZUludChudW1iZXIsIDgpLAorICAgICAgICAgICAg
b2N0YWw6IHRydWUsCisgICAgICAgICAgICBsaW5lTnVtYmVyOiBsaW5lTnVtYmVyLAorICAgICAg
ICAgICAgbGluZVN0YXJ0OiBsaW5lU3RhcnQsCisgICAgICAgICAgICBzdGFydDogc3RhcnQsCisg
ICAgICAgICAgICBlbmQ6IGluZGV4CisgICAgICAgIH07CisgICAgfQorCisgICAgZnVuY3Rpb24g
c2Nhbk51bWVyaWNMaXRlcmFsKCkgeworICAgICAgICB2YXIgbnVtYmVyLCBzdGFydCwgY2g7CisK
KyAgICAgICAgY2ggPSBzb3VyY2VbaW5kZXhdOworICAgICAgICBhc3NlcnQoaXNEZWNpbWFsRGln
aXQoY2guY2hhckNvZGVBdCgwKSkgfHwgKGNoID09PSAnLicpLAorICAgICAgICAgICAgJ051bWVy
aWMgbGl0ZXJhbCBtdXN0IHN0YXJ0IHdpdGggYSBkZWNpbWFsIGRpZ2l0IG9yIGEgZGVjaW1hbCBw
b2ludCcpOworCisgICAgICAgIHN0YXJ0ID0gaW5kZXg7CisgICAgICAgIG51bWJlciA9ICcnOwor
ICAgICAgICBpZiAoY2ggIT09ICcuJykgeworICAgICAgICAgICAgbnVtYmVyID0gc291cmNlW2lu
ZGV4KytdOworICAgICAgICAgICAgY2ggPSBzb3VyY2VbaW5kZXhdOworCisgICAgICAgICAgICAv
LyBIZXggbnVtYmVyIHN0YXJ0cyB3aXRoICcweCcuCisgICAgICAgICAgICAvLyBPY3RhbCBudW1i
ZXIgc3RhcnRzIHdpdGggJzAnLgorICAgICAgICAgICAgaWYgKG51bWJlciA9PT0gJzAnKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKGNoID09PSAneCcgfHwgY2ggPT09ICdYJykgeworICAgICAgICAg
ICAgICAgICAgICArK2luZGV4OworICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2NhbkhleExp
dGVyYWwoc3RhcnQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoaXNP
Y3RhbERpZ2l0KGNoKSkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2Nhbk9jdGFsTGl0
ZXJhbChzdGFydCk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gZGVj
aW1hbCBudW1iZXIgc3RhcnRzIHdpdGggJzAnIHN1Y2ggYXMgJzA5JyBpcyBpbGxlZ2FsLgorICAg
ICAgICAgICAgICAgIGlmIChjaCAmJiBpc0RlY2ltYWxEaWdpdChjaC5jaGFyQ29kZUF0KDApKSkg
eworICAgICAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5VbmV4cGVjdGVk
VG9rZW4sICdJTExFR0FMJyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICB3aGlsZSAoaXNEZWNpbWFsRGlnaXQoc291cmNlLmNoYXJDb2RlQXQoaW5kZXgp
KSkgeworICAgICAgICAgICAgICAgIG51bWJlciArPSBzb3VyY2VbaW5kZXgrK107CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBjaCA9IHNvdXJjZVtpbmRleF07CisgICAgICAgIH0KKworICAg
ICAgICBpZiAoY2ggPT09ICcuJykgeworICAgICAgICAgICAgbnVtYmVyICs9IHNvdXJjZVtpbmRl
eCsrXTsKKyAgICAgICAgICAgIHdoaWxlIChpc0RlY2ltYWxEaWdpdChzb3VyY2UuY2hhckNvZGVB
dChpbmRleCkpKSB7CisgICAgICAgICAgICAgICAgbnVtYmVyICs9IHNvdXJjZVtpbmRleCsrXTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNoID0gc291cmNlW2luZGV4XTsKKyAgICAgICAg
fQorCisgICAgICAgIGlmIChjaCA9PT0gJ2UnIHx8IGNoID09PSAnRScpIHsKKyAgICAgICAgICAg
IG51bWJlciArPSBzb3VyY2VbaW5kZXgrK107CisKKyAgICAgICAgICAgIGNoID0gc291cmNlW2lu
ZGV4XTsKKyAgICAgICAgICAgIGlmIChjaCA9PT0gJysnIHx8IGNoID09PSAnLScpIHsKKyAgICAg
ICAgICAgICAgICBudW1iZXIgKz0gc291cmNlW2luZGV4KytdOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgaWYgKGlzRGVjaW1hbERpZ2l0KHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KSkpIHsK
KyAgICAgICAgICAgICAgICB3aGlsZSAoaXNEZWNpbWFsRGlnaXQoc291cmNlLmNoYXJDb2RlQXQo
aW5kZXgpKSkgeworICAgICAgICAgICAgICAgICAgICBudW1iZXIgKz0gc291cmNlW2luZGV4Kytd
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuLCAnSUxMRUdBTCcpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKGlzSWRlbnRpZmllclN0YXJ0
KHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KSkpIHsKKyAgICAgICAgICAgIHRocm93RXJyb3Ioe30s
IE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgJ0lMTEVHQUwnKTsKKyAgICAgICAgfQorCisgICAg
ICAgIHJldHVybiB7CisgICAgICAgICAgICB0eXBlOiBUb2tlbi5OdW1lcmljTGl0ZXJhbCwKKyAg
ICAgICAgICAgIHZhbHVlOiBwYXJzZUZsb2F0KG51bWJlciksCisgICAgICAgICAgICBsaW5lTnVt
YmVyOiBsaW5lTnVtYmVyLAorICAgICAgICAgICAgbGluZVN0YXJ0OiBsaW5lU3RhcnQsCisgICAg
ICAgICAgICBzdGFydDogc3RhcnQsCisgICAgICAgICAgICBlbmQ6IGluZGV4CisgICAgICAgIH07
CisgICAgfQorCisgICAgLy8gNy44LjQgU3RyaW5nIExpdGVyYWxzCisKKyAgICBmdW5jdGlvbiBz
Y2FuU3RyaW5nTGl0ZXJhbCgpIHsKKyAgICAgICAgdmFyIHN0ciA9ICcnLCBxdW90ZSwgc3RhcnQs
IGNoLCBjb2RlLCB1bmVzY2FwZWQsIHJlc3RvcmUsIG9jdGFsID0gZmFsc2UsIHN0YXJ0TGluZU51
bWJlciwgc3RhcnRMaW5lU3RhcnQ7CisgICAgICAgIHN0YXJ0TGluZU51bWJlciA9IGxpbmVOdW1i
ZXI7CisgICAgICAgIHN0YXJ0TGluZVN0YXJ0ID0gbGluZVN0YXJ0OworCisgICAgICAgIHF1b3Rl
ID0gc291cmNlW2luZGV4XTsKKyAgICAgICAgYXNzZXJ0KChxdW90ZSA9PT0gJ1wnJyB8fCBxdW90
ZSA9PT0gJyInKSwKKyAgICAgICAgICAgICdTdHJpbmcgbGl0ZXJhbCBtdXN0IHN0YXJ0cyB3aXRo
IGEgcXVvdGUnKTsKKworICAgICAgICBzdGFydCA9IGluZGV4OworICAgICAgICArK2luZGV4Owor
CisgICAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkgeworICAgICAgICAgICAgY2ggPSBzb3Vy
Y2VbaW5kZXgrK107CisKKyAgICAgICAgICAgIGlmIChjaCA9PT0gcXVvdGUpIHsKKyAgICAgICAg
ICAgICAgICBxdW90ZSA9ICcnOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
fSBlbHNlIGlmIChjaCA9PT0gJ1xcJykgeworICAgICAgICAgICAgICAgIGNoID0gc291cmNlW2lu
ZGV4KytdOworICAgICAgICAgICAgICAgIGlmICghY2ggfHwgIWlzTGluZVRlcm1pbmF0b3IoY2gu
Y2hhckNvZGVBdCgwKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChjaCkgeworICAg
ICAgICAgICAgICAgICAgICBjYXNlICd1JzoKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAneCc6
CisgICAgICAgICAgICAgICAgICAgICAgICByZXN0b3JlID0gaW5kZXg7CisgICAgICAgICAgICAg
ICAgICAgICAgICB1bmVzY2FwZWQgPSBzY2FuSGV4RXNjYXBlKGNoKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICh1bmVzY2FwZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
dHIgKz0gdW5lc2NhcGVkOworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbmRleCA9IHJlc3RvcmU7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc3RyICs9IGNoOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgJ24nOgor
ICAgICAgICAgICAgICAgICAgICAgICAgc3RyICs9ICdcbic7CisgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAncic6CisgICAgICAgICAgICAg
ICAgICAgICAgICBzdHIgKz0gJ1xyJzsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgICAgICBjYXNlICd0JzoKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0
ciArPSAnXHQnOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgICAgIGNhc2UgJ2InOgorICAgICAgICAgICAgICAgICAgICAgICAgc3RyICs9ICdcYic7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAn
Zic6CisgICAgICAgICAgICAgICAgICAgICAgICBzdHIgKz0gJ1xmJzsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlICd2JzoKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHN0ciArPSAnXHgwQic7CisgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKworICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKGlzT2N0YWxEaWdpdChjaCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb2RlID0gJzAxMjM0NTY3Jy5pbmRleE9mKGNoKTsKKworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIFwwIGlzIG5vdCBvY3RhbCBlc2NhcGUgc2VxdWVuY2UKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoY29kZSAhPT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBvY3RhbCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4IDwgbGVuZ3RoICYmIGlzT2N0YWxE
aWdpdChzb3VyY2VbaW5kZXhdKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBv
Y3RhbCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGUgPSBjb2Rl
ICogOCArICcwMTIzNDU2NycuaW5kZXhPZihzb3VyY2VbaW5kZXgrK10pOworCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIDMgZGlnaXRzIGFyZSBvbmx5IGFsbG93ZWQgd2hlbiBz
dHJpbmcgc3RhcnRzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdpdGggMCwg
MSwgMiwgMworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJzAxMjMnLmluZGV4
T2YoY2gpID49IDAgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bmRleCA8IGxlbmd0aCAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlzT2N0YWxEaWdpdChzb3VyY2VbaW5kZXhdKSkgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29kZSA9IGNvZGUgKiA4ICsgJzAxMjM0NTY3Jy5pbmRleE9mKHNvdXJjZVtp
bmRleCsrXSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyICs9IFN0
cmluZy5mcm9tQ2hhckNvZGUoY29kZSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciArPSBjaDsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAg
KytsaW5lTnVtYmVyOworICAgICAgICAgICAgICAgICAgICBpZiAoY2ggPT09ICAnXHInICYmIHNv
dXJjZVtpbmRleF0gPT09ICdcbicpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICsraW5kZXg7
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgbGluZVN0YXJ0ID0g
aW5kZXg7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIGlmIChpc0xpbmVU
ZXJtaW5hdG9yKGNoLmNoYXJDb2RlQXQoMCkpKSB7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHN0ciArPSBjaDsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChxdW90ZSAhPT0gJycpIHsKKyAgICAgICAg
ICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgJ0lMTEVHQUwnKTsK
KyAgICAgICAgfQorCisgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICB0eXBlOiBUb2tlbi5T
dHJpbmdMaXRlcmFsLAorICAgICAgICAgICAgdmFsdWU6IHN0ciwKKyAgICAgICAgICAgIG9jdGFs
OiBvY3RhbCwKKyAgICAgICAgICAgIHN0YXJ0TGluZU51bWJlcjogc3RhcnRMaW5lTnVtYmVyLAor
ICAgICAgICAgICAgc3RhcnRMaW5lU3RhcnQ6IHN0YXJ0TGluZVN0YXJ0LAorICAgICAgICAgICAg
bGluZU51bWJlcjogbGluZU51bWJlciwKKyAgICAgICAgICAgIGxpbmVTdGFydDogbGluZVN0YXJ0
LAorICAgICAgICAgICAgc3RhcnQ6IHN0YXJ0LAorICAgICAgICAgICAgZW5kOiBpbmRleAorICAg
ICAgICB9OworICAgIH0KKworICAgIGZ1bmN0aW9uIHRlc3RSZWdFeHAocGF0dGVybiwgZmxhZ3Mp
IHsKKyAgICAgICAgdmFyIHZhbHVlOworICAgICAgICB0cnkgeworICAgICAgICAgICAgdmFsdWUg
PSBuZXcgUmVnRXhwKHBhdHRlcm4sIGZsYWdzKTsKKyAgICAgICAgfSBjYXRjaCAoZSkgeworICAg
ICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuSW52YWxpZFJlZ0V4cCk7CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuIHZhbHVlOworICAgIH0KKworICAgIGZ1bmN0aW9uIHNjYW5SZWdF
eHBCb2R5KCkgeworICAgICAgICB2YXIgY2gsIHN0ciwgY2xhc3NNYXJrZXIsIHRlcm1pbmF0ZWQs
IGJvZHk7CisKKyAgICAgICAgY2ggPSBzb3VyY2VbaW5kZXhdOworICAgICAgICBhc3NlcnQoY2gg
PT09ICcvJywgJ1JlZ3VsYXIgZXhwcmVzc2lvbiBsaXRlcmFsIG11c3Qgc3RhcnQgd2l0aCBhIHNs
YXNoJyk7CisgICAgICAgIHN0ciA9IHNvdXJjZVtpbmRleCsrXTsKKworICAgICAgICBjbGFzc01h
cmtlciA9IGZhbHNlOworICAgICAgICB0ZXJtaW5hdGVkID0gZmFsc2U7CisgICAgICAgIHdoaWxl
IChpbmRleCA8IGxlbmd0aCkgeworICAgICAgICAgICAgY2ggPSBzb3VyY2VbaW5kZXgrK107Cisg
ICAgICAgICAgICBzdHIgKz0gY2g7CisgICAgICAgICAgICBpZiAoY2ggPT09ICdcXCcpIHsKKyAg
ICAgICAgICAgICAgICBjaCA9IHNvdXJjZVtpbmRleCsrXTsKKyAgICAgICAgICAgICAgICAvLyBF
Q01BLTI2MiA3LjguNQorICAgICAgICAgICAgICAgIGlmIChpc0xpbmVUZXJtaW5hdG9yKGNoLmNo
YXJDb2RlQXQoMCkpKSB7CisgICAgICAgICAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3Nh
Z2VzLlVudGVybWluYXRlZFJlZ0V4cCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIHN0ciArPSBjaDsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNMaW5lVGVybWluYXRvcihj
aC5jaGFyQ29kZUF0KDApKSkgeworICAgICAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3Nh
Z2VzLlVudGVybWluYXRlZFJlZ0V4cCk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGNsYXNzTWFy
a2VyKSB7CisgICAgICAgICAgICAgICAgaWYgKGNoID09PSAnXScpIHsKKyAgICAgICAgICAgICAg
ICAgICAgY2xhc3NNYXJrZXIgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlmIChjaCA9PT0gJy8nKSB7CisgICAgICAgICAg
ICAgICAgICAgIHRlcm1pbmF0ZWQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNoID09PSAnWycpIHsKKyAgICAgICAgICAgICAg
ICAgICAgY2xhc3NNYXJrZXIgPSB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorCisgICAgICAgIGlmICghdGVybWluYXRlZCkgeworICAgICAgICAgICAg
dGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuVW50ZXJtaW5hdGVkUmVnRXhwKTsKKyAgICAgICAgfQor
CisgICAgICAgIC8vIEV4Y2x1ZGUgbGVhZGluZyBhbmQgdHJhaWxpbmcgc2xhc2guCisgICAgICAg
IGJvZHkgPSBzdHIuc3Vic3RyKDEsIHN0ci5sZW5ndGggLSAyKTsKKyAgICAgICAgcmV0dXJuIHsK
KyAgICAgICAgICAgIHZhbHVlOiBib2R5LAorICAgICAgICAgICAgbGl0ZXJhbDogc3RyCisgICAg
ICAgIH07CisgICAgfQorCisgICAgZnVuY3Rpb24gc2NhblJlZ0V4cEZsYWdzKCkgeworICAgICAg
ICB2YXIgY2gsIHN0ciwgZmxhZ3MsIHJlc3RvcmU7CisKKyAgICAgICAgc3RyID0gJyc7CisgICAg
ICAgIGZsYWdzID0gJyc7CisgICAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkgeworICAgICAg
ICAgICAgY2ggPSBzb3VyY2VbaW5kZXhdOworICAgICAgICAgICAgaWYgKCFpc0lkZW50aWZpZXJQ
YXJ0KGNoLmNoYXJDb2RlQXQoMCkpKSB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgICsraW5kZXg7CisgICAgICAgICAgICBpZiAoY2ggPT09ICdc
XCcgJiYgaW5kZXggPCBsZW5ndGgpIHsKKyAgICAgICAgICAgICAgICBjaCA9IHNvdXJjZVtpbmRl
eF07CisgICAgICAgICAgICAgICAgaWYgKGNoID09PSAndScpIHsKKyAgICAgICAgICAgICAgICAg
ICAgKytpbmRleDsKKyAgICAgICAgICAgICAgICAgICAgcmVzdG9yZSA9IGluZGV4OworICAgICAg
ICAgICAgICAgICAgICBjaCA9IHNjYW5IZXhFc2NhcGUoJ3UnKTsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKGNoKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBmbGFncyArPSBjaDsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGZvciAoc3RyICs9ICdcXHUnOyByZXN0b3JlIDwgaW5kZXg7ICsr
cmVzdG9yZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciArPSBzb3VyY2VbcmVz
dG9yZV07CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpbmRleCA9IHJlc3RvcmU7CisgICAgICAg
ICAgICAgICAgICAgICAgICBmbGFncyArPSAndSc7CisgICAgICAgICAgICAgICAgICAgICAgICBz
dHIgKz0gJ1xcdSc7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
dGhyb3dFcnJvclRvbGVyYW50KHt9LCBNZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW4sICdJTExFR0FM
Jyk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgc3RyICs9
ICdcXCc7CisgICAgICAgICAgICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudCh7fSwgTWVzc2Fn
ZXMuVW5leHBlY3RlZFRva2VuLCAnSUxMRUdBTCcpOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZmxhZ3MgKz0gY2g7CisgICAgICAgICAg
ICAgICAgc3RyICs9IGNoOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmV0
dXJuIHsKKyAgICAgICAgICAgIHZhbHVlOiBmbGFncywKKyAgICAgICAgICAgIGxpdGVyYWw6IHN0
cgorICAgICAgICB9OworICAgIH0KKworICAgIGZ1bmN0aW9uIHNjYW5SZWdFeHAoKSB7CisgICAg
ICAgIHZhciBzdGFydCwgYm9keSwgZmxhZ3MsIHBhdHRlcm4sIHZhbHVlOworCisgICAgICAgIGxv
b2thaGVhZCA9IG51bGw7CisgICAgICAgIHNraXBDb21tZW50KCk7CisgICAgICAgIHN0YXJ0ID0g
aW5kZXg7CisKKyAgICAgICAgYm9keSA9IHNjYW5SZWdFeHBCb2R5KCk7CisgICAgICAgIGZsYWdz
ID0gc2NhblJlZ0V4cEZsYWdzKCk7CisgICAgICAgIHZhbHVlID0gdGVzdFJlZ0V4cChib2R5LnZh
bHVlLCBmbGFncy52YWx1ZSk7CisKKyAgICAgICAgaWYgKGV4dHJhLnRva2VuaXplKSB7CisgICAg
ICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIHR5cGU6IFRva2VuLlJlZ3VsYXJFeHBy
ZXNzaW9uLAorICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSwKKyAgICAgICAgICAgICAgICBs
aW5lTnVtYmVyOiBsaW5lTnVtYmVyLAorICAgICAgICAgICAgICAgIGxpbmVTdGFydDogbGluZVN0
YXJ0LAorICAgICAgICAgICAgICAgIHN0YXJ0OiBzdGFydCwKKyAgICAgICAgICAgICAgICBlbmQ6
IGluZGV4CisgICAgICAgICAgICB9OworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHsKKyAg
ICAgICAgICAgIGxpdGVyYWw6IGJvZHkubGl0ZXJhbCArIGZsYWdzLmxpdGVyYWwsCisgICAgICAg
ICAgICB2YWx1ZTogdmFsdWUsCisgICAgICAgICAgICBzdGFydDogc3RhcnQsCisgICAgICAgICAg
ICBlbmQ6IGluZGV4CisgICAgICAgIH07CisgICAgfQorCisgICAgZnVuY3Rpb24gY29sbGVjdFJl
Z2V4KCkgeworICAgICAgICB2YXIgcG9zLCBsb2MsIHJlZ2V4LCB0b2tlbjsKKworICAgICAgICBz
a2lwQ29tbWVudCgpOworCisgICAgICAgIHBvcyA9IGluZGV4OworICAgICAgICBsb2MgPSB7Cisg
ICAgICAgICAgICBzdGFydDogeworICAgICAgICAgICAgICAgIGxpbmU6IGxpbmVOdW1iZXIsCisg
ICAgICAgICAgICAgICAgY29sdW1uOiBpbmRleCAtIGxpbmVTdGFydAorICAgICAgICAgICAgfQor
ICAgICAgICB9OworCisgICAgICAgIHJlZ2V4ID0gc2NhblJlZ0V4cCgpOworICAgICAgICBsb2Mu
ZW5kID0geworICAgICAgICAgICAgbGluZTogbGluZU51bWJlciwKKyAgICAgICAgICAgIGNvbHVt
bjogaW5kZXggLSBsaW5lU3RhcnQKKyAgICAgICAgfTsKKworICAgICAgICAvKiBpc3RhbmJ1bCBp
Z25vcmUgbmV4dCAqLworICAgICAgICBpZiAoIWV4dHJhLnRva2VuaXplKSB7CisgICAgICAgICAg
ICAvLyBQb3AgdGhlIHByZXZpb3VzIHRva2VuLCB3aGljaCBpcyBsaWtlbHkgJy8nIG9yICcvPScK
KyAgICAgICAgICAgIGlmIChleHRyYS50b2tlbnMubGVuZ3RoID4gMCkgeworICAgICAgICAgICAg
ICAgIHRva2VuID0gZXh0cmEudG9rZW5zW2V4dHJhLnRva2Vucy5sZW5ndGggLSAxXTsKKyAgICAg
ICAgICAgICAgICBpZiAodG9rZW4ucmFuZ2VbMF0gPT09IHBvcyAmJiB0b2tlbi50eXBlID09PSAn
UHVuY3R1YXRvcicpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRva2VuLnZhbHVlID09PSAn
LycgfHwgdG9rZW4udmFsdWUgPT09ICcvPScpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4
dHJhLnRva2Vucy5wb3AoKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZXh0cmEudG9rZW5zLnB1c2goeworICAg
ICAgICAgICAgICAgIHR5cGU6ICdSZWd1bGFyRXhwcmVzc2lvbicsCisgICAgICAgICAgICAgICAg
dmFsdWU6IHJlZ2V4LmxpdGVyYWwsCisgICAgICAgICAgICAgICAgcmFuZ2U6IFtwb3MsIGluZGV4
XSwKKyAgICAgICAgICAgICAgICBsb2M6IGxvYworICAgICAgICAgICAgfSk7CisgICAgICAgIH0K
KworICAgICAgICByZXR1cm4gcmVnZXg7CisgICAgfQorCisgICAgZnVuY3Rpb24gaXNJZGVudGlm
aWVyTmFtZSh0b2tlbikgeworICAgICAgICByZXR1cm4gdG9rZW4udHlwZSA9PT0gVG9rZW4uSWRl
bnRpZmllciB8fAorICAgICAgICAgICAgdG9rZW4udHlwZSA9PT0gVG9rZW4uS2V5d29yZCB8fAor
ICAgICAgICAgICAgdG9rZW4udHlwZSA9PT0gVG9rZW4uQm9vbGVhbkxpdGVyYWwgfHwKKyAgICAg
ICAgICAgIHRva2VuLnR5cGUgPT09IFRva2VuLk51bGxMaXRlcmFsOworICAgIH0KKworICAgIGZ1
bmN0aW9uIGFkdmFuY2VTbGFzaCgpIHsKKyAgICAgICAgdmFyIHByZXZUb2tlbiwKKyAgICAgICAg
ICAgIGNoZWNrVG9rZW47CisgICAgICAgIC8vIFVzaW5nIHRoZSBmb2xsb3dpbmcgYWxnb3JpdGht
OgorICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vbW96aWxsYS9zd2VldC5qcy93aWtpL2Rl
c2lnbgorICAgICAgICBwcmV2VG9rZW4gPSBleHRyYS50b2tlbnNbZXh0cmEudG9rZW5zLmxlbmd0
aCAtIDFdOworICAgICAgICBpZiAoIXByZXZUb2tlbikgeworICAgICAgICAgICAgLy8gTm90aGlu
ZyBiZWZvcmUgdGhhdDogaXQgY2Fubm90IGJlIGEgZGl2aXNpb24uCisgICAgICAgICAgICByZXR1
cm4gY29sbGVjdFJlZ2V4KCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHByZXZUb2tlbi50eXBl
ID09PSAnUHVuY3R1YXRvcicpIHsKKyAgICAgICAgICAgIGlmIChwcmV2VG9rZW4udmFsdWUgPT09
ICddJykgeworICAgICAgICAgICAgICAgIHJldHVybiBzY2FuUHVuY3R1YXRvcigpOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgaWYgKHByZXZUb2tlbi52YWx1ZSA9PT0gJyknKSB7CisgICAg
ICAgICAgICAgICAgY2hlY2tUb2tlbiA9IGV4dHJhLnRva2Vuc1tleHRyYS5vcGVuUGFyZW5Ub2tl
biAtIDFdOworICAgICAgICAgICAgICAgIGlmIChjaGVja1Rva2VuICYmCisgICAgICAgICAgICAg
ICAgICAgICAgICBjaGVja1Rva2VuLnR5cGUgPT09ICdLZXl3b3JkJyAmJgorICAgICAgICAgICAg
ICAgICAgICAgICAgKGNoZWNrVG9rZW4udmFsdWUgPT09ICdpZicgfHwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICBjaGVja1Rva2VuLnZhbHVlID09PSAnd2hpbGUnIHx8CisgICAgICAgICAgICAg
ICAgICAgICAgICAgY2hlY2tUb2tlbi52YWx1ZSA9PT0gJ2ZvcicgfHwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICBjaGVja1Rva2VuLnZhbHVlID09PSAnd2l0aCcpKSB7CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBjb2xsZWN0UmVnZXgoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgcmV0dXJuIHNjYW5QdW5jdHVhdG9yKCk7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBpZiAocHJldlRva2VuLnZhbHVlID09PSAnfScpIHsKKyAgICAgICAgICAgICAgICAvLyBE
aXZpZGluZyBhIGZ1bmN0aW9uIGJ5IGFueXRoaW5nIG1ha2VzIGxpdHRsZSBzZW5zZSwKKyAgICAg
ICAgICAgICAgICAvLyBidXQgd2UgaGF2ZSB0byBjaGVjayBmb3IgdGhhdC4KKyAgICAgICAgICAg
ICAgICBpZiAoZXh0cmEudG9rZW5zW2V4dHJhLm9wZW5DdXJseVRva2VuIC0gM10gJiYKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGV4dHJhLnRva2Vuc1tleHRyYS5vcGVuQ3VybHlUb2tlbiAtIDNd
LnR5cGUgPT09ICdLZXl3b3JkJykgeworICAgICAgICAgICAgICAgICAgICAvLyBBbm9ueW1vdXMg
ZnVuY3Rpb24uCisgICAgICAgICAgICAgICAgICAgIGNoZWNrVG9rZW4gPSBleHRyYS50b2tlbnNb
ZXh0cmEub3BlbkN1cmx5VG9rZW4gLSA0XTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFjaGVj
a1Rva2VuKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2NhblB1bmN0dWF0b3Io
KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZXh0
cmEudG9rZW5zW2V4dHJhLm9wZW5DdXJseVRva2VuIC0gNF0gJiYKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGV4dHJhLnRva2Vuc1tleHRyYS5vcGVuQ3VybHlUb2tlbiAtIDRdLnR5cGUgPT09ICdL
ZXl3b3JkJykgeworICAgICAgICAgICAgICAgICAgICAvLyBOYW1lZCBmdW5jdGlvbi4KKyAgICAg
ICAgICAgICAgICAgICAgY2hlY2tUb2tlbiA9IGV4dHJhLnRva2Vuc1tleHRyYS5vcGVuQ3VybHlU
b2tlbiAtIDVdOworICAgICAgICAgICAgICAgICAgICBpZiAoIWNoZWNrVG9rZW4pIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBjb2xsZWN0UmVnZXgoKTsKKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBzY2FuUHVuY3R1YXRvcigpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAvLyBjaGVja1Rva2VuIGRldGVybWluZXMgd2hldGhlciB0aGUgZnVuY3Rpb24gaXMKKyAgICAg
ICAgICAgICAgICAvLyBhIGRlY2xhcmF0aW9uIG9yIGFuIGV4cHJlc3Npb24uCisgICAgICAgICAg
ICAgICAgaWYgKEZuRXhwclRva2Vucy5pbmRleE9mKGNoZWNrVG9rZW4udmFsdWUpID49IDApIHsK
KyAgICAgICAgICAgICAgICAgICAgLy8gSXQgaXMgYW4gZXhwcmVzc2lvbi4KKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHNjYW5QdW5jdHVhdG9yKCk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIC8vIEl0IGlzIGEgZGVjbGFyYXRpb24uCisgICAgICAgICAgICAgICAgcmV0
dXJuIGNvbGxlY3RSZWdleCgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGNv
bGxlY3RSZWdleCgpOworICAgICAgICB9CisgICAgICAgIGlmIChwcmV2VG9rZW4udHlwZSA9PT0g
J0tleXdvcmQnKSB7CisgICAgICAgICAgICByZXR1cm4gY29sbGVjdFJlZ2V4KCk7CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuIHNjYW5QdW5jdHVhdG9yKCk7CisgICAgfQorCisgICAgZnVuY3Rp
b24gYWR2YW5jZSgpIHsKKyAgICAgICAgdmFyIGNoOworCisgICAgICAgIHNraXBDb21tZW50KCk7
CisKKyAgICAgICAgaWYgKGluZGV4ID49IGxlbmd0aCkgeworICAgICAgICAgICAgcmV0dXJuIHsK
KyAgICAgICAgICAgICAgICB0eXBlOiBUb2tlbi5FT0YsCisgICAgICAgICAgICAgICAgbGluZU51
bWJlcjogbGluZU51bWJlciwKKyAgICAgICAgICAgICAgICBsaW5lU3RhcnQ6IGxpbmVTdGFydCwK
KyAgICAgICAgICAgICAgICBzdGFydDogaW5kZXgsCisgICAgICAgICAgICAgICAgZW5kOiBpbmRl
eAorICAgICAgICAgICAgfTsKKyAgICAgICAgfQorCisgICAgICAgIGNoID0gc291cmNlLmNoYXJD
b2RlQXQoaW5kZXgpOworCisgICAgICAgIGlmIChpc0lkZW50aWZpZXJTdGFydChjaCkpIHsKKyAg
ICAgICAgICAgIHJldHVybiBzY2FuSWRlbnRpZmllcigpOworICAgICAgICB9CisKKyAgICAgICAg
Ly8gVmVyeSBjb21tb246ICggYW5kICkgYW5kIDsKKyAgICAgICAgaWYgKGNoID09PSAweDI4IHx8
IGNoID09PSAweDI5IHx8IGNoID09PSAweDNCKSB7CisgICAgICAgICAgICByZXR1cm4gc2NhblB1
bmN0dWF0b3IoKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFN0cmluZyBsaXRlcmFsIHN0YXJ0
cyB3aXRoIHNpbmdsZSBxdW90ZSAoVSswMDI3KSBvciBkb3VibGUgcXVvdGUgKFUrMDAyMikuCisg
ICAgICAgIGlmIChjaCA9PT0gMHgyNyB8fCBjaCA9PT0gMHgyMikgeworICAgICAgICAgICAgcmV0
dXJuIHNjYW5TdHJpbmdMaXRlcmFsKCk7CisgICAgICAgIH0KKworCisgICAgICAgIC8vIERvdCAo
LikgVSswMDJFIGNhbiBhbHNvIHN0YXJ0IGEgZmxvYXRpbmctcG9pbnQgbnVtYmVyLCBoZW5jZSB0
aGUgbmVlZAorICAgICAgICAvLyB0byBjaGVjayB0aGUgbmV4dCBjaGFyYWN0ZXIuCisgICAgICAg
IGlmIChjaCA9PT0gMHgyRSkgeworICAgICAgICAgICAgaWYgKGlzRGVjaW1hbERpZ2l0KHNvdXJj
ZS5jaGFyQ29kZUF0KGluZGV4ICsgMSkpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHNjYW5O
dW1lcmljTGl0ZXJhbCgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHNjYW5Q
dW5jdHVhdG9yKCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNEZWNpbWFsRGlnaXQoY2gp
KSB7CisgICAgICAgICAgICByZXR1cm4gc2Nhbk51bWVyaWNMaXRlcmFsKCk7CisgICAgICAgIH0K
KworICAgICAgICAvLyBTbGFzaCAoLykgVSswMDJGIGNhbiBhbHNvIHN0YXJ0IGEgcmVnZXguCisg
ICAgICAgIGlmIChleHRyYS50b2tlbml6ZSAmJiBjaCA9PT0gMHgyRikgeworICAgICAgICAgICAg
cmV0dXJuIGFkdmFuY2VTbGFzaCgpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHNjYW5Q
dW5jdHVhdG9yKCk7CisgICAgfQorCisgICAgZnVuY3Rpb24gY29sbGVjdFRva2VuKCkgeworICAg
ICAgICB2YXIgbG9jLCB0b2tlbiwgcmFuZ2UsIHZhbHVlOworCisgICAgICAgIHNraXBDb21tZW50
KCk7CisgICAgICAgIGxvYyA9IHsKKyAgICAgICAgICAgIHN0YXJ0OiB7CisgICAgICAgICAgICAg
ICAgbGluZTogbGluZU51bWJlciwKKyAgICAgICAgICAgICAgICBjb2x1bW46IGluZGV4IC0gbGlu
ZVN0YXJ0CisgICAgICAgICAgICB9CisgICAgICAgIH07CisKKyAgICAgICAgdG9rZW4gPSBhZHZh
bmNlKCk7CisgICAgICAgIGxvYy5lbmQgPSB7CisgICAgICAgICAgICBsaW5lOiBsaW5lTnVtYmVy
LAorICAgICAgICAgICAgY29sdW1uOiBpbmRleCAtIGxpbmVTdGFydAorICAgICAgICB9OworCisg
ICAgICAgIGlmICh0b2tlbi50eXBlICE9PSBUb2tlbi5FT0YpIHsKKyAgICAgICAgICAgIHZhbHVl
ID0gc291cmNlLnNsaWNlKHRva2VuLnN0YXJ0LCB0b2tlbi5lbmQpOworICAgICAgICAgICAgZXh0
cmEudG9rZW5zLnB1c2goeworICAgICAgICAgICAgICAgIHR5cGU6IFRva2VuTmFtZVt0b2tlbi50
eXBlXSwKKyAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUsCisgICAgICAgICAgICAgICAgcmFu
Z2U6IFt0b2tlbi5zdGFydCwgdG9rZW4uZW5kXSwKKyAgICAgICAgICAgICAgICBsb2M6IGxvYwor
ICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gdG9rZW47CisgICAg
fQorCisgICAgZnVuY3Rpb24gbGV4KCkgeworICAgICAgICB2YXIgdG9rZW47CisKKyAgICAgICAg
dG9rZW4gPSBsb29rYWhlYWQ7CisgICAgICAgIGluZGV4ID0gdG9rZW4uZW5kOworICAgICAgICBs
aW5lTnVtYmVyID0gdG9rZW4ubGluZU51bWJlcjsKKyAgICAgICAgbGluZVN0YXJ0ID0gdG9rZW4u
bGluZVN0YXJ0OworCisgICAgICAgIGxvb2thaGVhZCA9ICh0eXBlb2YgZXh0cmEudG9rZW5zICE9
PSAndW5kZWZpbmVkJykgPyBjb2xsZWN0VG9rZW4oKSA6IGFkdmFuY2UoKTsKKworICAgICAgICBp
bmRleCA9IHRva2VuLmVuZDsKKyAgICAgICAgbGluZU51bWJlciA9IHRva2VuLmxpbmVOdW1iZXI7
CisgICAgICAgIGxpbmVTdGFydCA9IHRva2VuLmxpbmVTdGFydDsKKworICAgICAgICByZXR1cm4g
dG9rZW47CisgICAgfQorCisgICAgZnVuY3Rpb24gcGVlaygpIHsKKyAgICAgICAgdmFyIHBvcywg
bGluZSwgc3RhcnQ7CisKKyAgICAgICAgcG9zID0gaW5kZXg7CisgICAgICAgIGxpbmUgPSBsaW5l
TnVtYmVyOworICAgICAgICBzdGFydCA9IGxpbmVTdGFydDsKKyAgICAgICAgbG9va2FoZWFkID0g
KHR5cGVvZiBleHRyYS50b2tlbnMgIT09ICd1bmRlZmluZWQnKSA/IGNvbGxlY3RUb2tlbigpIDog
YWR2YW5jZSgpOworICAgICAgICBpbmRleCA9IHBvczsKKyAgICAgICAgbGluZU51bWJlciA9IGxp
bmU7CisgICAgICAgIGxpbmVTdGFydCA9IHN0YXJ0OworICAgIH0KKworICAgIGZ1bmN0aW9uIFBv
c2l0aW9uKGxpbmUsIGNvbHVtbikgeworICAgICAgICB0aGlzLmxpbmUgPSBsaW5lOworICAgICAg
ICB0aGlzLmNvbHVtbiA9IGNvbHVtbjsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBTb3VyY2VMb2Nh
dGlvbihzdGFydExpbmUsIHN0YXJ0Q29sdW1uLCBsaW5lLCBjb2x1bW4pIHsKKyAgICAgICAgdGhp
cy5zdGFydCA9IG5ldyBQb3NpdGlvbihzdGFydExpbmUsIHN0YXJ0Q29sdW1uKTsKKyAgICAgICAg
dGhpcy5lbmQgPSBuZXcgUG9zaXRpb24obGluZSwgY29sdW1uKTsKKyAgICB9CisKKyAgICBTeW50
YXhUcmVlRGVsZWdhdGUgPSB7CisKKyAgICAgICAgbmFtZTogJ1N5bnRheFRyZWUnLAorCisgICAg
ICAgIHByb2Nlc3NDb21tZW50OiBmdW5jdGlvbiAobm9kZSkgeworICAgICAgICAgICAgdmFyIGxh
c3RDaGlsZCwgdHJhaWxpbmdDb21tZW50czsKKworICAgICAgICAgICAgaWYgKG5vZGUudHlwZSA9
PT0gU3ludGF4LlByb2dyYW0pIHsKKyAgICAgICAgICAgICAgICBpZiAobm9kZS5ib2R5Lmxlbmd0
aCA+IDApIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGV4dHJhLnRyYWlsaW5nQ29tbWVudHMu
bGVuZ3RoID4gMCkgeworICAgICAgICAgICAgICAgIGlmIChleHRyYS50cmFpbGluZ0NvbW1lbnRz
WzBdLnJhbmdlWzBdID49IG5vZGUucmFuZ2VbMV0pIHsKKyAgICAgICAgICAgICAgICAgICAgdHJh
aWxpbmdDb21tZW50cyA9IGV4dHJhLnRyYWlsaW5nQ29tbWVudHM7CisgICAgICAgICAgICAgICAg
ICAgIGV4dHJhLnRyYWlsaW5nQ29tbWVudHMgPSBbXTsKKyAgICAgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgICAgICBleHRyYS50cmFpbGluZ0NvbW1lbnRzLmxlbmd0aCA9IDA7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg
ICBpZiAoZXh0cmEuYm90dG9tUmlnaHRTdGFjay5sZW5ndGggPiAwICYmCisgICAgICAgICAgICAg
ICAgICAgICAgICBleHRyYS5ib3R0b21SaWdodFN0YWNrW2V4dHJhLmJvdHRvbVJpZ2h0U3RhY2su
bGVuZ3RoIC0gMV0udHJhaWxpbmdDb21tZW50cyAmJgorICAgICAgICAgICAgICAgICAgICAgICAg
ZXh0cmEuYm90dG9tUmlnaHRTdGFja1tleHRyYS5ib3R0b21SaWdodFN0YWNrLmxlbmd0aCAtIDFd
LnRyYWlsaW5nQ29tbWVudHNbMF0ucmFuZ2VbMF0gPj0gbm9kZS5yYW5nZVsxXSkgeworICAgICAg
ICAgICAgICAgICAgICB0cmFpbGluZ0NvbW1lbnRzID0gZXh0cmEuYm90dG9tUmlnaHRTdGFja1tl
eHRyYS5ib3R0b21SaWdodFN0YWNrLmxlbmd0aCAtIDFdLnRyYWlsaW5nQ29tbWVudHM7CisgICAg
ICAgICAgICAgICAgICAgIGRlbGV0ZSBleHRyYS5ib3R0b21SaWdodFN0YWNrW2V4dHJhLmJvdHRv
bVJpZ2h0U3RhY2subGVuZ3RoIC0gMV0udHJhaWxpbmdDb21tZW50czsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIEVhdGluZyB0aGUgc3RhY2suCisg
ICAgICAgICAgICB3aGlsZSAoZXh0cmEuYm90dG9tUmlnaHRTdGFjay5sZW5ndGggPiAwICYmIGV4
dHJhLmJvdHRvbVJpZ2h0U3RhY2tbZXh0cmEuYm90dG9tUmlnaHRTdGFjay5sZW5ndGggLSAxXS5y
YW5nZVswXSA+PSBub2RlLnJhbmdlWzBdKSB7CisgICAgICAgICAgICAgICAgbGFzdENoaWxkID0g
ZXh0cmEuYm90dG9tUmlnaHRTdGFjay5wb3AoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgaWYgKGxhc3RDaGlsZCkgeworICAgICAgICAgICAgICAgIGlmIChsYXN0Q2hpbGQubGVhZGlu
Z0NvbW1lbnRzICYmIGxhc3RDaGlsZC5sZWFkaW5nQ29tbWVudHNbbGFzdENoaWxkLmxlYWRpbmdD
b21tZW50cy5sZW5ndGggLSAxXS5yYW5nZVsxXSA8PSBub2RlLnJhbmdlWzBdKSB7CisgICAgICAg
ICAgICAgICAgICAgIG5vZGUubGVhZGluZ0NvbW1lbnRzID0gbGFzdENoaWxkLmxlYWRpbmdDb21t
ZW50czsKKyAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGxhc3RDaGlsZC5sZWFkaW5nQ29tbWVu
dHM7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIGlmIChleHRyYS5sZWFk
aW5nQ29tbWVudHMubGVuZ3RoID4gMCAmJiBleHRyYS5sZWFkaW5nQ29tbWVudHNbZXh0cmEubGVh
ZGluZ0NvbW1lbnRzLmxlbmd0aCAtIDFdLnJhbmdlWzFdIDw9IG5vZGUucmFuZ2VbMF0pIHsKKyAg
ICAgICAgICAgICAgICBub2RlLmxlYWRpbmdDb21tZW50cyA9IGV4dHJhLmxlYWRpbmdDb21tZW50
czsKKyAgICAgICAgICAgICAgICBleHRyYS5sZWFkaW5nQ29tbWVudHMgPSBbXTsKKyAgICAgICAg
ICAgIH0KKworCisgICAgICAgICAgICBpZiAodHJhaWxpbmdDb21tZW50cykgeworICAgICAgICAg
ICAgICAgIG5vZGUudHJhaWxpbmdDb21tZW50cyA9IHRyYWlsaW5nQ29tbWVudHM7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGV4dHJhLmJvdHRvbVJpZ2h0U3RhY2sucHVzaChub2RlKTsK
KyAgICAgICAgfSwKKworICAgICAgICBtYXJrRW5kOiBmdW5jdGlvbiAobm9kZSwgc3RhcnRUb2tl
bikgeworICAgICAgICAgICAgaWYgKGV4dHJhLnJhbmdlKSB7CisgICAgICAgICAgICAgICAgbm9k
ZS5yYW5nZSA9IFtzdGFydFRva2VuLnN0YXJ0LCBpbmRleF07CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBpZiAoZXh0cmEubG9jKSB7CisgICAgICAgICAgICAgICAgbm9kZS5sb2MgPSBuZXcg
U291cmNlTG9jYXRpb24oCisgICAgICAgICAgICAgICAgICAgIHN0YXJ0VG9rZW4uc3RhcnRMaW5l
TnVtYmVyID09PSB1bmRlZmluZWQgPyAgc3RhcnRUb2tlbi5saW5lTnVtYmVyIDogc3RhcnRUb2tl
bi5zdGFydExpbmVOdW1iZXIsCisgICAgICAgICAgICAgICAgICAgIHN0YXJ0VG9rZW4uc3RhcnQg
LSAoc3RhcnRUb2tlbi5zdGFydExpbmVTdGFydCA9PT0gdW5kZWZpbmVkID8gIHN0YXJ0VG9rZW4u
bGluZVN0YXJ0IDogc3RhcnRUb2tlbi5zdGFydExpbmVTdGFydCksCisgICAgICAgICAgICAgICAg
ICAgIGxpbmVOdW1iZXIsCisgICAgICAgICAgICAgICAgICAgIGluZGV4IC0gbGluZVN0YXJ0Cisg
ICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgICAgICB0aGlzLnBvc3RQcm9jZXNzKG5vZGUp
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoZXh0cmEuYXR0YWNoQ29tbWVudCkg
eworICAgICAgICAgICAgICAgIHRoaXMucHJvY2Vzc0NvbW1lbnQobm9kZSk7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICByZXR1cm4gbm9kZTsKKyAgICAgICAgfSwKKworICAgICAgICBwb3N0
UHJvY2VzczogZnVuY3Rpb24gKG5vZGUpIHsKKyAgICAgICAgICAgIGlmIChleHRyYS5zb3VyY2Up
IHsKKyAgICAgICAgICAgICAgICBub2RlLmxvYy5zb3VyY2UgPSBleHRyYS5zb3VyY2U7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gbm9kZTsKKyAgICAgICAgfSwKKworICAgICAg
ICBjcmVhdGVBcnJheUV4cHJlc3Npb246IGZ1bmN0aW9uIChlbGVtZW50cykgeworICAgICAgICAg
ICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguQXJyYXlFeHByZXNzaW9u
LAorICAgICAgICAgICAgICAgIGVsZW1lbnRzOiBlbGVtZW50cworICAgICAgICAgICAgfTsKKyAg
ICAgICAgfSwKKworICAgICAgICBjcmVhdGVBc3NpZ25tZW50RXhwcmVzc2lvbjogZnVuY3Rpb24g
KG9wZXJhdG9yLCBsZWZ0LCByaWdodCkgeworICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAg
ICAgICAgICB0eXBlOiBTeW50YXguQXNzaWdubWVudEV4cHJlc3Npb24sCisgICAgICAgICAgICAg
ICAgb3BlcmF0b3I6IG9wZXJhdG9yLAorICAgICAgICAgICAgICAgIGxlZnQ6IGxlZnQsCisgICAg
ICAgICAgICAgICAgcmlnaHQ6IHJpZ2h0CisgICAgICAgICAgICB9OworICAgICAgICB9LAorCisg
ICAgICAgIGNyZWF0ZUJpbmFyeUV4cHJlc3Npb246IGZ1bmN0aW9uIChvcGVyYXRvciwgbGVmdCwg
cmlnaHQpIHsKKyAgICAgICAgICAgIHZhciB0eXBlID0gKG9wZXJhdG9yID09PSAnfHwnIHx8IG9w
ZXJhdG9yID09PSAnJiYnKSA/IFN5bnRheC5Mb2dpY2FsRXhwcmVzc2lvbiA6CisgICAgICAgICAg
ICAgICAgICAgICAgICBTeW50YXguQmluYXJ5RXhwcmVzc2lvbjsKKyAgICAgICAgICAgIHJldHVy
biB7CisgICAgICAgICAgICAgICAgdHlwZTogdHlwZSwKKyAgICAgICAgICAgICAgICBvcGVyYXRv
cjogb3BlcmF0b3IsCisgICAgICAgICAgICAgICAgbGVmdDogbGVmdCwKKyAgICAgICAgICAgICAg
ICByaWdodDogcmlnaHQKKyAgICAgICAgICAgIH07CisgICAgICAgIH0sCisKKyAgICAgICAgY3Jl
YXRlQmxvY2tTdGF0ZW1lbnQ6IGZ1bmN0aW9uIChib2R5KSB7CisgICAgICAgICAgICByZXR1cm4g
eworICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5CbG9ja1N0YXRlbWVudCwKKyAgICAgICAg
ICAgICAgICBib2R5OiBib2R5CisgICAgICAgICAgICB9OworICAgICAgICB9LAorCisgICAgICAg
IGNyZWF0ZUJyZWFrU3RhdGVtZW50OiBmdW5jdGlvbiAobGFiZWwpIHsKKyAgICAgICAgICAgIHJl
dHVybiB7CisgICAgICAgICAgICAgICAgdHlwZTogU3ludGF4LkJyZWFrU3RhdGVtZW50LAorICAg
ICAgICAgICAgICAgIGxhYmVsOiBsYWJlbAorICAgICAgICAgICAgfTsKKyAgICAgICAgfSwKKwor
ICAgICAgICBjcmVhdGVDYWxsRXhwcmVzc2lvbjogZnVuY3Rpb24gKGNhbGxlZSwgYXJncykgewor
ICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguQ2FsbEV4
cHJlc3Npb24sCisgICAgICAgICAgICAgICAgY2FsbGVlOiBjYWxsZWUsCisgICAgICAgICAgICAg
ICAgJ2FyZ3VtZW50cyc6IGFyZ3MKKyAgICAgICAgICAgIH07CisgICAgICAgIH0sCisKKyAgICAg
ICAgY3JlYXRlQ2F0Y2hDbGF1c2U6IGZ1bmN0aW9uIChwYXJhbSwgYm9keSkgeworICAgICAgICAg
ICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguQ2F0Y2hDbGF1c2UsCisg
ICAgICAgICAgICAgICAgcGFyYW06IHBhcmFtLAorICAgICAgICAgICAgICAgIGJvZHk6IGJvZHkK
KyAgICAgICAgICAgIH07CisgICAgICAgIH0sCisKKyAgICAgICAgY3JlYXRlQ29uZGl0aW9uYWxF
eHByZXNzaW9uOiBmdW5jdGlvbiAodGVzdCwgY29uc2VxdWVudCwgYWx0ZXJuYXRlKSB7CisgICAg
ICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5Db25kaXRpb25h
bEV4cHJlc3Npb24sCisgICAgICAgICAgICAgICAgdGVzdDogdGVzdCwKKyAgICAgICAgICAgICAg
ICBjb25zZXF1ZW50OiBjb25zZXF1ZW50LAorICAgICAgICAgICAgICAgIGFsdGVybmF0ZTogYWx0
ZXJuYXRlCisgICAgICAgICAgICB9OworICAgICAgICB9LAorCisgICAgICAgIGNyZWF0ZUNvbnRp
bnVlU3RhdGVtZW50OiBmdW5jdGlvbiAobGFiZWwpIHsKKyAgICAgICAgICAgIHJldHVybiB7Cisg
ICAgICAgICAgICAgICAgdHlwZTogU3ludGF4LkNvbnRpbnVlU3RhdGVtZW50LAorICAgICAgICAg
ICAgICAgIGxhYmVsOiBsYWJlbAorICAgICAgICAgICAgfTsKKyAgICAgICAgfSwKKworICAgICAg
ICBjcmVhdGVEZWJ1Z2dlclN0YXRlbWVudDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0
dXJuIHsKKyAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguRGVidWdnZXJTdGF0ZW1lbnQKKyAg
ICAgICAgICAgIH07CisgICAgICAgIH0sCisKKyAgICAgICAgY3JlYXRlRG9XaGlsZVN0YXRlbWVu
dDogZnVuY3Rpb24gKGJvZHksIHRlc3QpIHsKKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAg
ICAgICAgICAgdHlwZTogU3ludGF4LkRvV2hpbGVTdGF0ZW1lbnQsCisgICAgICAgICAgICAgICAg
Ym9keTogYm9keSwKKyAgICAgICAgICAgICAgICB0ZXN0OiB0ZXN0CisgICAgICAgICAgICB9Owor
ICAgICAgICB9LAorCisgICAgICAgIGNyZWF0ZUVtcHR5U3RhdGVtZW50OiBmdW5jdGlvbiAoKSB7
CisgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5FbXB0
eVN0YXRlbWVudAorICAgICAgICAgICAgfTsKKyAgICAgICAgfSwKKworICAgICAgICBjcmVhdGVF
eHByZXNzaW9uU3RhdGVtZW50OiBmdW5jdGlvbiAoZXhwcmVzc2lvbikgeworICAgICAgICAgICAg
cmV0dXJuIHsKKyAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguRXhwcmVzc2lvblN0YXRlbWVu
dCwKKyAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBleHByZXNzaW9uCisgICAgICAgICAgICB9
OworICAgICAgICB9LAorCisgICAgICAgIGNyZWF0ZUZvclN0YXRlbWVudDogZnVuY3Rpb24gKGlu
aXQsIHRlc3QsIHVwZGF0ZSwgYm9keSkgeworICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAg
ICAgICAgICB0eXBlOiBTeW50YXguRm9yU3RhdGVtZW50LAorICAgICAgICAgICAgICAgIGluaXQ6
IGluaXQsCisgICAgICAgICAgICAgICAgdGVzdDogdGVzdCwKKyAgICAgICAgICAgICAgICB1cGRh
dGU6IHVwZGF0ZSwKKyAgICAgICAgICAgICAgICBib2R5OiBib2R5CisgICAgICAgICAgICB9Owor
ICAgICAgICB9LAorCisgICAgICAgIGNyZWF0ZUZvckluU3RhdGVtZW50OiBmdW5jdGlvbiAobGVm
dCwgcmlnaHQsIGJvZHkpIHsKKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAg
dHlwZTogU3ludGF4LkZvckluU3RhdGVtZW50LAorICAgICAgICAgICAgICAgIGxlZnQ6IGxlZnQs
CisgICAgICAgICAgICAgICAgcmlnaHQ6IHJpZ2h0LAorICAgICAgICAgICAgICAgIGJvZHk6IGJv
ZHksCisgICAgICAgICAgICAgICAgZWFjaDogZmFsc2UKKyAgICAgICAgICAgIH07CisgICAgICAg
IH0sCisKKyAgICAgICAgY3JlYXRlRnVuY3Rpb25EZWNsYXJhdGlvbjogZnVuY3Rpb24gKGlkLCBw
YXJhbXMsIGRlZmF1bHRzLCBib2R5KSB7CisgICAgICAgICAgICByZXR1cm4geworICAgICAgICAg
ICAgICAgIHR5cGU6IFN5bnRheC5GdW5jdGlvbkRlY2xhcmF0aW9uLAorICAgICAgICAgICAgICAg
IGlkOiBpZCwKKyAgICAgICAgICAgICAgICBwYXJhbXM6IHBhcmFtcywKKyAgICAgICAgICAgICAg
ICBkZWZhdWx0czogZGVmYXVsdHMsCisgICAgICAgICAgICAgICAgYm9keTogYm9keSwKKyAgICAg
ICAgICAgICAgICByZXN0OiBudWxsLAorICAgICAgICAgICAgICAgIGdlbmVyYXRvcjogZmFsc2Us
CisgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogZmFsc2UKKyAgICAgICAgICAgIH07CisgICAg
ICAgIH0sCisKKyAgICAgICAgY3JlYXRlRnVuY3Rpb25FeHByZXNzaW9uOiBmdW5jdGlvbiAoaWQs
IHBhcmFtcywgZGVmYXVsdHMsIGJvZHkpIHsKKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAg
ICAgICAgICAgdHlwZTogU3ludGF4LkZ1bmN0aW9uRXhwcmVzc2lvbiwKKyAgICAgICAgICAgICAg
ICBpZDogaWQsCisgICAgICAgICAgICAgICAgcGFyYW1zOiBwYXJhbXMsCisgICAgICAgICAgICAg
ICAgZGVmYXVsdHM6IGRlZmF1bHRzLAorICAgICAgICAgICAgICAgIGJvZHk6IGJvZHksCisgICAg
ICAgICAgICAgICAgcmVzdDogbnVsbCwKKyAgICAgICAgICAgICAgICBnZW5lcmF0b3I6IGZhbHNl
LAorICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IGZhbHNlCisgICAgICAgICAgICB9OworICAg
ICAgICB9LAorCisgICAgICAgIGNyZWF0ZUlkZW50aWZpZXI6IGZ1bmN0aW9uIChuYW1lKSB7Cisg
ICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5JZGVudGlm
aWVyLAorICAgICAgICAgICAgICAgIG5hbWU6IG5hbWUKKyAgICAgICAgICAgIH07CisgICAgICAg
IH0sCisKKyAgICAgICAgY3JlYXRlSWZTdGF0ZW1lbnQ6IGZ1bmN0aW9uICh0ZXN0LCBjb25zZXF1
ZW50LCBhbHRlcm5hdGUpIHsKKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAg
dHlwZTogU3ludGF4LklmU3RhdGVtZW50LAorICAgICAgICAgICAgICAgIHRlc3Q6IHRlc3QsCisg
ICAgICAgICAgICAgICAgY29uc2VxdWVudDogY29uc2VxdWVudCwKKyAgICAgICAgICAgICAgICBh
bHRlcm5hdGU6IGFsdGVybmF0ZQorICAgICAgICAgICAgfTsKKyAgICAgICAgfSwKKworICAgICAg
ICBjcmVhdGVMYWJlbGVkU3RhdGVtZW50OiBmdW5jdGlvbiAobGFiZWwsIGJvZHkpIHsKKyAgICAg
ICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgdHlwZTogU3ludGF4LkxhYmVsZWRTdGF0
ZW1lbnQsCisgICAgICAgICAgICAgICAgbGFiZWw6IGxhYmVsLAorICAgICAgICAgICAgICAgIGJv
ZHk6IGJvZHkKKyAgICAgICAgICAgIH07CisgICAgICAgIH0sCisKKyAgICAgICAgY3JlYXRlTGl0
ZXJhbDogZnVuY3Rpb24gKHRva2VuKSB7CisgICAgICAgICAgICByZXR1cm4geworICAgICAgICAg
ICAgICAgIHR5cGU6IFN5bnRheC5MaXRlcmFsLAorICAgICAgICAgICAgICAgIHZhbHVlOiB0b2tl
bi52YWx1ZSwKKyAgICAgICAgICAgICAgICByYXc6IHNvdXJjZS5zbGljZSh0b2tlbi5zdGFydCwg
dG9rZW4uZW5kKQorICAgICAgICAgICAgfTsKKyAgICAgICAgfSwKKworICAgICAgICBjcmVhdGVN
ZW1iZXJFeHByZXNzaW9uOiBmdW5jdGlvbiAoYWNjZXNzb3IsIG9iamVjdCwgcHJvcGVydHkpIHsK
KyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgdHlwZTogU3ludGF4Lk1lbWJl
ckV4cHJlc3Npb24sCisgICAgICAgICAgICAgICAgY29tcHV0ZWQ6IGFjY2Vzc29yID09PSAnWycs
CisgICAgICAgICAgICAgICAgb2JqZWN0OiBvYmplY3QsCisgICAgICAgICAgICAgICAgcHJvcGVy
dHk6IHByb3BlcnR5CisgICAgICAgICAgICB9OworICAgICAgICB9LAorCisgICAgICAgIGNyZWF0
ZU5ld0V4cHJlc3Npb246IGZ1bmN0aW9uIChjYWxsZWUsIGFyZ3MpIHsKKyAgICAgICAgICAgIHJl
dHVybiB7CisgICAgICAgICAgICAgICAgdHlwZTogU3ludGF4Lk5ld0V4cHJlc3Npb24sCisgICAg
ICAgICAgICAgICAgY2FsbGVlOiBjYWxsZWUsCisgICAgICAgICAgICAgICAgJ2FyZ3VtZW50cyc6
IGFyZ3MKKyAgICAgICAgICAgIH07CisgICAgICAgIH0sCisKKyAgICAgICAgY3JlYXRlT2JqZWN0
RXhwcmVzc2lvbjogZnVuY3Rpb24gKHByb3BlcnRpZXMpIHsKKyAgICAgICAgICAgIHJldHVybiB7
CisgICAgICAgICAgICAgICAgdHlwZTogU3ludGF4Lk9iamVjdEV4cHJlc3Npb24sCisgICAgICAg
ICAgICAgICAgcHJvcGVydGllczogcHJvcGVydGllcworICAgICAgICAgICAgfTsKKyAgICAgICAg
fSwKKworICAgICAgICBjcmVhdGVQb3N0Zml4RXhwcmVzc2lvbjogZnVuY3Rpb24gKG9wZXJhdG9y
LCBhcmd1bWVudCkgeworICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICB0eXBl
OiBTeW50YXguVXBkYXRlRXhwcmVzc2lvbiwKKyAgICAgICAgICAgICAgICBvcGVyYXRvcjogb3Bl
cmF0b3IsCisgICAgICAgICAgICAgICAgYXJndW1lbnQ6IGFyZ3VtZW50LAorICAgICAgICAgICAg
ICAgIHByZWZpeDogZmFsc2UKKyAgICAgICAgICAgIH07CisgICAgICAgIH0sCisKKyAgICAgICAg
Y3JlYXRlUHJvZ3JhbTogZnVuY3Rpb24gKGJvZHkpIHsKKyAgICAgICAgICAgIHJldHVybiB7Cisg
ICAgICAgICAgICAgICAgdHlwZTogU3ludGF4LlByb2dyYW0sCisgICAgICAgICAgICAgICAgYm9k
eTogYm9keQorICAgICAgICAgICAgfTsKKyAgICAgICAgfSwKKworICAgICAgICBjcmVhdGVQcm9w
ZXJ0eTogZnVuY3Rpb24gKGtpbmQsIGtleSwgdmFsdWUpIHsKKyAgICAgICAgICAgIHJldHVybiB7
CisgICAgICAgICAgICAgICAgdHlwZTogU3ludGF4LlByb3BlcnR5LAorICAgICAgICAgICAgICAg
IGtleToga2V5LAorICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSwKKyAgICAgICAgICAgICAg
ICBraW5kOiBraW5kCisgICAgICAgICAgICB9OworICAgICAgICB9LAorCisgICAgICAgIGNyZWF0
ZVJldHVyblN0YXRlbWVudDogZnVuY3Rpb24gKGFyZ3VtZW50KSB7CisgICAgICAgICAgICByZXR1
cm4geworICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5SZXR1cm5TdGF0ZW1lbnQsCisgICAg
ICAgICAgICAgICAgYXJndW1lbnQ6IGFyZ3VtZW50CisgICAgICAgICAgICB9OworICAgICAgICB9
LAorCisgICAgICAgIGNyZWF0ZVNlcXVlbmNlRXhwcmVzc2lvbjogZnVuY3Rpb24gKGV4cHJlc3Np
b25zKSB7CisgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRh
eC5TZXF1ZW5jZUV4cHJlc3Npb24sCisgICAgICAgICAgICAgICAgZXhwcmVzc2lvbnM6IGV4cHJl
c3Npb25zCisgICAgICAgICAgICB9OworICAgICAgICB9LAorCisgICAgICAgIGNyZWF0ZVN3aXRj
aENhc2U6IGZ1bmN0aW9uICh0ZXN0LCBjb25zZXF1ZW50KSB7CisgICAgICAgICAgICByZXR1cm4g
eworICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5Td2l0Y2hDYXNlLAorICAgICAgICAgICAg
ICAgIHRlc3Q6IHRlc3QsCisgICAgICAgICAgICAgICAgY29uc2VxdWVudDogY29uc2VxdWVudAor
ICAgICAgICAgICAgfTsKKyAgICAgICAgfSwKKworICAgICAgICBjcmVhdGVTd2l0Y2hTdGF0ZW1l
bnQ6IGZ1bmN0aW9uIChkaXNjcmltaW5hbnQsIGNhc2VzKSB7CisgICAgICAgICAgICByZXR1cm4g
eworICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5Td2l0Y2hTdGF0ZW1lbnQsCisgICAgICAg
ICAgICAgICAgZGlzY3JpbWluYW50OiBkaXNjcmltaW5hbnQsCisgICAgICAgICAgICAgICAgY2Fz
ZXM6IGNhc2VzCisgICAgICAgICAgICB9OworICAgICAgICB9LAorCisgICAgICAgIGNyZWF0ZVRo
aXNFeHByZXNzaW9uOiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4geworICAgICAg
ICAgICAgICAgIHR5cGU6IFN5bnRheC5UaGlzRXhwcmVzc2lvbgorICAgICAgICAgICAgfTsKKyAg
ICAgICAgfSwKKworICAgICAgICBjcmVhdGVUaHJvd1N0YXRlbWVudDogZnVuY3Rpb24gKGFyZ3Vt
ZW50KSB7CisgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRh
eC5UaHJvd1N0YXRlbWVudCwKKyAgICAgICAgICAgICAgICBhcmd1bWVudDogYXJndW1lbnQKKyAg
ICAgICAgICAgIH07CisgICAgICAgIH0sCisKKyAgICAgICAgY3JlYXRlVHJ5U3RhdGVtZW50OiBm
dW5jdGlvbiAoYmxvY2ssIGd1YXJkZWRIYW5kbGVycywgaGFuZGxlcnMsIGZpbmFsaXplcikgewor
ICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguVHJ5U3Rh
dGVtZW50LAorICAgICAgICAgICAgICAgIGJsb2NrOiBibG9jaywKKyAgICAgICAgICAgICAgICBn
dWFyZGVkSGFuZGxlcnM6IGd1YXJkZWRIYW5kbGVycywKKyAgICAgICAgICAgICAgICBoYW5kbGVy
czogaGFuZGxlcnMsCisgICAgICAgICAgICAgICAgZmluYWxpemVyOiBmaW5hbGl6ZXIKKyAgICAg
ICAgICAgIH07CisgICAgICAgIH0sCisKKyAgICAgICAgY3JlYXRlVW5hcnlFeHByZXNzaW9uOiBm
dW5jdGlvbiAob3BlcmF0b3IsIGFyZ3VtZW50KSB7CisgICAgICAgICAgICBpZiAob3BlcmF0b3Ig
PT09ICcrKycgfHwgb3BlcmF0b3IgPT09ICctLScpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
eworICAgICAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguVXBkYXRlRXhwcmVzc2lvbiwKKyAg
ICAgICAgICAgICAgICAgICAgb3BlcmF0b3I6IG9wZXJhdG9yLAorICAgICAgICAgICAgICAgICAg
ICBhcmd1bWVudDogYXJndW1lbnQsCisgICAgICAgICAgICAgICAgICAgIHByZWZpeDogdHJ1ZQor
ICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gewor
ICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5VbmFyeUV4cHJlc3Npb24sCisgICAgICAgICAg
ICAgICAgb3BlcmF0b3I6IG9wZXJhdG9yLAorICAgICAgICAgICAgICAgIGFyZ3VtZW50OiBhcmd1
bWVudCwKKyAgICAgICAgICAgICAgICBwcmVmaXg6IHRydWUKKyAgICAgICAgICAgIH07CisgICAg
ICAgIH0sCisKKyAgICAgICAgY3JlYXRlVmFyaWFibGVEZWNsYXJhdGlvbjogZnVuY3Rpb24gKGRl
Y2xhcmF0aW9ucywga2luZCkgeworICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAg
ICB0eXBlOiBTeW50YXguVmFyaWFibGVEZWNsYXJhdGlvbiwKKyAgICAgICAgICAgICAgICBkZWNs
YXJhdGlvbnM6IGRlY2xhcmF0aW9ucywKKyAgICAgICAgICAgICAgICBraW5kOiBraW5kCisgICAg
ICAgICAgICB9OworICAgICAgICB9LAorCisgICAgICAgIGNyZWF0ZVZhcmlhYmxlRGVjbGFyYXRv
cjogZnVuY3Rpb24gKGlkLCBpbml0KSB7CisgICAgICAgICAgICByZXR1cm4geworICAgICAgICAg
ICAgICAgIHR5cGU6IFN5bnRheC5WYXJpYWJsZURlY2xhcmF0b3IsCisgICAgICAgICAgICAgICAg
aWQ6IGlkLAorICAgICAgICAgICAgICAgIGluaXQ6IGluaXQKKyAgICAgICAgICAgIH07CisgICAg
ICAgIH0sCisKKyAgICAgICAgY3JlYXRlV2hpbGVTdGF0ZW1lbnQ6IGZ1bmN0aW9uICh0ZXN0LCBi
b2R5KSB7CisgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRh
eC5XaGlsZVN0YXRlbWVudCwKKyAgICAgICAgICAgICAgICB0ZXN0OiB0ZXN0LAorICAgICAgICAg
ICAgICAgIGJvZHk6IGJvZHkKKyAgICAgICAgICAgIH07CisgICAgICAgIH0sCisKKyAgICAgICAg
Y3JlYXRlV2l0aFN0YXRlbWVudDogZnVuY3Rpb24gKG9iamVjdCwgYm9keSkgeworICAgICAgICAg
ICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguV2l0aFN0YXRlbWVudCwK
KyAgICAgICAgICAgICAgICBvYmplY3Q6IG9iamVjdCwKKyAgICAgICAgICAgICAgICBib2R5OiBi
b2R5CisgICAgICAgICAgICB9OworICAgICAgICB9CisgICAgfTsKKworICAgIC8vIFJldHVybiB0
cnVlIGlmIHRoZXJlIGlzIGEgbGluZSB0ZXJtaW5hdG9yIGJlZm9yZSB0aGUgbmV4dCB0b2tlbi4K
KworICAgIGZ1bmN0aW9uIHBlZWtMaW5lVGVybWluYXRvcigpIHsKKyAgICAgICAgdmFyIHBvcywg
bGluZSwgc3RhcnQsIGZvdW5kOworCisgICAgICAgIHBvcyA9IGluZGV4OworICAgICAgICBsaW5l
ID0gbGluZU51bWJlcjsKKyAgICAgICAgc3RhcnQgPSBsaW5lU3RhcnQ7CisgICAgICAgIHNraXBD
b21tZW50KCk7CisgICAgICAgIGZvdW5kID0gbGluZU51bWJlciAhPT0gbGluZTsKKyAgICAgICAg
aW5kZXggPSBwb3M7CisgICAgICAgIGxpbmVOdW1iZXIgPSBsaW5lOworICAgICAgICBsaW5lU3Rh
cnQgPSBzdGFydDsKKworICAgICAgICByZXR1cm4gZm91bmQ7CisgICAgfQorCisgICAgLy8gVGhy
b3cgYW4gZXhjZXB0aW9uCisKKyAgICBmdW5jdGlvbiB0aHJvd0Vycm9yKHRva2VuLCBtZXNzYWdl
Rm9ybWF0KSB7CisgICAgICAgIHZhciBlcnJvciwKKyAgICAgICAgICAgIGFyZ3MgPSBBcnJheS5w
cm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDIpLAorICAgICAgICAgICAgbXNnID0gbWVz
c2FnZUZvcm1hdC5yZXBsYWNlKAorICAgICAgICAgICAgICAgIC8lKFxkKS9nLAorICAgICAgICAg
ICAgICAgIGZ1bmN0aW9uICh3aG9sZSwgaW5kZXgpIHsKKyAgICAgICAgICAgICAgICAgICAgYXNz
ZXJ0KGluZGV4IDwgYXJncy5sZW5ndGgsICdNZXNzYWdlIHJlZmVyZW5jZSBtdXN0IGJlIGluIHJh
bmdlJyk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBhcmdzW2luZGV4XTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICApOworCisgICAgICAgIGlmICh0eXBlb2YgdG9rZW4ubGlu
ZU51bWJlciA9PT0gJ251bWJlcicpIHsKKyAgICAgICAgICAgIGVycm9yID0gbmV3IEVycm9yKCdM
aW5lICcgKyB0b2tlbi5saW5lTnVtYmVyICsgJzogJyArIG1zZyk7CisgICAgICAgICAgICBlcnJv
ci5pbmRleCA9IHRva2VuLnN0YXJ0OworICAgICAgICAgICAgZXJyb3IubGluZU51bWJlciA9IHRv
a2VuLmxpbmVOdW1iZXI7CisgICAgICAgICAgICBlcnJvci5jb2x1bW4gPSB0b2tlbi5zdGFydCAt
IGxpbmVTdGFydCArIDE7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBlcnJvciA9IG5l
dyBFcnJvcignTGluZSAnICsgbGluZU51bWJlciArICc6ICcgKyBtc2cpOworICAgICAgICAgICAg
ZXJyb3IuaW5kZXggPSBpbmRleDsKKyAgICAgICAgICAgIGVycm9yLmxpbmVOdW1iZXIgPSBsaW5l
TnVtYmVyOworICAgICAgICAgICAgZXJyb3IuY29sdW1uID0gaW5kZXggLSBsaW5lU3RhcnQgKyAx
OworICAgICAgICB9CisKKyAgICAgICAgZXJyb3IuZGVzY3JpcHRpb24gPSBtc2c7CisgICAgICAg
IHRocm93IGVycm9yOworICAgIH0KKworICAgIGZ1bmN0aW9uIHRocm93RXJyb3JUb2xlcmFudCgp
IHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHRocm93RXJyb3IuYXBwbHkobnVsbCwgYXJn
dW1lbnRzKTsKKyAgICAgICAgfSBjYXRjaCAoZSkgeworICAgICAgICAgICAgaWYgKGV4dHJhLmVy
cm9ycykgeworICAgICAgICAgICAgICAgIGV4dHJhLmVycm9ycy5wdXNoKGUpOworICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB0aHJvdyBlOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgfQorCisKKyAgICAvLyBUaHJvdyBhbiBleGNlcHRpb24gYmVjYXVzZSBvZiB0
aGUgdG9rZW4uCisKKyAgICBmdW5jdGlvbiB0aHJvd1VuZXhwZWN0ZWQodG9rZW4pIHsKKyAgICAg
ICAgaWYgKHRva2VuLnR5cGUgPT09IFRva2VuLkVPRikgeworICAgICAgICAgICAgdGhyb3dFcnJv
cih0b2tlbiwgTWVzc2FnZXMuVW5leHBlY3RlZEVPUyk7CisgICAgICAgIH0KKworICAgICAgICBp
ZiAodG9rZW4udHlwZSA9PT0gVG9rZW4uTnVtZXJpY0xpdGVyYWwpIHsKKyAgICAgICAgICAgIHRo
cm93RXJyb3IodG9rZW4sIE1lc3NhZ2VzLlVuZXhwZWN0ZWROdW1iZXIpOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKHRva2VuLnR5cGUgPT09IFRva2VuLlN0cmluZ0xpdGVyYWwpIHsKKyAgICAg
ICAgICAgIHRocm93RXJyb3IodG9rZW4sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRTdHJpbmcpOworICAg
ICAgICB9CisKKyAgICAgICAgaWYgKHRva2VuLnR5cGUgPT09IFRva2VuLklkZW50aWZpZXIpIHsK
KyAgICAgICAgICAgIHRocm93RXJyb3IodG9rZW4sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRJZGVudGlm
aWVyKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh0b2tlbi50eXBlID09PSBUb2tlbi5LZXl3
b3JkKSB7CisgICAgICAgICAgICBpZiAoaXNGdXR1cmVSZXNlcnZlZFdvcmQodG9rZW4udmFsdWUp
KSB7CisgICAgICAgICAgICAgICAgdGhyb3dFcnJvcih0b2tlbiwgTWVzc2FnZXMuVW5leHBlY3Rl
ZFJlc2VydmVkKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RyaWN0ICYmIGlzU3RyaWN0TW9k
ZVJlc2VydmVkV29yZCh0b2tlbi52YWx1ZSkpIHsKKyAgICAgICAgICAgICAgICB0aHJvd0Vycm9y
VG9sZXJhbnQodG9rZW4sIE1lc3NhZ2VzLlN0cmljdFJlc2VydmVkV29yZCk7CisgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhyb3dFcnJvcih0b2tl
biwgTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuLCB0b2tlbi52YWx1ZSk7CisgICAgICAgIH0KKwor
ICAgICAgICAvLyBCb29sZWFuTGl0ZXJhbCwgTnVsbExpdGVyYWwsIG9yIFB1bmN0dWF0b3IuCisg
ICAgICAgIHRocm93RXJyb3IodG9rZW4sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgdG9rZW4u
dmFsdWUpOworICAgIH0KKworICAgIC8vIEV4cGVjdCB0aGUgbmV4dCB0b2tlbiB0byBtYXRjaCB0
aGUgc3BlY2lmaWVkIHB1bmN0dWF0b3IuCisgICAgLy8gSWYgbm90LCBhbiBleGNlcHRpb24gd2ls
bCBiZSB0aHJvd24uCisKKyAgICBmdW5jdGlvbiBleHBlY3QodmFsdWUpIHsKKyAgICAgICAgdmFy
IHRva2VuID0gbGV4KCk7CisgICAgICAgIGlmICh0b2tlbi50eXBlICE9PSBUb2tlbi5QdW5jdHVh
dG9yIHx8IHRva2VuLnZhbHVlICE9PSB2YWx1ZSkgeworICAgICAgICAgICAgdGhyb3dVbmV4cGVj
dGVkKHRva2VuKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIEV4cGVjdCB0aGUgbmV4dCB0
b2tlbiB0byBtYXRjaCB0aGUgc3BlY2lmaWVkIGtleXdvcmQuCisgICAgLy8gSWYgbm90LCBhbiBl
eGNlcHRpb24gd2lsbCBiZSB0aHJvd24uCisKKyAgICBmdW5jdGlvbiBleHBlY3RLZXl3b3JkKGtl
eXdvcmQpIHsKKyAgICAgICAgdmFyIHRva2VuID0gbGV4KCk7CisgICAgICAgIGlmICh0b2tlbi50
eXBlICE9PSBUb2tlbi5LZXl3b3JkIHx8IHRva2VuLnZhbHVlICE9PSBrZXl3b3JkKSB7CisgICAg
ICAgICAgICB0aHJvd1VuZXhwZWN0ZWQodG9rZW4pOworICAgICAgICB9CisgICAgfQorCisgICAg
Ly8gUmV0dXJuIHRydWUgaWYgdGhlIG5leHQgdG9rZW4gbWF0Y2hlcyB0aGUgc3BlY2lmaWVkIHB1
bmN0dWF0b3IuCisKKyAgICBmdW5jdGlvbiBtYXRjaCh2YWx1ZSkgeworICAgICAgICByZXR1cm4g
bG9va2FoZWFkLnR5cGUgPT09IFRva2VuLlB1bmN0dWF0b3IgJiYgbG9va2FoZWFkLnZhbHVlID09
PSB2YWx1ZTsKKyAgICB9CisKKyAgICAvLyBSZXR1cm4gdHJ1ZSBpZiB0aGUgbmV4dCB0b2tlbiBt
YXRjaGVzIHRoZSBzcGVjaWZpZWQga2V5d29yZAorCisgICAgZnVuY3Rpb24gbWF0Y2hLZXl3b3Jk
KGtleXdvcmQpIHsKKyAgICAgICAgcmV0dXJuIGxvb2thaGVhZC50eXBlID09PSBUb2tlbi5LZXl3
b3JkICYmIGxvb2thaGVhZC52YWx1ZSA9PT0ga2V5d29yZDsKKyAgICB9CisKKyAgICAvLyBSZXR1
cm4gdHJ1ZSBpZiB0aGUgbmV4dCB0b2tlbiBpcyBhbiBhc3NpZ25tZW50IG9wZXJhdG9yCisKKyAg
ICBmdW5jdGlvbiBtYXRjaEFzc2lnbigpIHsKKyAgICAgICAgdmFyIG9wOworCisgICAgICAgIGlm
IChsb29rYWhlYWQudHlwZSAhPT0gVG9rZW4uUHVuY3R1YXRvcikgeworICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIG9wID0gbG9va2FoZWFkLnZhbHVlOworICAg
ICAgICByZXR1cm4gb3AgPT09ICc9JyB8fAorICAgICAgICAgICAgb3AgPT09ICcqPScgfHwKKyAg
ICAgICAgICAgIG9wID09PSAnLz0nIHx8CisgICAgICAgICAgICBvcCA9PT0gJyU9JyB8fAorICAg
ICAgICAgICAgb3AgPT09ICcrPScgfHwKKyAgICAgICAgICAgIG9wID09PSAnLT0nIHx8CisgICAg
ICAgICAgICBvcCA9PT0gJzw8PScgfHwKKyAgICAgICAgICAgIG9wID09PSAnPj49JyB8fAorICAg
ICAgICAgICAgb3AgPT09ICc+Pj49JyB8fAorICAgICAgICAgICAgb3AgPT09ICcmPScgfHwKKyAg
ICAgICAgICAgIG9wID09PSAnXj0nIHx8CisgICAgICAgICAgICBvcCA9PT0gJ3w9JzsKKyAgICB9
CisKKyAgICBmdW5jdGlvbiBjb25zdW1lU2VtaWNvbG9uKCkgeworICAgICAgICB2YXIgbGluZTsK
KworICAgICAgICAvLyBDYXRjaCB0aGUgdmVyeSBjb21tb24gY2FzZSBmaXJzdDogaW1tZWRpYXRl
bHkgYSBzZW1pY29sb24gKFUrMDAzQikuCisgICAgICAgIGlmIChzb3VyY2UuY2hhckNvZGVBdChp
bmRleCkgPT09IDB4M0IgfHwgbWF0Y2goJzsnKSkgeworICAgICAgICAgICAgbGV4KCk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBsaW5lID0gbGluZU51bWJlcjsK
KyAgICAgICAgc2tpcENvbW1lbnQoKTsKKyAgICAgICAgaWYgKGxpbmVOdW1iZXIgIT09IGxpbmUp
IHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChsb29rYWhl
YWQudHlwZSAhPT0gVG9rZW4uRU9GICYmICFtYXRjaCgnfScpKSB7CisgICAgICAgICAgICB0aHJv
d1VuZXhwZWN0ZWQobG9va2FoZWFkKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIFJldHVy
biB0cnVlIGlmIHByb3ZpZGVkIGV4cHJlc3Npb24gaXMgTGVmdEhhbmRTaWRlRXhwcmVzc2lvbgor
CisgICAgZnVuY3Rpb24gaXNMZWZ0SGFuZFNpZGUoZXhwcikgeworICAgICAgICByZXR1cm4gZXhw
ci50eXBlID09PSBTeW50YXguSWRlbnRpZmllciB8fCBleHByLnR5cGUgPT09IFN5bnRheC5NZW1i
ZXJFeHByZXNzaW9uOworICAgIH0KKworICAgIC8vIDExLjEuNCBBcnJheSBJbml0aWFsaXNlcgor
CisgICAgZnVuY3Rpb24gcGFyc2VBcnJheUluaXRpYWxpc2VyKCkgeworICAgICAgICB2YXIgZWxl
bWVudHMgPSBbXSwgc3RhcnRUb2tlbjsKKworICAgICAgICBzdGFydFRva2VuID0gbG9va2FoZWFk
OworICAgICAgICBleHBlY3QoJ1snKTsKKworICAgICAgICB3aGlsZSAoIW1hdGNoKCddJykpIHsK
KyAgICAgICAgICAgIGlmIChtYXRjaCgnLCcpKSB7CisgICAgICAgICAgICAgICAgbGV4KCk7Cisg
ICAgICAgICAgICAgICAgZWxlbWVudHMucHVzaChudWxsKTsKKyAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgZWxlbWVudHMucHVzaChwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9u
KCkpOworCisgICAgICAgICAgICAgICAgaWYgKCFtYXRjaCgnXScpKSB7CisgICAgICAgICAgICAg
ICAgICAgIGV4cGVjdCgnLCcpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorCisgICAgICAgIGxleCgpOworCisgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5tYXJr
RW5kKGRlbGVnYXRlLmNyZWF0ZUFycmF5RXhwcmVzc2lvbihlbGVtZW50cyksIHN0YXJ0VG9rZW4p
OworICAgIH0KKworICAgIC8vIDExLjEuNSBPYmplY3QgSW5pdGlhbGlzZXIKKworICAgIGZ1bmN0
aW9uIHBhcnNlUHJvcGVydHlGdW5jdGlvbihwYXJhbSwgZmlyc3QpIHsKKyAgICAgICAgdmFyIHBy
ZXZpb3VzU3RyaWN0LCBib2R5LCBzdGFydFRva2VuOworCisgICAgICAgIHByZXZpb3VzU3RyaWN0
ID0gc3RyaWN0OworICAgICAgICBzdGFydFRva2VuID0gbG9va2FoZWFkOworICAgICAgICBib2R5
ID0gcGFyc2VGdW5jdGlvblNvdXJjZUVsZW1lbnRzKCk7CisgICAgICAgIGlmIChmaXJzdCAmJiBz
dHJpY3QgJiYgaXNSZXN0cmljdGVkV29yZChwYXJhbVswXS5uYW1lKSkgeworICAgICAgICAgICAg
dGhyb3dFcnJvclRvbGVyYW50KGZpcnN0LCBNZXNzYWdlcy5TdHJpY3RQYXJhbU5hbWUpOworICAg
ICAgICB9CisgICAgICAgIHN0cmljdCA9IHByZXZpb3VzU3RyaWN0OworICAgICAgICByZXR1cm4g
ZGVsZWdhdGUubWFya0VuZChkZWxlZ2F0ZS5jcmVhdGVGdW5jdGlvbkV4cHJlc3Npb24obnVsbCwg
cGFyYW0sIFtdLCBib2R5KSwgc3RhcnRUb2tlbik7CisgICAgfQorCisgICAgZnVuY3Rpb24gcGFy
c2VPYmplY3RQcm9wZXJ0eUtleSgpIHsKKyAgICAgICAgdmFyIHRva2VuLCBzdGFydFRva2VuOwor
CisgICAgICAgIHN0YXJ0VG9rZW4gPSBsb29rYWhlYWQ7CisgICAgICAgIHRva2VuID0gbGV4KCk7
CisKKyAgICAgICAgLy8gTm90ZTogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgb25seSBmcm9tIHBh
cnNlT2JqZWN0UHJvcGVydHkoKSwgd2hlcmUKKyAgICAgICAgLy8gRU9GIGFuZCBQdW5jdHVhdG9y
IHRva2VucyBhcmUgYWxyZWFkeSBmaWx0ZXJlZCBvdXQuCisKKyAgICAgICAgaWYgKHRva2VuLnR5
cGUgPT09IFRva2VuLlN0cmluZ0xpdGVyYWwgfHwgdG9rZW4udHlwZSA9PT0gVG9rZW4uTnVtZXJp
Y0xpdGVyYWwpIHsKKyAgICAgICAgICAgIGlmIChzdHJpY3QgJiYgdG9rZW4ub2N0YWwpIHsKKyAg
ICAgICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQodG9rZW4sIE1lc3NhZ2VzLlN0cmljdE9j
dGFsTGl0ZXJhbCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gZGVsZWdhdGUu
bWFya0VuZChkZWxlZ2F0ZS5jcmVhdGVMaXRlcmFsKHRva2VuKSwgc3RhcnRUb2tlbik7CisgICAg
ICAgIH0KKworICAgICAgICByZXR1cm4gZGVsZWdhdGUubWFya0VuZChkZWxlZ2F0ZS5jcmVhdGVJ
ZGVudGlmaWVyKHRva2VuLnZhbHVlKSwgc3RhcnRUb2tlbik7CisgICAgfQorCisgICAgZnVuY3Rp
b24gcGFyc2VPYmplY3RQcm9wZXJ0eSgpIHsKKyAgICAgICAgdmFyIHRva2VuLCBrZXksIGlkLCB2
YWx1ZSwgcGFyYW0sIHN0YXJ0VG9rZW47CisKKyAgICAgICAgdG9rZW4gPSBsb29rYWhlYWQ7Cisg
ICAgICAgIHN0YXJ0VG9rZW4gPSBsb29rYWhlYWQ7CisKKyAgICAgICAgaWYgKHRva2VuLnR5cGUg
PT09IFRva2VuLklkZW50aWZpZXIpIHsKKworICAgICAgICAgICAgaWQgPSBwYXJzZU9iamVjdFBy
b3BlcnR5S2V5KCk7CisKKyAgICAgICAgICAgIC8vIFByb3BlcnR5IEFzc2lnbm1lbnQ6IEdldHRl
ciBhbmQgU2V0dGVyLgorCisgICAgICAgICAgICBpZiAodG9rZW4udmFsdWUgPT09ICdnZXQnICYm
ICFtYXRjaCgnOicpKSB7CisgICAgICAgICAgICAgICAga2V5ID0gcGFyc2VPYmplY3RQcm9wZXJ0
eUtleSgpOworICAgICAgICAgICAgICAgIGV4cGVjdCgnKCcpOworICAgICAgICAgICAgICAgIGV4
cGVjdCgnKScpOworICAgICAgICAgICAgICAgIHZhbHVlID0gcGFyc2VQcm9wZXJ0eUZ1bmN0aW9u
KFtdKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZGVsZWdhdGUubWFya0VuZChkZWxlZ2F0ZS5j
cmVhdGVQcm9wZXJ0eSgnZ2V0Jywga2V5LCB2YWx1ZSksIHN0YXJ0VG9rZW4pOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgaWYgKHRva2VuLnZhbHVlID09PSAnc2V0JyAmJiAhbWF0Y2goJzon
KSkgeworICAgICAgICAgICAgICAgIGtleSA9IHBhcnNlT2JqZWN0UHJvcGVydHlLZXkoKTsKKyAg
ICAgICAgICAgICAgICBleHBlY3QoJygnKTsKKyAgICAgICAgICAgICAgICB0b2tlbiA9IGxvb2th
aGVhZDsKKyAgICAgICAgICAgICAgICBpZiAodG9rZW4udHlwZSAhPT0gVG9rZW4uSWRlbnRpZmll
cikgeworICAgICAgICAgICAgICAgICAgICBleHBlY3QoJyknKTsKKyAgICAgICAgICAgICAgICAg
ICAgdGhyb3dFcnJvclRvbGVyYW50KHRva2VuLCBNZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW4sIHRv
a2VuLnZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBwYXJzZVByb3BlcnR5RnVu
Y3Rpb24oW10pOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAg
IHBhcmFtID0gWyBwYXJzZVZhcmlhYmxlSWRlbnRpZmllcigpIF07CisgICAgICAgICAgICAgICAg
ICAgIGV4cGVjdCgnKScpOworICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHBhcnNlUHJvcGVy
dHlGdW5jdGlvbihwYXJhbSwgdG9rZW4pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICByZXR1cm4gZGVsZWdhdGUubWFya0VuZChkZWxlZ2F0ZS5jcmVhdGVQcm9wZXJ0eSgnc2V0
Jywga2V5LCB2YWx1ZSksIHN0YXJ0VG9rZW4pOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
ZXhwZWN0KCc6Jyk7CisgICAgICAgICAgICB2YWx1ZSA9IHBhcnNlQXNzaWdubWVudEV4cHJlc3Np
b24oKTsKKyAgICAgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5tYXJrRW5kKGRlbGVnYXRlLmNyZWF0
ZVByb3BlcnR5KCdpbml0JywgaWQsIHZhbHVlKSwgc3RhcnRUb2tlbik7CisgICAgICAgIH0KKyAg
ICAgICAgaWYgKHRva2VuLnR5cGUgPT09IFRva2VuLkVPRiB8fCB0b2tlbi50eXBlID09PSBUb2tl
bi5QdW5jdHVhdG9yKSB7CisgICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWQodG9rZW4pOworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAga2V5ID0gcGFyc2VPYmplY3RQcm9wZXJ0eUtleSgp
OworICAgICAgICAgICAgZXhwZWN0KCc6Jyk7CisgICAgICAgICAgICB2YWx1ZSA9IHBhcnNlQXNz
aWdubWVudEV4cHJlc3Npb24oKTsKKyAgICAgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5tYXJrRW5k
KGRlbGVnYXRlLmNyZWF0ZVByb3BlcnR5KCdpbml0Jywga2V5LCB2YWx1ZSksIHN0YXJ0VG9rZW4p
OworICAgICAgICB9CisgICAgfQorCisgICAgZnVuY3Rpb24gcGFyc2VPYmplY3RJbml0aWFsaXNl
cigpIHsKKyAgICAgICAgdmFyIHByb3BlcnRpZXMgPSBbXSwgcHJvcGVydHksIG5hbWUsIGtleSwg
a2luZCwgbWFwID0ge30sIHRvU3RyaW5nID0gU3RyaW5nLCBzdGFydFRva2VuOworCisgICAgICAg
IHN0YXJ0VG9rZW4gPSBsb29rYWhlYWQ7CisKKyAgICAgICAgZXhwZWN0KCd7Jyk7CisKKyAgICAg
ICAgd2hpbGUgKCFtYXRjaCgnfScpKSB7CisgICAgICAgICAgICBwcm9wZXJ0eSA9IHBhcnNlT2Jq
ZWN0UHJvcGVydHkoKTsKKworICAgICAgICAgICAgaWYgKHByb3BlcnR5LmtleS50eXBlID09PSBT
eW50YXguSWRlbnRpZmllcikgeworICAgICAgICAgICAgICAgIG5hbWUgPSBwcm9wZXJ0eS5rZXku
bmFtZTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgbmFtZSA9IHRvU3Ry
aW5nKHByb3BlcnR5LmtleS52YWx1ZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBraW5k
ID0gKHByb3BlcnR5LmtpbmQgPT09ICdpbml0JykgPyBQcm9wZXJ0eUtpbmQuRGF0YSA6IChwcm9w
ZXJ0eS5raW5kID09PSAnZ2V0JykgPyBQcm9wZXJ0eUtpbmQuR2V0IDogUHJvcGVydHlLaW5kLlNl
dDsKKworICAgICAgICAgICAga2V5ID0gJyQnICsgbmFtZTsKKyAgICAgICAgICAgIGlmIChPYmpl
Y3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobWFwLCBrZXkpKSB7CisgICAgICAgICAg
ICAgICAgaWYgKG1hcFtrZXldID09PSBQcm9wZXJ0eUtpbmQuRGF0YSkgeworICAgICAgICAgICAg
ICAgICAgICBpZiAoc3RyaWN0ICYmIGtpbmQgPT09IFByb3BlcnR5S2luZC5EYXRhKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQoe30sIE1lc3NhZ2VzLlN0cmlj
dER1cGxpY2F0ZVByb3BlcnR5KTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChraW5k
ICE9PSBQcm9wZXJ0eUtpbmQuRGF0YSkgeworICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dF
cnJvclRvbGVyYW50KHt9LCBNZXNzYWdlcy5BY2Nlc3NvckRhdGFQcm9wZXJ0eSk7CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
ICAgICBpZiAoa2luZCA9PT0gUHJvcGVydHlLaW5kLkRhdGEpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHRocm93RXJyb3JUb2xlcmFudCh7fSwgTWVzc2FnZXMuQWNjZXNzb3JEYXRhUHJvcGVy
dHkpOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1hcFtrZXldICYga2luZCkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KHt9LCBNZXNzYWdlcy5B
Y2Nlc3NvckdldFNldCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgbWFwW2tleV0gfD0ga2luZDsKKyAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgbWFwW2tleV0gPSBraW5kOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBwcm9wZXJ0aWVzLnB1c2gocHJvcGVydHkpOworCisgICAgICAgICAgICBpZiAoIW1h
dGNoKCd9JykpIHsKKyAgICAgICAgICAgICAgICBleHBlY3QoJywnKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorCisgICAgICAgIGV4cGVjdCgnfScpOworCisgICAgICAgIHJldHVybiBkZWxl
Z2F0ZS5tYXJrRW5kKGRlbGVnYXRlLmNyZWF0ZU9iamVjdEV4cHJlc3Npb24ocHJvcGVydGllcyks
IHN0YXJ0VG9rZW4pOworICAgIH0KKworICAgIC8vIDExLjEuNiBUaGUgR3JvdXBpbmcgT3BlcmF0
b3IKKworICAgIGZ1bmN0aW9uIHBhcnNlR3JvdXBFeHByZXNzaW9uKCkgeworICAgICAgICB2YXIg
ZXhwcjsKKworICAgICAgICBleHBlY3QoJygnKTsKKworICAgICAgICBleHByID0gcGFyc2VFeHBy
ZXNzaW9uKCk7CisKKyAgICAgICAgZXhwZWN0KCcpJyk7CisKKyAgICAgICAgcmV0dXJuIGV4cHI7
CisgICAgfQorCisKKyAgICAvLyAxMS4xIFByaW1hcnkgRXhwcmVzc2lvbnMKKworICAgIGZ1bmN0
aW9uIHBhcnNlUHJpbWFyeUV4cHJlc3Npb24oKSB7CisgICAgICAgIHZhciB0eXBlLCB0b2tlbiwg
ZXhwciwgc3RhcnRUb2tlbjsKKworICAgICAgICBpZiAobWF0Y2goJygnKSkgeworICAgICAgICAg
ICAgcmV0dXJuIHBhcnNlR3JvdXBFeHByZXNzaW9uKCk7CisgICAgICAgIH0KKworICAgICAgICBp
ZiAobWF0Y2goJ1snKSkgeworICAgICAgICAgICAgcmV0dXJuIHBhcnNlQXJyYXlJbml0aWFsaXNl
cigpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1hdGNoKCd7JykpIHsKKyAgICAgICAgICAg
IHJldHVybiBwYXJzZU9iamVjdEluaXRpYWxpc2VyKCk7CisgICAgICAgIH0KKworICAgICAgICB0
eXBlID0gbG9va2FoZWFkLnR5cGU7CisgICAgICAgIHN0YXJ0VG9rZW4gPSBsb29rYWhlYWQ7CisK
KyAgICAgICAgaWYgKHR5cGUgPT09IFRva2VuLklkZW50aWZpZXIpIHsKKyAgICAgICAgICAgIGV4
cHIgPSAgZGVsZWdhdGUuY3JlYXRlSWRlbnRpZmllcihsZXgoKS52YWx1ZSk7CisgICAgICAgIH0g
ZWxzZSBpZiAodHlwZSA9PT0gVG9rZW4uU3RyaW5nTGl0ZXJhbCB8fCB0eXBlID09PSBUb2tlbi5O
dW1lcmljTGl0ZXJhbCkgeworICAgICAgICAgICAgaWYgKHN0cmljdCAmJiBsb29rYWhlYWQub2N0
YWwpIHsKKyAgICAgICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQobG9va2FoZWFkLCBNZXNz
YWdlcy5TdHJpY3RPY3RhbExpdGVyYWwpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZXhw
ciA9IGRlbGVnYXRlLmNyZWF0ZUxpdGVyYWwobGV4KCkpOworICAgICAgICB9IGVsc2UgaWYgKHR5
cGUgPT09IFRva2VuLktleXdvcmQpIHsKKyAgICAgICAgICAgIGlmIChtYXRjaEtleXdvcmQoJ2Z1
bmN0aW9uJykpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VGdW5jdGlvbkV4cHJlc3Np
b24oKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChtYXRjaEtleXdvcmQoJ3RoaXMn
KSkgeworICAgICAgICAgICAgICAgIGxleCgpOworICAgICAgICAgICAgICAgIGV4cHIgPSBkZWxl
Z2F0ZS5jcmVhdGVUaGlzRXhwcmVzc2lvbigpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWQobGV4KCkpOworICAgICAgICAgICAgfQorICAgICAg
ICB9IGVsc2UgaWYgKHR5cGUgPT09IFRva2VuLkJvb2xlYW5MaXRlcmFsKSB7CisgICAgICAgICAg
ICB0b2tlbiA9IGxleCgpOworICAgICAgICAgICAgdG9rZW4udmFsdWUgPSAodG9rZW4udmFsdWUg
PT09ICd0cnVlJyk7CisgICAgICAgICAgICBleHByID0gZGVsZWdhdGUuY3JlYXRlTGl0ZXJhbCh0
b2tlbik7CisgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gVG9rZW4uTnVsbExpdGVyYWwpIHsK
KyAgICAgICAgICAgIHRva2VuID0gbGV4KCk7CisgICAgICAgICAgICB0b2tlbi52YWx1ZSA9IG51
bGw7CisgICAgICAgICAgICBleHByID0gZGVsZWdhdGUuY3JlYXRlTGl0ZXJhbCh0b2tlbik7Cisg
ICAgICAgIH0gZWxzZSBpZiAobWF0Y2goJy8nKSB8fCBtYXRjaCgnLz0nKSkgeworICAgICAgICAg
ICAgaWYgKHR5cGVvZiBleHRyYS50b2tlbnMgIT09ICd1bmRlZmluZWQnKSB7CisgICAgICAgICAg
ICAgICAgZXhwciA9IGRlbGVnYXRlLmNyZWF0ZUxpdGVyYWwoY29sbGVjdFJlZ2V4KCkpOworICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBleHByID0gZGVsZWdhdGUuY3JlYXRl
TGl0ZXJhbChzY2FuUmVnRXhwKCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcGVlaygp
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdGhyb3dVbmV4cGVjdGVkKGxleCgpKTsK
KyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5tYXJrRW5kKGV4cHIsIHN0YXJ0
VG9rZW4pOworICAgIH0KKworICAgIC8vIDExLjIgTGVmdC1IYW5kLVNpZGUgRXhwcmVzc2lvbnMK
KworICAgIGZ1bmN0aW9uIHBhcnNlQXJndW1lbnRzKCkgeworICAgICAgICB2YXIgYXJncyA9IFtd
OworCisgICAgICAgIGV4cGVjdCgnKCcpOworCisgICAgICAgIGlmICghbWF0Y2goJyknKSkgewor
ICAgICAgICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgYXJn
cy5wdXNoKHBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24oKSk7CisgICAgICAgICAgICAgICAgaWYg
KG1hdGNoKCcpJykpIHsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIGV4cGVjdCgnLCcpOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisKKyAgICAgICAgZXhwZWN0KCcpJyk7CisKKyAgICAgICAgcmV0dXJuIGFyZ3M7CisgICAg
fQorCisgICAgZnVuY3Rpb24gcGFyc2VOb25Db21wdXRlZFByb3BlcnR5KCkgeworICAgICAgICB2
YXIgdG9rZW4sIHN0YXJ0VG9rZW47CisKKyAgICAgICAgc3RhcnRUb2tlbiA9IGxvb2thaGVhZDsK
KyAgICAgICAgdG9rZW4gPSBsZXgoKTsKKworICAgICAgICBpZiAoIWlzSWRlbnRpZmllck5hbWUo
dG9rZW4pKSB7CisgICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWQodG9rZW4pOworICAgICAgICB9
CisKKyAgICAgICAgcmV0dXJuIGRlbGVnYXRlLm1hcmtFbmQoZGVsZWdhdGUuY3JlYXRlSWRlbnRp
Zmllcih0b2tlbi52YWx1ZSksIHN0YXJ0VG9rZW4pOworICAgIH0KKworICAgIGZ1bmN0aW9uIHBh
cnNlTm9uQ29tcHV0ZWRNZW1iZXIoKSB7CisgICAgICAgIGV4cGVjdCgnLicpOworCisgICAgICAg
IHJldHVybiBwYXJzZU5vbkNvbXB1dGVkUHJvcGVydHkoKTsKKyAgICB9CisKKyAgICBmdW5jdGlv
biBwYXJzZUNvbXB1dGVkTWVtYmVyKCkgeworICAgICAgICB2YXIgZXhwcjsKKworICAgICAgICBl
eHBlY3QoJ1snKTsKKworICAgICAgICBleHByID0gcGFyc2VFeHByZXNzaW9uKCk7CisKKyAgICAg
ICAgZXhwZWN0KCddJyk7CisKKyAgICAgICAgcmV0dXJuIGV4cHI7CisgICAgfQorCisgICAgZnVu
Y3Rpb24gcGFyc2VOZXdFeHByZXNzaW9uKCkgeworICAgICAgICB2YXIgY2FsbGVlLCBhcmdzLCBz
dGFydFRva2VuOworCisgICAgICAgIHN0YXJ0VG9rZW4gPSBsb29rYWhlYWQ7CisgICAgICAgIGV4
cGVjdEtleXdvcmQoJ25ldycpOworICAgICAgICBjYWxsZWUgPSBwYXJzZUxlZnRIYW5kU2lkZUV4
cHJlc3Npb24oKTsKKyAgICAgICAgYXJncyA9IG1hdGNoKCcoJykgPyBwYXJzZUFyZ3VtZW50cygp
IDogW107CisKKyAgICAgICAgcmV0dXJuIGRlbGVnYXRlLm1hcmtFbmQoZGVsZWdhdGUuY3JlYXRl
TmV3RXhwcmVzc2lvbihjYWxsZWUsIGFyZ3MpLCBzdGFydFRva2VuKTsKKyAgICB9CisKKyAgICBm
dW5jdGlvbiBwYXJzZUxlZnRIYW5kU2lkZUV4cHJlc3Npb25BbGxvd0NhbGwoKSB7CisgICAgICAg
IHZhciBwcmV2aW91c0FsbG93SW4sIGV4cHIsIGFyZ3MsIHByb3BlcnR5LCBzdGFydFRva2VuOwor
CisgICAgICAgIHN0YXJ0VG9rZW4gPSBsb29rYWhlYWQ7CisKKyAgICAgICAgcHJldmlvdXNBbGxv
d0luID0gc3RhdGUuYWxsb3dJbjsKKyAgICAgICAgc3RhdGUuYWxsb3dJbiA9IHRydWU7CisgICAg
ICAgIGV4cHIgPSBtYXRjaEtleXdvcmQoJ25ldycpID8gcGFyc2VOZXdFeHByZXNzaW9uKCkgOiBw
YXJzZVByaW1hcnlFeHByZXNzaW9uKCk7CisgICAgICAgIHN0YXRlLmFsbG93SW4gPSBwcmV2aW91
c0FsbG93SW47CisKKyAgICAgICAgZm9yICg7OykgeworICAgICAgICAgICAgaWYgKG1hdGNoKCcu
JykpIHsKKyAgICAgICAgICAgICAgICBwcm9wZXJ0eSA9IHBhcnNlTm9uQ29tcHV0ZWRNZW1iZXIo
KTsKKyAgICAgICAgICAgICAgICBleHByID0gZGVsZWdhdGUuY3JlYXRlTWVtYmVyRXhwcmVzc2lv
bignLicsIGV4cHIsIHByb3BlcnR5KTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAobWF0Y2goJygn
KSkgeworICAgICAgICAgICAgICAgIGFyZ3MgPSBwYXJzZUFyZ3VtZW50cygpOworICAgICAgICAg
ICAgICAgIGV4cHIgPSBkZWxlZ2F0ZS5jcmVhdGVDYWxsRXhwcmVzc2lvbihleHByLCBhcmdzKTsK
KyAgICAgICAgICAgIH0gZWxzZSBpZiAobWF0Y2goJ1snKSkgeworICAgICAgICAgICAgICAgIHBy
b3BlcnR5ID0gcGFyc2VDb21wdXRlZE1lbWJlcigpOworICAgICAgICAgICAgICAgIGV4cHIgPSBk
ZWxlZ2F0ZS5jcmVhdGVNZW1iZXJFeHByZXNzaW9uKCdbJywgZXhwciwgcHJvcGVydHkpOworICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGRlbGVnYXRlLm1hcmtFbmQoZXhwciwgc3RhcnRUb2tlbik7CisgICAgICAg
IH0KKworICAgICAgICByZXR1cm4gZXhwcjsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBwYXJzZUxl
ZnRIYW5kU2lkZUV4cHJlc3Npb24oKSB7CisgICAgICAgIHZhciBwcmV2aW91c0FsbG93SW4sIGV4
cHIsIHByb3BlcnR5LCBzdGFydFRva2VuOworCisgICAgICAgIHN0YXJ0VG9rZW4gPSBsb29rYWhl
YWQ7CisKKyAgICAgICAgcHJldmlvdXNBbGxvd0luID0gc3RhdGUuYWxsb3dJbjsKKyAgICAgICAg
ZXhwciA9IG1hdGNoS2V5d29yZCgnbmV3JykgPyBwYXJzZU5ld0V4cHJlc3Npb24oKSA6IHBhcnNl
UHJpbWFyeUV4cHJlc3Npb24oKTsKKyAgICAgICAgc3RhdGUuYWxsb3dJbiA9IHByZXZpb3VzQWxs
b3dJbjsKKworICAgICAgICB3aGlsZSAobWF0Y2goJy4nKSB8fCBtYXRjaCgnWycpKSB7CisgICAg
ICAgICAgICBpZiAobWF0Y2goJ1snKSkgeworICAgICAgICAgICAgICAgIHByb3BlcnR5ID0gcGFy
c2VDb21wdXRlZE1lbWJlcigpOworICAgICAgICAgICAgICAgIGV4cHIgPSBkZWxlZ2F0ZS5jcmVh
dGVNZW1iZXJFeHByZXNzaW9uKCdbJywgZXhwciwgcHJvcGVydHkpOworICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICBwcm9wZXJ0eSA9IHBhcnNlTm9uQ29tcHV0ZWRNZW1iZXIo
KTsKKyAgICAgICAgICAgICAgICBleHByID0gZGVsZWdhdGUuY3JlYXRlTWVtYmVyRXhwcmVzc2lv
bignLicsIGV4cHIsIHByb3BlcnR5KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRlbGVn
YXRlLm1hcmtFbmQoZXhwciwgc3RhcnRUb2tlbik7CisgICAgICAgIH0KKworICAgICAgICByZXR1
cm4gZXhwcjsKKyAgICB9CisKKyAgICAvLyAxMS4zIFBvc3RmaXggRXhwcmVzc2lvbnMKKworICAg
IGZ1bmN0aW9uIHBhcnNlUG9zdGZpeEV4cHJlc3Npb24oKSB7CisgICAgICAgIHZhciBleHByLCB0
b2tlbiwgc3RhcnRUb2tlbiA9IGxvb2thaGVhZDsKKworICAgICAgICBleHByID0gcGFyc2VMZWZ0
SGFuZFNpZGVFeHByZXNzaW9uQWxsb3dDYWxsKCk7CisKKyAgICAgICAgaWYgKGxvb2thaGVhZC50
eXBlID09PSBUb2tlbi5QdW5jdHVhdG9yKSB7CisgICAgICAgICAgICBpZiAoKG1hdGNoKCcrKycp
IHx8IG1hdGNoKCctLScpKSAmJiAhcGVla0xpbmVUZXJtaW5hdG9yKCkpIHsKKyAgICAgICAgICAg
ICAgICAvLyAxMS4zLjEsIDExLjMuMgorICAgICAgICAgICAgICAgIGlmIChzdHJpY3QgJiYgZXhw
ci50eXBlID09PSBTeW50YXguSWRlbnRpZmllciAmJiBpc1Jlc3RyaWN0ZWRXb3JkKGV4cHIubmFt
ZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KHt9LCBNZXNzYWdl
cy5TdHJpY3RMSFNQb3N0Zml4KTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAg
ICBpZiAoIWlzTGVmdEhhbmRTaWRlKGV4cHIpKSB7CisgICAgICAgICAgICAgICAgICAgIHRocm93
RXJyb3JUb2xlcmFudCh7fSwgTWVzc2FnZXMuSW52YWxpZExIU0luQXNzaWdubWVudCk7CisgICAg
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgdG9rZW4gPSBsZXgoKTsKKyAgICAgICAg
ICAgICAgICBleHByID0gZGVsZWdhdGUubWFya0VuZChkZWxlZ2F0ZS5jcmVhdGVQb3N0Zml4RXhw
cmVzc2lvbih0b2tlbi52YWx1ZSwgZXhwciksIHN0YXJ0VG9rZW4pOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGV4cHI7CisgICAgfQorCisgICAgLy8gMTEuNCBV
bmFyeSBPcGVyYXRvcnMKKworICAgIGZ1bmN0aW9uIHBhcnNlVW5hcnlFeHByZXNzaW9uKCkgewor
ICAgICAgICB2YXIgdG9rZW4sIGV4cHIsIHN0YXJ0VG9rZW47CisKKyAgICAgICAgaWYgKGxvb2th
aGVhZC50eXBlICE9PSBUb2tlbi5QdW5jdHVhdG9yICYmIGxvb2thaGVhZC50eXBlICE9PSBUb2tl
bi5LZXl3b3JkKSB7CisgICAgICAgICAgICBleHByID0gcGFyc2VQb3N0Zml4RXhwcmVzc2lvbigp
OworICAgICAgICB9IGVsc2UgaWYgKG1hdGNoKCcrKycpIHx8IG1hdGNoKCctLScpKSB7CisgICAg
ICAgICAgICBzdGFydFRva2VuID0gbG9va2FoZWFkOworICAgICAgICAgICAgdG9rZW4gPSBsZXgo
KTsKKyAgICAgICAgICAgIGV4cHIgPSBwYXJzZVVuYXJ5RXhwcmVzc2lvbigpOworICAgICAgICAg
ICAgLy8gMTEuNC40LCAxMS40LjUKKyAgICAgICAgICAgIGlmIChzdHJpY3QgJiYgZXhwci50eXBl
ID09PSBTeW50YXguSWRlbnRpZmllciAmJiBpc1Jlc3RyaWN0ZWRXb3JkKGV4cHIubmFtZSkpIHsK
KyAgICAgICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQoe30sIE1lc3NhZ2VzLlN0cmljdExI
U1ByZWZpeCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghaXNMZWZ0SGFuZFNp
ZGUoZXhwcikpIHsKKyAgICAgICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQoe30sIE1lc3Nh
Z2VzLkludmFsaWRMSFNJbkFzc2lnbm1lbnQpOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBleHByID0gZGVsZWdhdGUuY3JlYXRlVW5hcnlFeHByZXNzaW9uKHRva2VuLnZhbHVlLCBleHBy
KTsKKyAgICAgICAgICAgIGV4cHIgPSBkZWxlZ2F0ZS5tYXJrRW5kKGV4cHIsIHN0YXJ0VG9rZW4p
OworICAgICAgICB9IGVsc2UgaWYgKG1hdGNoKCcrJykgfHwgbWF0Y2goJy0nKSB8fCBtYXRjaCgn
ficpIHx8IG1hdGNoKCchJykpIHsKKyAgICAgICAgICAgIHN0YXJ0VG9rZW4gPSBsb29rYWhlYWQ7
CisgICAgICAgICAgICB0b2tlbiA9IGxleCgpOworICAgICAgICAgICAgZXhwciA9IHBhcnNlVW5h
cnlFeHByZXNzaW9uKCk7CisgICAgICAgICAgICBleHByID0gZGVsZWdhdGUuY3JlYXRlVW5hcnlF
eHByZXNzaW9uKHRva2VuLnZhbHVlLCBleHByKTsKKyAgICAgICAgICAgIGV4cHIgPSBkZWxlZ2F0
ZS5tYXJrRW5kKGV4cHIsIHN0YXJ0VG9rZW4pOworICAgICAgICB9IGVsc2UgaWYgKG1hdGNoS2V5
d29yZCgnZGVsZXRlJykgfHwgbWF0Y2hLZXl3b3JkKCd2b2lkJykgfHwgbWF0Y2hLZXl3b3JkKCd0
eXBlb2YnKSkgeworICAgICAgICAgICAgc3RhcnRUb2tlbiA9IGxvb2thaGVhZDsKKyAgICAgICAg
ICAgIHRva2VuID0gbGV4KCk7CisgICAgICAgICAgICBleHByID0gcGFyc2VVbmFyeUV4cHJlc3Np
b24oKTsKKyAgICAgICAgICAgIGV4cHIgPSBkZWxlZ2F0ZS5jcmVhdGVVbmFyeUV4cHJlc3Npb24o
dG9rZW4udmFsdWUsIGV4cHIpOworICAgICAgICAgICAgZXhwciA9IGRlbGVnYXRlLm1hcmtFbmQo
ZXhwciwgc3RhcnRUb2tlbik7CisgICAgICAgICAgICBpZiAoc3RyaWN0ICYmIGV4cHIub3BlcmF0
b3IgPT09ICdkZWxldGUnICYmIGV4cHIuYXJndW1lbnQudHlwZSA9PT0gU3ludGF4LklkZW50aWZp
ZXIpIHsKKyAgICAgICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQoe30sIE1lc3NhZ2VzLlN0
cmljdERlbGV0ZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICBleHByID0gcGFyc2VQb3N0Zml4RXhwcmVzc2lvbigpOworICAgICAgICB9CisKKyAgICAgICAg
cmV0dXJuIGV4cHI7CisgICAgfQorCisgICAgZnVuY3Rpb24gYmluYXJ5UHJlY2VkZW5jZSh0b2tl
biwgYWxsb3dJbikgeworICAgICAgICB2YXIgcHJlYyA9IDA7CisKKyAgICAgICAgaWYgKHRva2Vu
LnR5cGUgIT09IFRva2VuLlB1bmN0dWF0b3IgJiYgdG9rZW4udHlwZSAhPT0gVG9rZW4uS2V5d29y
ZCkgeworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKworICAgICAgICBzd2l0Y2gg
KHRva2VuLnZhbHVlKSB7CisgICAgICAgIGNhc2UgJ3x8JzoKKyAgICAgICAgICAgIHByZWMgPSAx
OworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSAnJiYnOgorICAgICAgICAgICAg
cHJlYyA9IDI7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlICd8JzoKKyAgICAg
ICAgICAgIHByZWMgPSAzOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSAnXic6
CisgICAgICAgICAgICBwcmVjID0gNDsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNh
c2UgJyYnOgorICAgICAgICAgICAgcHJlYyA9IDU7CisgICAgICAgICAgICBicmVhazsKKworICAg
ICAgICBjYXNlICc9PSc6CisgICAgICAgIGNhc2UgJyE9JzoKKyAgICAgICAgY2FzZSAnPT09JzoK
KyAgICAgICAgY2FzZSAnIT09JzoKKyAgICAgICAgICAgIHByZWMgPSA2OworICAgICAgICAgICAg
YnJlYWs7CisKKyAgICAgICAgY2FzZSAnPCc6CisgICAgICAgIGNhc2UgJz4nOgorICAgICAgICBj
YXNlICc8PSc6CisgICAgICAgIGNhc2UgJz49JzoKKyAgICAgICAgY2FzZSAnaW5zdGFuY2VvZic6
CisgICAgICAgICAgICBwcmVjID0gNzsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNh
c2UgJ2luJzoKKyAgICAgICAgICAgIHByZWMgPSBhbGxvd0luID8gNyA6IDA7CisgICAgICAgICAg
ICBicmVhazsKKworICAgICAgICBjYXNlICc8PCc6CisgICAgICAgIGNhc2UgJz4+JzoKKyAgICAg
ICAgY2FzZSAnPj4+JzoKKyAgICAgICAgICAgIHByZWMgPSA4OworICAgICAgICAgICAgYnJlYWs7
CisKKyAgICAgICAgY2FzZSAnKyc6CisgICAgICAgIGNhc2UgJy0nOgorICAgICAgICAgICAgcHJl
YyA9IDk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlICcqJzoKKyAgICAgICAg
Y2FzZSAnLyc6CisgICAgICAgIGNhc2UgJyUnOgorICAgICAgICAgICAgcHJlYyA9IDExOworICAg
ICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHByZWM7CisgICAgfQorCisgICAgLy8gMTEuNSBN
dWx0aXBsaWNhdGl2ZSBPcGVyYXRvcnMKKyAgICAvLyAxMS42IEFkZGl0aXZlIE9wZXJhdG9ycwor
ICAgIC8vIDExLjcgQml0d2lzZSBTaGlmdCBPcGVyYXRvcnMKKyAgICAvLyAxMS44IFJlbGF0aW9u
YWwgT3BlcmF0b3JzCisgICAgLy8gMTEuOSBFcXVhbGl0eSBPcGVyYXRvcnMKKyAgICAvLyAxMS4x
MCBCaW5hcnkgQml0d2lzZSBPcGVyYXRvcnMKKyAgICAvLyAxMS4xMSBCaW5hcnkgTG9naWNhbCBP
cGVyYXRvcnMKKworICAgIGZ1bmN0aW9uIHBhcnNlQmluYXJ5RXhwcmVzc2lvbigpIHsKKyAgICAg
ICAgdmFyIG1hcmtlciwgbWFya2VycywgZXhwciwgdG9rZW4sIHByZWMsIHN0YWNrLCByaWdodCwg
b3BlcmF0b3IsIGxlZnQsIGk7CisKKyAgICAgICAgbWFya2VyID0gbG9va2FoZWFkOworICAgICAg
ICBsZWZ0ID0gcGFyc2VVbmFyeUV4cHJlc3Npb24oKTsKKworICAgICAgICB0b2tlbiA9IGxvb2th
aGVhZDsKKyAgICAgICAgcHJlYyA9IGJpbmFyeVByZWNlZGVuY2UodG9rZW4sIHN0YXRlLmFsbG93
SW4pOworICAgICAgICBpZiAocHJlYyA9PT0gMCkgeworICAgICAgICAgICAgcmV0dXJuIGxlZnQ7
CisgICAgICAgIH0KKyAgICAgICAgdG9rZW4ucHJlYyA9IHByZWM7CisgICAgICAgIGxleCgpOwor
CisgICAgICAgIG1hcmtlcnMgPSBbbWFya2VyLCBsb29rYWhlYWRdOworICAgICAgICByaWdodCA9
IHBhcnNlVW5hcnlFeHByZXNzaW9uKCk7CisKKyAgICAgICAgc3RhY2sgPSBbbGVmdCwgdG9rZW4s
IHJpZ2h0XTsKKworICAgICAgICB3aGlsZSAoKHByZWMgPSBiaW5hcnlQcmVjZWRlbmNlKGxvb2th
aGVhZCwgc3RhdGUuYWxsb3dJbikpID4gMCkgeworCisgICAgICAgICAgICAvLyBSZWR1Y2U6IG1h
a2UgYSBiaW5hcnkgZXhwcmVzc2lvbiBmcm9tIHRoZSB0aHJlZSB0b3Btb3N0IGVudHJpZXMuCisg
ICAgICAgICAgICB3aGlsZSAoKHN0YWNrLmxlbmd0aCA+IDIpICYmIChwcmVjIDw9IHN0YWNrW3N0
YWNrLmxlbmd0aCAtIDJdLnByZWMpKSB7CisgICAgICAgICAgICAgICAgcmlnaHQgPSBzdGFjay5w
b3AoKTsKKyAgICAgICAgICAgICAgICBvcGVyYXRvciA9IHN0YWNrLnBvcCgpLnZhbHVlOworICAg
ICAgICAgICAgICAgIGxlZnQgPSBzdGFjay5wb3AoKTsKKyAgICAgICAgICAgICAgICBleHByID0g
ZGVsZWdhdGUuY3JlYXRlQmluYXJ5RXhwcmVzc2lvbihvcGVyYXRvciwgbGVmdCwgcmlnaHQpOwor
ICAgICAgICAgICAgICAgIG1hcmtlcnMucG9wKCk7CisgICAgICAgICAgICAgICAgbWFya2VyID0g
bWFya2Vyc1ttYXJrZXJzLmxlbmd0aCAtIDFdOworICAgICAgICAgICAgICAgIGRlbGVnYXRlLm1h
cmtFbmQoZXhwciwgbWFya2VyKTsKKyAgICAgICAgICAgICAgICBzdGFjay5wdXNoKGV4cHIpOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBTaGlmdC4KKyAgICAgICAgICAgIHRva2Vu
ID0gbGV4KCk7CisgICAgICAgICAgICB0b2tlbi5wcmVjID0gcHJlYzsKKyAgICAgICAgICAgIHN0
YWNrLnB1c2godG9rZW4pOworICAgICAgICAgICAgbWFya2Vycy5wdXNoKGxvb2thaGVhZCk7Cisg
ICAgICAgICAgICBleHByID0gcGFyc2VVbmFyeUV4cHJlc3Npb24oKTsKKyAgICAgICAgICAgIHN0
YWNrLnB1c2goZXhwcik7CisgICAgICAgIH0KKworICAgICAgICAvLyBGaW5hbCByZWR1Y2UgdG8g
Y2xlYW4tdXAgdGhlIHN0YWNrLgorICAgICAgICBpID0gc3RhY2subGVuZ3RoIC0gMTsKKyAgICAg
ICAgZXhwciA9IHN0YWNrW2ldOworICAgICAgICBtYXJrZXJzLnBvcCgpOworICAgICAgICB3aGls
ZSAoaSA+IDEpIHsKKyAgICAgICAgICAgIGV4cHIgPSBkZWxlZ2F0ZS5jcmVhdGVCaW5hcnlFeHBy
ZXNzaW9uKHN0YWNrW2kgLSAxXS52YWx1ZSwgc3RhY2tbaSAtIDJdLCBleHByKTsKKyAgICAgICAg
ICAgIGkgLT0gMjsKKyAgICAgICAgICAgIG1hcmtlciA9IG1hcmtlcnMucG9wKCk7CisgICAgICAg
ICAgICBkZWxlZ2F0ZS5tYXJrRW5kKGV4cHIsIG1hcmtlcik7CisgICAgICAgIH0KKworICAgICAg
ICByZXR1cm4gZXhwcjsKKyAgICB9CisKKworICAgIC8vIDExLjEyIENvbmRpdGlvbmFsIE9wZXJh
dG9yCisKKyAgICBmdW5jdGlvbiBwYXJzZUNvbmRpdGlvbmFsRXhwcmVzc2lvbigpIHsKKyAgICAg
ICAgdmFyIGV4cHIsIHByZXZpb3VzQWxsb3dJbiwgY29uc2VxdWVudCwgYWx0ZXJuYXRlLCBzdGFy
dFRva2VuOworCisgICAgICAgIHN0YXJ0VG9rZW4gPSBsb29rYWhlYWQ7CisKKyAgICAgICAgZXhw
ciA9IHBhcnNlQmluYXJ5RXhwcmVzc2lvbigpOworCisgICAgICAgIGlmIChtYXRjaCgnPycpKSB7
CisgICAgICAgICAgICBsZXgoKTsKKyAgICAgICAgICAgIHByZXZpb3VzQWxsb3dJbiA9IHN0YXRl
LmFsbG93SW47CisgICAgICAgICAgICBzdGF0ZS5hbGxvd0luID0gdHJ1ZTsKKyAgICAgICAgICAg
IGNvbnNlcXVlbnQgPSBwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKCk7CisgICAgICAgICAgICBz
dGF0ZS5hbGxvd0luID0gcHJldmlvdXNBbGxvd0luOworICAgICAgICAgICAgZXhwZWN0KCc6Jyk7
CisgICAgICAgICAgICBhbHRlcm5hdGUgPSBwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKCk7CisK
KyAgICAgICAgICAgIGV4cHIgPSBkZWxlZ2F0ZS5jcmVhdGVDb25kaXRpb25hbEV4cHJlc3Npb24o
ZXhwciwgY29uc2VxdWVudCwgYWx0ZXJuYXRlKTsKKyAgICAgICAgICAgIGRlbGVnYXRlLm1hcmtF
bmQoZXhwciwgc3RhcnRUb2tlbik7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gZXhwcjsK
KyAgICB9CisKKyAgICAvLyAxMS4xMyBBc3NpZ25tZW50IE9wZXJhdG9ycworCisgICAgZnVuY3Rp
b24gcGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbigpIHsKKyAgICAgICAgdmFyIHRva2VuLCBsZWZ0
LCByaWdodCwgbm9kZSwgc3RhcnRUb2tlbjsKKworICAgICAgICB0b2tlbiA9IGxvb2thaGVhZDsK
KyAgICAgICAgc3RhcnRUb2tlbiA9IGxvb2thaGVhZDsKKworICAgICAgICBub2RlID0gbGVmdCA9
IHBhcnNlQ29uZGl0aW9uYWxFeHByZXNzaW9uKCk7CisKKyAgICAgICAgaWYgKG1hdGNoQXNzaWdu
KCkpIHsKKyAgICAgICAgICAgIC8vIExlZnRIYW5kU2lkZUV4cHJlc3Npb24KKyAgICAgICAgICAg
IGlmICghaXNMZWZ0SGFuZFNpZGUobGVmdCkpIHsKKyAgICAgICAgICAgICAgICB0aHJvd0Vycm9y
VG9sZXJhbnQoe30sIE1lc3NhZ2VzLkludmFsaWRMSFNJbkFzc2lnbm1lbnQpOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAvLyAxMS4xMy4xCisgICAgICAgICAgICBpZiAoc3RyaWN0ICYm
IGxlZnQudHlwZSA9PT0gU3ludGF4LklkZW50aWZpZXIgJiYgaXNSZXN0cmljdGVkV29yZChsZWZ0
Lm5hbWUpKSB7CisgICAgICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KHRva2VuLCBNZXNz
YWdlcy5TdHJpY3RMSFNBc3NpZ25tZW50KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
dG9rZW4gPSBsZXgoKTsKKyAgICAgICAgICAgIHJpZ2h0ID0gcGFyc2VBc3NpZ25tZW50RXhwcmVz
c2lvbigpOworICAgICAgICAgICAgbm9kZSA9IGRlbGVnYXRlLm1hcmtFbmQoZGVsZWdhdGUuY3Jl
YXRlQXNzaWdubWVudEV4cHJlc3Npb24odG9rZW4udmFsdWUsIGxlZnQsIHJpZ2h0KSwgc3RhcnRU
b2tlbik7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gbm9kZTsKKyAgICB9CisKKyAgICAv
LyAxMS4xNCBDb21tYSBPcGVyYXRvcgorCisgICAgZnVuY3Rpb24gcGFyc2VFeHByZXNzaW9uKCkg
eworICAgICAgICB2YXIgZXhwciwgc3RhcnRUb2tlbiA9IGxvb2thaGVhZDsKKworICAgICAgICBl
eHByID0gcGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbigpOworCisgICAgICAgIGlmIChtYXRjaCgn
LCcpKSB7CisgICAgICAgICAgICBleHByID0gZGVsZWdhdGUuY3JlYXRlU2VxdWVuY2VFeHByZXNz
aW9uKFsgZXhwciBdKTsKKworICAgICAgICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKCFtYXRjaCgnLCcpKSB7CisgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBsZXgoKTsKKyAgICAgICAg
ICAgICAgICBleHByLmV4cHJlc3Npb25zLnB1c2gocGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbigp
KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZGVsZWdhdGUubWFya0VuZChleHByLCBz
dGFydFRva2VuKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBleHByOworICAgIH0KKwor
ICAgIC8vIDEyLjEgQmxvY2sKKworICAgIGZ1bmN0aW9uIHBhcnNlU3RhdGVtZW50TGlzdCgpIHsK
KyAgICAgICAgdmFyIGxpc3QgPSBbXSwKKyAgICAgICAgICAgIHN0YXRlbWVudDsKKworICAgICAg
ICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHsKKyAgICAgICAgICAgIGlmIChtYXRjaCgnfScpKSB7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzdGF0
ZW1lbnQgPSBwYXJzZVNvdXJjZUVsZW1lbnQoKTsKKyAgICAgICAgICAgIGlmICh0eXBlb2Ygc3Rh
dGVtZW50ID09PSAndW5kZWZpbmVkJykgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgbGlzdC5wdXNoKHN0YXRlbWVudCk7CisgICAgICAgIH0KKwor
ICAgICAgICByZXR1cm4gbGlzdDsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBwYXJzZUJsb2NrKCkg
eworICAgICAgICB2YXIgYmxvY2ssIHN0YXJ0VG9rZW47CisKKyAgICAgICAgc3RhcnRUb2tlbiA9
IGxvb2thaGVhZDsKKyAgICAgICAgZXhwZWN0KCd7Jyk7CisKKyAgICAgICAgYmxvY2sgPSBwYXJz
ZVN0YXRlbWVudExpc3QoKTsKKworICAgICAgICBleHBlY3QoJ30nKTsKKworICAgICAgICByZXR1
cm4gZGVsZWdhdGUubWFya0VuZChkZWxlZ2F0ZS5jcmVhdGVCbG9ja1N0YXRlbWVudChibG9jayks
IHN0YXJ0VG9rZW4pOworICAgIH0KKworICAgIC8vIDEyLjIgVmFyaWFibGUgU3RhdGVtZW50CisK
KyAgICBmdW5jdGlvbiBwYXJzZVZhcmlhYmxlSWRlbnRpZmllcigpIHsKKyAgICAgICAgdmFyIHRv
a2VuLCBzdGFydFRva2VuOworCisgICAgICAgIHN0YXJ0VG9rZW4gPSBsb29rYWhlYWQ7CisgICAg
ICAgIHRva2VuID0gbGV4KCk7CisKKyAgICAgICAgaWYgKHRva2VuLnR5cGUgIT09IFRva2VuLklk
ZW50aWZpZXIpIHsKKyAgICAgICAgICAgIHRocm93VW5leHBlY3RlZCh0b2tlbik7CisgICAgICAg
IH0KKworICAgICAgICByZXR1cm4gZGVsZWdhdGUubWFya0VuZChkZWxlZ2F0ZS5jcmVhdGVJZGVu
dGlmaWVyKHRva2VuLnZhbHVlKSwgc3RhcnRUb2tlbik7CisgICAgfQorCisgICAgZnVuY3Rpb24g
cGFyc2VWYXJpYWJsZURlY2xhcmF0aW9uKGtpbmQpIHsKKyAgICAgICAgdmFyIGluaXQgPSBudWxs
LCBpZCwgc3RhcnRUb2tlbjsKKworICAgICAgICBzdGFydFRva2VuID0gbG9va2FoZWFkOworICAg
ICAgICBpZCA9IHBhcnNlVmFyaWFibGVJZGVudGlmaWVyKCk7CisKKyAgICAgICAgLy8gMTIuMi4x
CisgICAgICAgIGlmIChzdHJpY3QgJiYgaXNSZXN0cmljdGVkV29yZChpZC5uYW1lKSkgeworICAg
ICAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KHt9LCBNZXNzYWdlcy5TdHJpY3RWYXJOYW1lKTsK
KyAgICAgICAgfQorCisgICAgICAgIGlmIChraW5kID09PSAnY29uc3QnKSB7CisgICAgICAgICAg
ICBleHBlY3QoJz0nKTsKKyAgICAgICAgICAgIGluaXQgPSBwYXJzZUFzc2lnbm1lbnRFeHByZXNz
aW9uKCk7CisgICAgICAgIH0gZWxzZSBpZiAobWF0Y2goJz0nKSkgeworICAgICAgICAgICAgbGV4
KCk7CisgICAgICAgICAgICBpbml0ID0gcGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbigpOworICAg
ICAgICB9CisKKyAgICAgICAgcmV0dXJuIGRlbGVnYXRlLm1hcmtFbmQoZGVsZWdhdGUuY3JlYXRl
VmFyaWFibGVEZWNsYXJhdG9yKGlkLCBpbml0KSwgc3RhcnRUb2tlbik7CisgICAgfQorCisgICAg
ZnVuY3Rpb24gcGFyc2VWYXJpYWJsZURlY2xhcmF0aW9uTGlzdChraW5kKSB7CisgICAgICAgIHZh
ciBsaXN0ID0gW107CisKKyAgICAgICAgZG8geworICAgICAgICAgICAgbGlzdC5wdXNoKHBhcnNl
VmFyaWFibGVEZWNsYXJhdGlvbihraW5kKSk7CisgICAgICAgICAgICBpZiAoIW1hdGNoKCcsJykp
IHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGxl
eCgpOworICAgICAgICB9IHdoaWxlIChpbmRleCA8IGxlbmd0aCk7CisKKyAgICAgICAgcmV0dXJu
IGxpc3Q7CisgICAgfQorCisgICAgZnVuY3Rpb24gcGFyc2VWYXJpYWJsZVN0YXRlbWVudCgpIHsK
KyAgICAgICAgdmFyIGRlY2xhcmF0aW9uczsKKworICAgICAgICBleHBlY3RLZXl3b3JkKCd2YXIn
KTsKKworICAgICAgICBkZWNsYXJhdGlvbnMgPSBwYXJzZVZhcmlhYmxlRGVjbGFyYXRpb25MaXN0
KCk7CisKKyAgICAgICAgY29uc3VtZVNlbWljb2xvbigpOworCisgICAgICAgIHJldHVybiBkZWxl
Z2F0ZS5jcmVhdGVWYXJpYWJsZURlY2xhcmF0aW9uKGRlY2xhcmF0aW9ucywgJ3ZhcicpOworICAg
IH0KKworICAgIC8vIGtpbmQgbWF5IGJlIGBjb25zdGAgb3IgYGxldGAKKyAgICAvLyBCb3RoIGFy
ZSBleHBlcmltZW50YWwgYW5kIG5vdCBpbiB0aGUgc3BlY2lmaWNhdGlvbiB5ZXQuCisgICAgLy8g
c2VlIGh0dHA6Ly93aWtpLmVjbWFzY3JpcHQub3JnL2Rva3UucGhwP2lkPWhhcm1vbnk6Y29uc3QK
KyAgICAvLyBhbmQgaHR0cDovL3dpa2kuZWNtYXNjcmlwdC5vcmcvZG9rdS5waHA/aWQ9aGFybW9u
eTpsZXQKKyAgICBmdW5jdGlvbiBwYXJzZUNvbnN0TGV0RGVjbGFyYXRpb24oa2luZCkgeworICAg
ICAgICB2YXIgZGVjbGFyYXRpb25zLCBzdGFydFRva2VuOworCisgICAgICAgIHN0YXJ0VG9rZW4g
PSBsb29rYWhlYWQ7CisKKyAgICAgICAgZXhwZWN0S2V5d29yZChraW5kKTsKKworICAgICAgICBk
ZWNsYXJhdGlvbnMgPSBwYXJzZVZhcmlhYmxlRGVjbGFyYXRpb25MaXN0KGtpbmQpOworCisgICAg
ICAgIGNvbnN1bWVTZW1pY29sb24oKTsKKworICAgICAgICByZXR1cm4gZGVsZWdhdGUubWFya0Vu
ZChkZWxlZ2F0ZS5jcmVhdGVWYXJpYWJsZURlY2xhcmF0aW9uKGRlY2xhcmF0aW9ucywga2luZCks
IHN0YXJ0VG9rZW4pOworICAgIH0KKworICAgIC8vIDEyLjMgRW1wdHkgU3RhdGVtZW50CisKKyAg
ICBmdW5jdGlvbiBwYXJzZUVtcHR5U3RhdGVtZW50KCkgeworICAgICAgICBleHBlY3QoJzsnKTsK
KyAgICAgICAgcmV0dXJuIGRlbGVnYXRlLmNyZWF0ZUVtcHR5U3RhdGVtZW50KCk7CisgICAgfQor
CisgICAgLy8gMTIuNCBFeHByZXNzaW9uIFN0YXRlbWVudAorCisgICAgZnVuY3Rpb24gcGFyc2VF
eHByZXNzaW9uU3RhdGVtZW50KCkgeworICAgICAgICB2YXIgZXhwciA9IHBhcnNlRXhwcmVzc2lv
bigpOworICAgICAgICBjb25zdW1lU2VtaWNvbG9uKCk7CisgICAgICAgIHJldHVybiBkZWxlZ2F0
ZS5jcmVhdGVFeHByZXNzaW9uU3RhdGVtZW50KGV4cHIpOworICAgIH0KKworICAgIC8vIDEyLjUg
SWYgc3RhdGVtZW50CisKKyAgICBmdW5jdGlvbiBwYXJzZUlmU3RhdGVtZW50KCkgeworICAgICAg
ICB2YXIgdGVzdCwgY29uc2VxdWVudCwgYWx0ZXJuYXRlOworCisgICAgICAgIGV4cGVjdEtleXdv
cmQoJ2lmJyk7CisKKyAgICAgICAgZXhwZWN0KCcoJyk7CisKKyAgICAgICAgdGVzdCA9IHBhcnNl
RXhwcmVzc2lvbigpOworCisgICAgICAgIGV4cGVjdCgnKScpOworCisgICAgICAgIGNvbnNlcXVl
bnQgPSBwYXJzZVN0YXRlbWVudCgpOworCisgICAgICAgIGlmIChtYXRjaEtleXdvcmQoJ2Vsc2Un
KSkgeworICAgICAgICAgICAgbGV4KCk7CisgICAgICAgICAgICBhbHRlcm5hdGUgPSBwYXJzZVN0
YXRlbWVudCgpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYWx0ZXJuYXRlID0gbnVs
bDsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5jcmVhdGVJZlN0YXRlbWVu
dCh0ZXN0LCBjb25zZXF1ZW50LCBhbHRlcm5hdGUpOworICAgIH0KKworICAgIC8vIDEyLjYgSXRl
cmF0aW9uIFN0YXRlbWVudHMKKworICAgIGZ1bmN0aW9uIHBhcnNlRG9XaGlsZVN0YXRlbWVudCgp
IHsKKyAgICAgICAgdmFyIGJvZHksIHRlc3QsIG9sZEluSXRlcmF0aW9uOworCisgICAgICAgIGV4
cGVjdEtleXdvcmQoJ2RvJyk7CisKKyAgICAgICAgb2xkSW5JdGVyYXRpb24gPSBzdGF0ZS5pbkl0
ZXJhdGlvbjsKKyAgICAgICAgc3RhdGUuaW5JdGVyYXRpb24gPSB0cnVlOworCisgICAgICAgIGJv
ZHkgPSBwYXJzZVN0YXRlbWVudCgpOworCisgICAgICAgIHN0YXRlLmluSXRlcmF0aW9uID0gb2xk
SW5JdGVyYXRpb247CisKKyAgICAgICAgZXhwZWN0S2V5d29yZCgnd2hpbGUnKTsKKworICAgICAg
ICBleHBlY3QoJygnKTsKKworICAgICAgICB0ZXN0ID0gcGFyc2VFeHByZXNzaW9uKCk7CisKKyAg
ICAgICAgZXhwZWN0KCcpJyk7CisKKyAgICAgICAgaWYgKG1hdGNoKCc7JykpIHsKKyAgICAgICAg
ICAgIGxleCgpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGRlbGVnYXRlLmNyZWF0ZURv
V2hpbGVTdGF0ZW1lbnQoYm9keSwgdGVzdCk7CisgICAgfQorCisgICAgZnVuY3Rpb24gcGFyc2VX
aGlsZVN0YXRlbWVudCgpIHsKKyAgICAgICAgdmFyIHRlc3QsIGJvZHksIG9sZEluSXRlcmF0aW9u
OworCisgICAgICAgIGV4cGVjdEtleXdvcmQoJ3doaWxlJyk7CisKKyAgICAgICAgZXhwZWN0KCco
Jyk7CisKKyAgICAgICAgdGVzdCA9IHBhcnNlRXhwcmVzc2lvbigpOworCisgICAgICAgIGV4cGVj
dCgnKScpOworCisgICAgICAgIG9sZEluSXRlcmF0aW9uID0gc3RhdGUuaW5JdGVyYXRpb247Cisg
ICAgICAgIHN0YXRlLmluSXRlcmF0aW9uID0gdHJ1ZTsKKworICAgICAgICBib2R5ID0gcGFyc2VT
dGF0ZW1lbnQoKTsKKworICAgICAgICBzdGF0ZS5pbkl0ZXJhdGlvbiA9IG9sZEluSXRlcmF0aW9u
OworCisgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5jcmVhdGVXaGlsZVN0YXRlbWVudCh0ZXN0LCBi
b2R5KTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBwYXJzZUZvclZhcmlhYmxlRGVjbGFyYXRpb24o
KSB7CisgICAgICAgIHZhciB0b2tlbiwgZGVjbGFyYXRpb25zLCBzdGFydFRva2VuOworCisgICAg
ICAgIHN0YXJ0VG9rZW4gPSBsb29rYWhlYWQ7CisgICAgICAgIHRva2VuID0gbGV4KCk7CisgICAg
ICAgIGRlY2xhcmF0aW9ucyA9IHBhcnNlVmFyaWFibGVEZWNsYXJhdGlvbkxpc3QoKTsKKworICAg
ICAgICByZXR1cm4gZGVsZWdhdGUubWFya0VuZChkZWxlZ2F0ZS5jcmVhdGVWYXJpYWJsZURlY2xh
cmF0aW9uKGRlY2xhcmF0aW9ucywgdG9rZW4udmFsdWUpLCBzdGFydFRva2VuKTsKKyAgICB9CisK
KyAgICBmdW5jdGlvbiBwYXJzZUZvclN0YXRlbWVudCgpIHsKKyAgICAgICAgdmFyIGluaXQsIHRl
c3QsIHVwZGF0ZSwgbGVmdCwgcmlnaHQsIGJvZHksIG9sZEluSXRlcmF0aW9uOworCisgICAgICAg
IGluaXQgPSB0ZXN0ID0gdXBkYXRlID0gbnVsbDsKKworICAgICAgICBleHBlY3RLZXl3b3JkKCdm
b3InKTsKKworICAgICAgICBleHBlY3QoJygnKTsKKworICAgICAgICBpZiAobWF0Y2goJzsnKSkg
eworICAgICAgICAgICAgbGV4KCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAo
bWF0Y2hLZXl3b3JkKCd2YXInKSB8fCBtYXRjaEtleXdvcmQoJ2xldCcpKSB7CisgICAgICAgICAg
ICAgICAgc3RhdGUuYWxsb3dJbiA9IGZhbHNlOworICAgICAgICAgICAgICAgIGluaXQgPSBwYXJz
ZUZvclZhcmlhYmxlRGVjbGFyYXRpb24oKTsKKyAgICAgICAgICAgICAgICBzdGF0ZS5hbGxvd0lu
ID0gdHJ1ZTsKKworICAgICAgICAgICAgICAgIGlmIChpbml0LmRlY2xhcmF0aW9ucy5sZW5ndGgg
PT09IDEgJiYgbWF0Y2hLZXl3b3JkKCdpbicpKSB7CisgICAgICAgICAgICAgICAgICAgIGxleCgp
OworICAgICAgICAgICAgICAgICAgICBsZWZ0ID0gaW5pdDsKKyAgICAgICAgICAgICAgICAgICAg
cmlnaHQgPSBwYXJzZUV4cHJlc3Npb24oKTsKKyAgICAgICAgICAgICAgICAgICAgaW5pdCA9IG51
bGw7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICBzdGF0ZS5hbGxvd0luID0gZmFsc2U7CisgICAgICAgICAgICAgICAgaW5pdCA9IHBhcnNl
RXhwcmVzc2lvbigpOworICAgICAgICAgICAgICAgIHN0YXRlLmFsbG93SW4gPSB0cnVlOworCisg
ICAgICAgICAgICAgICAgaWYgKG1hdGNoS2V5d29yZCgnaW4nKSkgeworICAgICAgICAgICAgICAg
ICAgICAvLyBMZWZ0SGFuZFNpZGVFeHByZXNzaW9uCisgICAgICAgICAgICAgICAgICAgIGlmICgh
aXNMZWZ0SGFuZFNpZGUoaW5pdCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRocm93RXJy
b3JUb2xlcmFudCh7fSwgTWVzc2FnZXMuSW52YWxpZExIU0luRm9ySW4pOworICAgICAgICAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgbGV4KCk7CisgICAgICAgICAgICAgICAg
ICAgIGxlZnQgPSBpbml0OworICAgICAgICAgICAgICAgICAgICByaWdodCA9IHBhcnNlRXhwcmVz
c2lvbigpOworICAgICAgICAgICAgICAgICAgICBpbml0ID0gbnVsbDsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh0eXBlb2YgbGVmdCA9PT0gJ3Vu
ZGVmaW5lZCcpIHsKKyAgICAgICAgICAgICAgICBleHBlY3QoJzsnKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorCisgICAgICAgIGlmICh0eXBlb2YgbGVmdCA9PT0gJ3VuZGVmaW5lZCcpIHsK
KworICAgICAgICAgICAgaWYgKCFtYXRjaCgnOycpKSB7CisgICAgICAgICAgICAgICAgdGVzdCA9
IHBhcnNlRXhwcmVzc2lvbigpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZXhwZWN0KCc7
Jyk7CisKKyAgICAgICAgICAgIGlmICghbWF0Y2goJyknKSkgeworICAgICAgICAgICAgICAgIHVw
ZGF0ZSA9IHBhcnNlRXhwcmVzc2lvbigpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAg
ICAgICAgZXhwZWN0KCcpJyk7CisKKyAgICAgICAgb2xkSW5JdGVyYXRpb24gPSBzdGF0ZS5pbkl0
ZXJhdGlvbjsKKyAgICAgICAgc3RhdGUuaW5JdGVyYXRpb24gPSB0cnVlOworCisgICAgICAgIGJv
ZHkgPSBwYXJzZVN0YXRlbWVudCgpOworCisgICAgICAgIHN0YXRlLmluSXRlcmF0aW9uID0gb2xk
SW5JdGVyYXRpb247CisKKyAgICAgICAgcmV0dXJuICh0eXBlb2YgbGVmdCA9PT0gJ3VuZGVmaW5l
ZCcpID8KKyAgICAgICAgICAgICAgICBkZWxlZ2F0ZS5jcmVhdGVGb3JTdGF0ZW1lbnQoaW5pdCwg
dGVzdCwgdXBkYXRlLCBib2R5KSA6CisgICAgICAgICAgICAgICAgZGVsZWdhdGUuY3JlYXRlRm9y
SW5TdGF0ZW1lbnQobGVmdCwgcmlnaHQsIGJvZHkpOworICAgIH0KKworICAgIC8vIDEyLjcgVGhl
IGNvbnRpbnVlIHN0YXRlbWVudAorCisgICAgZnVuY3Rpb24gcGFyc2VDb250aW51ZVN0YXRlbWVu
dCgpIHsKKyAgICAgICAgdmFyIGxhYmVsID0gbnVsbCwga2V5OworCisgICAgICAgIGV4cGVjdEtl
eXdvcmQoJ2NvbnRpbnVlJyk7CisKKyAgICAgICAgLy8gT3B0aW1pemUgdGhlIG1vc3QgY29tbW9u
IGZvcm06ICdjb250aW51ZTsnLgorICAgICAgICBpZiAoc291cmNlLmNoYXJDb2RlQXQoaW5kZXgp
ID09PSAweDNCKSB7CisgICAgICAgICAgICBsZXgoKTsKKworICAgICAgICAgICAgaWYgKCFzdGF0
ZS5pbkl0ZXJhdGlvbikgeworICAgICAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2Vz
LklsbGVnYWxDb250aW51ZSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBk
ZWxlZ2F0ZS5jcmVhdGVDb250aW51ZVN0YXRlbWVudChudWxsKTsKKyAgICAgICAgfQorCisgICAg
ICAgIGlmIChwZWVrTGluZVRlcm1pbmF0b3IoKSkgeworICAgICAgICAgICAgaWYgKCFzdGF0ZS5p
bkl0ZXJhdGlvbikgeworICAgICAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLkls
bGVnYWxDb250aW51ZSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBkZWxl
Z2F0ZS5jcmVhdGVDb250aW51ZVN0YXRlbWVudChudWxsKTsKKyAgICAgICAgfQorCisgICAgICAg
IGlmIChsb29rYWhlYWQudHlwZSA9PT0gVG9rZW4uSWRlbnRpZmllcikgeworICAgICAgICAgICAg
bGFiZWwgPSBwYXJzZVZhcmlhYmxlSWRlbnRpZmllcigpOworCisgICAgICAgICAgICBrZXkgPSAn
JCcgKyBsYWJlbC5uYW1lOworICAgICAgICAgICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093
blByb3BlcnR5LmNhbGwoc3RhdGUubGFiZWxTZXQsIGtleSkpIHsKKyAgICAgICAgICAgICAgICB0
aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5Vbmtub3duTGFiZWwsIGxhYmVsLm5hbWUpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgY29uc3VtZVNlbWljb2xvbigpOworCisgICAg
ICAgIGlmIChsYWJlbCA9PT0gbnVsbCAmJiAhc3RhdGUuaW5JdGVyYXRpb24pIHsKKyAgICAgICAg
ICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLklsbGVnYWxDb250aW51ZSk7CisgICAgICAgIH0K
KworICAgICAgICByZXR1cm4gZGVsZWdhdGUuY3JlYXRlQ29udGludWVTdGF0ZW1lbnQobGFiZWwp
OworICAgIH0KKworICAgIC8vIDEyLjggVGhlIGJyZWFrIHN0YXRlbWVudAorCisgICAgZnVuY3Rp
b24gcGFyc2VCcmVha1N0YXRlbWVudCgpIHsKKyAgICAgICAgdmFyIGxhYmVsID0gbnVsbCwga2V5
OworCisgICAgICAgIGV4cGVjdEtleXdvcmQoJ2JyZWFrJyk7CisKKyAgICAgICAgLy8gQ2F0Y2gg
dGhlIHZlcnkgY29tbW9uIGNhc2UgZmlyc3Q6IGltbWVkaWF0ZWx5IGEgc2VtaWNvbG9uIChVKzAw
M0IpLgorICAgICAgICBpZiAoc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpID09PSAweDNCKSB7Cisg
ICAgICAgICAgICBsZXgoKTsKKworICAgICAgICAgICAgaWYgKCEoc3RhdGUuaW5JdGVyYXRpb24g
fHwgc3RhdGUuaW5Td2l0Y2gpKSB7CisgICAgICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVz
c2FnZXMuSWxsZWdhbEJyZWFrKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJu
IGRlbGVnYXRlLmNyZWF0ZUJyZWFrU3RhdGVtZW50KG51bGwpOworICAgICAgICB9CisKKyAgICAg
ICAgaWYgKHBlZWtMaW5lVGVybWluYXRvcigpKSB7CisgICAgICAgICAgICBpZiAoIShzdGF0ZS5p
bkl0ZXJhdGlvbiB8fCBzdGF0ZS5pblN3aXRjaCkpIHsKKyAgICAgICAgICAgICAgICB0aHJvd0Vy
cm9yKHt9LCBNZXNzYWdlcy5JbGxlZ2FsQnJlYWspOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICByZXR1cm4gZGVsZWdhdGUuY3JlYXRlQnJlYWtTdGF0ZW1lbnQobnVsbCk7CisgICAgICAg
IH0KKworICAgICAgICBpZiAobG9va2FoZWFkLnR5cGUgPT09IFRva2VuLklkZW50aWZpZXIpIHsK
KyAgICAgICAgICAgIGxhYmVsID0gcGFyc2VWYXJpYWJsZUlkZW50aWZpZXIoKTsKKworICAgICAg
ICAgICAga2V5ID0gJyQnICsgbGFiZWwubmFtZTsKKyAgICAgICAgICAgIGlmICghT2JqZWN0LnBy
b3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHN0YXRlLmxhYmVsU2V0LCBrZXkpKSB7CisgICAg
ICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuVW5rbm93bkxhYmVsLCBsYWJlbC5u
YW1lKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGNvbnN1bWVTZW1pY29s
b24oKTsKKworICAgICAgICBpZiAobGFiZWwgPT09IG51bGwgJiYgIShzdGF0ZS5pbkl0ZXJhdGlv
biB8fCBzdGF0ZS5pblN3aXRjaCkpIHsKKyAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3Nh
Z2VzLklsbGVnYWxCcmVhayk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gZGVsZWdhdGUu
Y3JlYXRlQnJlYWtTdGF0ZW1lbnQobGFiZWwpOworICAgIH0KKworICAgIC8vIDEyLjkgVGhlIHJl
dHVybiBzdGF0ZW1lbnQKKworICAgIGZ1bmN0aW9uIHBhcnNlUmV0dXJuU3RhdGVtZW50KCkgewor
ICAgICAgICB2YXIgYXJndW1lbnQgPSBudWxsOworCisgICAgICAgIGV4cGVjdEtleXdvcmQoJ3Jl
dHVybicpOworCisgICAgICAgIGlmICghc3RhdGUuaW5GdW5jdGlvbkJvZHkpIHsKKyAgICAgICAg
ICAgIHRocm93RXJyb3JUb2xlcmFudCh7fSwgTWVzc2FnZXMuSWxsZWdhbFJldHVybik7CisgICAg
ICAgIH0KKworICAgICAgICAvLyAncmV0dXJuJyBmb2xsb3dlZCBieSBhIHNwYWNlIGFuZCBhbiBp
ZGVudGlmaWVyIGlzIHZlcnkgY29tbW9uLgorICAgICAgICBpZiAoc291cmNlLmNoYXJDb2RlQXQo
aW5kZXgpID09PSAweDIwKSB7CisgICAgICAgICAgICBpZiAoaXNJZGVudGlmaWVyU3RhcnQoc291
cmNlLmNoYXJDb2RlQXQoaW5kZXggKyAxKSkpIHsKKyAgICAgICAgICAgICAgICBhcmd1bWVudCA9
IHBhcnNlRXhwcmVzc2lvbigpOworICAgICAgICAgICAgICAgIGNvbnN1bWVTZW1pY29sb24oKTsK
KyAgICAgICAgICAgICAgICByZXR1cm4gZGVsZWdhdGUuY3JlYXRlUmV0dXJuU3RhdGVtZW50KGFy
Z3VtZW50KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChwZWVrTGlu
ZVRlcm1pbmF0b3IoKSkgeworICAgICAgICAgICAgcmV0dXJuIGRlbGVnYXRlLmNyZWF0ZVJldHVy
blN0YXRlbWVudChudWxsKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghbWF0Y2goJzsnKSkg
eworICAgICAgICAgICAgaWYgKCFtYXRjaCgnfScpICYmIGxvb2thaGVhZC50eXBlICE9PSBUb2tl
bi5FT0YpIHsKKyAgICAgICAgICAgICAgICBhcmd1bWVudCA9IHBhcnNlRXhwcmVzc2lvbigpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgY29uc3VtZVNlbWljb2xvbigpOwor
CisgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5jcmVhdGVSZXR1cm5TdGF0ZW1lbnQoYXJndW1lbnQp
OworICAgIH0KKworICAgIC8vIDEyLjEwIFRoZSB3aXRoIHN0YXRlbWVudAorCisgICAgZnVuY3Rp
b24gcGFyc2VXaXRoU3RhdGVtZW50KCkgeworICAgICAgICB2YXIgb2JqZWN0LCBib2R5OworCisg
ICAgICAgIGlmIChzdHJpY3QpIHsKKyAgICAgICAgICAgIC8vIFRPRE8oaWthcmllbmF0b3IpOiBT
aG91bGQgd2UgdXBkYXRlIHRoZSB0ZXN0IGNhc2VzIGluc3RlYWQ/CisgICAgICAgICAgICBza2lw
Q29tbWVudCgpOworICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KHt9LCBNZXNzYWdlcy5T
dHJpY3RNb2RlV2l0aCk7CisgICAgICAgIH0KKworICAgICAgICBleHBlY3RLZXl3b3JkKCd3aXRo
Jyk7CisKKyAgICAgICAgZXhwZWN0KCcoJyk7CisKKyAgICAgICAgb2JqZWN0ID0gcGFyc2VFeHBy
ZXNzaW9uKCk7CisKKyAgICAgICAgZXhwZWN0KCcpJyk7CisKKyAgICAgICAgYm9keSA9IHBhcnNl
U3RhdGVtZW50KCk7CisKKyAgICAgICAgcmV0dXJuIGRlbGVnYXRlLmNyZWF0ZVdpdGhTdGF0ZW1l
bnQob2JqZWN0LCBib2R5KTsKKyAgICB9CisKKyAgICAvLyAxMi4xMCBUaGUgc3dpdGggc3RhdGVt
ZW50CisKKyAgICBmdW5jdGlvbiBwYXJzZVN3aXRjaENhc2UoKSB7CisgICAgICAgIHZhciB0ZXN0
LCBjb25zZXF1ZW50ID0gW10sIHN0YXRlbWVudCwgc3RhcnRUb2tlbjsKKworICAgICAgICBzdGFy
dFRva2VuID0gbG9va2FoZWFkOworICAgICAgICBpZiAobWF0Y2hLZXl3b3JkKCdkZWZhdWx0Jykp
IHsKKyAgICAgICAgICAgIGxleCgpOworICAgICAgICAgICAgdGVzdCA9IG51bGw7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICBleHBlY3RLZXl3b3JkKCdjYXNlJyk7CisgICAgICAgICAg
ICB0ZXN0ID0gcGFyc2VFeHByZXNzaW9uKCk7CisgICAgICAgIH0KKyAgICAgICAgZXhwZWN0KCc6
Jyk7CisKKyAgICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7CisgICAgICAgICAgICBpZiAo
bWF0Y2goJ30nKSB8fCBtYXRjaEtleXdvcmQoJ2RlZmF1bHQnKSB8fCBtYXRjaEtleXdvcmQoJ2Nh
c2UnKSkgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgc3RhdGVtZW50ID0gcGFyc2VTdGF0ZW1lbnQoKTsKKyAgICAgICAgICAgIGNvbnNlcXVlbnQu
cHVzaChzdGF0ZW1lbnQpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGRlbGVnYXRlLm1h
cmtFbmQoZGVsZWdhdGUuY3JlYXRlU3dpdGNoQ2FzZSh0ZXN0LCBjb25zZXF1ZW50KSwgc3RhcnRU
b2tlbik7CisgICAgfQorCisgICAgZnVuY3Rpb24gcGFyc2VTd2l0Y2hTdGF0ZW1lbnQoKSB7Cisg
ICAgICAgIHZhciBkaXNjcmltaW5hbnQsIGNhc2VzLCBjbGF1c2UsIG9sZEluU3dpdGNoLCBkZWZh
dWx0Rm91bmQ7CisKKyAgICAgICAgZXhwZWN0S2V5d29yZCgnc3dpdGNoJyk7CisKKyAgICAgICAg
ZXhwZWN0KCcoJyk7CisKKyAgICAgICAgZGlzY3JpbWluYW50ID0gcGFyc2VFeHByZXNzaW9uKCk7
CisKKyAgICAgICAgZXhwZWN0KCcpJyk7CisKKyAgICAgICAgZXhwZWN0KCd7Jyk7CisKKyAgICAg
ICAgY2FzZXMgPSBbXTsKKworICAgICAgICBpZiAobWF0Y2goJ30nKSkgeworICAgICAgICAgICAg
bGV4KCk7CisgICAgICAgICAgICByZXR1cm4gZGVsZWdhdGUuY3JlYXRlU3dpdGNoU3RhdGVtZW50
KGRpc2NyaW1pbmFudCwgY2FzZXMpOworICAgICAgICB9CisKKyAgICAgICAgb2xkSW5Td2l0Y2gg
PSBzdGF0ZS5pblN3aXRjaDsKKyAgICAgICAgc3RhdGUuaW5Td2l0Y2ggPSB0cnVlOworICAgICAg
ICBkZWZhdWx0Rm91bmQgPSBmYWxzZTsKKworICAgICAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgp
IHsKKyAgICAgICAgICAgIGlmIChtYXRjaCgnfScpKSB7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjbGF1c2UgPSBwYXJzZVN3aXRjaENhc2UoKTsK
KyAgICAgICAgICAgIGlmIChjbGF1c2UudGVzdCA9PT0gbnVsbCkgeworICAgICAgICAgICAgICAg
IGlmIChkZWZhdWx0Rm91bmQpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwg
TWVzc2FnZXMuTXVsdGlwbGVEZWZhdWx0c0luU3dpdGNoKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgZGVmYXVsdEZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGNhc2VzLnB1c2goY2xhdXNlKTsKKyAgICAgICAgfQorCisgICAgICAgIHN0YXRlLmlu
U3dpdGNoID0gb2xkSW5Td2l0Y2g7CisKKyAgICAgICAgZXhwZWN0KCd9Jyk7CisKKyAgICAgICAg
cmV0dXJuIGRlbGVnYXRlLmNyZWF0ZVN3aXRjaFN0YXRlbWVudChkaXNjcmltaW5hbnQsIGNhc2Vz
KTsKKyAgICB9CisKKyAgICAvLyAxMi4xMyBUaGUgdGhyb3cgc3RhdGVtZW50CisKKyAgICBmdW5j
dGlvbiBwYXJzZVRocm93U3RhdGVtZW50KCkgeworICAgICAgICB2YXIgYXJndW1lbnQ7CisKKyAg
ICAgICAgZXhwZWN0S2V5d29yZCgndGhyb3cnKTsKKworICAgICAgICBpZiAocGVla0xpbmVUZXJt
aW5hdG9yKCkpIHsKKyAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLk5ld2xpbmVB
ZnRlclRocm93KTsKKyAgICAgICAgfQorCisgICAgICAgIGFyZ3VtZW50ID0gcGFyc2VFeHByZXNz
aW9uKCk7CisKKyAgICAgICAgY29uc3VtZVNlbWljb2xvbigpOworCisgICAgICAgIHJldHVybiBk
ZWxlZ2F0ZS5jcmVhdGVUaHJvd1N0YXRlbWVudChhcmd1bWVudCk7CisgICAgfQorCisgICAgLy8g
MTIuMTQgVGhlIHRyeSBzdGF0ZW1lbnQKKworICAgIGZ1bmN0aW9uIHBhcnNlQ2F0Y2hDbGF1c2Uo
KSB7CisgICAgICAgIHZhciBwYXJhbSwgYm9keSwgc3RhcnRUb2tlbjsKKworICAgICAgICBzdGFy
dFRva2VuID0gbG9va2FoZWFkOworICAgICAgICBleHBlY3RLZXl3b3JkKCdjYXRjaCcpOworCisg
ICAgICAgIGV4cGVjdCgnKCcpOworICAgICAgICBpZiAobWF0Y2goJyknKSkgeworICAgICAgICAg
ICAgdGhyb3dVbmV4cGVjdGVkKGxvb2thaGVhZCk7CisgICAgICAgIH0KKworICAgICAgICBwYXJh
bSA9IHBhcnNlVmFyaWFibGVJZGVudGlmaWVyKCk7CisgICAgICAgIC8vIDEyLjE0LjEKKyAgICAg
ICAgaWYgKHN0cmljdCAmJiBpc1Jlc3RyaWN0ZWRXb3JkKHBhcmFtLm5hbWUpKSB7CisgICAgICAg
ICAgICB0aHJvd0Vycm9yVG9sZXJhbnQoe30sIE1lc3NhZ2VzLlN0cmljdENhdGNoVmFyaWFibGUp
OworICAgICAgICB9CisKKyAgICAgICAgZXhwZWN0KCcpJyk7CisgICAgICAgIGJvZHkgPSBwYXJz
ZUJsb2NrKCk7CisgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5tYXJrRW5kKGRlbGVnYXRlLmNyZWF0
ZUNhdGNoQ2xhdXNlKHBhcmFtLCBib2R5KSwgc3RhcnRUb2tlbik7CisgICAgfQorCisgICAgZnVu
Y3Rpb24gcGFyc2VUcnlTdGF0ZW1lbnQoKSB7CisgICAgICAgIHZhciBibG9jaywgaGFuZGxlcnMg
PSBbXSwgZmluYWxpemVyID0gbnVsbDsKKworICAgICAgICBleHBlY3RLZXl3b3JkKCd0cnknKTsK
KworICAgICAgICBibG9jayA9IHBhcnNlQmxvY2soKTsKKworICAgICAgICBpZiAobWF0Y2hLZXl3
b3JkKCdjYXRjaCcpKSB7CisgICAgICAgICAgICBoYW5kbGVycy5wdXNoKHBhcnNlQ2F0Y2hDbGF1
c2UoKSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAobWF0Y2hLZXl3b3JkKCdmaW5hbGx5Jykp
IHsKKyAgICAgICAgICAgIGxleCgpOworICAgICAgICAgICAgZmluYWxpemVyID0gcGFyc2VCbG9j
aygpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGhhbmRsZXJzLmxlbmd0aCA9PT0gMCAmJiAh
ZmluYWxpemVyKSB7CisgICAgICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5Ob0NhdGNo
T3JGaW5hbGx5KTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5jcmVhdGVU
cnlTdGF0ZW1lbnQoYmxvY2ssIFtdLCBoYW5kbGVycywgZmluYWxpemVyKTsKKyAgICB9CisKKyAg
ICAvLyAxMi4xNSBUaGUgZGVidWdnZXIgc3RhdGVtZW50CisKKyAgICBmdW5jdGlvbiBwYXJzZURl
YnVnZ2VyU3RhdGVtZW50KCkgeworICAgICAgICBleHBlY3RLZXl3b3JkKCdkZWJ1Z2dlcicpOwor
CisgICAgICAgIGNvbnN1bWVTZW1pY29sb24oKTsKKworICAgICAgICByZXR1cm4gZGVsZWdhdGUu
Y3JlYXRlRGVidWdnZXJTdGF0ZW1lbnQoKTsKKyAgICB9CisKKyAgICAvLyAxMiBTdGF0ZW1lbnRz
CisKKyAgICBmdW5jdGlvbiBwYXJzZVN0YXRlbWVudCgpIHsKKyAgICAgICAgdmFyIHR5cGUgPSBs
b29rYWhlYWQudHlwZSwKKyAgICAgICAgICAgIGV4cHIsCisgICAgICAgICAgICBsYWJlbGVkQm9k
eSwKKyAgICAgICAgICAgIGtleSwKKyAgICAgICAgICAgIHN0YXJ0VG9rZW47CisKKyAgICAgICAg
aWYgKHR5cGUgPT09IFRva2VuLkVPRikgeworICAgICAgICAgICAgdGhyb3dVbmV4cGVjdGVkKGxv
b2thaGVhZCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAodHlwZSA9PT0gVG9rZW4uUHVuY3R1
YXRvciAmJiBsb29rYWhlYWQudmFsdWUgPT09ICd7JykgeworICAgICAgICAgICAgcmV0dXJuIHBh
cnNlQmxvY2soKTsKKyAgICAgICAgfQorCisgICAgICAgIHN0YXJ0VG9rZW4gPSBsb29rYWhlYWQ7
CisKKyAgICAgICAgaWYgKHR5cGUgPT09IFRva2VuLlB1bmN0dWF0b3IpIHsKKyAgICAgICAgICAg
IHN3aXRjaCAobG9va2FoZWFkLnZhbHVlKSB7CisgICAgICAgICAgICBjYXNlICc7JzoKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZGVsZWdhdGUubWFya0VuZChwYXJzZUVtcHR5U3RhdGVtZW50KCks
IHN0YXJ0VG9rZW4pOworICAgICAgICAgICAgY2FzZSAnKCc6CisgICAgICAgICAgICAgICAgcmV0
dXJuIGRlbGVnYXRlLm1hcmtFbmQocGFyc2VFeHByZXNzaW9uU3RhdGVtZW50KCksIHN0YXJ0VG9r
ZW4pOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmICh0eXBlID09PSBUb2tlbi5LZXl3b3Jk
KSB7CisgICAgICAgICAgICBzd2l0Y2ggKGxvb2thaGVhZC52YWx1ZSkgeworICAgICAgICAgICAg
Y2FzZSAnYnJlYWsnOgorICAgICAgICAgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5tYXJrRW5kKHBh
cnNlQnJlYWtTdGF0ZW1lbnQoKSwgc3RhcnRUb2tlbik7CisgICAgICAgICAgICBjYXNlICdjb250
aW51ZSc6CisgICAgICAgICAgICAgICAgcmV0dXJuIGRlbGVnYXRlLm1hcmtFbmQocGFyc2VDb250
aW51ZVN0YXRlbWVudCgpLCBzdGFydFRva2VuKTsKKyAgICAgICAgICAgIGNhc2UgJ2RlYnVnZ2Vy
JzoKKyAgICAgICAgICAgICAgICByZXR1cm4gZGVsZWdhdGUubWFya0VuZChwYXJzZURlYnVnZ2Vy
U3RhdGVtZW50KCksIHN0YXJ0VG9rZW4pOworICAgICAgICAgICAgY2FzZSAnZG8nOgorICAgICAg
ICAgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5tYXJrRW5kKHBhcnNlRG9XaGlsZVN0YXRlbWVudCgp
LCBzdGFydFRva2VuKTsKKyAgICAgICAgICAgIGNhc2UgJ2Zvcic6CisgICAgICAgICAgICAgICAg
cmV0dXJuIGRlbGVnYXRlLm1hcmtFbmQocGFyc2VGb3JTdGF0ZW1lbnQoKSwgc3RhcnRUb2tlbik7
CisgICAgICAgICAgICBjYXNlICdmdW5jdGlvbic6CisgICAgICAgICAgICAgICAgcmV0dXJuIGRl
bGVnYXRlLm1hcmtFbmQocGFyc2VGdW5jdGlvbkRlY2xhcmF0aW9uKCksIHN0YXJ0VG9rZW4pOwor
ICAgICAgICAgICAgY2FzZSAnaWYnOgorICAgICAgICAgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5t
YXJrRW5kKHBhcnNlSWZTdGF0ZW1lbnQoKSwgc3RhcnRUb2tlbik7CisgICAgICAgICAgICBjYXNl
ICdyZXR1cm4nOgorICAgICAgICAgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5tYXJrRW5kKHBhcnNl
UmV0dXJuU3RhdGVtZW50KCksIHN0YXJ0VG9rZW4pOworICAgICAgICAgICAgY2FzZSAnc3dpdGNo
JzoKKyAgICAgICAgICAgICAgICByZXR1cm4gZGVsZWdhdGUubWFya0VuZChwYXJzZVN3aXRjaFN0
YXRlbWVudCgpLCBzdGFydFRva2VuKTsKKyAgICAgICAgICAgIGNhc2UgJ3Rocm93JzoKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZGVsZWdhdGUubWFya0VuZChwYXJzZVRocm93U3RhdGVtZW50KCks
IHN0YXJ0VG9rZW4pOworICAgICAgICAgICAgY2FzZSAndHJ5JzoKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZGVsZWdhdGUubWFya0VuZChwYXJzZVRyeVN0YXRlbWVudCgpLCBzdGFydFRva2VuKTsK
KyAgICAgICAgICAgIGNhc2UgJ3Zhcic6CisgICAgICAgICAgICAgICAgcmV0dXJuIGRlbGVnYXRl
Lm1hcmtFbmQocGFyc2VWYXJpYWJsZVN0YXRlbWVudCgpLCBzdGFydFRva2VuKTsKKyAgICAgICAg
ICAgIGNhc2UgJ3doaWxlJzoKKyAgICAgICAgICAgICAgICByZXR1cm4gZGVsZWdhdGUubWFya0Vu
ZChwYXJzZVdoaWxlU3RhdGVtZW50KCksIHN0YXJ0VG9rZW4pOworICAgICAgICAgICAgY2FzZSAn
d2l0aCc6CisgICAgICAgICAgICAgICAgcmV0dXJuIGRlbGVnYXRlLm1hcmtFbmQocGFyc2VXaXRo
U3RhdGVtZW50KCksIHN0YXJ0VG9rZW4pOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGV4cHIg
PSBwYXJzZUV4cHJlc3Npb24oKTsKKworICAgICAgICAvLyAxMi4xMiBMYWJlbGxlZCBTdGF0ZW1l
bnRzCisgICAgICAgIGlmICgoZXhwci50eXBlID09PSBTeW50YXguSWRlbnRpZmllcikgJiYgbWF0
Y2goJzonKSkgeworICAgICAgICAgICAgbGV4KCk7CisKKyAgICAgICAgICAgIGtleSA9ICckJyAr
IGV4cHIubmFtZTsKKyAgICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3Bl
cnR5LmNhbGwoc3RhdGUubGFiZWxTZXQsIGtleSkpIHsKKyAgICAgICAgICAgICAgICB0aHJvd0Vy
cm9yKHt9LCBNZXNzYWdlcy5SZWRlY2xhcmF0aW9uLCAnTGFiZWwnLCBleHByLm5hbWUpOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBzdGF0ZS5sYWJlbFNldFtrZXldID0gdHJ1ZTsKKyAg
ICAgICAgICAgIGxhYmVsZWRCb2R5ID0gcGFyc2VTdGF0ZW1lbnQoKTsKKyAgICAgICAgICAgIGRl
bGV0ZSBzdGF0ZS5sYWJlbFNldFtrZXldOworICAgICAgICAgICAgcmV0dXJuIGRlbGVnYXRlLm1h
cmtFbmQoZGVsZWdhdGUuY3JlYXRlTGFiZWxlZFN0YXRlbWVudChleHByLCBsYWJlbGVkQm9keSks
IHN0YXJ0VG9rZW4pOworICAgICAgICB9CisKKyAgICAgICAgY29uc3VtZVNlbWljb2xvbigpOwor
CisgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5tYXJrRW5kKGRlbGVnYXRlLmNyZWF0ZUV4cHJlc3Np
b25TdGF0ZW1lbnQoZXhwciksIHN0YXJ0VG9rZW4pOworICAgIH0KKworICAgIC8vIDEzIEZ1bmN0
aW9uIERlZmluaXRpb24KKworICAgIGZ1bmN0aW9uIHBhcnNlRnVuY3Rpb25Tb3VyY2VFbGVtZW50
cygpIHsKKyAgICAgICAgdmFyIHNvdXJjZUVsZW1lbnQsIHNvdXJjZUVsZW1lbnRzID0gW10sIHRv
a2VuLCBkaXJlY3RpdmUsIGZpcnN0UmVzdHJpY3RlZCwKKyAgICAgICAgICAgIG9sZExhYmVsU2V0
LCBvbGRJbkl0ZXJhdGlvbiwgb2xkSW5Td2l0Y2gsIG9sZEluRnVuY3Rpb25Cb2R5LCBzdGFydFRv
a2VuOworCisgICAgICAgIHN0YXJ0VG9rZW4gPSBsb29rYWhlYWQ7CisgICAgICAgIGV4cGVjdCgn
eycpOworCisgICAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkgeworICAgICAgICAgICAgaWYg
KGxvb2thaGVhZC50eXBlICE9PSBUb2tlbi5TdHJpbmdMaXRlcmFsKSB7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0b2tlbiA9IGxvb2thaGVhZDsK
KworICAgICAgICAgICAgc291cmNlRWxlbWVudCA9IHBhcnNlU291cmNlRWxlbWVudCgpOworICAg
ICAgICAgICAgc291cmNlRWxlbWVudHMucHVzaChzb3VyY2VFbGVtZW50KTsKKyAgICAgICAgICAg
IGlmIChzb3VyY2VFbGVtZW50LmV4cHJlc3Npb24udHlwZSAhPT0gU3ludGF4LkxpdGVyYWwpIHsK
KyAgICAgICAgICAgICAgICAvLyB0aGlzIGlzIG5vdCBkaXJlY3RpdmUKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRpcmVjdGl2ZSA9IHNvdXJjZS5z
bGljZSh0b2tlbi5zdGFydCArIDEsIHRva2VuLmVuZCAtIDEpOworICAgICAgICAgICAgaWYgKGRp
cmVjdGl2ZSA9PT0gJ3VzZSBzdHJpY3QnKSB7CisgICAgICAgICAgICAgICAgc3RyaWN0ID0gdHJ1
ZTsKKyAgICAgICAgICAgICAgICBpZiAoZmlyc3RSZXN0cmljdGVkKSB7CisgICAgICAgICAgICAg
ICAgICAgIHRocm93RXJyb3JUb2xlcmFudChmaXJzdFJlc3RyaWN0ZWQsIE1lc3NhZ2VzLlN0cmlj
dE9jdGFsTGl0ZXJhbCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICBpZiAoIWZpcnN0UmVzdHJpY3RlZCAmJiB0b2tlbi5vY3RhbCkgewor
ICAgICAgICAgICAgICAgICAgICBmaXJzdFJlc3RyaWN0ZWQgPSB0b2tlbjsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBvbGRMYWJlbFNldCA9
IHN0YXRlLmxhYmVsU2V0OworICAgICAgICBvbGRJbkl0ZXJhdGlvbiA9IHN0YXRlLmluSXRlcmF0
aW9uOworICAgICAgICBvbGRJblN3aXRjaCA9IHN0YXRlLmluU3dpdGNoOworICAgICAgICBvbGRJ
bkZ1bmN0aW9uQm9keSA9IHN0YXRlLmluRnVuY3Rpb25Cb2R5OworCisgICAgICAgIHN0YXRlLmxh
YmVsU2V0ID0ge307CisgICAgICAgIHN0YXRlLmluSXRlcmF0aW9uID0gZmFsc2U7CisgICAgICAg
IHN0YXRlLmluU3dpdGNoID0gZmFsc2U7CisgICAgICAgIHN0YXRlLmluRnVuY3Rpb25Cb2R5ID0g
dHJ1ZTsKKworICAgICAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHsKKyAgICAgICAgICAgIGlm
IChtYXRjaCgnfScpKSB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBzb3VyY2VFbGVtZW50ID0gcGFyc2VTb3VyY2VFbGVtZW50KCk7CisgICAgICAg
ICAgICBpZiAodHlwZW9mIHNvdXJjZUVsZW1lbnQgPT09ICd1bmRlZmluZWQnKSB7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzb3VyY2VFbGVtZW50
cy5wdXNoKHNvdXJjZUVsZW1lbnQpOworICAgICAgICB9CisKKyAgICAgICAgZXhwZWN0KCd9Jyk7
CisKKyAgICAgICAgc3RhdGUubGFiZWxTZXQgPSBvbGRMYWJlbFNldDsKKyAgICAgICAgc3RhdGUu
aW5JdGVyYXRpb24gPSBvbGRJbkl0ZXJhdGlvbjsKKyAgICAgICAgc3RhdGUuaW5Td2l0Y2ggPSBv
bGRJblN3aXRjaDsKKyAgICAgICAgc3RhdGUuaW5GdW5jdGlvbkJvZHkgPSBvbGRJbkZ1bmN0aW9u
Qm9keTsKKworICAgICAgICByZXR1cm4gZGVsZWdhdGUubWFya0VuZChkZWxlZ2F0ZS5jcmVhdGVC
bG9ja1N0YXRlbWVudChzb3VyY2VFbGVtZW50cyksIHN0YXJ0VG9rZW4pOworICAgIH0KKworICAg
IGZ1bmN0aW9uIHBhcnNlUGFyYW1zKGZpcnN0UmVzdHJpY3RlZCkgeworICAgICAgICB2YXIgcGFy
YW0sIHBhcmFtcyA9IFtdLCB0b2tlbiwgc3RyaWN0ZWQsIHBhcmFtU2V0LCBrZXksIG1lc3NhZ2U7
CisgICAgICAgIGV4cGVjdCgnKCcpOworCisgICAgICAgIGlmICghbWF0Y2goJyknKSkgeworICAg
ICAgICAgICAgcGFyYW1TZXQgPSB7fTsKKyAgICAgICAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0
aCkgeworICAgICAgICAgICAgICAgIHRva2VuID0gbG9va2FoZWFkOworICAgICAgICAgICAgICAg
IHBhcmFtID0gcGFyc2VWYXJpYWJsZUlkZW50aWZpZXIoKTsKKyAgICAgICAgICAgICAgICBrZXkg
PSAnJCcgKyB0b2tlbi52YWx1ZTsKKyAgICAgICAgICAgICAgICBpZiAoc3RyaWN0KSB7CisgICAg
ICAgICAgICAgICAgICAgIGlmIChpc1Jlc3RyaWN0ZWRXb3JkKHRva2VuLnZhbHVlKSkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgc3RyaWN0ZWQgPSB0b2tlbjsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIG1lc3NhZ2UgPSBNZXNzYWdlcy5TdHJpY3RQYXJhbU5hbWU7CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3du
UHJvcGVydHkuY2FsbChwYXJhbVNldCwga2V5KSkgeworICAgICAgICAgICAgICAgICAgICAgICAg
c3RyaWN0ZWQgPSB0b2tlbjsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBNZXNz
YWdlcy5TdHJpY3RQYXJhbUR1cGU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICB9IGVsc2UgaWYgKCFmaXJzdFJlc3RyaWN0ZWQpIHsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKGlzUmVzdHJpY3RlZFdvcmQodG9rZW4udmFsdWUpKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBmaXJzdFJlc3RyaWN0ZWQgPSB0b2tlbjsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1l
c3NhZ2UgPSBNZXNzYWdlcy5TdHJpY3RQYXJhbU5hbWU7CisgICAgICAgICAgICAgICAgICAgIH0g
ZWxzZSBpZiAoaXNTdHJpY3RNb2RlUmVzZXJ2ZWRXb3JkKHRva2VuLnZhbHVlKSkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgZmlyc3RSZXN0cmljdGVkID0gdG9rZW47CisgICAgICAgICAgICAg
ICAgICAgICAgICBtZXNzYWdlID0gTWVzc2FnZXMuU3RyaWN0UmVzZXJ2ZWRXb3JkOworICAgICAg
ICAgICAgICAgICAgICB9IGVsc2UgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHku
Y2FsbChwYXJhbVNldCwga2V5KSkgeworICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3RSZXN0
cmljdGVkID0gdG9rZW47CisgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlID0gTWVzc2Fn
ZXMuU3RyaWN0UGFyYW1EdXBlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIHBhcmFtcy5wdXNoKHBhcmFtKTsKKyAgICAgICAgICAgICAg
ICBwYXJhbVNldFtrZXldID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBpZiAobWF0Y2goJyknKSkg
eworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgZXhwZWN0KCcsJyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAg
ICBleHBlY3QoJyknKTsKKworICAgICAgICByZXR1cm4geworICAgICAgICAgICAgcGFyYW1zOiBw
YXJhbXMsCisgICAgICAgICAgICBzdHJpY3RlZDogc3RyaWN0ZWQsCisgICAgICAgICAgICBmaXJz
dFJlc3RyaWN0ZWQ6IGZpcnN0UmVzdHJpY3RlZCwKKyAgICAgICAgICAgIG1lc3NhZ2U6IG1lc3Nh
Z2UKKyAgICAgICAgfTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBwYXJzZUZ1bmN0aW9uRGVjbGFy
YXRpb24oKSB7CisgICAgICAgIHZhciBpZCwgcGFyYW1zID0gW10sIGJvZHksIHRva2VuLCBzdHJp
Y3RlZCwgdG1wLCBmaXJzdFJlc3RyaWN0ZWQsIG1lc3NhZ2UsIHByZXZpb3VzU3RyaWN0LCBzdGFy
dFRva2VuOworCisgICAgICAgIHN0YXJ0VG9rZW4gPSBsb29rYWhlYWQ7CisKKyAgICAgICAgZXhw
ZWN0S2V5d29yZCgnZnVuY3Rpb24nKTsKKyAgICAgICAgdG9rZW4gPSBsb29rYWhlYWQ7CisgICAg
ICAgIGlkID0gcGFyc2VWYXJpYWJsZUlkZW50aWZpZXIoKTsKKyAgICAgICAgaWYgKHN0cmljdCkg
eworICAgICAgICAgICAgaWYgKGlzUmVzdHJpY3RlZFdvcmQodG9rZW4udmFsdWUpKSB7CisgICAg
ICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KHRva2VuLCBNZXNzYWdlcy5TdHJpY3RGdW5j
dGlvbk5hbWUpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
aWYgKGlzUmVzdHJpY3RlZFdvcmQodG9rZW4udmFsdWUpKSB7CisgICAgICAgICAgICAgICAgZmly
c3RSZXN0cmljdGVkID0gdG9rZW47CisgICAgICAgICAgICAgICAgbWVzc2FnZSA9IE1lc3NhZ2Vz
LlN0cmljdEZ1bmN0aW9uTmFtZTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNTdHJpY3RNb2Rl
UmVzZXJ2ZWRXb3JkKHRva2VuLnZhbHVlKSkgeworICAgICAgICAgICAgICAgIGZpcnN0UmVzdHJp
Y3RlZCA9IHRva2VuOworICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBNZXNzYWdlcy5TdHJpY3RS
ZXNlcnZlZFdvcmQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICB0bXAgPSBw
YXJzZVBhcmFtcyhmaXJzdFJlc3RyaWN0ZWQpOworICAgICAgICBwYXJhbXMgPSB0bXAucGFyYW1z
OworICAgICAgICBzdHJpY3RlZCA9IHRtcC5zdHJpY3RlZDsKKyAgICAgICAgZmlyc3RSZXN0cmlj
dGVkID0gdG1wLmZpcnN0UmVzdHJpY3RlZDsKKyAgICAgICAgaWYgKHRtcC5tZXNzYWdlKSB7Cisg
ICAgICAgICAgICBtZXNzYWdlID0gdG1wLm1lc3NhZ2U7CisgICAgICAgIH0KKworICAgICAgICBw
cmV2aW91c1N0cmljdCA9IHN0cmljdDsKKyAgICAgICAgYm9keSA9IHBhcnNlRnVuY3Rpb25Tb3Vy
Y2VFbGVtZW50cygpOworICAgICAgICBpZiAoc3RyaWN0ICYmIGZpcnN0UmVzdHJpY3RlZCkgewor
ICAgICAgICAgICAgdGhyb3dFcnJvcihmaXJzdFJlc3RyaWN0ZWQsIG1lc3NhZ2UpOworICAgICAg
ICB9CisgICAgICAgIGlmIChzdHJpY3QgJiYgc3RyaWN0ZWQpIHsKKyAgICAgICAgICAgIHRocm93
RXJyb3JUb2xlcmFudChzdHJpY3RlZCwgbWVzc2FnZSk7CisgICAgICAgIH0KKyAgICAgICAgc3Ry
aWN0ID0gcHJldmlvdXNTdHJpY3Q7CisKKyAgICAgICAgcmV0dXJuIGRlbGVnYXRlLm1hcmtFbmQo
ZGVsZWdhdGUuY3JlYXRlRnVuY3Rpb25EZWNsYXJhdGlvbihpZCwgcGFyYW1zLCBbXSwgYm9keSks
IHN0YXJ0VG9rZW4pOworICAgIH0KKworICAgIGZ1bmN0aW9uIHBhcnNlRnVuY3Rpb25FeHByZXNz
aW9uKCkgeworICAgICAgICB2YXIgdG9rZW4sIGlkID0gbnVsbCwgc3RyaWN0ZWQsIGZpcnN0UmVz
dHJpY3RlZCwgbWVzc2FnZSwgdG1wLCBwYXJhbXMgPSBbXSwgYm9keSwgcHJldmlvdXNTdHJpY3Qs
IHN0YXJ0VG9rZW47CisKKyAgICAgICAgc3RhcnRUb2tlbiA9IGxvb2thaGVhZDsKKyAgICAgICAg
ZXhwZWN0S2V5d29yZCgnZnVuY3Rpb24nKTsKKworICAgICAgICBpZiAoIW1hdGNoKCcoJykpIHsK
KyAgICAgICAgICAgIHRva2VuID0gbG9va2FoZWFkOworICAgICAgICAgICAgaWQgPSBwYXJzZVZh
cmlhYmxlSWRlbnRpZmllcigpOworICAgICAgICAgICAgaWYgKHN0cmljdCkgeworICAgICAgICAg
ICAgICAgIGlmIChpc1Jlc3RyaWN0ZWRXb3JkKHRva2VuLnZhbHVlKSkgeworICAgICAgICAgICAg
ICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQodG9rZW4sIE1lc3NhZ2VzLlN0cmljdEZ1bmN0aW9u
TmFtZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICBpZiAoaXNSZXN0cmljdGVkV29yZCh0b2tlbi52YWx1ZSkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgZmlyc3RSZXN0cmljdGVkID0gdG9rZW47CisgICAgICAgICAgICAgICAgICAgIG1l
c3NhZ2UgPSBNZXNzYWdlcy5TdHJpY3RGdW5jdGlvbk5hbWU7CisgICAgICAgICAgICAgICAgfSBl
bHNlIGlmIChpc1N0cmljdE1vZGVSZXNlcnZlZFdvcmQodG9rZW4udmFsdWUpKSB7CisgICAgICAg
ICAgICAgICAgICAgIGZpcnN0UmVzdHJpY3RlZCA9IHRva2VuOworICAgICAgICAgICAgICAgICAg
ICBtZXNzYWdlID0gTWVzc2FnZXMuU3RyaWN0UmVzZXJ2ZWRXb3JkOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHRtcCA9IHBhcnNlUGFyYW1z
KGZpcnN0UmVzdHJpY3RlZCk7CisgICAgICAgIHBhcmFtcyA9IHRtcC5wYXJhbXM7CisgICAgICAg
IHN0cmljdGVkID0gdG1wLnN0cmljdGVkOworICAgICAgICBmaXJzdFJlc3RyaWN0ZWQgPSB0bXAu
Zmlyc3RSZXN0cmljdGVkOworICAgICAgICBpZiAodG1wLm1lc3NhZ2UpIHsKKyAgICAgICAgICAg
IG1lc3NhZ2UgPSB0bXAubWVzc2FnZTsKKyAgICAgICAgfQorCisgICAgICAgIHByZXZpb3VzU3Ry
aWN0ID0gc3RyaWN0OworICAgICAgICBib2R5ID0gcGFyc2VGdW5jdGlvblNvdXJjZUVsZW1lbnRz
KCk7CisgICAgICAgIGlmIChzdHJpY3QgJiYgZmlyc3RSZXN0cmljdGVkKSB7CisgICAgICAgICAg
ICB0aHJvd0Vycm9yKGZpcnN0UmVzdHJpY3RlZCwgbWVzc2FnZSk7CisgICAgICAgIH0KKyAgICAg
ICAgaWYgKHN0cmljdCAmJiBzdHJpY3RlZCkgeworICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVy
YW50KHN0cmljdGVkLCBtZXNzYWdlKTsKKyAgICAgICAgfQorICAgICAgICBzdHJpY3QgPSBwcmV2
aW91c1N0cmljdDsKKworICAgICAgICByZXR1cm4gZGVsZWdhdGUubWFya0VuZChkZWxlZ2F0ZS5j
cmVhdGVGdW5jdGlvbkV4cHJlc3Npb24oaWQsIHBhcmFtcywgW10sIGJvZHkpLCBzdGFydFRva2Vu
KTsKKyAgICB9CisKKyAgICAvLyAxNCBQcm9ncmFtCisKKyAgICBmdW5jdGlvbiBwYXJzZVNvdXJj
ZUVsZW1lbnQoKSB7CisgICAgICAgIGlmIChsb29rYWhlYWQudHlwZSA9PT0gVG9rZW4uS2V5d29y
ZCkgeworICAgICAgICAgICAgc3dpdGNoIChsb29rYWhlYWQudmFsdWUpIHsKKyAgICAgICAgICAg
IGNhc2UgJ2NvbnN0JzoKKyAgICAgICAgICAgIGNhc2UgJ2xldCc6CisgICAgICAgICAgICAgICAg
cmV0dXJuIHBhcnNlQ29uc3RMZXREZWNsYXJhdGlvbihsb29rYWhlYWQudmFsdWUpOworICAgICAg
ICAgICAgY2FzZSAnZnVuY3Rpb24nOgorICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZUZ1bmN0
aW9uRGVjbGFyYXRpb24oKTsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAg
cmV0dXJuIHBhcnNlU3RhdGVtZW50KCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAg
ICAgICBpZiAobG9va2FoZWFkLnR5cGUgIT09IFRva2VuLkVPRikgeworICAgICAgICAgICAgcmV0
dXJuIHBhcnNlU3RhdGVtZW50KCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmdW5jdGlvbiBw
YXJzZVNvdXJjZUVsZW1lbnRzKCkgeworICAgICAgICB2YXIgc291cmNlRWxlbWVudCwgc291cmNl
RWxlbWVudHMgPSBbXSwgdG9rZW4sIGRpcmVjdGl2ZSwgZmlyc3RSZXN0cmljdGVkOworCisgICAg
ICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkgeworICAgICAgICAgICAgdG9rZW4gPSBsb29rYWhl
YWQ7CisgICAgICAgICAgICBpZiAodG9rZW4udHlwZSAhPT0gVG9rZW4uU3RyaW5nTGl0ZXJhbCkg
eworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBz
b3VyY2VFbGVtZW50ID0gcGFyc2VTb3VyY2VFbGVtZW50KCk7CisgICAgICAgICAgICBzb3VyY2VF
bGVtZW50cy5wdXNoKHNvdXJjZUVsZW1lbnQpOworICAgICAgICAgICAgaWYgKHNvdXJjZUVsZW1l
bnQuZXhwcmVzc2lvbi50eXBlICE9PSBTeW50YXguTGl0ZXJhbCkgeworICAgICAgICAgICAgICAg
IC8vIHRoaXMgaXMgbm90IGRpcmVjdGl2ZQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgZGlyZWN0aXZlID0gc291cmNlLnNsaWNlKHRva2VuLnN0YXJ0
ICsgMSwgdG9rZW4uZW5kIC0gMSk7CisgICAgICAgICAgICBpZiAoZGlyZWN0aXZlID09PSAndXNl
IHN0cmljdCcpIHsKKyAgICAgICAgICAgICAgICBzdHJpY3QgPSB0cnVlOworICAgICAgICAgICAg
ICAgIGlmIChmaXJzdFJlc3RyaWN0ZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhyb3dFcnJv
clRvbGVyYW50KGZpcnN0UmVzdHJpY3RlZCwgTWVzc2FnZXMuU3RyaWN0T2N0YWxMaXRlcmFsKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
IGlmICghZmlyc3RSZXN0cmljdGVkICYmIHRva2VuLm9jdGFsKSB7CisgICAgICAgICAgICAgICAg
ICAgIGZpcnN0UmVzdHJpY3RlZCA9IHRva2VuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkgeworICAg
ICAgICAgICAgc291cmNlRWxlbWVudCA9IHBhcnNlU291cmNlRWxlbWVudCgpOworICAgICAgICAg
ICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovCisgICAgICAgICAgICBpZiAodHlwZW9mIHNvdXJj
ZUVsZW1lbnQgPT09ICd1bmRlZmluZWQnKSB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBzb3VyY2VFbGVtZW50cy5wdXNoKHNvdXJjZUVsZW1lbnQp
OworICAgICAgICB9CisgICAgICAgIHJldHVybiBzb3VyY2VFbGVtZW50czsKKyAgICB9CisKKyAg
ICBmdW5jdGlvbiBwYXJzZVByb2dyYW0oKSB7CisgICAgICAgIHZhciBib2R5LCBzdGFydFRva2Vu
OworCisgICAgICAgIHNraXBDb21tZW50KCk7CisgICAgICAgIHBlZWsoKTsKKyAgICAgICAgc3Rh
cnRUb2tlbiA9IGxvb2thaGVhZDsKKyAgICAgICAgc3RyaWN0ID0gZmFsc2U7CisKKyAgICAgICAg
Ym9keSA9IHBhcnNlU291cmNlRWxlbWVudHMoKTsKKyAgICAgICAgcmV0dXJuIGRlbGVnYXRlLm1h
cmtFbmQoZGVsZWdhdGUuY3JlYXRlUHJvZ3JhbShib2R5KSwgc3RhcnRUb2tlbik7CisgICAgfQor
CisgICAgZnVuY3Rpb24gZmlsdGVyVG9rZW5Mb2NhdGlvbigpIHsKKyAgICAgICAgdmFyIGksIGVu
dHJ5LCB0b2tlbiwgdG9rZW5zID0gW107CisKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IGV4dHJh
LnRva2Vucy5sZW5ndGg7ICsraSkgeworICAgICAgICAgICAgZW50cnkgPSBleHRyYS50b2tlbnNb
aV07CisgICAgICAgICAgICB0b2tlbiA9IHsKKyAgICAgICAgICAgICAgICB0eXBlOiBlbnRyeS50
eXBlLAorICAgICAgICAgICAgICAgIHZhbHVlOiBlbnRyeS52YWx1ZQorICAgICAgICAgICAgfTsK
KyAgICAgICAgICAgIGlmIChleHRyYS5yYW5nZSkgeworICAgICAgICAgICAgICAgIHRva2VuLnJh
bmdlID0gZW50cnkucmFuZ2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoZXh0cmEu
bG9jKSB7CisgICAgICAgICAgICAgICAgdG9rZW4ubG9jID0gZW50cnkubG9jOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgdG9rZW5zLnB1c2godG9rZW4pOworICAgICAgICB9CisKKyAgICAg
ICAgZXh0cmEudG9rZW5zID0gdG9rZW5zOworICAgIH0KKworICAgIGZ1bmN0aW9uIHRva2VuaXpl
KGNvZGUsIG9wdGlvbnMpIHsKKyAgICAgICAgdmFyIHRvU3RyaW5nLAorICAgICAgICAgICAgdG9r
ZW4sCisgICAgICAgICAgICB0b2tlbnM7CisKKyAgICAgICAgdG9TdHJpbmcgPSBTdHJpbmc7Cisg
ICAgICAgIGlmICh0eXBlb2YgY29kZSAhPT0gJ3N0cmluZycgJiYgIShjb2RlIGluc3RhbmNlb2Yg
U3RyaW5nKSkgeworICAgICAgICAgICAgY29kZSA9IHRvU3RyaW5nKGNvZGUpOworICAgICAgICB9
CisKKyAgICAgICAgZGVsZWdhdGUgPSBTeW50YXhUcmVlRGVsZWdhdGU7CisgICAgICAgIHNvdXJj
ZSA9IGNvZGU7CisgICAgICAgIGluZGV4ID0gMDsKKyAgICAgICAgbGluZU51bWJlciA9IChzb3Vy
Y2UubGVuZ3RoID4gMCkgPyAxIDogMDsKKyAgICAgICAgbGluZVN0YXJ0ID0gMDsKKyAgICAgICAg
bGVuZ3RoID0gc291cmNlLmxlbmd0aDsKKyAgICAgICAgbG9va2FoZWFkID0gbnVsbDsKKyAgICAg
ICAgc3RhdGUgPSB7CisgICAgICAgICAgICBhbGxvd0luOiB0cnVlLAorICAgICAgICAgICAgbGFi
ZWxTZXQ6IHt9LAorICAgICAgICAgICAgaW5GdW5jdGlvbkJvZHk6IGZhbHNlLAorICAgICAgICAg
ICAgaW5JdGVyYXRpb246IGZhbHNlLAorICAgICAgICAgICAgaW5Td2l0Y2g6IGZhbHNlLAorICAg
ICAgICAgICAgbGFzdENvbW1lbnRTdGFydDogLTEKKyAgICAgICAgfTsKKworICAgICAgICBleHRy
YSA9IHt9OworCisgICAgICAgIC8vIE9wdGlvbnMgbWF0Y2hpbmcuCisgICAgICAgIG9wdGlvbnMg
PSBvcHRpb25zIHx8IHt9OworCisgICAgICAgIC8vIE9mIGNvdXJzZSB3ZSBjb2xsZWN0IHRva2Vu
cyBoZXJlLgorICAgICAgICBvcHRpb25zLnRva2VucyA9IHRydWU7CisgICAgICAgIGV4dHJhLnRv
a2VucyA9IFtdOworICAgICAgICBleHRyYS50b2tlbml6ZSA9IHRydWU7CisgICAgICAgIC8vIFRo
ZSBmb2xsb3dpbmcgdHdvIGZpZWxkcyBhcmUgbmVjZXNzYXJ5IHRvIGNvbXB1dGUgdGhlIFJlZ2V4
IHRva2Vucy4KKyAgICAgICAgZXh0cmEub3BlblBhcmVuVG9rZW4gPSAtMTsKKyAgICAgICAgZXh0
cmEub3BlbkN1cmx5VG9rZW4gPSAtMTsKKworICAgICAgICBleHRyYS5yYW5nZSA9ICh0eXBlb2Yg
b3B0aW9ucy5yYW5nZSA9PT0gJ2Jvb2xlYW4nKSAmJiBvcHRpb25zLnJhbmdlOworICAgICAgICBl
eHRyYS5sb2MgPSAodHlwZW9mIG9wdGlvbnMubG9jID09PSAnYm9vbGVhbicpICYmIG9wdGlvbnMu
bG9jOworCisgICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5jb21tZW50ID09PSAnYm9vbGVhbicg
JiYgb3B0aW9ucy5jb21tZW50KSB7CisgICAgICAgICAgICBleHRyYS5jb21tZW50cyA9IFtdOwor
ICAgICAgICB9CisgICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy50b2xlcmFudCA9PT0gJ2Jvb2xl
YW4nICYmIG9wdGlvbnMudG9sZXJhbnQpIHsKKyAgICAgICAgICAgIGV4dHJhLmVycm9ycyA9IFtd
OworICAgICAgICB9CisKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHBlZWsoKTsKKyAgICAg
ICAgICAgIGlmIChsb29rYWhlYWQudHlwZSA9PT0gVG9rZW4uRU9GKSB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGV4dHJhLnRva2VuczsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdG9r
ZW4gPSBsZXgoKTsKKyAgICAgICAgICAgIHdoaWxlIChsb29rYWhlYWQudHlwZSAhPT0gVG9rZW4u
RU9GKSB7CisgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgdG9rZW4g
PSBsZXgoKTsKKyAgICAgICAgICAgICAgICB9IGNhdGNoIChsZXhFcnJvcikgeworICAgICAgICAg
ICAgICAgICAgICB0b2tlbiA9IGxvb2thaGVhZDsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGV4
dHJhLmVycm9ycykgeworICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmEuZXJyb3JzLnB1c2go
bGV4RXJyb3IpOworICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgaGF2ZSB0byBicmVhayBv
biB0aGUgZmlyc3QgZXJyb3IKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRvIGF2b2lkIGlu
ZmluaXRlIGxvb3BzLgorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBsZXhFcnJv
cjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgZmlsdGVyVG9rZW5Mb2NhdGlvbigpOworICAgICAgICAgICAgdG9r
ZW5zID0gZXh0cmEudG9rZW5zOworICAgICAgICAgICAgaWYgKHR5cGVvZiBleHRyYS5jb21tZW50
cyAhPT0gJ3VuZGVmaW5lZCcpIHsKKyAgICAgICAgICAgICAgICB0b2tlbnMuY29tbWVudHMgPSBl
eHRyYS5jb21tZW50czsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh0eXBlb2YgZXh0
cmEuZXJyb3JzICE9PSAndW5kZWZpbmVkJykgeworICAgICAgICAgICAgICAgIHRva2Vucy5lcnJv
cnMgPSBleHRyYS5lcnJvcnM7CisgICAgICAgICAgICB9CisgICAgICAgIH0gY2F0Y2ggKGUpIHsK
KyAgICAgICAgICAgIHRocm93IGU7CisgICAgICAgIH0gZmluYWxseSB7CisgICAgICAgICAgICBl
eHRyYSA9IHt9OworICAgICAgICB9CisgICAgICAgIHJldHVybiB0b2tlbnM7CisgICAgfQorCisg
ICAgZnVuY3Rpb24gcGFyc2UoY29kZSwgb3B0aW9ucykgeworICAgICAgICB2YXIgcHJvZ3JhbSwg
dG9TdHJpbmc7CisKKyAgICAgICAgdG9TdHJpbmcgPSBTdHJpbmc7CisgICAgICAgIGlmICh0eXBl
b2YgY29kZSAhPT0gJ3N0cmluZycgJiYgIShjb2RlIGluc3RhbmNlb2YgU3RyaW5nKSkgeworICAg
ICAgICAgICAgY29kZSA9IHRvU3RyaW5nKGNvZGUpOworICAgICAgICB9CisKKyAgICAgICAgZGVs
ZWdhdGUgPSBTeW50YXhUcmVlRGVsZWdhdGU7CisgICAgICAgIHNvdXJjZSA9IGNvZGU7CisgICAg
ICAgIGluZGV4ID0gMDsKKyAgICAgICAgbGluZU51bWJlciA9IChzb3VyY2UubGVuZ3RoID4gMCkg
PyAxIDogMDsKKyAgICAgICAgbGluZVN0YXJ0ID0gMDsKKyAgICAgICAgbGVuZ3RoID0gc291cmNl
Lmxlbmd0aDsKKyAgICAgICAgbG9va2FoZWFkID0gbnVsbDsKKyAgICAgICAgc3RhdGUgPSB7Cisg
ICAgICAgICAgICBhbGxvd0luOiB0cnVlLAorICAgICAgICAgICAgbGFiZWxTZXQ6IHt9LAorICAg
ICAgICAgICAgaW5GdW5jdGlvbkJvZHk6IGZhbHNlLAorICAgICAgICAgICAgaW5JdGVyYXRpb246
IGZhbHNlLAorICAgICAgICAgICAgaW5Td2l0Y2g6IGZhbHNlLAorICAgICAgICAgICAgbGFzdENv
bW1lbnRTdGFydDogLTEKKyAgICAgICAgfTsKKworICAgICAgICBleHRyYSA9IHt9OworICAgICAg
ICBpZiAodHlwZW9mIG9wdGlvbnMgIT09ICd1bmRlZmluZWQnKSB7CisgICAgICAgICAgICBleHRy
YS5yYW5nZSA9ICh0eXBlb2Ygb3B0aW9ucy5yYW5nZSA9PT0gJ2Jvb2xlYW4nKSAmJiBvcHRpb25z
LnJhbmdlOworICAgICAgICAgICAgZXh0cmEubG9jID0gKHR5cGVvZiBvcHRpb25zLmxvYyA9PT0g
J2Jvb2xlYW4nKSAmJiBvcHRpb25zLmxvYzsKKyAgICAgICAgICAgIGV4dHJhLmF0dGFjaENvbW1l
bnQgPSAodHlwZW9mIG9wdGlvbnMuYXR0YWNoQ29tbWVudCA9PT0gJ2Jvb2xlYW4nKSAmJiBvcHRp
b25zLmF0dGFjaENvbW1lbnQ7CisKKyAgICAgICAgICAgIGlmIChleHRyYS5sb2MgJiYgb3B0aW9u
cy5zb3VyY2UgIT09IG51bGwgJiYgb3B0aW9ucy5zb3VyY2UgIT09IHVuZGVmaW5lZCkgeworICAg
ICAgICAgICAgICAgIGV4dHJhLnNvdXJjZSA9IHRvU3RyaW5nKG9wdGlvbnMuc291cmNlKTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLnRva2VucyA9PT0g
J2Jvb2xlYW4nICYmIG9wdGlvbnMudG9rZW5zKSB7CisgICAgICAgICAgICAgICAgZXh0cmEudG9r
ZW5zID0gW107CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMu
Y29tbWVudCA9PT0gJ2Jvb2xlYW4nICYmIG9wdGlvbnMuY29tbWVudCkgeworICAgICAgICAgICAg
ICAgIGV4dHJhLmNvbW1lbnRzID0gW107CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAo
dHlwZW9mIG9wdGlvbnMudG9sZXJhbnQgPT09ICdib29sZWFuJyAmJiBvcHRpb25zLnRvbGVyYW50
KSB7CisgICAgICAgICAgICAgICAgZXh0cmEuZXJyb3JzID0gW107CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBpZiAoZXh0cmEuYXR0YWNoQ29tbWVudCkgeworICAgICAgICAgICAgICAgIGV4
dHJhLnJhbmdlID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBleHRyYS5jb21tZW50cyA9IFtdOwor
ICAgICAgICAgICAgICAgIGV4dHJhLmJvdHRvbVJpZ2h0U3RhY2sgPSBbXTsKKyAgICAgICAgICAg
ICAgICBleHRyYS50cmFpbGluZ0NvbW1lbnRzID0gW107CisgICAgICAgICAgICAgICAgZXh0cmEu
bGVhZGluZ0NvbW1lbnRzID0gW107CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAg
ICB0cnkgeworICAgICAgICAgICAgcHJvZ3JhbSA9IHBhcnNlUHJvZ3JhbSgpOworICAgICAgICAg
ICAgaWYgKHR5cGVvZiBleHRyYS5jb21tZW50cyAhPT0gJ3VuZGVmaW5lZCcpIHsKKyAgICAgICAg
ICAgICAgICBwcm9ncmFtLmNvbW1lbnRzID0gZXh0cmEuY29tbWVudHM7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBpZiAodHlwZW9mIGV4dHJhLnRva2VucyAhPT0gJ3VuZGVmaW5lZCcpIHsK
KyAgICAgICAgICAgICAgICBmaWx0ZXJUb2tlbkxvY2F0aW9uKCk7CisgICAgICAgICAgICAgICAg
cHJvZ3JhbS50b2tlbnMgPSBleHRyYS50b2tlbnM7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBpZiAodHlwZW9mIGV4dHJhLmVycm9ycyAhPT0gJ3VuZGVmaW5lZCcpIHsKKyAgICAgICAgICAg
ICAgICBwcm9ncmFtLmVycm9ycyA9IGV4dHJhLmVycm9yczsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfSBjYXRjaCAoZSkgeworICAgICAgICAgICAgdGhyb3cgZTsKKyAgICAgICAgfSBmaW5hbGx5
IHsKKyAgICAgICAgICAgIGV4dHJhID0ge307CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4g
cHJvZ3JhbTsKKyAgICB9CisKKyAgICAvLyBTeW5jIHdpdGggKi5qc29uIG1hbmlmZXN0cy4KKyAg
ICBleHBvcnRzLnZlcnNpb24gPSAnMS4yLjInOworCisgICAgZXhwb3J0cy50b2tlbml6ZSA9IHRv
a2VuaXplOworCisgICAgZXhwb3J0cy5wYXJzZSA9IHBhcnNlOworCisgICAgLy8gRGVlcCBjb3B5
LgorICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi8KKyAgICBleHBvcnRzLlN5bnRheCA9IChm
dW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBuYW1lLCB0eXBlcyA9IHt9OworCisgICAgICAgIGlm
ICh0eXBlb2YgT2JqZWN0LmNyZWF0ZSA9PT0gJ2Z1bmN0aW9uJykgeworICAgICAgICAgICAgdHlw
ZXMgPSBPYmplY3QuY3JlYXRlKG51bGwpOworICAgICAgICB9CisKKyAgICAgICAgZm9yIChuYW1l
IGluIFN5bnRheCkgeworICAgICAgICAgICAgaWYgKFN5bnRheC5oYXNPd25Qcm9wZXJ0eShuYW1l
KSkgeworICAgICAgICAgICAgICAgIHR5cGVzW25hbWVdID0gU3ludGF4W25hbWVdOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKHR5cGVvZiBPYmplY3QuZnJlZXplID09
PSAnZnVuY3Rpb24nKSB7CisgICAgICAgICAgICBPYmplY3QuZnJlZXplKHR5cGVzKTsKKyAgICAg
ICAgfQorCisgICAgICAgIHJldHVybiB0eXBlczsKKyAgICB9KCkpOworCit9KShXZWJJbnNwZWN0
b3IuX2VzcHJpbWEpOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>