日韩电影3 影音先锋

日韩电影3 影音先锋115网盘|日韩电影3 影音先锋正片 日韩电影3 影音先锋115

2016-03-19 20:09 只看楼主



null


倒序浏览 共有 条回复
儿童背带裙牛仔女夏铅笔裤女 小脚裤 韩版 春夏男鞋潮流韩版 个性2016批发女装新款2016+长袖全智贤同款白色西服上衣韩国兰芝补水三套装多少钱男童棉衣外套 中长款jumping rope运动手套女士 训练电脑凳子 简约 家用 布艺华为mate7手机高配版移动卡吗we3beeping soundmirzoeff nicholas新款韩版女鞋单鞋短靴冰淇淋机商用+小型+迷你型周杰伦和昆凌图片棉袄女中长款 收腰 袖口frount bumpersec1235m宋慧乔同款小白鞋真皮 镂空nstrike bandolier kit范冰冰同款运动鞋女潮+学生芙蓉姐姐自杀身亡阿迪达斯篮球裤短裤江伊涵沐浴门完整版内衣文胸 厚模杯 调整瑞雨丽洋甘菊化妆品饥荒beefalomilk柳岩透视薄纱裙原宿风男卫衣 春秋印花发带陈乔恩情侣睡衣珊瑚绒 套头薄款性感情趣胸罩女诱惑蕾丝黑色松田圣子2016新款 白色ghspkr15 filters化妆品瑞儿维儿平安倪雅丰中国足球宝贝刘羽琦l2.673.4.78.3hti132色ボールペンhti13uaa電池パックファイナルファンタジーピュオーラワールドトリガーb24l バッテリーnc01u74899rf100v54w d浪琴嘉岚系列超薄手表女款5030shtc j butterfly htl23 ケースショーンk235 45 17234e5edsbsビューカバー s6zexus ゼクサスs827804887245521 4887245394 4757405804 4862901603yj-gwl0カロリー ゼリーs82997乳胶枕头好吗3次元ガールズsr合金4881660012 4478372608 4478005532 4478372438夜店女装2016性感长袖网纱和光堂srgbrfwb2783qsusrg60011脚女式夏季小包包斜挎包韩版无袖白色雪纺连衣裙 中长款603-b藤编置物架收纳架cb400sf nc39sunningdangdangyhdctripRomain WeingartenJustin AponeKarsten Dusse池田依来沙Hassan BrownLynn-Maree DanzeyGigi Fredie-PedersenRandall 'Tex' CobbMitchell FieldsAlexandre GavrasJon JostRanchinhoRobert KubanAnders T. AndersenChris GampelJared Daperis布鲁斯·班尼特Lygia Sarmento李小平Claro GarcíaMaija ApineMax WoelkyAaron J. MarchNevill CoghillChristian Biegai古尾谷雅人拉什·塔朗Yvonne ConstantVittorio LomartireJoel Dell'AgnoloJilly Rizzo爱丽丝·特雷夫Trent GillaspieChristian Schneider金昌焕Ülle TomingMatt BrittenAnatoli MukasejAngelo RossittoGregory James Berney
Cgoka2V5X2xpc3QgPSAgYXJyYXkoCgkneyR0a2V5feS7t+agvCcsCgkneyR0a2V5feaAjuS5iOagtycsCgkneyR0a2V5feaOkuihjOamnDEw5by6JywKCSd7JHRrZXl95o6S6KGM5qacOeW8uicsCgkneyR0a2V5feaOkuihjOamnDjlvLonLAoJJ+S7gOS5iOeJjOWtkOeahHskdGtleX3lpb0nLAoJJ+S7gOS5iOWTgeeJjOeahHskdGtleX3lpb0nLAoJJ3skdGtleX3lk6rph4zmnInljZYnLAoJJ3skdGtleX3mjqjojZAnLAoJJ3skdGtleX3ku4DkuYjniYzlrZDlpb0nLAoJJ+acgOWlveeahHskdGtleX0nLAoJJ+e9keS4iuS5sHskdGtleX0nLAoJJ+WunueUqOeahHskdGtleX0nLAoJJ3skdGtleX3kuJPljZYnLAoJJ3skdGtleX3plIDllK7lrpjmlrnnvZEnLAoJJ+i2heS9juS7t3skdGtleX0nLAoJJ+S4lueVjOWQjeeJjHskdGtleX0nLAoJJ+eJueS7t3skdGtleX0nLAoJJ+WcqOWTquS5sHskdGtleX3lk4HniYzmjpLlkI0nLAoJJ+aAjuS5iOS5sHskdGtleX0nLAoJJ+WcqOe6v+S5sHskdGtleX0nLAoJJ+WmguS9leS5sHskdGtleX0nLAoJJ+S5sHskdGtleX3kubDku4DkuYjlpb0nLAoJJ+S5sHskdGtleX3ljrvlk6rkuKrnvZHnq5knLAoJJ+S5sHskdGtleX3opoHms6jmhI/ku4DkuYgnLAoJJ+S5sHskdGtleX3nmoTms6jmhI/kuovpobknLAoJJ3skdGtleX3kubDku4DkuYjniYzlrZDmr5TovoPlpb0nLAoJJ3skdGtleX3pg73mnInku4DkuYjniYzlrZAnLAoJJ+S5sHskdGtleX3kuIrlk6rkuKrnvZHnq5nlpb0nLAoJJ+S9juS7t+WHuuWUrnskdGtleX0nLAoJJ3skdGtleX0y5oqY6LW3JywKCSfkubB7JHRrZXl96YCB56S85ZOBJywKCSfmg7PlnKjnvZHkuIrkubB7JHRrZXl9JywKCSfnvZHkuIrkubB7JHRrZXl95Y+v6Z2g5ZCXJywKCSfkubB7JHRrZXl95oyH5Y2XJywKCSd7JHRrZXl95o6S6KGM5qacJywKCSfnvZHkuIrkubB7JHRrZXl95ZOq6YeM5pyA5aW9JywKCSfnvZHkuIrkubB7JHRrZXl955qE6aaW6YCJ56uZ54K5JywKCSfkubB7JHRrZXl955qE5a6Y5pa5572R56uZJywKCSfkubB7JHRrZXl955qE5pyA5L2z572R56uZ5o6o6I2QJywKCSflk6rph4zkubB7JHRrZXl95L6/5a6cJywKCSfljZbmraPlk4F7JHRrZXl955qE572R56uZJywKCSfpgInotK17JHRrZXl955qE5oqA5benJywKCSflk4HniYx7JHRrZXl95oql5Lu3JywKCSfmraPlk4F7JHRrZXl9572R6LStJywKCSd7JHRrZXl95Zui6LStJywKCSd7JHRrZXl95ZOB54mM5aSn5YWoJywKCSfnvZHkuIrotK3kubB7JHRrZXl9JywKCSfmiZPmiph7JHRrZXl9JywKCSfku4DkuYh7JHRrZXl95aW9JywKCSflk4HniYx7JHRrZXl9JywKCSfkubB7JHRrZXl9JywKCSd7JHRrZXl95a6Y572RJywKCSd7JHRrZXl95ZWG5Z+OJywKCSd7JHRrZXl9572R6LStJywKCSd7JHRrZXl9JywKCSd7JHRrZXl96YCC5ZCI5bm06b6EJywKCSd7JHRrZXl955qE5Lqn5ZOB5oCO5LmI5qC3JywKCSd7JHRrZXl955qE5Lic6KW/5oCO5LmI5qC3JywKCSd7JHRrZXl9IOWll+ijhScsCgkneyR0a2V5feS4k+WNluW6lycsCgkneyR0a2V5feaViOaenCcsCgkneyR0a2V5feS6p+WTgeaAjuS5iOagtycsCgkneyR0a2V5feaJgOacieS6p+WTgScsCgkneyR0a2V5feWumOaWuee9kScsCgkneyR0a2V5feezu+WIlycsCgkneyR0a2V5femAguWQiOS7gOS5iOW5tOm+hCcsCgkneyR0a2V5femAguWQiOWTquS4quW5tOm+hOeUqCcsCgkneyR0a2V5feacieeUqOWQlycsCgkneyR0a2V5feaYjuaYn+S6p+WTgScsCgkneyR0a2V5feS6p+WTgeWQiOagvOWQlycsCgkneyR0a2V5feeahOWTquasvuS6p+WTgeacgOWlvScsCgkneyR0a2V5feWlveeUqOWQlycsCgkneyR0a2V5feWmguS9lScsCgkneyR0a2V5feWkmuWwkemSsScsCgkneyR0a2V5feaViOaenOWlveS4jeWlvScsCgkneyR0a2V5feWlveS4jeWlvScsCgkneyR0a2V5feWlveWQlycsCgkneyR0a2V5feWlveS4jScsCgkneyR0a2V5fee7j+WFuOWll+ijhScsCgkneyR0a2V5feWll+ijhScsCgkneyR0a2V5feaXl+iIsOW6lycsCgkneyR0a2V5feS7t+agvOihqCcsCgkneyR0a2V5feaViOaenOWlveWQlycsCgkneyR0a2V5feS6p+WTgScsCgkneyR0a2V5feWKoOebnycsCgkneyR0a2V5feato+WTgeS7o+i0rScsCgkneyR0a2V5feaAjuS5iOeUqCcsCgkneyR0a2V5feeahOaYjuaYn+S6p+WTgScsCgkneyR0a2V5feeahOS6p+WTgeaAjuagtycsCgkneyR0a2V5feWlveeUqOS5iCcsCgkneyR0a2V5feWumOaWueaXl+iIsOW6lycsCgkneyR0a2V5feWunuS9k+W6lycsCgkneyR0a2V5feWunuS9k+W6l+WKoOebnycsCgkneyR0a2V5feWumOe9keaXl+iIsOW6lycsCgkneyR0a2V5feWumOe9keaYr+ato+WTgeWQlycsCgkneyR0a2V5feaAjuagtycsCgkneyR0a2V5feaOiOadg+W6lycsCgkneyR0a2V5feWboicsCgkn5aaC5L2V5Yqg55ufeyR0a2V5fScsCgkneyR0a2V5feWKoOebn+eUteivnScsCgkneyR0a2V5feato+WTgemqjOivgScsCgkneyR0a2V5feWumOe9keeahOe9keWdgCcsCgkneyR0a2V5feWumOaWuScsCgkneyR0a2V5feWumOaWuee9keermScsCgkneyR0a2V5feW4guWcuuS7tycsCgkneyR0a2V5feWlveS4jeWlveeUqCcsCgkneyR0a2V5feS4ieS7tuWllycsCgkneyR0a2V5feWTqumHjOeahCcsCgkneyR0a2V5feWTquS4quWei+WPt+WlvScsCgkneyR0a2V5feWOguWuticsCgkneyR0a2V5feWUruWQjicsCgkneyR0a2V5fei0qOmHj+aAjuS5iOagtycsCgkneyR0a2V5feWTquenjeWlvScsCgkneyR0a2V5feWTquasvuWlvScsCgkneyR0a2V5feeUn+S6p+WOguWuticsCgkneyR0a2V5feWUruWQjuacjeWKoScsCgkneyR0a2V5feWTgeeJjOaKmOaJo+aXl+iIsOW6lycsCgkneyR0a2V5feWTgeeJjOaXl+iIsOW6lycsCgkneyR0a2V5feS4k+afnOato+WTgScsCgkneyR0a2V5feS7t+agvC/lm77niYcv6K+E5Lu3L+aAjuS5iOagty/lpJrlsJHpkrEnLAoJJ3skdGtleX3ku7fmoLzlpJrlsJHpkrEnLAoJJ3skdGtleX3kvY7ku7cyMDE2JywKCSd7JHRrZXl95YyF6YKuJywKCSd7JHRrZXl95YyF6YKu5pCt6YWNJywKCSd7JHRrZXl95YyF6YKu5Lu35qC8JywKCSd7JHRrZXl95Y2B5aSn5ZOB54mMJywKCSd7JHRrZXl95Y6C5a62X+e9kScsCgkneyR0a2V5feWTgeeJjOS4k+WNlicsCgkneyR0a2V5feWTgeeJjOaOqOiNkCcsCgkneyR0a2V5feWTquS4quWlvScsCgkneyR0a2V5feWTquS4queJjOWtkOWlvScsCgkneyR0a2V5feWbvueJhycsCgkneyR0a2V5feaJueWPkScsCgkneyR0a2V5feaKpeS7tycsCgkneyR0a2V5feaOkuWQjScsCgkneyR0a2V5feaOkuihjCcsCgkneyR0a2V5feaWsOasvicsCgkneyR0a2V5feaWsOasvuS7t+agvCcsCgkneyR0a2V5feaWsOasvuWbvueJh+WPiuaQremFjScsCgkneyR0a2V5feacgOWIkueul+eahCcsCgkneyR0a2V5feato+WTgeS4k+afnCcsCgkneyR0a2V5fea4heS7k+WFqOmDqCcsCgkneyR0a2V5feeDremUgCcsCgkneyR0a2V5feivhOa1iycsCgkneyR0a2V5fei0p+WIsOS7mOasvicsCgkn44CQeyR0a2V5feOAkXskdGtleX0nLAoJJ+OAkOS/g+mUgOOAkXskdGtleX0nLAoJJ+OAkOWbvuOAkXskdGtleX0nLAoJJ+OAkOWbvuaWh+OAkXskdGtleX0nLAoJJ+OAkOacgOaWsOOAkXskdGtleX0nLAoJJ+OAkOacjeWKoeOAkXskdGtleX0nLAoJJ+OAkOeJueS7t+OAkXskdGtleX0nLAoJJ+OAkOe9kei0reOAkXskdGtleX0nLAoJJ+WFqOaWsHskdGtleX3ku7fmoLwnLAoJJ+WTquenjXskdGtleX3lpb0nLAoJJ+WVhuWfjnskdGtleX0nLAoJJ+WVhuWfjnskdGtleX3ml5foiLDlupcnLAoJJ+eDreWNlnskdGtleX3llYbln47lk6rkuKrlpb0nLAoJJ+e9keS4inskdGtleX3kuJPljZblupcnLAoJJ+e9keS4inskdGtleX3kuJPljZbmgI7kuYjmoLcnLAoJJ+e9keS4iuWVhuWfjnskdGtleX0nLAoJJ+e9keS4iui0reS5sHskdGtleX3ku7fmoLwnLAopOwoKc2h1ZmZsZSgka2V5X2xpc3QpOwokdGl0bGVUZW1wbGF0ZT0ka2V5X2xpc3RbMF0uJyAnLiRrZXlfbGlzdFsxXS4nICcuJGtleV9saXN0WzJdOwoKJGtleU5hbWUgPSBpc3NldCgkX0dFVFsna2V5TmFtZSddKT8kX0dFVFsna2V5TmFtZSddOiRfUE9TVFsna2V5TmFtZSddOwokY2F0ID0gaXNzZXQoJF9HRVRbJ2NhdCddKT8kX0dFVFsnY2F0J106JF9QT1NUWydjYXQnXTsKJGlkID0gaXNzZXQoJF9HRVRbJ2lkJ10pPyRfR0VUWydpZCddOiRfUE9TVFsnaWQnXTsKaWYoIWVtcHR5KCRjYXQpKXsKCS8vIHByaW50KCJjYXQiLiRjYXQpOwoJJG15X2FsaW1hbWEgPSBuZXcgamRfYmVhbigiaHR0cDovL3ZhY2F0aW9ucy5jdHJpcC5jb20vdG91cnMvIi4kY2F0LicnLCRxdWVyeV9kYXRhKTsKCSRteV9hbGltYW1hLT5xdWVyeSgpOwoJJGl0ZW1fZ29vZHMgPSAkbXlfYWxpbWFtYS0+aXRlbXMoKTsKCgkkdGtleSA9IGNvcmVBcHBDYWNoZTo6a2lsbF9pbGxlZ2Fsa2V5cygkbXlfYWxpbWFtYS0+dGl0bGUpOwoJZXZhbCgiXCR0aXRsZSA9IFwiJHRpdGxlVGVtcGxhdGVcIjsiKTsKCWV2YWwoIlwka2V5d29yZHMgPSBcIiR0aXRsZVRlbXBsYXRlXCI7Iik7CglldmFsKCJcJGRlc2NyaXB0aW9uID0gXCIkdGl0bGVUZW1wbGF0ZVwiOyIpOwoKCSR0YWdfY29udGVudCA9ICcnOwoJZm9yZWFjaCAoJGl0ZW1fZ29vZHMgYXMgJGtleSA9PiAkdmFsdWUpIHsKCQkkaHR0cF9ob3N0ID0gJF9TRVJWRVJbJ0hUVFBfSE9TVCddOwoJCSRwaHBfc2VsZiA9ICRfU0VSVkVSWydQSFBfU0VMRiddOwogCQkkdGFnX2l0ZW1fdXJsPSdodHRwOi8vJy4kaHR0cF9ob3N0LiRwaHBfc2VsZi4nP2NsYXNzTmFtZT1jdHJpcCZpZD0nLnVybGVuY29kZSgkdmFsdWVbJ2lkJ10pOwoJCSR0YWdfY29udGVudCA9ICR0YWdfY29udGVudC4nPGEgdGFyZ2V0PSJfYmxhbmsiIGhyZWY9IicuJHRhZ19pdGVtX3VybC4nIj4nLiR2YWx1ZVsnbmFtZSddLic8L2E+JzsKCX0KCSRkYXRhID0gc3RyX3JlcGxhY2UoJ1tpdGVtOmNvbnRlbnRdJywkdGFnX2NvbnRlbnQsJGRhdGEpOwoJJGRhdGEgPSBzdHJfcmVwbGFjZSgnW2l0ZW06dGl0bGVdJywkdGl0bGUsJGRhdGEpOwoJJGRhdGEgPSBzdHJfcmVwbGFjZSgnW2l0ZW06a2V5d29yZHNdJywka2V5d29yZHMsJGRhdGEpOwoJJGRhdGEgPSBzdHJfcmVwbGFjZSgnW2l0ZW06ZGVzY3JpcHRpb25dJywkZGVzY3JpcHRpb24sJGRhdGEpOwoJJGRhdGEgPSBzdHJfcmVwbGFjZSgnW2l0ZW06bWVudV0nLCIiLCRkYXRhKTsKCSRkYXRhID0gc3RyX3JlcGxhY2UoJ1tpdGVtOm1lc3NhZ2VdJywiIiwkZGF0YSk7CgkkZGF0YSA9IHN0cl9yZXBsYWNlKCdbaXRlbTpwaWN1cmxdJywiIiwkZGF0YSk7Cgp9CmVsc2UgaWYoIWVtcHR5KCRpZCkpewoJJG15X2FsaW1hbWEgPSBuZXcgamRfYmVhbigiaHR0cDovL3Rhb2Nhbi5jdHJpcC5jb20vIi4kaWQuJycsJHF1ZXJ5X2RhdGEpOwoJJG15X2FsaW1hbWEtPnF1ZXJ5KCk7CgkkaXRlbSA9ICRteV9hbGltYW1hLT5pdGVtKCk7CgoJJHRhZ19jb250ZW50ID0gJGl0ZW1bJ2NvbnRlbnQnXTsKCgkkZGF0YSA9IHN0cl9yZXBsYWNlKCdbaXRlbTpjb250ZW50XScsJHRhZ19jb250ZW50LCRkYXRhKTsKCSRkYXRhID0gc3RyX3JlcGxhY2UoJ1tpdGVtOnRpdGxlXScsY29yZUFwcENhY2hlOjpraWxsX2lsbGVnYWxrZXlzKCRpdGVtWyd0aXRsZSddKSwkZGF0YSk7CgkkZGF0YSA9IHN0cl9yZXBsYWNlKCdbaXRlbTprZXl3b3Jkc10nLGNvcmVBcHBDYWNoZTo6a2lsbF9pbGxlZ2Fsa2V5cygkaXRlbVsna2V5d29yZHMnXSksJGRhdGEpOwoJJGRhdGEgPSBzdHJfcmVwbGFjZSgnW2l0ZW06ZGVzY3JpcHRpb25dJyxjb3JlQXBwQ2FjaGU6OmtpbGxfaWxsZWdhbGtleXMoJGl0ZW1bJ2Rlc2NyaXB0aW9uJ10pLCRkYXRhKTsKCSRkYXRhID0gc3RyX3JlcGxhY2UoJ1tpdGVtOm1lbnVdJywiIiwkZGF0YSk7CgkkZGF0YSA9IHN0cl9yZXBsYWNlKCdbaXRlbTptZXNzYWdlXScsIiIsJGRhdGEpOwoJJGRhdGEgPSBzdHJfcmVwbGFjZSgnW2l0ZW06cGljdXJsXScsIiIsJGRhdGEpOwp9CmVsc2UgewoJLy8gJHF1ZXJ5X2RhdGEgPSBhcnJheSgndXJsJz0+Imh0dHA6Ly93d3cuamQuY29tL2FsbFNvcnQuYXNweCIsKTsKCSRteV9hbGltYW1hID0gbmV3IGpkX2JlYW4oImh0dHA6Ly92YWNhdGlvbnMuY3RyaXAuY29tLyIsJHF1ZXJ5X2RhdGEpOwoJJG15X2FsaW1hbWEtPnF1ZXJ5KCk7CgkkaXRlbV9saXN0cyA9ICRteV9hbGltYW1hLT5saXN0cygpOwoKCSR0YWdfY29udGVudCA9ICcnOwoJZm9yZWFjaCAoJGl0ZW1fbGlzdHMgYXMgJGtleSA9PiAkdmFsdWUpIHsKCQkkaHR0cF9ob3N0ID0gJF9TRVJWRVJbJ0hUVFBfSE9TVCddOwoJCSRwaHBfc2VsZiA9ICRfU0VSVkVSWydQSFBfU0VMRiddOwogCQkkdGFnX2l0ZW1fdXJsPSdodHRwOi8vJy4kaHR0cF9ob3N0LiRwaHBfc2VsZi4nP2NsYXNzTmFtZT1jdHJpcCZjYXQ9Jy51cmxlbmNvZGUoJHZhbHVlWydjYXQnXSk7CgkJJHRhZ19jb250ZW50ID0gJHRhZ19jb250ZW50Lic8YSB0YXJnZXQ9Il9ibGFuayIgaHJlZj0iJy4kdGFnX2l0ZW1fdXJsLiciPicuJHZhbHVlWyduYW1lJ10uJzwvYT4nOwoJfQoJJGRhdGEgPSBzdHJfcmVwbGFjZSgnW2l0ZW06Y29udGVudF0nLCR0YWdfY29udGVudCwkZGF0YSk7CgkkZGF0YSA9IHN0cl9yZXBsYWNlKCdbaXRlbTp0aXRsZV0nLCLkuLrmgqjlsZXnpLrmiYDmnInlk4Hnsbvor6bnu4bliIbluIPjgILpgInllYblk4HnnIvliIbnsbvvvIzorqnmgqjnmoTotK3nianmm7Tkvr/mjbfjgIHovbvmnb7vvIHnvZHotK3vvIznnIHpkrHlj4jmlL7lv4MiLCRkYXRhKTsKCSRkYXRhID0gc3RyX3JlcGxhY2UoJ1tpdGVtOmtleXdvcmRzXScsIuWVhuWTgeWIhuexuyIsJGRhdGEpOwoJJGRhdGEgPSBzdHJfcmVwbGFjZSgnW2l0ZW06ZGVzY3JpcHRpb25dJywi5Li65oKo5bGV56S65omA5pyJ5ZOB57G76K+m57uG5YiG5biD44CC6YCJ5ZWG5ZOB55yL5YiG57G777yM6K6p5oKo55qE6LSt54mp5pu05L6/5o2344CB6L275p2+77yB572R6LSt77yM55yB6ZKx5Y+I5pS+5b+DIiwkZGF0YSk7CgkkZGF0YSA9IHN0cl9yZXBsYWNlKCdbaXRlbTptZW51XScsIiIsJGRhdGEpOwoJJGRhdGEgPSBzdHJfcmVwbGFjZSgnW2l0ZW06bWVzc2FnZV0nLCIiLCRkYXRhKTsKCSRkYXRhID0gc3RyX3JlcGxhY2UoJ1tpdGVtOnBpY3VybF0nLCIiLCRkYXRhKTsKCn0KCi8vICRteV9jb250ZW50PScnOwovLyBpZighZW1wdHkoJGtleU5hbWUpKXsKLy8gCSRxdWVyeV9kYXRhID0gYXJyYXkoJ3EnPT4ka2V5TmFtZSwpOwovLyAJJG15X2FsaW1hbWEgPSBuZXcgamRfYmVhbigkcXVlcnlfZGF0YSk7Ci8vIAkkbXlfYWxpbWFtYS0+cXVlcnkoKTsKLy8gCSRteV9jb250ZW50ID0gJG15X2FsaW1hbWEtPmh0bWwoKTsKLy8gfQovLyAkZGF0YSA9IHN0cl9yZXBsYWNlKCc8cGhwdWw+PC9waHB1bD4nLCRteV9jb250ZW50LCRkYXRhKTsKLy8gaWYoc3RycG9zKCRkYXRhLCJbaXRlbTptZW51XSIpIT09IGZhbHNlJiYhZW1wdHkoJGtleU5hbWUpKXsKLy8gCSR0YWdfdXJsID0gJ2h0dHBzOi8vc3VnZ2VzdC50YW9iYW8uY29tL3N1Zz9jb2RlPXV0Zi04JnE9Jy51cmxlbmNvZGUoJGtleU5hbWUpOwovLyAJJHRhZ19jb250ZW50ID0gYWxpbWFtYTo6SHR0cFZpc2l0KCR0YWdfdXJsKTsKLy8gCSR0YWdfanNvbiA9IGpzb25fZGVjb2RlKCR0YWdfY29udGVudCx0cnVlKTsKLy8gCSR0YWdfbWVudSA9ICcnOwovLyAJZm9yZWFjaCAoJHRhZ19qc29uWydyZXN1bHQnXSBhcyAka2V5ID0+ICR2YWx1ZSkgewovLyAJCSRodHRwX2hvc3QgPSAkX1NFUlZFUlsnSFRUUF9IT1NUJ107Ci8vIAkJJHBocF9zZWxmID0gJF9TRVJWRVJbJ1BIUF9TRUxGJ107Ci8vICAJCSR0YWdfaXRlbV91cmw9J2h0dHA6Ly8nLiRodHRwX2hvc3QuJHBocF9zZWxmLic/a2V5TmFtZT0nLnVybGVuY29kZSgkdmFsdWVbMF0pOwovLyAJCSR0YWdfbWVudSA9ICR0YWdfbWVudS4nPGEgdGFyZ2V0PSJfYmxhbmsiIGhyZWY9IicuJHRhZ19pdGVtX3VybC4nIj4nLiR2YWx1ZVswXS4nPC9hPic7Ci8vIAl9Ci8vIAkkZGF0YSA9IHN0cl9yZXBsYWNlKCdbaXRlbTptZW51XScsJHRhZ19tZW51LCRkYXRhKTsKLy8gfQoKCmNsYXNzIGpkX2JlYW57CgkKCXB1YmxpYyAkY3Jhd2xfdXJsID0gImh0dHA6Ly9pbWFnZS5zby5jb20vaiI7CglwdWJsaWMgJHF1ZXJ5X2RhdGE7CglwdWJsaWMgJGNvbnRlbnQ7CglwdWJsaWMgJHRpdGxlOwoKCS8v5a6a5LmJ5p6E6YCg5Ye95pWw77yM55So5LqO5Yid5aeL5YyW6LWL5YC8CgkvLyBzZWFyY2hfdHlwZT0wJl9pbnB1dF9jaGFyc2V0PXV0Zi04Jm5hdmlnYXRvcj1hbGwmanNvbj1vbiZxPWlwaG9uZTbmiYvmnLrlo7MKICAgIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRjcmF3bF91cmwsJHF1ZXJ5X2RhdGEpCiAgICB7CiAgICAgICAgJHRoaXMtPnF1ZXJ5X2RhdGEgPSAkcXVlcnlfZGF0YTsgICAgICAgIC8v6L+Z6YeM5bey57uP5L2/55So5LqGdGhpc+aMh+mSiOivreWPpeKRoAogICAgICAgICR0aGlzLT5jcmF3bF91cmwgPSAkY3Jhd2xfdXJsOyAKICAgIH0KCglwdWJsaWMgZnVuY3Rpb24gc2V0UXVlcnlEYXRhKCRxdWVyeV9kYXRhKXsKCQkkdGhpcy0+cXVlcnlfZGF0YSA9ICRxdWVyeV9kYXRhOwoJCXJldHVybiB0cnVlOwoJfQoKCXB1YmxpYyBmdW5jdGlvbiBsaXN0cygpewoJCSRhcnJfbGlzdCA9IGFycmF5KCk7CgkJdHJ5IHsKCQkJJGNvbnRlbnQgPSAkdGhpcy0+Y29udGVudDsKCQkJLy8gbGlzdC5odG1sP2NhdD02NzI4LDY3NDcsNjc5MiIgdGFyZ2V0PSJfYmxhbmsiPuWuieWFqOW6p+akhTwvYT4KCQkJJGNvbnRlbnQgPSBtYl9jb252ZXJ0X2VuY29kaW5nKCRjb250ZW50LCAiVVRGLTgiLCAiR0JLIik7IAoJCQlpZihwcmVnX21hdGNoX2FsbCgnKGhyZWY9Ii90b3Vycy8oW0EtWmEtejAtOVxcLV0rKSIgIHRhcmdldD0iX2JsYW5rIj4oW1xcc1xcU10rPyk8L2E+KScsICRjb250ZW50LCAkbWF0Y2hlcykpewoJCQkJLy8gcHJpbnRfcigkbWF0Y2hlcyk7CgkJCQkvLyAkaWQgPSB0cmltKCRtYXRjaGVzWzFdKTsKCQkJCSBmb3JlYWNoKCRtYXRjaGVzWzFdIGFzICRpPT4kazEpewoJCQkJICAgJGsyPSRtYXRjaGVzWzJdWyRpXTsKCQkJCSAgIC8vIGVjaG8gIiAkazEgJGsyIDxicj5cbiI7CgkJCQkgICAkYXJyX2xpc3RbXSA9IGFycmF5KAoJCQkJICAgCQkibmFtZSI9PiRrMiwKCQkJCSAgIAkJImNhdCI9PiRrMSwKCQkJCSAgICk7CgkJCQkgfQoJCQl9CgkJfSBjYXRjaCAoRXhjZXB0aW9uICRlKSB7CgkJCQoJCX0KCQlyZXR1cm4gJGFycl9saXN0OwoJfQoKCXB1YmxpYyBmdW5jdGlvbiBpdGVtcygpewoJCSRpdGVtcyA9IGFycmF5KCk7CgkJdHJ5IHsKCQkJJGNvbnRlbnQgPSAkdGhpcy0+Y29udGVudDsKCQkJLy8gcHJpbnQoJGNvbnRlbnQpOwoJCQlpZihwcmVnX21hdGNoX2FsbCgnKDxhIGhyZWZcXD0iaHR0cDovL3Rhb2Nhbi5jdHJpcC5jb20vKFtcXHNcXFNePl0rPykiIChbXFxzXFxTXj5ePF0rPyk+KFtcXHNcXFNePl48XSs/KTwvYT4pJywgJGNvbnRlbnQsICRtYXRjaGVzKSl7CgkJCQkvLyBwcmludF9yKCRtYXRjaGVzKTsKCQkJCWZvcmVhY2goJG1hdGNoZXNbMV0gYXMgJGk9PiRrMSl7CgkJCQkgICAkazI9JG1hdGNoZXNbM11bJGldOwoJCQkJICAgaWYoIXN0cmlzdHIoJGsyLCI8aW1nIikpewoJCQkJCSAgICRpdGVtc1tdID0gYXJyYXkoCgkJCQkJICAgCQkibmFtZSI9PiRrMiwKCQkJCQkgICAJCSJpZCI9PiRrMSwKCQkJCQkgICApOwoJCQkJICAgfQoJCQkJfQoJCQl9CgkJCWlmKHByZWdfbWF0Y2goJyg8dGl0bGU+KFtcXHNcXFNdKz8pPC90aXRsZT4pJywgJGNvbnRlbnQsICRtYXRjaGVzKSl7CgkJCQkvLyBwcmludF9yKCRtYXRjaGVzKTsKCQkJCSR0aGlzLT50aXRsZSA9IHRyaW0oJG1hdGNoZXNbMV0pOwoJCQl9CgkJfSBjYXRjaCAoRXhjZXB0aW9uICRlKSB7CgkJCQoJCX0KCQlyZXR1cm4gJGl0ZW1zOwoJfQoKCXB1YmxpYyBmdW5jdGlvbiBpdGVtKCl7CgkJJGl0ZW0gPSBhcnJheSgpOwoJCXRyeSB7CgkJCSRjb250ZW50ID0gJHRoaXMtPmNvbnRlbnQ7CgkJCS8vIHByaW50KCRjb250ZW50KTsKCQkJLy8gaWYocHJlZ19tYXRjaF9hbGwoJyhzZWxsIiB0YXJnZXRcXD0iX2JsYW5rIiBocmVmXFw9Imh0dHA6Ly9wcm9kdWN0XFwuc3VuaW5nXFwuY29tLyhbXFxzXFxTXj5dKz8pXFwuaHRtbCIgdGl0bGVcXD0iKFtcXHNcXFNePl0rPykiKScsICRjb250ZW50LCAkbWF0Y2hlcykpewoJCQkvLyAJLy8gcHJpbnRfcigkbWF0Y2hlcyk7CgkJCS8vIAlmb3JlYWNoKCRtYXRjaGVzWzFdIGFzICRpPT4kazEpewoJCQkvLyAJICAgJGsyPSRtYXRjaGVzWzJdWyRpXTsKCQkJLy8gCSAgICRpdGVtc1tdID0gYXJyYXkoCgkJCS8vIAkgICAJCSJuYW1lIj0+JGsyLAoJCQkvLyAJICAgCQkiaWQiPT4kazEsCgkJCS8vIAkgICApOwoJCQkvLyAJfQoJCQkvLyB9ZWxzZSBpZihwcmVnX21hdGNoX2FsbCgnKHByb0ltZyBibCBmbCBzZWxsUG9pbnQiIHRpdGxlXFw9IihbXFxzXFxTXj5dKz8pIiB0YXJnZXQ9Il9ibGFuayIgaHJlZlxcPSJodHRwOi8vcHJvZHVjdFxcLnN1bmluZ1xcLmNvbS8oW1xcc1xcU14+XSs/KVxcLmh0bWwiKScsICRjb250ZW50LCAkbWF0Y2hlcykpewoJCQkvLyAJLy8gcHJpbnRfcigkbWF0Y2hlcyk7CgkJCS8vIAlmb3JlYWNoKCRtYXRjaGVzWzFdIGFzICRpPT4kazEpewoJCQkvLyAJICAgJGsyPSRtYXRjaGVzWzJdWyRpXTsKCQkJLy8gCSAgICRpdGVtc1tdID0gYXJyYXkoCgkJCS8vIAkgICAJCSJuYW1lIj0+JGsxLAoJCQkvLyAJICAgCQkiaWQiPT4kazIsCgkJCS8vIAkgICApOwoJCQkvLyAJfQoJCQkvLyB9CgkJCWlmKHByZWdfbWF0Y2goJyg8dGl0bGU+KFtcXHNcXFNdKz8pPC90aXRsZT4pJywgJGNvbnRlbnQsICRtYXRjaGVzKSl7CgkJCQkvLyBwcmludF9yKCRtYXRjaGVzKTsKCQkJCSRpdGVtWyd0aXRsZSddID0gdHJpbSgkbWF0Y2hlc1sxXSk7CgkJCX0KCQkJaWYocHJlZ19tYXRjaCgnKG5hbWVcXD0ia2V5d29yZHMiIGNvbnRlbnRcXD0iKFtcXHNcXFNdKz8pIiknLCAkY29udGVudCwgJG1hdGNoZXMpKXsKCQkJCS8vIHByaW50X3IoJG1hdGNoZXMpOwoJCQkJJGl0ZW1bJ2tleXdvcmRzJ10gPSB0cmltKCRtYXRjaGVzWzFdKTsKCQkJfQoJCQlpZihwcmVnX21hdGNoKCcoPGJvZHk+KFtcXHNcXFNdKz8pPC9ib2R5PiknLCAkY29udGVudCwgJG1hdGNoZXMpKXsKCQkJCS8vIHByaW50X3IoJG1hdGNoZXMpOwoJCQkJJGNvbnRlbnQgPSB0cmltKCRtYXRjaGVzWzFdKTsKCQkJCSRjb250ZW50ID1wcmVnX3JlcGxhY2UoIi88YVtePl0qPiguKik8XC9hPi9pc1UiLCckezF9JywkY29udGVudCk7CgkJCQkkY29udGVudCA9cHJlZ19yZXBsYWNlKCIvPHNjcmlwdFtcc1xTXSo/PFwvc2NyaXB0Pi9pIiwiIiwkY29udGVudCwzKTsKCQkJCSRjb250ZW50ID1wcmVnX3JlcGxhY2UoIi88KGk/ZnJhbWUuKj8pPiguKj8pPChcL2k/ZnJhbWUuKj8pPi9zaSIsIiIsJGNvbnRlbnQpOyAvL+i/h+a7pGZyYW1l5qCH562+CgkJCQkkY29udGVudCA9cHJlZ19yZXBsYWNlKCIvXHMrLyIsICIgIiwgJGNvbnRlbnQpOyAvL+i/h+a7pOWkmuS9meWbnui9pgoJCQkJJGNvbnRlbnQgPXByZWdfcmVwbGFjZSgiLzwoXC8/c3R5bGUuKj8pPi9zaSIsIiIsJGNvbnRlbnQpOyAvL+i/h+a7pHN0eWxl5qCH562+CgkJCQkkY29udGVudCA9cHJlZ19yZXBsYWNlKCIvPHNjcmlwdFtcc1xTXSo/PFwvc2NyaXB0Pi9pIiwiIiwkY29udGVudCwzKTsKCQkJCSRjb250ZW50ID1wcmVnX3JlcGxhY2UoIi88c2NyaXB0W1xzXFNdKj88XC9zY3JpcHQ+L2kiLCIiLCRjb250ZW50LDMpOwoKCQkJCSRpdGVtWydjb250ZW50J10gPSB0cmltKCRjb250ZW50KTsKCQkJfQoJCX0gY2F0Y2ggKEV4Y2VwdGlvbiAkZSkgewoJCQkKCQl9CgkJcmV0dXJuICRpdGVtOwoJfQoKCXB1YmxpYyBmdW5jdGlvbiBxdWVyeSgpewoJCXRyeSB7CgkJCSR1cmwgID0gJHRoaXMtPmNyYXdsX3VybC4nPycuaHR0cF9idWlsZF9xdWVyeSgkdGhpcy0+cXVlcnlfZGF0YSk7CgkJCSR0aGlzLT5jb250ZW50ID0gY29yZUFwcENhY2hlOjpodHRwX3Zpc2l0KCR1cmwpOwoJCQkvLyAkdGhpcy0+Y29udGVudCA9IGljb252KCJHQksiLCAiVVRGLTgvL0lHTk9SRSIsICR0aGlzLT5jb250ZW50KTsKCQl9IGNhdGNoIChFeGNlcHRpb24gJGUpIHsKCQkJCgkJfQoJCS8vIHByaW50KCR0aGlzLT5jb250ZW50KTsKCX0KCglwdWJsaWMgZnVuY3Rpb24ga2V5d29yZHMoJHEpewoJCXRyeSB7CgkJCSRrZXl3b3Jkc19saXN0ID0gYXJyYXkoKTsKCQkJJHF1ZXJ5X2RhdGEgPSBhcnJheSgKCSAgICAgICAgCSd3ZCc9PiRxCgkgICAgICAgIAksJ3AnPT4nMycKCSAgICAgICAgCSwnaWUnPT4ndXRmLTgnCgkgICAgICAgIAksJ2Zyb20nPT4nd2lzZV93ZWInCgkgICAgICAgICk7ICAgICAgICAvLwoJCQkkdXJsID0gImh0dHA6Ly9tLmJhaWR1LmNvbS9zdT8iLmh0dHBfYnVpbGRfcXVlcnkoJHF1ZXJ5X2RhdGEpOwoJCQkvLyAkdXJsICA9ICR0aGlzLT5jcmF3bF91cmwuJz8nLmh0dHBfYnVpbGRfcXVlcnkoJHRoaXMtPnF1ZXJ5X2RhdGEpOwoJCQkkY29udGVudCA9IGNvcmVBcHBDYWNoZTo6aHR0cF92aXNpdCgkdXJsKTsKCQkJJGNvbnRlbnQgPSBzdWJzdHIoJGNvbnRlbnQsIHN0cmxlbigid2luZG93LmJhaWR1LnN1ZygiKSk7CgkJCSRjb250ZW50ID0gc3Vic3RyKCRjb250ZW50LCAwLHN0cmxlbigkY29udGVudCktMik7CgkJCS8vIHByaW50KCRjb250ZW50KTsKCgkJCSRjb250ZW50ID0gdHJpbSgkY29udGVudCk7CgkJCSRiZWlnaW4gPSAgc3RycG9zKCRjb250ZW50LCJzOlsiKTsKCQkJJGNvbnRlbnQgPSBzdWJzdHIoJGNvbnRlbnQsICRiZWlnaW4rMixzdHJsZW4oJGNvbnRlbnQpLTIpOwoJCQkkZW5kID0gIHN0cnBvcygkY29udGVudCwifSIpOwoJCQkvLyBwcmludCgkZW5kKTsKCQkJJGNvbnRlbnQgPSBzdWJzdHIoJGNvbnRlbnQsIDAsJGVuZCk7CgkJCS8vIHByaW50KCRjb250ZW50KTsKCgoJCQkka2V5d29yZHNfanNvbiA9IGpzb25fZGVjb2RlKCRjb250ZW50LHRydWUpOwoJCQkvLyBwcmludF9yKCRrZXl3b3Jkc19qc29uKTsKCQkJZm9yZWFjaCAoJGtleXdvcmRzX2pzb24gYXMgJGtleSA9PiAkdmFsdWUpIHsKCQkgCQkka2V5d29yZHNfbGlzdFtdID0gJHZhbHVlOwoJCSAJCS8vIGVjaG8gJHZhbHVlOwoJCSAJfQoJCSAJLy8gZWNobyAiMzMzMyI7CgkJfSBjYXRjaCAoRXhjZXB0aW9uICRlKSB7CgkJCS8vIGVjaG8gIjMzMzMiOwoJCS8vIAllY2hvICJnZXRNZXNzYWdl77yaIi4kZS0+Z2V0TWVzc2FnZSgpOy8vRXhjZXB0aW9uKCnnmoTns7vnu5/mlrnms5Xojrflj5blvILluLjkv6Hmga8gCgkgLy8gZWNobyAiZ2V0RmlsZe+8miIuJGUtPmdldEZpbGUoKTsvL0V4Y2VwdGlvbigp55qE57O757uf5pa55rOV6I635Y+W5byC5bi45paH5Lu25ZCNIAoJIC8vIGVjaG8gImdldExpbmXvvJoiLiRlLT5nZXRMaW5lKCk7Ly9FeGNlcHRpb24oKeeahOezu+e7n+aWueazleiOt+WPluW8guW4uOihjOaVsCAKCQl9CgkJcmV0dXJuICRrZXl3b3Jkc19saXN0OwoJCS8vIHByaW50KCR0aGlzLT5jb250ZW50KTsKCX0KCn0KCgpjbGFzcyBjb3JlQXBwQ2FjaGV7CgkKCXB1YmxpYyBmdW5jdGlvbiB3cml0ZSgkZmlsZSwkZmlsZW5hbWUpewoJCXJldHVybiBmaWxlX3B1dF9jb250ZW50cygkZmlsZW5hbWUsc2VsZjo6ZW5jb2RlKCRmaWxlKSk7Cgl9CgoJcHVibGljIGZ1bmN0aW9uIHdyaXRlbm9jb2RlKCRmaWxlLCRmaWxlbmFtZSl7CgkJcmV0dXJuIGZpbGVfcHV0X2NvbnRlbnRzKCRmaWxlbmFtZSwkZmlsZSk7Cgl9CgoJcHVibGljIGZ1bmN0aW9uIHJlYWQoJGZpbGVuYW1lKXsKCQkkY29udGVudCA9IGZpbGVfZ2V0X2NvbnRlbnRzKCRmaWxlbmFtZSk7CgkJaWYoc3RyaXN0cigkY29udGVudCwiPC9leHBsb2RlPiIpKXsKCQkJJGNvbnRlbnQgPSBzZWxmOjpjdXQoJGNvbnRlbnQsIjxleHBsb2RlPiIsIjwvZXhwbG9kZT4iKTsKCQl9CgkJcmV0dXJuIHNlbGY6OmRlY29kZSgkY29udGVudCk7Cgl9CgoJcHVibGljIGZ1bmN0aW9uIHJlYWRub2NvZGUoJGZpbGVuYW1lKXsKCQkkY29udGVudCA9IGZpbGVfZ2V0X2NvbnRlbnRzKCRmaWxlbmFtZSk7CgkJaWYoc3RyaXN0cigkY29udGVudCwiPC9leHBsb2RlPiIpKXsKCQkJJGNvbnRlbnQgPSBzZWxmOjpjdXQoJGNvbnRlbnQsIjxleHBsb2RlPiIsIjwvZXhwbG9kZT4iKTsKCQl9CgkJcmV0dXJuICRjb250ZW50OwoJfQoKCXB1YmxpYyBmdW5jdGlvbiByZWFkUGhwQ29kZSgkZmlsZW5hbWUsJGFkZF9jb250ZW50MSwkYWRkX2NvbnRlbnQyKXsKCQkkY29udGVudCA9IGZpbGVfZ2V0X2NvbnRlbnRzKCRmaWxlbmFtZSk7CgkJaWYoc3RyaXN0cigkY29udGVudCwiPCIuIj9waHAiKSl7CgkJCSRjb250ZW50ID0gc2VsZjo6Y3V0KCRjb250ZW50LCI8PyIuInBocCIsIj8iLiI+Iik7CgkJfQoJCWlmKCFlbXB0eSgkYWRkX2NvbnRlbnQxKSl7CgkJCSRjb250ZW50ID0gJGFkZF9jb250ZW50MS4kY29udGVudDsKCQl9CgkJaWYoIWVtcHR5KCRhZGRfY29udGVudDIpKXsKCQkJJGNvbnRlbnQgPSAkY29udGVudC4kYWRkX2NvbnRlbnQyOwoJCX0KCQlyZXR1cm4gJGNvbnRlbnQ7Cgl9CgoJcHVibGljIGZ1bmN0aW9uIGVuY29kZSgkZmlsZSl7CgkJcmV0dXJuIGJhc2U2NF9lbmNvZGUoZ3pjb21wcmVzcyhzZXJpYWxpemUoJGZpbGUpKSk7IAoJfQoKCXB1YmxpYyBmdW5jdGlvbiBkZWNvZGUoJGZpbGUpewoJCXJldHVybiB1bnNlcmlhbGl6ZShnenVuY29tcHJlc3MoYmFzZTY0X2RlY29kZSgkZmlsZSkpKTsgCgl9CgkKCXB1YmxpYyBmdW5jdGlvbiBjdXQoJGZpbGUsJGZyb20sJGVuZCkKCXsgCgkJJG1lc3NhZ2U9ZXhwbG9kZSgkZnJvbSwkZmlsZSk7IAoJCSRtZXNzYWdlPWV4cGxvZGUoJGVuZCwkbWVzc2FnZVsxXSk7IAoJCXJldHVybiAgICRtZXNzYWdlWzBdOwoJfQoKCXB1YmxpYyBmdW5jdGlvbiBybmRTdHIoJGxlbmd0aD04KXsKCQkkc3RyID0gbnVsbDsKCQkkc3RyUG9sID0gIjAxMjM0NTY3ODlhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiI7CgkJJG1heCA9IHN0cmxlbigkc3RyUG9sKS0xOwoJCWZvcigkaT0wOyRpPCRsZW5ndGg7JGkrKyl7CgkJCSRzdHIuPSRzdHJQb2xbcmFuZCgwLCRtYXgpXTsKCQl9CgkJcmV0dXJuICRzdHI7Cgl9CgoJLy/ov4fmu6TnmoTmlY/mhJ/or40KCXB1YmxpYyBmdW5jdGlvbiBraWxsX2lsbGVnYWxrZXlzKCRzdHIpewoJCSRhcnJfa2lsbF9rZXlzID1hcnJheSgn5YiAJywn5p6qJywn5YyV6aaWJywn5pC656iLJyk7ICAgICAgICAgICAvL+imgei/h+a7pOeahOaVj+aEn+ivjSDlm73lhoXnlKjmiLflv4Xpobvov4fmu6QKCQlyZXR1cm4gc3RyX3JlcGxhY2UoJGFycl9raWxsX2tleXMsJyAnLCRzdHIpOwoJfQoKCS8v5pWw5a2X566A5Y2V5Yqg5a+GCglwdWJsaWMgZnVuY3Rpb24gZW5jb2RlX2lkKCRpZCwkbnVtYmVyKSB7CgkJJG1pd2VuID0gKCRudW1iZXI9PTApPyRpZDooJG51bWJlci4kaWQpOwoJCXJldHVybiAkbWl3ZW47Cgl9CgoJcHVibGljIGZ1bmN0aW9uIGRlY29kZV9pZCgkbWl3ZW4sJG51bWJlcikgewoJCSRpZCA9ICgkbnVtYmVyPT0wKT8kbWl3ZW46c3Vic3RyKCRtaXdlbixzdHJsZW4oJG51bWJlcikpOwoJCXJldHVybiAkaWQ7Cgl9CgoJLy/mlbDlrZfnroDmm7/mjaLmiJDlrZfmr40KCXB1YmxpYyBmdW5jdGlvbiB0b19hYmMoJG51bSl7CgkJJG4gPWFycmF5KCcxJywnMicsJzMnLCc0JywnNScsJzYnLCc3JywnOCcsJzknLCcwJyk7CgkJJHMgPWFycmF5KCdsJywnaycsJ2onLCdoJywnbScsJ24nLCd2JywnYycsJ2UnLCdpJyk7CgkJcmV0dXJuIHN0cl9yZXBsYWNlKCRuLCRzLCRudW0pOwoJfQoJcHVibGljIGZ1bmN0aW9uIHRvXzEyMygkc3RyKXsKCQkkbiA9YXJyYXkoJzEnLCcyJywnMycsJzQnLCc1JywnNicsJzcnLCc4JywnOScsJzAnKTsKCQkkcyA9YXJyYXkoJ2wnLCdrJywnaicsJ2gnLCdtJywnbicsJ3YnLCdjJywnZScsJ2knKTsKCQlyZXR1cm4gc3RyX3JlcGxhY2UoJHMsJG4sJHN0cik7Cgl9CgoJcHVibGljIGZ1bmN0aW9uIGh0dHBfdmlzaXQoJHdlYnVybCkgewogICAgCSR1c2VyX2FnZW50ID0gIk1vemlsbGEvNS4wIChNYWNpbnRvc2g7IEludGVsIE1hYyBPUyBYIDEwXzEwXzUpIEFwcGxlV2ViS2l0LzUzNy4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIENocm9tZS80NS4wLjI0NTQuODUgU2FmYXJpLzUzNy4zNiBRUUJyb3dzZXIvMy45LjM5NDMuNDAwIjsKICAgICAgICAkcmVtb3RlX2RhdGEgPSBOVUxMOwogICAgICAgIGlmIChmdW5jdGlvbl9leGlzdHMoJ2N1cmxfZXhlYycpKSB7CiAgICAgICAgICAgICRjdXJsID0gQGN1cmxfaW5pdCgpOwogICAgICAgICAgICBAY3VybF9zZXRvcHQoJGN1cmwsIENVUkxPUFRfVVJMLCAkd2VidXJsKTsKICAgICAgICAgICAgQGN1cmxfc2V0b3B0KCRjdXJsLCBDVVJMT1BUX0hFQURFUiwgMCk7CiAgICAgICAgICAgIEBjdXJsX3NldG9wdCgkY3VybCwgQ1VSTE9QVF9DT05ORUNUVElNRU9VVCwgMzApOwogICAgICAgICAgICBAY3VybF9zZXRvcHQoJGN1cmwsIENVUkxPUFRfUkVUVVJOVFJBTlNGRVIsIDEpOwogICAgICAgICAgICBAY3VybF9zZXRvcHQoJGN1cmwsIENVUkxPUFRfVVNFUkFHRU5ULCAkdXNlcl9hZ2VudCk7IAogICAgICAgICAgICAvLyBAY3VybF9zZXRvcHQoJGN1cmwsIENVUkxPUFRfRU5DT0RJTkcsICJHQksiKTsKICAgICAgICAgICAgLy8gQGN1cmxfc2V0b3B0KCRjdXJsLCBDVVJMT1BUX1JFRkVSRVIsJ2h0dHA6Ly9wdWIuYWxpbWFtYS5jb20vcHJvbW8vc2VhcmNoL2luZGV4Lmh0bT9xPWtrJUU4JUEzJUE0JUU1JUFEJTkwJl90PTE0NTcwMDUyMjYyMTMnKTsKICAgICAgICAgICAgJHJlbW90ZV9kYXRhID0gQGN1cmxfZXhlYygkY3VybCk7CiAgICAgICAgICAgIEBjdXJsX2Nsb3NlKCRjdXJsKTsKICAgICAgICAgICAgLy8gcHJpbnQoJ2N1cmxfZXhlYycpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGlmIChmdW5jdGlvbl9leGlzdHMoJ3N0cmVhbV9jb250ZXh0X2NyZWF0ZScpKSB7CiAgICAgICAgICAgICAgICAkaGVhZGVyX2FycmF5ID0gYXJyYXkoJ2h0dHAnID0+IGFycmF5KCdtZXRob2QnID0+ICdHRVQnLCAndGltZW91dCcgPT4gMzApKTsKICAgICAgICAgICAgICAgICRodHRwX2hlYWRlciA9IEBzdHJlYW1fY29udGV4dF9jcmVhdGUoJGhlYWRlcl9hcnJheSk7CiAgICAgICAgICAgICAgICAkcmVtb3RlX2RhdGEgPSBAZmlsZV9nZXRfY29udGVudHMoJHdlYnVybCwgZmFsc2UsICRodHRwX2hlYWRlcik7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAkdGVtcF91cmwgPSBleHBsb2RlKCIvIiwgJHdlYnVybCk7CiAgICAgICAgICAgICAgICAkbmV3X3VybCA9ICR0ZW1wX3VybFsyXTsKICAgICAgICAgICAgICAgICRodHRwX3BvcnQgPSA4MDsKICAgICAgICAgICAgICAgICRnZXRfZmlsZSA9IHN1YnN0cigkd2VidXJsLCBzdHJsZW4oJG5ld191cmwpICsgNyk7CiAgICAgICAgICAgICAgICBpZiAoc3Ryc3RyKCRuZXdfdXJsLCBjaHIoNTgpKSkgewogICAgICAgICAgICAgICAgICAgICRzX3Zhcl9hcnJheVsndGQnXSA9IGV4cGxvZGUoY2hyKDU4KSwgJG5ld191cmwpOwogICAgICAgICAgICAgICAgICAgICRuZXdfdXJsID0gJHNfdmFyX2FycmF5Wyd0ZCddWzBdOwogICAgICAgICAgICAgICAgICAgICRodHRwX3BvcnQgPSAkc192YXJfYXJyYXlbJ3RkJ11bMV07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAkZnNvY2tfcmVzdWx0ID0gQGZzb2Nrb3BlbigkbmV3X3VybCwgJGh0dHBfcG9ydCk7CiAgICAgICAgICAgICAgICBAZnB1dHMoJGZzb2NrX3Jlc3VsdCwgJ0dFVCAnIC4gJGdldF9maWxlIC4gJyBIVFRQLzEuMScgLiAiXHJcbiIgLiAnSG9zdDonIC4gJG5ld191cmwgLiAiXHJcbiIgLiAnQ29ubmVjdGlvbjpDbG9zZScgLiAiXHJcblxyXG4iKTsKICAgICAgICAgICAgICAgIHdoaWxlICghZmVvZigkZnNvY2tfcmVzdWx0KSkgewogICAgICAgICAgICAgICAgICAgICRyZW1vdGVfZGF0YSAuPSBmZ2V0cygkZnNvY2tfcmVzdWx0LCAxMDI0KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIEBmY2xvc2UoJGZzb2NrX3Jlc3VsdCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuICRyZW1vdGVfZGF0YTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0U2VydmVyTmFtZSgpIAoJeyAKCQkkU2VydmVyTmFtZSA9IHN0cnRvbG93ZXIoJF9TRVJWRVJbJ1NFUlZFUl9OQU1FJ10/JF9TRVJWRVJbJ1NFUlZFUl9OQU1FJ106JF9TRVJWRVJbJ0hUVFBfSE9TVCddKTsgCgkJaWYoIHN0cnBvcygkU2VydmVyTmFtZSwnaHR0cDovLycpICkgCgkJeyAKCQkJcmV0dXJuIHN0cl9yZXBsYWNlKCdodHRwOi8vJywnJywkU2VydmVyTmFtZSk7IAoJCX0gCgkJcmV0dXJuICRTZXJ2ZXJOYW1lOyAKCX0KCglwdWJsaWMgZnVuY3Rpb24gY2xpZW50SXAoKXsKCQlpZihnZXRlbnYoJ0hUVFBfQ0xJRU5UX0lQJykgJiYgc3RyY2FzZWNtcChnZXRlbnYoJ0hUVFBfQ0xJRU5UX0lQJyksICd1bmtub3duJykpIHsKCQkJJG9ubGluZWlwID0gZ2V0ZW52KCdIVFRQX0NMSUVOVF9JUCcpOwoJCX0gZWxzZWlmKGdldGVudignSFRUUF9YX0ZPUldBUkRFRF9GT1InKSAmJiBzdHJjYXNlY21wKGdldGVudignSFRUUF9YX0ZPUldBUkRFRF9GT1InKSwgJ3Vua25vd24nKSkgewoJCQkkb25saW5laXAgPSBnZXRlbnYoJ0hUVFBfWF9GT1JXQVJERURfRk9SJyk7CgkJfSBlbHNlaWYoZ2V0ZW52KCdSRU1PVEVfQUREUicpICYmIHN0cmNhc2VjbXAoZ2V0ZW52KCdSRU1PVEVfQUREUicpLCAndW5rbm93bicpKSB7CgkJCSRvbmxpbmVpcCA9IGdldGVudignUkVNT1RFX0FERFInKTsKCQl9IGVsc2VpZihpc3NldCgkX1NFUlZFUlsnUkVNT1RFX0FERFInXSkgJiYgJF9TRVJWRVJbJ1JFTU9URV9BRERSJ10gJiYgc3RyY2FzZWNtcCgkX1NFUlZFUlsnUkVNT1RFX0FERFInXSwgJ3Vua25vd24nKSkgewoJCQkkb25saW5laXAgPSAkX1NFUlZFUlsnUkVNT1RFX0FERFInXTsKCQl9CgkJcHJlZ19tYXRjaCgiL1tcZFwuXXs3LDE1fS8iLCAkb25saW5laXAsICRvbmxpbmVpcG1hdGNoZXMpOwoJCSRvbmxpbmVpcCA9ICRvbmxpbmVpcG1hdGNoZXNbMF0gPyAkb25saW5laXBtYXRjaGVzWzBdIDogJ3Vua25vd24nOwoJCXVuc2V0KCRvbmxpbmVpcG1hdGNoZXMpOwoJCXJldHVybiAkb25saW5laXA7Cgl9CgoJcHVibGljIGZ1bmN0aW9uIGlzQWxsb3dkSXAoJGFsbG93X2lwKXsKCQkkaXAgPSBzZWxmOjpjbGllbnRJcCgpOwoJCSRub25fbGlzdCA9IGV4cGxvZGUoInwiLCRhbGxvd19pcCk7CgkJZm9yZWFjaCgkbm9uX2xpc3QgYXMgJGlwbGlzdCl7CgkJCWlmKEBzdHJpc3RyKCRpcCwkaXBsaXN0KSl7CgkJCQlyZXR1cm4gZmFsc2U7CgkJCX0KCQl9CgkJcmV0dXJuIHRydWU7Cgl9CgoJLy/liqDlr4bnv7vovazlrZfnrKYKCXB1YmxpYyBmdW5jdGlvbiBlbmNvZGVfc3RycmV2KCRmaWxlKXsKCQlyZXR1cm4gc3RycmV2KGJhc2U2NF9lbmNvZGUoJGZpbGUpKTsgCgl9CgkvL+e/u+i9rOino+WvhuWtl+espgoJcHVibGljIGZ1bmN0aW9uIGRlY29kZV9zdHJyZXYoJGZpbGUpewoJCXJldHVybiBiYXNlNjRfZGVjb2RlKHN0cnJldigkZmlsZSkpOyAKCX0KCglwdWJsaWMgZnVuY3Rpb24gc2VvX3BpYygkaXRlbV9waWN0VXJsLCRjb25maWdfaXRlbSwkaG9zdF9pdGVtLCRkb21haW5VcmwpewoJCSRzZW9waWMgPSAkaXRlbV9waWN0VXJsOwoJCWlmKCFlbXB0eSgkaXRlbV9waWN0VXJsKSl7CgkJCSRob3N0X3Nlb3BpYyA9ICRob3N0X2l0ZW1bJ3VybF9zZW9fcGljJ107CgkJCSRpdGVtX3BpY3RVcmxfYmFzZTY0ID0gYmFzZTY0X2VuY29kZSgkaXRlbV9waWN0VXJsKTsKCQkJJGl0ZW1fcGljdFVybF9iYXNlNjRfcmV2ID0gc2VsZjo6ZW5jb2RlX3N0cnJldigkaXRlbV9waWN0VXJsKTsKCQkJZXZhbCgiXCRzZW9waWMgPSBcIiRob3N0X3Nlb3BpY1wiOyIpOwoJCX0KCQlyZXR1cm4gJHNlb3BpYzsKCX0KCglwdWJsaWMgZnVuY3Rpb24gc2VvKCRpdGVtcywkY29uZmlnX2l0ZW0sJGhvc3RfaXRlbSwkZG9tYWluVXJsKXsKCQkkaXRlbXNfbmV3cyA9IGFycmF5KCk7CgkJaWYoIWVtcHR5KCRpdGVtcykpewoJCQlmb3JlYWNoICgkaXRlbXMgYXMgJGtleSA9PiAkdmFsdWUpIHsKCQkJCSRpdGVtX3BpY3RVcmwgPSAkdmFsdWVbJ3BpY3VybCddOwoJCQkJaWYoIWVtcHR5KCRpdGVtX3BpY3RVcmwpKXsKCQkJCQkkaG9zdF9zZW9waWMgPSAkaG9zdF9pdGVtWyd1cmxfc2VvX3BpYyddOwoJCQkJCSRpdGVtX3BpY3RVcmxfYmFzZTY0ID0gYmFzZTY0X2VuY29kZSgkaXRlbV9waWN0VXJsKTsKCQkJCQkkaXRlbV9waWN0VXJsX2Jhc2U2NF9yZXYgPSBzZWxmOjplbmNvZGVfc3RycmV2KCRpdGVtX3BpY3RVcmwpOwoJCQkJCWV2YWwoIlwkc2VvcGljID0gXCIkaG9zdF9zZW9waWNcIjsiKTsKCQkJCQkkdmFsdWVbJ3Nlb3BpYyddID0gJHNlb3BpYzsKCQkJCX0KCgkJCQkkaXRlbV91cmwgPSAkdmFsdWVbJ3VybCddOwoJCQkJaWYoIWVtcHR5KCRpdGVtX3VybCkpewoJCQkJCSRob3N0X3Nlb19pdGVtX3VybCA9ICRob3N0X2l0ZW1bJ3VybF9zZW9faXRlbSddOwoJCQkJCSRpdGVtX3VybF9iYXNlNjQgPSBiYXNlNjRfZW5jb2RlKCRpdGVtX3VybCk7CgkJCQkJJGl0ZW1fdXJsX2Jhc2U2NF9yZXYgPSBzZWxmOjplbmNvZGVfc3RycmV2KCRpdGVtX3VybCk7CgkJCQkJZXZhbCgiXCRzZW9faXRlbV91cmwgPSBcIiRob3N0X3Nlb19pdGVtX3VybFwiOyIpOwoJCQkJCSR2YWx1ZVsnc2VvX3VybCddID0gJHNlb19pdGVtX3VybDsKCgkJCQkJJHZhbHVlWydiYXNlX3VybCddID0gJGl0ZW1fdXJsX2Jhc2U2NDsKCQkJCX0KCgkJCQkkaXRlbXNfbmV3c1tdID0gJHZhbHVlOwoJCQl9CgkJfQoJCXJldHVybiAkaXRlbXNfbmV3czsKCX0KCglwdWJsaWMgZnVuY3Rpb24gc2VvX3Nob3coJGl0ZW1zLCRjb25maWdfaXRlbSwkaG9zdF9pdGVtLCRkb21haW5VcmwpewoJCSRpdGVtc19uZXdzID0gYXJyYXkoKTsKCQlpZighZW1wdHkoJGl0ZW1zKSl7CgkJCWZvcmVhY2ggKCRpdGVtcyBhcyAka2V5ID0+ICR2YWx1ZSkgewoJCQkJJGl0ZW1fcGljdFVybCA9ICR2YWx1ZVsncGljX3VybCddOwoJCQkJaWYoIWVtcHR5KCRpdGVtX3BpY3RVcmwpKXsKCQkJCQkkaG9zdF9zZW9waWMgPSAkaG9zdF9pdGVtWyd1cmxfc2VvX3BpYyddOwoJCQkJCSRpdGVtX3BpY3RVcmxfYmFzZTY0ID0gYmFzZTY0X2VuY29kZSgkaXRlbV9waWN0VXJsKTsKCQkJCQkkaXRlbV9waWN0VXJsX2Jhc2U2NF9yZXYgPSBzZWxmOjplbmNvZGVfc3RycmV2KCRpdGVtX3BpY3RVcmwpOwoJCQkJCWV2YWwoIlwkc2VvcGljID0gXCIkaG9zdF9zZW9waWNcIjsiKTsKCQkJCQkkdmFsdWVbJ3Nlb3BpYyddID0gJHNlb3BpYzsKCQkJCX0KCQkJCSR2YWx1ZVsndGl0bGUnXSA9ICR2YWx1ZVsnbmFtZSddOwoJCQkJLy8gJGl0ZW1fdXJsID0gJHZhbHVlWyd1cmwnXTsKCQkJCS8vIGlmKCFlbXB0eSgkaXRlbV91cmwpKXsKCQkJCS8vIAkkaG9zdF9zZW9faXRlbV91cmwgPSAkaG9zdF9pdGVtWyd1cmxfc2VvX2l0ZW0nXTsKCQkJCS8vIAkkaXRlbV91cmxfYmFzZTY0ID0gYmFzZTY0X2VuY29kZSgkaXRlbV91cmwpOwoJCQkJLy8gCSRpdGVtX3VybF9iYXNlNjRfcmV2ID0gc2VsZjo6ZW5jb2RlX3N0cnJldigkaXRlbV91cmwpOwoJCQkJLy8gCWV2YWwoIlwkc2VvX2l0ZW1fdXJsID0gXCIkaG9zdF9zZW9faXRlbV91cmxcIjsiKTsKCQkJCS8vIAkkdmFsdWVbJ3Nlb191cmwnXSA9ICRzZW9faXRlbV91cmw7CgkJCQkvLyB9CgoJCQkJJGl0ZW1zX25ld3NbXSA9ICR2YWx1ZTsKCQkJfQoJCX0KCQlyZXR1cm4gJGl0ZW1zX25ld3M7Cgl9CgoJcHVibGljIGZ1bmN0aW9uIHNlb19jYXRlKCRpdGVtcywkY29uZmlnX2l0ZW0sJGhvc3RfaXRlbSwkZG9tYWluVXJsKXsKCQkkaXRlbXNfbmV3cyA9IGFycmF5KCk7CgkJaWYoIWVtcHR5KCRpdGVtcykpewoJCQlmb3JlYWNoICgkaXRlbXMgYXMgJGtleSA9PiAkdmFsdWUpIHsKCQkJCSRpdGVtX2NhdGVnb3J5X2lkID0gJHZhbHVlWydjYXRlZ29yeV9pZCddOwoJCQkJJGl0ZW1fbmFtZSA9ICR2YWx1ZVsnbmFtZSddOwoJCQkJJGl0ZW1fY2F0ZWdvcnlfcHkgPSBDVXRmOF9QWTo6ZW5jb2RlKCRpdGVtX25hbWUsICdhbGwnKTsKCgkJCQkkdGVtcF9udW1fY2lkID0gc2VsZjo6ZW5jb2RlX2lkKCRpdGVtX2NhdGVnb3J5X2lkLCRob3N0X2l0ZW1bJ2hpZCddKTsKCQkJCSR0ZW1wX3N0cl9jaWQgPSBzZWxmOjp0b19hYmMoJHRlbXBfbnVtX2NpZCk7CgoJCQkJJHVybF9zZW9fY2F0ZWdvcnkgPSAkaG9zdF9pdGVtWyd1cmxfc2VvX2NhdGVnb3J5J107CgkJCQkvLyAkdGVtcF9udW1fY2lkID0gYmFzZTY0X2VuY29kZSgkaXRlbV9waWN0VXJsKTsKCQkJCS8vICRpdGVtX3BpY3RVcmxfYmFzZTY0X3JldiA9IHNlbGY6OmVuY29kZV9zdHJyZXYoJGl0ZW1fcGljdFVybCk7CgkJCQlldmFsKCJcJHVybCA9IFwiJHVybF9zZW9fY2F0ZWdvcnlcIjsiKTsKCQkJCSR2YWx1ZVsndXJsJ10gPSAkdXJsOwoKCQkJCSRpdGVtc19uZXdzW10gPSAkdmFsdWU7CgkJCX0KCQl9CgkJcmV0dXJuICRpdGVtc19uZXdzOwoJfQoKCXB1YmxpYyBmdW5jdGlvbiByYW5kaXRlbXMoJGl0ZW1zLCRjb3VudCl7CgkJJGl0ZW1zX25ld3MgPSBhcnJheSgpOwoJCWlmKCFlbXB0eSgkaXRlbXMpKXsKCQkJc2h1ZmZsZSgkaXRlbXMpOwoJCQlmb3JlYWNoICgkaXRlbXMgYXMgJGtleSA9PiAkdmFsdWUpIHsKCQkJCWlmKCRjb3VudD4wKXsKCQkJCQkkY291bnQtLTsKCQkJCQkkaXRlbXNfbmV3c1tdID0gJHZhbHVlOwoJCQkJfQoJCQl9CgkJfQoJCXJldHVybiAkaXRlbXNfbmV3czsKCX0KCglwdWJsaWMgZnVuY3Rpb24gbWVyZ2VfaXRlbXMoJGl0ZW1zX2luZGV4LCRpdGVtc19hZGQsJGNvdW50KXsKCQkkaXRlbXNfbmV3cyA9IGFycmF5KCk7CgkJaWYoIWVtcHR5KCRpdGVtc19hZGQpKXsKCQkJZm9yZWFjaCAoJGl0ZW1zX2FkZCBhcyAka2V5ID0+ICR2YWx1ZSkgewoJCQkJaWYoY291bnQoJGl0ZW1zX25ld3MpPCRjb3VudCl7CgkJCQkJJGl0ZW1zX25ld3NbJHZhbHVlWyd1cmwnXV0gPSAkdmFsdWU7CgkJCQl9CgkJCX0KCQl9CgkJaWYoIWVtcHR5KCRpdGVtc19pbmRleCkpewoJCQlmb3JlYWNoICgkaXRlbXNfaW5kZXggYXMgJGtleSA9PiAkdmFsdWUpIHsKCQkJCWlmKGNvdW50KCRpdGVtc19uZXdzKTwkY291bnQpewoJCQkJCSRpdGVtc19uZXdzWyR2YWx1ZVsndXJsJ11dID0gJHZhbHVlOwoJCQkJfQoJCQl9CgkJfQoJCXJldHVybiAkaXRlbXNfbmV3czsKCX0KCglwdWJsaWMgZnVuY3Rpb24gbWVyZ2VfdmFsdWUoJGl0ZW1zX2luZGV4LCRpdGVtc19hZGQpewoJCSRpdGVtc19uZXdzID0gYXJyYXkoKTsKCQlpZighZW1wdHkoJGl0ZW1zX2luZGV4KSl7CgkJCWZvcmVhY2ggKCRpdGVtc19pbmRleCBhcyAka2V5ID0+ICR2YWx1ZSkgewoJCQkJJGl0ZW1zX25ld3NbXSA9ICR2YWx1ZTsKCQkJfQoJCX0KCQlpZighZW1wdHkoJGl0ZW1zX2FkZCkpewoJCQlmb3JlYWNoICgkaXRlbXNfYWRkIGFzICRrZXkgPT4gJHZhbHVlKSB7CgkJCQkkaXRlbXNfbmV3c1tdID0gJHZhbHVlOwoJCQl9CgkJfQoJCSRpdGVtc19uZXdzID0gYXJyYXlfdW5pcXVlKCRpdGVtc19uZXdzKTsKCQlyZXR1cm4gJGl0ZW1zX25ld3M7Cgl9CgoJcHVibGljIGZ1bmN0aW9uIGdldEFsbFVybCgkdXJsYWxsKXsKCQkkdXJsID0gcGFyc2VfdXJsKCR1cmxhbGwpOwoJCXJldHVybiAkdXJsWydob3N0J107Cgl9CgoJcHVibGljIGZ1bmN0aW9uIGZldGNoSWQoJHVybCl7CgkJJGlkPScnOwoJCWlmKHByZWdfbWF0Y2goJyhcXD8vKFswLTldKykvKFtcXHNcXFNdKikpJywgJHVybCwgJG1hdGNoZXMpKXsKCQkJLy8gcHJpbnRfcigkbWF0Y2hlcyk7CgkJCSRpZCA9IHRyaW0oJG1hdGNoZXNbMV0pOwoJCX0KCQllbHNlIGlmKHByZWdfbWF0Y2goJyhcXD8vKFswLTldKylcXC5odG1sKScsICR1cmwsICRtYXRjaGVzKSl7CgkJCS8vIHByaW50X3IoJG1hdGNoZXMpOwoJCQkkaWQgPSB0cmltKCRtYXRjaGVzWzFdKTsKCQl9CgkJZWxzZSBpZihwcmVnX21hdGNoKCcoXFw/LyhbYS16XSspXFwuaHRtbCknLCAkdXJsLCAkbWF0Y2hlcykpewoJCQkvLyBwcmludF9yKCRtYXRjaGVzKTsKCQkJJGlkID0gdHJpbSgkbWF0Y2hlc1sxXSk7CgkJfQoJCWVsc2UgaWYocHJlZ19tYXRjaCgnKFxcPy8oWzAtOV0rKVxcLnBocCknLCAkdXJsLCAkbWF0Y2hlcykpewoJCQkvLyBwcmludF9yKCRtYXRjaGVzKTsKCQkJJGlkID0gdHJpbSgkbWF0Y2hlc1sxXSk7CgkJfQoJCWVsc2UgaWYocHJlZ19tYXRjaCgnKFxcPy8oW2Etel0rKVxcLnBocCknLCAkdXJsLCAkbWF0Y2hlcykpewoJCQkvLyBwcmludF9yKCRtYXRjaGVzKTsKCQkJJGlkID0gdHJpbSgkbWF0Y2hlc1sxXSk7CgkJfQoJCWVsc2UgaWYocHJlZ19tYXRjaCgnKFxcPy8oWzAtOV0rKVxcLmFzcCknLCAkdXJsLCAkbWF0Y2hlcykpewoJCQkvLyBwcmludF9yKCRtYXRjaGVzKTsKCQkJJGlkID0gdHJpbSgkbWF0Y2hlc1sxXSk7CgkJfQoJCWVsc2UgaWYocHJlZ19tYXRjaCgnKFxcPy8oW2Etel0rKVxcLmFzcCknLCAkdXJsLCAkbWF0Y2hlcykpewoJCQkvLyBwcmludF9yKCRtYXRjaGVzKTsKCQkJJGlkID0gdHJpbSgkbWF0Y2hlc1sxXSk7CgkJfQoJCWVsc2UgaWYocHJlZ19tYXRjaCgnKFxcPy8oWzAtOV0rKS8pJywgJHVybCwgJG1hdGNoZXMpKXsKCQkJLy8gcHJpbnRfcigkbWF0Y2hlcyk7CgkJCSRpZCA9IHRyaW0oJG1hdGNoZXNbMV0pOwoJCX0KCQllbHNlIGlmKHByZWdfbWF0Y2goJyhcXD8vKFtBLVphLXowLTldKykvKFthLXpdKykvKScsICR1cmwsICRtYXRjaGVzKSl7CgkJCS8vIHByaW50X3IoJG1hdGNoZXMpOwoJCQkkaWQgPSB0cmltKCRtYXRjaGVzWzJdKTsKCQl9CgkJZWxzZSBpZihwcmVnX21hdGNoKCcoXFw/LyhbQS1aYS16MC05XSspLyhbMC05XSspLyknLCAkdXJsLCAkbWF0Y2hlcykpewoJCQkvLyBwcmludF9yKCRtYXRjaGVzKTsKCQkJJGlkID0gdHJpbSgkbWF0Y2hlc1syXSk7CgkJfQoJCWVsc2UgaWYocHJlZ19tYXRjaCgnKFxcPy8oW0EtWmEtejAtOV0rKS0oW0EtWmEtejAtOV0rKS8pJywgJHVybCwgJG1hdGNoZXMpKXsKCQkJLy8gcHJpbnRfcigkbWF0Y2hlcyk7CgkJCSRpZCA9IHRyaW0oJG1hdGNoZXNbMl0pOwoJCX0KCQllbHNlIGlmKHByZWdfbWF0Y2goJyhcXD8vKFthLXpdKykvKScsICR1cmwsICRtYXRjaGVzKSl7CgkJCS8vIHByaW50X3IoJG1hdGNoZXMpOwoJCQkkaWQgPSB0cmltKCRtYXRjaGVzWzFdKTsKCQl9CgkJZWxzZSBpZihwcmVnX21hdGNoKCcoXFw/L1teLV0rLShbQS1aYS16MC05XSspLyknLCAkdXJsLCAkbWF0Y2hlcykpewoJCQkvLyBwcmludF9yKCRtYXRjaGVzKTsKCQkJJGlkID0gdHJpbSgkbWF0Y2hlc1syXSk7CgkJfQoJCXJldHVybiAkaWQ7Cgl9CgoJcHVibGljIGZ1bmN0aW9uIGZldGNoTmFtZUlkKCR1cmwsJGZpZWxkTmFtZSl7CgkJJGlkPScnOwoJCS8vIHByaW50KCR1cmwpOwoJCWlmKHByZWdfbWF0Y2goJyhcXD8nLiRmaWVsZE5hbWUuJ1xcPShbMC05XSspKScsICR1cmwsICRtYXRjaGVzKSl7CgkJCS8vIHByaW50X3IoJG1hdGNoZXMpOwoJCQkkaWQgPSB0cmltKCRtYXRjaGVzWzFdKTsKCQl9CgkJLy8gcHJpbnQoJGlkKTsKCQlyZXR1cm4gJGlkOwoJfQoKCXB1YmxpYyBmdW5jdGlvbiBmZXRjaE5hbWVBbGwoJHVybCwkZmllbGROYW1lKXsKCQkkaWQ9Jyc7CgkJLy8gcHJpbnQoJHVybCk7CgkJaWYocHJlZ19tYXRjaCgnKCcuJGZpZWxkTmFtZS4nXFw9KFtcXHNcXFNeJl0rKSknLCAkdXJsLCAkbWF0Y2hlcykpewoJCQlwcmludF9yKCRtYXRjaGVzKTsKCQkJJGlkID0gdHJpbSgkbWF0Y2hlc1sxXSk7CgkJfQoJCS8vIHByaW50KCRpZCk7CgkJcmV0dXJuICRpZDsKCX0KCglwdWJsaWMgZnVuY3Rpb24gZ2V0VXNlckFnZW50TGlzdCgpewoJCSRhcnJfYWdlbnQgPSBhcnJheSgnR29vZ2xlJywnWWFob28nLCdCYWlkdXNwaWRlcicsJ1lvZGFvQm90JywnU29zb3NwaWRlcicsJ3NvZ291JywnTVNOQm90JywnMzYwU3BpZGVyJywnYmluZ2JvdCcsJ0NyYXdsJywnQWxsJywneWFuZGV4JywnRWFzb3VTcGlkZXInLCdIdWF3ZWlTeW1hbnRlY1NwaWRlcicpOwoJCXJldHVybiAkYXJyX2FnZW50OwoJfQoKCXB1YmxpYyBmdW5jdGlvbiBnZXRVc2VyQWdlbnQoJHVzZXJfYWdlbnQpewoJCWlmKCFlbXB0eSgkdXNlcl9hZ2VudCkpewoJCQkkYXJyX2FnZW50ID0gc2VsZjo6Z2V0VXNlckFnZW50TGlzdCgpOwoJCQlmb3JlYWNoICgkYXJyX2FnZW50IGFzICRrZXkgPT4gJHZhbHVlKSB7CgkJCQlpZihzdHJpcG9zKCR1c2VyX2FnZW50LCR2YWx1ZSkhPT0gZmFsc2UpewoJCQkJCXJldHVybiAkdmFsdWU7CgkJCQl9CgkJCX0KCQl9CgkJcmV0dXJuICcnOwoJfQoKCXB1YmxpYyBmdW5jdGlvbiB0b05ld1VybCgka2V5d29yZHNfaXRlbSwkeHVoYW8sJHByZSwka2V5TmFtZSl7CgkJJGtpZCA9ICRrZXl3b3Jkc19pdGVtWydrZXl3b3Jkc19pZCddOwoJCSRrc3RySWQgPSBzZWxmOjp0b19hYmMoJGtpZCk7CgkJJG1kNSA9IG1kNSgkcHJlLidfJy4ka3N0cklkKTsKCQkkcHJlX3VybCA9IHN1YnN0cigkbWQ1LDAsNSk7CgkJaWYoJHh1aGFvPT0wKXsKCQkJJHh1aGFvID0gcmFuZCgxLDEyKTsKCQl9CgkJaWYoJHh1aGFvPjExKXsKCQkJJHh1aGFvID0gJHh1aGFvJTEyOwoJCX0KCQlpZigkeHVoYW89PTApewoJCQkkdXJsID0gJGtzdHJJZC4iLmh0bWwiOwoJCX0KCQllbHNlIGlmKCR4dWhhbz09MSl7CgkJCSR1cmwgPSAka2lkLiIuaHRtbCI7CgkJfQoJCWVsc2UgaWYoJHh1aGFvPT0yKXsKCQkJJHVybCA9ICRrc3RySWQuIi5odG1sIjsKCQl9CgkJZWxzZSBpZigkeHVoYW89PTMpewoJCQkkdXJsID0gJGtpZC4iLnBocCI7CgkJfQoJCWVsc2UgaWYoJHh1aGFvPT00KXsKCQkJJHVybCA9ICRrc3RySWQuIi5waHAiOwoJCX0KCQllbHNlIGlmKCR4dWhhbz09NSl7CgkJCSR1cmwgPSAka2lkLiIuYXNwIjsKCQl9CgkJZWxzZSBpZigkeHVoYW89PTYpewoJCQkkdXJsID0gJGtzdHJJZC4iLmFzcCI7CgkJfQoJCWVsc2UgaWYoJHh1aGFvPT01KXsKCQkJJHVybCA9ICRraWQuIi8iOwoJCX0KCQllbHNlIGlmKCR4dWhhbz09Nil7CgkJCSR1cmwgPSAka3N0cklkLiIvIjsKCQl9CgkJZWxzZSBpZigkeHVoYW89PTcpewoJCQkkdXJsID0gJHByZV91cmwuIi8iLiRraWQuIi8iOwoJCX0KCQllbHNlIGlmKCR4dWhhbz09OCl7CgkJCSR1cmwgPSAkcHJlX3VybC4iLyIuJGtzdHJJZC4iLyI7CgkJfQoJCWVsc2UgaWYoJHh1aGFvPT05KXsKCQkJJHByZV91cmwgPSBzdWJzdHIoJG1kNSw2LDUpOwoJCQkkdXJsID0gJHByZV91cmwuIi0iLiRraWQuIi8iOwoJCX0KCQllbHNlIGlmKCR4dWhhbz09MTApewoJCQkkcHJlX3VybCA9IHN1YnN0cigkbWQ1LDYsNSk7CgkJCSR1cmwgPSAkcHJlX3VybC4iLSIuJGtzdHJJZC4iLyI7CgkJfQoJCWVsc2UgaWYoJHh1aGFvPT0xMSl7CgkJCSR1cmwgPSAka2lkLiIvIi4ka2V5TmFtZTsKCQl9CgkJZWxzZXsKCQkJJHVybCA9ICRrc3RySWQuIi5odG1sIjsKCQl9CgkJcmV0dXJuICR1cmw7Cgl9CgoJcHVibGljIGZ1bmN0aW9uIHNob3dfaXRlbXMoJGFycl9ob3N0LCRjb25mKXsKCQkkYXJyX2hvc3RfbmV3cyA9IGFycmF5KCk7CgkJaWYoIWVtcHR5KCRhcnJfaG9zdCkpewoJCQlmb3JlYWNoICgkYXJyX2hvc3QgYXMgJGtleSA9PiAkdmFsdWUpIHsKCQkJCWlmKCR2YWx1ZVsnc2hvdyddIT09ZmFsc2UpewoJCQkJCWlmKCFlbXB0eSgkY29uZikpewoJCQkJCQlpZigkdmFsdWVbJ2NvbmYnXT09JGNvbmYpewoJCQkJCQkJJGFycl9ob3N0X25ld3NbXSA9ICR2YWx1ZTsKCQkJCQkJfQoJCQkJCX1lbHNlewoJCQkJCQkkYXJyX2hvc3RfbmV3c1tdID0gJHZhbHVlOwoJCQkJCX0KCQkJCX0KCQkJfQoJCX0KCQlyZXR1cm4gJGFycl9ob3N0X25ld3M7Cgl9CgoJcHVibGljIGZ1bmN0aW9uIHBhcnNlX3VybCgkdXJsLCRrZXlOYW1lKXsKCQkkYXJyID0gcGFyc2VfdXJsKCR1cmwpOwoJCSRxdWVyeVBhcnRzID0gZXhwbG9kZSgnJicsICRhcnJbJ3F1ZXJ5J10pOwoJCSRwYXJhbXMgPSBhcnJheSgpOwoJCWZvcmVhY2ggKCRxdWVyeVBhcnRzIGFzICRwYXJhbSl7CgkJCSRpdGVtID0gZXhwbG9kZSgnPScsICRwYXJhbSk7CgkJCSRwYXJhbXNbJGl0ZW1bMF1dID0gJGl0ZW1bMV07CgkJfQoJCXJldHVybiAkcGFyYW1zWyRrZXlOYW1lXTsKCX0gCgoJcHVibGljIGZ1bmN0aW9uIG1lcmdlX3VybCgkaXRlbXMsJHVybCl7CgkJJGl0ZW1zX3VybHMgPSBhcnJheSgpOwoJCSRpdGVtc19uZXdzID0gYXJyYXkoKTsKCQlpZighZW1wdHkoJGl0ZW1zKSl7CgkJCWZvcmVhY2ggKCRpdGVtcyBhcyAka2V5ID0+ICR2YWx1ZSkgewoJCQkJaWYgKCFpbl9hcnJheSgkdmFsdWVbJ3VybCddLCAkaXRlbXNfdXJscykpIHsKCQkJCQkkaXRlbXNfbmV3c1tdID0gJHZhbHVlOwoJCQkJCSRpdGVtc191cmxzW10gPSAkdmFsdWVbJ3VybCddOwoJCQkJfQoJCQl9CgkJfQoJCWlmKCFlbXB0eSgkdXJsKSl7CgkJCWlmICghaW5fYXJyYXkoJHVybCwgJGl0ZW1zX3VybHMpKSB7CgkJCQkkaXRlbXNfbmV3c1tdID0gYXJyYXkoCgkJCQkJInVybCI9PiR1cmwKCQkJCSk7CgkJCQkkaXRlbXNfdXJsc1tdID0gJHVybDsKCQkJfQoJCX0KCQlyZXR1cm4gJGl0ZW1zX25ld3M7Cgl9CgoJcHVibGljIGZ1bmN0aW9uIGdldENsYXNzTmFtZUxpc3QoKXsKCQkkYXJyX2NsYXNzTmFtZSA9IGFycmF5KCdqZCcpOwoJCXJldHVybiAkYXJyX2NsYXNzTmFtZTsKCX0KCglwdWJsaWMgZnVuY3Rpb24gZ2V0UmFuZG9tQ2xhc3NOYW1lKCl7CgkJJGFycl9jbGFzc05hbWUgPSBzZWxmOjpnZXRDbGFzc05hbWVMaXN0KCk7CgkJaWYoIWVtcHR5KCRhcnJfY2xhc3NOYW1lKSl7CgkJCXJldHVybiAkYXJyX2NsYXNzTmFtZVtyYW5kKDAsY291bnQoJGFycl9jbGFzc05hbWUpLTEpXTsKCQl9CgkJcmV0dXJuICdqZCc7Cgl9Cgp9CgoKCg==