-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathmo-downloader.alook
10 lines (10 loc) · 23.7 KB
/
mo-downloader.alook
1
2
3
4
5
6
7
8
9
10
{
"match": 0,
"info": "mo\u4e0b\u8f7d\u5668",
"regex": "m.tribe-m.jp@@m.ex-m.jp@@m.ldh-m.jp@@m.ldhgirls-m.jp",
"runat": 0,
"version": "0.85",
"author": "\u4e59\u919a",
"name": "mo\u4e0b\u8f7d\u5668",
"code": "Ly8gPT1Vc2VyU2NyaXB0PT0KLy8gQG5hbWUgICAgICAgICAgICAgICAgbW8gKExESCkg5LiL6L295ZmoCi8vIEBuYW1lc3BhY2UgICAgICAgICAgIGh0dHBzOi8vMW1ldGhlci5tZS8KLy8gQHZlcnNpb24gICAgICAgICAgICAgMC44NQovLyBAZGVzY3JpcHRpb24gICAgICAgICDlnKhtb+eahOWGheWuuemhteWinuWKoOWbvueJh+WSjOinhumikeS4i+i9veeahOaMiemSru+8jCDop6PplIHlj7PplK7lip/og70KLy8gQGF1dGhvciAgICAgICAgICAgICAg5LmZ6YaaKEBsb2NvZGEpCi8vIEBtYXRjaCAgICAgICAgICAgICAgIGh0dHAqOi8vbS50cmliZS1tLmpwLyoKLy8gQG1hdGNoICAgICAgICAgICAgICAgaHR0cCo6Ly9tLmV4LW0uanAvKgovLyBAbWF0Y2ggICAgICAgICAgICAgICBodHRwKjovL20ubGRoLW0uanAvKgovLyBAbWF0Y2ggICAgICAgICAgICAgICBodHRwKjovL20ubGRoZ2lybHMtbS5qcC8qCi8vIEBtYXRjaCAgICAgICAgICAgICAgIGh0dHAqOi8vKi5leGZhbWlseS5qcC8qCi8vIEBpY29uICAgICAgICAgICAgICAgIGh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vczIvZmF2aWNvbnM/c3o9NjQmZG9tYWluPWxkaC5jby5qcAovLyBAc291cmNlICAgICAgICAgICAgICBodHRwczovL2dpdGh1Yi5jb20vbG9jb2RhL21vLWRvd25sb2FkZXIKLy8gQGxpY2Vuc2UgICAgICAgICAgICAgTUlUCi8vID09L1VzZXJTY3JpcHQ9PQoKKGZ1bmN0aW9uICgpIHsKICAidXNlIHN0cmljdCI7CiAgLy8gPT09PT09PT09PT09PT09PQogIC8vID0gICAgQ29uc3RzICAgID0KICAvLyA9PT09PT09PT09PT09PT09CgogIGNvbnN0IGlzTW9iaWxlID0gKCkgPT4KICAgIC9BbmRyb2lkfHdlYk9TfGlQaG9uZXxpUGFkfGlQb2R8QmxhY2tCZXJyeXxJRU1vYmlsZXxPcGVyYSBNaW5pL2kudGVzdCgKICAgICAgbmF2aWdhdG9yLnVzZXJBZ2VudAogICAgKTsKCiAgY29uc3Qga2V5d29yZHMgPSBbInVwbGNtbiIsICJ1cGxvYWQiXTsKCiAgLy8gPT09PT09PT09PT09PT0KICAvLyA9ICAgIE1haW4gICAgPQogIC8vID09PT09PT09PT09PT09CgogIC8vIE1vIOS4i+i9veWbvueJhwogIGlmICh3aW5kb3cubG9jYXRpb24uaG9zdC5pbmNsdWRlcygiLW0uanAiKSkgewogICAgLy8g5Yig6Zmk5Zu+54mH5L+d5oqkCiAgICByZW1vdmVQcm90ZWN0SW1nKCk7CiAgICAvLyDlnKjor6bmg4XpobXms6jlhaXmjInpkq4KICAgIGlmICh3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUuaW5jbHVkZXMoImRldGFpbCIpKSB7CiAgICAgIGluamVjdERvd25sb2FkQWxsQnV0dG9ucygpOwogICAgfQogICAgLy8g5Zyo6KeG6aKR6aG16Z2i5rOo5YWl5oyJ6ZKuCiAgICBpZiAod2luZG93LmxvY2F0aW9uLnBhdGhuYW1lLmluY2x1ZGVzKCJtb3ZpZSIpKSB7CiAgICAgIGlmIChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJkaXYubGltZWxpZ2h0LXBsYXllciIpKSB7CiAgICAgICAgaW5qZWN0UGVyVmlkZW9Eb3dubG9hZEJ1dHRvbihkb2N1bWVudCk7CiAgICAgIH0KICAgIH0KICAgIC8vIOWcqOaXtumXtOi9tOeVjOmdouWIneWni+WMluW5tuiuvue9rkxpc3RlbmVyCiAgICBpZiAod2luZG93LmxvY2F0aW9uLnBhdGhuYW1lLmluY2x1ZGVzKCJ0aW1lbGluZSIpKSB7CiAgICAgIC8vIOetieW+heWKoOi9vXNjcm9sbAogICAgICAoZnVuY3Rpb24gaW5pdCgpIHsKICAgICAgICB2YXIgY291bnRlciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoImxkaC1pbmZpbml0ZS1zY3JvbGwiKTsKICAgICAgICBpZiAoY291bnRlcikgewogICAgICAgICAgLy8g6K6+572u5oyJ6ZKu5ZKM55uR5ZCsCiAgICAgICAgICByZW1vdmVQcm90ZWN0SW1nKCk7CiAgICAgICAgICBjdXN0b21pemVkVGltZWxpbmVQYWdlKCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHNldFRpbWVvdXQoaW5pdCwgMzAwKTsKICAgICAgICB9CiAgICAgIH0pKCk7CiAgICB9CiAgICAvLyDlnKhB5YaZ6aG16Z2i5rOo5YWl5oyJ6ZKuCiAgICBpZiAoCiAgICAgIHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZS5pbmNsdWRlcygiYXJ0aXN0cGhvdG8iKSB8fAogICAgICB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUuaW5jbHVkZXMoImFydGlzdF9waG90byIpCiAgICApIHsKICAgICAgaW5qZWN0QXJ0aXN0UGhvdG9Eb3dubG9hZEJ1dHRvbigpOwogICAgfQogICAgLy8g5ZyoT2Zmc2hvdOmhtemdouazqOWFpeaMiemSrgogICAgaWYgKHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZS5pbmNsdWRlcygibGRoX29mZl9zaG90IikpIHsKICAgICAgaW5qZWN0T2Zmc2hvdERvd25sb2FkQnV0dG9uKCk7CiAgICB9CiAgfQoKICAvLyBGQyDkuIvovb3lm77niYcKICBpZiAod2luZG93LmxvY2F0aW9uLmhvc3QuaW5jbHVkZXMoImV4ZmFtaWx5LmpwIikpIHsKICAgIHJlbW92ZU5vdENvcHkoKTsKICAgIGluamVjdEZDTWFnYXppbmVCdXR0b24oKTsKICAgIGluamVjdEZDR2FsbGVyeUJ1dHRvbigpOwogIH0KCiAgLy8gPT09PT09PT09PT09PT09CiAgLy8gPSAgICBVdGlscyAgICA9CiAgLy8gPT09PT09PT09PT09PT09CgogIGZ1bmN0aW9uIHJlbW92ZVByb3RlY3RJbWcoKSB7CiAgICAvLyDnp7vpmaTlj7PplK7pmZDliLYKICAgIGRvY3VtZW50Lm9uY29udGV4dG1lbnUgPSBmdW5jdGlvbiAoKSB7CiAgICAgIHJldHVybiB0cnVlOwogICAgfTsKICAgIC8vIOenu+mZpHByb3RlY3RpbWfpmZDliLYKICAgIGRvY3VtZW50CiAgICAgIC5xdWVyeVNlbGVjdG9yQWxsKCIucHJvdGVjdGltZyIpCiAgICAgIC5mb3JFYWNoKChub2RlKSA9PiBub2RlLmNsYXNzTGlzdC5yZW1vdmUoInByb3RlY3RpbWciKSk7CiAgICBtb0Rvd25sb2FkZXJMb2coIuenu+mZpOWPs+mUrumZkOWItiIpOwogIH0KCiAgZnVuY3Rpb24gcmVtb3ZlTm90Q29weSgpIHsKICAgIC8vIOenu+mZpOmZkOWItgogICAgTm90Q29weS5zZXQgPSBmdW5jdGlvbiAoKSB7fTsKICAgIC8vIOWKoOWFpeS4i+i9veadg+mZkAogICAgZG9jdW1lbnQKICAgICAgLnF1ZXJ5U2VsZWN0b3JBbGwoImltZyIpCiAgICAgIC5mb3JFYWNoKChub2RlKSA9PiBub2RlLmNsYXNzTGlzdC5hZGQoImlzLWRsLXBlcm1pc3Npb24iKSk7CiAgfQoKICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogIC8vID0gICAgQnV0dG9uIEluamVjdGlvbiBVdGlscyAgICA9CiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiAgZnVuY3Rpb24gaW5qZWN0RG93bmxvYWRBbGxCdXR0b25zKCkgewogICAgdmFyIGFydGljbGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJhcnRpY2xlIik7CiAgICBpZiAoYXJ0aWNsZS5jbGFzc0xpc3QuY29udGFpbnMoImFydGljbGUtLW5ld3MiKSkgewogICAgICAvLyDmlrDpl7vpobXpnaLnibnmrorlpITnkIYKICAgICAgYXJ0aWNsZSA9IGFydGljbGUucXVlcnlTZWxlY3RvcigiLmFydGljbGVfX2JvZHkiKTsKICAgIH0KICAgIGF0dGFjaEJ1dHRvblRvQXJ0aWNsZShhcnRpY2xlKTsKICB9CgogIGZ1bmN0aW9uIGZpbmRFbGlnaWJsZUltZ3NGcm9tQXJ0aWNsZShhcnRpY2xlKSB7CiAgICByZXR1cm4gQXJyYXkuZnJvbShhcnRpY2xlLnF1ZXJ5U2VsZWN0b3JBbGwoImltZyIpKQogICAgICAubWFwKChpbWcpID0+IGltZy5zcmMpCiAgICAgIC5maWx0ZXIoKGltZykgPT4ga2V5d29yZHMuc29tZSgoaykgPT4gaW1nLmluY2x1ZGVzKGspKSk7CiAgfQoKICBmdW5jdGlvbiBhdHRhY2hCdXR0b25Ub0FydGljbGUoYXJ0aWNsZSkgewogICAgdmFyIGltZ3MgPSBmaW5kRWxpZ2libGVJbWdzRnJvbUFydGljbGUoYXJ0aWNsZSk7CiAgICAvLyDms6jlhaXmjInpkq4gZGl2CiAgICB2YXIgYnV0dG9uc0RpdiA9IGdldEJ1dHRvbkRpdigpOwogICAgYXJ0aWNsZS5pbnNlcnRCZWZvcmUoYnV0dG9uc0RpdiwgYXJ0aWNsZS5maXJzdENoaWxkKTsKICAgIC8vIOWbvueJh+mTvuaOpeeUn+aIkOaMiemSrgogICAgaW5qZWN0SW1hZ2VEb3dubG9hZEJ1dHRvbihidXR0b25zRGl2LCBpbWdzLCBnZXRQcmVmaXhGcm9tQXJ0aWNsZShhcnRpY2xlKSk7CiAgICAvLyDop4bpopHkuIvovb3mjInpkq4KICAgIGlmICgKICAgICAgYXJ0aWNsZS5xdWVyeVNlbGVjdG9yKCJkaXYubGltZWxpZ2h0LXBsYXllciIpIHx8CiAgICAgIGFydGljbGUucXVlcnlTZWxlY3RvcigiYS5wb3B1cF9saW5rIikKICAgICkgewogICAgICAvLyBMaXN0IFZpZXcg6KeG6aKRCiAgICAgIGluamVjdFBlclZpZGVvRG93bmxvYWRCdXR0b24oYXJ0aWNsZSk7CiAgICAgIC8vIFRpbWVsaW5lIOinhumikQogICAgICBpbmplY3RQZXJWaWRlb0Rvd25sb2FkQnV0dG9uRm9yVGltZWxpbmUoYXJ0aWNsZSk7CiAgICB9CiAgICBtb0Rvd25sb2FkZXJMb2coIuazqOWFpeaMiemSriIpOwogIH0KCiAgZnVuY3Rpb24gaW5qZWN0UGVyVmlkZW9Eb3dubG9hZEJ1dHRvbihkaXYpIHsKICAgIGRpdi5xdWVyeVNlbGVjdG9yQWxsKCJkaXYubGltZWxpZ2h0LXBsYXllciIpLmZvckVhY2goKHZpZGVvRGl2KSA9PiB7CiAgICAgIHZhciBtZWRpYUlkID0gdmlkZW9EaXYuaWQuc3Vic3RyaW5nKHZpZGVvRGl2LmlkLmxhc3RJbmRleE9mKCJfIikgKyAxKTsKICAgICAgbW9Eb3dubG9hZGVyRGVidWcoIuato+WcqOS4i+i9veinhumike+8miAiICsgbWVkaWFJZCk7CiAgICAgIGluamVjdE9uZUJ1dHRvbih2aWRlb0Rpdi5wYXJlbnRFbGVtZW50LCAi5LiL6L296KeG6aKRIiwgZnVuY3Rpb24gKGV2ZW50KSB7CiAgICAgICAgZG93bmxvYWRWaWRlbyhldmVudC50YXJnZXQsIG1lZGlhSWQsIGdldFByZWZpeEZyb21BcnRpY2xlKGRpdikpOwogICAgICB9KTsKICAgIH0pOwogIH0KCiAgZnVuY3Rpb24gaW5qZWN0QXJ0aXN0UGhvdG9Eb3dubG9hZEJ1dHRvbigpIHsKICAgIHZhciBpbm5lciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIiNjbXMtaW5uZXIiKTsKICAgIHZhciB0aXRsZSwgaW1nczsKICAgIGlmIChpbm5lcikgewogICAgICAvLyBOZXcgUGFnZQogICAgICB0aXRsZSA9IGlubmVyLnF1ZXJ5U2VsZWN0b3IoIi5jbXMtc2VjdGlvbl9faW5uZXJfX29uZS1jb2wiKTsKICAgICAgaW1ncyA9IEFycmF5LmZyb20oaW5uZXIucXVlcnlTZWxlY3RvckFsbCgibGRoLWNtcy1pbWcgaW1nIikpLm1hcCgKICAgICAgICAoaW1nKSA9PiBpbWcuc3JjCiAgICAgICk7CiAgICB9IGVsc2UgewogICAgICAvLyBMZWdhY3kgUGFnZQogICAgICBpbm5lciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIi5pbm5lciIpOwogICAgICB0aXRsZSA9IGlubmVyLnF1ZXJ5U2VsZWN0b3IoInNlY3Rpb24iKTsKICAgICAgaW1ncyA9IEFycmF5LmZyb20oaW5uZXIucXVlcnlTZWxlY3RvckFsbCgiaW1nIikpLm1hcCgoaW1nKSA9PiBpbWcuc3JjKTsKICAgIH0KICAgIHZhciBidXR0b25zRGl2ID0gZ2V0QnV0dG9uRGl2KCk7CiAgICB0aXRsZS5hcHBlbmQoYnV0dG9uc0Rpdik7CiAgICBpbmplY3RJbWFnZURvd25sb2FkQnV0dG9uKGJ1dHRvbnNEaXYsIGltZ3MsIGdldFByZWZpeEZyb21Eb2N1bWVudCgpKTsKICB9CgogIGZ1bmN0aW9uIGluamVjdE9mZnNob3REb3dubG9hZEJ1dHRvbigpIHsKICAgIHZhciBpbm5lciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIi5pbm5lciIpOwogICAgdmFyIGRpdnMgPSBBcnJheS5mcm9tKGlubmVyLnF1ZXJ5U2VsZWN0b3JBbGwoImRpdltpZF49J2pzLWdhbGxlcnknXSIpKTsKICAgIGRpdnMuZm9yRWFjaCgoZGl2KSA9PiB7CiAgICAgIHZhciBidXR0b25zRGl2ID0gZ2V0QnV0dG9uRGl2KCk7CiAgICAgIGRpdi5wYXJlbnRFbGVtZW50LmFwcGVuZENoaWxkKGJ1dHRvbnNEaXYpOwogICAgICB2YXIgaW1ncyA9IEFycmF5LmZyb20oZGl2LnF1ZXJ5U2VsZWN0b3JBbGwoImEiKSkubWFwKAogICAgICAgIChhKSA9PiBuZXcgVVJMKGEuaHJlZiwgd2luZG93LmxvY2F0aW9uLm9yaWdpbikuaHJlZgogICAgICApOwogICAgICBpbmplY3RJbWFnZURvd25sb2FkQnV0dG9uKGJ1dHRvbnNEaXYsIGltZ3MsIGdldFByZWZpeEZyb21Eb2N1bWVudCgpKTsKICAgIH0pOwogIH0KCiAgZnVuY3Rpb24gaW5qZWN0UGVyVmlkZW9Eb3dubG9hZEJ1dHRvbkZvclRpbWVsaW5lKGRpdikgewogICAgZGl2LnF1ZXJ5U2VsZWN0b3JBbGwoImEucG9wdXBfbGluayIpLmZvckVhY2goKHZpZGVvRGl2KSA9PiB7CiAgICAgIHZhciBtZWRpYUlkID0gdmlkZW9EaXYKICAgICAgICAuZ2V0QXR0cmlidXRlKCJvbmNsaWNrIikKICAgICAgICAuc3BsaXQoIm1vdmllLyIpWzFdCiAgICAgICAgLnNwbGl0KCIvIilbMF07CiAgICAgIG1vRG93bmxvYWRlckRlYnVnKCLmraPlnKjkuIvovb3op4bpopHvvJogIiArIG1lZGlhSWQpOwogICAgICBpbmplY3RPbmVCdXR0b24odmlkZW9EaXYucGFyZW50RWxlbWVudCwgIuS4i+i9veinhumikSIsIGZ1bmN0aW9uIChldmVudCkgewogICAgICAgIGRvd25sb2FkVmlkZW8oZXZlbnQudGFyZ2V0LCBtZWRpYUlkLCBnZXRQcmVmaXhGcm9tQXJ0aWNsZShkaXYpKTsKICAgICAgfSk7CiAgICB9KTsKICB9CgogIGZ1bmN0aW9uIGluamVjdEZDTWFnYXppbmVCdXR0b24oKSB7CiAgICB2YXIgYXJ0aWNsZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoImFydGljbGUiKTsKICAgIGlmICghYXJ0aWNsZSkgcmV0dXJuOwogICAgdmFyIGltZ3MgPSBBcnJheS5mcm9tKGFydGljbGUucXVlcnlTZWxlY3RvckFsbCgiaW1nIikpLm1hcCgKICAgICAgKGltZykgPT4KICAgICAgICBuZXcgVVJMKGltZy5nZXRBdHRyaWJ1dGUoImRhdGEtc3JjIikgfHwgaW1nLnNyYywgd2luZG93LmxvY2F0aW9uLm9yaWdpbikKICAgICAgICAgIC5ocmVmCiAgICApOwogICAgaW1ncyA9IFsuLi5uZXcgU2V0KGltZ3MpXTsKICAgIHZhciBidXR0b25zRGl2ID0gZ2V0QnV0dG9uRGl2KCk7CiAgICBhcnRpY2xlLmluc2VydEJlZm9yZShidXR0b25zRGl2LCBhcnRpY2xlLmZpcnN0Q2hpbGQpOwogICAgaW5qZWN0SW1hZ2VEb3dubG9hZEJ1dHRvbihidXR0b25zRGl2LCBpbWdzLCBnZXRQcmVmaXhGcm9tQXJ0aWNsZShhcnRpY2xlKSk7CiAgICBBcnJheS5mcm9tKGFydGljbGUucXVlcnlTZWxlY3RvckFsbCgiLmpzLWltZyIpKS5mb3JFYWNoKChqc0ltZykgPT4gewogICAgICB2YXIgYnV0dG9uc0RpdiA9IGdldEJ1dHRvbkRpdigpOwogICAgICBqc0ltZy5wYXJlbnRFbGVtZW50Lmluc2VydEJlZm9yZShidXR0b25zRGl2LCBqc0ltZyk7CiAgICAgIHZhciBpbWdzID0gQXJyYXkuZnJvbShqc0ltZy5xdWVyeVNlbGVjdG9yQWxsKCJpbWciKSkubWFwKAogICAgICAgIChpbWcpID0+CiAgICAgICAgICBuZXcgVVJMKAogICAgICAgICAgICBpbWcuZ2V0QXR0cmlidXRlKCJkYXRhLXNyYyIpIHx8IGltZy5zcmMsCiAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5vcmlnaW4KICAgICAgICAgICkuaHJlZgogICAgICApOwogICAgICBpbmplY3RJbWFnZURvd25sb2FkQnV0dG9uKAogICAgICAgIGJ1dHRvbnNEaXYsCiAgICAgICAgaW1ncywKICAgICAgICBnZXRQcmVmaXhGcm9tQXJ0aWNsZShhcnRpY2xlKSwKICAgICAgICBmYWxzZQogICAgICApOwogICAgfSk7CiAgICBBcnJheS5mcm9tKAogICAgICBhcnRpY2xlLnF1ZXJ5U2VsZWN0b3JBbGwoIi5qcy1nYWxsZXJ5IC5jLWdhbGxlcnlfX21haW4iKQogICAgKS5mb3JFYWNoKChqc0dhbGxlcnkpID0+IHsKICAgICAgdmFyIGJ1dHRvbnNEaXYgPSBnZXRCdXR0b25EaXYoKTsKICAgICAganNHYWxsZXJ5LnBhcmVudEVsZW1lbnQuaW5zZXJ0QmVmb3JlKGJ1dHRvbnNEaXYsIGpzR2FsbGVyeSk7CiAgICAgIHZhciBpbWdzID0gQXJyYXkuZnJvbShqc0dhbGxlcnkucXVlcnlTZWxlY3RvckFsbCgiaW1nIikpLm1hcCgKICAgICAgICAoaW1nKSA9PgogICAgICAgICAgbmV3IFVSTCgKICAgICAgICAgICAgaW1nLmdldEF0dHJpYnV0ZSgiZGF0YS1zcmMiKSB8fCBpbWcuc3JjLAogICAgICAgICAgICB3aW5kb3cubG9jYXRpb24ub3JpZ2luCiAgICAgICAgICApLmhyZWYKICAgICAgKTsKICAgICAgaW1ncyA9IFsuLi5uZXcgU2V0KGltZ3MpXTsKICAgICAgaW5qZWN0SW1hZ2VEb3dubG9hZEJ1dHRvbigKICAgICAgICBidXR0b25zRGl2LAogICAgICAgIGltZ3MsCiAgICAgICAgZ2V0UHJlZml4RnJvbUFydGljbGUoYXJ0aWNsZSkKICAgICAgKTsKICAgIH0pOwogIH0KCiAgZnVuY3Rpb24gaW5qZWN0RkNHYWxsZXJ5QnV0dG9uKCkgewogICAgdmFyIGdhbGxlcnkgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIucC1nYWxsZXJ5X2RldGFpbCIpOwogICAgaWYgKCFnYWxsZXJ5KSByZXR1cm47CiAgICB2YXIgaW1ncyA9IEFycmF5LmZyb20oZ2FsbGVyeS5xdWVyeVNlbGVjdG9yQWxsKCIudGh1bWJuYWlsIGltZyIpKQogICAgICAuZmlsdGVyKChpbWcpID0+ICFpbWcuc3JjLmluY2x1ZGVzKCJwaG90b0NvdmVyLnBuZyIpKQogICAgICAubWFwKChpbWcpID0+IG5ldyBVUkwoaW1nLnNyYywgd2luZG93LmxvY2F0aW9uLm9yaWdpbikuaHJlZik7CiAgICBpbWdzID0gWy4uLm5ldyBTZXQoaW1ncyldOwogICAgdmFyIGJ1dHRvbnNEaXYgPSBnZXRCdXR0b25EaXYoKTsKICAgIGdhbGxlcnkuaW5zZXJ0QmVmb3JlKGJ1dHRvbnNEaXYsIGdhbGxlcnkuZmlyc3RDaGlsZCk7CiAgICBpbmplY3RJbWFnZURvd25sb2FkQnV0dG9uKGJ1dHRvbnNEaXYsIGltZ3MsIGdldFByZWZpeEZyb21BcnRpY2xlKGdhbGxlcnkpKTsKICB9CgogIGZ1bmN0aW9uIGluamVjdEltYWdlRG93bmxvYWRCdXR0b24oZWxlbWVudCwgaW1ncywgcHJlZml4LCBpbmZpeCA9IHRydWUpIHsKICAgIGlmIChpc01vYmlsZSgpKSB7CiAgICAgIC8vIOaJi+acuueUqOWbvueJh+mTvuaOpeeUn+aIkOaMiemSrgogICAgICBpbmplY3RPbmVCdXR0b24oCiAgICAgICAgZWxlbWVudCwKICAgICAgICAi55Sf5oiQ5Zu+54mH6ZO+5o6lKCIgKyBpbWdzLmxlbmd0aCArICIpIiwKICAgICAgICBmdW5jdGlvbiAoKSB7CiAgICAgICAgICBnZW5lcmF0ZU9uQ2xpY2tIYW5kbGVyKGVsZW1lbnQsIGltZ3MpOwogICAgICAgIH0KICAgICAgKTsKICAgIH0gZWxzZSB7CiAgICAgIC8vIOWbvueJh+S4i+i9veaMiemSrgogICAgICBpbmplY3RPbmVCdXR0b24oCiAgICAgICAgZWxlbWVudCwKICAgICAgICAoaW5maXggPyAi5LiL6L295omA5pyJ5Zu+54mHICgiIDogIuS4i+i9veWbvueJhyAoIikgKyBpbWdzLmxlbmd0aCArICIpIiwKICAgICAgICBmdW5jdGlvbiAoKSB7CiAgICAgICAgICBkb3dubG9hZEltYWdlcyhpbWdzLCBwcmVmaXgpOwogICAgICAgIH0KICAgICAgKTsKICAgIH0KICB9CgogIGZ1bmN0aW9uIGluamVjdE9uZUJ1dHRvbihlbGVtZW50LCB0ZXh0T25CdXR0b24sIGNsaWNrTGlzdGVuZXIpIHsKICAgIHZhciBidG4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJCVVRUT04iKTsKICAgIHZhciBidG5UZXh0ID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodGV4dE9uQnV0dG9uKTsKICAgIGJ0bi5hcHBlbmRDaGlsZChidG5UZXh0KTsKICAgIGJ0bi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIGNsaWNrTGlzdGVuZXIpOwogICAgYnRuLnN0eWxlID0KICAgICAgImJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OyBib3JkZXI6IHNvbGlkICM4MDgwODAgMnB4OyBib3JkZXItcmFkaXVzOiAyMHB4OyBjb2xvcjogIzU0NTQ1NDsgbWFyZ2luOiAwLjJlbTsiOwogICAgZWxlbWVudC5hcHBlbmRDaGlsZChidG4pOwogIH0KCiAgZnVuY3Rpb24gZ2V0QnV0dG9uRGl2KCkgewogICAgdmFyIGJ1dHRvbnNEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICAgIGJ1dHRvbnNEaXYuY2xhc3NOYW1lID0gImxkaC1tby1kbCI7CiAgICBidXR0b25zRGl2LnN0eWxlID0gIm1hcmdpbi10b3A6IDAuNGVtOyBtYXJnaW4tYm90dG9tOiAwLjRlbSI7CiAgICByZXR1cm4gYnV0dG9uc0RpdjsKICB9CgogIGZ1bmN0aW9uIGdlbmVyYXRlT25DbGlja0hhbmRsZXIoYnV0dG9uc0RpdiwgaW1ncykgewogICAgdmFyIHRleHRhcmVhID0gYnV0dG9uc0Rpdi5xdWVyeVNlbGVjdG9yKCJ0ZXh0YXJlYS5sZGgtbW8tZGwiKTsKICAgIGlmICghdGV4dGFyZWEpIHsKICAgICAgdGV4dGFyZWEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZXh0YXJlYSIpOwogICAgICB0ZXh0YXJlYS5jbGFzc05hbWUgPSAibGRoLW1vLWRsIjsKICAgICAgdGV4dGFyZWEuc3R5bGUgPSAiaGVpZ2h0OiAxMDBweDsgd2lkdGg6IDgwJTsiOwogICAgICB2YXIgYnIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJiciIpOwogICAgICBidXR0b25zRGl2Lmluc2VydEJlZm9yZShiciwgYnV0dG9uc0Rpdi5maXJzdENoaWxkKTsKICAgICAgYnV0dG9uc0Rpdi5pbnNlcnRCZWZvcmUodGV4dGFyZWEsIGJ1dHRvbnNEaXYuZmlyc3RDaGlsZCk7CiAgICB9CiAgICB0ZXh0YXJlYS52YWx1ZSA9IGltZ3Muam9pbigiXG4iKTsKICAgIHRleHRhcmVhLnNlbGVjdCgpOwogIH0KCiAgZnVuY3Rpb24gY3VzdG9taXplZFRpbWVsaW5lUGFnZSgpIHsKICAgIC8vIOWIneWni+WMlgogICAgZG9jdW1lbnQKICAgICAgLnF1ZXJ5U2VsZWN0b3JBbGwoImxkaC1pbmZpbml0ZS1zY3JvbGwgYXJ0aWNsZSIpCiAgICAgIC5mb3JFYWNoKChhcnRpY2xlKSA9PiBhdHRhY2hCdXR0b25Ub0FydGljbGUoYXJ0aWNsZSkpOwogICAgZG9jdW1lbnQKICAgICAgLnF1ZXJ5U2VsZWN0b3JBbGwoImxkaC1pbmZpbml0ZS1zY3JvbGwgbGRoLWltYWdlZGlhcnktdGltZWxpbmUtbGlzdC1pdGVtIikKICAgICAgLmZvckVhY2goKGFydGljbGUpID0+IGF0dGFjaEJ1dHRvblRvQXJ0aWNsZShhcnRpY2xlKSk7CiAgICBjb25zdCBpbmZpbml0ZVNjcm9sbENvbnRhaW5lciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoCiAgICAgICJsZGgtaW5maW5pdGUtc2Nyb2xsIgogICAgKTsKICAgIGNvbnN0IGNvbmZpZyA9IHsgY2hpbGRMaXN0OiB0cnVlIH07CiAgICBjb25zdCBvYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKGZ1bmN0aW9uIChtdXRhdGlvbnMsIG9ic2VydmVyKSB7CiAgICAgIHZhciBub2RlcyA9IG11dGF0aW9ucy5maW5kKChyKSA9PgogICAgICAgIEFycmF5LmZyb20oci5hZGRlZE5vZGVzKS5maWx0ZXIoCiAgICAgICAgICAobikgPT4KICAgICAgICAgICAgbi5jbGFzc05hbWUgPT0gImFydGljbGUiIHx8CiAgICAgICAgICAgIG4uY2xhc3NOYW1lID09ICJsZGgtaW1hZ2VkaWFyeS10aW1lbGluZS1saXN0LWl0ZW0iCiAgICAgICAgKQogICAgICApLmFkZGVkTm9kZXM7CiAgICAgIG5vZGVzLmZvckVhY2goKG5vZGUpID0+CiAgICAgICAgYXR0YWNoQnV0dG9uVG9BcnRpY2xlKAogICAgICAgICAgbm9kZS5xdWVyeVNlbGVjdG9yKCJhcnRpY2xlIikgfHwKICAgICAgICAgICAgbm9kZS5xdWVyeVNlbGVjdG9yKCJsZGgtaW1hZ2VkaWFyeS10aW1lbGluZS1saXN0LWl0ZW0iKQogICAgICAgICkKICAgICAgKTsKICAgICAgcmVtb3ZlUHJvdGVjdEltZygpOwogICAgICBtb0Rvd25sb2FkZXJEZWJ1Zygi6Kej6Zmk5Yi35paw5ZCO5pe26Ze057q/5Y+z6ZSu6ZmQ5Yi2Iik7CiAgICB9KTsKICAgIG9ic2VydmVyLm9ic2VydmUoaW5maW5pdGVTY3JvbGxDb250YWluZXIsIGNvbmZpZyk7CiAgICBtb0Rvd25sb2FkZXJMb2coIlRpbWVsaW5l6aG16Z2i5rOo5YWl5oyJ6ZKuIik7CiAgfQoKICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT0KICAvLyA9ICAgIERvd25sb2FkIFV0aWxzICAgID0KICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT0KCiAgZnVuY3Rpb24gZG93bmxvYWRJbWFnZXMoaW1ncywgcHJlZml4ID0gIiIpIHsKICAgIG1vRG93bmxvYWRlckRlYnVnKCLmraPlnKjkuIvovb3lm77niYfvvJogIiArIGltZ3MpOwogICAgLy8gVGhhbmtzIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS95MjUyMzI4L0luc3RhZ3JhbV9Eb3dubG9hZF9CdXR0b24KICAgIGlmIChpbWdzLmxlbmd0aCA8PSAxMCkgewogICAgICAvLyDlkIzml7bmnIDlpJrkuIvovb3ljYHlvKDlm74KICAgICAgaW1ncy5mb3JFYWNoKChpbWcsIGluZGV4KSA9PgogICAgICAgIGRvd25sb2FkT25lSW1hZ2UoaW1nLCBhcHBlbmRJbmRleFRvUHJlZml4KHByZWZpeCwgaW5kZXgpKQogICAgICApOwogICAgfSBlbHNlIHsKICAgICAgLy8g6K6+572u5bu25pe25LiL6L295pu05aSa5Zu+54mHIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzU2MjQ0OTAyLzU2MjQ1NjEwIzU2MjQ1NjEwCiAgICAgIGltZ3MuZm9yRWFjaCgoaW1nLCBpbmRleCkgPT4gewogICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgewogICAgICAgICAgZG93bmxvYWRPbmVJbWFnZShpbWcsIGFwcGVuZEluZGV4VG9QcmVmaXgocHJlZml4LCBpbmRleCkpOwogICAgICAgIH0sIGluZGV4ICogMjAwKTsKICAgICAgfSk7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBhcHBlbmRJbmRleFRvUHJlZml4KHByZWZpeCwgaW5kZXgpIHsKICAgIHJldHVybiAoCiAgICAgIHByZWZpeCArCiAgICAgIChpbmRleCArIDEpLnRvTG9jYWxlU3RyaW5nKCJlbi1VUyIsIHsKICAgICAgICBtaW5pbXVtSW50ZWdlckRpZ2l0czogMywKICAgICAgICB1c2VHcm91cGluZzogZmFsc2UsCiAgICAgIH0pICsKICAgICAgIl8iCiAgICApOwogIH0KCiAgZnVuY3Rpb24gZG93bmxvYWRPbmVJbWFnZShpbWcsIHByZWZpeCA9ICIiKSB7CiAgICBmZXRjaChpbWcsIHsKICAgICAgaGVhZGVyczogbmV3IEhlYWRlcnMoewogICAgICAgIE9yaWdpbjogd2luZG93LmxvY2F0aW9uLm9yaWdpbiwKICAgICAgfSksCiAgICAgIG1vZGU6ICJjb3JzIiwKICAgICAgY2FjaGU6ICJuby1jYWNoZSIsCiAgICB9KQogICAgICAudGhlbigocmVzcG9uc2UpID0+IHJlc3BvbnNlLmJsb2IoKSkKICAgICAgLnRoZW4oKGJsb2IpID0+CiAgICAgICAgZG93bG9hZEJsb2IoCiAgICAgICAgICB3aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKSwKICAgICAgICAgIHByZWZpeCArIGltZy5zdWJzdHJpbmcoaW1nLmxhc3RJbmRleE9mKCIvIikgKyAxKQogICAgICAgICkKICAgICAgKQogICAgICAuY2F0Y2goKGUpID0+IG1vRG93bmxvYWRlckVycm9yKGUpKTsKICB9CgogIGZ1bmN0aW9uIGRvd25sb2FkVmlkZW8oYnV0dG9uLCB2aWRlbywgcHJlZml4ID0gIiIpIHsKICAgIGNvbnN0IHZpZGVvUmVxdWVzdFVSTCA9CiAgICAgICJodHRwczovL3Byb2R1Y3Rpb24tcHMubHZwLmxsbncubmV0L3IvUGxheWxpc3RTZXJ2aWNlL21lZGlhLzxtZWRpYUlkPi9nZXRNb2JpbGVQbGF5bGlzdEJ5TWVkaWFJZCI7CiAgICBmZXRjaCh2aWRlb1JlcXVlc3RVUkwucmVwbGFjZSgiPG1lZGlhSWQ+IiwgdmlkZW8pLCB7CiAgICAgIGhlYWRlcnM6IG5ldyBIZWFkZXJzKHsKICAgICAgICBPcmlnaW46IHdpbmRvdy5sb2NhdGlvbi5vcmlnaW4sCiAgICAgICAgUmVmZXJlcjogd2luZG93LmxvY2F0aW9uLm9yaWdpbiwKICAgICAgfSksCiAgICAgIG1vZGU6ICJjb3JzIiwKICAgICAgY2FjaGU6ICJuby1jYWNoZSIsCiAgICB9KQogICAgICAudGhlbigocmVzcG9uc2UpID0+IHJlc3BvbnNlLmpzb24oKSkKICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiB7CiAgICAgICAgLy8g5Li7bTN1OAogICAgICAgIGxldCBtM3U4VXJsID0gcmVzcG9uc2UubWVkaWFMaXN0WzBdLm1vYmlsZVVybHMKICAgICAgICAgIC5maW5kKCh2KSA9PiB2LnRhcmdldE1lZGlhUGxhdGZvcm0gPT0gIkh0dHBMaXZlU3RyZWFtaW5nIikKICAgICAgICAgIC5tb2JpbGVVcmwucmVwbGFjZSgiaHR0cDovLyIsICJodHRwczovLyIpOwogICAgICAgIGZldGNoKG0zdThVcmwpCiAgICAgICAgICAudGhlbigocmVzcG9uc2UpID0+IHJlc3BvbnNlLnRleHQoKSkKICAgICAgICAgIC50aGVuKChyZXNwb25zZSkgPT4gewogICAgICAgICAgICAvLyDojrflj5ZtM3U45Lit5pyA6auY5riF55qECiAgICAgICAgICAgIGNvbnN0IGJhbmR3aXRoUmUgPSAvQkFORFdJRFRIPShcZCspL2k7CiAgICAgICAgICAgIHZhciBlbGlnaWJsZVN0cmVhbXNSYXcgPSByZXNwb25zZQogICAgICAgICAgICAgIC5zcGxpdCgiI0VYVC1YLVNUUkVBTS1JTkY6IikKICAgICAgICAgICAgICAuc2xpY2UoMSk7CiAgICAgICAgICAgIGVsaWdpYmxlU3RyZWFtc1Jhdy5zb3J0KChhLCBiKSA9PiB7CiAgICAgICAgICAgICAgcmV0dXJuICgKICAgICAgICAgICAgICAgIHBhcnNlSW50KGIubWF0Y2goYmFuZHdpdGhSZSlbMV0pIC0KICAgICAgICAgICAgICAgIHBhcnNlSW50KGEubWF0Y2goYmFuZHdpdGhSZSlbMV0pCiAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIHZhciBjYW5kaWRhdGUgPSBlbGlnaWJsZVN0cmVhbXNSYXdbMF0uc3BsaXQoIlxuIilbMV07CiAgICAgICAgICAgIHJldHVybiBuZXcgVVJMKGNhbmRpZGF0ZSwgbmV3IFVSTChtM3U4VXJsKS5vcmlnaW4pLmhyZWY7CiAgICAgICAgICB9KQogICAgICAgICAgLnRoZW4oKG0zdThVcmwpID0+CiAgICAgICAgICAgIG9wZW5NM1U4VG9vbEJveCgKICAgICAgICAgICAgICBidXR0b24sCiAgICAgICAgICAgICAgbTN1OFVybCwKICAgICAgICAgICAgICBwcmVmaXggKyBnZXRGaWxlbmFtZUZyb21WaWRlb1VybChtM3U4VXJsKQogICAgICAgICAgICApCiAgICAgICAgICApOwogICAgICB9KTsKICB9CgogIGZ1bmN0aW9uIGRvd2xvYWRCbG9iKGJsb2IsIGZpbGVuYW1lKSB7CiAgICB2YXIgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTsKICAgIGEuZG93bmxvYWQgPSBmaWxlbmFtZTsKICAgIGEuaHJlZiA9IGJsb2I7CiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGEpOwogICAgYS5jbGljaygpOwogICAgYS5yZW1vdmUoKTsKICB9CgogIC8vID09PT09PT09PT09PT09PT09PT09CiAgLy8gPSAgICBNM1U4IFV0aWxzICAgID0KICAvLyA9PT09PT09PT09PT09PT09PT09PQoKICBmdW5jdGlvbiBvcGVuTTNVOFRvb2xCb3goYnV0dG9uLCBtM3U4VXJsLCBmaWxlbmFtZSkgewogICAgLy8g5omT5byAIGh0dHBzOi8vdG9vbHMudGhhdHdpbmQuY29tL3Rvb2wvbTN1OGRvd25sb2FkZXIKICAgIGlmIChpc01vYmlsZSgpKSB7CiAgICAgIGxldCBpZCA9IGJ0b2EoZW5jb2RlVVJJQ29tcG9uZW50KGZpbGVuYW1lKSk7CiAgICAgIHZhciBhID0gYnV0dG9uLnBhcmVudEVsZW1lbnQucXVlcnlTZWxlY3RvcigiYS5tby1kb3dubG9hZGVyIik7CiAgICAgIGlmICghYSkgewogICAgICAgIGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7CiAgICAgICAgdmFyIGFUZXh0ID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIueCueWHu+aJk+W8gOS4i+i9vemhtemdoiIpOwogICAgICAgIGEuY2xhc3NOYW1lID0gIm1vLWRvd25sb2FkZXIiOwogICAgICAgIGEuYXBwZW5kKGFUZXh0KTsKICAgICAgICBhLnRhcmdldCA9ICJfYmxhbmsiOwogICAgICAgIGEuaHJlZiA9IGNvbnN0cnVjdE0zVThUb29sQm94VVJMKG0zdThVcmwsIGZpbGVuYW1lKTsKICAgICAgICBidXR0b24ucGFyZW50RWxlbWVudC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJiciIpKTsKICAgICAgICBidXR0b24ucGFyZW50RWxlbWVudC5hcHBlbmRDaGlsZChhKTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTsKICAgICAgYS50YXJnZXQgPSAiX2JsYW5rIjsKICAgICAgYS5ocmVmID0gY29uc3RydWN0TTNVOFRvb2xCb3hVUkwobTN1OFVybCwgZmlsZW5hbWUpOwogICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGEpOwogICAgICBhLmNsaWNrKCk7CiAgICAgIGEucmVtb3ZlKCk7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBjb25zdHJ1Y3RNM1U4VG9vbEJveFVSTChtM3U4VXJsLCBmaWxlbmFtZSkgewogICAgdmFyIHVybCA9CiAgICAgICJodHRwczovL3Rvb2xzLnRoYXR3aW5kLmNvbS90b29sL20zdThkb3dubG9hZGVyIyIgKwogICAgICAibTN1OD0iICsKICAgICAgZW5jb2RlVVJJQ29tcG9uZW50KG0zdThVcmwpICsKICAgICAgIiZyZWZlcmVyPSIgKwogICAgICBlbmNvZGVVUklDb21wb25lbnQod2luZG93LmxvY2F0aW9uLmhyZWYpICsKICAgICAgIiZmaWxlbmFtZT0iICsKICAgICAgZmlsZW5hbWU7CiAgICBtb0Rvd25sb2FkZXJEZWJ1Zyh1cmwpOwogICAgcmV0dXJuIHVybDsKICB9CgogIC8vID09PT09PT09PT09PT09PT09PT09PT0KICAvLyA9ICAgIE5hbWluZyBVdGlscyAgICA9CiAgLy8gPT09PT09PT09PT09PT09PT09PT09PQoKICBmdW5jdGlvbiBnZXRQcmVmaXhGcm9tQXJ0aWNsZShhcnRpY2xlKSB7CiAgICB2YXIgY2FuZGlkYXRlID0KICAgICAgYXJ0aWNsZS5xdWVyeVNlbGVjdG9yKCIuYXJ0aWNsZV9faGVhZCIpIHx8CiAgICAgIGFydGljbGUucXVlcnlTZWxlY3RvcigiLmFydGljbGVfX2hlYWRlciIpIHx8CiAgICAgIGFydGljbGUucXVlcnlTZWxlY3RvcigiLnAtZGV0YWlsX2FydGljbGVfX2hlYWRlci10ZXh0IikgfHwKICAgICAgYXJ0aWNsZS5xdWVyeVNlbGVjdG9yKCIucC1nYWxsZXJ5X2RldGFpbF9faGVhZGVyIik7CiAgICBpZiAoY2FuZGlkYXRlKSB7CiAgICAgIHJldHVybiBzYW5pdGl6ZUZpbGVOYW1lKGNhbmRpZGF0ZS50ZXh0Q29udGVudCkgKyAiXyI7CiAgICB9CiAgICByZXR1cm4gZ2V0UHJlZml4RnJvbURvY3VtZW50KCk7CiAgfQoKICBmdW5jdGlvbiBnZXRQcmVmaXhGcm9tRG9jdW1lbnQoKSB7CiAgICAvLyDlpoLmnpzlrZjlnKjvvIzkvb/nlKhtb3ZpZeagh+mimAogICAgdmFyIGNhbmRpZGF0ZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIi5tb3ZpZS10aXRsZS1ibG9jayIpOwogICAgaWYgKGNhbmRpZGF0ZSkgewogICAgICByZXR1cm4gc2FuaXRpemVGaWxlTmFtZShjYW5kaWRhdGUudGV4dENvbnRlbnQpICsgIl8iOwogICAgfQogICAgcmV0dXJuIHNhbml0aXplRmlsZU5hbWUoZG9jdW1lbnQudGl0bGUuc3BsaXQoInwiKVswXSArICJfIik7CiAgfQoKICBmdW5jdGlvbiBnZXRGaWxlbmFtZUZyb21WaWRlb1VybCh1cmwpIHsKICAgIGxldCB0ZW1wTmFtZSA9IHVybC5yZXBsYWNlKCIvcm9vdC1tZXNzYWdlLWN4Zi1hcGFjaGUiLCAiIik7CiAgICB0ZW1wTmFtZSA9IHRlbXBOYW1lCiAgICAgIC5zdWJzdHJpbmcodGVtcE5hbWUubGFzdEluZGV4T2YoIi8iKSArIDEpCiAgICAgIC5yZXBsYWNlKCIubTN1OCIsICIudHMiKTsKICAgIHJldHVybiB0ZW1wTmFtZTsKICB9CgogIGZ1bmN0aW9uIHNhbml0aXplRmlsZU5hbWUoaW5wdXQsIHJlcGxhY2VtZW50ID0gIl8iKSB7CiAgICAvLyBUaGFua3MgdG8gaHR0cHM6Ly9naXRodWIuY29tL3BhcnNoYXAvbm9kZS1zYW5pdGl6ZS1maWxlbmFtZS9ibG9iL21hc3Rlci9pbmRleC5qcwogICAgY29uc3QgaWxsZWdhbFJlID0gL1tcL1w/PD5cXDpcKlx8Il0vZzsKICAgIGNvbnN0IGNvbnRyb2xSZSA9IC9bXHgwMC1ceDFmXHg4MC1ceDlmXS9nOwogICAgY29uc3QgcmVzZXJ2ZWRSZSA9IC9eXC4rJC87CiAgICBjb25zdCB3aW5kb3dzUmVzZXJ2ZWRSZSA9IC9eKGNvbnxwcm58YXV4fG51bHxjb21bMC05XXxscHRbMC05XSkoXC4uKik/JC9pOwogICAgY29uc3Qgd2luZG93c1RyYWlsaW5nUmUgPSAvW1wuIF0rJC87CiAgICByZXR1cm4gaW5wdXQKICAgICAgLnNwbGl0KC9ccy9nKQogICAgICAuZmlsdGVyKChzKSA9PiBzKQogICAgICAuam9pbigiXyIpCiAgICAgIC5yZXBsYWNlKGlsbGVnYWxSZSwgcmVwbGFjZW1lbnQpCiAgICAgIC5yZXBsYWNlKGNvbnRyb2xSZSwgcmVwbGFjZW1lbnQpCiAgICAgIC5yZXBsYWNlKHJlc2VydmVkUmUsIHJlcGxhY2VtZW50KQogICAgICAucmVwbGFjZSh3aW5kb3dzUmVzZXJ2ZWRSZSwgcmVwbGFjZW1lbnQpCiAgICAgIC5yZXBsYWNlKHdpbmRvd3NUcmFpbGluZ1JlLCByZXBsYWNlbWVudCk7CiAgfQoKICAvLyA9PT09PT09PT09PT09PT09PT09PT09PQogIC8vID0gICAgTG9nZ2luZyBVdGlscyAgICA9CiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT0KCiAgZnVuY3Rpb24gbW9Eb3dubG9hZGVyTG9nKG1zZykgewogICAgY29uc29sZS5sb2coIlttby1kb3dubG9kZXJdICIgKyBtc2cpOwogIH0KCiAgZnVuY3Rpb24gbW9Eb3dubG9hZGVyRGVidWcobXNnKSB7CiAgICBjb25zb2xlLmRlYnVnKCJbbW8tZG93bmxvZGVyXSAiICsgbXNnKTsKICB9CgogIGZ1bmN0aW9uIG1vRG93bmxvYWRlckVycm9yKG1zZykgewogICAgY29uc29sZS5lcnJvcigiW21vLWRvd25sb2Rlcl0gIiArIG1zZyk7CiAgfQp9KSgpOwo="
}