606c658db048ea7328ffe1c7ae2a732f.xml 110 KB
<module>
<baseinfo>
name=畅言评论模块
team=织梦团队
time=2014-02-17
email=tianya@desdev.cn
url=http://www.dedecms.com
hash=606c658db048ea7328ffe1c7ae2a732f
indexname=
indexurl=
ismember=0
autosetup=1
autodel=1
lang=utf-8
moduletype=soft
</baseinfo>
<systemfile>
<menustring>
PG06dG9wIG5hbWU9J+eVheiogOivhOiuuicgZGlzcGxheT0nYmxvY2snPg0KPG06aXRlbSBuYW1lPSfnlYXoqIDmqKHlnZcnIGxpbms9J2NoYW5neWFuX21haW4ucGhwJyByYW5rPSdzeXNfRmVlZGJhY2snIHRhcmdldD0nbWFpbicvPg0KPG06aXRlbSBuYW1lPSfor4TorrrnrqHnkIYnIGxpbms9J2NoYW5neWFuX21haW4ucGhwP2RvcG9zdD1tYW5hZ2UnIHJhbms9J3N5c19GZWVkYmFjaycgdGFyZ2V0PSdtYWluJy8+DQo8bTppdGVtIG5hbWU9J+aVsOaNrue7n+iuoScgbGluaz0nY2hhbmd5YW5fbWFpbi5waHA/ZG9wb3N0PXN0YXQnIHJhbms9J3N5c19GZWVkYmFjaycgdGFyZ2V0PSdtYWluJy8+DQo8bTppdGVtIG5hbWU9J+WvvOWFpeWvvOWHuicgbGluaz0nY2hhbmd5YW5fbWFpbi5waHA/ZG9wb3N0PWltcG9ydCcgcmFuaz0nc3lzX0ZlZWRiYWNrJyB0YXJnZXQ9J21haW4nLz4NCjxtOml0ZW0gbmFtZT0n55WF6KiA6K6+572uJyBsaW5rPSdjaGFuZ3lhbl9tYWluLnBocD9kb3Bvc3Q9c2V0dGluZycgcmFuaz0nc3lzX0ZlZWRiYWNrJyB0YXJnZXQ9J21haW4nLz4NCjwvbTp0b3A+
</menustring>
<readme>
PHAgc3R5bGU9J2xpbmUtaGVpZ2h0OjE1MCUnPjxkaXYgc3R5bGU9J3BhZGRpbmctbGVmdDoyMHB4O2xpbmUtaGVpZ2h0OjE1MCUnPjxiciAvPg0KPHA+54mI5p2D5omA5pyJIChjKTIwMDMtMjAxMe+8jERlZGVDbXMuY29tIOS/neeVmeaJgOacieadg+WIqeOAgiA8L3A+PGJyIC8+DQo8cD7mhJ/osKLmgqjpgInmi6nnu4fmoqblhoXlrrnnrqHnkIbns7vnu5/vvIjku6XkuIvnroDnp7BEZWRlQ21z77yJ77yMRGVkZUNtc+aYr+ebruWJjeWbveWGheacgOW8uuWkp+OAgeacgOeos+WumueahOS4reWwj+Wei+mXqOaIt+e9keermeW7uuiuvuino+WGs+aWueahiOS5i+S4gO+8jOWxheS6jiBQSFAgKyBNeVNRTCDnmoTmioDmnK/lvIDlj5HvvIzlhajpg6jmupDnoIHlvIDmlL7jgIJEZWRlQ21zIOeahOWumOaWuee9keWdgOaYr++8miB3d3cuZGVkZWNtcy5jb20gIOS6pOa1geiuuuWdm++8miBiYnMuZGVkZWNtcy5jb208L3A+PGJyIC8+DQo8cD7kuLrkuobkvb/kvaDmraPnoa7lubblkIjms5XnmoTkvb/nlKjmnKzova/ku7bvvIzor7fkvaDlnKjkvb/nlKjliY3liqHlv4XpmIXor7vmuIXmpZrkuIvpnaLnmoTljY/orq7mnaHmrL7vvJo8L3A+PGJyIC8+DQo8cD48c3Ryb25nPuS4gOOAgeacrOaOiOadg+WNj+iurumAgueUqOS4lOS7hemAgueUqOS6jiBEZWRlQ21zIDUueC54IOeJiOacrO+8jERlZGVDbXPlrpjmlrnlr7nmnKzmjojmnYPljY/orq7nmoTmnIDnu4jop6Pph4rmnYPjgIIgPC9zdHJvbmc+PC9wPjxiciAvPg0KPHA+PHN0cm9uZz7kuozjgIHljY/orq7orrjlj6/nmoTmnYPliKkgPC9zdHJvbmc+PGJyIC8+PGJyIC8+DQogIDHjgIHmgqjlj6/ku6XlnKjlrozlhajpgbXlrojmnKzmnIDnu4jnlKjmiLfmjojmnYPljY/orq7nmoTln7rnoYDkuIrvvIzlsIbmnKzova/ku7blupTnlKjkuo7pnZ7llYbkuJrnlKjpgJTvvIzogIzkuI3lv4XmlK/ku5jova/ku7bniYjmnYPmjojmnYPotLnnlKjjgIIgPGJyIC8+PGJyIC8+DQogIDLjgIHmgqjlj6/ku6XlnKjljY/orq7op4TlrprnmoTnuqbmnZ/lkozpmZDliLbojIPlm7TlhoXkv67mlLkgRGVkZUNtcyDmupDku6PnoIHmiJbnlYzpnaLpo47moLzku6XpgILlupTmgqjnmoTnvZHnq5nopoHmsYLjgIIgPGJyIC8+PGJyIC8+DQogIDPjgIHmgqjmi6XmnInkvb/nlKjmnKzova/ku7bmnoTlu7rnmoTnvZHnq5nlhajpg6jlhoXlrrnmiYDmnInmnYPvvIzlubbni6znq4vmib/mi4XkuI7ov5nkupvlhoXlrrnnmoTnm7jlhbPms5XlvovkuYnliqHjgIIgPGJyIC8+PGJyIC8+DQo044CB6I635b6X5ZWG5Lia5o6I5p2D5LmL5ZCO77yM5oKo5Y+v5Lul5bCG5pys6L2v5Lu25bqU55So5LqO5ZWG5Lia55So6YCU77yM5ZCM5pe25L6d5o2u5omA6LSt5Lmw55qE5o6I5p2D57G75Z6L5Lit56Gu5a6a55qE5oqA5pyv5pSv5oyB5YaF5a6577yM6Ieq6LSt5Lmw5pe25Yi76LW377yM5Zyo5oqA5pyv5pSv5oyB5pyf6ZmQ5YaF5oul5pyJ6YCa6L+H5oyH5a6a55qE5pa55byP6I635b6X5oyH5a6a6IyD5Zu05YaF55qE5oqA5pyv5pSv5oyB5pyN5Yqh44CC5ZWG5Lia5o6I5p2D55So5oi35Lqr5pyJ5Y+N5pig5ZKM5o+Q5Ye65oSP6KeB55qE5p2D5Yqb77yM55u45YWz5oSP6KeB5bCG6KKr5L2c5Li66aaW6KaB6ICD6JmR77yM5L2G5rKh5pyJ5LiA5a6a6KKr6YeH57qz55qE5om/6K+65oiW5L+d6K+B44CCIDwvcD48YnIgLz4NCjxwPjxzdHJvbmc+5LqM44CB5Y2P6K6u6KeE5a6a55qE57qm5p2f5ZKM6ZmQ5Yi2IDwvc3Ryb25nPjxiciAvPjxiciAvPg0KICAx44CB5pyq6I635ZWG5Lia5o6I5p2D5LmL5YmN77yM5LiN5b6X5bCG5pys6L2v5Lu255So5LqO5ZWG5Lia55So6YCU77yI5YyF5ous5L2G5LiN6ZmQ5LqO5LyB5Lia572R56uZ44CB57uP6JCl5oCn572R56uZ44CB5Lul6JCl5Yip5Li655uu55qE5oiW5a6e546w55uI5Yip55qE572R56uZ77yJ44CC6LSt5Lmw5ZWG5Lia5o6I5p2D6K+355m76ZmGIGJicy5kZWRlY21zLmNvbSDkuobop6PmnIDmlrDor7TmmI7jgIIgPGJyIC8+PGJyIC8+DQogIDLjgIHmnKrnu4/lrpjmlrnorrjlj6/vvIzkuI3lvpflr7nmnKzova/ku7bmiJbkuI7kuYvlhbPogZTnmoTllYbkuJrmjojmnYPov5vooYzlh7rnp5/jgIHlh7rllK7jgIHmirXmirzmiJblj5HmlL7lrZDorrjlj6/or4HjgIIgPGJyIC8+PGJyIC8+DQogIDPjgIHkuI3nrqHkvaDnmoTnvZHnq5nmmK/lkKbmlbTkvZPkvb/nlKggRGVkZUNtcyDvvIzov5jmmK/pg6jku73moI/nm67kvb/nlKggRGVkZUNtc++8jOWcqOS9oOS9v+eUqOS6hiBEZWRlQ21zIOeahOe9keermeS4u+mhteS4iuW/hemhu+WKoOS4iiBEZWRlQ21zIOWumOaWuee9keWdgCh3d3cuZGVkZWNtcy5jb20p55qE6ZO+5o6l44CCIDxiciAvPjxiciAvPg0KICA044CB5pyq57uP5a6Y5pa56K645Y+v77yM56aB5q2i5ZyoIERlZGVDbXMg55qE5pW05L2T5oiW5Lu75L2V6YOo5YiG5Z+656GA5LiK5Lul5Y+R5bGV5Lu75L2V5rS+55Sf54mI5pys44CB5L+u5pS554mI5pys5oiW56ys5LiJ5pa554mI5pys55So5LqO6YeN5paw5YiG5Y+R44CCIDxiciAvPjxiciAvPg0KNeOAgeWmguaenOaCqOacquiDvemBteWuiOacrOWNj+iurueahOadoeasvu+8jOaCqOeahOaOiOadg+Wwhuiiq+e7iOatou+8jOaJgOiiq+iuuOWPr+eahOadg+WIqeWwhuiiq+aUtuWbnu+8jOW5tuaJv+aLheebuOW6lOazleW+i+i0o+S7u+OAgiA8L3A+PGJyIC8+DQo8cD48c3Ryb25nPuS4ieOAgeaciemZkOaLheS/neWSjOWFjei0o+WjsOaYjiA8L3N0cm9uZz48YnIgLz48YnIgLz4NCiAgMeOAgeacrOi9r+S7tuWPiuaJgOmZhOW4pueahOaWh+S7tuaYr+S9nOS4uuS4jeaPkOS+m+S7u+S9leaYjuehrueahOaIlumakOWQq+eahOi1lOWBv+aIluaLheS/neeahOW9ouW8j+aPkOS+m+eahOOAgiA8YnIgLz48YnIgLz4NCiAgMuOAgeeUqOaIt+WHuuS6juiHquaEv+iAjOS9v+eUqOacrOi9r+S7tu+8jOaCqOW/hemhu+S6huino+S9v+eUqOacrOi9r+S7tueahOmjjumZqe+8jOWcqOWwmuacqui0reS5sOS6p+WTgeaKgOacr+acjeWKoeS5i+WJje+8jOaIkeS7rOS4jeaJv+ivuuWvueWFjei0ueeUqOaIt+aPkOS+m+S7u+S9leW9ouW8j+eahOaKgOacr+aUr+aMgeOAgeS9v+eUqOaLheS/ne+8jOS5n+S4jeaJv+aLheS7u+S9leWboOS9v+eUqOacrOi9r+S7tuiAjOS6p+eUn+mXrumimOeahOebuOWFs+i0o+S7u+OAgiA8YnIgLz48YnIgLz4NCiAgM+OAgeeUteWtkOaWh+acrOW9ouW8j+eahOaOiOadg+WNj+iuruWmguWQjOWPjOaWueS5pumdouetvue9sueahOWNj+iuruS4gOagt++8jOWFt+acieWujOWFqOeahOWSjOetieWQjOeahOazleW+i+aViOWKm+OAguaCqOS4gOaXpuW8gOWni+ehruiupOacrOWNj+iuruW5tuWuieijhSBEZWRlQ21z77yM5Y2z6KKr6KeG5Li65a6M5YWo55CG6Kej5bm25o6l5Y+X5pys5Y2P6K6u55qE5ZCE6aG55p2h5qy+77yM5Zyo5Lqr5pyJ5LiK6L+w5p2h5qy+5o6I5LqI55qE5p2D5Yqb55qE5ZCM5pe277yM5Y+X5Yiw55u45YWz55qE57qm5p2f5ZKM6ZmQ5Yi244CC5Y2P6K6u6K645Y+v6IyD5Zu05Lul5aSW55qE6KGM5Li677yM5bCG55u05o6l6L+d5Y+N5pys5o6I5p2D5Y2P6K6u5bm25p6E5oiQ5L615p2D77yM5oiR5Lus5pyJ5p2D6ZqP5pe257uI5q2i5o6I5p2D77yM6LSj5Luk5YGc5q2i5o2f5a6z77yM5bm25L+d55WZ6L+956m255u45YWz6LSj5Lu755qE5p2D5Yqb44CCIDxiciAvPjxiciAvPg0KNOOAgeWmguaenOacrOi9r+S7tuW4puacieWFtuWug+i9r+S7tueahOaVtOWQiEFQSeekuuiMg+S+i+WtkOWMhe+8jOi/meS6m+aWh+S7tueJiOadg+S4jeWxnuS6juacrOi9r+S7tuWumOaWue+8jOW5tuS4lOi/meS6m+aWh+S7tuaYr+ayoee7j+i/h+aOiOadg+WPkeW4g+eahO+8jOivt+WPguiAg+ebuOWFs+i9r+S7tueahOS9v+eUqOiuuOWPr+WQiOazleeahOS9v+eUqOOAgjwvcD48YnIgLz4NCjxwPuWNj+iuruWPkeW4g+aXtumXtO+8miAgMjAwN+W5tDEy5pyIMeaXpSBCeSBEZWRlQ21zLmNvbTwvcD48YnIgLz4NCjxwPjwvcD48L3A+
</readme>
<setupsql40>
RFJPUCBUQUJMRSBJRiBFWElTVFMgYCNAX19wbHVzX2NoYW5neWFuX3NldHRpbmdgOw0KQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgYCNAX19wbHVzX2NoYW5neWFuX3NldHRpbmdgICgNCiAgYHNrZXlgIHZhcmNoYXIoMjU1KSBOT1QgTlVMTCBERUZBVUxUICcnLA0KICBgc3ZhbHVlYCB0ZXh0IE5PVCBOVUxMLA0KICBgc3RpbWVgIGludCgxMCkgTk9UIE5VTEwsDQogIFBSSU1BUlkgS0VZIChgc2tleWApDQopIFRZUEU9TXlJU0FNOw0KSU5TRVJUIElOVE8gYCNAX19wbHVzX2NoYW5neWFuX3NldHRpbmdgIChgc2tleWAsIGBzdmFsdWVgLCBgc3RpbWVgKSBWQUxVRVMNCignYXBwaWQnLCAnMCcsIDApLA0KKCdpZCcsICcwJywgMCksDQooJ2lzdl9pZCcsICcwJywgMCksDQooJ3VzZXInLCAnMCcsIDApLA0KKCdwd2QnLCAnMCcsIDApOw==
</setupsql40>
<delsql>
RFJPUCBUQUJMRSBJRiBFWElTVFMgYCNAX19wbHVzX2NoYW5neWFuX3NldHRpbmdgOw0KRFJPUCBUQUJMRSBJRiBFWElTVFMgYCNAX19wbHVzX2NoYW5neWFuX2ltcG9ydGlkc2A7DQpEUk9QIFRBQkxFIElGIEVYSVNUUyBgI0BfX3BsdXNfY2hhbmd5YW5faW5zZXJ0aWRzYDs=
</delsql>
<setup>

</setup>
<uninstall>

</uninstall>
<oldfilelist>
../include/helpers/changyan.helper.php
../include/taglib/changyan.lib.php
changyan_main.php
</oldfilelist>
</systemfile>

<modulefiles>
<file type='file' name='../include/helpers/changyan.helper.php'>
PD9waHAgaWYoIWRlZmluZWQoJ0RFREVJTkMnKSkgZXhpdCgnZGVkZWNtcycpOw0KDQpkZWZpbmUoJ0NIQU5HWUFOX0FQSV9BRVMnLCAnaHR0cDovL2NoYW5neWFuLmFwaS5kZWRlY21zLmNvbS8nKTsNCmRlZmluZSgnQ0hBTkdZQU5fQVBJX1JFRycsICdodHRwOi8vY2hhbmd5YW4uc29odS5jb20vYWRtaW4vYXBpL29wZW4vcmVnJyk7DQpkZWZpbmUoJ0NIQU5HWUFOX0FQSV9BVVRPUkVHJywgJ2h0dHA6Ly9jaGFuZ3lhbi5zb2h1LmNvbS9hZG1pbi9hcGkvb3Blbi9hdXRvLXJlZycpOw0KZGVmaW5lKCdDSEFOR1lBTl9BUElfTE9HSU4nLCAnaHR0cDovL2NoYW5neWFuLnNvaHUuY29tL2FkbWluL2FwaS9vcGVuL3ZhbGlkYXRlJyk7DQpkZWZpbmUoJ0NIQU5HWUFOX0FQSV9TRVRDT09LSUUnLCAnaHR0cDovL2NoYW5neWFuLnNvaHUuY29tL2FkbWluL2FwaS9vcGVuL3NldC1jb29raWUnKTsNCmRlZmluZSgnQ0hBTkdZQU5fQVBJX0lTTkVXJywgJ2h0dHA6Ly9jaGFuZ3lhbi5zb2h1LmNvbS9hZG1pbi9hcGkvcmVjZW50LWNvbW1lbnQtdG9waWNzJyk7DQpkZWZpbmUoJ0NIQU5HWUFOX0FQSV9MQVRFU1RTJywgJ2h0dHA6Ly9jaGFuZ3lhbi5zb2h1LmNvbS9hcGkvMi9jb21tZW50L2xhdGVzdHMnKTsNCmRlZmluZSgnQ0hBTkdZQU5fQVBJX1JFQ0VOVCcsICdodHRwOi8vY2hhbmd5YW4uc29odS5jb20vYWRtaW4vYXBpL3JlY2VudC1jb21tZW50LXRvcGljcycpOw0KZGVmaW5lKCdDSEFOR1lBTl9BUElfQ09ERScsICdodHRwOi8vY2hhbmd5YW4uc29odS5jb20vYWRtaW4vYXBpL29wZW4vZ2V0LWNvZGUnKTsNCmRlZmluZSgnQ0hBTkdZQU5fQVBJX0FERFNJVEUnLCAnaHR0cDovL2NoYW5neWFuLnNvaHUuY29tL2FkbWluL2FwaS9vcGVuL2FkZC1pc3YnKTsNCmRlZmluZSgnQ0hBTkdZQU5fQVBJX0NIQU5HRV9JU1YnLCAnaHR0cDovL2NoYW5neWFuLnNvaHUuY29tL2NoYW5nZS1pc3YvJyk7DQpkZWZpbmUoJ0NIQU5HWUFOX0FQSV9DSEVDS19MT0dJTicsICdodHRwOi8vY2hhbmd5YW4uc29odS5jb20vY2hlY2stbG9naW4nKTsNCmRlZmluZSgnQ0hBTkdZQU5fQVBJX0dFVEFQUEtFWScsICdodHRwOi8vY2hhbmd5YW4uc29odS5jb20vIGFkbWluL2FwaS9vcGVuL2dldC1hcHBrZXknKTsNCmRlZmluZSgnQ0hBTkdZQU5fQVBJX0NPTU1FTlRTJywgJ2h0dHA6Ly9jaGFuZ3lhbi5zb2h1LmNvbS9hcGkvMi90b3BpYy9jb21tZW50cycpOw0KZGVmaW5lKCdDSEFOR1lBTl9BUElfSU1QT1JUJywgJ2h0dHA6Ly9jaGFuZ3lhbi5zb2h1LmNvbS9hZG1pbi9hcGkvaW1wb3J0L2NvbW1lbnQnKTsNCmRlZmluZSgnQ0hBTkdZQU5fQVBJX0dFVElTVlMnLCAnaHR0cDovL2NoYW5neWFuLnNvaHUuY29tL2FkbWluL2FwaS9vcGVuL2dldC1pc3ZzJyk7DQpkZWZpbmUoJ0NIQU5HWUFOX0FQSV9HRVRJU1ZTX0pTT05QJywgJ2h0dHA6Ly9jaGFuZ3lhbi5zb2h1LmNvbS9hZG1pbi9hcGkvb3Blbi9nZXQtaXN2cy1qc29ucCcpOw0KZGVmaW5lKCdDSEFOR1lBTl9BUElfQklOREFDQycsICdodHRwOi8vY2hhbmd5YW4uc29odS5jb20vYWRtaW4vYXBpL29wZW4vbW9kLW9waW5mbycpOw0KZGVmaW5lKCdDSEFOR1lBTl9BUElfRk9SR0VUX1BXRCcsICdodHRwOi8vY2hhbmd5YW4uc29odS5jb20vcGxhdGZvcm0vZm9yZ2V0LXB3ZCcpOw0KDQpkZWZpbmUoJ0NIQU5HWUFOX0NMSUVOVF9JRCcsICdjYXFYWUllMzInKTsNCmRlZmluZSgnQ0hBTkdZQU5fQ0xJRU5UX0tFWScsICdiY2I1ODU2MjhiNTk1ODQ4OTFmZjU4OTdiZTg4OGM0NScpOw0KDQpkZWZpbmUoJ0NIQU5HWUFOX0pRVUVSWV9TUkMnLCAnPHNjcmlwdD53aW5kb3cualF1ZXJ5IHx8IGRvY3VtZW50LndyaXRlKHVuZXNjYXBlKFwnJTNDc2NyaXB0IHNyYz0iaHR0cDovL2NoYW5neWFuLmFwaS5kZWRlY21zLmNvbS9hc3NldHMvanMvanF1ZXJ5Lm1pbi5qcyIlM0UlM0Mvc2NyaXB0JTNFXCcpKTwvc2NyaXB0PicpOw0KDQpkZWZpbmUoJ0NIQU5HWUFOX1ZFUicsICcwLjAuMTAnKTsNCg0KJEdMT0JBTFNbJ3VwZGF0ZV9zcWxzJ109YXJyYXkoDQogICAgJzAuMC4yJz0+YXJyYXkoDQogICAgICAgICJJTlNFUlQgSU5UTyBgI0BfX3BsdXNfY2hhbmd5YW5fc2V0dGluZ2AgKGBza2V5YCwgYHN2YWx1ZWAsIGBzdGltZWApIFZBTFVFUyAoJ2xhc3RfZXhwb3J0JywgJzAnLCAwKTsiLA0KICAgICAgICAiSU5TRVJUIElOVE8gYCNAX19wbHVzX2NoYW5neWFuX3NldHRpbmdgIChgc2tleWAsIGBzdmFsdWVgLCBgc3RpbWVgKSBWQUxVRVMgKCdsYXN0X2ltcG9ydCcsICcwJywgMCk7IiwNCiAgICAgICAgIklOU0VSVCBJTlRPIGAjQF9fcGx1c19jaGFuZ3lhbl9zZXR0aW5nYCAoYHNrZXlgLCBgc3ZhbHVlYCwgYHN0aW1lYCkgVkFMVUVTICgndmVyc2lvbicsICcwLjAuMicsIDApOyIsDQogICAgICAgICJJTlNFUlQgSU5UTyBgI0BfX3BsdXNfY2hhbmd5YW5fc2V0dGluZ2AgKGBza2V5YCwgYHN2YWx1ZWAsIGBzdGltZWApIFZBTFVFUyAoJ2lzdl9hcHBfa2V5JywgJzAnLCAwKTsiLA0KICAgICAgICAiQ1JFQVRFIFRBQkxFIGAjQF9fcGx1c19jaGFuZ3lhbl9pbnNlcnRpZHNgIChgaWRgIElOVCgxMCkgTk9UIE5VTEwgQVVUT19JTkNSRU1FTlQsDQogICAgICAgICAgICBgYWlkYCBJTlQoMTApIE5VTEwgREVGQVVMVCAnMCcsDQogICAgICAgICAgICBgY29tbWVudF9pZGAgSU5UKDEyKSBOVUxMIERFRkFVTFQgJzAnLA0KICAgICAgICAgICAgUFJJTUFSWSBLRVkgKGBpZGApLA0KICAgICAgICAgICAgVU5JUVVFIElOREVYIGBjb21tZW50X2lkYCAoYGNvbW1lbnRfaWRgKQ0KICAgICAgICApDQogICAgICAgIFRZUEU9TXlJU0FNOyIsDQogICAgICAgICJDUkVBVEUgVEFCTEUgYCNAX19wbHVzX2NoYW5neWFuX2ltcG9ydGlkc2AgKGBpZGAgSU5UKDEwKSBOT1QgTlVMTCBBVVRPX0lOQ1JFTUVOVCwNCiAgICAgICAgICAgIGBhaWRgIElOVCgxMCkgTlVMTCBERUZBVUxUICcwJywNCiAgICAgICAgICAgIGBmZWVkYmFja19pZGAgSU5UKDEyKSBOVUxMIERFRkFVTFQgJzAnLA0KICAgICAgICAgICAgUFJJTUFSWSBLRVkgKGBpZGApLA0KICAgICAgICAgICAgVU5JUVVFIElOREVYIGBmZWVkYmFja19pZGAgKGBmZWVkYmFja19pZGApDQogICAgICAgICkNCiAgICAgICAgVFlQRT1NeUlTQU07IiwNCiAgICApLA0KICAgICcwLjAuMyc9PmFycmF5KA0KICAgICAgICAiVVBEQVRFIGAjQF9fcGx1c19jaGFuZ3lhbl9zZXR0aW5nYCBTRVQgYHN2YWx1ZWA9JzAuMC4zJyBXSEVSRSBgc2tleWA9J3ZlcnNpb24nOyIsDQogICAgKSwNCiAgICAnMC4wLjQnPT5hcnJheSgNCiAgICAgICAgIlVQREFURSBgI0BfX3BsdXNfY2hhbmd5YW5fc2V0dGluZ2AgU0VUIGBzdmFsdWVgPScwLjAuNCcgV0hFUkUgYHNrZXlgPSd2ZXJzaW9uJzsiLA0KICAgICksDQogICAgJzAuMC41Jz0+YXJyYXkoDQogICAgICAgICJVUERBVEUgYCNAX19wbHVzX2NoYW5neWFuX3NldHRpbmdgIFNFVCBgc3ZhbHVlYD0nMC4wLjUnIFdIRVJFIGBza2V5YD0ndmVyc2lvbic7IiwNCiAgICApLA0KICAgICcwLjAuNic9PmFycmF5KA0KICAgICAgICAiVVBEQVRFIGAjQF9fcGx1c19jaGFuZ3lhbl9zZXR0aW5nYCBTRVQgYHN2YWx1ZWA9JzAuMC42JyBXSEVSRSBgc2tleWA9J3ZlcnNpb24nOyIsDQogICAgKSwNCiAgICAnMC4wLjcnPT5hcnJheSgNCiAgICAgICAgIlVQREFURSBgI0BfX3BsdXNfY2hhbmd5YW5fc2V0dGluZ2AgU0VUIGBzdmFsdWVgPScwLjAuNycgV0hFUkUgYHNrZXlgPSd2ZXJzaW9uJzsiLA0KICAgICksDQogICAgJzAuMC44Jz0+YXJyYXkoDQogICAgICAgICJVUERBVEUgYCNAX19wbHVzX2NoYW5neWFuX3NldHRpbmdgIFNFVCBgc3ZhbHVlYD0nMC4wLjgnIFdIRVJFIGBza2V5YD0ndmVyc2lvbic7IiwNCiAgICApLA0KICAgICcwLjAuOSc9PmFycmF5KA0KICAgICAgICAiVVBEQVRFIGAjQF9fcGx1c19jaGFuZ3lhbl9zZXR0aW5nYCBTRVQgYHN2YWx1ZWA9JzAuMC45JyBXSEVSRSBgc2tleWA9J3ZlcnNpb24nOyIsDQogICAgKSwNCiAgICAnMC4wLjEwJz0+YXJyYXkoDQogICAgICAgICJVUERBVEUgYCNAX19wbHVzX2NoYW5neWFuX3NldHRpbmdgIFNFVCBgc3ZhbHVlYD0nMC4wLjEwJyBXSEVSRSBgc2tleWA9J3ZlcnNpb24nOyIsDQogICAgKSwNCik7DQoNCmhlbHBlcignY2FjaGUnKTsNCg0KZnVuY3Rpb24gY2hhbmd5YW5fY2xlYXJjYWNoZSgpDQp7DQogICAgJHByZWZpeCA9ICdjaGFuZ3lhbic7DQogICAgJGtleSA9ICdjb2RlJzsNCiAgICBEZWxDYWNoZSgkcHJlZml4LCAka2V5KTsNCn0NCg0KZnVuY3Rpb24gY2hhbmd5YW5fbWNoU3RyQ29kZSgkc3RyaW5nLCAkb3BlcmF0aW9uID0gJ0VOQ09ERScpIA0Kew0KICAgICRrZXlfbGVuZ3RoID0gNDsNCiAgICAkZXhwaXJ5ID0gMDsNCiAgICAka2V5ID0gbWQ1KCRHTE9CQUxTWydjZmdfY29va2llX2VuY29kZSddKTsNCiAgICAkZml4ZWRrZXkgPSBtZDUoJGtleSk7DQogICAgJGVnaXNrZXlzID0gbWQ1KHN1YnN0cigkZml4ZWRrZXksIDE2LCAxNikpOw0KICAgICRydW50b2tleSA9ICRrZXlfbGVuZ3RoID8gKCRvcGVyYXRpb24gPT0gJ0VOQ09ERScgPyBzdWJzdHIobWQ1KG1pY3JvdGltZSh0cnVlKSksIC0ka2V5X2xlbmd0aCkgOiBzdWJzdHIoJHN0cmluZywgMCwgJGtleV9sZW5ndGgpKSA6ICcnOw0KICAgICRrZXlzID0gbWQ1KHN1YnN0cigkcnVudG9rZXksIDAsIDE2KSAuIHN1YnN0cigkZml4ZWRrZXksIDAsIDE2KSAuIHN1YnN0cigkcnVudG9rZXksIDE2KSAuIHN1YnN0cigkZml4ZWRrZXksIDE2KSk7DQogICAgJHN0cmluZyA9ICRvcGVyYXRpb24gPT0gJ0VOQ09ERScgPyBzcHJpbnRmKCclMDEwZCcsICRleHBpcnkgPyAkZXhwaXJ5ICsgdGltZSgpIDogMCkuc3Vic3RyKG1kNSgkc3RyaW5nLiRlZ2lza2V5cyksIDAsIDE2KSAuICRzdHJpbmcgOiBiYXNlNjRfZGVjb2RlKHN1YnN0cigkc3RyaW5nLCAka2V5X2xlbmd0aCkpOw0KDQogICAgJGkgPSAwOyAkcmVzdWx0ID0gJyc7DQogICAgJHN0cmluZ19sZW5ndGggPSBzdHJsZW4oJHN0cmluZyk7DQogICAgZm9yICgkaSA9IDA7ICRpIDwgJHN0cmluZ19sZW5ndGg7ICRpKyspew0KICAgICAgICAkcmVzdWx0IC49IGNocihvcmQoJHN0cmluZ3skaX0pIF4gb3JkKCRrZXlzeyRpICUgMzJ9KSk7DQogICAgfQ0KICAgIGlmKCRvcGVyYXRpb24gPT0gJ0VOQ09ERScpIHsNCiAgICAgICAgcmV0dXJuICRydW50b2tleSAuIHN0cl9yZXBsYWNlKCc9JywgJycsIGJhc2U2NF9lbmNvZGUoJHJlc3VsdCkpOw0KICAgIH0gZWxzZSB7DQogICAgICAgIGlmKChzdWJzdHIoJHJlc3VsdCwgMCwgMTApID09IDAgfHwgc3Vic3RyKCRyZXN1bHQsIDAsIDEwKSAtIHRpbWUoKSA+IDApICYmIHN1YnN0cigkcmVzdWx0LCAxMCwgMTYpID09IHN1YnN0cihtZDUoc3Vic3RyKCRyZXN1bHQsIDI2KS4kZWdpc2tleXMpLCAwLCAxNikpIHsNCiAgICAgICAgICAgIHJldHVybiBzdWJzdHIoJHJlc3VsdCwgMjYpOw0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgcmV0dXJuICcnOw0KICAgICAgICB9DQogICAgfQ0KfQ0KDQpmdW5jdGlvbiBjaGFuZ3lhbl9RdW90ZV9yZXBsYWNlKCRxdW90ZSkNCnsNCiAgICAkcXVvdGUgPSBzdHJfcmVwbGFjZSgne3F1b3RlfScsJycsJHF1b3RlKTsNCiAgICAkcXVvdGUgPSBzdHJfcmVwbGFjZSgne3RpdGxlfScsJycsJHF1b3RlKTsNCiAgICAkcXVvdGUgPSBzdHJfcmVwbGFjZSgney90aXRsZX0nLCcnLCRxdW90ZSk7DQogICAgJHF1b3RlID0gc3RyX3JlcGxhY2UoJyZsdDtici8mZ3Q7JywiXG5cciIsJHF1b3RlKTsNCiAgICAkcXVvdGUgPSBzdHJfcmVwbGFjZSgnJmx0OycsICcnLCAkcXVvdGUpOw0KICAgICRxdW90ZSA9IHN0cl9yZXBsYWNlKCcmZ3Q7JywgJycsICRxdW90ZSk7DQogICAgJHF1b3RlID0gc3RyX3JlcGxhY2UoJ3tjb250ZW50fScsJycsJHF1b3RlKTsNCiAgICAkcXVvdGUgPSBzdHJfcmVwbGFjZSgney9jb250ZW50fScsJycsJHF1b3RlKTsNCiAgICAkcXVvdGUgPSBzdHJfcmVwbGFjZSgney9xdW90ZX0nLCcnLCRxdW90ZSk7DQogICAgcmV0dXJuICRxdW90ZTsNCn0NCg0KDQovL+abtOaWsOmFjee9ruWHveaVsA0KZnVuY3Rpb24gY2hhbmd5YW5fUmVXcml0ZUNvbmZpZygpDQp7DQogICAgZ2xvYmFsICRkc3FsOw0KICAgICRjb25maWdmaWxlID0gREVERURBVEEuJy9jb25maWcuY2FjaGUuaW5jLnBocCc7DQogICAgaWYoIWlzX3dyaXRlYWJsZSgkY29uZmlnZmlsZSkpDQogICAgew0KICAgICAgICBlY2hvICLphY3nva7mlofku7YneyRjb25maWdmaWxlfSfkuI3mlK/mjIHlhpnlhaXvvIzml6Dms5Xkv67mlLnns7vnu5/phY3nva7lj4LmlbDvvIEiOw0KICAgICAgICBleGl0KCk7DQogICAgfQ0KICAgICRmcCA9IGZvcGVuKCRjb25maWdmaWxlLCd3Jyk7DQogICAgZmxvY2soJGZwLDMpOw0KICAgIGZ3cml0ZSgkZnAsIjwiLiI/cGhwXHJcbiIpOw0KICAgICRkc3FsLT5TZXRRdWVyeSgiU0VMRUNUIGB2YXJuYW1lYCxgdHlwZWAsYHZhbHVlYCxgZ3JvdXBpZGAgRlJPTSBgI0BfX3N5c2NvbmZpZ2AgT1JERVIgQlkgYWlkIEFTQyAiKTsNCiAgICAkZHNxbC0+RXhlY3V0ZSgpOw0KICAgIHdoaWxlKCRyb3cgPSAkZHNxbC0+R2V0QXJyYXkoKSkNCiAgICB7DQogICAgICAgIGlmKCRyb3dbJ3R5cGUnXT09J251bWJlcicpDQogICAgICAgIHsNCiAgICAgICAgICAgIGlmKCRyb3dbJ3ZhbHVlJ109PScnKSAkcm93Wyd2YWx1ZSddID0gMDsNCiAgICAgICAgICAgIGZ3cml0ZSgkZnAsIlwkeyRyb3dbJ3Zhcm5hbWUnXX0gPSAiLiRyb3dbJ3ZhbHVlJ10uIjtcclxuIik7DQogICAgICAgIH0NCiAgICAgICAgZWxzZQ0KICAgICAgICB7DQogICAgICAgICAgICBmd3JpdGUoJGZwLCJcJHskcm93Wyd2YXJuYW1lJ119ID0gJyIuc3RyX3JlcGxhY2UoIiciLCcnLCRyb3dbJ3ZhbHVlJ10pLiInO1xyXG4iKTsNCiAgICAgICAgfQ0KICAgIH0NCiAgICBmd3JpdGUoJGZwLCI/Ii4iPiIpOw0KICAgIGZjbG9zZSgkZnApOw0KfQ0KDQpmdW5jdGlvbiBjaGFuZ3lhbl9odHRwX3NlbmQoJHVybCwgJGxpbWl0PTAsICRwb3N0PScnLCAkY29va2llPScnLCAkdGltZW91dD0xNSkNCnsNCiAgICAkcmV0dXJuID0gJyc7DQogICAgJG1hdGNoZXMgPSBwYXJzZV91cmwoJHVybCk7DQogICAgJHNjaGVtZSA9ICRtYXRjaGVzWydzY2hlbWUnXTsNCiAgICAkaG9zdCA9ICRtYXRjaGVzWydob3N0J107DQogICAgJHBhdGggPSAkbWF0Y2hlc1sncGF0aCddID8gJG1hdGNoZXNbJ3BhdGgnXS4oQCRtYXRjaGVzWydxdWVyeSddID8gJz8nLiRtYXRjaGVzWydxdWVyeSddIDogJycpIDogJy8nOw0KICAgICRwb3J0ID0gIWVtcHR5KCRtYXRjaGVzWydwb3J0J10pID8gJG1hdGNoZXNbJ3BvcnQnXSA6IDgwOw0KDQogICAgaWYgKGZ1bmN0aW9uX2V4aXN0cygnY3VybF9pbml0JykgJiYgZnVuY3Rpb25fZXhpc3RzKCdjdXJsX2V4ZWMnKSkgew0KICAgICAgICAkY2ggPSBjdXJsX2luaXQoKTsNCiAgICAgICAgY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX1VSTCwgJHNjaGVtZS4nOi8vJy4kaG9zdC4nOicuJHBvcnQuJHBhdGgpOw0KICAgICAgICBjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfUkVUVVJOVFJBTlNGRVIsIDEpOw0KICAgICAgICBjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfRk9MTE9XTE9DQVRJT04sIDEpOw0KICAgICAgICBpZiAoJHBvc3QpIHsNCiAgICAgICAgICAgIGN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9QT1NULCAxKTsNCiAgICAgICAgICAgICRjb250ZW50ID0gaXNfYXJyYXkoJHBvc3QpID8gaHR0cF9idWlsZF9xdWVyeSgkcG9zdCkgOiAkcG9zdDsNCiAgICAgICAgICAgIGN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9QT1NURklFTERTLCB1cmxkZWNvZGUoJGNvbnRlbnQpKTsNCiAgICAgICAgfQ0KICAgICAgICBpZiAoJGNvb2tpZSkgew0KICAgICAgICAgICAgY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX0NPT0tJRSwgJGNvb2tpZSk7DQogICAgICAgIH0NCiAgICAgICAgY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX0NPTk5FQ1RUSU1FT1VULCAkdGltZW91dCk7DQogICAgICAgIGN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9USU1FT1VULCA5MDApOw0KICAgICAgICAkZGF0YSA9IGN1cmxfZXhlYygkY2gpOw0KICAgICAgICAkc3RhdHVzID0gY3VybF9nZXRpbmZvKCRjaCk7DQogICAgICAgICRlcnJubyA9IGN1cmxfZXJybm8oJGNoKTsNCiAgICAgICAgY3VybF9jbG9zZSgkY2gpOw0KICAgICAgICBpZiAoJGVycm5vIHx8ICRzdGF0dXNbJ2h0dHBfY29kZSddICE9IDIwMCkgew0KICAgICAgICAgICAgcmV0dXJuOw0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgcmV0dXJuICEkbGltaXQgPyAkZGF0YSA6IHN1YnN0cigkZGF0YSwgMCwgJGxpbWl0KTsNCiAgICAgICAgfQ0KICAgIH0NCg0KICAgIGlmICgkcG9zdCkgew0KICAgICAgICAkY29udGVudCA9IGlzX2FycmF5KCRwb3J0KSA/IHVybGRlY29kZShodHRwX2J1aWxkX3F1ZXJ5KCRwb3N0KSkgOiAkcG9zdDsNCiAgICAgICAgJG91dCA9ICJQT1NUICRwYXRoIEhUVFAvMS4wXHJcbiI7DQogICAgICAgICRoZWFkZXIgPSAiQWNjZXB0OiAqLypcclxuIjsNCiAgICAgICAgJGhlYWRlciAuPSAiQWNjZXB0LUxhbmd1YWdlOiB6aC1jblxyXG4iOw0KICAgICAgICAkaGVhZGVyIC49ICJDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZFxyXG4iOw0KICAgICAgICAkaGVhZGVyIC49ICJVc2VyLUFnZW50OiAiLkAkX1NFUlZFUlsnSFRUUF9VU0VSX0FHRU5UJ10uIlxyXG4iOw0KICAgICAgICAkaGVhZGVyIC49ICJIb3N0OiAkaG9zdDokcG9ydFxyXG4iOw0KICAgICAgICAkaGVhZGVyIC49ICdDb250ZW50LUxlbmd0aDogJy5zdHJsZW4oJGNvbnRlbnQpLiJcclxuIjsNCiAgICAgICAgJGhlYWRlciAuPSAiQ29ubmVjdGlvbjogQ2xvc2VcclxuIjsNCiAgICAgICAgJGhlYWRlciAuPSAiQ2FjaGUtQ29udHJvbDogbm8tY2FjaGVcclxuIjsNCiAgICAgICAgJGhlYWRlciAuPSAiQ29va2llOiAkY29va2llXHJcblxyXG4iOw0KICAgICAgICAkb3V0IC49ICRoZWFkZXIuJGNvbnRlbnQ7DQogICAgfSBlbHNlIHsNCiAgICAgICAgJG91dCA9ICJHRVQgJHBhdGggSFRUUC8xLjBcclxuIjsNCiAgICAgICAgJGhlYWRlciA9ICJBY2NlcHQ6ICovKlxyXG4iOw0KICAgICAgICAkaGVhZGVyIC49ICJBY2NlcHQtTGFuZ3VhZ2U6IHpoLWNuXHJcbiI7DQogICAgICAgICRoZWFkZXIgLj0gIlVzZXItQWdlbnQ6ICIuQCRfU0VSVkVSWydIVFRQX1VTRVJfQUdFTlQnXS4iXHJcbiI7DQogICAgICAgICRoZWFkZXIgLj0gIkhvc3Q6ICRob3N0OiRwb3J0XHJcbiI7DQogICAgICAgICRoZWFkZXIgLj0gIkNvbm5lY3Rpb246IENsb3NlXHJcbiI7DQogICAgICAgICRoZWFkZXIgLj0gIkNvb2tpZTogJGNvb2tpZVxyXG5cclxuIjsNCiAgICAgICAgJG91dCAuPSAkaGVhZGVyOw0KICAgIH0NCg0KICAgICRmcGZsYWcgPSAwOw0KICAgICRmcCA9IGZhbHNlOw0KICAgIGlmIChmdW5jdGlvbl9leGlzdHMoJ2Zzb2NrZXRvcGVuJykpIHsNCiAgICAgICAgJGZwID0gZnNvY2tldG9wZW4oJGhvc3QsICRwb3J0LCAkZXJybm8sICRlcnJzdHIsICR0aW1lb3V0KTsNCiAgICB9DQogICAgaWYgKCEkZnApIHsNCiAgICAgICAgJGNvbnRleHQgPSBzdHJlYW1fY29udGV4dF9jcmVhdGUoYXJyYXkoDQogICAgICAgICAgICAnaHR0cCcgPT4gYXJyYXkoDQogICAgICAgICAgICAgICAgJ21ldGhvZCcgPT4gJHBvc3QgPyAnUE9TVCcgOiAnR0VUJywNCiAgICAgICAgICAgICAgICAnaGVhZGVyJyA9PiAkaGVhZGVyLA0KICAgICAgICAgICAgICAgICdjb250ZW50JyA9PiAkY29udGVudCwNCiAgICAgICAgICAgICAgICAndGltZW91dCcgPT4gJHRpbWVvdXQsDQogICAgICAgICAgICApLA0KICAgICAgICApKTsNCiAgICAgICAgJGZwID0gQGZvcGVuKCRzY2hlbWUuJzovLycuJGhvc3QuJzonLiRwb3J0LiRwYXRoLCAnYicsIGZhbHNlLCAkY29udGV4dCk7DQogICAgICAgICRmcGZsYWcgPSAxOw0KICAgIH0NCg0KICAgIGlmICghJGZwKSB7DQogICAgICAgIHJldHVybiAnJzsNCiAgICB9IGVsc2Ugew0KICAgICAgICBzdHJlYW1fc2V0X2Jsb2NraW5nKCRmcCwgdHJ1ZSk7DQogICAgICAgIHN0cmVhbV9zZXRfdGltZW91dCgkZnAsICR0aW1lb3V0KTsNCiAgICAgICAgQGZ3cml0ZSgkZnAsICRvdXQpOw0KICAgICAgICAkc3RhdHVzID0gc3RyZWFtX2dldF9tZXRhX2RhdGEoJGZwKTsNCiAgICAgICAgaWYgKCEkc3RhdHVzWyd0aW1lZF9vdXQnXSkgew0KICAgICAgICAgICAgd2hpbGUgKCFmZW9mKCRmcCkgJiYgISRmcGZsYWcpIHsNCiAgICAgICAgICAgICAgICBpZiAoKCRoZWFkZXIgPSBAZmdldHMoJGZwKSkgJiYgKCRoZWFkZXIgPT0gIlxyXG4iIHx8ICAkaGVhZGVyID09ICJcbiIpKSB7DQogICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGlmICgkbGltaXQpIHsNCiAgICAgICAgICAgICAgICAkcmV0dXJuID0gc3RyZWFtX2dldF9jb250ZW50cygkZnAsICRsaW1pdCk7DQogICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICRyZXR1cm4gPSBzdHJlYW1fZ2V0X2NvbnRlbnRzKCRmcCk7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgQGZjbG9zZSgkZnApOw0KICAgICAgICByZXR1cm4gJHJldHVybjsNCiAgICB9DQp9DQoNCmZ1bmN0aW9uIGNoYW5neWFuX2F1dG9DaGFyc2V0KCRtc2csJHR5cGU9J291dCcpDQp7DQogICAgZ2xvYmFsICRjZmdfc29mdF9sYW5nOw0KICAgIGlmICgkY2ZnX3NvZnRfbGFuZz09J2diMjMxMicpIHsNCiAgICAgICAgaWYoJHR5cGU9PSdvdXQnKSByZXR1cm4gZ2IydXRmOCgkbXNnKTsNCiAgICAgICAgZWxzZSByZXR1cm4gdXRmODJnYigkbXNnKTsNCiAgICB9IA0KICAgIHJldHVybiAkbXNnOw0KfQ0KDQpmdW5jdGlvbiBjaGFuZ3lhbl9nZW5fc2lnbigkdXNlcikNCnsNCiAgICBnbG9iYWwgJGNmZ192ZXJzaW9uLCRkc3FsOw0KICAgICRwaHB2ID0gcGhwdmVyc2lvbigpOw0KICAgICRzcF9vcyA9IFBIUF9PUzsNCiAgICAkbXlzcWxfdmVyID0gJGRzcWwtPkdldFZlcnNpb24oKTsNCiAgICAkbnVybCA9ICRfU0VSVkVSWydIVFRQX0hPU1QnXTsNCiAgICBpZiggcHJlZ19tYXRjaCgiI1thLXpcLV17MSx9XC5bYS16XXsyLH0jaSIsJG51cmwpICkgew0KICAgICAgICAkbnVybCA9IHVybGVuY29kZSgkbnVybCk7DQogICAgfQ0KICAgIGVsc2Ugew0KICAgICAgICAkbnVybCA9ICJ0ZXN0IjsNCiAgICB9DQogICAgJGFlc191cmw9Q0hBTkdZQU5fQVBJX0FFUy4nP2tleT0nLkNIQU5HWUFOX0NMSUVOVF9LRVkuJyZpbnB1dD0nLiR1c2VyLiImdmVyc2lvbj17JGNmZ192ZXJzaW9ufSZmb3JtdXJsPXskbnVybH0mcGhwdmVyPXskcGhwdn0mb3M9eyRzcF9vc30mbXlzcWx2ZXI9eyRteXNxbF92ZXJ9JmN5dmVyPSIuQ0hBTkdZQU5fVkVSOw0KICAgIHJldHVybiBjaGFuZ3lhbl9odHRwX3NlbmQoJGFlc191cmwpOw0KfQ0KDQpmdW5jdGlvbiBjaGFuZ3lhbl9iaW5kX2FjY291bnQoJG5ld191c2VyLCRuZXdfcHdkLCAkZXJyb3JpbmZvPScnKQ0Kew0KICAgICRvbGRfdXNlciA9IGNoYW5neWFuX2dldF9zZXR0aW5nKCd1c2VyJyk7DQogICAgJG9sZF9wYXNzd29yZD1jaGFuZ3lhbl9tY2hTdHJDb2RlKGNoYW5neWFuX2dldF9zZXR0aW5nKCdwd2QnKSwgJ0RFQ09ERScpIDsNCiAgICAkc2lnbj1jaGFuZ3lhbl9nZW5fc2lnbigkb2xkX3VzZXIpOw0KICAgICRwYXJhbXNBcnI9YXJyYXkoDQogICAgICAgICdjbGllbnRfaWQnPT5DSEFOR1lBTl9DTElFTlRfSUQsIA0KICAgICAgICAnb2xkX3VzZXInPT4kb2xkX3VzZXIsIA0KICAgICAgICAnb2xkX3Bhc3N3b3JkJz0+JG9sZF9wYXNzd29yZCwgDQogICAgICAgICduZXdfdXNlcic9PiRuZXdfdXNlciwgDQogICAgICAgICduZXdfcGFzc3dvcmQnPT4kbmV3X3B3ZCwgDQogICAgICAgICdzaWduJz0+JHNpZ24pOw0KICAgICRycz1qc29uX2RlY29kZShjaGFuZ3lhbl9odHRwX3NlbmQoQ0hBTkdZQU5fQVBJX0JJTkRBQ0MuJz8nLmh0dHBfYnVpbGRfcXVlcnkoJHBhcmFtc0FycikpLFRSVUUpOw0KICAgIGlmKCFpc3NldCgkcnNbJ3N0YXR1cyddKSkgcmV0dXJuIEZBTFNFOw0KICAgIGlmKCRyc1snc3RhdHVzJ109PTApDQogICAgew0KICAgICAgICAkbmV3X3B3ZCA9IGNoYW5neWFuX21jaFN0ckNvZGUoJG5ld19wd2QsICdFTkNPREUnKTsNCiAgICAgICAgY2hhbmd5YW5fc2V0X3NldHRpbmcoJ3VzZXInLCAkbmV3X3VzZXIpOw0KICAgICAgICBjaGFuZ3lhbl9zZXRfc2V0dGluZygncHdkJywgJG5ld19wd2QpOw0KICAgICAgICBjaGFuZ3lhbl9zZXRfc2V0dGluZygnaXN2X2FwcF9rZXknLCAnJyk7DQogICAgICAgICRpc3ZfYXBwX2tleSA9IGNoYW5neWFuX2dldF9pc3ZfYXBwX2tleSgpOw0KICAgICAgICBjaGFuZ3lhbl9jbGVhcmNhY2hlKCk7DQogICAgICAgIHJldHVybiBUUlVFOw0KICAgIH0gZWxzZSB7DQogICAgICAgICRlcnJvcmluZm8gPSAkcnNbJ21zZyddOw0KICAgICAgICByZXR1cm4gRkFMU0U7DQogICAgfQ0KfQ0KDQpmdW5jdGlvbiBjaGFuZ3lhbl9obWFjc2hhMSgkZGF0YSwgJGtleSkgew0KICAgIHJldHVybiBoYXNoX2htYWMoJ3NoYTEnLCAkZGF0YSwgJGtleSk7DQp9DQoNCmZ1bmN0aW9uIGNoYW5neWFuX2dldF9pc3ZzKCkNCnsNCiAgICAkdXNlciA9IGNoYW5neWFuX2dldF9zZXR0aW5nKCd1c2VyJyk7DQogICAgJHNpZ249Y2hhbmd5YW5fZ2VuX3NpZ24oJHVzZXIpOw0KICAgICRwYXJhbXNBcnI9YXJyYXkoDQogICAgICAgICdjbGllbnRfaWQnPT5DSEFOR1lBTl9DTElFTlRfSUQsIA0KICAgICAgICAndXNlcic9PiR1c2VyLCANCiAgICAgICAgJ3NpZ24nPT4kc2lnbik7DQogICAgJHJzPWpzb25fZGVjb2RlKGNoYW5neWFuX2h0dHBfc2VuZChDSEFOR1lBTl9BUElfR0VUSVNWUy4nPycuaHR0cF9idWlsZF9xdWVyeSgkcGFyYW1zQXJyKSksVFJVRSk7DQogICAgaWYoaXNzZXQoJHJzWydpc3ZzJ10pKSByZXR1cm4ganNvbl9kZWNvZGUoJHJzWydpc3ZzJ10sVFJVRSk7DQogICAgZWxzZSByZXR1cm4gRkFMU0U7DQp9DQoNCmZ1bmN0aW9uIGNoYW5neWFuX2dldF9pc3ZzX2pzb25wKCkNCnsNCiAgICAkYXBwaWQgPSBjaGFuZ3lhbl9nZXRfc2V0dGluZygnYXBwaWQnKTsNCiAgICAkdXNlciA9IGNoYW5neWFuX2dldF9zZXR0aW5nKCd1c2VyJyk7DQogICAgJHNpZ249Y2hhbmd5YW5fZ2VuX3NpZ24oJHVzZXIpOw0KICAgICRjbGllbnRfaWQ9Q0hBTkdZQU5fQ0xJRU5UX0lEOw0KICAgICRqc29ucF91cmw9Q0hBTkdZQU5fQVBJX0dFVElTVlNfSlNPTlA7DQogICAgcmV0dXJuIDw8PEVPVA0KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPg0KJC5hamF4KHsgIA0KICAgICAgICB0eXBlOiAiZ2V0IiwgIA0KICAgICAgICB1cmw6ICJ7JGpzb25wX3VybH0iLCAgDQogICAgICAgIGRhdGFUeXBlOiAianNvbnAiLCAgDQogICAgICAgIGRhdGE6IHsNCiAgICAgICAgICAgIGNsaWVudF9pZDogJ3skY2xpZW50X2lkfScsDQogICAgICAgICAgICB1c2VyOiAneyR1c2VyfScsDQogICAgICAgICAgICBzaWduOiAneyRzaWdufScNCiAgICAgICAgfSwNCiAgICAgICAganNvbnA6ICJjYWxsYmFjayIsDQogICAgICAgIGpzb25wQ2FsbGJhY2s6ICJzdWNjZXNzX2pzb25wQ2FsbGJhY2siLA0KICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbihkYXRhKXsgIA0KICAgICAgICAgICAgaXN2cyA9IGV2YWwoZXZhbChkYXRhKVsiaXN2cyJdKTsNCiAgICAgICAgICAgIHZhciBkYl9hcHBpZD0neyRhcHBpZH0nOw0KICAgICAgICAgICAgdmFyIGlzdnNDb250ZW50PScnOw0KICAgICAgICAgICAgJC5lYWNoKGlzdnMsIGZ1bmN0aW9uKGksaXRlbSl7DQogICAgICAgICAgICAgICAgdmFyIGFwcElkPWl0ZW0uYXBwSWQ7DQogICAgICAgICAgICAgICAgdmFyIGFwcEtleT1pdGVtLmFwcEtleTsNCiAgICAgICAgICAgICAgICB2YXIgbmFtZT1pdGVtLm5hbWU7DQogICAgICAgICAgICAgICAgdmFyIGlkPWl0ZW0uaWQ7DQogICAgICAgICAgICAgICAgdmFyIHVybD1pdGVtLnVybDsNCiAgICAgICAgICAgICAgICB2YXIgY2hlY2tlZHN0cj0nJzsNCiAgICAgICAgICAgICAgICBpZihkYl9hcHBpZD09YXBwSWQpIGNoZWNrZWRzdHI9JyBjaGVja2VkJzsNCiAgICAgICAgICAgICAgICBvcHRpb25faHRtbCA9ICc8cD48aW5wdXQgdHlwZT0icmFkaW8iIG5hbWU9ImFwcEluZm8iIGlkPSJhcHBJbmZvJytpZCsnIiB2YWx1ZT0iJythcHBJZCsnfCcrYXBwS2V5KyciJytjaGVja2Vkc3RyKyc+IDxsYWJlbCBmb3I9ImFwcEluZm8nK2lkKyciPicrbmFtZSsnIFsnK2FwcElkKycgfCAnK3VybCsnXTwvbGFiZWw+PC9wPic7DQogICAgICAgICAgICAgICAgaXN2c0NvbnRlbnQgPSBpc3ZzQ29udGVudCArIG9wdGlvbl9odG1sOw0KICAgICAgICAgICAgfSk7DQogICAgICAgICAgICAkKCIjaXN2c0NvbnRlbnQiKS5odG1sKGlzdnNDb250ZW50KTsNCiAgICAgICAgfSwNCiAgICAgICAgZXJyb3I6IGZ1bmN0aW9uKGRhdGEpew0KICAgICAgICAgICAgaXN2c0NvbnRlbnQgPSAi5rKh5pyJ6I635Y+W5Yiw5b2T5YmN55m75b2V6LSm5Y+35omA5a+55bqU55qEQVBQSUTkv6Hmga/vvIzor7fmo4Dmn6XmmK/lkKbmraPnoa7lronoo4XnlYXoqIDmqKHlnZfjgIIiOw0KICAgICAgICAgICAgJCgiI2lzdnNDb250ZW50IikuaHRtbChpc3ZzQ29udGVudCk7DQogICAgICAgIH0sICAgICAgICANCiAgICAgICAgICANCiAgICB9KTsNCjwvc2NyaXB0Pg0KRU9UOw0KfQ0KDQpmdW5jdGlvbiBjaGFuZ3lhbl9nZXRfaXN2X2FwcF9rZXkoKQ0Kew0KICAgIGdsb2JhbCAkY2xpZW50X2lkOw0KICAgICRpc3ZfYXBwX2tleT1jaGFuZ3lhbl9nZXRfc2V0dGluZygnaXN2X2FwcF9rZXknKTsNCiAgICBpZiAoIWVtcHR5KCRpc3ZfYXBwX2tleSkpIHsNCiAgICAgICAgcmV0dXJuICRpc3ZfYXBwX2tleTsNCiAgICB9IGVsc2Ugew0KICAgICAgICByZXR1cm4gRkFMU0U7DQogICAgfSAvL+aOpeWPo+S4i+e6v++8jOebtOaOpemAmui/h+iuvuWummFwcGluZm/mjqXlj6MNCiAgICAkdXNlciA9IGNoYW5neWFuX2dldF9zZXR0aW5nKCd1c2VyJyk7DQogICAgDQogICAgaWYgKCFlbXB0eSgkaXN2X2FwcF9rZXkpKSB7DQogICAgICAgIHJldHVybiAkaXN2X2FwcF9rZXk7DQogICAgfQ0KICAgICRpc3ZfYXBwX2tleT0nJzsNCiAgICAkc2lnbj1jaGFuZ3lhbl9nZW5fc2lnbigkdXNlcik7DQogICAgJHBhcmFtc0Fycj1hcnJheSgNCiAgICAgICAgJ2NsaWVudF9pZCc9PkNIQU5HWUFOX0NMSUVOVF9JRCwgDQogICAgICAgICd1c2VyJz0+JHVzZXIsIA0KICAgICAgICAndXNlcl9hcHBpZCc9PiRjbGllbnRfaWQsDQogICAgICAgICdzaWduJz0+JHNpZ24pOw0KICAgICRycz1jaGFuZ3lhbl9odHRwX3NlbmQoQ0hBTkdZQU5fQVBJX0dFVEFQUEtFWS4nPycuaHR0cF9idWlsZF9xdWVyeSgkcGFyYW1zQXJyKSk7DQogICAgJHJzID0ganNvbl9kZWNvZGUoJHJzLFRSVUUpOw0KICAgIGlmIChpc3NldCgkcnNbJ2lzdl9hcHBfa2V5J10pKSB7DQogICAgICAgICRpc3ZfYXBwX2tleT0kcnNbJ2lzdl9hcHBfa2V5J107DQogICAgfQ0KICAgIGNoYW5neWFuX3NldF9zZXR0aW5nKCdpc3ZfYXBwX2tleScsICRpc3ZfYXBwX2tleSk7DQogICAgcmV0dXJuICRpc3ZfYXBwX2tleTsNCn0NCg0KZnVuY3Rpb24gY2hhbmd5YW5fZ2V0X2NvbW1lbnRzKCR0b3BpY19pZCkNCnsNCiAgICBnbG9iYWwgJGNsaWVudF9pZDsNCiAgICAkcmVzdWx0PWFycmF5KCk7DQogICAgJHBhcmFtc0Fycj1hcnJheSgNCiAgICAgICAgJ2NsaWVudF9pZCc9PkNIQU5HWUFOX0NMSUVOVF9JRCwgDQogICAgICAgICdzdHlsZSc9PidmbG9vcicsIA0KICAgICAgICAnb3JkZXJfYnknPT4ndGltZV9hc2MnLCANCiAgICAgICAgJ3BhZ2Vfbm8nPT4xLCANCiAgICAgICAgJ3BhZ2Vfc2l6ZSc9PjEwMCwgDQogICAgICAgICd0b3BpY19pZCc9PiR0b3BpY19pZCk7DQogICAgJHJzPWNoYW5neWFuX2h0dHBfc2VuZChDSEFOR1lBTl9BUElfQ09NTUVOVFMuJz8nLmh0dHBfYnVpbGRfcXVlcnkoJHBhcmFtc0FycikpOw0KICAgICRycyA9IGpzb25fZGVjb2RlKCRycyxUUlVFKTsNCiAgICByZXR1cm4gJHJzOw0KfQ0KDQpmdW5jdGlvbiBjaGFuZ3lhbl9saXN0X3NvcnRfYnkoJGxpc3QsICRmaWVsZCwgJHNvcnRieT0nYXNjJykgDQp7DQogICBpZihpc19hcnJheSgkbGlzdCkpew0KICAgICAgICRyZWZlciA9ICRyZXN1bHRTZXQgPSBhcnJheSgpOw0KICAgICAgIGZvcmVhY2ggKCRsaXN0IGFzICRpID0+ICRkYXRhKQ0KICAgICAgICAgICAkcmVmZXJbJGldID0gJiRkYXRhWyRmaWVsZF07DQogICAgICAgc3dpdGNoICgkc29ydGJ5KSB7DQogICAgICAgICAgIGNhc2UgJ2FzYyc6IC8vIOato+WQkeaOkuW6jw0KICAgICAgICAgICAgICAgIGFzb3J0KCRyZWZlcik7DQogICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgIGNhc2UgJ2Rlc2MnOi8vIOmAhuWQkeaOkuW6jw0KICAgICAgICAgICAgICAgIGFyc29ydCgkcmVmZXIpOw0KICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICBjYXNlICduYXQnOiAvLyDoh6rnhLbmjpLluo8NCiAgICAgICAgICAgICAgICBuYXRjYXNlc29ydCgkcmVmZXIpOw0KICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgIH0NCiAgICAgICBmb3JlYWNoICggJHJlZmVyIGFzICRrZXk9PiAkdmFsKQ0KICAgICAgICAgICAkcmVzdWx0U2V0W10gPSAmJGxpc3RbJGtleV07DQogICAgICAgcmV0dXJuICRyZXN1bHRTZXQ7DQogICB9DQogICByZXR1cm4gZmFsc2U7DQp9DQoNCmZ1bmN0aW9uIGNoYW5neWFuX2luc2VydF9jb21tZW50cygkY29tbWVudCwkYWlkLCR0aXRsZSkNCnsNCiAgICBnbG9iYWwgJGRzcWw7DQogICAgaWYgKCFpc3NldCgkY29tbWVudFsnY29tbWVudHMnXSkpIHJldHVybiBGQUxTRTsNCiAgICAkZHNxbC0+U2V0UXVlcnkoIlNFTEVDVCBjb21tZW50X2lkIEZST00gYCNAX19wbHVzX2NoYW5neWFuX2luc2VydGlkc2AgV0hFUkUgYWlkPXskYWlkfSIpOw0KICAgICRkc3FsLT5FeGVjdXRlKCdkZCcpOw0KICAgICRjb21tZW50X2lkcz1hcnJheSgpOw0KICAgIHdoaWxlKCRhcnIgPSAkZHNxbC0+R2V0QXJyYXkoJ2RkJykpDQogICAgew0KICAgICAgICAkY29tbWVudF9pZHNbXSA9ICRhcnJbJ2NvbW1lbnRfaWQnXTsNCiAgICB9DQogICAgJGk9MDsNCiAgICBmb3JlYWNoICgkY29tbWVudFsnY29tbWVudHMnXSBhcyAkY29tbWVudCkgDQogICAgew0KICAgICAgICAkY29udGVudCA9ICcnOw0KICAgICAgICBpZiAoaW5fYXJyYXkoJGNvbW1lbnRbJ2NvbW1lbnRfaWQnXSwgJGNvbW1lbnRfaWRzKSkgY29udGludWU7DQogICAgICAgIGlmIChjb3VudCgkY29tbWVudFsnY29tbWVudHMnXSk+MCkgew0KICAgICAgICAgICAgJGNvbW1lbnRbJ2NvbW1lbnRzJ10gPSBjaGFuZ3lhbl9saXN0X3NvcnRfYnkoJGNvbW1lbnRbJ2NvbW1lbnRzJ10sICdjcmVhdGVfdGltZScsJ2Rlc2MnKTsNCiAgICAgICAgICAgIGZvcmVhY2ggKCRjb21tZW50Wydjb21tZW50cyddIGFzICRjKSB7DQogICAgICAgICAgICAgICAgJGNbJ2NvbnRlbnQnXSA9IGNoYW5neWFuX2F1dG9DaGFyc2V0KCRjWydjb250ZW50J10sICdpbicpOw0KICAgICAgICAgICAgICAgICRjb250ZW50ID0gJ3txdW90ZX17Y29udGVudH0nLiRjb250ZW50LiRjWydjb250ZW50J10uJ3svY29udGVudH17dGl0bGV9Jy4NCiAgICAgICAgICAgICAgICAgICAgJGNbJ3Bhc3Nwb3J0J11bJ25pY2tuYW1lJ10uJyDnmoTljp/luJbvvJp7L3RpdGxlfXsvcXVvdGV9JzsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICAkYWlkPWludHZhbCgkYWlkKTsNCiAgICAgICAgJHR5cGVpZD0wOw0KICAgICAgICAkdXNlcm5hbWU9Y2hhbmd5YW5fYXV0b0NoYXJzZXQoJGNvbW1lbnRbJ3Bhc3Nwb3J0J11bJ25pY2tuYW1lJ10sICdpbicpOw0KICAgICAgICAkYXJjdGl0bGU9Y2hhbmd5YW5fYXV0b0NoYXJzZXQoJHRpdGxlLCAnaW4nKTsNCiAgICAgICAgJGlwPSRjb21tZW50WydpcCddOw0KICAgICAgICAkY29tbWVudF9pZD0kY29tbWVudFsnY29tbWVudF9pZCddOw0KICAgICAgICAkaXNjaGVjaz0xOw0KICAgICAgICAkZHRpbWU9IGludHZhbCgkY29tbWVudFsnY3JlYXRlX3RpbWUnXSAvIDEwMDAgKSA7DQogICAgICAgICRtc2cgPSAkY29udGVudC5jaGFuZ3lhbl9hdXRvQ2hhcnNldCgkY29tbWVudFsnY29udGVudCddLCAnaW4nKSA7DQogICAgICAgICRpbnF1ZXJ5ID0gIklOU0VSVCBJTlRPIGAjQF9fZmVlZGJhY2tgKGBhaWRgLGB0eXBlaWRgLGB1c2VybmFtZWAsYGFyY3RpdGxlYCxgaXBgLGBpc2NoZWNrYCxgZHRpbWVgLCBgbWlkYCxgYmFkYCxgZ29vZGAsYGZ0eXBlYCxgZmFjZWAsYG1zZ2ApDQogICAgICAgICAgICAgICAgICAgICAgICAgICBWQUxVRVMgKCckYWlkJywnJHR5cGVpZCcsJyR1c2VybmFtZScsJyRhcmN0aXRsZScsJyRpcCcsJyRpc2NoZWNrJywnJGR0aW1lJywgJzAnLCcwJywnMCcsJ2ZlZWRiYWNrJywnJywnJG1zZycpOyAiOw0KICAgICAgICAkcnMgPSAkZHNxbC0+RXhlY3V0ZU5vbmVRdWVyeSgkaW5xdWVyeSk7DQogICAgICAgICRmZWVkYmFja19pZCA9ICRkc3FsLT5HZXRMYXN0SUQoKTsNCiAgICAgICAgJGlucXVlcnkgPSAiSU5TRVJUIElOVE8gYCNAX19wbHVzX2NoYW5neWFuX2ltcG9ydGlkc2AoYGFpZGAsYGZlZWRiYWNrX2lkYCkgVkFMVUVTICgneyRhaWR9JywneyRmZWVkYmFja19pZH0nKSI7DQogICAgICAgICRycyA9ICRkc3FsLT5FeGVjdXRlTm9uZVF1ZXJ5KCRpbnF1ZXJ5KTsNCiAgICAgICAgJGlucXVlcnkgPSAiSU5TRVJUIElOVE8gYCNAX19wbHVzX2NoYW5neWFuX2luc2VydGlkc2AoYGFpZGAsYGNvbW1lbnRfaWRgKSBWQUxVRVMgKCckYWlkJywnJGNvbW1lbnRfaWQnKSI7DQogICAgICAgICRycyA9ICRkc3FsLT5FeGVjdXRlTm9uZVF1ZXJ5KCRpbnF1ZXJ5KTsNCiAgICAgICAgJGkrKzsNCiAgICB9DQoNCiAgICByZXR1cm4gJGk7DQogICAvLyByZXR1cm4gJGNvbW1lbnQ7DQp9DQoNCmZ1bmN0aW9uIGNoYW5neWFuX2NoZWNrX2lzbG9naW4oKQ0Kew0KICAgIGdsb2JhbCAkZG9wb3N0Ow0KICAgICRqcXVlcnlfdXJsID0gQ0hBTkdZQU5fQVBJX0FFUy4iYXNzZXRzL2pzL2pxdWVyeS5taW4uanMiOw0KICAgICRjaGFuZ3lhbl9sb2dpbj1DSEFOR1lBTl9BUElfQ0hFQ0tfTE9HSU47DQogICAgZWNobyA8PDxFT1QNCjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9InskanF1ZXJ5X3VybH0iPjwvc2NyaXB0Pg0KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPg0KKGZ1bmN0aW9uKCQpew0KICAgICQuYWpheCh7DQogICAgICAgIHR5cGU6ICJHRVQiLA0KICAgICAgICB1cmw6ICJ7JGNoYW5neWFuX2xvZ2lufSIsDQogICAgICAgIGRhdGFUeXBlIDogJ2pzb25wJywNCiAgICAgICAganNvbnBDYWxsYmFjazoiY2FsbGZ1bmMiLA0KICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbihtc2cpew0KICAgICAgICAgICAgaWYoIW1zZy5zdWNjZXNzKXsNCiAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZj0nP2RvcG9zdD1sb2dvdXQmbm9tc2c9eWVzJmZvcndhcmQ9eyRkb3Bvc3R9JzsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgIH0pOw0KfSkoalF1ZXJ5KQ0KPC9zY3JpcHQ+ICAgIA0KRU9UOw0KICAgIC8vZXhpdDsNCn0NCg0KZnVuY3Rpb24gY2hhbmd5YW5fZ2V0X3JlY2VudCgkYXBwaWQsJGRhdGUpDQp7DQogICAgJGRhdGUgPSB1cmxlbmNvZGUoJGRhdGUpOw0KICAgICRyZWNlbnRfdXJsPUNIQU5HWUFOX0FQSV9SRUNFTlQuIi8/YXBwSWQ9eyRhcHBpZH0mZGF0ZT17JGRhdGV9IjsNCiAgICByZXR1cm4ganNvbl9kZWNvZGUoY2hhbmd5YW5faHR0cF9zZW5kKCRyZWNlbnRfdXJsKSxUUlVFKTsNCn0NCg0KZnVuY3Rpb24gY2hhbmd5YW5fbGF0ZXN0cygkY2xpZW50X2lkLCRwYWdlc2l6ZT0yMCwkb3JkZXI9J2hvdCcpDQp7DQogICAgJGxhdGVzdHNfdXJsPUNIQU5HWUFOX0FQSV9MQVRFU1RTLiIvP2NsaWVudF9pZD17JGNsaWVudF9pZH0mc2l6ZT17JHBhZ2VzaXplfSZvcmRlcl9ieT17JG9yZGVyfSI7DQogICAgcmV0dXJuIGpzb25fZGVjb2RlKGNoYW5neWFuX2h0dHBfc2VuZCgkbGF0ZXN0c191cmwpLFRSVUUpOw0KfQ0KDQpmdW5jdGlvbiBjaGFuZ3lhbl9nZXRjb2RlKCRjbGllbnRfaWQsICR1c2VyLCAkaXNfbW9iaWxlLCAkc2lnbiwgJGFwcGlkPSIiKQ0Kew0KICAgICRnZXRjb2RlX3VybD1DSEFOR1lBTl9BUElfQ09ERS4iLz9jbGllbnRfaWQ9eyRjbGllbnRfaWR9JnVzZXI9eyR1c2VyfSZpc19tb2JpbGU9eyRpc19tb2JpbGV9JnNpZ249eyRzaWdufSZ1c2VyX2FwcGlkPXskYXBwaWR9IjsNCiAgICByZXR1cm4ganNvbl9kZWNvZGUoY2hhbmd5YW5faHR0cF9zZW5kKCRnZXRjb2RlX3VybCksVFJVRSk7DQp9DQoNCmZ1bmN0aW9uIGNoYW5neWFuX2lzbG9naW4oKQ0Kew0KICAgIHJldHVybiBlbXB0eSgkX1NFU1NJT05bJ2NoYW5neWFuJ10pPyBGQUxTRSA6IFRSVUU7DQp9DQoNCmZ1bmN0aW9uIGNoYW5neWFuX2dldF9zZXR0aW5nKCRza2V5LCAkdGltZT1mYWxzZSwgJHJlYWw9ZmFsc2UpDQp7DQogICAgZ2xvYmFsICRkc3FsOw0KICAgIHN0YXRpYyAkc2V0dGluZyA9IGFycmF5KCk7DQogICAgJHNrZXk9YWRkc2xhc2hlcygkc2tleSk7DQogICAgaWYgKGVtcHR5KCRzZXR0aW5nWyRza2V5XSkgfHwgJHJlYWwpIHsNCiAgICAgICAgJHJvdyA9ICRkc3FsLT5HZXRPbmUoIlNFTEVDVCAqIEZST00gYCNAX19wbHVzX2NoYW5neWFuX3NldHRpbmdgIFdIRVJFIHNrZXk9J3skc2tleX0nIik7DQogICAgICAgICRzZXR0aW5nWyRza2V5XVsnc3ZhbHVlJ109JHJvd1snc3ZhbHVlJ107DQogICAgICAgICRzZXR0aW5nWyRza2V5XVsnc3RpbWUnXT0kcm93WydzdGltZSddOw0KICAgIH0NCiAgICBpZiAoIWlzc2V0KCRzZXR0aW5nWyRza2V5XSkpIHJldHVybiAkdGltZSA/IGFycmF5KCkgOiBudWxsOw0KICAgIHJldHVybiAkdGltZSA/ICRzZXR0aW5nWyRza2V5XSA6ICRzZXR0aW5nWyRza2V5XVsnc3ZhbHVlJ107DQp9DQoNCmZ1bmN0aW9uIGNoYW5neWFuX3NldF9zZXR0aW5nKCRza2V5LCAkc3ZhbHVlKQ0Kew0KICAgIGdsb2JhbCAkZHNxbDsNCiAgICAkc3RpbWU9dGltZSgpOw0KICAgICRza2V5PWFkZHNsYXNoZXMoJHNrZXkpOw0KICAgICRzdmFsdWU9YWRkc2xhc2hlcygkc3ZhbHVlKTsNCiAgICAkc3FsPSJVUERBVEUgYCNAX19wbHVzX2NoYW5neWFuX3NldHRpbmdgIFNFVCBzdmFsdWU9J3skc3ZhbHVlfScsc3RpbWU9J3skc3RpbWV9JyBXSEVSRSBza2V5PSd7JHNrZXl9JyAiOw0KICAgICRkc3FsLT5FeGVjdXRlTm9uZVF1ZXJ5KCRzcWwpOw0KfQ0KDQpmdW5jdGlvbiBjaGFuZ3lhbl9hZGRzaXRlKCR1c2VyLCAkaXN2X25hbWUsICR1cmwpDQp7DQogICAgJHNpZ249Y2hhbmd5YW5fZ2VuX3NpZ24oJHVzZXIpOw0KICAgICRwYXJhbXNBcnI9YXJyYXkoDQogICAgICAgICdjbGllbnRfaWQnPT5DSEFOR1lBTl9DTElFTlRfSUQsIA0KICAgICAgICAndXNlcic9PiR1c2VyLCANCiAgICAgICAgJ2lzdl9uYW1lJz0+JGlzdl9uYW1lLA0KICAgICAgICAndXJsJz0+JHVybCwNCiAgICAgICAgJ3NpZ24nPT4kc2lnbik7DQogICAgJHJzPWNoYW5neWFuX2h0dHBfc2VuZChDSEFOR1lBTl9BUElfQUREU0lURSwwLCRwYXJhbXNBcnIpOw0KICAgIHJldHVybiBqc29uX2RlY29kZSgkcnMsIFRSVUUpOw0KfQ0KDQpmdW5jdGlvbiBjaGFuZ3lhbl9mb3JnZXRfcHdkKCRtYWlsLCYkZXJyb3JfbXNnPScnKQ0Kew0KICAgICRwYXJhbXNBcnI9YXJyYXkoDQogICAgICAgICdjbGllbnRfaWQnPT5DSEFOR1lBTl9DTElFTlRfSUQsIA0KICAgICAgICAnbWFpbCc9PiRtYWlsKTsNCiAgICAkcnM9anNvbl9kZWNvZGUoY2hhbmd5YW5faHR0cF9zZW5kKENIQU5HWUFOX0FQSV9GT1JHRVRfUFdELDAsJHBhcmFtc0FyciksIFRSVUUpOw0KICAgIGlmKCEkcnNbJ3N1Y2Nlc3MnXSkNCiAgICB7DQogICAgICAgICRlcnJvcl9tc2c9JHJzWydtc2cnXTsNCiAgICAgICAgcmV0dXJuIEZBTFNFOw0KICAgIH0NCiAgICByZXR1cm4gVFJVRTsNCn0NCg0KPz4=
</file>
<file type='file' name='../include/taglib/changyan.lib.php'>
PD9waHAgICBpZighZGVmaW5lZCgnREVERUlOQycpKSBleGl0KCdSZXF1ZXN0IEVycm9yIScpOw0KDQpoZWxwZXIoJ2NoYW5neWFuJyk7DQpoZWxwZXIoJ2NhY2hlJyk7DQokR0xPQkFMU1snY2hhbmd5YW5fY291bnRfanMnXSA9IGlzc2V0KCRHTE9CQUxTWydjaGFuZ3lhbl9jb3VudF9qcyddKT8gJEdMT0JBTFNbJ2NoYW5neWFuX2NvdW50X2pzJ10gOiBGQUxTRTsNCmZ1bmN0aW9uIGxpYl9jaGFuZ3lhbigmJGN0YWcsJiRyZWZPYmopDQp7DQogICAgZ2xvYmFsICRkc3FsLCAkZW52czsNCiAgICAvL+WxnuaAp+WkhOeQhg0KICAgICRhdHRsaXN0PSJ0eXBlfGNvZGUsY29uZmlnfCxjbGFzc3xfREVERUNZLHN0eWxlfCI7DQogICAgRmlsbEF0dHNEZWZhdWx0KCRjdGFnLT5DQXR0cmlidXRlLT5JdGVtcywkYXR0bGlzdCk7DQogICAgZXh0cmFjdCgkY3RhZy0+Q0F0dHJpYnV0ZS0+SXRlbXMsIEVYVFJfU0tJUCk7DQogICAgDQogICAgJHJldmFsPSIiOw0KICAgIA0KICAgIGlmKCAhJGRzcWwtPklzVGFibGUoIiNAX19wbHVzX2NoYW5neWFuX3NldHRpbmciKSApIHJldHVybiAn5rKh5a6J6KOF55WF6KiA5qih5Z2XJzsNCiAgICANCiAgICAkY2xpZW50X2lkPWNoYW5neWFuX2dldF9zZXR0aW5nKCdhcHBpZCcpOw0KICAgIGlmKGVtcHR5KCRjbGllbnRfaWQpKSByZXR1cm4gJ+WwmuacquazqOWGjOeVheiogOW4kOWPt++8jOivt+WIsOWQjuWPsOazqOWGjCc7DQogICAgDQogICAgaWYoJHR5cGU9PSdjb2RlJyBPUiAkdHlwZT09J2NvZGUyJykNCiAgICB7DQogICAgICAgICRyZXZhbC49IjxkaXYgY2xhc3M9J3skY2xhc3N9JyBzdHlsZT0neyRzdHlsZX0nPiI7DQogICAgICAgICRwcmVmaXggPSAnY2hhbmd5YW4nOw0KICAgICAgICAka2V5ID0gJ2NvZGUnOw0KICAgICAgICAkcm93ID0gR2V0Q2FjaGUoJHByZWZpeCwgJGtleSk7DQoNCiAgICAgICAgaWYoIWlzX2FycmF5KCRyb3cpKQ0KICAgICAgICB7DQogICAgICAgICAgICAkYXBwaWQ9Y2hhbmd5YW5fZ2V0X3NldHRpbmcoJ2FwcGlkJyk7DQogICAgICAgICAgICAkdXNlcj1jaGFuZ3lhbl9nZXRfc2V0dGluZygndXNlcicpOw0KICAgICAgICAgICAgJHNpZ249Y2hhbmd5YW5fZ2VuX3NpZ24oJHVzZXIpOw0KICAgICAgICAgICAgJHJlc3VsdCA9IGNoYW5neWFuX2dldGNvZGUoQ0hBTkdZQU5fQ0xJRU5UX0lELCAkdXNlciwgZmFsc2UsICRzaWduLCAkYXBwaWQpOw0KICAgICAgICAgICAgJHJvd1sncmV2YWwnXSA9IGh0bWxzcGVjaWFsY2hhcnMoJHJlc3VsdFsnY29kZSddKTsNCiAgICAgICAgICAgIFNldENhY2hlKCRwcmVmaXgsICRrZXksICRyb3csIDYwKjYwKjEpOw0KICAgICAgICB9DQogICAgICAgIGlmKCFlbXB0eSgkY29uZmlnKSkNCiAgICAgICAgew0KICAgICAgICAgICAgJGNvbmZpZ19hcnIgPSBhcnJheSgpOw0KICAgICAgICAgICAgJGNvbmZpZ3MgPSBleHBsb2RlKCcsJywgJGNvbmZpZyk7DQogICAgICAgICAgICBpZihjb3VudCgkY29uZmlncyk+MCkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICBmb3JlYWNoKCRjb25maWdzIGFzICRjKSB7DQogICAgICAgICAgICAgICAgICAgICRpdGVtID0gZXhwbG9kZSgnOicsICRjKTsNCiAgICAgICAgICAgICAgICAgICAgJGNvbmZpZ19hcnJbJGl0ZW1bMF1dID0gJGl0ZW1bMV07DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgJGNvbmZpZ19zdHIgPSBqc29uX2VuY29kZSgkY29uZmlnX2Fycik7DQogICAgICAgICAgICAkcmV2YWwgLj0gPDw8RU9UDQo8c2NyaXB0Pg0KICAgIHZhcl9jb25maWc9eyRjb25maWdfc3RyfTsNCjwvc2NyaXB0Pg0KRU9UOw0KICAgICAgICB9DQogICAgICAgICRyZXZhbCAuPSBodG1sc3BlY2lhbGNoYXJzX2RlY29kZSgkcm93WydyZXZhbCddKTsNCiAgICAgICAgJHJldmFsPXN0cl9yZXBsYWNlKCJpZD0nU09IVUNTJyIsICJpZD0nU09IVUNTJyBzaWQ9J3skcmVmT2JqLT5BcmNJRH0nIiwgJHJldmFsKTsNCiAgICAgICAgaWYoJHR5cGU9PSdjb2RlMicpICRyZXZhbD1wcmVnX3JlcGxhY2UoIiN3aW5kb3cuU0NTX05PX0lGUkFNRVsgXT89WyBdP3RydWU7I2kiLCAiIiwgJHJldmFsKTsNCiAgICAgICAgJHJldmFsPXN0cl9yZXBsYWNlKCI8c2NyaXB0PiIsICI8L2Rpdj48c2NyaXB0PiIsICRyZXZhbCk7DQogICAgfSBlbHNlaWYoJHR5cGU9PSdjb3VudCcpIHsNCiAgICAgICAgaWYoISRHTE9CQUxTWydjaGFuZ3lhbl9jb3VudF9qcyddKSAkcmV2YWwuPSI8c2NyaXB0IHR5cGU9XCJ0ZXh0L2phdmFzY3JpcHRcIiBzcmM9XCJodHRwOi8vYXNzZXRzLmNoYW5neWFuLnNvaHUuY29tL3VwbG9hZC9wbHVnaW5zL3BsdWdpbnMuY291bnQuanNcIj48L3NjcmlwdD4iOw0KICAgICAgICAkcmV2YWwuPSI8YSBocmVmPVwiI1NPSFVDU1wiIGlkPVwiY2hhbmd5YW5fY291bnRfdW5pdFwiPjwvYT4iOw0KICAgICAgICAkR0xPQkFMU1snY2hhbmd5YW5fY291bnRfanMnXSA9IFRSVUU7DQogICAgfQ0KICAgIA0KICAgIHJldHVybiAkcmV2YWw7DQp9DQo=
</file>
<file type='file' name='changyan_main.php'>
PD9waHANCi8vQHNlc3Npb25fc3RhcnQoKTsNCnJlcXVpcmVfb25jZShkaXJuYW1lKF9fRklMRV9fKS4iL2NvbmZpZy5waHAiKTsNCnJlcXVpcmVfb25jZShERURFSU5DLiIvb3h3aW5kb3cuY2xhc3MucGhwIik7DQoNCmhlbHBlcignY2hhbmd5YW4nKTsNCg0KaWYoZW1wdHkoJGRvcG9zdCkpICRkb3Bvc3QgPSAnJzsNCmlmKGVtcHR5KCRhY3Rpb24pKSAkYWN0aW9uID0gJyc7DQppZihlbXB0eSgkbm9jaGVjaykpICRub2NoZWNrID0gJyc7DQppZihlbXB0eSgkZm9yd2FyZCkpICRmb3J3YXJkID0gJyc7DQoNCiRfU0VTU0lPTlsnY2hhbmd5YW4nXSA9ICFlbXB0eSgkX1NFU1NJT05bJ2NoYW5neWFuJ10pPyAkX1NFU1NJT05bJ2NoYW5neWFuJ10gOiAwOw0KJF9TRVNTSU9OWyd1c2VyJ10gPSAhZW1wdHkoJF9TRVNTSU9OWyd1c2VyJ10pPyAkX1NFU1NJT05bJ3VzZXInXSA6ICcnOw0KDQokYXBwaWQ9JGNsaWVudF9pZD1jaGFuZ3lhbl9nZXRfc2V0dGluZygnYXBwaWQnKTsNCg0KaWYgKCRkb3Bvc3Q9PSdibGFuaycpIHsNCiAgICBleGl0Ow0KfQ0KDQppZiAoJGNmZ19mZWVkYmFja19mb3JiaWQ9PSdOJyBBTkQgIWVtcHR5KCRjbGllbnRfaWQpKSB7DQogICAgJGRzcWwtPkV4ZWN1dGVOb25lUXVlcnkoIlVQREFURSBgI0BfX3N5c2NvbmZpZ2AgU0VUIGB2YWx1ZWA9J1knIFdIRVJFIGB2YXJuYW1lYD0nY2ZnX2ZlZWRiYWNrX2ZvcmJpZCc7Iik7DQogICAgY2hhbmd5YW5fUmVXcml0ZUNvbmZpZygpOw0KICAgIFNob3dNc2coIuW3sue7j+emgeeUqERlZGVDTVPpu5jorqTor4TorrrvvIzlvIDlkK/nlYXoqIDor4TorrrvvIEiLCI/Iik7DQogICAgZXhpdCgpOw0KfQ0KDQovL2F1dG8gdXBkYXRlDQokdmVyc2lvbj1jaGFuZ3lhbl9nZXRfc2V0dGluZygndmVyc2lvbicpOw0KDQppZihlbXB0eSgkX1NFU1NJT05bJ3VzZXInXSkgQU5EIGVtcHR5KCRub2NoZWNrKSkNCnsNCiAgICAkZGJfdXNlciA9IGNoYW5neWFuX2dldF9zZXR0aW5nKCd1c2VyJyk7DQogICAgJGRiX3B3ZD1jaGFuZ3lhbl9tY2hTdHJDb2RlKGNoYW5neWFuX2dldF9zZXR0aW5nKCdwd2QnKSwgJ0RFQ09ERScpOw0KDQogICAgaWYoIWVtcHR5KCRkYl91c2VyKSBBTkQgIWVtcHR5KCRkYl9wd2QpKQ0KICAgIHsNCiAgICAgICAgaGVhZGVyKCdMb2NhdGlvbjo/ZG9wb3N0PXF1aWNrX2xvZ2luJm5vY2hlY2s9eWVzJmZvcndhcmQ9Jy4kZm9yd2FyZCk7DQogICAgICAgIGV4aXQoKTsNCiAgICB9IGVsc2VpZiAoZW1wdHkoJGRiX3VzZXIpIEFORCBlbXB0eSgkZGJfcHdkKSkgew0KICAgICAgICBTaG93TXNnKCLns7vnu5/mnKrnu5HlrprnlYXoqIDotKblj7fvvIzmiJHku6zlsIboh6rliqjkuLrmgqjliIbphY3kuIDkuKrliJ3lp4votKblj7fvvIzor7fogJDlv4PnrYnlvoXigKbigKYiLCI/ZG9wb3N0PWF1dG9yZWcmbm9jaGVjaz15ZXMiKTsNCiAgICAgICAgZXhpdCgpOw0KICAgICAgICAvL2hlYWRlcignTG9jYXRpb246P2RvcG9zdD1hdXRvcmVnJm5vY2hlY2s9eWVzJyk7DQogICAgICAgIC8vZXhpdCgpOw0KICAgIH0gZWxzZSB7DQogICAgICAgIGNoYW5neWFuX3NldF9zZXR0aW5nKCdwd2QnLCAnJyk7DQogICAgfQ0KfQ0KDQppZiAoZW1wdHkoJHZlcnNpb24pKSAkdmVyc2lvbiA9ICcwLjAuMSc7DQppZiAodmVyc2lvbl9jb21wYXJlKCR2ZXJzaW9uLCBDSEFOR1lBTl9WRVIsICc8JykpIHsNCiAgICAkbXlzcWxfdmVyc2lvbiA9ICRkc3FsLT5HZXRWZXJzaW9uKFRSVUUpOw0KICAgIA0KICAgIGZvcmVhY2ggKCR1cGRhdGVfc3FscyBhcyAkdmVyID0+ICRzcWxzKSB7DQogICAgICAgIGlmICh2ZXJzaW9uX2NvbXBhcmUoJHZlciwgJHZlcnNpb24sJzwnKSkgew0KICAgICAgICAgICAgY29udGludWU7DQogICAgICAgIH0NCiAgICAgICAgZm9yZWFjaCAoJHNxbHMgYXMgJHNxbCkgew0KICAgICAgICAgICAgJHNxbCA9IHByZWdfcmVwbGFjZSgiI0VOR0lORT1NeUlTQU0jaSIsICdUWVBFPU15SVNBTScsICRzcWwpOw0KICAgICAgICAgICAgJHNxbDQxdG1wID0gJ0VOR0lORT1NeUlTQU0gREVGQVVMVCBDSEFSU0VUPScuJGNmZ19kYl9sYW5ndWFnZTsNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgaWYoJG15c3FsX3ZlcnNpb24gPj0gNC4xKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICRzcWwgPSBwcmVnX3JlcGxhY2UoIiNUWVBFPU15SVNBTSNpIiwgJHNxbDQxdG1wLCAkc3FsKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgICRkc3FsLT5FeGVjdXRlTm9uZVF1ZXJ5KCRzcWwpOw0KICAgICAgICB9DQogICAgICAgIGNoYW5neWFuX3NldF9zZXR0aW5nKCd2ZXJzaW9uJywgJHZlcik7DQogICAgICAgICR2ZXJzaW9uPWNoYW5neWFuX2dldF9zZXR0aW5nKCd2ZXJzaW9uJyk7DQogICAgfQ0KICAgICRpc3ZfYXBwX2tleSA9IGNoYW5neWFuX2dldF9pc3ZfYXBwX2tleSgpOw0KfQ0KDQppZigkZG9wb3N0PT0ncmVnJykNCnsNCiAgICAkbXNnID0gPDw8RU9UDQo8dGFibGUgd2lkdGg9Ijk4JSIgYm9yZGVyPSIwIiBjZWxsc3BhY2luZz0iMSIgY2VsbHBhZGRpbmc9IjEiPg0KICA8dGJvZHk+DQogICAgPHRyPg0KICAgICAgPHRkIGhlaWdodD0iMzAiIGNvbHNwYW49IjIiIHN0eWxlPSJjb2xvcjojOTk5Ij48c3Ryb25nPjxhIGhyZWY9Imh0dHA6Ly9jaGFuZ3lhbi5zb2h1LmNvbS8/ZnJvbWRlZGVjbXMiIHRhcmdldD0iX2JsYW5rIiBzdHlsZT0iY29sb3I6Ymx1ZSI+55WF6KiAPC9hPjwvc3Ryb25nPuaYr+S4gOS4queugOWNleiAjOW8uuWkp+eahOekvuS8muWMluivhOiuuuWPiuiBmuWQiOW5s+WPsOOAgueUqOaIt+WPr+S7peebtOaOpeeUqOiHquW3seeahOekvuS8muWMlue9kee7nOi0puaIt+WcqOesrOS4ieaWuee9keermeWPkeihqOivhOiuuu+8jOW5tuS4lOS4gOmUruivhOiuuuWQjOatpeiHs+ekvuS6pOe9kee7nOWwhue9keermeWGheWuueWSjOiHquW3seeahOivhOiuuuWIhuS6q+e7meWlveWPi+OAguWinuWKoOesrOS4ieaWuee9keermeeUqOaIt+a0u+i3g+W6pu+8jOiwg+WKqOWlveWPi+WPguS4juivhOiuuu+8jOW4ruWKqee9keermeWunueOsOekvuS8muWMlue9kee7nOS8mOWMlu+8jOacieaViOaPkOWNh+e9keermeekvuS8muWMlua1gemHj++8gTwvdGQ+DQogICAgPC90cj4NCiAgICA8dHI+DQogICAgICA8dGQgaGVpZ2h0PSIzMCIgY29sc3Bhbj0iMiIgc3R5bGU9ImNvbG9yOiM5OTkiPjwvdGQ+DQogICAgPC90cj4NCiAgICA8dHI+DQogICAgICA8dGQgd2lkdGg9IjE2JSIgaGVpZ2h0PSIzMCI+6YKu566x77yaPC90ZD4NCiAgICAgIDx0ZCB3aWR0aD0iODQlIiBzdHlsZT0idGV4dC1hbGlnbjpsZWZ0OyI+PGlucHV0IG5hbWU9InVzZXIiIHR5cGU9InRleHQiIGlkPSJ1c2VyIiBzaXplPSIxNiIgc3R5bGU9IndpZHRoOjIwMHB4IiAvPjwvdGQ+DQogICAgPC90cj4NCiAgICA8dHI+DQogICAgICA8dGQgaGVpZ2h0PSIzMCI+5a+G56CB77yaPC90ZD4NCiAgICAgIDx0ZCBzdHlsZT0idGV4dC1hbGlnbjpsZWZ0OyI+PGlucHV0IG5hbWU9InB3ZCIgdHlwZT0icGFzc3dvcmQiIGlkPSJwd2QiIHNpemU9IjE2IiBzdHlsZT0id2lkdGg6MjAwcHgiPg0KICAgICAgICA8c3BhbiBzdHlsZT0iY29sb3I6Izk5OSI+Jm5ic3A76K+36L6T5YWl5pWw5a2X44CB5a2X5q+N5oiW5bi455So56ym5Y+3PC9zcGFuPjwvdGQ+DQogICAgPC90cj4NCiAgICA8dHI+DQogICAgICA8dGQgaGVpZ2h0PSIzMCI+56Gu6K6k5a+G56CB77yaPC90ZD4NCiAgICAgIDx0ZCBzdHlsZT0idGV4dC1hbGlnbjpsZWZ0OyI+PGlucHV0IG5hbWU9InJlcHdkIiB0eXBlPSJwYXNzd29yZCIgaWQ9InJlcHdkIiBzaXplPSIxNiIgc3R5bGU9IndpZHRoOjIwMHB4Ij4NCiAgICAgICAgJm5ic3A7PC90ZD4NCiAgICA8L3RyPg0KICAgIDx0cj4NCiAgICAgIDx0ZCB3aWR0aD0iMTYlIiBoZWlnaHQ9IjMwIj7nvZHnq5nlkI3np7DvvJo8L3RkPg0KICAgICAgPHRkIHdpZHRoPSI4NCUiIHN0eWxlPSJ0ZXh0LWFsaWduOmxlZnQ7Ij48aW5wdXQgbmFtZT0iaXN2X25hbWUiIHR5cGU9InRleHQiIGlkPSJpc3ZfbmFtZSIgc2l6ZT0iMTYiIHN0eWxlPSJ3aWR0aDoyMDBweCIgdmFsdWU9InskY2ZnX3dlYm5hbWV9IiAvPjxzcGFuIHN0eWxlPSJjb2xvcjojOTk5Ij4mbmJzcDsg5Li65pa55L6/5oKo566h55CG56uZ54K56K+E6K6677yM5bu66K6u5pu05pS556uZ54K55ZCN56ewPC9zcGFuPjwvdGQ+DQogICAgPC90cj4NCiAgICA8dHI+DQogICAgICA8dGQgd2lkdGg9IjE2JSIgaGVpZ2h0PSIzMCI+572R56uZ5Zyw5Z2A77yaPC90ZD4NCiAgICAgIDx0ZCB3aWR0aD0iODQlIiBzdHlsZT0idGV4dC1hbGlnbjpsZWZ0OyI+PGlucHV0IG5hbWU9InVybCIgdHlwZT0idGV4dCIgaWQ9InVybCIgc2l6ZT0iMTYiIHN0eWxlPSJ3aWR0aDoyMDBweCIgdmFsdWU9InskY2ZnX2Jhc2Vob3N0fSIgLz48c3BhbiBzdHlsZT0iY29sb3I6Izk5OSI+Jm5ic3A7IOS+i+Wmgu+8mmh0dHA6Ly93d3cuZGVkZWNtcy5jb208L3NwYW4+PC90ZD4NCiAgICA8L3RyPg0KICA8L3Rib2R5Pg0KPC90YWJsZT4NCkVPVDsNCg0KICAgICR3aW50aXRsZSA9ICfms6jlhoznlYXoqIDluJDlj7fvvJonOw0KICAgICR3ZWNvbWVfaW5mbyA9ICc8YSBocmVmPSI/Ij7nlYXoqIDor4TorrrmqKHlnZc8L2E+IOOAi+azqOWGjOW4kOWPtyc7DQogICAgJHdpbiA9IG5ldyBPeFdpbmRvdygpOw0KICAgICR3aW4tPkluaXQoJz8nLCdqcy9ibGFuay5qcycsJ1BPU1QnKTsNCiAgICAkd2luLT5BZGRIaWRkZW4oJ2RvcG9zdCcsJ2RvcmVnJyk7DQogICAgJHdpbi0+QWRkSGlkZGVuKCdub2NoZWNrJywneWVzJyk7DQogICAgJHdpbi0+QWRkVGl0bGUoJHdpbnRpdGxlKTsNCiAgICAkd2luLT5BZGRNc2dJdGVtKCRtc2cpOw0KICAgICR3aW5mb3JtID0gJHdpbi0+R2V0V2luZG93KCdvaycsICcmbmJzcDsnLCBmYWxzZSk7DQogICAgJHdpbi0+RGlzcGxheSgpOw0KDQp9IGVsc2VpZiAoJGRvcG9zdD09J2RvcmVnJykgew0KICAgICR1c2VyID0gZW1wdHkoJHVzZXIpPyAnJyA6ICR1c2VyOw0KICAgICRwd2QgPSBlbXB0eSgkcHdkKT8gJycgOiAkcHdkOw0KICAgICRyZXB3ZCA9IGVtcHR5KCRyZXB3ZCk/ICcnIDogJHJlcHdkOw0KICAgICRpc3ZfbmFtZSA9IGVtcHR5KCRpc3ZfbmFtZSk/ICcnIDogJGlzdl9uYW1lOw0KICAgICR1cmwgPSBlbXB0eSgkdXJsKT8gJycgOiAkdXJsOw0KICAgIA0KICAgIGlmKCFwcmVnX21hdGNoKCIjXmh0dHA6XC9cL1tBLVphLXowLTldK1wuW0EtWmEtejAtOV0rW1wvPVw/JVwtJl9+YEBbXF1cJzorIV0qKFtePD5cIl0pKiQjIiwkdXJsKSkNCiAgICB7DQogICAgICAgIFNob3dNc2coIuivt+Whq+WGmeato+ehrueahOe9keWdgOagvOW8jyIsLTEpOw0KICAgICAgICBleGl0KCk7DQogICAgfQ0KICAgIA0KICAgIGlmKGVtcHR5KCRpc3ZfbmFtZSkgT1IgZW1wdHkoJHVybCkpDQogICAgew0KICAgICAgICBTaG93TXNnKCLmgqjpnIDopoHloavlhpnmraPnoa7nmoTnq5nngrnkv6Hmga/vvIzor7fph43mlrDloavlhpkiLC0xKTsNCiAgICAgICAgZXhpdCgpOw0KICAgIH0NCiAgICBpZihlbXB0eSgkdXNlcikgT1IgZW1wdHkoJHB3ZCkgT1IgZW1wdHkoJHJlcHdkKSkNCiAgICB7DQogICAgICAgIFNob3dNc2coIuaCqOmcgOimgeWhq+WGmUUtbWFpbOWSjOWvhuegge+8jOivt+mHjeaWsOWhq+WGmSIsLTEpOw0KICAgICAgICBleGl0KCk7DQogICAgfQ0KICAgIGlmKCFDaGVja0VtYWlsKCR1c2VyKSkNCiAgICB7DQogICAgICAgIFNob3dNc2coIuaCqOeahEUtbWFpbOagvOW8j+mUmeivr++8jOivt+mHjeaWsOWhq+WGmSIsLTEpOw0KICAgICAgICBleGl0KCk7DQogICAgfQ0KICAgIGlmKCRwd2QgIT0gJHJlcHdkKQ0KICAgIHsNCiAgICAgICAgU2hvd01zZygi5aGr5YaZ5Lik5qyh5a+G56CB5LiN5ZCM77yM6K+36L+U5Zue6YeN5paw6L6T5YWl77yBIiwtMSk7DQogICAgICAgIGV4aXQoKTsNCiAgICB9DQogICAgJHNpZ249Y2hhbmd5YW5fZ2VuX3NpZ24oJHVzZXIpOw0KICAgICRwYXJhbXNBcnI9YXJyYXkoDQogICAgICAgICdjbGllbnRfaWQnPT5DSEFOR1lBTl9DTElFTlRfSUQsIA0KICAgICAgICAndXNlcic9PmNoYW5neWFuX2F1dG9DaGFyc2V0KCR1c2VyKSwgDQogICAgICAgICdwYXNzd29yZCc9PiRwd2QsIA0KICAgICAgICAnaXN2X25hbWUnPT5jaGFuZ3lhbl9hdXRvQ2hhcnNldCgkaXN2X25hbWUpLCANCiAgICAgICAgJ3VybCc9PiR1cmwsIA0KICAgICAgICAnc2lnbic9PiRzaWduKTsNCiAgICAkcnM9Y2hhbmd5YW5faHR0cF9zZW5kKENIQU5HWUFOX0FQSV9SRUcsMCwkcGFyYW1zQXJyKTsNCiAgICAkcmVzdWx0PWpzb25fZGVjb2RlKCRycyxUUlVFKTsNCiAgICAkZXJyb3JpbmZvWydhcHBpZCBub3QgZXhpc3QnXT0nY2xpZW50X2lk5LiN5a2Y5ZyoJzsNCiAgICAkZXJyb3JpbmZvWydzaWduIGVycm9yJ109J+etvuWQjemqjOivgeWksei0pSc7DQogICAgJGVycm9yaW5mb1sndXNlciBuYW1lIGV4aXN0J109J+azqOWGjOeUqOaIt+W3sue7j+WtmOWcqCc7DQogICAgaWYoJHJlc3VsdFsnc3RhdHVzJ109PTApDQogICAgew0KICAgICAgICAvLyDkv53lrZhhcHBpZCxpZOS/oeaBrw0KICAgICAgICBjaGFuZ3lhbl9zZXRfc2V0dGluZygndXNlcicsICR1c2VyKTsNCiAgICAgICAgY2hhbmd5YW5fc2V0X3NldHRpbmcoJ2FwcGlkJywgJHJlc3VsdFsnYXBwaWQnXSk7DQogICAgICAgIGNoYW5neWFuX3NldF9zZXR0aW5nKCdpZCcsICRyZXN1bHRbJ2lkJ10pOw0KICAgICAgICBjaGFuZ3lhbl9zZXRfc2V0dGluZygnaXN2X2lkJywgJHJlc3VsdFsnaXN2X2lkJ10pOw0KICAgICAgICBjaGFuZ3lhbl9jbGVhcmNhY2hlKCk7DQogICAgICAgIFNob3dNc2coIuaCqOW3sue7j+aIkOWKn+azqOWGjO+8jOeOsOWcqOi/m+ihjOeZu+W9le+8gSIsJz8nKTsNCiAgICAgICAgZXhpdCgpOw0KICAgIH0gZWxzZSB7DQogICAgICAgIFNob3dNc2coIuaXoOazleato+W4uOazqOWGjO+8jOmUmeivr+S/oeaBr++8miIuJGVycm9yaW5mb1skcmVzdWx0Wydtc2cnXV0sIC0xKTsNCiAgICAgICAgZXhpdCgpOw0KICAgIH0NCn0gZWxzZWlmICgkZG9wb3N0PT0nYXV0b3JlZycpIHsNCiAgICAkc3RlcCA9IGVtcHR5KCRzdGVwKT8gMCA6ICRzdGVwOw0KICAgICRkYl91c2VyID0gY2hhbmd5YW5fZ2V0X3NldHRpbmcoJ3VzZXInKTsNCiAgICBpZighZW1wdHkoJGRiX3VzZXIpKSBkaWUoJ0Vycm9yOlVzZXIgbmFtZSBpcyBub3QgZW1wdHkhJyk7DQogICAgJGNoYXJzPSdhYmNkZWZnaGlna2xtbm9wcXJzdHV2d3h3eUFCQ0RFRkdISUdLTE1OT1BRUlNUVVZXWFdZMDEyMzQ1Njc4OSc7DQogICAgJHNpZ249Y2hhbmd5YW5fZ2VuX3NpZ24oQ0hBTkdZQU5fQ0xJRU5UX0lEKTsNCiAgICAkdXJsID0gJF9TRVJWRVJbJ1NFUlZFUl9OQU1FJ107DQogICAgJGlzdl9uYW1lID0gY25fc3Vic3RyKCRjZmdfd2VibmFtZSwyMCk7DQogICAgJHBhcmFtc0Fycj1hcnJheSgNCiAgICAgICAgJ2NsaWVudF9pZCc9PkNIQU5HWUFOX0NMSUVOVF9JRCwgDQogICAgICAgICdpc3ZfbmFtZSc9PmNoYW5neWFuX2F1dG9DaGFyc2V0KCRpc3ZfbmFtZSksIA0KICAgICAgICAndXJsJz0+J2h0dHA6Ly8nLiR1cmwsIA0KICAgICAgICAnc2lnbic9PiRzaWduKTsNCg0KICAgICRycz1jaGFuZ3lhbl9odHRwX3NlbmQoQ0hBTkdZQU5fQVBJX0FVVE9SRUcsMCwkcGFyYW1zQXJyKTsNCiAgICAvL3Zhcl9kdW1wKCRycyk7ZXhpdDsNCiAgICAkcmVzdWx0PWpzb25fZGVjb2RlKCRycyxUUlVFKTsNCiAgICBpZigkcmVzdWx0WydzdGF0dXMnXT09MCkNCiAgICB7DQogICAgICAgIC8vIOS/neWtmGFwcGlkLGlk5L+h5oGvDQogICAgICAgIGNoYW5neWFuX3NldF9zZXR0aW5nKCd1c2VyJywgJHJlc3VsdFsndXNlciddKTsNCiAgICAgICAgY2hhbmd5YW5fc2V0X3NldHRpbmcoJ2FwcGlkJywgJHJlc3VsdFsnYXBwaWQnXSk7DQogICAgICAgIGNoYW5neWFuX3NldF9zZXR0aW5nKCdpZCcsICRyZXN1bHRbJ2lkJ10pOw0KICAgICAgICBjaGFuZ3lhbl9zZXRfc2V0dGluZygnaXN2X2FwcF9rZXknLCAkcmVzdWx0Wydpc3ZfYXBwX2tleSddKTsNCiAgICAgICAgY2hhbmd5YW5fc2V0X3NldHRpbmcoJ2lzdl9pZCcsICRyZXN1bHRbJ2lzdl9pZCddKTsNCiAgICAgICAgY2hhbmd5YW5fY2xlYXJjYWNoZSgpOw0KICAgICAgICAkcGFzc3dkID0gY2hhbmd5YW5fbWNoU3RyQ29kZSgkcmVzdWx0WydwYXNzd2QnXSwgJ0VOQ09ERScpOw0KICAgICAgICBjaGFuZ3lhbl9zZXRfc2V0dGluZygncHdkJywgJHBhc3N3ZCk7DQogICAgICAgIGhlYWRlcignTG9jYXRpb246PycpOw0KICAgICAgICBleGl0KCk7DQogICAgfSBlbHNlIHsNCiAgICAgICAgaWYoJHN0ZXAgPiAxMCkNCiAgICAgICAgew0KICAgICAgICAgICAgU2hvd01zZygi5peg5rOV6Ieq5Yqo5YiG6YWN6LSm5Y+377yM6K+35omL5Yqo6L+b6KGM5rOo5YaM77yBIiwnP2RvcG9zdD1yZWcmbm9jaGVjaz15ZXMnKTsNCiAgICAgICAgICAgIGV4aXQoKTsNCiAgICAgICAgfQ0KICAgICAgICAkc3RlcCsrOw0KICAgICAgICBoZWFkZXIoJ0xvY2F0aW9uOj9kb3Bvc3Q9YXV0b3JlZyZub2NoZWNrPXllcyZpPScuJHN0ZXApOw0KICAgICAgICBleGl0KCk7DQogICAgfQ0KICAgIA0KfSBlbHNlaWYgKCRkb3Bvc3Q9PSdiaW5kJykgew0KICAgICR0eXBlID0gZW1wdHkoJHR5cGUpPyAncmVnJyA6ICR0eXBlOw0KICAgIGlmKCRhY3Rpb249PSdkbycpDQogICAgew0KICAgICAgICBpZigkdHlwZSE9J3JlZycpICRyZXB3ZD0kcHdkOw0KICAgICAgICBpZihlbXB0eSgkdXNlcikgT1IgZW1wdHkoJHB3ZCkgT1IgZW1wdHkoJHJlcHdkKSkNCiAgICAgICAgew0KICAgICAgICAgICAgU2hvd01zZygi5oKo6ZyA6KaB5aGr5YaZRS1tYWls5ZKM5a+G56CB77yM6K+36YeN5paw5aGr5YaZIiwtMSk7DQogICAgICAgICAgICBleGl0KCk7DQogICAgICAgIH0NCiAgICAgICAgaWYoIUNoZWNrRW1haWwoJHVzZXIpKQ0KICAgICAgICB7DQogICAgICAgICAgICBTaG93TXNnKCLmgqjnmoRFLW1haWzmoLzlvI/plJnor6/vvIzor7fph43mlrDloavlhpkiLC0xKTsNCiAgICAgICAgICAgIGV4aXQoKTsNCiAgICAgICAgfQ0KICAgICAgICBpZigkcHdkICE9ICRyZXB3ZCkNCiAgICAgICAgew0KICAgICAgICAgICAgU2hvd01zZygi5aGr5YaZ5Lik5qyh5a+G56CB5LiN5ZCM77yM6K+36L+U5Zue6YeN5paw6L6T5YWl77yBIiwtMSk7DQogICAgICAgICAgICBleGl0KCk7DQogICAgICAgIH0NCiAgICAgICAgaWYoJHR5cGU9PSdyZWcnKQ0KICAgICAgICB7DQogICAgICAgICAgICAkZXJyb3JJbmZvPScnOw0KICAgICAgICAgICAgaWYoY2hhbmd5YW5fYmluZF9hY2NvdW50KCR1c2VyLCAkcHdkLCAmJGVycm9ySW5mbykpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgU2hvd01zZygi57uR5a6a5oiQ5Yqf77yM5LiL6Z2i6L+b6KGM6LSm5Y+35YiH5o2i4oCm4oCm77yBIiwiP2RvcG9zdD1xdWlja19sb2dpbiZub2NoZWNrPXllcyIpOw0KICAgICAgICAgICAgICAgIGV4aXQoKTsNCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgU2hvd01zZygi6LSm5Y+35pyq57uR5a6a5oiQ5Yqf77yM6K+35qOA5p+l5oKo6L6T5YWl55qE5L+h5oGv5piv5ZCm5pyJ6K+v77yaeyRlcnJvckluZm9977yBIiwtMSk7DQogICAgICAgICAgICAgICAgZXhpdCgpOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgLy92YXJfZHVtcCgiTG9jYXRpb246P2RvcG9zdD1sb2dpbiZ1c2VyPXskdXNlcn0mcHdkPXskcHdkfSIpO2V4aXQ7DQogICAgICAgICAgICBoZWFkZXIoIkxvY2F0aW9uOj9kb3Bvc3Q9bG9naW4mdXNlcj17JHVzZXJ9JnB3ZD17JHB3ZH0mY2xlYXI9eWVzIik7DQogICAgICAgICAgICBleGl0KCk7DQogICAgICAgIH0NCiAgICAgICAgZXhpdCgpOw0KICAgIH0NCiAgICBpZigkdHlwZT09J3JlZycpDQogICAgew0KICAgICAgICAkdGFibGUgPSA8PDxFT1QNCiAgICAgICAgICAgIDx0cj4NCiAgICAgICAgICAgIDx0ZCBoZWlnaHQ9IjMwIj7nu5HlrprnsbvlnovvvJo8L3RkPg0KICAgICAgICAgICAgPHRkIHN0eWxlPSJ0ZXh0LWFsaWduOmxlZnQ7Ij48aW5wdXQgbmFtZT0icmFkaW8iIHR5cGU9InJhZGlvIiBpZD0ibmV3cmVnIiB2YWx1ZT0ibmV3cmVnIiBvbmNsaWNrPSJ3aW5kb3cubG9jYXRpb24uaHJlZj0nP2RvcG9zdD1iaW5kJnR5cGU9cmVnJyIgY2hlY2tlZD4NCiAgICAgICAgICAgIDxsYWJlbCBmb3I9Im5ld3JlZyI+5paw5Yib5bu66LSm5Y+3PC9sYWJlbD4NCiAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJyYWRpbyIgbmFtZT0icmFkaW8iIGlkPSJsb2dpbiIgdmFsdWU9ImxvZ2luIiBvbmNsaWNrPSJ3aW5kb3cubG9jYXRpb24uaHJlZj0nP2RvcG9zdD1iaW5kJnR5cGU9bG9naW4nIiA+DQogICAgICAgICAgICAgPGxhYmVsIGZvcj0ibG9naW4iPuW3sue7j+acieeVheiogOi0puWPtzwvbGFiZWw+DQogICAgICAgICAgICA8aW5wdXQgdHlwZT0naGlkZGVuJyBuYW1lPSd0eXBlJyB2YWx1ZT0ncmVnJz48L3RkPg0KICAgICAgICAgIDwvdHI+DQogICAgICAgICAgICA8dHI+DQogICAgICAgICAgICAgIDx0ZCB3aWR0aD0iMTYlIiBoZWlnaHQ9IjMwIj7ns7vnu5/liIbphY3otKblj7fvvJo8L3RkPg0KICAgICAgICAgICAgICA8dGQgd2lkdGg9Ijg0JSIgc3R5bGU9InRleHQtYWxpZ246bGVmdDsiPnskX1NFU1NJT05bJ3VzZXInXX08L3RkPg0KICAgICAgICAgICAgPC90cj4NCiAgICAgICAgICAgIDx0cj4NCiAgICAgICAgICAgICAgPHRkIHdpZHRoPSIxNiUiIGhlaWdodD0iMzAiPumCrueuse+8mjwvdGQ+DQogICAgICAgICAgICAgIDx0ZCB3aWR0aD0iODQlIiBzdHlsZT0idGV4dC1hbGlnbjpsZWZ0OyI+PGlucHV0IG5hbWU9InVzZXIiIHR5cGU9InRleHQiIGlkPSJ1c2VyIiBzaXplPSIxNiIgc3R5bGU9IndpZHRoOjIwMHB4IiAvPjwvdGQ+DQogICAgICAgICAgICA8L3RyPg0KICAgICAgICAgICAgPHRyPg0KICAgICAgICAgICAgICA8dGQgaGVpZ2h0PSIzMCI+5a+G56CB77yaPC90ZD4NCiAgICAgICAgICAgICAgPHRkIHN0eWxlPSJ0ZXh0LWFsaWduOmxlZnQ7Ij48aW5wdXQgbmFtZT0icHdkIiB0eXBlPSJwYXNzd29yZCIgaWQ9InB3ZCIgc2l6ZT0iMTYiIHN0eWxlPSJ3aWR0aDoyMDBweCI+DQogICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImNvbG9yOiM5OTkiPiZuYnNwO+ivt+i+k+WFpeaVsOWtl+OAgeWtl+avjeaIluW4uOeUqOespuWPtzwvc3Bhbj48L3RkPg0KICAgICAgICAgICAgPC90cj4NCiAgICAgICAgICAgIDx0cj4NCiAgICAgICAgICAgICAgPHRkIGhlaWdodD0iMzAiPuehruiupOWvhuegge+8mjwvdGQ+DQogICAgICAgICAgICAgIDx0ZCBzdHlsZT0idGV4dC1hbGlnbjpsZWZ0OyI+PGlucHV0IG5hbWU9InJlcHdkIiB0eXBlPSJwYXNzd29yZCIgaWQ9InJlcHdkIiBzaXplPSIxNiIgc3R5bGU9IndpZHRoOjIwMHB4Ij4NCiAgICAgICAgICAgICAgICAmbmJzcDs8L3RkPg0KICAgICAgICAgICAgPC90cj4NCkVPVDsNCiAgICB9IGVsc2Ugew0KICAgICAgICAkdGFibGUgPSA8PDxFT1QNCiAgICAgICAgICAgIDx0cj4NCiAgICAgICAgICAgIDx0ZCBoZWlnaHQ9IjMwIj7nu5HlrprnsbvlnovvvJo8L3RkPg0KICAgICAgICAgICAgPHRkIHN0eWxlPSJ0ZXh0LWFsaWduOmxlZnQ7Ij48aW5wdXQgbmFtZT0icmFkaW8iIHR5cGU9InJhZGlvIiBpZD0ibmV3cmVnIiB2YWx1ZT0ibmV3cmVnIiBvbmNsaWNrPSJ3aW5kb3cubG9jYXRpb24uaHJlZj0nP2RvcG9zdD1iaW5kJnR5cGU9cmVnJyI+DQogICAgICAgICAgICA8bGFiZWwgZm9yPSJuZXdyZWciPuaWsOWIm+W7uui0puWPtzwvbGFiZWw+DQogICAgICAgICAgICA8aW5wdXQgdHlwZT0icmFkaW8iIG5hbWU9InJhZGlvIiBpZD0ibG9naW4iIHZhbHVlPSJsb2dpbiIgb25jbGljaz0id2luZG93LmxvY2F0aW9uLmhyZWY9Jz9kb3Bvc3Q9YmluZCZ0eXBlPWxvZ2luJyIgY2hlY2tlZD4NCiAgICAgICAgICAgIDxsYWJlbCBmb3I9ImxvZ2luIj7lt7Lnu4/mnInnlYXoqIDotKblj7c8L2xhYmVsPjxpbnB1dCB0eXBlPSdoaWRkZW4nIG5hbWU9J3R5cGUnIHZhbHVlPSdsb2dpbic+PC90ZD4NCiAgICAgICAgICA8L3RyPg0KICAgICAgICAgICAgPHRyPg0KICAgICAgICAgICAgICA8dGQgd2lkdGg9IjE2JSIgaGVpZ2h0PSIzMCI+57O757uf5YiG6YWN6LSm5Y+377yaPC90ZD4NCiAgICAgICAgICAgICAgPHRkIHdpZHRoPSI4NCUiIHN0eWxlPSJ0ZXh0LWFsaWduOmxlZnQ7Ij57JF9TRVNTSU9OWyd1c2VyJ119PC90ZD4NCiAgICAgICAgICAgIDwvdHI+DQogICAgICAgICAgICA8dHI+DQogICAgICAgICAgICAgIDx0ZCB3aWR0aD0iMTYlIiBoZWlnaHQ9IjMwIj7pgq7nrrHvvJo8L3RkPg0KICAgICAgICAgICAgICA8dGQgd2lkdGg9Ijg0JSIgc3R5bGU9InRleHQtYWxpZ246bGVmdDsiPjxpbnB1dCBuYW1lPSJ1c2VyIiB0eXBlPSJ0ZXh0IiBpZD0idXNlciIgc2l6ZT0iMTYiIHN0eWxlPSJ3aWR0aDoyMDBweCIgLz48L3RkPg0KICAgICAgICAgICAgPC90cj4NCiAgICAgICAgICAgIDx0cj4NCiAgICAgICAgICAgICAgPHRkIGhlaWdodD0iMzAiPuWvhuegge+8mjwvdGQ+DQogICAgICAgICAgICAgIDx0ZCBzdHlsZT0idGV4dC1hbGlnbjpsZWZ0OyI+PGlucHV0IG5hbWU9InB3ZCIgdHlwZT0icGFzc3dvcmQiIGlkPSJwd2QiIHNpemU9IjE2IiBzdHlsZT0id2lkdGg6MjAwcHgiPg0KICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJjb2xvcjojOTk5Ij4mbmJzcDvor7fovpPlhaXmlbDlrZfjgIHlrZfmr43miJbluLjnlKjnrKblj7c8L3NwYW4+PC90ZD4NCiAgICAgICAgICAgIDwvdHI+DQpFT1Q7DQogICAgfQ0KICAgICRtc2cgPSA8PDxFT1QNCjxodG1sPg0KPGhlYWQ+DQo8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD17JGNmZ19zb2Z0X2xhbmd9Ij4NCjx0aXRsZT7nu5HlrprnlYXoqIDluJDlj7fvvJo8L3RpdGxlPg0KPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0ieyRjZmdfcGx1c19kaXJ9L2ltZy9iYXNlLmNzcyI+DQo8L2hlYWQ+DQo8Ym9keSBiYWNrZ3JvdW5kPSd7JGNmZ19wbHVzX2Rpcn0vaW1nL2FsbGJnLmdpZicgbGVmdG1hcmdpbj0iOCIgdG9wbWFyZ2luPSc4Jz4NCjx0YWJsZSB3aWR0aD0iOTglIiBib3JkZXI9IjAiIGFsaWduPSJjZW50ZXIiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCIgYmdjb2xvcj0iI0RGRjlBQSI+DQogIDx0cj4NCiAgICA8dGQgaGVpZ2h0PSIyOCIgc3R5bGU9ImJvcmRlcjoxcHggc29saWQgI0RBREFEQSIgYmFja2dyb3VuZD0neyRjZmdfcGx1c19kaXJ9L2ltZy93YmcuZ2lmJz4mbmJzcDs8Yj7il4c8YSBocmVmPSI/Ij7nlYXoqIDor4TorrrmqKHlnZc8L2E+IOOAi+e7keWumuW4kOWPtzwvYj48L3RkPg0KICA8L3RyPg0KICA8dHI+DQogIA0KICA8dGQgd2lkdGg9IjEwMCUiIGhlaWdodD0iODAiIHN0eWxlPSJwYWRkaW5nLXRvcDo1cHgiIGJnY29sb3I9JyNmZmZmZmYnPg0KICANCiAgPHNjcmlwdCBsYW5ndWFnZT0namF2YXNjcmlwdCc+DQpmdW5jdGlvbiBDaGVja1N1Ym1pdCgpew0KCXJldHVybiB0cnVlOyANCn0NCjwvc2NyaXB0Pg0KICA8Zm9ybSBuYW1lPSdteWZvcm0nIG1ldGhvZD0nUE9TVCcgb25TdWJtaXQ9J3JldHVybiBDaGVja1N1Ym1pdCgpOycgYWN0aW9uPSc/Jz4NCiAgDQogIDxpbnB1dCB0eXBlPSdoaWRkZW4nIG5hbWU9J2RvcG9zdCcgdmFsdWU9J2JpbmQnPg0KICA8aW5wdXQgdHlwZT0naGlkZGVuJyBuYW1lPSdhY3Rpb24nIHZhbHVlPSdkbyc+DQogIDxpbnB1dCB0eXBlPSdoaWRkZW4nIG5hbWU9J25vY2hlY2snIHZhbHVlPSd5ZXMnPg0KICA8dGFibGUgd2lkdGg9JzEwMCUnICBib3JkZXI9JzAnIGNlbGxwYWRkaW5nPSczJyBjZWxsc3BhY2luZz0nMScgYmdjb2xvcj0nI0RBREFEQSc+DQogICAgPHRyIGJnY29sb3I9JyNEQURBREEnPg0KICAgICAgPHRkIGNvbHNwYW49JzInIGJhY2tncm91bmQ9J3skY2ZnX3BsdXNfZGlyfS9pbWcvd2JnLmdpZicgaGVpZ2h0PScyNic+PGZvbnQgY29sb3I9JyM2NjY2MDAnPjxiPue7keWumueVheiogOW4kOWPt++8mjwvYj48L2ZvbnQ+PC90ZD4NCiAgICA8L3RyPg0KICAgIDx0ciBiZ2NvbG9yPScjRkZGRkZGJz4NCiAgICAgIDx0ZCBjb2xzcGFuPScyJyAgaGVpZ2h0PScxMDAnPjx0YWJsZSB3aWR0aD0iOTglIiBib3JkZXI9IjAiIGNlbGxzcGFjaW5nPSIxIiBjZWxscGFkZGluZz0iMSI+DQogICAgICAgICAgPHRib2R5Pg0KICAgICAgICAgICAgPHRyPg0KICAgICAgICAgICAgICA8dGQgaGVpZ2h0PSIzMCIgY29sc3Bhbj0iMiIgc3R5bGU9ImNvbG9yOiM5OTkiPjxzdHJvbmc+PGEgaHJlZj0iaHR0cDovL2NoYW5neWFuLnNvaHUuY29tLz9mcm9tZGVkZWNtcyIgdGFyZ2V0PSJfYmxhbmsiIHN0eWxlPSJjb2xvcjpibHVlIj7nlYXoqIA8L2E+PC9zdHJvbmc+5piv5LiA5Liq566A5Y2V6ICM5by65aSn55qE56S+5Lya5YyW6K+E6K665Y+K6IGa5ZCI5bmz5Y+w44CC55So5oi35Y+v5Lul55u05o6l55So6Ieq5bex55qE56S+5Lya5YyW572R57uc6LSm5oi35Zyo56ys5LiJ5pa5572R56uZ5Y+R6KGo6K+E6K6677yM5bm25LiU5LiA6ZSu6K+E6K665ZCM5q2l6Iez56S+5Lqk572R57uc5bCG572R56uZ5YaF5a655ZKM6Ieq5bex55qE6K+E6K665YiG5Lqr57uZ5aW95Y+L44CC5aKe5Yqg56ys5LiJ5pa5572R56uZ55So5oi35rS76LeD5bqm77yM6LCD5Yqo5aW95Y+L5Y+C5LiO6K+E6K6677yM5biu5Yqp572R56uZ5a6e546w56S+5Lya5YyW572R57uc5LyY5YyW77yM5pyJ5pWI5o+Q5Y2H572R56uZ56S+5Lya5YyW5rWB6YeP77yBPC90ZD4NCiAgICAgICAgICAgIDwvdHI+DQogICAgICAgICAgICA8dHI+DQogICAgICAgICAgICAgIDx0ZCBoZWlnaHQ9IjMwIiBjb2xzcGFuPSIyIiBzdHlsZT0iY29sb3I6Izk5OSI+PC90ZD4NCiAgICAgICAgICAgIDwvdHI+DQogICAgICAgICAgIHskdGFibGV9DQogICAgICAgICAgPC90Ym9keT4NCiAgICAgICAgPC90YWJsZT48L3RkPg0KICAgIDwvdHI+DQogICAgPHRyPg0KICAgICAgPHRkIGNvbHNwYW49JzInIGJnY29sb3I9JyNGOUZDRUYnPjx0YWJsZSB3aWR0aD0nMjcwJyBib3JkZXI9JzAnIGNlbGxwYWRkaW5nPScwJyBjZWxsc3BhY2luZz0nMCc+DQogICAgICAgICAgPHRyIGFsaWduPSdjZW50ZXInIGhlaWdodD0nMjgnPg0KICAgICAgICAgICAgPHRkIHdpZHRoPSc5MCc+PGlucHV0IG5hbWU9J2ltYWdlRmllbGQxJyB0eXBlPSdpbWFnZScgY2xhc3M9J25wJyBzcmM9J3skY2ZnX3BsdXNfZGlyfS9pbWcvYnV0dG9uX29rLmdpZicgd2lkdGg9JzYwJyBoZWlnaHQ9JzIyJyBib3JkZXI9JzAnIC8+PC90ZD4NCiAgICAgICAgICAgIDx0ZCB3aWR0aD0nOTAnPjxhIGhyZWY9Jz8nPjxpbWcgc3JjPScvcGx1cy9pbWcvYnV0dG9uX2JhY2suZ2lmJyB3aWR0aD0nNjAnIGhlaWdodD0nMjInIGJvcmRlcj0nMCcgLz48L2E+PC90ZD4NCiAgICAgICAgICAgIDx0ZCB3aWR0aD0nOTAnPjwvdGQ+DQogICAgICAgICAgPC90cj4NCiAgICAgICAgPC90YWJsZT48L3RkPg0KICAgIDwvdHI+DQogIDwvdGFibGU+DQogIDwvdGQ+DQogIDwvdHI+DQo8L3RhYmxlPg0KPHAgYWxpZ249ImNlbnRlciI+IDxicj4NCiAgPGJyPg0KPC9wPg0KPC9ib2R5Pg0KPC9odG1sPg0KRU9UOw0KICAgIGVjaG8gJG1zZzsNCiAgICBleGl0KCk7DQp9IGVsc2VpZiAoJGRvcG9zdD09J3F1aWNrX2xvZ2luJykNCnsNCiAgICAkY2xlYXIgPSBlbXB0eSgkY2xlYXIpPyAnJyA6ICRjbGVhcjsNCiAgICBpZihlbXB0eSgkZm9yd2FyZCkpICRmb3J3YXJkID0gJyc7DQogICAgJHVzZXIgPSBjaGFuZ3lhbl9nZXRfc2V0dGluZygndXNlcicpOw0KICAgICRwd2Q9Y2hhbmd5YW5fbWNoU3RyQ29kZShjaGFuZ3lhbl9nZXRfc2V0dGluZygncHdkJyksICdERUNPREUnKSA7DQogICAgJHNpZ249Y2hhbmd5YW5fZ2VuX3NpZ24oJHVzZXIpOw0KICAgICRwYXJhbXNBcnI9YXJyYXkoDQogICAgICAgICdjbGllbnRfaWQnPT5DSEFOR1lBTl9DTElFTlRfSUQsIA0KICAgICAgICAndXNlcic9PiR1c2VyLCANCiAgICAgICAgJ3Bhc3N3b3JkJz0+JHB3ZCwgDQogICAgICAgICdzaWduJz0+JHNpZ24pOw0KICAgICRycz1jaGFuZ3lhbl9odHRwX3NlbmQoQ0hBTkdZQU5fQVBJX0xPR0lOLDAsJHBhcmFtc0Fycik7DQogICAgJHJlc3VsdD1qc29uX2RlY29kZSgkcnMsVFJVRSk7DQogICAgaWYoJHJlc3VsdFsnc3RhdHVzJ109PTApDQogICAgew0KICAgICAgICBpZighZW1wdHkoJGNsZWFyKSkgY2hhbmd5YW5fc2V0X3NldHRpbmcoJ2lzdl9pZCcsICcnKTsNCiAgICAgICAgLy8kYXBwaWQgPSBjaGFuZ3lhbl9nZXRfc2V0dGluZygnYXBwaWQnKTsNCiAgICAgICAgJGlzdl9pZCA9IGNoYW5neWFuX2dldF9zZXR0aW5nKCdpc3ZfaWQnKTsNCiAgICAgICAgJGlzdnMgPSBjaGFuZ3lhbl9nZXRfaXN2cygpOw0KICAgICAgICAkaXN2X2luID0gRkFMU0U7DQogICAgICAgIGlmKCFlbXB0eSgkaXN2X2lkKSApIGZvcmVhY2goJGlzdnMgYXMgJGlzdil7IGlmKCRpc3ZbJ2lkJ109PSRpc3ZfaWQpICRpc3ZfaW49VFJVRTsgfQ0KICAgICAgICAkX1NFU1NJT05bJ2NoYW5neWFuJ109JHJlc3VsdFsndG9rZW4nXTsNCiAgICAgICAgJF9TRVNTSU9OWyd1c2VyJ109JHVzZXI7DQogICAgICAgIGlmKCEkaXN2X2luKQ0KICAgICAgICB7DQogICAgICAgICAgICBTaG93TXNnKCLlsJrmnKrorr7nva7nq5nngrlBUFDkv6Hmga/vvIzor7fov5vooYzphY3nva7igKbigKYiLCc/ZG9wb3N0PWNoYW5nZV9hcHBpbmZvJyk7DQogICAgICAgICAgICBleGl0KCk7DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICBoZWFkZXIoJ0xvY2F0aW9uOj9mb3J3YXJkPScuJGZvcndhcmQpOw0KICAgICAgICAgICAgZXhpdCgpOw0KICAgICAgICB9DQogICAgfSBlbHNlIHsNCiAgICAgICAgY2hhbmd5YW5fc2V0X3NldHRpbmcoJ3B3ZCcsICcnKTsNCiAgICAgICAgaGVhZGVyKCdMb2NhdGlvbjo/Jyk7DQogICAgICAgIGV4aXQoKTsNCiAgICB9DQp9IGVsc2VpZiAoJGRvcG9zdD09J2xvZ2luJykgew0KICAgICR1c2VyID0gZW1wdHkoJHVzZXIpPyAnJyA6ICR1c2VyOw0KICAgICRwd2QgPSBlbXB0eSgkcHdkKT8gJycgOiAkcHdkOw0KICAgICRjbGVhciA9IGVtcHR5KCRjbGVhcik/ICcnIDogJGNsZWFyOw0KICAgIC8vJHJtcHdkID0gZW1wdHkoJHJtcHdkKT8gJycgOiAkcm1wd2Q7DQogICAgaWYoZW1wdHkoJHVzZXIpIE9SIGVtcHR5KCRwd2QpKQ0KICAgIHsNCiAgICAgICAgU2hvd01zZygi5oKo6ZyA6KaB5aGr5YaZRS1tYWls5ZKM5a+G56CB77yM6K+36YeN5paw5aGr5YaZIiwtMSk7DQogICAgICAgIGV4aXQoKTsNCiAgICB9DQogICAgaWYoIUNoZWNrRW1haWwoJHVzZXIpKQ0KICAgIHsNCiAgICAgICAgU2hvd01zZygi5oKo55qERS1tYWls5qC85byP6ZSZ6K+v77yM6K+36YeN5paw5aGr5YaZIiwtMSk7DQogICAgICAgIGV4aXQoKTsNCiAgICB9DQogICAgDQogICAgJHNpZ249Y2hhbmd5YW5fZ2VuX3NpZ24oJHVzZXIpOw0KICAgICRwYXJhbXNBcnI9YXJyYXkoDQogICAgICAgICdjbGllbnRfaWQnPT5DSEFOR1lBTl9DTElFTlRfSUQsIA0KICAgICAgICAndXNlcic9PiR1c2VyLCANCiAgICAgICAgJ3Bhc3N3b3JkJz0+JHB3ZCwgDQogICAgICAgICdzaWduJz0+JHNpZ24pOw0KICAgICRycz1jaGFuZ3lhbl9odHRwX3NlbmQoQ0hBTkdZQU5fQVBJX0xPR0lOLDAsJHBhcmFtc0Fycik7DQogICAgJHJlc3VsdD1qc29uX2RlY29kZSgkcnMsVFJVRSk7DQogICAgaWYoJHJlc3VsdFsnc3RhdHVzJ109PTEpDQogICAgew0KICAgICAgICBTaG93TXNnKCLml6Dms5XnmbvlvZXvvIzor7fmo4Dmn6XmgqjnmoTluJDlj7fkv6Hmga/mmK/lkKbloavlhpnmraPnoa7vvIEiLC0xKTsNCiAgICAgICAgZXhpdCgpOw0KICAgIH0gZWxzZWlmICgkcmVzdWx0WydzdGF0dXMnXT09MCkNCiAgICB7DQogICAgICAgICRkYl91c2VyID0gY2hhbmd5YW5fZ2V0X3NldHRpbmcoJ3VzZXInKTsNCg0KICAgICAgICBpZigkZGJfdXNlciAhPSAkdXNlcikNCiAgICAgICAgew0KICAgICAgICAgICAgY2hhbmd5YW5fc2V0X3NldHRpbmcoJ3VzZXInLCAkdXNlcik7DQogICAgICAgICAgICBjaGFuZ3lhbl9zZXRfc2V0dGluZygnaXN2X2FwcF9rZXknLCAnJyk7DQogICAgICAgICAgICAkaXN2X2FwcF9rZXkgPSBjaGFuZ3lhbl9nZXRfaXN2X2FwcF9rZXkoKTsNCiAgICAgICAgfQ0KICAgICAgICBpZighZW1wdHkoJGNsZWFyKSkgY2hhbmd5YW5fc2V0X3NldHRpbmcoJ2lzdl9pZCcsICcnKTsNCiAgICAgICAgJGlzdl9pZCA9IGNoYW5neWFuX2dldF9zZXR0aW5nKCdpc3ZfaWQnKTsNCiAgICAgICAgJGlzdnMgPSBjaGFuZ3lhbl9nZXRfaXN2cygpOw0KICAgICAgICAkaXN2X2luID0gRkFMU0U7DQogICAgICAgIGlmKCFlbXB0eSgkaXN2X2lkKSkgZm9yZWFjaCgkaXN2cyBhcyAkaXN2KXsgaWYoJGlzdlsnaWQnXT09JGlzdl9pZCkgJGlzdl9pbj1UUlVFOyB9DQogICAgICAgICRfU0VTU0lPTlsnY2hhbmd5YW4nXT0kcmVzdWx0Wyd0b2tlbiddOw0KICAgICAgICAkX1NFU1NJT05bJ3VzZXInXT0kdXNlcjsNCiAgICAgICAgJGxvZ2luX3VybD1DSEFOR1lBTl9BUElfU0VUQ09PS0lFLic/Y2xpZW50X2lkPScuQ0hBTkdZQU5fQ0xJRU5UX0lELicmdG9rZW49Jy4kcmVzdWx0Wyd0b2tlbiddOw0KICAgICAgICANCiAgICAgICAgJHB3ZCA9IGNoYW5neWFuX21jaFN0ckNvZGUoJHB3ZCwgJ0VOQ09ERScpOw0KICAgICAgICANCiAgICAgICAgY2hhbmd5YW5fc2V0X3NldHRpbmcoJ3B3ZCcsICRwd2QpOw0KICAgICAgICANCiAgICAgICAgZWNobyA8PDxFT1QNCjxpZnJhbWUgc3JjPSJ7JGxvZ2luX3VybH0iIHNjcm9sbGluZz0ibm8iIHdpZHRoPSIwIiBoZWlnaHQ9IjAiIHN0eWxlPSJib3JkZXI6bm9uZSI+PC9pZnJhbWU+DQpFT1Q7DQogICAgICAgIGlmKCEkaXN2X2luKQ0KICAgICAgICB7DQogICAgICAgICAgICBTaG93TXNnKCLlsJrmnKrorr7nva7nq5nngrlBUFDkv6Hmga/vvIzor7fov5vooYzphY3nva7igKbigKYiLCc/ZG9wb3N0PWNoYW5nZV9hcHBpbmZvJyk7DQogICAgICAgICAgICBleGl0KCk7DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICBoZWFkZXIoJ0xvY2F0aW9uOj8nKTsNCiAgICAgICAgICAgIGV4aXQoKTsNCiAgICAgICAgfQ0KICAgIH0gZWxzZSB7DQogICAgICAgIFNob3dNc2coIuaXoOazleeZu+W9le+8jOacquefpemUmeivr++8gSIsLTEpOw0KICAgICAgICBleGl0KCk7DQogICAgfQ0KfSBlbHNlaWYgKCRkb3Bvc3Q9PSdjaGFuZ2Vpc3YnKSB7DQogICAgJGlzdl9pZCA9IGludHZhbCgkaXN2X2lkKTsNCiAgICAkY2hhbmdnZV9pc3ZfdXJsID0gQ0hBTkdZQU5fQVBJX0NIQU5HRV9JU1YuJGlzdl9pZDsNCiAgICAkaXN2X2FwcF9rZXkgPSBjaGFuZ3lhbl9nZXRfaXN2X2FwcF9rZXkoKTsNCiAgICBlY2hvIDw8PEVPVA0KPGlmcmFtZSBzcmM9InskY2hhbmdnZV9pc3ZfdXJsfSIgc2Nyb2xsaW5nPSJubyIgd2lkdGg9IjAiIGhlaWdodD0iMCIgc3R5bGU9ImJvcmRlcjpub25lIj48L2lmcmFtZT4NCkVPVDsNCiAgICBTaG93TXNnKCLmiJDlip/liIfmjaLnq5nngrnvvIEiLCc/Jyk7DQogICAgZXhpdCgpOw0KfSBlbHNlaWYgKCRkb3Bvc3Q9PSdpc25ldycpIHsNCiAgICAkcnM9Y2hhbmd5YW5faHR0cF9zZW5kKENIQU5HWUFOX0FQSV9JU05FVy4nLz9hcHBJZD0nLiRjbGllbnRfaWQuJyZkYXRlPScudXJsZW5jb2RlKCBkYXRlKCdZLW0tZCBoOmk6cycpKSk7DQogICAgJHJlc3VsdD1qc29uX2RlY29kZSgkcnMsVFJVRSk7DQogICAgaWYoY291bnQoJHJlc3VsdFsndG9waWNzJ10pPjApIGV4aXQoJ3RydWUnKTsNCiAgICBlbHNlIGV4aXQoJ2ZhbHNlJyk7DQp9IGVsc2VpZiAoJGRvcG9zdD09J2xhdGVzdHMnKSB7DQogICAgJGxhdGVzdHMgPSBjaGFuZ3lhbl9sYXRlc3RzKCRjbGllbnRfaWQpOw0KICAgICRkYXRhID0gYXJyYXkoKTsNCiAgICBpZihjb3VudCgkbGF0ZXN0c1snY29tbWVudHMnXSkgPiAwKQ0KICAgIHsNCiAgICAgICAgZm9yZWFjaCgkbGF0ZXN0c1snY29tbWVudHMnXSBhcyAkayA9PiAkdikNCiAgICAgICAgew0KICAgICAgICAgICAgJGRhdGFbXSA9IGFycmF5KA0KICAgICAgICAgICAgICAgICduaWNrbmFtZSc9PiR2WydwYXNzcG9ydCddWyduaWNrbmFtZSddLA0KICAgICAgICAgICAgICAgICdjb250ZW50Jz0+JHZbJ2NvbnRlbnQnXSwNCiAgICAgICAgICAgICAgICAndG9waWNfdGl0bGUnPT4kdlsndG9waWNfdGl0bGUnXSwNCiAgICAgICAgICAgICAgICAndG9waWNfdXJsJz0+JHZbJ3RvcGljX3VybCddLA0KICAgICAgICAgICAgKTsNCiAgICAgICAgfQ0KICAgIH0NCiAgICBlY2hvIGpzb25fZW5jb2RlKCRsYXRlc3RzKTsNCiAgICBleGl0Ow0KfSBlbHNlaWYgKCRkb3Bvc3Q9PSdnZXRjb2RlJykgew0KICAgIGlmKCFjaGFuZ3lhbl9pc2xvZ2luKCkpDQogICAgew0KICAgICAgICBTaG93TXNnKCLmgqjlsJrmnKrnmbvlvZXnlYXoqIDvvIzor7flhYjnmbvlvZXlkI7nu6fnu63kvb/nlKjigKbigKbvvIEiLCc/Jyk7DQogICAgICAgIGV4aXQoKTsNCiAgICB9DQogICAgY2hhbmd5YW5fY2hlY2tfaXNsb2dpbigpOw0KICAgICR1c2VyPWNoYW5neWFuX2dldF9zZXR0aW5nKCd1c2VyJyk7DQogICAgJHNpZ249Y2hhbmd5YW5fZ2VuX3NpZ24oJHVzZXIpOw0KICAgICRyZXN1bHQgPSBjaGFuZ3lhbl9nZXRjb2RlKENIQU5HWUFOX0NMSUVOVF9JRCwgJHVzZXIsIGZhbHNlLCAkc2lnbik7DQogICAgJGNvZGUgPSBodG1sc3BlY2lhbGNoYXJzKCRyZXN1bHRbJ2NvZGUnXSk7DQogICAgJG1zZyA9IDw8PEVPVA0KPHN0eWxlIHR5cGU9J3RleHQvY3NzJz4NCnByZSB7DQp3aWR0aDo1MCU7DQpkaXNwbGF5OiBibG9jazsNCnBhZGRpbmc6IDkuNXB4Ow0KbWFyZ2luOiAwIDAgMTBweDsNCmZvbnQtc2l6ZTogMTNweDsNCmxpbmUtaGVpZ2h0OiAyMHB4Ow0Kd29yZC1icmVhazogYnJlYWstYWxsOw0Kd29yZC13cmFwOiBicmVhay13b3JkOw0Kd2hpdGUtc3BhY2U6IHByZTsNCndoaXRlLXNwYWNlOiBwcmUtd3JhcDsNCmJhY2tncm91bmQtY29sb3I6ICNmNWY1ZjU7DQpib3JkZXI6IDFweCBzb2xpZCAjY2NjOw0KYm9yZGVyOiAxcHggc29saWQgcmdiYSgwLDAsMCwwLjE1KTsNCi13ZWJraXQtYm9yZGVyLXJhZGl1czogNHB4Ow0KLW1vei1ib3JkZXItcmFkaXVzOiA0cHg7DQpib3JkZXItcmFkaXVzOiA0cHg7DQp9DQo8L3N0eWxlPg0KPHA+RGVkZUNNU+agh+etvuS7o+egge+8iOWwhuS7o+eggeaPkuWFpeWIsOaooeadv+mhtemdouWvueW6lOS9jee9ruWNs+WPr++8ie+8mjwvcD4NCjxwcmUgaWQ9ImlmcmFtZSIgc3R5bGU9ImhlaWdodDo1MHB4OyI+ICAgDQp7ZGVkZTpjaGFuZ3lhbi99ICAgICANCjwvcHJlPg0KPHA+SmF2YXNjcmlwdOS7o+egge+8iOWwhuS7o+eggeaPkuWFpeWIsOaooeadv+mhtemdouWvueW6lOS9jee9ruWNs+WPr++8ie+8mjwvcD4NCjxwcmUgaWQ9ImlmcmFtZSIgc3R5bGU9ImhlaWdodDoxNTBweDsiPiAgIA0KeyRjb2RlfSAgICAgICAgIA0KPC9wcmU+DQpFT1Q7DQoNCiAgICAkd2ludGl0bGUgPSAn55WF6KiA6K+E6K66566h55CGJzsNCiAgICAkd2Vjb21lX2luZm8gPSAnPGEgaHJlZj0iPyI+55WF6KiA6K+E6K665qih5Z2XPC9hPiDjgIvojrflj5bku6PnoIEnOw0KICAgICR3aW4gPSBuZXcgT3hXaW5kb3coKTsNCiAgICAkd2luLT5BZGRUaXRsZSgkd2ludGl0bGUpOw0KICAgICR3aW4tPkFkZE1zZ0l0ZW0oJG1zZyk7DQogICAgJHdpbmZvcm0gPSAkd2luLT5HZXRXaW5kb3coJ2hhbmQnLCAnJm5ic3A7JywgZmFsc2UpOw0KICAgICR3aW4tPkRpc3BsYXkoKTsNCiAgICANCn0gZWxzZWlmICgkZG9wb3N0PT0nYWRkc2l0ZScpIHsNCiAgICBpZigkYWN0aW9uPT0nZG8nKQ0KICAgIHsNCiAgICAgICAgJGlzdl9uYW1lID0gZW1wdHkoJGlzdl9uYW1lKT8gJycgOiAkaXN2X25hbWU7DQogICAgICAgICR1cmwgPSBlbXB0eSgkdXJsKT8gJycgOiAkdXJsOw0KICAgICAgICBpZighcHJlZ19tYXRjaCgiI15odHRwOlwvXC9bQS1aYS16MC05XStcLltBLVphLXowLTldK1tcLz1cPyVcLSZffmBAW1xdXCc6KyFdKihbXjw+XCJdKSokIyIsJHVybCkpDQogICAgICAgIHsNCiAgICAgICAgICAgIFNob3dNc2coIuivt+Whq+WGmeato+ehrueahOe9keWdgOagvOW8jyIsLTEpOw0KICAgICAgICAgICAgZXhpdCgpOw0KICAgICAgICB9DQogICAgICAgIGlmKGVtcHR5KCRpc3ZfbmFtZSkgT1IgZW1wdHkoJHVybCkpDQogICAgICAgIHsNCiAgICAgICAgICAgIFNob3dNc2coIuaCqOmcgOimgeWhq+WGmeato+ehrueahOermeeCueS/oeaBr++8jOivt+mHjeaWsOWhq+WGmSIsLTEpOw0KICAgICAgICAgICAgZXhpdCgpOw0KICAgICAgICB9DQogICAgICAgICR1c2VyPWNoYW5neWFuX2dldF9zZXR0aW5nKCd1c2VyJyk7DQogICAgICAgICRzaWduPWNoYW5neWFuX2dlbl9zaWduKCR1c2VyKTsNCiAgICAgICAgJHBhcmFtc0Fycj1hcnJheSgNCiAgICAgICAgICAgICd1c2VyJz0+JHVzZXIsIA0KICAgICAgICAgICAgJ2NsaWVudF9pZCc9PkNIQU5HWUFOX0NMSUVOVF9JRCwgDQogICAgICAgICAgICAnaXN2X25hbWUnPT5jaGFuZ3lhbl9hdXRvQ2hhcnNldCgkaXN2X25hbWUpLCANCiAgICAgICAgICAgICd1cmwnPT4kdXJsLCANCiAgICAgICAgICAgICdzaWduJz0+JHNpZ24pOw0KICAgICAgICAkcnM9Y2hhbmd5YW5faHR0cF9zZW5kKENIQU5HWUFOX0FQSV9BRERTSVRFLDAsJHBhcmFtc0Fycik7DQogICAgICAgICRyZXN1bHQ9anNvbl9kZWNvZGUoJHJzLFRSVUUpOw0KICAgICAgICBpZigkcmVzdWx0WydzdGF0dXMnXT09MSkNCiAgICAgICAgew0KICAgICAgICAgICAgU2hvd01zZygi5peg5rOV5re75Yqg56uZ54K577yM6K+35qOA5p+l5oKo55qE56uZ54K55L+h5oGv5piv5ZCm5aGr5YaZ5q2j56Gu77yBIiwtMSk7DQogICAgICAgICAgICBleGl0KCk7DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICBjaGFuZ3lhbl9zZXRfc2V0dGluZygnYXBwaWQnLCAkcmVzdWx0WydhcHBpZCddKTsNCiAgICAgICAgICAgIGNoYW5neWFuX3NldF9zZXR0aW5nKCdpZCcsICRyZXN1bHRbJ2lkJ10pOw0KICAgICAgICAgICAgY2hhbmd5YW5fc2V0X3NldHRpbmcoJ2lzdl9pZCcsICRyZXN1bHRbJ2lzdl9pZCddKTsNCiAgICAgICAgICAgIGNoYW5neWFuX3NldF9zZXR0aW5nKCdpc3ZfYXBwX2tleScsICRyZXN1bHRbJ2lzdl9hcHBfa2V5J10pOw0KICAgICAgICAgICAgJF9TRVNTSU9OWydjaGFuZ3lhbiddPSRyZXN1bHRbJ3Rva2VuJ107DQogICAgICAgICAgICBjaGFuZ3lhbl9jbGVhcmNhY2hlKCk7DQogICAgICAgICAgICAkaXN2X2lkID0gaW50dmFsKCRyZXN1bHRbJ2lzdl9pZCddKTsNCiAgICAgICAgICAgICRsb2dpbl91cmw9Q0hBTkdZQU5fQVBJX1NFVENPT0tJRS4nP2NsaWVudF9pZD0nLkNIQU5HWUFOX0NMSUVOVF9JRC4nJnRva2VuPScuJHJlc3VsdFsndG9rZW4nXTsNCiAgICAgICAgICAgIGVjaG8gPDw8RU9UDQo8aWZyYW1lIHNyYz0ieyRsb2dpbl91cmx9IiBzY3JvbGxpbmc9Im5vIiB3aWR0aD0iMCIgaGVpZ2h0PSIwIiBzdHlsZT0iYm9yZGVyOm5vbmUiPjwvaWZyYW1lPg0KRU9UOw0KICAgICAgICAgICAgU2hvd01zZygi5oiQ5Yqf5re75Yqg56uZ54K55L+h5oGv77yM6L+b6KGM56uZ54K55YiH5o2i4oCm4oCmIiwnP2RvcG9zdD1jaGFuZ2Vpc3YmaXN2X2lkPScuJGlzdl9pZCwwLDMwMDApOw0KICAgICAgICAgICAgZXhpdDsNCiAgICAgICAgfQ0KICAgIH0gZWxzZSB7DQogICAgICAgIGVjaG8gPDw8RU9UDQo8aHRtbD4NCjxoZWFkPg0KPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9eyRjZmdfc29mdF9sYW5nfSI+DQo8dGl0bGU+5re75Yqg55WF6KiA56uZ54K577yaPC90aXRsZT4NCjxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9InskY2ZnX3BsdXNfZGlyfS9pbWcvYmFzZS5jc3MiPg0KPC9oZWFkPg0KPGJvZHkgYmFja2dyb3VuZD0neyRjZmdfcGx1c19kaXJ9L2ltZy9hbGxiZy5naWYnIGxlZnRtYXJnaW49IjgiIHRvcG1hcmdpbj0nOCc+DQo8dGFibGUgd2lkdGg9Ijk4JSIgYm9yZGVyPSIwIiBhbGlnbj0iY2VudGVyIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiIGJnY29sb3I9IiNERkY5QUEiPg0KICA8dHI+DQogICAgPHRkIGhlaWdodD0iMjgiIHN0eWxlPSJib3JkZXI6MXB4IHNvbGlkICNEQURBREEiIGJhY2tncm91bmQ9J3skY2ZnX3BsdXNfZGlyfS9pbWcvd2JnLmdpZic+Jm5ic3A7PGI+4peHPGEgaHJlZj0iPyI+55WF6KiA6K+E6K665qih5Z2XPC9hPiDjgIvmt7vliqDnlYXoqIDnq5nngrk8L2I+PC90ZD4NCiAgPC90cj4NCiAgPHRyPg0KICANCiAgPHRkIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjgwIiBzdHlsZT0icGFkZGluZy10b3A6NXB4IiBiZ2NvbG9yPScjZmZmZmZmJz4NCiAgDQogIDxzY3JpcHQgbGFuZ3VhZ2U9J2phdmFzY3JpcHQnPg0KZnVuY3Rpb24gQ2hlY2tTdWJtaXQoKXsNCglyZXR1cm4gdHJ1ZTsgDQp9DQo8L3NjcmlwdD4NCiAgPGZvcm0gbmFtZT0nbXlmb3JtJyBtZXRob2Q9J1BPU1QnIG9uU3VibWl0PSdyZXR1cm4gQ2hlY2tTdWJtaXQoKTsnIGFjdGlvbj0nPyc+DQogIDxpbnB1dCB0eXBlPSdoaWRkZW4nIG5hbWU9J2RvcG9zdCcgdmFsdWU9J2FkZHNpdGUnPg0KICA8aW5wdXQgdHlwZT0naGlkZGVuJyBuYW1lPSdhY3Rpb24nIHZhbHVlPSdkbyc+DQogIDx0YWJsZSB3aWR0aD0nMTAwJScgIGJvcmRlcj0nMCcgY2VsbHBhZGRpbmc9JzMnIGNlbGxzcGFjaW5nPScxJyBiZ2NvbG9yPScjREFEQURBJz4NCiAgICA8dHIgYmdjb2xvcj0nI0RBREFEQSc+DQogICAgICA8dGQgY29sc3Bhbj0nMicgYmFja2dyb3VuZD0neyRjZmdfcGx1c19kaXJ9L2ltZy93YmcuZ2lmJyBoZWlnaHQ9JzI2Jz48Zm9udCBjb2xvcj0nIzY2NjYwMCc+PGI+5re75Yqg55WF6KiA56uZ54K577yaPC9iPjwvZm9udD48L3RkPg0KICAgIDwvdHI+DQogICAgPHRyIGJnY29sb3I9JyNGRkZGRkYnPg0KICAgICAgPHRkIGNvbHNwYW49JzInICBoZWlnaHQ9JzEwMCc+PHRhYmxlIHdpZHRoPSI5OCUiIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjEiIGNlbGxwYWRkaW5nPSIxIj4NCiAgPHRib2R5Pg0KICAgIDx0cj4NCiAgICAgIDx0ZCBoZWlnaHQ9IjMwIiBjb2xzcGFuPSIyIiBzdHlsZT0iY29sb3I6Izk5OSI+PHN0cm9uZz48YSBocmVmPSJodHRwOi8vY2hhbmd5YW4uc29odS5jb20vP2Zyb21kZWRlY21zIiB0YXJnZXQ9Il9ibGFuayIgc3R5bGU9ImNvbG9yOmJsdWUiPueVheiogDwvYT48L3N0cm9uZz7mmK/kuIDkuKrnroDljZXogIzlvLrlpKfnmoTnpL7kvJrljJbor4Torrrlj4rogZrlkIjlubPlj7DjgILnlKjmiLflj6/ku6Xnm7TmjqXnlKjoh6rlt7HnmoTnpL7kvJrljJbnvZHnu5zotKbmiLflnKjnrKzkuInmlrnnvZHnq5nlj5Hooajor4TorrrvvIzlubbkuJTkuIDplK7or4TorrrlkIzmraXoh7PnpL7kuqTnvZHnu5zlsIbnvZHnq5nlhoXlrrnlkozoh6rlt7HnmoTor4TorrrliIbkuqvnu5nlpb3lj4vjgILlop7liqDnrKzkuInmlrnnvZHnq5nnlKjmiLfmtLvot4PluqbvvIzosIPliqjlpb3lj4vlj4LkuI7or4TorrrvvIzluK7liqnnvZHnq5nlrp7njrDnpL7kvJrljJbnvZHnu5zkvJjljJbvvIzmnInmlYjmj5DljYfnvZHnq5nnpL7kvJrljJbmtYHph4/vvIE8L3RkPg0KICAgIDwvdHI+DQogICAgPHRyPg0KICAgICAgPHRkIGhlaWdodD0iMzAiIGNvbHNwYW49IjIiIHN0eWxlPSJjb2xvcjojOTk5Ij48L3RkPg0KICAgIDwvdHI+DQogICAgPHRyPg0KICAgICAgPHRkIHdpZHRoPSIxNiUiIGhlaWdodD0iMzAiPue9keermeWQjeensO+8mjwvdGQ+DQogICAgICA8dGQgd2lkdGg9Ijg0JSIgc3R5bGU9InRleHQtYWxpZ246bGVmdDsiPjxpbnB1dCBuYW1lPSJpc3ZfbmFtZSIgdHlwZT0idGV4dCIgaWQ9Imlzdl9uYW1lIiBzaXplPSIxNiIgc3R5bGU9IndpZHRoOjIwMHB4IiB2YWx1ZT0ieyRjZmdfd2VibmFtZX0iIC8+PHNwYW4gc3R5bGU9ImNvbG9yOiM5OTkiPiZuYnNwOyDkuLrmlrnkvr/mgqjnrqHnkIbnq5nngrnor4TorrrvvIzlu7rorq7mm7TmlLnnq5nngrnlkI3np7A8L3NwYW4+PC90ZD4NCiAgICA8L3RyPg0KICAgIDx0cj4NCiAgICAgIDx0ZCB3aWR0aD0iMTYlIiBoZWlnaHQ9IjMwIj7nvZHnq5nlnLDlnYDvvJo8L3RkPg0KICAgICAgPHRkIHdpZHRoPSI4NCUiIHN0eWxlPSJ0ZXh0LWFsaWduOmxlZnQ7Ij48aW5wdXQgbmFtZT0idXJsIiB0eXBlPSJ0ZXh0IiBpZD0idXJsIiBzaXplPSIxNiIgc3R5bGU9IndpZHRoOjIwMHB4IiB2YWx1ZT0ieyRjZmdfYmFzZWhvc3R9IiAvPjxzcGFuIHN0eWxlPSJjb2xvcjojOTk5Ij4mbmJzcDsg5L6L5aaC77yaaHR0cDovL3d3dy5kZWRlY21zLmNvbTwvc3Bhbj48L3RkPg0KICAgIDwvdHI+DQogIDwvdGJvZHk+DQo8L3RhYmxlPjwvdGQ+DQogICAgPC90cj4NCiAgICA8dHI+DQogICAgICA8dGQgY29sc3Bhbj0nMicgYmdjb2xvcj0nI0Y5RkNFRic+PHRhYmxlIHdpZHRoPScyNzAnIGJvcmRlcj0nMCcgY2VsbHBhZGRpbmc9JzAnIGNlbGxzcGFjaW5nPScwJz4NCiAgICAgICAgICA8dHIgYWxpZ249J2NlbnRlcicgaGVpZ2h0PScyOCc+DQogICAgICAgICAgICA8dGQgd2lkdGg9JzkwJz48aW5wdXQgbmFtZT0naW1hZ2VGaWVsZDEnIHR5cGU9J2ltYWdlJyBjbGFzcz0nbnAnIHNyYz0neyRjZmdfcGx1c19kaXJ9L2ltZy9idXR0b25fb2suZ2lmJyB3aWR0aD0nNjAnIGhlaWdodD0nMjInIGJvcmRlcj0nMCcgLz48L3RkPg0KICAgICAgICAgICAgPHRkIHdpZHRoPSc5MCc+PGEgaHJlZj0nIyc+PGltZyBjbGFzcz0nbnAnIHNyYz0neyRjZmdfcGx1c19kaXJ9L2ltZy9idXR0b25fcmVzZXQuZ2lmJyB3aWR0aD0nNjAnIGhlaWdodD0nMjInIGJvcmRlcj0nMCcgb25DbGljaz0ndGhpcy5mb3JtLnJlc2V0KCk7cmV0dXJuIGZhbHNlOycgLz48L2E+PC90ZD4NCiAgICAgICAgICAgIDx0ZD48YSBocmVmPSc/ZG9wb3N0PWNoYW5nZV9hcHBpbmZvJz48aW1nIHNyYz0neyRjZmdfcGx1c19kaXJ9L2ltZy9idXR0b25fYmFjay5naWYnIHdpZHRoPSc2MCcgaGVpZ2h0PScyMicgYm9yZGVyPScwJy8+PC9hPjwvdGQ+DQogICAgICAgICAgPC90cj4NCiAgICAgICAgPC90YWJsZT48L3RkPg0KICAgIDwvdHI+DQogIDwvdGFibGU+DQogIDwvdGQ+DQogIDwvdHI+DQo8L3RhYmxlPg0KPHAgYWxpZ249ImNlbnRlciI+IDxicj4NCiAgPGJyPg0KPC9wPg0KPC9ib2R5Pg0KPC9odG1sPg0KRU9UOw0KICAgIH0NCn0gZWxzZWlmICgkZG9wb3N0PT0nbWFuYWdlJyBPUiAkZG9wb3N0PT0nc3RhdCcgT1IgJGRvcG9zdD09J3NldHRpbmcnDQpPUiAkZG9wb3N0PT0iaW1wb3J0IikNCnsNCiAgICBpZighY2hhbmd5YW5faXNsb2dpbigpKQ0KICAgIHsNCiAgICAgICAgU2hvd01zZygi5oKo5bCa5pyq55m75b2V55WF6KiA77yM6K+35YWI55m75b2V5ZCO57un57ut5L2/55So4oCm4oCm77yBIiwnPycpOw0KICAgICAgICBleGl0KCk7DQogICAgfQ0KICAgIGNoYW5neWFuX2NoZWNrX2lzbG9naW4oKTsNCiAgICAkYWRkc3R5bGU9J3Njcm9sbGluZz0ibm8iICc7DQogICAgJHR5cGU9J2F1ZGl0JzsNCiAgICAkYXBwaWQ9Y2hhbmd5YW5fZ2V0X3NldHRpbmcoJ2FwcGlkJyk7DQogICAgaWYoJGRvcG9zdD09J21hbmFnZScpICR0eXBlPSdhdWRpdCc7DQogICAgZWxzZWlmKCRkb3Bvc3Q9PSdzdGF0JykgJHR5cGU9J3N0YXQnOw0KICAgICRwdGl0bGUgPSAn55WF6KiA6K+E6K66566h55CGJzsNCg0KICAgICRtYW5hZ2VfdXJsPSJodHRwOi8vY2hhbmd5YW4uc29odS5jb20vYXVkaXQvY29tbWVudHMvVE9BVURJVC8xIjsNCiAgICAkYWRkc3RyPScnOw0KICAgIGlmKCRkb3Bvc3Q9PSdzZXR0aW5nJykgDQogICAgew0KICAgICAgICAkcHRpdGxlID0gIueVheiogOiuvue9riI7DQogICAgICAgICRtYW5hZ2VfdXJsPSJodHRwOi8vY2hhbmd5YW4uc29odS5jb20vc2V0dGluZy9iYXNpYyI7DQogICAgICAgIA0KICAgIH0gZWxzZWlmICgkZG9wb3N0PT0nc3RhdCcpDQogICAgew0KICAgICAgICAkcHRpdGxlID0gIuaVsOaNrue7n+iuoSI7DQogICAgICAgICRtYW5hZ2VfdXJsPSJodHRwOi8vY2hhbmd5YW4uc29odS5jb20vc3RhdC1kYXRhL2NvbW1lbnQiOw0KICAgIH0gZWxzZWlmICgkZG9wb3N0PT0naW1wb3J0JykNCiAgICB7DQogICAgICAgICRwdGl0bGUgPSAi55WF6KiA5bel5YW3IjsNCiAgICAgICAgJGV4cG9ydF9zdHI9JGltcG9ydF9zdHI9Jyc7DQogICAgICAgICRtYW5hZ2VfdXJsPSI/ZG9wb3N0PWJsYW5rIjsNCiAgICAgICAgJGxhc3RfaW1wb3J0PWNoYW5neWFuX2dldF9zZXR0aW5nKCdsYXN0X2ltcG9ydCcpOw0KICAgICAgICAkbGFzdF9leHBvcnQ9Y2hhbmd5YW5fZ2V0X3NldHRpbmcoJ2xhc3RfZXhwb3J0Jyk7DQogICAgICAgIGlmIChlbXB0eSgkbGFzdF9leHBvcnQpKSB7DQogICAgICAgICAgICAkZXhwb3J0X3N0ciA9ICc8Zm9udCBjb2xvcj0icmVkIj7lsJrmnKrlpIfku73vvIzlu7rorq7lpIfku73vvIE8L2ZvbnQ+JzsNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICRleHBvcnRfdGltZSA9IGRhdGUoJ1ktbS1kIEg6aTpzJywgJGxhc3RfZXhwb3J0KTsNCiAgICAgICAgICAgICRleHBvcnRfc3RyID0gJzxmb250IGNvbG9yPSIjNjY2Ij7mnIDlkI7lpIfku73ml6XmnJ/vvJonLiRleHBvcnRfdGltZS4nPC9mb250Pic7DQogICAgICAgIH0NCiAgICAgICAgaWYgKGVtcHR5KCRsYXN0X2ltcG9ydCkpIHsNCiAgICAgICAgICAgICRpbXBvcnRfc3RyID0gJzxmb250IGNvbG9yPSJyZWQiPuWwmuacquWvvOWHukRlZGVDTVPor4TorrrliLDnlYXoqIDvvIE8L2ZvbnQ+JzsNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICRpbXBvcnRfdGltZSA9IGRhdGUoJ1ktbS1kIEg6aTpzJywgJGxhc3RfaW1wb3J0KTsNCiAgICAgICAgICAgICRpbXBvcnRfc3RyID0gJzxmb250IGNvbG9yPSIjNjY2Ij7mnIDlkI7lr7zlh7rml6XmnJ/vvJonLiRpbXBvcnRfdGltZS4nPC9mb250Pic7DQogICAgICAgIH0NCiAgICAgICAgJGFkZHN0cj08PDxFT1QNCiAgICAgICAgPHRyIGJnY29sb3I9JyNGRkZGRkYnPg0KICAgICAgICAgIDx0ZCBjb2xzcGFuPScyJyBoZWlnaHQ9JzMwcHgnIHN0eWxlPSdwYWRkaW5nOjIwcHgnPg0KICAgICAgICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4NCiAgICAgICAgICBmdW5jdGlvbiBpc2dvKHVybCxtc2cpIHsNCiAgICAgICAgICAgICAgaWYoY29uZmlybShtc2cpKSB3aW5kb3cubG9jYXRpb24uaHJlZj11cmw7DQogICAgICAgICAgICAgIGVsc2UgcmV0dXJuIGZhbHNlOw0KICAgICAgICAgIH0NCiAgICAgICAgICA8L3NjcmlwdD4NCiAgICAgICAgICA8aW5wdXQgdHlwZT0iYnV0dG9uIiBzaXplPSIxNCIgb25jbGljaz0icmV0dXJuIGlzZ28oJz9kb3Bvc3Q9Y2hhbmd5YW5fdG9fZGVkZWNtcycsJ+aYr+WQpuWvvOWHuueVheiogOWIsERlZGVDTVPor4TorrrvvJ8nKTsiIHZhbHVlPSLlr7zlh7rnlYXoqIDliLBEZWRlQ01T6K+E6K66Ij4gDQogICAgICAgICAgIDxzcGFuIHN0eWxlPSJjb2xvcjojOTk5Ij7lsIbnlYXoqIDmqKHlnZfkuK3nmoTmlbDmja7lr7zlh7rlpIfku73liLBEZWRlQ01T5pWw5o2u5bqT5LitPC9zcGFuPiAgeyRleHBvcnRfc3RyfQ0KICAgICAgICAgIDxiciAvPjxiciAvPg0KICAgICAgICAgIDxpbnB1dCB0eXBlPSJidXR0b24iIHNpemU9IjE0IiBvbmNsaWNrPSJyZXR1cm4gaXNnbygnP2RvcG9zdD1kZWRlY21zX3RvX2NoYW5neWFuJywn5piv5ZCm5a+85YWlRGVkZUNNU+ivhOiuuuWIsOeVheiogO+8nycpOyIgdmFsdWU9IuWvvOWFpURlZGVDTVPor4TorrrliLDnlYXoqIAiPg0KICAgICAgICAgICA8c3BhbiBzdHlsZT0iY29sb3I6Izk5OSI+5bCGRGVkZUNNU+ivhOiuuuaVsOaNruWvvOWFpeWIsOeVheiogOaooeWdl+S4rTwvc3Bhbj4geyRpbXBvcnRfc3RyfQ0KICAgICAgICAgIDwvdGQ+DQogICAgICAgIDwvdHI+DQpFT1Q7DQogICAgfQ0KICAgICRhZGRzdHlsZT0nc2Nyb2xsaW5nPSJhdXRvIiAnOw0KICAgICRhY2NvdW50X3N0ciA9IHByZWdfbWF0Y2goIiNAZGVkZWNtcyQjIiwkX1NFU1NJT05bJ3VzZXInXSk/ICI8YSBocmVmPSc/ZG9wb3N0PWJpbmQnIHN0eWxlPSdjb2xvcjpibHVlJz5b57uR5a6a6LSm5Y+3XTwvYT4iIDoNCiAgICAiPGEgaHJlZj0nP2RvcG9zdD1sb2dvdXQnIHN0eWxlPSdjb2xvcjpibHVlJz5b5YiH5o2i6LSm5Y+3XTwvYT4iOw0KICAgIGVjaG8gPDw8RU9UDQo8aHRtbD4NCjxoZWFkPg0KPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9eyRjZmdfc29mdF9sYW5nfSI+DQo8dGl0bGU+eyRwdGl0bGV9PC90aXRsZT4NCjxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9ImNzcy9iYXNlLmNzcyI+DQo8L2hlYWQ+DQo8Ym9keSBiYWNrZ3JvdW5kPSdpbWFnZXMvYWxsYmcuZ2lmJyBsZWZ0bWFyZ2luPSI4IiB0b3BtYXJnaW49JzgnPg0KPHRhYmxlIHdpZHRoPSI5OCUiIGJvcmRlcj0iMCIgYWxpZ249ImNlbnRlciIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIiBiZ2NvbG9yPSIjREZGOUFBIiBoZWlnaHQ9IjEwMCUiPg0KICA8dHI+DQogICAgPHRkIGhlaWdodD0iMjgiIHN0eWxlPSJib3JkZXI6MXB4IHNvbGlkICNEQURBREEiIGJhY2tncm91bmQ9J2ltYWdlcy93YmcuZ2lmJz4NCiAgICANCiAgICA8ZGl2IHN0eWxlPSJmbG9hdDpsZWZ0Ij4mbmJzcDs8Yj7il4c8YSBocmVmPSI/Ij7nlYXoqIDor4TorrrmqKHlnZc8L2E+IOOAi3skcHRpdGxlfTwvYj48L2Rpdj4NCiAgICA8ZGl2IHN0eWxlPSJmbG9hdDpyaWdodDttYXJnaW4tcmlnaHQ6MjBweDsiPuaCqOWlve+8mnskX1NFU1NJT05bJ3VzZXInXX0geyRhY2NvdW50X3N0cn08L2Rpdj4NCiAgICA8L3RkPg0KICA8L3RyPg0KICA8dHI+DQogICAgPHRkIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIHZhbGlnbj0idG9wIiBiZ2NvbG9yPScjZmZmZmZmJyBzdHlsZT0icGFkZGluZy10b3A6NXB4Ij48dGFibGUgd2lkdGg9JzEwMCUnICBib3JkZXI9JzAnIGNlbGxwYWRkaW5nPSczJyBjZWxsc3BhY2luZz0nMScgYmdjb2xvcj0nI0RBREFEQScgaGVpZ2h0PSIxMDAlIj4NCiAgICAgICAgPHRyIGJnY29sb3I9JyNEQURBREEnPg0KICAgICAgICAgIDx0ZCBjb2xzcGFuPScyJyBiYWNrZ3JvdW5kPSdpbWFnZXMvd2JnLmdpZicgaGVpZ2h0PScyNic+PGZvbnQgY29sb3I9JyM2NjY2MDAnPjxiPnskcHRpdGxlfTwvYj48L2ZvbnQ+PC90ZD4NCiAgICAgICAgPC90cj4NCiAgICAgICAgeyRhZGRzdHJ9DQogICAgICAgIDx0ciBiZ2NvbG9yPScjRkZGRkZGJz4NCiAgICAgICAgICA8dGQgY29sc3Bhbj0nMicgaGVpZ2h0PScxMDAlJyBzdHlsZT0ncGFkZGluZzoyMHB4Jz48YnIvPjxpZnJhbWUgc3JjPSJ7JG1hbmFnZV91cmx9IiB7JGFkZHN0eWxlfSB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBzdHlsZT0iYm9yZGVyOm5vbmUiPjwvaWZyYW1lPjwvdGQ+DQogICAgICAgIDwvdHI+DQogICAgICAgIDx0cj4NCiAgICAgICAgICA8dGQgYmdjb2xvcj0nI0Y1RjVGNSc+Jm5ic3A7PC90ZD4NCiAgICAgICAgPC90cj4NCiAgICAgIDwvdGFibGU+PC90ZD4NCiAgPC90cj4NCjwvdGFibGU+DQo8cCBhbGlnbj0iY2VudGVyIj4gPGJyPg0KICA8YnI+DQo8L3A+DQo8L2JvZHk+DQo8L2h0bWw+DQoNCkVPVDsNCn0gZWxzZWlmICgkZG9wb3N0PT0nZGVkZWNtc190b19jaGFuZ3lhbicpIHsNCiAgICBpZighY2hhbmd5YW5faXNsb2dpbigpKQ0KICAgIHsNCiAgICAgICAgU2hvd01zZygi5oKo5bCa5pyq55m75b2V55WF6KiA77yM6K+35YWI55m75b2V5ZCO57un57ut5L2/55So4oCm4oCm77yBIiwnPycpOw0KICAgICAgICBleGl0KCk7DQogICAgfQ0KICAgICRpc3ZfYXBwX2tleSA9IGNoYW5neWFuX2dldF9pc3ZfYXBwX2tleSgpOw0KICAgICRzdGFydCA9IGlzc2V0KCRzdGFydCk/IGludHZhbCgkc3RhcnQpIDogMDsNCiAgICAkcGFnZXNpemU9MTsNCiAgICAkc3FsID0gIlNFTEVDVCBjb3VudCgqKSBhcyBkZCBGUk9NIGAjQF9fZmVlZGJhY2tgIGdyb3VwIGJ5IGFpZCBvcmRlciBieSBhaWQgYXNjIGxpbWl0IHskc3RhcnR9LHskcGFnZXNpemV9IjsNCiAgICAkcnIgPSAkZHNxbC0+R2V0T25lKCRzcWwpOw0KICAgIGlmKCRyclsnZGQnXT09MCkNCiAgICB7DQogICAgICAgIGNoYW5neWFuX3NldF9zZXR0aW5nKCdsYXN0X2ltcG9ydCcsIHRpbWUoKSk7DQogICAgICAgIFNob3dNc2coJ+WFqOmDqOWvvOWHuuWujOaIkO+8gScsJ2phdmFzY3JpcHQ6OycpOw0KICAgICAgICBleGl0Ow0KICAgIH0NCiAgICAkc3FsID0gIlNFTEVDVCBhaWQgRlJPTSBgI0BfX2ZlZWRiYWNrYCBncm91cCBieSBhaWQgb3JkZXIgYnkgYWlkIGFzYyBsaW1pdCB7JHN0YXJ0fSx7JHBhZ2VzaXplfSI7DQogICAgJGRzcWwtPlNldFF1ZXJ5KCRzcWwpOw0KICAgICRkc3FsLT5FeGVjdXRlKCdkZCcpOw0KICAgICRyZXN1bHQ9YXJyYXkoKTsNCiAgICB3aGlsZSgkYXJyID0gJGRzcWwtPkdldEFycmF5KCdkZCcpKQ0KICAgIHsNCiAgICAgICAgJGZlZWRBcnI9YXJyYXkoKTsNCiAgICAgICAgJGFyY3RSb3cgPSAkZHNxbC0+R2V0T25lKCJTRUxFQ1QgKiBGUk9NIGAjQF9fYXJjdGlueWAgV0hFUkUgaWQ9eyRhcnJbJ2FpZCddfSIpOw0KICAgICAgICBpZigkYXJjdFJvd1snY2hhbm5lbCddPT0wKSAkYXJjdFJvd1snY2hhbm5lbCddPTE7DQogICAgICAgICRjaWQgPSAkYXJjdFJvd1snY2hhbm5lbCddOw0KICAgICAgICAkY2hSb3cgPSAkZHNxbC0+R2V0T25lKCJTRUxFQ1QgKiBGUk9NIGAjQF9fY2hhbm5lbHR5cGVgIFdIRVJFIGlkPSckY2lkJyAiKTsNCiAgICAgICAgJHJvdz1hcnJheSgpOw0KICAgICAgICBpZiAoJGNoUm93Wydpc3N5c3RlbSddIT0gLTEpIHsNCiAgICAgICAgICAgICRzcWwgPSAiU0VMRUNUIGFyYy4qLHRwLnJlaWQsdHAudHlwZWRpcix0cC50eXBlbmFtZSx0cC5pc2RlZmF1bHQsdHAuZGVmYXVsdG5hbWUsdHAubmFtZXJ1bGUsdHAubmFtZXJ1bGUyLHRwLmlzcGFydCwNCiAgICAgICAgICAgIHRwLm1vcmVzaXRlLHRwLnNpdGV1cmwsdHAuc2l0ZXBhdGgsY2guYWRkdGFibGUNCiAgICAgICAgICAgIEZST00gYCNAX19hcmNoaXZlc2AgYXJjDQogICAgICAgICAgICAgICAgICAgICBMRUZUIEpPSU4gYCNAX19hcmN0eXBlYCB0cCBvbiB0cC5pZD1hcmMudHlwZWlkDQogICAgICAgICAgICAgICAgICAgICAgTEVGVCBKT0lOIGAjQF9fY2hhbm5lbHR5cGVgIGFzIGNoIG9uIGFyYy5jaGFubmVsID0gY2guaWQNCiAgICAgICAgICAgICAgICAgICAgICBXSEVSRSBhcmMuaWQ9J3skYXJyWydhaWQnXX0nICI7DQogICAgICAgICAgICAkcm93ID0gJGRzcWwtPkdldE9uZSgkc3FsKTsNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgIGlmKCRjaFJvd1snYWRkdGFibGUnXSE9JycpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgJHNxbCA9ICJTRUxFQ1QgYXJjLiosdHAudHlwZWRpcix0cC50eXBlbmFtZSx0cC5pc2RlZmF1bHQsdHAuZGVmYXVsdG5hbWUsdHAubmFtZXJ1bGUsdHAubmFtZXJ1bGUyLHRwLmlzcGFydCwNCiAgICAgICAgICAgIHRwLm1vcmVzaXRlLHRwLnNpdGV1cmwsdHAuc2l0ZXBhdGggRlJPTSBgeyRjaFJvd1snYWRkdGFibGUnXX1gIGFyYyAgDQogICAgICAgICAgICBMRUZUIEpPSU4gYCNAX19hcmN0eXBlYCB0cCBPTiBhcmMudHlwZWlkPXRwLmlkDQogICAgICAgICAgICAgICAgV0hFUkUgYGFpZGAgPSAneyRhcnJbJ2FpZCddfSciOw0KICAgICAgICAgICAgICAgICRhZGRUYWJsZVJvdyA9ICRkc3FsLT5HZXRPbmUoJHNxbCk7DQogICAgICAgICAgICAgICAgaWYoaXNfYXJyYXkoJGFkZFRhYmxlUm93KSkNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICRyb3dbJ2lkJ109JGFkZFRhYmxlUm93WydhaWQnXTsNCiAgICAgICAgICAgICAgICAgICAgJHJvd1sndGl0bGUnXT0kYWRkVGFibGVSb3dbJ3RpdGxlJ107DQogICAgICAgICAgICAgICAgICAgICRyb3dbJ3R5cGVpZCddPSRhZGRUYWJsZVJvd1sndHlwZWlkJ107DQogICAgICAgICAgICAgICAgICAgICRyb3dbJ21pZCddPSRhZGRUYWJsZVJvd1snbWlkJ107DQogICAgICAgICAgICAgICAgICAgICRyb3dbJ3NlbmRkYXRlJ109JGFkZFRhYmxlUm93WydzZW5kZGF0ZSddOw0KICAgICAgICAgICAgICAgICAgICAkcm93WydjaGFubmVsJ109JGFkZFRhYmxlUm93WydjaGFubmVsJ107DQogICAgICAgICAgICAgICAgICAgICRyb3dbJ2FyY3JhbmsnXT0kYWRkVGFibGVSb3dbJ2FyY3JhbmsnXTsNCiAgICAgICAgICAgICAgICAgICAgJHJvd1snc2VuZGRhdGUnXT0kYWRkVGFibGVSb3dbJ3NlbmRkYXRlJ107DQogICAgICAgICAgICAgICAgICAgICRyb3dbJ3R5cGVkaXInXT0kYWRkVGFibGVSb3dbJ3R5cGVkaXInXTsNCiAgICAgICAgICAgICAgICAgICAgJHJvd1snaXNkZWZhdWx0J109JGFkZFRhYmxlUm93Wydpc2RlZmF1bHQnXTsNCiAgICAgICAgICAgICAgICAgICAgJHJvd1snZGVmYXVsdG5hbWUnXT0kYWRkVGFibGVSb3dbJ2RlZmF1bHRuYW1lJ107DQogICAgICAgICAgICAgICAgICAgICRyb3dbJ2lzcGFydCddPSRhZGRUYWJsZVJvd1snaXNwYXJ0J107DQogICAgICAgICAgICAgICAgICAgICRyb3dbJ25hbWVydWxlMiddPSRhZGRUYWJsZVJvd1snbmFtZXJ1bGUyJ107DQogICAgICAgICAgICAgICAgICAgICRyb3dbJ21vcmVzaXRlJ109JGFkZFRhYmxlUm93Wydtb3Jlc2l0ZSddOw0KICAgICAgICAgICAgICAgICAgICAkcm93WydzaXRldXJsJ109JGFkZFRhYmxlUm93WydzaXRldXJsJ107DQogICAgICAgICAgICAgICAgICAgICRyb3dbJ3NpdGVwYXRoJ109JGFkZFRhYmxlUm93WydzaXRlcGF0aCddOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICAkcm93WydmaWxlbmFtZSddID0gJHJvd1snYXJjdXJsJ10gPSBHZXRGaWxlVXJsKCRyb3dbJ2lkJ10sJHJvd1sndHlwZWlkJ10sJHJvd1snc2VuZGRhdGUnXSwkcm93Wyd0aXRsZSddLDEsDQogICAgICAgIDAsJHJvd1snbmFtZXJ1bGUnXSwkcm93Wyd0eXBlZGlyJ10sMCwnJywkcm93Wydtb3Jlc2l0ZSddLCRyb3dbJ3NpdGV1cmwnXSwkcm93WydzaXRlcGF0aCddKTsNCiAgICAgICAgJHJvd1sndGl0bGUnXT1jaGFuZ3lhbl9hdXRvQ2hhcnNldCgkcm93Wyd0aXRsZSddKTsNCiAgICAgICAgDQogICAgICAgICRmZWVkQXJyWyd0aXRsZSddPSRyb3dbJ3RpdGxlJ107DQogICAgICAgICRmZWVkQXJyWyd1cmwnXT0kY2ZnX2Jhc2Vob3N0LiRyb3dbJ2FyY3VybCddOw0KICAgICAgICAkZmVlZEFyclsndHRpbWUnXT0gZGF0ZSgnWS1tLWQgaDptOnMnLCAgJHJvd1snc2VuZGRhdGUnXSk7DQogICAgICAgICRmZWVkQXJyWydzb3VyY2VpZCddPSRhcnJbJ2FpZCddOw0KICAgICAgICAkZmVlZEFyclsncGFyZW50aWQnXT0wOw0KICAgICAgICAkZmVlZEFyclsnY2F0ZWdvcnlpZCddPSRyb3dbJ3R5cGVpZCddOw0KICAgICAgICAkZmVlZEFyclsnb3duZXJpZCddPSRyb3dbJ21pZCddOw0KICAgICAgICAkZmVlZEFyclsnbWV0YWRhdGEnXT0nJzsNCg0KICAgICAgICAkZHNxbC0+U2V0UXVlcnkoIlNFTEVDVCBmZWVkYmFja19pZCBGUk9NIGAjQF9fcGx1c19jaGFuZ3lhbl9pbXBvcnRpZHNgIFdIRVJFIGFpZD17JGFyclsnYWlkJ119Iik7DQogICAgICAgICRkc3FsLT5FeGVjdXRlKCdkZCcpOw0KICAgICAgICAkZmVlZGJhY2tfaWRzPWFycmF5KCk7DQogICAgICAgIHdoaWxlKCRmYXJyID0gJGRzcWwtPkdldEFycmF5KCdkZCcpKQ0KICAgICAgICB7DQogICAgICAgICAgICAkZmVlZGJhY2tfaWRzW10gPSAkZmFyclsnZmVlZGJhY2tfaWQnXTsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgJHNxdWVyeT0iU0VMRUNUICogRlJPTSBgI0BfX2ZlZWRiYWNrYCBXSEVSRSBhaWQ9eyRhcnJbJ2FpZCddfSBvcmRlciBieSBkdGltZSBhc2M7IjsNCiAgICAgICAgJGRzcWwtPlNldFF1ZXJ5KCRzcXVlcnkpOw0KICAgICAgICAkZHNxbC0+RXhlY3V0ZSgneHgnKTsNCiAgICAgICAgd2hpbGUoJGZSb3cgPSAkZHNxbC0+R2V0QXJyYXkoJ3h4JykpDQogICAgICAgIHsNCiAgICAgICAgICAgIGlmIChpbl9hcnJheSgkZlJvd1snaWQnXSwgJGZlZWRiYWNrX2lkcykpIGNvbnRpbnVlOw0KICAgICAgICAgICAgJGZlZWRBcnJbJ2NvbW1lbnRzJ11bXT1hcnJheSgNCiAgICAgICAgICAgICAgICAnY210aWQnPT4kZlJvd1snaWQnXSwNCiAgICAgICAgICAgICAgICAnY3RpbWUnPT5kYXRlKCdZLW0tZCBoOm06cycsICAkZlJvd1snZHRpbWUnXSksDQogICAgICAgICAgICAgICAgJ2NvbnRlbnQnPT5jaGFuZ3lhbl9RdW90ZV9yZXBsYWNlKGNoYW5neWFuX2F1dG9DaGFyc2V0KCRmUm93Wydtc2cnXSkpLA0KICAgICAgICAgICAgICAgICdyZXBseWlkJz0+MCwNCiAgICAgICAgICAgICAgICAnc3Bjb3VudCc9PiRmUm93Wydnb29kJ10sDQogICAgICAgICAgICAgICAgJ29wY291bnQnPT4kZlJvd1snYmFkJ10sDQogICAgICAgICAgICAgICAgJ3VzZXInPT5hcnJheSgNCiAgICAgICAgICAgICAgICAgICAgJ3VzZXJpZCc9PiRmUm93WydtaWQnXSwNCiAgICAgICAgICAgICAgICAgICAgJ25pY2tuYW1lJz0+Y2hhbmd5YW5fYXV0b0NoYXJzZXQoJGZSb3dbJ3VzZXJuYW1lJ10pLA0KICAgICAgICAgICAgICAgICAgICAndXNlcmljb24nPT4nJywNCiAgICAgICAgICAgICAgICAgICAgJ3VzZXJ1cmwnPT4nJywNCiAgICAgICAgICAgICAgICApDQogICAgICAgICAgICApOw0KICAgICAgICAgICAgJGlucXVlcnkgPSAiSU5TRVJUIElOVE8gYCNAX19wbHVzX2NoYW5neWFuX2ltcG9ydGlkc2AoYGFpZGAsYGZlZWRiYWNrX2lkYCkgVkFMVUVTICgneyRhcnJbJ2FpZCddfScsJ3skZlJvd1snaWQnXX0nKSI7DQogICAgICAgICAgICAkcnMgPSAkZHNxbC0+RXhlY3V0ZU5vbmVRdWVyeSgkaW5xdWVyeSk7DQogICAgICAgIH0NCiAgICAgICAgaWYgKGNvdW50KCRmZWVkQXJyWydjb21tZW50cyddKTwxKSB7DQogICAgICAgICAgICBjb250aW51ZTsNCiAgICAgICAgfQ0KDQogICAgICAgICRjb250ZW50PWpzb25fZW5jb2RlKCRmZWVkQXJyKTsNCiAgICAgICAgJG1kNSA9IGNoYW5neWFuX2htYWNzaGExKCRjb250ZW50LCAkaXN2X2FwcF9rZXkpOw0KDQogICAgICAgICRwYXJhbXNBcnI9YXJyYXkoDQogICAgICAgICAgICAnYXBwaWQnPT4kY2xpZW50X2lkLCANCiAgICAgICAgICAgICdtZDUnPT4kbWQ1LCANCiAgICAgICAgICAgICdqc29uZGF0YSc9PiRjb250ZW50KTsNCiAgICAgICAgJHJzPWNoYW5neWFuX2h0dHBfc2VuZChDSEFOR1lBTl9BUElfSU1QT1JULDAsJHBhcmFtc0Fycik7DQogICAgfQ0KICAgIA0KICAgICRzdGFydCA9JHN0YXJ0KyRwYWdlc2l6ZTsNCiAgICAkZW5kID0kc3RhcnQrJHBhZ2VzaXplOw0KICAgIFNob3dNc2coIuaIkOWKn+WvvOWHuuivhOiuuuaVsOaNru+8jOaOpeS4i+adpeWvvOWFpVt7JHN0YXJ0fS17JGVuZH1d55qE6K+E6K665pWw5o2uIiwiP2RvcG9zdD1kZWRlY21zX3RvX2NoYW5neWFuJnN0YXJ0PXskc3RhcnR9Iik7DQogICAgLy9lY2hvIGpzb25fZW5jb2RlKCRyZXN1bHQpOw0KICAgIGV4aXQoKTsNCn0gZWxzZWlmICgkZG9wb3N0PT0nY2hhbmd5YW5fdG9fZGVkZWNtcycpIHsNCiAgICBpZighY2hhbmd5YW5faXNsb2dpbigpKQ0KICAgIHsNCiAgICAgICAgU2hvd01zZygi5oKo5bCa5pyq55m75b2V55WF6KiA77yM6K+35YWI55m75b2V5ZCO57un57ut5L2/55So4oCm4oCm77yBIiwnPycpOw0KICAgICAgICBleGl0KCk7DQogICAgfQ0KICAgICRsYXN0X2V4cG9ydD1jaGFuZ3lhbl9nZXRfc2V0dGluZygnbGFzdF9leHBvcnQnKTsNCiAgICBpZiAoZW1wdHkoJGxhc3RfZXhwb3J0KSkgew0KICAgICAgICAkc3RhcnRfZGF0ZT0nMjAxNC0wMS0wMSAwMDowMDowMCc7DQogICAgfSBlbHNlIHsNCiAgICAgICAgJHN0YXJ0X2RhdGU9IGRhdGUoJ1ktbS1kIEg6aTpzJywkbGFzdF9leHBvcnQpOw0KICAgIH0NCiAgICAvLyRzdGFydF9kYXRlPScyMDE0LTAxLTAxIDAwOjAwOjAwJzsNCiAgICAkcmVjZW50ID0gY2hhbmd5YW5fZ2V0X3JlY2VudCgkY2xpZW50X2lkLCAkc3RhcnRfZGF0ZSk7DQogICAgLy92YXJfZHVtcCgkcmVjZW50KTtleGl0Ow0KICAgIGlmIChjb3VudCgkcmVjZW50Wyd0b3BpY3MnXSk8PTApIHsNCiAgICAgICAgU2hvd01zZygi5rKh5pyJ5Y+R546w5paw55qE6K+E6K665YaF5a656ZyA6KaB5a+85Ye677yBIiwtMSk7DQogICAgICAgIGV4aXQoKTsNCiAgICB9DQogICAgJGV4cG9ydHM9YXJyYXkoKTsNCiAgICBmb3JlYWNoICgkcmVjZW50Wyd0b3BpY3MnXSBhcyAkdG9waWMpIHsNCiAgICAgICAgJGV4cG9ydHNbXT1hcnJheSgNCiAgICAgICAgICAgICd0b3BpY19pZCc9PiR0b3BpY1sndG9waWNfaWQnXSwNCiAgICAgICAgICAgICdhaWQnPT4kdG9waWNbJ3RvcGljX3NvdXJjZV9pZCddLA0KICAgICAgICAgICAgJ3RpdGxlJz0+JHRvcGljWyd0b3BpY190aXRsZSddLA0KICAgICAgICApOw0KICAgIH0NCiAgICBmb3JlYWNoICgkZXhwb3J0cyBhcyAkZXhwb3J0KSB7DQogICAgICAgIGNoYW5neWFuX2luc2VydF9jb21tZW50cyhjaGFuZ3lhbl9nZXRfY29tbWVudHMoJGV4cG9ydFsndG9waWNfaWQnXSksJGV4cG9ydFsnYWlkJ10sJGV4cG9ydFsndGl0bGUnXSk7DQogICAgfQ0KICAgIGNoYW5neWFuX3NldF9zZXR0aW5nKCdsYXN0X2V4cG9ydCcsIHRpbWUoKSk7DQogICAgU2hvd01zZygi5oiQ5Yqf5aSH5Lu955WF6KiA6K+E6K665YiwRGVkZUNNU+ezu+e7n++8gSIsIj9kb3Bvc3Q9aW1wb3J0Iik7DQogICAgZXhpdCgpOw0KfSBlbHNlaWYgKCRkb3Bvc3Q9PSdjaGFuZ2VfYXBwaW5mbycpIHsNCiAgICBpZiAoJGFjdGlvbj09J2RvJykgew0KICAgICAgICBpZiAoZW1wdHkoJGFwcEluZm8pKSB7DQogICAgICAgICAgICBTaG93TXNnKCLor7fpgInmi6nmraPnoa7nmoRBcHBJROS/oeaBr++8gSIsLTEpOw0KICAgICAgICAgICAgZXhpdCgpOw0KICAgICAgICB9DQogICAgICAgIGxpc3QoJGFwcGlkLCRpc3ZfYXBwX2tleSk9ZXhwbG9kZSgnfCcsJGFwcEluZm8pOw0KICAgICAgICBjaGFuZ3lhbl9zZXRfc2V0dGluZygnYXBwaWQnLCRhcHBpZCk7DQogICAgICAgIGNoYW5neWFuX3NldF9zZXR0aW5nKCdpc3ZfYXBwX2tleScsJGlzdl9hcHBfa2V5KTsNCiAgICAgICAgJHVzZXI9Y2hhbmd5YW5fZ2V0X3NldHRpbmcoJ3VzZXInKTsNCiAgICAgICAgJHNpZ249Y2hhbmd5YW5fZ2VuX3NpZ24oJHVzZXIpOw0KICAgICAgICAkcmVzdWx0ID0gY2hhbmd5YW5fZ2V0Y29kZShDSEFOR1lBTl9DTElFTlRfSUQsICR1c2VyLCBmYWxzZSwgJHNpZ24sJGFwcGlkKTsNCiAgICAgICAgJGlzdl9pZCA9ICRyZXN1bHRbJ2lzdl9pZCddOw0KICAgICAgICANCiAgICAgICAgY2hhbmd5YW5fc2V0X3NldHRpbmcoJ2lzdl9pZCcsJGlzdl9pZCk7DQogICAgICAgIGNoYW5neWFuX2NsZWFyY2FjaGUoKTsNCiAgICAgICAgJGlzdl9pZCA9IGludHZhbCgkaXN2X2lkKTsNCiAgICAgICAgJGNoYW5nZ2VfaXN2X3VybCA9IENIQU5HWUFOX0FQSV9DSEFOR0VfSVNWLiRpc3ZfaWQ7DQogICAgICAgIGVjaG8gPDw8RU9UDQo8aWZyYW1lIHNyYz0ieyRjaGFuZ2dlX2lzdl91cmx9IiBzY3JvbGxpbmc9Im5vIiB3aWR0aD0iMCIgaGVpZ2h0PSIwIiBzdHlsZT0iYm9yZGVyOm5vbmUiPjwvaWZyYW1lPg0KRU9UOw0KICAgICAgICBTaG93TXNnKCLmiJDlip/orr7nva7mlrDnmoRBcHBJROWPikFQUEtFWe+8gSIsJz8nLDAsMzAwMCk7DQogICAgICAgIGV4aXQoKTsNCiAgICB9DQogICAgJGlzdnN0cj0iPHA+IOmAieaLqeaCqOmcgOimgeiuvue9rueahEFQUElE77yaPC9wPiI7DQogICAgJG1zZyA9IDw8PEVPVA0KPHRhYmxlIHdpZHRoPSI5OCUiIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjEiIGNlbGxwYWRkaW5nPSIxIj4NCiAgPHRib2R5Pg0KICAgIDx0cj4NCiAgICAgIDx0ZCBjb2xzcGFuPSIyIiBpZD0iaXN2c0NvbnRlbnQiPg0KICAgICAgPC90ZD4NCiAgICA8L3RyPg0KICA8L3Rib2R5Pg0KPC90YWJsZT4NCkVPVDsNCiAgICAkanF1ZXJ5X3NyYyA9ICBDSEFOR1lBTl9KUVVFUllfU1JDOw0KICAgICRpc3ZzX2pzb25wID0gY2hhbmd5YW5fZ2V0X2lzdnNfanNvbnAoKTsNCiAgICBlY2hvIDw8PEVPVA0KPGh0bWw+DQo8aGVhZD4NCjxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXskY2ZnX3NvZnRfbGFuZ30iPg0KPHRpdGxlPueVheiogOivhOiuuueuoeeQhjwvdGl0bGU+DQo8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSJ7JGNmZ19wbHVzX2Rpcn0vaW1nL2Jhc2UuY3NzIj4NCnskanF1ZXJ5X3NyY30NCnskaXN2c19qc29ucH0NCjwvaGVhZD4NCjxib2R5IGJhY2tncm91bmQ9J3skY2ZnX3BsdXNfZGlyfS9pbWcvYWxsYmcuZ2lmJyBsZWZ0bWFyZ2luPSI4IiB0b3BtYXJnaW49JzgnPg0KPHRhYmxlIHdpZHRoPSI5OCUiIGJvcmRlcj0iMCIgYWxpZ249ImNlbnRlciIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIiBiZ2NvbG9yPSIjREZGOUFBIj4NCiAgPHRyPg0KICAgIDx0ZCBoZWlnaHQ9IjI4IiBzdHlsZT0iYm9yZGVyOjFweCBzb2xpZCAjREFEQURBIiBiYWNrZ3JvdW5kPSd7JGNmZ19wbHVzX2Rpcn0vaW1nL3diZy5naWYnPiZuYnNwOzxiPjxhIGhyZWY9Ij8iPuKXh+eVheiogOivhOiuuuaooeWdlyA8L2E+IOOAi+mFjee9rkFQUOS/oeaBrzwvYj48L3RkPg0KICA8L3RyPg0KICA8dHI+DQogIDx0ZCB3aWR0aD0iMTAwJSIgaGVpZ2h0PSI4MCIgc3R5bGU9InBhZGRpbmctdG9wOjVweCIgYmdjb2xvcj0nI2ZmZmZmZic+DQogIDxzY3JpcHQgbGFuZ3VhZ2U9J2phdmFzY3JpcHQnPg0KZnVuY3Rpb24gQ2hlY2tTdWJtaXQoKXsNCglyZXR1cm4gdHJ1ZTsgDQp9DQo8L3NjcmlwdD4NCiAgPGZvcm0gbmFtZT0nbXlmb3JtJyBtZXRob2Q9J1BPU1QnIG9uU3VibWl0PSdyZXR1cm4gQ2hlY2tTdWJtaXQoKTsnIGFjdGlvbj0nPyc+DQogIA0KICA8aW5wdXQgdHlwZT0naGlkZGVuJyBuYW1lPSdkb3Bvc3QnIHZhbHVlPSdjaGFuZ2VfYXBwaW5mbyc+DQogIDxpbnB1dCB0eXBlPSdoaWRkZW4nIG5hbWU9J2FjdGlvbicgdmFsdWU9J2RvJz4NCiAgPHRhYmxlIHdpZHRoPScxMDAlJyAgYm9yZGVyPScwJyBjZWxscGFkZGluZz0nMycgY2VsbHNwYWNpbmc9JzEnIGJnY29sb3I9JyNEQURBREEnPg0KICAgIDx0ciBiZ2NvbG9yPScjREFEQURBJz4NCiAgICAgIDx0ZCBjb2xzcGFuPScyJyBiYWNrZ3JvdW5kPSd7JGNmZ19wbHVzX2Rpcn0vaW1nL3diZy5naWYnIGhlaWdodD0nMjYnPjxmb250IGNvbG9yPScjNjY2NjAwJz48Yj7nlYXoqIDor4TorrrnrqHnkIY8L2I+PC9mb250PjwvdGQ+DQogICAgPC90cj4NCiAgICA8dHIgYmdjb2xvcj0nI0ZGRkZGRic+DQogICAgICA8dGQgY29sc3Bhbj0nMicgIGhlaWdodD0nMTAwJz4NCiAgICAgIHskbXNnfQ0KICAgICAgPC90ZD4NCiAgICA8L3RyPg0KICAgIDx0cj4NCiAgICAgIDx0ZCBjb2xzcGFuPScyJyBiZ2NvbG9yPScjRjlGQ0VGJz48dGFibGUgd2lkdGg9JzI3MCcgYm9yZGVyPScwJyBjZWxscGFkZGluZz0nMCcgY2VsbHNwYWNpbmc9JzAnPg0KICAgICAgICAgIDx0ciBhbGlnbj0nY2VudGVyJyBoZWlnaHQ9JzI4Jz4NCiAgICAgICAgICAgIDx0ZCB3aWR0aD0nOTAnPjxpbnB1dCBuYW1lPSdpbWFnZUZpZWxkMScgdHlwZT0naW1hZ2UnIGNsYXNzPSducCcgc3JjPSd7JGNmZ19wbHVzX2Rpcn0vaW1nL2J1dHRvbl9vay5naWYnIHdpZHRoPSc2MCcgaGVpZ2h0PScyMicgYm9yZGVyPScwJyAvPjwvdGQ+DQogICAgICAgICAgICA8dGQgd2lkdGg9JzkwJz48YSBocmVmPSc/ZG9wb3N0PWFkZHNpdGUnIHN0eWxlPSJjb2xvcjpibHVlIj7liJvlu7pBUFAgSUQ8L2E+PC90ZD4NCiAgICAgICAgICAgIDx0ZD48YSBocmVmPSc/JyBzdHlsZT0iY29sb3I6Ymx1ZSI+6L+U5Zue5LiK5LiA6aG1PC9hPjwvdGQ+DQogICAgICAgICAgPC90cj4NCiAgICAgICAgPC90YWJsZT48L3RkPg0KICAgIDwvdHI+DQogIDwvdGFibGU+DQogIDwvdGQ+DQogIDwvdHI+DQo8L3RhYmxlPg0KPHAgYWxpZ249ImNlbnRlciI+IDxicj4NCiAgPGJyPg0KPC9wPg0KPC9ib2R5Pg0KPC9odG1sPg0KRU9UOw0KfSBlbHNlaWYgKCRkb3Bvc3Q9PSdjaGVja3VwZGF0ZScpDQp7DQogICAgJGdldF9sYXRlc3RfdmVyID0gY2hhbmd5YW5faHR0cF9zZW5kKENIQU5HWUFOX0FQSV9BRVMuJ2luZGV4LnBocD9jPXdlbGNvbWUmbT1nZXRfbGF0ZXN0X3ZlcicpOw0KICAgIGlmKHZlcnNpb25fY29tcGFyZSgkZ2V0X2xhdGVzdF92ZXIsIENIQU5HWUFOX1ZFUiwnPicpKQ0KICAgIHsNCiAgICAgICAgU2hvd01zZygi5qOA5p+l5Yiw5pyJ5pyA5paw54mI5pys77yM6K+35YmN5Y675LiL6L2977yBPGJyIC8+PGEgaHJlZj0naHR0cDovL2Jicy5kZWRlY21zLmNvbS82NTAyMDMuaHRtbCcgdGFyZ2V0PSdfYmxhbmsnIHN0eWxlPSdjb2xvcjpibHVlJz7ngrnlh7vliY3ljrvkuIvovb08L2E+IDxhIGhyZWY9Jz8nID7ov5Tlm548L2E+IiwiamF2YXNjcmlwdDo7Iik7DQogICAgICAgIGV4aXQoKTsNCiAgICB9IGVsc2Ugew0KICAgICAgICBTaG93TXNnKCI8cD7lvZPliY3kuLrmnIDmlrDniYjmnKzvvIzml6DpobvkuIvovb3mm7TmlrDvvIE8L3A+IDxwPjxhIGhyZWY9Jz8nID7ov5Tlm57kuIrkuIDpobU8L2E+PC9wPiIsImphdmFzY3JpcHQ6OyIpOw0KICAgICAgICBleGl0KCk7DQogICAgfQ0KICAgIGV4aXQoKTsNCn0gZWxzZWlmICgkZG9wb3N0PT0nY2xlYXJjYWNoZScpDQp7DQogICAgY2hhbmd5YW5fY2xlYXJjYWNoZSgpOw0KICAgIFNob3dNc2coIuaIkOWKn+a4heepuuagh+etvue8k+WtmO+8gSIsIj8iKTsNCiAgICBleGl0KCk7DQp9IGVsc2VpZiAoJGRvcG9zdD09J2xvZ291dCcpDQp7DQogICAgZWNobyA8PDxFT1QNCjxpZnJhbWUgc3JjPSJodHRwOi8vY2hhbmd5YW4uc29odS5jb20vbG9nb3V0IiBzY3JvbGxpbmc9Im5vIiB3aWR0aD0iMCIgaGVpZ2h0PSIwIj48L2lmcmFtZT4NCkVPVDsNCiAgICAkX1NFU1NJT05bJ2NoYW5neWFuJ10gPSAwOw0KICAgICRfU0VTU0lPTlsndXNlciddID0gJyc7DQogICAgDQogICAgdW5zZXQoJF9TRVNTSU9OWydjaGFuZ3lhbiddKTsNCiAgICB1bnNldCgkX1NFU1NJT05bJ3VzZXInXSk7DQogICAgaWYoJG5vbXNnKQ0KICAgIHsNCiAgICAgICAgaGVhZGVyKCdMb2NhdGlvbjo/Zm9yd2FyZD0nLiRmb3J3YXJkKTsNCiAgICAgICAgZXhpdDsNCiAgICB9IGVsc2Ugew0KICAgICAgICBjaGFuZ3lhbl9zZXRfc2V0dGluZygncHdkJywgJycpOw0KICAgIH0NCiAgICBTaG93TXNnKCLmiJDlip/pgIDlh7rnlYXoqIDvvIEiLCc/Jyk7DQogICAgZXhpdCgpOw0KfSBlbHNlaWYoJGRvcG9zdD09J2ZvcmdldC1wd2QnKQ0Kew0KICAgIGlmKCRhY3Rpb249PSdkbycpDQogICAgew0KICAgICAgICAkdXNlciA9IGVtcHR5KCR1c2VyKT8gJycgOiAkdXNlcjsNCiAgICAgICAgaWYoZW1wdHkoJHVzZXIpIEFORCAhQ2hlY2tFbWFpbCgkdXNlcikpDQogICAgICAgIHsNCiAgICAgICAgICAgIFNob3dNc2coIuivt+Whq+WGmeato+ehruagvOW8j+eahEUtbWFpbO+8gSIsLTEpOw0KICAgICAgICAgICAgZXhpdCgpOw0KICAgICAgICB9DQogICAgICAgICRlcnJvcl9tc2c9Jyc7DQogICAgICAgIGlmKGNoYW5neWFuX2ZvcmdldF9wd2QoJHVzZXIsICRlcnJvcl9tc2cpKQ0KICAgICAgICB7DQogICAgICAgICAgICBTaG93TXNnKCI8cD7miJDlip/lj5HpgIHlr4bnoIHmib7lm57pgq7ku7bvvIzor7fnmbvlvZVbeyR1c2VyfV3mn6XmlLbvvIE8L3A+PHA+PGEgaHJlZj0nPycgPui/lOWbnuS4iuS4gOmhtTwvYT48L3A+IiwnamF2YXNjcmlwdDo7Jyk7DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICBTaG93TXNnKCLlr4bnoIHmib7lm57plJnor6/vvJp7JGVycm9yX21zZ33vvIEiLC0xKTsNCiAgICAgICAgfQ0KICAgICAgICBleGl0Ow0KICAgIH0NCiAgICAkdXNlciA9IGNoYW5neWFuX2dldF9zZXR0aW5nKCd1c2VyJyk7DQogICAgJG1zZyA9IDw8PEVPVA0KPGh0bWw+DQo8aGVhZD4NCjxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXskY2ZnX3NvZnRfbGFuZ30iPg0KPHRpdGxlPueVheiogOivhOiuuueuoeeQhjwvdGl0bGU+DQo8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSJ7JGNmZ19wbHVzX2Rpcn0vaW1nL2Jhc2UuY3NzIj4NCjwvaGVhZD4NCjxib2R5IGJhY2tncm91bmQ9J3skY2ZnX3BsdXNfZGlyfS9pbWcvYWxsYmcuZ2lmJyBsZWZ0bWFyZ2luPSI4IiB0b3BtYXJnaW49JzgnPg0KPHRhYmxlIHdpZHRoPSI5OCUiIGJvcmRlcj0iMCIgYWxpZ249ImNlbnRlciIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIiBiZ2NvbG9yPSIjREZGOUFBIj4NCiAgPHRyPg0KICAgIDx0ZCBoZWlnaHQ9IjI4IiBzdHlsZT0iYm9yZGVyOjFweCBzb2xpZCAjREFEQURBIiBiYWNrZ3JvdW5kPSd7JGNmZ19wbHVzX2Rpcn0vaW1nL3diZy5naWYnPiZuYnNwOzxiPuKXhzxhIGhyZWY9Ij8iPueVheiogOivhOiuuuaooeWdlyA8L2E+IOOAi+aJvuWbnuWvhueggTwvYj48L3RkPg0KICA8L3RyPg0KICA8dHI+DQogIA0KICA8dGQgd2lkdGg9IjEwMCUiIGhlaWdodD0iODAiIHN0eWxlPSJwYWRkaW5nLXRvcDo1cHgiIGJnY29sb3I9JyNmZmZmZmYnPg0KICANCiAgPHNjcmlwdCBsYW5ndWFnZT0namF2YXNjcmlwdCc+DQpmdW5jdGlvbiBDaGVja1N1Ym1pdCgpew0KICAgIHJldHVybiB0cnVlOyANCn0NCjwvc2NyaXB0Pg0KICA8Zm9ybSBuYW1lPSdteWZvcm0nIG1ldGhvZD0nUE9TVCcgb25TdWJtaXQ9J3JldHVybiBDaGVja1N1Ym1pdCgpOycgYWN0aW9uPSc/Jz4NCiAgDQogIDxpbnB1dCB0eXBlPSdoaWRkZW4nIG5hbWU9J2RvcG9zdCcgdmFsdWU9J2ZvcmdldC1wd2QnPg0KICA8aW5wdXQgdHlwZT0naGlkZGVuJyBuYW1lPSdhY3Rpb24nIHZhbHVlPSdkbyc+DQogIDx0YWJsZSB3aWR0aD0nMTAwJScgIGJvcmRlcj0nMCcgY2VsbHBhZGRpbmc9JzMnIGNlbGxzcGFjaW5nPScxJyBiZ2NvbG9yPScjREFEQURBJz4NCiAgICA8dHIgYmdjb2xvcj0nI0RBREFEQSc+DQogICAgICA8dGQgY29sc3Bhbj0nMicgYmFja2dyb3VuZD0neyRjZmdfcGx1c19kaXJ9L2ltZy93YmcuZ2lmJyBoZWlnaHQ9JzI2Jz48Zm9udCBjb2xvcj0nIzY2NjYwMCc+PGI+55WF6KiA6K+E6K66566h55CGPC9iPjwvZm9udD48L3RkPg0KICAgIDwvdHI+DQogICAgPHRyIGJnY29sb3I9JyNGRkZGRkYnPg0KICAgICAgPHRkIGNvbHNwYW49JzInICBoZWlnaHQ9JzEwMCc+PHRhYmxlIHdpZHRoPSI5OCUiIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjEiIGNlbGxwYWRkaW5nPSIxIj4NCiAgICAgICAgICA8dGJvZHk+DQogICAgICAgICAgICA8dHI+DQogICAgICAgICAgICAgIDx0ZCB3aWR0aD0iMTYlIiBoZWlnaHQ9IjMwIj7pgq7nrrHvvJo8L3RkPg0KICAgICAgICAgICAgICA8dGQgd2lkdGg9Ijg0JSIgc3R5bGU9InRleHQtYWxpZ246bGVmdDsiPjxpbnB1dCBuYW1lPSJ1c2VyIiB0eXBlPSJ0ZXh0IiBpZD0idXNlciIgc2l6ZT0iMTYiIHN0eWxlPSJ3aWR0aDoyMDBweCIgdmFsdWU9InskdXNlcn0iIC8+DQogICAgICAgICAgICAgICAg6K+35aGr5YaZ5oKo55qE5rOo5YaM6YKu566xPC90ZD4NCiAgICAgICAgICAgIDwvdHI+DQogICAgICAgICAgPC90Ym9keT4NCiAgICAgICAgPC90YWJsZT48L3RkPg0KICAgIDwvdHI+DQogICAgPHRyPg0KICAgICAgPHRkIGNvbHNwYW49JzInIGJnY29sb3I9JyNGOUZDRUYnPjx0YWJsZSB3aWR0aD0nMTAwJScgYm9yZGVyPScwJyBjZWxscGFkZGluZz0nMCcgY2VsbHNwYWNpbmc9JzAnPg0KICAgICAgICAgIDx0ciBhbGlnbj0nY2VudGVyJyBoZWlnaHQ9JzI4Jz4NCiAgICAgICAgICAgIDx0ZCB3aWR0aD0nMTYlJz48L3RkPg0KICAgICAgICAgICAgPHRkIHdpZHRoPSc4NCUnIHN0eWxlPSJ0ZXh0LWFsaWduOiBsZWZ0OyI+PGlucHV0IG5hbWU9J2ltYWdlRmllbGQxJyB0eXBlPSdpbWFnZScgY2xhc3M9J25wJyBzcmM9J3skY2ZnX3BsdXNfZGlyfS9pbWcvYnV0dG9uX29rLmdpZicgd2lkdGg9JzYwJyBoZWlnaHQ9JzIyJyBib3JkZXI9JzAnIC8+PC90ZD4NCiAgICAgICAgICAgIDx0ZD48L3RkPg0KICAgICAgICAgIDwvdHI+DQogICAgICAgIDwvdGFibGU+PC90ZD4NCiAgICA8L3RyPg0KICA8L3RhYmxlPg0KICA8L3RkPg0KICA8L3RyPg0KPC90YWJsZT4NCjwvYm9keT4NCjwvaHRtbD4NCkVPVDsNCiAgICBlY2hvICRtc2c7DQogICAgZXhpdDsNCn0gZWxzZSB7DQogICAgJHVzZXIgPSBjaGFuZ3lhbl9nZXRfc2V0dGluZygndXNlcicpOw0KICAgIGlmKGVtcHR5KCR1c2VyKSkgJHVzZXI9Jyc7DQogICAgJG1zZyA9IDw8PEVPVA0KPGh0bWw+DQo8aGVhZD4NCjxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXskY2ZnX3NvZnRfbGFuZ30iPg0KPHRpdGxlPueVheiogOivhOiuuueuoeeQhjwvdGl0bGU+DQo8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSJ7JGNmZ19wbHVzX2Rpcn0vaW1nL2Jhc2UuY3NzIj4NCjwvaGVhZD4NCjxib2R5IGJhY2tncm91bmQ9J3skY2ZnX3BsdXNfZGlyfS9pbWcvYWxsYmcuZ2lmJyBsZWZ0bWFyZ2luPSI4IiB0b3BtYXJnaW49JzgnPg0KPHRhYmxlIHdpZHRoPSI5OCUiIGJvcmRlcj0iMCIgYWxpZ249ImNlbnRlciIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIiBiZ2NvbG9yPSIjREZGOUFBIj4NCiAgPHRyPg0KICAgIDx0ZCBoZWlnaHQ9IjI4IiBzdHlsZT0iYm9yZGVyOjFweCBzb2xpZCAjREFEQURBIiBiYWNrZ3JvdW5kPSd7JGNmZ19wbHVzX2Rpcn0vaW1nL3diZy5naWYnPiZuYnNwOzxiPuKXh+eVheiogOivhOiuuuaooeWdlyDjgIs8L2I+PC90ZD4NCiAgPC90cj4NCiAgPHRyPg0KICANCiAgPHRkIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjgwIiBzdHlsZT0icGFkZGluZy10b3A6NXB4IiBiZ2NvbG9yPScjZmZmZmZmJz4NCiAgDQogIDxzY3JpcHQgbGFuZ3VhZ2U9J2phdmFzY3JpcHQnPg0KZnVuY3Rpb24gQ2hlY2tTdWJtaXQoKXsNCiAgICByZXR1cm4gdHJ1ZTsgDQp9DQo8L3NjcmlwdD4NCiAgPGZvcm0gbmFtZT0nbXlmb3JtJyBtZXRob2Q9J1BPU1QnIG9uU3VibWl0PSdyZXR1cm4gQ2hlY2tTdWJtaXQoKTsnIGFjdGlvbj0nPyc+DQogIA0KICA8aW5wdXQgdHlwZT0naGlkZGVuJyBuYW1lPSdkb3Bvc3QnIHZhbHVlPSdsb2dpbic+DQogIDx0YWJsZSB3aWR0aD0nMTAwJScgIGJvcmRlcj0nMCcgY2VsbHBhZGRpbmc9JzMnIGNlbGxzcGFjaW5nPScxJyBiZ2NvbG9yPScjREFEQURBJz4NCiAgICA8dHIgYmdjb2xvcj0nI0RBREFEQSc+DQogICAgICA8dGQgY29sc3Bhbj0nMicgYmFja2dyb3VuZD0neyRjZmdfcGx1c19kaXJ9L2ltZy93YmcuZ2lmJyBoZWlnaHQ9JzI2Jz48Zm9udCBjb2xvcj0nIzY2NjYwMCc+PGI+55WF6KiA6K+E6K66566h55CGPC9iPjwvZm9udD48L3RkPg0KICAgIDwvdHI+DQogICAgPHRyIGJnY29sb3I9JyNGRkZGRkYnPg0KICAgICAgPHRkIGNvbHNwYW49JzInICBoZWlnaHQ9JzEwMCc+PHRhYmxlIHdpZHRoPSI5OCUiIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjEiIGNlbGxwYWRkaW5nPSIxIj4NCiAgICAgICAgICA8dGJvZHk+DQogICAgICAgICAgICA8dHI+DQogICAgICAgICAgICAgIDx0ZCB3aWR0aD0iMTYlIiBoZWlnaHQ9IjMwIj7pgq7nrrHvvJo8L3RkPg0KICAgICAgICAgICAgICA8dGQgd2lkdGg9Ijg0JSIgc3R5bGU9InRleHQtYWxpZ246bGVmdDsiPjxpbnB1dCBuYW1lPSJ1c2VyIiB0eXBlPSJ0ZXh0IiBpZD0idXNlciIgc2l6ZT0iMTYiIHN0eWxlPSJ3aWR0aDoyMDBweCIgdmFsdWU9InskdXNlcn0iIC8+DQogICAgICAgICAgICAgICAgPGEgaHJlZj0iP2RvcG9zdD1yZWciIHN0eWxlPSJjb2xvcjpibHVlIj7lhY3otLnms6jlhow8L2E+IO+8jOiOt+WPluS4k+S4mueahOivhOiuuuacjeWKoTwvdGQ+DQogICAgICAgICAgICA8L3RyPg0KICAgICAgICAgICAgPHRyPg0KICAgICAgICAgICAgICA8dGQgaGVpZ2h0PSIzMCI+5a+G56CB77yaPC90ZD4NCiAgICAgICAgICAgICAgPHRkIHN0eWxlPSJ0ZXh0LWFsaWduOmxlZnQ7Ij48aW5wdXQgbmFtZT0icHdkIiB0eXBlPSJwYXNzd29yZCIgaWQ9InB3ZCIgc2l6ZT0iMTYiIHN0eWxlPSJ3aWR0aDoyMDBweCI+DQogICAgICAgICAgICAgICA8YSBocmVmPSI/ZG9wb3N0PWZvcmdldC1wd2QiIHN0eWxlPSJjb2xvcjpibHVlIj7lv5jorrDlr4bnoIE8L2E+ICZuYnNwOyA8L3RkPg0KICAgICAgICAgICAgPC90cj4NCiAgICAgICAgICAgIDwhLS08dHI+DQogICAgICA8dGQgaGVpZ2h0PSIzMCI+6K6w5L2P5a+G56CB77yaPC90ZD4NCiAgICAgIDx0ZCBzdHlsZT0idGV4dC1hbGlnbjpsZWZ0OyI+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSJybXB3ZCIgaWQ9InJtcHdkIiAvPg0KICAgICAgICA8bGFiZWwgZm9yPSJybXB3ZCI+5LiL5qyh55m75b2V5LiN55So5YaN6L6T5YWl77yI5LiN5o6o6I2Q77yJPC9sYWJlbD48L3RkPg0KICAgIDwvdHI+LS0+DQogICAgICAgICAgPC90Ym9keT4NCiAgICAgICAgPC90YWJsZT48L3RkPg0KICAgIDwvdHI+DQogICAgPHRyPg0KICAgICAgPHRkIGNvbHNwYW49JzInIGJnY29sb3I9JyNGOUZDRUYnPjx0YWJsZSB3aWR0aD0nMTAwJScgYm9yZGVyPScwJyBjZWxscGFkZGluZz0nMCcgY2VsbHNwYWNpbmc9JzAnPg0KICAgICAgICAgIDx0ciBhbGlnbj0nY2VudGVyJyBoZWlnaHQ9JzI4Jz4NCiAgICAgICAgICAgIDx0ZCB3aWR0aD0nMTYlJz48L3RkPg0KICAgICAgICAgICAgPHRkIHdpZHRoPSc4NCUnIHN0eWxlPSJ0ZXh0LWFsaWduOiBsZWZ0OyI+PGlucHV0IG5hbWU9J2ltYWdlRmllbGQxJyB0eXBlPSdpbWFnZScgY2xhc3M9J25wJyBzcmM9J3skY2ZnX3BsdXNfZGlyfS9pbWcvYnV0dG9uX29rLmdpZicgd2lkdGg9JzYwJyBoZWlnaHQ9JzIyJyBib3JkZXI9JzAnIC8+PC90ZD4NCiAgICAgICAgICAgIDx0ZD48L3RkPg0KICAgICAgICAgIDwvdHI+DQogICAgICAgIDwvdGFibGU+PC90ZD4NCiAgICA8L3RyPg0KICA8L3RhYmxlPg0KICA8L3RkPg0KICA8L3RyPg0KPC90YWJsZT4NCjwvYm9keT4NCjwvaHRtbD4NCkVPVDsNCiAgICBpZihjaGFuZ3lhbl9pc2xvZ2luKCkpDQogICAgew0KICAgICAgICAkY2hhbmd5YW5fdmVyID0gQ0hBTkdZQU5fVkVSOw0KICAgICAgICAkbG9naW5fdXJsPUNIQU5HWUFOX0FQSV9TRVRDT09LSUUuJz9jbGllbnRfaWQ9Jy5DSEFOR1lBTl9DTElFTlRfSUQuJyZ0b2tlbj0nLiRfU0VTU0lPTlsnY2hhbmd5YW4nXTsNCiAgICAgICAgJGxvZ2luX3N0ciA9IDw8PEVPVA0KPGlmcmFtZSBzcmM9InskbG9naW5fdXJsfSIgc2Nyb2xsaW5nPSJubyIgd2lkdGg9IjAiIGhlaWdodD0iMCIgc3R5bGU9ImJvcmRlcjpub25lIj48L2lmcmFtZT4NCkVPVDsNCiAgICAgICAgDQogICAgICAgICRpc3ZfYXBwX2tleSA9IGNoYW5neWFuX2dldF9zZXR0aW5nKCdpc3ZfYXBwX2tleScpOw0KICAgICAgICAkaXN2X2lkID0gY2hhbmd5YW5fZ2V0X3NldHRpbmcoJ2lzdl9pZCcpOw0KICAgICAgICAkaXN2X2lkID0gaW50dmFsKCRpc3ZfaWQpOw0KICAgICAgICAkY2hhbmdnZV9pc3ZfdXJsID0gQ0hBTkdZQU5fQVBJX0NIQU5HRV9JU1YuJGlzdl9pZDsNCiAgICAgICAgJGlzdl9hcHBfa2V5ID0gY2hhbmd5YW5fZ2V0X2lzdl9hcHBfa2V5KCk7DQogICAgICAgICRjaGFuZ2VfaXN2X2lkID0gPDw8RU9UDQo8ZGl2IGlkPSJjaGFuZ2VfaXN2Ij48L2Rpdj4NCjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4NCnNldFRpbWVvdXQoZnVuY3Rpb24oKXt2YXIgY2hhbmdlX2lzdl9kaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2hhbmdlX2lzdiIpO2NoYW5nZV9pc3ZfZGl2LmlubmVySFRNTD0nPGlmcmFtZSBzcmM9InskY2hhbmdnZV9pc3ZfdXJsfSIgc2Nyb2xsaW5nPSJubyIgd2lkdGg9IjAiIGhlaWdodD0iMCIgc3R5bGU9ImJvcmRlcjpub25lIj48L2lmcmFtZT4nO30sMTAwKTsNCjwvc2NyaXB0Pg0KRU9UOw0KICAgICAgICBpZighZW1wdHkoJGZvcndhcmQpKQ0KICAgICAgICB7DQogICAgICAgICAgICBlY2hvIDw8PEVPVA0KICAgICAgICAgICAgPGRpdiBzdHlsZT0iZm9udC1zaXplOiAxMnB4O3BhZGRpbmc6IDIwcHg7Ym9yZGVyOiAxcHggc29saWQgI0RERDsiPueVheiogOaooeWdl+iHquWKqOeZu+W9leS4re+8jOivt+iAkOW/g+etieW+heKApuKApjwvZGl2Pg0KeyRsb2dpbl9zdHJ9DQp7JGNoYW5nZV9pc3ZfaWR9DQo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+DQpzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7d2luZG93LmxvY2F0aW9uLmhyZWY9Jz9kb3Bvc3Q9eyRmb3J3YXJkfSc7fSw1MDApOw0KPC9zY3JpcHQ+DQpFT1Q7DQogICAgICAgICAgICBleGl0KCk7DQogICAgICAgIH0NCiAgICAgICAgJGFjY291bnRfc3RyID0gcHJlZ19tYXRjaCgiI0BkZWRlY21zJCMiLCRfU0VTU0lPTlsndXNlciddKT8gIjxhIGhyZWY9Jz9kb3Bvc3Q9YmluZCcgc3R5bGU9J2NvbG9yOmJsdWUnPlvnu5HlrprotKblj7ddPC9hPiA8Zm9udCBjb2xvcj0ncmVkJz7kuLrkuobkv53or4HmgqjnmoTor4TorrrlronlhajvvIzlu7rorq7nu5HlrprotKblj7c8L2ZvbnQ+IiA6DQogICAgICAgICI8YSBocmVmPSc/ZG9wb3N0PWxvZ291dCcgc3R5bGU9J2NvbG9yOmJsdWUnPlvliIfmjaLotKblj7ddPC9hPiI7DQogICAgICAgICRtc2cgPSA8PDxFT1QNCjx0YWJsZSB3aWR0aD0iOTglIiBib3JkZXI9IjAiIGNlbGxzcGFjaW5nPSIxIiBjZWxscGFkZGluZz0iMSI+DQogIDx0Ym9keT4NCiAgICA8dHI+DQogICAgICA8dGQgd2lkdGg9IjE2JSIgaGVpZ2h0PSIzMCI+55m75b2V55So5oi377yaPC90ZD4NCiAgICAgIDx0ZCB3aWR0aD0iODQlIiBzdHlsZT0idGV4dC1hbGlnbjpsZWZ0OyI+eyRfU0VTU0lPTlsndXNlciddfSB7JGFjY291bnRfc3RyfSA8IS0tPGEgaHJlZj0nP2RvcG9zdD1sb2dvdXQnIHN0eWxlPSdjb2xvcjpibHVlJz5b6YCA5Ye6XTwvYT4tLT48L3RkPg0KICAgIDwvdHI+DQogICAgPHRyPg0KICAgICAgPHRkIHdpZHRoPSIxNiUiIGhlaWdodD0iMzAiPueVheiogOaooeWdl+eJiOacrO+8mjwvdGQ+DQogICAgICA8dGQgd2lkdGg9Ijg0JSIgc3R5bGU9InRleHQtYWxpZ246bGVmdDsiPnZ7JGNoYW5neWFuX3Zlcn0gPGEgaHJlZj0nP2RvcG9zdD1jaGVja3VwZGF0ZScgc3R5bGU9J2NvbG9yOmJsdWUnPlvmo4Dmn6Xmm7TmlrBdPC9hPiA8L3RkPg0KICAgIDwvdHI+DQogICAgPHRyPg0KICAgICAgPHRkIHdpZHRoPSIxNiUiIGhlaWdodD0iMzAiPkFwcCBJRO+8mjwvdGQ+DQogICAgICA8dGQgd2lkdGg9Ijg0JSIgc3R5bGU9InRleHQtYWxpZ246bGVmdDsiPjxpbnB1dCBjbGFzcz0iaW5wdXQteGxhcmdlIiB0eXBlPSJ0ZXh0IiB2YWx1ZT0ieyRjbGllbnRfaWR9IiBkaXNhYmxlZD0iZGlzYWJsZWQvIiBzdHlsZT0id2lkdGg6MjYwcHgiPiA8YSBocmVmPSc/ZG9wb3N0PWNoYW5nZV9hcHBpbmZvJyBzdHlsZT0nY29sb3I6Ymx1ZSc+W+S/ruaUuV08L2E+IDxzcGFuIHN0eWxlPSJjb2xvcjojOTk5Ij4mbmJzcDtBUFAgSUTnlKjkuo7liIfmjaLkuI3lkIznmoTnq5nngrk8L3NwYW4+PC90ZD4NCiAgICA8L3RyPg0KICAgIDx0cj4NCiAgICAgIDx0ZCB3aWR0aD0iMTYlIiBoZWlnaHQ9IjMwIj5BUFAgS2V577yaPC90ZD4NCiAgICAgIDx0ZCB3aWR0aD0iODQlIiBzdHlsZT0idGV4dC1hbGlnbjpsZWZ0OyI+PGlucHV0IGNsYXNzPSJpbnB1dC14bGFyZ2UiIHR5cGU9InRleHQiIHZhbHVlPSJ7JGlzdl9hcHBfa2V5fSIgZGlzYWJsZWQ9ImRpc2FibGVkLyIgc3R5bGU9IndpZHRoOjI2MHB4Ij4gIDwvdGQ+DQogICAgPC90cj4NCiAgICA8dHI+DQogICAgICA8dGQgaGVpZ2h0PSIzMCIgY29sc3Bhbj0iMiI+5oKo5bey5oiQ5Yqf55m75b2V55WF6KiA77yB5oKo5Y+v5Lul6L+b6KGM5Lul5LiL5pON5L2c77yaPC90ZD4NCiAgICA8L3RyPg0KICAgIDx0cj4NCiAgICAgIDx0ZCBoZWlnaHQ9IjMwIiBjb2xzcGFuPSIyIj4NCiAgICAgIDxhIGhyZWY9Jz9kb3Bvc3Q9bWFuYWdlJyBzdHlsZT0nY29sb3I6Ymx1ZSc+W+ivhOiuuueuoeeQhl08L2E+IA0KICAgICAgPGEgaHJlZj0nP2RvcG9zdD1zdGF0JyBzdHlsZT0nY29sb3I6Ymx1ZSc+W+aVsOaNrue7n+iuoV08L2E+IA0KICAgICAgPGEgaHJlZj0nP2RvcG9zdD1pbXBvcnQnIHN0eWxlPSdjb2xvcjpibHVlJz5b5a+85YWl5a+85Ye6XTwvYT4gDQogICAgICA8YSBocmVmPSc/ZG9wb3N0PWNsZWFyY2FjaGUnIHN0eWxlPSdjb2xvcjpibHVlJz5b5riF56m657yT5a2YXTwvYT4gDQogICAgICA8YSBocmVmPSc/ZG9wb3N0PXNldHRpbmcnIHN0eWxlPSdjb2xvcjpibHVlJz5b55WF6KiA6K6+572uXTwvYT4gDQogICAgICA8L3RkPg0KICAgIDwvdHI+DQo8dHI+DQogICAgICA8dGQgaGVpZ2h0PSIzMCIgY29sc3Bhbj0iMiI+DQogICA8aHI+DQogICDkvb/nlKjor7TmmI7vvJo8YnI+DQogICDlnKjlr7nlupTmqKHmnb/kuK3kvb/nlKjmoIfnrb7vvJo8Zm9udCBjb2xvcj0icmVkIj57ZGVkZTpjaGFuZ3lhbi99PC9mb250Pu+8jOebtOaOpei/m+ihjOiwg+eUqOWNs+WPr++8jOagt+W8j+iuvuWumuWPr+eCueWHuzxhIGhyZWY9Jz9kb3Bvc3Q9c2V0dGluZycgc3R5bGU9J2NvbG9yOmJsdWUnPlvnlYXoqIDorr7nva5dPC9hPiDov5vooYzorr7nva7jgIINCiAgPGhyPg0KICDlip/og73or7TmmI7vvJo8YnI+DQogIDxiPlvor4TorrrnrqHnkIZdPC9iPuWuoeaguOOAgeWIoOmZpOivhOiuuuS/oeaBr++8jOaVj+aEn+ivjeeuoeeQhu+8jOeUqOaIt+emgeiogOaTjeS9nO+8mzxicj4NCiA8Yj5b5pWw5o2u57uf6K6hXTwvYj7nq5nngrnor4Torrrkv6Hmga/mlbDmja7lhajmlrnkvY3nu5/orqHvvJs8YnI+DQogPGI+W+WvvOWFpeWvvOWHul08L2I+6K+E6K665L+h5oGv5pWw5o2u5a+85YWlL+WvvOWHuu+8jOW7uuiurueUqOaIt+Wumuacn+WvvOWHuuWkh+S7ve+8mzxicj4NCiA8Yj5b5riF56m657yT5a2YXTwvYj7muIXnqbrnlYXoqIDor4TorrrmoIfnrb7nvJPlrZjvvIzlpoLmnpzmm7TmlLnnmbvlvZXotKblj7flu7rorq7muIXnqbrnvJPlrZjlho3nlJ/miJDvvJs8YnI+DQogPGI+W+eVheiogOiuvue9rl08L2I+55WF6KiA6K+E6K6655u45YWz6K6+5a6a77ybPGJyPjxicj4NCjxocj4NCiAgICA8L3RyPg0KICAgIDx0cj4NCiAgICAgIDx0ZCBoZWlnaHQ9IjMwIiBjb2xzcGFuPSIyIiBzdHlsZT0iY29sb3I6Izk5OSI+PHN0cm9uZz7nlYXoqIA8L3N0cm9uZz7mmK/kuIDkuKrnroDljZXlj4vlpb3nmoTnpL7kvJrljJbor4Torrrlj4rogZrlkIjns7vnu5/jgILnlYXoqIDor4Torrrns7vnu5/lj6/ku6Xkv53or4HmgqjnvZHnq5nnmoTor4TorrrlronlhajvvIzorqnmgqjnmoTnvZHnq5nov5znprvlnoPlnL7or4TorrrvvJvnlKjmiLflj6/ku6Xkvb/nlKjoh6rlt7HnmoTnpL7kuqTotKbmiLflnKjmgqjnmoTnvZHnq5nlj5Hooajor4TorrrvvIzlubbkuJTkuIDplK7lkIzmraXoh7PnpL7kuqTnvZHnu5zvvIzkuLrmgqjnmoTnvZHnq5nluKbmnaXmm7TlpJrmtYHph4/jgII8L3RkPg0KICAgIDwvdHI+DQogIDwvdGJvZHk+DQo8L3RhYmxlPg0KeyRsb2dpbl9zdHJ9DQp7JGNoYW5nZV9pc3ZfaWR9DQpFT1Q7DQogICAgICAgICR3aW50aXRsZSA9ICfnlYXoqIDor4TorrrnrqHnkIYnOw0KICAgICAgICAkd2Vjb21lX2luZm8gPSAn55WF6KiA6K+E6K665qih5Z2XIOOAiyc7DQogICAgICAgICR3aW4gPSBuZXcgT3hXaW5kb3coKTsNCiAgICAgICAgJHdpbi0+QWRkVGl0bGUoJHdpbnRpdGxlKTsNCiAgICAgICAgJHdpbi0+QWRkTXNnSXRlbSgkbXNnKTsNCiAgICAgICAgJHdpbmZvcm0gPSAkd2luLT5HZXRXaW5kb3coJ2hhbmQnLCAnJm5ic3A7JywgZmFsc2UpOw0KICAgICAgICAkd2luLT5EaXNwbGF5KCk7DQogICAgICAgIGV4aXQ7DQogICAgfSBlbHNlIHsNCiAgICAgICAgdW5zZXQoJF9TRVNTSU9OWydjaGFuZ3lhbiddKTsNCiAgICAgICAgdW5zZXQoJF9TRVNTSU9OWyd1c2VyJ10pOw0KICAgICAgICBlY2hvICRtc2c7DQogICAgfQ0KfQ0KPz4=
</file>
</modulefiles>
</module>