<?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>223735</bug_id>
          
          <creation_ts>2021-03-25 01:22:05 -0700</creation_ts>
          <short_desc>Add webgl/pending/conformance/context/context-attributes-alpha-depth-stencil-antialias.html for test update</short_desc>
          <delta_ts>2021-04-01 12:43:56 -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>WebGL</component>
          <version>WebKit Local Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=224071</see_also>
          <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>
          
          <blocked>223734</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Kimmo Kinnunen">kkinnunen</reporter>
          <assigned_to name="Kimmo Kinnunen">kkinnunen</assigned_to>
          <cc>dino</cc>
    
    <cc>kbr</cc>
    
    <cc>kkinnunen</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1743690</commentid>
    <comment_count>0</comment_count>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2021-03-25 01:22:05 -0700</bug_when>
    <thetext>Add webgl/pending/conformance/context/context-attributes-alpha-depth-stencil-antialias.html from webgl/2.0.y 
This makes it easier to add missing tests to the test suite when fixing a bug that is not covered by the test.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1743718</commentid>
    <comment_count>1</comment_count>
      <attachid>424228</attachid>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2021-03-25 03:35:26 -0700</bug_when>
    <thetext>Created attachment 424228
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1745063</commentid>
    <comment_count>2</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-03-30 01:51:22 -0700</bug_when>
    <thetext>Committed r275201: &lt;https://commits.webkit.org/r275201&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 424228.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1745064</commentid>
    <comment_count>3</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-03-30 01:52:14 -0700</bug_when>
    <thetext>&lt;rdar://problem/75995601&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>424228</attachid>
            <date>2021-03-25 03:35:26 -0700</date>
            <delta_ts>2021-03-30 01:51:22 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-223735-20210325123523.patch</filename>
            <type>text/plain</type>
            <size>178855</size>
            <attacher name="Kimmo Kinnunen">kkinnunen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc1MDEyCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFu
Z2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggYmU4OGEyZDM0ZTY2ZTAyMjA3NGFk
MDAzZjRhYTBjYmEzZjI2YjA0OC4uNmI1Mjg0ZWQwMTlmN2EzZDNhMjY0Yzk3ZmEzMGY2ZmQ0NDUw
MTE3MCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3Rz
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDI0IEBACisyMDIxLTAzLTI1ICBLaW1tbyBLaW5udW5lbiAg
PGtraW5udW5lbkBhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIHdlYmdsL3BlbmRpbmcvY29uZm9y
bWFuY2UvY29udGV4dC9jb250ZXh0LWF0dHJpYnV0ZXMtYWxwaGEtZGVwdGgtc3RlbmNpbC1hbnRp
YWxpYXMuaHRtbCBmb3IgdGVzdCB1cGRhdGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTIyMzczNQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIEFkZCBmZXcgdGVzdHMgaW4gcHJlcGFyYXRpb24gdG8gZml4IGJ1
Z3MgcmVsYXRlZCB0byB0aGUgdGVzdGVkIGZ1bmN0aW9uYWxpdHkgYW5kIHRvIGFkZCB0ZXN0cwor
ICAgICAgICB0ZXN0aW5nIHRoZSBmaXhlcy4KKworICAgICAgICAqIHdlYmdsL3BlbmRpbmcvUkVB
RE1FLm1kOiBBZGRlZC4KKyAgICAgICAgKiB3ZWJnbC9wZW5kaW5nL2NvbmZvcm1hbmNlL2NvbnRl
eHQvY29udGV4dC1hdHRyaWJ1dGVzLWFscGhhLWRlcHRoLXN0ZW5jaWwtYW50aWFsaWFzLWV4cGVj
dGVkLnR4dDogQWRkZWQuCisgICAgICAgICogd2ViZ2wvcGVuZGluZy9jb25mb3JtYW5jZS9jb250
ZXh0L2NvbnRleHQtYXR0cmlidXRlcy1hbHBoYS1kZXB0aC1zdGVuY2lsLWFudGlhbGlhcy5odG1s
OiBBZGRlZC4KKyAgICAgICAgKiB3ZWJnbC9wZW5kaW5nL3Jlc291cmNlcy9qcy10ZXN0LXByZS5q
czogQWRkZWQuCisgICAgICAgICogd2ViZ2wvcGVuZGluZy9yZXNvdXJjZXMvd2ViZ2xfdGVzdF9m
aWxlcy9jb25mb3JtYW5jZS9jb250ZXh0L2NvbnRleHQtYXR0cmlidXRlcy1hbHBoYS1kZXB0aC1z
dGVuY2lsLWFudGlhbGlhcy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3ZWJnbC9wZW5kaW5nL3Jl
c291cmNlcy93ZWJnbF90ZXN0X2ZpbGVzL2pzL2pzLXRlc3QtcG9zdC5qczogQWRkZWQuCisgICAg
ICAgICogd2ViZ2wvcGVuZGluZy9yZXNvdXJjZXMvd2ViZ2xfdGVzdF9maWxlcy9qcy9qcy10ZXN0
LXByZS5qczogQWRkZWQuCisgICAgICAgICogd2ViZ2wvcGVuZGluZy9yZXNvdXJjZXMvd2ViZ2xf
dGVzdF9maWxlcy9qcy93ZWJnbC10ZXN0LXV0aWxzLmpzOiBBZGRlZC4KKyAgICAgICAgKiB3ZWJn
bC9wZW5kaW5nL3Jlc291cmNlcy93ZWJnbF90ZXN0X2ZpbGVzL3Jlc291cmNlcy9qcy10ZXN0LXN0
eWxlLmNzczogQWRkZWQuCisgICAgICAgICogd2ViZ2wvcGVuZGluZy9yZXNvdXJjZXMvd2Via2l0
LXdlYmdsLXRlc3QtaGFybmVzcy5qczogQWRkZWQuCisKIDIwMjEtMDMtMjQgIExhdXJvIE1vdXJh
ICA8bG1vdXJhQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dUS10gUmUtc2tpcCBtb2Rlcm4tbWVk
aWEtY29udHJvbHMgdGVzdHMgYWZ0ZXIgcjI3NDgxMApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
d2ViZ2wvcGVuZGluZy9SRUFETUUubWQgYi9MYXlvdXRUZXN0cy93ZWJnbC9wZW5kaW5nL1JFQURN
RS5tZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5iNGI0MGNhNWNkMThiY2I4NGVmNjBjNTczN2I0ZmI4M2ViOTQxOWQz
Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ2wvcGVuZGluZy9SRUFETUUubWQK
QEAgLTAsMCArMSBAQAorV2ViR0wgcmVsYXRlZCB0ZXN0cyB0aGF0IGNvbnRhaW4gY2hhbmdlcyB0
byBXZWJHTCBjb25mb3JtYW5jZSB0ZXN0IHN1aXRlIGFuZCBhcmUgcGVuZGluZyB1cHN0cmVhbWlu
Zy4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdsL3BlbmRpbmcvY29uZm9ybWFuY2UvY29u
dGV4dC9jb250ZXh0LWF0dHJpYnV0ZXMtYWxwaGEtZGVwdGgtc3RlbmNpbC1hbnRpYWxpYXMtZXhw
ZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvd2ViZ2wvcGVuZGluZy9jb25mb3JtYW5jZS9jb250ZXh0
L2NvbnRleHQtYXR0cmlidXRlcy1hbHBoYS1kZXB0aC1zdGVuY2lsLWFudGlhbGlhcy1leHBlY3Rl
ZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uMjFkODgzMjdiNzY5ZmQ0OGViZWEzZGZjZmNiMGFkNzUwMmRhMjUz
YwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdsL3BlbmRpbmcvY29uZm9ybWFu
Y2UvY29udGV4dC9jb250ZXh0LWF0dHJpYnV0ZXMtYWxwaGEtZGVwdGgtc3RlbmNpbC1hbnRpYWxp
YXMtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsNCBAQAorVGhpcyB0ZXN0IHJ1bnMgdGhlIFdlYkdM
IFRlc3QgbGlzdGVkIGJlbG93IGluIGFuIGlmcmFtZSBhbmQgcmVwb3J0cyBQQVNTIG9yIEZBSUwu
CisKK1Rlc3Q6IC4uLy4uL3Jlc291cmNlcy93ZWJnbF90ZXN0X2ZpbGVzL2NvbmZvcm1hbmNlL2Nv
bnRleHQvY29udGV4dC1hdHRyaWJ1dGVzLWFscGhhLWRlcHRoLXN0ZW5jaWwtYW50aWFsaWFzLmh0
bWw/d2ViZ2xWZXJzaW9uPTIKK1sgUEFTUyBdIEFsbCB0ZXN0cyBwYXNzZWQKZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL3dlYmdsL3BlbmRpbmcvY29uZm9ybWFuY2UvY29udGV4dC9jb250ZXh0LWF0
dHJpYnV0ZXMtYWxwaGEtZGVwdGgtc3RlbmNpbC1hbnRpYWxpYXMuaHRtbCBiL0xheW91dFRlc3Rz
L3dlYmdsL3BlbmRpbmcvY29uZm9ybWFuY2UvY29udGV4dC9jb250ZXh0LWF0dHJpYnV0ZXMtYWxw
aGEtZGVwdGgtc3RlbmNpbC1hbnRpYWxpYXMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43ODM5ZTI3N2RiYzc1
MzQyNTMxYWY2N2NlZjRiZWYyYTljOTg2OTRhCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVz
dHMvd2ViZ2wvcGVuZGluZy9jb25mb3JtYW5jZS9jb250ZXh0L2NvbnRleHQtYXR0cmlidXRlcy1h
bHBoYS1kZXB0aC1zdGVuY2lsLWFudGlhbGlhcy5odG1sCkBAIC0wLDAgKzEsMTggQEAKKzwhLS0g
VGhpcyBmaWxlIGlzIG1hbnVhbGx5IGVkaXRlZCBhbmQgc2hvdWxkIGJlIGRlbGV0ZWQgb25jZSB0
aGUgdGVzdCBpcyBtZXJnZWQgaW4gV2ViR0wgY29uZm9ybWFuY2UgdGVzdHMgYW5kIGltcG9ydGVk
IGJhY2sgdG8gTGF5b3V0VGVzdHMuIC0tPgorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFk
PgorPG1ldGEgY2hhcnNldD0idXRmLTgiPgorPHRpdGxlPldlYkdMIENvbmZvcm1hbmNlIFRlc3Qg
V3JhcHBlciBmb3IgY29udGV4dC1hdHRyaWJ1dGVzLWFscGhhLWRlcHRoLXN0ZW5jaWwtYW50aWFs
aWFzLmh0bWw8L3RpdGxlPgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iLi4v
Li4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgdHlwZT0idGV4
dC9qYXZhc2NyaXB0IiBzcmM9Ii4uLy4uL3Jlc291cmNlcy93ZWJraXQtd2ViZ2wtdGVzdC1oYXJu
ZXNzLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHA+VGhpcyB0ZXN0IHJ1bnMgdGhl
IFdlYkdMIFRlc3QgbGlzdGVkIGJlbG93IGluIGFuIGlmcmFtZSBhbmQgcmVwb3J0cyBQQVNTIG9y
IEZBSUwuPC9wPgorVGVzdDogPGEgaHJlZj0iLi4vLi4vcmVzb3VyY2VzL3dlYmdsX3Rlc3RfZmls
ZXMvY29uZm9ybWFuY2UvY29udGV4dC9jb250ZXh0LWF0dHJpYnV0ZXMtYWxwaGEtZGVwdGgtc3Rl
bmNpbC1hbnRpYWxpYXMuaHRtbD93ZWJnbFZlcnNpb249MiI+Li4vLi4vcmVzb3VyY2VzL3dlYmds
X3Rlc3RfZmlsZXMvY29uZm9ybWFuY2UvY29udGV4dC9jb250ZXh0LWF0dHJpYnV0ZXMtYWxwaGEt
ZGVwdGgtc3RlbmNpbC1hbnRpYWxpYXMuaHRtbD93ZWJnbFZlcnNpb249MjwvYT4KKzxkaXYgaWQ9
ImlmcmFtZSI+Cis8aWZyYW1lIHNyYz0iLi4vLi4vcmVzb3VyY2VzL3dlYmdsX3Rlc3RfZmlsZXMv
Y29uZm9ybWFuY2UvY29udGV4dC9jb250ZXh0LWF0dHJpYnV0ZXMtYWxwaGEtZGVwdGgtc3RlbmNp
bC1hbnRpYWxpYXMuaHRtbD93ZWJnbFZlcnNpb249MiIgd2lkdGg9IjgwMCIgaGVpZ2h0PSI2MDAi
PjwvaWZyYW1lPgorPC9kaXY+Cis8ZGl2IGlkPSJyZXN1bHQiPjwvZGl2PgorPC9ib2R5PgorPC9o
dG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ2wvcGVuZGluZy9yZXNvdXJjZXMvanMt
dGVzdC1wcmUuanMgYi9MYXlvdXRUZXN0cy93ZWJnbC9wZW5kaW5nL3Jlc291cmNlcy9qcy10ZXN0
LXByZS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi43NWJkYmNlZDcxMTYwZjExNjNjNjExNTNhNmM2YTNiYjFiZDAw
OWI1Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ2wvcGVuZGluZy9yZXNvdXJj
ZXMvanMtdGVzdC1wcmUuanMKQEAgLTAsMCArMSw1MTkgQEAKKy8qCisqKiBDb3B5cmlnaHQgKGMp
IDIwMTIgVGhlIEtocm9ub3MgR3JvdXAgSW5jLgorKioKKyoqIFBlcm1pc3Npb24gaXMgaGVyZWJ5
IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisqKiBj
b3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kL29yIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxl
cyAodGhlCisqKiAiTWF0ZXJpYWxzIiksIHRvIGRlYWwgaW4gdGhlIE1hdGVyaWFscyB3aXRob3V0
IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKKyoqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRz
IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKKyoqIGRpc3RyaWJ1dGUsIHN1
YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgTWF0ZXJpYWxzLCBhbmQgdG8KKyoq
IHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIE1hdGVyaWFscyBhcmUgZnVybmlzaGVkIHRvIGRv
IHNvLCBzdWJqZWN0IHRvCisqKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisqKgorKiogVGhl
IGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwg
YmUgaW5jbHVkZWQKKyoqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2Yg
dGhlIE1hdGVyaWFscy4KKyoqCisqKiBUSEUgTUFURVJJQUxTIEFSRSBQUk9WSURFRCAiQVMgSVMi
LCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorKiogRVhQUkVTUyBPUiBJTVBMSUVELCBJ
TkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisqKiBNRVJDSEFO
VEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5H
RU1FTlQuCisqKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9M
REVSUyBCRSBMSUFCTEUgRk9SIEFOWQorKiogQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklM
SVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwKKyoqIFRPUlQgT1IgT1RIRVJX
SVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFCisqKiBN
QVRFUklBTFMgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgTUFURVJJQUxTLgor
Ki8KKworKGZ1bmN0aW9uKCkgeworICB2YXIgdGVzdEhhcm5lc3NJbml0aWFsaXplZCA9IGZhbHNl
OworCisgIHZhciBpbml0Tm9uS2hyb25vc0ZyYW1ld29yayA9IGZ1bmN0aW9uKCkgeworICAgIGlm
ICh0ZXN0SGFybmVzc0luaXRpYWxpemVkKSB7CisgICAgICByZXR1cm47CisgICAgfQorICAgIHRl
c3RIYXJuZXNzSW5pdGlhbGl6ZWQgPSB0cnVlOworCisgICAgLyogLS0gcGxhZm9ybSBzcGVjaWZp
YyBjb2RlIC0tICovCisKKyAgICAvLyBXZWJLaXQgU3BlY2lmaWMgY29kZS4gQWRkIHlvdXIgY29k
ZSBoZXJlLgorICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lciAmJiAhd2luZG93LmxheW91dFRlc3RD
b250cm9sbGVyKSB7CisgICAgICB3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIgPSB3aW5kb3cu
dGVzdFJ1bm5lcjsKKyAgICB9CisKKyAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVy
KSB7CisgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgICBsYXlv
dXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CisgICAgfQorICAgIGlmICh3aW5kb3cu
aW50ZXJuYWxzKSB7CisgICAgICAvLyBUaGUgV2ViS2l0IHRlc3Rpbmcgc3lzdGVtIGNvbXBhcmVz
IGNvbnNvbGUgb3V0cHV0LgorICAgICAgLy8gQmVjYXVzZSB0aGUgb3V0cHV0IG9mIHRoZSBXZWJH
TCBUZXN0cyBpcyBHUFUgZGVwZW5kZW50CisgICAgICAvLyB3ZSB0dXJuIG9mZiBjb25zb2xlIG1l
c3NhZ2VzLgorICAgICAgd2luZG93LmNvbnNvbGUubG9nID0gZnVuY3Rpb24oKSB7IH07CisgICAg
ICB3aW5kb3cuY29uc29sZS5lcnJvciA9IGZ1bmN0aW9uKCkgeyB9OworICAgICAgd2luZG93Lmlu
dGVybmFscy5zZXR0aW5ncy5zZXRXZWJHTEVycm9yc1RvQ29uc29sZUVuYWJsZWQoZmFsc2UpOwor
CisgICAgICAvLyBSQUYgZG9lc24ndCB3b3JrIGluIExheW91dFRlc3RzLiBEaXNhYmxlIGl0IHNv
IHRoZSB0ZXN0cyB3aWxsCisgICAgICAvLyB1c2Ugc2V0VGltZW91dCBpbnN0ZWFkLgorICAgICAg
d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSA9IHVuZGVmaW5lZDsKKyAgICAgIHdpbmRvdy53
ZWJraXRSZXF1ZXN0QW5pbWF0aW9uRnJhbWUgPSB1bmRlZmluZWQ7CisgICAgfQorCisgICAgLyog
LS0gZW5kIHBsYXRmb3JtIHNwZWNpZmljIGNvZGUgLS0qLworICB9CisKKyAgdGhpcy5pbml0VGVz
dGluZ0hhcm5lc3MgPSBmdW5jdGlvbigpIHsKKyAgICBpbml0Tm9uS2hyb25vc0ZyYW1ld29yaygp
OworICB9Cit9KCkpOworCitmdW5jdGlvbiBub25LaHJvbm9zRnJhbWV3b3JrTm90aWZ5RG9uZSgp
IHsKKyAgLy8gV2ViS2l0IFNwZWNpZmljIGNvZGUuIEFkZCB5b3VyIGNvZGUgaGVyZS4KKyAgaWYg
KHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgIGxheW91dFRlc3RDb250cm9sbGVy
Lm5vdGlmeURvbmUoKTsKKyAgfQorfQorCitmdW5jdGlvbiByZXBvcnRUZXN0UmVzdWx0c1RvSGFy
bmVzcyhzdWNjZXNzLCBtc2cpIHsKKyAgaWYgKHdpbmRvdy5wYXJlbnQud2ViZ2xUZXN0SGFybmVz
cykgeworICAgIHdpbmRvdy5wYXJlbnQud2ViZ2xUZXN0SGFybmVzcy5yZXBvcnRSZXN1bHRzKHdp
bmRvdy5sb2NhdGlvbi5wYXRobmFtZSwgc3VjY2VzcywgbXNnKTsKKyAgfQorfQorCitmdW5jdGlv
biBub3RpZnlGaW5pc2hlZFRvSGFybmVzcygpIHsKKyAgaWYgKHdpbmRvdy5wYXJlbnQud2ViZ2xU
ZXN0SGFybmVzcykgeworICAgIHdpbmRvdy5wYXJlbnQud2ViZ2xUZXN0SGFybmVzcy5ub3RpZnlG
aW5pc2hlZCh3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUpOworICB9CisgIGlmICh3aW5kb3cubm9u
S2hyb25vc0ZyYW1ld29ya05vdGlmeURvbmUpIHsKKyAgICB3aW5kb3cubm9uS2hyb25vc0ZyYW1l
d29ya05vdGlmeURvbmUoKTsKKyAgfQorfQorCitmdW5jdGlvbiBfbG9nVG9Db25zb2xlKG1zZykK
K3sKKyAgICBpZiAod2luZG93LmNvbnNvbGUpCisgICAgICB3aW5kb3cuY29uc29sZS5sb2cobXNn
KTsKK30KKwordmFyIF9qc1Rlc3RQcmVWZXJib3NlTG9nZ2luZyA9IGZhbHNlOworCitmdW5jdGlv
biBlbmFibGVKU1Rlc3RQcmVWZXJib3NlTG9nZ2luZygpCit7CisgICAgX2pzVGVzdFByZVZlcmJv
c2VMb2dnaW5nID0gdHJ1ZTsKK30KKworZnVuY3Rpb24gZGVzY3JpcHRpb24obXNnKQoreworICAg
IGluaXRUZXN0aW5nSGFybmVzcygpOworICAgIGlmIChtc2cgPT09IHVuZGVmaW5lZCkgeworICAg
ICAgbXNnID0gZG9jdW1lbnQudGl0bGU7CisgICAgfQorICAgIC8vIEZvciBNU0lFIDYgY29tcGF0
aWJpbGl0eQorICAgIHZhciBzcGFuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpOwor
ICAgIHNwYW4uaW5uZXJIVE1MID0gJzxwPicgKyBtc2cgKyAnPC9wPjxwPk9uIHN1Y2Nlc3MsIHlv
dSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiPHNwYW4gY2xhc3M9InBhc3MiPlBBU1M8L3NwYW4+IiBt
ZXNzYWdlcywgZm9sbG93ZWQgYnkgIjxzcGFuIGNsYXNzPSJwYXNzIj5URVNUIENPTVBMRVRFPC9z
cGFuPiIuPC9wPic7CisgICAgdmFyIGRlc2NyaXB0aW9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoImRlc2NyaXB0aW9uIik7CisgICAgaWYgKGRlc2NyaXB0aW9uLmZpcnN0Q2hpbGQpCisgICAg
ICAgIGRlc2NyaXB0aW9uLnJlcGxhY2VDaGlsZChzcGFuLCBkZXNjcmlwdGlvbi5maXJzdENoaWxk
KTsKKyAgICBlbHNlCisgICAgICAgIGRlc2NyaXB0aW9uLmFwcGVuZENoaWxkKHNwYW4pOworICAg
IGlmIChfanNUZXN0UHJlVmVyYm9zZUxvZ2dpbmcpIHsKKyAgICAgICAgX2xvZ1RvQ29uc29sZSht
c2cpOworICAgIH0KK30KKworZnVuY3Rpb24gX2FkZFNwYW4oY29udGVudHMpCit7CisgICAgdmFy
IHNwYW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7CisgICAgZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoImNvbnNvbGUiKS5hcHBlbmRDaGlsZChzcGFuKTsgLy8gaW5zZXJ0IGl0IGZp
cnN0IHNvIFhIVE1MIGtub3dzIHRoZSBuYW1lc3BhY2UKKyAgICBzcGFuLmlubmVySFRNTCA9IGNv
bnRlbnRzICsgJzxiciAvPic7Cit9CisKK2Z1bmN0aW9uIGRlYnVnKG1zZykKK3sKKyAgICBfYWRk
U3Bhbihtc2cpOworICAgIGlmIChfanNUZXN0UHJlVmVyYm9zZUxvZ2dpbmcpIHsKKwlfbG9nVG9D
b25zb2xlKG1zZyk7CisgICAgfQorfQorCitmdW5jdGlvbiBlc2NhcGVIVE1MKHRleHQpCit7Cisg
ICAgcmV0dXJuIHRleHQucmVwbGFjZSgvJi9nLCAiJmFtcDsiKS5yZXBsYWNlKC88L2csICImbHQ7
Iik7Cit9CisKK2Z1bmN0aW9uIHRlc3RQYXNzZWQobXNnKQoreworICAgIHJlcG9ydFRlc3RSZXN1
bHRzVG9IYXJuZXNzKHRydWUsIG1zZyk7CisgICAgX2FkZFNwYW4oJzxzcGFuPjxzcGFuIGNsYXNz
PSJwYXNzIj5QQVNTPC9zcGFuPiAnICsgZXNjYXBlSFRNTChtc2cpICsgJzwvc3Bhbj4nKTsKKyAg
ICBpZiAoX2pzVGVzdFByZVZlcmJvc2VMb2dnaW5nKSB7CisJX2xvZ1RvQ29uc29sZSgnUEFTUyAn
ICsgbXNnKTsKKyAgICB9Cit9CisKK2Z1bmN0aW9uIHRlc3RGYWlsZWQobXNnKQoreworICAgIHJl
cG9ydFRlc3RSZXN1bHRzVG9IYXJuZXNzKGZhbHNlLCBtc2cpOworICAgIF9hZGRTcGFuKCc8c3Bh
bj48c3BhbiBjbGFzcz0iZmFpbCI+RkFJTDwvc3Bhbj4gJyArIGVzY2FwZUhUTUwobXNnKSArICc8
L3NwYW4+Jyk7CisgICAgX2xvZ1RvQ29uc29sZSgnRkFJTCAnICsgbXNnKTsKK30KKworZnVuY3Rp
b24gYXJlQXJyYXlzRXF1YWwoX2EsIF9iKQoreworICAgIHRyeSB7CisgICAgICAgIGlmIChfYS5s
ZW5ndGggIT09IF9iLmxlbmd0aCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCBfYS5sZW5ndGg7IGkrKykKKyAgICAgICAgICAgIGlmIChfYVtp
XSAhPT0gX2JbaV0pCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0gY2F0Y2gg
KGV4KSB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9
CisKK2Z1bmN0aW9uIGlzTWludXNaZXJvKG4pCit7CisgICAgLy8gdGhlIG9ubHkgd2F5IHRvIHRl
bGwgMCBmcm9tIC0wIGluIEpTIGlzIHRoZSBmYWN0IHRoYXQgMS8tMCBpcworICAgIC8vIC1JbmZp
bml0eSBpbnN0ZWFkIG9mIEluZmluaXR5CisgICAgcmV0dXJuIG4gPT09IDAgJiYgMS9uIDwgMDsK
K30KKworZnVuY3Rpb24gaXNSZXN1bHRDb3JyZWN0KF9hY3R1YWwsIF9leHBlY3RlZCkKK3sKKyAg
ICBpZiAoX2V4cGVjdGVkID09PSAwKQorICAgICAgICByZXR1cm4gX2FjdHVhbCA9PT0gX2V4cGVj
dGVkICYmICgxL19hY3R1YWwpID09PSAoMS9fZXhwZWN0ZWQpOworICAgIGlmIChfYWN0dWFsID09
PSBfZXhwZWN0ZWQpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIGlmICh0eXBlb2YoX2V4cGVj
dGVkKSA9PSAibnVtYmVyIiAmJiBpc05hTihfZXhwZWN0ZWQpKQorICAgICAgICByZXR1cm4gdHlw
ZW9mKF9hY3R1YWwpID09ICJudW1iZXIiICYmIGlzTmFOKF9hY3R1YWwpOworICAgIGlmIChPYmpl
Y3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoX2V4cGVjdGVkKSA9PSBPYmplY3QucHJvdG90eXBl
LnRvU3RyaW5nLmNhbGwoW10pKQorICAgICAgICByZXR1cm4gYXJlQXJyYXlzRXF1YWwoX2FjdHVh
bCwgX2V4cGVjdGVkKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Z1bmN0aW9uIHN0cmluZ2lm
eSh2KQoreworICAgIGlmICh2ID09PSAwICYmIDEvdiA8IDApCisgICAgICAgIHJldHVybiAiLTAi
OworICAgIGVsc2UgcmV0dXJuICIiICsgdjsKK30KKworZnVuY3Rpb24gZXZhbEFuZExvZyhfYSkK
K3sKKyAgaWYgKHR5cGVvZiBfYSAhPSAic3RyaW5nIikKKyAgICBkZWJ1ZygiV0FSTjogdHJ5QW5k
TG9nKCkgZXhwZWN0cyBhIHN0cmluZyBhcmd1bWVudCIpOworCisgIC8vIExvZyBmaXJzdCBpbiBj
YXNlIHRoaW5ncyBnbyBob3JyaWJseSB3cm9uZyBvciB0aGlzIGNhdXNlcyBhIHN5bmMgZXZlbnQu
CisgIGRlYnVnKF9hKTsKKworICB2YXIgX2F2OworICB0cnkgeworICAgICBfYXYgPSBldmFsKF9h
KTsKKyAgfSBjYXRjaCAoZSkgeworICAgIHRlc3RGYWlsZWQoX2EgKyAiIHRocmV3IGV4Y2VwdGlv
biAiICsgZSk7CisgIH0KKyAgcmV0dXJuIF9hdjsKK30KKworZnVuY3Rpb24gc2hvdWxkQmUoX2Es
IF9iLCBxdWlldCkKK3sKKyAgICBpZiAodHlwZW9mIF9hICE9ICJzdHJpbmciIHx8IHR5cGVvZiBf
YiAhPSAic3RyaW5nIikKKyAgICAgICAgZGVidWcoIldBUk46IHNob3VsZEJlKCkgZXhwZWN0cyBz
dHJpbmcgYXJndW1lbnRzIik7CisgICAgdmFyIGV4Y2VwdGlvbjsKKyAgICB2YXIgX2F2OworICAg
IHRyeSB7CisgICAgICAgIF9hdiA9IGV2YWwoX2EpOworICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAg
ICAgZXhjZXB0aW9uID0gZTsKKyAgICB9CisgICAgdmFyIF9idiA9IGV2YWwoX2IpOworCisgICAg
aWYgKGV4Y2VwdGlvbikKKyAgICAgICAgdGVzdEZhaWxlZChfYSArICIgc2hvdWxkIGJlICIgKyBf
YnYgKyAiLiBUaHJldyBleGNlcHRpb24gIiArIGV4Y2VwdGlvbik7CisgICAgZWxzZSBpZiAoaXNS
ZXN1bHRDb3JyZWN0KF9hdiwgX2J2KSkgeworICAgICAgICBpZiAoIXF1aWV0KSB7CisgICAgICAg
ICAgICB0ZXN0UGFzc2VkKF9hICsgIiBpcyAiICsgX2IpOworICAgICAgICB9CisgICAgfSBlbHNl
IGlmICh0eXBlb2YoX2F2KSA9PSB0eXBlb2YoX2J2KSkKKyAgICAgICAgdGVzdEZhaWxlZChfYSAr
ICIgc2hvdWxkIGJlICIgKyBfYnYgKyAiLiBXYXMgIiArIHN0cmluZ2lmeShfYXYpICsgIi4iKTsK
KyAgICBlbHNlCisgICAgICAgIHRlc3RGYWlsZWQoX2EgKyAiIHNob3VsZCBiZSAiICsgX2J2ICsg
IiAob2YgdHlwZSAiICsgdHlwZW9mIF9idiArICIpLiBXYXMgIiArIF9hdiArICIgKG9mIHR5cGUg
IiArIHR5cGVvZiBfYXYgKyAiKS4iKTsKK30KKworZnVuY3Rpb24gc2hvdWxkTm90QmUoX2EsIF9i
LCBxdWlldCkKK3sKKyAgICBpZiAodHlwZW9mIF9hICE9ICJzdHJpbmciIHx8IHR5cGVvZiBfYiAh
PSAic3RyaW5nIikKKyAgICAgICAgZGVidWcoIldBUk46IHNob3VsZE5vdEJlKCkgZXhwZWN0cyBz
dHJpbmcgYXJndW1lbnRzIik7CisgICAgdmFyIGV4Y2VwdGlvbjsKKyAgICB2YXIgX2F2OworICAg
IHRyeSB7CisgICAgICAgIF9hdiA9IGV2YWwoX2EpOworICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAg
ICAgZXhjZXB0aW9uID0gZTsKKyAgICB9CisgICAgdmFyIF9idiA9IGV2YWwoX2IpOworCisgICAg
aWYgKGV4Y2VwdGlvbikKKyAgICAgICAgdGVzdEZhaWxlZChfYSArICIgc2hvdWxkIG5vdCBiZSAi
ICsgX2J2ICsgIi4gVGhyZXcgZXhjZXB0aW9uICIgKyBleGNlcHRpb24pOworICAgIGVsc2UgaWYg
KCFpc1Jlc3VsdENvcnJlY3QoX2F2LCBfYnYpKSB7CisgICAgICAgIGlmICghcXVpZXQpIHsKKyAg
ICAgICAgICAgIHRlc3RQYXNzZWQoX2EgKyAiIGlzIG5vdCAiICsgX2IpOworICAgICAgICB9Cisg
ICAgfSBlbHNlCisgICAgICAgIHRlc3RGYWlsZWQoX2EgKyAiIHNob3VsZCBub3QgYmUgIiArIF9i
diArICIuIik7Cit9CisKK2Z1bmN0aW9uIHNob3VsZEJlVHJ1ZShfYSkgeyBzaG91bGRCZShfYSwg
InRydWUiKTsgfQorZnVuY3Rpb24gc2hvdWxkQmVGYWxzZShfYSkgeyBzaG91bGRCZShfYSwgImZh
bHNlIik7IH0KK2Z1bmN0aW9uIHNob3VsZEJlTmFOKF9hKSB7IHNob3VsZEJlKF9hLCAiTmFOIik7
IH0KK2Z1bmN0aW9uIHNob3VsZEJlTnVsbChfYSkgeyBzaG91bGRCZShfYSwgIm51bGwiKTsgfQor
CitmdW5jdGlvbiBzaG91bGRCZUVxdWFsVG9TdHJpbmcoYSwgYikKK3sKKyAgdmFyIHVuZXZhbGVk
U3RyaW5nID0gJyInICsgYi5yZXBsYWNlKC8iL2csICJcIiIpICsgJyInOworICBzaG91bGRCZShh
LCB1bmV2YWxlZFN0cmluZyk7Cit9CisKK2Z1bmN0aW9uIHNob3VsZEV2YWx1YXRlVG8oYWN0dWFs
LCBleHBlY3RlZCkgeworICAvLyBBIGdlbmVyYWwtcHVycG9zZSBjb21wYXJhdG9yLiAgJ2FjdHVh
bCcgc2hvdWxkIGJlIGEgc3RyaW5nIHRvIGJlCisgIC8vIGV2YWx1YXRlZCwgYXMgZm9yIHNob3Vs
ZEJlKCkuICdleHBlY3RlZCcgbWF5IGJlIGFueSB0eXBlIGFuZCB3aWxsIGJlCisgIC8vIHVzZWQg
d2l0aG91dCBiZWluZyBldmFsJ2VkLgorICBpZiAoZXhwZWN0ZWQgPT0gbnVsbCkgeworICAgIC8v
IERvIHRoaXMgYmVmb3JlIHRoZSBvYmplY3QgdGVzdCwgc2luY2UgbnVsbCBpcyBvZiB0eXBlICdv
YmplY3QnLgorICAgIHNob3VsZEJlTnVsbChhY3R1YWwpOworICB9IGVsc2UgaWYgKHR5cGVvZiBl
eHBlY3RlZCA9PSAidW5kZWZpbmVkIikgeworICAgIHNob3VsZEJlVW5kZWZpbmVkKGFjdHVhbCk7
CisgIH0gZWxzZSBpZiAodHlwZW9mIGV4cGVjdGVkID09ICJmdW5jdGlvbiIpIHsKKyAgICAvLyBB
bGwgdGhpcyBmdXNzIGlzIHRvIGF2b2lkIHRoZSBzdHJpbmctYXJnIHdhcm5pbmcgZnJvbSBzaG91
bGRCZSgpLgorICAgIHRyeSB7CisgICAgICBhY3R1YWxWYWx1ZSA9IGV2YWwoYWN0dWFsKTsKKyAg
ICB9IGNhdGNoIChlKSB7CisgICAgICB0ZXN0RmFpbGVkKCJFdmFsdWF0aW5nICIgKyBhY3R1YWwg
KyAiOiBUaHJldyBleGNlcHRpb24gIiArIGUpOworICAgICAgcmV0dXJuOworICAgIH0KKyAgICBz
aG91bGRCZSgiJyIgKyBhY3R1YWxWYWx1ZS50b1N0cmluZygpLnJlcGxhY2UoL1xuL2csICIiKSAr
ICInIiwKKyAgICAgICAgICAgICAiJyIgKyBleHBlY3RlZC50b1N0cmluZygpLnJlcGxhY2UoL1xu
L2csICIiKSArICInIik7CisgIH0gZWxzZSBpZiAodHlwZW9mIGV4cGVjdGVkID09ICJvYmplY3Qi
KSB7CisgICAgc2hvdWxkQmVUcnVlKGFjdHVhbCArICIgPT0gJyIgKyBleHBlY3RlZCArICInIik7
CisgIH0gZWxzZSBpZiAodHlwZW9mIGV4cGVjdGVkID09ICJzdHJpbmciKSB7CisgICAgc2hvdWxk
QmUoYWN0dWFsLCBleHBlY3RlZCk7CisgIH0gZWxzZSBpZiAodHlwZW9mIGV4cGVjdGVkID09ICJi
b29sZWFuIikgeworICAgIHNob3VsZEJlKCJ0eXBlb2YgIiArIGFjdHVhbCwgIidib29sZWFuJyIp
OworICAgIGlmIChleHBlY3RlZCkKKyAgICAgIHNob3VsZEJlVHJ1ZShhY3R1YWwpOworICAgIGVs
c2UKKyAgICAgIHNob3VsZEJlRmFsc2UoYWN0dWFsKTsKKyAgfSBlbHNlIGlmICh0eXBlb2YgZXhw
ZWN0ZWQgPT0gIm51bWJlciIpIHsKKyAgICBzaG91bGRCZShhY3R1YWwsIHN0cmluZ2lmeShleHBl
Y3RlZCkpOworICB9IGVsc2UgeworICAgIGRlYnVnKGV4cGVjdGVkICsgIiBpcyB1bmtub3duIHR5
cGUgIiArIHR5cGVvZiBleHBlY3RlZCk7CisgICAgc2hvdWxkQmVUcnVlKGFjdHVhbCwgIiciICAr
ZXhwZWN0ZWQudG9TdHJpbmcoKSArICInIik7CisgIH0KK30KKworZnVuY3Rpb24gc2hvdWxkQmVO
b25aZXJvKF9hKQoreworICB2YXIgZXhjZXB0aW9uOworICB2YXIgX2F2OworICB0cnkgeworICAg
ICBfYXYgPSBldmFsKF9hKTsKKyAgfSBjYXRjaCAoZSkgeworICAgICBleGNlcHRpb24gPSBlOwor
ICB9CisKKyAgaWYgKGV4Y2VwdGlvbikKKyAgICB0ZXN0RmFpbGVkKF9hICsgIiBzaG91bGQgYmUg
bm9uLXplcm8uIFRocmV3IGV4Y2VwdGlvbiAiICsgZXhjZXB0aW9uKTsKKyAgZWxzZSBpZiAoX2F2
ICE9IDApCisgICAgdGVzdFBhc3NlZChfYSArICIgaXMgbm9uLXplcm8uIik7CisgIGVsc2UKKyAg
ICB0ZXN0RmFpbGVkKF9hICsgIiBzaG91bGQgYmUgbm9uLXplcm8uIFdhcyAiICsgX2F2KTsKK30K
KworZnVuY3Rpb24gc2hvdWxkQmVOb25OdWxsKF9hKQoreworICB2YXIgZXhjZXB0aW9uOworICB2
YXIgX2F2OworICB0cnkgeworICAgICBfYXYgPSBldmFsKF9hKTsKKyAgfSBjYXRjaCAoZSkgewor
ICAgICBleGNlcHRpb24gPSBlOworICB9CisKKyAgaWYgKGV4Y2VwdGlvbikKKyAgICB0ZXN0RmFp
bGVkKF9hICsgIiBzaG91bGQgYmUgbm9uLW51bGwuIFRocmV3IGV4Y2VwdGlvbiAiICsgZXhjZXB0
aW9uKTsKKyAgZWxzZSBpZiAoX2F2ICE9IG51bGwpCisgICAgdGVzdFBhc3NlZChfYSArICIgaXMg
bm9uLW51bGwuIik7CisgIGVsc2UKKyAgICB0ZXN0RmFpbGVkKF9hICsgIiBzaG91bGQgYmUgbm9u
LW51bGwuIFdhcyAiICsgX2F2KTsKK30KKworZnVuY3Rpb24gc2hvdWxkQmVVbmRlZmluZWQoX2Ep
Cit7CisgIHZhciBleGNlcHRpb247CisgIHZhciBfYXY7CisgIHRyeSB7CisgICAgIF9hdiA9IGV2
YWwoX2EpOworICB9IGNhdGNoIChlKSB7CisgICAgIGV4Y2VwdGlvbiA9IGU7CisgIH0KKworICBp
ZiAoZXhjZXB0aW9uKQorICAgIHRlc3RGYWlsZWQoX2EgKyAiIHNob3VsZCBiZSB1bmRlZmluZWQu
IFRocmV3IGV4Y2VwdGlvbiAiICsgZXhjZXB0aW9uKTsKKyAgZWxzZSBpZiAodHlwZW9mIF9hdiA9
PSAidW5kZWZpbmVkIikKKyAgICB0ZXN0UGFzc2VkKF9hICsgIiBpcyB1bmRlZmluZWQuIik7Cisg
IGVsc2UKKyAgICB0ZXN0RmFpbGVkKF9hICsgIiBzaG91bGQgYmUgdW5kZWZpbmVkLiBXYXMgIiAr
IF9hdik7Cit9CisKK2Z1bmN0aW9uIHNob3VsZEJlRGVmaW5lZChfYSkKK3sKKyAgdmFyIGV4Y2Vw
dGlvbjsKKyAgdmFyIF9hdjsKKyAgdHJ5IHsKKyAgICAgX2F2ID0gZXZhbChfYSk7CisgIH0gY2F0
Y2ggKGUpIHsKKyAgICAgZXhjZXB0aW9uID0gZTsKKyAgfQorCisgIGlmIChleGNlcHRpb24pCisg
ICAgdGVzdEZhaWxlZChfYSArICIgc2hvdWxkIGJlIGRlZmluZWQuIFRocmV3IGV4Y2VwdGlvbiAi
ICsgZXhjZXB0aW9uKTsKKyAgZWxzZSBpZiAoX2F2ICE9PSB1bmRlZmluZWQpCisgICAgdGVzdFBh
c3NlZChfYSArICIgaXMgZGVmaW5lZC4iKTsKKyAgZWxzZQorICAgIHRlc3RGYWlsZWQoX2EgKyAi
IHNob3VsZCBiZSBkZWZpbmVkLiBXYXMgIiArIF9hdik7Cit9CisKK2Z1bmN0aW9uIHNob3VsZEJl
R3JlYXRlclRoYW5PckVxdWFsKF9hLCBfYikgeworICAgIGlmICh0eXBlb2YgX2EgIT0gInN0cmlu
ZyIgfHwgdHlwZW9mIF9iICE9ICJzdHJpbmciKQorICAgICAgICBkZWJ1ZygiV0FSTjogc2hvdWxk
QmVHcmVhdGVyVGhhbk9yRXF1YWwgZXhwZWN0cyBzdHJpbmcgYXJndW1lbnRzIik7CisKKyAgICB2
YXIgZXhjZXB0aW9uOworICAgIHZhciBfYXY7CisgICAgdHJ5IHsKKyAgICAgICAgX2F2ID0gZXZh
bChfYSk7CisgICAgfSBjYXRjaCAoZSkgeworICAgICAgICBleGNlcHRpb24gPSBlOworICAgIH0K
KyAgICB2YXIgX2J2ID0gZXZhbChfYik7CisKKyAgICBpZiAoZXhjZXB0aW9uKQorICAgICAgICB0
ZXN0RmFpbGVkKF9hICsgIiBzaG91bGQgYmUgPj0gIiArIF9iICsgIi4gVGhyZXcgZXhjZXB0aW9u
ICIgKyBleGNlcHRpb24pOworICAgIGVsc2UgaWYgKHR5cGVvZiBfYXYgPT0gInVuZGVmaW5lZCIg
fHwgX2F2IDwgX2J2KQorICAgICAgICB0ZXN0RmFpbGVkKF9hICsgIiBzaG91bGQgYmUgPj0gIiAr
IF9iICsgIi4gV2FzICIgKyBfYXYgKyAiIChvZiB0eXBlICIgKyB0eXBlb2YgX2F2ICsgIikuIik7
CisgICAgZWxzZQorICAgICAgICB0ZXN0UGFzc2VkKF9hICsgIiBpcyA+PSAiICsgX2IpOworfQor
CitmdW5jdGlvbiBleHBlY3RUcnVlKHYsIG1zZykgeworICBpZiAodikgeworICAgIHRlc3RQYXNz
ZWQobXNnKTsKKyAgfSBlbHNlIHsKKyAgICB0ZXN0RmFpbGVkKG1zZyk7CisgIH0KK30KKworZnVu
Y3Rpb24gc2hvdWxkVGhyb3coX2EsIF9lKQoreworICB2YXIgZXhjZXB0aW9uOworICB2YXIgX2F2
OworICB0cnkgeworICAgICBfYXYgPSBldmFsKF9hKTsKKyAgfSBjYXRjaCAoZSkgeworICAgICBl
eGNlcHRpb24gPSBlOworICB9CisKKyAgdmFyIF9ldjsKKyAgaWYgKF9lKQorICAgICAgX2V2ID0g
IGV2YWwoX2UpOworCisgIGlmIChleGNlcHRpb24pIHsKKyAgICBpZiAodHlwZW9mIF9lID09ICJ1
bmRlZmluZWQiIHx8IGV4Y2VwdGlvbiA9PSBfZXYpCisgICAgICB0ZXN0UGFzc2VkKF9hICsgIiB0
aHJldyBleGNlcHRpb24gIiArIGV4Y2VwdGlvbiArICIuIik7CisgICAgZWxzZQorICAgICAgdGVz
dEZhaWxlZChfYSArICIgc2hvdWxkIHRocm93ICIgKyAodHlwZW9mIF9lID09ICJ1bmRlZmluZWQi
ID8gImFuIGV4Y2VwdGlvbiIgOiBfZXYpICsgIi4gVGhyZXcgZXhjZXB0aW9uICIgKyBleGNlcHRp
b24gKyAiLiIpOworICB9IGVsc2UgaWYgKHR5cGVvZiBfYXYgPT0gInVuZGVmaW5lZCIpCisgICAg
dGVzdEZhaWxlZChfYSArICIgc2hvdWxkIHRocm93ICIgKyAodHlwZW9mIF9lID09ICJ1bmRlZmlu
ZWQiID8gImFuIGV4Y2VwdGlvbiIgOiBfZXYpICsgIi4gV2FzIHVuZGVmaW5lZC4iKTsKKyAgZWxz
ZQorICAgIHRlc3RGYWlsZWQoX2EgKyAiIHNob3VsZCB0aHJvdyAiICsgKHR5cGVvZiBfZSA9PSAi
dW5kZWZpbmVkIiA/ICJhbiBleGNlcHRpb24iIDogX2V2KSArICIuIFdhcyAiICsgX2F2ICsgIi4i
KTsKK30KKworZnVuY3Rpb24gc2hvdWxkQmVUeXBlKF9hLCBfdHlwZSkgeworICAgIHZhciBleGNl
cHRpb247CisgICAgdmFyIF9hdjsKKyAgICB0cnkgeworICAgICAgICBfYXYgPSBldmFsKF9hKTsK
KyAgICB9IGNhdGNoIChlKSB7CisgICAgICAgIGV4Y2VwdGlvbiA9IGU7CisgICAgfQorCisgICAg
dmFyIF90eXBldiA9IGV2YWwoX3R5cGUpOworCisgICAgaWYoX3R5cGV2ID09PSBOdW1iZXIpewor
ICAgICAgICBpZihfYXYgaW5zdGFuY2VvZiBOdW1iZXIpeworICAgICAgICAgICAgdGVzdFBhc3Nl
ZChfYSArICIgaXMgYW4gaW5zdGFuY2Ugb2YgTnVtYmVyIik7CisgICAgICAgIH0KKyAgICAgICAg
ZWxzZSBpZih0eXBlb2YoX2F2KSA9PT0gJ251bWJlcicpeworICAgICAgICAgICAgdGVzdFBhc3Nl
ZChfYSArICIgaXMgYW4gaW5zdGFuY2Ugb2YgTnVtYmVyIik7CisgICAgICAgIH0KKyAgICAgICAg
ZWxzZXsKKyAgICAgICAgICAgIHRlc3RGYWlsZWQoX2EgKyAiIGlzIG5vdCBhbiBpbnN0YW5jZSBv
ZiBOdW1iZXIiKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIGlmIChfYXYgaW5zdGFuY2Vv
ZiBfdHlwZXYpIHsKKyAgICAgICAgdGVzdFBhc3NlZChfYSArICIgaXMgYW4gaW5zdGFuY2Ugb2Yg
IiArIF90eXBlKTsKKyAgICB9IGVsc2UgeworICAgICAgICB0ZXN0RmFpbGVkKF9hICsgIiBpcyBu
b3QgYW4gaW5zdGFuY2Ugb2YgIiArIF90eXBlKTsKKyAgICB9Cit9CisKK2Z1bmN0aW9uIGFzc2Vy
dE1zZyhhc3NlcnRpb24sIG1zZykgeworICAgIGlmIChhc3NlcnRpb24pIHsKKyAgICAgICAgdGVz
dFBhc3NlZChtc2cpOworICAgIH0gZWxzZSB7CisgICAgICAgIHRlc3RGYWlsZWQobXNnKTsKKyAg
ICB9Cit9CisKK2Z1bmN0aW9uIGdjKCkgeworICAgIGlmICh3aW5kb3cuR0NDb250cm9sbGVyKSB7
CisgICAgICAgIHdpbmRvdy5HQ0NvbnRyb2xsZXIuY29sbGVjdCgpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgaWYgKHdpbmRvdy5vcGVyYSAmJiB3aW5kb3cub3BlcmEuY29sbGVjdCkg
eworICAgICAgICB3aW5kb3cub3BlcmEuY29sbGVjdCgpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgdHJ5IHsKKyAgICAgICAgd2luZG93LlF1ZXJ5SW50ZXJmYWNlKENvbXBvbmVudHMu
aW50ZXJmYWNlcy5uc0lJbnRlcmZhY2VSZXF1ZXN0b3IpCisgICAgICAgICAgICAgIC5nZXRJbnRl
cmZhY2UoQ29tcG9uZW50cy5pbnRlcmZhY2VzLm5zSURPTVdpbmRvd1V0aWxzKQorICAgICAgICAg
ICAgICAuZ2FyYmFnZUNvbGxlY3QoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0gY2F0Y2goZSkg
e30KKworICAgIGZ1bmN0aW9uIGdjUmVjKG4pIHsKKyAgICAgICAgaWYgKG4gPCAxKQorICAgICAg
ICAgICAgcmV0dXJuIHt9OworICAgICAgICB2YXIgdGVtcCA9IHtpOiAiYWIiICsgaSArIChpIC8g
MTAwMDAwKX07CisgICAgICAgIHRlbXAgKz0gImZvbyI7CisgICAgICAgIGdjUmVjKG4tMSk7Cisg
ICAgfQorICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDsgaSsrKQorICAgICAgICBnY1JlYygx
MCk7Cit9CisKK2Z1bmN0aW9uIGZpbmlzaFRlc3QoKSB7CisgIHN1Y2Nlc3NmdWxseVBhcnNlZCA9
IHRydWU7CisgIHZhciBlcGlsb2d1ZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIp
OworICB2YXIgYmFzZVBhdGggPSAiIjsKKyAgdmFyIGV4cGVjdGVkQmFzZSA9ICJqcy10ZXN0LXBy
ZS5qcyI7CisgIHZhciBzY3JpcHRzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3Nj
cmlwdCcpOworICBmb3IgKHZhciBzY3JpcHQsIGkgPSAwOyBzY3JpcHQgPSBzY3JpcHRzW2ldOyBp
KyspIHsKKyAgICB2YXIgc3JjID0gc2NyaXB0LnNyYzsKKyAgICB2YXIgbCA9IHNyYy5sZW5ndGg7
CisgICAgaWYgKHNyYy5zdWJzdHIobCAtIGV4cGVjdGVkQmFzZS5sZW5ndGgpID09IGV4cGVjdGVk
QmFzZSkgeworICAgICAgYmFzZVBhdGggPSBzcmMuc3Vic3RyKDAsIGwgLSBleHBlY3RlZEJhc2Uu
bGVuZ3RoKTsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgfQorICBlcGlsb2d1ZS5zcmMgPSBiYXNl
UGF0aCArICJqcy10ZXN0LXBvc3QuanMiOworICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGVw
aWxvZ3VlKTsKK30KKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ2wvcGVuZGluZy9yZXNv
dXJjZXMvd2ViZ2xfdGVzdF9maWxlcy9jb25mb3JtYW5jZS9jb250ZXh0L2NvbnRleHQtYXR0cmli
dXRlcy1hbHBoYS1kZXB0aC1zdGVuY2lsLWFudGlhbGlhcy5odG1sIGIvTGF5b3V0VGVzdHMvd2Vi
Z2wvcGVuZGluZy9yZXNvdXJjZXMvd2ViZ2xfdGVzdF9maWxlcy9jb25mb3JtYW5jZS9jb250ZXh0
L2NvbnRleHQtYXR0cmlidXRlcy1hbHBoYS1kZXB0aC1zdGVuY2lsLWFudGlhbGlhcy5odG1sCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmFjNzk2OTg4Y2UwY2FmMjg1Mjc1ZjZkODgyYTQxNDRhZTJjNWZiMmQKLS0tIC9k
ZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJnbC9wZW5kaW5nL3Jlc291cmNlcy93ZWJnbF90
ZXN0X2ZpbGVzL2NvbmZvcm1hbmNlL2NvbnRleHQvY29udGV4dC1hdHRyaWJ1dGVzLWFscGhhLWRl
cHRoLXN0ZW5jaWwtYW50aWFsaWFzLmh0bWwKQEAgLTAsMCArMSwzMzIgQEAKKzwhLS0KK0NvcHly
aWdodCAoYykgMjAxOSBUaGUgS2hyb25vcyBHcm91cCBJbmMuCitVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorZm91
bmQgaW4gdGhlIExJQ0VOU0UudHh0IGZpbGUuCistLT4KKworPCFET0NUWVBFIGh0bWw+Cis8aHRt
bD4KKzxoZWFkPgorPG1ldGEgY2hhcnNldD0idXRmLTgiPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0
IiBocmVmPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiLz4KKzxzY3JpcHQgc3Jj
PSIuLi8uLi9qcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4v
anMvd2ViZ2wtdGVzdC11dGlscy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IGlkPSJ2c2hhZGVyIiB0
eXBlPSJ4LXNoYWRlci94LXZlcnRleCI+CithdHRyaWJ1dGUgdmVjMyBwb3M7CithdHRyaWJ1dGUg
dmVjNCBjb2xvckluOwordmFyeWluZyB2ZWM0IGNvbG9yOworCit2b2lkIG1haW4oKQoreworICAg
IGNvbG9yID0gY29sb3JJbjsKKyAgICBnbF9Qb3NpdGlvbiA9IHZlYzQocG9zLnh5eiwgMS4wKTsK
K30KKzwvc2NyaXB0PgorCis8c2NyaXB0IGlkPSJmc2hhZGVyIiB0eXBlPSJ4LXNoYWRlci94LWZy
YWdtZW50Ij4KK3ByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OworCit2YXJ5aW5nIHZlYzQgY29sb3I7
CisKK3ZvaWQgbWFpbigpCit7CisgICAgZ2xfRnJhZ0NvbG9yID0gY29sb3I7Cit9Cis8L3Njcmlw
dD4KKworPHNjcmlwdD4KKyJ1c2Ugc3RyaWN0IjsKKworLy8gVGhlc2UgZm91ciBkZWNsYXJhdGlv
bnMgbmVlZCB0byBiZSBnbG9iYWwgZm9yICJzaG91bGRCZSIgdG8gc2VlIHRoZW0KK3ZhciB3dHUg
PSBXZWJHTFRlc3RVdGlsczsKK3ZhciBnbDsKK3ZhciBjb250ZXh0QXR0cmlicyA9IG51bGw7Cit2
YXIgcmVkQ2hhbm5lbHMgPSBbMCwgMCwgMF07Cit2YXIgY29ycmVjdENvbG9yID0gbnVsbDsKK3Zh
ciBmcmFtZWJ1ZmZlcjsKK3ZhciBmYkhhc0NvbG9yOwordmFyIGZiSGFzRGVwdGg7Cit2YXIgZmJI
YXNTdGVuY2lsOworCitmdW5jdGlvbiBpbml0KCkKK3sKKyAgICBkZXNjcmlwdGlvbignVmVyaWZ5
IFdlYkdMQ29udGV4dEF0dHJpYnV0ZXMgYXJlIHdvcmtpbmcgYXMgc3BlY2lmaWVkLCBpbmNsdWRp
bmcgYWxwaGEsIGRlcHRoLCBzdGVuY2lsLCBhbnRpYWxpYXMsIGJ1dCBub3QgcHJlbXVsdGlwbGll
ZEFscGhhJyk7CisKKyAgICBydW5UZXN0KCk7Cit9CisKK2Z1bmN0aW9uIGdldFdlYkdMKGNhbnZh
c1dpZHRoLCBjYW52YXNIZWlnaHQsIGNvbnRleHRBdHRyaWJzLCBjbGVhckNvbG9yLCBjbGVhckRl
cHRoLCBjbGVhclN0ZW5jaWwpCit7CisgICAgdmFyIGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVs
ZW1lbnQoImNhbnZhcyIpOworICAgIGlmICghY2FudmFzKQorICAgICAgICByZXR1cm4gbnVsbDsK
KyAgICBjYW52YXMud2lkdGggPSBjYW52YXNXaWR0aDsKKyAgICBjYW52YXMuaGVpZ2h0ID0gY2Fu
dmFzSGVpZ2h0OworCisgICAgZ2wgPSB3dHUuY3JlYXRlM0RDb250ZXh0KGNhbnZhcywgY29udGV4
dEF0dHJpYnMpOworICAgIGlmICghZ2wpCisgICAgICAgIHJldHVybiBudWxsOworCisgICAgdmFy
IHByb2dyYW0gPSB3dHUuc2V0dXBQcm9ncmFtKGdsLCBbInZzaGFkZXIiLCAiZnNoYWRlciJdLCBb
InBvcyIsICJjb2xvckluIl0pOworICAgIGlmICghcHJvZ3JhbSkKKyAgICAgICAgcmV0dXJuIG51
bGw7CisKKyAgICBnbC5lbmFibGUoZ2wuREVQVEhfVEVTVCk7CisgICAgZ2wuZW5hYmxlKGdsLlNU
RU5DSUxfVEVTVCk7CisKKyAgICBnbC5jbGVhckNvbG9yKGNsZWFyQ29sb3JbMF0sIGNsZWFyQ29s
b3JbMV0sIGNsZWFyQ29sb3JbMl0sIGNsZWFyQ29sb3JbM10pOworICAgIGdsLmNsZWFyRGVwdGgo
Y2xlYXJEZXB0aCk7CisgICAgZ2wuY2xlYXJTdGVuY2lsKGNsZWFyU3RlbmNpbCk7CisgICAgZ2wu
Y2xlYXIoZ2wuQ09MT1JfQlVGRkVSX0JJVCB8IGdsLkRFUFRIX0JVRkZFUl9CSVQgfCBnbC5TVEVO
Q0lMX0JVRkZFUl9CSVQpOworCisgICAgZnJhbWVidWZmZXIgPSBnbC5jcmVhdGVGcmFtZWJ1ZmZl
cigpOworICAgIGdsLmJpbmRGcmFtZWJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgZnJhbWVidWZmZXIp
OworICAgIHZhciB0ZXh0dXJlID0gZ2wuY3JlYXRlVGV4dHVyZSgpOworICAgIGdsLmJpbmRUZXh0
dXJlKGdsLlRFWFRVUkVfMkQsIHRleHR1cmUpOworICAgIGdsLnRleEltYWdlMkQoZ2wuVEVYVFVS
RV8yRCwgMCwgZ2wuUkdCQSwgZ2wuY2FudmFzLndpZHRoLCBnbC5jYW52YXMuaGVpZ2h0LCAwLCBn
bC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCBudWxsKTsKKyAgICBnbC5mcmFtZWJ1ZmZlclRleHR1
cmUyRChnbC5GUkFNRUJVRkZFUiwgZ2wuQ09MT1JfQVRUQUNITUVOVDAsIGdsLlRFWFRVUkVfMkQs
IHRleHR1cmUsIDApOworICAgIGZiSGFzU3RlbmNpbCA9IGZhbHNlOworICAgIGZiSGFzRGVwdGgg
PSBmYWxzZTsKKyAgICBmYkhhc0NvbG9yID0gZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhnbC5G
UkFNRUJVRkZFUikgPT0gZ2wuRlJBTUVCVUZGRVJfQ09NUExFVEU7CisgICAgaWYgKGZiSGFzQ29s
b3IpIHsKKyAgICAgIHZhciBkZXB0aFN0ZW5jaWwgPSBnbC5jcmVhdGVSZW5kZXJidWZmZXIoKTsK
KyAgICAgIGdsLmJpbmRSZW5kZXJidWZmZXIoZ2wuUkVOREVSQlVGRkVSLCBkZXB0aFN0ZW5jaWwp
OworICAgICAgZ2wucmVuZGVyYnVmZmVyU3RvcmFnZShnbC5SRU5ERVJCVUZGRVIsIGdsLkRFUFRI
X1NURU5DSUwsIGdsLmNhbnZhcy53aWR0aCwgZ2wuY2FudmFzLmhlaWdodCk7CisgICAgICBnbC5m
cmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgZ2wuREVQVEhfU1RFTkNJTF9B
VFRBQ0hNRU5ULCBnbC5SRU5ERVJCVUZGRVIsIGRlcHRoU3RlbmNpbCk7CisgICAgICBmYkhhc0Rl
cHRoID0gZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhnbC5GUkFNRUJVRkZFUikgPT0gZ2wuRlJB
TUVCVUZGRVJfQ09NUExFVEU7CisgICAgICBpZiAoIWZiSGFzRGVwdGgpIHsKKyAgICAgICAgZ2wu
ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoZ2wuRlJBTUVCVUZGRVIsIGdsLkRFUFRIX1NURU5DSUxf
QVRUQUNITUVOVCwgZ2wuUkVOREVSQlVGRkVSLCBudWxsKTsKKyAgICAgICAgc2hvdWxkQmUoJ2ds
LmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoZ2wuRlJBTUVCVUZGRVIpJywgJ2dsLkZSQU1FQlVGRkVS
X0NPTVBMRVRFJyk7CisgICAgICB9IGVsc2UgeworICAgICAgICBmYkhhc1N0ZW5jaWwgPSB0cnVl
OworICAgICAgfQorICAgIH0KKyAgICBnbC5iaW5kRnJhbWVidWZmZXIoZ2wuRlJBTUVCVUZGRVIs
IG51bGwpOworICAgIHd0dS5nbEVycm9yU2hvdWxkQmUoZ2wsIGdsLk5PX0VSUk9SLCAic2hvdWxk
IGJlIG5vIGVycm9ycyIpOworCisgICAgcmV0dXJuIGdsOworfQorCitmdW5jdGlvbiBkcmF3QW5k
UmVhZFBpeGVsKGdsLCB2ZXJ0aWNlcywgY29sb3JzKQoreworICAgIHZhciBjb2xvck9mZnNldCA9
IHZlcnRpY2VzLmJ5dGVMZW5ndGg7CisKKyAgICB2YXIgdmJvID0gZ2wuY3JlYXRlQnVmZmVyKCk7
CisgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHZibyk7CisgICAgZ2wuYnVmZmVy
RGF0YShnbC5BUlJBWV9CVUZGRVIsIGNvbG9yT2Zmc2V0ICsgY29sb3JzLmJ5dGVMZW5ndGgsIGds
LlNUQVRJQ19EUkFXKTsKKyAgICBnbC5idWZmZXJTdWJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgMCwg
dmVydGljZXMpOworICAgIGdsLmJ1ZmZlclN1YkRhdGEoZ2wuQVJSQVlfQlVGRkVSLCBjb2xvck9m
ZnNldCwgY29sb3JzKTsKKworICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoMCwgMywgZ2wuRkxP
QVQsIGZhbHNlLCAwLCAwKTsKKyAgICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheSgwKTsKKyAg
ICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKDEsIDQsIGdsLlVOU0lHTkVEX0JZVEUsIHRydWUsIDAs
IGNvbG9yT2Zmc2V0KTsKKyAgICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheSgxKTsKKworICAg
IGdsLmRyYXdBcnJheXMoZ2wuVFJJQU5HTEVTLCAwLCB2ZXJ0aWNlcy5sZW5ndGggLyAzKTsKK30K
KworZnVuY3Rpb24gdGVzdERlZmF1bHQoKQoreworICAgIGRlYnVnKCJUZXN0aW5nIGRlZmF1bHQg
YXR0cmlidXRlczogeyBzdGVuY2lsOmZhbHNlIH0iKTsKKyAgICBzaG91bGRCZU5vbk51bGwoImds
ID0gZ2V0V2ViR0woMSwgMSwgbnVsbCwgWyAwLCAwLCAwLCAwIF0sIDEsIDApIik7CisgICAgc2hv
dWxkQmVGYWxzZSgiZ2wuZ2V0Q29udGV4dEF0dHJpYnV0ZXMoKS5zdGVuY2lsIik7CisgICAgc2hv
dWxkQmVUcnVlKCJnbC5nZXRQYXJhbWV0ZXIoZ2wuU1RFTkNJTF9CSVRTKSA9PSAwIik7Cit9CisK
K2Z1bmN0aW9uIHRlc3RBbHBoYShhbHBoYSkKK3sKKyAgICBkZWJ1ZygiVGVzdGluZyBhbHBoYSA9
ICIgKyBhbHBoYSk7CisgICAgaWYgKGFscGhhKSB7CisgICAgICAgIHNob3VsZEJlTm9uTnVsbCgi
Z2wgPSBnZXRXZWJHTCgxLCAxLCB7IGFscGhhOiB0cnVlLCBkZXB0aDogZmFsc2UsIHN0ZW5jaWw6
IGZhbHNlLCBhbnRpYWxpYXM6IGZhbHNlIH0sIFsgMCwgMCwgMCwgMCBdLCAxLCAwKSIpOworICAg
ICAgICBzaG91bGRCZVRydWUoImdsLmdldFBhcmFtZXRlcihnbC5BTFBIQV9CSVRTKSA+PSA4Iik7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgc2hvdWxkQmVOb25OdWxsKCJnbCA9IGdldFdlYkdMKDEs
IDEsIHsgYWxwaGE6IGZhbHNlLCBkZXB0aDogZmFsc2UsIHN0ZW5jaWw6IGZhbHNlLCBhbnRpYWxp
YXM6IGZhbHNlIH0sIFsgMCwgMCwgMCwgMCBdLCAxLCAwKSIpOworICAgICAgICBzaG91bGRCZVRy
dWUoImdsLmdldFBhcmFtZXRlcihnbC5BTFBIQV9CSVRTKSA9PSAwIik7CisgICAgfQorICAgIHNo
b3VsZEJlVHJ1ZSgiZ2wuZ2V0UGFyYW1ldGVyKGdsLlJFRF9CSVRTKSA+PSA4Iik7CisgICAgc2hv
dWxkQmVUcnVlKCJnbC5nZXRQYXJhbWV0ZXIoZ2wuR1JFRU5fQklUUykgPj0gOCIpOworICAgIHNo
b3VsZEJlVHJ1ZSgiZ2wuZ2V0UGFyYW1ldGVyKGdsLkJMVUVfQklUUykgPj0gOCIpOworICAgIHNo
b3VsZEJlVHJ1ZSgiZ2wuZ2V0UGFyYW1ldGVyKGdsLkRFUFRIX0JJVFMpID09IDAiKTsKKyAgICBz
aG91bGRCZVRydWUoImdsLmdldFBhcmFtZXRlcihnbC5TVEVOQ0lMX0JJVFMpID09IDAiKTsKKwor
ICAgIHNob3VsZEJlTm9uTnVsbCgiY29udGV4dEF0dHJpYnMgPSBnbC5nZXRDb250ZXh0QXR0cmli
dXRlcygpIik7CisgICAgc2hvdWxkQmVUcnVlKCJjb250ZXh0QXR0cmlicy5hbHBoYSA9PSAiICsg
YWxwaGEpOworCisgICAgdmFyIGNvcnJlY3RDb2xvciA9IChjb250ZXh0QXR0cmlicy5hbHBoYSA/
IFswLCAwLCAwLCAwXSA6IFswLCAwLCAwLCAyNTVdKTsKKyAgICB3dHUuY2hlY2tDYW52YXNSZWN0
KGdsLCAwLCAwLCAxLCAxLCBjb3JyZWN0Q29sb3IpOworCisgICAgaWYgKGZiSGFzQ29sb3IpIHsK
KyAgICAgIGdsLmJpbmRGcmFtZWJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgZnJhbWVidWZmZXIpOwor
ICAgICAgZ2wuY2xlYXJDb2xvcigwLjUsIDAuNSwgMC41LCAwLjUpOworICAgICAgZ2wuY2xlYXIo
Z2wuQ09MT1JfQlVGRkVSX0JJVCk7CisgICAgICB3dHUuY2hlY2tDYW52YXNSZWN0KGdsLCAwLCAw
LCAxLCAxLCBbMTI3LCAxMjcsIDEyNywgMTI3XSwgdW5kZWZpbmVkLCAxKTsKKyAgICAgIGdsLmJp
bmRGcmFtZWJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgbnVsbCk7CisgICAgfQorfQorCitmdW5jdGlv
biB0ZXN0RGVwdGgoZGVwdGgpCit7CisgICAgZGVidWcoIlRlc3RpbmcgZGVwdGggPSAiICsgZGVw
dGgpOworICAgIGlmIChkZXB0aCkgeworICAgICAgICBzaG91bGRCZU5vbk51bGwoImdsID0gZ2V0
V2ViR0woMSwgMSwgeyBzdGVuY2lsOiBmYWxzZSwgYW50aWFsaWFzOiBmYWxzZSB9LCBbIDAsIDAs
IDAsIDEgXSwgMSwgMCkiKTsKKyAgICAgICAgc2hvdWxkQmVUcnVlKCJnbC5nZXRQYXJhbWV0ZXIo
Z2wuREVQVEhfQklUUykgPj0gMTYiKTsKKyAgICB9IGVsc2UgeworICAgICAgICBzaG91bGRCZU5v
bk51bGwoImdsID0gZ2V0V2ViR0woMSwgMSwgeyBkZXB0aDogZmFsc2UsIHN0ZW5jaWw6IGZhbHNl
LCBhbnRpYWxpYXM6IGZhbHNlIH0sIFsgMCwgMCwgMCwgMSBdLCAxLCAwKSIpOworICAgICAgICBz
aG91bGRCZVRydWUoImdsLmdldFBhcmFtZXRlcihnbC5ERVBUSF9CSVRTKSA9PSAwIik7CisgICAg
fQorICAgIHNob3VsZEJlVHJ1ZSgiZ2wuZ2V0UGFyYW1ldGVyKGdsLlJFRF9CSVRTKSA+PSA4Iik7
CisgICAgc2hvdWxkQmVUcnVlKCJnbC5nZXRQYXJhbWV0ZXIoZ2wuR1JFRU5fQklUUykgPj0gOCIp
OworICAgIHNob3VsZEJlVHJ1ZSgiZ2wuZ2V0UGFyYW1ldGVyKGdsLkJMVUVfQklUUykgPj0gOCIp
OworICAgIHNob3VsZEJlVHJ1ZSgiZ2wuZ2V0UGFyYW1ldGVyKGdsLkFMUEhBX0JJVFMpID49IDgi
KTsKKworICAgIHNob3VsZEJlTm9uTnVsbCgiY29udGV4dEF0dHJpYnMgPSBnbC5nZXRDb250ZXh0
QXR0cmlidXRlcygpIik7CisKKyAgICBnbC5kZXB0aEZ1bmMoZ2wuTkVWRVIpOworCisgICAgdmFy
IHZlcnRpY2VzID0gbmV3IEZsb2F0MzJBcnJheShbCisgICAgICAgICAxLjAsICAxLjAsIDAuMCwK
KyAgICAgICAgLTEuMCwgIDEuMCwgMC4wLAorICAgICAgICAtMS4wLCAtMS4wLCAwLjAsCisgICAg
ICAgICAxLjAsICAxLjAsIDAuMCwKKyAgICAgICAgLTEuMCwgLTEuMCwgMC4wLAorICAgICAgICAg
MS4wLCAtMS4wLCAwLjBdKTsKKyAgICB2YXIgY29sb3JzID0gbmV3IFVpbnQ4QXJyYXkoWworICAg
ICAgICAyNTUsIDAsIDAsIDI1NSwKKyAgICAgICAgMjU1LCAwLCAwLCAyNTUsCisgICAgICAgIDI1
NSwgMCwgMCwgMjU1LAorICAgICAgICAyNTUsIDAsIDAsIDI1NSwKKyAgICAgICAgMjU1LCAwLCAw
LCAyNTUsCisgICAgICAgIDI1NSwgMCwgMCwgMjU1XSk7CisKKyAgICBkcmF3QW5kUmVhZFBpeGVs
KGdsLCB2ZXJ0aWNlcywgY29sb3JzLCAwLCAwKTsKKyAgICBjb3JyZWN0Q29sb3IgPSAoY29udGV4
dEF0dHJpYnMuZGVwdGggPyBbMCwgMCwgMCwgMjU1XSA6IFsyNTUsIDAsIDAsIDI1NV0pOworICAg
IHd0dS5jaGVja0NhbnZhc1JlY3QoZ2wsIDAsIDAsIDEsIDEsIGNvcnJlY3RDb2xvcik7CisKKyAg
ICBpZiAoZmJIYXNEZXB0aCkgeworICAgICAgZ2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVG
RkVSLCBmcmFtZWJ1ZmZlcik7CisgICAgICBnbC5jbGVhcihnbC5DT0xPUl9CVUZGRVJfQklUIHwg
Z2wuREVQVEhfQlVGRkVSX0JJVCk7CisgICAgICBkcmF3QW5kUmVhZFBpeGVsKGdsLCB2ZXJ0aWNl
cywgY29sb3JzLCAwLCAwKTsKKyAgICAgIHd0dS5jaGVja0NhbnZhc1JlY3QoZ2wsIDAsIDAsIDEs
IDEsIFswLCAwLCAwLCAyNTVdKTsKKyAgICAgIGdsLmJpbmRGcmFtZWJ1ZmZlcihnbC5GUkFNRUJV
RkZFUiwgbnVsbCk7CisgICAgfQorfQorCitmdW5jdGlvbiB0ZXN0U3RlbmNpbEFuZERlcHRoKHN0
ZW5jaWwsIGRlcHRoKQoreworICAgIGRlYnVnKCJUZXN0aW5nIHN0ZW5jaWwgPSAiICsgc3RlbmNp
bCArICIsIGRlcHRoID0gIiArIGRlcHRoKTsKKyAgICB2YXIgY3JlYXRpb25TdHJpbmcgPQorICAg
ICAgICAiZ2wgPSBnZXRXZWJHTCgxLCAxLCB7IGRlcHRoOiAiICsgZGVwdGggKyAiLCBzdGVuY2ls
OiAiICsgc3RlbmNpbCArICIsIGFudGlhbGlhczogZmFsc2UgfSwgWyAwLCAwLCAwLCAxIF0sIDEs
IDApIjsKKyAgICBzaG91bGRCZU5vbk51bGwoY3JlYXRpb25TdHJpbmcpOworCisgICAgc2hvdWxk
QmVUcnVlKCJnbC5nZXRQYXJhbWV0ZXIoZ2wuUkVEX0JJVFMpID49IDgiKTsKKyAgICBzaG91bGRC
ZVRydWUoImdsLmdldFBhcmFtZXRlcihnbC5HUkVFTl9CSVRTKSA+PSA4Iik7CisgICAgc2hvdWxk
QmVUcnVlKCJnbC5nZXRQYXJhbWV0ZXIoZ2wuQkxVRV9CSVRTKSA+PSA4Iik7CisgICAgc2hvdWxk
QmVUcnVlKCJnbC5nZXRQYXJhbWV0ZXIoZ2wuQUxQSEFfQklUUykgPj0gOCIpOworICAgIGlmIChk
ZXB0aCkKKyAgICAgICAgc2hvdWxkQmVUcnVlKCJnbC5nZXRQYXJhbWV0ZXIoZ2wuREVQVEhfQklU
UykgPj0gMTYiKTsKKyAgICBlbHNlCisgICAgICAgIHNob3VsZEJlVHJ1ZSgiZ2wuZ2V0UGFyYW1l
dGVyKGdsLkRFUFRIX0JJVFMpID09IDAiKTsKKworICAgIGlmIChzdGVuY2lsKQorICAgICAgICBz
aG91bGRCZVRydWUoImdsLmdldFBhcmFtZXRlcihnbC5TVEVOQ0lMX0JJVFMpID49IDgiKTsKKyAg
ICBlbHNlCisgICAgICAgIHNob3VsZEJlVHJ1ZSgiZ2wuZ2V0UGFyYW1ldGVyKGdsLlNURU5DSUxf
QklUUykgPT0gMCIpOworCisgICAgc2hvdWxkQmVOb25OdWxsKCJjb250ZXh0QXR0cmlicyA9IGds
LmdldENvbnRleHRBdHRyaWJ1dGVzKCkiKTsKKyAgICBpZiAoIWRlcHRoICYmIGNvbnRleHRBdHRy
aWJzLmRlcHRoKSB7CisgICAgICAgIHRlc3RGYWlsZWQoIldlYkdMIGltcGxlbWVudGF0aW9uIHBy
b3ZpZGVkIGEgZGVwdGggYnVmZmVyIHdoZW4gaXQgc2hvdWxkIG5vdCBoYXZlIik7CisgICAgfQor
ICAgIGlmICghY29udGV4dEF0dHJpYnMuZGVwdGgpCisgICAgICAgIGRlcHRoID0gZmFsc2U7Cisg
ICAgaWYgKCFzdGVuY2lsICYmIGNvbnRleHRBdHRyaWJzLnN0ZW5jaWwpIHsKKyAgICAgICAgdGVz
dEZhaWxlZCgiV2ViR0wgaW1wbGVtZW50YXRpb24gcHJvdmlkZWQgYSBzdGVuY2lsIGJ1ZmZlciB3
aGVuIGl0IHNob3VsZCBub3QgaGF2ZSIpOworICAgIH0KKyAgICBpZiAoIWNvbnRleHRBdHRyaWJz
LnN0ZW5jaWwpCisgICAgICAgIHN0ZW5jaWwgPSBmYWxzZTsKKworICAgIGdsLmRlcHRoRnVuYyhn
bC5BTFdBWVMpOworCisgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuTkVWRVIsIDEsIDEpOworICAgIGds
LnN0ZW5jaWxPcChnbC5LRUVQLCBnbC5LRUVQLCBnbC5LRUVQKTsKKworICAgIHZhciB2ZXJ0aWNl
cyA9IG5ldyBGbG9hdDMyQXJyYXkoWworICAgICAgICAgMS4wLCAxLjAsIDAuMCwKKyAgICAgICAg
LTEuMCwgMS4wLCAwLjAsCisgICAgICAgIC0xLjAsIC0xLjAsIDAuMCwKKyAgICAgICAgIDEuMCwg
MS4wLCAwLjAsCisgICAgICAgIC0xLjAsIC0xLjAsIDAuMCwKKyAgICAgICAgIDEuMCwgLTEuMCwg
MC4wXSk7CisgICAgdmFyIGNvbG9ycyA9IG5ldyBVaW50OEFycmF5KFsKKyAgICAgICAgMjU1LCAw
LCAwLCAyNTUsCisgICAgICAgIDI1NSwgMCwgMCwgMjU1LAorICAgICAgICAyNTUsIDAsIDAsIDI1
NSwKKyAgICAgICAgMjU1LCAwLCAwLCAyNTUsCisgICAgICAgIDI1NSwgMCwgMCwgMjU1LAorICAg
ICAgICAyNTUsIDAsIDAsIDI1NV0pOworCisgICAgZHJhd0FuZFJlYWRQaXhlbChnbCwgdmVydGlj
ZXMsIGNvbG9ycywgMCwgMCk7CisgICAgY29ycmVjdENvbG9yID0gKHN0ZW5jaWwgPyBbMCwgMCwg
MCwgMjU1XSA6IFsyNTUsIDAsIDAsIDI1NV0pOworICAgIHd0dS5jaGVja0NhbnZhc1JlY3QoZ2ws
IDAsIDAsIDEsIDEsIGNvcnJlY3RDb2xvcikKKworICAgIGlmIChmYkhhc1N0ZW5jaWwpIHsKKyAg
ICAgIGdsLmJpbmRGcmFtZWJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgZnJhbWVidWZmZXIpOworICAg
ICAgZ2wuY2xlYXIoZ2wuQ09MT1JfQlVGRkVSX0JJVCB8IGdsLkRFUFRIX0JVRkZFUl9CSVQpOwor
ICAgICAgZHJhd0FuZFJlYWRQaXhlbChnbCwgdmVydGljZXMsIGNvbG9ycywgMCwgMCk7CisgICAg
ICB3dHUuY2hlY2tDYW52YXNSZWN0KGdsLCAwLCAwLCAxLCAxLCBbMCwgMCwgMCwgMjU1XSk7Cisg
ICAgICBnbC5iaW5kRnJhbWVidWZmZXIoZ2wuRlJBTUVCVUZGRVIsIG51bGwpOworICAgIH0KK30K
KworZnVuY3Rpb24gdGVzdEFudGlhbGlhcyhhbnRpYWxpYXMpCit7CisgICAgZGVidWcoIlRlc3Rp
bmcgYW50aWFsaWFzID0gIiArIGFudGlhbGlhcyk7CisgICAgLy8gQm90aCB0aGUgd2lkdGggYW5k
IGhlaWdodCBvZiBjYW52YXMgYXJlIE4uCisgICAgdmFyIE4gPSAyOworICAgIGlmIChhbnRpYWxp
YXMpCisgICAgICAgIHNob3VsZEJlTm9uTnVsbCgiZ2wgPSBnZXRXZWJHTCgiICsgTiArICIsICIg
KyBOICsgIiwgeyBkZXB0aDogZmFsc2UsIHN0ZW5jaWw6IGZhbHNlLCBhbHBoYTogZmFsc2UsIGFu
dGlhbGlhczogdHJ1ZSB9LCBbIDAsIDAsIDAsIDEgXSwgMSwgMCkiKTsKKyAgICBlbHNlCisgICAg
ICAgIHNob3VsZEJlTm9uTnVsbCgiZ2wgPSBnZXRXZWJHTCgiICsgTiArICIsICIgKyBOICsgIiwg
eyBkZXB0aDogZmFsc2UsIHN0ZW5jaWw6IGZhbHNlLCBhbHBoYTogZmFsc2UsIGFudGlhbGlhczog
ZmFsc2UgfSwgWyAwLCAwLCAwLCAxIF0sIDEsIDApIik7CisgICAgc2hvdWxkQmVOb25OdWxsKCJj
b250ZXh0QXR0cmlicyA9IGdsLmdldENvbnRleHRBdHRyaWJ1dGVzKCkiKTsKKworICAgIHZhciB2
ZXJ0aWNlcyA9IG5ldyBGbG9hdDMyQXJyYXkoWworICAgICAgICAgMS4wLCAxLjAsIDAuMCwKKyAg
ICAgICAgLTEuMCwgMS4wLCAwLjAsCisgICAgICAgIC0xLjAsIC0xLjAsIDAuMF0pOworICAgIHZh
ciBjb2xvcnMgPSBuZXcgVWludDhBcnJheShbCisgICAgICAgIDI1NSwgMCwgMCwgMjU1LAorICAg
ICAgICAyNTUsIDAsIDAsIDI1NSwKKyAgICAgICAgMjU1LCAwLCAwLCAyNTVdKTsKKyAgICBkcmF3
QW5kUmVhZFBpeGVsKGdsLCB2ZXJ0aWNlcywgY29sb3JzLCAwLCAwKTsKKyAgICB2YXIgYnVmID0g
bmV3IFVpbnQ4QXJyYXkoTiAqIE4gKiA0KTsKKyAgICBnbC5yZWFkUGl4ZWxzKDAsIDAsIE4sIE4s
IGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIGJ1Zik7CisgICAgcmVkQ2hhbm5lbHNbMF0gPSBi
dWZbNCAqIChOICsgMSldOyAvLyAoMSwgMSkKKyAgICByZWRDaGFubmVsc1sxXSA9IGJ1Zls0ICog
TiAqIChOIC0gMSldOyAvLyBsZWZ0IHRvcAorICAgIHJlZENoYW5uZWxzWzJdID0gYnVmWzQgKiAo
TiAtIDEpXTsgLy8gcmlnaHQgYm90dG9tCisgICAgc2hvdWxkQmVUcnVlKCJyZWRDaGFubmVsc1sx
XSA9PSAyNTUgJiYgcmVkQ2hhbm5lbHNbMl0gPT0gMCIpOworICAgIHNob3VsZEJlKCJyZWRDaGFu
bmVsc1swXSAhPSAyNTUgJiYgcmVkQ2hhbm5lbHNbMF0gIT0gMCIsICJjb250ZXh0QXR0cmlicy5h
bnRpYWxpYXMiKTsKK30KKworZnVuY3Rpb24gcnVuVGVzdCgpCit7CisgICAgdGVzdERlZmF1bHQo
KTsKKyAgICB0ZXN0QWxwaGEodHJ1ZSk7CisgICAgdGVzdEFscGhhKGZhbHNlKTsKKyAgICB0ZXN0
RGVwdGgodHJ1ZSk7CisgICAgdGVzdERlcHRoKGZhbHNlKTsKKyAgICB0ZXN0U3RlbmNpbEFuZERl
cHRoKHRydWUsIGZhbHNlKTsKKyAgICB0ZXN0U3RlbmNpbEFuZERlcHRoKGZhbHNlLCBmYWxzZSk7
CisgICAgdGVzdFN0ZW5jaWxBbmREZXB0aCh0cnVlLCB0cnVlKTsKKyAgICB0ZXN0U3RlbmNpbEFu
ZERlcHRoKGZhbHNlLCB0cnVlKTsKKyAgICB0ZXN0QW50aWFsaWFzKHRydWUpOworICAgIHRlc3RB
bnRpYWxpYXMoZmFsc2UpOworCisgICAgZmluaXNoVGVzdCgpOworfQorCis8L3NjcmlwdD4KKzwv
aGVhZD4KKzxib2R5IG9ubG9hZD0iaW5pdCgpIj4KKzxkaXYgaWQ9ImRlc2NyaXB0aW9uIj48L2Rp
dj4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvd2ViZ2wvcGVuZGluZy9yZXNvdXJjZXMvd2ViZ2xfdGVzdF9maWxlcy9q
cy9qcy10ZXN0LXBvc3QuanMgYi9MYXlvdXRUZXN0cy93ZWJnbC9wZW5kaW5nL3Jlc291cmNlcy93
ZWJnbF90ZXN0X2ZpbGVzL2pzL2pzLXRlc3QtcG9zdC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mZjg5ZTU4NmVi
ZGFmY2QxNWNiNDY4NWQwNzBkZmQyNjg1OTE2NjY1Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0
VGVzdHMvd2ViZ2wvcGVuZGluZy9yZXNvdXJjZXMvd2ViZ2xfdGVzdF9maWxlcy9qcy9qcy10ZXN0
LXBvc3QuanMKQEAgLTAsMCArMSwxMiBAQAorLyoKK0NvcHlyaWdodCAoYykgMjAxOSBUaGUgS2hy
b25vcyBHcm91cCBJbmMuCitVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
biBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorZm91bmQgaW4gdGhlIExJQ0VOU0UudHh0
IGZpbGUuCisqLworCitzaG91bGRCZVRydWUoInN1Y2Nlc3NmdWxseVBhcnNlZCIpOworX2FkZFNw
YW4oJzxiciAvPjxzcGFuIGNsYXNzPSJwYXNzIj5URVNUIENPTVBMRVRFPC9zcGFuPicpOworaWYg
KF9qc1Rlc3RQcmVWZXJib3NlTG9nZ2luZykgeworICAgIF9idWZmZXJlZExvZ1RvQ29uc29sZSgn
VEVTVCBDT01QTEVURScpOworfQorbm90aWZ5RmluaXNoZWRUb0hhcm5lc3MoKQpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvd2ViZ2wvcGVuZGluZy9yZXNvdXJjZXMvd2ViZ2xfdGVzdF9maWxlcy9q
cy9qcy10ZXN0LXByZS5qcyBiL0xheW91dFRlc3RzL3dlYmdsL3BlbmRpbmcvcmVzb3VyY2VzL3dl
YmdsX3Rlc3RfZmlsZXMvanMvanMtdGVzdC1wcmUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTBkYTM0ODllN2Uz
ZGU3NzhjMTJjOWJhMmI5ZjE1MTk3MjY4OGQwMAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRl
c3RzL3dlYmdsL3BlbmRpbmcvcmVzb3VyY2VzL3dlYmdsX3Rlc3RfZmlsZXMvanMvanMtdGVzdC1w
cmUuanMKQEAgLTAsMCArMSw3NzMgQEAKKy8qCitDb3B5cmlnaHQgKGMpIDIwMTkgVGhlIEtocm9u
b3MgR3JvdXAgSW5jLgorVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4g
TUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKK2ZvdW5kIGluIHRoZSBMSUNFTlNFLnR4dCBm
aWxlLgorKi8KKworKGZ1bmN0aW9uKCkgeworICB2YXIgdGVzdEhhcm5lc3NJbml0aWFsaXplZCA9
IGZhbHNlOworCisgIHZhciBpbml0Tm9uS2hyb25vc0ZyYW1ld29yayA9IGZ1bmN0aW9uKCkgewor
ICAgIGlmICh0ZXN0SGFybmVzc0luaXRpYWxpemVkKSB7CisgICAgICByZXR1cm47CisgICAgfQor
ICAgIHRlc3RIYXJuZXNzSW5pdGlhbGl6ZWQgPSB0cnVlOworCisgICAgLyogLS0gcGxhZm9ybSBz
cGVjaWZpYyBjb2RlIC0tICovCisKKyAgICAvLyBXZWJLaXQgU3BlY2lmaWMgY29kZS4gQWRkIHlv
dXIgY29kZSBoZXJlLgorICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lciAmJiAhd2luZG93LmxheW91
dFRlc3RDb250cm9sbGVyKSB7CisgICAgICB3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIgPSB3
aW5kb3cudGVzdFJ1bm5lcjsKKyAgICB9CisKKyAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250
cm9sbGVyKSB7CisgICAgICB3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgp
OworICAgICAgd2luZG93LmxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKyAg
ICB9CisgICAgaWYgKHdpbmRvdy5pbnRlcm5hbHMpIHsKKyAgICAgIC8vIFRoZSBXZWJLaXQgdGVz
dGluZyBzeXN0ZW0gY29tcGFyZXMgY29uc29sZSBvdXRwdXQuCisgICAgICAvLyBCZWNhdXNlIHRo
ZSBvdXRwdXQgb2YgdGhlIFdlYkdMIFRlc3RzIGlzIEdQVSBkZXBlbmRlbnQKKyAgICAgIC8vIHdl
IHR1cm4gb2ZmIGNvbnNvbGUgbWVzc2FnZXMuCisgICAgICB3aW5kb3cuY29uc29sZS5sb2cgPSBm
dW5jdGlvbigpIHsgfTsKKyAgICAgIHdpbmRvdy5jb25zb2xlLmVycm9yID0gZnVuY3Rpb24oKSB7
IH07CisgICAgICB3aW5kb3cuaW50ZXJuYWxzLnNldHRpbmdzLnNldFdlYkdMRXJyb3JzVG9Db25z
b2xlRW5hYmxlZChmYWxzZSk7CisgICAgfQorCisgICAgLyogLS0gZW5kIHBsYXRmb3JtIHNwZWNp
ZmljIGNvZGUgLS0qLworICB9CisKKyAgdGhpcy5pbml0VGVzdGluZ0hhcm5lc3MgPSBmdW5jdGlv
bigpIHsKKyAgICBpbml0Tm9uS2hyb25vc0ZyYW1ld29yaygpOworICB9Cit9KCkpOworCit2YXIg
Z2V0VXJsT3B0aW9ucyA9IChmdW5jdGlvbigpIHsKKyAgdmFyIF91cmxPcHRpb25zUGFyc2VkID0g
ZmFsc2U7CisgIHZhciBfdXJsT3B0aW9ucyA9IHt9OworICByZXR1cm4gZnVuY3Rpb24oKSB7Cisg
ICAgaWYgKCFfdXJsT3B0aW9uc1BhcnNlZCkgeworICAgICAgdmFyIHMgPSB3aW5kb3cubG9jYXRp
b24uaHJlZjsKKyAgICAgIHZhciBxID0gcy5pbmRleE9mKCI/Iik7CisgICAgICB2YXIgZSA9IHMu
aW5kZXhPZigiIyIpOworICAgICAgaWYgKGUgPCAwKSB7CisgICAgICAgIGUgPSBzLmxlbmd0aDsK
KyAgICAgIH0KKyAgICAgIHZhciBxdWVyeSA9IHMuc3Vic3RyaW5nKHEgKyAxLCBlKTsKKyAgICAg
IHZhciBwYWlycyA9IHF1ZXJ5LnNwbGl0KCImIik7CisgICAgICBmb3IgKHZhciBpaSA9IDA7IGlp
IDwgcGFpcnMubGVuZ3RoOyArK2lpKSB7CisgICAgICAgIHZhciBrZXlWYWx1ZSA9IHBhaXJzW2lp
XS5zcGxpdCgiPSIpOworICAgICAgICB2YXIga2V5ID0ga2V5VmFsdWVbMF07CisgICAgICAgIHZh
ciB2YWx1ZSA9IGRlY29kZVVSSUNvbXBvbmVudChrZXlWYWx1ZVsxXSk7CisgICAgICAgIF91cmxP
cHRpb25zW2tleV0gPSB2YWx1ZTsKKyAgICAgIH0KKyAgICAgIF91cmxPcHRpb25zUGFyc2VkID0g
dHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gX3VybE9wdGlvbnM7CisgIH0KK30pKCk7CisKK2lm
ICh0eXBlb2YgcXVpZXRNb2RlID09ICd1bmRlZmluZWQnKSB7CisgIHZhciBxdWlldE1vZGUgPSAo
ZnVuY3Rpb24oKSB7CisgICAgdmFyIF9xdWlldE1vZGVDaGVja2VkID0gZmFsc2U7CisgICAgdmFy
IF9pc1F1aWV0ID0gZmFsc2U7CisgICAgcmV0dXJuIGZ1bmN0aW9uKCkgeworICAgICAgaWYgKCFf
cXVpZXRNb2RlQ2hlY2tlZCkgeworICAgICAgICBfaXNRdWlldCA9IChnZXRVcmxPcHRpb25zKCku
cXVpZXQgPT0gMSk7CisgICAgICAgIF9xdWlldE1vZGVDaGVja2VkID0gdHJ1ZTsKKyAgICAgIH0K
KyAgICAgIHJldHVybiBfaXNRdWlldDsKKyAgICB9CisgIH0pKCk7Cit9CisKK2Z1bmN0aW9uIG5v
bktocm9ub3NGcmFtZXdvcmtOb3RpZnlEb25lKCkgeworICAvLyBXZWJLaXQgU3BlY2lmaWMgY29k
ZS4gQWRkIHlvdXIgY29kZSBoZXJlLgorICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVy
KSB7CisgICAgd2luZG93LmxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKKyAgfQor
fQorCitmdW5jdGlvbiByZXBvcnRUZXN0UmVzdWx0c1RvSGFybmVzcyhzdWNjZXNzLCBtc2cpIHsK
KyAgaWYgKHdpbmRvdy5wYXJlbnQud2ViZ2xUZXN0SGFybmVzcykgeworICAgIHdpbmRvdy5wYXJl
bnQud2ViZ2xUZXN0SGFybmVzcy5yZXBvcnRSZXN1bHRzKHdpbmRvdy5sb2NhdGlvbi5wYXRobmFt
ZSwgc3VjY2VzcywgbXNnKTsKKyAgfQorfQorCitmdW5jdGlvbiByZXBvcnRTa2lwcGVkVGVzdFJl
c3VsdHNUb0hhcm5lc3Moc3VjY2VzcywgbXNnKSB7CisgIGlmICh3aW5kb3cucGFyZW50LndlYmds
VGVzdEhhcm5lc3MpIHsKKyAgICB3aW5kb3cucGFyZW50LndlYmdsVGVzdEhhcm5lc3MucmVwb3J0
UmVzdWx0cyh3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUsIHN1Y2Nlc3MsIG1zZywgdHJ1ZSk7Cisg
IH0KK30KKworZnVuY3Rpb24gbm90aWZ5RmluaXNoZWRUb0hhcm5lc3MoKSB7CisgIGlmICh3aW5k
b3cucGFyZW50LndlYmdsVGVzdEhhcm5lc3MpIHsKKyAgICB3aW5kb3cucGFyZW50LndlYmdsVGVz
dEhhcm5lc3Mubm90aWZ5RmluaXNoZWQod2luZG93LmxvY2F0aW9uLnBhdGhuYW1lKTsKKyAgfQor
ICBpZiAod2luZG93Lm5vbktocm9ub3NGcmFtZXdvcmtOb3RpZnlEb25lKSB7CisgICAgd2luZG93
Lm5vbktocm9ub3NGcmFtZXdvcmtOb3RpZnlEb25lKCk7CisgIH0KK30KKwordmFyIF9idWZmZXJl
ZENvbnNvbGVMb2dzID0gW107CisKK2Z1bmN0aW9uIF9idWZmZXJlZExvZ1RvQ29uc29sZShtc2cp
Cit7CisgIGlmIChfYnVmZmVyZWRDb25zb2xlTG9ncykgeworICAgIF9idWZmZXJlZENvbnNvbGVM
b2dzLnB1c2gobXNnKTsKKyAgfSBlbHNlIGlmICh3aW5kb3cuY29uc29sZSkgeworICAgIHdpbmRv
dy5jb25zb2xlLmxvZyhtc2cpOworICB9Cit9CisKKy8vIFB1YmxpYyBlbnRyeSBwb2ludCBleHBv
c2VkIHRvIG1hbnkgb3RoZXIgZmlsZXMuCitmdW5jdGlvbiBidWZmZXJlZExvZ1RvQ29uc29sZSht
c2cpCit7CisgIF9idWZmZXJlZExvZ1RvQ29uc29sZShtc2cpOworfQorCisvLyBDYWxsZWQgaW1w
bGljaXRseSBieSB0ZXN0RmFpbGVkKCkuCitmdW5jdGlvbiBfZmx1c2hCdWZmZXJlZExvZ3NUb0Nv
bnNvbGUoKQoreworICBpZiAoX2J1ZmZlcmVkQ29uc29sZUxvZ3MpIHsKKyAgICBpZiAod2luZG93
LmNvbnNvbGUpIHsKKyAgICAgIGZvciAodmFyIGlpID0gMDsgaWkgPCBfYnVmZmVyZWRDb25zb2xl
TG9ncy5sZW5ndGg7ICsraWkpIHsKKyAgICAgICAgd2luZG93LmNvbnNvbGUubG9nKF9idWZmZXJl
ZENvbnNvbGVMb2dzW2lpXSk7CisgICAgICB9CisgICAgfQorICAgIF9idWZmZXJlZENvbnNvbGVM
b2dzID0gbnVsbDsKKyAgfQorfQorCit2YXIgX2pzVGVzdFByZVZlcmJvc2VMb2dnaW5nID0gZmFs
c2U7CisKK2Z1bmN0aW9uIGVuYWJsZUpTVGVzdFByZVZlcmJvc2VMb2dnaW5nKCkKK3sKKyAgICBf
anNUZXN0UHJlVmVyYm9zZUxvZ2dpbmcgPSB0cnVlOworfQorCitmdW5jdGlvbiBkZXNjcmlwdGlv
bihtc2cpCit7CisgICAgaW5pdFRlc3RpbmdIYXJuZXNzKCk7CisgICAgaWYgKG1zZyA9PT0gdW5k
ZWZpbmVkKSB7CisgICAgICBtc2cgPSBkb2N1bWVudC50aXRsZTsKKyAgICB9CisgICAgLy8gRm9y
IE1TSUUgNiBjb21wYXRpYmlsaXR5CisgICAgdmFyIHNwYW4gPSBkb2N1bWVudC5jcmVhdGVFbGVt
ZW50KCJzcGFuIik7CisgICAgc3Bhbi5pbm5lckhUTUwgPSAnPHA+JyArIG1zZyArICc8L3A+PHA+
T24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICI8c3BhbiBjbGFzcz0icGFzcyI+
UEFTUzwvc3Bhbj4iIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiPHNwYW4gY2xhc3M9InBhc3MiPlRF
U1QgQ09NUExFVEU8L3NwYW4+Ii48L3A+JzsKKyAgICB2YXIgZGVzY3JpcHRpb24gPSBkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgiZGVzY3JpcHRpb24iKTsKKyAgICBpZiAoZGVzY3JpcHRpb24uZmly
c3RDaGlsZCkKKyAgICAgICAgZGVzY3JpcHRpb24ucmVwbGFjZUNoaWxkKHNwYW4sIGRlc2NyaXB0
aW9uLmZpcnN0Q2hpbGQpOworICAgIGVsc2UKKyAgICAgICAgZGVzY3JpcHRpb24uYXBwZW5kQ2hp
bGQoc3Bhbik7CisgICAgaWYgKF9qc1Rlc3RQcmVWZXJib3NlTG9nZ2luZykgeworICAgICAgICBf
YnVmZmVyZWRMb2dUb0NvbnNvbGUobXNnKTsKKyAgICB9Cit9CisKK2Z1bmN0aW9uIF9hZGRTcGFu
KGNvbnRlbnRzKQoreworICAgIHZhciBzcGFuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3Bh
biIpOworICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb25zb2xlIikuYXBwZW5kQ2hpbGQo
c3Bhbik7IC8vIGluc2VydCBpdCBmaXJzdCBzbyBYSFRNTCBrbm93cyB0aGUgbmFtZXNwYWNlCisg
ICAgc3Bhbi5pbm5lckhUTUwgPSBjb250ZW50cyArICc8YnIgLz4nOworfQorCitmdW5jdGlvbiBk
ZWJ1Zyhtc2cpCit7CisgICAgaWYgKCFxdWlldE1vZGUoKSkKKyAgICAgIF9hZGRTcGFuKG1zZyk7
CisgICAgaWYgKF9qc1Rlc3RQcmVWZXJib3NlTG9nZ2luZykgeworICAgICAgICBfYnVmZmVyZWRM
b2dUb0NvbnNvbGUobXNnKTsKKyAgICB9Cit9CisKK2Z1bmN0aW9uIGVzY2FwZUhUTUwodGV4dCkK
K3sKKyAgICByZXR1cm4gdGV4dC5yZXBsYWNlKC8mL2csICImYW1wOyIpLnJlcGxhY2UoLzwvZywg
IiZsdDsiKTsKK30KKy8qKgorICogRGVmaW5lcyB0aGUgZXhjZXB0aW9uIHR5cGUgZm9yIGEgdGVz
dCBmYWlsdXJlLgorICogQGNvbnN0cnVjdG9yCisgKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZSBU
aGUgZXJyb3IgbWVzc2FnZS4KKyAqLwordmFyIFRlc3RGYWlsZWRFeGNlcHRpb24gPSBmdW5jdGlv
biAobWVzc2FnZSkgeworICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZTsKKyAgIHRoaXMubmFtZSA9
ICJUZXN0RmFpbGVkRXhjZXB0aW9uIjsKK307CisKKy8qKgorICogQHBhcmFtICB7c3RyaW5nPX0g
bXNnCisgKi8KK2Z1bmN0aW9uIHRlc3RQYXNzZWQobXNnKSB7CisgICAgbXNnID0gbXNnIHx8ICdQ
YXNzZWQnOworICAgIGlmIChfY3VycmVudFRlc3ROYW1lKQorICAgICAgbXNnID0gX2N1cnJlbnRU
ZXN0TmFtZSArICc6ICcgKyBtc2c7CisKKyAgICByZXBvcnRUZXN0UmVzdWx0c1RvSGFybmVzcyh0
cnVlLCBtc2cpOworCisgICAgaWYgKCFxdWlldE1vZGUoKSkKKyAgICAgIF9hZGRTcGFuKCc8c3Bh
bj48c3BhbiBjbGFzcz0icGFzcyI+UEFTUzwvc3Bhbj4gJyArIGVzY2FwZUhUTUwobXNnKSArICc8
L3NwYW4+Jyk7CisgICAgaWYgKF9qc1Rlc3RQcmVWZXJib3NlTG9nZ2luZykgeworICAgICAgICBf
YnVmZmVyZWRMb2dUb0NvbnNvbGUoJ1BBU1MgJyArIG1zZyk7CisgICAgfQorfQorCisvKioKKyAq
IEBwYXJhbSAge3N0cmluZz19IG1zZworICovCitmdW5jdGlvbiB0ZXN0RmFpbGVkKG1zZykgewor
ICAgIG1zZyA9IG1zZyB8fCAnRmFpbGVkJzsKKyAgICBpZiAoX2N1cnJlbnRUZXN0TmFtZSkKKyAg
ICAgIG1zZyA9IF9jdXJyZW50VGVzdE5hbWUgKyAnOiAnICsgbXNnOworCisgICAgcmVwb3J0VGVz
dFJlc3VsdHNUb0hhcm5lc3MoZmFsc2UsIG1zZyk7CisgICAgX2FkZFNwYW4oJzxzcGFuPjxzcGFu
IGNsYXNzPSJmYWlsIj5GQUlMPC9zcGFuPiAnICsgZXNjYXBlSFRNTChtc2cpICsgJzwvc3Bhbj4n
KTsKKyAgICBfYnVmZmVyZWRMb2dUb0NvbnNvbGUoJ0ZBSUwgJyArIG1zZyk7CisgICAgX2ZsdXNo
QnVmZmVyZWRMb2dzVG9Db25zb2xlKCk7Cit9CisKK3ZhciBfY3VycmVudFRlc3ROYW1lOworCisv
KioKKyAqIFNldHMgdGhlIGN1cnJlbnQgdGVzdCBuYW1lIGZvciB1c2FnZSB3aXRoaW4gdGVzdFBh
c3NlZE9wdGlvbnMvdGVzdEZhaWxlZE9wdGlvbnMuCisgKiBAcGFyYW0ge3N0cmluZz19IG5hbWUg
VGhlIG5hbWUgdG8gc2V0IGFzIHRoZSBjdXJyZW50IHRlc3QgbmFtZS4KKyAqLworZnVuY3Rpb24g
c2V0Q3VycmVudFRlc3ROYW1lKG5hbWUpCit7CisgICAgX2N1cnJlbnRUZXN0TmFtZSA9IG5hbWU7
Cit9CisKKy8qKgorICogR2V0cyB0aGUgY3VycmVudCB0ZXN0IG5hbWUgaW4gdXNlIHdpdGhpbiB0
ZXN0UGFzc2VkT3B0aW9ucy90ZXN0RmFpbGVkT3B0aW9ucy4KKyAqIEByZXR1cm4ge3N0cmluZ30g
VGhlIG5hbWUgb2YgdGhlIGN1cnJlbnQgdGVzdC4KKyAqLworZnVuY3Rpb24gZ2V0Q3VycmVudFRl
c3ROYW1lKCkKK3sKKyAgICByZXR1cm4gX2N1cnJlbnRUZXN0TmFtZTsKK30KKworLyoqCisgKiBW
YXJpYXRpb24gb2YgdGhlIHRlc3RQYXNzZWQgZnVuY3Rpb24sIHdpdGggdGhlIG9wdGlvbiB0byBu
b3Qgc2hvdyAoYW5kIHRodXMgbm90IGNvdW50KSB0aGUgdGVzdCdzIHBhc3MgcmVzdWx0LgorICog
QHBhcmFtIHtzdHJpbmd9IG1zZyBUaGUgbWVzc2FnZSB0byBiZSBzaG93biBpbiB0aGUgcGFzcyBy
ZXN1bHQuCisgKiBAcGFyYW0ge2Jvb2xlYW59IGFkZFNwYW4gSW5kaWNhdGVzIHdoZXRoZXIgdGhl
IG1lc3NhZ2Ugd2lsbCBiZSB2aXNpYmxlICh0aHVzIGNvdW50ZWQgaW4gdGhlIHJlc3VsdHMpIG9y
IG5vdC4KKyAqLworZnVuY3Rpb24gdGVzdFBhc3NlZE9wdGlvbnMobXNnLCBhZGRTcGFuKQorewor
ICAgIGlmIChhZGRTcGFuICYmICFxdWlldE1vZGUoKSkKKyAgICB7CisgICAgICAgIHJlcG9ydFRl
c3RSZXN1bHRzVG9IYXJuZXNzKHRydWUsIF9jdXJyZW50VGVzdE5hbWUgKyAiOiAiICsgbXNnKTsK
KyAgICAgICAgX2FkZFNwYW4oJzxzcGFuPjxzcGFuIGNsYXNzPSJwYXNzIj5QQVNTPC9zcGFuPiAn
ICsgZXNjYXBlSFRNTChfY3VycmVudFRlc3ROYW1lKSArICI6ICIgKyBlc2NhcGVIVE1MKG1zZykg
KyAnPC9zcGFuPicpOworICAgIH0KKyAgICBpZiAoX2pzVGVzdFByZVZlcmJvc2VMb2dnaW5nKSB7
CisgICAgICAgIF9idWZmZXJlZExvZ1RvQ29uc29sZSgnUEFTUyAnICsgbXNnKTsKKyAgICB9Cit9
CisKKy8qKgorICogUmVwb3J0IHNraXBwZWQgdGVzdHMuCisgKiBAcGFyYW0ge3N0cmluZ30gbXNn
IFRoZSBtZXNzYWdlIHRvIGJlIHNob3duIGluIHRoZSBza2lwIHJlc3VsdC4KKyAqIEBwYXJhbSB7
Ym9vbGVhbn0gYWRkU3BhbiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgbWVzc2FnZSB3aWxsIGJlIHZp
c2libGUgKHRodXMgY291bnRlZCBpbiB0aGUgcmVzdWx0cykgb3Igbm90LgorICovCitmdW5jdGlv
biB0ZXN0U2tpcHBlZE9wdGlvbnMobXNnLCBhZGRTcGFuKQoreworICAgIGlmIChhZGRTcGFuICYm
ICFxdWlldE1vZGUoKSkKKyAgICB7CisgICAgICAgIHJlcG9ydFNraXBwZWRUZXN0UmVzdWx0c1Rv
SGFybmVzcyh0cnVlLCBfY3VycmVudFRlc3ROYW1lICsgIjogIiArIG1zZyk7CisgICAgICAgIF9h
ZGRTcGFuKCc8c3Bhbj48c3BhbiBjbGFzcz0id2FybiI+U0tJUDwvc3Bhbj4gJyArIGVzY2FwZUhU
TUwoX2N1cnJlbnRUZXN0TmFtZSkgKyAiOiAiICsgZXNjYXBlSFRNTChtc2cpICsgJzwvc3Bhbj4n
KTsKKyAgICB9CisgICAgaWYgKF9qc1Rlc3RQcmVWZXJib3NlTG9nZ2luZykgeworICAgICAgICBf
YnVmZmVyZWRMb2dUb0NvbnNvbGUoJ1NLSVAnICsgbXNnKTsKKyAgICB9Cit9CisKKy8qKgorICog
VmFyaWF0aW9uIG9mIHRoZSB0ZXN0RmFpbGVkIGZ1bmN0aW9uLCB3aXRoIHRoZSBvcHRpb24gdG8g
dGhyb3cgYW4gZXhjZXB0aW9uIG9yIG5vdC4KKyAqIEBwYXJhbSB7c3RyaW5nfSBtc2cgVGhlIG1l
c3NhZ2UgdG8gYmUgc2hvd24gaW4gdGhlIGZhaWwgcmVzdWx0LgorICogQHBhcmFtIHtib29sZWFu
fSBleHRocm93IEluZGljYXRlcyB3aGV0aGVyIHRoZSBmdW5jdGlvbiB3aWxsIHRocm93IGEgVGVz
dEZhaWxlZEV4Y2VwdGlvbiBvciBub3QuCisgKi8KK2Z1bmN0aW9uIHRlc3RGYWlsZWRPcHRpb25z
KG1zZywgZXh0aHJvdykKK3sKKyAgICByZXBvcnRUZXN0UmVzdWx0c1RvSGFybmVzcyhmYWxzZSwg
X2N1cnJlbnRUZXN0TmFtZSArICI6ICIgKyBtc2cpOworICAgIF9hZGRTcGFuKCc8c3Bhbj48c3Bh
biBjbGFzcz0iZmFpbCI+RkFJTDwvc3Bhbj4gJyArIGVzY2FwZUhUTUwoX2N1cnJlbnRUZXN0TmFt
ZSkgKyAiOiAiICsgZXNjYXBlSFRNTChtc2cpICsgJzwvc3Bhbj4nKTsKKyAgICBfYnVmZmVyZWRM
b2dUb0NvbnNvbGUoJ0ZBSUwgJyArIG1zZyk7CisgICAgX2ZsdXNoQnVmZmVyZWRMb2dzVG9Db25z
b2xlKCk7CisgICAgaWYgKGV4dGhyb3cpIHsKKyAgICAgICAgX2N1cnJlbnRUZXN0TmFtZSA9ICIi
OyAvL1JlbWVtYmVyaW5nIHRvIHNldCB0aGUgbmFtZSBvZiBjdXJyZW50IHRlc3RjYXNlIHRvIGVt
cHR5IHN0cmluZy4KKyAgICAgICAgdGhyb3cgbmV3IFRlc3RGYWlsZWRFeGNlcHRpb24obXNnKTsK
KyAgICB9Cit9CisKK2Z1bmN0aW9uIGFyZUFycmF5c0VxdWFsKF9hLCBfYikKK3sKKyAgICB0cnkg
eworICAgICAgICBpZiAoX2EubGVuZ3RoICE9PSBfYi5sZW5ndGgpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgX2EubGVuZ3RoOyBpKyspCisg
ICAgICAgICAgICBpZiAoX2FbaV0gIT09IF9iW2ldKQorICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9IGNhdGNoIChleCkgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
ICAgIHJldHVybiB0cnVlOworfQorCitmdW5jdGlvbiBpc01pbnVzWmVybyhuKQoreworICAgIC8v
IHRoZSBvbmx5IHdheSB0byB0ZWxsIDAgZnJvbSAtMCBpbiBKUyBpcyB0aGUgZmFjdCB0aGF0IDEv
LTAgaXMKKyAgICAvLyAtSW5maW5pdHkgaW5zdGVhZCBvZiBJbmZpbml0eQorICAgIHJldHVybiBu
ID09PSAwICYmIDEvbiA8IDA7Cit9CisKK2Z1bmN0aW9uIGlzUmVzdWx0Q29ycmVjdChfYWN0dWFs
LCBfZXhwZWN0ZWQpCit7CisgICAgaWYgKF9leHBlY3RlZCA9PT0gMCkKKyAgICAgICAgcmV0dXJu
IF9hY3R1YWwgPT09IF9leHBlY3RlZCAmJiAoMS9fYWN0dWFsKSA9PT0gKDEvX2V4cGVjdGVkKTsK
KyAgICBpZiAoX2FjdHVhbCA9PT0gX2V4cGVjdGVkKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICBpZiAodHlwZW9mKF9leHBlY3RlZCkgPT0gIm51bWJlciIgJiYgaXNOYU4oX2V4cGVjdGVkKSkK
KyAgICAgICAgcmV0dXJuIHR5cGVvZihfYWN0dWFsKSA9PSAibnVtYmVyIiAmJiBpc05hTihfYWN0
dWFsKTsKKyAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKF9leHBlY3RlZCkg
PT0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKFtdKSkKKyAgICAgICAgcmV0dXJuIGFy
ZUFycmF5c0VxdWFsKF9hY3R1YWwsIF9leHBlY3RlZCk7CisgICAgcmV0dXJuIGZhbHNlOworfQor
CitmdW5jdGlvbiBzdHJpbmdpZnkodikKK3sKKyAgICBpZiAodiA9PT0gMCAmJiAxL3YgPCAwKQor
ICAgICAgICByZXR1cm4gIi0wIjsKKyAgICBlbHNlIHJldHVybiAiIiArIHY7Cit9CisKK2Z1bmN0
aW9uIGV2YWxBbmRMb2coX2EpCit7CisgIGlmICh0eXBlb2YgX2EgIT0gInN0cmluZyIpCisgICAg
ZGVidWcoIldBUk46IHRyeUFuZExvZygpIGV4cGVjdHMgYSBzdHJpbmcgYXJndW1lbnQiKTsKKwor
ICAvLyBMb2cgZmlyc3QgaW4gY2FzZSB0aGluZ3MgZ28gaG9ycmlibHkgd3Jvbmcgb3IgdGhpcyBj
YXVzZXMgYSBzeW5jIGV2ZW50LgorICBkZWJ1ZyhfYSk7CisKKyAgdmFyIF9hdjsKKyAgdHJ5IHsK
KyAgICAgX2F2ID0gZXZhbChfYSk7CisgIH0gY2F0Y2ggKGUpIHsKKyAgICB0ZXN0RmFpbGVkKF9h
ICsgIiB0aHJldyBleGNlcHRpb24gIiArIGUpOworICB9CisgIHJldHVybiBfYXY7Cit9CisKK2Z1
bmN0aW9uIHNob3VsZEJlU3RyaW5nKGV2YWxhYmxlLCBleHBlY3RlZCkgeworICAgIGNvbnN0IHZh
bCA9IGV2YWwoZXZhbGFibGUpOworICAgIGNvbnN0IHRleHQgPSBldmFsYWJsZSArICIgc2hvdWxk
IGJlICIgKyBleHBlY3RlZCArICIuIjsKKyAgICBpZiAodmFsID09IGV4cGVjdGVkKSB7CisgICAg
ICAgIHRlc3RQYXNzZWQodGV4dCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgdGVzdEZhaWxlZCh0
ZXh0ICsgIiAod2FzICIgKyB2YWwgKyAiKSIpOworICAgIH0KK30KKworZnVuY3Rpb24gc2hvdWxk
QmUoX2EsIF9iLCBxdWlldCkKK3sKKyAgICBpZiAodHlwZW9mIF9hICE9ICJzdHJpbmciIHx8IHR5
cGVvZiBfYiAhPSAic3RyaW5nIikKKyAgICAgICAgZGVidWcoIldBUk46IHNob3VsZEJlKCkgZXhw
ZWN0cyBzdHJpbmcgYXJndW1lbnRzIik7CisgICAgdmFyIGV4Y2VwdGlvbjsKKyAgICB2YXIgX2F2
OworICAgIHRyeSB7CisgICAgICAgIF9hdiA9IGV2YWwoX2EpOworICAgIH0gY2F0Y2ggKGUpIHsK
KyAgICAgICAgZXhjZXB0aW9uID0gZTsKKyAgICB9CisgICAgdmFyIF9idiA9IGV2YWwoX2IpOwor
CisgICAgaWYgKGV4Y2VwdGlvbikKKyAgICAgICAgdGVzdEZhaWxlZChfYSArICIgc2hvdWxkIGJl
ICIgKyBfYnYgKyAiLiBUaHJldyBleGNlcHRpb24gIiArIGV4Y2VwdGlvbik7CisgICAgZWxzZSBp
ZiAoaXNSZXN1bHRDb3JyZWN0KF9hdiwgX2J2KSkgeworICAgICAgICBpZiAoIXF1aWV0KSB7Cisg
ICAgICAgICAgICB0ZXN0UGFzc2VkKF9hICsgIiBpcyAiICsgX2IpOworICAgICAgICB9CisgICAg
fSBlbHNlIGlmICh0eXBlb2YoX2F2KSA9PSB0eXBlb2YoX2J2KSkKKyAgICAgICAgdGVzdEZhaWxl
ZChfYSArICIgc2hvdWxkIGJlICIgKyBfYnYgKyAiLiBXYXMgIiArIHN0cmluZ2lmeShfYXYpICsg
Ii4iKTsKKyAgICBlbHNlCisgICAgICAgIHRlc3RGYWlsZWQoX2EgKyAiIHNob3VsZCBiZSAiICsg
X2J2ICsgIiAob2YgdHlwZSAiICsgdHlwZW9mIF9idiArICIpLiBXYXMgIiArIF9hdiArICIgKG9m
IHR5cGUgIiArIHR5cGVvZiBfYXYgKyAiKS4iKTsKK30KKworZnVuY3Rpb24gc2hvdWxkTm90QmUo
X2EsIF9iLCBxdWlldCkKK3sKKyAgICBpZiAodHlwZW9mIF9hICE9ICJzdHJpbmciIHx8IHR5cGVv
ZiBfYiAhPSAic3RyaW5nIikKKyAgICAgICAgZGVidWcoIldBUk46IHNob3VsZE5vdEJlKCkgZXhw
ZWN0cyBzdHJpbmcgYXJndW1lbnRzIik7CisgICAgdmFyIGV4Y2VwdGlvbjsKKyAgICB2YXIgX2F2
OworICAgIHRyeSB7CisgICAgICAgIF9hdiA9IGV2YWwoX2EpOworICAgIH0gY2F0Y2ggKGUpIHsK
KyAgICAgICAgZXhjZXB0aW9uID0gZTsKKyAgICB9CisgICAgdmFyIF9idiA9IGV2YWwoX2IpOwor
CisgICAgaWYgKGV4Y2VwdGlvbikKKyAgICAgICAgdGVzdEZhaWxlZChfYSArICIgc2hvdWxkIG5v
dCBiZSAiICsgX2J2ICsgIi4gVGhyZXcgZXhjZXB0aW9uICIgKyBleGNlcHRpb24pOworICAgIGVs
c2UgaWYgKCFpc1Jlc3VsdENvcnJlY3QoX2F2LCBfYnYpKSB7CisgICAgICAgIGlmICghcXVpZXQp
IHsKKyAgICAgICAgICAgIHRlc3RQYXNzZWQoX2EgKyAiIGlzIG5vdCAiICsgX2IpOworICAgICAg
ICB9CisgICAgfSBlbHNlCisgICAgICAgIHRlc3RGYWlsZWQoX2EgKyAiIHNob3VsZCBub3QgYmUg
IiArIF9idiArICIuIik7Cit9CisKK2Z1bmN0aW9uIHNob3VsZEJlVHJ1ZShfYSkgeyBzaG91bGRC
ZShfYSwgInRydWUiKTsgfQorZnVuY3Rpb24gc2hvdWxkQmVGYWxzZShfYSkgeyBzaG91bGRCZShf
YSwgImZhbHNlIik7IH0KK2Z1bmN0aW9uIHNob3VsZEJlTmFOKF9hKSB7IHNob3VsZEJlKF9hLCAi
TmFOIik7IH0KK2Z1bmN0aW9uIHNob3VsZEJlTnVsbChfYSkgeyBzaG91bGRCZShfYSwgIm51bGwi
KTsgfQorCitmdW5jdGlvbiBzaG91bGRCZUVxdWFsVG9TdHJpbmcoYSwgYikKK3sKKyAgdmFyIHVu
ZXZhbGVkU3RyaW5nID0gJyInICsgYi5yZXBsYWNlKC8iL2csICJcIiIpICsgJyInOworICBzaG91
bGRCZShhLCB1bmV2YWxlZFN0cmluZyk7Cit9CisKK2Z1bmN0aW9uIHNob3VsZEV2YWx1YXRlVG8o
YWN0dWFsLCBleHBlY3RlZCkgeworICAvLyBBIGdlbmVyYWwtcHVycG9zZSBjb21wYXJhdG9yLiAg
J2FjdHVhbCcgc2hvdWxkIGJlIGEgc3RyaW5nIHRvIGJlCisgIC8vIGV2YWx1YXRlZCwgYXMgZm9y
IHNob3VsZEJlKCkuICdleHBlY3RlZCcgbWF5IGJlIGFueSB0eXBlIGFuZCB3aWxsIGJlCisgIC8v
IHVzZWQgd2l0aG91dCBiZWluZyBldmFsJ2VkLgorICBpZiAoZXhwZWN0ZWQgPT0gbnVsbCkgewor
ICAgIC8vIERvIHRoaXMgYmVmb3JlIHRoZSBvYmplY3QgdGVzdCwgc2luY2UgbnVsbCBpcyBvZiB0
eXBlICdvYmplY3QnLgorICAgIHNob3VsZEJlTnVsbChhY3R1YWwpOworICB9IGVsc2UgaWYgKHR5
cGVvZiBleHBlY3RlZCA9PSAidW5kZWZpbmVkIikgeworICAgIHNob3VsZEJlVW5kZWZpbmVkKGFj
dHVhbCk7CisgIH0gZWxzZSBpZiAodHlwZW9mIGV4cGVjdGVkID09ICJmdW5jdGlvbiIpIHsKKyAg
ICAvLyBBbGwgdGhpcyBmdXNzIGlzIHRvIGF2b2lkIHRoZSBzdHJpbmctYXJnIHdhcm5pbmcgZnJv
bSBzaG91bGRCZSgpLgorICAgIHRyeSB7CisgICAgICB2YXIgYWN0dWFsVmFsdWUgPSBldmFsKGFj
dHVhbCk7CisgICAgfSBjYXRjaCAoZSkgeworICAgICAgdGVzdEZhaWxlZCgiRXZhbHVhdGluZyAi
ICsgYWN0dWFsICsgIjogVGhyZXcgZXhjZXB0aW9uICIgKyBlKTsKKyAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgc2hvdWxkQmUoIiciICsgYWN0dWFsVmFsdWUudG9TdHJpbmcoKS5yZXBsYWNlKC9c
bi9nLCAiIikgKyAiJyIsCisgICAgICAgICAgICAgIiciICsgZXhwZWN0ZWQudG9TdHJpbmcoKS5y
ZXBsYWNlKC9cbi9nLCAiIikgKyAiJyIpOworICB9IGVsc2UgaWYgKHR5cGVvZiBleHBlY3RlZCA9
PSAib2JqZWN0IikgeworICAgIHNob3VsZEJlVHJ1ZShhY3R1YWwgKyAiID09ICciICsgZXhwZWN0
ZWQgKyAiJyIpOworICB9IGVsc2UgaWYgKHR5cGVvZiBleHBlY3RlZCA9PSAic3RyaW5nIikgewor
ICAgIHNob3VsZEJlKGFjdHVhbCwgZXhwZWN0ZWQpOworICB9IGVsc2UgaWYgKHR5cGVvZiBleHBl
Y3RlZCA9PSAiYm9vbGVhbiIpIHsKKyAgICBzaG91bGRCZSgidHlwZW9mICIgKyBhY3R1YWwsICIn
Ym9vbGVhbiciKTsKKyAgICBpZiAoZXhwZWN0ZWQpCisgICAgICBzaG91bGRCZVRydWUoYWN0dWFs
KTsKKyAgICBlbHNlCisgICAgICBzaG91bGRCZUZhbHNlKGFjdHVhbCk7CisgIH0gZWxzZSBpZiAo
dHlwZW9mIGV4cGVjdGVkID09ICJudW1iZXIiKSB7CisgICAgc2hvdWxkQmUoYWN0dWFsLCBzdHJp
bmdpZnkoZXhwZWN0ZWQpKTsKKyAgfSBlbHNlIHsKKyAgICBkZWJ1ZyhleHBlY3RlZCArICIgaXMg
dW5rbm93biB0eXBlICIgKyB0eXBlb2YgZXhwZWN0ZWQpOworICAgIHNob3VsZEJlVHJ1ZShhY3R1
YWwsICInIiAgK2V4cGVjdGVkLnRvU3RyaW5nKCkgKyAiJyIpOworICB9Cit9CisKK2Z1bmN0aW9u
IHNob3VsZEJlTm9uWmVybyhfYSkKK3sKKyAgdmFyIGV4Y2VwdGlvbjsKKyAgdmFyIF9hdjsKKyAg
dHJ5IHsKKyAgICAgX2F2ID0gZXZhbChfYSk7CisgIH0gY2F0Y2ggKGUpIHsKKyAgICAgZXhjZXB0
aW9uID0gZTsKKyAgfQorCisgIGlmIChleGNlcHRpb24pCisgICAgdGVzdEZhaWxlZChfYSArICIg
c2hvdWxkIGJlIG5vbi16ZXJvLiBUaHJldyBleGNlcHRpb24gIiArIGV4Y2VwdGlvbik7CisgIGVs
c2UgaWYgKF9hdiAhPSAwKQorICAgIHRlc3RQYXNzZWQoX2EgKyAiIGlzIG5vbi16ZXJvLiIpOwor
ICBlbHNlCisgICAgdGVzdEZhaWxlZChfYSArICIgc2hvdWxkIGJlIG5vbi16ZXJvLiBXYXMgIiAr
IF9hdik7Cit9CisKK2Z1bmN0aW9uIHNob3VsZEJlTm9uTnVsbChfYSkKK3sKKyAgdmFyIGV4Y2Vw
dGlvbjsKKyAgdmFyIF9hdjsKKyAgdHJ5IHsKKyAgICAgX2F2ID0gZXZhbChfYSk7CisgIH0gY2F0
Y2ggKGUpIHsKKyAgICAgZXhjZXB0aW9uID0gZTsKKyAgfQorCisgIGlmIChleGNlcHRpb24pCisg
ICAgdGVzdEZhaWxlZChfYSArICIgc2hvdWxkIGJlIG5vbi1udWxsLiBUaHJldyBleGNlcHRpb24g
IiArIGV4Y2VwdGlvbik7CisgIGVsc2UgaWYgKF9hdiAhPSBudWxsKQorICAgIHRlc3RQYXNzZWQo
X2EgKyAiIGlzIG5vbi1udWxsLiIpOworICBlbHNlCisgICAgdGVzdEZhaWxlZChfYSArICIgc2hv
dWxkIGJlIG5vbi1udWxsLiBXYXMgIiArIF9hdik7Cit9CisKK2Z1bmN0aW9uIHNob3VsZEJlVW5k
ZWZpbmVkKF9hKQoreworICB2YXIgZXhjZXB0aW9uOworICB2YXIgX2F2OworICB0cnkgeworICAg
ICBfYXYgPSBldmFsKF9hKTsKKyAgfSBjYXRjaCAoZSkgeworICAgICBleGNlcHRpb24gPSBlOwor
ICB9CisKKyAgaWYgKGV4Y2VwdGlvbikKKyAgICB0ZXN0RmFpbGVkKF9hICsgIiBzaG91bGQgYmUg
dW5kZWZpbmVkLiBUaHJldyBleGNlcHRpb24gIiArIGV4Y2VwdGlvbik7CisgIGVsc2UgaWYgKHR5
cGVvZiBfYXYgPT0gInVuZGVmaW5lZCIpCisgICAgdGVzdFBhc3NlZChfYSArICIgaXMgdW5kZWZp
bmVkLiIpOworICBlbHNlCisgICAgdGVzdEZhaWxlZChfYSArICIgc2hvdWxkIGJlIHVuZGVmaW5l
ZC4gV2FzICIgKyBfYXYpOworfQorCitmdW5jdGlvbiBzaG91bGRCZURlZmluZWQoX2EpCit7Cisg
IHZhciBleGNlcHRpb247CisgIHZhciBfYXY7CisgIHRyeSB7CisgICAgIF9hdiA9IGV2YWwoX2Ep
OworICB9IGNhdGNoIChlKSB7CisgICAgIGV4Y2VwdGlvbiA9IGU7CisgIH0KKworICBpZiAoZXhj
ZXB0aW9uKQorICAgIHRlc3RGYWlsZWQoX2EgKyAiIHNob3VsZCBiZSBkZWZpbmVkLiBUaHJldyBl
eGNlcHRpb24gIiArIGV4Y2VwdGlvbik7CisgIGVsc2UgaWYgKF9hdiAhPT0gdW5kZWZpbmVkKQor
ICAgIHRlc3RQYXNzZWQoX2EgKyAiIGlzIGRlZmluZWQuIik7CisgIGVsc2UKKyAgICB0ZXN0RmFp
bGVkKF9hICsgIiBzaG91bGQgYmUgZGVmaW5lZC4gV2FzICIgKyBfYXYpOworfQorCitmdW5jdGlv
biBzaG91bGRCZUxlc3NUaGFuT3JFcXVhbChfYSwgX2IpIHsKKyAgICBpZiAodHlwZW9mIF9hICE9
ICJzdHJpbmciIHx8IHR5cGVvZiBfYiAhPSAic3RyaW5nIikKKyAgICAgICAgZGVidWcoIldBUk46
IHNob3VsZEJlTGVzc1RoYW5PckVxdWFsIGV4cGVjdHMgc3RyaW5nIGFyZ3VtZW50cyIpOworCisg
ICAgdmFyIGV4Y2VwdGlvbjsKKyAgICB2YXIgX2F2OworICAgIHRyeSB7CisgICAgICAgIF9hdiA9
IGV2YWwoX2EpOworICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgZXhjZXB0aW9uID0gZTsKKyAg
ICB9CisgICAgdmFyIF9idiA9IGV2YWwoX2IpOworCisgICAgaWYgKGV4Y2VwdGlvbikKKyAgICAg
ICAgdGVzdEZhaWxlZChfYSArICIgc2hvdWxkIGJlIDw9ICIgKyBfYiArICIuIFRocmV3IGV4Y2Vw
dGlvbiAiICsgZXhjZXB0aW9uKTsKKyAgICBlbHNlIGlmICh0eXBlb2YgX2F2ID09ICJ1bmRlZmlu
ZWQiIHx8IF9hdiA+IF9idikKKyAgICAgICAgdGVzdEZhaWxlZChfYSArICIgc2hvdWxkIGJlID49
ICIgKyBfYiArICIuIFdhcyAiICsgX2F2ICsgIiAob2YgdHlwZSAiICsgdHlwZW9mIF9hdiArICIp
LiIpOworICAgIGVsc2UKKyAgICAgICAgdGVzdFBhc3NlZChfYSArICIgaXMgPD0gIiArIF9iKTsK
K30KKworZnVuY3Rpb24gc2hvdWxkQmVHcmVhdGVyVGhhbk9yRXF1YWwoX2EsIF9iKSB7CisgICAg
aWYgKHR5cGVvZiBfYSAhPSAic3RyaW5nIiB8fCB0eXBlb2YgX2IgIT0gInN0cmluZyIpCisgICAg
ICAgIGRlYnVnKCJXQVJOOiBzaG91bGRCZUdyZWF0ZXJUaGFuT3JFcXVhbCBleHBlY3RzIHN0cmlu
ZyBhcmd1bWVudHMiKTsKKworICAgIHZhciBleGNlcHRpb247CisgICAgdmFyIF9hdjsKKyAgICB0
cnkgeworICAgICAgICBfYXYgPSBldmFsKF9hKTsKKyAgICB9IGNhdGNoIChlKSB7CisgICAgICAg
IGV4Y2VwdGlvbiA9IGU7CisgICAgfQorICAgIHZhciBfYnYgPSBldmFsKF9iKTsKKworICAgIGlm
IChleGNlcHRpb24pCisgICAgICAgIHRlc3RGYWlsZWQoX2EgKyAiIHNob3VsZCBiZSA+PSAiICsg
X2IgKyAiLiBUaHJldyBleGNlcHRpb24gIiArIGV4Y2VwdGlvbik7CisgICAgZWxzZSBpZiAodHlw
ZW9mIF9hdiA9PSAidW5kZWZpbmVkIiB8fCBfYXYgPCBfYnYpCisgICAgICAgIHRlc3RGYWlsZWQo
X2EgKyAiIHNob3VsZCBiZSA+PSAiICsgX2IgKyAiLiBXYXMgIiArIF9hdiArICIgKG9mIHR5cGUg
IiArIHR5cGVvZiBfYXYgKyAiKS4iKTsKKyAgICBlbHNlCisgICAgICAgIHRlc3RQYXNzZWQoX2Eg
KyAiIGlzID49ICIgKyBfYik7Cit9CisKK2Z1bmN0aW9uIGV4cGVjdFRydWUodiwgbXNnKSB7Cisg
IGlmICh2KSB7CisgICAgdGVzdFBhc3NlZChtc2cpOworICB9IGVsc2UgeworICAgIHRlc3RGYWls
ZWQobXNnKTsKKyAgfQorfQorCitmdW5jdGlvbiBtYXhBcnJheURpZmYoYSwgYikgeworICAgIGlm
IChhLmxlbmd0aCAhPSBiLmxlbmd0aCkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBhIGFuZCBi
IGhhdmUgZGlmZmVyZW50IGxlbmd0aHM6ICR7YS5sZW5ndGh9IHZzICR7Yi5sZW5ndGh9YCk7CisK
KyAgICBsZXQgZGlmZiA9IDA7CisgICAgZm9yIChjb25zdCBpIGluIGEpIHsKKyAgICAgICAgZGlm
ZiA9IE1hdGgubWF4KGRpZmYsIE1hdGguYWJzKGFbaV0gLSBiW2ldKSk7CisgICAgfQorICAgIHJl
dHVybiBkaWZmOworfQorCitmdW5jdGlvbiBleHBlY3RBcnJheSh3YXMsIGV4cGVjdGVkLCBtYXhE
aWZmPTApIHsKKyAgICBjb25zdCBkaWZmID0gbWF4QXJyYXlEaWZmKGV4cGVjdGVkLCB3YXMpOwor
ICAgIGxldCBzdHIgPSBgRXhwZWN0ZWQgWyR7ZXhwZWN0ZWQudG9TdHJpbmcoKX1dYDsKKyAgICBs
ZXQgZm4gPSB0ZXN0UGFzc2VkOworICAgIGlmIChtYXhEaWZmKSB7CisgICAgICAgIHN0ciArPSAn
ICsvLSAnICsgbWF4RGlmZjsKKyAgICB9CisgICAgaWYgKGRpZmYgPiBtYXhEaWZmKSB7CisgICAg
ICAgIGZuID0gdGVzdEZhaWxlZDsKKyAgICAgICAgc3RyICs9IGAsIHdhcyBbJHt3YXMudG9TdHJp
bmcoKX1dYDsKKyAgICB9CisgICAgZm4oc3RyKTsKK30KKworZnVuY3Rpb24gc2hvdWxkVGhyb3co
X2EsIF9lKQoreworICB2YXIgZXhjZXB0aW9uOworICB2YXIgX2F2OworICB0cnkgeworICAgICBf
YXYgPSBldmFsKF9hKTsKKyAgfSBjYXRjaCAoZSkgeworICAgICBleGNlcHRpb24gPSBlOworICB9
CisKKyAgdmFyIF9ldjsKKyAgaWYgKF9lKQorICAgICAgX2V2ID0gIGV2YWwoX2UpOworCisgIGlm
IChleGNlcHRpb24pIHsKKyAgICBpZiAodHlwZW9mIF9lID09ICJ1bmRlZmluZWQiIHx8IGV4Y2Vw
dGlvbiA9PSBfZXYpCisgICAgICB0ZXN0UGFzc2VkKF9hICsgIiB0aHJldyBleGNlcHRpb24gIiAr
IGV4Y2VwdGlvbiArICIuIik7CisgICAgZWxzZQorICAgICAgdGVzdEZhaWxlZChfYSArICIgc2hv
dWxkIHRocm93ICIgKyAodHlwZW9mIF9lID09ICJ1bmRlZmluZWQiID8gImFuIGV4Y2VwdGlvbiIg
OiBfZXYpICsgIi4gVGhyZXcgZXhjZXB0aW9uICIgKyBleGNlcHRpb24gKyAiLiIpOworICB9IGVs
c2UgaWYgKHR5cGVvZiBfYXYgPT0gInVuZGVmaW5lZCIpCisgICAgdGVzdEZhaWxlZChfYSArICIg
c2hvdWxkIHRocm93ICIgKyAodHlwZW9mIF9lID09ICJ1bmRlZmluZWQiID8gImFuIGV4Y2VwdGlv
biIgOiBfZXYpICsgIi4gV2FzIHVuZGVmaW5lZC4iKTsKKyAgZWxzZQorICAgIHRlc3RGYWlsZWQo
X2EgKyAiIHNob3VsZCB0aHJvdyAiICsgKHR5cGVvZiBfZSA9PSAidW5kZWZpbmVkIiA/ICJhbiBl
eGNlcHRpb24iIDogX2V2KSArICIuIFdhcyAiICsgX2F2ICsgIi4iKTsKK30KKworZnVuY3Rpb24g
c2hvdWxkTm90VGhyb3coZXZhbFN0ciwgZGVzYykgeworICBkZXNjID0gZGVzYyB8fCBgXGAke2V2
YWxTdHJ9XGBgOworICB0cnkgeworICAgIGV2YWwoZXZhbFN0cik7CisgICAgdGVzdFBhc3NlZChg
JHtkZXNjfSBzaG91bGQgbm90IHRocm93LmApOworICB9IGNhdGNoIChlKSB7CisgICAgdGVzdEZh
aWxlZChgJHtkZXNjfSBzaG91bGQgbm90IHRocm93LCBidXQgdGhyZXcgZXhjZXB0aW9uICR7ZX0u
YCk7CisgIH0KK30KKworCitmdW5jdGlvbiBzaG91bGRCZVR5cGUoX2EsIF90eXBlKSB7CisgICAg
dmFyIGV4Y2VwdGlvbjsKKyAgICB2YXIgX2F2OworICAgIHRyeSB7CisgICAgICAgIF9hdiA9IGV2
YWwoX2EpOworICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgZXhjZXB0aW9uID0gZTsKKyAgICB9
CisKKyAgICB2YXIgX3R5cGV2ID0gZXZhbChfdHlwZSk7CisKKyAgICBpZihfdHlwZXYgPT09IE51
bWJlcil7CisgICAgICAgIGlmKF9hdiBpbnN0YW5jZW9mIE51bWJlcil7CisgICAgICAgICAgICB0
ZXN0UGFzc2VkKF9hICsgIiBpcyBhbiBpbnN0YW5jZSBvZiBOdW1iZXIiKTsKKyAgICAgICAgfQor
ICAgICAgICBlbHNlIGlmKHR5cGVvZihfYXYpID09PSAnbnVtYmVyJyl7CisgICAgICAgICAgICB0
ZXN0UGFzc2VkKF9hICsgIiBpcyBhbiBpbnN0YW5jZSBvZiBOdW1iZXIiKTsKKyAgICAgICAgfQor
ICAgICAgICBlbHNleworICAgICAgICAgICAgdGVzdEZhaWxlZChfYSArICIgaXMgbm90IGFuIGlu
c3RhbmNlIG9mIE51bWJlciIpOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UgaWYgKF9hdiBp
bnN0YW5jZW9mIF90eXBldikgeworICAgICAgICB0ZXN0UGFzc2VkKF9hICsgIiBpcyBhbiBpbnN0
YW5jZSBvZiAiICsgX3R5cGUpOworICAgIH0gZWxzZSB7CisgICAgICAgIHRlc3RGYWlsZWQoX2Eg
KyAiIGlzIG5vdCBhbiBpbnN0YW5jZSBvZiAiICsgX3R5cGUpOworICAgIH0KK30KKworLyoqCisg
KiBTaG93cyBhIG1lc3NhZ2UgaW4gY2FzZSBleHByZXNzaW9uIHRlc3QgZmFpbHMuCisgKiBAcGFy
YW0ge2Jvb2xlYW59IGV4cAorICogQHBhcmFtIHtzdHJhaW5nfSBtZXNzYWdlCisgKi8KK2Z1bmN0
aW9uIGNoZWNrTWVzc2FnZShleHAsIG1lc3NhZ2UpIHsKKyAgICBpZiAoICFleHAgKQorICAgICAg
ICBfYWRkU3BhbignPHNwYW4+PHNwYW4gY2xhc3M9Indhcm4iPldBUk5JTkc8L3NwYW4+ICcgKyBl
c2NhcGVIVE1MKF9jdXJyZW50VGVzdE5hbWUpICsgIjogIiArIGVzY2FwZUhUTUwobWVzc2FnZSkg
KyAnPC9zcGFuPicpOworfQorCitmdW5jdGlvbiBhc3NlcnRNc2coYXNzZXJ0aW9uLCBtc2cpIHsK
KyAgICBpZiAoYXNzZXJ0aW9uKSB7CisgICAgICAgIHRlc3RQYXNzZWQobXNnKTsKKyAgICB9IGVs
c2UgeworICAgICAgICB0ZXN0RmFpbGVkKG1zZyk7CisgICAgfQorfQorCisvKioKKyAqIFZhcmlh
dGlvbiBvZiB0aGUgYXNzZXJ0TXNnIGZ1bmN0aW9uLCB3aXRoIHRoZSBvcHRpb24gdG8gbm90IHNo
b3cgKGFuZCB0aHVzIG5vdCBjb3VudCkgdGhlIHRlc3QncyBwYXNzIHJlc3VsdCwKKyAqIGFuZCB0
aHJvdyBvciBub3QgYSBUZXN0RmFpbGVkRXhjZXB0aW9uIGluIGNhc2Ugb2YgZmFpbHVyZS4KKyAq
IEBwYXJhbSB7Ym9vbGVhbn0gYXNzZXJ0aW9uIElmIHRoaXMgaXMgdHJ1ZSwgbWVhbnMgc3VjY2Vz
cywgZWxzZSBmYWlsdXJlLgorICogQHBhcmFtIHs/c3RyaW5nfSBtc2cgVGhlIG1lc3NhZ2UgdG8g
YmUgc2hvd24gaW4gdGhlIHJlc3VsdC4KKyAqIEBwYXJhbSB7Ym9vbGVhbn0gdmVyYm9zZSBJbiBj
YXNlIG9mIHN1Y2Nlc3MsIGRldGVybWluZXMgaWYgdGhlIHRlc3Qgd2lsbCBzaG93IGl0J3MgcmVz
dWx0IGFuZCBjb3VudCBpbiB0aGUgcmVzdWx0cy4KKyAqIEBwYXJhbSB7Ym9vbGVhbn0gZXh0aHJv
dyBJbiBjYXNlIG9mIGZhaWx1cmUsIGRldGVybWluZXMgaWYgdGhlIGZ1bmN0aW9uIHdpbGwgdGhy
b3cgYSBUZXN0RmFpbGVkRXhjZXB0aW9uLgorICovCitmdW5jdGlvbiBhc3NlcnRNc2dPcHRpb25z
KGFzc2VydGlvbiwgbXNnLCB2ZXJib3NlLCBleHRocm93KSB7CisgICAgaWYgKGFzc2VydGlvbikg
eworICAgICAgICB0ZXN0UGFzc2VkT3B0aW9ucyhtc2csIHZlcmJvc2UpOworICAgIH0gZWxzZSB7
CisgICAgICAgIHRlc3RGYWlsZWRPcHRpb25zKG1zZywgZXh0aHJvdyk7CisgICAgfQorfQorCisK
K2Z1bmN0aW9uIHdlYmdsSGFybmVzc0NvbGxlY3RHYXJiYWdlKCkgeworICAgIGlmICh3aW5kb3cu
R0NDb250cm9sbGVyKSB7CisgICAgICAgIHdpbmRvdy5HQ0NvbnRyb2xsZXIuY29sbGVjdCgpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKHdpbmRvdy5vcGVyYSAmJiB3aW5kb3cu
b3BlcmEuY29sbGVjdCkgeworICAgICAgICB3aW5kb3cub3BlcmEuY29sbGVjdCgpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgdHJ5IHsKKyAgICAgICAgd2luZG93LlF1ZXJ5SW50ZXJm
YWNlKENvbXBvbmVudHMuaW50ZXJmYWNlcy5uc0lJbnRlcmZhY2VSZXF1ZXN0b3IpCisgICAgICAg
ICAgICAgIC5nZXRJbnRlcmZhY2UoQ29tcG9uZW50cy5pbnRlcmZhY2VzLm5zSURPTVdpbmRvd1V0
aWxzKQorICAgICAgICAgICAgICAuZ2FyYmFnZUNvbGxlY3QoKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0gY2F0Y2goZSkge30KKworICAgIGlmICh3aW5kb3cuZ2MpIHsKKyAgICAgICAgd2luZG93
LmdjKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAod2luZG93LkNvbGxlY3RH
YXJiYWdlKSB7CisgICAgICAgIENvbGxlY3RHYXJiYWdlKCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICAvLyBXZWJLaXQncyBNaW5pQnJvd3Nlci4KKyAgICBpZiAod2luZG93LiR2bSkg
eworICAgICAgICB3aW5kb3cuJHZtLmdjKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBmdW5jdGlvbiBnY1JlYyhuKSB7CisgICAgICAgIGlmIChuIDwgMSkKKyAgICAgICAgICAgIHJl
dHVybiB7fTsKKyAgICAgICAgdmFyIHRlbXAgPSB7aTogImFiIiArIGkgKyAoaSAvIDEwMDAwMCl9
OworICAgICAgICB0ZW1wICs9ICJmb28iOworICAgICAgICBnY1JlYyhuLTEpOworICAgIH0KKyAg
ICBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDA7IGkrKykKKyAgICAgICAgZ2NSZWMoMTApOworfQor
CitmdW5jdGlvbiBmaW5pc2hUZXN0KCkgeworICBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOwor
ICB2YXIgZXBpbG9ndWUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKTsKKyAgdmFy
IGJhc2VQYXRoID0gIiI7CisgIHZhciBleHBlY3RlZEJhc2UgPSAianMtdGVzdC1wcmUuanMiOwor
ICB2YXIgc2NyaXB0cyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdzY3JpcHQnKTsK
KyAgZm9yICh2YXIgc2NyaXB0LCBpID0gMDsgc2NyaXB0ID0gc2NyaXB0c1tpXTsgaSsrKSB7Cisg
ICAgdmFyIHNyYyA9IHNjcmlwdC5zcmM7CisgICAgdmFyIGwgPSBzcmMubGVuZ3RoOworICAgIGlm
IChzcmMuc3Vic3RyKGwgLSBleHBlY3RlZEJhc2UubGVuZ3RoKSA9PSBleHBlY3RlZEJhc2UpIHsK
KyAgICAgIGJhc2VQYXRoID0gc3JjLnN1YnN0cigwLCBsIC0gZXhwZWN0ZWRCYXNlLmxlbmd0aCk7
CisgICAgICBicmVhazsKKyAgICB9CisgIH0KKyAgZXBpbG9ndWUuc3JjID0gYmFzZVBhdGggKyAi
anMtdGVzdC1wb3N0LmpzIjsKKyAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChlcGlsb2d1ZSk7
Cit9CisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdsL3BlbmRpbmcvcmVzb3VyY2VzL3dl
YmdsX3Rlc3RfZmlsZXMvanMvd2ViZ2wtdGVzdC11dGlscy5qcyBiL0xheW91dFRlc3RzL3dlYmds
L3BlbmRpbmcvcmVzb3VyY2VzL3dlYmdsX3Rlc3RfZmlsZXMvanMvd2ViZ2wtdGVzdC11dGlscy5q
cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi4wMzkyODM4ZmI4OTM3YzdkMTE3ZThlYjJjN2ExODYyNWZlYzdkZmNiCi0t
LSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ2wvcGVuZGluZy9yZXNvdXJjZXMvd2Vi
Z2xfdGVzdF9maWxlcy9qcy93ZWJnbC10ZXN0LXV0aWxzLmpzCkBAIC0wLDAgKzEsMzU1MCBAQAor
LyoKK0NvcHlyaWdodCAoYykgMjAxOSBUaGUgS2hyb25vcyBHcm91cCBJbmMuCitVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNh
biBiZQorZm91bmQgaW4gdGhlIExJQ0VOU0UudHh0IGZpbGUuCisqLwordmFyIFdlYkdMVGVzdFV0
aWxzID0gKGZ1bmN0aW9uKCkgeworInVzZSBzdHJpY3QiOworCisvKioKKyAqIFdyYXBwZWQgbG9n
Z2luZyBmdW5jdGlvbi4KKyAqIEBwYXJhbSB7c3RyaW5nfSBtc2cgVGhlIG1lc3NhZ2UgdG8gbG9n
LgorICovCit2YXIgbG9nID0gZnVuY3Rpb24obXNnKSB7CisgIGJ1ZmZlcmVkTG9nVG9Db25zb2xl
KG1zZyk7Cit9OworCisvKioKKyAqIFdyYXBwZWQgbG9nZ2luZyBmdW5jdGlvbi4KKyAqIEBwYXJh
bSB7c3RyaW5nfSBtc2cgVGhlIG1lc3NhZ2UgdG8gbG9nLgorICovCit2YXIgZXJyb3IgPSBmdW5j
dGlvbihtc2cpIHsKKyAgLy8gRm9yIHRoZSB0aW1lIGJlaW5nLCBkaXZlcnRpbmcgdGhpcyB0byB3
aW5kb3cuY29uc29sZS5sb2cgcmF0aGVyCisgIC8vIHRoYW4gd2luZG93LmNvbnNvbGUuZXJyb3Iu
IElmIGFueW9uZSBjYXJlcyBlbm91Z2ggdGhleSBjYW4KKyAgLy8gZ2VuZXJhbGl6ZSB0aGUgbWVj
aGFuaXNtIGluIGpzLXRlc3QtcHJlLmpzLgorICBsb2cobXNnKTsKK307CisKKy8qKgorICogVHVy
biBvZmYgYWxsIGxvZ2dpbmcuCisgKi8KK3ZhciBsb2dnaW5nT2ZmID0gZnVuY3Rpb24oKSB7Cisg
IGxvZyA9IGZ1bmN0aW9uKCkge307CisgIGVycm9yID0gZnVuY3Rpb24oKSB7fTsKK307CisKK2Nv
bnN0IEVOVU1fTkFNRV9SRUdFWCA9IFJlZ0V4cCgnW0EtWl1bQS1aMC05X10qJyk7Citjb25zdCBF
TlVNX05BTUVfQllfVkFMVUUgPSB7fTsKK2NvbnN0IEVOVU1fTkFNRV9QUk9UT1RZUEVTID0gbmV3
IE1hcCgpOworCisvKioKKyAqIENvbnZlcnRzIGEgV2ViR0wgZW51bSB0byBhIHN0cmluZy4KKyAq
IEBwYXJhbSB7IVdlYkdMUmVuZGVyaW5nQ29udGV4dH0gZ2wgVGhlIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dCB0byB1c2UuCisgKiBAcGFyYW0ge251bWJlcn0gdmFsdWUgVGhlIGVudW0gdmFsdWUuCisg
KiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBlbnVtIGFzIGEgc3RyaW5nLgorICovCit2YXIgZ2xFbnVt
VG9TdHJpbmcgPSBmdW5jdGlvbihnbE9yRXh0LCB2YWx1ZSkgeworICBpZiAodmFsdWUgPT09IHVu
ZGVmaW5lZCkKKyAgICB0aHJvdyBuZXcgRXJyb3IoJ2dsRW51bVRvU3RyaW5nOiBgdmFsdWVgIG11
c3Qgbm90IGJlIHVuZGVmaW5lZCcpOworCisgIGNvbnN0IHByb3RvID0gZ2xPckV4dC5fX3Byb3Rv
X187CisgIGlmICghRU5VTV9OQU1FX1BST1RPVFlQRVMuaGFzKHByb3RvKSkgeworICAgIEVOVU1f
TkFNRV9QUk9UT1RZUEVTLnNldChwcm90bywgdHJ1ZSk7CisKKyAgICBmb3IgKGNvbnN0IGsgaW4g
cHJvdG8pIHsKKyAgICAgIGlmICghRU5VTV9OQU1FX1JFR0VYLnRlc3QoaykpIGNvbnRpbnVlOwor
CisgICAgICBjb25zdCB2ID0gZ2xPckV4dFtrXTsKKyAgICAgIGlmIChFTlVNX05BTUVfQllfVkFM
VUVbdl0gPT09IHVuZGVmaW5lZCkgeworICAgICAgICBFTlVNX05BTUVfQllfVkFMVUVbdl0gPSBr
OworICAgICAgfSBlbHNlIHsKKyAgICAgICAgRU5VTV9OQU1FX0JZX1ZBTFVFW3ZdICs9ICcvJyAr
IGs7CisgICAgICB9CisgICAgfQorICB9CisKKyAgY29uc3Qga2V5ID0gRU5VTV9OQU1FX0JZX1ZB
TFVFW3ZhbHVlXTsKKyAgaWYgKGtleSAhPT0gdW5kZWZpbmVkKSByZXR1cm4ga2V5OworCisgIHJl
dHVybiAiMHgiICsgTnVtYmVyKHZhbHVlKS50b1N0cmluZygxNik7Cit9OworCit2YXIgbGFzdEVy
cm9yID0gIiI7CisKKy8qKgorICogUmV0dXJucyB0aGUgbGFzdCBjb21waWxlci9saW5rZXIgZXJy
b3IuCisgKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBsYXN0IGNvbXBpbGVyL2xpbmtlciBlcnJvci4K
KyAqLwordmFyIGdldExhc3RFcnJvciA9IGZ1bmN0aW9uKCkgeworICByZXR1cm4gbGFzdEVycm9y
OworfTsKKworLyoqCisgKiBXaGV0aGVyIGEgaGF5c3RhY2sgZW5kcyB3aXRoIGEgbmVlZGxlLgor
ICogQHBhcmFtIHtzdHJpbmd9IGhheXN0YWNrIFN0cmluZyB0byBzZWFyY2gKKyAqIEBwYXJhbSB7
c3RyaW5nfSBuZWVkbGUgU3RyaW5nIHRvIHNlYXJjaCBmb3IuCisgKiBAcGFyYW0ge2Jvb2xlYW59
IFRydWUgaWYgaGF5c3RhY2sgZW5kcyB3aXRoIG5lZWRsZS4KKyAqLwordmFyIGVuZHNXaXRoID0g
ZnVuY3Rpb24oaGF5c3RhY2ssIG5lZWRsZSkgeworICByZXR1cm4gaGF5c3RhY2suc3Vic3RyKGhh
eXN0YWNrLmxlbmd0aCAtIG5lZWRsZS5sZW5ndGgpID09PSBuZWVkbGU7Cit9OworCisvKioKKyAq
IFdoZXRoZXIgYSBoYXlzdGFjayBzdGFydHMgd2l0aCBhIG5lZWRsZS4KKyAqIEBwYXJhbSB7c3Ry
aW5nfSBoYXlzdGFjayBTdHJpbmcgdG8gc2VhcmNoCisgKiBAcGFyYW0ge3N0cmluZ30gbmVlZGxl
IFN0cmluZyB0byBzZWFyY2ggZm9yLgorICogQHBhcmFtIHtib29sZWFufSBUcnVlIGlmIGhheXN0
YWNrIHN0YXJ0cyB3aXRoIG5lZWRsZS4KKyAqLwordmFyIHN0YXJ0c1dpdGggPSBmdW5jdGlvbiho
YXlzdGFjaywgbmVlZGxlKSB7CisgIHJldHVybiBoYXlzdGFjay5zdWJzdHIoMCwgbmVlZGxlLmxl
bmd0aCkgPT09IG5lZWRsZTsKK307CisKKy8qKgorICogQSB2ZXJ0ZXggc2hhZGVyIGZvciBhIHNp
bmdsZSB0ZXh0dXJlLgorICogQHR5cGUge3N0cmluZ30KKyAqLwordmFyIHNpbXBsZVRleHR1cmVW
ZXJ0ZXhTaGFkZXIgPSBbCisgICdhdHRyaWJ1dGUgdmVjNCB2UG9zaXRpb247JywKKyAgJ2F0dHJp
YnV0ZSB2ZWMyIHRleENvb3JkMDsnLAorICAndmFyeWluZyB2ZWMyIHRleENvb3JkOycsCisgICd2
b2lkIG1haW4oKSB7JywKKyAgJyAgICBnbF9Qb3NpdGlvbiA9IHZQb3NpdGlvbjsnLAorICAnICAg
IHRleENvb3JkID0gdGV4Q29vcmQwOycsCisgICd9J10uam9pbignXG4nKTsKKworLyoqCisgKiBB
IHZlcnRleCBzaGFkZXIgZm9yIGEgc2luZ2xlIHRleHR1cmUuCisgKiBAdHlwZSB7c3RyaW5nfQor
ICovCit2YXIgc2ltcGxlVGV4dHVyZVZlcnRleFNoYWRlckVTU0wzMDAgPSBbCisgICcjdmVyc2lv
biAzMDAgZXMnLAorICAnbGF5b3V0KGxvY2F0aW9uPTApIGluIHZlYzQgdlBvc2l0aW9uOycsCisg
ICdsYXlvdXQobG9jYXRpb249MSkgaW4gdmVjMiB0ZXhDb29yZDA7JywKKyAgJ291dCB2ZWMyIHRl
eENvb3JkOycsCisgICd2b2lkIG1haW4oKSB7JywKKyAgJyAgICBnbF9Qb3NpdGlvbiA9IHZQb3Np
dGlvbjsnLAorICAnICAgIHRleENvb3JkID0gdGV4Q29vcmQwOycsCisgICd9J10uam9pbignXG4n
KTsKKworLyoqCisgKiBBIGZyYWdtZW50IHNoYWRlciBmb3IgYSBzaW5nbGUgdGV4dHVyZS4KKyAq
IEB0eXBlIHtzdHJpbmd9CisgKi8KK3ZhciBzaW1wbGVUZXh0dXJlRnJhZ21lbnRTaGFkZXIgPSBb
CisgICdwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsnLAorICAndW5pZm9ybSBzYW1wbGVyMkQgdGV4
OycsCisgICd2YXJ5aW5nIHZlYzIgdGV4Q29vcmQ7JywKKyAgJ3ZvaWQgbWFpbigpIHsnLAorICAn
ICAgIGdsX0ZyYWdEYXRhWzBdID0gdGV4dHVyZTJEKHRleCwgdGV4Q29vcmQpOycsCisgICd9J10u
am9pbignXG4nKTsKKworLyoqCisgKiBBIGZyYWdtZW50IHNoYWRlciBmb3IgYSBzaW5nbGUgdGV4
dHVyZS4KKyAqIEB0eXBlIHtzdHJpbmd9CisgKi8KK3ZhciBzaW1wbGVUZXh0dXJlRnJhZ21lbnRT
aGFkZXJFU1NMMzAwID0gWworICAnI3ZlcnNpb24gMzAwIGVzJywKKyAgJ3ByZWNpc2lvbiBoaWdo
cCBmbG9hdDsnLAorICAndW5pZm9ybSBoaWdocCBzYW1wbGVyMkQgdGV4OycsCisgICdpbiB2ZWMy
IHRleENvb3JkOycsCisgICdvdXQgdmVjNCBvdXRfY29sb3I7JywKKyAgJ3ZvaWQgbWFpbigpIHsn
LAorICAnICAgIG91dF9jb2xvciA9IHRleHR1cmUodGV4LCB0ZXhDb29yZCk7JywKKyAgJ30nXS5q
b2luKCdcbicpOworCisvKioKKyAqIEEgZnJhZ21lbnQgc2hhZGVyIGZvciBhIHNpbmdsZSB0ZXh0
dXJlIHdpdGggaGlnaCBwcmVjaXNpb24uCisgKiBAdHlwZSB7c3RyaW5nfQorICovCit2YXIgc2lt
cGxlSGlnaFByZWNpc2lvblRleHR1cmVGcmFnbWVudFNoYWRlciA9IFsKKyAgJ3ByZWNpc2lvbiBo
aWdocCBmbG9hdDsnLAorICAndW5pZm9ybSBoaWdocCBzYW1wbGVyMkQgdGV4OycsCisgICd2YXJ5
aW5nIHZlYzIgdGV4Q29vcmQ7JywKKyAgJ3ZvaWQgbWFpbigpIHsnLAorICAnICAgIGdsX0ZyYWdE
YXRhWzBdID0gdGV4dHVyZTJEKHRleCwgdGV4Q29vcmQpOycsCisgICd9J10uam9pbignXG4nKTsK
KworLyoqCisgKiBBIGZyYWdtZW50IHNoYWRlciBmb3IgYSBzaW5nbGUgY3ViZSBtYXAgdGV4dHVy
ZS4KKyAqIEB0eXBlIHtzdHJpbmd9CisgKi8KK3ZhciBzaW1wbGVDdWJlTWFwVGV4dHVyZUZyYWdt
ZW50U2hhZGVyID0gWworICAncHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7JywKKyAgJ3VuaWZvcm0g
c2FtcGxlckN1YmUgdGV4OycsCisgICd1bmlmb3JtIGhpZ2hwIGludCBmYWNlOycsCisgICd2YXJ5
aW5nIHZlYzIgdGV4Q29vcmQ7JywKKyAgJ3ZvaWQgbWFpbigpIHsnLAorICAvLyBUcmFuc2Zvcm0g
WzAsIDFdIC0+IFstMSwgMV0KKyAgJyAgICB2ZWMyIHRleEMyID0gKHRleENvb3JkICogMi4pIC0g
MS47JywKKyAgLy8gVHJhbnNmb3JtIDJkIHRleCBjb29yZC4gdG8gZWFjaCBmYWNlIG9mIFRFWFRV
UkVfQ1VCRV9NQVAgY29vcmQuCisgICcgICAgdmVjMyB0ZXhDdWJlID0gdmVjMygwLiwgMC4sIDAu
KTsnLAorICAnICAgIGlmIChmYWNlID09IDM0MDY5KSB7JywgICAgICAgICAvLyBURVhUVVJFX0NV
QkVfTUFQX1BPU0lUSVZFX1gKKyAgJyAgICAgICAgdGV4Q3ViZSA9IHZlYzMoMS4sIC10ZXhDMi55
LCAtdGV4QzIueCk7JywKKyAgJyAgICB9IGVsc2UgaWYgKGZhY2UgPT0gMzQwNzApIHsnLCAgLy8g
VEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9YCisgICcgICAgICAgIHRleEN1YmUgPSB2ZWMzKC0x
LiwgLXRleEMyLnksIHRleEMyLngpOycsCisgICcgICAgfSBlbHNlIGlmIChmYWNlID09IDM0MDcx
KSB7JywgIC8vIFRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWQorICAnICAgICAgICB0ZXhDdWJl
ID0gdmVjMyh0ZXhDMi54LCAxLiwgdGV4QzIueSk7JywKKyAgJyAgICB9IGVsc2UgaWYgKGZhY2Ug
PT0gMzQwNzIpIHsnLCAgLy8gVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9ZCisgICcgICAgICAg
IHRleEN1YmUgPSB2ZWMzKHRleEMyLngsIC0xLiwgLXRleEMyLnkpOycsCisgICcgICAgfSBlbHNl
IGlmIChmYWNlID09IDM0MDczKSB7JywgIC8vIFRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWgor
ICAnICAgICAgICB0ZXhDdWJlID0gdmVjMyh0ZXhDMi54LCAtdGV4QzIueSwgMS4pOycsCisgICcg
ICAgfSBlbHNlIGlmIChmYWNlID09IDM0MDc0KSB7JywgIC8vIFRFWFRVUkVfQ1VCRV9NQVBfTkVH
QVRJVkVfWgorICAnICAgICAgICB0ZXhDdWJlID0gdmVjMygtdGV4QzIueCwgLXRleEMyLnksIC0x
Lik7JywKKyAgJyAgICB9JywKKyAgJyAgICBnbF9GcmFnRGF0YVswXSA9IHRleHR1cmVDdWJlKHRl
eCwgdGV4Q3ViZSk7JywKKyAgJ30nXS5qb2luKCdcbicpOworCisvKioKKyAqIEEgdmVydGV4IHNo
YWRlciBmb3IgYSBzaW5nbGUgdGV4dHVyZS4KKyAqIEB0eXBlIHtzdHJpbmd9CisgKi8KK3ZhciBu
b1RleENvb3JkVGV4dHVyZVZlcnRleFNoYWRlciA9IFsKKyAgJ2F0dHJpYnV0ZSB2ZWM0IHZQb3Np
dGlvbjsnLAorICAndmFyeWluZyB2ZWMyIHRleENvb3JkOycsCisgICd2b2lkIG1haW4oKSB7JywK
KyAgJyAgICBnbF9Qb3NpdGlvbiA9IHZQb3NpdGlvbjsnLAorICAnICAgIHRleENvb3JkID0gdlBv
c2l0aW9uLnh5ICogMC41ICsgMC41OycsCisgICd9J10uam9pbignXG4nKTsKKworLyoqCisgKiBB
IHZlcnRleCBzaGFkZXIgZm9yIGEgdW5pZm9ybSBjb2xvci4KKyAqIEB0eXBlIHtzdHJpbmd9Cisg
Ki8KK3ZhciBzaW1wbGVWZXJ0ZXhTaGFkZXIgPSBbCisgICdhdHRyaWJ1dGUgdmVjNCB2UG9zaXRp
b247JywKKyAgJ3ZvaWQgbWFpbigpIHsnLAorICAnICAgIGdsX1Bvc2l0aW9uID0gdlBvc2l0aW9u
OycsCisgICd9J10uam9pbignXG4nKTsKKworLyoqCisgKiBBIHZlcnRleCBzaGFkZXIgZm9yIGEg
dW5pZm9ybSBjb2xvci4KKyAqIEB0eXBlIHtzdHJpbmd9CisgKi8KK3ZhciBzaW1wbGVWZXJ0ZXhT
aGFkZXJFU1NMMzAwID0gWworICAnI3ZlcnNpb24gMzAwIGVzJywKKyAgJ2luIHZlYzQgdlBvc2l0
aW9uOycsCisgICd2b2lkIG1haW4oKSB7JywKKyAgJyAgICBnbF9Qb3NpdGlvbiA9IHZQb3NpdGlv
bjsnLAorICAnfSddLmpvaW4oJ1xuJyk7CisKKy8qKgorICogQSBmcmFnbWVudCBzaGFkZXIgZm9y
IGEgdW5pZm9ybSBjb2xvci4KKyAqIEB0eXBlIHtzdHJpbmd9CisgKi8KK3ZhciBzaW1wbGVDb2xv
ckZyYWdtZW50U2hhZGVyID0gWworICAncHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7JywKKyAgJ3Vu
aWZvcm0gdmVjNCB1X2NvbG9yOycsCisgICd2b2lkIG1haW4oKSB7JywKKyAgJyAgICBnbF9GcmFn
RGF0YVswXSA9IHVfY29sb3I7JywKKyAgJ30nXS5qb2luKCdcbicpOworCisvKioKKyAqIEEgZnJh
Z21lbnQgc2hhZGVyIGZvciBhIHVuaWZvcm0gY29sb3IuCisgKiBAdHlwZSB7c3RyaW5nfQorICov
Cit2YXIgc2ltcGxlQ29sb3JGcmFnbWVudFNoYWRlckVTU0wzMDAgPSBbCisgICcjdmVyc2lvbiAz
MDAgZXMnLAorICAncHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7JywKKyAgJ291dCB2ZWM0IG91dF9j
b2xvcjsnLAorICAndW5pZm9ybSB2ZWM0IHVfY29sb3I7JywKKyAgJ3ZvaWQgbWFpbigpIHsnLAor
ICAnICAgIG91dF9jb2xvciA9IHVfY29sb3I7JywKKyAgJ30nXS5qb2luKCdcbicpOworCisvKioK
KyAqIEEgdmVydGV4IHNoYWRlciBmb3IgdmVydGV4IGNvbG9ycy4KKyAqIEB0eXBlIHtzdHJpbmd9
CisgKi8KK3ZhciBzaW1wbGVWZXJ0ZXhDb2xvclZlcnRleFNoYWRlciA9IFsKKyAgJ2F0dHJpYnV0
ZSB2ZWM0IHZQb3NpdGlvbjsnLAorICAnYXR0cmlidXRlIHZlYzQgYV9jb2xvcjsnLAorICAndmFy
eWluZyB2ZWM0IHZfY29sb3I7JywKKyAgJ3ZvaWQgbWFpbigpIHsnLAorICAnICAgIGdsX1Bvc2l0
aW9uID0gdlBvc2l0aW9uOycsCisgICcgICAgdl9jb2xvciA9IGFfY29sb3I7JywKKyAgJ30nXS5q
b2luKCdcbicpOworCisvKioKKyAqIEEgZnJhZ21lbnQgc2hhZGVyIGZvciB2ZXJ0ZXggY29sb3Jz
LgorICogQHR5cGUge3N0cmluZ30KKyAqLwordmFyIHNpbXBsZVZlcnRleENvbG9yRnJhZ21lbnRT
aGFkZXIgPSBbCisgICdwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsnLAorICAndmFyeWluZyB2ZWM0
IHZfY29sb3I7JywKKyAgJ3ZvaWQgbWFpbigpIHsnLAorICAnICAgIGdsX0ZyYWdEYXRhWzBdID0g
dl9jb2xvcjsnLAorICAnfSddLmpvaW4oJ1xuJyk7CisKKy8qKgorICogQ3JlYXRlcyBhIHByb2dy
YW0sIGF0dGFjaGVzIHNoYWRlcnMsIGJpbmRzIGF0dHJpYiBsb2NhdGlvbnMsIGxpbmtzIHRoZQor
ICogcHJvZ3JhbSBhbmQgY2FsbHMgdXNlUHJvZ3JhbS4KKyAqIEBwYXJhbSB7IVdlYkdMUmVuZGVy
aW5nQ29udGV4dH0gZ2wgVGhlIFdlYkdMUmVuZGVyaW5nQ29udGV4dCB0byB1c2UuCisgKiBAcGFy
YW0geyFBcnJheS48IVdlYkdMU2hhZGVyfHN0cmluZz59IHNoYWRlcnMgVGhlIHNoYWRlcnMgdG8K
KyAqICAgICAgICBhdHRhY2gsIG9yIHRoZSBzb3VyY2UsIG9yIHRoZSBpZCBvZiBhIHNjcmlwdCB0
byBnZXQKKyAqICAgICAgICB0aGUgc291cmNlIGZyb20uCisgKiBAcGFyYW0geyFBcnJheS48c3Ry
aW5nPn0gb3B0X2F0dHJpYnMgVGhlIGF0dHJpYnMgbmFtZXMuCisgKiBAcGFyYW0geyFBcnJheS48
bnVtYmVyPn0gb3B0X2xvY2F0aW9ucyBUaGUgbG9jYXRpb25zIGZvciB0aGUgYXR0cmlicy4KKyAq
IEBwYXJhbSB7Ym9vbGVhbn0gb3B0X2xvZ1NoYWRlcnMgV2hldGhlciB0byBsb2cgc2hhZGVyIHNv
dXJjZS4KKyAqLwordmFyIHNldHVwUHJvZ3JhbSA9IGZ1bmN0aW9uKAorICAgIGdsLCBzaGFkZXJz
LCBvcHRfYXR0cmlicywgb3B0X2xvY2F0aW9ucywgb3B0X2xvZ1NoYWRlcnMpIHsKKyAgdmFyIHJl
YWxTaGFkZXJzID0gW107CisgIHZhciBwcm9ncmFtID0gZ2wuY3JlYXRlUHJvZ3JhbSgpOworICB2
YXIgc2hhZGVyQ291bnQgPSAwOworICBmb3IgKHZhciBpaSA9IDA7IGlpIDwgc2hhZGVycy5sZW5n
dGg7ICsraWkpIHsKKyAgICB2YXIgc2hhZGVyID0gc2hhZGVyc1tpaV07CisgICAgdmFyIHNoYWRl
clR5cGUgPSB1bmRlZmluZWQ7CisgICAgaWYgKHR5cGVvZiBzaGFkZXIgPT0gJ3N0cmluZycpIHsK
KyAgICAgIHZhciBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoc2hhZGVyKTsKKyAg
ICAgIGlmIChlbGVtZW50KSB7CisgICAgICAgIGlmIChlbGVtZW50LnR5cGUgIT0gIngtc2hhZGVy
L3gtdmVydGV4IiAmJiBlbGVtZW50LnR5cGUgIT0gIngtc2hhZGVyL3gtZnJhZ21lbnQiKQorICAg
ICAgICAgIHNoYWRlclR5cGUgPSBpaSA/IGdsLkZSQUdNRU5UX1NIQURFUiA6IGdsLlZFUlRFWF9T
SEFERVI7CisgICAgICAgIHNoYWRlciA9IGxvYWRTaGFkZXJGcm9tU2NyaXB0KGdsLCBzaGFkZXIs
IHNoYWRlclR5cGUsIHVuZGVmaW5lZCwgb3B0X2xvZ1NoYWRlcnMpOworICAgICAgfSBlbHNlIGlm
IChlbmRzV2l0aChzaGFkZXIsICIudmVydCIpKSB7CisgICAgICAgIHNoYWRlciA9IGxvYWRTaGFk
ZXJGcm9tRmlsZShnbCwgc2hhZGVyLCBnbC5WRVJURVhfU0hBREVSLCB1bmRlZmluZWQsIG9wdF9s
b2dTaGFkZXJzKTsKKyAgICAgIH0gZWxzZSBpZiAoZW5kc1dpdGgoc2hhZGVyLCAiLmZyYWciKSkg
eworICAgICAgICBzaGFkZXIgPSBsb2FkU2hhZGVyRnJvbUZpbGUoZ2wsIHNoYWRlciwgZ2wuRlJB
R01FTlRfU0hBREVSLCB1bmRlZmluZWQsIG9wdF9sb2dTaGFkZXJzKTsKKyAgICAgIH0gZWxzZSB7
CisgICAgICAgIHNoYWRlciA9IGxvYWRTaGFkZXIoZ2wsIHNoYWRlciwgaWkgPyBnbC5GUkFHTUVO
VF9TSEFERVIgOiBnbC5WRVJURVhfU0hBREVSLCB1bmRlZmluZWQsIG9wdF9sb2dTaGFkZXJzKTsK
KyAgICAgIH0KKyAgICB9IGVsc2UgaWYgKG9wdF9sb2dTaGFkZXJzKSB7CisgICAgICB0aHJvdyAn
U2hhZGVyIHNvdXJjZSBsb2dnaW5nIHJlcXVlc3RlZCBidXQgbm8gc2hhZGVyIHNvdXJjZSBwcm92
aWRlZCc7CisgICAgfQorICAgIGlmIChzaGFkZXIpIHsKKyAgICAgICsrc2hhZGVyQ291bnQ7Cisg
ICAgICBnbC5hdHRhY2hTaGFkZXIocHJvZ3JhbSwgc2hhZGVyKTsKKyAgICB9CisgIH0KKyAgaWYg
KHNoYWRlckNvdW50ICE9IDIpIHsKKyAgICBlcnJvcigiRXJyb3IgaW4gY29tcGlsaW5nIHNoYWRl
ciIpOworICAgIHJldHVybiBudWxsOworICB9CisgIGlmIChvcHRfYXR0cmlicykgeworICAgIGZv
ciAodmFyIGlpID0gMDsgaWkgPCBvcHRfYXR0cmlicy5sZW5ndGg7ICsraWkpIHsKKyAgICAgIGds
LmJpbmRBdHRyaWJMb2NhdGlvbigKKyAgICAgICAgICBwcm9ncmFtLAorICAgICAgICAgIG9wdF9s
b2NhdGlvbnMgPyBvcHRfbG9jYXRpb25zW2lpXSA6IGlpLAorICAgICAgICAgIG9wdF9hdHRyaWJz
W2lpXSk7CisgICAgfQorICB9CisgIGdsLmxpbmtQcm9ncmFtKHByb2dyYW0pOworCisgIC8vIENo
ZWNrIHRoZSBsaW5rIHN0YXR1cworICB2YXIgbGlua2VkID0gZ2wuZ2V0UHJvZ3JhbVBhcmFtZXRl
cihwcm9ncmFtLCBnbC5MSU5LX1NUQVRVUyk7CisgIGlmICghbGlua2VkKSB7CisgICAgICAvLyBz
b21ldGhpbmcgd2VudCB3cm9uZyB3aXRoIHRoZSBsaW5rCisgICAgICBsYXN0RXJyb3IgPSBnbC5n
ZXRQcm9ncmFtSW5mb0xvZyAocHJvZ3JhbSk7CisgICAgICBlcnJvcigiRXJyb3IgaW4gcHJvZ3Jh
bSBsaW5raW5nOiIgKyBsYXN0RXJyb3IpOworCisgICAgICBnbC5kZWxldGVQcm9ncmFtKHByb2dy
YW0pOworICAgICAgcmV0dXJuIG51bGw7CisgIH0KKworICBnbC51c2VQcm9ncmFtKHByb2dyYW0p
OworICByZXR1cm4gcHJvZ3JhbTsKK307CisKKy8qKgorICogQ3JlYXRlcyBhIHByb2dyYW0sIGF0
dGFjaGVzIHNoYWRlciwgc2V0cyB1cCB0cmFzbmZvcm0gZmVlZGJhY2sgdmFyeWluZ3MsCisgKiBi
aW5kcyBhdHRyaWIgbG9jYXRpb25zLCBsaW5rcyB0aGUgcHJvZ3JhbSBhbmQgY2FsbHMgdXNlUHJv
Z3JhbS4KKyAqIEBwYXJhbSB7IVdlYkdMUmVuZGVyaW5nQ29udGV4dH0gZ2wgVGhlIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dCB0byB1c2UuCisgKiBAcGFyYW0geyFBcnJheS48IVdlYkdMU2hhZGVyfHN0
cmluZz59IHNoYWRlcnMgVGhlIHNoYWRlcnMgdG8KKyAqICAgICAgICBhdHRhY2gsIG9yIHRoZSBz
b3VyY2UsIG9yIHRoZSBpZCBvZiBhIHNjcmlwdCB0byBnZXQKKyAqICAgICAgICB0aGUgc291cmNl
IGZyb20uCisgKiBAcGFyYW0geyFBcnJheS48c3RyaW5nPn0gdmFyeWluZ3MgVGhlIHRyYW5zZm9y
bSBmZWVkYmFjayB2YXJ5aW5nIG5hbWVzLgorICogQHBhcmFtIHtudW1iZXJ9IGJ1ZmZlck1vZGUg
VGhlIG1vZGUgdXNlZCB0byBjYXB0dXJlIHRoZSB2YXJ5aW5nIHZhcmlhYmxlcy4KKyAqIEBwYXJh
bSB7IUFycmF5LjxzdHJpbmc+fSBvcHRfYXR0cmlicyBUaGUgYXR0cmlicyBuYW1lcy4KKyAqIEBw
YXJhbSB7IUFycmF5LjxudW1iZXI+fSBvcHRfbG9jYXRpb25zIFRoZSBsb2NhdGlvbnMgZm9yIHRo
ZSBhdHRyaWJzLgorICogQHBhcmFtIHtib29sZWFufSBvcHRfbG9nU2hhZGVycyBXaGV0aGVyIHRv
IGxvZyBzaGFkZXIgc291cmNlLgorICovCit2YXIgc2V0dXBUcmFuc2Zvcm1GZWVkYmFja1Byb2dy
YW0gPSBmdW5jdGlvbigKKyAgICBnbCwgc2hhZGVycywgdmFyeWluZ3MsIGJ1ZmZlck1vZGUsIG9w
dF9hdHRyaWJzLCBvcHRfbG9jYXRpb25zLCBvcHRfbG9nU2hhZGVycywgb3B0X3NraXBDb21waWxl
U3RhdHVzKSB7CisgIHZhciByZWFsU2hhZGVycyA9IFtdOworICB2YXIgcHJvZ3JhbSA9IGdsLmNy
ZWF0ZVByb2dyYW0oKTsKKyAgdmFyIHNoYWRlckNvdW50ID0gMDsKKyAgZm9yICh2YXIgaWkgPSAw
OyBpaSA8IHNoYWRlcnMubGVuZ3RoOyArK2lpKSB7CisgICAgdmFyIHNoYWRlciA9IHNoYWRlcnNb
aWldOworICAgIHZhciBzaGFkZXJUeXBlID0gdW5kZWZpbmVkOworICAgIGlmICh0eXBlb2Ygc2hh
ZGVyID09ICdzdHJpbmcnKSB7CisgICAgICB2YXIgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKHNoYWRlcik7CisgICAgICBpZiAoZWxlbWVudCkgeworICAgICAgICBpZiAoZWxlbWVu
dC50eXBlICE9ICJ4LXNoYWRlci94LXZlcnRleCIgJiYgZWxlbWVudC50eXBlICE9ICJ4LXNoYWRl
ci94LWZyYWdtZW50IikKKyAgICAgICAgICBzaGFkZXJUeXBlID0gaWkgPyBnbC5GUkFHTUVOVF9T
SEFERVIgOiBnbC5WRVJURVhfU0hBREVSOworICAgICAgICBzaGFkZXIgPSBsb2FkU2hhZGVyRnJv
bVNjcmlwdChnbCwgc2hhZGVyLCBzaGFkZXJUeXBlLCB1bmRlZmluZWQsIG9wdF9sb2dTaGFkZXJz
LCBvcHRfc2tpcENvbXBpbGVTdGF0dXMpOworICAgICAgfSBlbHNlIGlmIChlbmRzV2l0aChzaGFk
ZXIsICIudmVydCIpKSB7CisgICAgICAgIHNoYWRlciA9IGxvYWRTaGFkZXJGcm9tRmlsZShnbCwg
c2hhZGVyLCBnbC5WRVJURVhfU0hBREVSLCB1bmRlZmluZWQsIG9wdF9sb2dTaGFkZXJzLCBvcHRf
c2tpcENvbXBpbGVTdGF0dXMpOworICAgICAgfSBlbHNlIGlmIChlbmRzV2l0aChzaGFkZXIsICIu
ZnJhZyIpKSB7CisgICAgICAgIHNoYWRlciA9IGxvYWRTaGFkZXJGcm9tRmlsZShnbCwgc2hhZGVy
LCBnbC5GUkFHTUVOVF9TSEFERVIsIHVuZGVmaW5lZCwgb3B0X2xvZ1NoYWRlcnMsIG9wdF9za2lw
Q29tcGlsZVN0YXR1cyk7CisgICAgICB9IGVsc2UgeworICAgICAgICBzaGFkZXIgPSBsb2FkU2hh
ZGVyKGdsLCBzaGFkZXIsIGlpID8gZ2wuRlJBR01FTlRfU0hBREVSIDogZ2wuVkVSVEVYX1NIQURF
UiwgdW5kZWZpbmVkLCBvcHRfbG9nU2hhZGVycywgdW5kZWZpbmVkLCB1bmRlZmluZWQsIG9wdF9z
a2lwQ29tcGlsZVN0YXR1cyk7CisgICAgICB9CisgICAgfSBlbHNlIGlmIChvcHRfbG9nU2hhZGVy
cykgeworICAgICAgdGhyb3cgJ1NoYWRlciBzb3VyY2UgbG9nZ2luZyByZXF1ZXN0ZWQgYnV0IG5v
IHNoYWRlciBzb3VyY2UgcHJvdmlkZWQnOworICAgIH0KKyAgICBpZiAoc2hhZGVyKSB7CisgICAg
ICArK3NoYWRlckNvdW50OworICAgICAgZ2wuYXR0YWNoU2hhZGVyKHByb2dyYW0sIHNoYWRlcik7
CisgICAgfQorICB9CisgIGlmIChzaGFkZXJDb3VudCAhPSAyKSB7CisgICAgZXJyb3IoIkVycm9y
IGluIGNvbXBpbGluZyBzaGFkZXIiKTsKKyAgICByZXR1cm4gbnVsbDsKKyAgfQorCisgIGlmIChv
cHRfYXR0cmlicykgeworICAgIGZvciAodmFyIGlpID0gMDsgaWkgPCBvcHRfYXR0cmlicy5sZW5n
dGg7ICsraWkpIHsKKyAgICAgIGdsLmJpbmRBdHRyaWJMb2NhdGlvbigKKyAgICAgICAgICBwcm9n
cmFtLAorICAgICAgICAgIG9wdF9sb2NhdGlvbnMgPyBvcHRfbG9jYXRpb25zW2lpXSA6IGlpLAor
ICAgICAgICAgIG9wdF9hdHRyaWJzW2lpXSk7CisgICAgfQorICB9CisKKyAgZ2wudHJhbnNmb3Jt
RmVlZGJhY2tWYXJ5aW5ncyhwcm9ncmFtLCB2YXJ5aW5ncywgYnVmZmVyTW9kZSk7CisKKyAgZ2wu
bGlua1Byb2dyYW0ocHJvZ3JhbSk7CisKKyAgLy8gQ2hlY2sgdGhlIGxpbmsgc3RhdHVzCisgIHZh
ciBsaW5rZWQgPSBnbC5nZXRQcm9ncmFtUGFyYW1ldGVyKHByb2dyYW0sIGdsLkxJTktfU1RBVFVT
KTsKKyAgaWYgKCFsaW5rZWQpIHsKKyAgICAgIC8vIHNvbWV0aGluZyB3ZW50IHdyb25nIHdpdGgg
dGhlIGxpbmsKKyAgICAgIGxhc3RFcnJvciA9IGdsLmdldFByb2dyYW1JbmZvTG9nIChwcm9ncmFt
KTsKKyAgICAgIGVycm9yKCJFcnJvciBpbiBwcm9ncmFtIGxpbmtpbmc6IiArIGxhc3RFcnJvcik7
CisKKyAgICAgIGdsLmRlbGV0ZVByb2dyYW0ocHJvZ3JhbSk7CisgICAgICByZXR1cm4gbnVsbDsK
KyAgfQorCisgIGdsLnVzZVByb2dyYW0ocHJvZ3JhbSk7CisgIHJldHVybiBwcm9ncmFtOworfTsK
KworLyoqCisgKiBDcmVhdGVzIGEgc2ltcGxlIHRleHR1cmUgcHJvZ3JhbS4KKyAqIEBwYXJhbSB7
IVdlYkdMUmVuZGVyaW5nQ29udGV4dH0gZ2wgVGhlIFdlYkdMUmVuZGVyaW5nQ29udGV4dCB0byB1
c2UuCisgKiBAcmV0dXJuIHtXZWJHTFByb2dyYW19CisgKi8KK3ZhciBzZXR1cE5vVGV4Q29vcmRU
ZXh0dXJlUHJvZ3JhbSA9IGZ1bmN0aW9uKGdsKSB7CisgIHJldHVybiBzZXR1cFByb2dyYW0oZ2ws
CisgICAgICAgICAgICAgICAgICAgICAgW25vVGV4Q29vcmRUZXh0dXJlVmVydGV4U2hhZGVyLCBz
aW1wbGVUZXh0dXJlRnJhZ21lbnRTaGFkZXJdLAorICAgICAgICAgICAgICAgICAgICAgIFsndlBv
c2l0aW9uJ10sCisgICAgICAgICAgICAgICAgICAgICAgWzBdKTsKK307CisKKy8qKgorICogQ3Jl
YXRlcyBhIHNpbXBsZSB0ZXh0dXJlIHByb2dyYW0uCisgKiBAcGFyYW0geyFXZWJHTFJlbmRlcmlu
Z0NvbnRleHR9IGdsIFRoZSBXZWJHTFJlbmRlcmluZ0NvbnRleHQgdG8gdXNlLgorICogQHBhcmFt
IHtudW1iZXJ9IG9wdF9wb3NpdGlvbkxvY2F0aW9uIFRoZSBhdHRyaWIgbG9jYXRpb24gZm9yIHBv
c2l0aW9uLgorICogQHBhcmFtIHtudW1iZXJ9IG9wdF90ZXhjb29yZExvY2F0aW9uIFRoZSBhdHRy
aWIgbG9jYXRpb24gZm9yIHRleHR1cmUgY29vcmRzLgorICogQHBhcmFtIHtzdHJpbmd9IG9wdF9m
cmFnbWVudFNoYWRlck92ZXJyaWRlIFRoZSBhbHRlcm5hdGl2ZSBmcmFnbWVudCBzaGFkZXIgdG8g
dXNlLgorICogQHJldHVybiB7V2ViR0xQcm9ncmFtfQorICovCit2YXIgc2V0dXBTaW1wbGVUZXh0
dXJlUHJvZ3JhbSA9IGZ1bmN0aW9uKAorICAgIGdsLCBvcHRfcG9zaXRpb25Mb2NhdGlvbiwgb3B0
X3RleGNvb3JkTG9jYXRpb24sIG9wdF9mcmFnbWVudFNoYWRlck92ZXJyaWRlKSB7CisgIG9wdF9w
b3NpdGlvbkxvY2F0aW9uID0gb3B0X3Bvc2l0aW9uTG9jYXRpb24gfHwgMDsKKyAgb3B0X3RleGNv
b3JkTG9jYXRpb24gPSBvcHRfdGV4Y29vcmRMb2NhdGlvbiB8fCAxOworICBvcHRfZnJhZ21lbnRT
aGFkZXJPdmVycmlkZSA9IG9wdF9mcmFnbWVudFNoYWRlck92ZXJyaWRlIHx8IHNpbXBsZVRleHR1
cmVGcmFnbWVudFNoYWRlcjsKKyAgcmV0dXJuIHNldHVwUHJvZ3JhbShnbCwKKyAgICAgICAgICAg
ICAgICAgICAgICBbc2ltcGxlVGV4dHVyZVZlcnRleFNoYWRlciwgb3B0X2ZyYWdtZW50U2hhZGVy
T3ZlcnJpZGVdLAorICAgICAgICAgICAgICAgICAgICAgIFsndlBvc2l0aW9uJywgJ3RleENvb3Jk
MCddLAorICAgICAgICAgICAgICAgICAgICAgIFtvcHRfcG9zaXRpb25Mb2NhdGlvbiwgb3B0X3Rl
eGNvb3JkTG9jYXRpb25dKTsKK307CisKKy8qKgorICogQ3JlYXRlcyBhIHNpbXBsZSB0ZXh0dXJl
IHByb2dyYW0gdXNpbmcgZ2xzbCB2ZXJzaW9uIDMwMC4KKyAqIEBwYXJhbSB7IVdlYkdMUmVuZGVy
aW5nQ29udGV4dH0gZ2wgVGhlIFdlYkdMUmVuZGVyaW5nQ29udGV4dCB0byB1c2UuCisgKiBAcGFy
YW0ge251bWJlcn0gb3B0X3Bvc2l0aW9uTG9jYXRpb24gVGhlIGF0dHJpYiBsb2NhdGlvbiBmb3Ig
cG9zaXRpb24uCisgKiBAcGFyYW0ge251bWJlcn0gb3B0X3RleGNvb3JkTG9jYXRpb24gVGhlIGF0
dHJpYiBsb2NhdGlvbiBmb3IgdGV4dHVyZSBjb29yZHMuCisgKiBAcGFyYW0ge3N0cmluZ30gb3B0
X2ZyYWdtZW50U2hhZGVyT3ZlcnJpZGUgVGhlIGFsdGVybmF0aXZlIGZyYWdtZW50IHNoYWRlciB0
byB1c2UuCisgKiBAcmV0dXJuIHtXZWJHTFByb2dyYW19CisgKi8KK3ZhciBzZXR1cFNpbXBsZVRl
eHR1cmVQcm9ncmFtRVNTTDMwMCA9IGZ1bmN0aW9uKAorICAgIGdsLCBvcHRfcG9zaXRpb25Mb2Nh
dGlvbiwgb3B0X3RleGNvb3JkTG9jYXRpb24sIG9wdF9mcmFnbWVudFNoYWRlck92ZXJyaWRlKSB7
CisgIG9wdF9wb3NpdGlvbkxvY2F0aW9uID0gb3B0X3Bvc2l0aW9uTG9jYXRpb24gfHwgMDsKKyAg
b3B0X3RleGNvb3JkTG9jYXRpb24gPSBvcHRfdGV4Y29vcmRMb2NhdGlvbiB8fCAxOworICBvcHRf
ZnJhZ21lbnRTaGFkZXJPdmVycmlkZSA9IG9wdF9mcmFnbWVudFNoYWRlck92ZXJyaWRlIHx8IHNp
bXBsZVRleHR1cmVGcmFnbWVudFNoYWRlckVTU0wzMDA7CisgIHJldHVybiBzZXR1cFByb2dyYW0o
Z2wsCisgICAgICAgICAgICAgICAgICAgICAgW3NpbXBsZVRleHR1cmVWZXJ0ZXhTaGFkZXJFU1NM
MzAwLCBvcHRfZnJhZ21lbnRTaGFkZXJPdmVycmlkZV0sCisgICAgICAgICAgICAgICAgICAgICAg
Wyd2UG9zaXRpb24nLCAndGV4Q29vcmQwJ10sCisgICAgICAgICAgICAgICAgICAgICAgW29wdF9w
b3NpdGlvbkxvY2F0aW9uLCBvcHRfdGV4Y29vcmRMb2NhdGlvbl0pOworfTsKKworLyoqCisgKiBD
cmVhdGVzIGEgc2ltcGxlIGN1YmUgbWFwIHRleHR1cmUgcHJvZ3JhbS4KKyAqIEBwYXJhbSB7IVdl
YkdMUmVuZGVyaW5nQ29udGV4dH0gZ2wgVGhlIFdlYkdMUmVuZGVyaW5nQ29udGV4dCB0byB1c2Uu
CisgKiBAcGFyYW0ge251bWJlcn0gb3B0X3Bvc2l0aW9uTG9jYXRpb24gVGhlIGF0dHJpYiBsb2Nh
dGlvbiBmb3IgcG9zaXRpb24uCisgKiBAcGFyYW0ge251bWJlcn0gb3B0X3RleGNvb3JkTG9jYXRp
b24gVGhlIGF0dHJpYiBsb2NhdGlvbiBmb3IgdGV4dHVyZSBjb29yZHMuCisgKiBAcmV0dXJuIHtX
ZWJHTFByb2dyYW19CisgKi8KK3ZhciBzZXR1cFNpbXBsZUN1YmVNYXBUZXh0dXJlUHJvZ3JhbSA9
IGZ1bmN0aW9uKAorICAgIGdsLCBvcHRfcG9zaXRpb25Mb2NhdGlvbiwgb3B0X3RleGNvb3JkTG9j
YXRpb24pIHsKKyAgb3B0X3Bvc2l0aW9uTG9jYXRpb24gPSBvcHRfcG9zaXRpb25Mb2NhdGlvbiB8
fCAwOworICBvcHRfdGV4Y29vcmRMb2NhdGlvbiA9IG9wdF90ZXhjb29yZExvY2F0aW9uIHx8IDE7
CisgIHJldHVybiBzZXR1cFByb2dyYW0oZ2wsCisgICAgICAgICAgICAgICAgICAgICAgW3NpbXBs
ZVRleHR1cmVWZXJ0ZXhTaGFkZXIsIHNpbXBsZUN1YmVNYXBUZXh0dXJlRnJhZ21lbnRTaGFkZXJd
LAorICAgICAgICAgICAgICAgICAgICAgIFsndlBvc2l0aW9uJywgJ3RleENvb3JkMCddLAorICAg
ICAgICAgICAgICAgICAgICAgIFtvcHRfcG9zaXRpb25Mb2NhdGlvbiwgb3B0X3RleGNvb3JkTG9j
YXRpb25dKTsKK307CisKKy8qKgorICogQ3JlYXRlcyBhIHNpbXBsZSB2ZXJ0ZXggY29sb3IgcHJv
Z3JhbS4KKyAqIEBwYXJhbSB7IVdlYkdMUmVuZGVyaW5nQ29udGV4dH0gZ2wgVGhlIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dCB0byB1c2UuCisgKiBAcGFyYW0ge251bWJlcn0gb3B0X3Bvc2l0aW9uTG9j
YXRpb24gVGhlIGF0dHJpYiBsb2NhdGlvbiBmb3IgcG9zaXRpb24uCisgKiBAcGFyYW0ge251bWJl
cn0gb3B0X3ZlcnRleENvbG9yTG9jYXRpb24gVGhlIGF0dHJpYiBsb2NhdGlvbgorICogICAgICAg
IGZvciB2ZXJ0ZXggY29sb3JzLgorICogQHJldHVybiB7V2ViR0xQcm9ncmFtfQorICovCit2YXIg
c2V0dXBTaW1wbGVWZXJ0ZXhDb2xvclByb2dyYW0gPSBmdW5jdGlvbigKKyAgICBnbCwgb3B0X3Bv
c2l0aW9uTG9jYXRpb24sIG9wdF92ZXJ0ZXhDb2xvckxvY2F0aW9uKSB7CisgIG9wdF9wb3NpdGlv
bkxvY2F0aW9uID0gb3B0X3Bvc2l0aW9uTG9jYXRpb24gfHwgMDsKKyAgb3B0X3ZlcnRleENvbG9y
TG9jYXRpb24gPSBvcHRfdmVydGV4Q29sb3JMb2NhdGlvbiB8fCAxOworICByZXR1cm4gc2V0dXBQ
cm9ncmFtKGdsLAorICAgICAgICAgICAgICAgICAgICAgIFtzaW1wbGVWZXJ0ZXhDb2xvclZlcnRl
eFNoYWRlciwgc2ltcGxlVmVydGV4Q29sb3JGcmFnbWVudFNoYWRlcl0sCisgICAgICAgICAgICAg
ICAgICAgICAgWyd2UG9zaXRpb24nLCAnYV9jb2xvciddLAorICAgICAgICAgICAgICAgICAgICAg
IFtvcHRfcG9zaXRpb25Mb2NhdGlvbiwgb3B0X3ZlcnRleENvbG9yTG9jYXRpb25dKTsKK307CisK
Ky8qKgorICogQ3JlYXRlcyBhIHNpbXBsZSBjb2xvciBwcm9ncmFtLgorICogQHBhcmFtIHshV2Vi
R0xSZW5kZXJpbmdDb250ZXh0fSBnbCBUaGUgV2ViR0xSZW5kZXJpbmdDb250ZXh0IHRvIHVzZS4K
KyAqIEBwYXJhbSB7bnVtYmVyfSBvcHRfcG9zaXRpb25Mb2NhdGlvbiBUaGUgYXR0cmliIGxvY2F0
aW9uIGZvciBwb3NpdGlvbi4KKyAqIEByZXR1cm4ge1dlYkdMUHJvZ3JhbX0KKyAqLwordmFyIHNl
dHVwU2ltcGxlQ29sb3JQcm9ncmFtID0gZnVuY3Rpb24oZ2wsIG9wdF9wb3NpdGlvbkxvY2F0aW9u
KSB7CisgIG9wdF9wb3NpdGlvbkxvY2F0aW9uID0gb3B0X3Bvc2l0aW9uTG9jYXRpb24gfHwgMDsK
KyAgcmV0dXJuIHNldHVwUHJvZ3JhbShnbCwKKyAgICAgICAgICAgICAgICAgICAgICBbc2ltcGxl
VmVydGV4U2hhZGVyLCBzaW1wbGVDb2xvckZyYWdtZW50U2hhZGVyXSwKKyAgICAgICAgICAgICAg
ICAgICAgICBbJ3ZQb3NpdGlvbiddLAorICAgICAgICAgICAgICAgICAgICAgIFtvcHRfcG9zaXRp
b25Mb2NhdGlvbl0pOworfTsKKworLyoqCisgKiBDcmVhdGVzIGJ1ZmZlcnMgZm9yIGEgdGV4dHVy
ZWQgdW5pdCBxdWFkIGFuZCBhdHRhY2hlcyB0aGVtIHRvIHZlcnRleCBhdHRyaWJzLgorICogQHBh
cmFtIHshV2ViR0xSZW5kZXJpbmdDb250ZXh0fSBnbCBUaGUgV2ViR0xSZW5kZXJpbmdDb250ZXh0
IHRvIHVzZS4KKyAqIEBwYXJhbSB7bnVtYmVyfSBvcHRfcG9zaXRpb25Mb2NhdGlvbiBUaGUgYXR0
cmliIGxvY2F0aW9uIGZvciBwb3NpdGlvbi4KKyAqIEBwYXJhbSB7bnVtYmVyfSBvcHRfdGV4Y29v
cmRMb2NhdGlvbiBUaGUgYXR0cmliIGxvY2F0aW9uIGZvciB0ZXh0dXJlIGNvb3Jkcy4KKyAqIEBw
YXJhbSB7IU9iamVjdH0gdmFyaW91cyBvcHRpb25zLiBTZWUgc2V0dXBRdWFkIGZvciBkZXRhaWxz
LgorICogQHJldHVybiB7IUFycmF5LjxXZWJHTEJ1ZmZlcj59IFRoZSBidWZmZXIgb2JqZWN0cyB0
aGF0IHdlcmUKKyAqICAgICAgY3JlYXRlZC4KKyAqLwordmFyIHNldHVwVW5pdFF1YWQgPSBmdW5j
dGlvbihnbCwgb3B0X3Bvc2l0aW9uTG9jYXRpb24sIG9wdF90ZXhjb29yZExvY2F0aW9uLCBvcHRp
b25zKSB7CisgIHJldHVybiBzZXR1cFF1YWRXaXRoVGV4Q29vcmRzKGdsLCBbIDAuMCwgMC4wIF0s
IFsgMS4wLCAxLjAgXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0X3Bvc2l0
aW9uTG9jYXRpb24sIG9wdF90ZXhjb29yZExvY2F0aW9uLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBvcHRpb25zKTsKK307CisKKy8qKgorICogQ3JlYXRlcyBidWZmZXJzIGZvciBh
IHRleHR1cmVkIHF1YWQgd2l0aCBzcGVjaWZpZWQgbG93ZXIgbGVmdAorICogYW5kIHVwcGVyIHJp
Z2h0IHRleHR1cmUgY29vcmRpbmF0ZXMsIGFuZCBhdHRhY2hlcyB0aGVtIHRvIHZlcnRleAorICog
YXR0cmlicy4KKyAqIEBwYXJhbSB7IVdlYkdMUmVuZGVyaW5nQ29udGV4dH0gZ2wgVGhlIFdlYkdM
UmVuZGVyaW5nQ29udGV4dCB0byB1c2UuCisgKiBAcGFyYW0geyFBcnJheS48bnVtYmVyPn0gbG93
ZXJMZWZ0VGV4Q29vcmRzIFRoZSB0ZXh0dXJlIGNvb3JkaW5hdGVzIGZvciB0aGUgbG93ZXIgbGVm
dCBjb3JuZXIuCisgKiBAcGFyYW0geyFBcnJheS48bnVtYmVyPn0gdXBwZXJSaWdodFRleENvb3Jk
cyBUaGUgdGV4dHVyZSBjb29yZGluYXRlcyBmb3IgdGhlIHVwcGVyIHJpZ2h0IGNvcm5lci4KKyAq
IEBwYXJhbSB7bnVtYmVyfSBvcHRfcG9zaXRpb25Mb2NhdGlvbiBUaGUgYXR0cmliIGxvY2F0aW9u
IGZvciBwb3NpdGlvbi4KKyAqIEBwYXJhbSB7bnVtYmVyfSBvcHRfdGV4Y29vcmRMb2NhdGlvbiBU
aGUgYXR0cmliIGxvY2F0aW9uIGZvciB0ZXh0dXJlIGNvb3Jkcy4KKyAqIEBwYXJhbSB7IU9iamVj
dH0gdmFyaW91cyBvcHRpb25zLiBTZWUgc2V0dXBRdWFkIGZvciBkZXRhaWxzLgorICogQHJldHVy
biB7IUFycmF5LjxXZWJHTEJ1ZmZlcj59IFRoZSBidWZmZXIgb2JqZWN0cyB0aGF0IHdlcmUKKyAq
ICAgICAgY3JlYXRlZC4KKyAqLwordmFyIHNldHVwUXVhZFdpdGhUZXhDb29yZHMgPSBmdW5jdGlv
bigKKyAgICBnbCwgbG93ZXJMZWZ0VGV4Q29vcmRzLCB1cHBlclJpZ2h0VGV4Q29vcmRzLAorICAg
IG9wdF9wb3NpdGlvbkxvY2F0aW9uLCBvcHRfdGV4Y29vcmRMb2NhdGlvbiwgb3B0aW9ucykgewor
ICB2YXIgZGVmYXVsdE9wdGlvbnMgPSB7CisgICAgcG9zaXRpb25Mb2NhdGlvbjogb3B0X3Bvc2l0
aW9uTG9jYXRpb24gfHwgMCwKKyAgICB0ZXhjb29yZExvY2F0aW9uOiBvcHRfdGV4Y29vcmRMb2Nh
dGlvbiB8fCAxLAorICAgIGxvd2VyTGVmdFRleENvb3JkczogbG93ZXJMZWZ0VGV4Q29vcmRzLAor
ICAgIHVwcGVyUmlnaHRUZXhDb29yZHM6IHVwcGVyUmlnaHRUZXhDb29yZHMKKyAgfTsKKyAgaWYg
KG9wdGlvbnMpIHsKKyAgICBmb3IgKHZhciBwcm9wIGluIG9wdGlvbnMpIHsKKyAgICAgIGRlZmF1
bHRPcHRpb25zW3Byb3BdID0gb3B0aW9uc1twcm9wXQorICAgIH0KKyAgfQorICByZXR1cm4gc2V0
dXBRdWFkKGdsLCBkZWZhdWx0T3B0aW9ucyk7Cit9OworCisvKioKKyAqIE1ha2VzIGEgcXVhZCB3
aXRoIHZhcmlvdXMgb3B0aW9ucy4KKyAqIEBwYXJhbSB7IVdlYkdMUmVuZGVyaW5nQ29udGV4dH0g
Z2wgVGhlIFdlYkdMUmVuZGVyaW5nQ29udGV4dCB0byB1c2UuCisgKiBAcGFyYW0geyFPYmplY3R9
IG9wdGlvbnMKKyAqCisgKiBzY2FsZTogc2NhbGUgdG8gbXVsdGlwbHkgdW5pdCBxdWFkIHZhbHVl
cyBieS4gZGVmYXVsdCAxLjAuCisgKiBwb3NpdGlvbkxvY2F0aW9uOiBhdHRyaWJ1dGUgbG9jYXRp
b24gZm9yIHBvc2l0aW9uLgorICogdGV4Y29vcmRMb2NhdGlvbjogYXR0cmlidXRlIGxvY2F0aW9u
IGZvciB0ZXhjb29yZHMuCisgKiAgICAgSWYgdGhpcyBkb2VzIG5vdCBleGlzdCBubyB0ZXh0dXJl
IGNvb3JkcyBhcmUgY3JlYXRlZC4KKyAqIGxvd2VyTGVmdFRleENvb3JkczogYW4gYXJyYXkgb2Yg
MiB2YWx1ZXMgZm9yIHRoZQorICogICAgIGxvd2VyTGVmdFRleENvb3Jkcy4KKyAqIHVwcGVyUmln
aHRUZXhDb29yZHM6IGFuIGFycmF5IG9mIDIgdmFsdWVzIGZvciB0aGUKKyAqICAgICB1cHBlclJp
Z2h0VGV4Q29vcmRzLgorICovCit2YXIgc2V0dXBRdWFkID0gZnVuY3Rpb24oZ2wsIG9wdGlvbnMp
IHsKKyAgdmFyIHBvc2l0aW9uTG9jYXRpb24gPSBvcHRpb25zLnBvc2l0aW9uTG9jYXRpb24gfHwg
MDsKKyAgdmFyIHNjYWxlID0gb3B0aW9ucy5zY2FsZSB8fCAxOworCisgIHZhciBvYmplY3RzID0g
W107CisKKyAgdmFyIHZlcnRleE9iamVjdCA9IGdsLmNyZWF0ZUJ1ZmZlcigpOworICBnbC5iaW5k
QnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdmVydGV4T2JqZWN0KTsKKyAgZ2wuYnVmZmVyRGF0YShn
bC5BUlJBWV9CVUZGRVIsIG5ldyBGbG9hdDMyQXJyYXkoWworICAgICAgIDEuMCAqIHNjYWxlICwg
IDEuMCAqIHNjYWxlLAorICAgICAgLTEuMCAqIHNjYWxlICwgIDEuMCAqIHNjYWxlLAorICAgICAg
LTEuMCAqIHNjYWxlICwgLTEuMCAqIHNjYWxlLAorICAgICAgIDEuMCAqIHNjYWxlICwgIDEuMCAq
IHNjYWxlLAorICAgICAgLTEuMCAqIHNjYWxlICwgLTEuMCAqIHNjYWxlLAorICAgICAgIDEuMCAq
IHNjYWxlICwgLTEuMCAqIHNjYWxlXSksIGdsLlNUQVRJQ19EUkFXKTsKKyAgZ2wuZW5hYmxlVmVy
dGV4QXR0cmliQXJyYXkocG9zaXRpb25Mb2NhdGlvbik7CisgIGdsLnZlcnRleEF0dHJpYlBvaW50
ZXIocG9zaXRpb25Mb2NhdGlvbiwgMiwgZ2wuRkxPQVQsIGZhbHNlLCAwLCAwKTsKKyAgb2JqZWN0
cy5wdXNoKHZlcnRleE9iamVjdCk7CisKKyAgaWYgKG9wdGlvbnMudGV4Y29vcmRMb2NhdGlvbiAh
PT0gdW5kZWZpbmVkKSB7CisgICAgdmFyIGxseCA9IG9wdGlvbnMubG93ZXJMZWZ0VGV4Q29vcmRz
WzBdOworICAgIHZhciBsbHkgPSBvcHRpb25zLmxvd2VyTGVmdFRleENvb3Jkc1sxXTsKKyAgICB2
YXIgdXJ4ID0gb3B0aW9ucy51cHBlclJpZ2h0VGV4Q29vcmRzWzBdOworICAgIHZhciB1cnkgPSBv
cHRpb25zLnVwcGVyUmlnaHRUZXhDb29yZHNbMV07CisKKyAgICB2ZXJ0ZXhPYmplY3QgPSBnbC5j
cmVhdGVCdWZmZXIoKTsKKyAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdmVydGV4
T2JqZWN0KTsKKyAgICBnbC5idWZmZXJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgbmV3IEZsb2F0MzJB
cnJheShbCisgICAgICAgIHVyeCwgdXJ5LAorICAgICAgICBsbHgsIHVyeSwKKyAgICAgICAgbGx4
LCBsbHksCisgICAgICAgIHVyeCwgdXJ5LAorICAgICAgICBsbHgsIGxseSwKKyAgICAgICAgdXJ4
LCBsbHldKSwgZ2wuU1RBVElDX0RSQVcpOworICAgIGdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5
KG9wdGlvbnMudGV4Y29vcmRMb2NhdGlvbik7CisgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihv
cHRpb25zLnRleGNvb3JkTG9jYXRpb24sIDIsIGdsLkZMT0FULCBmYWxzZSwgMCwgMCk7CisgICAg
b2JqZWN0cy5wdXNoKHZlcnRleE9iamVjdCk7CisgIH0KKworICByZXR1cm4gb2JqZWN0czsKK307
CisKKy8qKgorICogQ3JlYXRlcyBhIHByb2dyYW0gYW5kIGJ1ZmZlcnMgZm9yIHJlbmRlcmluZyBh
IHRleHR1cmVkIHF1YWQuCisgKiBAcGFyYW0geyFXZWJHTFJlbmRlcmluZ0NvbnRleHR9IGdsIFRo
ZSBXZWJHTFJlbmRlcmluZ0NvbnRleHQgdG8gdXNlLgorICogQHBhcmFtIHtudW1iZXJ9IG9wdF9w
b3NpdGlvbkxvY2F0aW9uIFRoZSBhdHRyaWIgbG9jYXRpb24gZm9yCisgKiAgICAgICAgcG9zaXRp
b24uIERlZmF1bHQgPSAwLgorICogQHBhcmFtIHtudW1iZXJ9IG9wdF90ZXhjb29yZExvY2F0aW9u
IFRoZSBhdHRyaWIgbG9jYXRpb24gZm9yCisgKiAgICAgICAgdGV4dHVyZSBjb29yZHMuIERlZmF1
bHQgPSAxLgorICogQHBhcmFtIHshT2JqZWN0fSB2YXJpb3VzIG9wdGlvbnMgZGVmaW5lZCBieSBz
ZXR1cFF1YWQsIHBsdXMgYW4gb3B0aW9uCisgICAgICAgICAgZnJhZ21lbnRTaGFkZXJPdmVycmlk
ZSB0byBzcGVjaWZ5IGEgY3VzdG9tIGZyYWdtZW50IHNoYWRlci4KKyAqIEByZXR1cm4geyFXZWJH
TFByb2dyYW19CisgKi8KK3ZhciBzZXR1cFRleHR1cmVkUXVhZCA9IGZ1bmN0aW9uKAorICAgIGds
LCBvcHRfcG9zaXRpb25Mb2NhdGlvbiwgb3B0X3RleGNvb3JkTG9jYXRpb24sIG9wdGlvbnMpIHsK
KyAgdmFyIHByb2dyYW0gPSBzZXR1cFNpbXBsZVRleHR1cmVQcm9ncmFtKAorICAgICAgZ2wsIG9w
dF9wb3NpdGlvbkxvY2F0aW9uLCBvcHRfdGV4Y29vcmRMb2NhdGlvbiwgb3B0aW9ucyAmJiBvcHRp
b25zLmZyYWdtZW50U2hhZGVyT3ZlcnJpZGUpOworICBzZXR1cFVuaXRRdWFkKGdsLCBvcHRfcG9z
aXRpb25Mb2NhdGlvbiwgb3B0X3RleGNvb3JkTG9jYXRpb24sIG9wdGlvbnMpOworICByZXR1cm4g
cHJvZ3JhbTsKK307CisKKy8qKgorICogQ3JlYXRlcyBhIHByb2dyYW0gYW5kIGJ1ZmZlcnMgZm9y
IHJlbmRlcmluZyBhIGNvbG9yIHF1YWQuCisgKiBAcGFyYW0geyFXZWJHTFJlbmRlcmluZ0NvbnRl
eHR9IGdsIFRoZSBXZWJHTFJlbmRlcmluZ0NvbnRleHQgdG8gdXNlLgorICogQHBhcmFtIHtudW1i
ZXJ9IG9wdF9wb3NpdGlvbkxvY2F0aW9uIFRoZSBhdHRyaWIgbG9jYXRpb24gZm9yIHBvc2l0aW9u
LgorICogQHBhcmFtIHshT2JqZWN0fSB2YXJpb3VzIG9wdGlvbnMuIFNlZSBzZXR1cFF1YWQgZm9y
IGRldGFpbHMuCisgKiBAcmV0dXJuIHshV2ViR0xQcm9ncmFtfQorICovCit2YXIgc2V0dXBDb2xv
clF1YWQgPSBmdW5jdGlvbihnbCwgb3B0X3Bvc2l0aW9uTG9jYXRpb24sIG9wdGlvbnMpIHsKKyAg
b3B0X3Bvc2l0aW9uTG9jYXRpb24gPSBvcHRfcG9zaXRpb25Mb2NhdGlvbiB8fCAwOworICB2YXIg
cHJvZ3JhbSA9IHNldHVwU2ltcGxlQ29sb3JQcm9ncmFtKGdsLCBvcHRfcG9zaXRpb25Mb2NhdGlv
bik7CisgIHNldHVwVW5pdFF1YWQoZ2wsIG9wdF9wb3NpdGlvbkxvY2F0aW9uLCAwLCBvcHRpb25z
KTsKKyAgcmV0dXJuIHByb2dyYW07Cit9OworCisvKioKKyAqIENyZWF0ZXMgYSBwcm9ncmFtIGFu
ZCBidWZmZXJzIGZvciByZW5kZXJpbmcgYSB0ZXh0dXJlZCBxdWFkIHdpdGgKKyAqIHNwZWNpZmll
ZCBsb3dlciBsZWZ0IGFuZCB1cHBlciByaWdodCB0ZXh0dXJlIGNvb3JkaW5hdGVzLgorICogQHBh
cmFtIHshV2ViR0xSZW5kZXJpbmdDb250ZXh0fSBnbCBUaGUgV2ViR0xSZW5kZXJpbmdDb250ZXh0
IHRvIHVzZS4KKyAqIEBwYXJhbSB7IUFycmF5LjxudW1iZXI+fSBsb3dlckxlZnRUZXhDb29yZHMg
VGhlIHRleHR1cmUgY29vcmRpbmF0ZXMgZm9yIHRoZSBsb3dlciBsZWZ0IGNvcm5lci4KKyAqIEBw
YXJhbSB7IUFycmF5LjxudW1iZXI+fSB1cHBlclJpZ2h0VGV4Q29vcmRzIFRoZSB0ZXh0dXJlIGNv
b3JkaW5hdGVzIGZvciB0aGUgdXBwZXIgcmlnaHQgY29ybmVyLgorICogQHBhcmFtIHtudW1iZXJ9
IG9wdF9wb3NpdGlvbkxvY2F0aW9uIFRoZSBhdHRyaWIgbG9jYXRpb24gZm9yIHBvc2l0aW9uLgor
ICogQHBhcmFtIHtudW1iZXJ9IG9wdF90ZXhjb29yZExvY2F0aW9uIFRoZSBhdHRyaWIgbG9jYXRp
b24gZm9yIHRleHR1cmUgY29vcmRzLgorICogQHJldHVybiB7IVdlYkdMUHJvZ3JhbX0KKyAqLwor
dmFyIHNldHVwVGV4dHVyZWRRdWFkV2l0aFRleENvb3JkcyA9IGZ1bmN0aW9uKAorICAgIGdsLCBs
b3dlckxlZnRUZXhDb29yZHMsIHVwcGVyUmlnaHRUZXhDb29yZHMsCisgICAgb3B0X3Bvc2l0aW9u
TG9jYXRpb24sIG9wdF90ZXhjb29yZExvY2F0aW9uKSB7CisgIHZhciBwcm9ncmFtID0gc2V0dXBT
aW1wbGVUZXh0dXJlUHJvZ3JhbSgKKyAgICAgIGdsLCBvcHRfcG9zaXRpb25Mb2NhdGlvbiwgb3B0
X3RleGNvb3JkTG9jYXRpb24pOworICBzZXR1cFF1YWRXaXRoVGV4Q29vcmRzKGdsLCBsb3dlckxl
ZnRUZXhDb29yZHMsIHVwcGVyUmlnaHRUZXhDb29yZHMsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgb3B0X3Bvc2l0aW9uTG9jYXRpb24sIG9wdF90ZXhjb29yZExvY2F0aW9uKTsKKyAgcmV0dXJu
IHByb2dyYW07Cit9OworCisvKioKKyAqIENyZWF0ZXMgYSBwcm9ncmFtIGFuZCBidWZmZXJzIGZv
ciByZW5kZXJpbmcgYSB0ZXh0dXJlZCBxdWFkIHdpdGgKKyAqIGEgY3ViZSBtYXAgdGV4dHVyZS4K
KyAqIEBwYXJhbSB7IVdlYkdMUmVuZGVyaW5nQ29udGV4dH0gZ2wgVGhlIFdlYkdMUmVuZGVyaW5n
Q29udGV4dCB0byB1c2UuCisgKiBAcGFyYW0ge251bWJlcn0gb3B0X3Bvc2l0aW9uTG9jYXRpb24g
VGhlIGF0dHJpYiBsb2NhdGlvbiBmb3IKKyAqICAgICAgICBwb3NpdGlvbi4gRGVmYXVsdCA9IDAu
CisgKiBAcGFyYW0ge251bWJlcn0gb3B0X3RleGNvb3JkTG9jYXRpb24gVGhlIGF0dHJpYiBsb2Nh
dGlvbiBmb3IKKyAqICAgICAgICB0ZXh0dXJlIGNvb3Jkcy4gRGVmYXVsdCA9IDEuCisgKiBAcmV0
dXJuIHshV2ViR0xQcm9ncmFtfQorICovCit2YXIgc2V0dXBUZXh0dXJlZFF1YWRXaXRoQ3ViZU1h
cCA9IGZ1bmN0aW9uKAorICAgIGdsLCBvcHRfcG9zaXRpb25Mb2NhdGlvbiwgb3B0X3RleGNvb3Jk
TG9jYXRpb24pIHsKKyAgdmFyIHByb2dyYW0gPSBzZXR1cFNpbXBsZUN1YmVNYXBUZXh0dXJlUHJv
Z3JhbSgKKyAgICAgIGdsLCBvcHRfcG9zaXRpb25Mb2NhdGlvbiwgb3B0X3RleGNvb3JkTG9jYXRp
b24pOworICBzZXR1cFVuaXRRdWFkKGdsLCBvcHRfcG9zaXRpb25Mb2NhdGlvbiwgb3B0X3RleGNv
b3JkTG9jYXRpb24sIHVuZGVmaW5lZCk7CisgIHJldHVybiBwcm9ncmFtOworfTsKKworLyoqCisg
KiBDcmVhdGVzIGEgdW5pdCBxdWFkIHdpdGggb25seSBwb3NpdGlvbnMgb2YgYSBnaXZlbiByZXNv
bHV0aW9uLgorICogQHBhcmFtIHshV2ViR0xSZW5kZXJpbmdDb250ZXh0fSBnbCBUaGUgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0IHRvIHVzZS4KKyAqIEBwYXJhbSB7bnVtYmVyfSBncmlkUmVzIFRoZSBy
ZXNvbHV0aW9uIG9mIHRoZSBtZXNoIGdyaWQsCisgKiAgICAgZXhwcmVzc2VkIGluIHRoZSBudW1i
ZXIgb2YgcXVhZHMgYWNyb3NzIGFuZCBkb3duLgorICogQHBhcmFtIHtudW1iZXJ9IG9wdF9wb3Np
dGlvbkxvY2F0aW9uIFRoZSBhdHRyaWIgbG9jYXRpb24gZm9yIHBvc2l0aW9uLgorICovCit2YXIg
c2V0dXBJbmRleGVkUXVhZCA9IGZ1bmN0aW9uICgKKyAgICBnbCwgZ3JpZFJlcywgb3B0X3Bvc2l0
aW9uTG9jYXRpb24sIG9wdF9mbGlwT2RkVHJpYW5nbGVzKSB7CisgIHJldHVybiBzZXR1cEluZGV4
ZWRRdWFkV2l0aE9wdGlvbnMoZ2wsCisgICAgeyBncmlkUmVzOiBncmlkUmVzLAorICAgICAgcG9z
aXRpb25Mb2NhdGlvbjogb3B0X3Bvc2l0aW9uTG9jYXRpb24sCisgICAgICBmbGlwT2RkVHJpYW5n
bGVzOiBvcHRfZmxpcE9kZFRyaWFuZ2xlcworICAgIH0pOworfTsKKworLyoqCisgKiBDcmVhdGVz
IGEgcXVhZCB3aXRoIHZhcmlvdXMgb3B0aW9ucy4KKyAqIEBwYXJhbSB7IVdlYkdMUmVuZGVyaW5n
Q29udGV4dH0gZ2wgVGhlIFdlYkdMUmVuZGVyaW5nQ29udGV4dCB0byB1c2UuCisgKiBAcGFyYW0g
eyFPYmplY3R9IG9wdGlvbnMgVGhlIG9wdGlvbnMuIFNlZSBiZWxvdy4KKyAqIEByZXR1cm4geyFB
cnJheS48V2ViR0xCdWZmZXI+fSBUaGUgY3JlYXRlZCBidWZmZXJzLgorICogICAgIFtwb3NpdGlv
bnMsIDxjb2xvcnM+LCBpbmRpY2VzXQorICoKKyAqIE9wdGlvbnM6CisgKiAgIGdyaWRSZXM6IG51
bWJlciBvZiBxdWFkcyBhY3Jvc3MgYW5kIGRvd24gZ3JpZC4KKyAqICAgcG9zaXRpb25Mb2NhdGlv
bjogYXR0cmliIGxvY2F0aW9uIGZvciBwb3NpdGlvbgorICogICBmbGlwT2RkVHJpYW5nbGVzOiBy
ZXZlcnNlIG9yZGVyIG9mIHZlcnRpY2VzIG9mIGV2ZXJ5IG90aGVyCisgKiAgICAgICB0cmlhbmds
ZQorICogICBwb3NpdGlvbk9mZnNldDogb2Zmc2V0IGFkZGVkIHRvIGVhY2ggdmVydGV4CisgKiAg
IHBvc2l0aW9uTXVsdDogbXVsdGlwaWVyIGZvciBlYWNoIHZlcnRleAorICogICBjb2xvckxvY2F0
aW9uOiBhdHRyaWIgbG9jYXRpb24gZm9yIHZlcnRleCBjb2xvcnMuIElmCisgKiAgICAgIHVuZGVm
aW5lZCBubyB2ZXJ0ZXggY29sb3JzIHdpbGwgYmUgY3JlYXRlZC4KKyAqLwordmFyIHNldHVwSW5k
ZXhlZFF1YWRXaXRoT3B0aW9ucyA9IGZ1bmN0aW9uIChnbCwgb3B0aW9ucykgeworICB2YXIgcG9z
aXRpb25Mb2NhdGlvbiA9IG9wdGlvbnMucG9zaXRpb25Mb2NhdGlvbiB8fCAwOworICB2YXIgb2Jq
ZWN0cyA9IFtdOworCisgIHZhciBncmlkUmVzID0gb3B0aW9ucy5ncmlkUmVzIHx8IDE7CisgIHZh
ciBwb3NpdGlvbk9mZnNldCA9IG9wdGlvbnMucG9zaXRpb25PZmZzZXQgfHwgMDsKKyAgdmFyIHBv
c2l0aW9uTXVsdCA9IG9wdGlvbnMucG9zaXRpb25NdWx0IHx8IDE7CisgIHZhciB2ZXJ0c0Fjcm9z
cyA9IGdyaWRSZXMgKyAxOworICB2YXIgbnVtVmVydHMgPSB2ZXJ0c0Fjcm9zcyAqIHZlcnRzQWNy
b3NzOworICB2YXIgcG9zaXRpb25zID0gbmV3IEZsb2F0MzJBcnJheShudW1WZXJ0cyAqIDMpOwor
ICB2YXIgaW5kaWNlcyA9IG5ldyBVaW50MTZBcnJheSg2ICogZ3JpZFJlcyAqIGdyaWRSZXMpOwor
ICB2YXIgcG9mZnNldCA9IDA7CisKKyAgZm9yICh2YXIgeXkgPSAwOyB5eSA8PSBncmlkUmVzOyAr
K3l5KSB7CisgICAgZm9yICh2YXIgeHggPSAwOyB4eCA8PSBncmlkUmVzOyArK3h4KSB7CisgICAg
ICBwb3NpdGlvbnNbcG9mZnNldCArIDBdID0gKC0xICsgMiAqIHh4IC8gZ3JpZFJlcykgKiBwb3Np
dGlvbk11bHQgKyBwb3NpdGlvbk9mZnNldDsKKyAgICAgIHBvc2l0aW9uc1twb2Zmc2V0ICsgMV0g
PSAoLTEgKyAyICogeXkgLyBncmlkUmVzKSAqIHBvc2l0aW9uTXVsdCArIHBvc2l0aW9uT2Zmc2V0
OworICAgICAgcG9zaXRpb25zW3BvZmZzZXQgKyAyXSA9IDA7CisKKyAgICAgIHBvZmZzZXQgKz0g
MzsKKyAgICB9CisgIH0KKworICB2YXIgYnVmID0gZ2wuY3JlYXRlQnVmZmVyKCk7CisgIGdsLmJp
bmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBidWYpOworICBnbC5idWZmZXJEYXRhKGdsLkFSUkFZ
X0JVRkZFUiwgcG9zaXRpb25zLCBnbC5TVEFUSUNfRFJBVyk7CisgIGdsLmVuYWJsZVZlcnRleEF0
dHJpYkFycmF5KHBvc2l0aW9uTG9jYXRpb24pOworICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHBv
c2l0aW9uTG9jYXRpb24sIDMsIGdsLkZMT0FULCBmYWxzZSwgMCwgMCk7CisgIG9iamVjdHMucHVz
aChidWYpOworCisgIGlmIChvcHRpb25zLmNvbG9yTG9jYXRpb24gIT09IHVuZGVmaW5lZCkgewor
ICAgIHZhciBjb2xvcnMgPSBuZXcgRmxvYXQzMkFycmF5KG51bVZlcnRzICogNCk7CisgICAgcG9m
ZnNldCA9IDA7CisgICAgZm9yICh2YXIgeXkgPSAwOyB5eSA8PSBncmlkUmVzOyArK3l5KSB7Cisg
ICAgICBmb3IgKHZhciB4eCA9IDA7IHh4IDw9IGdyaWRSZXM7ICsreHgpIHsKKyAgICAgICAgaWYg
KG9wdGlvbnMuY29sb3IgIT09IHVuZGVmaW5lZCkgeworICAgICAgICAgIGNvbG9yc1twb2Zmc2V0
ICsgMF0gPSBvcHRpb25zLmNvbG9yWzBdOworICAgICAgICAgIGNvbG9yc1twb2Zmc2V0ICsgMV0g
PSBvcHRpb25zLmNvbG9yWzFdOworICAgICAgICAgIGNvbG9yc1twb2Zmc2V0ICsgMl0gPSBvcHRp
b25zLmNvbG9yWzJdOworICAgICAgICAgIGNvbG9yc1twb2Zmc2V0ICsgM10gPSBvcHRpb25zLmNv
bG9yWzNdOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIGNvbG9yc1twb2Zmc2V0ICsgMF0g
PSB4eCAvIGdyaWRSZXM7CisgICAgICAgICAgY29sb3JzW3BvZmZzZXQgKyAxXSA9IHl5IC8gZ3Jp
ZFJlczsKKyAgICAgICAgICBjb2xvcnNbcG9mZnNldCArIDJdID0gKHh4IC8gZ3JpZFJlcykgKiAo
eXkgLyBncmlkUmVzKTsKKyAgICAgICAgICBjb2xvcnNbcG9mZnNldCArIDNdID0gKHl5ICUgMikg
KiAwLjUgKyAwLjU7CisgICAgICAgIH0KKyAgICAgICAgcG9mZnNldCArPSA0OworICAgICAgfQor
ICAgIH0KKworICAgIGJ1ZiA9IGdsLmNyZWF0ZUJ1ZmZlcigpOworICAgIGdsLmJpbmRCdWZmZXIo
Z2wuQVJSQVlfQlVGRkVSLCBidWYpOworICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVS
LCBjb2xvcnMsIGdsLlNUQVRJQ19EUkFXKTsKKyAgICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJh
eShvcHRpb25zLmNvbG9yTG9jYXRpb24pOworICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIob3B0
aW9ucy5jb2xvckxvY2F0aW9uLCA0LCBnbC5GTE9BVCwgZmFsc2UsIDAsIDApOworICAgIG9iamVj
dHMucHVzaChidWYpOworICB9CisKKyAgdmFyIHRiYXNlID0gMDsKKyAgZm9yICh2YXIgeXkgPSAw
OyB5eSA8IGdyaWRSZXM7ICsreXkpIHsKKyAgICB2YXIgaW5kZXggPSB5eSAqIHZlcnRzQWNyb3Nz
OworICAgIGZvciAodmFyIHh4ID0gMDsgeHggPCBncmlkUmVzOyArK3h4KSB7CisgICAgICBpbmRp
Y2VzW3RiYXNlICsgMF0gPSBpbmRleCArIDA7CisgICAgICBpbmRpY2VzW3RiYXNlICsgMV0gPSBp
bmRleCArIDE7CisgICAgICBpbmRpY2VzW3RiYXNlICsgMl0gPSBpbmRleCArIHZlcnRzQWNyb3Nz
OworICAgICAgaW5kaWNlc1t0YmFzZSArIDNdID0gaW5kZXggKyB2ZXJ0c0Fjcm9zczsKKyAgICAg
IGluZGljZXNbdGJhc2UgKyA0XSA9IGluZGV4ICsgMTsKKyAgICAgIGluZGljZXNbdGJhc2UgKyA1
XSA9IGluZGV4ICsgdmVydHNBY3Jvc3MgKyAxOworCisgICAgICBpZiAob3B0aW9ucy5mbGlwT2Rk
VHJpYW5nbGVzKSB7CisgICAgICAgIGluZGljZXNbdGJhc2UgKyA0XSA9IGluZGV4ICsgdmVydHNB
Y3Jvc3MgKyAxOworICAgICAgICBpbmRpY2VzW3RiYXNlICsgNV0gPSBpbmRleCArIDE7CisgICAg
ICB9CisKKyAgICAgIGluZGV4ICs9IDE7CisgICAgICB0YmFzZSArPSA2OworICAgIH0KKyAgfQor
CisgIGJ1ZiA9IGdsLmNyZWF0ZUJ1ZmZlcigpOworICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRf
QVJSQVlfQlVGRkVSLCBidWYpOworICBnbC5idWZmZXJEYXRhKGdsLkVMRU1FTlRfQVJSQVlfQlVG
RkVSLCBpbmRpY2VzLCBnbC5TVEFUSUNfRFJBVyk7CisgIG9iamVjdHMucHVzaChidWYpOworCisg
IHJldHVybiBvYmplY3RzOworfTsKKworLyoqCisgKiBSZXR1cm5zIHRoZSBjb25zdHJ1Y3RvciBm
b3IgYSB0eXBlZCBhcnJheSB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoZSBnaXZlbgorICogV2ViR0wg
dHlwZS4KKyAqIEBwYXJhbSB7IVdlYkdMUmVuZGVyaW5nQ29udGV4dH0gZ2wgQSBXZWJHTFJlbmRl
cmluZ0NvbnRleHQuCisgKiBAcGFyYW0ge251bWJlcn0gdHlwZSBUaGUgV2ViR0wgdHlwZSAoZWcs
IGdsLlVOU0lHTkVEX0JZVEUpCisgKiBAcmV0dXJuIHshQ29uc3RydWN0b3J9IFRoZSB0eXBlZCBh
cnJheSBjb25zdHJ1Y3RvciB0aGF0CisgKiAgICAgIGNvcnJlc3BvbmRzIHRvIHRoZSBnaXZlbiB0
eXBlLgorICovCit2YXIgZ2xUeXBlVG9UeXBlZEFycmF5VHlwZSA9IGZ1bmN0aW9uKGdsLCB0eXBl
KSB7CisgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgZ2wuQllURToKKyAgICAgIHJldHVybiB3
aW5kb3cuSW50OEFycmF5OworICAgIGNhc2UgZ2wuVU5TSUdORURfQllURToKKyAgICAgIHJldHVy
biB3aW5kb3cuVWludDhBcnJheTsKKyAgICBjYXNlIGdsLlNIT1JUOgorICAgICAgcmV0dXJuIHdp
bmRvdy5JbnQxNkFycmF5OworICAgIGNhc2UgZ2wuVU5TSUdORURfU0hPUlQ6CisgICAgY2FzZSBn
bC5VTlNJR05FRF9TSE9SVF81XzZfNToKKyAgICBjYXNlIGdsLlVOU0lHTkVEX1NIT1JUXzRfNF80
XzQ6CisgICAgY2FzZSBnbC5VTlNJR05FRF9TSE9SVF81XzVfNV8xOgorICAgICAgcmV0dXJuIHdp
bmRvdy5VaW50MTZBcnJheTsKKyAgICBjYXNlIGdsLklOVDoKKyAgICAgIHJldHVybiB3aW5kb3cu
SW50MzJBcnJheTsKKyAgICBjYXNlIGdsLlVOU0lHTkVEX0lOVDoKKyAgICBjYXNlIGdsLlVOU0lH
TkVEX0lOVF81XzlfOV85X1JFVjoKKyAgICBjYXNlIGdsLlVOU0lHTkVEX0lOVF8xMEZfMTFGXzEx
Rl9SRVY6CisgICAgY2FzZSBnbC5VTlNJR05FRF9JTlRfMl8xMF8xMF8xMF9SRVY6CisgICAgY2Fz
ZSBnbC5VTlNJR05FRF9JTlRfMjRfODoKKyAgICAgIHJldHVybiB3aW5kb3cuVWludDMyQXJyYXk7
CisgICAgY2FzZSBnbC5IQUxGX0ZMT0FUOgorICAgIGNhc2UgMHg4RDYxOiAgLy8gSEFMRl9GTE9B
VF9PRVMKKyAgICAgIHJldHVybiB3aW5kb3cuVWludDE2QXJyYXk7CisgICAgY2FzZSBnbC5GTE9B
VDoKKyAgICAgIHJldHVybiB3aW5kb3cuRmxvYXQzMkFycmF5OworICAgIGRlZmF1bHQ6CisgICAg
ICB0aHJvdyAndW5rbm93biBnbCB0eXBlICcgKyBnbEVudW1Ub1N0cmluZyhnbCwgdHlwZSk7Cisg
IH0KK307CisKKy8qKgorICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHBlciBjb21wb25l
bnQgZm9yIGEgZ2l2ZW4gV2ViR0wgdHlwZS4KKyAqIEBwYXJhbSB7IVdlYkdMUmVuZGVyaW5nQ29u
dGV4dH0gZ2wgQSBXZWJHTFJlbmRlcmluZ0NvbnRleHQuCisgKiBAcGFyYW0ge0dMZW51bX0gdHlw
ZSBUaGUgV2ViR0wgdHlwZSAoZWcsIGdsLlVOU0lHTkVEX0JZVEUpCisgKiBAcmV0dXJuIHtudW1i
ZXJ9IFRoZSBudW1iZXIgb2YgYnl0ZXMgcGVyIGNvbXBvbmVudC4KKyAqLwordmFyIGdldEJ5dGVz
UGVyQ29tcG9uZW50ID0gZnVuY3Rpb24oZ2wsIHR5cGUpIHsKKyAgc3dpdGNoICh0eXBlKSB7Cisg
ICAgY2FzZSBnbC5CWVRFOgorICAgIGNhc2UgZ2wuVU5TSUdORURfQllURToKKyAgICAgIHJldHVy
biAxOworICAgIGNhc2UgZ2wuU0hPUlQ6CisgICAgY2FzZSBnbC5VTlNJR05FRF9TSE9SVDoKKyAg
ICBjYXNlIGdsLlVOU0lHTkVEX1NIT1JUXzVfNl81OgorICAgIGNhc2UgZ2wuVU5TSUdORURfU0hP
UlRfNF80XzRfNDoKKyAgICBjYXNlIGdsLlVOU0lHTkVEX1NIT1JUXzVfNV81XzE6CisgICAgY2Fz
ZSBnbC5IQUxGX0ZMT0FUOgorICAgIGNhc2UgMHg4RDYxOiAgLy8gSEFMRl9GTE9BVF9PRVMKKyAg
ICAgIHJldHVybiAyOworICAgIGNhc2UgZ2wuSU5UOgorICAgIGNhc2UgZ2wuVU5TSUdORURfSU5U
OgorICAgIGNhc2UgZ2wuVU5TSUdORURfSU5UXzVfOV85XzlfUkVWOgorICAgIGNhc2UgZ2wuVU5T
SUdORURfSU5UXzEwRl8xMUZfMTFGX1JFVjoKKyAgICBjYXNlIGdsLlVOU0lHTkVEX0lOVF8yXzEw
XzEwXzEwX1JFVjoKKyAgICBjYXNlIGdsLlVOU0lHTkVEX0lOVF8yNF84OgorICAgIGNhc2UgZ2wu
RkxPQVQ6CisgICAgICByZXR1cm4gNDsKKyAgICBkZWZhdWx0OgorICAgICAgdGhyb3cgJ3Vua25v
d24gZ2wgdHlwZSAnICsgZ2xFbnVtVG9TdHJpbmcoZ2wsIHR5cGUpOworICB9Cit9OworCisvKioK
KyAqIFJldHVybnMgdGhlIG51bWJlciBvZiB0eXBlZCBhcnJheSBlbGVtZW50cyBwZXIgcGl4ZWwg
Zm9yIGEgZ2l2ZW4gV2ViR0wKKyAqIGZvcm1hdC90eXBlIGNvbWJpbmF0aW9uLiBUaGUgY29ycmVz
cG9uZGluZyB0eXBlZCBhcnJheSB0eXBlIGNhbiBiZSBkZXRlcm1pbmVkCisgKiBieSBjYWxsaW5n
IGdsVHlwZVRvVHlwZWRBcnJheVR5cGUuCisgKiBAcGFyYW0geyFXZWJHTFJlbmRlcmluZ0NvbnRl
eHR9IGdsIEEgV2ViR0xSZW5kZXJpbmdDb250ZXh0LgorICogQHBhcmFtIHtHTGVudW19IGZvcm1h
dCBUaGUgV2ViR0wgZm9ybWF0IChlZywgZ2wuUkdCQSkKKyAqIEBwYXJhbSB7R0xlbnVtfSB0eXBl
IFRoZSBXZWJHTCB0eXBlIChlZywgZ2wuVU5TSUdORURfQllURSkKKyAqIEByZXR1cm4ge251bWJl
cn0gVGhlIG51bWJlciBvZiB0eXBlZCBhcnJheSBlbGVtZW50cyBwZXIgcGl4ZWwuCisgKi8KK3Zh
ciBnZXRUeXBlZEFycmF5RWxlbWVudHNQZXJQaXhlbCA9IGZ1bmN0aW9uKGdsLCBmb3JtYXQsIHR5
cGUpIHsKKyAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBnbC5VTlNJR05FRF9TSE9SVF81XzZf
NToKKyAgICBjYXNlIGdsLlVOU0lHTkVEX1NIT1JUXzRfNF80XzQ6CisgICAgY2FzZSBnbC5VTlNJ
R05FRF9TSE9SVF81XzVfNV8xOgorICAgICAgcmV0dXJuIDE7CisgICAgY2FzZSBnbC5VTlNJR05F
RF9CWVRFOgorICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgIHRocm93ICdub3QgYSBn
bCB0eXBlIGZvciBjb2xvciBpbmZvcm1hdGlvbiAnICsgZ2xFbnVtVG9TdHJpbmcoZ2wsIHR5cGUp
OworICB9CisKKyAgc3dpdGNoIChmb3JtYXQpIHsKKyAgICBjYXNlIGdsLlJHQkE6CisgICAgICBy
ZXR1cm4gNDsKKyAgICBjYXNlIGdsLlJHQjoKKyAgICAgIHJldHVybiAzOworICAgIGNhc2UgZ2wu
TFVNSU5BTkNFX0FMUEhBOgorICAgICAgcmV0dXJuIDI7CisgICAgY2FzZSBnbC5MVU1JTkFOQ0U6
CisgICAgY2FzZSBnbC5BTFBIQToKKyAgICAgIHJldHVybiAxOworICAgIGRlZmF1bHQ6CisgICAg
ICB0aHJvdyAndW5rbm93biBnbCBmb3JtYXQgJyArIGdsRW51bVRvU3RyaW5nKGdsLCBmb3JtYXQp
OworICB9Cit9OworCisvKioKKyAqIEZpbGxzIHRoZSBnaXZlbiB0ZXh0dXJlIHdpdGggYSBzb2xp
ZCBjb2xvci4KKyAqIEBwYXJhbSB7IVdlYkdMUmVuZGVyaW5nQ29udGV4dH0gZ2wgVGhlIFdlYkdM
UmVuZGVyaW5nQ29udGV4dCB0byB1c2UuCisgKiBAcGFyYW0geyFXZWJHTFRleHR1cmV9IHRleCBU
aGUgdGV4dHVyZSB0byBmaWxsLgorICogQHBhcmFtIHtudW1iZXJ9IHdpZHRoIFRoZSB3aWR0aCBv
ZiB0aGUgdGV4dHVyZSB0byBjcmVhdGUuCisgKiBAcGFyYW0ge251bWJlcn0gaGVpZ2h0IFRoZSBo
ZWlnaHQgb2YgdGhlIHRleHR1cmUgdG8gY3JlYXRlLgorICogQHBhcmFtIHshQXJyYXkuPG51bWJl
cj59IGNvbG9yIFRoZSBjb2xvciB0byBmaWxsIHdpdGguCisgKiAgICAgICAgd2hlcmUgZWFjaCBl
bGVtZW50IGlzIGluIHRoZSByYW5nZSAwIHRvIDI1NS4KKyAqIEBwYXJhbSB7bnVtYmVyfSBvcHRf
bGV2ZWwgVGhlIGxldmVsIG9mIHRoZSB0ZXh0dXJlIHRvIGZpbGwuIERlZmF1bHQgPSAwLgorICog
QHBhcmFtIHtudW1iZXJ9IG9wdF9mb3JtYXQgVGhlIGZvcm1hdCBmb3IgdGhlIHRleHR1cmUuCisg
KiBAcGFyYW0ge251bWJlcn0gb3B0X2ludGVybmFsRm9ybWF0IFRoZSBpbnRlcm5hbCBmb3JtYXQg
Zm9yIHRoZSB0ZXh0dXJlLgorICovCit2YXIgZmlsbFRleHR1cmUgPSBmdW5jdGlvbihnbCwgdGV4
LCB3aWR0aCwgaGVpZ2h0LCBjb2xvciwgb3B0X2xldmVsLCBvcHRfZm9ybWF0LCBvcHRfdHlwZSwg
b3B0X2ludGVybmFsRm9ybWF0KSB7CisgIG9wdF9sZXZlbCA9IG9wdF9sZXZlbCB8fCAwOworICBv
cHRfZm9ybWF0ID0gb3B0X2Zvcm1hdCB8fCBnbC5SR0JBOworICBvcHRfdHlwZSA9IG9wdF90eXBl
IHx8IGdsLlVOU0lHTkVEX0JZVEU7CisgIG9wdF9pbnRlcm5hbEZvcm1hdCA9IG9wdF9pbnRlcm5h
bEZvcm1hdCB8fCBvcHRfZm9ybWF0OworICB2YXIgcGFjayA9IGdsLmdldFBhcmFtZXRlcihnbC5V
TlBBQ0tfQUxJR05NRU5UKTsKKyAgdmFyIG51bUNvbXBvbmVudHMgPSBjb2xvci5sZW5ndGg7Cisg
IHZhciBieXRlc1BlckNvbXBvbmVudCA9IGdldEJ5dGVzUGVyQ29tcG9uZW50KGdsLCBvcHRfdHlw
ZSk7CisgIHZhciByb3dTaXplID0gbnVtQ29tcG9uZW50cyAqIHdpZHRoICogYnl0ZXNQZXJDb21w
b25lbnQ7CisgIC8vIFNlZSBlcXVhdGlvbiAzLjEwIGluIEVTIDIuMCBzcGVjIGFuZCBlcXVhdGlv
biAzLjEzIGluIEVTIDMuMCBzcGVjIGZvciBwYWRkZWRSb3dMZW5ndGggY2FsY3VsYXRpb24uCisg
IC8vIGsgaXMgcGFkZGVkUm93TGVuZ3RoLgorICAvLyBuIGlzIG51bUNvbXBvbmVudHMuCisgIC8v
IGwgaXMgd2lkdGguCisgIC8vIGEgaXMgcGFjay4KKyAgLy8gcyBpcyBieXRlc1BlckNvbXBvbmVu
dC4KKyAgdmFyIHBhZGRlZFJvd0xlbmd0aDsKKyAgaWYgKGJ5dGVzUGVyQ29tcG9uZW50ID49IHBh
Y2spCisgICAgcGFkZGVkUm93TGVuZ3RoID0gbnVtQ29tcG9uZW50cyAqIHdpZHRoOworICBlbHNl
CisgICAgcGFkZGVkUm93TGVuZ3RoID0gTWF0aC5mbG9vcigocm93U2l6ZSArIHBhY2sgLSAxKSAv
IHBhY2spICogcGFjayAvIGJ5dGVzUGVyQ29tcG9uZW50OworICB2YXIgc2l6ZSA9IHdpZHRoICog
bnVtQ29tcG9uZW50cyArIChoZWlnaHQgLSAxKSAqIHBhZGRlZFJvd0xlbmd0aDsKKyAgdmFyIGJ1
ZiA9IG5ldyAoZ2xUeXBlVG9UeXBlZEFycmF5VHlwZShnbCwgb3B0X3R5cGUpKShzaXplKTsKKyAg
Zm9yICh2YXIgeXkgPSAwOyB5eSA8IGhlaWdodDsgKyt5eSkgeworICAgIHZhciBvZmYgPSB5eSAq
IHBhZGRlZFJvd0xlbmd0aDsKKyAgICBmb3IgKHZhciB4eCA9IDA7IHh4IDwgd2lkdGg7ICsreHgp
IHsKKyAgICAgIGZvciAodmFyIGpqID0gMDsgamogPCBudW1Db21wb25lbnRzOyArK2pqKSB7Cisg
ICAgICAgIGJ1ZltvZmYrK10gPSBjb2xvcltqal07CisgICAgICB9CisgICAgfQorICB9CisgIGds
LmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIHRleCk7CisgIGdsLnRleEltYWdlMkQoCisgICAg
ICBnbC5URVhUVVJFXzJELCBvcHRfbGV2ZWwsIG9wdF9pbnRlcm5hbEZvcm1hdCwgd2lkdGgsIGhl
aWdodCwgMCwKKyAgICAgIG9wdF9mb3JtYXQsIG9wdF90eXBlLCBidWYpOworfTsKKworLyoqCisg
KiBDcmVhdGVzIGEgdGV4dHVyZSBhbmQgZmlsbHMgaXQgd2l0aCBhIHNvbGlkIGNvbG9yLgorICog
QHBhcmFtIHshV2ViR0xSZW5kZXJpbmdDb250ZXh0fSBnbCBUaGUgV2ViR0xSZW5kZXJpbmdDb250
ZXh0IHRvIHVzZS4KKyAqIEBwYXJhbSB7bnVtYmVyfSB3aWR0aCBUaGUgd2lkdGggb2YgdGhlIHRl
eHR1cmUgdG8gY3JlYXRlLgorICogQHBhcmFtIHtudW1iZXJ9IGhlaWdodCBUaGUgaGVpZ2h0IG9m
IHRoZSB0ZXh0dXJlIHRvIGNyZWF0ZS4KKyAqIEBwYXJhbSB7IUFycmF5LjxudW1iZXI+fSBjb2xv
ciBUaGUgY29sb3IgdG8gZmlsbCB3aXRoLiBBIDQgZWxlbWVudCBhcnJheQorICogICAgICAgIHdo
ZXJlIGVhY2ggZWxlbWVudCBpcyBpbiB0aGUgcmFuZ2UgMCB0byAyNTUuCisgKiBAcmV0dXJuIHsh
V2ViR0xUZXh0dXJlfQorICovCit2YXIgY3JlYXRlQ29sb3JlZFRleHR1cmUgPSBmdW5jdGlvbihn
bCwgd2lkdGgsIGhlaWdodCwgY29sb3IpIHsKKyAgdmFyIHRleCA9IGdsLmNyZWF0ZVRleHR1cmUo
KTsKKyAgZmlsbFRleHR1cmUoZ2wsIHRleCwgd2lkdGgsIGhlaWdodCwgY29sb3IpOworICByZXR1
cm4gdGV4OworfTsKKwordmFyIHVieXRlVG9GbG9hdCA9IGZ1bmN0aW9uKGMpIHsKKyAgcmV0dXJu
IGMgLyAyNTU7Cit9OworCit2YXIgdWJ5dGVDb2xvclRvRmxvYXRDb2xvciA9IGZ1bmN0aW9uKGNv
bG9yKSB7CisgIHZhciBmbG9hdENvbG9yID0gW107CisgIGZvciAodmFyIGlpID0gMDsgaWkgPCBj
b2xvci5sZW5ndGg7ICsraWkpIHsKKyAgICBmbG9hdENvbG9yW2lpXSA9IHVieXRlVG9GbG9hdChj
b2xvcltpaV0pOworICB9CisgIHJldHVybiBmbG9hdENvbG9yOworfTsKKworLyoqCisgKiBTZXRz
IHRoZSAidV9jb2xvciIgdW5pZm9ybSBvZiB0aGUgY3VycmVudCBwcm9ncmFtIHRvIGNvbG9yLgor
ICogQHBhcmFtIHshV2ViR0xSZW5kZXJpbmdDb250ZXh0fSBnbCBUaGUgV2ViR0xSZW5kZXJpbmdD
b250ZXh0IHRvIHVzZS4KKyAqIEBwYXJhbSB7IUFycmF5LjxudW1iZXI+fSBjb2xvciA0IGVsZW1l
bnQgYXJyYXkgb2YgMC0xIGNvbG9yCisgKiAgICAgIGNvbXBvbmVudHMuCisgKi8KK3ZhciBzZXRG
bG9hdERyYXdDb2xvciA9IGZ1bmN0aW9uKGdsLCBjb2xvcikgeworICB2YXIgcHJvZ3JhbSA9IGds
LmdldFBhcmFtZXRlcihnbC5DVVJSRU5UX1BST0dSQU0pOworICB2YXIgY29sb3JMb2NhdGlvbiA9
IGdsLmdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtLCAidV9jb2xvciIpOworICBnbC51bmlmb3Jt
NGZ2KGNvbG9yTG9jYXRpb24sIGNvbG9yKTsKK307CisKKy8qKgorICogU2V0cyB0aGUgInVfY29s
b3IiIHVuaWZvcm0gb2YgdGhlIGN1cnJlbnQgcHJvZ3JhbSB0byBjb2xvci4KKyAqIEBwYXJhbSB7
IVdlYkdMUmVuZGVyaW5nQ29udGV4dH0gZ2wgVGhlIFdlYkdMUmVuZGVyaW5nQ29udGV4dCB0byB1
c2UuCisgKiBAcGFyYW0geyFBcnJheS48bnVtYmVyPn0gY29sb3IgNCBlbGVtZW50IGFycmF5IG9m
IDAtMjU1IGNvbG9yCisgKiAgICAgIGNvbXBvbmVudHMuCisgKi8KK3ZhciBzZXRVQnl0ZURyYXdD
b2xvciA9IGZ1bmN0aW9uKGdsLCBjb2xvcikgeworICBzZXRGbG9hdERyYXdDb2xvcihnbCwgdWJ5
dGVDb2xvclRvRmxvYXRDb2xvcihjb2xvcikpOworfTsKKworLyoqCisgKiBEcmF3cyBhIHByZXZp
b3VzbHkgc2V0dXAgcXVhZCBpbiB0aGUgZ2l2ZW4gY29sb3IuCisgKiBAcGFyYW0geyFXZWJHTFJl
bmRlcmluZ0NvbnRleHR9IGdsIFRoZSBXZWJHTFJlbmRlcmluZ0NvbnRleHQgdG8gdXNlLgorICog
QHBhcmFtIHshQXJyYXkuPG51bWJlcj59IGNvbG9yIFRoZSBjb2xvciB0byBkcmF3IHdpdGguIEEg
NAorICogICAgICAgIGVsZW1lbnQgYXJyYXkgd2hlcmUgZWFjaCBlbGVtZW50IGlzIGluIHRoZSBy
YW5nZSAwIHRvCisgKiAgICAgICAgMS4KKyAqLwordmFyIGRyYXdGbG9hdENvbG9yUXVhZCA9IGZ1
bmN0aW9uKGdsLCBjb2xvcikgeworICB2YXIgcHJvZ3JhbSA9IGdsLmdldFBhcmFtZXRlcihnbC5D
VVJSRU5UX1BST0dSQU0pOworICB2YXIgY29sb3JMb2NhdGlvbiA9IGdsLmdldFVuaWZvcm1Mb2Nh
dGlvbihwcm9ncmFtLCAidV9jb2xvciIpOworICBnbC51bmlmb3JtNGZ2KGNvbG9yTG9jYXRpb24s
IGNvbG9yKTsKKyAgZ2wuZHJhd0FycmF5cyhnbC5UUklBTkdMRVMsIDAsIDYpOworfTsKKworCisv
KioKKyAqIERyYXdzIGEgcHJldmlvdXNseSBzZXR1cCBxdWFkIGluIHRoZSBnaXZlbiBjb2xvci4K
KyAqIEBwYXJhbSB7IVdlYkdMUmVuZGVyaW5nQ29udGV4dH0gZ2wgVGhlIFdlYkdMUmVuZGVyaW5n
Q29udGV4dCB0byB1c2UuCisgKiBAcGFyYW0geyFBcnJheS48bnVtYmVyPn0gY29sb3IgVGhlIGNv
bG9yIHRvIGRyYXcgd2l0aC4gQSA0CisgKiAgICAgICAgZWxlbWVudCBhcnJheSB3aGVyZSBlYWNo
IGVsZW1lbnQgaXMgaW4gdGhlIHJhbmdlIDAgdG8KKyAqICAgICAgICAyNTUuCisgKi8KK3ZhciBk
cmF3VUJ5dGVDb2xvclF1YWQgPSBmdW5jdGlvbihnbCwgY29sb3IpIHsKKyAgZHJhd0Zsb2F0Q29s
b3JRdWFkKGdsLCB1Ynl0ZUNvbG9yVG9GbG9hdENvbG9yKGNvbG9yKSk7Cit9OworCisvKioKKyAq
IERyYXdzIGEgcHJldmlvdXNseSBzZXR1cFVuaXRRdWFkLgorICogQHBhcmFtIHshV2ViR0xSZW5k
ZXJpbmdDb250ZXh0fSBnbCBUaGUgV2ViR0xSZW5kZXJpbmdDb250ZXh0IHRvIHVzZS4KKyAqLwor
dmFyIGRyYXdVbml0UXVhZCA9IGZ1bmN0aW9uKGdsKSB7CisgIGdsLmRyYXdBcnJheXMoZ2wuVFJJ
QU5HTEVTLCAwLCA2KTsKK307CisKK3ZhciBkdW1teVNldFByb2dyYW1BbmREcmF3Tm90aGluZyA9
IGZ1bmN0aW9uKGdsKSB7CisgIGlmICghZ2wuX3d0dUR1bW15UHJvZ3JhbSkgeworICAgIGdsLl93
dHVEdW1teVByb2dyYW0gPSBzZXR1cFByb2dyYW0oZ2wsIFsKKyAgICAgICJ2b2lkIG1haW4oKSB7
IGdsX1Bvc2l0aW9uID0gdmVjNCgwLjApOyB9IiwKKyAgICAgICJ2b2lkIG1haW4oKSB7IGdsX0Zy
YWdDb2xvciA9IHZlYzQoMC4wKTsgfSIKKyAgICBdLCBbXSwgW10pOworICB9CisgIGdsLnVzZVBy
b2dyYW0oZ2wuX3d0dUR1bW15UHJvZ3JhbSk7CisgIGdsLmRyYXdBcnJheXMoZ2wuVFJJQU5HTEVT
LCAwLCAzKTsKK307CisKKy8qKgorICogQ2xlYXJzIHRoZW4gRHJhd3MgYSBwcmV2aW91c2x5IHNl
dHVwVW5pdFF1YWQuCisgKiBAcGFyYW0geyFXZWJHTFJlbmRlcmluZ0NvbnRleHR9IGdsIFRoZSBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQgdG8gdXNlLgorICogQHBhcmFtIHshQXJyYXkuPG51bWJlcj59
IG9wdF9jb2xvciBUaGUgY29sb3IgdG8gZmlsbCBjbGVhciB3aXRoIGJlZm9yZQorICogICAgICAg
IGRyYXdpbmcuIEEgNCBlbGVtZW50IGFycmF5IHdoZXJlIGVhY2ggZWxlbWVudCBpcyBpbiB0aGUg
cmFuZ2UgMCB0bworICogICAgICAgIDI1NS4gRGVmYXVsdCBbMjU1LCAyNTUsIDI1NSwgMjU1XQor
ICovCit2YXIgY2xlYXJBbmREcmF3VW5pdFF1YWQgPSBmdW5jdGlvbihnbCwgb3B0X2NvbG9yKSB7
CisgIG9wdF9jb2xvciA9IG9wdF9jb2xvciB8fCBbMjU1LCAyNTUsIDI1NSwgMjU1XTsKKyAgZ2wu
Y2xlYXJDb2xvcigKKyAgICAgIG9wdF9jb2xvclswXSAvIDI1NSwKKyAgICAgIG9wdF9jb2xvclsx
XSAvIDI1NSwKKyAgICAgIG9wdF9jb2xvclsyXSAvIDI1NSwKKyAgICAgIG9wdF9jb2xvclszXSAv
IDI1NSk7CisgIGdsLmNsZWFyKGdsLkNPTE9SX0JVRkZFUl9CSVQgfCBnbC5ERVBUSF9CVUZGRVJf
QklUKTsKKyAgZHJhd1VuaXRRdWFkKGdsKTsKK307CisKKy8qKgorICogRHJhd3MgYSBxdWFkIHBy
ZXZpb3VzbHkgc2V0dXAgd2l0aCBzZXR1cEluZGV4ZWRRdWFkLgorICogQHBhcmFtIHshV2ViR0xS
ZW5kZXJpbmdDb250ZXh0fSBnbCBUaGUgV2ViR0xSZW5kZXJpbmdDb250ZXh0IHRvIHVzZS4KKyAq
IEBwYXJhbSB7bnVtYmVyfSBncmlkUmVzIFJlc29sdXRpb24gb2YgZ3JpZC4KKyAqLwordmFyIGRy
YXdJbmRleGVkUXVhZCA9IGZ1bmN0aW9uKGdsLCBncmlkUmVzKSB7CisgIGdsLmRyYXdFbGVtZW50
cyhnbC5UUklBTkdMRVMsIGdyaWRSZXMgKiBncmlkUmVzICogNiwgZ2wuVU5TSUdORURfU0hPUlQs
IDApOworfTsKKworLyoqCisgKiBEcmF3cyBhIHByZXZpb3VzbHkgc2V0dXBJbmRleGVkUXVhZAor
ICogQHBhcmFtIHshV2ViR0xSZW5kZXJpbmdDb250ZXh0fSBnbCBUaGUgV2ViR0xSZW5kZXJpbmdD
b250ZXh0IHRvIHVzZS4KKyAqIEBwYXJhbSB7bnVtYmVyfSBncmlkUmVzIFJlc29sdXRpb24gb2Yg
Z3JpZC4KKyAqIEBwYXJhbSB7IUFycmF5LjxudW1iZXI+fSBvcHRfY29sb3IgVGhlIGNvbG9yIHRv
IGZpbGwgY2xlYXIgd2l0aCBiZWZvcmUKKyAqICAgICAgICBkcmF3aW5nLiBBIDQgZWxlbWVudCBh
cnJheSB3aGVyZSBlYWNoIGVsZW1lbnQgaXMgaW4gdGhlIHJhbmdlIDAgdG8KKyAqICAgICAgICAy
NTUuIERlZmF1bHQgWzI1NSwgMjU1LCAyNTUsIDI1NV0KKyAqLwordmFyIGNsZWFyQW5kRHJhd0lu
ZGV4ZWRRdWFkID0gZnVuY3Rpb24oZ2wsIGdyaWRSZXMsIG9wdF9jb2xvcikgeworICBvcHRfY29s
b3IgPSBvcHRfY29sb3IgfHwgWzI1NSwgMjU1LCAyNTUsIDI1NV07CisgIGdsLmNsZWFyQ29sb3Io
CisgICAgICBvcHRfY29sb3JbMF0gLyAyNTUsCisgICAgICBvcHRfY29sb3JbMV0gLyAyNTUsCisg
ICAgICBvcHRfY29sb3JbMl0gLyAyNTUsCisgICAgICBvcHRfY29sb3JbM10gLyAyNTUpOworICBn
bC5jbGVhcihnbC5DT0xPUl9CVUZGRVJfQklUIHwgZ2wuREVQVEhfQlVGRkVSX0JJVCk7CisgIGRy
YXdJbmRleGVkUXVhZChnbCwgZ3JpZFJlcyk7Cit9OworCisvKioKKyAqIENsaXBzIGEgcmFuZ2Ug
dG8gbWluLCBtYXgKKyAqIChFZy4gY2xpcFRvUmFuZ2UoLTUsNywwLDIwKSB3b3VsZCByZXR1cm4g
e3ZhbHVlOjAsZXh0ZW50OjJ9CisgKiBAcGFyYW0ge251bWJlcn0gdmFsdWUgc3RhcnQgb2YgcmFu
Z2UKKyAqIEBwYXJhbSB7bnVtYmVyfSBleHRlbnQgZXh0ZW50IG9mIHJhbmdlCisgKiBAcGFyYW0g
e251bWJlcn0gbWluIG1pbi4KKyAqIEBwYXJhbSB7bnVtYmVyfSBtYXggbWF4LgorICogQHJldHVy
biB7IXt2YWx1ZTpudW1iZXIsZXh0ZW50Om51bWJlcn19IFRoZSBjbGlwcGVkIHZhbHVlLgorICov
Cit2YXIgY2xpcFRvUmFuZ2UgPSBmdW5jdGlvbih2YWx1ZSwgZXh0ZW50LCBtaW4sIG1heCkgewor
ICBpZiAodmFsdWUgPCBtaW4pIHsKKyAgICBleHRlbnQgLT0gbWluIC0gdmFsdWU7CisgICAgdmFs
dWUgPSBtaW47CisgIH0KKyAgdmFyIGVuZCA9IHZhbHVlICsgZXh0ZW50OworICBpZiAoZW5kID4g
bWF4KSB7CisgICAgZXh0ZW50IC09IGVuZCAtIG1heDsKKyAgfQorICBpZiAoZXh0ZW50IDwgMCkg
eworICAgIHZhbHVlID0gbWF4OworICAgIGV4dGVudCA9IDA7CisgIH0KKyAgcmV0dXJuIHt2YWx1
ZTp2YWx1ZSwgZXh0ZW50OiBleHRlbnR9OworfTsKKworLyoqCisgKiBEZXRlcm1pbmVzIGlmIHRo
ZSBwYXNzZWQgY29udGV4dCBpcyBhbiBpbnN0YW5jZSBvZiBhIFdlYkdMUmVuZGVyaW5nQ29udGV4
dAorICogb3IgbGF0ZXIgdmFyaWFudCAobGlrZSBXZWJHTDJSZW5kZXJpbmdDb250ZXh0KQorICog
QHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0fSBjdHggVGhlIGNvbnRleHQgdG8gY2hlY2su
CisgKi8KK3ZhciBpc1dlYkdMQ29udGV4dCA9IGZ1bmN0aW9uKGN0eCkgeworICBpZiAoY3R4IGlu
c3RhbmNlb2YgV2ViR0xSZW5kZXJpbmdDb250ZXh0KQorICAgIHJldHVybiB0cnVlOworCisgIGlm
ICgnV2ViR0wyUmVuZGVyaW5nQ29udGV4dCcgaW4gd2luZG93ICYmIGN0eCBpbnN0YW5jZW9mIFdl
YkdMMlJlbmRlcmluZ0NvbnRleHQpCisgICAgcmV0dXJuIHRydWU7CisKKyAgcmV0dXJuIGZhbHNl
OworfTsKKworLyoqCisgKiBDcmVhdGVzIGEgY2hlY2sgcmVjdCBpcyB1c2VkIGJ5IGNoZWNrQ2Fu
dmFzUmVjdHMuCisgKiBAcGFyYW0ge251bWJlcn0geCBsZWZ0IGNvcm5lciBvZiByZWdpb24gdG8g
Y2hlY2suCisgKiBAcGFyYW0ge251bWJlcn0geSBib3R0b20gY29ybmVyIG9mIHJlZ2lvbiB0byBj
aGVjayBpbiBjYXNlIG9mIGNoZWNraW5nIGZyb20KKyAqICAgICAgICBhIEdMIGNvbnRleHQgb3Ig
dG9wIGNvcm5lciBpbiBjYXNlIG9mIGNoZWNraW5nIGZyb20gYSAyRCBjb250ZXh0LgorICogQHBh
cmFtIHtudW1iZXJ9IHdpZHRoIHdpZHRoIG9mIHJlZ2lvbiB0byBjaGVjay4KKyAqIEBwYXJhbSB7
bnVtYmVyfSBoZWlnaHQgd2lkdGggb2YgcmVnaW9uIHRvIGNoZWNrLgorICogQHBhcmFtIHshQXJy
YXkuPG51bWJlcj59IGNvbG9yIFRoZSBjb2xvciBleHBlY3RlZC4gQSA0IGVsZW1lbnQgYXJyYXkg
d2hlcmUKKyAqICAgICAgICBlYWNoIGVsZW1lbnQgaXMgaW4gdGhlIHJhbmdlIDAgdG8gMjU1Lgor
ICogQHBhcmFtIHtzdHJpbmd9IG9wdF9tc2cgTWVzc2FnZSB0byBhc3NvY2lhdGUgd2l0aCBzdWNj
ZXNzLiBFZworICogICAgICAgICgic2hvdWxkIGJlIHJlZCIpLgorICogQHBhcmFtIHtudW1iZXJ9
IG9wdF9lcnJvclJhbmdlIE9wdGlvbmFsLiBBY2NlcHRhYmxlIGVycm9yIGluCisgKiAgICAgICAg
Y29sb3IgY2hlY2tpbmcuIDAgYnkgZGVmYXVsdC4KKyAqLwordmFyIG1ha2VDaGVja1JlY3QgPSBm
dW5jdGlvbih4LCB5LCB3aWR0aCwgaGVpZ2h0LCBjb2xvciwgbXNnLCBlcnJvclJhbmdlKSB7Cisg
IHZhciByZWN0ID0geworICAgICd4JzogeCwgJ3knOiB5LAorICAgICd3aWR0aCc6IHdpZHRoLCAn
aGVpZ2h0JzogaGVpZ2h0LAorICAgICdjb2xvcic6IGNvbG9yLCAnbXNnJzogbXNnLAorICAgICdl
cnJvclJhbmdlJzogZXJyb3JSYW5nZSwKKworICAgICdjaGVja1JlY3QnOiBmdW5jdGlvbiAoYnVm
LCBsLCBiLCB3KSB7CisgICAgICBmb3IgKHZhciBweCA9ICh4IC0gbCkgOyBweCA8ICh4ICsgd2lk
dGggLSBsKSA7ICsrcHgpIHsKKyAgICAgICAgZm9yICh2YXIgcHkgPSAoeSAtIGIpIDsgcHkgPCAo
eSArIGhlaWdodCAtIGIpIDsgKytweSkgeworICAgICAgICAgIHZhciBvZmZzZXQgPSAocHkgKiB3
ICsgcHgpICogNDsKKyAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGNvbG9yLmxlbmd0aDsg
KytqKSB7CisgICAgICAgICAgICBpZiAoTWF0aC5hYnMoYnVmW29mZnNldCArIGpdIC0gY29sb3Jb
al0pID4gZXJyb3JSYW5nZSkgeworICAgICAgICAgICAgICB0ZXN0RmFpbGVkKG1zZyk7CisgICAg
ICAgICAgICAgIHZhciB3YXMgPSBidWZbb2Zmc2V0ICsgMF0udG9TdHJpbmcoKTsKKyAgICAgICAg
ICAgICAgZm9yIChqID0gMTsgaiA8IGNvbG9yLmxlbmd0aDsgKytqKSB7CisgICAgICAgICAgICAg
ICAgd2FzICs9ICIsIiArIGJ1ZltvZmZzZXQgKyBqXTsKKyAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICBkZWJ1ZygnYXQgKCcgKyBweCArICcsICcgKyBweSArCisgICAgICAgICAgICAgICAg
ICAgICcpIGV4cGVjdGVkOiAnICsgY29sb3IgKyAnIHdhcyAnICsgd2FzKTsKKyAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg
fQorICAgICAgdGVzdFBhc3NlZChtc2cpOworICAgIH0KKyAgfQorICByZXR1cm4gcmVjdDsKK307
CisKKy8qKgorICogQ2hlY2tzIHRoYXQgYSBwb3J0aW9ucyBvZiBhIGNhbnZhcyBvciB0aGUgY3Vy
cmVudGx5IGF0dGFjaGVkIGZyYW1lYnVmZmVyIGlzIDEgY29sb3IuCisgKiBAcGFyYW0geyFXZWJH
TFJlbmRlcmluZ0NvbnRleHR8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSBnbCBUaGUKKyAqICAg
ICAgICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0IG9yIDJEIGNvbnRleHQgdG8gdXNlLgorICogQHBh
cmFtIHshQXJyYXkuPGNoZWNrUmVjdD59IGFycmF5IG9mIHJlY3RzIHRvIGNoZWNrIGZvciBtYXRj
aGluZyBjb2xvci4KKyAqLwordmFyIGNoZWNrQ2FudmFzUmVjdHMgPSBmdW5jdGlvbihnbCwgcmVj
dHMpIHsKKyAgaWYgKHJlY3RzLmxlbmd0aCA+IDApIHsKKyAgICB2YXIgbGVmdCA9IHJlY3RzWzBd
Lng7CisgICAgdmFyIHJpZ2h0ID0gcmVjdHNbMF0ueCArIHJlY3RzWzFdLndpZHRoOworICAgIHZh
ciBib3R0b20gPSByZWN0c1swXS55OworICAgIHZhciB0b3AgPSByZWN0c1swXS55ICsgcmVjdHNb
MF0uaGVpZ2h0OworICAgIGZvciAodmFyIGkgPSAxOyBpIDwgcmVjdHMubGVuZ3RoOyArK2kpIHsK
KyAgICAgIGxlZnQgPSBNYXRoLm1pbihsZWZ0LCByZWN0c1tpXS54KTsKKyAgICAgIHJpZ2h0ID0g
TWF0aC5tYXgocmlnaHQsIHJlY3RzW2ldLnggKyByZWN0c1tpXS53aWR0aCk7CisgICAgICBib3R0
b20gPSBNYXRoLm1pbihib3R0b20sIHJlY3RzW2ldLnkpOworICAgICAgdG9wID0gTWF0aC5tYXgo
dG9wLCByZWN0c1tpXS55ICsgcmVjdHNbaV0uaGVpZ2h0KTsKKyAgICB9CisgICAgdmFyIHdpZHRo
ID0gcmlnaHQgLSBsZWZ0OworICAgIHZhciBoZWlnaHQgPSB0b3AgLSBib3R0b207CisgICAgdmFy
IGJ1ZiA9IG5ldyBVaW50OEFycmF5KHdpZHRoICogaGVpZ2h0ICogNCk7CisgICAgZ2wucmVhZFBp
eGVscyhsZWZ0LCBib3R0b20sIHdpZHRoLCBoZWlnaHQsIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZ
VEUsIGJ1Zik7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZWN0cy5sZW5ndGg7ICsraSkgewor
ICAgICAgcmVjdHNbaV0uY2hlY2tSZWN0KGJ1ZiwgbGVmdCwgYm90dG9tLCB3aWR0aCk7CisgICAg
fQorICB9Cit9OworCisvKioKKyAqIENoZWNrcyB0aGF0IGEgcG9ydGlvbiBvZiBhIGNhbnZhcyBv
ciB0aGUgY3VycmVudGx5IGF0dGFjaGVkIGZyYW1lYnVmZmVyIGlzIDEgY29sb3IuCisgKiBAcGFy
YW0geyFXZWJHTFJlbmRlcmluZ0NvbnRleHR8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSBnbCBU
aGUKKyAqICAgICAgICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0IG9yIDJEIGNvbnRleHQgdG8gdXNl
LgorICogQHBhcmFtIHtudW1iZXJ9IHggbGVmdCBjb3JuZXIgb2YgcmVnaW9uIHRvIGNoZWNrLgor
ICogQHBhcmFtIHtudW1iZXJ9IHkgYm90dG9tIGNvcm5lciBvZiByZWdpb24gdG8gY2hlY2sgaW4g
Y2FzZSBvZiBjaGVja2luZyBmcm9tCisgKiAgICAgICAgYSBHTCBjb250ZXh0IG9yIHRvcCBjb3Ju
ZXIgaW4gY2FzZSBvZiBjaGVja2luZyBmcm9tIGEgMkQgY29udGV4dC4KKyAqIEBwYXJhbSB7bnVt
YmVyfSB3aWR0aCB3aWR0aCBvZiByZWdpb24gdG8gY2hlY2suCisgKiBAcGFyYW0ge251bWJlcn0g
aGVpZ2h0IHdpZHRoIG9mIHJlZ2lvbiB0byBjaGVjay4KKyAqIEBwYXJhbSB7IUFycmF5LjxudW1i
ZXI+fSBjb2xvciBUaGUgY29sb3IgZXhwZWN0ZWQuIEEgNCBlbGVtZW50IGFycmF5IHdoZXJlCisg
KiAgICAgICAgZWFjaCBlbGVtZW50IGlzIGluIHRoZSByYW5nZSAwIHRvIDI1NS4KKyAqIEBwYXJh
bSB7bnVtYmVyfSBvcHRfZXJyb3JSYW5nZSBPcHRpb25hbC4gQWNjZXB0YWJsZSBlcnJvciBpbgor
ICogICAgICAgIGNvbG9yIGNoZWNraW5nLiAwIGJ5IGRlZmF1bHQuCisgKiBAcGFyYW0geyFmdW5j
dGlvbigpfSBzYW1lRm4gRnVuY3Rpb24gdG8gY2FsbCBpZiBhbGwgcGl4ZWxzCisgKiAgICAgICAg
YXJlIHRoZSBzYW1lIGFzIGNvbG9yLgorICogQHBhcmFtIHshZnVuY3Rpb24oKX0gZGlmZmVyZW50
Rm4gRnVuY3Rpb24gdG8gY2FsbCBpZiBhIHBpeGVsCisgKiAgICAgICAgaXMgZGlmZmVyZW50IHRo
YW4gY29sb3IKKyAqIEBwYXJhbSB7IWZ1bmN0aW9uKCl9IGxvZ0ZuIEZ1bmN0aW9uIHRvIGNhbGwg
Zm9yIGxvZ2dpbmcuCisgKiBAcGFyYW0ge1R5cGVkQXJyYXl9IG9wdF9yZWFkQmFja0J1ZiBvcHRp
b25hbCBidWZmZXIgdG8gcmVhZCBiYWNrIGludG8uCisgKiAgICAgICAgVHlwaWNhbGx5IHBhc3Nl
ZCB0byBlaXRoZXIgcmV1c2UgYnVmZmVyLCBvciBzdXBwb3J0IHJlYWRiYWNrcyBmcm9tCisgKiAg
ICAgICAgZmxvYXRpbmctcG9pbnQvbm9ybTE2IGZyYW1lYnVmZmVycy4KKyAqIEBwYXJhbSB7R0xl
bnVtfSBvcHRfcmVhZEJhY2tUeXBlIG9wdGlvbmFsIHJlYWQgYmFjayB0eXBlLCBkZWZhdWx0aW5n
IHRvCisgKiAgICAgICAgZ2wuVU5TSUdORURfQllURS4gQ2FuIGJlIHVzZWQgdG8gc3VwcG9ydCBy
ZWFkYmFjayBmcm9tIGZsb2F0aW5nLXBvaW50CisgKiAgICAgICAgL25vcm0xNiBmcmFtZWJ1ZmZl
cnMuCisgKiBAcGFyYW0ge0dMZW51bX0gb3B0X3JlYWRCYWNrRm9ybWF0IG9wdGlvbmFsIHJlYWQg
YmFjayBmb3JtYXQsIGRlZmF1bHRpbmcgdG8KKyAqICAgICAgICBnbC5SR0JBLiBDYW4gYmUgdXNl
ZCB0byBzdXBwb3J0IHJlYWRiYWNrIGZyb20gbm9ybTE2CisgKiAgICAgICAgZnJhbWVidWZmZXJz
LgorICovCit2YXIgY2hlY2tDYW52YXNSZWN0Q29sb3IgPSBmdW5jdGlvbihnbCwgeCwgeSwgd2lk
dGgsIGhlaWdodCwgY29sb3IsIG9wdF9lcnJvclJhbmdlLCBzYW1lRm4sIGRpZmZlcmVudEZuLCBs
b2dGbiwgb3B0X3JlYWRCYWNrQnVmLCBvcHRfcmVhZEJhY2tUeXBlLCBvcHRfcmVhZEJhY2tGb3Jt
YXQpIHsKKyAgaWYgKGlzV2ViR0xDb250ZXh0KGdsKSAmJiAhZ2wuZ2V0UGFyYW1ldGVyKGdsLkZS
QU1FQlVGRkVSX0JJTkRJTkcpKSB7CisgICAgLy8gV2UncmUgcmVhZGluZyB0aGUgYmFja2J1ZmZl
ciBzbyBjbGlwLgorICAgIHZhciB4ciA9IGNsaXBUb1JhbmdlKHgsIHdpZHRoLCAwLCBnbC5jYW52
YXMud2lkdGgpOworICAgIHZhciB5ciA9IGNsaXBUb1JhbmdlKHksIGhlaWdodCwgMCwgZ2wuY2Fu
dmFzLmhlaWdodCk7CisgICAgaWYgKCF4ci5leHRlbnQgfHwgIXlyLmV4dGVudCkgeworICAgICAg
bG9nRm4oImNoZWNraW5nIHJlY3Q6IGVmZmVjdGl2ZSB3aWR0aCBvciBoZWlnaHQgaXMgemVybyIp
OworICAgICAgc2FtZUZuKCk7CisgICAgICByZXR1cm47CisgICAgfQorICAgIHggPSB4ci52YWx1
ZTsKKyAgICB5ID0geXIudmFsdWU7CisgICAgd2lkdGggPSB4ci5leHRlbnQ7CisgICAgaGVpZ2h0
ID0geXIuZXh0ZW50OworICB9CisgIHZhciBlcnJvclJhbmdlID0gb3B0X2Vycm9yUmFuZ2UgfHwg
MDsKKyAgaWYgKCFlcnJvclJhbmdlLmxlbmd0aCkgeworICAgIGVycm9yUmFuZ2UgPSBbZXJyb3JS
YW5nZSwgZXJyb3JSYW5nZSwgZXJyb3JSYW5nZSwgZXJyb3JSYW5nZV0KKyAgfQorICB2YXIgYnVm
OworICBpZiAoaXNXZWJHTENvbnRleHQoZ2wpKSB7CisgICAgYnVmID0gb3B0X3JlYWRCYWNrQnVm
ID8gb3B0X3JlYWRCYWNrQnVmIDogbmV3IFVpbnQ4QXJyYXkod2lkdGggKiBoZWlnaHQgKiA0KTsK
KyAgICB2YXIgcmVhZEJhY2tUeXBlID0gb3B0X3JlYWRCYWNrVHlwZSA/IG9wdF9yZWFkQmFja1R5
cGUgOiBnbC5VTlNJR05FRF9CWVRFOworICAgIHZhciByZWFkQmFja0Zvcm1hdCA9IG9wdF9yZWFk
QmFja0Zvcm1hdCA/IG9wdF9yZWFkQmFja0Zvcm1hdCA6IGdsLlJHQkE7CisgICAgZ2wucmVhZFBp
eGVscyh4LCB5LCB3aWR0aCwgaGVpZ2h0LCByZWFkQmFja0Zvcm1hdCwgcmVhZEJhY2tUeXBlLCBi
dWYpOworICB9IGVsc2UgeworICAgIGJ1ZiA9IGdsLmdldEltYWdlRGF0YSh4LCB5LCB3aWR0aCwg
aGVpZ2h0KS5kYXRhOworICB9CisgIGZvciAodmFyIGkgPSAwOyBpIDwgd2lkdGggKiBoZWlnaHQ7
ICsraSkgeworICAgIHZhciBvZmZzZXQgPSBpICogNDsKKyAgICBmb3IgKHZhciBqID0gMDsgaiA8
IGNvbG9yLmxlbmd0aDsgKytqKSB7CisgICAgICBpZiAoTWF0aC5hYnMoYnVmW29mZnNldCArIGpd
IC0gY29sb3Jbal0pID4gZXJyb3JSYW5nZVtqXSkgeworICAgICAgICB2YXIgd2FzID0gYnVmW29m
ZnNldCArIDBdLnRvU3RyaW5nKCk7CisgICAgICAgIGZvciAoaiA9IDE7IGogPCBjb2xvci5sZW5n
dGg7ICsraikgeworICAgICAgICAgIHdhcyArPSAiLCIgKyBidWZbb2Zmc2V0ICsgal07CisgICAg
ICAgIH0KKyAgICAgICAgZGlmZmVyZW50Rm4oJ2F0ICgnICsgKHggKyAoaSAlIHdpZHRoKSkgKyAn
LCAnICsgKHkgKyBNYXRoLmZsb29yKGkgLyB3aWR0aCkpICsKKyAgICAgICAgICAgICAgICAgICAg
JykgZXhwZWN0ZWQ6ICcgKyBjb2xvciArICcgd2FzICcgKyB3YXMsIGJ1Zik7CisgICAgICAgIHJl
dHVybjsKKyAgICAgIH0KKyAgICB9CisgIH0KKyAgc2FtZUZuKCk7Cit9OworCisvKioKKyAqIENo
ZWNrcyB0aGF0IGEgcG9ydGlvbiBvZiBhIGNhbnZhcyBvciB0aGUgY3VycmVudGx5IGF0dGFjaGVk
IGZyYW1lYnVmZmVyIGlzIDEgY29sb3IuCisgKiBAcGFyYW0geyFXZWJHTFJlbmRlcmluZ0NvbnRl
eHR8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSBnbCBUaGUKKyAqICAgICAgICAgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0IG9yIDJEIGNvbnRleHQgdG8gdXNlLgorICogQHBhcmFtIHtudW1iZXJ9IHgg
bGVmdCBjb3JuZXIgb2YgcmVnaW9uIHRvIGNoZWNrLgorICogQHBhcmFtIHtudW1iZXJ9IHkgYm90
dG9tIGNvcm5lciBvZiByZWdpb24gdG8gY2hlY2sgaW4gY2FzZSBvZiBjaGVja2luZyBmcm9tCisg
KiAgICAgICAgYSBHTCBjb250ZXh0IG9yIHRvcCBjb3JuZXIgaW4gY2FzZSBvZiBjaGVja2luZyBm
cm9tIGEgMkQgY29udGV4dC4KKyAqIEBwYXJhbSB7bnVtYmVyfSB3aWR0aCB3aWR0aCBvZiByZWdp
b24gdG8gY2hlY2suCisgKiBAcGFyYW0ge251bWJlcn0gaGVpZ2h0IHdpZHRoIG9mIHJlZ2lvbiB0
byBjaGVjay4KKyAqIEBwYXJhbSB7IUFycmF5LjxudW1iZXI+fSBjb2xvciBUaGUgY29sb3IgZXhw
ZWN0ZWQuIEEgNCBlbGVtZW50IGFycmF5IHdoZXJlCisgKiAgICAgICAgZWFjaCBlbGVtZW50IGlz
IGluIHRoZSByYW5nZSAwIHRvIDI1NS4KKyAqIEBwYXJhbSB7c3RyaW5nfSBvcHRfbXNnIE1lc3Nh
Z2UgdG8gYXNzb2NpYXRlIHdpdGggc3VjY2VzcyBvciBmYWlsdXJlLiBFZworICogICAgICAgICgi
c2hvdWxkIGJlIHJlZCIpLgorICogQHBhcmFtIHtudW1iZXJ9IG9wdF9lcnJvclJhbmdlIE9wdGlv
bmFsLiBBY2NlcHRhYmxlIGVycm9yIGluCisgKiAgICAgICAgY29sb3IgY2hlY2tpbmcuIDAgYnkg
ZGVmYXVsdC4KKyAqIEBwYXJhbSB7VHlwZWRBcnJheX0gb3B0X3JlYWRCYWNrQnVmIG9wdGlvbmFs
IGJ1ZmZlciB0byByZWFkIGJhY2sgaW50by4KKyAqICAgICAgICBUeXBpY2FsbHkgcGFzc2VkIHRv
IGVpdGhlciByZXVzZSBidWZmZXIsIG9yIHN1cHBvcnQgcmVhZGJhY2tzIGZyb20KKyAqICAgICAg
ICBmbG9hdGluZy1wb2ludC9ub3JtMTYgZnJhbWVidWZmZXJzLgorICogQHBhcmFtIHtHTGVudW19
IG9wdF9yZWFkQmFja1R5cGUgb3B0aW9uYWwgcmVhZCBiYWNrIHR5cGUsIGRlZmF1bHRpbmcgdG8K
KyAqICAgICAgICBnbC5VTlNJR05FRF9CWVRFLiBDYW4gYmUgdXNlZCB0byBzdXBwb3J0IHJlYWRi
YWNrIGZyb20gZmxvYXRpbmctcG9pbnQKKyAqICAgICAgICAvbm9ybTE2IGZyYW1lYnVmZmVycy4K
KyAqIEBwYXJhbSB7R0xlbnVtfSBvcHRfcmVhZEJhY2tGb3JtYXQgb3B0aW9uYWwgcmVhZCBiYWNr
IGZvcm1hdCwgZGVmYXVsdGluZyB0bworICogICAgICAgIGdsLlJHQkEuIENhbiBiZSB1c2VkIHRv
IHN1cHBvcnQgcmVhZGJhY2sgZnJvbSBmbG9hdGluZy1wb2ludAorICogICAgICAgIC9ub3JtMTYg
ZnJhbWVidWZmZXJzLgorICovCit2YXIgY2hlY2tDYW52YXNSZWN0ID0gZnVuY3Rpb24oZ2wsIHgs
IHksIHdpZHRoLCBoZWlnaHQsIGNvbG9yLCBvcHRfbXNnLCBvcHRfZXJyb3JSYW5nZSwgb3B0X3Jl
YWRCYWNrQnVmLCBvcHRfcmVhZEJhY2tUeXBlLCBvcHRfcmVhZEJhY2tGb3JtYXQpIHsKKyAgY2hl
Y2tDYW52YXNSZWN0Q29sb3IoCisgICAgICBnbCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgY29sb3Is
IG9wdF9lcnJvclJhbmdlLAorICAgICAgZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBtc2cgPSBv
cHRfbXNnOworICAgICAgICBpZiAobXNnID09PSB1bmRlZmluZWQpCisgICAgICAgICAgbXNnID0g
InNob3VsZCBiZSAiICsgY29sb3IudG9TdHJpbmcoKTsKKyAgICAgICAgdGVzdFBhc3NlZChtc2cp
OworICAgICAgfSwKKyAgICAgIGZ1bmN0aW9uKGRpZmZlcmVudE1zZykgeworICAgICAgICB2YXIg
bXNnID0gb3B0X21zZzsKKyAgICAgICAgaWYgKG1zZyA9PT0gdW5kZWZpbmVkKQorICAgICAgICAg
IG1zZyA9ICJzaG91bGQgYmUgIiArIGNvbG9yLnRvU3RyaW5nKCk7CisgICAgICAgIHRlc3RGYWls
ZWQobXNnICsgIlxuIiArIGRpZmZlcmVudE1zZyk7CisgICAgICB9LAorICAgICAgZGVidWcsCisg
ICAgICBvcHRfcmVhZEJhY2tCdWYsCisgICAgICBvcHRfcmVhZEJhY2tUeXBlLAorICAgICAgb3B0
X3JlYWRCYWNrRm9ybWF0KTsKK307CisKKy8qKgorICogQ2hlY2tzIHRoYXQgYW4gZW50aXJlIGNh
bnZhcyBvciB0aGUgY3VycmVudGx5IGF0dGFjaGVkIGZyYW1lYnVmZmVyIGlzIDEgY29sb3IuCisg
KiBAcGFyYW0geyFXZWJHTFJlbmRlcmluZ0NvbnRleHR8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
fSBnbCBUaGUKKyAqICAgICAgICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0IG9yIDJEIGNvbnRleHQg
dG8gdXNlLgorICogQHBhcmFtIHshQXJyYXkuPG51bWJlcj59IGNvbG9yIFRoZSBjb2xvciBleHBl
Y3RlZC4gQSA0IGVsZW1lbnQgYXJyYXkgd2hlcmUKKyAqICAgICAgICBlYWNoIGVsZW1lbnQgaXMg
aW4gdGhlIHJhbmdlIDAgdG8gMjU1LgorICogQHBhcmFtIHtzdHJpbmd9IG1zZyBNZXNzYWdlIHRv
IGFzc29jaWF0ZSB3aXRoIHN1Y2Nlc3MuIEVnICgic2hvdWxkIGJlIHJlZCIpLgorICogQHBhcmFt
IHtudW1iZXJ9IGVycm9yUmFuZ2UgT3B0aW9uYWwuIEFjY2VwdGFibGUgZXJyb3IgaW4KKyAqICAg
ICAgICBjb2xvciBjaGVja2luZy4gMCBieSBkZWZhdWx0LgorICovCit2YXIgY2hlY2tDYW52YXMg
PSBmdW5jdGlvbihnbCwgY29sb3IsIG1zZywgZXJyb3JSYW5nZSkgeworICBjaGVja0NhbnZhc1Jl
Y3QoZ2wsIDAsIDAsIGdsLmNhbnZhcy53aWR0aCwgZ2wuY2FudmFzLmhlaWdodCwgY29sb3IsIG1z
ZywgZXJyb3JSYW5nZSk7Cit9OworCisvKioKKyAqIENoZWNrcyBhIHJlY3Rhbmd1bGFyIGFyZWEg
Ym90aCBpbnNpZGUgdGhlIGFyZWEgYW5kIG91dHNpZGUKKyAqIHRoZSBhcmVhLgorICogQHBhcmFt
IHshV2ViR0xSZW5kZXJpbmdDb250ZXh0fENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gZ2wgVGhl
CisgKiAgICAgICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dCBvciAyRCBjb250ZXh0IHRvIHVzZS4K
KyAqIEBwYXJhbSB7bnVtYmVyfSB4IGxlZnQgY29ybmVyIG9mIHJlZ2lvbiB0byBjaGVjay4KKyAq
IEBwYXJhbSB7bnVtYmVyfSB5IGJvdHRvbSBjb3JuZXIgb2YgcmVnaW9uIHRvIGNoZWNrIGluIGNh
c2Ugb2YgY2hlY2tpbmcgZnJvbQorICogICAgICAgIGEgR0wgY29udGV4dCBvciB0b3AgY29ybmVy
IGluIGNhc2Ugb2YgY2hlY2tpbmcgZnJvbSBhIDJEIGNvbnRleHQuCisgKiBAcGFyYW0ge251bWJl
cn0gd2lkdGggd2lkdGggb2YgcmVnaW9uIHRvIGNoZWNrLgorICogQHBhcmFtIHtudW1iZXJ9IGhl
aWdodCB3aWR0aCBvZiByZWdpb24gdG8gY2hlY2suCisgKiBAcGFyYW0geyFBcnJheS48bnVtYmVy
Pn0gaW5uZXJDb2xvciBUaGUgY29sb3IgZXhwZWN0ZWQgaW5zaWRlCisgKiAgICAgdGhlIGFyZWEu
IEEgNCBlbGVtZW50IGFycmF5IHdoZXJlIGVhY2ggZWxlbWVudCBpcyBpbiB0aGUKKyAqICAgICBy
YW5nZSAwIHRvIDI1NS4KKyAqIEBwYXJhbSB7IUFycmF5LjxudW1iZXI+fSBvdXRlckNvbG9yIFRo
ZSBjb2xvciBleHBlY3RlZAorICogICAgIG91dHNpZGUuIEEgNCBlbGVtZW50IGFycmF5IHdoZXJl
IGVhY2ggZWxlbWVudCBpcyBpbiB0aGUKKyAqICAgICByYW5nZSAwIHRvIDI1NS4KKyAqIEBwYXJh
bSB7IW51bWJlcn0gb3B0X2VkZ2VTaXplOiBUaGUgbnVtYmVyIG9mIHBpeGVscyB0byBza2lwCisg
KiAgICAgYXJvdW5kIHRoZSBlZGdlcyBvZiB0aGUgYXJlYS4gRGVmYXV0IDAuCisgKiBAcGFyYW0g
eyF7d2lkdGg6bnVtYmVyLCBoZWlnaHQ6bnVtYmVyfX0gb3B0X291dGVyRGltZW5zaW9ucworICog
ICAgIFRoZSBvdXRlciBkaW1lbnNpb25zLiBEZWZhdWx0IHRoZSBzaXplIG9mIGdsLmNhbnZhcy4K
KyAqLwordmFyIGNoZWNrQXJlYUluQW5kT3V0ID0gZnVuY3Rpb24oZ2wsIHgsIHksIHdpZHRoLCBo
ZWlnaHQsIGlubmVyQ29sb3IsIG91dGVyQ29sb3IsIG9wdF9lZGdlU2l6ZSwgb3B0X291dGVyRGlt
ZW5zaW9ucykgeworICB2YXIgb3V0ZXJEaW1lbnNpb25zID0gb3B0X291dGVyRGltZW5zaW9ucyB8
fCB7IHdpZHRoOiBnbC5jYW52YXMud2lkdGgsIGhlaWdodDogZ2wuY2FudmFzLmhlaWdodCB9Owor
ICB2YXIgZWRnZVNpemUgPSBvcHRfZWRnZVNpemUgfHwgMDsKKyAgY2hlY2tDYW52YXNSZWN0KGds
LCB4ICsgZWRnZVNpemUsIHkgKyBlZGdlU2l6ZSwgd2lkdGggLSBlZGdlU2l6ZSAqIDIsIGhlaWdo
dCAtIGVkZ2VTaXplICogMiwgaW5uZXJDb2xvcik7CisgIGNoZWNrQ2FudmFzUmVjdChnbCwgMCwg
MCwgeCAtIGVkZ2VTaXplLCBvdXRlckRpbWVuc2lvbnMuaGVpZ2h0LCBvdXRlckNvbG9yKTsKKyAg
Y2hlY2tDYW52YXNSZWN0KGdsLCB4ICsgd2lkdGggKyBlZGdlU2l6ZSwgMCwgb3V0ZXJEaW1lbnNp
b25zLndpZHRoIC0geCAtIHdpZHRoIC0gZWRnZVNpemUsIG91dGVyRGltZW5zaW9ucy5oZWlnaHQs
IG91dGVyQ29sb3IpOworICBjaGVja0NhbnZhc1JlY3QoZ2wsIDAsIDAsIG91dGVyRGltZW5zaW9u
cy53aWR0aCwgeSAtIGVkZ2VTaXplLCBvdXRlckNvbG9yKTsKKyAgY2hlY2tDYW52YXNSZWN0KGds
LCAwLCB5ICsgaGVpZ2h0ICsgZWRnZVNpemUsIG91dGVyRGltZW5zaW9ucy53aWR0aCwgb3V0ZXJE
aW1lbnNpb25zLmhlaWdodCAtIHkgLSBoZWlnaHQgLSBlZGdlU2l6ZSwgb3V0ZXJDb2xvcik7Cit9
OworCisvKioKKyAqIENoZWNrcyB0aGF0IGFuIGVudGlyZSBidWZmZXIgbWF0Y2hlcyB0aGUgZmxv
YXRpbmcgcG9pbnQgdmFsdWVzIHByb3ZpZGVkLgorICogKFdlYkdMIDIuMCBvbmx5KQorICogQHBh
cmFtIHshV2ViR0wyUmVuZGVyaW5nQ29udGV4dH0gZ2wgVGhlIFdlYkdMMlJlbmRlcmluZ0NvbnRl
eHQgdG8gdXNlLgorICogQHBhcmFtIHtudW1iZXJ9IHRhcmdldCBUaGUgYnVmZmVyIHRhcmdldCB0
byBiaW5kIHRvLgorICogQHBhcmFtIHshQXJyYXkuPG51bWJlcj59IGV4cGVjdGVkIFRoZSB2YWx1
ZXMgZXhwZWN0ZWQuCisgKiBAcGFyYW0ge3N0cmluZ30gb3B0X21zZyBPcHRpb25hbC4gTWVzc2Fn
ZSB0byBhc3NvY2lhdGUgd2l0aCBzdWNjZXNzLiBFZyAoInNob3VsZCBiZSByZWQiKS4KKyAqIEBw
YXJhbSB7bnVtYmVyfSBvcHRfZXJyb3JSYW5nZSBPcHRpb25hbC4gQWNjZXB0YWJsZSBlcnJvciBp
biB2YWx1ZSBjaGVja2luZy4gMC4wMDEgYnkgZGVmYXVsdC4KKyAqLwordmFyIGNoZWNrRmxvYXRC
dWZmZXIgPSBmdW5jdGlvbihnbCwgdGFyZ2V0LCBleHBlY3RlZCwgb3B0X21zZywgb3B0X2Vycm9y
UmFuZ2UpIHsKKyAgaWYgKG9wdF9tc2cgPT09IHVuZGVmaW5lZCkKKyAgICBvcHRfbXNnID0gImJ1
ZmZlciBzaG91bGQgbWF0Y2ggZXhwZWN0ZWQgdmFsdWVzIjsKKworICBpZiAob3B0X2Vycm9yUmFu
Z2UgPT09IHVuZGVmaW5lZCkKKyAgICBvcHRfZXJyb3JSYW5nZSA9IDAuMDAxOworCisgIHZhciBm
bG9hdEFycmF5ID0gbmV3IEZsb2F0MzJBcnJheShleHBlY3RlZC5sZW5ndGgpOworICBnbC5nZXRC
dWZmZXJTdWJEYXRhKHRhcmdldCwgMCwgZmxvYXRBcnJheSk7CisKKyAgZm9yICh2YXIgaSA9IDA7
IGkgPCBleHBlY3RlZC5sZW5ndGg7IGkrKykgeworICAgIGlmIChNYXRoLmFicyhmbG9hdEFycmF5
W2ldIC0gZXhwZWN0ZWRbaV0pID4gb3B0X2Vycm9yUmFuZ2UpIHsKKyAgICAgIHRlc3RGYWlsZWQo
b3B0X21zZyk7CisgICAgICBkZWJ1ZygnYXQgWycgKyBpICsgJ10gZXhwZWN0ZWQ6ICcgKyBleHBl
Y3RlZFtpXSArICcgd2FzICcgKyBmbG9hdEFycmF5W2ldKTsKKyAgICAgIHJldHVybjsKKyAgICB9
CisgIH0KKyAgdGVzdFBhc3NlZChvcHRfbXNnKTsKK307CisKKy8qKgorICogTG9hZHMgYSB0ZXh0
dXJlLCBjYWxscyBjYWxsYmFjayB3aGVuIGZpbmlzaGVkLgorICogQHBhcmFtIHshV2ViR0xSZW5k
ZXJpbmdDb250ZXh0fSBnbCBUaGUgV2ViR0xSZW5kZXJpbmdDb250ZXh0IHRvIHVzZS4KKyAqIEBw
YXJhbSB7c3RyaW5nfSB1cmwgVVJMIG9mIGltYWdlIHRvIGxvYWQKKyAqIEBwYXJhbSB7ZnVuY3Rp
b24oIUltYWdlKTogdm9pZH0gY2FsbGJhY2sgRnVuY3Rpb24gdGhhdCBnZXRzIGNhbGxlZCBhZnRl
cgorICogICAgICAgIGltYWdlIGhhcyBsb2FkZWQKKyAqIEByZXR1cm4geyFXZWJHTFRleHR1cmV9
IFRoZSBjcmVhdGVkIHRleHR1cmUuCisgKi8KK3ZhciBsb2FkVGV4dHVyZSA9IGZ1bmN0aW9uKGds
LCB1cmwsIGNhbGxiYWNrKSB7CisgICAgdmFyIHRleHR1cmUgPSBnbC5jcmVhdGVUZXh0dXJlKCk7
CisgICAgZ2wuYmluZFRleHR1cmUoZ2wuVEVYVFVSRV8yRCwgdGV4dHVyZSk7CisgICAgZ2wudGV4
UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01JTl9GSUxURVIsIGdsLk5FQVJF
U1QpOworICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9NQUdf
RklMVEVSLCBnbC5ORUFSRVNUKTsKKyAgICB2YXIgaW1hZ2UgPSBuZXcgSW1hZ2UoKTsKKyAgICBp
bWFnZS5vbmxvYWQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgZ2wuYmluZFRleHR1cmUoZ2wuVEVY
VFVSRV8yRCwgdGV4dHVyZSk7CisgICAgICAgIGdsLnBpeGVsU3RvcmVpKGdsLlVOUEFDS19GTElQ
X1lfV0VCR0wsIHRydWUpOworICAgICAgICBnbC50ZXhJbWFnZTJEKGdsLlRFWFRVUkVfMkQsIDAs
IGdsLlJHQkEsIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIGltYWdlKTsKKyAgICAgICAgY2Fs
bGJhY2soaW1hZ2UpOworICAgIH07CisgICAgaW1hZ2Uuc3JjID0gdXJsOworICAgIHJldHVybiB0
ZXh0dXJlOworfTsKKworLyoqCisgKiBDaGVja3Mgd2hldGhlciB0aGUgYm91bmQgdGV4dHVyZSBo
YXMgZXhwZWN0ZWQgZGltZW5zaW9ucy4gT25lIGNvcm5lciBwaXhlbAorICogb2YgdGhlIHRleHR1
cmUgd2lsbCBiZSBjaGFuZ2VkIGFzIGEgc2lkZSBlZmZlY3QuCisgKiBAcGFyYW0geyFXZWJHTFJl
bmRlcmluZ0NvbnRleHR9IGdsIFRoZSBXZWJHTFJlbmRlcmluZ0NvbnRleHQgdG8gdXNlLgorICog
QHBhcmFtIHshV2ViR0xUZXh0dXJlfSB0ZXh0dXJlIFRoZSB0ZXh0dXJlIHRvIGNoZWNrLgorICog
QHBhcmFtIHtudW1iZXJ9IHdpZHRoIEV4cGVjdGVkIHdpZHRoLgorICogQHBhcmFtIHtudW1iZXJ9
IGhlaWdodCBFeHBlY3RlZCBoZWlnaHQuCisgKiBAcGFyYW0ge0dMZW51bX0gb3B0X2Zvcm1hdCBU
aGUgdGV4dHVyZSdzIGZvcm1hdC4gRGVmYXVsdHMgdG8gUkdCQS4KKyAqIEBwYXJhbSB7R0xlbnVt
fSBvcHRfdHlwZSBUaGUgdGV4dHVyZSdzIHR5cGUuIERlZmF1bHRzIHRvIFVOU0lHTkVEX0JZVEUu
CisgKi8KK3ZhciBjaGVja1RleHR1cmVTaXplID0gZnVuY3Rpb24oZ2wsIHdpZHRoLCBoZWlnaHQs
IG9wdF9mb3JtYXQsIG9wdF90eXBlKSB7CisgIG9wdF9mb3JtYXQgPSBvcHRfZm9ybWF0IHx8IGds
LlJHQkE7CisgIG9wdF90eXBlID0gb3B0X3R5cGUgfHwgZ2wuVU5TSUdORURfQllURTsKKworICB2
YXIgbnVtRWxlbWVudHMgPSBnZXRUeXBlZEFycmF5RWxlbWVudHNQZXJQaXhlbChnbCwgb3B0X2Zv
cm1hdCwgb3B0X3R5cGUpOworICB2YXIgYnVmID0gbmV3IChnbFR5cGVUb1R5cGVkQXJyYXlUeXBl
KGdsLCBvcHRfdHlwZSkpKG51bUVsZW1lbnRzKTsKKworICB2YXIgZXJyb3JzID0gMDsKKyAgZ2wu
dGV4U3ViSW1hZ2UyRChnbC5URVhUVVJFXzJELCAwLCB3aWR0aCAtIDEsIGhlaWdodCAtIDEsIDEs
IDEsIG9wdF9mb3JtYXQsIG9wdF90eXBlLCBidWYpOworICBpZiAoZ2wuZ2V0RXJyb3IoKSAhPSBn
bC5OT19FUlJPUikgeworICAgIHRlc3RGYWlsZWQoIlRleHR1cmUgd2FzIHNtYWxsZXIgdGhhbiB0
aGUgZXhwZWN0ZWQgc2l6ZSAiICsgd2lkdGggKyAieCIgKyBoZWlnaHQpOworICAgICsrZXJyb3Jz
OworICB9CisgIGdsLnRleFN1YkltYWdlMkQoZ2wuVEVYVFVSRV8yRCwgMCwgd2lkdGggLSAxLCBo
ZWlnaHQsIDEsIDEsIG9wdF9mb3JtYXQsIG9wdF90eXBlLCBidWYpOworICBpZiAoZ2wuZ2V0RXJy
b3IoKSA9PSBnbC5OT19FUlJPUikgeworICAgIHRlc3RGYWlsZWQoIlRleHR1cmUgd2FzIHRhbGxl
ciB0aGFuICIgKyBoZWlnaHQpOworICAgICsrZXJyb3JzOworICB9CisgIGdsLnRleFN1YkltYWdl
MkQoZ2wuVEVYVFVSRV8yRCwgMCwgd2lkdGgsIGhlaWdodCAtIDEsIDEsIDEsIG9wdF9mb3JtYXQs
IG9wdF90eXBlLCBidWYpOworICBpZiAoZ2wuZ2V0RXJyb3IoKSA9PSBnbC5OT19FUlJPUikgewor
ICAgIHRlc3RGYWlsZWQoIlRleHR1cmUgd2FzIHdpZGVyIHRoYW4gIiArIHdpZHRoKTsKKyAgICAr
K2Vycm9yczsKKyAgfQorICBpZiAoZXJyb3JzID09IDApIHsKKyAgICB0ZXN0UGFzc2VkKCJUZXh0
dXJlIGhhZCB0aGUgZXhwZWN0ZWQgc2l6ZSAiICsgd2lkdGggKyAieCIgKyBoZWlnaHQpOworICB9
Cit9OworCisvKioKKyAqIE1ha2VzIGEgc2hhbGxvdyBjb3B5IG9mIGFuIG9iamVjdC4KKyAqIEBw
YXJhbSB7IU9iamVjdH0gc3JjIE9iamVjdCB0byBjb3B5CisgKiBAcmV0dXJuIHshT2JqZWN0fSBU
aGUgY29weSBvZiBzcmMuCisgKi8KK3ZhciBzaGFsbG93Q29weU9iamVjdCA9IGZ1bmN0aW9uKHNy
YykgeworICB2YXIgZHN0ID0ge307CisgIGZvciAodmFyIGF0dHIgaW4gc3JjKSB7CisgICAgaWYg
KHNyYy5oYXNPd25Qcm9wZXJ0eShhdHRyKSkgeworICAgICAgZHN0W2F0dHJdID0gc3JjW2F0dHJd
OworICAgIH0KKyAgfQorICByZXR1cm4gZHN0OworfTsKKworLyoqCisgKiBDaGVja3MgaWYgYW4g
YXR0cmlidXRlIGV4aXN0cyBvbiBhbiBvYmplY3QgY2FzZSBpbnNlbnNpdGl2ZS4KKyAqIEBwYXJh
bSB7IU9iamVjdH0gb2JqIE9iamVjdCB0byBjaGVjaworICogQHBhcmFtIHtzdHJpbmd9IGF0dHIg
TmFtZSBvZiBhdHRyaWJ1dGUgdG8gbG9vayBmb3IuCisgKiBAcmV0dXJuIHtzdHJpbmc/fSBUaGUg
bmFtZSBvZiB0aGUgYXR0cmlidXRlIGlmIGl0IGV4aXN0cywKKyAqICAgICAgICAgdW5kZWZpbmVk
IGlmIG5vdC4KKyAqLwordmFyIGhhc0F0dHJpYnV0ZUNhc2VJbnNlbnNpdGl2ZSA9IGZ1bmN0aW9u
KG9iaiwgYXR0cikgeworICB2YXIgbG93ZXIgPSBhdHRyLnRvTG93ZXJDYXNlKCk7CisgIGZvciAo
dmFyIGtleSBpbiBvYmopIHsKKyAgICBpZiAob2JqLmhhc093blByb3BlcnR5KGtleSkgJiYga2V5
LnRvTG93ZXJDYXNlKCkgPT0gbG93ZXIpIHsKKyAgICAgIHJldHVybiBrZXk7CisgICAgfQorICB9
Cit9OworCisvKioKKyAqIFJldHVybnMgYSBtYXAgb2YgVVJMIHF1ZXJ5c3RyaW5nIG9wdGlvbnMK
KyAqIEByZXR1cm4ge09iamVjdD99IE9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgdmFsdWVzIGlu
IHRoZSBVUkwgcXVlcnlzdHJpbmcKKyAqLwordmFyIGdldFVybE9wdGlvbnMgPSAoZnVuY3Rpb24o
KSB7CisgIHZhciBfdXJsT3B0aW9uc1BhcnNlZCA9IGZhbHNlOworICB2YXIgX3VybE9wdGlvbnMg
PSB7fTsKKyAgcmV0dXJuIGZ1bmN0aW9uKCkgeworICAgIGlmICghX3VybE9wdGlvbnNQYXJzZWQp
IHsKKyAgICAgIHZhciBzID0gd2luZG93LmxvY2F0aW9uLmhyZWY7CisgICAgICB2YXIgcSA9IHMu
aW5kZXhPZigiPyIpOworICAgICAgdmFyIGUgPSBzLmluZGV4T2YoIiMiKTsKKyAgICAgIGlmIChl
IDwgMCkgeworICAgICAgICBlID0gcy5sZW5ndGg7CisgICAgICB9CisgICAgICB2YXIgcXVlcnkg
PSBzLnN1YnN0cmluZyhxICsgMSwgZSk7CisgICAgICB2YXIgcGFpcnMgPSBxdWVyeS5zcGxpdCgi
JiIpOworICAgICAgZm9yICh2YXIgaWkgPSAwOyBpaSA8IHBhaXJzLmxlbmd0aDsgKytpaSkgewor
ICAgICAgICB2YXIga2V5VmFsdWUgPSBwYWlyc1tpaV0uc3BsaXQoIj0iKTsKKyAgICAgICAgdmFy
IGtleSA9IGtleVZhbHVlWzBdOworICAgICAgICB2YXIgdmFsdWUgPSBkZWNvZGVVUklDb21wb25l
bnQoa2V5VmFsdWVbMV0pOworICAgICAgICBfdXJsT3B0aW9uc1trZXldID0gdmFsdWU7CisgICAg
ICB9CisgICAgICBfdXJsT3B0aW9uc1BhcnNlZCA9IHRydWU7CisgICAgfQorCisgICAgcmV0dXJu
IF91cmxPcHRpb25zOworICB9Cit9KSgpOworCit2YXIgZGVmYXVsdDNEQ29udGV4dFZlcnNpb24g
PSAxOworCisvKioKKyAqIFNldCB0aGUgZGVmYXVsdCBjb250ZXh0IHZlcnNpb24gZm9yIGNyZWF0
ZTNEQ29udGV4dC4KKyAqIEluaXRpYWxseSB0aGUgZGVmYXVsdCB2ZXJzaW9uIGlzIDEuCisgKiBA
cGFyYW0ge251bWJlcn0gRGVmYXVsdCB2ZXJzaW9uIG9mIFdlYkdMIGNvbnRleHRzLgorICovCit2
YXIgc2V0RGVmYXVsdDNEQ29udGV4dFZlcnNpb24gPSBmdW5jdGlvbih2ZXJzaW9uKSB7CisgICAg
ZGVmYXVsdDNEQ29udGV4dFZlcnNpb24gPSB2ZXJzaW9uOworfTsKKworLyoqCisgKiBHZXQgdGhl
IGRlZmF1bHQgY29udGV4IHZlcnNpb24gZm9yIGNyZWF0ZTNEQ29udGV4dC4KKyAqIEZpcnN0IGl0
IGxvb2tzIGF0IHRoZSBVUkkgb3B0aW9uIHx3ZWJnbFZlcnNpb258LiBJZiBpdCBkb2VzIG5vdCBl
eGlzdCwKKyAqIHRoZW4gbG9vayBhdCB0aGUgZ2xvYmFsIGRlZmF1bHQzRENvbnRleHRWZXJzaW9u
IHZhcmlhYmxlLgorICovCit2YXIgZ2V0RGVmYXVsdDNEQ29udGV4dFZlcnNpb24gPSBmdW5jdGlv
bigpIHsKKyAgICByZXR1cm4gcGFyc2VJbnQoZ2V0VXJsT3B0aW9ucygpLndlYmdsVmVyc2lvbiwg
MTApIHx8IGRlZmF1bHQzRENvbnRleHRWZXJzaW9uOworfTsKKworLyoqCisgKiBDcmVhdGVzIGEg
d2ViZ2wgY29udGV4dC4KKyAqIEBwYXJhbSB7IUNhbnZhc3xzdHJpbmd9IG9wdF9jYW52YXMgVGhl
IGNhbnZhcyB0YWcgdG8gZ2V0CisgKiAgICAgY29udGV4dCBmcm9tLiBJZiBvbmUgaXMgbm90IHBh
c3NlZCBpbiBvbmUgd2lsbCBiZQorICogICAgIGNyZWF0ZWQuIElmIGl0J3MgYSBzdHJpbmcgaXQn
cyBhc3N1bWVkIHRvIGJlIHRoZSBpZCBvZiBhCisgKiAgICAgY2FudmFzLgorICogQHBhcmFtIHtP
YmplY3R9IG9wdF9hdHRyaWJ1dGVzIENvbnRleHQgYXR0cmlidXRlcy4KKyAqIEBwYXJhbSB7IW51
bWJlcn0gb3B0X3ZlcnNpb24gVmVyc2lvbiBvZiBXZWJHTCBjb250ZXh0IHRvIGNyZWF0ZS4KKyAq
ICAgICBUaGUgZGVmYXVsdCB2ZXJzaW9uIGNhbiBiZSBzZXQgYnkgY2FsbGluZyBzZXREZWZhdWx0
M0RDb250ZXh0VmVyc2lvbi4KKyAqIEByZXR1cm4geyFXZWJHTFJlbmRlcmluZ0NvbnRleHR9IFRo
ZSBjcmVhdGVkIGNvbnRleHQuCisgKi8KK3ZhciBjcmVhdGUzRENvbnRleHQgPSBmdW5jdGlvbihv
cHRfY2FudmFzLCBvcHRfYXR0cmlidXRlcywgb3B0X3ZlcnNpb24pIHsKKyAgaWYgKHdpbmRvdy5p
bml0VGVzdGluZ0hhcm5lc3MpIHsKKyAgICB3aW5kb3cuaW5pdFRlc3RpbmdIYXJuZXNzKCk7Cisg
IH0KKyAgdmFyIGF0dHJpYnV0ZXMgPSBzaGFsbG93Q29weU9iamVjdChvcHRfYXR0cmlidXRlcyB8
fCB7fSk7CisgIGlmICghaGFzQXR0cmlidXRlQ2FzZUluc2Vuc2l0aXZlKGF0dHJpYnV0ZXMsICJh
bnRpYWxpYXMiKSkgeworICAgIGF0dHJpYnV0ZXMuYW50aWFsaWFzID0gZmFsc2U7CisgIH0KKyAg
aWYgKCFvcHRfdmVyc2lvbikgeworICAgIG9wdF92ZXJzaW9uID0gZ2V0RGVmYXVsdDNEQ29udGV4
dFZlcnNpb24oKTsKKyAgfQorICBvcHRfY2FudmFzID0gb3B0X2NhbnZhcyB8fCBkb2N1bWVudC5j
cmVhdGVFbGVtZW50KCJjYW52YXMiKTsKKyAgaWYgKHR5cGVvZiBvcHRfY2FudmFzID09ICdzdHJp
bmcnKSB7CisgICAgb3B0X2NhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKG9wdF9jYW52
YXMpOworICB9CisgIHZhciBjb250ZXh0ID0gbnVsbDsKKworICB2YXIgbmFtZXM7CisgIHN3aXRj
aCAob3B0X3ZlcnNpb24pIHsKKyAgICBjYXNlIDI6CisgICAgICBuYW1lcyA9IFsid2ViZ2wyIl07
IGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICBuYW1lcyA9IFsid2ViZ2wiLCAiZXhwZXJpbWVu
dGFsLXdlYmdsIl07IGJyZWFrOworICB9CisKKyAgZm9yICh2YXIgaSA9IDA7IGkgPCBuYW1lcy5s
ZW5ndGg7ICsraSkgeworICAgIHRyeSB7CisgICAgICBjb250ZXh0ID0gb3B0X2NhbnZhcy5nZXRD
b250ZXh0KG5hbWVzW2ldLCBhdHRyaWJ1dGVzKTsKKyAgICB9IGNhdGNoIChlKSB7CisgICAgfQor
ICAgIGlmIChjb250ZXh0KSB7CisgICAgICBicmVhazsKKyAgICB9CisgIH0KKyAgaWYgKCFjb250
ZXh0KSB7CisgICAgdGVzdEZhaWxlZCgiVW5hYmxlIHRvIGZldGNoIFdlYkdMIHJlbmRlcmluZyBj
b250ZXh0IGZvciBDYW52YXMiKTsKKyAgfSBlbHNlIHsKKyAgICBpZiAoIXdpbmRvdy5fd3R1X2Nv
bnRleHRzKSB7CisgICAgICB3aW5kb3cuX3d0dV9jb250ZXh0cyA9IFtdCisgICAgfQorICAgIHdp
bmRvdy5fd3R1X2NvbnRleHRzLnB1c2goY29udGV4dCk7CisgIH0KKyAgcmV0dXJuIGNvbnRleHQ7
Cit9OworCisvKioKKyAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBnaXZlbiBjb250ZXh0IGlzIFdl
YkdMIDIuMCBvciBncmVhdGVyLgorICogQHBhcmFtIHshV2ViR0xSZW5kZXJpbmdDb250ZXh0fSBn
bCBUaGUgV2ViR0xSZW5kZXJpbmdDb250ZXh0IHRvIHVzZS4KKyAqIEByZXR1cm4ge2Jvb2xlYW59
IFRydWUgaWYgdGhlIGdpdmVuIGNvbnRleHQgaXMgV2ViR0wgMi4wIG9yIGdyZWF0ZXIuCisgKi8K
K3ZhciBpc1dlYkdMMiA9IGZ1bmN0aW9uKGdsKSB7CisgIC8vIER1Y2sgdHlwaW5nIGlzIHVzZWQg
c28gdGhhdCB0aGUgY29uZm9ybWFuY2Ugc3VpdGUgY2FuIGJlIHJ1bgorICAvLyBhZ2FpbnN0IGxp
YnJhcmllcyBlbXVsYXRpbmcgV2ViR0wgMS4wIG9uIHRvcCBvZiBXZWJHTCAyLjAuCisgIHJldHVy
biAhIWdsLmRyYXdBcnJheXNJbnN0YW5jZWQ7Cit9OworCisvKioKKyAqIERlZmluZXMgdGhlIGV4
Y2VwdGlvbiB0eXBlIGZvciBhIEdMIGVycm9yLgorICogQGNvbnN0cnVjdG9yCisgKiBAcGFyYW0g
e3N0cmluZ30gbWVzc2FnZSBUaGUgZXJyb3IgbWVzc2FnZS4KKyAqIEBwYXJhbSB7bnVtYmVyfSBl
cnJvciBHTCBlcnJvciBjb2RlCisgKi8KK2Z1bmN0aW9uIEdMRXJyb3JFeGNlcHRpb24gKG1lc3Nh
Z2UsIGVycm9yKSB7CisgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlOworICAgdGhpcy5uYW1lID0g
IkdMRXJyb3JFeGNlcHRpb24iOworICAgdGhpcy5lcnJvciA9IGVycm9yOworfTsKKworLyoqCisg
KiBXcmFwcyBhIFdlYkdMIGZ1bmN0aW9uIHdpdGggYSBmdW5jdGlvbiB0aGF0IHRocm93cyBhbiBl
eGNlcHRpb24gaWYgdGhlcmUgaXMKKyAqIGFuIGVycm9yLgorICogQHBhcmFtIHshV2ViR0xSZW5k
ZXJpbmdDb250ZXh0fSBnbCBUaGUgV2ViR0xSZW5kZXJpbmdDb250ZXh0IHRvIHVzZS4KKyAqIEBw
YXJhbSB7c3RyaW5nfSBmbmFtZSBOYW1lIG9mIGZ1bmN0aW9uIHRvIHdyYXAuCisgKiBAcmV0dXJu
IHtmdW5jdGlvbigpfSBUaGUgd3JhcHBlZCBmdW5jdGlvbi4KKyAqLwordmFyIGNyZWF0ZUdMRXJy
b3JXcmFwcGVyID0gZnVuY3Rpb24oY29udGV4dCwgZm5hbWUpIHsKKyAgcmV0dXJuIGZ1bmN0aW9u
KCkgeworICAgIHZhciBydiA9IGNvbnRleHRbZm5hbWVdLmFwcGx5KGNvbnRleHQsIGFyZ3VtZW50
cyk7CisgICAgdmFyIGVyciA9IGNvbnRleHQuZ2V0RXJyb3IoKTsKKyAgICBpZiAoZXJyICE9IGNv
bnRleHQuTk9fRVJST1IpIHsKKyAgICAgIHZhciBtc2cgPSAiR0wgZXJyb3IgIiArIGdsRW51bVRv
U3RyaW5nKGNvbnRleHQsIGVycikgKyAiIGluICIgKyBmbmFtZTsKKyAgICAgIHRocm93IG5ldyBH
TEVycm9yRXhjZXB0aW9uKG1zZywgZXJyKTsKKyAgICB9CisgICAgcmV0dXJuIHJ2OworICB9Owor
fTsKKworLyoqCisgKiBDcmVhdGVzIGEgV2ViR0wgY29udGV4dCB3aGVyZSBhbGwgZnVuY3Rpb25z
IGFyZSB3cmFwcGVkIHRvIHRocm93IGFuIGV4Y2VwdGlvbgorICogaWYgdGhlcmUgaXMgYW4gZXJy
b3IuCisgKiBAcGFyYW0geyFDYW52YXN9IGNhbnZhcyBUaGUgSFRNTCBjYW52YXMgdG8gZ2V0IGEg
Y29udGV4dCBmcm9tLgorICogQHBhcmFtIHtPYmplY3R9IG9wdF9hdHRyaWJ1dGVzIENvbnRleHQg
YXR0cmlidXRlcy4KKyAqIEBwYXJhbSB7IW51bWJlcn0gb3B0X3ZlcnNpb24gVmVyc2lvbiBvZiBX
ZWJHTCBjb250ZXh0IHRvIGNyZWF0ZQorICogQHJldHVybiB7IU9iamVjdH0gVGhlIHdyYXBwZWQg
Y29udGV4dC4KKyAqLworZnVuY3Rpb24gY3JlYXRlM0RDb250ZXh0V2l0aFdyYXBwZXJUaGF0VGhy
b3dzT25HTEVycm9yKGNhbnZhcywgb3B0X2F0dHJpYnV0ZXMsIG9wdF92ZXJzaW9uKSB7CisgIHZh
ciBjb250ZXh0ID0gY3JlYXRlM0RDb250ZXh0KGNhbnZhcywgb3B0X2F0dHJpYnV0ZXMsIG9wdF92
ZXJzaW9uKTsKKyAgdmFyIHdyYXAgPSB7fTsKKyAgZm9yICh2YXIgaSBpbiBjb250ZXh0KSB7Cisg
ICAgdHJ5IHsKKyAgICAgIGlmICh0eXBlb2YgY29udGV4dFtpXSA9PSAnZnVuY3Rpb24nKSB7Cisg
ICAgICAgIHdyYXBbaV0gPSBjcmVhdGVHTEVycm9yV3JhcHBlcihjb250ZXh0LCBpKTsKKyAgICAg
IH0gZWxzZSB7CisgICAgICAgIHdyYXBbaV0gPSBjb250ZXh0W2ldOworICAgICAgfQorICAgIH0g
Y2F0Y2ggKGUpIHsKKyAgICAgIGVycm9yKCJjcmVhdGVDb250ZXh0V3JhcHBlclRoYXRUaHJvd3NP
bkdMRXJyb3I6IEVycm9yIGFjY2Vzc2luZyAiICsgaSk7CisgICAgfQorICB9CisgIHdyYXAuZ2V0
RXJyb3IgPSBmdW5jdGlvbigpIHsKKyAgICAgIHJldHVybiBjb250ZXh0LmdldEVycm9yKCk7Cisg
IH07CisgIHJldHVybiB3cmFwOworfTsKKworLyoqCisgKiBUZXN0cyB0aGF0IGFuIGV2YWx1YXRl
ZCBleHByZXNzaW9uIGdlbmVyYXRlcyBhIHNwZWNpZmljIEdMIGVycm9yLgorICogQHBhcmFtIHsh
V2ViR0xSZW5kZXJpbmdDb250ZXh0fSBnbCBUaGUgV2ViR0xSZW5kZXJpbmdDb250ZXh0IHRvIHVz
ZS4KKyAqIEBwYXJhbSB7bnVtYmVyfEFycmF5LjxudW1iZXI+fSBnbEVycm9ycyBUaGUgZXhwZWN0
ZWQgZ2wgZXJyb3Igb3IgYW4gYXJyYXkgb2YgZXhwZWN0ZWQgZXJyb3JzLgorICogQHBhcmFtIHtz
dHJpbmd9IGV2YWxTdHIgVGhlIHN0cmluZyB0byBldmFsdWF0ZS4KKyAqLwordmFyIHNob3VsZEdl
bmVyYXRlR0xFcnJvciA9IGZ1bmN0aW9uKGdsLCBnbEVycm9ycywgZXZhbFN0ciwgb3B0X21zZykg
eworICB2YXIgZXhjZXB0aW9uOworICB0cnkgeworICAgIGV2YWwoZXZhbFN0cik7CisgIH0gY2F0
Y2ggKGUpIHsKKyAgICBleGNlcHRpb24gPSBlOworICB9CisgIGlmIChleGNlcHRpb24pIHsKKyAg
ICB0ZXN0RmFpbGVkKGV2YWxTdHIgKyAiIHRocmV3IGV4Y2VwdGlvbiAiICsgZXhjZXB0aW9uKTsK
KyAgICByZXR1cm4gLTE7CisgIH0gZWxzZSB7CisgICAgaWYgKCFvcHRfbXNnKSB7CisgICAgICBv
cHRfbXNnID0gImFmdGVyIGV2YWx1YXRpbmc6ICIgKyBldmFsU3RyOworICAgIH0KKyAgICByZXR1
cm4gZ2xFcnJvclNob3VsZEJlKGdsLCBnbEVycm9ycywgb3B0X21zZyk7CisgIH0KK307CisKKy8q
KgorICogVGVzdHMgdGhhdCBhbiBldmFsdWF0ZWQgZXhwcmVzc2lvbiBkb2VzIG5vdCBnZW5lcmF0
ZSBhIEdMIGVycm9yLgorICogQHBhcmFtIHshV2ViR0xSZW5kZXJpbmdDb250ZXh0fSBnbCBUaGUg
V2ViR0xSZW5kZXJpbmdDb250ZXh0IHRvIHVzZS4KKyAqIEBwYXJhbSB7c3RyaW5nfSBldmFsU3Ry
IFRoZSBzdHJpbmcgdG8gZXZhbHVhdGUuCisgKi8KK3ZhciBmYWlsSWZHTEVycm9yID0gZnVuY3Rp
b24oZ2wsIGV2YWxTdHIpIHsKKyAgdmFyIGV4Y2VwdGlvbjsKKyAgdHJ5IHsKKyAgICBldmFsKGV2
YWxTdHIpOworICB9IGNhdGNoIChlKSB7CisgICAgZXhjZXB0aW9uID0gZTsKKyAgfQorICBpZiAo
ZXhjZXB0aW9uKSB7CisgICAgdGVzdEZhaWxlZChldmFsU3RyICsgIiB0aHJldyBleGNlcHRpb24g
IiArIGV4Y2VwdGlvbik7CisgIH0gZWxzZSB7CisgICAgZ2xFcnJvclNob3VsZEJlSW1wbChnbCwg
Z2wuTk9fRVJST1IsIGZhbHNlLCAiYWZ0ZXIgZXZhbHVhdGluZzogIiArIGV2YWxTdHIpOworICB9
Cit9OworCisvKioKKyAqIFRlc3RzIHRoYXQgdGhlIGZpcnN0IGVycm9yIEdMIHJldHVybnMgaXMg
dGhlIHNwZWNpZmllZCBlcnJvci4KKyAqIEBwYXJhbSB7IVdlYkdMUmVuZGVyaW5nQ29udGV4dH0g
Z2wgVGhlIFdlYkdMUmVuZGVyaW5nQ29udGV4dCB0byB1c2UuCisgKiBAcGFyYW0ge251bWJlcnxB
cnJheS48bnVtYmVyPn0gZ2xFcnJvcnMgVGhlIGV4cGVjdGVkIGdsIGVycm9yIG9yIGFuIGFycmF5
IG9mIGV4cGVjdGVkIGVycm9ycy4KKyAqIEBwYXJhbSB7c3RyaW5nfSBvcHRfbXNnIE9wdGlvbmFs
IGFkZGl0aW9uYWwgbWVzc2FnZS4KKyAqLwordmFyIGdsRXJyb3JTaG91bGRCZSA9IGZ1bmN0aW9u
KGdsLCBnbEVycm9ycywgb3B0X21zZykgeworICByZXR1cm4gZ2xFcnJvclNob3VsZEJlSW1wbChn
bCwgZ2xFcnJvcnMsIHRydWUsIG9wdF9tc2cpOworfTsKKworLyoqCisgKiBUZXN0cyB0aGF0IHRo
ZSBnaXZlbiBmcmFtZWJ1ZmZlciBoYXMgYSBzcGVjaWZpYyBzdGF0dXMKKyAqIEBwYXJhbSB7IVdl
YkdMUmVuZGVyaW5nQ29udGV4dH0gZ2wgVGhlIFdlYkdMUmVuZGVyaW5nQ29udGV4dCB0byB1c2Uu
CisgKiBAcGFyYW0ge251bWJlcnxBcnJheS48bnVtYmVyPn0gZ2xTdGF0dXNlcyBUaGUgZXhwZWN0
ZWQgZ2wKKyAqICAgICAgICBzdGF0dXMgb3IgYW4gYXJyYXkgb2YgZXhwZWN0ZWQgc3RhdHVzZXMu
CisgKiBAcGFyYW0ge3N0cmluZ30gb3B0X21zZyBPcHRpb25hbCBhZGRpdGlvbmFsIG1lc3NhZ2Uu
CisgKi8KK3ZhciBmcmFtZWJ1ZmZlclN0YXR1c1Nob3VsZEJlID0gZnVuY3Rpb24oZ2wsIHRhcmdl
dCwgZ2xTdGF0dXNlcywgb3B0X21zZykgeworICBpZiAoIWdsU3RhdHVzZXMubGVuZ3RoKSB7Cisg
ICAgZ2xTdGF0dXNlcyA9IFtnbFN0YXR1c2VzXTsKKyAgfQorICBvcHRfbXNnID0gb3B0X21zZyB8
fCAiIjsKKyAgY29uc3Qgc3RhdHVzID0gZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyh0YXJnZXQp
OworICBjb25zdCBuZHggPSBnbFN0YXR1c2VzLmluZGV4T2Yoc3RhdHVzKTsKKyAgY29uc3QgZXhw
ZWN0ZWQgPSBnbFN0YXR1c2VzLm1hcCgoc3RhdHVzKSA9PiB7CisgICAgcmV0dXJuIGdsRW51bVRv
U3RyaW5nKGdsLCBzdGF0dXMpOworICB9KS5qb2luKCcgb3IgJyk7CisgIGlmIChuZHggPCAwKSB7
CisgICAgbGV0IG1zZyA9ICJjaGVja0ZyYW1lYnVmZmVyU3RhdHVzIGV4cGVjdGVkIiArICgoZ2xT
dGF0dXNlcy5sZW5ndGggPiAxKSA/ICIgb25lIG9mOiAiIDogIjogIikgKworICAgICAgZXhwZWN0
ZWQgKyAgIi4gV2FzICIgKyBnbEVudW1Ub1N0cmluZyhnbCwgc3RhdHVzKTsKKyAgICBpZiAob3B0
X21zZykgeworICAgICAgbXNnICs9ICI6ICIgKyBvcHRfbXNnOworICAgIH0KKyAgICB0ZXN0RmFp
bGVkKG1zZyk7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisgIGxldCBtc2cgPSBgY2hlY2tGcmFt
ZWJ1ZmZlclN0YXR1cyB3YXMgJHtnbEVudW1Ub1N0cmluZyhnbCwgc3RhdHVzKX1gOworICBpZiAo
Z2xTdGF0dXNlcy5sZW5ndGggPiAxKSB7CisgICAgbXNnICs9IGAsIG9uZSBvZjogJHtleHBlY3Rl
ZH1gOworICB9CisgIGlmIChvcHRfbXNnKSB7CisgICAgbXNnICs9ICI6ICIgKyBvcHRfbXNnOwor
ICB9CisgIHRlc3RQYXNzZWQobXNnKTsKKyAgcmV0dXJuIFtzdGF0dXNdOworfQorCisvKioKKyAq
IFRlc3RzIHRoYXQgdGhlIGZpcnN0IGVycm9yIEdMIHJldHVybnMgaXMgdGhlIHNwZWNpZmllZCBl
cnJvci4gQWxsb3dzIHN1cHByZXNzaW9uIG9mIHN1Y2Nlc3Nlcy4KKyAqIEBwYXJhbSB7IVdlYkdM
UmVuZGVyaW5nQ29udGV4dH0gZ2wgVGhlIFdlYkdMUmVuZGVyaW5nQ29udGV4dCB0byB1c2UuCisg
KiBAcGFyYW0ge251bWJlcnxBcnJheS48bnVtYmVyPn0gZ2xFcnJvcnMgVGhlIGV4cGVjdGVkIGds
IGVycm9yIG9yIGFuIGFycmF5IG9mIGV4cGVjdGVkIGVycm9ycy4KKyAqIEBwYXJhbSB7Ym9vbGVh
bn0gcmVwb3J0U3VjY2Vzc2VzIFdoZXRoZXIgdG8gcmVwb3J0IHN1Y2Nlc3NlcyBhcyBwYXNzZXMs
IG9yIHRvIHNpbGVudGx5IHBhc3MuCisgKiBAcGFyYW0ge3N0cmluZ30gb3B0X21zZyBPcHRpb25h
bCBhZGRpdGlvbmFsIG1lc3NhZ2UuCisgKi8KK3ZhciBnbEVycm9yU2hvdWxkQmVJbXBsID0gZnVu
Y3Rpb24oZ2wsIGdsRXJyb3JzLCByZXBvcnRTdWNjZXNzZXMsIG9wdF9tc2cpIHsKKyAgaWYgKCFn
bEVycm9ycy5sZW5ndGgpIHsKKyAgICBnbEVycm9ycyA9IFtnbEVycm9yc107CisgIH0KKyAgb3B0
X21zZyA9IG9wdF9tc2cgfHwgIiI7CisKKyAgY29uc3QgZm5FcnJTdHIgPSBmdW5jdGlvbihlcnJW
YWwpIHsKKyAgICBpZiAoZXJyVmFsID09IDApIHJldHVybiAiTk9fRVJST1IiOworICAgIHJldHVy
biBnbEVudW1Ub1N0cmluZyhnbCwgZXJyVmFsKTsKKyAgfTsKKworICB2YXIgZXJyID0gZ2wuZ2V0
RXJyb3IoKTsKKyAgdmFyIG5keCA9IGdsRXJyb3JzLmluZGV4T2YoZXJyKTsKKyAgdmFyIGVyclN0
cnMgPSBbXTsKKyAgZm9yICh2YXIgaWkgPSAwOyBpaSA8IGdsRXJyb3JzLmxlbmd0aDsgKytpaSkg
eworICAgIGVyclN0cnMucHVzaChmbkVyclN0cihnbEVycm9yc1tpaV0pKTsKKyAgfQorICB2YXIg
ZXhwZWN0ZWQgPSBlcnJTdHJzLmpvaW4oIiBvciAiKTsKKyAgaWYgKG5keCA8IDApIHsKKyAgICB2
YXIgbXNnID0gImdldEVycm9yIGV4cGVjdGVkIiArICgoZ2xFcnJvcnMubGVuZ3RoID4gMSkgPyAi
IG9uZSBvZjogIiA6ICI6ICIpOworICAgIHRlc3RGYWlsZWQobXNnICsgZXhwZWN0ZWQgKyAgIi4g
V2FzICIgKyBmbkVyclN0cihlcnIpICsgIiA6ICIgKyBvcHRfbXNnKTsKKyAgfSBlbHNlIGlmIChy
ZXBvcnRTdWNjZXNzZXMpIHsKKyAgICB2YXIgbXNnID0gImdldEVycm9yIHdhcyAiICsgKChnbEVy
cm9ycy5sZW5ndGggPiAxKSA/ICJvbmUgb2Y6ICIgOiAiZXhwZWN0ZWQgdmFsdWU6ICIpOworICAg
IHRlc3RQYXNzZWQobXNnICsgZXhwZWN0ZWQgKyAiIDogIiArIG9wdF9tc2cpOworICB9CisgIHJl
dHVybiBlcnI7Cit9OworCisvKioKKyAqIFRlc3RzIHRoYXQgYSBmdW5jdGlvbiB0aHJvd3Mgb3Ig
bm90LgorICogQHBhcmFtIHshV2ViR0xDb250ZXh0fSBnbCBUaGUgV2ViR0xDb250ZXh0IHRvIHVz
ZS4KKyAqIEBwYXJhbSB0aHJvd1R5cGUgVHlwZSBvZiB0aHJvd24gZXJyb3IgKGUuZy4gVHlwZUVy
cm9yKSwgb3IgZmFsc2UuCisgKiBAcGFyYW0ge3N0cmluZ30gaW5mbyBJbmZvIG9uIHdoYXQncyBi
ZWluZyB0ZXN0ZWQKKyAqIEBwYXJhbSB7ZnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmMgdG8gdGVzdC4K
KyAqLwordmFyIHNob3VsZFRocm93ID0gZnVuY3Rpb24oZ2wsIHRocm93VHlwZSwgaW5mbywgZnVu
YykgeworICB3aGlsZSAoZ2wuZ2V0RXJyb3IoKSkge30KKworICB2YXIgc2hvdWxkVGhyb3cgPSAo
dGhyb3dUeXBlICE9IGZhbHNlKTsKKworICB0cnkgeworICAgIGZ1bmMoKTsKKworICAgIGlmIChz
aG91bGRUaHJvdykgeworICAgICAgdGVzdEZhaWxlZCgiU2hvdWxkIHRocm93IGEgIiArIHRocm93
VHlwZS5uYW1lICsgIjogIiArIGluZm8pOworICAgIH0gZWxzZSB7CisgICAgICB0ZXN0UGFzc2Vk
KCJTaG91bGQgbm90IGhhdmUgdGhyb3duOiAiICsgaW5mbyk7CisgICAgfQorICB9IGNhdGNoIChl
KSB7CisgICAgaWYgKHNob3VsZFRocm93KSB7CisgICAgICBpZiAoZSBpbnN0YW5jZW9mIHRocm93
VHlwZSkgeworICAgICAgICB0ZXN0UGFzc2VkKCJTaG91bGQgdGhyb3cgYSAiICsgdGhyb3dUeXBl
Lm5hbWUgKyAiOiAiICsgaW5mbyk7CisgICAgICB9IGVsc2UgeworICAgICAgICB0ZXN0RmFpbGVk
KCJTaG91bGQgdGhyb3cgYSAiICsgdGhyb3dUeXBlLm5hbWUgKyAiLCB0aHJldyAiICsgZS5uYW1l
ICsgIjogIiArIGluZm8pOworICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICB0ZXN0RmFpbGVk
KCJTaG91bGQgbm90IGhhdmUgdGhyb3duOiAiICsgaW5mbyk7CisgICAgfQorCisgICAgaWYgKGds
LmdldEVycm9yKCkpIHsKKyAgICAgIHRlc3RGYWlsZWQoIlNob3VsZCBub3QgZ2VuZXJhdGUgYW4g
ZXJyb3Igd2hlbiB0aHJvd2luZzogIiArIGluZm8pOworICAgIH0KKyAgfQorCisgIHdoaWxlIChn
bC5nZXRFcnJvcigpKSB7fQorfTsKKworLyoqCisgKiBMaW5rcyBhIFdlYkdMIHByb2dyYW0sIHRo
cm93cyBpZiB0aGVyZSBhcmUgZXJyb3JzLgorICogQHBhcmFtIHshV2ViR0xSZW5kZXJpbmdDb250
ZXh0fSBnbCBUaGUgV2ViR0xSZW5kZXJpbmdDb250ZXh0IHRvIHVzZS4KKyAqIEBwYXJhbSB7IVdl
YkdMUHJvZ3JhbX0gcHJvZ3JhbSBUaGUgV2ViR0xQcm9ncmFtIHRvIGxpbmsuCisgKiBAcGFyYW0g
e2Z1bmN0aW9uKHN0cmluZyk6IHZvaWR9IG9wdF9lcnJvckNhbGxiYWNrIGNhbGxiYWNrIGZvciBl
cnJvcnMuCisgKi8KK3ZhciBsaW5rUHJvZ3JhbSA9IGZ1bmN0aW9uKGdsLCBwcm9ncmFtLCBvcHRf
ZXJyb3JDYWxsYmFjaykgeworICB2YXIgZXJyRm4gPSBvcHRfZXJyb3JDYWxsYmFjayB8fCB0ZXN0
RmFpbGVkOworICAvLyBMaW5rIHRoZSBwcm9ncmFtCisgIGdsLmxpbmtQcm9ncmFtKHByb2dyYW0p
OworCisgIC8vIENoZWNrIHRoZSBsaW5rIHN0YXR1cworICB2YXIgbGlua2VkID0gZ2wuZ2V0UHJv
Z3JhbVBhcmFtZXRlcihwcm9ncmFtLCBnbC5MSU5LX1NUQVRVUyk7CisgIGlmICghbGlua2VkKSB7
CisgICAgLy8gc29tZXRoaW5nIHdlbnQgd3Jvbmcgd2l0aCB0aGUgbGluaworICAgIHZhciBlcnJv
ciA9IGdsLmdldFByb2dyYW1JbmZvTG9nIChwcm9ncmFtKTsKKworICAgIGVyckZuKCJFcnJvciBp
biBwcm9ncmFtIGxpbmtpbmc6IiArIGVycm9yKTsKKworICAgIGdsLmRlbGV0ZVByb2dyYW0ocHJv
Z3JhbSk7CisgIH0KK307CisKKy8qKgorICogTG9hZHMgdGV4dCBmcm9tIGFuIGV4dGVybmFsIGZp
bGUuIFRoaXMgZnVuY3Rpb24gaXMgYXN5bmNocm9ub3VzLgorICogQHBhcmFtIHtzdHJpbmd9IHVy
bCBUaGUgdXJsIG9mIHRoZSBleHRlcm5hbCBmaWxlLgorICogQHBhcmFtIHshZnVuY3Rpb24oYm9v
bCwgc3RyaW5nKTogdm9pZH0gY2FsbGJhY2sgdGhhdCBpcyBzZW50IGEgYm9vbCBmb3IKKyAqICAg
ICBzdWNjZXNzIGFuZCB0aGUgc3RyaW5nLgorICovCit2YXIgbG9hZFRleHRGaWxlQXN5bmMgPSBm
dW5jdGlvbih1cmwsIGNhbGxiYWNrKSB7CisgIGxvZyAoImxvYWRpbmc6ICIgKyB1cmwpOworICB2
YXIgZXJyb3IgPSAnbG9hZFRleHRGaWxlQXN5bmMgZmFpbGVkIHRvIGxvYWQgdXJsICInICsgdXJs
ICsgJyInOworICB2YXIgcmVxdWVzdDsKKyAgaWYgKHdpbmRvdy5YTUxIdHRwUmVxdWVzdCkgewor
ICAgIHJlcXVlc3QgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsKKyAgICBpZiAocmVxdWVzdC5vdmVy
cmlkZU1pbWVUeXBlKSB7CisgICAgICByZXF1ZXN0Lm92ZXJyaWRlTWltZVR5cGUoJ3RleHQvcGxh
aW4nKTsKKyAgICB9CisgIH0gZWxzZSB7CisgICAgdGhyb3cgJ1hNTEh0dHBSZXF1ZXN0IGlzIGRp
c2FibGVkJzsKKyAgfQorICB0cnkgeworICAgIHJlcXVlc3Qub3BlbignR0VUJywgdXJsLCB0cnVl
KTsKKyAgICByZXF1ZXN0Lm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKCkgeworICAgICAg
aWYgKHJlcXVlc3QucmVhZHlTdGF0ZSA9PSA0KSB7CisgICAgICAgIHZhciB0ZXh0ID0gJyc7Cisg
ICAgICAgIC8vIEhUVFAgcmVwb3J0cyBzdWNjZXNzIHdpdGggYSAyMDAgc3RhdHVzLiBUaGUgZmls
ZSBwcm90b2NvbCByZXBvcnRzCisgICAgICAgIC8vIHN1Y2Nlc3Mgd2l0aCB6ZXJvLiBIVFRQIGRv
ZXMgbm90IHVzZSB6ZXJvIGFzIGEgc3RhdHVzIGNvZGUgKHRoZXkKKyAgICAgICAgLy8gc3RhcnQg
YXQgMTAwKS4KKyAgICAgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvRW4vVXNp
bmdfWE1MSHR0cFJlcXVlc3QKKyAgICAgICAgdmFyIHN1Y2Nlc3MgPSByZXF1ZXN0LnN0YXR1cyA9
PSAyMDAgfHwgcmVxdWVzdC5zdGF0dXMgPT0gMDsKKyAgICAgICAgaWYgKHN1Y2Nlc3MpIHsKKyAg
ICAgICAgICB0ZXh0ID0gcmVxdWVzdC5yZXNwb25zZVRleHQ7CisgICAgICAgICAgbG9nKCJjb21w
bGV0ZWQgbG9hZCByZXF1ZXN0OiAiICsgdXJsKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICBsb2coImxvYWRpbmcgIiArIHVybCArICIgcmVzdWx0ZWQgaW4gdW5leHBlY3RlZCBzdGF0dXM6
ICIgKyByZXF1ZXN0LnN0YXR1cyArICIgIiArIHJlcXVlc3Quc3RhdHVzVGV4dCk7CisgICAgICAg
IH0KKyAgICAgICAgY2FsbGJhY2soc3VjY2VzcywgdGV4dCk7CisgICAgICB9CisgICAgfTsKKyAg
ICByZXF1ZXN0Lm9uZXJyb3IgPSBmdW5jdGlvbihlcnJvckV2ZW50KSB7CisgICAgICBsb2coImVy
cm9yIG9jY3VycmVkIGxvYWRpbmcgIiArIHVybCk7CisgICAgICBjYWxsYmFjayhmYWxzZSwgJycp
OworICAgIH07CisgICAgcmVxdWVzdC5zZW5kKG51bGwpOworICB9IGNhdGNoIChlcnIpIHsKKyAg
ICBsb2coImZhaWxlZCB0byBsb2FkOiAiICsgdXJsICsgIiB3aXRoIGV4Y2VwdGlvbiAiICsgZXJy
Lm1lc3NhZ2UpOworICAgIGNhbGxiYWNrKGZhbHNlLCAnJyk7CisgIH0KK307CisKKy8qKgorICog
UmVjdXJzaXZlbHkgbG9hZHMgYSBmaWxlIGFzIGEgbGlzdC4gRWFjaCBsaW5lIGlzIHBhcnNlZCBm
b3IgYSByZWxhdGl2ZQorICogcGF0aC4gSWYgdGhlIGZpbGUgZW5kcyBpbiAudHh0IHRoZSBjb250
ZW50cyBvZiB0aGF0IGZpbGUgaXMgaW5zZXJ0ZWQgaW4KKyAqIHRoZSBsaXN0LgorICoKKyAqIEBw
YXJhbSB7c3RyaW5nfSB1cmwgVGhlIHVybCBvZiB0aGUgZXh0ZXJuYWwgZmlsZS4KKyAqIEBwYXJh
bSB7IWZ1bmN0aW9uKGJvb2wsIEFycmF5PHN0cmluZz4pOiB2b2lkfSBjYWxsYmFjayB0aGF0IGlz
IHNlbnQgYSBib29sCisgKiAgICAgZm9yIHN1Y2Nlc3MgYW5kIHRoZSBhcnJheSBvZiBzdHJpbmdz
LgorICovCit2YXIgZ2V0RmlsZUxpc3RBc3luYyA9IGZ1bmN0aW9uKHVybCwgY2FsbGJhY2spIHsK
KyAgdmFyIGZpbGVzID0gW107CisKKyAgdmFyIGdldEZpbGVMaXN0SW1wbCA9IGZ1bmN0aW9uKHVy
bCwgY2FsbGJhY2spIHsKKyAgICB2YXIgZmlsZXMgPSBbXTsKKyAgICBpZiAodXJsLnN1YnN0cih1
cmwubGVuZ3RoIC0gNCkgPT0gJy50eHQnKSB7CisgICAgICBsb2FkVGV4dEZpbGVBc3luYyh1cmws
IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gZnVuY3Rpb24oc3VjY2VzcywgdGV4dCkgewor
ICAgICAgICAgIGlmICghc3VjY2VzcykgeworICAgICAgICAgICAgY2FsbGJhY2soZmFsc2UsICcn
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICB9CisgICAgICAgICAgdmFyIGxpbmVz
ID0gdGV4dC5zcGxpdCgnXG4nKTsKKyAgICAgICAgICB2YXIgcHJlZml4ID0gJyc7CisgICAgICAg
ICAgdmFyIGxhc3RTbGFzaCA9IHVybC5sYXN0SW5kZXhPZignLycpOworICAgICAgICAgIGlmIChs
YXN0U2xhc2ggPj0gMCkgeworICAgICAgICAgICAgcHJlZml4ID0gdXJsLnN1YnN0cigwLCBsYXN0
U2xhc2ggKyAxKTsKKyAgICAgICAgICB9CisgICAgICAgICAgdmFyIGZhaWwgPSBmYWxzZTsKKyAg
ICAgICAgICB2YXIgY291bnQgPSAxOworICAgICAgICAgIHZhciBpbmRleCA9IDA7CisgICAgICAg
ICAgZm9yICh2YXIgaWkgPSAwOyBpaSA8IGxpbmVzLmxlbmd0aDsgKytpaSkgeworICAgICAgICAg
ICAgdmFyIHN0ciA9IGxpbmVzW2lpXS5yZXBsYWNlKC9eXHNccyovLCAnJykucmVwbGFjZSgvXHNc
cyokLywgJycpOworICAgICAgICAgICAgaWYgKHN0ci5sZW5ndGggPiA0ICYmCisgICAgICAgICAg
ICAgICAgc3RyWzBdICE9ICcjJyAmJgorICAgICAgICAgICAgICAgIHN0clswXSAhPSAiOyIgJiYK
KyAgICAgICAgICAgICAgICBzdHIuc3Vic3RyKDAsIDIpICE9ICIvLyIpIHsKKyAgICAgICAgICAg
ICAgdmFyIG5hbWVzID0gc3RyLnNwbGl0KC8gKy8pOworICAgICAgICAgICAgICB2YXIgbmV3X3Vy
bCA9IHByZWZpeCArIHN0cjsKKyAgICAgICAgICAgICAgaWYgKG5hbWVzLmxlbmd0aCA9PSAxKSB7
CisgICAgICAgICAgICAgICAgbmV3X3VybCA9IHByZWZpeCArIHN0cjsKKyAgICAgICAgICAgICAg
ICArK2NvdW50OworICAgICAgICAgICAgICAgIGdldEZpbGVMaXN0SW1wbChuZXdfdXJsLCBmdW5j
dGlvbihpbmRleCkgeworICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKHN1Y2Nlc3Ms
IG5ld19maWxlcykgeworICAgICAgICAgICAgICAgICAgICBsb2coImdvdCBmaWxlczogIiArIG5l
d19maWxlcy5sZW5ndGgpOworICAgICAgICAgICAgICAgICAgICBpZiAoc3VjY2VzcykgeworICAg
ICAgICAgICAgICAgICAgICAgIGZpbGVzW2luZGV4XSA9IG5ld19maWxlczsKKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBmaW5pc2goc3VjY2Vzcyk7CisgICAgICAg
ICAgICAgICAgICB9OworICAgICAgICAgICAgICAgIH0oaW5kZXgrKykpOworICAgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHZhciBzID0gIiI7CisgICAgICAgICAgICAgICAg
dmFyIHAgPSAiIjsKKyAgICAgICAgICAgICAgICBmb3IgKHZhciBqaiA9IDA7IGpqIDwgbmFtZXMu
bGVuZ3RoOyArK2pqKSB7CisgICAgICAgICAgICAgICAgICBzICs9IHAgKyBwcmVmaXggKyBuYW1l
c1tqal07CisgICAgICAgICAgICAgICAgICBwID0gIiAiOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBmaWxlc1tpbmRleCsrXSA9IHM7CisgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgICAgZmluaXNoKHRydWUpOworCisgICAgICAg
ICAgZnVuY3Rpb24gZmluaXNoKHN1Y2Nlc3MpIHsKKyAgICAgICAgICAgIGlmICghc3VjY2Vzcykg
eworICAgICAgICAgICAgICBmYWlsID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IC0tY291bnQ7CisgICAgICAgICAgICBsb2coImNvdW50OiAiICsgY291bnQpOworICAgICAgICAg
ICAgaWYgKCFjb3VudCkgeworICAgICAgICAgICAgICBjYWxsYmFjayghZmFpbCwgZmlsZXMpOwor
ICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfSgpKTsKKworICAg
IH0gZWxzZSB7CisgICAgICBmaWxlcy5wdXNoKHVybCk7CisgICAgICBjYWxsYmFjayh0cnVlLCBm
aWxlcyk7CisgICAgfQorICB9OworCisgIGdldEZpbGVMaXN0SW1wbCh1cmwsIGZ1bmN0aW9uKHN1
Y2Nlc3MsIGZpbGVzKSB7CisgICAgLy8gZmxhdHRlbgorICAgIHZhciBmbGF0ID0gW107CisgICAg
ZmxhdHRlbihmaWxlcyk7CisgICAgZnVuY3Rpb24gZmxhdHRlbihmaWxlcykgeworICAgICAgZm9y
ICh2YXIgaWkgPSAwOyBpaSA8IGZpbGVzLmxlbmd0aDsgKytpaSkgeworICAgICAgICB2YXIgdmFs
dWUgPSBmaWxlc1tpaV07CisgICAgICAgIGlmICh0eXBlb2YodmFsdWUpID09ICJzdHJpbmciKSB7
CisgICAgICAgICAgZmxhdC5wdXNoKHZhbHVlKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICBmbGF0dGVuKHZhbHVlKTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgICBjYWxsYmFj
ayhzdWNjZXNzLCBmbGF0KTsKKyAgfSk7Cit9OworCisvKioKKyAqIEdldHMgYSBmaWxlIGZyb20g
YSBmaWxlL1VSTC4KKyAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlIHRoZSBVUkwgb2YgdGhlIGZpbGUg
dG8gZ2V0LgorICogQHJldHVybiB7c3RyaW5nfSBUaGUgY29udGVudHMgb2YgdGhlIGZpbGUuCisg
Ki8KK3ZhciByZWFkRmlsZSA9IGZ1bmN0aW9uKGZpbGUpIHsKKyAgdmFyIHhociA9IG5ldyBYTUxI
dHRwUmVxdWVzdCgpOworICB4aHIub3BlbigiR0VUIiwgZmlsZSwgZmFsc2UpOworICB4aHIub3Zl
cnJpZGVNaW1lVHlwZSgidGV4dC9wbGFpbiIpOworICB4aHIuc2VuZCgpOworICByZXR1cm4geGhy
LnJlc3BvbnNlVGV4dC5yZXBsYWNlKC9cci9nLCAiIik7Cit9OworCit2YXIgcmVhZEZpbGVMaXN0
ID0gZnVuY3Rpb24odXJsKSB7CisgIHZhciBmaWxlcyA9IFtdOworICBpZiAodXJsLnN1YnN0cih1
cmwubGVuZ3RoIC0gNCkgPT0gJy50eHQnKSB7CisgICAgdmFyIGxpbmVzID0gcmVhZEZpbGUodXJs
KS5zcGxpdCgnXG4nKTsKKyAgICB2YXIgcHJlZml4ID0gJyc7CisgICAgdmFyIGxhc3RTbGFzaCA9
IHVybC5sYXN0SW5kZXhPZignLycpOworICAgIGlmIChsYXN0U2xhc2ggPj0gMCkgeworICAgICAg
cHJlZml4ID0gdXJsLnN1YnN0cigwLCBsYXN0U2xhc2ggKyAxKTsKKyAgICB9CisgICAgZm9yICh2
YXIgaWkgPSAwOyBpaSA8IGxpbmVzLmxlbmd0aDsgKytpaSkgeworICAgICAgdmFyIHN0ciA9IGxp
bmVzW2lpXS5yZXBsYWNlKC9eXHNccyovLCAnJykucmVwbGFjZSgvXHNccyokLywgJycpOworICAg
ICAgaWYgKHN0ci5sZW5ndGggPiA0ICYmCisgICAgICAgICAgc3RyWzBdICE9ICcjJyAmJgorICAg
ICAgICAgIHN0clswXSAhPSAiOyIgJiYKKyAgICAgICAgICBzdHIuc3Vic3RyKDAsIDIpICE9ICIv
LyIpIHsKKyAgICAgICAgdmFyIG5hbWVzID0gc3RyLnNwbGl0KC8gKy8pOworICAgICAgICBpZiAo
bmFtZXMubGVuZ3RoID09IDEpIHsKKyAgICAgICAgICB2YXIgbmV3X3VybCA9IHByZWZpeCArIHN0
cjsKKyAgICAgICAgICBmaWxlcyA9IGZpbGVzLmNvbmNhdChyZWFkRmlsZUxpc3QobmV3X3VybCkp
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIHZhciBzID0gIiI7CisgICAgICAgICAgdmFy
IHAgPSAiIjsKKyAgICAgICAgICBmb3IgKHZhciBqaiA9IDA7IGpqIDwgbmFtZXMubGVuZ3RoOyAr
K2pqKSB7CisgICAgICAgICAgICBzICs9IHAgKyBwcmVmaXggKyBuYW1lc1tqal07CisgICAgICAg
ICAgICBwID0gIiAiOworICAgICAgICAgIH0KKyAgICAgICAgICBmaWxlcy5wdXNoKHMpOworICAg
ICAgICB9CisgICAgICB9CisgICAgfQorICB9IGVsc2UgeworICAgIGZpbGVzLnB1c2godXJsKTsK
KyAgfQorICByZXR1cm4gZmlsZXM7Cit9OworCisvKioKKyAqIExvYWRzIGEgc2hhZGVyLgorICog
QHBhcmFtIHshV2ViR0xSZW5kZXJpbmdDb250ZXh0fSBnbCBUaGUgV2ViR0xSZW5kZXJpbmdDb250
ZXh0IHRvIHVzZS4KKyAqIEBwYXJhbSB7c3RyaW5nfSBzaGFkZXJTb3VyY2UgVGhlIHNoYWRlciBz
b3VyY2UuCisgKiBAcGFyYW0ge251bWJlcn0gc2hhZGVyVHlwZSBUaGUgdHlwZSBvZiBzaGFkZXIu
CisgKiBAcGFyYW0ge2Z1bmN0aW9uKHN0cmluZyk6IHZvaWR9IG9wdF9lcnJvckNhbGxiYWNrIGNh
bGxiYWNrIGZvciBlcnJvcnMuCisgKiBAcGFyYW0ge2Jvb2xlYW59IG9wdF9sb2dTaGFkZXJzIFdo
ZXRoZXIgdG8gbG9nIHNoYWRlciBzb3VyY2UuCisgKiBAcGFyYW0ge3N0cmluZ30gb3B0X3NoYWRl
ckxhYmVsIExhYmVsIHRoYXQgaWRlbnRpZmllcyB0aGUgc2hhZGVyIHNvdXJjZSBpbgorICogICAg
IHRoZSBsb2cuCisgKiBAcGFyYW0ge3N0cmluZ30gb3B0X3VybCBVUkwgZnJvbSB3aGVyZSB0aGUg
c2hhZGVyIHNvdXJjZSB3YXMgbG9hZGVkIGZyb20uCisgKiAgICAgSWYgb3B0X2xvZ1NoYWRlcnMg
aXMgc2V0LCB0aGVuIGEgbGluayB0byB0aGUgc291cmNlIGZpbGUgd2lsbCBhbHNvIGJlCisgKiAg
ICAgYWRkZWQuCisgKiBAcGFyYW0ge2Jvb2xlYW59IFNraXAgY29tcGlsYXRpb24gc3RhdHVzIGNo
ZWNrLiBEZWZhdWx0ID0gZmFsc2UuCisgKiBAcmV0dXJuIHshV2ViR0xTaGFkZXJ9IFRoZSBjcmVh
dGVkIHNoYWRlci4KKyAqLwordmFyIGxvYWRTaGFkZXIgPSBmdW5jdGlvbigKKyAgICBnbCwgc2hh
ZGVyU291cmNlLCBzaGFkZXJUeXBlLCBvcHRfZXJyb3JDYWxsYmFjaywgb3B0X2xvZ1NoYWRlcnMs
CisgICAgb3B0X3NoYWRlckxhYmVsLCBvcHRfdXJsLCBvcHRfc2tpcENvbXBpbGVTdGF0dXMpIHsK
KyAgdmFyIGVyckZuID0gb3B0X2Vycm9yQ2FsbGJhY2sgfHwgZXJyb3I7CisgIC8vIENyZWF0ZSB0
aGUgc2hhZGVyIG9iamVjdAorICB2YXIgc2hhZGVyID0gZ2wuY3JlYXRlU2hhZGVyKHNoYWRlclR5
cGUpOworICBpZiAoc2hhZGVyID09IG51bGwpIHsKKyAgICBlcnJGbigiKioqIEVycm9yOiB1bmFi
bGUgdG8gY3JlYXRlIHNoYWRlciAnIitzaGFkZXJTb3VyY2UrIiciKTsKKyAgICByZXR1cm4gbnVs
bDsKKyAgfQorCisgIC8vIExvYWQgdGhlIHNoYWRlciBzb3VyY2UKKyAgZ2wuc2hhZGVyU291cmNl
KHNoYWRlciwgc2hhZGVyU291cmNlKTsKKworICAvLyBDb21waWxlIHRoZSBzaGFkZXIKKyAgZ2wu
Y29tcGlsZVNoYWRlcihzaGFkZXIpOworCisgIGlmIChvcHRfbG9nU2hhZGVycykgeworICAgIHZh
ciBsYWJlbCA9IHNoYWRlclR5cGUgPT0gZ2wuVkVSVEVYX1NIQURFUiA/ICd2ZXJ0ZXggc2hhZGVy
JyA6ICdmcmFnbWVudF9zaGFkZXInOworICAgIGlmIChvcHRfc2hhZGVyTGFiZWwpIHsKKyAgICAg
IGxhYmVsID0gb3B0X3NoYWRlckxhYmVsICsgJyAnICsgbGFiZWw7CisgICAgfQorICAgIGFkZFNo
YWRlclNvdXJjZXMoCisgICAgICAgIGdsLCBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29uc29s
ZScpLCBsYWJlbCwgc2hhZGVyLCBzaGFkZXJTb3VyY2UsIG9wdF91cmwpOworICB9CisKKyAgLy8g
Q2hlY2sgdGhlIGNvbXBpbGUgc3RhdHVzCisgIGlmICghb3B0X3NraXBDb21waWxlU3RhdHVzKSB7
CisgICAgdmFyIGNvbXBpbGVkID0gZ2wuZ2V0U2hhZGVyUGFyYW1ldGVyKHNoYWRlciwgZ2wuQ09N
UElMRV9TVEFUVVMpOworICAgIGlmICghY29tcGlsZWQpIHsKKyAgICAgIC8vIFNvbWV0aGluZyB3
ZW50IHdyb25nIGR1cmluZyBjb21waWxhdGlvbjsgZ2V0IHRoZSBlcnJvcgorICAgICAgbGFzdEVy
cm9yID0gZ2wuZ2V0U2hhZGVySW5mb0xvZyhzaGFkZXIpOworICAgICAgZXJyRm4oIioqKiBFcnJv
ciBjb21waWxpbmcgIiArIGdsRW51bVRvU3RyaW5nKGdsLCBzaGFkZXJUeXBlKSArICIgJyIgKyBz
aGFkZXIgKyAiJzoiICsgbGFzdEVycm9yKTsKKyAgICAgIGdsLmRlbGV0ZVNoYWRlcihzaGFkZXIp
OworICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorICB9CisKKyAgcmV0dXJuIHNoYWRlcjsKK30K
KworLyoqCisgKiBMb2FkcyBhIHNoYWRlciBmcm9tIGEgVVJMLgorICogQHBhcmFtIHshV2ViR0xS
ZW5kZXJpbmdDb250ZXh0fSBnbCBUaGUgV2ViR0xSZW5kZXJpbmdDb250ZXh0IHRvIHVzZS4KKyAq
IEBwYXJhbSB7ZmlsZX0gZmlsZSBUaGUgVVJMIG9mIHRoZSBzaGFkZXIgc291cmNlLgorICogQHBh
cmFtIHtudW1iZXJ9IHR5cGUgVGhlIHR5cGUgb2Ygc2hhZGVyLgorICogQHBhcmFtIHtmdW5jdGlv
bihzdHJpbmcpOiB2b2lkfSBvcHRfZXJyb3JDYWxsYmFjayBjYWxsYmFjayBmb3IgZXJyb3JzLgor
ICogQHBhcmFtIHtib29sZWFufSBvcHRfbG9nU2hhZGVycyBXaGV0aGVyIHRvIGxvZyBzaGFkZXIg
c291cmNlLgorICogQHBhcmFtIHtib29sZWFufSBTa2lwIGNvbXBpbGF0aW9uIHN0YXR1cyBjaGVj
ay4gRGVmYXVsdCA9IGZhbHNlLgorICogQHJldHVybiB7IVdlYkdMU2hhZGVyfSBUaGUgY3JlYXRl
ZCBzaGFkZXIuCisgKi8KK3ZhciBsb2FkU2hhZGVyRnJvbUZpbGUgPSBmdW5jdGlvbigKKyAgICBn
bCwgZmlsZSwgdHlwZSwgb3B0X2Vycm9yQ2FsbGJhY2ssIG9wdF9sb2dTaGFkZXJzLCBvcHRfc2tp
cENvbXBpbGVTdGF0dXMpIHsKKyAgdmFyIHNoYWRlclNvdXJjZSA9IHJlYWRGaWxlKGZpbGUpOwor
ICByZXR1cm4gbG9hZFNoYWRlcihnbCwgc2hhZGVyU291cmNlLCB0eXBlLCBvcHRfZXJyb3JDYWxs
YmFjaywKKyAgICAgIG9wdF9sb2dTaGFkZXJzLCB1bmRlZmluZWQsIGZpbGUsIG9wdF9za2lwQ29t
cGlsZVN0YXR1cyk7Cit9OworCit2YXIgbG9hZFNoYWRlckZyb21GaWxlQXN5bmMgPSBmdW5jdGlv
bigKKyAgICBnbCwgZmlsZSwgdHlwZSwgb3B0X2Vycm9yQ2FsbGJhY2ssIG9wdF9sb2dTaGFkZXJz
LCBvcHRfc2tpcENvbXBpbGVTdGF0dXMsIGNhbGxiYWNrKSB7CisgIGxvYWRUZXh0RmlsZUFzeW5j
KGZpbGUsIGZ1bmN0aW9uKGdsLCB0eXBlLCBvcHRfZXJyb3JDYWxsYmFjaywgb3B0X2xvZ1NoYWRl
cnMsIGZpbGUsIG9wdF9za2lwQ29tcGlsZVN0YXR1cyl7CisgICAgICByZXR1cm4gZnVuY3Rpb24o
c3VjY2Vzcywgc2hhZGVyU291cmNlKSB7CisgICAgICAgIGlmIChzdWNjZXNzKSB7CisgICAgICAg
ICAgdmFyIHNoYWRlciA9IGxvYWRTaGFkZXIoZ2wsIHNoYWRlclNvdXJjZSwgdHlwZSwgb3B0X2Vy
cm9yQ2FsbGJhY2ssCisgICAgICAgICAgICAgIG9wdF9sb2dTaGFkZXJzLCB1bmRlZmluZWQsIGZp
bGUsIG9wdF9za2lwQ29tcGlsZVN0YXR1cyk7CisgICAgICAgICAgY2FsbGJhY2sodHJ1ZSwgc2hh
ZGVyKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBjYWxsYmFjayhmYWxzZSwgbnVsbCk7
CisgICAgICAgIH0KKyAgICAgIH0KKyAgfShnbCwgdHlwZSwgb3B0X2Vycm9yQ2FsbGJhY2ssIG9w
dF9sb2dTaGFkZXJzLCBmaWxlLCBvcHRfc2tpcENvbXBpbGVTdGF0dXMpKTsKK307CisKKy8qKgor
ICogR2V0cyB0aGUgY29udGVudCBvZiBzY3JpcHQuCisgKiBAcGFyYW0ge3N0cmluZ30gc2NyaXB0
SWQgVGhlIGlkIG9mIHRoZSBzY3JpcHQgdGFnLgorICogQHJldHVybiB7c3RyaW5nfSBUaGUgY29u
dGVudCBvZiB0aGUgc2NyaXB0LgorICovCit2YXIgZ2V0U2NyaXB0ID0gZnVuY3Rpb24oc2NyaXB0
SWQpIHsKKyAgdmFyIHNoYWRlclNjcmlwdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHNjcmlw
dElkKTsKKyAgaWYgKCFzaGFkZXJTY3JpcHQpIHsKKyAgICB0aHJvdygiKioqIEVycm9yOiB1bmtu
b3duIHNjcmlwdCBlbGVtZW50ICIgKyBzY3JpcHRJZCk7CisgIH0KKyAgcmV0dXJuIHNoYWRlclNj
cmlwdC50ZXh0OworfTsKKworLyoqCisgKiBMb2FkcyBhIHNoYWRlciBmcm9tIGEgc2NyaXB0IHRh
Zy4KKyAqIEBwYXJhbSB7IVdlYkdMUmVuZGVyaW5nQ29udGV4dH0gZ2wgVGhlIFdlYkdMUmVuZGVy
aW5nQ29udGV4dCB0byB1c2UuCisgKiBAcGFyYW0ge3N0cmluZ30gc2NyaXB0SWQgVGhlIGlkIG9m
IHRoZSBzY3JpcHQgdGFnLgorICogQHBhcmFtIHtudW1iZXJ9IG9wdF9zaGFkZXJUeXBlIFRoZSB0
eXBlIG9mIHNoYWRlci4gSWYgbm90IHBhc3NlZCBpbiBpdCB3aWxsCisgKiAgICAgYmUgZGVyaXZl
ZCBmcm9tIHRoZSB0eXBlIG9mIHRoZSBzY3JpcHQgdGFnLgorICogQHBhcmFtIHtmdW5jdGlvbihz
dHJpbmcpOiB2b2lkfSBvcHRfZXJyb3JDYWxsYmFjayBjYWxsYmFjayBmb3IgZXJyb3JzLgorICog
QHBhcmFtIHtib29sZWFufSBvcHRfbG9nU2hhZGVycyBXaGV0aGVyIHRvIGxvZyBzaGFkZXIgc291
cmNlLgorICogQHBhcmFtIHtib29sZWFufSBTa2lwIGNvbXBpbGF0aW9uIHN0YXR1cyBjaGVjay4g
RGVmYXVsdCA9IGZhbHNlLgorICogQHJldHVybiB7IVdlYkdMU2hhZGVyfSBUaGUgY3JlYXRlZCBz
aGFkZXIuCisgKi8KK3ZhciBsb2FkU2hhZGVyRnJvbVNjcmlwdCA9IGZ1bmN0aW9uKAorICAgIGds
LCBzY3JpcHRJZCwgb3B0X3NoYWRlclR5cGUsIG9wdF9lcnJvckNhbGxiYWNrLCBvcHRfbG9nU2hh
ZGVycywgb3B0X3NraXBDb21waWxlU3RhdHVzKSB7CisgIHZhciBzaGFkZXJTb3VyY2UgPSAiIjsK
KyAgdmFyIHNoYWRlclNjcmlwdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHNjcmlwdElkKTsK
KyAgaWYgKCFzaGFkZXJTY3JpcHQpIHsKKyAgICB0aHJvdygiKioqIEVycm9yOiB1bmtub3duIHNj
cmlwdCBlbGVtZW50ICIgKyBzY3JpcHRJZCk7CisgIH0KKyAgc2hhZGVyU291cmNlID0gc2hhZGVy
U2NyaXB0LnRleHQudHJpbSgpOworCisgIGlmICghb3B0X3NoYWRlclR5cGUpIHsKKyAgICBpZiAo
c2hhZGVyU2NyaXB0LnR5cGUgPT0gIngtc2hhZGVyL3gtdmVydGV4IikgeworICAgICAgb3B0X3No
YWRlclR5cGUgPSBnbC5WRVJURVhfU0hBREVSOworICAgIH0gZWxzZSBpZiAoc2hhZGVyU2NyaXB0
LnR5cGUgPT0gIngtc2hhZGVyL3gtZnJhZ21lbnQiKSB7CisgICAgICBvcHRfc2hhZGVyVHlwZSA9
IGdsLkZSQUdNRU5UX1NIQURFUjsKKyAgICB9IGVsc2UgeworICAgICAgdGhyb3coIioqKiBFcnJv
cjogdW5rbm93biBzaGFkZXIgdHlwZSIpOworICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorICB9
CisKKyAgcmV0dXJuIGxvYWRTaGFkZXIoZ2wsIHNoYWRlclNvdXJjZSwgb3B0X3NoYWRlclR5cGUs
IG9wdF9lcnJvckNhbGxiYWNrLAorICAgICAgb3B0X2xvZ1NoYWRlcnMsIHVuZGVmaW5lZCwgdW5k
ZWZpbmVkLCBvcHRfc2tpcENvbXBpbGVTdGF0dXMpOworfTsKKwordmFyIGxvYWRTdGFuZGFyZFBy
b2dyYW0gPSBmdW5jdGlvbihnbCkgeworICB2YXIgcHJvZ3JhbSA9IGdsLmNyZWF0ZVByb2dyYW0o
KTsKKyAgZ2wuYXR0YWNoU2hhZGVyKHByb2dyYW0sIGxvYWRTdGFuZGFyZFZlcnRleFNoYWRlcihn
bCkpOworICBnbC5hdHRhY2hTaGFkZXIocHJvZ3JhbSwgbG9hZFN0YW5kYXJkRnJhZ21lbnRTaGFk
ZXIoZ2wpKTsKKyAgZ2wuYmluZEF0dHJpYkxvY2F0aW9uKHByb2dyYW0sIDAsICJhX3ZlcnRleCIp
OworICBnbC5iaW5kQXR0cmliTG9jYXRpb24ocHJvZ3JhbSwgMSwgImFfbm9ybWFsIik7CisgIGxp
bmtQcm9ncmFtKGdsLCBwcm9ncmFtKTsKKyAgcmV0dXJuIHByb2dyYW07Cit9OworCit2YXIgbG9h
ZFN0YW5kYXJkUHJvZ3JhbUFzeW5jID0gZnVuY3Rpb24oZ2wsIGNhbGxiYWNrKSB7CisgIGxvYWRT
dGFuZGFyZFZlcnRleFNoYWRlckFzeW5jKGdsLCBmdW5jdGlvbihnbCkgeworICAgIHJldHVybiBm
dW5jdGlvbihzdWNjZXNzLCB2cykgeworICAgICAgaWYgKHN1Y2Nlc3MpIHsKKyAgICAgICAgbG9h
ZFN0YW5kYXJkRnJhZ21lbnRTaGFkZXJBc3luYyhnbCwgZnVuY3Rpb24odnMpIHsKKyAgICAgICAg
ICByZXR1cm4gZnVuY3Rpb24oc3VjY2VzcywgZnMpIHsKKyAgICAgICAgICAgIGlmIChzdWNjZXNz
KSB7CisgICAgICAgICAgICAgIHZhciBwcm9ncmFtID0gZ2wuY3JlYXRlUHJvZ3JhbSgpOworICAg
ICAgICAgICAgICBnbC5hdHRhY2hTaGFkZXIocHJvZ3JhbSwgdnMpOworICAgICAgICAgICAgICBn
bC5hdHRhY2hTaGFkZXIocHJvZ3JhbSwgZnMpOworICAgICAgICAgICAgICBnbC5iaW5kQXR0cmli
TG9jYXRpb24ocHJvZ3JhbSwgMCwgImFfdmVydGV4Iik7CisgICAgICAgICAgICAgIGdsLmJpbmRB
dHRyaWJMb2NhdGlvbihwcm9ncmFtLCAxLCAiYV9ub3JtYWwiKTsKKyAgICAgICAgICAgICAgbGlu
a1Byb2dyYW0oZ2wsIHByb2dyYW0pOworICAgICAgICAgICAgICBjYWxsYmFjayh0cnVlLCBwcm9n
cmFtKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgIGNhbGxiYWNrKGZhbHNl
LCBudWxsKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9OworICAgICAgICB9KHZzKSk7Cisg
ICAgICB9IGVsc2UgeworICAgICAgICBjYWxsYmFjayhmYWxzZSwgbnVsbCk7CisgICAgICB9Cisg
ICAgfTsKKyAgfShnbCkpOworfTsKKworLyoqCisgKiBMb2FkcyBzaGFkZXJzIGZyb20gZmlsZXMs
IGNyZWF0ZXMgYSBwcm9ncmFtLCBhdHRhY2hlcyB0aGUgc2hhZGVycyBhbmQgbGlua3MuCisgKiBA
cGFyYW0geyFXZWJHTFJlbmRlcmluZ0NvbnRleHR9IGdsIFRoZSBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQgdG8gdXNlLgorICogQHBhcmFtIHtzdHJpbmd9IHZlcnRleFNoYWRlclBhdGggVGhlIFVSTCBv
ZiB0aGUgdmVydGV4IHNoYWRlci4KKyAqIEBwYXJhbSB7c3RyaW5nfSBmcmFnbWVudFNoYWRlclBh
dGggVGhlIFVSTCBvZiB0aGUgZnJhZ21lbnQgc2hhZGVyLgorICogQHBhcmFtIHtmdW5jdGlvbihz
dHJpbmcpOiB2b2lkfSBvcHRfZXJyb3JDYWxsYmFjayBjYWxsYmFjayBmb3IgZXJyb3JzLgorICog
QHJldHVybiB7IVdlYkdMUHJvZ3JhbX0gVGhlIGNyZWF0ZWQgcHJvZ3JhbS4KKyAqLwordmFyIGxv
YWRQcm9ncmFtRnJvbUZpbGUgPSBmdW5jdGlvbigKKyAgICBnbCwgdmVydGV4U2hhZGVyUGF0aCwg
ZnJhZ21lbnRTaGFkZXJQYXRoLCBvcHRfZXJyb3JDYWxsYmFjaykgeworICB2YXIgcHJvZ3JhbSA9
IGdsLmNyZWF0ZVByb2dyYW0oKTsKKyAgdmFyIHZzID0gbG9hZFNoYWRlckZyb21GaWxlKAorICAg
ICAgZ2wsIHZlcnRleFNoYWRlclBhdGgsIGdsLlZFUlRFWF9TSEFERVIsIG9wdF9lcnJvckNhbGxi
YWNrKTsKKyAgdmFyIGZzID0gbG9hZFNoYWRlckZyb21GaWxlKAorICAgICAgZ2wsIGZyYWdtZW50
U2hhZGVyUGF0aCwgZ2wuRlJBR01FTlRfU0hBREVSLCBvcHRfZXJyb3JDYWxsYmFjayk7CisgIGlm
ICh2cyAmJiBmcykgeworICAgIGdsLmF0dGFjaFNoYWRlcihwcm9ncmFtLCB2cyk7CisgICAgZ2wu
YXR0YWNoU2hhZGVyKHByb2dyYW0sIGZzKTsKKyAgICBsaW5rUHJvZ3JhbShnbCwgcHJvZ3JhbSwg
b3B0X2Vycm9yQ2FsbGJhY2spOworICB9CisgIGlmICh2cykgeworICAgIGdsLmRlbGV0ZVNoYWRl
cih2cyk7CisgIH0KKyAgaWYgKGZzKSB7CisgICAgZ2wuZGVsZXRlU2hhZGVyKGZzKTsKKyAgfQor
ICByZXR1cm4gcHJvZ3JhbTsKK307CisKKy8qKgorICogTG9hZHMgc2hhZGVycyBmcm9tIHNjcmlw
dCB0YWdzLCBjcmVhdGVzIGEgcHJvZ3JhbSwgYXR0YWNoZXMgdGhlIHNoYWRlcnMgYW5kCisgKiBs
aW5rcy4KKyAqIEBwYXJhbSB7IVdlYkdMUmVuZGVyaW5nQ29udGV4dH0gZ2wgVGhlIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dCB0byB1c2UuCisgKiBAcGFyYW0ge3N0cmluZ30gdmVydGV4U2NyaXB0SWQg
VGhlIGlkIG9mIHRoZSBzY3JpcHQgdGFnIHRoYXQgY29udGFpbnMgdGhlCisgKiAgICAgICAgdmVy
dGV4IHNoYWRlci4KKyAqIEBwYXJhbSB7c3RyaW5nfSBmcmFnbWVudFNjcmlwdElkIFRoZSBpZCBv
ZiB0aGUgc2NyaXB0IHRhZyB0aGF0IGNvbnRhaW5zIHRoZQorICogICAgICAgIGZyYWdtZW50IHNo
YWRlci4KKyAqIEBwYXJhbSB7ZnVuY3Rpb24oc3RyaW5nKTogdm9pZH0gb3B0X2Vycm9yQ2FsbGJh
Y2sgY2FsbGJhY2sgZm9yIGVycm9ycy4KKyAqIEByZXR1cm4geyFXZWJHTFByb2dyYW19IFRoZSBj
cmVhdGVkIHByb2dyYW0uCisgKi8KK3ZhciBsb2FkUHJvZ3JhbUZyb21TY3JpcHQgPSBmdW5jdGlv
biBsb2FkUHJvZ3JhbUZyb21TY3JpcHQoCisgICAgZ2wsIHZlcnRleFNjcmlwdElkLCBmcmFnbWVu
dFNjcmlwdElkLCBvcHRfZXJyb3JDYWxsYmFjaykgeworICB2YXIgcHJvZ3JhbSA9IGdsLmNyZWF0
ZVByb2dyYW0oKTsKKyAgZ2wuYXR0YWNoU2hhZGVyKAorICAgICAgcHJvZ3JhbSwKKyAgICAgIGxv
YWRTaGFkZXJGcm9tU2NyaXB0KAorICAgICAgICAgIGdsLCB2ZXJ0ZXhTY3JpcHRJZCwgZ2wuVkVS
VEVYX1NIQURFUiwgb3B0X2Vycm9yQ2FsbGJhY2spKTsKKyAgZ2wuYXR0YWNoU2hhZGVyKAorICAg
ICAgcHJvZ3JhbSwKKyAgICAgIGxvYWRTaGFkZXJGcm9tU2NyaXB0KAorICAgICAgICAgIGdsLCBm
cmFnbWVudFNjcmlwdElkLCAgZ2wuRlJBR01FTlRfU0hBREVSLCBvcHRfZXJyb3JDYWxsYmFjaykp
OworICBsaW5rUHJvZ3JhbShnbCwgcHJvZ3JhbSwgb3B0X2Vycm9yQ2FsbGJhY2spOworICByZXR1
cm4gcHJvZ3JhbTsKK307CisKKy8qKgorICogTG9hZHMgc2hhZGVycyBmcm9tIHNvdXJjZSwgY3Jl
YXRlcyBhIHByb2dyYW0sIGF0dGFjaGVzIHRoZSBzaGFkZXJzIGFuZAorICogbGlua3MuCisgKiBA
cGFyYW0geyFXZWJHTFJlbmRlcmluZ0NvbnRleHR9IGdsIFRoZSBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQgdG8gdXNlLgorICogQHBhcmFtIHshV2ViR0xTaGFkZXJ9IHZlcnRleFNoYWRlciBUaGUgdmVy
dGV4IHNoYWRlci4KKyAqIEBwYXJhbSB7IVdlYkdMU2hhZGVyfSBmcmFnbWVudFNoYWRlciBUaGUg
ZnJhZ21lbnQgc2hhZGVyLgorICogQHBhcmFtIHtmdW5jdGlvbihzdHJpbmcpOiB2b2lkfSBvcHRf
ZXJyb3JDYWxsYmFjayBjYWxsYmFjayBmb3IgZXJyb3JzLgorICogQHJldHVybiB7IVdlYkdMUHJv
Z3JhbX0gVGhlIGNyZWF0ZWQgcHJvZ3JhbS4KKyAqLwordmFyIGNyZWF0ZVByb2dyYW0gPSBmdW5j
dGlvbihnbCwgdmVydGV4U2hhZGVyLCBmcmFnbWVudFNoYWRlciwgb3B0X2Vycm9yQ2FsbGJhY2sp
IHsKKyAgdmFyIHByb2dyYW0gPSBnbC5jcmVhdGVQcm9ncmFtKCk7CisgIGdsLmF0dGFjaFNoYWRl
cihwcm9ncmFtLCB2ZXJ0ZXhTaGFkZXIpOworICBnbC5hdHRhY2hTaGFkZXIocHJvZ3JhbSwgZnJh
Z21lbnRTaGFkZXIpOworICBsaW5rUHJvZ3JhbShnbCwgcHJvZ3JhbSwgb3B0X2Vycm9yQ2FsbGJh
Y2spOworICByZXR1cm4gcHJvZ3JhbTsKK307CisKKy8qKgorICogTG9hZHMgc2hhZGVycyBmcm9t
IHNvdXJjZSwgY3JlYXRlcyBhIHByb2dyYW0sIGF0dGFjaGVzIHRoZSBzaGFkZXJzIGFuZAorICog
bGlua3MuCisgKiBAcGFyYW0geyFXZWJHTFJlbmRlcmluZ0NvbnRleHR9IGdsIFRoZSBXZWJHTFJl
bmRlcmluZ0NvbnRleHQgdG8gdXNlLgorICogQHBhcmFtIHtzdHJpbmd9IHZlcnRleFNoYWRlciBU
aGUgdmVydGV4IHNoYWRlciBzb3VyY2UuCisgKiBAcGFyYW0ge3N0cmluZ30gZnJhZ21lbnRTaGFk
ZXIgVGhlIGZyYWdtZW50IHNoYWRlciBzb3VyY2UuCisgKiBAcGFyYW0ge2Z1bmN0aW9uKHN0cmlu
Zyk6IHZvaWR9IG9wdF9lcnJvckNhbGxiYWNrIGNhbGxiYWNrIGZvciBlcnJvcnMuCisgKiBAcGFy
YW0ge2Jvb2xlYW59IG9wdF9sb2dTaGFkZXJzIFdoZXRoZXIgdG8gbG9nIHNoYWRlciBzb3VyY2Uu
CisgKiBAcmV0dXJuIHshV2ViR0xQcm9ncmFtfSBUaGUgY3JlYXRlZCBwcm9ncmFtLgorICovCit2
YXIgbG9hZFByb2dyYW0gPSBmdW5jdGlvbigKKyAgICBnbCwgdmVydGV4U2hhZGVyLCBmcmFnbWVu
dFNoYWRlciwgb3B0X2Vycm9yQ2FsbGJhY2ssIG9wdF9sb2dTaGFkZXJzKSB7CisgIHZhciBwcm9n
cmFtOworICB2YXIgdnMgPSBsb2FkU2hhZGVyKAorICAgICAgZ2wsIHZlcnRleFNoYWRlciwgZ2wu
VkVSVEVYX1NIQURFUiwgb3B0X2Vycm9yQ2FsbGJhY2ssIG9wdF9sb2dTaGFkZXJzKTsKKyAgdmFy
IGZzID0gbG9hZFNoYWRlcigKKyAgICAgIGdsLCBmcmFnbWVudFNoYWRlciwgZ2wuRlJBR01FTlRf
U0hBREVSLCBvcHRfZXJyb3JDYWxsYmFjaywgb3B0X2xvZ1NoYWRlcnMpOworICBpZiAodnMgJiYg
ZnMpIHsKKyAgICBwcm9ncmFtID0gY3JlYXRlUHJvZ3JhbShnbCwgdnMsIGZzLCBvcHRfZXJyb3JD
YWxsYmFjaykKKyAgfQorICBpZiAodnMpIHsKKyAgICBnbC5kZWxldGVTaGFkZXIodnMpOworICB9
CisgIGlmIChmcykgeworICAgIGdsLmRlbGV0ZVNoYWRlcihmcyk7CisgIH0KKyAgcmV0dXJuIHBy
b2dyYW07Cit9OworCisvKioKKyAqIExvYWRzIHNoYWRlcnMgZnJvbSBzb3VyY2UsIGNyZWF0ZXMg
YSBwcm9ncmFtLCBhdHRhY2hlcyB0aGUgc2hhZGVycyBhbmQKKyAqIGxpbmtzIGJ1dCBleHBlY3Rz
IGVycm9yLgorICoKKyAqIEdMU0wgMS4wLjE3IDEwLjI3IGVmZmVjdGl2ZWx5IHNheXMgdGhhdCBj
b21waWxlU2hhZGVyIGNhbgorICogYWx3YXlzIHN1Y2NlZWQgYXMgbG9uZyBhcyBsaW5rUHJvZ3Jh
bSBmYWlscyBzbyB3ZSBjYW4ndAorICogcmVseSBvbiBjb21waWxlU2hhZGVyIGZhaWxpbmcuIFRo
aXMgZnVuY3Rpb24gZXhwZWN0cworICogb25lIG9mIHRoZSBzaGFkZXIgdG8gZmFpbCBPUiBsaW5r
aW5nIHRvIGZhaWwuCisgKgorICogQHBhcmFtIHshV2ViR0xSZW5kZXJpbmdDb250ZXh0fSBnbCBU
aGUgV2ViR0xSZW5kZXJpbmdDb250ZXh0IHRvIHVzZS4KKyAqIEBwYXJhbSB7c3RyaW5nfSB2ZXJ0
ZXhTaGFkZXJTY3JpcHRJZCBUaGUgdmVydGV4IHNoYWRlci4KKyAqIEBwYXJhbSB7c3RyaW5nfSBm
cmFnbWVudFNoYWRlclNjcmlwdElkIFRoZSBmcmFnbWVudCBzaGFkZXIuCisgKiBAcmV0dXJuIHtX
ZWJHTFByb2dyYW19IFRoZSBjcmVhdGVkIHByb2dyYW0uCisgKi8KK3ZhciBsb2FkUHJvZ3JhbUZy
b21TY3JpcHRFeHBlY3RFcnJvciA9IGZ1bmN0aW9uKAorICAgIGdsLCB2ZXJ0ZXhTaGFkZXJTY3Jp
cHRJZCwgZnJhZ21lbnRTaGFkZXJTY3JpcHRJZCkgeworICB2YXIgdmVydGV4U2hhZGVyID0gbG9h
ZFNoYWRlckZyb21TY3JpcHQoZ2wsIHZlcnRleFNoYWRlclNjcmlwdElkKTsKKyAgaWYgKCF2ZXJ0
ZXhTaGFkZXIpIHsKKyAgICByZXR1cm4gbnVsbDsKKyAgfQorICB2YXIgZnJhZ21lbnRTaGFkZXIg
PSBsb2FkU2hhZGVyRnJvbVNjcmlwdChnbCwgZnJhZ21lbnRTaGFkZXJTY3JpcHRJZCk7CisgIGlm
ICghZnJhZ21lbnRTaGFkZXIpIHsKKyAgICByZXR1cm4gbnVsbDsKKyAgfQorICB2YXIgbGlua1N1
Y2Nlc3MgPSB0cnVlOworICB2YXIgcHJvZ3JhbSA9IGdsLmNyZWF0ZVByb2dyYW0oKTsKKyAgZ2wu
YXR0YWNoU2hhZGVyKHByb2dyYW0sIHZlcnRleFNoYWRlcik7CisgIGdsLmF0dGFjaFNoYWRlcihw
cm9ncmFtLCBmcmFnbWVudFNoYWRlcik7CisgIGxpbmtTdWNjZXNzID0gdHJ1ZTsKKyAgbGlua1By
b2dyYW0oZ2wsIHByb2dyYW0sIGZ1bmN0aW9uKCkgeworICAgICAgbGlua1N1Y2Nlc3MgPSBmYWxz
ZTsKKyAgICB9KTsKKyAgcmV0dXJuIGxpbmtTdWNjZXNzID8gcHJvZ3JhbSA6IG51bGw7Cit9Owor
CisKK3ZhciBnZXRBY3RpdmVNYXAgPSBmdW5jdGlvbihnbCwgcHJvZ3JhbSwgdHlwZUluZm8pIHsK
KyAgdmFyIG51bVZhcmlhYmxlcyA9IGdsLmdldFByb2dyYW1QYXJhbWV0ZXIocHJvZ3JhbSwgZ2xb
dHlwZUluZm8ucGFyYW1dKTsKKyAgdmFyIHZhcmlhYmxlcyA9IHt9OworICBmb3IgKHZhciBpaSA9
IDA7IGlpIDwgbnVtVmFyaWFibGVzOyArK2lpKSB7CisgICAgdmFyIGluZm8gPSBnbFt0eXBlSW5m
by5hY3RpdmVGbl0ocHJvZ3JhbSwgaWkpOworICAgIHZhcmlhYmxlc1tpbmZvLm5hbWVdID0gewor
ICAgICAgbmFtZTogaW5mby5uYW1lLAorICAgICAgc2l6ZTogaW5mby5zaXplLAorICAgICAgdHlw
ZTogaW5mby50eXBlLAorICAgICAgbG9jYXRpb246IGdsW3R5cGVJbmZvLmxvY0ZuXShwcm9ncmFt
LCBpbmZvLm5hbWUpCisgICAgfTsKKyAgfQorICByZXR1cm4gdmFyaWFibGVzOworfTsKKworLyoq
CisgKiBSZXR1cm5zIGEgbWFwIG9mIGF0dHJpYiBuYW1lcyB0byBpbmZvIGFib3V0IHRob3NlCisg
KiBhdHRyaWJzLgorICoKKyAqIGVnOgorICogICAgeyAiYXR0cmliMU5hbWUiOgorICogICAgICB7
CisgKiAgICAgICAgbmFtZTogImF0dHJpYjFOYW1lIiwKKyAqICAgICAgICBzaXplOiAxLAorICog
ICAgICAgIHR5cGU6IGdsLkZMT0FUX01BVDIsCisgKiAgICAgICAgbG9jYXRpb246IDAKKyAqICAg
ICAgfSwKKyAqICAgICAgImF0dHJpYjJOYW1lWzBdIjoKKyAqICAgICAgeworICogICAgICAgICBu
YW1lOiAiYXR0cmliMk5hbWVbMF0iLAorICogICAgICAgICBzaXplOiA0LAorICogICAgICAgICB0
eXBlOiBnbC5GTE9BVCwKKyAqICAgICAgICAgbG9jYXRpb246IDEKKyAqICAgICAgfSwKKyAqICAg
IH0KKyAqCisgKiBAcGFyYW0geyFXZWJHTFJlbmRlcmluZ0NvbnRleHR9IGdsIFRoZSBXZWJHTFJl
bmRlcmluZ0NvbnRleHQgdG8gdXNlLgorICogQHBhcmFtIHtXZWJHTFByb2dyYW19IFRoZSBwcm9n
cmFtIHRvIHF1ZXJ5IGZvciBhdHRyaWJzLgorICogQHJldHVybiB0aGUgbWFwLgorICovCit2YXIg
Z2V0QXR0cmliTWFwID0gZnVuY3Rpb24oZ2wsIHByb2dyYW0pIHsKKyAgcmV0dXJuIGdldEFjdGl2
ZU1hcChnbCwgcHJvZ3JhbSwgeworICAgICAgcGFyYW06ICJBQ1RJVkVfQVRUUklCVVRFUyIsCisg
ICAgICBhY3RpdmVGbjogImdldEFjdGl2ZUF0dHJpYiIsCisgICAgICBsb2NGbjogImdldEF0dHJp
YkxvY2F0aW9uIgorICB9KTsKK307CisKKy8qKgorICogUmV0dXJucyBhIG1hcCBvZiB1bmlmb3Jt
IG5hbWVzIHRvIGluZm8gYWJvdXQgdGhvc2UgdW5pZm9ybXMuCisgKgorICogZWc6CisgKiAgICB7
ICJ1bmlmb3JtMU5hbWUiOgorICogICAgICB7CisgKiAgICAgICAgbmFtZTogInVuaWZvcm0xTmFt
ZSIsCisgKiAgICAgICAgc2l6ZTogMSwKKyAqICAgICAgICB0eXBlOiBnbC5GTE9BVF9NQVQyLAor
ICogICAgICAgIGxvY2F0aW9uOiBXZWJHTFVuaWZvcm1Mb2NhdGlvbgorICogICAgICB9LAorICog
ICAgICAidW5pZm9ybTJOYW1lWzBdIjoKKyAqICAgICAgeworICogICAgICAgICBuYW1lOiAidW5p
Zm9ybTJOYW1lWzBdIiwKKyAqICAgICAgICAgc2l6ZTogNCwKKyAqICAgICAgICAgdHlwZTogZ2wu
RkxPQVQsCisgKiAgICAgICAgIGxvY2F0aW9uOiBXZWJHTFVuaWZvcm1Mb2NhdGlvbgorICogICAg
ICB9LAorICogICAgfQorICoKKyAqIEBwYXJhbSB7IVdlYkdMUmVuZGVyaW5nQ29udGV4dH0gZ2wg
VGhlIFdlYkdMUmVuZGVyaW5nQ29udGV4dCB0byB1c2UuCisgKiBAcGFyYW0ge1dlYkdMUHJvZ3Jh
bX0gVGhlIHByb2dyYW0gdG8gcXVlcnkgZm9yIHVuaWZvcm1zLgorICogQHJldHVybiB0aGUgbWFw
LgorICovCit2YXIgZ2V0VW5pZm9ybU1hcCA9IGZ1bmN0aW9uKGdsLCBwcm9ncmFtKSB7CisgIHJl
dHVybiBnZXRBY3RpdmVNYXAoZ2wsIHByb2dyYW0sIHsKKyAgICAgIHBhcmFtOiAiQUNUSVZFX1VO
SUZPUk1TIiwKKyAgICAgIGFjdGl2ZUZuOiAiZ2V0QWN0aXZlVW5pZm9ybSIsCisgICAgICBsb2NG
bjogImdldFVuaWZvcm1Mb2NhdGlvbiIKKyAgfSk7Cit9OworCit2YXIgYmFzZVBhdGg7Cit2YXIg
Z2V0UmVzb3VyY2VQYXRoID0gZnVuY3Rpb24oKSB7CisgIGlmICghYmFzZVBhdGgpIHsKKyAgICB2
YXIgZXhwZWN0ZWRCYXNlID0gImpzL3dlYmdsLXRlc3QtdXRpbHMuanMiOworICAgIHZhciBzY3Jp
cHRzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3NjcmlwdCcpOworICAgIGZvciAo
dmFyIHNjcmlwdCwgaSA9IDA7IHNjcmlwdCA9IHNjcmlwdHNbaV07IGkrKykgeworICAgICAgdmFy
IHNyYyA9IHNjcmlwdC5zcmM7CisgICAgICB2YXIgbCA9IHNyYy5sZW5ndGg7CisgICAgICBpZiAo
c3JjLnN1YnN0cihsIC0gZXhwZWN0ZWRCYXNlLmxlbmd0aCkgPT0gZXhwZWN0ZWRCYXNlKSB7Cisg
ICAgICAgIGJhc2VQYXRoID0gc3JjLnN1YnN0cigwLCBsIC0gZXhwZWN0ZWRCYXNlLmxlbmd0aCk7
CisgICAgICB9CisgICAgfQorICB9CisgIHJldHVybiBiYXNlUGF0aCArICJyZXNvdXJjZXMvIjsK
K307CisKK3ZhciBsb2FkU3RhbmRhcmRWZXJ0ZXhTaGFkZXIgPSBmdW5jdGlvbihnbCkgeworICBy
ZXR1cm4gbG9hZFNoYWRlckZyb21GaWxlKAorICAgICAgZ2wsIGdldFJlc291cmNlUGF0aCgpICsg
InZlcnRleFNoYWRlci52ZXJ0IiwgZ2wuVkVSVEVYX1NIQURFUik7Cit9OwordmFyIGxvYWRTdGFu
ZGFyZFZlcnRleFNoYWRlckFzeW5jID0gZnVuY3Rpb24oZ2wsIGNhbGxiYWNrKSB7CisgIGxvYWRT
aGFkZXJGcm9tRmlsZUFzeW5jKGdsLCBnZXRSZXNvdXJjZVBhdGgoKSArICJ2ZXJ0ZXhTaGFkZXIu
dmVydCIsIGdsLlZFUlRFWF9TSEFERVIsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQs
IGNhbGxiYWNrKTsKK307CisKK3ZhciBsb2FkU3RhbmRhcmRGcmFnbWVudFNoYWRlciA9IGZ1bmN0
aW9uKGdsKSB7CisgIHJldHVybiBsb2FkU2hhZGVyRnJvbUZpbGUoCisgICAgICBnbCwgZ2V0UmVz
b3VyY2VQYXRoKCkgKyAiZnJhZ21lbnRTaGFkZXIuZnJhZyIsIGdsLkZSQUdNRU5UX1NIQURFUik7
Cit9OwordmFyIGxvYWRTdGFuZGFyZEZyYWdtZW50U2hhZGVyQXN5bmMgPSBmdW5jdGlvbihnbCwg
Y2FsbGJhY2spIHsKKyAgbG9hZFNoYWRlckZyb21GaWxlQXN5bmMoZ2wsIGdldFJlc291cmNlUGF0
aCgpICsgImZyYWdtZW50U2hhZGVyLmZyYWciLCBnbC5GUkFHTUVOVF9TSEFERVIsIHVuZGVmaW5l
ZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGNhbGxiYWNrKTsKK307CisKK3ZhciBsb2FkVW5pZm9y
bUJsb2NrUHJvZ3JhbSA9IGZ1bmN0aW9uKGdsKSB7CisgIHZhciBwcm9ncmFtID0gZ2wuY3JlYXRl
UHJvZ3JhbSgpOworICBnbC5hdHRhY2hTaGFkZXIocHJvZ3JhbSwgbG9hZFVuaWZvcm1CbG9ja1Zl
cnRleFNoYWRlcihnbCkpOworICBnbC5hdHRhY2hTaGFkZXIocHJvZ3JhbSwgbG9hZFVuaWZvcm1C
bG9ja0ZyYWdtZW50U2hhZGVyKGdsKSk7CisgIGdsLmJpbmRBdHRyaWJMb2NhdGlvbihwcm9ncmFt
LCAwLCAiYV92ZXJ0ZXgiKTsKKyAgZ2wuYmluZEF0dHJpYkxvY2F0aW9uKHByb2dyYW0sIDEsICJh
X25vcm1hbCIpOworICBsaW5rUHJvZ3JhbShnbCwgcHJvZ3JhbSk7CisgIHJldHVybiBwcm9ncmFt
OworfTsKKwordmFyIGxvYWRVbmlmb3JtQmxvY2tWZXJ0ZXhTaGFkZXIgPSBmdW5jdGlvbihnbCkg
eworICByZXR1cm4gbG9hZFNoYWRlckZyb21GaWxlKAorICAgICAgZ2wsIGdldFJlc291cmNlUGF0
aCgpICsgInVuaWZvcm1CbG9ja1NoYWRlci52ZXJ0IiwgZ2wuVkVSVEVYX1NIQURFUik7Cit9Owor
Cit2YXIgbG9hZFVuaWZvcm1CbG9ja0ZyYWdtZW50U2hhZGVyID0gZnVuY3Rpb24oZ2wpIHsKKyAg
cmV0dXJuIGxvYWRTaGFkZXJGcm9tRmlsZSgKKyAgICAgIGdsLCBnZXRSZXNvdXJjZVBhdGgoKSAr
ICJ1bmlmb3JtQmxvY2tTaGFkZXIuZnJhZyIsIGdsLkZSQUdNRU5UX1NIQURFUik7Cit9OworCisv
KioKKyAqIExvYWRzIGFuIGltYWdlIGFzeW5jaHJvbm91c2x5LgorICogQHBhcmFtIHtzdHJpbmd9
IHVybCBVUkwgb2YgaW1hZ2UgdG8gbG9hZC4KKyAqIEBwYXJhbSB7IWZ1bmN0aW9uKCFFbGVtZW50
KTogdm9pZH0gY2FsbGJhY2sgRnVuY3Rpb24gdG8gY2FsbAorICogICAgIHdpdGggbG9hZGVkIGlt
YWdlLgorICovCit2YXIgbG9hZEltYWdlQXN5bmMgPSBmdW5jdGlvbih1cmwsIGNhbGxiYWNrKSB7
CisgIHZhciBpbWcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbWcnKTsKKyAgaW1nLm9ubG9h
ZCA9IGZ1bmN0aW9uKCkgeworICAgIGNhbGxiYWNrKGltZyk7CisgIH07CisgIGltZy5zcmMgPSB1
cmw7Cit9OworCisvKioKKyAqIExvYWRzIGFuIGFycmF5IG9mIGltYWdlcy4KKyAqIEBwYXJhbSB7
IUFycmF5LjxzdHJpbmc+fSB1cmxzIFVSTHMgb2YgaW1hZ2VzIHRvIGxvYWQuCisgKiBAcGFyYW0g
eyFmdW5jdGlvbighe3N0cmluZywgaW1nfSk6IHZvaWR9IGNhbGxiYWNrIENhbGxiYWNrCisgKiAg
ICAgdGhhdCBnZXRzIHBhc3NlZCBtYXAgb2YgdXJscyB0byBpbWcgdGFncy4KKyAqLwordmFyIGxv
YWRJbWFnZXNBc3luYyA9IGZ1bmN0aW9uKHVybHMsIGNhbGxiYWNrKSB7CisgIHZhciBjb3VudCA9
IDE7CisgIHZhciBpbWFnZXMgPSB7IH07CisgIGZ1bmN0aW9uIGNvdW50RG93bigpIHsKKyAgICAt
LWNvdW50OworICAgIGlmIChjb3VudCA9PSAwKSB7CisgICAgICBsb2coImxvYWRJbWFnZXNBc3lu
YzogYWxsIGltYWdlcyBsb2FkZWQiKTsKKyAgICAgIGNhbGxiYWNrKGltYWdlcyk7CisgICAgfQor
ICB9CisgIGZ1bmN0aW9uIGltYWdlTG9hZGVkKHVybCkgeworICAgIHJldHVybiBmdW5jdGlvbihp
bWcpIHsKKyAgICAgIGltYWdlc1t1cmxdID0gaW1nOworICAgICAgbG9nKCJsb2FkSW1hZ2VzQXN5
bmM6IGxvYWRlZCAiICsgdXJsKTsKKyAgICAgIGNvdW50RG93bigpOworICAgIH0KKyAgfQorICBm
b3IgKHZhciBpaSA9IDA7IGlpIDwgdXJscy5sZW5ndGg7ICsraWkpIHsKKyAgICArK2NvdW50Owor
ICAgIGxvYWRJbWFnZUFzeW5jKHVybHNbaWldLCBpbWFnZUxvYWRlZCh1cmxzW2lpXSkpOworICB9
CisgIGNvdW50RG93bigpOworfTsKKworLyoqCisgKiBSZXR1cm5zIGEgbWFwIG9mIGtleT12YWx1
ZSB2YWx1ZXMgZnJvbSB1cmwuCisgKiBAcmV0dXJuIHshT2JqZWN0LjxzdHJpbmcsIG51bWJlcj59
IG1hcCBvZiBrZXlzIHRvIHZhbHVlcy4KKyAqLwordmFyIGdldFVybEFyZ3VtZW50cyA9IGZ1bmN0
aW9uKCkgeworICB2YXIgYXJncyA9IHt9OworICB0cnkgeworICAgIHZhciBzID0gd2luZG93Lmxv
Y2F0aW9uLmhyZWY7CisgICAgdmFyIHEgPSBzLmluZGV4T2YoIj8iKTsKKyAgICB2YXIgZSA9IHMu
aW5kZXhPZigiIyIpOworICAgIGlmIChlIDwgMCkgeworICAgICAgZSA9IHMubGVuZ3RoOworICAg
IH0KKyAgICB2YXIgcXVlcnkgPSBzLnN1YnN0cmluZyhxICsgMSwgZSk7CisgICAgdmFyIHBhaXJz
ID0gcXVlcnkuc3BsaXQoIiYiKTsKKyAgICBmb3IgKHZhciBpaSA9IDA7IGlpIDwgcGFpcnMubGVu
Z3RoOyArK2lpKSB7CisgICAgICB2YXIga2V5VmFsdWUgPSBwYWlyc1tpaV0uc3BsaXQoIj0iKTsK
KyAgICAgIHZhciBrZXkgPSBrZXlWYWx1ZVswXTsKKyAgICAgIHZhciB2YWx1ZSA9IGRlY29kZVVS
SUNvbXBvbmVudChrZXlWYWx1ZVsxXSk7CisgICAgICBhcmdzW2tleV0gPSB2YWx1ZTsKKyAgICB9
CisgIH0gY2F0Y2ggKGUpIHsKKyAgICB0aHJvdyAiY291bGQgbm90IHBhcnNlIHVybCI7CisgIH0K
KyAgcmV0dXJuIGFyZ3M7Cit9OworCisvKioKKyAqIE1ha2VzIGFuIGltYWdlIGZyb20gYSBzcmMu
CisgKiBAcGFyYW0ge3N0cmluZ30gc3JjIEltYWdlIHNvdXJjZSBVUkwuCisgKiBAcGFyYW0ge2Z1
bmN0aW9uKCl9IG9ubG9hZCBDYWxsYmFjayB0byBjYWxsIHdoZW4gdGhlIGltYWdlIGhhcyBmaW5p
c2VkIGxvYWRpbmcuCisgKiBAcGFyYW0ge2Z1bmN0aW9uKCl9IG9uZXJyb3IgQ2FsbGJhY2sgdG8g
Y2FsbCB3aGVuIGFuIGVycm9yIG9jY3Vycy4KKyAqIEByZXR1cm4geyFJbWFnZX0gVGhlIGNyZWF0
ZWQgaW1hZ2UuCisgKi8KK3ZhciBtYWtlSW1hZ2UgPSBmdW5jdGlvbihzcmMsIG9ubG9hZCwgb25l
cnJvcikgeworICB2YXIgaW1nID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW1nJyk7CisgIGlm
IChvbmxvYWQpIHsKKyAgICBpbWcub25sb2FkID0gb25sb2FkOworICB9CisgIGlmIChvbmVycm9y
KSB7CisgICAgaW1nLm9uZXJyb3IgPSBvbmVycm9yOworICB9IGVsc2UgeworICAgIGltZy5vbmVy
cm9yID0gZnVuY3Rpb24oKSB7CisgICAgICBsb2coIldBUk5JTkc6IGNyZWF0aW5nIGltYWdlIGZh
aWxlZDsgc3JjOiAiICsgdGhpcy5zcmMpOworICAgIH07CisgIH0KKyAgaWYgKHNyYykgeworICAg
IGltZy5zcmMgPSBzcmM7CisgIH0KKyAgcmV0dXJuIGltZzsKK30KKworLyoqCisgKiBNYWtlcyBh
biBpbWFnZSBlbGVtZW50IGZyb20gYSBjYW52YXMuCisgKiBAcGFyYW0geyFIVE1MQ2FudmFzfSBj
YW52YXMgQ2FudmFzIHRvIG1ha2UgaW1hZ2UgZnJvbS4KKyAqIEBwYXJhbSB7ZnVuY3Rpb24oKX0g
b25sb2FkIENhbGxiYWNrIHRvIGNhbGwgd2hlbiB0aGUgaW1hZ2UgaGFzIGZpbmlzZWQgbG9hZGlu
Zy4KKyAqIEBwYXJhbSB7c3RyaW5nfSBpbWFnZUZvcm1hdCBJbWFnZSBmb3JtYXQgdG8gYmUgcGFz
c2VkIHRvIHRvRGF0YVVybCgpLgorICogQHJldHVybiB7IUltYWdlfSBUaGUgY3JlYXRlZCBpbWFn
ZS4KKyAqLwordmFyIG1ha2VJbWFnZUZyb21DYW52YXMgPSBmdW5jdGlvbihjYW52YXMsIG9ubG9h
ZCwgaW1hZ2VGb3JtYXQpIHsKKyAgcmV0dXJuIG1ha2VJbWFnZShjYW52YXMudG9EYXRhVVJMKGlt
YWdlRm9ybWF0KSwgb25sb2FkKTsKK307CisKKy8qKgorICogTWFrZXMgYSB2aWRlbyBlbGVtZW50
IGZyb20gYSBzcmMuCisgKiBAcGFyYW0ge3N0cmluZ30gc3JjIFZpZGVvIHNvdXJjZSBVUkwuCisg
KiBAcGFyYW0ge2Z1bmN0aW9uKCl9IG9uZXJyb3IgQ2FsbGJhY2sgdG8gY2FsbCB3aGVuIGFuIGVy
cm9yIG9jY3Vycy4KKyAqIEByZXR1cm4geyFWaWRlb30gVGhlIGNyZWF0ZWQgdmlkZW8uCisgKi8K
K3ZhciBtYWtlVmlkZW8gPSBmdW5jdGlvbihzcmMsIG9uZXJyb3IpIHsKKyAgdmFyIHZpZCA9IGRv
Y3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3ZpZGVvJyk7CisgIHZpZC5tdXRlZCA9IHRydWU7CisgIGlm
IChvbmVycm9yKSB7CisgICAgdmlkLm9uZXJyb3IgPSBvbmVycm9yOworICB9IGVsc2UgeworICAg
IHZpZC5vbmVycm9yID0gZnVuY3Rpb24oKSB7CisgICAgICBsb2coIldBUk5JTkc6IGNyZWF0aW5n
IHZpZGVvIGZhaWxlZDsgc3JjOiAiICsgdGhpcy5zcmMpOworICAgIH07CisgIH0KKyAgaWYgKHNy
YykgeworICAgIHZpZC5zcmMgPSBzcmM7CisgIH0KKyAgcmV0dXJuIHZpZDsKK30KKworLyoqCisg
KiBJbnNlcnRzIGFuIGltYWdlIHdpdGggYSBjYXB0aW9uIGludG8gJ2VsZW1lbnQnLgorICogQHBh
cmFtIHshSFRNTEVsZW1lbnR9IGVsZW1lbnQgRWxlbWVudCB0byBhcHBlbmQgaW1hZ2UgdG8uCisg
KiBAcGFyYW0ge3N0cmluZ30gY2FwdGlvbiBjYXB0aW9uIHRvIGFzc29jaWF0ZSB3aXRoIGltYWdl
LgorICogQHBhcmFtIHshSW1hZ2V9IGltZyBpbWFnZSB0byBpbnNlcnQuCisgKi8KK3ZhciBpbnNl
cnRJbWFnZSA9IGZ1bmN0aW9uKGVsZW1lbnQsIGNhcHRpb24sIGltZykgeworICB2YXIgZGl2ID0g
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CisgIHZhciBsYWJlbCA9IGRvY3VtZW50LmNy
ZWF0ZUVsZW1lbnQoImRpdiIpOworICBsYWJlbC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVU
ZXh0Tm9kZShjYXB0aW9uKSk7CisgIGRpdi5hcHBlbmRDaGlsZChsYWJlbCk7CisgIGRpdi5hcHBl
bmRDaGlsZChpbWcpOworICBlbGVtZW50LmFwcGVuZENoaWxkKGRpdik7Cit9OworCisvKioKKyAq
IEluc2VydHMgYSAnbGFiZWwnIHRoYXQgd2hlbiBjbGlja2VkIGV4cGFuZHMgdG8gdGhlIHByZSBm
b3JtYXR0ZWQgdGV4dAorICogc3VwcGxpZWQgYnkgJ3NvdXJjZScuCisgKiBAcGFyYW0geyFIVE1M
RWxlbWVudH0gZWxlbWVudCBlbGVtZW50IHRvIGFwcGVuZCBsYWJlbCB0by4KKyAqIEBwYXJhbSB7
c3RyaW5nfSBsYWJlbCBsYWJlbCBmb3IgYW5jaG9yLgorICogQHBhcmFtIHtzdHJpbmd9IHNvdXJj
ZSBwcmVmb3JtYXR0ZWQgdGV4dCB0byBleHBhbmQgdG8uCisgKiBAcGFyYW0ge3N0cmluZ30gb3B0
X3VybCBVUkwgb2Ygc291cmNlLiBJZiBwcm92aWRlZCBhIGxpbmsgdG8gdGhlIHNvdXJjZSBmaWxl
CisgKiAgICAgd2lsbCBhbHNvIGJlIGFkZGVkLgorICovCit2YXIgYWRkU2hhZGVyU291cmNlID0g
ZnVuY3Rpb24oZWxlbWVudCwgbGFiZWwsIHNvdXJjZSwgb3B0X3VybCkgeworICB2YXIgZGl2ID0g
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CisgIHZhciBzID0gZG9jdW1lbnQuY3JlYXRl
RWxlbWVudCgicHJlIik7CisgIHMuY2xhc3NOYW1lID0gInNoYWRlci1zb3VyY2UiOworICBzLnN0
eWxlLmRpc3BsYXkgPSAibm9uZSI7CisgIHZhciBvbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo
Im9sIik7CisgIC8vcy5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShzb3VyY2Up
KTsKKyAgdmFyIGxpbmVzID0gc291cmNlLnNwbGl0KCJcbiIpOworICBmb3IgKHZhciBpaSA9IDA7
IGlpIDwgbGluZXMubGVuZ3RoOyArK2lpKSB7CisgICAgdmFyIGxpbmUgPSBsaW5lc1tpaV07Cisg
ICAgdmFyIGxpID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgibGkiKTsKKyAgICBsaS5hcHBlbmRD
aGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShsaW5lKSk7CisgICAgb2wuYXBwZW5kQ2hpbGQo
bGkpOworICB9CisgIHMuYXBwZW5kQ2hpbGQob2wpOworICB2YXIgbCA9IGRvY3VtZW50LmNyZWF0
ZUVsZW1lbnQoImEiKTsKKyAgbC5ocmVmID0gInNob3ctc2hhZGVyLXNvdXJjZSI7CisgIGwuYXBw
ZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUobGFiZWwpKTsKKyAgbC5hZGRFdmVudExp
c3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgICBpZiAoZXZlbnQucHJldmVu
dERlZmF1bHQpIHsKKyAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKKyAgICAgIH0KKyAg
ICAgIHMuc3R5bGUuZGlzcGxheSA9IChzLnN0eWxlLmRpc3BsYXkgPT0gJ25vbmUnKSA/ICdibG9j
aycgOiAnbm9uZSc7CisgICAgICByZXR1cm4gZmFsc2U7CisgICAgfSwgZmFsc2UpOworICBkaXYu
YXBwZW5kQ2hpbGQobCk7CisgIGlmIChvcHRfdXJsKSB7CisgICAgdmFyIHUgPSBkb2N1bWVudC5j
cmVhdGVFbGVtZW50KCJhIik7CisgICAgdS5ocmVmID0gb3B0X3VybDsKKyAgICBkaXYuYXBwZW5k
Q2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIiAiKSk7CisgICAgdS5hcHBlbmRDaGlsZChk
b2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiKCIgKyBvcHRfdXJsICsgIikiKSk7CisgICAgZGl2LmFw
cGVuZENoaWxkKHUpOworICB9CisgIGRpdi5hcHBlbmRDaGlsZChzKTsKKyAgZWxlbWVudC5hcHBl
bmRDaGlsZChkaXYpOworfTsKKworLyoqCisgKiBJbnNlcnRzIGxhYmVscyB0aGF0IHdoZW4gY2xp
Y2tlZCBleHBhbmQgdG8gc2hvdyB0aGUgb3JpZ2luYWwgc291cmNlIG9mIHRoZQorICogc2hhZGVy
IGFuZCBhbHNvIHRyYW5zbGF0ZWQgc291cmNlIG9mIHRoZSBzaGFkZXIsIGlmIHRoYXQgaXMgYXZh
aWxhYmxlLgorICogQHBhcmFtIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9IGdsIFRoZSBXZWJHTFJl
bmRlcmluZ0NvbnRleHQgdG8gdXNlLgorICogQHBhcmFtIHshSFRNTEVsZW1lbnR9IGVsZW1lbnQg
ZWxlbWVudCB0byBhcHBlbmQgbGFiZWwgdG8uCisgKiBAcGFyYW0ge3N0cmluZ30gbGFiZWwgbGFi
ZWwgZm9yIGFuY2hvci4KKyAqIEBwYXJhbSB7V2ViR0xTaGFkZXJ9IHNoYWRlciBTaGFkZXIgdG8g
c2hvdyB0aGUgc291cmNlcyBmb3IuCisgKiBAcGFyYW0ge3N0cmluZ30gc2hhZGVyU291cmNlIE9y
aWdpbmFsIHNoYWRlciBzb3VyY2UuCisgKiBAcGFyYW0ge3N0cmluZ30gb3B0X3VybCBVUkwgb2Yg
c291cmNlLiBJZiBwcm92aWRlZCBhIGxpbmsgdG8gdGhlIHNvdXJjZSBmaWxlCisgKiAgICAgd2ls
bCBhbHNvIGJlIGFkZGVkLgorICovCit2YXIgYWRkU2hhZGVyU291cmNlcyA9IGZ1bmN0aW9uKAor
ICAgIGdsLCBlbGVtZW50LCBsYWJlbCwgc2hhZGVyLCBzaGFkZXJTb3VyY2UsIG9wdF91cmwpIHsK
KyAgYWRkU2hhZGVyU291cmNlKGVsZW1lbnQsIGxhYmVsLCBzaGFkZXJTb3VyY2UsIG9wdF91cmwp
OworCisgIHZhciBkZWJ1Z1NoYWRlcnMgPSBnbC5nZXRFeHRlbnNpb24oJ1dFQkdMX2RlYnVnX3No
YWRlcnMnKTsKKyAgaWYgKGRlYnVnU2hhZGVycyAmJiBzaGFkZXIpIHsKKyAgICB2YXIgdHJhbnNs
YXRlZFNvdXJjZSA9IGRlYnVnU2hhZGVycy5nZXRUcmFuc2xhdGVkU2hhZGVyU291cmNlKHNoYWRl
cik7CisgICAgaWYgKHRyYW5zbGF0ZWRTb3VyY2UgIT0gJycpIHsKKyAgICAgIGFkZFNoYWRlclNv
dXJjZShlbGVtZW50LCBsYWJlbCArICcgdHJhbnNsYXRlZCBmb3IgZHJpdmVyJywgdHJhbnNsYXRl
ZFNvdXJjZSk7CisgICAgfQorICB9Cit9OworCisvKioKKyAqIFNlbmRzIHNoYWRlciBpbmZvcm1h
dGlvbiB0byB0aGUgc2VydmVyIHRvIGJlIGR1bXBlZCBpbnRvIHRleHQgZmlsZXMKKyAqIHdoZW4g
dGVzdHMgYXJlIHJ1biBmcm9tIHdpdGhpbiB0aGUgdGVzdC1ydW5uZXIgaGFybmVzcy4KKyAqIEBw
YXJhbSB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fSBnbCBUaGUgV2ViR0xSZW5kZXJpbmdDb250ZXh0
IHRvIHVzZS4KKyAqIEBwYXJhbSB7c3RyaW5nfSB1cmwgVVJMIG9mIGN1cnJlbnQuCisgKiBAcGFy
YW0ge3N0cmluZ30gcGFzc01zZyBUZXN0IGRlc2NyaXB0aW9uLgorICogQHBhcmFtIHtvYmplY3R9
IHZJbmZvIE9iamVjdCBjb250YWluaW5nIHZlcnRleCBzaGFkZXIgaW5mb3JtYXRpb24uCisgKiBA
cGFyYW0ge29iamVjdH0gZkluZm8gT2JqZWN0IGNvbnRhaW5pbmcgZnJhZ21lbnQgc2hhZGVyIGlu
Zm9ybWF0aW9uLgorICovCit2YXIgZHVtcFNoYWRlcnNJbmZvID0gZnVuY3Rpb24oZ2wsIHVybCwg
cGFzc01zZywgdkluZm8sIGZJbmZvKSB7CisgIHZhciBzaGFkZXJJbmZvID0ge307CisgIHNoYWRl
ckluZm8udXJsID0gdXJsOworICBzaGFkZXJJbmZvLnRlc3REZXNjcmlwdGlvbiA9IHBhc3NNc2c7
CisgIHNoYWRlckluZm8udkxhYmVsID0gdkluZm8ubGFiZWw7CisgIHNoYWRlckluZm8udlNob3Vs
ZENvbXBpbGUgPSB2SW5mby5zaGFkZXJTdWNjZXNzOworICBzaGFkZXJJbmZvLnZTb3VyY2UgPSB2
SW5mby5zb3VyY2U7CisgIHNoYWRlckluZm8uZkxhYmVsID0gZkluZm8ubGFiZWw7CisgIHNoYWRl
ckluZm8uZlNob3VsZENvbXBpbGUgPSBmSW5mby5zaGFkZXJTdWNjZXNzOworICBzaGFkZXJJbmZv
LmZTb3VyY2UgPSBmSW5mby5zb3VyY2U7CisgIHNoYWRlckluZm8udlRyYW5zbGF0ZWRTb3VyY2Ug
PSBudWxsOworICBzaGFkZXJJbmZvLmZUcmFuc2xhdGVkU291cmNlID0gbnVsbDsKKyAgdmFyIGRl
YnVnU2hhZGVycyA9IGdsLmdldEV4dGVuc2lvbignV0VCR0xfZGVidWdfc2hhZGVycycpOworICBp
ZiAoZGVidWdTaGFkZXJzKSB7CisgICAgaWYgKHZJbmZvLnNoYWRlcikKKyAgICAgIHNoYWRlcklu
Zm8udlRyYW5zbGF0ZWRTb3VyY2UgPSBkZWJ1Z1NoYWRlcnMuZ2V0VHJhbnNsYXRlZFNoYWRlclNv
dXJjZSh2SW5mby5zaGFkZXIpOworICAgIGlmIChmSW5mby5zaGFkZXIpCisgICAgICBzaGFkZXJJ
bmZvLmZUcmFuc2xhdGVkU291cmNlID0gZGVidWdTaGFkZXJzLmdldFRyYW5zbGF0ZWRTaGFkZXJT
b3VyY2UoZkluZm8uc2hhZGVyKTsKKyAgfQorCisgIHZhciBkdW1wU2hhZGVySW5mb1JlcXVlc3Qg
PSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsKKyAgZHVtcFNoYWRlckluZm9SZXF1ZXN0Lm9wZW4oJ1BP
U1QnLCAiL2R1bXBTaGFkZXJJbmZvIiwgdHJ1ZSk7CisgIGR1bXBTaGFkZXJJbmZvUmVxdWVzdC5z
ZXRSZXF1ZXN0SGVhZGVyKCJDb250ZW50LVR5cGUiLCAidGV4dC9wbGFpbiIpOworICBkdW1wU2hh
ZGVySW5mb1JlcXVlc3Quc2VuZChKU09OLnN0cmluZ2lmeShzaGFkZXJJbmZvKSk7Cit9OworCisv
LyBBZGQgeW91ciBwcmVmaXggaGVyZS4KK3ZhciBicm93c2VyUHJlZml4ZXMgPSBbCisgICIiLAor
ICAiTU9aXyIsCisgICJPUF8iLAorICAiV0VCS0lUXyIKK107CisKKy8qKgorICogR2l2ZW4gYW4g
ZXh0ZW5zaW9uIG5hbWUgbGlrZSBXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfczN0YworICogcmV0
dXJucyB0aGUgbmFtZSBvZiB0aGUgc3VwcG9ydGVkIHZlcnNpb24gZXh0ZW5zaW9uLCBsaWtlCisg
KiBXRUJLSVRfV0VCR0xfY29tcHJlc3NlZF90ZXR1cmVfczN0YworICogQHBhcmFtIHtzdHJpbmd9
IG5hbWUgTmFtZSBvZiBleHRlbnNpb24gdG8gbG9vayBmb3IuCisgKiBAcmV0dXJuIHtzdHJpbmd9
IG5hbWUgb2YgZXh0ZW5zaW9uIGZvdW5kIG9yIHVuZGVmaW5lZCBpZiBub3QKKyAqICAgICBmb3Vu
ZC4KKyAqLwordmFyIGdldFN1cHBvcnRlZEV4dGVuc2lvbldpdGhLbm93blByZWZpeGVzID0gZnVu
Y3Rpb24oZ2wsIG5hbWUpIHsKKyAgdmFyIHN1cHBvcnRlZCA9IGdsLmdldFN1cHBvcnRlZEV4dGVu
c2lvbnMoKTsKKyAgZm9yICh2YXIgaWkgPSAwOyBpaSA8IGJyb3dzZXJQcmVmaXhlcy5sZW5ndGg7
ICsraWkpIHsKKyAgICB2YXIgcHJlZml4ZWROYW1lID0gYnJvd3NlclByZWZpeGVzW2lpXSArIG5h
bWU7CisgICAgaWYgKHN1cHBvcnRlZC5pbmRleE9mKHByZWZpeGVkTmFtZSkgPj0gMCkgeworICAg
ICAgcmV0dXJuIHByZWZpeGVkTmFtZTsKKyAgICB9CisgIH0KK307CisKKy8qKgorICogQHBhcmFt
IHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9IGdsIFRoZSBXZWJHTFJlbmRlcmluZ0NvbnRleHQgdG8g
dXNlLgorICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgTmFtZSBvZiBleHRlbnNpb24gdG8gbG9vayBm
b3IuCisgKiBAcGFyYW0ge2Jvb2xlYW59IGV4dGVuc2lvbkVuYWJsZWQgVHJ1ZSBpZiB0aGUgZXh0
ZW5zaW9uIHdhcyBlbmFibGVkIHN1Y2Nlc3NmdWxseSB2aWEgZ2wuZ2V0RXh0ZW5zaW9uKCkuCisg
Ki8KK3ZhciBydW5FeHRlbnNpb25TdXBwb3J0ZWRUZXN0ID0gZnVuY3Rpb24oZ2wsIG5hbWUsIGV4
dGVuc2lvbkVuYWJsZWQpIHsKKyAgdmFyIHByZWZpeGVkTmFtZSA9IGdldFN1cHBvcnRlZEV4dGVu
c2lvbldpdGhLbm93blByZWZpeGVzKGdsLCBuYW1lKTsKKyAgaWYgKHByZWZpeGVkTmFtZSAhPT0g
dW5kZWZpbmVkKSB7CisgICAgICBpZiAoZXh0ZW5zaW9uRW5hYmxlZCkgeworICAgICAgICAgIHRl
c3RQYXNzZWQobmFtZSArICIgbGlzdGVkIGFzIHN1cHBvcnRlZCBhbmQgZ2V0RXh0ZW5zaW9uIHN1
Y2NlZWRlZCIpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgICB0ZXN0RmFpbGVkKG5hbWUgKyAi
IGxpc3RlZCBhcyBzdXBwb3J0ZWQgYnV0IGdldEV4dGVuc2lvbiBmYWlsZWQiKTsKKyAgICAgIH0K
KyAgfSBlbHNlIHsKKyAgICAgIGlmIChleHRlbnNpb25FbmFibGVkKSB7CisgICAgICAgICAgdGVz
dEZhaWxlZChuYW1lICsgIiBub3QgbGlzdGVkIGFzIHN1cHBvcnRlZCBidXQgZ2V0RXh0ZW5zaW9u
IHN1Y2NlZWRlZCIpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgICB0ZXN0UGFzc2VkKG5hbWUg
KyAiIG5vdCBsaXN0ZWQgYXMgc3VwcG9ydGVkIGFuZCBnZXRFeHRlbnNpb24gZmFpbGVkIC0tIHRo
aXMgaXMgbGVnYWwiKTsKKyAgICAgIH0KKyAgfQorfQorCisvKioKKyAqIEdpdmVuIGFuIGV4dGVu
c2lvbiBuYW1lIGxpa2UgV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3MzdGMKKyAqIHJldHVybnMg
dGhlIHN1cHBvcnRlZCB2ZXJzaW9uIGV4dGVuc2lvbiwgbGlrZQorICogV0VCS0lUX1dFQkdMX2Nv
bXByZXNzZWRfdGV0dXJlX3MzdGMKKyAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIE5hbWUgb2YgZXh0
ZW5zaW9uIHRvIGxvb2sgZm9yLgorICogQHJldHVybiB7V2ViR0xFeHRlbnNpb259IFRoZSBleHRl
bnNpb24gb3IgdW5kZWZpbmVkIGlmIG5vdAorICogICAgIGZvdW5kLgorICovCit2YXIgZ2V0RXh0
ZW5zaW9uV2l0aEtub3duUHJlZml4ZXMgPSBmdW5jdGlvbihnbCwgbmFtZSkgeworICBmb3IgKHZh
ciBpaSA9IDA7IGlpIDwgYnJvd3NlclByZWZpeGVzLmxlbmd0aDsgKytpaSkgeworICAgIHZhciBw
cmVmaXhlZE5hbWUgPSBicm93c2VyUHJlZml4ZXNbaWldICsgbmFtZTsKKyAgICB2YXIgZXh0ID0g
Z2wuZ2V0RXh0ZW5zaW9uKHByZWZpeGVkTmFtZSk7CisgICAgaWYgKGV4dCkgeworICAgICAgcmV0
dXJuIGV4dDsKKyAgICB9CisgIH0KK307CisKKy8qKgorICogUmV0dXJucyBwb3NzaWJsZSBwcmVm
aXhlZCB2ZXJzaW9ucyBvZiBhbiBleHRlbnNpb24ncyBuYW1lLgorICogQHBhcmFtIHtzdHJpbmd9
IG5hbWUgTmFtZSBvZiBleHRlbnNpb24uIE1heSBhbHJlYWR5IGluY2x1ZGUgYSBwcmVmaXguCisg
KiBAcmV0dXJuIHtBcnJheS48c3RyaW5nPn0gVmFyaWF0aW9ucyBvZiB0aGUgZXh0ZW5zaW9uIG5h
bWUgd2l0aCBrbm93bgorICogICAgIGJyb3dzZXIgcHJlZml4ZXMuCisgKi8KK3ZhciBnZXRFeHRl
bnNpb25QcmVmaXhlZE5hbWVzID0gZnVuY3Rpb24obmFtZSkgeworICB2YXIgdW5wcmVmaXggPSBm
dW5jdGlvbihuYW1lKSB7CisgICAgZm9yICh2YXIgaWkgPSAwOyBpaSA8IGJyb3dzZXJQcmVmaXhl
cy5sZW5ndGg7ICsraWkpIHsKKyAgICAgIGlmIChicm93c2VyUHJlZml4ZXNbaWldLmxlbmd0aCA+
IDAgJiYKKyAgICAgICAgICBuYW1lLnN1YnN0cmluZygwLCBicm93c2VyUHJlZml4ZXNbaWldLmxl
bmd0aCkudG9Mb3dlckNhc2UoKSA9PT0KKyAgICAgICAgICBicm93c2VyUHJlZml4ZXNbaWldLnRv
TG93ZXJDYXNlKCkpIHsKKyAgICAgICAgcmV0dXJuIG5hbWUuc3Vic3RyaW5nKGJyb3dzZXJQcmVm
aXhlc1tpaV0ubGVuZ3RoKTsKKyAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIG5hbWU7CisgIH0K
KworICB2YXIgdW5wcmVmaXhlZCA9IHVucHJlZml4KG5hbWUpOworCisgIHZhciB2YXJpYXRpb25z
ID0gW107CisgIGZvciAodmFyIGlpID0gMDsgaWkgPCBicm93c2VyUHJlZml4ZXMubGVuZ3RoOyAr
K2lpKSB7CisgICAgdmFyaWF0aW9ucy5wdXNoKGJyb3dzZXJQcmVmaXhlc1tpaV0gKyB1bnByZWZp
eGVkKTsKKyAgfQorCisgIHJldHVybiB2YXJpYXRpb25zOworfTsKKwordmFyIHJlcGxhY2VSRSA9
IC9cJFwoKFx3KylcKS9nOworCisvKioKKyAqIFJlcGxhY2VzIHN0cmluZ3Mgd2l0aCBwcm9wZXJ0
eSB2YWx1ZXMuCisgKiBHaXZlbiBhIHN0cmluZyBsaWtlICJoZWxsbyAkKGZpcnN0KSAkKGxhc3Qp
IiBhbmQgYW4gb2JqZWN0CisgKiBsaWtlIHtmaXJzdDoiSm9obiIsIGxhc3Q6IlNtaXRoIn0gd2ls
bCByZXR1cm4KKyAqICJoZWxsbyBKb2huIFNtaXRoIi4KKyAqIEBwYXJhbSB7c3RyaW5nfSBzdHIg
U3RyaW5nIHRvIGRvIHJlcGxhY2VtZW50cyBpbi4KKyAqIEBwYXJhbSB7Li4ufSAxIG9yIG1vcmUg
b2JqZWN0cyBjb250YWluaW5nIHByb3BlcnRpZXMuCisgKi8KK3ZhciByZXBsYWNlUGFyYW1zID0g
ZnVuY3Rpb24oc3RyKSB7CisgIHZhciBhcmdzID0gYXJndW1lbnRzOworICByZXR1cm4gc3RyLnJl
cGxhY2UocmVwbGFjZVJFLCBmdW5jdGlvbihzdHIsIHAxLCBvZmZzZXQsIHMpIHsKKyAgICBmb3Ig
KHZhciBpaSA9IDE7IGlpIDwgYXJncy5sZW5ndGg7ICsraWkpIHsKKyAgICAgIGlmIChhcmdzW2lp
XVtwMV0gIT09IHVuZGVmaW5lZCkgeworICAgICAgICByZXR1cm4gYXJnc1tpaV1bcDFdOworICAg
ICAgfQorICAgIH0KKyAgICB0aHJvdyAidW5rbm93biBzdHJpbmcgcGFyYW0gJyIgKyBwMSArICIn
IjsKKyAgfSk7Cit9OworCit2YXIgdXBwZXJDYXNlRmlyc3RMZXR0ZXIgPSBmdW5jdGlvbihzdHIp
IHsKKyAgcmV0dXJuIHN0ci5zdWJzdHJpbmcoMCwgMSkudG9VcHBlckNhc2UoKSArIHN0ci5zdWJz
dHJpbmcoMSk7Cit9OworCisvKioKKyAqIEdldHMgYSBwcmVmaXhlZCBwcm9wZXJ0eS4gRm9yIGV4
YW1wbGUsCisgKgorICogICAgIHZhciBmbiA9IGdldFByZWZpeGVkUHJvcGVydHkoCisgKiAgICAg
ICAgd2luZG93LAorICogICAgICAgICJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiKTsKKyAqCisgKiBX
aWxsIHJldHVybiBlaXRoZXI6CisgKiAgICAid2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSIs
CisgKiAgICAid2luZG93Lm9SZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLAorICogICAgIndpbmRvdy5t
c1JlcXVlc3RBbmltYXRpb25GcmFtZSIsCisgKiAgICAid2luZG93Lm1velJlcXVlc3RBbmltYXRp
b25GcmFtZSIsCisgKiAgICAid2luZG93LndlYktpdFJlcXVlc3RBbmltYXRpb25GcmFtZSIsCisg
KiAgICB1bmRlZmluZWQKKyAqCisgKiB0aGUgbm9uLXByZWZpeGVkIGZ1bmN0aW9uIGlzIHRyaWVk
IGZpcnN0LgorICovCit2YXIgcHJvcGVydHlQcmVmaXhlcyA9IFsiIiwgIm1veiIsICJtcyIsICJv
IiwgIndlYmtpdCJdOwordmFyIGdldFByZWZpeGVkUHJvcGVydHkgPSBmdW5jdGlvbihvYmosIHBy
b3BlcnR5TmFtZSkgeworICBmb3IgKHZhciBpaSA9IDA7IGlpIDwgcHJvcGVydHlQcmVmaXhlcy5s
ZW5ndGg7ICsraWkpIHsKKyAgICB2YXIgcHJlZml4ID0gcHJvcGVydHlQcmVmaXhlc1tpaV07Cisg
ICAgdmFyIG5hbWUgPSBwcmVmaXggKyBwcm9wZXJ0eU5hbWU7CisgICAgbG9nKG5hbWUpOworICAg
IHZhciBwcm9wZXJ0eSA9IG9ialtuYW1lXTsKKyAgICBpZiAocHJvcGVydHkpIHsKKyAgICAgIHJl
dHVybiBwcm9wZXJ0eTsKKyAgICB9CisgICAgaWYgKGlpID09IDApIHsKKyAgICAgIHByb3BlcnR5
TmFtZSA9IHVwcGVyQ2FzZUZpcnN0TGV0dGVyKHByb3BlcnR5TmFtZSk7CisgICAgfQorICB9Cisg
IHJldHVybiB1bmRlZmluZWQ7Cit9OworCit2YXIgX3JlcXVlc3RBbmltRnJhbWU7CisKKy8qKgor
ICogUHJvdmlkZXMgcmVxdWVzdEFuaW1hdGlvbkZyYW1lIGluIGEgY3Jvc3MgYnJvd3NlciB3YXku
CisgKi8KK3ZhciByZXF1ZXN0QW5pbUZyYW1lID0gZnVuY3Rpb24oY2FsbGJhY2spIHsKKyAgaWYg
KCFfcmVxdWVzdEFuaW1GcmFtZSkgeworICAgIF9yZXF1ZXN0QW5pbUZyYW1lID0gZ2V0UHJlZml4
ZWRQcm9wZXJ0eSh3aW5kb3csICJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiKSB8fAorICAgICAgZnVu
Y3Rpb24oY2FsbGJhY2ssIGVsZW1lbnQpIHsKKyAgICAgICAgcmV0dXJuIHdpbmRvdy5zZXRUaW1l
b3V0KGNhbGxiYWNrLCAxMDAwIC8gNzApOworICAgICAgfTsKKyAgfQorICBfcmVxdWVzdEFuaW1G
cmFtZS5jYWxsKHdpbmRvdywgY2FsbGJhY2spOworfTsKKworLyoqCisgKiBQcm92aWRlcyB2aWRl
by5yZXF1ZXN0VmlkZW9GcmFtZUNhbGxiYWNrIGluIGEgY3Jvc3MgYnJvd3NlciB3YXkuCisgKiBS
ZXR1cm5zIGEgcHJvcGVydHksIG9yIHVuZGVmaW5lZCBpZiB1bnN1cG9ydGVkLgorICovCit2YXIg
Z2V0UmVxdWVzdFZpZEZyYW1lQ2FsbGJhY2sgPSBmdW5jdGlvbigpIHsKKyAgcmV0dXJuIEhUTUxW
aWRlb0VsZW1lbnQucHJvdG90eXBlWyJyZXF1ZXN0VmlkZW9GcmFtZUNhbGxiYWNrIl07Cit9Owor
Cit2YXIgX2NhbmNlbEFuaW1GcmFtZTsKKworLyoqCisgKiBQcm92aWRlcyBjYW5jZWxBbmltYXRp
b25GcmFtZSBpbiBhIGNyb3NzIGJyb3dzZXIgd2F5LgorICovCit2YXIgY2FuY2VsQW5pbUZyYW1l
ID0gZnVuY3Rpb24ocmVxdWVzdCkgeworICBpZiAoIV9jYW5jZWxBbmltRnJhbWUpIHsKKyAgICBf
Y2FuY2VsQW5pbUZyYW1lID0gZ2V0UHJlZml4ZWRQcm9wZXJ0eSh3aW5kb3csICJjYW5jZWxBbmlt
YXRpb25GcmFtZSIpIHx8CisgICAgICB3aW5kb3cuY2xlYXJUaW1lb3V0OworICB9CisgIF9jYW5j
ZWxBbmltRnJhbWUuY2FsbCh3aW5kb3csIHJlcXVlc3QpOworfTsKKworLyoqCisgKiBQcm92aWRl
cyByZXF1ZXN0RnVsbFNjcmVlbiBpbiBhIGNyb3NzIGJyb3dzZXIgd2F5LgorICovCit2YXIgcmVx
dWVzdEZ1bGxTY3JlZW4gPSBmdW5jdGlvbihlbGVtZW50KSB7CisgIHZhciBmbiA9IGdldFByZWZp
eGVkUHJvcGVydHkoZWxlbWVudCwgInJlcXVlc3RGdWxsU2NyZWVuIik7CisgIGlmIChmbikgewor
ICAgIGZuLmNhbGwoZWxlbWVudCk7CisgIH0KK307CisKKy8qKgorICogUHJvdmlkZXMgY2FuY2Vs
RnVsbFNjcmVlbiBpbiBhIGNyb3NzIGJyb3dzZXIgd2F5LgorICovCit2YXIgY2FuY2VsRnVsbFNj
cmVlbiA9IGZ1bmN0aW9uKCkgeworICB2YXIgZm4gPSBnZXRQcmVmaXhlZFByb3BlcnR5KGRvY3Vt
ZW50LCAiY2FuY2VsRnVsbFNjcmVlbiIpOworICBpZiAoZm4pIHsKKyAgICBmbi5jYWxsKGRvY3Vt
ZW50KTsKKyAgfQorfTsKKwordmFyIGZ1bGxTY3JlZW5TdGF0ZU5hbWU7CisoZnVuY3Rpb24oKSB7
CisgIHZhciBmdWxsU2NyZWVuU3RhdGVOYW1lcyA9IFsKKyAgICAiaXNGdWxsU2NyZWVuIiwKKyAg
ICAiZnVsbFNjcmVlbiIKKyAgXTsKKyAgZm9yICh2YXIgaWkgPSAwOyBpaSA8IGZ1bGxTY3JlZW5T
dGF0ZU5hbWVzLmxlbmd0aDsgKytpaSkgeworICAgIHZhciBwcm9wZXJ0eU5hbWUgPSBmdWxsU2Ny
ZWVuU3RhdGVOYW1lc1tpaV07CisgICAgZm9yICh2YXIgamogPSAwOyBqaiA8IHByb3BlcnR5UHJl
Zml4ZXMubGVuZ3RoOyArK2pqKSB7CisgICAgICB2YXIgcHJlZml4ID0gcHJvcGVydHlQcmVmaXhl
c1tqal07CisgICAgICBpZiAocHJlZml4Lmxlbmd0aCkgeworICAgICAgICBwcm9wZXJ0eU5hbWUg
PSB1cHBlckNhc2VGaXJzdExldHRlcihwcm9wZXJ0eU5hbWUpOworICAgICAgICBmdWxsU2NyZWVu
U3RhdGVOYW1lID0gcHJlZml4ICsgcHJvcGVydHlOYW1lOworICAgICAgICBpZiAoZG9jdW1lbnRb
ZnVsbFNjcmVlblN0YXRlTmFtZV0gIT09IHVuZGVmaW5lZCkgeworICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgICBmdWxsU2NyZWVuU3RhdGVOYW1lID0gdW5k
ZWZpbmVkOworICB9Cit9KCkpOworCisvKioKKyAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYg
ZnVsbHNjcmVlbiBtb2RlIGlzIGFjdGl2ZS4KKyAqLwordmFyIGdldEZ1bGxTY3JlZW5TdGF0ZSA9
IGZ1bmN0aW9uKCkgeworICBsb2coImZ1bGxzY3JlZW5zdGF0ZW5hbWU6IiArIGZ1bGxTY3JlZW5T
dGF0ZU5hbWUpOworICBsb2coZG9jdW1lbnRbZnVsbFNjcmVlblN0YXRlTmFtZV0pOworICByZXR1
cm4gZG9jdW1lbnRbZnVsbFNjcmVlblN0YXRlTmFtZV07Cit9OworCisvKioKKyAqIEBwYXJhbSB7
IUhUTUxFbGVtZW50fSBlbGVtZW50IFRoZSBlbGVtZW50IHRvIGdvIGZ1bGxzY3JlZW4uCisgKiBA
cGFyYW0geyFmdW5jdGlvbihib29sZWFuKX0gY2FsbGJhY2sgQSBmdW5jdGlvbiB0aGF0IHdpbGwg
YmUgY2FsbGVkCisgKiAgICAgICAgd2hlbiBlbnRlcmluZy9leGl0aW5nIGZ1bGxzY3JlZW4uIEl0
IGlzIHBhc3NlZCB0cnVlIGlmCisgKiAgICAgICAgZW50ZXJpbmcgZnVsbHNjcmVlbiwgZmFsc2Ug
aWYgZXhpdGluZy4KKyAqLwordmFyIG9uRnVsbFNjcmVlbkNoYW5nZSA9IGZ1bmN0aW9uKGVsZW1l
bnQsIGNhbGxiYWNrKSB7CisgIHByb3BlcnR5UHJlZml4ZXMuZm9yRWFjaChmdW5jdGlvbihwcmVm
aXgpIHsKKyAgICB2YXIgZXZlbnROYW1lID0gcHJlZml4ICsgImZ1bGxzY3JlZW5jaGFuZ2UiOwor
ICAgIGxvZygiYWRkZXZlbnQ6ICIgKyBldmVudE5hbWUpOworICAgIGRvY3VtZW50LmFkZEV2ZW50
TGlzdGVuZXIoZXZlbnROYW1lLCBmdW5jdGlvbihldmVudCkgeworICAgICAgbG9nKCJldmVudDog
IiArIGV2ZW50TmFtZSk7CisgICAgICBjYWxsYmFjayhnZXRGdWxsU2NyZWVuU3RhdGUoKSk7Cisg
ICAgfSk7CisgIH0pOworfTsKKworLyoqCisgKiBAcGFyYW0geyFzdHJpbmd9IGJ1dHRvbklkIFRo
ZSBpZCBvZiB0aGUgYnV0dG9uIHRoYXQgd2lsbCB0b2dnbGUgZnVsbHNjcmVlbgorICogICAgICAg
IG1vZGUuCisgKiBAcGFyYW0geyFzdHJpbmd9IGZ1bGxzY3JlZW5JZCBUaGUgaWQgb2YgdGhlIGVs
ZW1lbnQgdG8gZ28gZnVsbHNjcmVlbi4KKyAqIEBwYXJhbSB7IWZ1bmN0aW9uKGJvb2xlYW4pfSBj
YWxsYmFjayBBIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBjYWxsZWQKKyAqICAgICAgICB3aGVuIGVu
dGVyaW5nL2V4aXRpbmcgZnVsbHNjcmVlbi4gSXQgaXMgcGFzc2VkIHRydWUgaWYKKyAqICAgICAg
ICBlbnRlcmluZyBmdWxsc2NyZWVuLCBmYWxzZSBpZiBleGl0aW5nLgorICogQHJldHVybiB7Ym9v
bGVhbn0gVHJ1ZSBpZiBmdWxsc2NyZWVuIG1vZGUgaXMgc3VwcG9ydGVkLgorICovCit2YXIgc2V0
dXBGdWxsc2NyZWVuID0gZnVuY3Rpb24oYnV0dG9uSWQsIGZ1bGxzY3JlZW5JZCwgY2FsbGJhY2sp
IHsKKyAgaWYgKCFmdWxsU2NyZWVuU3RhdGVOYW1lKSB7CisgICAgcmV0dXJuIGZhbHNlOworICB9
CisKKyAgdmFyIGZ1bGxzY3JlZW5FbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZnVs
bHNjcmVlbklkKTsKKyAgb25GdWxsU2NyZWVuQ2hhbmdlKGZ1bGxzY3JlZW5FbGVtZW50LCBjYWxs
YmFjayk7CisKKyAgdmFyIHRvZ2dsZUZ1bGxTY3JlZW4gPSBmdW5jdGlvbihldmVudCkgeworICAg
IGlmIChnZXRGdWxsU2NyZWVuU3RhdGUoKSkgeworICAgICAgY2FuY2VsRnVsbFNjcmVlbihmdWxs
c2NyZWVuRWxlbWVudCk7CisgICAgfSBlbHNlIHsKKyAgICAgIHJlcXVlc3RGdWxsU2NyZWVuKGZ1
bGxzY3JlZW5FbGVtZW50KTsKKyAgICB9CisgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKKyAg
ICByZXR1cm4gZmFsc2U7CisgIH07CisKKyAgdmFyIGJ1dHRvbkVsZW1lbnQgPSBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZChidXR0b25JZCk7CisgIGJ1dHRvbkVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5l
cignY2xpY2snLCB0b2dnbGVGdWxsU2NyZWVuKTsKKworICByZXR1cm4gdHJ1ZTsKK307CisKKy8q
KgorICogV2FpdHMgZm9yIHRoZSBicm93c2VyIHRvIGNvbXBvc2l0ZSB0aGUgd2ViIHBhZ2UuCisg
KiBAcGFyYW0ge2Z1bmN0aW9uKCl9IGNhbGxiYWNrIEEgZnVuY3Rpb24gdG8gY2FsbCBhZnRlciBj
b21wb3NpdGluZyBoYXMgdGFrZW4KKyAqICAgICAgICBwbGFjZS4KKyAqLwordmFyIHdhaXRGb3JD
b21wb3NpdGUgPSBmdW5jdGlvbihjYWxsYmFjaykgeworICB2YXIgZnJhbWVzID0gNTsKKyAgdmFy
IGNvdW50RG93biA9IGZ1bmN0aW9uKCkgeworICAgIGlmIChmcmFtZXMgPT0gMCkgeworICAgICAg
Ly8gVE9ETyhrYnIpOiB1bmlmeSB3aXRoIGpzLXRlc3QtcHJlLmpzIGFuZCBlbmFibGUgdGhlc2Ug
d2l0aAorICAgICAgLy8gdmVyYm9zZSBsb2dnaW5nLgorICAgICAgLy8gbG9nKCJ3YWl0Rm9yQ29t
cG9zaXRlOiBjYWxsYmFjayIpOworICAgICAgY2FsbGJhY2soKTsKKyAgICB9IGVsc2UgeworICAg
ICAgLy8gbG9nKCJ3YWl0Rm9yQ29tcG9zaXRlOiBjb3VudGRvd24oIiArIGZyYW1lcyArICIpIik7
CisgICAgICAtLWZyYW1lczsKKyAgICAgIHJlcXVlc3RBbmltRnJhbWUuY2FsbCh3aW5kb3csIGNv
dW50RG93bik7CisgICAgfQorICB9OworICBjb3VudERvd24oKTsKK307CisKK3ZhciBzZXRaZXJv
VGltZW91dCA9IChmdW5jdGlvbigpIHsKKyAgLy8gU2VlIGh0dHBzOi8vZGJhcm9uLm9yZy9sb2cv
MjAxMDAzMDktZmFzdGVyLXRpbWVvdXRzCisKKyAgdmFyIHRpbWVvdXRzID0gW107CisgIHZhciBt
ZXNzYWdlTmFtZSA9ICJ6ZXJvLXRpbWVvdXQtbWVzc2FnZSI7CisKKyAgLy8gTGlrZSBzZXRUaW1l
b3V0LCBidXQgb25seSB0YWtlcyBhIGZ1bmN0aW9uIGFyZ3VtZW50LiAgVGhlcmUncworICAvLyBu
byB0aW1lIGFyZ3VtZW50IChhbHdheXMgemVybykgYW5kIG5vIGFyZ3VtZW50cyAoeW91IGhhdmUg
dG8KKyAgLy8gdXNlIGEgY2xvc3VyZSkuCisgIGZ1bmN0aW9uIHNldFplcm9UaW1lb3V0KGZuKSB7
CisgICAgICB0aW1lb3V0cy5wdXNoKGZuKTsKKyAgICAgIHdpbmRvdy5wb3N0TWVzc2FnZShtZXNz
YWdlTmFtZSwgIioiKTsKKyAgfQorCisgIGZ1bmN0aW9uIGhhbmRsZU1lc3NhZ2UoZXZlbnQpIHsK
KyAgICAgIGlmIChldmVudC5zb3VyY2UgPT0gd2luZG93ICYmIGV2ZW50LmRhdGEgPT0gbWVzc2Fn
ZU5hbWUpIHsKKyAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTsKKyAgICAgICAgICBp
ZiAodGltZW91dHMubGVuZ3RoID4gMCkgeworICAgICAgICAgICAgICB2YXIgZm4gPSB0aW1lb3V0
cy5zaGlmdCgpOworICAgICAgICAgICAgICBmbigpOworICAgICAgICAgIH0KKyAgICAgIH0KKyAg
fQorCisgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIiwgaGFuZGxlTWVzc2FnZSwg
dHJ1ZSk7CisKKyAgcmV0dXJuIHNldFplcm9UaW1lb3V0OworfSkoKTsKKworZnVuY3Rpb24gZGlz
cGF0Y2hQcm9taXNlKGZuKSB7CisgIHJldHVybiBuZXcgUHJvbWlzZSgoZm5fcmVzb2x2ZSwgZm5f
cmVqZWN0KSA9PiB7CisgICAgc2V0WmVyb1RpbWVvdXQoKCkgPT4geworICAgICAgZm5fcmVzb2x2
ZShmbigpKTsKKyAgICB9KTsKKyAgfSk7Cit9CisKKy8qKgorICogUnVucyBhbiBhcnJheSBvZiBm
dW5jdGlvbnMsIHlpZWxkaW5nIHRvIHRoZSBicm93c2VyIGJldHdlZW4gZWFjaCBzdGVwLgorICog
SWYgeW91IHdhbnQgdG8ga25vdyB3aGVuIGFsbCB0aGUgc3RlcHMgYXJlIGZpbmlzaGVkIGFkZCBh
IGxhc3Qgc3RlcC4KKyAqIEBwYXJhbSB7IUFycmF5LjxmdW5jdGlvbigpOiB2b2lkPn0gc3RlcHMg
QXJyYXkgb2YgZnVuY3Rpb25zLgorICovCit2YXIgcnVuU3RlcHMgPSBmdW5jdGlvbihzdGVwcykg
eworICBpZiAoIXN0ZXBzLmxlbmd0aCkgeworICAgIHJldHVybjsKKyAgfQorCisgIC8vIGNvcHkg
c3RlcHMgc28gdGhleSBjYW4ndCBiZSBtb2RpZmVkLgorICB2YXIgc3RlcHNUb1J1biA9IHN0ZXBz
LnNsaWNlKCk7CisgIHZhciBjdXJyZW50U3RlcCA9IDA7CisgIHZhciBydW5OZXh0U3RlcCA9IGZ1
bmN0aW9uKCkgeworICAgIHN0ZXBzVG9SdW5bY3VycmVudFN0ZXArK10oKTsKKyAgICBpZiAoY3Vy
cmVudFN0ZXAgPCBzdGVwc1RvUnVuLmxlbmd0aCkgeworICAgICAgc2V0VGltZW91dChydW5OZXh0
U3RlcCwgMSk7CisgICAgfQorICB9OworICBydW5OZXh0U3RlcCgpOworfTsKKworLyoqCisgKiBT
dGFydHMgcGxheWluZyBhIHZpZGVvIGFuZCB3YWl0cyBmb3IgaXQgdG8gYmUgY29uc3VtYWJsZS4K
KyAqIEBwYXJhbSB7IUhUTUxWaWRlb0VsZW1lbnR9IHZpZGVvIEFuIEhUTUw1IFZpZGVvIGVsZW1l
bnQuCisgKiBAcGFyYW0geyFmdW5jdGlvbighSFRNTFZpZGVvRWxlbWVudCk6IHZvaWR9IGNhbGxi
YWNrIEZ1bmN0aW9uIHRvIGNhbGwgd2hlbgorICogICAgICAgIHZpZGVvIGlzIHJlYWR5LgorICov
Cit2YXIgc3RhcnRQbGF5aW5nQW5kV2FpdEZvclZpZGVvID0gZnVuY3Rpb24odmlkZW8sIGNhbGxi
YWNrKSB7CisgIHZhciBydmZjID0gZ2V0UmVxdWVzdFZpZEZyYW1lQ2FsbGJhY2soKTsKKyAgaWYg
KHJ2ZmMgPT09IHVuZGVmaW5lZCkgeworICAgIHZhciB0aW1lV2F0Y2hlciA9IGZ1bmN0aW9uKCkg
eworICAgICAgaWYgKHZpZGVvLmN1cnJlbnRUaW1lID4gMCkgeworICAgICAgICBjYWxsYmFjayh2
aWRlbyk7CisgICAgICB9IGVsc2UgeworICAgICAgICByZXF1ZXN0QW5pbUZyYW1lLmNhbGwod2lu
ZG93LCB0aW1lV2F0Y2hlcik7CisgICAgICB9CisgICAgfTsKKworICAgIHRpbWVXYXRjaGVyKCk7
CisgIH0gZWxzZSB7CisgICAgLy8gQ2FsbHMgdmlkZW8ucmVxdWVzdFZpZGVvRnJhbWVDYWxsYmFj
ayhfID0+IHsgY2FsbGJhY2sodmlkZW8pIH0pCisgICAgcnZmYy5jYWxsKHZpZGVvLCBfID0+IHsg
Y2FsbGJhY2sodmlkZW8pIH0pOworICB9CisKKyAgdmlkZW8ubG9vcCA9IHRydWU7CisgIHZpZGVv
Lm11dGVkID0gdHJ1ZTsKKyAgLy8gU2VlIHdoZXRoZXIgc2V0dGluZyB0aGUgcHJlbG9hZCBmbGFn
IGRlLWZsYWtlcyB2aWRlby1yZWxhdGVkIHRlc3RzLgorICB2aWRlby5wcmVsb2FkID0gJ2F1dG8n
OworICB2aWRlby5wbGF5KCk7Cit9OworCit2YXIgZ2V0SG9zdCA9IGZ1bmN0aW9uKHVybCkgewor
ICB1cmwgPSB1cmwucmVwbGFjZSgiXFwiLCAiLyIpOworICB2YXIgcG9zID0gdXJsLmluZGV4T2Yo
IjovLyIpOworICBpZiAocG9zID49IDApIHsKKyAgICB1cmwgPSB1cmwuc3Vic3RyKHBvcyArIDMp
OworICB9CisgIHZhciBwYXJ0cyA9IHVybC5zcGxpdCgnLycpOworICByZXR1cm4gcGFydHNbMF07
Cit9CisKKy8vIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgbGFzdCAyIHdvcmRzIG9mIHRoZSBk
b21haW4gb2YgYSBVUkwKKy8vIFRoaXMgaXMgcHJvYmFibHkgbm90IHRoZSBjb3JyZWN0IGNoZWNr
IGJ1dCBpdCB3aWxsIGRvIGZvciBub3cuCit2YXIgZ2V0QmFzZURvbWFpbiA9IGZ1bmN0aW9uKGhv
c3QpIHsKKyAgdmFyIHBhcnRzID0gaG9zdC5zcGxpdCgiOiIpOworICB2YXIgaG9zdG5hbWUgPSBw
YXJ0c1swXTsKKyAgdmFyIHBvcnQgPSBwYXJ0c1sxXSB8fCAiODAiOworICBwYXJ0cyA9IGhvc3Ru
YW1lLnNwbGl0KCIuIik7CisgIGlmKHBhcnRzLmxlbmd0aCA8IDIpCisgICAgcmV0dXJuIGhvc3Ru
YW1lICsgIjoiICsgcG9ydDsKKyAgdmFyIHRsZCA9IHBhcnRzW3BhcnRzLmxlbmd0aC0xXTsKKyAg
dmFyIGRvbWFpbiA9IHBhcnRzW3BhcnRzLmxlbmd0aC0yXTsKKyAgcmV0dXJuIGRvbWFpbiArICIu
IiArIHRsZCArICI6IiArIHBvcnQ7Cit9CisKK3ZhciBydW5uaW5nT25Mb2NhbGhvc3QgPSBmdW5j
dGlvbigpIHsKKyAgbGV0IGhvc3RuYW1lID0gd2luZG93LmxvY2F0aW9uLmhvc3RuYW1lOworICBy
ZXR1cm4gaG9zdG5hbWUgPT0gImxvY2FsaG9zdCIgfHwKKyAgICBob3N0bmFtZSA9PSAiMTI3LjAu
MC4xIiB8fAorICAgIGhvc3RuYW1lID09ICI6OjEiOworfQorCit2YXIgZ2V0TG9jYWxDcm9zc09y
aWdpbiA9IGZ1bmN0aW9uKCkgeworICB2YXIgZG9tYWluOworICBpZiAod2luZG93LmxvY2F0aW9u
Lmhvc3QuaW5kZXhPZigibG9jYWxob3N0IikgIT0gLTEpIHsKKyAgICAvLyBUT0RPKGticik6IGZp
Z3VyZSBvdXQgd2hldGhlciB0byB1c2UgYW4gSVB2NiBsb29wYmFjayBhZGRyZXNzLgorICAgIGRv
bWFpbiA9ICIxMjcuMC4wLjEiOworICB9IGVsc2UgeworICAgIGRvbWFpbiA9ICJsb2NhbGhvc3Qi
OworICB9CisKKyAgdmFyIHBvcnQgPSB3aW5kb3cubG9jYXRpb24ucG9ydCB8fCAiODAiOworICBy
ZXR1cm4gd2luZG93LmxvY2F0aW9uLnByb3RvY29sICsgIi8vIiArIGRvbWFpbiArICI6IiArIHBv
cnQKK30KKwordmFyIGdldFJlbGF0aXZlUGF0aCA9IGZ1bmN0aW9uKHBhdGgpIHsKKyAgdmFyIHJl
bHBhcnRzID0gd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lLnNwbGl0KCIvIik7CisgIHJlbHBhcnRz
LnBvcCgpOyAvLyBQb3Agb2ZmIGZpbGVuYW1lCisgIHZhciBwYXRocGFydHMgPSBwYXRoLnNwbGl0
KCIvIik7CisKKyAgdmFyIGk7CisgIGZvciAoaSA9IDA7IGkgPCBwYXRocGFydHMubGVuZ3RoOyAr
K2kpIHsKKyAgICBzd2l0Y2ggKHBhdGhwYXJ0c1tpXSkgeworICAgICAgY2FzZSAiIjogYnJlYWs7
CisgICAgICBjYXNlICIuIjogYnJlYWs7CisgICAgICBjYXNlICIuLiI6CisgICAgICAgIHJlbHBh
cnRzLnBvcCgpOworICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIHJlbHBh
cnRzLnB1c2gocGF0aHBhcnRzW2ldKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICB9CisKKyAg
cmV0dXJuIHJlbHBhcnRzLmpvaW4oIi8iKTsKK30KKworYXN5bmMgZnVuY3Rpb24gbG9hZENyb3Nz
T3JpZ2luSW1hZ2UoaW1nLCB3ZWJVcmwsIGxvY2FsVXJsKSB7CisgIGlmIChydW5uaW5nT25Mb2Nh
bGhvc3QoKSkgeworICAgIGltZy5zcmMgPSBnZXRMb2NhbENyb3NzT3JpZ2luKCkgKyBnZXRSZWxh
dGl2ZVBhdGgobG9jYWxVcmwpOworICAgIGNvbnNvbGUubG9nKCdbbG9hZENyb3NzT3JpZ2luSW1h
Z2VdJywgJyAgdHJ5aW5nJywgaW1nLnNyYyk7CisgICAgYXdhaXQgaW1nLmRlY29kZSgpOworICAg
IHJldHVybjsKKyAgfQorCisgIHRyeSB7CisgICAgaW1nLnNyYyA9IGdldFVybE9wdGlvbnMoKS5p
bWdVcmwgfHwgd2ViVXJsOworICAgIGNvbnNvbGUubG9nKCdbbG9hZENyb3NzT3JpZ2luSW1hZ2Vd
JywgJ3RyeWluZycsIGltZy5zcmMpOworICAgIGF3YWl0IGltZy5kZWNvZGUoKTsKKyAgICByZXR1
cm47CisgIH0gY2F0Y2gge30KKworICB0aHJvdyAnY3JlYXRlQ3Jvc3NPcmlnaW5JbWFnZSBmYWls
ZWQnOworfQorCisvKioKKyAqIENvbnZlcnQgc1JHQiBjb2xvciB0byBsaW5lYXIgY29sb3IuCisg
KiBAcGFyYW0geyFBcnJheS48bnVtYmVyPn0gY29sb3IgVGhlIGNvbG9yIHRvIGJlIGNvbnZlcnRl
ZC4KKyAqICAgICAgICBUaGUgYXJyYXkgaGFzIDQgZWxlbWVudHMsIGZvciBleGFtcGxlIFtSLCBH
LCBCLCBBXS4KKyAqICAgICAgICB3aGVyZSBlYWNoIGVsZW1lbnQgaXMgaW4gdGhlIHJhbmdlIDAg
dG8gMjU1LgorICogQHJldHVybiB7IUFycmF5LjxudW1iZXI+fSBjb2xvciBUaGUgY29sb3IgdG8g
YmUgY29udmVydGVkLgorICogICAgICAgIFRoZSBhcnJheSBoYXMgNCBlbGVtZW50cywgZm9yIGV4
YW1wbGUgW1IsIEcsIEIsIEFdLgorICogICAgICAgIHdoZXJlIGVhY2ggZWxlbWVudCBpcyBpbiB0
aGUgcmFuZ2UgMCB0byAyNTUuCisgKi8KK3ZhciBzUkdCVG9MaW5lYXIgPSBmdW5jdGlvbihjb2xv
cikgeworICAgIHJldHVybiBbc1JHQkNoYW5uZWxUb0xpbmVhcihjb2xvclswXSksCisgICAgICAg
ICAgICBzUkdCQ2hhbm5lbFRvTGluZWFyKGNvbG9yWzFdKSwKKyAgICAgICAgICAgIHNSR0JDaGFu
bmVsVG9MaW5lYXIoY29sb3JbMl0pLAorICAgICAgICAgICAgY29sb3JbM11dCit9CisKKy8qKgor
ICogQ29udmVydCBsaW5lYXIgY29sb3IgdG8gc1JHQiBjb2xvci4KKyAqIEBwYXJhbSB7IUFycmF5
LjxudW1iZXI+fSBjb2xvciBUaGUgY29sb3IgdG8gYmUgY29udmVydGVkLgorICogICAgICAgIFRo
ZSBhcnJheSBoYXMgNCBlbGVtZW50cywgZm9yIGV4YW1wbGUgW1IsIEcsIEIsIEFdLgorICogICAg
ICAgIHdoZXJlIGVhY2ggZWxlbWVudCBpcyBpbiB0aGUgcmFuZ2UgMCB0byAyNTUuCisgKiBAcmV0
dXJuIHshQXJyYXkuPG51bWJlcj59IGNvbG9yIFRoZSBjb2xvciB0byBiZSBjb252ZXJ0ZWQuCisg
KiAgICAgICAgVGhlIGFycmF5IGhhcyA0IGVsZW1lbnRzLCBmb3IgZXhhbXBsZSBbUiwgRywgQiwg
QV0uCisgKiAgICAgICAgd2hlcmUgZWFjaCBlbGVtZW50IGlzIGluIHRoZSByYW5nZSAwIHRvIDI1
NS4KKyAqLwordmFyIGxpbmVhclRvU1JHQiA9IGZ1bmN0aW9uKGNvbG9yKSB7CisgICAgcmV0dXJu
IFtsaW5lYXJDaGFubmVsVG9TUkdCKGNvbG9yWzBdKSwKKyAgICAgICAgICAgIGxpbmVhckNoYW5u
ZWxUb1NSR0IoY29sb3JbMV0pLAorICAgICAgICAgICAgbGluZWFyQ2hhbm5lbFRvU1JHQihjb2xv
clsyXSksCisgICAgICAgICAgICBjb2xvclszXV0KK30KKworZnVuY3Rpb24gc1JHQkNoYW5uZWxU
b0xpbmVhcih2YWx1ZSkgeworICAgIHZhbHVlID0gdmFsdWUgLyAyNTU7CisgICAgaWYgKHZhbHVl
IDw9IDAuMDQwNDUpCisgICAgICAgIHZhbHVlID0gdmFsdWUgLyAxMi45MjsKKyAgICBlbHNlCisg
ICAgICAgIHZhbHVlID0gTWF0aC5wb3coKHZhbHVlICsgMC4wNTUpIC8gMS4wNTUsIDIuNCk7Cisg
ICAgcmV0dXJuIE1hdGgudHJ1bmModmFsdWUgKiAyNTUgKyAwLjUpOworfQorCitmdW5jdGlvbiBs
aW5lYXJDaGFubmVsVG9TUkdCKHZhbHVlKSB7CisgICAgdmFsdWUgPSB2YWx1ZSAvIDI1NTsKKyAg
ICBpZiAodmFsdWUgPD0gMC4wKSB7CisgICAgICAgIHZhbHVlID0gMC4wOworICAgIH0gZWxzZSBp
ZiAodmFsdWUgPCAwLjAwMzEzMDgpIHsKKyAgICAgICAgdmFsdWUgPSB2YWx1ZSAqIDEyLjkyOwor
ICAgIH0gZWxzZSBpZiAodmFsdWUgPCAxKSB7CisgICAgICAgIHZhbHVlID0gTWF0aC5wb3codmFs
dWUsIDAuNDE2NjYpICogMS4wNTUgLSAwLjA1NTsKKyAgICB9IGVsc2UgeworICAgICAgICB2YWx1
ZSA9IDEuMDsKKyAgICB9CisgICAgcmV0dXJuIE1hdGgudHJ1bmModmFsdWUgKiAyNTUgKyAwLjUp
OworfQorCitmdW5jdGlvbiBjb21wYXJlUGl4ZWxzKGNtcCwgcmVmLCB0b2xlcmFuY2UsIGRpZmYp
IHsKKyAgICBpZiAoY21wLmxlbmd0aCAhPSByZWYubGVuZ3RoKSB7CisgICAgICAgIHRlc3RGYWls
ZWQoImludmFsaWQgcGl4ZWwgc2l6ZS4iKTsKKyAgICB9CisKKyAgICB2YXIgY291bnQgPSAwOwor
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY21wLmxlbmd0aDsgaSsrKSB7CisgICAgICAgIGlmIChk
aWZmKSB7CisgICAgICAgICAgICBkaWZmW2kgKiA0XSA9IDA7CisgICAgICAgICAgICBkaWZmW2kg
KiA0ICsgMV0gPSAyNTU7CisgICAgICAgICAgICBkaWZmW2kgKiA0ICsgMl0gPSAwOworICAgICAg
ICAgICAgZGlmZltpICogNCArIDNdID0gMjU1OworICAgICAgICB9CisgICAgICAgIGlmIChNYXRo
LmFicyhjbXBbaSAqIDRdIC0gcmVmW2kgKiA0XSkgPiB0b2xlcmFuY2UgfHwKKyAgICAgICAgICAg
IE1hdGguYWJzKGNtcFtpICogNCArIDFdIC0gcmVmW2kgKiA0ICsgMV0pID4gdG9sZXJhbmNlIHx8
CisgICAgICAgICAgICBNYXRoLmFicyhjbXBbaSAqIDQgKyAyXSAtIHJlZltpICogNCArIDJdKSA+
IHRvbGVyYW5jZSB8fAorICAgICAgICAgICAgTWF0aC5hYnMoY21wW2kgKiA0ICsgM10gLSByZWZb
aSAqIDQgKyAzXSkgPiB0b2xlcmFuY2UpIHsKKyAgICAgICAgICAgIGlmIChjb3VudCA8IDEwKSB7
CisgICAgICAgICAgICAgICAgdGVzdEZhaWxlZCgiUGl4ZWwgIiArIGkgKyAiOiBleHBlY3RlZCAo
IiArCisgICAgICAgICAgICAgICAgW3JlZltpICogNF0sIHJlZltpICogNCArIDFdLCByZWZbaSAq
IDQgKyAyXSwgcmVmW2kgKiA0ICsgM11dICsgIiksIGdvdCAoIiArCisgICAgICAgICAgICAgICAg
W2NtcFtpICogNF0sIGNtcFtpICogNCArIDFdLCBjbXBbaSAqIDQgKyAyXSwgY21wW2kgKiA0ICsg
M11dICsgIikiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNvdW50Kys7CisgICAgICAg
ICAgICBpZiAoZGlmZikgeworICAgICAgICAgICAgICAgIGRpZmZbaSAqIDRdID0gMjU1OworICAg
ICAgICAgICAgICAgIGRpZmZbaSAqIDQgKyAxXSA9IDA7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9CisKKyAgICByZXR1cm4gY291bnQ7Cit9CisKK2Z1bmN0aW9uIGRlc3Ryb3lDb250
ZXh0KGdsKSB7CisgIGdsLmNhbnZhcy53aWR0aCA9IDE7CisgIGdsLmNhbnZhcy5oZWlnaHQgPSAx
OworICBjb25zdCBleHQgPSBnbC5nZXRFeHRlbnNpb24oJ1dFQkdMX2xvc2VfY29udGV4dCcpOwor
ICBpZiAoZXh0KSB7CisgICAgZXh0Lmxvc2VDb250ZXh0KCk7CisgIH0KK30KKworZnVuY3Rpb24g
ZGVzdHJveUFsbENvbnRleHRzKCkgeworICBpZiAoIXdpbmRvdy5fd3R1X2NvbnRleHRzKQorICAg
IHJldHVybjsKKyAgZm9yIChjb25zdCB4IG9mIHdpbmRvdy5fd3R1X2NvbnRleHRzKSB7CisgICAg
ZGVzdHJveUNvbnRleHQoeCk7CisgIH0KKyAgd2luZG93Ll93dHVfY29udGV4dHMgPSBbXTsKK30K
KworZnVuY3Rpb24gZGlzcGxheUltYWdlRGlmZihjbXAsIHJlZiwgZGlmZiwgd2lkdGgsIGhlaWdo
dCkgeworICAgIHZhciBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKKworICAg
IHZhciBjbXBJbWcgPSBjcmVhdGVJbWFnZUZyb21QaXhlbChjbXAsIHdpZHRoLCBoZWlnaHQpOwor
ICAgIHZhciByZWZJbWcgPSBjcmVhdGVJbWFnZUZyb21QaXhlbChyZWYsIHdpZHRoLCBoZWlnaHQp
OworICAgIHZhciBkaWZmSW1nID0gY3JlYXRlSW1hZ2VGcm9tUGl4ZWwoZGlmZiwgd2lkdGgsIGhl
aWdodCk7CisgICAgd3R1Lmluc2VydEltYWdlKGRpdiwgIlJlZmVyZW5jZSIsIHJlZkltZyk7Cisg
ICAgd3R1Lmluc2VydEltYWdlKGRpdiwgIlJlc3VsdCIsIGNtcEltZyk7CisgICAgd3R1Lmluc2Vy
dEltYWdlKGRpdiwgIkRpZmZlcmVuY2UiLCBkaWZmSW1nKTsKKworICAgIHZhciBjb25zb2xlID0g
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvbnNvbGUiKTsKKyAgICBjb25zb2xlLmFwcGVuZENo
aWxkKGRpdik7Cit9CisKK2Z1bmN0aW9uIGNyZWF0ZUltYWdlRnJvbVBpeGVsKGJ1Ziwgd2lkdGgs
IGhlaWdodCkgeworICAgIHZhciBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52
YXMiKTsKKyAgICBjYW52YXMud2lkdGggPSB3aWR0aDsKKyAgICBjYW52YXMuaGVpZ2h0ID0gaGVp
Z2h0OworICAgIHZhciBjdHggPSBjYW52YXMuZ2V0Q29udGV4dCgiMmQiKTsKKyAgICB2YXIgaW1n
RGF0YSA9IGN0eC5nZXRJbWFnZURhdGEoMCwgMCwgd2lkdGgsIGhlaWdodCk7CisKKyAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IGJ1Zi5sZW5ndGg7IGkrKykKKyAgICAgICAgaW1nRGF0YS5kYXRhW2ld
ID0gYnVmW2ldOworICAgIGN0eC5wdXRJbWFnZURhdGEoaW1nRGF0YSwgMCwgMCk7CisgICAgdmFy
IGltZyA9IHd0dS5tYWtlSW1hZ2VGcm9tQ2FudmFzKGNhbnZhcyk7CisgICAgcmV0dXJuIGltZzsK
K30KKworYXN5bmMgZnVuY3Rpb24gYXdhaXRUaW1lb3V0KG1zKSB7CisgIGF3YWl0IG5ldyBQcm9t
aXNlKHJlcyA9PiB7CisgICAgc2V0VGltZW91dCgoKSA9PiB7CisgICAgICByZXMoKTsKKyAgICB9
LCBtcyk7CisgIH0pOworfQorCithc3luYyBmdW5jdGlvbiBhd2FpdE9yVGltZW91dChwcm9taXNl
LCBvcHRfdGltZW91dF9tcykgeworICBhc3luYyBmdW5jdGlvbiB0aHJvd09uVGltZW91dChtcykg
eworICAgIGF3YWl0IGF3YWl0VGltZW91dChtcyk7CisgICAgdGhyb3cgJ3RpbWVvdXQnOworICB9
CisKKyAgbGV0IHRpbWVvdXRfbXMgPSBvcHRfdGltZW91dF9tczsKKyAgaWYgKHRpbWVvdXRfbXMg
PT09IHVuZGVmaW5lZCkKKyAgICB0aW1lb3V0X21zID0gNTAwMDsKKworICBhd2FpdCBQcm9taXNl
LnJhY2UoW3Byb21pc2UsIHRocm93T25UaW1lb3V0KHRpbWVvdXRfbXMpXSk7Cit9CisKK3ZhciBB
UEkgPSB7CisgIGFkZFNoYWRlclNvdXJjZTogYWRkU2hhZGVyU291cmNlLAorICBhZGRTaGFkZXJT
b3VyY2VzOiBhZGRTaGFkZXJTb3VyY2VzLAorICBjYW5jZWxBbmltRnJhbWU6IGNhbmNlbEFuaW1G
cmFtZSwKKyAgY3JlYXRlM0RDb250ZXh0OiBjcmVhdGUzRENvbnRleHQsCisgIEdMRXJyb3JFeGNl
cHRpb246IEdMRXJyb3JFeGNlcHRpb24sCisgIGNyZWF0ZTNEQ29udGV4dFdpdGhXcmFwcGVyVGhh
dFRocm93c09uR0xFcnJvcjogY3JlYXRlM0RDb250ZXh0V2l0aFdyYXBwZXJUaGF0VGhyb3dzT25H
TEVycm9yLAorICBjaGVja0FyZWFJbkFuZE91dDogY2hlY2tBcmVhSW5BbmRPdXQsCisgIGNoZWNr
Q2FudmFzOiBjaGVja0NhbnZhcywKKyAgY2hlY2tDYW52YXNSZWN0OiBjaGVja0NhbnZhc1JlY3Qs
CisgIGNoZWNrQ2FudmFzUmVjdENvbG9yOiBjaGVja0NhbnZhc1JlY3RDb2xvciwKKyAgY2hlY2tD
YW52YXNSZWN0czogY2hlY2tDYW52YXNSZWN0cywKKyAgY2hlY2tGbG9hdEJ1ZmZlcjogY2hlY2tG
bG9hdEJ1ZmZlciwKKyAgY2hlY2tUZXh0dXJlU2l6ZTogY2hlY2tUZXh0dXJlU2l6ZSwKKyAgY2xp
cFRvUmFuZ2U6IGNsaXBUb1JhbmdlLAorICBjcmVhdGVDb2xvcmVkVGV4dHVyZTogY3JlYXRlQ29s
b3JlZFRleHR1cmUsCisgIGNyZWF0ZVByb2dyYW06IGNyZWF0ZVByb2dyYW0sCisgIGNsZWFyQW5k
RHJhd1VuaXRRdWFkOiBjbGVhckFuZERyYXdVbml0UXVhZCwKKyAgY2xlYXJBbmREcmF3SW5kZXhl
ZFF1YWQ6IGNsZWFyQW5kRHJhd0luZGV4ZWRRdWFkLAorICBjb21wYXJlUGl4ZWxzOiBjb21wYXJl
UGl4ZWxzLAorICBkZXN0cm95QWxsQ29udGV4dHM6IGRlc3Ryb3lBbGxDb250ZXh0cywKKyAgZGVz
dHJveUNvbnRleHQ6IGRlc3Ryb3lDb250ZXh0LAorICBkaXNwYXRjaFByb21pc2U6IGRpc3BhdGNo
UHJvbWlzZSwKKyAgZGlzcGxheUltYWdlRGlmZjogZGlzcGxheUltYWdlRGlmZiwKKyAgZHJhd1Vu
aXRRdWFkOiBkcmF3VW5pdFF1YWQsCisgIGRyYXdJbmRleGVkUXVhZDogZHJhd0luZGV4ZWRRdWFk
LAorICBkcmF3VUJ5dGVDb2xvclF1YWQ6IGRyYXdVQnl0ZUNvbG9yUXVhZCwKKyAgZHJhd0Zsb2F0
Q29sb3JRdWFkOiBkcmF3RmxvYXRDb2xvclF1YWQsCisgIGR1bW15U2V0UHJvZ3JhbUFuZERyYXdO
b3RoaW5nOiBkdW1teVNldFByb2dyYW1BbmREcmF3Tm90aGluZywKKyAgZHVtcFNoYWRlcnNJbmZv
OiBkdW1wU2hhZGVyc0luZm8sCisgIGVuZHNXaXRoOiBlbmRzV2l0aCwKKyAgZmFpbElmR0xFcnJv
cjogZmFpbElmR0xFcnJvciwKKyAgZmlsbFRleHR1cmU6IGZpbGxUZXh0dXJlLAorICBmcmFtZWJ1
ZmZlclN0YXR1c1Nob3VsZEJlOiBmcmFtZWJ1ZmZlclN0YXR1c1Nob3VsZEJlLAorICBnZXRCeXRl
c1BlckNvbXBvbmVudDogZ2V0Qnl0ZXNQZXJDb21wb25lbnQsCisgIGdldERlZmF1bHQzRENvbnRl
eHRWZXJzaW9uOiBnZXREZWZhdWx0M0RDb250ZXh0VmVyc2lvbiwKKyAgZ2V0RXh0ZW5zaW9uUHJl
Zml4ZWROYW1lczogZ2V0RXh0ZW5zaW9uUHJlZml4ZWROYW1lcywKKyAgZ2V0RXh0ZW5zaW9uV2l0
aEtub3duUHJlZml4ZXM6IGdldEV4dGVuc2lvbldpdGhLbm93blByZWZpeGVzLAorICBnZXRGaWxl
TGlzdEFzeW5jOiBnZXRGaWxlTGlzdEFzeW5jLAorICBnZXRMYXN0RXJyb3I6IGdldExhc3RFcnJv
ciwKKyAgZ2V0UHJlZml4ZWRQcm9wZXJ0eTogZ2V0UHJlZml4ZWRQcm9wZXJ0eSwKKyAgZ2V0U2Ny
aXB0OiBnZXRTY3JpcHQsCisgIGdldFN1cHBvcnRlZEV4dGVuc2lvbldpdGhLbm93blByZWZpeGVz
OiBnZXRTdXBwb3J0ZWRFeHRlbnNpb25XaXRoS25vd25QcmVmaXhlcywKKyAgZ2V0VHlwZWRBcnJh
eUVsZW1lbnRzUGVyUGl4ZWw6IGdldFR5cGVkQXJyYXlFbGVtZW50c1BlclBpeGVsLAorICBnZXRV
cmxBcmd1bWVudHM6IGdldFVybEFyZ3VtZW50cywKKyAgZ2V0VXJsT3B0aW9uczogZ2V0VXJsT3B0
aW9ucywKKyAgZ2V0QXR0cmliTWFwOiBnZXRBdHRyaWJNYXAsCisgIGdldFVuaWZvcm1NYXA6IGdl
dFVuaWZvcm1NYXAsCisgIGdsRW51bVRvU3RyaW5nOiBnbEVudW1Ub1N0cmluZywKKyAgZ2xFcnJv
clNob3VsZEJlOiBnbEVycm9yU2hvdWxkQmUsCisgIGdsVHlwZVRvVHlwZWRBcnJheVR5cGU6IGds
VHlwZVRvVHlwZWRBcnJheVR5cGUsCisgIGhhc0F0dHJpYnV0ZUNhc2VJbnNlbnNpdGl2ZTogaGFz
QXR0cmlidXRlQ2FzZUluc2Vuc2l0aXZlLAorICBpbnNlcnRJbWFnZTogaW5zZXJ0SW1hZ2UsCisg
IGlzV2ViR0wyOiBpc1dlYkdMMiwKKyAgbGlua1Byb2dyYW06IGxpbmtQcm9ncmFtLAorICBsb2Fk
Q3Jvc3NPcmlnaW5JbWFnZTogbG9hZENyb3NzT3JpZ2luSW1hZ2UsCisgIGxvYWRJbWFnZUFzeW5j
OiBsb2FkSW1hZ2VBc3luYywKKyAgbG9hZEltYWdlc0FzeW5jOiBsb2FkSW1hZ2VzQXN5bmMsCisg
IGxvYWRQcm9ncmFtOiBsb2FkUHJvZ3JhbSwKKyAgbG9hZFByb2dyYW1Gcm9tRmlsZTogbG9hZFBy
b2dyYW1Gcm9tRmlsZSwKKyAgbG9hZFByb2dyYW1Gcm9tU2NyaXB0OiBsb2FkUHJvZ3JhbUZyb21T
Y3JpcHQsCisgIGxvYWRQcm9ncmFtRnJvbVNjcmlwdEV4cGVjdEVycm9yOiBsb2FkUHJvZ3JhbUZy
b21TY3JpcHRFeHBlY3RFcnJvciwKKyAgbG9hZFNoYWRlcjogbG9hZFNoYWRlciwKKyAgbG9hZFNo
YWRlckZyb21GaWxlOiBsb2FkU2hhZGVyRnJvbUZpbGUsCisgIGxvYWRTaGFkZXJGcm9tU2NyaXB0
OiBsb2FkU2hhZGVyRnJvbVNjcmlwdCwKKyAgbG9hZFN0YW5kYXJkUHJvZ3JhbTogbG9hZFN0YW5k
YXJkUHJvZ3JhbSwKKyAgbG9hZFN0YW5kYXJkUHJvZ3JhbUFzeW5jOiBsb2FkU3RhbmRhcmRQcm9n
cmFtQXN5bmMsCisgIGxvYWRTdGFuZGFyZFZlcnRleFNoYWRlcjogbG9hZFN0YW5kYXJkVmVydGV4
U2hhZGVyLAorICBsb2FkU3RhbmRhcmRWZXJ0ZXhTaGFkZXJBc3luYzogbG9hZFN0YW5kYXJkVmVy
dGV4U2hhZGVyQXN5bmMsCisgIGxvYWRTdGFuZGFyZEZyYWdtZW50U2hhZGVyOiBsb2FkU3RhbmRh
cmRGcmFnbWVudFNoYWRlciwKKyAgbG9hZFN0YW5kYXJkRnJhZ21lbnRTaGFkZXJBc3luYzogbG9h
ZFN0YW5kYXJkRnJhZ21lbnRTaGFkZXJBc3luYywKKyAgbG9hZFVuaWZvcm1CbG9ja1Byb2dyYW06
IGxvYWRVbmlmb3JtQmxvY2tQcm9ncmFtLAorICBsb2FkVW5pZm9ybUJsb2NrVmVydGV4U2hhZGVy
OiBsb2FkVW5pZm9ybUJsb2NrVmVydGV4U2hhZGVyLAorICBsb2FkVW5pZm9ybUJsb2NrRnJhZ21l
bnRTaGFkZXI6IGxvYWRVbmlmb3JtQmxvY2tGcmFnbWVudFNoYWRlciwKKyAgbG9hZFRleHRGaWxl
QXN5bmM6IGxvYWRUZXh0RmlsZUFzeW5jLAorICBsb2FkVGV4dHVyZTogbG9hZFRleHR1cmUsCisg
IGxvZzogbG9nLAorICBsb2dnaW5nT2ZmOiBsb2dnaW5nT2ZmLAorICBtYWtlQ2hlY2tSZWN0OiBt
YWtlQ2hlY2tSZWN0LAorICBtYWtlSW1hZ2U6IG1ha2VJbWFnZSwKKyAgbWFrZUltYWdlRnJvbUNh
bnZhczogbWFrZUltYWdlRnJvbUNhbnZhcywKKyAgbWFrZVZpZGVvOiBtYWtlVmlkZW8sCisgIGVy
cm9yOiBlcnJvciwKKyAgcnVuRXh0ZW5zaW9uU3VwcG9ydGVkVGVzdDogcnVuRXh0ZW5zaW9uU3Vw
cG9ydGVkVGVzdCwKKyAgc2hhbGxvd0NvcHlPYmplY3Q6IHNoYWxsb3dDb3B5T2JqZWN0LAorICBz
ZXREZWZhdWx0M0RDb250ZXh0VmVyc2lvbjogc2V0RGVmYXVsdDNEQ29udGV4dFZlcnNpb24sCisg
IHNldHVwQ29sb3JRdWFkOiBzZXR1cENvbG9yUXVhZCwKKyAgc2V0dXBQcm9ncmFtOiBzZXR1cFBy
b2dyYW0sCisgIHNldHVwVHJhbnNmb3JtRmVlZGJhY2tQcm9ncmFtOiBzZXR1cFRyYW5zZm9ybUZl
ZWRiYWNrUHJvZ3JhbSwKKyAgc2V0dXBRdWFkOiBzZXR1cFF1YWQsCisgIHNldHVwUXVhZFdpdGhU
ZXhDb29yZHM6IHNldHVwUXVhZFdpdGhUZXhDb29yZHMsCisgIHNldHVwSW5kZXhlZFF1YWQ6IHNl
dHVwSW5kZXhlZFF1YWQsCisgIHNldHVwSW5kZXhlZFF1YWRXaXRoT3B0aW9uczogc2V0dXBJbmRl
eGVkUXVhZFdpdGhPcHRpb25zLAorICBzZXR1cFNpbXBsZUNvbG9yUHJvZ3JhbTogc2V0dXBTaW1w
bGVDb2xvclByb2dyYW0sCisgIHNldHVwU2ltcGxlVGV4dHVyZVByb2dyYW06IHNldHVwU2ltcGxl
VGV4dHVyZVByb2dyYW0sCisgIHNldHVwU2ltcGxlVGV4dHVyZVByb2dyYW1FU1NMMzAwOiBzZXR1
cFNpbXBsZVRleHR1cmVQcm9ncmFtRVNTTDMwMCwKKyAgc2V0dXBTaW1wbGVDdWJlTWFwVGV4dHVy
ZVByb2dyYW06IHNldHVwU2ltcGxlQ3ViZU1hcFRleHR1cmVQcm9ncmFtLAorICBzZXR1cFNpbXBs
ZVZlcnRleENvbG9yUHJvZ3JhbTogc2V0dXBTaW1wbGVWZXJ0ZXhDb2xvclByb2dyYW0sCisgIHNl
dHVwTm9UZXhDb29yZFRleHR1cmVQcm9ncmFtOiBzZXR1cE5vVGV4Q29vcmRUZXh0dXJlUHJvZ3Jh
bSwKKyAgc2V0dXBUZXh0dXJlZFF1YWQ6IHNldHVwVGV4dHVyZWRRdWFkLAorICBzZXR1cFRleHR1
cmVkUXVhZFdpdGhUZXhDb29yZHM6IHNldHVwVGV4dHVyZWRRdWFkV2l0aFRleENvb3JkcywKKyAg
c2V0dXBUZXh0dXJlZFF1YWRXaXRoQ3ViZU1hcDogc2V0dXBUZXh0dXJlZFF1YWRXaXRoQ3ViZU1h
cCwKKyAgc2V0dXBVbml0UXVhZDogc2V0dXBVbml0UXVhZCwKKyAgc2V0RmxvYXREcmF3Q29sb3I6
IHNldEZsb2F0RHJhd0NvbG9yLAorICBzZXRVQnl0ZURyYXdDb2xvcjogc2V0VUJ5dGVEcmF3Q29s
b3IsCisgIHN0YXJ0UGxheWluZ0FuZFdhaXRGb3JWaWRlbzogc3RhcnRQbGF5aW5nQW5kV2FpdEZv
clZpZGVvLAorICBzdGFydHNXaXRoOiBzdGFydHNXaXRoLAorICBzaG91bGRHZW5lcmF0ZUdMRXJy
b3I6IHNob3VsZEdlbmVyYXRlR0xFcnJvciwKKyAgc2hvdWxkVGhyb3c6IHNob3VsZFRocm93LAor
ICByZWFkRmlsZTogcmVhZEZpbGUsCisgIHJlYWRGaWxlTGlzdDogcmVhZEZpbGVMaXN0LAorICBy
ZXBsYWNlUGFyYW1zOiByZXBsYWNlUGFyYW1zLAorICByZXF1ZXN0QW5pbUZyYW1lOiByZXF1ZXN0
QW5pbUZyYW1lLAorICBydW5TdGVwczogcnVuU3RlcHMsCisgIHdhaXRGb3JDb21wb3NpdGU6IHdh
aXRGb3JDb21wb3NpdGUsCisKKyAgLy8gZnVsbHNjcmVlbiBhcGkKKyAgc2V0dXBGdWxsc2NyZWVu
OiBzZXR1cEZ1bGxzY3JlZW4sCisKKyAgLy8gc1JHQiBjb252ZXJ0ZXIgYXBpCisgIHNSR0JUb0xp
bmVhcjogc1JHQlRvTGluZWFyLAorICBsaW5lYXJUb1NSR0I6IGxpbmVhclRvU1JHQiwKKworICBn
ZXRIb3N0OiBnZXRIb3N0LAorICBnZXRCYXNlRG9tYWluOiBnZXRCYXNlRG9tYWluLAorICBydW5u
aW5nT25Mb2NhbGhvc3Q6IHJ1bm5pbmdPbkxvY2FsaG9zdCwKKyAgZ2V0TG9jYWxDcm9zc09yaWdp
bjogZ2V0TG9jYWxDcm9zc09yaWdpbiwKKyAgZ2V0UmVsYXRpdmVQYXRoOiBnZXRSZWxhdGl2ZVBh
dGgsCisgIGF3YWl0T3JUaW1lb3V0OiBhd2FpdE9yVGltZW91dCwKKyAgYXdhaXRUaW1lb3V0OiBh
d2FpdFRpbWVvdXQsCisKKyAgbm9uZTogZmFsc2UKK307CisKK09iamVjdC5kZWZpbmVQcm9wZXJ0
aWVzKEFQSSwgeworICBub1RleENvb3JkVGV4dHVyZVZlcnRleFNoYWRlcjogeyB2YWx1ZTogbm9U
ZXhDb29yZFRleHR1cmVWZXJ0ZXhTaGFkZXIsIHdyaXRhYmxlOiBmYWxzZSB9LAorICBzaW1wbGVU
ZXh0dXJlVmVydGV4U2hhZGVyOiB7IHZhbHVlOiBzaW1wbGVUZXh0dXJlVmVydGV4U2hhZGVyLCB3
cml0YWJsZTogZmFsc2UgfSwKKyAgc2ltcGxlVGV4dHVyZVZlcnRleFNoYWRlckVTU0wzMDA6IHsg
dmFsdWU6IHNpbXBsZVRleHR1cmVWZXJ0ZXhTaGFkZXJFU1NMMzAwLCB3cml0YWJsZTogZmFsc2Ug
fSwKKyAgc2ltcGxlQ29sb3JGcmFnbWVudFNoYWRlcjogeyB2YWx1ZTogc2ltcGxlQ29sb3JGcmFn
bWVudFNoYWRlciwgd3JpdGFibGU6IGZhbHNlIH0sCisgIHNpbXBsZUNvbG9yRnJhZ21lbnRTaGFk
ZXJFU1NMMzAwOiB7IHZhbHVlOiBzaW1wbGVDb2xvckZyYWdtZW50U2hhZGVyRVNTTDMwMCwgd3Jp
dGFibGU6IGZhbHNlIH0sCisgIHNpbXBsZVZlcnRleFNoYWRlcjogeyB2YWx1ZTogc2ltcGxlVmVy
dGV4U2hhZGVyLCB3cml0YWJsZTogZmFsc2UgfSwKKyAgc2ltcGxlVmVydGV4U2hhZGVyRVNTTDMw
MDogeyB2YWx1ZTogc2ltcGxlVmVydGV4U2hhZGVyRVNTTDMwMCwgd3JpdGFibGU6IGZhbHNlIH0s
CisgIHNpbXBsZVRleHR1cmVGcmFnbWVudFNoYWRlcjogeyB2YWx1ZTogc2ltcGxlVGV4dHVyZUZy
YWdtZW50U2hhZGVyLCB3cml0YWJsZTogZmFsc2UgfSwKKyAgc2ltcGxlVGV4dHVyZUZyYWdtZW50
U2hhZGVyRVNTTDMwMDogeyB2YWx1ZTogc2ltcGxlVGV4dHVyZUZyYWdtZW50U2hhZGVyRVNTTDMw
MCwgd3JpdGFibGU6IGZhbHNlIH0sCisgIHNpbXBsZUhpZ2hQcmVjaXNpb25UZXh0dXJlRnJhZ21l
bnRTaGFkZXI6IHsgdmFsdWU6IHNpbXBsZUhpZ2hQcmVjaXNpb25UZXh0dXJlRnJhZ21lbnRTaGFk
ZXIsIHdyaXRhYmxlOiBmYWxzZSB9LAorICBzaW1wbGVDdWJlTWFwVGV4dHVyZUZyYWdtZW50U2hh
ZGVyOiB7IHZhbHVlOiBzaW1wbGVDdWJlTWFwVGV4dHVyZUZyYWdtZW50U2hhZGVyLCB3cml0YWJs
ZTogZmFsc2UgfSwKKyAgc2ltcGxlVmVydGV4Q29sb3JGcmFnbWVudFNoYWRlcjogeyB2YWx1ZTog
c2ltcGxlVmVydGV4Q29sb3JGcmFnbWVudFNoYWRlciwgd3JpdGFibGU6IGZhbHNlIH0sCisgIHNp
bXBsZVZlcnRleENvbG9yVmVydGV4U2hhZGVyOiB7IHZhbHVlOiBzaW1wbGVWZXJ0ZXhDb2xvclZl
cnRleFNoYWRlciwgd3JpdGFibGU6IGZhbHNlIH0KK30pOworCityZXR1cm4gQVBJOworCit9KCkp
OwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ2wvcGVuZGluZy9yZXNvdXJjZXMvd2ViZ2xf
dGVzdF9maWxlcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MgYi9MYXlvdXRUZXN0cy93ZWJn
bC9wZW5kaW5nL3Jlc291cmNlcy93ZWJnbF90ZXN0X2ZpbGVzL3Jlc291cmNlcy9qcy10ZXN0LXN0
eWxlLmNzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi41ZjY4MzliNjIxNDc3M2IwYTAwYmM4YTJiM2I2MmFjZjY0ZGMx
ZGVlCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ2wvcGVuZGluZy9yZXNvdXJj
ZXMvd2ViZ2xfdGVzdF9maWxlcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MKQEAgLTAsMCAr
MSwyMCBAQAorLnBhc3MgeworICAgIGZvbnQtd2VpZ2h0OiBib2xkOworICAgIGNvbG9yOiBncmVl
bjsKK30KKy5mYWlsIHsKKyAgICBmb250LXdlaWdodDogYm9sZDsKKyAgICBjb2xvcjogcmVkOwor
fQorLndhcm4geworICAgIGZvbnQtd2VpZ2h0OiBib2xkOworICAgIGNvbG9yOiB5ZWxsb3c7Cisg
ICAgdGV4dC1zaGFkb3c6IDFweCAxcHggI2ZmMDAwMAorfQorI2NvbnNvbGUgeworICAgIHdoaXRl
LXNwYWNlOiBwcmUtd3JhcDsKKyAgICBmb250LWZhbWlseTogbW9ub3NwYWNlOworfQorYm9keSB7
CisgICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZmZmZjsKK30KZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL3dlYmdsL3BlbmRpbmcvcmVzb3VyY2VzL3dlYmtpdC13ZWJnbC10ZXN0LWhhcm5lc3MuanMg
Yi9MYXlvdXRUZXN0cy93ZWJnbC9wZW5kaW5nL3Jlc291cmNlcy93ZWJraXQtd2ViZ2wtdGVzdC1o
YXJuZXNzLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM4NjE1YmU1MDBhYjdlOTY4OWQyM2VlZmVlYzFjZmM2YzQw
OTQwMmUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJnbC9wZW5kaW5nL3Jlc291
cmNlcy93ZWJraXQtd2ViZ2wtdGVzdC1oYXJuZXNzLmpzCkBAIC0wLDAgKzEsNzcgQEAKKyJ1c2Ug
c3RyaWN0IjsKKyhmdW5jdGlvbigpIHsKKyAgdmFyIG51bUZhaWx1cmVzID0gMDsKKyAgdmFyIHJl
c3VsdHNMaXN0ID0gbnVsbDsKKyAgdmFyIHJlc3VsdE51bSA9IDE7CisKKyAgaWYgKHdpbmRvdy50
ZXN0UnVubmVyICYmICF3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICB3aW5kb3cu
bGF5b3V0VGVzdENvbnRyb2xsZXIgPSB3aW5kb3cudGVzdFJ1bm5lcjsKKyAgfQorCisgIGlmICh3
aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5k
dW1wQXNUZXh0KCk7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOwor
CisgICAgLy8gVHVybiBvZmYgY29uc29sZSBtZXNzYWdlcyBiZWNhdXNlIGZvciB0aGUgV2ViR0wg
dGVzdHMgdGhleSBhcmUKKyAgICAvLyBHUFUgY2FwYWJpbGl0eSBkZXBlbmRlbnQuCisgICAgd2lu
ZG93LmNvbnNvbGUubG9nID0gZnVuY3Rpb24oKSB7IH07CisgICAgd2luZG93LmNvbnNvbGUuZXJy
b3IgPSBmdW5jdGlvbigpIHsgfTsKKyAgfQorCisKKyAgaWYgKHdpbmRvdy5pbnRlcm5hbHMpIHsK
KyAgICB3aW5kb3cuaW50ZXJuYWxzLnNldHRpbmdzLnNldFdlYkdMRXJyb3JzVG9Db25zb2xlRW5h
YmxlZChmYWxzZSk7CisgIH0KKworICB2YXIgbGlzdCA9IGZ1bmN0aW9uKG1zZywgY29sb3IpIHsK
KyAgICBpZiAoIXJlc3VsdHNMaXN0KSB7CisgICAgICByZXN1bHRzTGlzdCA9IGRvY3VtZW50LmNy
ZWF0ZUVsZW1lbnQoInVsIik7CisgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicmVzdWx0
IikuYXBwZW5kQ2hpbGQocmVzdWx0c0xpc3QpOworICAgIH0KKworICAgIHZhciBpdGVtID0gZG9j
dW1lbnQuY3JlYXRlRWxlbWVudCgibGkiKTsKKyAgICBpdGVtLmFwcGVuZENoaWxkKGRvY3VtZW50
LmNyZWF0ZVRleHROb2RlKG1zZykpOworICAgIGlmIChjb2xvcikgeworICAgICAgaXRlbS5zdHls
ZS5jb2xvciA9IGNvbG9yOworICAgIH0KKworICAgIHJlc3VsdHNMaXN0LmFwcGVuZENoaWxkKGl0
ZW0pOworICB9CisKKyAgdmFyIGxvZyA9IGZ1bmN0aW9uKG1zZywgY29sb3IpIHsKKyAgICB2YXIg
ZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CisgICAgZGl2LmFwcGVuZENoaWxk
KGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKG1zZykpOworICAgIGlmIChjb2xvcikgeworICAgICAg
ZGl2LnN0eWxlLmNvbG9yID0gY29sb3I7CisgICAgfQorICAgIGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCJyZXN1bHQiKS5hcHBlbmRDaGlsZChkaXYpOworICB9OworCisgIHdpbmRvdy53ZWJnbFRl
c3RIYXJuZXNzID0geworICAgIHJlcG9ydFJlc3VsdHM6IGZ1bmN0aW9uKHVybCwgc3VjY2Vzcywg
bXNnKSB7CisgICAgICBpZiAoc3VjY2VzcykgeworICAgICAgICBsaXN0KGBbICR7cmVzdWx0TnVt
fTogUEFTUyBdICR7bXNnfWAsICJncmVlbiIpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgbGlz
dChgWyAke3Jlc3VsdE51bX06IEZBSUwgXSAke21zZ31gLCAicmVkIik7CisgICAgICAgICsrbnVt
RmFpbHVyZXM7CisgICAgICB9CisKKyAgICAgICsrcmVzdWx0TnVtOworICAgIH0sCisKKyAgICBu
b3RpZnlGaW5pc2hlZDogZnVuY3Rpb24odXJsKSB7CisgICAgICB2YXIgaWZyYW1lID0gZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoImlmcmFtZSIpOworICAgICAgaWYgKG51bUZhaWx1cmVzID4gMCkg
eworICAgICAgICBsb2coYFsgRkFJTCBdICR7bnVtRmFpbHVyZXN9IGZhaWx1cmVzIHJlcG9ydGVk
YCwgInJlZCIpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgcmVzdWx0c0xpc3QuaW5uZXJIVE1M
ID0gIiI7CisgICAgICAgIGlmcmFtZS5pbm5lckhUTUwgPSAiIjsKKyAgICAgICAgbG9nKCJbIFBB
U1MgXSBBbGwgdGVzdHMgcGFzc2VkIiwgImdyZWVuIik7CisgICAgICB9CisKKyAgICAgIGlmICh3
aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xs
ZXIubm90aWZ5RG9uZSgpOworICAgICAgfQorICAgIH0sCisgIH0KK30oKSk7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>