latest contify.fun

Matthew Fluet Matthew Fluet <fluet@CS.Cornell.EDU>
Wed, 21 Feb 2001 21:30:24 -0500 (EST)


  This message is in MIME format.  The first part should be readable text,
  while the remaining parts are likely unreadable without MIME-aware tools.
  Send mail to mime@docserver.cac.washington.edu for more info.

---559023410-342241519-982808650=:18617
Content-Type: TEXT/PLAIN; CHARSET=US-ASCII
Content-ID: <Pine.SOL.3.95.1010221212957.18617L@hoho.cs.cornell.edu>


Here's the latest stable contify.new.fun; it's currently setup for
A*/parent, but I've put in a comment indicating where to change it for the
ancestor version.  Just so the names make more sense, I changed the
control to the following:

      datatype contifyStrategy =
	 CallCont
       | Call
       | Cont
       | Dom
       | None

I'm currently running benchmarks comparing the compile times with new
transformation vs. the old transformation; I'll report on them tomorrow,
although I haven't played with a G1 with the new contifier, so maybe it'll
be bitten by the weird space problems we saw earlier.



---559023410-342241519-982808650=:18617
Content-Type: TEXT/PLAIN; CHARSET=US-ASCII; NAME="contify.new.fun"
Content-Transfer-Encoding: BASE64
Content-ID: <Pine.SOL.3.95.1010221212410.18617I@hoho.cs.cornell.edu>
Content-Description: 

KCogQ29weXJpZ2h0IChDKSAxOTk3LTE5OTkgTkVDIFJlc2VhcmNoIEluc3RpdHV0ZS4NCiAqIFBs
ZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRSBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi4NCiAqKQ0K
KCoNCiAqIFRoaXMgcGFzcyBjb21iaW5lcyB0d28gYW5hbHlzZXMgYW5kIHRyYW5zZm9ybWF0aW9u
cy4NCiAqDQogKiBUaGUgZmlyc3QgYW5hbHlzaXMsICJjYWxsIGJhc2VkIiBub3RpY2VzIGlmIGEg
dG9wbGV2ZWwgZnVuY3Rpb24gaXMgY2FsbGVkDQogKiAgICAgICAxLiBmcm9tIG9uZSBwbGFjZSBv
dXRzaWRlIGl0c2VsZg0KICogICBhbmQgMi4gYWxsIGNhbGxzIHRvIGl0c2VsZiB3aXRoaW4gaXRz
ZWxmIGFyZSB0YWlsDQogKiBJZiAoMSkgYW5kICgyKSBhcmUgdHJ1ZSwgdGhlbiB0aGF0IGZ1bmN0
aW9uIGNhbiBiZSBtYWRlIGxvY2FsIGF0IHRoZSBwb2ludA0KICogb2YgaXRzIG91dGVyIGNhbGwu
DQogKg0KICogVGhlIHNlY29uZCBhbmFseXNpcyBpcyBiYXNlZCBvbiB0aGUgZm9sbG93aW5nIHBh
cGVyLg0KICogICBMb2NhbCBDUFMgY29udmVyc2lvbiBpbiBhIGRpcmVjdC1zdHlsZSBjb21waWxl
ci4gIEpvaG4gUmVwcHkuDQogKiBJdCBkZXRlcm1pbmVzIHRoZSBzZXQgb2YgY29udGludWF0aW9u
cyB0aGF0IGEgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGguICBJZg0KICogdGhhdCBzZXQgaXMgYSBz
aW5nbGV0b24sIHRoZW4gdGhlIGZ1bmN0aW9uIGNhbiBiZSBwcmVmaXhlZCBvbnRvIHRoZQ0KICog
Y29udGludWF0aW9uIGl0IGlzIGNhbGxlZCB3aXRoLg0KICopDQoNCmZ1bmN0b3IgQ29udGlmeSAo
UzogQ09OVElGWV9TVFJVQ1RTKTogQ09OVElGWSA9IA0Kc3RydWN0DQoNCm9wZW4gUw0Kb3BlbiBE
ZWMgVHJhbnNmZXINCg0KdmFsIHJlYyBwYXJ0aXRpb24NCiAgPSBmbiAoW10scCkgPT4gKFtdLFtd
KQ0KICAgICB8IChoOjp0LHApID0+IGxldA0KCQkgICAgIHZhbCAodHJ1ZWUsZmFsc2VlKSA9IHBh
cnRpdGlvbih0LCBwKQ0KCQkgICBpbg0KCQkgICAgIGlmIHAgaA0KCQkgICAgICAgdGhlbiAoaDo6
dHJ1ZWUsZmFsc2VlKQ0KCQkgICAgICAgZWxzZSAodHJ1ZWUsaDo6ZmFsc2VlKQ0KCQkgICBlbmQN
Cg0KKCogUmV0dXJuID0ge1VuY2FsbGVkLCBVbmtub3dufSBVIEp1bXAgVSBGdW5jDQogKikNCnN0
cnVjdHVyZSBSZXR1cm4gPQ0KICBzdHJ1Y3QNCiAgICBkYXRhdHlwZSB0DQogICAgICA9IFVuY2Fs
bGVkDQogICAgICB8IFVua25vd24NCiAgICAgIHwgSnVtcExhYmVsIG9mIEp1bXAudA0KICAgICAg
fCBGdW5jTGFiZWwgb2YgRnVuYy50DQoNCiAgICBmdW4gbGF5b3V0IHINCiAgICAgID0gbGV0IA0K
CSAgb3BlbiBMYXlvdXQNCglpbg0KCSAgY2FzZSByDQoJICAgIG9mIFVuY2FsbGVkID0+IHN0ciAi
VW5jYWxsZWQiDQoJICAgICB8IFVua25vd24gPT4gc3RyICJVbmtub3duIg0KCSAgICAgfCBKdW1w
TGFiZWwgaiA9PiBzZXEgW0p1bXAubGF5b3V0IGpdDQoJICAgICB8IEZ1bmNMYWJlbCBmID0+IHNl
cSBbRnVuYy5sYXlvdXQgZl0NCgllbmQNCiAgICB2YWwgdG9TdHJpbmcgPSBMYXlvdXQudG9TdHJp
bmcgbyBsYXlvdXQNCiAgICAgIA0KICAgIHZhbCBlcXVhbHMNCiAgICAgID0gZm4gKFVuY2FsbGVk
LCBVbmNhbGxlZCkgPT4gdHJ1ZQ0KICAgICAgICAgfCAoVW5rbm93biwgVW5rbm93bikgPT4gdHJ1
ZQ0KCSB8IChKdW1wTGFiZWwgajEsIEp1bXBMYWJlbCBqMikgPT4gSnVtcC5lcXVhbHMoajEsIGoy
KQ0KCSB8IChGdW5jTGFiZWwgZjEsIEZ1bmNMYWJlbCBmMikgPT4gRnVuYy5lcXVhbHMoZjEsIGYy
KQ0KCSB8IF8gPT4gZmFsc2UNCg0KICAgIHZhbCBpc1VuY2FsbGVkIA0KICAgICAgPSBmbiBVbmNh
bGxlZCA9PiB0cnVlDQogICAgICAgICB8IF8gPT4gZmFsc2UNCiAgICB2YWwgaXNVbmtub3duDQog
ICAgICA9IGZuIFVua25vd24gPT4gdHJ1ZQ0KICAgICAgICAgfCBfID0+IGZhbHNlDQogIGVuZA0K
DQpzdHJ1Y3R1cmUgSnVtcERhdGEgPQ0KICBzdHJ1Y3QNCiAgICBkYXRhdHlwZSB0ID0gVCBvZiB7
bm9kZTogRGlyZWN0ZWRHcmFwaC5Ob2RlLnQgb3B0aW9uIHJlZiwNCgkJICAgICAgIHByZWZpeGVz
OiBGdW5jLnQgbGlzdCByZWZ9DQogICAgICANCiAgICBmdW4gbmV3ICgpID0gVCB7bm9kZSA9IHJl
ZiBOT05FLA0KCQkgICAgcHJlZml4ZXMgPSByZWYgW119DQoNCiAgICBsb2NhbA0KICAgICAgZnVu
IG1ha2UgcyA9IGxldA0KCQkgICAgIGZ1biBTJyAoVCByKSA9IHMgcg0KCQkgICAgIHZhbCBTID0g
ISBvIFMnDQoJCSAgIGluDQoJCSAgICAgKFMnLCBTKQ0KCQkgICBlbmQNCiAgICBpbg0KICAgICAg
dmFsIChub2RlJywgbm9kZSkgPSBtYWtlICNub2RlDQogICAgICB2YWwgKHByZWZpeGVzJywgcHJl
Zml4ZXMpID0gbWFrZSAjcHJlZml4ZXMNCiAgICBlbmQNCiAgICBmdW4gbm9kZVJlc2V0IChUIHtu
b2RlLCAuLi59KSA9IG5vZGUgOj0gTk9ORQ0KICBlbmQNCg0Kc3RydWN0dXJlIEZ1bmNEYXRhID0N
CiAgc3RydWN0DQogICAgZGF0YXR5cGUgdCA9IFQgb2Yge25vZGU6IERpcmVjdGVkR3JhcGguTm9k
ZS50IG9wdGlvbiByZWYsDQoJCSAgICAgICByZWFjaDogYm9vbCByZWYsDQoJCSAgICAgICBjYWxs
ZXJzOiBGdW5jLnQgbGlzdCByZWYsDQoJCSAgICAgICBjYWxsZWVzOiBGdW5jLnQgbGlzdCByZWYs
DQoJCSAgICAgICByY29udDogUmV0dXJuLnQgcmVmLA0KCQkgICAgICAgcmNvbnRDYWxsOiBSZXR1
cm4udCByZWYsDQoJCSAgICAgICBsZXNzVGhhbjogRnVuYy50IGxpc3QgcmVmLA0KCQkgICAgICAg
cmNvbnRDb250OiBSZXR1cm4udCByZWYsDQoJCSAgICAgICByY29udERvbTogUmV0dXJuLnQgcmVm
LA0KCQkgICAgICAgY29udGlmeTogYm9vbCByZWYsDQoJCSAgICAgICBwcmVmaXhlczogRnVuYy50
IGxpc3QgcmVmLA0KCQkgICAgICAgcmVwbGFjZToge2FyZ3M6IChWYXIudCAqIFR5cGUudCkgdmVj
dG9yLA0KCQkJCSBib2R5OiBFeHAudCwNCgkJCQkganVtcDogSnVtcC50fSBvcHRpb24gcmVmfQ0K
ICAgICAgDQogICAgZnVuIG5ldyAoKSA9IFQge25vZGUgPSByZWYgTk9ORSwNCgkJICAgIHJlYWNo
ID0gcmVmIGZhbHNlLA0KCQkgICAgY2FsbGVycyA9IHJlZiBbXSwNCgkJICAgIGNhbGxlZXMgPSBy
ZWYgW10sDQoJCSAgICByY29udCA9IHJlZiBSZXR1cm4uVW5jYWxsZWQsDQoJCSAgICByY29udENh
bGwgPSByZWYgUmV0dXJuLlVuY2FsbGVkLA0KCQkgICAgbGVzc1RoYW4gPSByZWYgW10sDQoJCSAg
ICByY29udENvbnQgPSByZWYgUmV0dXJuLlVuY2FsbGVkLA0KCQkgICAgcmNvbnREb20gPSByZWYg
UmV0dXJuLlVuY2FsbGVkLA0KCQkgICAgY29udGlmeSA9IHJlZiB0cnVlLA0KCQkgICAgcHJlZml4
ZXMgPSByZWYgW10sDQoJCSAgICByZXBsYWNlID0gcmVmIE5PTkV9DQogICAgICANCiAgICBsb2Nh
bA0KICAgICAgZnVuIG1ha2UgcyA9IGxldA0KCQkgICAgIGZ1biBTJyAoVCByKSA9IHMgcg0KCQkg
ICAgIHZhbCBTID0gISBvIFMnDQoJCSAgIGluDQoJCSAgICAgKFMnLCBTKQ0KCQkgICBlbmQNCiAg
ICBpbg0KICAgICAgdmFsIChub2RlJywgbm9kZSkgPSBtYWtlICNub2RlDQogICAgICB2YWwgKHJl
YWNoJywgcmVhY2gpID0gbWFrZSAjcmVhY2gNCiAgICAgIHZhbCAoY2FsbGVycycsIGNhbGxlcnMp
ID0gbWFrZSAjY2FsbGVycw0KICAgICAgdmFsIChjYWxsZWVzJywgY2FsbGVlcykgPSBtYWtlICNj
YWxsZWVzDQogICAgICB2YWwgKHJjb250JywgcmNvbnQpID0gbWFrZSAjcmNvbnQNCiAgICAgIHZh
bCAocmNvbnRDYWxsJywgcmNvbnRDYWxsKSA9IG1ha2UgI3Jjb250Q2FsbA0KICAgICAgdmFsIChs
ZXNzVGhhbicsIGxlc3NUaGFuKSA9IG1ha2UgI2xlc3NUaGFuDQogICAgICB2YWwgKHJjb250Q29u
dCcsIHJjb250Q29udCkgPSBtYWtlICNyY29udENvbnQNCiAgICAgIHZhbCAocmNvbnREb20nLCBy
Y29udERvbSkgPSBtYWtlICNyY29udERvbQ0KICAgICAgdmFsIChjb250aWZ5JywgY29udGlmeSkg
PSBtYWtlICNjb250aWZ5DQogICAgICB2YWwgKHByZWZpeGVzJywgcHJlZml4ZXMpID0gbWFrZSAj
cHJlZml4ZXMNCiAgICAgIHZhbCAocmVwbGFjZScsIHJlcGxhY2UpID0gbWFrZSAjcmVwbGFjZQ0K
ICAgIGVuZA0KICAgIGZ1biBub2RlUmVzZXQgKFQge25vZGUsIC4uLn0pID0gbm9kZSA6PSBOT05F
DQogIGVuZA0KDQpzdHJ1Y3R1cmUgSnVtcEZ1bmNHcmFwaCA9DQogIHN0cnVjdA0KICAgIHN0cnVj
dHVyZSBHcmFwaCA9IERpcmVjdGVkR3JhcGgNCiAgICBzdHJ1Y3R1cmUgTm9kZSA9IEdyYXBoLk5v
ZGUNCiAgICBzdHJ1Y3R1cmUgRWRnZSA9IEdyYXBoLkVkZ2UNCiAgICBzdHJ1Y3R1cmUgRGZzUGFy
YW0gPSBHcmFwaC5EZnNQYXJhbQ0KDQogICAgZGF0YXR5cGUgdCA9IEp1bXBOb2RlIG9mIEp1bXAu
dA0KICAgICAgICAgICAgICAgfCBGdW5jTm9kZSBvZiBGdW5jLnQNCiAgICBmdW4gbmV3SnVtcEZ1
bmNHcmFwaCB7Z2V0SnVtcERhdGE6IEp1bXAudCAtPiBKdW1wRGF0YS50LA0KCQkJICBnZXRGdW5j
RGF0YTogRnVuYy50IC0+IEZ1bmNEYXRhLnR9DQogICAgICA9IGxldA0KCSAgdmFsIEcgPSBHcmFw
aC5uZXcgKCkNCg0KCSAgZnVuIGFkZEVkZ2UgZWRnZQ0KCSAgICA9IGlmIE5vZGUuaGFzRWRnZSBl
ZGdlDQoJCXRoZW4gKCkNCgkJZWxzZSAoR3JhcGguYWRkRWRnZSAoRywgZWRnZSk7ICgpKQ0KCQkg
IA0KCSAgdmFsIHtnZXQgPSBnZXROb2RlSW5mbyA6IE5vZGUudCAtPiB0LCANCgkgICAgICAgc2V0
ID0gc2V0Tm9kZUluZm99DQoJICAgID0gUHJvcGVydHkuZ2V0U2V0T25jZQ0KCSAgICAgIChOb2Rl
LnBsaXN0LA0KCSAgICAgICBQcm9wZXJ0eS5pbml0UmFpc2UgKCJub2RlSW5mbyIsIE5vZGUubGF5
b3V0KSkNCg0KCSAgZnVuIGdldEZ1bmNOb2RlIGYNCgkgICAgPSBsZXQNCgkJdmFsIG5vZGUgPSBG
dW5jRGF0YS5ub2RlJyAoZ2V0RnVuY0RhdGEgZikNCgkgICAgICBpbg0KCQljYXNlICFub2RlDQoJ
CSAgb2YgU09NRSBuID0+IG4NCgkJICAgfCBOT05FID0+IGxldA0KCQkJICAgICAgIHZhbCBuID0g
R3JhcGgubmV3Tm9kZSBHDQoJCQkgICAgIGluDQoJCQkgICAgICAgc2V0Tm9kZUluZm8gKG4sIEZ1
bmNOb2RlIGYpOw0KCQkJICAgICAgIG5vZGUgOj0gU09NRSBuOw0KCQkJICAgICAgIG4NCgkJCSAg
ICAgZW5kDQoJICAgICAgZW5kDQoNCgkgIGZ1biBnZXRKdW1wTm9kZSBqDQoJICAgID0gbGV0DQoJ
CXZhbCBub2RlID0gSnVtcERhdGEubm9kZScgKGdldEp1bXBEYXRhIGopDQoJICAgICAgaW4NCgkJ
Y2FzZSAhbm9kZQ0KCQkgIG9mIFNPTUUgbiA9PiBuDQoJCSAgIHwgTk9ORSA9PiBsZXQNCgkJCSAg
ICAgICB2YWwgbiA9IEdyYXBoLm5ld05vZGUgRw0KCQkJICAgICBpbg0KCQkJICAgICAgIHNldE5v
ZGVJbmZvIChuLCBKdW1wTm9kZSBqKTsNCgkJCSAgICAgICBub2RlIDo9IFNPTUUgbjsNCgkJCSAg
ICAgICBuDQoJCQkgICAgIGVuZA0KCSAgICAgIGVuZA0KDQoJICBmdW4gcmVzZXQgcA0KCSAgICA9
IEdyYXBoLmZvcmVhY2hOb2RlDQoJICAgICAgKEcsDQoJICAgICAgIGZuIG4gPT4gaWYgcCBuDQoJ
CQkgdGhlbiBjYXNlIGdldE5vZGVJbmZvIG4NCgkJCQlvZiBKdW1wTm9kZSBqDQoJCQkJID0+IEp1
bXBEYXRhLm5vZGVSZXNldCAoZ2V0SnVtcERhdGEgaikNCgkJICAgICAgICAgICAgICAgICB8IEZ1
bmNOb2RlIGYgDQoJCQkgICAgICAgICA9PiBGdW5jRGF0YS5ub2RlUmVzZXQgKGdldEZ1bmNEYXRh
IGYpDQoJCQkgZWxzZSAoKSkNCglpbg0KCSAge0cgPSBHLCANCgkgICBhZGRFZGdlID0gYWRkRWRn
ZSwgDQoJICAgZ2V0Tm9kZUluZm8gPSBnZXROb2RlSW5mbywgDQoJICAgZ2V0SnVtcE5vZGUgPSBn
ZXRKdW1wTm9kZSwgDQoJICAgZ2V0RnVuY05vZGUgPSBnZXRGdW5jTm9kZSwNCgkgICByZXNldCA9
IHJlc2V0fQ0KCWVuZA0KDQogICAgZnVuIG5ld0Z1bmNHcmFwaCB7Z2V0RnVuY0RhdGE6IEZ1bmMu
dCAtPiBGdW5jRGF0YS50fQ0KICAgICAgPSBsZXQNCgkgIHZhbCB7RywgYWRkRWRnZSwgDQoJICAg
ICAgIGdldE5vZGVJbmZvLCANCgkgICAgICAgZ2V0SnVtcE5vZGUsIGdldEZ1bmNOb2RlLCANCgkg
ICAgICAgcmVzZXR9DQoJICAgID0gbmV3SnVtcEZ1bmNHcmFwaCB7Z2V0SnVtcERhdGEgPSBmbiBf
ID0+IEVycm9yLmJ1ZyAibmV3RnVuY0dyYXBoIiwNCgkJCQlnZXRGdW5jRGF0YSA9IGdldEZ1bmNE
YXRhfQ0KCWluDQoJICB7RyA9IEcsDQoJICAgYWRkRWRnZSA9IGFkZEVkZ2UsDQoJICAgZ2V0Tm9k
ZUluZm8gPSBmbiBuID0+IGNhc2UgZ2V0Tm9kZUluZm8gbg0KCQkJCSAgIG9mIEZ1bmNOb2RlIGYg
PT4gZg0KCQkJCSAgICB8IEp1bXBOb2RlIGogPT4gRXJyb3IuYnVnICJuZXdGdW5jR3JhcGgiLA0K
CSAgIGdldEZ1bmNOb2RlID0gZ2V0RnVuY05vZGUsDQoJICAgcmVzZXQgPSByZXNldH0NCgllbmQN
CiAgZW5kDQoNCnN0cnVjdHVyZSBJbml0UmVhY2hDYWxsZXJzQ2FsbGVlcyA9DQogIHN0cnVjdA0K
ICAgIHN0cnVjdHVyZSBHcmFwaCA9IERpcmVjdGVkR3JhcGgNCiAgICBzdHJ1Y3R1cmUgRGZzUGFy
YW0gPSBHcmFwaC5EZnNQYXJhbQ0KDQogICAgKCogRGVmaW5lIFJlYWNoOiBGdW5jIC0+IEJvb2wg
YXMgZm9sbG93czoNCiAgICAgKiAgUmVhY2goZikgaWZmIHRoZXJlIGlzIGEgcGF0aCBvZiBjYWxs
cyBmcm9tIGZtIHRvIGYuDQogICAgICoNCiAgICAgKiBEZWZpbmUgQ2FsbGVyczogRnVuYyAtPiBQ
KEZ1bmMpIGFzIGZvbGxvd3M6DQogICAgICogIENhbGxlcnMoZikgPSB7ZyB8IChnLCBmLCBKKSBp
biBOIG9yIChnLCBmKSBpbiBUfQ0KICAgICAqIERlZmluZSBDYWxsZWVzOiBGdW5jIC0+IFAoRnVu
YykgYXMgZm9sbG93czoNCiAgICAgKiAgQ2FsbGVlcyhmKSA9IHtnIHwgKGYsIGcsIEopIGluIE4g
b3IgKGYsIGcpIGluIFR9DQogICAgICoNCiAgICAgKiBQcmVjb25kaXRpb246IGZvcmFsbCBmIGlu
IEZ1bmMuIChGdW5jRGF0YS5ub2RlIG8gZ2V0RnVuY0RhdGEpIGYgPSBOT05FDQogICAgICogICAg
ICAgICAgICAgICBmb3JhbGwgZiBpbiBGdW5jLiAoSnVtcERhdGEuY2FsbGVycyBvIGdldEZ1bmNE
YXRhKSBmID0gW10NCiAgICAgKiAgICAgICAgICAgICAgIGZvcmFsbCBmIGluIEZ1bmMuIChKdW1w
RGF0YS5jYWxsZWVzIG8gZ2V0RnVuY0RhdGEpIGYgPSBbXQ0KICAgICAqIFBvc3Rjb25kaXRpb246
IEZ1bmNEYXRhLnJlYWNoIG8gZ2V0RnVuY0RhdGEgPSBSZWFjaA0KICAgICAqICAgICAgICAgICAg
ICAgIEZ1bmNEYXRhLmNhbGxlcnMgbyBnZXRGdW5jRGF0YSA9IENhbGxlcnMNCiAgICAgKiAgICAg
ICAgICAgICAgICBGdW5jRGF0YS5jYWxsZWVzIG8gZ2V0RnVuY0RhdGEgPSBDYWxsZWVzDQogICAg
ICogICAgICAgICAgICAgICAgZm9yYWxsIGYgaW4gRnVuYy4gKEZ1bmNEYXRhLm5vZGUgbyBnZXRG
dW5jRGF0YSkgZiA9IE5PTkUNCiAgICAgKikNCiAgICBmdW4gaW5pdFJlYWNoQ2FsbGVyc0NhbGxl
ZXMgDQogICAgICAgIHtwcm9ncmFtIGFzIFByb2dyYW0uVCB7ZnVuY3Rpb25zLCBtYWluID0gZm0s
IC4uLn0sDQoJIGdldEZ1bmNEYXRhOiBGdW5jLnQgLT4gRnVuY0RhdGEudH0gOiB1bml0DQogICAg
ICA9IGxldA0KCSAgdmFsIHtHLCBhZGRFZGdlLCBnZXROb2RlSW5mbywgZ2V0RnVuY05vZGUsIHJl
c2V0fQ0KCSAgICA9IEp1bXBGdW5jR3JhcGgubmV3RnVuY0dyYXBoIHtnZXRGdW5jRGF0YSA9IGdl
dEZ1bmNEYXRhfQ0KDQoJICB2YWwgXyANCgkgICAgPSBWZWN0b3IuZm9yZWFjaA0KCSAgICAgIChm
dW5jdGlvbnMsIA0KCSAgICAgICBmbiB7bmFtZSA9IGYsIGJvZHkgPSBmX2JvZHksIC4uLn0NCgkg
ICAgICAgID0+IGxldA0KCQkgICAgIHZhbCBjYWxsZWVzID0gRnVuY0RhdGEuY2FsbGVlcycgKGdl
dEZ1bmNEYXRhIGYpDQoJCSAgICAgdmFsIGZfbm9kZSA9IGdldEZ1bmNOb2RlIGYNCgkJICAgaW4N
CgkJICAgICBFeHAuZm9yZWFjaENhbGwNCgkJICAgICAoZl9ib2R5LA0KCQkgICAgICBmbiB7ZnVu
YyA9IGcsIC4uLn0NCgkJICAgICAgID0+IGxldA0KCQkJICAgIHZhbCBjYWxsZXJzID0gRnVuY0Rh
dGEuY2FsbGVycycgKGdldEZ1bmNEYXRhIGcpDQoJCQkgICAgdmFsIGdfbm9kZSA9IGdldEZ1bmNO
b2RlIGcNCgkJCSAgaW4NCgkJCSAgICBMaXN0LnB1c2goY2FsbGVlcywgZyk7DQoJCQkgICAgTGlz
dC5wdXNoKGNhbGxlcnMsIGYpOw0KCQkJICAgIGFkZEVkZ2Uge2Zyb20gPSBmX25vZGUsDQoJCQkJ
ICAgICB0byA9IGdfbm9kZX0NCgkJCSAgZW5kKQ0KCQkgICBlbmQpDQoJICAgICAgDQoJICB2YWwg
ZGZzX3BhcmFtDQoJICAgID0gRGZzUGFyYW0uZmluaXNoTm9kZQ0KCSAgICAgIChmbiBuID0+IGxl
dA0KCQkJIHZhbCByZWFjaCANCgkJCSAgID0gRnVuY0RhdGEucmVhY2gnIChnZXRGdW5jRGF0YSAo
Z2V0Tm9kZUluZm8gbikpDQoJCSAgICAgICBpbg0KCQkJIHJlYWNoIDo9IHRydWUNCgkJICAgICAg
IGVuZCkNCgkgIHZhbCBmbV9ub2RlID0gZ2V0RnVuY05vZGUgZm0NCglpbg0KCSAgR3JhcGguZGZz
Tm9kZXMgKEcsIFtmbV9ub2RlXSwgZGZzX3BhcmFtKTsNCgkgIHJlc2V0IChmbiBfID0+IHRydWUp
DQoJZW5kDQogIGVuZA0KDQpzdHJ1Y3R1cmUgQW5hbHl6ZUNhbGwgPQ0KICBzdHJ1Y3QNCiAgICBk
YXRhdHlwZSB6ID0gZGF0YXR5cGUgUmV0dXJuLnQNCg0KICAgICgqDQogICAgICogUHJlY29uZGl0
aW9uOiBmb3JhbGwgZiBpbiBGdW5jLiAoRnVuY0RhdGEucmNvbnRDYWxsIG8gZ2V0RnVuY0RhdGEp
IGYgPSBVbmNhbGxlZA0KICAgICAqIFBvc3Rjb25kaXRpb246IEZ1bmNEYXRhLnJjb250Q2FsbCBv
IGdldEZ1bmNEYXRhID0gQV9DYWxsDQogICAgICopDQogICAgZnVuIGFuYWx5emVDYWxsIHtwcm9n
cmFtIGFzIFByb2dyYW0uVCB7ZnVuY3Rpb25zLCBtYWluID0gZm0sIC4uLn0sDQoJCSAgICAgZ2V0
RnVuY0RhdGE6IEZ1bmMudCAtPiBGdW5jRGF0YS50fSA6IHVuaXQNCiAgICAgID0gbGV0DQoJICB2
YWwgZm1fcmNvbnRDYWxsID0gRnVuY0RhdGEucmNvbnRDYWxsJyAoZ2V0RnVuY0RhdGEgZm0pDQoJ
ICB2YWwgXyA9IGZtX3Jjb250Q2FsbCA6PSBVbmtub3duDQoJaW4NCgkgIFZlY3Rvci5mb3JlYWNo
DQoJICAoZnVuY3Rpb25zLA0KCSAgIGZuIHtuYW1lID0gZiwgYm9keSA9IGZfYm9keSwgLi4ufQ0K
CSAgICA9PiBpZiBGdW5jRGF0YS5yZWFjaCAoZ2V0RnVuY0RhdGEgZikNCgkJIHRoZW4gRXhwLmZv
cmVhY2hDYWxsDQoJCSAgICAgIChmX2JvZHksDQoJCSAgICAgICBmbiB7ZnVuYyA9IGcsIGNvbnQs
IC4uLn0gDQoJCSAgICAgICAgPT4gbGV0DQoJCQkgICAgIHZhbCByY29udENhbGwgDQoJCQkgICAg
ICAgPSBGdW5jRGF0YS5yY29udENhbGwnIChnZXRGdW5jRGF0YSBnKQ0KCQkJICAgaW4NCgkJCSAg
ICAgaWYgRnVuYy5lcXVhbHMgKGYsIGcpDQoJCQkgICAgICAgdGhlbiBjYXNlIGNvbnQNCgkJCQkg
ICAgICBvZiBOT05FID0+ICgpDQoJCQkJICAgICAgIHwgU09NRSBqID0+IHJjb250Q2FsbCA6PSBV
bmtub3duDQoJCQkgICAgICAgZWxzZSBjYXNlICFyY29udENhbGwNCgkJCQkgICAgICBvZiBVbmNh
bGxlZCANCgkJCQkgICAgICAgPT4gKGNhc2UgY29udA0KCQkJCQkgICAgIG9mIE5PTkUgDQoJCQkJ
CSAgICAgID0+IHJjb250Q2FsbCA6PSBGdW5jTGFiZWwgZg0KCQkJCQkgICAgICB8IFNPTUUgaiAN
CgkJCQkJICAgICAgPT4gcmNvbnRDYWxsIDo9IEp1bXBMYWJlbCBqKQ0KCQkJCSAgICAgICB8IEp1
bXBMYWJlbCBfID0+IHJjb250Q2FsbCA6PSBVbmtub3duDQoJCQkJICAgICAgIHwgRnVuY0xhYmVs
IF8gPT4gcmNvbnRDYWxsIDo9IFVua25vd24NCgkJCQkgICAgICAgfCBVbmtub3duID0+ICgpDQoJ
CQkgICAgIGVuZCkNCgkJIGVsc2UgKCkpDQoJZW5kDQogIGVuZA0KDQpzdHJ1Y3R1cmUgQW5hbHl6
ZUNvbnQgPQ0KICBzdHJ1Y3QNCiAgICBkYXRhdHlwZSB6ID0gZGF0YXR5cGUgUmV0dXJuLnQNCg0K
ICAgICgqDQogICAgICogUHJlY29uZGl0aW9uOiBmb3JhbGwgZiBpbiBGdW5jLiAoRnVuY0RhdGEu
cmNvbnRDb250IG8gZ2V0RnVuY0RhdGEpIGYgPSBVbmNhbGxlZA0KICAgICAqICAgICAgICAgICAg
ICAgZm9yYWxsIGYgaW4gRnVuYy4gKEZ1bmNEYXRhLmxlc3NUaGFuIG8gZ2V0RnVuY0RhdGEpIGYg
PSBbXQ0KICAgICAqICAgICAgICAgICAgICAgDQogICAgICogUG9zdGNvbmRpdGlvbjogRnVuY0Rh
dGEucmNvbnRDb250IG8gZ2V0RnVuY0RhdGEgPSBBX0NvbnQNCiAgICAgKikNCiAgICBmdW4gYW5h
bHl6ZUNvbnQge3Byb2dyYW0gYXMgUHJvZ3JhbS5UIHtmdW5jdGlvbnMsIG1haW4gPSBmbSwgLi4u
fSwNCgkJICAgICBnZXRGdW5jRGF0YTogRnVuYy50IC0+IEZ1bmNEYXRhLnR9IDogdW5pdA0KICAg
ICAgPSBsZXQNCgkgIGZ1biB1cCAoZiwgcykNCgkgICAgPSBsZXQNCgkJdmFsIEZ1bmNEYXRhLlQg
e3Jjb250Q29udCwgbGVzc1RoYW4sIC4uLn0gPSBnZXRGdW5jRGF0YSBmDQoJCWZ1biBkb2l0IHMN
CgkJICA9IChyY29udENvbnQgOj0gczsNCgkJICAgICBMaXN0LmZvcmVhY2ggKCFsZXNzVGhhbiwg
Zm4gZyA9PiB1cCAoZywgcykpKQ0KCSAgICAgIGluDQoJCWNhc2UgKCFyY29udENvbnQsIHMpDQoJ
CSAgb2YgKF8sIFVuY2FsbGVkKSA9PiAoKQ0KCQkgICB8IChVbmtub3duLCBfKSA9PiAoKQ0KCQkg
ICB8IChVbmNhbGxlZCwgXykgPT4gZG9pdCBzDQoJCSAgIHwgKEp1bXBMYWJlbCBqLCBKdW1wTGFi
ZWwgaicpDQoJCSAgID0+IGlmIEp1bXAuZXF1YWxzIChqLCBqJykNCgkJCXRoZW4gKCkNCgkJCWVs
c2UgZG9pdCBVbmtub3duDQoJCSAgIHwgKEZ1bmNMYWJlbCBnLCBGdW5jTGFiZWwgZycpDQoJCSAg
ID0+IGlmIEZ1bmMuZXF1YWxzIChnLCBnJykNCgkJCXRoZW4gKCkNCgkJCWVsc2UgZG9pdCBVbmtu
b3duDQoJCSAgIHwgXyA9PiBkb2l0IFVua25vd24NCgkgICAgICBlbmQNCg0KCSAgZnVuIHRocnVG
dW5jIChmLCBnKSANCgkgICAgPSBsZXQNCgkJdmFsIEZ1bmNEYXRhLlQge3Jjb250Q29udCwgbGVz
c1RoYW4sIC4uLn0gPSBnZXRGdW5jRGF0YSBnDQoJICAgICAgaW4NCgkJTGlzdC5wdXNoIChsZXNz
VGhhbiwgZik7DQoJCXVwIChmLCAhcmNvbnRDb250KQ0KCSAgICAgIGVuZA0KCSAgZnVuIGFkZEp1
bXAgKGYsIGopID0gdXAgKGYsIEp1bXBMYWJlbCBqKQ0KCSAgZnVuIG1ha2VUb3AgZiA9IHVwIChm
LCBVbmtub3duKQ0KDQoNCgkgIHZhbCBfID0gbWFrZVRvcCBmbQ0KCWluDQoJICBWZWN0b3IuZm9y
ZWFjaA0KCSAgKGZ1bmN0aW9ucywNCgkgICBmbiB7bmFtZSA9IGYsIGJvZHkgPSBmX2JvZHksIC4u
Ln0NCgkgICAgPT4gaWYgRnVuY0RhdGEucmVhY2ggKGdldEZ1bmNEYXRhIGYpDQoJCSB0aGVuIEV4
cC5mb3JlYWNoQ2FsbA0KCQkgICAgICAoZl9ib2R5LA0KCQkgICAgICAgZm4ge2Z1bmMgPSBnLCBj
b250LCAuLi59DQoJCSAgICAgICAgPT4gaWYgRnVuYy5lcXVhbHMgKGYsIGcpDQoJCQkgICAgIHRo
ZW4gY2FzZSBjb250DQoJCQkJICAgIG9mIE5PTkUgPT4gKCkNCgkJCQkgICAgIHwgU09NRSBqID0+
IG1ha2VUb3AgZg0KCQkJICAgICBlbHNlIGNhc2UgY29udA0KCQkJCSAgICBvZiBOT05FID0+IHRo
cnVGdW5jIChnLCBmKQ0KCQkJCSAgICAgfCBTT01FIGogPT4gYWRkSnVtcCAoZywgaikpDQoJCSBl
bHNlICgpKQ0KCWVuZA0KICBlbmQNCg0Kc3RydWN0dXJlIEFuYWx5emVEb20gPQ0KICBzdHJ1Y3QN
CiAgICBzdHJ1Y3R1cmUgR3JhcGggPSBEaXJlY3RlZEdyYXBoDQogICAgc3RydWN0dXJlIE5vZGUg
PSBHcmFwaC5Ob2RlDQoNCiAgICAoKiBOb3cgZGVmaW5lIGEgZGlyZWN0ZWQgZ3JhcGggRyA9IChO
b2RlLCBFZGdlKSB3aGVyZQ0KICAgICAqICAgICAgTm9kZSA9IEp1bXAgVSBGdW4gVSB7Um9vdH0N
CiAgICAgKiAgICAgIEVkZ2UgPSB7KFJvb3QsIGZtKX0NCiAgICAgKiAgICAgICAgICAgICBVIHso
Um9vdCwgaikgfCBqIGluIEp1bXB9DQogICAgICogICAgICAgICAgICAgVSB7KFJvb3QsIGYpIHwg
bm90KFJlYWNoKGYpKX0NCiAgICAgKiAgICAgICAgICAgICBVIHsoZiwgZykgfCAoZiwgZykgaW4g
VCBhbmQgUmVhY2goZil9DQogICAgICogICAgICAgICAgICAgVSB7KGosIGcpIHwgKGYsIGcsIGop
IGluIE4gYW5kIFJlYWNoKGYpfQ0KICAgICAqDQogICAgICogTGV0IEQgYmUgdGhlIGRvbWluYXRv
ciB0cmVlIG9mIEcgcm9vdGVkIGF0IFJvb3QuDQogICAgICogRm9yIGYgaW4gRnVuLCBsZXQgaWRv
bShmKSBiZSB0aGUgcGFyZW50IG9mIGYgaW4gRC4NCiAgICAgKg0KICAgICAqIERlZmluZSBhbiBh
bmFseXNpcywgQV9Eb20sIGJhc2VkIG9uIEQgYXMgZm9sbG93czoNCiAgICAgKiAgICAgIEFfRG9t
KGYpID0gDQogICAgICogICAgICAgICAgIGlmIGlkb20oZikgPSBSb290DQogICAgICogICAgICAg
ICAgICAgdGhlbiBpZiBSZWFjaChmKSB0aGVuIFVua25vd24gZWxzZSBVbmNhbGxlZA0KICAgICAq
ICAgICAgICAgICAgIGVsc2UgdGhlIGFuY2VzdG9yIGcgb2YgZiBpbiBEIHN1Y2ggdGhhdCBpZG9t
KGcpID0gUm9vdA0KICAgICAqDQogICAgICogUHJlY29uZGl0aW9uOiBmb3JhbGwgaiBpbiBKdW1w
LiAoSnVtcERhdGEubm9kZSBvIGdldEp1bXBEYXRhKSBqID0gTk9ORQ0KICAgICAqICAgICAgICAg
ICAgICAgZm9yYWxsIGYgaW4gRnVuYy4gKEZ1bmNEYXRhLm5vZGUgbyBnZXRGdW5jRGF0YSkgZiA9
IE5PTkUNCiAgICAgKiAgICAgICAgICAgICAgIGZvcmFsbCBmIGluIEZ1bmMuIChGdW5jRGF0YS5y
ZWFjaCBvIGdldEZ1bmNEYXRhKSBmID0gUmVhY2gNCiAgICAgKiBQb3N0Y29uZGl0aW9uOiBGdW5j
RGF0YS5yY29udERvbSBvIGdldEZ1bmNEYXRhID0gQV9Eb20NCiAgICAgKiAgICAgICAgICAgICAg
ICBmb3JhbGwgaiBpbiBKdW1wLiAoSnVtcERhdGEubm9kZSBvIGdldEp1bXBEYXRhKSBqID0gTk9O
RQ0KICAgICAqICAgICAgICAgICAgICAgIGZvcmFsbCBmIGluIEZ1bmMuIChGdW5jRGF0YS5ub2Rl
IG8gZ2V0RnVuY0RhdGEpIGYgPSBOT05FDQogICAgICopDQogICAgZnVuIGFuYWx5emVEb20ge3By
b2dyYW0gYXMgUHJvZ3JhbS5UIHtmdW5jdGlvbnMsIG1haW4gPSBmbSwgLi4ufSwNCgkJICAgIGdl
dEZ1bmNEYXRhOiBGdW5jLnQgLT4gRnVuY0RhdGEudCwNCgkJICAgIGdldEp1bXBEYXRhOiBKdW1w
LnQgLT4gSnVtcERhdGEudH0gOiB1bml0DQogICAgICA9IGxldA0KCSAgZGF0YXR5cGUgeiA9IGRh
dGF0eXBlIFJldHVybi50DQoNCgkgIHZhbCB7RywgYWRkRWRnZSwgZ2V0Tm9kZUluZm8sIGdldEZ1
bmNOb2RlLCBnZXRKdW1wTm9kZSwgcmVzZXR9DQoJICAgID0gSnVtcEZ1bmNHcmFwaC5uZXdKdW1w
RnVuY0dyYXBoIHtnZXRKdW1wRGF0YSA9IGdldEp1bXBEYXRhLA0KCQkJCQkgICAgICBnZXRGdW5j
RGF0YSA9IGdldEZ1bmNEYXRhfQ0KCSAgdmFsIFJvb3QgPSBEaXJlY3RlZEdyYXBoLm5ld05vZGUg
Rw0KDQoJICB2YWwgZm1fbm9kZSA9IGdldEZ1bmNOb2RlIGZtDQoJICAoKiB7KFJvb3QsIGZtKX0g
KikNCgkgIHZhbCBfID0gYWRkRWRnZSB7ZnJvbSA9IFJvb3QsIHRvID0gZm1fbm9kZX0NCgkgICAg
DQoJICB2YWwgXw0KCSAgICA9IFZlY3Rvci5mb3JlYWNoDQoJICAgICAgKGZ1bmN0aW9ucywNCgkg
ICAgICAgZm4ge25hbWUgPSBmLCBib2R5ID0gZl9ib2R5LCAuLi59DQoJICAgICAgICA9PiBsZXQN
CgkJICAgICB2YWwgZl9yZWFjaCA9IEZ1bmNEYXRhLnJlYWNoIChnZXRGdW5jRGF0YSBmKQ0KCQkg
ICAgIHZhbCBmX25vZGUgPSBnZXRGdW5jTm9kZSBmDQoJCSAgIGluDQoJCSAgICAgaWYgZl9yZWFj
aA0KCQkgICAgICAgdGhlbiBFeHAuZm9yZWFjaENhbGwNCgkJCSAgICAoZl9ib2R5LA0KCQkJICAg
ICBmbiB7ZnVuYyA9IGcsIGNvbnQsIC4uLn0NCgkJCSAgICAgID0+IGlmIEZ1bmNEYXRhLnJlYWNo
IChnZXRGdW5jRGF0YSBnKQ0KCQkJCSAgIHRoZW4gbGV0DQoJCQkJCSAgdmFsIGdfbm9kZSA9IGdl
dEZ1bmNOb2RlIGcNCgkJCQkJaW4NCgkJCQkJICBjYXNlIGNvbnQNCgkJCQkJICAgIG9mIE5PTkUN
CgkJCQkJICAgICA9PiAoKiB7KGYsIGcpIHwgKGYsIGcpIGluIFQgDQoJCQkJCQkgKiAgICAgICBh
bmQgUmVhY2goZil9ICopDQoJCQkJCSAgICAgICAgYWRkRWRnZSB7ZnJvbSA9IGZfbm9kZSwNCgkJ
CQkJCQkgdG8gPSBnX25vZGV9DQoJCQkJCSAgICAgfCBTT01FIGoNCgkJCQkJICAgICA9PiBsZXQN
CgkJCQkJCSAgdmFsIGpfbm9kZSA9IGdldEp1bXBOb2RlIGoNCgkJCQkJCWluDQoJCQkJCQkgICgq
IHsoUm9vdCwgaikgfCBqIGluIEp1bXB9ICopDQoJCQkJCQkgIGFkZEVkZ2Uge2Zyb20gPSBSb290
LA0KCQkJCQkJCSAgIHRvID0gal9ub2RlfTsNCgkJCQkJCSAgKCogeyhqLCBnKSB8IChmLCBnLCBq
KSBpbiBODQoJCQkJCQkgICAqICAgICAgIGFuZCBSZWFjaChmKX0gKikNCgkJCQkJCSAgYWRkRWRn
ZSB7ZnJvbSA9IGpfbm9kZSwNCgkJCQkJCQkgICB0byA9IGdfbm9kZX0NCgkJCQkJCWVuZA0KCQkJ
CQllbmQNCgkJCQkgICBlbHNlICgpKQ0KCQkgICAgICAgZWxzZSAoKiB7KFJvb3QsIGYpIHwgbm90
KFJlYWNoKGYpKX0gKikNCgkJCSAgICBhZGRFZGdlIHtmcm9tID0gUm9vdCwNCgkJCQkgICAgIHRv
ID0gZl9ub2RlfQ0KCQkgICBlbmQpDQoJICAgICAgDQoJICB2YWwge2lkb219ID0gR3JhcGguZG9t
aW5hdG9ycyB7Z3JhcGggPSBHLCByb290ID0gUm9vdH0NCgkgIGZ1biBhbmNlc3RvciBub2RlDQoJ
ICAgID0gbGV0DQoJCXZhbCBwYXJlbnQgPSBpZG9tIG5vZGUNCgkgICAgICBpbg0KCQlpZiBOb2Rl
LmVxdWFscyhwYXJlbnQsIFJvb3QpDQoJCSAgdGhlbiBub2RlDQoJCSAgZWxzZSBhbmNlc3RvciBw
YXJlbnQNCgkgICAgICBlbmQNCglpbg0KCSAgVmVjdG9yLmZvcmVhY2gNCgkgIChmdW5jdGlvbnMs
DQoJICAgZm4ge25hbWUsIC4uLn0NCgkgICAgPT4gbGV0DQoJCSB2YWwgRnVuY0RhdGEuVCB7cmNv
bnREb20sIHJlYWNoLCBub2RlLCAuLi59ID0gZ2V0RnVuY0RhdGEgbmFtZQ0KCQkgdmFsIGZfcmNv
bnQgPSByY29udERvbQ0KCQkgdmFsIGZfcmVhY2ggPSAhcmVhY2gNCgkJIHZhbCBmX25vZGUgPSB2
YWxPZiAoIW5vZGUpDQoJCSBkYXRhdHlwZSB6ID0gZGF0YXR5cGUgSnVtcEZ1bmNHcmFwaC50DQoJ
ICAgICAgIGluDQoJCSBpZiBOb2RlLmVxdWFscyhpZG9tIGZfbm9kZSwgUm9vdCkNCgkJICAgdGhl
biBpZiBmX3JlYWNoDQoJCQkgIHRoZW4gZl9yY29udCA6PSBVbmtub3duDQoJCQkgIGVsc2UgZl9y
Y29udCA6PSBVbmNhbGxlZA0KCQkgICBlbHNlIGxldA0KKCogVXNlIHRoaXMgZm9yIHRoZSBhbmNl
c3RvciB2ZXJzaW9uDQoJCQkgIHZhbCBsX25vZGUgPSBhbmNlc3RvciBmX25vZGUNCiopDQooKiBV
c2UgdGhpcyBmb3IgdGhlIHBhcmVudCB2ZXJzaW9uICopDQoJCQkgIHZhbCBsX25vZGUgPSBpZG9t
IGZfbm9kZQ0KCQkJICB2YWwgbCA9IGdldE5vZGVJbmZvIGxfbm9kZQ0KCQkJaW4NCgkJCSAgY2Fz
ZSBnZXROb2RlSW5mbyBsX25vZGUNCgkJCSAgICBvZiBGdW5jTm9kZSBnID0+IGZfcmNvbnQgOj0g
RnVuY0xhYmVsIGcNCgkJCSAgICAgfCBKdW1wTm9kZSBqID0+IGZfcmNvbnQgOj0gSnVtcExhYmVs
IGoNCgkJCWVuZA0KCSAgICAgICBlbmQpOw0KCSAgcmVzZXQgKGZuIG4gPT4gbm90IChOb2RlLmVx
dWFscyhuLCBSb290KSkpDQoJZW5kDQplbmQNCg0Kc3RydWN0dXJlIFRyYW5zZm9ybSA9DQogIHN0
cnVjdA0KDQogICAgc3RydWN0dXJlIEdyYXBoID0gRGlyZWN0ZWRHcmFwaA0KICAgIHN0cnVjdHVy
ZSBOb2RlID0gR3JhcGguTm9kZQ0KICAgIHN0cnVjdHVyZSBFZGdlID0gR3JhcGguRWRnZQ0KICAg
IHN0cnVjdHVyZSBEZnNQYXJhbSA9IEdyYXBoLkRmc1BhcmFtDQoNCiAgICAoKg0KICAgICAqIFBy
ZWNvbmRpdGlvbjogZm9yYWxsIGogaW4gSnVtcC4gKEp1bXBEYXRhLm5vZGUgbyBnZXRKdW1wRGF0
YSkgaiA9IE5PTkUNCiAgICAgKiAgICAgICAgICAgICAgIGZvcmFsbCBqIGluIEp1bXAuIChKdW1w
RGF0YS5wcmVmaXhlcyBvIGdldEp1bXBEYXRhKSBqID0gW10NCiAgICAgKiAgICAgICAgICAgICAg
IGZvcmFsbCBmIGluIEZ1bmMuIChGdW5jRGF0YS5ub2RlIG8gZ2V0RnVuY0RhdGEpIGYgPSBOT05F
DQogICAgICogICAgICAgICAgICAgICBGdW5jRGF0YS5yY29udCBvIGdldEZ1bmNEYXRhID0gQQ0K
ICAgICAqICAgICAgICAgICAgICAgIHdoZXJlIEEgaXMgYW4gYWN5Y2xpYywgc2FmZSBhbmFseXNp
cw0KICAgICAqICAgICAgICAgICAgICAgRnVuY0RhdGEuY2FsbGVycyBvIGdldEZ1bmNEYXRhID0g
Q2FsbGVycw0KICAgICAqICAgICAgICAgICAgICAgRnVuY0RhdGEuY2FsbGVlcyBvIGdldEZ1bmNE
YXRhID0gQ2FsbGVlcw0KICAgICAqICAgICAgICAgICAgICAgZm9yYWxsIGYgaW4gRnVuYy4gKEp1
bXBEYXRhLnByZWZpeGVzIG8gZ2V0RnVuY0RhdGEpIGYgPSBbXQ0KICAgICAqICAgICAgICAgICAg
ICAgZm9yYWxsIGYgaW4gRnVuYy4gKEp1bXBEYXRhLnJlcGxhY2UgbyBnZXRGdW5jRGF0YSkgZiA9
IE5PTkUNCiAgICAgKiBQb3N0Y29uZGl0aW9uOiBmb3JhbGwgaiBpbiBKdW1wLiAoSnVtcERhdGEu
bm9kZSBvIGdldEp1bXBEYXRhKSBqID0gTk9ORQ0KICAgICAqICAgICAgICAgICAgICAgIGZvcmFs
bCBmIGluIEZ1bmMuIChGdW5jRGF0YS5ub2RlIG8gZ2V0RnVuY0RhdGEpIGYgPSBOT05FDQogICAg
ICopDQogICAgZnVuIHRyYW5zZm9ybSB7cHJvZ3JhbSBhcyBQcm9ncmFtLlQge2RhdGF0eXBlcywg
Z2xvYmFscywgDQoJCQkJCSBmdW5jdGlvbnMsIG1haW59LA0KCQkgICBnZXRGdW5jRGF0YTogRnVu
Yy50IC0+IEZ1bmNEYXRhLnQsDQoJCSAgIGdldEp1bXBEYXRhOiBKdW1wLnQgLT4gSnVtcERhdGEu
dH0gOiBQcm9ncmFtLnQNCiAgICAgID0gbGV0DQoJICBkYXRhdHlwZSB6ID0gZGF0YXR5cGUgUmV0
dXJuLnQNCg0KCSAgdmFsIHtHLCBhZGRFZGdlLCBnZXROb2RlSW5mbywgZ2V0SnVtcE5vZGUsIGdl
dEZ1bmNOb2RlLCByZXNldH0NCgkgICAgPSBKdW1wRnVuY0dyYXBoLm5ld0p1bXBGdW5jR3JhcGgg
e2dldEZ1bmNEYXRhID0gZ2V0RnVuY0RhdGEsDQoJCQkJCSAgICAgIGdldEp1bXBEYXRhID0gZ2V0
SnVtcERhdGF9DQoNCgkgIHZhbCBfIA0KCSAgICA9IFZlY3Rvci5mb3JlYWNoDQoJICAgICAgKGZ1
bmN0aW9ucywNCgkgICAgICAgZm4ge25hbWUgPSBmLCAuLi59DQoJICAgICAgICA9PiBsZXQNCgkJ
ICAgICB2YWwgRnVuY0RhdGEuVCB7cmNvbnQsIGNvbnRpZnksIC4uLn0gDQoJCSAgICAgICA9IGdl
dEZ1bmNEYXRhIGYNCgkJICAgICB2YWwgZl9ub2RlID0gZ2V0RnVuY05vZGUgZg0KCQkgICBpbg0K
CQkgICAgIGNhc2UgIXJjb250DQoJCSAgICAgICBvZiBVbmNhbGxlZCA9PiBjb250aWZ5IDo9IGZh
bHNlDQoJCQl8IFVua25vd24gPT4gY29udGlmeSA6PSBmYWxzZQ0KCQkgICAgICAgIHwgSnVtcExh
YmVsIGoNCgkJCT0+IGxldA0KCQkJICAgICB2YWwgbF9ub2RlID0gZ2V0SnVtcE5vZGUgag0KCQkJ
ICAgaW4NCgkJCSAgICAgY29udGlmeSA6PSB0cnVlOw0KCQkJICAgICBhZGRFZGdlIHtmcm9tID0g
bF9ub2RlLA0KCQkJCSAgICAgIHRvID0gZl9ub2RlfQ0KCQkJICAgZW5kDQoJCSAgICAgICAgfCBG
dW5jTGFiZWwgZw0KCQkJPT4gbGV0DQoJCQkgICAgIHZhbCBsX25vZGUgPSBnZXRGdW5jTm9kZSBn
DQoJCQkgICBpbg0KCQkJICAgICBjb250aWZ5IDo9IHRydWU7DQoJCQkgICAgIGFkZEVkZ2Uge2Zy
b20gPSBsX25vZGUsDQoJCQkJICAgICAgdG8gPSBmX25vZGV9DQoJCQkgICBlbmQNCgkJICAgZW5k
KQ0KDQoJICBkYXRhdHlwZSB6ID0gZGF0YXR5cGUgSnVtcEZ1bmNHcmFwaC50DQoJICB2YWwgdG9k
byA9IHJlZiBbXTsNCgkgIHZhbCBkZnNfcGFyYW0NCgkgICAgPSB7c3RhcnROb2RlID0gaWdub3Jl
LA0KCSAgICAgICBmaW5pc2hOb2RlID0gZm4gbiA9PiBMaXN0LnB1c2godG9kbywgbiksDQoJICAg
ICAgIGhhbmRsZVRyZWVFZGdlID0gaWdub3JlLA0KCSAgICAgICBoYW5kbGVOb25UcmVlRWRnZSA9
IGZuIF8gPT4gRXJyb3IuYnVnICJjeWNsaWMgYW5hbHlzaXMiLA0KCSAgICAgICBzdGFydFRyZWUg
PSBpZ25vcmUsDQoJICAgICAgIGZpbmlzaFRyZWUgPSBpZ25vcmUsDQoJICAgICAgIGZpbmlzaERm
cyA9IGlnbm9yZX0NCgkgIHZhbCAocm9vdHMsIG5vbl9yb290cykgDQoJICAgID0gcGFydGl0aW9u
KEdyYXBoLm5vZGVzIEcsDQoJCQlmbiBuID0+IGNhc2UgZ2V0Tm9kZUluZm8gbg0KCQkJCSAgb2Yg
SnVtcE5vZGUgaiA9PiB0cnVlDQoJCQkgICAgICAgICAgIHwgRnVuY05vZGUgZiANCgkJCQkgICA9
PiBub3QgKEZ1bmNEYXRhLmNvbnRpZnkgKGdldEZ1bmNEYXRhIGYpKSkNCgkgIHZhbCBfID0gR3Jh
cGguZGZzTm9kZXMgKEcsIHJvb3RzIEAgbm9uX3Jvb3RzLCBkZnNfcGFyYW0pDQoJICB2YWwgXyA9
IHRvZG8gOj0gTGlzdC5yZXYoIXRvZG8pDQoJICB2YWwgXyA9IHJlc2V0IChmbiBfID0+IHRydWUp
DQoNCgkgIGZ1biBjYXNjYWRlIGZzDQoJICAgID0gbGV0DQoJCXZhbCAoY29udGlmaWFibGUsIHVu
Y29udGlmaWFibGUpDQoJCSAgPSBwYXJ0aXRpb24NCgkJICAgIChmcywgZm4gZyA9PiBGdW5jRGF0
YS5jb250aWZ5IChnZXRGdW5jRGF0YSBnKSkNCg0KCQlmdW4gZG9pdCBmDQoJCSAgPSBsZXQNCgkJ
ICAgICAgdmFsIEZ1bmNEYXRhLlQge2NhbGxlZXMsIHByZWZpeGVzLCAuLi59ID0gZ2V0RnVuY0Rh
dGEgZg0KCQkgICAgaW4NCgkJICAgICAgTGlzdC5mb3JlYWNoDQoJCSAgICAgICghY2FsbGVlcywN
CgkJICAgICAgIGZuIGcgPT4gbGV0DQoJCQkJIHZhbCBjb250aWZ5IA0KCQkJCSAgID0gRnVuY0Rh
dGEuY29udGlmeScgKGdldEZ1bmNEYXRhIGcpDQoJCQkgICAgICAgaW4NCgkJCQkgY29udGlmeSA6
PSBmYWxzZQ0KCQkJICAgICAgIGVuZCk7DQoJCSAgICAgIExpc3QuZm9yZWFjaCghcHJlZml4ZXMs
IGRvaXQpDQoJCSAgICBlbmQNCgkgICAgICBpbg0KCQljYXNlIHVuY29udGlmaWFibGUNCgkJICBv
ZiBbXSANCgkJICAgPT4gY29udGlmaWFibGUNCgkJICAgfCBfIA0KCQkgICA9PiBsZXQNCgkJCXZh
bCBfID0gTGlzdC5mb3JlYWNoICh1bmNvbnRpZmlhYmxlLCBkb2l0KQ0KCQkgICAgICBpbg0KCQkJ
Y2FzY2FkZSBjb250aWZpYWJsZQ0KCQkgICAgICBlbmQNCgkgICAgICBlbmQNCg0KCSAgKCogU3Ry
b25nbHkgY29ubmVjdGVkIGNvbXBvbmVudHMgb2YgYSBncm91cCBvZiBmdW5jdGlvbnMuICopDQoJ
ICBmdW4gZ2V0U0NDUyAoZnM6IEZ1bmMudCBsaXN0KSA6IEZ1bmMudCBsaXN0IGxpc3QNCgkgICAg
PSBsZXQNCgkJdmFsIHtHLCBhZGRFZGdlLCBnZXROb2RlSW5mbywgZ2V0RnVuY05vZGUsIHJlc2V0
fQ0KCQkgID0gSnVtcEZ1bmNHcmFwaC5uZXdGdW5jR3JhcGgge2dldEZ1bmNEYXRhID0gZ2V0RnVu
Y0RhdGF9DQoNCgkJdmFsIF8gDQoJCSAgPSBMaXN0LmZvcmVhY2gNCgkJICAgIChmcywNCgkJICAg
ICBmbiBmID0+IGxldA0KCQkJICAgICAgIHZhbCBjYWxsZXJzID0gRnVuY0RhdGEuY2FsbGVycyAo
Z2V0RnVuY0RhdGEgZikNCgkJCSAgICAgICB2YWwgZl9ub2RlID0gZ2V0RnVuY05vZGUgZg0KCQkJ
ICAgICBpbg0KCQkJICAgICAgIExpc3QuZm9yZWFjaA0KCQkJICAgICAgIChjYWxsZXJzLA0KCQkJ
CWZuIGcgPT4gaWYgTGlzdC5jb250YWlucyhmcywgZywgRnVuYy5lcXVhbHMpDQoJCQkJCSAgdGhl
biBsZXQNCgkJCQkJCSB2YWwgZ19ub2RlID0gZ2V0RnVuY05vZGUgZw0KCQkJCQkgICAgICAgaW4N
CgkJCQkJCSBhZGRFZGdlIHtmcm9tID0gZl9ub2RlLA0KCQkJCQkJCSAgdG8gPSBnX25vZGV9DQoJ
CQkJCSAgICAgICBlbmQNCgkJCQkJICBlbHNlICgpKQ0KCQkJICAgICBlbmQpDQoNCgkJdmFsIHNj
Y3MgPSBHcmFwaC5zdHJvbmdseUNvbm5lY3RlZENvbXBvbmVudHMgRw0KCQl2YWwgXyA9IHJlc2V0
IChmbiBfID0+IHRydWUpDQoJICAgICAgaW4NCgkJTGlzdC5tYXAgKHNjY3MsIGZuIHNjYyA9PiBM
aXN0LnJldk1hcCAoc2NjLCBnZXROb2RlSW5mbykpDQoJICAgICAgZW5kDQoNCgkgIGV4Y2VwdGlv
biBOb3BlDQoJICBmdW4gZ2V0U0NDU0hlYWRzIChmcyA6IEZ1bmMudCBsaXN0KSA6IEZ1bmMudCBs
aXN0DQoJICAgID0gKGNhc2NhZGUgbyBMaXN0LmNvbmNhdE1hcCkNCgkgICAgICAoZ2V0U0NDUyBm
cywNCgkgICAgICAgZm4gZnMNCgkgICAgICAgID0+IGxldA0KCQkgICAgIHZhbCBvdXRzaWRlQ2Fs
bGVlID0gcmVmIE5PTkUNCgkJICAgICB2YWwgXw0KCQkgICAgICAgPSBMaXN0LmZvcmVhY2gNCgkJ
ICAgICAgICAgKGZzLA0KCQkJICBmbiBmID0+IGxldA0KCQkJCSAgICB2YWwgY2FsbGVycyANCgkJ
CQkgICAgICA9IEZ1bmNEYXRhLmNhbGxlcnMgKGdldEZ1bmNEYXRhIGYpDQoJCQkJICBpbg0KCQkJ
CSAgICBpZiBMaXN0LmV4aXN0cw0KCQkJCSAgICAgICAoY2FsbGVycywNCgkJCQkJZm4gZyA9PiBu
b3QgKExpc3QuY29udGFpbnMNCgkJCQkJCSAgICAgKGZzLCBnLCBGdW5jLmVxdWFscykpKQ0KCQkJ
CSAgICAgIHRoZW4gY2FzZSAhb3V0c2lkZUNhbGxlZQ0KCQkJCQkgICAgIG9mIE5PTkUgPT4gb3V0
c2lkZUNhbGxlZSA6PSBTT01FIGYNCgkJCQkJICAgICAgfCBTT01FIF8gPT4gcmFpc2UgTm9wZQ0K
CQkJCSAgICAgIGVsc2UgKCkNCgkJCQkgIGVuZCkNCgkJICAgaW4NCgkJICAgICBjYXNlICFvdXRz
aWRlQ2FsbGVlDQoJCSAgICAgICBvZiBOT05FID0+IEVycm9yLmJ1ZyAiZ2V0U0NDSGVhZHMiDQoJ
CQl8IFNPTUUgZiANCgkJCT0+IGxldA0KCQkJICAgICB2YWwgcHJlZml4ZXMgPSBGdW5jRGF0YS5w
cmVmaXhlcycgKGdldEZ1bmNEYXRhIGYpDQoJCQkgICAgIHZhbCByZXN0ID0gTGlzdC5yZW1vdmVG
aXJzdCANCgkJCSAgICAgICAgICAgICAgICAoZnMsIGZuIGcgPT4gRnVuYy5lcXVhbHMgKGYsIGcp
KQ0KCQkJICAgICB2YWwgcHJlZml4ID0gZ2V0U0NDU0hlYWRzIHJlc3QNCgkJCSAgIGluDQoJCQkg
ICAgIHByZWZpeGVzIDo9IHByZWZpeCBAICFwcmVmaXhlczsNCgkJCSAgICAgW2ZdDQoJCQkgICBl
bmQNCgkJICAgZW5kDQoJCSAgIGhhbmRsZSBOb3BlDQoJCSAgICA9PiAoTGlzdC5mb3JlYWNoDQoJ
CQkoZnMsDQoJCQkgZm4gZiA9PiBsZXQNCgkJCQkgICB2YWwgY29udGlmeSANCgkJCQkgICAgID0g
RnVuY0RhdGEuY29udGlmeScgKGdldEZ1bmNEYXRhIGYpDQoJCQkJIGluDQoJCQkJICAgY29udGlm
eSA6PSBmYWxzZQ0KCQkJCSBlbmQpOw0KCQkJZnMpKQ0KDQoJICBmdW4gZ2V0U3VjY3MgbiANCgkg
ICAgPSBsZXQNCgkJdmFsIHN1Y2NzID0gTGlzdC5tYXAoTm9kZS5zdWNjZXNzb3JzIG4sIEVkZ2Uu
dG8pDQoJCXZhbCBzdWNjcyA9IExpc3Qua2VlcEFsbE1hcA0KCQkgICAgICAgICAgICAoc3VjY3Ms
DQoJCQkgICAgIGZuIG4gPT4gY2FzZSBnZXROb2RlSW5mbyBuDQoJCQkJICAgICAgIG9mIEp1bXBO
b2RlIGogPT4gTk9ORQ0KCQkJCQl8IEZ1bmNOb2RlIGYgPT4gU09NRSBmKQ0KCSAgICAgIGluDQoJ
CXN1Y2NzDQoJICAgICAgZW5kDQoNCgkgIGZ1biBwcm9jZXNzVG9kbyAoKQ0KCSAgICA9IGNhc2Ug
IXRvZG8NCgkJb2YgW10gPT4gKCkNCgkJIHwgXyA9PiBsZXQgDQoJCQkgIHZhbCBuID0gTGlzdC5w
b3AgdG9kbw0KCQkJICB2YWwgc3VjY3MgPSBnZXRTdWNjcyBuDQoJCQkgIHZhbCBzY2NIZWFkcyA9
IGdldFNDQ1NIZWFkcyBzdWNjcw0KCQkJaW4gDQoJCQkgIGNhc2UgZ2V0Tm9kZUluZm8gbg0KCQkJ
ICAgIG9mIEp1bXBOb2RlIGogDQoJCQkgICAgID0+IGxldA0KCQkJCSAgdmFsIHByZWZpeGVzIA0K
CQkJCSAgICA9IEp1bXBEYXRhLnByZWZpeGVzJyAoZ2V0SnVtcERhdGEgaikNCgkJCQlpbiANCgkJ
CQkgIHByZWZpeGVzIDo9IHNjY0hlYWRzIEAgIXByZWZpeGVzDQoJCQkJZW5kIA0KCQkJICAgICB8
IEZ1bmNOb2RlIGYNCgkJCSAgICAgPT4gbGV0DQoJCQkJICB2YWwgcHJlZml4ZXMNCgkJCQkgICAg
PSBGdW5jRGF0YS5wcmVmaXhlcycgKGdldEZ1bmNEYXRhIGYpDQoJCQkJaW4gDQoJCQkJICBwcmVm
aXhlcyA6PSBzY2NIZWFkcyBAICFwcmVmaXhlcw0KCQkJCWVuZDsNCgkJCSAgcHJvY2Vzc1RvZG8g
KCkNCgkJCWVuZA0KCSAgdmFsIF8gPSBwcm9jZXNzVG9kbyAoKQ0KDQoJICAoKiBGb3IgZnVuY3Rp
b25zIHR1cm5lZCBpbnRvIGNvbnRpbnVhdGlvbnMsDQoJICAgKiAgcmVjb3JkIHRoZWlyIGFyZ3Ms
IGJvZHksIGFuZCBuZXcgbmFtZS4NCgkgICAqKQ0KCSAgdmFsIF8gDQoJICAgID0gVmVjdG9yLmZv
cmVhY2gNCgkgICAgICAoZnVuY3Rpb25zLA0KCSAgICAgICBmbiB7bmFtZSA9IGYsIGFyZ3MgPSBm
X2FyZ3MsIGJvZHkgPSBmX2JvZHksIC4uLn0gDQoJICAgICAgICA9PiBsZXQNCgkJICAgICB2YWwg
RnVuY0RhdGEuVCB7Y29udGlmeSwgcmVwbGFjZSwgLi4ufSA9IGdldEZ1bmNEYXRhIGYNCgkJICAg
aW4NCgkJICAgICBpZiAhY29udGlmeQ0KCQkgICAgICAgdGhlbiBsZXQNCgkJCSAgICAgIHZhbCBq
dW1wID0gSnVtcC5uZXdTdHJpbmcgKEZ1bmMub3JpZ2luYWxOYW1lIGYpDQoJCQkgICAgaW4gDQoJ
CQkgICAgICByZXBsYWNlIDo9IFNPTUUge2p1bXAgPSBqdW1wLA0KCQkJCQkgICAgICAgYXJncyA9
IGZfYXJncywNCgkJCQkJICAgICAgIGJvZHkgPSBmX2JvZHl9DQoJCQkJCSAgICAgICANCgkJCSAg
ICBlbmQNCgkJICAgICAgIGVsc2UgKCkNCgkJICAgZW5kKQ0KDQoJICAoKiBXYWxrIG92ZXIgYWxs
IGZ1bmN0aW9ucywgcmVtb3ZpbmcgdGhvc2UgdGhhdCBhcmVuJ3QgdG9wIGxldmVsLA0KCSAgICog
IGFuZCBkZXNjZW5pbmcgdGhvc2UgdGhhdCBhcmUsIGluc2VydGluZyBsb2NhbCBmdW5jdGlvbnMN
CgkgICAqICB3aGVyZSBuZWNlc3NhcnkuDQoJICAgKiAtIHR1cm4gdGFpbCBjYWxscyBpbnRvIG5v
bnRhaWwgY2FsbHMNCgkgICAqIC0gdHVybiByZXR1cm5zIGludG8ganVtcHMNCgkgICAqKQ0KCSAg
ZnVuIHdhbGtFeHAgKGY6IEZ1bmMudCwgZTogRXhwLnQsIGM6IEp1bXAudCBvcHRpb24pOiBFeHAu
dCANCgkgICAgPSBsZXQNCgkJdmFsIHtkZWNzLCB0cmFuc2Zlcn0gPSBFeHAuZGVzdCBlDQoJCXZh
bCBkZWNzDQoJCSAgPSBMaXN0LmZvbGQNCgkJICAgIChMaXN0LnJldiBkZWNzLA0KCQkgICAgIFtd
LA0KCQkgICAgIGZuIChkLCBkcykNCgkJICAgICAgPT4gY2FzZSBkIA0KCQkJICAgb2YgQmluZCBf
ID0+IGQgOjogZHMNCgkJCSAgICB8IEZ1biB7bmFtZSA9IGosIGFyZ3MsIGJvZHl9IA0KCQkJICAg
ID0+IEZ1biB7bmFtZSA9IGosDQoJCQkJICAgIGFyZ3MgPSBhcmdzLA0KCQkJCSAgICBib2R5ID0g
d2Fsa0V4cCAoZiwgYm9keSwgYyl9IDo6DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bGV0DQoJCQkJIHZhbCBwcmVmaXhlcw0KCQkJCSAgID0gSnVtcERhdGEucHJlZml4ZXMgKGdldEp1
bXBEYXRhIGopDQoJCQkgICAgICAgaW4NCgkJCQkgcHJlZml4X2RlYyAocHJlZml4ZXMsIFNPTUUg
aiwgZHMpDQoJCQkgICAgICAgZW5kDQoJCQkgICAgfCBIYW5kbGVyUHVzaCBoID0+IEhhbmRsZXJQ
dXNoIGggOjogZHMNCgkJCSAgICB8IEhhbmRsZXJQb3AgPT4gSGFuZGxlclBvcCA6OiBkcykNCg0K
CQlmdW4gbWFrZSB0cmFuc2ZlciA9IEV4cC5tYWtlIHtkZWNzID0gZGVjcywgdHJhbnNmZXIgPSB0
cmFuc2Zlcn0NCgkgICAgICBpbg0KCQljYXNlIHRyYW5zZmVyDQoJCSAgb2YgQ2FsbCB7ZnVuYywg
YXJncywgY29udH0gDQoJCSAgID0+IGxldA0KCQkJdmFsIHJlcGxhY2UgPSBGdW5jRGF0YS5yZXBs
YWNlIChnZXRGdW5jRGF0YSBmdW5jKQ0KCQkgICAgICBpbg0KCQkJY2FzZSByZXBsYWNlDQoJCQkg
IG9mIE5PTkUgPT4gbWFrZSAoQ2FsbCB7ZnVuYyA9IGZ1bmMsDQoJCQkJCQkgYXJncyA9IGFyZ3Ms
DQoJCQkJCQkgY29udCA9IGNhc2UgY29udA0KCQkJCQkJCSAgb2YgTk9ORSA9PiBjDQoJCQkJCQkJ
ICAgfCBTT01FIF8gPT4gY29udH0pDQoJCQkgICB8IFNPTUUge2p1bXAsIC4uLn0NCgkJCSAgID0+
IG1ha2UgKEp1bXAge2RzdCA9IGp1bXAsIGFyZ3MgPSBhcmdzfSkNCgkJICAgICAgZW5kDQoJCSAg
IHwgUmV0dXJuIHhzDQoJCSAgID0+IG1ha2UgKGNhc2UgYw0KCQkJICAgICAgb2YgTk9ORSA9PiB0
cmFuc2Zlcg0KCQkJICAgICAgIHwgU09NRSBjID0+IEp1bXAge2RzdCA9IGMsIGFyZ3MgPSB4c30p
DQoJCSAgIHwgXyA9PiBtYWtlIHRyYW5zZmVyDQoJICAgICAgZW5kDQoJICBhbmQgcHJlZml4X2Rl
YyAoZnM6IEZ1bmMudCBsaXN0LCANCgkJCSAgYzogSnVtcC50IG9wdGlvbiwgDQoJCQkgIGRzOiBE
ZWMudCBsaXN0KSA6IERlYy50IGxpc3QNCgkgICAgPSBMaXN0LmZvbGQNCgkgICAgICAoTGlzdC5y
ZXYgZnMsDQoJICAgICAgIGRzLA0KCSAgICAgICBmbiAoZiwgZHMpDQoJICAgICAgICA9PiBsZXQN
CgkJICAgICB2YWwgRnVuY0RhdGEuVCB7cmVwbGFjZSwgcHJlZml4ZXMsIC4uLn0NCgkJICAgICAg
ID0gZ2V0RnVuY0RhdGEgZg0KCQkgICAgIHZhbCB7anVtcCwgYXJncywgYm9keX0gPSB2YWxPZiAo
IXJlcGxhY2UpDQoJCSAgICAgdmFsIGJvZHkgPSBwcmVmaXhfZXhwICghcHJlZml4ZXMsIGMsIHdh
bGtFeHAgKGYsIGJvZHksIGMpKQ0KCQkgICBpbg0KCQkgICAgIEZ1biB7bmFtZSA9IGp1bXAsIGFy
Z3MgPSBhcmdzLCBib2R5ID0gYm9keX0gOjogZHMNCgkJICAgZW5kKQ0KCSAgYW5kIHByZWZpeF9l
eHAgKGZzOiBGdW5jLnQgbGlzdCwNCgkJCSAgYzogSnVtcC50IG9wdGlvbiwNCgkJCSAgZTogRXhw
LnQpIDogRXhwLnQNCgkgICAgPSBsZXQNCgkJdmFsIHtkZWNzLCB0cmFuc2Zlcn0gPSBFeHAuZGVz
dCBlDQoJICAgICAgaW4NCgkJRXhwLm1ha2Uge2RlY3MgPSBwcmVmaXhfZGVjIChmcywgYywgZGVj
cyksDQoJCQkgIHRyYW5zZmVyID0gdHJhbnNmZXJ9DQoJICAgICAgZW5kDQoNCgkgIHZhbCBzaHJp
bmtFeHAgPSBzaHJpbmtFeHAgZ2xvYmFscw0KCSAgdmFsIGZ1bmN0aW9ucyANCgkgICAgPSBWZWN0
b3IuZnJvbUxpc3QNCgkgICAgICAoVmVjdG9yLmZvbGRyDQoJICAgICAgIChmdW5jdGlvbnMsIA0K
CQlbXSwgDQoJICAgICAgICBmbiAoe25hbWUgPSBmLCBhcmdzID0gZl9hcmdzLCANCgkJICAgICBi
b2R5ID0gZl9ib2R5LCByZXR1cm5zID0gZl9yZXR1cm5zfSwgDQoJCSAgICBmdW5jdGlvbnMpDQoJ
ICAgICAgICAgPT4gbGV0DQoJCSAgICAgIHZhbCBGdW5jRGF0YS5UIHtyY29udCwgcmVwbGFjZSwg
cHJlZml4ZXMsIC4uLn0gDQoJCQk9IGdldEZ1bmNEYXRhIGYNCgkJICAgIGluDQoJCSAgICAgIGNh
c2UgIXJlcGxhY2UNCgkJCW9mIE5PTkUNCgkJCSA9PiBpZiBSZXR1cm4uaXNVbmNhbGxlZCAoIXJj
b250KQ0KCQkJICAgICAgdGhlbiBmdW5jdGlvbnMNCgkJCSAgICAgIGVsc2UgbGV0DQoJCQkJICAg
ICB2YWwgZl9ib2R5IA0KCQkJCSAgICAgICA9IHByZWZpeF9leHAgKCFwcmVmaXhlcywgDQoJCQkJ
CQkgICAgIE5PTkUsIA0KCQkJCQkJICAgICB3YWxrRXhwIChmLCBmX2JvZHksIE5PTkUpKQ0KCQkJ
CSAgICAgdmFsIGZfYm9keSA9IHNocmlua0V4cCBmX2JvZHkNCgkJCQkgICBpbg0KCQkJCSAgICAg
e25hbWUgPSBmLA0KCQkJCSAgICAgIGFyZ3MgPSBmX2FyZ3MsDQoJCQkJICAgICAgYm9keSA9IGZf
Ym9keSwNCgkJCQkgICAgICByZXR1cm5zID0gZl9yZXR1cm5zfSA6OiBmdW5jdGlvbnMNCgkJCQkg
ICBlbmQNCgkJCSB8IF8gPT4gZnVuY3Rpb25zDQoJCSAgICBlbmQpKQ0KCSAgdmFsIHByb2dyYW0g
DQoJICAgID0gUHJvZ3JhbS5UIHtkYXRhdHlwZXMgPSBkYXRhdHlwZXMsDQoJCQkgZ2xvYmFscyA9
IGdsb2JhbHMsDQoJCQkgZnVuY3Rpb25zID0gZnVuY3Rpb25zLA0KCQkJIG1haW4gPSBtYWlufQ0K
CWluDQoJICBwcm9ncmFtDQoJZW5kDQogIGVuZA0KDQpzdHJ1Y3R1cmUgRGlhZ25vc3RpY3MgPQ0K
ICBzdHJ1Y3QNCiAgICBmdW4gZGlhZ25vc3RpY3Mge3Byb2dyYW0gYXMgUHJvZ3JhbS5UIHtmdW5j
dGlvbnMsIC4uLn0sDQoJCSAgICAgZ2V0RnVuY0RhdGE6IEZ1bmMudCAtPiBGdW5jRGF0YS50fQ0K
ICAgICAgPSBpZiB0cnVlDQoJICB0aGVuIGxldA0KCQkgZGF0YXR5cGUgeiA9IGRhdGF0eXBlIFJl
dHVybi50DQoNCgkJICgqIHByaW50IG91dCBlbnRpcmUgY3BzIElMICopDQoJCSB2YWwgY3BzID0g
ZmFsc2UNCgkJICgqIHByaW50IG91dCB0aGUgcmNvbnQgZm9yIGVhY2ggZnVuY3Rpb24gKikNCgkJ
IHZhbCBhbmFseXNpcyA9IGZhbHNlDQoJCSAoKiBwcmludCBvdXQgYWN0aW9uIChjb250aWZpYWJs
ZSwgcmVtb3ZlYWJsZSkgKikNCgkJIHZhbCBhY3Rpb24gPSBmYWxzZQ0KCQkgKCogcHJpbnQgb3V0
IHRoZSB0b3RhbHMgKikNCgkJIHZhbCB0b3RhbHMgPSB0cnVlDQoNCgkJIHZhbCBfDQoJCSAgID0g
aWYgY3BzDQoJCSAgICAgICB0aGVuIFByb2dyYW0ubGF5b3V0cw0KCQkJICAgIChwcm9ncmFtLCAN
CgkJCSAgICAgZm4gbCA9PiAoTGF5b3V0Lm91dHB1dCAobCwgT3V0LmVycm9yKQ0KCQkJCSAgICAg
IDsgT3V0Lm5ld2xpbmUgT3V0LmVycm9yKSkNCgkJICAgICAgIGVsc2UgKCkNCg0KCQkgdmFsIGNh
bGwgPSByZWYgMA0KCQkgdmFsIGNvbnQgPSByZWYgMA0KCQkgdmFsIGRvbSA9IHJlZiAwDQoJCSB2
YWwgY2FsbF9jb250ID0gcmVmIDANCgkJIHZhbCBjYWxsX2RvbSA9IHJlZiAwDQoJCSB2YWwgY29u
dF9kb20gPSByZWYgMA0KCQkgdmFsIGNhbGxfY29udF9kb20gPSByZWYgMA0KDQoJCSB2YWwgcmVt
X2NhbGwgPSByZWYgMA0KCQkgdmFsIHJlbV9jb250ID0gcmVmIDANCgkJIHZhbCByZW1fZG9tID0g
cmVmIDANCgkJIHZhbCByZW1fY2FsbF9jb250ID0gcmVmIDANCgkJIHZhbCByZW1fY2FsbF9kb20g
PSByZWYgMA0KCQkgdmFsIHJlbV9jb250X2RvbSA9IHJlZiAwDQoJCSB2YWwgcmVtX2NhbGxfY29u
dF9kb20gPSByZWYgMA0KCSAgICAgICBpbiANCgkJIFZlY3Rvci5mb3JlYWNoDQoJCSAoZnVuY3Rp
b25zLCBmbiB7bmFtZSwgLi4ufSA9Pg0KCQkgIGxldA0KCQkgICAgdmFsIEZ1bmNEYXRhLlQge3Jj
b250Q2FsbCwgcmNvbnRDb250LCByY29udERvbSwgLi4ufQ0KCQkgICAgICA9IGdldEZ1bmNEYXRh
IG5hbWUNCgkJICAgICAgDQoJCSAgICB2YWwgXyANCgkJICAgICAgPSBpZiBhbmFseXNpcw0KCQkJ
ICB0aGVuIHByaW50IChjb25jYXQgW0Z1bmMudG9TdHJpbmcgbmFtZSwNCgkJCQkJICAgICAgIjo6
IiwNCgkJCQkJICAgICAgIiByY29udENhbGw6ICIsDQoJCQkJCSAgICAgIFJldHVybi50b1N0cmlu
ZyAoIXJjb250Q2FsbCksDQoJCQkJCSAgICAgICIgcmNvbnRDb250OiAiLA0KCQkJCQkgICAgICBS
ZXR1cm4udG9TdHJpbmcgKCFyY29udENvbnQpLA0KCQkJCQkgICAgICAiIHJjb250RG9tOiAiLA0K
CQkJCQkgICAgICBSZXR1cm4udG9TdHJpbmcgKCFyY29udERvbSksDQoJCQkJCSAgICAgICJcbiJd
KQ0KCQkJICBlbHNlICgpDQoJCQkgICAgDQoJCSAgICBmdW4gZG9pdCAociwgcykgDQoJCSAgICAg
ID0gKEludC5pbmMgcg0KCQkJIDsgaWYgYWN0aW9uDQoJCQkgICAgIHRoZW4gcHJpbnQgKGNvbmNh
dCBbcywgDQoJCQkJCQkgIiAiLA0KCQkJCQkJIEZ1bmMudG9TdHJpbmcgbmFtZSwgDQoJCQkJCQkg
IlxuIl0pDQoJCQkgICAgIGVsc2UgKCkpDQoJCSAgICAgIA0KCQkgICAgZnVuIGNoZWNrIHJjb250
ID0gY2FzZSAhcmNvbnQNCgkJCQkJb2YgVW5jYWxsZWQgPT4gKGZhbHNlLCB0cnVlKQ0KCQkJCQkg
fCBGdW5jTGFiZWwgXyA9PiAodHJ1ZSwgZmFsc2UpDQoJCQkJCSB8IEp1bXBMYWJlbCBfID0+ICh0
cnVlLCBmYWxzZSkNCgkJCQkJIHwgVW5rbm93biA9PiAoZmFsc2UsIGZhbHNlKQ0KCQkJCQkNCgkJ
ICAgIHZhbCAoY2FuX2NhbGwsIGNhbl9yZW1fY2FsbCkgPSBjaGVjayByY29udENhbGwNCgkJICAg
IHZhbCAoY2FuX2NvbnQsIGNhbl9yZW1fY29udCkgPSBjaGVjayByY29udENvbnQNCgkJICAgIHZh
bCAoY2FuX2RvbSwgY2FuX3JlbV9kb20pID0gY2hlY2sgcmNvbnREb20NCgkJICBpbiANCgkJICAg
IGNhc2UgKGNhbl9jYWxsLCBjYW5fY29udCwgY2FuX2RvbSkNCgkJICAgICAgb2YgKHRydWUsIHRy
dWUsIHRydWUpDQoJCSAgICAgICA9PiBkb2l0IChjYWxsX2NvbnRfZG9tLCAiY2FsbF9jb250X2Rv
bSIpDQoJCSAgICAgICB8ICh0cnVlLCB0cnVlLCBmYWxzZSkNCgkJICAgICAgID0+IGRvaXQgKGNh
bGxfY29udCwgImNhbGxfY29udCIpDQoJCSAgICAgICB8ICh0cnVlLCBmYWxzZSwgdHJ1ZSkNCgkJ
ICAgICAgID0+IGRvaXQgKGNhbGxfZG9tLCAiY2FsbF9kb20iKQ0KCQkgICAgICAgfCAodHJ1ZSwg
ZmFsc2UsIGZhbHNlKQ0KCQkgICAgICAgPT4gZG9pdCAoY2FsbCwgImNhbGwiKQ0KCQkgICAgICAg
fCAoZmFsc2UsIHRydWUsIHRydWUpDQoJCSAgICAgICA9PiBkb2l0IChjb250X2RvbSwgImNvbnRf
ZG9tIikNCgkJICAgICAgIHwgKGZhbHNlLCB0cnVlLCBmYWxzZSkNCgkJICAgICAgID0+IGRvaXQg
KGNvbnQsICJjb250IikNCgkJICAgICAgIHwgKGZhbHNlLCBmYWxzZSwgdHJ1ZSkNCgkJICAgICAg
ID0+IGRvaXQgKGRvbSwgImRvbSIpDQoJCSAgICAgICB8IChmYWxzZSwgZmFsc2UsIGZhbHNlKQ0K
CQkgICAgICAgPT4gKCk7DQoJCSAgICBjYXNlIChjYW5fcmVtX2NhbGwsIGNhbl9yZW1fY29udCwg
Y2FuX3JlbV9kb20pDQoJCSAgICAgIG9mICh0cnVlLCB0cnVlLCB0cnVlKQ0KCQkgICAgICAgPT4g
ZG9pdCAocmVtX2NhbGxfY29udF9kb20sICJyZW1fY2FsbF9jb250X2RvbSIpDQoJCSAgICAgICB8
ICh0cnVlLCB0cnVlLCBmYWxzZSkNCgkJICAgICAgID0+IGRvaXQgKHJlbV9jYWxsX2NvbnQsICJy
ZW1fY2FsbF9jb250IikNCgkJICAgICAgIHwgKHRydWUsIGZhbHNlLCB0cnVlKQ0KCQkgICAgICAg
PT4gZG9pdCAocmVtX2NhbGxfZG9tLCAicmVtX2NhbGxfZG9tIikNCgkJICAgICAgIHwgKHRydWUs
IGZhbHNlLCBmYWxzZSkNCgkJICAgICAgID0+IGRvaXQgKHJlbV9jYWxsLCAicmVtX2NhbGwiKQ0K
CQkgICAgICAgfCAoZmFsc2UsIHRydWUsIHRydWUpDQoJCSAgICAgICA9PiBkb2l0IChyZW1fY29u
dF9kb20sICJyZW1fY29udF9kb20iKQ0KCQkgICAgICAgfCAoZmFsc2UsIHRydWUsIGZhbHNlKQ0K
CQkgICAgICAgPT4gZG9pdCAocmVtX2NvbnQsICJyZW1fY29udCIpDQoJCSAgICAgICB8IChmYWxz
ZSwgZmFsc2UsIHRydWUpDQoJCSAgICAgICA9PiBkb2l0IChyZW1fZG9tLCAicmVtX2RvbSIpDQoJ
CSAgICAgICB8IChmYWxzZSwgZmFsc2UsIGZhbHNlKQ0KCQkgICAgICAgPT4gKCkNCgkJICBlbmQp
Ow0KCQkgaWYgdG90YWxzDQoJCSAgIHRoZW4gcHJpbnQgKGNvbmNhdA0KCQkJICAgICAgIFsiZnVu
Y3Rpb25zOiAiLA0KCQkJCUludC50b1N0cmluZyAoVmVjdG9yLmxlbmd0aCBmdW5jdGlvbnMpLA0K
CQkJCSJcbiIsDQoJCQkJIiAgY2FsbF9jb250X2RvbTogIiwNCgkJCQlJbnQudG9TdHJpbmcgKCFj
YWxsX2NvbnRfZG9tKSwNCgkJCQkiICBjYWxsX2NvbnQ6ICIsDQoJCQkJSW50LnRvU3RyaW5nICgh
Y2FsbF9jb250KSwNCgkJCQkiXG4iLA0KCQkJCSIgIGNhbGxfZG9tOiAiLA0KCQkJCUludC50b1N0
cmluZyAoIWNhbGxfZG9tKSwNCgkJCQkiICBjb250X2RvbTogIiwNCgkJCQlJbnQudG9TdHJpbmcg
KCFjb250X2RvbSksDQoJCQkJIlxuIiwNCgkJCQkiICBjYWxsOiAiLA0KCQkJCUludC50b1N0cmlu
ZyAoIWNhbGwpLA0KCQkJCSIgIGNvbnQ6ICIsDQoJCQkJSW50LnRvU3RyaW5nICghY29udCksDQoJ
CQkJIiAgZG9tOiAiLA0KCQkJCUludC50b1N0cmluZyAoIWRvbSksDQoJCQkJIlxuIiwNCgkJCQki
ICByZW1fY2FsbF9jb250X2RvbTogIiwNCgkJCQlJbnQudG9TdHJpbmcgKCFyZW1fY2FsbF9jb250
X2RvbSksDQoJCQkJIiAgcmVtX2NhbGxfY29udDogIiwNCgkJCQlJbnQudG9TdHJpbmcgKCFyZW1f
Y2FsbF9jb250KSwNCgkJCQkiXG4iLA0KCQkJCSIgIHJlbV9jYWxsX2RvbTogIiwNCgkJCQlJbnQu
dG9TdHJpbmcgKCFyZW1fY2FsbF9kb20pLA0KCQkJCSIgIHJlbV9jb250X2RvbTogIiwNCgkJCQlJ
bnQudG9TdHJpbmcgKCFyZW1fY29udF9kb20pLA0KCQkJCSJcbiIsDQoJCQkJIiAgcmVtX2NhbGw6
ICIsDQoJCQkJSW50LnRvU3RyaW5nICghcmVtX2NhbGwpLA0KCQkJCSIgIHJlbV9jb250OiAiLA0K
CQkJCUludC50b1N0cmluZyAoIXJlbV9jb250KSwNCgkJCQkiICByZW1fZG9tOiAiLA0KCQkJCUlu
dC50b1N0cmluZyAoIXJlbV9kb20pLA0KCQkJCSJcbiJdKQ0KCQkgICBlbHNlICgpDQoJICAgICAg
IGVuZA0KCSAgZWxzZSAoKQ0KICBlbmQNCg0KZnVuIGNvbnRpZnkgKHByb2dyYW0gYXMgUHJvZ3Jh
bS5UIHtmdW5jdGlvbnMsIC4uLn0pDQogID0gbGV0DQogICAgICB2YWwge2dldCA9IGdldEZ1bmNE
YXRhIDogRnVuYy50IC0+IEZ1bmNEYXRhLnR9DQoJPSBQcm9wZXJ0eS5nZXQgKEZ1bmMucGxpc3Qs
DQoJCQlQcm9wZXJ0eS5pbml0RnVuDQoJCQkoZm4gXyA9PiBGdW5jRGF0YS5uZXcgKCkpKQ0KICAg
ICAgdmFsIHtnZXQgPSBnZXRKdW1wRGF0YSA6IEp1bXAudCAtPiBKdW1wRGF0YS50fQ0KCT0gUHJv
cGVydHkuZ2V0IChKdW1wLnBsaXN0LA0KCQkJUHJvcGVydHkuaW5pdEZ1bg0KCQkJKGZuIF8gPT4g
SnVtcERhdGEubmV3ICgpKSkNCg0KICAgICAgdmFsIF8gPSBJbml0UmVhY2hDYWxsZXJzQ2FsbGVl
cy5pbml0UmVhY2hDYWxsZXJzQ2FsbGVlcyANCgkgICAgICB7cHJvZ3JhbSA9IHByb2dyYW0sDQoJ
ICAgICAgIGdldEZ1bmNEYXRhID0gZ2V0RnVuY0RhdGF9DQogICAgICB2YWwgXyA9IEFuYWx5emVD
YWxsLmFuYWx5emVDYWxsDQoJICAgICAge3Byb2dyYW0gPSBwcm9ncmFtLA0KCSAgICAgICBnZXRG
dW5jRGF0YSA9IGdldEZ1bmNEYXRhfQ0KICAgICAgdmFsIF8gPSBBbmFseXplQ29udC5hbmFseXpl
Q29udA0KCSAgICAgIHtwcm9ncmFtID0gcHJvZ3JhbSwNCgkgICAgICAgZ2V0RnVuY0RhdGEgPSBn
ZXRGdW5jRGF0YX0NCiAgICAgIHZhbCBfID0gQW5hbHl6ZURvbS5hbmFseXplRG9tIA0KCSAgICAg
IHtwcm9ncmFtID0gcHJvZ3JhbSwNCgkgICAgICAgZ2V0RnVuY0RhdGEgPSBnZXRGdW5jRGF0YSwN
CgkgICAgICAgZ2V0SnVtcERhdGEgPSBnZXRKdW1wRGF0YX0NCg0KICAgICAgdmFsIF8gPSBEaWFn
bm9zdGljcy5kaWFnbm9zdGljcyB7cHJvZ3JhbSA9IHByb2dyYW0sDQoJCQkJICAgICAgIGdldEZ1
bmNEYXRhID0gZ2V0RnVuY0RhdGF9DQoNCiAgICAgIGRhdGF0eXBlIHogPSBkYXRhdHlwZSBSZXR1
cm4udA0KICAgICAgdmFsIF8NCgk9IFZlY3Rvci5mb3JlYWNoDQoJICAoZnVuY3Rpb25zLA0KCSAg
IGZuIHtuYW1lID0gZiwgLi4ufQ0KCSAgICA9PiBsZXQNCgkJIHZhbCBGdW5jRGF0YS5UIHtyY29u
dCwgcmNvbnRDYWxsLCByY29udENvbnQsIHJjb250RG9tLCAuLi59DQoJCSAgID0gZ2V0RnVuY0Rh
dGEgZg0KCSAgICAgICBpbg0KCQkgY2FzZSAhQ29udHJvbC5jb250aWZ5U3RyYXRlZ3kNCgkJICAg
b2YgQ29udHJvbC5Ob25lID0+IHJjb250IDo9IFVua25vd24NCgkJICAgIHwgQ29udHJvbC5DYWxs
ID0+IHJjb250IDo9ICFyY29udENhbGwNCgkJICAgIHwgQ29udHJvbC5Db250ID0+IHJjb250IDo9
ICFyY29udENvbnQNCgkJICAgIHwgQ29udHJvbC5DYWxsQ29udA0KCQkgICAgPT4gKGNhc2UgKCFy
Y29udENhbGwsICFyY29udENvbnQpDQoJCQkgIG9mIChVbmNhbGxlZCwgXykgPT4gcmNvbnQgOj0g
VW5jYWxsZWQNCgkJCSAgIHwgKF8sIFVuY2FsbGVkKSA9PiByY29udCA6PSBVbmNhbGxlZA0KCQkJ
ICAgfCAoVW5rbm93biwgcikgPT4gcmNvbnQgOj0gcg0KCQkJICAgfCAociwgVW5rbm93bikgPT4g
cmNvbnQgOj0gcg0KCQkJICAgfCAoSnVtcExhYmVsIGosIEp1bXBMYWJlbCBqJykNCgkJCSAgID0+
IGlmIEp1bXAuZXF1YWxzIChqLCBqJykNCgkJCQl0aGVuIHJjb250IDo9IEp1bXBMYWJlbCBqDQoJ
CQkJZWxzZSBFcnJvci5idWcgIkNhbGxDb250OiBpbmNvbXBhdGlibGUiDQoJCQkgICB8IChGdW5j
TGFiZWwgZiwgRnVuY0xhYmVsIGYnKQ0KCQkJICAgPT4gaWYgRnVuYy5lcXVhbHMgKGYsIGYnKQ0K
CQkJCXRoZW4gcmNvbnQgOj0gRnVuY0xhYmVsIGYNCgkJCQllbHNlIEVycm9yLmJ1ZyAiQ2FsbENv
bnQ6IGluY29tcGF0aWJsZSINCgkJCSAgIHwgKEp1bXBMYWJlbCBqLCBGdW5jTGFiZWwgZikNCgkJ
CSAgID0+IHJjb250IDo9IEZ1bmNMYWJlbCBmDQoJCQkgICB8IChGdW5jTGFiZWwgZiwgSnVtcExh
YmVsIGopDQoJCQkgICA9PiByY29udCA6PSBGdW5jTGFiZWwgZikNCgkJICAgIHwgQ29udHJvbC5E
b20gPT4gcmNvbnQgOj0gIXJjb250RG9tDQoJICAgICAgIGVuZCkNCg0KICAgICAgdmFsIHByb2dy
YW0gPSBUcmFuc2Zvcm0udHJhbnNmb3JtIHtwcm9ncmFtID0gcHJvZ3JhbSwNCgkJCQkJIGdldEZ1
bmNEYXRhID0gZ2V0RnVuY0RhdGEsDQoJCQkJCSBnZXRKdW1wRGF0YSA9IGdldEp1bXBEYXRhfQ0K
DQogICAgICB2YWwgXyA9IFByb2dyYW0uY2xlYXIgcHJvZ3JhbQ0KICAgIGluDQogICAgICBwcm9n
cmFtDQogICAgZW5kDQplbmQNCg0K

---559023410-342241519-982808650=:18617--