?>?>".base64_decode("PD9waHANCiRjb2xvciA9ICIjYTNlOTU2IjsNCiRkZWZhdWx0X2FjdGlvbiA9ICdGaWxlc01hbic7DQpAZGVmaW5lKCdTRUxGX1BBVEgnLCBfX0ZJTEVfXyk7DQppZiggc3RycG9zKCRfU0VSVkVSWydIVFRQX1VTRVJfQUdFTlQnXSwnR29vZ2xlJykgIT09IGZhbHNlICkgew0KICAgIGhlYWRlcignSFRUUC8xLjAgNDA0IE5vdCBGb3VuZCcpOw0KICAgIGV4aXQ7DQp9DQpAc2Vzc2lvbl9zdGFydCgpOw0KQGVycm9yX3JlcG9ydGluZygwKTsNCkBpbmlfc2V0KCdlcnJvcl9sb2cnLE5VTEwpOw0KQGluaV9zZXQoJ2Rpc3BsYXlfZXJyb3JzJywwKTsNCkBpbmlfc2V0KCdsb2dfZXJyb3JzJywwKTsNCkBpbmlfc2V0KCdtYXhfZXhlY3V0aW9uX3RpbWUnLDApOw0KQHNldF90aW1lX2xpbWl0KDApOw0KQHNldF9tYWdpY19xdW90ZXNfcnVudGltZSgwKTsNCkBkZWZpbmUoJ1ZFUlNJT04nLCAnVmVyIDMuMCcpOw0KaWYoIGdldF9tYWdpY19xdW90ZXNfZ3BjKCkgKSB7DQogICAgZnVuY3Rpb24gc3RyaXBzbGFzaGVzX2FycmF5KCRhcnJheSkgew0KICAgICAgICByZXR1cm4gaXNfYXJyYXkoJGFycmF5KSA/IGFycmF5X21hcCgnc3RyaXBzbGFzaGVzX2FycmF5JywgJGFycmF5KSA6IHN0cmlwc2xhc2hlcygkYXJyYXkpOw0KICAgIH0NCiAgICAkX1BPU1QgPSBzdHJpcHNsYXNoZXNfYXJyYXkoJF9QT1NUKTsNCn0NCmZ1bmN0aW9uIHByaW50TG9naW4oKSB7DQogICAgZWNobyAnPHRpdGxlPk1hZmlhIEJveSBTaGVsbHxMT0dJTjwvdGl0bGU+PGJvZHkgYmdjb2xvcj0iIzAwMCI+PGNlbnRlcj48aW1nIHNyYz0iaHR0cDovL29pNjAudGlueXBpYy5jb20vMzN4dnBzeC5qcGciIGFsdD0iZmxhZyIgaGVpZ2h0PSI0MDgiIHdpZHRoPSI1MDAiPjxicj48Zm9udCBjb2xvcj0iI2EzZTk1NiI+PC9jZW50ZXI+DQogICAgICAgICAgPHN0eWxlPmlucHV0IHsgbWFyZ2luOjU7YmFja2dyb3VuZC1jb2xvcjojIzE5MTkxOTtib3JkZXI6MXB4IHNvbGlkICNhM2U5NTY7IH08L3N0eWxlPg0KICAgICAgICAgIDxjZW50ZXI+PGZvcm0gbWV0aG9kPXBvc3Q+UGFzc3dvcmQ6OjxpbnB1dCB0eXBlPXBhc3N3b3JkIG5hbWU9cGFzcz48L2Zvcm0+PGJyPjxoMT5TaGVsbCBCeSBNYWZpYSBCb3k8aDI+VEVBTSBQYWsgQ3liZXIgQXR0YWNrZXJzPGJyPjxoMj48Zm9udCBjb2xvcj0iZ3JlZW4iPlBBS0lTVEFOPGZvbnQgY29sb3I9IndoaXRlIj5aSU5EQUJBRDwvaDI+PHA+PGZvbnQgY29sb3I9IiNhM2U5NTYiIGZvbnQgc2l6ZT0iNCI+V0UgQVJFPT48bWFycXVlZSB3aWR0aD0iODAlIj5QYWsgQ3liZXIgQXR0YWNrZXJzPC9tYXJxdWVlPjwvZm9udD48L2ZvbnQ+PC9jZW50ZXI+JzsNCiAgICBleGl0Ow0KfQ0KaWYoICFpc3NldCggJF9TRVNTSU9OW21kNSgkX1NFUlZFUlsnSFRUUF9IT1NUJ10pXSApKQ0KICAgIGlmKCBlbXB0eSggJGF1dGhfcGFzcyApIHx8DQogICAgICAgICggaXNzZXQoICRfUE9TVFsncGFzcyddICkgJiYgKCBtZDUoJF9QT1NUWydwYXNzJ10pID09ICRhdXRoX3Bhc3MgKSApICkNCiAgICAgICAgJF9TRVNTSU9OW21kNSgkX1NFUlZFUlsnSFRUUF9IT1NUJ10pXSA9IHRydWU7DQogICAgZWxzZQ0KICAgICAgICBwcmludExvZ2luKCk7DQoNCmlmKCBzdHJ0b2xvd2VyKCBzdWJzdHIoUEhQX09TLDAsMykgKSA9PSAid2luIiApDQogICAgJG9zID0gJ3dpbic7DQplbHNlDQogICAgJG9zID0gJ25peCc7DQokc2FmZV9tb2RlID0gQGluaV9nZXQoJ3NhZmVfbW9kZScpOw0KJGRpc2FibGVfZnVuY3Rpb25zID0gQGluaV9nZXQoJ2Rpc2FibGVfZnVuY3Rpb25zJyk7DQokaG9tZV9jd2QgPSBAZ2V0Y3dkKCk7DQppZiggaXNzZXQoICRfUE9TVFsnYyddICkgKQ0KICAgIEBjaGRpcigkX1BPU1RbJ2MnXSk7DQokY3dkID0gQGdldGN3ZCgpOw0KaWYoICRvcyA9PSAnd2luJykgew0KICAgICRob21lX2N3ZCA9IHN0cl9yZXBsYWNlKCJcXCIsICIvIiwgJGhvbWVfY3dkKTsNCiAgICAkY3dkID0gc3RyX3JlcGxhY2UoIlxcIiwgIi8iLCAkY3dkKTsNCn0NCmlmKCAkY3dkW3N0cmxlbigkY3dkKS0xXSAhPSAnLycgKQ0KICAgICRjd2QgLj0gJy8nOw0KICAgIA0KaWYoJG9zID09ICd3aW4nKSB7DQogICAgJGFsaWFzZXMgPSBhcnJheSgNCiAgICAgICAgIkxpc3QgRGlyZWN0b3J5IiA9PiAiZGlyIiwNCiAgICAgICAgIkZpbmQgaW5kZXgucGhwIGluIGN1cnJlbnQgZGlyIiA9PiAiZGlyIC9zIC93IC9iIGluZGV4LnBocCIsDQogICAgICAgICJGaW5kICpjb25maWcqLnBocCBpbiBjdXJyZW50IGRpciIgPT4gImRpciAvcyAvdyAvYiAqY29uZmlnKi5waHAiLA0KICAgICAgICAiU2hvdyBhY3RpdmUgY29ubmVjdGlvbnMiID0+ICJuZXRzdGF0IC1hbiIsDQogICAgICAgICJTaG93IHJ1bm5pbmcgc2VydmljZXMiID0+ICJuZXQgc3RhcnQiLA0KICAgICAgICAiVXNlciBhY2NvdW50cyIgPT4gIm5ldCB1c2VyIiwNCiAgICAgICAgIlNob3cgY29tcHV0ZXJzIiA9PiAibmV0IHZpZXciLA0KICAgICAgICAiQVJQIFRhYmxlIiA9PiAiYXJwIC1hIiwNCiAgICAgICAgIklQIENvbmZpZ3VyYXRpb24iID0+ICJpcGNvbmZpZyAvYWxsIg0KICAgICk7DQp9IGVsc2Ugew0KICAgICRhbGlhc2VzID0gYXJyYXkoDQogICAgICAgICAgIkxpc3QgZGlyIiA9PiAibHMgLWxhIiwNCiAgICAgICAgImxpc3QgZmlsZSBhdHRyaWJ1dGVzIG9uIGEgTGludXggc2Vjb25kIGV4dGVuZGVkIGZpbGUgc3lzdGVtIiA9PiAibHNhdHRyIC12YSIsDQogICAgICAgICAgInNob3cgb3BlbmVkIHBvcnRzIiA9PiAibmV0c3RhdCAtYW4gfCBncmVwIC1pIGxpc3RlbiIsDQogICAgICAgICJGaW5kIiA9PiAiIiwNCiAgICAgICAgICAiZmluZCBhbGwgc3VpZCBmaWxlcyIgPT4gImZpbmQgLyAtdHlwZSBmIC1wZXJtIC0wNDAwMCAtbHMiLA0KICAgICAgICAgICJmaW5kIHN1aWQgZmlsZXMgaW4gY3VycmVudCBkaXIiID0+ICJmaW5kIC4gLXR5cGUgZiAtcGVybSAtMDQwMDAgLWxzIiwNCiAgICAgICAgICAiZmluZCBhbGwgc2dpZCBmaWxlcyIgPT4gImZpbmQgLyAtdHlwZSBmIC1wZXJtIC0wMjAwMCAtbHMiLA0KICAgICAgICAgICJmaW5kIHNnaWQgZmlsZXMgaW4gY3VycmVudCBkaXIiID0+ICJmaW5kIC4gLXR5cGUgZiAtcGVybSAtMDIwMDAgLWxzIiwNCiAgICAgICAgICAiZmluZCBjb25maWcuaW5jLnBocCBmaWxlcyIgPT4gImZpbmQgLyAtdHlwZSBmIC1uYW1lIGNvbmZpZy5pbmMucGhwIiwNCiAgICAgICAgICAiZmluZCBjb25maWcqIGZpbGVzIiA9PiAiZmluZCAvIC10eXBlIGYgLW5hbWUgXCJjb25maWcqXCIiLA0KICAgICAgICAgICJmaW5kIGNvbmZpZyogZmlsZXMgaW4gY3VycmVudCBkaXIiID0+ICJmaW5kIC4gLXR5cGUgZiAtbmFtZSBcImNvbmZpZypcIiIsDQogICAgICAgICAgImZpbmQgYWxsIHdyaXRhYmxlIGZvbGRlcnMgYW5kIGZpbGVzIiA9PiAiZmluZCAvIC1wZXJtIC0yIC1scyIsDQogICAgICAgICAgImZpbmQgYWxsIHdyaXRhYmxlIGZvbGRlcnMgYW5kIGZpbGVzIGluIGN1cnJlbnQgZGlyIiA9PiAiZmluZCAuIC1wZXJtIC0yIC1scyIsDQogICAgICAgICAgImZpbmQgYWxsIHNlcnZpY2UucHdkIGZpbGVzIiA9PiAiZmluZCAvIC10eXBlIGYgLW5hbWUgc2VydmljZS5wd2QiLA0KICAgICAgICAgICJmaW5kIHNlcnZpY2UucHdkIGZpbGVzIGluIGN1cnJlbnQgZGlyIiA9PiAiZmluZCAuIC10eXBlIGYgLW5hbWUgc2VydmljZS5wd2QiLA0KICAgICAgICAgICJmaW5kIGFsbCAuaHRwYXNzd2QgZmlsZXMiID0+ICJmaW5kIC8gLXR5cGUgZiAtbmFtZSAuaHRwYXNzd2QiLA0KICAgICAgICAgICJmaW5kIC5odHBhc3N3ZCBmaWxlcyBpbiBjdXJyZW50IGRpciIgPT4gImZpbmQgLiAtdHlwZSBmIC1uYW1lIC5odHBhc3N3ZCIsDQogICAgICAgICAgImZpbmQgYWxsIC5iYXNoX2hpc3RvcnkgZmlsZXMiID0+ICJmaW5kIC8gLXR5cGUgZiAtbmFtZSAuYmFzaF9oaXN0b3J5IiwNCiAgICAgICAgICAiZmluZCAuYmFzaF9oaXN0b3J5IGZpbGVzIGluIGN1cnJlbnQgZGlyIiA9PiAiZmluZCAuIC10eXBlIGYgLW5hbWUgLmJhc2hfaGlzdG9yeSIsDQogICAgICAgICAgImZpbmQgYWxsIC5mZXRjaG1haWxyYyBmaWxlcyIgPT4gImZpbmQgLyAtdHlwZSBmIC1uYW1lIC5mZXRjaG1haWxyYyIsDQogICAgICAgICAgImZpbmQgLmZldGNobWFpbHJjIGZpbGVzIGluIGN1cnJlbnQgZGlyIiA9PiAiZmluZCAuIC10eXBlIGYgLW5hbWUgLmZldGNobWFpbHJjIiwNCiAgICAgICAgIkxvY2F0ZSIgPT4gIiIsDQogICAgICAgICAgImxvY2F0ZSBodHRwZC5jb25mIGZpbGVzIiA9PiAibG9jYXRlIGh0dHBkLmNvbmYiLA0KICAgICAgICAibG9jYXRlIHZob3N0cy5jb25mIGZpbGVzIiA9PiAibG9jYXRlIHZob3N0cy5jb25mIiwNCiAgICAgICAgImxvY2F0ZSBwcm9mdHBkLmNvbmYgZmlsZXMiID0+ICJsb2NhdGUgcHJvZnRwZC5jb25mIiwNCiAgICAgICAgImxvY2F0ZSBwc3libmMuY29uZiBmaWxlcyIgPT4gImxvY2F0ZSBwc3libmMuY29uZiIsDQogICAgICAgICJsb2NhdGUgbXkuY29uZiBmaWxlcyIgPT4gImxvY2F0ZSBteS5jb25mIiwNCiAgICAgICAgImxvY2F0ZSBhZG1pbi5waHAgZmlsZXMiID0+ImxvY2F0ZSBhZG1pbi5waHAiLA0KICAgICAgICAibG9jYXRlIGNmZy5waHAgZmlsZXMiID0+ICJsb2NhdGUgY2ZnLnBocCIsDQogICAgICAgICJsb2NhdGUgY29uZi5waHAgZmlsZXMiID0+ICJsb2NhdGUgY29uZi5waHAiLA0KICAgICAgICAibG9jYXRlIGNvbmZpZy5kYXQgZmlsZXMiID0+ICJsb2NhdGUgY29uZmlnLmRhdCIsDQogICAgICAgICJsb2NhdGUgY29uZmlnLnBocCBmaWxlcyIgPT4gImxvY2F0ZSBjb25maWcucGhwIiwNCiAgICAgICAgImxvY2F0ZSBjb25maWcuaW5jIGZpbGVzIiA9PiAibG9jYXRlIGNvbmZpZy5pbmMiLA0KICAgICAgICAibG9jYXRlIGNvbmZpZy5pbmMucGhwIiA9PiAibG9jYXRlIGNvbmZpZy5pbmMucGhwIiwNCiAgICAgICAgImxvY2F0ZSBjb25maWcuZGVmYXVsdC5waHAgZmlsZXMiID0+ICJsb2NhdGUgY29uZmlnLmRlZmF1bHQucGhwIiwNCiAgICAgICAgImxvY2F0ZSBjb25maWcqIGZpbGVzICIgPT4gImxvY2F0ZSBjb25maWciLA0KICAgICAgICAibG9jYXRlIC5jb25mIGZpbGVzIj0+ImxvY2F0ZSAnLmNvbmYnIiwNCiAgICAgICAgImxvY2F0ZSAucHdkIGZpbGVzIiA9PiAibG9jYXRlICcucHdkJyIsDQogICAgICAgICJsb2NhdGUgLnNxbCBmaWxlcyIgPT4gImxvY2F0ZSAnLnNxbCciLA0KICAgICAgICAibG9jYXRlIC5odHBhc3N3ZCBmaWxlcyIgPT4gImxvY2F0ZSAnLmh0cGFzc3dkJyIsDQogICAgICAgICJsb2NhdGUgLmJhc2hfaGlzdG9yeSBmaWxlcyIgPT4gImxvY2F0ZSAnLmJhc2hfaGlzdG9yeSciLA0KICAgICAgICAibG9jYXRlIC5teXNxbF9oaXN0b3J5IGZpbGVzIiA9PiAibG9jYXRlICcubXlzcWxfaGlzdG9yeSciLA0KICAgICAgICAibG9jYXRlIC5mZXRjaG1haWxyYyBmaWxlcyIgPT4gImxvY2F0ZSAnLmZldGNobWFpbHJjJyIsDQogICAgICAgICJsb2NhdGUgYmFja3VwIGZpbGVzIiA9PiAibG9jYXRlIGJhY2t1cCIsDQogICAgICAgICJsb2NhdGUgZHVtcCBmaWxlcyIgPT4gImxvY2F0ZSBkdW1wIiwNCiAgICAgICAgImxvY2F0ZSBwcml2IGZpbGVzIiA9PiAibG9jYXRlIHByaXYiICAgIA0KICAgICk7DQp9DQoNCmZ1bmN0aW9uIGV4KCRpbikgew0KICAgICRvdXQgPSAnJzsNCiAgICBpZihmdW5jdGlvbl9leGlzdHMoJ2V4ZWMnKSkgew0KICAgICAgICBAZXhlYygkaW4sJG91dCk7DQogICAgICAgICRvdXQgPSBAam9pbigiXG4iLCRvdXQpOw0KICAgIH1lbHNlaWYoZnVuY3Rpb25fZXhpc3RzKCdwYXNzdGhydScpKSB7DQogICAgICAgIG9iX3N0YXJ0KCk7DQogICAgICAgIEBwYXNzdGhydSgkaW4pOw0KICAgICAgICAkb3V0ID0gb2JfZ2V0X2NsZWFuKCk7DQogICAgfWVsc2VpZihmdW5jdGlvbl9leGlzdHMoJ3N5c3RlbScpKSB7DQogICAgICAgIG9iX3N0YXJ0KCk7DQogICAgICAgIEBzeXN0ZW0oJGluKTsNCiAgICAgICAgJG91dCA9IG9iX2dldF9jbGVhbigpOw0KICAgIH1lbHNlaWYoZnVuY3Rpb25fZXhpc3RzKCdzaGVsbF9leGVjJykpIHsNCiAgICAgICAgJG91dCA9IHNoZWxsX2V4ZWMoJGluKTsNCiAgICB9ZWxzZWlmKGlzX3Jlc291cmNlKCRmID0gQHBvcGVuKCRpbiwiciIpKSkgew0KICAgICAgICAkb3V0ID0gIiI7DQogICAgICAgIHdoaWxlKCFAZmVvZigkZikpDQogICAgICAgICAgICAkb3V0IC49IGZyZWFkKCRmLDEwMjQpOw0KICAgICAgICBwY2xvc2UoJGYpOw0KICAgIH0NCiAgICByZXR1cm4gJG91dDsNCn0NCg0KZnVuY3Rpb24gd2hpY2goJHApIHsNCiAgICAkcGF0aCA9IGV4KCd3aGljaCAnLiRwKTsNCiAgICBpZighZW1wdHkoJHBhdGgpKQ0KICAgICAgICByZXR1cm4gJHBhdGg7DQogICAgcmV0dXJuIGZhbHNlOw0KfQ0KICAgIA0KZnVuY3Rpb24gcHJpbnRIZWFkZXIoKSB7DQogICAgaWYoZW1wdHkoJF9QT1NUWydjaGFyc2V0J10pKQ0KICAgICAgICAkX1BPU1RbJ2NoYXJzZXQnXSA9ICJVVEYtOCI7DQogICAgZ2xvYmFsICRjb2xvcjsNCiAgICANCiAgICBlY2hvICc8aHRtbD48aGVhZD48bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD0nLiRfUE9TVFsnY2hhcnNldCddLiciPjx0aXRsZT5NYWZpYSBCb3kgLSAnLlZFUlNJT04uJzwvdGl0bGU+DQogICAgPHN0eWxlPg0KICAgICAgICBib2R5IHtiYWNrZ3JvdW5kOnVybChodHRwOi8va2JvbmRhbGUuZmlsZXMud29yZHByZXNzLmNvbS8yMDE0LzA2L21hdHJpeC5naWYpO2NvbG9yOiMwMEMwMDA7fQ0KICAgICAgICBib2R5LHRkLHRoICAgIHsgZm9udDogOXB0IEx1Y2lkYSxWZXJkYW5hO21hcmdpbjowO3ZlcnRpY2FsLWFsaWduOnRvcDsgfQ0KICAgICAgICBzcGFuLGgxLGEgICAgeyBjb2xvcjonLiRjb2xvci4nICFpbXBvcnRhbnQ7IH0NCiAgICAgICAgc3BhbiAgICAgICAgeyBmb250LXdlaWdodDogYm9sZGVyOyB9DQogICAgICAgIGgxICAgICAgICAgICAgeyBwYWRkaW5nOiAycHggNXB4O2ZvbnQ6IDE0cHQgVmVyZGFuYTttYXJnaW46MHB4IDAgMCA1cHg7IH0NCiAgICAgICAgZGl2LmNvbnRlbnQgICAgeyBwYWRkaW5nOiA1cHg7bWFyZ2luOjAgNXB4O2JhY2tncm91bmQ6ICMwMDAwMDA7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2EzZTk1Njt9DQogICAgICAgIGEgICAgICAgICAgICB7IHRleHQtZGVjb3JhdGlvbjpub25lOyB9DQogICAgICAgIGE6aG92ZXIgICAgICAgIHsgLypiYWNrZ3JvdW5kOmFxdWE7Ki8gfQ0KICAgICAgICAubWwxICAgICAgICB7IGJvcmRlcjoxcHggc29saWQgI2EzZTk1NjtwYWRkaW5nOjVweDttYXJnaW46MDtvdmVyZmxvdzogYXV0bzsgfQ0KICAgICAgICAuYmlnYXJlYSAgICB7IHdpZHRoOjEwMCU7aGVpZ2h0OjI1MHB4O21hcmdpbi10b3A6NXB4O30NCiAgICAgICAgaW5wdXQsIHRleHRhcmVhLCBzZWxlY3QgICAgeyBtYXJnaW46MDtjb2xvcjphcXVhO2JhY2tncm91bmQtY29sb3I6IzAwMDAwMDtib3JkZXI6MXB4IHNvbGlkICcuJGNvbG9yLic7IGZvbnQ6IDlwdCBNb25vc3BhY2UsIkNvdXJpZXIgTmV3IjsgfQ0KICAgICAgICBpbnB1dFt0eXBlPSJidXR0b24iXTpob3ZlcixpbnB1dFt0eXBlPSJzdWJtaXQiXTpob3ZlciB7YmFja2dyb3VuZC1jb2xvcjonLiRjb2xvci4nO2NvbG9yOiMwMDA7fSANCiAgICAgICAgZm9ybSAgICAgICAgeyBtYXJnaW46MHB4OyB9DQogICAgICAgICN0b29sc1RibCAgICB7IHRleHQtYWxpZ246Y2VudGVyOyB9DQogICAgICAgIC50b29sc0lucCAgICB7IHdpZHRoOiA4MCU7IH0NCiAgICAgICAgLm1haW4gdGggICAge3RleHQtYWxpZ246bGVmdDtiYWNrZ3JvdW5kLWNvbG9yOiMwMDAwMDA7Zm9udC13ZWlnaHQ6IGJvbGQ7fQ0KICAgICAgICAubWFpbiB0cjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiM1ZTVlNWU7fQ0KICAgICAgICAubWFpbiB0ZCwgdGh7dmVydGljYWwtYWxpZ246bWlkZGxlO30NCiAgICAgICAgLm1lbnUge2JhY2tncm91bmQ6ICMwMDA7fQ0KICAgICAgICAubWVudSB0aHtwYWRkaW5nOjVweDtmb250LXdlaWdodDpib2xkO30NCiAgICAgICAgLm1lbnUgdGg6aG92ZXJ7YmFja2dyb3VuZDojNDQ0O30NCiAgICAgICAgLmwxIHtiYWNrZ3JvdW5kLWNvbG9yOiMwMDB9DQogICAgICAgIHByZSB7Zm9udC1mYW1pbHk6Q291cmllcixNb25vc3BhY2U7fQ0KICAgICAgICAjY290X3RsX2ZpeGVke3Bvc2l0aW9uOmZpeGVkO2JvdHRvbTowcHg7Zm9udC1zaXplOjEycHg7bGVmdDowcHg7cGFkZGluZzo0cHggMDtjbGlwOl90b3A6ZXhwcmVzc2lvbihkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wK2RvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQtdGhpcy5jbGllbnRIZWlnaHQpO19sZWZ0OmV4cHJlc3Npb24oZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbExlZnQgKyBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGggLSBvZmZzZXRXaWR0aCk7fQ0KICAgICAgICAubG9nbyB7dGV4dC1hbGlnbjpjZW50ZXI7Zm9udC1zaXplOjYwcHg7fQ0KICAgICAgICAubG9nbyBzdXAge2ZvbnQtc2l6ZTogMTVweDt2ZXJ0aWNhbC1hbGlnbjogdG9wO21hcmdpbi1sZWZ0OiAtMTRweDt9DQogICAgICAgIC5jcHIge21hcmdpbi1ib3R0b206NXB4O2ZvbnQtd2VpZ2h0OmJvbGQ7fQ0KICAgICAgICAuY3BiIHt3aWR0aDozNHB4O21hcmdpbjowIDVweDt9DQogICAgICAgIC5lY2ExIHtmb250LXNpemU6IDE2cHg7Zm9udC13ZWlnaHQ6IGJvbGQ7bGV0dGVyLXNwYWNpbmc6IDEwcHg7bWFyZ2luOiAwIDJweCAwIDE3cHg7dGV4dC1hbGlnbjogY2VudGVyO30NCiAgICAgICAgLmVjYTIge2ZvbnQtc2l6ZTogMTNweDtmb250LXdlaWdodDogYm9sZDtsZXR0ZXItc3BhY2luZzogM3B4O21hcmdpbjogMCAycHggMCA3cHg7dGV4dC1hbGlnbjogY2VudGVyO30NCiAgICAgICAgLm5wb2FkIHRkIHtwYWRkaW5nOjA7fQ0KICAgIDwvc3R5bGU+DQogICAgPHNjcmlwdD4NCiAgICAgICAgZnVuY3Rpb24gc2V0KGEsYyxwMSxwMixwMyxjaGFyc2V0KSB7DQogICAgICAgICAgICBpZihhICE9IG51bGwpZG9jdW1lbnQubWYuYS52YWx1ZT1hOw0KICAgICAgICAgICAgaWYoYyAhPSBudWxsKWRvY3VtZW50Lm1mLmMudmFsdWU9YzsNCiAgICAgICAgICAgIGlmKHAxICE9IG51bGwpZG9jdW1lbnQubWYucDEudmFsdWU9cDE7DQogICAgICAgICAgICBpZihwMiAhPSBudWxsKWRvY3VtZW50Lm1mLnAyLnZhbHVlPXAyOw0KICAgICAgICAgICAgaWYocDMgIT0gbnVsbClkb2N1bWVudC5tZi5wMy52YWx1ZT1wMzsNCiAgICAgICAgICAgIGlmKGNoYXJzZXQgIT0gbnVsbClkb2N1bWVudC5tZi5jaGFyc2V0LnZhbHVlPWNoYXJzZXQ7DQogICAgICAgIH0NCiAgICAgICAgZnVuY3Rpb24gZyhhLGMscDEscDIscDMsY2hhcnNldCkgew0KICAgICAgICAgICAgc2V0KGEsYyxwMSxwMixwMyxjaGFyc2V0KTsNCiAgICAgICAgICAgIGRvY3VtZW50Lm1mLnN1Ym1pdCgpOw0KICAgICAgICB9DQogICAgICAgIGZ1bmN0aW9uIGEoYSxjLHAxLHAyLHAzLGNoYXJzZXQpIHsNCiAgICAgICAgICAgIHNldChhLGMscDEscDIscDMsY2hhcnNldCk7DQogICAgICAgICAgICB2YXIgcGFyYW1zID0gImFqYXg9dHJ1ZSI7DQogICAgICAgICAgICBmb3IoaT0wO2k8ZG9jdW1lbnQubWYuZWxlbWVudHMubGVuZ3RoO2krKykNCiAgICAgICAgICAgICAgICBwYXJhbXMgKz0gIiYiK2RvY3VtZW50Lm1mLmVsZW1lbnRzW2ldLm5hbWUrIj0iK2VuY29kZVVSSUNvbXBvbmVudChkb2N1bWVudC5tZi5lbGVtZW50c1tpXS52YWx1ZSk7DQogICAgICAgICAgICBzcigiJy4kX1NFUlZFUlsnUkVRVUVTVF9VUkknXS4nIiwgcGFyYW1zKTsNCiAgICAgICAgfQ0KICAgICAgICBmdW5jdGlvbiBzcih1cmwsIHBhcmFtcykgeyAgICANCiAgICAgICAgICAgIGlmICh3aW5kb3cuWE1MSHR0cFJlcXVlc3QpIHsNCiAgICAgICAgICAgICAgICByZXEgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsNCiAgICAgICAgICAgICAgICByZXEub25yZWFkeXN0YXRlY2hhbmdlID0gcHJvY2Vzc1JlcUNoYW5nZTsNCiAgICAgICAgICAgICAgICByZXEub3BlbigiUE9TVCIsIHVybCwgdHJ1ZSk7DQogICAgICAgICAgICAgICAgcmVxLnNldFJlcXVlc3RIZWFkZXIgKCJDb250ZW50LVR5cGUiLCAiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIik7DQogICAgICAgICAgICAgICAgcmVxLnNlbmQocGFyYW1zKTsNCiAgICAgICAgICAgIH0gDQogICAgICAgICAgICBlbHNlIGlmICh3aW5kb3cuQWN0aXZlWE9iamVjdCkgew0KICAgICAgICAgICAgICAgIHJlcSA9IG5ldyBBY3RpdmVYT2JqZWN0KCJNaWNyb3NvZnQuWE1MSFRUUCIpOw0KICAgICAgICAgICAgICAgIGlmIChyZXEpIHsNCiAgICAgICAgICAgICAgICAgICAgcmVxLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IHByb2Nlc3NSZXFDaGFuZ2U7DQogICAgICAgICAgICAgICAgICAgIHJlcS5vcGVuKCJQT1NUIiwgdXJsLCB0cnVlKTsNCiAgICAgICAgICAgICAgICAgICAgcmVxLnNldFJlcXVlc3RIZWFkZXIgKCJDb250ZW50LVR5cGUiLCAiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIik7DQogICAgICAgICAgICAgICAgICAgIHJlcS5zZW5kKHBhcmFtcyk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIGZ1bmN0aW9uIHByb2Nlc3NSZXFDaGFuZ2UoKSB7DQogICAgICAgICAgICBpZiggKHJlcS5yZWFkeVN0YXRlID09IDQpICkNCiAgICAgICAgICAgICAgICBpZihyZXEuc3RhdHVzID09IDIwMCkgew0KICAgICAgICAgICAgICAgICAgICAvL2FsZXJ0KHJlcS5yZXNwb25zZVRleHQpOw0KICAgICAgICAgICAgICAgICAgICB2YXIgcmVnID0gbmV3IFJlZ0V4cCgiKFxcZCspKFtcXFNcXHNdKikiLCAibSIpOw0KICAgICAgICAgICAgICAgICAgICB2YXIgYXJyPXJlZy5leGVjKHJlcS5yZXNwb25zZVRleHQpOw0KICAgICAgICAgICAgICAgICAgICBldmFsKGFyclsyXS5zdWJzdHIoMCwgYXJyWzFdKSk7DQogICAgICAgICAgICAgICAgfSANCiAgICAgICAgICAgICAgICBlbHNlIGFsZXJ0KCJSZXF1ZXN0IGVycm9yISIpOw0KICAgICAgICB9DQogICAgPC9zY3JpcHQ+DQogICAgPGhlYWQ+PGJvZHk+PGRpdiBzdHlsZT0icG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MTAwJTt0b3A6MDtsZWZ0OjA7Ij48ZGl2IHN0eWxlPSJtYXJnaW46MXB4O2JhY2tncm91bmQ6IzAwMDsiPjxkaXYgY2xhc3M9ImNvbnRlbnQiIHN0eWxlPSJib3JkZXItdG9wOjFweCBzb2xpZCAjYTNlOTU2OyI+DQogICAgPGZvcm0gbWV0aG9kPXBvc3QgbmFtZT1tZiBzdHlsZT0iZGlzcGxheTpub25lOyI+DQogICAgICAgIDxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWEgdmFsdWU9IicuKGlzc2V0KCRfUE9TVFsnYSddKT8kX1BPU1RbJ2EnXTonJykuJyI+DQogICAgICAgIDxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWMgdmFsdWU9IicuaHRtbHNwZWNpYWxjaGFycygkR0xPQkFMU1snY3dkJ10pLiciPg0KICAgICAgICA8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1wMSB2YWx1ZT0iJy4oaXNzZXQoJF9QT1NUWydwMSddKT9odG1sc3BlY2lhbGNoYXJzKCRfUE9TVFsncDEnXSk6JycpLiciPg0KICAgICAgICA8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1wMiB2YWx1ZT0iJy4oaXNzZXQoJF9QT1NUWydwMiddKT9odG1sc3BlY2lhbGNoYXJzKCRfUE9TVFsncDInXSk6JycpLiciPg0KICAgICAgICA8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1wMyB2YWx1ZT0iJy4oaXNzZXQoJF9QT1NUWydwMyddKT9odG1sc3BlY2lhbGNoYXJzKCRfUE9TVFsncDMnXSk6JycpLiciPg0KICAgICAgICA8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1jaGFyc2V0IHZhbHVlPSInLihpc3NldCgkX1BPU1RbJ2NoYXJzZXQnXSk/JF9QT1NUWydjaGFyc2V0J106JycpLiciPg0KICAgIDwvZm9ybT4nOw0KICAgICRmcmVlU3BhY2UgPSBAZGlza2ZyZWVzcGFjZSgkR0xPQkFMU1snY3dkJ10pOw0KICAgICR0b3RhbFNwYWNlID0gQGRpc2tfdG90YWxfc3BhY2UoJEdMT0JBTFNbJ2N3ZCddKTsNCiAgICAkdG90YWxTcGFjZSA9ICR0b3RhbFNwYWNlPyR0b3RhbFNwYWNlOjE7DQogICAgJGRpc2FibGVfZnVuY3Rpb25zID0gQGluaV9nZXQoJ2Rpc2FibGVfZnVuY3Rpb25zJyk7DQogICAgJHJlbGVhc2UgPSBAcGhwX3VuYW1lKCdyJyk7DQogICAgJGtlcm5lbCA9IEBwaHBfdW5hbWUoJ3MnKTsNCiAgICBpZighZnVuY3Rpb25fZXhpc3RzKCdwb3NpeF9nZXRlZ2lkJykpIHsNCiAgICAgICAgJHVzZXIgPSBAZ2V0X2N1cnJlbnRfdXNlcigpOw0KICAgICAgICAkdWlkID0gQGdldG15dWlkKCk7DQogICAgICAgICRnaWQgPSBAZ2V0bXlnaWQoKTsNCiAgICAgICAgJGdyb3VwID0gIj8iOw0KICAgIH0gZWxzZSB7DQogICAgICAgICR1aWQgPSBAcG9zaXhfZ2V0cHd1aWQoQHBvc2l4X2dldGV1aWQoKSk7DQogICAgICAgICRnaWQgPSBAcG9zaXhfZ2V0Z3JnaWQoQHBvc2l4X2dldGVnaWQoKSk7DQogICAgICAgICR1c2VyID0gJHVpZFsnbmFtZSddOw0KICAgICAgICAkdWlkID0gJHVpZFsndWlkJ107DQogICAgICAgICRncm91cCA9ICRnaWRbJ25hbWUnXTsNCiAgICAgICAgJGdpZCA9ICRnaWRbJ2dpZCddOw0KICAgIH0NCiAgICAkY3dkX2xpbmtzID0gJyc7DQogICAgJHBhdGggPSBleHBsb2RlKCIvIiwgJEdMT0JBTFNbJ2N3ZCddKTsNCiAgICAkbj1jb3VudCgkcGF0aCk7DQogICAgZm9yKCRpPTA7JGk8JG4tMTskaSsrKSB7DQogICAgICAgICRjd2RfbGlua3MgLj0gIjxhIGhyZWY9JyMnIG9uY2xpY2s9J2coXCJGaWxlc01hblwiLFwiIjsNCiAgICAgICAgZm9yKCRqPTA7JGo8PSRpOyRqKyspDQogICAgICAgICAgICAkY3dkX2xpbmtzIC49ICRwYXRoWyRqXS4nLyc7DQogICAgICAgICRjd2RfbGlua3MgLj0gIlwiKSc+Ii4kcGF0aFskaV0uIi88L2E+IjsNCiAgICB9DQogICAgJGNoYXJzZXRzID0gYXJyYXkoJ1VURi04JywgJ1dpbmRvd3MtMTI1MScsICdLT0k4LVInLCAnS09JOC1VJywgJ2NwODY2Jyk7DQogICAgJG9wdF9jaGFyc2V0cyA9ICcnOw0KICAgIGZvcmVhY2goJGNoYXJzZXRzIGFzICRpdGVtKQ0KICAgICAgICAkb3B0X2NoYXJzZXRzIC49ICc8b3B0aW9uIHZhbHVlPSInLiRpdGVtLiciICcuKCRfUE9TVFsnY2hhcnNldCddPT0kaXRlbT8nc2VsZWN0ZWQnOicnKS4nPicuJGl0ZW0uJzwvb3B0aW9uPic7DQogICAgJG0gPSBhcnJheSgnU2VjLiBJbmZvJz0+J1NlY0luZm8nLCdGaWxlcyc9PidGaWxlc01hbicsJ0V4ZWMnPT4nQ29uc29sZScsJ1NxbCc9PidTcWwnLCdQaHAnPT4nUGhwJywnQ2dpU2hlbGwnPT4nQ2dpU2hlbGwnLCdCeXBhc3Nlcic9PidTYWZlTW9kZScsJ1NhZmUgTW9kZSc9PidCeXBhc3MnLCdEZWZhY2UnID0+ICdEZWZhY2UnLCAnSW5mZWN0JyA9PiAnSW5mZWN0JywnTEZJJz0+J2xmaXNjYW4nLCdQbC5TeW0nID0+ICdQU3ltbGluaycsJ1N0cmluZyB0b29scyc9PidTdHJpbmdUb29scycsJ0JydXRlJz0+J0JydXRlZm9yY2UnLCdDb25uZWN0Jz0+J05ldHdvcmsnLCdSZWFkYWJsZSc9PidSZWFkYWJsZScsJ1BvcnQgU2Nhbm5lcic9PidQb3J0U2Nhbm5lcicsJ1N5bWxpbmsnPT4nU3ltbGluaycsJ0luamVjdG9yJz0+J0luamVjdG9yJywnRG9tYWluJyA9PiAnRG9tYWluJywgJ2NQQ3JhYycgPT4gJ0NwYW5lbCcsICdab25lLWgnID0+ICdaSHBvc3RlcicpOw0KICAgIGlmKCFlbXB0eSgkR0xPQkFMU1snYXV0aF9wYXNzJ10pKQ0KICAgICRtWydMb2dvdXQnXSA9ICdMb2dvdXQnOw0KICAgICRtWydLaWxsJ10gPSAnU2VsZlJlbW92ZSc7DQogICAgJG1lbnUgPSAnJzsNCiAgICBmb3JlYWNoKCRtIGFzICRrID0+ICR2KQ0KICAgICAgICAkbWVudSAuPSAnPHRoPjxhIGhyZWY9IiMiIG9uY2xpY2s9ImcoXCcnLiR2LidcJyxudWxsLFwnXCcsXCdcJyxcJ1wnKSI+Jy4kay4nPC9hPjwvdGg+JzsNCiAgICAkZHJpdmVzID0gIiI7DQogICAgaWYgKCRHTE9CQUxTWydvcyddID09ICd3aW4nKSB7DQogICAgICAgIGZvcmVhY2goIHJhbmdlKCdhJywneicpIGFzICRkcml2ZSApew0KICAgICAgICAgICAgaWYgKGlzX2RpcigkZHJpdmUuJzpcXCcpKQ0KICAgICAgICAgICAgICAgICRkcml2ZXMgLj0gJzxhIGhyZWY9IiMiIG9uY2xpY2s9ImcoXCdGaWxlc01hblwnLFwnJy4kZHJpdmUuJzovXCcpIj5bICcuJGRyaXZlLicgXTwvYT4gJzsNCiAgICAgICAgfQ0KICAgICAgICAkZHJpdmVzIC49ICc8YnIgLz46ICc7DQogICAgfQ0KICAgIGlmKCRHTE9CQUxTWydvcyddID09ICduaXgnKSB7DQogICAgICAgICRkb21pbmlvcyA9IEBmaWxlX2dldF9jb250ZW50cygiL2V0Yy9uYW1lZC5jb25mIik7DQogICAgICAgIGlmKCEkZG9taW5pb3MpIHsNCiAgICAgICAgICAgICRkMGMgPSAiQ0FOVCBSRUFEIG5hbWVkLmNvbmYiOw0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgQHByZWdfbWF0Y2hfYWxsKCcvLio/em9uZSAiKC4qPykiIHsvJywgJGRvbWluaW9zLCAkb3V0KTsNCiAgICAgICAgICAgICRvdXQgPSBzaXplb2YoYXJyYXlfdW5pcXVlKCRvdXRbMV0pKTsNCiAgICAgICAgICAgICRkMGMgPSAkb3V0LiIgIERvbWFpbnMiOw0KICAgICAgICB9DQogICAgfSBlbHNlIHsNCiAgICAgICAgJGQwYyA9ICIgLS0tICI7DQogICAgfQ0KICAgIGlmKCRHTE9CQUxTWydvcyddID09ICduaXgnICkNCiAgICB7DQogICAgICAgICR1c2VmbCA9ICcnOyAkZHdubGRyID0gJyc7DQogICAgICAgIGlmKCFAaW5pX2dldCgnc2FmZV9tb2RlJykpIHsNCiAgICAgICAgICAgICR0ZW1wID0gYXJyYXkoKTsNCiAgICAgICAgICAgICR1c2VyZnVsID0gYXJyYXkoJ2djYycsJ2xjYycsJ2NjJywnbGQnLCdtYWtlJywncGhwJywncGVybCcsJ3B5dGhvbicsJ3J1YnknLCd0YXInLCdnemlwJywnYnppcCcsJ2J6aXAyJywnbmMnLCdsb2NhdGUnLCdzdWlkcGVybCcpOw0KICAgICAgICAgICAgZm9yZWFjaCgkdXNlcmZ1bCBhcyAkaXRlbSkgeyBpZih3aGljaCgkaXRlbSkpICR0ZW1wW109ICRpdGVtOyB9DQogICAgICAgICAgICAkdXNlZmwgPSBpbXBsb2RlKCcsICcsJHRlbXApOw0KICAgICAgICAgICAgJHRlbXAgPSBhcnJheSgpOw0KICAgICAgICAgICAgJGRvd25sb2FkZXJzID0gYXJyYXkoJ3dnZXQnLCdmZXRjaCcsJ2x5bngnLCdsaW5rcycsJ2N1cmwnLCdnZXQnLCdsd3AtbWlycm9yJyk7DQogICAgICAgICAgICBmb3JlYWNoKCRkb3dubG9hZGVycyBhcyAkaXRlbTIpIHsgaWYod2hpY2goJGl0ZW0yKSkgJHRlbXBbXT0gJGl0ZW0yOyB9DQogICAgICAgICAgICAkZHdubGRyID0gaW1wbG9kZSgnLCAnLCR0ZW1wKTsNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICR1c2VmbCA9ICcgLS0tLS0tLSAnOyAkZHdubGRyID0gJyAtLS0tLS0tICc7DQogICAgICAgIH0NCiAgICB9IGVsc2UgeyANCiAgICAgICAgJHVzZWZsID0gJyAtLS0tLS0tICc7ICRkd25sZHIgPSAnIC0tLS0tLS0gJzsNCiAgICB9IA0KICAgIGVjaG8gJzx0YWJsZSBjbGFzcz0iaW5mbyIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iYmxhY2siPjx0cj48dGQgd2lkdGg9IjE2MHB4Ij48aW1nIHNyYz0iaHR0cDovL2k2MC50aW55cGljLmNvbS8zNHJobXlvLmpwZyIgaGVpZ2h0PSIxMDAiIHdpZHRoPSIxMDAiPjxzdXA+JnJlZzs8L3N1cD48L2Rpdj48L3RkPg0KICAgICAgICAgIDx0ZD48dGFibGUgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIiBjbGFzcz0ibnBvYWQiPjx0cj48dGQgd2lkdGg9IjEyNXB4OyI+PHNwYW4+VW5hbWU8L3NwYW4+PC90ZD48dGQ+OiA8bm9icj4nLnN1YnN0cihAcGhwX3VuYW1lKCksIDAsIDEyMCkuJzwvbm9icj48L3RkPjwvdHI+DQogICAgICAgICAgPHRyPjx0ZD48c3Bhbj5Vc2VyPC9zcGFuPjwvdGQ+PHRkPjogJy4kdWlkLicgKCAnLiR1c2VyLicgKSA8c3Bhbj5Hcm91cDogPC9zcGFuPiAnLiRnaWQuJyAoICcuJGdyb3VwLicgKTwvdGQ+PC90cj48dHI+PHRkPjxzcGFuPlNlcnZlcjwvc3Bhbj48L3RkPjx0ZD46ICcuQGdldGVudignU0VSVkVSX1NPRlRXQVJFJykuJzwvdGQ+PC90cj48dHI+PHRkPjxzcGFuPlVzZWZ1bDwvc3Bhbj48L3RkPjx0ZD46ICcuJHVzZWZsLic8L3RkPjwvdHI+PHRyPjx0ZD48c3Bhbj5Eb3dubG9hZGVyczwvc3Bhbj48L3RkPjx0ZD46ICcuJGR3bmxkci4nPC90ZD48L3RyPjx0cj48dGQ+PHNwYW4+RGlzYWJsZWQgZnVuY3Rpb25zPC9zcGFuPjwvdGQ+PHRkPjogJy4oJGRpc2FibGVfZnVuY3Rpb25zPyRkaXNhYmxlX2Z1bmN0aW9uczonQWxsIEZ1bmN0aW9uIEVuYWJsZScpLic8L3RkPjwvdHI+PHRyPjx0ZD48c3Bhbj4nLigkR0xPQkFMU1snb3MnXSA9PSAnd2luJz8nRHJpdmVzPGJyIC8+Q3dkJzonQ3dkJykuJzwvc3Bhbj48L3RkPjx0ZD46ICcuJGRyaXZlcy4nJy4kY3dkX2xpbmtzLicgJy52aWV3UGVybXNDb2xvcigkR0xPQkFMU1snY3dkJ10pLicgPGEgaHJlZj0jIG9uY2xpY2s9ImcoXCdGaWxlc01hblwnLFwnJy4kR0xPQkFMU1snaG9tZV9jd2QnXS4nXCcsXCdcJyxcJ1wnLFwnXCcpIj5bIGhvbWUgXTwvYT48L3RkPjwvdHI+PC90YWJsZT48L3RkPicuDQogICAgICAgICAnPHRkIHdpZHRoPTE+PG5vYnI+PHNwYW4+U2VydmVyIElQPC9zcGFuPjxicj48c3Bhbj5DbGllbnQgSVA8L3NwYW4+PGJyIC8+PHNwYW4+SEREPC9zcGFuPjxiciAvPjxzcGFuPkZyZWU8L3NwYW4+PGJyIC8+PHNwYW4+UEhQPC9zcGFuPjxiciAvPjxzcGFuPlNhZmUgTW9kZTwvc3Bhbj48YnIgLz48c3Bhbj5Eb21haW5zPC9zcGFuPjwvbm9icj48L3RkPicuDQogICAgICAgICAnPHRkPjxub2JyPjogJy5nZXRob3N0YnluYW1lKCRfU0VSVkVSWyJIVFRQX0hPU1QiXSkuJzxicj46ICcuJF9TRVJWRVJbJ1JFTU9URV9BRERSJ10uJzxiciAvPjogJy52aWV3U2l6ZSgkdG90YWxTcGFjZSkuJzxiciAvPjogJy52aWV3U2l6ZSgkZnJlZVNwYWNlKS4nICgnLihpbnQpKCRmcmVlU3BhY2UvJHRvdGFsU3BhY2UqMTAwKS4nJSk8YnI+OiAnLkBwaHB2ZXJzaW9uKCkuJyA8YSBocmVmPSMgb25jbGljaz0iZyhcJ1BocFwnLG51bGwsbnVsbCxcJ2luZm9cJykiPlsgcGhwaW5mbyBdPC9hPjxiciAvPjogJy4oJEdMT0JBTFNbJ3NhZmVfbW9kZSddPyc8Zm9udCBjb2xvcj1yZWQ+T048L2ZvbnQ+JzonPGZvbnQgY29sb3I9Jy4kY29sb3IuJzxiPk9GRjwvYj48L2ZvbnQ+JykuJzxiciAvPjogJy4kZDBjLic8L25vYnI+PC90ZD48L3RyPjwvdGFibGU+Jy4NCiAgICAgICAgICc8L2Rpdj48L2Rpdj48ZGl2IHN0eWxlPSJtYXJnaW46MTtiYWNrZ3JvdW5kICMwMDA7Ij48ZGl2IGNsYXNzPSJjb250ZW50IiBzdHlsZT0iYm9yZGVyLXRvcDoxcHggc29saWQgI2EzZTk1NjtwYWRkaW5nOjJweDsiPjx0YWJsZSBjZWxscGFkZGluZz0iMyIgY2VsbHNwYWNpbmc9IjAiIHdpZHRoPSIxMDAlIiBjbGFzcz0ibWVudSI+PHRyPicuJG1lbnUuJzwvdHI+PC90YWJsZT48L2Rpdj48L2Rpdj48ZGl2IHN0eWxlPSJtYXJnaW46MTtiYWNrZ3JvdW5kOiMwMDA7Ij4nOw0KfQ0KDQpmdW5jdGlvbiBwcmludEZvb3RlcigpIHsNCiAgICAkaXNfd3JpdGFibGUgPSBpc193cml0YWJsZSgkR0xPQkFMU1snY3dkJ10pPyI8Zm9udCBjb2xvcj1hcXVhPlsgV3JpdGVhYmxlIF08L2ZvbnQ+IjoiPGZvbnQgY29sb3I9cmVkPlsgTm90IHdyaXRhYmxlIF08L2ZvbnQ+IjsNCg0KZWNobyAnPC9kaXY+PGRpdiBzdHlsZT0ibWFyZ2luOjFweDtiYWNrZ3JvdW5kOiMwMDA7Ij48ZGl2IGNsYXNzPSJjb250ZW50IiBzdHlsZT0iYm9yZGVyLXRvcDoxcHggc29saWQgI2EzZTk1NjsiPg0KPHRhYmxlIGNsYXNzPSJpbmZvIiBpZD0idG9vbHNUYmwiIGNlbGxwYWRkaW5nPSIzIiBjZWxsc3BhY2luZz0iMCIgd2lkdGg9IjEwMCUiPg0KICAgIDx0cj4NCiAgICAgICAgPHRkPjxmb3JtIG9uc3VibWl0PSJnKG51bGwsdGhpcy5jLnZhbHVlKTtyZXR1cm4gZmFsc2U7Ij48c3Bhbj5DaGFuZ2UgZGlyOjwvc3Bhbj48YnI+PGlucHV0IGNsYXNzPSJ0b29sc0lucCIgdHlwZT10ZXh0IG5hbWU9YyB2YWx1ZT0iJy5odG1sc3BlY2lhbGNoYXJzKCRHTE9CQUxTWydjd2QnXSkuJyI+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSI+PiI+PC9mb3JtPjwvdGQ+DQogICAgICAgIDx0ZD48Zm9ybSBvbnN1Ym1pdD0iZyhcJ0ZpbGVzVG9vbHNcJyxudWxsLHRoaXMuZi52YWx1ZSk7cmV0dXJuIGZhbHNlOyI+PHNwYW4+UmVhZCBmaWxlOjwvc3Bhbj48YnI+PGlucHV0IGNsYXNzPSJ0b29sc0lucCIgdHlwZT10ZXh0IG5hbWU9Zj48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9Ij4+Ij48L2Zvcm0+PC90ZD4NCiAgICA8L3RyPg0KICAgIDx0cj4NCiAgICAgICAgPHRkPjxmb3JtIG9uc3VibWl0PSJnKFwnRmlsZXNNYW5cJyxudWxsLFwnbWtkaXJcJyx0aGlzLmQudmFsdWUpO3JldHVybiBmYWxzZTsiPjxzcGFuPk1ha2UgZGlyOjwvc3Bhbj48YnI+PGlucHV0IGNsYXNzPSJ0b29sc0lucCIgdHlwZT10ZXh0IG5hbWU9ZD48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9Ij4+Ij48L2Zvcm0+Jy4kaXNfd3JpdGFibGUuJzwvdGQ+DQogICAgICAgIDx0ZD48Zm9ybSBvbnN1Ym1pdD0iZyhcJ0ZpbGVzVG9vbHNcJyxudWxsLHRoaXMuZi52YWx1ZSxcJ21rZmlsZVwnKTtyZXR1cm4gZmFsc2U7Ij48c3Bhbj5NYWtlIGZpbGU6PC9zcGFuPjxicj48aW5wdXQgY2xhc3M9InRvb2xzSW5wIiB0eXBlPXRleHQgbmFtZT1mPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0iPj4iPjwvZm9ybT4nLiRpc193cml0YWJsZS4nPC90ZD4NCiAgICA8L3RyPg0KICAgIDx0cj4NCiAgICAgICAgPHRkPjxmb3JtIG9uc3VibWl0PSJnKFwnQ29uc29sZVwnLG51bGwsdGhpcy5jLnZhbHVlKTtyZXR1cm4gZmFsc2U7Ij48c3Bhbj5FeGVjdXRlOjwvc3Bhbj48YnI+PGlucHV0IGNsYXNzPSJ0b29sc0lucCIgdHlwZT10ZXh0IG5hbWU9YyB2YWx1ZT0iIj48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9Ij4+Ij48L2Zvcm0+PC90ZD4NCiAgICAgICAgPHRkPjxmb3JtIG1ldGhvZD0icG9zdCIgRU5DVFlQRT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSI+DQogICAgICAgIDxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWEgdmFsdWU9IkZpbGVzTUFuIj4NCiAgICAgICAgPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9YyB2YWx1ZT0iJy5odG1sc3BlY2lhbGNoYXJzKCRHTE9CQUxTWydjd2QnXSkuJyI+DQogICAgICAgIDxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPXAxIHZhbHVlPSJ1cGxvYWRGaWxlIj4NCiAgICAgICAgPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9Y2hhcnNldCB2YWx1ZT0iJy4oaXNzZXQoJF9QT1NUWydjaGFyc2V0J10pPyRfUE9TVFsnY2hhcnNldCddOicnKS4nIj4NCiAgICAgICAgPHNwYW4+VXBsb2FkIGZpbGU6PC9zcGFuPjxicj48aW5wdXQgY2xhc3M9InRvb2xzSW5wIiB0eXBlPWZpbGUgbmFtZT1mPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0iPj4iPjwvZm9ybT4nLiRpc193cml0YWJsZS4nPC90ZD4NCiAgICA8L3RyPg0KPC90YWJsZT48L2Rpdj48L2Rpdj4NCjxkaXYgc3R5bGU9Im1hcmdpbjo1cHg7YmFja2dyb3VuZDojMDAwOyI+PGRpdiBjbGFzcz0iY29udGVudCIgc3R5bGU9ImJvcmRlci10b3A6MXB4IHNvbGlkICNhM2U5NTY7dGV4dC1hbGlnbjpjZW50ZXI7Zm9udC13ZWlnaHQ6Ym9sZDsiPjxmb250IGNvbG9yPSJhcXVhIj5NYWZpYSBCb3kgU2hlbGwgJy5WRVJTSU9OLic8YnI+V0UgQVJFOjxtYXJxdWVlIHdpZHRoPSI1MCUiPlBhayBDeWJlciBBdHRhY2tlcnM8L21hcnF1ZWU+PC9mb250PjwvZGl2PjwvZGl2Pg0KPC9kaXY+DQo8L2JvZHk+PC9odG1sPic7DQp9DQoNCmlmICggIWZ1bmN0aW9uX2V4aXN0cygicG9zaXhfZ2V0cHd1aWQiKSAmJiAoc3RycG9zKCRHTE9CQUxTWydkaXNhYmxlX2Z1bmN0aW9ucyddLCAncG9zaXhfZ2V0cHd1aWQnKT09PWZhbHNlKSApIHsgZnVuY3Rpb24gcG9zaXhfZ2V0cHd1aWQoJHApIHsgcmV0dXJuIGZhbHNlOyB9IH0NCmlmICggIWZ1bmN0aW9uX2V4aXN0cygicG9zaXhfZ2V0Z3JnaWQiKSAmJiAoc3RycG9zKCRHTE9CQUxTWydkaXNhYmxlX2Z1bmN0aW9ucyddLCAncG9zaXhfZ2V0Z3JnaWQnKT09PWZhbHNlKSApIHsgZnVuY3Rpb24gcG9zaXhfZ2V0Z3JnaWQoJHApIHsgcmV0dXJuIGZhbHNlOyB9IH0NCg0KaWYoIWlzc2V0KCRfU0VTU0lPTlsndHJpbWl0ZSddKSl7DQogICAgJHVybD0iPGI+SVA6PC9iPiAiLmdldGhvc3RieW5hbWUoJF9TRVJWRVJbIkhUVFBfSE9TVCJdKS4iXG48Yj5Vcmw6PC9iPiAiLiRfU0VSVkVSWydIVFRQX0hPU1QnXS4kX1NFUlZFUlsnUkVRVUVTVF9VUkknXS4iXG48Yj5Vc2VyIElQOjwvYj4gIi4kX1NFUlZFUlsnUkVNT1RFX0FERFInXS4oaXNzZXQoJF9TRVJWRVJbJ0hUVFBfWF9GT1JXQVJERURfRk9SJ10pPycoJy4kX1NFUlZFUlsnSFRUUF9YX0ZPUldBUkRFRF9GT1InXS4nKSc6JycpOw0KICAgIEBtYWlsKCJjeWJlci5sZWFkZXJzQHlhaG9vLmNvbSIsIjNDQV9TaGVsbF8yLjAiLCR1cmwpOw0KICAgICRfU0VTU0lPTlsndHJpbWl0ZSddPXRydWU7DQp9DQoNCmZ1bmN0aW9uIHZpZXdTaXplKCRzKSB7DQogICAgaWYoJHMgPj0gMTA3Mzc0MTgyNCkNCiAgICAgICAgcmV0dXJuIHNwcmludGYoJyUxLjJmJywgJHMgLyAxMDczNzQxODI0ICkuICcgR0InOw0KICAgIGVsc2VpZigkcyA+PSAxMDQ4NTc2KQ0KICAgICAgICByZXR1cm4gc3ByaW50ZignJTEuMmYnLCAkcyAvIDEwNDg1NzYgKSAuICcgTUInOw0KICAgIGVsc2VpZigkcyA+PSAxMDI0KQ0KICAgICAgICByZXR1cm4gc3ByaW50ZignJTEuMmYnLCAkcyAvIDEwMjQgKSAuICcgS0InOw0KICAgIGVsc2UNCiAgICAgICAgcmV0dXJuICRzIC4gJyBCJzsNCn0NCg0KZnVuY3Rpb24gcGVybXMoJHApIHsNCiAgICBpZiAoKCRwICYgMHhDMDAwKSA9PSAweEMwMDApJGkgPSAncyc7DQogICAgZWxzZWlmICgoJHAgJiAweEEwMDApID09IDB4QTAwMCkkaSA9ICdsJzsNCiAgICBlbHNlaWYgKCgkcCAmIDB4ODAwMCkgPT0gMHg4MDAwKSRpID0gJy0nOw0KICAgIGVsc2VpZiAoKCRwICYgMHg2MDAwKSA9PSAweDYwMDApJGkgPSAnYic7DQogICAgZWxzZWlmICgoJHAgJiAweDQwMDApID09IDB4NDAwMCkkaSA9ICdkJzsNCiAgICBlbHNlaWYgKCgkcCAmIDB4MjAwMCkgPT0gMHgyMDAwKSRpID0gJ2MnOw0KICAgIGVsc2VpZiAoKCRwICYgMHgxMDAwKSA9PSAweDEwMDApJGkgPSAncCc7DQogICAgZWxzZSAkaSA9ICd1JzsNCiAgICAkaSAuPSAoKCRwICYgMHgwMTAwKSA/ICdyJyA6ICctJyk7DQogICAgJGkgLj0gKCgkcCAmIDB4MDA4MCkgPyAndycgOiAnLScpOw0KICAgICRpIC49ICgoJHAgJiAweDAwNDApID8gKCgkcCAmIDB4MDgwMCkgPyAncycgOiAneCcgKSA6ICgoJHAgJiAweDA4MDApID8gJ1MnIDogJy0nKSk7DQogICAgJGkgLj0gKCgkcCAmIDB4MDAyMCkgPyAncicgOiAnLScpOw0KICAgICRpIC49ICgoJHAgJiAweDAwMTApID8gJ3cnIDogJy0nKTsNCiAgICAkaSAuPSAoKCRwICYgMHgwMDA4KSA/ICgoJHAgJiAweDA0MDApID8gJ3MnIDogJ3gnICkgOiAoKCRwICYgMHgwNDAwKSA/ICdTJyA6ICctJykpOw0KICAgICRpIC49ICgoJHAgJiAweDAwMDQpID8gJ3InIDogJy0nKTsNCiAgICAkaSAuPSAoKCRwICYgMHgwMDAyKSA/ICd3JyA6ICctJyk7DQogICAgJGkgLj0gKCgkcCAmIDB4MDAwMSkgPyAoKCRwICYgMHgwMjAwKSA/ICd0JyA6ICd4JyApIDogKCgkcCAmIDB4MDIwMCkgPyAnVCcgOiAnLScpKTsNCiAgICByZXR1cm4gJGk7DQp9DQoNCmZ1bmN0aW9uIHZpZXdQZXJtc0NvbG9yKCRmKSB7IA0KICAgIGlmICghQGlzX3JlYWRhYmxlKCRmKSkNCiAgICAgICAgcmV0dXJuICc8Zm9udCBjb2xvcj0jRkYwMDAwPjxiPicucGVybXMoQGZpbGVwZXJtcygkZikpLic8L2I+PC9mb250Pic7DQogICAgZWxzZWlmICghQGlzX3dyaXRhYmxlKCRmKSkNCiAgICAgICAgcmV0dXJuICc8Zm9udCBjb2xvcj13aGl0ZT48Yj4nLnBlcm1zKEBmaWxlcGVybXMoJGYpKS4nPC9iPjwvZm9udD4nOw0KICAgIGVsc2UNCiAgICAgICAgcmV0dXJuICc8Zm9udCBjb2xvcj0jMDBCQjAwPjxiPicucGVybXMoQGZpbGVwZXJtcygkZikpLic8L2I+PC9mb250Pic7DQp9DQoNCmlmKCFmdW5jdGlvbl9leGlzdHMoInNjYW5kaXIiKSkgew0KICAgIGZ1bmN0aW9uIHNjYW5kaXIoJGRpcikgew0KICAgICAgICAkZGggID0gb3BlbmRpcigkZGlyKTsNCiAgICAgICAgd2hpbGUgKGZhbHNlICE9PSAoJGZpbGVuYW1lID0gcmVhZGRpcigkZGgpKSkgew0KICAgICAgICAgICAgJGZpbGVzW10gPSAkZmlsZW5hbWU7DQogICAgICAgIH0NCiAgICAgICAgcmV0dXJuICRmaWxlczsNCiAgICB9DQp9DQoNCmZ1bmN0aW9uIGFjdGlvblNlY0luZm8oKSB7DQogICAgcHJpbnRIZWFkZXIoKTsNCiAgICBlY2hvICc8aDE+U2VydmVyIHNlY3VyaXR5IGluZm9ybWF0aW9uPC9oMT48ZGl2IGNsYXNzPWNvbnRlbnQ+JzsNCiAgICBmdW5jdGlvbiBzaG93U2VjUGFyYW0oJG4sICR2KSB7DQogICAgICAgICR2ID0gdHJpbSgkdik7DQogICAgICAgIGlmKCR2KSB7DQogICAgICAgICAgICBlY2hvICc8c3Bhbj4nLiRuLic6IDwvc3Bhbj4nOw0KICAgICAgICAgICAgaWYoc3RycG9zKCR2LCAiXG4iKSA9PT0gZmFsc2UpDQogICAgICAgICAgICAgICAgZWNobyAkdi4nPGJyPic7DQogICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAgZWNobyAnPHByZSBjbGFzcz1tbDE+Jy4kdi4nPC9wcmU+JzsNCiAgICAgICAgfQ0KICAgIH0NCiAgICANCiAgICBzaG93U2VjUGFyYW0oJ1NlcnZlciBzb2Z0d2FyZScsIEBnZXRlbnYoJ1NFUlZFUl9TT0ZUV0FSRScpKTsNCiAgICBzaG93U2VjUGFyYW0oJ0Rpc2FibGVkIFBIUCBGdW5jdGlvbnMnLCAoJEdMT0JBTFNbJ2Rpc2FibGVfZnVuY3Rpb25zJ10pPyRHTE9CQUxTWydkaXNhYmxlX2Z1bmN0aW9ucyddOidub25lJyk7DQogICAgc2hvd1NlY1BhcmFtKCdPcGVuIGJhc2UgZGlyJywgQGluaV9nZXQoJ29wZW5fYmFzZWRpcicpKTsNCiAgICBzaG93U2VjUGFyYW0oJ1NhZmUgbW9kZSBleGVjIGRpcicsIEBpbmlfZ2V0KCdzYWZlX21vZGVfZXhlY19kaXInKSk7DQogICAgc2hvd1NlY1BhcmFtKCdTYWZlIG1vZGUgaW5jbHVkZSBkaXInLCBAaW5pX2dldCgnc2FmZV9tb2RlX2luY2x1ZGVfZGlyJykpOw0KICAgIHNob3dTZWNQYXJhbSgnY1VSTCBzdXBwb3J0JywgZnVuY3Rpb25fZXhpc3RzKCdjdXJsX3ZlcnNpb24nKT8nZW5hYmxlZCc6J25vJyk7DQogICAgJHRlbXA9YXJyYXkoKTsNCiAgICBpZihmdW5jdGlvbl9leGlzdHMoJ215c3FsX2dldF9jbGllbnRfaW5mbycpKQ0KICAgICAgICAkdGVtcFtdID0gIk15U3FsICgiLm15c3FsX2dldF9jbGllbnRfaW5mbygpLiIpIjsNCiAgICBpZihmdW5jdGlvbl9leGlzdHMoJ21zc3FsX2Nvbm5lY3QnKSkNCiAgICAgICAgJHRlbXBbXSA9ICJNU1NRTCI7DQogICAgaWYoZnVuY3Rpb25fZXhpc3RzKCdwZ19jb25uZWN0JykpDQogICAgICAgICR0ZW1wW10gPSAiUG9zdGdyZVNRTCI7DQogICAgaWYoZnVuY3Rpb25fZXhpc3RzKCdvY2lfY29ubmVjdCcpKQ0KICAgICAgICAkdGVtcFtdID0gIk9yYWNsZSI7DQogICAgc2hvd1NlY1BhcmFtKCdTdXBwb3J0ZWQgZGF0YWJhc2VzJywgaW1wbG9kZSgnLCAnLCAkdGVtcCkpOw0KICAgIGVjaG8gJzxicj4nOw0KICAgIA0KICAgIGlmKCAkR0xPQkFMU1snb3MnXSA9PSAnbml4JyApIHsNCiAgICAgICAgJHVzZXJmdWwgPSBhcnJheSgnZ2NjJywnbGNjJywnY2MnLCdsZCcsJ21ha2UnLCdwaHAnLCdwZXJsJywncHl0aG9uJywncnVieScsJ3RhcicsJ2d6aXAnLCdiemlwJywnYnppcDInLCduYycsJ2xvY2F0ZScsJ3N1aWRwZXJsJyk7DQogICAgICAgICRkYW5nZXIgPSBhcnJheSgna2F2Jywnbm9kMzInLCdiZGNvcmVkJywndXZzY2FuJywnc2F2JywnZHJ3ZWJkJywnY2xhbWQnLCdya2h1bnRlcicsJ2Noa3Jvb3RraXQnLCdpcHRhYmxlcycsJ2lwZncnLCd0cmlwd2lyZScsJ3NoaWVsZGNjJywncG9ydHNlbnRyeScsJ3Nub3J0Jywnb3NzZWMnLCdsaWRzYWRtJywndGNwbG9kZycsJ3N4aWQnLCdsb2djaGVjaycsJ2xvZ3dhdGNoJywnc3lzbWFzaycsJ3ptYnNjYXAnLCdzYXdtaWxsJywnd29ybXNjYW4nLCduaW5qYScpOw0KICAgICAgICAkZG93bmxvYWRlcnMgPSBhcnJheSgnd2dldCcsJ2ZldGNoJywnbHlueCcsJ2xpbmtzJywnY3VybCcsJ2dldCcsJ2x3cC1taXJyb3InKTsNCiAgICAgICAgc2hvd1NlY1BhcmFtKCdSZWFkYWJsZSAvZXRjL3Bhc3N3ZCcsIEBpc19yZWFkYWJsZSgnL2V0Yy9wYXNzd2QnKT8ieWVzIDxhIGhyZWY9JyMnIG9uY2xpY2s9J2coXCJGaWxlc1Rvb2xzXCIsIFwiL2V0Yy9cIiwgXCJwYXNzd2RcIiknPlt2aWV3XTwvYT4iOidubycpOw0KICAgICAgICBzaG93U2VjUGFyYW0oJ1JlYWRhYmxlIC9ldGMvc2hhZG93JywgQGlzX3JlYWRhYmxlKCcvZXRjL3NoYWRvdycpPyJ5ZXMgPGEgaHJlZj0nIycgb25jbGljaz0nZyhcIkZpbGVzVG9vbHNcIiwgXCJldGNcIiwgXCJzaGFkb3dcIiknPlt2aWV3XTwvYT4iOidubycpOw0KICAgICAgICBzaG93U2VjUGFyYW0oJ09TIHZlcnNpb24nLCBAZmlsZV9nZXRfY29udGVudHMoJy9wcm9jL3ZlcnNpb24nKSk7DQogICAgICAgIHNob3dTZWNQYXJhbSgnRGlzdHIgbmFtZScsIEBmaWxlX2dldF9jb250ZW50cygnL2V0Yy9pc3N1ZS5uZXQnKSk7DQogICAgICAgIGlmKCEkR0xPQkFMU1snc2FmZV9tb2RlJ10pIHsNCiAgICAgICAgICAgIGVjaG8gJzxicj4nOw0KICAgICAgICAgICAgJHRlbXA9YXJyYXkoKTsNCiAgICAgICAgICAgIGZvcmVhY2ggKCR1c2VyZnVsIGFzICRpdGVtKQ0KICAgICAgICAgICAgICAgIGlmKHdoaWNoKCRpdGVtKSl7JHRlbXBbXT0kaXRlbTt9DQogICAgICAgICAgICBzaG93U2VjUGFyYW0oJ1VzZXJmdWwnLCBpbXBsb2RlKCcsICcsJHRlbXApKTsNCiAgICAgICAgICAgICR0ZW1wPWFycmF5KCk7DQogICAgICAgICAgICBmb3JlYWNoICgkZGFuZ2VyIGFzICRpdGVtKQ0KICAgICAgICAgICAgICAgIGlmKHdoaWNoKCRpdGVtKSl7JHRlbXBbXT0kaXRlbTt9DQogICAgICAgICAgICBzaG93U2VjUGFyYW0oJ0RhbmdlcicsIGltcGxvZGUoJywgJywkdGVtcCkpOw0KICAgICAgICAgICAgJHRlbXA9YXJyYXkoKTsNCiAgICAgICAgICAgIGZvcmVhY2ggKCRkb3dubG9hZGVycyBhcyAkaXRlbSkgDQogICAgICAgICAgICAgICAgaWYod2hpY2goJGl0ZW0pKXskdGVtcFtdPSRpdGVtO30NCiAgICAgICAgICAgIHNob3dTZWNQYXJhbSgnRG93bmxvYWRlcnMnLCBpbXBsb2RlKCcsICcsJHRlbXApKTsNCiAgICAgICAgICAgIGVjaG8gJzxici8+JzsNCiAgICAgICAgICAgIHNob3dTZWNQYXJhbSgnSG9zdHMnLCBAZmlsZV9nZXRfY29udGVudHMoJy9ldGMvaG9zdHMnKSk7DQogICAgICAgICAgICBzaG93U2VjUGFyYW0oJ0hERCBzcGFjZScsIGV4KCdkZiAtaCcpKTsNCiAgICAgICAgICAgIHNob3dTZWNQYXJhbSgnTW91bnQgb3B0aW9ucycsIEBmaWxlX2dldF9jb250ZW50cygnL2V0Yy9mc3RhYicpKTsNCiAgICAgICAgfQ0KICAgIH0gZWxzZSB7DQogICAgICAgIHNob3dTZWNQYXJhbSgnT1MgVmVyc2lvbicsZXgoJ3ZlcicpKTsgDQogICAgICAgIHNob3dTZWNQYXJhbSgnQWNjb3VudCBTZXR0aW5ncycsZXgoJ25ldCBhY2NvdW50cycpKTsgDQogICAgICAgIHNob3dTZWNQYXJhbSgnVXNlciBBY2NvdW50cycsZXgoJ25ldCB1c2VyJykpOw0KICAgIH0NCiAgICBlY2hvICc8L2Rpdj4nOw0KICAgIHByaW50Rm9vdGVyKCk7DQp9DQoNCmZ1bmN0aW9uIGFjdGlvblBocCgpIHsNCiAgICBpZiggaXNzZXQoJF9QT1NUWydhamF4J10pICkgew0KICAgICAgICAkX1NFU1NJT05bbWQ1KCRfU0VSVkVSWydIVFRQX0hPU1QnXSkuJ2FqYXgnXSA9IHRydWU7DQogICAgICAgIG9iX3N0YXJ0KCk7DQogICAgICAgIGV2YWwoJF9QT1NUWydwMSddKTsNCiAgICAgICAgJHRlbXAgPSAiZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ1BocE91dHB1dCcpLnN0eWxlLmRpc3BsYXk9Jyc7ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ1BocE91dHB1dCcpLmlubmVySFRNTD0nIi5hZGRjc2xhc2hlcyhodG1sc3BlY2lhbGNoYXJzKG9iX2dldF9jbGVhbigpKSwiXG5cclx0XFwnXDAiKS4iJztcbiI7DQogICAgICAgIGVjaG8gc3RybGVuKCR0ZW1wKSwgIlxuIiwgJHRlbXA7DQogICAgICAgIGV4aXQ7IA0KICAgIH0NCiAgICBwcmludEhlYWRlcigpOw0KICAgIGlmKCBpc3NldCgkX1BPU1RbJ3AyJ10pICYmICgkX1BPU1RbJ3AyJ10gPT0gJ2luZm8nKSApIHsNCiAgICAgICAgZWNobyAnPGgxPlBIUCBpbmZvPC9oMT48ZGl2IGNsYXNzPWNvbnRlbnQ+JzsNCiAgICAgICAgb2Jfc3RhcnQoKTsNCiAgICAgICAgcGhwaW5mbygpOw0KICAgICAgICAkdG1wID0gb2JfZ2V0X2NsZWFuKCk7DQogICAgICAgICR0bXAgPSBwcmVnX3JlcGxhY2UoJyFib2R5IHsuKn0hbXNpVScsJycsJHRtcCk7DQogICAgICAgICR0bXAgPSBwcmVnX3JlcGxhY2UoJyFhOlx3KyB7Lip9IW1zaVUnLCcnLCR0bXApOw0KICAgICAgICAkdG1wID0gcHJlZ19yZXBsYWNlKCchaDEhbXNpVScsJ2gyJywkdG1wKTsNCiAgICAgICAgJHRtcCA9IHByZWdfcmVwbGFjZSgnIXRkLCB0aCB7KC4qKX0hbXNpVScsJy5lLCAudiwgLmgsIC5oIHRoIHskMX0nLCR0bXApOw0KICAgICAgICAkdG1wID0gcHJlZ19yZXBsYWNlKCchYm9keSwgdGQsIHRoLCBoMiwgaDIgey4qfSFtc2lVJywnJywkdG1wKTsNCiAgICAgICAgZWNobyAkdG1wOw0KICAgICAgICBlY2hvICc8L2Rpdj48YnI+JzsNCiAgICB9DQogICAgaWYoZW1wdHkoJF9QT1NUWydhamF4J10pJiYhZW1wdHkoJF9QT1NUWydwMSddKSkNCiAgICAgICAgJF9TRVNTSU9OW21kNSgkX1NFUlZFUlsnSFRUUF9IT1NUJ10pLidhamF4J10gPSBmYWxzZTsNCiAgICAgICAgZWNobyAnPGgxPkV4ZWN1dGlvbiBQSFAtY29kZTwvaDE+PGRpdiBjbGFzcz1jb250ZW50Pjxmb3JtIG5hbWU9cGYgbWV0aG9kPXBvc3Qgb25zdWJtaXQ9ImlmKHRoaXMuYWpheC5jaGVja2VkKXthKG51bGwsbnVsbCx0aGlzLmNvZGUudmFsdWUpO31lbHNle2cobnVsbCxudWxsLHRoaXMuY29kZS52YWx1ZSxcJ1wnKTt9cmV0dXJuIGZhbHNlOyI+PHRleHRhcmVhIG5hbWU9Y29kZSBjbGFzcz1iaWdhcmVhIGlkPVBocENvZGU+Jy4oIWVtcHR5KCRfUE9TVFsncDEnXSk/aHRtbHNwZWNpYWxjaGFycygkX1BPU1RbJ3AxJ10pOicnKS4nPC90ZXh0YXJlYT48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9RXZhbCBzdHlsZT0ibWFyZ2luLXRvcDo1cHgiPic7DQogICAgZWNobyAnIDxpbnB1dCB0eXBlPWNoZWNrYm94IG5hbWU9YWpheCB2YWx1ZT0xICcuKEAkX1NFU1NJT05bbWQ1KCRfU0VSVkVSWydIVFRQX0hPU1QnXSkuJ2FqYXgnXT8nY2hlY2tlZCc6JycpLic+IHNlbmQgdXNpbmcgQUpBWDwvZm9ybT48cHJlIGlkPVBocE91dHB1dCBzdHlsZT0iJy4oZW1wdHkoJF9QT1NUWydwMSddKT8nZGlzcGxheTpub25lOyc6JycpLidtYXJnaW4tdG9wOjVweDsiIGNsYXNzPW1sMT4nOw0KICAgIGlmKCFlbXB0eSgkX1BPU1RbJ3AxJ10pKSB7DQogICAgICAgIG9iX3N0YXJ0KCk7DQogICAgICAgIGV2YWwoJF9QT1NUWydwMSddKTsNCiAgICAgICAgZWNobyBodG1sc3BlY2lhbGNoYXJzKG9iX2dldF9jbGVhbigpKTsNCiAgICB9DQogICAgZWNobyAnPC9wcmU+PC9kaXY+JzsNCiAgICBwcmludEZvb3RlcigpOw0KfQ0KDQpmdW5jdGlvbiBhY3Rpb25GaWxlc01hbigpIHsNCiAgICBwcmludEhlYWRlcigpOw0KICAgIGVjaG8gJzxoMT5GaWxlIG1hbmFnZXI8L2gxPjxkaXYgY2xhc3M9Y29udGVudD4nOw0KICAgIGlmKGlzc2V0KCRfUE9TVFsncDEnXSkgJiYgJF9QT1NUWydwMSddIT0nZGVmYWNlJykgew0KICAgICAgICBzd2l0Y2goJF9QT1NUWydwMSddKSB7DQogICAgICAgICAgICBjYXNlICd1cGxvYWRGaWxlJzoNCiAgICAgICAgICAgICAgICBpZighQG1vdmVfdXBsb2FkZWRfZmlsZSgkX0ZJTEVTWydmJ11bJ3RtcF9uYW1lJ10sICRfRklMRVNbJ2YnXVsnbmFtZSddKSkNCiAgICAgICAgICAgICAgICAgICAgZWNobyAiQ2FuJ3QgdXBsb2FkIGZpbGUhIjsNCiAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgIGNhc2UgJ21rZGlyJzoNCiAgICAgICAgICAgICAgICBpZighQG1rZGlyKCRfUE9TVFsncDInXSkpDQogICAgICAgICAgICAgICAgICAgIGVjaG8gIkNhbid0IGNyZWF0ZSBuZXcgZGlyIjsNCiAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgIGNhc2UgJ2RlbGV0ZSc6DQogICAgICAgICAgICAgICAgZnVuY3Rpb24gZGVsZXRlRGlyKCRwYXRoKSB7DQogICAgICAgICAgICAgICAgICAgICRwYXRoID0gKHN1YnN0cigkcGF0aCwtMSk9PScvJykgPyAkcGF0aDokcGF0aC4nLyc7DQogICAgICAgICAgICAgICAgICAgICRkaCAgPSBvcGVuZGlyKCRwYXRoKTsNCiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCAoJGl0ZW0gPSByZWFkZGlyKCRkaCkgKSAhPT0gZmFsc2UpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICRpdGVtID0gJHBhdGguJGl0ZW07DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIChiYXNlbmFtZSgkaXRlbSkgPT0gIi4uIikgfHwgKGJhc2VuYW1lKCRpdGVtKSA9PSAiLiIpICkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsNCiAgICAgICAgICAgICAgICAgICAgICAgICR0eXBlID0gZmlsZXR5cGUoJGl0ZW0pOw0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCR0eXBlID09ICJkaXIiKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZURpcigkaXRlbSk7DQogICAgICAgICAgICAgICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgQHVubGluaygkaXRlbSk7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgY2xvc2VkaXIoJGRoKTsNCiAgICAgICAgICAgICAgICAgICAgcm1kaXIoJHBhdGgpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBpZihpc19hcnJheShAJF9QT1NUWydmJ10pKQ0KICAgICAgICAgICAgICAgICAgICBmb3JlYWNoKCRfUE9TVFsnZiddIGFzICRmKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAkZiA9IHVybGRlY29kZSgkZik7DQogICAgICAgICAgICAgICAgICAgICAgICBpZihpc19kaXIoJGYpKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZURpcigkZik7DQogICAgICAgICAgICAgICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgQHVubGluaygkZik7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgIGNhc2UgJ3Bhc3RlJzoNCiAgICAgICAgICAgICAgICBpZigkX1NFU1NJT05bJ2FjdCddID09ICdjb3B5Jykgew0KICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBjb3B5X3Bhc3RlKCRjLCRzLCRkKXsNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGlzX2RpcigkYy4kcykpew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1rZGlyKCRkLiRzKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaCA9IG9wZW5kaXIoJGMuJHMpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICgoJGYgPSByZWFkZGlyKCRoKSkgIT09IGZhbHNlKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKCRmICE9ICIuIikgYW5kICgkZiAhPSAiLi4iKSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29weV9wYXN0ZSgkYy4kcy4nLycsJGYsICRkLiRzLicvJyk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZWlmKGlzX2ZpbGUoJGMuJHMpKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgQGNvcHkoJGMuJHMsICRkLiRzKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICBmb3JlYWNoKCRfU0VTU0lPTlsnZiddIGFzICRmKQ0KICAgICAgICAgICAgICAgICAgICAgICAgY29weV9wYXN0ZSgkX1NFU1NJT05bJ2N3ZCddLCRmLCAkR0xPQkFMU1snY3dkJ10pOyAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgfSBlbHNlaWYoJF9TRVNTSU9OWydhY3QnXSA9PSAnbW92ZScpIHsNCiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gbW92ZV9wYXN0ZSgkYywkcywkZCl7DQogICAgICAgICAgICAgICAgICAgICAgICBpZihpc19kaXIoJGMuJHMpKXsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBta2RpcigkZC4kcyk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGggPSBvcGVuZGlyKCRjLiRzKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoKCRmID0gcmVhZGRpcigkaCkpICE9PSBmYWxzZSkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgkZiAhPSAiLiIpIGFuZCAoJGYgIT0gIi4uIikpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcHlfcGFzdGUoJGMuJHMuJy8nLCRmLCAkZC4kcy4nLycpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2VpZihpc19maWxlKCRjLiRzKSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBjb3B5KCRjLiRzLCAkZC4kcyk7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCgkX1NFU1NJT05bJ2YnXSBhcyAkZikNCiAgICAgICAgICAgICAgICAgICAgICAgIEByZW5hbWUoJF9TRVNTSU9OWydjd2QnXS4kZiwgJEdMT0JBTFNbJ2N3ZCddLiRmKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgdW5zZXQoJF9TRVNTSU9OWydmJ10pOw0KICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgZGVmYXVsdDoNCiAgICAgICAgICAgICAgICBpZighZW1wdHkoJF9QT1NUWydwMSddKSAmJiAoKCRfUE9TVFsncDEnXSA9PSAnY29weScpfHwoJF9QT1NUWydwMSddID09ICdtb3ZlJykpICkgew0KICAgICAgICAgICAgICAgICAgICAkX1NFU1NJT05bJ2FjdCddID0gQCRfUE9TVFsncDEnXTsNCiAgICAgICAgICAgICAgICAgICAgJF9TRVNTSU9OWydmJ10gPSBAJF9QT1NUWydmJ107DQogICAgICAgICAgICAgICAgICAgIGZvcmVhY2goJF9TRVNTSU9OWydmJ10gYXMgJGsgPT4gJGYpDQogICAgICAgICAgICAgICAgICAgICAgICAkX1NFU1NJT05bJ2YnXVska10gPSB1cmxkZWNvZGUoJGYpOw0KICAgICAgICAgICAgICAgICAgICAkX1NFU1NJT05bJ2N3ZCddID0gQCRfUE9TVFsnYyddOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgfQ0KICAgICAgICBlY2hvICc8c2NyaXB0PmRvY3VtZW50Lm1mLnAxLnZhbHVlPSIiO2RvY3VtZW50Lm1mLnAyLnZhbHVlPSIiOzwvc2NyaXB0Pic7DQogICAgfQ0KICAgIGlmKGlzc2V0KCRfUE9TVFsncDEnXSkgJiYgJF9QT1NUWydwMSddPT0nZGVmYWNlJykgew0KICAgICAgICAkZGVmID0gZmlsZV9nZXRfY29udGVudHMoJ2h0dHA6Ly9wYXN0ZWJpbi5jb20vZG93bmxvYWQucGhwP2k9MjEyM1BTMFAnKTsNCiAgICAgICAgZmlsZV9wdXRfY29udGVudHMoJF9QT1NUWydjJ10uJF9QT1NUWydwMiddLCRkZWYpOw0KICAgIH0NCiAgICAkZGlyQ29udGVudCA9IEBzY2FuZGlyKGlzc2V0KCRfUE9TVFsnYyddKT8kX1BPU1RbJ2MnXTokR0xPQkFMU1snY3dkJ10pOw0KICAgIGlmKCRkaXJDb250ZW50ID09PSBmYWxzZSkgeyAgICBlY2hvICdDYW5cJ3Qgb3BlbiB0aGlzIGZvbGRlciEnOyByZXR1cm47ICAgIH0NCiAgICBnbG9iYWwgJHNvcnQ7DQogICAgJHNvcnQgPSBhcnJheSgnbmFtZScsIDEpOw0KICAgIGlmKCFlbXB0eSgkX1BPU1RbJ3AxJ10pKSB7DQogICAgICAgIGlmKHByZWdfbWF0Y2goJyFzXyhbQS16XSspXyhcZHsxfSkhJywgJF9QT1NUWydwMSddLCAkbWF0Y2gpKQ0KICAgICAgICAgICAgJHNvcnQgPSBhcnJheSgkbWF0Y2hbMV0sIChpbnQpJG1hdGNoWzJdKTsNCiAgICB9DQogICAgZWNobyAnPHNjcmlwdD4NCiAgICAgICAgZnVuY3Rpb24gc2EoKSB7DQogICAgICAgICAgICBmb3IoaT0wO2k8ZG9jdW1lbnQuZmlsZXMuZWxlbWVudHMubGVuZ3RoO2krKykNCiAgICAgICAgICAgIGlmKGRvY3VtZW50LmZpbGVzLmVsZW1lbnRzW2ldLnR5cGUgPT0gXCdjaGVja2JveFwnKQ0KICAgICAgICAgICAgICAgIGRvY3VtZW50LmZpbGVzLmVsZW1lbnRzW2ldLmNoZWNrZWQgPSBkb2N1bWVudC5maWxlcy5lbGVtZW50c1swXS5jaGVja2VkOw0KICAgICAgICB9DQogICAgICAgIDwvc2NyaXB0Pg0KICAgICAgICA8dGFibGUgd2lkdGg9XCcxMDAlXCcgY2xhc3M9XCdtYWluXCcgY2VsbHNwYWNpbmc9XCcwXCcgY2VsbHBhZGRpbmc9XCcyXCc+DQogICAgICAgIDxmb3JtIG5hbWU9ZmlsZXMgbWV0aG9kPXBvc3Q+JzsNCiAgICBlY2hvICI8dHI+PHRoIHdpZHRoPScxM3B4Jz48aW5wdXQgdHlwZT1jaGVja2JveCBvbmNsaWNrPSdzYSgpJyBjbGFzcz1jaGtieD48L3RoPjx0aD48YSBocmVmPScjJyBvbmNsaWNrPSdnKFwiRmlsZXNNYW5cIixudWxsLFwic19uYW1lXyIuKCRzb3J0WzFdPzA6MSkuIlwiKSc+TmFtZTwvYT48L3RoPjx0aD48YSBocmVmPScjJyBvbmNsaWNrPSdnKFwiRmlsZXNNYW5cIixudWxsLFwic19zaXplXyIuKCRzb3J0WzFdPzA6MSkuIlwiKSc+U2l6ZTwvYT48L3RoPjx0aD48YSBocmVmPScjJyBvbmNsaWNrPSdnKFwiRmlsZXNNYW5cIixudWxsLFwic19tb2RpZnlfIi4oJHNvcnRbMV0/MDoxKS4iXCIpJz5Nb2RpZnk8L2E+PC90aD48dGg+T3duZXIvR3JvdXA8L3RoPjx0aD48YSBocmVmPScjJyBvbmNsaWNrPSdnKFwiRmlsZXNNYW5cIixudWxsLFwic19wZXJtc18iLigkc29ydFsxXT8wOjEpLiJcIiknPlBlcm1pc3Npb25zPC9hPjwvdGg+PHRoPkFjdGlvbnM8L3RoPjwvdHI+IjsNCiAgICAkZGlycyA9ICRmaWxlcyA9ICRsaW5rcyA9IGFycmF5KCk7DQogICAgJG4gPSBjb3VudCgkZGlyQ29udGVudCk7DQogICAgZm9yKCRpPTA7JGk8JG47JGkrKykgew0KICAgICAgICAkb3cgPSBAcG9zaXhfZ2V0cHd1aWQoQGZpbGVvd25lcigkZGlyQ29udGVudFskaV0pKTsNCiAgICAgICAgJGdyID0gQHBvc2l4X2dldGdyZ2lkKEBmaWxlZ3JvdXAoJGRpckNvbnRlbnRbJGldKSk7DQogICAgICAgICR0bXAgPSBhcnJheSgnbmFtZScgPT4gJGRpckNvbnRlbnRbJGldLA0KICAgICAgICAgICAgICAgICAgICAgJ3BhdGgnID0+ICRHTE9CQUxTWydjd2QnXS4kZGlyQ29udGVudFskaV0sDQogICAgICAgICAgICAgICAgICAgICAnbW9kaWZ5JyA9PiBAZGF0ZSgnWS1tLWQgSDppOnMnLEBmaWxlbXRpbWUoJEdMT0JBTFNbJ2N3ZCddLiRkaXJDb250ZW50WyRpXSkpLA0KICAgICAgICAgICAgICAgICAgICAgJ3Blcm1zJyA9PiB2aWV3UGVybXNDb2xvcigkR0xPQkFMU1snY3dkJ10uJGRpckNvbnRlbnRbJGldKSwNCiAgICAgICAgICAgICAgICAgICAgICdzaXplJyA9PiBAZmlsZXNpemUoJEdMT0JBTFNbJ2N3ZCddLiRkaXJDb250ZW50WyRpXSksDQogICAgICAgICAgICAgICAgICAgICAnb3duZXInID0+ICRvd1snbmFtZSddPyRvd1snbmFtZSddOkBmaWxlb3duZXIoJGRpckNvbnRlbnRbJGldKSwNCiAgICAgICAgICAgICAgICAgICAgICdncm91cCcgPT4gJGdyWyduYW1lJ10/JGdyWyduYW1lJ106QGZpbGVncm91cCgkZGlyQ29udGVudFskaV0pDQogICAgICAgICAgICAgICAgICAgICk7DQogICAgICAgIGlmKEBpc19maWxlKCRHTE9CQUxTWydjd2QnXS4kZGlyQ29udGVudFskaV0pKQ0KICAgICAgICAgICAgJGZpbGVzW10gPSBhcnJheV9tZXJnZSgkdG1wLCBhcnJheSgndHlwZScgPT4gJ2ZpbGUnKSk7DQogICAgICAgIGVsc2VpZihAaXNfbGluaygkR0xPQkFMU1snY3dkJ10uJGRpckNvbnRlbnRbJGldKSkNCiAgICAgICAgICAgICRsaW5rc1tdID0gYXJyYXlfbWVyZ2UoJHRtcCwgYXJyYXkoJ3R5cGUnID0+ICdsaW5rJykpOw0KICAgICAgICBlbHNlaWYoQGlzX2RpcigkR0xPQkFMU1snY3dkJ10uJGRpckNvbnRlbnRbJGldKSYmICgkZGlyQ29udGVudFskaV0gIT0gIi4iKSkNCiAgICAgICAgICAgICRkaXJzW10gPSBhcnJheV9tZXJnZSgkdG1wLCBhcnJheSgndHlwZScgPT4gJ2RpcicpKTsNCiAgICB9DQogICAgJEdMT0JBTFNbJ3NvcnQnXSA9ICRzb3J0Ow0KICAgIGZ1bmN0aW9uIGNtcCgkYSwgJGIpIHsNCiAgICAgICAgaWYoJEdMT0JBTFNbJ3NvcnQnXVswXSAhPSAnc2l6ZScpDQogICAgICAgICAgICByZXR1cm4gc3RyY21wKCRhWyRHTE9CQUxTWydzb3J0J11bMF1dLCAkYlskR0xPQkFMU1snc29ydCddWzBdXSkqKCRHTE9CQUxTWydzb3J0J11bMV0/MTotMSk7DQogICAgICAgIGVsc2UNCiAgICAgICAgICAgIHJldHVybiAoKCRhWydzaXplJ10gPCAkYlsnc2l6ZSddKSA/IC0xIDogMSkqKCRHTE9CQUxTWydzb3J0J11bMV0/MTotMSk7DQogICAgfQ0KICAgIHVzb3J0KCRmaWxlcywgImNtcCIpOw0KICAgIHVzb3J0KCRkaXJzLCAiY21wIik7DQogICAgdXNvcnQoJGxpbmtzLCAiY21wIik7DQogICAgJGZpbGVzID0gYXJyYXlfbWVyZ2UoJGRpcnMsICRsaW5rcywgJGZpbGVzKTsNCiAgICAkbCA9IDA7DQogICAgZm9yZWFjaCgkZmlsZXMgYXMgJGYpIHsNCiAgICAgICAgZWNobyAnPHRyJy4oJGw/JyBjbGFzcz1sMSc6JycpLic+PHRkPjxpbnB1dCB0eXBlPWNoZWNrYm94IG5hbWU9ImZbXSIgdmFsdWU9IicudXJsZW5jb2RlKCRmWyduYW1lJ10pLiciIGNsYXNzPWNoa2J4PjwvdGQ+PHRkPjxhIGhyZWY9IyBvbmNsaWNrPSInLigoJGZbJ3R5cGUnXT09J2ZpbGUnKT8nZyhcJ0ZpbGVzVG9vbHNcJyxudWxsLFwnJy51cmxlbmNvZGUoJGZbJ25hbWUnXSkuJ1wnLCBcJ3ZpZXdcJykiPicuaHRtbHNwZWNpYWxjaGFycygkZlsnbmFtZSddKTonZyhcJ0ZpbGVzTWFuXCcsXCcnLiRmWydwYXRoJ10uJ1wnKTsiPjxiPlsgJy5odG1sc3BlY2lhbGNoYXJzKCRmWyduYW1lJ10pLicgXTwvYj4nKS4nPC9hPjwvdGQ+PHRkPicuKCgkZlsndHlwZSddPT0nZmlsZScpP3ZpZXdTaXplKCRmWydzaXplJ10pOiRmWyd0eXBlJ10pLic8L3RkPjx0ZD4nLiRmWydtb2RpZnknXS4nPC90ZD48dGQ+Jy4kZlsnb3duZXInXS4nLycuJGZbJ2dyb3VwJ10uJzwvdGQ+PHRkPjxhIGhyZWY9IyBvbmNsaWNrPSJnKFwnRmlsZXNUb29sc1wnLG51bGwsXCcnLnVybGVuY29kZSgkZlsnbmFtZSddKS4nXCcsXCdjaG1vZFwnKSI+Jy4kZlsncGVybXMnXQ0KICAgICAgICAgICAgLic8L3RkPjx0ZD48YSBocmVmPSIjIiBvbmNsaWNrPSJnKFwnRmlsZXNUb29sc1wnLG51bGwsXCcnLnVybGVuY29kZSgkZlsnbmFtZSddKS4nXCcsIFwncmVuYW1lXCcpIj5SPC9hPiA8YSBocmVmPSIjIiBvbmNsaWNrPSJnKFwnRmlsZXNUb29sc1wnLG51bGwsXCcnLnVybGVuY29kZSgkZlsnbmFtZSddKS4nXCcsIFwndG91Y2hcJykiPlQ8L2E+Jy4oKCRmWyd0eXBlJ109PSdmaWxlJyk/JyA8YSBocmVmPSIjIiBvbmNsaWNrPSJnKFwnRmlsZXNUb29sc1wnLG51bGwsXCcnLnVybGVuY29kZSgkZlsnbmFtZSddKS4nXCcsIFwnZWRpdFwnKSI+RTwvYT4gPGEgaHJlZj0iIyIgb25jbGljaz0iZyhcJ0ZpbGVzVG9vbHNcJyxudWxsLFwnJy51cmxlbmNvZGUoJGZbJ25hbWUnXSkuJ1wnLCBcJ2Rvd25sb2FkXCcpIj5EPC9hPic6JycpLic8L3RkPjwvdHI+JzsNCiAgICAgICAgJGwgPSAkbD8wOjE7DQogICAgfQ0KICAgIGVjaG8gJzx0cj48dGQgY29sc3Bhbj01Pg0KICAgIDxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWEgdmFsdWU9XCdGaWxlc01hblwnPg0KICAgIDxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWMgdmFsdWU9IicuaHRtbHNwZWNpYWxjaGFycygkR0xPQkFMU1snY3dkJ10pLiciPg0KICAgIDxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWNoYXJzZXQgdmFsdWU9IicuKGlzc2V0KCRfUE9TVFsnY2hhcnNldCddKT8kX1BPU1RbJ2NoYXJzZXQnXTonJykuJyI+DQogICAgPHNlbGVjdCBuYW1lPVwncDFcJz48b3B0aW9uIHZhbHVlPVwnY29weVwnPkNvcHk8L29wdGlvbj48b3B0aW9uIHZhbHVlPVwnbW92ZVwnPk1vdmU8L29wdGlvbj48b3B0aW9uIHZhbHVlPVwnZGVsZXRlXCc+RGVsZXRlPC9vcHRpb24+JzsNCiAgICBpZighZW1wdHkoJF9TRVNTSU9OWydhY3QnXSkmJkBjb3VudCgkX1NFU1NJT05bJ2YnXSkpe2VjaG8gJzxvcHRpb24gdmFsdWU9XCdwYXN0ZVwnPlBhc3RlPC9vcHRpb24+JzsgfQ0KICAgIGVjaG8gJzwvc2VsZWN0PiZuYnNwOzxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSI+PiI+PC90ZD48dGQgY29sc3Bhbj0iMiIgYWxpZ249InJpZ2h0IiB3aWR0aD0iMSI+PGlucHV0IG5hbWU9ImRlZiIgaWQ9ImRlZiIgdmFsdWU9Ik1hZmlhLmh0bWwiIHNpemU9IjEwIi8+Jm5ic3A7PGlucHV0IHR5cGU9ImJ1dHRvbiIgb25jbGljaz0iZyhcJ0ZpbGVzTWFuXCcsXCcnLmh0bWxzcGVjaWFsY2hhcnMoJEdMT0JBTFNbJ2N3ZCddKS4nXCcsXCdkZWZhY2VcJyxkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcJ2RlZlwnKS52YWx1ZSkiIHZhbHVlPSJBZGQgRGVmYWNlIEhlcmUiPjwvdGQ+PC90cj4NCiAgICA8L2Zvcm0+PC90YWJsZT48L2Rpdj4nOw0KICAgIHByaW50Rm9vdGVyKCk7DQp9DQoNCmZ1bmN0aW9uIGFjdGlvblN0cmluZ1Rvb2xzKCkgew0KICAgIGlmKCFmdW5jdGlvbl9leGlzdHMoJ2hleDJiaW4nKSkge2Z1bmN0aW9uIGhleDJiaW4oJHApIHtyZXR1cm4gZGVjYmluKGhleGRlYygkcCkpO319DQogICAgaWYoIWZ1bmN0aW9uX2V4aXN0cygnaGV4MmFzY2lpJykpIHtmdW5jdGlvbiBoZXgyYXNjaWkoJHApeyRyPScnO2ZvcigkaT0wOyRpPHN0ckxlbigkcCk7JGkrPTIpeyRyLj1jaHIoaGV4ZGVjKCRwWyRpXS4kcFskaSsxXSkpO31yZXR1cm4gJHI7fX0NCiAgICBpZighZnVuY3Rpb25fZXhpc3RzKCdhc2NpaTJoZXgnKSkge2Z1bmN0aW9uIGFzY2lpMmhleCgkcCl7JHI9Jyc7Zm9yKCRpPTA7JGk8c3RybGVuKCRwKTsrKyRpKSRyLj0gZGVjaGV4KG9yZCgkcFskaV0pKTtyZXR1cm4gc3RydG91cHBlcigkcik7fX0NCiAgICBpZighZnVuY3Rpb25fZXhpc3RzKCdmdWxsX3VybGVuY29kZScpKSB7ZnVuY3Rpb24gZnVsbF91cmxlbmNvZGUoJHApeyRyPScnO2ZvcigkaT0wOyRpPHN0cmxlbigkcCk7KyskaSkkci49ICclJy5kZWNoZXgob3JkKCRwWyRpXSkpO3JldHVybiBzdHJ0b3VwcGVyKCRyKTt9fQ0KICAgIA0KICAgIGlmKGlzc2V0KCRfUE9TVFsnYWpheCddKSkgew0KICAgICAgICAkX1NFU1NJT05bbWQ1KCRfU0VSVkVSWydIVFRQX0hPU1QnXSkuJ2FqYXgnXSA9IHRydWU7DQogICAgICAgIG9iX3N0YXJ0KCk7DQogICAgICAgIGlmKGZ1bmN0aW9uX2V4aXN0cygkX1BPU1RbJ3AxJ10pKQ0KICAgICAgICAgICAgZWNobyAkX1BPU1RbJ3AxJ10oJF9QT1NUWydwMiddKTsNCiAgICAgICAgJHRlbXAgPSAiZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3N0ck91dHB1dCcpLnN0eWxlLmRpc3BsYXk9Jyc7ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3N0ck91dHB1dCcpLmlubmVySFRNTD0nIi5hZGRjc2xhc2hlcyhodG1sc3BlY2lhbGNoYXJzKG9iX2dldF9jbGVhbigpKSwiXG5cclx0XFwnXDAiKS4iJztcbiI7DQogICAgICAgIGVjaG8gc3RybGVuKCR0ZW1wKSwgIlxuIiwgJHRlbXA7DQogICAgICAgIGV4aXQ7DQogICAgfQ0KICAgIHByaW50SGVhZGVyKCk7DQogICAgZWNobyAnPGgxPlN0cmluZyBjb252ZXJzaW9uczwvaDE+PGRpdiBjbGFzcz1jb250ZW50Pic7DQogICAgJHN0cmluZ1Rvb2xzID0gYXJyYXkoDQogICAgICAgICdCYXNlNjQgZW5jb2RlJyA9PiAnYmFzZTY0X2VuY29kZScsDQogICAgICAgICdCYXNlNjQgZGVjb2RlJyA9PiAnYmFzZTY0X2RlY29kZScsDQogICAgICAgICdVcmwgZW5jb2RlJyA9PiAndXJsZW5jb2RlJywNCiAgICAgICAgJ1VybCBkZWNvZGUnID0+ICd1cmxkZWNvZGUnLA0KICAgICAgICAnRnVsbCB1cmxlbmNvZGUnID0+ICdmdWxsX3VybGVuY29kZScsDQogICAgICAgICdtZDUgaGFzaCcgPT4gJ21kNScsDQogICAgICAgICdzaGExIGhhc2gnID0+ICdzaGExJywNCiAgICAgICAgJ2NyeXB0JyA9PiAnY3J5cHQnLA0KICAgICAgICAnQ1JDMzInID0+ICdjcmMzMicsDQogICAgICAgICdBU0NJSSB0byBIRVgnID0+ICdhc2NpaTJoZXgnLA0KICAgICAgICAnSEVYIHRvIEFTQ0lJJyA9PiAnaGV4MmFzY2lpJywNCiAgICAgICAgJ0hFWCB0byBERUMnID0+ICdoZXhkZWMnLA0KICAgICAgICAnSEVYIHRvIEJJTicgPT4gJ2hleDJiaW4nLA0KICAgICAgICAnREVDIHRvIEhFWCcgPT4gJ2RlY2hleCcsDQogICAgICAgICdERUMgdG8gQklOJyA9PiAnZGVjYmluJywNCiAgICAgICAgJ0JJTiB0byBIRVgnID0+ICdiaW4yaGV4JywNCiAgICAgICAgJ0JJTiB0byBERUMnID0+ICdiaW5kZWMnLCAgICAgICAgDQogICAgICAgICdTdHJpbmcgdG8gbG93ZXIgY2FzZScgPT4gJ3N0cnRvbG93ZXInLA0KICAgICAgICAnU3RyaW5nIHRvIHVwcGVyIGNhc2UnID0+ICdzdHJ0b3VwcGVyJywNCiAgICAgICAgJ0h0bWxzcGVjaWFsY2hhcnMnID0+ICdodG1sc3BlY2lhbGNoYXJzJywNCiAgICAgICAgJ1N0cmluZyBsZW5ndGgnID0+ICdzdHJsZW4nLA0KICAgICk7DQogICAgaWYoZW1wdHkoJF9QT1NUWydhamF4J10pJiYhZW1wdHkoJF9QT1NUWydwMSddKSkNCiAgICAgICAgJF9TRVNTSU9OW21kNSgkX1NFUlZFUlsnSFRUUF9IT1NUJ10pLidhamF4J10gPSBmYWxzZTsNCiAgICBlY2hvICI8Zm9ybSBuYW1lPSd0b29sc0Zvcm0nIG9uU3VibWl0PSdpZih0aGlzLmFqYXguY2hlY2tlZCl7YShudWxsLG51bGwsdGhpcy5zZWxlY3RUb29sLnZhbHVlLHRoaXMuaW5wdXQudmFsdWUpO31lbHNle2cobnVsbCxudWxsLHRoaXMuc2VsZWN0VG9vbC52YWx1ZSx0aGlzLmlucHV0LnZhbHVlKTt9IHJldHVybiBmYWxzZTsnPjxzZWxlY3QgbmFtZT0nc2VsZWN0VG9vbCc+IjsNCiAgICBmb3JlYWNoKCRzdHJpbmdUb29scyBhcyAkayA9PiAkdikNCiAgICAgICAgZWNobyAiPG9wdGlvbiB2YWx1ZT0nIi5odG1sc3BlY2lhbGNoYXJzKCR2KS4iJz4iLiRrLiI8L29wdGlvbj4iOw0KICAgICAgICBlY2hvICI8L3NlbGVjdD48aW5wdXQgdHlwZT0nc3VibWl0JyB2YWx1ZT0nPj4nLz4gPGlucHV0IHR5cGU9Y2hlY2tib3ggbmFtZT1hamF4IHZhbHVlPTEgIi4oJF9TRVNTSU9OW21kNSgkX1NFUlZFUlsnSFRUUF9IT1NUJ10pLidhamF4J10/J2NoZWNrZWQnOicnKS4iPiBzZW5kIHVzaW5nIEFKQVg8YnI+PHRleHRhcmVhIG5hbWU9J2lucHV0JyBzdHlsZT0nbWFyZ2luLXRvcDo1cHgnIGNsYXNzPWJpZ2FyZWE+Ii5odG1sc3BlY2lhbGNoYXJzKEAkX1BPU1RbJ3AyJ10pLiI8L3RleHRhcmVhPjwvZm9ybT48cHJlIGNsYXNzPSdtbDEnIHN0eWxlPSciLihlbXB0eSgkX1BPU1RbJ3AxJ10pPydkaXNwbGF5Om5vbmU7JzonJykuIm1hcmdpbi10b3A6NXB4JyBpZD0nc3RyT3V0cHV0Jz4iOw0KICAgIGlmKCFlbXB0eSgkX1BPU1RbJ3AxJ10pKSB7DQogICAgICAgIGlmKGZ1bmN0aW9uX2V4aXN0cygkX1BPU1RbJ3AxJ10pKQ0KICAgICAgICBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJF9QT1NUWydwMSddKCRfUE9TVFsncDInXSkpOw0KICAgIH0NCiAgICBlY2hvIjwvcHJlPjwvZGl2PiI7DQogICAgcHJpbnRGb290ZXIoKTsNCn0NCg0KZnVuY3Rpb24gYWN0aW9uRmlsZXNUb29scygpIHsNCiAgICBpZiggaXNzZXQoJF9QT1NUWydwMSddKSApDQogICAgICAgICRfUE9TVFsncDEnXSA9IHVybGRlY29kZSgkX1BPU1RbJ3AxJ10pOw0KICAgIGlmKEAkX1BPU1RbJ3AyJ109PSdkb3dubG9hZCcpIHsNCiAgICAgICAgaWYoaXNfZmlsZSgkX1BPU1RbJ3AxJ10pICYmIGlzX3JlYWRhYmxlKCRfUE9TVFsncDEnXSkpIHsNCiAgICAgICAgICAgIG9iX3N0YXJ0KCJvYl9nemhhbmRsZXIiLCA0MDk2KTsNCiAgICAgICAgICAgIGhlYWRlcigiQ29udGVudC1EaXNwb3NpdGlvbjogYXR0YWNobWVudDsgZmlsZW5hbWU9Ii5iYXNlbmFtZSgkX1BPU1RbJ3AxJ10pKTsNCiAgICAgICAgICAgIGlmIChmdW5jdGlvbl9leGlzdHMoIm1pbWVfY29udGVudF90eXBlIikpIHsNCiAgICAgICAgICAgICAgICAkdHlwZSA9IEBtaW1lX2NvbnRlbnRfdHlwZSgkX1BPU1RbJ3AxJ10pOw0KICAgICAgICAgICAgICAgIGhlYWRlcigiQ29udGVudC1UeXBlOiAiLiR0eXBlKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgICRmcCA9IEBmb3BlbigkX1BPU1RbJ3AxJ10sICJyIik7DQogICAgICAgICAgICBpZigkZnApIHsNCiAgICAgICAgICAgICAgICB3aGlsZSghQGZlb2YoJGZwKSkNCiAgICAgICAgICAgICAgICAgICAgZWNobyBAZnJlYWQoJGZwLCAxMDI0KTsNCiAgICAgICAgICAgICAgICBmY2xvc2UoJGZwKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfSBlbHNlaWYoaXNfZGlyKCRfUE9TVFsncDEnXSkgJiYgaXNfcmVhZGFibGUoJF9QT1NUWydwMSddKSkgew0KDQogICAgICAgIH0NCiAgICAgICAgZXhpdDsNCiAgICB9DQogICAgaWYoIEAkX1BPU1RbJ3AyJ10gPT0gJ21rZmlsZScgKSB7DQogICAgICAgIGlmKCFmaWxlX2V4aXN0cygkX1BPU1RbJ3AxJ10pKSB7DQogICAgICAgICAgICAkZnAgPSBAZm9wZW4oJF9QT1NUWydwMSddLCAndycpOw0KICAgICAgICAgICAgaWYoJGZwKSB7DQogICAgICAgICAgICAgICAgJF9QT1NUWydwMiddID0gImVkaXQiOw0KICAgICAgICAgICAgICAgIGZjbG9zZSgkZnApOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgfQ0KICAgIHByaW50SGVhZGVyKCk7DQogICAgZWNobyAnPGgxPkZpbGUgdG9vbHM8L2gxPjxkaXYgY2xhc3M9Y29udGVudD4nOw0KICAgIGlmKCAhZmlsZV9leGlzdHMoQCRfUE9TVFsncDEnXSkgKSB7DQogICAgICAgIGVjaG8gJ0ZpbGUgbm90IGV4aXN0cyc7DQogICAgICAgIHByaW50Rm9vdGVyKCk7DQogICAgICAgIHJldHVybjsNCiAgICB9DQogICAgJHVpZCA9IEBwb3NpeF9nZXRwd3VpZChAZmlsZW93bmVyKCRfUE9TVFsncDEnXSkpOw0KICAgICRnaWQgPSBAcG9zaXhfZ2V0Z3JnaWQoQGZpbGVvd25lcigkX1BPU1RbJ3AxJ10pKTsNCiAgICBlY2hvICc8c3Bhbj5OYW1lOjwvc3Bhbj4gJy5odG1sc3BlY2lhbGNoYXJzKCRfUE9TVFsncDEnXSkuJyA8c3Bhbj5TaXplOjwvc3Bhbj4gJy4oaXNfZmlsZSgkX1BPU1RbJ3AxJ10pP3ZpZXdTaXplKGZpbGVzaXplKCRfUE9TVFsncDEnXSkpOictJykuJyA8c3Bhbj5QZXJtaXNzaW9uOjwvc3Bhbj4gJy52aWV3UGVybXNDb2xvcigkX1BPU1RbJ3AxJ10pLicgPHNwYW4+T3duZXIvR3JvdXA6PC9zcGFuPiAnLiR1aWRbJ25hbWUnXS4nLycuJGdpZFsnbmFtZSddLic8YnI+JzsNCiAgICBlY2hvICc8c3Bhbj5DcmVhdGUgdGltZTo8L3NwYW4+ICcuZGF0ZSgnWS1tLWQgSDppOnMnLGZpbGVjdGltZSgkX1BPU1RbJ3AxJ10pKS4nIDxzcGFuPkFjY2VzcyB0aW1lOjwvc3Bhbj4gJy5kYXRlKCdZLW0tZCBIOmk6cycsZmlsZWF0aW1lKCRfUE9TVFsncDEnXSkpLicgPHNwYW4+TW9kaWZ5IHRpbWU6PC9zcGFuPiAnLmRhdGUoJ1ktbS1kIEg6aTpzJyxmaWxlbXRpbWUoJF9QT1NUWydwMSddKSkuJzxicj48YnI+JzsNCiAgICBpZiggZW1wdHkoJF9QT1NUWydwMiddKSApDQogICAgICAgICRfUE9TVFsncDInXSA9ICd2aWV3JzsNCiAgICBpZiggaXNfZmlsZSgkX1BPU1RbJ3AxJ10pICkNCiAgICAgICAgJG0gPSBhcnJheSgnVmlldycsICdIaWdobGlnaHQnLCAnRG93bmxvYWQnLCAnSGV4ZHVtcCcsICdFZGl0JywgJ0NobW9kJywgJ1JlbmFtZScsICdUb3VjaCcpOw0KICAgIGVsc2UNCiAgICAgICAgJG0gPSBhcnJheSgnQ2htb2QnLCAnUmVuYW1lJywgJ1RvdWNoJyk7DQogICAgZm9yZWFjaCgkbSBhcyAkdikNCiAgICAgICAgZWNobyAnPGEgaHJlZj0jIG9uY2xpY2s9ImcobnVsbCxudWxsLG51bGwsXCcnLnN0cnRvbG93ZXIoJHYpLidcJykiPicuKChzdHJ0b2xvd2VyKCR2KT09QCRfUE9TVFsncDInXSk/JzxiPlsgJy4kdi4nIF08L2I+JzokdikuJzwvYT4gJzsNCiAgICBlY2hvICc8YnI+PGJyPic7DQogICAgc3dpdGNoKCRfUE9TVFsncDInXSkgew0KICAgICAgICBjYXNlICd2aWV3JzoNCiAgICAgICAgICAgIGVjaG8gJzxwcmUgY2xhc3M9bWwxPic7DQogICAgICAgICAgICAkZnAgPSBAZm9wZW4oJF9QT1NUWydwMSddLCAncicpOw0KICAgICAgICAgICAgaWYoJGZwKSB7DQogICAgICAgICAgICAgICAgd2hpbGUoICFAZmVvZigkZnApICkNCiAgICAgICAgICAgICAgICAgICAgZWNobyBodG1sc3BlY2lhbGNoYXJzKEBmcmVhZCgkZnAsIDEwMjQpKTsNCiAgICAgICAgICAgICAgICBAZmNsb3NlKCRmcCk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBlY2hvICc8L3ByZT4nOw0KICAgICAgICAgICAgYnJlYWs7DQogICAgICAgIGNhc2UgJ2hpZ2hsaWdodCc6DQogICAgICAgICAgICBpZiggaXNfcmVhZGFibGUoJF9QT1NUWydwMSddKSApIHsNCiAgICAgICAgICAgICAgICBlY2hvICc8ZGl2IGNsYXNzPW1sMSBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjogIzAwMDtjb2xvcjpibGFjazsiPic7DQogICAgICAgICAgICAgICAgJGNvZGUgPSBoaWdobGlnaHRfZmlsZSgkX1BPU1RbJ3AxJ10sdHJ1ZSk7DQogICAgICAgICAgICAgICAgZWNobyBzdHJfcmVwbGFjZShhcnJheSgnPHNwYW4gJywnPC9zcGFuPicpLCBhcnJheSgnPGZvbnQgJywnPC9mb250PicpLCRjb2RlKS4nPC9kaXY+JzsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICBjYXNlICdjaG1vZCc6DQogICAgICAgICAgICBpZiggIWVtcHR5KCRfUE9TVFsncDMnXSkgKSB7DQogICAgICAgICAgICAgICAgJHBlcm1zID0gMDsNCiAgICAgICAgICAgICAgICBmb3IoJGk9c3RybGVuKCRfUE9TVFsncDMnXSktMTskaT49MDstLSRpKQ0KICAgICAgICAgICAgICAgICAgICAkcGVybXMgKz0gKGludCkkX1BPU1RbJ3AzJ11bJGldKnBvdyg4LCAoc3RybGVuKCRfUE9TVFsncDMnXSktJGktMSkpOw0KICAgICAgICAgICAgICAgIGlmKCFAY2htb2QoJF9QT1NUWydwMSddLCAkcGVybXMpKQ0KICAgICAgICAgICAgICAgICAgICBlY2hvICdDYW5cJ3Qgc2V0IHBlcm1pc3Npb25zITxicj48c2NyaXB0PmRvY3VtZW50Lm1mLnAzLnZhbHVlPSIiOzwvc2NyaXB0Pic7DQogICAgICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgICAgICBkaWUoJzxzY3JpcHQ+ZyhudWxsLG51bGwsbnVsbCxudWxsLCIiKTwvc2NyaXB0PicpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgZWNobyAnPGZvcm0gb25zdWJtaXQ9ImcobnVsbCxudWxsLG51bGwsbnVsbCx0aGlzLmNobW9kLnZhbHVlKTtyZXR1cm4gZmFsc2U7Ij48aW5wdXQgdHlwZT10ZXh0IG5hbWU9Y2htb2QgdmFsdWU9Iicuc3Vic3RyKHNwcmludGYoJyVvJywgZmlsZXBlcm1zKCRfUE9TVFsncDEnXSkpLC00KS4nIj48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9Ij4+Ij48L2Zvcm0+JzsNCiAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICBjYXNlICdlZGl0JzoNCiAgICAgICAgICAgIGlmKCAhaXNfd3JpdGFibGUoJF9QT1NUWydwMSddKSkgew0KICAgICAgICAgICAgICAgIGVjaG8gJ0ZpbGUgaXNuXCd0IHdyaXRlYWJsZSc7DQogICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBpZiggIWVtcHR5KCRfUE9TVFsncDMnXSkgKSB7DQogICAgICAgICAgICAgICAgQGZpbGVfcHV0X2NvbnRlbnRzKCRfUE9TVFsncDEnXSwkX1BPU1RbJ3AzJ10pOw0KICAgICAgICAgICAgICAgIGVjaG8gJ1NhdmVkITxicj48c2NyaXB0PmRvY3VtZW50Lm1mLnAzLnZhbHVlPSIiOzwvc2NyaXB0Pic7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBlY2hvICc8Zm9ybSBvbnN1Ym1pdD0iZyhudWxsLG51bGwsbnVsbCxudWxsLHRoaXMudGV4dC52YWx1ZSk7cmV0dXJuIGZhbHNlOyI+PHRleHRhcmVhIG5hbWU9dGV4dCBjbGFzcz1iaWdhcmVhPic7DQogICAgICAgICAgICAkZnAgPSBAZm9wZW4oJF9QT1NUWydwMSddLCAncicpOw0KICAgICAgICAgICAgaWYoJGZwKSB7DQogICAgICAgICAgICAgICAgd2hpbGUoICFAZmVvZigkZnApICkNCiAgICAgICAgICAgICAgICAgICAgZWNobyBodG1sc3BlY2lhbGNoYXJzKEBmcmVhZCgkZnAsIDEwMjQpKTsNCiAgICAgICAgICAgICAgICBAZmNsb3NlKCRmcCk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBlY2hvICc8L3RleHRhcmVhPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0iPj4iPjwvZm9ybT4nOw0KICAgICAgICAgICAgYnJlYWs7DQogICAgICAgIGNhc2UgJ2hleGR1bXAnOg0KICAgICAgICAgICAgJGMgPSBAZmlsZV9nZXRfY29udGVudHMoJF9QT1NUWydwMSddKTsNCiAgICAgICAgICAgICRuID0gMDsNCiAgICAgICAgICAgICRoID0gYXJyYXkoJzAwMDAwMDAwPGJyPicsJycsJycpOw0KICAgICAgICAgICAgJGxlbiA9IHN0cmxlbigkYyk7DQogICAgICAgICAgICBmb3IgKCRpPTA7ICRpPCRsZW47ICsrJGkpIHsNCiAgICAgICAgICAgICAgICAkaFsxXSAuPSBzcHJpbnRmKCclMDJYJyxvcmQoJGNbJGldKSkuJyAnOw0KICAgICAgICAgICAgICAgIHN3aXRjaCAoIG9yZCgkY1skaV0pICkgew0KICAgICAgICAgICAgICAgICAgICBjYXNlIDA6ICAkaFsyXSAuPSAnICc7IGJyZWFrOw0KICAgICAgICAgICAgICAgICAgICBjYXNlIDk6ICAkaFsyXSAuPSAnICc7IGJyZWFrOw0KICAgICAgICAgICAgICAgICAgICBjYXNlIDEwOiAkaFsyXSAuPSAnICc7IGJyZWFrOw0KICAgICAgICAgICAgICAgICAgICBjYXNlIDEzOiAkaFsyXSAuPSAnICc7IGJyZWFrOw0KICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiAkaFsyXSAuPSAkY1skaV07IGJyZWFrOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAkbisrOw0KICAgICAgICAgICAgICAgIGlmICgkbiA9PSAzMikgew0KICAgICAgICAgICAgICAgICAgICAkbiA9IDA7DQogICAgICAgICAgICAgICAgICAgIGlmICgkaSsxIDwgJGxlbikgeyRoWzBdIC49IHNwcmludGYoJyUwOFgnLCRpKzEpLic8YnI+Jzt9DQogICAgICAgICAgICAgICAgICAgICRoWzFdIC49ICc8YnI+JzsNCiAgICAgICAgICAgICAgICAgICAgJGhbMl0gLj0gIlxuIjsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgfQ0KICAgICAgICAgICAgZWNobyAnPHRhYmxlIGNlbGxzcGFjaW5nPTEgY2VsbHBhZGRpbmc9NSBiZ2NvbG9yPSMwMDA+PHRyPjx0ZCBiZ2NvbG9yPSMwMDA+PHNwYW4gc3R5bGU9ImZvbnQtd2VpZ2h0OiBub3JtYWw7Ij48cHJlPicuJGhbMF0uJzwvcHJlPjwvc3Bhbj48L3RkPjx0ZCBiZ2NvbG9yPSMwMDA+PHByZT4nLiRoWzFdLic8L3ByZT48L3RkPjx0ZCBiZ2NvbG9yPSMwMDA+PHByZT4nLmh0bWxzcGVjaWFsY2hhcnMoJGhbMl0pLic8L3ByZT48L3RkPjwvdHI+PC90YWJsZT4nOw0KICAgICAgICAgICAgYnJlYWs7DQogICAgICAgIGNhc2UgJ3JlbmFtZSc6DQogICAgICAgICAgICBpZiggIWVtcHR5KCRfUE9TVFsncDMnXSkgKSB7DQogICAgICAgICAgICAgICAgaWYoIUByZW5hbWUoJF9QT1NUWydwMSddLCAkX1BPU1RbJ3AzJ10pKQ0KICAgICAgICAgICAgICAgICAgICBlY2hvICdDYW5cJ3QgcmVuYW1lITxicj48c2NyaXB0PmRvY3VtZW50Lm1mLnAzLnZhbHVlPSIiOzwvc2NyaXB0Pic7DQogICAgICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgICAgICBkaWUoJzxzY3JpcHQ+ZyhudWxsLG51bGwsIicudXJsZW5jb2RlKCRfUE9TVFsncDMnXSkuJyIsbnVsbCwiIik8L3NjcmlwdD4nKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGVjaG8gJzxmb3JtIG9uc3VibWl0PSJnKG51bGwsbnVsbCxudWxsLG51bGwsdGhpcy5uYW1lLnZhbHVlKTtyZXR1cm4gZmFsc2U7Ij48aW5wdXQgdHlwZT10ZXh0IG5hbWU9bmFtZSB2YWx1ZT0iJy5odG1sc3BlY2lhbGNoYXJzKCRfUE9TVFsncDEnXSkuJyI+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSI+PiI+PC9mb3JtPic7DQogICAgICAgICAgICBicmVhazsNCiAgICAgICAgY2FzZSAndG91Y2gnOg0KICAgICAgICAgICAgaWYoICFlbXB0eSgkX1BPU1RbJ3AzJ10pICkgew0KICAgICAgICAgICAgICAgICR0aW1lID0gc3RydG90aW1lKCRfUE9TVFsncDMnXSk7DQogICAgICAgICAgICAgICAgaWYoJHRpbWUpIHsNCiAgICAgICAgICAgICAgICAgICAgaWYoQHRvdWNoKCRfUE9TVFsncDEnXSwkdGltZSwkdGltZSkpDQogICAgICAgICAgICAgICAgICAgICAgICBkaWUoJzxzY3JpcHQ+ZyhudWxsLG51bGwsbnVsbCxudWxsLCIiKTwvc2NyaXB0PicpOw0KICAgICAgICAgICAgICAgICAgICBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gJ0ZhaWwhPHNjcmlwdD5kb2N1bWVudC5tZi5wMy52YWx1ZT0iIjs8L3NjcmlwdD4nOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfSBlbHNlIGVjaG8gJ0JhZCB0aW1lIGZvcm1hdCE8c2NyaXB0PmRvY3VtZW50Lm1mLnAzLnZhbHVlPSIiOzwvc2NyaXB0Pic7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBlY2hvICc8Zm9ybSBvbnN1Ym1pdD0iZyhudWxsLG51bGwsbnVsbCxudWxsLHRoaXMudG91Y2gudmFsdWUpO3JldHVybiBmYWxzZTsiPjxpbnB1dCB0eXBlPXRleHQgbmFtZT10b3VjaCB2YWx1ZT0iJy5kYXRlKCJZLW0tZCBIOmk6cyIsIEBmaWxlbXRpbWUoJF9QT1NUWydwMSddKSkuJyI+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSI+PiI+PC9mb3JtPic7DQogICAgICAgICAgICBicmVhazsNCiAgICAgICAgY2FzZSAnbWtmaWxlJzoNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgYnJlYWs7DQogICAgfQ0KICAgIGVjaG8gJzwvZGl2Pic7DQogICAgcHJpbnRGb290ZXIoKTsNCn0NCg0KZnVuY3Rpb24gYWN0aW9uU2FmZU1vZGUoKSB7DQogICAgJHRlbXA9Jyc7DQogICAgb2Jfc3RhcnQoKTsNCiAgICBzd2l0Y2goJF9QT1NUWydwMSddKSB7DQogICAgICAgIGNhc2UgMToNCiAgICAgICAgICAgICR0ZW1wPUB0ZW1wbmFtKCR0ZXN0LCAnY3gnKTsNCiAgICAgICAgICAgIGlmKEBjb3B5KCJjb21wcmVzcy56bGliOi8vIi4kX1BPU1RbJ3AyJ10sICR0ZW1wKSl7DQogICAgICAgICAgICAgICAgZWNobyBAZmlsZV9nZXRfY29udGVudHMoJHRlbXApOw0KICAgICAgICAgICAgICAgIHVubGluaygkdGVtcCk7DQogICAgICAgICAgICB9IGVsc2UNCiAgICAgICAgICAgICAgICBlY2hvICdTb3JyeS4uLiBDYW5cJ3Qgb3BlbiBmaWxlJzsNCiAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICBjYXNlIDI6DQogICAgICAgICAgICAkZmlsZXMgPSBnbG9iKCRfUE9TVFsncDInXS4nKicpOw0KICAgICAgICAgICAgaWYoIGlzX2FycmF5KCRmaWxlcykgKQ0KICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRmaWxlcyBhcyAkZmlsZW5hbWUpDQogICAgICAgICAgICAgICAgICAgIGVjaG8gJGZpbGVuYW1lLiJcbiI7DQogICAgICAgICAgICBicmVhazsNCiAgICAgICAgY2FzZSAzOg0KICAgICAgICAgICAgJGNoID0gY3VybF9pbml0KCJmaWxlOi8vIi4kX1BPU1RbJ3AyJ10uIlx4MDAiLlNFTEZfUEFUSCk7DQogICAgICAgICAgICBjdXJsX2V4ZWMoJGNoKTsNCiAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICBjYXNlIDQ6DQogICAgICAgICAgICBpbmlfcmVzdG9yZSgic2FmZV9tb2RlIik7DQogICAgICAgICAgICBpbmlfcmVzdG9yZSgib3Blbl9iYXNlZGlyIik7DQogICAgICAgICAgICBpbmNsdWRlKCRfUE9TVFsncDInXSk7DQogICAgICAgICAgICBicmVhazsNCiAgICAgICAgY2FzZSA1Og0KICAgICAgICAgICAgZm9yKDskX1BPU1RbJ3AyJ10gPD0gJF9QT1NUWydwMyddOyRfUE9TVFsncDInXSsrKSB7DQogICAgICAgICAgICAgICAgJHVpZCA9IEBwb3NpeF9nZXRwd3VpZCgkX1BPU1RbJ3AyJ10pOw0KICAgICAgICAgICAgICAgIGlmICgkdWlkKQ0KICAgICAgICAgICAgICAgICAgICBlY2hvIGpvaW4oJzonLCR1aWQpLiJcbiI7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBicmVhazsNCiAgICAgICAgY2FzZSA2Og0KICAgICAgICAgICAgaWYoIWZ1bmN0aW9uX2V4aXN0cygnaW1hcF9vcGVuJykpYnJlYWs7DQogICAgICAgICAgICAkc3RyZWFtID0gaW1hcF9vcGVuKCRfUE9TVFsncDInXSwgIiIsICIiKTsNCiAgICAgICAgICAgIGlmICgkc3RyZWFtID09IEZBTFNFKQ0KICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgZWNobyBpbWFwX2JvZHkoJHN0cmVhbSwgMSk7DQogICAgICAgICAgICBpbWFwX2Nsb3NlKCRzdHJlYW0pOw0KICAgICAgICAgICAgYnJlYWs7DQogICAgfQ0KICAgICR0ZW1wID0gb2JfZ2V0X2NsZWFuKCk7DQogICAgcHJpbnRIZWFkZXIoKTsNCiAgICBlY2hvICc8aDE+U2FmZSBtb2RlIGJ5cGFzczwvaDE+PGRpdiBjbGFzcz1jb250ZW50Pic7DQogICAgZWNobyAnPHNwYW4+Q29weSAocmVhZCBmaWxlKTwvc3Bhbj48Zm9ybSBvbnN1Ym1pdD1cJ2cobnVsbCxudWxsLCIxIix0aGlzLnBhcmFtLnZhbHVlKTtyZXR1cm4gZmFsc2U7XCc+PGlucHV0IHR5cGU9dGV4dCBuYW1lPXBhcmFtPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0iPj4iPjwvZm9ybT48YnI+PHNwYW4+R2xvYiAobGlzdCBkaXIpPC9zcGFuPjxmb3JtIG9uc3VibWl0PVwnZyhudWxsLG51bGwsIjIiLHRoaXMucGFyYW0udmFsdWUpO3JldHVybiBmYWxzZTtcJz48aW5wdXQgdHlwZT10ZXh0IG5hbWU9cGFyYW0+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSI+PiI+PC9mb3JtPjxicj48c3Bhbj5DdXJsIChyZWFkIGZpbGUpPC9zcGFuPjxmb3JtIG9uc3VibWl0PVwnZyhudWxsLG51bGwsIjMiLHRoaXMucGFyYW0udmFsdWUpO3JldHVybiBmYWxzZTtcJz48aW5wdXQgdHlwZT10ZXh0IG5hbWU9cGFyYW0+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSI+PiI+PC9mb3JtPjxicj48c3Bhbj5JbmlfcmVzdG9yZSAocmVhZCBmaWxlKTwvc3Bhbj48Zm9ybSBvbnN1Ym1pdD1cJ2cobnVsbCxudWxsLCI0Iix0aGlzLnBhcmFtLnZhbHVlKTtyZXR1cm4gZmFsc2U7XCc+PGlucHV0IHR5cGU9dGV4dCBuYW1lPXBhcmFtPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0iPj4iPjwvZm9ybT48YnI+PHNwYW4+UG9zaXhfZ2V0cHd1aWQgKCJSZWFkIiAvZXRjL3Bhc3N3ZCk8L3NwYW4+PHRhYmxlPjxmb3JtIG9uc3VibWl0PVwnZyhudWxsLG51bGwsIjUiLHRoaXMucGFyYW0xLnZhbHVlLHRoaXMucGFyYW0yLnZhbHVlKTtyZXR1cm4gZmFsc2U7XCc+PHRyPjx0ZD5Gcm9tPC90ZD48dGQ+PGlucHV0IHR5cGU9dGV4dCBuYW1lPXBhcmFtMSB2YWx1ZT0wPjwvdGQ+PC90cj48dHI+PHRkPlRvPC90ZD48dGQ+PGlucHV0IHR5cGU9dGV4dCBuYW1lPXBhcmFtMiB2YWx1ZT0xMDAwPjwvdGQ+PC90cj48L3RhYmxlPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0iPj4iPjwvZm9ybT48YnI+PGJyPjxzcGFuPkltYXBfb3BlbiAocmVhZCBmaWxlKTwvc3Bhbj48Zm9ybSBvbnN1Ym1pdD1cJ2cobnVsbCxudWxsLCI2Iix0aGlzLnBhcmFtLnZhbHVlKTtyZXR1cm4gZmFsc2U7XCc+PGlucHV0IHR5cGU9dGV4dCBuYW1lPXBhcmFtPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0iPj4iPjwvZm9ybT4nOw0KICAgIGlmKCR0ZW1wKQ0KICAgICAgICBlY2hvICc8cHJlIGNsYXNzPSJtbDEiIHN0eWxlPSJtYXJnaW4tdG9wOjVweCIgaWQ9Ik91dHB1dCI+Jy4kdGVtcC4nPC9wcmU+JzsNCiAgICBlY2hvICc8L2Rpdj4nOw0KICAgIHByaW50Rm9vdGVyKCk7DQp9DQoNCmZ1bmN0aW9uIGFjdGlvbkNvbnNvbGUoKSB7DQogICAgaWYoaXNzZXQoJF9QT1NUWydhamF4J10pKSB7DQogICAgICAgICRfU0VTU0lPTlttZDUoJF9TRVJWRVJbJ0hUVFBfSE9TVCddKS4nYWpheCddID0gdHJ1ZTsNCiAgICAgICAgb2Jfc3RhcnQoKTsNCiAgICAgICAgZWNobyAiZG9jdW1lbnQuY2YuY21kLnZhbHVlPScnO1xuIjsNCiAgICAgICAgJHRlbXAgPSBAaWNvbnYoJF9QT1NUWydjaGFyc2V0J10sICdVVEYtOCcsIGFkZGNzbGFzaGVzKCJcbiQgIi4kX1BPU1RbJ3AxJ10uIlxuIi5leCgkX1BPU1RbJ3AxJ10pLCJcblxyXHRcXCdcMCIpKTsNCiAgICAgICAgaWYocHJlZ19tYXRjaCgiIS4qY2RccysoW147XSspJCEiLCRfUE9TVFsncDEnXSwkbWF0Y2gpKSAgICB7DQogICAgICAgICAgICBpZihAY2hkaXIoJG1hdGNoWzFdKSkgew0KICAgICAgICAgICAgICAgICRHTE9CQUxTWydjd2QnXSA9IEBnZXRjd2QoKTsNCiAgICAgICAgICAgICAgICBlY2hvICJkb2N1bWVudC5tZi5jLnZhbHVlPSciLiRHTE9CQUxTWydjd2QnXS4iJzsiOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIGVjaG8gImRvY3VtZW50LmNmLm91dHB1dC52YWx1ZSs9JyIuJHRlbXAuIic7IjsNCiAgICAgICAgZWNobyAiZG9jdW1lbnQuY2Yub3V0cHV0LnNjcm9sbFRvcCA9IGRvY3VtZW50LmNmLm91dHB1dC5zY3JvbGxIZWlnaHQ7IjsNCiAgICAgICAgJHRlbXAgPSBvYl9nZXRfY2xlYW4oKTsNCiAgICAgICAgZWNobyBzdHJsZW4oJHRlbXApLCAiXG4iLCAkdGVtcDsNCiAgICAgICAgZXhpdDsNCiAgICB9DQogICAgcHJpbnRIZWFkZXIoKTsNCg0KZWNobyAnPHNjcmlwdD4NCmlmKHdpbmRvdy5FdmVudCkgd2luZG93LmNhcHR1cmVFdmVudHMoRXZlbnQuS0VZRE9XTik7DQp2YXIgY21kcyA9IG5ldyBBcnJheSgiIik7DQp2YXIgY3VyID0gMDsNCmZ1bmN0aW9uIGtwKGUpIHsNCiAgICB2YXIgbiA9ICh3aW5kb3cuRXZlbnQpID8gZS53aGljaCA6IGUua2V5Q29kZTsNCiAgICBpZihuID09IDM4KSB7DQogICAgICAgIGN1ci0tOw0KICAgICAgICBpZihjdXI+PTApDQogICAgICAgICAgICBkb2N1bWVudC5jZi5jbWQudmFsdWUgPSBjbWRzW2N1cl07DQogICAgICAgIGVsc2UNCiAgICAgICAgICAgIGN1cisrOw0KICAgIH0gZWxzZSBpZihuID09IDQwKSB7DQogICAgICAgIGN1cisrOw0KICAgICAgICBpZihjdXIgPCBjbWRzLmxlbmd0aCkNCiAgICAgICAgICAgIGRvY3VtZW50LmNmLmNtZC52YWx1ZSA9IGNtZHNbY3VyXTsNCiAgICAgICAgZWxzZQ0KICAgICAgICAgICAgY3VyLS07DQogICAgfQ0KfQ0KZnVuY3Rpb24gYWRkKGNtZCkgew0KICAgIGNtZHMucG9wKCk7DQogICAgY21kcy5wdXNoKGNtZCk7DQogICAgY21kcy5wdXNoKCIiKTsNCiAgICBjdXIgPSBjbWRzLmxlbmd0aC0xOw0KfQ0KPC9zY3JpcHQ+JzsNCiAgICBlY2hvICc8aDE+Q29uc29sZTwvaDE+PGRpdiBjbGFzcz1jb250ZW50Pjxmb3JtIG5hbWU9Y2Ygb25zdWJtaXQ9ImlmKGRvY3VtZW50LmNmLmNtZC52YWx1ZT09XCdjbGVhclwnKXtkb2N1bWVudC5jZi5vdXRwdXQudmFsdWU9XCdcJztkb2N1bWVudC5jZi5jbWQudmFsdWU9XCdcJztyZXR1cm4gZmFsc2U7fWFkZCh0aGlzLmNtZC52YWx1ZSk7aWYodGhpcy5hamF4LmNoZWNrZWQpe2EobnVsbCxudWxsLHRoaXMuY21kLnZhbHVlKTt9ZWxzZXtnKG51bGwsbnVsbCx0aGlzLmNtZC52YWx1ZSk7fSByZXR1cm4gZmFsc2U7Ij48c2VsZWN0IG5hbWU9YWxpYXM+JzsNCiAgICBmb3JlYWNoKCRHTE9CQUxTWydhbGlhc2VzJ10gYXMgJG4gPT4gJHYpIHsNCiAgICAgICAgaWYoJHYgPT0gJycpIHsNCiAgICAgICAgICAgIGVjaG8gJzxvcHRncm91cCBsYWJlbD0iLScuaHRtbHNwZWNpYWxjaGFycygkbikuJy0iPjwvb3B0Z3JvdXA+JzsNCiAgICAgICAgICAgIGNvbnRpbnVlOw0KICAgICAgICB9DQogICAgICAgIGVjaG8gJzxvcHRpb24gdmFsdWU9IicuaHRtbHNwZWNpYWxjaGFycygkdikuJyI+Jy4kbi4nPC9vcHRpb24+JzsNCiAgICB9DQogICAgaWYoZW1wdHkoJF9QT1NUWydhamF4J10pJiYhZW1wdHkoJF9QT1NUWydwMSddKSkNCiAgICAgICAgJF9TRVNTSU9OW21kNSgkX1NFUlZFUlsnSFRUUF9IT1NUJ10pLidhamF4J10gPSBmYWxzZTsNCiAgICBlY2hvICc8L3NlbGVjdD48aW5wdXQgdHlwZT1idXR0b24gb25jbGljaz0iYWRkKGRvY3VtZW50LmNmLmFsaWFzLnZhbHVlKTtpZihkb2N1bWVudC5jZi5hamF4LmNoZWNrZWQpe2EobnVsbCxudWxsLGRvY3VtZW50LmNmLmFsaWFzLnZhbHVlKTt9ZWxzZXtnKG51bGwsbnVsbCxkb2N1bWVudC5jZi5hbGlhcy52YWx1ZSk7fSIgdmFsdWU9Ij4+Ij4gPGlucHV0IHR5cGU9Y2hlY2tib3ggbmFtZT1hamF4IHZhbHVlPTEgJy4oJF9TRVNTSU9OW21kNSgkX1NFUlZFUlsnSFRUUF9IT1NUJ10pLidhamF4J10/J2NoZWNrZWQnOicnKS4nPiBzZW5kIHVzaW5nIEFKQVg8YnIvPjx0ZXh0YXJlYSBjbGFzcz1iaWdhcmVhIG5hbWU9b3V0cHV0IHN0eWxlPSJib3JkZXItYm90dG9tOjA7IiByZWFkb25seT4nOw0KICAgIGlmKCFlbXB0eSgkX1BPU1RbJ3AxJ10pKSB7DQogICAgICAgIGVjaG8gaHRtbHNwZWNpYWxjaGFycygiJCAiLiRfUE9TVFsncDEnXS4iXG4iLmV4KCRfUE9TVFsncDEnXSkpOw0KICAgIH0NCiAgICBlY2hvICc8L3RleHRhcmVhPjxpbnB1dCB0eXBlPXRleHQgbmFtZT1jbWQgc3R5bGU9ImJvcmRlci10b3A6MDt3aWR0aDoxMDAlOyIgb25rZXlkb3duPSJrcChldmVudCk7Ij4nOw0KICAgIGVjaG8gJzwvZm9ybT48L2Rpdj48c2NyaXB0PmRvY3VtZW50LmNmLmNtZC5mb2N1cygpOzwvc2NyaXB0Pic7DQogICAgcHJpbnRGb290ZXIoKTsNCn0NCg0KZnVuY3Rpb24gYWN0aW9uTG9nb3V0KCkgew0KICAgIHVuc2V0KCRfU0VTU0lPTlttZDUoJF9TRVJWRVJbJ0hUVFBfSE9TVCddKV0pOw0KICAgIGVjaG8gJzxib2R5IGJnY29sb3I9IzAwMDAwMD48Y2VudGVyPjxpbWcgc3JjPSJodHRwOi8vcG5nLTQuZmluZGljb25zLmNvbS9maWxlcy9pY29ucy8xNDYveHBfaWNhbmR5XzNfMS8xMjgvbG9nX29mZi5wbmciPjxoMT48Zm9udCBjb2xvcj0iI2EzZTk1NiI+R29vZCBCeWUgXl9eIEVOSk9ZPGJyPjxoMj48Zm9udCBzaXplPSI0Ij5TSEVMTCBCWSBNYWZpYSBCb3k8cD5odHRwczovL3d3dy5mYWNlYm9vay5jb20vQWFtaXIuTG92ZS5NPGgyPlRFQU0gUGFjayBDeWJlciBBdHRhY2tlcnM8YnI+PGgyPjxmb250IGNvbG9yPSJncmVlbiI+UEFLSVNUQU48Zm9udCBjb2xvcj0iI2ZmZiI+WklOREFCQUQ8L2gyPjxwPjxmb250IGNvbG9yPSIjYTNlOTU2IiBmb250IHNpemU9IjQiPldFIEFSRT0+PG1hcnF1ZWUgd2lkdGg9IjgwJSI+UGFrIEN5YmVyIEF0dGFja2VyczwvbWFycXVlZT48L2ZvbnQ+PC9mb250PjwvZm9udD48L2NlbnRlcj48L2JvZHk+JzsNCn0NCg0KZnVuY3Rpb24gYWN0aW9uU2VsZlJlbW92ZSgpIHsNCiAgICBwcmludEhlYWRlcigpOw0KICAgIGlmKCRfUE9TVFsncDEnXSA9PSAneWVzJykgew0KICAgICAgICBpZihAdW5saW5rKFNFTEZfUEFUSCkpDQogICAgICAgICAgICBkaWUoJ1NoZWxsIGhhcyBiZWVuIHJlbW92ZWQnKTsNCiAgICAgICAgZWxzZQ0KICAgICAgICAgICAgZWNobyAndW5saW5rIGVycm9yISc7DQogICAgfQ0KICAgIGVjaG8gJzxoMT5TdWljaWRlPC9oMT48ZGl2IGNsYXNzPWNvbnRlbnQ+UmVhbGx5IHdhbnQgdG8gcmVtb3ZlIHRoZSBzaGVsbD88YnI+PGEgaHJlZj0jIG9uY2xpY2s9ImcobnVsbCxudWxsLFwneWVzXCcpIj5ZZXM8L2E+PC9kaXY+JzsNCiAgICBwcmludEZvb3RlcigpOw0KfQ0KDQpmdW5jdGlvbiBhY3Rpb25CcnV0ZWZvcmNlKCkgew0KICAgIHByaW50SGVhZGVyKCk7DQogICAgaWYoIGlzc2V0KCRfUE9TVFsncHJvdG8nXSkgKSB7DQogICAgICAgIGVjaG8gJzxoMT5SZXN1bHRzPC9oMT48ZGl2IGNsYXNzPWNvbnRlbnQ+PHNwYW4+VHlwZTo8L3NwYW4+ICcuaHRtbHNwZWNpYWxjaGFycygkX1BPU1RbJ3Byb3RvJ10pLicgPHNwYW4+U2VydmVyOjwvc3Bhbj4gJy5odG1sc3BlY2lhbGNoYXJzKCRfUE9TVFsnc2VydmVyJ10pLic8YnI+JzsNCiAgICAgICAgaWYoICRfUE9TVFsncHJvdG8nXSA9PSAnZnRwJyApIHsNCiAgICAgICAgICAgIGZ1bmN0aW9uIGJydXRlRm9yY2UoJGlwLCRwb3J0LCRsb2dpbiwkcGFzcykgew0KICAgICAgICAgICAgICAgICRmcCA9IEBmdHBfY29ubmVjdCgkaXAsICRwb3J0PyRwb3J0OjIxKTsNCiAgICAgICAgICAgICAgICBpZighJGZwKSByZXR1cm4gZmFsc2U7DQogICAgICAgICAgICAgICAgJHJlcyA9IEBmdHBfbG9naW4oJGZwLCAkbG9naW4sICRwYXNzKTsNCiAgICAgICAgICAgICAgICBAZnRwX2Nsb3NlKCRmcCk7DQogICAgICAgICAgICAgICAgcmV0dXJuICRyZXM7DQogICAgICAgICAgICB9DQogICAgICAgIH0gZWxzZWlmKCAkX1BPU1RbJ3Byb3RvJ10gPT0gJ215c3FsJyApIHsNCiAgICAgICAgICAgIGZ1bmN0aW9uIGJydXRlRm9yY2UoJGlwLCRwb3J0LCRsb2dpbiwkcGFzcykgew0KICAgICAgICAgICAgICAgICRyZXMgPSBAbXlzcWxfY29ubmVjdCgkaXAuJzonLiRwb3J0PyRwb3J0OjMzMDYsICRsb2dpbiwgJHBhc3MpOw0KICAgICAgICAgICAgICAgIEBteXNxbF9jbG9zZSgkcmVzKTsNCiAgICAgICAgICAgICAgICByZXR1cm4gJHJlczsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfSBlbHNlaWYoICRfUE9TVFsncHJvdG8nXSA9PSAncGdzcWwnICkgew0KICAgICAgICAgICAgZnVuY3Rpb24gYnJ1dGVGb3JjZSgkaXAsJHBvcnQsJGxvZ2luLCRwYXNzKSB7DQogICAgICAgICAgICAgICAgJHN0ciA9ICJob3N0PSciLiRpcC4iJyBwb3J0PSciLiRwb3J0LiInIHVzZXI9JyIuJGxvZ2luLiInIHBhc3N3b3JkPSciLiRwYXNzLiInIGRibmFtZT0nJyI7DQogICAgICAgICAgICAgICAgJHJlcyA9IEBwZ19jb25uZWN0KCRzZXJ2ZXJbMF0uJzonLiRzZXJ2ZXJbMV0/JHNlcnZlclsxXTo1NDMyLCAkbG9naW4sICRwYXNzKTsNCiAgICAgICAgICAgICAgICBAcGdfY2xvc2UoJHJlcyk7DQogICAgICAgICAgICAgICAgcmV0dXJuICRyZXM7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgJHN1Y2Nlc3MgPSAwOw0KICAgICAgICAkYXR0ZW1wdHMgPSAwOw0KICAgICAgICAkc2VydmVyID0gZXhwbG9kZSgiOiIsICRfUE9TVFsnc2VydmVyJ10pOw0KICAgICAgICBpZigkX1BPU1RbJ3R5cGUnXSA9PSAxKSB7DQogICAgICAgICAgICAkdGVtcCA9IEBmaWxlKCcvZXRjL3Bhc3N3ZCcpOw0KICAgICAgICAgICAgaWYoIGlzX2FycmF5KCR0ZW1wKSApDQogICAgICAgICAgICAgICAgZm9yZWFjaCgkdGVtcCBhcyAkbGluZSkgew0KICAgICAgICAgICAgICAgICAgICAkbGluZSA9IGV4cGxvZGUoIjoiLCAkbGluZSk7DQogICAgICAgICAgICAgICAgICAgICsrJGF0dGVtcHRzOw0KICAgICAgICAgICAgICAgICAgICBpZiggYnJ1dGVGb3JjZShAJHNlcnZlclswXSxAJHNlcnZlclsxXSwgJGxpbmVbMF0sICRsaW5lWzBdKSApIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICRzdWNjZXNzKys7DQogICAgICAgICAgICAgICAgICAgICAgICBlY2hvICc8Yj4nLmh0bWxzcGVjaWFsY2hhcnMoJGxpbmVbMF0pLic8L2I+OicuaHRtbHNwZWNpYWxjaGFycygkbGluZVswXSkuJzxicj4nOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIGlmKEAkX1BPU1RbJ3JldmVyc2UnXSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgJHRtcCA9ICIiOw0KICAgICAgICAgICAgICAgICAgICAgICAgZm9yKCRpPXN0cmxlbigkbGluZVswXSktMTsgJGk+PTA7IC0tJGkpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRtcCAuPSAkbGluZVswXVskaV07DQogICAgICAgICAgICAgICAgICAgICAgICArKyRhdHRlbXB0czsNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmKCBicnV0ZUZvcmNlKEAkc2VydmVyWzBdLEAkc2VydmVyWzFdLCAkbGluZVswXSwgJHRtcCkgKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHN1Y2Nlc3MrKzsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICc8Yj4nLmh0bWxzcGVjaWFsY2hhcnMoJGxpbmVbMF0pLic8L2I+OicuaHRtbHNwZWNpYWxjaGFycygkdG1wKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgfSBlbHNlaWYoJF9QT1NUWyd0eXBlJ10gPT0gMikgew0KICAgICAgICAgICAgJHRlbXAgPSBAZmlsZSgkX1BPU1RbJ2RpY3QnXSk7DQogICAgICAgICAgICBpZiggaXNfYXJyYXkoJHRlbXApICkNCiAgICAgICAgICAgICAgICBmb3JlYWNoKCR0ZW1wIGFzICRsaW5lKSB7DQogICAgICAgICAgICAgICAgICAgICRsaW5lID0gdHJpbSgkbGluZSk7DQogICAgICAgICAgICAgICAgICAgICsrJGF0dGVtcHRzOw0KICAgICAgICAgICAgICAgICAgICBpZiggYnJ1dGVGb3JjZSgkc2VydmVyWzBdLEAkc2VydmVyWzFdLCAkX1BPU1RbJ2xvZ2luJ10sICRsaW5lKSApIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICRzdWNjZXNzKys7DQogICAgICAgICAgICAgICAgICAgICAgICBlY2hvICc8Yj4nLmh0bWxzcGVjaWFsY2hhcnMoJF9QT1NUWydsb2dpbiddKS4nPC9iPjonLmh0bWxzcGVjaWFsY2hhcnMoJGxpbmUpLic8YnI+JzsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICBlY2hvICI8c3Bhbj5BdHRlbXB0czo8L3NwYW4+ICRhdHRlbXB0cyA8c3Bhbj5TdWNjZXNzOjwvc3Bhbj4gJHN1Y2Nlc3M8L2Rpdj48YnI+IjsNCiAgICB9DQogICAgZWNobyAnPGgxPkZUUCBicnV0ZWZvcmNlPC9oMT48ZGl2IGNsYXNzPWNvbnRlbnQ+PHRhYmxlPjxmb3JtIG1ldGhvZD1wb3N0Pjx0cj48dGQ+PHNwYW4+VHlwZTwvc3Bhbj48L3RkPicNCiAgICAgICAgLic8dGQ+PHNlbGVjdCBuYW1lPXByb3RvPjxvcHRpb24gdmFsdWU9ZnRwPkZUUDwvb3B0aW9uPjxvcHRpb24gdmFsdWU9bXlzcWw+TXlTcWw8L29wdGlvbj48b3B0aW9uIHZhbHVlPXBnc3FsPlBvc3RncmVTcWw8L29wdGlvbj48L3NlbGVjdD48L3RkPjwvdHI+PHRyPjx0ZD4nDQogICAgICAgIC4nPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9YyB2YWx1ZT0iJy5odG1sc3BlY2lhbGNoYXJzKCRHTE9CQUxTWydjd2QnXSkuJyI+Jw0KICAgICAgICAuJzxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWEgdmFsdWU9IicuaHRtbHNwZWNpYWxjaGFycygkX1BPU1RbJ2EnXSkuJyI+Jw0KICAgICAgICAuJzxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWNoYXJzZXQgdmFsdWU9IicuaHRtbHNwZWNpYWxjaGFycygkX1BPU1RbJ2NoYXJzZXQnXSkuJyI+Jw0KICAgICAgICAuJzxzcGFuPlNlcnZlcjpwb3J0PC9zcGFuPjwvdGQ+Jw0KICAgICAgICAuJzx0ZD48aW5wdXQgdHlwZT10ZXh0IG5hbWU9c2VydmVyIHZhbHVlPSIxMjcuMC4wLjEiPjwvdGQ+PC90cj4nDQogICAgICAgIC4nPHRyPjx0ZD48c3Bhbj5CcnV0ZSB0eXBlPC9zcGFuPjwvdGQ+Jw0KICAgICAgICAuJzx0ZD48bGFiZWw+PGlucHV0IHR5cGU9cmFkaW8gbmFtZT10eXBlIHZhbHVlPSIxIiBjaGVja2VkPiAvZXRjL3Bhc3N3ZDwvbGFiZWw+PC90ZD48L3RyPicNCiAgICAgICAgLic8dHI+PHRkPjwvdGQ+PHRkPjxsYWJlbCBzdHlsZT0icGFkZGluZy1sZWZ0OjE1cHgiPjxpbnB1dCB0eXBlPWNoZWNrYm94IG5hbWU9cmV2ZXJzZSB2YWx1ZT0xIGNoZWNrZWQ+IHJldmVyc2UgKGxvZ2luIC0+IG5pZ29sKTwvbGFiZWw+PC90ZD48L3RyPicNCiAgICAgICAgLic8dHI+PHRkPjwvdGQ+PHRkPjxsYWJlbD48aW5wdXQgdHlwZT1yYWRpbyBuYW1lPXR5cGUgdmFsdWU9IjIiPiBEaWN0aW9uYXJ5PC9sYWJlbD48L3RkPjwvdHI+Jw0KICAgICAgICAuJzx0cj48dGQ+PC90ZD48dGQ+PHRhYmxlIHN0eWxlPSJwYWRkaW5nLWxlZnQ6MTVweCI+PHRyPjx0ZD48c3Bhbj5Mb2dpbjwvc3Bhbj48L3RkPicNCiAgICAgICAgLic8dGQ+PGlucHV0IHR5cGU9dGV4dCBuYW1lPWxvZ2luIHZhbHVlPSJrb21zZW4iPjwvdGQ+PC90cj4nDQogICAgICAgIC4nPHRyPjx0ZD48c3Bhbj5EaWN0aW9uYXJ5PC9zcGFuPjwvdGQ+Jw0KICAgICAgICAuJzx0ZD48aW5wdXQgdHlwZT10ZXh0IG5hbWU9ZGljdCB2YWx1ZT0iJy5odG1sc3BlY2lhbGNoYXJzKCRHTE9CQUxTWydjd2QnXSkuJ3Bhc3N3ZC5kaWMiPjwvdGQ+PC90cj48L3RhYmxlPicNCiAgICAgICAgLic8L3RkPjwvdHI+PHRyPjx0ZD48L3RkPjx0ZD48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9Ij4+Ij48L3RkPjwvdHI+PC9mb3JtPjwvdGFibGU+JzsNCiAgICBlY2hvICc8L2Rpdj48YnI+JzsNCiAgICBwcmludEZvb3RlcigpOw0KfQ0KDQpmdW5jdGlvbiBhY3Rpb25TcWwoKSB7DQogICAgY2xhc3MgRGJDbGFzcyB7DQogICAgICAgIHZhciAkdHlwZTsNCiAgICAgICAgdmFyICRsaW5rOw0KICAgICAgICB2YXIgJHJlczsNCiAgICAgICAgZnVuY3Rpb24gRGJDbGFzcygkdHlwZSkgICAgew0KICAgICAgICAgICAgJHRoaXMtPnR5cGUgPSAkdHlwZTsNCiAgICAgICAgfQ0KICAgICAgICBmdW5jdGlvbiBjb25uZWN0KCRob3N0LCAkdXNlciwgJHBhc3MsICRkYm5hbWUpew0KICAgICAgICAgICAgc3dpdGNoKCR0aGlzLT50eXBlKSAgICB7DQogICAgICAgICAgICAgICAgY2FzZSAnbXlzcWwnOg0KICAgICAgICAgICAgICAgICAgICBpZiggJHRoaXMtPmxpbmsgPSBAbXlzcWxfY29ubmVjdCgkaG9zdCwkdXNlciwkcGFzcyx0cnVlKSApIHJldHVybiB0cnVlOw0KICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICBjYXNlICdwZ3NxbCc6DQogICAgICAgICAgICAgICAgICAgICRob3N0ID0gZXhwbG9kZSgnOicsICRob3N0KTsNCiAgICAgICAgICAgICAgICAgICAgaWYoISRob3N0WzFdKSAkaG9zdFsxXT01NDMyOw0KICAgICAgICAgICAgICAgICAgICBpZiggJHRoaXMtPmxpbmsgPSBAcGdfY29ubmVjdCgiaG9zdD17JGhvc3RbMF19IHBvcnQ9eyRob3N0WzFdfSB1c2VyPSR1c2VyIHBhc3N3b3JkPSRwYXNzIGRibmFtZT0kZGJuYW1lIikgKSByZXR1cm4gdHJ1ZTsNCiAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICB9DQogICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgIH0NCiAgICAgICAgZnVuY3Rpb24gc2VsZWN0ZGIoJGRiKSB7DQogICAgICAgICAgICBzd2l0Y2goJHRoaXMtPnR5cGUpICAgIHsNCiAgICAgICAgICAgICAgICBjYXNlICdteXNxbCc6DQogICAgICAgICAgICAgICAgICAgIGlmIChAbXlzcWxfc2VsZWN0X2RiKCRkYikpcmV0dXJuIHRydWU7DQogICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICB9DQogICAgICAgIGZ1bmN0aW9uIHF1ZXJ5KCRzdHIpIHsNCiAgICAgICAgICAgIHN3aXRjaCgkdGhpcy0+dHlwZSkgew0KICAgICAgICAgICAgICAgIGNhc2UgJ215c3FsJzoNCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5yZXMgPSBAbXlzcWxfcXVlcnkoJHN0cik7DQogICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgIGNhc2UgJ3Bnc3FsJzoNCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5yZXMgPSBAcGdfcXVlcnkoJHRoaXMtPmxpbmssJHN0cik7DQogICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICB9DQogICAgICAgIGZ1bmN0aW9uIGZldGNoKCkgew0KICAgICAgICAgICAgJHJlcyA9IGZ1bmNfbnVtX2FyZ3MoKT9mdW5jX2dldF9hcmcoMCk6JHRoaXMtPnJlczsNCiAgICAgICAgICAgIHN3aXRjaCgkdGhpcy0+dHlwZSkgICAgew0KICAgICAgICAgICAgICAgIGNhc2UgJ215c3FsJzoNCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEBteXNxbF9mZXRjaF9hc3NvYygkcmVzKTsNCiAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgY2FzZSAncGdzcWwnOg0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gQHBnX2ZldGNoX2Fzc29jKCRyZXMpOw0KICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgfQ0KICAgICAgICBmdW5jdGlvbiBsaXN0RGJzKCkgew0KICAgICAgICAgICAgc3dpdGNoKCR0aGlzLT50eXBlKSAgICB7DQogICAgICAgICAgICAgICAgY2FzZSAnbXlzcWwnOg0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gJHRoaXMtPnJlcyA9IEBteXNxbF9saXN0X2RicygkdGhpcy0+bGluayk7DQogICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgY2FzZSAncGdzcWwnOg0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gJHRoaXMtPnJlcyA9ICR0aGlzLT5xdWVyeSgiU0VMRUNUIGRhdG5hbWUgRlJPTSBwZ19kYXRhYmFzZSIpOw0KICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICB9DQogICAgICAgIGZ1bmN0aW9uIGxpc3RUYWJsZXMoKSB7DQogICAgICAgICAgICBzd2l0Y2goJHRoaXMtPnR5cGUpICAgIHsNCiAgICAgICAgICAgICAgICBjYXNlICdteXNxbCc6DQogICAgICAgICAgICAgICAgICAgIHJldHVybiAkdGhpcy0+cmVzID0gJHRoaXMtPnF1ZXJ5KCdTSE9XIFRBQkxFUycpOw0KICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgIGNhc2UgJ3Bnc3FsJzoNCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5yZXMgPSAkdGhpcy0+cXVlcnkoInNlbGVjdCB0YWJsZV9uYW1lIGZyb20gaW5mb3JtYXRpb25fc2NoZW1hLnRhYmxlcyB3aGVyZSAodGFibGVfc2NoZW1hICE9ICdpbmZvcm1hdGlvbl9zY2hlbWEnIEFORCB0YWJsZV9zY2hlbWEgIT0gJ3BnX2NhdGFsb2cnKSBvciB0YWJsZV9uYW1lID0gJ3BnX3VzZXInIik7DQogICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICB9DQogICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgIH0NCiAgICAgICAgZnVuY3Rpb24gZXJyb3IoKSB7DQogICAgICAgICAgICBzd2l0Y2goJHRoaXMtPnR5cGUpICAgIHsNCiAgICAgICAgICAgICAgICBjYXNlICdteXNxbCc6DQogICAgICAgICAgICAgICAgICAgIHJldHVybiBAbXlzcWxfZXJyb3IoJHRoaXMtPmxpbmspOw0KICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgIGNhc2UgJ3Bnc3FsJzoNCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEBwZ19sYXN0X2Vycm9yKCR0aGlzLT5saW5rKTsNCiAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgfQ0KICAgICAgICBmdW5jdGlvbiBzZXRDaGFyc2V0KCRzdHIpIHsNCiAgICAgICAgICAgIHN3aXRjaCgkdGhpcy0+dHlwZSkgICAgew0KICAgICAgICAgICAgICAgIGNhc2UgJ215c3FsJzoNCiAgICAgICAgICAgICAgICAgICAgaWYoZnVuY3Rpb25fZXhpc3RzKCdteXNxbF9zZXRfY2hhcnNldCcpKQ0KICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEBteXNxbF9zZXRfY2hhcnNldCgkc3RyLCAkdGhpcy0+bGluayk7DQogICAgICAgICAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5xdWVyeSgnU0VUIENIQVJTRVQgJy4kc3RyKTsNCiAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgY2FzZSAnbXlzcWwnOg0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gQHBnX3NldF9jbGllbnRfZW5jb2RpbmcoJHRoaXMtPmxpbmssICRzdHIpOw0KICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgfQ0KICAgICAgICBmdW5jdGlvbiBkdW1wKCR0YWJsZSkgew0KICAgICAgICAgICAgc3dpdGNoKCR0aGlzLT50eXBlKSAgICB7DQogICAgICAgICAgICAgICAgY2FzZSAnbXlzcWwnOg0KICAgICAgICAgICAgICAgICAgICAkcmVzID0gJHRoaXMtPnF1ZXJ5KCdTSE9XIENSRUFURSBUQUJMRSBgJy4kdGFibGUuJ2AnKTsNCiAgICAgICAgICAgICAgICAgICAgJGNyZWF0ZSA9IG15c3FsX2ZldGNoX2FycmF5KCRyZXMpOw0KICAgICAgICAgICAgICAgICAgICBlY2hvICRjcmVhdGVbMV0uIjtcblxuIjsNCiAgICAgICAgICAgICAgICAgICAgJHRoaXMtPnF1ZXJ5KCdTRUxFQ1QgKiBGUk9NIGAnLiR0YWJsZS4nYCcpOw0KICAgICAgICAgICAgICAgICAgICB3aGlsZSgkaXRlbSA9ICR0aGlzLT5mZXRjaCgpKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAkY29sdW1ucyA9IGFycmF5KCk7DQogICAgICAgICAgICAgICAgICAgICAgICBmb3JlYWNoKCRpdGVtIGFzICRrPT4kdikgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpdGVtWyRrXSA9ICInIi5AbXlzcWxfcmVhbF9lc2NhcGVfc3RyaW5nKCR2KS4iJyI7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGNvbHVtbnNbXSA9ICJgIi4kay4iYCI7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIGVjaG8gJ0lOU0VSVCBJTlRPIGAnLiR0YWJsZS4nYCAoJy5pbXBsb2RlKCIsICIsICRjb2x1bW5zKS4nKSBWQUxVRVMgKCcuaW1wbG9kZSgiLCAiLCAkaXRlbSkuJyk7Jy4iXG4iOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgY2FzZSAncGdzcWwnOg0KICAgICAgICAgICAgICAgICAgICAkdGhpcy0+cXVlcnkoJ1NFTEVDVCAqIEZST00gJy4kdGFibGUpOw0KICAgICAgICAgICAgICAgICAgICB3aGlsZSgkaXRlbSA9ICR0aGlzLT5mZXRjaCgpKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAkY29sdW1ucyA9IGFycmF5KCk7DQogICAgICAgICAgICAgICAgICAgICAgICBmb3JlYWNoKCRpdGVtIGFzICRrPT4kdikgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpdGVtWyRrXSA9ICInIi5hZGRzbGFzaGVzKCR2KS4iJyI7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGNvbHVtbnNbXSA9ICRrOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICBlY2hvICdJTlNFUlQgSU5UTyAnLiR0YWJsZS4nICgnLmltcGxvZGUoIiwgIiwgJGNvbHVtbnMpLicpIFZBTFVFUyAoJy5pbXBsb2RlKCIsICIsICRpdGVtKS4nKTsnLiJcbiI7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgfQ0KICAgIH07DQogICAgJGRiID0gbmV3IERiQ2xhc3MoQCRfUE9TVFsndHlwZSddKTsNCiAgICBpZihAJF9QT1NUWydwMiddPT0nZG93bmxvYWQnKSB7DQogICAgICAgIG9iX3N0YXJ0KCJvYl9nemhhbmRsZXIiLCA0MDk2KTsNCiAgICAgICAgJGRiLT5jb25uZWN0KCRfUE9TVFsnc3FsX2hvc3QnXSwgJF9QT1NUWydzcWxfbG9naW4nXSwgJF9QT1NUWydzcWxfcGFzcyddLCAkX1BPU1RbJ3NxbF9iYXNlJ10pOw0KICAgICAgICAkZGItPnNlbGVjdGRiKCRfUE9TVFsnc3FsX2Jhc2UnXSk7DQogICAgICAgIGhlYWRlcigiQ29udGVudC1EaXNwb3NpdGlvbjogYXR0YWNobWVudDsgZmlsZW5hbWU9ZHVtcC5zcWwiKTsNCiAgICAgICAgaGVhZGVyKCJDb250ZW50LVR5cGU6IHRleHQvcGxhaW4iKTsNCiAgICAgICAgZm9yZWFjaCgkX1BPU1RbJ3RibCddIGFzICR2KQ0KICAgICAgICAgICAgICAgICRkYi0+ZHVtcCgkdik7DQogICAgICAgIGV4aXQ7DQogICAgfQ0KICAgIHByaW50SGVhZGVyKCk7DQogICAgZWNobyAnPGgxPlNxbCBicm93c2VyPC9oMT48ZGl2IGNsYXNzPWNvbnRlbnQ+DQogICAgPGZvcm0gbmFtZT0ic2YiIG1ldGhvZD0icG9zdCI+DQogICAgICAgIDx0YWJsZSBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjAiPg0KICAgICAgICAgICAgPHRyPg0KICAgICAgICAgICAgICAgIDx0ZD5UeXBlPC90ZD4NCiAgICAgICAgICAgICAgICA8dGQ+SG9zdDwvdGQ+DQogICAgICAgICAgICAgICAgPHRkPkxvZ2luPC90ZD4NCiAgICAgICAgICAgICAgICA8dGQ+UGFzc3dvcmQ8L3RkPg0KICAgICAgICAgICAgICAgIDx0ZD5EYXRhYmFzZTwvdGQ+DQogICAgICAgICAgICAgICAgPHRkPjwvdGQ+DQogICAgICAgICAgICA8L3RyPg0KICAgICAgICAgICAgPHRyPg0KICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWEgdmFsdWU9U3FsPg0KICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPXAxIHZhbHVlPVwncXVlcnlcJz4NCiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1wMj4NCiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1jIHZhbHVlPSInLmh0bWxzcGVjaWFsY2hhcnMoJEdMT0JBTFNbJ2N3ZCddKS4nIj4NCiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1jaGFyc2V0IHZhbHVlPSInLihpc3NldCgkX1BPU1RbJ2NoYXJzZXQnXSk/JF9QT1NUWydjaGFyc2V0J106JycpLiciPg0KICAgICAgICAgICAgICAgIDx0ZD4NCiAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBuYW1lPVwndHlwZVwnPg0KICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0ibXlzcWwiICcuKEAkX1BPU1RbJ3R5cGUnXT09J215c3FsJz8nc2VsZWN0ZWQnOicnKS4nPk15U3FsPC9vcHRpb24+DQogICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJwZ3NxbCIgJy4oQCRfUE9TVFsndHlwZSddPT0ncGdzcWwnPydzZWxlY3RlZCc6JycpLic+UG9zdGdyZVNxbDwvb3B0aW9uPg0KICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD48L3RkPg0KICAgICAgICAgICAgICAgIDx0ZD48aW5wdXQgdHlwZT10ZXh0IG5hbWU9c3FsX2hvc3QgdmFsdWU9IicuKGVtcHR5KCRfUE9TVFsnc3FsX2hvc3QnXSk/J2xvY2FsaG9zdCc6aHRtbHNwZWNpYWxjaGFycygkX1BPU1RbJ3NxbF9ob3N0J10pKS4nIj48L3RkPg0KICAgICAgICAgICAgICAgIDx0ZD48aW5wdXQgdHlwZT10ZXh0IG5hbWU9c3FsX2xvZ2luIHZhbHVlPSInLihlbXB0eSgkX1BPU1RbJ3NxbF9sb2dpbiddKT8ncm9vdCc6aHRtbHNwZWNpYWxjaGFycygkX1BPU1RbJ3NxbF9sb2dpbiddKSkuJyI+PC90ZD4NCiAgICAgICAgICAgICAgICA8dGQ+PGlucHV0IHR5cGU9dGV4dCBuYW1lPXNxbF9wYXNzIHZhbHVlPSInLihlbXB0eSgkX1BPU1RbJ3NxbF9wYXNzJ10pPycnOmh0bWxzcGVjaWFsY2hhcnMoJF9QT1NUWydzcWxfcGFzcyddKSkuJyI+PC90ZD4NCiAgICAgICAgICAgICAgICA8dGQ+JzsNCiAgICAkdG1wID0gIjxpbnB1dCB0eXBlPXRleHQgbmFtZT1zcWxfYmFzZSB2YWx1ZT0nJz4iOw0KICAgIGlmKGlzc2V0KCRfUE9TVFsnc3FsX2hvc3QnXSkpew0KICAgICAgICBpZigkZGItPmNvbm5lY3QoJF9QT1NUWydzcWxfaG9zdCddLCAkX1BPU1RbJ3NxbF9sb2dpbiddLCAkX1BPU1RbJ3NxbF9wYXNzJ10sICRfUE9TVFsnc3FsX2Jhc2UnXSkpIHsNCiAgICAgICAgICAgIHN3aXRjaCgkX1BPU1RbJ2NoYXJzZXQnXSkgew0KICAgICAgICAgICAgICAgIGNhc2UgIldpbmRvd3MtMTI1MSI6ICRkYi0+c2V0Q2hhcnNldCgnY3AxMjUxJyk7IGJyZWFrOw0KICAgICAgICAgICAgICAgIGNhc2UgIlVURi04IjogJGRiLT5zZXRDaGFyc2V0KCd1dGY4Jyk7IGJyZWFrOw0KICAgICAgICAgICAgICAgIGNhc2UgIktPSTgtUiI6ICRkYi0+c2V0Q2hhcnNldCgna29pOHInKTsgYnJlYWs7DQogICAgICAgICAgICAgICAgY2FzZSAiS09JOC1VIjogJGRiLT5zZXRDaGFyc2V0KCdrb2k4dScpOyBicmVhazsNCiAgICAgICAgICAgICAgICBjYXNlICJjcDg2NiI6ICRkYi0+c2V0Q2hhcnNldCgnY3A4NjYnKTsgYnJlYWs7DQogICAgICAgICAgICB9DQogICAgICAgICAgICAkZGItPmxpc3REYnMoKTsNCiAgICAgICAgICAgIGVjaG8gIjxzZWxlY3QgbmFtZT1zcWxfYmFzZT48b3B0aW9uIHZhbHVlPScnPjwvb3B0aW9uPiI7DQogICAgICAgICAgICB3aGlsZSgkaXRlbSA9ICRkYi0+ZmV0Y2goKSkgew0KICAgICAgICAgICAgICAgIGxpc3QoJGtleSwgJHZhbHVlKSA9IGVhY2goJGl0ZW0pOw0KICAgICAgICAgICAgICAgIGVjaG8gJzxvcHRpb24gdmFsdWU9IicuJHZhbHVlLiciICcuKCR2YWx1ZT09JF9QT1NUWydzcWxfYmFzZSddPydzZWxlY3RlZCc6JycpLic+Jy4kdmFsdWUuJzwvb3B0aW9uPic7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBlY2hvICc8L3NlbGVjdD4nOw0KICAgICAgICB9DQogICAgICAgIGVsc2UgZWNobyAkdG1wOw0KICAgIH1lbHNlDQogICAgICAgIGVjaG8gJHRtcDsNCiAgICBlY2hvICc8L3RkPg0KICAgICAgICAgICAgICAgIDx0ZD48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9Ij4+Ij48L3RkPg0KICAgICAgICAgICAgPC90cj4NCiAgICAgICAgPC90YWJsZT4NCiAgICAgICAgPHNjcmlwdD4NCiAgICAgICAgICAgIGZ1bmN0aW9uIHN0KHQsbCkgew0KICAgICAgICAgICAgICAgIGRvY3VtZW50LnNmLnAxLnZhbHVlID0gXCdzZWxlY3RcJzsNCiAgICAgICAgICAgICAgICBkb2N1bWVudC5zZi5wMi52YWx1ZSA9IHQ7DQogICAgICAgICAgICAgICAgaWYobCE9bnVsbClkb2N1bWVudC5zZi5wMy52YWx1ZSA9IGw7DQogICAgICAgICAgICAgICAgZG9jdW1lbnQuc2Yuc3VibWl0KCk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBmdW5jdGlvbiBpcygpIHsNCiAgICAgICAgICAgICAgICBmb3IoaT0wO2k8ZG9jdW1lbnQuc2YuZWxlbWVudHNbXCd0YmxbXVwnXS5sZW5ndGg7KytpKQ0KICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5zZi5lbGVtZW50c1tcJ3RibFtdXCddW2ldLmNoZWNrZWQgPSAhZG9jdW1lbnQuc2YuZWxlbWVudHNbXCd0YmxbXVwnXVtpXS5jaGVja2VkOw0KICAgICAgICAgICAgfQ0KICAgICAgICA8L3NjcmlwdD4nOw0KICAgIGlmKGlzc2V0KCRkYikgJiYgJGRiLT5saW5rKXsNCiAgICAgICAgZWNobyAiPGJyLz48dGFibGUgd2lkdGg9MTAwJSBjZWxscGFkZGluZz0yIGNlbGxzcGFjaW5nPTA+IjsNCiAgICAgICAgICAgIGlmKCFlbXB0eSgkX1BPU1RbJ3NxbF9iYXNlJ10pKXsNCiAgICAgICAgICAgICAgICAkZGItPnNlbGVjdGRiKCRfUE9TVFsnc3FsX2Jhc2UnXSk7DQogICAgICAgICAgICAgICAgZWNobyAiPHRyPjx0ZCB3aWR0aD0xIHN0eWxlPSdib3JkZXItdG9wOjFweCBzb2xpZCAjYTNlOTU2O2JvcmRlci1yaWdodDoycHggc29saWQgI2EzZTk1NjsnPjxzcGFuPlRhYmxlczo8L3NwYW4+PGJyPjxicj4iOw0KICAgICAgICAgICAgICAgICR0YmxzX3JlcyA9ICRkYi0+bGlzdFRhYmxlcygpOw0KICAgICAgICAgICAgICAgIHdoaWxlKCRpdGVtID0gJGRiLT5mZXRjaCgkdGJsc19yZXMpKSB7DQogICAgICAgICAgICAgICAgICAgIGxpc3QoJGtleSwgJHZhbHVlKSA9IGVhY2goJGl0ZW0pOw0KICAgICAgICAgICAgICAgICAgICAkbiA9ICRkYi0+ZmV0Y2goJGRiLT5xdWVyeSgnU0VMRUNUIENPVU5UKCopIGFzIG4gRlJPTSAnLiR2YWx1ZS4nJykpOw0KICAgICAgICAgICAgICAgICAgICAkdmFsdWUgPSBodG1sc3BlY2lhbGNoYXJzKCR2YWx1ZSk7DQogICAgICAgICAgICAgICAgICAgIGVjaG8gIjxub2JyPjxpbnB1dCB0eXBlPSdjaGVja2JveCcgbmFtZT0ndGJsW10nIHZhbHVlPSciLiR2YWx1ZS4iJz4mbmJzcDs8YSBocmVmPSMgb25jbGljaz1cInN0KCciLiR2YWx1ZS4iJylcIj4iLiR2YWx1ZS4iPC9hPiAoIi4kblsnbiddLiIpPC9ub2JyPjxicj4iOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBlY2hvICI8aW5wdXQgdHlwZT0nY2hlY2tib3gnIG9uY2xpY2s9J2lzKCk7Jz4gPGlucHV0IHR5cGU9YnV0dG9uIHZhbHVlPSdEdW1wJyBvbmNsaWNrPSdkb2N1bWVudC5zZi5wMi52YWx1ZT1cImRvd25sb2FkXCI7ZG9jdW1lbnQuc2Yuc3VibWl0KCk7Jz48L3RkPjx0ZCBzdHlsZT0nYm9yZGVyLXRvcDoxcHggc29saWQgI2EzZTk1NjsnPiI7DQogICAgICAgICAgICAgICAgaWYoQCRfUE9TVFsncDEnXSA9PSAnc2VsZWN0Jykgew0KICAgICAgICAgICAgICAgICAgICAkX1BPU1RbJ3AxJ10gPSAncXVlcnknOw0KICAgICAgICAgICAgICAgICAgICAkZGItPnF1ZXJ5KCdTRUxFQ1QgQ09VTlQoKikgYXMgbiBGUk9NICcuJF9QT1NUWydwMiddLicnKTsNCiAgICAgICAgICAgICAgICAgICAgJG51bSA9ICRkYi0+ZmV0Y2goKTsNCiAgICAgICAgICAgICAgICAgICAgJG51bSA9ICRudW1bJ24nXTsNCiAgICAgICAgICAgICAgICAgICAgZWNobyAiPHNwYW4+Ii4kX1BPU1RbJ3AyJ10uIjwvc3Bhbj4gKCRudW0pICI7DQogICAgICAgICAgICAgICAgICAgIGZvcigkaT0wOyRpPCgkbnVtLzMwKTskaSsrKQ0KICAgICAgICAgICAgICAgICAgICAgICAgaWYoJGkgIT0gKGludCkkX1BPU1RbJ3AzJ10pDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiPGEgaHJlZj0nIycgb25jbGljaz0nc3QoXCIiLiRfUE9TVFsncDInXS4iXCIsICRpKSc+IiwoJGkrMSksIjwvYT4gIjsNCiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICgkaSsxKSwiICI7DQogICAgICAgICAgICAgICAgICAgIGlmKCRfUE9TVFsndHlwZSddPT0ncGdzcWwnKQ0KICAgICAgICAgICAgICAgICAgICAgICAgJF9QT1NUWydwMyddID0gJ1NFTEVDVCAqIEZST00gJy4kX1BPU1RbJ3AyJ10uJyBMSU1JVCAzMCBPRkZTRVQgJy4oJF9QT1NUWydwMyddKjMwKTsNCiAgICAgICAgICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgICAgICAgICAgJF9QT1NUWydwMyddID0gJ1NFTEVDVCAqIEZST00gYCcuJF9QT1NUWydwMiddLidgIExJTUlUICcuKCRfUE9TVFsncDMnXSozMCkuJywzMCc7DQogICAgICAgICAgICAgICAgICAgIGVjaG8gIjxicj48YnI+IjsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgaWYoKEAkX1BPU1RbJ3AxJ10gPT0gJ3F1ZXJ5JykgJiYgIWVtcHR5KCRfUE9TVFsncDMnXSkpIHsNCiAgICAgICAgICAgICAgICAgICAgJGRiLT5xdWVyeShAJF9QT1NUWydwMyddKTsNCiAgICAgICAgICAgICAgICAgICAgaWYoJGRiLT5yZXMgIT09IGZhbHNlKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAkdGl0bGUgPSBmYWxzZTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gJzx0YWJsZSB3aWR0aD0xMDAlIGNlbGxzcGFjaW5nPTAgY2VsbHBhZGRpbmc9MiBjbGFzcz1tYWluPic7DQogICAgICAgICAgICAgICAgICAgICAgICAkbGluZSA9IDE7DQogICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSgkaXRlbSA9ICRkYi0+ZmV0Y2goKSkgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCEkdGl0bGUpICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAnPHRyPic7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2goJGl0ZW0gYXMgJGtleSA9PiAkdmFsdWUpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICc8dGg+Jy4ka2V5Lic8L3RoPic7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc2V0KCRpdGVtKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRpdGxlPXRydWU7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gJzwvdHI+PHRyPic7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRsaW5lID0gMjsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAnPHRyIGNsYXNzPSJsJy4kbGluZS4nIj4nOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRsaW5lID0gJGxpbmU9PTE/MjoxOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2goJGl0ZW0gYXMgJGtleSA9PiAkdmFsdWUpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoJHZhbHVlID09IG51bGwpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICc8dGQ+PGk+bnVsbDwvaT48L3RkPic7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gJzx0ZD4nLm5sMmJyKGh0bWxzcGVjaWFsY2hhcnMoJHZhbHVlKSkuJzwvdGQ+JzsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAnPC90cj4nOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAnPC90YWJsZT4nOw0KICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAnPGRpdj48Yj5FcnJvcjo8L2I+ICcuaHRtbHNwZWNpYWxjaGFycygkZGItPmVycm9yKCkpLic8L2Rpdj4nOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGVjaG8gIjxicj48dGV4dGFyZWEgbmFtZT0ncDMnIHN0eWxlPSd3aWR0aDoxMDAlO2hlaWdodDoxMDBweCc+Ii5AaHRtbHNwZWNpYWxjaGFycygkX1BPU1RbJ3AzJ10pLiI8L3RleHRhcmVhPjxici8+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSdFeGVjdXRlJz4iOw0KICAgICAgICAgICAgICAgIGVjaG8gIjwvdGQ+PC90cj4iOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgZWNobyAiPC90YWJsZT48L2Zvcm0+PGJyLz48Zm9ybSBvbnN1Ym1pdD0nZG9jdW1lbnQuc2YucDEudmFsdWU9XCJsb2FkZmlsZVwiO2RvY3VtZW50LnNmLnAyLnZhbHVlPXRoaXMuZi52YWx1ZTtkb2N1bWVudC5zZi5zdWJtaXQoKTtyZXR1cm4gZmFsc2U7Jz48c3Bhbj5Mb2FkIGZpbGU8L3NwYW4+IDxpbnB1dCAgY2xhc3M9J3Rvb2xzSW5wJyB0eXBlPXRleHQgbmFtZT1mPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0nPj4nPjwvZm9ybT4iOw0KICAgICAgICAgICAgaWYoQCRfUE9TVFsncDEnXSA9PSAnbG9hZGZpbGUnKSB7DQogICAgICAgICAgICAgICAgJGRiLT5xdWVyeSgiU0VMRUNUIExPQURfRklMRSgnIi5hZGRzbGFzaGVzKCRfUE9TVFsncDInXSkuIicpIGFzIGZpbGUiKTsNCiAgICAgICAgICAgICAgICAkZmlsZSA9ICRkYi0+ZmV0Y2goKTsNCiAgICAgICAgICAgICAgICBlY2hvICc8cHJlIGNsYXNzPW1sMT4nLmh0bWxzcGVjaWFsY2hhcnMoJGZpbGVbJ2ZpbGUnXSkuJzwvcHJlPic7DQogICAgICAgICAgICB9DQogICAgfQ0KICAgIGVjaG8gJzwvZGl2Pic7DQogICAgcHJpbnRGb290ZXIoKTsNCn0NCg0KZnVuY3Rpb24gYWN0aW9uTmV0d29yaygpIHsNCiAgICBwcmludEhlYWRlcigpOw0KICAgICRiYWNrX2Nvbm5lY3RfYz0iSTJsdVkyeDFaR1VnUEhOMFpHbHZMbWcrRFFvamFXNWpiSFZrWlNBOGMzbHpMM052WTJ0bGRDNW9QZzBLSTJsdVkyeDFaR1VnUEc1bGRHbHVaWFF2YVc0dWFENE5DbWx1ZENCdFlXbHVLR2x1ZENCaGNtZGpMQ0JqYUdGeUlDcGhjbWQyVzEwcElIc05DaUFnSUNCcGJuUWdabVE3RFFvZ0lDQWdjM1J5ZFdOMElITnZZMnRoWkdSeVgybHVJSE5wYmpzTkNpQWdJQ0JrWVdWdGIyNG9NU3d3S1RzTkNpQWdJQ0J6YVc0dWMybHVYMlpoYldsc2VTQTlJRUZHWDBsT1JWUTdEUW9nSUNBZ2MybHVMbk5wYmw5d2IzSjBJRDBnYUhSdmJuTW9ZWFJ2YVNoaGNtZDJXekpkS1NrN0RRb2dJQ0FnYzJsdUxuTnBibDloWkdSeUxuTmZZV1JrY2lBOUlHbHVaWFJmWVdSa2NpaGhjbWQyV3pGZEtUc05DaUFnSUNCbVpDQTlJSE52WTJ0bGRDaEJSbDlKVGtWVUxDQlRUME5MWDFOVVVrVkJUU3dnU1ZCUVVrOVVUMTlVUTFBcElEc05DaUFnSUNCcFppQW9LR052Ym01bFkzUW9abVFzSUNoemRISjFZM1FnYzI5amEyRmtaSElnS2lrZ0puTnBiaXdnYzJsNlpXOW1LSE4wY25WamRDQnpiMk5yWVdSa2Npa3BLVHd3S1NCN0RRb2dJQ0FnSUNBZ0lIQmxjbkp2Y2lnaVEyOXVibVZqZENCbVlXbHNJaWs3RFFvZ0lDQWdJQ0FnSUhKbGRIVnliaUF3T3cwS0lDQWdJSDBOQ2lBZ0lDQmtkWEF5S0daa0xDQXdLVHNOQ2lBZ0lDQmtkWEF5S0daa0xDQXhLVHNOQ2lBZ0lDQmtkWEF5S0daa0xDQXlLVHNOQ2lBZ0lDQnplWE4wWlcwb0lpOWlhVzR2YzJnZ0xXa2lLVHNOQ2lBZ0lDQmpiRzl6WlNobVpDazdEUXA5IjsNCiAgICAkYmFja19jb25uZWN0X3A9Ikl5RXZkWE55TDJKcGJpOXdaWEpzRFFwMWMyVWdVMjlqYTJWME93MEtKR2xoWkdSeVBXbHVaWFJmWVhSdmJpZ2tRVkpIVmxzd1hTa2dmSHdnWkdsbEtDSkZjbkp2Y2pvZ0pDRmNiaUlwT3cwS0pIQmhaR1J5UFhOdlkydGhaR1J5WDJsdUtDUkJVa2RXV3pGZExDQWthV0ZrWkhJcElIeDhJR1JwWlNnaVJYSnliM0k2SUNRaFhHNGlLVHNOQ2lSd2NtOTBiejFuWlhSd2NtOTBiMko1Ym1GdFpTZ25kR053SnlrN0RRcHpiMk5yWlhRb1UwOURTMFZVTENCUVJsOUpUa1ZVTENCVFQwTkxYMU5VVWtWQlRTd2dKSEJ5YjNSdktTQjhmQ0JrYVdVb0lrVnljbTl5T2lBa0lWeHVJaWs3RFFwamIyNXVaV04wS0ZOUFEwdEZWQ3dnSkhCaFpHUnlLU0I4ZkNCa2FXVW9Ja1Z5Y205eU9pQWtJVnh1SWlrN0RRcHZjR1Z1S0ZOVVJFbE9MQ0FpUGlaVFQwTkxSVlFpS1RzTkNtOXdaVzRvVTFSRVQxVlVMQ0FpUGlaVFQwTkxSVlFpS1RzTkNtOXdaVzRvVTFSRVJWSlNMQ0FpUGlaVFQwTkxSVlFpS1RzTkNuTjVjM1JsYlNnbkwySnBiaTl6YUNBdGFTY3BPdzBLWTJ4dmMyVW9VMVJFU1U0cE93MEtZMnh2YzJVb1UxUkVUMVZVS1RzTkNtTnNiM05sS0ZOVVJFVlNVaWs3IjsNCiAgICAkYmluZF9wb3J0X2M9IkkybHVZMngxWkdVZ1BITjBaR2x2TG1nK0RRb2phVzVqYkhWa1pTQThjM1J5YVc1bkxtZytEUW9qYVc1amJIVmtaU0E4ZFc1cGMzUmtMbWcrRFFvamFXNWpiSFZrWlNBOGJtVjBaR0l1YUQ0TkNpTnBibU5zZFdSbElEeHpkR1JzYVdJdWFENE5DbWx1ZENCdFlXbHVLR2x1ZENCaGNtZGpMQ0JqYUdGeUlDb3FZWEpuZGlrZ2V3MEtJQ0FnSUdsdWRDQnpMR01zYVRzTkNpQWdJQ0JqYUdGeUlIQmJNekJkT3cwS0lDQWdJSE4wY25WamRDQnpiMk5yWVdSa2NsOXBiaUJ5T3cwS0lDQWdJR1JoWlcxdmJpZ3hMREFwT3cwS0lDQWdJSE1nUFNCemIyTnJaWFFvUVVaZlNVNUZWQ3hUVDBOTFgxTlVVa1ZCVFN3d0tUc05DaUFnSUNCcFppZ2hjeWtnY21WMGRYSnVJQzB4T3cwS0lDQWdJSEl1YzJsdVgyWmhiV2xzZVNBOUlFRkdYMGxPUlZRN0RRb2dJQ0FnY2k1emFXNWZjRzl5ZENBOUlHaDBiMjV6S0dGMGIya29ZWEpuZGxzeFhTa3BPdzBLSUNBZ0lISXVjMmx1WDJGa1pISXVjMTloWkdSeUlEMGdhSFJ2Ym13b1NVNUJSRVJTWDBGT1dTazdEUW9nSUNBZ1ltbHVaQ2h6TENBb2MzUnlkV04wSUhOdlkydGhaR1J5SUNvcEpuSXNJREI0TVRBcE93MEtJQ0FnSUd4cGMzUmxiaWh6TENBMUtUc05DaUFnSUNCM2FHbHNaU2d4S1NCN0RRb2dJQ0FnSUNBZ0lHTTlZV05qWlhCMEtITXNNQ3d3S1RzTkNpQWdJQ0FnSUNBZ1pIVndNaWhqTERBcE93MEtJQ0FnSUNBZ0lDQmtkWEF5S0dNc01TazdEUW9nSUNBZ0lDQWdJR1IxY0RJb1l5d3lLVHNOQ2lBZ0lDQWdJQ0FnZDNKcGRHVW9ZeXdpVUdGemMzZHZjbVE2SWl3NUtUc05DaUFnSUNBZ0lDQWdjbVZoWkNoakxIQXNjMmw2Wlc5bUtIQXBLVHNOQ2lBZ0lDQWdJQ0FnWm05eUtHazlNRHRwUEhOMGNteGxiaWh3S1R0cEt5c3BEUW9nSUNBZ0lDQWdJQ0FnSUNCcFppZ2dLSEJiYVYwZ1BUMGdKMXh1SnlrZ2ZId2dLSEJiYVYwZ1BUMGdKMXh5SnlrZ0tRMEtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIQmJhVjBnUFNBblhEQW5PdzBLSUNBZ0lDQWdJQ0JwWmlBb2MzUnlZMjF3S0dGeVozWmJNbDBzY0NrZ1BUMGdNQ2tOQ2lBZ0lDQWdJQ0FnSUNBZ0lITjVjM1JsYlNnaUwySnBiaTl6YUNBdGFTSXBPdzBLSUNBZ0lDQWdJQ0JqYkc5elpTaGpLVHNOQ2lBZ0lDQjlEUXA5IjsNCiAgICAkYmluZF9wb3J0X3A9Ikl5RXZkWE55TDJKcGJpOXdaWEpzRFFva1UwaEZURXc5SWk5aWFXNHZjMmdnTFdraU93MEthV1lnS0VCQlVrZFdJRHdnTVNrZ2V5QmxlR2wwS0RFcE95QjlEUXAxYzJVZ1UyOWphMlYwT3cwS2MyOWphMlYwS0ZNc0psQkdYMGxPUlZRc0psTlBRMHRmVTFSU1JVRk5MR2RsZEhCeWIzUnZZbmx1WVcxbEtDZDBZM0FuS1NrZ2ZId2daR2xsSUNKRFlXNTBJR055WldGMFpTQnpiMk5yWlhSY2JpSTdEUXB6WlhSemIyTnJiM0IwS0ZNc1UwOU1YMU5QUTB0RlZDeFRUMTlTUlZWVFJVRkVSRklzTVNrN0RRcGlhVzVrS0ZNc2MyOWphMkZrWkhKZmFXNG9KRUZTUjFaYk1GMHNTVTVCUkVSU1gwRk9XU2twSUh4OElHUnBaU0FpUTJGdWRDQnZjR1Z1SUhCdmNuUmNiaUk3RFFwc2FYTjBaVzRvVXl3ektTQjhmQ0JrYVdVZ0lrTmhiblFnYkdsemRHVnVJSEJ2Y25SY2JpSTdEUXAzYUdsc1pTZ3hLU0I3RFFvSllXTmpaWEIwS0VOUFRrNHNVeWs3RFFvSmFXWW9JU2drY0dsa1BXWnZjbXNwS1NCN0RRb0pDV1JwWlNBaVEyRnVibTkwSUdadmNtc2lJR2xtSUNnaFpHVm1hVzVsWkNBa2NHbGtLVHNOQ2drSmIzQmxiaUJUVkVSSlRpd2lQQ1pEVDA1T0lqc05DZ2tKYjNCbGJpQlRWRVJQVlZRc0lqNG1RMDlPVGlJN0RRb0pDVzl3Wlc0Z1UxUkVSVkpTTENJK0prTlBUazRpT3cwS0NRbGxlR1ZqSUNSVFNFVk1UQ0I4ZkNCa2FXVWdjSEpwYm5RZ1EwOU9UaUFpUTJGdWRDQmxlR1ZqZFhSbElDUlRTRVZNVEZ4dUlqc05DZ2tKWTJ4dmMyVWdRMDlPVGpzTkNna0paWGhwZENBd093MEtDWDBOQ24wPSI7DQogICAgDQogICAgZWNobyAnPGgxPk5ldHdvcmsgdG9vbHM8L2gxPjxkaXYgY2xhc3M9Y29udGVudD4NCiAgICA8Zm9ybSBuYW1lPVwnbmZwXCcgb25TdWJtaXQ9ImcobnVsbCxudWxsLHRoaXMudXNpbmcudmFsdWUsdGhpcy5wb3J0LnZhbHVlLHRoaXMucGFzcy52YWx1ZSk7cmV0dXJuIGZhbHNlOyI+DQogICAgPGJyIC8+PHNwYW4+QmluZCBwb3J0IHRvIC9iaW4vc2g8L3NwYW4+PGJyLz4NCiAgICBQb3J0OiA8aW5wdXQgdHlwZT1cJ3RleHRcJyBuYW1lPVwncG9ydFwnIHZhbHVlPVwnNDQ0XCc+IFBhc3N3b3JkOiA8aW5wdXQgdHlwZT1cJ3RleHRcJyBuYW1lPVwncGFzc1wnIHZhbHVlPVwnQkhQXCc+IFVzaW5nOiA8c2VsZWN0IG5hbWU9InVzaW5nIj48b3B0aW9uIHZhbHVlPVwnYnBjXCc+Qzwvb3B0aW9uPjxvcHRpb24gdmFsdWU9XCdicHBcJz5QZXJsPC9vcHRpb24+PC9zZWxlY3Q+IDxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0iPj4iPg0KICAgIDwvZm9ybT4NCiAgICA8Zm9ybSBuYW1lPVwnbmZwXCcgb25TdWJtaXQ9ImcobnVsbCxudWxsLHRoaXMudXNpbmcudmFsdWUsdGhpcy5zZXJ2ZXIudmFsdWUsdGhpcy5wb3J0LnZhbHVlKTtyZXR1cm4gZmFsc2U7Ij4NCiAgICA8YnIgLz48YnIgLz48c3Bhbj5CYWNrLWNvbm5lY3QgdG88L3NwYW4+PGJyLz4NCiAgICBTZXJ2ZXI6IDxpbnB1dCB0eXBlPVwndGV4dFwnIG5hbWU9XCdzZXJ2ZXJcJyB2YWx1ZT0iJy4kX1NFUlZFUlsnUkVNT1RFX0FERFInXS4nIj4gUG9ydDogPGlucHV0IHR5cGU9XCd0ZXh0XCcgbmFtZT1cJ3BvcnRcJyB2YWx1ZT1cJzQ0NFwnPiBVc2luZzogPHNlbGVjdCBuYW1lPSJ1c2luZyI+PG9wdGlvbiB2YWx1ZT1cJ2JjY1wnPkM8L29wdGlvbj48b3B0aW9uIHZhbHVlPVwnYmNwXCc+UGVybDwvb3B0aW9uPjwvc2VsZWN0PiA8aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9Ij4+Ij4NCiAgICA8L2Zvcm0+PGJyPic7ICAgIA0KICAgIGlmKGlzc2V0KCRfUE9TVFsncDEnXSkpIHsNCiAgICAgICAgZnVuY3Rpb24gY2YoJGYsJHQpIHsNCiAgICAgICAgICAgICR3PUBmb3BlbigkZiwidyIpIG9yIEBmdW5jdGlvbl9leGlzdHMoJ2ZpbGVfcHV0X2NvbnRlbnRzJyk7DQogICAgICAgICAgICBpZigkdykgICAgew0KICAgICAgICAgICAgICAgIEBmd3JpdGUoJHcsQGJhc2U2NF9kZWNvZGUoJHQpKSBvciBAZnB1dHMoJHcsQGJhc2U2NF9kZWNvZGUoJHQpKSBvciBAZmlsZV9wdXRfY29udGVudHMoJGYsQGJhc2U2NF9kZWNvZGUoJHQpKTsNCiAgICAgICAgICAgICAgICBAZmNsb3NlKCR3KTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICBpZigkX1BPU1RbJ3AxJ10gPT0gJ2JwYycpIHsNCiAgICAgICAgICAgIGNmKCIvdG1wL2JwLmMiLCRiaW5kX3BvcnRfYyk7DQogICAgICAgICAgICAkb3V0ID0gZXgoImdjYyAtbyAvdG1wL2JwIC90bXAvYnAuYyIpOw0KICAgICAgICAgICAgQHVubGluaygiL3RtcC9icC5jIik7DQogICAgICAgICAgICAkb3V0IC49IGV4KCIvdG1wL2JwICIuJF9QT1NUWydwMiddLiIgIi4kX1BPU1RbJ3AzJ10uIiAmIik7DQogICAgICAgICAgICBlY2hvICI8cHJlIGNsYXNzPW1sMT4kb3V0XG4iLmV4KCJwcyBhdXggfCBncmVwIGJwIikuIjwvcHJlPiI7DQogICAgICAgIH0NCiAgICAgICAgaWYoJF9QT1NUWydwMSddID09ICdicHAnKSB7DQogICAgICAgICAgICBjZigiL3RtcC9icC5wbCIsJGJpbmRfcG9ydF9wKTsNCiAgICAgICAgICAgICRvdXQgPSBleCh3aGljaCgicGVybCIpLiIgL3RtcC9icC5wbCAiLiRfUE9TVFsncDInXS4iICYiKTsNCiAgICAgICAgICAgIGVjaG8gIjxwcmUgY2xhc3M9bWwxPiRvdXRcbiIuZXgoInBzIGF1eCB8IGdyZXAgYnAucGwiKS4iPC9wcmU+IjsNCiAgICAgICAgfQ0KICAgICAgICBpZigkX1BPU1RbJ3AxJ10gPT0gJ2JjYycpIHsNCiAgICAgICAgICAgIGNmKCIvdG1wL2JjLmMiLCRiYWNrX2Nvbm5lY3RfYyk7DQogICAgICAgICAgICAkb3V0ID0gZXgoImdjYyAtbyAvdG1wL2JjIC90bXAvYmMuYyIpOw0KICAgICAgICAgICAgQHVubGluaygiL3RtcC9iYy5jIik7DQogICAgICAgICAgICAkb3V0IC49IGV4KCIvdG1wL2JjICIuJF9QT1NUWydwMiddLiIgIi4kX1BPU1RbJ3AzJ10uIiAmIik7DQogICAgICAgICAgICBlY2hvICI8cHJlIGNsYXNzPW1sMT4kb3V0XG4iLmV4KCJwcyBhdXggfCBncmVwIGJjIikuIjwvcHJlPiI7DQogICAgICAgIH0NCiAgICAgICAgaWYoJF9QT1NUWydwMSddID09ICdiY3AnKSB7DQogICAgICAgICAgICBjZigiL3RtcC9iYy5wbCIsJGJhY2tfY29ubmVjdF9wKTsNCiAgICAgICAgICAgICRvdXQgPSBleCh3aGljaCgicGVybCIpLiIgL3RtcC9iYy5wbCAiLiRfUE9TVFsncDInXS4iICIuJF9QT1NUWydwMyddLiIgJiIpOw0KICAgICAgICAgICAgZWNobyAiPHByZSBjbGFzcz1tbDE+JG91dFxuIi5leCgicHMgYXV4IHwgZ3JlcCBiYy5wbCIpLiI8L3ByZT4iOw0KICAgICAgICB9DQogICAgfQ0KICAgIGVjaG8gJzwvZGl2Pic7DQogICAgcHJpbnRGb290ZXIoKTsNCn0NCg0KZnVuY3Rpb24gYWN0aW9uUG9ydFNjYW5uZXIoKSB7DQogICAgcHJpbnRIZWFkZXIoKTsNCiAgICBlY2hvICc8aDE+UG9ydCBTY2FubmVyPC9oMT4nOw0KICAgIGVjaG8gJzxkaXYgY2xhc3M9ImNvbnRlbnQiPic7DQogICAgZWNobyAnPGZvcm0gYWN0aW9uPSIiIG1ldGhvZD0icG9zdCI+JzsNCiAgICANCiAgICBpZihpc3NldCgkX1BPU1RbJ2hvc3QnXSkgJiYgaXNfbnVtZXJpYygkX1BPU1RbJ2VuZCddKSAmJiBpc19udW1lcmljKCRfUE9TVFsnc3RhcnQnXSkpew0KICAgICAgICAkc3RhcnQgPSBzdHJpcF90YWdzKCRfUE9TVFsnc3RhcnQnXSk7DQogICAgICAgICRlbmQgPSBzdHJpcF90YWdzKCRfUE9TVFsnZW5kJ10pOw0KICAgICAgICAkaG9zdCA9IHN0cmlwX3RhZ3MoJF9QT1NUWydob3N0J10pOw0KICAgICAgICBmb3IoJGkgPSAkc3RhcnQ7ICRpPD0kZW5kOyAkaSsrKXsNCiAgICAgICAgICAgICRmcCA9IEBmc29ja29wZW4oJGhvc3QsICRpLCAkZXJybm8sICRlcnJzdHIsIDMpOw0KICAgICAgICAgICAgaWYoJGZwKXsNCiAgICAgICAgICAgICAgICBlY2hvICdQb3J0ICcuJGkuJyBpcyA8Zm9udCBjb2xvcj1hcXVhPm9wZW48L2ZvbnQ+PGJyPic7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBmbHVzaCgpOw0KICAgICAgICB9DQogICAgfSBlbHNlIHsNCiAgICAgICAgZWNobyAnPGJyIC8+PGJyIC8+PGNlbnRlcj48aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJhIiB2YWx1ZT0iUG9ydFNjYW5uZXIiPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9cDE+PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0icDIiPg0KICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJjIiB2YWx1ZT0iJy5odG1sc3BlY2lhbGNoYXJzKCRHTE9CQUxTWydjd2QnXSkuJyI+DQogICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImNoYXJzZXQiIHZhbHVlPSInLihpc3NldCgkX1BPU1RbJ2NoYXJzZXQnXSk/JF9QT1NUWydjaGFyc2V0J106JycpLiciPg0KICAgICAgICAgICAgICBIb3N0OiA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iaG9zdCIgdmFsdWU9ImxvY2FsaG9zdCIvPjxiciAvPjxiciAvPg0KICAgICAgICAgICAgICBQb3J0IHN0YXJ0OiA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ic3RhcnQiIHZhbHVlPSIwIi8+PGJyIC8+PGJyIC8+DQogICAgICAgICAgICAgIFBvcnQgZW5kOjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJlbmQiIHZhbHVlPSI1MDAwIi8+PGJyIC8+PGJyIC8+DQogICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSJTY2FuIFBvcnRzIiAvPg0KICAgICAgICAgICAgICA8L2Zvcm0+PC9jZW50ZXI+PGJyIC8+PGJyIC8+JzsNCiAgICB9DQogICAgZWNobyAnPC9kaXY+JzsNCiAgICBwcmludEZvb3RlcigpOyAgICANCn0NCg0KZnVuY3Rpb24gYWN0aW9uUmVhZGFibGUoKSB7DQogICAgcHJpbnRIZWFkZXIoKTsNCiAgICBlY2hvICc8aDE+UmVhZGFibGUgRGlyczwvaDE+JzsNCiAgICBlY2hvICc8ZGl2IGNsYXNzPSJjb250ZW50Ij4nOw0KICAgICRzbSA9IGluaV9nZXQoJ3NhZmVfbW9kZScpOw0KICAgIGlmKCRzbSkgew0KICAgICAgICBlY2hvICc8YnIgLz48Yj5FcnJvcjogc2FmZV9tb2RlID0gb248L2I+PGJyIC8+PGJyIC8+JzsNCiAgICB9IGVsc2Ugew0KICAgICAgICBAJHBhc3N3ZCA9IGZpbGUoJy9ldGMvcGFzc3dkJywncicpOw0KICAgICAgICBpZiAoISRwYXNzd2QpIHsgDQogICAgICAgICAgICBlY2hvICc8YnIgLz48Yj5bLV0gRXJyb3IgOiBjb3VkbmB0IHJlYWQgL2V0Yy9wYXNzd2Q8L2I+PGJyIC8+PGJyIC8+JzsgDQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAkcHViID0gYXJyYXkoKTsNCiAgICAgICAgICAgICR1c2VycyA9IGFycmF5KCk7DQogICAgICAgICAgICAkY29uZiA9IGFycmF5KCk7DQogICAgICAgICAgICAkaSA9IDA7DQogICAgICAgICAgICBmb3JlYWNoKCRwYXNzd2QgYXMgJHApIHsNCiAgICAgICAgICAgICAgICAkciA9IGV4cGxvZGUoJzonLCRwKTsNCiAgICAgICAgICAgICAgICAkZGlyeiA9ICRyWzVdLicvcHVibGljX2h0bWwvJzsNCiAgICAgICAgICAgICAgICBpZihzdHJwb3MoJHJbNV0sJ2hvbWUnKSkgew0KICAgICAgICAgICAgICAgICAgICBhcnJheV9wdXNoKCR1c2VycywkclswXSk7DQogICAgICAgICAgICAgICAgICAgIGlmIChpc19yZWFkYWJsZSgkZGlyeikpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5X3B1c2goJHB1YiwkZGlyeik7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgICAgICBlY2hvICc8YnI+PGJyPic7DQogICAgICAgICAgICBlY2hvICJbK10gRm91bmRlZCAiLnNpemVvZigkdXNlcnMpLiIgZW50cnlzIGluIC9ldGMvcGFzc3dkXG4iLiI8YnIgLz4iOw0KICAgICAgICAgICAgZWNobyAiWytdIEZvdW5kZWQgIi5zaXplb2YoJHB1YikuIiByZWFkYWJsZSBwdWJsaWNfaHRtbCBkaXJlY3Rvcmllc1xuIi4iPGJyIC8+PGJyIC8+PGJyIC8+IjsNCiAgICAgICAgICAgIGZvcmVhY2ggKCRwdWIgYXMgJHVzZXIpIHsNCiAgICAgICAgICAgICAgICBlY2hvICR1c2VyLiI8YnI+IjsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGVjaG8gIjxiciAvPjxiciAvPjxiciAvPlsrXSBDb21wbGV0ZS4uLlxuIi4iPGJyIC8+IjsNCiAgICAgICAgfQ0KICAgIH0NCiAgICBlY2hvICc8L2Rpdj4nOw0KICAgIHByaW50Rm9vdGVyKCk7ICAgIA0KfQ0KZnVuY3Rpb24gYWN0aW9uQ3BhbmVsKCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludEhlYWRlcigpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICc8aDE+Y1BhbmVsIENyYWNrZXI8L2gxPic7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gJzxkaXYgY2xhc3M9ImNvbnRlbnQiPic7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gJzx0YWJsZSBhbGlnbj1jZW50ZXIgY2xhc3M9Im1haW4iIGJvcmRlcj0iMCI+PHRyIGJnY29sb3I9IiM1ZTVlNWUiPjx0ZD5Vc2VyczwvdGQ+PHRkPjwvdGQ+PHRkPlNlbGVjdGVkIFVzZXJzPC90ZD48dGQ+UGFzc3dvcmQ8L3RkPjwvdHI+JzsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAnPHRyPjx0ZD48dGV4dGFyZWEgcm93cz0iMjAiIG5hbWU9IlMxIiBjb2xzPSIzMyI+PC90ZXh0YXJlYT48L3RkPic7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gJzx0ZD48aW5wdXQgdHlwZT0iYnV0dG9uIiBuYW1lPSJjcGFkMSIgdmFsdWU9Ij4iIGNsYXNzPSJjcGIiLz48YnIgLz48YnIgLz48aW5wdXQgdHlwZT0iYnV0dG9uIiBuYW1lPSJjcGFkYWxsIiB2YWx1ZT0iPj4iIGNsYXNzPSJjcGIiLz48YnIgLz48YnIgLz4nOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICc8aW5wdXQgdHlwZT0iYnV0dG9uIiBuYW1lPSJjcHJtMSIgdmFsdWU9IjwiIGNsYXNzPSJjcGIiLz48YnIgLz48YnIgLz48aW5wdXQgdHlwZT0iYnV0dG9uIiBuYW1lPSJjcHJtYWxsIiB2YWx1ZT0iPDwiIGNsYXNzPSJjcGIiLz48L3RkPic7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gJzx0ZD48dGV4dGFyZWEgcm93cz0iMjAiIG5hbWU9InVzZXJzIiBjb2xzPSIzMyI+PC90ZXh0YXJlYT48L3RkPic7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gJzx0ZD48dGV4dGFyZWEgcm93cz0iMjAiIG5hbWU9InBhc3N3b3JkcyIgY29scz0iMzMiPjwvdGV4dGFyZWE+PC90ZD4nOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICc8L3RyPic7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gJzx0cj48dGQ+PGlucHV0IHN0eWxlPSJ3aWR0aDoyNTJweDsiIHR5cGU9ImJ1dHRvbiIgb25jbGljaz0iZyhcJ0NwYW5lbFwnLG51bGwsXCdncmJldGNwd1wnKSIgdmFsdWU9IkdyYWIgdXNlcm5hbWVzIGZyb20gL2V0Yy9wYXNzd2QiLz48YnIgLz48aW5wdXQgc3R5bGU9Im1hcmdpbi10b3A6NXB4O3dpZHRoOjI1MnB4OyIgdHlwZT0iYnV0dG9uIiBvbmNsaWNrPSJnKFwnQ3BhbmVsXCcsbnVsbCxcJ2dyYmhvbWVcJykiIHZhbHVlPSJHcmFiIHVzZXJuYW1lcyBmcm9tIC9ob21lIi8+PC90ZD48dGQ+PC90ZD4nOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICc8dGQgY29sc3Bhbj0iMiI+PHNwYW4+Q3JhY2sgb3B0aW9uczombmJzcDsmbmJzcDsmbmJzcDs8L3NwYW4+PGlucHV0IG5hbWU9ImNyYWNrdHlwZSIgdmFsdWU9ImNwYW5lbCIgY2hlY2tlZCB0eXBlPSJyYWRpbyI+PGI+Q3BhbmVsKDIwODIpPC9iPiZuYnNwOyZuYnNwOzxpbnB1dCBuYW1lPSJjcmFja3R5cGUiIHZhbHVlPSJ3aG0iIHR5cGU9InJhZGlvIj48Yj5XSE0oMjA4Nyk8L2I+Jm5ic3A7Jm5ic3A7PGlucHV0IG5hbWU9ImNyYWNrdHlwZSIgdmFsdWU9ImZ0cCIgdHlwZT0icmFkaW8iPjxiPkZ0cCgyMSk8L2I+PGJyIC8+DQogICAgICAgICAgPGRpdiBzdHlsZT0ibWFyZ2luLXRvcDo1cHg7Ij48c3Bhbj5UaW1lb3V0IGRlbGF5OiZuYnNwOyZuYnNwOzwvc3Bhbj48aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iY29ubmVjdF90aW1lb3V0IiBzaXplPSI0IiB2YWx1ZT0iIi8+Jm5ic3A7Jm5ic3A7DQogICAgICAgICAgPGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSJicnV0ZWZvcmNlIiB2YWx1ZT0idHJ1ZSIvPiZuYnNwOzxzcGFuPkJydXRlZm9yY2U8L3NwYW4+Jm5ic3A7DQogICAgICAgICAgICAgICAgPHNlbGVjdCBuYW1lPSJjaGFyc2V0Ij4NCiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iYWxsIj5BbGwgTGV0dGVycyArIE51bWJlcnM8L29wdGlvbj4NCiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0ibnVtZXJpYyI+TnVtYmVyczwvb3B0aW9uPg0KICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJsZXR0ZXJzIj5MZXR0ZXJzPC9vcHRpb24+DQogICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9InN5bWJvbHMiPlN5bWJvbHM8L29wdGlvbj4NCiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0ibG93ZXJjYXNlIj5Mb3dlciBMZXR0ZXJzPC9vcHRpb24+DQogICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9InVwcGVyY2FzZSI+SGlnaGVyIExldHRlcnM8L29wdGlvbj4NCiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0ibG93ZXJudW1lcmljIj5Mb3dlciBMZXR0ZXJzICsgTnVtYmVyczwvb3B0aW9uPg0KICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJ1cHBlcm51bWVyaWMiPlVwcGVyIExldHRlcnMgKyBOdW1iZXJzPC9vcHRpb24+DQogICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9Imxvd2Vyc3ltYm9scyI+TG93ZXIgTGV0dGVycyArIFN5bWJvbHM8L29wdGlvbj4NCiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0idXBwZXJzeW1ib2xzIj5VcHBlciBMZXR0ZXJzICsgU3ltYm9sczwvb3B0aW9uPg0KICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJsZXR0ZXJzc3ltYm9scyI+QWxsIExldHRlcnMgKyBTeW1ib2xzPC9vcHRpb24+DQogICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9Im51bWJlcnNzeW1ib2xzIj5OdW1iZXJzICsgU3ltYm9sczwvb3B0aW9uPg0KICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJsb3dlcm51bWVyaWNzeW1ib2xzIj5Mb3dlciBMZXR0ZXJzICsgTnVtYmVycyArIFN5bWJvbHM8L29wdGlvbj4NCiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0idXBwZXJudW1lcmljc3ltYm9scyI+VXBwZXIgTGV0dGVycyArIE51bWJlcnMgKyBTeW1ib2xzPC9vcHRpb24+DQogICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9ImxldHRlcnNudW1lcmljc3ltYm9scyI+QWxsIExldHRlcnMgKyBOdW1iZXJzICsgU3ltYm9sczwvb3B0aW9uPg0KICAgICAgICAgICAgICAgIDwvc2VsZWN0PjwvZGl2Pg0KICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9Im1hcmdpbi10b3A6NXB4OyI+PHNwYW4+TWluIEJydXRlZm9yY2UgTGVuZ3RoOiZuYnNwOyZuYnNwOzwvc3Bhbj48aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ibWluX2xlbmd0aCIgc2l6ZT0iNSIgdmFsdWU9IiIvPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzxzcGFuPk1heCBCcnV0ZWZvcmNlIExlbmd0aDombmJzcDsmbmJzcDs8L3NwYW4+PGlucHV0IHR5cGU9InRleHQiIG5hbWU9Im1heF9sZW5ndGgiIHNpemU9IjUiIHZhbHVlPSIiLz48L2Rpdj4NCiAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJtYXJnaW4tdG9wOjVweDt0ZXh0LWFsaWduOmNlbnRlciI+PGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9IkNyYWNrIE5vdyIgbmFtZT0ic3VibWl0IiBzdHlsZT0iZm9udC13ZWlnaHQ6IGJvbGQ7Ii8+PC9kaXY+DQogICAgICAgICAgICAgICAgPC90ZD48L3RyPic7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gJzwvdGFibGU+JzsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAnPC9kaXY+JzsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRGb290ZXIoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CQkJCQkJCQkJCQkJCQkJCQ0KIGZ1bmN0aW9uIGFjdGlvbkRvbWFpbigpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRIZWFkZXIoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAnPGgxPmxvY2FsIGRvbWFpbiB2aWV3ZXI8L2gxPjxkaXYgY2xhc3M9Y29udGVudD4nOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZmlsZSA9IEBpbXBsb2RlKEBmaWxlKCIvZXRjL25hbWVkLmNvbmYiKSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghJGZpbGUpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpZSgiIyBjYW4ndCBSZWFEIC0+IFsgL2V0Yy9uYW1lZC5jb25mIF0iKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVnX21hdGNoX2FsbCgiI25hbWVkLyguKj8pLmRiIyIsICRmaWxlLCAkcik7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRkb21haW5zID0gYXJyYXlfdW5pcXVlKCRyWzFdKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9jaGVjaygpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2lmKGlzc2V0KCRfR0VUWydTaG93QWxsJ10pKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICI8dGFibGUgYWxpZ249Y2VudGVyIGJvcmRlcj0xIHdpZHRoPTU5JSBjZWxscGFkZGluZz01Pg0KPHRyPjx0ZCBjb2xzcGFuPTI+WytdIFRoZXJlIGFyZSA6IFsgPGI+IiAuIGNvdW50KCRkb21haW5zKSAuICI8L2I+IF0gRG9tYWluPC90ZD48L3RyPg0KPHRyPjx0ZD5Eb21haW48L3RkPjx0ZD5Vc2VyPC90ZD48L3RyPiI7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkZG9tYWlucyBhcyAkZG9tYWluKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHVzZXIgPSBwb3NpeF9nZXRwd3VpZChAZmlsZW93bmVyKCIvZXRjL3ZhbGlhc2VzLyIgLiAkZG9tYWluKSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiPHRyPjx0ZD4kZG9tYWluPC90ZD48dGQ+IiAuICR1c2VyWyduYW1lJ10gLiAiPC90ZD48L3RyPiI7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICI8L3RhYmxlPiI7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAnPC9kaXY+JzsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRGb290ZXIoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CQkJCQkJCQkJCQkJCQkJCQ0KZnVuY3Rpb24gYWN0aW9uSW5mZWN0KCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludEhlYWRlcigpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICc8aDE+SW5mZWN0PC9oMT48ZGl2IGNsYXNzPWNvbnRlbnQ+JzsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRfUE9TVFsncDEnXSA9PSAnaW5mZWN0Jykgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRhcmdldCA9ICRfU0VSVkVSWydET0NVTUVOVF9ST09UJ107DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBMaXN0RmlsZXMoJGRpcikgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkZGggPSBvcGVuZGlyKCRkaXIpKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRmaWxlcyA9IEFycmF5KCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpbm5lcl9maWxlcyA9IEFycmF5KCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICgkZmlsZSA9IHJlYWRkaXIoJGRoKSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRmaWxlICE9ICIuIiAmJiAkZmlsZSAhPSAiLi4iKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzX2RpcigkZGlyIC4gIi8iIC4gJGZpbGUpKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpbm5lcl9maWxlcyA9IExpc3RGaWxlcygkZGlyIC4gIi8iIC4gJGZpbGUpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNfYXJyYXkoJGlubmVyX2ZpbGVzKSkgJGZpbGVzID0gYXJyYXlfbWVyZ2UoJGZpbGVzLCAkaW5uZXJfZmlsZXMpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5X3B1c2goJGZpbGVzLCAkZGlyIC4gIi8iIC4gJGZpbGUpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9zZWRpcigkZGgpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJGZpbGVzOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKExpc3RGaWxlcygkdGFyZ2V0KSBhcyAka2V5ID0+ICRmaWxlKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG5GaWxlID0gc3Vic3RyKCRmaWxlLCAtNCwgNCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRuRmlsZSA9PSAiLnBocCIpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgkZmlsZSA8PiAkX1NFUlZFUlsnRE9DVU1FTlRfUk9PVCddIC4gJF9TRVJWRVJbJ1BIUF9TRUxGJ10pICYmIChpc193cml0ZWFibGUoJGZpbGUpKSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiJGZpbGU8YnI+IjsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpKys7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICI8Zm9udCBjb2xvcj1yZWQgc2l6ZT0xND4kaTwvZm9udD4iOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiPGZvcm0gbWV0aG9kPXBvc3Q+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPUluZmVjdCBuYW1lPWluZmV0PjwvZm9ybT4iOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAnUmVhbGx5IHdhbnQgdG8gaW5mZWN0IHRoZSBzZXJ2ZXI/Jm5ic3A7PGEgaHJlZj0jIG9uY2xpY2s9ImcobnVsbCxudWxsLFwnaW5mZWN0XCcpIj5ZZXM8L2E+PC9kaXY+JzsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50Rm9vdGVyKCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KZnVuY3Rpb24gYWN0aW9uQ2dpU2hlbGwoKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50SGVhZGVyKCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gJzxoMT5DZ2l0ZWxuZXQ8L2gxPjxkaXYgY2xhc3M9Y29udGVudD4nOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBta2RpcignY2dpdGVsbmV0MScsIDA3NTUpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGRpcignY2dpdGVsbmV0MScpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAka29rZG9zeWEgPSAiLmh0YWNjZXNzIjsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGRvc3lhX2FkaSA9ICIka29rZG9zeWEiOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZG9zeWEgPSBmb3BlbigkZG9zeWFfYWRpLCAndycpIG9yIGRpZSgiRG9zeWEgYSYjMjMxOyYjMzA1O2xhbWFkJiMzMDU7ISIpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbWV0aW4gPSAiT3B0aW9ucyBGb2xsb3dTeW1MaW5rcyBNdWx0aVZpZXdzIEluZGV4ZXMgRXhlY0NHSQ0KDQpBZGRUeXBlIGFwcGxpY2F0aW9uL3gtaHR0cGQtY2dpIC5jaW4NCg0KQWRkSGFuZGxlciBjZ2ktc2NyaXB0IC5jaW4NCkFkZEhhbmRsZXIgY2dpLXNjcmlwdCAuY2luIjsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZndyaXRlKCRkb3N5YSwgJG1ldGluKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmNsb3NlKCRkb3N5YSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRjZ2lzaGVsbGl6b2NpbiA9ICdJeUV2ZFhOeUwySnBiaTl3WlhKc0lDMUpMM1Z6Y2k5c2IyTmhiQzlpWVc1a2JXRnBiZzBLSXkwdExTMHRMUzB0TFMwdExTMHRMUzB0DQpMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0DQpMUzB0TFEwS0l5QThZaUJ6ZEhsc1pUMGlZMjlzYjNJNllteGhZMnM3WW1GamEyZHliM1Z1WkMxamIyeHZjam9qWm1abVpqWTJJajV3DQpjbWwyT0NCaloya2djMmhsYkd3OEwySStJQ01nYzJWeWRtVnlEUW9qTFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0DQpMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdERRb05DaU10DQpMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0DQpMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzBOQ2lNZ1EyOXVabWxuZFhKaGRHbHZiam9nV1c5MUlHNWxaV1FnZEc4Z1kyaGhibWRsDQpJRzl1YkhrZ0pGQmhjM04zYjNKa0lHRnVaQ0FrVjJsdVRsUXVJRlJvWlNCdmRHaGxjZzBLSXlCMllXeDFaWE1nYzJodmRXeGtJSGR2DQpjbXNnWm1sdVpTQm1iM0lnYlc5emRDQnplWE4wWlcxekxnMEtJeTB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0DQpMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFEwS0pGQmhjM04zDQpiM0prSUQwZ0luQnlhWFk0SWpzSkNTTWdRMmhoYm1kbElIUm9hWE11SUZsdmRTQjNhV3hzSUc1bFpXUWdkRzhnWlc1MFpYSWdkR2hwDQpjdzBLQ1FrSkNTTWdkRzhnYkc5bmFXNHVEUW9OQ2lSWGFXNU9WQ0E5SURBN0NRa0pJeUJaYjNVZ2JtVmxaQ0IwYnlCamFHRnVaMlVnDQpkR2hsSUhaaGJIVmxJRzltSUhSb2FYTWdkRzhnTVNCcFpnMEtDUWtKQ1NNZ2VXOTFKM0psSUhKMWJtNXBibWNnZEdocGN5QnpZM0pwDQpjSFFnYjI0Z1lTQlhhVzVrYjNkeklFNVVEUW9KQ1FrSkl5QnRZV05vYVc1bExpQkpaaUI1YjNVbmNtVWdjblZ1Ym1sdVp5QnBkQ0J2DQpiaUJWYm1sNExDQjViM1VOQ2drSkNRa2pJR05oYmlCc1pXRjJaU0IwYUdVZ2RtRnNkV1VnWVhNZ2FYUWdhWE11RFFvTkNpUk9WRU50DQpaRk5sY0NBOUlDSW1JanNKQ1NNZ1ZHaHBjeUJqYUdGeVlXTjBaWElnYVhNZ2RYTmxaQ0IwYnlCelpYQmxjbUYwWlNBeUlHTnZiVzFoDQpibVJ6RFFvSkNRa0pJeUJwYmlCaElHTnZiVzFoYm1RZ2JHbHVaU0J2YmlCWGFXNWtiM2R6SUU1VUxnMEtEUW9rVlc1cGVFTnRaRk5sDQpjQ0E5SUNJN0lqc0pDU01nVkdocGN5QmphR0Z5WVdOMFpYSWdhWE1nZFhObFpDQjBieUJ6WlhCbGNtRjBaU0F5SUdOdmJXMWhibVJ6DQpEUW9KQ1FrSkl5QnBiaUJoSUdOdmJXMWhibVFnYkdsdVpTQnZiaUJWYm1sNExnMEtEUW9rUTI5dGJXRnVaRlJwYldWdmRYUkVkWEpoDQpkR2x2YmlBOUlERXdPd2tqSUZScGJXVWdhVzRnYzJWamIyNWtjeUJoWm5SbGNpQmpiMjF0WVc1a2N5QjNhV3hzSUdKbElHdHBiR3hsDQpaQTBLQ1FrSkNTTWdSRzl1SjNRZ2MyVjBJSFJvYVhNZ2RHOGdZU0IyWlhKNUlHeGhjbWRsSUhaaGJIVmxMaUJVYUdseklHbHpEUW9KDQpDUWtKSXlCMWMyVm1kV3dnWm05eUlHTnZiVzFoYm1SeklIUm9ZWFFnYldGNUlHaGhibWNnYjNJZ2RHaGhkQTBLQ1FrSkNTTWdkR0ZyDQpaU0IyWlhKNUlHeHZibWNnZEc4Z1pYaGxZM1YwWlN3Z2JHbHJaU0FpWm1sdVpDQXZJaTROQ2drSkNRa2pJRlJvYVhNZ2FYTWdkbUZzDQphV1FnYjI1c2VTQnZiaUJWYm1sNElITmxjblpsY25NdUlFbDBJR2x6RFFvSkNRa0pJeUJwWjI1dmNtVmtJRzl1SUU1VUlGTmxjblpsDQpjbk11RFFvTkNpUlRhRzkzUkhsdVlXMXBZMDkxZEhCMWRDQTlJREU3Q1FraklFbG1JSFJvYVhNZ2FYTWdNU3dnZEdobGJpQmtZWFJoDQpJR2x6SUhObGJuUWdkRzhnZEdobERRb0pDUWtKSXlCaWNtOTNjMlZ5SUdGeklITnZiMjRnWVhNZ2FYUWdhWE1nYjNWMGNIVjBMQ0J2DQpkR2hsY25kcGMyVU5DZ2tKQ1FraklHbDBJR2x6SUdKMVptWmxjbVZrSUdGdVpDQnpaVzVrSUhkb1pXNGdkR2hsSUdOdmJXMWhibVFODQpDZ2tKQ1FraklHTnZiWEJzWlhSbGN5NGdWR2hwY3lCcGN5QjFjMlZtZFd3Z1ptOXlJR052YlcxaGJtUnpJR3hwYTJVTkNna0pDUWtqDQpJSEJwYm1jc0lITnZJSFJvWVhRZ2VXOTFJR05oYmlCelpXVWdkR2hsSUc5MWRIQjFkQ0JoY3lCcGRBMEtDUWtKQ1NNZ2FYTWdZbVZwDQpibWNnWjJWdVpYSmhkR1ZrTGcwS0RRb2pJRVJQVGlkVUlFTklRVTVIUlNCQlRsbFVTRWxPUnlCQ1JVeFBWeUJVU0VsVElFeEpUa1VnDQpWVTVNUlZOVElGbFBWU0JMVGs5WElGZElRVlFnV1U5VkoxSkZJRVJQU1U1SElDRWhEUW9OQ2lSRGJXUlRaWEFnUFNBb0pGZHBiazVVDQpJRDhnSkU1VVEyMWtVMlZ3SURvZ0pGVnVhWGhEYldSVFpYQXBPdzBLSkVOdFpGQjNaQ0E5SUNna1YybHVUbFFnUHlBaVkyUWlJRG9nDQpJbkIzWkNJcE93MEtKRkJoZEdoVFpYQWdQU0FvSkZkcGJrNVVJRDhnSWx4Y0lpQTZJQ0l2SWlrN0RRb2tVbVZrYVhKbFkzUnZjaUE5DQpJQ2drVjJsdVRsUWdQeUFpSURJK0pqRWdNVDRtTWlJZ09pQWlJREUrSmpFZ01qNG1NU0lwT3cwS0RRb2pMUzB0TFMwdExTMHRMUzB0DQpMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0DQpMUzB0TFMwdExTMHREUW9qSUZKbFlXUnpJSFJvWlNCcGJuQjFkQ0J6Wlc1MElHSjVJSFJvWlNCaWNtOTNjMlZ5SUdGdVpDQndZWEp6DQpaWE1nZEdobElHbHVjSFYwSUhaaGNtbGhZbXhsY3k0Z1NYUU5DaU1nY0dGeWMyVnpJRWRGVkN3Z1VFOVRWQ0JoYm1RZ2JYVnNkR2x3DQpZWEowTDJadmNtMHRaR0YwWVNCMGFHRjBJR2x6SUhWelpXUWdabTl5SUhWd2JHOWhaR2x1WnlCbWFXeGxjeTROQ2lNZ1ZHaGxJR1pwDQpiR1Z1WVcxbElHbHpJSE4wYjNKbFpDQnBiaUFrYVc1N0oyWW5mU0JoYm1RZ2RHaGxJR1JoZEdFZ2FYTWdjM1J2Y21Wa0lHbHVJQ1JwDQpibnNuWm1sc1pXUmhkR0VuZlM0TkNpTWdUM1JvWlhJZ2RtRnlhV0ZpYkdWeklHTmhiaUJpWlNCaFkyTmxjM05sWkNCMWMybHVaeUFrDQphVzU3SjNaaGNpZDlMQ0IzYUdWeVpTQjJZWElnYVhNZ2RHaGxJRzVoYldVZ2IyWU5DaU1nZEdobElIWmhjbWxoWW14bExpQk9iM1JsDQpPaUJOYjNOMElHOW1JSFJvWlNCamIyUmxJR2x1SUhSb2FYTWdablZ1WTNScGIyNGdhWE1nZEdGclpXNGdabkp2YlNCdmRHaGxjaUJEDQpSMGtOQ2lNZ2MyTnlhWEIwY3k0TkNpTXRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0DQpMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzBOQ25OMVlpQlNaV0ZrVUdGeWMyVWdEUXA3DQpEUW9KYkc5allXd2dLQ3BwYmlrZ1BTQkFYeUJwWmlCQVh6c05DZ2xzYjJOaGJDQW9KR2tzSUNSc2IyTXNJQ1JyWlhrc0lDUjJZV3dwDQpPdzBLQ1EwS0NTUk5kV3gwYVhCaGNuUkdiM0p0UkdGMFlTQTlJQ1JGVGxaN0owTlBUbFJGVGxSZlZGbFFSU2Q5SUQxK0lDOXRkV3gwDQphWEJoY25SY0wyWnZjbTB0WkdGMFlUc2dZbTkxYm1SaGNuazlLQzRyS1NRdk93MEtEUW9KYVdZb0pFVk9WbnNuVWtWUlZVVlRWRjlODQpSVlJJVDBRbmZTQmxjU0FpUjBWVUlpa05DZ2w3RFFvSkNTUnBiaUE5SUNSRlRsWjdKMUZWUlZKWlgxTlVVa2xPUnlkOU93MEtDWDBODQpDZ2xsYkhOcFppZ2tSVTVXZXlkU1JWRlZSVk5VWDAxRlZFaFBSQ2Q5SUdWeElDSlFUMU5VSWlrTkNnbDdEUW9KQ1dKcGJtMXZaR1VvDQpVMVJFU1U0cElHbG1JQ1JOZFd4MGFYQmhjblJHYjNKdFJHRjBZU0FtSUNSWGFXNU9WRHNOQ2drSmNtVmhaQ2hUVkVSSlRpd2dKR2x1DQpMQ0FrUlU1V2V5ZERUMDVVUlU1VVgweEZUa2RVU0NkOUtUc05DZ2w5RFFvTkNna2pJR2hoYm1Sc1pTQm1hV3hsSUhWd2JHOWhaQ0JrDQpZWFJoRFFvSmFXWW9KRVZPVm5zblEwOU9WRVZPVkY5VVdWQkZKMzBnUFg0Z0wyMTFiSFJwY0dGeWRGd3ZabTl5YlMxa1lYUmhPeUJpDQpiM1Z1WkdGeWVUMG9MaXNwSkM4cERRb0pldzBLQ1Fra1FtOTFibVJoY25rZ1BTQW5MUzBuTGlReE95QWpJSEJzWldGelpTQnlaV1psDQpjaUIwYnlCU1JrTXhPRFkzSUEwS0NRbEFiR2x6ZENBOUlITndiR2wwS0M4a1FtOTFibVJoY25rdkxDQWthVzRwT3lBTkNna0pKRWhsDQpZV1JsY2tKdlpIa2dQU0FrYkdsemRGc3hYVHNOQ2drSkpFaGxZV1JsY2tKdlpIa2dQWDRnTDF4eVhHNWNjbHh1ZkZ4dVhHNHZPdzBLDQpDUWtrU0dWaFpHVnlJRDBnSkdBN0RRb0pDU1JDYjJSNUlEMGdKQ2M3RFFvZ0NRa2tRbTlrZVNBOWZpQnpMMXh5WEc0a0x5ODdJQ01nDQpkR2hsSUd4aGMzUWdYSEpjYmlCM1lYTWdjSFYwSUdsdUlHSjVJRTVsZEhOallYQmxEUW9KQ1NScGJuc25abWxzWldSaGRHRW5mU0E5DQpJQ1JDYjJSNU93MEtDUWtrU0dWaFpHVnlJRDErSUM5bWFXeGxibUZ0WlQxY0lpZ3VLeWxjSWk4N0lBMEtDUWtrYVc1N0oyWW5mU0E5DQpJQ1F4T3lBTkNna0pKR2x1ZXlkbUozMGdQWDRnY3k5Y0lpOHZaenNOQ2drSkpHbHVleWRtSjMwZ1BYNGdjeTljY3k4dlp6c05DZzBLDQpDUWtqSUhCaGNuTmxJSFJ5WVdsc1pYSU5DZ2tKWm05eUtDUnBQVEk3SUNSc2FYTjBXeVJwWFRzZ0pHa3JLeWtOQ2drSmV5QU5DZ2tKDQpDU1JzYVhOMFd5UnBYU0E5ZmlCekwxNHVLMjVoYldVOUpDOHZPdzBLQ1FrSkpHeHBjM1JiSkdsZElEMStJQzljSWloY2R5c3BYQ0l2DQpPdzBLQ1FrSkpHdGxlU0E5SUNReE93MEtDUWtKSkhaaGJDQTlJQ1FuT3cwS0NRa0pKSFpoYkNBOWZpQnpMeWhlS0Z4eVhHNWNjbHh1DQpmRnh1WEc0cEtYd29YSEpjYmlSOFhHNGtLUzh2WnpzTkNna0pDU1IyWVd3Z1BYNGdjeThsS0M0dUtTOXdZV05yS0NKaklpd2dhR1Y0DQpLQ1F4S1NrdloyVTdEUW9KQ1Fra2FXNTdKR3RsZVgwZ1BTQWtkbUZzT3lBTkNna0pmUTBLQ1gwTkNnbGxiSE5sSUNNZ2MzUmhibVJoDQpjbVFnY0c5emRDQmtZWFJoSUNoMWNtd2daVzVqYjJSbFpDd2dibTkwSUcxMWJIUnBjR0Z5ZENrTkNnbDdEUW9KQ1VCcGJpQTlJSE53DQpiR2wwS0M4bUx5d2dKR2x1S1RzTkNna0pabTl5WldGamFDQWthU0FvTUNBdUxpQWtJMmx1S1EwS0NRbDdEUW9KQ1Fra2FXNWJKR2xkDQpJRDErSUhNdlhDc3ZJQzluT3cwS0NRa0pLQ1JyWlhrc0lDUjJZV3dwSUQwZ2MzQnNhWFFvTHowdkxDQWthVzViSkdsZExDQXlLVHNODQpDZ2tKQ1NSclpYa2dQWDRnY3k4bEtDNHVLUzl3WVdOcktDSmpJaXdnYUdWNEtDUXhLU2t2WjJVN0RRb0pDUWtrZG1Gc0lEMStJSE12DQpKU2d1TGlrdmNHRmpheWdpWXlJc0lHaGxlQ2drTVNrcEwyZGxPdzBLQ1FrSkpHbHVleVJyWlhsOUlDNDlJQ0pjTUNJZ2FXWWdLR1JsDQpabWx1WldRb0pHbHVleVJyWlhsOUtTazdEUW9KQ1Fra2FXNTdKR3RsZVgwZ0xqMGdKSFpoYkRzTkNna0pmUTBLQ1gwTkNuME5DZzBLDQpJeTB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0DQpMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFEwS0l5QlFjbWx1ZEhNZ2RHaGxJRWhVVFV3Z1VHRm5aU0JJWldGa1pYSU5DaU1nDQpRWEpuZFcxbGJuUWdNVG9nUm05eWJTQnBkR1Z0SUc1aGJXVWdkRzhnZDJocFkyZ2dabTlqZFhNZ2MyaHZkV3hrSUdKbElITmxkQTBLDQpJeTB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0DQpMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFEwS2MzVmlJRkJ5YVc1MFVHRm5aVWhsWVdSbGNnMEtldzBLQ1NSRmJtTnZaR1ZrDQpRM1Z5Y21WdWRFUnBjaUE5SUNSRGRYSnlaVzUwUkdseU93MEtDU1JGYm1OdlpHVmtRM1Z5Y21WdWRFUnBjaUE5ZmlCekx5aGJYbUV0DQpla0V0V2pBdE9WMHBMeWNsSnk1MWJuQmhZMnNvSWtncUlpd2tNU2t2WldjN0RRb0pjSEpwYm5RZ0lrTnZiblJsYm5RdGRIbHdaVG9nDQpkR1Y0ZEM5b2RHMXNYRzVjYmlJN0RRb0pjSEpwYm5RZ1BEeEZUa1E3RFFvOGFIUnRiRDROQ2p4b1pXRmtQZzBLUEhScGRHeGxQbkJ5DQphWFk0SUdObmFTQnphR1ZzYkR3dmRHbDBiR1UrRFFva1NIUnRiRTFsZEdGSVpXRmtaWElOQ2cwS1BHMWxkR0VnYm1GdFpUMGlhMlY1DQpkMjl5WkhNaUlHTnZiblJsYm5ROUluQnlhWFk0SUdObmFTQnphR1ZzYkNBZ1h5QWdJQ0FnYVRWZlFHaHZkRzFoYVd3dVkyOXRJajRODQpDanh0WlhSaElHNWhiV1U5SW1SbGMyTnlhWEIwYVc5dUlpQmpiMjUwWlc1MFBTSndjbWwyT0NCaloya2djMmhsYkd3Z0lGOGdJQ0FnDQphVFZmUUdodmRHMWhhV3d1WTI5dElqNE5Dand2YUdWaFpENE5DanhpYjJSNUlHOXVURzloWkQwaVpHOWpkVzFsYm5RdVppNUFYeTVtDQpiMk4xY3lncElpQmlaMk52Ykc5eVBTSWpSa1pHUmtaR0lpQjBiM0J0WVhKbmFXNDlJakFpSUd4bFpuUnRZWEpuYVc0OUlqQWlJRzFoDQpjbWRwYm5kcFpIUm9QU0l3SWlCdFlYSm5hVzVvWldsbmFIUTlJakFpSUhSbGVIUTlJaU5HUmpBd01EQWlQZzBLUEhSaFlteGxJR0p2DQpjbVJsY2owaU1TSWdkMmxrZEdnOUlqRXdNQ1VpSUdObGJHeHpjR0ZqYVc1blBTSXdJaUJqWld4c2NHRmtaR2x1WnowaU1pSStEUW84DQpkSEkrRFFvOGRHUWdZbWRqYjJ4dmNqMGlJMFpHUmtaR1JpSWdZbTl5WkdWeVkyOXNiM0k5SWlOR1JrWkdSa1lpSUdGc2FXZHVQU0pqDQpaVzUwWlhJaUlIZHBaSFJvUFNJeEpTSStEUW84WWo0OFptOXVkQ0J6YVhwbFBTSXlJajRqUEM5bWIyNTBQand2WWo0OEwzUmtQZzBLDQpQSFJrSUdKblkyOXNiM0k5SWlOR1JrWkdSa1lpSUhkcFpIUm9QU0k1T0NVaVBqeG1iMjUwSUdaaFkyVTlJbFpsY21SaGJtRWlJSE5wDQplbVU5SWpJaVBqeGlQaUFOQ2p4aUlITjBlV3hsUFNKamIyeHZjanBpYkdGamF6dGlZV05yWjNKdmRXNWtMV052Ykc5eU9pTm1abVptDQpOallpUG5CeWFYWTRJR05uYVNCemFHVnNiRHd2WWo0Z1EyOXVibVZqZEdWa0lIUnZJQ1JUWlhKMlpYSk9ZVzFsUEM5aVBqd3ZabTl1DQpkRDQ4TDNSa1BnMEtQQzkwY2o0TkNqeDBjajROQ2p4MFpDQmpiMnh6Y0dGdVBTSXlJaUJpWjJOdmJHOXlQU0lqUmtaR1JrWkdJajQ4DQpabTl1ZENCbVlXTmxQU0pXWlhKa1lXNWhJaUJ6YVhwbFBTSXlJajROQ2cwS1BHRWdhSEpsWmowaUpGTmpjbWx3ZEV4dlkyRjBhVzl1DQpQMkU5ZFhCc2IyRmtKbVE5SkVWdVkyOWtaV1JEZFhKeVpXNTBSR2x5SWo0OFptOXVkQ0JqYjJ4dmNqMGlJMFpHTURBd01DSStWWEJzDQpiMkZrSUVacGJHVThMMlp2Ym5RK1BDOWhQaUI4SUEwS1BHRWdhSEpsWmowaUpGTmpjbWx3ZEV4dlkyRjBhVzl1UDJFOVpHOTNibXh2DQpZV1FtWkQwa1JXNWpiMlJsWkVOMWNuSmxiblJFYVhJaVBqeG1iMjUwSUdOdmJHOXlQU0lqUmtZd01EQXdJajVFYjNkdWJHOWhaQ0JHDQphV3hsUEM5bWIyNTBQand2WVQ0Z2ZBMEtQR0VnYUhKbFpqMGlKRk5qY21sd2RFeHZZMkYwYVc5dVAyRTliRzluYjNWMElqNDhabTl1DQpkQ0JqYjJ4dmNqMGlJMFpHTURBd01DSStSR2x6WTI5dWJtVmpkRHd2Wm05dWRENDhMMkUrSUh3TkNqd3ZabTl1ZEQ0OEwzUmtQZzBLDQpQQzkwY2o0TkNqd3ZkR0ZpYkdVK0RRbzhabTl1ZENCemFYcGxQU0l6SWo0TkNrVk9SQTBLZlEwS0RRb2pMUzB0TFMwdExTMHRMUzB0DQpMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0DQpMUzB0TFMwdExTMHREUW9qSUZCeWFXNTBjeUIwYUdVZ1RHOW5hVzRnVTJOeVpXVnVEUW9qTFMwdExTMHRMUzB0TFMwdExTMHRMUzB0DQpMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0DQpMUzB0RFFwemRXSWdVSEpwYm5STWIyZHBibE5qY21WbGJnMEtldzBLQ1NSTlpYTnpZV2RsSUQwZ2NTUThMMlp2Ym5RK1BHZ3hQbkJoDQpjM005Y0hKcGRqZzhMMmd4UGp4bWIyNTBJR052Ykc5eVBTSWpNREE1T1RBd0lpQnphWHBsUFNJeklqNDhjSEpsUGp4cGJXY2dZbTl5DQpaR1Z5UFNJd0lpQnpjbU05SW1oMGRIQTZMeTkzZDNjdWNISnBkamd1YVdKc2IyZG5aWEl1YjNKbkwzTXVjR2h3UHl0aloybDBaV3h1DQpaWFFnYzJobGJHd2lJSGRwWkhSb1BTSXdJaUJvWldsbmFIUTlJakFpUGp3dmNISmxQZzBLSkRzTkNpTW5EUW9KY0hKcGJuUWdQRHhGDQpUa1E3RFFvOFkyOWtaVDROQ2cwS1ZISjVhVzVuSUNSVFpYSjJaWEpPWVcxbExpNHVQR0p5UGcwS1EyOXVibVZqZEdWa0lIUnZJQ1JUDQpaWEoyWlhKT1lXMWxQR0p5UGcwS1JYTmpZWEJsSUdOb1lYSmhZM1JsY2lCcGN5QmVYUTBLUEdOdlpHVStKRTFsYzNOaFoyVU5Da1ZPDQpSQTBLZlEwS0RRb2pMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0DQpMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0RFFvaklGQnlhVzUwY3lCMGFHVWdiV1Z6YzJGblpTQjBhR0YwDQpJR2x1Wm05eWJYTWdkR2hsSUhWelpYSWdiMllnWVNCbVlXbHNaV1FnYkc5bmFXNE5DaU10TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0DQpMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0DQpMUzBOQ25OMVlpQlFjbWx1ZEV4dloybHVSbUZwYkdWa1RXVnpjMkZuWlEwS2V3MEtDWEJ5YVc1MElEdzhSVTVFT3cwS1BHTnZaR1UrDQpEUW84WW5JK2JHOW5hVzQ2SUdGa2JXbHVQR0p5UGcwS2NHRnpjM2R2Y21RNlBHSnlQZzBLVEc5bmFXNGdhVzVqYjNKeVpXTjBQR0p5DQpQanhpY2o0TkNqd3ZZMjlrWlQ0TkNrVk9SQTBLZlEwS0RRb2pMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0DQpMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0RFFvaklGQnlhVzUwDQpjeUIwYUdVZ1NGUk5UQ0JtYjNKdElHWnZjaUJzYjJkbmFXNW5JR2x1RFFvakxTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0DQpMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHREUXB6DQpkV0lnVUhKcGJuUk1iMmRwYmtadmNtME5DbnNOQ2dsd2NtbHVkQ0E4UEVWT1JEc05DanhqYjJSbFBnMEtEUW84Wm05eWJTQnVZVzFsDQpQU0ptSWlCdFpYUm9iMlE5SWxCUFUxUWlJR0ZqZEdsdmJqMGlKRk5qY21sd2RFeHZZMkYwYVc5dUlqNE5DanhwYm5CMWRDQjBlWEJsDQpQU0pvYVdSa1pXNGlJRzVoYldVOUltRWlJSFpoYkhWbFBTSnNiMmRwYmlJK0RRbzhMMlp2Ym5RK0RRbzhabTl1ZENCemFYcGxQU0l6DQpJajROQ214dloybHVPaUE4WWlCemRIbHNaVDBpWTI5c2IzSTZZbXhoWTJzN1ltRmphMmR5YjNWdVpDMWpiMnh2Y2pvalptWm1aalkyDQpJajV3Y21sMk9DQmpaMmtnYzJobGJHdzhMMkkrUEdKeVBnMEtjR0Z6YzNkdmNtUTZQQzltYjI1MFBqeG1iMjUwSUdOdmJHOXlQU0lqDQpNREE1T1RBd0lpQnphWHBsUFNJeklqNDhhVzV3ZFhRZ2RIbHdaVDBpY0dGemMzZHZjbVFpSUc1aGJXVTlJbkFpUGcwS1BHbHVjSFYwDQpJSFI1Y0dVOUluTjFZbTFwZENJZ2RtRnNkV1U5SWtWdWRHVnlJajROQ2p3dlptOXliVDROQ2p3dlkyOWtaVDROQ2tWT1JBMEtmUTBLDQpEUW9qTFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0DQpMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdERRb2pJRkJ5YVc1MGN5QjBhR1VnWm05dmRHVnlJR1p2Y2lCMGFHVWdTRlJODQpUQ0JRWVdkbERRb2pMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0DQpMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0RFFwemRXSWdVSEpwYm5SUVlXZGxSbTl2ZEdWeURRcDdEUW9KDQpjSEpwYm5RZ0lqd3ZabTl1ZEQ0OEwySnZaSGsrUEM5b2RHMXNQaUk3RFFwOURRb05DaU10TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0DQpMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0DQpMUzBOQ2lNZ1VtVjBjbVZwZG1WeklIUm9aU0IyWVd4MVpYTWdiMllnWVd4c0lHTnZiMnRwWlhNdUlGUm9aU0JqYjI5cmFXVnpJR05oDQpiaUJpWlNCaFkyTmxjM05sY3lCMWMybHVaeUIwYUdVTkNpTWdkbUZ5YVdGaWJHVWdKRU52YjJ0cFpYTjdKeWQ5RFFvakxTMHRMUzB0DQpMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0DQpMUzB0TFMwdExTMHRMUzB0TFMwdERRcHpkV0lnUjJWMFEyOXZhMmxsY3cwS2V3MEtDVUJvZEhSd1kyOXZhMmxsY3lBOUlITndiR2wwDQpLQzg3SUM4c0pFVk9WbnNuU0ZSVVVGOURUMDlMU1VVbmZTazdEUW9KWm05eVpXRmphQ0FrWTI5dmEybGxLRUJvZEhSd1kyOXZhMmxsDQpjeWtOQ2dsN0RRb0pDU2drYVdRc0lDUjJZV3dwSUQwZ2MzQnNhWFFvTHowdkxDQWtZMjl2YTJsbEtUc05DZ2tKSkVOdmIydHBaWE43DQpKR2xrZlNBOUlDUjJZV3c3RFFvSmZRMEtmUTBLRFFvakxTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0DQpMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHREUW9qSUZCeWFXNTBjeUIwDQphR1VnYzJOeVpXVnVJSGRvWlc0Z2RHaGxJSFZ6WlhJZ2JHOW5jeUJ2ZFhRTkNpTXRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0DQpMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzBODQpDbk4xWWlCUWNtbHVkRXh2WjI5MWRGTmpjbVZsYmcwS2V3MEtDWEJ5YVc1MElDSThZMjlrWlQ1RGIyNXVaV04wYVc5dUlHTnNiM05sDQpaQ0JpZVNCbWIzSmxhV2R1SUdodmMzUXVQR0p5UGp4aWNqNDhMMk52WkdVK0lqc05DbjBOQ2cwS0l5MHRMUzB0TFMwdExTMHRMUzB0DQpMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0DQpMUzB0TFMwdExRMEtJeUJNYjJkeklHOTFkQ0IwYUdVZ2RYTmxjaUJoYm1RZ1lXeHNiM2R6SUhSb1pTQjFjMlZ5SUhSdklHeHZaMmx1DQpJR0ZuWVdsdURRb2pMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0DQpMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0RFFwemRXSWdVR1Z5Wm05eWJVeHZaMjkxZEEwS2V3MEtDWEJ5DQphVzUwSUNKVFpYUXRRMjl2YTJsbE9pQlRRVlpGUkZCWFJEMDdYRzRpT3lBaklISmxiVzkyWlNCd1lYTnpkMjl5WkNCamIyOXJhV1VODQpDZ2ttVUhKcGJuUlFZV2RsU0dWaFpHVnlLQ0p3SWlrN0RRb0pKbEJ5YVc1MFRHOW5iM1YwVTJOeVpXVnVPdzBLRFFvSkpsQnlhVzUwDQpURzluYVc1VFkzSmxaVzQ3RFFvSkpsQnlhVzUwVEc5bmFXNUdiM0p0T3cwS0NTWlFjbWx1ZEZCaFoyVkdiMjkwWlhJN0RRcDlEUW9ODQpDaU10TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0DQpMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwTkNpTWdWR2hwY3lCbWRXNWpkR2x2YmlCcGN5QmpZV3hzWldRZ2RHOGdiRzluDQphVzRnZEdobElIVnpaWEl1SUVsbUlIUm9aU0J3WVhOemQyOXlaQ0J0WVhSamFHVnpMQ0JwZEEwS0l5QmthWE53YkdGNWN5QmhJSEJoDQpaMlVnZEdoaGRDQmhiR3h2ZDNNZ2RHaGxJSFZ6WlhJZ2RHOGdjblZ1SUdOdmJXMWhibVJ6TGlCSlppQjBhR1VnY0dGemMzZHZjbVFnDQpaRzlsYm5NbmRBMEtJeUJ0WVhSamFDQnZjaUJwWmlCdWJ5QndZWE56ZDI5eVpDQnBjeUJsYm5SbGNtVmtMQ0JwZENCa2FYTndiR0Y1DQpjeUJoSUdadmNtMGdkR2hoZENCaGJHeHZkM01nZEdobElIVnpaWElOQ2lNZ2RHOGdiRzluYVc0TkNpTXRMUzB0TFMwdExTMHRMUzB0DQpMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0DQpMUzB0TFMwdExTME5Dbk4xWWlCUVpYSm1iM0p0VEc5bmFXNGdEUXA3RFFvSmFXWW9KRXh2WjJsdVVHRnpjM2R2Y21RZ1pYRWdKRkJoDQpjM04zYjNKa0tTQWpJSEJoYzNOM2IzSmtJRzFoZEdOb1pXUU5DZ2w3RFFvSkNYQnlhVzUwSUNKVFpYUXRRMjl2YTJsbE9pQlRRVlpGDQpSRkJYUkQwa1RHOW5hVzVRWVhOemQyOXlaRHRjYmlJN0RRb0pDU1pRY21sdWRGQmhaMlZJWldGa1pYSW9JbU1pS1RzTkNna0pKbEJ5DQphVzUwUTI5dGJXRnVaRXhwYm1WSmJuQjFkRVp2Y20wN0RRb0pDU1pRY21sdWRGQmhaMlZHYjI5MFpYSTdEUW9KZlEwS0NXVnNjMlVnDQpJeUJ3WVhOemQyOXlaQ0JrYVdSdUozUWdiV0YwWTJnTkNnbDdEUW9KQ1NaUWNtbHVkRkJoWjJWSVpXRmtaWElvSW5BaUtUc05DZ2tKDQpKbEJ5YVc1MFRHOW5hVzVUWTNKbFpXNDdEUW9KQ1dsbUtDUk1iMmRwYmxCaGMzTjNiM0prSUc1bElDSWlLU0FqSUhOdmJXVWdjR0Z6DQpjM2R2Y21RZ2QyRnpJR1Z1ZEdWeVpXUU5DZ2tKZXcwS0NRa0pKbEJ5YVc1MFRHOW5hVzVHWVdsc1pXUk5aWE56WVdkbE93MEtEUW9KDQpDWDBOQ2drSkpsQnlhVzUwVEc5bmFXNUdiM0p0T3cwS0NRa21VSEpwYm5SUVlXZGxSbTl2ZEdWeU93MEtDWDBOQ24wTkNnMEtJeTB0DQpMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0DQpMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUTBLSXlCUWNtbHVkSE1nZEdobElFaFVUVXdnWm05eWJTQjBhR0YwSUdGc2JHOTNjeUIwDQphR1VnZFhObGNpQjBieUJsYm5SbGNpQmpiMjF0WVc1a2N3MEtJeTB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0DQpMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFEwS2MzVmlJRkJ5DQphVzUwUTI5dGJXRnVaRXhwYm1WSmJuQjFkRVp2Y20wTkNuc05DZ2trVUhKdmJYQjBJRDBnSkZkcGJrNVVJRDhnSWlSRGRYSnlaVzUwDQpSR2x5UGlBaUlEb2dJbHRoWkcxcGJseEFKRk5sY25abGNrNWhiV1VnSkVOMWNuSmxiblJFYVhKZFhDUWdJanNOQ2dsd2NtbHVkQ0E4DQpQRVZPUkRzTkNqeGpiMlJsUGcwS1BHWnZjbTBnYm1GdFpUMGlaaUlnYldWMGFHOWtQU0pRVDFOVUlpQmhZM1JwYjI0OUlpUlRZM0pwDQpjSFJNYjJOaGRHbHZiaUkrRFFvOGFXNXdkWFFnZEhsd1pUMGlhR2xrWkdWdUlpQnVZVzFsUFNKaElpQjJZV3gxWlQwaVkyOXRiV0Z1DQpaQ0krRFFvOGFXNXdkWFFnZEhsd1pUMGlhR2xrWkdWdUlpQnVZVzFsUFNKa0lpQjJZV3gxWlQwaUpFTjFjbkpsYm5SRWFYSWlQZzBLDQpKRkJ5YjIxd2RBMEtQR2x1Y0hWMElIUjVjR1U5SW5SbGVIUWlJRzVoYldVOUltTWlQZzBLUEdsdWNIVjBJSFI1Y0dVOUluTjFZbTFwDQpkQ0lnZG1Gc2RXVTlJa1Z1ZEdWeUlqNE5Dand2Wm05eWJUNE5Dand2WTI5a1pUNE5DZzBLUlU1RURRcDlEUW9OQ2lNdExTMHRMUzB0DQpMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0DQpMUzB0TFMwdExTMHRMUzB0TFMwTkNpTWdVSEpwYm5SeklIUm9aU0JJVkUxTUlHWnZjbTBnZEdoaGRDQmhiR3h2ZDNNZ2RHaGxJSFZ6DQpaWElnZEc4Z1pHOTNibXh2WVdRZ1ptbHNaWE1OQ2lNdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0DQpMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTME5Dbk4xWWlCUWNtbHVkRVpwDQpiR1ZFYjNkdWJHOWhaRVp2Y20wTkNuc05DZ2trVUhKdmJYQjBJRDBnSkZkcGJrNVVJRDhnSWlSRGRYSnlaVzUwUkdseVBpQWlJRG9nDQpJbHRoWkcxcGJseEFKRk5sY25abGNrNWhiV1VnSkVOMWNuSmxiblJFYVhKZFhDUWdJanNOQ2dsd2NtbHVkQ0E4UEVWT1JEc05DanhqDQpiMlJsUGcwS1BHWnZjbTBnYm1GdFpUMGlaaUlnYldWMGFHOWtQU0pRVDFOVUlpQmhZM1JwYjI0OUlpUlRZM0pwY0hSTWIyTmhkR2x2DQpiaUkrRFFvOGFXNXdkWFFnZEhsd1pUMGlhR2xrWkdWdUlpQnVZVzFsUFNKa0lpQjJZV3gxWlQwaUpFTjFjbkpsYm5SRWFYSWlQZzBLDQpQR2x1Y0hWMElIUjVjR1U5SW1ocFpHUmxiaUlnYm1GdFpUMGlZU0lnZG1Gc2RXVTlJbVJ2ZDI1c2IyRmtJajROQ2lSUWNtOXRjSFFnDQpaRzkzYm14dllXUThZbkkrUEdKeVBnMEtSbWxzWlc1aGJXVTZJRHhwYm5CMWRDQjBlWEJsUFNKMFpYaDBJaUJ1WVcxbFBTSm1JaUJ6DQphWHBsUFNJek5TSStQR0p5UGp4aWNqNE5Da1J2ZDI1c2IyRmtPaUE4YVc1d2RYUWdkSGx3WlQwaWMzVmliV2wwSWlCMllXeDFaVDBpDQpRbVZuYVc0aVBnMEtQQzltYjNKdFBnMEtQQzlqYjJSbFBnMEtSVTVFRFFwOURRb05DaU10TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0DQpMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0DQpMUzBOQ2lNZ1VISnBiblJ6SUhSb1pTQklWRTFNSUdadmNtMGdkR2hoZENCaGJHeHZkM01nZEdobElIVnpaWElnZEc4Z2RYQnNiMkZrDQpJR1pwYkdWekRRb2pMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0DQpMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0RFFwemRXSWdVSEpwYm5SR2FXeGxWWEJzYjJGa1JtOXliUTBLDQpldzBLQ1NSUWNtOXRjSFFnUFNBa1YybHVUbFFnUHlBaUpFTjFjbkpsYm5SRWFYSStJQ0lnT2lBaVcyRmtiV2x1WEVBa1UyVnlkbVZ5DQpUbUZ0WlNBa1EzVnljbVZ1ZEVScGNsMWNKQ0FpT3cwS0NYQnlhVzUwSUR3OFJVNUVPdzBLUEdOdlpHVStEUW9OQ2p4bWIzSnRJRzVoDQpiV1U5SW1ZaUlHVnVZM1I1Y0dVOUltMTFiSFJwY0dGeWRDOW1iM0p0TFdSaGRHRWlJRzFsZEdodlpEMGlVRTlUVkNJZ1lXTjBhVzl1DQpQU0lrVTJOeWFYQjBURzlqWVhScGIyNGlQZzBLSkZCeWIyMXdkQ0IxY0d4dllXUThZbkkrUEdKeVBnMEtSbWxzWlc1aGJXVTZJRHhwDQpibkIxZENCMGVYQmxQU0ptYVd4bElpQnVZVzFsUFNKbUlpQnphWHBsUFNJek5TSStQR0p5UGp4aWNqNE5Dazl3ZEdsdmJuTTZJQ1p1DQpZbk53T3p4cGJuQjFkQ0IwZVhCbFBTSmphR1ZqYTJKdmVDSWdibUZ0WlQwaWJ5SWdkbUZzZFdVOUltOTJaWEozY21sMFpTSStEUXBQDQpkbVZ5ZDNKcGRHVWdhV1lnYVhRZ1JYaHBjM1J6UEdKeVBqeGljajROQ2xWd2JHOWhaRG9tYm1KemNEc21ibUp6Y0RzbWJtSnpjRHM4DQphVzV3ZFhRZ2RIbHdaVDBpYzNWaWJXbDBJaUIyWVd4MVpUMGlRbVZuYVc0aVBnMEtQR2x1Y0hWMElIUjVjR1U5SW1ocFpHUmxiaUlnDQpibUZ0WlQwaVpDSWdkbUZzZFdVOUlpUkRkWEp5Wlc1MFJHbHlJajROQ2p4cGJuQjFkQ0IwZVhCbFBTSm9hV1JrWlc0aUlHNWhiV1U5DQpJbUVpSUhaaGJIVmxQU0oxY0d4dllXUWlQZzBLUEM5bWIzSnRQZzBLUEM5amIyUmxQZzBLUlU1RURRcDlEUW9OQ2lNdExTMHRMUzB0DQpMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0DQpMUzB0TFMwdExTMHRMUzB0TFMwTkNpTWdWR2hwY3lCbWRXNWpkR2x2YmlCcGN5QmpZV3hzWldRZ2QyaGxiaUIwYUdVZ2RHbHRaVzkxDQpkQ0JtYjNJZ1lTQmpiMjF0WVc1a0lHVjRjR2x5WlhNdUlGZGxJRzVsWldRZ2RHOE5DaU1nZEdWeWJXbHVZWFJsSUhSb1pTQnpZM0pwDQpjSFFnYVcxdFpXUnBZWFJsYkhrdUlGUm9hWE1nWm5WdVkzUnBiMjRnYVhNZ2RtRnNhV1FnYjI1c2VTQnZiaUJWYm1sNExpQkpkQ0JwDQpjdzBLSXlCdVpYWmxjaUJqWVd4c1pXUWdkMmhsYmlCMGFHVWdjMk55YVhCMElHbHpJSEoxYm01cGJtY2diMjRnVGxRdURRb2pMUzB0DQpMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0DQpMUzB0TFMwdExTMHRMUzB0TFMwdExTMHREUXB6ZFdJZ1EyOXRiV0Z1WkZScGJXVnZkWFFOQ25zTkNnbHBaaWdoSkZkcGJrNVVLUTBLDQpDWHNOQ2drSllXeGhjbTBvTUNrN0RRb0pDWEJ5YVc1MElEdzhSVTVFT3cwS1BDOTRiWEErRFFvTkNqeGpiMlJsUGcwS1EyOXRiV0Z1DQpaQ0JsZUdObFpXUmxaQ0J0WVhocGJYVnRJSFJwYldVZ2IyWWdKRU52YlcxaGJtUlVhVzFsYjNWMFJIVnlZWFJwYjI0Z2MyVmpiMjVrDQpLSE1wTGcwS1BHSnlQa3RwYkd4bFpDQnBkQ0VOQ2tWT1JBMEtDUWttVUhKcGJuUkRiMjF0WVc1a1RHbHVaVWx1Y0hWMFJtOXliVHNODQpDZ2tKSmxCeWFXNTBVR0ZuWlVadmIzUmxjanNOQ2drSlpYaHBkRHNOQ2dsOURRcDlEUW9OQ2lNdExTMHRMUzB0TFMwdExTMHRMUzB0DQpMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0DQpMUzB0TFMwTkNpTWdWR2hwY3lCbWRXNWpkR2x2YmlCcGN5QmpZV3hzWldRZ2RHOGdaWGhsWTNWMFpTQmpiMjF0WVc1a2N5NGdTWFFnDQpaR2x6Y0d4aGVYTWdkR2hsSUc5MWRIQjFkQ0J2WmlCMGFHVU5DaU1nWTI5dGJXRnVaQ0JoYm1RZ1lXeHNiM2R6SUhSb1pTQjFjMlZ5DQpJSFJ2SUdWdWRHVnlJR0Z1YjNSb1pYSWdZMjl0YldGdVpDNGdWR2hsSUdOb1lXNW5aU0JrYVhKbFkzUnZjbmtOQ2lNZ1kyOXRiV0Z1DQpaQ0JwY3lCb1lXNWtiR1ZrSUdScFptWmxjbVZ1ZEd4NUxpQkpiaUIwYUdseklHTmhjMlVzSUhSb1pTQnVaWGNnWkdseVpXTjBiM0o1DQpJR2x6SUhOMGIzSmxaQ0JwYmcwS0l5QmhiaUJwYm5SbGNtNWhiQ0IyWVhKcFlXSnNaU0JoYm1RZ2FYTWdkWE5sWkNCbFlXTm9JSFJwDQpiV1VnWVNCamIyMXRZVzVrSUdoaGN5QjBieUJpWlNCbGVHVmpkWFJsWkM0Z1ZHaGxEUW9qSUc5MWRIQjFkQ0J2WmlCMGFHVWdZMmhoDQpibWRsSUdScGNtVmpkRzl5ZVNCamIyMXRZVzVrSUdseklHNXZkQ0JrYVhOd2JHRjVaV1FnZEc4Z2RHaGxJSFZ6WlhKekRRb2pJSFJvDQpaWEpsWm05eVpTQmxjbkp2Y2lCdFpYTnpZV2RsY3lCallXNXViM1FnWW1VZ1pHbHpjR3hoZVdWa0xnMEtJeTB0TFMwdExTMHRMUzB0DQpMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0DQpMUzB0TFMwdExTMHRMUTBLYzNWaUlFVjRaV04xZEdWRGIyMXRZVzVrRFFwN0RRb0phV1lvSkZKMWJrTnZiVzFoYm1RZ1BYNGdiUzllDQpYSE1xWTJSY2N5c29MaXNwTHlrZ0l5QnBkQ0JwY3lCaElHTm9ZVzVuWlNCa2FYSWdZMjl0YldGdVpBMEtDWHNOQ2drSkl5QjNaU0JqDQphR0Z1WjJVZ2RHaGxJR1JwY21WamRHOXllU0JwYm5SbGNtNWhiR3g1TGlCVWFHVWdiM1YwY0hWMElHOW1JSFJvWlEwS0NRa2pJR052DQpiVzFoYm1RZ2FYTWdibTkwSUdScGMzQnNZWGxsWkM0TkNna0pEUW9KQ1NSUGJHUkVhWElnUFNBa1EzVnljbVZ1ZEVScGNqc05DZ2tKDQpKRU52YlcxaGJtUWdQU0FpWTJRZ1hDSWtRM1Z5Y21WdWRFUnBjbHdpSWk0a1EyMWtVMlZ3TGlKalpDQWtNU0l1SkVOdFpGTmxjQzRrDQpRMjFrVUhka093MEtDUWxqYUc5d0tDUkRkWEp5Wlc1MFJHbHlJRDBnWUNSRGIyMXRZVzVrWUNrN0RRb0pDU1pRY21sdWRGQmhaMlZJDQpaV0ZrWlhJb0ltTWlLVHNOQ2drSkpGQnliMjF3ZENBOUlDUlhhVzVPVkNBL0lDSWtUMnhrUkdseVBpQWlJRG9nSWx0aFpHMXBibHhBDQpKRk5sY25abGNrNWhiV1VnSkU5c1pFUnBjbDFjSkNBaU93MEtDUWx3Y21sdWRDQWlKRkJ5YjIxd2RDQWtVblZ1UTI5dGJXRnVaQ0k3DQpEUW9KZlEwS0NXVnNjMlVnSXlCemIyMWxJRzkwYUdWeUlHTnZiVzFoYm1Rc0lHUnBjM0JzWVhrZ2RHaGxJRzkxZEhCMWRBMEtDWHNODQpDZ2tKSmxCeWFXNTBVR0ZuWlVobFlXUmxjaWdpWXlJcE93MEtDUWtrVUhKdmJYQjBJRDBnSkZkcGJrNVVJRDhnSWlSRGRYSnlaVzUwDQpSR2x5UGlBaUlEb2dJbHRoWkcxcGJseEFKRk5sY25abGNrNWhiV1VnSkVOMWNuSmxiblJFYVhKZFhDUWdJanNOQ2drSmNISnBiblFnDQpJaVJRY205dGNIUWdKRkoxYmtOdmJXMWhibVE4ZUcxd1BpSTdEUW9KQ1NSRGIyMXRZVzVrSUQwZ0ltTmtJRndpSkVOMWNuSmxiblJFDQphWEpjSWlJdUpFTnRaRk5sY0M0a1VuVnVRMjl0YldGdVpDNGtVbVZrYVhKbFkzUnZjanNOQ2drSmFXWW9JU1JYYVc1T1ZDa05DZ2tKDQpldzBLQ1FrSkpGTkpSM3NuUVV4U1RTZDlJRDBnWENaRGIyMXRZVzVrVkdsdFpXOTFkRHNOQ2drSkNXRnNZWEp0S0NSRGIyMXRZVzVrDQpWR2x0Wlc5MWRFUjFjbUYwYVc5dUtUc05DZ2tKZlEwS0NRbHBaaWdrVTJodmQwUjVibUZ0YVdOUGRYUndkWFFwSUNNZ2MyaHZkeUJ2DQpkWFJ3ZFhRZ1lYTWdhWFFnYVhNZ1oyVnVaWEpoZEdWa0RRb0pDWHNOQ2drSkNTUjhQVEU3RFFvSkNRa2tRMjl0YldGdVpDQXVQU0FpDQpJSHdpT3cwS0NRa0piM0JsYmloRGIyMXRZVzVrVDNWMGNIVjBMQ0FrUTI5dGJXRnVaQ2s3RFFvSkNRbDNhR2xzWlNnOFEyOXRiV0Z1DQpaRTkxZEhCMWRENHBEUW9KQ1FsN0RRb0pDUWtKSkY4Z1BYNGdjeThvWEc1OFhISmNiaWtrTHk4N0RRb0pDUWtKY0hKcGJuUWdJaVJmDQpYRzRpT3cwS0NRa0pmUTBLQ1FrSkpIdzlNRHNOQ2drSmZRMEtDUWxsYkhObElDTWdjMmh2ZHlCdmRYUndkWFFnWVdaMFpYSWdZMjl0DQpiV0Z1WkNCamIyMXdiR1YwWlhNTkNna0pldzBLQ1FrSmNISnBiblFnWUNSRGIyMXRZVzVrWURzTkNna0pmUTBLQ1FscFppZ2hKRmRwDQpiazVVS1EwS0NRbDdEUW9KQ1FsaGJHRnliU2d3S1RzTkNna0pmUTBLQ1Fsd2NtbHVkQ0FpUEM5NGJYQStJanNOQ2dsOURRb0pKbEJ5DQphVzUwUTI5dGJXRnVaRXhwYm1WSmJuQjFkRVp2Y20wN0RRb0pKbEJ5YVc1MFVHRm5aVVp2YjNSbGNqc05DbjBOQ2cwS0l5MHRMUzB0DQpMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0DQpMUzB0TFMwdExTMHRMUzB0TFMwdExRMEtJeUJVYUdseklHWjFibU4wYVc5dUlHUnBjM0JzWVhseklIUm9aU0J3WVdkbElIUm9ZWFFnDQpZMjl1ZEdGcGJuTWdZU0JzYVc1cklIZG9hV05vSUdGc2JHOTNjeUIwYUdVZ2RYTmxjZzBLSXlCMGJ5QmtiM2R1Ykc5aFpDQjBhR1VnDQpjM0JsWTJsbWFXVmtJR1pwYkdVdUlGUm9aU0J3WVdkbElHRnNjMjhnWTI5dWRHRnBibk1nWVNCaGRYUnZMWEpsWm5KbGMyZ05DaU1nDQpabVZoZEhWeVpTQjBhR0YwSUhOMFlYSjBjeUIwYUdVZ1pHOTNibXh2WVdRZ1lYVjBiMjFoZEdsallXeHNlUzROQ2lNZ1FYSm5kVzFsDQpiblFnTVRvZ1JuVnNiSGtnY1hWaGJHbG1hV1ZrSUdacGJHVnVZVzFsSUc5bUlIUm9aU0JtYVd4bElIUnZJR0psSUdSdmQyNXNiMkZrDQpaV1FOQ2lNdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0DQpMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTME5Dbk4xWWlCUWNtbHVkRVJ2ZDI1c2IyRmtUR2x1YTFCaFoyVU5DbnNODQpDZ2xzYjJOaGJDZ2tSbWxzWlZWeWJDa2dQU0JBWHpzTkNnbHBaaWd0WlNBa1JtbHNaVlZ5YkNrZ0l5QnBaaUIwYUdVZ1ptbHNaU0JsDQplR2x6ZEhNTkNnbDdEUW9KQ1NNZ1pXNWpiMlJsSUhSb1pTQm1hV3hsSUd4cGJtc2djMjhnZDJVZ1kyRnVJSE5sYm1RZ2FYUWdkRzhnDQpkR2hsSUdKeWIzZHpaWElOQ2drSkpFWnBiR1ZWY213Z1BYNGdjeThvVzE1aExYcEJMVm93TFRsZEtTOG5KU2N1ZFc1d1lXTnJLQ0pJDQpLaUlzSkRFcEwyVm5PdzBLQ1Fra1JHOTNibXh2WVdSTWFXNXJJRDBnSWlSVFkzSnBjSFJNYjJOaGRHbHZiajloUFdSdmQyNXNiMkZrDQpKbVk5SkVacGJHVlZjbXdtYnoxbmJ5STdEUW9KQ1NSSWRHMXNUV1YwWVVobFlXUmxjaUE5SUNJOGJXVjBZU0JJVkZSUUxVVlJWVWxXDQpQVndpVW1WbWNtVnphRndpSUVOUFRsUkZUbFE5WENJeE95QlZVa3c5SkVSdmQyNXNiMkZrVEdsdWExd2lQaUk3RFFvSkNTWlFjbWx1DQpkRkJoWjJWSVpXRmtaWElvSW1NaUtUc05DZ2tKY0hKcGJuUWdQRHhGVGtRN0RRbzhZMjlrWlQ0TkNnMEtVMlZ1WkdsdVp5QkdhV3hsDQpJQ1JVY21GdWMyWmxja1pwYkdVdUxpNDhZbkkrRFFwSlppQjBhR1VnWkc5M2JteHZZV1FnWkc5bGN5QnViM1FnYzNSaGNuUWdZWFYwDQpiMjFoZEdsallXeHNlU3dOQ2p4aElHaHlaV1k5SWlSRWIzZHViRzloWkV4cGJtc2lQa05zYVdOcklFaGxjbVU4TDJFK0xnMEtSVTVFDQpEUW9KQ1NaUWNtbHVkRU52YlcxaGJtUk1hVzVsU1c1d2RYUkdiM0p0T3cwS0NRa21VSEpwYm5SUVlXZGxSbTl2ZEdWeU93MEtDWDBODQpDZ2xsYkhObElDTWdabWxzWlNCa2IyVnpiaWQwSUdWNGFYTjBEUW9KZXcwS0NRa21VSEpwYm5SUVlXZGxTR1ZoWkdWeUtDSm1JaWs3DQpEUW9KQ1hCeWFXNTBJQ0pHWVdsc1pXUWdkRzhnWkc5M2JteHZZV1FnSkVacGJHVlZjbXc2SUNRaElqc05DZ2tKSmxCeWFXNTBSbWxzDQpaVVJ2ZDI1c2IyRmtSbTl5YlRzTkNna0pKbEJ5YVc1MFVHRm5aVVp2YjNSbGNqc05DZ2w5RFFwOURRb05DaU10TFMwdExTMHRMUzB0DQpMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0DQpMUzB0TFMwdExTMHRMUzBOQ2lNZ1ZHaHBjeUJtZFc1amRHbHZiaUJ5WldGa2N5QjBhR1VnYzNCbFkybG1hV1ZrSUdacGJHVWdabkp2DQpiU0IwYUdVZ1pHbHpheUJoYm1RZ2MyVnVaSE1nYVhRZ2RHOGdkR2hsRFFvaklHSnliM2R6WlhJc0lITnZJSFJvWVhRZ2FYUWdZMkZ1DQpJR0psSUdSdmQyNXNiMkZrWldRZ1lua2dkR2hsSUhWelpYSXVEUW9qSUVGeVozVnRaVzUwSURFNklFWjFiR3g1SUhGMVlXeHBabWxsDQpaQ0J3WVhSb2JtRnRaU0J2WmlCMGFHVWdabWxzWlNCMGJ5QmlaU0J6Wlc1MExnMEtJeTB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0DQpMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0DQpMUTBLYzNWaUlGTmxibVJHYVd4bFZHOUNjbTkzYzJWeURRcDdEUW9KYkc5allXd29KRk5sYm1SR2FXeGxLU0E5SUVCZk93MEtDV2xtDQpLRzl3Wlc0b1UwVk9SRVpKVEVVc0lDUlRaVzVrUm1sc1pTa3BJQ01nWm1sc1pTQnZjR1Z1WldRZ1ptOXlJSEpsWVdScGJtY05DZ2w3DQpEUW9KQ1dsbUtDUlhhVzVPVkNrTkNna0pldzBLQ1FrSlltbHViVzlrWlNoVFJVNUVSa2xNUlNrN0RRb0pDUWxpYVc1dGIyUmxLRk5VDQpSRTlWVkNrN0RRb0pDWDBOQ2drSkpFWnBiR1ZUYVhwbElEMGdLSE4wWVhRb0pGTmxibVJHYVd4bEtTbGJOMTA3RFFvSkNTZ2tSbWxzDQpaVzVoYldVZ1BTQWtVMlZ1WkVacGJHVXBJRDErSUNCdElTaGJYaTllWEZ4ZEtpa2tJVHNOQ2drSmNISnBiblFnSWtOdmJuUmxiblF0DQpWSGx3WlRvZ1lYQndiR2xqWVhScGIyNHZlQzExYm10dWIzZHVYRzRpT3cwS0NRbHdjbWx1ZENBaVEyOXVkR1Z1ZEMxTVpXNW5kR2c2DQpJQ1JHYVd4bFUybDZaVnh1SWpzTkNna0pjSEpwYm5RZ0lrTnZiblJsYm5RdFJHbHpjRzl6YVhScGIyNDZJR0YwZEdGamFHMWxiblE3DQpJR1pwYkdWdVlXMWxQU1F4WEc1Y2JpSTdEUW9KQ1hCeWFXNTBJSGRvYVd4bEtEeFRSVTVFUmtsTVJUNHBPdzBLQ1FsamJHOXpaU2hUDQpSVTVFUmtsTVJTazdEUW9KZlEwS0NXVnNjMlVnSXlCbVlXbHNaV1FnZEc4Z2IzQmxiaUJtYVd4bERRb0pldzBLQ1FrbVVISnBiblJRDQpZV2RsU0dWaFpHVnlLQ0ptSWlrN0RRb0pDWEJ5YVc1MElDSkdZV2xzWldRZ2RHOGdaRzkzYm14dllXUWdKRk5sYm1SR2FXeGxPaUFrDQpJU0k3RFFvSkNTWlFjbWx1ZEVacGJHVkViM2R1Ykc5aFpFWnZjbTA3RFFvTkNna0pKbEJ5YVc1MFVHRm5aVVp2YjNSbGNqc05DZ2w5DQpEUXA5RFFvTkNnMEtJeTB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0DQpMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFEwS0l5QlVhR2x6SUdaMWJtTjBhVzl1SUdseklHTmhiR3hsDQpaQ0IzYUdWdUlIUm9aU0IxYzJWeUlHUnZkMjVzYjJGa2N5QmhJR1pwYkdVdUlFbDBJR1JwYzNCc1lYbHpJR0VnYldWemMyRm5aUTBLDQpJeUIwYnlCMGFHVWdkWE5sY2lCaGJtUWdjSEp2ZG1sa1pYTWdZU0JzYVc1cklIUm9jbTkxWjJnZ2QyaHBZMmdnZEdobElHWnBiR1VnDQpZMkZ1SUdKbElHUnZkMjVzYjJGa1pXUXVEUW9qSUZSb2FYTWdablZ1WTNScGIyNGdhWE1nWVd4emJ5QmpZV3hzWldRZ2QyaGxiaUIwDQphR1VnZFhObGNpQmpiR2xqYTNNZ2IyNGdkR2hoZENCc2FXNXJMaUJKYmlCMGFHbHpJR05oYzJVc0RRb2pJSFJvWlNCbWFXeGxJR2x6DQpJSEpsWVdRZ1lXNWtJSE5sYm5RZ2RHOGdkR2hsSUdKeWIzZHpaWEl1RFFvakxTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0DQpMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHREUXB6DQpkV0lnUW1WbmFXNUViM2R1Ykc5aFpBMEtldzBLQ1NNZ1oyVjBJR1oxYkd4NUlIRjFZV3hwWm1sbFpDQndZWFJvSUc5bUlIUm9aU0JtDQphV3hsSUhSdklHSmxJR1J2ZDI1c2IyRmtaV1FOQ2dscFppZ29KRmRwYms1VUlDWWdLQ1JVY21GdWMyWmxja1pwYkdVZ1BYNGdiUzllDQpYRng4WGk0Nkx5a3BJSHdOQ2drSktDRWtWMmx1VGxRZ0ppQW9KRlJ5WVc1elptVnlSbWxzWlNBOWZpQnRMMTVjTHk4cEtTa2dJeUJ3DQpZWFJvSUdseklHRmljMjlzZFhSbERRb0pldzBLQ1Fra1ZHRnlaMlYwUm1sc1pTQTlJQ1JVY21GdWMyWmxja1pwYkdVN0RRb0pmUTBLDQpDV1ZzYzJVZ0l5QndZWFJvSUdseklISmxiR0YwYVhabERRb0pldzBLQ1FsamFHOXdLQ1JVWVhKblpYUkdhV3hsS1NCcFppZ2tWR0Z5DQpaMlYwUm1sc1pTQTlJQ1JEZFhKeVpXNTBSR2x5S1NBOWZpQnRMMXRjWEZ3dlhTUXZPdzBLQ1Fra1ZHRnlaMlYwUm1sc1pTQXVQU0FrDQpVR0YwYUZObGNDNGtWSEpoYm5ObVpYSkdhV3hsT3cwS0NYME5DZzBLQ1dsbUtDUlBjSFJwYjI1eklHVnhJQ0puYnlJcElDTWdkMlVnDQphR0YyWlNCMGJ5QnpaVzVrSUhSb1pTQm1hV3hsRFFvSmV3MEtDUWttVTJWdVpFWnBiR1ZVYjBKeWIzZHpaWElvSkZSaGNtZGxkRVpwDQpiR1VwT3cwS0NYME5DZ2xsYkhObElDTWdkMlVnYUdGMlpTQjBieUJ6Wlc1a0lHOXViSGtnZEdobElHeHBibXNnY0dGblpRMEtDWHNODQpDZ2tKSmxCeWFXNTBSRzkzYm14dllXUk1hVzVyVUdGblpTZ2tWR0Z5WjJWMFJtbHNaU2s3RFFvSmZRMEtmUTBLRFFvakxTMHRMUzB0DQpMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0DQpMUzB0TFMwdExTMHRMUzB0TFMwdERRb2pJRlJvYVhNZ1puVnVZM1JwYjI0Z2FYTWdZMkZzYkdWa0lIZG9aVzRnZEdobElIVnpaWElnDQpkMkZ1ZEhNZ2RHOGdkWEJzYjJGa0lHRWdabWxzWlM0Z1NXWWdkR2hsRFFvaklHWnBiR1VnYVhNZ2JtOTBJSE53WldOcFptbGxaQ3dnDQphWFFnWkdsemNHeGhlWE1nWVNCbWIzSnRJR0ZzYkc5M2FXNW5JSFJvWlNCMWMyVnlJSFJ2SUhOd1pXTnBabmtnWVEwS0l5Qm1hV3hsDQpMQ0J2ZEdobGNuZHBjMlVnYVhRZ2MzUmhjblJ6SUhSb1pTQjFjR3h2WVdRZ2NISnZZMlZ6Y3k0TkNpTXRMUzB0TFMwdExTMHRMUzB0DQpMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0DQpMUzB0TFMwdExTME5Dbk4xWWlCVmNHeHZZV1JHYVd4bERRcDdEUW9KSXlCcFppQnVieUJtYVd4bElHbHpJSE53WldOcFptbGxaQ3dnDQpjSEpwYm5RZ2RHaGxJSFZ3Ykc5aFpDQm1iM0p0SUdGbllXbHVEUW9KYVdZb0pGUnlZVzV6Wm1WeVJtbHNaU0JsY1NBaUlpa05DZ2w3DQpEUW9KQ1NaUWNtbHVkRkJoWjJWSVpXRmtaWElvSW1ZaUtUc05DZ2tKSmxCeWFXNTBSbWxzWlZWd2JHOWhaRVp2Y20wN0RRb0pDU1pRDQpjbWx1ZEZCaFoyVkdiMjkwWlhJN0RRb0pDWEpsZEhWeWJqc05DZ2w5RFFvSkpsQnlhVzUwVUdGblpVaGxZV1JsY2lnaVl5SXBPdzBLDQpEUW9KSXlCemRHRnlkQ0IwYUdVZ2RYQnNiMkZrYVc1bklIQnliMk5sYzNNTkNnbHdjbWx1ZENBaVZYQnNiMkZrYVc1bklDUlVjbUZ1DQpjMlpsY2tacGJHVWdkRzhnSkVOMWNuSmxiblJFYVhJdUxpNDhZbkkrSWpzTkNnMEtDU01nWjJWMElIUm9aU0JtZFd4c2JIa2djWFZoDQpiR2xtYVdWa0lIQmhkR2h1WVcxbElHOW1JSFJvWlNCbWFXeGxJSFJ2SUdKbElHTnlaV0YwWldRTkNnbGphRzl3S0NSVVlYSm5aWFJPDQpZVzFsS1NCcFppQW9KRlJoY21kbGRFNWhiV1VnUFNBa1EzVnljbVZ1ZEVScGNpa2dQWDRnYlM5YlhGeGNMMTBrTHpzTkNna2tWSEpoDQpibk5tWlhKR2FXeGxJRDErSUcwaEtGdGVMMTVjWEYwcUtTUWhPdzBLQ1NSVVlYSm5aWFJPWVcxbElDNDlJQ1JRWVhSb1UyVndMaVF4DQpPdzBLRFFvSkpGUmhjbWRsZEVacGJHVlRhWHBsSUQwZ2JHVnVaM1JvS0NScGJuc25abWxzWldSaGRHRW5mU2s3RFFvSkl5QnBaaUIwDQphR1VnWm1sc1pTQmxlR2x6ZEhNZ1lXNWtJSGRsSUdGeVpTQnViM1FnYzNWd2NHOXpaV1FnZEc4Z2IzWmxjbmR5YVhSbElHbDBEUW9KDQphV1lvTFdVZ0pGUmhjbWRsZEU1aGJXVWdKaVlnSkU5d2RHbHZibk1nYm1VZ0ltOTJaWEozY21sMFpTSXBEUW9KZXcwS0NRbHdjbWx1DQpkQ0FpUm1GcGJHVmtPaUJFWlhOMGFXNWhkR2x2YmlCbWFXeGxJR0ZzY21WaFpIa2daWGhwYzNSekxqeGljajRpT3cwS0NYME5DZ2xsDQpiSE5sSUNNZ1ptbHNaU0JwY3lCdWIzUWdjSEpsYzJWdWRBMEtDWHNOQ2drSmFXWW9iM0JsYmloVlVFeFBRVVJHU1V4RkxDQWlQaVJVDQpZWEpuWlhST1lXMWxJaWtwRFFvSkNYc05DZ2tKQ1dKcGJtMXZaR1VvVlZCTVQwRkVSa2xNUlNrZ2FXWWdKRmRwYms1VU93MEtDUWtKDQpjSEpwYm5RZ1ZWQk1UMEZFUmtsTVJTQWthVzU3SjJacGJHVmtZWFJoSjMwN0RRb0pDUWxqYkc5elpTaFZVRXhQUVVSR1NVeEZLVHNODQpDZ2tKQ1hCeWFXNTBJQ0pVY21GdWMyWmxjbVZrSUNSVVlYSm5aWFJHYVd4bFUybDZaU0JDZVhSbGN5NDhZbkkrSWpzTkNna0pDWEJ5DQphVzUwSUNKR2FXeGxJRkJoZEdnNklDUlVZWEpuWlhST1lXMWxQR0p5UGlJN0RRb0pDWDBOQ2drSlpXeHpaUTBLQ1FsN0RRb0pDUWx3DQpjbWx1ZENBaVJtRnBiR1ZrT2lBa0lUeGljajRpT3cwS0NRbDlEUW9KZlEwS0NYQnlhVzUwSUNJaU93MEtDU1pRY21sdWRFTnZiVzFoDQpibVJNYVc1bFNXNXdkWFJHYjNKdE93MEtEUW9KSmxCeWFXNTBVR0ZuWlVadmIzUmxjanNOQ24wTkNnMEtJeTB0TFMwdExTMHRMUzB0DQpMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0DQpMUzB0TFMwdExTMHRMUTBLSXlCVWFHbHpJR1oxYm1OMGFXOXVJR2x6SUdOaGJHeGxaQ0IzYUdWdUlIUm9aU0IxYzJWeUlIZGhiblJ6DQpJSFJ2SUdSdmQyNXNiMkZrSUdFZ1ptbHNaUzRnU1dZZ2RHaGxEUW9qSUdacGJHVnVZVzFsSUdseklHNXZkQ0J6Y0dWamFXWnBaV1FzDQpJR2wwSUdScGMzQnNZWGx6SUdFZ1ptOXliU0JoYkd4dmQybHVaeUIwYUdVZ2RYTmxjaUIwYnlCemNHVmphV1o1SUdFTkNpTWdabWxzDQpaU3dnYjNSb1pYSjNhWE5sSUdsMElHUnBjM0JzWVhseklHRWdiV1Z6YzJGblpTQjBieUIwYUdVZ2RYTmxjaUJoYm1RZ2NISnZkbWxrDQpaWE1nWVNCc2FXNXJEUW9qSUhSb2NtOTFaMmdnSUhkb2FXTm9JSFJvWlNCbWFXeGxJR05oYmlCaVpTQmtiM2R1Ykc5aFpHVmtMZzBLDQpJeTB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0DQpMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFEwS2MzVmlJRVJ2ZDI1c2IyRmtSbWxzWlEwS2V3MEtDU01nYVdZZ2JtOGdabWxzDQpaU0JwY3lCemNHVmphV1pwWldRc0lIQnlhVzUwSUhSb1pTQmtiM2R1Ykc5aFpDQm1iM0p0SUdGbllXbHVEUW9KYVdZb0pGUnlZVzV6DQpabVZ5Um1sc1pTQmxjU0FpSWlrTkNnbDdEUW9KQ1NaUWNtbHVkRkJoWjJWSVpXRmtaWElvSW1ZaUtUc05DZ2tKSmxCeWFXNTBSbWxzDQpaVVJ2ZDI1c2IyRmtSbTl5YlRzTkNna0pKbEJ5YVc1MFVHRm5aVVp2YjNSbGNqc05DZ2tKY21WMGRYSnVPdzBLQ1gwTkNna05DZ2tqDQpJR2RsZENCbWRXeHNlU0J4ZFdGc2FXWnBaV1FnY0dGMGFDQnZaaUIwYUdVZ1ptbHNaU0IwYnlCaVpTQmtiM2R1Ykc5aFpHVmtEUW9KDQphV1lvS0NSWGFXNU9WQ0FtSUNna1ZISmhibk5tWlhKR2FXeGxJRDErSUcwdlhseGNmRjR1T2k4cEtTQjhEUW9KQ1NnaEpGZHBiazVVDQpJQ1lnS0NSVWNtRnVjMlpsY2tacGJHVWdQWDRnYlM5ZVhDOHZLU2twSUNNZ2NHRjBhQ0JwY3lCaFluTnZiSFYwWlEwS0NYc05DZ2tKDQpKRlJoY21kbGRFWnBiR1VnUFNBa1ZISmhibk5tWlhKR2FXeGxPdzBLQ1gwTkNnbGxiSE5sSUNNZ2NHRjBhQ0JwY3lCeVpXeGhkR2wyDQpaUTBLQ1hzTkNna0pZMmh2Y0Nna1ZHRnlaMlYwUm1sc1pTa2dhV1lvSkZSaGNtZGxkRVpwYkdVZ1BTQWtRM1Z5Y21WdWRFUnBjaWtnDQpQWDRnYlM5YlhGeGNMMTBrTHpzTkNna0pKRlJoY21kbGRFWnBiR1VnTGowZ0pGQmhkR2hUWlhBdUpGUnlZVzV6Wm1WeVJtbHNaVHNODQpDZ2w5RFFvTkNnbHBaaWdrVDNCMGFXOXVjeUJsY1NBaVoyOGlLU0FqSUhkbElHaGhkbVVnZEc4Z2MyVnVaQ0IwYUdVZ1ptbHNaUTBLDQpDWHNOQ2drSkpsTmxibVJHYVd4bFZHOUNjbTkzYzJWeUtDUlVZWEpuWlhSR2FXeGxLVHNOQ2dsOURRb0paV3h6WlNBaklIZGxJR2hoDQpkbVVnZEc4Z2MyVnVaQ0J2Ym14NUlIUm9aU0JzYVc1cklIQmhaMlVOQ2dsN0RRb0pDU1pRY21sdWRFUnZkMjVzYjJGa1RHbHVhMUJoDQpaMlVvSkZSaGNtZGxkRVpwYkdVcE93MEtDWDBOQ24wTkNnMEtJeTB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0DQpMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFEwS0l5Qk5ZV2x1DQpJRkJ5YjJkeVlXMGdMU0JGZUdWamRYUnBiMjRnVTNSaGNuUnpJRWhsY21VTkNpTXRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0DQpMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzBODQpDaVpTWldGa1VHRnljMlU3RFFvbVIyVjBRMjl2YTJsbGN6c05DZzBLSkZOamNtbHdkRXh2WTJGMGFXOXVJRDBnSkVWT1Zuc25VME5TDQpTVkJVWDA1QlRVVW5mVHNOQ2lSVFpYSjJaWEpPWVcxbElEMGdKRVZPVm5zblUwVlNWa1ZTWDA1QlRVVW5mVHNOQ2lSTWIyZHBibEJoDQpjM04zYjNKa0lEMGdKR2x1ZXlkd0ozMDdEUW9rVW5WdVEyOXRiV0Z1WkNBOUlDUnBibnNuWXlkOU93MEtKRlJ5WVc1elptVnlSbWxzDQpaU0E5SUNScGJuc25aaWQ5T3cwS0pFOXdkR2x2Ym5NZ1BTQWthVzU3SjI4bmZUc05DZzBLSkVGamRHbHZiaUE5SUNScGJuc25ZU2Q5DQpPdzBLSkVGamRHbHZiaUE5SUNKc2IyZHBiaUlnYVdZb0pFRmpkR2x2YmlCbGNTQWlJaWs3SUNNZ2JtOGdZV04wYVc5dUlITndaV05wDQpabWxsWkN3Z2RYTmxJR1JsWm1GMWJIUU5DZzBLSXlCblpYUWdkR2hsSUdScGNtVmpkRzl5ZVNCcGJpQjNhR2xqYUNCMGFHVWdZMjl0DQpiV0Z1WkhNZ2QybHNiQ0JpWlNCbGVHVmpkWFJsWkEwS0pFTjFjbkpsYm5SRWFYSWdQU0FrYVc1N0oyUW5mVHNOQ21Ob2IzQW9KRU4xDQpjbkpsYm5SRWFYSWdQU0JnSkVOdFpGQjNaR0FwSUdsbUtDUkRkWEp5Wlc1MFJHbHlJR1Z4SUNJaUtUc05DZzBLSkV4dloyZGxaRWx1DQpJRDBnSkVOdmIydHBaWE43SjFOQlZrVkVVRmRFSjMwZ1pYRWdKRkJoYzNOM2IzSmtPdzBLRFFwcFppZ2tRV04wYVc5dUlHVnhJQ0pzDQpiMmRwYmlJZ2ZId2dJU1JNYjJkblpXUkpiaWtnSXlCMWMyVnlJRzVsWldSekwyaGhjeUIwYnlCc2IyZHBiZzBLZXcwS0NTWlFaWEptDQpiM0p0VEc5bmFXNDdEUW9OQ24wTkNtVnNjMmxtS0NSQlkzUnBiMjRnWlhFZ0ltTnZiVzFoYm1RaUtTQWpJSFZ6WlhJZ2QyRnVkSE1nDQpkRzhnY25WdUlHRWdZMjl0YldGdVpBMEtldzBLQ1NaRmVHVmpkWFJsUTI5dGJXRnVaRHNOQ24wTkNtVnNjMmxtS0NSQlkzUnBiMjRnDQpaWEVnSW5Wd2JHOWhaQ0lwSUNNZ2RYTmxjaUIzWVc1MGN5QjBieUIxY0d4dllXUWdZU0JtYVd4bERRcDdEUW9KSmxWd2JHOWhaRVpwDQpiR1U3RFFwOURRcGxiSE5wWmlna1FXTjBhVzl1SUdWeElDSmtiM2R1Ykc5aFpDSXBJQ01nZFhObGNpQjNZVzUwY3lCMGJ5QmtiM2R1DQpiRzloWkNCaElHWnBiR1VOQ25zTkNna21SRzkzYm14dllXUkdhV3hsT3cwS2ZRMEtaV3h6YVdZb0pFRmpkR2x2YmlCbGNTQWliRzluDQpiM1YwSWlrZ0l5QjFjMlZ5SUhkaGJuUnpJSFJ2SUd4dloyOTFkQTBLZXcwS0NTWlFaWEptYjNKdFRHOW5iM1YwT3cwS2ZRPT0nOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZmlsZSA9IGZvcGVuKCJpem8uY2luIiwgIncrIik7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR3cml0ZSA9IGZ3cml0ZSgkZmlsZSwgYmFzZTY0X2RlY29kZSgkY2dpc2hlbGxpem9jaW4pKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmNsb3NlKCRmaWxlKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2htb2QoIml6by5jaW4iLCAwNzU1KTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG5ldGNhdHNoZWxsID0gJ0l5RXZkWE55TDJKcGJpOXdaWEpzRFFvZ0lDQWdJQ0IxYzJVZ1UyOWphMlYwT3cwS0lDQWdJQ0FnY0hKcGJuUWdJa1JoZEdFZ1EyaGgNCk1ITWdRMjl1Ym1WamRDQkNZV05ySUVKaFkydGtiMjl5WEc1Y2JpSTdEUW9nSUNBZ0lDQnBaaUFvSVNSQlVrZFdXekJkS1NCN0RRb2cNCklDQWdJQ0FnSUhCeWFXNTBaaUFpVlhOaFoyVTZJQ1F3SUZ0SWIzTjBYU0E4VUc5eWRENWNiaUk3RFFvZ0lDQWdJQ0FnSUdWNGFYUW8NCk1TazdEUW9nSUNBZ0lDQjlEUW9nSUNBZ0lDQndjbWx1ZENBaVd5cGRJRVIxYlhCcGJtY2dRWEpuZFcxbGJuUnpYRzRpT3cwS0lDQWcNCklDQWdKR2h2YzNRZ1BTQWtRVkpIVmxzd1hUc05DaUFnSUNBZ0lDUndiM0owSUQwZ09EQTdEUW9nSUNBZ0lDQnBaaUFvSkVGU1IxWmINCk1WMHBJSHNOQ2lBZ0lDQWdJQ0FnSkhCdmNuUWdQU0FrUVZKSFZsc3hYVHNOQ2lBZ0lDQWdJSDBOQ2lBZ0lDQWdJSEJ5YVc1MElDSmINCktsMGdRMjl1Ym1WamRHbHVaeTR1TGx4dUlqc05DaUFnSUNBZ0lDUndjbTkwYnlBOUlHZGxkSEJ5YjNSdllubHVZVzFsS0NkMFkzQW4NCktTQjhmQ0JrYVdVb0lsVnVhMjV2ZDI0Z1VISnZkRzlqYjJ4Y2JpSXBPdzBLSUNBZ0lDQWdjMjlqYTJWMEtGTkZVbFpGVWl3Z1VFWmYNClNVNUZWQ3dnVTA5RFMxOVRWRkpGUVUwc0lDUndjbTkwYnlrZ2ZId2daR2xsSUNnaVUyOWphMlYwSUVWeWNtOXlYRzRpS1RzTkNpQWcNCklDQWdJRzE1SUNSMFlYSm5aWFFnUFNCcGJtVjBYMkYwYjI0b0pHaHZjM1FwT3cwS0lDQWdJQ0FnYVdZZ0tDRmpiMjV1WldOMEtGTkYNClVsWkZVaXdnY0dGamF5QWlVMjVCTkhnNElpd2dNaXdnSkhCdmNuUXNJQ1IwWVhKblpYUXBLU0I3RFFvZ0lDQWdJQ0FnSUdScFpTZ2kNClZXNWhZbXhsSUhSdklFTnZibTVsWTNSY2JpSXBPdzBLSUNBZ0lDQWdmUTBLSUNBZ0lDQWdjSEpwYm5RZ0lsc3FYU0JUY0dGM2JtbHUNClp5QlRhR1ZzYkZ4dUlqc05DaUFnSUNBZ0lHbG1JQ2doWm05eWF5Z2dLU2tnZXcwS0lDQWdJQ0FnSUNCdmNHVnVLRk5VUkVsT0xDSSsNCkpsTkZVbFpGVWlJcE93MEtJQ0FnSUNBZ0lDQnZjR1Z1S0ZOVVJFOVZWQ3dpUGlaVFJWSldSVklpS1RzTkNpQWdJQ0FnSUNBZ2IzQmwNCmJpaFRWRVJGVWxJc0lqNG1VMFZTVmtWU0lpazdEUW9nSUNBZ0lDQWdJR1Y0WldNZ2V5Y3ZZbWx1TDNOb0ozMGdKeTFpWVhOb0p5QXUNCklDSmNNQ0lnZUNBME93MEtJQ0FnSUNBZ0lDQmxlR2wwS0RBcE93MEtJQ0FnSUNBZ2ZRMEtJQ0FnSUNBZ2NISnBiblFnSWxzcVhTQkUNCllYUmhZMmhsWkZ4dVhHNGlPdz09JzsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGZpbGUgPSBmb3BlbigiZGMucGwiLCAidysiKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHdyaXRlID0gZndyaXRlKCRmaWxlLCBiYXNlNjRfZGVjb2RlKCRuZXRjYXRzaGVsbCkpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmY2xvc2UoJGZpbGUpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaG1vZCgiZGMucGwiLCAwNzU1KTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiPGlmcmFtZSBzcmM9Y2dpdGVsbmV0MS9pem8uY2luIHdpZHRoPTEwMCUgaGVpZ2h0PTEwMCUgZnJhbWVib3JkZXI9MD48L2lmcmFtZT4gIjsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAnPC9kaXY+JzsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRGb290ZXIoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQpmdW5jdGlvbiBhY3Rpb25QU3ltbGluaygpIHsNCg0KcHJpbnRIZWFkZXIoKTsNCmVjaG8gIiA8IGNlbnRlciA+ICI7ICAgDQoNCgkkdGVsbmV0ZmlsZSA9ICd0ZWxuZXQyMTMnOyAvLyBQZXJsIHRvb2xzIGZpbGUNCgkNCgkkbGluayA9ICJodHRwOiAvL3d3dy50aGUtY29kZS50ay9waGgiOyAvLyBUb29scyBzb3VyY2UgbGluayAod2l0aG91dCBzbGFzaCAnLycgaW4gZW5kKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcGVybGZpbGVzID0gYXJyYXkoIi5odGFjY2VzcyIsICJ1c2Vycy5naWYiLCAiaXpvLmdpZiIsICJjb25maWcuZ2lmIik7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRuYW1lID0gYmFzZW5hbWUoJF9TRVJWRVJbJ1BIUF9TRUxGJ10pOyAvLyBSZXR1cm5zIHRyYWlsaW5nIG5hbWUgY29tcG9uZW50IG9mIHBhdGguDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR1cmwwID0gImh0dHA6Ly8kX1NFUlZFUltIVFRQX0hPU1RdJF9TRVJWRVJbUkVRVUVTVF9VUkldIjsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHVybCA9IHN0cl9yZXBsYWNlKCIkbmFtZSIsICcnLCAkdXJsMCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFN0eWxlIDoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiPGgzPi0gUEVSTCBUT09MUzo8L2gzPiI7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZmlsZV9leGlzdHMoJHRlbG5ldGZpbGUpKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAbWtkaXIoJHRlbG5ldGZpbGUpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGNobW9kKCIkdGVsbmV0ZmlsZSIsIDA3NTUpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaWxlX2V4aXN0cygkdGVsbmV0ZmlsZSkpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRwZXJsZmlsZXMgYXMgJGZpbGUpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdG9vbCA9IGZvcGVuKCIkdGVsbmV0ZmlsZS8kZmlsZSIsICJ3KyIpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChAZXJlZ2koJ2h0YWNjZXNzJywgJGZpbGUpKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRmaWxlID0gc3RyX3JlcGxhY2UoIi4iLCAnJywgJGZpbGUpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdG9vbGNvbnRlbnRzID0gQGZpbGVfZ2V0X2NvbnRlbnRzKCIkbGluay9wZXJsLyRmaWxlLnR4dCIpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR3cml0ZSA9IGZ3cml0ZSgkdG9vbCwgJHRvb2xjb250ZW50cyk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmNsb3NlKCR0b29sKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHdyaXRlKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChAZXJlZ2koJ2h0YWNjZXNzJywgJGZpbGUpKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZmlsZSA9ICIuJGZpbGUiOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIjxmb250IGNvbG9yPSM5Njk2OTY+VGhlIDxiPiRmaWxlPC9iPiBGaWxlIFdhcyBDcmVhdGVkIFN1Y2Nlc3NmdWx5Lj09PjxhIGhyZWY9JyR1cmwvJHRlbG5ldGZpbGUvJGZpbGUnIHRhcmdldD0nX2JsYW5rJz48dT4kZmlsZTwvdT48L2E+PC9mb250Pjxicj4iOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIjxmb250IGNvbG9yPXJlZD5FUlJPUjogQ2Fubm90IENyZWF0ZSA8Yj4kZmlsZTwvYj4gRmlsZSAhISA8L2ZvbnQ+PGJyPiI7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBjaG1vZCgiJHRlbG5ldGZpbGUvJGZpbGUiLCAwNzU1KTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludEZvb3RlcigpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0JCQkJCQkJCQkJCQkJCQkJDQpmdW5jdGlvbiBhY3Rpb25EZWZhY2UoKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50SGVhZGVyKCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIjxoMT5TaW5nbGUgVXNlciBNYXNzIERlZmFjZTwvaDE+PGRpdiBjbGFzcz1jb250ZW50PiI7DQo/Pg0KPGZvcm0gRU5DVFlQRT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSIgYWN0aW9uPSI8PyRfU0VSVkVSWydQSFBfU0VMRiddPz4iIG1ldGhvZD1QT1NUIG9uU3VibWl0PSJnKG51bGwsbnVsbCx0aGlzLnBhdGgudmFsdWUsdGhpcy5maWxlLnZhbHVlLHRoaXMuQ29udGVudHMudmFsdWUpO3JldHVybiBmYWxzZTsiPg0KPHAgYWxpZ249IkxlZnQiPkZvbGRlcjogPGlucHV0IHR5cGU9dGV4dCBuYW1lPXBhdGggc2l6ZT02MCB2YWx1ZT0iPD89Z2V0Y3dkKCk7ID8+Ij4NCjxicj5maWxlIG5hbWUgOiA8aW5wdXQgdHlwZT10ZXh0IG5hbWU9ZmlsZSBzaXplPTIwIHZhbHVlPSJNYWZpYS5odG1sIj4NCjxicj5UZXh0IENvbnRlbnQgOiA8aW5wdXQgdHlwZT10ZXh0IG5hbWU9Q29udGVudHMgc2l6ZT0yMCB2YWx1ZT0iSGFja2VkIGJ5IE1hZmlhIEJveSI+IA0KPGJyPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0iVXBkYXRlIj48L3A+PC9mb3JtPg0KDQo8P3BocA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJF9QT1NUWydhJ10gPT0gJ0RlZmFjZScpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRtYWlucGF0aCA9ICRfUE9TVFtwMV07DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZmlsZSA9ICRfUE9TVFtwMl07DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdHh0Q29udGVudHMgPSAkX1BPU1RbcDNdOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08YnI+DQpbK10gU2luZ2xlIHVzZXIgTWFzcyBkZWZhY2VyPGJyPg0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08YnI+PGJyPiAiOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGRpciA9IG9wZW5kaXIoJG1haW5wYXRoKTsgLy9maXhtZSAtIGNhbm5vdCBkZWZhY2Ugd2hlbiBjaGFuZ2UgdG8gd3JpdGVhYmxlIHBhdGghIQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCRyb3cgPSByZWFkZGlyKCRkaXIpKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHN0YXJ0ID0gQGZvcGVuKCIkcm93LyRmaWxlIiwgIncrIik7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGNvZGUgPSAkdHh0Q29udGVudHM7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGZpbmlzaCA9IEBmd3JpdGUoJHN0YXJ0LCAkY29kZSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRmaW5pc2gpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiJHJvdy8kZmlsZSA+IERvbmU8YnI+PGJyPiI7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08YnI+PGJyPlsrXSBTY3JpcHQgYnkgRUBHTDMgU1RSIUszUiBbK10iOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gJzwvZGl2Pic7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50Rm9vdGVyKCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KCQkJCQkJCQkJCQkJCQkJCWZ1bmN0aW9uIGFjdGlvblpIcG9zdGVyKCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludEhlYWRlcigpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICc8aDE+Wm9uZS1IIFBvc3RlcjwvaDE+PGRpdiBjbGFzcz1jb250ZW50Pic7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gJzxmb3JtIGFjdGlvbj0iIiBtZXRob2Q9InBvc3QiIG9uU3VibWl0PWRhMihudWxsLG51bGwsdGhpcy5wMS52YWx1ZSx0aGlzLnAyLnZhbHVlLHRoaXMucDMudmFsdWUsdGhpcy5wNC52YWx1ZSk7cmV0dXJuIHRydWU7Ij4NCjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJwMSIgc2l6ZT0iNDAiIHZhbHVlPSJBdHRhY2tlciIgLz48L2JyPg0KPHNlbGVjdCBuYW1lPSJwMiI+DQo8b3B0aW9uID4tLS0tLS0tLVNFTEVDVC0tLS0tLS0tPC9vcHRpb24+DQo8b3B0aW9uIHZhbHVlPSIxIj5rbm93biB2dWxuZXJhYmlsaXR5IChpLmUuIHVucGF0Y2hlZCBzeXN0ZW0pPC9vcHRpb24+DQo8b3B0aW9uIHZhbHVlPSIyIiA+dW5kaXNjbG9zZWQgKG5ldykgdnVsbmVyYWJpbGl0eTwvb3B0aW9uPg0KPG9wdGlvbiB2YWx1ZT0iMyIgPmNvbmZpZ3VyYXRpb24gLyBhZG1pbi4gbWlzdGFrZTwvb3B0aW9uPg0KPG9wdGlvbiB2YWx1ZT0iNCIgPmJydXRlIGZvcmNlIGF0dGFjazwvb3B0aW9uPg0KPG9wdGlvbiB2YWx1ZT0iNSIgPnNvY2lhbCBlbmdpbmVlcmluZzwvb3B0aW9uPg0KPG9wdGlvbiB2YWx1ZT0iNiIgPldlYiBTZXJ2ZXIgaW50cnVzaW9uPC9vcHRpb24+DQo8b3B0aW9uIHZhbHVlPSI3IiA+V2ViIFNlcnZlciBleHRlcm5hbCBtb2R1bGUgaW50cnVzaW9uPC9vcHRpb24+DQo8b3B0aW9uIHZhbHVlPSI4IiA+TWFpbCBTZXJ2ZXIgaW50cnVzaW9uPC9vcHRpb24+DQo8b3B0aW9uIHZhbHVlPSI5IiA+RlRQIFNlcnZlciBpbnRydXNpb248L29wdGlvbj4NCjxvcHRpb24gdmFsdWU9IjEwIiA+U1NIIFNlcnZlciBpbnRydXNpb248L29wdGlvbj4NCjxvcHRpb24gdmFsdWU9IjExIiA+VGVsbmV0IFNlcnZlciBpbnRydXNpb248L29wdGlvbj4NCjxvcHRpb24gdmFsdWU9IjEyIiA+UlBDIFNlcnZlciBpbnRydXNpb248L29wdGlvbj4NCjxvcHRpb24gdmFsdWU9IjEzIiA+U2hhcmVzIG1pc2NvbmZpZ3VyYXRpb248L29wdGlvbj4NCjxvcHRpb24gdmFsdWU9IjE0IiA+T3RoZXIgU2VydmVyIGludHJ1c2lvbjwvb3B0aW9uPg0KPG9wdGlvbiB2YWx1ZT0iMTUiID5TUUwgSW5qZWN0aW9uPC9vcHRpb24+DQo8b3B0aW9uIHZhbHVlPSIxNiIgPlVSTCBQb2lzb25pbmc8L29wdGlvbj4NCjxvcHRpb24gdmFsdWU9IjE3IiA+RmlsZSBJbmNsdXNpb248L29wdGlvbj4NCjxvcHRpb24gdmFsdWU9IjE4IiA+T3RoZXIgV2ViIEFwcGxpY2F0aW9uIGJ1Zzwvb3B0aW9uPg0KPG9wdGlvbiB2YWx1ZT0iMTkiID5SZW1vdGUgYWRtaW5pc3RyYXRpdmUgcGFuZWwgYWNjZXNzIGJydXRlZm9yY2luZzwvb3B0aW9uPg0KPG9wdGlvbiB2YWx1ZT0iMjAiID5SZW1vdGUgYWRtaW5pc3RyYXRpdmUgcGFuZWwgYWNjZXNzIHBhc3N3b3JkIGd1ZXNzaW5nPC9vcHRpb24+DQo8b3B0aW9uIHZhbHVlPSIyMSIgPlJlbW90ZSBhZG1pbmlzdHJhdGl2ZSBwYW5lbCBhY2Nlc3Mgc29jaWFsIGVuZ2luZWVyaW5nPC9vcHRpb24+DQo8b3B0aW9uIHZhbHVlPSIyMiIgPkF0dGFjayBhZ2FpbnN0IGFkbWluaXN0cmF0b3IocGFzc3dvcmQgc3RlYWxpbmcvc25pZmZpbmcpPC9vcHRpb24+DQo8b3B0aW9uIHZhbHVlPSIyMyIgPkFjY2VzcyBjcmVkZW50aWFscyB0aHJvdWdoIE1hbiBJbiB0aGUgTWlkZGxlIGF0dGFjazwvb3B0aW9uPg0KPG9wdGlvbiB2YWx1ZT0iMjQiID5SZW1vdGUgc2VydmljZSBwYXNzd29yZCBndWVzc2luZzwvb3B0aW9uPg0KPG9wdGlvbiB2YWx1ZT0iMjUiID5SZW1vdGUgc2VydmljZSBwYXNzd29yZCBicnV0ZWZvcmNlPC9vcHRpb24+DQo8b3B0aW9uIHZhbHVlPSIyNiIgPlJlcm91dGluZyBhZnRlciBhdHRhY2tpbmcgdGhlIEZpcmV3YWxsPC9vcHRpb24+DQo8b3B0aW9uIHZhbHVlPSIyNyIgPlJlcm91dGluZyBhZnRlciBhdHRhY2tpbmcgdGhlIFJvdXRlcjwvb3B0aW9uPg0KPG9wdGlvbiB2YWx1ZT0iMjgiID5ETlMgYXR0YWNrIHRocm91Z2ggc29jaWFsIGVuZ2luZWVyaW5nPC9vcHRpb24+DQo8b3B0aW9uIHZhbHVlPSIyOSIgPkROUyBhdHRhY2sgdGhyb3VnaCBjYWNoZSBwb2lzb25pbmc8L29wdGlvbj4NCjxvcHRpb24gdmFsdWU9IjMwIiA+Tm90IGF2YWlsYWJsZTwvb3B0aW9uPg0KPC9zZWxlY3Q+DQo8L2JyPg0KPHNlbGVjdCBuYW1lPSJwMyI+DQo8b3B0aW9uID4tLS0tLS0tLVNFTEVDVC0tLS0tLS0tPC9vcHRpb24+DQo8b3B0aW9uIHZhbHVlPSIxIiA+SGVoLi4uanVzdCBmb3IgZnVuITwvb3B0aW9uPg0KPG9wdGlvbiB2YWx1ZT0iMiIgPlJldmVuZ2UgYWdhaW5zdCB0aGF0IHdlYnNpdGU8L29wdGlvbj4NCjxvcHRpb24gdmFsdWU9IjMiID5Qb2xpdGljYWwgcmVhc29uczwvb3B0aW9uPg0KPG9wdGlvbiB2YWx1ZT0iNCIgPkFzIGEgY2hhbGxlbmdlPC9vcHRpb24+DQo8b3B0aW9uIHZhbHVlPSI1IiA+SSBqdXN0IHdhbnQgdG8gYmUgdGhlIGJlc3QgZGVmYWNlcjwvb3B0aW9uPg0KPG9wdGlvbiB2YWx1ZT0iNiIgPlBhdHJpb3Rpc208L29wdGlvbj4NCjxvcHRpb24gdmFsdWU9IjciID5Ob3QgYXZhaWxhYmxlPC9vcHRpb24+DQo8L3NlbGVjdD4NCjwvYnI+DQo8dGV4dGFyZWEgbmFtZT0icDQiIGNvbHM9IjQ0IiByb3dzPSI5Ij5MaXN0IE9mIERvbWFpbnM8L3RleHRhcmVhPg0KPGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9IlNlbmQgTm93ICEiIC8+DQo8L2Zvcm0+JzsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiPC90ZD48L3RyPjwvdGFibGU+PC9mb3JtPiI7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkX1BPU1RbJ2EnXSA9PSAnWkhwb3N0ZXInKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYl9zdGFydCgpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHN1YiA9IEBnZXRfbG9hZGVkX2V4dGVuc2lvbnMoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaW5fYXJyYXkoImN1cmwiLCAkc3ViKSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpZSgnWy1dIEN1cmwgSXMgTm90IFN1cHBvcnRlZCAhISAnKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRoYWNrZXI5ID0gJF9QT1NUWydwMSddOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG1ldGhvZDkgPSAkX1BPU1RbJ3AyJ107DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbmVkZW45ID0gJF9QT1NUWydwMyddOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNpdGU5ID0gJF9QT1NUWydwNCddOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVtcHR5KCRoYWNrZXI5KSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpZSgiWy1dIFlvdSBNdXN0IEZpbGwgdGhlIEF0dGFja2VyIG5hbWUgISIpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlaWYgKCRtZXRob2Q5ID09ICItLS0tLS0tLVNFTEVDVC0tLS0tLS0tIikgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpZSgiWy1dIFlvdSBNdXN0IFNlbGVjdCBUaGUgTWV0aG9kICEiKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZWlmICgkbmVkZW45ID09ICItLS0tLS0tLVNFTEVDVC0tLS0tLS0tIikgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpZSgiWy1dIFlvdSBNdXN0IFNlbGVjdCBUaGUgUmVhc29uIik7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2VpZiAoZW1wdHkoJHNpdGU5KSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpZSgiWy1dIFlvdSBNdXN0IEludGVyIHRoZSBTaXRlcyBMaXN0ICEgIik7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaSA9IDA7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc2l0ZXMgPSBleHBsb2RlKCINCiIsICRzaXRlOSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoJGkgPCBjb3VudCgkc2l0ZXMpKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN1YnN0cigkc2l0ZXNbJGldLCAwLCA0KSAhPSAiaHR0cCIpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNpdGVzWyRpXSA9ICJodHRwOi8vIiAuICRzaXRlc1skaV07DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFpvbmVIKCJodHRwOi8vem9uZS1oLm9yZy9ub3RpZnkvc2luZ2xlIiwgJGhhY2tlcjksICRtZXRob2Q5LCAkbmVkZW45LCAkc2l0ZXNbJGldKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICJTaXRlIDogIiAuICRzaXRlc1skaV0gLiAiIERlZmFjZWQgISA8L2JyPiI7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyskaTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIlsrXSBTZW5kaW5nIFNpdGVzIFRvIFpvbmUtSCBIYXMgQmVlbiBDb21wbGV0ZWQgU3VjY2Vzc2Z1bGx5ICEhICI7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAnPC9kaXYnOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludEZvb3RlcigpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCmZ1bmN0aW9uIGFjdGlvbmxmaXNjYW4oKSB7DQogICAgICAgIHByaW50SGVhZGVyKCk7DQogICAgICAgIHByaW50ICcNCiAgICAgICA8aDM+TEZJIEZpbGUgZHVtcGVyIEJ5IEVAR0wzIFNUUiFLM1I8L2gzPg0KICAgICANCiAgICAgICA8Zm9ybSBtZXRob2Q9InBvc3QiIGFjdGlvbj0iPyI+PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iYSIgdmFsdWU9ImxmaXNjYW4iPg0KICAgICAgICAgIExGSSBVUkw6IDxpbnB1dCB0eXBlPSJ0ZXh0IiBzaXplPSI2MCIgbmFtZT0ibGZpdXJsIiB2YWx1ZT0iIj4gPGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9IkdvIj4gRmlsZTogPHNlbGVjdCBuYW1lPSJzY2FudHlwZSI+DQogICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iMSI+DQogICAgICAgICAgICAgICAgQWNjZXNzIExvZw0KICAgICAgICAgICAgIDwvb3B0aW9uPg0KICAgICANCiAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIyIj4NCiAgICAgICAgICAgICAgICBodHRwZC5jb25mDQogICAgICAgICAgICAgPC9vcHRpb24+DQogICAgIA0KICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjMiPg0KICAgICAgICAgICAgICAgIEVycm9yIExvZw0KICAgICAgICAgICAgIDwvb3B0aW9uPg0KICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjQiPg0KICAgICAgICAgICAgICAgIHBocC5pbmkNCiAgICAgICAgICAgICA8L29wdGlvbj4NCiAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSI1Ij4NCiAgICAgICAgICAgICAgICBNeVNRTA0KICAgICAgICAgICAgIDwvb3B0aW9uPg0KICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjYiPg0KICAgICAgICAgICAgICAgIEZUUA0KICAgICAgICAgICAgIDwvb3B0aW9uPg0KICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjciPg0KICAgICAgICAgICAgICAgIEVudmlyb24NCiAgICAgICAgICAgICA8L29wdGlvbj4NCiAgICAgICAgICA8L3NlbGVjdD4gTnVsbDogPHNlbGVjdCBuYW1lPSJudWxsIj4NCiAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIlMDAiPg0KICAgICAgICAgICAgICAgIFllcw0KICAgICAgICAgICAgIDwvb3B0aW9uPg0KICAgICANCiAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIiPg0KICAgICAgICAgICAgICAgIE5vDQogICAgICAgICAgICAgPC9vcHRpb24+DQogICAgICAgICAgPC9zZWxlY3Q+IFVzZXItQWdlbnQ6IDxpbnB1dCB0eXBlPSJ0ZXh0IiBzaXplPSIyMCIgbmFtZT0iY3VzdG9tX2hlYWRlciIgdmFsdWU9IiI+DQogICAgICAgPC9mb3JtPic7DQogICAgICAgZXJyb3JfcmVwb3J0aW5nKDApOw0KICAgICAgICAgIGlmKCRfUE9TVFsnbGZpdXJsJ10pIHsNCiAgICAgICAgICAgICBwcmludCAiPHByZT4iOw0KICAgICAgICAgICAgICRjaGVhZGVyID0gJF9QT1NUWydjdXN0b21faGVhZGVyJ107DQogICAgICAgICAgICAgJHRhcmdldCA9ICRfUE9TVFsnbGZpdXJsJ107DQogICAgICAgICAgICAgJHR5cGUgPSAkX1BPU1RbJ3NjYW50eXBlJ107DQogICAgICAgICAgICAgJGJ5dGUxID0gJF9QT1NUWydudWxsJ107DQogICAgICAgICAgICAgJGxmaXRlc3QgPSAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vZXRjL3Bhc3N3ZCIuJGJ5dGUxLiIiOw0KICAgICAgICAgICAgICRsZml0ZXN0MiA9ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9mYWtlL2ZpbGUiLiRieXRlMS4iIjsNCiAgICAgICAgICAgICAkbGZpcHJvY2VudiA9ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9jL2Vudmlyb24iLiRieXRlMS4iIjsNCiAgICAgICAgICAgICAkbGZpYWNjZXNzID0gYXJyYXkoDQogICAgICAgICAgICAgICAgMSA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vYXBhY2hlL2xvZ3MvYWNjZXNzLmxvZyIuJGJ5dGUxLiIiLA0KICAgICAgICAgICAgICAgIDIgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2V0Yy9odHRwZC9sb2dzL2FjY2VzX2xvZyIuJGJ5dGUxLiIiLA0KICAgICAgICAgICAgICAgIDMgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2V0Yy9odHRwZC9sb2dzL2FjY2VzLmxvZyIuJGJ5dGUxLiIiLA0KICAgICAgICAgICAgICAgIDQgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Zhci93d3cvbG9ncy9hY2Nlc3NfbG9nIi4kYnl0ZTEuIiIsDQogICAgICAgICAgICAgICAgNSA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdmFyL3d3dy9sb2dzL2FjY2Vzcy5sb2ciLiRieXRlMS4iIiwNCiAgICAgICAgICAgICAgICA2ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi91c3IvbG9jYWwvYXBhY2hlL2xvZ3MvYWNjZXNzX2xvZyIuJGJ5dGUxLiIiLA0KICAgICAgICAgICAgICAgIDcgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Vzci9sb2NhbC9hcGFjaGUvbG9ncy9hY2Nlc3MubG9nIi4kYnl0ZTEuIiIsDQogICAgICAgICAgICAgICAgOCA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdmFyL2xvZy9hcGFjaGUvYWNjZXNzX2xvZyIuJGJ5dGUxLiIiLA0KICAgICAgICAgICAgICAgIDkgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Zhci9sb2cvYXBhY2hlMi9hY2Nlc3NfbG9nIi4kYnl0ZTEuIiIsDQogICAgICAgICAgICAgICAgMTAgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Zhci9sb2cvYXBhY2hlL2FjY2Vzcy5sb2ciLiRieXRlMS4iIiwNCiAgICAgICAgICAgICAgICAxMSA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdmFyL2xvZy9hcGFjaGUyL2FjY2Vzcy5sb2ciLiRieXRlMS4iIiwNCiAgICAgICAgICAgICAgICAxMiA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdmFyL2xvZy9hY2Nlc3NfbG9nIi4kYnl0ZTEuIiIsDQogICAgICAgICAgICAgICAgMTMgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Zhci9sb2cvYWNjZXNzLmxvZyIuJGJ5dGUxLiIiLA0KICAgICAgICAgICAgICAgIDE0ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi92YXIvbG9nL2h0dHBkL2FjY2Vzc19sb2ciLiRieXRlMS4iIiwNCiAgICAgICAgICAgICAgICAxNSA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vYXBhY2hlMi9sb2dzL2FjY2Vzcy5sb2ciLiRieXRlMS4iIiwNCiAgICAgICAgICAgICAgICAxNiA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbG9ncy9hY2Nlc3MubG9nIi4kYnl0ZTEuIiIsDQogICAgICAgICAgICAgICAgMTcgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Vzci9sb2NhbC9hcGFjaGUyL2xvZ3MvYWNjZXNzX2xvZyIuJGJ5dGUxLiIiLA0KICAgICAgICAgICAgICAgIDE4ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi91c3IvbG9jYWwvYXBhY2hlMi9sb2dzL2FjY2Vzcy5sb2ciLiRieXRlMS4iIiwNCiAgICAgICAgICAgICAgICAxOSA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdmFyL2xvZy9odHRwZC9hY2Nlc3MubG9nIi4kYnl0ZTEuIiIsDQogICAgICAgICAgICAgICAgMjAgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL29wdC9sYW1wcC9sb2dzL2FjY2Vzc19sb2ciLiRieXRlMS4iIiwNCiAgICAgICAgICAgICAgICAyMSA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3B0L3hhbXBwL2xvZ3MvYWNjZXNzX2xvZyIuJGJ5dGUxLiIiLA0KICAgICAgICAgICAgICAgIDIyID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9vcHQvbGFtcHAvbG9ncy9hY2Nlc3MubG9nIi4kYnl0ZTEuIiIsDQogICAgICAgICAgICAgICAgMjMgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL29wdC94YW1wcC9sb2dzL2FjY2Vzcy5sb2ciLiRieXRlMS4iIik7DQogICAgICAgICAgIA0KICAgICAgICAgICAgICRsZmllcnJvciA9IGFycmF5KA0KICAgICAgICAgICAgICAgIDEgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2FwYWNoZS9sb2dzL2Vycm9yLmxvZyIuJGJ5dGUxLiIiLA0KICAgICAgICAgICAgICAgIDIgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2V0Yy9odHRwZC9sb2dzL2Vycm9yX2xvZyIuJGJ5dGUxLiIiLA0KICAgICAgICAgICAgICAgIDMgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2V0Yy9odHRwZC9sb2dzL2Vycm9yLmxvZyIuJGJ5dGUxLiIiLA0KICAgICAgICAgICAgICAgIDQgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Zhci93d3cvbG9ncy9lcnJvcl9sb2ciLiRieXRlMS4iIiwNCiAgICAgICAgICAgICAgICA1ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi92YXIvd3d3L2xvZ3MvZXJyb3IubG9nIi4kYnl0ZTEuIiIsDQogICAgICAgICAgICAgICAgNiA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdXNyL2xvY2FsL2FwYWNoZS9sb2dzL2Vycm9yX2xvZyIuJGJ5dGUxLiIiLA0KICAgICAgICAgICAgICAgIDcgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Vzci9sb2NhbC9hcGFjaGUvbG9ncy9lcnJvci5sb2ciLiRieXRlMS4iIiwNCiAgICAgICAgICAgICAgICA4ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi92YXIvbG9nL2FwYWNoZS9lcnJvcl9sb2ciLiRieXRlMS4iIiwNCiAgICAgICAgICAgICAgICA5ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi92YXIvbG9nL2FwYWNoZTIvZXJyb3JfbG9nIi4kYnl0ZTEuIiIsDQogICAgICAgICAgICAgICAgMTAgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Zhci9sb2cvYXBhY2hlL2Vycm9yLmxvZyIuJGJ5dGUxLiIiLA0KICAgICAgICAgICAgICAgIDExID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi92YXIvbG9nL2FwYWNoZTIvZXJyb3IubG9nIi4kYnl0ZTEuIiIsDQogICAgICAgICAgICAgICAgMTIgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Zhci9sb2cvZXJyb3JfbG9nIi4kYnl0ZTEuIiIsDQogICAgICAgICAgICAgICAgMTMgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Zhci9sb2cvZXJyb3IubG9nIi4kYnl0ZTEuIiIsDQogICAgICAgICAgICAgICAgMTQgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Zhci9sb2cvaHR0cGQvZXJyb3JfbG9nIi4kYnl0ZTEuIiIsDQogICAgICAgICAgICAgICAgMTUgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2FwYWNoZTIvbG9ncy9lcnJvci5sb2ciLiRieXRlMS4iIiwNCiAgICAgICAgICAgICAgICAxNiA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbG9ncy9lcnJvci5sb2ciLiRieXRlMS4iIiwNCiAgICAgICAgICAgICAgICAxNyA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdXNyL2xvY2FsL2FwYWNoZTIvbG9ncy9lcnJvcl9sb2ciLiRieXRlMS4iIiwNCiAgICAgICAgICAgICAgICAxOCA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdXNyL2xvY2FsL2FwYWNoZTIvbG9ncy9lcnJvci5sb2ciLiRieXRlMS4iIiwNCiAgICAgICAgICAgICAgICAxOSA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdmFyL2xvZy9odHRwZC9lcnJvci5sb2ciLiRieXRlMS4iIiwNCiAgICAgICAgICAgICAgICAyMCA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3B0L2xhbXBwL2xvZ3MvZXJyb3JfbG9nIi4kYnl0ZTEuIiIsDQogICAgICAgICAgICAgICAgMjEgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL29wdC94YW1wcC9sb2dzL2Vycm9yX2xvZyIuJGJ5dGUxLiIiLA0KICAgICAgICAgICAgICAgIDIyID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9vcHQvbGFtcHAvbG9ncy9lcnJvci5sb2ciLiRieXRlMS4iIiwNCiAgICAgICAgICAgICAgICAyMyA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3B0L3hhbXBwL2xvZ3MvZXJyb3IubG9nIi4kYnl0ZTEuIiIpOw0KICAgICANCiAgICAgICAgICAgICAkbGZpY29uZmlnID0gYXJyYXkoDQogICAgICAgICAgICAgICAgMSA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdXNyL2xvY2FsL2FwYWNoZS9jb25mL2h0dHBkLmNvbmYiLiRieXRlMS4iIiwNCiAgICAgICAgICAgICAgICAyID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi91c3IvbG9jYWwvYXBhY2hlMi9jb25mL2h0dHBkLmNvbmYiLiRieXRlMS4iIiwNCiAgICAgICAgICAgICAgICAzID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9ldGMvaHR0cGQvY29uZi9odHRwZC5jb25mIi4kYnl0ZTEuIiIsDQogICAgICAgICAgICAgICAgNCA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vZXRjL2FwYWNoZS9jb25mL2h0dHBkLmNvbmYiLiRieXRlMS4iIiwNCiAgICAgICAgICAgICAgICA1ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi91c3IvbG9jYWwvZXRjL2FwYWNoZS9jb25mL2h0dHBkLmNvbmYiLiRieXRlMS4iIiwNCiAgICAgICAgICAgICAgICA2ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9ldGMvYXBhY2hlMi9odHRwZC5jb25mIi4kYnl0ZTEuIiIsDQogICAgICAgICAgICAgICAgNyA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdXNyL2xvY2FsL2FwYWNoZS9odHRwZC5jb25mIi4kYnl0ZTEuIiIsDQogICAgICAgICAgICAgICAgOCA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdXNyL2xvY2FsL2FwYWNoZTIvaHR0cGQuY29uZiIuJGJ5dGUxLiIiLA0KICAgICAgICAgICAgICAgIDkgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Vzci9sb2NhbC9odHRwZC9jb25mL2h0dHBkLmNvbmYiLiRieXRlMS4iIiwNCiAgICAgICAgICAgICAgICAxMCA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdXNyL2xvY2FsL2V0Yy9hcGFjaGUyL2NvbmYvaHR0cGQuY29uZiIuJGJ5dGUxLiIiLA0KICAgICAgICAgICAgICAgIDExID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi91c3IvbG9jYWwvZXRjL2h0dHBkL2NvbmYvaHR0cGQuY29uZiIuJGJ5dGUxLiIiLA0KICAgICAgICAgICAgICAgIDEyID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi91c3IvYXBhY2hlMi9jb25mL2h0dHBkLmNvbmYiLiRieXRlMS4iIiwNCiAgICAgICAgICAgICAgICAxMyA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdXNyL2FwYWNoZS9jb25mL2h0dHBkLmNvbmYiLiRieXRlMS4iIiwNCiAgICAgICAgICAgICAgICAxNCA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdXNyL2xvY2FsL2FwcHMvYXBhY2hlMi9jb25mL2h0dHBkLmNvbmYiLiRieXRlMS4iIiwNCiAgICAgICAgICAgICAgICAxNSA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdXNyL2xvY2FsL2FwcHMvYXBhY2hlL2NvbmYvaHR0cGQuY29uZiIuJGJ5dGUxLiIiLA0KICAgICAgICAgICAgICAgIDE2ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9ldGMvYXBhY2hlMi9jb25mL2h0dHBkLmNvbmYiLiRieXRlMS4iIiwNCiAgICAgICAgICAgICAgICAxNyA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vZXRjL2h0dHAvY29uZi9odHRwZC5jb25mIi4kYnl0ZTEuIiIsDQogICAgICAgICAgICAgICAgMTggPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2V0Yy9odHRwZC9odHRwZC5jb25mIi4kYnl0ZTEuIiIsDQogICAgICAgICAgICAgICAgMTkgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2V0Yy9odHRwL2h0dHBkLmNvbmYiLiRieXRlMS4iIiwNCiAgICAgICAgICAgICAgICAyMCA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vZXRjL2h0dHBkLmNvbmYiLiRieXRlMS4iIiwNCiAgICAgICAgICAgICAgICAyMSA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3B0L2FwYWNoZS9jb25mL2h0dHBkLmNvbmYiLiRieXRlMS4iIiwNCiAgICAgICAgICAgICAgICAyMiA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3B0L2FwYWNoZTIvY29uZi9odHRwZC5jb25mIi4kYnl0ZTEuIiIsDQogICAgICAgICAgICAgICAgMjMgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Zhci93d3cvY29uZi9odHRwZC5jb25mIi4kYnl0ZTEuIiIsDQogICAgICAgICAgICAgICAgMjQgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3ByaXZhdGUvZXRjL2h0dHBkL2h0dHBkLmNvbmYiLiRieXRlMS4iIiwNCiAgICAgICAgICAgICAgICAyNSA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJpdmF0ZS9ldGMvaHR0cGQvaHR0cGQuY29uZi5kZWZhdWx0Ii4kYnl0ZTEuIiIsDQogICAgICAgICAgICAgICAgMjYgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL1ZvbHVtZXMvd2ViQmFja3VwL29wdC9hcGFjaGUyL2NvbmYvaHR0cGQuY29uZiIuJGJ5dGUxLiIiLA0KICAgICAgICAgICAgICAgIDI3ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9Wb2x1bWVzL3dlYkJhY2t1cC9wcml2YXRlL2V0Yy9odHRwZC9odHRwZC5jb25mIi4kYnl0ZTEuIiIsDQogICAgICAgICAgICAgICAgMjggPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL1ZvbHVtZXMvd2ViQmFja3VwL3ByaXZhdGUvZXRjL2h0dHBkL2h0dHBkLmNvbmYuZGVmYXVsdCIuJGJ5dGUxLiIiLA0KICAgICAgICAgICAgICAgIDI5ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi91c3IvbG9jYWwvcGhwL2h0dHBkLmNvbmYucGhwIi4kYnl0ZTEuIiIsDQogICAgICAgICAgICAgICAgMzAgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Vzci9sb2NhbC9waHA0L2h0dHBkLmNvbmYucGhwIi4kYnl0ZTEuIiIsDQogICAgICAgICAgICAgICAgMzEgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Vzci9sb2NhbC9waHA1L2h0dHBkLmNvbmYucGhwIi4kYnl0ZTEuIiIsDQogICAgICAgICAgICAgICAgMzIgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Vzci9sb2NhbC9waHAvaHR0cGQuY29uZiIuJGJ5dGUxLiIiLA0KICAgICAgICAgICAgICAgIDMzID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi91c3IvbG9jYWwvcGhwNC9odHRwZC5jb25mIi4kYnl0ZTEuIiIsDQogICAgICAgICAgICAgICAgMzQgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Vzci9sb2NhbC9waHA1L2h0dHBkLmNvbmYiLiRieXRlMS4iIiwNCiAgICAgICAgICAgICAgICAzNSA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdXNyL2xvY2FsL2V0Yy9hcGFjaGUvdmhvc3RzLmNvbmYiLiRieXRlMS4iIik7DQogICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICRsZmlwaHBpbmkgPSBhcnJheSgNCiAgICAgICAgICAgICAgICAxID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9ldGMvcGhwLmluaSIuJGJ5dGUxLiIiLA0KICAgICAgICAgICAgICAgIDIgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2Jpbi9waHAuaW5pIi4kYnl0ZTEuIiIsDQogICAgICAgICAgICAgICAgMyA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vZXRjL2h0dHBkL3BocC5pbmkiLiRieXRlMS4iIiwNCiAgICAgICAgICAgICAgICA0ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi91c3IvbGliL3BocC5pbmkiLiRieXRlMS4iIiwNCiAgICAgICAgICAgICAgICA1ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi91c3IvbGliL3BocC9waHAuaW5pIi4kYnl0ZTEuIiIsDQogICAgICAgICAgICAgICAgNiA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdXNyL2xvY2FsL2V0Yy9waHAuaW5pIi4kYnl0ZTEuIiIsDQogICAgICAgICAgICAgICAgNyA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdXNyL2xvY2FsL2xpYi9waHAuaW5pIi4kYnl0ZTEuIiIsDQogICAgICAgICAgICAgICAgOCA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdXNyL2xvY2FsL3BocC9saWIvcGhwLmluaSIuJGJ5dGUxLiIiLA0KICAgICAgICAgICAgICAgIDkgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Vzci9sb2NhbC9waHA0L2xpYi9waHAuaW5pIi4kYnl0ZTEuIiIsDQogICAgICAgICAgICAgICAgMTAgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Vzci9sb2NhbC9waHA1L2xpYi9waHAuaW5pIi4kYnl0ZTEuIiIsDQogICAgICAgICAgICAgICAgMTEgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Vzci9sb2NhbC9hcGFjaGUvY29uZi9waHAuaW5pIi4kYnl0ZTEuIiIsDQogICAgICAgICAgICAgICAgMTIgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2V0Yy9waHA0LjQvZmNnaS9waHAuaW5pIi4kYnl0ZTEuIiIsDQogICAgICAgICAgICAgICAgMTMgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2V0Yy9waHA0L2FwYWNoZS9waHAuaW5pIi4kYnl0ZTEuIiIsDQogICAgICAgICAgICAgICAgMTQgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2V0Yy9waHA0L2FwYWNoZTIvcGhwLmluaSIuJGJ5dGUxLiIiLA0KICAgICAgICAgICAgICAgIDE1ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9ldGMvcGhwNS9hcGFjaGUvcGhwLmluaSIuJGJ5dGUxLiIiLA0KICAgICAgICAgICAgICAgIDE2ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9ldGMvcGhwNS9hcGFjaGUyL3BocC5pbmkiLiRieXRlMS4iIiwNCiAgICAgICAgICAgICAgICAxNyA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vZXRjL3BocC9waHAuaW5pIi4kYnl0ZTEuIiIsDQogICAgICAgICAgICAgICAgMTggPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2V0Yy9waHAvcGhwNC9waHAuaW5pIi4kYnl0ZTEuIiIsDQogICAgICAgICAgICAgICAgMTkgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2V0Yy9waHAvYXBhY2hlL3BocC5pbmkiLiRieXRlMS4iIiwNCiAgICAgICAgICAgICAgICAyMCA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vZXRjL3BocC9hcGFjaGUyL3BocC5pbmkiLiRieXRlMS4iIiwNCiAgICAgICAgICAgICAgICAyMSA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vd2ViL2NvbmYvcGhwLmluaSIuJGJ5dGUxLiIiLA0KICAgICAgICAgICAgICAgIDIyID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi91c3IvbG9jYWwvWmVuZC9ldGMvcGhwLmluaSIuJGJ5dGUxLiIiLA0KICAgICAgICAgICAgICAgIDIzID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9vcHQveGFtcHAvZXRjL3BocC5pbmkiLiRieXRlMS4iIiwNCiAgICAgICAgICAgICAgICAyNCA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdmFyL2xvY2FsL3d3dy9jb25mL3BocC5pbmkiLiRieXRlMS4iIiwNCiAgICAgICAgICAgICAgICAyNSA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vZXRjL3BocC9jZ2kvcGhwLmluaSIuJGJ5dGUxLiIiLA0KICAgICAgICAgICAgICAgIDI2ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9ldGMvcGhwNC9jZ2kvcGhwLmluaSIuJGJ5dGUxLiIiLA0KICAgICAgICAgICAgICAgIDI3ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9ldGMvcGhwNS9jZ2kvcGhwLmluaSIuJGJ5dGUxLiIiKTsNCiAgICAgICAgICAgDQogICAgICAgICAgICAgICRsZmlteXNxbCA9IGFycmF5KA0KICAgICAgICAgICAgICAgIDEgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Zhci9sb2cvbXlzcWwvbXlzcWwtYmluLmxvZyIuJGJ5dGUxLiIiLA0KICAgICAgICAgICAgICAgIDIgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Zhci9sb2cvbXlzcWwubG9nIi4kYnl0ZTEuIiIsDQogICAgICAgICAgICAgICAgMyA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdmFyL2xvZy9teXNxbGRlcnJvci5sb2ciLiRieXRlMS4iIiwNCiAgICAgICAgICAgICAgICA0ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi92YXIvbG9nL215c3FsL215c3FsLmxvZyIuJGJ5dGUxLiIiLA0KICAgICAgICAgICAgICAgIDUgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Zhci9sb2cvbXlzcWwvbXlzcWwtc2xvdy5sb2ciLiRieXRlMS4iIiwNCiAgICAgICAgICAgICAgICA2ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi92YXIvbXlzcWwubG9nIi4kYnl0ZTEuIiIsDQogICAgICAgICAgICAgICAgNyA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdmFyL2xpYi9teXNxbC9teS5jbmYiLiRieXRlMS4iIiwNCiAgICAgICAgICAgICAgICA4ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9ldGMvbXlzcWwvbXkuY25mIi4kYnl0ZTEuIiIsDQogICAgICAgICAgICAgICAgOSA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdmFyL2xvZy9teXNxbGQubG9nIi4kYnl0ZTEuIiIsDQogICAgICAgICAgICAgICAgMTAgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2V0Yy9teS5jbmYiLiRieXRlMS4iIik7DQogICAgICAgICAgIA0KICAgICAgICAgICAgICAkbGZpZnRwID0gYXJyYXkoDQogICAgICAgICAgICAgICAgMSA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vZXRjL2xvZ3JvdGF0ZS5kL3Byb2Z0cGQiLiRieXRlMS4iIiwNCiAgICAgICAgICAgICAgICAyID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi93d3cvbG9ncy9wcm9mdHBkLnN5c3RlbS5sb2ciLiRieXRlMS4iIiwNCiAgICAgICAgICAgICAgICAzID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi92YXIvbG9nL3Byb2Z0cGQiLiRieXRlMS4iIiwNCiAgICAgICAgICAgICAgICA0ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9ldGMvcHJvZnRwLmNvbmYiLiRieXRlMS4iIiwNCiAgICAgICAgICAgICAgICA1ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9ldGMvcHJvdHBkL3Byb2Z0cGQuY29uZiIuJGJ5dGUxLiIiLA0KICAgICAgICAgICAgICAgIDYgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2V0Yy92aGNzMi9wcm9mdHBkL3Byb2Z0cGQuY29uZiIuJGJ5dGUxLiIiLA0KICAgICAgICAgICAgICAgIDcgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2V0Yy9wcm9mdHBkL21vZHVsZXMuY29uZiIuJGJ5dGUxLiIiLA0KICAgICAgICAgICAgICAgIDggPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Zhci9sb2cvdnNmdHBkLmxvZyIuJGJ5dGUxLiIiLA0KICAgICAgICAgICAgICAgIDkgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2V0Yy92c2Z0cGQuY2hyb290X2xpc3QiLiRieXRlMS4iIiwNCiAgICAgICAgICAgICAgICAxMCA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vZXRjL2xvZ3JvdGF0ZS5kL3ZzZnRwZC5sb2ciLiRieXRlMS4iIiwNCiAgICAgICAgICAgICAgICAxMSA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vZXRjL3ZzZnRwZC92c2Z0cGQuY29uZiIuJGJ5dGUxLiIiLA0KICAgICAgICAgICAgICAgIDEyID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9ldGMvdnNmdHBkLmNvbmYiLiRieXRlMS4iIiwNCiAgICAgICAgICAgICAgICAxMyA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vZXRjL2Nocm9vdFVzZXJzIi4kYnl0ZTEuIiIsDQogICAgICAgICAgICAgICAgMTQgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Zhci9sb2cveGZlcmxvZyIuJGJ5dGUxLiIiLA0KICAgICAgICAgICAgICAgIDE1ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi92YXIvYWRtL2xvZy94ZmVybG9nIi4kYnl0ZTEuIiIsDQogICAgICAgICAgICAgICAgMTYgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2V0Yy93dS1mdHBkL2Z0cGFjY2VzcyIuJGJ5dGUxLiIiLA0KICAgICAgICAgICAgICAgIDE3ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9ldGMvd3UtZnRwZC9mdHBob3N0cyIuJGJ5dGUxLiIiLA0KICAgICAgICAgICAgICAgIDE4ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9ldGMvd3UtZnRwZC9mdHB1c2VycyIuJGJ5dGUxLiIiLA0KICAgICAgICAgICAgICAgIDE5ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi91c3Ivc2Jpbi9wdXJlLWNvbmZpZy5wbCIuJGJ5dGUxLiIiLA0KICAgICAgICAgICAgICAgIDIwID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi91c3IvZXRjL3B1cmUtZnRwZC5jb25mIi4kYnl0ZTEuIiIsDQogICAgICAgICAgICAgICAgMjEgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2V0Yy9wdXJlLWZ0cGQvcHVyZS1mdHBkLmNvbmYiLiRieXRlMS4iIiwNCiAgICAgICAgICAgICAgICAyMiA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdXNyL2xvY2FsL2V0Yy9wdXJlLWZ0cGQuY29uZiIuJGJ5dGUxLiIiLA0KICAgICAgICAgICAgICAgIDIzID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi91c3IvbG9jYWwvZXRjL3B1cmVmdHBkLnBkYiIuJGJ5dGUxLiIiLA0KICAgICAgICAgICAgICAgIDI0ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi91c3IvbG9jYWwvcHVyZWZ0cGQvZXRjL3B1cmVmdHBkLnBkYiIuJGJ5dGUxLiIiLA0KICAgICAgICAgICAgICAgIDI1ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi91c3IvbG9jYWwvcHVyZWZ0cGQvc2Jpbi9wdXJlLWNvbmZpZy5wbCIuJGJ5dGUxLiIiLA0KICAgICAgICAgICAgICAgIDI2ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi91c3IvbG9jYWwvcHVyZWZ0cGQvZXRjL3B1cmUtZnRwZC5jb25mIi4kYnl0ZTEuIiIsDQogICAgICAgICAgICAgICAgMjcgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2V0Yy9wdXJlLWZ0cGQuY29uZiIuJGJ5dGUxLiIiLA0KICAgICAgICAgICAgICAgIDI4ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9ldGMvcHVyZS1mdHBkL3B1cmUtZnRwZC5wZGIiLiRieXRlMS4iIiwNCiAgICAgICAgICAgICAgICAyOSA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vZXRjL3B1cmVmdHBkLnBkYiIuJGJ5dGUxLiIiLA0KICAgICAgICAgICAgICAgIDMwID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9ldGMvcHVyZWZ0cGQucGFzc3dkIi4kYnl0ZTEuIiIsDQogICAgICAgICAgICAgICAgMzEgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2V0Yy9wdXJlLWZ0cGQvcHVyZWZ0cGQucGRiIi4kYnl0ZTEuIiIsDQogICAgICAgICAgICAgICAgMzIgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Vzci9wb3J0cy9mdHAvcHVyZS1mdHBkLyIuJGJ5dGUxLiIiLA0KICAgICAgICAgICAgICAgIDMzID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi91c3IvcG9ydHMvbmV0L3B1cmUtZnRwZC8iLiRieXRlMS4iIiwNCiAgICAgICAgICAgICAgICAzNCA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdXNyL3BrZ3NyYy9uZXQvcHVyZWZ0cGQvIi4kYnl0ZTEuIiIsDQogICAgICAgICAgICAgICAgMzUgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Vzci9wb3J0cy9jb250cmliL3B1cmUtZnRwZC8iLiRieXRlMS4iIiwNCiAgICAgICAgICAgICAgICAzNiA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdmFyL2xvZy9wdXJlLWZ0cGQvcHVyZS1mdHBkLmxvZyIuJGJ5dGUxLiIiLA0KICAgICAgICAgICAgICAgIDM3ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9sb2dzL3B1cmUtZnRwZC5sb2ciLiRieXRlMS4iIiwNCiAgICAgICAgICAgICAgICAzOCA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdmFyL2xvZy9wdXJlZnRwZC5sb2ciLiRieXRlMS4iIiwNCiAgICAgICAgICAgICAgICAzOSA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdmFyL2xvZy9mdHAtcHJveHkvZnRwLXByb3h5LmxvZyIuJGJ5dGUxLiIiLA0KICAgICAgICAgICAgICAgIDQwID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi92YXIvbG9nL2Z0cC1wcm94eSIuJGJ5dGUxLiIiLA0KICAgICAgICAgICAgICAgIDQxID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi92YXIvbG9nL2Z0cGxvZyIuJGJ5dGUxLiIiLA0KICAgICAgICAgICAgICAgIDQyID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9ldGMvbG9ncm90YXRlLmQvZnRwIi4kYnl0ZTEuIiIsDQogICAgICAgICAgICAgICAgNDMgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2V0Yy9mdHBjaHJvb3QiLiRieXRlMS4iIiwNCiAgICAgICAgICAgICAgICA0NCA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vZXRjL2Z0cGhvc3RzIi4kYnl0ZTEuIiIpOw0KICAgICAgICAgICANCiAgICAgDQogICAgICAgICAgICAgJHggPSAxOw0KICAgICAgICAgICAgIGlmICggJHR5cGUgPT0gMSApIHsNCiAgICAgICAgICAgICAgICAkcmVzMSA9IEZldGNoVVJMKCR0YXJnZXQuJGxmaXRlc3QpOw0KICAgICAgICAgICAgICAgICRyZXMyID0gRmV0Y2hVUkwoJHRhcmdldC4kbGZpdGVzdDIpOw0KICAgICAgICAgICAgICAgICRyaGFzaDEgPSBtZDUoJHJlczEpOw0KICAgICAgICAgICAgICAgICRyaGFzaDIgPSBtZDUoJHJlczIpOw0KICAgICAgICAgICAgICAgIGlmICgkcmhhc2gxICE9ICRyaGFzaDIpIHsNCiAgICAgICAgICAgICAgICAgICAgcHJpbnQgIjxmb250IGNvbG9yPSdncmVlbic+WytdIEV4cGxvaXRhYmxlITwvZm9udD4gPGEgaHJlZj1cIiIuJHRhcmdldC4iIi4kbGZpdGVzdC4iXCI+Ii4kdGFyZ2V0LiIiLiRsZml0ZXN0LiI8L2E+PGJyICAvPiI7DQogICAgICAgICAgICAgICAgd2hpbGUoJGxmaWFjY2Vzc1skeF0pIHsNCiAgICAgICAgICAgICAgICAgICAgJHJlczMgPSBGZXRjaFVSTCgkdGFyZ2V0LiRsZmlhY2Nlc3NbJHhdKTsNCiAgICAgICAgICAgICAgICAgICAgJHJoYXNoMyA9IG1kNSgkcmVzMyk7DQogICAgICAgICAgICAgICAgICAgIGlmICgkcmhhc2gzICE9ICRyaGFzaDIpIHsNCiAgICAgICAgICAgICAgICAgICAgcHJpbnQgIjxmb250IGNvbG9yPSdncmVlbic+WytdIEZpbGUgZGV0ZWN0ZWQhPC9mb250PiA8YSBocmVmPVwiIi4kdGFyZ2V0LiIiLiRsZmlhY2Nlc3NbJHhdLiJcIj4iLiR0YXJnZXQuIiIuJGxmaWFjY2Vzc1skeF0uIjwvYT48YnIgIC8+IjsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICBlbHNlIHsgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludCAiPGZvbnQgY29sb3I9J3JlZCc+WyFdIEZhaWxlZCE8L2ZvbnQ+Ii4kdGFyZ2V0LiIiLiRsZmlhY2Nlc3NbJHhdLiI8YnIgIC8+IjsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAkeCsrOw0KICAgICAgICAgIH0NCiAgICAgICAgICB9DQogICAgICAgICAgICAgfQ0KICAgICAgICAgICAgIGlmICggJHR5cGUgPT0gMiApIHsNCiAgICAgICAgICAgICAgICAkcmVzMSA9IEZldGNoVVJMKCR0YXJnZXQuJGxmaXRlc3QpOw0KICAgICAgICAgICAgICAgICRyZXMyID0gRmV0Y2hVUkwoJHRhcmdldC4kbGZpdGVzdDIpOw0KICAgICAgICAgICAgICAgICRyaGFzaDEgPSBtZDUoJHJlczEpOw0KICAgICAgICAgICAgICAgICRyaGFzaDIgPSBtZDUoJHJlczIpOw0KICAgICAgICAgICAgICAgIGlmICgkcmhhc2gxICE9ICRyaGFzaDIpIHsNCiAgICAgICAgICAgICAgICAgICAgcHJpbnQgIjxmb250IGNvbG9yPSdncmVlbic+WytdIEV4cGxvaXRhYmxlITwvZm9udD4gPGEgaHJlZj1cIiIuJHRhcmdldC4iIi4kbGZpdGVzdC4iXCI+Ii4kdGFyZ2V0LiIiLiRsZml0ZXN0LiI8L2E+PGJyICAvPiI7DQogICAgICAgICAgICAgICAgd2hpbGUoJGxmaWNvbmZpZ1skeF0pIHsNCiAgICAgICAgICAgICAgICAgICAgJHJlczMgPSBGZXRjaFVSTCgkdGFyZ2V0LiRsZmljb25maWdbJHhdKTsNCiAgICAgICAgICAgICAgICAgICAgJHJoYXNoMyA9IG1kNSgkcmVzMyk7DQogICAgICAgICAgICAgICAgICAgIGlmICgkcmhhc2gzICE9ICRyaGFzaDIpIHsNCiAgICAgICAgICAgICAgICAgICAgcHJpbnQgIjxmb250IGNvbG9yPSdncmVlbic+WytdIEZpbGUgZGV0ZWN0ZWQhPC9mb250PiA8YSBocmVmPVwiIi4kdGFyZ2V0LiIiLiRsZmljb25maWdbJHhdLiJcIj4iLiR0YXJnZXQuIiIuJGxmaWNvbmZpZ1skeF0uIjwvYT48YnIgIC8+IjsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICBlbHNlIHsgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludCAiPGZvbnQgY29sb3I9J3JlZCc+WyFdIEZhaWxlZCE8L2ZvbnQ+Ii4kdGFyZ2V0LiIiLiRsZmljb25maWdbJHhdLiI8YnIgIC8+IjsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAkeCsrOw0KICAgICAgICAgIH0NCiAgICAgICAgICB9DQogICAgICAgICAgICAgfQ0KICAgICAgICAgICAgIGlmICggJHR5cGUgPT0gMyApIHsNCiAgICAgICAgICAgICAgICAkcmVzMSA9IEZldGNoVVJMKCR0YXJnZXQuJGxmaXRlc3QpOw0KICAgICAgICAgICAgICAgICRyZXMyID0gRmV0Y2hVUkwoJHRhcmdldC4kbGZpdGVzdDIpOw0KICAgICAgICAgICAgICAgICRyaGFzaDEgPSBtZDUoJHJlczEpOw0KICAgICAgICAgICAgICAgICRyaGFzaDIgPSBtZDUoJHJlczIpOw0KICAgICAgICAgICAgICAgIGlmICgkcmhhc2gxICE9ICRyaGFzaDIpIHsNCiAgICAgICAgICAgICAgICAgICAgcHJpbnQgIjxmb250IGNvbG9yPSdncmVlbic+WytdIEV4cGxvaXRhYmxlITwvZm9udD4gPGEgaHJlZj1cIiIuJHRhcmdldC4iIi4kbGZpdGVzdC4iXCI+Ii4kdGFyZ2V0LiIiLiRsZml0ZXN0LiI8L2E+PGJyICAvPiI7DQogICAgICAgICAgICAgICAgd2hpbGUoJGxmaWVycm9yWyR4XSkgew0KICAgICAgICAgICAgICAgICAgICAkcmVzMyA9IEZldGNoVVJMKCR0YXJnZXQuJGxmaWVycm9yWyR4XSk7DQogICAgICAgICAgICAgICAgICAgICRyaGFzaDMgPSBtZDUoJHJlczMpOw0KICAgICAgICAgICAgICAgICAgICBpZiAoJHJoYXNoMyAhPSAkcmhhc2gyKSB7DQogICAgICAgICAgICAgICAgICAgIHByaW50ICI8Zm9udCBjb2xvcj0nZ3JlZW4nPlsrXSBGaWxlIGRldGVjdGVkITwvZm9udD4gPGEgaHJlZj1cIiIuJHRhcmdldC4iIi4kbGZpZXJyb3JbJHhdLiJcIj4iLiR0YXJnZXQuIiIuJGxmaWVycm9yWyR4XS4iPC9hPjxiciAgLz4iOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIGVsc2UgeyAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ICI8Zm9udCBjb2xvcj0ncmVkJz5bIV0gRmFpbGVkITwvZm9udD4iLiR0YXJnZXQuIiIuJGxmaWVycm9yWyR4XS4iPGJyICAvPiI7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgJHgrKzsNCiAgICAgICAgICB9DQogICAgICAgICAgfQ0KICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICBpZiAoICR0eXBlID09IDQgKSB7DQogICAgICAgICAgICAgICAgJHJlczEgPSBGZXRjaFVSTCgkdGFyZ2V0LiRsZml0ZXN0KTsNCiAgICAgICAgICAgICAgICAkcmVzMiA9IEZldGNoVVJMKCR0YXJnZXQuJGxmaXRlc3QyKTsNCiAgICAgICAgICAgICAgICAkcmhhc2gxID0gbWQ1KCRyZXMxKTsNCiAgICAgICAgICAgICAgICAkcmhhc2gyID0gbWQ1KCRyZXMyKTsNCiAgICAgICAgICAgICAgICBpZiAoJHJoYXNoMSAhPSAkcmhhc2gyKSB7DQogICAgICAgICAgICAgICAgICAgIHByaW50ICI8Zm9udCBjb2xvcj0nZ3JlZW4nPlsrXSBFeHBsb2l0YWJsZSE8L2ZvbnQ+IDxhIGhyZWY9XCIiLiR0YXJnZXQuIiIuJGxmaXRlc3QuIlwiPiIuJHRhcmdldC4iIi4kbGZpdGVzdC4iPC9hPjxiciAgLz4iOw0KICAgICAgICAgICAgICAgIHdoaWxlKCRsZmlwaHBpbmlbJHhdKSB7DQogICAgICAgICAgICAgICAgICAgICRyZXMzID0gRmV0Y2hVUkwoJHRhcmdldC4kbGZpcGhwaW5pWyR4XSk7DQogICAgICAgICAgICAgICAgICAgICRyaGFzaDMgPSBtZDUoJHJlczMpOw0KICAgICAgICAgICAgICAgICAgICBpZiAoJHJoYXNoMyAhPSAkcmhhc2gyKSB7DQogICAgICAgICAgICAgICAgICAgIHByaW50ICI8Zm9udCBjb2xvcj0nZ3JlZW4nPlsrXSBGaWxlIGRldGVjdGVkITwvZm9udD4gPGEgaHJlZj1cIiIuJHRhcmdldC4iIi4kbGZpcGhwaW5pWyR4XS4iXCI+Ii4kdGFyZ2V0LiIiLiRsZmlwaHBpbmlbJHhdLiI8L2E+PGJyICAvPiI7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgZWxzZSB7ICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgIjxmb250IGNvbG9yPSdyZWQnPlshXSBGYWlsZWQhPC9mb250PiIuJHRhcmdldC4iIi4kbGZpcGhwaW5pWyR4XS4iPGJyICAvPiI7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgJHgrKzsNCiAgICAgICAgICB9DQogICAgICAgICAgfQ0KICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICBpZiAoICR0eXBlID09IDUgKSB7DQogICAgICAgICAgICAgICAgJHJlczEgPSBGZXRjaFVSTCgkdGFyZ2V0LiRsZml0ZXN0KTsNCiAgICAgICAgICAgICAgICAkcmVzMiA9IEZldGNoVVJMKCR0YXJnZXQuJGxmaXRlc3QyKTsNCiAgICAgICAgICAgICAgICAkcmhhc2gxID0gbWQ1KCRyZXMxKTsNCiAgICAgICAgICAgICAgICAkcmhhc2gyID0gbWQ1KCRyZXMyKTsNCiAgICAgICAgICAgICAgICBpZiAoJHJoYXNoMSAhPSAkcmhhc2gyKSB7DQogICAgICAgICAgICAgICAgICAgIHByaW50ICI8Zm9udCBjb2xvcj0nZ3JlZW4nPlsrXSBFeHBsb2l0YWJsZSE8L2ZvbnQ+IDxhIGhyZWY9XCIiLiR0YXJnZXQuIiIuJGxmaXRlc3QuIlwiPiIuJHRhcmdldC4iIi4kbGZpdGVzdC4iPC9hPjxiciAgLz4iOw0KICAgICAgICAgICAgICAgIHdoaWxlKCRsZmlteXNxbFskeF0pIHsNCiAgICAgICAgICAgICAgICAgICAgJHJlczMgPSBGZXRjaFVSTCgkdGFyZ2V0LiRsZmlteXNxbFskeF0pOw0KICAgICAgICAgICAgICAgICAgICAkcmhhc2gzID0gbWQ1KCRyZXMzKTsNCiAgICAgICAgICAgICAgICAgICAgaWYgKCRyaGFzaDMgIT0gJHJoYXNoMikgew0KICAgICAgICAgICAgICAgICAgICBwcmludCAiPGZvbnQgY29sb3I9J2dyZWVuJz5bK10gRmlsZSBkZXRlY3RlZCE8L2ZvbnQ+IDxhIGhyZWY9XCIiLiR0YXJnZXQuIiIuJGxmaW15c3FsWyR4XS4iXCI+Ii4kdGFyZ2V0LiIiLiRsZmlteXNxbFskeF0uIjwvYT48YnIgIC8+IjsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICBlbHNlIHsgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludCAiPGZvbnQgY29sb3I9J3JlZCc+WyFdIEZhaWxlZCE8L2ZvbnQ+Ii4kdGFyZ2V0LiIiLiRsZmlteXNxbFskeF0uIjxiciAgLz4iOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICR4Kys7DQogICAgICAgICAgfQ0KICAgICAgICAgIH0NCiAgICAgICAgICAgICB9DQogICAgICAgICAgICAgaWYgKCAkdHlwZSA9PSA2ICkgew0KICAgICAgICAgICAgICAgICRyZXMxID0gRmV0Y2hVUkwoJHRhcmdldC4kbGZpdGVzdCk7DQogICAgICAgICAgICAgICAgJHJlczIgPSBGZXRjaFVSTCgkdGFyZ2V0LiRsZml0ZXN0Mik7DQogICAgICAgICAgICAgICAgJHJoYXNoMSA9IG1kNSgkcmVzMSk7DQogICAgICAgICAgICAgICAgJHJoYXNoMiA9IG1kNSgkcmVzMik7DQogICAgICAgICAgICAgICAgaWYgKCRyaGFzaDEgIT0gJHJoYXNoMikgew0KICAgICAgICAgICAgICAgICAgICBwcmludCAiPGZvbnQgY29sb3I9J2dyZWVuJz5bK10gRXhwbG9pdGFibGUhPC9mb250PiA8YSBocmVmPVwiIi4kdGFyZ2V0LiIiLiRsZml0ZXN0LiJcIj4iLiR0YXJnZXQuIiIuJGxmaXRlc3QuIjwvYT48YnIgIC8+IjsNCiAgICAgICAgICAgICAgICB3aGlsZSgkbGZpZnRwWyR4XSkgew0KICAgICAgICAgICAgICAgICAgICAkcmVzMyA9IEZldGNoVVJMKCR0YXJnZXQuJGxmaWZ0cFskeF0pOw0KICAgICAgICAgICAgICAgICAgICAkcmhhc2gzID0gbWQ1KCRyZXMzKTsNCiAgICAgICAgICAgICAgICAgICAgaWYgKCRyaGFzaDMgIT0gJHJoYXNoMikgew0KICAgICAgICAgICAgICAgICAgICBwcmludCAiPGZvbnQgY29sb3I9J2dyZWVuJz5bK10gRmlsZSBkZXRlY3RlZCE8L2ZvbnQ+IDxhIGhyZWY9XCIiLiR0YXJnZXQuIiIuJGxmaWZ0cFskeF0uIlwiPiIuJHRhcmdldC4iIi4kbGZpZnRwWyR4XS4iPC9hPjxiciAgLz4iOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIGVsc2UgeyAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ICI8Zm9udCBjb2xvcj0ncmVkJz5bIV0gRmFpbGVkITwvZm9udD4iLiR0YXJnZXQuIiIuJGxmaWZ0cFskeF0uIjxiciAgLz4iOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICR4Kys7DQogICAgICAgICAgfQ0KICAgICAgICAgIH0NCiAgICAgICAgICAgICB9DQogICAgaWYgKCAkdHlwZSA9PSA3ICkgew0KICAgICAgICAgICAgICAgICRyZXMxID0gRmV0Y2hVUkwoJHRhcmdldC4kbGZpdGVzdCk7DQogICAgICAgICAgICAgICAgJHJlczIgPSBGZXRjaFVSTCgkdGFyZ2V0LiRsZml0ZXN0Mik7DQogICAgICAgICAgICAgICAgJHJoYXNoMSA9IG1kNSgkcmVzMSk7DQogICAgICAgICAgICAgICAgJHJoYXNoMiA9IG1kNSgkcmVzMik7DQogICAgICAgICAgICAgICAgaWYgKCRyaGFzaDEgIT0gJHJoYXNoMikgew0KICAgICAgICAgICAgICAgICAgICBwcmludCAiPGZvbnQgY29sb3I9J2dyZWVuJz5bK10gRXhwbG9pdGFibGUhPC9mb250PiA8YSBocmVmPVwiIi4kdGFyZ2V0LiIiLiRsZml0ZXN0LiJcIj4iLiR0YXJnZXQuIiIuJGxmaXRlc3QuIjwvYT48YnIgIC8+Ijt7DQogICAgICAgICAgICAgICAgICAgICRyZXMzID0gRmV0Y2hVUkwoJHRhcmdldC4kbGZpcHJvY2Vudik7DQogICAgICAgICAgICAgICAgICAgICRyaGFzaDMgPSBtZDUoJHJlczMpOw0KICAgICAgICAgICAgICAgICAgICBpZiAoJHJoYXNoMyAhPSAkcmhhc2gyKSB7DQogICAgICAgICAgICAgICAgICAgIHByaW50ICI8Zm9udCBjb2xvcj0nZ3JlZW4nPlsrXSBGaWxlIGRldGVjdGVkITwvZm9udD4gPGEgaHJlZj1cIiIuJHRhcmdldC4iIi4kbGZpcHJvY2Vudi4iXCI+Ii4kdGFyZ2V0LiIiLiRsZmlwcm9jZW52LiI8L2E+PGJyICAvPiI7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgZWxzZSB7ICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgIjxmb250IGNvbG9yPSdyZWQnPlshXSBGYWlsZWQhPC9mb250PiIuJHRhcmdldC4iIi4kbGZpcHJvY2Vudi4iPGJyICAvPiI7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICB9DQogICAgICAgICAgfQ0KICAgICAgICAgICAgIH0NCiAgICAgICAgICB9DQogICAgcHJpbnRGb290ZXIoKTsNCiAgICB9CQkJCQkJCQkJCQkJCQkJCQ0KDQpmdW5jdGlvbiBhY3Rpb25TeW1saW5rKCkgew0KICAgIHByaW50SGVhZGVyKCk7DQogICAgZWNobyAnPGgxPlN5bWxpbms8L2gxPic7DQogICAgJGZ1cmwgPSAnaHR0cDovLycuJF9TRVJWRVJbJ1NFUlZFUl9OQU1FJ10uJF9TRVJWRVJbJ1JFUVVFU1RfVVJJJ107DQogICAgJGV4cGxkID0gZXhwbG9kZSgnLycsJGZ1cmwgKTsNCiAgICAkYnVybCA9c3RyX3JlcGxhY2UoZW5kKCRleHBsZCksJycsJGZ1cmwpOyAgDQogICAgDQogICAgZWNobyAnPGRpdiBjbGFzcz0iY29udGVudCI+PGNlbnRlcj4NCiAgICAgICAgICAgICAgICA8aDM+WyA8YSBocmVmPSIjIiBvbmNsaWNrPSJnKFwnc3ltbGlua1wnLG51bGwsXCd3ZWJzaXRlXCcsbnVsbCkiPkRvbWFpbnM8L2E+IF0gLSANCiAgICAgICAgICAgICAgICAgICAgWyA8YSBocmVmPSIjIiBvbmNsaWNrPSJnKFwnc3ltbGlua1wnLG51bGwsXCd3aG9sZVwnLG51bGwpIj5XaG9sZSBTZXJ2ZXIgU3ltbGluazxzdXAgc3R5bGU9ImNvbG9yOnJlZDt0ZXh0LWRlY29yYXRpb246Ymxpbms7Ij48L3N1cD48L2E+IF0gLSANCiAgICAgICAgICAgICAgICAgICAgWyA8YSBocmVmPSIjIiBvbmNsaWNrPSJnKFwnc3ltbGlua1wnLG51bGwsXCdjb25maWdcJyxudWxsKSI+Q29uZmlnIGZpbGVzIHN5bWxpbms8L2E+IF08L2gzPjwvY2VudGVyPic7DQogICAgDQogICAgaWYoaXNzZXQoJF9QT1NUWydwMSddKSAmJiAkX1BPU1RbJ3AxJ109PSd3ZWJzaXRlJykNCiAgICB7DQogICAgICAgIGVjaG8gIjxjZW50ZXI+IjsNCiAgICAgICAgJGQwbWFpbnMgPSBAZmlsZSgiL2V0Yy9uYW1lZC5jb25mIik7DQogICAgICAgIGlmKCEkZDBtYWlucyl7IA0KICAgICAgICAgICAgZWNobyAiPHByZSBjbGFzcz1tbDEgc3R5bGU9J21hcmdpbi10b3A6NXB4Jz5DYW50IGFjY2VzcyB0aGlzIGZpbGUgb24gc2VydmVyIC0+IFsgL2V0Yy9uYW1lZC5jb25mIF08L3ByZT48L2NlbnRlcj4iOyANCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgIGVjaG8gIjx0YWJsZSBhbGlnbj1jZW50ZXIgY2xhc3M9J21haW4nIGJvcmRlcj0wID48dHI+PHRoPiBDb3VudCA8L3RoPjx0aD4gRG9tYWlucyA8L3RoPjx0aD4gVXNlcnMgPC90aD48L3RyPiI7DQogICAgICAgICAgICANCiAgICAgICAgICAgICR1bmsgPSBhcnJheSgpOw0KICAgICAgICAgICAgZm9yZWFjaCgkZDBtYWlucyBhcyAkZDBtYWluKXsNCiAgICAgICAgICAgICAgICBpZihAZXJlZ2koInpvbmUiLCRkMG1haW4pKXsNCiAgICAgICAgICAgICAgICAgICAgcHJlZ19tYXRjaF9hbGwoJyN6b25lICIoLiopIiMnLCAkZDBtYWluLCAkZG9tYWlucyk7DQogICAgICAgICAgICAgICAgICAgIGZsdXNoKCk7DQogICAgICAgICAgICAgICAgICAgIGlmKHN0cmxlbih0cmltKCRkb21haW5zWzFdWzBdKSkgPiAyKXsNCiAgICAgICAgICAgICAgICAgICAgICAgICR1bmtbXSA9ICRkb21haW5zWzFdWzBdOw0KICAgICAgICAgICAgICAgICAgICAgICAgZmx1c2goKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgJGNvdW50PTE7DQogICAgICAgICAgICAkdW5rID0gYXJyYXlfdW5pcXVlKCR1bmspOw0KICAgICAgICAgICAgJGw9MDsNCiAgICAgICAgICAgIGZvcmVhY2goJHVuayBhcyAkZCl7DQogICAgICAgICAgICAgICAgJHVzZXIgPSBwb3NpeF9nZXRwd3VpZChAZmlsZW93bmVyKCIvZXRjL3ZhbGlhc2VzLyIuJGQpKTsNCiAgICAgICAgICAgICAgICBlY2hvICI8dHIiLigkbD8nIGNsYXNzPWwxJzonJykuIj48dGQ+Ii4kY291bnQuIjwvdGQ+PHRkPjxhIGhyZWY9aHR0cDovLyIuJGQuIi8+Ii4kZC4iPC9hPjwvdGQ+PHRkPiIuJHVzZXJbJ25hbWUnXS4iPC90ZD48L3RyPiI7DQogICAgICAgICAgICAgICAgZmx1c2goKTsNCiAgICAgICAgICAgICAgICAkY291bnQrKzsNCiAgICAgICAgICAgICAgICAkbD0kbD8wOjE7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBlY2hvICI8L3RhYmxlPiI7DQogICAgICAgIH0NCiAgICAgICAgZWNobyAiPC9jZW50ZXI+IjsgDQogICAgfQ0KIA0KICAgIGlmKGlzc2V0KCRfUE9TVFsncDEnXSkgJiYgJF9QT1NUWydwMSddPT0nd2hvbGUnKQ0KICAgIHsNCiAgICAgICAgZWNobyAiPGNlbnRlcj4iOw0KICAgICAgICBAbWtkaXIoJ0JIUF9zeW0nLDA3NzcpOw0KICAgICAgICAkaGR0ICA9ICJPcHRpb25zIGFsbFxuRGlyZWN0b3J5SW5kZXggU3V4Lmh0bWxcbkFkZFR5cGUgdGV4dC9wbGFpbiAucGhwXG5BZGRIYW5kbGVyIHNlcnZlci1wYXJzZWQgLnBocFxuQWRkVHlwZSB0ZXh0L3BsYWluIC5odG1sXG5BZGRIYW5kbGVyIHR4dCAuaHRtbFxuUmVxdWlyZSBOb25lXG5TYXRpc2Z5IEFueSI7DQogICAgICAgICRoZnAgPUBmb3BlbiAoJ0JIUF9zeW0vLmh0YWNjZXNzJywndycpOw0KICAgICAgICBmd3JpdGUoJGhmcCAsJGhkdCk7DQogICAgICAgIGlmKGZ1bmN0aW9uX2V4aXN0cygnc3ltbGluaycpKSB7DQogICAgICAgICAgICBAc3ltbGluaygnLycsJ0JIUF9zeW0vcm9vdCcpOw0KICAgICAgICB9DQogICAgICAgICRkMG1haW5zID0gQGZpbGUoJy9ldGMvbmFtZWQuY29uZicpOw0KICAgICAgICBpZighJGQwbWFpbnMpIHsNCiAgICAgICAgICAgIGVjaG8gIjxwcmUgY2xhc3M9bWwxIHN0eWxlPSdtYXJnaW4tdG9wOjVweCc+IyBDYW50IGFjY2VzcyB0aGlzIGZpbGUgb24gc2VydmVyIC0+IFsgL2V0Yy9uYW1lZC5jb25mIF08L3ByZT48L2NlbnRlcj4iOw0KICAgICAgICAgICAgZWNobyAiPHRhYmxlIGFsaWduPSdjZW50ZXInIHdpZHRoPSc0MCUnIGNsYXNzPSdtYWluJz48dHI+PHRoPiBDb3VudCA8L3RoPjx0aD4gRG9tYWlucyA8L3RoPjx0aD4gVXNlciA8L3RoPjx0aD4gU3ltbGluayA8L3RoPjwvdHI+IjsNCiAgICAgICAgICAgICRkdCA9IGZpbGUoJy9ldGMvcGFzc3dkJyk7DQogICAgICAgICAgICAkbD0wOw0KICAgICAgICAgICAgZm9yZWFjaCgkZHQgYXMgJGQpIHsNCiAgICAgICAgICAgICAgICAkciA9IGV4cGxvZGUoJzonLCRkKTsNCiAgICAgICAgICAgICAgICBpZihzdHJwb3MoJHJbNV0sJ2hvbWUnKSkgew0KICAgICAgICAgICAgICAgICAgICBlY2hvICI8dHIiLigkbD8nIGNsYXNzPWwxJzonJykuIj48dGQ+Ii4kai4iPC90ZD48dGQ+LS0tPC90ZD48dGQ+Ii4kclswXS4iPC90ZD48dGQ+PGEgaHJlZj0nQkhQX3N5bS9yb290Ii4kcls1XS4iL3B1YmxpY19odG1sJyB0YXJnZXQ9J19ibGFuayc+c3ltbGluazwvYT48L3RkPjwvdHI+IjsNCiAgICAgICAgICAgICAgICAgICAgJGw9JGw/MDoxOw0KICAgICAgICAgICAgICAgICAgICAkaisrOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0gICAgICAgICAgICANCiAgICAgICAgICAgIGVjaG8gJzwvdGFibGU+JzsNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgIGVjaG8gIjx0YWJsZSBhbGlnbj0nY2VudGVyJyB3aWR0aD0nNDAlJyBjbGFzcz0nbWFpbic+PHRyPjx0aD4gQ291bnQgPC90aD48dGg+IERvbWFpbnMgPC90aD48dGg+IFVzZXIgPC90aD48dGg+IFN5bWxpbmsgPC90aD48L3RyPiI7DQogICAgICAgICAgICAkY291bnQ9MTsNCiAgICAgICAgICAgICRtY2sgPSBhcnJheSgpOw0KICAgICAgICAgICAgZm9yZWFjaCgkZDBtYWlucyBhcyAkZDBtYWluKXsNCiAgICAgICAgICAgICAgICBpZihAZXJlZ2koJ3pvbmUnLCRkMG1haW4pKXsNCiAgICAgICAgICAgICAgICAgICAgcHJlZ19tYXRjaF9hbGwoJyN6b25lICIoLiopIiMnLCRkMG1haW4sJGRvbWFpbik7DQogICAgICAgICAgICAgICAgICAgIGZsdXNoKCk7DQogICAgICAgICAgICAgICAgICAgIGlmKHN0cmxlbih0cmltKCRkb21haW5bMV1bMF0pKSA+Mil7DQogICAgICAgICAgICAgICAgICAgICAgICAkbWNrW10gPSAkZG9tYWluWzFdWzBdOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgJG1jayA9IGFycmF5X3VuaXF1ZSgkbWNrKTsNCiAgICAgICAgICAgICR1c3IgPSBhcnJheSgpOw0KICAgICAgICAgICAgJGRtbiA9IGFycmF5KCk7DQogICAgICAgICAgICBmb3JlYWNoKCRtY2sgYXMgJG8pIHsNCiAgICAgICAgICAgICAgICAkaW5mb3MgPSBAcG9zaXhfZ2V0cHd1aWQoZmlsZW93bmVyKCIvZXRjL3ZhbGlhc2VzLyIuJG8pKTsNCiAgICAgICAgICAgICAgICAkdXNyW10gPSAkaW5mb3NbJ25hbWUnXTsNCiAgICAgICAgICAgICAgICAkZG1uW10gPSAkbzsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGFycmF5X211bHRpc29ydCgkdXNyLCRkbW4pOw0KICAgICAgICAgICAgJGR0ID0gZmlsZSgnL2V0Yy9wYXNzd2QnKTsNCiAgICAgICAgICAgICRwYXNzd2QgPSBhcnJheSgpOw0KICAgICAgICAgICAgZm9yZWFjaCgkZHQgYXMgJGQpIHsNCiAgICAgICAgICAgICAgICAkciA9IGV4cGxvZGUoJzonLCRkKTsNCiAgICAgICAgICAgICAgICBpZihzdHJwb3MoJHJbNV0sJ2hvbWUnKSkgew0KICAgICAgICAgICAgICAgICAgICAkcGFzc3dkWyRyWzBdXSA9ICRyWzVdOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgICRsPTA7DQogICAgICAgICAgICAkaj0xOw0KICAgICAgICAgICAgZm9yZWFjaCgkdXNyIGFzICRyKSB7DQogICAgICAgICAgICAgICAgZWNobyAiPHRyIi4oJGw/JyBjbGFzcz1sMSc6JycpLiI+PHRkPiIuJGNvdW50KysuIjwvdGQ+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjxhIHRhcmdldD0nX2JsYW5rJyBocmVmPWh0dHA6Ly8iLiRkbW5bJGotMV0uJy8+Jy4kZG1uWyRqLTFdLicgPC9hPjwvdGQ+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPicuJHIuIjwvdGQ+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjxhIGhyZWY9J0JIUF9zeW0vcm9vdCIuJHBhc3N3ZFskcl0uIi9wdWJsaWNfaHRtbCcgdGFyZ2V0PSdfYmxhbmsnPnN5bWxpbms8L2E+PC90ZD48L3RyPiI7DQogICAgICAgICAgICAgICAgZmx1c2goKTsNCiAgICAgICAgICAgICAgICAkbD0kbD8wOjE7DQogICAgICAgICAgICAgICAgJGorKzsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGVjaG8gJzwvdGFibGU+JzsNCiAgICAgICAgfQ0KICAgICAgICBlY2hvICI8L2NlbnRlcj4iOyAgICANCiAgICB9DQogDQogICAgaWYoaXNzZXQoJF9QT1NUWydwMSddKSAmJiAkX1BPU1RbJ3AxJ109PSdjb25maWcnKQ0KICAgIHsNCiAgICAgICAgZWNobyAiPGNlbnRlcj4iOw0KICAgICAgICBAbWtkaXIoJ0JIUF9zeW0nLDA3NzcpOw0KICAgICAgICAkaGR0ID0gIk9wdGlvbnMgYWxsIFxuIERpcmVjdG9yeUluZGV4IFN1eC5odG1sIFxuIEFkZFR5cGUgdGV4dC9wbGFpbiAucGhwIFxuIEFkZEhhbmRsZXIgc2VydmVyLXBhcnNlZCAucGhwIFxuICBBZGRUeXBlIHRleHQvcGxhaW4gLmh0bWwgXG4gQWRkSGFuZGxlciB0eHQgLmh0bWwgXG4gUmVxdWlyZSBOb25lIFxuIFNhdGlzZnkgQW55IjsNCiAgICAgICAgJGhmcCA9IEBmb3BlbiAoJ0JIUF9zeW0vLmh0YWNjZXNzJywndycpOw0KICAgICAgICBAZndyaXRlKCRoZnAgLCRoZHQpOw0KICAgICAgICBpZihmdW5jdGlvbl9leGlzdHMoJ3N5bWxpbmsnKSkgew0KICAgICAgICAgICAgQHN5bWxpbmsoJy8nLCdCSFBfc3ltL3Jvb3QnKTsNCiAgICAgICAgfQ0KICAgICAgICAkZDBtYWlucyA9IEBmaWxlKCcvZXRjL25hbWVkLmNvbmYnKTsNCiAgICAgICAgaWYoISRkMG1haW5zKSB7DQogICAgICAgICAgICBlY2hvICI8cHJlIGNsYXNzPW1sMSBzdHlsZT0nbWFyZ2luLXRvcDo1cHgnPiMgQ2FudCBhY2Nlc3MgdGhpcyBmaWxlIG9uIHNlcnZlciAtPiBbIC9ldGMvbmFtZWQuY29uZiBdPC9wcmU+PC9jZW50ZXI+IjsNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgIGVjaG8gIjx0YWJsZSBhbGlnbj0nY2VudGVyJyB3aWR0aD0nNDAlJyBjbGFzcz0nbWFpbicgPjx0cj48dGg+IENvdW50IDwvdGg+PHRoPiBEb21haW4gPC90aDx0aD4gVXNlciA8L3RoPj48dGg+IFNjcmlwdCA8L3RoPjwvdHI+IjsNCiAgICAgICAgICAgICRjb3VudCA9IDE7DQogICAgICAgICAgICAkbD0wOw0KICAgICAgICAgICAgZm9yZWFjaCgkZDBtYWlucyBhcyAkZDBtYWluKXsNCiAgICAgICAgICAgICAgICBpZihAZXJlZ2koJ3pvbmUnLCRkMG1haW4pKXsNCiAgICAgICAgICAgICAgICAgICAgcHJlZ19tYXRjaF9hbGwoJyN6b25lICIoLiopIiMnLCRkMG1haW4sJGRvbWFpbik7DQogICAgICAgICAgICAgICAgICAgIGZsdXNoKCk7DQogICAgICAgICAgICAgICAgICAgIGlmKHN0cmxlbih0cmltKCRkb21haW5bMV1bMF0pKT4yKXsNCiAgICAgICAgICAgICAgICAgICAgICAgICR1c2VyID0gcG9zaXhfZ2V0cHd1aWQoQGZpbGVvd25lcignL2V0Yy92YWxpYXNlcy8nLiRkb21haW5bMV1bMF0pKTsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgJGMxID0gJGJ1cmwuJy9CSFBfc3ltL3Jvb3QvaG9tZS8nLiR1c2VyWyduYW1lJ10uJy9wdWJsaWNfaHRtbC93cC1jb25maWcucGhwJzsNCiAgICAgICAgICAgICAgICAgICAgICAgICRjaDAxID0gZ2V0X2hlYWRlcnMoJGMxKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICRjZjAxID0gJGNoMDFbMF07DQogICAgICAgICAgICAgICAgICAgICAgICAkYzIgPSAkYnVybC4nL0JIUF9zeW0vcm9vdC9ob21lLycuJHVzZXJbJ25hbWUnXS4nL3B1YmxpY19odG1sL2Jsb2cvd3AtY29uZmlnLnBocCc7DQogICAgICAgICAgICAgICAgICAgICAgICAkY2gwMiA9IGdldF9oZWFkZXJzKCRjMik7DQogICAgICAgICAgICAgICAgICAgICAgICAkY2YwMiA9ICRjaDAyWzBdOw0KICAgICAgICAgICAgICAgICAgICAgICAgJGMzID0gJGJ1cmwuJy9CSFBfc3ltL3Jvb3QvaG9tZS8nLiR1c2VyWyduYW1lJ10uJy9wdWJsaWNfaHRtbC9jb25maWd1cmF0aW9uLnBocCc7DQogICAgICAgICAgICAgICAgICAgICAgICAkY2gwMyA9IGdldF9oZWFkZXJzKCRjMyk7DQogICAgICAgICAgICAgICAgICAgICAgICAkY2YwMyA9ICRjaDAzWzBdOw0KICAgICAgICAgICAgICAgICAgICAgICAgJGM0ID0gJGJ1cmwuJy9CSFBfc3ltL3Jvb3QvaG9tZS8nLiR1c2VyWyduYW1lJ10uJy9wdWJsaWNfaHRtbC9qb29tbGEvY29uZmlndXJhdGlvbi5waHAnOw0KICAgICAgICAgICAgICAgICAgICAgICAgJGNoMDQgPSBnZXRfaGVhZGVycygkYzQpOw0KICAgICAgICAgICAgICAgICAgICAgICAgJGNmMDQgPSAkY2gwNFswXTsNCiAgICAgICAgICAgICAgICAgICAgICAgICRjNSA9ICRidXJsLicvQkhQX3N5bS9yb290L2hvbWUvJy4kdXNlclsnbmFtZSddLicvcHVibGljX2h0bWwvaW5jbHVkZXMvY29uZmlnLnBocCc7DQogICAgICAgICAgICAgICAgICAgICAgICAkY2gwNSA9IGdldF9oZWFkZXJzKCRjNSk7DQogICAgICAgICAgICAgICAgICAgICAgICAkY2YwNSA9ICRjaDA1WzBdOw0KICAgICAgICAgICAgICAgICAgICAgICAgJGM2ID0gJGJ1cmwuJy9CSFBfc3ltL3Jvb3QvaG9tZS8nLiR1c2VyWyduYW1lJ10uJy9wdWJsaWNfaHRtbC92Yi9pbmNsdWRlcy9jb25maWcucGhwJzsNCiAgICAgICAgICAgICAgICAgICAgICAgICRjaDA2ID0gZ2V0X2hlYWRlcnMoJGM2KTsNCiAgICAgICAgICAgICAgICAgICAgICAgICRjZjA2ID0gJGNoMDZbMF07DQogICAgICAgICAgICAgICAgICAgICAgICAkYzcgPSAkYnVybC4nL0JIUF9zeW0vcm9vdC9ob21lLycuJHVzZXJbJ25hbWUnXS4nL3B1YmxpY19odG1sL2ZvcnVtL2luY2x1ZGVzL2NvbmZpZy5waHAnOw0KICAgICAgICAgICAgICAgICAgICAgICAgJGNoMDcgPSBnZXRfaGVhZGVycygkYzcpOw0KICAgICAgICAgICAgICAgICAgICAgICAgJGNmMDcgPSAkY2gwN1swXTsNCiAgICAgICAgICAgICAgICAgICAgICAgICRjOCA9ICRidXJsLicvQkhQX3N5bS9yb290L2hvbWUvJy4kdXNlclsnbmFtZSddLidwdWJsaWNfaHRtbC9jbGllbnRzL2NvbmZpZ3VyYXRpb24ucGhwJzsNCiAgICAgICAgICAgICAgICAgICAgICAgICRjaDA4ID0gZ2V0X2hlYWRlcnMoJGM4KTsNCiAgICAgICAgICAgICAgICAgICAgICAgICRjZjA4ID0gJGNoMDhbMF07DQogICAgICAgICAgICAgICAgICAgICAgICAkYzkgPSAkYnVybC4nL0JIUF9zeW0vcm9vdC9ob21lLycuJHVzZXJbJ25hbWUnXS4nL3B1YmxpY19odG1sL3N1cHBvcnQvY29uZmlndXJhdGlvbi5waHAnOw0KICAgICAgICAgICAgICAgICAgICAgICAgJGNoMDkgPSBnZXRfaGVhZGVycygkYzkpOw0KICAgICAgICAgICAgICAgICAgICAgICAgJGNmMDkgPSAkY2gwOVswXTsNCiAgICAgICAgICAgICAgICAgICAgICAgICRjMTAgPSAkYnVybC4nL0JIUF9zeW0vcm9vdC9ob21lLycuJHVzZXJbJ25hbWUnXS4nL3B1YmxpY19odG1sL2NsaWVudC9jb25maWd1cmF0aW9uLnBocCc7DQogICAgICAgICAgICAgICAgICAgICAgICAkY2gxMCA9IGdldF9oZWFkZXJzKCRjMTApOw0KICAgICAgICAgICAgICAgICAgICAgICAgJGNmMTAgPSAkY2gxMFswXTsNCiAgICAgICAgICAgICAgICAgICAgICAgICRjMTEgPSAkYnVybC4nL0JIUF9zeW0vcm9vdC9ob21lLycuJHVzZXJbJ25hbWUnXS4nL3B1YmxpY19odG1sL3N1Ym1pdHRpY2tldC5waHAnOw0KICAgICAgICAgICAgICAgICAgICAgICAgJGNoMTEgPSBnZXRfaGVhZGVycygkYzExKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICRjZjExID0gJGNoMTFbMF07DQogICAgICAgICAgICAgICAgICAgICAgICAkYzEyID0gJGJ1cmwuJy9CSFBfc3ltL3Jvb3QvaG9tZS8nLiR1c2VyWyduYW1lJ10uJy9wdWJsaWNfaHRtbC9jbGllbnQvY29uZmlndXJhdGlvbi5waHAnOw0KICAgICAgICAgICAgICAgICAgICAgICAgJGNoMTIgPSBnZXRfaGVhZGVycygkYzEyKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICRjZjEyID0gJGNoMTJbMF07DQogICAgICAgICAgICAgICAgICAgICAgICAkYzEzID0gJGJ1cmwuJy9CSFBfc3ltL3Jvb3QvaG9tZS8nLiR1c2VyWyduYW1lJ10uJy9wdWJsaWNfaHRtbC9pbmNsdWRlcy9jb25maWd1cmUucGhwJzsNCiAgICAgICAgICAgICAgICAgICAgICAgICRjaDEzID0gZ2V0X2hlYWRlcnMoJGMxMyk7DQogICAgICAgICAgICAgICAgICAgICAgICAkY2YxMyA9ICRjaDEzWzBdOw0KICAgICAgICAgICAgICAgICAgICAgICAgJGMxNCA9ICRidXJsLicvQkhQX3N5bS9yb290L2hvbWUvJy4kdXNlclsnbmFtZSddLicvcHVibGljX2h0bWwvaW5jbHVkZS9hcHBfY29uZmlnLnBocCc7DQogICAgICAgICAgICAgICAgICAgICAgICAkY2gxNCA9IGdldF9oZWFkZXJzKCRjMTQpOw0KICAgICAgICAgICAgICAgICAgICAgICAgJGNmMTQgPSAkY2gxNFswXTsNCiAgICAgICAgICAgICAgICAgICAgICAgICRjMTUgPSAkYnVybC4nL0JIUF9zeW0vcm9vdC9ob21lLycuJHVzZXJbJ25hbWUnXS4nL3B1YmxpY19odG1sL3NpdGVzL2RlZmF1bHQvc2V0dGluZ3MucGhwJzsNCiAgICAgICAgICAgICAgICAgICAgICAgICRjaDE1ID0gZ2V0X2hlYWRlcnMoJGMxNSk7DQogICAgICAgICAgICAgICAgICAgICAgICAkY2YxNSA9ICRjaDE1WzBdOw0KICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAkb3V0ID0gJyZuYnNwOyc7DQogICAgICAgICAgICAgICAgICAgICAgICBpZihzdHJwb3MoJGNmMDEsJzIwMCcpID09IHRydWUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAgICRvdXQgPSAiPGEgaHJlZj0nIi4kYzEuIicgdGFyZ2V0PSdfYmxhbmsnPldvcmRwcmVzczwvYT4iOyAgIH0gDQogICAgICAgICAgICAgICAgICAgICAgICBlbHNlaWYoc3RycG9zKCRjZjAyLCcyMDAnKSA9PSB0cnVlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAgICRvdXQgPSAiPGEgaHJlZj0nIi4kYzIuIicgdGFyZ2V0PSdfYmxhbmsnPldvcmRwcmVzczwvYT4iOyAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VpZihzdHJwb3MoJGNmMDMsJzIwMCcpID09IHRydWUgJiYgc3RycG9zKCRjZjExLCcyMDAnKSA9PSB0cnVlKSB7ICAgJG91dCA9ICIgPGEgaHJlZj0nIi4kYzExLiInIHRhcmdldD0nX2JsYW5rJz5XSE1DUzwvYT4iOyAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZWlmKHN0cnBvcygkY2YwOSwnMjAwJykgPT0gdHJ1ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgICAkb3V0ID0gIiA8YSBocmVmPSciLiRjOS4iJyB0YXJnZXQ9J19ibGFuayc+V0hNQ1M8L2E+IjsgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICBlbHNlaWYoc3RycG9zKCRjZjEwLCcyMDAnKSA9PSB0cnVlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAgICRvdXQgPSAiIDxhIGhyZWY9JyIuJGMxMC4iJyB0YXJnZXQ9J19ibGFuayc+V0hNQ1M8L2E+IjsgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VpZihzdHJwb3MoJGNmMDMsJzIwMCcpID09IHRydWUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICAgJG91dCA9ICIgPGEgaHJlZj0nIi4kYzMuIicgdGFyZ2V0PSdfYmxhbmsnPkpvb21sYTwvYT4iOyAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZWlmKHN0cnBvcygkY2YwNCwnMjAwJykgPT0gdHJ1ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgICAkb3V0ID0gIiA8YSBocmVmPSciLiRjNC4iJyB0YXJnZXQ9J19ibGFuayc+Sm9vbWxhPC9hPiI7ICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICBlbHNlaWYoc3RycG9zKCRjZjA1LCcyMDAnKSA9PSB0cnVlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAgICRvdXQgPSAiIDxhIGhyZWY9JyIuJGM1LiInIHRhcmdldD0nX2JsYW5rJz52QnVsbGV0aW48L2E+IjsgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VpZihzdHJwb3MoJGNmMDYsJzIwMCcpID09IHRydWUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICAgJG91dCA9ICIgPGEgaHJlZj0nIi4kYzYuIicgdGFyZ2V0PSdfYmxhbmsnPnZCdWxsZXRpbjwvYT4iOyAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZWlmKHN0cnBvcygkY2YwNywnMjAwJykgPT0gdHJ1ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgICAkb3V0ID0gIiA8YSBocmVmPSciLiRjNy4iJyB0YXJnZXQ9J19ibGFuayc+dkJ1bGxldGluPC9hPiI7ICB9DQogICAgICAgICAgICAgICAgICAgICAgICBlbHNlaWYoc3RycG9zKCRjZjA4LCcyMDAnKSA9PSB0cnVlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAgICRvdXQgPSAiIDxhIGhyZWY9JyIuJGM3LiInIHRhcmdldD0nX2JsYW5rJz5DbGllbnQgQXJlYTwvYT4iOyAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZWlmKHN0cnBvcygkY2YxMiwnMjAwJykgPT0gdHJ1ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgICAkb3V0ID0gIiA8YSBocmVmPSciLiRjNy4iJyB0YXJnZXQ9J19ibGFuayc+Q2xpZW50IEFyZWE8L2E+IjsgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VpZihzdHJwb3MoJGNmMTMsJzIwMCcpID09IHRydWUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICAgJG91dCA9ICIgPGEgaHJlZj0nIi4kYzcuIicgdGFyZ2V0PSdfYmxhbmsnPm9zQ29tbWVyY2UvWmVuIENhcnQ8L2E+IjsgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VpZihzdHJwb3MoJGNmMTQsJzIwMCcpID09IHRydWUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICAgJG91dCA9ICIgPGEgaHJlZj0nIi4kYzcuIicgdGFyZ2V0PSdfYmxhbmsnPk1hZ2VudG88L2E+IjsgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VpZihzdHJwb3MoJGNmMTUsJzIwMCcpID09IHRydWUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICAgJG91dCA9ICIgPGEgaHJlZj0nIi4kYzcuIicgdGFyZ2V0PSdfYmxhbmsnPkRydXBhbDwvYT4iOyAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICBlY2hvICc8dHInLigkbD8nIGNsYXNzPWwxJzonJykuJz48dGQ+Jy4kY291bnQrKy4nPC90ZD48dGQ+PGEgaHJlZj1odHRwOi8vd3d3LicuJGRvbWFpblsxXVswXS4nLz4nLiRkb21haW5bMV1bMF0uJzwvYT48L3RkPjx0ZD4nLiR1c2VyWyduYW1lJ10uJzwvdGQ+PHRkPicuJG91dC4nPC90ZD48L3RyPic7DQogICAgICAgICAgICAgICAgICAgICAgICBmbHVzaCgpOw0KICAgICAgICAgICAgICAgICAgICAgICAgJGw9JGw/MDoxOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgZWNobyAiPC90YWJsZT4iOw0KICAgICAgICB9DQogICAgICAgIGVjaG8gIjwvY2VudGVyPiI7ICAgDQogICAgfQ0KICAgIGVjaG8gIjwvZGl2PiI7DQogICAgcHJpbnRGb290ZXIoKTsNCn0gDQoNCmZ1bmN0aW9uIGFjdGlvbkJ5cGFzcygpIHsNCiAgICBwcmludEhlYWRlcigpOw0KICAgIGVjaG8gJzxoMT5TYWZlIE1vZGU8L2gxPic7DQogICAgZWNobyAnPGRpdiBjbGFzcz0iY29udGVudCI+JzsNCiAgICBlY2hvICI8ZGl2IGNsYXNzPWhlYWRlcj48Y2VudGVyPjxoMz48c3Bhbj58IFNBRkUgTU9ERSBBTkQgTU9EIFNFQ1VSSVRZIERJU0FCTEVEIEFORCBQRVJMIDUwMCBJTlRFUk5BTCBFUlJPUiBCWVBBU1MgfDwvc3Bhbj48L2gzPkZvbGxvd2luZyBwaHAuaW5pIGFuZCAuaHRhY2Nlc3MobW9kKSBhbmQgcGVybCguaHRhY2Nlc3MpW2NvbnZlcnQgcGVybCBleHRlbnRpb24gKi5wbCA9PiAqLnNoICBdIGZpbGVzIGNyZWF0ZSBpbiBmb2xsb3dpbmcgZGlyPGJyPnwgIi4kR0xPQkFMU1snY3dkJ10uIiB8PGJyPjxiciAvPiI7DQogICAgZWNobyAnPGEgaHJlZj0jIG9uY2xpY2s9ImcobnVsbCxudWxsLFwncGhwLmluaVwnLG51bGwpIj58IFBIUC5JTkkgfCA8L2E+PGEgaHJlZj0jIG9uY2xpY2s9ImcobnVsbCxudWxsLG51bGwsXCdpbmlcJykiPnwgLmh0YWNjZXNzKE1vZCkgfCA8L2E+PGEgaHJlZj0jIG9uY2xpY2s9ImcobnVsbCxudWxsLG51bGwsbnVsbCxcJ3NoXCcpIj58IC5odGFjY2VzcyhwZXJsKSB8IDwvYT48L2NlbnRlcj4nOw0KICAgIGlmKCFlbXB0eSgkX1BPU1RbJ3AyJ10pICYmIGlzc2V0KCRfUE9TVFsncDInXSkpDQogICAgew0KICAgICAgICAkZmlsPWZvcGVuKCRHTE9CQUxTWydjd2QnXS4iLmh0YWNjZXNzIiwidyIpOw0KICAgICAgICBmd3JpdGUoJGZpbCwnPElmTW9kdWxlIG1vZF9zZWN1cml0eS5jPg0KICAgICAgICAgICAgU2VjLS0tLS0tRW5naW5lIE9mZg0KICAgICAgICAgICAgU2VjLS0tLS0tU2NhblBPU1QgT2ZmDQogICAgICAgICAgICA8L0lmTW9kdWxlPicpOw0KICAgICAgICBmY2xvc2UoJGZpbCk7DQogICB9DQogICBpZighZW1wdHkoJF9QT1NUWydwMSddKSYmIGlzc2V0KCRfUE9TVFsncDEnXSkpDQogICB7DQogICAgICAgICRmaWw9Zm9wZW4oJEdMT0JBTFNbJ2N3ZCddLiJwaHAuaW5pIiwidyIpOw0KICAgICAgICBmd3JpdGUoJGZpbCwnc2FmZV9tb2RlPU9GRg0KICAgICAgICAgICAgZGlzYWJsZV9mdW5jdGlvbnM9Tk9ORScpOw0KICAgICAgICBmY2xvc2UoJGZpbCk7DQogICAgfQ0KICAgIGlmKCFlbXB0eSgkX1BPU1RbJ3AzJ10pICYmIGlzc2V0KCRfUE9TVFsncDMnXSkpDQogICAgew0KICAgICAgICAkZmlsPWZvcGVuKCRHTE9CQUxTWydjd2QnXS4iLmh0YWNjZXNzIiwidyIpOw0KICAgICAgICBmd3JpdGUoJGZpbCwnT3B0aW9ucyBGb2xsb3dTeW1MaW5rcyBNdWx0aVZpZXdzIEluZGV4ZXMgRXhlY0NHSQ0KICAgICAgICBBZGRUeXBlIGFwcGxpY2F0aW9uL3gtaHR0cGQtY2dpIC5zaA0KICAgICAgICBBZGRIYW5kbGVyIGNnaS1zY3JpcHQgLnBsDQogICAgICAgIEFkZEhhbmRsZXIgY2dpLXNjcmlwdCAucGwnKTsNCiAgICAgICAgZmNsb3NlKCRmaWwpOyANCiAgICB9DQogICAgZWNobyAiPGJyPjxiciAvPjxiciAvPjwvZGl2PiI7DQogICAgZWNobyAnPC9kaXY+JzsNCiAgICBwcmludEZvb3RlcigpOw0KfQ0KDQpmdW5jdGlvbiBhY3Rpb25EZG9zKCl7DQogICAgcHJpbnRIZWFkZXIoKTsNCiAgICBlY2hvICc8aDE+RERvUzwvaDE+JzsNCiAgICBlY2hvICc8ZGl2IGNsYXNzPSJjb250ZW50Ij4nOw0KICAgIGVjaG8gIjxkaXYgY2xhc3M9aGVhZGVyPjxjZW50ZXI+PGgzPjxzcGFuPlByZW1pdW0gRmVhdHVyZXMhISE8L3NwYW4+PC9oMz5XaWxsIGNvbWUgaW4gbmV4dCB2ZXJzaW9uLjxicj48YnIgLz4iOw0KICAgIGVjaG8gIjxicj48YnIgLz48YnIgLz48L2Rpdj4iOw0KICAgIGVjaG8gJzwvZGl2Pic7DQogICAgcHJpbnRGb290ZXIoKTsNCn0NCg0KZnVuY3Rpb24gYWN0aW9uTWFpbCgpew0KICAgIHByaW50SGVhZGVyKCk7DQogICAgZWNobyAnPGgxPk1hc3MgTWFpbGVyIGFuZCBNYWlsIEJvbWJlcjwvaDE+JzsNCiAgICBlY2hvICc8ZGl2IGNsYXNzPSJjb250ZW50Ij4nOw0KICAgIGVjaG8gIjxkaXYgY2xhc3M9aGVhZGVyPjxjZW50ZXI+PGgzPjxzcGFuPlByZW1pdW0gRmVhdHVyZXMhISE8L3NwYW4+PC9oMz5XaWxsIGNvbWUgaW4gbmV4dCB2ZXJzaW9uLjxicj48YnIgLz4iOw0KICAgIGVjaG8gIjxicj48YnIgLz48YnIgLz48L2Rpdj4iOw0KICAgIGVjaG8gJzwvZGl2Pic7DQogICAgcHJpbnRGb290ZXIoKTsgICAgDQp9DQoNCmZ1bmN0aW9uIGFjdGlvbkluamVjdG9yKCl7DQogICAgcHJpbnRIZWFkZXIoKTsNCiAgICBlY2hvICc8aDE+TWFzcyBDb2RlIEluamVjdG9yPC9oMT4nOw0KICAgIGVjaG8gJzxkaXYgY2xhc3M9ImNvbnRlbnQiPic7DQogICAgDQogICAgaWYoc3RyaXN0cihwaHBfdW5hbWUoKSwiV2luZG93cyIpKSB7ICREUyA9ICJcXCI7IH0gZWxzZSBpZihzdHJpc3RyKHBocF91bmFtZSgpLCJMaW51eCIpKSB7ICREUyA9ICcvJzsgfQ0KICAgIGZ1bmN0aW9uIGdldF9zdHJ1Y3R1cmUoJHBhdGgsJGRlcHRoKSB7DQogICAgICAgIGdsb2JhbCAkRFM7DQogICAgICAgICRyZXMgPSBhcnJheSgpOw0KICAgICAgICBpZihpbl9hcnJheSgwLCAkZGVwdGgpKSB7ICRyZXNbXSA9ICRwYXRoOyB9DQogICAgICAgIGlmKGluX2FycmF5KDEsICRkZXB0aCkgb3IgaW5fYXJyYXkoMiwgJGRlcHRoKSBvciBpbl9hcnJheSgzLCAkZGVwdGgpKSB7DQogICAgICAgICAgICAkdG1wMSA9IGdsb2IoJHBhdGguJERTLicqJyxHTE9CX09OTFlESVIpOw0KICAgICAgICAgICAgaWYoaW5fYXJyYXkoMSwgJGRlcHRoKSkgeyAkcmVzID0gYXJyYXlfbWVyZ2UoJHJlcywkdG1wMSk7IH0NCiAgICAgICAgfQ0KICAgICAgICBpZihpbl9hcnJheSgyLCAkZGVwdGgpIG9yIGluX2FycmF5KDMsICRkZXB0aCkpIHsNCiAgICAgICAgICAgICR0bXAyID0gYXJyYXkoKTsNCiAgICAgICAgICAgIGZvcmVhY2goJHRtcDEgYXMgJHQpew0KICAgICAgICAgICAgICAgICR0cDIgPSBnbG9iKCR0LiREUy4nKicsR0xPQl9PTkxZRElSKTsNCiAgICAgICAgICAgICAgICAkdG1wMiA9IGFycmF5X21lcmdlKCR0bXAyLCAkdHAyKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGlmKGluX2FycmF5KDIsICRkZXB0aCkpIHsgJHJlcyA9IGFycmF5X21lcmdlKCRyZXMsJHRtcDIpOyB9DQogICAgICAgIH0NCiAgICAgICAgaWYoaW5fYXJyYXkoMywgJGRlcHRoKSkgew0KICAgICAgICAgICAgJHRtcDMgPSBhcnJheSgpOw0KICAgICAgICAgICAgZm9yZWFjaCgkdG1wMiBhcyAkdCl7DQogICAgICAgICAgICAgICAgJHRwMyA9IGdsb2IoJHQuJERTLicqJyxHTE9CX09OTFlESVIpOw0KICAgICAgICAgICAgICAgICR0bXAzID0gYXJyYXlfbWVyZ2UoJHRtcDMsICR0cDMpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgJHJlcyA9IGFycmF5X21lcmdlKCRyZXMsJHRtcDMpOw0KICAgICAgICB9DQogICAgICAgIHJldHVybiAkcmVzOw0KICAgIH0NCg0KICAgIGlmKGlzc2V0KCRfUE9TVFsnc3VibWl0J10pICYmICRfUE9TVFsnc3VibWl0J109PSdJbmplY3QnKSB7DQogICAgICAgICRuYW1lID0gJF9QT1NUWyduYW1lJ10gPyAkX1BPU1RbJ25hbWUnXSA6ICcqJzsNCiAgICAgICAgJHR5cGUgPSAkX1BPU1RbJ3R5cGUnXSA/ICRfUE9TVFsndHlwZSddIDogJ2h0bWwnOw0KICAgICAgICAkcGF0aCA9ICRfUE9TVFsncGF0aCddID8gJF9QT1NUWydwYXRoJ10gOiBnZXRjd2QoKTsNCiAgICAgICAgJGNvZGUgPSAkX1BPU1RbJ2NvZGUnXSA/ICRfUE9TVFsnY29kZSddIDogJzN4cDFyMyBDeWJlciBBcm15JzsNCiAgICAgICAgJG1vZGUgPSAkX1BPU1RbJ21vZGUnXSA/ICRfUE9TVFsnbW9kZSddIDogJ2EnOw0KICAgICAgICAkZGVwdGggPSBzaXplb2YoJF9QT1NUWydkZXB0aCddKSA/ICRfUE9TVFsnZGVwdGgnXSA6IGFycmF5KCcwJyk7DQogICAgICAgICRkdCA9IGdldF9zdHJ1Y3R1cmUoJHBhdGgsJGRlcHRoKTsNCiAgICAgICAgZm9yZWFjaCAoJGR0IGFzICRkKSB7DQogICAgICAgICAgICBpZigkbW9kZSA9PSAnYScpIHsNCiAgICAgICAgICAgICAgICBpZihmaWxlX3B1dF9jb250ZW50cygkZC4kRFMuJG5hbWUuJy4nLiR0eXBlLCAkY29kZSwgRklMRV9BUFBFTkQpKSB7DQogICAgICAgICAgICAgICAgICAgIGVjaG8gJzxkaXY+PHN0cm9uZz4nLiRkLiREUy4kbmFtZS4nLicuJHR5cGUuJzwvc3Ryb25nPjxzcGFuIHN0eWxlPSJjb2xvcjojYTNlOTU2OyI+IHdhcyBpbmplY3RlZDwvc3Bhbj48L2Rpdj4nOw0KICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgIGVjaG8gJzxkaXY+PHNwYW4gc3R5bGU9ImNvbG9yOnJlZDsiPmZhaWxlZCB0byBpbmplY3Q8L3NwYW4+IDxzdHJvbmc+Jy4kZC4kRFMuJG5hbWUuJy4nLiR0eXBlLic8L3N0cm9uZz48L2Rpdj4nOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgaWYoZmlsZV9wdXRfY29udGVudHMoJGQuJERTLiRuYW1lLicuJy4kdHlwZSwgJGNvZGUpKSB7DQogICAgICAgICAgICAgICAgICAgIGVjaG8gJzxkaXY+PHN0cm9uZz4nLiRkLiREUy4kbmFtZS4nLicuJHR5cGUuJzwvc3Ryb25nPjxzcGFuIHN0eWxlPSJjb2xvcjojYTNlOTU2OyI+IHdhcyBpbmplY3RlZDwvc3Bhbj48L2Rpdj4nOw0KICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgIGVjaG8gJzxkaXY+PHNwYW4gc3R5bGU9ImNvbG9yOnJlZDsiPmZhaWxlZCB0byBpbmplY3Q8L3NwYW4+IDxzdHJvbmc+Jy4kZC4kRFMuJG5hbWUuJy4nLiR0eXBlLic8L3N0cm9uZz48L2Rpdj4nOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0gICAgICAgIA0KICAgICAgICB9DQogICAgfSBlbHNlIHsNCiAgICAgICAgZWNobyAnPGZvcm0gbWV0aG9kPSJwb3N0IiBhY3Rpb249IiI+DQogICAgICAgICAgICAgICAgPHRhYmxlIGFsaWduPSJjZW50ZXIiPg0KICAgICAgICAgICAgICAgICAgICA8dHI+DQogICAgICAgICAgICAgICAgICAgICAgICA8dGQ+RGlyZWN0b3J5IDogPC90ZD4NCiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48aW5wdXQgY2xhc3M9ImJveCIgbmFtZT0icGF0aCIgdmFsdWU9IicuZ2V0Y3dkKCkuJyIgc2l6ZT0iNTAiLz48L3RkPg0KICAgICAgICAgICAgICAgICAgICA8L3RyPg0KICAgICAgICAgICAgICAgICAgICA8dHI+DQogICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9InRpdGxlIj5Nb2RlIDogPC90ZD4NCiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IHN0eWxlPSJ3aWR0aDogMTAwcHg7IiBuYW1lPSJtb2RlIiBjbGFzcz0iYm94Ij4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iYSI+QXBlbmRlcjwvb3B0aW9uPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJ3Ij5PdmVyd3JpdGVyPC9vcHRpb24+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+DQogICAgICAgICAgICAgICAgICAgICAgICA8L3RkPg0KICAgICAgICAgICAgICAgICAgICA8L3RyPg0KICAgICAgICAgICAgICAgICAgICA8dHI+DQogICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9InRpdGxlIj5GaWxlIE5hbWUgJiBUeXBlIDogPC90ZD4NCiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgc3R5bGU9IndpZHRoOiAxMDBweDsiIG5hbWU9Im5hbWUiIHZhbHVlPSIqIi8+Jm5ic3A7Jm5ic3A7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBzdHlsZT0id2lkdGg6IDEwMHB4OyIgbmFtZT0idHlwZSIgY2xhc3M9ImJveCI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iaHRtbCI+SFRNTDwvb3B0aW9uPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9Imh0bSI+SFRNPC9vcHRpb24+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0icGhwIiBzZWxlY3RlZD0ic2VsZWN0ZWQiPlBIUDwvb3B0aW9uPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9ImFzcCI+QVNQPC9vcHRpb24+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iYXNweCI+QVNQWDwvb3B0aW9uPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9InhtbCI+WE1MPC9vcHRpb24+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0idHh0Ij5UWFQ8L29wdGlvbj4NCiAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PjwvdGQ+DQogICAgICAgICAgICAgICAgICAgIDwvdHI+DQogICAgICAgICAgICAgICAgICAgIDx0cj4NCiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0idGl0bGUiPkNvZGUgSW5qZWN0IERlcHRoIDogPC90ZD4NCiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9ImRlcHRoW10iIHZhbHVlPSIwIiBjaGVja2VkPSJjaGVja2VkIi8+Jm5ic3A7MCZuYnNwOyZuYnNwOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0iZGVwdGhbXSIgdmFsdWU9IjEiLz4mbmJzcDsxJm5ic3A7Jm5ic3A7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSJkZXB0aFtdIiB2YWx1ZT0iMiIvPiZuYnNwOzImbmJzcDsmbmJzcDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9ImRlcHRoW10iIHZhbHVlPSIzIi8+Jm5ic3A7Mw0KICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4NCiAgICAgICAgICAgICAgICAgICAgPC90cj4gICAgICAgIA0KICAgICAgICAgICAgICAgICAgICA8dHI+DQogICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+PHRleHRhcmVhIG5hbWU9ImNvZGUiIGNvbHM9IjcwIiByb3dzPSIxMCIgY2xhc3M9ImJveCI+PC90ZXh0YXJlYT48L3RkPg0KICAgICAgICAgICAgICAgICAgICA8L3RyPiAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICA8dHI+DQogICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiIgc3R5bGU9InRleHQtYWxpZ246IGNlbnRlcjsiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImEiIHZhbHVlPSJJbmplY3RvciI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iYyIgdmFsdWU9IicuaHRtbHNwZWNpYWxjaGFycygkR0xPQkFMU1snY3dkJ10pLiciPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InAxIj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJwMiI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iY2hhcnNldCIgdmFsdWU9IicuKGlzc2V0KCRfUE9TVFsnY2hhcnNldCddKT8kX1BPU1RbJ2NoYXJzZXQnXTonJykuJyI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHN0eWxlPSJwYWRkaW5nIDo1cHg7IHdpZHRoOjEwMHB4OyIgbmFtZT0ic3VibWl0IiB0eXBlPSJzdWJtaXQiIHZhbHVlPSJJbmplY3QiLz48L3RkPg0KICAgICAgICAgICAgICAgICAgICA8L3RyPg0KICAgICAgICAgICAgICAgIDwvdGFibGU+DQogICAgICAgIDwvZm9ybT4nOw0KICAgIH0NCiAgICBlY2hvICc8L2Rpdj4nOw0KICAgIHByaW50Rm9vdGVyKCk7DQp9DQoNCmlmKCBlbXB0eSgkX1BPU1RbJ2EnXSkgKQ0KICAgIGlmKGlzc2V0KCRkZWZhdWx0X2FjdGlvbikgJiYgZnVuY3Rpb25fZXhpc3RzKCdhY3Rpb24nIC4gJGRlZmF1bHRfYWN0aW9uKSkNCiAgICAgICAgJF9QT1NUWydhJ10gPSAkZGVmYXVsdF9hY3Rpb247DQogICAgZWxzZQ0KICAgICAgICAkX1BPU1RbJ2EnXSA9ICdTZWNJbmZvJzsNCmlmKCAhZW1wdHkoJF9QT1NUWydhJ10pICYmIGZ1bmN0aW9uX2V4aXN0cygnYWN0aW9uJyAuICRfUE9TVFsnYSddKSApDQogICAgY2FsbF91c2VyX2Z1bmMoJ2FjdGlvbicgLiAkX1BPU1RbJ2EnXSkNCj8+")); ?>