国内流行的内容管理系统(CMS)多端全媒体解决方案 https://www.dedebiz.com
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

55 lines
110KB

  1. <module>
  2. <baseinfo>
  3. name=畅言评论模块
  4. team=织梦团队
  5. time=2014-02-17
  6. email=tianya@desdev.cn
  7. url=http://www.dedecms.com
  8. hash=606c658db048ea7328ffe1c7ae2a732f
  9. indexname=
  10. indexurl=
  11. ismember=0
  12. autosetup=1
  13. autodel=1
  14. lang=utf-8
  15. moduletype=soft
  16. </baseinfo>
  17. <systemfile>
  18. <menustring>
  19. PG06dG9wIG5hbWU9J+eVheiogOivhOiuuicgZGlzcGxheT0nYmxvY2snPg0KPG06aXRlbSBuYW1lPSfnlYXoqIDmqKHlnZcnIGxpbms9J2NoYW5neWFuX21haW4ucGhwJyByYW5rPSdzeXNfRmVlZGJhY2snIHRhcmdldD0nbWFpbicvPg0KPG06aXRlbSBuYW1lPSfor4TorrrnrqHnkIYnIGxpbms9J2NoYW5neWFuX21haW4ucGhwP2RvcG9zdD1tYW5hZ2UnIHJhbms9J3N5c19GZWVkYmFjaycgdGFyZ2V0PSdtYWluJy8+DQo8bTppdGVtIG5hbWU9J+aVsOaNrue7n+iuoScgbGluaz0nY2hhbmd5YW5fbWFpbi5waHA/ZG9wb3N0PXN0YXQnIHJhbms9J3N5c19GZWVkYmFjaycgdGFyZ2V0PSdtYWluJy8+DQo8bTppdGVtIG5hbWU9J+WvvOWFpeWvvOWHuicgbGluaz0nY2hhbmd5YW5fbWFpbi5waHA/ZG9wb3N0PWltcG9ydCcgcmFuaz0nc3lzX0ZlZWRiYWNrJyB0YXJnZXQ9J21haW4nLz4NCjxtOml0ZW0gbmFtZT0n55WF6KiA6K6+572uJyBsaW5rPSdjaGFuZ3lhbl9tYWluLnBocD9kb3Bvc3Q9c2V0dGluZycgcmFuaz0nc3lzX0ZlZWRiYWNrJyB0YXJnZXQ9J21haW4nLz4NCjwvbTp0b3A+
  20. </menustring>
  21. <readme>
  22. 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+
  23. </readme>
  24. <setupsql40>
  25. RFJPUCBUQUJMRSBJRiBFWElTVFMgYCNAX19wbHVzX2NoYW5neWFuX3NldHRpbmdgOw0KQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgYCNAX19wbHVzX2NoYW5neWFuX3NldHRpbmdgICgNCiAgYHNrZXlgIHZhcmNoYXIoMjU1KSBOT1QgTlVMTCBERUZBVUxUICcnLA0KICBgc3ZhbHVlYCB0ZXh0IE5PVCBOVUxMLA0KICBgc3RpbWVgIGludCgxMCkgTk9UIE5VTEwsDQogIFBSSU1BUlkgS0VZIChgc2tleWApDQopIFRZUEU9TXlJU0FNOw0KSU5TRVJUIElOVE8gYCNAX19wbHVzX2NoYW5neWFuX3NldHRpbmdgIChgc2tleWAsIGBzdmFsdWVgLCBgc3RpbWVgKSBWQUxVRVMNCignYXBwaWQnLCAnMCcsIDApLA0KKCdpZCcsICcwJywgMCksDQooJ2lzdl9pZCcsICcwJywgMCksDQooJ3VzZXInLCAnMCcsIDApLA0KKCdwd2QnLCAnMCcsIDApOw==
  26. </setupsql40>
  27. <delsql>
  28. RFJPUCBUQUJMRSBJRiBFWElTVFMgYCNAX19wbHVzX2NoYW5neWFuX3NldHRpbmdgOw0KRFJPUCBUQUJMRSBJRiBFWElTVFMgYCNAX19wbHVzX2NoYW5neWFuX2ltcG9ydGlkc2A7DQpEUk9QIFRBQkxFIElGIEVYSVNUUyBgI0BfX3BsdXNfY2hhbmd5YW5faW5zZXJ0aWRzYDs=
  29. </delsql>
  30. <setup>
  31. </setup>
  32. <uninstall>
  33. </uninstall>
  34. <oldfilelist>
  35. ../include/helpers/changyan.helper.php
  36. ../include/taglib/changyan.lib.php
  37. changyan_main.php
  38. </oldfilelist>
  39. </systemfile>
  40. <modulefiles>
  41. <file type='file' name='../include/helpers/changyan.helper.php'>
  42. PD9waHAgaWYoIWRlZmluZWQoJ0RFREVJTkMnKSkgZXhpdCgnZGVkZWNtcycpOw0KDQpkZWZpbmUoJ0NIQU5HWUFOX0FQSV9BRVMnLCAnaHR0cDovL2NoYW5neWFuLmFwaS5kZWRlY21zLmNvbS8nKTsNCmRlZmluZSgnQ0hBTkdZQU5fQVBJX1JFRycsICdodHRwOi8vY2hhbmd5YW4ua3VhaXpoYW4uY29tL2FkbWluL2FwaS9vcGVuL3JlZycpOw0KZGVmaW5lKCdDSEFOR1lBTl9BUElfQVVUT1JFRycsICdodHRwOi8vY2hhbmd5YW4ua3VhaXpoYW4uY29tL2FkbWluL2FwaS9vcGVuL2F1dG8tcmVnJyk7DQpkZWZpbmUoJ0NIQU5HWUFOX0FQSV9MT0dJTicsICdodHRwOi8vY2hhbmd5YW4ua3VhaXpoYW4uY29tL2FkbWluL2FwaS9vcGVuL3ZhbGlkYXRlJyk7DQpkZWZpbmUoJ0NIQU5HWUFOX0FQSV9TRVRDT09LSUUnLCAnaHR0cDovL2NoYW5neWFuLmt1YWl6aGFuLmNvbS9hZG1pbi9hcGkvb3Blbi9zZXQtY29va2llJyk7DQpkZWZpbmUoJ0NIQU5HWUFOX0FQSV9JU05FVycsICdodHRwOi8vY2hhbmd5YW4ua3VhaXpoYW4uY29tL2FkbWluL2FwaS9yZWNlbnQtY29tbWVudC10b3BpY3MnKTsNCmRlZmluZSgnQ0hBTkdZQU5fQVBJX0xBVEVTVFMnLCAnaHR0cDovL2NoYW5neWFuLmt1YWl6aGFuLmNvbS9hcGkvMi9jb21tZW50L2xhdGVzdHMnKTsNCmRlZmluZSgnQ0hBTkdZQU5fQVBJX1JFQ0VOVCcsICdodHRwOi8vY2hhbmd5YW4ua3VhaXpoYW4uY29tL2FkbWluL2FwaS9yZWNlbnQtY29tbWVudC10b3BpY3MnKTsNCmRlZmluZSgnQ0hBTkdZQU5fQVBJX0NPREUnLCAnaHR0cDovL2NoYW5neWFuLmt1YWl6aGFuLmNvbS9hZG1pbi9hcGkvb3Blbi9nZXQtY29kZScpOw0KZGVmaW5lKCdDSEFOR1lBTl9BUElfQUREU0lURScsICdodHRwOi8vY2hhbmd5YW4ua3VhaXpoYW4uY29tL2FkbWluL2FwaS9vcGVuL2FkZC1pc3YnKTsNCmRlZmluZSgnQ0hBTkdZQU5fQVBJX0NIQU5HRV9JU1YnLCAnaHR0cDovL2NoYW5neWFuLmt1YWl6aGFuLmNvbS9jaGFuZ2UtaXN2LycpOw0KZGVmaW5lKCdDSEFOR1lBTl9BUElfQ0hFQ0tfTE9HSU4nLCAnaHR0cDovL2NoYW5neWFuLmt1YWl6aGFuLmNvbS9jaGVjay1sb2dpbicpOw0KZGVmaW5lKCdDSEFOR1lBTl9BUElfR0VUQVBQS0VZJywgJ2h0dHA6Ly9jaGFuZ3lhbi5rdWFpemhhbi5jb20vIGFkbWluL2FwaS9vcGVuL2dldC1hcHBrZXknKTsNCmRlZmluZSgnQ0hBTkdZQU5fQVBJX0NPTU1FTlRTJywgJ2h0dHA6Ly9jaGFuZ3lhbi5zb2h1LmNvbS9hcGkvMi90b3BpYy9jb21tZW50cycpOw0KZGVmaW5lKCdDSEFOR1lBTl9BUElfVE9QSUNDT01NRU5UUycsICdodHRwOi8vY2hhbmd5YW4uc29odS5jb20vYXBpLzIvdG9waWMvbG9hZCcpOw0KZGVmaW5lKCdDSEFOR1lBTl9BUElfSU1QT1JUJywgJ2h0dHA6Ly9jaGFuZ3lhbi5rdWFpemhhbi5jb20vYWRtaW4vYXBpL2ltcG9ydC9jb21tZW50Jyk7DQpkZWZpbmUoJ0NIQU5HWUFOX0FQSV9HRVRJU1ZTJywgJ2h0dHA6Ly9jaGFuZ3lhbi5rdWFpemhhbi5jb20vYWRtaW4vYXBpL29wZW4vZ2V0LWlzdnMnKTsNCmRlZmluZSgnQ0hBTkdZQU5fQVBJX0dFVElTVlNfSlNPTlAnLCAnaHR0cDovL2NoYW5neWFuLmt1YWl6aGFuLmNvbS9hZG1pbi9hcGkvb3Blbi9nZXQtaXN2cy1qc29ucCcpOw0KZGVmaW5lKCdDSEFOR1lBTl9BUElfQklOREFDQycsICdodHRwOi8vY2hhbmd5YW4ua3VhaXpoYW4uY29tL2FkbWluL2FwaS9vcGVuL21vZC1vcGluZm8nKTsNCmRlZmluZSgnQ0hBTkdZQU5fQVBJX0ZPUkdFVF9QV0QnLCAnaHR0cDovL2NoYW5neWFuLmt1YWl6aGFuLmNvbS9wbGF0Zm9ybS9mb3JnZXQtcHdkJyk7DQoNCmRlZmluZSgnQ0hBTkdZQU5fQ0xJRU5UX0lEJywgJ2NhcVhZSWUzMicpOw0KZGVmaW5lKCdDSEFOR1lBTl9DTElFTlRfS0VZJywgJ2JjYjU4NTYyOGI1OTU4NDg5MWZmNTg5N2JlODg4YzQ1Jyk7DQoNCmRlZmluZSgnQ0hBTkdZQU5fSlFVRVJZX1NSQycsICc8c2NyaXB0PndpbmRvdy5qUXVlcnkgfHwgZG9jdW1lbnQud3JpdGUodW5lc2NhcGUoXCclM0NzY3JpcHQgc3JjPSJodHRwOi8vY2hhbmd5YW4uYXBpLmRlZGVjbXMuY29tL2Fzc2V0cy9qcy9qcXVlcnkubWluLmpzIiUzRSUzQy9zY3JpcHQlM0VcJykpPC9zY3JpcHQ+Jyk7DQoNCmRlZmluZSgnQ0hBTkdZQU5fVkVSJywgJzAuMC4xMScpOw0KDQokR0xPQkFMU1sndXBkYXRlX3NxbHMnXT1hcnJheSgNCiAgICAnMC4wLjInPT5hcnJheSgNCiAgICAgICAgIklOU0VSVCBJTlRPIGAjQF9fcGx1c19jaGFuZ3lhbl9zZXR0aW5nYCAoYHNrZXlgLCBgc3ZhbHVlYCwgYHN0aW1lYCkgVkFMVUVTICgnbGFzdF9leHBvcnQnLCAnMCcsIDApOyIsDQogICAgICAgICJJTlNFUlQgSU5UTyBgI0BfX3BsdXNfY2hhbmd5YW5fc2V0dGluZ2AgKGBza2V5YCwgYHN2YWx1ZWAsIGBzdGltZWApIFZBTFVFUyAoJ2xhc3RfaW1wb3J0JywgJzAnLCAwKTsiLA0KICAgICAgICAiSU5TRVJUIElOVE8gYCNAX19wbHVzX2NoYW5neWFuX3NldHRpbmdgIChgc2tleWAsIGBzdmFsdWVgLCBgc3RpbWVgKSBWQUxVRVMgKCd2ZXJzaW9uJywgJzAuMC4yJywgMCk7IiwNCiAgICAgICAgIklOU0VSVCBJTlRPIGAjQF9fcGx1c19jaGFuZ3lhbl9zZXR0aW5nYCAoYHNrZXlgLCBgc3ZhbHVlYCwgYHN0aW1lYCkgVkFMVUVTICgnaXN2X2FwcF9rZXknLCAnMCcsIDApOyIsDQogICAgICAgICJDUkVBVEUgVEFCTEUgYCNAX19wbHVzX2NoYW5neWFuX2luc2VydGlkc2AgKGBpZGAgSU5UKDEwKSBOT1QgTlVMTCBBVVRPX0lOQ1JFTUVOVCwNCiAgICAgICAgICAgIGBhaWRgIElOVCgxMCkgTlVMTCBERUZBVUxUICcwJywNCiAgICAgICAgICAgIGBjb21tZW50X2lkYCBJTlQoMTIpIE5VTEwgREVGQVVMVCAnMCcsDQogICAgICAgICAgICBQUklNQVJZIEtFWSAoYGlkYCksDQogICAgICAgICAgICBVTklRVUUgSU5ERVggYGNvbW1lbnRfaWRgIChgY29tbWVudF9pZGApDQogICAgICAgICkNCiAgICAgICAgVFlQRT1NeUlTQU07IiwNCiAgICAgICAgIkNSRUFURSBUQUJMRSBgI0BfX3BsdXNfY2hhbmd5YW5faW1wb3J0aWRzYCAoYGlkYCBJTlQoMTApIE5PVCBOVUxMIEFVVE9fSU5DUkVNRU5ULA0KICAgICAgICAgICAgYGFpZGAgSU5UKDEwKSBOVUxMIERFRkFVTFQgJzAnLA0KICAgICAgICAgICAgYGZlZWRiYWNrX2lkYCBJTlQoMTIpIE5VTEwgREVGQVVMVCAnMCcsDQogICAgICAgICAgICBQUklNQVJZIEtFWSAoYGlkYCksDQogICAgICAgICAgICBVTklRVUUgSU5ERVggYGZlZWRiYWNrX2lkYCAoYGZlZWRiYWNrX2lkYCkNCiAgICAgICAgKQ0KICAgICAgICBUWVBFPU15SVNBTTsiLA0KICAgICksDQogICAgJzAuMC4zJz0+YXJyYXkoDQogICAgICAgICJVUERBVEUgYCNAX19wbHVzX2NoYW5neWFuX3NldHRpbmdgIFNFVCBgc3ZhbHVlYD0nMC4wLjMnIFdIRVJFIGBza2V5YD0ndmVyc2lvbic7IiwNCiAgICApLA0KICAgICcwLjAuNCc9PmFycmF5KA0KICAgICAgICAiVVBEQVRFIGAjQF9fcGx1c19jaGFuZ3lhbl9zZXR0aW5nYCBTRVQgYHN2YWx1ZWA9JzAuMC40JyBXSEVSRSBgc2tleWA9J3ZlcnNpb24nOyIsDQogICAgKSwNCiAgICAnMC4wLjUnPT5hcnJheSgNCiAgICAgICAgIlVQREFURSBgI0BfX3BsdXNfY2hhbmd5YW5fc2V0dGluZ2AgU0VUIGBzdmFsdWVgPScwLjAuNScgV0hFUkUgYHNrZXlgPSd2ZXJzaW9uJzsiLA0KICAgICksDQogICAgJzAuMC42Jz0+YXJyYXkoDQogICAgICAgICJVUERBVEUgYCNAX19wbHVzX2NoYW5neWFuX3NldHRpbmdgIFNFVCBgc3ZhbHVlYD0nMC4wLjYnIFdIRVJFIGBza2V5YD0ndmVyc2lvbic7IiwNCiAgICApLA0KICAgICcwLjAuNyc9PmFycmF5KA0KICAgICAgICAiVVBEQVRFIGAjQF9fcGx1c19jaGFuZ3lhbl9zZXR0aW5nYCBTRVQgYHN2YWx1ZWA9JzAuMC43JyBXSEVSRSBgc2tleWA9J3ZlcnNpb24nOyIsDQogICAgKSwNCiAgICAnMC4wLjgnPT5hcnJheSgNCiAgICAgICAgIlVQREFURSBgI0BfX3BsdXNfY2hhbmd5YW5fc2V0dGluZ2AgU0VUIGBzdmFsdWVgPScwLjAuOCcgV0hFUkUgYHNrZXlgPSd2ZXJzaW9uJzsiLA0KICAgICksDQogICAgJzAuMC45Jz0+YXJyYXkoDQogICAgICAgICJVUERBVEUgYCNAX19wbHVzX2NoYW5neWFuX3NldHRpbmdgIFNFVCBgc3ZhbHVlYD0nMC4wLjknIFdIRVJFIGBza2V5YD0ndmVyc2lvbic7IiwNCiAgICApLA0KICAgICcwLjAuMTAnPT5hcnJheSgNCiAgICAgICAgIlVQREFURSBgI0BfX3BsdXNfY2hhbmd5YW5fc2V0dGluZ2AgU0VUIGBzdmFsdWVgPScwLjAuMTAnIFdIRVJFIGBza2V5YD0ndmVyc2lvbic7IiwNCiAgICApLA0KICAgICcwLjAuMTEnPT5hcnJheSgNCiAgICAgICAgIlVQREFURSBgI0BfX3BsdXNfY2hhbmd5YW5fc2V0dGluZ2AgU0VUIGBzdmFsdWVgPScwLjAuMTEnIFdIRVJFIGBza2V5YD0ndmVyc2lvbic7IiwNCiAgICApLA0KKTsNCg0KaGVscGVyKCdjYWNoZScpOw0KDQpmdW5jdGlvbiBjaGFuZ3lhbl9jbGVhcmNhY2hlKCkNCnsNCiAgICAkcHJlZml4ID0gJ2NoYW5neWFuJzsNCiAgICAka2V5ID0gJ2NvZGUnOw0KICAgIERlbENhY2hlKCRwcmVmaXgsICRrZXkpOw0KfQ0KDQpmdW5jdGlvbiBjaGFuZ3lhbl9tY2hTdHJDb2RlKCRzdHJpbmcsICRvcGVyYXRpb24gPSAnRU5DT0RFJykgDQp7DQogICAgJGtleV9sZW5ndGggPSA0Ow0KICAgICRleHBpcnkgPSAwOw0KICAgICRrZXkgPSBtZDUoJEdMT0JBTFNbJ2NmZ19jb29raWVfZW5jb2RlJ10pOw0KICAgICRmaXhlZGtleSA9IG1kNSgka2V5KTsNCiAgICAkZWdpc2tleXMgPSBtZDUoc3Vic3RyKCRmaXhlZGtleSwgMTYsIDE2KSk7DQogICAgJHJ1bnRva2V5ID0gJGtleV9sZW5ndGggPyAoJG9wZXJhdGlvbiA9PSAnRU5DT0RFJyA/IHN1YnN0cihtZDUobWljcm90aW1lKHRydWUpKSwgLSRrZXlfbGVuZ3RoKSA6IHN1YnN0cigkc3RyaW5nLCAwLCAka2V5X2xlbmd0aCkpIDogJyc7DQogICAgJGtleXMgPSBtZDUoc3Vic3RyKCRydW50b2tleSwgMCwgMTYpIC4gc3Vic3RyKCRmaXhlZGtleSwgMCwgMTYpIC4gc3Vic3RyKCRydW50b2tleSwgMTYpIC4gc3Vic3RyKCRmaXhlZGtleSwgMTYpKTsNCiAgICAkc3RyaW5nID0gJG9wZXJhdGlvbiA9PSAnRU5DT0RFJyA/IHNwcmludGYoJyUwMTBkJywgJGV4cGlyeSA/ICRleHBpcnkgKyB0aW1lKCkgOiAwKS5zdWJzdHIobWQ1KCRzdHJpbmcuJGVnaXNrZXlzKSwgMCwgMTYpIC4gJHN0cmluZyA6IGJhc2U2NF9kZWNvZGUoc3Vic3RyKCRzdHJpbmcsICRrZXlfbGVuZ3RoKSk7DQoNCiAgICAkaSA9IDA7ICRyZXN1bHQgPSAnJzsNCiAgICAkc3RyaW5nX2xlbmd0aCA9IHN0cmxlbigkc3RyaW5nKTsNCiAgICBmb3IgKCRpID0gMDsgJGkgPCAkc3RyaW5nX2xlbmd0aDsgJGkrKyl7DQogICAgICAgICRyZXN1bHQgLj0gY2hyKG9yZCgkc3RyaW5neyRpfSkgXiBvcmQoJGtleXN7JGkgJSAzMn0pKTsNCiAgICB9DQogICAgaWYoJG9wZXJhdGlvbiA9PSAnRU5DT0RFJykgew0KICAgICAgICByZXR1cm4gJHJ1bnRva2V5IC4gc3RyX3JlcGxhY2UoJz0nLCAnJywgYmFzZTY0X2VuY29kZSgkcmVzdWx0KSk7DQogICAgfSBlbHNlIHsNCiAgICAgICAgaWYoKHN1YnN0cigkcmVzdWx0LCAwLCAxMCkgPT0gMCB8fCBzdWJzdHIoJHJlc3VsdCwgMCwgMTApIC0gdGltZSgpID4gMCkgJiYgc3Vic3RyKCRyZXN1bHQsIDEwLCAxNikgPT0gc3Vic3RyKG1kNShzdWJzdHIoJHJlc3VsdCwgMjYpLiRlZ2lza2V5cyksIDAsIDE2KSkgew0KICAgICAgICAgICAgcmV0dXJuIHN1YnN0cigkcmVzdWx0LCAyNik7DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICByZXR1cm4gJyc7DQogICAgICAgIH0NCiAgICB9DQp9DQoNCmZ1bmN0aW9uIGNoYW5neWFuX1F1b3RlX3JlcGxhY2UoJHF1b3RlKQ0Kew0KICAgICRxdW90ZSA9IHN0cl9yZXBsYWNlKCd7cXVvdGV9JywnJywkcXVvdGUpOw0KICAgICRxdW90ZSA9IHN0cl9yZXBsYWNlKCd7dGl0bGV9JywnJywkcXVvdGUpOw0KICAgICRxdW90ZSA9IHN0cl9yZXBsYWNlKCd7L3RpdGxlfScsJycsJHF1b3RlKTsNCiAgICAkcXVvdGUgPSBzdHJfcmVwbGFjZSgnJmx0O2JyLyZndDsnLCJcblxyIiwkcXVvdGUpOw0KICAgICRxdW90ZSA9IHN0cl9yZXBsYWNlKCcmbHQ7JywgJycsICRxdW90ZSk7DQogICAgJHF1b3RlID0gc3RyX3JlcGxhY2UoJyZndDsnLCAnJywgJHF1b3RlKTsNCiAgICAkcXVvdGUgPSBzdHJfcmVwbGFjZSgne2NvbnRlbnR9JywnJywkcXVvdGUpOw0KICAgICRxdW90ZSA9IHN0cl9yZXBsYWNlKCd7L2NvbnRlbnR9JywnJywkcXVvdGUpOw0KICAgICRxdW90ZSA9IHN0cl9yZXBsYWNlKCd7L3F1b3RlfScsJycsJHF1b3RlKTsNCiAgICByZXR1cm4gJHF1b3RlOw0KfQ0KDQoNCi8v5pu05paw6YWN572u5Ye95pWwDQpmdW5jdGlvbiBjaGFuZ3lhbl9SZVdyaXRlQ29uZmlnKCkNCnsNCiAgICBnbG9iYWwgJGRzcWw7DQogICAgJGNvbmZpZ2ZpbGUgPSBERURFREFUQS4nL2NvbmZpZy5jYWNoZS5pbmMucGhwJzsNCiAgICBpZighaXNfd3JpdGVhYmxlKCRjb25maWdmaWxlKSkNCiAgICB7DQogICAgICAgIGVjaG8gIumFjee9ruaWh+S7tid7JGNvbmZpZ2ZpbGV9J+S4jeaUr+aMgeWGmeWFpe+8jOaXoOazleS/ruaUueezu+e7n+mFjee9ruWPguaVsO+8gSI7DQogICAgICAgIGV4aXQoKTsNCiAgICB9DQogICAgJGZwID0gZm9wZW4oJGNvbmZpZ2ZpbGUsJ3cnKTsNCiAgICBmbG9jaygkZnAsMyk7DQogICAgZndyaXRlKCRmcCwiPCIuIj9waHBcclxuIik7DQogICAgJGRzcWwtPlNldFF1ZXJ5KCJTRUxFQ1QgYHZhcm5hbWVgLGB0eXBlYCxgdmFsdWVgLGBncm91cGlkYCBGUk9NIGAjQF9fc3lzY29uZmlnYCBPUkRFUiBCWSBhaWQgQVNDICIpOw0KICAgICRkc3FsLT5FeGVjdXRlKCk7DQogICAgd2hpbGUoJHJvdyA9ICRkc3FsLT5HZXRBcnJheSgpKQ0KICAgIHsNCiAgICAgICAgaWYoJHJvd1sndHlwZSddPT0nbnVtYmVyJykNCiAgICAgICAgew0KICAgICAgICAgICAgaWYoJHJvd1sndmFsdWUnXT09JycpICRyb3dbJ3ZhbHVlJ10gPSAwOw0KICAgICAgICAgICAgZndyaXRlKCRmcCwiXCR7JHJvd1sndmFybmFtZSddfSA9ICIuJHJvd1sndmFsdWUnXS4iO1xyXG4iKTsNCiAgICAgICAgfQ0KICAgICAgICBlbHNlDQogICAgICAgIHsNCiAgICAgICAgICAgIGZ3cml0ZSgkZnAsIlwkeyRyb3dbJ3Zhcm5hbWUnXX0gPSAnIi5zdHJfcmVwbGFjZSgiJyIsJycsJHJvd1sndmFsdWUnXSkuIic7XHJcbiIpOw0KICAgICAgICB9DQogICAgfQ0KICAgIGZ3cml0ZSgkZnAsIj8iLiI+Iik7DQogICAgZmNsb3NlKCRmcCk7DQp9DQoNCmZ1bmN0aW9uIGNoYW5neWFuX2h0dHBfc2VuZCgkdXJsLCAkbGltaXQ9MCwgJHBvc3Q9JycsICRjb29raWU9JycsICR0aW1lb3V0PTE1KQ0Kew0KICAgICRyZXR1cm4gPSAnJzsNCiAgICAkbWF0Y2hlcyA9IHBhcnNlX3VybCgkdXJsKTsNCiAgICAkc2NoZW1lID0gJG1hdGNoZXNbJ3NjaGVtZSddOw0KICAgICRob3N0ID0gJG1hdGNoZXNbJ2hvc3QnXTsNCiAgICAkcGF0aCA9ICRtYXRjaGVzWydwYXRoJ10gPyAkbWF0Y2hlc1sncGF0aCddLihAJG1hdGNoZXNbJ3F1ZXJ5J10gPyAnPycuJG1hdGNoZXNbJ3F1ZXJ5J10gOiAnJykgOiAnLyc7DQogICAgJHBvcnQgPSAhZW1wdHkoJG1hdGNoZXNbJ3BvcnQnXSkgPyAkbWF0Y2hlc1sncG9ydCddIDogODA7DQoNCiAgICBpZiAoZnVuY3Rpb25fZXhpc3RzKCdjdXJsX2luaXQnKSAmJiBmdW5jdGlvbl9leGlzdHMoJ2N1cmxfZXhlYycpKSB7DQogICAgICAgICRjaCA9IGN1cmxfaW5pdCgpOw0KICAgICAgICBjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfVVJMLCAkc2NoZW1lLic6Ly8nLiRob3N0Lic6Jy4kcG9ydC4kcGF0aCk7DQogICAgICAgIGN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9SRVRVUk5UUkFOU0ZFUiwgMSk7DQogICAgICAgIGN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9GT0xMT1dMT0NBVElPTiwgMSk7DQogICAgICAgIGlmICgkcG9zdCkgew0KICAgICAgICAgICAgY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX1BPU1QsIDEpOw0KICAgICAgICAgICAgJGNvbnRlbnQgPSBpc19hcnJheSgkcG9zdCkgPyBodHRwX2J1aWxkX3F1ZXJ5KCRwb3N0KSA6ICRwb3N0Ow0KICAgICAgICAgICAgY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX1BPU1RGSUVMRFMsIHVybGRlY29kZSgkY29udGVudCkpOw0KICAgICAgICB9DQogICAgICAgIGlmICgkY29va2llKSB7DQogICAgICAgICAgICBjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfQ09PS0lFLCAkY29va2llKTsNCiAgICAgICAgfQ0KICAgICAgICBjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfQ09OTkVDVFRJTUVPVVQsICR0aW1lb3V0KTsNCiAgICAgICAgY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX1RJTUVPVVQsIDkwMCk7DQogICAgICAgICRkYXRhID0gY3VybF9leGVjKCRjaCk7DQogICAgICAgICRzdGF0dXMgPSBjdXJsX2dldGluZm8oJGNoKTsNCiAgICAgICAgJGVycm5vID0gY3VybF9lcnJubygkY2gpOw0KICAgICAgICBjdXJsX2Nsb3NlKCRjaCk7DQogICAgICAgIGlmICgkZXJybm8gfHwgJHN0YXR1c1snaHR0cF9jb2RlJ10gIT0gMjAwKSB7DQogICAgICAgICAgICByZXR1cm47DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICByZXR1cm4gISRsaW1pdCA/ICRkYXRhIDogc3Vic3RyKCRkYXRhLCAwLCAkbGltaXQpOw0KICAgICAgICB9DQogICAgfQ0KDQogICAgaWYgKCRwb3N0KSB7DQogICAgICAgICRjb250ZW50ID0gaXNfYXJyYXkoJHBvcnQpID8gdXJsZGVjb2RlKGh0dHBfYnVpbGRfcXVlcnkoJHBvc3QpKSA6ICRwb3N0Ow0KICAgICAgICAkb3V0ID0gIlBPU1QgJHBhdGggSFRUUC8xLjBcclxuIjsNCiAgICAgICAgJGhlYWRlciA9ICJBY2NlcHQ6ICovKlxyXG4iOw0KICAgICAgICAkaGVhZGVyIC49ICJBY2NlcHQtTGFuZ3VhZ2U6IHpoLWNuXHJcbiI7DQogICAgICAgICRoZWFkZXIgLj0gIkNvbnRlbnQtVHlwZTogYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkXHJcbiI7DQogICAgICAgICRoZWFkZXIgLj0gIlVzZXItQWdlbnQ6ICIuQCRfU0VSVkVSWydIVFRQX1VTRVJfQUdFTlQnXS4iXHJcbiI7DQogICAgICAgICRoZWFkZXIgLj0gIkhvc3Q6ICRob3N0OiRwb3J0XHJcbiI7DQogICAgICAgICRoZWFkZXIgLj0gJ0NvbnRlbnQtTGVuZ3RoOiAnLnN0cmxlbigkY29udGVudCkuIlxyXG4iOw0KICAgICAgICAkaGVhZGVyIC49ICJDb25uZWN0aW9uOiBDbG9zZVxyXG4iOw0KICAgICAgICAkaGVhZGVyIC49ICJDYWNoZS1Db250cm9sOiBuby1jYWNoZVxyXG4iOw0KICAgICAgICAkaGVhZGVyIC49ICJDb29raWU6ICRjb29raWVcclxuXHJcbiI7DQogICAgICAgICRvdXQgLj0gJGhlYWRlci4kY29udGVudDsNCiAgICB9IGVsc2Ugew0KICAgICAgICAkb3V0ID0gIkdFVCAkcGF0aCBIVFRQLzEuMFxyXG4iOw0KICAgICAgICAkaGVhZGVyID0gIkFjY2VwdDogKi8qXHJcbiI7DQogICAgICAgICRoZWFkZXIgLj0gIkFjY2VwdC1MYW5ndWFnZTogemgtY25cclxuIjsNCiAgICAgICAgJGhlYWRlciAuPSAiVXNlci1BZ2VudDogIi5AJF9TRVJWRVJbJ0hUVFBfVVNFUl9BR0VOVCddLiJcclxuIjsNCiAgICAgICAgJGhlYWRlciAuPSAiSG9zdDogJGhvc3Q6JHBvcnRcclxuIjsNCiAgICAgICAgJGhlYWRlciAuPSAiQ29ubmVjdGlvbjogQ2xvc2VcclxuIjsNCiAgICAgICAgJGhlYWRlciAuPSAiQ29va2llOiAkY29va2llXHJcblxyXG4iOw0KICAgICAgICAkb3V0IC49ICRoZWFkZXI7DQogICAgfQ0KDQogICAgJGZwZmxhZyA9IDA7DQogICAgJGZwID0gZmFsc2U7DQogICAgaWYgKGZ1bmN0aW9uX2V4aXN0cygnZnNvY2tldG9wZW4nKSkgew0KICAgICAgICAkZnAgPSBmc29ja2V0b3BlbigkaG9zdCwgJHBvcnQsICRlcnJubywgJGVycnN0ciwgJHRpbWVvdXQpOw0KICAgIH0NCiAgICBpZiAoISRmcCkgew0KICAgICAgICAkY29udGV4dCA9IHN0cmVhbV9jb250ZXh0X2NyZWF0ZShhcnJheSgNCiAgICAgICAgICAgICdodHRwJyA9PiBhcnJheSgNCiAgICAgICAgICAgICAgICAnbWV0aG9kJyA9PiAkcG9zdCA/ICdQT1NUJyA6ICdHRVQnLA0KICAgICAgICAgICAgICAgICdoZWFkZXInID0+ICRoZWFkZXIsDQogICAgICAgICAgICAgICAgJ2NvbnRlbnQnID0+ICRjb250ZW50LA0KICAgICAgICAgICAgICAgICd0aW1lb3V0JyA9PiAkdGltZW91dCwNCiAgICAgICAgICAgICksDQogICAgICAgICkpOw0KICAgICAgICAkZnAgPSBAZm9wZW4oJHNjaGVtZS4nOi8vJy4kaG9zdC4nOicuJHBvcnQuJHBhdGgsICdiJywgZmFsc2UsICRjb250ZXh0KTsNCiAgICAgICAgJGZwZmxhZyA9IDE7DQogICAgfQ0KDQogICAgaWYgKCEkZnApIHsNCiAgICAgICAgcmV0dXJuICcnOw0KICAgIH0gZWxzZSB7DQogICAgICAgIHN0cmVhbV9zZXRfYmxvY2tpbmcoJGZwLCB0cnVlKTsNCiAgICAgICAgc3RyZWFtX3NldF90aW1lb3V0KCRmcCwgJHRpbWVvdXQpOw0KICAgICAgICBAZndyaXRlKCRmcCwgJG91dCk7DQogICAgICAgICRzdGF0dXMgPSBzdHJlYW1fZ2V0X21ldGFfZGF0YSgkZnApOw0KICAgICAgICBpZiAoISRzdGF0dXNbJ3RpbWVkX291dCddKSB7DQogICAgICAgICAgICB3aGlsZSAoIWZlb2YoJGZwKSAmJiAhJGZwZmxhZykgew0KICAgICAgICAgICAgICAgIGlmICgoJGhlYWRlciA9IEBmZ2V0cygkZnApKSAmJiAoJGhlYWRlciA9PSAiXHJcbiIgfHwgICRoZWFkZXIgPT0gIlxuIikpIHsNCiAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgaWYgKCRsaW1pdCkgew0KICAgICAgICAgICAgICAgICRyZXR1cm4gPSBzdHJlYW1fZ2V0X2NvbnRlbnRzKCRmcCwgJGxpbWl0KTsNCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgJHJldHVybiA9IHN0cmVhbV9nZXRfY29udGVudHMoJGZwKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICBAZmNsb3NlKCRmcCk7DQogICAgICAgIHJldHVybiAkcmV0dXJuOw0KICAgIH0NCn0NCg0KZnVuY3Rpb24gY2hhbmd5YW5fYXV0b0NoYXJzZXQoJG1zZywkdHlwZT0nb3V0JykNCnsNCiAgICBnbG9iYWwgJGNmZ19zb2Z0X2xhbmc7DQogICAgaWYgKCRjZmdfc29mdF9sYW5nPT0nZ2IyMzEyJykgew0KICAgICAgICBpZigkdHlwZT09J291dCcpIHJldHVybiBnYjJ1dGY4KCRtc2cpOw0KICAgICAgICBlbHNlIHJldHVybiB1dGY4MmdiKCRtc2cpOw0KICAgIH0gDQogICAgcmV0dXJuICRtc2c7DQp9DQoNCmZ1bmN0aW9uIGNoYW5neWFuX2dlbl9zaWduKCR1c2VyKQ0Kew0KICAgIGdsb2JhbCAkY2ZnX3ZlcnNpb24sJGRzcWw7DQogICAgJHBocHYgPSBwaHB2ZXJzaW9uKCk7DQogICAgJHNwX29zID0gUEhQX09TOw0KICAgICRteXNxbF92ZXIgPSAkZHNxbC0+R2V0VmVyc2lvbigpOw0KICAgICRudXJsID0gJF9TRVJWRVJbJ0hUVFBfSE9TVCddOw0KICAgIGlmKCBwcmVnX21hdGNoKCIjW2EtelwtXXsxLH1cLlthLXpdezIsfSNpIiwkbnVybCkgKSB7DQogICAgICAgICRudXJsID0gdXJsZW5jb2RlKCRudXJsKTsNCiAgICB9DQogICAgZWxzZSB7DQogICAgICAgICRudXJsID0gInRlc3QiOw0KICAgIH0NCiAgICAkYWVzX3VybD1DSEFOR1lBTl9BUElfQUVTLic/a2V5PScuQ0hBTkdZQU5fQ0xJRU5UX0tFWS4nJmlucHV0PScuJHVzZXIuIiZ2ZXJzaW9uPXskY2ZnX3ZlcnNpb259JmZvcm11cmw9eyRudXJsfSZwaHB2ZXI9eyRwaHB2fSZvcz17JHNwX29zfSZteXNxbHZlcj17JG15c3FsX3Zlcn0mY3l2ZXI9Ii5DSEFOR1lBTl9WRVI7DQogICAgcmV0dXJuIGNoYW5neWFuX2h0dHBfc2VuZCgkYWVzX3VybCk7DQp9DQoNCmZ1bmN0aW9uIGNoYW5neWFuX2JpbmRfYWNjb3VudCgkbmV3X3VzZXIsJG5ld19wd2QsICRlcnJvcmluZm89JycpDQp7DQogICAgJG9sZF91c2VyID0gY2hhbmd5YW5fZ2V0X3NldHRpbmcoJ3VzZXInKTsNCiAgICAkb2xkX3Bhc3N3b3JkPWNoYW5neWFuX21jaFN0ckNvZGUoY2hhbmd5YW5fZ2V0X3NldHRpbmcoJ3B3ZCcpLCAnREVDT0RFJykgOw0KICAgICRzaWduPWNoYW5neWFuX2dlbl9zaWduKCRvbGRfdXNlcik7DQogICAgJHBhcmFtc0Fycj1hcnJheSgNCiAgICAgICAgJ2NsaWVudF9pZCc9PkNIQU5HWUFOX0NMSUVOVF9JRCwgDQogICAgICAgICdvbGRfdXNlcic9PiRvbGRfdXNlciwgDQogICAgICAgICdvbGRfcGFzc3dvcmQnPT4kb2xkX3Bhc3N3b3JkLCANCiAgICAgICAgJ25ld191c2VyJz0+JG5ld191c2VyLCANCiAgICAgICAgJ25ld19wYXNzd29yZCc9PiRuZXdfcHdkLCANCiAgICAgICAgJ3NpZ24nPT4kc2lnbik7DQogICAgJHJzPWpzb25fZGVjb2RlKGNoYW5neWFuX2h0dHBfc2VuZChDSEFOR1lBTl9BUElfQklOREFDQy4nPycuaHR0cF9idWlsZF9xdWVyeSgkcGFyYW1zQXJyKSksVFJVRSk7DQogICAgaWYoIWlzc2V0KCRyc1snc3RhdHVzJ10pKSByZXR1cm4gRkFMU0U7DQogICAgaWYoJHJzWydzdGF0dXMnXT09MCkNCiAgICB7DQogICAgICAgICRuZXdfcHdkID0gY2hhbmd5YW5fbWNoU3RyQ29kZSgkbmV3X3B3ZCwgJ0VOQ09ERScpOw0KICAgICAgICBjaGFuZ3lhbl9zZXRfc2V0dGluZygndXNlcicsICRuZXdfdXNlcik7DQogICAgICAgIGNoYW5neWFuX3NldF9zZXR0aW5nKCdwd2QnLCAkbmV3X3B3ZCk7DQogICAgICAgIGNoYW5neWFuX3NldF9zZXR0aW5nKCdpc3ZfYXBwX2tleScsICcnKTsNCiAgICAgICAgJGlzdl9hcHBfa2V5ID0gY2hhbmd5YW5fZ2V0X2lzdl9hcHBfa2V5KCk7DQogICAgICAgIGNoYW5neWFuX2NsZWFyY2FjaGUoKTsNCiAgICAgICAgcmV0dXJuIFRSVUU7DQogICAgfSBlbHNlIHsNCiAgICAgICAgJGVycm9yaW5mbyA9ICRyc1snbXNnJ107DQogICAgICAgIHJldHVybiBGQUxTRTsNCiAgICB9DQp9DQoNCmZ1bmN0aW9uIGNoYW5neWFuX2htYWNzaGExKCRkYXRhLCAka2V5KSB7DQogICAgcmV0dXJuIGhhc2hfaG1hYygnc2hhMScsICRkYXRhLCAka2V5KTsNCn0NCg0KZnVuY3Rpb24gY2hhbmd5YW5fZ2V0X2lzdnMoKQ0Kew0KICAgICR1c2VyID0gY2hhbmd5YW5fZ2V0X3NldHRpbmcoJ3VzZXInKTsNCiAgICAkc2lnbj1jaGFuZ3lhbl9nZW5fc2lnbigkdXNlcik7DQogICAgJHBhcmFtc0Fycj1hcnJheSgNCiAgICAgICAgJ2NsaWVudF9pZCc9PkNIQU5HWUFOX0NMSUVOVF9JRCwgDQogICAgICAgICd1c2VyJz0+JHVzZXIsIA0KICAgICAgICAnc2lnbic9PiRzaWduKTsNCiAgICAkcnM9anNvbl9kZWNvZGUoY2hhbmd5YW5faHR0cF9zZW5kKENIQU5HWUFOX0FQSV9HRVRJU1ZTLic/Jy5odHRwX2J1aWxkX3F1ZXJ5KCRwYXJhbXNBcnIpKSxUUlVFKTsNCiAgICBpZihpc3NldCgkcnNbJ2lzdnMnXSkpIHJldHVybiBqc29uX2RlY29kZSgkcnNbJ2lzdnMnXSxUUlVFKTsNCiAgICBlbHNlIHJldHVybiBGQUxTRTsNCn0NCg0KZnVuY3Rpb24gY2hhbmd5YW5fZ2V0X2lzdnNfanNvbnAoKQ0Kew0KICAgICRhcHBpZCA9IGNoYW5neWFuX2dldF9zZXR0aW5nKCdhcHBpZCcpOw0KICAgICR1c2VyID0gY2hhbmd5YW5fZ2V0X3NldHRpbmcoJ3VzZXInKTsNCiAgICAkc2lnbj1jaGFuZ3lhbl9nZW5fc2lnbigkdXNlcik7DQogICAgJGNsaWVudF9pZD1DSEFOR1lBTl9DTElFTlRfSUQ7DQogICAgJGpzb25wX3VybD1DSEFOR1lBTl9BUElfR0VUSVNWU19KU09OUDsNCiAgICByZXR1cm4gPDw8RU9UDQo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+DQokLmFqYXgoeyAgDQogICAgICAgIHR5cGU6ICJnZXQiLCAgDQogICAgICAgIHVybDogInskanNvbnBfdXJsfSIsICANCiAgICAgICAgZGF0YVR5cGU6ICJqc29ucCIsICANCiAgICAgICAgZGF0YTogew0KICAgICAgICAgICAgY2xpZW50X2lkOiAneyRjbGllbnRfaWR9JywNCiAgICAgICAgICAgIHVzZXI6ICd7JHVzZXJ9JywNCiAgICAgICAgICAgIHNpZ246ICd7JHNpZ259Jw0KICAgICAgICB9LA0KICAgICAgICBqc29ucDogImNhbGxiYWNrIiwNCiAgICAgICAganNvbnBDYWxsYmFjazogInN1Y2Nlc3NfanNvbnBDYWxsYmFjayIsDQogICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uKGRhdGEpeyAgDQogICAgICAgICAgICBpc3ZzID0gZXZhbChldmFsKGRhdGEpWyJpc3ZzIl0pOw0KICAgICAgICAgICAgdmFyIGRiX2FwcGlkPSd7JGFwcGlkfSc7DQogICAgICAgICAgICB2YXIgaXN2c0NvbnRlbnQ9Jyc7DQogICAgICAgICAgICAkLmVhY2goaXN2cywgZnVuY3Rpb24oaSxpdGVtKXsNCiAgICAgICAgICAgICAgICB2YXIgYXBwSWQ9aXRlbS5hcHBJZDsNCiAgICAgICAgICAgICAgICB2YXIgYXBwS2V5PWl0ZW0uYXBwS2V5Ow0KICAgICAgICAgICAgICAgIHZhciBuYW1lPWl0ZW0ubmFtZTsNCiAgICAgICAgICAgICAgICB2YXIgaWQ9aXRlbS5pZDsNCiAgICAgICAgICAgICAgICB2YXIgdXJsPWl0ZW0udXJsOw0KICAgICAgICAgICAgICAgIHZhciBjaGVja2Vkc3RyPScnOw0KICAgICAgICAgICAgICAgIGlmKGRiX2FwcGlkPT1hcHBJZCkgY2hlY2tlZHN0cj0nIGNoZWNrZWQnOw0KICAgICAgICAgICAgICAgIG9wdGlvbl9odG1sID0gJzxwPjxpbnB1dCB0eXBlPSJyYWRpbyIgbmFtZT0iYXBwSW5mbyIgaWQ9ImFwcEluZm8nK2lkKyciIHZhbHVlPSInK2FwcElkKyd8JythcHBLZXkrJyInK2NoZWNrZWRzdHIrJz4gPGxhYmVsIGZvcj0iYXBwSW5mbycraWQrJyI+JytuYW1lKycgWycrYXBwSWQrJyB8ICcrdXJsKyddPC9sYWJlbD48L3A+JzsNCiAgICAgICAgICAgICAgICBpc3ZzQ29udGVudCA9IGlzdnNDb250ZW50ICsgb3B0aW9uX2h0bWw7DQogICAgICAgICAgICB9KTsNCiAgICAgICAgICAgICQoIiNpc3ZzQ29udGVudCIpLmh0bWwoaXN2c0NvbnRlbnQpOw0KICAgICAgICB9LA0KICAgICAgICBlcnJvcjogZnVuY3Rpb24oZGF0YSl7DQogICAgICAgICAgICBpc3ZzQ29udGVudCA9ICLmsqHmnInojrflj5bliLDlvZPliY3nmbvlvZXotKblj7fmiYDlr7nlupTnmoRBUFBJROS/oeaBr++8jOivt+ajgOafpeaYr+WQpuato+ehruWuieijheeVheiogOaooeWdl+OAgiI7DQogICAgICAgICAgICAkKCIjaXN2c0NvbnRlbnQiKS5odG1sKGlzdnNDb250ZW50KTsNCiAgICAgICAgfSwgICAgICAgIA0KICAgICAgICAgIA0KICAgIH0pOw0KPC9zY3JpcHQ+DQpFT1Q7DQp9DQoNCmZ1bmN0aW9uIGNoYW5neWFuX2dldF9pc3ZfYXBwX2tleSgpDQp7DQogICAgZ2xvYmFsICRjbGllbnRfaWQ7DQogICAgJGlzdl9hcHBfa2V5PWNoYW5neWFuX2dldF9zZXR0aW5nKCdpc3ZfYXBwX2tleScpOw0KICAgIGlmICghZW1wdHkoJGlzdl9hcHBfa2V5KSkgew0KICAgICAgICByZXR1cm4gJGlzdl9hcHBfa2V5Ow0KICAgIH0gZWxzZSB7DQogICAgICAgIHJldHVybiBGQUxTRTsNCiAgICB9IC8v5o6l5Y+j5LiL57q/77yM55u05o6l6YCa6L+H6K6+5a6aYXBwaW5mb+aOpeWPow0KICAgICR1c2VyID0gY2hhbmd5YW5fZ2V0X3NldHRpbmcoJ3VzZXInKTsNCiAgICANCiAgICBpZiAoIWVtcHR5KCRpc3ZfYXBwX2tleSkpIHsNCiAgICAgICAgcmV0dXJuICRpc3ZfYXBwX2tleTsNCiAgICB9DQogICAgJGlzdl9hcHBfa2V5PScnOw0KICAgICRzaWduPWNoYW5neWFuX2dlbl9zaWduKCR1c2VyKTsNCiAgICAkcGFyYW1zQXJyPWFycmF5KA0KICAgICAgICAnY2xpZW50X2lkJz0+Q0hBTkdZQU5fQ0xJRU5UX0lELCANCiAgICAgICAgJ3VzZXInPT4kdXNlciwgDQogICAgICAgICd1c2VyX2FwcGlkJz0+JGNsaWVudF9pZCwNCiAgICAgICAgJ3NpZ24nPT4kc2lnbik7DQogICAgJHJzPWNoYW5neWFuX2h0dHBfc2VuZChDSEFOR1lBTl9BUElfR0VUQVBQS0VZLic/Jy5odHRwX2J1aWxkX3F1ZXJ5KCRwYXJhbXNBcnIpKTsNCiAgICAkcnMgPSBqc29uX2RlY29kZSgkcnMsVFJVRSk7DQogICAgaWYgKGlzc2V0KCRyc1snaXN2X2FwcF9rZXknXSkpIHsNCiAgICAgICAgJGlzdl9hcHBfa2V5PSRyc1snaXN2X2FwcF9rZXknXTsNCiAgICB9DQogICAgY2hhbmd5YW5fc2V0X3NldHRpbmcoJ2lzdl9hcHBfa2V5JywgJGlzdl9hcHBfa2V5KTsNCiAgICByZXR1cm4gJGlzdl9hcHBfa2V5Ow0KfQ0KDQpmdW5jdGlvbiBjaGFuZ3lhbl9nZXRfY29tbWVudHMoJGNsaWVudF9pZCwgJHRvcGljX2lkKQ0Kew0KICAgICRyZXN1bHQ9YXJyYXkoKTsNCiAgICAkcGFyYW1zQXJyPWFycmF5KA0KICAgICAgICAnY2xpZW50X2lkJz0+JGNsaWVudF9pZCwgDQogICAgICAgICdzdHlsZSc9PidmbG9vcicsIA0KICAgICAgICAnb3JkZXJfYnknPT4ndGltZV9hc2MnLCANCiAgICAgICAgJ3BhZ2Vfbm8nPT4xLCANCiAgICAgICAgJ3BhZ2Vfc2l6ZSc9PjEwMCwgDQogICAgICAgICd0b3BpY19pZCc9PiR0b3BpY19pZCk7DQogICAgJHJzPWNoYW5neWFuX2h0dHBfc2VuZChDSEFOR1lBTl9BUElfQ09NTUVOVFMuJz8nLmh0dHBfYnVpbGRfcXVlcnkoJHBhcmFtc0FycikpOw0KICAgICRycyA9IGpzb25fZGVjb2RlKCRycyxUUlVFKTsNCiAgICByZXR1cm4gJHJzOw0KfQ0KDQpmdW5jdGlvbiBjaGFuZ3lhbl9saXN0X3NvcnRfYnkoJGxpc3QsICRmaWVsZCwgJHNvcnRieT0nYXNjJykgDQp7DQogICBpZihpc19hcnJheSgkbGlzdCkpew0KICAgICAgICRyZWZlciA9ICRyZXN1bHRTZXQgPSBhcnJheSgpOw0KICAgICAgIGZvcmVhY2ggKCRsaXN0IGFzICRpID0+ICRkYXRhKQ0KICAgICAgICAgICAkcmVmZXJbJGldID0gJiRkYXRhWyRmaWVsZF07DQogICAgICAgc3dpdGNoICgkc29ydGJ5KSB7DQogICAgICAgICAgIGNhc2UgJ2FzYyc6IC8vIOato+WQkeaOkuW6jw0KICAgICAgICAgICAgICAgIGFzb3J0KCRyZWZlcik7DQogICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgIGNhc2UgJ2Rlc2MnOi8vIOmAhuWQkeaOkuW6jw0KICAgICAgICAgICAgICAgIGFyc29ydCgkcmVmZXIpOw0KICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICBjYXNlICduYXQnOiAvLyDoh6rnhLbmjpLluo8NCiAgICAgICAgICAgICAgICBuYXRjYXNlc29ydCgkcmVmZXIpOw0KICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgIH0NCiAgICAgICBmb3JlYWNoICggJHJlZmVyIGFzICRrZXk9PiAkdmFsKQ0KICAgICAgICAgICAkcmVzdWx0U2V0W10gPSAmJGxpc3RbJGtleV07DQogICAgICAgcmV0dXJuICRyZXN1bHRTZXQ7DQogICB9DQogICByZXR1cm4gZmFsc2U7DQp9DQoNCmZ1bmN0aW9uIGNoYW5neWFuX2luc2VydF9jb21tZW50cygkY29tbWVudCwkYWlkLCR0aXRsZSkNCnsNCiAgICBnbG9iYWwgJGRzcWw7DQogICAgaWYgKCFpc3NldCgkY29tbWVudFsnY29tbWVudHMnXSkpIHJldHVybiBGQUxTRTsNCiAgICAkZHNxbC0+U2V0UXVlcnkoIlNFTEVDVCBjb21tZW50X2lkIEZST00gYCNAX19wbHVzX2NoYW5neWFuX2luc2VydGlkc2AgV0hFUkUgYWlkPXskYWlkfSIpOw0KICAgICRkc3FsLT5FeGVjdXRlKCdkZCcpOw0KICAgICRjb21tZW50X2lkcz1hcnJheSgpOw0KICAgIHdoaWxlKCRhcnIgPSAkZHNxbC0+R2V0QXJyYXkoJ2RkJykpDQogICAgew0KICAgICAgICAkY29tbWVudF9pZHNbXSA9ICRhcnJbJ2NvbW1lbnRfaWQnXTsNCiAgICB9DQogICAgJGk9MDsNCiAgICBmb3JlYWNoICgkY29tbWVudFsnY29tbWVudHMnXSBhcyAkY29tbWVudCkgDQogICAgew0KICAgICAgICAkY29udGVudCA9ICcnOw0KICAgICAgICBpZiAoaW5fYXJyYXkoJGNvbW1lbnRbJ2NvbW1lbnRfaWQnXSwgJGNvbW1lbnRfaWRzKSkgY29udGludWU7DQogICAgICAgIGlmIChjb3VudCgkY29tbWVudFsnY29tbWVudHMnXSk+MCkgew0KICAgICAgICAgICAgJGNvbW1lbnRbJ2NvbW1lbnRzJ10gPSBjaGFuZ3lhbl9saXN0X3NvcnRfYnkoJGNvbW1lbnRbJ2NvbW1lbnRzJ10sICdjcmVhdGVfdGltZScsJ2Rlc2MnKTsNCiAgICAgICAgICAgIGZvcmVhY2ggKCRjb21tZW50Wydjb21tZW50cyddIGFzICRjKSB7DQogICAgICAgICAgICAgICAgJGNbJ2NvbnRlbnQnXSA9IGNoYW5neWFuX2F1dG9DaGFyc2V0KCRjWydjb250ZW50J10sICdpbicpOw0KICAgICAgICAgICAgICAgICRjb250ZW50ID0gJ3txdW90ZX17Y29udGVudH0nLiRjb250ZW50LiRjWydjb250ZW50J10uJ3svY29udGVudH17dGl0bGV9Jy4NCiAgICAgICAgICAgICAgICAgICAgJGNbJ3Bhc3Nwb3J0J11bJ25pY2tuYW1lJ10uJyDnmoTljp/luJbvvJp7L3RpdGxlfXsvcXVvdGV9JzsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICAkYWlkPWludHZhbCgkYWlkKTsNCiAgICAgICAgJHR5cGVpZD0wOw0KICAgICAgICAkdXNlcm5hbWU9Y2hhbmd5YW5fYXV0b0NoYXJzZXQoJGNvbW1lbnRbJ3Bhc3Nwb3J0J11bJ25pY2tuYW1lJ10sICdpbicpOw0KICAgICAgICAkYXJjdGl0bGU9Y2hhbmd5YW5fYXV0b0NoYXJzZXQoJHRpdGxlLCAnaW4nKTsNCiAgICAgICAgJGlwPSRjb21tZW50WydpcCddOw0KICAgICAgICAkY29tbWVudF9pZD0kY29tbWVudFsnY29tbWVudF9pZCddOw0KICAgICAgICAkaXNjaGVjaz0xOw0KICAgICAgICAkZHRpbWU9IGludHZhbCgkY29tbWVudFsnY3JlYXRlX3RpbWUnXSAvIDEwMDAgKSA7DQogICAgICAgICRtc2cgPSAkY29udGVudC5jaGFuZ3lhbl9hdXRvQ2hhcnNldCgkY29tbWVudFsnY29udGVudCddLCAnaW4nKSA7DQogICAgICAgICRpbnF1ZXJ5ID0gIklOU0VSVCBJTlRPIGAjQF9fZmVlZGJhY2tgKGBhaWRgLGB0eXBlaWRgLGB1c2VybmFtZWAsYGFyY3RpdGxlYCxgaXBgLGBpc2NoZWNrYCxgZHRpbWVgLCBgbWlkYCxgYmFkYCxgZ29vZGAsYGZ0eXBlYCxgZmFjZWAsYG1zZ2ApDQogICAgICAgICAgICAgICAgICAgICAgICAgICBWQUxVRVMgKCckYWlkJywnJHR5cGVpZCcsJyR1c2VybmFtZScsJyRhcmN0aXRsZScsJyRpcCcsJyRpc2NoZWNrJywnJGR0aW1lJywgJzAnLCcwJywnMCcsJ2ZlZWRiYWNrJywnJywnJG1zZycpOyAiOw0KICAgICAgICAkcnMgPSAkZHNxbC0+RXhlY3V0ZU5vbmVRdWVyeSgkaW5xdWVyeSk7DQogICAgICAgICRmZWVkYmFja19pZCA9ICRkc3FsLT5HZXRMYXN0SUQoKTsNCiAgICAgICAgJGlucXVlcnkgPSAiSU5TRVJUIElOVE8gYCNAX19wbHVzX2NoYW5neWFuX2ltcG9ydGlkc2AoYGFpZGAsYGZlZWRiYWNrX2lkYCkgVkFMVUVTICgneyRhaWR9JywneyRmZWVkYmFja19pZH0nKSI7DQogICAgICAgICRycyA9ICRkc3FsLT5FeGVjdXRlTm9uZVF1ZXJ5KCRpbnF1ZXJ5KTsNCiAgICAgICAgJGlucXVlcnkgPSAiSU5TRVJUIElOVE8gYCNAX19wbHVzX2NoYW5neWFuX2luc2VydGlkc2AoYGFpZGAsYGNvbW1lbnRfaWRgKSBWQUxVRVMgKCckYWlkJywnJGNvbW1lbnRfaWQnKSI7DQogICAgICAgICRycyA9ICRkc3FsLT5FeGVjdXRlTm9uZVF1ZXJ5KCRpbnF1ZXJ5KTsNCiAgICAgICAgJGkrKzsNCiAgICB9DQoNCiAgICByZXR1cm4gJGk7DQogICAvLyByZXR1cm4gJGNvbW1lbnQ7DQp9DQoNCmZ1bmN0aW9uIGNoYW5neWFuX2NoZWNrX2lzbG9naW4oKQ0Kew0KICAgIGdsb2JhbCAkZG9wb3N0Ow0KICAgICRqcXVlcnlfdXJsID0gQ0hBTkdZQU5fQVBJX0FFUy4iYXNzZXRzL2pzL2pxdWVyeS5taW4uanMiOw0KICAgICRjaGFuZ3lhbl9sb2dpbj1DSEFOR1lBTl9BUElfQ0hFQ0tfTE9HSU47DQogICAgZWNobyA8PDxFT1QNCjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9InskanF1ZXJ5X3VybH0iPjwvc2NyaXB0Pg0KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPg0KKGZ1bmN0aW9uKCQpew0KICAgICQuYWpheCh7DQogICAgICAgIHR5cGU6ICJHRVQiLA0KICAgICAgICB1cmw6ICJ7JGNoYW5neWFuX2xvZ2lufSIsDQogICAgICAgIGRhdGFUeXBlIDogJ2pzb25wJywNCiAgICAgICAganNvbnBDYWxsYmFjazoiY2FsbGZ1bmMiLA0KICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbihtc2cpew0KICAgICAgICAgICAgaWYoIW1zZy5zdWNjZXNzKXsNCiAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZj0nP2RvcG9zdD1sb2dvdXQmbm9tc2c9eWVzJmZvcndhcmQ9eyRkb3Bvc3R9JzsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgIH0pOw0KfSkoalF1ZXJ5KQ0KPC9zY3JpcHQ+ICAgIA0KRU9UOw0KICAgIC8vZXhpdDsNCn0NCg0KZnVuY3Rpb24gY2hhbmd5YW5fZ2V0X3JlY2VudCgkYXBwaWQsJGRhdGUpDQp7DQogICAgJGRhdGUgPSB1cmxlbmNvZGUoJGRhdGUpOw0KICAgICRyZWNlbnRfdXJsPUNIQU5HWUFOX0FQSV9SRUNFTlQuIi8/YXBwSWQ9eyRhcHBpZH0mZGF0ZT17JGRhdGV9IjsNCiAgICByZXR1cm4ganNvbl9kZWNvZGUoY2hhbmd5YW5faHR0cF9zZW5kKCRyZWNlbnRfdXJsKSxUUlVFKTsNCn0NCg0KZnVuY3Rpb24gY2hhbmd5YW5fbGF0ZXN0cygkY2xpZW50X2lkLCRwYWdlc2l6ZT0yMCwkb3JkZXI9J2hvdCcpDQp7DQogICAgJGxhdGVzdHNfdXJsPUNIQU5HWUFOX0FQSV9MQVRFU1RTLiIvP2NsaWVudF9pZD17JGNsaWVudF9pZH0mc2l6ZT17JHBhZ2VzaXplfSZvcmRlcl9ieT17JG9yZGVyfSI7DQogICAgcmV0dXJuIGpzb25fZGVjb2RlKGNoYW5neWFuX2h0dHBfc2VuZCgkbGF0ZXN0c191cmwpLFRSVUUpOw0KfQ0KDQpmdW5jdGlvbiBjaGFuZ3lhbl9nZXRjb2RlKCRjbGllbnRfaWQsICR1c2VyLCAkaXNfbW9iaWxlLCAkc2lnbiwgJGFwcGlkPSIiKQ0Kew0KICAgICRnZXRjb2RlX3VybD1DSEFOR1lBTl9BUElfQ09ERS4iLz9jbGllbnRfaWQ9eyRjbGllbnRfaWR9JnVzZXI9eyR1c2VyfSZpc19tb2JpbGU9eyRpc19tb2JpbGV9JnNpZ249eyRzaWdufSZ1c2VyX2FwcGlkPXskYXBwaWR9IjsNCiAgICByZXR1cm4ganNvbl9kZWNvZGUoY2hhbmd5YW5faHR0cF9zZW5kKCRnZXRjb2RlX3VybCksVFJVRSk7DQp9DQoNCmZ1bmN0aW9uIGNoYW5neWFuX2dldF90b3BpY19jb21tZW50cygkY2xpZW50X2lkLCAkc2lkLCAkdXJsKQ0Kew0KICAgICRnZXRfdG9waWNfY29tbWVudHNfdXJsPUNIQU5HWUFOX0FQSV9UT1BJQ0NPTU1FTlRTLiIvP2NsaWVudF9pZD17JGNsaWVudF9pZH0mdG9waWNfc291cmNlX2lkPXskc2lkfSZ0b3BpY191cmw9eyR1cmx9IjsNCiAgICByZXR1cm4ganNvbl9kZWNvZGUoY2hhbmd5YW5faHR0cF9zZW5kKCRnZXRfdG9waWNfY29tbWVudHNfdXJsKSxUUlVFKTsNCn0NCmZ1bmN0aW9uIGNoYW5neWFuX2lzbG9naW4oKQ0Kew0KICAgIHJldHVybiBlbXB0eSgkX1NFU1NJT05bJ2NoYW5neWFuJ10pPyBGQUxTRSA6IFRSVUU7DQp9DQoNCmZ1bmN0aW9uIGNoYW5neWFuX2dldF9zZXR0aW5nKCRza2V5LCAkdGltZT1mYWxzZSwgJHJlYWw9ZmFsc2UpDQp7DQogICAgZ2xvYmFsICRkc3FsOw0KICAgIHN0YXRpYyAkc2V0dGluZyA9IGFycmF5KCk7DQogICAgJHNrZXk9YWRkc2xhc2hlcygkc2tleSk7DQogICAgaWYgKGVtcHR5KCRzZXR0aW5nWyRza2V5XSkgfHwgJHJlYWwpIHsNCiAgICAgICAgJHJvdyA9ICRkc3FsLT5HZXRPbmUoIlNFTEVDVCAqIEZST00gYCNAX19wbHVzX2NoYW5neWFuX3NldHRpbmdgIFdIRVJFIHNrZXk9J3skc2tleX0nIik7DQogICAgICAgICRzZXR0aW5nWyRza2V5XVsnc3ZhbHVlJ109JHJvd1snc3ZhbHVlJ107DQogICAgICAgICRzZXR0aW5nWyRza2V5XVsnc3RpbWUnXT0kcm93WydzdGltZSddOw0KICAgIH0NCiAgICBpZiAoIWlzc2V0KCRzZXR0aW5nWyRza2V5XSkpIHJldHVybiAkdGltZSA/IGFycmF5KCkgOiBudWxsOw0KICAgIHJldHVybiAkdGltZSA/ICRzZXR0aW5nWyRza2V5XSA6ICRzZXR0aW5nWyRza2V5XVsnc3ZhbHVlJ107DQp9DQoNCmZ1bmN0aW9uIGNoYW5neWFuX3NldF9zZXR0aW5nKCRza2V5LCAkc3ZhbHVlKQ0Kew0KICAgIGdsb2JhbCAkZHNxbDsNCiAgICAkc3RpbWU9dGltZSgpOw0KICAgICRza2V5PWFkZHNsYXNoZXMoJHNrZXkpOw0KICAgICRzdmFsdWU9YWRkc2xhc2hlcygkc3ZhbHVlKTsNCiAgICAkc3FsPSJVUERBVEUgYCNAX19wbHVzX2NoYW5neWFuX3NldHRpbmdgIFNFVCBzdmFsdWU9J3skc3ZhbHVlfScsc3RpbWU9J3skc3RpbWV9JyBXSEVSRSBza2V5PSd7JHNrZXl9JyAiOw0KICAgICRkc3FsLT5FeGVjdXRlTm9uZVF1ZXJ5KCRzcWwpOw0KfQ0KDQpmdW5jdGlvbiBjaGFuZ3lhbl9hZGRzaXRlKCR1c2VyLCAkaXN2X25hbWUsICR1cmwpDQp7DQogICAgJHNpZ249Y2hhbmd5YW5fZ2VuX3NpZ24oJHVzZXIpOw0KICAgICRwYXJhbXNBcnI9YXJyYXkoDQogICAgICAgICdjbGllbnRfaWQnPT5DSEFOR1lBTl9DTElFTlRfSUQsIA0KICAgICAgICAndXNlcic9PiR1c2VyLCANCiAgICAgICAgJ2lzdl9uYW1lJz0+JGlzdl9uYW1lLA0KICAgICAgICAndXJsJz0+JHVybCwNCiAgICAgICAgJ3NpZ24nPT4kc2lnbik7DQogICAgJHJzPWNoYW5neWFuX2h0dHBfc2VuZChDSEFOR1lBTl9BUElfQUREU0lURSwwLCRwYXJhbXNBcnIpOw0KICAgIHJldHVybiBqc29uX2RlY29kZSgkcnMsIFRSVUUpOw0KfQ0KDQpmdW5jdGlvbiBjaGFuZ3lhbl9mb3JnZXRfcHdkKCRtYWlsLCYkZXJyb3JfbXNnPScnKQ0Kew0KICAgICRwYXJhbXNBcnI9YXJyYXkoDQogICAgICAgICdjbGllbnRfaWQnPT5DSEFOR1lBTl9DTElFTlRfSUQsIA0KICAgICAgICAnbWFpbCc9PiRtYWlsKTsNCiAgICAkcnM9anNvbl9kZWNvZGUoY2hhbmd5YW5faHR0cF9zZW5kKENIQU5HWUFOX0FQSV9GT1JHRVRfUFdELDAsJHBhcmFtc0FyciksIFRSVUUpOw0KICAgIGlmKCEkcnNbJ3N1Y2Nlc3MnXSkNCiAgICB7DQogICAgICAgICRlcnJvcl9tc2c9JHJzWydtc2cnXTsNCiAgICAgICAgcmV0dXJuIEZBTFNFOw0KICAgIH0NCiAgICByZXR1cm4gVFJVRTsNCn0NCg0KPz4NCg==
  43. </file>
  44. <file type='file' name='../include/taglib/changyan.lib.php'>
  45. 77u/PD9waHAgICBpZighZGVmaW5lZCgnREVERUlOQycpKSBleGl0KCdSZXF1ZXN0IEVycm9yIScpOw0KDQpoZWxwZXIoJ2NoYW5neWFuJyk7DQpoZWxwZXIoJ2NhY2hlJyk7DQokR0xPQkFMU1snY2hhbmd5YW5fY291bnRfanMnXSA9IGlzc2V0KCRHTE9CQUxTWydjaGFuZ3lhbl9jb3VudF9qcyddKT8gJEdMT0JBTFNbJ2NoYW5neWFuX2NvdW50X2pzJ10gOiBGQUxTRTsNCmZ1bmN0aW9uIGxpYl9jaGFuZ3lhbigmJGN0YWcsJiRyZWZPYmopDQp7DQogICAgZ2xvYmFsICRkc3FsLCAkZW52czsNCiAgICAvL+WxnuaAp+WkhOeQhg0KICAgICRhdHRsaXN0PSJ0eXBlfGNvZGUsY29uZmlnfCxjbGFzc3xfREVERUNZLHN0eWxlfCI7DQogICAgRmlsbEF0dHNEZWZhdWx0KCRjdGFnLT5DQXR0cmlidXRlLT5JdGVtcywkYXR0bGlzdCk7DQogICAgZXh0cmFjdCgkY3RhZy0+Q0F0dHJpYnV0ZS0+SXRlbXMsIEVYVFJfU0tJUCk7DQogICAgDQogICAgJHJldmFsPSIiOw0KICAgIA0KICAgIGlmKCAhJGRzcWwtPklzVGFibGUoIiNAX19wbHVzX2NoYW5neWFuX3NldHRpbmciKSApIHJldHVybiAn5rKh5a6J6KOF55WF6KiA5qih5Z2XJzsNCiAgICANCiAgICAkY2xpZW50X2lkPWNoYW5neWFuX2dldF9zZXR0aW5nKCdhcHBpZCcpOw0KICAgIGlmKGVtcHR5KCRjbGllbnRfaWQpKSByZXR1cm4gJ+WwmuacquazqOWGjOeVheiogOW4kOWPt++8jOivt+WIsOWQjuWPsOazqOWGjCc7DQogICAgDQogICAgaWYoJHR5cGU9PSdjb2RlJyBPUiAkdHlwZT09J2NvZGUyJykNCiAgICB7DQogICAgICAgICRyZXZhbC49IjxkaXYgY2xhc3M9J3skY2xhc3N9JyBzdHlsZT0neyRzdHlsZX0nPiI7DQogICAgICAgICRwcmVmaXggPSAnY2hhbmd5YW4nOw0KICAgICAgICAka2V5ID0gJ2NvZGUnOw0KICAgICAgICAkcm93ID0gR2V0Q2FjaGUoJHByZWZpeCwgJGtleSk7DQoNCiAgICAgICAgaWYoIWlzX2FycmF5KCRyb3cpKQ0KICAgICAgICB7DQogICAgICAgICAgICAkYXBwaWQ9Y2hhbmd5YW5fZ2V0X3NldHRpbmcoJ2FwcGlkJyk7DQogICAgICAgICAgICAkdXNlcj1jaGFuZ3lhbl9nZXRfc2V0dGluZygndXNlcicpOw0KICAgICAgICAgICAgJHNpZ249Y2hhbmd5YW5fZ2VuX3NpZ24oJHVzZXIpOw0KICAgICAgICAgICAgJHJlc3VsdCA9IGNoYW5neWFuX2dldGNvZGUoQ0hBTkdZQU5fQ0xJRU5UX0lELCAkdXNlciwgZmFsc2UsICRzaWduLCAkYXBwaWQpOw0KICAgICAgICAgICAgaWYgKCAkcmVzdWx0WydzdGF0dXMnXSA9PSAxKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIHJldHVybiAn5pyq6I635Y+W55WF6KiA5Luj56CB77yM6ZSZ6K+v5raI5oGv77yaJy4kcmVzdWx0Wydtc2cnXTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgICRyb3dbJ3JldmFsJ10gPSBkZWRlX2h0bWxzcGVjaWFsY2hhcnMoJHJlc3VsdFsnY29kZSddKTsNCiAgICAgICAgICAgIFNldENhY2hlKCRwcmVmaXgsICRrZXksICRyb3csIDYwKjYwKjEpOw0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICBpZighZW1wdHkoJGNvbmZpZykpDQogICAgICAgIHsNCiAgICAgICAgICAgICRjb25maWdfYXJyID0gYXJyYXkoKTsNCiAgICAgICAgICAgICRjb25maWdzID0gZXhwbG9kZSgnLCcsICRjb25maWcpOw0KICAgICAgICAgICAgaWYoY291bnQoJGNvbmZpZ3MpPjApDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgZm9yZWFjaCgkY29uZmlncyBhcyAkYykgew0KICAgICAgICAgICAgICAgICAgICAkaXRlbSA9IGV4cGxvZGUoJzonLCAkYyk7DQogICAgICAgICAgICAgICAgICAgICRjb25maWdfYXJyWyRpdGVtWzBdXSA9ICRpdGVtWzFdOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgICRjb25maWdfc3RyID0ganNvbl9lbmNvZGUoJGNvbmZpZ19hcnIpOw0KICAgICAgICAgICAgJHJldmFsIC49IDw8PEVPVA0KPHNjcmlwdD4NCiAgICB2YXJfY29uZmlnPXskY29uZmlnX3N0cn07DQo8L3NjcmlwdD4NCkVPVDsNCiAgICAgICAgfQ0KICAgICAgICAkcmV2YWwgLj0gaHRtbHNwZWNpYWxjaGFyc19kZWNvZGUoJHJvd1sncmV2YWwnXSk7DQogICAgICAgICRyZXZhbD1zdHJfcmVwbGFjZSgiaWQ9J1NPSFVDUyciLCAiaWQ9J1NPSFVDUycgc2lkPSd7JHJlZk9iai0+QXJjSUR9JyIsICRyZXZhbCk7DQogICAgICAgIGlmKCR0eXBlPT0nY29kZTInKSAkcmV2YWw9cHJlZ19yZXBsYWNlKCIjd2luZG93LlNDU19OT19JRlJBTUVbIF0/PVsgXT90cnVlOyNpIiwgIiIsICRyZXZhbCk7DQogICAgICAgICRyZXZhbD1zdHJfcmVwbGFjZSgiPHNjcmlwdD4iLCAiPC9kaXY+PHNjcmlwdD4iLCAkcmV2YWwpOw0KICAgIH0gZWxzZWlmKCR0eXBlPT0nY291bnQnKSB7DQogICAgICAgIGlmKCEkR0xPQkFMU1snY2hhbmd5YW5fY291bnRfanMnXSkgJHJldmFsLj0iPHNjcmlwdCB0eXBlPVwidGV4dC9qYXZhc2NyaXB0XCIgc3JjPVwiaHR0cDovL2Fzc2V0cy5jaGFuZ3lhbi5zb2h1LmNvbS91cGxvYWQvcGx1Z2lucy9wbHVnaW5zLmNvdW50LmpzXCI+PC9zY3JpcHQ+IjsNCiAgICAgICAgJHJldmFsLj0iPGEgaHJlZj1cIiNTT0hVQ1NcIiBpZD1cImNoYW5neWFuX2NvdW50X3VuaXRcIj48L2E+IjsNCiAgICAgICAgJEdMT0JBTFNbJ2NoYW5neWFuX2NvdW50X2pzJ10gPSBUUlVFOw0KICAgIH0NCiAgICANCiAgICByZXR1cm4gJHJldmFsOw0KfQ0K
  46. </file>
  47. <file type='file' name='changyan_main.php'>
  48. PD9waHAKLy9Ac2Vzc2lvbl9zdGFydCgpOwpyZXF1aXJlX29uY2UoZGlybmFtZShfX0ZJTEVfXykuIi9jb25maWcucGhwIik7CnJlcXVpcmVfb25jZShERURFSU5DLiIvb3h3aW5kb3cuY2xhc3MucGhwIik7CgpoZWxwZXIoJ2NoYW5neWFuJyk7CgppZihlbXB0eSgkZG9wb3N0KSkgJGRvcG9zdCA9ICcnOwppZihlbXB0eSgkYWN0aW9uKSkgJGFjdGlvbiA9ICcnOwppZihlbXB0eSgkbm9jaGVjaykpICRub2NoZWNrID0gJyc7CmlmKGVtcHR5KCRmb3J3YXJkKSkgJGZvcndhcmQgPSAnJzsKCiRfU0VTU0lPTlsnY2hhbmd5YW4nXSA9ICFlbXB0eSgkX1NFU1NJT05bJ2NoYW5neWFuJ10pPyAkX1NFU1NJT05bJ2NoYW5neWFuJ10gOiAwOwokX1NFU1NJT05bJ3VzZXInXSA9ICFlbXB0eSgkX1NFU1NJT05bJ3VzZXInXSk/ICRfU0VTU0lPTlsndXNlciddIDogJyc7CgokYXBwaWQ9JGNsaWVudF9pZD1jaGFuZ3lhbl9nZXRfc2V0dGluZygnYXBwaWQnKTsKCmlmICgkZG9wb3N0PT0nYmxhbmsnKSB7CiAgICBleGl0Owp9CgppZiAoJGNmZ19mZWVkYmFja19mb3JiaWQ9PSdOJyBBTkQgIWVtcHR5KCRjbGllbnRfaWQpKSB7CiAgICAkZHNxbC0+RXhlY3V0ZU5vbmVRdWVyeSgiVVBEQVRFIGAjQF9fc3lzY29uZmlnYCBTRVQgYHZhbHVlYD0nWScgV0hFUkUgYHZhcm5hbWVgPSdjZmdfZmVlZGJhY2tfZm9yYmlkJzsiKTsKICAgIGNoYW5neWFuX1JlV3JpdGVDb25maWcoKTsKICAgIFNob3dNc2coIuW3sue7j+emgeeUqERlZGVDTVPpu5jorqTor4TorrrvvIzlvIDlkK/nlYXoqIDor4TorrrvvIEiLCI/Iik7CiAgICBleGl0KCk7Cn0KCi8vYXV0byB1cGRhdGUKJHZlcnNpb249Y2hhbmd5YW5fZ2V0X3NldHRpbmcoJ3ZlcnNpb24nKTsKCmlmKGVtcHR5KCRfU0VTU0lPTlsndXNlciddKSBBTkQgZW1wdHkoJG5vY2hlY2spKQp7CiAgICAkZGJfdXNlciA9IGNoYW5neWFuX2dldF9zZXR0aW5nKCd1c2VyJyk7CiAgICAkZGJfcHdkPWNoYW5neWFuX21jaFN0ckNvZGUoY2hhbmd5YW5fZ2V0X3NldHRpbmcoJ3B3ZCcpLCAnREVDT0RFJyk7CgogICAgaWYoIWVtcHR5KCRkYl91c2VyKSBBTkQgIWVtcHR5KCRkYl9wd2QpKQogICAgewogICAgICAgIGhlYWRlcignTG9jYXRpb246P2RvcG9zdD1xdWlja19sb2dpbiZub2NoZWNrPXllcyZmb3J3YXJkPScuJGZvcndhcmQpOwogICAgICAgIGV4aXQoKTsKICAgIH0gZWxzZWlmIChlbXB0eSgkZGJfdXNlcikgQU5EIGVtcHR5KCRkYl9wd2QpKSB7CiAgICAgICAgU2hvd01zZygi57O757uf5pyq57uR5a6a55WF6KiA6LSm5Y+377yM5oiR5Lus5bCG6Ieq5Yqo5Li65oKo5YiG6YWN5LiA5Liq5Yid5aeL6LSm5Y+377yM6K+36ICQ5b+D562J5b6F4oCm4oCmIiwiP2RvcG9zdD1hdXRvcmVnJm5vY2hlY2s9eWVzIik7CiAgICAgICAgZXhpdCgpOwogICAgICAgIC8vaGVhZGVyKCdMb2NhdGlvbjo/ZG9wb3N0PWF1dG9yZWcmbm9jaGVjaz15ZXMnKTsKICAgICAgICAvL2V4aXQoKTsKICAgIH0gZWxzZSB7CiAgICAgICAgY2hhbmd5YW5fc2V0X3NldHRpbmcoJ3B3ZCcsICcnKTsKICAgIH0KfQoKaWYgKGVtcHR5KCR2ZXJzaW9uKSkgJHZlcnNpb24gPSAnMC4wLjEnOwppZiAodmVyc2lvbl9jb21wYXJlKCR2ZXJzaW9uLCBDSEFOR1lBTl9WRVIsICc8JykpIHsKICAgICRteXNxbF92ZXJzaW9uID0gJGRzcWwtPkdldFZlcnNpb24oVFJVRSk7CiAgICAKICAgIGZvcmVhY2ggKCR1cGRhdGVfc3FscyBhcyAkdmVyID0+ICRzcWxzKSB7CiAgICAgICAgaWYgKHZlcnNpb25fY29tcGFyZSgkdmVyLCAkdmVyc2lvbiwnPCcpKSB7CiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KICAgICAgICBmb3JlYWNoICgkc3FscyBhcyAkc3FsKSB7CiAgICAgICAgICAgICRzcWwgPSBwcmVnX3JlcGxhY2UoIiNFTkdJTkU9TXlJU0FNI2kiLCAnVFlQRT1NeUlTQU0nLCAkc3FsKTsKICAgICAgICAgICAgJHNxbDQxdG1wID0gJ0VOR0lORT1NeUlTQU0gREVGQVVMVCBDSEFSU0VUPScuJGNmZ19kYl9sYW5ndWFnZTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmKCRteXNxbF92ZXJzaW9uID49IDQuMSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgJHNxbCA9IHByZWdfcmVwbGFjZSgiI1RZUEU9TXlJU0FNI2kiLCAkc3FsNDF0bXAsICRzcWwpOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRkc3FsLT5FeGVjdXRlTm9uZVF1ZXJ5KCRzcWwpOwogICAgICAgIH0KICAgICAgICBjaGFuZ3lhbl9zZXRfc2V0dGluZygndmVyc2lvbicsICR2ZXIpOwogICAgICAgICR2ZXJzaW9uPWNoYW5neWFuX2dldF9zZXR0aW5nKCd2ZXJzaW9uJyk7CiAgICB9CiAgICAkaXN2X2FwcF9rZXkgPSBjaGFuZ3lhbl9nZXRfaXN2X2FwcF9rZXkoKTsKfQoKaWYoJGRvcG9zdD09J3JlZycpCnsKICAgICRtc2cgPSA8PDxFT1QKPHRhYmxlIHdpZHRoPSI5OCUiIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjEiIGNlbGxwYWRkaW5nPSIxIj4KICA8dGJvZHk+CiAgICA8dHI+CiAgICAgIDx0ZCBoZWlnaHQ9IjMwIiBjb2xzcGFuPSIyIiBzdHlsZT0iY29sb3I6Izk5OSI+PHN0cm9uZz48YSBocmVmPSJodHRwOi8vY2hhbmd5YW4ua3VhaXpoYW4uY29tLz9mcm9tZGVkZWNtcyIgdGFyZ2V0PSJfYmxhbmsiIHN0eWxlPSJjb2xvcjpibHVlIj7nlYXoqIA8L2E+PC9zdHJvbmc+5piv5LiA5Liq566A5Y2V6ICM5by65aSn55qE56S+5Lya5YyW6K+E6K665Y+K6IGa5ZCI5bmz5Y+w44CC55So5oi35Y+v5Lul55u05o6l55So6Ieq5bex55qE56S+5Lya5YyW572R57uc6LSm5oi35Zyo56ys5LiJ5pa5572R56uZ5Y+R6KGo6K+E6K6677yM5bm25LiU5LiA6ZSu6K+E6K665ZCM5q2l6Iez56S+5Lqk572R57uc5bCG572R56uZ5YaF5a655ZKM6Ieq5bex55qE6K+E6K665YiG5Lqr57uZ5aW95Y+L44CC5aKe5Yqg56ys5LiJ5pa5572R56uZ55So5oi35rS76LeD5bqm77yM6LCD5Yqo5aW95Y+L5Y+C5LiO6K+E6K6677yM5biu5Yqp572R56uZ5a6e546w56S+5Lya5YyW572R57uc5LyY5YyW77yM5pyJ5pWI5o+Q5Y2H572R56uZ56S+5Lya5YyW5rWB6YeP77yBPC90ZD4KICAgIDwvdHI+CiAgICA8dHI+CiAgICAgIDx0ZCBoZWlnaHQ9IjMwIiBjb2xzcGFuPSIyIiBzdHlsZT0iY29sb3I6Izk5OSI+PC90ZD4KICAgIDwvdHI+CiAgICA8dHI+CiAgICAgIDx0ZCB3aWR0aD0iMTYlIiBoZWlnaHQ9IjMwIj7pgq7nrrHvvJo8L3RkPgogICAgICA8dGQgd2lkdGg9Ijg0JSIgc3R5bGU9InRleHQtYWxpZ246bGVmdDsiPjxpbnB1dCBuYW1lPSJ1c2VyIiB0eXBlPSJ0ZXh0IiBpZD0idXNlciIgc2l6ZT0iMTYiIHN0eWxlPSJ3aWR0aDoyMDBweCIgLz48L3RkPgogICAgPC90cj4KICAgIDx0cj4KICAgICAgPHRkIGhlaWdodD0iMzAiPuWvhuegge+8mjwvdGQ+CiAgICAgIDx0ZCBzdHlsZT0idGV4dC1hbGlnbjpsZWZ0OyI+PGlucHV0IG5hbWU9InB3ZCIgdHlwZT0icGFzc3dvcmQiIGlkPSJwd2QiIHNpemU9IjE2IiBzdHlsZT0id2lkdGg6MjAwcHgiPgogICAgICAgIDxzcGFuIHN0eWxlPSJjb2xvcjojOTk5Ij4mbmJzcDvor7fovpPlhaXmlbDlrZfjgIHlrZfmr43miJbluLjnlKjnrKblj7c8L3NwYW4+PC90ZD4KICAgIDwvdHI+CiAgICA8dHI+CiAgICAgIDx0ZCBoZWlnaHQ9IjMwIj7noa7orqTlr4bnoIHvvJo8L3RkPgogICAgICA8dGQgc3R5bGU9InRleHQtYWxpZ246bGVmdDsiPjxpbnB1dCBuYW1lPSJyZXB3ZCIgdHlwZT0icGFzc3dvcmQiIGlkPSJyZXB3ZCIgc2l6ZT0iMTYiIHN0eWxlPSJ3aWR0aDoyMDBweCI+CiAgICAgICAgJm5ic3A7PC90ZD4KICAgIDwvdHI+CiAgICA8dHI+CiAgICAgIDx0ZCB3aWR0aD0iMTYlIiBoZWlnaHQ9IjMwIj7nvZHnq5nlkI3np7DvvJo8L3RkPgogICAgICA8dGQgd2lkdGg9Ijg0JSIgc3R5bGU9InRleHQtYWxpZ246bGVmdDsiPjxpbnB1dCBuYW1lPSJpc3ZfbmFtZSIgdHlwZT0idGV4dCIgaWQ9Imlzdl9uYW1lIiBzaXplPSIxNiIgc3R5bGU9IndpZHRoOjIwMHB4IiB2YWx1ZT0ieyRjZmdfd2VibmFtZX0iIC8+PHNwYW4gc3R5bGU9ImNvbG9yOiM5OTkiPiZuYnNwOyDkuLrmlrnkvr/mgqjnrqHnkIbnq5nngrnor4TorrrvvIzlu7rorq7mm7TmlLnnq5nngrnlkI3np7A8L3NwYW4+PC90ZD4KICAgIDwvdHI+CiAgICA8dHI+CiAgICAgIDx0ZCB3aWR0aD0iMTYlIiBoZWlnaHQ9IjMwIj7nvZHnq5nlnLDlnYDvvJo8L3RkPgogICAgICA8dGQgd2lkdGg9Ijg0JSIgc3R5bGU9InRleHQtYWxpZ246bGVmdDsiPjxpbnB1dCBuYW1lPSJ1cmwiIHR5cGU9InRleHQiIGlkPSJ1cmwiIHNpemU9IjE2IiBzdHlsZT0id2lkdGg6MjAwcHgiIHZhbHVlPSJ7JGNmZ19iYXNlaG9zdH0iIC8+PHNwYW4gc3R5bGU9ImNvbG9yOiM5OTkiPiZuYnNwOyDkvovlpoLvvJpodHRwOi8vd3d3LmRlZGVjbXMuY29tPC9zcGFuPjwvdGQ+CiAgICA8L3RyPgogIDwvdGJvZHk+CjwvdGFibGU+CkVPVDsKCiAgICAkd2ludGl0bGUgPSAn5rOo5YaM55WF6KiA5biQ5Y+377yaJzsKICAgICR3ZWNvbWVfaW5mbyA9ICc8YSBocmVmPSI/Ij7nlYXoqIDor4TorrrmqKHlnZc8L2E+IOOAi+azqOWGjOW4kOWPtyc7CiAgICAkd2luID0gbmV3IE94V2luZG93KCk7CiAgICAkd2luLT5Jbml0KCc/JywnanMvYmxhbmsuanMnLCdQT1NUJyk7CiAgICAkd2luLT5BZGRIaWRkZW4oJ2RvcG9zdCcsJ2RvcmVnJyk7CiAgICAkd2luLT5BZGRIaWRkZW4oJ25vY2hlY2snLCd5ZXMnKTsKICAgICR3aW4tPkFkZFRpdGxlKCR3aW50aXRsZSk7CiAgICAkd2luLT5BZGRNc2dJdGVtKCRtc2cpOwogICAgJHdpbmZvcm0gPSAkd2luLT5HZXRXaW5kb3coJ29rJywgJyZuYnNwOycsIGZhbHNlKTsKICAgICR3aW4tPkRpc3BsYXkoKTsKCn0gZWxzZWlmICgkZG9wb3N0PT0nZG9yZWcnKSB7CiAgICAkdXNlciA9IGVtcHR5KCR1c2VyKT8gJycgOiAkdXNlcjsKICAgICRwd2QgPSBlbXB0eSgkcHdkKT8gJycgOiAkcHdkOwogICAgJHJlcHdkID0gZW1wdHkoJHJlcHdkKT8gJycgOiAkcmVwd2Q7CiAgICAkaXN2X25hbWUgPSBlbXB0eSgkaXN2X25hbWUpPyAnJyA6ICRpc3ZfbmFtZTsKICAgICR1cmwgPSBlbXB0eSgkdXJsKT8gJycgOiAkdXJsOwogICAgCiAgICBpZighcHJlZ19tYXRjaCgiI15odHRwOlwvXC9bQS1aYS16MC05XStcLltBLVphLXowLTldK1tcLz1cPyVcLSZffmBAW1xdXCc6KyFdKihbXjw+XCJdKSokIyIsJHVybCkpCiAgICB7CiAgICAgICAgU2hvd01zZygi6K+35aGr5YaZ5q2j56Gu55qE572R5Z2A5qC85byPIiwtMSk7CiAgICAgICAgZXhpdCgpOwogICAgfQogICAgCiAgICBpZihlbXB0eSgkaXN2X25hbWUpIE9SIGVtcHR5KCR1cmwpKQogICAgewogICAgICAgIFNob3dNc2coIuaCqOmcgOimgeWhq+WGmeato+ehrueahOermeeCueS/oeaBr++8jOivt+mHjeaWsOWhq+WGmSIsLTEpOwogICAgICAgIGV4aXQoKTsKICAgIH0KICAgIGlmKGVtcHR5KCR1c2VyKSBPUiBlbXB0eSgkcHdkKSBPUiBlbXB0eSgkcmVwd2QpKQogICAgewogICAgICAgIFNob3dNc2coIuaCqOmcgOimgeWhq+WGmUUtbWFpbOWSjOWvhuegge+8jOivt+mHjeaWsOWhq+WGmSIsLTEpOwogICAgICAgIGV4aXQoKTsKICAgIH0KICAgIGlmKCFDaGVja0VtYWlsKCR1c2VyKSkKICAgIHsKICAgICAgICBTaG93TXNnKCLmgqjnmoRFLW1haWzmoLzlvI/plJnor6/vvIzor7fph43mlrDloavlhpkiLC0xKTsKICAgICAgICBleGl0KCk7CiAgICB9CiAgICBpZigkcHdkICE9ICRyZXB3ZCkKICAgIHsKICAgICAgICBTaG93TXNnKCLloavlhpnkuKTmrKHlr4bnoIHkuI3lkIzvvIzor7fov5Tlm57ph43mlrDovpPlhaXvvIEiLC0xKTsKICAgICAgICBleGl0KCk7CiAgICB9CiAgICAkc2lnbj1jaGFuZ3lhbl9nZW5fc2lnbigkdXNlcik7CiAgICAkcGFyYW1zQXJyPWFycmF5KAogICAgICAgICdjbGllbnRfaWQnPT5DSEFOR1lBTl9DTElFTlRfSUQsIAogICAgICAgICd1c2VyJz0+Y2hhbmd5YW5fYXV0b0NoYXJzZXQoJHVzZXIpLCAKICAgICAgICAncGFzc3dvcmQnPT4kcHdkLCAKICAgICAgICAnaXN2X25hbWUnPT5jaGFuZ3lhbl9hdXRvQ2hhcnNldCgkaXN2X25hbWUpLCAKICAgICAgICAndXJsJz0+JHVybCwgCiAgICAgICAgJ3NpZ24nPT4kc2lnbik7CiAgICAkcnM9Y2hhbmd5YW5faHR0cF9zZW5kKENIQU5HWUFOX0FQSV9SRUcsMCwkcGFyYW1zQXJyKTsKICAgICRyZXN1bHQ9anNvbl9kZWNvZGUoJHJzLFRSVUUpOwogICAgJGVycm9yaW5mb1snYXBwaWQgbm90IGV4aXN0J109J2NsaWVudF9pZOS4jeWtmOWcqCc7CiAgICAkZXJyb3JpbmZvWydzaWduIGVycm9yJ109J+etvuWQjemqjOivgeWksei0pSc7CiAgICAkZXJyb3JpbmZvWyd1c2VyIG5hbWUgZXhpc3QnXT0n5rOo5YaM55So5oi35bey57uP5a2Y5ZyoJzsKICAgIGlmKCRyZXN1bHRbJ3N0YXR1cyddPT0wKQogICAgewogICAgICAgIC8vIOS/neWtmGFwcGlkLGlk5L+h5oGvCiAgICAgICAgY2hhbmd5YW5fc2V0X3NldHRpbmcoJ3VzZXInLCAkdXNlcik7CiAgICAgICAgY2hhbmd5YW5fc2V0X3NldHRpbmcoJ2FwcGlkJywgJHJlc3VsdFsnYXBwaWQnXSk7CiAgICAgICAgY2hhbmd5YW5fc2V0X3NldHRpbmcoJ2lkJywgJHJlc3VsdFsnaWQnXSk7CiAgICAgICAgY2hhbmd5YW5fc2V0X3NldHRpbmcoJ2lzdl9pZCcsICRyZXN1bHRbJ2lzdl9pZCddKTsKICAgICAgICBjaGFuZ3lhbl9jbGVhcmNhY2hlKCk7CiAgICAgICAgU2hvd01zZygi5oKo5bey57uP5oiQ5Yqf5rOo5YaM77yM546w5Zyo6L+b6KGM55m75b2V77yBIiwnPycpOwogICAgICAgIGV4aXQoKTsKICAgIH0gZWxzZSB7CiAgICAgICAgU2hvd01zZygi5peg5rOV5q2j5bi45rOo5YaM77yM6ZSZ6K+v5L+h5oGv77yaIi4kZXJyb3JpbmZvWyRyZXN1bHRbJ21zZyddXSwgLTEpOwogICAgICAgIGV4aXQoKTsKICAgIH0KfSBlbHNlaWYgKCRkb3Bvc3Q9PSdhdXRvcmVnJykgewogICAgJHN0ZXAgPSBlbXB0eSgkc3RlcCk/IDAgOiAkc3RlcDsKICAgICRkYl91c2VyID0gY2hhbmd5YW5fZ2V0X3NldHRpbmcoJ3VzZXInKTsKICAgIGlmKCFlbXB0eSgkZGJfdXNlcikpIGRpZSgnRXJyb3I6VXNlciBuYW1lIGlzIG5vdCBlbXB0eSEnKTsKICAgICRjaGFycz0nYWJjZGVmZ2hpZ2tsbW5vcHFyc3R1dnd4d3lBQkNERUZHSElHS0xNTk9QUVJTVFVWV1hXWTAxMjM0NTY3ODknOwogICAgJHNpZ249Y2hhbmd5YW5fZ2VuX3NpZ24oQ0hBTkdZQU5fQ0xJRU5UX0lEKTsKICAgICR1cmwgPSAkX1NFUlZFUlsnU0VSVkVSX05BTUUnXTsKICAgICRpc3ZfbmFtZSA9IGNuX3N1YnN0cigkY2ZnX3dlYm5hbWUsMjApOwogICAgJHBhcmFtc0Fycj1hcnJheSgKICAgICAgICAnY2xpZW50X2lkJz0+Q0hBTkdZQU5fQ0xJRU5UX0lELCAKICAgICAgICAnaXN2X25hbWUnPT5jaGFuZ3lhbl9hdXRvQ2hhcnNldCgkaXN2X25hbWUpLCAKICAgICAgICAndXJsJz0+J2h0dHA6Ly8nLiR1cmwsIAogICAgICAgICdzaWduJz0+JHNpZ24pOwoKICAgICRycz1jaGFuZ3lhbl9odHRwX3NlbmQoQ0hBTkdZQU5fQVBJX0FVVE9SRUcsMCwkcGFyYW1zQXJyKTsKICAgIC8vdmFyX2R1bXAoJHJzKTtleGl0OwogICAgJHJlc3VsdD1qc29uX2RlY29kZSgkcnMsVFJVRSk7CiAgICBpZigkcmVzdWx0WydzdGF0dXMnXT09MCkKICAgIHsKICAgICAgICAvLyDkv53lrZhhcHBpZCxpZOS/oeaBrwogICAgICAgIGNoYW5neWFuX3NldF9zZXR0aW5nKCd1c2VyJywgJHJlc3VsdFsndXNlciddKTsKICAgICAgICBjaGFuZ3lhbl9zZXRfc2V0dGluZygnYXBwaWQnLCAkcmVzdWx0WydhcHBpZCddKTsKICAgICAgICBjaGFuZ3lhbl9zZXRfc2V0dGluZygnaWQnLCAkcmVzdWx0WydpZCddKTsKICAgICAgICBjaGFuZ3lhbl9zZXRfc2V0dGluZygnaXN2X2FwcF9rZXknLCAkcmVzdWx0Wydpc3ZfYXBwX2tleSddKTsKICAgICAgICBjaGFuZ3lhbl9zZXRfc2V0dGluZygnaXN2X2lkJywgJHJlc3VsdFsnaXN2X2lkJ10pOwogICAgICAgIGNoYW5neWFuX2NsZWFyY2FjaGUoKTsKICAgICAgICAkcGFzc3dkID0gY2hhbmd5YW5fbWNoU3RyQ29kZSgkcmVzdWx0WydwYXNzd2QnXSwgJ0VOQ09ERScpOwogICAgICAgIGNoYW5neWFuX3NldF9zZXR0aW5nKCdwd2QnLCAkcGFzc3dkKTsKICAgICAgICBoZWFkZXIoJ0xvY2F0aW9uOj8nKTsKICAgICAgICBleGl0KCk7CiAgICB9IGVsc2UgewogICAgICAgIGlmKCRzdGVwID4gMTApCiAgICAgICAgewogICAgICAgICAgICBTaG93TXNnKCLml6Dms5Xoh6rliqjliIbphY3otKblj7fvvIzor7fmiYvliqjov5vooYzms6jlhozvvIEiLCc/ZG9wb3N0PXJlZyZub2NoZWNrPXllcycpOwogICAgICAgICAgICBleGl0KCk7CiAgICAgICAgfQogICAgICAgICRzdGVwKys7CiAgICAgICAgaGVhZGVyKCdMb2NhdGlvbjo/ZG9wb3N0PWF1dG9yZWcmbm9jaGVjaz15ZXMmaT0nLiRzdGVwKTsKICAgICAgICBleGl0KCk7CiAgICB9CiAgICAKfSBlbHNlaWYgKCRkb3Bvc3Q9PSdiaW5kJykgewogICAgJHR5cGUgPSBlbXB0eSgkdHlwZSk/ICdyZWcnIDogJHR5cGU7CiAgICBpZigkYWN0aW9uPT0nZG8nKQogICAgewogICAgICAgIGlmKCR0eXBlIT0ncmVnJykgJHJlcHdkPSRwd2Q7CiAgICAgICAgaWYoZW1wdHkoJHVzZXIpIE9SIGVtcHR5KCRwd2QpIE9SIGVtcHR5KCRyZXB3ZCkpCiAgICAgICAgewogICAgICAgICAgICBTaG93TXNnKCLmgqjpnIDopoHloavlhplFLW1haWzlkozlr4bnoIHvvIzor7fph43mlrDloavlhpkiLC0xKTsKICAgICAgICAgICAgZXhpdCgpOwogICAgICAgIH0KICAgICAgICBpZighQ2hlY2tFbWFpbCgkdXNlcikpCiAgICAgICAgewogICAgICAgICAgICBTaG93TXNnKCLmgqjnmoRFLW1haWzmoLzlvI/plJnor6/vvIzor7fph43mlrDloavlhpkiLC0xKTsKICAgICAgICAgICAgZXhpdCgpOwogICAgICAgIH0KICAgICAgICBpZigkcHdkICE9ICRyZXB3ZCkKICAgICAgICB7CiAgICAgICAgICAgIFNob3dNc2coIuWhq+WGmeS4pOasoeWvhueggeS4jeWQjO+8jOivt+i/lOWbnumHjeaWsOi+k+WFpe+8gSIsLTEpOwogICAgICAgICAgICBleGl0KCk7CiAgICAgICAgfQogICAgICAgIGlmKCR0eXBlPT0ncmVnJykKICAgICAgICB7CiAgICAgICAgICAgICRlcnJvckluZm89Jyc7CiAgICAgICAgICAgIGlmKGNoYW5neWFuX2JpbmRfYWNjb3VudCgkdXNlciwgJHB3ZCwgJGVycm9ySW5mbykpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFNob3dNc2coIue7keWumuaIkOWKn++8jOS4i+mdoui/m+ihjOi0puWPt+WIh+aNouKApuKApu+8gSIsIj9kb3Bvc3Q9cXVpY2tfbG9naW4mbm9jaGVjaz15ZXMiKTsKICAgICAgICAgICAgICAgIGV4aXQoKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIFNob3dNc2coIui0puWPt+acque7keWumuaIkOWKn++8jOivt+ajgOafpeaCqOi+k+WFpeeahOS/oeaBr+aYr+WQpuacieivr++8mnskZXJyb3JJbmZvfe+8gSIsLTEpOwogICAgICAgICAgICAgICAgZXhpdCgpOwogICAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgLy92YXJfZHVtcCgiTG9jYXRpb246P2RvcG9zdD1sb2dpbiZ1c2VyPXskdXNlcn0mcHdkPXskcHdkfSIpO2V4aXQ7CiAgICAgICAgICAgIGhlYWRlcigiTG9jYXRpb246P2RvcG9zdD1sb2dpbiZ1c2VyPXskdXNlcn0mcHdkPXskcHdkfSZjbGVhcj15ZXMiKTsKICAgICAgICAgICAgZXhpdCgpOwogICAgICAgIH0KICAgICAgICBleGl0KCk7CiAgICB9CiAgICBpZigkdHlwZT09J3JlZycpCiAgICB7CiAgICAgICAgJHRhYmxlID0gPDw8RU9UCiAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgPHRkIGhlaWdodD0iMzAiPue7keWumuexu+Wei++8mjwvdGQ+CiAgICAgICAgICAgIDx0ZCBzdHlsZT0idGV4dC1hbGlnbjpsZWZ0OyI+PGlucHV0IG5hbWU9InJhZGlvIiB0eXBlPSJyYWRpbyIgaWQ9Im5ld3JlZyIgdmFsdWU9Im5ld3JlZyIgb25jbGljaz0id2luZG93LmxvY2F0aW9uLmhyZWY9Jz9kb3Bvc3Q9YmluZCZ0eXBlPXJlZyciIGNoZWNrZWQ+CiAgICAgICAgICAgIDxsYWJlbCBmb3I9Im5ld3JlZyI+5paw5Yib5bu66LSm5Y+3PC9sYWJlbD4KICAgICAgICAgICAgPGlucHV0IHR5cGU9InJhZGlvIiBuYW1lPSJyYWRpbyIgaWQ9ImxvZ2luIiB2YWx1ZT0ibG9naW4iIG9uY2xpY2s9IndpbmRvdy5sb2NhdGlvbi5ocmVmPSc/ZG9wb3N0PWJpbmQmdHlwZT1sb2dpbiciID4KICAgICAgICAgICAgIDxsYWJlbCBmb3I9ImxvZ2luIj7lt7Lnu4/mnInnlYXoqIDotKblj7c8L2xhYmVsPgogICAgICAgICAgICA8aW5wdXQgdHlwZT0naGlkZGVuJyBuYW1lPSd0eXBlJyB2YWx1ZT0ncmVnJz48L3RkPgogICAgICAgICAgPC90cj4KICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgIDx0ZCB3aWR0aD0iMTYlIiBoZWlnaHQ9IjMwIj7ns7vnu5/liIbphY3otKblj7fvvJo8L3RkPgogICAgICAgICAgICAgIDx0ZCB3aWR0aD0iODQlIiBzdHlsZT0idGV4dC1hbGlnbjpsZWZ0OyI+eyRfU0VTU0lPTlsndXNlciddfTwvdGQ+CiAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICA8dGQgd2lkdGg9IjE2JSIgaGVpZ2h0PSIzMCI+6YKu566x77yaPC90ZD4KICAgICAgICAgICAgICA8dGQgd2lkdGg9Ijg0JSIgc3R5bGU9InRleHQtYWxpZ246bGVmdDsiPjxpbnB1dCBuYW1lPSJ1c2VyIiB0eXBlPSJ0ZXh0IiBpZD0idXNlciIgc2l6ZT0iMTYiIHN0eWxlPSJ3aWR0aDoyMDBweCIgLz48L3RkPgogICAgICAgICAgICA8L3RyPgogICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgPHRkIGhlaWdodD0iMzAiPuWvhuegge+8mjwvdGQ+CiAgICAgICAgICAgICAgPHRkIHN0eWxlPSJ0ZXh0LWFsaWduOmxlZnQ7Ij48aW5wdXQgbmFtZT0icHdkIiB0eXBlPSJwYXNzd29yZCIgaWQ9InB3ZCIgc2l6ZT0iMTYiIHN0eWxlPSJ3aWR0aDoyMDBweCI+CiAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT0iY29sb3I6Izk5OSI+Jm5ic3A76K+36L6T5YWl5pWw5a2X44CB5a2X5q+N5oiW5bi455So56ym5Y+3PC9zcGFuPjwvdGQ+CiAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICA8dGQgaGVpZ2h0PSIzMCI+56Gu6K6k5a+G56CB77yaPC90ZD4KICAgICAgICAgICAgICA8dGQgc3R5bGU9InRleHQtYWxpZ246bGVmdDsiPjxpbnB1dCBuYW1lPSJyZXB3ZCIgdHlwZT0icGFzc3dvcmQiIGlkPSJyZXB3ZCIgc2l6ZT0iMTYiIHN0eWxlPSJ3aWR0aDoyMDBweCI+CiAgICAgICAgICAgICAgICAmbmJzcDs8L3RkPgogICAgICAgICAgICA8L3RyPgpFT1Q7CiAgICB9IGVsc2UgewogICAgICAgICR0YWJsZSA9IDw8PEVPVAogICAgICAgICAgICA8dHI+CiAgICAgICAgICAgIDx0ZCBoZWlnaHQ9IjMwIj7nu5HlrprnsbvlnovvvJo8L3RkPgogICAgICAgICAgICA8dGQgc3R5bGU9InRleHQtYWxpZ246bGVmdDsiPjxpbnB1dCBuYW1lPSJyYWRpbyIgdHlwZT0icmFkaW8iIGlkPSJuZXdyZWciIHZhbHVlPSJuZXdyZWciIG9uY2xpY2s9IndpbmRvdy5sb2NhdGlvbi5ocmVmPSc/ZG9wb3N0PWJpbmQmdHlwZT1yZWcnIj4KICAgICAgICAgICAgPGxhYmVsIGZvcj0ibmV3cmVnIj7mlrDliJvlu7rotKblj7c8L2xhYmVsPgogICAgICAgICAgICA8aW5wdXQgdHlwZT0icmFkaW8iIG5hbWU9InJhZGlvIiBpZD0ibG9naW4iIHZhbHVlPSJsb2dpbiIgb25jbGljaz0id2luZG93LmxvY2F0aW9uLmhyZWY9Jz9kb3Bvc3Q9YmluZCZ0eXBlPWxvZ2luJyIgY2hlY2tlZD4KICAgICAgICAgICAgPGxhYmVsIGZvcj0ibG9naW4iPuW3sue7j+acieeVheiogOi0puWPtzwvbGFiZWw+PGlucHV0IHR5cGU9J2hpZGRlbicgbmFtZT0ndHlwZScgdmFsdWU9J2xvZ2luJz48L3RkPgogICAgICAgICAgPC90cj4KICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgIDx0ZCB3aWR0aD0iMTYlIiBoZWlnaHQ9IjMwIj7ns7vnu5/liIbphY3otKblj7fvvJo8L3RkPgogICAgICAgICAgICAgIDx0ZCB3aWR0aD0iODQlIiBzdHlsZT0idGV4dC1hbGlnbjpsZWZ0OyI+eyRfU0VTU0lPTlsndXNlciddfTwvdGQ+CiAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICA8dGQgd2lkdGg9IjE2JSIgaGVpZ2h0PSIzMCI+6YKu566x77yaPC90ZD4KICAgICAgICAgICAgICA8dGQgd2lkdGg9Ijg0JSIgc3R5bGU9InRleHQtYWxpZ246bGVmdDsiPjxpbnB1dCBuYW1lPSJ1c2VyIiB0eXBlPSJ0ZXh0IiBpZD0idXNlciIgc2l6ZT0iMTYiIHN0eWxlPSJ3aWR0aDoyMDBweCIgLz48L3RkPgogICAgICAgICAgICA8L3RyPgogICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgPHRkIGhlaWdodD0iMzAiPuWvhuegge+8mjwvdGQ+CiAgICAgICAgICAgICAgPHRkIHN0eWxlPSJ0ZXh0LWFsaWduOmxlZnQ7Ij48aW5wdXQgbmFtZT0icHdkIiB0eXBlPSJwYXNzd29yZCIgaWQ9InB3ZCIgc2l6ZT0iMTYiIHN0eWxlPSJ3aWR0aDoyMDBweCI+CiAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT0iY29sb3I6Izk5OSI+Jm5ic3A76K+36L6T5YWl5pWw5a2X44CB5a2X5q+N5oiW5bi455So56ym5Y+3PC9zcGFuPjwvdGQ+CiAgICAgICAgICAgIDwvdHI+CkVPVDsKICAgIH0KICAgICRtc2cgPSA8PDxFT1QKPGh0bWw+CjxoZWFkPgo8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD17JGNmZ19zb2Z0X2xhbmd9Ij4KPHRpdGxlPue7keWumueVheiogOW4kOWPt++8mjwvdGl0bGU+CjxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9InskY2ZnX3BsdXNfZGlyfS9pbWcvYmFzZS5jc3MiPgo8L2hlYWQ+Cjxib2R5IGJhY2tncm91bmQ9J3skY2ZnX3BsdXNfZGlyfS9pbWcvYWxsYmcuZ2lmJyBsZWZ0bWFyZ2luPSI4IiB0b3BtYXJnaW49JzgnPgo8dGFibGUgd2lkdGg9Ijk4JSIgYm9yZGVyPSIwIiBhbGlnbj0iY2VudGVyIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiIGJnY29sb3I9IiNERkY5QUEiPgogIDx0cj4KICAgIDx0ZCBoZWlnaHQ9IjI4IiBzdHlsZT0iYm9yZGVyOjFweCBzb2xpZCAjREFEQURBIiBiYWNrZ3JvdW5kPSd7JGNmZ19wbHVzX2Rpcn0vaW1nL3diZy5naWYnPiZuYnNwOzxiPuKXhzxhIGhyZWY9Ij8iPueVheiogOivhOiuuuaooeWdlzwvYT4g44CL57uR5a6a5biQ5Y+3PC9iPjwvdGQ+CiAgPC90cj4KICA8dHI+CiAgCiAgPHRkIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjgwIiBzdHlsZT0icGFkZGluZy10b3A6NXB4IiBiZ2NvbG9yPScjZmZmZmZmJz4KICAKICA8c2NyaXB0IGxhbmd1YWdlPSdqYXZhc2NyaXB0Jz4KZnVuY3Rpb24gQ2hlY2tTdWJtaXQoKXsKCXJldHVybiB0cnVlOyAKfQo8L3NjcmlwdD4KICA8Zm9ybSBuYW1lPSdteWZvcm0nIG1ldGhvZD0nUE9TVCcgb25TdWJtaXQ9J3JldHVybiBDaGVja1N1Ym1pdCgpOycgYWN0aW9uPSc/Jz4KICAKICA8aW5wdXQgdHlwZT0naGlkZGVuJyBuYW1lPSdkb3Bvc3QnIHZhbHVlPSdiaW5kJz4KICA8aW5wdXQgdHlwZT0naGlkZGVuJyBuYW1lPSdhY3Rpb24nIHZhbHVlPSdkbyc+CiAgPGlucHV0IHR5cGU9J2hpZGRlbicgbmFtZT0nbm9jaGVjaycgdmFsdWU9J3llcyc+CiAgPHRhYmxlIHdpZHRoPScxMDAlJyAgYm9yZGVyPScwJyBjZWxscGFkZGluZz0nMycgY2VsbHNwYWNpbmc9JzEnIGJnY29sb3I9JyNEQURBREEnPgogICAgPHRyIGJnY29sb3I9JyNEQURBREEnPgogICAgICA8dGQgY29sc3Bhbj0nMicgYmFja2dyb3VuZD0neyRjZmdfcGx1c19kaXJ9L2ltZy93YmcuZ2lmJyBoZWlnaHQ9JzI2Jz48Zm9udCBjb2xvcj0nIzY2NjYwMCc+PGI+57uR5a6a55WF6KiA5biQ5Y+377yaPC9iPjwvZm9udD48L3RkPgogICAgPC90cj4KICAgIDx0ciBiZ2NvbG9yPScjRkZGRkZGJz4KICAgICAgPHRkIGNvbHNwYW49JzInICBoZWlnaHQ9JzEwMCc+PHRhYmxlIHdpZHRoPSI5OCUiIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjEiIGNlbGxwYWRkaW5nPSIxIj4KICAgICAgICAgIDx0Ym9keT4KICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgIDx0ZCBoZWlnaHQ9IjMwIiBjb2xzcGFuPSIyIiBzdHlsZT0iY29sb3I6Izk5OSI+PHN0cm9uZz48YSBocmVmPSJodHRwOi8vY2hhbmd5YW4ua3VhaXpoYW4uY29tLz9mcm9tZGVkZWNtcyIgdGFyZ2V0PSJfYmxhbmsiIHN0eWxlPSJjb2xvcjpibHVlIj7nlYXoqIA8L2E+PC9zdHJvbmc+5piv5LiA5Liq566A5Y2V6ICM5by65aSn55qE56S+5Lya5YyW6K+E6K665Y+K6IGa5ZCI5bmz5Y+w44CC55So5oi35Y+v5Lul55u05o6l55So6Ieq5bex55qE56S+5Lya5YyW572R57uc6LSm5oi35Zyo56ys5LiJ5pa5572R56uZ5Y+R6KGo6K+E6K6677yM5bm25LiU5LiA6ZSu6K+E6K665ZCM5q2l6Iez56S+5Lqk572R57uc5bCG572R56uZ5YaF5a655ZKM6Ieq5bex55qE6K+E6K665YiG5Lqr57uZ5aW95Y+L44CC5aKe5Yqg56ys5LiJ5pa5572R56uZ55So5oi35rS76LeD5bqm77yM6LCD5Yqo5aW95Y+L5Y+C5LiO6K+E6K6677yM5biu5Yqp572R56uZ5a6e546w56S+5Lya5YyW572R57uc5LyY5YyW77yM5pyJ5pWI5o+Q5Y2H572R56uZ56S+5Lya5YyW5rWB6YeP77yBPC90ZD4KICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgIDx0ZCBoZWlnaHQ9IjMwIiBjb2xzcGFuPSIyIiBzdHlsZT0iY29sb3I6Izk5OSI+PC90ZD4KICAgICAgICAgICAgPC90cj4KICAgICAgICAgICB7JHRhYmxlfQogICAgICAgICAgPC90Ym9keT4KICAgICAgICA8L3RhYmxlPjwvdGQ+CiAgICA8L3RyPgogICAgPHRyPgogICAgICA8dGQgY29sc3Bhbj0nMicgYmdjb2xvcj0nI0Y5RkNFRic+PHRhYmxlIHdpZHRoPScyNzAnIGJvcmRlcj0nMCcgY2VsbHBhZGRpbmc9JzAnIGNlbGxzcGFjaW5nPScwJz4KICAgICAgICAgIDx0ciBhbGlnbj0nY2VudGVyJyBoZWlnaHQ9JzI4Jz4KICAgICAgICAgICAgPHRkIHdpZHRoPSc5MCc+PGlucHV0IG5hbWU9J2ltYWdlRmllbGQxJyB0eXBlPSdpbWFnZScgY2xhc3M9J25wJyBzcmM9J3skY2ZnX3BsdXNfZGlyfS9pbWcvYnV0dG9uX29rLmdpZicgd2lkdGg9JzYwJyBoZWlnaHQ9JzIyJyBib3JkZXI9JzAnIC8+PC90ZD4KICAgICAgICAgICAgPHRkIHdpZHRoPSc5MCc+PGEgaHJlZj0nPyc+PGltZyBzcmM9Jy9wbHVzL2ltZy9idXR0b25fYmFjay5naWYnIHdpZHRoPSc2MCcgaGVpZ2h0PScyMicgYm9yZGVyPScwJyAvPjwvYT48L3RkPgogICAgICAgICAgICA8dGQgd2lkdGg9JzkwJz48L3RkPgogICAgICAgICAgPC90cj4KICAgICAgICA8L3RhYmxlPjwvdGQ+CiAgICA8L3RyPgogIDwvdGFibGU+CiAgPC90ZD4KICA8L3RyPgo8L3RhYmxlPgo8cCBhbGlnbj0iY2VudGVyIj4gPGJyPgogIDxicj4KPC9wPgo8L2JvZHk+CjwvaHRtbD4KRU9UOwogICAgZWNobyAkbXNnOwogICAgZXhpdCgpOwp9IGVsc2VpZiAoJGRvcG9zdD09J3F1aWNrX2xvZ2luJykKewogICAgJGNsZWFyID0gZW1wdHkoJGNsZWFyKT8gJycgOiAkY2xlYXI7CiAgICBpZihlbXB0eSgkZm9yd2FyZCkpICRmb3J3YXJkID0gJyc7CiAgICAkdXNlciA9IGNoYW5neWFuX2dldF9zZXR0aW5nKCd1c2VyJyk7CiAgICAkcHdkPWNoYW5neWFuX21jaFN0ckNvZGUoY2hhbmd5YW5fZ2V0X3NldHRpbmcoJ3B3ZCcpLCAnREVDT0RFJykgOwogICAgJHNpZ249Y2hhbmd5YW5fZ2VuX3NpZ24oJHVzZXIpOwogICAgJHBhcmFtc0Fycj1hcnJheSgKICAgICAgICAnY2xpZW50X2lkJz0+Q0hBTkdZQU5fQ0xJRU5UX0lELCAKICAgICAgICAndXNlcic9PiR1c2VyLCAKICAgICAgICAncGFzc3dvcmQnPT4kcHdkLCAKICAgICAgICAnc2lnbic9PiRzaWduKTsKICAgICRycz1jaGFuZ3lhbl9odHRwX3NlbmQoQ0hBTkdZQU5fQVBJX0xPR0lOLDAsJHBhcmFtc0Fycik7CiAgICAkcmVzdWx0PWpzb25fZGVjb2RlKCRycyxUUlVFKTsKICAgIGlmKCRyZXN1bHRbJ3N0YXR1cyddPT0wKQogICAgewogICAgICAgIGlmKCFlbXB0eSgkY2xlYXIpKSBjaGFuZ3lhbl9zZXRfc2V0dGluZygnaXN2X2lkJywgJycpOwogICAgICAgIC8vJGFwcGlkID0gY2hhbmd5YW5fZ2V0X3NldHRpbmcoJ2FwcGlkJyk7CiAgICAgICAgJGlzdl9pZCA9IGNoYW5neWFuX2dldF9zZXR0aW5nKCdpc3ZfaWQnKTsKICAgICAgICAkaXN2cyA9IGNoYW5neWFuX2dldF9pc3ZzKCk7CiAgICAgICAgJGlzdl9pbiA9IEZBTFNFOwogICAgICAgIGlmKCFlbXB0eSgkaXN2X2lkKSApIGZvcmVhY2goJGlzdnMgYXMgJGlzdil7IGlmKCRpc3ZbJ2lkJ109PSRpc3ZfaWQpICRpc3ZfaW49VFJVRTsgfQogICAgICAgICRfU0VTU0lPTlsnY2hhbmd5YW4nXT0kcmVzdWx0Wyd0b2tlbiddOwogICAgICAgICRfU0VTU0lPTlsndXNlciddPSR1c2VyOwogICAgICAgIGlmKCEkaXN2X2luKQogICAgICAgIHsKICAgICAgICAgICAgU2hvd01zZygi5bCa5pyq6K6+572u56uZ54K5QVBQ5L+h5oGv77yM6K+36L+b6KGM6YWN572u4oCm4oCmIiwnP2RvcG9zdD1jaGFuZ2VfYXBwaW5mbycpOwogICAgICAgICAgICBleGl0KCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgaGVhZGVyKCdMb2NhdGlvbjo/Zm9yd2FyZD0nLiRmb3J3YXJkKTsKICAgICAgICAgICAgZXhpdCgpOwogICAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgICAgY2hhbmd5YW5fc2V0X3NldHRpbmcoJ3B3ZCcsICcnKTsKICAgICAgICBoZWFkZXIoJ0xvY2F0aW9uOj8nKTsKICAgICAgICBleGl0KCk7CiAgICB9Cn0gZWxzZWlmICgkZG9wb3N0PT0nbG9naW4nKSB7CiAgICAkdXNlciA9IGVtcHR5KCR1c2VyKT8gJycgOiAkdXNlcjsKICAgICRwd2QgPSBlbXB0eSgkcHdkKT8gJycgOiAkcHdkOwogICAgJGNsZWFyID0gZW1wdHkoJGNsZWFyKT8gJycgOiAkY2xlYXI7CiAgICAvLyRybXB3ZCA9IGVtcHR5KCRybXB3ZCk/ICcnIDogJHJtcHdkOwogICAgaWYoZW1wdHkoJHVzZXIpIE9SIGVtcHR5KCRwd2QpKQogICAgewogICAgICAgIFNob3dNc2coIuaCqOmcgOimgeWhq+WGmUUtbWFpbOWSjOWvhuegge+8jOivt+mHjeaWsOWhq+WGmSIsLTEpOwogICAgICAgIGV4aXQoKTsKICAgIH0KICAgIGlmKCFDaGVja0VtYWlsKCR1c2VyKSkKICAgIHsKICAgICAgICBTaG93TXNnKCLmgqjnmoRFLW1haWzmoLzlvI/plJnor6/vvIzor7fph43mlrDloavlhpkiLC0xKTsKICAgICAgICBleGl0KCk7CiAgICB9CiAgICAKICAgICRzaWduPWNoYW5neWFuX2dlbl9zaWduKCR1c2VyKTsKICAgICRwYXJhbXNBcnI9YXJyYXkoCiAgICAgICAgJ2NsaWVudF9pZCc9PkNIQU5HWUFOX0NMSUVOVF9JRCwgCiAgICAgICAgJ3VzZXInPT4kdXNlciwgCiAgICAgICAgJ3Bhc3N3b3JkJz0+JHB3ZCwgCiAgICAgICAgJ3NpZ24nPT4kc2lnbik7CiAgICAkcnM9Y2hhbmd5YW5faHR0cF9zZW5kKENIQU5HWUFOX0FQSV9MT0dJTiwwLCRwYXJhbXNBcnIpOwogICAgJHJlc3VsdD1qc29uX2RlY29kZSgkcnMsVFJVRSk7CiAgICBpZigkcmVzdWx0WydzdGF0dXMnXT09MSkKICAgIHsKICAgICAgICBTaG93TXNnKCLml6Dms5XnmbvlvZXvvIzor7fmo4Dmn6XmgqjnmoTluJDlj7fkv6Hmga/mmK/lkKbloavlhpnmraPnoa7vvIEiLC0xKTsKICAgICAgICBleGl0KCk7CiAgICB9IGVsc2VpZiAoJHJlc3VsdFsnc3RhdHVzJ109PTApCiAgICB7CiAgICAgICAgJGRiX3VzZXIgPSBjaGFuZ3lhbl9nZXRfc2V0dGluZygndXNlcicpOwoKICAgICAgICBpZigkZGJfdXNlciAhPSAkdXNlcikKICAgICAgICB7CiAgICAgICAgICAgIGNoYW5neWFuX3NldF9zZXR0aW5nKCd1c2VyJywgJHVzZXIpOwogICAgICAgICAgICBjaGFuZ3lhbl9zZXRfc2V0dGluZygnaXN2X2FwcF9rZXknLCAnJyk7CiAgICAgICAgICAgICRpc3ZfYXBwX2tleSA9IGNoYW5neWFuX2dldF9pc3ZfYXBwX2tleSgpOwogICAgICAgIH0KICAgICAgICBpZighZW1wdHkoJGNsZWFyKSkgY2hhbmd5YW5fc2V0X3NldHRpbmcoJ2lzdl9pZCcsICcnKTsKICAgICAgICAkaXN2X2lkID0gY2hhbmd5YW5fZ2V0X3NldHRpbmcoJ2lzdl9pZCcpOwogICAgICAgICRpc3ZzID0gY2hhbmd5YW5fZ2V0X2lzdnMoKTsKICAgICAgICAkaXN2X2luID0gRkFMU0U7CiAgICAgICAgaWYoIWVtcHR5KCRpc3ZfaWQpKSBmb3JlYWNoKCRpc3ZzIGFzICRpc3YpeyBpZigkaXN2WydpZCddPT0kaXN2X2lkKSAkaXN2X2luPVRSVUU7IH0KICAgICAgICAkX1NFU1NJT05bJ2NoYW5neWFuJ109JHJlc3VsdFsndG9rZW4nXTsKICAgICAgICAkX1NFU1NJT05bJ3VzZXInXT0kdXNlcjsKICAgICAgICAkbG9naW5fdXJsPUNIQU5HWUFOX0FQSV9TRVRDT09LSUUuJz9jbGllbnRfaWQ9Jy5DSEFOR1lBTl9DTElFTlRfSUQuJyZ0b2tlbj0nLiRyZXN1bHRbJ3Rva2VuJ107CiAgICAgICAgCiAgICAgICAgJHB3ZCA9IGNoYW5neWFuX21jaFN0ckNvZGUoJHB3ZCwgJ0VOQ09ERScpOwogICAgICAgIAogICAgICAgIGNoYW5neWFuX3NldF9zZXR0aW5nKCdwd2QnLCAkcHdkKTsKICAgICAgICAKICAgICAgICBlY2hvIDw8PEVPVAo8aWZyYW1lIHNyYz0ieyRsb2dpbl91cmx9IiBzY3JvbGxpbmc9Im5vIiB3aWR0aD0iMCIgaGVpZ2h0PSIwIiBzdHlsZT0iYm9yZGVyOm5vbmUiPjwvaWZyYW1lPgpFT1Q7CiAgICAgICAgaWYoISRpc3ZfaW4pCiAgICAgICAgewogICAgICAgICAgICBTaG93TXNnKCLlsJrmnKrorr7nva7nq5nngrlBUFDkv6Hmga/vvIzor7fov5vooYzphY3nva7igKbigKYiLCc/ZG9wb3N0PWNoYW5nZV9hcHBpbmZvJyk7CiAgICAgICAgICAgIGV4aXQoKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBoZWFkZXIoJ0xvY2F0aW9uOj8nKTsKICAgICAgICAgICAgZXhpdCgpOwogICAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgICAgU2hvd01zZygi5peg5rOV55m75b2V77yM5pyq55+l6ZSZ6K+v77yBIiwtMSk7CiAgICAgICAgZXhpdCgpOwogICAgfQp9IGVsc2VpZiAoJGRvcG9zdD09J2NoYW5nZWlzdicpIHsKICAgICRpc3ZfaWQgPSBpbnR2YWwoJGlzdl9pZCk7CiAgICAkY2hhbmdnZV9pc3ZfdXJsID0gQ0hBTkdZQU5fQVBJX0NIQU5HRV9JU1YuJGlzdl9pZDsKICAgICRpc3ZfYXBwX2tleSA9IGNoYW5neWFuX2dldF9pc3ZfYXBwX2tleSgpOwogICAgZWNobyA8PDxFT1QKPGlmcmFtZSBzcmM9InskY2hhbmdnZV9pc3ZfdXJsfSIgc2Nyb2xsaW5nPSJubyIgd2lkdGg9IjAiIGhlaWdodD0iMCIgc3R5bGU9ImJvcmRlcjpub25lIj48L2lmcmFtZT4KRU9UOwogICAgU2hvd01zZygi5oiQ5Yqf5YiH5o2i56uZ54K577yBIiwnPycpOwogICAgZXhpdCgpOwp9IGVsc2VpZiAoJGRvcG9zdD09J2lzbmV3JykgewogICAgJHJzPWNoYW5neWFuX2h0dHBfc2VuZChDSEFOR1lBTl9BUElfSVNORVcuJy8/YXBwSWQ9Jy4kY2xpZW50X2lkLicmZGF0ZT0nLnVybGVuY29kZSggZGF0ZSgnWS1tLWQgaDppOnMnKSkpOwogICAgJHJlc3VsdD1qc29uX2RlY29kZSgkcnMsVFJVRSk7CiAgICBpZihjb3VudCgkcmVzdWx0Wyd0b3BpY3MnXSk+MCkgZXhpdCgndHJ1ZScpOwogICAgZWxzZSBleGl0KCdmYWxzZScpOwp9IGVsc2VpZiAoJGRvcG9zdD09J2xhdGVzdHMnKSB7CiAgICAkbGF0ZXN0cyA9IGNoYW5neWFuX2xhdGVzdHMoJGNsaWVudF9pZCk7CiAgICAkZGF0YSA9IGFycmF5KCk7CiAgICBpZihjb3VudCgkbGF0ZXN0c1snY29tbWVudHMnXSkgPiAwKQogICAgewogICAgICAgIGZvcmVhY2goJGxhdGVzdHNbJ2NvbW1lbnRzJ10gYXMgJGsgPT4gJHYpCiAgICAgICAgewogICAgICAgICAgICAkZGF0YVtdID0gYXJyYXkoCiAgICAgICAgICAgICAgICAnbmlja25hbWUnPT4kdlsncGFzc3BvcnQnXVsnbmlja25hbWUnXSwKICAgICAgICAgICAgICAgICdjb250ZW50Jz0+JHZbJ2NvbnRlbnQnXSwKICAgICAgICAgICAgICAgICd0b3BpY190aXRsZSc9PiR2Wyd0b3BpY190aXRsZSddLAogICAgICAgICAgICAgICAgJ3RvcGljX3VybCc9PiR2Wyd0b3BpY191cmwnXSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CiAgICBlY2hvIGpzb25fZW5jb2RlKCRsYXRlc3RzKTsKICAgIGV4aXQ7Cn0gZWxzZWlmICgkZG9wb3N0PT0nZ2V0Y29kZScpIHsKICAgIGlmKCFjaGFuZ3lhbl9pc2xvZ2luKCkpCiAgICB7CiAgICAgICAgU2hvd01zZygi5oKo5bCa5pyq55m75b2V55WF6KiA77yM6K+35YWI55m75b2V5ZCO57un57ut5L2/55So4oCm4oCm77yBIiwnPycpOwogICAgICAgIGV4aXQoKTsKICAgIH0KICAgIGNoYW5neWFuX2NoZWNrX2lzbG9naW4oKTsKICAgICR1c2VyPWNoYW5neWFuX2dldF9zZXR0aW5nKCd1c2VyJyk7CiAgICAkc2lnbj1jaGFuZ3lhbl9nZW5fc2lnbigkdXNlcik7CiAgICAkcmVzdWx0ID0gY2hhbmd5YW5fZ2V0Y29kZShDSEFOR1lBTl9DTElFTlRfSUQsICR1c2VyLCBmYWxzZSwgJHNpZ24pOwogICAgJGNvZGUgPSBkZWRlX2h0bWxzcGVjaWFsY2hhcnMoJHJlc3VsdFsnY29kZSddKTsKICAgICRtc2cgPSA8PDxFT1QKPHN0eWxlIHR5cGU9J3RleHQvY3NzJz4KcHJlIHsKd2lkdGg6NTAlOwpkaXNwbGF5OiBibG9jazsKcGFkZGluZzogOS41cHg7Cm1hcmdpbjogMCAwIDEwcHg7CmZvbnQtc2l6ZTogMTNweDsKbGluZS1oZWlnaHQ6IDIwcHg7CndvcmQtYnJlYWs6IGJyZWFrLWFsbDsKd29yZC13cmFwOiBicmVhay13b3JkOwp3aGl0ZS1zcGFjZTogcHJlOwp3aGl0ZS1zcGFjZTogcHJlLXdyYXA7CmJhY2tncm91bmQtY29sb3I6ICNmNWY1ZjU7CmJvcmRlcjogMXB4IHNvbGlkICNjY2M7CmJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMCwwLDAsMC4xNSk7Ci13ZWJraXQtYm9yZGVyLXJhZGl1czogNHB4OwotbW96LWJvcmRlci1yYWRpdXM6IDRweDsKYm9yZGVyLXJhZGl1czogNHB4Owp9Cjwvc3R5bGU+CjxwPkRlZGVDTVPmoIfnrb7ku6PnoIHvvIjlsIbku6PnoIHmj5LlhaXliLDmqKHmnb/pobXpnaLlr7nlupTkvY3nva7ljbPlj6/vvInvvJo8L3A+CjxwcmUgaWQ9ImlmcmFtZSIgc3R5bGU9ImhlaWdodDo1MHB4OyI+ICAgCntkZWRlOmNoYW5neWFuL30gICAgIAo8L3ByZT4KPHA+SmF2YXNjcmlwdOS7o+egge+8iOWwhuS7o+eggeaPkuWFpeWIsOaooeadv+mhtemdouWvueW6lOS9jee9ruWNs+WPr++8ie+8mjwvcD4KPHByZSBpZD0iaWZyYW1lIiBzdHlsZT0iaGVpZ2h0OjE1MHB4OyI+ICAgCnskY29kZX0gICAgICAgICAKPC9wcmU+CkVPVDsKCiAgICAkd2ludGl0bGUgPSAn55WF6KiA6K+E6K66566h55CGJzsKICAgICR3ZWNvbWVfaW5mbyA9ICc8YSBocmVmPSI/Ij7nlYXoqIDor4TorrrmqKHlnZc8L2E+IOOAi+iOt+WPluS7o+eggSc7CiAgICAkd2luID0gbmV3IE94V2luZG93KCk7CiAgICAkd2luLT5BZGRUaXRsZSgkd2ludGl0bGUpOwogICAgJHdpbi0+QWRkTXNnSXRlbSgkbXNnKTsKICAgICR3aW5mb3JtID0gJHdpbi0+R2V0V2luZG93KCdoYW5kJywgJyZuYnNwOycsIGZhbHNlKTsKICAgICR3aW4tPkRpc3BsYXkoKTsKICAgIAp9IGVsc2VpZiAoJGRvcG9zdD09J2FkZHNpdGUnKSB7CiAgICBpZigkYWN0aW9uPT0nZG8nKQogICAgewogICAgICAgICRpc3ZfbmFtZSA9IGVtcHR5KCRpc3ZfbmFtZSk/ICcnIDogJGlzdl9uYW1lOwogICAgICAgICR1cmwgPSBlbXB0eSgkdXJsKT8gJycgOiAkdXJsOwogICAgICAgIGlmKCFwcmVnX21hdGNoKCIjXmh0dHA6XC9cL1tBLVphLXowLTldK1wuW0EtWmEtejAtOV0rW1wvPVw/JVwtJl9+YEBbXF1cJzorIV0qKFtePD5cIl0pKiQjIiwkdXJsKSkKICAgICAgICB7CiAgICAgICAgICAgIFNob3dNc2coIuivt+Whq+WGmeato+ehrueahOe9keWdgOagvOW8jyIsLTEpOwogICAgICAgICAgICBleGl0KCk7CiAgICAgICAgfQogICAgICAgIGlmKGVtcHR5KCRpc3ZfbmFtZSkgT1IgZW1wdHkoJHVybCkpCiAgICAgICAgewogICAgICAgICAgICBTaG93TXNnKCLmgqjpnIDopoHloavlhpnmraPnoa7nmoTnq5nngrnkv6Hmga/vvIzor7fph43mlrDloavlhpkiLC0xKTsKICAgICAgICAgICAgZXhpdCgpOwogICAgICAgIH0KICAgICAgICAkdXNlcj1jaGFuZ3lhbl9nZXRfc2V0dGluZygndXNlcicpOwogICAgICAgICRzaWduPWNoYW5neWFuX2dlbl9zaWduKCR1c2VyKTsKICAgICAgICAkcGFyYW1zQXJyPWFycmF5KAogICAgICAgICAgICAndXNlcic9PiR1c2VyLCAKICAgICAgICAgICAgJ2NsaWVudF9pZCc9PkNIQU5HWUFOX0NMSUVOVF9JRCwgCiAgICAgICAgICAgICdpc3ZfbmFtZSc9PmNoYW5neWFuX2F1dG9DaGFyc2V0KCRpc3ZfbmFtZSksIAogICAgICAgICAgICAndXJsJz0+JHVybCwgCiAgICAgICAgICAgICdzaWduJz0+JHNpZ24pOwogICAgICAgICRycz1jaGFuZ3lhbl9odHRwX3NlbmQoQ0hBTkdZQU5fQVBJX0FERFNJVEUsMCwkcGFyYW1zQXJyKTsKICAgICAgICAkcmVzdWx0PWpzb25fZGVjb2RlKCRycyxUUlVFKTsKICAgICAgICBpZigkcmVzdWx0WydzdGF0dXMnXT09MSkKICAgICAgICB7CiAgICAgICAgICAgIFNob3dNc2coIuaXoOazlea3u+WKoOermeeCue+8jOivt+ajgOafpeaCqOeahOermeeCueS/oeaBr+aYr+WQpuWhq+WGmeato+ehru+8gSIsLTEpOwogICAgICAgICAgICBleGl0KCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgY2hhbmd5YW5fc2V0X3NldHRpbmcoJ2FwcGlkJywgJHJlc3VsdFsnYXBwaWQnXSk7CiAgICAgICAgICAgIGNoYW5neWFuX3NldF9zZXR0aW5nKCdpZCcsICRyZXN1bHRbJ2lkJ10pOwogICAgICAgICAgICBjaGFuZ3lhbl9zZXRfc2V0dGluZygnaXN2X2lkJywgJHJlc3VsdFsnaXN2X2lkJ10pOwogICAgICAgICAgICBjaGFuZ3lhbl9zZXRfc2V0dGluZygnaXN2X2FwcF9rZXknLCAkcmVzdWx0Wydpc3ZfYXBwX2tleSddKTsKICAgICAgICAgICAgJF9TRVNTSU9OWydjaGFuZ3lhbiddPSRyZXN1bHRbJ3Rva2VuJ107CiAgICAgICAgICAgIGNoYW5neWFuX2NsZWFyY2FjaGUoKTsKICAgICAgICAgICAgJGlzdl9pZCA9IGludHZhbCgkcmVzdWx0Wydpc3ZfaWQnXSk7CiAgICAgICAgICAgICRsb2dpbl91cmw9Q0hBTkdZQU5fQVBJX1NFVENPT0tJRS4nP2NsaWVudF9pZD0nLkNIQU5HWUFOX0NMSUVOVF9JRC4nJnRva2VuPScuJHJlc3VsdFsndG9rZW4nXTsKICAgICAgICAgICAgZWNobyA8PDxFT1QKPGlmcmFtZSBzcmM9InskbG9naW5fdXJsfSIgc2Nyb2xsaW5nPSJubyIgd2lkdGg9IjAiIGhlaWdodD0iMCIgc3R5bGU9ImJvcmRlcjpub25lIj48L2lmcmFtZT4KRU9UOwogICAgICAgICAgICBTaG93TXNnKCLmiJDlip/mt7vliqDnq5nngrnkv6Hmga/vvIzov5vooYznq5nngrnliIfmjaLigKbigKYiLCc/ZG9wb3N0PWNoYW5nZWlzdiZpc3ZfaWQ9Jy4kaXN2X2lkLDAsMzAwMCk7CiAgICAgICAgICAgIGV4aXQ7CiAgICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgICBlY2hvIDw8PEVPVAo8aHRtbD4KPGhlYWQ+CjxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXskY2ZnX3NvZnRfbGFuZ30iPgo8dGl0bGU+5re75Yqg55WF6KiA56uZ54K577yaPC90aXRsZT4KPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0ieyRjZmdfcGx1c19kaXJ9L2ltZy9iYXNlLmNzcyI+CjwvaGVhZD4KPGJvZHkgYmFja2dyb3VuZD0neyRjZmdfcGx1c19kaXJ9L2ltZy9hbGxiZy5naWYnIGxlZnRtYXJnaW49IjgiIHRvcG1hcmdpbj0nOCc+Cjx0YWJsZSB3aWR0aD0iOTglIiBib3JkZXI9IjAiIGFsaWduPSJjZW50ZXIiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCIgYmdjb2xvcj0iI0RGRjlBQSI+CiAgPHRyPgogICAgPHRkIGhlaWdodD0iMjgiIHN0eWxlPSJib3JkZXI6MXB4IHNvbGlkICNEQURBREEiIGJhY2tncm91bmQ9J3skY2ZnX3BsdXNfZGlyfS9pbWcvd2JnLmdpZic+Jm5ic3A7PGI+4peHPGEgaHJlZj0iPyI+55WF6KiA6K+E6K665qih5Z2XPC9hPiDjgIvmt7vliqDnlYXoqIDnq5nngrk8L2I+PC90ZD4KICA8L3RyPgogIDx0cj4KICAKICA8dGQgd2lkdGg9IjEwMCUiIGhlaWdodD0iODAiIHN0eWxlPSJwYWRkaW5nLXRvcDo1cHgiIGJnY29sb3I9JyNmZmZmZmYnPgogIAogIDxzY3JpcHQgbGFuZ3VhZ2U9J2phdmFzY3JpcHQnPgpmdW5jdGlvbiBDaGVja1N1Ym1pdCgpewoJcmV0dXJuIHRydWU7IAp9Cjwvc2NyaXB0PgogIDxmb3JtIG5hbWU9J215Zm9ybScgbWV0aG9kPSdQT1NUJyBvblN1Ym1pdD0ncmV0dXJuIENoZWNrU3VibWl0KCk7JyBhY3Rpb249Jz8nPgogIDxpbnB1dCB0eXBlPSdoaWRkZW4nIG5hbWU9J2RvcG9zdCcgdmFsdWU9J2FkZHNpdGUnPgogIDxpbnB1dCB0eXBlPSdoaWRkZW4nIG5hbWU9J2FjdGlvbicgdmFsdWU9J2RvJz4KICA8dGFibGUgd2lkdGg9JzEwMCUnICBib3JkZXI9JzAnIGNlbGxwYWRkaW5nPSczJyBjZWxsc3BhY2luZz0nMScgYmdjb2xvcj0nI0RBREFEQSc+CiAgICA8dHIgYmdjb2xvcj0nI0RBREFEQSc+CiAgICAgIDx0ZCBjb2xzcGFuPScyJyBiYWNrZ3JvdW5kPSd7JGNmZ19wbHVzX2Rpcn0vaW1nL3diZy5naWYnIGhlaWdodD0nMjYnPjxmb250IGNvbG9yPScjNjY2NjAwJz48Yj7mt7vliqDnlYXoqIDnq5nngrnvvJo8L2I+PC9mb250PjwvdGQ+CiAgICA8L3RyPgogICAgPHRyIGJnY29sb3I9JyNGRkZGRkYnPgogICAgICA8dGQgY29sc3Bhbj0nMicgIGhlaWdodD0nMTAwJz48dGFibGUgd2lkdGg9Ijk4JSIgYm9yZGVyPSIwIiBjZWxsc3BhY2luZz0iMSIgY2VsbHBhZGRpbmc9IjEiPgogIDx0Ym9keT4KICAgIDx0cj4KICAgICAgPHRkIGhlaWdodD0iMzAiIGNvbHNwYW49IjIiIHN0eWxlPSJjb2xvcjojOTk5Ij48c3Ryb25nPjxhIGhyZWY9Imh0dHA6Ly9jaGFuZ3lhbi5rdWFpemhhbi5jb20vP2Zyb21kZWRlY21zIiB0YXJnZXQ9Il9ibGFuayIgc3R5bGU9ImNvbG9yOmJsdWUiPueVheiogDwvYT48L3N0cm9uZz7mmK/kuIDkuKrnroDljZXogIzlvLrlpKfnmoTnpL7kvJrljJbor4Torrrlj4rogZrlkIjlubPlj7DjgILnlKjmiLflj6/ku6Xnm7TmjqXnlKjoh6rlt7HnmoTnpL7kvJrljJbnvZHnu5zotKbmiLflnKjnrKzkuInmlrnnvZHnq5nlj5Hooajor4TorrrvvIzlubbkuJTkuIDplK7or4TorrrlkIzmraXoh7PnpL7kuqTnvZHnu5zlsIbnvZHnq5nlhoXlrrnlkozoh6rlt7HnmoTor4TorrrliIbkuqvnu5nlpb3lj4vjgILlop7liqDnrKzkuInmlrnnvZHnq5nnlKjmiLfmtLvot4PluqbvvIzosIPliqjlpb3lj4vlj4LkuI7or4TorrrvvIzluK7liqnnvZHnq5nlrp7njrDnpL7kvJrljJbnvZHnu5zkvJjljJbvvIzmnInmlYjmj5DljYfnvZHnq5nnpL7kvJrljJbmtYHph4/vvIE8L3RkPgogICAgPC90cj4KICAgIDx0cj4KICAgICAgPHRkIGhlaWdodD0iMzAiIGNvbHNwYW49IjIiIHN0eWxlPSJjb2xvcjojOTk5Ij48L3RkPgogICAgPC90cj4KICAgIDx0cj4KICAgICAgPHRkIHdpZHRoPSIxNiUiIGhlaWdodD0iMzAiPue9keermeWQjeensO+8mjwvdGQ+CiAgICAgIDx0ZCB3aWR0aD0iODQlIiBzdHlsZT0idGV4dC1hbGlnbjpsZWZ0OyI+PGlucHV0IG5hbWU9Imlzdl9uYW1lIiB0eXBlPSJ0ZXh0IiBpZD0iaXN2X25hbWUiIHNpemU9IjE2IiBzdHlsZT0id2lkdGg6MjAwcHgiIHZhbHVlPSJ7JGNmZ193ZWJuYW1lfSIgLz48c3BhbiBzdHlsZT0iY29sb3I6Izk5OSI+Jm5ic3A7IOS4uuaWueS+v+aCqOeuoeeQhuermeeCueivhOiuuu+8jOW7uuiuruabtOaUueermeeCueWQjeensDwvc3Bhbj48L3RkPgogICAgPC90cj4KICAgIDx0cj4KICAgICAgPHRkIHdpZHRoPSIxNiUiIGhlaWdodD0iMzAiPue9keermeWcsOWdgO+8mjwvdGQ+CiAgICAgIDx0ZCB3aWR0aD0iODQlIiBzdHlsZT0idGV4dC1hbGlnbjpsZWZ0OyI+PGlucHV0IG5hbWU9InVybCIgdHlwZT0idGV4dCIgaWQ9InVybCIgc2l6ZT0iMTYiIHN0eWxlPSJ3aWR0aDoyMDBweCIgdmFsdWU9InskY2ZnX2Jhc2Vob3N0fSIgLz48c3BhbiBzdHlsZT0iY29sb3I6Izk5OSI+Jm5ic3A7IOS+i+Wmgu+8mmh0dHA6Ly93d3cuZGVkZWNtcy5jb208L3NwYW4+PC90ZD4KICAgIDwvdHI+CiAgPC90Ym9keT4KPC90YWJsZT48L3RkPgogICAgPC90cj4KICAgIDx0cj4KICAgICAgPHRkIGNvbHNwYW49JzInIGJnY29sb3I9JyNGOUZDRUYnPjx0YWJsZSB3aWR0aD0nMjcwJyBib3JkZXI9JzAnIGNlbGxwYWRkaW5nPScwJyBjZWxsc3BhY2luZz0nMCc+CiAgICAgICAgICA8dHIgYWxpZ249J2NlbnRlcicgaGVpZ2h0PScyOCc+CiAgICAgICAgICAgIDx0ZCB3aWR0aD0nOTAnPjxpbnB1dCBuYW1lPSdpbWFnZUZpZWxkMScgdHlwZT0naW1hZ2UnIGNsYXNzPSducCcgc3JjPSd7JGNmZ19wbHVzX2Rpcn0vaW1nL2J1dHRvbl9vay5naWYnIHdpZHRoPSc2MCcgaGVpZ2h0PScyMicgYm9yZGVyPScwJyAvPjwvdGQ+CiAgICAgICAgICAgIDx0ZCB3aWR0aD0nOTAnPjxhIGhyZWY9JyMnPjxpbWcgY2xhc3M9J25wJyBzcmM9J3skY2ZnX3BsdXNfZGlyfS9pbWcvYnV0dG9uX3Jlc2V0LmdpZicgd2lkdGg9JzYwJyBoZWlnaHQ9JzIyJyBib3JkZXI9JzAnIG9uQ2xpY2s9J3RoaXMuZm9ybS5yZXNldCgpO3JldHVybiBmYWxzZTsnIC8+PC9hPjwvdGQ+CiAgICAgICAgICAgIDx0ZD48YSBocmVmPSc/ZG9wb3N0PWNoYW5nZV9hcHBpbmZvJz48aW1nIHNyYz0neyRjZmdfcGx1c19kaXJ9L2ltZy9idXR0b25fYmFjay5naWYnIHdpZHRoPSc2MCcgaGVpZ2h0PScyMicgYm9yZGVyPScwJy8+PC9hPjwvdGQ+CiAgICAgICAgICA8L3RyPgogICAgICAgIDwvdGFibGU+PC90ZD4KICAgIDwvdHI+CiAgPC90YWJsZT4KICA8L3RkPgogIDwvdHI+CjwvdGFibGU+CjxwIGFsaWduPSJjZW50ZXIiPiA8YnI+CiAgPGJyPgo8L3A+CjwvYm9keT4KPC9odG1sPgpFT1Q7CiAgICB9Cn0gZWxzZWlmICgkZG9wb3N0PT0nbWFuYWdlJyBPUiAkZG9wb3N0PT0nc3RhdCcgT1IgJGRvcG9zdD09J3NldHRpbmcnCk9SICRkb3Bvc3Q9PSJpbXBvcnQiKQp7CiAgICBpZighY2hhbmd5YW5faXNsb2dpbigpKQogICAgewogICAgICAgIFNob3dNc2coIuaCqOWwmuacqueZu+W9leeVheiogO+8jOivt+WFiOeZu+W9leWQjue7p+e7reS9v+eUqOKApuKApu+8gSIsJz8nKTsKICAgICAgICBleGl0KCk7CiAgICB9CiAgICBjaGFuZ3lhbl9jaGVja19pc2xvZ2luKCk7CiAgICAkYWRkc3R5bGU9J3Njcm9sbGluZz0ibm8iICc7CiAgICAkdHlwZT0nYXVkaXQnOwogICAgJGFwcGlkPWNoYW5neWFuX2dldF9zZXR0aW5nKCdhcHBpZCcpOwogICAgaWYoJGRvcG9zdD09J21hbmFnZScpICR0eXBlPSdhdWRpdCc7CiAgICBlbHNlaWYoJGRvcG9zdD09J3N0YXQnKSAkdHlwZT0nc3RhdCc7CiAgICAkcHRpdGxlID0gJ+eVheiogOivhOiuuueuoeeQhic7CgogICAgJG1hbmFnZV91cmw9Imh0dHA6Ly9jaGFuZ3lhbi5rdWFpemhhbi5jb20vYXVkaXQvY29tbWVudHMvVE9BVURJVC8xIjsKICAgICRhZGRzdHI9Jyc7CiAgICBpZigkZG9wb3N0PT0nc2V0dGluZycpIAogICAgewogICAgICAgICRwdGl0bGUgPSAi55WF6KiA6K6+572uIjsKICAgICAgICAkbWFuYWdlX3VybD0iaHR0cDovL2NoYW5neWFuLmt1YWl6aGFuLmNvbS9zZXR0aW5nL2Jhc2ljIjsKICAgICAgICAKICAgIH0gZWxzZWlmICgkZG9wb3N0PT0nc3RhdCcpCiAgICB7CiAgICAgICAgJHB0aXRsZSA9ICLmlbDmja7nu5/orqEiOwogICAgICAgICRtYW5hZ2VfdXJsPSJodHRwOi8vY2hhbmd5YW4ua3VhaXpoYW4uY29tL3N0YXQtZGF0YS9jb21tZW50IjsKICAgIH0gZWxzZWlmICgkZG9wb3N0PT0naW1wb3J0JykKICAgIHsKICAgICAgICAkcHRpdGxlID0gIueVheiogOW3peWFtyI7CiAgICAgICAgJGV4cG9ydF9zdHI9JGltcG9ydF9zdHI9Jyc7CiAgICAgICAgJG1hbmFnZV91cmw9Ij9kb3Bvc3Q9YmxhbmsiOwogICAgICAgICRsYXN0X2ltcG9ydD1jaGFuZ3lhbl9nZXRfc2V0dGluZygnbGFzdF9pbXBvcnQnKTsKICAgICAgICAkbGFzdF9leHBvcnQ9Y2hhbmd5YW5fZ2V0X3NldHRpbmcoJ2xhc3RfZXhwb3J0Jyk7CiAgICAgICAgaWYgKGVtcHR5KCRsYXN0X2V4cG9ydCkpIHsKICAgICAgICAgICAgJGV4cG9ydF9zdHIgPSAnPGZvbnQgY29sb3I9InJlZCI+5bCa5pyq5aSH5Lu977yM5bu66K6u5aSH5Lu977yBPC9mb250Pic7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJGV4cG9ydF90aW1lID0gZGF0ZSgnWS1tLWQgSDppOnMnLCAkbGFzdF9leHBvcnQpOwogICAgICAgICAgICAkZXhwb3J0X3N0ciA9ICc8Zm9udCBjb2xvcj0iIzY2NiI+5pyA5ZCO5aSH5Lu95pel5pyf77yaJy4kZXhwb3J0X3RpbWUuJzwvZm9udD4nOwogICAgICAgIH0KICAgICAgICBpZiAoZW1wdHkoJGxhc3RfaW1wb3J0KSkgewogICAgICAgICAgICAkaW1wb3J0X3N0ciA9ICc8Zm9udCBjb2xvcj0icmVkIj7lsJrmnKrlr7zlh7pEZWRlQ01T6K+E6K665Yiw55WF6KiA77yBPC9mb250Pic7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJGltcG9ydF90aW1lID0gZGF0ZSgnWS1tLWQgSDppOnMnLCAkbGFzdF9pbXBvcnQpOwogICAgICAgICAgICAkaW1wb3J0X3N0ciA9ICc8Zm9udCBjb2xvcj0iIzY2NiI+5pyA5ZCO5a+85Ye65pel5pyf77yaJy4kaW1wb3J0X3RpbWUuJzwvZm9udD4nOwogICAgICAgIH0KICAgICAgICAkYWRkc3RyPTw8PEVPVAogICAgICAgIDx0ciBiZ2NvbG9yPScjRkZGRkZGJz4KICAgICAgICAgIDx0ZCBjb2xzcGFuPScyJyBoZWlnaHQ9JzMwcHgnIHN0eWxlPSdwYWRkaW5nOjIwcHgnPgogICAgICAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgogICAgICAgICAgZnVuY3Rpb24gaXNnbyh1cmwsbXNnKSB7CiAgICAgICAgICAgICAgaWYoY29uZmlybShtc2cpKSB3aW5kb3cubG9jYXRpb24uaHJlZj11cmw7CiAgICAgICAgICAgICAgZWxzZSByZXR1cm4gZmFsc2U7CiAgICAgICAgICB9CiAgICAgICAgICA8L3NjcmlwdD4KICAgICAgICAgIDxpbnB1dCB0eXBlPSJidXR0b24iIHNpemU9IjE0IiBvbmNsaWNrPSJyZXR1cm4gaXNnbygnP2RvcG9zdD1jaGFuZ3lhbl90b19kZWRlY21zJywn5piv5ZCm5a+85Ye655WF6KiA5YiwRGVkZUNNU+ivhOiuuu+8nycpOyIgdmFsdWU9IuWvvOWHuueVheiogOWIsERlZGVDTVPor4TorroiPiAKICAgICAgICAgICA8c3BhbiBzdHlsZT0iY29sb3I6Izk5OSI+5bCG55WF6KiA5qih5Z2X5Lit55qE5pWw5o2u5a+85Ye65aSH5Lu95YiwRGVkZUNNU+aVsOaNruW6k+S4rTwvc3Bhbj4gIHskZXhwb3J0X3N0cn0KICAgICAgICAgIDxiciAvPjxiciAvPgogICAgICAgICAgPGlucHV0IHR5cGU9ImJ1dHRvbiIgc2l6ZT0iMTQiIG9uY2xpY2s9InJldHVybiBpc2dvKCc/ZG9wb3N0PWRlZGVjbXNfdG9fY2hhbmd5YW4nLCfmmK/lkKblr7zlhaVEZWRlQ01T6K+E6K665Yiw55WF6KiA77yfJyk7IiB2YWx1ZT0i5a+85YWlRGVkZUNNU+ivhOiuuuWIsOeVheiogCI+CiAgICAgICAgICAgPHNwYW4gc3R5bGU9ImNvbG9yOiM5OTkiPuWwhkRlZGVDTVPor4TorrrmlbDmja7lr7zlhaXliLDnlYXoqIDmqKHlnZfkuK08L3NwYW4+IHskaW1wb3J0X3N0cn0KICAgICAgICAgIDwvdGQ+CiAgICAgICAgPC90cj4KRU9UOwogICAgfQogICAgJGFkZHN0eWxlPSdzY3JvbGxpbmc9ImF1dG8iICc7CiAgICAkYWNjb3VudF9zdHIgPSBwcmVnX21hdGNoKCIjQGRlZGVjbXMkIyIsJF9TRVNTSU9OWyd1c2VyJ10pPyAiPGEgaHJlZj0nP2RvcG9zdD1iaW5kJyBzdHlsZT0nY29sb3I6Ymx1ZSc+W+e7keWumui0puWPt108L2E+IiA6CiAgICAiPGEgaHJlZj0nP2RvcG9zdD1sb2dvdXQnIHN0eWxlPSdjb2xvcjpibHVlJz5b5YiH5o2i6LSm5Y+3XTwvYT4iOwogICAgZWNobyA8PDxFT1QKPGh0bWw+CjxoZWFkPgo8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD17JGNmZ19zb2Z0X2xhbmd9Ij4KPHRpdGxlPnskcHRpdGxlfTwvdGl0bGU+CjxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9ImNzcy9iYXNlLmNzcyI+CjwvaGVhZD4KPGJvZHkgYmFja2dyb3VuZD0naW1hZ2VzL2FsbGJnLmdpZicgbGVmdG1hcmdpbj0iOCIgdG9wbWFyZ2luPSc4Jz4KPHRhYmxlIHdpZHRoPSI5OCUiIGJvcmRlcj0iMCIgYWxpZ249ImNlbnRlciIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIiBiZ2NvbG9yPSIjREZGOUFBIiBoZWlnaHQ9IjEwMCUiPgogIDx0cj4KICAgIDx0ZCBoZWlnaHQ9IjI4IiBzdHlsZT0iYm9yZGVyOjFweCBzb2xpZCAjREFEQURBIiBiYWNrZ3JvdW5kPSdpbWFnZXMvd2JnLmdpZic+CiAgICAKICAgIDxkaXYgc3R5bGU9ImZsb2F0OmxlZnQiPiZuYnNwOzxiPuKXhzxhIGhyZWY9Ij8iPueVheiogOivhOiuuuaooeWdlzwvYT4g44CLeyRwdGl0bGV9PC9iPjwvZGl2PgogICAgPGRpdiBzdHlsZT0iZmxvYXQ6cmlnaHQ7bWFyZ2luLXJpZ2h0OjIwcHg7Ij7mgqjlpb3vvJp7JF9TRVNTSU9OWyd1c2VyJ119IHskYWNjb3VudF9zdHJ9PC9kaXY+CiAgICA8L3RkPgogIDwvdHI+CiAgPHRyPgogICAgPHRkIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIHZhbGlnbj0idG9wIiBiZ2NvbG9yPScjZmZmZmZmJyBzdHlsZT0icGFkZGluZy10b3A6NXB4Ij48dGFibGUgd2lkdGg9JzEwMCUnICBib3JkZXI9JzAnIGNlbGxwYWRkaW5nPSczJyBjZWxsc3BhY2luZz0nMScgYmdjb2xvcj0nI0RBREFEQScgaGVpZ2h0PSIxMDAlIj4KICAgICAgICA8dHIgYmdjb2xvcj0nI0RBREFEQSc+CiAgICAgICAgICA8dGQgY29sc3Bhbj0nMicgYmFja2dyb3VuZD0naW1hZ2VzL3diZy5naWYnIGhlaWdodD0nMjYnPjxmb250IGNvbG9yPScjNjY2NjAwJz48Yj57JHB0aXRsZX08L2I+PC9mb250PjwvdGQ+CiAgICAgICAgPC90cj4KICAgICAgICB7JGFkZHN0cn0KICAgICAgICA8dHIgYmdjb2xvcj0nI0ZGRkZGRic+CiAgICAgICAgICA8dGQgY29sc3Bhbj0nMicgaGVpZ2h0PScxMDAlJyBzdHlsZT0ncGFkZGluZzoyMHB4Jz48YnIvPjxpZnJhbWUgc3JjPSJ7JG1hbmFnZV91cmx9IiB7JGFkZHN0eWxlfSB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBzdHlsZT0iYm9yZGVyOm5vbmUiPjwvaWZyYW1lPjwvdGQ+CiAgICAgICAgPC90cj4KICAgICAgICA8dHI+CiAgICAgICAgICA8dGQgYmdjb2xvcj0nI0Y1RjVGNSc+Jm5ic3A7PC90ZD4KICAgICAgICA8L3RyPgogICAgICA8L3RhYmxlPjwvdGQ+CiAgPC90cj4KPC90YWJsZT4KPHAgYWxpZ249ImNlbnRlciI+IDxicj4KICA8YnI+CjwvcD4KPC9ib2R5Pgo8L2h0bWw+CgpFT1Q7Cn0gZWxzZWlmICgkZG9wb3N0PT0nZGVkZWNtc190b19jaGFuZ3lhbicpIHsKICAgIGlmKCFjaGFuZ3lhbl9pc2xvZ2luKCkpCiAgICB7CiAgICAgICAgU2hvd01zZygi5oKo5bCa5pyq55m75b2V55WF6KiA77yM6K+35YWI55m75b2V5ZCO57un57ut5L2/55So4oCm4oCm77yBIiwnPycpOwogICAgICAgIGV4aXQoKTsKICAgIH0KICAgICRpc3ZfYXBwX2tleSA9IGNoYW5neWFuX2dldF9pc3ZfYXBwX2tleSgpOwogICAgJHN0YXJ0ID0gaXNzZXQoJHN0YXJ0KT8gaW50dmFsKCRzdGFydCkgOiAwOwogICAgJHBhZ2VzaXplPTE7CiAgICAkc3FsID0gIlNFTEVDVCBjb3VudCgqKSBhcyBkZCBGUk9NIGAjQF9fZmVlZGJhY2tgIGdyb3VwIGJ5IGFpZCBvcmRlciBieSBhaWQgYXNjIGxpbWl0IHskc3RhcnR9LHskcGFnZXNpemV9IjsKICAgICRyciA9ICRkc3FsLT5HZXRPbmUoJHNxbCk7CiAgICBpZigkcnJbJ2RkJ109PTApCiAgICB7CiAgICAgICAgY2hhbmd5YW5fc2V0X3NldHRpbmcoJ2xhc3RfaW1wb3J0JywgdGltZSgpKTsKICAgICAgICBTaG93TXNnKCflhajpg6jlr7zlh7rlrozmiJDvvIEnLCdqYXZhc2NyaXB0OjsnKTsKICAgICAgICBleGl0OwogICAgfQogICAgJHNxbCA9ICJTRUxFQ1QgYWlkIEZST00gYCNAX19mZWVkYmFja2AgZ3JvdXAgYnkgYWlkIG9yZGVyIGJ5IGFpZCBhc2MgbGltaXQgeyRzdGFydH0seyRwYWdlc2l6ZX0iOwogICAgJGRzcWwtPlNldFF1ZXJ5KCRzcWwpOwogICAgJGRzcWwtPkV4ZWN1dGUoJ2RkJyk7CiAgICAkcmVzdWx0PWFycmF5KCk7CiAgICB3aGlsZSgkYXJyID0gJGRzcWwtPkdldEFycmF5KCdkZCcpKQogICAgewogICAgICAgICRmZWVkQXJyPWFycmF5KCk7CiAgICAgICAgJGFyY3RSb3cgPSAkZHNxbC0+R2V0T25lKCJTRUxFQ1QgKiBGUk9NIGAjQF9fYXJjdGlueWAgV0hFUkUgaWQ9eyRhcnJbJ2FpZCddfSIpOwogICAgICAgIGlmKCRhcmN0Um93WydjaGFubmVsJ109PTApICRhcmN0Um93WydjaGFubmVsJ109MTsKICAgICAgICAkY2lkID0gJGFyY3RSb3dbJ2NoYW5uZWwnXTsKICAgICAgICAkY2hSb3cgPSAkZHNxbC0+R2V0T25lKCJTRUxFQ1QgKiBGUk9NIGAjQF9fY2hhbm5lbHR5cGVgIFdIRVJFIGlkPSckY2lkJyAiKTsKICAgICAgICAkcm93PWFycmF5KCk7CiAgICAgICAgaWYgKCRjaFJvd1snaXNzeXN0ZW0nXSE9IC0xKSB7CiAgICAgICAgICAgICRzcWwgPSAiU0VMRUNUIGFyYy4qLHRwLnJlaWQsdHAudHlwZWRpcix0cC50eXBlbmFtZSx0cC5pc2RlZmF1bHQsdHAuZGVmYXVsdG5hbWUsdHAubmFtZXJ1bGUsdHAubmFtZXJ1bGUyLHRwLmlzcGFydCwKICAgICAgICAgICAgdHAubW9yZXNpdGUsdHAuc2l0ZXVybCx0cC5zaXRlcGF0aCxjaC5hZGR0YWJsZQogICAgICAgICAgICBGUk9NIGAjQF9fYXJjaGl2ZXNgIGFyYwogICAgICAgICAgICAgICAgICAgICBMRUZUIEpPSU4gYCNAX19hcmN0eXBlYCB0cCBvbiB0cC5pZD1hcmMudHlwZWlkCiAgICAgICAgICAgICAgICAgICAgICBMRUZUIEpPSU4gYCNAX19jaGFubmVsdHlwZWAgYXMgY2ggb24gYXJjLmNoYW5uZWwgPSBjaC5pZAogICAgICAgICAgICAgICAgICAgICAgV0hFUkUgYXJjLmlkPSd7JGFyclsnYWlkJ119JyAiOwogICAgICAgICAgICAkcm93ID0gJGRzcWwtPkdldE9uZSgkc3FsKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBpZigkY2hSb3dbJ2FkZHRhYmxlJ10hPScnKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAkc3FsID0gIlNFTEVDVCBhcmMuKix0cC50eXBlZGlyLHRwLnR5cGVuYW1lLHRwLmlzZGVmYXVsdCx0cC5kZWZhdWx0bmFtZSx0cC5uYW1lcnVsZSx0cC5uYW1lcnVsZTIsdHAuaXNwYXJ0LAogICAgICAgICAgICB0cC5tb3Jlc2l0ZSx0cC5zaXRldXJsLHRwLnNpdGVwYXRoIEZST00gYHskY2hSb3dbJ2FkZHRhYmxlJ119YCBhcmMgIAogICAgICAgICAgICBMRUZUIEpPSU4gYCNAX19hcmN0eXBlYCB0cCBPTiBhcmMudHlwZWlkPXRwLmlkCiAgICAgICAgICAgICAgICBXSEVSRSBgYWlkYCA9ICd7JGFyclsnYWlkJ119JyI7CiAgICAgICAgICAgICAgICAkYWRkVGFibGVSb3cgPSAkZHNxbC0+R2V0T25lKCRzcWwpOwogICAgICAgICAgICAgICAgaWYoaXNfYXJyYXkoJGFkZFRhYmxlUm93KSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAkcm93WydpZCddPSRhZGRUYWJsZVJvd1snYWlkJ107CiAgICAgICAgICAgICAgICAgICAgJHJvd1sndGl0bGUnXT0kYWRkVGFibGVSb3dbJ3RpdGxlJ107CiAgICAgICAgICAgICAgICAgICAgJHJvd1sndHlwZWlkJ109JGFkZFRhYmxlUm93Wyd0eXBlaWQnXTsKICAgICAgICAgICAgICAgICAgICAkcm93WydtaWQnXT0kYWRkVGFibGVSb3dbJ21pZCddOwogICAgICAgICAgICAgICAgICAgICRyb3dbJ3NlbmRkYXRlJ109JGFkZFRhYmxlUm93WydzZW5kZGF0ZSddOwogICAgICAgICAgICAgICAgICAgICRyb3dbJ2NoYW5uZWwnXT0kYWRkVGFibGVSb3dbJ2NoYW5uZWwnXTsKICAgICAgICAgICAgICAgICAgICAkcm93WydhcmNyYW5rJ109JGFkZFRhYmxlUm93WydhcmNyYW5rJ107CiAgICAgICAgICAgICAgICAgICAgJHJvd1snc2VuZGRhdGUnXT0kYWRkVGFibGVSb3dbJ3NlbmRkYXRlJ107CiAgICAgICAgICAgICAgICAgICAgJHJvd1sndHlwZWRpciddPSRhZGRUYWJsZVJvd1sndHlwZWRpciddOwogICAgICAgICAgICAgICAgICAgICRyb3dbJ2lzZGVmYXVsdCddPSRhZGRUYWJsZVJvd1snaXNkZWZhdWx0J107CiAgICAgICAgICAgICAgICAgICAgJHJvd1snZGVmYXVsdG5hbWUnXT0kYWRkVGFibGVSb3dbJ2RlZmF1bHRuYW1lJ107CiAgICAgICAgICAgICAgICAgICAgJHJvd1snaXNwYXJ0J109JGFkZFRhYmxlUm93Wydpc3BhcnQnXTsKICAgICAgICAgICAgICAgICAgICAkcm93WyduYW1lcnVsZTInXT0kYWRkVGFibGVSb3dbJ25hbWVydWxlMiddOwogICAgICAgICAgICAgICAgICAgICRyb3dbJ21vcmVzaXRlJ109JGFkZFRhYmxlUm93Wydtb3Jlc2l0ZSddOwogICAgICAgICAgICAgICAgICAgICRyb3dbJ3NpdGV1cmwnXT0kYWRkVGFibGVSb3dbJ3NpdGV1cmwnXTsKICAgICAgICAgICAgICAgICAgICAkcm93WydzaXRlcGF0aCddPSRhZGRUYWJsZVJvd1snc2l0ZXBhdGgnXTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAkcm93WydmaWxlbmFtZSddID0gJHJvd1snYXJjdXJsJ10gPSBHZXRGaWxlVXJsKCRyb3dbJ2lkJ10sJHJvd1sndHlwZWlkJ10sJHJvd1snc2VuZGRhdGUnXSwkcm93Wyd0aXRsZSddLDEsCiAgICAgICAgMCwkcm93WyduYW1lcnVsZSddLCRyb3dbJ3R5cGVkaXInXSwwLCcnLCRyb3dbJ21vcmVzaXRlJ10sJHJvd1snc2l0ZXVybCddLCRyb3dbJ3NpdGVwYXRoJ10pOwogICAgICAgICRyb3dbJ3RpdGxlJ109Y2hhbmd5YW5fYXV0b0NoYXJzZXQoJHJvd1sndGl0bGUnXSk7CiAgICAgICAgCiAgICAgICAgJGZlZWRBcnJbJ3RpdGxlJ109JHJvd1sndGl0bGUnXTsKICAgICAgICAkZmVlZEFyclsndXJsJ109JGNmZ19iYXNlaG9zdC4kcm93WydhcmN1cmwnXTsKICAgICAgICAkZmVlZEFyclsndHRpbWUnXT0gZGF0ZSgnWS1tLWQgaDptOnMnLCAgJHJvd1snc2VuZGRhdGUnXSk7CiAgICAgICAgJGZlZWRBcnJbJ3NvdXJjZWlkJ109JGFyclsnYWlkJ107CiAgICAgICAgJGZlZWRBcnJbJ3BhcmVudGlkJ109MDsKICAgICAgICAkZmVlZEFyclsnY2F0ZWdvcnlpZCddPSRyb3dbJ3R5cGVpZCddOwogICAgICAgICRmZWVkQXJyWydvd25lcmlkJ109JHJvd1snbWlkJ107CiAgICAgICAgJGZlZWRBcnJbJ21ldGFkYXRhJ109Jyc7CgogICAgICAgICRkc3FsLT5TZXRRdWVyeSgiU0VMRUNUIGZlZWRiYWNrX2lkIEZST00gYCNAX19wbHVzX2NoYW5neWFuX2ltcG9ydGlkc2AgV0hFUkUgYWlkPXskYXJyWydhaWQnXX0iKTsKICAgICAgICAkZHNxbC0+RXhlY3V0ZSgnZGQnKTsKICAgICAgICAkZmVlZGJhY2tfaWRzPWFycmF5KCk7CiAgICAgICAgd2hpbGUoJGZhcnIgPSAkZHNxbC0+R2V0QXJyYXkoJ2RkJykpCiAgICAgICAgewogICAgICAgICAgICAkZmVlZGJhY2tfaWRzW10gPSAkZmFyclsnZmVlZGJhY2tfaWQnXTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgJHNxdWVyeT0iU0VMRUNUICogRlJPTSBgI0BfX2ZlZWRiYWNrYCBXSEVSRSBhaWQ9eyRhcnJbJ2FpZCddfSBvcmRlciBieSBkdGltZSBhc2M7IjsKICAgICAgICAkZHNxbC0+U2V0UXVlcnkoJHNxdWVyeSk7CiAgICAgICAgJGRzcWwtPkV4ZWN1dGUoJ3h4Jyk7CiAgICAgICAgd2hpbGUoJGZSb3cgPSAkZHNxbC0+R2V0QXJyYXkoJ3h4JykpCiAgICAgICAgewogICAgICAgICAgICBpZiAoaW5fYXJyYXkoJGZSb3dbJ2lkJ10sICRmZWVkYmFja19pZHMpKSBjb250aW51ZTsKICAgICAgICAgICAgJGZlZWRBcnJbJ2NvbW1lbnRzJ11bXT1hcnJheSgKICAgICAgICAgICAgICAgICdjbXRpZCc9PiRmUm93WydpZCddLAogICAgICAgICAgICAgICAgJ2N0aW1lJz0+ZGF0ZSgnWS1tLWQgaDptOnMnLCAgJGZSb3dbJ2R0aW1lJ10pLAogICAgICAgICAgICAgICAgJ2NvbnRlbnQnPT5jaGFuZ3lhbl9RdW90ZV9yZXBsYWNlKGNoYW5neWFuX2F1dG9DaGFyc2V0KCRmUm93Wydtc2cnXSkpLAogICAgICAgICAgICAgICAgJ3JlcGx5aWQnPT4wLAogICAgICAgICAgICAgICAgJ3NwY291bnQnPT4kZlJvd1snZ29vZCddLAogICAgICAgICAgICAgICAgJ29wY291bnQnPT4kZlJvd1snYmFkJ10sCiAgICAgICAgICAgICAgICAndXNlcic9PmFycmF5KAogICAgICAgICAgICAgICAgICAgICd1c2VyaWQnPT4kZlJvd1snbWlkJ10sCiAgICAgICAgICAgICAgICAgICAgJ25pY2tuYW1lJz0+Y2hhbmd5YW5fYXV0b0NoYXJzZXQoJGZSb3dbJ3VzZXJuYW1lJ10pLAogICAgICAgICAgICAgICAgICAgICd1c2VyaWNvbic9PicnLAogICAgICAgICAgICAgICAgICAgICd1c2VydXJsJz0+JycsCiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICk7CiAgICAgICAgICAgICRpbnF1ZXJ5ID0gIklOU0VSVCBJTlRPIGAjQF9fcGx1c19jaGFuZ3lhbl9pbXBvcnRpZHNgKGBhaWRgLGBmZWVkYmFja19pZGApIFZBTFVFUyAoJ3skYXJyWydhaWQnXX0nLCd7JGZSb3dbJ2lkJ119JykiOwogICAgICAgICAgICAkcnMgPSAkZHNxbC0+RXhlY3V0ZU5vbmVRdWVyeSgkaW5xdWVyeSk7CiAgICAgICAgfQogICAgICAgIGlmIChjb3VudCgkZmVlZEFyclsnY29tbWVudHMnXSk8MSkgewogICAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CgogICAgICAgICRjb250ZW50PWpzb25fZW5jb2RlKCRmZWVkQXJyKTsKICAgICAgICAkbWQ1ID0gY2hhbmd5YW5faG1hY3NoYTEoJGNvbnRlbnQsICRpc3ZfYXBwX2tleSk7CgogICAgICAgICRwYXJhbXNBcnI9YXJyYXkoCiAgICAgICAgICAgICdhcHBpZCc9PiRjbGllbnRfaWQsIAogICAgICAgICAgICAnbWQ1Jz0+JG1kNSwgCiAgICAgICAgICAgICdqc29uZGF0YSc9PiRjb250ZW50KTsKICAgICAgICAkcnM9Y2hhbmd5YW5faHR0cF9zZW5kKENIQU5HWUFOX0FQSV9JTVBPUlQsMCwkcGFyYW1zQXJyKTsKICAgIH0KICAgIAogICAgJHN0YXJ0ID0kc3RhcnQrJHBhZ2VzaXplOwogICAgJGVuZCA9JHN0YXJ0KyRwYWdlc2l6ZTsKICAgIFNob3dNc2coIuaIkOWKn+WvvOWHuuivhOiuuuaVsOaNru+8jOaOpeS4i+adpeWvvOWFpVt7JHN0YXJ0fS17JGVuZH1d55qE6K+E6K665pWw5o2uIiwiP2RvcG9zdD1kZWRlY21zX3RvX2NoYW5neWFuJnN0YXJ0PXskc3RhcnR9Iik7CiAgICAvL2VjaG8ganNvbl9lbmNvZGUoJHJlc3VsdCk7CiAgICBleGl0KCk7Cn0gZWxzZWlmICgkZG9wb3N0PT0nY2hhbmd5YW5fdG9fZGVkZWNtcycpIHsKICAgIGlmKCFjaGFuZ3lhbl9pc2xvZ2luKCkpCiAgICB7CiAgICAgICAgU2hvd01zZygi5oKo5bCa5pyq55m75b2V55WF6KiA77yM6K+35YWI55m75b2V5ZCO57un57ut5L2/55So4oCm4oCm77yBIiwnPycpOwogICAgICAgIGV4aXQoKTsKICAgIH0KICAgICRsYXN0X2V4cG9ydD1jaGFuZ3lhbl9nZXRfc2V0dGluZygnbGFzdF9leHBvcnQnKTsKICAgIGlmIChlbXB0eSgkbGFzdF9leHBvcnQpKSB7CiAgICAgICAgJHN0YXJ0X2RhdGU9JzIwMTQtMDEtMDEgMDA6MDA6MDAnOwogICAgfSBlbHNlIHsKICAgICAgICAkc3RhcnRfZGF0ZT0gZGF0ZSgnWS1tLWQgSDppOnMnLCRsYXN0X2V4cG9ydCk7CiAgICB9CiAgICAvLyRzdGFydF9kYXRlPScyMDE0LTAxLTAxIDAwOjAwOjAwJzsKICAgICRyZWNlbnQgPSBjaGFuZ3lhbl9nZXRfcmVjZW50KCRjbGllbnRfaWQsICRzdGFydF9kYXRlKTsKICAgIC8vdmFyX2R1bXAoJHJlY2VudCk7ZXhpdDsKICAgIGlmIChjb3VudCgkcmVjZW50Wyd0b3BpY3MnXSk8PTApIHsKICAgICAgICBTaG93TXNnKCLmsqHmnInlj5HnjrDmlrDnmoTor4TorrrlhoXlrrnpnIDopoHlr7zlh7rvvIEiLC0xKTsKICAgICAgICBleGl0KCk7CiAgICB9CiAgICAkZXhwb3J0cz1hcnJheSgpOwogICAgZm9yZWFjaCAoJHJlY2VudFsndG9waWNzJ10gYXMgJHRvcGljKSB7CiAgICAgICAgJGV4cG9ydHNbXT1hcnJheSgKICAgICAgICAgICAgJ3RvcGljX2lkJz0+JHRvcGljWyd0b3BpY19pZCddLAogICAgICAgICAgICAnYWlkJz0+JHRvcGljWyd0b3BpY19zb3VyY2VfaWQnXSwKICAgICAgICAgICAgJ3RpdGxlJz0+JHRvcGljWyd0b3BpY190aXRsZSddLAogICAgICAgICk7CiAgICB9CiAgICBmb3JlYWNoICgkZXhwb3J0cyBhcyAkZXhwb3J0KSB7CiAgICAgICAgY2hhbmd5YW5faW5zZXJ0X2NvbW1lbnRzKGNoYW5neWFuX2dldF9jb21tZW50cyhjaGFuZ3lhbl9nZXRfc2V0dGluZygnYXBwaWQnKSwkZXhwb3J0Wyd0b3BpY19pZCddKSwkZXhwb3J0WydhaWQnXSwkZXhwb3J0Wyd0aXRsZSddKTsKICAgIH0KICAgIGNoYW5neWFuX3NldF9zZXR0aW5nKCdsYXN0X2V4cG9ydCcsIHRpbWUoKSk7CiAgICBTaG93TXNnKCLmiJDlip/lpIfku73nlYXoqIDor4TorrrliLBEZWRlQ01T57O757uf77yBIiwiP2RvcG9zdD1pbXBvcnQiKTsKICAgIGV4aXQoKTsKfSBlbHNlaWYgKCRkb3Bvc3Q9PSdjaGFuZ2VfYXBwaW5mbycpIHsKICAgIGlmICgkYWN0aW9uPT0nZG8nKSB7CiAgICAgICAgaWYgKGVtcHR5KCRhcHBJbmZvKSkgewogICAgICAgICAgICBTaG93TXNnKCLor7fpgInmi6nmraPnoa7nmoRBcHBJROS/oeaBr++8gSIsLTEpOwogICAgICAgICAgICBleGl0KCk7CiAgICAgICAgfQogICAgICAgIGxpc3QoJGFwcGlkLCRpc3ZfYXBwX2tleSk9ZXhwbG9kZSgnfCcsJGFwcEluZm8pOwogICAgICAgIGNoYW5neWFuX3NldF9zZXR0aW5nKCdhcHBpZCcsJGFwcGlkKTsKICAgICAgICBjaGFuZ3lhbl9zZXRfc2V0dGluZygnaXN2X2FwcF9rZXknLCRpc3ZfYXBwX2tleSk7CiAgICAgICAgJHVzZXI9Y2hhbmd5YW5fZ2V0X3NldHRpbmcoJ3VzZXInKTsKICAgICAgICAkc2lnbj1jaGFuZ3lhbl9nZW5fc2lnbigkdXNlcik7CiAgICAgICAgJHJlc3VsdCA9IGNoYW5neWFuX2dldGNvZGUoQ0hBTkdZQU5fQ0xJRU5UX0lELCAkdXNlciwgZmFsc2UsICRzaWduLCRhcHBpZCk7CiAgICAgICAgJGlzdl9pZCA9ICRyZXN1bHRbJ2lzdl9pZCddOwogICAgICAgIAogICAgICAgIGNoYW5neWFuX3NldF9zZXR0aW5nKCdpc3ZfaWQnLCRpc3ZfaWQpOwogICAgICAgIGNoYW5neWFuX2NsZWFyY2FjaGUoKTsKICAgICAgICAkaXN2X2lkID0gaW50dmFsKCRpc3ZfaWQpOwogICAgICAgICRjaGFuZ2dlX2lzdl91cmwgPSBDSEFOR1lBTl9BUElfQ0hBTkdFX0lTVi4kaXN2X2lkOwogICAgICAgIGVjaG8gPDw8RU9UCjxpZnJhbWUgc3JjPSJ7JGNoYW5nZ2VfaXN2X3VybH0iIHNjcm9sbGluZz0ibm8iIHdpZHRoPSIwIiBoZWlnaHQ9IjAiIHN0eWxlPSJib3JkZXI6bm9uZSI+PC9pZnJhbWU+CkVPVDsKICAgICAgICBTaG93TXNnKCLmiJDlip/orr7nva7mlrDnmoRBcHBJROWPikFQUEtFWe+8gSIsJz8nLDAsMzAwMCk7CiAgICAgICAgZXhpdCgpOwogICAgfQogICAgJGlzdnN0cj0iPHA+IOmAieaLqeaCqOmcgOimgeiuvue9rueahEFQUElE77yaPC9wPiI7CiAgICAkbXNnID0gPDw8RU9UCjx0YWJsZSB3aWR0aD0iOTglIiBib3JkZXI9IjAiIGNlbGxzcGFjaW5nPSIxIiBjZWxscGFkZGluZz0iMSI+CiAgPHRib2R5PgogICAgPHRyPgogICAgICA8dGQgY29sc3Bhbj0iMiIgaWQ9ImlzdnNDb250ZW50Ij4KICAgICAgPC90ZD4KICAgIDwvdHI+CiAgPC90Ym9keT4KPC90YWJsZT4KRU9UOwogICAgJGpxdWVyeV9zcmMgPSAgQ0hBTkdZQU5fSlFVRVJZX1NSQzsKICAgICRpc3ZzX2pzb25wID0gY2hhbmd5YW5fZ2V0X2lzdnNfanNvbnAoKTsKICAgIGVjaG8gPDw8RU9UCjxodG1sPgo8aGVhZD4KPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9eyRjZmdfc29mdF9sYW5nfSI+Cjx0aXRsZT7nlYXoqIDor4TorrrnrqHnkIY8L3RpdGxlPgo8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSJ7JGNmZ19wbHVzX2Rpcn0vaW1nL2Jhc2UuY3NzIj4KeyRqcXVlcnlfc3JjfQp7JGlzdnNfanNvbnB9CjwvaGVhZD4KPGJvZHkgYmFja2dyb3VuZD0neyRjZmdfcGx1c19kaXJ9L2ltZy9hbGxiZy5naWYnIGxlZnRtYXJnaW49IjgiIHRvcG1hcmdpbj0nOCc+Cjx0YWJsZSB3aWR0aD0iOTglIiBib3JkZXI9IjAiIGFsaWduPSJjZW50ZXIiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCIgYmdjb2xvcj0iI0RGRjlBQSI+CiAgPHRyPgogICAgPHRkIGhlaWdodD0iMjgiIHN0eWxlPSJib3JkZXI6MXB4IHNvbGlkICNEQURBREEiIGJhY2tncm91bmQ9J3skY2ZnX3BsdXNfZGlyfS9pbWcvd2JnLmdpZic+Jm5ic3A7PGI+PGEgaHJlZj0iPyI+4peH55WF6KiA6K+E6K665qih5Z2XIDwvYT4g44CL6YWN572uQVBQ5L+h5oGvPC9iPjwvdGQ+CiAgPC90cj4KICA8dHI+CiAgPHRkIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjgwIiBzdHlsZT0icGFkZGluZy10b3A6NXB4IiBiZ2NvbG9yPScjZmZmZmZmJz4KICA8c2NyaXB0IGxhbmd1YWdlPSdqYXZhc2NyaXB0Jz4KZnVuY3Rpb24gQ2hlY2tTdWJtaXQoKXsKCXJldHVybiB0cnVlOyAKfQo8L3NjcmlwdD4KICA8Zm9ybSBuYW1lPSdteWZvcm0nIG1ldGhvZD0nUE9TVCcgb25TdWJtaXQ9J3JldHVybiBDaGVja1N1Ym1pdCgpOycgYWN0aW9uPSc/Jz4KICAKICA8aW5wdXQgdHlwZT0naGlkZGVuJyBuYW1lPSdkb3Bvc3QnIHZhbHVlPSdjaGFuZ2VfYXBwaW5mbyc+CiAgPGlucHV0IHR5cGU9J2hpZGRlbicgbmFtZT0nYWN0aW9uJyB2YWx1ZT0nZG8nPgogIDx0YWJsZSB3aWR0aD0nMTAwJScgIGJvcmRlcj0nMCcgY2VsbHBhZGRpbmc9JzMnIGNlbGxzcGFjaW5nPScxJyBiZ2NvbG9yPScjREFEQURBJz4KICAgIDx0ciBiZ2NvbG9yPScjREFEQURBJz4KICAgICAgPHRkIGNvbHNwYW49JzInIGJhY2tncm91bmQ9J3skY2ZnX3BsdXNfZGlyfS9pbWcvd2JnLmdpZicgaGVpZ2h0PScyNic+PGZvbnQgY29sb3I9JyM2NjY2MDAnPjxiPueVheiogOivhOiuuueuoeeQhjwvYj48L2ZvbnQ+PC90ZD4KICAgIDwvdHI+CiAgICA8dHIgYmdjb2xvcj0nI0ZGRkZGRic+CiAgICAgIDx0ZCBjb2xzcGFuPScyJyAgaGVpZ2h0PScxMDAnPgogICAgICB7JG1zZ30KICAgICAgPC90ZD4KICAgIDwvdHI+CiAgICA8dHI+CiAgICAgIDx0ZCBjb2xzcGFuPScyJyBiZ2NvbG9yPScjRjlGQ0VGJz48dGFibGUgd2lkdGg9JzI3MCcgYm9yZGVyPScwJyBjZWxscGFkZGluZz0nMCcgY2VsbHNwYWNpbmc9JzAnPgogICAgICAgICAgPHRyIGFsaWduPSdjZW50ZXInIGhlaWdodD0nMjgnPgogICAgICAgICAgICA8dGQgd2lkdGg9JzkwJz48aW5wdXQgbmFtZT0naW1hZ2VGaWVsZDEnIHR5cGU9J2ltYWdlJyBjbGFzcz0nbnAnIHNyYz0neyRjZmdfcGx1c19kaXJ9L2ltZy9idXR0b25fb2suZ2lmJyB3aWR0aD0nNjAnIGhlaWdodD0nMjInIGJvcmRlcj0nMCcgLz48L3RkPgogICAgICAgICAgICA8dGQgd2lkdGg9JzkwJz48YSBocmVmPSc/ZG9wb3N0PWFkZHNpdGUnIHN0eWxlPSJjb2xvcjpibHVlIj7liJvlu7pBUFAgSUQ8L2E+PC90ZD4KICAgICAgICAgICAgPHRkPjxhIGhyZWY9Jz8nIHN0eWxlPSJjb2xvcjpibHVlIj7ov5Tlm57kuIrkuIDpobU8L2E+PC90ZD4KICAgICAgICAgIDwvdHI+CiAgICAgICAgPC90YWJsZT48L3RkPgogICAgPC90cj4KICA8L3RhYmxlPgogIDwvdGQ+CiAgPC90cj4KPC90YWJsZT4KPHAgYWxpZ249ImNlbnRlciI+IDxicj4KICA8YnI+CjwvcD4KPC9ib2R5Pgo8L2h0bWw+CkVPVDsKfSBlbHNlaWYgKCRkb3Bvc3Q9PSdjaGVja3VwZGF0ZScpCnsKICAgICRnZXRfbGF0ZXN0X3ZlciA9IGNoYW5neWFuX2h0dHBfc2VuZChDSEFOR1lBTl9BUElfQUVTLidpbmRleC5waHA/Yz13ZWxjb21lJm09Z2V0X2xhdGVzdF92ZXInKTsKICAgIGlmKHZlcnNpb25fY29tcGFyZSgkZ2V0X2xhdGVzdF92ZXIsIENIQU5HWUFOX1ZFUiwnPicpKQogICAgewogICAgICAgIFNob3dNc2coIuajgOafpeWIsOacieacgOaWsOeJiOacrO+8jOivt+WJjeWOu+S4i+i9ve+8gTxiciAvPjxhIGhyZWY9J2h0dHA6Ly9iYnMuZGVkZWNtcy5jb20vNjUwMjAzLmh0bWwnIHRhcmdldD0nX2JsYW5rJyBzdHlsZT0nY29sb3I6Ymx1ZSc+54K55Ye75YmN5Y675LiL6L29PC9hPiA8YSBocmVmPSc/JyA+6L+U5ZuePC9hPiIsImphdmFzY3JpcHQ6OyIpOwogICAgICAgIGV4aXQoKTsKICAgIH0gZWxzZSB7CiAgICAgICAgU2hvd01zZygiPHA+5b2T5YmN5Li65pyA5paw54mI5pys77yM5peg6aG75LiL6L295pu05paw77yBPC9wPiA8cD48YSBocmVmPSc/JyA+6L+U5Zue5LiK5LiA6aG1PC9hPjwvcD4iLCJqYXZhc2NyaXB0OjsiKTsKICAgICAgICBleGl0KCk7CiAgICB9CiAgICBleGl0KCk7Cn0gZWxzZWlmICgkZG9wb3N0PT0nY2xlYXJjYWNoZScpCnsKICAgIGNoYW5neWFuX2NsZWFyY2FjaGUoKTsKICAgIFNob3dNc2coIuaIkOWKn+a4heepuuagh+etvue8k+WtmO+8gSIsIj8iKTsKICAgIGV4aXQoKTsKfSBlbHNlaWYgKCRkb3Bvc3Q9PSdsb2dvdXQnKQp7CiAgICBlY2hvIDw8PEVPVAo8aWZyYW1lIHNyYz0iaHR0cDovL2NoYW5neWFuLmt1YWl6aGFuLmNvbS9sb2dvdXQiIHNjcm9sbGluZz0ibm8iIHdpZHRoPSIwIiBoZWlnaHQ9IjAiPjwvaWZyYW1lPgpFT1Q7CiAgICAkX1NFU1NJT05bJ2NoYW5neWFuJ10gPSAwOwogICAgJF9TRVNTSU9OWyd1c2VyJ10gPSAnJzsKICAgIAogICAgdW5zZXQoJF9TRVNTSU9OWydjaGFuZ3lhbiddKTsKICAgIHVuc2V0KCRfU0VTU0lPTlsndXNlciddKTsKICAgIGlmKCRub21zZykKICAgIHsKICAgICAgICBoZWFkZXIoJ0xvY2F0aW9uOj9mb3J3YXJkPScuJGZvcndhcmQpOwogICAgICAgIGV4aXQ7CiAgICB9IGVsc2UgewogICAgICAgIGNoYW5neWFuX3NldF9zZXR0aW5nKCdwd2QnLCAnJyk7CiAgICB9CiAgICBTaG93TXNnKCLmiJDlip/pgIDlh7rnlYXoqIDvvIEiLCc/Jyk7CiAgICBleGl0KCk7Cn0gZWxzZWlmKCRkb3Bvc3Q9PSdmb3JnZXQtcHdkJykKewogICAgaWYoJGFjdGlvbj09J2RvJykKICAgIHsKICAgICAgICAkdXNlciA9IGVtcHR5KCR1c2VyKT8gJycgOiAkdXNlcjsKICAgICAgICBpZihlbXB0eSgkdXNlcikgQU5EICFDaGVja0VtYWlsKCR1c2VyKSkKICAgICAgICB7CiAgICAgICAgICAgIFNob3dNc2coIuivt+Whq+WGmeato+ehruagvOW8j+eahEUtbWFpbO+8gSIsLTEpOwogICAgICAgICAgICBleGl0KCk7CiAgICAgICAgfQogICAgICAgICRlcnJvcl9tc2c9Jyc7CiAgICAgICAgaWYoY2hhbmd5YW5fZm9yZ2V0X3B3ZCgkdXNlciwgJGVycm9yX21zZykpCiAgICAgICAgewogICAgICAgICAgICBTaG93TXNnKCI8cD7miJDlip/lj5HpgIHlr4bnoIHmib7lm57pgq7ku7bvvIzor7fnmbvlvZVbeyR1c2VyfV3mn6XmlLbvvIE8L3A+PHA+PGEgaHJlZj0nPycgPui/lOWbnuS4iuS4gOmhtTwvYT48L3A+IiwnamF2YXNjcmlwdDo7Jyk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgU2hvd01zZygi5a+G56CB5om+5Zue6ZSZ6K+v77yaeyRlcnJvcl9tc2d977yBIiwtMSk7CiAgICAgICAgfQogICAgICAgIGV4aXQ7CiAgICB9CiAgICAkdXNlciA9IGNoYW5neWFuX2dldF9zZXR0aW5nKCd1c2VyJyk7CiAgICAkbXNnID0gPDw8RU9UCjxodG1sPgo8aGVhZD4KPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9eyRjZmdfc29mdF9sYW5nfSI+Cjx0aXRsZT7nlYXoqIDor4TorrrnrqHnkIY8L3RpdGxlPgo8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSJ7JGNmZ19wbHVzX2Rpcn0vaW1nL2Jhc2UuY3NzIj4KPC9oZWFkPgo8Ym9keSBiYWNrZ3JvdW5kPSd7JGNmZ19wbHVzX2Rpcn0vaW1nL2FsbGJnLmdpZicgbGVmdG1hcmdpbj0iOCIgdG9wbWFyZ2luPSc4Jz4KPHRhYmxlIHdpZHRoPSI5OCUiIGJvcmRlcj0iMCIgYWxpZ249ImNlbnRlciIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIiBiZ2NvbG9yPSIjREZGOUFBIj4KICA8dHI+CiAgICA8dGQgaGVpZ2h0PSIyOCIgc3R5bGU9ImJvcmRlcjoxcHggc29saWQgI0RBREFEQSIgYmFja2dyb3VuZD0neyRjZmdfcGx1c19kaXJ9L2ltZy93YmcuZ2lmJz4mbmJzcDs8Yj7il4c8YSBocmVmPSI/Ij7nlYXoqIDor4TorrrmqKHlnZcgPC9hPiDjgIvmib7lm57lr4bnoIE8L2I+PC90ZD4KICA8L3RyPgogIDx0cj4KICAKICA8dGQgd2lkdGg9IjEwMCUiIGhlaWdodD0iODAiIHN0eWxlPSJwYWRkaW5nLXRvcDo1cHgiIGJnY29sb3I9JyNmZmZmZmYnPgogIAogIDxzY3JpcHQgbGFuZ3VhZ2U9J2phdmFzY3JpcHQnPgpmdW5jdGlvbiBDaGVja1N1Ym1pdCgpewogICAgcmV0dXJuIHRydWU7IAp9Cjwvc2NyaXB0PgogIDxmb3JtIG5hbWU9J215Zm9ybScgbWV0aG9kPSdQT1NUJyBvblN1Ym1pdD0ncmV0dXJuIENoZWNrU3VibWl0KCk7JyBhY3Rpb249Jz8nPgogIAogIDxpbnB1dCB0eXBlPSdoaWRkZW4nIG5hbWU9J2RvcG9zdCcgdmFsdWU9J2ZvcmdldC1wd2QnPgogIDxpbnB1dCB0eXBlPSdoaWRkZW4nIG5hbWU9J2FjdGlvbicgdmFsdWU9J2RvJz4KICA8dGFibGUgd2lkdGg9JzEwMCUnICBib3JkZXI9JzAnIGNlbGxwYWRkaW5nPSczJyBjZWxsc3BhY2luZz0nMScgYmdjb2xvcj0nI0RBREFEQSc+CiAgICA8dHIgYmdjb2xvcj0nI0RBREFEQSc+CiAgICAgIDx0ZCBjb2xzcGFuPScyJyBiYWNrZ3JvdW5kPSd7JGNmZ19wbHVzX2Rpcn0vaW1nL3diZy5naWYnIGhlaWdodD0nMjYnPjxmb250IGNvbG9yPScjNjY2NjAwJz48Yj7nlYXoqIDor4TorrrnrqHnkIY8L2I+PC9mb250PjwvdGQ+CiAgICA8L3RyPgogICAgPHRyIGJnY29sb3I9JyNGRkZGRkYnPgogICAgICA8dGQgY29sc3Bhbj0nMicgIGhlaWdodD0nMTAwJz48dGFibGUgd2lkdGg9Ijk4JSIgYm9yZGVyPSIwIiBjZWxsc3BhY2luZz0iMSIgY2VsbHBhZGRpbmc9IjEiPgogICAgICAgICAgPHRib2R5PgogICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgPHRkIHdpZHRoPSIxNiUiIGhlaWdodD0iMzAiPumCrueuse+8mjwvdGQ+CiAgICAgICAgICAgICAgPHRkIHdpZHRoPSI4NCUiIHN0eWxlPSJ0ZXh0LWFsaWduOmxlZnQ7Ij48aW5wdXQgbmFtZT0idXNlciIgdHlwZT0idGV4dCIgaWQ9InVzZXIiIHNpemU9IjE2IiBzdHlsZT0id2lkdGg6MjAwcHgiIHZhbHVlPSJ7JHVzZXJ9IiAvPgogICAgICAgICAgICAgICAg6K+35aGr5YaZ5oKo55qE5rOo5YaM6YKu566xPC90ZD4KICAgICAgICAgICAgPC90cj4KICAgICAgICAgIDwvdGJvZHk+CiAgICAgICAgPC90YWJsZT48L3RkPgogICAgPC90cj4KICAgIDx0cj4KICAgICAgPHRkIGNvbHNwYW49JzInIGJnY29sb3I9JyNGOUZDRUYnPjx0YWJsZSB3aWR0aD0nMTAwJScgYm9yZGVyPScwJyBjZWxscGFkZGluZz0nMCcgY2VsbHNwYWNpbmc9JzAnPgogICAgICAgICAgPHRyIGFsaWduPSdjZW50ZXInIGhlaWdodD0nMjgnPgogICAgICAgICAgICA8dGQgd2lkdGg9JzE2JSc+PC90ZD4KICAgICAgICAgICAgPHRkIHdpZHRoPSc4NCUnIHN0eWxlPSJ0ZXh0LWFsaWduOiBsZWZ0OyI+PGlucHV0IG5hbWU9J2ltYWdlRmllbGQxJyB0eXBlPSdpbWFnZScgY2xhc3M9J25wJyBzcmM9J3skY2ZnX3BsdXNfZGlyfS9pbWcvYnV0dG9uX29rLmdpZicgd2lkdGg9JzYwJyBoZWlnaHQ9JzIyJyBib3JkZXI9JzAnIC8+PC90ZD4KICAgICAgICAgICAgPHRkPjwvdGQ+CiAgICAgICAgICA8L3RyPgogICAgICAgIDwvdGFibGU+PC90ZD4KICAgIDwvdHI+CiAgPC90YWJsZT4KICA8L3RkPgogIDwvdHI+CjwvdGFibGU+CjwvYm9keT4KPC9odG1sPgpFT1Q7CiAgICBlY2hvICRtc2c7CiAgICBleGl0Owp9IGVsc2UgewogICAgJHVzZXIgPSBjaGFuZ3lhbl9nZXRfc2V0dGluZygndXNlcicpOwogICAgJGNoYW5neWFuX3ZlciA9IENIQU5HWUFOX1ZFUjsKICAgIGlmKGVtcHR5KCR1c2VyKSkgJHVzZXI9Jyc7CiAgICAkbXNnID0gPDw8RU9UCjxodG1sPgo8aGVhZD4KPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9eyRjZmdfc29mdF9sYW5nfSI+Cjx0aXRsZT7nlYXoqIDor4TorrrnrqHnkIY8L3RpdGxlPgo8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSJ7JGNmZ19wbHVzX2Rpcn0vaW1nL2Jhc2UuY3NzIj4KPC9oZWFkPgo8Ym9keSBiYWNrZ3JvdW5kPSd7JGNmZ19wbHVzX2Rpcn0vaW1nL2FsbGJnLmdpZicgbGVmdG1hcmdpbj0iOCIgdG9wbWFyZ2luPSc4Jz4KPHRhYmxlIHdpZHRoPSI5OCUiIGJvcmRlcj0iMCIgYWxpZ249ImNlbnRlciIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIiBiZ2NvbG9yPSIjREZGOUFBIj4KICA8dHI+CiAgICA8dGQgaGVpZ2h0PSIyOCIgc3R5bGU9ImJvcmRlcjoxcHggc29saWQgI0RBREFEQSIgYmFja2dyb3VuZD0neyRjZmdfcGx1c19kaXJ9L2ltZy93YmcuZ2lmJz4mbmJzcDs8Yj7il4fnlYXoqIDor4TorrrmqKHlnZcg44CLPC9iPjwvdGQ+CiAgPC90cj4KICA8dHI+CiAgCiAgPHRkIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjgwIiBzdHlsZT0icGFkZGluZy10b3A6NXB4IiBiZ2NvbG9yPScjZmZmZmZmJz4KICAKICA8c2NyaXB0IGxhbmd1YWdlPSdqYXZhc2NyaXB0Jz4KZnVuY3Rpb24gQ2hlY2tTdWJtaXQoKXsKICAgIHJldHVybiB0cnVlOyAKfQo8L3NjcmlwdD4KICA8Zm9ybSBuYW1lPSdteWZvcm0nIG1ldGhvZD0nUE9TVCcgb25TdWJtaXQ9J3JldHVybiBDaGVja1N1Ym1pdCgpOycgYWN0aW9uPSc/Jz4KICAKICA8aW5wdXQgdHlwZT0naGlkZGVuJyBuYW1lPSdkb3Bvc3QnIHZhbHVlPSdsb2dpbic+CiAgPHRhYmxlIHdpZHRoPScxMDAlJyAgYm9yZGVyPScwJyBjZWxscGFkZGluZz0nMycgY2VsbHNwYWNpbmc9JzEnIGJnY29sb3I9JyNEQURBREEnPgogICAgPHRyIGJnY29sb3I9JyNEQURBREEnPgogICAgICA8dGQgY29sc3Bhbj0nMicgYmFja2dyb3VuZD0neyRjZmdfcGx1c19kaXJ9L2ltZy93YmcuZ2lmJyBoZWlnaHQ9JzI2Jz48Zm9udCBjb2xvcj0nIzY2NjYwMCc+PGI+55WF6KiA6K+E6K66566h55CGPC9iPjwvZm9udD48L3RkPgogICAgPC90cj4KICAgIDx0ciBiZ2NvbG9yPScjRkZGRkZGJz4KICAgICAgPHRkIGNvbHNwYW49JzInICBoZWlnaHQ9JzEwMCc+PHRhYmxlIHdpZHRoPSI5OCUiIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjEiIGNlbGxwYWRkaW5nPSIxIj4KICAgICAgICAgIDx0Ym9keT4KICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgIDx0ZCB3aWR0aD0iMTYlIiBoZWlnaHQ9IjMwIj7niYjmnKzvvJo8L3RkPgogICAgICAgICAgICAgIDx0ZCB3aWR0aD0iODQlIiBzdHlsZT0idGV4dC1hbGlnbjpsZWZ0OyI+PHNwYW4gc3R5bGU9J2NvbG9yOmJsYWNrJz48aWZyYW1lIG5hbWU9J3N0YWZybScgc3JjPSdodHRwOi8vY2hhbmd5YW4uYXBpLmRlZGVjbXMuY29tL2luZGV4LnBocD9jPXdlbGNvbWUmbT1uZXdfdmVyJnZlcj17JGNoYW5neWFuX3Zlcn0mc2l0ZXVybD17JHNpdGV1cmwyfSZmZWVkYmFja190b3RhbD17JGZlZWRiYWNrX3RvdGFsfScgZnJhbWVib3JkZXI9JzAnIGlkPSdzdGFmcm0nIHdpZHRoPSc5OCUnIGhlaWdodD0nMjInPjwvaWZyYW1lPjwvc3Bhbj48L3RkPgogICAgICAgICAgICA8L3RyPgogICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgPHRkIHdpZHRoPSIxNiUiIGhlaWdodD0iMzAiPumCrueuse+8mjwvdGQ+CiAgICAgICAgICAgICAgPHRkIHdpZHRoPSI4NCUiIHN0eWxlPSJ0ZXh0LWFsaWduOmxlZnQ7Ij48aW5wdXQgbmFtZT0idXNlciIgdHlwZT0idGV4dCIgaWQ9InVzZXIiIHNpemU9IjE2IiBzdHlsZT0id2lkdGg6MjAwcHgiIHZhbHVlPSJ7JHVzZXJ9IiAvPgogICAgICAgICAgICAgICAgPGEgaHJlZj0iP2RvcG9zdD1yZWciIHN0eWxlPSJjb2xvcjpibHVlIj7lhY3otLnms6jlhow8L2E+IO+8jOiOt+WPluS4k+S4mueahOivhOiuuuacjeWKoTwvdGQ+CiAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICA8dGQgaGVpZ2h0PSIzMCI+5a+G56CB77yaPC90ZD4KICAgICAgICAgICAgICA8dGQgc3R5bGU9InRleHQtYWxpZ246bGVmdDsiPjxpbnB1dCBuYW1lPSJwd2QiIHR5cGU9InBhc3N3b3JkIiBpZD0icHdkIiBzaXplPSIxNiIgc3R5bGU9IndpZHRoOjIwMHB4Ij4KICAgICAgICAgICAgICAgPGEgaHJlZj0iP2RvcG9zdD1mb3JnZXQtcHdkIiBzdHlsZT0iY29sb3I6Ymx1ZSI+5b+Y6K6w5a+G56CBPC9hPiAmbmJzcDsgPC90ZD4KICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgPCEtLTx0cj4KICAgICAgPHRkIGhlaWdodD0iMzAiPuiusOS9j+Wvhuegge+8mjwvdGQ+CiAgICAgIDx0ZCBzdHlsZT0idGV4dC1hbGlnbjpsZWZ0OyI+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSJybXB3ZCIgaWQ9InJtcHdkIiAvPgogICAgICAgIDxsYWJlbCBmb3I9InJtcHdkIj7kuIvmrKHnmbvlvZXkuI3nlKjlho3ovpPlhaXvvIjkuI3mjqjojZDvvIk8L2xhYmVsPjwvdGQ+CiAgICA8L3RyPi0tPgogICAgICAgICAgPC90Ym9keT4KICAgICAgICA8L3RhYmxlPjwvdGQ+CiAgICA8L3RyPgogICAgPHRyPgogICAgICA8dGQgY29sc3Bhbj0nMicgYmdjb2xvcj0nI0Y5RkNFRic+PHRhYmxlIHdpZHRoPScxMDAlJyBib3JkZXI9JzAnIGNlbGxwYWRkaW5nPScwJyBjZWxsc3BhY2luZz0nMCc+CiAgICAgICAgICA8dHIgYWxpZ249J2NlbnRlcicgaGVpZ2h0PScyOCc+CiAgICAgICAgICAgIDx0ZCB3aWR0aD0nMTYlJz48L3RkPgogICAgICAgICAgICA8dGQgd2lkdGg9Jzg0JScgc3R5bGU9InRleHQtYWxpZ246IGxlZnQ7Ij48aW5wdXQgbmFtZT0naW1hZ2VGaWVsZDEnIHR5cGU9J2ltYWdlJyBjbGFzcz0nbnAnIHNyYz0neyRjZmdfcGx1c19kaXJ9L2ltZy9idXR0b25fb2suZ2lmJyB3aWR0aD0nNjAnIGhlaWdodD0nMjInIGJvcmRlcj0nMCcgLz48L3RkPgogICAgICAgICAgICA8dGQ+PC90ZD4KICAgICAgICAgIDwvdHI+CiAgICAgICAgPC90YWJsZT48L3RkPgogICAgPC90cj4KICA8L3RhYmxlPgogIDwvdGQ+CiAgPC90cj4KPC90YWJsZT4KPC9ib2R5Pgo8L2h0bWw+CkVPVDsKICAgIGlmKGNoYW5neWFuX2lzbG9naW4oKSkKICAgIHsKICAgICAgICAkY2hhbmd5YW5fdmVyID0gQ0hBTkdZQU5fVkVSOwogICAgICAgICRsb2dpbl91cmw9Q0hBTkdZQU5fQVBJX1NFVENPT0tJRS4nP2NsaWVudF9pZD0nLkNIQU5HWUFOX0NMSUVOVF9JRC4nJnRva2VuPScuJF9TRVNTSU9OWydjaGFuZ3lhbiddOwogICAgICAgICRsb2dpbl9zdHIgPSA8PDxFT1QKPGlmcmFtZSBzcmM9InskbG9naW5fdXJsfSIgc2Nyb2xsaW5nPSJubyIgd2lkdGg9IjAiIGhlaWdodD0iMCIgc3R5bGU9ImJvcmRlcjpub25lIj48L2lmcmFtZT4KRU9UOwogICAgICAgIAogICAgICAgICRpc3ZfYXBwX2tleSA9IGNoYW5neWFuX2dldF9zZXR0aW5nKCdpc3ZfYXBwX2tleScpOwogICAgICAgICRpc3ZfaWQgPSBjaGFuZ3lhbl9nZXRfc2V0dGluZygnaXN2X2lkJyk7CiAgICAgICAgJGlzdl9pZCA9IGludHZhbCgkaXN2X2lkKTsKICAgICAgICAkY2hhbmdnZV9pc3ZfdXJsID0gQ0hBTkdZQU5fQVBJX0NIQU5HRV9JU1YuJGlzdl9pZDsKICAgICAgICAkaXN2X2FwcF9rZXkgPSBjaGFuZ3lhbl9nZXRfaXN2X2FwcF9rZXkoKTsKICAgICAgICAkc2l0ZXVybDIgPSB1cmxlbmNvZGUoJGNmZ19iYXNlaG9zdCk7CiAgICAgICAgJHJvd2NvdW50ID0gJGRzcWwtPkdldE9uZSgiU0VMRUNUIENPVU5UKCopIEFTIGRkIEZST00gYCNAX19mZWVkYmFja2AiKTsKICAgICAgICAkZmVlZGJhY2tfdG90YWwgPSBpc3NldCgkcm93Y291bnRbJ2RkJ10pPyAkcm93Y291bnRbJ2RkJ10gOiAwOwogICAgICAgICRjaGFuZ2VfaXN2X2lkID0gPDw8RU9UCjxkaXYgaWQ9ImNoYW5nZV9pc3YiPjwvZGl2Pgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CnNldFRpbWVvdXQoZnVuY3Rpb24oKXt2YXIgY2hhbmdlX2lzdl9kaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2hhbmdlX2lzdiIpO2NoYW5nZV9pc3ZfZGl2LmlubmVySFRNTD0nPGlmcmFtZSBzcmM9InskY2hhbmdnZV9pc3ZfdXJsfSIgc2Nyb2xsaW5nPSJubyIgd2lkdGg9IjAiIGhlaWdodD0iMCIgc3R5bGU9ImJvcmRlcjpub25lIj48L2lmcmFtZT4nO30sMTAwKTsKPC9zY3JpcHQ+CkVPVDsKICAgICAgICBpZighZW1wdHkoJGZvcndhcmQpKQogICAgICAgIHsKICAgICAgICAgICAgZWNobyA8PDxFT1QKICAgICAgICAgICAgPGRpdiBzdHlsZT0iZm9udC1zaXplOiAxMnB4O3BhZGRpbmc6IDIwcHg7Ym9yZGVyOiAxcHggc29saWQgI0RERDsiPueVheiogOaooeWdl+iHquWKqOeZu+W9leS4re+8jOivt+iAkOW/g+etieW+heKApuKApjwvZGl2Pgp7JGxvZ2luX3N0cn0KeyRjaGFuZ2VfaXN2X2lkfQo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CnNldFRpbWVvdXQoZnVuY3Rpb24oKXt3aW5kb3cubG9jYXRpb24uaHJlZj0nP2RvcG9zdD17JGZvcndhcmR9Jzt9LDUwMCk7Cjwvc2NyaXB0PgpFT1Q7CiAgICAgICAgICAgIGV4aXQoKTsKICAgICAgICB9CiAgICAgICAgJGFjY291bnRfc3RyID0gcHJlZ19tYXRjaCgiI0BkZWRlY21zJCMiLCRfU0VTU0lPTlsndXNlciddKT8gIjxhIGhyZWY9Jz9kb3Bvc3Q9YmluZCcgc3R5bGU9J2NvbG9yOmJsdWUnPlvnu5HlrprotKblj7ddPC9hPiA8Zm9udCBjb2xvcj0ncmVkJz7kuLrkuobkv53or4HmgqjnmoTor4TorrrlronlhajvvIzlu7rorq7nu5HlrprotKblj7c8L2ZvbnQ+IiA6CiAgICAgICAgIjxhIGhyZWY9Jz9kb3Bvc3Q9bG9nb3V0JyBzdHlsZT0nY29sb3I6Ymx1ZSc+W+WIh+aNoui0puWPt108L2E+IjsKICAgICAgICAkbXNnID0gPDw8RU9UCjx0YWJsZSB3aWR0aD0iOTglIiBib3JkZXI9IjAiIGNlbGxzcGFjaW5nPSIxIiBjZWxscGFkZGluZz0iMSI+CiAgPHRib2R5PgogICAgPHRyPgogICAgICA8dGQgd2lkdGg9IjE2JSIgaGVpZ2h0PSIzMCI+55m75b2V55So5oi377yaPC90ZD4KICAgICAgPHRkIHdpZHRoPSI4NCUiIHN0eWxlPSJ0ZXh0LWFsaWduOmxlZnQ7Ij57JF9TRVNTSU9OWyd1c2VyJ119IHskYWNjb3VudF9zdHJ9IDwhLS08YSBocmVmPSc/ZG9wb3N0PWxvZ291dCcgc3R5bGU9J2NvbG9yOmJsdWUnPlvpgIDlh7pdPC9hPi0tPjwvdGQ+CiAgICA8L3RyPgogICAgPHRyPgogICAgICA8dGQgd2lkdGg9IjE2JSIgaGVpZ2h0PSIzMCI+55WF6KiA5qih5Z2X54mI5pys77yaPC90ZD4KICAgICAgPHRkIHdpZHRoPSI4NCUiIHN0eWxlPSJ0ZXh0LWFsaWduOmxlZnQ7Ij48c3BhbiBzdHlsZT0nY29sb3I6YmxhY2snPjxpZnJhbWUgbmFtZT0nc3RhZnJtJyBzcmM9J2h0dHA6Ly9jaGFuZ3lhbi5hcGkuZGVkZWNtcy5jb20vaW5kZXgucGhwP2M9d2VsY29tZSZtPW5ld192ZXImdmVyPXskY2hhbmd5YW5fdmVyfSZzaXRldXJsPXskc2l0ZXVybDJ9JmZlZWRiYWNrX3RvdGFsPXskZmVlZGJhY2tfdG90YWx9JyBmcmFtZWJvcmRlcj0nMCcgaWQ9J3N0YWZybScgd2lkdGg9Jzk4JScgaGVpZ2h0PScyMic+PC9pZnJhbWU+PC9zcGFuPjwvdGQ+CiAgICA8L3RyPgogICAgPHRyPgogICAgICA8dGQgd2lkdGg9IjE2JSIgaGVpZ2h0PSIzMCI+QXBwIElE77yaPC90ZD4KICAgICAgPHRkIHdpZHRoPSI4NCUiIHN0eWxlPSJ0ZXh0LWFsaWduOmxlZnQ7Ij48aW5wdXQgY2xhc3M9ImlucHV0LXhsYXJnZSIgdHlwZT0idGV4dCIgdmFsdWU9InskY2xpZW50X2lkfSIgZGlzYWJsZWQ9ImRpc2FibGVkLyIgc3R5bGU9IndpZHRoOjI2MHB4Ij4gPGEgaHJlZj0nP2RvcG9zdD1jaGFuZ2VfYXBwaW5mbycgc3R5bGU9J2NvbG9yOmJsdWUnPlvkv67mlLldPC9hPiA8c3BhbiBzdHlsZT0iY29sb3I6Izk5OSI+Jm5ic3A7QVBQIElE55So5LqO5YiH5o2i5LiN5ZCM55qE56uZ54K5PC9zcGFuPjwvdGQ+CiAgICA8L3RyPgogICAgPHRyPgogICAgICA8dGQgd2lkdGg9IjE2JSIgaGVpZ2h0PSIzMCI+QVBQIEtlee+8mjwvdGQ+CiAgICAgIDx0ZCB3aWR0aD0iODQlIiBzdHlsZT0idGV4dC1hbGlnbjpsZWZ0OyI+PGlucHV0IGNsYXNzPSJpbnB1dC14bGFyZ2UiIHR5cGU9InRleHQiIHZhbHVlPSJ7JGlzdl9hcHBfa2V5fSIgZGlzYWJsZWQ9ImRpc2FibGVkLyIgc3R5bGU9IndpZHRoOjI2MHB4Ij4gIDwvdGQ+CiAgICA8L3RyPgogICAgPHRyPgogICAgICA8dGQgaGVpZ2h0PSIzMCIgY29sc3Bhbj0iMiI+5oKo5bey5oiQ5Yqf55m75b2V55WF6KiA77yB5oKo5Y+v5Lul6L+b6KGM5Lul5LiL5pON5L2c77yaPC90ZD4KICAgIDwvdHI+CiAgICA8dHI+CiAgICAgIDx0ZCBoZWlnaHQ9IjMwIiBjb2xzcGFuPSIyIj4KICAgICAgPGEgaHJlZj0nP2RvcG9zdD1tYW5hZ2UnIHN0eWxlPSdjb2xvcjpibHVlJz5b6K+E6K66566h55CGXTwvYT4gCiAgICAgIDxhIGhyZWY9Jz9kb3Bvc3Q9c3RhdCcgc3R5bGU9J2NvbG9yOmJsdWUnPlvmlbDmja7nu5/orqFdPC9hPiAKICAgICAgPGEgaHJlZj0nP2RvcG9zdD1pbXBvcnQnIHN0eWxlPSdjb2xvcjpibHVlJz5b5a+85YWl5a+85Ye6XTwvYT4gCiAgICAgIDxhIGhyZWY9Jz9kb3Bvc3Q9Y2xlYXJjYWNoZScgc3R5bGU9J2NvbG9yOmJsdWUnPlvmuIXnqbrnvJPlrZhdPC9hPiAKICAgICAgPGEgaHJlZj0nP2RvcG9zdD1zZXR0aW5nJyBzdHlsZT0nY29sb3I6Ymx1ZSc+W+eVheiogOiuvue9rl08L2E+IAogICAgICA8L3RkPgogICAgPC90cj4KPHRyPgogICAgICA8dGQgaGVpZ2h0PSIzMCIgY29sc3Bhbj0iMiI+CiAgIDxocj4KICAg5L2/55So6K+05piO77yaPGJyPgogICDlnKjlr7nlupTmqKHmnb/kuK3kvb/nlKjmoIfnrb7vvJo8Zm9udCBjb2xvcj0icmVkIj57ZGVkZTpjaGFuZ3lhbi99PC9mb250Pu+8jOebtOaOpei/m+ihjOiwg+eUqOWNs+WPr++8jOagt+W8j+iuvuWumuWPr+eCueWHuzxhIGhyZWY9Jz9kb3Bvc3Q9c2V0dGluZycgc3R5bGU9J2NvbG9yOmJsdWUnPlvnlYXoqIDorr7nva5dPC9hPiDov5vooYzorr7nva7jgIIKICA8aHI+CiAg5Yqf6IO96K+05piO77yaPGJyPgogIDxiPlvor4TorrrnrqHnkIZdPC9iPuWuoeaguOOAgeWIoOmZpOivhOiuuuS/oeaBr++8jOaVj+aEn+ivjeeuoeeQhu+8jOeUqOaIt+emgeiogOaTjeS9nO+8mzxicj4KIDxiPlvmlbDmja7nu5/orqFdPC9iPuermeeCueivhOiuuuS/oeaBr+aVsOaNruWFqOaWueS9jee7n+iuoe+8mzxicj4KIDxiPlvlr7zlhaXlr7zlh7pdPC9iPuivhOiuuuS/oeaBr+aVsOaNruWvvOWFpS/lr7zlh7rvvIzlu7rorq7nlKjmiLflrprmnJ/lr7zlh7rlpIfku73vvJs8YnI+CiA8Yj5b5riF56m657yT5a2YXTwvYj7muIXnqbrnlYXoqIDor4TorrrmoIfnrb7nvJPlrZjvvIzlpoLmnpzmm7TmlLnnmbvlvZXotKblj7flu7rorq7muIXnqbrnvJPlrZjlho3nlJ/miJDvvJs8YnI+CiA8Yj5b55WF6KiA6K6+572uXTwvYj7nlYXoqIDor4Torrrnm7jlhbPorr7lrprvvJs8YnI+PGJyPgo8aHI+CiAgICA8L3RyPgogICAgPHRyPgogICAgICA8dGQgaGVpZ2h0PSIzMCIgY29sc3Bhbj0iMiIgc3R5bGU9ImNvbG9yOiM5OTkiPjxzdHJvbmc+55WF6KiAPC9zdHJvbmc+5piv5LiA5Liq566A5Y2V5Y+L5aW955qE56S+5Lya5YyW6K+E6K665Y+K6IGa5ZCI57O757uf44CC55WF6KiA6K+E6K6657O757uf5Y+v5Lul5L+d6K+B5oKo572R56uZ55qE6K+E6K665a6J5YWo77yM6K6p5oKo55qE572R56uZ6L+c56a75Z6D5Zy+6K+E6K6677yb55So5oi35Y+v5Lul5L2/55So6Ieq5bex55qE56S+5Lqk6LSm5oi35Zyo5oKo55qE572R56uZ5Y+R6KGo6K+E6K6677yM5bm25LiU5LiA6ZSu5ZCM5q2l6Iez56S+5Lqk572R57uc77yM5Li65oKo55qE572R56uZ5bim5p2l5pu05aSa5rWB6YeP44CCPC90ZD4KICAgIDwvdHI+CiAgPC90Ym9keT4KPC90YWJsZT4KeyRsb2dpbl9zdHJ9CnskY2hhbmdlX2lzdl9pZH0KRU9UOwogICAgICAgICR3aW50aXRsZSA9ICfnlYXoqIDor4TorrrnrqHnkIYnOwogICAgICAgICR3ZWNvbWVfaW5mbyA9ICfnlYXoqIDor4TorrrmqKHlnZcg44CLJzsKICAgICAgICAkd2luID0gbmV3IE94V2luZG93KCk7CiAgICAgICAgJHdpbi0+QWRkVGl0bGUoJHdpbnRpdGxlKTsKICAgICAgICAkd2luLT5BZGRNc2dJdGVtKCRtc2cpOwogICAgICAgICR3aW5mb3JtID0gJHdpbi0+R2V0V2luZG93KCdoYW5kJywgJyZuYnNwOycsIGZhbHNlKTsKICAgICAgICAkd2luLT5EaXNwbGF5KCk7CiAgICAgICAgZXhpdDsKICAgIH0gZWxzZSB7CiAgICAgICAgdW5zZXQoJF9TRVNTSU9OWydjaGFuZ3lhbiddKTsKICAgICAgICB1bnNldCgkX1NFU1NJT05bJ3VzZXInXSk7CiAgICAgICAgZWNobyAkbXNnOwogICAgfQp9Cj8+Cg==
  49. </file>
  50. </modulefiles>
  51. </module>