functions for flat file import/export + utilities

Jens Oehlschlägel-Akiyoshi jens.oehlschlaegel-akiyoshi@mdfactory.de
Wed, 12 Jan 2000 18:03:50 +0100


This is a multi-part message in MIME format.

------=_NextPart_000_0004_01BF5D27.62306630
Content-Type: text/plain;
	charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
X-MIME-Autoconverted: from 8bit to quoted-printable by hermes.mdfactory.de id SAA07714



Dear R-Developers,

please find attached a set of drafted functions for flat file import and
export, partially extending existing functions, partially completely writ=
ten
as new code.
I thought you might be interested in those functions and the accompanying
utilities for padding and trimming.

Main features are

- supports several formats, i.e. fixed width and CSV (with one exception)
- supports templates describing relevant features of the flat file data,
including attributes of data.frame columns, storage.mode etc.
- special handling of factors and logicals
- handling of special characters like decimal seperator and escaped
quotation mark
- no perl and no seperator needed for fixed width format (and no problems
with quotation marks)
- reading fixed width format is based on simple function read.char.cols()=
,
which can be implemented more memory efficient in C

However, these functions are written from the perspective of a
non-R-developer, of course one could do it better. Also I don't know if i=
t
is a good idea traing to keep some compatibility (and naming) to
read.table() and write.table(), or if it is better to optimize new soluti=
ons
with new naming. I have done some testing, but of course there may be bug=
s
in it.

Having said this I would appreciate any feedback, criticisms, suggestions
for improvements, ...
Regards


--
Dr. Jens Oehlschl=E4gel-Akiyoshi
MD FACTORY GmbH
Bayerstrasse 21

80335 M=FCnchen

Tel.: 089 545 28-27
Fax.: 089 545 28-10
http://www.mdfactory.de

Standard Disclaimers: Opinions expressed here are personal
and are not otherwise represented.



------=_NextPart_000_0004_01BF5D27.62306630
Content-Type: application/octet-stream;
	name="flatfile.r"
Content-Disposition: attachment;
	filename="flatfile.r"
Content-Transfer-Encoding: base64

IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgVGhpcyBpcyBhIGRyYWZ0IGZvciBhIHN1aXRlIG9mIFIg
ZnVuY3Rpb25zIGZvciBpbnRlcmZhY2luZyBmbGF0IGZpbGVzCiMgaW5jbHVkaW5nIHV0aWxpdGll
cyBmb3Igc3RyaW5nIGhhbmRsaW5nCiMgKEdOVSkgQ29weXJpZ2h0IE1EIEZBQ1RPUlksIEplbnMg
T2VobHNjaGyEZ2VsLUFraXlvc2hpIChKT0EpCiMgQ3JlYXRlZCAgICAgMTIuMS4yMDAwCiMgTGFz
dCBjaGFuZ2UgMTIuMS4yMDAwCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKCiMjIGdlbmVyYWwgc3Ry
YXRlZ3kgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIwojIHdyaXRlIGZ1bmN0aW9ucyAKIyAgIHRha2UgYSBkYXRhLmZyYW1lIFthbmQgc3Bl
Y2lmaWNhdGlvbnNdCiMgICB3cml0ZSBhIGZpbGUgYXMgc2lkZSBlZmZlY3QKIyAgIHJldHVybiBh
IHRlbXBsYXRlIGRlc2NyaWJpbmcgdGhlIHdyaXR0ZW4gZmlsZQojICAgICBpbmNsdWRpbmcgc3Rv
cmFnZS5tb2RlIGFuZCBhdHRyaWJ1dGVzIGZvciBlYWNoIGNvbHVtbgojICAgICBzbyB0aGF0IHJl
aW1wb3J0aW5nIHRoZSBmaWxlIHVzaW5nIHRoZSB0ZW1wbGF0ZSBnaXZlcyBhbiBpZC4gZGF0YS5m
cmFtZQojICAgICAoZXhjZXB0IGZvciBsb3NzIG9mIHByZWNpc2lvbiwgZGVwZW5kaW5nIG9uIGRp
Z2l0cyBpbnZvbHZlZCkKIwojIHJlYWQgZnVuY3Rpb25zIAojICAgdGFrZSBhIHRlbXBsYXRlIGFu
ZC9vciBzcGVjaWZpY2F0aW9ucwojICAgcmV0dXJuIGEgZGF0YS5mcmFtZQojICAgb3B0aW9uYWxs
eSB3aXRoIGEgdGVtcGxhdGUgYXMgYW4gYXR0cmlidXRlCiMKIyBsb2dpY2FscyBhbmQgZmFjdG9y
cyByZWNlaXZlIHNwZWNpYWwgdHJlYXRtZW50CgoKIyMgaGllcmFyY2h5IG9mIGZ1bmN0aW9ucyAj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMKIyBy
ZWFkLmNoYXIuY29scygpICAgZXh0cmFjdGluZyBjaGFyYWN0ZXIgY29sdW1ucyBmcm9tIGZsYXQg
ZmlsZQojICAgICAgICAgICAgICAgICAgICBjdXJyZW50bHkgcHVyZSBSLCBzaG91bGQgdXNlIEMt
ZnVuY3Rpb24gbGF0ZXIgCiMgICAgICAgICAgICAgICAgICAgIHRvIHJlZHVjZSBtZW1vcnkgcmVx
dWlyZW1lbnRzIGJ5IGZhY3RvciAyCiMKIyAgIHdyaXRlLnRhYmxlKCkgICAgZ2VuZXJhbCwgcmV0
dXJuaW5nIGEgY2xhc3MgJ3RlbXBsYXRlJyBvYmplY3QKIyAgICAgd3JpdGUuc3ZzKCkgICAgd3Jh
cHBlciBmdW5jdGlvbiBvZiB3cml0ZS50YWJsZSgpIGZvciBzZXBlcmF0ZWQgdmFsdWUgZm9ybWF0
CiMgICAgIHdyaXRlLmZpeCgpICAgIHdyYXBwZXIgZnVuY3Rpb24gb2Ygd3JpdGUudGFibGUoKSBm
b3IgZml4ZWQgd2lkdGggZm9ybWF0CiMgCiMgICByZWFkLnRhYmxlKCkgICAgIGdlbmVyYWwsIHRh
a2luZyBzcGVjaWZpY2F0aW9ucwojICAgICByZWFkLnN2cygpICAgICB3cmFwcGVyIGZ1bmN0aW9u
IG9mIHJlYWQudGFibGUoKSBmb3Igc2VwZXJhdGVkIHZhbHVlIGZvcm1hdAojICAgICByZWFkLmZp
eCgpICAgICB3cmFwcGVyIGZ1bmN0aW9uIG9mIHJlYWQudGFibGUoKSBmb3IgZml4ZWQgd2lkdGgg
Zm9ybWF0CiMgIAojICAgICByZWFkLmZ3ZigpICAgICBsZXNzIG1lbW9yeSBjb25zdW1pbmcgYWx0
ZXJuYXRpdmUgdG8gcmVhZC5maXgoKQojICAgICAgICAgICAgICAgICAgICBhcyBsb25nIGFzIHJl
YWQuY2hhci5jb2xzIGhhc24ndCBzcGVjaWFsIEMtZnVuY3Rpb24uCiMgICAgICAgICAgICAgICAg
ICAgIEhvd2V2ZXIgcmVhZC5md2YoKSBuZWVkcyBwZWFybCwgdGhlIGRhdGEgbXVzdCBub3QgY29u
dGFpbiBzZXA9LAojICAgICAgICAgICAgICAgICAgICBpdCBwcm92aWRlcyBubyByZWxpYWJsZSBo
YW5kbGluZyBvZiBxdW90YXRpb24gbWFya3MKIyAgICAgICAgICAgICAgICAgICAgKGhhc24ndCBi
ZWVuIGFkYXB0ZWQgeWV0KQojICAKIyAgICAgICByZWFkLnRlbXBsYXRlKCkgICBmb3IgZWFzeSAo
cmUpaW1wb3J0IG9mIEFTQ0lJIGRhdGEgCiMgICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2lm
aWVkIHZpYSBhIHRlbXBsYXRlIG9iamVjdAojICAgICAgIHdyaXRlLnRlbXBsYXRlKCkgIGZvciBl
YXN5IChyZSlleHBvcnQgb2YgQVNDSUkgZGF0YSAKIyAgICAgICAgICAgICAgICAgICAgICAgICBz
cGVjaWZpZWQgdmlhIGEgdGVtcGxhdGUgb2JqZWN0CiMKIyAgICAgICBwcmludC50ZW1wbGF0ZSgp
ICBzaG93cyB0ZW1wbGF0ZSBzcGVjaWZpY2F0aW9ucwojICAKIyAgICAgICAgIHJlYWQoKSAgICAg
ICAgIHBlcmhhcHMgYSBnZW5lcmljIGZ1bmN0aW9uOiBkZiA8LSByZWFkKHRlbXBsYXRlKQojICAg
ICAgICAgd3JpdGUoKSAgICAgICAgcGVyaGFwcyBhIGdlbmVyaWMgZnVuY3Rpb246IHdyaXRlKHRl
bXBsYXRlLCBkZikKIwojIFVUSUxJVElFUzogcGFkKCk7IHJwYWQoKSwgbHBhZCgpLCB0cmltKCks
IHJ0cmltKCksIGx0cmltKCksIHVucXVvdGF0ZSgpCiMKIyBERU1POiBkZW1vLnRlbXBsYXRlKGZp
bGUgPSB0ZW1wZmlsZSgpKQoKCiMjIHRlbXBsYXRlIGRlZmluaXRpb24gIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojICAgdGVtcGxhdGUgPC0g
c3RydWN0dXJlKAojICAgICBsaXN0KAojICAgICAsIGZpbGUgPSBmaWxlICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAjIHBlciBmaWxlIChjaGFyYWN0ZXIpCiMgICAgICwgZW9s
ID0gZW9sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgcGVyIGZpbGUg
KGNoYXJhY3RlcikKIyAgICAgLCBzZXAgPSBzZXAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIyBwZXIgZmlsZSAoY2hhcmFjdGVyKQojICAgICAsIGRlYy5zZXAgPSBkZWMu
c2VwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHBlciBmaWxlIChjaGFyYWN0ZXIp
CiMgICAgICwgbmEuc3RyaW5ncyA9IG5hLnN0cmluZ3MgICAgICAgICAgICAgICAgICAgICAgICAg
ICMgcGVyIGZpbGUsIGJ1dCBhbGxvdyBtb3JlIHRoYW4gb25lIChjaGFyYWN0ZXIgdmVjdG9yKQoj
ICAgICAsIHF1b3RhdGlvbi5tYXJrID0gcXVvdGF0aW9uLm1hcmsgICAgICAgICAgICAgICAgICAj
IHBlciBmaWxlIChjaGFyYWN0ZXIpLCBlLmcuIDwiPiBpbiBDU1YgCiMgICAgICwgZXNjYXBlZC5x
dW90YXRpb24ubWFyayA9IGVzY2FwZWQucXVvdGF0aW9uLm1hcmsgICMgcGVyIGZpbGUgKGNoYXJh
Y3RlciksIGUuZy4gPCIiPiBpbiBDU1YKIyAgICAgLCBsb2dpY2FscyA9IGxvZ2ljYWxzICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIyBwZXIgZmlsZSwgdHdvIHZhbHVlcyByZXByZXNlbnRp
bmcgRkFMU0UgYW5kIFRSVUUgKG51bWVyaWNhbCBvciBjaGFyYWN0ZXIgdmVjdG9yKQojICAgICAs
IGZhY3RvcnMgPSBmYWN0b3JzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHBlciBm
aWxlLCB3ZXRoZXIgZmFjdG9ycyBpbiBmaWxlIGFyZSAnbGV2ZWxzJyBvciAnY29kZXMnIChjaGFy
YWN0ZXIpCiMgICAgICwgcm93Lm5hbWVzLmxvYyA9IHJvdy5uYW1lcy5sb2MgICAgICAgICAgICAg
ICAgICAgICMgcGVyIGZpbGUsIGNvbG5vIG9mIHJvd25hbWVzLCAwID0gbm8gcm93Lm5hbWVzIGlu
IGZpbGUgKGludGVnZXIpCiMgICAgICwgaGVhZGVyID0gaGVhZGVyICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICMgcGVyIGZpbGUsIHdoZXRoZXIgZmlyc3Qgcm93IGlzIGNvbC5uYW1l
cyAobG9naWNhbCkKIyAgICAgLCBzdHJpcC53aGl0ZSA9IHN0cmlwLndoaXRlICAgICAgICAgICAg
ICAgICAgICAgICAgIyBwZXIgZmlsZQojICAgICAsIGNvbC5uYW1lcyA9IGNvbC5uYW1lcyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAjIHBlciBjb2x1bW4sIGluY2x1ZGluZyBjb3JuZXIubmFt
ZSAoY2hhcmFjdGVyIHZlY3RvcikKIyAgICAgLCBxdW90ZSA9IHF1b3RlICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIyBwZXIgY29sdW1uLCB3aGV0aGVyIGNvbHVtbiBpcyBxdW90
ZWQgKGxvZ2ljYWwgdmVjdG9yKQojICAgICAsIHN0b3JhZ2UubW9kZSA9IHN0b3JhZ2UubW9kZSAg
ICAgICAgICAgICAgICAgICAgICAjIHBlciBjb2x1bW4sIChjaGFyYWN0ZXIgdmVjdG9yKQojICAg
ICAsIHdpZHRocyA9IHdpZHRocyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHBl
ciBjb2x1bW4sIGluY2x1ZGluZyByb3cubmFtZXMud2lkdGggKGxpc3Qgb3IgTlVMTCkKIyAgICAg
LCBkaWdpdHMgPSBkaWdpdHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBwZXIg
Y29sdW1uLCAobGlzdCBvciBOVUxMKQojICAgICAsIGF0dHJpYnV0ZXMgPSBhdHRyaWIgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAjIHBlciBjb2x1bW4sIChsaXN0KQojICAgICAsIGV4dGVu
c2lvbi53YXJuaW5nID0gZXh0ZW5zaW9uLndhcm5pbmcgICAgICAgICAgICAjIHBlciBmaWxlLCBU
UlVFL0ZBTFNFIGluZGljYXRlcyB3ZXRoZXIgb3V0IHNwZWNzIGRpZmZlciBmcm9tIGluIHNwZWNz
IAojICAgICAsIHNlcGVyYXRvci53YXJuaW5nID0gc2VwZXJhdG9yLndhcm5pbmcgICAgICAgICAg
ICAjIHBlciBmaWxlLCBUUlVFL0ZBTFNFL05BCiMgICAgICwgcXVvdGF0aW9uLm1hcmsud2Fybmlu
ZyA9IHF1b3RhdGlvbi5tYXJrLndhcm5pbmcgICMgcGVyIGZpbGUsIFRSVUUvRkFMU0UvTkEKIyAg
ICAgKQojICAgLCBjbGFzcz0idGVtcGxhdGUiCiMgICApCgoKCiMgVVRJTElUSUVTICMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IwoKIyBjb21iaW5lcyBycGFkKCkgYW5kIGxwYWQoKQojIGRlZmF1bHQgaXMgZmxhZz0iLSIgPT0g
cnBhZCgpCiMgZGVmYXVsdCBtZXRob2QgJ2FiYnJldmlhdGUnIHVzZXMgYWJicmV2aWF0ZSgpIHRv
IHJlZHVjZSBzdHJpbmdzIGxvbmdlciB0aGFuIHdpZHRoCiMgbWV0aG9kICdleHRlbmQnIGdyYW50
cyBlcXVhbCB3aWR0aHMsIGV4dGVuZGluZyB0byBtYXggd2lkdGgsIGlmIG5lY2Vzc2FyeQojIG1l
dGhvZCAndmFyaWFibGUnIGNvcnJlc3BvbmRzIHRvIHdoYXQgZm9ybWF0LmNoYXIoKSBkb2VzCiMg
bWV0aG9kcyAnbGN1dCcgYW5kICdyY3V0JyBncmFudCBmaXhlZCB3aWR0aCBieSBjdXR0aW5nCiMg
bmVnYXRpdmUgd2lkdGggb3ZlcndyaXRlcyBmbGFnPSctJyB0byBmbGFnPScnIGFzIGluIGZvcm1h
dC5jaGFyKCkKcGFkIDwtIApmdW5jdGlvbiAoeCwgd2lkdGggPSBOVUxMLCBmbGFnPSItIiwgY2hh
cj0iICIsIG1ldGhvZD1jKCJhYmJyZXZpYXRlIiwgInZhcmlhYmxlIiwgImV4dGVuZCIsICJyY3V0
IiwgImxjdXQiKSwgd2Fybj1UUlVFKQp7CgogICAgaWYgKG1ldGhvZD09J2FiYnJldmlhdGUnICYm
IGxlbmd0aCh3aWR0aCk+MSkKICAgICAgc3RvcCgibWV0aG9kPSdhYmJyZXZpYXRlJyBuZWVkcyB3
aWR0aD1jb25zdGFudCIpCgogICAgaWYgKGlzLm51bGwoeCkpIAogICAgICAgIHJldHVybigiIikK
ICAgIGlmICghaXMuY2hhcmFjdGVyKHgpKSB7CiAgICAgICAgd2FybmluZygiY29lcmNpbmcgJ3gn
IHRvICdjaGFyYWN0ZXInIikKICAgICAgICB4IDwtIGFzLmNoYXJhY3Rlcih4KQogICAgfQogICAg
YXQgPC0gYXR0cmlidXRlcyh4KQogICAgbmMgPC0gbmNoYXIoeCkKICAgIG1heG5jIDwtIG1heChu
YykKICAgIGlmIChpcy5udWxsKHdpZHRoKSkgCiAgICAgICAgd2lkdGggPC0gbWF4bmMKICAgIGVs
c2UgaWYgKHdpZHRoIDwgMCkgewogICAgICAgIGZsYWcgPC0gIiIKICAgICAgICB3aWR0aCA8LSAt
d2lkdGgKICAgIH0KICAgIGlmICh3aWR0aDxtYXhuYyl7CiAgICAgIGlmICh3YXJuKQogICAgICAg
IHdhcm5pbmcocGFzdGUoIm1heChuY2hhcih4KSk9IiwgbWF4bmMsICIgPiBhYnMod2lkdGgpPSIs
IHdpZHRoLCBzZXA9IiIpKQogICAgICBpZiAobWV0aG9kPT0ibGN1dCIpewogICAgICAgIHhbbmM+
d2lkdGhdIDwtIHN1YnN0cih4W25jPndpZHRoXSwgKG5jLXdpZHRoKVtuYz53aWR0aF0rMSwgbmNb
bmM+d2lkdGhdKQogICAgICB9ZWxzZSBpZiAobWV0aG9kPT0icmN1dCIpewogICAgICAgIHggPC0g
c3Vic3RyKHgsIDEsIHdpZHRoKQogICAgICB9ZWxzZSBpZiAobWV0aG9kPT0idmFyaWFibGUiKXsK
ICAgICAgICBOVUxMCiAgICAgIH1lbHNlIGlmIChtZXRob2Q9PSJleHRlbmQiKXsKICAgICAgICB3
aWR0aCA8LSBtYXhuYwogICAgICB9ZWxzZSBpZiAobWV0aG9kPT0iYWJicmV2aWF0ZSIpewogICAg
ICAgIHggPC0gYWJicmV2aWF0ZSh4LCB3aWR0aCkKICAgICAgICBpZiAod2FybiAmJiBhbnkobmNo
YXIoeCk+d2lkdGgpKSB3YXJuaW5nKCJhYmJyZXZpYXRlKCkgdmlvbGF0ZWQgd2lkdGgiKQogICAg
ICB9ZWxzZSAKICAgICAgICBzdG9wKCJpbGxlZ2FsIG1ldGhvZCIsIG1ldGhvZCkKICAgIH0KICAg
IG5vIDwtIHBtYXgoMCwgd2lkdGggLSBuYykKICAgIHRhYiA8LSB1bmlxdWUobm8pCiAgICB0YWJw
YWQgPC0gc2FwcGx5KHRhYisxLCBmdW5jdGlvbihubykgcGFzdGUoY2hhcmFjdGVyKG5vKSwgY29s
bGFwc2UgPSBjaGFyKSkKICAgIHBhZCA8LSB0YWJwYWRbbWF0Y2gobm8sIHRhYildCiAgICByIDwt
IGlmIChmbGFnID09ICItIikgCiAgICAgICAgcGFzdGUoeCwgcGFkLCBzZXAgPSAiIikKICAgIGVs
c2UgcGFzdGUocGFkLCB4LCBzZXAgPSAiIikKICAgIGlmICghaXMubnVsbChhdCkpIAogICAgICAg
IGF0dHJpYnV0ZXMocikgPC0gYXQKICAgIHIKfQoKCiMgZGVmYXVsdCBtZXRob2QgaXMgJ3JjdXQn
CiMgLXdpZHRoIG1ha2VzIGxlZnQgcGFkZGluZwpycGFkIDwtIApmdW5jdGlvbiAoeCwgd2lkdGgg
PSBOVUxMLCBjaGFyPSIgIiwgbWV0aG9kPWMoInJjdXQiLCAibGN1dCIsICJ2YXJpYWJsZSIsICJl
eHRlbmQiLCAiYWJicmV2aWF0ZSIpLCB3YXJuPVRSVUUpCnsKICAgIGlmIChtZXRob2Q9PSdhYmJy
ZXZpYXRlJyAmJiBsZW5ndGgod2lkdGgpPjEpCiAgICAgIHN0b3AoIm1ldGhvZD0nYWJicmV2aWF0
ZScgbmVlZHMgd2lkdGg9Y29uc3RhbnQiKQoKICAgIGZsYWcgPC0gIi0iCiAgICBpZiAoaXMubnVs
bCh4KSkgCiAgICAgICAgcmV0dXJuKCIiKQogICAgaWYgKCFpcy5jaGFyYWN0ZXIoeCkpIHsKICAg
ICAgICB3YXJuaW5nKCJjb2VyY2luZyAneCcgdG8gJ2NoYXJhY3RlciciKQogICAgICAgIHggPC0g
YXMuY2hhcmFjdGVyKHgpCiAgICB9CiAgICBhdCA8LSBhdHRyaWJ1dGVzKHgpCiAgICBuYyA8LSBu
Y2hhcih4KQogICAgbWF4bmMgPC0gbWF4KG5jKQogICAgaWYgKGlzLm51bGwod2lkdGgpKSAKICAg
ICAgICB3aWR0aCA8LSBtYXhuYwogICAgZWxzZSBpZiAod2lkdGggPCAwKSB7CiAgICAgICAgZmxh
ZyA8LSAiIgogICAgICAgIHdpZHRoIDwtIC13aWR0aAogICAgfQogICAgaWYgKHdpZHRoPG1heG5j
KXsKICAgICAgaWYgKHdhcm4pCiAgICAgICAgd2FybmluZyhwYXN0ZSgibWF4KG5jaGFyKHgpKT0i
LCBtYXhuYywgIiA+IGFicyh3aWR0aCk9Iiwgd2lkdGgsIHNlcD0iIikpCiAgICAgIGlmIChtZXRo
b2Q9PSJsY3V0Iil7CiAgICAgICAgeFtuYz53aWR0aF0gPC0gc3Vic3RyKHhbbmM+d2lkdGhdLCAo
bmMtd2lkdGgpW25jPndpZHRoXSsxLCBuY1tuYz53aWR0aF0pCiAgICAgIH1lbHNlIGlmIChtZXRo
b2Q9PSJyY3V0Iil7CiAgICAgICAgeCA8LSBzdWJzdHIoeCwgMSwgd2lkdGgpCiAgICAgIH1lbHNl
IGlmIChtZXRob2Q9PSJ2YXJpYWJsZSIpewogICAgICAgIE5VTEwKICAgICAgfWVsc2UgaWYgKG1l
dGhvZD09ImV4dGVuZCIpewogICAgICAgIHdpZHRoIDwtIG1heG5jCiAgICAgIH1lbHNlIGlmICht
ZXRob2Q9PSJhYmJyZXZpYXRlIil7CiAgICAgICAgeCA8LSBhYmJyZXZpYXRlKHgsIHdpZHRoKQog
ICAgICAgIGlmICh3YXJuICYmIGFueShuY2hhcih4KT53aWR0aCkpIHdhcm5pbmcoImFiYnJldmlh
dGUoKSB2aW9sYXRlZCB3aWR0aCIpICAgICAgCiAgICAgIH1lbHNlIAogICAgICAgIHN0b3AoImls
bGVnYWwgbWV0aG9kIiwgbWV0aG9kKQogICAgfQogICAgbm8gPC0gcG1heCgwLCB3aWR0aCAtIG5j
KQogICAgdGFiIDwtIHVuaXF1ZShubykKICAgIHRhYnBhZCA8LSBzYXBwbHkodGFiKzEsIGZ1bmN0
aW9uKG5vKSBwYXN0ZShjaGFyYWN0ZXIobm8pLCBjb2xsYXBzZSA9IGNoYXIpKQogICAgcGFkIDwt
IHRhYnBhZFttYXRjaChubywgdGFiKV0KICAgIHIgPC0gaWYgKGZsYWcgPT0gIi0iKSAKICAgICAg
ICBwYXN0ZSh4LCBwYWQsIHNlcCA9ICIiKQogICAgZWxzZSBwYXN0ZShwYWQsIHgsIHNlcCA9ICIi
KQogICAgaWYgKCFpcy5udWxsKGF0KSkgCiAgICAgICAgYXR0cmlidXRlcyhyKSA8LSBhdAogICAg
cgp9CgoKIyBkZWZhdWx0IG1ldGhvZCBpcyAnbGN1dCcKIyAtd2lkdGggbWFrZXMgcmlndGggcGFk
ZGluZwpscGFkIDwtIApmdW5jdGlvbiAoeCwgd2lkdGggPSBOVUxMLCBjaGFyPSIgIiwgbWV0aG9k
PWMoImxjdXQiLCAicmN1dCIsICJ2YXJpYWJsZSIsICJleHRlbmQiLCAiYWJicmV2aWF0ZSIpLCB3
YXJuPVRSVUUpCnsKICAgIGlmIChtZXRob2Q9PSdhYmJyZXZpYXRlJyAmJiBsZW5ndGgod2lkdGgp
PjEpCiAgICAgIHN0b3AoIm1ldGhvZD0nYWJicmV2aWF0ZScgbmVlZHMgd2lkdGg9Y29uc3RhbnQi
KQoKICAgIGZsYWcgPC0gIiIKICAgIGlmIChpcy5udWxsKHgpKSAKICAgICAgICByZXR1cm4oIiIp
CiAgICBpZiAoIWlzLmNoYXJhY3Rlcih4KSkgewogICAgICAgIHdhcm5pbmcoImNvZXJjaW5nICd4
JyB0byAnY2hhcmFjdGVyJyIpCiAgICAgICAgeCA8LSBhcy5jaGFyYWN0ZXIoeCkKICAgIH0KICAg
IGF0IDwtIGF0dHJpYnV0ZXMoeCkKICAgIG5jIDwtIG5jaGFyKHgpCiAgICBtYXhuYyA8LSBtYXgo
bmMpCiAgICBpZiAoaXMubnVsbCh3aWR0aCkpIAogICAgICAgIHdpZHRoIDwtIG1heG5jCiAgICBl
bHNlIGlmICh3aWR0aCA8IDApIHsKICAgICAgICBmbGFnIDwtICItIgogICAgICAgIHdpZHRoIDwt
IC13aWR0aAogICAgfQogICAgaWYgKHdpZHRoPG1heG5jKXsKICAgICAgaWYgKHdhcm4pCiAgICAg
ICAgd2FybmluZyhwYXN0ZSgibWF4KG5jaGFyKHgpKT0iLCBtYXhuYywgIiA+IGFicyh3aWR0aCk9
Iiwgd2lkdGgsIHNlcD0iIikpCiAgICAgIGlmIChtZXRob2Q9PSJsY3V0Iil7CiAgICAgICAgeFtu
Yz53aWR0aF0gPC0gc3Vic3RyKHhbbmM+d2lkdGhdLCAobmMtd2lkdGgpW25jPndpZHRoXSsxLCBu
Y1tuYz53aWR0aF0pCiAgICAgIH1lbHNlIGlmIChtZXRob2Q9PSJyY3V0Iil7CiAgICAgICAgeCA8
LSBzdWJzdHIoeCwgMSwgd2lkdGgpCiAgICAgIH1lbHNlIGlmIChtZXRob2Q9PSJ2YXJpYWJsZSIp
ewogICAgICAgIE5VTEwKICAgICAgfWVsc2UgaWYgKG1ldGhvZD09ImV4dGVuZCIpewogICAgICAg
IHdpZHRoIDwtIG1heG5jCiAgICAgIH1lbHNlIGlmIChtZXRob2Q9PSJhYmJyZXZpYXRlIil7CiAg
ICAgICAgeCA8LSBhYmJyZXZpYXRlKHgsIHdpZHRoKQogICAgICAgIGlmICh3YXJuICYmIGFueShu
Y2hhcih4KT53aWR0aCkpIHdhcm5pbmcoImFiYnJldmlhdGUoKSB2aW9sYXRlZCB3aWR0aCIpCiAg
ICAgIH1lbHNlIAogICAgICAgIHN0b3AoImlsbGVnYWwgbWV0aG9kIiwgbWV0aG9kKQogICAgfQog
ICAgbm8gPC0gcG1heCgwLCB3aWR0aCAtIG5jKQogICAgdGFiIDwtIHVuaXF1ZShubykKICAgIHRh
YnBhZCA8LSBzYXBwbHkodGFiKzEsIGZ1bmN0aW9uKG5vKSBwYXN0ZShjaGFyYWN0ZXIobm8pLCBj
b2xsYXBzZSA9IGNoYXIpKQogICAgcGFkIDwtIHRhYnBhZFttYXRjaChubywgdGFiKV0KICAgIHIg
PC0gaWYgKGZsYWcgPT0gIi0iKSAKICAgICAgICBwYXN0ZSh4LCBwYWQsIHNlcCA9ICIiKQogICAg
ZWxzZSBwYXN0ZShwYWQsIHgsIHNlcCA9ICIiKQogICAgaWYgKCFpcy5udWxsKGF0KSkgCiAgICAg
ICAgYXR0cmlidXRlcyhyKSA8LSBhdAogICAgcgp9CgojIHRyaW1tcyBib3RoIHNpZGVzCnRyaW0g
PC0gZnVuY3Rpb24odGV4dCwgZHJvcD0nIFx0XG4nKQogIHN1YihwYXN0ZSgnXCheWycsIGRyb3As
ICddKlwpXCguKlteJywgZHJvcCwgJ11cKVwoWycsIGRyb3AsICddKiRcKXxcKF5bJywgZHJvcCwn
XSokXCknLCBzZXA9JycpCiAgICAgICwgJ1xcMicsIHRleHQsIGV4dGVuZGVkPVRSVUUpCgojIHJp
Z2h0IHRyaW0KcnRyaW0gPC0gZnVuY3Rpb24odGV4dCwgZHJvcD0nIFx0XG4nKQogIHN1YihwYXN0
ZSgnXCguKlteJywgZHJvcCwgJ11cKVwoWycsIGRyb3AsICddKiRcKXxcKF5bJywgZHJvcCwnXSok
XCknLCBzZXA9JycpCiAgICAgICwgJ1xcMScsIHRleHQsIGV4dGVuZGVkPVRSVUUpCgojbGVmdCB0
cmltCmx0cmltIDwtIGZ1bmN0aW9uKHRleHQsIGRyb3A9JyBcdFxuJykKICBzdWIocGFzdGUoJ1wo
XlsnLCBkcm9wLCAnXSpcKVwoLipbXicsIGRyb3AsICddXCl8XCheWycsIGRyb3AsJ10qJFwpJywg
c2VwPScnKQogICAgICAsICdcXDInLCB0ZXh0LCBleHRlbmRlZD1UUlVFKQoKI3JlbW92ZXMgb25l
ICgxISkgcGFpciBvZiBxdW90YXRpb24gbWFya3MKdW5xdW90YXRlIDwtIGZ1bmN0aW9uKHRleHQs
IHF1b3RhdGlvbi5tYXJrPSciJykKICBzdWIocGFzdGUoJ1woXicsIHF1b3RhdGlvbi5tYXJrLCAn
XClcKC4qXClcKCcsIHF1b3RhdGlvbi5tYXJrLCAnJFwpJywgc2VwPScnKQogICAgICAsICdcXDIn
CiAgICAgICwgdGV4dAogICAgICAsIGV4dGVuZGVkPVRSVUUpCgoKI2Z1cnRoZXIgdXRpbGl0aWVz
IGFyZSBkZWZpbmVkIHdpdGhpbiBvdGhlciBmdW5jdGlvbnMsIAojIC0gYSBleHRlbmRlZCB2ZXJz
aW9uIG9mIHR5cGUuY29udmVydCgpCiMgLSBhIHNsaWdobHkgbW9kaWZpZWQgdmVyc2lvbiBvZiBz
Y2FuKCkKCgoKIyBmdW5jdGlvbnMgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgoKIyMgU2hhbGwgd2UgaGF2ZSBnZW5lcmlj
cyA/PwpyZWFkIDwtIGZ1bmN0aW9uICh4LCAuLi4pIApVc2VNZXRob2QoInJlYWQiKQoKd3JpdGUu
ZGVmYXVsdCA8LSB3cml0ZQoKd3JpdGUgPC0gZnVuY3Rpb24gKHRlbXBsYXRlLCAuLi4pIApVc2VN
ZXRob2QoIndyaXRlIikKCgoKIyMgTW9kaWZpZWQgdmVyc2lvbiBvZiByZWFkLnRhYmxlKCkgZm9y
CiMjIGhhbmRsaW5nIHdoaXRlIHNwYWNlLCBkZWNpbWFsIHNlcGVyYXRvciwgcXVvdGF0aW9uIG1h
cmtzLCBmaXhlZCB3aWR0aCBpbXBvcnQKIyMgb25seSBvbmUgcmVzdHJpY3Rpb24gYXBwbGllczog
CiMjIGluIG5vbi1maXhlZC13aWR0aCBpbXBvcnQgdGhlIGRhdGEgTVVTVCBOT1QgY29udGFpbiBz
ZXA9CiMjIHRodXMgbm90IGZ1bGx5IENTViBjb21wYXRpYmxlCiMjIHJlbWFya3M6IAojIyAgIG5l
ZWRzIHJlZGVmaW5lZCBzY2FuKCkKIyMgICB0byBpbXBvcnQgQ1NWIGFzIHB1cmUgY2hhcmFjdGVy
IGNvbHVtbnMgdXNlIHNjYW4oKQojIyAgIHRvIGltcG9ydCBmaXhlZCB3aWR0aCBhcyBwdXJlIGNo
YXJhY3RlciBjb2x1bW5zIHVzZSByZWFkLmNoYXIuY29scygpCiMjICAgCiMjIE1vZGlmaWNhdGlv
bnMgKEdOVSkgQ29weXJpZ2h0IEpPQSAxOTk5CnJlYWQudGFibGUgPC0gCmZ1bmN0aW9uIChmaWxl
CiwgaGVhZGVyID0gRkFMU0UgICAgICAgICAgICAgICAjIyBoZWxwIHNob3VsZCBtZW50aW9uLCB0
aGF0IGF1dG9tYXRpY2FsbHkgVFJVRSBpZiBub3Qgc3BlY2lmaWVkIGFuZCBmaXJzdCBsaW5lIGhh
cyBvbmUgdG9rZW4gbW9yZQosIHNlcCA9ICcnICAgICAgICAgICAgICAgICAgICAgIyMgbm93IGZ1
bGx5IGlnbm9yYWJsZSBpZiBmaXhlZCB3aWR0aAosIHJvdy5uYW1lcwosIGNvbC5uYW1lcyAgICAg
ICAgICAgICAgICAgICAgIyMgaGVscCBzaG91bGQgbWVudGlvbiB0aGF0IGhlYWRlciBvdmVyd3Jp
dGVzIGNvbC5uYW1lcwosIGFzLmlzID0gRkFMU0UgICAgICAgICAgICAgICAgIyMgYXMuaXM9VFJV
RSBoYXMgcHJpb3JpdHksIHRodXMgaWdub3JlcyBzdG9yYWdlLm1vZGU9LCBhdHRyaWJ1dGVzPSwg
ZmFjdG9ycz0sIGxvZ2ljYWxzPQosIG5hLnN0cmluZ3MgPSAnTkEnICAgICAgICAgICAgCiwgc2tp
cCA9IDAKLCBubGluZXM9SW5mICAgICAgICAgICAgICAgICAgICMjIG5ldyAoSk9BKTogbWF4IGRh
dGEgbGluZXMgcmVhZAosIGRlYy5zZXAgPSAnLicgICAgICAgICAgICAgICAgIyMgbmV3IChKT0Ep
CiwgcXVvdGF0aW9uLm1hcmsgPSAnIicgICAgICAgICAjIyBuZXcgKEpPQSkKLCBlc2NhcGVkLnF1
b3RhdGlvbi5tYXJrID0gJyInICMjIG5ldyAoSk9BKTogb25seSB1c2VkIGlmIGl0IGRpZmZlcnMg
ZnJvbSBxdW90YXRpb24ubWFyawosIHN0cmlwLndoaXRlID0gVFJVRSAgICAgICAgICAgIyMgbmV3
IChKT0EpOiBzZXQgdG8gRkFMU0UgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkKLCBzdHJpcC5x
dW90YXRpb24ubWFya3MgPSBUUlVFICMjIG5ldyAoSk9BKTogc2V0IHRvIEZBTFNFIGZvciBiYWNr
d2FyZCBjb21wYXRpYmlsaXR5LCBhbHNvIHZlY3RvcnMgYWxsb3dlZAosIHdpZHRocz1OVUxMICAg
ICAgICAgICAgICAgICAgIyMgbmV3IChKT0EpOiBmaXhlZCB3aWR0aDogc2luZ2xlIHdpZHRoICYg
bmNvbHVtbnMgb3IgdmVjdG9yL2xpc3Qgb2Ygd2lkdGhzCiwgc3RhcnQ9TlVMTCAgICAgICAgICAg
ICAgICAgICAjIyBuZXcgKEpPQSk6IGZpeGVkIHdpZHRoOiB2ZWN0b3IvbGlzdCBvZiBjb2x1bW4g
c3RhcnQgcG9zaXRpb25zCiwgc3RvcD1OVUxMICAgICAgICAgICAgICAgICAgICAjIyBuZXcgKEpP
QSk6IGZpeGVkIHdpZHRoOiB2ZWN0b3IvbGlzdCBvZiBjb2x1bW4gc3RvcCBwb3NpdGlvbnMKLCBj
b2xzPW1heChsZW5ndGgod2lkdGhzKSwgbGVuZ3RoKHN0YXJ0KSwgbGVuZ3RoKHN0b3ApKSAjIyBu
ZXcgKEpPQSk6IGZpeGVkIHdpZHRoOiBuZWVkZWQgd2l0aCBzaW5nbGUgd2lkdGgKLCBlb2w9J1xu
JyAgICAgICAgICAgICAgICAgICAgICMjIG5ldyAoSk9BKTogZml4ZWQgd2lkdGggb25seQosIHN0
b3JhZ2UubW9kZSA9IE5VTEwgICAgICAgICAgIyMgbmV3IChKT0EpOiAKLCBhdHRyaWJ1dGVzID0g
TlVMTCAgICAgICAgICAgICMjIG5ldyAoSk9BKTogb25seSBhcHBsaWVkIGlmIHN0b3JhZ2UubW9k
ZT0gc3BlY2lmaWVkLCBmYWN0b3JzPSBhbmQgbG9naWNhbD0gbWF5IGNoYW5nZSBmaW5hbCBhdHRy
aWJ1dGVzCiwgbG9naWNhbHMgPSBOVUxMICAgICAgICAgICAgICAjIyBuZXcgKEpPQSk6IHR3byBj
aGFyYWN0ZXJzIG9yIG51bWJlcnMgZm9yIGMoRkFMU0UsIFRSVUUpCiwgZmFjdG9ycyA9IE5VTEwg
ICAgICAgICAgICAgICAjIyBuZXcgKEpPQSk6ICduZXcnIGlnbm9yZXMgYXR0cmlidXRlcywgJ2xl
dmVscycgdXNlcyBjb2RlcyBmcm9tIGF0dHJpYnV0ZXMsICdjb2RlcycgdXNlcyBsZXZlbHMgZnJv
bSBhdHRyaWJ1dGVzCiwgdGVtcGxhdGUuYXR0cmlidXRlID0gRkFMU0UgICAjIyBuZXcgKEpPQSk6
IHJldHVybmVkIGRhdGEuZnJhbWUgaGFzIHRlbXBsYXRlIGFzIGF0dHJpYnV0ZQopIAp7CiAgICAj
IyMgU3RhcnQgSk9BIGNoYW5nZXMKICAgIAogICAgc3RvcmFnZS5tb2RlcyA8LSBjKCJjaGFyYWN0
ZXIiLCAibG9naWNhbCIsICJpbnRlZ2VyIiwgImRvdWJsZSIsICJjb21wbGV4IikKCiAgICAjbG9n
aWNhbHMKICAgIGlmIChtb2RlKGxvZ2ljYWxzKT09J251bWVyaWMnKQogICAgICBsb2dpY2FscyA8
LSBhcy5pbnRlZ2VyKGxvZ2ljYWxzKQogICAgIyBmYWN0b3JzCiAgICBpZiAoIWlzLm51bGwoZmFj
dG9ycykpCiAgICAgIGZhY3RvcnMgPC0gbWF0Y2guYXJnKGZhY3RvcnMsIGMoImxldmVscyIsICJj
b2RlcyIsICJuZXciKSkKICAgICMgY29tcGFyZSBzZXAgYW5kIGRlYy5zZXAKICAgIGlmIChkZWMu
c2VwPT1zZXApCiAgICAgIHN0b3AoInBhcnNpbmcgcnVsZSB2aW9sYXRpb246IHNlcCBtdXN0IG5v
dCBlcXVhbCBkZWMuc2VwIikKICAgICMgbmEuc3RyaW5ncwogICAgaWYgKGlzLm51bGwobmEuc3Ry
aW5ncykpCiAgICAgIHN0b3AoInNjYW4gY3VycmVudGx5IGRvZXNuJ3QgYWxsb3cgbmEuc3RyaW5n
cz1OVUxMIikKCiAgICAjIyAuSW50ZXJuYWwodHlwZS5jb252ZXJ0KSBjYWxscyBkb190eXBlY3Z0
KCkgd2hpY2ggY2FsbHMgQy1saWJyYXJ5IGZ1bmN0aW9uIHN0cnRvZCgpIHdoaWNoIHVzZXMgJy4n
IGFzIGRlYy5zZXAKICAgICMjIHRodXMgbGV0J3MgcmVwbGFjZSBvdGhlciBkZWMuc2VwIGhlcmUK
ICAgICMjIEluIGNhc2UgYSBnbG9iYWwgb3B0aW9uJGRlYy5zZXAgaXMgaW50cm9kdWNlZCwgdGhp
cyBmaXggbmVlZHMgdG8gYmUgYWRhcHRlZAoKICAgIHR5cGUuY29udmVydCA8LSBmdW5jdGlvbih4
CiAgICAsIG5hLnN0cmluZ3MyID0gbmEuc3RyaW5ncyAgIyBjb25zdGFudCBmb3IgYWxsIGNvbHVt
bnMsIG5hLnN0cmluZ3MgTk9UIHJlcGxhY2VkIGJ5ICdOQScgaW4gc2NhbigpIG9yIHJlYWQuY2hh
ci5jb2xzKCkKICAgICwgYXMuaXMyID0gRkFMU0UKICAgICwgZGVjPWRlYy5zZXAgICAgICAgICAg
ICAgICAjIGNvbnN0YW50IGZvciBhbGwgY29sdW1ucwogICAgLCBzdG9yYWdlLm1vZGUyPU5VTEwK
ICAgICwgYXR0cmlidXRlczI9TlVMTAogICAgLCBsb2dpY2FsczI9bG9naWNhbHMgICAgICAgICAj
IGNvbnN0YW50IGZvciBhbGwgY29sdW1ucwogICAgLCBmYWN0b3JzMj1mYWN0b3JzICAgICAgICAg
ICAjIGNvbnN0YW50IGZvciBhbGwgY29sdW1ucwogICAgKXsgIAogICAgICAgIGlmIChpcy5udWxs
KHN0b3JhZ2UubW9kZTIpKXsgICMjIHRoZSBvbGQgdmVyc2lvbgogICAgICAgICAgaWYgKGRlYyE9
Ii4iKQogICAgICAgICAgICB4IDwtIGdzdWIoZGVjLCAnLicsIHgsIGlnbm9yZS5jYXNlPUZBTFNF
LCBleHRlbmRlZD1GQUxTRSkKICAgICAgICAgICAgeCA8LSAuSW50ZXJuYWwodHlwZS5jb252ZXJ0
KHgsIG5hLnN0cmluZ3MyLCBhcy5pczIpKQogICAgICAgIH1lbHNlIGlmIChzdG9yYWdlLm1vZGUy
PT0nY2hhcmFjdGVyJyl7CiAgICAgICAgICAgIHhbbWF0Y2goeCwgbmEuc3RyaW5nczIsIG5vbWF0
Y2g9MCk+MF0gPC0gJ05BJwogICAgICAgICAgICBhdHRyaWJ1dGVzKHgpIDwtIGF0dHJpYnV0ZXMy
CiAgICAgICAgICAgIAogICAgICAgIH1lbHNlIGlmIChzdG9yYWdlLm1vZGUyPT0nbG9naWNhbCcp
ewogICAgICAgICAgeFttYXRjaCh4LCBuYS5zdHJpbmdzMiwgbm9tYXRjaD0wKT4wXSA8LSAnTkEn
CiAgICAgICAgICBpZiAoaXMubnVsbChsb2dpY2FsczIpKXsKICAgICAgICAgICAgIyMgcmVjb2du
aXplIGMoJ0ZBTFNFJywgJ1RSVUUnLCAnRicsICdUJykKICAgICAgICAgICAgeCA8LSBhcy5sb2dp
Y2FsKHgpCiAgICAgICAgICB9ZWxzZSBpZiAobW9kZShsb2dpY2FsczIpPT0nbnVtZXJpYycpewog
ICAgICAgICAgICBpZiAoZGVjIT0iLiIpCiAgICAgICAgICAgICAgeCA8LSBnc3ViKGRlYywgJy4n
LCB4LCBpZ25vcmUuY2FzZT1GQUxTRSwgZXh0ZW5kZWQ9RkFMU0UpCiAgICAgICAgICAgIHggPC0g
YyhGQUxTRSwgVFJVRSlbbWF0Y2goYXMuaW50ZWdlcih4KSwgbG9naWNhbHMyKV0KICAgICAgICAg
IH1lbHNlCiAgICAgICAgICAgIHggPC0gYyhGQUxTRSwgVFJVRSlbbWF0Y2goeCwgbG9naWNhbHMy
KV0KICAgICAgICAgIGF0dHJpYnV0ZXMoeCkgPC0gYXR0cmlidXRlczIKICAgICAgICAgIAogICAg
ICAgIH1lbHNlIGlmIChzdG9yYWdlLm1vZGUyPT0naW50ZWdlcicpewogICAgICAgICAgaWYgKCBh
bnkoIWlzLm5hKG1hdGNoKGF0dHJpYnV0ZXMyJGNsYXNzLCAnZmFjdG9yJykpKSApewogICAgICAg
ICAgICAjIyBoYW5kbGUgZmFjdG9ycwogICAgICAgICAgICBpZiAoaXMubnVsbChmYWN0b3JzMikp
ewogICAgICAgICAgICAgICMjIGFzc3VtZSBmYWN0b3IgaXMgcHJvcGVybHkgZGVzY3JpYmVkIGlu
IGF0dHJpYnV0ZXMKICAgICAgICAgICAgICBpZiAoZGVjIT0iLiIpCiAgICAgICAgICAgICAgICB4
IDwtIGdzdWIoZGVjLCAnLicsIHgsIGlnbm9yZS5jYXNlPUZBTFNFLCBleHRlbmRlZD1GQUxTRSkK
ICAgICAgICAgICAgICB4IDwtIGFzLmludGVnZXIoeCkKICAgICAgICAgICAgICBpZiAobWF4KHgp
Pmxlbmd0aChhdHRyaWJ1dGVzMiRsZXZlbHMpKQogICAgICAgICAgICAgICAgd2FybmluZygibWF4
IGZhY3RvciBjb2RlIG9mIiwgbWF4KHgpLCAid2hlcmUgb25seSIsIGxlbmd0aChhdHRyaWJ1dGVz
MiRsZXZlbHMpLCAibGV2ZWxzIikKICAgICAgICAgICAgICBhdHRyaWJ1dGVzKHgpIDwtIGF0dHJp
YnV0ZXMyCiAgICAgICAgICAgICAgCiAgICAgICAgICAgIH1lbHNlIGlmIChmYWN0b3JzMj09J25l
dycpewogICAgICAgICAgICAgICMjIGlnbm9yZSBhdHRyaWJ1dGVzCiAgICAgICAgICAgICAgeCA8
LSBmYWN0b3IoeCwgZXhjbHVkZT1uYS5zdHJpbmdzMikKICAgICAgICAgICAgICAKICAgICAgICAg
ICAgfWVsc2UgaWYgKGZhY3RvcnMyPT0nbGV2ZWxzJyl7CiAgICAgICAgICAgICAgIyMgdXNlIGNv
ZGVzIGZyb20gYXR0cmlidXRlcwogICAgICAgICAgICAgICMgYWNjZXB0IG5hLnN0cmluZ3Mgd2hp
Y2ggYXJlIGFscmVhZHkgbGV2ZWxzCiAgICAgICAgICAgICAgbmEuc3RyaW5nczIgPC0gbmEuc3Ry
aW5nczJbIShuYS5zdHJpbmdzMiAlaW4lIGF0dHJpYnV0ZXMyJGxldmVscyldCiAgICAgICAgICAg
ICAgIyByZWplY3Qgb3RoZXIgbmEuc3RyaW5ncwogICAgICAgICAgICAgIGxldiA8LSBuYW1lcyh0
YWJsZSh4LCBleGNsdWRlPW5hLnN0cmluZ3MyKSkKICAgICAgICAgICAgICBsZXYgPC0gbGV2WyEo
bGV2ICVpbiUgYXR0cmlidXRlczIkbGV2ZWxzKV0KICAgICAgICAgICAgICBpZiAobGVuZ3RoKGxl
dik+MCl7CiAgICAgICAgICAgICAgICAgIHdhcm5pbmcocGFzdGUoImZhY3RvciB7IiwgcGFzdGUo
YXR0cmlidXRlczIkbGV2ZWxzLCBjb2xsYXBzZT0iOyIpLCAifSB3aXRoIHVua25vd24gbGV2ZWxz
IHsiLCBwYXN0ZShsZXYsIGNvbGxhcHNlPSI7IiksICJ9Iiwgc2VwPSIiKSkKICAgICAgICAgICAg
ICAgICAgYXR0cmlidXRlczIkbGV2ZWxzIDwtIGMoYXR0cmlidXRlczIkbGV2ZWxzLCBsZXYpCiAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB4IDwtIG1hdGNoKHgsIGF0dHJpYnV0ZXMy
JGxldmVscykKICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXMoeCkgPC0gYXR0cmlidXRlczIKICAg
ICAgICAgICAgICAKICAgICAgICAgICAgfWVsc2UgaWYgKGZhY3RvcnMyPT0nY29kZXMnKXsKICAg
ICAgICAgICAgICAjIyB1c2UgbGV2ZWxzIGZyb20gYXR0cmlidXRlcwogICAgICAgICAgICAgIGlm
IChkZWMhPSIuIikKICAgICAgICAgICAgICAgIHggPC0gZ3N1YihkZWMsICcuJywgeCwgaWdub3Jl
LmNhc2U9RkFMU0UsIGV4dGVuZGVkPUZBTFNFKQogICAgICAgICAgICAgICAgeCA8LSBhcy5pbnRl
Z2VyKHgpCiAgICAgICAgICAgICAgICBjb2QgPC0gbmFtZXModGFibGUoeCkpCiAgICAgICAgICAg
ICAgICBjb2QgPC0gY29kWyEoY29kICVpbiUgMTpsZW5ndGgoYXR0cmlidXRlczIkbGV2ZWxzKSld
CiAgICAgICAgICAgICAgICBpZiAobGVuZ3RoKGNvZCk+MCl7CiAgICAgICAgICAgICAgICAgIHdh
cm5pbmcocGFzdGUoImZhY3RvciB7IiwgcGFzdGUoYXR0cmlidXRlczIkbGV2ZWxzLCBjb2xsYXBz
ZT0iOyIpLCAifSB3aXRoIHVua25vd24gY29kZXMgeyIsIHBhc3RlKGNvZCwgY29sbGFwc2U9Ijsi
KSwgIn0iLCBzZXA9IiIpKQogICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzMiRsZXZlbHMgPC0g
YyhhdHRyaWJ1dGVzMiRsZXZlbHMsIHBhc3RlKCJVbmtub3duQ29kZSIsIChsZW5ndGgoYXR0cmli
dXRlczIkbGV2ZWxzKSsxKTptYXgoYXMuaW50ZWdlcihjb2QpKSwgc2VwPSIiKSkKICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXMoeCkgPC0gYXR0cmlidXRlczIKICAg
ICAgICAgICAgfSAKICAgICAgICAgICAgCiAgICAgICAgICB9ZWxzZXsgIyMgaXMgaW50ZWdlcgog
ICAgICAgICAgICB4W21hdGNoKHgsIG5hLnN0cmluZ3MyLCBub21hdGNoPTApPjBdIDwtICdOQScK
ICAgICAgICAgICAgaWYgKGRlYyE9Ii4iKQogICAgICAgICAgICAgIHggPC0gZ3N1YihkZWMsICcu
JywgeCwgaWdub3JlLmNhc2U9RkFMU0UsIGV4dGVuZGVkPUZBTFNFKQogICAgICAgICAgICB4IDwt
IGFzLmludGVnZXIoeCkKICAgICAgICAgICAgYXR0cmlidXRlcyh4KSA8LSBhdHRyaWJ1dGVzMgog
ICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICB9ZWxzZSBpZiAoc3RvcmFnZS5tb2RlMj09
J2RvdWJsZScpewogICAgICAgICAgeFttYXRjaCh4LCBuYS5zdHJpbmdzMiwgbm9tYXRjaD0wKT4w
XSA8LSAnTkEnCiAgICAgICAgICBpZiAoZGVjIT0iLiIpCiAgICAgICAgICAgIHggPC0gZ3N1Yihk
ZWMsICcuJywgeCwgaWdub3JlLmNhc2U9RkFMU0UsIGV4dGVuZGVkPUZBTFNFKQogICAgICAgICAg
eCA8LSBhcy5kb3VibGUoeCkKICAgICAgICAgIGF0dHJpYnV0ZXMoeCkgPC0gYXR0cmlidXRlczIK
ICAgICAgICAgICAgCiAgICAgICAgfWVsc2UgaWYgKHN0b3JhZ2UubW9kZTI9PSdjb21wbGV4Jyl7
CiAgICAgICAgICB4W21hdGNoKHgsIG5hLnN0cmluZ3MyLCBub21hdGNoPTApPjBdIDwtICdOQScK
ICAgICAgICAgIGlmIChkZWMhPSIuIikKICAgICAgICAgICAgeCA8LSBnc3ViKGRlYywgJy4nLCB4
LCBpZ25vcmUuY2FzZT1GQUxTRSwgZXh0ZW5kZWQ9RkFMU0UpCiAgICAgICAgICB4IDwtIGFzLmNv
bXBsZXgoeCkKICAgICAgICAgIGF0dHJpYnV0ZXMoeCkgPC0gYXR0cmlidXRlczIKCiAgICAgICAg
fWVsc2UKICAgICAgICAgIHN0b3AoImlsbGVnYWwgc3RvcmFnZS5tb2RlIikKICAgICAgICAgIAog
ICAgICAgIHJldHVybih4KQogICAgfQoKCgogICAgIyMgcmVkZWZpbmUgc2NhbiBub3QgdG8gYWRk
ICcnIHRvIG5hLnN0cmluZ3MKICAgIHNjYW4gPC0gCiAgICBmdW5jdGlvbiAoZmlsZSA9ICIiLCB3
aGF0ID0gZG91YmxlKDApLCBubWF4ID0gLTEsIG4gPSAtMSwgc2VwID0gIiIsIAogICAgICAgIHNr
aXAgPSAwLCBubGluZXMgPSAwLCBuYS5zdHJpbmdzID0gIk5BIiwgZmx1c2ggPSBGQUxTRSwgc3Ry
aXAud2hpdGUgPSBGQUxTRSwgCiAgICAgICAgcXVpZXQgPSBGQUxTRSkgCiAgICB7CiAgICAjISAg
ICBpZiAoIW1pc3Npbmcoc2VwKSkgCiAgICAjISAgICAgICBuYS5zdHJpbmdzIDwtIGMobmEuc3Ry
aW5ncywgIiIpCiAgICAgICAgaWYgKCFtaXNzaW5nKG4pKSB7CiAgICAgICAgICAgaWYgKG1pc3Np
bmcobm1heCkpIAogICAgICAgICAgICAgbm1heCA8LSBuL3BtYXgobGVuZ3RoKHdoYXQpLCAxKQog
ICAgICAgICAgIGVsc2Ugc3RvcCgiRWl0aGVyIHNwZWNpZnkgYG5tYXgnIG9yIGBuJywgYnV0IG5v
dCBib3RoLiIpCiAgICAgICAgfQogICAgICAgIC5JbnRlcm5hbChzY2FuKGZpbGUsIHdoYXQsIG5t
YXgsIHNlcCwgc2tpcCwgbmxpbmVzLCBuYS5zdHJpbmdzLCAKICAgICAgICAgICAgZmx1c2gsIHN0
cmlwLndoaXRlLCBxdWlldCkpCiAgICB9CgoKICAgICMgcHJlcGFyZWQgcGFyYW1ldGVycyBmb3Ig
Zml4ZWQgd2lkdGgKICAgIHN0YXJ0c3RvcCA8LSAgIWlzLm51bGwoc3RhcnQpIHx8ICFpcy5udWxs
KHN0b3ApIAogICAgaWYgKHN0YXJ0c3RvcCAmJiAoICFpcy5udWxsKHdpZHRocykgfHwgaXMubnVs
bChzdGFydCkgfHwgaXMubnVsbChzdG9wKSApKQogICAgICBzdG9wKCJmb3IgZml4ZWQgZm9ybWF0
IHNwZWNpZnkgZWl0aGVyIHdpZHRocz0gb3Igc3RhcnQ9IGFuZCBzdG9wPSIpCiAgICBmaXhlZC53
aWR0aCA8LSAhaXMubnVsbCh3aWR0aHMpIHx8IHN0YXJ0c3RvcAoKCiAgICBpZiAoZml4ZWQud2lk
dGgpewogICAgICAjIyBpbml0aWFsIHNldHRpbmcgZm9yIHdpZHRoLCBzdGFydCwgc3RvcAogICAg
ICBpZiAoc3RhcnRzdG9wKXsKICAgICAgICBzdG9wIDwtIHVubGlzdChzdG9wKQogICAgICAgIHN0
YXJ0IDwtIHVubGlzdChzdGFydCkKICAgICAgICBpZiAobGVuZ3RoKHN0YXJ0KSE9Y29scyB8fCBs
ZW5ndGgoc3RvcCkhPWNvbHMpIAogICAgICAgICAgc3RvcCgiaW52YWxpZCBsZW5ndGggZm9yIHtz
dGFydCxzdG9wfSIpCiAgICAgICAgbyA8LSBvcmRlcihzdG9wKQogICAgICAgIHN0b3AgPC0gc3Rv
cFtvXQogICAgICAgIHN0YXJ0IDwtIHN0YXJ0W29dCiAgICAgICAgcmVtb3ZlKG8pCiAgICAgICAg
d2lkdGhzIDwtIHN0b3AgLSBzdGFydCArIDEKICAgICAgfWVsc2V7CiAgICAgICAgaWYgKGxlbmd0
aCh3aWR0aHMpPT0xKXsKICAgICAgICAgIHdpZHRocyA8LSByZXAod2lkdGhzLCBjb2xzKQogICAg
ICAgIH1lbHNlIGlmIChsZW5ndGgod2lkdGhzKT09Y29scykgCiAgICAgICAgICB3aWR0aHMgPC0g
dW5saXN0KHdpZHRocykKICAgICAgICBlbHNlCiAgICAgICAgICBzdG9wKCJpbnZhbGlkIGxlbmd0
aCBmb3Igd2lkdGhzIikKICAgICAgICAjIyByZWFkanVzdCBzdGFydC9zdG9wCiAgICAgICAgbGFz
dHN0b3AgPC0gMAogICAgICAgIGZvciAoaSBpbiAxOmNvbHMpewogICAgICAgICAgc3RhcnRbW2ld
XSA8LSBsYXN0c3RvcCArIDEKICAgICAgICAgIHN0b3BbW2ldXSA8LSBsYXN0c3RvcCA8LSBsYXN0
c3RvcCArIHdpZHRoc1tbaV1dCiAgICAgICAgfQogICAgICB9CiAgICAgIAogICAgICBpZiAobWlz
c2luZyhjb2wubmFtZXMpKSBjb2wubmFtZXMgPC0gcGFzdGUoIlYiLCAxOmxlbmd0aCh3aWR0aHMp
LCBzZXAgPSAiIikKICAgICAgZWxzZSBpZiAoYW55KHN0cmlwLnF1b3RhdGlvbi5tYXJrcykpIGNv
bC5uYW1lcyA8LSB1bnF1b3RhdGUoY29sLm5hbWVzLCBxdW90YXRpb24ubWFyaykKCiAgICAgIAog
ICAgfWVsc2V7IAogICAgIAogICAgICBpZiAoZGVjLnNlcD09c2VwKQogICAgICAgIHN0b3AoInNl
cCBtdXN0IG5vdCBlcXVhbCBkZWMuc2VwIikKICAgICAgaWYgKHN0cmlwLndoaXRlICYmIHNlcCAl
aW4lIGMoIiIsICIgIiwgIlx0IikpCiAgICAgICAgd2FybmluZygicmVhZC50YWJsZTogc3RyaXAu
d2hpdGUgQU5EIHdoaXRlIHNwYWNlIHNlcGVyYXRvciAhPyIpCgogICAgIAogICAgICByb3cubGVu
cyA8LSBjb3VudC5maWVsZHMoZmlsZSwgc2VwLCBza2lwKSAjIyByZW1hcms6IG9idmlvdXNseSB0
aGUgZmlsZSBpcyByZWFkIHR3aWNlIAogICAgICBubGluZXMgPC0gbWluKGxlbmd0aChyb3cubGVu
cyksIG5saW5lcysxKSAjIyBjaGFuZ2VkIGJlY2F1c2UgbmxpbmVzIG5vdyBpcyBhIHBhcmFtZXRl
cgogICAgICAjIyMgU3RvcCBKT0EgY2hhbmdlcyAgIAogICAgICBybGFicCA8LSBubGluZXMgPiAx
ICYmIChyb3cubGVuc1syXSAtIHJvdy5sZW5zWzFdKSA9PSAxICAKICAgICAgaWYgKHJsYWJwICYm
IG1pc3NpbmcoaGVhZGVyKSkgCiAgICAgICAgIGhlYWRlciA8LSBUUlVFCiAgICAgIGlmIChoZWFk
ZXIpIHsKICAgICAgICAgIGNvbC5uYW1lcyA8LSBzY2FuKGZpbGUsIHdoYXQgPSAiIiwgc2VwID0g
c2VwLCBubGluZXMgPSAxLCAKICAgICAgICAgICAgICBzdHJpcC53aGl0ZSA9IHN0cmlwLndoaXRl
LCAjIyBhZGRlZCBieSBKT0EKICAgICAgICAgICAgICBxdWlldCA9IFRSVUUsIHNraXAgPSBza2lw
KQogICAgICAgICAgc2tpcCA8LSBza2lwICsgMQogICAgICAgICAgcm93LmxlbnMgPC0gcm93Lmxl
bnNbLTFdCiAgICAgICAgICBubGluZXMgPC0gbmxpbmVzIC0gMQogICAgICB9ZWxzZSBpZiAobWlz
c2luZyhjb2wubmFtZXMpKSAKICAgICAgICBjb2wubmFtZXMgPC0gcGFzdGUoIlYiLCAxOnJvdy5s
ZW5zWzFdLCBzZXAgPSAiIikKICAgICAgaWYgKGFueShzdHJpcC5xdW90YXRpb24ubWFya3MpKQog
ICAgICAgIGNvbC5uYW1lcyA8LSB1bnF1b3RhdGUoY29sLm5hbWVzLCBxdW90YXRpb24ubWFyaykg
IyMgYWRkZWQgYnkgSk9BCiAgICAKICAgICAgY29scyA8LSB1bmlxdWUocm93LmxlbnMpCiAgICAg
IGlmIChsZW5ndGgoY29scykgIT0gMSkgewogICAgICAgICAgY2F0KCJcbnJvdy5sZW5zPVxuIikK
ICAgICAgICAgIHByaW50KHJvdy5sZW5zKQogICAgICAgICAgc3RvcCgiYWxsIHJvd3MgbXVzdCBo
YXZlIHRoZSBzYW1lIGxlbmd0aC4iKQogICAgICB9CiAgICAgIHdoYXQgPC0gcmVwKGxpc3QoIiIp
LCBjb2xzKQogICAgICBpZiAocmxhYnApIAogICAgICAgIGNvbC5uYW1lcyA8LSBjKCJyb3cubmFt
ZXMiLCBjb2wubmFtZXMpCiAgICAgIG5hbWVzKHdoYXQpIDwtIGNvbC5uYW1lcwoKICAgIH0gIyBl
bmQgb2Ygbm9uLWZpeGVkLXdpZHRoCgoKICAgICMjIyBTdGFydCBKT0EgY2hhbmdlcwogICAgaWYg
KGZpeGVkLndpZHRoKXsKCiAgICAgIGRhdGEgPC0gcmVhZC5jaGFyLmNvbHMoZmlsZT1maWxlLCBz
dGFydCwgc3RvcAogICAgICAsIHNraXA9c2tpcAogICAgICAsIG5saW5lcz1ubGluZXMKICAgICAg
LCBlb2w9ZW9sCiAgICAgICwgbmEuc3RyaW5ncz0nTkEnCiAgICAgICkKICAgICAgbmxpbmVzIDwt
IGxlbmd0aChkYXRhW1sxXV0pCiAgICAgIG5hbWVzKGRhdGEpIDwtIGNvbC5uYW1lcwoKICAgIH1l
bHNleyAjIyMgU3RvcCBKT0EgY2hhbmdlcwoKICAgICAgIyMgbmEuc3RyaW5ncyBtdXN0IGJlIHRy
ZWF0ZWQgbGF0ZXIsIGlmIHVucXVvdGF0ZSgpIHNoYWxsIGhhdmUgYW4gZWZmZWN0CiAgICAgICMj
IGFzIHdlIG9ubHkgcmVhZCBpbiBzdHJpbmdzIGhlcmUsIHJlcGxhY2luZyAnTkEnIGJ5ICdOQScg
aXMgb2sKICAgICAgIyMgaG93ZXZlciwgc3RhbmRhcmQgdmVyc2lvbiBvZiBzY2FuIGF1dG9tYXRp
Y2FsbHkgbWFrZXMgbmEuc3RyaW5ncz1jKCdOQScsICcnKQogICAgICAjIyB0aHVzIGhlcmUgcmVk
ZWZpbmVkIHZlcnNpb24gb2Ygc2NhbiB1c2VkCiAgICAgIGRhdGEgPC0gc2NhbihmaWxlID0gZmls
ZSwgd2hhdCA9IHdoYXQsIHNlcCA9IHNlcCwgc2tpcCA9IHNraXAKICAgICAgICAgICAgICAsIG5h
LnN0cmluZ3MgPSAnTkEnICAgICAgICAgIyMgY2hhbmdlZCBieSBKT0EKICAgICAgICAgICAgICAs
IHN0cmlwLndoaXRlID0gc3RyaXAud2hpdGUgIyMgYWRkZWQgYnkgSk9BCiAgICAgICAgICAgICAg
LCBxdWlldCA9IFRSVUUpIAogICAgICBpZiAoY29scyAhPSBsZW5ndGgoZGF0YSkpIHsKICAgICAg
ICAgIHdhcm5pbmcocGFzdGUoImNvbHMgPSIsIGNvbHMsICIgIT0gbGVuZ3RoKGRhdGEpID0iLCBs
ZW5ndGgoZGF0YSkpKQogICAgICAgICAgY29scyA8LSBsZW5ndGgoZGF0YSkKICAgICAgfQogICAg
CiAgICB9ICMgZW5kIG9mIG5vbi1maXhlZC13aWR0aAoKCiAgICMjIFN0YXJ0IGNoYW5nZWQgYnkg
Sk9BICAgICAgICAKCiAgICBpZiAobGVuZ3RoKHN0cmlwLnF1b3RhdGlvbi5tYXJrcyk9PTEpCiAg
ICAgIHN0cmlwLnF1b3RhdGlvbi5tYXJrcyA8LSByZXAoc3RyaXAucXVvdGF0aW9uLm1hcmtzLCBj
b2xzKQogICAgZWxzZSBpZiAobGVuZ3RoKHN0cmlwLnF1b3RhdGlvbi5tYXJrcykhPWNvbHMpCiAg
ICAgICAgc3RvcChwYXN0ZSgic3RyaXAucXVvdGF0aW9uLm1hcmtzIGhhcyB0aGUgd3JvbmcgbGVu
Z3RoIgogICAgICAgICAgICAgLCBsZW5ndGgoc3RyaXAucXVvdGF0aW9uLm1hcmtzKSwiIT0gY29s
cyA9IiwgY29scykpCgogICAgaWYgKGlzLmxvZ2ljYWwoYXMuaXMpKSB7CiAgICAgIGlmIChsZW5n
dGgoYXMuaXMpPT0xKQogICAgICAgIGFzLmlzIDwtIHJlcChhcy5pcywgbGVuZ3RoID0gY29scykK
ICAgICAgZWxzZSBpZiAobGVuZ3RoKGFzLmlzKSE9Y29scykKICAgICAgICBzdG9wKHBhc3RlKCJh
cy5pcyBoYXMgdGhlIHdyb25nIGxlbmd0aCIsIGxlbmd0aChhcy5pcyksIiE9IGNvbHMgPSIsIGNv
bHMpKQogICAgfQogICAgZWxzZSBpZiAoaXMubnVtZXJpYyhhcy5pcykpIHsKICAgICAgICBpZiAo
YW55KGFzLmlzIDwgMSB8IGFzLmlzID4gY29scykpIAogICAgICAgICAgICBzdG9wKCJpbnZhbGlk
IG51bWVyaWMgYXMuaXMgZXhwcmVzc2lvbiIpCiAgICAgICAgaSA8LSByZXAoRkFMU0UsIGNvbHMp
CiAgICAgICAgaVthcy5pc10gPC0gVFJVRQogICAgICAgIGFzLmlzIDwtIGkKICAgIH0KICAgIGVs
c2UgCiAgICAgICAgc3RvcChwYXN0ZSgiYXMuaXMgaGFzIHdyb25nIHR5cGUiKSkKCiAgICAgICAg
ICAgCiAgIAogICBpZiAoaXMubnVsbChzdG9yYWdlLm1vZGUpICYmICFpcy5udWxsKGF0dHJpYnV0
ZXMpKQogICAgIHN0b3AoImF0dHJpYnV0ZXMgbXVzdCBiZSB1c2VkIHRvZ2V0aGVyIHdpdGggc3Rv
cmFnZS5tb2RlIikKICAgaWYgKGxlbmd0aChzdG9yYWdlLm1vZGUpPT0xKQogICAgIHN0b3JhZ2Uu
bW9kZSA8LSByZXAoc3RvcmFnZS5tb2RlLCBjb2xzKQogICBlbHNlIGlmIChsZW5ndGgoc3RvcmFn
ZS5tb2RlKT4xICYmIGxlbmd0aChzdG9yYWdlLm1vZGUpIT1jb2xzKQogICAgIHN0b3AoInN0b3Jh
Z2UubW9kZSBoYXMgd3JvbmcgbGVuZ3RoIiwgbGVuZ3RoKHN0b3JhZ2UubW9kZSksICIhPSBjb2xz
ID0iLCBjb2xzKQogICBpZiAoIWFsbChtYXRjaChzdG9yYWdlLm1vZGUsIHN0b3JhZ2UubW9kZXMs
IG5vbWF0Y2g9MCkpKQogICAgIHN0b3AoImlsbGVnYWwgc3RvcmFnZSBtb2RlIikKICAgaWYgKGxl
bmd0aChhdHRyaWJ1dGVzKT09MSkKICAgICBhdHRyaWJ1dGVzIDwtIHJlcChhcy5saXN0KGF0dHJp
YnV0ZXMpLCBjb2xzKQogICBlbHNlIGlmIChsZW5ndGgoYXR0cmlidXRlcyk+MSAmJiBsZW5ndGgo
YXR0cmlidXRlcykhPWNvbHMpCiAgICAgc3RvcCgiYXR0cmlidXRlcyBoYXMgd3JvbmcgbGVuZ3Ro
IiwgbGVuZ3RoKGF0dHJpYnV0ZXMpLCAiIT0gY29scyA9IiwgY29scykKICAKICAgZm9yIChpIGlu
IDE6Y29scykgewogICAgIGlmIChmaXhlZC53aWR0aCAmJiBzdHJpcC53aGl0ZSkKICAgICAgIGNv
bHVtbiA8LSB0cmltKGRhdGFbW2ldXSwgJyBcdCcpCiAgICAgZWxzZQogICAgICAgY29sdW1uIDwt
IGRhdGFbW2ldXQogICAgIGlmIChzdHJpcC5xdW90YXRpb24ubWFya3NbaV0pCiAgICAgICBjb2x1
bW4gPC0gdW5xdW90YXRlKGNvbHVtbiwgcXVvdGF0aW9uLm1hcmspCiAgICAgaWYgKGVzY2FwZWQu
cXVvdGF0aW9uLm1hcmsgIT0gcXVvdGF0aW9uLm1hcmspCiAgICAgICBjb2x1bW4gPC0gZ3N1Yihl
c2NhcGVkLnF1b3RhdGlvbi5tYXJrLCBxdW90YXRpb24ubWFyaywgY29sdW1uLCBleHRlbmRlZD1G
QUxTRSkKICAgICAgIAogICAgIGRhdGFbW2ldXSA8LSB0eXBlLmNvbnZlcnQoY29sdW1uCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAsIGFzLmlzPWFzLmlzW2ldCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAsIHN0b3JhZ2UubW9kZT1zdG9yYWdlLm1vZGVbaV0KICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICwgYXR0cmlidXRlcz1hdHRyaWJ1dGVzW1tpXV0KICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKQogICAgIAogICB9CiAgIAogICAKICAgcm93dmFyIDwt
IDAgIyMgYWRkZWQgYnkgSk9BIGZvciB0ZW1wbGF0ZQogICAKICAgIyMgU3RvcCBjaGFuZ2VkIGJ5
IEpPQSAgICAgICAgCiAgICAgICAgICAgIAogICAgaWYgKG1pc3Npbmcocm93Lm5hbWVzKSkgewog
ICAgICAgIGlmICghZml4ZWQud2lkdGggJiYgcmxhYnApIHsgICMjIGNoYW5nZWQgYnkgSk9BIChv
bmx5IHN2cykKICAgICAgICAgICAgcm93Lm5hbWVzIDwtIGRhdGFbWzFdXQogICAgICAgICAgICBy
b3d2YXIgPC0gMSAgICAgICAgICMjIGFkZGVkIGJ5IEpPQSBmb3IgdGVtcGxhdGUKICAgICAgICAg
ICAgY29sLm5hbWVzIDwtIGMoInJvd25hbWVzIiwgY29sLm5hbWVzKSAgIyMgYWRkZWQgYnkgSk9B
IGZvciB0ZW1wbGF0ZQogICAgICAgICAgICBkYXRhIDwtIGRhdGFbLTFdCiAgICAgICAgfQogICAg
ICAgIGVsc2Ugcm93Lm5hbWVzIDwtIGFzLmNoYXJhY3RlcigxOm5saW5lcykKICAgIH0KICAgIGVs
c2UgaWYgKGlzLm51bGwocm93Lm5hbWVzKSB8fCByb3cubmFtZXM9PTApIHsKICAgICAgICByb3cu
bmFtZXMgPC0gYXMuY2hhcmFjdGVyKDE6bmxpbmVzKQogICAgfQogICAgZWxzZSBpZiAoaXMuY2hh
cmFjdGVyKHJvdy5uYW1lcykpIHsKICAgICAgICBpZiAobGVuZ3RoKHJvdy5uYW1lcykgPT0gMSkg
ewogICAgICAgICAgICByb3d2YXIgPC0gKDE6Y29scylbbWF0Y2goY29sLm5hbWVzLCByb3cubmFt
ZXMsIDApID09IDFdCiAgICAgICAgICAgIHJvdy5uYW1lcyA8LSBkYXRhW1tyb3d2YXJdXQogICAg
ICAgICAgICBkYXRhIDwtIGRhdGFbLXJvd3Zhcl0KICAgICAgICB9CiAgICB9CiAgICBlbHNlIGlm
IChpcy5udW1lcmljKHJvdy5uYW1lcykgJiYgbGVuZ3RoKHJvdy5uYW1lcykgPT0gMSkgewogICAg
ICAgIHJsYWJwIDwtIHJvdy5uYW1lcwogICAgICAgIHJvdy5uYW1lcyA8LSBkYXRhW1tybGFicF1d
CiAgICAgICAgcm93dmFyIDwtIHJsYWJwICAgICAgICAgICAgICMjIGFkZGVkIGJ5IEpPQSBmb3Ig
dGVtcGxhdGUKICAgICAgICBkYXRhIDwtIGRhdGFbLXJsYWJwXQogICAgfQogICAgZWxzZSBzdG9w
KCJpbnZhbGlkIHJvdy5uYW1lcyBzcGVjaWZpY2F0aW9uIikKICAgIAogICAgY2xhc3MoZGF0YSkg
PC0gImRhdGEuZnJhbWUiCiAgICByb3cubmFtZXMoZGF0YSkgPC0gcm93Lm5hbWVzCiAgICAKICAg
IGlmICh0ZW1wbGF0ZS5hdHRyaWJ1dGUpewogICAgCiAgICAgIGlmIChpcy5udWxsKHdpZHRocykp
CiAgICAgICAgZGlnaXRzIDwtIE5VTEwKICAgICAgZWxzZXsKICAgICAgICB3aWR0aHMgPC0gYXMu
bGlzdCh3aWR0aHMpCiAgICAgICAgZGlnaXRzIDwtIHJlcChsaXN0KE5VTEwpLCBjb2xzKQogICAg
ICB9CiAgICAKICAgICAgaWYgKHJvd3Zhcj4wKXsKICAgICAgICBzdG9yYWdlLm1vZGUgPC0gYygg
ImNoYXJhY3RlciIsIHVubmFtZSh1bmxpc3QobGFwcGx5KGRhdGEsIHN0b3JhZ2UubW9kZSkpKSAp
CiAgICAgICAgYXR0cmlidXRlcyA8LSBjKGxpc3QobGlzdChjbGFzcz0nQXNJcycpKSwgbGFwcGx5
KGRhdGEsIGF0dHJpYnV0ZXMpKQogICAgICAgIG5hbWVzKGF0dHJpYnV0ZXMpWzFdIDwtIGNvbC5u
YW1lc1tyb3d2YXJdCiAgICAgIH1lbHNlewogICAgICAgIHN0b3JhZ2UubW9kZSA8LSB1bm5hbWUo
dW5saXN0KGxhcHBseShkYXRhLCBzdG9yYWdlLm1vZGUpKSkKICAgICAgICBhdHRyaWJ1dGVzIDwt
IGxhcHBseShkYXRhLCBhdHRyaWJ1dGVzKQogICAgICB9CiAgICAgIGF0dHIoZGF0YSwgJ3RlbXBs
YXRlJykgPC0gc3RydWN0dXJlKAogICAgICAgIGxpc3QoZmlsZSA9IGZpbGUgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICMgcGVyIGZpbGUgKGNoYXJhY3RlcikKICAgICAgICAg
ICwgZW9sID0gZW9sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgcGVy
IGZpbGUgKGNoYXJhY3RlcikKICAgICAgICAgICwgc2VwID0gc2VwICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICMgcGVyIGZpbGUgKGNoYXJhY3RlcikKICAgICAgICAgICwg
ZGVjLnNlcCA9IGRlYy5zZXAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgcGVyIGZp
bGUgKGNoYXJhY3RlcikKICAgICAgICAgICwgbmEuc3RyaW5ncyA9IG5hLnN0cmluZ3MgICAgICAg
ICAgICAgICAgICAgICAgICAgICMgcGVyIGZpbGUsIGJ1dCBhbGxvdyBtb3JlIHRoYW4gb25lIChj
aGFyYWN0ZXIgdmVjdG9yKQogICAgICAgICAgLCBxdW90YXRpb24ubWFyayA9IHF1b3RhdGlvbi5t
YXJrICAgICAgICAgICAgICAgICAgIyBwZXIgZmlsZSAoY2hhcmFjdGVyKSwgZS5nLiA8Ij4gaW4g
Q1NWIAogICAgICAgICAgLCBlc2NhcGVkLnF1b3RhdGlvbi5tYXJrID0gZXNjYXBlZC5xdW90YXRp
b24ubWFyayAgIyBwZXIgZmlsZSAoY2hhcmFjdGVyKSwgZS5nLiA8IiI+IGluIENTVgogICAgICAg
ICAgLCBsb2dpY2FscyA9IGxvZ2ljYWxzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBw
ZXIgZmlsZSwgdHdvIHZhbHVlcyByZXByZXNlbnRpbmcgRkFMU0UgYW5kIFRSVUUgKG51bWVyaWNh
bCBvciBjaGFyYWN0ZXIgdmVjdG9yKQogICAgICAgICAgLCBmYWN0b3JzID0gZmFjdG9ycyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBwZXIgZmlsZSwgd2V0aGVyIGZhY3RvcnMgaW4g
ZmlsZSBhcmUgJ2xldmVscycgb3IgJ2NvZGVzJyAoY2hhcmFjdGVyKQogICAgICAgICAgLCByb3cu
bmFtZXMubG9jID0gcm93dmFyICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBwZXIgZmlsZSwg
Y29sbm8gb2Ygcm93bmFtZXMsIDAgPSBubyByb3cubmFtZXMgaW4gZmlsZSAoaW50ZWdlcikKICAg
ICAgICAgICwgaGVhZGVyID0gaGVhZGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICMgcGVyIGZpbGUsIHdoZXRoZXIgZmlyc3Qgcm93IGlzIGNvbC5uYW1lcyAobG9naWNhbCkKICAg
ICAgICAgICwgc3RyaXAud2hpdGUgPSBzdHJpcC53aGl0ZSAgICAgICAgICAgICAgICAgICAgICAg
ICMgcGVyIGZpbGUKICAgICAgICAgICwgY29sLm5hbWVzID0gY29sLm5hbWVzICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICMgcGVyIGNvbHVtbiwgaW5jbHVkaW5nIGNvcm5lci5uYW1lIChjaGFy
YWN0ZXIgdmVjdG9yKQogICAgICAgICAgLCBxdW90ZSA9IHN0cmlwLnF1b3RhdGlvbi5tYXJrcyAg
ICAgICAgICAgICAgICAgICAgIyBwZXIgY29sdW1uLCB3aGV0aGVyIGNvbHVtbiBpcyBxdW90ZWQg
KGxvZ2ljYWwgdmVjdG9yKQogICAgICAgICAgLCBzdG9yYWdlLm1vZGUgPSBzdG9yYWdlLm1vZGUg
ICAgICAgICAgICAgICAgICAgICAgIyBwZXIgY29sdW1uLCAoY2hhcmFjdGVyIHZlY3RvcikKICAg
ICAgICAgICwgd2lkdGhzID0gd2lkdGhzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICMgcGVyIGNvbHVtbiwgaW5jbHVkaW5nIHJvdy5uYW1lcy53aWR0aCAobGlzdCBvciBOVUxMKQog
ICAgICAgICAgLCBkaWdpdHMgPSBkaWdpdHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIyBwZXIgY29sdW1uLCAobGlzdCBvciBOVUxMKQogICAgICAgICAgLCBhdHRyaWJ1dGVzID0g
YXR0cmlidXRlcyAgICAgICAgICAgICAgICAgICAgICAgICAgIyBwZXIgY29sdW1uLCAobGlzdCkK
ICAgICAgICAgICwgZXh0ZW5zaW9uLndhcm5pbmcgPSBGQUxTRSAgICAgICAgICAgICAgICAgICAg
ICAgICMgcGVyIGZpbGUsIFRSVUUvRkFMU0UgaW5kaWNhdGVzIHdldGhlciBvdXQgc3BlY3MgZGlm
ZmVyIGZyb20gaW4gc3BlY3MgCiAgICAgICAgICAsIHNlcGVyYXRvci53YXJuaW5nID0gTkEgICAg
ICAgICAgICAgICAgICAgICAgICAgICAjIHBlciBmaWxlLCBUUlVFL0ZBTFNFL05BCiAgICAgICAg
ICAsIHF1b3RhdGlvbi5tYXJrLndhcm5pbmcgPSBOQSAgICAgICAgICAgICAgICAgICAgICAjIHBl
ciBmaWxlLCBUUlVFL0ZBTFNFL05BCiAgICAgICAgICApCiAgICAgICAgLCBjbGFzcz0idGVtcGxh
dGUiKQoKICAgIH0KICAgIGRhdGEKfQoKCnJlYWQuY2hhci5jb2xzIDwtIGZ1bmN0aW9uKGZpbGUs
IHN0YXJ0LCBzdG9wCiwgc2tpcD0wCiwgbmxpbmVzPTAKLCBlb2w9J1xuJwosIG5hLnN0cmluZ3M9
J05BJwopCnsKICAjIyMjIG5vIGVycm9yIGNoZWNraW5nIGluIHRoaXMgZnVuY3Rpb24KICAjIyMj
IHN0YXJ0c3RvcCBleHBlY3RlZCBzb3J0ZWQgYnkgU1RPUCAhIQogICMjIyMgb3ZlcmxhcHBpbmcg
Y29sdW1ucyBhbGxvd2VkCiAgIyMjIyBUaGlzIHNlY3Rpb24gY291bGQgYmUgcmVwbGFjZWQgYnkg
YSBDLWNhbGwgcmVhZGluZyBpbiBhIGZpbGUgaW4gY29sdW1ucyBzcGVjaWZpZWQgYnkgc3RhcnQv
c3RvcCAjIyMjCgogIHAgPC0gbGVuZ3RoKHN0YXJ0KQogIAogICMjIG5hLnN0cmluZ3M9TlVMTCBj
dXJyZW50bHkgbm90IHBvc3NpYmxlIGluIHNjYW4oKQogIGFsbC5pbi5vbmUgPC0gc2NhbihmaWxl
ID0gZmlsZSwgc2VwID0gZW9sLCBza2lwID0gc2tpcCwgbmxpbmVzPW5saW5lcwogICAgLCB3aGF0
ID0gY2hhcmFjdGVyKDApLCBuYS5zdHJpbmdzID0gJycsIGZsdXNoID0gRkFMU0UsIHN0cmlwLndo
aXRlID0gRkFMU0UsIHF1aWV0ID0gVFJVRSkKICBubGluZXMgPC0gbGVuZ3RoKGFsbC5pbi5vbmUp
CiAgYWxsLmluLmNvbHMgPC0gbGlzdCgpCiAgZm9yIChpIGluIDE6cCl7CiAgICBhbGwuaW4uY29s
c1tbaV1dIDwtIHN1YnN0cihhbGwuaW4ub25lLCBzdGFydFtpXSwgc3RvcFtpXSkKICAgIGlmICgh
aXMubnVsbChuYS5zdHJpbmdzKSB8fCBsZW5ndGgobmEuc3RyaW5ncyk+MSB8fCBuYS5zdHJpbmdz
WzFdIT0nTkEnKQogICAgICBhbGwuaW4uY29sc1tbaV1dW21hdGNoKGFsbC5pbi5jb2xzW1tpXV0s
IG5hLnN0cmluZ3MsIG5vbWF0Y2ggPSAwKSA+IDBdIDwtICJOQSIKICB9CiAgIyMjIyBFbmQgb2Yg
VGhpcyBzZWN0aW9uIGNvdWxkIGJlIHJlcGxhY2VkIGJ5IGEgQy1jYWxsIHJlYWRpbmcgaW4gYSBm
aWxlIGluIGNvbHVtbnMgc3BlY2lmaWVkIGJ5IHN0YXJ0L3N0b3AgIyMjIwogIHJldHVybihhbGwu
aW4uY29scykKfQoKCgojIyB3cmFwcGVyIGZ1bmN0aW9uIGZvciBjb21tYSBzZXBlcmF0ZWQgdmFs
dWVzCiMjIG5vdGUgdGhhdCBjc3YgaXMgTk9UIGZ1bGx5IHN1cHBvcnRlZCB5ZXQKIyMgc3RyaW5n
cyBtdXN0IG5vdCBjb250YWluIHF1b3RhdGlvbi5tYXJrIG9yIHNlcAojIyAoR05VKSBDb3B5cmln
aHQgSk9BIDE5OTkKcmVhZC5zdnMgPC0gZnVuY3Rpb24gKGZpbGUKLCBoZWFkZXIgPSBUUlVFICAg
ICAgICAgICAgICAgICAgIyMgY2hhbmdlZCBmb3IgQ1NWCiwgc2VwID0gJzsnICAgICAgICAgICAg
ICAgICAgICAgICMjIGNoYW5nZWQgZm9yIENTVgosIHJvdy5uYW1lcwosIGNvbC5uYW1lcwosIGFz
LmlzID0gRkFMU0UKLCBuYS5zdHJpbmdzID0gJycgICAgICAgICAgICAgICAgIyMgY2hhbmdlZCBm
b3IgQ1NWCiwgc2tpcCA9IDAKLCBubGluZXM9SW5mCiwgZGVjLnNlcCA9ICcuJwosIHF1b3RhdGlv
bi5tYXJrID0gJyInCiwgZXNjYXBlZC5xdW90YXRpb24ubWFyayA9ICciIicgICMjIGNoYW5nZWQg
Zm9yIENTVgosIHN0cmlwLndoaXRlID0gVFJVRQosIHN0cmlwLnF1b3RhdGlvbi5tYXJrcyA9IFRS
VUUKLCB3aWR0aHM9TlVMTAosIHN0YXJ0PU5VTEwKLCBzdG9wPU5VTEwKLCBjb2xzPW1heChsZW5n
dGgod2lkdGhzKSwgbGVuZ3RoKHN0YXJ0KSwgbGVuZ3RoKHN0b3ApKQosIGVvbD0nXG4nCiwgc3Rv
cmFnZS5tb2RlID0gTlVMTAosIGF0dHJpYnV0ZXMgPSBOVUxMCiwgbG9naWNhbHMgPSBOVUxMCiwg
ZmFjdG9ycyA9IE5VTEwKLCB0ZW1wbGF0ZS5hdHRyaWJ1dGUgPSBGQUxTRQopIApyZWFkLnRhYmxl
IChmaWxlID0gZmlsZQosIGhlYWRlciA9IGhlYWRlcgosIHNlcCA9IHNlcAosIHJvdy5uYW1lcyA9
IHJvdy5uYW1lcwosIGNvbC5uYW1lcyA9IGNvbC5uYW1lcwosIGFzLmlzID0gYXMuaXMKLCBuYS5z
dHJpbmdzID0gbmEuc3RyaW5ncwosIHNraXAgPSBza2lwCiwgbmxpbmVzID0gbmxpbmVzCiwgZGVj
LnNlcCA9IGRlYy5zZXAKLCBxdW90YXRpb24ubWFyayA9IHF1b3RhdGlvbi5tYXJrCiwgZXNjYXBl
ZC5xdW90YXRpb24ubWFyayA9IGVzY2FwZWQucXVvdGF0aW9uLm1hcmsKLCBzdHJpcC53aGl0ZSA9
IHN0cmlwLndoaXRlCiwgc3RyaXAucXVvdGF0aW9uLm1hcmtzID0gc3RyaXAucXVvdGF0aW9uLm1h
cmtzCiwgd2lkdGhzID0gd2lkdGhzCiwgc3RhcnQgPSBzdGFydAosIHN0b3AgPSBzdG9wCiwgY29s
cyA9IGNvbHMKLCBlb2wgPSBlb2wKLCBzdG9yYWdlLm1vZGUgPSBzdG9yYWdlLm1vZGUKLCBhdHRy
aWJ1dGVzID0gYXR0cmlidXRlcwosIGxvZ2ljYWxzID0gbG9naWNhbHMKLCBmYWN0b3JzID0gZmFj
dG9ycwosIHRlbXBsYXRlLmF0dHJpYnV0ZSA9IHRlbXBsYXRlLmF0dHJpYnV0ZQopIAoKCiMjIHdy
YXBwZXIgZnVuY3Rpb24gZm9yIGNvbW1hIHNlcGVyYXRlZCB2YWx1ZXMKIyMgbm90ZSB0aGF0IGNz
diBpcyBOT1QgZnVsbHkgc3VwcG9ydGVkIHlldAojIyBzdHJpbmdzIG11c3Qgbm90IGNvbnRhaW4g
cXVvdGF0aW9uLm1hcmsgb3Igc2VwCiMjIChHTlUpIENvcHlyaWdodCBKT0EgMTk5OQpyZWFkLmZp
eCA8LSBmdW5jdGlvbiAoZmlsZQosIGhlYWRlciA9IEZBTFNFCiwgc2VwID0gJycKLCByb3cubmFt
ZXMKLCBjb2wubmFtZXMKLCBhcy5pcyA9IEZBTFNFCiwgbmEuc3RyaW5ncyA9ICcnICAgICAgICAg
ICAgICAgICMjIGNoYW5nZWQgZm9yIGZpeGVkIGZvcm1hdAosIHNraXAgPSAwCiwgbmxpbmVzPUlu
ZgosIGRlYy5zZXAgPSAnLicKLCBxdW90YXRpb24ubWFyayA9ICciJwosIGVzY2FwZWQucXVvdGF0
aW9uLm1hcmsgPSAnIicKLCBzdHJpcC53aGl0ZSA9IFRSVUUKLCBzdHJpcC5xdW90YXRpb24ubWFy
a3MgPSBUUlVFCiwgd2lkdGhzPU5VTEwKLCBzdGFydD1OVUxMCiwgc3RvcD1OVUxMCiwgY29scz1t
YXgobGVuZ3RoKHdpZHRocyksIGxlbmd0aChzdGFydCksIGxlbmd0aChzdG9wKSkKLCBlb2w9J1xu
JwosIHN0b3JhZ2UubW9kZSA9IE5VTEwKLCBhdHRyaWJ1dGVzID0gTlVMTAosIGxvZ2ljYWxzID0g
TlVMTAosIGZhY3RvcnMgPSBOVUxMCiwgdGVtcGxhdGUuYXR0cmlidXRlID0gRkFMU0UKKSAKcmVh
ZC50YWJsZSAoZmlsZSA9IGZpbGUKLCBoZWFkZXIgPSBoZWFkZXIKLCBzZXAgPSBzZXAKLCByb3cu
bmFtZXMgPSByb3cubmFtZXMKLCBjb2wubmFtZXMgPSBjb2wubmFtZXMKLCBhcy5pcyA9IGFzLmlz
CiwgbmEuc3RyaW5ncyA9IG5hLnN0cmluZ3MKLCBza2lwID0gc2tpcAosIG5saW5lcyA9IG5saW5l
cwosIGRlYy5zZXAgPSBkZWMuc2VwCiwgcXVvdGF0aW9uLm1hcmsgPSBxdW90YXRpb24ubWFyawos
IGVzY2FwZWQucXVvdGF0aW9uLm1hcmsgPSBlc2NhcGVkLnF1b3RhdGlvbi5tYXJrCiwgc3RyaXAu
d2hpdGUgPSBzdHJpcC53aGl0ZQosIHN0cmlwLnF1b3RhdGlvbi5tYXJrcyA9IHN0cmlwLnF1b3Rh
dGlvbi5tYXJrcwosIHdpZHRocyA9IHdpZHRocwosIHN0YXJ0ID0gc3RhcnQKLCBzdG9wID0gc3Rv
cAosIGNvbHMgPSBjb2xzCiwgZW9sID0gZW9sCiwgc3RvcmFnZS5tb2RlID0gc3RvcmFnZS5tb2Rl
CiwgYXR0cmlidXRlcyA9IGF0dHJpYnV0ZXMKLCBsb2dpY2FscyA9IGxvZ2ljYWxzCiwgZmFjdG9y
cyA9IGZhY3RvcnMKLCB0ZW1wbGF0ZS5hdHRyaWJ1dGUgPSB0ZW1wbGF0ZS5hdHRyaWJ1dGUKKSAK
CgpyZWFkLnRlbXBsYXRlIDwtIGZ1bmN0aW9uKHRlbXBsYXRlCiwgZmlsZSA9IHRlbXBsYXRlJGZp
bGUKLCBoZWFkZXIgPSB0ZW1wbGF0ZSRoZWFkZXIKLCBzZXAgPSB0ZW1wbGF0ZSRzZXAKLCByb3cu
bmFtZXMgPSB0ZW1wbGF0ZSRyb3cubmFtZXMKLCBjb2wubmFtZXMgPSB0ZW1wbGF0ZSRjb2wubmFt
ZXMKLCBhcy5pcyA9IEZBTFNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMgbXVzdCBi
ZSBGQUxTRSEKLCBuYS5zdHJpbmdzID0gdGVtcGxhdGUkbmEuc3RyaW5ncwosIHNraXAgPSAwCiwg
bmxpbmVzID0gSW5mCiwgZGVjLnNlcCA9IHRlbXBsYXRlJGRlYy5zZXAKLCBxdW90YXRpb24ubWFy
ayA9IHRlbXBsYXRlJHF1b3RhdGlvbi5tYXJrCiwgZXNjYXBlZC5xdW90YXRpb24ubWFyayA9IHRl
bXBsYXRlJGVzY2FwZWQucXVvdGF0aW9uLm1hcmsKLCBzdHJpcC53aGl0ZSA9IHRlbXBsYXRlJHN0
cmlwLndoaXRlCiwgc3RyaXAucXVvdGF0aW9uLm1hcmtzID0gdGVtcGxhdGUkcXVvdGUKLCB3aWR0
aHMgPSB0ZW1wbGF0ZSR3aWR0aHMKLCBzdGFydCA9IE5VTEwKLCBzdG9wID0gTlVMTAosIGNvbHMg
PSBtYXgobGVuZ3RoKHdpZHRocyksIGxlbmd0aChzdGFydCksIGxlbmd0aChzdG9wKSkKLCBlb2wg
PSB0ZW1wbGF0ZSRlb2wKLCBzdG9yYWdlLm1vZGUgPSB0ZW1wbGF0ZSRzdG9yYWdlLm1vZGUKLCBh
dHRyaWJ1dGVzID0gdGVtcGxhdGUkYXR0cmlidXRlcwosIGxvZ2ljYWxzID0gdGVtcGxhdGUkbG9n
aWNhbHMKLCBmYWN0b3JzID0gdGVtcGxhdGUkZmFjdG9ycwosIHRlbXBsYXRlLmF0dHJpYnV0ZSA9
IEZBTFNFCikKcmVhZC50YWJsZSAoZmlsZSA9IGZpbGUKLCBoZWFkZXIgPSBoZWFkZXIKLCBzZXAg
PSBzZXAKLCByb3cubmFtZXMgPSByb3cubmFtZXMKLCBjb2wubmFtZXMgPSBjb2wubmFtZXMKLCBh
cy5pcyA9IGFzLmlzCiwgbmEuc3RyaW5ncyA9IG5hLnN0cmluZ3MKLCBza2lwID0gc2tpcAosIG5s
aW5lcyA9IG5saW5lcwosIGRlYy5zZXAgPSBkZWMuc2VwCiwgcXVvdGF0aW9uLm1hcmsgPSBxdW90
YXRpb24ubWFyawosIGVzY2FwZWQucXVvdGF0aW9uLm1hcmsgPSBlc2NhcGVkLnF1b3RhdGlvbi5t
YXJrCiwgc3RyaXAud2hpdGUgPSBzdHJpcC53aGl0ZQosIHN0cmlwLnF1b3RhdGlvbi5tYXJrcyA9
IHN0cmlwLnF1b3RhdGlvbi5tYXJrcwosIHdpZHRocyA9IHdpZHRocwosIHN0YXJ0ID0gc3RhcnQK
LCBzdG9wID0gc3RvcAosIGNvbHMgPSBjb2xzCiwgZW9sID0gZW9sCiwgc3RvcmFnZS5tb2RlID0g
c3RvcmFnZS5tb2RlCiwgYXR0cmlidXRlcyA9IGF0dHJpYnV0ZXMKLCBsb2dpY2FscyA9IGxvZ2lj
YWxzCiwgZmFjdG9ycyA9IGZhY3RvcnMKLCB0ZW1wbGF0ZS5hdHRyaWJ1dGUgPSB0ZW1wbGF0ZS5h
dHRyaWJ1dGUKKQoKCgojIyB3cml0ZS50YWJsZSgpIGNvbXBsZXRlbHkgcmV3cml0dGVuCiMjIChH
TlUpIENvcHlyaWdodCBKT0EgMTk5OQp3cml0ZS50YWJsZSA8LSAKZnVuY3Rpb24gKHgsIGZpbGUg
PSAnJwosIGFwcGVuZCA9IEZBTFNFICAgICAgICAgICAgICAgICAjIyBjaGFuZ2VkOiBhcHBlbmRp
bmcgc3VwcHJlc3NlcyBjb2wubmFtZXMgKGFuZCBjb3JuZXIubmFtZSkKLCBxdW90ZSA9IFRSVUUg
ICAgICAgICAgICAgICAgICAgIyMgY2hhbmdlZDogdmVjdG9yIG9mIGxvZ2ljYWxzIGFsc28gYWxs
b3dlZAosIHNlcCA9ICcgJwosIGVvbCA9ICdcbicKLCBuYSA9ICdOQScgICAgICAgICAgICAgICAg
ICAgICAgICAjIyBjaGFuZ2VkOiBkZWZhdWx0ICdOQScgaW5zdGVhZCBvZiBOQSAob2xkIGRvY3Ug
c2FpZCAndGhlIFNUUklORyB0byB1c2UgZm9yIG1pc3NpbmcgdmFsdWVzJykKLCByb3cubmFtZXMg
PSBUUlVFCiwgY29sLm5hbWVzID0gVFJVRSAgICAgICAgICAgICAgICMjIG5vdGU6IGNvbC5uYW1l
cyBtYXkgY2F1c2UgZXh0ZW5zaW9uIG9mIGNvbHVtbiB3aWR0aHMKLCBjb3JuZXIubmFtZSA9ICdy
b3duYW1lcycgICAgICAgICAgICAjIyBuZXc6IG9ubHkgdXNlZCBpZiByb3cubmFtZXMgYW5kIGNv
bC5uYW1lcywgc2V0IHRvICcnIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5Ciwgcm93Lm5hbWVz
LndpZHRoID0gdW5saXN0KHdpZHRoc1sxXSkgIyMgbmV3CiwgcXVvdGF0aW9uLm1hcmsgPSAnIicg
ICAgICAgICAgICMjIG5ldwosIGVzY2FwZWQucXVvdGF0aW9uLm1hcmsgPSAnIicgICAjIyBuZXc6
IHN1YnN0aXR1dGlvbiBvbmx5IGlmIGl0IGRpZmZlcnMgZnJvbSBxdW90YXRpb24ubWFyawosIGxv
Z2ljYWxzID0gYygnRkFMU0UnLCAnVFJVRScpICAjIyBuZXc6IGUuZy4gYygwLDEpIG9yIGMoJ25v
JywneWVzJyksIG51bWVyaWNzIGFyZSBjb2VyY2VkIHRvIGludGVnZXIKLCBmYWN0b3JzID0gYygn
bGV2ZWxzJywgJ2NvZGVzJykgIyMgbmV3OiBjaG9vc2UgZWl0aGVyICdsZXZlbHMnIG9yICdjb2Rl
cycgKGFzLm51bWVyaWMoKSwgbm90IGNvZGVzKCkpCiwgZGVjLnNlcCA9ICcuJyAgICAgICAgICAg
ICAgICAgICMjIG5ldwosIGRpZ2l0cyA9IE5VTEwgICAgICAgICAgICAgICAgICAjIyBuZXc6IGNh
biByZWR1Y2UgZGlnaXRzLCBzcGVjaWZpeSBhIHNpbmdsZSB2YWx1ZSwgYSB2ZWN0b3Igb3IgYSBs
aXN0Ciwgd2lkdGhzID0gTlVMTCAgICAgICAgICAgICAgICAgICMjIG5ldzogY2FuIGZvcmNlIGZ3
Ziwgc3BlY2lmeSBUUlVFLCBhIGNvbW1vbiB3aWR0aCwgYSB2ZWN0b3Igb3IgYSBsaXN0IChsaXN0
cyBjYW4gaGF2ZSBOVUxMcykKLCBwYWQubWV0aG9kPWMoImFiYnJldmlhdGUiLCAidmFyaWFibGUi
LCAiZXh0ZW5kIiwgInJjdXQiLCAibGN1dCIpICMgbmV3OiBoYW5kbGluZyBvZiBzdHJpbmdzIGxv
bmdlciB0aGFuIHdpZHRoCiwgbWluLmRpZ2l0cyA9IDggICAgICAgICAgICAgICAgICMjIG5ldzog
Ciwgd2Fybi5zZXBlcmF0b3IgPSBGQUxTRSAgICAgICAgICMjIG5ldzogY2hlY2tpbmcgZm9yIHNl
cGVyYXRvciBjb3N0cyAobmV2ZXIgY2hlY2tlZCBpZiBzZXA9Jycgb3Igc2VwPScgJykKLCB3YXJu
LnF1b3RhdGlvbi5tYXJrID0gRkFMU0UgICAgIyMgbmV3OiBjaGVja2luZyBmb3Igc2VwZXJhdG9y
IGNvc3RzCikgCnsKCiAgICAjZGVmYXVsdCBmb3IgZGlnaXRzCiAgICBvbGQuZGlnaXRzIDwtIC5P
cHRpb25zJGRpZ2l0cwogICAgb24uZXhpdChvcHRpb25zKGRpZ2l0cz1vbGQuZGlnaXRzKSkKICAg
IG9wdGlvbnMoZGlnaXRzPWNlaWxpbmcobG9nKC5NYWNoaW5lJGRvdWJsZS5iYXNlXi5NYWNoaW5l
JGRvdWJsZS5kaWdpdHMsIDEwKSkpCgogICAgIyBjYWxjdWxhdGluZyBkaWdpdHMgZ2l2ZW4gd2lk
dGhzCiAgICB3aWR0aDJkaWdpdHMuZG91YmxlIDwtIGZ1bmN0aW9uKHdpZHRoKQogICAgICBtYXgo
bWluLmRpZ2l0cywgbWluKC5PcHRpb25zJGRpZ2l0cywgLk9wdGlvbnMkZGlnaXRzIC0gKG5jaGFy
KGZvcm1hdCguTWFjaGluZSRkb3VibGUueG1pbikpIC0gd2lkdGggKSkpCiAgICB3aWR0aDJkaWdp
dHMuY29tcGxleCA8LSBmdW5jdGlvbih3aWR0aCkKICAgICAgbWF4KG1pbi5kaWdpdHMsIG1pbigu
T3B0aW9ucyRkaWdpdHMsIC5PcHRpb25zJGRpZ2l0cyAtIChuY2hhcihmb3JtYXQoLk1hY2hpbmUk
ZG91YmxlLnhtaW4pKSoyKzIgLSB3aWR0aCApKSkKCiAgICAjIGNyZWF0ZSB0ZW1wbGF0ZSBhbmQg
Y29sbGVjdCBzb21lIGluZm9zIGF0IHRoZSByaWdodCBtb21lbnQKICAgIHRlbXBsYXRlIDwtIGxp
c3QoKQoKICAgICNpbml0aWFsaXplIHdhcm5pbmcgaW5kaWNhdG9ycwogICAgc2VwZXJhdG9yLndh
cm5pbmcgPC0gRkFMU0UKICAgIHF1b3RhdGlvbi5tYXJrLndhcm5pbmcgPC0gRkFMU0UKICAgIGV4
dGVuc2lvbi53YXJuaW5nIDwtIEZBTFNFCgogICAgI21ldGhvZAogICAgcGFkLm1ldGhvZCA8LSBt
YXRjaC5hcmcocGFkLm1ldGhvZCkKCiAgICAjbG9naWNhbHMKICAgIGlmIChtb2RlKGxvZ2ljYWxz
KT09J251bWVyaWMnKQogICAgICBsb2dpY2FscyA8LSBhcy5pbnRlZ2VyKGxvZ2ljYWxzKQogICAg
IyBmYWN0b3JzCiAgICBmYWN0b3JzIDwtIG1hdGNoLmFyZyhmYWN0b3JzKQogICAgIyBjb21wYXJl
IHNlcCBhbmQgZGVjLnNlcAogICAgaWYgKGRlYy5zZXA9PXNlcCkKICAgICAgc3RvcCgicGFyc2lu
ZyBydWxlIHZpb2xhdGlvbjogc2VwIG11c3Qgbm90IGVxdWFsIGRlYy5zZXAiKQoKICAgICMgZG9u
J3QgdW5kZXJzdGFuZCB3aHkgb2xkIHdyaXRlLnRhYmxlIGNvbnZlcnRzIHRvIGRhdGFmcmFtZSBh
bmQgZG9lc24ndCB1c2UgaXQsIAogICAgIyBob3dldmVyIGtlZXAgY29udmVydGluZyB0byBkYXRh
ZnJhbWUgdG8gaGF2ZSBhIHVuaXF1ZSBzdGFydGluZyBwb2ludAogICAgaWYgKCFpcy5kYXRhLmZy
YW1lKHgpKSB4IDwtIGRhdGEuZnJhbWUoeCkKICAgIGQgPC0gZGltbmFtZXMoeCkKICAgIHAgPC0g
bmNvbCh4KQogIAogICAgIyBnZXQgY29sdW1uIGluZm9zLCBjb2xtb2RlIG1heSBjaGFuZ2UgbGF0
ZXIKICAgIHRlbXBsYXRlJHN0b3JhZ2UubW9kZSA8LSBjb2xtb2RlIDwtIHVubmFtZSh1bmxpc3Qo
bGFwcGx5KHgsIHN0b3JhZ2UubW9kZSkpKQogICAgdGVtcGxhdGUkYXR0cmlidXRlcyA8LSBsYXBw
bHkoeCwgYXR0cmlidXRlcykKICAgIGlzLmEuZmFjdG9yIDwtIHVubGlzdChsYXBwbHkodGVtcGxh
dGUkYXR0cmlidXRlcywgRlVOPWZ1bmN0aW9uKHgpYW55KCFpcy5uYShtYXRjaCgnZmFjdG9yJywg
eCRjbGFzcykpKSApKQogICAgCiAgICAjIHByZXBhcmUgcXVvdGUgYXMgTE9HSUNBTCB2ZWN0b3IK
ICAgICMgQlVUIGhhdmUgTkFzIGluIGV4cGFuZGVkIHZlY3RvciBpbnN0ZWFkIG9mIEZBTFNFCiAg
ICAjIGFzIHNvbWUgY29sdW1ucyBzdGlsbCBtYXkgY2hhbmdlIHRvIGNoYXJhY3RlcgogICAgaWYg
KGlzLmxvZ2ljYWwocXVvdGUpKSB7CiAgICAgICAgaWYgKGxlbmd0aChxdW90ZSk9PTEpewogICAg
ICAgICAgaWYgKHF1b3RlKSAKICAgICAgICAgICAgcXVvdGUgPC0gaWZlbHNlKGNvbG1vZGU9PSJj
aGFyYWN0ZXIiLCBUUlVFLCBOQSkKICAgICAgICAgICMgZWxzZQogICAgICAgICAgICAjIHF1b3Rl
PT1GQUxTRQogICAgICAgIH0gZWxzZSBpZiAobGVuZ3RoKHF1b3RlKSE9cCkgCiAgICAgICAgICBz
dG9wKCJpbnZhbGlkIGxlbmd0aCBvZiBsb2dpY2FsIHF1b3RlIHZlY3RvciIpCiAgICB9IGVsc2Ug
aWYgKGlzLm51bWVyaWMocXVvdGUpKSB7CiAgICAgICAgaWYgKGFueShxdW90ZSA8IDEgfCBxdW90
ZSA+IHApKSAKICAgICAgICAgICAgc3RvcCgiaW52YWxpZCBudW1iZXJzIGluIHF1b3RlIikKICAg
IAlxdW90ZSA8LSAoMTpwKSAlaW4lIHF1b3RlCiAgICB9IGVsc2UgCiAgICAgICAgc3RvcCgiaW52
YWxpZCBxdW90ZSBzcGVjaWZpY2F0aW9uIikKCiAgICAjIHByZXBhcmUgY29sLm5hbWVzCiAgICBp
ZiAoaXMubG9naWNhbChjb2wubmFtZXMpKSAKICAgICAgICBjb2wubmFtZXMgPC0gaWYgKGNvbC5u
YW1lcykgZFtbMl1dIGVsc2UgTlVMTAogICAgZWxzZSB7CiAgICAgICAgaWYgKGxlbmd0aChjb2wu
bmFtZXMpICE9IHApIAogICAgICAgICAgICBzdG9wKCJpbnZhbGlkIGNvbC5uYW1lcyBzcGVjaWZp
Y2F0aW9uIikKICAgICAgICBjb2wubmFtZXMgPC0gYXMuY2hhcmFjdGVyKGNvbC5uYW1lcykKICAg
IH0KICAgIGlmIChhbnkoZHVwbGljYXRlZChjKGNvbC5uYW1lcywgY29ybmVyLm5hbWUpKSkpd2Fy
bmluZygiY29sLm5hbWVzIGFuZCBjb3JuZXIubmFtZSBhcmUgbm90IHVuaXF1ZSIpCiAgICAjIGZp
eCBjb2wubmFtZXMgYW5kIGNvcm5lci5uYW1lIGZvciB0ZW1wbGF0ZQogICAgdGVtcGxhdGUkY29s
Lm5hbWVzIDwtIGNvbC5uYW1lcwogICAgdGVtcGxhdGUkY29ybmVyLm5hbWUgPC0gY29ybmVyLm5h
bWUKICAgICMgaGFuZGxlIHF1b3Rpbmcgb2YgY29sLm5hbWVzIGFscmVhZHkgaGVyZSwgYXMgaXQg
aW5mbHVlbmNlcyB3aWR0aHMKICAgIGlmICghaXMubnVsbChjb2wubmFtZXMpKSB7CiAgICAgIGlm
IChhbnkocXVvdGUsIG5hLnJtPVRSVUUpKQogICAgICAgIGNvbC5uYW1lcyA8LSBwYXN0ZShxdW90
YXRpb24ubWFyaywgY29sLm5hbWVzLCBxdW90YXRpb24ubWFyaywgc2VwPScnKQogICAgfQoKICAg
ICMgcHJlcGFyZSByb3cubmFtZXMKICAgIGlmIChpcy5sb2dpY2FsKHJvdy5uYW1lcykpCiAgICAg
ICAgcm93Lm5hbWVzIDwtIGlmIChyb3cubmFtZXMpIGRbWzFdXSBlbHNlIE5VTEwKICAgIGVsc2Ug
ewogICAgICAgIGlmIChsZW5ndGgocm93Lm5hbWVzKSAhPSBucm93KHgpKSAKICAgICAgICAgIHN0
b3AoImludmFsaWQgcm93Lm5hbWVzIHNwZWNpZmljYXRpb24iKQogICAgICAgIGlmIChhbnkoZHVw
bGljYXRlZChyb3cubmFtZXMpKSkKICAgICAgICAgIHdhcm5pbmcoImR1cGxpY2F0ZWQgcm93Lm5h
bWVzIikKICAgICAgICByb3cubmFtZXMgPC0gYXMuY2hhcmFjdGVyKHJvdy5uYW1lcykKICAgIH0K
CiAgICAjIHByZXBhcmUgcGFyYW1ldGVycyB0byBmb3JtYXQgLyBwYWQgKGZvcm1hdEMgaXMgdG9v
IHNsb3cpCiAgICAjIHdpZHRocyBhbmQgZGlnaXRzIG1heSBjaGFuZ2UgbGF0ZXIKICAgIGZpeGVk
LndpZHRoIDwtICFpcy5udWxsKGRpZ2l0cykgfHwgIWlzLm51bGwod2lkdGhzKQogICAgaWYgKGZp
eGVkLndpZHRoKXsKCiAgICAgICAgaWYgKGlzLm51bGwod2lkdGhzKSkKICAgICAgICAgIHdpZHRo
cyA8LSByZXAobGlzdChOVUxMKSwgcCkKICAgICAgICBlbHNlIGlmIChsZW5ndGgod2lkdGhzKT09
MSkKICAgICAgICAgIGlmIChpcy5sb2dpY2FsKHdpZHRocykpCiAgICAgICAgICAgIGlmICh3aWR0
aHMpewogICAgICAgICAgICAgIHdpZHRocyA8LSByZXAobGlzdChOVUxMKSwgcCkKICAgICAgICAg
ICAgICByb3cubmFtZXMud2lkdGggPC0gTlVMTCAgIyMgbWFrZSBzaHVyZSBpdCBpc24ndCBUUlVF
IGZyb20gd3JhcHBlcgogICAgICAgICAgICB9ZWxzZQogICAgICAgICAgICAgIHN0b3AoIndpZHRo
PUZBTFNFIG5vdCBhbGxvd2VkIikKICAgICAgICAgIGVsc2UgCiAgICAgICAgICAgIHdpZHRocyA8
LSBhcy5saXN0KHJlcCh3aWR0aHMsIHApKQogICAgICAgIGVsc2UgaWYgKGxlbmd0aCh3aWR0aHMp
PT1wKSAKICAgICAgICAgIHdpZHRocyA8LSBhcy5saXN0KHdpZHRocykKICAgICAgICBlbHNlCiAg
ICAgICAgICBzdG9wKCJpbnZhbGlkIGxlbmd0aCBmb3Igd2lkdGhzIikKCiAgICAgICAgaWYgKGlz
Lm51bGwoZGlnaXRzKSkKICAgICAgICAgIGRpZ2l0cyA8LSByZXAobGlzdChOVUxMKSwgcCkKICAg
ICAgICBlbHNlIGlmIChsZW5ndGgoZGlnaXRzKT09MSkgCiAgICAgICAgICBkaWdpdHMgPC0gYXMu
bGlzdChyZXAoZGlnaXRzLCBwKSkKICAgICAgICBlbHNlIGlmIChsZW5ndGgoZGlnaXRzKT09cCkK
ICAgICAgICAgIGRpZ2l0cyA8LSBhcy5saXN0KGRpZ2l0cykKICAgICAgICBlbHNlCiAgICAgICAg
ICBzdG9wKCJpbnZhbGlkIGxlbmd0aCBmb3IgZGlnaXRzIikKICAgICAgIAogICAgfQoKCiAgICAj
IGNvbnZlcnQgdG8gY2hhcmFjdGVyIHJlc3BlY3RpbmcgbG9naWNhbHM9LCBmYWN0b3JzPSwgbmE9
LCBxdW90ZT0sIGRlYy5zZXA9IGFuZCBmaXhlZC53aWR0aAogICAgZm9yIChpIGluIDE6cCl7Cgog
ICAgICAgIGNvbHVtbiA8LSB4W1tpXV0KICAgICAgICBpc25hIDwtIGlzLm5hKGNvbHVtbikKCiAg
ICAgICAgIyBjb252ZXJ0IGxvZ2ljYWwgdG8gaW50ZWdlciBvciBjaGFyYWN0ZXIgZGVwZW5kaW5n
IG9uIGxvZ2ljYWxzPQogICAgICAgIGlmIChjb2xtb2RlW2ldPT0nbG9naWNhbCcpIHsKICAgICAg
ICAgIGNvbHVtbiA8LSBsb2dpY2Fsc1tjb2x1bW4rMV0KICAgICAgICAgIGNvbG1vZGVbaV0gPC0g
c3RvcmFnZS5tb2RlKGxvZ2ljYWxzKQogICAgICAgIH0KCiAgICAgICAgIyBjb252ZXJ0IGZhY3Rv
cnMgdG8gaW50ZWdlciBvciBjaGFyYWN0ZXIgZGVwZW5kaW5nIG9uIGZhY3RvcnM9CiAgICAgICAg
aWYgKGlzLmZhY3Rvcihjb2x1bW4pKXsKICAgICAgICAgIGlmIChmYWN0b3JzPT0nbGV2ZWxzJykg
ewogICAgICAgICAgICBjb2x1bW4gPC0gYXMuY2hhcmFjdGVyKGNvbHVtbikKICAgICAgICAgICAg
Y29sbW9kZVtpXSA8LSAnY2hhcmFjdGVyJwogICAgICAgICAgfQogICAgICAgICAgZWxzZSB7CiAg
ICAgICAgICAgIGNvbHVtbiA8LSBhcy5pbnRlZ2VyKGNvbHVtbikKICAgICAgICAgICAgY29sbW9k
ZVtpXSA8LSAnaW50ZWdlcicKICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgbm93IHRy
ZWF0IGNvbXBsZXgsIGRvdWJsZSwgaW50ZWdlciBvciBjaGFyYWN0ZXIKICAgICAgICBpZiAoY29s
bW9kZVtpXT09J2NvbXBsZXgnKXsKICAgICAgICAgIGlmIChmaXhlZC53aWR0aCl7CiAgICAgICAg
ICAgIGlmICghaXMubnVsbCh3aWR0aHNbW2ldXSkgJiYgaXMubnVsbChkaWdpdHNbW2ldXSkpCiAg
ICAgICAgICAgICAgZGlnaXRzW1tpXV0gPC0gd2lkdGgyZGlnaXRzLmNvbXBsZXgod2lkdGhzW1tp
XV0pCiAgICAgICAgICAgIGNvbHVtbiA8LSBmb3JtYXQoY29sdW1uLCBkaWdpdHM9ZGlnaXRzW1tp
XV0pCiAgICAgICAgICB9ZWxzZXsKICAgICAgICAgICAgY29sdW1uIDwtIGFzLmNoYXJhY3Rlcihj
b2x1bW4pCiAgICAgICAgICB9CiAgICAgICAgICBpZiAoZGVjLnNlcCE9Jy4nKQogICAgICAgICAg
ICBjb2x1bW4gPC0gZ3N1YignWy5dJywgZGVjLnNlcCwgY29sdW1uLCBpZ25vcmUuY2FzZT1GQUxT
RSwgZXh0ZW5kZWQ9RkFMU0UpCgogICAgICAgIH1lbHNlIGlmIChjb2xtb2RlW2ldID09ICdkb3Vi
bGUnKXsKCiAgICAgICAgICBpZiAoZml4ZWQud2lkdGgpeyAKICAgICAgICAgICAgaWYgKCFpcy5u
dWxsKHdpZHRoc1tbaV1dKSAmJiBpcy5udWxsKGRpZ2l0c1tbaV1dKSkKICAgICAgICAgICAgICBk
aWdpdHNbW2ldXSA8LSB3aWR0aDJkaWdpdHMuZG91YmxlKHdpZHRoc1tbaV1dKQogICAgICAgICAg
ICBjb2x1bW4gPC0gZm9ybWF0KGNvbHVtbiwgZGlnaXRzPWRpZ2l0c1tbaV1dKQogICAgICAgICAg
fWVsc2UgCiAgICAgICAgICAgIGNvbHVtbiA8LSBhcy5jaGFyYWN0ZXIoY29sdW1uKQogICAgICAg
ICAgaWYgKGRlYy5zZXAhPScuJykgCiAgICAgICAgICAgIGNvbHVtbiA8LSBnc3ViKCdbLl0nLCBk
ZWMuc2VwLCBjb2x1bW4sIGlnbm9yZS5jYXNlPUZBTFNFLCBleHRlbmRlZD1GQUxTRSkKICAgICAg
ICAgIAogICAgICAgIH1lbHNlIGlmIChjb2xtb2RlW2ldID09ICdpbnRlZ2VyJyl7CgogICAgICAg
ICAgaWYgKGZpeGVkLndpZHRoKXsgCiAgICAgICAgICAgIGNvbHVtbiA8LSBmb3JtYXQoY29sdW1u
KQogICAgICAgICAgfWVsc2UgCiAgICAgICAgICAgIGNvbHVtbiA8LSBhcy5jaGFyYWN0ZXIoY29s
dW1uKQogICAgICAgICAgCiAgICAgICAgfWVsc2V7ICMgY29sbW9kZVtpXT09J2NoYXJhY3RlcicK
CiAgICAgICAgICAjIGNoZWNrIGZvciBwcm9ibGVtYXRpYyBjaGFyYWN0ZXJzCiAgICAgICAgICBp
ZiAod2Fybi5zZXBlcmF0b3IgCiAgICAgICAgICAgICAgJiYgIShzZXAgJWluJSBjKCIiLCAiICIp
KSAKICAgICAgICAgICAgICAmJiBhbnkoZ3JlcChzZXAsIGNvbHVtbiwgaWdub3JlLmNhc2U9RkFM
U0UsIGV4dGVuZGVkPUZBTFNFLCB2YWx1ZT1GQUxTRSkpCiAgICAgICAgICAgICApewogICAgICAg
ICAgICAgICB3YXJuaW5nKHBhc3RlKCJzZXBlcmF0b3IgaW4gY29sdW1uIDwiLCBkW1syXV1baV0s
ICI+Iiwgc2VwPSIiKSkKICAgICAgICAgICAgICAgc2VwZXJhdG9yLndhcm5pbmcgPC0gVFJVRQog
ICAgICAgICAgICAgIH0KICAgICAgICAgIGlmICh3YXJuLnF1b3RhdGlvbi5tYXJrIAogICAgICAg
ICAgICAgICYmIGFueShncmVwKHF1b3RhdGlvbi5tYXJrLCBjb2x1bW4sIGlnbm9yZS5jYXNlPUZB
TFNFLCBleHRlbmRlZD1GQUxTRSwgdmFsdWU9RkFMU0UpKQogICAgICAgICAgICAgKXsKICAgICAg
ICAgICAgICAgd2FybmluZyhwYXN0ZSgicXVvdGF0aW9uIG1hcmsgaW4gY29sdW1uIDwiLCBkW1sy
XV1baV0sICI+Iiwgc2VwPSIiKSkKICAgICAgICAgICAgICAgcXVvdGF0aW9uLm1hcmsud2Fybmlu
ZyA8LSBUUlVFCiAgICAgICAgICAgICAgfQoKICAgICAgICAgIGlmIChxdW90YXRpb24ubWFyayAh
PSBlc2NhcGVkLnF1b3RhdGlvbi5tYXJrKQogICAgICAgICAgICBjb2x1bW4gPC0gZ3N1YihxdW90
YXRpb24ubWFyaywgZXNjYXBlZC5xdW90YXRpb24ubWFyaywgY29sdW1uLCBpZ25vcmUuY2FzZT1G
QUxTRSwgZXh0ZW5kZWQ9RkFMU0UpCgogICAgICAgICAgaWYgKCBhbnkocXVvdGUsIG5hLnJtPVRS
VUUpICYmIGlzLm5hKHF1b3RlW2ldKSApCiAgICAgICAgICAgICAgcXVvdGVbaV0gPC0gVFJVRQog
ICAgICAgICAgCiAgICAgICAgfQoKICAgICAgICAjIGZpcnN0IHF1b3RlCiAgICAgICAgaWYgKCFp
cy5uYShxdW90ZVtpXSkgJiYgcXVvdGVbaV0pIAogICAgICAgICAgY29sdW1uIDwtIHBhc3RlKHF1
b3RhdGlvbi5tYXJrLCBjb2x1bW4sIHF1b3RhdGlvbi5tYXJrLCBzZXA9JycpCgogICAgICAgICMg
dGhlbiBkZXRlcm1pbmUgYWN0dWFsIHdpZHRoCiAgICAgICAgaWYgKGZpeGVkLndpZHRoKQogICAg
ICAgICAgaWYgKGNvbG1vZGVbaV09PSdjaGFyYWN0ZXInKQoJICAgIGFjdHVhbC53aWR0aCA8LSBt
YXgobmNoYXIoY29sdW1uKSkKCSAgZWxzZQoJICAgIGFjdHVhbC53aWR0aCA8LSAobmNoYXIoY29s
dW1uWzFdKSkKCSAgICAKICAgICAgICAjIHRoZW4gYWRkIG5hLnN0cmluZwogICAgICAgICMgWzFd
OiBhbGxvdyBuYSB0byBjYXJyeSBuYS5zdHJpbmdzIGludG8gdGVtcGxhdGUsIGJ1dCB1c2Ugb25s
eSBmaXJzdCBvbmUKICAgICAgICBpZiAoIWlzLm5hKHF1b3RlW2ldKSAmJiBxdW90ZVtpXSl7CiAg
ICAgICAgICBuYS53aWR0aCA8LSBuY2hhcihuYVsxXSkrMgogICAgICAgICAgaWYgKGZpeGVkLndp
ZHRoICYmIGNvbG1vZGUhPSdjaGFyYWN0ZXInICYmIG5hLndpZHRoPGFjdHVhbC53aWR0aCkKICAg
ICAgICAgICAgIyBwYWQgYWxyZWFkeSBoZXJlCiAgICAgICAgICAgIGNvbHVtbltpc25hXSA8LSBw
YWQocGFzdGUocXVvdGF0aW9uLm1hcmssIG5hWzFdLCBxdW90YXRpb24ubWFyaywgc2VwPScnKQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgd2lkdGg9YWN0dWFsLndpZHRoKQogICAg
ICAgICAgZWxzZQogICAgICAgICAgICAjIG5lZWQgbGF0ZXIgcGFkZGluZyBhbnlob3cKICAgICAg
ICAgICAgY29sdW1uW2lzbmFdIDwtIHBhc3RlKHF1b3RhdGlvbi5tYXJrLCBuYVsxXSwgcXVvdGF0
aW9uLm1hcmssIHNlcD0nJykKICAgICAgICB9ZWxzZXsKICAgICAgICAgIG5hLndpZHRoIDwtIG5j
aGFyKG5hWzFdKQogICAgICAgICAgaWYgKGZpeGVkLndpZHRoICYmIGNvbG1vZGUhPSdjaGFyYWN0
ZXInICYmIG5hLndpZHRoPGFjdHVhbC53aWR0aCkKICAgICAgICAgICAgIyBwYWQgYWxyZWFkeSBo
ZXJlCiAgICAgICAgICAgIGNvbHVtbltpc25hXSA8LSBwYWQobmFbMV0sIHdpZHRoPWFjdHVhbC53
aWR0aCkKICAgICAgICAgIGVsc2UKICAgICAgICAgICAgIyBuZWVkIGxhdGVyIHBhZGRpbmcgYW55
aG93CiAgICAgICAgICAgIGNvbHVtbltpc25hXSA8LSBuYVsxXQogICAgICAgIH0KCiAgICAgICAg
IyB0aGVuIGRldGVybWluZSBmaW5hbCB3aWR0aCAKICAgICAgICBpZiAoZml4ZWQud2lkdGgpewoK
ICAgICAgICAgICMgKG5jaGFyKGNvbC5uYW1lc1tpXSkgbWF5IGJlIG51bWVyaWMoMCksIHdpZHRo
c1tbaV1dIG1heSBOVUxMKQogICAgICAgICAgbWF4LndpZHRoIDwtIG1heChhY3R1YWwud2lkdGgs
IG5hLndpZHRoLCBuY2hhcihjb2wubmFtZXNbaV0pLCB3aWR0aHNbW2ldXSkgCiAgICAgICAgICBt
aW4ud2lkdGggPC0gbWF4KG5hLndpZHRoLCBuY2hhcihjb2wubmFtZXNbaV0pLCB3aWR0aHNbW2ld
XSkKCiAgICAgICAgICBpZiAoY29sbW9kZVtpXSA9PSAnY2hhcmFjdGVyJyl7CiAgICAgICAgICAg
ICMganVzdCBwYWQ/CiAgICAgICAgICAgIGlmICggaXMubnVsbCh3aWR0aHNbW2ldXSkgfHwgbWF4
LndpZHRoPT13aWR0aHNbW2ldXSB8fCBtaW4ud2lkdGg+d2lkdGhzW1tpXV0gCiAgICAgICAgICAg
ICAgICAgfHwgcGFkLm1ldGhvZCAlaW4lIGMoInZhcmlhYmxlIiwgImV4dGVuZCIpICkKICAgICAg
ICAgICAgICBjb2x1bW4gPC0gcGFkKGNvbHVtbiwgd2lkdGg9bWF4LndpZHRoKQogICAgICAgICAg
ICBlbHNlIHsKICAgICAgICAgICAgICAjIHRyeSB0byByZWR1Y2UgdG8gd2lkdGhbW2ldXSAoPT1t
aW4ud2lkdGgpCiAgICAgICAgICAgICAgY29sdW1uIDwtIHBhZChjb2x1bW4sIHdpZHRoPW1pbi53
aWR0aCwgbWV0aG9kPXBhZC5tZXRob2QpCiAgICAgICAgICAgICAgIyB0ZXN0IGlmIHN1Y2Nlc3Nm
dWxsCiAgICAgICAgICAgICAgaWYgKHBhZC5tZXRob2Q9PSdhYmJyZXZpYXRlJyl7CiAgICAgICAg
ICAgICAgICBtYXgud2lkdGggPC0gbWF4KG5jaGFyKGNvbHVtbikpCiAgICAgICAgICAgICAgICBp
ZiAobWF4LndpZHRoPm1pbi53aWR0aCkKICAgICAgICAgICAgICAgICAgY29sdW1uIDwtIHBhZChj
b2x1bW4sIHdpZHRoPW1heC53aWR0aCkKICAgICAgICAgICAgICB9ZWxzZSAjIHBhZC5tZXRob2Qg
JWluJSBjKCJyY3V0IiwgImxjdXQiKQogICAgICAgICAgICAgICAgbWF4LndpZHRoIDwtIG1pbi53
aWR0aAogICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgICAgfWVsc2V7ICMgY29sbW9k
ZVtpXSAlaW4lIGMoY29tcGxleCwgZG91YmxlLCBpbnRlZ2VyKQogICAgICAgICAgICAjIChhY3R1
YWwud2lkdGggYW5kIG5hLndpZHRoIDwgYWN0dWFsLndpZHRoIGFscmVhZHkgcGFkZGVkKQogICAg
ICAgICAgICBpZiAobWF4LndpZHRoPmFjdHVhbC53aWR0aCkKICAgICAgICAgICAgICBjb2x1bW4g
PC0gcGFkKGNvbHVtbiwgd2lkdGg9bWF4LndpZHRoKQogICAgICAgICAgfQoKICAgICAgICAgIGlm
ICghaXMubnVsbChjb2wubmFtZXMpKQogICAgICAgICAgICBjb2wubmFtZXNbaV0gPC0gcGFkKGNv
bC5uYW1lc1tpXSwgd2lkdGg9bWF4LndpZHRoKQoKICAgICAgICAgICMgd2FybmluZ3MgYW5kIG1h
aW50YWluaW5nIHdpZHRoW1tpXV0KICAgICAgICAgIGlmIChpcy5udWxsKHdpZHRoc1tbaV1dKSkK
ICAgICAgICAgICAgd2lkdGhzW1tpXV0gPC0gbWF4LndpZHRoCiAgICAgICAgICBlbHNlIGlmICht
YXgud2lkdGggPiB3aWR0aHNbW2ldXSl7CiAgICAgICAgICAgIHdpZHRoc1tbaV1dIDwtIG1heC53
aWR0aAogICAgICAgICAgICBleHRlbnNpb24ud2FybmluZyA8LSBUUlVFCiAgICAgICAgICAgIHdh
cm5pbmcocGFzdGUoImV4dGVuZGluZyB3aWR0aCBvZiBjb2x1bW4gPCIsIGRbWzJdXVtpXSwgIj4g
dG8gIiwgbWF4LndpZHRoLCAiIHRvIGF2b2lkIHRydW5jYXRpbmciLCBzZXA9IiIpKQogICAgICAg
ICAgfQoKICAgICAgICB9CgogICAgICAgIHhbW2ldXSA8LSBjb2x1bW4KICAgIH0KCiAgICAjIGRl
Y2lkZSBhYm91dCBjb3JuZXIubmFtZQogICAgaWYgKGlzLm51bGwocm93Lm5hbWVzKSB8fCBpcy5u
dWxsKGNvbC5uYW1lcykpIAogICAgICBjb3JuZXIubmFtZSA8LSBOVUxMCiAgICAjIGhhbmRsZSBx
dW90aW5nIGFuZCB3aWR0aCBvZiByb3cubmFtZXMgYW5kIGNvcm5lci5uYW1lLCBhbmQgYmluZCB0
byB4CiAgICBpZiAoIWlzLm51bGwocm93Lm5hbWVzKSl7CiAgICAgIGlmIChhbnkocXVvdGUsIG5h
LnJtPVRSVUUpKSB7CiAgICAgICAgcm93Lm5hbWVzIDwtIHBhc3RlKHF1b3RhdGlvbi5tYXJrLCBy
b3cubmFtZXMsIHF1b3RhdGlvbi5tYXJrLCBzZXA9JycpCiAgICAgICAgaWYgKCFpcy5udWxsKGNv
cm5lci5uYW1lKSkgY29ybmVyLm5hbWUgPC0gcGFzdGUocXVvdGF0aW9uLm1hcmssIGNvcm5lci5u
YW1lLCBxdW90YXRpb24ubWFyaywgc2VwPScnKQogICAgICB9CiAgICAgIGlmIChmaXhlZC53aWR0
aCB8fCAhaXMubnVsbChyb3cubmFtZXMud2lkdGgpKSB7CiAgICAgICAgbWF4LndpZHRoIDwtIG1h
eChuY2hhcihjKGNvcm5lci5uYW1lLCByb3cubmFtZXMpKSkKICAgICAgICBpZiAoaXMubnVsbChy
b3cubmFtZXMud2lkdGgpKQogICAgICAgICAgcm93Lm5hbWVzLndpZHRoIDwtIG1heC53aWR0aAog
ICAgICAgIGVsc2UgaWYgKHJvdy5uYW1lcy53aWR0aDxtYXgud2lkdGgpewogICAgICAgICAgd2Fy
bmluZyhwYXN0ZSgiZXh0ZW5kaW5nIHdpZHRoIG9mIHJvdy5uYW1lcyB0byAiLCBtYXgud2lkdGgs
ICIgdG8gYXZvaWQgdHJ1bmNhdGluZyIsIHNlcD0iIikpCiAgICAgICAgICBleHRlbnNpb24ud2Fy
bmluZyA8LSBUUlVFCiAgICAgICAgICByb3cubmFtZXMud2lkdGggPC0gbWF4LndpZHRoCiAgICAg
ICAgfQogICAgICAgIHJvdy5uYW1lcyA8LSBwYWQocm93Lm5hbWVzLCB3aWR0aD1yb3cubmFtZXMu
d2lkdGgpCiAgICAgICAgaWYgKCFpcy5udWxsKGNvcm5lci5uYW1lKSkgY29ybmVyLm5hbWUgPC0g
cGFkKGNvcm5lci5uYW1lLCB3aWR0aD1yb3cubmFtZXMud2lkdGgpCiAgICAgIH0KICAgICAgeCA8
LSBjYmluZChyb3cubmFtZXMsIHgpCiAgICB9CgogICAgIyBvdXQgY29sLm5hbWVzCiAgICBpZiAo
IWlzLm51bGwoY29sLm5hbWVzKSl7CiAgICAgIGlmIChhcHBlbmQpIAogICAgICAgIHdhcm5pbmco
ImRyb3BwaW5nIGNvbHVtbiBuYW1lcyBiZWNhdXNlIG9mIGFwcGVuZD1UUlVFIikKICAgICAgZWxz
ZXsKICAgICAgICAgIGNvbC5uYW1lcyA8LSBjKGNvcm5lci5uYW1lLCBjb2wubmFtZXMpCiAgICAg
ICAgICBjYXQoY29sLm5hbWVzLCBmaWxlPWZpbGUsIHNlcCA9IHNlcCwgYXBwZW5kID0gYXBwZW5k
KQogICAgICAgICAgYXBwZW5kIDwtIFRSVUUKICAgICAgICAgIGNhdChlb2wsIGZpbGU9ZmlsZSwg
YXBwZW5kID0gYXBwZW5kKQogICAgICB9CiAgICB9CiAgICAjIG91dCBkYXRhCiAgICBjYXQodCh4
KSwgZmlsZT1maWxlLCBzZXAgPSBjKHJlcChzZXAsIG5jb2woeCkgLSAxKSwgZW9sKSwgYXBwZW5k
ID0gYXBwZW5kKQoKICAgICMgY3JlYXRlIHRlbXBsYXRlCiAgICBpZiAoaXMubnVsbChjb2wubmFt
ZXMpKXsKICAgICAgY29sLm5hbWVzIDwtIGRbWzJdXQogICAgICBoZWFkZXIgPC0gRkFMU0UKICAg
IH1lbHNlewogICAgICBjb2wubmFtZXMgPC0gdGVtcGxhdGUkY29sLm5hbWVzCiAgICAgIGhlYWRl
ciA8LSBUUlVFCiAgICB9CgogICAgaWYgKGFueShxdW90ZSwgbmEucm09VFJVRSkpewogICAgICBx
dW90ZVtpcy5uYShxdW90ZSldIDwtIEZBTFNFCiAgICB9ZWxzZQogICAgICBxdW90ZSA8LSByZXAo
RkFMU0UsIHApCgogICAgaWYgKCFpcy5udWxsKHJvdy5uYW1lcykpewogICAgICByb3cubmFtZXMu
bG9jICA8LSAxCiAgICAgIGNvbC5uYW1lcyA8LSBjKHRlbXBsYXRlJGNvcm5lci5uYW1lLCBjb2wu
bmFtZXMpCiAgICAgIHF1b3RlIDwtIGMoYW55KHF1b3RlLCBuYS5ybT1UUlVFKSwgcXVvdGUpCiAg
ICAgIGNvbG1vZGUgPC0gYygnY2hhcmFjdGVyJywgdGVtcGxhdGUkc3RvcmFnZS5tb2RlKQogICAg
ICB3aWR0aHMgPC0gYyhyb3cubmFtZXMud2lkdGgsIHdpZHRocykKICAgICAgaWYgKCFpcy5udWxs
KGRpZ2l0cykpIGRpZ2l0cyA8LSBjKGxpc3QoTlVMTCksIGRpZ2l0cykKICAgICAgdGVtcGxhdGUk
YXR0cmlidXRlcyA8LSBjKGxpc3QobGlzdChjbGFzcz0nQXNJcycpKSwgdGVtcGxhdGUkYXR0cmli
dXRlcykKICAgICAgbmFtZXModGVtcGxhdGUkYXR0cmlidXRlcylbMV0gPC0gdGVtcGxhdGUkY29y
bmVyLm5hbWUKICAgIH1lbHNlewogICAgICByb3cubmFtZXMubG9jIDwtIDAKICAgICAgY29sbW9k
ZSA8LSB0ZW1wbGF0ZSRzdG9yYWdlLm1vZGUKICAgIH0KCiAgICBxdW90YXRpb24ubWFyay53YXJu
aW5nIDwtIGlmZWxzZSh3YXJuLnF1b3RhdGlvbi5tYXJrLCBxdW90YXRpb24ubWFyay53YXJuaW5n
LCBOQSkKICAgIHNlcGVyYXRvci53YXJuaW5nIDwtIGlmZWxzZSh3YXJuLnNlcGVyYXRvciwgc2Vw
ZXJhdG9yLndhcm5pbmcsIE5BKQoKICAgIHRlbXBsYXRlIDwtIHN0cnVjdHVyZSgKICAgICAgbGlz
dCgKICAgICAgLCBmaWxlID0gZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIyBwZXIgZmlsZSAoY2hhcmFjdGVyKQogICAgICAsIGVvbCA9IGVvbCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAjIHBlciBmaWxlIChjaGFyYWN0ZXIpCiAgICAgICwg
c2VwID0gc2VwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgcGVyIGZp
bGUgKGNoYXJhY3RlcikKICAgICAgLCBkZWMuc2VwID0gZGVjLnNlcCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIyBwZXIgZmlsZSAoY2hhcmFjdGVyKQogICAgICAsIG5hLnN0cmluZ3Mg
PSBuYSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHBlciBmaWxlLCBidXQgYWxs
b3cgbW9yZSB0aGFuIG9uZSAoY2hhcmFjdGVyIHZlY3RvcikKICAgICAgLCBxdW90YXRpb24ubWFy
ayA9IHF1b3RhdGlvbi5tYXJrICAgICAgICAgICAgICAgICAgIyBwZXIgZmlsZSAoY2hhcmFjdGVy
KSwgZS5nLiA8Ij4gaW4gQ1NWIAogICAgICAsIGVzY2FwZWQucXVvdGF0aW9uLm1hcmsgPSBlc2Nh
cGVkLnF1b3RhdGlvbi5tYXJrICAjIHBlciBmaWxlIChjaGFyYWN0ZXIpLCBlLmcuIDwiIj4gaW4g
Q1NWCiAgICAgICwgbG9naWNhbHMgPSBsb2dpY2FscyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICMgcGVyIGZpbGUsIHR3byB2YWx1ZXMgcmVwcmVzZW50aW5nIEZBTFNFIGFuZCBUUlVFIChu
dW1lcmljYWwgb3IgY2hhcmFjdGVyIHZlY3RvcikKICAgICAgLCBmYWN0b3JzID0gZmFjdG9ycyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBwZXIgZmlsZSwgd2V0aGVyIGZhY3RvcnMg
aW4gZmlsZSBhcmUgJ2xldmVscycgb3IgJ2NvZGVzJyAoY2hhcmFjdGVyKQogICAgICAsIHJvdy5u
YW1lcy5sb2MgPSByb3cubmFtZXMubG9jICAgICAgICAgICAgICAgICAgICAjIHBlciBmaWxlLCBj
b2xubyBvZiByb3duYW1lcywgMCA9IG5vIHJvdy5uYW1lcyBpbiBmaWxlIChpbnRlZ2VyKQogICAg
ICAsIGhlYWRlciA9IGhlYWRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHBl
ciBmaWxlLCB3aGV0aGVyIGZpcnN0IHJvdyBpcyBjb2wubmFtZXMgKGxvZ2ljYWwpCiAgICAgICwg
c3RyaXAud2hpdGUgPSBUUlVFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgcGVyIGZp
bGUKICAgICAgLCBjb2wubmFtZXMgPSBjb2wubmFtZXMgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIyBwZXIgY29sdW1uLCBpbmNsdWRpbmcgY29ybmVyLm5hbWUgKGNoYXJhY3RlciB2ZWN0b3Ip
CiAgICAgICwgcXVvdGUgPSBxdW90ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICMgcGVyIGNvbHVtbiwgd2hldGhlciBjb2x1bW4gaXMgcXVvdGVkIChsb2dpY2FsIHZlY3RvcikK
ICAgICAgLCBzdG9yYWdlLm1vZGUgPSBjb2xtb2RlICAgICAgICAgICAgICAgICAgICAgICAgICAg
IyBwZXIgY29sdW1uLCAoY2hhcmFjdGVyIHZlY3RvcikKICAgICAgLCB3aWR0aHMgPSB3aWR0aHMg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBwZXIgY29sdW1uLCBpbmNsdWRpbmcg
cm93Lm5hbWVzLndpZHRoIChsaXN0IG9yIE5VTEwpCiAgICAgICwgZGlnaXRzID0gZGlnaXRzICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgcGVyIGNvbHVtbiwgKGxpc3Qgb3IgTlVM
TCkKICAgICAgLCBhdHRyaWJ1dGVzID0gdGVtcGxhdGUkYXR0cmlidXRlcyAgICAgICAgICAgICAg
ICAgIyBwZXIgY29sdW1uLCAobGlzdCkKICAgICAgLCBleHRlbnNpb24ud2FybmluZyA9IGV4dGVu
c2lvbi53YXJuaW5nICAgICAgICAgICAgIyBwZXIgZmlsZSwgVFJVRS9GQUxTRSBpbmRpY2F0ZXMg
d2V0aGVyIG91dCBzcGVjcyBkaWZmZXIgZnJvbSBpbiBzcGVjcyAKICAgICAgLCBzZXBlcmF0b3Iu
d2FybmluZyA9IHNlcGVyYXRvci53YXJuaW5nICAgICAgICAgICAgIyBwZXIgZmlsZSwgVFJVRS9G
QUxTRS9OQQogICAgICAsIHF1b3RhdGlvbi5tYXJrLndhcm5pbmcgPSBxdW90YXRpb24ubWFyay53
YXJuaW5nICAjIHBlciBmaWxlLCBUUlVFL0ZBTFNFL05BCiAgICAgICkKICAgICwgY2xhc3M9InRl
bXBsYXRlIgogICAgKQoKICAgIHJldHVybihpbnZpc2libGUodGVtcGxhdGUpKQp9CgoKCgojIyB3
cmFwcGVyIGZ1bmN0aW9uIGZvciBmaXhlZCBmb3JtYXQKIyMgKEdOVSkgQ29weXJpZ2h0IEpPQSAx
OTk5Cgp3cml0ZS5maXggPC0gZnVuY3Rpb24gKHgsIGZpbGUgPSAnJwosIGFwcGVuZCA9IEZBTFNF
CiwgcXVvdGUgPSBGQUxTRSAgICAgICAgICAgIyBjaGFuZ2VkIGZvciBmaXhlZCBmb3JtYXQKLCBz
ZXAgPSAnJyAgICAgICAgICAgICAgICAjIGNoYW5nZWQgZm9yIGZpeGVkIGZvcm1hdAosIGVvbCA9
ICdcbicKLCBuYSA9ICcnICAgICAgICAgICAgICAgICAjIGNoYW5nZWQgZm9yIGZpeGVkIGZvcm1h
dAosIHJvdy5uYW1lcyA9IFRSVUUKLCBjb2wubmFtZXMgPSBGQUxTRSAgICAgICAjIGNoYW5nZWQg
Zm9yIGZpeGVkIGZvcm1hdAosIGNvcm5lci5uYW1lID0gJ3Jvd25hbWVzJwosIHJvdy5uYW1lcy53
aWR0aCA9IHVubGlzdCh3aWR0aHNbMV0pCiwgcXVvdGF0aW9uLm1hcmsgPSAnIicKLCBlc2NhcGVk
LnF1b3RhdGlvbi5tYXJrID0gJyInCiwgbG9naWNhbHMgPSBjKCdGQUxTRScsICdUUlVFJykKLCBm
YWN0b3JzID0gYygnbGV2ZWxzJywgJ2NvZGVzJykKLCBkZWMuc2VwID0gJy4nCiwgZGlnaXRzID0g
TlVMTAosIHdpZHRocyA9IFRSVUUgICAgICAgICAgICMgY2hhbmdlZCBmb3IgZml4ZWQgZm9ybWF0
CiwgcGFkLm1ldGhvZCA9ICJhYmJyZXZpYXRlIgosIG1pbi5kaWdpdHMgPSA4Ciwgd2Fybi5zZXBl
cmF0b3IgPSBGQUxTRQosIHdhcm4ucXVvdGF0aW9uLm1hcmsgPSBGQUxTRQopCndyaXRlLnRhYmxl
KHg9eCwgZmlsZT1maWxlCiwgYXBwZW5kID0gYXBwZW5kCiwgcXVvdGUgPSBxdW90ZQosIHNlcCA9
IHNlcAosIGVvbCA9IGVvbAosIG5hID0gbmEKLCByb3cubmFtZXMgPSByb3cubmFtZXMKLCBjb2wu
bmFtZXMgPSBjb2wubmFtZXMKLCBjb3JuZXIubmFtZSA9IGNvcm5lci5uYW1lCiwgcm93Lm5hbWVz
LndpZHRoID0gcm93Lm5hbWVzLndpZHRoCiwgcXVvdGF0aW9uLm1hcmsgPSBxdW90YXRpb24ubWFy
awosIGVzY2FwZWQucXVvdGF0aW9uLm1hcmsgPSBlc2NhcGVkLnF1b3RhdGlvbi5tYXJrCiwgbG9n
aWNhbHMgPSBsb2dpY2FscwosIGZhY3RvcnMgPSBmYWN0b3JzCiwgZGVjLnNlcCA9IGRlYy5zZXAK
LCBkaWdpdHMgPSBkaWdpdHMKLCB3aWR0aHMgPSB3aWR0aHMKLCBwYWQubWV0aG9kID0gcGFkLm1l
dGhvZAosIG1pbi5kaWdpdHMgPSBtaW4uZGlnaXRzCiwgd2Fybi5zZXBlcmF0b3IgPSB3YXJuLnNl
cGVyYXRvcgosIHdhcm4ucXVvdGF0aW9uLm1hcmsgPSB3YXJuLnF1b3RhdGlvbi5tYXJrCikKCgoj
IyB3cmFwcGVyIGZ1bmN0aW9uIGZvciBzZXBlcmF0ZWQgdmFsdWVzCiMjIG5vdGUgdGhhdCBjc3Yg
aW1wb3J0IGlzIE5PVCBmdWxseSBzdXBwb3J0ZWQgeWV0CiMjIHNlcCBpcyBub3QgYWxsb3dlZCBp
biB0aGUgZGF0YQojIyB3YXJuLnNlcGVyYXRvciA9IFRSVUUgY2hlY2tzIGZvciBzZXAKIyMgKEdO
VSkgQ29weXJpZ2h0IEpPQSAxOTk5CndyaXRlLnN2cyA8LSBmdW5jdGlvbiAoeCwgZmlsZSA9ICcn
CiwgYXBwZW5kID0gRkFMU0UKLCBxdW90ZSA9IFRSVUUKLCBzZXAgPSAnOycgICAgICAgICAgICAg
ICAjIGNoYW5nZWQgZm9yIFNWUwosIGVvbCA9ICdcbicKLCBuYSA9ICcnICAgICAgICAgICAgICAg
ICAjIGNoYW5nZWQgZm9yIGZpeGVkIGZvcm1hdAosIHJvdy5uYW1lcyA9IFRSVUUKLCBjb2wubmFt
ZXMgPSBUUlVFCiwgY29ybmVyLm5hbWUgPSAncm93bmFtZXMnCiwgcm93Lm5hbWVzLndpZHRoID0g
dW5saXN0KHdpZHRoc1sxXSkKLCBxdW90YXRpb24ubWFyayA9ICciJwosIGVzY2FwZWQucXVvdGF0
aW9uLm1hcmsgPSAnIiInCiwgbG9naWNhbHMgPSBjKCdGQUxTRScsICdUUlVFJykKLCBmYWN0b3Jz
ID0gYygnbGV2ZWxzJywgJ2NvZGVzJykKLCBkZWMuc2VwID0gJy4nCiwgZGlnaXRzID0gTlVMTAos
IHdpZHRocyA9IE5VTEwKLCBwYWQubWV0aG9kID0gImFiYnJldmlhdGUiCiwgbWluLmRpZ2l0cyA9
IDgKLCB3YXJuLnNlcGVyYXRvciA9IFRSVUUgIyBjaGFuZ2VkIGZvciBTVlMKLCB3YXJuLnF1b3Rh
dGlvbi5tYXJrID0gRkFMU0UKKSAKd3JpdGUudGFibGUoeCwgZmlsZSA9IGZpbGUsIAosIGFwcGVu
ZCA9IGFwcGVuZAosIHF1b3RlID0gcXVvdGUKLCBzZXAgPSBzZXAKLCBlb2wgPSBlb2wKLCBuYSA9
IG5hCiwgcm93Lm5hbWVzID0gcm93Lm5hbWVzCiwgY29sLm5hbWVzID0gY29sLm5hbWVzCiwgY29y
bmVyLm5hbWUgPSBjb3JuZXIubmFtZQosIHJvdy5uYW1lcy53aWR0aCA9IHJvdy5uYW1lcy53aWR0
aAosIHF1b3RhdGlvbi5tYXJrID0gcXVvdGF0aW9uLm1hcmsKLCBlc2NhcGVkLnF1b3RhdGlvbi5t
YXJrID0gZXNjYXBlZC5xdW90YXRpb24ubWFyawosIGxvZ2ljYWxzID0gbG9naWNhbHMKLCBmYWN0
b3JzID0gZmFjdG9ycwosIGRlYy5zZXAgPSBkZWMuc2VwCiwgZGlnaXRzID0gZGlnaXRzCiwgd2lk
dGhzID0gd2lkdGhzCiwgcGFkLm1ldGhvZCA9IHBhZC5tZXRob2QKLCBtaW4uZGlnaXRzID0gbWlu
LmRpZ2l0cwosIHdhcm4uc2VwZXJhdG9yID0gd2Fybi5zZXBlcmF0b3IKLCB3YXJuLnF1b3RhdGlv
bi5tYXJrID0gd2Fybi5xdW90YXRpb24ubWFyawopCgoKCiMjIHdyYXBwZXIgZnVuY3Rpb24gZm9y
IHNwZWNpZmljYXRpb24gdmlhIHRlbXBsYXRlCiMjIGl0IGlzc3VlcyBhIHdhcm5pbmcgaWYgdGVt
cGxhdGUgc3BlY3MgYXJlIGV4dGVuZGVkCiMjIChHTlUpIENvcHlyaWdodCBKT0EgMTk5OQp3cml0
ZS50ZW1wbGF0ZSA8LSBmdW5jdGlvbiAodGVtcGxhdGUsIHgKLCBmaWxlID0gdGVtcGxhdGUkZmls
ZQosIGFwcGVuZCA9IEZBTFNFCiwgZXhjbHVkZS5jb21wYXJlID0gYygnZXh0ZW5zaW9uLndhcm5p
bmcnLCAnZmlsZScsICdkaWdpdHMnKSAgIyMgYWxsIG90aGVyIHRlbXBsYXRlJGVsZW1lbnRzIGFy
ZSBleHBlY3RlZCBlcXVhbCBmb3IgaW5wdXQgYW5kIG91dHB1dCB0ZW1wbGF0ZQosIHF1b3RlID0g
aWYgKHJsKSB0ZW1wbGF0ZSRxdW90ZVstcmxdIGVsc2UgdGVtcGxhdGUkcXVvdGUKLCBzZXAgPSB0
ZW1wbGF0ZSRzZXAKLCBlb2wgPSB0ZW1wbGF0ZSRlb2wKLCBuYSA9IHRlbXBsYXRlJG5hCiwgcm93
Lm5hbWVzID0gYXMubG9naWNhbChybCkKLCBjb2wubmFtZXMgPSBpZiAodGVtcGxhdGUkaGVhZGVy
KXsgaWYgKHJsKSB0ZW1wbGF0ZSRjb2wubmFtZXNbLXJsXSBlbHNlIHRlbXBsYXRlJGNvbC5uYW1l
cyB9IGVsc2UgRkFMU0UKLCBjb3JuZXIubmFtZSA9IGlmIChybCkgdGVtcGxhdGUkY29sLm5hbWVz
W3JsXSBlbHNlICdyb3duYW1lJwosIHJvdy5uYW1lcy53aWR0aCA9IGlmIChybCkgdGVtcGxhdGUk
d2lkdGhzW1tybF1dCiwgcXVvdGF0aW9uLm1hcmsgPSB0ZW1wbGF0ZSRxdW90YXRpb24ubWFyawos
IGVzY2FwZWQucXVvdGF0aW9uLm1hcmsgPSB0ZW1wbGF0ZSRlc2NhcGVkLnF1b3RhdGlvbi5tYXJr
CiwgbG9naWNhbHMgPSB0ZW1wbGF0ZSRsb2dpY2FscwosIGZhY3RvcnMgPSB0ZW1wbGF0ZSRmYWN0
b3JzCiwgZGVjLnNlcCA9IHRlbXBsYXRlJGRlYy5zZXAKLCBkaWdpdHMgPSBpZiAocmwgJiYgIWlz
Lm51bGwodGVtcGxhdGUkZGlnaXRzKSkgdGVtcGxhdGUkZGlnaXRzWy1ybF0gZWxzZSB0ZW1wbGF0
ZSRkaWdpdHMKLCB3aWR0aHMgPSBpZiAocmwgJiYgIWlzLm51bGwodGVtcGxhdGUkd2lkdGhzKSkg
dGVtcGxhdGUkd2lkdGhzWy1ybF0gZWxzZSB0ZW1wbGF0ZSR3aWR0aHMKLCBwYWQubWV0aG9kID0g
J2FiYnJldmlhdGUnCiwgbWluLmRpZ2l0cyA9IDgKLCB3YXJuLnNlcGVyYXRvciA9ICFpcy5uYSh0
ZW1wbGF0ZSRzZXBlcmF0b3Iud2FybmluZykKLCB3YXJuLnF1b3RhdGlvbi5tYXJrID0gIWlzLm5h
KHRlbXBsYXRlJHF1b3RhdGlvbi5tYXJrLndhcm5pbmcpCikKewogIAogICMgZmlyc3QgdGhpbmcg
dG8gZG8gYmVjYXVzZSB1c2VkIGluIHBhcmFtIGRlZnMKICBybCA8LSB0ZW1wbGF0ZSRyb3cubmFt
ZXMubG9jCiAgaWYgKHJsID4gMSkgc3RvcCgid3JpdGUudGFibGUgY3VycmVudGx5IGRvZXMgbm90
IHN1cHBvcnQgd3JpdGluZyByb3cubmFtZXMgb3RoZXIgdGhhbiBmaXJzdCBjb2x1bW4iKQoKICB0
ZW1wbGF0ZTIgPC0gd3JpdGUudGFibGUoeCwgZmlsZSA9IGZpbGUsIAogICwgYXBwZW5kID0gYXBw
ZW5kCiAgLCBxdW90ZSA9IHF1b3RlCiAgLCBzZXAgPSBzZXAKICAsIGVvbCA9IGVvbAogICwgbmEg
PSBuYQogICwgcm93Lm5hbWVzID0gcm93Lm5hbWVzCiAgLCBjb2wubmFtZXMgPSBjb2wubmFtZXMK
ICAsIGNvcm5lci5uYW1lID0gY29ybmVyLm5hbWUKICAsIHJvdy5uYW1lcy53aWR0aCA9IHJvdy5u
YW1lcy53aWR0aAogICwgcXVvdGF0aW9uLm1hcmsgPSBxdW90YXRpb24ubWFyawogICwgZXNjYXBl
ZC5xdW90YXRpb24ubWFyayA9IGVzY2FwZWQucXVvdGF0aW9uLm1hcmsKICAsIGxvZ2ljYWxzID0g
bG9naWNhbHMKICAsIGZhY3RvcnMgPSBmYWN0b3JzCiAgLCBkZWMuc2VwID0gZGVjLnNlcAogICwg
ZGlnaXRzID0gZGlnaXRzCiAgLCB3aWR0aHMgPSB3aWR0aHMKICAsIHBhZC5tZXRob2QgPSBwYWQu
bWV0aG9kCiAgLCBtaW4uZGlnaXRzID0gbWluLmRpZ2l0cwogICwgd2Fybi5zZXBlcmF0b3IgPSB3
YXJuLnNlcGVyYXRvcgogICwgd2Fybi5xdW90YXRpb24ubWFyayA9IHdhcm4ucXVvdGF0aW9uLm1h
cmsKICApCiAgaWYgKCBsZW5ndGgoZXhjbHVkZS5jb21wYXJlKSA8IDEgKQogICAgZXhjbHVkZS5j
b21wYXJlIDwtICdOb3RJblRlbXBsYXRlJwogIGV4IDwtIG1hdGNoKGV4Y2x1ZGUuY29tcGFyZSwg
bmFtZXModGVtcGxhdGUpKQogIGNvbXBhcmUgPC0gYWxsLmVxdWFsKHRlbXBsYXRlWy1leF0sIHRl
bXBsYXRlMlstZXhdKQogIGlmIChsZW5ndGgoY29tcGFyZSk+MSB8fCAhaXMubG9naWNhbChjb21w
YXJlKSB8fCAhY29tcGFyZSl7CiAgICB3YXJuaW5nKCJpbnB1dCBhbmQgb3V0cHV0IHRlbXBsYXRl
IGFyZSBkaWZmZXJlbnQiKQogICAgcHJpbnQoY29tcGFyZSkKICB9CiAgaWYgKHRlbXBsYXRlMiRl
eHRlbnNpb24ud2FybmluZykgCiAgICB3YXJuaW5nKCJleHRlbnNpb24ud2FybmluZzogZGF0YSBo
YXZlIGJlZW4gd3JpdHRlbiBpbiBhIGZvcm1hdCB0aGF0IGRpZmZlcnMgZnJvbSB0aGUgc3BlY2lm
aWNhdGlvbnMiKQogIHJldHVybihpbnZpc2libGUodGVtcGxhdGUyKSkKfQoKCnByaW50LnRlbXBs
YXRlIDwtIGZ1bmN0aW9uKHRlbXBsYXRlKXsKICBpcy5hLmZhY3RvciA8LSB1bmxpc3QobGFwcGx5
KGFzLmxpc3QodGVtcGxhdGUkYXR0cmlidXRlcyksIEZVTj1mdW5jdGlvbih4KWFueSghaXMubmEo
bWF0Y2goJ2ZhY3RvcicsIHgkY2xhc3MpKSkgKSkKICBhcy5pcyA8LSB1bmxpc3QobGFwcGx5KGFz
Lmxpc3QodGVtcGxhdGUkYXR0cmlidXRlcyksIEZVTj1mdW5jdGlvbih4KWFueSghaXMubmEobWF0
Y2goJ0FzSXMnLCB4JGNsYXNzKSkpICkpCiAgCiAgc2luZ2xlcyA8LSBldmFsKGV4cHJlc3Npb24o
YyggCiAgICAgICAgZmlsZSA9IGZpbGUKICAgICAgLCBlb2wgPSBlb2wKICAgICAgLCBzZXAgPSBz
ZXAKICAgICAgLCBkZWMuc2VwID0gZGVjLnNlcAogICAgICAsIG5hLnN0cmluZ3MgPSBuYS5zdHJp
bmdzCiAgICAgICwgcXVvdGF0aW9uLm1hcmsgPSBxdW90YXRpb24ubWFyawogICAgICAsIGVzY2Fw
ZWQucXVvdGF0aW9uLm1hcmsgPSBlc2NhcGVkLnF1b3RhdGlvbi5tYXJrCiAgICAgICwgbG9naWNh
bHMuRkFMU0UgPSBsb2dpY2Fsc1sxXQogICAgICAsIGxvZ2ljYWxzLlRSVUUgPSBsb2dpY2Fsc1sy
XQogICAgICAsIGZhY3RvcnMgPSBmYWN0b3JzCiAgICAgICwgcm93Lm5hbWVzLmxvYyA9IHJvdy5u
YW1lcy5sb2MKICAgICAgLCBoZWFkZXIgPSBoZWFkZXIKICAgICAgLCBleHRlbnNpb24ud2Fybmlu
ZyA9IGV4dGVuc2lvbi53YXJuaW5nICAgICAgICAgICAgCiAgICAgICwgc2VwZXJhdG9yLndhcm5p
bmcgPSBzZXBlcmF0b3Iud2FybmluZyAgICAgICAgICAgIAogICAgICAsIHF1b3RhdGlvbi5tYXJr
Lndhcm5pbmcgPSBxdW90YXRpb24ubWFyay53YXJuaW5nCiAgICAgICkpLCB0ZW1wbGF0ZSkKICBj
YXQocGFzdGUobmFtZXMoc2luZ2xlcyksICc9IDwnLCBzaW5nbGVzLCAnPicsIHNlcD0nJywgY29s
bGFwc2U9J1xuJyksICdcbicsICdcbicpCgogIGlmIChpcy5udWxsKHRlbXBsYXRlJHdpZHRocykp
ewogICAgY2F0KCdkaWdpdHM9IDxOVUxMPlxuJykKICAgIGNhdCgnd2lkdGhzPSA8TlVMTD5cblxu
JykKICAgIAogICAgcHJpbnQubWF0cml4KAogICAgICBjYmluZCgKICAgICAgICBjb2wubmFtZXM9
dGVtcGxhdGUkY29sLm5hbWVzCiAgICAgICwgcXVvdGU9dGVtcGxhdGUkcXVvdGUKICAgICAgLCBz
dG9yYWdlLm1vZGU9dGVtcGxhdGUkc3RvcmFnZS5tb2RlCiAgICAgICwgaXMuZmFjdG9yPWlzLmEu
ZmFjdG9yCiAgICAgICwgYXMuaXMgPSBhcy5pcwogICAgICApCiAgICAsIHF1b3RlPUZBTFNFCiAg
ICAsIHJvd2xhYj1hcy5jaGFyYWN0ZXIoMTpsZW5ndGgodGVtcGxhdGUkY29sLm5hbWVzKSkKICAg
ICkKICB9ZWxzZXsKCiAgICBmb3IgKGkgaW4gMTpsZW5ndGgodGVtcGxhdGUkZGlnaXRzKSl7CiAg
ICAgIGlmIChpcy5udWxsKHRlbXBsYXRlJGRpZ2l0c1tbaV1dKSkgdGVtcGxhdGUkZGlnaXRzW1tp
XV0gPC0gJ05VTEwnCiAgICB9CiAgICB0ZW1wbGF0ZSR3aWR0aHMgPC0gdW5saXN0KHRlbXBsYXRl
JHdpZHRocykKICAgIHRlbXBsYXRlJGRpZ2l0cyA8LSB1bmxpc3QodGVtcGxhdGUkZGlnaXRzKQoK
ICAgIHByaW50Lm1hdHJpeCgKICAgICAgY2JpbmQoCiAgICAgICAgY29sLm5hbWVzPXRlbXBsYXRl
JGNvbC5uYW1lcwogICAgICAsIHdpZHRocz10ZW1wbGF0ZSR3aWR0aHMKICAgICAgLCAiW3N0YXJ0
XSI9Y3Vtc3VtKGMoMSwgdGVtcGxhdGUkd2lkdGhzWy1sZW5ndGgodGVtcGxhdGUkd2lkdGhzKV0p
KQogICAgICAsICJbc3RvcF0iPWN1bXN1bSh0ZW1wbGF0ZSR3aWR0aHMpCiAgICAgICwgcXVvdGU9
dGVtcGxhdGUkcXVvdGUKICAgICAgLCBzdG9yYWdlLm1vZGU9dGVtcGxhdGUkc3RvcmFnZS5tb2Rl
CiAgICAgICwgIltpcy5mYWN0b3JdIj1pcy5hLmZhY3RvcgogICAgICAsICJbYXMuaXNdIiA9IGFz
LmlzCiAgICAgICwgZGlnaXRzPXRlbXBsYXRlJGRpZ2l0cwogICAgICApCiAgICAsIHF1b3RlPUZB
TFNFCiAgICAsIHJvd2xhYj1hcy5jaGFyYWN0ZXIoMTpsZW5ndGgodGVtcGxhdGUkY29sLm5hbWVz
KSkKICAgICkKICB9Cn0KCgpkZW1vLnRlbXBsYXRlIDwtIApmdW5jdGlvbihmaWxlID0gdGVtcGZp
bGUoKSl7CgoJY2F0KCJcblxuXG49PT09PSBUSEUgREFUQSA9PT09PVxuIikKCgl4IDwtIGRhdGEu
ZnJhbWUobnVtPTE6NSswLjEKCSwgY2hhcj1JKGxldHRlcnNbMTo1XSkKCSwgbG9nPUkoYyhUUlVF
LCBGQUxTRSwgTkEsIE5BLCBOQSkpCgksIGZhaz1mYWN0b3IobGV0dGVyc1syMjoyNl0pKQoJeCRj
aGFyWzFdIDwtICcsJwoJeCRjaGFyWzJdIDwtICcjJyAgICMgd2FzICciJwoJeCRjaGFyWzNdIDwt
ICdhIGInCgl4JG51bVsxXSA8LSAuTWFjaGluZSRkb3VibGUueG1pbgoJCglzdHIoeCkKCgljYXQo
IlxuXG5cbj09PT09IEZJWEVEIFdJRFRIIEZPUk1BVCA9PT09PVxuIikKICAgICAgICBjYXQoIi0t
LSB3cml0aW5nIGZpbGUiLCBmaWxlLCAiXG4iKQoJdGVtcGxhdGUgPC0gd3JpdGUuZml4KHgsIGZp
bGU9ZmlsZSkKCWNhdCgiLS0tIHRoaXMgaXMgdGhlIGZpbGU6XG4iKQoJY2F0KHBhc3RlKCJmaWxl
IC0+Iiwgc2NhbihmaWxlPWZpbGUsIHdoYXQ9JycsIHNlcD0nXG4nKSwgY29sbGFwc2U9J1xuJyks
ICdcbicpCgljYXQoIi0tLSB0aGlzIGlzIHRoZSB0ZW1wbGF0ZTpcbiIpCglwcmludCh0ZW1wbGF0
ZSkKCWNhdCgiLS0tIHJlLWltcG9ydGluZyBkYXRhIHVzaW5nIHRlbXBsYXRlXG4iKQoJeDIgPC0g
cmVhZCh0ZW1wbGF0ZSkKCWNhdCgiLS0tIHJlLWltcG9ydGVkIGRhdGEgZXF1YWwgb3JpZ2luYWwg
ZGF0YVxuIikKCWFsbC5lcXVhbCh4LCB4MikKICAgICAgICBjYXQoIi0tLSBtYWtlIHRlbXBsYXRl
IHdoaWxlIHJlYWRpbmdcbiIpCgl4MyA8LSByZWFkKHRlbXBsYXRlLCB0ZW1wbGF0ZS5hdHRyaWJ1
dGU9VFJVRSkKCXRlbXBsYXRlMiA8LSBhdHRyKHgzLCAndGVtcGxhdGUnKQoJYXR0cih4MywgJ3Rl
bXBsYXRlJykgPC0gTlVMTAoJY2F0KCItLS0gdGVtcGxhdGVzIHNob3VsZCBiZSBlcXVhbCBleGNl
cHQgZm9yIGRpZ2l0c1xuIikKCWFsbC5lcXVhbCh0ZW1wbGF0ZSwgdGVtcGxhdGUyKQoJY2F0KCIt
LS0gcmUud3JpdGluZyB1c2luZyB0ZW1wbGF0ZTIiKQoJdGVtcGxhdGUzIDwtIHdyaXRlLnRlbXBs
YXRlKHRlbXBsYXRlMiwgeCwgYXBwZW5kPVRSVUUpCgljYXQoIi0tLSB0ZW1wbGF0ZXMgc2hvdWxk
IGJlIGVxdWFsIGV4Y2VwdCBmb3IgZGlnaXRzXG4iKQoJYWxsLmVxdWFsKHRlbXBsYXRlMiwgdGVt
cGxhdGUzKQoJY2F0KCItLS0gdGhpcyBpcyB0aGUgZmlsZSB3aXRoIHJlLndyaXR0ZW4gZGF0YSBh
cHBlbmRlZDpcbiIpCgljYXQocGFzdGUoImZpbGUgLT4iLCBzY2FuKGZpbGU9ZmlsZSwgd2hhdD0n
Jywgc2VwPSdcbicpLCBjb2xsYXBzZT0nXG4nKSwgJ1xuJykKCgljYXQoIlxuXG5cbj09PT09IEZJ
WEVEIFdJRFRIIEZPUk1BVCB3aXRoIGZhY3RvcnM9J2NvZGVzJywgbG9naWNhbHM9YygwLDEpLCBk
aWdpdHM9MTUsIHJvdy5uYW1lcz1GQUxTRSA9PT09PVxuIikKICAgICAgICBjYXQoIi0tLSB3cml0
aW5nIGZpbGUiLCBmaWxlLCAiXG4iKQoJdGVtcGxhdGUgPC0gd3JpdGUuZml4KHgsIGZpbGU9Zmls
ZSwgZmFjdG9ycz0nY29kZXMnLCBsb2dpY2Fscz1jKDAsMSksIGRpZ2l0cz0xNSkKCWNhdCgiLS0t
IHRoaXMgaXMgdGhlIGZpbGU6XG4iKQoJY2F0KHBhc3RlKCJmaWxlIC0+Iiwgc2NhbihmaWxlPWZp
bGUsIHdoYXQ9JycsIHNlcD0nXG4nKSwgY29sbGFwc2U9J1xuJyksICdcbicpCgljYXQoIi0tLSB0
aGlzIGlzIHRoZSB0ZW1wbGF0ZTpcbiIpCglwcmludCh0ZW1wbGF0ZSkKCWNhdCgiLS0tIHJlLWlt
cG9ydGluZyBkYXRhIHVzaW5nIHRlbXBsYXRlXG4iKQoJeDIgPC0gcmVhZCh0ZW1wbGF0ZSkKCWNh
dCgiLS0tIHJlLWltcG9ydGVkIGRhdGEgZXF1YWwgb3JpZ2luYWwgZGF0YVxuIikKCWFsbC5lcXVh
bCh4LCB4MikKICAgICAgICBjYXQoIi0tLSBtYWtlIHRlbXBsYXRlIHdoaWxlIHJlYWRpbmdcbiIp
Cgl4MyA8LSByZWFkKHRlbXBsYXRlLCB0ZW1wbGF0ZS5hdHRyaWJ1dGU9VFJVRSkKCXRlbXBsYXRl
MiA8LSBhdHRyKHgzLCAndGVtcGxhdGUnKQoJYXR0cih4MywgJ3RlbXBsYXRlJykgPC0gTlVMTAoJ
Y2F0KCItLS0gdGVtcGxhdGVzIHNob3VsZCBiZSBlcXVhbCBleGNlcHQgZm9yIGRpZ2l0c1xuIikK
CWFsbC5lcXVhbCh0ZW1wbGF0ZSwgdGVtcGxhdGUyKQoJY2F0KCItLS0gcmUud3JpdGluZyB1c2lu
ZyB0ZW1wbGF0ZTIiKQoJdGVtcGxhdGUzIDwtIHdyaXRlLnRlbXBsYXRlKHRlbXBsYXRlMiwgeCwg
YXBwZW5kPVRSVUUpCgljYXQoIi0tLSB0ZW1wbGF0ZXMgc2hvdWxkIGJlIGVxdWFsIGV4Y2VwdCBm
b3IgZGlnaXRzXG4iKQoJYWxsLmVxdWFsKHRlbXBsYXRlMiwgdGVtcGxhdGUzKQoJY2F0KCItLS0g
dGhpcyBpcyB0aGUgZmlsZSB3aXRoIHJlLndyaXR0ZW4gZGF0YSBhcHBlbmRlZDpcbiIpCgljYXQo
cGFzdGUoImZpbGUgLT4iLCBzY2FuKGZpbGU9ZmlsZSwgd2hhdD0nJywgc2VwPSdcbicpLCBjb2xs
YXBzZT0nXG4nKSwgJ1xuJykKCgoJY2F0KCJcblxuXG49PT09PSBTRVBFUkFURUQgVkFMVUUgRk9S
TUFUID09PT09XG4iKQogICAgICAgIGNhdCgiLS0tIHdyaXRpbmcgZmlsZSIsIGZpbGUsICJcbiIp
Cgl0ZW1wbGF0ZSA8LSB3cml0ZS5zdnMoeCwgZmlsZT1maWxlKQoJY2F0KCItLS0gdGhpcyBpcyB0
aGUgZmlsZTpcbiIpCgljYXQocGFzdGUoImZpbGUgLT4iLCBzY2FuKGZpbGU9ZmlsZSwgd2hhdD0n
Jywgc2VwPSdcbicpLCBjb2xsYXBzZT0nXG4nKSwgJ1xuJykKCWNhdCgiLS0tIHRoaXMgaXMgdGhl
IHRlbXBsYXRlOlxuIikKCXByaW50KHRlbXBsYXRlKQoJY2F0KCItLS0gcmUtaW1wb3J0aW5nIGRh
dGEgdXNpbmcgdGVtcGxhdGVcbiIpCgl4MiA8LSByZWFkKHRlbXBsYXRlKQoJY2F0KCItLS0gcmUt
aW1wb3J0ZWQgZGF0YSBlcXVhbCBvcmlnaW5hbCBkYXRhXG4iKQoJYWxsLmVxdWFsKHgsIHgyKQog
ICAgICAgIGNhdCgiLS0tIG1ha2UgdGVtcGxhdGUgd2hpbGUgcmVhZGluZ1xuIikKCXgzIDwtIHJl
YWQodGVtcGxhdGUsIHRlbXBsYXRlLmF0dHJpYnV0ZT1UUlVFKQoJdGVtcGxhdGUyIDwtIGF0dHIo
eDMsICd0ZW1wbGF0ZScpCglhdHRyKHgzLCAndGVtcGxhdGUnKSA8LSBOVUxMCgljYXQoIi0tLSB0
ZW1wbGF0ZXMgc2hvdWxkIGJlIGVxdWFsIGV4Y2VwdCBmb3IgZGlnaXRzXG4iKQoJYWxsLmVxdWFs
KHRlbXBsYXRlLCB0ZW1wbGF0ZTIpCgljYXQoIi0tLSByZS53cml0aW5nIHVzaW5nIHRlbXBsYXRl
MiIpCgl0ZW1wbGF0ZTMgPC0gd3JpdGUudGVtcGxhdGUodGVtcGxhdGUyLCB4LCBhcHBlbmQ9VFJV
RSkKCWNhdCgiLS0tIHRlbXBsYXRlcyBzaG91bGQgYmUgZXF1YWwgZXhjZXB0IGZvciBkaWdpdHNc
biIpCglhbGwuZXF1YWwodGVtcGxhdGUyLCB0ZW1wbGF0ZTMpCgljYXQoIi0tLSB0aGlzIGlzIHRo
ZSBmaWxlIHdpdGggcmUud3JpdHRlbiBkYXRhIGFwcGVuZGVkOlxuIikKCWNhdChwYXN0ZSgiZmls
ZSAtPiIsIHNjYW4oZmlsZT1maWxlLCB3aGF0PScnLCBzZXA9J1xuJyksIGNvbGxhcHNlPSdcbicp
LCAnXG4nKQoKCgljYXQoIlxuXG5cbj09PT09IFNFUEVSQVRFRCBWQUxVRSBGT1JNQVQgd2l0aCBk
ZWMuc2VwPScsJyBhbmQgcm93Lm5hbWVzPUZBTFNFID09PT09XG4iKQogICAgICAgIGNhdCgiLS0t
IHdyaXRpbmcgZmlsZSIsIGZpbGUsICJcbiIpCgl0ZW1wbGF0ZSA8LSB3cml0ZS5zdnMoeCwgZmls
ZT1maWxlLCBkZWMuc2VwPScsJywgcm93Lm5hbWVzPUZBTFNFKQoJY2F0KCItLS0gdGhpcyBpcyB0
aGUgZmlsZTpcbiIpCgljYXQocGFzdGUoImZpbGUgLT4iLCBzY2FuKGZpbGU9ZmlsZSwgd2hhdD0n
Jywgc2VwPSdcbicpLCBjb2xsYXBzZT0nXG4nKSwgJ1xuJykKCWNhdCgiLS0tIHRoaXMgaXMgdGhl
IHRlbXBsYXRlOlxuIikKCXByaW50KHRlbXBsYXRlKQoJY2F0KCItLS0gcmUtaW1wb3J0aW5nIGRh
dGEgdXNpbmcgdGVtcGxhdGVcbiIpCgl4MiA8LSByZWFkKHRlbXBsYXRlKQoJY2F0KCItLS0gcmUt
aW1wb3J0ZWQgZGF0YSBlcXVhbCBvcmlnaW5hbCBkYXRhXG4iKQoJYWxsLmVxdWFsKHgsIHgyKQog
ICAgICAgIGNhdCgiLS0tIG1ha2UgdGVtcGxhdGUgd2hpbGUgcmVhZGluZ1xuIikKCXgzIDwtIHJl
YWQodGVtcGxhdGUsIHRlbXBsYXRlLmF0dHJpYnV0ZT1UUlVFKQoJdGVtcGxhdGUyIDwtIGF0dHIo
eDMsICd0ZW1wbGF0ZScpCglhdHRyKHgzLCAndGVtcGxhdGUnKSA8LSBOVUxMCgljYXQoIi0tLSB0
ZW1wbGF0ZXMgc2hvdWxkIGJlIGVxdWFsIGV4Y2VwdCBmb3IgZGlnaXRzXG4iKQoJYWxsLmVxdWFs
KHRlbXBsYXRlLCB0ZW1wbGF0ZTIpCgljYXQoIi0tLSByZS53cml0aW5nIHVzaW5nIHRlbXBsYXRl
MiIpCgl0ZW1wbGF0ZTMgPC0gd3JpdGUudGVtcGxhdGUodGVtcGxhdGUyLCB4LCBhcHBlbmQ9VFJV
RSkKCWNhdCgiLS0tIHRlbXBsYXRlcyBzaG91bGQgYmUgZXF1YWwgZXhjZXB0IGZvciBkaWdpdHNc
biIpCglhbGwuZXF1YWwodGVtcGxhdGUyLCB0ZW1wbGF0ZTMpCgljYXQoIi0tLSB0aGlzIGlzIHRo
ZSBmaWxlIHdpdGggcmUud3JpdHRlbiBkYXRhIGFwcGVuZGVkOlxuIikKCWNhdChwYXN0ZSgiZmls
ZSAtPiIsIHNjYW4oZmlsZT1maWxlLCB3aGF0PScnLCBzZXA9J1xuJyksIGNvbGxhcHNlPSdcbicp
LCAnXG4nKQoKfQo=

------=_NextPart_000_0004_01BF5D27.62306630--

-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
r-devel mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html
Send "info", "help", or "[un]subscribe"
(in the "body", not the subject !)  To: r-devel-request@stat.math.ethz.ch
_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._