ZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBwcmludF9mdW5jdGlvbiAjSSBhZGRlZCB0aGlzIGJlY2F1
c2UgaXQgbWFkZSBteSBsaWZlIGEgbG90IGVhc2llciB3aGVuDQojdGhlICdlbmQgPSAuLi4nIGZ1
bmN0aW9uIHdhcyBhZGRlZCBpbiB0aGUgcHJpbnQgZnVuY3Rpb24gdGhhdCBJIGRpZG4ndCBrbm93
IGEgbmljZSB3YXkgdG8gZG8NCiNpbiBQeXRob24gMi43LCBzbyBwcmludCBzdGF0ZW1lbnRzIG11
c3QgYWxsIGhhdmUgYnJhY2tldHMgaW4gdGhpcyB2ZXJzaW9uLCBubyBuZWVkIGluIHRoZSBzZXJ2
ZXIgdGhvdWdoDQojIEVjaG8gY2xpZW50IHByb2dyYW0NCmltcG9ydCBzb2NrZXQNCmltcG9ydCBy
YW5kb20NCmltcG9ydCB0aW1lDQppbXBvcnQgb3MNCmltcG9ydCBwbGF0Zm9ybQ0KDQoNCkhPU1Qg
PSAnbG9jYWxob3N0JyAgICMgVGhlIHJlbW90ZSBob3N0DQoNCiMgdG8gYWN0IGFzIGEgY2xpZW50
DQpQT1JUID0gNTAwMTggICAgICAgICAgICAgICMgVGhlIHNlcnZlciBwb3J0DQpzID0gc29ja2V0
LnNvY2tldChzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfU1RSRUFNKQ0Kcy5jb25uZWN0KChI
T1NULCBQT1JUKSkNCg0KDQojIEFQUExJQ0FUSU9ODQoNCnBhcnRuZXJpZCA9IC0xICMgbm8gcGFy
dG5lcg0KbnVtYmVyYmlkZGVycyA9IDAgIyB3aWxsIGJlIGdpdmVuIGJ5IHNlcnZlcg0KDQojIERP
IFNPTUVUSElORyBIRVJFDQojIHlvdSBuZWVkIHRvIGNoYW5nZSB0aGlzIHRvIGRvIHNvbWV0aGlu
ZyBtdWNoIG1vcmUgY2xldmVyDQpkZWYgZGV0ZXJtaW5lYmlkKGl0ZW1zaW5hdWN0aW9uLCBwYXJ0
bmVyaWQsIG51bWJlcmJpZGRlcnMsIHdpbm5lcmFycmF5LCB3aW5uZXJhbW91bnQpOg0KICAjaWYg
eW91IGhhdmUgbm8gbW9uZXkgYXV0b21hdGljYWxseSBiaWQgMA0KICBpZiBteVR5cGVzWydtb25l
eSddID09IDA6DQogICAgcmV0dXJuIDANCiAgI090aGVyd2lzZSBpbnB1dCBiaWQgYW5kIGNoZWNr
IHRoYXQgaXQncyBhIG51bWJlcg0KICBvdXRwdXQgPSBpbnB1dCgiSW5wdXQgYmlkOiAiKS5zdHJp
cCgpDQogIHdoaWxlKG5vdCAobGVuKG91dHB1dCkgPiAwIGFuZCBvdXRwdXQuaXNkaWdpdCgpKSk6
DQogICAgb3V0cHV0ID0gaW5wdXQoIklucHV0IGJpZDogIikNCiAgcmV0dXJuIGludChvdXRwdXQp
DQoNCiMgREFUQQ0KDQpteWJpZGRlcmlkID1pbnB1dCgiSW5wdXQgdGVhbSAvIHBsYXllciBuYW1l
IDogIikuc3RyaXAoKSAgIyB0aGlzIGlzIHRoZSBvbmx5IHRoaW5nIHRoYXQgZGlzdGluZ3Vpc2hl
cyB0aGUgY2xpZW50cyANCndoaWxlIGxlbihteWJpZGRlcmlkKSA9PSAwIG9yICcgJyBpbiBteWJp
ZGRlcmlkOg0KICBteWJpZGRlcmlkID1pbnB1dCgiWW91IGlucHV0IGFuIGVtcHR5IHN0cmluZyBv
ciBpbmNsdWRlZCBhIHNwYWNlIGluIHlvdXIgbmFtZSB3aGljaCBpcyBub3QgYWxsb3dlZCAoXyBv
ciAvIGFyZSBhbGwgYWxsb3dlZClcbiBmb3IgZXhhbXBsZSBFbWlsX0FuZF9OaXNjaGFsIGlzIG9r
YXlcbklucHV0IHRlYW0gLyBwbGF5ZXIgbmFtZTogIikuc3RyaXAoKQ0KDQptb25leWxlZnQgPSAx
MDAgIyBzaG91bGQgY2hhbmdlIG92ZXIgdGltZQ0Kd2lubmVyYXJyYXkgPSBbXSAjIHdobyB3b24g
ZWFjaCByb3VuZA0Kd2lubmVyYW1vdW50ID0gW10gIyBob3cgbXVjaCB0aGV5IHBhaWQNCg0KaXRl
bXNpbmF1Y3Rpb24gPSBbXQ0KbXlUeXBlcyA9IHsnUGljYXNzbyc6IDAsICdSZW1icmFuZHQnOiAw
LCAnVmFuX0dvZ2gnOiAwLCAnRGFfVmluY2knOiAwLCAnbW9uZXknOiBtb25leWxlZnR9DQoNCiMg
RVhFQ1VUSU9ODQoNCiMgZ2V0IGxpc3Qgb2YgaXRlbXMgYW5kIHR5cGVzDQpnZXRsaXN0ZmxhZyA9
IDENCg0Kcy5zZW5kKG15YmlkZGVyaWQuZW5jb2RlKCd1dGYtOCcpKQ0Kd2hpbGUoZ2V0bGlzdGZs
YWcgPT0gMSk6DQogICMgcHJpbnQgIkhhdmUgc2VudCBkYXRhIGZyb20gIiwgc3RyKG15YmlkZGVy
aWQpDQogIGRhdGEgPSBzLnJlY3YoNTAyNCkNCiAgeCA9IGRhdGEuZGVjb2RlKCd1dGYtOCcpLnNw
bGl0KCIgIikNCiAgIyBwcmludCAiSGF2ZSByZWNlaXZlZCByZXNwb25zZSBhdCAiLCBzdHIobXli
aWRkZXJpZCksICIgb2Y6ICIsICcgJy5qb2luKHgpDQogICMgUmVjZWl2ZXMgZmlyc3QgaG93IG1h
bnkgcGxheWVycyBhcmUgaW4gdGhlIGdhbWUgYW5kIHRoZW4gYWxsIDIwMCBpdGVtcyBpbiBhdWN0
aW9uDQogIGlmKHhbMF0gIT0gIk5vdCIgYW5kIGxlbihkYXRhKSAhPSAwKToNCiAgICBnZXRsaXN0
ZmxhZyA9IDANCiAgICBudW1iaWRkZXJzID0gaW50KHhbMF0pDQogICAgaXRlbXNpbmF1Y3Rpb24g
PSB4WzE6XQ0KICAgIGZvciBpbmRleCBpbiByYW5nZShsZW4oaXRlbXNpbmF1Y3Rpb24pLTEsIC0x
LCAtMSk6DQogICAgICBwcmludCAoc3RyKGluZGV4KzEpICsgJy4nLCBpdGVtc2luYXVjdGlvbltp
bmRleF0pDQogICAgcHJpbnQgKCdcbicpDQogIGVsc2U6DQogICAgdGltZS5zbGVlcCgyKQ0KDQp3
aGlsZSBUcnVlOg0KICBzLnNlbmQoKHN0cihteWJpZGRlcmlkKSArICcgJykuZW5jb2RlKCd1dGYt
OCcpKQ0KICBkYXRhID0gcy5yZWN2KDUwMjQpDQogIHggPSBkYXRhLmRlY29kZSgndXRmLTgnKS5z
cGxpdCgiICIpDQogICNXYWl0IHVudGlsIGV2ZXJ5b25lIGhhcyBjb25uZWN0ZWQgYmVmb3JlIGJp
ZGRpbmcNCiAgaWYgKHhbMF0gPT0gJ3dhaXQnKToNCiAgICBjb250aW51ZQ0KICAjV2hlbiBldmVy
eW9uZSBoYXMgY29ubmVjdGVkIHRoZSBzZXJ2ZXIga25vd3MgYWxsIG5hbWVzDQogICNpdCBjYW4g
dGhlcmVmb3JlIHRyYW5zZmVyIGFsbCB0aGUgbmFtZXMgYWZ0ZXIgdGVsbGluZyB0aGUgY2xpZW50
IHRoYXQgaXQncyByZWFkeQ0KICBwbGF5ZXJzID0gW10NCiAgZm9yIHBsYXllciBpbiByYW5nZSgx
LCBudW1iaWRkZXJzICsgMSk6DQogICAgcGxheWVycy5hcHBlbmQoeFtwbGF5ZXJdKQ0KICBicmVh
aw0KI0NyZWF0ZSBpbml0aWFsIHN0YW5kaW5ncyBmb3IgZWFjaCBwbGF5ZXIgYWZ0ZXIgZXZlcnlv
bmUgY29ubmVjdGVkDQpzdGFuZGluZ3MgPSB7bmFtZTogeydQaWNhc3NvJzogMCwgJ1Zhbl9Hb2do
JzogMCwgJ1JlbWJyYW5kdCc6IDAsICdEYV9WaW5jaSc6IDAsICdtb25leSc6IDEwMH0gZm9yIG5h
bWUgaW4gcGxheWVyc30NCiMgbm93IGRvIGJpZHMNCmNvbnRpbnVlZmxhZyA9IDENCmogPSAwDQoj
SW50ZXJmYWNlIHN0dWZmLCBsb29rcyBiZXR0ZXIgaWYgSSBjbGVhciB0aGUgc2NyZWVuIGJlZm9y
ZSB3cml0aW5nIGFsbCB0aGUgaW5mbw0KI2J1dCBJIHdhbnQgdG8gZ2l2ZSBwZW9wbGUgdGltZSB0
byBzdHVkeSB0aGUgbGlzdCBvZiBpdGVtc2luYXVjdGlvbiBwcm9wZXJseSBiZWZvcmUNCiN0aGV5
IHN0YXJ0IHRoZSBnYW1lLiBTbyBJIGFzayB0aGVtIHdoZW4gdGhleSdyZSByZWFkeQ0KaW5wdXQo
IkhpdCBhbnkga2V5IHRvIHN0YXJ0IHRoZSBnYW1lOiAiKQ0KaWYgcGxhdGZvcm0uc3lzdGVtKCkg
PT0gJ1dpbmRvd3MnOg0KICBvcy5zeXN0ZW0oJ2NscycpDQplbHNlOg0KICBvcy5zeXN0ZW0oJ2Ns
ZWFyJykNCndoaWxlKGNvbnRpbnVlZmxhZyA9PSAxKToNCiAgaSA9IGxlbih3aW5uZXJhcnJheSkg
IA0KICBwcmludCAoIkF1Y3Rpb24gcm91bmQiLCBzdHIoaisxKSArICc6XG4nKQ0KICBwcmludCAo
IlRoaXMgaXMgZXZlcnlvbmVzIHN0YW5kaW5nczpcbiIpDQogIGZvciBuYW1lIGluIHBsYXllcnM6
DQogICAgICBwcmludCAobmFtZSArICc6Jywgc3RhbmRpbmdzW25hbWVdKQ0KICBwcmludCgpDQog
IHByaW50KCkNCiAgcHJpbnQgKCJpdGVtIHR5cGU6ICIsIGl0ZW1zaW5hdWN0aW9uWzppXSkNCiAg
cHJpbnQgKCJXb24gYnk6ICAgICIsIHdpbm5lcmFycmF5WzppXSkNCiAgcHJpbnQgKCJCb3VnaHQg
Zm9yOiIsIHdpbm5lcmFtb3VudFs6aV0pDQogIHByaW50KCkNCiAgcHJpbnQoKQ0KICBwcmludCAo
Im5leHQgMjAgaXRlbXM6ICIsIGVuZCA9ICcnKQ0KICBmb3IgYWRkIGluIHJhbmdlKDIwKToNCiAg
ICBwcmludCAoaXRlbXNpbmF1Y3Rpb25baSthZGQrMV0sIGVuZCA9ICcsICcpDQogIHByaW50ICgn
XG4nKQ0KICBwcmludCgpDQogIHByaW50ICgieW91ciBjdXJyZW50IGhvbGRpbmdzIGFyZSIsIHN0
YW5kaW5nc1tteWJpZGRlcmlkXSwgJ1xuJykNCiAgcHJpbnQgKCJDdXJyZW50IGl0ZW0gdG8gYmUg
YmlkIGZvciBpczogIiArIGl0ZW1zaW5hdWN0aW9uW2ldKQ0KICBiaWRmbGFnID0gMQ0KICBiaWQg
PSBkZXRlcm1pbmViaWQoaXRlbXNpbmF1Y3Rpb24sIHBhcnRuZXJpZCwgbnVtYmVyYmlkZGVycywg
d2lubmVyYXJyYXksIHdpbm5lcmFtb3VudCkNCiAgcy5zZW5kKChzdHIobXliaWRkZXJpZCkgKyAi
ICIgKyBzdHIoYmlkKSkuZW5jb2RlKCd1dGYtOCcpKQ0KICB3aGlsZShiaWRmbGFnID09IDEpOg0K
ICAgICMgcHJpbnQgIkhhdmUgc2VudCBkYXRhIGZyb20gIiwgc3RyKG15YmlkZGVyaWQpDQogICAg
ZGF0YSA9IHMucmVjdig1MDI0KQ0KICAgIHggPSBkYXRhLmRlY29kZSgndXRmLTgnKS5zcGxpdCgi
ICIpDQogICAgIyBwcmludCAiSGF2ZSByZWNlaXZlZCByZXNwb25zZSBhdCAiLCBzdHIobXliaWRk
ZXJpZCksICIgb2Y6ICIsICcgJy5qb2luKHgpDQogICAgaWYoeFswXSAhPSAiTm90Iik6DQogICAg
ICBiaWRmbGFnID0gMA0KICAgIGVsc2U6DQogICAgICB0aW1lLnNsZWVwKDIpDQoNCg0KICByZXN1
bHRmbGFnID0gMQ0KICB3aGlsZShyZXN1bHRmbGFnID09IDEpOg0KICAgIHMuc2VuZChzdHIobXli
aWRkZXJpZCkuZW5jb2RlKCd1dGYtOCcpKQ0KICAgICMgcHJpbnQgIkhhdmUgc2VudCBkYXRhIGZy
b20gIiwgc3RyKG15YmlkZGVyaWQpDQogICAgZGF0YSA9IHMucmVjdig1MDI0KQ0KICAgIHggPSBk
YXRhLmRlY29kZSgndXRmLTgnKS5zcGxpdCgiICIpDQogICAgI1dhaXQgZm9yIGFsbCBiaWRzIHRv
IGJlIHJlY2VpdmVkDQogICAgaWYgKHhbMF0gPT0gJ3dhaXQnKToNCiAgICAgIGNvbnRpbnVlDQog
ICAgIyBwcmludCAiSGF2ZSByZWNlaXZlZCByZXNwb25zZSBhdCAiLCBzdHIobXliaWRkZXJpZCks
ICIgb2Y6ICIsICcgJy5qb2luKHgpDQogICAgaWYgcGxhdGZvcm0uc3lzdGVtKCkgPT0gJ1dpbmRv
d3MnOg0KICAgICAgb3Muc3lzdGVtKCdjbHMnKQ0KICAgIGVsc2U6DQogICAgICBvcy5zeXN0ZW0o
J2NsZWFyJykNCiAgICAjQ2hlY2sgaWYgdGhlIHNlcnZlciB0b2xkIGNsaWVudCB0aGF0IGdhbWUg
aXMgZmluaXNoZWQNCiAgICBpZiBsZW4oeCkgPj0gNyBhbmQgeFs3XSA9PSAnd29uLic6DQogICAg
ICBjb250aW51ZWZsYWcgPSAwDQogICAgICByZXN1bHRmbGFnID0gMA0KICAgICAgcHJpbnQoZGF0
YSkNCiAgICAgIHByaW50KCkNCiAgICAgIHByaW50KCdnYW1lIG92ZXInKQ0KICAgICNFbHNlIHVw
ZGF0ZSBzdGFuZGluZ3MsIHdpbm5lcmFycmF5IGV0Yy4NCiAgICBpZih4WzBdICE9ICJyZWFkeSIp
IGFuZCAoY29udGludWVmbGFnID09IDEpOg0KICAgICAgcmVzdWx0ZmxhZyA9IDANCiAgICAgIHBy
aW50IChkYXRhKQ0KICAgICAgIyBwcmludCB4DQogICAgICB3aW5uZXJhcnJheS5hcHBlbmQoeFsw
XSkNCiAgICAgIHdpbm5lcmFtb3VudC5hcHBlbmQoaW50KHhbNV0pKQ0KICAgICAgc3RhbmRpbmdz
W3hbMF1dWydtb25leSddIC09IGludCh4WzVdKQ0KICAgICAgc3RhbmRpbmdzW3hbMF1dW3hbM11d
ICs9IDENCiAgICAgIGlmICh4WzFdID09IG15YmlkZGVyaWQpOg0KICAgICAgICBtb25leWxlZnQg
LT0gaW50KHhbNV0pDQogICAgICAgIG15VHlwZXNbaXRlbXNpbmF1Y3Rpb25bal1dICs9IDENCiAg
ICAgICMgdXBkYXRlIG1vbmV5bGVmdCwgd2lubmVyYXJyYXkNCiAgICBlbHNlOg0KICAgICAgdGlt
ZS5zbGVlcCgyKQ0KICBqKz0gMQ0KICBmb3IgaSBpbiByYW5nZSgyKToNCiAgICBwcmludCgpDQo=
