IyEvdXNyL2Jpbi9lbnYgcHl0aG9uDQojDQojIFRoaXMgcHJvZ3JhbSBjb21wdXRlcyBlbnRyb3B5
IGluIGEgdmVjdG9yDQojIG1pY2hhZWwgeXVlbiBhbmQgbHVuYSBkYWkNCmltcG9ydCBtYXRoDQoN
Cg0KZGVmIGVudHJvcHkodmVjKToNCiAgICBhbnN3ZXJjb3VudCA9IHt9ICMgZW1wdHkgZGljdGlv
bmFyeQ0KICAgIHRvdGxlbiA9IGxlbih2ZWMpDQogICAgZm9yIHggaW4gdmVjOg0KICAgICAgICBp
ZiB4IGluIGFuc3dlcmNvdW50Og0KICAgICAgICAgICAgYW5zd2VyY291bnRbeF0gKz0gMS4wDQog
ICAgICAgIGVsc2U6IA0KICAgICAgICAgICAgYW5zd2VyY291bnRbeF0gPSAxLjANCiAgICBlbnQg
PSAwDQogICAgZm9yIHggaW4gYW5zd2VyY291bnQ6DQogICAgICAgIHByb2IgPSAoYW5zd2VyY291
bnRbeF0pL3RvdGxlbg0KICAgICAgICBlbnQgKz0gLSBwcm9iICogbWF0aC5sb2cocHJvYiwyKQ0K
ICAgIHJldHVybiBlbnQNCg0KIyBjb21wdXRlcyB0aGUgZW50cm9weSBvZiB2ZWMyIGRlcGVuZGlu
ZyBvbiB2ZWMxDQpkZWYgY29uZGVudHJvcHkodmVjMSwgdmVjMik6DQogICAgaWYgbGVuKHZlYzEp
ICE9IGxlbih2ZWMyKTogcmV0dXJuIC0xICMgZXJyb3INCiAgICB0b3RsZW4gPSBsZW4odmVjMSkN
CiAgICBhbnN3ZXJ2ZWMgPSB7fQ0KICAgIGkgPSAwDQogICAgd2hpbGUgaSA8IHRvdGxlbjoNCiAg
ICAgICAgeCA9IHZlYzFbaV0NCiAgICAgICAgaWYgeCBpbiBhbnN3ZXJ2ZWM6DQogICAgICAgICAg
ICBhbnN3ZXJ2ZWNbeF0uYXBwZW5kKHZlYzJbaV0pDQogICAgICAgIGVsc2U6DQogICAgICAgICAg
ICBhbnN3ZXJ2ZWNbeF0gPSBbXQ0KICAgICAgICAgICAgYW5zd2VydmVjW3hdLmFwcGVuZCh2ZWMy
W2ldKQ0KICAgICAgICBpKz0gMQ0KICAgICMgcHJpbnQgIkRlYnVnZ2luZyBhbnN3ZXJ2ZWM6ICIs
IGFuc3dlcnZlYw0KICAgIGNvbmRlbnQgPSAwDQogICAgZm9yIHggaW4gYW5zd2VydmVjOg0KICAg
ICAgICB3ZWlnaHQgPSAoMC4wKyBsZW4oYW5zd2VydmVjW3hdKSkgLyB0b3RsZW4gDQogICAgICAg
ICAgICAgICAgCSMgY29uZCBlbnRyb3B5IHdlaWdodCBvZiB4DQogICAgICAgIAkjIHByaW50ICgi
RGVidWdnaW5nIGxldHRlcjogIiksIHgsICgiIGhhcyB3ZWlnaHQ6ICIpLCB3ZWlnaHQNCiAgICAg
ICAgY29uZGVudCArPSB3ZWlnaHQgKiBlbnRyb3B5KGFuc3dlcnZlY1t4XSkNCiAgICByZXR1cm4g
Y29uZGVudA0KDQojLS0tLS0tLS0tLS1EYXRhLS0tLS0tLS0tLS0tLS0tDQoNCmRlZiBmaWxlaW4o
bmFtZSk6DQogICBmaWxlID0gb3BlbihuYW1lLCJyIikNCiAgIGQgPSBmaWxlLnJlYWRsaW5lcygp
DQogICBmaWxlLmNsb3NlKCkNCiAgIGkgPSAwDQogICBmb3IgeCBpbiBkOg0KICAgICAgIGlmIHhb
bGVuKHgpLTE6XSA9PSAiXG4iOg0KICAgICAgICAgICBkW2ldID0geFs6bGVuKHgpLTFdDQogICAg
ICAgaWYgaSA9PSAwOg0KICAgICAgICAgICBkW2ldID0gZFtpXS5zcGxpdCgiICIpDQogICAgICAg
ZWxzZToNCiAgICAgICAgICAgZFtpXSA9IGRbaV0uc3BsaXQoIiAgIikNCiAgICAgICBpICs9IDEN
CiAgIGxlbmd0aCA9IGxlbihkKS0xDQogICBpID0gMA0KICAgcGFyc2VkID0ge30NCiAgIGZvciB4
IGluIGQ6DQogICAgICAgdyA9IDANCiAgICAgICBmb3IgeiBpbiB4Og0KICAgICAgICAgICBpZiBp
ID09IDA6DQogICAgICAgICAgICAgICBwYXJzZWRbel09W10NCiAgICAgICAgICAgZWxzZToNCiAg
ICAgICAgICAgICAgIHRvcGljcyA9IGRbMF0NCiAgICAgICAgICAgICAgIHBhcnNlZFt0b3BpY3Nb
d11dLmFwcGVuZCh6KQ0KICAgICAgICAgICAgICAgdyArPTENCiAgICAgICBpICs9IDENCiAgIHJl
dHVybiBwYXJzZWQNCg0KbmFtZSA9ICJNYWtlQVRyZWUucHkiDQpkPXt9DQpkPWZpbGVpbihuYW1l
KQ0KDQp0PWRbInRhcmdldCJdWzA6XSAjc2F2ZSB0YXJnZXRzIGluZm8gc29tZXdoZXJlIGVsc2UN
CmRlbCBkWyJ0YXJnZXQiXSNyZW1vdmUgdGFyZ2V0IGZyb20gZGF0YQ0KDQoNCmluZGVudCA9IDAg
I3RvIGRlY2xhcmUNCmRlZiBtYWtlYXRyZWUoZCx0LHRlbXBzZW50ZW5jZSk6DQogIGdsb2JhbCBp
bmRlbnQjdG8gbW9kaWZ5IGluZGVudA0KICBpbmRlbnQrPTEjdG8gaW5jcmVhc2Ugc3BhY2luZw0K
ICBkYXRhID0gW10jdG8gYWRkIGFsbCB0aGUgaW5mb3JtYXRpb24gdW5kZXIgZWFjaCBEDQogIGRh
dGEuYXBwZW5kKGRbIkQxIl0pDQogIGRhdGEuYXBwZW5kKGRbIkQyIl0pDQogIGRhdGEuYXBwZW5k
KGRbIkQzIl0pDQogIGRhdGEuYXBwZW5kKGRbIkQ0Il0pDQoNCiAgZGF0YV9lbnQgPSBbXSNob2xk
cyBjb25kZW50IG9mIGFsbCBkJ3MNCiAgYmVzdCA9IDEjdG8gY29tcGFyZSB0byBmaW5kIGxvd2Vz
dCBlbnRyb3B5DQogIGJlc3RfZCA9IFtdI2RhdGEgZnJvbSB0aGF0IGQNCiAgZm9yIHggaW4gcmFu
Z2UoMCxsZW4oZGF0YSkpOiNmaW5kIHRoZSAgbG93ZWVzdCBlbnRyb3B5IA0KICAgICAgZW50ID0g
Y29uZGVudHJvcHkoZGF0YVt4XSx0KQ0KICAgICAgZGF0YV9lbnQuYXBwZW5kKGVudCkNCiAgZm9y
IHkgaW4gZGF0YV9lbnQ6DQogICAgICBpZiB5IDwgYmVzdDoNCiAgICAgICAgICBiZXN0ID0geQ0K
ICBmb3IgeCBpbiByYW5nZSgwLGxlbihkYXRhKSk6DQogICAgICBlbnQgPSBjb25kZW50cm9weShk
YXRhW3hdLHQpDQogICAgICBpZiBlbnQ9PWJlc3Q6DQogICAgICAgIGJlc3RfZD1kYXRhW3hdI3Nl
bmRzIGRhdGEgb2YgbG93ZXN0IGQgdG8gYmVzdF9kDQogIGJsZWg9IiIjbmFtZSBvZiBiZXN0X2QN
Cg0KICBmb3IgeCBpbiBkOg0KICAgIGlmIGRbeF09PWJlc3RfZDoNCiAgICAgIGJsZWg9eCNuYW1l
cyBibGVoIGQxLDIsMyw0DQogICNjcmVhdGUgYmFza2V0cw0KICB0MiA9IHt9I2ZvciBzZWNvbmQg
bGV2ZWwNCiAgbmV3ZD17fSNmb3IgcmVjdXJzaXZlIHB1cnBvc2VzDQogIA0KICBmb3IgeCBpbiBk
OiNjcmVhdGUgdGhlIGxldmVsIG9mIERzDQogICAgbmV3ZFt4XT1bXQ0KICBmb3IgeCBpbiBiZXN0
X2Q6DQogICAgdDJbeF09W10jZG8gc2FtZSBmb3IgdCwgc2VwYXJhdGUgMCwxcw0KICAjcHV0IHN0
dWZmcyBpbnRvIHRoZSBiYXNrZXQNCiAgZm9yIHggaW4gYmVzdF9kOiANCiAgICB0Mlt4XS5hcHBl
bmQodFswXSkjcHV0IGZpcnN0IGVsbWVudCBvZiB0IGludG8gZWl0aGVyIGJhc2tldA0KICAgIHQ9
dFsxOl0jdGhyb3cgYXdheSB0aGUgZmlyc3QgZWxlbWVudCBpbiB0aGUgdA0KICBuZXd0PVtdDQog
ICN0MiBpcyBhIGRpY3QNCiAgI3QyID0ge0E6W0EsQixDLERELERdLEI6W0EsQixBLEIsQyxEXSxD
OltBLEQsQyxELEQsRF19DQogIGZvciB4IGluIHQyOiN4IGNhbiBwb3NzaWJseSBlcXVhbCB0byBB
IEIgQyBEDQogICAgaWYgZW50cm9weSh0Mlt4XSk9PTA6I2hlcmUgaXMgb25lIG9mIHRoZSBiYXNl
IGNhc2UgLSBzZWUgaWYgYWxsIHNhbWUNCiAgICAgIHByaW50IHRlbXBzZW50ZW5jZSsiJXM6ICIg
JWJsZWgsIHggI3ByaW50cyB3aXRoIHNwYWNpbmcNCiAgICAgIHByaW50IHRlbXBzZW50ZW5jZSt0
Mlt4XVswXSwiaGFwcGVucyAlcyB0aW1lcyIgJWxlbih0Mlt4XSkNCiAgICAgIHByaW50IHRlbXBz
ZW50ZW5jZSsidGhlIGJyYW5jaCBlbmRzIg0KICB0ZW1wZCA9IHt9IA0KICBmb3IgeCBpbiBkOiN0
byBtYWtlIGEgY29weSBvZiB0aGUgZGF0YQ0KICAgICAgdGVtcGRbeF0gPSBkW3hdDQogIGZvciB4
IGluIHQyOg0KICAgIGlmIGVudHJvcHkodDJbeF0pICE9MDogI2hlcmUgZ29lcyB0byBuZXh0IGxl
dmVsDQogICAgICBwcmludCAiJXM6ICIgJWJsZWgsIHgNCiAgICAgIHRlbXBzZW50ZW5jZT0iIiNh
c3NpZ24gYXMgZW1wdHkgc3RyaW5nDQogICAgICBmb3IgaSBpbiByYW5nZSgwLGluZGVudCk6I3Rv
IHNlZSBob3cgbWFueSBpbmRlbnRzIHRvIHB1dA0KICAgICAgICB0ZW1wc2VudGVuY2UrPSIgICAg
IiAgIyBhZGQgdGhpcyBlYWNoIHRpbWUNCiAgICAgIG5ld3Q9dDJbeF0gI3BpY2tzIG9uZSBzdGls
bCB3aXRoIGRpc29yZGVyDQogICAgICAjaGVyZSB3ZSBoYXZlIHRoZSBuZXcgZA0KICAgICAgZm9y
IHAgaW4gdGVtcGQ6ICMgZmlsbCBpbiB3aXRoIG5ldyBkYXRhDQogICAgICAgICAgZFtwXT10ZW1w
ZFtwXQ0KICAgICAgZm9yIGogaW4gZDogIyBnaXZlcyBuZXcgY2xlYW4gbGlzdA0KICAgICAgICAg
IG5ld2Rbal09W10NCiAgICAgIGZvciBqIGluIGQ6I2ogY2FuIGJlIEQxLUQ0IG5hbWUNCiAgICAg
ICAgZm9yIGsgaW4gYmVzdF9kOiNrIGNhbiBwb3NzaWJseSBlcXVhbCB0byBBIEIgQyBEDQogICAg
ICAgICAgaWYgaz09eDogI2Nob29zZXMgdGhlIGJhc2tldA0KICAgICAgICAgICAgbmV3ZFtqXS5h
cHBlbmQoZFtqXVswXSkjc2F2ZXMgdGhlIGxldHRlciB0aGF0IG1hdGNoZXMgdW5maW5pc2hlZCBh
L2IvYw0KICAgICAgICAgIGRbal09ZFtqXVsxOl0jIHRocm93cyBhd2F5IHJlc3QNCiAgICAgIG1h
a2VhdHJlZShuZXdkLG5ld3QsdGVtcHNlbnRlbmNlKSNzZW5kcyBpbmZvcm1hdGlvbiBiYWNrIHRo
cm91Z2gNCiAgICANCg0KbWFrZWF0cmVlKGQsdCwiIikNCg==
