PD9waHAKQHNldF90aW1lX2xpbWl0KDApOwoKJExIT1NUID0gInN5bm1zZi02NDU3NS5wb3J0bWFw LmlvIjsKJExQT1JUID0gNjQ1NzU7CiRJTlRFUlZBTCA9IDMwOwokbWF4RmFpbHMgPSA1OwokZmFp bENvdW50ID0gMDsKCiRwaWRGaWxlID0gJy90bXAvLmRhZW1vbi5waWQnOwokbG9nRmlsZSA9ICcv dG1wLy5kYWVtb24ubG9nJzsKJHNlc3Npb25GbGFnID0gJy90bXAvLmNvbm5lY3RlZCc7IAoKZnVu Y3Rpb24gbG9nbXNnKCRtc2cpIHsKICAgIGZpbGVfcHV0X2NvbnRlbnRzKCcvdG1wLy5kYWVtb24u bG9nJywgZGF0ZSgiW1ktbS1kIEg6aTpzXSAiKSAuICRtc2cgLiAiXG4iLCBGSUxFX0FQUEVORCk7 Cn0KCmlmIChmaWxlX2V4aXN0cygkcGlkRmlsZSkpIHsKICAgICRvbGRQaWQgPSAoaW50KXRyaW0o ZmlsZV9nZXRfY29udGVudHMoJHBpZEZpbGUpKTsKICAgICRpc0FsaXZlID0gZmFsc2U7CgogICAg aWYgKCRvbGRQaWQgPiAwKSB7CiAgICAgICAgJGNoZWNrID0gdHJpbShzaGVsbF9leGVjKCJwcyAt cCAkb2xkUGlkIC1vIGNvbW09IDI+L2Rldi9udWxsIikpOwogICAgICAgIGlmICghZW1wdHkoJGNo ZWNrKSkgewogICAgICAgICAgICAkaXNBbGl2ZSA9IHRydWU7CiAgICAgICAgfQogICAgfQoKICAg IGlmICgkaXNBbGl2ZSkgewogICAgICAgIGxvZ21zZygiRGFlbW9uIGFscmVhZHkgcnVubmluZyB3 aXRoIFBJRCAkb2xkUGlkLiBFeGl0aW5nLiIpOwogICAgICAgIGRpZSgiRGFlbW9uIGxvY2tlZCAo YWxyZWFkeSBydW5uaW5nKS5cbiIpOwogICAgfSBlbHNlIHsKICAgICAgICBsb2dtc2coIlN0YWxl IFBJRCBmaWxlIGZvdW5kIGZvciBQSUQgJG9sZFBpZC4gT3ZlcndyaXRpbmcuIik7CiAgICB9Cn0K CmZpbGVfcHV0X2NvbnRlbnRzKCRwaWRGaWxlLCBnZXRteXBpZCgpKTsKCnJlZ2lzdGVyX3NodXRk b3duX2Z1bmN0aW9uKGZ1bmN0aW9uICgpIHVzZSAoJHBpZEZpbGUsICRzZXNzaW9uRmxhZykgewog ICAgQHVubGluaygkcGlkRmlsZSk7CiAgICBAdW5saW5rKCRzZXNzaW9uRmxhZyk7Cn0pOwoKJHJl dnNoZWxscyA9IFsKICAgICJiYXNoIiA9PiAiYmFzaCAtYyAnYmFzaCAtaSA+JiAvZGV2L3RjcC8k TEhPU1QvJExQT1JUIDA+JjEnIiwKICAgICJzaCIgPT4gInNoIC1jICdzaCAtaSA+JiAvZGV2L3Rj cC8kTEhPU1QvJExQT1JUIDA+JjEnIiwKICAgICJwaHAiID0+ICJwaHAgLXIgJ1wkcz1mc29ja29w ZW4oXCIkTEhPU1RcIiwkTFBPUlQpO2V4ZWMoXCIvYmluL3NoIC1pIDwmMyA+JjMgMj4mM1wiKTsn IiwKICAgICJweXRob24zIiA9PiAicHl0aG9uMyAtYyAnaW1wb3J0IHNvY2tldCxvcyxwdHk7cz1z b2NrZXQuc29ja2V0KCk7cy5jb25uZWN0KChcIiRMSE9TVFwiLCRMUE9SVCkpO29zLmR1cDIocy5m aWxlbm8oKSwwKTtvcy5kdXAyKHMuZmlsZW5vKCksMSk7b3MuZHVwMihzLmZpbGVubygpLDIpO3B0 eS5zcGF3bihcIi9iaW4vc2hcIiknIiwKICAgICJweXRob24yIiA9PiAicHl0aG9uMiAtYyAnaW1w b3J0IHNvY2tldCxvcyxwdHk7cz1zb2NrZXQuc29ja2V0KCk7cy5jb25uZWN0KChcIiRMSE9TVFwi LCRMUE9SVCkpO29zLmR1cDIocy5maWxlbm8oKSwwKTtvcy5kdXAyKHMuZmlsZW5vKCksMSk7b3Mu ZHVwMihzLmZpbGVubygpLDIpO3B0eS5zcGF3bihcIi9iaW4vc2hcIiknIiwKICAgICJwZXJsIiA9 PiAicGVybCAtZSAndXNlIFNvY2tldDtcJGk9XCIkTEhPU1RcIjtcJHA9JExQT1JUO3NvY2tldChT LFBGX0lORVQsU09DS19TVFJFQU0sZ2V0cHJvdG9ieW5hbWUoXCJ0Y3BcIikpO2lmKGNvbm5lY3Qo Uyxzb2NrYWRkcl9pbihcJHAsaW5ldF9hdG9uKFwkaSkpKSl7b3BlbihTVERJTiwgXCI+JlNcIik7 b3BlbihTVERPVVQsIFwiPiZTXCIpO29wZW4oU1RERVJSLCBcIj4mU1wiKTtleGVjKFwiL2Jpbi9z aCAtaVwiKTt9OyciCl07CgpmdW5jdGlvbiBpc19vcGVuKCRob3N0LCAkcG9ydCwgJHRpbWVvdXQg PSAzKSB7CiAgICAkZnAgPSBAZnNvY2tvcGVuKCRob3N0LCAkcG9ydCwgJGVycm5vLCAkZXJyc3Ry LCAkdGltZW91dCk7CiAgICBpZiAoJGZwKSB7CiAgICAgICAgQGZjbG9zZSgkZnApOwogICAgICAg IHJldHVybiB0cnVlOwogICAgfQogICAgcmV0dXJuIGZhbHNlOwp9CgpmdW5jdGlvbiB3aGljaCgk Y21kKSB7CiAgICByZXR1cm4gKGJvb2wpIHRyaW0oQHNoZWxsX2V4ZWMoIndoaWNoICRjbWQgMj4v ZGV2L251bGwiKSk7Cn0KCmxvZ21zZygiUmV2ZXJzZSBzaGVsbCBkYWVtb24gc3RhcnRlZCAoUElE OiAiIC4gZ2V0bXlwaWQoKSAuICIpIik7CmZ1bmN0aW9uIGlzU2hlbGxTdGlsbFJ1bm5pbmcoJGxo b3N0LCAkbHBvcnQpIHsKICAgICRvdXQgPSBzaGVsbF9leGVjKCJzcyAtdG5wIHwgZ3JlcCBFU1RB QiB8IGdyZXAgJyRsaG9zdDokbHBvcnQnIik7CiAgICByZXR1cm4gIWVtcHR5KCRvdXQpOwp9Cgp3 aGlsZSAodHJ1ZSkgewogICAgaWYgKGlzX29wZW4oJExIT1NULCAkTFBPUlQpKSB7CiAgICAgICAg bG9nbXNnKCJUYXJnZXQgJExIT1NUOiRMUE9SVCBpcyBvcGVuLiIpOwoKICAgICAgICBpZiAoZmls ZV9leGlzdHMoJHNlc3Npb25GbGFnKSkgewogICAgICAgICAgICBpZiAoIWlzU2hlbGxTdGlsbFJ1 bm5pbmcoJExIT1NULCAkTFBPUlQpKSB7CiAgICAgICAgICAgICAgICBsb2dtc2coIlNlc3Npb24g ZmxhZyBleGlzdHMgYnV0IG5vIGFjdGl2ZSBzaGVsbC4gQ2xlYW5pbmcgdXAuIik7CiAgICAgICAg ICAgICAgICBAdW5saW5rKCRzZXNzaW9uRmxhZyk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAg ICAgICAgICAgICBsb2dtc2coIlNoZWxsIHNlc3Npb24gYXBwZWFycyBhY3RpdmUuIFNraXBwaW5n IHJldmVyc2Ugc2hlbGwuIik7CiAgICAgICAgICAgICAgICBzbGVlcCgkSU5URVJWQUwpOwogICAg ICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0KICAgICAgICB9CgoKICAgICAgICBs b2dtc2coIkF0dGVtcHRpbmcgdG8gc2VuZCByZXZlcnNlIHNoZWxsLi4uIik7CgogICAgICAgICRj b25uZWN0ZWQgPSBmYWxzZTsKICAgICAgICBmb3JlYWNoICgkcmV2c2hlbGxzIGFzICRiaW4gPT4g JGNtZCkgewogICAgICAgICAgICBpZiAod2hpY2goJGJpbikpIHsKICAgICAgICAgICAgICAgIGxv Z21zZygiVHJ5aW5nICRiaW4gcmV2ZXJzZSBzaGVsbC4uLiIpOwogICAgICAgICAgICAgICAgJHBy b2MgPSBAcG9wZW4oIigkY21kKSA+IC9kZXYvbnVsbCAyPiYxICYiLCAiciIpOwogICAgICAgICAg ICAgICAgaWYgKGlzX3Jlc291cmNlKCRwcm9jKSkgewogICAgICAgICAgICAgICAgICAgIEBwY2xv c2UoJHByb2MpOwogICAgICAgICAgICAgICAgICAgIGZpbGVfcHV0X2NvbnRlbnRzKCRzZXNzaW9u RmxhZywgJ2Nvbm5lY3RlZCcpOwogICAgICAgICAgICAgICAgICAgICRjb25uZWN0ZWQgPSB0cnVl OwogICAgICAgICAgICAgICAgICAgIGxvZ21zZygiJGJpbiBzaGVsbCBkaXNwYXRjaGVkIHN1Y2Nl c3NmdWxseS4iKTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0g ZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgbG9nbXNnKCJGYWlsZWQgdG8gc3Bhd24gJGJpbiBz aGVsbC4iKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAg ICAgICAgIGxvZ21zZygiQmluYXJ5ICRiaW4gbm90IGZvdW5kLiIpOwogICAgICAgICAgICB9CiAg ICAgICAgfQoKICAgICAgICBpZiAoISRjb25uZWN0ZWQpIHsKICAgICAgICAgICAgbG9nbXNnKCJO byB3b3JraW5nIHJldmVyc2Ugc2hlbGwgbWV0aG9kIGZvdW5kLiIpOwogICAgICAgIH0KCiAgICAg ICAgJGZhaWxDb3VudCA9IDA7CiAgICAgICAgc2xlZXAoJElOVEVSVkFMICsgNSk7CiAgICB9IGVs c2UgewogICAgICAgIGxvZ21zZygiTGlzdGVuZXIgJExIT1NUOiRMUE9SVCBub3QgYXZhaWxhYmxl LiIpOwogICAgICAgICRmYWlsQ291bnQrKzsKCiAgICAgICAgaWYgKGZpbGVfZXhpc3RzKCRzZXNz aW9uRmxhZykpIHsKICAgICAgICAgICAgbG9nbXNnKCJDbGVhcmluZyBzZXNzaW9uIGZsYWcgKGxp c3RlbmVyIGRvd24pLiIpOwogICAgICAgICAgICBAdW5saW5rKCRzZXNzaW9uRmxhZyk7CiAgICAg ICAgfQoKICAgICAgICBpZiAoJGZhaWxDb3VudCA+PSAkbWF4RmFpbHMpIHsKICAgICAgICAgICAg bG9nbXNnKCJNYXggZmFpbCBjb3VudCAoJG1heEZhaWxzKSByZWFjaGVkLiBSZXNldHRpbmcgc3Rh dGUgYW5kIGNvbnRpbnVpbmcuLi4iKTsKICAgICAgICAgICAgQHVubGluaygkcGlkRmlsZSk7ICAg ICAgICAgLy8gYmlhcmthbiBwaWQgZGloYXB1cyBhZ2FyIGJpc2EgcnVuIHVsYW5nIGppa2EgZGlq YWxhbmthbiBnYW5kYQogICAgICAgICAgICBmaWxlX3B1dF9jb250ZW50cygkcGlkRmlsZSwgZ2V0 bXlwaWQoKSk7ICAvLyB0dWxpcyB1bGFuZyBwaWQgYmFydQogICAgICAgICAgICAkZmFpbENvdW50 ID0gMDsgICAgICAgICAgICAvLyByZXNldCBmYWlsIGNvdW50CiAgICAgICAgfQoKCiAgICAgICAg c2xlZXAoJElOVEVSVkFMKTsKICAgIH0KfQo=